{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.Wsl4RF0I/b1/gtsam_4.2.0+dfsg-1_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.Wsl4RF0I/b2/gtsam_4.2.0+dfsg-1_amd64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,7 +1,7 @@\n \n 733202199f20a8050d08092113d2e1c2 362388 libdevel optional libgtsam-dev_4.2.0+dfsg-1_amd64.deb\n- 50adcc1eafeb598d7e73ac6ab5dfdb42 14664448 doc optional libgtsam-doc_4.2.0+dfsg-1_all.deb\n+ 705c3d446ef100ec15f49c5377554fb4 14662152 doc optional libgtsam-doc_4.2.0+dfsg-1_all.deb\n 824d16f5eba0ec46e7c6d8654ca92f8f 159940956 debug optional libgtsam4-dbgsym_4.2.0+dfsg-1_amd64.deb\n b92530f1660035cc9614aa6647abc04e 1630812 libs optional libgtsam4_4.2.0+dfsg-1_amd64.deb\n 1129a6874fc2d2664fda3a1a2e52f565 5999540 debug optional python3-gtsam-dbgsym_4.2.0+dfsg-1_amd64.deb\n 53c252911c2c81b306b2fc734ec486f7 5677452 python optional python3-gtsam_4.2.0+dfsg-1_amd64.deb\n"}, {"source1": "libgtsam-doc_4.2.0+dfsg-1_all.deb", "source2": "libgtsam-doc_4.2.0+dfsg-1_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2024-01-09 05:51:35.000000 debian-binary\n--rw-r--r-- 0 0 0 75848 2024-01-09 05:51:35.000000 control.tar.xz\n--rw-r--r-- 0 0 0 14588408 2024-01-09 05:51:35.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 75896 2024-01-09 05:51:35.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 14586064 2024-01-09 05:51:35.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}, {"source1": "line order", "source2": "line order", "unified_diff": "@@ -125,118 +125,118 @@\n usr/share/doc/libgtsam-dev/examples/UGM_chain.cpp\n usr/share/doc/libgtsam-dev/examples/UGM_small.cpp\n usr/share/doc/libgtsam-dev/examples/VisualISAM2Example.cpp.gz\n usr/share/doc/libgtsam-dev/examples/VisualISAMExample.cpp.gz\n usr/share/doc/libgtsam-dev/examples/easyPoint2KalmanFilter.cpp.gz\n usr/share/doc/libgtsam-dev/examples/elaboratePoint2KalmanFilter.cpp.gz\n usr/share/doc/libgtsam-dev/html/a00002.html\n-usr/share/doc/libgtsam-dev/html/a00002.js\n usr/share/doc/libgtsam-dev/html/a00002_source.html\n usr/share/doc/libgtsam-dev/html/a00005.html\n usr/share/doc/libgtsam-dev/html/a00005.js\n+usr/share/doc/libgtsam-dev/html/a00005_source.html\n usr/share/doc/libgtsam-dev/html/a00008.html\n+usr/share/doc/libgtsam-dev/html/a00008.js\n usr/share/doc/libgtsam-dev/html/a00008_source.html\n usr/share/doc/libgtsam-dev/html/a00011.html\n usr/share/doc/libgtsam-dev/html/a00011.js\n usr/share/doc/libgtsam-dev/html/a00011_source.html\n usr/share/doc/libgtsam-dev/html/a00014.html\n+usr/share/doc/libgtsam-dev/html/a00014.js\n usr/share/doc/libgtsam-dev/html/a00014_source.html\n-usr/share/doc/libgtsam-dev/html/a00017.html\n-usr/share/doc/libgtsam-dev/html/a00017.js\n usr/share/doc/libgtsam-dev/html/a00017_source.html\n usr/share/doc/libgtsam-dev/html/a00020.html\n usr/share/doc/libgtsam-dev/html/a00020.js\n usr/share/doc/libgtsam-dev/html/a00020_source.html\n usr/share/doc/libgtsam-dev/html/a00023.html\n usr/share/doc/libgtsam-dev/html/a00023.js\n usr/share/doc/libgtsam-dev/html/a00023_source.html\n+usr/share/doc/libgtsam-dev/html/a00026.html\n+usr/share/doc/libgtsam-dev/html/a00026.js\n usr/share/doc/libgtsam-dev/html/a00026_source.html\n+usr/share/doc/libgtsam-dev/html/a00029.html\n usr/share/doc/libgtsam-dev/html/a00032.html\n+usr/share/doc/libgtsam-dev/html/a00032_source.html\n+usr/share/doc/libgtsam-dev/html/a00035.html\n+usr/share/doc/libgtsam-dev/html/a00035_source.html\n usr/share/doc/libgtsam-dev/html/a00038.html\n usr/share/doc/libgtsam-dev/html/a00038.js\n usr/share/doc/libgtsam-dev/html/a00038_source.html\n usr/share/doc/libgtsam-dev/html/a00041.html\n+usr/share/doc/libgtsam-dev/html/a00041.js\n usr/share/doc/libgtsam-dev/html/a00041_source.html\n usr/share/doc/libgtsam-dev/html/a00044.html\n-usr/share/doc/libgtsam-dev/html/a00047.html\n-usr/share/doc/libgtsam-dev/html/a00047.js\n+usr/share/doc/libgtsam-dev/html/a00044.js\n+usr/share/doc/libgtsam-dev/html/a00044_source.html\n usr/share/doc/libgtsam-dev/html/a00047_source.html\n usr/share/doc/libgtsam-dev/html/a00050.html\n usr/share/doc/libgtsam-dev/html/a00050.js\n usr/share/doc/libgtsam-dev/html/a00053.html\n-usr/share/doc/libgtsam-dev/html/a00053.js\n usr/share/doc/libgtsam-dev/html/a00053_source.html\n usr/share/doc/libgtsam-dev/html/a00056.html\n+usr/share/doc/libgtsam-dev/html/a00056.js\n usr/share/doc/libgtsam-dev/html/a00056_source.html\n usr/share/doc/libgtsam-dev/html/a00059.html\n usr/share/doc/libgtsam-dev/html/a00059.js\n usr/share/doc/libgtsam-dev/html/a00059_source.html\n usr/share/doc/libgtsam-dev/html/a00062.html\n+usr/share/doc/libgtsam-dev/html/a00062.js\n usr/share/doc/libgtsam-dev/html/a00062_source.html\n-usr/share/doc/libgtsam-dev/html/a00065.html\n-usr/share/doc/libgtsam-dev/html/a00065.js\n-usr/share/doc/libgtsam-dev/html/a00065_source.html\n usr/share/doc/libgtsam-dev/html/a00068.html\n usr/share/doc/libgtsam-dev/html/a00068.js\n usr/share/doc/libgtsam-dev/html/a00071.html\n-usr/share/doc/libgtsam-dev/html/a00071_source.html\n+usr/share/doc/libgtsam-dev/html/a00071.js\n usr/share/doc/libgtsam-dev/html/a00074.html\n usr/share/doc/libgtsam-dev/html/a00074.js\n usr/share/doc/libgtsam-dev/html/a00074_source.html\n usr/share/doc/libgtsam-dev/html/a00077.html\n+usr/share/doc/libgtsam-dev/html/a00077.js\n usr/share/doc/libgtsam-dev/html/a00077_source.html\n usr/share/doc/libgtsam-dev/html/a00080.html\n usr/share/doc/libgtsam-dev/html/a00080.js\n usr/share/doc/libgtsam-dev/html/a00080_source.html\n usr/share/doc/libgtsam-dev/html/a00083.html\n-usr/share/doc/libgtsam-dev/html/a00083.js\n-usr/share/doc/libgtsam-dev/html/a00083_source.html\n+usr/share/doc/libgtsam-dev/html/a00086.html\n usr/share/doc/libgtsam-dev/html/a00086_source.html\n usr/share/doc/libgtsam-dev/html/a00089.html\n-usr/share/doc/libgtsam-dev/html/a00089.js\n usr/share/doc/libgtsam-dev/html/a00089_source.html\n usr/share/doc/libgtsam-dev/html/a00092.html\n-usr/share/doc/libgtsam-dev/html/a00092.js\n usr/share/doc/libgtsam-dev/html/a00092_source.html\n usr/share/doc/libgtsam-dev/html/a00095.html\n usr/share/doc/libgtsam-dev/html/a00095.js\n usr/share/doc/libgtsam-dev/html/a00095_source.html\n+usr/share/doc/libgtsam-dev/html/a00098.html\n+usr/share/doc/libgtsam-dev/html/a00098.js\n usr/share/doc/libgtsam-dev/html/a00098_source.html\n usr/share/doc/libgtsam-dev/html/a00101.html\n-usr/share/doc/libgtsam-dev/html/a00104.html\n-usr/share/doc/libgtsam-dev/html/a00104.js\n usr/share/doc/libgtsam-dev/html/a00104_source.html\n usr/share/doc/libgtsam-dev/html/a00107.html\n+usr/share/doc/libgtsam-dev/html/a00107.js\n+usr/share/doc/libgtsam-dev/html/a00107_source.html\n+usr/share/doc/libgtsam-dev/html/a00110.html\n+usr/share/doc/libgtsam-dev/html/a00110.js\n usr/share/doc/libgtsam-dev/html/a00110_source.html\n+usr/share/doc/libgtsam-dev/html/a00113.html\n+usr/share/doc/libgtsam-dev/html/a00113.js\n usr/share/doc/libgtsam-dev/html/a00113_source.html\n usr/share/doc/libgtsam-dev/html/a00116.html\n usr/share/doc/libgtsam-dev/html/a00116.js\n usr/share/doc/libgtsam-dev/html/a00116_source.html\n usr/share/doc/libgtsam-dev/html/a00122.html\n-usr/share/doc/libgtsam-dev/html/a00122.js\n usr/share/doc/libgtsam-dev/html/a00122_source.html\n usr/share/doc/libgtsam-dev/html/a00125.html\n-usr/share/doc/libgtsam-dev/html/a00125.js\n-usr/share/doc/libgtsam-dev/html/a00125_source.html\n-usr/share/doc/libgtsam-dev/html/a00128.html\n usr/share/doc/libgtsam-dev/html/a00131.html\n-usr/share/doc/libgtsam-dev/html/a00131.js\n-usr/share/doc/libgtsam-dev/html/a00131_source.html\n usr/share/doc/libgtsam-dev/html/a00134.html\n-usr/share/doc/libgtsam-dev/html/a00134_source.html\n+usr/share/doc/libgtsam-dev/html/a00134.js\n usr/share/doc/libgtsam-dev/html/a00137.html\n usr/share/doc/libgtsam-dev/html/a00137.js\n usr/share/doc/libgtsam-dev/html/a00137_source.html\n usr/share/doc/libgtsam-dev/html/a00140.html\n usr/share/doc/libgtsam-dev/html/a00140.js\n-usr/share/doc/libgtsam-dev/html/a00143.html\n-usr/share/doc/libgtsam-dev/html/a00143.js\n+usr/share/doc/libgtsam-dev/html/a00140_source.html\n usr/share/doc/libgtsam-dev/html/a00143_source.html\n-usr/share/doc/libgtsam-dev/html/a00146.html\n-usr/share/doc/libgtsam-dev/html/a00146.js\n usr/share/doc/libgtsam-dev/html/a00146_source.html\n usr/share/doc/libgtsam-dev/html/a00149.html\n usr/share/doc/libgtsam-dev/html/a00149_source.html\n usr/share/doc/libgtsam-dev/html/a00152.html\n usr/share/doc/libgtsam-dev/html/a00152.js\n usr/share/doc/libgtsam-dev/html/a00152_source.html\n usr/share/doc/libgtsam-dev/html/a00155.html\n@@ -246,836 +246,836 @@\n usr/share/doc/libgtsam-dev/html/a00158.js\n usr/share/doc/libgtsam-dev/html/a00158_source.html\n usr/share/doc/libgtsam-dev/html/a00161.html\n usr/share/doc/libgtsam-dev/html/a00161.js\n usr/share/doc/libgtsam-dev/html/a00161_source.html\n usr/share/doc/libgtsam-dev/html/a00164.html\n usr/share/doc/libgtsam-dev/html/a00167.html\n-usr/share/doc/libgtsam-dev/html/a00167.js\n-usr/share/doc/libgtsam-dev/html/a00167_source.html\n usr/share/doc/libgtsam-dev/html/a00170.html\n+usr/share/doc/libgtsam-dev/html/a00170.js\n+usr/share/doc/libgtsam-dev/html/a00170_source.html\n usr/share/doc/libgtsam-dev/html/a00173.html\n usr/share/doc/libgtsam-dev/html/a00173.js\n usr/share/doc/libgtsam-dev/html/a00173_source.html\n usr/share/doc/libgtsam-dev/html/a00176.html\n usr/share/doc/libgtsam-dev/html/a00176.js\n usr/share/doc/libgtsam-dev/html/a00176_source.html\n usr/share/doc/libgtsam-dev/html/a00179.html\n usr/share/doc/libgtsam-dev/html/a00179.js\n usr/share/doc/libgtsam-dev/html/a00179_source.html\n usr/share/doc/libgtsam-dev/html/a00182.html\n-usr/share/doc/libgtsam-dev/html/a00182.js\n-usr/share/doc/libgtsam-dev/html/a00185.html\n-usr/share/doc/libgtsam-dev/html/a00185.js\n+usr/share/doc/libgtsam-dev/html/a00185_source.html\n usr/share/doc/libgtsam-dev/html/a00188.html\n usr/share/doc/libgtsam-dev/html/a00188.js\n usr/share/doc/libgtsam-dev/html/a00188_source.html\n usr/share/doc/libgtsam-dev/html/a00191.html\n usr/share/doc/libgtsam-dev/html/a00191.js\n usr/share/doc/libgtsam-dev/html/a00191_source.html\n usr/share/doc/libgtsam-dev/html/a00194.html\n+usr/share/doc/libgtsam-dev/html/a00194.js\n+usr/share/doc/libgtsam-dev/html/a00194_source.html\n usr/share/doc/libgtsam-dev/html/a00197.html\n usr/share/doc/libgtsam-dev/html/a00197.js\n usr/share/doc/libgtsam-dev/html/a00197_source.html\n usr/share/doc/libgtsam-dev/html/a00200.html\n+usr/share/doc/libgtsam-dev/html/a00200.js\n+usr/share/doc/libgtsam-dev/html/a00200_source.html\n usr/share/doc/libgtsam-dev/html/a00203.html\n usr/share/doc/libgtsam-dev/html/a00206.html\n+usr/share/doc/libgtsam-dev/html/a00206.js\n usr/share/doc/libgtsam-dev/html/a00206_source.html\n usr/share/doc/libgtsam-dev/html/a00209.html\n+usr/share/doc/libgtsam-dev/html/a00209.js\n usr/share/doc/libgtsam-dev/html/a00212.html\n usr/share/doc/libgtsam-dev/html/a00215.html\n usr/share/doc/libgtsam-dev/html/a00218.html\n-usr/share/doc/libgtsam-dev/html/a00218_source.html\n usr/share/doc/libgtsam-dev/html/a00221.html\n-usr/share/doc/libgtsam-dev/html/a00221.js\n usr/share/doc/libgtsam-dev/html/a00221_source.html\n usr/share/doc/libgtsam-dev/html/a00224.html\n-usr/share/doc/libgtsam-dev/html/a00224.js\n-usr/share/doc/libgtsam-dev/html/a00224_source.html\n usr/share/doc/libgtsam-dev/html/a00227.html\n usr/share/doc/libgtsam-dev/html/a00227.js\n usr/share/doc/libgtsam-dev/html/a00227_source.html\n usr/share/doc/libgtsam-dev/html/a00230.html\n-usr/share/doc/libgtsam-dev/html/a00230.js\n-usr/share/doc/libgtsam-dev/html/a00230_source.html\n+usr/share/doc/libgtsam-dev/html/a00233.html\n+usr/share/doc/libgtsam-dev/html/a00233.js\n usr/share/doc/libgtsam-dev/html/a00233_source.html\n usr/share/doc/libgtsam-dev/html/a00236.html\n-usr/share/doc/libgtsam-dev/html/a00239.html\n-usr/share/doc/libgtsam-dev/html/a00239.js\n-usr/share/doc/libgtsam-dev/html/a00239_source.html\n+usr/share/doc/libgtsam-dev/html/a00236.js\n usr/share/doc/libgtsam-dev/html/a00242.html\n usr/share/doc/libgtsam-dev/html/a00242.js\n usr/share/doc/libgtsam-dev/html/a00242_source.html\n usr/share/doc/libgtsam-dev/html/a00245.html\n-usr/share/doc/libgtsam-dev/html/a00245.js\n-usr/share/doc/libgtsam-dev/html/a00245_source.html\n usr/share/doc/libgtsam-dev/html/a00248.html\n-usr/share/doc/libgtsam-dev/html/a00248.js\n usr/share/doc/libgtsam-dev/html/a00248_source.html\n usr/share/doc/libgtsam-dev/html/a00251.html\n+usr/share/doc/libgtsam-dev/html/a00251.js\n usr/share/doc/libgtsam-dev/html/a00251_source.html\n usr/share/doc/libgtsam-dev/html/a00254.html\n usr/share/doc/libgtsam-dev/html/a00254.js\n+usr/share/doc/libgtsam-dev/html/a00254_source.html\n usr/share/doc/libgtsam-dev/html/a00257.html\n usr/share/doc/libgtsam-dev/html/a00257.js\n+usr/share/doc/libgtsam-dev/html/a00257_source.html\n usr/share/doc/libgtsam-dev/html/a00260.html\n usr/share/doc/libgtsam-dev/html/a00260.js\n-usr/share/doc/libgtsam-dev/html/a00260_source.html\n+usr/share/doc/libgtsam-dev/html/a00263.html\n usr/share/doc/libgtsam-dev/html/a00266.html\n usr/share/doc/libgtsam-dev/html/a00266.js\n-usr/share/doc/libgtsam-dev/html/a00266_source.html\n usr/share/doc/libgtsam-dev/html/a00269.html\n+usr/share/doc/libgtsam-dev/html/a00269_source.html\n usr/share/doc/libgtsam-dev/html/a00272.html\n-usr/share/doc/libgtsam-dev/html/a00275_source.html\n+usr/share/doc/libgtsam-dev/html/a00272.js\n+usr/share/doc/libgtsam-dev/html/a00272_source.html\n+usr/share/doc/libgtsam-dev/html/a00275.html\n usr/share/doc/libgtsam-dev/html/a00278.html\n usr/share/doc/libgtsam-dev/html/a00278.js\n usr/share/doc/libgtsam-dev/html/a00278_source.html\n-usr/share/doc/libgtsam-dev/html/a00281.html\n-usr/share/doc/libgtsam-dev/html/a00281.js\n-usr/share/doc/libgtsam-dev/html/a00281_source.html\n+usr/share/doc/libgtsam-dev/html/a00284.html\n+usr/share/doc/libgtsam-dev/html/a00284.js\n usr/share/doc/libgtsam-dev/html/a00284_source.html\n usr/share/doc/libgtsam-dev/html/a00287.html\n+usr/share/doc/libgtsam-dev/html/a00287.js\n+usr/share/doc/libgtsam-dev/html/a00287_source.html\n usr/share/doc/libgtsam-dev/html/a00290.html\n-usr/share/doc/libgtsam-dev/html/a00290_source.html\n usr/share/doc/libgtsam-dev/html/a00293.html\n usr/share/doc/libgtsam-dev/html/a00293.js\n usr/share/doc/libgtsam-dev/html/a00293_source.html\n usr/share/doc/libgtsam-dev/html/a00296.html\n-usr/share/doc/libgtsam-dev/html/a00302.html\n+usr/share/doc/libgtsam-dev/html/a00296.js\n+usr/share/doc/libgtsam-dev/html/a00296_source.html\n+usr/share/doc/libgtsam-dev/html/a00299.html\n+usr/share/doc/libgtsam-dev/html/a00302_source.html\n usr/share/doc/libgtsam-dev/html/a00305.html\n usr/share/doc/libgtsam-dev/html/a00305.js\n usr/share/doc/libgtsam-dev/html/a00308.html\n usr/share/doc/libgtsam-dev/html/a00308.js\n usr/share/doc/libgtsam-dev/html/a00308_source.html\n usr/share/doc/libgtsam-dev/html/a00311.html\n+usr/share/doc/libgtsam-dev/html/a00311.js\n+usr/share/doc/libgtsam-dev/html/a00311_source.html\n usr/share/doc/libgtsam-dev/html/a00314.html\n+usr/share/doc/libgtsam-dev/html/a00314.js\n+usr/share/doc/libgtsam-dev/html/a00314_source.html\n+usr/share/doc/libgtsam-dev/html/a00317.html\n+usr/share/doc/libgtsam-dev/html/a00317.js\n+usr/share/doc/libgtsam-dev/html/a00317_source.html\n usr/share/doc/libgtsam-dev/html/a00320.html\n usr/share/doc/libgtsam-dev/html/a00320.js\n+usr/share/doc/libgtsam-dev/html/a00320_source.html\n usr/share/doc/libgtsam-dev/html/a00323.html\n-usr/share/doc/libgtsam-dev/html/a00323.js\n-usr/share/doc/libgtsam-dev/html/a00323_source.html\n-usr/share/doc/libgtsam-dev/html/a00326_source.html\n+usr/share/doc/libgtsam-dev/html/a00326.html\n usr/share/doc/libgtsam-dev/html/a00329.html\n-usr/share/doc/libgtsam-dev/html/a00329.js\n-usr/share/doc/libgtsam-dev/html/a00329_source.html\n usr/share/doc/libgtsam-dev/html/a00332.html\n usr/share/doc/libgtsam-dev/html/a00332.js\n usr/share/doc/libgtsam-dev/html/a00332_source.html\n-usr/share/doc/libgtsam-dev/html/a00335.html\n+usr/share/doc/libgtsam-dev/html/a00335_source.html\n+usr/share/doc/libgtsam-dev/html/a00338.html\n usr/share/doc/libgtsam-dev/html/a00341.html\n+usr/share/doc/libgtsam-dev/html/a00341.js\n+usr/share/doc/libgtsam-dev/html/a00341_source.html\n usr/share/doc/libgtsam-dev/html/a00344.html\n-usr/share/doc/libgtsam-dev/html/a00344.js\n-usr/share/doc/libgtsam-dev/html/a00344_source.html\n usr/share/doc/libgtsam-dev/html/a00347.html\n+usr/share/doc/libgtsam-dev/html/a00347.js\n usr/share/doc/libgtsam-dev/html/a00350.html\n usr/share/doc/libgtsam-dev/html/a00350.js\n usr/share/doc/libgtsam-dev/html/a00350_source.html\n-usr/share/doc/libgtsam-dev/html/a00353.html\n+usr/share/doc/libgtsam-dev/html/a00353_source.html\n usr/share/doc/libgtsam-dev/html/a00356.html\n usr/share/doc/libgtsam-dev/html/a00356.js\n-usr/share/doc/libgtsam-dev/html/a00356_source.html\n usr/share/doc/libgtsam-dev/html/a00359.html\n usr/share/doc/libgtsam-dev/html/a00359.js\n usr/share/doc/libgtsam-dev/html/a00359_source.html\n-usr/share/doc/libgtsam-dev/html/a00362.html\n-usr/share/doc/libgtsam-dev/html/a00362.js\n usr/share/doc/libgtsam-dev/html/a00365.html\n-usr/share/doc/libgtsam-dev/html/a00368.html\n-usr/share/doc/libgtsam-dev/html/a00368.js\n-usr/share/doc/libgtsam-dev/html/a00368_source.html\n+usr/share/doc/libgtsam-dev/html/a00365.js\n+usr/share/doc/libgtsam-dev/html/a00365_source.html\n usr/share/doc/libgtsam-dev/html/a00371.html\n usr/share/doc/libgtsam-dev/html/a00371.js\n usr/share/doc/libgtsam-dev/html/a00371_source.html\n usr/share/doc/libgtsam-dev/html/a00374.html\n-usr/share/doc/libgtsam-dev/html/a00377.html\n-usr/share/doc/libgtsam-dev/html/a00377.js\n-usr/share/doc/libgtsam-dev/html/a00377_source.html\n+usr/share/doc/libgtsam-dev/html/a00374.js\n+usr/share/doc/libgtsam-dev/html/a00374_source.html\n usr/share/doc/libgtsam-dev/html/a00380.html\n-usr/share/doc/libgtsam-dev/html/a00380.js\n-usr/share/doc/libgtsam-dev/html/a00380_source.html\n usr/share/doc/libgtsam-dev/html/a00383.html\n usr/share/doc/libgtsam-dev/html/a00383.js\n usr/share/doc/libgtsam-dev/html/a00383_source.html\n usr/share/doc/libgtsam-dev/html/a00386.html\n+usr/share/doc/libgtsam-dev/html/a00386.js\n+usr/share/doc/libgtsam-dev/html/a00386_source.html\n+usr/share/doc/libgtsam-dev/html/a00389.html\n+usr/share/doc/libgtsam-dev/html/a00389.js\n+usr/share/doc/libgtsam-dev/html/a00389_source.html\n usr/share/doc/libgtsam-dev/html/a00392.html\n-usr/share/doc/libgtsam-dev/html/a00392.js\n-usr/share/doc/libgtsam-dev/html/a00392_source.html\n usr/share/doc/libgtsam-dev/html/a00395.html\n-usr/share/doc/libgtsam-dev/html/a00395.js\n-usr/share/doc/libgtsam-dev/html/a00395_source.html\n-usr/share/doc/libgtsam-dev/html/a00398_source.html\n+usr/share/doc/libgtsam-dev/html/a00398.html\n usr/share/doc/libgtsam-dev/html/a00401.html\n usr/share/doc/libgtsam-dev/html/a00401.js\n-usr/share/doc/libgtsam-dev/html/a00401_source.html\n-usr/share/doc/libgtsam-dev/html/a00404.html\n+usr/share/doc/libgtsam-dev/html/a00404_source.html\n usr/share/doc/libgtsam-dev/html/a00407.html\n-usr/share/doc/libgtsam-dev/html/a00407.js\n-usr/share/doc/libgtsam-dev/html/a00407_source.html\n usr/share/doc/libgtsam-dev/html/a00410.html\n-usr/share/doc/libgtsam-dev/html/a00410.js\n-usr/share/doc/libgtsam-dev/html/a00410_source.html\n usr/share/doc/libgtsam-dev/html/a00413.html\n+usr/share/doc/libgtsam-dev/html/a00413.js\n+usr/share/doc/libgtsam-dev/html/a00413_source.html\n+usr/share/doc/libgtsam-dev/html/a00416.html\n+usr/share/doc/libgtsam-dev/html/a00416.js\n+usr/share/doc/libgtsam-dev/html/a00416_source.html\n usr/share/doc/libgtsam-dev/html/a00419.html\n usr/share/doc/libgtsam-dev/html/a00419.js\n usr/share/doc/libgtsam-dev/html/a00419_source.html\n usr/share/doc/libgtsam-dev/html/a00422.html\n+usr/share/doc/libgtsam-dev/html/a00422.js\n+usr/share/doc/libgtsam-dev/html/a00422_source.html\n usr/share/doc/libgtsam-dev/html/a00425.html\n usr/share/doc/libgtsam-dev/html/a00425.js\n-usr/share/doc/libgtsam-dev/html/a00425_source.html\n usr/share/doc/libgtsam-dev/html/a00428.html\n usr/share/doc/libgtsam-dev/html/a00431.html\n+usr/share/doc/libgtsam-dev/html/a00431.js\n+usr/share/doc/libgtsam-dev/html/a00431_source.html\n usr/share/doc/libgtsam-dev/html/a00434.html\n usr/share/doc/libgtsam-dev/html/a00434.js\n+usr/share/doc/libgtsam-dev/html/a00434_source.html\n usr/share/doc/libgtsam-dev/html/a00437.html\n+usr/share/doc/libgtsam-dev/html/a00437.js\n+usr/share/doc/libgtsam-dev/html/a00437_source.html\n usr/share/doc/libgtsam-dev/html/a00440.html\n-usr/share/doc/libgtsam-dev/html/a00446.html\n usr/share/doc/libgtsam-dev/html/a00449.html\n-usr/share/doc/libgtsam-dev/html/a00449.js\n+usr/share/doc/libgtsam-dev/html/a00449_source.html\n usr/share/doc/libgtsam-dev/html/a00452.html\n usr/share/doc/libgtsam-dev/html/a00452.js\n usr/share/doc/libgtsam-dev/html/a00452_source.html\n usr/share/doc/libgtsam-dev/html/a00455.html\n usr/share/doc/libgtsam-dev/html/a00455.js\n usr/share/doc/libgtsam-dev/html/a00455_source.html\n usr/share/doc/libgtsam-dev/html/a00458.html\n usr/share/doc/libgtsam-dev/html/a00458.js\n usr/share/doc/libgtsam-dev/html/a00458_source.html\n usr/share/doc/libgtsam-dev/html/a00461.html\n usr/share/doc/libgtsam-dev/html/a00461.js\n usr/share/doc/libgtsam-dev/html/a00461_source.html\n usr/share/doc/libgtsam-dev/html/a00464.html\n-usr/share/doc/libgtsam-dev/html/a00464.js\n-usr/share/doc/libgtsam-dev/html/a00464_source.html\n-usr/share/doc/libgtsam-dev/html/a00467.html\n-usr/share/doc/libgtsam-dev/html/a00467.js\n-usr/share/doc/libgtsam-dev/html/a00467_source.html\n usr/share/doc/libgtsam-dev/html/a00470.html\n-usr/share/doc/libgtsam-dev/html/a00470.js\n-usr/share/doc/libgtsam-dev/html/a00470_source.html\n+usr/share/doc/libgtsam-dev/html/a00473.html\n usr/share/doc/libgtsam-dev/html/a00476.html\n usr/share/doc/libgtsam-dev/html/a00476.js\n usr/share/doc/libgtsam-dev/html/a00476_source.html\n usr/share/doc/libgtsam-dev/html/a00479.html\n-usr/share/doc/libgtsam-dev/html/a00479.js\n-usr/share/doc/libgtsam-dev/html/a00479_source.html\n usr/share/doc/libgtsam-dev/html/a00482.html\n+usr/share/doc/libgtsam-dev/html/a00482.js\n+usr/share/doc/libgtsam-dev/html/a00482_source.html\n usr/share/doc/libgtsam-dev/html/a00485.html\n usr/share/doc/libgtsam-dev/html/a00488.html\n+usr/share/doc/libgtsam-dev/html/a00488.js\n+usr/share/doc/libgtsam-dev/html/a00488_source.html\n usr/share/doc/libgtsam-dev/html/a00491.html\n usr/share/doc/libgtsam-dev/html/a00491.js\n-usr/share/doc/libgtsam-dev/html/a00491_source.html\n usr/share/doc/libgtsam-dev/html/a00494.html\n-usr/share/doc/libgtsam-dev/html/a00494.js\n-usr/share/doc/libgtsam-dev/html/a00494_source.html\n usr/share/doc/libgtsam-dev/html/a00497.html\n+usr/share/doc/libgtsam-dev/html/a00497.js\n usr/share/doc/libgtsam-dev/html/a00500.html\n usr/share/doc/libgtsam-dev/html/a00500.js\n usr/share/doc/libgtsam-dev/html/a00500_source.html\n usr/share/doc/libgtsam-dev/html/a00503.html\n+usr/share/doc/libgtsam-dev/html/a00503.js\n+usr/share/doc/libgtsam-dev/html/a00503_source.html\n usr/share/doc/libgtsam-dev/html/a00506.html\n+usr/share/doc/libgtsam-dev/html/a00506.js\n+usr/share/doc/libgtsam-dev/html/a00506_source.html\n usr/share/doc/libgtsam-dev/html/a00509.html\n-usr/share/doc/libgtsam-dev/html/a00509.js\n-usr/share/doc/libgtsam-dev/html/a00509_source.html\n+usr/share/doc/libgtsam-dev/html/a00512.html\n usr/share/doc/libgtsam-dev/html/a00515.html\n+usr/share/doc/libgtsam-dev/html/a00515.js\n usr/share/doc/libgtsam-dev/html/a00518.html\n usr/share/doc/libgtsam-dev/html/a00518.js\n+usr/share/doc/libgtsam-dev/html/a00518_source.html\n usr/share/doc/libgtsam-dev/html/a00521.html\n usr/share/doc/libgtsam-dev/html/a00524.html\n-usr/share/doc/libgtsam-dev/html/a00524_source.html\n usr/share/doc/libgtsam-dev/html/a00527.html\n-usr/share/doc/libgtsam-dev/html/a00530.html\n-usr/share/doc/libgtsam-dev/html/a00530.js\n-usr/share/doc/libgtsam-dev/html/a00530_source.html\n+usr/share/doc/libgtsam-dev/html/a00527.js\n+usr/share/doc/libgtsam-dev/html/a00527_source.html\n usr/share/doc/libgtsam-dev/html/a00533.html\n usr/share/doc/libgtsam-dev/html/a00533.js\n usr/share/doc/libgtsam-dev/html/a00533_source.html\n usr/share/doc/libgtsam-dev/html/a00536.html\n usr/share/doc/libgtsam-dev/html/a00536.js\n usr/share/doc/libgtsam-dev/html/a00536_source.html\n usr/share/doc/libgtsam-dev/html/a00539.html\n usr/share/doc/libgtsam-dev/html/a00539.js\n usr/share/doc/libgtsam-dev/html/a00539_source.html\n usr/share/doc/libgtsam-dev/html/a00542.html\n-usr/share/doc/libgtsam-dev/html/a00542.js\n usr/share/doc/libgtsam-dev/html/a00542_source.html\n usr/share/doc/libgtsam-dev/html/a00545.html\n-usr/share/doc/libgtsam-dev/html/a00545.js\n usr/share/doc/libgtsam-dev/html/a00548.html\n usr/share/doc/libgtsam-dev/html/a00551.html\n usr/share/doc/libgtsam-dev/html/a00551_source.html\n usr/share/doc/libgtsam-dev/html/a00554.html\n usr/share/doc/libgtsam-dev/html/a00554.js\n usr/share/doc/libgtsam-dev/html/a00554_source.html\n usr/share/doc/libgtsam-dev/html/a00557.html\n-usr/share/doc/libgtsam-dev/html/a00557.js\n-usr/share/doc/libgtsam-dev/html/a00557_source.html\n usr/share/doc/libgtsam-dev/html/a00560.html\n usr/share/doc/libgtsam-dev/html/a00560.js\n usr/share/doc/libgtsam-dev/html/a00560_source.html\n usr/share/doc/libgtsam-dev/html/a00563.html\n usr/share/doc/libgtsam-dev/html/a00563.js\n usr/share/doc/libgtsam-dev/html/a00563_source.html\n usr/share/doc/libgtsam-dev/html/a00566.html\n-usr/share/doc/libgtsam-dev/html/a00566.js\n-usr/share/doc/libgtsam-dev/html/a00566_source.html\n usr/share/doc/libgtsam-dev/html/a00569.html\n usr/share/doc/libgtsam-dev/html/a00569.js\n+usr/share/doc/libgtsam-dev/html/a00569_source.html\n usr/share/doc/libgtsam-dev/html/a00572.html\n+usr/share/doc/libgtsam-dev/html/a00572_source.html\n usr/share/doc/libgtsam-dev/html/a00575.html\n-usr/share/doc/libgtsam-dev/html/a00575.js\n-usr/share/doc/libgtsam-dev/html/a00575_source.html\n usr/share/doc/libgtsam-dev/html/a00578.html\n usr/share/doc/libgtsam-dev/html/a00578_source.html\n usr/share/doc/libgtsam-dev/html/a00581.html\n+usr/share/doc/libgtsam-dev/html/a00581_source.html\n usr/share/doc/libgtsam-dev/html/a00587.html\n+usr/share/doc/libgtsam-dev/html/a00587.js\n usr/share/doc/libgtsam-dev/html/a00587_source.html\n usr/share/doc/libgtsam-dev/html/a00590.html\n+usr/share/doc/libgtsam-dev/html/a00590.js\n+usr/share/doc/libgtsam-dev/html/a00590_source.html\n usr/share/doc/libgtsam-dev/html/a00593.html\n usr/share/doc/libgtsam-dev/html/a00593.js\n usr/share/doc/libgtsam-dev/html/a00593_source.html\n usr/share/doc/libgtsam-dev/html/a00596.html\n usr/share/doc/libgtsam-dev/html/a00596.js\n usr/share/doc/libgtsam-dev/html/a00596_source.html\n usr/share/doc/libgtsam-dev/html/a00599.html\n-usr/share/doc/libgtsam-dev/html/a00599.js\n-usr/share/doc/libgtsam-dev/html/a00599_source.html\n usr/share/doc/libgtsam-dev/html/a00602.html\n-usr/share/doc/libgtsam-dev/html/a00602.js\n usr/share/doc/libgtsam-dev/html/a00602_source.html\n usr/share/doc/libgtsam-dev/html/a00608.html\n-usr/share/doc/libgtsam-dev/html/a00608.js\n-usr/share/doc/libgtsam-dev/html/a00608_source.html\n-usr/share/doc/libgtsam-dev/html/a00611.html\n usr/share/doc/libgtsam-dev/html/a00611_source.html\n usr/share/doc/libgtsam-dev/html/a00614.html\n+usr/share/doc/libgtsam-dev/html/a00614_source.html\n usr/share/doc/libgtsam-dev/html/a00617.html\n usr/share/doc/libgtsam-dev/html/a00617.js\n usr/share/doc/libgtsam-dev/html/a00617_source.html\n usr/share/doc/libgtsam-dev/html/a00620.html\n-usr/share/doc/libgtsam-dev/html/a00620.js\n usr/share/doc/libgtsam-dev/html/a00620_source.html\n usr/share/doc/libgtsam-dev/html/a00623.html\n usr/share/doc/libgtsam-dev/html/a00623.js\n usr/share/doc/libgtsam-dev/html/a00623_source.html\n usr/share/doc/libgtsam-dev/html/a00626.html\n usr/share/doc/libgtsam-dev/html/a00626.js\n usr/share/doc/libgtsam-dev/html/a00626_source.html\n usr/share/doc/libgtsam-dev/html/a00629.html\n usr/share/doc/libgtsam-dev/html/a00629.js\n usr/share/doc/libgtsam-dev/html/a00629_source.html\n usr/share/doc/libgtsam-dev/html/a00632.html\n-usr/share/doc/libgtsam-dev/html/a00632_source.html\n usr/share/doc/libgtsam-dev/html/a00635.html\n+usr/share/doc/libgtsam-dev/html/a00635.js\n+usr/share/doc/libgtsam-dev/html/a00635_source.html\n+usr/share/doc/libgtsam-dev/html/a00638.html\n+usr/share/doc/libgtsam-dev/html/a00638.js\n usr/share/doc/libgtsam-dev/html/a00638_source.html\n usr/share/doc/libgtsam-dev/html/a00641.html\n usr/share/doc/libgtsam-dev/html/a00641.js\n usr/share/doc/libgtsam-dev/html/a00641_source.html\n-usr/share/doc/libgtsam-dev/html/a00644.html\n usr/share/doc/libgtsam-dev/html/a00644_source.html\n usr/share/doc/libgtsam-dev/html/a00647.html\n usr/share/doc/libgtsam-dev/html/a00647.js\n usr/share/doc/libgtsam-dev/html/a00647_source.html\n usr/share/doc/libgtsam-dev/html/a00650.html\n usr/share/doc/libgtsam-dev/html/a00650.js\n usr/share/doc/libgtsam-dev/html/a00650_source.html\n usr/share/doc/libgtsam-dev/html/a00653.html\n+usr/share/doc/libgtsam-dev/html/a00653.js\n+usr/share/doc/libgtsam-dev/html/a00653_source.html\n+usr/share/doc/libgtsam-dev/html/a00656.html\n+usr/share/doc/libgtsam-dev/html/a00656.js\n usr/share/doc/libgtsam-dev/html/a00656_source.html\n usr/share/doc/libgtsam-dev/html/a00659.html\n+usr/share/doc/libgtsam-dev/html/a00659.js\n usr/share/doc/libgtsam-dev/html/a00659_source.html\n usr/share/doc/libgtsam-dev/html/a00662.html\n usr/share/doc/libgtsam-dev/html/a00662.js\n usr/share/doc/libgtsam-dev/html/a00662_source.html\n usr/share/doc/libgtsam-dev/html/a00665.html\n usr/share/doc/libgtsam-dev/html/a00665_source.html\n+usr/share/doc/libgtsam-dev/html/a00668.html\n usr/share/doc/libgtsam-dev/html/a00671.html\n-usr/share/doc/libgtsam-dev/html/a00671.js\n-usr/share/doc/libgtsam-dev/html/a00671_source.html\n usr/share/doc/libgtsam-dev/html/a00674.html\n usr/share/doc/libgtsam-dev/html/a00674.js\n usr/share/doc/libgtsam-dev/html/a00674_source.html\n+usr/share/doc/libgtsam-dev/html/a00677.html\n usr/share/doc/libgtsam-dev/html/a00677_source.html\n-usr/share/doc/libgtsam-dev/html/a00680.html\n-usr/share/doc/libgtsam-dev/html/a00680.js\n-usr/share/doc/libgtsam-dev/html/a00680_source.html\n-usr/share/doc/libgtsam-dev/html/a00683.html\n usr/share/doc/libgtsam-dev/html/a00683_source.html\n usr/share/doc/libgtsam-dev/html/a00686.html\n+usr/share/doc/libgtsam-dev/html/a00686.js\n usr/share/doc/libgtsam-dev/html/a00686_source.html\n usr/share/doc/libgtsam-dev/html/a00689.html\n-usr/share/doc/libgtsam-dev/html/a00689_source.html\n usr/share/doc/libgtsam-dev/html/a00692.html\n-usr/share/doc/libgtsam-dev/html/a00695.html\n-usr/share/doc/libgtsam-dev/html/a00695.js\n+usr/share/doc/libgtsam-dev/html/a00692_source.html\n usr/share/doc/libgtsam-dev/html/a00695_source.html\n+usr/share/doc/libgtsam-dev/html/a00698.html\n usr/share/doc/libgtsam-dev/html/a00698_source.html\n usr/share/doc/libgtsam-dev/html/a00701.html\n usr/share/doc/libgtsam-dev/html/a00701.js\n usr/share/doc/libgtsam-dev/html/a00701_source.html\n usr/share/doc/libgtsam-dev/html/a00704.html\n-usr/share/doc/libgtsam-dev/html/a00704.js\n-usr/share/doc/libgtsam-dev/html/a00704_source.html\n usr/share/doc/libgtsam-dev/html/a00707.html\n+usr/share/doc/libgtsam-dev/html/a00707.js\n+usr/share/doc/libgtsam-dev/html/a00707_source.html\n usr/share/doc/libgtsam-dev/html/a00710.html\n usr/share/doc/libgtsam-dev/html/a00710.js\n usr/share/doc/libgtsam-dev/html/a00710_source.html\n-usr/share/doc/libgtsam-dev/html/a00713.html\n-usr/share/doc/libgtsam-dev/html/a00713_source.html\n usr/share/doc/libgtsam-dev/html/a00716.html\n usr/share/doc/libgtsam-dev/html/a00716.js\n-usr/share/doc/libgtsam-dev/html/a00716_source.html\n usr/share/doc/libgtsam-dev/html/a00719.html\n usr/share/doc/libgtsam-dev/html/a00719.js\n usr/share/doc/libgtsam-dev/html/a00719_source.html\n usr/share/doc/libgtsam-dev/html/a00722.html\n+usr/share/doc/libgtsam-dev/html/a00722.js\n+usr/share/doc/libgtsam-dev/html/a00722_source.html\n usr/share/doc/libgtsam-dev/html/a00725.html\n usr/share/doc/libgtsam-dev/html/a00725.js\n usr/share/doc/libgtsam-dev/html/a00725_source.html\n-usr/share/doc/libgtsam-dev/html/a00728.html\n-usr/share/doc/libgtsam-dev/html/a00728.js\n-usr/share/doc/libgtsam-dev/html/a00728_source.html\n usr/share/doc/libgtsam-dev/html/a00731.html\n+usr/share/doc/libgtsam-dev/html/a00731.js\n+usr/share/doc/libgtsam-dev/html/a00731_source.html\n usr/share/doc/libgtsam-dev/html/a00734.html\n-usr/share/doc/libgtsam-dev/html/a00734.js\n-usr/share/doc/libgtsam-dev/html/a00734_source.html\n usr/share/doc/libgtsam-dev/html/a00737.html\n-usr/share/doc/libgtsam-dev/html/a00737.js\n-usr/share/doc/libgtsam-dev/html/a00737_source.html\n-usr/share/doc/libgtsam-dev/html/a00740.html\n-usr/share/doc/libgtsam-dev/html/a00740.js\n+usr/share/doc/libgtsam-dev/html/a00740_source.html\n usr/share/doc/libgtsam-dev/html/a00743.html\n+usr/share/doc/libgtsam-dev/html/a00743.js\n+usr/share/doc/libgtsam-dev/html/a00743_source.html\n usr/share/doc/libgtsam-dev/html/a00746.html\n usr/share/doc/libgtsam-dev/html/a00746.js\n usr/share/doc/libgtsam-dev/html/a00746_source.html\n usr/share/doc/libgtsam-dev/html/a00749.html\n usr/share/doc/libgtsam-dev/html/a00749.js\n-usr/share/doc/libgtsam-dev/html/a00749_source.html\n usr/share/doc/libgtsam-dev/html/a00752.html\n usr/share/doc/libgtsam-dev/html/a00752.js\n usr/share/doc/libgtsam-dev/html/a00752_source.html\n usr/share/doc/libgtsam-dev/html/a00755.html\n+usr/share/doc/libgtsam-dev/html/a00755.js\n+usr/share/doc/libgtsam-dev/html/a00755_source.html\n usr/share/doc/libgtsam-dev/html/a00758.html\n-usr/share/doc/libgtsam-dev/html/a00758.js\n usr/share/doc/libgtsam-dev/html/a00758_source.html\n usr/share/doc/libgtsam-dev/html/a00761.html\n+usr/share/doc/libgtsam-dev/html/a00761.js\n+usr/share/doc/libgtsam-dev/html/a00761_source.html\n usr/share/doc/libgtsam-dev/html/a00764.html\n+usr/share/doc/libgtsam-dev/html/a00764.js\n+usr/share/doc/libgtsam-dev/html/a00764_source.html\n usr/share/doc/libgtsam-dev/html/a00767.html\n usr/share/doc/libgtsam-dev/html/a00767.js\n-usr/share/doc/libgtsam-dev/html/a00767_source.html\n usr/share/doc/libgtsam-dev/html/a00770.html\n usr/share/doc/libgtsam-dev/html/a00770.js\n usr/share/doc/libgtsam-dev/html/a00770_source.html\n usr/share/doc/libgtsam-dev/html/a00773.html\n-usr/share/doc/libgtsam-dev/html/a00773.js\n-usr/share/doc/libgtsam-dev/html/a00773_source.html\n-usr/share/doc/libgtsam-dev/html/a00776.html\n-usr/share/doc/libgtsam-dev/html/a00776.js\n-usr/share/doc/libgtsam-dev/html/a00776_source.html\n usr/share/doc/libgtsam-dev/html/a00779.html\n usr/share/doc/libgtsam-dev/html/a00779.js\n usr/share/doc/libgtsam-dev/html/a00779_source.html\n usr/share/doc/libgtsam-dev/html/a00782.html\n+usr/share/doc/libgtsam-dev/html/a00782.js\n+usr/share/doc/libgtsam-dev/html/a00782_source.html\n usr/share/doc/libgtsam-dev/html/a00785.html\n-usr/share/doc/libgtsam-dev/html/a00785.js\n-usr/share/doc/libgtsam-dev/html/a00785_source.html\n usr/share/doc/libgtsam-dev/html/a00788.html\n usr/share/doc/libgtsam-dev/html/a00788.js\n usr/share/doc/libgtsam-dev/html/a00791.html\n usr/share/doc/libgtsam-dev/html/a00791.js\n usr/share/doc/libgtsam-dev/html/a00791_source.html\n+usr/share/doc/libgtsam-dev/html/a00794.html\n+usr/share/doc/libgtsam-dev/html/a00794.js\n+usr/share/doc/libgtsam-dev/html/a00794_source.html\n usr/share/doc/libgtsam-dev/html/a00797.html\n usr/share/doc/libgtsam-dev/html/a00800.html\n-usr/share/doc/libgtsam-dev/html/a00800_source.html\n+usr/share/doc/libgtsam-dev/html/a00803_source.html\n usr/share/doc/libgtsam-dev/html/a00806.html\n-usr/share/doc/libgtsam-dev/html/a00806.js\n-usr/share/doc/libgtsam-dev/html/a00806_source.html\n-usr/share/doc/libgtsam-dev/html/a00809.html\n usr/share/doc/libgtsam-dev/html/a00812.html\n usr/share/doc/libgtsam-dev/html/a00812.js\n usr/share/doc/libgtsam-dev/html/a00812_source.html\n-usr/share/doc/libgtsam-dev/html/a00818.html\n-usr/share/doc/libgtsam-dev/html/a00818.js\n+usr/share/doc/libgtsam-dev/html/a00815.html\n+usr/share/doc/libgtsam-dev/html/a00815.js\n+usr/share/doc/libgtsam-dev/html/a00815_source.html\n usr/share/doc/libgtsam-dev/html/a00818_source.html\n-usr/share/doc/libgtsam-dev/html/a00821_source.html\n+usr/share/doc/libgtsam-dev/html/a00821.html\n+usr/share/doc/libgtsam-dev/html/a00821.js\n usr/share/doc/libgtsam-dev/html/a00824.html\n-usr/share/doc/libgtsam-dev/html/a00824.js\n usr/share/doc/libgtsam-dev/html/a00824_source.html\n usr/share/doc/libgtsam-dev/html/a00827.html\n usr/share/doc/libgtsam-dev/html/a00827.js\n usr/share/doc/libgtsam-dev/html/a00827_source.html\n usr/share/doc/libgtsam-dev/html/a00830.html\n+usr/share/doc/libgtsam-dev/html/a00830.js\n+usr/share/doc/libgtsam-dev/html/a00830_source.html\n+usr/share/doc/libgtsam-dev/html/a00833.html\n+usr/share/doc/libgtsam-dev/html/a00833.js\n usr/share/doc/libgtsam-dev/html/a00833_source.html\n usr/share/doc/libgtsam-dev/html/a00836.html\n-usr/share/doc/libgtsam-dev/html/a00836_source.html\n usr/share/doc/libgtsam-dev/html/a00839.html\n-usr/share/doc/libgtsam-dev/html/a00839_source.html\n+usr/share/doc/libgtsam-dev/html/a00842.html\n+usr/share/doc/libgtsam-dev/html/a00842.js\n usr/share/doc/libgtsam-dev/html/a00842_source.html\n usr/share/doc/libgtsam-dev/html/a00845.html\n-usr/share/doc/libgtsam-dev/html/a00848.html\n+usr/share/doc/libgtsam-dev/html/a00845_source.html\n+usr/share/doc/libgtsam-dev/html/a00848_source.html\n usr/share/doc/libgtsam-dev/html/a00851.html\n-usr/share/doc/libgtsam-dev/html/a00851_source.html\n-usr/share/doc/libgtsam-dev/html/a00854_source.html\n+usr/share/doc/libgtsam-dev/html/a00854.html\n usr/share/doc/libgtsam-dev/html/a00857.html\n-usr/share/doc/libgtsam-dev/html/a00860.html\n-usr/share/doc/libgtsam-dev/html/a00860.js\n-usr/share/doc/libgtsam-dev/html/a00860_source.html\n+usr/share/doc/libgtsam-dev/html/a00857.js\n+usr/share/doc/libgtsam-dev/html/a00857_source.html\n+usr/share/doc/libgtsam-dev/html/a00863.html\n usr/share/doc/libgtsam-dev/html/a00866.html\n+usr/share/doc/libgtsam-dev/html/a00866.js\n+usr/share/doc/libgtsam-dev/html/a00866_source.html\n+usr/share/doc/libgtsam-dev/html/a00869.html\n usr/share/doc/libgtsam-dev/html/a00872.html\n usr/share/doc/libgtsam-dev/html/a00872.js\n usr/share/doc/libgtsam-dev/html/a00872_source.html\n usr/share/doc/libgtsam-dev/html/a00875.html\n-usr/share/doc/libgtsam-dev/html/a00875.js\n usr/share/doc/libgtsam-dev/html/a00875_source.html\n usr/share/doc/libgtsam-dev/html/a00878.html\n-usr/share/doc/libgtsam-dev/html/a00878.js\n usr/share/doc/libgtsam-dev/html/a00881.html\n usr/share/doc/libgtsam-dev/html/a00881.js\n usr/share/doc/libgtsam-dev/html/a00881_source.html\n usr/share/doc/libgtsam-dev/html/a00884.html\n+usr/share/doc/libgtsam-dev/html/a00884.js\n+usr/share/doc/libgtsam-dev/html/a00884_source.html\n usr/share/doc/libgtsam-dev/html/a00887.html\n usr/share/doc/libgtsam-dev/html/a00887.js\n-usr/share/doc/libgtsam-dev/html/a00887_source.html\n usr/share/doc/libgtsam-dev/html/a00890.html\n-usr/share/doc/libgtsam-dev/html/a00890.js\n usr/share/doc/libgtsam-dev/html/a00890_source.html\n usr/share/doc/libgtsam-dev/html/a00893.html\n usr/share/doc/libgtsam-dev/html/a00893.js\n+usr/share/doc/libgtsam-dev/html/a00893_source.html\n usr/share/doc/libgtsam-dev/html/a00896.html\n usr/share/doc/libgtsam-dev/html/a00896.js\n+usr/share/doc/libgtsam-dev/html/a00896_source.html\n usr/share/doc/libgtsam-dev/html/a00899.html\n-usr/share/doc/libgtsam-dev/html/a00899.js\n usr/share/doc/libgtsam-dev/html/a00902.html\n-usr/share/doc/libgtsam-dev/html/a00902.js\n-usr/share/doc/libgtsam-dev/html/a00902_source.html\n usr/share/doc/libgtsam-dev/html/a00908.html\n-usr/share/doc/libgtsam-dev/html/a00908.js\n usr/share/doc/libgtsam-dev/html/a00908_source.html\n+usr/share/doc/libgtsam-dev/html/a00911.html\n+usr/share/doc/libgtsam-dev/html/a00911.js\n+usr/share/doc/libgtsam-dev/html/a00911_source.html\n usr/share/doc/libgtsam-dev/html/a00914.html\n usr/share/doc/libgtsam-dev/html/a00914.js\n usr/share/doc/libgtsam-dev/html/a00914_source.html\n usr/share/doc/libgtsam-dev/html/a00917.html\n usr/share/doc/libgtsam-dev/html/a00917.js\n usr/share/doc/libgtsam-dev/html/a00917_source.html\n-usr/share/doc/libgtsam-dev/html/a00920.html\n usr/share/doc/libgtsam-dev/html/a00920_source.html\n-usr/share/doc/libgtsam-dev/html/a00923.html\n-usr/share/doc/libgtsam-dev/html/a00923.js\n-usr/share/doc/libgtsam-dev/html/a00923_source.html\n-usr/share/doc/libgtsam-dev/html/a00929.html\n-usr/share/doc/libgtsam-dev/html/a00929.js\n-usr/share/doc/libgtsam-dev/html/a00929_source.html\n+usr/share/doc/libgtsam-dev/html/a00926.html\n+usr/share/doc/libgtsam-dev/html/a00926.js\n+usr/share/doc/libgtsam-dev/html/a00926_source.html\n usr/share/doc/libgtsam-dev/html/a00932.html\n-usr/share/doc/libgtsam-dev/html/a00935.html\n usr/share/doc/libgtsam-dev/html/a00938.html\n usr/share/doc/libgtsam-dev/html/a00938.js\n usr/share/doc/libgtsam-dev/html/a00938_source.html\n usr/share/doc/libgtsam-dev/html/a00941.html\n-usr/share/doc/libgtsam-dev/html/a00941.js\n-usr/share/doc/libgtsam-dev/html/a00941_source.html\n usr/share/doc/libgtsam-dev/html/a00944.html\n usr/share/doc/libgtsam-dev/html/a00944.js\n usr/share/doc/libgtsam-dev/html/a00944_source.html\n usr/share/doc/libgtsam-dev/html/a00947.html\n-usr/share/doc/libgtsam-dev/html/a00947_source.html\n usr/share/doc/libgtsam-dev/html/a00950.html\n-usr/share/doc/libgtsam-dev/html/a00950.js\n-usr/share/doc/libgtsam-dev/html/a00950_source.html\n+usr/share/doc/libgtsam-dev/html/a00953.html\n+usr/share/doc/libgtsam-dev/html/a00953.js\n+usr/share/doc/libgtsam-dev/html/a00953_source.html\n+usr/share/doc/libgtsam-dev/html/a00956.html\n+usr/share/doc/libgtsam-dev/html/a00956.js\n usr/share/doc/libgtsam-dev/html/a00956_source.html\n usr/share/doc/libgtsam-dev/html/a00959.html\n+usr/share/doc/libgtsam-dev/html/a00962.html\n+usr/share/doc/libgtsam-dev/html/a00962.js\n+usr/share/doc/libgtsam-dev/html/a00962_source.html\n usr/share/doc/libgtsam-dev/html/a00965.html\n+usr/share/doc/libgtsam-dev/html/a00965.js\n+usr/share/doc/libgtsam-dev/html/a00965_source.html\n usr/share/doc/libgtsam-dev/html/a00968.html\n usr/share/doc/libgtsam-dev/html/a00968.js\n-usr/share/doc/libgtsam-dev/html/a00968_source.html\n usr/share/doc/libgtsam-dev/html/a00971.html\n usr/share/doc/libgtsam-dev/html/a00971.js\n usr/share/doc/libgtsam-dev/html/a00971_source.html\n usr/share/doc/libgtsam-dev/html/a00974.html\n+usr/share/doc/libgtsam-dev/html/a00974.js\n+usr/share/doc/libgtsam-dev/html/a00974_source.html\n usr/share/doc/libgtsam-dev/html/a00977.html\n-usr/share/doc/libgtsam-dev/html/a00980.html\n+usr/share/doc/libgtsam-dev/html/a00977.js\n+usr/share/doc/libgtsam-dev/html/a00977_source.html\n usr/share/doc/libgtsam-dev/html/a00983.html\n usr/share/doc/libgtsam-dev/html/a00986.html\n usr/share/doc/libgtsam-dev/html/a00986.js\n usr/share/doc/libgtsam-dev/html/a00986_source.html\n usr/share/doc/libgtsam-dev/html/a00989.html\n-usr/share/doc/libgtsam-dev/html/a00989.js\n usr/share/doc/libgtsam-dev/html/a00992.html\n+usr/share/doc/libgtsam-dev/html/a00992_source.html\n usr/share/doc/libgtsam-dev/html/a00995.html\n usr/share/doc/libgtsam-dev/html/a00995.js\n usr/share/doc/libgtsam-dev/html/a00995_source.html\n usr/share/doc/libgtsam-dev/html/a00998.html\n-usr/share/doc/libgtsam-dev/html/a00998.js\n-usr/share/doc/libgtsam-dev/html/a00998_source.html\n usr/share/doc/libgtsam-dev/html/a01001.html\n usr/share/doc/libgtsam-dev/html/a01001.js\n usr/share/doc/libgtsam-dev/html/a01001_source.html\n usr/share/doc/libgtsam-dev/html/a01004.html\n+usr/share/doc/libgtsam-dev/html/a01004.js\n+usr/share/doc/libgtsam-dev/html/a01004_source.html\n+usr/share/doc/libgtsam-dev/html/a01007.html\n+usr/share/doc/libgtsam-dev/html/a01007.js\n usr/share/doc/libgtsam-dev/html/a01007_source.html\n usr/share/doc/libgtsam-dev/html/a01010.html\n-usr/share/doc/libgtsam-dev/html/a01010.js\n-usr/share/doc/libgtsam-dev/html/a01010_source.html\n usr/share/doc/libgtsam-dev/html/a01013.html\n-usr/share/doc/libgtsam-dev/html/a01013.js\n-usr/share/doc/libgtsam-dev/html/a01013_source.html\n usr/share/doc/libgtsam-dev/html/a01016.html\n-usr/share/doc/libgtsam-dev/html/a01016.js\n-usr/share/doc/libgtsam-dev/html/a01016_source.html\n usr/share/doc/libgtsam-dev/html/a01019.html\n usr/share/doc/libgtsam-dev/html/a01019.js\n usr/share/doc/libgtsam-dev/html/a01019_source.html\n+usr/share/doc/libgtsam-dev/html/a01022.html\n+usr/share/doc/libgtsam-dev/html/a01025.html\n+usr/share/doc/libgtsam-dev/html/a01025.js\n usr/share/doc/libgtsam-dev/html/a01025_source.html\n usr/share/doc/libgtsam-dev/html/a01028.html\n-usr/share/doc/libgtsam-dev/html/a01028.js\n-usr/share/doc/libgtsam-dev/html/a01028_source.html\n usr/share/doc/libgtsam-dev/html/a01031.html\n usr/share/doc/libgtsam-dev/html/a01031.js\n usr/share/doc/libgtsam-dev/html/a01031_source.html\n usr/share/doc/libgtsam-dev/html/a01034.html\n-usr/share/doc/libgtsam-dev/html/a01034.js\n usr/share/doc/libgtsam-dev/html/a01037.html\n usr/share/doc/libgtsam-dev/html/a01037.js\n usr/share/doc/libgtsam-dev/html/a01037_source.html\n-usr/share/doc/libgtsam-dev/html/a01040.html\n-usr/share/doc/libgtsam-dev/html/a01040.js\n usr/share/doc/libgtsam-dev/html/a01040_source.html\n usr/share/doc/libgtsam-dev/html/a01043.html\n usr/share/doc/libgtsam-dev/html/a01043.js\n usr/share/doc/libgtsam-dev/html/a01043_source.html\n-usr/share/doc/libgtsam-dev/html/a01046.html\n+usr/share/doc/libgtsam-dev/html/a01046_source.html\n usr/share/doc/libgtsam-dev/html/a01049.html\n+usr/share/doc/libgtsam-dev/html/a01049.js\n+usr/share/doc/libgtsam-dev/html/a01049_source.html\n usr/share/doc/libgtsam-dev/html/a01052.html\n usr/share/doc/libgtsam-dev/html/a01052.js\n usr/share/doc/libgtsam-dev/html/a01052_source.html\n usr/share/doc/libgtsam-dev/html/a01055.html\n usr/share/doc/libgtsam-dev/html/a01055.js\n+usr/share/doc/libgtsam-dev/html/a01055_source.html\n usr/share/doc/libgtsam-dev/html/a01058.html\n usr/share/doc/libgtsam-dev/html/a01058.js\n usr/share/doc/libgtsam-dev/html/a01058_source.html\n+usr/share/doc/libgtsam-dev/html/a01061.html\n+usr/share/doc/libgtsam-dev/html/a01061.js\n usr/share/doc/libgtsam-dev/html/a01061_source.html\n usr/share/doc/libgtsam-dev/html/a01064.html\n usr/share/doc/libgtsam-dev/html/a01064.js\n usr/share/doc/libgtsam-dev/html/a01064_source.html\n usr/share/doc/libgtsam-dev/html/a01067.html\n-usr/share/doc/libgtsam-dev/html/a01067.js\n usr/share/doc/libgtsam-dev/html/a01067_source.html\n usr/share/doc/libgtsam-dev/html/a01070.html\n usr/share/doc/libgtsam-dev/html/a01070.js\n usr/share/doc/libgtsam-dev/html/a01070_source.html\n usr/share/doc/libgtsam-dev/html/a01073.html\n usr/share/doc/libgtsam-dev/html/a01073.js\n usr/share/doc/libgtsam-dev/html/a01073_source.html\n usr/share/doc/libgtsam-dev/html/a01076.html\n-usr/share/doc/libgtsam-dev/html/a01076.js\n-usr/share/doc/libgtsam-dev/html/a01076_source.html\n usr/share/doc/libgtsam-dev/html/a01079.html\n usr/share/doc/libgtsam-dev/html/a01082.html\n usr/share/doc/libgtsam-dev/html/a01085.html\n usr/share/doc/libgtsam-dev/html/a01085.js\n usr/share/doc/libgtsam-dev/html/a01085_source.html\n+usr/share/doc/libgtsam-dev/html/a01088_source.html\n usr/share/doc/libgtsam-dev/html/a01091.html\n+usr/share/doc/libgtsam-dev/html/a01091.js\n usr/share/doc/libgtsam-dev/html/a01091_source.html\n-usr/share/doc/libgtsam-dev/html/a01094.html\n-usr/share/doc/libgtsam-dev/html/a01094.js\n-usr/share/doc/libgtsam-dev/html/a01094_source.html\n usr/share/doc/libgtsam-dev/html/a01097.html\n usr/share/doc/libgtsam-dev/html/a01097.js\n usr/share/doc/libgtsam-dev/html/a01097_source.html\n usr/share/doc/libgtsam-dev/html/a01100.html\n+usr/share/doc/libgtsam-dev/html/a01100.js\n+usr/share/doc/libgtsam-dev/html/a01100_source.html\n usr/share/doc/libgtsam-dev/html/a01103.html\n usr/share/doc/libgtsam-dev/html/a01103.js\n usr/share/doc/libgtsam-dev/html/a01103_source.html\n usr/share/doc/libgtsam-dev/html/a01106.html\n usr/share/doc/libgtsam-dev/html/a01109.html\n+usr/share/doc/libgtsam-dev/html/a01109.js\n usr/share/doc/libgtsam-dev/html/a01112.html\n usr/share/doc/libgtsam-dev/html/a01115.html\n+usr/share/doc/libgtsam-dev/html/a01115.js\n+usr/share/doc/libgtsam-dev/html/a01115_source.html\n usr/share/doc/libgtsam-dev/html/a01118.html\n+usr/share/doc/libgtsam-dev/html/a01118.js\n+usr/share/doc/libgtsam-dev/html/a01118_source.html\n usr/share/doc/libgtsam-dev/html/a01121.html\n usr/share/doc/libgtsam-dev/html/a01121.js\n usr/share/doc/libgtsam-dev/html/a01121_source.html\n usr/share/doc/libgtsam-dev/html/a01124.html\n-usr/share/doc/libgtsam-dev/html/a01124.js\n-usr/share/doc/libgtsam-dev/html/a01124_source.html\n usr/share/doc/libgtsam-dev/html/a01127.html\n usr/share/doc/libgtsam-dev/html/a01127.js\n usr/share/doc/libgtsam-dev/html/a01127_source.html\n usr/share/doc/libgtsam-dev/html/a01130.html\n-usr/share/doc/libgtsam-dev/html/a01130.js\n-usr/share/doc/libgtsam-dev/html/a01130_source.html\n usr/share/doc/libgtsam-dev/html/a01133.html\n-usr/share/doc/libgtsam-dev/html/a01136.html\n-usr/share/doc/libgtsam-dev/html/a01136.js\n-usr/share/doc/libgtsam-dev/html/a01136_source.html\n-usr/share/doc/libgtsam-dev/html/a01139.html\n+usr/share/doc/libgtsam-dev/html/a01139_source.html\n usr/share/doc/libgtsam-dev/html/a01142.html\n usr/share/doc/libgtsam-dev/html/a01142.js\n usr/share/doc/libgtsam-dev/html/a01142_source.html\n usr/share/doc/libgtsam-dev/html/a01145.html\n+usr/share/doc/libgtsam-dev/html/a01145.js\n+usr/share/doc/libgtsam-dev/html/a01145_source.html\n usr/share/doc/libgtsam-dev/html/a01148.html\n+usr/share/doc/libgtsam-dev/html/a01148_source.html\n+usr/share/doc/libgtsam-dev/html/a01151.html\n+usr/share/doc/libgtsam-dev/html/a01151.js\n usr/share/doc/libgtsam-dev/html/a01151_source.html\n usr/share/doc/libgtsam-dev/html/a01154.html\n usr/share/doc/libgtsam-dev/html/a01154.js\n usr/share/doc/libgtsam-dev/html/a01154_source.html\n+usr/share/doc/libgtsam-dev/html/a01157.html\n usr/share/doc/libgtsam-dev/html/a01160.html\n usr/share/doc/libgtsam-dev/html/a01160.js\n usr/share/doc/libgtsam-dev/html/a01160_source.html\n usr/share/doc/libgtsam-dev/html/a01163.html\n usr/share/doc/libgtsam-dev/html/a01163.js\n-usr/share/doc/libgtsam-dev/html/a01163_source.html\n usr/share/doc/libgtsam-dev/html/a01166.html\n-usr/share/doc/libgtsam-dev/html/a01166.js\n-usr/share/doc/libgtsam-dev/html/a01166_source.html\n-usr/share/doc/libgtsam-dev/html/a01169.html\n-usr/share/doc/libgtsam-dev/html/a01169_source.html\n usr/share/doc/libgtsam-dev/html/a01172.html\n+usr/share/doc/libgtsam-dev/html/a01172.js\n+usr/share/doc/libgtsam-dev/html/a01172_source.html\n usr/share/doc/libgtsam-dev/html/a01184.html\n-usr/share/doc/libgtsam-dev/html/a01184.js\n usr/share/doc/libgtsam-dev/html/a01184_source.html\n usr/share/doc/libgtsam-dev/html/a01187.html\n usr/share/doc/libgtsam-dev/html/a01187.js\n usr/share/doc/libgtsam-dev/html/a01187_source.html\n+usr/share/doc/libgtsam-dev/html/a01190.html\n+usr/share/doc/libgtsam-dev/html/a01190.js\n+usr/share/doc/libgtsam-dev/html/a01190_source.html\n usr/share/doc/libgtsam-dev/html/a01193.html\n usr/share/doc/libgtsam-dev/html/a01193_source.html\n usr/share/doc/libgtsam-dev/html/a01196.html\n usr/share/doc/libgtsam-dev/html/a01196.js\n usr/share/doc/libgtsam-dev/html/a01196_source.html\n usr/share/doc/libgtsam-dev/html/a01199.html\n usr/share/doc/libgtsam-dev/html/a01199.js\n-usr/share/doc/libgtsam-dev/html/a01199_source.html\n usr/share/doc/libgtsam-dev/html/a01202.html\n+usr/share/doc/libgtsam-dev/html/a01202.js\n usr/share/doc/libgtsam-dev/html/a01202_source.html\n usr/share/doc/libgtsam-dev/html/a01205.html\n usr/share/doc/libgtsam-dev/html/a01208.html\n+usr/share/doc/libgtsam-dev/html/a01208.js\n+usr/share/doc/libgtsam-dev/html/a01208_source.html\n usr/share/doc/libgtsam-dev/html/a01211.html\n usr/share/doc/libgtsam-dev/html/a01211.js\n usr/share/doc/libgtsam-dev/html/a01214.html\n usr/share/doc/libgtsam-dev/html/a01214.js\n usr/share/doc/libgtsam-dev/html/a01214_source.html\n usr/share/doc/libgtsam-dev/html/a01217.html\n-usr/share/doc/libgtsam-dev/html/a01220.html\n-usr/share/doc/libgtsam-dev/html/a01220.js\n usr/share/doc/libgtsam-dev/html/a01223.html\n usr/share/doc/libgtsam-dev/html/a01223.js\n usr/share/doc/libgtsam-dev/html/a01223_source.html\n usr/share/doc/libgtsam-dev/html/a01226.html\n-usr/share/doc/libgtsam-dev/html/a01226.js\n-usr/share/doc/libgtsam-dev/html/a01226_source.html\n usr/share/doc/libgtsam-dev/html/a01229.html\n+usr/share/doc/libgtsam-dev/html/a01229.js\n+usr/share/doc/libgtsam-dev/html/a01229_source.html\n usr/share/doc/libgtsam-dev/html/a01232.html\n-usr/share/doc/libgtsam-dev/html/a01232.js\n-usr/share/doc/libgtsam-dev/html/a01232_source.html\n-usr/share/doc/libgtsam-dev/html/a01235_source.html\n+usr/share/doc/libgtsam-dev/html/a01235.html\n+usr/share/doc/libgtsam-dev/html/a01238.html\n+usr/share/doc/libgtsam-dev/html/a01238.js\n+usr/share/doc/libgtsam-dev/html/a01238_source.html\n+usr/share/doc/libgtsam-dev/html/a01241.html\n+usr/share/doc/libgtsam-dev/html/a01241.js\n usr/share/doc/libgtsam-dev/html/a01241_source.html\n-usr/share/doc/libgtsam-dev/html/a01244.html\n usr/share/doc/libgtsam-dev/html/a01244_source.html\n-usr/share/doc/libgtsam-dev/html/a01247_source.html\n-usr/share/doc/libgtsam-dev/html/a01250.html\n-usr/share/doc/libgtsam-dev/html/a01250.js\n usr/share/doc/libgtsam-dev/html/a01250_source.html\n-usr/share/doc/libgtsam-dev/html/a01253.html\n+usr/share/doc/libgtsam-dev/html/a01253_source.html\n usr/share/doc/libgtsam-dev/html/a01256_source.html\n-usr/share/doc/libgtsam-dev/html/a01259.html\n-usr/share/doc/libgtsam-dev/html/a01259.js\n usr/share/doc/libgtsam-dev/html/a01259_source.html\n usr/share/doc/libgtsam-dev/html/a01262.html\n-usr/share/doc/libgtsam-dev/html/a01262_source.html\n-usr/share/doc/libgtsam-dev/html/a01265.html\n-usr/share/doc/libgtsam-dev/html/a01265.js\n+usr/share/doc/libgtsam-dev/html/a01262.js\n+usr/share/doc/libgtsam-dev/html/a01265_source.html\n usr/share/doc/libgtsam-dev/html/a01268_source.html\n usr/share/doc/libgtsam-dev/html/a01271.html\n usr/share/doc/libgtsam-dev/html/a01271.js\n usr/share/doc/libgtsam-dev/html/a01271_source.html\n usr/share/doc/libgtsam-dev/html/a01274.html\n-usr/share/doc/libgtsam-dev/html/a01274.js\n usr/share/doc/libgtsam-dev/html/a01274_source.html\n usr/share/doc/libgtsam-dev/html/a01277.html\n-usr/share/doc/libgtsam-dev/html/a01277.js\n usr/share/doc/libgtsam-dev/html/a01277_source.html\n usr/share/doc/libgtsam-dev/html/a01280.html\n-usr/share/doc/libgtsam-dev/html/a01280.js\n usr/share/doc/libgtsam-dev/html/a01280_source.html\n usr/share/doc/libgtsam-dev/html/a01283.html\n usr/share/doc/libgtsam-dev/html/a01283.js\n usr/share/doc/libgtsam-dev/html/a01283_source.html\n-usr/share/doc/libgtsam-dev/html/a01286.html\n-usr/share/doc/libgtsam-dev/html/a01286.js\n usr/share/doc/libgtsam-dev/html/a01286_source.html\n+usr/share/doc/libgtsam-dev/html/a01289.html\n+usr/share/doc/libgtsam-dev/html/a01289.js\n usr/share/doc/libgtsam-dev/html/a01289_source.html\n usr/share/doc/libgtsam-dev/html/a01292.html\n usr/share/doc/libgtsam-dev/html/a01292.js\n usr/share/doc/libgtsam-dev/html/a01292_source.html\n+usr/share/doc/libgtsam-dev/html/a01295.html\n+usr/share/doc/libgtsam-dev/html/a01295.js\n usr/share/doc/libgtsam-dev/html/a01295_source.html\n usr/share/doc/libgtsam-dev/html/a01298.html\n-usr/share/doc/libgtsam-dev/html/a01298.js\n usr/share/doc/libgtsam-dev/html/a01298_source.html\n usr/share/doc/libgtsam-dev/html/a01301.html\n+usr/share/doc/libgtsam-dev/html/a01301.js\n usr/share/doc/libgtsam-dev/html/a01301_source.html\n usr/share/doc/libgtsam-dev/html/a01304.html\n-usr/share/doc/libgtsam-dev/html/a01304.js\n-usr/share/doc/libgtsam-dev/html/a01304_source.html\n usr/share/doc/libgtsam-dev/html/a01307.html\n usr/share/doc/libgtsam-dev/html/a01307.js\n usr/share/doc/libgtsam-dev/html/a01307_source.html\n-usr/share/doc/libgtsam-dev/html/a01310_source.html\n+usr/share/doc/libgtsam-dev/html/a01313_source.html\n usr/share/doc/libgtsam-dev/html/a01316.html\n usr/share/doc/libgtsam-dev/html/a01316.js\n usr/share/doc/libgtsam-dev/html/a01316_source.html\n usr/share/doc/libgtsam-dev/html/a01319.html\n usr/share/doc/libgtsam-dev/html/a01319.js\n-usr/share/doc/libgtsam-dev/html/a01319_source.html\n+usr/share/doc/libgtsam-dev/html/a01322.html\n+usr/share/doc/libgtsam-dev/html/a01322.js\n usr/share/doc/libgtsam-dev/html/a01322_source.html\n usr/share/doc/libgtsam-dev/html/a01325.html\n usr/share/doc/libgtsam-dev/html/a01325.js\n+usr/share/doc/libgtsam-dev/html/a01325_source.html\n+usr/share/doc/libgtsam-dev/html/a01328.html\n+usr/share/doc/libgtsam-dev/html/a01328.js\n usr/share/doc/libgtsam-dev/html/a01328_source.html\n usr/share/doc/libgtsam-dev/html/a01331.html\n usr/share/doc/libgtsam-dev/html/a01331.js\n usr/share/doc/libgtsam-dev/html/a01331_source.html\n usr/share/doc/libgtsam-dev/html/a01334.html\n usr/share/doc/libgtsam-dev/html/a01334.js\n usr/share/doc/libgtsam-dev/html/a01334_source.html\n usr/share/doc/libgtsam-dev/html/a01337.html\n+usr/share/doc/libgtsam-dev/html/a01337.js\n usr/share/doc/libgtsam-dev/html/a01337_source.html\n-usr/share/doc/libgtsam-dev/html/a01340.html\n+usr/share/doc/libgtsam-dev/html/a01340_source.html\n usr/share/doc/libgtsam-dev/html/a01343.html\n-usr/share/doc/libgtsam-dev/html/a01343.js\n-usr/share/doc/libgtsam-dev/html/a01343_source.html\n usr/share/doc/libgtsam-dev/html/a01346.html\n-usr/share/doc/libgtsam-dev/html/a01346.js\n-usr/share/doc/libgtsam-dev/html/a01346_source.html\n usr/share/doc/libgtsam-dev/html/a01349.html\n-usr/share/doc/libgtsam-dev/html/a01349.js\n-usr/share/doc/libgtsam-dev/html/a01349_source.html\n-usr/share/doc/libgtsam-dev/html/a01352.html\n usr/share/doc/libgtsam-dev/html/a01355.html\n-usr/share/doc/libgtsam-dev/html/a01355.js\n usr/share/doc/libgtsam-dev/html/a01358.html\n+usr/share/doc/libgtsam-dev/html/a01358.js\n+usr/share/doc/libgtsam-dev/html/a01358_source.html\n usr/share/doc/libgtsam-dev/html/a01361.html\n usr/share/doc/libgtsam-dev/html/a01361.js\n usr/share/doc/libgtsam-dev/html/a01361_source.html\n+usr/share/doc/libgtsam-dev/html/a01364.html\n+usr/share/doc/libgtsam-dev/html/a01364.js\n+usr/share/doc/libgtsam-dev/html/a01364_source.html\n usr/share/doc/libgtsam-dev/html/a01367.html\n usr/share/doc/libgtsam-dev/html/a01367.js\n usr/share/doc/libgtsam-dev/html/a01367_source.html\n usr/share/doc/libgtsam-dev/html/a01370.html\n usr/share/doc/libgtsam-dev/html/a01370.js\n usr/share/doc/libgtsam-dev/html/a01370_source.html\n usr/share/doc/libgtsam-dev/html/a01373.html\n+usr/share/doc/libgtsam-dev/html/a01373.js\n+usr/share/doc/libgtsam-dev/html/a01373_source.html\n usr/share/doc/libgtsam-dev/html/a01376.html\n usr/share/doc/libgtsam-dev/html/a01376.js\n-usr/share/doc/libgtsam-dev/html/a01376_source.html\n usr/share/doc/libgtsam-dev/html/a01379.html\n+usr/share/doc/libgtsam-dev/html/a01379.js\n+usr/share/doc/libgtsam-dev/html/a01379_source.html\n usr/share/doc/libgtsam-dev/html/a01382.html\n usr/share/doc/libgtsam-dev/html/a01382.js\n usr/share/doc/libgtsam-dev/html/a01382_source.html\n usr/share/doc/libgtsam-dev/html/a01385.html\n-usr/share/doc/libgtsam-dev/html/a01385.js\n-usr/share/doc/libgtsam-dev/html/a01385_source.html\n usr/share/doc/libgtsam-dev/html/a01388.html\n+usr/share/doc/libgtsam-dev/html/a01388.js\n+usr/share/doc/libgtsam-dev/html/a01388_source.html\n usr/share/doc/libgtsam-dev/html/a01391.html\n+usr/share/doc/libgtsam-dev/html/a01394.html\n usr/share/doc/libgtsam-dev/html/a01397.html\n usr/share/doc/libgtsam-dev/html/a01397_source.html\n-usr/share/doc/libgtsam-dev/html/a01403.html\n-usr/share/doc/libgtsam-dev/html/a01406.html\n-usr/share/doc/libgtsam-dev/html/a01406_source.html\n+usr/share/doc/libgtsam-dev/html/a01400.html\n+usr/share/doc/libgtsam-dev/html/a01400_source.html\n usr/share/doc/libgtsam-dev/html/a01409.html\n usr/share/doc/libgtsam-dev/html/a01410.html\n usr/share/doc/libgtsam-dev/html/a01411.html\n usr/share/doc/libgtsam-dev/html/a01412.html\n usr/share/doc/libgtsam-dev/html/a01413.html\n usr/share/doc/libgtsam-dev/html/a01414.html\n usr/share/doc/libgtsam-dev/html/a01415.html\n"}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,14 +1,14 @@\n drwxr-xr-x 0 root (0) root (0) 0 2024-01-09 05:51:35.000000 ./\n drwxr-xr-x 0 root (0) root (0) 0 2024-01-09 05:51:35.000000 ./usr/\n drwxr-xr-x 0 root (0) root (0) 0 2024-01-09 05:51:35.000000 ./usr/share/\n drwxr-xr-x 0 root (0) root (0) 0 2024-01-09 05:51:35.000000 ./usr/share/doc/\n drwxr-xr-x 0 root (0) root (0) 0 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/\n -rw-r--r-- 0 root (0) root (0) 79992 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/Hybrid.pdf\n--rw-r--r-- 0 root (0) root (0) 155245 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/ImuFactor.pdf\n+-rw-r--r-- 0 root (0) root (0) 154915 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/ImuFactor.pdf\n -rw-r--r-- 0 root (0) root (0) 42738 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/cholesky.pdf\n drwxr-xr-x 0 root (0) root (0) 0 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/examples/\n -rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/examples/CMakeLists.txt\n -rw-r--r-- 0 root (0) root (0) 3425 2023-09-04 02:21:18.000000 ./usr/share/doc/libgtsam-dev/examples/CameraResectioning.cpp\n -rw-r--r-- 0 root (0) root (0) 3838 2023-09-04 02:21:18.000000 ./usr/share/doc/libgtsam-dev/examples/CombinedImuFactorsExample.cpp.gz\n -rw-r--r-- 0 root (0) root (0) 3896 2023-09-04 02:21:18.000000 ./usr/share/doc/libgtsam-dev/examples/CreateSFMExampleData.cpp\n drwxr-xr-x 0 root (0) root (0) 0 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/examples/Data/\n@@ -133,958 +133,958 @@\n -rw-r--r-- 0 root (0) root (0) 2889 2023-09-04 02:21:18.000000 ./usr/share/doc/libgtsam-dev/examples/UGM_chain.cpp\n -rw-r--r-- 0 root (0) root (0) 2641 2023-09-04 02:21:18.000000 ./usr/share/doc/libgtsam-dev/examples/UGM_small.cpp\n -rw-r--r-- 0 root (0) root (0) 2368 2023-09-04 02:21:18.000000 ./usr/share/doc/libgtsam-dev/examples/VisualISAM2Example.cpp.gz\n -rw-r--r-- 0 root (0) root (0) 2104 2023-09-04 02:21:18.000000 ./usr/share/doc/libgtsam-dev/examples/VisualISAMExample.cpp.gz\n -rw-r--r-- 0 root (0) root (0) 1713 2023-09-04 02:21:18.000000 ./usr/share/doc/libgtsam-dev/examples/easyPoint2KalmanFilter.cpp.gz\n -rw-r--r-- 0 root (0) root (0) 3926 2023-09-04 02:21:18.000000 ./usr/share/doc/libgtsam-dev/examples/elaboratePoint2KalmanFilter.cpp.gz\n drwxr-xr-x 0 root (0) root (0) 0 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/\n--rw-r--r-- 0 root (0) root (0) 12084 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00002.html\n--rw-r--r-- 0 root (0) root (0) 696 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00002.js\n--rw-r--r-- 0 root (0) root (0) 31578 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00002_source.html\n--rw-r--r-- 0 root (0) root (0) 6595 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00005.html\n--rw-r--r-- 0 root (0) root (0) 91 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00005.js\n--rw-r--r-- 0 root (0) root (0) 8433 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00008.html\n--rw-r--r-- 0 root (0) root (0) 14770 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00008_source.html\n--rw-r--r-- 0 root (0) root (0) 8418 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00011.html\n--rw-r--r-- 0 root (0) root (0) 343 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00011.js\n--rw-r--r-- 0 root (0) root (0) 27879 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00011_source.html\n--rw-r--r-- 0 root (0) root (0) 6665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00014.html\n--rw-r--r-- 0 root (0) root (0) 18668 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00014_source.html\n--rw-r--r-- 0 root (0) root (0) 7057 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00017.html\n--rw-r--r-- 0 root (0) root (0) 172 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00017.js\n--rw-r--r-- 0 root (0) root (0) 18897 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00017_source.html\n--rw-r--r-- 0 root (0) root (0) 46759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00020.html\n--rw-r--r-- 0 root (0) root (0) 3446 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00020.js\n--rw-r--r-- 0 root (0) root (0) 77745 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00020_source.html\n--rw-r--r-- 0 root (0) root (0) 6757 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00023.html\n--rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00023.js\n--rw-r--r-- 0 root (0) root (0) 35281 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00023_source.html\n--rw-r--r-- 0 root (0) root (0) 26139 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00026_source.html\n--rw-r--r-- 0 root (0) root (0) 7978 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00032.html\n--rw-r--r-- 0 root (0) root (0) 9190 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00038.html\n--rw-r--r-- 0 root (0) root (0) 250 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00038.js\n--rw-r--r-- 0 root (0) root (0) 12942 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00038_source.html\n--rw-r--r-- 0 root (0) root (0) 6608 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00041.html\n--rw-r--r-- 0 root (0) root (0) 82782 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00041_source.html\n--rw-r--r-- 0 root (0) root (0) 5679 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00044.html\n--rw-r--r-- 0 root (0) root (0) 24215 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00047.html\n--rw-r--r-- 0 root (0) root (0) 1480 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00047.js\n--rw-r--r-- 0 root (0) root (0) 51312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00047_source.html\n--rw-r--r-- 0 root (0) root (0) 7344 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00050.html\n--rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00050.js\n--rw-r--r-- 0 root (0) root (0) 17409 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00053.html\n--rw-r--r-- 0 root (0) root (0) 1045 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00053.js\n--rw-r--r-- 0 root (0) root (0) 66871 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00053_source.html\n--rw-r--r-- 0 root (0) root (0) 7913 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00056.html\n--rw-r--r-- 0 root (0) root (0) 14683 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00056_source.html\n--rw-r--r-- 0 root (0) root (0) 6548 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00059.html\n--rw-r--r-- 0 root (0) root (0) 65 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00059.js\n--rw-r--r-- 0 root (0) root (0) 20753 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00059_source.html\n--rw-r--r-- 0 root (0) root (0) 6657 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00062.html\n--rw-r--r-- 0 root (0) root (0) 27843 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00062_source.html\n--rw-r--r-- 0 root (0) root (0) 13624 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00065.html\n--rw-r--r-- 0 root (0) root (0) 675 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00065.js\n--rw-r--r-- 0 root (0) root (0) 39982 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00065_source.html\n--rw-r--r-- 0 root (0) root (0) 28203 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00068.html\n--rw-r--r-- 0 root (0) root (0) 2121 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00068.js\n--rw-r--r-- 0 root (0) root (0) 6741 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00071.html\n--rw-r--r-- 0 root (0) root (0) 52828 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00071_source.html\n--rw-r--r-- 0 root (0) root (0) 17818 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00074.html\n--rw-r--r-- 0 root (0) root (0) 1016 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00074.js\n--rw-r--r-- 0 root (0) root (0) 65609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00074_source.html\n--rw-r--r-- 0 root (0) root (0) 7079 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00077.html\n--rw-r--r-- 0 root (0) root (0) 16163 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00077_source.html\n--rw-r--r-- 0 root (0) root (0) 15649 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00080.html\n--rw-r--r-- 0 root (0) root (0) 556 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00080.js\n--rw-r--r-- 0 root (0) root (0) 29171 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00080_source.html\n--rw-r--r-- 0 root (0) root (0) 6884 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00083.html\n--rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00083.js\n--rw-r--r-- 0 root (0) root (0) 9315 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00083_source.html\n--rw-r--r-- 0 root (0) root (0) 19377 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00086_source.html\n--rw-r--r-- 0 root (0) root (0) 27261 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00089.html\n--rw-r--r-- 0 root (0) root (0) 1636 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00089.js\n--rw-r--r-- 0 root (0) root (0) 37709 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00089_source.html\n--rw-r--r-- 0 root (0) root (0) 25653 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00092.html\n--rw-r--r-- 0 root (0) root (0) 2086 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00092.js\n--rw-r--r-- 0 root (0) root (0) 57397 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00092_source.html\n--rw-r--r-- 0 root (0) root (0) 6209 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00095.html\n--rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00095.js\n--rw-r--r-- 0 root (0) root (0) 25066 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00095_source.html\n--rw-r--r-- 0 root (0) root (0) 77207 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00098_source.html\n--rw-r--r-- 0 root (0) root (0) 5941 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00101.html\n--rw-r--r-- 0 root (0) root (0) 10629 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00104.html\n--rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00104.js\n--rw-r--r-- 0 root (0) root (0) 15877 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00104_source.html\n--rw-r--r-- 0 root (0) root (0) 5816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00107.html\n--rw-r--r-- 0 root (0) root (0) 52200 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00110_source.html\n--rw-r--r-- 0 root (0) root (0) 16112 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00113_source.html\n+-rw-r--r-- 0 root (0) root (0) 6741 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00002.html\n+-rw-r--r-- 0 root (0) root (0) 52828 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00002_source.html\n+-rw-r--r-- 0 root (0) root (0) 17818 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00005.html\n+-rw-r--r-- 0 root (0) root (0) 1016 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00005.js\n+-rw-r--r-- 0 root (0) root (0) 65609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00005_source.html\n+-rw-r--r-- 0 root (0) root (0) 7389 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00008.html\n+-rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00008.js\n+-rw-r--r-- 0 root (0) root (0) 9727 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00008_source.html\n+-rw-r--r-- 0 root (0) root (0) 9399 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00011.html\n+-rw-r--r-- 0 root (0) root (0) 237 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00011.js\n+-rw-r--r-- 0 root (0) root (0) 12509 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00011_source.html\n+-rw-r--r-- 0 root (0) root (0) 6757 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00014.html\n+-rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00014.js\n+-rw-r--r-- 0 root (0) root (0) 35281 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00014_source.html\n+-rw-r--r-- 0 root (0) root (0) 52200 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00017_source.html\n+-rw-r--r-- 0 root (0) root (0) 24215 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00020.html\n+-rw-r--r-- 0 root (0) root (0) 1480 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00020.js\n+-rw-r--r-- 0 root (0) root (0) 51312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00020_source.html\n+-rw-r--r-- 0 root (0) root (0) 6548 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00023.html\n+-rw-r--r-- 0 root (0) root (0) 65 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00023.js\n+-rw-r--r-- 0 root (0) root (0) 20753 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00023_source.html\n+-rw-r--r-- 0 root (0) root (0) 46759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00026.html\n+-rw-r--r-- 0 root (0) root (0) 3446 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00026.js\n+-rw-r--r-- 0 root (0) root (0) 77745 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00026_source.html\n+-rw-r--r-- 0 root (0) root (0) 8401 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00029.html\n+-rw-r--r-- 0 root (0) root (0) 7079 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00032.html\n+-rw-r--r-- 0 root (0) root (0) 16163 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00032_source.html\n+-rw-r--r-- 0 root (0) root (0) 6662 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00035.html\n+-rw-r--r-- 0 root (0) root (0) 18268 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00035_source.html\n+-rw-r--r-- 0 root (0) root (0) 10629 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00038.html\n+-rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00038.js\n+-rw-r--r-- 0 root (0) root (0) 15877 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00038_source.html\n+-rw-r--r-- 0 root (0) root (0) 7057 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00041.html\n+-rw-r--r-- 0 root (0) root (0) 172 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00041.js\n+-rw-r--r-- 0 root (0) root (0) 18897 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00041_source.html\n+-rw-r--r-- 0 root (0) root (0) 12084 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00044.html\n+-rw-r--r-- 0 root (0) root (0) 696 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00044.js\n+-rw-r--r-- 0 root (0) root (0) 31578 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00044_source.html\n+-rw-r--r-- 0 root (0) root (0) 26139 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00047_source.html\n+-rw-r--r-- 0 root (0) root (0) 18926 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00050.html\n+-rw-r--r-- 0 root (0) root (0) 1345 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00050.js\n+-rw-r--r-- 0 root (0) root (0) 8433 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00053.html\n+-rw-r--r-- 0 root (0) root (0) 14770 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00053_source.html\n+-rw-r--r-- 0 root (0) root (0) 13624 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00056.html\n+-rw-r--r-- 0 root (0) root (0) 675 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00056.js\n+-rw-r--r-- 0 root (0) root (0) 39982 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00056_source.html\n+-rw-r--r-- 0 root (0) root (0) 17409 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00059.html\n+-rw-r--r-- 0 root (0) root (0) 1045 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00059.js\n+-rw-r--r-- 0 root (0) root (0) 66871 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00059_source.html\n+-rw-r--r-- 0 root (0) root (0) 25653 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00062.html\n+-rw-r--r-- 0 root (0) root (0) 2086 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00062.js\n+-rw-r--r-- 0 root (0) root (0) 57397 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00062_source.html\n+-rw-r--r-- 0 root (0) root (0) 7344 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00068.html\n+-rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00068.js\n+-rw-r--r-- 0 root (0) root (0) 28203 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00071.html\n+-rw-r--r-- 0 root (0) root (0) 2121 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00071.js\n+-rw-r--r-- 0 root (0) root (0) 66646 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00074.html\n+-rw-r--r-- 0 root (0) root (0) 2508 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00074.js\n+-rw-r--r-- 0 root (0) root (0) 192234 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00074_source.html\n+-rw-r--r-- 0 root (0) root (0) 9190 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00077.html\n+-rw-r--r-- 0 root (0) root (0) 250 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00077.js\n+-rw-r--r-- 0 root (0) root (0) 12942 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00077_source.html\n+-rw-r--r-- 0 root (0) root (0) 6884 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00080.html\n+-rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00080.js\n+-rw-r--r-- 0 root (0) root (0) 9315 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00080_source.html\n+-rw-r--r-- 0 root (0) root (0) 5816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00083.html\n+-rw-r--r-- 0 root (0) root (0) 6665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00086.html\n+-rw-r--r-- 0 root (0) root (0) 18668 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00086_source.html\n+-rw-r--r-- 0 root (0) root (0) 7913 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00089.html\n+-rw-r--r-- 0 root (0) root (0) 14683 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00089_source.html\n+-rw-r--r-- 0 root (0) root (0) 6657 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00092.html\n+-rw-r--r-- 0 root (0) root (0) 27843 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00092_source.html\n+-rw-r--r-- 0 root (0) root (0) 7983 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00095.html\n+-rw-r--r-- 0 root (0) root (0) 312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00095.js\n+-rw-r--r-- 0 root (0) root (0) 48110 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00095_source.html\n+-rw-r--r-- 0 root (0) root (0) 8418 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00098.html\n+-rw-r--r-- 0 root (0) root (0) 343 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00098.js\n+-rw-r--r-- 0 root (0) root (0) 27879 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00098_source.html\n+-rw-r--r-- 0 root (0) root (0) 7978 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00101.html\n+-rw-r--r-- 0 root (0) root (0) 19377 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00104_source.html\n+-rw-r--r-- 0 root (0) root (0) 11015 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00107.html\n+-rw-r--r-- 0 root (0) root (0) 429 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00107.js\n+-rw-r--r-- 0 root (0) root (0) 37799 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00107_source.html\n+-rw-r--r-- 0 root (0) root (0) 15649 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00110.html\n+-rw-r--r-- 0 root (0) root (0) 556 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00110.js\n+-rw-r--r-- 0 root (0) root (0) 29171 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00110_source.html\n+-rw-r--r-- 0 root (0) root (0) 27261 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00113.html\n+-rw-r--r-- 0 root (0) root (0) 1636 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00113.js\n+-rw-r--r-- 0 root (0) root (0) 37709 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00113_source.html\n -rw-r--r-- 0 root (0) root (0) 10386 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00116.html\n -rw-r--r-- 0 root (0) root (0) 125 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00116.js\n -rw-r--r-- 0 root (0) root (0) 27505 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00116_source.html\n--rw-r--r-- 0 root (0) root (0) 9399 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00122.html\n--rw-r--r-- 0 root (0) root (0) 237 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00122.js\n--rw-r--r-- 0 root (0) root (0) 12509 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00122_source.html\n--rw-r--r-- 0 root (0) root (0) 7389 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00125.html\n--rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00125.js\n--rw-r--r-- 0 root (0) root (0) 9727 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00125_source.html\n--rw-r--r-- 0 root (0) root (0) 8401 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00128.html\n--rw-r--r-- 0 root (0) root (0) 21582 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00131.html\n--rw-r--r-- 0 root (0) root (0) 143 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00131.js\n--rw-r--r-- 0 root (0) root (0) 56603 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00131_source.html\n--rw-r--r-- 0 root (0) root (0) 17131 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00134.html\n--rw-r--r-- 0 root (0) root (0) 35570 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00134_source.html\n--rw-r--r-- 0 root (0) root (0) 7983 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00137.html\n--rw-r--r-- 0 root (0) root (0) 312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00137.js\n--rw-r--r-- 0 root (0) root (0) 48110 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00137_source.html\n--rw-r--r-- 0 root (0) root (0) 18926 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00140.html\n--rw-r--r-- 0 root (0) root (0) 1345 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00140.js\n--rw-r--r-- 0 root (0) root (0) 66646 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00143.html\n--rw-r--r-- 0 root (0) root (0) 2508 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00143.js\n--rw-r--r-- 0 root (0) root (0) 192234 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00143_source.html\n--rw-r--r-- 0 root (0) root (0) 11015 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00146.html\n--rw-r--r-- 0 root (0) root (0) 429 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00146.js\n--rw-r--r-- 0 root (0) root (0) 37799 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00146_source.html\n--rw-r--r-- 0 root (0) root (0) 6662 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00149.html\n--rw-r--r-- 0 root (0) root (0) 18268 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00149_source.html\n--rw-r--r-- 0 root (0) root (0) 7825 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00152.html\n--rw-r--r-- 0 root (0) root (0) 150 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00152.js\n--rw-r--r-- 0 root (0) root (0) 40486 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00152_source.html\n+-rw-r--r-- 0 root (0) root (0) 6608 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00122.html\n+-rw-r--r-- 0 root (0) root (0) 82782 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00122_source.html\n+-rw-r--r-- 0 root (0) root (0) 5679 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00125.html\n+-rw-r--r-- 0 root (0) root (0) 5941 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00131.html\n+-rw-r--r-- 0 root (0) root (0) 6595 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00134.html\n+-rw-r--r-- 0 root (0) root (0) 91 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00134.js\n+-rw-r--r-- 0 root (0) root (0) 21582 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00137.html\n+-rw-r--r-- 0 root (0) root (0) 143 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00137.js\n+-rw-r--r-- 0 root (0) root (0) 56603 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00137_source.html\n+-rw-r--r-- 0 root (0) root (0) 6209 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00140.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00140.js\n+-rw-r--r-- 0 root (0) root (0) 25066 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00140_source.html\n+-rw-r--r-- 0 root (0) root (0) 16112 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00143_source.html\n+-rw-r--r-- 0 root (0) root (0) 77207 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00146_source.html\n+-rw-r--r-- 0 root (0) root (0) 17131 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00149.html\n+-rw-r--r-- 0 root (0) root (0) 35570 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00149_source.html\n+-rw-r--r-- 0 root (0) root (0) 8041 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00152.html\n+-rw-r--r-- 0 root (0) root (0) 225 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00152.js\n+-rw-r--r-- 0 root (0) root (0) 24383 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00152_source.html\n -rw-r--r-- 0 root (0) root (0) 7226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00155.html\n -rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00155.js\n -rw-r--r-- 0 root (0) root (0) 13159 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00155_source.html\n--rw-r--r-- 0 root (0) root (0) 13635 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00158.html\n--rw-r--r-- 0 root (0) root (0) 803 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00158.js\n--rw-r--r-- 0 root (0) root (0) 85202 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00158_source.html\n--rw-r--r-- 0 root (0) root (0) 6449 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00161.html\n--rw-r--r-- 0 root (0) root (0) 68 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00161.js\n--rw-r--r-- 0 root (0) root (0) 18960 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00161_source.html\n--rw-r--r-- 0 root (0) root (0) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00164.html\n--rw-r--r-- 0 root (0) root (0) 8041 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00167.html\n--rw-r--r-- 0 root (0) root (0) 225 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00167.js\n--rw-r--r-- 0 root (0) root (0) 24383 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00167_source.html\n--rw-r--r-- 0 root (0) root (0) 5706 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00170.html\n+-rw-r--r-- 0 root (0) root (0) 6449 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00158.html\n+-rw-r--r-- 0 root (0) root (0) 68 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00158.js\n+-rw-r--r-- 0 root (0) root (0) 18960 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00158_source.html\n+-rw-r--r-- 0 root (0) root (0) 7825 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00161.html\n+-rw-r--r-- 0 root (0) root (0) 150 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00161.js\n+-rw-r--r-- 0 root (0) root (0) 40486 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00161_source.html\n+-rw-r--r-- 0 root (0) root (0) 5706 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00164.html\n+-rw-r--r-- 0 root (0) root (0) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00167.html\n+-rw-r--r-- 0 root (0) root (0) 10375 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00170.html\n+-rw-r--r-- 0 root (0) root (0) 324 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00170.js\n+-rw-r--r-- 0 root (0) root (0) 54641 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00170_source.html\n -rw-r--r-- 0 root (0) root (0) 7285 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00173.html\n -rw-r--r-- 0 root (0) root (0) 66 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00173.js\n -rw-r--r-- 0 root (0) root (0) 22085 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00173_source.html\n--rw-r--r-- 0 root (0) root (0) 10375 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00176.html\n--rw-r--r-- 0 root (0) root (0) 324 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00176.js\n--rw-r--r-- 0 root (0) root (0) 54641 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00176_source.html\n--rw-r--r-- 0 root (0) root (0) 7427 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00179.html\n--rw-r--r-- 0 root (0) root (0) 98 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00179.js\n--rw-r--r-- 0 root (0) root (0) 13987 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00179_source.html\n--rw-r--r-- 0 root (0) root (0) 13686 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00182.html\n--rw-r--r-- 0 root (0) root (0) 244 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00182.js\n--rw-r--r-- 0 root (0) root (0) 7532 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00185.html\n--rw-r--r-- 0 root (0) root (0) 162 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00185.js\n--rw-r--r-- 0 root (0) root (0) 7580 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00188.html\n--rw-r--r-- 0 root (0) root (0) 159 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00188.js\n--rw-r--r-- 0 root (0) root (0) 29980 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00188_source.html\n--rw-r--r-- 0 root (0) root (0) 9286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00191.html\n--rw-r--r-- 0 root (0) root (0) 309 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00191.js\n--rw-r--r-- 0 root (0) root (0) 27194 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00191_source.html\n--rw-r--r-- 0 root (0) root (0) 5592 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00194.html\n--rw-r--r-- 0 root (0) root (0) 6604 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00197.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00197.js\n--rw-r--r-- 0 root (0) root (0) 32573 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00197_source.html\n--rw-r--r-- 0 root (0) root (0) 5707 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00200.html\n--rw-r--r-- 0 root (0) root (0) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00203.html\n--rw-r--r-- 0 root (0) root (0) 6642 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00206.html\n--rw-r--r-- 0 root (0) root (0) 18784 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00206_source.html\n--rw-r--r-- 0 root (0) root (0) 5555 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00209.html\n--rw-r--r-- 0 root (0) root (0) 6278 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00212.html\n+-rw-r--r-- 0 root (0) root (0) 13635 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00176.html\n+-rw-r--r-- 0 root (0) root (0) 803 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00176.js\n+-rw-r--r-- 0 root (0) root (0) 85202 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00176_source.html\n+-rw-r--r-- 0 root (0) root (0) 12074 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00179.html\n+-rw-r--r-- 0 root (0) root (0) 444 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00179.js\n+-rw-r--r-- 0 root (0) root (0) 69958 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00179_source.html\n+-rw-r--r-- 0 root (0) root (0) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00182.html\n+-rw-r--r-- 0 root (0) root (0) 206584 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00185_source.html\n+-rw-r--r-- 0 root (0) root (0) 6589 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00188.html\n+-rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00188.js\n+-rw-r--r-- 0 root (0) root (0) 47723 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00188_source.html\n+-rw-r--r-- 0 root (0) root (0) 10021 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00191.html\n+-rw-r--r-- 0 root (0) root (0) 244 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00191.js\n+-rw-r--r-- 0 root (0) root (0) 21706 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00191_source.html\n+-rw-r--r-- 0 root (0) root (0) 7124 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00194.html\n+-rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00194.js\n+-rw-r--r-- 0 root (0) root (0) 25959 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00194_source.html\n+-rw-r--r-- 0 root (0) root (0) 9288 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00197.html\n+-rw-r--r-- 0 root (0) root (0) 337 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00197.js\n+-rw-r--r-- 0 root (0) root (0) 50616 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00197_source.html\n+-rw-r--r-- 0 root (0) root (0) 6604 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00200.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00200.js\n+-rw-r--r-- 0 root (0) root (0) 32573 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00200_source.html\n+-rw-r--r-- 0 root (0) root (0) 5555 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00203.html\n+-rw-r--r-- 0 root (0) root (0) 7427 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00206.html\n+-rw-r--r-- 0 root (0) root (0) 98 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00206.js\n+-rw-r--r-- 0 root (0) root (0) 13987 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00206_source.html\n+-rw-r--r-- 0 root (0) root (0) 13686 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00209.html\n+-rw-r--r-- 0 root (0) root (0) 244 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00209.js\n+-rw-r--r-- 0 root (0) root (0) 5540 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00212.html\n -rw-r--r-- 0 root (0) root (0) 5566 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00215.html\n--rw-r--r-- 0 root (0) root (0) 6434 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00218.html\n--rw-r--r-- 0 root (0) root (0) 19109 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00218_source.html\n--rw-r--r-- 0 root (0) root (0) 8783 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00221.html\n--rw-r--r-- 0 root (0) root (0) 289 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00221.js\n--rw-r--r-- 0 root (0) root (0) 24144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00221_source.html\n--rw-r--r-- 0 root (0) root (0) 7329 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00224.html\n--rw-r--r-- 0 root (0) root (0) 164 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00224.js\n--rw-r--r-- 0 root (0) root (0) 40301 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00224_source.html\n--rw-r--r-- 0 root (0) root (0) 6589 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00227.html\n--rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00227.js\n--rw-r--r-- 0 root (0) root (0) 47723 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00227_source.html\n--rw-r--r-- 0 root (0) root (0) 9288 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00230.html\n--rw-r--r-- 0 root (0) root (0) 337 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00230.js\n--rw-r--r-- 0 root (0) root (0) 50616 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00230_source.html\n--rw-r--r-- 0 root (0) root (0) 206584 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00233_source.html\n--rw-r--r-- 0 root (0) root (0) 5540 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00236.html\n--rw-r--r-- 0 root (0) root (0) 12074 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00239.html\n--rw-r--r-- 0 root (0) root (0) 444 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00239.js\n--rw-r--r-- 0 root (0) root (0) 69958 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00239_source.html\n--rw-r--r-- 0 root (0) root (0) 6594 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00242.html\n--rw-r--r-- 0 root (0) root (0) 86 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00242.js\n--rw-r--r-- 0 root (0) root (0) 20439 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00242_source.html\n--rw-r--r-- 0 root (0) root (0) 7124 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00245.html\n--rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00245.js\n--rw-r--r-- 0 root (0) root (0) 25959 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00245_source.html\n--rw-r--r-- 0 root (0) root (0) 10021 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00248.html\n--rw-r--r-- 0 root (0) root (0) 244 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00248.js\n--rw-r--r-- 0 root (0) root (0) 21706 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00248_source.html\n--rw-r--r-- 0 root (0) root (0) 6320 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00251.html\n--rw-r--r-- 0 root (0) root (0) 15576 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00251_source.html\n--rw-r--r-- 0 root (0) root (0) 7720 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00254.html\n--rw-r--r-- 0 root (0) root (0) 184 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00254.js\n--rw-r--r-- 0 root (0) root (0) 6491 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00257.html\n--rw-r--r-- 0 root (0) root (0) 95 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00257.js\n--rw-r--r-- 0 root (0) root (0) 6738 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00260.html\n--rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00260.js\n--rw-r--r-- 0 root (0) root (0) 44827 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00260_source.html\n--rw-r--r-- 0 root (0) root (0) 6998 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00266.html\n--rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00266.js\n--rw-r--r-- 0 root (0) root (0) 24591 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00266_source.html\n--rw-r--r-- 0 root (0) root (0) 5552 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00269.html\n--rw-r--r-- 0 root (0) root (0) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00272.html\n--rw-r--r-- 0 root (0) root (0) 29089 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00275_source.html\n--rw-r--r-- 0 root (0) root (0) 10132 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00278.html\n--rw-r--r-- 0 root (0) root (0) 389 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00278.js\n--rw-r--r-- 0 root (0) root (0) 71861 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00278_source.html\n--rw-r--r-- 0 root (0) root (0) 7581 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00281.html\n--rw-r--r-- 0 root (0) root (0) 286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00281.js\n--rw-r--r-- 0 root (0) root (0) 41607 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00281_source.html\n--rw-r--r-- 0 root (0) root (0) 31104 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00284_source.html\n--rw-r--r-- 0 root (0) root (0) 6286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00287.html\n--rw-r--r-- 0 root (0) root (0) 5688 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00290.html\n--rw-r--r-- 0 root (0) root (0) 31329 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00290_source.html\n--rw-r--r-- 0 root (0) root (0) 7636 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00293.html\n--rw-r--r-- 0 root (0) root (0) 101 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00293.js\n--rw-r--r-- 0 root (0) root (0) 33928 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00293_source.html\n--rw-r--r-- 0 root (0) root (0) 6288 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00296.html\n--rw-r--r-- 0 root (0) root (0) 4906 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00302.html\n+-rw-r--r-- 0 root (0) root (0) 5552 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00218.html\n+-rw-r--r-- 0 root (0) root (0) 6642 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00221.html\n+-rw-r--r-- 0 root (0) root (0) 18784 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00221_source.html\n+-rw-r--r-- 0 root (0) root (0) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00224.html\n+-rw-r--r-- 0 root (0) root (0) 6998 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00227.html\n+-rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00227.js\n+-rw-r--r-- 0 root (0) root (0) 24591 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00227_source.html\n+-rw-r--r-- 0 root (0) root (0) 6278 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00230.html\n+-rw-r--r-- 0 root (0) root (0) 7329 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00233.html\n+-rw-r--r-- 0 root (0) root (0) 164 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00233.js\n+-rw-r--r-- 0 root (0) root (0) 40301 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00233_source.html\n+-rw-r--r-- 0 root (0) root (0) 7720 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00236.html\n+-rw-r--r-- 0 root (0) root (0) 184 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00236.js\n+-rw-r--r-- 0 root (0) root (0) 7580 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00242.html\n+-rw-r--r-- 0 root (0) root (0) 159 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00242.js\n+-rw-r--r-- 0 root (0) root (0) 29980 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00242_source.html\n+-rw-r--r-- 0 root (0) root (0) 5707 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00245.html\n+-rw-r--r-- 0 root (0) root (0) 6434 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00248.html\n+-rw-r--r-- 0 root (0) root (0) 19109 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00248_source.html\n+-rw-r--r-- 0 root (0) root (0) 6594 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00251.html\n+-rw-r--r-- 0 root (0) root (0) 86 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00251.js\n+-rw-r--r-- 0 root (0) root (0) 20439 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00251_source.html\n+-rw-r--r-- 0 root (0) root (0) 9286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00254.html\n+-rw-r--r-- 0 root (0) root (0) 309 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00254.js\n+-rw-r--r-- 0 root (0) root (0) 27194 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00254_source.html\n+-rw-r--r-- 0 root (0) root (0) 6738 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00257.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00257.js\n+-rw-r--r-- 0 root (0) root (0) 44827 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00257_source.html\n+-rw-r--r-- 0 root (0) root (0) 7532 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00260.html\n+-rw-r--r-- 0 root (0) root (0) 162 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00260.js\n+-rw-r--r-- 0 root (0) root (0) 5592 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00263.html\n+-rw-r--r-- 0 root (0) root (0) 6491 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00266.html\n+-rw-r--r-- 0 root (0) root (0) 95 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00266.js\n+-rw-r--r-- 0 root (0) root (0) 6320 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00269.html\n+-rw-r--r-- 0 root (0) root (0) 15576 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00269_source.html\n+-rw-r--r-- 0 root (0) root (0) 8783 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00272.html\n+-rw-r--r-- 0 root (0) root (0) 289 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00272.js\n+-rw-r--r-- 0 root (0) root (0) 24144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00272_source.html\n+-rw-r--r-- 0 root (0) root (0) 6322 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00275.html\n+-rw-r--r-- 0 root (0) root (0) 10872 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00278.html\n+-rw-r--r-- 0 root (0) root (0) 457 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00278.js\n+-rw-r--r-- 0 root (0) root (0) 61746 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00278_source.html\n+-rw-r--r-- 0 root (0) root (0) 10132 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00284.html\n+-rw-r--r-- 0 root (0) root (0) 389 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00284.js\n+-rw-r--r-- 0 root (0) root (0) 71861 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00284_source.html\n+-rw-r--r-- 0 root (0) root (0) 10562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00287.html\n+-rw-r--r-- 0 root (0) root (0) 392 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00287.js\n+-rw-r--r-- 0 root (0) root (0) 84719 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00287_source.html\n+-rw-r--r-- 0 root (0) root (0) 6268 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00290.html\n+-rw-r--r-- 0 root (0) root (0) 8992 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00293.html\n+-rw-r--r-- 0 root (0) root (0) 103 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00293.js\n+-rw-r--r-- 0 root (0) root (0) 24792 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00293_source.html\n+-rw-r--r-- 0 root (0) root (0) 7321 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00296.html\n+-rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00296.js\n+-rw-r--r-- 0 root (0) root (0) 21198 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00296_source.html\n+-rw-r--r-- 0 root (0) root (0) 5655 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00299.html\n+-rw-r--r-- 0 root (0) root (0) 29089 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00302_source.html\n -rw-r--r-- 0 root (0) root (0) 7319 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00305.html\n -rw-r--r-- 0 root (0) root (0) 164 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00305.js\n--rw-r--r-- 0 root (0) root (0) 7269 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00308.html\n--rw-r--r-- 0 root (0) root (0) 211 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00308.js\n--rw-r--r-- 0 root (0) root (0) 39700 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00308_source.html\n--rw-r--r-- 0 root (0) root (0) 6350 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00311.html\n--rw-r--r-- 0 root (0) root (0) 6322 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00314.html\n--rw-r--r-- 0 root (0) root (0) 10872 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00320.html\n--rw-r--r-- 0 root (0) root (0) 327 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00320.js\n--rw-r--r-- 0 root (0) root (0) 7138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00323.html\n--rw-r--r-- 0 root (0) root (0) 226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00323.js\n--rw-r--r-- 0 root (0) root (0) 21252 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00323_source.html\n--rw-r--r-- 0 root (0) root (0) 42494 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00326_source.html\n--rw-r--r-- 0 root (0) root (0) 8178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00329.html\n--rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00329.js\n--rw-r--r-- 0 root (0) root (0) 35173 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00329_source.html\n--rw-r--r-- 0 root (0) root (0) 10562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00332.html\n--rw-r--r-- 0 root (0) root (0) 392 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00332.js\n--rw-r--r-- 0 root (0) root (0) 84719 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00332_source.html\n--rw-r--r-- 0 root (0) root (0) 6268 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00335.html\n--rw-r--r-- 0 root (0) root (0) 5655 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00341.html\n--rw-r--r-- 0 root (0) root (0) 10697 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00344.html\n--rw-r--r-- 0 root (0) root (0) 403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00344.js\n--rw-r--r-- 0 root (0) root (0) 79141 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00344_source.html\n--rw-r--r-- 0 root (0) root (0) 6284 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00347.html\n--rw-r--r-- 0 root (0) root (0) 6858 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00350.html\n--rw-r--r-- 0 root (0) root (0) 132 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00350.js\n--rw-r--r-- 0 root (0) root (0) 19855 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00350_source.html\n--rw-r--r-- 0 root (0) root (0) 5656 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00353.html\n--rw-r--r-- 0 root (0) root (0) 6957 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00356.html\n--rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00356.js\n--rw-r--r-- 0 root (0) root (0) 34458 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00356_source.html\n--rw-r--r-- 0 root (0) root (0) 6883 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00359.html\n--rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00359.js\n--rw-r--r-- 0 root (0) root (0) 29154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00359_source.html\n--rw-r--r-- 0 root (0) root (0) 11287 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00362.html\n--rw-r--r-- 0 root (0) root (0) 454 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00362.js\n--rw-r--r-- 0 root (0) root (0) 5665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00365.html\n--rw-r--r-- 0 root (0) root (0) 8178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00368.html\n--rw-r--r-- 0 root (0) root (0) 281 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00368.js\n--rw-r--r-- 0 root (0) root (0) 68835 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00368_source.html\n--rw-r--r-- 0 root (0) root (0) 7321 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00371.html\n--rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00371.js\n--rw-r--r-- 0 root (0) root (0) 21198 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00371_source.html\n--rw-r--r-- 0 root (0) root (0) 6171 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00374.html\n--rw-r--r-- 0 root (0) root (0) 7741 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00377.html\n--rw-r--r-- 0 root (0) root (0) 174 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00377.js\n--rw-r--r-- 0 root (0) root (0) 103910 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00377_source.html\n--rw-r--r-- 0 root (0) root (0) 7047 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00380.html\n--rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00380.js\n--rw-r--r-- 0 root (0) root (0) 25061 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00380_source.html\n--rw-r--r-- 0 root (0) root (0) 7039 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00383.html\n--rw-r--r-- 0 root (0) root (0) 223 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00383.js\n--rw-r--r-- 0 root (0) root (0) 94047 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00383_source.html\n--rw-r--r-- 0 root (0) root (0) 6343 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00386.html\n--rw-r--r-- 0 root (0) root (0) 7527 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00392.html\n--rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00392.js\n--rw-r--r-- 0 root (0) root (0) 49706 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00392_source.html\n--rw-r--r-- 0 root (0) root (0) 7206 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00395.html\n--rw-r--r-- 0 root (0) root (0) 189 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00395.js\n--rw-r--r-- 0 root (0) root (0) 42743 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00395_source.html\n--rw-r--r-- 0 root (0) root (0) 51201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00398_source.html\n--rw-r--r-- 0 root (0) root (0) 7569 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00401.html\n--rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00401.js\n--rw-r--r-- 0 root (0) root (0) 32907 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00401_source.html\n--rw-r--r-- 0 root (0) root (0) 6259 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00404.html\n--rw-r--r-- 0 root (0) root (0) 15430 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00407.html\n--rw-r--r-- 0 root (0) root (0) 661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00407.js\n--rw-r--r-- 0 root (0) root (0) 23382 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00407_source.html\n--rw-r--r-- 0 root (0) root (0) 10872 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00410.html\n--rw-r--r-- 0 root (0) root (0) 457 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00410.js\n--rw-r--r-- 0 root (0) root (0) 61746 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00410_source.html\n--rw-r--r-- 0 root (0) root (0) 6379 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00413.html\n+-rw-r--r-- 0 root (0) root (0) 7741 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00308.html\n+-rw-r--r-- 0 root (0) root (0) 174 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00308.js\n+-rw-r--r-- 0 root (0) root (0) 103910 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00308_source.html\n+-rw-r--r-- 0 root (0) root (0) 7138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00311.html\n+-rw-r--r-- 0 root (0) root (0) 226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00311.js\n+-rw-r--r-- 0 root (0) root (0) 21252 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00311_source.html\n+-rw-r--r-- 0 root (0) root (0) 8178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00314.html\n+-rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00314.js\n+-rw-r--r-- 0 root (0) root (0) 35173 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00314_source.html\n+-rw-r--r-- 0 root (0) root (0) 7039 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00317.html\n+-rw-r--r-- 0 root (0) root (0) 223 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00317.js\n+-rw-r--r-- 0 root (0) root (0) 94047 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00317_source.html\n+-rw-r--r-- 0 root (0) root (0) 6953 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00320.html\n+-rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00320.js\n+-rw-r--r-- 0 root (0) root (0) 30607 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00320_source.html\n+-rw-r--r-- 0 root (0) root (0) 6171 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00323.html\n+-rw-r--r-- 0 root (0) root (0) 6284 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00326.html\n+-rw-r--r-- 0 root (0) root (0) 6302 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00329.html\n+-rw-r--r-- 0 root (0) root (0) 6858 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00332.html\n+-rw-r--r-- 0 root (0) root (0) 132 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00332.js\n+-rw-r--r-- 0 root (0) root (0) 19855 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00332_source.html\n+-rw-r--r-- 0 root (0) root (0) 42494 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00335_source.html\n+-rw-r--r-- 0 root (0) root (0) 6350 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00338.html\n+-rw-r--r-- 0 root (0) root (0) 7269 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00341.html\n+-rw-r--r-- 0 root (0) root (0) 211 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00341.js\n+-rw-r--r-- 0 root (0) root (0) 39700 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00341_source.html\n+-rw-r--r-- 0 root (0) root (0) 5565 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00344.html\n+-rw-r--r-- 0 root (0) root (0) 7283 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00347.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00347.js\n+-rw-r--r-- 0 root (0) root (0) 7581 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00350.html\n+-rw-r--r-- 0 root (0) root (0) 286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00350.js\n+-rw-r--r-- 0 root (0) root (0) 41607 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00350_source.html\n+-rw-r--r-- 0 root (0) root (0) 31104 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00353_source.html\n+-rw-r--r-- 0 root (0) root (0) 10872 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00356.html\n+-rw-r--r-- 0 root (0) root (0) 327 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00356.js\n+-rw-r--r-- 0 root (0) root (0) 8178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00359.html\n+-rw-r--r-- 0 root (0) root (0) 281 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00359.js\n+-rw-r--r-- 0 root (0) root (0) 68835 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00359_source.html\n+-rw-r--r-- 0 root (0) root (0) 7636 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00365.html\n+-rw-r--r-- 0 root (0) root (0) 101 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00365.js\n+-rw-r--r-- 0 root (0) root (0) 33928 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00365_source.html\n+-rw-r--r-- 0 root (0) root (0) 7439 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00371.html\n+-rw-r--r-- 0 root (0) root (0) 258 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00371.js\n+-rw-r--r-- 0 root (0) root (0) 80368 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00371_source.html\n+-rw-r--r-- 0 root (0) root (0) 9756 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00374.html\n+-rw-r--r-- 0 root (0) root (0) 352 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00374.js\n+-rw-r--r-- 0 root (0) root (0) 26504 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00374_source.html\n+-rw-r--r-- 0 root (0) root (0) 4906 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00380.html\n+-rw-r--r-- 0 root (0) root (0) 15430 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00383.html\n+-rw-r--r-- 0 root (0) root (0) 661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00383.js\n+-rw-r--r-- 0 root (0) root (0) 23382 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00383_source.html\n+-rw-r--r-- 0 root (0) root (0) 6883 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00386.html\n+-rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00386.js\n+-rw-r--r-- 0 root (0) root (0) 29154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00386_source.html\n+-rw-r--r-- 0 root (0) root (0) 10697 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00389.html\n+-rw-r--r-- 0 root (0) root (0) 403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00389.js\n+-rw-r--r-- 0 root (0) root (0) 79141 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00389_source.html\n+-rw-r--r-- 0 root (0) root (0) 6253 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00392.html\n+-rw-r--r-- 0 root (0) root (0) 6286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00395.html\n+-rw-r--r-- 0 root (0) root (0) 6259 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00398.html\n+-rw-r--r-- 0 root (0) root (0) 11287 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00401.html\n+-rw-r--r-- 0 root (0) root (0) 454 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00401.js\n+-rw-r--r-- 0 root (0) root (0) 51201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00404_source.html\n+-rw-r--r-- 0 root (0) root (0) 5676 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00407.html\n+-rw-r--r-- 0 root (0) root (0) 5665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00410.html\n+-rw-r--r-- 0 root (0) root (0) 7206 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00413.html\n+-rw-r--r-- 0 root (0) root (0) 189 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00413.js\n+-rw-r--r-- 0 root (0) root (0) 42743 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00413_source.html\n+-rw-r--r-- 0 root (0) root (0) 7527 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00416.html\n+-rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00416.js\n+-rw-r--r-- 0 root (0) root (0) 49706 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00416_source.html\n -rw-r--r-- 0 root (0) root (0) 6968 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00419.html\n -rw-r--r-- 0 root (0) root (0) 148 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00419.js\n -rw-r--r-- 0 root (0) root (0) 32402 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00419_source.html\n--rw-r--r-- 0 root (0) root (0) 5565 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00422.html\n--rw-r--r-- 0 root (0) root (0) 8992 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00425.html\n--rw-r--r-- 0 root (0) root (0) 103 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00425.js\n--rw-r--r-- 0 root (0) root (0) 24792 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00425_source.html\n--rw-r--r-- 0 root (0) root (0) 6171 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00428.html\n--rw-r--r-- 0 root (0) root (0) 5676 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00431.html\n--rw-r--r-- 0 root (0) root (0) 8675 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00434.html\n--rw-r--r-- 0 root (0) root (0) 165 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00434.js\n--rw-r--r-- 0 root (0) root (0) 5538 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00437.html\n--rw-r--r-- 0 root (0) root (0) 6253 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00440.html\n--rw-r--r-- 0 root (0) root (0) 6302 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00446.html\n--rw-r--r-- 0 root (0) root (0) 7283 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00449.html\n--rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00449.js\n+-rw-r--r-- 0 root (0) root (0) 7695 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00422.html\n+-rw-r--r-- 0 root (0) root (0) 146 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00422.js\n+-rw-r--r-- 0 root (0) root (0) 34553 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00422_source.html\n+-rw-r--r-- 0 root (0) root (0) 8675 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00425.html\n+-rw-r--r-- 0 root (0) root (0) 165 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00425.js\n+-rw-r--r-- 0 root (0) root (0) 5538 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00428.html\n+-rw-r--r-- 0 root (0) root (0) 14835 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00431.html\n+-rw-r--r-- 0 root (0) root (0) 539 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00431.js\n+-rw-r--r-- 0 root (0) root (0) 22880 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00431_source.html\n+-rw-r--r-- 0 root (0) root (0) 7047 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00434.html\n+-rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00434.js\n+-rw-r--r-- 0 root (0) root (0) 25061 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00434_source.html\n+-rw-r--r-- 0 root (0) root (0) 8154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00437.html\n+-rw-r--r-- 0 root (0) root (0) 210 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00437.js\n+-rw-r--r-- 0 root (0) root (0) 25126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00437_source.html\n+-rw-r--r-- 0 root (0) root (0) 5656 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00440.html\n+-rw-r--r-- 0 root (0) root (0) 5688 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00449.html\n+-rw-r--r-- 0 root (0) root (0) 31329 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00449_source.html\n -rw-r--r-- 0 root (0) root (0) 39426 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00452.html\n -rw-r--r-- 0 root (0) root (0) 2373 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00452.js\n -rw-r--r-- 0 root (0) root (0) 127405 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00452_source.html\n--rw-r--r-- 0 root (0) root (0) 9756 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00455.html\n--rw-r--r-- 0 root (0) root (0) 352 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00455.js\n--rw-r--r-- 0 root (0) root (0) 26504 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00455_source.html\n--rw-r--r-- 0 root (0) root (0) 7439 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00458.html\n--rw-r--r-- 0 root (0) root (0) 258 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00458.js\n--rw-r--r-- 0 root (0) root (0) 80368 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00458_source.html\n--rw-r--r-- 0 root (0) root (0) 7340 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00461.html\n--rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00461.js\n--rw-r--r-- 0 root (0) root (0) 32342 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00461_source.html\n--rw-r--r-- 0 root (0) root (0) 8154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00464.html\n--rw-r--r-- 0 root (0) root (0) 210 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00464.js\n--rw-r--r-- 0 root (0) root (0) 25126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00464_source.html\n--rw-r--r-- 0 root (0) root (0) 6953 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00467.html\n--rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00467.js\n--rw-r--r-- 0 root (0) root (0) 30607 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00467_source.html\n--rw-r--r-- 0 root (0) root (0) 11986 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00470.html\n--rw-r--r-- 0 root (0) root (0) 475 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00470.js\n--rw-r--r-- 0 root (0) root (0) 39165 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00470_source.html\n--rw-r--r-- 0 root (0) root (0) 14835 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00476.html\n--rw-r--r-- 0 root (0) root (0) 539 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00476.js\n--rw-r--r-- 0 root (0) root (0) 22880 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00476_source.html\n--rw-r--r-- 0 root (0) root (0) 7695 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00479.html\n--rw-r--r-- 0 root (0) root (0) 146 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00479.js\n--rw-r--r-- 0 root (0) root (0) 34553 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00479_source.html\n--rw-r--r-- 0 root (0) root (0) 5521 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00482.html\n--rw-r--r-- 0 root (0) root (0) 5709 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00485.html\n--rw-r--r-- 0 root (0) root (0) 5531 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00488.html\n--rw-r--r-- 0 root (0) root (0) 6690 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00491.html\n--rw-r--r-- 0 root (0) root (0) 73 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00491.js\n--rw-r--r-- 0 root (0) root (0) 57767 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00491_source.html\n--rw-r--r-- 0 root (0) root (0) 8025 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00494.html\n--rw-r--r-- 0 root (0) root (0) 231 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00494.js\n--rw-r--r-- 0 root (0) root (0) 31331 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00494_source.html\n--rw-r--r-- 0 root (0) root (0) 5665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00497.html\n--rw-r--r-- 0 root (0) root (0) 6587 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00500.html\n--rw-r--r-- 0 root (0) root (0) 162 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00500.js\n--rw-r--r-- 0 root (0) root (0) 18018 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00500_source.html\n--rw-r--r-- 0 root (0) root (0) 7749 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00503.html\n--rw-r--r-- 0 root (0) root (0) 5755 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00506.html\n--rw-r--r-- 0 root (0) root (0) 7018 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00509.html\n--rw-r--r-- 0 root (0) root (0) 80 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00509.js\n--rw-r--r-- 0 root (0) root (0) 31373 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00509_source.html\n--rw-r--r-- 0 root (0) root (0) 5533 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00515.html\n--rw-r--r-- 0 root (0) root (0) 6737 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00518.html\n--rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00518.js\n--rw-r--r-- 0 root (0) root (0) 5713 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00521.html\n--rw-r--r-- 0 root (0) root (0) 6506 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00524.html\n--rw-r--r-- 0 root (0) root (0) 13719 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00524_source.html\n--rw-r--r-- 0 root (0) root (0) 5697 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00527.html\n--rw-r--r-- 0 root (0) root (0) 8586 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00530.html\n--rw-r--r-- 0 root (0) root (0) 270 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00530.js\n--rw-r--r-- 0 root (0) root (0) 41431 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00530_source.html\n--rw-r--r-- 0 root (0) root (0) 6582 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00533.html\n--rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00533.js\n--rw-r--r-- 0 root (0) root (0) 42027 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00533_source.html\n--rw-r--r-- 0 root (0) root (0) 7268 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00536.html\n--rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00536.js\n--rw-r--r-- 0 root (0) root (0) 18804 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00536_source.html\n--rw-r--r-- 0 root (0) root (0) 9935 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00539.html\n--rw-r--r-- 0 root (0) root (0) 168 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00539.js\n--rw-r--r-- 0 root (0) root (0) 33611 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00539_source.html\n--rw-r--r-- 0 root (0) root (0) 6816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00542.html\n--rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00542.js\n--rw-r--r-- 0 root (0) root (0) 29314 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00542_source.html\n--rw-r--r-- 0 root (0) root (0) 6903 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00545.html\n--rw-r--r-- 0 root (0) root (0) 93 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00545.js\n--rw-r--r-- 0 root (0) root (0) 5524 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00548.html\n--rw-r--r-- 0 root (0) root (0) 6322 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00551.html\n--rw-r--r-- 0 root (0) root (0) 15766 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00551_source.html\n--rw-r--r-- 0 root (0) root (0) 6769 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00554.html\n--rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00554.js\n--rw-r--r-- 0 root (0) root (0) 16945 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00554_source.html\n--rw-r--r-- 0 root (0) root (0) 6226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00557.html\n--rw-r--r-- 0 root (0) root (0) 74 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00557.js\n--rw-r--r-- 0 root (0) root (0) 15209 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00557_source.html\n--rw-r--r-- 0 root (0) root (0) 6908 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00560.html\n--rw-r--r-- 0 root (0) root (0) 134 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00560.js\n--rw-r--r-- 0 root (0) root (0) 58194 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00560_source.html\n--rw-r--r-- 0 root (0) root (0) 6403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00563.html\n--rw-r--r-- 0 root (0) root (0) 79 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00563.js\n--rw-r--r-- 0 root (0) root (0) 29636 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00563_source.html\n--rw-r--r-- 0 root (0) root (0) 7797 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00566.html\n--rw-r--r-- 0 root (0) root (0) 165 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00566.js\n--rw-r--r-- 0 root (0) root (0) 36848 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00566_source.html\n--rw-r--r-- 0 root (0) root (0) 9159 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00569.html\n--rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00569.js\n--rw-r--r-- 0 root (0) root (0) 5637 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00572.html\n--rw-r--r-- 0 root (0) root (0) 7717 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00575.html\n--rw-r--r-- 0 root (0) root (0) 262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00575.js\n--rw-r--r-- 0 root (0) root (0) 88802 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00575_source.html\n+-rw-r--r-- 0 root (0) root (0) 7340 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00455.html\n+-rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00455.js\n+-rw-r--r-- 0 root (0) root (0) 32342 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00455_source.html\n+-rw-r--r-- 0 root (0) root (0) 7569 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00458.html\n+-rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00458.js\n+-rw-r--r-- 0 root (0) root (0) 32907 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00458_source.html\n+-rw-r--r-- 0 root (0) root (0) 11986 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00461.html\n+-rw-r--r-- 0 root (0) root (0) 475 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00461.js\n+-rw-r--r-- 0 root (0) root (0) 39165 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00461_source.html\n+-rw-r--r-- 0 root (0) root (0) 6379 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00464.html\n+-rw-r--r-- 0 root (0) root (0) 6288 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00470.html\n+-rw-r--r-- 0 root (0) root (0) 6343 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00473.html\n+-rw-r--r-- 0 root (0) root (0) 6957 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00476.html\n+-rw-r--r-- 0 root (0) root (0) 144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00476.js\n+-rw-r--r-- 0 root (0) root (0) 34458 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00476_source.html\n+-rw-r--r-- 0 root (0) root (0) 6171 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00479.html\n+-rw-r--r-- 0 root (0) root (0) 6908 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00482.html\n+-rw-r--r-- 0 root (0) root (0) 134 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00482.js\n+-rw-r--r-- 0 root (0) root (0) 58194 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00482_source.html\n+-rw-r--r-- 0 root (0) root (0) 5533 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00485.html\n+-rw-r--r-- 0 root (0) root (0) 8025 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00488.html\n+-rw-r--r-- 0 root (0) root (0) 231 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00488.js\n+-rw-r--r-- 0 root (0) root (0) 31331 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00488_source.html\n+-rw-r--r-- 0 root (0) root (0) 9159 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00491.html\n+-rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00491.js\n+-rw-r--r-- 0 root (0) root (0) 7749 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00494.html\n+-rw-r--r-- 0 root (0) root (0) 6737 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00497.html\n+-rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00497.js\n+-rw-r--r-- 0 root (0) root (0) 6226 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00500.html\n+-rw-r--r-- 0 root (0) root (0) 74 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00500.js\n+-rw-r--r-- 0 root (0) root (0) 15209 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00500_source.html\n+-rw-r--r-- 0 root (0) root (0) 7797 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00503.html\n+-rw-r--r-- 0 root (0) root (0) 165 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00503.js\n+-rw-r--r-- 0 root (0) root (0) 36848 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00503_source.html\n+-rw-r--r-- 0 root (0) root (0) 6403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00506.html\n+-rw-r--r-- 0 root (0) root (0) 79 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00506.js\n+-rw-r--r-- 0 root (0) root (0) 29636 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00506_source.html\n+-rw-r--r-- 0 root (0) root (0) 5713 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00509.html\n+-rw-r--r-- 0 root (0) root (0) 5531 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00512.html\n+-rw-r--r-- 0 root (0) root (0) 6903 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00515.html\n+-rw-r--r-- 0 root (0) root (0) 93 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00515.js\n+-rw-r--r-- 0 root (0) root (0) 6587 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00518.html\n+-rw-r--r-- 0 root (0) root (0) 162 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00518.js\n+-rw-r--r-- 0 root (0) root (0) 18018 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00518_source.html\n+-rw-r--r-- 0 root (0) root (0) 5524 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00521.html\n+-rw-r--r-- 0 root (0) root (0) 5665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00524.html\n+-rw-r--r-- 0 root (0) root (0) 7018 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00527.html\n+-rw-r--r-- 0 root (0) root (0) 80 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00527.js\n+-rw-r--r-- 0 root (0) root (0) 31373 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00527_source.html\n+-rw-r--r-- 0 root (0) root (0) 9935 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00533.html\n+-rw-r--r-- 0 root (0) root (0) 168 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00533.js\n+-rw-r--r-- 0 root (0) root (0) 33611 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00533_source.html\n+-rw-r--r-- 0 root (0) root (0) 6816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00536.html\n+-rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00536.js\n+-rw-r--r-- 0 root (0) root (0) 29314 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00536_source.html\n+-rw-r--r-- 0 root (0) root (0) 8586 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00539.html\n+-rw-r--r-- 0 root (0) root (0) 270 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00539.js\n+-rw-r--r-- 0 root (0) root (0) 41431 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00539_source.html\n+-rw-r--r-- 0 root (0) root (0) 6322 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00542.html\n+-rw-r--r-- 0 root (0) root (0) 15766 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00542_source.html\n+-rw-r--r-- 0 root (0) root (0) 5697 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00545.html\n+-rw-r--r-- 0 root (0) root (0) 5709 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00548.html\n+-rw-r--r-- 0 root (0) root (0) 6506 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00551.html\n+-rw-r--r-- 0 root (0) root (0) 13719 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00551_source.html\n+-rw-r--r-- 0 root (0) root (0) 6690 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00554.html\n+-rw-r--r-- 0 root (0) root (0) 73 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00554.js\n+-rw-r--r-- 0 root (0) root (0) 57767 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00554_source.html\n+-rw-r--r-- 0 root (0) root (0) 5755 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00557.html\n+-rw-r--r-- 0 root (0) root (0) 6582 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00560.html\n+-rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00560.js\n+-rw-r--r-- 0 root (0) root (0) 42027 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00560_source.html\n+-rw-r--r-- 0 root (0) root (0) 7268 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00563.html\n+-rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00563.js\n+-rw-r--r-- 0 root (0) root (0) 18804 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00563_source.html\n+-rw-r--r-- 0 root (0) root (0) 5521 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00566.html\n+-rw-r--r-- 0 root (0) root (0) 6769 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00569.html\n+-rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00569.js\n+-rw-r--r-- 0 root (0) root (0) 16945 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00569_source.html\n+-rw-r--r-- 0 root (0) root (0) 5734 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00572.html\n+-rw-r--r-- 0 root (0) root (0) 46729 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00572_source.html\n+-rw-r--r-- 0 root (0) root (0) 5523 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00575.html\n -rw-r--r-- 0 root (0) root (0) 5705 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00578.html\n -rw-r--r-- 0 root (0) root (0) 51666 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00578_source.html\n--rw-r--r-- 0 root (0) root (0) 5529 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00581.html\n--rw-r--r-- 0 root (0) root (0) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00587.html\n--rw-r--r-- 0 root (0) root (0) 66585 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00587_source.html\n--rw-r--r-- 0 root (0) root (0) 6367 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00590.html\n--rw-r--r-- 0 root (0) root (0) 7687 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00593.html\n--rw-r--r-- 0 root (0) root (0) 146 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00593.js\n--rw-r--r-- 0 root (0) root (0) 38682 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00593_source.html\n--rw-r--r-- 0 root (0) root (0) 13267 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00596.html\n--rw-r--r-- 0 root (0) root (0) 681 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00596.js\n--rw-r--r-- 0 root (0) root (0) 22145 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00596_source.html\n--rw-r--r-- 0 root (0) root (0) 10019 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00599.html\n--rw-r--r-- 0 root (0) root (0) 449 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00599.js\n--rw-r--r-- 0 root (0) root (0) 31790 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00599_source.html\n--rw-r--r-- 0 root (0) root (0) 6454 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00602.html\n--rw-r--r-- 0 root (0) root (0) 103 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00602.js\n--rw-r--r-- 0 root (0) root (0) 46554 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00602_source.html\n--rw-r--r-- 0 root (0) root (0) 7807 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00608.html\n--rw-r--r-- 0 root (0) root (0) 240 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00608.js\n--rw-r--r-- 0 root (0) root (0) 56707 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00608_source.html\n--rw-r--r-- 0 root (0) root (0) 5606 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00611.html\n--rw-r--r-- 0 root (0) root (0) 22139 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00611_source.html\n--rw-r--r-- 0 root (0) root (0) 5591 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00614.html\n--rw-r--r-- 0 root (0) root (0) 6465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00617.html\n--rw-r--r-- 0 root (0) root (0) 70 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00617.js\n--rw-r--r-- 0 root (0) root (0) 18421 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00617_source.html\n--rw-r--r-- 0 root (0) root (0) 8617 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00620.html\n--rw-r--r-- 0 root (0) root (0) 96 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00620.js\n--rw-r--r-- 0 root (0) root (0) 19774 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00620_source.html\n--rw-r--r-- 0 root (0) root (0) 7205 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00623.html\n--rw-r--r-- 0 root (0) root (0) 166 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00623.js\n--rw-r--r-- 0 root (0) root (0) 56256 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00623_source.html\n+-rw-r--r-- 0 root (0) root (0) 6459 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00581.html\n+-rw-r--r-- 0 root (0) root (0) 22692 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00581_source.html\n+-rw-r--r-- 0 root (0) root (0) 6687 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00587.html\n+-rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00587.js\n+-rw-r--r-- 0 root (0) root (0) 49427 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00587_source.html\n+-rw-r--r-- 0 root (0) root (0) 7205 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00590.html\n+-rw-r--r-- 0 root (0) root (0) 166 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00590.js\n+-rw-r--r-- 0 root (0) root (0) 56256 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00590_source.html\n+-rw-r--r-- 0 root (0) root (0) 7505 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00593.html\n+-rw-r--r-- 0 root (0) root (0) 221 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00593.js\n+-rw-r--r-- 0 root (0) root (0) 65993 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00593_source.html\n+-rw-r--r-- 0 root (0) root (0) 7023 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00596.html\n+-rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00596.js\n+-rw-r--r-- 0 root (0) root (0) 23512 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00596_source.html\n+-rw-r--r-- 0 root (0) root (0) 5637 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00599.html\n+-rw-r--r-- 0 root (0) root (0) 5606 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00602.html\n+-rw-r--r-- 0 root (0) root (0) 22139 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00602_source.html\n+-rw-r--r-- 0 root (0) root (0) 5520 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00608.html\n+-rw-r--r-- 0 root (0) root (0) 28749 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00611_source.html\n+-rw-r--r-- 0 root (0) root (0) 6436 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00614.html\n+-rw-r--r-- 0 root (0) root (0) 22543 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00614_source.html\n+-rw-r--r-- 0 root (0) root (0) 8617 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00617.html\n+-rw-r--r-- 0 root (0) root (0) 96 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00617.js\n+-rw-r--r-- 0 root (0) root (0) 19774 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00617_source.html\n+-rw-r--r-- 0 root (0) root (0) 5593 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00620.html\n+-rw-r--r-- 0 root (0) root (0) 17977 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00620_source.html\n+-rw-r--r-- 0 root (0) root (0) 6695 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00623.html\n+-rw-r--r-- 0 root (0) root (0) 189 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00623.js\n+-rw-r--r-- 0 root (0) root (0) 62349 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00623_source.html\n -rw-r--r-- 0 root (0) root (0) 6879 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00626.html\n -rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00626.js\n -rw-r--r-- 0 root (0) root (0) 38328 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00626_source.html\n--rw-r--r-- 0 root (0) root (0) 6695 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00629.html\n--rw-r--r-- 0 root (0) root (0) 189 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00629.js\n--rw-r--r-- 0 root (0) root (0) 62349 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00629_source.html\n--rw-r--r-- 0 root (0) root (0) 5593 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00632.html\n--rw-r--r-- 0 root (0) root (0) 17977 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00632_source.html\n--rw-r--r-- 0 root (0) root (0) 5523 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00635.html\n--rw-r--r-- 0 root (0) root (0) 90312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00638_source.html\n--rw-r--r-- 0 root (0) root (0) 6665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00641.html\n--rw-r--r-- 0 root (0) root (0) 178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00641.js\n--rw-r--r-- 0 root (0) root (0) 36162 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00641_source.html\n--rw-r--r-- 0 root (0) root (0) 5671 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00644.html\n--rw-r--r-- 0 root (0) root (0) 18304 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00644_source.html\n--rw-r--r-- 0 root (0) root (0) 6363 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00647.html\n--rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00647.js\n--rw-r--r-- 0 root (0) root (0) 15140 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00647_source.html\n--rw-r--r-- 0 root (0) root (0) 6476 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00650.html\n--rw-r--r-- 0 root (0) root (0) 88 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00650.js\n--rw-r--r-- 0 root (0) root (0) 11023 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00650_source.html\n--rw-r--r-- 0 root (0) root (0) 5666 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00653.html\n--rw-r--r-- 0 root (0) root (0) 54067 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00656_source.html\n--rw-r--r-- 0 root (0) root (0) 6945 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00659.html\n--rw-r--r-- 0 root (0) root (0) 113625 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00659_source.html\n--rw-r--r-- 0 root (0) root (0) 15849 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00662.html\n--rw-r--r-- 0 root (0) root (0) 641 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00662.js\n--rw-r--r-- 0 root (0) root (0) 30059 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00662_source.html\n--rw-r--r-- 0 root (0) root (0) 6700 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00665.html\n--rw-r--r-- 0 root (0) root (0) 15755 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00665_source.html\n--rw-r--r-- 0 root (0) root (0) 7023 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00671.html\n--rw-r--r-- 0 root (0) root (0) 136 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00671.js\n--rw-r--r-- 0 root (0) root (0) 23512 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00671_source.html\n--rw-r--r-- 0 root (0) root (0) 6687 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00674.html\n--rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00674.js\n--rw-r--r-- 0 root (0) root (0) 49427 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00674_source.html\n--rw-r--r-- 0 root (0) root (0) 28303 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00677_source.html\n--rw-r--r-- 0 root (0) root (0) 6167 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00680.html\n--rw-r--r-- 0 root (0) root (0) 101 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00680.js\n--rw-r--r-- 0 root (0) root (0) 42759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00680_source.html\n--rw-r--r-- 0 root (0) root (0) 5734 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00683.html\n--rw-r--r-- 0 root (0) root (0) 46729 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00683_source.html\n--rw-r--r-- 0 root (0) root (0) 6459 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00686.html\n--rw-r--r-- 0 root (0) root (0) 22692 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00686_source.html\n--rw-r--r-- 0 root (0) root (0) 6436 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00689.html\n--rw-r--r-- 0 root (0) root (0) 22543 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00689_source.html\n--rw-r--r-- 0 root (0) root (0) 5520 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00692.html\n--rw-r--r-- 0 root (0) root (0) 7505 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00695.html\n--rw-r--r-- 0 root (0) root (0) 221 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00695.js\n--rw-r--r-- 0 root (0) root (0) 65993 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00695_source.html\n--rw-r--r-- 0 root (0) root (0) 28749 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00698_source.html\n+-rw-r--r-- 0 root (0) root (0) 6476 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00629.html\n+-rw-r--r-- 0 root (0) root (0) 88 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00629.js\n+-rw-r--r-- 0 root (0) root (0) 11023 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00629_source.html\n+-rw-r--r-- 0 root (0) root (0) 5666 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00632.html\n+-rw-r--r-- 0 root (0) root (0) 15849 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00635.html\n+-rw-r--r-- 0 root (0) root (0) 641 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00635.js\n+-rw-r--r-- 0 root (0) root (0) 30059 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00635_source.html\n+-rw-r--r-- 0 root (0) root (0) 6363 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00638.html\n+-rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00638.js\n+-rw-r--r-- 0 root (0) root (0) 15140 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00638_source.html\n+-rw-r--r-- 0 root (0) root (0) 10019 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00641.html\n+-rw-r--r-- 0 root (0) root (0) 449 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00641.js\n+-rw-r--r-- 0 root (0) root (0) 31790 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00641_source.html\n+-rw-r--r-- 0 root (0) root (0) 28303 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00644_source.html\n+-rw-r--r-- 0 root (0) root (0) 7687 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00647.html\n+-rw-r--r-- 0 root (0) root (0) 146 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00647.js\n+-rw-r--r-- 0 root (0) root (0) 38682 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00647_source.html\n+-rw-r--r-- 0 root (0) root (0) 6167 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00650.html\n+-rw-r--r-- 0 root (0) root (0) 101 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00650.js\n+-rw-r--r-- 0 root (0) root (0) 42759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00650_source.html\n+-rw-r--r-- 0 root (0) root (0) 6665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00653.html\n+-rw-r--r-- 0 root (0) root (0) 178 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00653.js\n+-rw-r--r-- 0 root (0) root (0) 36162 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00653_source.html\n+-rw-r--r-- 0 root (0) root (0) 13267 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00656.html\n+-rw-r--r-- 0 root (0) root (0) 681 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00656.js\n+-rw-r--r-- 0 root (0) root (0) 22145 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00656_source.html\n+-rw-r--r-- 0 root (0) root (0) 7717 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00659.html\n+-rw-r--r-- 0 root (0) root (0) 262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00659.js\n+-rw-r--r-- 0 root (0) root (0) 88802 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00659_source.html\n+-rw-r--r-- 0 root (0) root (0) 6454 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00662.html\n+-rw-r--r-- 0 root (0) root (0) 103 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00662.js\n+-rw-r--r-- 0 root (0) root (0) 46554 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00662_source.html\n+-rw-r--r-- 0 root (0) root (0) 5639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00665.html\n+-rw-r--r-- 0 root (0) root (0) 66585 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00665_source.html\n+-rw-r--r-- 0 root (0) root (0) 5591 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00668.html\n+-rw-r--r-- 0 root (0) root (0) 6367 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00671.html\n+-rw-r--r-- 0 root (0) root (0) 6465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00674.html\n+-rw-r--r-- 0 root (0) root (0) 70 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00674.js\n+-rw-r--r-- 0 root (0) root (0) 18421 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00674_source.html\n+-rw-r--r-- 0 root (0) root (0) 6700 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00677.html\n+-rw-r--r-- 0 root (0) root (0) 15755 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00677_source.html\n+-rw-r--r-- 0 root (0) root (0) 54067 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00683_source.html\n+-rw-r--r-- 0 root (0) root (0) 7807 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00686.html\n+-rw-r--r-- 0 root (0) root (0) 240 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00686.js\n+-rw-r--r-- 0 root (0) root (0) 56707 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00686_source.html\n+-rw-r--r-- 0 root (0) root (0) 5529 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00689.html\n+-rw-r--r-- 0 root (0) root (0) 5671 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00692.html\n+-rw-r--r-- 0 root (0) root (0) 18304 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00692_source.html\n+-rw-r--r-- 0 root (0) root (0) 90312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00695_source.html\n+-rw-r--r-- 0 root (0) root (0) 6945 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00698.html\n+-rw-r--r-- 0 root (0) root (0) 113625 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00698_source.html\n -rw-r--r-- 0 root (0) root (0) 6648 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00701.html\n -rw-r--r-- 0 root (0) root (0) 229 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00701.js\n -rw-r--r-- 0 root (0) root (0) 34362 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00701_source.html\n--rw-r--r-- 0 root (0) root (0) 7225 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00704.html\n--rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00704.js\n--rw-r--r-- 0 root (0) root (0) 69400 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00704_source.html\n--rw-r--r-- 0 root (0) root (0) 5601 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00707.html\n--rw-r--r-- 0 root (0) root (0) 6562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00710.html\n--rw-r--r-- 0 root (0) root (0) 160 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00710.js\n--rw-r--r-- 0 root (0) root (0) 56968 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00710_source.html\n--rw-r--r-- 0 root (0) root (0) 5770 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00713.html\n--rw-r--r-- 0 root (0) root (0) 13639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00713_source.html\n--rw-r--r-- 0 root (0) root (0) 6141 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00716.html\n--rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00716.js\n--rw-r--r-- 0 root (0) root (0) 15664 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00716_source.html\n--rw-r--r-- 0 root (0) root (0) 7999 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00719.html\n--rw-r--r-- 0 root (0) root (0) 276 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00719.js\n--rw-r--r-- 0 root (0) root (0) 21749 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00719_source.html\n--rw-r--r-- 0 root (0) root (0) 7759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00722.html\n--rw-r--r-- 0 root (0) root (0) 7058 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00725.html\n--rw-r--r-- 0 root (0) root (0) 138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00725.js\n--rw-r--r-- 0 root (0) root (0) 39533 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00725_source.html\n--rw-r--r-- 0 root (0) root (0) 6428 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00728.html\n--rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00728.js\n--rw-r--r-- 0 root (0) root (0) 25237 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00728_source.html\n--rw-r--r-- 0 root (0) root (0) 8124 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00731.html\n--rw-r--r-- 0 root (0) root (0) 7445 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00734.html\n--rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00734.js\n--rw-r--r-- 0 root (0) root (0) 35988 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00734_source.html\n--rw-r--r-- 0 root (0) root (0) 7443 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00737.html\n--rw-r--r-- 0 root (0) root (0) 163 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00737.js\n--rw-r--r-- 0 root (0) root (0) 33932 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00737_source.html\n--rw-r--r-- 0 root (0) root (0) 12146 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00740.html\n--rw-r--r-- 0 root (0) root (0) 536 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00740.js\n--rw-r--r-- 0 root (0) root (0) 5691 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00743.html\n--rw-r--r-- 0 root (0) root (0) 7433 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00746.html\n--rw-r--r-- 0 root (0) root (0) 207 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00746.js\n--rw-r--r-- 0 root (0) root (0) 22427 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00746_source.html\n--rw-r--r-- 0 root (0) root (0) 13381 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00749.html\n--rw-r--r-- 0 root (0) root (0) 665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00749.js\n--rw-r--r-- 0 root (0) root (0) 19609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00749_source.html\n--rw-r--r-- 0 root (0) root (0) 6663 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00752.html\n--rw-r--r-- 0 root (0) root (0) 154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00752.js\n--rw-r--r-- 0 root (0) root (0) 29640 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00752_source.html\n--rw-r--r-- 0 root (0) root (0) 5643 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00755.html\n--rw-r--r-- 0 root (0) root (0) 6366 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00758.html\n--rw-r--r-- 0 root (0) root (0) 67 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00758.js\n--rw-r--r-- 0 root (0) root (0) 13881 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00758_source.html\n--rw-r--r-- 0 root (0) root (0) 5609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00761.html\n--rw-r--r-- 0 root (0) root (0) 5520 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00764.html\n--rw-r--r-- 0 root (0) root (0) 7940 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00767.html\n--rw-r--r-- 0 root (0) root (0) 245 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00767.js\n--rw-r--r-- 0 root (0) root (0) 32692 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00767_source.html\n--rw-r--r-- 0 root (0) root (0) 8871 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00770.html\n--rw-r--r-- 0 root (0) root (0) 415 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00770.js\n--rw-r--r-- 0 root (0) root (0) 38721 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00770_source.html\n--rw-r--r-- 0 root (0) root (0) 6842 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00773.html\n--rw-r--r-- 0 root (0) root (0) 86 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00773.js\n--rw-r--r-- 0 root (0) root (0) 40634 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00773_source.html\n--rw-r--r-- 0 root (0) root (0) 7995 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00776.html\n--rw-r--r-- 0 root (0) root (0) 216 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00776.js\n--rw-r--r-- 0 root (0) root (0) 73746 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00776_source.html\n--rw-r--r-- 0 root (0) root (0) 6901 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00779.html\n--rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00779.js\n--rw-r--r-- 0 root (0) root (0) 46918 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00779_source.html\n--rw-r--r-- 0 root (0) root (0) 5578 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00782.html\n--rw-r--r-- 0 root (0) root (0) 7210 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00785.html\n--rw-r--r-- 0 root (0) root (0) 176 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00785.js\n--rw-r--r-- 0 root (0) root (0) 28405 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00785_source.html\n--rw-r--r-- 0 root (0) root (0) 8332 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00788.html\n--rw-r--r-- 0 root (0) root (0) 192 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00788.js\n--rw-r--r-- 0 root (0) root (0) 7323 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00791.html\n--rw-r--r-- 0 root (0) root (0) 116 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00791.js\n--rw-r--r-- 0 root (0) root (0) 16423 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00791_source.html\n+-rw-r--r-- 0 root (0) root (0) 5578 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00704.html\n+-rw-r--r-- 0 root (0) root (0) 6366 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00707.html\n+-rw-r--r-- 0 root (0) root (0) 67 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00707.js\n+-rw-r--r-- 0 root (0) root (0) 13881 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00707_source.html\n+-rw-r--r-- 0 root (0) root (0) 6717 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00710.html\n+-rw-r--r-- 0 root (0) root (0) 138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00710.js\n+-rw-r--r-- 0 root (0) root (0) 22245 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00710_source.html\n+-rw-r--r-- 0 root (0) root (0) 10979 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00716.html\n+-rw-r--r-- 0 root (0) root (0) 453 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00716.js\n+-rw-r--r-- 0 root (0) root (0) 7995 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00719.html\n+-rw-r--r-- 0 root (0) root (0) 216 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00719.js\n+-rw-r--r-- 0 root (0) root (0) 73746 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00719_source.html\n+-rw-r--r-- 0 root (0) root (0) 7210 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00722.html\n+-rw-r--r-- 0 root (0) root (0) 176 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00722.js\n+-rw-r--r-- 0 root (0) root (0) 28405 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00722_source.html\n+-rw-r--r-- 0 root (0) root (0) 8668 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00725.html\n+-rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00725.js\n+-rw-r--r-- 0 root (0) root (0) 15601 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00725_source.html\n+-rw-r--r-- 0 root (0) root (0) 7058 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00731.html\n+-rw-r--r-- 0 root (0) root (0) 138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00731.js\n+-rw-r--r-- 0 root (0) root (0) 39533 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00731_source.html\n+-rw-r--r-- 0 root (0) root (0) 5627 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00734.html\n+-rw-r--r-- 0 root (0) root (0) 5601 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00737.html\n+-rw-r--r-- 0 root (0) root (0) 27298 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00740_source.html\n+-rw-r--r-- 0 root (0) root (0) 6842 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00743.html\n+-rw-r--r-- 0 root (0) root (0) 86 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00743.js\n+-rw-r--r-- 0 root (0) root (0) 40634 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00743_source.html\n+-rw-r--r-- 0 root (0) root (0) 6141 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00746.html\n+-rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00746.js\n+-rw-r--r-- 0 root (0) root (0) 15664 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00746_source.html\n+-rw-r--r-- 0 root (0) root (0) 9091 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00749.html\n+-rw-r--r-- 0 root (0) root (0) 185 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00749.js\n+-rw-r--r-- 0 root (0) root (0) 7433 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00752.html\n+-rw-r--r-- 0 root (0) root (0) 207 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00752.js\n+-rw-r--r-- 0 root (0) root (0) 22427 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00752_source.html\n+-rw-r--r-- 0 root (0) root (0) 6428 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00755.html\n+-rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00755.js\n+-rw-r--r-- 0 root (0) root (0) 25237 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00755_source.html\n+-rw-r--r-- 0 root (0) root (0) 6581 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00758.html\n+-rw-r--r-- 0 root (0) root (0) 17930 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00758_source.html\n+-rw-r--r-- 0 root (0) root (0) 7443 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00761.html\n+-rw-r--r-- 0 root (0) root (0) 163 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00761.js\n+-rw-r--r-- 0 root (0) root (0) 33932 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00761_source.html\n+-rw-r--r-- 0 root (0) root (0) 6978 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00764.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00764.js\n+-rw-r--r-- 0 root (0) root (0) 35496 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00764_source.html\n+-rw-r--r-- 0 root (0) root (0) 8332 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00767.html\n+-rw-r--r-- 0 root (0) root (0) 192 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00767.js\n+-rw-r--r-- 0 root (0) root (0) 7999 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00770.html\n+-rw-r--r-- 0 root (0) root (0) 276 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00770.js\n+-rw-r--r-- 0 root (0) root (0) 21749 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00770_source.html\n+-rw-r--r-- 0 root (0) root (0) 8124 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00773.html\n+-rw-r--r-- 0 root (0) root (0) 7323 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00779.html\n+-rw-r--r-- 0 root (0) root (0) 116 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00779.js\n+-rw-r--r-- 0 root (0) root (0) 16423 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00779_source.html\n+-rw-r--r-- 0 root (0) root (0) 8957 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00782.html\n+-rw-r--r-- 0 root (0) root (0) 312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00782.js\n+-rw-r--r-- 0 root (0) root (0) 60246 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00782_source.html\n+-rw-r--r-- 0 root (0) root (0) 7759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00785.html\n+-rw-r--r-- 0 root (0) root (0) 12146 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00788.html\n+-rw-r--r-- 0 root (0) root (0) 536 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00788.js\n+-rw-r--r-- 0 root (0) root (0) 7128 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00791.html\n+-rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00791.js\n+-rw-r--r-- 0 root (0) root (0) 26183 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00791_source.html\n+-rw-r--r-- 0 root (0) root (0) 7195 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00794.html\n+-rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00794.js\n+-rw-r--r-- 0 root (0) root (0) 29635 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00794_source.html\n -rw-r--r-- 0 root (0) root (0) 6419 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00797.html\n--rw-r--r-- 0 root (0) root (0) 7362 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00800.html\n--rw-r--r-- 0 root (0) root (0) 13056 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00800_source.html\n--rw-r--r-- 0 root (0) root (0) 6717 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00806.html\n--rw-r--r-- 0 root (0) root (0) 138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00806.js\n--rw-r--r-- 0 root (0) root (0) 22245 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00806_source.html\n--rw-r--r-- 0 root (0) root (0) 5557 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00809.html\n--rw-r--r-- 0 root (0) root (0) 7128 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00812.html\n--rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00812.js\n--rw-r--r-- 0 root (0) root (0) 26183 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00812_source.html\n--rw-r--r-- 0 root (0) root (0) 7661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00818.html\n--rw-r--r-- 0 root (0) root (0) 188 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00818.js\n--rw-r--r-- 0 root (0) root (0) 38060 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00818_source.html\n--rw-r--r-- 0 root (0) root (0) 69549 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00821_source.html\n--rw-r--r-- 0 root (0) root (0) 8668 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00824.html\n--rw-r--r-- 0 root (0) root (0) 180 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00824.js\n--rw-r--r-- 0 root (0) root (0) 15601 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00824_source.html\n--rw-r--r-- 0 root (0) root (0) 8957 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00827.html\n--rw-r--r-- 0 root (0) root (0) 312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00827.js\n--rw-r--r-- 0 root (0) root (0) 60246 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00827_source.html\n--rw-r--r-- 0 root (0) root (0) 6475 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00830.html\n--rw-r--r-- 0 root (0) root (0) 37272 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00833_source.html\n--rw-r--r-- 0 root (0) root (0) 6581 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00836.html\n--rw-r--r-- 0 root (0) root (0) 17930 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00836_source.html\n--rw-r--r-- 0 root (0) root (0) 5668 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00839.html\n--rw-r--r-- 0 root (0) root (0) 12032 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00839_source.html\n--rw-r--r-- 0 root (0) root (0) 28869 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00842_source.html\n--rw-r--r-- 0 root (0) root (0) 5627 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00845.html\n--rw-r--r-- 0 root (0) root (0) 5725 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00848.html\n--rw-r--r-- 0 root (0) root (0) 6387 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00851.html\n--rw-r--r-- 0 root (0) root (0) 13406 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00851_source.html\n--rw-r--r-- 0 root (0) root (0) 27298 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00854_source.html\n--rw-r--r-- 0 root (0) root (0) 5571 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00857.html\n--rw-r--r-- 0 root (0) root (0) 6978 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00860.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00860.js\n--rw-r--r-- 0 root (0) root (0) 35496 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00860_source.html\n--rw-r--r-- 0 root (0) root (0) 5562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00866.html\n--rw-r--r-- 0 root (0) root (0) 8188 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00872.html\n--rw-r--r-- 0 root (0) root (0) 313 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00872.js\n--rw-r--r-- 0 root (0) root (0) 73410 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00872_source.html\n--rw-r--r-- 0 root (0) root (0) 15960 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00875.html\n--rw-r--r-- 0 root (0) root (0) 891 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00875.js\n--rw-r--r-- 0 root (0) root (0) 125878 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00875_source.html\n--rw-r--r-- 0 root (0) root (0) 10979 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00878.html\n--rw-r--r-- 0 root (0) root (0) 453 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00878.js\n+-rw-r--r-- 0 root (0) root (0) 6475 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00800.html\n+-rw-r--r-- 0 root (0) root (0) 69549 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00803_source.html\n+-rw-r--r-- 0 root (0) root (0) 5520 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00806.html\n+-rw-r--r-- 0 root (0) root (0) 13120 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00812.html\n+-rw-r--r-- 0 root (0) root (0) 670 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00812.js\n+-rw-r--r-- 0 root (0) root (0) 28259 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00812_source.html\n+-rw-r--r-- 0 root (0) root (0) 8188 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00815.html\n+-rw-r--r-- 0 root (0) root (0) 313 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00815.js\n+-rw-r--r-- 0 root (0) root (0) 73410 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00815_source.html\n+-rw-r--r-- 0 root (0) root (0) 28869 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00818_source.html\n+-rw-r--r-- 0 root (0) root (0) 8297 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00821.html\n+-rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00821.js\n+-rw-r--r-- 0 root (0) root (0) 7362 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00824.html\n+-rw-r--r-- 0 root (0) root (0) 13056 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00824_source.html\n+-rw-r--r-- 0 root (0) root (0) 15960 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00827.html\n+-rw-r--r-- 0 root (0) root (0) 891 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00827.js\n+-rw-r--r-- 0 root (0) root (0) 125878 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00827_source.html\n+-rw-r--r-- 0 root (0) root (0) 8871 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00830.html\n+-rw-r--r-- 0 root (0) root (0) 415 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00830.js\n+-rw-r--r-- 0 root (0) root (0) 38721 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00830_source.html\n+-rw-r--r-- 0 root (0) root (0) 7661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00833.html\n+-rw-r--r-- 0 root (0) root (0) 188 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00833.js\n+-rw-r--r-- 0 root (0) root (0) 38060 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00833_source.html\n+-rw-r--r-- 0 root (0) root (0) 5557 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00836.html\n+-rw-r--r-- 0 root (0) root (0) 5725 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00839.html\n+-rw-r--r-- 0 root (0) root (0) 6663 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00842.html\n+-rw-r--r-- 0 root (0) root (0) 154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00842.js\n+-rw-r--r-- 0 root (0) root (0) 29640 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00842_source.html\n+-rw-r--r-- 0 root (0) root (0) 5668 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00845.html\n+-rw-r--r-- 0 root (0) root (0) 12032 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00845_source.html\n+-rw-r--r-- 0 root (0) root (0) 37272 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00848_source.html\n+-rw-r--r-- 0 root (0) root (0) 5648 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00851.html\n+-rw-r--r-- 0 root (0) root (0) 5562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00854.html\n+-rw-r--r-- 0 root (0) root (0) 7940 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00857.html\n+-rw-r--r-- 0 root (0) root (0) 245 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00857.js\n+-rw-r--r-- 0 root (0) root (0) 32692 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00857_source.html\n+-rw-r--r-- 0 root (0) root (0) 5643 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00863.html\n+-rw-r--r-- 0 root (0) root (0) 6562 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00866.html\n+-rw-r--r-- 0 root (0) root (0) 160 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00866.js\n+-rw-r--r-- 0 root (0) root (0) 56968 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00866_source.html\n+-rw-r--r-- 0 root (0) root (0) 5609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00869.html\n+-rw-r--r-- 0 root (0) root (0) 6901 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00872.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00872.js\n+-rw-r--r-- 0 root (0) root (0) 46918 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00872_source.html\n+-rw-r--r-- 0 root (0) root (0) 6387 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00875.html\n+-rw-r--r-- 0 root (0) root (0) 13406 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00875_source.html\n+-rw-r--r-- 0 root (0) root (0) 5571 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00878.html\n -rw-r--r-- 0 root (0) root (0) 6532 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00881.html\n -rw-r--r-- 0 root (0) root (0) 134 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00881.js\n -rw-r--r-- 0 root (0) root (0) 12972 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00881_source.html\n--rw-r--r-- 0 root (0) root (0) 5648 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00884.html\n--rw-r--r-- 0 root (0) root (0) 13120 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00887.html\n--rw-r--r-- 0 root (0) root (0) 670 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00887.js\n--rw-r--r-- 0 root (0) root (0) 28259 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00887_source.html\n--rw-r--r-- 0 root (0) root (0) 7195 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00890.html\n--rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00890.js\n--rw-r--r-- 0 root (0) root (0) 29635 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00890_source.html\n--rw-r--r-- 0 root (0) root (0) 9091 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00893.html\n--rw-r--r-- 0 root (0) root (0) 185 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00893.js\n--rw-r--r-- 0 root (0) root (0) 7316 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00896.html\n--rw-r--r-- 0 root (0) root (0) 97 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00896.js\n--rw-r--r-- 0 root (0) root (0) 8297 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00899.html\n--rw-r--r-- 0 root (0) root (0) 94 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00899.js\n--rw-r--r-- 0 root (0) root (0) 8571 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00902.html\n--rw-r--r-- 0 root (0) root (0) 153 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00902.js\n--rw-r--r-- 0 root (0) root (0) 49274 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00902_source.html\n--rw-r--r-- 0 root (0) root (0) 6611 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00908.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00908.js\n--rw-r--r-- 0 root (0) root (0) 18128 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00908_source.html\n--rw-r--r-- 0 root (0) root (0) 7069 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00914.html\n--rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00914.js\n--rw-r--r-- 0 root (0) root (0) 34621 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00914_source.html\n--rw-r--r-- 0 root (0) root (0) 8465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00917.html\n--rw-r--r-- 0 root (0) root (0) 231 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00917.js\n--rw-r--r-- 0 root (0) root (0) 47156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00917_source.html\n--rw-r--r-- 0 root (0) root (0) 7029 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00920.html\n--rw-r--r-- 0 root (0) root (0) 35940 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00920_source.html\n--rw-r--r-- 0 root (0) root (0) 6448 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00923.html\n--rw-r--r-- 0 root (0) root (0) 80 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00923.js\n--rw-r--r-- 0 root (0) root (0) 23692 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00923_source.html\n--rw-r--r-- 0 root (0) root (0) 9760 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00929.html\n--rw-r--r-- 0 root (0) root (0) 316 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00929.js\n--rw-r--r-- 0 root (0) root (0) 59601 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00929_source.html\n+-rw-r--r-- 0 root (0) root (0) 7445 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00884.html\n+-rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00884.js\n+-rw-r--r-- 0 root (0) root (0) 35988 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00884_source.html\n+-rw-r--r-- 0 root (0) root (0) 7316 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00887.html\n+-rw-r--r-- 0 root (0) root (0) 97 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00887.js\n+-rw-r--r-- 0 root (0) root (0) 5770 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00890.html\n+-rw-r--r-- 0 root (0) root (0) 13639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00890_source.html\n+-rw-r--r-- 0 root (0) root (0) 7225 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00893.html\n+-rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00893.js\n+-rw-r--r-- 0 root (0) root (0) 69400 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00893_source.html\n+-rw-r--r-- 0 root (0) root (0) 13381 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00896.html\n+-rw-r--r-- 0 root (0) root (0) 665 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00896.js\n+-rw-r--r-- 0 root (0) root (0) 19609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00896_source.html\n+-rw-r--r-- 0 root (0) root (0) 5691 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00899.html\n+-rw-r--r-- 0 root (0) root (0) 9996 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00902.html\n+-rw-r--r-- 0 root (0) root (0) 7029 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00908.html\n+-rw-r--r-- 0 root (0) root (0) 35940 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00908_source.html\n+-rw-r--r-- 0 root (0) root (0) 6414 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00911.html\n+-rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00911.js\n+-rw-r--r-- 0 root (0) root (0) 25637 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00911_source.html\n+-rw-r--r-- 0 root (0) root (0) 7321 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00914.html\n+-rw-r--r-- 0 root (0) root (0) 197 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00914.js\n+-rw-r--r-- 0 root (0) root (0) 33342 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00914_source.html\n+-rw-r--r-- 0 root (0) root (0) 7069 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00917.html\n+-rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00917.js\n+-rw-r--r-- 0 root (0) root (0) 34621 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00917_source.html\n+-rw-r--r-- 0 root (0) root (0) 32900 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00920_source.html\n+-rw-r--r-- 0 root (0) root (0) 6359 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00926.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00926.js\n+-rw-r--r-- 0 root (0) root (0) 24129 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00926_source.html\n -rw-r--r-- 0 root (0) root (0) 5660 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00932.html\n--rw-r--r-- 0 root (0) root (0) 5609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00935.html\n--rw-r--r-- 0 root (0) root (0) 8826 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00938.html\n--rw-r--r-- 0 root (0) root (0) 213 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00938.js\n--rw-r--r-- 0 root (0) root (0) 55825 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00938_source.html\n--rw-r--r-- 0 root (0) root (0) 6414 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00941.html\n--rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00941.js\n--rw-r--r-- 0 root (0) root (0) 25637 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00941_source.html\n--rw-r--r-- 0 root (0) root (0) 7639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00944.html\n--rw-r--r-- 0 root (0) root (0) 202 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00944.js\n--rw-r--r-- 0 root (0) root (0) 39261 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00944_source.html\n--rw-r--r-- 0 root (0) root (0) 6390 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00947.html\n--rw-r--r-- 0 root (0) root (0) 24874 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00947_source.html\n--rw-r--r-- 0 root (0) root (0) 6683 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00950.html\n--rw-r--r-- 0 root (0) root (0) 143 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00950.js\n--rw-r--r-- 0 root (0) root (0) 41393 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00950_source.html\n--rw-r--r-- 0 root (0) root (0) 32900 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00956_source.html\n--rw-r--r-- 0 root (0) root (0) 9996 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00959.html\n--rw-r--r-- 0 root (0) root (0) 5559 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00965.html\n--rw-r--r-- 0 root (0) root (0) 6921 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00968.html\n--rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00968.js\n--rw-r--r-- 0 root (0) root (0) 37965 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00968_source.html\n--rw-r--r-- 0 root (0) root (0) 7321 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00971.html\n--rw-r--r-- 0 root (0) root (0) 197 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00971.js\n--rw-r--r-- 0 root (0) root (0) 33342 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00971_source.html\n--rw-r--r-- 0 root (0) root (0) 5669 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00974.html\n--rw-r--r-- 0 root (0) root (0) 5612 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00977.html\n--rw-r--r-- 0 root (0) root (0) 11831 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00980.html\n+-rw-r--r-- 0 root (0) root (0) 6439 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00938.html\n+-rw-r--r-- 0 root (0) root (0) 140 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00938.js\n+-rw-r--r-- 0 root (0) root (0) 33448 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00938_source.html\n+-rw-r--r-- 0 root (0) root (0) 5669 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00941.html\n+-rw-r--r-- 0 root (0) root (0) 8571 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00944.html\n+-rw-r--r-- 0 root (0) root (0) 153 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00944.js\n+-rw-r--r-- 0 root (0) root (0) 49274 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00944_source.html\n+-rw-r--r-- 0 root (0) root (0) 5612 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00947.html\n+-rw-r--r-- 0 root (0) root (0) 11831 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00950.html\n+-rw-r--r-- 0 root (0) root (0) 9760 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00953.html\n+-rw-r--r-- 0 root (0) root (0) 316 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00953.js\n+-rw-r--r-- 0 root (0) root (0) 59601 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00953_source.html\n+-rw-r--r-- 0 root (0) root (0) 6611 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00956.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00956.js\n+-rw-r--r-- 0 root (0) root (0) 18128 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00956_source.html\n+-rw-r--r-- 0 root (0) root (0) 6864 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00959.html\n+-rw-r--r-- 0 root (0) root (0) 7639 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00962.html\n+-rw-r--r-- 0 root (0) root (0) 202 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00962.js\n+-rw-r--r-- 0 root (0) root (0) 39261 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00962_source.html\n+-rw-r--r-- 0 root (0) root (0) 6448 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00965.html\n+-rw-r--r-- 0 root (0) root (0) 80 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00965.js\n+-rw-r--r-- 0 root (0) root (0) 23692 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00965_source.html\n+-rw-r--r-- 0 root (0) root (0) 6963 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00968.html\n+-rw-r--r-- 0 root (0) root (0) 93 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00968.js\n+-rw-r--r-- 0 root (0) root (0) 7763 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00971.html\n+-rw-r--r-- 0 root (0) root (0) 223 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00971.js\n+-rw-r--r-- 0 root (0) root (0) 38413 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00971_source.html\n+-rw-r--r-- 0 root (0) root (0) 6921 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00974.html\n+-rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00974.js\n+-rw-r--r-- 0 root (0) root (0) 37965 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00974_source.html\n+-rw-r--r-- 0 root (0) root (0) 8826 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00977.html\n+-rw-r--r-- 0 root (0) root (0) 213 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00977.js\n+-rw-r--r-- 0 root (0) root (0) 55825 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00977_source.html\n -rw-r--r-- 0 root (0) root (0) 5635 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00983.html\n--rw-r--r-- 0 root (0) root (0) 7763 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00986.html\n--rw-r--r-- 0 root (0) root (0) 223 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00986.js\n--rw-r--r-- 0 root (0) root (0) 38413 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00986_source.html\n--rw-r--r-- 0 root (0) root (0) 6963 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00989.html\n--rw-r--r-- 0 root (0) root (0) 93 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00989.js\n--rw-r--r-- 0 root (0) root (0) 6864 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00992.html\n--rw-r--r-- 0 root (0) root (0) 6439 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00995.html\n--rw-r--r-- 0 root (0) root (0) 140 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00995.js\n--rw-r--r-- 0 root (0) root (0) 33448 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00995_source.html\n--rw-r--r-- 0 root (0) root (0) 6359 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00998.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00998.js\n--rw-r--r-- 0 root (0) root (0) 24129 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00998_source.html\n--rw-r--r-- 0 root (0) root (0) 6802 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01001.html\n--rw-r--r-- 0 root (0) root (0) 137 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01001.js\n--rw-r--r-- 0 root (0) root (0) 17991 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01001_source.html\n--rw-r--r-- 0 root (0) root (0) 5816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01004.html\n--rw-r--r-- 0 root (0) root (0) 75095 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01007_source.html\n--rw-r--r-- 0 root (0) root (0) 6521 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01010.html\n--rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01010.js\n--rw-r--r-- 0 root (0) root (0) 13022 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01010_source.html\n--rw-r--r-- 0 root (0) root (0) 10339 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01013.html\n--rw-r--r-- 0 root (0) root (0) 493 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01013.js\n--rw-r--r-- 0 root (0) root (0) 50078 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01013_source.html\n--rw-r--r-- 0 root (0) root (0) 8787 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01016.html\n--rw-r--r-- 0 root (0) root (0) 314 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01016.js\n--rw-r--r-- 0 root (0) root (0) 68014 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01016_source.html\n+-rw-r--r-- 0 root (0) root (0) 6683 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00986.html\n+-rw-r--r-- 0 root (0) root (0) 143 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00986.js\n+-rw-r--r-- 0 root (0) root (0) 41393 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00986_source.html\n+-rw-r--r-- 0 root (0) root (0) 5609 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00989.html\n+-rw-r--r-- 0 root (0) root (0) 6390 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00992.html\n+-rw-r--r-- 0 root (0) root (0) 24874 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00992_source.html\n+-rw-r--r-- 0 root (0) root (0) 8465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00995.html\n+-rw-r--r-- 0 root (0) root (0) 231 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00995.js\n+-rw-r--r-- 0 root (0) root (0) 47156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00995_source.html\n+-rw-r--r-- 0 root (0) root (0) 5559 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a00998.html\n+-rw-r--r-- 0 root (0) root (0) 6646 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01001.html\n+-rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01001.js\n+-rw-r--r-- 0 root (0) root (0) 13167 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01001_source.html\n+-rw-r--r-- 0 root (0) root (0) 8050 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01004.html\n+-rw-r--r-- 0 root (0) root (0) 176 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01004.js\n+-rw-r--r-- 0 root (0) root (0) 37487 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01004_source.html\n+-rw-r--r-- 0 root (0) root (0) 7005 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01007.html\n+-rw-r--r-- 0 root (0) root (0) 71 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01007.js\n+-rw-r--r-- 0 root (0) root (0) 54857 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01007_source.html\n+-rw-r--r-- 0 root (0) root (0) 6674 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01010.html\n+-rw-r--r-- 0 root (0) root (0) 5765 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01013.html\n+-rw-r--r-- 0 root (0) root (0) 5542 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01016.html\n -rw-r--r-- 0 root (0) root (0) 6521 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01019.html\n--rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01019.js\n--rw-r--r-- 0 root (0) root (0) 37759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01019_source.html\n--rw-r--r-- 0 root (0) root (0) 43820 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01025_source.html\n--rw-r--r-- 0 root (0) root (0) 15640 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01028.html\n--rw-r--r-- 0 root (0) root (0) 919 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01028.js\n--rw-r--r-- 0 root (0) root (0) 61984 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01028_source.html\n--rw-r--r-- 0 root (0) root (0) 6511 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01031.html\n--rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01031.js\n--rw-r--r-- 0 root (0) root (0) 17610 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01031_source.html\n--rw-r--r-- 0 root (0) root (0) 7515 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01034.html\n--rw-r--r-- 0 root (0) root (0) 99 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01034.js\n--rw-r--r-- 0 root (0) root (0) 7258 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01037.html\n--rw-r--r-- 0 root (0) root (0) 153 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01037.js\n--rw-r--r-- 0 root (0) root (0) 32517 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01037_source.html\n--rw-r--r-- 0 root (0) root (0) 8813 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01040.html\n--rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01040.js\n--rw-r--r-- 0 root (0) root (0) 60117 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01040_source.html\n--rw-r--r-- 0 root (0) root (0) 6590 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01043.html\n--rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01043.js\n--rw-r--r-- 0 root (0) root (0) 24596 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01043_source.html\n--rw-r--r-- 0 root (0) root (0) 6674 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01046.html\n--rw-r--r-- 0 root (0) root (0) 5757 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01049.html\n--rw-r--r-- 0 root (0) root (0) 6719 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01052.html\n--rw-r--r-- 0 root (0) root (0) 89 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01052.js\n--rw-r--r-- 0 root (0) root (0) 94502 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01052_source.html\n--rw-r--r-- 0 root (0) root (0) 7262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01055.html\n--rw-r--r-- 0 root (0) root (0) 99 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01055.js\n--rw-r--r-- 0 root (0) root (0) 7509 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01058.html\n--rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01058.js\n--rw-r--r-- 0 root (0) root (0) 23599 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01058_source.html\n--rw-r--r-- 0 root (0) root (0) 83353 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01061_source.html\n--rw-r--r-- 0 root (0) root (0) 6497 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01064.html\n--rw-r--r-- 0 root (0) root (0) 89 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01064.js\n--rw-r--r-- 0 root (0) root (0) 21256 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01064_source.html\n--rw-r--r-- 0 root (0) root (0) 7950 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01067.html\n--rw-r--r-- 0 root (0) root (0) 364 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01067.js\n--rw-r--r-- 0 root (0) root (0) 103846 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01067_source.html\n--rw-r--r-- 0 root (0) root (0) 6646 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01070.html\n--rw-r--r-- 0 root (0) root (0) 83 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01070.js\n--rw-r--r-- 0 root (0) root (0) 13167 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01070_source.html\n--rw-r--r-- 0 root (0) root (0) 6766 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01073.html\n--rw-r--r-- 0 root (0) root (0) 155 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01073.js\n--rw-r--r-- 0 root (0) root (0) 35912 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01073_source.html\n--rw-r--r-- 0 root (0) root (0) 7249 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01076.html\n--rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01076.js\n--rw-r--r-- 0 root (0) root (0) 36222 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01076_source.html\n--rw-r--r-- 0 root (0) root (0) 5509 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01079.html\n--rw-r--r-- 0 root (0) root (0) 6201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01082.html\n--rw-r--r-- 0 root (0) root (0) 6735 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01085.html\n--rw-r--r-- 0 root (0) root (0) 131 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01085.js\n--rw-r--r-- 0 root (0) root (0) 24143 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01085_source.html\n--rw-r--r-- 0 root (0) root (0) 5778 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01091.html\n--rw-r--r-- 0 root (0) root (0) 30718 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01091_source.html\n--rw-r--r-- 0 root (0) root (0) 8403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01094.html\n--rw-r--r-- 0 root (0) root (0) 161 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01094.js\n--rw-r--r-- 0 root (0) root (0) 23145 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01094_source.html\n--rw-r--r-- 0 root (0) root (0) 11271 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01097.html\n--rw-r--r-- 0 root (0) root (0) 275 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01097.js\n--rw-r--r-- 0 root (0) root (0) 88722 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01097_source.html\n--rw-r--r-- 0 root (0) root (0) 5765 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01100.html\n--rw-r--r-- 0 root (0) root (0) 6866 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01103.html\n--rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01103.js\n--rw-r--r-- 0 root (0) root (0) 28417 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01103_source.html\n--rw-r--r-- 0 root (0) root (0) 5676 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01106.html\n--rw-r--r-- 0 root (0) root (0) 5542 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01109.html\n+-rw-r--r-- 0 root (0) root (0) 81 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01019.js\n+-rw-r--r-- 0 root (0) root (0) 13022 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01019_source.html\n+-rw-r--r-- 0 root (0) root (0) 5676 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01022.html\n+-rw-r--r-- 0 root (0) root (0) 11271 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01025.html\n+-rw-r--r-- 0 root (0) root (0) 275 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01025.js\n+-rw-r--r-- 0 root (0) root (0) 88722 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01025_source.html\n+-rw-r--r-- 0 root (0) root (0) 5816 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01028.html\n+-rw-r--r-- 0 root (0) root (0) 6802 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01031.html\n+-rw-r--r-- 0 root (0) root (0) 137 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01031.js\n+-rw-r--r-- 0 root (0) root (0) 17991 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01031_source.html\n+-rw-r--r-- 0 root (0) root (0) 5791 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01034.html\n+-rw-r--r-- 0 root (0) root (0) 8813 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01037.html\n+-rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01037.js\n+-rw-r--r-- 0 root (0) root (0) 60117 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01037_source.html\n+-rw-r--r-- 0 root (0) root (0) 83353 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01040_source.html\n+-rw-r--r-- 0 root (0) root (0) 6735 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01043.html\n+-rw-r--r-- 0 root (0) root (0) 131 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01043.js\n+-rw-r--r-- 0 root (0) root (0) 24143 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01043_source.html\n+-rw-r--r-- 0 root (0) root (0) 74370 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01046_source.html\n+-rw-r--r-- 0 root (0) root (0) 8182 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01049.html\n+-rw-r--r-- 0 root (0) root (0) 154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01049.js\n+-rw-r--r-- 0 root (0) root (0) 32933 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01049_source.html\n+-rw-r--r-- 0 root (0) root (0) 8791 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01052.html\n+-rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01052.js\n+-rw-r--r-- 0 root (0) root (0) 44674 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01052_source.html\n+-rw-r--r-- 0 root (0) root (0) 7509 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01055.html\n+-rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01055.js\n+-rw-r--r-- 0 root (0) root (0) 23599 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01055_source.html\n+-rw-r--r-- 0 root (0) root (0) 7950 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01058.html\n+-rw-r--r-- 0 root (0) root (0) 364 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01058.js\n+-rw-r--r-- 0 root (0) root (0) 103846 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01058_source.html\n+-rw-r--r-- 0 root (0) root (0) 6403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01061.html\n+-rw-r--r-- 0 root (0) root (0) 73 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01061.js\n+-rw-r--r-- 0 root (0) root (0) 25127 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01061_source.html\n+-rw-r--r-- 0 root (0) root (0) 10339 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01064.html\n+-rw-r--r-- 0 root (0) root (0) 493 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01064.js\n+-rw-r--r-- 0 root (0) root (0) 50078 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01064_source.html\n+-rw-r--r-- 0 root (0) root (0) 6662 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01067.html\n+-rw-r--r-- 0 root (0) root (0) 16604 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01067_source.html\n+-rw-r--r-- 0 root (0) root (0) 6497 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01070.html\n+-rw-r--r-- 0 root (0) root (0) 89 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01070.js\n+-rw-r--r-- 0 root (0) root (0) 21256 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01070_source.html\n+-rw-r--r-- 0 root (0) root (0) 7249 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01073.html\n+-rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01073.js\n+-rw-r--r-- 0 root (0) root (0) 36222 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01073_source.html\n+-rw-r--r-- 0 root (0) root (0) 5641 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01076.html\n+-rw-r--r-- 0 root (0) root (0) 5598 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01079.html\n+-rw-r--r-- 0 root (0) root (0) 5544 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01082.html\n+-rw-r--r-- 0 root (0) root (0) 6681 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01085.html\n+-rw-r--r-- 0 root (0) root (0) 150 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01085.js\n+-rw-r--r-- 0 root (0) root (0) 49490 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01085_source.html\n+-rw-r--r-- 0 root (0) root (0) 43820 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01088_source.html\n+-rw-r--r-- 0 root (0) root (0) 10777 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01091.html\n+-rw-r--r-- 0 root (0) root (0) 201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01091.js\n+-rw-r--r-- 0 root (0) root (0) 26364 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01091_source.html\n+-rw-r--r-- 0 root (0) root (0) 15640 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01097.html\n+-rw-r--r-- 0 root (0) root (0) 919 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01097.js\n+-rw-r--r-- 0 root (0) root (0) 61984 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01097_source.html\n+-rw-r--r-- 0 root (0) root (0) 10047 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01100.html\n+-rw-r--r-- 0 root (0) root (0) 118 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01100.js\n+-rw-r--r-- 0 root (0) root (0) 13067 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01100_source.html\n+-rw-r--r-- 0 root (0) root (0) 6719 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01103.html\n+-rw-r--r-- 0 root (0) root (0) 89 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01103.js\n+-rw-r--r-- 0 root (0) root (0) 94502 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01103_source.html\n+-rw-r--r-- 0 root (0) root (0) 5679 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01106.html\n+-rw-r--r-- 0 root (0) root (0) 7262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01109.html\n+-rw-r--r-- 0 root (0) root (0) 99 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01109.js\n -rw-r--r-- 0 root (0) root (0) 5537 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01112.html\n--rw-r--r-- 0 root (0) root (0) 5672 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01115.html\n--rw-r--r-- 0 root (0) root (0) 5641 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01118.html\n--rw-r--r-- 0 root (0) root (0) 10777 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01121.html\n--rw-r--r-- 0 root (0) root (0) 201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01121.js\n--rw-r--r-- 0 root (0) root (0) 26364 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01121_source.html\n--rw-r--r-- 0 root (0) root (0) 8791 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01124.html\n--rw-r--r-- 0 root (0) root (0) 265 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01124.js\n--rw-r--r-- 0 root (0) root (0) 44674 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01124_source.html\n--rw-r--r-- 0 root (0) root (0) 8050 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01127.html\n--rw-r--r-- 0 root (0) root (0) 176 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01127.js\n--rw-r--r-- 0 root (0) root (0) 37487 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01127_source.html\n--rw-r--r-- 0 root (0) root (0) 10303 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01130.html\n--rw-r--r-- 0 root (0) root (0) 693 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01130.js\n--rw-r--r-- 0 root (0) root (0) 99817 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01130_source.html\n--rw-r--r-- 0 root (0) root (0) 5791 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01133.html\n--rw-r--r-- 0 root (0) root (0) 7312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01136.html\n--rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01136.js\n--rw-r--r-- 0 root (0) root (0) 37468 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01136_source.html\n--rw-r--r-- 0 root (0) root (0) 5679 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01139.html\n--rw-r--r-- 0 root (0) root (0) 10047 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01142.html\n--rw-r--r-- 0 root (0) root (0) 118 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01142.js\n--rw-r--r-- 0 root (0) root (0) 13067 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01142_source.html\n--rw-r--r-- 0 root (0) root (0) 5544 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01145.html\n--rw-r--r-- 0 root (0) root (0) 5598 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01148.html\n--rw-r--r-- 0 root (0) root (0) 74370 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01151_source.html\n--rw-r--r-- 0 root (0) root (0) 6681 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01154.html\n--rw-r--r-- 0 root (0) root (0) 150 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01154.js\n--rw-r--r-- 0 root (0) root (0) 49490 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01154_source.html\n--rw-r--r-- 0 root (0) root (0) 8182 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01160.html\n--rw-r--r-- 0 root (0) root (0) 154 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01160.js\n--rw-r--r-- 0 root (0) root (0) 32933 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01160_source.html\n--rw-r--r-- 0 root (0) root (0) 7005 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01163.html\n--rw-r--r-- 0 root (0) root (0) 71 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01163.js\n--rw-r--r-- 0 root (0) root (0) 54857 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01163_source.html\n--rw-r--r-- 0 root (0) root (0) 6403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01166.html\n--rw-r--r-- 0 root (0) root (0) 73 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01166.js\n--rw-r--r-- 0 root (0) root (0) 25127 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01166_source.html\n--rw-r--r-- 0 root (0) root (0) 6662 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01169.html\n--rw-r--r-- 0 root (0) root (0) 16604 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01169_source.html\n--rw-r--r-- 0 root (0) root (0) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01172.html\n--rw-r--r-- 0 root (0) root (0) 6896 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01184.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01184.js\n--rw-r--r-- 0 root (0) root (0) 22430 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01184_source.html\n--rw-r--r-- 0 root (0) root (0) 7996 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01187.html\n--rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01187.js\n--rw-r--r-- 0 root (0) root (0) 18886 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01187_source.html\n--rw-r--r-- 0 root (0) root (0) 7490 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01193.html\n--rw-r--r-- 0 root (0) root (0) 14520 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01193_source.html\n--rw-r--r-- 0 root (0) root (0) 8734 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01196.html\n--rw-r--r-- 0 root (0) root (0) 266 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01196.js\n--rw-r--r-- 0 root (0) root (0) 75097 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01196_source.html\n--rw-r--r-- 0 root (0) root (0) 14404 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01199.html\n--rw-r--r-- 0 root (0) root (0) 807 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01199.js\n--rw-r--r-- 0 root (0) root (0) 36213 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01199_source.html\n--rw-r--r-- 0 root (0) root (0) 6465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01202.html\n--rw-r--r-- 0 root (0) root (0) 18491 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01202_source.html\n--rw-r--r-- 0 root (0) root (0) 7767 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01205.html\n--rw-r--r-- 0 root (0) root (0) 5657 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01208.html\n--rw-r--r-- 0 root (0) root (0) 9294 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01211.html\n--rw-r--r-- 0 root (0) root (0) 108 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01211.js\n--rw-r--r-- 0 root (0) root (0) 6626 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01214.html\n--rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01214.js\n--rw-r--r-- 0 root (0) root (0) 21272 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01214_source.html\n+-rw-r--r-- 0 root (0) root (0) 6511 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01115.html\n+-rw-r--r-- 0 root (0) root (0) 78 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01115.js\n+-rw-r--r-- 0 root (0) root (0) 17610 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01115_source.html\n+-rw-r--r-- 0 root (0) root (0) 7258 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01118.html\n+-rw-r--r-- 0 root (0) root (0) 153 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01118.js\n+-rw-r--r-- 0 root (0) root (0) 32517 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01118_source.html\n+-rw-r--r-- 0 root (0) root (0) 8403 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01121.html\n+-rw-r--r-- 0 root (0) root (0) 161 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01121.js\n+-rw-r--r-- 0 root (0) root (0) 23145 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01121_source.html\n+-rw-r--r-- 0 root (0) root (0) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01124.html\n+-rw-r--r-- 0 root (0) root (0) 10303 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01127.html\n+-rw-r--r-- 0 root (0) root (0) 693 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01127.js\n+-rw-r--r-- 0 root (0) root (0) 99817 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01127_source.html\n+-rw-r--r-- 0 root (0) root (0) 5757 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01130.html\n+-rw-r--r-- 0 root (0) root (0) 6201 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01133.html\n+-rw-r--r-- 0 root (0) root (0) 75095 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01139_source.html\n+-rw-r--r-- 0 root (0) root (0) 7312 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01142.html\n+-rw-r--r-- 0 root (0) root (0) 126 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01142.js\n+-rw-r--r-- 0 root (0) root (0) 37468 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01142_source.html\n+-rw-r--r-- 0 root (0) root (0) 6521 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01145.html\n+-rw-r--r-- 0 root (0) root (0) 84 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01145.js\n+-rw-r--r-- 0 root (0) root (0) 37759 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01145_source.html\n+-rw-r--r-- 0 root (0) root (0) 5778 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01148.html\n+-rw-r--r-- 0 root (0) root (0) 30718 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01148_source.html\n+-rw-r--r-- 0 root (0) root (0) 8787 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01151.html\n+-rw-r--r-- 0 root (0) root (0) 314 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01151.js\n+-rw-r--r-- 0 root (0) root (0) 68014 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01151_source.html\n+-rw-r--r-- 0 root (0) root (0) 6866 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01154.html\n+-rw-r--r-- 0 root (0) root (0) 152 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01154.js\n+-rw-r--r-- 0 root (0) root (0) 28417 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01154_source.html\n+-rw-r--r-- 0 root (0) root (0) 5672 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01157.html\n+-rw-r--r-- 0 root (0) root (0) 6766 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01160.html\n+-rw-r--r-- 0 root (0) root (0) 155 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01160.js\n+-rw-r--r-- 0 root (0) root (0) 35912 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01160_source.html\n+-rw-r--r-- 0 root (0) root (0) 7515 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01163.html\n+-rw-r--r-- 0 root (0) root (0) 99 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01163.js\n+-rw-r--r-- 0 root (0) root (0) 5509 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01166.html\n+-rw-r--r-- 0 root (0) root (0) 6590 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01172.html\n+-rw-r--r-- 0 root (0) root (0) 87 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01172.js\n+-rw-r--r-- 0 root (0) root (0) 24596 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01172_source.html\n+-rw-r--r-- 0 root (0) root (0) 7490 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01184.html\n+-rw-r--r-- 0 root (0) root (0) 14520 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01184_source.html\n+-rw-r--r-- 0 root (0) root (0) 8734 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01187.html\n+-rw-r--r-- 0 root (0) root (0) 266 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01187.js\n+-rw-r--r-- 0 root (0) root (0) 75097 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01187_source.html\n+-rw-r--r-- 0 root (0) root (0) 6626 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01190.html\n+-rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01190.js\n+-rw-r--r-- 0 root (0) root (0) 21272 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01190_source.html\n+-rw-r--r-- 0 root (0) root (0) 6465 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01193.html\n+-rw-r--r-- 0 root (0) root (0) 18491 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01193_source.html\n+-rw-r--r-- 0 root (0) root (0) 10834 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01196.html\n+-rw-r--r-- 0 root (0) root (0) 168 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01196.js\n+-rw-r--r-- 0 root (0) root (0) 15064 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01196_source.html\n+-rw-r--r-- 0 root (0) root (0) 9294 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01199.html\n+-rw-r--r-- 0 root (0) root (0) 108 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01199.js\n+-rw-r--r-- 0 root (0) root (0) 14404 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01202.html\n+-rw-r--r-- 0 root (0) root (0) 807 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01202.js\n+-rw-r--r-- 0 root (0) root (0) 36213 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01202_source.html\n+-rw-r--r-- 0 root (0) root (0) 7661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01205.html\n+-rw-r--r-- 0 root (0) root (0) 7996 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01208.html\n+-rw-r--r-- 0 root (0) root (0) 77 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01208.js\n+-rw-r--r-- 0 root (0) root (0) 18886 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01208_source.html\n+-rw-r--r-- 0 root (0) root (0) 12714 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01211.html\n+-rw-r--r-- 0 root (0) root (0) 674 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01211.js\n+-rw-r--r-- 0 root (0) root (0) 9089 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01214.html\n+-rw-r--r-- 0 root (0) root (0) 337 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01214.js\n+-rw-r--r-- 0 root (0) root (0) 37621 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01214_source.html\n -rw-r--r-- 0 root (0) root (0) 5666 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01217.html\n--rw-r--r-- 0 root (0) root (0) 12714 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01220.html\n--rw-r--r-- 0 root (0) root (0) 674 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01220.js\n -rw-r--r-- 0 root (0) root (0) 6298 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01223.html\n -rw-r--r-- 0 root (0) root (0) 79 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01223.js\n -rw-r--r-- 0 root (0) root (0) 27993 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01223_source.html\n--rw-r--r-- 0 root (0) root (0) 9089 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01226.html\n--rw-r--r-- 0 root (0) root (0) 337 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01226.js\n--rw-r--r-- 0 root (0) root (0) 37621 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01226_source.html\n--rw-r--r-- 0 root (0) root (0) 7661 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01229.html\n--rw-r--r-- 0 root (0) root (0) 10834 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01232.html\n--rw-r--r-- 0 root (0) root (0) 168 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01232.js\n--rw-r--r-- 0 root (0) root (0) 15064 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01232_source.html\n--rw-r--r-- 0 root (0) root (0) 19122 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01235_source.html\n--rw-r--r-- 0 root (0) root (0) 53045 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01241_source.html\n--rw-r--r-- 0 root (0) root (0) 6595 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01244.html\n--rw-r--r-- 0 root (0) root (0) 24742 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01244_source.html\n--rw-r--r-- 0 root (0) root (0) 18044 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01247_source.html\n--rw-r--r-- 0 root (0) root (0) 6847 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01250.html\n--rw-r--r-- 0 root (0) root (0) 95 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01250.js\n--rw-r--r-- 0 root (0) root (0) 47234 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01250_source.html\n--rw-r--r-- 0 root (0) root (0) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01253.html\n+-rw-r--r-- 0 root (0) root (0) 7767 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01226.html\n+-rw-r--r-- 0 root (0) root (0) 6896 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01229.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01229.js\n+-rw-r--r-- 0 root (0) root (0) 22430 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01229_source.html\n+-rw-r--r-- 0 root (0) root (0) 5657 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01232.html\n+-rw-r--r-- 0 root (0) root (0) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01235.html\n+-rw-r--r-- 0 root (0) root (0) 7578 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01238.html\n+-rw-r--r-- 0 root (0) root (0) 71 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01238.js\n+-rw-r--r-- 0 root (0) root (0) 18772 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01238_source.html\n+-rw-r--r-- 0 root (0) root (0) 6450 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01241.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01241.js\n+-rw-r--r-- 0 root (0) root (0) 99463 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01241_source.html\n+-rw-r--r-- 0 root (0) root (0) 19703 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01244_source.html\n+-rw-r--r-- 0 root (0) root (0) 34893 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01250_source.html\n+-rw-r--r-- 0 root (0) root (0) 53045 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01253_source.html\n -rw-r--r-- 0 root (0) root (0) 32324 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01256_source.html\n--rw-r--r-- 0 root (0) root (0) 27308 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01259.html\n--rw-r--r-- 0 root (0) root (0) 2405 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01259.js\n--rw-r--r-- 0 root (0) root (0) 44752 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01259_source.html\n--rw-r--r-- 0 root (0) root (0) 17845 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01262.html\n--rw-r--r-- 0 root (0) root (0) 13824 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01262_source.html\n--rw-r--r-- 0 root (0) root (0) 30917 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01265.html\n--rw-r--r-- 0 root (0) root (0) 877 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01265.js\n--rw-r--r-- 0 root (0) root (0) 34893 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01268_source.html\n--rw-r--r-- 0 root (0) root (0) 6459 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01271.html\n--rw-r--r-- 0 root (0) root (0) 88 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01271.js\n--rw-r--r-- 0 root (0) root (0) 28186 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01271_source.html\n--rw-r--r-- 0 root (0) root (0) 6262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01274.html\n--rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01274.js\n--rw-r--r-- 0 root (0) root (0) 28637 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01274_source.html\n--rw-r--r-- 0 root (0) root (0) 6936 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01277.html\n--rw-r--r-- 0 root (0) root (0) 106 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01277.js\n--rw-r--r-- 0 root (0) root (0) 36516 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01277_source.html\n--rw-r--r-- 0 root (0) root (0) 9523 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01280.html\n--rw-r--r-- 0 root (0) root (0) 304 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01280.js\n--rw-r--r-- 0 root (0) root (0) 35653 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01280_source.html\n--rw-r--r-- 0 root (0) root (0) 6954 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01283.html\n--rw-r--r-- 0 root (0) root (0) 120 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01283.js\n--rw-r--r-- 0 root (0) root (0) 56560 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01283_source.html\n--rw-r--r-- 0 root (0) root (0) 6829 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01286.html\n--rw-r--r-- 0 root (0) root (0) 182 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01286.js\n--rw-r--r-- 0 root (0) root (0) 123331 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01286_source.html\n--rw-r--r-- 0 root (0) root (0) 19703 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01289_source.html\n--rw-r--r-- 0 root (0) root (0) 7589 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01292.html\n--rw-r--r-- 0 root (0) root (0) 260 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01292.js\n--rw-r--r-- 0 root (0) root (0) 70927 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01292_source.html\n--rw-r--r-- 0 root (0) root (0) 22375 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01295_source.html\n--rw-r--r-- 0 root (0) root (0) 8061 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01298.html\n--rw-r--r-- 0 root (0) root (0) 1057 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01298.js\n--rw-r--r-- 0 root (0) root (0) 31679 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01298_source.html\n--rw-r--r-- 0 root (0) root (0) 5751 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01301.html\n--rw-r--r-- 0 root (0) root (0) 20551 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01301_source.html\n--rw-r--r-- 0 root (0) root (0) 7578 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01304.html\n--rw-r--r-- 0 root (0) root (0) 71 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01304.js\n--rw-r--r-- 0 root (0) root (0) 18772 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01304_source.html\n--rw-r--r-- 0 root (0) root (0) 7254 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01307.html\n--rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01307.js\n--rw-r--r-- 0 root (0) root (0) 80135 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01307_source.html\n--rw-r--r-- 0 root (0) root (0) 77347 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01310_source.html\n--rw-r--r-- 0 root (0) root (0) 6450 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01316.html\n--rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01316.js\n--rw-r--r-- 0 root (0) root (0) 99463 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01316_source.html\n--rw-r--r-- 0 root (0) root (0) 8386 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01319.html\n--rw-r--r-- 0 root (0) root (0) 234 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01319.js\n--rw-r--r-- 0 root (0) root (0) 42102 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01319_source.html\n--rw-r--r-- 0 root (0) root (0) 22253 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01322_source.html\n--rw-r--r-- 0 root (0) root (0) 7064 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01325.html\n--rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01325.js\n--rw-r--r-- 0 root (0) root (0) 19138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01328_source.html\n--rw-r--r-- 0 root (0) root (0) 7033 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01331.html\n--rw-r--r-- 0 root (0) root (0) 172 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01331.js\n--rw-r--r-- 0 root (0) root (0) 118926 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01331_source.html\n--rw-r--r-- 0 root (0) root (0) 7173 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01334.html\n--rw-r--r-- 0 root (0) root (0) 97 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01334.js\n--rw-r--r-- 0 root (0) root (0) 37474 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01334_source.html\n--rw-r--r-- 0 root (0) root (0) 6186 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01337.html\n--rw-r--r-- 0 root (0) root (0) 27374 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01337_source.html\n--rw-r--r-- 0 root (0) root (0) 5540 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01340.html\n--rw-r--r-- 0 root (0) root (0) 7426 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01343.html\n--rw-r--r-- 0 root (0) root (0) 98 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01343.js\n--rw-r--r-- 0 root (0) root (0) 13828 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01343_source.html\n--rw-r--r-- 0 root (0) root (0) 7720 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01346.html\n--rw-r--r-- 0 root (0) root (0) 280 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01346.js\n--rw-r--r-- 0 root (0) root (0) 19653 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01346_source.html\n--rw-r--r-- 0 root (0) root (0) 6590 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01349.html\n--rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01349.js\n--rw-r--r-- 0 root (0) root (0) 17141 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01349_source.html\n--rw-r--r-- 0 root (0) root (0) 5536 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01352.html\n--rw-r--r-- 0 root (0) root (0) 6648 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01355.html\n--rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01355.js\n--rw-r--r-- 0 root (0) root (0) 5537 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01358.html\n--rw-r--r-- 0 root (0) root (0) 6102 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01361.html\n--rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01361.js\n--rw-r--r-- 0 root (0) root (0) 11368 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01361_source.html\n--rw-r--r-- 0 root (0) root (0) 7104 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01367.html\n--rw-r--r-- 0 root (0) root (0) 148 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01367.js\n--rw-r--r-- 0 root (0) root (0) 37514 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01367_source.html\n--rw-r--r-- 0 root (0) root (0) 8056 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01370.html\n--rw-r--r-- 0 root (0) root (0) 222 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01370.js\n--rw-r--r-- 0 root (0) root (0) 42918 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01370_source.html\n--rw-r--r-- 0 root (0) root (0) 5566 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01373.html\n--rw-r--r-- 0 root (0) root (0) 8301 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01376.html\n+-rw-r--r-- 0 root (0) root (0) 22253 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01259_source.html\n+-rw-r--r-- 0 root (0) root (0) 30917 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01262.html\n+-rw-r--r-- 0 root (0) root (0) 877 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01262.js\n+-rw-r--r-- 0 root (0) root (0) 19138 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01265_source.html\n+-rw-r--r-- 0 root (0) root (0) 77347 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01268_source.html\n+-rw-r--r-- 0 root (0) root (0) 7033 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01271.html\n+-rw-r--r-- 0 root (0) root (0) 172 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01271.js\n+-rw-r--r-- 0 root (0) root (0) 118926 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01271_source.html\n+-rw-r--r-- 0 root (0) root (0) 6186 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01274.html\n+-rw-r--r-- 0 root (0) root (0) 27374 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01274_source.html\n+-rw-r--r-- 0 root (0) root (0) 17845 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01277.html\n+-rw-r--r-- 0 root (0) root (0) 13824 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01277_source.html\n+-rw-r--r-- 0 root (0) root (0) 5751 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01280.html\n+-rw-r--r-- 0 root (0) root (0) 20551 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01280_source.html\n+-rw-r--r-- 0 root (0) root (0) 27308 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01283.html\n+-rw-r--r-- 0 root (0) root (0) 2405 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01283.js\n+-rw-r--r-- 0 root (0) root (0) 44752 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01283_source.html\n+-rw-r--r-- 0 root (0) root (0) 18044 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01286_source.html\n+-rw-r--r-- 0 root (0) root (0) 6936 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01289.html\n+-rw-r--r-- 0 root (0) root (0) 106 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01289.js\n+-rw-r--r-- 0 root (0) root (0) 36516 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01289_source.html\n+-rw-r--r-- 0 root (0) root (0) 7254 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01292.html\n+-rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01292.js\n+-rw-r--r-- 0 root (0) root (0) 80135 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01292_source.html\n+-rw-r--r-- 0 root (0) root (0) 8061 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01295.html\n+-rw-r--r-- 0 root (0) root (0) 1057 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01295.js\n+-rw-r--r-- 0 root (0) root (0) 31679 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01295_source.html\n+-rw-r--r-- 0 root (0) root (0) 6595 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01298.html\n+-rw-r--r-- 0 root (0) root (0) 24742 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01298_source.html\n+-rw-r--r-- 0 root (0) root (0) 6459 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01301.html\n+-rw-r--r-- 0 root (0) root (0) 88 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01301.js\n+-rw-r--r-- 0 root (0) root (0) 28186 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01301_source.html\n+-rw-r--r-- 0 root (0) root (0) 5540 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01304.html\n+-rw-r--r-- 0 root (0) root (0) 6262 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01307.html\n+-rw-r--r-- 0 root (0) root (0) 85 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01307.js\n+-rw-r--r-- 0 root (0) root (0) 28637 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01307_source.html\n+-rw-r--r-- 0 root (0) root (0) 22375 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01313_source.html\n+-rw-r--r-- 0 root (0) root (0) 6847 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01316.html\n+-rw-r--r-- 0 root (0) root (0) 95 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01316.js\n+-rw-r--r-- 0 root (0) root (0) 47234 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01316_source.html\n+-rw-r--r-- 0 root (0) root (0) 7064 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01319.html\n+-rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01319.js\n+-rw-r--r-- 0 root (0) root (0) 8386 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01322.html\n+-rw-r--r-- 0 root (0) root (0) 234 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01322.js\n+-rw-r--r-- 0 root (0) root (0) 42102 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01322_source.html\n+-rw-r--r-- 0 root (0) root (0) 9523 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01325.html\n+-rw-r--r-- 0 root (0) root (0) 304 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01325.js\n+-rw-r--r-- 0 root (0) root (0) 35653 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01325_source.html\n+-rw-r--r-- 0 root (0) root (0) 6829 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01328.html\n+-rw-r--r-- 0 root (0) root (0) 182 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01328.js\n+-rw-r--r-- 0 root (0) root (0) 123331 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01328_source.html\n+-rw-r--r-- 0 root (0) root (0) 7173 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01331.html\n+-rw-r--r-- 0 root (0) root (0) 97 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01331.js\n+-rw-r--r-- 0 root (0) root (0) 37474 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01331_source.html\n+-rw-r--r-- 0 root (0) root (0) 7589 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01334.html\n+-rw-r--r-- 0 root (0) root (0) 260 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01334.js\n+-rw-r--r-- 0 root (0) root (0) 70927 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01334_source.html\n+-rw-r--r-- 0 root (0) root (0) 6954 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01337.html\n+-rw-r--r-- 0 root (0) root (0) 120 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01337.js\n+-rw-r--r-- 0 root (0) root (0) 56560 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01337_source.html\n+-rw-r--r-- 0 root (0) root (0) 19122 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01340_source.html\n+-rw-r--r-- 0 root (0) root (0) 5536 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01343.html\n+-rw-r--r-- 0 root (0) root (0) 5543 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01346.html\n+-rw-r--r-- 0 root (0) root (0) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01349.html\n+-rw-r--r-- 0 root (0) root (0) 5537 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01355.html\n+-rw-r--r-- 0 root (0) root (0) 6102 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01358.html\n+-rw-r--r-- 0 root (0) root (0) 72 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01358.js\n+-rw-r--r-- 0 root (0) root (0) 11368 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01358_source.html\n+-rw-r--r-- 0 root (0) root (0) 8301 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01361.html\n+-rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01361.js\n+-rw-r--r-- 0 root (0) root (0) 18569 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01361_source.html\n+-rw-r--r-- 0 root (0) root (0) 7720 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01364.html\n+-rw-r--r-- 0 root (0) root (0) 280 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01364.js\n+-rw-r--r-- 0 root (0) root (0) 19653 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01364_source.html\n+-rw-r--r-- 0 root (0) root (0) 7075 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01367.html\n+-rw-r--r-- 0 root (0) root (0) 232 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01367.js\n+-rw-r--r-- 0 root (0) root (0) 45377 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01367_source.html\n+-rw-r--r-- 0 root (0) root (0) 7104 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01370.html\n+-rw-r--r-- 0 root (0) root (0) 148 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01370.js\n+-rw-r--r-- 0 root (0) root (0) 37514 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01370_source.html\n+-rw-r--r-- 0 root (0) root (0) 6870 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01373.html\n+-rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01373.js\n+-rw-r--r-- 0 root (0) root (0) 28867 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01373_source.html\n+-rw-r--r-- 0 root (0) root (0) 6648 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01376.html\n -rw-r--r-- 0 root (0) root (0) 100 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01376.js\n--rw-r--r-- 0 root (0) root (0) 18569 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01376_source.html\n--rw-r--r-- 0 root (0) root (0) 5543 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01379.html\n--rw-r--r-- 0 root (0) root (0) 6870 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01382.html\n--rw-r--r-- 0 root (0) root (0) 82 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01382.js\n--rw-r--r-- 0 root (0) root (0) 28867 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01382_source.html\n--rw-r--r-- 0 root (0) root (0) 7075 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01385.html\n--rw-r--r-- 0 root (0) root (0) 232 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01385.js\n--rw-r--r-- 0 root (0) root (0) 45377 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01385_source.html\n--rw-r--r-- 0 root (0) root (0) 5575 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01388.html\n--rw-r--r-- 0 root (0) root (0) 5554 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01391.html\n+-rw-r--r-- 0 root (0) root (0) 8056 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01379.html\n+-rw-r--r-- 0 root (0) root (0) 222 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01379.js\n+-rw-r--r-- 0 root (0) root (0) 42918 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01379_source.html\n+-rw-r--r-- 0 root (0) root (0) 7426 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01382.html\n+-rw-r--r-- 0 root (0) root (0) 98 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01382.js\n+-rw-r--r-- 0 root (0) root (0) 13828 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01382_source.html\n+-rw-r--r-- 0 root (0) root (0) 5554 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01385.html\n+-rw-r--r-- 0 root (0) root (0) 6590 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01388.html\n+-rw-r--r-- 0 root (0) root (0) 156 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01388.js\n+-rw-r--r-- 0 root (0) root (0) 17141 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01388_source.html\n+-rw-r--r-- 0 root (0) root (0) 5566 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01391.html\n+-rw-r--r-- 0 root (0) root (0) 4958 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01394.html\n -rw-r--r-- 0 root (0) root (0) 4950 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01397.html\n -rw-r--r-- 0 root (0) root (0) 18761 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01397_source.html\n--rw-r--r-- 0 root (0) root (0) 4958 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01403.html\n--rw-r--r-- 0 root (0) root (0) 4933 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01406.html\n--rw-r--r-- 0 root (0) root (0) 7579 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01406_source.html\n+-rw-r--r-- 0 root (0) root (0) 4933 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01400.html\n+-rw-r--r-- 0 root (0) root (0) 7579 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01400_source.html\n -rw-r--r-- 0 root (0) root (0) 9763 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01409.html\n -rw-r--r-- 0 root (0) root (0) 15228 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01410.html\n -rw-r--r-- 0 root (0) root (0) 8481 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01411.html\n -rw-r--r-- 0 root (0) root (0) 4316 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01412.html\n -rw-r--r-- 0 root (0) root (0) 14442 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01413.html\n -rw-r--r-- 0 root (0) root (0) 9641 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01414.html\n -rw-r--r-- 0 root (0) root (0) 20286 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/a01415.html\n@@ -3427,15 +3427,15 @@\n -rw-r--r-- 0 root (0) root (0) 10749 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/functions_w.html\n -rw-r--r-- 0 root (0) root (0) 5058 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/functions_x.html\n -rw-r--r-- 0 root (0) root (0) 4940 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/functions_y.html\n -rw-r--r-- 0 root (0) root (0) 5144 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/functions_z.html\n -rw-r--r-- 0 root (0) root (0) 12860 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/functions_~.html\n -rw-r--r-- 0 root (0) root (0) 5530 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/globals.html\n -rw-r--r-- 0 root (0) root (0) 5529 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/globals_defs.html\n--rw-r--r-- 0 root (0) root (0) 204505 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/gtsam.tag.gz\n+-rw-r--r-- 0 root (0) root (0) 204488 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/gtsam.tag.gz\n -rw-r--r-- 0 root (0) root (0) 428173 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/hierarchy.html\n -rw-r--r-- 0 root (0) root (0) 80762 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/hierarchy.js\n -rw-r--r-- 0 root (0) root (0) 4336 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/index.html\n -rw-r--r-- 0 root (0) root (0) 176630 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/jquery.js\n -rw-r--r-- 0 root (0) root (0) 5925 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/menu.js\n -rw-r--r-- 0 root (0) root (0) 9869 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/menudata.js\n -rw-r--r-- 0 root (0) root (0) 582 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/minus.svg\n@@ -3497,39 +3497,39 @@\n -rw-r--r-- 0 root (0) root (0) 153 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/nav_f.png\n -rw-r--r-- 0 root (0) root (0) 169 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/nav_fd.png\n -rw-r--r-- 0 root (0) root (0) 95 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/nav_g.png\n -rw-r--r-- 0 root (0) root (0) 98 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/nav_h.png\n -rw-r--r-- 0 root (0) root (0) 114 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/nav_hd.png\n -rw-r--r-- 0 root (0) root (0) 2167 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtree.css\n -rw-r--r-- 0 root (0) root (0) 15935 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtree.js\n--rw-r--r-- 0 root (0) root (0) 4308 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreedata.js\n--rw-r--r-- 0 root (0) root (0) 13817 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex0.js\n--rw-r--r-- 0 root (0) root (0) 10905 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex1.js\n+-rw-r--r-- 0 root (0) root (0) 4369 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreedata.js\n+-rw-r--r-- 0 root (0) root (0) 14151 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex0.js\n+-rw-r--r-- 0 root (0) root (0) 10646 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex1.js\n -rw-r--r-- 0 root (0) root (0) 15173 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex10.js\n -rw-r--r-- 0 root (0) root (0) 14907 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex11.js\n -rw-r--r-- 0 root (0) root (0) 14415 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex12.js\n -rw-r--r-- 0 root (0) root (0) 14357 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex13.js\n -rw-r--r-- 0 root (0) root (0) 15133 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex14.js\n -rw-r--r-- 0 root (0) root (0) 15217 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex15.js\n -rw-r--r-- 0 root (0) root (0) 14811 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex16.js\n -rw-r--r-- 0 root (0) root (0) 13820 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex17.js\n -rw-r--r-- 0 root (0) root (0) 14082 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex18.js\n -rw-r--r-- 0 root (0) root (0) 14793 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex19.js\n--rw-r--r-- 0 root (0) root (0) 9527 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex2.js\n+-rw-r--r-- 0 root (0) root (0) 9693 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex2.js\n -rw-r--r-- 0 root (0) root (0) 14797 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex20.js\n -rw-r--r-- 0 root (0) root (0) 15745 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex21.js\n -rw-r--r-- 0 root (0) root (0) 14997 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex22.js\n -rw-r--r-- 0 root (0) root (0) 14791 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex23.js\n -rw-r--r-- 0 root (0) root (0) 14412 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex24.js\n -rw-r--r-- 0 root (0) root (0) 14245 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex25.js\n -rw-r--r-- 0 root (0) root (0) 14589 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex26.js\n -rw-r--r-- 0 root (0) root (0) 11449 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex27.js\n -rw-r--r-- 0 root (0) root (0) 2879 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex28.js\n--rw-r--r-- 0 root (0) root (0) 9741 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex3.js\n--rw-r--r-- 0 root (0) root (0) 13602 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex4.js\n+-rw-r--r-- 0 root (0) root (0) 9485 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex3.js\n+-rw-r--r-- 0 root (0) root (0) 13617 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex4.js\n -rw-r--r-- 0 root (0) root (0) 15499 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex5.js\n -rw-r--r-- 0 root (0) root (0) 11980 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex6.js\n -rw-r--r-- 0 root (0) root (0) 12384 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex7.js\n -rw-r--r-- 0 root (0) root (0) 11740 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex8.js\n -rw-r--r-- 0 root (0) root (0) 13164 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/navtreeindex9.js\n -rw-r--r-- 0 root (0) root (0) 123 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/open.png\n -rw-r--r-- 0 root (0) root (0) 4591 2024-01-09 05:51:35.000000 ./usr/share/doc/libgtsam-dev/html/pages.html\n"}, {"source1": "./usr/share/doc/libgtsam-dev/ImuFactor.pdf", "source2": "./usr/share/doc/libgtsam-dev/ImuFactor.pdf", "unified_diff": null, "details": [{"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n The New IMU Factor\n Frank Dellaert & Varun Agrawal\n-October 25, 2026\n+September 22, 2025\n \n 1\n \n \fIMU Factor\n The IMU factor has 2 variants:\n 1. ImuFactor is a 5-way factor between the previous pose and velocity, the current pose\n and velocity, and the current IMU bias.\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00002.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00002.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VerticalBlockMatrix.h File Reference\n \n \n \n \n \n \n \n@@ -95,85 +95,44 @@\n \n \n \n \n
\n
\n Classes |\n-Namespaces |\n-Macros |\n-Functions
\n-
Manifold.h File Reference
\n+Namespaces
\n+
VerticalBlockMatrix.h File Reference
\n \n
\n \n-

Base class and basic functions for Manifold types. \n+

A matrix with column blocks of pre-defined sizes. \n More...

\n \n

Go to the source code of this file.

\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 Classes

struct  gtsam::manifold_tag
 tag to assert a type is a manifold More...
 
struct  gtsam::internal::HasManifoldPrereqs< Class >
 Requirements on type to pass it to Manifold template below. More...
 
struct  gtsam::internal::GetDimensionImpl< Class, N >
 Extra manifold traits for fixed-dimension types. More...
 
struct  gtsam::internal::GetDimensionImpl< Class, Eigen::Dynamic >
 Extra manifold traits for variable-dimension types. More...
 
struct  gtsam::internal::ManifoldTraits< Class >
 A helper that implements the traits interface for GTSAM manifolds. More...
 
struct  gtsam::internal::Manifold< Class >
 Both ManifoldTraits and Testable. More...
 
struct  gtsam::FixedDimension< T >
 Give fixed size dimension of a type, fails at compile time if dynamic. More...
class  gtsam::VerticalBlockMatrix
 This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-

\n-Macros

\n-#define GTSAM_CONCEPT_MANIFOLD_INST(T)   template class gtsam::IsManifold<T>;
 ‍**
 
\n-#define GTSAM_CONCEPT_MANIFOLD_TYPE(T)   using _gtsam_IsManifold_##T = gtsam::IsManifold<T>;
 
\n-\n-\n-\n-\n-\n

\n-Functions

\n-template<typename T >
 gtsam::BOOST_CONCEPT_REQUIRES (((IsTestable< T >)),(bool)) check_manifold_invariants(const T &a
 Check invariants for Manifold type.
 
\n

Detailed Description

\n-

Base class and basic functions for Manifold types.

\n-
Author
Alex Cunningham
\n-
\n-Frank Dellaert
\n-
\n-Mike Bosse
\n+

A matrix with column blocks of pre-defined sizes.

\n+

Used in JacobianFactor and GaussianConditional.

Author
Richard Roberts
\n+
Date
Sep 18, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,60 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Manifold.h File Reference\n-Base class and basic functions for Manifold types. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+VerticalBlockMatrix.h File Reference\n+A matrix with column blocks of pre-defined sizes. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg\n-\u00a0 tag to assert a type is a manifold _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bH_\ba_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\br_\be_\bq_\bs_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b _\b>\n-\u00a0 Requirements on type to pass it to _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd template below. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b,_\b _\bN_\b _\b>\n-\u00a0 Extra manifold traits for fixed-dimension types. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>\n-\u00a0 Extra manifold traits for variable-dimension types. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b _\b>\n-\u00a0 A helper that implements the traits interface for GTSAM manifolds.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b _\b>\n-\u00a0 Both _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs and _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>\n-\u00a0 Give fixed size dimension of a type, fails at compile time if dynamic.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+\u00a0 This class stores a dense matrix and allows it to be accessed as a\n+ collection of vertical blocks. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_M\bMA\bAN\bNI\bIF\bFO\bOL\bLD\bD_\b_I\bIN\bNS\bST\bT(T)\u00a0\u00a0\u00a0template class gtsam::IsManifold;\n-\u00a0 \u200d**\n-\u00a0\n-#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_M\bMA\bAN\bNI\bIF\bFO\bOL\bLD\bD_\b_T\bTY\bYP\bPE\bE(T)\u00a0\u00a0\u00a0using _gtsam_IsManifold_##T = gtsam::\n- IsManifold;\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBO\bOO\bOS\bST\bT_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_R\bRE\bEQ\bQU\bUI\bIR\bRE\bES\bS (((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be< T >)),(bool))\n- check_manifold_invariants(const T &a\n-\u00a0 Check invariants for Manifold type.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Base class and basic functions for Manifold types.\n+A matrix with column blocks of pre-defined sizes.\n+Used in _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br and _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl.\n Author\n- Alex Cunningham\n- Frank Dellaert\n- Mike Bosse\n+ Richard Roberts\n+ Date\n+ Sep 18, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+ * _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00002_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00002_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VerticalBlockMatrix.h Source File\n \n \n \n \n \n \n \n@@ -98,189 +98,252 @@\n
No Matches
\n \n \n \n \n \n
\n-
Manifold.h
\n+
VerticalBlockMatrix.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <gtsam/base/Matrix.h>
\n-
23#include <gtsam/base/Testable.h>
\n-\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Matrix.h>
\n+\n+\n+
23
\n+
24namespace gtsam {
\n
25
\n-
26#include <boost/concept_check.hpp>
\n-
27#include <boost/concept/requires.hpp>
\n-
28#include <boost/type_traits/is_base_of.hpp>
\n-
29
\n-
30namespace gtsam {
\n-
31
\n-
33struct manifold_tag {};
\n-
34
\n-
53template <typename T> struct traits;
\n-
54
\n-
55namespace internal {
\n+
26 // Forward declarations
\n+
27 class SymmetricBlockMatrix;
\n+
28
\n+
\n+
42 class GTSAM_EXPORT VerticalBlockMatrix
\n+
43 {
\n+
44 public:
\n+\n+
46 typedef Eigen::Block<Matrix> Block;
\n+
47 typedef Eigen::Block<const Matrix> constBlock;
\n+
48
\n+
49 protected:
\n+
50 Matrix matrix_;
\n+\n+
52
\n+\n+\n+\n
56
\n-
58template<class Class>
\n-
\n-\n-
60
\n-
61 enum { dim = Class::dimension };
\n-
62
\n-
63 Class p, q;
\n-
64 Eigen::Matrix<double, dim, 1> v;
\n-\n+
57 public:
\n+
58
\n+
\n+\n+
61 rowStart_(0), rowEnd_(0), blockStart_(0)
\n+
62 {
\n+
63 variableColOffsets_.push_back(0);
\n+
64 assertInvariants();
\n+
65 }
\n+
\n
66
\n-
67 BOOST_CONCEPT_USAGE(HasManifoldPrereqs) {
\n-
68 v = p.localCoordinates(q);
\n-
69 q = p.retract(v);
\n-
70 }
\n-
71};
\n-
\n-
72
\n-
74template<class Class, int N>
\n-
\n-\n-
76 // Compile-time dimensionality
\n-
77 static int GetDimension(const Class&) {
\n-
78 return N;
\n-
79 }
\n-
80};
\n-
\n-
81
\n-
83template<class Class>
\n-
\n-
84struct GetDimensionImpl<Class, Eigen::Dynamic> {
\n-
85 // Run-time dimensionality
\n-
86 static int GetDimension(const Class& m) {
\n-
87 return m.dim();
\n-
88 }
\n-
89};
\n+
68 template<typename CONTAINER>
\n+
\n+
69 VerticalBlockMatrix(const CONTAINER& dimensions, DenseIndex height,
\n+
70 bool appendOneDimension = false) :
\n+
71 variableColOffsets_(dimensions.size() + (appendOneDimension ? 2 : 1)),
\n+
72 rowStart_(0), rowEnd_(height), blockStart_(0) {
\n+
73 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);
\n+
74 matrix_.resize(height, variableColOffsets_.back());
\n+
75 assertInvariants();
\n+
76 }
\n+
\n+
77
\n+
79 template<typename CONTAINER, typename DERIVED>
\n+
\n+
80 VerticalBlockMatrix(const CONTAINER& dimensions,
\n+
81 const Eigen::MatrixBase<DERIVED>& matrix, bool appendOneDimension = false) :
\n+
82 matrix_(matrix), variableColOffsets_(dimensions.size() + (appendOneDimension ? 2 : 1)),
\n+
83 rowStart_(0), rowEnd_(matrix.rows()), blockStart_(0) {
\n+
84 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);
\n+
85 if (variableColOffsets_.back() != matrix_.cols())
\n+
86 throw std::invalid_argument(
\n+
87 "Requested to create a VerticalBlockMatrix with dimensions that do not sum to the total columns of the provided matrix.");
\n+
88 assertInvariants();
\n+
89 }
\n
\n
90
\n-
94template<class Class>
\n-
\n-
95struct ManifoldTraits: GetDimensionImpl<Class, Class::dimension> {
\n-
96
\n-
97 // Check that Class has the necessary machinery
\n-
98 BOOST_CONCEPT_ASSERT((HasManifoldPrereqs<Class>));
\n-
99
\n-
100 // Dimension of the manifold
\n-
101 enum { dimension = Class::dimension };
\n-
102
\n-
103 // Typedefs required by all manifold types.
\n-
104 typedef Class ManifoldType;
\n-\n-
106 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
\n-
107
\n-
108 // Local coordinates
\n-
109 static TangentVector Local(const Class& origin, const Class& other) {
\n-
110 return origin.localCoordinates(other);
\n-
111 }
\n-
112
\n-
113 // Retraction back to manifold
\n-
114 static Class Retract(const Class& origin, const TangentVector& v) {
\n-
115 return origin.retract(v);
\n-
116 }
\n-
117};
\n-
\n-
118
\n-
120template<class Class> struct Manifold: ManifoldTraits<Class>, Testable<Class> {};
\n-
121
\n-
122} // \\ namespace internal
\n-
123
\n-
125template<typename T>
\n-\n-
127check_manifold_invariants(const T& a, const T& b, double tol=1e-9) {
\n-\n-\n-
130 T c = traits<T>::Retract(a,v);
\n-
131 return v0.norm() < tol && traits<T>::Equals(b,c,tol);
\n-
132}
\n-
133
\n-
135template<typename T>
\n-
136class IsManifold {
\n-
137
\n-
138public:
\n-
139
\n-
140 typedef typename traits<T>::structure_category structure_category_tag;
\n-
141 static const int dim = traits<T>::dimension;
\n-
142 typedef typename traits<T>::ManifoldType ManifoldType;
\n-
143 typedef typename traits<T>::TangentVector TangentVector;
\n-
144
\n-
145 BOOST_CONCEPT_USAGE(IsManifold) {
\n-
146 BOOST_STATIC_ASSERT_MSG(
\n-
147 (boost::is_base_of<manifold_tag, structure_category_tag>::value),
\n-
148 "This type's structure_category trait does not assert it as a manifold (or derived)");
\n-
149 BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim);
\n-
150
\n-
151 // make sure Chart methods are defined
\n-
152 v = traits<T>::Local(p, q);
\n-
153 q = traits<T>::Retract(p, v);
\n-
154 }
\n+
92 template<typename ITERATOR>
\n+
\n+
93 VerticalBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim,
\n+
94 DenseIndex height, bool appendOneDimension = false) :
\n+
95 variableColOffsets_((lastBlockDim-firstBlockDim) + (appendOneDimension ? 2 : 1)),
\n+
96 rowStart_(0), rowEnd_(height), blockStart_(0) {
\n+
97 fillOffsets(firstBlockDim, lastBlockDim, appendOneDimension);
\n+
98 matrix_.resize(height, variableColOffsets_.back());
\n+
99 assertInvariants();
\n+
100 }
\n+
\n+
101
\n+
107 static VerticalBlockMatrix LikeActiveViewOf(const VerticalBlockMatrix& rhs);
\n+
108
\n+
112 static VerticalBlockMatrix LikeActiveViewOf(const SymmetricBlockMatrix& rhs, DenseIndex height);
\n+
113
\n+
115 DenseIndex rows() const { assertInvariants(); return rowEnd_ - rowStart_; }
\n+
116
\n+
118 DenseIndex cols() const { assertInvariants(); return variableColOffsets_.back() - variableColOffsets_[blockStart_]; }
\n+
119
\n+
121 DenseIndex nBlocks() const { assertInvariants(); return variableColOffsets_.size() - 1 - blockStart_; }
\n+
122
\n+
124 Block operator()(DenseIndex block) { return range(block, block+1); }
\n+
125
\n+
127 const constBlock operator()(DenseIndex block) const { return range(block, block+1); }
\n+
128
\n+
\n+
130 Block range(DenseIndex startBlock, DenseIndex endBlock) {
\n+
131 assertInvariants();
\n+
132 DenseIndex actualStartBlock = startBlock + blockStart_;
\n+
133 DenseIndex actualEndBlock = endBlock + blockStart_;
\n+
134 if(startBlock != 0 || endBlock != 0) {
\n+
135 checkBlock(actualStartBlock);
\n+
136 assert(actualEndBlock < (DenseIndex)variableColOffsets_.size());
\n+
137 }
\n+
138 const DenseIndex startCol = variableColOffsets_[actualStartBlock];
\n+
139 const DenseIndex rangeCols = variableColOffsets_[actualEndBlock] - startCol;
\n+
140 return matrix_.block(rowStart_, startCol, this->rows(), rangeCols);
\n+
141 }
\n+
\n+
142
\n+
143 const constBlock range(DenseIndex startBlock, DenseIndex endBlock) const {
\n+
144 assertInvariants();
\n+
145 DenseIndex actualStartBlock = startBlock + blockStart_;
\n+
146 DenseIndex actualEndBlock = endBlock + blockStart_;
\n+
147 if(startBlock != 0 || endBlock != 0) {
\n+
148 checkBlock(actualStartBlock);
\n+
149 assert(actualEndBlock < (DenseIndex)variableColOffsets_.size());
\n+
150 }
\n+
151 const DenseIndex startCol = variableColOffsets_[actualStartBlock];
\n+
152 const DenseIndex rangeCols = variableColOffsets_[actualEndBlock] - startCol;
\n+
153 return ((const Matrix&)matrix_).block(rowStart_, startCol, this->rows(), rangeCols);
\n+
154 }
\n
155
\n-
156private:
\n-
157
\n-
158 TangentVector v;
\n-
159 ManifoldType p, q;
\n-
160};
\n+
157 Block full() { return range(0, nBlocks()); }
\n+
158
\n+
160 const constBlock full() const { return range(0, nBlocks()); }
\n
161
\n-
163template<typename T>
\n-
\n-\n-
165 typedef const int value_type;
\n-
166 static const int value = traits<T>::dimension;
\n-
167 BOOST_STATIC_ASSERT_MSG(value != Eigen::Dynamic,
\n-
168 "FixedDimension instantiated for dymanically-sized type.");
\n-
169};
\n-
\n-
170} // \\ namespace gtsam
\n+
162 DenseIndex offset(DenseIndex block) const {
\n+
163 assertInvariants();
\n+
164 DenseIndex actualBlock = block + blockStart_;
\n+
165 checkBlock(actualBlock);
\n+
166 return variableColOffsets_[actualBlock];
\n+
167 }
\n+
168
\n+
170 const DenseIndex& rowStart() const { return rowStart_; }
\n
171
\n-
173// * Macros for using the ManifoldConcept
\n-
174// * - An instantiation for use inside unit tests
\n-
175// * - A typedef for use inside generic algorithms
\n-
176// *
\n-
177// * NOTE: intentionally not in the gtsam namespace to allow for classes not in
\n-
178// * the gtsam namespace to be more easily enforced as testable
\n-
179// */
\n-
180#define GTSAM_CONCEPT_MANIFOLD_INST(T) template class gtsam::IsManifold<T>;
\n-
181#define GTSAM_CONCEPT_MANIFOLD_TYPE(T) using _gtsam_IsManifold_##T = gtsam::IsManifold<T>;
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Concept check for values that can be used in unit tests.
\n-
Special class for optional Jacobian arguments.
\n+
173 DenseIndex& rowStart() { return rowStart_; }
\n+
174
\n+
176 const DenseIndex& rowEnd() const { return rowEnd_; }
\n+
177
\n+
179 DenseIndex& rowEnd() { return rowEnd_; }
\n+
180
\n+
182 const DenseIndex& firstBlock() const { return blockStart_; }
\n+
183
\n+
185 DenseIndex& firstBlock() { return blockStart_; }
\n+
186
\n+
188 const Matrix& matrix() const { return matrix_; }
\n+
189
\n+
191 Matrix& matrix() { return matrix_; }
\n+
192
\n+
193 protected:
\n+
194 void assertInvariants() const {
\n+
195 assert(matrix_.cols() == variableColOffsets_.back());
\n+
196 assert(blockStart_ < (DenseIndex)variableColOffsets_.size());
\n+
197 assert(rowStart_ <= matrix_.rows());
\n+
198 assert(rowEnd_ <= matrix_.rows());
\n+
199 assert(rowStart_ <= rowEnd_);
\n+
200 }
\n+
201
\n+
202 void checkBlock(DenseIndex block) const {
\n+
203 static_cast<void>(block); //Disable unused varibale warnings.
\n+
204 assert(matrix_.cols() == variableColOffsets_.back());
\n+
205 assert(block < (DenseIndex)variableColOffsets_.size() - 1);
\n+
206 assert(variableColOffsets_[block] < matrix_.cols() && variableColOffsets_[block+1] <= matrix_.cols());
\n+
207 }
\n+
208
\n+
209 template<typename ITERATOR>
\n+
210 void fillOffsets(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension) {
\n+
211 variableColOffsets_[0] = 0;
\n+
212 DenseIndex j=0;
\n+
213 for(ITERATOR dim=firstBlockDim; dim!=lastBlockDim; ++dim, ++j)
\n+
214 variableColOffsets_[j+1] = variableColOffsets_[j] + *dim;
\n+
215 if(appendOneDimension)
\n+
216 variableColOffsets_[j+1] = variableColOffsets_[j] + 1;
\n+
217 }
\n+
218
\n+
219 friend class SymmetricBlockMatrix;
\n+
220
\n+
221 private:
\n+
223 friend class boost::serialization::access;
\n+
224 template<class ARCHIVE>
\n+
225 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
226 ar & BOOST_SERIALIZATION_NVP(matrix_);
\n+
227 ar & BOOST_SERIALIZATION_NVP(variableColOffsets_);
\n+
228 ar & BOOST_SERIALIZATION_NVP(rowStart_);
\n+
229 ar & BOOST_SERIALIZATION_NVP(rowEnd_);
\n+
230 ar & BOOST_SERIALIZATION_NVP(blockStart_);
\n+
231 }
\n+
232 };
\n+
\n+
233
\n+
234}
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Serialization for matrices.
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
BOOST_CONCEPT_REQUIRES(((IsGroup< G >)),(bool)) check_group_invariants(const G &a
Check invariants.
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
tag to assert a type is a manifold
Definition Manifold.h:33
\n-
Requirements on type to pass it to Manifold template below.
Definition Manifold.h:59
\n-
Extra manifold traits for fixed-dimension types.
Definition Manifold.h:75
\n-
A helper that implements the traits interface for GTSAM manifolds.
Definition Manifold.h:95
\n-
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n-
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n+
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n+
VerticalBlockMatrix()
Construct an empty VerticalBlockMatrix.
Definition VerticalBlockMatrix.h:60
\n+
Block full()
Return the full matrix, not including any portions excluded by rowStart(), rowEnd(),...
Definition VerticalBlockMatrix.h:157
\n+
Block range(DenseIndex startBlock, DenseIndex endBlock)
access ranges of blocks at a time
Definition VerticalBlockMatrix.h:130
\n+
const DenseIndex & firstBlock() const
Get the apparent first block for all operations.
Definition VerticalBlockMatrix.h:182
\n+
const Matrix & matrix() const
Access to full matrix (including any portions excluded by rowStart(), rowEnd(), and firstBlock())
Definition VerticalBlockMatrix.h:188
\n+
VerticalBlockMatrix(const CONTAINER &dimensions, DenseIndex height, bool appendOneDimension=false)
Construct from a container of the sizes of each vertical block.
Definition VerticalBlockMatrix.h:69
\n+
DenseIndex rowEnd_
Changes apparent matrix view, see main class comment.
Definition VerticalBlockMatrix.h:54
\n+
const DenseIndex & rowEnd() const
Get the apparent last row (exclusive, i.e.
Definition VerticalBlockMatrix.h:176
\n+
DenseIndex rows() const
Row size.
Definition VerticalBlockMatrix.h:115
\n+
Block operator()(DenseIndex block)
Access a single block in the underlying matrix with read/write access.
Definition VerticalBlockMatrix.h:124
\n+
DenseIndex & firstBlock()
Get or set the apparent first block for all operations.
Definition VerticalBlockMatrix.h:185
\n+
DenseIndex cols() const
Column size.
Definition VerticalBlockMatrix.h:118
\n+
VerticalBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, DenseIndex height, bool appendOneDimension=false)
Construct from iterator over the sizes of each vertical block.
Definition VerticalBlockMatrix.h:93
\n+
const constBlock operator()(DenseIndex block) const
Access a const block view.
Definition VerticalBlockMatrix.h:127
\n+
const DenseIndex & rowStart() const
Get the apparent first row of the underlying matrix for all operations.
Definition VerticalBlockMatrix.h:170
\n+
Matrix matrix_
The full matrix.
Definition VerticalBlockMatrix.h:50
\n+
DenseIndex nBlocks() const
Block count.
Definition VerticalBlockMatrix.h:121
\n+
const constBlock full() const
Return the full matrix, not including any portions excluded by rowStart(), rowEnd(),...
Definition VerticalBlockMatrix.h:160
\n+
DenseIndex & rowStart()
Get or set the apparent first row of the underlying matrix for all operations.
Definition VerticalBlockMatrix.h:173
\n+
Matrix & matrix()
Non-const access to full matrix (including any portions excluded by rowStart(), rowEnd(),...
Definition VerticalBlockMatrix.h:191
\n+
DenseIndex & rowEnd()
Get or set the apparent last row (exclusive, i.e.
Definition VerticalBlockMatrix.h:179
\n+
DenseIndex rowStart_
Changes apparent matrix view, see main class comment.
Definition VerticalBlockMatrix.h:53
\n+
VerticalBlockMatrix(const CONTAINER &dimensions, const Eigen::MatrixBase< DERIVED > &matrix, bool appendOneDimension=false)
Construct from a container of the sizes of each vertical block and a pre-prepared matrix.
Definition VerticalBlockMatrix.h:80
\n+
DenseIndex blockStart_
Changes apparent matrix view, see main class comment.
Definition VerticalBlockMatrix.h:55
\n+
FastVector< DenseIndex > variableColOffsets_
the starting columns of each block (0-based)
Definition VerticalBlockMatrix.h:51
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,206 +1,346 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Manifold.h\n+VerticalBlockMatrix.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n 25\n-26#include \n-27#include \n-28#include \n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-_\b3_\b3struct _\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg {};\n-34\n-53template struct _\bt_\br_\ba_\bi_\bt_\bs;\n-54\n-55namespace internal {\n+26 // Forward declarations\n+27 class SymmetricBlockMatrix;\n+28\n+_\b4_\b2 class GTSAM_EXPORT _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+43 {\n+44 public:\n+45 typedef _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bT_\bh_\bi_\bs;\n+46 typedef Eigen::Block Block;\n+47 typedef Eigen::Block constBlock;\n+48\n+49 protected:\n+_\b5_\b0 Matrix _\bm_\ba_\bt_\br_\bi_\bx_\b_;\n+_\b5_\b1 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx_\b> _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bC_\bo_\bl_\bO_\bf_\bf_\bs_\be_\bt_\bs_\b_;\n+52\n+_\b5_\b3 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\br_\bo_\bw_\bS_\bt_\ba_\br_\bt_\b_;\n+_\b5_\b4 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\br_\bo_\bw_\bE_\bn_\bd_\b_;\n+_\b5_\b5 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt_\b_;\n 56\n-58template\n-_\b5_\b9struct _\bH_\ba_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\br_\be_\bq_\bs {\n-60\n-61 enum { dim = Class::dimension };\n-62\n-63 Class p, q;\n-64 Eigen::Matrix v;\n-65 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\b,_\b _\bd_\bi_\bm_\b> Hp, Hq, Hv;\n+57 public:\n+58\n+_\b6_\b0 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx() :\n+61 rowStart_(0), rowEnd_(0), blockStart_(0)\n+62 {\n+63 variableColOffsets_.push_back(0);\n+64 assertInvariants();\n+65 }\n 66\n-67 BOOST_CONCEPT_USAGE(_\bH_\ba_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\br_\be_\bq_\bs) {\n-68 v = p.localCoordinates(q);\n-69 q = p.retract(v);\n-70 }\n-71};\n-72\n-74template\n-_\b7_\b5struct _\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl {\n-76 // Compile-time dimensionality\n-77 static int GetDimension(const Class&) {\n-78 return N;\n-79 }\n-80};\n-81\n-83template\n-_\b8_\b4struct _\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl {\n-85 // Run-time dimensionality\n-86 static int GetDimension(const Class& m) {\n-87 return m.dim();\n-88 }\n-89};\n+68 template\n+_\b6_\b9 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(const CONTAINER& dimensions, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx height,\n+70 bool appendOneDimension = false) :\n+71 variableColOffsets_(dimensions.size() + (appendOneDimension ? 2 : 1)),\n+72 rowStart_(0), rowEnd_(height), blockStart_(0) {\n+73 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);\n+74 matrix_.resize(height, variableColOffsets_.back());\n+75 assertInvariants();\n+76 }\n+77\n+79 template\n+_\b8_\b0 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(const CONTAINER& dimensions,\n+81 const Eigen::MatrixBase& matrix, bool appendOneDimension = false) :\n+82 matrix_(matrix), variableColOffsets_(dimensions.size() + (appendOneDimension\n+? 2 : 1)),\n+83 rowStart_(0), rowEnd_(matrix.rows()), blockStart_(0) {\n+84 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);\n+85 if (variableColOffsets_.back() != matrix_.cols())\n+86 throw std::invalid_argument(\n+87 \"Requested to create a VerticalBlockMatrix with dimensions that do not sum\n+to the total columns of the provided matrix.\");\n+88 assertInvariants();\n+89 }\n 90\n-94template\n-_\b9_\b5struct _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs: _\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl {\n-96\n-97 // Check that Class has the necessary machinery\n-98 BOOST_CONCEPT_ASSERT((_\bH_\ba_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\br_\be_\bq_\bs_\b<_\bC_\bl_\ba_\bs_\bs_\b>));\n-99\n-100 // Dimension of the manifold\n-101 enum { dimension = Class::dimension };\n-102\n-103 // Typedefs required by all manifold types.\n-104 typedef Class ManifoldType;\n-105 typedef _\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n-106 typedef Eigen::Matrix TangentVector;\n-107\n-108 // Local coordinates\n-109 static TangentVector Local(const Class& origin, const Class& other) {\n-110 return origin.localCoordinates(other);\n-111 }\n-112\n-113 // Retraction back to manifold\n-114 static Class Retract(const Class& origin, const TangentVector& v) {\n-115 return origin.retract(v);\n-116 }\n-117};\n-118\n-_\b1_\b2_\b0template struct _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd: _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs,\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-121\n-122} // \\ namespace internal\n-123\n-125template\n-_\b1_\b2_\b6_\bB_\bO_\bO_\bS_\bT_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bR_\bE_\bQ_\bU_\bI_\bR_\bE_\bS(((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bT_\b>)),(bool)) //\n-127check_manifold_invariants(const T& a, const T& b, double tol=1e-9) {\n-128 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br v0 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(a,a);\n-129 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br v = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(a,b);\n-130 T c = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(a,v);\n-131 return v0.norm() < tol && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(b,c,tol);\n-132}\n-133\n-135template\n-136class IsManifold {\n-137\n-138public:\n-139\n-140 typedef typename traits::structure_category structure_category_tag;\n-141 static const int dim = traits::dimension;\n-142 typedef typename traits::ManifoldType ManifoldType;\n-143 typedef typename traits::TangentVector TangentVector;\n-144\n-145 BOOST_CONCEPT_USAGE(IsManifold) {\n-146 BOOST_STATIC_ASSERT_MSG(\n-147 (boost::is_base_of::value),\n-148 \"This type's structure_category trait does not assert it as a manifold (or\n-derived)\");\n-149 BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim);\n-150\n-151 // make sure Chart methods are defined\n-152 v = traits::Local(p, q);\n-153 q = traits::Retract(p, v);\n+92 template\n+_\b9_\b3 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(ITERATOR firstBlockDim, ITERATOR lastBlockDim,\n+94 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx height, bool appendOneDimension = false) :\n+95 variableColOffsets_((lastBlockDim-firstBlockDim) + (appendOneDimension ? 2 :\n+1)),\n+96 rowStart_(0), rowEnd_(height), blockStart_(0) {\n+97 fillOffsets(firstBlockDim, lastBlockDim, appendOneDimension);\n+98 matrix_.resize(height, variableColOffsets_.back());\n+99 assertInvariants();\n+100 }\n+101\n+107 static _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx LikeActiveViewOf(const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n+rhs);\n+108\n+112 static _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx LikeActiveViewOf(const _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n+rhs, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx height);\n+113\n+_\b1_\b1_\b5 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\br_\bo_\bw_\bs() const { assertInvariants(); return rowEnd_ - rowStart_; }\n+116\n+_\b1_\b1_\b8 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bc_\bo_\bl_\bs() const { assertInvariants(); return\n+variableColOffsets_.back() - variableColOffsets_[blockStart_]; }\n+119\n+_\b1_\b2_\b1 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bn_\bB_\bl_\bo_\bc_\bk_\bs() const { assertInvariants(); return\n+variableColOffsets_.size() - 1 - blockStart_; }\n+122\n+_\b1_\b2_\b4 Block _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx block) { return range(block, block+1); }\n+125\n+_\b1_\b2_\b7 const constBlock _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx block) const { return range(block,\n+block+1); }\n+128\n+_\b1_\b3_\b0 Block _\br_\ba_\bn_\bg_\be(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx startBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx endBlock) {\n+131 assertInvariants();\n+132 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actualStartBlock = startBlock + blockStart_;\n+133 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actualEndBlock = endBlock + blockStart_;\n+134 if(startBlock != 0 || endBlock != 0) {\n+135 checkBlock(actualStartBlock);\n+136 assert(actualEndBlock < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)variableColOffsets_.size());\n+137 }\n+138 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx startCol = variableColOffsets_[actualStartBlock];\n+139 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx rangeCols = variableColOffsets_[actualEndBlock] -\n+startCol;\n+140 return matrix_.block(rowStart_, startCol, this->rows(), rangeCols);\n+141 }\n+142\n+143 const constBlock range(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx startBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx endBlock) const {\n+144 assertInvariants();\n+145 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actualStartBlock = startBlock + blockStart_;\n+146 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actualEndBlock = endBlock + blockStart_;\n+147 if(startBlock != 0 || endBlock != 0) {\n+148 checkBlock(actualStartBlock);\n+149 assert(actualEndBlock < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)variableColOffsets_.size());\n+150 }\n+151 const DenseIndex startCol = variableColOffsets_[actualStartBlock];\n+152 const DenseIndex rangeCols = variableColOffsets_[actualEndBlock] -\n+startCol;\n+153 return ((const Matrix&)matrix_).block(rowStart_, startCol, this->rows(),\n+rangeCols);\n 154 }\n 155\n-156private:\n-157\n-158 TangentVector v;\n-159 ManifoldType p, q;\n-160};\n+_\b1_\b5_\b7 Block _\bf_\bu_\bl_\bl() { return range(0, nBlocks()); }\n+158\n+_\b1_\b6_\b0 const constBlock _\bf_\bu_\bl_\bl() const { return range(0, nBlocks()); }\n 161\n-163template\n-_\b1_\b6_\b4struct _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn {\n-165 typedef const int value_type;\n-166 static const int value = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-167 BOOST_STATIC_ASSERT_MSG(value != Eigen::Dynamic,\n-168 \"FixedDimension instantiated for dymanically-sized type.\");\n-169};\n-170} // \\ namespace gtsam\n+162 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx offset(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx block) const {\n+163 assertInvariants();\n+164 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actualBlock = block + blockStart_;\n+165 checkBlock(actualBlock);\n+166 return variableColOffsets_[actualBlock];\n+167 }\n+168\n+_\b1_\b7_\b0 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\br_\bo_\bw_\bS_\bt_\ba_\br_\bt() const { return rowStart_; }\n 171\n-173// * Macros for using the ManifoldConcept\n-174// * - An instantiation for use inside unit tests\n-175// * - A typedef for use inside generic algorithms\n-176// *\n-177// * NOTE: intentionally not in the gtsam namespace to allow for classes not\n-in\n-178// * the gtsam namespace to be more easily enforced as testable\n-179// */\n-_\b1_\b8_\b0#define GTSAM_CONCEPT_MANIFOLD_INST(T) template class gtsam::IsManifold;\n-181#define GTSAM_CONCEPT_MANIFOLD_TYPE(T) using _gtsam_IsManifold_##T = gtsam::\n-IsManifold;\n+_\b1_\b7_\b3 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\br_\bo_\bw_\bS_\bt_\ba_\br_\bt() { return rowStart_; }\n+174\n+_\b1_\b7_\b6 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\br_\bo_\bw_\bE_\bn_\bd() const { return rowEnd_; }\n+177\n+_\b1_\b7_\b9 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\br_\bo_\bw_\bE_\bn_\bd() { return rowEnd_; }\n+180\n+_\b1_\b8_\b2 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\bf_\bi_\br_\bs_\bt_\bB_\bl_\bo_\bc_\bk() const { return blockStart_; }\n+183\n+_\b1_\b8_\b5 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\bf_\bi_\br_\bs_\bt_\bB_\bl_\bo_\bc_\bk() { return blockStart_; }\n+186\n+_\b1_\b8_\b8 const Matrix& _\bm_\ba_\bt_\br_\bi_\bx() const { return matrix_; }\n+189\n+_\b1_\b9_\b1 Matrix& _\bm_\ba_\bt_\br_\bi_\bx() { return matrix_; }\n+192\n+193 protected:\n+194 void assertInvariants() const {\n+195 assert(matrix_.cols() == variableColOffsets_.back());\n+196 assert(blockStart_ < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)variableColOffsets_.size());\n+197 assert(rowStart_ <= matrix_.rows());\n+198 assert(rowEnd_ <= matrix_.rows());\n+199 assert(rowStart_ <= rowEnd_);\n+200 }\n+201\n+202 void checkBlock(DenseIndex block) const {\n+203 static_cast(block); //Disable unused varibale warnings.\n+204 assert(matrix_.cols() == variableColOffsets_.back());\n+205 assert(block < (DenseIndex)variableColOffsets_.size() - 1);\n+206 assert(variableColOffsets_[block] < matrix_.cols() && variableColOffsets_\n+[block+1] <= matrix_.cols());\n+207 }\n+208\n+209 template\n+210 void fillOffsets(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool\n+appendOneDimension) {\n+211 variableColOffsets_[0] = 0;\n+212 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j=0;\n+213 for(ITERATOR dim=firstBlockDim; dim!=lastBlockDim; ++dim, ++j)\n+214 variableColOffsets_[j+1] = variableColOffsets_[j] + *dim;\n+215 if(appendOneDimension)\n+216 variableColOffsets_[j+1] = variableColOffsets_[j] + 1;\n+217 }\n+218\n+219 friend class SymmetricBlockMatrix;\n+220\n+221 private:\n+_\b2_\b2_\b3 friend class boost::serialization::access;\n+224 template\n+225 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+226 ar & BOOST_SERIALIZATION_NVP(matrix_);\n+227 ar & BOOST_SERIALIZATION_NVP(variableColOffsets_);\n+228 ar & BOOST_SERIALIZATION_NVP(rowStart_);\n+229 ar & BOOST_SERIALIZATION_NVP(rowEnd_);\n+230 ar & BOOST_SERIALIZATION_NVP(blockStart_);\n+231 }\n+232 };\n+233\n+234}\n _\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n typedef and functions to augment Eigen's MatrixXd\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n-Special class for optional Jacobian arguments.\n+_\bM_\ba_\bt_\br_\bi_\bx_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+Serialization for matrices.\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bO_\bO_\bS_\bT_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bR_\bE_\bQ_\bU_\bI_\bR_\bE_\bS\n-BOOST_CONCEPT_REQUIRES(((IsGroup< G >)),(bool)) check_group_invariants(const G\n-&a\n-Check invariants.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg\n-tag to assert a type is a manifold\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bH_\ba_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\br_\be_\bq_\bs\n-Requirements on type to pass it to Manifold template below.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl\n-Extra manifold traits for fixed-dimension types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs\n-A helper that implements the traits interface for GTSAM manifolds.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-Both ManifoldTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-Give fixed size dimension of a type, fails at compile time if dynamic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A testable concept check that should be placed in applicable unit tests and in\n-generic algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of vertical blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+VerticalBlockMatrix()\n+Construct an empty VerticalBlockMatrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bu_\bl_\bl\n+Block full()\n+Return the full matrix, not including any portions excluded by rowStart(),\n+rowEnd(),...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\ba_\bn_\bg_\be\n+Block range(DenseIndex startBlock, DenseIndex endBlock)\n+access ranges of blocks at a time\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bi_\br_\bs_\bt_\bB_\bl_\bo_\bc_\bk\n+const DenseIndex & firstBlock() const\n+Get the apparent first block for all operations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:182\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+const Matrix & matrix() const\n+Access to full matrix (including any portions excluded by rowStart(), rowEnd(),\n+and firstBlock())\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:188\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+VerticalBlockMatrix(const CONTAINER &dimensions, DenseIndex height, bool\n+appendOneDimension=false)\n+Construct from a container of the sizes of each vertical block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bE_\bn_\bd_\b_\n+DenseIndex rowEnd_\n+Changes apparent matrix view, see main class comment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bE_\bn_\bd\n+const DenseIndex & rowEnd() const\n+Get the apparent last row (exclusive, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:176\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n+DenseIndex rows() const\n+Row size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+Block operator()(DenseIndex block)\n+Access a single block in the underlying matrix with read/write access.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:124\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bi_\br_\bs_\bt_\bB_\bl_\bo_\bc_\bk\n+DenseIndex & firstBlock()\n+Get or set the apparent first block for all operations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n+DenseIndex cols() const\n+Column size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+VerticalBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, DenseIndex\n+height, bool appendOneDimension=false)\n+Construct from iterator over the sizes of each vertical block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+const constBlock operator()(DenseIndex block) const\n+Access a const block view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bS_\bt_\ba_\br_\bt\n+const DenseIndex & rowStart() const\n+Get the apparent first row of the underlying matrix for all operations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:170\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\b_\n+Matrix matrix_\n+The full matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bB_\bl_\bo_\bc_\bk_\bs\n+DenseIndex nBlocks() const\n+Block count.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:121\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bu_\bl_\bl\n+const constBlock full() const\n+Return the full matrix, not including any portions excluded by rowStart(),\n+rowEnd(),...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bS_\bt_\ba_\br_\bt\n+DenseIndex & rowStart()\n+Get or set the apparent first row of the underlying matrix for all operations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:173\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+Matrix & matrix()\n+Non-const access to full matrix (including any portions excluded by rowStart(),\n+rowEnd(),...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:191\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bE_\bn_\bd\n+DenseIndex & rowEnd()\n+Get or set the apparent last row (exclusive, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:179\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bS_\bt_\ba_\br_\bt_\b_\n+DenseIndex rowStart_\n+Changes apparent matrix view, see main class comment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+VerticalBlockMatrix(const CONTAINER &dimensions, const Eigen::MatrixBase<\n+DERIVED > &matrix, bool appendOneDimension=false)\n+Construct from a container of the sizes of each vertical block and a pre-\n+prepared matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt_\b_\n+DenseIndex blockStart_\n+Changes apparent matrix view, see main class comment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bC_\bo_\bl_\bO_\bf_\bf_\bs_\be_\bt_\bs_\b_\n+FastVector< DenseIndex > variableColOffsets_\n+the starting columns of each block (0-based)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:51\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+ * _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00005.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00005.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h File Reference\n \n \n \n \n \n \n \n@@ -94,43 +94,138 @@\n \n \n \n \n \n
\n \n-
types.cpp File Reference
\n+
Lie.h File Reference
\n
\n
\n \n-

Functions for handling type information. \n+

Base class and basic functions for Lie types. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::LieGroup< Class, N >
 A CRTP helper class that implements Lie group methods Prerequisites: methods operator*, inverse, and AdjointMap, as well as a ChartAtOrigin struct that will be used to define the manifold Chart To use, simply derive, but also say \"using LieGroup<Class,N>::inverse\" For derivative math, see doc/math.pdf. More...
 
struct  gtsam::lie_group_tag
 tag to assert a type is a Lie group More...
 
struct  gtsam::internal::LieGroupTraits< Class >
 A helper class that implements the traits interface for GTSAM lie groups. More...
 
struct  gtsam::internal::LieGroup< Class >
 Both LieGroupTraits and Testable. More...
 
class  gtsam::IsLieGroup< T >
 Lie Group Concept. More...
 
class  gtsam::TransformCovariance< T >
 Functor for transforming covariance of T. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+

\n+Macros

#define GTSAM_CONCEPT_LIE_INST(T)   template class gtsam::IsLieGroup<T>;
 Macros for using the LieConcept.
 
\n+#define GTSAM_CONCEPT_LIE_TYPE(T)   using _gtsam_IsLieGroup_##T = gtsam::IsLieGroup<T>;
 
\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 Functions

std::string gtsam::demangle (const char *name)
 Pretty print Value type name.
 
template<class Class >
Class gtsam::between_default (const Class &l1, const Class &l2)
 These core global functions can be specialized by new Lie types for better performance.
 
template<class Class >
Vector gtsam::logmap_default (const Class &l0, const Class &lp)
 Log map centered at l0, s.t.
 
template<class Class >
Class gtsam::expmap_default (const Class &t, const Vector &d)
 Exponential map centered at l0, s.t.
 
template<class T >
gtsam::BCH (const T &X, const T &Y)
 Three term approximation of the Baker-Campbell-Hausdorff formula In non-commutative Lie groups, when composing exp(Z) = exp(X)exp(Y) it is not true that Z = X+Y.
 
\n+template<class T >
Matrix gtsam::wedge (const Vector &x)
 Declaration of wedge (see Murray94book) used to convert from n exponential coordinates to n*n element of the Lie algebra.
 
template<class T >
gtsam::expm (const Vector &x, int K=7)
 Exponential map given exponential coordinates class T needs a wedge<> function and a constructor from Matrix.
 
template<typename T >
gtsam::interpolate (const T &X, const T &Y, double t, typename MakeOptionalJacobian< T, T >::type Hx=boost::none, typename MakeOptionalJacobian< T, T >::type Hy=boost::none)
 Linear interpolation between X and Y by coefficient t.
 
\n

Detailed Description

\n-

Functions for handling type information.

\n-
Author
Varun Agrawal
\n-
Date
May 18, 2020
\n-
\n+

Base class and basic functions for Lie types.

\n+
Author
Richard Roberts
\n+
\n+Alex Cunningham
\n+
\n+Frank Dellaert
\n+
\n+Mike Bosse
\n+
\n+Duy Nguyen Ta
\n+
\n+Yotam Stern
\n+

Macro Definition Documentation

\n+\n+

◆ GTSAM_CONCEPT_LIE_INST

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
#define GTSAM_CONCEPT_LIE_INST( T)   template class gtsam::IsLieGroup<T>;
\n+
\n+\n+

Macros for using the LieConcept.

\n+
    \n+
  • An instantiation for use inside unit tests
  • \n+
  • A typedef for use inside generic algorithms
  • \n+
\n+

NOTE: intentionally not in the gtsam namespace to allow for classes not in the gtsam namespace to be more easily enforced as testable

\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,101 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-types.cpp File Reference\n-_\bB_\ba_\bs_\be\n-Functions for handling type information. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Lie.h File Reference\n+Base class and basic functions for Lie types. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b,_\b _\bN_\b _\b>\n+ A CRTP helper class that implements Lie group methods Prerequisites:\n+ methods operator*, inverse, and AdjointMap, as well as a ChartAtOrigin\n+\u00a0 struct that will be used to define the manifold Chart To use, simply\n+ derive, but also say \"using LieGroup::inverse\" For derivative\n+ math, see doc/math.pdf. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+\u00a0 tag to assert a type is a Lie group _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b _\b>\n+\u00a0 A helper class that implements the traits interface for GTSAM lie\n+ groups. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b _\b>\n+\u00a0 Both _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs and _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bT_\b _\b>\n+\u00a0 Lie Group Concept. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b<_\b _\bT_\b _\b>\n+\u00a0 Functor for transforming covariance of T. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bL_\bI_\bE_\b__\bI_\bN_\bS_\bT(T)\u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp;\n+\u00a0 Macros for using the LieConcept.\n+\u00a0\n+#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_L\bLI\bIE\bE_\b_T\bTY\bYP\bPE\bE(T)\u00a0\u00a0\u00a0using _gtsam_IsLieGroup_##T = _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n+ _\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp;\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::string\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bm_\ba_\bn_\bg_\bl_\be (const char *name)\n-\u00a0 Pretty print _\bV_\ba_\bl_\bu_\be type name.\n+template\n+ Class\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\be_\bt_\bw_\be_\be_\bn_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt (const Class &l1, const Class &l2)\n+\u00a0 These core global functions can be specialized by new Lie types for\n+ better performance.\n+\u00a0\n+template\n+Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\bg_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt (const Class &l0, const Class &lp)\n+\u00a0 Log map centered at l0, s.t.\n+\u00a0\n+template\n+ Class\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt (const Class &t, const Vector &d)\n+\u00a0 Exponential map centered at l0, s.t.\n+\u00a0\n+template\n+ T\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bC_\bH (const T &X, const T &Y)\n+ Three term approximation of the Baker-Campbell-Hausdorff formula In\n+\u00a0 non-commutative Lie groups, when composing exp(Z) = exp(X)exp(Y) it is\n+ not true that Z = X+Y.\n+\u00a0\n+template\n+Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:w\bwe\bed\bdg\bge\be (const Vector &x)\n+\u00a0 Declaration of wedge (see Murray94book) used to convert from n\n+ exponential coordinates to n*n element of the Lie algebra.\n+\u00a0\n+template\n+ T\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm (const Vector &x, int K=7)\n+\u00a0 Exponential map given exponential coordinates class T needs a wedge<>\n+ function and a constructor from Matrix.\n+\u00a0\n+template\n+ T\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const T &X, const T &Y, double t, typename\n+ _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< T, T >::type Hx=boost::none, typename\n+ _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< T, T >::type Hy=boost::none)\n+\u00a0 Linear interpolation between X and Y by coefficient t.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Functions for handling type information.\n+Base class and basic functions for Lie types.\n Author\n- Varun Agrawal\n- Date\n- May 18, 2020\n+ Richard Roberts\n+ Alex Cunningham\n+ Frank Dellaert\n+ Mike Bosse\n+ Duy Nguyen Ta\n+ Yotam Stern\n+*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_L\bLI\bIE\bE_\b_I\bIN\bNS\bST\bT *\b**\b**\b**\b**\b*\n+#define GTSAM_CONCEPT_LIE_INST ( \u00a0 T ) \u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp;\n+Macros for using the LieConcept.\n+ * An instantiation for use inside unit tests\n+ * A typedef for use inside generic algorithms\n+NOTE: intentionally not in the gtsam namespace to allow for classes not in the\n+gtsam namespace to be more easily enforced as testable\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bt_\by_\bp_\be_\bs_\b._\bc_\bp_\bp\n+ * _\bL_\bi_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00005.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00005.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,16 @@\n var a00005 = [\n- [\"demangle\", \"a00005.html#a0b97fc96e5f69236e81489c66d5b92ba\", null]\n+ [\"gtsam::LieGroup< Class, N >\", \"a02364.html\", \"a02364\"],\n+ [\"gtsam::lie_group_tag\", \"a02368.html\", null],\n+ [\"gtsam::internal::LieGroupTraits< Class >\", \"a02372.html\", null],\n+ [\"gtsam::internal::LieGroup< Class >\", \"a02376.html\", null],\n+ [\"gtsam::IsLieGroup< T >\", \"a02380.html\", null],\n+ [\"gtsam::TransformCovariance< T >\", \"a02384.html\", null],\n+ [\"GTSAM_CONCEPT_LIE_INST\", \"a00005.html#aeef5af7d583d275fbc0e6e5af8bf2afc\", null],\n+ [\"BCH\", \"a00005.html#adbd55c711e6ceee791b595558eb3ec8a\", null],\n+ [\"between_default\", \"a00005.html#abd92914d0822d42584d46f31fb500048\", null],\n+ [\"expm\", \"a00005.html#a3041816208c79ef76d3ef2e0991d90b2\", null],\n+ [\"expmap_default\", \"a00005.html#af5a7c0a7422c38a0baa131c073e233ac\", null],\n+ [\"interpolate\", \"a00005.html#adaf06b04fa93b050e99bc3d571d85d53\", null],\n+ [\"logmap_default\", \"a00005.html#a5c6ccec4a3ea452361c0956766bccef5\", null],\n+ [\"wedge\", \"a00005.html#afe28b7f8e3592fb9f5cf9ebae09497ba\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00008.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00008.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/debug.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/cholesky.h File Reference\n \n \n \n \n \n \n \n@@ -95,60 +95,47 @@\n \n \n \n \n
\n \n-
debug.h File Reference
\n+
cholesky.h File Reference
\n
\n
\n \n-

Global debugging flags. \n+

Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky. \n More...

\n \n

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-

\n-Macros

\n-#define ISDEBUG(S)   (gtsam::guardedIsDebug(S))
 
\n-#define SETDEBUG(S, V)   ((void)(gtsam::guardedSetDebug(S,V)))
 
\n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n

\n Functions

\n-bool gtsam::guardedIsDebug (const std::string &s)
 
\n-void gtsam::guardedSetDebug (const std::string &s, const bool v)
 
\n-bool gtsam::isDebugVersion ()
 
pair< size_t, bool > gtsam::choleskyCareful (Matrix &ATA, int order=-1)
 \"Careful\" Cholesky computes the positive square-root of a positive symmetric semi-definite matrix (i.e.
 
bool gtsam::choleskyPartial (Matrix &ABC, size_t nFrontal, size_t topleft=0)
 Partial Cholesky computes a factor [R S such that [R' 0 [R S = [A B 0 L] S' I] 0 L] B' C].
 
\n

Detailed Description

\n-

Global debugging flags.

\n+

Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.

\n
Author
Richard Roberts
\n-
Date
Feb 1, 2011
\n+
Date
Nov 5, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-debug.h File Reference\n-Global debugging flags. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+cholesky.h File Reference\n+Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n+Cholesky. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 I\bIS\bSD\bDE\bEB\bBU\bUG\bG(S)\u00a0\u00a0\u00a0(gtsam::guardedIsDebug(S))\n-\u00a0\n-#define\u00a0 S\bSE\bET\bTD\bDE\bEB\bBU\bUG\bG(S, V)\u00a0\u00a0\u00a0((void)(gtsam::guardedSetDebug(S,V)))\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgu\bua\bar\brd\bde\bed\bdI\bIs\bsD\bDe\beb\bbu\bug\bg (const std::string &s)\n-\u00a0\n-void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgu\bua\bar\brd\bde\bed\bdS\bSe\bet\btD\bDe\beb\bbu\bug\bg (const std::string &s, const bool v)\n-\u00a0\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bis\bsD\bDe\beb\bbu\bug\bgV\bVe\ber\brs\bsi\bio\bon\bn ()\n+pair< size_t, bool >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bC_\ba_\br_\be_\bf_\bu_\bl (Matrix &ATA, int order=-1)\n+\u00a0 \"Careful\" Cholesky computes the positive square-root of a\n+ positive symmetric semi-definite matrix (i.e.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl (Matrix &ABC, size_t nFrontal,\n+ size_t topleft=0)\n+\u00a0 Partial Cholesky computes a factor [R S such that [R' 0\n+ [R S = [A B 0 L] S' I] 0 L] B' C].\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Global debugging flags.\n+Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n+Cholesky.\n Author\n Richard Roberts\n Date\n- Feb 1, 2011\n+ Nov 5, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bd_\be_\bb_\bu_\bg_\b._\bh\n+ * _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00008_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00008_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/debug.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/cholesky.h Source File\n \n \n \n \n \n \n \n@@ -98,86 +98,48 @@\n
No Matches
\n \n \n \n \n \n
\n-
debug.h
\n+
cholesky.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#include <gtsam/base/FastMap.h>
\n-\n-
21#include <string>
\n-
22
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Matrix.h>
\n+
21
\n+
22namespace gtsam {
\n
23
\n-
24// This file defines granular debugging flags that may be switched on and off
\n-
25// at run time. Typical usage is 'if(ISDEBUG("myFunction"))' to check if the
\n-
26// 'myFunction' flag is enabled, and SETDEBUG("myFunction", true) to enable
\n-
27// this flag, or SETDEBUG("myFunction", false) to disable it.
\n-
28//
\n-
29// Debug flags are created automatically as they are accessed, so they can be
\n-
30// used immediately without explicitly creating them. Each flag defaults to
\n-
31// 'false', i.e. disabled.
\n-
32//
\n-
33// For these macro to have any effect, granular debugging must be enabled by
\n-
34// defining GTSAM_ENABLE_DEBUG. If NDEBUG is not defined, then
\n-
35// GTSAM_ENABLE_DEBUG will be automatically defined and thus granular
\n-
36// debugging enabled.
\n-
37
\n-
38#ifndef NDEBUG
\n-
39#ifndef GTSAM_ENABLE_DEBUG
\n-
40#define GTSAM_ENABLE_DEBUG
\n-
41#endif
\n-
42#endif
\n-
43
\n-
44namespace gtsam {
\n-
45 GTSAM_EXTERN_EXPORT FastMap<std::string, ValueWithDefault<bool,false> > debugFlags;
\n-
46
\n-
47 // Non-guarded use led to crashes, and solved in commit cd35db2
\n-
48 bool GTSAM_EXPORT guardedIsDebug(const std::string& s);
\n-
49 void GTSAM_EXPORT guardedSetDebug(const std::string& s, const bool v);
\n-
50
\n-
51 // function to check if compiled version has debug information
\n-
52 bool GTSAM_EXPORT isDebugVersion();
\n-
53}
\n-
54
\n-
55#undef ISDEBUG
\n-
56#undef SETDEBUG
\n-
57
\n-
58#ifdef GTSAM_ENABLE_DEBUG
\n-
59
\n-
60#define ISDEBUG(S) (gtsam::guardedIsDebug(S))
\n-
61#define SETDEBUG(S,V) ((void)(gtsam::guardedSetDebug(S,V)))
\n-
62
\n-
63#else
\n-
64
\n-
65#define ISDEBUG(S) (false)
\n-
66#define SETDEBUG(S,V) ((void)false)
\n-
67
\n-
68#endif
\n-
69
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n-
Included from all GTSAM files.
\n+
47GTSAM_EXPORT std::pair<size_t,bool> choleskyCareful(Matrix& ATA, int order = -1);
\n+
48
\n+
62GTSAM_EXPORT bool choleskyPartial(Matrix& ABC, size_t nFrontal, size_t topleft=0);
\n+
63
\n+
64}
\n+
65
\n+
typedef and functions to augment Eigen's MatrixXd
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
pair< size_t, bool > choleskyCareful(Matrix &ATA, int order)
"Careful" Cholesky computes the positive square-root of a positive symmetric semi-definite matrix (i....
Definition cholesky.cpp:76
\n+
bool choleskyPartial(Matrix &ABC, size_t nFrontal, size_t topleft)
Partial Cholesky computes a factor [R S such that [R' 0 [R S = [A B 0 L] S' I] 0 L] B' C].
Definition cholesky.cpp:108
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,83 +1,53 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-debug.h\n+cholesky.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-21#include \n-22\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+21\n+22namespace _\bg_\bt_\bs_\ba_\bm {\n 23\n-24// This file defines granular debugging flags that may be switched on and off\n-25// at run time. Typical usage is 'if(ISDEBUG(\"myFunction\"))' to check if the\n-26// 'myFunction' flag is enabled, and SETDEBUG(\"myFunction\", true) to enable\n-27// this flag, or SETDEBUG(\"myFunction\", false) to disable it.\n-28//\n-29// Debug flags are created automatically as they are accessed, so they can be\n-30// used immediately without explicitly creating them. Each flag defaults to\n-31// 'false', i.e. disabled.\n-32//\n-33// For these macro to have any effect, granular debugging must be enabled by\n-34// defining GTSAM_ENABLE_DEBUG. If NDEBUG is not defined, then\n-35// GTSAM_ENABLE_DEBUG will be automatically defined and thus granular\n-36// debugging enabled.\n-37\n-38#ifndef NDEBUG\n-39#ifndef GTSAM_ENABLE_DEBUG\n-40#define GTSAM_ENABLE_DEBUG\n-41#endif\n-42#endif\n-43\n-44namespace _\bg_\bt_\bs_\ba_\bm {\n-45 GTSAM_EXTERN_EXPORT FastMap >\n-debugFlags;\n-46\n-47 // Non-guarded use led to crashes, and solved in commit cd35db2\n-48 bool GTSAM_EXPORT guardedIsDebug(const std::string& s);\n-49 void GTSAM_EXPORT guardedSetDebug(const std::string& s, const bool v);\n-50\n-51 // function to check if compiled version has debug information\n-52 bool GTSAM_EXPORT isDebugVersion();\n-53}\n-54\n-55#undef ISDEBUG\n-56#undef SETDEBUG\n-57\n-58#ifdef GTSAM_ENABLE_DEBUG\n-59\n-60#define ISDEBUG(S) (gtsam::guardedIsDebug(S))\n-61#define SETDEBUG(S,V) ((void)(gtsam::guardedSetDebug(S,V)))\n-62\n-63#else\n-64\n-65#define ISDEBUG(S) (false)\n-66#define SETDEBUG(S,V) ((void)false)\n-67\n-68#endif\n-69\n-_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n-A thin wrapper around std::map that uses boost's fast_pool_allocator.\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n+47GTSAM_EXPORT std::pair _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bC_\ba_\br_\be_\bf_\bu_\bl(Matrix& ATA, int order =\n+-1);\n+48\n+62GTSAM_EXPORT bool _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl(Matrix& ABC, size_t nFrontal, size_t\n+topleft=0);\n+63\n+64}\n+65\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bC_\ba_\br_\be_\bf_\bu_\bl\n+pair< size_t, bool > choleskyCareful(Matrix &ATA, int order)\n+\"Careful\" Cholesky computes the positive square-root of a positive symmetric\n+semi-definite matrix (i....\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn cholesky.cpp:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl\n+bool choleskyPartial(Matrix &ABC, size_t nFrontal, size_t topleft)\n+Partial Cholesky computes a factor [R S such that [R' 0 [R S = [A B 0 L] S' I]\n+0 L] B' C].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn cholesky.cpp:108\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bd_\be_\bb_\bu_\bg_\b._\bh\n+ * _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00011.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00011.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/ThreadsafeException.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/lieProxies.h File Reference\n \n \n \n \n \n \n \n@@ -94,57 +94,64 @@\n \n \n \n \n \n
\n \n-
ThreadsafeException.h File Reference
\n+Namespaces |\n+Functions
\n+
lieProxies.h File Reference
\n \n
\n \n-

Base exception type that uses tbb_allocator if GTSAM is compiled with TBB. \n+

Provides convenient mappings of common member functions for testing. \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::ThreadsafeException< DERIVED >
 Base exception type that uses tbb_allocator if GTSAM is compiled with TBB. More...
 
class  gtsam::RuntimeErrorThreadsafe
 Thread-safe runtime error exception. More...
 
class  gtsam::OutOfRangeThreadsafe
 Thread-safe out of range exception. More...
 
class  gtsam::InvalidArgumentThreadsafe
 Thread-safe invalid argument exception. More...
 
class  gtsam::CholeskyFailed
 Indicate Cholesky factorization failure. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+template<class T >
gtsam::testing::between (const T &t1, const T &t2)
 binary functions
 
\n+template<class T >
gtsam::testing::compose (const T &t1, const T &t2)
 
\n+template<class T >
gtsam::testing::inverse (const T &t)
 unary functions
 
\n+template<class T , class P >
gtsam::testing::rotate (const T &r, const P &pt)
 rotation functions
 
\n+template<class T , class P >
gtsam::testing::unrotate (const T &r, const P &pt)
 
\n

Detailed Description

\n-

Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.

\n-
Author
Richard Roberts
\n-
Date
Aug 21, 2010
\n+

Provides convenient mappings of common member functions for testing.

\n+
Author
Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,42 +1,40 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ThreadsafeException.h File Reference\n-_\bB_\ba_\bs_\be\n-Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+lieProxies.h File Reference\n+Provides convenient mappings of common member functions for testing. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>\n-\u00a0 Base exception type that uses tbb_allocator if GTSAM is compiled with\n- TBB. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n-\u00a0 Thread-safe runtime error exception. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n-\u00a0 Thread-safe out of range exception. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n-\u00a0 Thread-safe invalid argument exception. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by_\bF_\ba_\bi_\bl_\be_\bd\n-\u00a0 Indicate Cholesky factorization failure. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+T\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bte\bes\bst\bti\bin\bng\bg:\b::\b:b\bbe\bet\btw\bwe\bee\ben\bn (const T &t1, const T &t2)\n+\u00a0 binary functions\n+\u00a0\n+template\n+T\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bte\bes\bst\bti\bin\bng\bg:\b::\b:c\bco\bom\bmp\bpo\bos\bse\be (const T &t1, const T &t2)\n+\u00a0\n+template\n+T\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bte\bes\bst\bti\bin\bng\bg:\b::\b:i\bin\bnv\bve\ber\brs\bse\be (const T &t)\n+\u00a0 unary functions\n+\u00a0\n+template\n+P\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bte\bes\bst\bti\bin\bng\bg:\b::\b:r\bro\bot\bta\bat\bte\be (const T &r, const P &pt)\n+\u00a0 rotation functions\n+\u00a0\n+template\n+P\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bte\bes\bst\bti\bin\bng\bg:\b::\b:u\bun\bnr\bro\bot\bta\bat\bte\be (const T &r, const P &pt)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n+Provides convenient mappings of common member functions for testing.\n Author\n- Richard Roberts\n- Date\n- Aug 21, 2010\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00011.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00011.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,7 +1,5 @@\n var a00011 = [\n- [\"gtsam::ThreadsafeException< DERIVED >\", \"a02496.html\", \"a02496\"],\n- [\"gtsam::RuntimeErrorThreadsafe\", \"a02500.html\", \"a02500\"],\n- [\"gtsam::OutOfRangeThreadsafe\", \"a02504.html\", \"a02504\"],\n- [\"gtsam::InvalidArgumentThreadsafe\", \"a02508.html\", \"a02508\"],\n- [\"gtsam::CholeskyFailed\", \"a02512.html\", null]\n+ [\"between\", \"a00011.html#a72a7c561cc91f437a22023297fb7f658\", null],\n+ [\"inverse\", \"a00011.html#aaa623dd059a67523b029af6ec20a38da\", null],\n+ [\"rotate\", \"a00011.html#a644bbe6719d8dd756e11e8b3d2fd229a\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00011_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00011_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/ThreadsafeException.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/lieProxies.h Source File\n \n \n \n \n \n \n \n@@ -98,160 +98,63 @@\n
No Matches
\n \n \n \n \n \n
\n-
ThreadsafeException.h
\n+
lieProxies.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n+
18#pragma once
\n+
19
\n+\n
21
\n-
22#include <gtsam/config.h> // for GTSAM_USE_TBB
\n-
23
\n-
24#include <boost/optional/optional.hpp>
\n-
25#include <gtsam/dllexport.h>
\n-
26#include <string>
\n-
27#include <typeinfo>
\n-
28#include <exception>
\n-
29
\n-
30#ifdef GTSAM_USE_TBB
\n-
31#include <tbb/tbb_allocator.h>
\n-
32#include <tbb/scalable_allocator.h>
\n-
33#include <iostream>
\n-
34#endif
\n-
35
\n-
36namespace gtsam {
\n+
31namespace gtsam {
\n+
32namespace testing {
\n+
33
\n+
35 template<class T>
\n+
36 T between(const T& t1, const T& t2) { return t1.between(t2); }
\n
37
\n-
39template<class DERIVED>
\n-
\n-\n-
41public std::exception
\n-
42{
\n-
43private:
\n-
44 typedef std::exception Base;
\n-
45#ifdef GTSAM_USE_TBB
\n-
46protected:
\n-
47 typedef std::basic_string<char, std::char_traits<char>,
\n-
48 tbb::tbb_allocator<char> > String;
\n-
49#else
\n-
50protected:
\n-
51 typedef std::string String;
\n-
52#endif
\n-
53
\n-
54protected:
\n-
55 bool dynamic_;
\n-
56 mutable boost::optional<String> description_;
\n-
57
\n-
\n-\n-
60 dynamic_(false) {
\n-
61 }
\n-
\n-
62
\n-
\n-\n-
65 Base(other), dynamic_(false) {
\n-
66 }
\n-
\n-
67
\n-
\n-
69 ThreadsafeException(const std::string& description) :
\n-
70 dynamic_(false), description_(
\n-
71 String(description.begin(), description.end())) {
\n-
72 }
\n-
\n-
73
\n-
\n-
75 ~ThreadsafeException() noexcept override {
\n-
76 }
\n-
\n-
77
\n-
78public:
\n-
79 const char* what() const noexcept override {
\n-
80 return description_ ? description_->c_str() : "";
\n-
81 }
\n-
82};
\n-
\n-
83
\n-
\n-
85class GTSAM_EXPORT RuntimeErrorThreadsafe: public ThreadsafeException<RuntimeErrorThreadsafe> {
\n-
86public:
\n-
\n-
88 RuntimeErrorThreadsafe(const std::string& description) :
\n-\n-
90 }
\n-
\n-
91};
\n-
\n-
92
\n-
\n-
94class OutOfRangeThreadsafe: public ThreadsafeException<OutOfRangeThreadsafe> {
\n-
95public:
\n-
\n-
97 OutOfRangeThreadsafe(const std::string& description) :
\n-\n-
99 }
\n-
\n-
100};
\n-
\n-
101
\n-
\n-\n-
104 InvalidArgumentThreadsafe> {
\n-
105public:
\n-
\n-
107 InvalidArgumentThreadsafe(const std::string& description) :
\n-\n-
109 }
\n-
\n-
110};
\n-
\n-
111
\n-
\n-
113class CholeskyFailed : public gtsam::ThreadsafeException<CholeskyFailed>
\n-
114{
\n-
115public:
\n-
116 CholeskyFailed() noexcept {}
\n-
117 ~CholeskyFailed() noexcept override {}
\n-
118};
\n-
\n-
119
\n-
120} // namespace gtsam
\n+
38 template<class T>
\n+
39 T compose(const T& t1, const T& t2) { return t1.compose(t2); }
\n+
40
\n+
42 template<class T>
\n+
43 T inverse(const T& t) { return t.inverse(); }
\n+
44
\n+
46 template<class T, class P>
\n+
47 P rotate(const T& r, const P& pt) { return r.rotate(pt); }
\n+
48
\n+
49 template<class T, class P>
\n+
50 P unrotate(const T& r, const P& pt) { return r.unrotate(pt); }
\n+
51
\n+
52} // \\namespace testing
\n+
53} // \\namespace gtsam
\n+
54
\n+
55
\n+
P rotate(const T &r, const P &pt)
rotation functions
Definition lieProxies.h:47
\n+
T between(const T &t1, const T &t2)
binary functions
Definition lieProxies.h:36
\n+
T inverse(const T &t)
unary functions
Definition lieProxies.h:43
\n+
Included from all GTSAM files.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
Definition ThreadsafeException.h:42
\n-
~ThreadsafeException() noexcept override
Default destructor doesn't have the noexcept.
Definition ThreadsafeException.h:75
\n-
bool dynamic_
Whether this object was moved.
Definition ThreadsafeException.h:55
\n-
ThreadsafeException()
Default constructor is protected - may only be created from derived classes.
Definition ThreadsafeException.h:59
\n-
ThreadsafeException(const ThreadsafeException &other)
Copy constructor is protected - may only be created from derived classes.
Definition ThreadsafeException.h:64
\n-
ThreadsafeException(const std::string &description)
Construct with description string.
Definition ThreadsafeException.h:69
\n-
boost::optional< String > description_
Optional description.
Definition ThreadsafeException.h:56
\n-
Thread-safe runtime error exception.
Definition ThreadsafeException.h:85
\n-
RuntimeErrorThreadsafe(const std::string &description)
Construct with a string describing the exception.
Definition ThreadsafeException.h:88
\n-
Thread-safe out of range exception.
Definition ThreadsafeException.h:94
\n-
OutOfRangeThreadsafe(const std::string &description)
Construct with a string describing the exception.
Definition ThreadsafeException.h:97
\n-
Thread-safe invalid argument exception.
Definition ThreadsafeException.h:104
\n-
InvalidArgumentThreadsafe(const std::string &description)
Construct with a string describing the exception.
Definition ThreadsafeException.h:107
\n-
Indicate Cholesky factorization failure.
Definition ThreadsafeException.h:114
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,169 +1,67 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ThreadsafeException.h\n+lieProxies.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n 21\n-22#include // for GTSAM_USE_TBB\n-23\n-24#include \n-25#include \n-26#include \n-27#include \n-28#include \n-29\n-30#ifdef GTSAM_USE_TBB\n-31#include \n-32#include \n-33#include \n-34#endif\n-35\n-36namespace _\bg_\bt_\bs_\ba_\bm {\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32namespace testing {\n+33\n+35 template\n+_\b3_\b6 T _\bb_\be_\bt_\bw_\be_\be_\bn(const T& t1, const T& t2) { return t1.between(t2); }\n 37\n-39template\n-_\b4_\b0class _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn:\n-41public std::exception\n-42{\n-43private:\n-44 typedef std::exception Base;\n-45#ifdef GTSAM_USE_TBB\n-46protected:\n-47 typedef std::basic_string,\n-48 tbb::tbb_allocator > String;\n-49#else\n-50protected:\n-51 typedef std::string String;\n-52#endif\n-53\n-54protected:\n-_\b5_\b5 bool _\bd_\by_\bn_\ba_\bm_\bi_\bc_\b_;\n-_\b5_\b6 mutable boost::optional _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\b_;\n-57\n-_\b5_\b9 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() :\n-60 _\bd_\by_\bn_\ba_\bm_\bi_\bc_\b_(false) {\n-61 }\n-62\n-_\b6_\b4 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(const _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn& other) :\n-65 Base(other), _\bd_\by_\bn_\ba_\bm_\bi_\bc_\b_(false) {\n-66 }\n-67\n-_\b6_\b9 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(const std::string& description) :\n-70 _\bd_\by_\bn_\ba_\bm_\bi_\bc_\b_(false), _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\b_(\n-71 String(description.begin(), description.end())) {\n-72 }\n-73\n-_\b7_\b5 _\b~_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() noexcept override {\n-76 }\n-77\n-78public:\n-79 const char* what() const noexcept override {\n-80 return _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\b_ ? _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\b_->c_str() : \"\";\n-81 }\n-82};\n-83\n-_\b8_\b5class GTSAM_EXPORT _\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be: public\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn {\n-86public:\n-_\b8_\b8 _\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be(const std::string& description) :\n-89 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<_\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be>(description) {\n-90 }\n-91};\n-92\n-_\b9_\b4class _\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be: public _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-{\n-95public:\n-_\b9_\b7 _\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be(const std::string& description) :\n-98 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be>(description) {\n-99 }\n-100};\n-101\n-_\b1_\b0_\b3class _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be: public _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<\n-104 InvalidArgumentThreadsafe> {\n-105public:\n-_\b1_\b0_\b7 _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be(const std::string& description) :\n-108 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be>(description) {\n-109 }\n-110};\n-111\n-_\b1_\b1_\b3class _\bC_\bh_\bo_\bl_\be_\bs_\bk_\by_\bF_\ba_\bi_\bl_\be_\bd : public _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-114{\n-115public:\n-116 _\bC_\bh_\bo_\bl_\be_\bs_\bk_\by_\bF_\ba_\bi_\bl_\be_\bd() noexcept {}\n-117 _\b~_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by_\bF_\ba_\bi_\bl_\be_\bd() noexcept override {}\n-118};\n-119\n-120} // namespace gtsam\n+38 template\n+39 T compose(const T& t1, const T& t2) { return t1.compose(t2); }\n+40\n+42 template\n+_\b4_\b3 T _\bi_\bn_\bv_\be_\br_\bs_\be(const T& t) { return t.inverse(); }\n+44\n+46 template\n+_\b4_\b7 P _\br_\bo_\bt_\ba_\bt_\be(const T& r, const P& pt) { return r.rotate(pt); }\n+48\n+49 template\n+50 P unrotate(const T& r, const P& pt) { return r.unrotate(pt); }\n+51\n+52} // \\namespace testing\n+53} // \\namespace gtsam\n+54\n+55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\be_\bs_\bt_\bi_\bn_\bg_\b:_\b:_\br_\bo_\bt_\ba_\bt_\be\n+P rotate(const T &r, const P &pt)\n+rotation functions\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lieProxies.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\be_\bs_\bt_\bi_\bn_\bg_\b:_\b:_\bb_\be_\bt_\bw_\be_\be_\bn\n+T between(const T &t1, const T &t2)\n+binary functions\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lieProxies.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\be_\bs_\bt_\bi_\bn_\bg_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n+T inverse(const T &t)\n+unary functions\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lieProxies.h:43\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\b~_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-~ThreadsafeException() noexcept override\n-Default destructor doesn't have the noexcept.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\by_\bn_\ba_\bm_\bi_\bc_\b_\n-bool dynamic_\n-Whether this object was moved.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-ThreadsafeException()\n-Default constructor is protected - may only be created from derived classes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-ThreadsafeException(const ThreadsafeException &other)\n-Copy constructor is protected - may only be created from derived classes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-ThreadsafeException(const std::string &description)\n-Construct with description string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\b_\n-boost::optional< String > description_\n-Optional description.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n-Thread-safe runtime error exception.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\b:_\b:_\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n-RuntimeErrorThreadsafe(const std::string &description)\n-Construct with a string describing the exception.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n-Thread-safe out of range exception.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\b:_\b:_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n-OutOfRangeThreadsafe(const std::string &description)\n-Construct with a string describing the exception.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n-Thread-safe invalid argument exception.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n-InvalidArgumentThreadsafe(const std::string &description)\n-Construct with a string describing the exception.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by_\bF_\ba_\bi_\bl_\be_\bd\n-Indicate Cholesky factorization failure.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:114\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00014.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00014.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastList.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/ProductLieGroup.h File Reference\n \n \n \n \n \n \n \n@@ -96,43 +96,45 @@\n \n \n \n
\n \n-
FastList.h File Reference
\n+
ProductLieGroup.h File Reference
\n
\n
\n \n-

A thin wrapper around std::list that uses boost's fast_pool_allocator. \n+

Group product of two Lie Groups. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::FastList< VALUE >
 FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the default STL allocator. More...
class  gtsam::ProductLieGroup< G, H >
 Template to construct the product Lie group of two other Lie groups Assumes Lie group structure for G and H. More...
 
struct  gtsam::traits< ProductLieGroup< G, H > >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A thin wrapper around std::list that uses boost's fast_pool_allocator.

\n-
Author
Richard Roberts
\n-
Date
Oct 22, 2010
\n+

Group product of two Lie Groups.

\n+
Date
May, 2015
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-FastList.h File Reference\n-A thin wrapper around std::list that uses boost's fast_pool_allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n+ProductLieGroup.h File Reference\n+Group product of two Lie Groups. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n-\u00a0 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt is a thin wrapper around std::list that uses the boost\n- fast_pool_allocator instead of the default STL allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bG_\b,_\b _\bH_\b _\b>\n+\u00a0 Template to construct the product Lie group of two other Lie groups\n+ Assumes Lie group structure for G and H. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bG_\b,_\b _\bH_\b _\b>_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A thin wrapper around std::list that uses boost's fast_pool_allocator.\n- Author\n- Richard Roberts\n+Group product of two Lie Groups.\n Date\n- Oct 22, 2010\n+ May, 2015\n+ Author\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+ * _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00014_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00014_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastList.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/ProductLieGroup.h Source File\n \n \n \n \n \n \n \n@@ -98,99 +98,193 @@\n
No Matches
\n \n \n \n \n \n
\n-
FastList.h
\n+
ProductLieGroup.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n-
10 * -------------------------------------------------------------------------- */
\n+
10 * -------------------------------1------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-
22#include <list>
\n-
23#include <boost/utility/enable_if.hpp>
\n-
24#include <boost/serialization/nvp.hpp>
\n-
25#include <boost/serialization/version.hpp>
\n-
26#include <boost/serialization/optional.hpp>
\n-
27#include <boost/serialization/list.hpp>
\n-
28
\n-
29namespace gtsam {
\n-
30
\n-
39template<typename VALUE>
\n-
\n-
40class FastList: public std::list<VALUE, typename internal::FastDefaultAllocator<VALUE>::type> {
\n+
21#include <gtsam/base/Lie.h>
\n+
22#include <utility> // pair
\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
28template<typename G, typename H>
\n+
\n+
29class ProductLieGroup: public std::pair<G, H> {
\n+
30 BOOST_CONCEPT_ASSERT((IsLieGroup<G>));
\n+
31 BOOST_CONCEPT_ASSERT((IsLieGroup<H>));
\n+
32 typedef std::pair<G, H> Base;
\n+
33
\n+
34protected:
\n+
35 enum {dimension1 = traits<G>::dimension};
\n+
36 enum {dimension2 = traits<H>::dimension};
\n+
37
\n+
38public:
\n+
40 ProductLieGroup():Base(traits<G>::Identity(),traits<H>::Identity()) {}
\n
41
\n-
42public:
\n-
43
\n-
44 typedef std::list<VALUE, typename internal::FastDefaultAllocator<VALUE>::type> Base;
\n-
45
\n-\n-
48
\n-
50 template<typename INPUTITERATOR>
\n-
51 explicit FastList(INPUTITERATOR first, INPUTITERATOR last) : Base(first, last) {}
\n+
42 // Construct from two subgroup elements
\n+
43 ProductLieGroup(const G& g, const H& h):Base(g,h) {}
\n+
44
\n+
45 // Construct from base
\n+
46 ProductLieGroup(const Base& base):Base(base) {}
\n+
47
\n+
50 typedef multiplicative_group_tag group_flavor;
\n+
51 static ProductLieGroup Identity() {return ProductLieGroup();}
\n
52
\n-
54 FastList(const FastList<VALUE>& x) : Base(x) {}
\n-
55
\n-
57 FastList(const Base& x) : Base(x) {}
\n-
58
\n-
60 FastList(std::initializer_list<VALUE> l) : Base(l) {}
\n-
61
\n-
62#ifdef GTSAM_ALLOCATOR_BOOSTPOOL
\n-
64 FastList(const std::list<VALUE>& x) {
\n-
65 // This if statement works around a bug in boost pool allocator and/or
\n-
66 // STL vector where if the size is zero, the pool allocator will allocate
\n-
67 // huge amounts of memory.
\n-
68 if(x.size() > 0)
\n-
69 Base::assign(x.begin(), x.end());
\n-
70 }
\n-
71#endif
\n-
72
\n-
\n-
74 operator std::list<VALUE>() const {
\n-
75 return std::list<VALUE>(this->begin(), this->end());
\n-
76 }
\n-
\n-
77
\n-
78private:
\n-\n-
81 template<class ARCHIVE>
\n-
82 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
83 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
84 }
\n-
85
\n-
86};
\n-
\n-
87
\n-
88}
\n-
An easy way to control which allocator is used for Fast* collections.
\n+
53 ProductLieGroup operator*(const ProductLieGroup& other) const {
\n+
54 return ProductLieGroup(traits<G>::Compose(this->first,other.first),
\n+
55 traits<H>::Compose(this->second,other.second));
\n+
56 }
\n+
57 ProductLieGroup inverse() const {
\n+
58 return ProductLieGroup(traits<G>::Inverse(this->first), traits<H>::Inverse(this->second));
\n+
59 }
\n+
60 ProductLieGroup compose(const ProductLieGroup& g) const {
\n+
61 return (*this) * g;
\n+
62 }
\n+
63 ProductLieGroup between(const ProductLieGroup& g) const {
\n+
64 return this->inverse() * g;
\n+
65 }
\n+
67
\n+
70 enum {dimension = dimension1 + dimension2};
\n+
71 inline static size_t Dim() {return dimension;}
\n+
72 inline size_t dim() const {return dimension;}
\n+
73
\n+
74 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
\n+
75 typedef OptionalJacobian<dimension, dimension> ChartJacobian;
\n+
76
\n+
77 ProductLieGroup retract(const TangentVector& v, //
\n+
78 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) const {
\n+
79 if (H1||H2) throw std::runtime_error("ProductLieGroup::retract derivatives not implemented yet");
\n+
80 G g = traits<G>::Retract(this->first, v.template head<dimension1>());
\n+
81 H h = traits<H>::Retract(this->second, v.template tail<dimension2>());
\n+
82 return ProductLieGroup(g,h);
\n+
83 }
\n+
84 TangentVector localCoordinates(const ProductLieGroup& g, //
\n+
85 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) const {
\n+
86 if (H1||H2) throw std::runtime_error("ProductLieGroup::localCoordinates derivatives not implemented yet");
\n+
87 typename traits<G>::TangentVector v1 = traits<G>::Local(this->first, g.first);
\n+
88 typename traits<H>::TangentVector v2 = traits<H>::Local(this->second, g.second);
\n+
89 TangentVector v;
\n+
90 v << v1, v2;
\n+
91 return v;
\n+
92 }
\n+
94
\n+
97protected:
\n+
98 typedef Eigen::Matrix<double, dimension, dimension> Jacobian;
\n+
99 typedef Eigen::Matrix<double, dimension1, dimension1> Jacobian1;
\n+
100 typedef Eigen::Matrix<double, dimension2, dimension2> Jacobian2;
\n+
101
\n+
102public:
\n+
103 ProductLieGroup compose(const ProductLieGroup& other, ChartJacobian H1,
\n+
104 ChartJacobian H2 = boost::none) const {
\n+
105 Jacobian1 D_g_first; Jacobian2 D_h_second;
\n+
106 G g = traits<G>::Compose(this->first,other.first, H1 ? &D_g_first : 0);
\n+
107 H h = traits<H>::Compose(this->second,other.second, H1 ? &D_h_second : 0);
\n+
108 if (H1) {
\n+
109 H1->setZero();
\n+
110 H1->template topLeftCorner<dimension1,dimension1>() = D_g_first;
\n+
111 H1->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
\n+
112 }
\n+
113 if (H2) *H2 = Jacobian::Identity();
\n+
114 return ProductLieGroup(g,h);
\n+
115 }
\n+
116 ProductLieGroup between(const ProductLieGroup& other, ChartJacobian H1,
\n+
117 ChartJacobian H2 = boost::none) const {
\n+
118 Jacobian1 D_g_first; Jacobian2 D_h_second;
\n+
119 G g = traits<G>::Between(this->first,other.first, H1 ? &D_g_first : 0);
\n+
120 H h = traits<H>::Between(this->second,other.second, H1 ? &D_h_second : 0);
\n+
121 if (H1) {
\n+
122 H1->setZero();
\n+
123 H1->template topLeftCorner<dimension1,dimension1>() = D_g_first;
\n+
124 H1->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
\n+
125 }
\n+
126 if (H2) *H2 = Jacobian::Identity();
\n+
127 return ProductLieGroup(g,h);
\n+
128 }
\n+
129 ProductLieGroup inverse(ChartJacobian D) const {
\n+
130 Jacobian1 D_g_first; Jacobian2 D_h_second;
\n+
131 G g = traits<G>::Inverse(this->first, D ? &D_g_first : 0);
\n+
132 H h = traits<H>::Inverse(this->second, D ? &D_h_second : 0);
\n+
133 if (D) {
\n+
134 D->setZero();
\n+
135 D->template topLeftCorner<dimension1,dimension1>() = D_g_first;
\n+
136 D->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
\n+
137 }
\n+
138 return ProductLieGroup(g,h);
\n+
139 }
\n+
140 static ProductLieGroup Expmap(const TangentVector& v, ChartJacobian Hv = boost::none) {
\n+
141 Jacobian1 D_g_first; Jacobian2 D_h_second;
\n+
142 G g = traits<G>::Expmap(v.template head<dimension1>(), Hv ? &D_g_first : 0);
\n+
143 H h = traits<H>::Expmap(v.template tail<dimension2>(), Hv ? &D_h_second : 0);
\n+
144 if (Hv) {
\n+
145 Hv->setZero();
\n+
146 Hv->template topLeftCorner<dimension1,dimension1>() = D_g_first;
\n+
147 Hv->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
\n+
148 }
\n+
149 return ProductLieGroup(g,h);
\n+
150 }
\n+
151 static TangentVector Logmap(const ProductLieGroup& p, ChartJacobian Hp = boost::none) {
\n+
152 Jacobian1 D_g_first; Jacobian2 D_h_second;
\n+
153 typename traits<G>::TangentVector v1 = traits<G>::Logmap(p.first, Hp ? &D_g_first : 0);
\n+
154 typename traits<H>::TangentVector v2 = traits<H>::Logmap(p.second, Hp ? &D_h_second : 0);
\n+
155 TangentVector v;
\n+
156 v << v1, v2;
\n+
157 if (Hp) {
\n+
158 Hp->setZero();
\n+
159 Hp->template topLeftCorner<dimension1,dimension1>() = D_g_first;
\n+
160 Hp->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
\n+
161 }
\n+
162 return v;
\n+
163 }
\n+
164 static TangentVector LocalCoordinates(const ProductLieGroup& p, ChartJacobian Hp = boost::none) {
\n+
165 return Logmap(p, Hp);
\n+
166 }
\n+
167 ProductLieGroup expmap(const TangentVector& v) const {
\n+
168 return compose(ProductLieGroup::Expmap(v));
\n+
169 }
\n+
170 TangentVector logmap(const ProductLieGroup& g) const {
\n+
171 return ProductLieGroup::Logmap(between(g));
\n+
172 }
\n+
174
\n+
175};
\n+
\n+
176
\n+
177// Define any direct product group to be a model of the multiplicative Group concept
\n+
178template<typename G, typename H>
\n+
179struct traits<ProductLieGroup<G, H> > : internal::LieGroupTraits<ProductLieGroup<G, H> > {};
\n+
180
\n+
181} // namespace gtsam
\n+
182
\n+
Base class and basic functions for Lie types.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n-
FastList(INPUTITERATOR first, INPUTITERATOR last)
Constructor from a range, passes through to base class.
Definition FastList.h:51
\n-
FastList()
Default constructor.
Definition FastList.h:47
\n-
FastList(std::initializer_list< VALUE > l)
Construct from c++11 initializer list:
Definition FastList.h:60
\n-
FastList(const FastList< VALUE > &x)
Copy constructor from another FastList.
Definition FastList.h:54
\n-
friend class boost::serialization::access
Serialization function.
Definition FastList.h:80
\n-
FastList(const Base &x)
Copy constructor from the base list class.
Definition FastList.h:57
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper class that implements the traits interface for GTSAM lie groups.
Definition Lie.h:174
\n+
Lie Group Concept.
Definition Lie.h:260
\n+
Template to construct the product Lie group of two other Lie groups Assumes Lie group structure for G...
Definition ProductLieGroup.h:29
\n+
ProductLieGroup()
Default constructor yields identity.
Definition ProductLieGroup.h:40
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,114 +1,213 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FastList.h\n+ProductLieGroup.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n-10 * -------------------------------------------------------------------------\n+10 * -------------------------------1------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh>\n-22#include \n-23#include \n-24#include \n-25#include \n-26#include \n-27#include \n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-39template\n-_\b4_\b0class _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt: public std::list::type> {\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+22#include // pair\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+28template\n+_\b2_\b9class _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp: public std::pair {\n+30 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\bG_\b>));\n+31 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\bH_\b>));\n+32 typedef std::pair Base;\n+33\n+34protected:\n+35 enum {dimension1 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn};\n+36 enum {dimension2 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bH_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn};\n+37\n+38public:\n+_\b4_\b0 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp():Base(_\bt_\br_\ba_\bi_\bt_\bs::Identity(),_\bt_\br_\ba_\bi_\bt_\bs::Identity()) {}\n 41\n-42public:\n-43\n-44 typedef std::list::\n-type> Base;\n-45\n-_\b4_\b7 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt() {}\n-48\n-50 template\n-_\b5_\b1 explicit _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(INPUTITERATOR first, INPUTITERATOR last) : Base(first,\n-last) {}\n+42 // Construct from two subgroup elements\n+43 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(const G& g, const H& h):Base(g,h) {}\n+44\n+45 // Construct from base\n+46 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(const Base& base):Base(base) {}\n+47\n+50 typedef multiplicative_group_tag group_flavor;\n+51 static _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp Identity() {return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp();}\n 52\n-_\b5_\b4 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(const _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bV_\bA_\bL_\bU_\bE_\b>& x) : Base(x) {}\n-55\n-_\b5_\b7 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(const Base& x) : Base(x) {}\n-58\n-_\b6_\b0 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(std::initializer_list l) : Base(l) {}\n-61\n-62#ifdef GTSAM_ALLOCATOR_BOOSTPOOL\n-64 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(const std::list& x) {\n-65 // This if statement works around a bug in boost pool allocator and/or\n-66 // STL vector where if the size is zero, the pool allocator will allocate\n-67 // huge amounts of memory.\n-68 if(x.size() > 0)\n-69 Base::assign(x.begin(), x.end());\n-70 }\n-71#endif\n-72\n-_\b7_\b4 operator std::list() const {\n-75 return std::list(this->begin(), this->end());\n-76 }\n-77\n-78private:\n-_\b8_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-81 template\n-82 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-83 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n-84 }\n-85\n-86};\n-87\n-88}\n-_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n-An easy way to control which allocator is used for Fast* collections.\n+53 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp operator*(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& other) const {\n+54 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(traits::Compose(this->first,other.first),\n+55 traits::Compose(this->second,other.second));\n+56 }\n+57 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp inverse() const {\n+58 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(traits::Inverse(this->first), traits::Inverse\n+(this->second));\n+59 }\n+60 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp compose(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& g) const {\n+61 return (*this) * g;\n+62 }\n+63 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp between(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& g) const {\n+64 return this->inverse() * g;\n+65 }\n+67\n+70 enum {dimension = dimension1 + dimension2};\n+71 inline static size_t Dim() {return dimension;}\n+72 inline size_t dim() const {return dimension;}\n+73\n+74 typedef Eigen::Matrix TangentVector;\n+75 typedef OptionalJacobian ChartJacobian;\n+76\n+77 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp retract(const TangentVector& v, //\n+78 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) const {\n+79 if (H1||H2) throw std::runtime_error(\"ProductLieGroup::retract derivatives\n+not implemented yet\");\n+80 G g = traits::Retract(this->first, v.template head());\n+81 H h = traits::Retract(this->second, v.template tail());\n+82 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(g,h);\n+83 }\n+84 TangentVector localCoordinates(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& g, //\n+85 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) const {\n+86 if (H1||H2) throw std::runtime_error(\"ProductLieGroup::localCoordinates\n+derivatives not implemented yet\");\n+87 typename traits::TangentVector v1 = traits::Local(this->first,\n+g.first);\n+88 typename traits::TangentVector v2 = traits::Local(this->second,\n+g.second);\n+89 TangentVector v;\n+90 v << v1, v2;\n+91 return v;\n+92 }\n+94\n+97protected:\n+98 typedef Eigen::Matrix Jacobian;\n+99 typedef Eigen::Matrix Jacobian1;\n+100 typedef Eigen::Matrix Jacobian2;\n+101\n+102public:\n+103 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp compose(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& other, ChartJacobian H1,\n+104 ChartJacobian H2 = boost::none) const {\n+105 Jacobian1 D_g_first; Jacobian2 D_h_second;\n+106 G g = traits::Compose(this->first,other.first, H1 ? &D_g_first : 0);\n+107 H h = traits::Compose(this->second,other.second, H1 ? &D_h_second : 0);\n+108 if (H1) {\n+109 H1->setZero();\n+110 H1->template topLeftCorner() = D_g_first;\n+111 H1->template bottomRightCorner() = D_h_second;\n+112 }\n+113 if (H2) *H2 = Jacobian::Identity();\n+114 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(g,h);\n+115 }\n+116 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp between(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& other, ChartJacobian H1,\n+117 ChartJacobian H2 = boost::none) const {\n+118 Jacobian1 D_g_first; Jacobian2 D_h_second;\n+119 G g = traits::Between(this->first,other.first, H1 ? &D_g_first : 0);\n+120 H h = traits::Between(this->second,other.second, H1 ? &D_h_second : 0);\n+121 if (H1) {\n+122 H1->setZero();\n+123 H1->template topLeftCorner() = D_g_first;\n+124 H1->template bottomRightCorner() = D_h_second;\n+125 }\n+126 if (H2) *H2 = Jacobian::Identity();\n+127 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(g,h);\n+128 }\n+129 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp inverse(ChartJacobian D) const {\n+130 Jacobian1 D_g_first; Jacobian2 D_h_second;\n+131 G g = traits::Inverse(this->first, D ? &D_g_first : 0);\n+132 H h = traits::Inverse(this->second, D ? &D_h_second : 0);\n+133 if (D) {\n+134 D->setZero();\n+135 D->template topLeftCorner() = D_g_first;\n+136 D->template bottomRightCorner() = D_h_second;\n+137 }\n+138 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(g,h);\n+139 }\n+140 static _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp Expmap(const TangentVector& v, ChartJacobian Hv =\n+boost::none) {\n+141 Jacobian1 D_g_first; Jacobian2 D_h_second;\n+142 G g = traits::Expmap(v.template head(), Hv ? &D_g_first :\n+0);\n+143 H h = traits::Expmap(v.template tail(), Hv ? &D_h_second :\n+0);\n+144 if (Hv) {\n+145 Hv->setZero();\n+146 Hv->template topLeftCorner() = D_g_first;\n+147 Hv->template bottomRightCorner() = D_h_second;\n+148 }\n+149 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(g,h);\n+150 }\n+151 static TangentVector Logmap(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& p, ChartJacobian Hp =\n+boost::none) {\n+152 Jacobian1 D_g_first; Jacobian2 D_h_second;\n+153 typename traits::TangentVector v1 = traits::Logmap(p.first, Hp ?\n+&D_g_first : 0);\n+154 typename traits::TangentVector v2 = traits::Logmap(p.second, Hp ?\n+&D_h_second : 0);\n+155 TangentVector v;\n+156 v << v1, v2;\n+157 if (Hp) {\n+158 Hp->setZero();\n+159 Hp->template topLeftCorner() = D_g_first;\n+160 Hp->template bottomRightCorner() = D_h_second;\n+161 }\n+162 return v;\n+163 }\n+164 static TangentVector LocalCoordinates(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& p,\n+ChartJacobian Hp = boost::none) {\n+165 return Logmap(p, Hp);\n+166 }\n+167 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp expmap(const TangentVector& v) const {\n+168 return compose(ProductLieGroup::Expmap(v));\n+169 }\n+170 TangentVector logmap(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& g) const {\n+171 return ProductLieGroup::Logmap(between(g));\n+172 }\n+174\n+175};\n+176\n+177// Define any direct product group to be a model of the multiplicative Group\n+concept\n+178template\n+_\b1_\b7_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp > : _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:\n+_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs > {};\n+180\n+181} // namespace gtsam\n+182\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList is a thin wrapper around std::list that uses the boost\n-fast_pool_allocator instead of the de...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList(INPUTITERATOR first, INPUTITERATOR last)\n-Constructor from a range, passes through to base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList(std::initializer_list< VALUE > l)\n-Construct from c++11 initializer list:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList(const FastList< VALUE > &x)\n-Copy constructor from another FastList.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList(const Base &x)\n-Copy constructor from the base list class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs\n+A helper class that implements the traits interface for GTSAM lie groups.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Lie Group Concept.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Template to construct the product Lie group of two other Lie groups Assumes Lie\n+group structure for G...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProductLieGroup.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+ProductLieGroup()\n+Default constructor yields identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProductLieGroup.h:40\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+ * _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00017_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00017_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastDefaultAllocator.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/GenericValue.h Source File\n \n \n \n \n \n \n \n@@ -98,106 +98,281 @@\n
No Matches
\n \n \n \n \n \n
\n-
FastDefaultAllocator.h
\n+
GenericValue.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20#include <gtsam/config.h> // Configuration from CMake
\n+
12/*
\n+
13 * @file GenericValue.h
\n+
14 * @brief Wraps any type T so it can play as a Value
\n+
15 * @date October, 2014
\n+
16 * @author Michael Bosse, Abel Gawel, Renaud Dube
\n+
17 * based on DerivedValue.h by Duy Nguyen Ta
\n+
18 */
\n+
19
\n+
20#pragma once
\n
21
\n-
22#if !defined GTSAM_ALLOCATOR_BOOSTPOOL && !defined GTSAM_ALLOCATOR_TBB && !defined GTSAM_ALLOCATOR_STL
\n-
23# ifdef GTSAM_USE_TBB
\n-
24// Use TBB allocator by default if we have TBB, otherwise boost pool
\n-
25# define GTSAM_ALLOCATOR_TBB
\n-
26# else
\n-
27# define GTSAM_ALLOCATOR_BOOSTPOOL
\n-
28# endif
\n-
29#endif
\n-
30
\n-
31#if defined GTSAM_ALLOCATOR_BOOSTPOOL
\n-
32# include <boost/pool/pool_alloc.hpp>
\n-
33#elif defined GTSAM_ALLOCATOR_TBB
\n-
34# include <tbb/tbb_allocator.h>
\n-
35# undef min // TBB seems to include Windows.h which defines these macros that cause problems
\n-
36# undef max
\n-
37# undef ERROR
\n-
38#elif defined GTSAM_ALLOCATOR_STL
\n-
39# include <memory>
\n-
40#endif
\n-
41
\n-
42namespace gtsam
\n-
43{
\n-
44
\n-
45 namespace internal
\n-
46 {
\n-
48 template<typename T>
\n-
\n-\n-
50 {
\n-
51#if defined GTSAM_ALLOCATOR_BOOSTPOOL
\n-
52 typedef boost::fast_pool_allocator<T> type;
\n-
53 static const bool isBoost = true;
\n-
54 static const bool isTBB = false;
\n-
55 static const bool isSTL = false;
\n-
56#elif defined GTSAM_ALLOCATOR_TBB
\n-
57 typedef tbb::tbb_allocator<T> type;
\n-
58 static const bool isBoost = false;
\n-
59 static const bool isTBB = true;
\n-
60 static const bool isSTL = false;
\n-
61#elif defined GTSAM_ALLOCATOR_STL
\n-
62 typedef std::allocator<T> type;
\n-
63 static const bool isBoost = false;
\n-
64 static const bool isTBB = false;
\n-
65 static const bool isSTL = true;
\n-
66#endif
\n-
67 };
\n-
\n-
68
\n-
70 template<typename T>
\n-
\n-\n-
72 {
\n-
73#if defined GTSAM_ALLOCATOR_TBB
\n-
74 typedef tbb::tbb_allocator<T> type;
\n-
75 static const bool isBoost = false;
\n-
76 static const bool isTBB = true;
\n-
77 static const bool isSTL = false;
\n-
78#else
\n-
79 typedef std::allocator<T> type;
\n-
80 static const bool isBoost = false;
\n-
81 static const bool isTBB = false;
\n-
82 static const bool isSTL = true;
\n-
83#endif
\n-
84 };
\n-
\n-
85 }
\n-
86
\n-
87}
\n+
22#include <gtsam/base/Manifold.h>
\n+
23#include <gtsam/base/types.h>
\n+
24#include <gtsam/base/Value.h>
\n+
25
\n+
26#include <boost/make_shared.hpp>
\n+
27#include <boost/pool/pool_alloc.hpp>
\n+
28
\n+
29#include <cmath>
\n+
30#include <iostream>
\n+
31#include <typeinfo> // operator typeid
\n+
32
\n+
33#ifdef _WIN32
\n+
34#define GENERICVALUE_VISIBILITY
\n+
35#else
\n+
36// This will trigger a LNKxxxx on MSVC, so disable for MSVC build
\n+
37// Please refer to https://github.com/borglab/gtsam/blob/develop/Using-GTSAM-EXPORT.md
\n+
38#define GENERICVALUE_VISIBILITY GTSAM_EXPORT
\n+
39#endif
\n+
40
\n+
41namespace gtsam {
\n+
42
\n+
46template<class T>
\n+
\n+
47class GenericValue: public Value {
\n+
48
\n+
49public:
\n+
50
\n+
51 typedef T type;
\n+
52
\n+
53protected:
\n+
54
\n+\n+
56
\n+
57public:
\n+
58 // Only needed for serialization.
\n+
59 GenericValue(){}
\n+
60
\n+
\n+
62 GenericValue(const T& value) :
\n+
63 value_(value) {
\n+
64 }
\n+
\n+
65
\n+
\n+
67 const T& value() const {
\n+
68 return value_;
\n+
69 }
\n+
\n+
70
\n+
\n+
72 T& value() {
\n+
73 return value_;
\n+
74 }
\n+
\n+
75
\n+
\n+
77 ~GenericValue() override {
\n+
78 }
\n+
\n+
79
\n+
\n+
81 bool equals_(const Value& p, double tol = 1e-9) const override {
\n+
82 // Cast the base class Value pointer to a templated generic class pointer
\n+
83 const GenericValue& genericValue2 = static_cast<const GenericValue&>(p);
\n+
84 // Return the result of using the equals traits for the derived class
\n+
85 return traits<T>::Equals(this->value_, genericValue2.value_, tol);
\n+
86 }
\n+
\n+
87
\n+
\n+
89 bool equals(const GenericValue &other, double tol = 1e-9) const {
\n+
90 return traits<T>::Equals(this->value(), other.value(), tol);
\n+
91 }
\n+
\n+
92
\n+
\n+
94 void print(const std::string& str) const override {
\n+
95 std::cout << "(" << demangle(typeid(T).name()) << ")\\n";
\n+\n+
97 }
\n+
\n+
98
\n+
\n+
102 Value* clone_() const override {
\n+
103 GenericValue* ptr = new GenericValue(*this); // calls copy constructor to fill in
\n+
104 return ptr;
\n+
105 }
\n+
\n+
106
\n+
\n+
110 void deallocate_() const override {
\n+
111 delete this;
\n+
112 }
\n+
\n+
113
\n+
\n+
117 boost::shared_ptr<Value> clone() const override {
\n+
118 return boost::allocate_shared<GenericValue>(Eigen::aligned_allocator<GenericValue>(), *this);
\n+
119 }
\n+
\n+
120
\n+
\n+
122 Value* retract_(const Vector& delta) const override {
\n+
123 // Call retract on the derived class using the retract trait function
\n+
124 const T retractResult = traits<T>::Retract(GenericValue<T>::value(), delta);
\n+
125
\n+
126 Value* resultAsValue = new GenericValue(retractResult);
\n+
127
\n+
128 // Return the pointer to the Value base class
\n+
129 return resultAsValue;
\n+
130 }
\n+
\n+
131
\n+
\n+
133 Vector localCoordinates_(const Value& value2) const override {
\n+
134 // Cast the base class Value pointer to a templated generic class pointer
\n+
135 const GenericValue<T>& genericValue2 =
\n+
136 static_cast<const GenericValue<T>&>(value2);
\n+
137
\n+
138 // Return the result of calling localCoordinates trait on the derived class
\n+
139 return traits<T>::Local(GenericValue<T>::value(), genericValue2.value());
\n+
140 }
\n+
\n+
141
\n+
\n+
143 GenericValue retract(const Vector& delta) const {
\n+\n+
145 }
\n+
\n+
146
\n+
\n+
148 Vector localCoordinates(const GenericValue& value2) const {
\n+
149 return localCoordinates_(value2);
\n+
150 }
\n+
\n+
151
\n+
\n+
153 size_t dim() const override {
\n+\n+
155 }
\n+
\n+
156
\n+
\n+
158 Value& operator=(const Value& rhs) override {
\n+
159 // Cast the base class Value pointer to a derived class pointer
\n+
160 const GenericValue& derivedRhs = static_cast<const GenericValue&>(rhs);
\n+
161
\n+
162 // Do the assignment and return the result
\n+
163 *this = GenericValue(derivedRhs); // calls copy constructor
\n+
164 return *this;
\n+
165 }
\n+
\n+
166
\n+
167 protected:
\n+
168
\n+
\n+\n+
172 Value::operator=(static_cast<Value const&>(rhs));
\n+
173 value_ = rhs.value_;
\n+
174 return *this;
\n+
175 }
\n+
\n+
176
\n+
177 private:
\n+
178
\n+\n+
181 template<class ARCHIVE>
\n+
182 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
183 ar & boost::serialization::make_nvp("GenericValue",
\n+
184 boost::serialization::base_object<Value>(*this));
\n+
185 ar & boost::serialization::make_nvp("value", value_);
\n+
186 }
\n+
187
\n+
188
\n+
189 // Alignment, see https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html
\n+
190 enum { NeedsToAlign = (sizeof(T) % 16) == 0 };
\n+
191public:
\n+\n+
193};
\n+
\n+
194
\n+
196#define GTSAM_VALUE_EXPORT(Type) BOOST_CLASS_EXPORT(gtsam::GenericValue<Type>)
\n+
197
\n+
198// traits
\n+
199template <typename ValueType>
\n+
\n+
200struct traits<GenericValue<ValueType> >
\n+
201 : public Testable<GenericValue<ValueType> > {};
\n+
\n+
202
\n+
203// define Value::cast here since now GenericValue has been declared
\n+
204template<typename ValueType>
\n+
\n+
205const ValueType& Value::cast() const {
\n+
206 return dynamic_cast<const GenericValue<ValueType>&>(*this).value();
\n+
207}
\n+
\n+
208
\n+
211template<class T>
\n+
\n+\n+
213 return GenericValue<T>(v);
\n+
214}
\n+
\n+
215
\n+
216
\n+
217} /* namespace gtsam */
\n+
Typedefs for easier changing of types.
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n+
The base class for any variable that can be optimized or used in a factor.
\n+
Base class and basic functions for Manifold types.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Default allocator for list, map, and set types.
Definition FastDefaultAllocator.h:50
\n-
Default allocator for vector types (we never use boost pool for vectors)
Definition FastDefaultAllocator.h:72
\n+
std::string demangle(const char *name)
Pretty print Value type name.
Definition types.cpp:37
\n+
GenericValue< T > genericValue(const T &v)
Functional constructor of GenericValue<T> so T can be automatically deduced.
Definition GenericValue.h:212
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Wraps any type T so it can play as a Value.
Definition GenericValue.h:47
\n+
Value * clone_() const override
Create a duplicate object returned as a pointer to the generic Value interface.
Definition GenericValue.h:102
\n+
T & value()
Return the value.
Definition GenericValue.h:72
\n+
Value * retract_(const Vector &delta) const override
Generic Value interface version of retract.
Definition GenericValue.h:122
\n+
Value & operator=(const Value &rhs) override
Assignment operator.
Definition GenericValue.h:158
\n+
void print(const std::string &str) const override
Virtual print function, uses traits.
Definition GenericValue.h:94
\n+
bool equals(const GenericValue &other, double tol=1e-9) const
non virtual equals function, uses traits
Definition GenericValue.h:89
\n+
size_t dim() const override
Return run-time dimensionality.
Definition GenericValue.h:153
\n+
GenericValue(const T &value)
Construct from value.
Definition GenericValue.h:62
\n+
void deallocate_() const override
Destroy and deallocate this object, only if it was originally allocated using clone_().
Definition GenericValue.h:110
\n+
T value_
The wrapped value.
Definition GenericValue.h:55
\n+
GenericValue< T > & operator=(const GenericValue< T > &rhs)
Assignment operator, protected because only the Value or DERIVED assignment operators should be used.
Definition GenericValue.h:171
\n+
Vector localCoordinates(const GenericValue &value2) const
Non-virtual version of localCoordinates.
Definition GenericValue.h:148
\n+
friend class boost::serialization::access
Serialization function.
Definition GenericValue.h:180
\n+
bool equals_(const Value &p, double tol=1e-9) const override
equals implementing generic Value interface
Definition GenericValue.h:81
\n+
const T & value() const
Return a constant value.
Definition GenericValue.h:67
\n+
~GenericValue() override
Destructor.
Definition GenericValue.h:77
\n+
GenericValue retract(const Vector &delta) const
Non-virtual version of retract.
Definition GenericValue.h:143
\n+
Vector localCoordinates_(const Value &value2) const override
Generic Value interface version of localCoordinates.
Definition GenericValue.h:133
\n+
boost::shared_ptr< Value > clone() const override
Clone this value (normal clone on the heap, delete with 'delete' operator)
Definition GenericValue.h:117
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n+
const ValueType & cast() const
Cast to known ValueType.
Definition GenericValue.h:205
\n+
virtual Value & operator=(const Value &)
Assignment operator.
Definition Value.h:79
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,102 +1,324 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FastDefaultAllocator.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+GenericValue.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20#include // Configuration from CMake\n+12/*\n+13 * @file GenericValue.h\n+14 * @brief Wraps any type T so it can play as a Value\n+15 * @date October, 2014\n+16 * @author Michael Bosse, Abel Gawel, Renaud Dube\n+17 * based on DerivedValue.h by Duy Nguyen Ta\n+18 */\n+19\n+20#pragma once\n 21\n-22#if !defined GTSAM_ALLOCATOR_BOOSTPOOL && !defined GTSAM_ALLOCATOR_TBB &&\n-!defined GTSAM_ALLOCATOR_STL\n-23# ifdef GTSAM_USE_TBB\n-24// Use TBB allocator by default if we have TBB, otherwise boost pool\n-25# define GTSAM_ALLOCATOR_TBB\n-26# else\n-27# define GTSAM_ALLOCATOR_BOOSTPOOL\n-28# endif\n-29#endif\n-30\n-31#if defined GTSAM_ALLOCATOR_BOOSTPOOL\n-32# include \n-33#elif defined GTSAM_ALLOCATOR_TBB\n-34# include \n-35# undef min // TBB seems to include Windows.h which defines these macros that\n-cause problems\n-36# undef max\n-37# undef ERROR\n-38#elif defined GTSAM_ALLOCATOR_STL\n-39# include \n-40#endif\n-41\n-42namespace _\bg_\bt_\bs_\ba_\bm\n-43{\n-44\n-45 namespace internal\n-46 {\n-48 template\n-_\b4_\b9 struct _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-50 {\n-51#if defined GTSAM_ALLOCATOR_BOOSTPOOL\n-52 typedef boost::fast_pool_allocator type;\n-53 static const bool isBoost = true;\n-54 static const bool isTBB = false;\n-55 static const bool isSTL = false;\n-56#elif defined GTSAM_ALLOCATOR_TBB\n-57 typedef tbb::tbb_allocator type;\n-58 static const bool isBoost = false;\n-59 static const bool isTBB = true;\n-60 static const bool isSTL = false;\n-61#elif defined GTSAM_ALLOCATOR_STL\n-62 typedef std::allocator type;\n-63 static const bool isBoost = false;\n-64 static const bool isTBB = false;\n-65 static const bool isSTL = true;\n-66#endif\n-67 };\n-68\n-70 template\n-_\b7_\b1 struct _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bV_\be_\bc_\bt_\bo_\br_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-72 {\n-73#if defined GTSAM_ALLOCATOR_TBB\n-74 typedef tbb::tbb_allocator type;\n-75 static const bool isBoost = false;\n-76 static const bool isTBB = true;\n-77 static const bool isSTL = false;\n-78#else\n-79 typedef std::allocator type;\n-80 static const bool isBoost = false;\n-81 static const bool isTBB = false;\n-82 static const bool isSTL = true;\n-83#endif\n-84 };\n-85 }\n-86\n-87}\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\ba_\bl_\bu_\be_\b._\bh>\n+25\n+26#include \n+27#include \n+28\n+29#include \n+30#include \n+31#include // operator typeid\n+32\n+33#ifdef _WIN32\n+34#define GENERICVALUE_VISIBILITY\n+35#else\n+36// This will trigger a LNKxxxx on MSVC, so disable for MSVC build\n+37// Please refer to https://github.com/borglab/gtsam/blob/develop/Using-GTSAM-\n+EXPORT.md\n+38#define GENERICVALUE_VISIBILITY GTSAM_EXPORT\n+39#endif\n+40\n+41namespace _\bg_\bt_\bs_\ba_\bm {\n+42\n+46template\n+_\b4_\b7class _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be: public _\bV_\ba_\bl_\bu_\be {\n+48\n+49public:\n+50\n+51 typedef T type;\n+52\n+53protected:\n+54\n+_\b5_\b5 T _\bv_\ba_\bl_\bu_\be_\b_;\n+56\n+57public:\n+58 // Only needed for serialization.\n+59 _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(){}\n+60\n+_\b6_\b2 _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(const T& _\bv_\ba_\bl_\bu_\be) :\n+63 _\bv_\ba_\bl_\bu_\be_\b_(_\bv_\ba_\bl_\bu_\be) {\n+64 }\n+65\n+_\b6_\b7 const T& _\bv_\ba_\bl_\bu_\be() const {\n+68 return _\bv_\ba_\bl_\bu_\be_\b_;\n+69 }\n+70\n+_\b7_\b2 T& _\bv_\ba_\bl_\bu_\be() {\n+73 return _\bv_\ba_\bl_\bu_\be_\b_;\n+74 }\n+75\n+_\b7_\b7 _\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be() override {\n+78 }\n+79\n+_\b8_\b1 bool _\be_\bq_\bu_\ba_\bl_\bs_\b_(const _\bV_\ba_\bl_\bu_\be& p, double tol = 1e-9) const override {\n+82 // Cast the base class Value pointer to a templated generic class pointer\n+83 const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be& genericValue2 = static_cast(p);\n+84 // Return the result of using the equals traits for the derived class\n+85 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->value_, genericValue2._\bv_\ba_\bl_\bu_\be_\b_, tol);\n+86 }\n+87\n+_\b8_\b9 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be &other, double tol = 1e-9) const {\n+90 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->_\bv_\ba_\bl_\bu_\be(), other._\bv_\ba_\bl_\bu_\be(), tol);\n+91 }\n+92\n+_\b9_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string& str) const override {\n+95 std::cout << \"(\" << _\bd_\be_\bm_\ba_\bn_\bg_\bl_\be(typeid(T).name()) << \")\\n\";\n+96 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(_\bv_\ba_\bl_\bu_\be_\b_, str);\n+97 }\n+98\n+_\b1_\b0_\b2 _\bV_\ba_\bl_\bu_\be* _\bc_\bl_\bo_\bn_\be_\b_() const override {\n+103 _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be* ptr = new _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(*this); // calls copy constructor to\n+fill in\n+104 return ptr;\n+105 }\n+106\n+_\b1_\b1_\b0 void _\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be_\b_() const override {\n+111 delete this;\n+112 }\n+113\n+_\b1_\b1_\b7 boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+118 return boost::allocate_shared(Eigen::\n+aligned_allocator(), *this);\n+119 }\n+120\n+_\b1_\b2_\b2 _\bV_\ba_\bl_\bu_\be* _\br_\be_\bt_\br_\ba_\bc_\bt_\b_(const Vector& delta) const override {\n+123 // Call retract on the derived class using the retract trait function\n+124 const T retractResult = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be(),\n+delta);\n+125\n+126 _\bV_\ba_\bl_\bu_\be* resultAsValue = new _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(retractResult);\n+127\n+128 // Return the pointer to the Value base class\n+129 return resultAsValue;\n+130 }\n+131\n+_\b1_\b3_\b3 Vector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\b_(const _\bV_\ba_\bl_\bu_\be& value2) const override {\n+134 // Cast the base class Value pointer to a templated generic class pointer\n+135 const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>& genericValue2 =\n+136 static_cast&>(value2);\n+137\n+138 // Return the result of calling localCoordinates trait on the derived class\n+139 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be(), genericValue2._\bv_\ba_\bl_\bu_\be());\n+140 }\n+141\n+_\b1_\b4_\b3 _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& delta) const {\n+144 return _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be(), delta));\n+145 }\n+146\n+_\b1_\b4_\b8 Vector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be& value2) const {\n+149 return _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\b_(value2);\n+150 }\n+151\n+_\b1_\b5_\b3 size_t _\bd_\bi_\bm() const override {\n+154 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(_\bv_\ba_\bl_\bu_\be_\b_);\n+155 }\n+156\n+_\b1_\b5_\b8 _\bV_\ba_\bl_\bu_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bV_\ba_\bl_\bu_\be& rhs) override {\n+159 // Cast the base class Value pointer to a derived class pointer\n+160 const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be& derivedRhs = static_cast(rhs);\n+161\n+162 // Do the assignment and return the result\n+163 *this = _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(derivedRhs); // calls copy constructor\n+164 return *this;\n+165 }\n+166\n+167 protected:\n+168\n+_\b1_\b7_\b1 _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>& rhs) {\n+172 _\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(static_cast<_\bV_\ba_\bl_\bu_\be const&>(rhs));\n+173 _\bv_\ba_\bl_\bu_\be_\b_ = rhs._\bv_\ba_\bl_\bu_\be_\b_;\n+174 return *this;\n+175 }\n+176\n+177 private:\n+178\n+_\b1_\b8_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+181 template\n+182 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+183 ar & boost::serialization::make_nvp(\"GenericValue\",\n+184 boost::serialization::base_object(*this));\n+185 ar & boost::serialization::make_nvp(\"value\", _\bv_\ba_\bl_\bu_\be_\b_);\n+186 }\n+187\n+188\n+189 // Alignment, see https://eigen.tuxfamily.org/dox/\n+group__TopicStructHavingEigenMembers.html\n+190 enum { NeedsToAlign = (sizeof(T) % 16) == 0 };\n+191public:\n+192 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(NeedsToAlign)\n+193};\n+194\n+196#define GTSAM_VALUE_EXPORT(Type) BOOST_CLASS_EXPORT(gtsam::\n+GenericValue)\n+197\n+198// traits\n+199template \n+_\b2_\b0_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be >\n+201 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n+202\n+203// define Value::cast here since now GenericValue has been declared\n+204template\n+_\b2_\b0_\b5const ValueType& _\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\ba_\bs_\bt() const {\n+206 return dynamic_cast&>(*this)._\bv_\ba_\bl_\bu_\be();\n+207}\n+208\n+211template\n+_\b2_\b1_\b2_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b> _\bg_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(const T& v) {\n+213 return _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>(v);\n+214}\n+215\n+216\n+217} /* namespace gtsam */\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:317\n+_\bV_\ba_\bl_\bu_\be_\b._\bh\n+The base class for any variable that can be optimized or used in a factor.\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-Default allocator for list, map, and set types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastDefaultAllocator.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bV_\be_\bc_\bt_\bo_\br_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-Default allocator for vector types (we never use boost pool for vectors)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastDefaultAllocator.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bm_\ba_\bn_\bg_\bl_\be\n+std::string demangle(const char *name)\n+Pretty print Value type name.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.cpp:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n+GenericValue< T > genericValue(const T &v)\n+Functional constructor of GenericValue so T can be automatically deduced.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n+Wraps any type T so it can play as a Value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be_\b_\n+Value * clone_() const override\n+Create a duplicate object returned as a pointer to the generic Value interface.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+T & value()\n+Return the value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt_\b_\n+Value * retract_(const Vector &delta) const override\n+Generic Value interface version of retract.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:122\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+Value & operator=(const Value &rhs) override\n+Assignment operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:158\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &str) const override\n+Virtual print function, uses traits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const GenericValue &other, double tol=1e-9) const\n+non virtual equals function, uses traits\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+Return run-time dimensionality.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n+GenericValue(const T &value)\n+Construct from value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be_\b_\n+void deallocate_() const override\n+Destroy and deallocate this object, only if it was originally allocated using\n+clone_().\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b_\n+T value_\n+The wrapped value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+GenericValue< T > & operator=(const GenericValue< T > &rhs)\n+Assignment operator, protected because only the Value or DERIVED assignment\n+operators should be used.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:171\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+Vector localCoordinates(const GenericValue &value2) const\n+Non-virtual version of localCoordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:148\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs_\b_\n+bool equals_(const Value &p, double tol=1e-9) const override\n+equals implementing generic Value interface\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+const T & value() const\n+Return a constant value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n+~GenericValue() override\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+GenericValue retract(const Vector &delta) const\n+Non-virtual version of retract.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\b_\n+Vector localCoordinates_(const Value &value2) const override\n+Generic Value interface version of localCoordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:133\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+boost::shared_ptr< Value > clone() const override\n+Clone this value (normal clone on the heap, delete with 'delete' operator)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n+This is the base class for any type to be stored in Values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\ba_\bs_\bt\n+const ValueType & cast() const\n+Cast to known ValueType.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:205\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+virtual Value & operator=(const Value &)\n+Assignment operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:79\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n+ * G\bGe\ben\bne\ber\bri\bic\bcV\bVa\bal\blu\bue\be.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00020.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00020.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h File Reference\n \n \n \n \n \n \n \n@@ -99,294 +99,203 @@\n
\n \n-
Matrix.h File Reference
\n+
types.h File Reference
\n
\n
\n \n-

typedef and functions to augment Eigen's MatrixXd \n+

Typedefs for easier changing of types. \n More...

\n \n

Go to the source code of this file.

\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 Classes

struct  gtsam::Reshape< OutM, OutN, OutOptions, InM, InN, InOptions >
 Reshape functor. More...
struct  gtsam::const_selector< TEST_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
 Helper class that uses templates to select between two types based on whether TEST_TYPE is const or not. More...
 
struct  gtsam::Reshape< M, M, InOptions, M, M, InOptions >
 Reshape specialization that does nothing as shape stays the same (needed to not be ambiguous for square input equals square output) More...
struct  gtsam::const_selector< BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
 Specialization for the non-const version. More...
 
struct  gtsam::Reshape< M, N, InOptions, M, N, InOptions >
 Reshape specialization that does nothing as shape stays the same. More...
struct  gtsam::const_selector< const BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
 Specialization for the const version. More...
 
struct  gtsam::Reshape< N, M, InOptions, M, N, InOptions >
 Reshape specialization that does transpose. More...
struct  gtsam::ValueWithDefault< T, defaultValue >
 Helper struct that encapsulates a value with a default, this is just used as a member object so you don't have to specify defaults in the class constructor. More...
 
struct  gtsam::MultiplyWithInverse< N >
 Functor that implements multiplication of a vector b with the inverse of a matrix A. More...
class  gtsam::ListOfOneContainer< T >
 A helper class that behaves as a container with one element, and works with boost::range. More...
 
struct  gtsam::MultiplyWithInverseFunction< T, N >
 Functor that implements multiplication with the inverse of a matrix, itself the result of a function f. More...
class  gtsam::TbbOpenMPMixedScope
 An object whose scope defines a block where TBB and OpenMP parallelism are mixed. More...
 
struct  gtsam::needs_eigen_aligned_allocator< typename, typename >
 A SFINAE trait to mark classes that need special alignment. More...
 
struct  gtsam::needs_eigen_aligned_allocator< T, void_t< typename T::_eigen_aligned_allocator_trait > >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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 Macros

#define GTSAM_MAKE_MATRIX_DEFS(N)
 
\n+#define GTSAM_DEPRECATED
 
\n+#define DO_PRAGMA(x)   _Pragma (#x)
 
\n+#define CLANG_DIAGNOSTIC_PUSH_IGNORE(diag)
 
\n+#define GCC_DIAGNOSTIC_PUSH_IGNORE(diag)
 
\n+#define MSVC_DIAGNOSTIC_PUSH_IGNORE(code)
 
\n+#define DIAGNOSTIC_POP()
 
#define assert_throw(CONDITION, EXCEPTION)
 An assertion that throws an exception if NDEBUG is not defined and evaluates to an empty statement otherwise.
 
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
 This marks a GTSAM object to require alignment.
 
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
 This marks a GTSAM object to require alignment.
 
\n \n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n Typedefs

\n-typedef Eigen::MatrixXd gtsam::Matrix
 
\n-typedef Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > gtsam::MatrixRowMajor
 
\n-typedef Eigen::Block< Matrix > gtsam::SubMatrix
 
\n-typedef Eigen::Block< const Matrix > gtsam::ConstSubMatrix
 
\n+typedef std::uint64_t gtsam::Key
 Integer nonlinear key type.
 
\n+typedef std::uint64_t gtsam::FactorIndex
 Integer nonlinear factor index type.
 
\n+typedef ptrdiff_t gtsam::DenseIndex
 The index type for Eigen objects.
 
\n+template<typename ... >
using gtsam::void_t = void
 Convenience void_t as we assume C++11, it will not conflict the std one in C++17 as this is in gtsam::
 
\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-\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 Functions

\n-const Eigen::IOFormat & gtsam::matlabFormat ()
 
\n-template<class MATRIX >
bool gtsam::equal_with_abs_tol (const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
 equals with a tolerance
 
\n-bool gtsam::operator== (const Matrix &A, const Matrix &B)
 equality is just equal_with_abs_tol 1e-9
 
\n-bool gtsam::operator!= (const Matrix &A, const Matrix &B)
 inequality
 
\n-bool gtsam::assert_equal (const Matrix &A, const Matrix &B, double tol=1e-9)
 equals with an tolerance, prints out message if unequal
 
\n-bool gtsam::assert_inequal (const Matrix &A, const Matrix &B, double tol=1e-9)
 inequals with an tolerance, prints out message if within tolerance
 
\n-bool gtsam::assert_equal (const std::list< Matrix > &As, const std::list< Matrix > &Bs, double tol=1e-9)
 equals with an tolerance, prints out message if unequal
 
\n-bool gtsam::linear_independent (const Matrix &A, const Matrix &B, double tol=1e-9)
 check whether the rows of two matrices are linear independent
 
\n-bool gtsam::linear_dependent (const Matrix &A, const Matrix &B, double tol=1e-9)
 check whether the rows of two matrices are linear dependent
 
\n-Vector gtsam::operator^ (const Matrix &A, const Vector &v)
 overload ^ for trans(A)*v We transpose the vectors for speed.
 
\n-template<class MATRIX >
MATRIX gtsam::prod (const MATRIX &A, const MATRIX &B)
 products using old-style format to improve compatibility
 
\n-void gtsam::print (const Matrix &A, const std::string &s, std::ostream &stream)
 print without optional string, must specify cout yourself
 
\n-void gtsam::print (const Matrix &A, const std::string &s="")
 print with optional string to cout
 
\n-void gtsam::save (const Matrix &A, const std::string &s, const std::string &filename)
 save a matrix to file, which can be loaded by matlab
 
istream & gtsam::operator>> (std::istream &inputStream, Matrix &destinationMatrix)
 Read a matrix from an input stream, such as a file.
 
template<class MATRIX >
Eigen::Block< const MATRIX > gtsam::sub (const MATRIX &A, size_t i1, size_t i2, size_t j1, size_t j2)
 extract submatrix, slice semantics, i.e.
 
template<typename Derived1 , typename Derived2 >
void gtsam::insertSub (Eigen::MatrixBase< Derived1 > &fullMatrix, const Eigen::MatrixBase< Derived2 > &subMatrix, size_t i, size_t j)
 insert a submatrix IN PLACE at a specified location in a larger matrix NOTE: there is no size checking
 
\n-Matrix gtsam::diag (const std::vector< Matrix > &Hs)
 Create a matrix with submatrices along its diagonal.
 
template<class MATRIX >
const MATRIX::ConstColXpr gtsam::column (const MATRIX &A, size_t j)
 Extracts a column view from a matrix that avoids a copy.
 
template<class MATRIX >
const MATRIX::ConstRowXpr gtsam::row (const MATRIX &A, size_t j)
 Extracts a row view from a matrix that avoids a copy.
 
template<class MATRIX >
void gtsam::zeroBelowDiagonal (MATRIX &A, size_t cols=0)
 Zeros all of the elements below the diagonal of a matrix, in place.
 
\n-Matrix gtsam::trans (const Matrix &A)
 static transpose function, just calls Eigen transpose member function
 
\n-template<int OutM, int OutN, int OutOptions, int InM, int InN, int InOptions>
Reshape< OutM, OutN, OutOptions, InM, InN, InOptions >::ReshapedType gtsam::reshape (const Eigen::Matrix< double, InM, InN, InOptions > &m)
 
pair< Matrix, Matrix > gtsam::qr (const Matrix &A)
 Householder QR factorization, Golub & Van Loan p 224, explicit version
\n-
 
void gtsam::inplace_QR (Matrix &A)
 QR factorization using Eigen's internal block QR algorithm.
 
list< boost::tuple< Vector, double, double > > gtsam::weighted_eliminate (Matrix &A, Vector &b, const Vector &sigmas)
 Imperative algorithm for in-place full elimination with weights and constraint handling.
 
void gtsam::householder_ (Matrix &A, size_t k, bool copy_vectors)
 Imperative version of Householder QR factorization, Golub & Van Loan p 224 version with Householder vectors below diagonal, as in GVL.
 
void gtsam::householder (Matrix &A, size_t k)
 Householder tranformation, zeros below diagonal.
 
Vector gtsam::backSubstituteUpper (const Matrix &U, const Vector &b, bool unit=false)
 backSubstitute U*x=b
 
Vector gtsam::backSubstituteUpper (const Vector &b, const Matrix &U, bool unit=false)
 backSubstitute x'*U=b'
 
Vector gtsam::backSubstituteLower (const Matrix &L, const Vector &b, bool unit=false)
 backSubstitute L*x=b
 
Matrix gtsam::stack (size_t nrMatrices,...)
 create a matrix by stacking other matrices Given a set of matrices: A1, A2, A3...
 
\n-Matrix gtsam::stack (const std::vector< Matrix > &blocks)
 
Matrix gtsam::collect (const std::vector< const Matrix * > &matrices, size_t m=0, size_t n=0)
 create a matrix by concatenating Given a set of matrices: A1, A2, A3... If all matrices have the same size, specifying single matrix dimensions will avoid the lookup of dimensions
 
\n-Matrix gtsam::collect (size_t nrMatrices,...)
 
void gtsam::vector_scale_inplace (const Vector &v, Matrix &A, bool inf_mask=false)
 scales a matrix row or column by the values in a vector Arguments (Matrix, Vector) scales the columns, (Vector, Matrix) scales the rows
 
\n-Matrix gtsam::vector_scale (const Vector &v, const Matrix &A, bool inf_mask)
 
\n-Matrix gtsam::vector_scale (const Matrix &A, const Vector &v, bool inf_mask)
 
Matrix3 gtsam::skewSymmetric (double wx, double wy, double wz)
 skew symmetric matrix returns this: 0 -wz wy wz 0 -wx -wy wx 0
 
\n-template<class Derived >
Matrix3 gtsam::skewSymmetric (const Eigen::MatrixBase< Derived > &w)
 
\n-Matrix gtsam::inverse_square_root (const Matrix &A)
 Use Cholesky to calculate inverse square root of a matrix.
 
Matrix gtsam::cholesky_inverse (const Matrix &A)
 Return the inverse of a S.P.D.
 
void gtsam::svd (const Matrix &A, Matrix &U, Vector &S, Matrix &V)
 SVD computes economy SVD A=U*S*V'.
 
boost::tuple< int, double, Vector > gtsam::DLT (const Matrix &A, double rank_tol=1e-9)
 Direct linear transform algorithm that calls svd to find a vector v that minimizes the algebraic error A*v.
 
Matrix gtsam::expm (const Matrix &A, size_t K=7)
 Numerical exponential map, naive approach, not industrial strength !!!
 
\n-std::string gtsam::formatMatrixIndented (const std::string &label, const Matrix &matrix, bool makeVectorHorizontal)
 
\n-Matrix gtsam::LLt (const Matrix &A)
 
\n-Matrix gtsam::RtR (const Matrix &A)
 
\n-Vector gtsam::columnNormSquare (const Matrix &A)
 
std::string gtsam::demangle (const char *name)
 Pretty print Value type name.
 
\n+ gtsam::BOOST_CONCEPT_ASSERT ((boost::RandomAccessRangeConcept< ListOfOneContainer< int > >))
 
\n+template<typename T >
ListOfOneContainer< T > gtsam::ListOfOne (const T &element)
 Factory function for ListOfOneContainer to enable ListOfOne(e) syntax.
 
\n

Detailed Description

\n-

typedef and functions to augment Eigen's MatrixXd

\n-
Author
Christian Potthast
\n-
\n-Kai Ni
\n-
\n-Frank Dellaert
\n-
\n-Alex Cunningham
\n-
\n-Alex Hagiopol
\n-
\n-Varun Agrawal
\n+

Typedefs for easier changing of types.

\n+
Author
Richard Roberts
\n+
Date
Aug 21, 2010
\n

Macro Definition Documentation

\n-\n-

◆ GTSAM_MAKE_MATRIX_DEFS

\n+\n+

◆ assert_throw

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
#define assert_throw( CONDITION,
 EXCEPTION 
)
\n+
\n+Value:
if (!(CONDITION)) { \\
\n+
throw (EXCEPTION); \\
\n+
}
\n+
\n+

An assertion that throws an exception if NDEBUG is not defined and evaluates to an empty statement otherwise.

\n+\n+
\n+
\n+\n+

◆ GTSAM_MAKE_ALIGNED_OPERATOR_NEW

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
\n+
\n+Value:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW \\
\n+
using _eigen_aligned_allocator_trait = void;
\n+
\n+

This marks a GTSAM object to require alignment.

\n+

With this macro an object will automatically be allocated in aligned memory when one uses gtsam::make_shared. It reduces future misalignment problems that is hard to debug. See https://eigen.tuxfamily.org/dox/group__DenseMatrixManipulation__Alignement.html for detailed explanation.

\n+\n+
\n+
\n+\n+

◆ GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF

\n \n
\n
\n \n \n- \n+ \n \n \n- \n+ \n \n \n
#define GTSAM_MAKE_MATRIX_DEFS#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF( N)NeedsToAlign)
\n
\n-Value:
using Matrix##N = Eigen::Matrix<double, N, N>; \\
\n-
using Matrix1##N = Eigen::Matrix<double, 1, N>; \\
\n-
using Matrix2##N = Eigen::Matrix<double, 2, N>; \\
\n-
using Matrix3##N = Eigen::Matrix<double, 3, N>; \\
\n-
using Matrix4##N = Eigen::Matrix<double, 4, N>; \\
\n-
using Matrix5##N = Eigen::Matrix<double, 5, N>; \\
\n-
using Matrix6##N = Eigen::Matrix<double, 6, N>; \\
\n-
using Matrix7##N = Eigen::Matrix<double, 7, N>; \\
\n-
using Matrix8##N = Eigen::Matrix<double, 8, N>; \\
\n-
using Matrix9##N = Eigen::Matrix<double, 9, N>; \\
\n-
static const Eigen::MatrixBase<Matrix##N>::IdentityReturnType I_##N##x##N = Matrix##N::Identity(); \\
\n-
static const Eigen::MatrixBase<Matrix##N>::ConstantReturnType Z_##N##x##N = Matrix##N::Zero();
\n+Value:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\
\n+
using _eigen_aligned_allocator_trait = void;
\n
\n+

This marks a GTSAM object to require alignment.

\n+

With this macro an object will automatically be allocated in aligned memory when one uses gtsam::make_shared. It reduces future misalignment problems that is hard to debug. See https://eigen.tuxfamily.org/dox/group__DenseMatrixManipulation__Alignement.html for detailed explanation.

\n+\n
\n
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,308 +1,138 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Matrix.h File Reference\n-typedef and functions to augment Eigen's MatrixXd _\bM_\bo_\br_\be_\b._\b._\b.\n+types.h File Reference\n+_\bB_\ba_\bs_\be\n+Typedefs for easier changing of types. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bs_\bh_\ba_\bp_\be_\b<_\b _\bO_\bu_\bt_\bM_\b,_\b _\bO_\bu_\bt_\bN_\b,_\b _\bO_\bu_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b,_\b _\bI_\bn_\bM_\b,_\b _\bI_\bn_\bN_\b,_\b _\bI_\bn_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b _\b>\n-\u00a0 _\bR_\be_\bs_\bh_\ba_\bp_\be functor. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\bE_\bS_\bT_\b__\bT_\bY_\bP_\bE_\b,_\b _\bB_\bA_\bS_\bI_\bC_\b__\bT_\bY_\bP_\bE_\b,_\b _\bA_\bS_\b__\bN_\bO_\bN_\b__\bC_\bO_\bN_\bS_\bT_\b,_\b _\bA_\bS_\b__\bC_\bO_\bN_\bS_\bT_\b _\b>\n+\u00a0 Helper class that uses templates to select between two types based on\n+ whether TEST_TYPE is const or not. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bC_\b__\bT_\bY_\bP_\bE_\b,_\b _\bB_\bA_\bS_\bI_\bC_\b__\bT_\bY_\bP_\bE_\b,_\b _\bA_\bS_\b__\bN_\bO_\bN_\b__\bC_\bO_\bN_\bS_\bT_\b,_\b _\bA_\bS_\b__\bC_\bO_\bN_\bS_\bT\n+ _\b>\n+\u00a0 Specialization for the non-const version. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bB_\bA_\bS_\bI_\bC_\b__\bT_\bY_\bP_\bE_\b,_\b _\bB_\bA_\bS_\bI_\bC_\b__\bT_\bY_\bP_\bE_\b,_\b _\bA_\bS_\b__\bN_\bO_\bN_\b__\bC_\bO_\bN_\bS_\bT_\b,\n+ _\bA_\bS_\b__\bC_\bO_\bN_\bS_\bT_\b _\b>\n+\u00a0 Specialization for the const version. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b<_\b _\bT_\b,_\b _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bV_\ba_\bl_\bu_\be_\b _\b>\n+ Helper struct that encapsulates a value with a default, this is just\n+\u00a0 used as a member object so you don't have to specify defaults in the\n+ class constructor. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b<_\b _\bT_\b _\b>\n+\u00a0 A helper class that behaves as a container with one element, and works\n+ with boost::range. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be\n+\u00a0 An object whose scope defines a block where TBB and OpenMP parallelism\n+ are mixed. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bs_\bh_\ba_\bp_\be_\b<_\b _\bM_\b,_\b _\bM_\b,_\b _\bI_\bn_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b,_\b _\bM_\b,_\b _\bM_\b,_\b _\bI_\bn_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b _\b>\n- _\bR_\be_\bs_\bh_\ba_\bp_\be specialization that does nothing as shape stays the same\n-\u00a0 (needed to not be ambiguous for square input equals square output)\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bs_\bh_\ba_\bp_\be_\b<_\b _\bM_\b,_\b _\bN_\b,_\b _\bI_\bn_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b,_\b _\bM_\b,_\b _\bN_\b,_\b _\bI_\bn_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b _\b>\n-\u00a0 _\bR_\be_\bs_\bh_\ba_\bp_\be specialization that does nothing as shape stays the same.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bs_\bh_\ba_\bp_\be_\b<_\b _\bN_\b,_\b _\bM_\b,_\b _\bI_\bn_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b,_\b _\bM_\b,_\b _\bN_\b,_\b _\bI_\bn_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b _\b>\n-\u00a0 _\bR_\be_\bs_\bh_\ba_\bp_\be specialization that does transpose. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\b<_\b _\bN_\b _\b>\n-\u00a0 Functor that implements multiplication of a vector b with the inverse\n- of a matrix A. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bT_\b,_\b _\bN_\b _\b>\n-\u00a0 Functor that implements multiplication with the inverse of a matrix,\n- itself the result of a function f. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\b>\n+\u00a0 A SFINAE trait to mark classes that need special alignment. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bv_\bo_\bi_\bd_\b__\bt_\b<_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\b:_\b:\n+ _\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b__\bt_\br_\ba_\bi_\bt_\b _\b>_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bM_\bA_\bT_\bR_\bI_\bX_\b__\bD_\bE_\bF_\bS(N)\n+#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_D\bDE\bEP\bPR\bRE\bEC\bCA\bAT\bTE\bED\bD\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n- typedef Eigen::MatrixXd\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:M\bMa\bat\btr\bri\bix\bx\n+#define\u00a0 D\bDO\bO_\b_P\bPR\bRA\bAG\bGM\bMA\bA(x)\u00a0\u00a0\u00a0_Pragma (#x)\n \u00a0\n-typedef Eigen::Matrix< double, Eigen::Dynamic, Eigen::\n- Dynamic, Eigen::RowMajor >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:M\bMa\bat\btr\bri\bix\bxR\bRo\bow\bwM\bMa\baj\bjo\bor\br\n+#define\u00a0 C\bCL\bLA\bAN\bNG\bG_\b_D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bC_\b_P\bPU\bUS\bSH\bH_\b_I\bIG\bGN\bNO\bOR\bRE\bE(diag)\n \u00a0\n- typedef Eigen::Block< Matrix >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSu\bub\bbM\bMa\bat\btr\bri\bix\bx\n+#define\u00a0 G\bGC\bCC\bC_\b_D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bC_\b_P\bPU\bUS\bSH\bH_\b_I\bIG\bGN\bNO\bOR\bRE\bE(diag)\n \u00a0\n- typedef Eigen::Block< const Matrix >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bon\bns\bst\btS\bSu\bub\bbM\bMa\bat\btr\bri\bix\bx\n+#define\u00a0 M\bMS\bSV\bVC\bC_\b_D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bC_\b_P\bPU\bUS\bSH\bH_\b_I\bIG\bGN\bNO\bOR\bRE\bE(code)\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- const Eigen::IOFormat &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bma\bat\btl\bla\bab\bbF\bFo\bor\brm\bma\bat\bt ()\n+#define\u00a0 D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bC_\b_P\bPO\bOP\bP()\n+\u00a0\n+#define\u00a0 _\ba_\bs_\bs_\be_\br_\bt_\b__\bt_\bh_\br_\bo_\bw(CONDITION, EXCEPTION)\n+\u00a0 An assertion that throws an exception if NDEBUG is not defined and\n+ evaluates to an empty statement otherwise.\n+\u00a0\n+#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+\u00a0 This marks a GTSAM object to require alignment.\n+\u00a0\n+#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(NeedsToAlign)\n+\u00a0 This marks a GTSAM object to require alignment.\n \u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl_\b_w\bwi\bit\bth\bh_\b_a\bab\bbs\bs_\b_t\bto\bol\bl (const Eigen::\n- DenseBase< MATRIX > &A, const Eigen::\n- DenseBase< MATRIX > &B, double tol=1e-9)\n-\u00a0 equals with a tolerance\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br=\b==\b= (const Matrix &A, const\n- Matrix &B)\n-\u00a0 equality is just equal_with_abs_tol 1e-9\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br!\b!=\b= (const Matrix &A, const\n- Matrix &B)\n-\u00a0 inequality\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const Matrix &A,\n- const Matrix &B, double tol=1e-9)\n-\u00a0 equals with an tolerance, prints out\n- message if unequal\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_i\bin\bne\beq\bqu\bua\bal\bl (const Matrix &A,\n- const Matrix &B, double tol=1e-9)\n-\u00a0 inequals with an tolerance, prints out\n- message if within tolerance\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const std::list<\n- Matrix > &As, const std::list< Matrix >\n- &Bs, double tol=1e-9)\n-\u00a0 equals with an tolerance, prints out\n- message if unequal\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bli\bin\bne\bea\bar\br_\b_i\bin\bnd\bde\bep\bpe\ben\bnd\bde\ben\bnt\bt (const Matrix\n- &A, const Matrix &B, double tol=1e-9)\n-\u00a0 check whether the rows of two matrices\n- are linear independent\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bli\bin\bne\bea\bar\br_\b_d\bde\bep\bpe\ben\bnd\bde\ben\bnt\bt (const Matrix &A,\n- const Matrix &B, double tol=1e-9)\n-\u00a0 check whether the rows of two matrices\n- are linear dependent\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br^\b^ (const Matrix &A, const\n- Vector &v)\n-\u00a0 overload ^ for trans(A)*v We transpose\n- the vectors for speed.\n-\u00a0\n-template\n- MATRIX\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bro\bod\bd (const MATRIX &A, const\n- MATRIX &B)\n-\u00a0 products using old-style format to\n- improve compatibility\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Matrix &A, const\n- std::string &s, std::ostream &stream)\n-\u00a0 print without optional string, must\n- specify cout yourself\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Matrix &A, const\n- std::string &s=\"\")\n-\u00a0 print with optional string to cout\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsa\bav\bve\be (const Matrix &A, const std::\n- string &s, const std::string &filename)\n-\u00a0 save a matrix to file, which can be\n- loaded by matlab\n-\u00a0\n- istream &\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b> (std::istream\n- &inputStream, Matrix &destinationMatrix)\n-\u00a0 Read a matrix from an input stream, such\n- as a file.\n-\u00a0\n-template\n- Eigen::Block< const MATRIX >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bu_\bb (const MATRIX &A, size_t i1,\n- size_t i2, size_t j1, size_t j2)\n-\u00a0 extract submatrix, slice semantics, i.e.\n-\u00a0\n-template\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bS_\bu_\bb (Eigen::MatrixBase<\n- Derived1 > &fullMatrix, const Eigen::\n- MatrixBase< Derived2 > &subMatrix, size_t\n- i, size_t j)\n- insert a submatrix IN PLACE at a\n-\u00a0 specified location in a larger matrix\n- NOTE: there is no size checking\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bia\bag\bg (const std::vector< Matrix >\n- &Hs)\n-\u00a0 Create a matrix with submatrices along\n- its diagonal.\n-\u00a0\n-template\n- const MATRIX::ConstColXpr\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bl_\bu_\bm_\bn (const MATRIX &A, size_t j)\n-\u00a0 Extracts a column view from a matrix that\n- avoids a copy.\n-\u00a0\n-template\n- const MATRIX::ConstRowXpr\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\bo_\bw (const MATRIX &A, size_t j)\n-\u00a0 Extracts a row view from a matrix that\n- avoids a copy.\n-\u00a0\n-template\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bz_\be_\br_\bo_\bB_\be_\bl_\bo_\bw_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl (MATRIX &A,\n- size_t cols=0)\n-\u00a0 Zeros all of the elements below the\n- diagonal of a matrix, in place.\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\btr\bra\ban\bns\bs (const Matrix &A)\n-\u00a0 static transpose function, just calls\n- Eigen transpose member function\n-\u00a0\n-template\n-_\bR_\be_\bs_\bh_\ba_\bp_\be< OutM, OutN, OutOptions, InM, g\bgt\bts\bsa\bam\bm:\b::\b:r\bre\bes\bsh\bha\bap\bpe\be (const Eigen::Matrix<\n- InN, InOptions >::ReshapedType\u00a0 double, InM, InN, InOptions > &m)\n-\u00a0\n- pair< Matrix, Matrix >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bq_\br (const Matrix &A)\n- Householder QR factorization, Golub & Van\n-\u00a0 Loan p 224, explicit version\n-\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bp_\bl_\ba_\bc_\be_\b__\bQ_\bR (Matrix &A)\n-\u00a0 QR factorization using Eigen's internal\n- block QR algorithm.\n-\u00a0\n- list< boost::tuple< Vector, double, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\b__\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be (Matrix &A,\n- double > >\u00a0 Vector &b, const Vector &sigmas)\n- Imperative algorithm for in-place full\n-\u00a0 elimination with weights and constraint\n- handling.\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br_\b_ (Matrix &A, size_t k,\n- bool copy_vectors)\n- Imperative version of Householder QR\n-\u00a0 factorization, Golub & Van Loan p 224\n- version with Householder vectors below\n- diagonal, as in GVL.\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br (Matrix &A, size_t k)\n-\u00a0 Householder tranformation, zeros below\n- diagonal.\n-\u00a0\n- Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br (const Matrix\n- &U, const Vector &b, bool unit=false)\n-\u00a0 backSubstitute U*x=b\n-\u00a0\n- Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br (const Vector\n- &b, const Matrix &U, bool unit=false)\n-\u00a0 backSubstitute x'*U=b'\n-\u00a0\n- Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bL_\bo_\bw_\be_\br (const Matrix\n- &L, const Vector &b, bool unit=false)\n-\u00a0 backSubstitute L*x=b\n-\u00a0\n- Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\ba_\bc_\bk (size_t nrMatrices,...)\n- create a matrix by stacking other\n-\u00a0 matrices Given a set of matrices: A1, A2,\n- A3...\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bta\bac\bck\bk (const std::vector< Matrix >\n- &blocks)\n-\u00a0\n- Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bl_\bl_\be_\bc_\bt (const std::vector< const\n- Matrix * > &matrices, size_t m=0, size_t\n- n=0)\n- create a matrix by concatenating Given a\n- set of matrices: A1, A2, A3... If all\n-\u00a0 matrices have the same size, specifying\n- single matrix dimensions will avoid the\n- lookup of dimensions\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bol\bll\ble\bec\bct\bt (size_t nrMatrices,...)\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bc_\ba_\bl_\be_\b__\bi_\bn_\bp_\bl_\ba_\bc_\be (const Vector\n- &v, Matrix &A, bool inf_mask=false)\n- scales a matrix row or column by the\n-\u00a0 values in a vector Arguments (Matrix,\n- Vector) scales the columns, (Vector,\n- Matrix) scales the rows\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:v\bve\bec\bct\bto\bor\br_\b_s\bsc\bca\bal\ble\be (const Vector &v,\n- const Matrix &A, bool inf_mask)\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:v\bve\bec\bct\bto\bor\br_\b_s\bsc\bca\bal\ble\be (const Matrix &A,\n- const Vector &v, bool inf_mask)\n-\u00a0\n- Matrix3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bk_\be_\bw_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc (double wx, double\n- wy, double wz)\n-\u00a0 skew symmetric matrix returns this: 0 -wz\n- wy wz 0 -wx -wy wx 0\n-\u00a0\n-template\n- Matrix3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsk\bke\bew\bwS\bSy\bym\bmm\bme\bet\btr\bri\bic\bc (const Eigen::\n- MatrixBase< Derived > &w)\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnv\bve\ber\brs\bse\be_\b_s\bsq\bqu\bua\bar\bre\be_\b_r\bro\boo\bot\bt (const Matrix\n- &A)\n-\u00a0 Use Cholesky to calculate inverse square\n- root of a matrix.\n-\u00a0\n- Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b__\bi_\bn_\bv_\be_\br_\bs_\be (const Matrix &A)\n-\u00a0 Return the inverse of a S.P.D.\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bv_\bd (const Matrix &A, Matrix &U,\n- Vector &S, Matrix &V)\n-\u00a0 SVD computes economy SVD A=U*S*V'.\n-\u00a0\n- boost::tuple< int, double, Vector >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bL_\bT (const Matrix &A, double\n- rank_tol=1e-9)\n- Direct linear transform algorithm that\n-\u00a0 calls svd to find a vector v that\n- minimizes the algebraic error A*v.\n-\u00a0\n- Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm (const Matrix &A, size_t K=7)\n-\u00a0 Numerical exponential map, naive\n- approach, not industrial strength !!!\n-\u00a0\n- std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:f\bfo\bor\brm\bma\bat\btM\bMa\bat\btr\bri\bix\bxI\bIn\bnd\bde\ben\bnt\bte\bed\bd (const std::\n- string &label, const Matrix &matrix, bool\n- makeVectorHorizontal)\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef std::uint64_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\by\n+\u00a0 Integer nonlinear key type.\n+\u00a0\n+typedef std::uint64_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:F\bFa\bac\bct\bto\bor\brI\bIn\bnd\bde\bex\bx\n+\u00a0 Integer nonlinear factor index type.\n+\u00a0\n+ typedef ptrdiff_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDe\ben\bns\bse\beI\bIn\bnd\bde\bex\bx\n+\u00a0 The index type for Eigen objects.\n \u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:L\bLL\bLt\bt (const Matrix &A)\n+template\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:v\bvo\boi\bid\bd_\b_t\bt = void\n+\u00a0 Convenience void_t as we assume C++11, it will not\n+ conflict the std one in C++17 as this is in gtsam::\n \u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:R\bRt\btR\bR (const Matrix &A)\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ std::string\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bm_\ba_\bn_\bg_\bl_\be (const char *name)\n+\u00a0 Pretty print _\bV_\ba_\bl_\bu_\be type name.\n \u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bol\blu\bum\bmn\bnN\bNo\bor\brm\bmS\bSq\bqu\bua\bar\bre\be (const Matrix &A)\n+ \u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBO\bOO\bOS\bST\bT_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_A\bAS\bSS\bSE\bER\bRT\bT ((boost::\n+ RandomAccessRangeConcept< _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br< int >\n+ >))\n+\u00a0\n+template\n+_\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br< T >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:L\bLi\bis\bst\btO\bOf\bfO\bOn\bne\be (const T &element)\n+\u00a0 Factory function for _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br to enable\n+ ListOfOne(e) syntax.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-typedef and functions to augment Eigen's MatrixXd\n+Typedefs for easier changing of types.\n Author\n- Christian Potthast\n- Kai Ni\n- Frank Dellaert\n- Alex Cunningham\n- Alex Hagiopol\n- Varun Agrawal\n+ Richard Roberts\n+ Date\n+ Aug 21, 2010\n *\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_M\bMA\bAK\bKE\bE_\b_M\bMA\bAT\bTR\bRI\bIX\bX_\b_D\bDE\bEF\bFS\bS *\b**\b**\b**\b**\b*\n-#define GTSAM_MAKE_MATRIX_DEFS ( \u00a0 N )\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0a\bas\bss\bse\ber\brt\bt_\b_t\bth\bhr\bro\bow\bw *\b**\b**\b**\b**\b*\n+#define assert_throw ( \u00a0 CONDITION,\n+ \u00a0 EXCEPTION\u00a0\n+ )\n+V\bVa\bal\blu\bue\be:\b:\n+if (!(CONDITION)) { \\\n+throw (EXCEPTION); \\\n+}\n+An assertion that throws an exception if NDEBUG is not defined and evaluates to\n+an empty statement otherwise.\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_M\bMA\bAK\bKE\bE_\b_A\bAL\bLI\bIG\bGN\bNE\bED\bD_\b_O\bOP\bPE\bER\bRA\bAT\bTO\bOR\bR_\b_N\bNE\bEW\bW *\b**\b**\b**\b**\b*\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+V\bVa\bal\blu\bue\be:\b:\n+EIGEN_MAKE_ALIGNED_OPERATOR_NEW \\\n+using _eigen_aligned_allocator_trait = void;\n+This marks a GTSAM object to require alignment.\n+With this macro an object will automatically be allocated in aligned memory\n+when one uses _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd. It reduces future misalignment problems that\n+is hard to debug. See _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\be_\bi_\bg_\be_\bn_\b._\bt_\bu_\bx_\bf_\ba_\bm_\bi_\bl_\by_\b._\bo_\br_\bg_\b/_\bd_\bo_\bx_\b/\n+_\bg_\br_\bo_\bu_\bp_\b__\b__\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\bM_\ba_\bn_\bi_\bp_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b__\b__\bA_\bl_\bi_\bg_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bt_\bm_\bl for detailed explanation.\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_M\bMA\bAK\bKE\bE_\b_A\bAL\bLI\bIG\bGN\bNE\bED\bD_\b_O\bOP\bPE\bER\bRA\bAT\bTO\bOR\bR_\b_N\bNE\bEW\bW_\b_I\bIF\bF *\b**\b**\b**\b**\b*\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF ( \u00a0 NeedsToAlign )\n V\bVa\bal\blu\bue\be:\b:\n-using Matrix##N = Eigen::Matrix; \\\n-using Matrix1##N = Eigen::Matrix; \\\n-using Matrix2##N = Eigen::Matrix; \\\n-using Matrix3##N = Eigen::Matrix; \\\n-using Matrix4##N = Eigen::Matrix; \\\n-using Matrix5##N = Eigen::Matrix; \\\n-using Matrix6##N = Eigen::Matrix; \\\n-using Matrix7##N = Eigen::Matrix; \\\n-using Matrix8##N = Eigen::Matrix; \\\n-using Matrix9##N = Eigen::Matrix; \\\n-static const Eigen::MatrixBase::IdentityReturnType I_##N##x##N =\n-Matrix##N::Identity(); \\\n-static const Eigen::MatrixBase::ConstantReturnType Z_##N##x##N =\n-Matrix##N::Zero();\n+EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\\n+using _eigen_aligned_allocator_trait = void;\n+This marks a GTSAM object to require alignment.\n+With this macro an object will automatically be allocated in aligned memory\n+when one uses _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd. It reduces future misalignment problems that\n+is hard to debug. See _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\be_\bi_\bg_\be_\bn_\b._\bt_\bu_\bx_\bf_\ba_\bm_\bi_\bl_\by_\b._\bo_\br_\bg_\b/_\bd_\bo_\bx_\b/\n+_\bg_\br_\bo_\bu_\bp_\b__\b__\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\bM_\ba_\bn_\bi_\bp_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b__\b__\bA_\bl_\bi_\bg_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bt_\bm_\bl for detailed explanation.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+ * _\bt_\by_\bp_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00020.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00020.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,46 +1,19 @@\n var a00020 = [\n- [\"gtsam::Reshape< OutM, OutN, OutOptions, InM, InN, InOptions >\", \"a02416.html\", null],\n- [\"gtsam::Reshape< M, M, InOptions, M, M, InOptions >\", \"a02420.html\", null],\n- [\"gtsam::Reshape< M, N, InOptions, M, N, InOptions >\", \"a02424.html\", null],\n- [\"gtsam::Reshape< N, M, InOptions, M, N, InOptions >\", \"a02428.html\", null],\n- [\"gtsam::MultiplyWithInverse< N >\", \"a02432.html\", \"a02432\"],\n- [\"gtsam::MultiplyWithInverseFunction< T, N >\", \"a02436.html\", \"a02436\"],\n- [\"assert_equal\", \"a00020.html#a3f9622226dfe06908f11b42bf0bdd22d\", null],\n- [\"assert_equal\", \"a00020.html#abb0e19bbbeaca95843e8161b89a12fda\", null],\n- [\"assert_inequal\", \"a00020.html#a7a116d0643f123ef3b15d91056506492\", null],\n- [\"backSubstituteLower\", \"a00020.html#a0d998e1b770c9864946ddb031b1c4522\", null],\n- [\"backSubstituteUpper\", \"a00020.html#a6c4876cbe85d5651a52eda0e97c60f2f\", null],\n- [\"backSubstituteUpper\", \"a00020.html#a8b0bf332d52b333dab2b20d763c8925b\", null],\n- [\"cholesky_inverse\", \"a00020.html#aba542e2cd85f08b76f80a0871a4ea713\", null],\n- [\"collect\", \"a00020.html#ad8b524ba6c9aed0d21a020999c9b5d88\", null],\n- [\"column\", \"a00020.html#a559dba69e2854eb66e34222f60f55722\", null],\n- [\"diag\", \"a00020.html#af1c32907adce74cf9edd6ee5bba5a085\", null],\n- [\"DLT\", \"a00020.html#ab2c65f1a69009a306b6a5f9ef31dcee2\", null],\n- [\"equal_with_abs_tol\", \"a00020.html#af31e657258505b2e5148846ebbaa3195\", null],\n- [\"expm\", \"a00020.html#ab15462d8c16813d0a7a5b1f76a2f64b7\", null],\n- [\"householder\", \"a00020.html#a7baa2f3184a444adce108633c0265e0c\", null],\n- [\"householder_\", \"a00020.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\", null],\n- [\"inplace_QR\", \"a00020.html#a7eec9339ab5a008a28ddfaa6b2c94611\", null],\n- [\"insertSub\", \"a00020.html#ad1088fa2d1494e6a4123a6bc3f5c2d7e\", null],\n- [\"inverse_square_root\", \"a00020.html#aff78dee59ac0250432081f39deb5f6d1\", null],\n- [\"linear_dependent\", \"a00020.html#a4b81794af72954abafbb726fc712f5db\", null],\n- [\"linear_independent\", \"a00020.html#ad8f0349471464c1fb515819d9503849a\", null],\n- [\"operator!=\", \"a00020.html#ab235abf7505b634be2165e0db58239dd\", null],\n- [\"operator==\", \"a00020.html#afd5b3cf3f54adcbdd6d9e7403f1a792f\", null],\n- [\"operator>>\", \"a00020.html#a7d85957bab2d18cf56ab9aaf95a106de\", null],\n- [\"operator^\", \"a00020.html#a2218e53a2b99c449e70aa5b7805895fc\", null],\n- [\"print\", \"a00020.html#a54fa43c89c5334314c8c75939dd5c2d7\", null],\n- [\"print\", \"a00020.html#a44ead03912d5dcf094d8421e1702ee71\", null],\n- [\"prod\", \"a00020.html#abc29e3164ed30e785a3c48dfd1aa6ca5\", null],\n- [\"qr\", \"a00020.html#ae32c295e2c40c1e85f146a8a6266eaa8\", null],\n- [\"row\", \"a00020.html#a2754f325c8600303d627d9e8cf1f9949\", null],\n- [\"save\", \"a00020.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\", null],\n- [\"skewSymmetric\", \"a00020.html#a97f108d19e52c83c331c55d35b23796e\", null],\n- [\"stack\", \"a00020.html#a5c82884a356ddd09229a5283aed04df9\", null],\n- [\"sub\", \"a00020.html#a9ae1d9fe2ccad044fbb88b5c1d9e035a\", null],\n- [\"svd\", \"a00020.html#a8d7e46204d953f64a39445599dbd7eee\", null],\n- [\"trans\", \"a00020.html#aa2e36d7ab63000feddaeb61bbfcf2db1\", null],\n- [\"vector_scale_inplace\", \"a00020.html#a24d3ad0252f91f0ec301593c45cf5af7\", null],\n- [\"weighted_eliminate\", \"a00020.html#a60019a03f26b92c6b2a08e43d153d4c0\", null],\n- [\"zeroBelowDiagonal\", \"a00020.html#a57edf6ed7312f63d35f73233665c334d\", null]\n+ [\"gtsam::const_selector< TEST_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >\", \"a02536.html\", null],\n+ [\"gtsam::const_selector< BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >\", \"a02540.html\", null],\n+ [\"gtsam::const_selector< const BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >\", \"a02544.html\", null],\n+ [\"gtsam::ValueWithDefault< T, defaultValue >\", \"a02548.html\", \"a02548\"],\n+ [\"gtsam::ListOfOneContainer< T >\", \"a02552.html\", null],\n+ [\"gtsam::TbbOpenMPMixedScope\", \"a02556.html\", null],\n+ [\"gtsam::needs_eigen_aligned_allocator< typename, typename >\", \"a02560.html\", null],\n+ [\"gtsam::needs_eigen_aligned_allocator< T, void_t< typename T::_eigen_aligned_allocator_trait > >\", \"a02564.html\", null],\n+ [\"assert_throw\", \"a00020.html#a30d3af2da1ea940197addce4f3c223c8\", null],\n+ [\"GTSAM_MAKE_ALIGNED_OPERATOR_NEW\", \"a00020.html#aa123dd61687e08ae328154a1890b7b86\", null],\n+ [\"GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF\", \"a00020.html#a352ab46cee3a766e30b049690802fb0a\", null],\n+ [\"DenseIndex\", \"a00020.html#a21006f326f57cdf7d3f35fec40f43e40\", null],\n+ [\"FactorIndex\", \"a00020.html#a19c53f2faabb0f4b4b78ce2f7168cc14\", null],\n+ [\"Key\", \"a00020.html#adad029f5f6ffce610428b5fe768b0df2\", null],\n+ [\"void_t\", \"a00020.html#a6525d741529c7a2cd91fa913431f5fb7\", null],\n+ [\"demangle\", \"a00020.html#a0b97fc96e5f69236e81489c66d5b92ba\", null],\n+ [\"ListOfOne\", \"a00020.html#a045b43784acac77531813c4ab6c4d281\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00020_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00020_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h Source File\n \n \n \n \n \n \n \n@@ -98,397 +98,318 @@\n
No Matches
\n
\n \n \n \n \n
\n-
Matrix.h
\n+
types.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
23// \\callgraph
\n-
24
\n-
25#pragma once
\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/dllexport.h>
\n+
23#include <boost/concept/assert.hpp>
\n+
24#include <boost/range/concepts.hpp>
\n+
25#include <gtsam/config.h> // for GTSAM_USE_TBB
\n
26
\n-\n-
28#include <gtsam/base/Vector.h>
\n-
29#include <boost/tuple/tuple.hpp>
\n-
30
\n-
31#include <vector>
\n+
27#include <cstddef>
\n+
28#include <cstdint>
\n+
29
\n+
30#include <exception>
\n+
31#include <string>
\n
32
\n-
38namespace gtsam {
\n-
39
\n-
40typedef Eigen::MatrixXd Matrix;
\n-
41typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> MatrixRowMajor;
\n-
42
\n-
43// Create handy typedefs and constants for square-size matrices
\n-
44// MatrixMN, MatrixN = MatrixNN, I_NxN, and Z_NxN, for M,N=1..9
\n-
45#define GTSAM_MAKE_MATRIX_DEFS(N) \\
\n-
46using Matrix##N = Eigen::Matrix<double, N, N>; \\
\n-
47using Matrix1##N = Eigen::Matrix<double, 1, N>; \\
\n-
48using Matrix2##N = Eigen::Matrix<double, 2, N>; \\
\n-
49using Matrix3##N = Eigen::Matrix<double, 3, N>; \\
\n-
50using Matrix4##N = Eigen::Matrix<double, 4, N>; \\
\n-
51using Matrix5##N = Eigen::Matrix<double, 5, N>; \\
\n-
52using Matrix6##N = Eigen::Matrix<double, 6, N>; \\
\n-
53using Matrix7##N = Eigen::Matrix<double, 7, N>; \\
\n-
54using Matrix8##N = Eigen::Matrix<double, 8, N>; \\
\n-
55using Matrix9##N = Eigen::Matrix<double, 9, N>; \\
\n-
56static const Eigen::MatrixBase<Matrix##N>::IdentityReturnType I_##N##x##N = Matrix##N::Identity(); \\
\n-
57static const Eigen::MatrixBase<Matrix##N>::ConstantReturnType Z_##N##x##N = Matrix##N::Zero();
\n-
58
\n-
59GTSAM_MAKE_MATRIX_DEFS(1)
\n-
60GTSAM_MAKE_MATRIX_DEFS(2)
\n-
61GTSAM_MAKE_MATRIX_DEFS(3)
\n-
62GTSAM_MAKE_MATRIX_DEFS(4)
\n-
63GTSAM_MAKE_MATRIX_DEFS(5)
\n-
64GTSAM_MAKE_MATRIX_DEFS(6)
\n-
65GTSAM_MAKE_MATRIX_DEFS(7)
\n-
66GTSAM_MAKE_MATRIX_DEFS(8)
\n-
67GTSAM_MAKE_MATRIX_DEFS(9)
\n-
68
\n-
69// Matrix expressions for accessing parts of matrices
\n-
70typedef Eigen::Block<Matrix> SubMatrix;
\n-
71typedef Eigen::Block<const Matrix> ConstSubMatrix;
\n-
72
\n-
73// Matrix formatting arguments when printing.
\n-
74// Akin to Matlab style.
\n-
75const Eigen::IOFormat& matlabFormat();
\n-
76
\n-
80template <class MATRIX>
\n-
\n-
81bool equal_with_abs_tol(const Eigen::DenseBase<MATRIX>& A, const Eigen::DenseBase<MATRIX>& B, double tol = 1e-9) {
\n-
82
\n-
83 const size_t n1 = A.cols(), m1 = A.rows();
\n-
84 const size_t n2 = B.cols(), m2 = B.rows();
\n-
85
\n-
86 if(m1!=m2 || n1!=n2) return false;
\n-
87
\n-
88 for(size_t i=0; i<m1; i++)
\n-
89 for(size_t j=0; j<n1; j++) {
\n-
90 if(!fpEqual(A(i,j), B(i,j), tol, false)) {
\n-
91 return false;
\n-
92 }
\n-
93 }
\n-
94 return true;
\n-
95}
\n-
\n-
96
\n-
\n-
100inline bool operator==(const Matrix& A, const Matrix& B) {
\n-
101 return equal_with_abs_tol(A,B,1e-9);
\n-
102}
\n-
\n-
103
\n-
\n-
107inline bool operator!=(const Matrix& A, const Matrix& B) {
\n-
108 return !(A==B);
\n-
109 }
\n-
\n-
110
\n-
114GTSAM_EXPORT bool assert_equal(const Matrix& A, const Matrix& B, double tol = 1e-9);
\n-
115
\n-
119GTSAM_EXPORT bool assert_inequal(const Matrix& A, const Matrix& B, double tol = 1e-9);
\n-
120
\n-
124GTSAM_EXPORT bool assert_equal(const std::list<Matrix>& As, const std::list<Matrix>& Bs, double tol = 1e-9);
\n-
125
\n-
129GTSAM_EXPORT bool linear_independent(const Matrix& A, const Matrix& B, double tol = 1e-9);
\n-
130
\n-
134GTSAM_EXPORT bool linear_dependent(const Matrix& A, const Matrix& B, double tol = 1e-9);
\n-
135
\n-
140GTSAM_EXPORT Vector operator^(const Matrix& A, const Vector & v);
\n-
141
\n-
143template<class MATRIX>
\n-
\n-
144inline MATRIX prod(const MATRIX& A, const MATRIX&B) {
\n-
145 MATRIX result = A * B;
\n-
146 return result;
\n-
147}
\n-
\n+
33#ifdef GTSAM_USE_TBB
\n+
34#include <tbb/scalable_allocator.h>
\n+
35#endif
\n+
36
\n+
37#if defined(__GNUC__) || defined(__clang__)
\n+
38#define GTSAM_DEPRECATED __attribute__((deprecated))
\n+
39#elif defined(_MSC_VER)
\n+
40#define GTSAM_DEPRECATED __declspec(deprecated)
\n+
41#else
\n+
42#define GTSAM_DEPRECATED
\n+
43#endif
\n+
44
\n+
45#ifdef GTSAM_USE_EIGEN_MKL_OPENMP
\n+
46#include <omp.h>
\n+
47#endif
\n+
48
\n+
49/* Define macros for ignoring compiler warnings.
\n+
50 * Usage Example:
\n+
51 * ```
\n+
52 * CLANG_DIAGNOSTIC_PUSH_IGNORE("-Wdeprecated-declarations")
\n+
53 * GCC_DIAGNOSTIC_PUSH_IGNORE("-Wdeprecated-declarations")
\n+
54 * MSVC_DIAGNOSTIC_PUSH_IGNORE(4996)
\n+
55 * // ... code you want to suppress deprecation warnings for ...
\n+
56 * DIAGNOSTIC_POP()
\n+
57 * ```
\n+
58 */
\n+
59#define DO_PRAGMA(x) _Pragma (#x)
\n+
60#ifdef __clang__
\n+
61# define CLANG_DIAGNOSTIC_PUSH_IGNORE(diag) \\
\n+
62 _Pragma("clang diagnostic push") \\
\n+
63 DO_PRAGMA(clang diagnostic ignored diag)
\n+
64#else
\n+
65# define CLANG_DIAGNOSTIC_PUSH_IGNORE(diag)
\n+
66#endif
\n+
67
\n+
68#ifdef __GNUC__
\n+
69# define GCC_DIAGNOSTIC_PUSH_IGNORE(diag) \\
\n+
70 _Pragma("GCC diagnostic push") \\
\n+
71 DO_PRAGMA(GCC diagnostic ignored diag)
\n+
72#else
\n+
73# define GCC_DIAGNOSTIC_PUSH_IGNORE(diag)
\n+
74#endif
\n+
75
\n+
76#ifdef _MSC_VER
\n+
77# define MSVC_DIAGNOSTIC_PUSH_IGNORE(code) \\
\n+
78 _Pragma("warning ( push )") \\
\n+
79 DO_PRAGMA(warning ( disable : code ))
\n+
80#else
\n+
81# define MSVC_DIAGNOSTIC_PUSH_IGNORE(code)
\n+
82#endif
\n+
83
\n+
84#if defined(__clang__)
\n+
85# define DIAGNOSTIC_POP() _Pragma("clang diagnostic pop")
\n+
86#elif defined(__GNUC__)
\n+
87# define DIAGNOSTIC_POP() _Pragma("GCC diagnostic pop")
\n+
88#elif defined(_MSC_VER)
\n+
89# define DIAGNOSTIC_POP() _Pragma("warning ( pop )")
\n+
90#else
\n+
91# define DIAGNOSTIC_POP()
\n+
92#endif
\n+
93
\n+
94namespace gtsam {
\n+
95
\n+
97 std::string GTSAM_EXPORT demangle(const char* name);
\n+
98
\n+
100 typedef std::uint64_t Key;
\n+
101
\n+
103 typedef std::uint64_t FactorIndex;
\n+
104
\n+
106 typedef ptrdiff_t DenseIndex;
\n+
107
\n+
108 /* ************************************************************************* */
\n+
113 template<typename TEST_TYPE, typename BASIC_TYPE, typename AS_NON_CONST,
\n+
114 typename AS_CONST>
\n+
\n+\n+
116 };
\n+
\n+
117
\n+
119 template<typename BASIC_TYPE, typename AS_NON_CONST, typename AS_CONST>
\n+
\n+
120 struct const_selector<BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST> {
\n+
121 typedef AS_NON_CONST type;
\n+
122 };
\n+
\n+
123
\n+
125 template<typename BASIC_TYPE, typename AS_NON_CONST, typename AS_CONST>
\n+
\n+
126 struct const_selector<const BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST> {
\n+
127 typedef AS_CONST type;
\n+
128 };
\n+
\n+
129
\n+
130 /* ************************************************************************* */
\n+
136 template<typename T, T defaultValue>
\n+
\n+\n+
138 T value;
\n+
139
\n+
141 ValueWithDefault() : value(defaultValue) {}
\n+
142
\n+
144 ValueWithDefault(const T& _value) : value(_value) {}
\n+
145
\n+
147 T& operator*() { return value; }
\n
148
\n-
152GTSAM_EXPORT void print(const Matrix& A, const std::string& s, std::ostream& stream);
\n-
153
\n-
157GTSAM_EXPORT void print(const Matrix& A, const std::string& s = "");
\n-
158
\n-
162GTSAM_EXPORT void save(const Matrix& A, const std::string &s, const std::string& filename);
\n-
163
\n-
169GTSAM_EXPORT std::istream& operator>>(std::istream& inputStream, Matrix& destinationMatrix);
\n-
170
\n-
180template<class MATRIX>
\n-
\n-
181Eigen::Block<const MATRIX> sub(const MATRIX& A, size_t i1, size_t i2, size_t j1, size_t j2) {
\n-
182 size_t m=i2-i1, n=j2-j1;
\n-
183 return A.block(i1,j1,m,n);
\n-
184}
\n-
\n-
185
\n-
194template <typename Derived1, typename Derived2>
\n-
\n-
195void insertSub(Eigen::MatrixBase<Derived1>& fullMatrix, const Eigen::MatrixBase<Derived2>& subMatrix, size_t i, size_t j) {
\n-
196 fullMatrix.block(i, j, subMatrix.rows(), subMatrix.cols()) = subMatrix;
\n-
197}
\n-
\n-
198
\n-
202GTSAM_EXPORT Matrix diag(const std::vector<Matrix>& Hs);
\n-
203
\n-
210template<class MATRIX>
\n-
\n-
211const typename MATRIX::ConstColXpr column(const MATRIX& A, size_t j) {
\n-
212 return A.col(j);
\n-
213}
\n-
\n-
214
\n-
221template<class MATRIX>
\n-
\n-
222const typename MATRIX::ConstRowXpr row(const MATRIX& A, size_t j) {
\n-
223 return A.row(j);
\n-
224}
\n-
\n-
225
\n-
231template<class MATRIX>
\n-
\n-
232void zeroBelowDiagonal(MATRIX& A, size_t cols=0) {
\n-
233 const size_t m = A.rows(), n = A.cols();
\n-
234 const size_t k = (cols) ? std::min(cols, std::min(m,n)) : std::min(m,n);
\n-
235 for (size_t j=0; j<k; ++j)
\n-
236 A.col(j).segment(j+1, m-(j+1)).setZero();
\n-
237}
\n-
\n-
238
\n-
242inline Matrix trans(const Matrix& A) { return A.transpose(); }
\n-
243
\n-
245template <int OutM, int OutN, int OutOptions, int InM, int InN, int InOptions>
\n-
\n-
246struct Reshape {
\n-
247 //TODO replace this with Eigen's reshape function as soon as available. (There is a PR already pending : https://bitbucket.org/eigen/eigen/pull-request/41/reshape/diff)
\n-
248 typedef Eigen::Map<const Eigen::Matrix<double, OutM, OutN, OutOptions> > ReshapedType;
\n-
249 static inline ReshapedType reshape(const Eigen::Matrix<double, InM, InN, InOptions> & in) {
\n-
250 return in.data();
\n-
251 }
\n-
252};
\n-
\n-
253
\n-
255template <int M, int InOptions>
\n-
\n-
256struct Reshape<M, M, InOptions, M, M, InOptions> {
\n-
257 typedef const Eigen::Matrix<double, M, M, InOptions> & ReshapedType;
\n-
258 static inline ReshapedType reshape(const Eigen::Matrix<double, M, M, InOptions> & in) {
\n-
259 return in;
\n-
260 }
\n-
261};
\n-
\n-
262
\n-
264template <int M, int N, int InOptions>
\n-
\n-
265struct Reshape<M, N, InOptions, M, N, InOptions> {
\n-
266 typedef const Eigen::Matrix<double, M, N, InOptions> & ReshapedType;
\n-
267 static inline ReshapedType reshape(const Eigen::Matrix<double, M, N, InOptions> & in) {
\n-
268 return in;
\n-
269 }
\n-
270};
\n-
\n-
271
\n-
273template <int M, int N, int InOptions>
\n-
\n-
274struct Reshape<N, M, InOptions, M, N, InOptions> {
\n-
275 typedef typename Eigen::Matrix<double, M, N, InOptions>::ConstTransposeReturnType ReshapedType;
\n-
276 static inline ReshapedType reshape(const Eigen::Matrix<double, M, N, InOptions> & in) {
\n-
277 return in.transpose();
\n-
278 }
\n-
279};
\n-
\n-
280
\n-
281template <int OutM, int OutN, int OutOptions, int InM, int InN, int InOptions>
\n-
282inline typename Reshape<OutM, OutN, OutOptions, InM, InN, InOptions>::ReshapedType reshape(const Eigen::Matrix<double, InM, InN, InOptions> & m){
\n-
283 BOOST_STATIC_ASSERT(InM * InN == OutM * OutN);
\n-\n-
285}
\n-
286
\n-
293GTSAM_EXPORT std::pair<Matrix,Matrix> qr(const Matrix& A);
\n-
294
\n-
300GTSAM_EXPORT void inplace_QR(Matrix& A);
\n-
301
\n-
310GTSAM_EXPORT std::list<boost::tuple<Vector, double, double> >
\n-
311weighted_eliminate(Matrix& A, Vector& b, const Vector& sigmas);
\n-
312
\n-
320GTSAM_EXPORT void householder_(Matrix& A, size_t k, bool copy_vectors=true);
\n-
321
\n-
328GTSAM_EXPORT void householder(Matrix& A, size_t k);
\n-
329
\n-
337GTSAM_EXPORT Vector backSubstituteUpper(const Matrix& U, const Vector& b, bool unit=false);
\n-
338
\n-
346//TODO: is this function necessary? it isn't used
\n-
347GTSAM_EXPORT Vector backSubstituteUpper(const Vector& b, const Matrix& U, bool unit=false);
\n-
348
\n-
356GTSAM_EXPORT Vector backSubstituteLower(const Matrix& L, const Vector& b, bool unit=false);
\n-
357
\n-
364GTSAM_EXPORT Matrix stack(size_t nrMatrices, ...);
\n-
365GTSAM_EXPORT Matrix stack(const std::vector<Matrix>& blocks);
\n-
366
\n-
377GTSAM_EXPORT Matrix collect(const std::vector<const Matrix *>& matrices, size_t m = 0, size_t n = 0);
\n-
378GTSAM_EXPORT Matrix collect(size_t nrMatrices, ...);
\n-
379
\n-
386GTSAM_EXPORT void vector_scale_inplace(const Vector& v, Matrix& A, bool inf_mask = false); // row
\n-
387GTSAM_EXPORT Matrix vector_scale(const Vector& v, const Matrix& A, bool inf_mask = false); // row
\n-
388GTSAM_EXPORT Matrix vector_scale(const Matrix& A, const Vector& v, bool inf_mask = false); // column
\n-
389
\n-
\n-
401inline Matrix3 skewSymmetric(double wx, double wy, double wz) {
\n-
402 return (Matrix3() << 0.0, -wz, +wy, +wz, 0.0, -wx, -wy, +wx, 0.0).finished();
\n-
403}
\n-
\n-
404
\n-
405template <class Derived>
\n-
406inline Matrix3 skewSymmetric(const Eigen::MatrixBase<Derived>& w) {
\n-
407 return skewSymmetric(w(0), w(1), w(2));
\n-
408}
\n-
409
\n-
411GTSAM_EXPORT Matrix inverse_square_root(const Matrix& A);
\n-
412
\n-
414GTSAM_EXPORT Matrix cholesky_inverse(const Matrix &A);
\n-
415
\n-
428GTSAM_EXPORT void svd(const Matrix& A, Matrix& U, Vector& S, Matrix& V);
\n-
429
\n-
437GTSAM_EXPORT boost::tuple<int, double, Vector>
\n-
438DLT(const Matrix& A, double rank_tol = 1e-9);
\n-
439
\n-
445GTSAM_EXPORT Matrix expm(const Matrix& A, size_t K=7);
\n-
446
\n-
447std::string formatMatrixIndented(const std::string& label, const Matrix& matrix, bool makeVectorHorizontal = false);
\n-
448
\n-
455template <int N>
\n-
\n-\n-
457 typedef Eigen::Matrix<double, N, 1> VectorN;
\n-
458 typedef Eigen::Matrix<double, N, N> MatrixN;
\n-
459
\n-
\n-
461 VectorN operator()(const MatrixN& A, const VectorN& b,
\n-
462 OptionalJacobian<N, N* N> H1 = boost::none,
\n-
463 OptionalJacobian<N, N> H2 = boost::none) const {
\n-
464 const MatrixN invA = A.inverse();
\n-
465 const VectorN c = invA * b;
\n-
466 // The derivative in A is just -[c[0]*invA c[1]*invA ... c[N-1]*invA]
\n-
467 if (H1)
\n-
468 for (size_t j = 0; j < N; j++)
\n-
469 H1->template middleCols<N>(N * j) = -c[j] * invA;
\n-
470 // The derivative in b is easy, as invA*b is just a linear map:
\n-
471 if (H2) *H2 = invA;
\n-
472 return c;
\n-
473 }
\n-
\n-
474};
\n-
\n-
475
\n-
481template <typename T, int N>
\n-
\n-\n-
483 enum { M = traits<T>::dimension };
\n-
484 typedef Eigen::Matrix<double, N, 1> VectorN;
\n-
485 typedef Eigen::Matrix<double, N, N> MatrixN;
\n-
486
\n-
487 // The function phi should calculate f(a)*b, with derivatives in a and b.
\n-
488 // Naturally, the derivative in b is f(a).
\n-
489 typedef std::function<VectorN(
\n-
490 const T&, const VectorN&, OptionalJacobian<N, M>, OptionalJacobian<N, N>)>
\n-
491 Operator;
\n-
492
\n-
494 MultiplyWithInverseFunction(const Operator& phi) : phi_(phi) {}
\n-
495
\n-
\n-
497 VectorN operator()(const T& a, const VectorN& b,
\n-
498 OptionalJacobian<N, M> H1 = boost::none,
\n-
499 OptionalJacobian<N, N> H2 = boost::none) const {
\n-
500 MatrixN A;
\n-
501 phi_(a, b, boost::none, A); // get A = f(a) by calling f once
\n-
502 const MatrixN invA = A.inverse();
\n-
503 const VectorN c = invA * b;
\n-
504
\n-
505 if (H1) {
\n-
506 Eigen::Matrix<double, N, M> H;
\n-
507 phi_(a, c, H, boost::none); // get derivative H of forward mapping
\n-
508 *H1 = -invA* H;
\n-
509 }
\n-
510 if (H2) *H2 = invA;
\n-
511 return c;
\n-
512 }
\n-
\n-
513
\n-
514 private:
\n-
515 const Operator phi_;
\n-
516};
\n-
\n-
517
\n-
518GTSAM_EXPORT Matrix LLt(const Matrix& A);
\n-
519
\n-
520GTSAM_EXPORT Matrix RtR(const Matrix& A);
\n-
521
\n-
522GTSAM_EXPORT Vector columnNormSquare(const Matrix &A);
\n-
523} // namespace gtsam
\n-
typedef and functions to augment Eigen's VectorXd
\n-
Special class for optional Jacobian arguments.
\n+
150 const T& operator*() const { return value; }
\n+
151
\n+
153 operator T() const { return value; }
\n+
154 };
\n+
\n+
155
\n+
156 /* ************************************************************************* */
\n+
159 template<typename T>
\n+
\n+\n+
161 T element_;
\n+
162 public:
\n+
163 typedef T value_type;
\n+
164 typedef const T* const_iterator;
\n+
165 typedef T* iterator;
\n+
166 ListOfOneContainer(const T& element) : element_(element) {}
\n+
167 const T* begin() const { return &element_; }
\n+
168 const T* end() const { return &element_ + 1; }
\n+
169 T* begin() { return &element_; }
\n+
170 T* end() { return &element_ + 1; }
\n+
171 size_t size() const { return 1; }
\n+
172 };
\n+
\n+
173
\n+
174 BOOST_CONCEPT_ASSERT((boost::RandomAccessRangeConcept<ListOfOneContainer<int> >));
\n+
175
\n+
177 template<typename T>
\n+
\n+\n+
179 return ListOfOneContainer<T>(element);
\n+
180 }
\n+
\n+
181
\n+
182 /* ************************************************************************* */
\n+
183#ifdef __clang__
\n+
184# pragma clang diagnostic push
\n+
185# pragma clang diagnostic ignored "-Wunused-private-field" // Clang complains that previousOpenMPThreads is unused in the #else case below
\n+
186#endif
\n+
187
\n+
\n+\n+
192 {
\n+
193 int previousOpenMPThreads;
\n+
194
\n+
195 public:
\n+
196#if defined GTSAM_USE_TBB && defined GTSAM_USE_EIGEN_MKL_OPENMP
\n+\n+
198 previousOpenMPThreads(omp_get_num_threads())
\n+
199 {
\n+
200 omp_set_num_threads(omp_get_num_procs() / 4);
\n+
201 }
\n+
202
\n+\n+
204 {
\n+
205 omp_set_num_threads(previousOpenMPThreads);
\n+
206 }
\n+
207#else
\n+
208 TbbOpenMPMixedScope() : previousOpenMPThreads(-1) {}
\n+\n+
210#endif
\n+
211 };
\n+
\n+
212
\n+
213#ifdef __clang__
\n+
214# pragma clang diagnostic pop
\n+
215#endif
\n+
216
\n+
217}
\n+
218
\n+
219/* ************************************************************************* */
\n+
222#ifdef NDEBUG
\n+
223#define assert_throw(CONDITION, EXCEPTION) ((void)0)
\n+
224#else
\n+
\n+
225#define assert_throw(CONDITION, EXCEPTION) \\
\n+
226 if (!(CONDITION)) { \\
\n+
227 throw (EXCEPTION); \\
\n+
228 }
\n+
\n+
229#endif
\n+
230
\n+
231#ifdef _MSC_VER
\n+
232
\n+
233// Define some common g++ functions and macros we use that MSVC does not have
\n+
234
\n+
235#if (_MSC_VER < 1800)
\n+
236
\n+
237#include <boost/math/special_functions/fpclassify.hpp>
\n+
238namespace std {
\n+
239 template<typename T> inline int isfinite(T a) {
\n+
240 return (int)boost::math::isfinite(a); }
\n+
241 template<typename T> inline int isnan(T a) {
\n+
242 return (int)boost::math::isnan(a); }
\n+
243 template<typename T> inline int isinf(T a) {
\n+
244 return (int)boost::math::isinf(a); }
\n+
245}
\n+
246
\n+
247#endif
\n+
248
\n+
249#include <boost/math/constants/constants.hpp>
\n+
250#ifndef M_PI
\n+
251#define M_PI (boost::math::constants::pi<double>())
\n+
252#endif
\n+
253#ifndef M_PI_2
\n+
254#define M_PI_2 (boost::math::constants::pi<double>() / 2.0)
\n+
255#endif
\n+
256#ifndef M_PI_4
\n+
257#define M_PI_4 (boost::math::constants::pi<double>() / 4.0)
\n+
258#endif
\n+
259
\n+
260#endif
\n+
261
\n+
262#ifdef min
\n+
263#undef min
\n+
264#endif
\n+
265
\n+
266#ifdef max
\n+
267#undef max
\n+
268#endif
\n+
269
\n+
270#ifdef ERROR
\n+
271#undef ERROR
\n+
272#endif
\n+
273
\n+
274namespace gtsam {
\n+
275
\n+
277 template<typename ...> using void_t = void;
\n+
278
\n+
294 template<typename, typename = void_t<>>
\n+
\n+
295 struct needs_eigen_aligned_allocator : std::false_type {
\n+
296 };
\n+
\n+
297 template<typename T>
\n+\n+
300
\n+
301}
\n+
302
\n+
\n+
308#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW \\
\n+
309 EIGEN_MAKE_ALIGNED_OPERATOR_NEW \\
\n+
310 using _eigen_aligned_allocator_trait = void;
\n+
\n+
311
\n+
\n+
317#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\
\n+
318 EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\
\n+
319 using _eigen_aligned_allocator_trait = void;
\n+
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Vector backSubstituteLower(const Matrix &L, const Vector &b, bool unit)
backSubstitute L*x=b
Definition Matrix.cpp:367
\n-
Vector operator^(const Matrix &A, const Vector &v)
overload ^ for trans(A)*v We transpose the vectors for speed.
Definition Matrix.cpp:131
\n-
void vector_scale_inplace(const Vector &v, Matrix &A, bool inf_mask)
scales a matrix row or column by the values in a vector Arguments (Matrix, Vector) scales the columns...
Definition Matrix.cpp:482
\n-
const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)
Extracts a row view from a matrix that avoids a copy.
Definition Matrix.h:222
\n-
T expm(const Vector &x, int K=7)
Exponential map given exponential coordinates class T needs a wedge<> function and a constructor from...
Definition Lie.h:317
\n-
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition Matrix.cpp:167
\n-
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n-
bool linear_dependent(const Matrix &A, const Matrix &B, double tol)
check whether the rows of two matrices are linear dependent
Definition Matrix.cpp:117
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
const MATRIX::ConstColXpr column(const MATRIX &A, size_t j)
Extracts a column view from a matrix that avoids a copy.
Definition Matrix.h:211
\n-
void zeroBelowDiagonal(MATRIX &A, size_t cols=0)
Zeros all of the elements below the diagonal of a matrix, in place.
Definition Matrix.h:232
\n-
list< boost::tuple< Vector, double, double > > weighted_eliminate(Matrix &A, Vector &b, const Vector &sigmas)
Imperative algorithm for in-place full elimination with weights and constraint handling.
Definition Matrix.cpp:273
\n-
Vector backSubstituteUpper(const Matrix &U, const Vector &b, bool unit)
backSubstitute U*x=b
Definition Matrix.cpp:377
\n-
bool assert_inequal(const Matrix &A, const Matrix &B, double tol)
inequals with an tolerance, prints out message if within tolerance
Definition Matrix.cpp:63
\n-
void householder(Matrix &A, size_t k)
Householder tranformation, zeros below diagonal.
Definition Matrix.cpp:354
\n-
istream & operator>>(istream &inputStream, Matrix &destinationMatrix)
Read a matrix from an input stream, such as a file.
Definition Matrix.cpp:174
\n-
void inplace_QR(Matrix &A)
QR factorization using Eigen's internal block QR algorithm.
Definition Matrix.cpp:636
\n-
void svd(const Matrix &A, Matrix &U, Vector &S, Matrix &V)
SVD computes economy SVD A=U*S*V'.
Definition Matrix.cpp:560
\n-
Matrix3 skewSymmetric(double wx, double wy, double wz)
skew symmetric matrix returns this: 0 -wz wy wz 0 -wx -wy wx 0
Definition Matrix.h:401
\n-
Eigen::Block< const MATRIX > sub(const MATRIX &A, size_t i1, size_t i2, size_t j1, size_t j2)
extract submatrix, slice semantics, i.e.
Definition Matrix.h:181
\n-
Matrix trans(const Matrix &A)
static transpose function, just calls Eigen transpose member function
Definition Matrix.h:242
\n-
bool operator!=(const Matrix &A, const Matrix &B)
inequality
Definition Matrix.h:107
\n-
boost::tuple< int, double, Vector > DLT(const Matrix &A, double rank_tol)
Direct linear transform algorithm that calls svd to find a vector v that minimizes the algebraic erro...
Definition Matrix.cpp:568
\n-
Matrix cholesky_inverse(const Matrix &A)
Return the inverse of a S.P.D.
Definition Matrix.cpp:539
\n-
MATRIX prod(const MATRIX &A, const MATRIX &B)
products using old-style format to improve compatibility
Definition Matrix.h:144
\n-
void householder_(Matrix &A, size_t k, bool copy_vectors)
Imperative version of Householder QR factorization, Golub & Van Loan p 224 version with Householder v...
Definition Matrix.cpp:327
\n-
void insertSub(Eigen::MatrixBase< Derived1 > &fullMatrix, const Eigen::MatrixBase< Derived2 > &subMatrix, size_t i, size_t j)
insert a submatrix IN PLACE at a specified location in a larger matrix NOTE: there is no size checkin...
Definition Matrix.h:195
\n-
Matrix collect(const std::vector< const Matrix * > &matrices, size_t m, size_t n)
create a matrix by concatenating Given a set of matrices: A1, A2, A3... If all matrices have the same...
Definition Matrix.cpp:443
\n-
bool linear_independent(const Matrix &A, const Matrix &B, double tol)
check whether the rows of two matrices are linear independent
Definition Matrix.cpp:103
\n-
bool fpEqual(double a, double b, double tol, bool check_relative_also)
Ensure we are not including a different version of Eigen in user code than while compiling gtsam,...
Definition Vector.cpp:42
\n-
pair< Matrix, Matrix > qr(const Matrix &A)
Householder QR factorization, Golub & Van Loan p 224, explicit version
Definition Matrix.cpp:235
\n-
Matrix diag(const std::vector< Matrix > &Hs)
Create a matrix with submatrices along its diagonal.
Definition Matrix.cpp:207
\n-
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n-
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition Matrix.h:100
\n-
Matrix inverse_square_root(const Matrix &A)
Use Cholesky to calculate inverse square root of a matrix.
Definition Matrix.cpp:552
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Reshape functor.
Definition Matrix.h:246
\n-
Functor that implements multiplication of a vector b with the inverse of a matrix A.
Definition Matrix.h:456
\n-
VectorN operator()(const MatrixN &A, const VectorN &b, OptionalJacobian< N, N *N > H1=boost::none, OptionalJacobian< N, N > H2=boost::none) const
A.inverse() * b, with optional derivatives.
Definition Matrix.h:461
\n-
Functor that implements multiplication with the inverse of a matrix, itself the result of a function ...
Definition Matrix.h:482
\n-
VectorN operator()(const T &a, const VectorN &b, OptionalJacobian< N, M > H1=boost::none, OptionalJacobian< N, N > H2=boost::none) const
f(a).inverse() * b, with optional derivatives
Definition Matrix.h:497
\n-
MultiplyWithInverseFunction(const Operator &phi)
Construct with function as explained above.
Definition Matrix.h:494
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
ListOfOneContainer< T > ListOfOne(const T &element)
Factory function for ListOfOneContainer to enable ListOfOne(e) syntax.
Definition types.h:178
\n+
std::string demangle(const char *name)
Pretty print Value type name.
Definition types.cpp:37
\n+
std::uint64_t FactorIndex
Integer nonlinear factor index type.
Definition types.h:103
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
void void_t
Convenience void_t as we assume C++11, it will not conflict the std one in C++17 as this is in gtsam:...
Definition types.h:277
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
Helper class that uses templates to select between two types based on whether TEST_TYPE is const or n...
Definition types.h:115
\n+
Helper struct that encapsulates a value with a default, this is just used as a member object so you d...
Definition types.h:137
\n+
T & operator*()
Operator to access the value.
Definition types.h:147
\n+
const T & operator*() const
Operator to access the value.
Definition types.h:150
\n+
ValueWithDefault()
Default constructor, initialize to default value supplied in template argument.
Definition types.h:141
\n+
ValueWithDefault(const T &_value)
Initialize to the given value.
Definition types.h:144
\n+
A helper class that behaves as a container with one element, and works with boost::range.
Definition types.h:160
\n+
An object whose scope defines a block where TBB and OpenMP parallelism are mixed.
Definition types.h:192
\n+
A SFINAE trait to mark classes that need special alignment.
Definition types.h:295
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,534 +1,343 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Matrix.h\n+types.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-23// \\callgraph\n-24\n-25#pragma once\n+20#pragma once\n+21\n+22#include \n+23#include \n+24#include \n+25#include // for GTSAM_USE_TBB\n 26\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-29#include \n-30\n-31#include \n+27#include \n+28#include \n+29\n+30#include \n+31#include \n 32\n-38namespace _\bg_\bt_\bs_\ba_\bm {\n-39\n-40typedef Eigen::MatrixXd Matrix;\n-41typedef Eigen::Matrix MatrixRowMajor;\n-42\n-43// Create handy typedefs and constants for square-size matrices\n-44// MatrixMN, MatrixN = MatrixNN, I_NxN, and Z_NxN, for M,N=1..9\n-45#define GTSAM_MAKE_MATRIX_DEFS(N) \\\n-46using Matrix##N = Eigen::Matrix; \\\n-47using Matrix1##N = Eigen::Matrix; \\\n-48using Matrix2##N = Eigen::Matrix; \\\n-49using Matrix3##N = Eigen::Matrix; \\\n-50using Matrix4##N = Eigen::Matrix; \\\n-51using Matrix5##N = Eigen::Matrix; \\\n-52using Matrix6##N = Eigen::Matrix; \\\n-53using Matrix7##N = Eigen::Matrix; \\\n-54using Matrix8##N = Eigen::Matrix; \\\n-55using Matrix9##N = Eigen::Matrix; \\\n-56static const Eigen::MatrixBase::IdentityReturnType I_##N##x##N =\n-Matrix##N::Identity(); \\\n-57static const Eigen::MatrixBase::ConstantReturnType Z_##N##x##N =\n-Matrix##N::Zero();\n-58\n-59GTSAM_MAKE_MATRIX_DEFS(1)\n-60GTSAM_MAKE_MATRIX_DEFS(2)\n-61GTSAM_MAKE_MATRIX_DEFS(3)\n-62GTSAM_MAKE_MATRIX_DEFS(4)\n-63GTSAM_MAKE_MATRIX_DEFS(5)\n-64GTSAM_MAKE_MATRIX_DEFS(6)\n-65GTSAM_MAKE_MATRIX_DEFS(7)\n-66GTSAM_MAKE_MATRIX_DEFS(8)\n-67GTSAM_MAKE_MATRIX_DEFS(9)\n-68\n-69// Matrix expressions for accessing parts of matrices\n-70typedef Eigen::Block SubMatrix;\n-71typedef Eigen::Block ConstSubMatrix;\n-72\n-73// Matrix formatting arguments when printing.\n-74// Akin to Matlab style.\n-75const Eigen::IOFormat& matlabFormat();\n-76\n-80template \n-_\b8_\b1bool _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(const Eigen::DenseBase& A, const Eigen::\n-DenseBase& B, double tol = 1e-9) {\n-82\n-83 const size_t n1 = A.cols(), m1 = A.rows();\n-84 const size_t n2 = B.cols(), m2 = B.rows();\n-85\n-86 if(m1!=m2 || n1!=n2) return false;\n-87\n-88 for(size_t i=0; i& As, const std::\n-list& Bs, double tol = 1e-9);\n-125\n-129GTSAM_EXPORT bool _\bl_\bi_\bn_\be_\ba_\br_\b__\bi_\bn_\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt(const Matrix& A, const Matrix& B,\n-double tol = 1e-9);\n-130\n-134GTSAM_EXPORT bool _\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt(const Matrix& A, const Matrix& B, double\n-tol = 1e-9);\n-135\n-140GTSAM_EXPORT Vector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b^(const Matrix& A, const Vector & v);\n-141\n-143template\n-_\b1_\b4_\b4inline MATRIX _\bp_\br_\bo_\bd(const MATRIX& A, const MATRIX&B) {\n-145 MATRIX result = A * B;\n-146 return result;\n-147}\n+33#ifdef GTSAM_USE_TBB\n+34#include \n+35#endif\n+36\n+37#if defined(__GNUC__) || defined(__clang__)\n+38#define GTSAM_DEPRECATED __attribute__((deprecated))\n+39#elif defined(_MSC_VER)\n+40#define GTSAM_DEPRECATED __declspec(deprecated)\n+41#else\n+42#define GTSAM_DEPRECATED\n+43#endif\n+44\n+45#ifdef GTSAM_USE_EIGEN_MKL_OPENMP\n+46#include \n+47#endif\n+48\n+49/* Define macros for ignoring compiler warnings.\n+50 * Usage Example:\n+51 * ```\n+52 * CLANG_DIAGNOSTIC_PUSH_IGNORE(\"-Wdeprecated-declarations\")\n+53 * GCC_DIAGNOSTIC_PUSH_IGNORE(\"-Wdeprecated-declarations\")\n+54 * MSVC_DIAGNOSTIC_PUSH_IGNORE(4996)\n+55 * // ... code you want to suppress deprecation warnings for ...\n+56 * DIAGNOSTIC_POP()\n+57 * ```\n+58 */\n+59#define DO_PRAGMA(x) _Pragma (#x)\n+60#ifdef __clang__\n+61# define CLANG_DIAGNOSTIC_PUSH_IGNORE(diag) \\\n+62 _Pragma(\"clang diagnostic push\") \\\n+63 DO_PRAGMA(clang diagnostic ignored diag)\n+64#else\n+65# define CLANG_DIAGNOSTIC_PUSH_IGNORE(diag)\n+66#endif\n+67\n+68#ifdef __GNUC__\n+69# define GCC_DIAGNOSTIC_PUSH_IGNORE(diag) \\\n+70 _Pragma(\"GCC diagnostic push\") \\\n+71 DO_PRAGMA(GCC diagnostic ignored diag)\n+72#else\n+73# define GCC_DIAGNOSTIC_PUSH_IGNORE(diag)\n+74#endif\n+75\n+76#ifdef _MSC_VER\n+77# define MSVC_DIAGNOSTIC_PUSH_IGNORE(code) \\\n+78 _Pragma(\"warning ( push )\") \\\n+79 DO_PRAGMA(warning ( disable : code ))\n+80#else\n+81# define MSVC_DIAGNOSTIC_PUSH_IGNORE(code)\n+82#endif\n+83\n+84#if defined(__clang__)\n+85# define DIAGNOSTIC_POP() _Pragma(\"clang diagnostic pop\")\n+86#elif defined(__GNUC__)\n+87# define DIAGNOSTIC_POP() _Pragma(\"GCC diagnostic pop\")\n+88#elif defined(_MSC_VER)\n+89# define DIAGNOSTIC_POP() _Pragma(\"warning ( pop )\")\n+90#else\n+91# define DIAGNOSTIC_POP()\n+92#endif\n+93\n+94namespace _\bg_\bt_\bs_\ba_\bm {\n+95\n+97 std::string GTSAM_EXPORT _\bd_\be_\bm_\ba_\bn_\bg_\bl_\be(const char* name);\n+98\n+_\b1_\b0_\b0 typedef std::uint64_t _\bK_\be_\by;\n+101\n+_\b1_\b0_\b3 typedef std::uint64_t _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx;\n+104\n+_\b1_\b0_\b6 typedef ptrdiff_t _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx;\n+107\n+108 /\n+* ************************************************************************* */\n+113 template\n+_\b1_\b1_\b5 struct _\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br {\n+116 };\n+117\n+119 template\n+_\b1_\b2_\b0 struct _\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br {\n+121 typedef AS_NON_CONST type;\n+122 };\n+123\n+125 template\n+_\b1_\b2_\b6 struct _\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br\n+{\n+127 typedef AS_CONST type;\n+128 };\n+129\n+130 /\n+* ************************************************************************* */\n+136 template\n+_\b1_\b3_\b7 struct _\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt {\n+138 T value;\n+139\n+_\b1_\b4_\b1 _\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt() : value(defaultValue) {}\n+142\n+_\b1_\b4_\b4 _\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt(const T& _value) : value(_value) {}\n+145\n+_\b1_\b4_\b7 T& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() { return value; }\n 148\n-152GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const Matrix& A, const std::string& s, std::ostream&\n-stream);\n-153\n-157GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const Matrix& A, const std::string& s = \"\");\n-158\n-162GTSAM_EXPORT void _\bs_\ba_\bv_\be(const Matrix& A, const std::string &s, const std::\n-string& filename);\n-163\n-169GTSAM_EXPORT std::istream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>(std::istream& inputStream, Matrix&\n-destinationMatrix);\n-170\n-180template\n-_\b1_\b8_\b1Eigen::Block _\bs_\bu_\bb(const MATRIX& A, size_t i1, size_t i2, size_t\n-j1, size_t j2) {\n-182 size_t m=i2-i1, n=j2-j1;\n-183 return A.block(i1,j1,m,n);\n-184}\n-185\n-194template \n-_\b1_\b9_\b5void _\bi_\bn_\bs_\be_\br_\bt_\bS_\bu_\bb(Eigen::MatrixBase& fullMatrix, const Eigen::\n-MatrixBase& subMatrix, size_t i, size_t j) {\n-196 fullMatrix.block(i, j, subMatrix.rows(), subMatrix.cols()) = subMatrix;\n-197}\n-198\n-202GTSAM_EXPORT Matrix _\bd_\bi_\ba_\bg(const std::vector& Hs);\n-203\n-210template\n-_\b2_\b1_\b1const typename MATRIX::ConstColXpr _\bc_\bo_\bl_\bu_\bm_\bn(const MATRIX& A, size_t j) {\n-212 return A.col(j);\n-213}\n-214\n-221template\n-_\b2_\b2_\b2const typename MATRIX::ConstRowXpr _\br_\bo_\bw(const MATRIX& A, size_t j) {\n-223 return A.row(j);\n-224}\n-225\n-231template\n-_\b2_\b3_\b2void _\bz_\be_\br_\bo_\bB_\be_\bl_\bo_\bw_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(MATRIX& A, size_t cols=0) {\n-233 const size_t m = A.rows(), n = A.cols();\n-234 const size_t k = (cols) ? std::min(cols, std::min(m,n)) : std::min(m,n);\n-235 for (size_t j=0; j\n-_\b2_\b4_\b6struct _\bR_\be_\bs_\bh_\ba_\bp_\be {\n-247 //TODO replace this with Eigen's reshape function as soon as available.\n-(There is a PR already pending : https://bitbucket.org/eigen/eigen/pull-\n-request/41/reshape/diff)\n-248 typedef Eigen::Map >\n-ReshapedType;\n-249 static inline ReshapedType reshape(const Eigen::Matrix & in) {\n-250 return in.data();\n-251 }\n-252};\n-253\n-255template \n-_\b2_\b5_\b6struct _\bR_\be_\bs_\bh_\ba_\bp_\be {\n-257 typedef const Eigen::Matrix & ReshapedType;\n-258 static inline ReshapedType reshape(const Eigen::Matrix & in) {\n-259 return in;\n-260 }\n-261};\n-262\n-264template \n-_\b2_\b6_\b5struct _\bR_\be_\bs_\bh_\ba_\bp_\be {\n-266 typedef const Eigen::Matrix & ReshapedType;\n-267 static inline ReshapedType reshape(const Eigen::Matrix & in) {\n-268 return in;\n-269 }\n-270};\n-271\n-273template \n-_\b2_\b7_\b4struct _\bR_\be_\bs_\bh_\ba_\bp_\be {\n-275 typedef typename Eigen::Matrix::\n-ConstTransposeReturnType ReshapedType;\n-276 static inline ReshapedType reshape(const Eigen::Matrix & in) {\n-277 return in.transpose();\n-278 }\n-279};\n-280\n-281template \n-282inline typename Reshape::\n-ReshapedType reshape(const Eigen::Matrix & m){\n-283 BOOST_STATIC_ASSERT(InM * InN == OutM * OutN);\n-284 return _\bR_\be_\bs_\bh_\ba_\bp_\be_\b<_\bO_\bu_\bt_\bM_\b,_\b _\bO_\bu_\bt_\bN_\b,_\b _\bO_\bu_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b,_\b _\bI_\bn_\bM_\b,_\b _\bI_\bn_\bN_\b,_\b _\bI_\bn_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b>_\b:_\b:_\br_\be_\bs_\bh_\ba_\bp_\be(m);\n-285}\n-286\n-293GTSAM_EXPORT std::pair _\bq_\br(const Matrix& A);\n-294\n-300GTSAM_EXPORT void _\bi_\bn_\bp_\bl_\ba_\bc_\be_\b__\bQ_\bR(Matrix& A);\n-301\n-310GTSAM_EXPORT std::list >\n-311_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\b__\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(Matrix& A, Vector& b, const Vector& sigmas);\n-312\n-320GTSAM_EXPORT void _\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br_\b_(Matrix& A, size_t k, bool copy_vectors=true);\n-321\n-328GTSAM_EXPORT void _\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br(Matrix& A, size_t k);\n-329\n-337GTSAM_EXPORT Vector _\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br(const Matrix& U, const Vector& b,\n-bool unit=false);\n-338\n-346//TODO: is this function necessary? it isn't used\n-347GTSAM_EXPORT Vector _\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br(const Vector& b, const Matrix& U,\n-bool unit=false);\n-348\n-356GTSAM_EXPORT Vector _\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bL_\bo_\bw_\be_\br(const Matrix& L, const Vector& b,\n-bool unit=false);\n-357\n-364GTSAM_EXPORT Matrix stack(size_t nrMatrices, ...);\n-365GTSAM_EXPORT Matrix stack(const std::vector& blocks);\n-366\n-377GTSAM_EXPORT Matrix _\bc_\bo_\bl_\bl_\be_\bc_\bt(const std::vector& matrices,\n-size_t m = 0, size_t n = 0);\n-378GTSAM_EXPORT Matrix _\bc_\bo_\bl_\bl_\be_\bc_\bt(size_t nrMatrices, ...);\n-379\n-386GTSAM_EXPORT void _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bc_\ba_\bl_\be_\b__\bi_\bn_\bp_\bl_\ba_\bc_\be(const Vector& v, Matrix& A, bool\n-inf_mask = false); // row\n-387GTSAM_EXPORT Matrix vector_scale(const Vector& v, const Matrix& A, bool\n-inf_mask = false); // row\n-388GTSAM_EXPORT Matrix vector_scale(const Matrix& A, const Vector& v, bool\n-inf_mask = false); // column\n-389\n-_\b4_\b0_\b1inline Matrix3 _\bs_\bk_\be_\bw_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc(double wx, double wy, double wz) {\n-402 return (Matrix3() << 0.0, -wz, +wy, +wz, 0.0, -wx, -wy, +wx, 0.0).finished\n-();\n-403}\n-404\n-405template \n-406inline Matrix3 _\bs_\bk_\be_\bw_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc(const Eigen::MatrixBase& w) {\n-407 return _\bs_\bk_\be_\bw_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc(w(0), w(1), w(2));\n-408}\n-409\n-411GTSAM_EXPORT Matrix _\bi_\bn_\bv_\be_\br_\bs_\be_\b__\bs_\bq_\bu_\ba_\br_\be_\b__\br_\bo_\bo_\bt(const Matrix& A);\n-412\n-414GTSAM_EXPORT Matrix _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b__\bi_\bn_\bv_\be_\br_\bs_\be(const Matrix &A);\n-415\n-428GTSAM_EXPORT void _\bs_\bv_\bd(const Matrix& A, Matrix& U, Vector& S, Matrix& V);\n-429\n-437GTSAM_EXPORT boost::tuple\n-438_\bD_\bL_\bT(const Matrix& A, double rank_tol = 1e-9);\n-439\n-445GTSAM_EXPORT Matrix _\be_\bx_\bp_\bm(const Matrix& A, size_t K=7);\n-446\n-447std::string formatMatrixIndented(const std::string& label, const Matrix&\n-matrix, bool makeVectorHorizontal = false);\n-448\n-455template \n-_\b4_\b5_\b6struct _\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be {\n-457 typedef Eigen::Matrix VectorN;\n-458 typedef Eigen::Matrix MatrixN;\n-459\n-_\b4_\b6_\b1 VectorN _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const MatrixN& A, const VectorN& b,\n-462 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b*_\b _\bN_\b> H1 = boost::none,\n-463 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b> H2 = boost::none) const {\n-464 const MatrixN invA = A.inverse();\n-465 const VectorN c = invA * b;\n-466 // The derivative in A is just -[c[0]*invA c[1]*invA ... c[N-1]*invA]\n-467 if (H1)\n-468 for (size_t j = 0; j < N; j++)\n-469 H1->template middleCols(N * j) = -c[j] * invA;\n-470 // The derivative in b is easy, as invA*b is just a linear map:\n-471 if (H2) *H2 = invA;\n-472 return c;\n-473 }\n-474};\n-475\n-481template \n-_\b4_\b8_\b2struct _\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn {\n-483 enum { M = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn };\n-484 typedef Eigen::Matrix VectorN;\n-485 typedef Eigen::Matrix MatrixN;\n-486\n-487 // The function phi should calculate f(a)*b, with derivatives in a and b.\n-488 // Naturally, the derivative in b is f(a).\n-489 typedef std::function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b>)>\n-491 Operator;\n-492\n-_\b4_\b9_\b4 _\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const Operator& phi) : phi_(phi) {}\n-495\n-_\b4_\b9_\b7 VectorN _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const T& a, const VectorN& b,\n-498 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bM_\b> H1 = boost::none,\n-499 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b> H2 = boost::none) const {\n-500 MatrixN A;\n-501 phi_(a, b, boost::none, A); // get A = f(a) by calling f once\n-502 const MatrixN invA = A.inverse();\n-503 const VectorN c = invA * b;\n-504\n-505 if (H1) {\n-506 Eigen::Matrix H;\n-507 phi_(a, c, H, boost::none); // get derivative H of forward mapping\n-508 *H1 = -invA* H;\n-509 }\n-510 if (H2) *H2 = invA;\n-511 return c;\n-512 }\n-513\n-514 private:\n-515 const Operator phi_;\n-516};\n-517\n-518GTSAM_EXPORT Matrix LLt(const Matrix& A);\n-519\n-520GTSAM_EXPORT Matrix RtR(const Matrix& A);\n-521\n-522GTSAM_EXPORT Vector columnNormSquare(const Matrix &A);\n-523} // namespace gtsam\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n-_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n-Special class for optional Jacobian arguments.\n+_\b1_\b5_\b0 const T& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() const { return value; }\n+151\n+_\b1_\b5_\b3 operator T() const { return value; }\n+154 };\n+155\n+156 /\n+* ************************************************************************* */\n+159 template\n+_\b1_\b6_\b0 class _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br {\n+161 T element_;\n+162 public:\n+163 typedef T value_type;\n+164 typedef const T* const_iterator;\n+165 typedef T* iterator;\n+166 _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br(const T& element) : element_(element) {}\n+167 const T* begin() const { return &element_; }\n+168 const T* end() const { return &element_ + 1; }\n+169 T* begin() { return &element_; }\n+170 T* end() { return &element_ + 1; }\n+171 size_t size() const { return 1; }\n+172 };\n+173\n+174 BOOST_CONCEPT_ASSERT((boost::\n+RandomAccessRangeConcept<_\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b<_\bi_\bn_\bt_\b> >));\n+175\n+177 template\n+_\b1_\b7_\b8 _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b<_\bT_\b> _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be(const T& element) {\n+179 return _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b<_\bT_\b>(element);\n+180 }\n+181\n+182 /\n+* ************************************************************************* */\n+183#ifdef __clang__\n+184# pragma clang diagnostic push\n+185# pragma clang diagnostic ignored \"-Wunused-private-field\" // Clang\n+complains that previousOpenMPThreads is unused in the #else case below\n+186#endif\n+187\n+_\b1_\b9_\b1 class _\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be\n+192 {\n+193 int previousOpenMPThreads;\n+194\n+195 public:\n+196#if defined GTSAM_USE_TBB && defined GTSAM_USE_EIGEN_MKL_OPENMP\n+197 _\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be() :\n+198 previousOpenMPThreads(omp_get_num_threads())\n+199 {\n+200 omp_set_num_threads(omp_get_num_procs() / 4);\n+201 }\n+202\n+203 _\b~_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be()\n+204 {\n+205 omp_set_num_threads(previousOpenMPThreads);\n+206 }\n+207#else\n+208 _\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be() : previousOpenMPThreads(-1) {}\n+209 _\b~_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be() {}\n+210#endif\n+211 };\n+212\n+213#ifdef __clang__\n+214# pragma clang diagnostic pop\n+215#endif\n+216\n+217}\n+218\n+219/* *************************************************************************\n+*/\n+222#ifdef NDEBUG\n+223#define assert_throw(CONDITION, EXCEPTION) ((void)0)\n+224#else\n+_\b2_\b2_\b5#define assert_throw(CONDITION, EXCEPTION) \\\n+226 if (!(CONDITION)) { \\\n+227 throw (EXCEPTION); \\\n+228 }\n+229#endif\n+230\n+231#ifdef _MSC_VER\n+232\n+233// Define some common g++ functions and macros we use that MSVC does not\n+have\n+234\n+235#if (_MSC_VER < 1800)\n+236\n+237#include \n+238namespace std {\n+239 template inline int isfinite(T a) {\n+240 return (int)boost::math::isfinite(a); }\n+241 template inline int isnan(T a) {\n+242 return (int)boost::math::isnan(a); }\n+243 template inline int isinf(T a) {\n+244 return (int)boost::math::isinf(a); }\n+245}\n+246\n+247#endif\n+248\n+249#include \n+250#ifndef M_PI\n+251#define M_PI (boost::math::constants::pi())\n+252#endif\n+253#ifndef M_PI_2\n+254#define M_PI_2 (boost::math::constants::pi() / 2.0)\n+255#endif\n+256#ifndef M_PI_4\n+257#define M_PI_4 (boost::math::constants::pi() / 4.0)\n+258#endif\n+259\n+260#endif\n+261\n+262#ifdef min\n+263#undef min\n+264#endif\n+265\n+266#ifdef max\n+267#undef max\n+268#endif\n+269\n+270#ifdef ERROR\n+271#undef ERROR\n+272#endif\n+273\n+274namespace _\bg_\bt_\bs_\ba_\bm {\n+275\n+_\b2_\b7_\b7 template using _\bv_\bo_\bi_\bd_\b__\bt = void;\n+278\n+294 template>\n+_\b2_\b9_\b5 struct _\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br : std::false_type {\n+296 };\n+297 template\n+_\b2_\b9_\b8 struct _\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\b _\bv_\bo_\bi_\bd_\b__\bt_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\b:_\b:\n+_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b__\bt_\br_\ba_\bi_\bt_\b>> : std::true_type {\n+299 };\n+300\n+301}\n+302\n+_\b3_\b0_\b8#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW \\\n+309 EIGEN_MAKE_ALIGNED_OPERATOR_NEW \\\n+310 using _eigen_aligned_allocator_trait = void;\n+311\n+_\b3_\b1_\b7#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\\n+318 EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\\n+319 using _eigen_aligned_allocator_trait = void;\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bL_\bo_\bw_\be_\br\n-Vector backSubstituteLower(const Matrix &L, const Vector &b, bool unit)\n-backSubstitute L*x=b\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:367\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b^\n-Vector operator^(const Matrix &A, const Vector &v)\n-overload ^ for trans(A)*v We transpose the vectors for speed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bc_\ba_\bl_\be_\b__\bi_\bn_\bp_\bl_\ba_\bc_\be\n-void vector_scale_inplace(const Vector &v, Matrix &A, bool inf_mask)\n-scales a matrix row or column by the values in a vector Arguments (Matrix,\n-Vector) scales the columns...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:482\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\bo_\bw\n-const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)\n-Extracts a row view from a matrix that avoids a copy.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:222\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm\n-T expm(const Vector &x, int K=7)\n-Exponential map given exponential coordinates class T needs a wedge<> function\n-and a constructor from...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:317\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\ba_\bv_\be\n-void save(const Matrix &A, const string &s, const string &filename)\n-save a matrix to file, which can be loaded by matlab\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n-bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n-equals with an tolerance, prints out message if unequal\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt\n-bool linear_dependent(const Matrix &A, const Matrix &B, double tol)\n-check whether the rows of two matrices are linear dependent\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bl_\bu_\bm_\bn\n-const MATRIX::ConstColXpr column(const MATRIX &A, size_t j)\n-Extracts a column view from a matrix that avoids a copy.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:211\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bz_\be_\br_\bo_\bB_\be_\bl_\bo_\bw_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-void zeroBelowDiagonal(MATRIX &A, size_t cols=0)\n-Zeros all of the elements below the diagonal of a matrix, in place.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:232\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\b__\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-list< boost::tuple< Vector, double, double > > weighted_eliminate(Matrix &A,\n-Vector &b, const Vector &sigmas)\n-Imperative algorithm for in-place full elimination with weights and constraint\n-handling.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:273\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br\n-Vector backSubstituteUpper(const Matrix &U, const Vector &b, bool unit)\n-backSubstitute U*x=b\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:377\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl\n-bool assert_inequal(const Matrix &A, const Matrix &B, double tol)\n-inequals with an tolerance, prints out message if within tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br\n-void householder(Matrix &A, size_t k)\n-Householder tranformation, zeros below diagonal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:354\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>\n-istream & operator>>(istream &inputStream, Matrix &destinationMatrix)\n-Read a matrix from an input stream, such as a file.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bp_\bl_\ba_\bc_\be_\b__\bQ_\bR\n-void inplace_QR(Matrix &A)\n-QR factorization using Eigen's internal block QR algorithm.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:636\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bv_\bd\n-void svd(const Matrix &A, Matrix &U, Vector &S, Matrix &V)\n-SVD computes economy SVD A=U*S*V'.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:560\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bk_\be_\bw_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc\n-Matrix3 skewSymmetric(double wx, double wy, double wz)\n-skew symmetric matrix returns this: 0 -wz wy wz 0 -wx -wy wx 0\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:401\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bu_\bb\n-Eigen::Block< const MATRIX > sub(const MATRIX &A, size_t i1, size_t i2, size_t\n-j1, size_t j2)\n-extract submatrix, slice semantics, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:181\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bn_\bs\n-Matrix trans(const Matrix &A)\n-static transpose function, just calls Eigen transpose member function\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:242\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n-bool operator!=(const Matrix &A, const Matrix &B)\n-inequality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bL_\bT\n-boost::tuple< int, double, Vector > DLT(const Matrix &A, double rank_tol)\n-Direct linear transform algorithm that calls svd to find a vector v that\n-minimizes the algebraic erro...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:568\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b__\bi_\bn_\bv_\be_\br_\bs_\be\n-Matrix cholesky_inverse(const Matrix &A)\n-Return the inverse of a S.P.D.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:539\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bo_\bd\n-MATRIX prod(const MATRIX &A, const MATRIX &B)\n-products using old-style format to improve compatibility\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:144\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br_\b_\n-void householder_(Matrix &A, size_t k, bool copy_vectors)\n-Imperative version of Householder QR factorization, Golub & Van Loan p 224\n-version with Householder v...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:327\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bS_\bu_\bb\n-void insertSub(Eigen::MatrixBase< Derived1 > &fullMatrix, const Eigen::\n-MatrixBase< Derived2 > &subMatrix, size_t i, size_t j)\n-insert a submatrix IN PLACE at a specified location in a larger matrix NOTE:\n-there is no size checkin...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bl_\bl_\be_\bc_\bt\n-Matrix collect(const std::vector< const Matrix * > &matrices, size_t m, size_t\n-n)\n-create a matrix by concatenating Given a set of matrices: A1, A2, A3... If all\n-matrices have the same...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:443\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\b__\bi_\bn_\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt\n-bool linear_independent(const Matrix &A, const Matrix &B, double tol)\n-check whether the rows of two matrices are linear independent\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bp_\bE_\bq_\bu_\ba_\bl\n-bool fpEqual(double a, double b, double tol, bool check_relative_also)\n-Ensure we are not including a different version of Eigen in user code than\n-while compiling gtsam,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bq_\br\n-pair< Matrix, Matrix > qr(const Matrix &A)\n-Householder QR factorization, Golub & Van Loan p 224, explicit version\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:235\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bi_\ba_\bg\n-Matrix diag(const std::vector< Matrix > &Hs)\n-Create a matrix with submatrices along its diagonal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n-bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n-DenseBase< MATRIX > &B, double tol=1e-9)\n-equals with a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const Matrix &A, const Matrix &B)\n-equality is just equal_with_abs_tol 1e-9\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be_\b__\bs_\bq_\bu_\ba_\br_\be_\b__\br_\bo_\bo_\bt\n-Matrix inverse_square_root(const Matrix &A)\n-Use Cholesky to calculate inverse square root of a matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:552\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bs_\bh_\ba_\bp_\be\n-Reshape functor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:246\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be\n-Functor that implements multiplication of a vector b with the inverse of a\n-matrix A.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:456\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-VectorN operator()(const MatrixN &A, const VectorN &b, OptionalJacobian< N, N\n-*N > H1=boost::none, OptionalJacobian< N, N > H2=boost::none) const\n-A.inverse() * b, with optional derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:461\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-Functor that implements multiplication with the inverse of a matrix, itself the\n-result of a function ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:482\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-VectorN operator()(const T &a, const VectorN &b, OptionalJacobian< N, M >\n-H1=boost::none, OptionalJacobian< N, N > H2=boost::none) const\n-f(a).inverse() * b, with optional derivatives\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:497\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-MultiplyWithInverseFunction(const Operator &phi)\n-Construct with function as explained above.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:494\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be\n+ListOfOneContainer< T > ListOfOne(const T &element)\n+Factory function for ListOfOneContainer to enable ListOfOne(e) syntax.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:178\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bm_\ba_\bn_\bg_\bl_\be\n+std::string demangle(const char *name)\n+Pretty print Value type name.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.cpp:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx\n+std::uint64_t FactorIndex\n+Integer nonlinear factor index type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bv_\bo_\bi_\bd_\b__\bt\n+void void_t\n+Convenience void_t as we assume C++11, it will not conflict the std one in\n+C++17 as this is in gtsam:...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:277\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br\n+Helper class that uses templates to select between two types based on whether\n+TEST_TYPE is const or n...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt\n+Helper struct that encapsulates a value with a default, this is just used as a\n+member object so you d...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+T & operator*()\n+Operator to access the value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:147\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+const T & operator*() const\n+Operator to access the value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt\n+ValueWithDefault()\n+Default constructor, initialize to default value supplied in template argument.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt\n+ValueWithDefault(const T &_value)\n+Initialize to the given value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:144\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br\n+A helper class that behaves as a container with one element, and works with\n+boost::range.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be\n+An object whose scope defines a block where TBB and OpenMP parallelism are\n+mixed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n+A SFINAE trait to mark classes that need special alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:295\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+ * _\bt_\by_\bp_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00023.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00023.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/ProductLieGroup.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Value.h File Reference\n \n \n \n \n \n \n \n@@ -96,45 +96,43 @@\n \n \n \n
\n \n-
ProductLieGroup.h File Reference
\n+
Value.h File Reference
\n
\n
\n \n-

Group product of two Lie Groups. \n+

The base class for any variable that can be optimized or used in a factor. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::ProductLieGroup< G, H >
 Template to construct the product Lie group of two other Lie groups Assumes Lie group structure for G and H. More...
 
struct  gtsam::traits< ProductLieGroup< G, H > >
class  gtsam::Value
 This is the base class for any type to be stored in Values. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Group product of two Lie Groups.

\n-
Date
May, 2015
\n-
Author
Frank Dellaert
\n+

The base class for any variable that can be optimized or used in a factor.

\n+
Author
Richard Roberts
\n+
Date
Jan 14, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ProductLieGroup.h File Reference\n-Group product of two Lie Groups. _\bM_\bo_\br_\be_\b._\b._\b.\n+Value.h File Reference\n+The base class for any variable that can be optimized or used in a factor.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bG_\b,_\b _\bH_\b _\b>\n-\u00a0 Template to construct the product Lie group of two other Lie groups\n- Assumes Lie group structure for G and H. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bG_\b,_\b _\bH_\b _\b>_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n+\u00a0 This is the base class for any type to be stored in _\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Group product of two Lie Groups.\n- Date\n- May, 2015\n+The base class for any variable that can be optimized or used in a factor.\n Author\n- Frank Dellaert\n+ Richard Roberts\n+ Date\n+ Jan 14, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b._\bh\n+ * _\bV_\ba_\bl_\bu_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00023.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00023.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00023 = [\n- [\"gtsam::ProductLieGroup< G, H >\", \"a02464.html\", \"a02464\"],\n- [\"gtsam::traits< ProductLieGroup< G, H > >\", \"a02468.html\", null]\n+ [\"gtsam::Value\", \"a02596.html\", \"a02596\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00023_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00023_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/ProductLieGroup.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Value.h Source File\n \n \n \n \n \n \n \n@@ -98,193 +98,100 @@\n
No Matches
\n \n \n \n \n \n
\n-
ProductLieGroup.h
\n+
Value.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n-
10 * -------------------------------1------------------------------------------- */
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/base/Lie.h>
\n-
22#include <utility> // pair
\n-
23
\n-
24namespace gtsam {
\n-
25
\n-
28template<typename G, typename H>
\n-
\n-
29class ProductLieGroup: public std::pair<G, H> {
\n-
30 BOOST_CONCEPT_ASSERT((IsLieGroup<G>));
\n-
31 BOOST_CONCEPT_ASSERT((IsLieGroup<H>));
\n-
32 typedef std::pair<G, H> Base;
\n-
33
\n-
34protected:
\n-
35 enum {dimension1 = traits<G>::dimension};
\n-
36 enum {dimension2 = traits<H>::dimension};
\n-
37
\n-
38public:
\n-
40 ProductLieGroup():Base(traits<G>::Identity(),traits<H>::Identity()) {}
\n-
41
\n-
42 // Construct from two subgroup elements
\n-
43 ProductLieGroup(const G& g, const H& h):Base(g,h) {}
\n-
44
\n-
45 // Construct from base
\n-
46 ProductLieGroup(const Base& base):Base(base) {}
\n-
47
\n-
50 typedef multiplicative_group_tag group_flavor;
\n-
51 static ProductLieGroup Identity() {return ProductLieGroup();}
\n-
52
\n-
53 ProductLieGroup operator*(const ProductLieGroup& other) const {
\n-
54 return ProductLieGroup(traits<G>::Compose(this->first,other.first),
\n-
55 traits<H>::Compose(this->second,other.second));
\n-
56 }
\n-
57 ProductLieGroup inverse() const {
\n-
58 return ProductLieGroup(traits<G>::Inverse(this->first), traits<H>::Inverse(this->second));
\n-
59 }
\n-
60 ProductLieGroup compose(const ProductLieGroup& g) const {
\n-
61 return (*this) * g;
\n-
62 }
\n-
63 ProductLieGroup between(const ProductLieGroup& g) const {
\n-
64 return this->inverse() * g;
\n-
65 }
\n-
67
\n-
70 enum {dimension = dimension1 + dimension2};
\n-
71 inline static size_t Dim() {return dimension;}
\n-
72 inline size_t dim() const {return dimension;}
\n-
73
\n-
74 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
\n-
75 typedef OptionalJacobian<dimension, dimension> ChartJacobian;
\n-
76
\n-
77 ProductLieGroup retract(const TangentVector& v, //
\n-
78 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) const {
\n-
79 if (H1||H2) throw std::runtime_error("ProductLieGroup::retract derivatives not implemented yet");
\n-
80 G g = traits<G>::Retract(this->first, v.template head<dimension1>());
\n-
81 H h = traits<H>::Retract(this->second, v.template tail<dimension2>());
\n-
82 return ProductLieGroup(g,h);
\n-
83 }
\n-
84 TangentVector localCoordinates(const ProductLieGroup& g, //
\n-
85 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) const {
\n-
86 if (H1||H2) throw std::runtime_error("ProductLieGroup::localCoordinates derivatives not implemented yet");
\n-
87 typename traits<G>::TangentVector v1 = traits<G>::Local(this->first, g.first);
\n-
88 typename traits<H>::TangentVector v2 = traits<H>::Local(this->second, g.second);
\n-
89 TangentVector v;
\n-
90 v << v1, v2;
\n-
91 return v;
\n-
92 }
\n-
94
\n-
97protected:
\n-
98 typedef Eigen::Matrix<double, dimension, dimension> Jacobian;
\n-
99 typedef Eigen::Matrix<double, dimension1, dimension1> Jacobian1;
\n-
100 typedef Eigen::Matrix<double, dimension2, dimension2> Jacobian2;
\n-
101
\n-
102public:
\n-
103 ProductLieGroup compose(const ProductLieGroup& other, ChartJacobian H1,
\n-
104 ChartJacobian H2 = boost::none) const {
\n-
105 Jacobian1 D_g_first; Jacobian2 D_h_second;
\n-
106 G g = traits<G>::Compose(this->first,other.first, H1 ? &D_g_first : 0);
\n-
107 H h = traits<H>::Compose(this->second,other.second, H1 ? &D_h_second : 0);
\n-
108 if (H1) {
\n-
109 H1->setZero();
\n-
110 H1->template topLeftCorner<dimension1,dimension1>() = D_g_first;
\n-
111 H1->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
\n-
112 }
\n-
113 if (H2) *H2 = Jacobian::Identity();
\n-
114 return ProductLieGroup(g,h);
\n-
115 }
\n-
116 ProductLieGroup between(const ProductLieGroup& other, ChartJacobian H1,
\n-
117 ChartJacobian H2 = boost::none) const {
\n-
118 Jacobian1 D_g_first; Jacobian2 D_h_second;
\n-
119 G g = traits<G>::Between(this->first,other.first, H1 ? &D_g_first : 0);
\n-
120 H h = traits<H>::Between(this->second,other.second, H1 ? &D_h_second : 0);
\n-
121 if (H1) {
\n-
122 H1->setZero();
\n-
123 H1->template topLeftCorner<dimension1,dimension1>() = D_g_first;
\n-
124 H1->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
\n+
21#include <gtsam/config.h> // Configuration from CMake
\n+
22
\n+
23#include <gtsam/base/Vector.h>
\n+
24#include <boost/serialization/nvp.hpp>
\n+
25#include <boost/serialization/assume_abstract.hpp>
\n+
26#include <memory>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
\n+
37 class GTSAM_EXPORT Value {
\n+
38 public:
\n+
39
\n+
41 virtual Value* clone_() const = 0;
\n+
42
\n+
44 virtual void deallocate_() const = 0;
\n+
45
\n+
47 virtual boost::shared_ptr<Value> clone() const = 0;
\n+
48
\n+
50 virtual bool equals_(const Value& other, double tol = 1e-9) const = 0;
\n+
51
\n+
53 virtual void print(const std::string& str = "") const = 0;
\n+
54
\n+
60 virtual size_t dim() const = 0;
\n+
61
\n+
68 virtual Value* retract_(const Vector& delta) const = 0;
\n+
69
\n+
76 virtual Vector localCoordinates_(const Value& value) const = 0;
\n+
77
\n+
\n+
79 virtual Value& operator=(const Value& /*rhs*/) {
\n+
80 //needs a empty definition so recursion in implicit derived assignment operators work
\n+
81 return *this;
\n+
82 }
\n+
\n+
83
\n+
85 template<typename ValueType>
\n+
86 const ValueType& cast() const;
\n+
87
\n+
89 virtual ~Value() {}
\n+
90
\n+
91 private:
\n+
122 friend class boost::serialization::access;
\n+
123 template<class ARCHIVE>
\n+
124 void serialize(ARCHIVE & /*ar*/, const unsigned int /*version*/) {
\n
125 }
\n-
126 if (H2) *H2 = Jacobian::Identity();
\n-
127 return ProductLieGroup(g,h);
\n-
128 }
\n-
129 ProductLieGroup inverse(ChartJacobian D) const {
\n-
130 Jacobian1 D_g_first; Jacobian2 D_h_second;
\n-
131 G g = traits<G>::Inverse(this->first, D ? &D_g_first : 0);
\n-
132 H h = traits<H>::Inverse(this->second, D ? &D_h_second : 0);
\n-
133 if (D) {
\n-
134 D->setZero();
\n-
135 D->template topLeftCorner<dimension1,dimension1>() = D_g_first;
\n-
136 D->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
\n-
137 }
\n-
138 return ProductLieGroup(g,h);
\n-
139 }
\n-
140 static ProductLieGroup Expmap(const TangentVector& v, ChartJacobian Hv = boost::none) {
\n-
141 Jacobian1 D_g_first; Jacobian2 D_h_second;
\n-
142 G g = traits<G>::Expmap(v.template head<dimension1>(), Hv ? &D_g_first : 0);
\n-
143 H h = traits<H>::Expmap(v.template tail<dimension2>(), Hv ? &D_h_second : 0);
\n-
144 if (Hv) {
\n-
145 Hv->setZero();
\n-
146 Hv->template topLeftCorner<dimension1,dimension1>() = D_g_first;
\n-
147 Hv->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
\n-
148 }
\n-
149 return ProductLieGroup(g,h);
\n-
150 }
\n-
151 static TangentVector Logmap(const ProductLieGroup& p, ChartJacobian Hp = boost::none) {
\n-
152 Jacobian1 D_g_first; Jacobian2 D_h_second;
\n-
153 typename traits<G>::TangentVector v1 = traits<G>::Logmap(p.first, Hp ? &D_g_first : 0);
\n-
154 typename traits<H>::TangentVector v2 = traits<H>::Logmap(p.second, Hp ? &D_h_second : 0);
\n-
155 TangentVector v;
\n-
156 v << v1, v2;
\n-
157 if (Hp) {
\n-
158 Hp->setZero();
\n-
159 Hp->template topLeftCorner<dimension1,dimension1>() = D_g_first;
\n-
160 Hp->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
\n-
161 }
\n-
162 return v;
\n-
163 }
\n-
164 static TangentVector LocalCoordinates(const ProductLieGroup& p, ChartJacobian Hp = boost::none) {
\n-
165 return Logmap(p, Hp);
\n-
166 }
\n-
167 ProductLieGroup expmap(const TangentVector& v) const {
\n-
168 return compose(ProductLieGroup::Expmap(v));
\n-
169 }
\n-
170 TangentVector logmap(const ProductLieGroup& g) const {
\n-
171 return ProductLieGroup::Logmap(between(g));
\n-
172 }
\n-
174
\n-
175};
\n+
126
\n+
127 };
\n
\n-
176
\n-
177// Define any direct product group to be a model of the multiplicative Group concept
\n-
178template<typename G, typename H>
\n-
179struct traits<ProductLieGroup<G, H> > : internal::LieGroupTraits<ProductLieGroup<G, H> > {};
\n-
180
\n-
181} // namespace gtsam
\n-
182
\n-
Base class and basic functions for Lie types.
\n+
128
\n+
129} /* namespace gtsam */
\n+
130
\n+
131BOOST_SERIALIZATION_ASSUME_ABSTRACT(gtsam::Value)
\n+
typedef and functions to augment Eigen's VectorXd
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper class that implements the traits interface for GTSAM lie groups.
Definition Lie.h:174
\n-
Lie Group Concept.
Definition Lie.h:260
\n-
Template to construct the product Lie group of two other Lie groups Assumes Lie group structure for G...
Definition ProductLieGroup.h:29
\n-
ProductLieGroup()
Default constructor yields identity.
Definition ProductLieGroup.h:40
\n+
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n+
virtual size_t dim() const =0
Return the dimensionality of the tangent space of this value.
\n+
virtual Value * retract_(const Vector &delta) const =0
Increment the value, by mapping from the vector delta in the tangent space of the current value back ...
\n+
virtual void deallocate_() const =0
Deallocate a raw pointer of this value.
\n+
virtual ~Value()
Virutal destructor.
Definition Value.h:89
\n+
virtual bool equals_(const Value &other, double tol=1e-9) const =0
Compare this Value with another for equality.
\n+
virtual Vector localCoordinates_(const Value &value) const =0
Compute the coordinates in the tangent space of this value that retract() would map to value.
\n+
virtual Value & operator=(const Value &)
Assignment operator.
Definition Value.h:79
\n+
virtual void print(const std::string &str="") const =0
Print this value, for debugging and unit tests.
\n+
virtual Value * clone_() const =0
Clone this value in a special memory pool, must be deleted with Value::deallocate_,...
\n+
virtual boost::shared_ptr< Value > clone() const =0
Clone this value (normal clone on the heap, delete with 'delete' operator)
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,213 +1,119 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ProductLieGroup.h\n+Value.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n-10 * -------------------------------1------------------------------------------\n+10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-22#include // pair\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-28template\n-_\b2_\b9class _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp: public std::pair {\n-30 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\bG_\b>));\n-31 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\bH_\b>));\n-32 typedef std::pair Base;\n-33\n-34protected:\n-35 enum {dimension1 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn};\n-36 enum {dimension2 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bH_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn};\n-37\n-38public:\n-_\b4_\b0 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp():Base(_\bt_\br_\ba_\bi_\bt_\bs::Identity(),_\bt_\br_\ba_\bi_\bt_\bs::Identity()) {}\n-41\n-42 // Construct from two subgroup elements\n-43 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(const G& g, const H& h):Base(g,h) {}\n-44\n-45 // Construct from base\n-46 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(const Base& base):Base(base) {}\n-47\n-50 typedef multiplicative_group_tag group_flavor;\n-51 static _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp Identity() {return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp();}\n-52\n-53 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp operator*(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& other) const {\n-54 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(traits::Compose(this->first,other.first),\n-55 traits::Compose(this->second,other.second));\n-56 }\n-57 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp inverse() const {\n-58 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(traits::Inverse(this->first), traits::Inverse\n-(this->second));\n-59 }\n-60 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp compose(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& g) const {\n-61 return (*this) * g;\n-62 }\n-63 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp between(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& g) const {\n-64 return this->inverse() * g;\n-65 }\n-67\n-70 enum {dimension = dimension1 + dimension2};\n-71 inline static size_t Dim() {return dimension;}\n-72 inline size_t dim() const {return dimension;}\n-73\n-74 typedef Eigen::Matrix TangentVector;\n-75 typedef OptionalJacobian ChartJacobian;\n-76\n-77 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp retract(const TangentVector& v, //\n-78 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) const {\n-79 if (H1||H2) throw std::runtime_error(\"ProductLieGroup::retract derivatives\n-not implemented yet\");\n-80 G g = traits::Retract(this->first, v.template head());\n-81 H h = traits::Retract(this->second, v.template tail());\n-82 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(g,h);\n-83 }\n-84 TangentVector localCoordinates(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& g, //\n-85 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) const {\n-86 if (H1||H2) throw std::runtime_error(\"ProductLieGroup::localCoordinates\n-derivatives not implemented yet\");\n-87 typename traits::TangentVector v1 = traits::Local(this->first,\n-g.first);\n-88 typename traits::TangentVector v2 = traits::Local(this->second,\n-g.second);\n-89 TangentVector v;\n-90 v << v1, v2;\n-91 return v;\n-92 }\n-94\n-97protected:\n-98 typedef Eigen::Matrix Jacobian;\n-99 typedef Eigen::Matrix Jacobian1;\n-100 typedef Eigen::Matrix Jacobian2;\n-101\n-102public:\n-103 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp compose(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& other, ChartJacobian H1,\n-104 ChartJacobian H2 = boost::none) const {\n-105 Jacobian1 D_g_first; Jacobian2 D_h_second;\n-106 G g = traits::Compose(this->first,other.first, H1 ? &D_g_first : 0);\n-107 H h = traits::Compose(this->second,other.second, H1 ? &D_h_second : 0);\n-108 if (H1) {\n-109 H1->setZero();\n-110 H1->template topLeftCorner() = D_g_first;\n-111 H1->template bottomRightCorner() = D_h_second;\n-112 }\n-113 if (H2) *H2 = Jacobian::Identity();\n-114 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(g,h);\n-115 }\n-116 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp between(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& other, ChartJacobian H1,\n-117 ChartJacobian H2 = boost::none) const {\n-118 Jacobian1 D_g_first; Jacobian2 D_h_second;\n-119 G g = traits::Between(this->first,other.first, H1 ? &D_g_first : 0);\n-120 H h = traits::Between(this->second,other.second, H1 ? &D_h_second : 0);\n-121 if (H1) {\n-122 H1->setZero();\n-123 H1->template topLeftCorner() = D_g_first;\n-124 H1->template bottomRightCorner() = D_h_second;\n+21#include // Configuration from CMake\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+24#include \n+25#include \n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+_\b3_\b7 class GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be {\n+38 public:\n+39\n+_\b4_\b1 virtual _\bV_\ba_\bl_\bu_\be* _\bc_\bl_\bo_\bn_\be_\b_() const = 0;\n+42\n+_\b4_\b4 virtual void _\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be_\b_() const = 0;\n+45\n+_\b4_\b7 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const = 0;\n+48\n+_\b5_\b0 virtual bool _\be_\bq_\bu_\ba_\bl_\bs_\b_(const _\bV_\ba_\bl_\bu_\be& other, double tol = 1e-9) const = 0;\n+51\n+_\b5_\b3 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const = 0;\n+54\n+_\b6_\b0 virtual size_t _\bd_\bi_\bm() const = 0;\n+61\n+_\b6_\b8 virtual _\bV_\ba_\bl_\bu_\be* _\br_\be_\bt_\br_\ba_\bc_\bt_\b_(const Vector& delta) const = 0;\n+69\n+_\b7_\b6 virtual Vector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\b_(const _\bV_\ba_\bl_\bu_\be& value) const = 0;\n+77\n+_\b7_\b9 virtual _\bV_\ba_\bl_\bu_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bV_\ba_\bl_\bu_\be& /*rhs*/) {\n+80 //needs a empty definition so recursion in implicit derived assignment\n+operators work\n+81 return *this;\n+82 }\n+83\n+85 template\n+86 const ValueType& cast() const;\n+87\n+_\b8_\b9 virtual _\b~_\bV_\ba_\bl_\bu_\be() {}\n+90\n+91 private:\n+_\b1_\b2_\b2 friend class boost::serialization::access;\n+123 template\n+124 void serialize(ARCHIVE & /*ar*/, const unsigned int /*version*/) {\n 125 }\n-126 if (H2) *H2 = Jacobian::Identity();\n-127 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(g,h);\n-128 }\n-129 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp inverse(ChartJacobian D) const {\n-130 Jacobian1 D_g_first; Jacobian2 D_h_second;\n-131 G g = traits::Inverse(this->first, D ? &D_g_first : 0);\n-132 H h = traits::Inverse(this->second, D ? &D_h_second : 0);\n-133 if (D) {\n-134 D->setZero();\n-135 D->template topLeftCorner() = D_g_first;\n-136 D->template bottomRightCorner() = D_h_second;\n-137 }\n-138 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(g,h);\n-139 }\n-140 static _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp Expmap(const TangentVector& v, ChartJacobian Hv =\n-boost::none) {\n-141 Jacobian1 D_g_first; Jacobian2 D_h_second;\n-142 G g = traits::Expmap(v.template head(), Hv ? &D_g_first :\n-0);\n-143 H h = traits::Expmap(v.template tail(), Hv ? &D_h_second :\n-0);\n-144 if (Hv) {\n-145 Hv->setZero();\n-146 Hv->template topLeftCorner() = D_g_first;\n-147 Hv->template bottomRightCorner() = D_h_second;\n-148 }\n-149 return _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp(g,h);\n-150 }\n-151 static TangentVector Logmap(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& p, ChartJacobian Hp =\n-boost::none) {\n-152 Jacobian1 D_g_first; Jacobian2 D_h_second;\n-153 typename traits::TangentVector v1 = traits::Logmap(p.first, Hp ?\n-&D_g_first : 0);\n-154 typename traits::TangentVector v2 = traits::Logmap(p.second, Hp ?\n-&D_h_second : 0);\n-155 TangentVector v;\n-156 v << v1, v2;\n-157 if (Hp) {\n-158 Hp->setZero();\n-159 Hp->template topLeftCorner() = D_g_first;\n-160 Hp->template bottomRightCorner() = D_h_second;\n-161 }\n-162 return v;\n-163 }\n-164 static TangentVector LocalCoordinates(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& p,\n-ChartJacobian Hp = boost::none) {\n-165 return Logmap(p, Hp);\n-166 }\n-167 _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp expmap(const TangentVector& v) const {\n-168 return compose(ProductLieGroup::Expmap(v));\n-169 }\n-170 TangentVector logmap(const _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp& g) const {\n-171 return ProductLieGroup::Logmap(between(g));\n-172 }\n-174\n-175};\n-176\n-177// Define any direct product group to be a model of the multiplicative Group\n-concept\n-178template\n-_\b1_\b7_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp > : _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:\n-_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs > {};\n-180\n-181} // namespace gtsam\n-182\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n+126\n+127 };\n+128\n+129} /* namespace gtsam */\n+130\n+131BOOST_SERIALIZATION_ASSUME_ABSTRACT(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be)\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs\n-A helper class that implements the traits interface for GTSAM lie groups.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Lie Group Concept.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Template to construct the product Lie group of two other Lie groups Assumes Lie\n-group structure for G...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProductLieGroup.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-ProductLieGroup()\n-Default constructor yields identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProductLieGroup.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n+This is the base class for any type to be stored in Values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bd_\bi_\bm\n+virtual size_t dim() const =0\n+Return the dimensionality of the tangent space of this value.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt_\b_\n+virtual Value * retract_(const Vector &delta) const =0\n+Increment the value, by mapping from the vector delta in the tangent space of\n+the current value back ...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be_\b_\n+virtual void deallocate_() const =0\n+Deallocate a raw pointer of this value.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\b~_\bV_\ba_\bl_\bu_\be\n+virtual ~Value()\n+Virutal destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs_\b_\n+virtual bool equals_(const Value &other, double tol=1e-9) const =0\n+Compare this Value with another for equality.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\b_\n+virtual Vector localCoordinates_(const Value &value) const =0\n+Compute the coordinates in the tangent space of this value that retract() would\n+map to value.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+virtual Value & operator=(const Value &)\n+Assignment operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &str=\"\") const =0\n+Print this value, for debugging and unit tests.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be_\b_\n+virtual Value * clone_() const =0\n+Clone this value in a special memory pool, must be deleted with Value::\n+deallocate_,...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual boost::shared_ptr< Value > clone() const =0\n+Clone this value (normal clone on the heap, delete with 'delete' operator)\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b._\bh\n+ * _\bV_\ba_\bl_\bu_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00026_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00026_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/ConcurrentMap.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h Source File\n \n \n \n \n \n \n \n@@ -98,140 +98,397 @@\n
No Matches
\n \n \n \n \n \n
\n-
ConcurrentMap.h
\n+
Matrix.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-
22
\n-
23// Change class depending on whether we are using TBB
\n-
24#ifdef GTSAM_USE_TBB
\n-
25
\n-
26// Include TBB header
\n-
27# include <tbb/concurrent_unordered_map.h>
\n-
28# undef min // TBB seems to include Windows.h which defines these macros that cause problems
\n-
29# undef max
\n-
30# undef ERROR
\n-
31
\n-
32#include <functional> // std::hash()
\n-
33
\n-
34// Use TBB concurrent_unordered_map for ConcurrentMap
\n-
35template <typename KEY, typename VALUE>
\n-
36using ConcurrentMapBase = tbb::concurrent_unordered_map<
\n-
37 KEY,
\n-
38 VALUE,
\n-
39 std::hash<KEY>
\n-
40 >;
\n-
41
\n-
42#else
\n-
43
\n-
44// If we're not using TBB, use a FastMap for ConcurrentMap
\n-
45#include <gtsam/base/FastMap.h>
\n-
46template <typename KEY, typename VALUE>
\n-\n-
48
\n-
49#endif
\n-
50
\n-
51#include <boost/serialization/nvp.hpp>
\n-
52#include <boost/serialization/split_member.hpp>
\n-
53#include <boost/static_assert.hpp>
\n-
54
\n-\n-
56
\n-
57namespace gtsam {
\n+
23// \\callgraph
\n+
24
\n+
25#pragma once
\n+
26
\n+\n+
28#include <gtsam/base/Vector.h>
\n+
29#include <boost/tuple/tuple.hpp>
\n+
30
\n+
31#include <vector>
\n+
32
\n+
38namespace gtsam {
\n+
39
\n+
40typedef Eigen::MatrixXd Matrix;
\n+
41typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> MatrixRowMajor;
\n+
42
\n+
43// Create handy typedefs and constants for square-size matrices
\n+
44// MatrixMN, MatrixN = MatrixNN, I_NxN, and Z_NxN, for M,N=1..9
\n+
45#define GTSAM_MAKE_MATRIX_DEFS(N) \\
\n+
46using Matrix##N = Eigen::Matrix<double, N, N>; \\
\n+
47using Matrix1##N = Eigen::Matrix<double, 1, N>; \\
\n+
48using Matrix2##N = Eigen::Matrix<double, 2, N>; \\
\n+
49using Matrix3##N = Eigen::Matrix<double, 3, N>; \\
\n+
50using Matrix4##N = Eigen::Matrix<double, 4, N>; \\
\n+
51using Matrix5##N = Eigen::Matrix<double, 5, N>; \\
\n+
52using Matrix6##N = Eigen::Matrix<double, 6, N>; \\
\n+
53using Matrix7##N = Eigen::Matrix<double, 7, N>; \\
\n+
54using Matrix8##N = Eigen::Matrix<double, 8, N>; \\
\n+
55using Matrix9##N = Eigen::Matrix<double, 9, N>; \\
\n+
56static const Eigen::MatrixBase<Matrix##N>::IdentityReturnType I_##N##x##N = Matrix##N::Identity(); \\
\n+
57static const Eigen::MatrixBase<Matrix##N>::ConstantReturnType Z_##N##x##N = Matrix##N::Zero();
\n
58
\n-
67template<typename KEY, typename VALUE>
\n-
\n-
68class ConcurrentMap : public ConcurrentMapBase<KEY,VALUE> {
\n-
69
\n-
70public:
\n-
71
\n-\n-
73
\n-\n+
59GTSAM_MAKE_MATRIX_DEFS(1)
\n+
60GTSAM_MAKE_MATRIX_DEFS(2)
\n+
61GTSAM_MAKE_MATRIX_DEFS(3)
\n+
62GTSAM_MAKE_MATRIX_DEFS(4)
\n+
63GTSAM_MAKE_MATRIX_DEFS(5)
\n+
64GTSAM_MAKE_MATRIX_DEFS(6)
\n+
65GTSAM_MAKE_MATRIX_DEFS(7)
\n+
66GTSAM_MAKE_MATRIX_DEFS(8)
\n+
67GTSAM_MAKE_MATRIX_DEFS(9)
\n+
68
\n+
69// Matrix expressions for accessing parts of matrices
\n+
70typedef Eigen::Block<Matrix> SubMatrix;
\n+
71typedef Eigen::Block<const Matrix> ConstSubMatrix;
\n+
72
\n+
73// Matrix formatting arguments when printing.
\n+
74// Akin to Matlab style.
\n+
75const Eigen::IOFormat& matlabFormat();
\n
76
\n-
78 template<typename INPUTITERATOR>
\n-
79 ConcurrentMap(INPUTITERATOR first, INPUTITERATOR last) : Base(first, last) {}
\n-
80
\n-\n-
83
\n-
85 ConcurrentMap(const Base& x) : Base(x) {}
\n-
86
\n-
88 bool exists(const KEY& e) const { return this->count(e); }
\n-
89
\n-
90#ifndef GTSAM_USE_TBB
\n-
91 // If we're not using TBB and this is actually a FastMap, we need to add these functions and hide
\n-
92 // the original erase functions.
\n-
93 void unsafe_erase(typename Base::iterator position) { ((Base*)this)->erase(position); }
\n-
94 typename Base::size_type unsafe_erase(const KEY& k) { return ((Base*)this)->erase(k); }
\n-
95 void unsafe_erase(typename Base::iterator first, typename Base::iterator last) {
\n-
96 return ((Base*)this)->erase(first, last); }
\n-
97private:
\n-
98 void erase() {}
\n-
99public:
\n-
100#endif
\n-
101
\n-
102private:
\n-\n-
105 template<class Archive>
\n-
106 void save(Archive& ar, const unsigned int /*version*/) const
\n-
107 {
\n-
108 // Copy to an STL container and serialize that
\n-
109 FastVector<std::pair<KEY, VALUE> > map(this->size());
\n-
110 std::copy(this->begin(), this->end(), map.begin());
\n-
111 ar & BOOST_SERIALIZATION_NVP(map);
\n-
112 }
\n-
113 template<class Archive>
\n-
114 void load(Archive& ar, const unsigned int /*version*/)
\n-
115 {
\n-
116 this->clear();
\n-
117 // Load into STL container and then fill our map
\n-\n-
119 ar & BOOST_SERIALIZATION_NVP(map);
\n-
120 this->insert(map.begin(), map.end());
\n-
121 }
\n-
122 BOOST_SERIALIZATION_SPLIT_MEMBER()
\n-
123};
\n-
\n-
124
\n-
125}
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n-
Included from all GTSAM files.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
80template <class MATRIX>
\n+
\n+
81bool equal_with_abs_tol(const Eigen::DenseBase<MATRIX>& A, const Eigen::DenseBase<MATRIX>& B, double tol = 1e-9) {
\n+
82
\n+
83 const size_t n1 = A.cols(), m1 = A.rows();
\n+
84 const size_t n2 = B.cols(), m2 = B.rows();
\n+
85
\n+
86 if(m1!=m2 || n1!=n2) return false;
\n+
87
\n+
88 for(size_t i=0; i<m1; i++)
\n+
89 for(size_t j=0; j<n1; j++) {
\n+
90 if(!fpEqual(A(i,j), B(i,j), tol, false)) {
\n+
91 return false;
\n+
92 }
\n+
93 }
\n+
94 return true;
\n+
95}
\n+
\n+
96
\n+
\n+
100inline bool operator==(const Matrix& A, const Matrix& B) {
\n+
101 return equal_with_abs_tol(A,B,1e-9);
\n+
102}
\n+
\n+
103
\n+
\n+
107inline bool operator!=(const Matrix& A, const Matrix& B) {
\n+
108 return !(A==B);
\n+
109 }
\n+
\n+
110
\n+
114GTSAM_EXPORT bool assert_equal(const Matrix& A, const Matrix& B, double tol = 1e-9);
\n+
115
\n+
119GTSAM_EXPORT bool assert_inequal(const Matrix& A, const Matrix& B, double tol = 1e-9);
\n+
120
\n+
124GTSAM_EXPORT bool assert_equal(const std::list<Matrix>& As, const std::list<Matrix>& Bs, double tol = 1e-9);
\n+
125
\n+
129GTSAM_EXPORT bool linear_independent(const Matrix& A, const Matrix& B, double tol = 1e-9);
\n+
130
\n+
134GTSAM_EXPORT bool linear_dependent(const Matrix& A, const Matrix& B, double tol = 1e-9);
\n+
135
\n+
140GTSAM_EXPORT Vector operator^(const Matrix& A, const Vector & v);
\n+
141
\n+
143template<class MATRIX>
\n+
\n+
144inline MATRIX prod(const MATRIX& A, const MATRIX&B) {
\n+
145 MATRIX result = A * B;
\n+
146 return result;
\n+
147}
\n+
\n+
148
\n+
152GTSAM_EXPORT void print(const Matrix& A, const std::string& s, std::ostream& stream);
\n+
153
\n+
157GTSAM_EXPORT void print(const Matrix& A, const std::string& s = "");
\n+
158
\n+
162GTSAM_EXPORT void save(const Matrix& A, const std::string &s, const std::string& filename);
\n+
163
\n+
169GTSAM_EXPORT std::istream& operator>>(std::istream& inputStream, Matrix& destinationMatrix);
\n+
170
\n+
180template<class MATRIX>
\n+
\n+
181Eigen::Block<const MATRIX> sub(const MATRIX& A, size_t i1, size_t i2, size_t j1, size_t j2) {
\n+
182 size_t m=i2-i1, n=j2-j1;
\n+
183 return A.block(i1,j1,m,n);
\n+
184}
\n+
\n+
185
\n+
194template <typename Derived1, typename Derived2>
\n+
\n+
195void insertSub(Eigen::MatrixBase<Derived1>& fullMatrix, const Eigen::MatrixBase<Derived2>& subMatrix, size_t i, size_t j) {
\n+
196 fullMatrix.block(i, j, subMatrix.rows(), subMatrix.cols()) = subMatrix;
\n+
197}
\n+
\n+
198
\n+
202GTSAM_EXPORT Matrix diag(const std::vector<Matrix>& Hs);
\n+
203
\n+
210template<class MATRIX>
\n+
\n+
211const typename MATRIX::ConstColXpr column(const MATRIX& A, size_t j) {
\n+
212 return A.col(j);
\n+
213}
\n+
\n+
214
\n+
221template<class MATRIX>
\n+
\n+
222const typename MATRIX::ConstRowXpr row(const MATRIX& A, size_t j) {
\n+
223 return A.row(j);
\n+
224}
\n+
\n+
225
\n+
231template<class MATRIX>
\n+
\n+
232void zeroBelowDiagonal(MATRIX& A, size_t cols=0) {
\n+
233 const size_t m = A.rows(), n = A.cols();
\n+
234 const size_t k = (cols) ? std::min(cols, std::min(m,n)) : std::min(m,n);
\n+
235 for (size_t j=0; j<k; ++j)
\n+
236 A.col(j).segment(j+1, m-(j+1)).setZero();
\n+
237}
\n+
\n+
238
\n+
242inline Matrix trans(const Matrix& A) { return A.transpose(); }
\n+
243
\n+
245template <int OutM, int OutN, int OutOptions, int InM, int InN, int InOptions>
\n+
\n+
246struct Reshape {
\n+
247 //TODO replace this with Eigen's reshape function as soon as available. (There is a PR already pending : https://bitbucket.org/eigen/eigen/pull-request/41/reshape/diff)
\n+
248 typedef Eigen::Map<const Eigen::Matrix<double, OutM, OutN, OutOptions> > ReshapedType;
\n+
249 static inline ReshapedType reshape(const Eigen::Matrix<double, InM, InN, InOptions> & in) {
\n+
250 return in.data();
\n+
251 }
\n+
252};
\n+
\n+
253
\n+
255template <int M, int InOptions>
\n+
\n+
256struct Reshape<M, M, InOptions, M, M, InOptions> {
\n+
257 typedef const Eigen::Matrix<double, M, M, InOptions> & ReshapedType;
\n+
258 static inline ReshapedType reshape(const Eigen::Matrix<double, M, M, InOptions> & in) {
\n+
259 return in;
\n+
260 }
\n+
261};
\n+
\n+
262
\n+
264template <int M, int N, int InOptions>
\n+
\n+
265struct Reshape<M, N, InOptions, M, N, InOptions> {
\n+
266 typedef const Eigen::Matrix<double, M, N, InOptions> & ReshapedType;
\n+
267 static inline ReshapedType reshape(const Eigen::Matrix<double, M, N, InOptions> & in) {
\n+
268 return in;
\n+
269 }
\n+
270};
\n+
\n+
271
\n+
273template <int M, int N, int InOptions>
\n+
\n+
274struct Reshape<N, M, InOptions, M, N, InOptions> {
\n+
275 typedef typename Eigen::Matrix<double, M, N, InOptions>::ConstTransposeReturnType ReshapedType;
\n+
276 static inline ReshapedType reshape(const Eigen::Matrix<double, M, N, InOptions> & in) {
\n+
277 return in.transpose();
\n+
278 }
\n+
279};
\n+
\n+
280
\n+
281template <int OutM, int OutN, int OutOptions, int InM, int InN, int InOptions>
\n+
282inline typename Reshape<OutM, OutN, OutOptions, InM, InN, InOptions>::ReshapedType reshape(const Eigen::Matrix<double, InM, InN, InOptions> & m){
\n+
283 BOOST_STATIC_ASSERT(InM * InN == OutM * OutN);
\n+\n+
285}
\n+
286
\n+
293GTSAM_EXPORT std::pair<Matrix,Matrix> qr(const Matrix& A);
\n+
294
\n+
300GTSAM_EXPORT void inplace_QR(Matrix& A);
\n+
301
\n+
310GTSAM_EXPORT std::list<boost::tuple<Vector, double, double> >
\n+
311weighted_eliminate(Matrix& A, Vector& b, const Vector& sigmas);
\n+
312
\n+
320GTSAM_EXPORT void householder_(Matrix& A, size_t k, bool copy_vectors=true);
\n+
321
\n+
328GTSAM_EXPORT void householder(Matrix& A, size_t k);
\n+
329
\n+
337GTSAM_EXPORT Vector backSubstituteUpper(const Matrix& U, const Vector& b, bool unit=false);
\n+
338
\n+
346//TODO: is this function necessary? it isn't used
\n+
347GTSAM_EXPORT Vector backSubstituteUpper(const Vector& b, const Matrix& U, bool unit=false);
\n+
348
\n+
356GTSAM_EXPORT Vector backSubstituteLower(const Matrix& L, const Vector& b, bool unit=false);
\n+
357
\n+
364GTSAM_EXPORT Matrix stack(size_t nrMatrices, ...);
\n+
365GTSAM_EXPORT Matrix stack(const std::vector<Matrix>& blocks);
\n+
366
\n+
377GTSAM_EXPORT Matrix collect(const std::vector<const Matrix *>& matrices, size_t m = 0, size_t n = 0);
\n+
378GTSAM_EXPORT Matrix collect(size_t nrMatrices, ...);
\n+
379
\n+
386GTSAM_EXPORT void vector_scale_inplace(const Vector& v, Matrix& A, bool inf_mask = false); // row
\n+
387GTSAM_EXPORT Matrix vector_scale(const Vector& v, const Matrix& A, bool inf_mask = false); // row
\n+
388GTSAM_EXPORT Matrix vector_scale(const Matrix& A, const Vector& v, bool inf_mask = false); // column
\n+
389
\n+
\n+
401inline Matrix3 skewSymmetric(double wx, double wy, double wz) {
\n+
402 return (Matrix3() << 0.0, -wz, +wy, +wz, 0.0, -wx, -wy, +wx, 0.0).finished();
\n+
403}
\n+
\n+
404
\n+
405template <class Derived>
\n+
406inline Matrix3 skewSymmetric(const Eigen::MatrixBase<Derived>& w) {
\n+
407 return skewSymmetric(w(0), w(1), w(2));
\n+
408}
\n+
409
\n+
411GTSAM_EXPORT Matrix inverse_square_root(const Matrix& A);
\n+
412
\n+
414GTSAM_EXPORT Matrix cholesky_inverse(const Matrix &A);
\n+
415
\n+
428GTSAM_EXPORT void svd(const Matrix& A, Matrix& U, Vector& S, Matrix& V);
\n+
429
\n+
437GTSAM_EXPORT boost::tuple<int, double, Vector>
\n+
438DLT(const Matrix& A, double rank_tol = 1e-9);
\n+
439
\n+
445GTSAM_EXPORT Matrix expm(const Matrix& A, size_t K=7);
\n+
446
\n+
447std::string formatMatrixIndented(const std::string& label, const Matrix& matrix, bool makeVectorHorizontal = false);
\n+
448
\n+
455template <int N>
\n+
\n+\n+
457 typedef Eigen::Matrix<double, N, 1> VectorN;
\n+
458 typedef Eigen::Matrix<double, N, N> MatrixN;
\n+
459
\n+
\n+
461 VectorN operator()(const MatrixN& A, const VectorN& b,
\n+
462 OptionalJacobian<N, N* N> H1 = boost::none,
\n+
463 OptionalJacobian<N, N> H2 = boost::none) const {
\n+
464 const MatrixN invA = A.inverse();
\n+
465 const VectorN c = invA * b;
\n+
466 // The derivative in A is just -[c[0]*invA c[1]*invA ... c[N-1]*invA]
\n+
467 if (H1)
\n+
468 for (size_t j = 0; j < N; j++)
\n+
469 H1->template middleCols<N>(N * j) = -c[j] * invA;
\n+
470 // The derivative in b is easy, as invA*b is just a linear map:
\n+
471 if (H2) *H2 = invA;
\n+
472 return c;
\n+
473 }
\n+
\n+
474};
\n+
\n+
475
\n+
481template <typename T, int N>
\n+
\n+\n+
483 enum { M = traits<T>::dimension };
\n+
484 typedef Eigen::Matrix<double, N, 1> VectorN;
\n+
485 typedef Eigen::Matrix<double, N, N> MatrixN;
\n+
486
\n+
487 // The function phi should calculate f(a)*b, with derivatives in a and b.
\n+
488 // Naturally, the derivative in b is f(a).
\n+
489 typedef std::function<VectorN(
\n+
490 const T&, const VectorN&, OptionalJacobian<N, M>, OptionalJacobian<N, N>)>
\n+
491 Operator;
\n+
492
\n+
494 MultiplyWithInverseFunction(const Operator& phi) : phi_(phi) {}
\n+
495
\n+
\n+
497 VectorN operator()(const T& a, const VectorN& b,
\n+
498 OptionalJacobian<N, M> H1 = boost::none,
\n+
499 OptionalJacobian<N, N> H2 = boost::none) const {
\n+
500 MatrixN A;
\n+
501 phi_(a, b, boost::none, A); // get A = f(a) by calling f once
\n+
502 const MatrixN invA = A.inverse();
\n+
503 const VectorN c = invA * b;
\n+
504
\n+
505 if (H1) {
\n+
506 Eigen::Matrix<double, N, M> H;
\n+
507 phi_(a, c, H, boost::none); // get derivative H of forward mapping
\n+
508 *H1 = -invA* H;
\n+
509 }
\n+
510 if (H2) *H2 = invA;
\n+
511 return c;
\n+
512 }
\n+
\n+
513
\n+
514 private:
\n+
515 const Operator phi_;
\n+
516};
\n+
\n+
517
\n+
518GTSAM_EXPORT Matrix LLt(const Matrix& A);
\n+
519
\n+
520GTSAM_EXPORT Matrix RtR(const Matrix& A);
\n+
521
\n+
522GTSAM_EXPORT Vector columnNormSquare(const Matrix &A);
\n+
523} // namespace gtsam
\n+
Special class for optional Jacobian arguments.
\n+
typedef and functions to augment Eigen's VectorXd
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition ConcurrentMap.h:68
\n-
ConcurrentMap(INPUTITERATOR first, INPUTITERATOR last)
Constructor from a range, passes through to base class.
Definition ConcurrentMap.h:79
\n-
ConcurrentMap(const ConcurrentMap< KEY, VALUE > &x)
Copy constructor from another ConcurrentMap.
Definition ConcurrentMap.h:82
\n-
bool exists(const KEY &e) const
Handy 'exists' function.
Definition ConcurrentMap.h:88
\n-
ConcurrentMap(const Base &x)
Copy constructor from the base map class.
Definition ConcurrentMap.h:85
\n-
ConcurrentMap()
Default constructor.
Definition ConcurrentMap.h:75
\n-
friend class boost::serialization::access
Serialization function.
Definition ConcurrentMap.h:104
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+
Vector backSubstituteLower(const Matrix &L, const Vector &b, bool unit)
backSubstitute L*x=b
Definition Matrix.cpp:367
\n+
Vector operator^(const Matrix &A, const Vector &v)
overload ^ for trans(A)*v We transpose the vectors for speed.
Definition Matrix.cpp:131
\n+
void vector_scale_inplace(const Vector &v, Matrix &A, bool inf_mask)
scales a matrix row or column by the values in a vector Arguments (Matrix, Vector) scales the columns...
Definition Matrix.cpp:482
\n+
const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)
Extracts a row view from a matrix that avoids a copy.
Definition Matrix.h:222
\n+
T expm(const Vector &x, int K=7)
Exponential map given exponential coordinates class T needs a wedge<> function and a constructor from...
Definition Lie.h:317
\n+
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition Matrix.cpp:167
\n+
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n+
bool linear_dependent(const Matrix &A, const Matrix &B, double tol)
check whether the rows of two matrices are linear dependent
Definition Matrix.cpp:117
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
const MATRIX::ConstColXpr column(const MATRIX &A, size_t j)
Extracts a column view from a matrix that avoids a copy.
Definition Matrix.h:211
\n+
void zeroBelowDiagonal(MATRIX &A, size_t cols=0)
Zeros all of the elements below the diagonal of a matrix, in place.
Definition Matrix.h:232
\n+
list< boost::tuple< Vector, double, double > > weighted_eliminate(Matrix &A, Vector &b, const Vector &sigmas)
Imperative algorithm for in-place full elimination with weights and constraint handling.
Definition Matrix.cpp:273
\n+
Vector backSubstituteUpper(const Matrix &U, const Vector &b, bool unit)
backSubstitute U*x=b
Definition Matrix.cpp:377
\n+
bool assert_inequal(const Matrix &A, const Matrix &B, double tol)
inequals with an tolerance, prints out message if within tolerance
Definition Matrix.cpp:63
\n+
void householder(Matrix &A, size_t k)
Householder tranformation, zeros below diagonal.
Definition Matrix.cpp:354
\n+
istream & operator>>(istream &inputStream, Matrix &destinationMatrix)
Read a matrix from an input stream, such as a file.
Definition Matrix.cpp:174
\n+
void inplace_QR(Matrix &A)
QR factorization using Eigen's internal block QR algorithm.
Definition Matrix.cpp:636
\n+
void svd(const Matrix &A, Matrix &U, Vector &S, Matrix &V)
SVD computes economy SVD A=U*S*V'.
Definition Matrix.cpp:560
\n+
Matrix3 skewSymmetric(double wx, double wy, double wz)
skew symmetric matrix returns this: 0 -wz wy wz 0 -wx -wy wx 0
Definition Matrix.h:401
\n+
Eigen::Block< const MATRIX > sub(const MATRIX &A, size_t i1, size_t i2, size_t j1, size_t j2)
extract submatrix, slice semantics, i.e.
Definition Matrix.h:181
\n+
Matrix trans(const Matrix &A)
static transpose function, just calls Eigen transpose member function
Definition Matrix.h:242
\n+
bool operator!=(const Matrix &A, const Matrix &B)
inequality
Definition Matrix.h:107
\n+
boost::tuple< int, double, Vector > DLT(const Matrix &A, double rank_tol)
Direct linear transform algorithm that calls svd to find a vector v that minimizes the algebraic erro...
Definition Matrix.cpp:568
\n+
Matrix cholesky_inverse(const Matrix &A)
Return the inverse of a S.P.D.
Definition Matrix.cpp:539
\n+
MATRIX prod(const MATRIX &A, const MATRIX &B)
products using old-style format to improve compatibility
Definition Matrix.h:144
\n+
void householder_(Matrix &A, size_t k, bool copy_vectors)
Imperative version of Householder QR factorization, Golub & Van Loan p 224 version with Householder v...
Definition Matrix.cpp:327
\n+
void insertSub(Eigen::MatrixBase< Derived1 > &fullMatrix, const Eigen::MatrixBase< Derived2 > &subMatrix, size_t i, size_t j)
insert a submatrix IN PLACE at a specified location in a larger matrix NOTE: there is no size checkin...
Definition Matrix.h:195
\n+
Matrix collect(const std::vector< const Matrix * > &matrices, size_t m, size_t n)
create a matrix by concatenating Given a set of matrices: A1, A2, A3... If all matrices have the same...
Definition Matrix.cpp:443
\n+
bool linear_independent(const Matrix &A, const Matrix &B, double tol)
check whether the rows of two matrices are linear independent
Definition Matrix.cpp:103
\n+
bool fpEqual(double a, double b, double tol, bool check_relative_also)
Ensure we are not including a different version of Eigen in user code than while compiling gtsam,...
Definition Vector.cpp:42
\n+
pair< Matrix, Matrix > qr(const Matrix &A)
Householder QR factorization, Golub & Van Loan p 224, explicit version
Definition Matrix.cpp:235
\n+
Matrix diag(const std::vector< Matrix > &Hs)
Create a matrix with submatrices along its diagonal.
Definition Matrix.cpp:207
\n+
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n+
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition Matrix.h:100
\n+
Matrix inverse_square_root(const Matrix &A)
Use Cholesky to calculate inverse square root of a matrix.
Definition Matrix.cpp:552
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Reshape functor.
Definition Matrix.h:246
\n+
Functor that implements multiplication of a vector b with the inverse of a matrix A.
Definition Matrix.h:456
\n+
VectorN operator()(const MatrixN &A, const VectorN &b, OptionalJacobian< N, N *N > H1=boost::none, OptionalJacobian< N, N > H2=boost::none) const
A.inverse() * b, with optional derivatives.
Definition Matrix.h:461
\n+
Functor that implements multiplication with the inverse of a matrix, itself the result of a function ...
Definition Matrix.h:482
\n+
VectorN operator()(const T &a, const VectorN &b, OptionalJacobian< N, M > H1=boost::none, OptionalJacobian< N, N > H2=boost::none) const
f(a).inverse() * b, with optional derivatives
Definition Matrix.h:497
\n+
MultiplyWithInverseFunction(const Operator &phi)
Construct with function as explained above.
Definition Matrix.h:494
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,168 +1,534 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ConcurrentMap.h\n+Matrix.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-22\n-23// Change class depending on whether we are using TBB\n-24#ifdef GTSAM_USE_TBB\n-25\n-26// Include TBB header\n-27# include \n-28# undef min // TBB seems to include Windows.h which defines these macros that\n-cause problems\n-29# undef max\n-30# undef ERROR\n-31\n-32#include // std::hash()\n-33\n-34// Use TBB concurrent_unordered_map for ConcurrentMap\n-35template \n-36using _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\bB_\ba_\bs_\be = tbb::concurrent_unordered_map<\n-37 KEY,\n-38 VALUE,\n-39 std::hash\n-40 >;\n-41\n-42#else\n-43\n-44// If we're not using TBB, use a FastMap for ConcurrentMap\n-45#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n-46template \n-47using _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\bB_\ba_\bs_\be = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b>;\n-48\n-49#endif\n-50\n-51#include \n-52#include \n-53#include \n-54\n-55#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-56\n-57namespace _\bg_\bt_\bs_\ba_\bm {\n+23// \\callgraph\n+24\n+25#pragma once\n+26\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+29#include \n+30\n+31#include \n+32\n+38namespace _\bg_\bt_\bs_\ba_\bm {\n+39\n+40typedef Eigen::MatrixXd Matrix;\n+41typedef Eigen::Matrix MatrixRowMajor;\n+42\n+43// Create handy typedefs and constants for square-size matrices\n+44// MatrixMN, MatrixN = MatrixNN, I_NxN, and Z_NxN, for M,N=1..9\n+45#define GTSAM_MAKE_MATRIX_DEFS(N) \\\n+46using Matrix##N = Eigen::Matrix; \\\n+47using Matrix1##N = Eigen::Matrix; \\\n+48using Matrix2##N = Eigen::Matrix; \\\n+49using Matrix3##N = Eigen::Matrix; \\\n+50using Matrix4##N = Eigen::Matrix; \\\n+51using Matrix5##N = Eigen::Matrix; \\\n+52using Matrix6##N = Eigen::Matrix; \\\n+53using Matrix7##N = Eigen::Matrix; \\\n+54using Matrix8##N = Eigen::Matrix; \\\n+55using Matrix9##N = Eigen::Matrix; \\\n+56static const Eigen::MatrixBase::IdentityReturnType I_##N##x##N =\n+Matrix##N::Identity(); \\\n+57static const Eigen::MatrixBase::ConstantReturnType Z_##N##x##N =\n+Matrix##N::Zero();\n 58\n-67template\n-_\b6_\b8class _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp : public _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\bB_\ba_\bs_\be {\n-69\n-70public:\n-71\n-72 typedef _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\bB_\ba_\bs_\be_\b<_\bK_\bE_\bY_\b,_\bV_\bA_\bL_\bU_\bE_\b> Base;\n-73\n-_\b7_\b5 _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp() {}\n+59GTSAM_MAKE_MATRIX_DEFS(1)\n+60GTSAM_MAKE_MATRIX_DEFS(2)\n+61GTSAM_MAKE_MATRIX_DEFS(3)\n+62GTSAM_MAKE_MATRIX_DEFS(4)\n+63GTSAM_MAKE_MATRIX_DEFS(5)\n+64GTSAM_MAKE_MATRIX_DEFS(6)\n+65GTSAM_MAKE_MATRIX_DEFS(7)\n+66GTSAM_MAKE_MATRIX_DEFS(8)\n+67GTSAM_MAKE_MATRIX_DEFS(9)\n+68\n+69// Matrix expressions for accessing parts of matrices\n+70typedef Eigen::Block SubMatrix;\n+71typedef Eigen::Block ConstSubMatrix;\n+72\n+73// Matrix formatting arguments when printing.\n+74// Akin to Matlab style.\n+75const Eigen::IOFormat& matlabFormat();\n 76\n-78 template\n-_\b7_\b9 _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp(INPUTITERATOR first, INPUTITERATOR last) : Base(first, last)\n-{}\n-80\n-_\b8_\b2 _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp(const _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b,_\bV_\bA_\bL_\bU_\bE_\b>& x) : Base(x) {}\n-83\n-_\b8_\b5 _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp(const Base& x) : Base(x) {}\n-86\n-_\b8_\b8 bool _\be_\bx_\bi_\bs_\bt_\bs(const KEY& e) const { return this->count(e); }\n-89\n-90#ifndef GTSAM_USE_TBB\n-91 // If we're not using TBB and this is actually a FastMap, we need to add\n-these functions and hide\n-92 // the original erase functions.\n-93 void unsafe_erase(typename Base::iterator position) { ((Base*)this)->erase\n-(position); }\n-94 typename Base::size_type unsafe_erase(const KEY& k) { return ((Base*)this)-\n->erase(k); }\n-95 void unsafe_erase(typename Base::iterator first, typename Base::iterator\n-last) {\n-96 return ((Base*)this)->erase(first, last); }\n-97private:\n-98 void erase() {}\n-99public:\n-100#endif\n-101\n-102private:\n-_\b1_\b0_\b4 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-105 template\n-106 void save(Archive& ar, const unsigned int /*version*/) const\n-107 {\n-108 // Copy to an STL container and serialize that\n-109 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bp_\ba_\bi_\br_\b<_\bK_\bE_\bY_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b> > map(this->size());\n-110 std::copy(this->begin(), this->end(), map.begin());\n-111 ar & BOOST_SERIALIZATION_NVP(map);\n-112 }\n-113 template\n-114 void load(Archive& ar, const unsigned int /*version*/)\n-115 {\n-116 this->clear();\n-117 // Load into STL container and then fill our map\n-118 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bp_\ba_\bi_\br_\b<_\bK_\bE_\bY_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b> > map;\n-119 ar & BOOST_SERIALIZATION_NVP(map);\n-120 this->insert(map.begin(), map.end());\n-121 }\n-122 BOOST_SERIALIZATION_SPLIT_MEMBER()\n-123};\n-124\n-125}\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n-A thin wrapper around std::map that uses boost's fast_pool_allocator.\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+80template \n+_\b8_\b1bool _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(const Eigen::DenseBase& A, const Eigen::\n+DenseBase& B, double tol = 1e-9) {\n+82\n+83 const size_t n1 = A.cols(), m1 = A.rows();\n+84 const size_t n2 = B.cols(), m2 = B.rows();\n+85\n+86 if(m1!=m2 || n1!=n2) return false;\n+87\n+88 for(size_t i=0; i& As, const std::\n+list& Bs, double tol = 1e-9);\n+125\n+129GTSAM_EXPORT bool _\bl_\bi_\bn_\be_\ba_\br_\b__\bi_\bn_\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt(const Matrix& A, const Matrix& B,\n+double tol = 1e-9);\n+130\n+134GTSAM_EXPORT bool _\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt(const Matrix& A, const Matrix& B, double\n+tol = 1e-9);\n+135\n+140GTSAM_EXPORT Vector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b^(const Matrix& A, const Vector & v);\n+141\n+143template\n+_\b1_\b4_\b4inline MATRIX _\bp_\br_\bo_\bd(const MATRIX& A, const MATRIX&B) {\n+145 MATRIX result = A * B;\n+146 return result;\n+147}\n+148\n+152GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const Matrix& A, const std::string& s, std::ostream&\n+stream);\n+153\n+157GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const Matrix& A, const std::string& s = \"\");\n+158\n+162GTSAM_EXPORT void _\bs_\ba_\bv_\be(const Matrix& A, const std::string &s, const std::\n+string& filename);\n+163\n+169GTSAM_EXPORT std::istream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>(std::istream& inputStream, Matrix&\n+destinationMatrix);\n+170\n+180template\n+_\b1_\b8_\b1Eigen::Block _\bs_\bu_\bb(const MATRIX& A, size_t i1, size_t i2, size_t\n+j1, size_t j2) {\n+182 size_t m=i2-i1, n=j2-j1;\n+183 return A.block(i1,j1,m,n);\n+184}\n+185\n+194template \n+_\b1_\b9_\b5void _\bi_\bn_\bs_\be_\br_\bt_\bS_\bu_\bb(Eigen::MatrixBase& fullMatrix, const Eigen::\n+MatrixBase& subMatrix, size_t i, size_t j) {\n+196 fullMatrix.block(i, j, subMatrix.rows(), subMatrix.cols()) = subMatrix;\n+197}\n+198\n+202GTSAM_EXPORT Matrix _\bd_\bi_\ba_\bg(const std::vector& Hs);\n+203\n+210template\n+_\b2_\b1_\b1const typename MATRIX::ConstColXpr _\bc_\bo_\bl_\bu_\bm_\bn(const MATRIX& A, size_t j) {\n+212 return A.col(j);\n+213}\n+214\n+221template\n+_\b2_\b2_\b2const typename MATRIX::ConstRowXpr _\br_\bo_\bw(const MATRIX& A, size_t j) {\n+223 return A.row(j);\n+224}\n+225\n+231template\n+_\b2_\b3_\b2void _\bz_\be_\br_\bo_\bB_\be_\bl_\bo_\bw_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(MATRIX& A, size_t cols=0) {\n+233 const size_t m = A.rows(), n = A.cols();\n+234 const size_t k = (cols) ? std::min(cols, std::min(m,n)) : std::min(m,n);\n+235 for (size_t j=0; j\n+_\b2_\b4_\b6struct _\bR_\be_\bs_\bh_\ba_\bp_\be {\n+247 //TODO replace this with Eigen's reshape function as soon as available.\n+(There is a PR already pending : https://bitbucket.org/eigen/eigen/pull-\n+request/41/reshape/diff)\n+248 typedef Eigen::Map >\n+ReshapedType;\n+249 static inline ReshapedType reshape(const Eigen::Matrix & in) {\n+250 return in.data();\n+251 }\n+252};\n+253\n+255template \n+_\b2_\b5_\b6struct _\bR_\be_\bs_\bh_\ba_\bp_\be {\n+257 typedef const Eigen::Matrix & ReshapedType;\n+258 static inline ReshapedType reshape(const Eigen::Matrix & in) {\n+259 return in;\n+260 }\n+261};\n+262\n+264template \n+_\b2_\b6_\b5struct _\bR_\be_\bs_\bh_\ba_\bp_\be {\n+266 typedef const Eigen::Matrix & ReshapedType;\n+267 static inline ReshapedType reshape(const Eigen::Matrix & in) {\n+268 return in;\n+269 }\n+270};\n+271\n+273template \n+_\b2_\b7_\b4struct _\bR_\be_\bs_\bh_\ba_\bp_\be {\n+275 typedef typename Eigen::Matrix::\n+ConstTransposeReturnType ReshapedType;\n+276 static inline ReshapedType reshape(const Eigen::Matrix & in) {\n+277 return in.transpose();\n+278 }\n+279};\n+280\n+281template \n+282inline typename Reshape::\n+ReshapedType reshape(const Eigen::Matrix & m){\n+283 BOOST_STATIC_ASSERT(InM * InN == OutM * OutN);\n+284 return _\bR_\be_\bs_\bh_\ba_\bp_\be_\b<_\bO_\bu_\bt_\bM_\b,_\b _\bO_\bu_\bt_\bN_\b,_\b _\bO_\bu_\bt_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b,_\b _\bI_\bn_\bM_\b,_\b _\bI_\bn_\bN_\b,_\b _\bI_\bn_\bO_\bp_\bt_\bi_\bo_\bn_\bs_\b>_\b:_\b:_\br_\be_\bs_\bh_\ba_\bp_\be(m);\n+285}\n+286\n+293GTSAM_EXPORT std::pair _\bq_\br(const Matrix& A);\n+294\n+300GTSAM_EXPORT void _\bi_\bn_\bp_\bl_\ba_\bc_\be_\b__\bQ_\bR(Matrix& A);\n+301\n+310GTSAM_EXPORT std::list >\n+311_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\b__\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(Matrix& A, Vector& b, const Vector& sigmas);\n+312\n+320GTSAM_EXPORT void _\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br_\b_(Matrix& A, size_t k, bool copy_vectors=true);\n+321\n+328GTSAM_EXPORT void _\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br(Matrix& A, size_t k);\n+329\n+337GTSAM_EXPORT Vector _\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br(const Matrix& U, const Vector& b,\n+bool unit=false);\n+338\n+346//TODO: is this function necessary? it isn't used\n+347GTSAM_EXPORT Vector _\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br(const Vector& b, const Matrix& U,\n+bool unit=false);\n+348\n+356GTSAM_EXPORT Vector _\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bL_\bo_\bw_\be_\br(const Matrix& L, const Vector& b,\n+bool unit=false);\n+357\n+364GTSAM_EXPORT Matrix stack(size_t nrMatrices, ...);\n+365GTSAM_EXPORT Matrix stack(const std::vector& blocks);\n+366\n+377GTSAM_EXPORT Matrix _\bc_\bo_\bl_\bl_\be_\bc_\bt(const std::vector& matrices,\n+size_t m = 0, size_t n = 0);\n+378GTSAM_EXPORT Matrix _\bc_\bo_\bl_\bl_\be_\bc_\bt(size_t nrMatrices, ...);\n+379\n+386GTSAM_EXPORT void _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bc_\ba_\bl_\be_\b__\bi_\bn_\bp_\bl_\ba_\bc_\be(const Vector& v, Matrix& A, bool\n+inf_mask = false); // row\n+387GTSAM_EXPORT Matrix vector_scale(const Vector& v, const Matrix& A, bool\n+inf_mask = false); // row\n+388GTSAM_EXPORT Matrix vector_scale(const Matrix& A, const Vector& v, bool\n+inf_mask = false); // column\n+389\n+_\b4_\b0_\b1inline Matrix3 _\bs_\bk_\be_\bw_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc(double wx, double wy, double wz) {\n+402 return (Matrix3() << 0.0, -wz, +wy, +wz, 0.0, -wx, -wy, +wx, 0.0).finished\n+();\n+403}\n+404\n+405template \n+406inline Matrix3 _\bs_\bk_\be_\bw_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc(const Eigen::MatrixBase& w) {\n+407 return _\bs_\bk_\be_\bw_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc(w(0), w(1), w(2));\n+408}\n+409\n+411GTSAM_EXPORT Matrix _\bi_\bn_\bv_\be_\br_\bs_\be_\b__\bs_\bq_\bu_\ba_\br_\be_\b__\br_\bo_\bo_\bt(const Matrix& A);\n+412\n+414GTSAM_EXPORT Matrix _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b__\bi_\bn_\bv_\be_\br_\bs_\be(const Matrix &A);\n+415\n+428GTSAM_EXPORT void _\bs_\bv_\bd(const Matrix& A, Matrix& U, Vector& S, Matrix& V);\n+429\n+437GTSAM_EXPORT boost::tuple\n+438_\bD_\bL_\bT(const Matrix& A, double rank_tol = 1e-9);\n+439\n+445GTSAM_EXPORT Matrix _\be_\bx_\bp_\bm(const Matrix& A, size_t K=7);\n+446\n+447std::string formatMatrixIndented(const std::string& label, const Matrix&\n+matrix, bool makeVectorHorizontal = false);\n+448\n+455template \n+_\b4_\b5_\b6struct _\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be {\n+457 typedef Eigen::Matrix VectorN;\n+458 typedef Eigen::Matrix MatrixN;\n+459\n+_\b4_\b6_\b1 VectorN _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const MatrixN& A, const VectorN& b,\n+462 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b*_\b _\bN_\b> H1 = boost::none,\n+463 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b> H2 = boost::none) const {\n+464 const MatrixN invA = A.inverse();\n+465 const VectorN c = invA * b;\n+466 // The derivative in A is just -[c[0]*invA c[1]*invA ... c[N-1]*invA]\n+467 if (H1)\n+468 for (size_t j = 0; j < N; j++)\n+469 H1->template middleCols(N * j) = -c[j] * invA;\n+470 // The derivative in b is easy, as invA*b is just a linear map:\n+471 if (H2) *H2 = invA;\n+472 return c;\n+473 }\n+474};\n+475\n+481template \n+_\b4_\b8_\b2struct _\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn {\n+483 enum { M = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn };\n+484 typedef Eigen::Matrix VectorN;\n+485 typedef Eigen::Matrix MatrixN;\n+486\n+487 // The function phi should calculate f(a)*b, with derivatives in a and b.\n+488 // Naturally, the derivative in b is f(a).\n+489 typedef std::function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b>)>\n+491 Operator;\n+492\n+_\b4_\b9_\b4 _\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn(const Operator& phi) : phi_(phi) {}\n+495\n+_\b4_\b9_\b7 VectorN _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const T& a, const VectorN& b,\n+498 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bM_\b> H1 = boost::none,\n+499 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b> H2 = boost::none) const {\n+500 MatrixN A;\n+501 phi_(a, b, boost::none, A); // get A = f(a) by calling f once\n+502 const MatrixN invA = A.inverse();\n+503 const VectorN c = invA * b;\n+504\n+505 if (H1) {\n+506 Eigen::Matrix H;\n+507 phi_(a, c, H, boost::none); // get derivative H of forward mapping\n+508 *H1 = -invA* H;\n+509 }\n+510 if (H2) *H2 = invA;\n+511 return c;\n+512 }\n+513\n+514 private:\n+515 const Operator phi_;\n+516};\n+517\n+518GTSAM_EXPORT Matrix LLt(const Matrix& A);\n+519\n+520GTSAM_EXPORT Matrix RtR(const Matrix& A);\n+521\n+522GTSAM_EXPORT Vector columnNormSquare(const Matrix &A);\n+523} // namespace gtsam\n+_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n+Special class for optional Jacobian arguments.\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n-ConcurrentMap(INPUTITERATOR first, INPUTITERATOR last)\n-Constructor from a range, passes through to base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n-ConcurrentMap(const ConcurrentMap< KEY, VALUE > &x)\n-Copy constructor from another ConcurrentMap.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(const KEY &e) const\n-Handy 'exists' function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n-ConcurrentMap(const Base &x)\n-Copy constructor from the base map class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n-ConcurrentMap()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bL_\bo_\bw_\be_\br\n+Vector backSubstituteLower(const Matrix &L, const Vector &b, bool unit)\n+backSubstitute L*x=b\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:367\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b^\n+Vector operator^(const Matrix &A, const Vector &v)\n+overload ^ for trans(A)*v We transpose the vectors for speed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bc_\ba_\bl_\be_\b__\bi_\bn_\bp_\bl_\ba_\bc_\be\n+void vector_scale_inplace(const Vector &v, Matrix &A, bool inf_mask)\n+scales a matrix row or column by the values in a vector Arguments (Matrix,\n+Vector) scales the columns...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:482\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\bo_\bw\n+const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)\n+Extracts a row view from a matrix that avoids a copy.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:222\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm\n+T expm(const Vector &x, int K=7)\n+Exponential map given exponential coordinates class T needs a wedge<> function\n+and a constructor from...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:317\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\ba_\bv_\be\n+void save(const Matrix &A, const string &s, const string &filename)\n+save a matrix to file, which can be loaded by matlab\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n+bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n+equals with an tolerance, prints out message if unequal\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt\n+bool linear_dependent(const Matrix &A, const Matrix &B, double tol)\n+check whether the rows of two matrices are linear dependent\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bl_\bu_\bm_\bn\n+const MATRIX::ConstColXpr column(const MATRIX &A, size_t j)\n+Extracts a column view from a matrix that avoids a copy.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:211\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bz_\be_\br_\bo_\bB_\be_\bl_\bo_\bw_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+void zeroBelowDiagonal(MATRIX &A, size_t cols=0)\n+Zeros all of the elements below the diagonal of a matrix, in place.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:232\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\b__\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+list< boost::tuple< Vector, double, double > > weighted_eliminate(Matrix &A,\n+Vector &b, const Vector &sigmas)\n+Imperative algorithm for in-place full elimination with weights and constraint\n+handling.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:273\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br\n+Vector backSubstituteUpper(const Matrix &U, const Vector &b, bool unit)\n+backSubstitute U*x=b\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:377\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl\n+bool assert_inequal(const Matrix &A, const Matrix &B, double tol)\n+inequals with an tolerance, prints out message if within tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br\n+void householder(Matrix &A, size_t k)\n+Householder tranformation, zeros below diagonal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:354\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b>\n+istream & operator>>(istream &inputStream, Matrix &destinationMatrix)\n+Read a matrix from an input stream, such as a file.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bp_\bl_\ba_\bc_\be_\b__\bQ_\bR\n+void inplace_QR(Matrix &A)\n+QR factorization using Eigen's internal block QR algorithm.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:636\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bv_\bd\n+void svd(const Matrix &A, Matrix &U, Vector &S, Matrix &V)\n+SVD computes economy SVD A=U*S*V'.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:560\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bk_\be_\bw_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc\n+Matrix3 skewSymmetric(double wx, double wy, double wz)\n+skew symmetric matrix returns this: 0 -wz wy wz 0 -wx -wy wx 0\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:401\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bu_\bb\n+Eigen::Block< const MATRIX > sub(const MATRIX &A, size_t i1, size_t i2, size_t\n+j1, size_t j2)\n+extract submatrix, slice semantics, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:181\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bn_\bs\n+Matrix trans(const Matrix &A)\n+static transpose function, just calls Eigen transpose member function\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:242\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n+bool operator!=(const Matrix &A, const Matrix &B)\n+inequality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bL_\bT\n+boost::tuple< int, double, Vector > DLT(const Matrix &A, double rank_tol)\n+Direct linear transform algorithm that calls svd to find a vector v that\n+minimizes the algebraic erro...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:568\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b__\bi_\bn_\bv_\be_\br_\bs_\be\n+Matrix cholesky_inverse(const Matrix &A)\n+Return the inverse of a S.P.D.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:539\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bo_\bd\n+MATRIX prod(const MATRIX &A, const MATRIX &B)\n+products using old-style format to improve compatibility\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:144\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br_\b_\n+void householder_(Matrix &A, size_t k, bool copy_vectors)\n+Imperative version of Householder QR factorization, Golub & Van Loan p 224\n+version with Householder v...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:327\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bS_\bu_\bb\n+void insertSub(Eigen::MatrixBase< Derived1 > &fullMatrix, const Eigen::\n+MatrixBase< Derived2 > &subMatrix, size_t i, size_t j)\n+insert a submatrix IN PLACE at a specified location in a larger matrix NOTE:\n+there is no size checkin...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bl_\bl_\be_\bc_\bt\n+Matrix collect(const std::vector< const Matrix * > &matrices, size_t m, size_t\n+n)\n+create a matrix by concatenating Given a set of matrices: A1, A2, A3... If all\n+matrices have the same...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:443\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\b__\bi_\bn_\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt\n+bool linear_independent(const Matrix &A, const Matrix &B, double tol)\n+check whether the rows of two matrices are linear independent\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bp_\bE_\bq_\bu_\ba_\bl\n+bool fpEqual(double a, double b, double tol, bool check_relative_also)\n+Ensure we are not including a different version of Eigen in user code than\n+while compiling gtsam,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bq_\br\n+pair< Matrix, Matrix > qr(const Matrix &A)\n+Householder QR factorization, Golub & Van Loan p 224, explicit version\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:235\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bi_\ba_\bg\n+Matrix diag(const std::vector< Matrix > &Hs)\n+Create a matrix with submatrices along its diagonal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n+bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n+DenseBase< MATRIX > &B, double tol=1e-9)\n+equals with a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(const Matrix &A, const Matrix &B)\n+equality is just equal_with_abs_tol 1e-9\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be_\b__\bs_\bq_\bu_\ba_\br_\be_\b__\br_\bo_\bo_\bt\n+Matrix inverse_square_root(const Matrix &A)\n+Use Cholesky to calculate inverse square root of a matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:552\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bs_\bh_\ba_\bp_\be\n+Reshape functor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:246\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be\n+Functor that implements multiplication of a vector b with the inverse of a\n+matrix A.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:456\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+VectorN operator()(const MatrixN &A, const VectorN &b, OptionalJacobian< N, N\n+*N > H1=boost::none, OptionalJacobian< N, N > H2=boost::none) const\n+A.inverse() * b, with optional derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:461\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+Functor that implements multiplication with the inverse of a matrix, itself the\n+result of a function ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:482\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+VectorN operator()(const T &a, const VectorN &b, OptionalJacobian< N, M >\n+H1=boost::none, OptionalJacobian< N, N > H2=boost::none) const\n+f(a).inverse() * b, with optional derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:497\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b:_\b:_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bW_\bi_\bt_\bh_\bI_\bn_\bv_\be_\br_\bs_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+MultiplyWithInverseFunction(const Operator &phi)\n+Construct with function as explained above.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:494\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * C\bCo\bon\bnc\bcu\bur\brr\bre\ben\bnt\btM\bMa\bap\bp.\b.h\bh\n+ * _\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00032.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00032.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/debug.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.h File Reference\n \n \n \n \n \n \n \n@@ -94,56 +94,48 @@\n \n \n \n \n \n
\n \n-
debug.cpp File Reference
\n+Classes |\n+Namespaces
\n+
DSFVector.h File Reference
\n \n
\n \n-

Global debugging flags. \n+

A faster implementation for DSF, which uses vector rather than btree. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::DSFBase
 A fast implementation of disjoint set forests that uses vector as underly data structure. More...
 
class  gtsam::DSFVector
 DSFVector additionally keeps a vector of keys to support more expensive operations. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-

\n-Functions

\n-bool gtsam::guardedIsDebug (const std::string &s)
 
\n-void gtsam::guardedSetDebug (const std::string &s, const bool v)
 
\n-bool gtsam::isDebugVersion ()
 
\n-\n-\n-\n

\n-Variables

\n-GTSAM_EXPORT FastMap< std::string, ValueWithDefault< bool, false > > gtsam::debugFlags
 
\n

Detailed Description

\n-

Global debugging flags.

\n-
Author
Richard Roberts
\n-
Date
Feb 1, 2011
\n+

A faster implementation for DSF, which uses vector rather than btree.

\n+
Date
Jun 25, 2010
\n+
Author
Kai Ni
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-debug.cpp File Reference\n-Global debugging flags. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DSFVector.h File Reference\n+A faster implementation for DSF, which uses vector rather than btree. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bB_\ba_\bs_\be\n+\u00a0 A fast implementation of disjoint set forests that uses vector as\n+ underly data structure. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br\n+\u00a0 _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br additionally keeps a vector of keys to support more expensive\n+ operations. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgu\bua\bar\brd\bde\bed\bdI\bIs\bsD\bDe\beb\bbu\bug\bg (const std::string &s)\n-\u00a0\n-void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgu\bua\bar\brd\bde\bed\bdS\bSe\bet\btD\bDe\beb\bbu\bug\bg (const std::string &s, const bool v)\n-\u00a0\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bis\bsD\bDe\beb\bbu\bug\bgV\bVe\ber\brs\bsi\bio\bon\bn ()\n-\u00a0\n-V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n-GTSAM_EXPORT _\bF_\ba_\bs_\bt_\bM_\ba_\bp< std::string, _\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt< bool,\n- false > >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\beb\bbu\bug\bgF\bFl\bla\bag\bgs\bs\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Global debugging flags.\n- Author\n- Richard Roberts\n+A faster implementation for DSF, which uses vector rather than btree.\n Date\n- Feb 1, 2011\n+ Jun 25, 2010\n+ Author\n+ Kai Ni\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bd_\be_\bb_\bu_\bg_\b._\bc_\bp_\bp\n+ * _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00038.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00038.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/make_shared.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/MatrixSerialization.h File Reference\n \n \n \n \n \n \n \n@@ -94,59 +94,94 @@\n \n \n \n \n \n
\n \n-
make_shared.h File Reference
\n+
MatrixSerialization.h File Reference
\n
\n
\n \n-

make_shared trampoline function to ensure proper alignment \n+

Serialization for matrices. \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-

\n-Typedefs

\n-template<bool B, class T = void>
using gtsam::enable_if_t = typename std::enable_if< B, T >::type
 An shorthand alias for accessing the ::type inside std::enable_if that can be used in a template directly.
 
\n \n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n Functions

template<typename T , typename ... Args>
gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > gtsam::make_shared (Args &&... args)
 Add our own make_shared as a layer of wrapping on boost::make_shared This solves the problem with the stock make_shared that custom alignment is not respected, causing SEGFAULTs at runtime, which is notoriously hard to debug.
 
\n-template<typename T , typename ... Args>
gtsam::enable_if_t<!needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > gtsam::make_shared (Args &&... args)
 Fall back to the boost version if no need for alignment.
 
template<class Archive , typename Scalar_ , int Rows_, int Cols_, int Ops_, int MaxRows_, int MaxCols_>
void boost::serialization::save (Archive &ar, const Eigen::Matrix< Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int)
 Ref.
 
\n+template<class Archive , typename Scalar_ , int Rows_, int Cols_, int Ops_, int MaxRows_, int MaxCols_>
void boost::serialization::load (Archive &ar, Eigen::Matrix< Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int)
 
\n+template<class Archive , typename Scalar_ , int Rows_, int Cols_, int Ops_, int MaxRows_, int MaxCols_>
void boost::serialization::serialize (Archive &ar, Eigen::Matrix< Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int version)
 
\n+template<class Archive >
void boost::serialization::serialize (Archive &ar, gtsam::Matrix &m, const unsigned int version)
 
\n

Detailed Description

\n-

make_shared trampoline function to ensure proper alignment

\n-
Author
Fan Jiang
\n-
\n+

Serialization for matrices.

\n+
Author
Frank Dellaert
\n+
Date
February 2022
\n+

Function Documentation

\n+\n+

◆ save()

\n+\n+
\n+
\n+
\n+template<class Archive , typename Scalar_ , int Rows_, int Cols_, int Ops_, int MaxRows_, int MaxCols_>
\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+
void boost::serialization::save (Archive & ar,
const Eigen::Matrix< Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > & m,
const unsigned int  
)
\n+
\n+\n+

Ref.

\n+

https://stackoverflow.com/questions/18382457/eigen-and-boostserialize/22903063#22903063

\n+

Eigen supports calling resize() on both static and dynamic matrices. This allows for a uniform API, with resize having no effect if the static matrix is already the correct size. https://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html#TutorialMatrixSizesResizing

\n+

We use all the Matrix template parameters to ensure wide compatibility.

\n+

eigen_typekit in ROS uses the same code http://docs.ros.org/lunar/api/eigen_typekit/html/eigen__mqueue_8cpp_source.html

\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,47 +1,59 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-make_shared.h File Reference\n-make_shared trampoline function to ensure proper alignment _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+MatrixSerialization.h File Reference\n+Serialization for matrices. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n-\u00a0 Global functions in a separate testing namespace.\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+void\u00a0 _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bs_\ba_\bv_\be (Archive &ar, const Eigen::Matrix< Scalar_,\n+ Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int)\n+\u00a0 Ref.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\ben\bna\bab\bbl\ble\be_\b_i\bif\bf_\b_t\bt = typename std::enable_if< B, T >::type\n-\u00a0 An shorthand alias for accessing the ::type inside std::enable_if that\n- can be used in a template directly.\n+template\n+void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:l\blo\boa\bad\bd (Archive &ar, Eigen::Matrix< Scalar_, Rows_,\n+ Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int)\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt<\n- _\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T >::value, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd (Args &&...\n- boost::shared_ptr< T > >\u00a0 args)\n- Add our own make_shared as a layer\n- of wrapping on boost::make_shared\n- This solves the problem with the\n-\u00a0 stock make_shared that custom\n- alignment is not respected, causing\n- SEGFAULTs at runtime, which is\n- notoriously hard to debug.\n+template\n+void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (Archive &ar, Eigen::Matrix< Scalar_,\n+ Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int version)\n \u00a0\n-template\n- _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n-_\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt::value, boost::shared_ptr< T > >\u00a0 args)\n-\u00a0 Fall back to the boost version if\n- no need for alignment.\n+template\n+void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (Archive &ar, gtsam::Matrix &m, const\n+ unsigned int version)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-make_shared trampoline function to ensure proper alignment\n+Serialization for matrices.\n Author\n- Fan Jiang\n+ Frank Dellaert\n+ Date\n+ February 2022\n+*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0s\bsa\bav\bve\be(\b()\b) *\b**\b**\b**\b**\b*\n+template\n+void boost::serialization::save ( Archive &\u00a0 a\bar\br,\n+ const Eigen::Matrix< Scalar_, Rows_, m\bm,\n+ Cols_, Ops_, MaxRows_, MaxCols_ > &\u00a0\n+ const unsigned int\u00a0 \u00a0\n+ )\n+Ref.\n+_\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\bs_\bt_\ba_\bc_\bk_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\b._\bc_\bo_\bm_\b/_\bq_\bu_\be_\bs_\bt_\bi_\bo_\bn_\bs_\b/_\b1_\b8_\b3_\b8_\b2_\b4_\b5_\b7_\b/_\be_\bi_\bg_\be_\bn_\b-_\ba_\bn_\bd_\b-_\bb_\bo_\bo_\bs_\bt_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\b/\n+_\b2_\b2_\b9_\b0_\b3_\b0_\b6_\b3_\b#_\b2_\b2_\b9_\b0_\b3_\b0_\b6_\b3\n+Eigen supports calling resize() on both static and dynamic matrices. This\n+allows for a uniform API, with resize having no effect if the static matrix is\n+already the correct size. _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\be_\bi_\bg_\be_\bn_\b._\bt_\bu_\bx_\bf_\ba_\bm_\bi_\bl_\by_\b._\bo_\br_\bg_\b/_\bd_\bo_\bx_\b/\n+_\bg_\br_\bo_\bu_\bp_\b__\b__\bT_\bu_\bt_\bo_\br_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bl_\ba_\bs_\bs_\b._\bh_\bt_\bm_\bl_\b#_\bT_\bu_\bt_\bo_\br_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bS_\bi_\bz_\be_\bs_\bR_\be_\bs_\bi_\bz_\bi_\bn_\bg\n+We use all the Matrix template parameters to ensure wide compatibility.\n+eigen_typekit in ROS uses the same code _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bd_\bo_\bc_\bs_\b._\br_\bo_\bs_\b._\bo_\br_\bg_\b/_\bl_\bu_\bn_\ba_\br_\b/_\ba_\bp_\bi_\b/\n+_\be_\bi_\bg_\be_\bn_\b__\bt_\by_\bp_\be_\bk_\bi_\bt_\b/_\bh_\bt_\bm_\bl_\b/_\be_\bi_\bg_\be_\bn_\b__\b__\bm_\bq_\bu_\be_\bu_\be_\b__\b8_\bc_\bp_\bp_\b__\bs_\bo_\bu_\br_\bc_\be_\b._\bh_\bt_\bm_\bl\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd_\b._\bh\n+ * _\bM_\ba_\bt_\br_\bi_\bx_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00038.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00038.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a00038 = [\n- [\"enable_if_t\", \"a00038.html#a47e06cd29f4e8a20a8a7842e4045845f\", null],\n- [\"make_shared\", \"a00038.html#abcb9ece2bd206193ac40f118f1815c0e\", null],\n- [\"make_shared\", \"a00038.html#a6f805b32c5544e5552d702d5e2b4e801\", null]\n+ [\"save\", \"a00038.html#a068f1f8df2afd609744bc82386259e71\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00038_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00038_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/make_shared.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/MatrixSerialization.h Source File\n \n \n \n \n \n \n \n@@ -98,68 +98,91 @@\n
No Matches
\n \n \n \n \n \n
\n-
make_shared.h
\n+
MatrixSerialization.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2020, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/types.h>
\n-
21
\n-
22#include <Eigen/Core>
\n-
23
\n-
24#include <boost/make_shared.hpp>
\n-
25
\n-
26#include <type_traits>
\n-
27
\n-
28namespace gtsam {
\n-
30 template<bool B, class T = void>
\n-
31 using enable_if_t = typename std::enable_if<B, T>::type;
\n-
32}
\n-
33
\n-
34namespace gtsam {
\n-
35
\n-
56 template<typename T, typename ... Args>
\n-
\n-\n-
58 return boost::allocate_shared<T>(Eigen::aligned_allocator<T>(), std::forward<Args>(args)...);
\n-
59 }
\n-
\n-
60
\n-
62 template<typename T, typename ... Args>
\n-
\n-\n-
64 return boost::make_shared<T>(std::forward<Args>(args)...);
\n-
65 }
\n-
\n-
66
\n-
67}
\n-
Typedefs for easier changing of types.
\n-
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
typename std::enable_if< B, T >::type enable_if_t
An shorthand alias for accessing the ::type inside std::enable_if that can be used in a template dire...
Definition make_shared.h:31
\n-
gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > make_shared(Args &&... args)
Add our own make_shared as a layer of wrapping on boost::make_shared This solves the problem with the...
Definition make_shared.h:57
\n+
19// \\callgraph
\n+
20
\n+
21#pragma once
\n+
22
\n+
23#include <gtsam/base/Matrix.h>
\n+
24
\n+
25#include <boost/serialization/array.hpp>
\n+
26#include <boost/serialization/nvp.hpp>
\n+
27#include <boost/serialization/split_free.hpp>
\n+
28
\n+
29namespace boost {
\n+
30namespace serialization {
\n+
31
\n+
47// split version - sends sizes ahead
\n+
48template <class Archive, typename Scalar_, int Rows_, int Cols_, int Ops_,
\n+
49 int MaxRows_, int MaxCols_>
\n+
\n+
50void save(
\n+
51 Archive& ar,
\n+
52 const Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_>& m,
\n+
53 const unsigned int /*version*/) {
\n+
54 const size_t rows = m.rows(), cols = m.cols();
\n+
55 ar << BOOST_SERIALIZATION_NVP(rows);
\n+
56 ar << BOOST_SERIALIZATION_NVP(cols);
\n+
57 ar << make_nvp("data", make_array(m.data(), m.size()));
\n+
58}
\n+
\n+
59
\n+
60template <class Archive, typename Scalar_, int Rows_, int Cols_, int Ops_,
\n+
61 int MaxRows_, int MaxCols_>
\n+
62void load(Archive& ar,
\n+
63 Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_>& m,
\n+
64 const unsigned int /*version*/) {
\n+
65 size_t rows, cols;
\n+
66 ar >> BOOST_SERIALIZATION_NVP(rows);
\n+
67 ar >> BOOST_SERIALIZATION_NVP(cols);
\n+
68 m.resize(rows, cols);
\n+
69 ar >> make_nvp("data", make_array(m.data(), m.size()));
\n+
70}
\n+
71
\n+
72// templated version of BOOST_SERIALIZATION_SPLIT_FREE(Eigen::Matrix);
\n+
73template <class Archive, typename Scalar_, int Rows_, int Cols_, int Ops_,
\n+
74 int MaxRows_, int MaxCols_>
\n+
75void serialize(
\n+
76 Archive& ar,
\n+
77 Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_>& m,
\n+
78 const unsigned int version) {
\n+
79 split_free(ar, m, version);
\n+
80}
\n+
81
\n+
82// specialized to Matrix for MATLAB wrapper
\n+
83template <class Archive>
\n+
84void serialize(Archive& ar, gtsam::Matrix& m, const unsigned int version) {
\n+
85 split_free(ar, m, version);
\n+
86}
\n+
87
\n+
88} // namespace serialization
\n+
89} // namespace boost
\n+
typedef and functions to augment Eigen's MatrixXd
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,71 +1,82 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-make_shared.h\n+MatrixSerialization.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2020, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-21\n-22#include \n-23\n-24#include \n-25\n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-30 template\n-_\b3_\b1 using _\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt = typename std::enable_if::type;\n-32}\n-33\n-34namespace _\bg_\bt_\bs_\ba_\bm {\n-35\n-56 template\n-_\b5_\b7 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt_\b<_\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be, boost::\n-shared_ptr> _\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd(Args &&... args) {\n-58 return boost::allocate_shared(Eigen::aligned_allocator(), std::\n-forward(args)...);\n-59 }\n-60\n-62 template\n-_\b6_\b3 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt_\b<_\b!_\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be, boost::\n-shared_ptr> _\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd(Args &&... args) {\n-64 return boost::make_shared(std::forward(args)...);\n-65 }\n-66\n-67}\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bg_\bt_\bs_\ba_\bm\n-Global functions in a separate testing namespace.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt\n-typename std::enable_if< B, T >::type enable_if_t\n-An shorthand alias for accessing the ::type inside std::enable_if that can be\n-used in a template dire...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn make_shared.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd\n-gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::\n-shared_ptr< T > > make_shared(Args &&... args)\n-Add our own make_shared as a layer of wrapping on boost::make_shared This\n-solves the problem with the...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn make_shared.h:57\n+19// \\callgraph\n+20\n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+24\n+25#include \n+26#include \n+27#include \n+28\n+29namespace boost {\n+30namespace serialization {\n+31\n+47// split version - sends sizes ahead\n+48template \n+_\b5_\b0void save(\n+51 Archive& ar,\n+52 const Eigen::Matrix& m,\n+53 const unsigned int /*version*/) {\n+54 const size_t rows = m.rows(), cols = m.cols();\n+55 ar << BOOST_SERIALIZATION_NVP(rows);\n+56 ar << BOOST_SERIALIZATION_NVP(cols);\n+57 ar << make_nvp(\"data\", make_array(m.data(), m.size()));\n+58}\n+59\n+60template \n+62void load(Archive& ar,\n+63 Eigen::Matrix& m,\n+64 const unsigned int /*version*/) {\n+65 size_t rows, cols;\n+66 ar >> BOOST_SERIALIZATION_NVP(rows);\n+67 ar >> BOOST_SERIALIZATION_NVP(cols);\n+68 m.resize(rows, cols);\n+69 ar >> make_nvp(\"data\", make_array(m.data(), m.size()));\n+70}\n+71\n+72// templated version of BOOST_SERIALIZATION_SPLIT_FREE(Eigen::Matrix);\n+73template \n+75void serialize(\n+76 Archive& ar,\n+77 Eigen::Matrix& m,\n+78 const unsigned int version) {\n+79 split_free(ar, m, version);\n+80}\n+81\n+82// specialized to Matrix for MATLAB wrapper\n+83template \n+84void serialize(Archive& ar, gtsam::Matrix& m, const unsigned int version) {\n+85 split_free(ar, m, version);\n+86}\n+87\n+88} // namespace serialization\n+89} // namespace boost\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd_\b._\bh\n+ * _\bM_\ba_\bt_\br_\bi_\bx_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00041.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00041.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/SymmetricBlockMatrix.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastDefaultAllocator.h File Reference\n \n \n \n \n \n \n \n@@ -95,44 +95,48 @@\n \n \n \n \n
\n \n-
SymmetricBlockMatrix.h File Reference
\n+Namespaces |\n+Macros
\n+
FastDefaultAllocator.h File Reference
\n \n
\n \n-

Access to matrices via blocks of pre-defined sizes. \n+

An easy way to control which allocator is used for Fast* collections. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::SymmetricBlockMatrix
 This class stores a dense matrix and allows it to be accessed as a collection of blocks. More...
struct  gtsam::internal::FastDefaultAllocator< T >
 Default allocator for list, map, and set types. More...
 
struct  gtsam::internal::FastDefaultVectorAllocator< T >
 Default allocator for vector types (we never use boost pool for vectors) More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Access to matrices via blocks of pre-defined sizes.

\n-

Used in GaussianFactor and GaussianConditional.

Author
Richard Roberts
\n-
Date
Sep 18, 2010
\n+

An easy way to control which allocator is used for Fast* collections.

\n+
Author
Richard Roberts
\n+
Date
Aug 15, 2013
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymmetricBlockMatrix.h File Reference\n-Access to matrices via blocks of pre-defined sizes. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n+FastDefaultAllocator.h File Reference\n+An easy way to control which allocator is used for Fast* collections. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-\u00a0 This class stores a dense matrix and allows it to be accessed as a\n- collection of blocks. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n+\u00a0 Default allocator for list, map, and set types. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bV_\be_\bc_\bt_\bo_\br_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n+\u00a0 Default allocator for vector types (we never use boost pool for\n+ vectors) _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Access to matrices via blocks of pre-defined sizes.\n-Used in GaussianFactor and _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl.\n+An easy way to control which allocator is used for Fast* collections.\n Author\n Richard Roberts\n Date\n- Sep 18, 2010\n+ Aug 15, 2013\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+ * _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00041_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00041_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/SymmetricBlockMatrix.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastDefaultAllocator.h Source File\n \n \n \n \n \n \n \n@@ -98,439 +98,106 @@\n
No Matches
\n \n \n \n \n \n
\n-
SymmetricBlockMatrix.h
\n+
FastDefaultAllocator.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4* Atlanta, Georgia 30332-0415
\n-
5* All Rights Reserved
\n-
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8* See LICENSE for the license information
\n+
8 * See LICENSE for the license information
\n
9
\n-
10* -------------------------------------------------------------------------- */
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-
21#include <gtsam/base/Matrix.h>
\n-
22#include <gtsam/base/types.h>
\n-
23#include <gtsam/dllexport.h>
\n-
24#include <boost/serialization/nvp.hpp>
\n-
25#include <cassert>
\n-
26#include <stdexcept>
\n-
27#include <array>
\n-
28
\n-
29namespace boost {
\n-
30namespace serialization {
\n-
31class access;
\n-
32} /* namespace serialization */
\n-
33} /* namespace boost */
\n-
34
\n-
35namespace gtsam {
\n-
36
\n-
37 // Forward declarations
\n-
38 class VerticalBlockMatrix;
\n-
39
\n-
\n-
51 class GTSAM_EXPORT SymmetricBlockMatrix
\n-
52 {
\n-
53 public:
\n-\n-
55 typedef Eigen::Block<Matrix> Block;
\n-
56 typedef Eigen::Block<const Matrix> constBlock;
\n-
57
\n-
58 protected:
\n-
59 Matrix matrix_;
\n-\n-
61
\n-\n-
63
\n-
64 public:
\n-\n-
67
\n-
69 template<typename CONTAINER>
\n-
\n-
70 SymmetricBlockMatrix(const CONTAINER& dimensions, bool appendOneDimension = false) :
\n-
71 blockStart_(0)
\n+
19#pragma once
\n+
20#include <gtsam/config.h> // Configuration from CMake
\n+
21
\n+
22#if !defined GTSAM_ALLOCATOR_BOOSTPOOL && !defined GTSAM_ALLOCATOR_TBB && !defined GTSAM_ALLOCATOR_STL
\n+
23# ifdef GTSAM_USE_TBB
\n+
24// Use TBB allocator by default if we have TBB, otherwise boost pool
\n+
25# define GTSAM_ALLOCATOR_TBB
\n+
26# else
\n+
27# define GTSAM_ALLOCATOR_BOOSTPOOL
\n+
28# endif
\n+
29#endif
\n+
30
\n+
31#if defined GTSAM_ALLOCATOR_BOOSTPOOL
\n+
32# include <boost/pool/pool_alloc.hpp>
\n+
33#elif defined GTSAM_ALLOCATOR_TBB
\n+
34# include <tbb/tbb_allocator.h>
\n+
35# undef min // TBB seems to include Windows.h which defines these macros that cause problems
\n+
36# undef max
\n+
37# undef ERROR
\n+
38#elif defined GTSAM_ALLOCATOR_STL
\n+
39# include <memory>
\n+
40#endif
\n+
41
\n+
42namespace gtsam
\n+
43{
\n+
44
\n+
45 namespace internal
\n+
46 {
\n+
48 template<typename T>
\n+
\n+\n+
50 {
\n+
51#if defined GTSAM_ALLOCATOR_BOOSTPOOL
\n+
52 typedef boost::fast_pool_allocator<T> type;
\n+
53 static const bool isBoost = true;
\n+
54 static const bool isTBB = false;
\n+
55 static const bool isSTL = false;
\n+
56#elif defined GTSAM_ALLOCATOR_TBB
\n+
57 typedef tbb::tbb_allocator<T> type;
\n+
58 static const bool isBoost = false;
\n+
59 static const bool isTBB = true;
\n+
60 static const bool isSTL = false;
\n+
61#elif defined GTSAM_ALLOCATOR_STL
\n+
62 typedef std::allocator<T> type;
\n+
63 static const bool isBoost = false;
\n+
64 static const bool isTBB = false;
\n+
65 static const bool isSTL = true;
\n+
66#endif
\n+
67 };
\n+
\n+
68
\n+
70 template<typename T>
\n+
\n+\n
72 {
\n-
73 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);
\n-
74 matrix_.resize(variableColOffsets_.back(), variableColOffsets_.back());
\n-
75 assertInvariants();
\n-
76 }
\n-
\n-
77
\n-
79 template<typename ITERATOR>
\n-
\n-
80 SymmetricBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension = false) :
\n-
81 blockStart_(0)
\n-
82 {
\n-
83 fillOffsets(firstBlockDim, lastBlockDim, appendOneDimension);
\n-
84 matrix_.resize(variableColOffsets_.back(), variableColOffsets_.back());
\n-
85 assertInvariants();
\n-
86 }
\n-
\n-
87
\n-
89 template<typename CONTAINER>
\n-
\n-
90 SymmetricBlockMatrix(const CONTAINER& dimensions, const Matrix& matrix, bool appendOneDimension = false) :
\n-
91 blockStart_(0)
\n-
92 {
\n-
93 matrix_.resize(matrix.rows(), matrix.cols());
\n-
94 matrix_.triangularView<Eigen::Upper>() = matrix.triangularView<Eigen::Upper>();
\n-
95 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);
\n-
96 if(matrix_.rows() != matrix_.cols())
\n-
97 throw std::invalid_argument("Requested to create a SymmetricBlockMatrix from a non-square matrix.");
\n-
98 if(variableColOffsets_.back() != matrix_.cols())
\n-
99 throw std::invalid_argument("Requested to create a SymmetricBlockMatrix with dimensions that do not sum to the total size of the provided matrix.");
\n-
100 assertInvariants();
\n-
101 }
\n-
\n-
102
\n-
106 static SymmetricBlockMatrix LikeActiveViewOf(const SymmetricBlockMatrix& other);
\n-
107
\n-
111 static SymmetricBlockMatrix LikeActiveViewOf(const VerticalBlockMatrix& other);
\n-
112
\n-
114 DenseIndex rows() const { assertInvariants(); return variableColOffsets_.back() - variableColOffsets_[blockStart_]; }
\n-
115
\n-
117 DenseIndex cols() const { return rows(); }
\n-
118
\n-
120 DenseIndex nBlocks() const { return nActualBlocks() - blockStart_; }
\n-
121
\n-
\n-\n-
124 return calcIndices(block, block, 1, 1)[2];
\n-
125 }
\n-
\n-
126
\n-
129
\n-
132 Matrix block(DenseIndex I, DenseIndex J) const;
\n-
133
\n-
\n-
135 Eigen::SelfAdjointView<Block, Eigen::Upper> diagonalBlock(DenseIndex J) {
\n-
136 return block_(J, J).selfadjointView<Eigen::Upper>();
\n-
137 }
\n-
\n-
138
\n-
\n-
140 Eigen::SelfAdjointView<constBlock, Eigen::Upper> diagonalBlock(DenseIndex J) const {
\n-
141 return block_(J, J).selfadjointView<Eigen::Upper>();
\n-
142 }
\n-
\n-
143
\n-
\n-
145 Vector diagonal(DenseIndex J) const {
\n-
146 return block_(J, J).diagonal();
\n-
147 }
\n-
\n-
148
\n-
\n-
150 constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const {
\n-
151 assert(I < J);
\n-
152 return block_(I, J);
\n-
153 }
\n-
\n-
154
\n-
\n-
156 Eigen::SelfAdjointView<constBlock, Eigen::Upper> selfadjointView(
\n-
157 DenseIndex I, DenseIndex J) const {
\n-
158 assert(J > I);
\n-
159 return block_(I, I, J - I, J - I).selfadjointView<Eigen::Upper>();
\n-
160 }
\n-
\n-
161
\n-
\n-
163 Eigen::TriangularView<constBlock, Eigen::Upper> triangularView(DenseIndex I,
\n-
164 DenseIndex J) const {
\n-
165 assert(J > I);
\n-
166 return block_(I, I, J - I, J - I).triangularView<Eigen::Upper>();
\n-
167 }
\n-
\n-
168
\n-
\n-
170 constBlock aboveDiagonalRange(DenseIndex i_startBlock,
\n-
171 DenseIndex i_endBlock,
\n-
172 DenseIndex j_startBlock,
\n-
173 DenseIndex j_endBlock) const {
\n-
174 assert(i_startBlock < j_startBlock);
\n-
175 assert(i_endBlock <= j_startBlock);
\n-
176 return block_(i_startBlock, j_startBlock, i_endBlock - i_startBlock,
\n-
177 j_endBlock - j_startBlock);
\n-
178 }
\n-
\n-
179
\n-
\n-
181 Block aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock,
\n-
182 DenseIndex j_startBlock, DenseIndex j_endBlock) {
\n-
183 assert(i_startBlock < j_startBlock);
\n-
184 assert(i_endBlock <= j_startBlock);
\n-
185 return block_(i_startBlock, j_startBlock, i_endBlock - i_startBlock,
\n-
186 j_endBlock - j_startBlock);
\n-
187 }
\n-
\n-
188
\n-
192
\n-
194 template <typename XprType>
\n-
\n-
195 void setDiagonalBlock(DenseIndex I, const XprType& xpr) {
\n-
196 block_(I, I).triangularView<Eigen::Upper>() = xpr.template triangularView<Eigen::Upper>();
\n-
197 }
\n-
\n-
198
\n-
200 template <typename XprType>
\n-
\n-
201 void setOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType& xpr) {
\n-
202 assert(I != J);
\n-
203 if (I < J) {
\n-
204 block_(I, J) = xpr;
\n-
205 } else {
\n-
206 block_(J, I) = xpr.transpose();
\n-
207 }
\n-
208 }
\n-
\n-
209
\n-
211 template <typename XprType>
\n-
\n-
212 void updateDiagonalBlock(DenseIndex I, const XprType& xpr) {
\n-
213 // TODO(gareth): Eigen won't let us add triangular or self-adjoint views
\n-
214 // here, so we do it manually.
\n-
215 auto dest = block_(I, I);
\n-
216 assert(dest.rows() == xpr.rows());
\n-
217 assert(dest.cols() == xpr.cols());
\n-
218 for (DenseIndex col = 0; col < dest.cols(); ++col) {
\n-
219 for (DenseIndex row = 0; row <= col; ++row) {
\n-
220 dest(row, col) += xpr(row, col);
\n-
221 }
\n-
222 }
\n-
223 }
\n-
\n-
224
\n-
227 template <typename XprType>
\n-
\n-
228 void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType& xpr) {
\n-
229 assert(I != J);
\n-
230 if (I < J) {
\n-
231 block_(I, J).noalias() += xpr;
\n-
232 } else {
\n-
233 block_(J, I).noalias() += xpr.transpose();
\n-
234 }
\n-
235 }
\n-
\n-
236
\n-
240
\n-
\n-
242 Eigen::SelfAdjointView<Block, Eigen::Upper> selfadjointView() {
\n-
243 return full().selfadjointView<Eigen::Upper>();
\n-
244 }
\n-
\n-
245
\n-
\n-
247 Eigen::SelfAdjointView<constBlock, Eigen::Upper> selfadjointView() const {
\n-
248 return full().selfadjointView<Eigen::Upper>();
\n-
249 }
\n-
\n-
250
\n-
252 template <typename XprType>
\n-
\n-
253 void setFullMatrix(const XprType& xpr) {
\n-
254 full().triangularView<Eigen::Upper>() = xpr.template triangularView<Eigen::Upper>();
\n-
255 }
\n-
\n-
256
\n-
\n-
258 void setZero() {
\n-
259 full().triangularView<Eigen::Upper>().setZero();
\n-
260 }
\n-
\n-
261
\n-
263 void negate();
\n-
264
\n-
266 void invertInPlace();
\n-
267
\n-
269
\n-
273 DenseIndex& blockStart() { return blockStart_; }
\n-
274
\n-
277 DenseIndex blockStart() const { return blockStart_; }
\n-
278
\n-
289 void choleskyPartial(DenseIndex nFrontals);
\n-
290
\n-\n-
297
\n-
298 protected:
\n-
299
\n-
\n-\n-
302 return variableColOffsets_.size();
\n-
303 }
\n-
\n-
304
\n-
\n-\n-
307 return nOffsets() - 1;
\n-
308 }
\n-
\n-
309
\n-
\n-\n-
312 assert(block >= 0);
\n-
313 const DenseIndex actual_index = block + blockStart();
\n-
314 assert(actual_index < nOffsets());
\n-
315 return variableColOffsets_[actual_index];
\n-
316 }
\n-
\n-
317
\n-
\n-
319 constBlock block_(DenseIndex iBlock, DenseIndex jBlock,
\n-
320 DenseIndex blockRows = 1, DenseIndex blockCols = 1) const {
\n-
321 const std::array<DenseIndex, 4> indices =
\n-
322 calcIndices(iBlock, jBlock, blockRows, blockCols);
\n-
323 return matrix_.block(indices[0], indices[1], indices[2], indices[3]);
\n-
324 }
\n-
\n-
325
\n-
\n-
327 Block block_(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows = 1,
\n-
328 DenseIndex blockCols = 1) {
\n-
329 const std::array<DenseIndex, 4> indices =
\n-
330 calcIndices(iBlock, jBlock, blockRows, blockCols);
\n-
331 return matrix_.block(indices[0], indices[1], indices[2], indices[3]);
\n-
332 }
\n-
\n-
333
\n-
\n-
335 constBlock full() const {
\n-
336 return block_(0, 0, nBlocks(), nBlocks());
\n-
337 }
\n-
\n-
338
\n-
\n-
340 Block full() {
\n-
341 return block_(0, 0, nBlocks(), nBlocks());
\n-
342 }
\n-
\n-
343
\n-
\n-
345 std::array<DenseIndex, 4> calcIndices(DenseIndex iBlock, DenseIndex jBlock,
\n-
346 DenseIndex blockRows,
\n-
347 DenseIndex blockCols) const {
\n-
348 assert(blockRows >= 0);
\n-
349 assert(blockCols >= 0);
\n-
350
\n-
351 // adjust indices to account for start and size of blocks
\n-
352 const DenseIndex denseI = offset(iBlock);
\n-
353 const DenseIndex denseJ = offset(jBlock);
\n-
354 const DenseIndex denseRows = offset(iBlock + blockRows) - denseI;
\n-
355 const DenseIndex denseCols = offset(jBlock + blockCols) - denseJ;
\n-
356 return {{denseI, denseJ, denseRows, denseCols}};
\n-
357 }
\n-
\n-
358
\n-
359 void assertInvariants() const
\n-
360 {
\n-
361 assert(matrix_.rows() == matrix_.cols());
\n-
362 assert(matrix_.cols() == variableColOffsets_.back());
\n-
363 assert(blockStart_ < (DenseIndex)variableColOffsets_.size());
\n-
364 }
\n-
365
\n-
366 template<typename ITERATOR>
\n-
367 void fillOffsets(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension)
\n-
368 {
\n-
369 variableColOffsets_.resize((lastBlockDim-firstBlockDim) + 1 + (appendOneDimension ? 1 : 0));
\n-
370 variableColOffsets_[0] = 0;
\n-
371 DenseIndex j=0;
\n-
372 for(ITERATOR dim=firstBlockDim; dim!=lastBlockDim; ++dim) {
\n-
373 variableColOffsets_[j+1] = variableColOffsets_[j] + *dim;
\n-
374 ++ j;
\n-
375 }
\n-
376 if(appendOneDimension)
\n-
377 {
\n-
378 variableColOffsets_[j+1] = variableColOffsets_[j] + 1;
\n-
379 ++ j;
\n-
380 }
\n-
381 }
\n-
382
\n-
383 friend class VerticalBlockMatrix;
\n-
384 template<typename SymmetricBlockMatrixType> friend class SymmetricBlockMatrixBlockExpr;
\n-
385
\n-
386 private:
\n-
388 friend class boost::serialization::access;
\n-
389 template<class ARCHIVE>
\n-
390 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
391 // Fill in the lower triangle part of the matrix, so boost::serialization won't
\n-
392 // complain about uninitialized data with an input_stream_error exception
\n-
393 // http://www.boost.org/doc/libs/1_37_0/libs/serialization/doc/exceptions.html#stream_error
\n-
394 matrix_.triangularView<Eigen::Lower>() = matrix_.triangularView<Eigen::Upper>().transpose();
\n-
395 ar & BOOST_SERIALIZATION_NVP(matrix_);
\n-
396 ar & BOOST_SERIALIZATION_NVP(variableColOffsets_);
\n-
397 ar & BOOST_SERIALIZATION_NVP(blockStart_);
\n-
398 }
\n-
399 };
\n-
\n-
400
\n-
402 class CholeskyFailed;
\n-
403
\n-
404}
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Typedefs for easier changing of types.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
73#if defined GTSAM_ALLOCATOR_TBB
\n+
74 typedef tbb::tbb_allocator<T> type;
\n+
75 static const bool isBoost = false;
\n+
76 static const bool isTBB = true;
\n+
77 static const bool isSTL = false;
\n+
78#else
\n+
79 typedef std::allocator<T> type;
\n+
80 static const bool isBoost = false;
\n+
81 static const bool isTBB = false;
\n+
82 static const bool isSTL = true;
\n+
83#endif
\n+
84 };
\n+
\n+
85 }
\n+
86
\n+
87}
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)
Extracts a row view from a matrix that avoids a copy.
Definition Matrix.h:222
\n-
void split(const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)
Split the graph into two parts: one corresponds to the given spanning tree, and the other corresponds...
Definition graph-inl.h:255
\n-
bool choleskyPartial(Matrix &ABC, size_t nFrontal, size_t topleft)
Partial Cholesky computes a factor [R S such that [R' 0 [R S = [A B 0 L] S' I] 0 L] B' C].
Definition cholesky.cpp:108
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
Block full()
Get the full matrix as a block.
Definition SymmetricBlockMatrix.h:340
\n-
DenseIndex blockStart_
Changes apparent matrix view, see main class comment.
Definition SymmetricBlockMatrix.h:62
\n-
void setDiagonalBlock(DenseIndex I, const XprType &xpr)
Set a diagonal block. Only the upper triangular portion of xpr is evaluated.
Definition SymmetricBlockMatrix.h:195
\n-
DenseIndex nActualBlocks() const
Number of actual blocks in the full matrix.
Definition SymmetricBlockMatrix.h:306
\n-
Vector diagonal(DenseIndex J) const
Get the diagonal of the J'th diagonal block.
Definition SymmetricBlockMatrix.h:145
\n-
Matrix matrix_
The full matrix.
Definition SymmetricBlockMatrix.h:59
\n-
DenseIndex cols() const
Column size.
Definition SymmetricBlockMatrix.h:117
\n-
DenseIndex getDim(DenseIndex block) const
Number of dimensions for variable on this diagonal block.
Definition SymmetricBlockMatrix.h:123
\n-
void setZero()
Set the entire active matrix zero.
Definition SymmetricBlockMatrix.h:258
\n-
void setOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)
Set an off-diagonal block. Only the upper triangular portion of xpr is evaluated.
Definition SymmetricBlockMatrix.h:201
\n-
void setFullMatrix(const XprType &xpr)
Set the entire active matrix. Only reads the upper triangular part of xpr.
Definition SymmetricBlockMatrix.h:253
\n-
Eigen::SelfAdjointView< Block, Eigen::Upper > selfadjointView()
Get self adjoint view.
Definition SymmetricBlockMatrix.h:242
\n-
constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const
Get block above the diagonal (I, J).
Definition SymmetricBlockMatrix.h:150
\n-
constBlock block_(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows=1, DenseIndex blockCols=1) const
Get an arbitrary block from the matrix. Indices are in block units.
Definition SymmetricBlockMatrix.h:319
\n-
constBlock full() const
Get the full matrix as a block.
Definition SymmetricBlockMatrix.h:335
\n-
DenseIndex rows() const
Row size.
Definition SymmetricBlockMatrix.h:114
\n-
Block aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock, DenseIndex j_startBlock, DenseIndex j_endBlock)
Get a range [i,j) from the matrix. Indices are in block units.
Definition SymmetricBlockMatrix.h:181
\n-
Eigen::TriangularView< constBlock, Eigen::Upper > triangularView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j) as a triangular view.
Definition SymmetricBlockMatrix.h:163
\n-
Eigen::SelfAdjointView< constBlock, Eigen::Upper > diagonalBlock(DenseIndex J) const
Return the J'th diagonal block as a self adjoint view.
Definition SymmetricBlockMatrix.h:140
\n-
SymmetricBlockMatrix(const CONTAINER &dimensions, const Matrix &matrix, bool appendOneDimension=false)
Construct from a container of the sizes of each vertical block and a pre-prepared matrix.
Definition SymmetricBlockMatrix.h:90
\n-
DenseIndex blockStart() const
Retrieve the first logical block, i.e.
Definition SymmetricBlockMatrix.h:277
\n-
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView() const
Get self adjoint view.
Definition SymmetricBlockMatrix.h:247
\n-
void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)
Update an off diagonal block.
Definition SymmetricBlockMatrix.h:228
\n-
SymmetricBlockMatrix(const CONTAINER &dimensions, bool appendOneDimension=false)
Construct from a container of the sizes of each block.
Definition SymmetricBlockMatrix.h:70
\n-
SymmetricBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension=false)
Construct from iterator over the sizes of each vertical block.
Definition SymmetricBlockMatrix.h:80
\n-
DenseIndex & blockStart()
Retrieve or modify the first logical block, i.e.
Definition SymmetricBlockMatrix.h:273
\n-
constBlock aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock, DenseIndex j_startBlock, DenseIndex j_endBlock) const
Get a range [i,j) from the matrix. Indices are in block units.
Definition SymmetricBlockMatrix.h:170
\n-
Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)
Return the J'th diagonal block as a self adjoint view.
Definition SymmetricBlockMatrix.h:135
\n-
Block block_(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows=1, DenseIndex blockCols=1)
Get an arbitrary block from the matrix. Indices are in block units.
Definition SymmetricBlockMatrix.h:327
\n-
void updateDiagonalBlock(DenseIndex I, const XprType &xpr)
Increment the diagonal block by the values in xpr. Only reads the upper triangular part of xpr.
Definition SymmetricBlockMatrix.h:212
\n-
DenseIndex nOffsets() const
Number of offsets in the full matrix.
Definition SymmetricBlockMatrix.h:301
\n-
std::array< DenseIndex, 4 > calcIndices(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows, DenseIndex blockCols) const
Compute the indices into the underlying matrix for a given block.
Definition SymmetricBlockMatrix.h:345
\n-
DenseIndex nBlocks() const
Block count.
Definition SymmetricBlockMatrix.h:120
\n-
FastVector< DenseIndex > variableColOffsets_
the starting columns of each block (0-based)
Definition SymmetricBlockMatrix.h:60
\n-
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j).
Definition SymmetricBlockMatrix.h:156
\n-
DenseIndex offset(DenseIndex block) const
Get an offset for a block index (in the active view).
Definition SymmetricBlockMatrix.h:311
\n-
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n+
Default allocator for list, map, and set types.
Definition FastDefaultAllocator.h:50
\n+
Default allocator for vector types (we never use boost pool for vectors)
Definition FastDefaultAllocator.h:72
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,546 +1,102 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymmetricBlockMatrix.h\n+FastDefaultAllocator.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4* Atlanta, Georgia 30332-0415\n-5* All Rights Reserved\n-6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8* See LICENSE for the license information\n+8 * See LICENSE for the license information\n 9\n-10* -------------------------------------------------------------------------\n+10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-23#include \n-24#include \n-25#include \n-26#include \n-27#include \n-28\n-29namespace boost {\n-30namespace serialization {\n-31class access;\n-32} /* namespace serialization */\n-33} /* namespace boost */\n-34\n-35namespace _\bg_\bt_\bs_\ba_\bm {\n-36\n-37 // Forward declarations\n-38 class VerticalBlockMatrix;\n-39\n-_\b5_\b1 class GTSAM_EXPORT _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-52 {\n-53 public:\n-54 typedef _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bT_\bh_\bi_\bs;\n-55 typedef Eigen::Block Block;\n-56 typedef Eigen::Block constBlock;\n-57\n-58 protected:\n-_\b5_\b9 Matrix _\bm_\ba_\bt_\br_\bi_\bx_\b_;\n-_\b6_\b0 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx_\b> _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bC_\bo_\bl_\bO_\bf_\bf_\bs_\be_\bt_\bs_\b_;\n-61\n-_\b6_\b2 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt_\b_;\n-63\n-64 public:\n-66 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx();\n-67\n-69 template\n-_\b7_\b0 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(const CONTAINER& dimensions, bool appendOneDimension =\n-false) :\n-71 blockStart_(0)\n+19#pragma once\n+20#include // Configuration from CMake\n+21\n+22#if !defined GTSAM_ALLOCATOR_BOOSTPOOL && !defined GTSAM_ALLOCATOR_TBB &&\n+!defined GTSAM_ALLOCATOR_STL\n+23# ifdef GTSAM_USE_TBB\n+24// Use TBB allocator by default if we have TBB, otherwise boost pool\n+25# define GTSAM_ALLOCATOR_TBB\n+26# else\n+27# define GTSAM_ALLOCATOR_BOOSTPOOL\n+28# endif\n+29#endif\n+30\n+31#if defined GTSAM_ALLOCATOR_BOOSTPOOL\n+32# include \n+33#elif defined GTSAM_ALLOCATOR_TBB\n+34# include \n+35# undef min // TBB seems to include Windows.h which defines these macros that\n+cause problems\n+36# undef max\n+37# undef ERROR\n+38#elif defined GTSAM_ALLOCATOR_STL\n+39# include \n+40#endif\n+41\n+42namespace _\bg_\bt_\bs_\ba_\bm\n+43{\n+44\n+45 namespace internal\n+46 {\n+48 template\n+_\b4_\b9 struct _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n+50 {\n+51#if defined GTSAM_ALLOCATOR_BOOSTPOOL\n+52 typedef boost::fast_pool_allocator type;\n+53 static const bool isBoost = true;\n+54 static const bool isTBB = false;\n+55 static const bool isSTL = false;\n+56#elif defined GTSAM_ALLOCATOR_TBB\n+57 typedef tbb::tbb_allocator type;\n+58 static const bool isBoost = false;\n+59 static const bool isTBB = true;\n+60 static const bool isSTL = false;\n+61#elif defined GTSAM_ALLOCATOR_STL\n+62 typedef std::allocator type;\n+63 static const bool isBoost = false;\n+64 static const bool isTBB = false;\n+65 static const bool isSTL = true;\n+66#endif\n+67 };\n+68\n+70 template\n+_\b7_\b1 struct _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bV_\be_\bc_\bt_\bo_\br_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n 72 {\n-73 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);\n-74 matrix_.resize(variableColOffsets_.back(), variableColOffsets_.back());\n-75 assertInvariants();\n-76 }\n-77\n-79 template\n-_\b8_\b0 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool\n-appendOneDimension = false) :\n-81 blockStart_(0)\n-82 {\n-83 fillOffsets(firstBlockDim, lastBlockDim, appendOneDimension);\n-84 matrix_.resize(variableColOffsets_.back(), variableColOffsets_.back());\n-85 assertInvariants();\n-86 }\n-87\n-89 template\n-_\b9_\b0 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(const CONTAINER& dimensions, const Matrix& matrix, bool\n-appendOneDimension = false) :\n-91 blockStart_(0)\n-92 {\n-93 matrix_.resize(matrix.rows(), matrix.cols());\n-94 matrix_.triangularView() = matrix.triangularView\n-();\n-95 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);\n-96 if(matrix_.rows() != matrix_.cols())\n-97 throw std::invalid_argument(\"Requested to create a SymmetricBlockMatrix from\n-a non-square matrix.\");\n-98 if(variableColOffsets_.back() != matrix_.cols())\n-99 throw std::invalid_argument(\"Requested to create a SymmetricBlockMatrix with\n-dimensions that do not sum to the total size of the provided matrix.\");\n-100 assertInvariants();\n-101 }\n-102\n-106 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx LikeActiveViewOf(const _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n-other);\n-107\n-111 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx LikeActiveViewOf(const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n-other);\n-112\n-_\b1_\b1_\b4 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\br_\bo_\bw_\bs() const { assertInvariants(); return\n-variableColOffsets_.back() - variableColOffsets_[blockStart_]; }\n-115\n-_\b1_\b1_\b7 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bc_\bo_\bl_\bs() const { return rows(); }\n-118\n-_\b1_\b2_\b0 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bn_\bB_\bl_\bo_\bc_\bk_\bs() const { return nActualBlocks() - blockStart_; }\n-121\n-_\b1_\b2_\b3 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bD_\bi_\bm(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx block) const {\n-124 return calcIndices(block, block, 1, 1)[2];\n-125 }\n-126\n-129\n-132 Matrix block(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) const;\n-133\n-_\b1_\b3_\b5 Eigen::SelfAdjointView _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) {\n-136 return block_(J, J).selfadjointView();\n-137 }\n-138\n-_\b1_\b4_\b0 Eigen::SelfAdjointView _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-J) const {\n-141 return block_(J, J).selfadjointView();\n-142 }\n-143\n-_\b1_\b4_\b5 Vector _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) const {\n-146 return block_(J, J).diagonal();\n-147 }\n-148\n-_\b1_\b5_\b0 constBlock _\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) const {\n-151 assert(I < J);\n-152 return block_(I, J);\n-153 }\n-154\n-_\b1_\b5_\b6 Eigen::SelfAdjointView _\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw(\n-157 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) const {\n-158 assert(J > I);\n-159 return block_(I, I, J - I, J - I).selfadjointView();\n-160 }\n-161\n-_\b1_\b6_\b3 Eigen::TriangularView _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\br_\bV_\bi_\be_\bw(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-I,\n-164 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) const {\n-165 assert(J > I);\n-166 return block_(I, I, J - I, J - I).triangularView();\n-167 }\n-168\n-_\b1_\b7_\b0 constBlock _\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i_startBlock,\n-171 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i_endBlock,\n-172 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j_startBlock,\n-173 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j_endBlock) const {\n-174 assert(i_startBlock < j_startBlock);\n-175 assert(i_endBlock <= j_startBlock);\n-176 return block_(i_startBlock, j_startBlock, i_endBlock - i_startBlock,\n-177 j_endBlock - j_startBlock);\n-178 }\n-179\n-_\b1_\b8_\b1 Block _\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i_startBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i_endBlock,\n-182 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j_startBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j_endBlock) {\n-183 assert(i_startBlock < j_startBlock);\n-184 assert(i_endBlock <= j_startBlock);\n-185 return block_(i_startBlock, j_startBlock, i_endBlock - i_startBlock,\n-186 j_endBlock - j_startBlock);\n-187 }\n-188\n-192\n-194 template \n-_\b1_\b9_\b5 void _\bs_\be_\bt_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, const XprType& xpr) {\n-196 block_(I, I).triangularView() = xpr.template\n-triangularView();\n-197 }\n-198\n-200 template \n-_\b2_\b0_\b1 void _\bs_\be_\bt_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J, const XprType& xpr) {\n-202 assert(I != J);\n-203 if (I < J) {\n-204 block_(I, J) = xpr;\n-205 } else {\n-206 block_(J, I) = xpr.transpose();\n-207 }\n-208 }\n-209\n-211 template \n-_\b2_\b1_\b2 void _\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, const XprType& xpr) {\n-213 // TODO(gareth): Eigen won't let us add triangular or self-adjoint views\n-214 // here, so we do it manually.\n-215 auto dest = block_(I, I);\n-216 assert(dest.rows() == xpr.rows());\n-217 assert(dest.cols() == xpr.cols());\n-218 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx col = 0; col < dest.cols(); ++col) {\n-219 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\br_\bo_\bw = 0; _\br_\bo_\bw <= col; ++_\br_\bo_\bw) {\n-220 dest(_\br_\bo_\bw, col) += xpr(_\br_\bo_\bw, col);\n-221 }\n-222 }\n-223 }\n-224\n-227 template \n-_\b2_\b2_\b8 void _\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J, const XprType& xpr)\n-{\n-229 assert(I != J);\n-230 if (I < J) {\n-231 block_(I, J).noalias() += xpr;\n-232 } else {\n-233 block_(J, I).noalias() += xpr.transpose();\n-234 }\n-235 }\n-236\n-240\n-_\b2_\b4_\b2 Eigen::SelfAdjointView _\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw() {\n-243 return full().selfadjointView();\n-244 }\n-245\n-_\b2_\b4_\b7 Eigen::SelfAdjointView _\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw() const {\n-248 return full().selfadjointView();\n-249 }\n-250\n-252 template \n-_\b2_\b5_\b3 void _\bs_\be_\bt_\bF_\bu_\bl_\bl_\bM_\ba_\bt_\br_\bi_\bx(const XprType& xpr) {\n-254 full().triangularView() = xpr.template triangularView();\n-255 }\n-256\n-_\b2_\b5_\b8 void _\bs_\be_\bt_\bZ_\be_\br_\bo() {\n-259 full().triangularView().setZero();\n-260 }\n-261\n-263 void negate();\n-264\n-266 void invertInPlace();\n-267\n-269\n-_\b2_\b7_\b3 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt() { return blockStart_; }\n-274\n-_\b2_\b7_\b7 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt() const { return blockStart_; }\n-278\n-289 void _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx nFrontals);\n-290\n-296 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bs_\bp_\bl_\bi_\bt(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx nFrontals);\n-297\n-298 protected:\n-299\n-_\b3_\b0_\b1 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bn_\bO_\bf_\bf_\bs_\be_\bt_\bs() const {\n-302 return variableColOffsets_.size();\n-303 }\n-304\n-_\b3_\b0_\b6 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bn_\bA_\bc_\bt_\bu_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bs() const {\n-307 return nOffsets() - 1;\n-308 }\n-309\n-_\b3_\b1_\b1 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bo_\bf_\bf_\bs_\be_\bt(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx block) const {\n-312 assert(block >= 0);\n-313 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actual_index = block + blockStart();\n-314 assert(actual_index < nOffsets());\n-315 return variableColOffsets_[actual_index];\n-316 }\n-317\n-_\b3_\b1_\b9 constBlock _\bb_\bl_\bo_\bc_\bk_\b_(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx iBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx jBlock,\n-320 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockRows = 1, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockCols = 1) const {\n-321 const std::array indices =\n-322 calcIndices(iBlock, jBlock, blockRows, blockCols);\n-323 return matrix_.block(indices[0], indices[1], indices[2], indices[3]);\n-324 }\n-325\n-_\b3_\b2_\b7 Block _\bb_\bl_\bo_\bc_\bk_\b_(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx iBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx jBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockRows =\n-1,\n-328 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockCols = 1) {\n-329 const std::array indices =\n-330 calcIndices(iBlock, jBlock, blockRows, blockCols);\n-331 return matrix_.block(indices[0], indices[1], indices[2], indices[3]);\n-332 }\n-333\n-_\b3_\b3_\b5 constBlock _\bf_\bu_\bl_\bl() const {\n-336 return block_(0, 0, nBlocks(), nBlocks());\n-337 }\n-338\n-_\b3_\b4_\b0 Block _\bf_\bu_\bl_\bl() {\n-341 return block_(0, 0, nBlocks(), nBlocks());\n-342 }\n-343\n-_\b3_\b4_\b5 std::array _\bc_\ba_\bl_\bc_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx iBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx jBlock,\n-346 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockRows,\n-347 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockCols) const {\n-348 assert(blockRows >= 0);\n-349 assert(blockCols >= 0);\n-350\n-351 // adjust indices to account for start and size of blocks\n-352 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx denseI = offset(iBlock);\n-353 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx denseJ = offset(jBlock);\n-354 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx denseRows = offset(iBlock + blockRows) - denseI;\n-355 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx denseCols = offset(jBlock + blockCols) - denseJ;\n-356 return {{denseI, denseJ, denseRows, denseCols}};\n-357 }\n-358\n-359 void assertInvariants() const\n-360 {\n-361 assert(matrix_.rows() == matrix_.cols());\n-362 assert(matrix_.cols() == variableColOffsets_.back());\n-363 assert(blockStart_ < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)variableColOffsets_.size());\n-364 }\n-365\n-366 template\n-367 void fillOffsets(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool\n-appendOneDimension)\n-368 {\n-369 variableColOffsets_.resize((lastBlockDim-firstBlockDim) + 1 +\n-(appendOneDimension ? 1 : 0));\n-370 variableColOffsets_[0] = 0;\n-371 DenseIndex j=0;\n-372 for(ITERATOR dim=firstBlockDim; dim!=lastBlockDim; ++dim) {\n-373 variableColOffsets_[j+1] = variableColOffsets_[j] + *dim;\n-374 ++ j;\n-375 }\n-376 if(appendOneDimension)\n-377 {\n-378 variableColOffsets_[j+1] = variableColOffsets_[j] + 1;\n-379 ++ j;\n-380 }\n-381 }\n-382\n-383 friend class VerticalBlockMatrix;\n-384 template friend class\n-SymmetricBlockMatrixBlockExpr;\n-385\n-386 private:\n-_\b3_\b8_\b8 friend class boost::serialization::access;\n-389 template\n-390 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-391 // Fill in the lower triangle part of the matrix, so boost::serialization\n-won't\n-392 // complain about uninitialized data with an input_stream_error exception\n-393 // http://www.boost.org/doc/libs/1_37_0/libs/serialization/doc/\n-exceptions.html#stream_error\n-394 matrix_.triangularView() = matrix_.triangularView().transpose();\n-395 ar & BOOST_SERIALIZATION_NVP(matrix_);\n-396 ar & BOOST_SERIALIZATION_NVP(variableColOffsets_);\n-397 ar & BOOST_SERIALIZATION_NVP(blockStart_);\n-398 }\n-399 };\n-400\n-402 class CholeskyFailed;\n-403\n-404}\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+73#if defined GTSAM_ALLOCATOR_TBB\n+74 typedef tbb::tbb_allocator type;\n+75 static const bool isBoost = false;\n+76 static const bool isTBB = true;\n+77 static const bool isSTL = false;\n+78#else\n+79 typedef std::allocator type;\n+80 static const bool isBoost = false;\n+81 static const bool isTBB = false;\n+82 static const bool isSTL = true;\n+83#endif\n+84 };\n+85 }\n+86\n+87}\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\bo_\bw\n-const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)\n-Extracts a row view from a matrix that avoids a copy.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:222\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\bl_\bi_\bt\n-void split(const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)\n-Split the graph into two parts: one corresponds to the given spanning tree, and\n-the other corresponds...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:255\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl\n-bool choleskyPartial(Matrix &ABC, size_t nFrontal, size_t topleft)\n-Partial Cholesky computes a factor [R S such that [R' 0 [R S = [A B 0 L] S' I]\n-0 L] B' C].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn cholesky.cpp:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bu_\bl_\bl\n-Block full()\n-Get the full matrix as a block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:340\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt_\b_\n-DenseIndex blockStart_\n-Changes apparent matrix view, see main class comment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-void setDiagonalBlock(DenseIndex I, const XprType &xpr)\n-Set a diagonal block. Only the upper triangular portion of xpr is evaluated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bA_\bc_\bt_\bu_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bs\n-DenseIndex nActualBlocks() const\n-Number of actual blocks in the full matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:306\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-Vector diagonal(DenseIndex J) const\n-Get the diagonal of the J'th diagonal block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:145\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\b_\n-Matrix matrix_\n-The full matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n-DenseIndex cols() const\n-Column size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n-DenseIndex getDim(DenseIndex block) const\n-Number of dimensions for variable on this diagonal block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bZ_\be_\br_\bo\n-void setZero()\n-Set the entire active matrix zero.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:258\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-void setOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)\n-Set an off-diagonal block. Only the upper triangular portion of xpr is\n-evaluated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:201\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bF_\bu_\bl_\bl_\bM_\ba_\bt_\br_\bi_\bx\n-void setFullMatrix(const XprType &xpr)\n-Set the entire active matrix. Only reads the upper triangular part of xpr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:253\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n-Eigen::SelfAdjointView< Block, Eigen::Upper > selfadjointView()\n-Get self adjoint view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:242\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const\n-Get block above the diagonal (I, J).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\b_\n-constBlock block_(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows=1,\n-DenseIndex blockCols=1) const\n-Get an arbitrary block from the matrix. Indices are in block units.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:319\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bu_\bl_\bl\n-constBlock full() const\n-Get the full matrix as a block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:335\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-DenseIndex rows() const\n-Row size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be\n-Block aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock,\n-DenseIndex j_startBlock, DenseIndex j_endBlock)\n-Get a range [i,j) from the matrix. Indices are in block units.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:181\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\br_\bV_\bi_\be_\bw\n-Eigen::TriangularView< constBlock, Eigen::Upper > triangularView(DenseIndex I,\n-DenseIndex J) const\n-Return the square sub-matrix that contains blocks(i:j, i:j) as a triangular\n-view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-Eigen::SelfAdjointView< constBlock, Eigen::Upper > diagonalBlock(DenseIndex J)\n-const\n-Return the J'th diagonal block as a self adjoint view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-SymmetricBlockMatrix(const CONTAINER &dimensions, const Matrix &matrix, bool\n-appendOneDimension=false)\n-Construct from a container of the sizes of each vertical block and a pre-\n-prepared matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:90\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt\n-DenseIndex blockStart() const\n-Retrieve the first logical block, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:277\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n-Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView() const\n-Get self adjoint view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:247\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)\n-Update an off diagonal block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:228\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-SymmetricBlockMatrix(const CONTAINER &dimensions, bool\n-appendOneDimension=false)\n-Construct from a container of the sizes of each block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-SymmetricBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool\n-appendOneDimension=false)\n-Construct from iterator over the sizes of each vertical block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt\n-DenseIndex & blockStart()\n-Retrieve or modify the first logical block, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:273\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be\n-constBlock aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock,\n-DenseIndex j_startBlock, DenseIndex j_endBlock) const\n-Get a range [i,j) from the matrix. Indices are in block units.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:170\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)\n-Return the J'th diagonal block as a self adjoint view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\b_\n-Block block_(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows=1,\n-DenseIndex blockCols=1)\n-Get an arbitrary block from the matrix. Indices are in block units.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:327\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-void updateDiagonalBlock(DenseIndex I, const XprType &xpr)\n-Increment the diagonal block by the values in xpr. Only reads the upper\n-triangular part of xpr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bO_\bf_\bf_\bs_\be_\bt_\bs\n-DenseIndex nOffsets() const\n-Number of offsets in the full matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:301\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\ba_\bl_\bc_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-std::array< DenseIndex, 4 > calcIndices(DenseIndex iBlock, DenseIndex jBlock,\n-DenseIndex blockRows, DenseIndex blockCols) const\n-Compute the indices into the underlying matrix for a given block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:345\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bB_\bl_\bo_\bc_\bk_\bs\n-DenseIndex nBlocks() const\n-Block count.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bC_\bo_\bl_\bO_\bf_\bf_\bs_\be_\bt_\bs_\b_\n-FastVector< DenseIndex > variableColOffsets_\n-the starting columns of each block (0-based)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n-Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex\n-I, DenseIndex J) const\n-Return the square sub-matrix that contains blocks(i:j, i:j).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bf_\bf_\bs_\be_\bt\n-DenseIndex offset(DenseIndex block) const\n-Get an offset for a block index (in the active view).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:311\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of vertical blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n+Default allocator for list, map, and set types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastDefaultAllocator.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bV_\be_\bc_\bt_\bo_\br_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n+Default allocator for vector types (we never use boost pool for vectors)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastDefaultAllocator.h:72\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+ * _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00044.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00044.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,86 @@\n \n \n \n \n \n
\n \n-
DSFVector.cpp File Reference
\n+Classes |\n+Namespaces |\n+Macros |\n+Functions
\n+
Manifold.h File Reference
\n \n
\n \n-

a faster implementation for DSF, which uses vector rather than btree. \n+

Base class and basic functions for Manifold types. \n More...

\n+\n+

Go to the source code of this file.

\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+Classes

struct  gtsam::manifold_tag
 tag to assert a type is a manifold More...
 
struct  gtsam::internal::HasManifoldPrereqs< Class >
 Requirements on type to pass it to Manifold template below. More...
 
struct  gtsam::internal::GetDimensionImpl< Class, N >
 Extra manifold traits for fixed-dimension types. More...
 
struct  gtsam::internal::GetDimensionImpl< Class, Eigen::Dynamic >
 Extra manifold traits for variable-dimension types. More...
 
struct  gtsam::internal::ManifoldTraits< Class >
 A helper that implements the traits interface for GTSAM manifolds. More...
 
struct  gtsam::internal::Manifold< Class >
 Both ManifoldTraits and Testable. More...
 
struct  gtsam::FixedDimension< T >
 Give fixed size dimension of a type, fails at compile time if dynamic. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+

\n+Macros

\n+#define GTSAM_CONCEPT_MANIFOLD_INST(T)   template class gtsam::IsManifold<T>;
 ‍**
 
\n+#define GTSAM_CONCEPT_MANIFOLD_TYPE(T)   using _gtsam_IsManifold_##T = gtsam::IsManifold<T>;
 
\n+\n+\n+\n+\n+\n

\n+Functions

\n+template<typename T >
 gtsam::BOOST_CONCEPT_REQUIRES (((IsTestable< T >)),(bool)) check_manifold_invariants(const T &a
 Check invariants for Manifold type.
 
\n

Detailed Description

\n-

a faster implementation for DSF, which uses vector rather than btree.

\n-
Date
Jun 25, 2010
\n-
Author
Kai Ni
\n+

Base class and basic functions for Manifold types.

\n+
Author
Alex Cunningham
\n+
\n+Frank Dellaert
\n+
\n+Mike Bosse
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,60 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DSFVector.cpp File Reference\n-a faster implementation for DSF, which uses vector rather than btree. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Manifold.h File Reference\n+Base class and basic functions for Manifold types. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg\n+\u00a0 tag to assert a type is a manifold _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bH_\ba_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\br_\be_\bq_\bs_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b _\b>\n+\u00a0 Requirements on type to pass it to _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd template below. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b,_\b _\bN_\b _\b>\n+\u00a0 Extra manifold traits for fixed-dimension types. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>\n+\u00a0 Extra manifold traits for variable-dimension types. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b _\b>\n+\u00a0 A helper that implements the traits interface for GTSAM manifolds.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b _\b>\n+\u00a0 Both _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs and _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>\n+\u00a0 Give fixed size dimension of a type, fails at compile time if dynamic.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_M\bMA\bAN\bNI\bIF\bFO\bOL\bLD\bD_\b_I\bIN\bNS\bST\bT(T)\u00a0\u00a0\u00a0template class gtsam::IsManifold;\n+\u00a0 \u200d**\n+\u00a0\n+#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_M\bMA\bAN\bNI\bIF\bFO\bOL\bLD\bD_\b_T\bTY\bYP\bPE\bE(T)\u00a0\u00a0\u00a0using _gtsam_IsManifold_##T = gtsam::\n+ IsManifold;\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBO\bOO\bOS\bST\bT_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_R\bRE\bEQ\bQU\bUI\bIR\bRE\bES\bS (((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be< T >)),(bool))\n+ check_manifold_invariants(const T &a\n+\u00a0 Check invariants for Manifold type.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-a faster implementation for DSF, which uses vector rather than btree.\n- Date\n- Jun 25, 2010\n+Base class and basic functions for Manifold types.\n Author\n- Kai Ni\n+ Alex Cunningham\n+ Frank Dellaert\n+ Mike Bosse\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00047_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00047_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/ConcurrentMap.h Source File\n \n \n \n \n \n \n \n@@ -98,318 +98,140 @@\n
No Matches
\n \n \n \n \n \n
\n-
types.h
\n+
ConcurrentMap.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <gtsam/dllexport.h>
\n-
23#include <boost/concept/assert.hpp>
\n-
24#include <boost/range/concepts.hpp>
\n-
25#include <gtsam/config.h> // for GTSAM_USE_TBB
\n-
26
\n-
27#include <cstddef>
\n-
28#include <cstdint>
\n-
29
\n-
30#include <exception>
\n-
31#include <string>
\n-
32
\n-
33#ifdef GTSAM_USE_TBB
\n-
34#include <tbb/scalable_allocator.h>
\n-
35#endif
\n-
36
\n-
37#if defined(__GNUC__) || defined(__clang__)
\n-
38#define GTSAM_DEPRECATED __attribute__((deprecated))
\n-
39#elif defined(_MSC_VER)
\n-
40#define GTSAM_DEPRECATED __declspec(deprecated)
\n-
41#else
\n-
42#define GTSAM_DEPRECATED
\n-
43#endif
\n-
44
\n-
45#ifdef GTSAM_USE_EIGEN_MKL_OPENMP
\n-
46#include <omp.h>
\n-
47#endif
\n+
19#pragma once
\n+
20
\n+\n+
22
\n+
23// Change class depending on whether we are using TBB
\n+
24#ifdef GTSAM_USE_TBB
\n+
25
\n+
26// Include TBB header
\n+
27# include <tbb/concurrent_unordered_map.h>
\n+
28# undef min // TBB seems to include Windows.h which defines these macros that cause problems
\n+
29# undef max
\n+
30# undef ERROR
\n+
31
\n+
32#include <functional> // std::hash()
\n+
33
\n+
34// Use TBB concurrent_unordered_map for ConcurrentMap
\n+
35template <typename KEY, typename VALUE>
\n+
36using ConcurrentMapBase = tbb::concurrent_unordered_map<
\n+
37 KEY,
\n+
38 VALUE,
\n+
39 std::hash<KEY>
\n+
40 >;
\n+
41
\n+
42#else
\n+
43
\n+
44// If we're not using TBB, use a FastMap for ConcurrentMap
\n+
45#include <gtsam/base/FastMap.h>
\n+
46template <typename KEY, typename VALUE>
\n+\n
48
\n-
49/* Define macros for ignoring compiler warnings.
\n-
50 * Usage Example:
\n-
51 * ```
\n-
52 * CLANG_DIAGNOSTIC_PUSH_IGNORE("-Wdeprecated-declarations")
\n-
53 * GCC_DIAGNOSTIC_PUSH_IGNORE("-Wdeprecated-declarations")
\n-
54 * MSVC_DIAGNOSTIC_PUSH_IGNORE(4996)
\n-
55 * // ... code you want to suppress deprecation warnings for ...
\n-
56 * DIAGNOSTIC_POP()
\n-
57 * ```
\n-
58 */
\n-
59#define DO_PRAGMA(x) _Pragma (#x)
\n-
60#ifdef __clang__
\n-
61# define CLANG_DIAGNOSTIC_PUSH_IGNORE(diag) \\
\n-
62 _Pragma("clang diagnostic push") \\
\n-
63 DO_PRAGMA(clang diagnostic ignored diag)
\n-
64#else
\n-
65# define CLANG_DIAGNOSTIC_PUSH_IGNORE(diag)
\n-
66#endif
\n-
67
\n-
68#ifdef __GNUC__
\n-
69# define GCC_DIAGNOSTIC_PUSH_IGNORE(diag) \\
\n-
70 _Pragma("GCC diagnostic push") \\
\n-
71 DO_PRAGMA(GCC diagnostic ignored diag)
\n-
72#else
\n-
73# define GCC_DIAGNOSTIC_PUSH_IGNORE(diag)
\n-
74#endif
\n-
75
\n-
76#ifdef _MSC_VER
\n-
77# define MSVC_DIAGNOSTIC_PUSH_IGNORE(code) \\
\n-
78 _Pragma("warning ( push )") \\
\n-
79 DO_PRAGMA(warning ( disable : code ))
\n-
80#else
\n-
81# define MSVC_DIAGNOSTIC_PUSH_IGNORE(code)
\n-
82#endif
\n+
49#endif
\n+
50
\n+
51#include <boost/serialization/nvp.hpp>
\n+
52#include <boost/serialization/split_member.hpp>
\n+
53#include <boost/static_assert.hpp>
\n+
54
\n+\n+
56
\n+
57namespace gtsam {
\n+
58
\n+
67template<typename KEY, typename VALUE>
\n+
\n+
68class ConcurrentMap : public ConcurrentMapBase<KEY,VALUE> {
\n+
69
\n+
70public:
\n+
71
\n+\n+
73
\n+\n+
76
\n+
78 template<typename INPUTITERATOR>
\n+
79 ConcurrentMap(INPUTITERATOR first, INPUTITERATOR last) : Base(first, last) {}
\n+
80
\n+\n
83
\n-
84#if defined(__clang__)
\n-
85# define DIAGNOSTIC_POP() _Pragma("clang diagnostic pop")
\n-
86#elif defined(__GNUC__)
\n-
87# define DIAGNOSTIC_POP() _Pragma("GCC diagnostic pop")
\n-
88#elif defined(_MSC_VER)
\n-
89# define DIAGNOSTIC_POP() _Pragma("warning ( pop )")
\n-
90#else
\n-
91# define DIAGNOSTIC_POP()
\n-
92#endif
\n-
93
\n-
94namespace gtsam {
\n-
95
\n-
97 std::string GTSAM_EXPORT demangle(const char* name);
\n-
98
\n-
100 typedef std::uint64_t Key;
\n+
85 ConcurrentMap(const Base& x) : Base(x) {}
\n+
86
\n+
88 bool exists(const KEY& e) const { return this->count(e); }
\n+
89
\n+
90#ifndef GTSAM_USE_TBB
\n+
91 // If we're not using TBB and this is actually a FastMap, we need to add these functions and hide
\n+
92 // the original erase functions.
\n+
93 void unsafe_erase(typename Base::iterator position) { ((Base*)this)->erase(position); }
\n+
94 typename Base::size_type unsafe_erase(const KEY& k) { return ((Base*)this)->erase(k); }
\n+
95 void unsafe_erase(typename Base::iterator first, typename Base::iterator last) {
\n+
96 return ((Base*)this)->erase(first, last); }
\n+
97private:
\n+
98 void erase() {}
\n+
99public:
\n+
100#endif
\n
101
\n-
103 typedef std::uint64_t FactorIndex;
\n-
104
\n-
106 typedef ptrdiff_t DenseIndex;
\n-
107
\n-
108 /* ************************************************************************* */
\n-
113 template<typename TEST_TYPE, typename BASIC_TYPE, typename AS_NON_CONST,
\n-
114 typename AS_CONST>
\n-
\n-\n-
116 };
\n-
\n-
117
\n-
119 template<typename BASIC_TYPE, typename AS_NON_CONST, typename AS_CONST>
\n-
\n-
120 struct const_selector<BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST> {
\n-
121 typedef AS_NON_CONST type;
\n-
122 };
\n-
\n-
123
\n-
125 template<typename BASIC_TYPE, typename AS_NON_CONST, typename AS_CONST>
\n-
\n-
126 struct const_selector<const BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST> {
\n-
127 typedef AS_CONST type;
\n-
128 };
\n-
\n-
129
\n-
130 /* ************************************************************************* */
\n-
136 template<typename T, T defaultValue>
\n-
\n-\n-
138 T value;
\n-
139
\n-
141 ValueWithDefault() : value(defaultValue) {}
\n-
142
\n-
144 ValueWithDefault(const T& _value) : value(_value) {}
\n-
145
\n-
147 T& operator*() { return value; }
\n-
148
\n-
150 const T& operator*() const { return value; }
\n-
151
\n-
153 operator T() const { return value; }
\n-
154 };
\n-
\n-
155
\n-
156 /* ************************************************************************* */
\n-
159 template<typename T>
\n-
\n-\n-
161 T element_;
\n-
162 public:
\n-
163 typedef T value_type;
\n-
164 typedef const T* const_iterator;
\n-
165 typedef T* iterator;
\n-
166 ListOfOneContainer(const T& element) : element_(element) {}
\n-
167 const T* begin() const { return &element_; }
\n-
168 const T* end() const { return &element_ + 1; }
\n-
169 T* begin() { return &element_; }
\n-
170 T* end() { return &element_ + 1; }
\n-
171 size_t size() const { return 1; }
\n-
172 };
\n-
\n-
173
\n-
174 BOOST_CONCEPT_ASSERT((boost::RandomAccessRangeConcept<ListOfOneContainer<int> >));
\n-
175
\n-
177 template<typename T>
\n-
\n-\n-
179 return ListOfOneContainer<T>(element);
\n-
180 }
\n-
\n-
181
\n-
182 /* ************************************************************************* */
\n-
183#ifdef __clang__
\n-
184# pragma clang diagnostic push
\n-
185# pragma clang diagnostic ignored "-Wunused-private-field" // Clang complains that previousOpenMPThreads is unused in the #else case below
\n-
186#endif
\n-
187
\n-
\n-\n-
192 {
\n-
193 int previousOpenMPThreads;
\n-
194
\n-
195 public:
\n-
196#if defined GTSAM_USE_TBB && defined GTSAM_USE_EIGEN_MKL_OPENMP
\n-\n-
198 previousOpenMPThreads(omp_get_num_threads())
\n-
199 {
\n-
200 omp_set_num_threads(omp_get_num_procs() / 4);
\n-
201 }
\n-
202
\n-\n-
204 {
\n-
205 omp_set_num_threads(previousOpenMPThreads);
\n-
206 }
\n-
207#else
\n-
208 TbbOpenMPMixedScope() : previousOpenMPThreads(-1) {}
\n-\n-
210#endif
\n-
211 };
\n-
\n-
212
\n-
213#ifdef __clang__
\n-
214# pragma clang diagnostic pop
\n-
215#endif
\n-
216
\n-
217}
\n-
218
\n-
219/* ************************************************************************* */
\n-
222#ifdef NDEBUG
\n-
223#define assert_throw(CONDITION, EXCEPTION) ((void)0)
\n-
224#else
\n-
\n-
225#define assert_throw(CONDITION, EXCEPTION) \\
\n-
226 if (!(CONDITION)) { \\
\n-
227 throw (EXCEPTION); \\
\n-
228 }
\n-
\n-
229#endif
\n-
230
\n-
231#ifdef _MSC_VER
\n-
232
\n-
233// Define some common g++ functions and macros we use that MSVC does not have
\n-
234
\n-
235#if (_MSC_VER < 1800)
\n-
236
\n-
237#include <boost/math/special_functions/fpclassify.hpp>
\n-
238namespace std {
\n-
239 template<typename T> inline int isfinite(T a) {
\n-
240 return (int)boost::math::isfinite(a); }
\n-
241 template<typename T> inline int isnan(T a) {
\n-
242 return (int)boost::math::isnan(a); }
\n-
243 template<typename T> inline int isinf(T a) {
\n-
244 return (int)boost::math::isinf(a); }
\n-
245}
\n-
246
\n-
247#endif
\n-
248
\n-
249#include <boost/math/constants/constants.hpp>
\n-
250#ifndef M_PI
\n-
251#define M_PI (boost::math::constants::pi<double>())
\n-
252#endif
\n-
253#ifndef M_PI_2
\n-
254#define M_PI_2 (boost::math::constants::pi<double>() / 2.0)
\n-
255#endif
\n-
256#ifndef M_PI_4
\n-
257#define M_PI_4 (boost::math::constants::pi<double>() / 4.0)
\n-
258#endif
\n-
259
\n-
260#endif
\n-
261
\n-
262#ifdef min
\n-
263#undef min
\n-
264#endif
\n-
265
\n-
266#ifdef max
\n-
267#undef max
\n-
268#endif
\n-
269
\n-
270#ifdef ERROR
\n-
271#undef ERROR
\n-
272#endif
\n-
273
\n-
274namespace gtsam {
\n-
275
\n-
277 template<typename ...> using void_t = void;
\n-
278
\n-
294 template<typename, typename = void_t<>>
\n-
\n-
295 struct needs_eigen_aligned_allocator : std::false_type {
\n-
296 };
\n-
\n-
297 template<typename T>
\n-\n-
300
\n-
301}
\n-
302
\n-
\n-
308#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW \\
\n-
309 EIGEN_MAKE_ALIGNED_OPERATOR_NEW \\
\n-
310 using _eigen_aligned_allocator_trait = void;
\n-
\n-
311
\n-
\n-
317#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\
\n-
318 EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\
\n-
319 using _eigen_aligned_allocator_trait = void;
\n-
\n+
102private:
\n+\n+
105 template<class Archive>
\n+
106 void save(Archive& ar, const unsigned int /*version*/) const
\n+
107 {
\n+
108 // Copy to an STL container and serialize that
\n+
109 FastVector<std::pair<KEY, VALUE> > map(this->size());
\n+
110 std::copy(this->begin(), this->end(), map.begin());
\n+
111 ar & BOOST_SERIALIZATION_NVP(map);
\n+
112 }
\n+
113 template<class Archive>
\n+
114 void load(Archive& ar, const unsigned int /*version*/)
\n+
115 {
\n+
116 this->clear();
\n+
117 // Load into STL container and then fill our map
\n+\n+
119 ar & BOOST_SERIALIZATION_NVP(map);
\n+
120 this->insert(map.begin(), map.end());
\n+
121 }
\n+
122 BOOST_SERIALIZATION_SPLIT_MEMBER()
\n+
123};
\n+
\n+
124
\n+
125}
\n+
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
Included from all GTSAM files.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
ListOfOneContainer< T > ListOfOne(const T &element)
Factory function for ListOfOneContainer to enable ListOfOne(e) syntax.
Definition types.h:178
\n-
std::string demangle(const char *name)
Pretty print Value type name.
Definition types.cpp:37
\n-
std::uint64_t FactorIndex
Integer nonlinear factor index type.
Definition types.h:103
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
void void_t
Convenience void_t as we assume C++11, it will not conflict the std one in C++17 as this is in gtsam:...
Definition types.h:277
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
Helper class that uses templates to select between two types based on whether TEST_TYPE is const or n...
Definition types.h:115
\n-
Helper struct that encapsulates a value with a default, this is just used as a member object so you d...
Definition types.h:137
\n-
T & operator*()
Operator to access the value.
Definition types.h:147
\n-
const T & operator*() const
Operator to access the value.
Definition types.h:150
\n-
ValueWithDefault()
Default constructor, initialize to default value supplied in template argument.
Definition types.h:141
\n-
ValueWithDefault(const T &_value)
Initialize to the given value.
Definition types.h:144
\n-
A helper class that behaves as a container with one element, and works with boost::range.
Definition types.h:160
\n-
An object whose scope defines a block where TBB and OpenMP parallelism are mixed.
Definition types.h:192
\n-
A SFINAE trait to mark classes that need special alignment.
Definition types.h:295
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition ConcurrentMap.h:68
\n+
ConcurrentMap(INPUTITERATOR first, INPUTITERATOR last)
Constructor from a range, passes through to base class.
Definition ConcurrentMap.h:79
\n+
ConcurrentMap(const ConcurrentMap< KEY, VALUE > &x)
Copy constructor from another ConcurrentMap.
Definition ConcurrentMap.h:82
\n+
bool exists(const KEY &e) const
Handy 'exists' function.
Definition ConcurrentMap.h:88
\n+
ConcurrentMap(const Base &x)
Copy constructor from the base map class.
Definition ConcurrentMap.h:85
\n+
ConcurrentMap()
Default constructor.
Definition ConcurrentMap.h:75
\n+
friend class boost::serialization::access
Serialization function.
Definition ConcurrentMap.h:104
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,343 +1,168 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-types.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+ConcurrentMap.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include \n-23#include \n-24#include \n-25#include // for GTSAM_USE_TBB\n-26\n-27#include \n-28#include \n-29\n-30#include \n-31#include \n-32\n-33#ifdef GTSAM_USE_TBB\n-34#include \n-35#endif\n-36\n-37#if defined(__GNUC__) || defined(__clang__)\n-38#define GTSAM_DEPRECATED __attribute__((deprecated))\n-39#elif defined(_MSC_VER)\n-40#define GTSAM_DEPRECATED __declspec(deprecated)\n-41#else\n-42#define GTSAM_DEPRECATED\n-43#endif\n-44\n-45#ifdef GTSAM_USE_EIGEN_MKL_OPENMP\n-46#include \n-47#endif\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+22\n+23// Change class depending on whether we are using TBB\n+24#ifdef GTSAM_USE_TBB\n+25\n+26// Include TBB header\n+27# include \n+28# undef min // TBB seems to include Windows.h which defines these macros that\n+cause problems\n+29# undef max\n+30# undef ERROR\n+31\n+32#include // std::hash()\n+33\n+34// Use TBB concurrent_unordered_map for ConcurrentMap\n+35template \n+36using _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\bB_\ba_\bs_\be = tbb::concurrent_unordered_map<\n+37 KEY,\n+38 VALUE,\n+39 std::hash\n+40 >;\n+41\n+42#else\n+43\n+44// If we're not using TBB, use a FastMap for ConcurrentMap\n+45#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n+46template \n+47using _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\bB_\ba_\bs_\be = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b>;\n 48\n-49/* Define macros for ignoring compiler warnings.\n-50 * Usage Example:\n-51 * ```\n-52 * CLANG_DIAGNOSTIC_PUSH_IGNORE(\"-Wdeprecated-declarations\")\n-53 * GCC_DIAGNOSTIC_PUSH_IGNORE(\"-Wdeprecated-declarations\")\n-54 * MSVC_DIAGNOSTIC_PUSH_IGNORE(4996)\n-55 * // ... code you want to suppress deprecation warnings for ...\n-56 * DIAGNOSTIC_POP()\n-57 * ```\n-58 */\n-59#define DO_PRAGMA(x) _Pragma (#x)\n-60#ifdef __clang__\n-61# define CLANG_DIAGNOSTIC_PUSH_IGNORE(diag) \\\n-62 _Pragma(\"clang diagnostic push\") \\\n-63 DO_PRAGMA(clang diagnostic ignored diag)\n-64#else\n-65# define CLANG_DIAGNOSTIC_PUSH_IGNORE(diag)\n-66#endif\n-67\n-68#ifdef __GNUC__\n-69# define GCC_DIAGNOSTIC_PUSH_IGNORE(diag) \\\n-70 _Pragma(\"GCC diagnostic push\") \\\n-71 DO_PRAGMA(GCC diagnostic ignored diag)\n-72#else\n-73# define GCC_DIAGNOSTIC_PUSH_IGNORE(diag)\n-74#endif\n-75\n-76#ifdef _MSC_VER\n-77# define MSVC_DIAGNOSTIC_PUSH_IGNORE(code) \\\n-78 _Pragma(\"warning ( push )\") \\\n-79 DO_PRAGMA(warning ( disable : code ))\n-80#else\n-81# define MSVC_DIAGNOSTIC_PUSH_IGNORE(code)\n-82#endif\n+49#endif\n+50\n+51#include \n+52#include \n+53#include \n+54\n+55#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+56\n+57namespace _\bg_\bt_\bs_\ba_\bm {\n+58\n+67template\n+_\b6_\b8class _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp : public _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\bB_\ba_\bs_\be {\n+69\n+70public:\n+71\n+72 typedef _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\bB_\ba_\bs_\be_\b<_\bK_\bE_\bY_\b,_\bV_\bA_\bL_\bU_\bE_\b> Base;\n+73\n+_\b7_\b5 _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp() {}\n+76\n+78 template\n+_\b7_\b9 _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp(INPUTITERATOR first, INPUTITERATOR last) : Base(first, last)\n+{}\n+80\n+_\b8_\b2 _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp(const _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b,_\bV_\bA_\bL_\bU_\bE_\b>& x) : Base(x) {}\n 83\n-84#if defined(__clang__)\n-85# define DIAGNOSTIC_POP() _Pragma(\"clang diagnostic pop\")\n-86#elif defined(__GNUC__)\n-87# define DIAGNOSTIC_POP() _Pragma(\"GCC diagnostic pop\")\n-88#elif defined(_MSC_VER)\n-89# define DIAGNOSTIC_POP() _Pragma(\"warning ( pop )\")\n-90#else\n-91# define DIAGNOSTIC_POP()\n-92#endif\n-93\n-94namespace _\bg_\bt_\bs_\ba_\bm {\n-95\n-97 std::string GTSAM_EXPORT _\bd_\be_\bm_\ba_\bn_\bg_\bl_\be(const char* name);\n-98\n-_\b1_\b0_\b0 typedef std::uint64_t _\bK_\be_\by;\n+_\b8_\b5 _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp(const Base& x) : Base(x) {}\n+86\n+_\b8_\b8 bool _\be_\bx_\bi_\bs_\bt_\bs(const KEY& e) const { return this->count(e); }\n+89\n+90#ifndef GTSAM_USE_TBB\n+91 // If we're not using TBB and this is actually a FastMap, we need to add\n+these functions and hide\n+92 // the original erase functions.\n+93 void unsafe_erase(typename Base::iterator position) { ((Base*)this)->erase\n+(position); }\n+94 typename Base::size_type unsafe_erase(const KEY& k) { return ((Base*)this)-\n+>erase(k); }\n+95 void unsafe_erase(typename Base::iterator first, typename Base::iterator\n+last) {\n+96 return ((Base*)this)->erase(first, last); }\n+97private:\n+98 void erase() {}\n+99public:\n+100#endif\n 101\n-_\b1_\b0_\b3 typedef std::uint64_t _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx;\n-104\n-_\b1_\b0_\b6 typedef ptrdiff_t _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx;\n-107\n-108 /\n-* ************************************************************************* */\n-113 template\n-_\b1_\b1_\b5 struct _\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br {\n-116 };\n-117\n-119 template\n-_\b1_\b2_\b0 struct _\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br {\n-121 typedef AS_NON_CONST type;\n-122 };\n-123\n-125 template\n-_\b1_\b2_\b6 struct _\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br\n-{\n-127 typedef AS_CONST type;\n-128 };\n-129\n-130 /\n-* ************************************************************************* */\n-136 template\n-_\b1_\b3_\b7 struct _\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt {\n-138 T value;\n-139\n-_\b1_\b4_\b1 _\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt() : value(defaultValue) {}\n-142\n-_\b1_\b4_\b4 _\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt(const T& _value) : value(_value) {}\n-145\n-_\b1_\b4_\b7 T& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() { return value; }\n-148\n-_\b1_\b5_\b0 const T& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() const { return value; }\n-151\n-_\b1_\b5_\b3 operator T() const { return value; }\n-154 };\n-155\n-156 /\n-* ************************************************************************* */\n-159 template\n-_\b1_\b6_\b0 class _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br {\n-161 T element_;\n-162 public:\n-163 typedef T value_type;\n-164 typedef const T* const_iterator;\n-165 typedef T* iterator;\n-166 _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br(const T& element) : element_(element) {}\n-167 const T* begin() const { return &element_; }\n-168 const T* end() const { return &element_ + 1; }\n-169 T* begin() { return &element_; }\n-170 T* end() { return &element_ + 1; }\n-171 size_t size() const { return 1; }\n-172 };\n-173\n-174 BOOST_CONCEPT_ASSERT((boost::\n-RandomAccessRangeConcept<_\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b<_\bi_\bn_\bt_\b> >));\n-175\n-177 template\n-_\b1_\b7_\b8 _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b<_\bT_\b> _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be(const T& element) {\n-179 return _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b<_\bT_\b>(element);\n-180 }\n-181\n-182 /\n-* ************************************************************************* */\n-183#ifdef __clang__\n-184# pragma clang diagnostic push\n-185# pragma clang diagnostic ignored \"-Wunused-private-field\" // Clang\n-complains that previousOpenMPThreads is unused in the #else case below\n-186#endif\n-187\n-_\b1_\b9_\b1 class _\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be\n-192 {\n-193 int previousOpenMPThreads;\n-194\n-195 public:\n-196#if defined GTSAM_USE_TBB && defined GTSAM_USE_EIGEN_MKL_OPENMP\n-197 _\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be() :\n-198 previousOpenMPThreads(omp_get_num_threads())\n-199 {\n-200 omp_set_num_threads(omp_get_num_procs() / 4);\n-201 }\n-202\n-203 _\b~_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be()\n-204 {\n-205 omp_set_num_threads(previousOpenMPThreads);\n-206 }\n-207#else\n-208 _\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be() : previousOpenMPThreads(-1) {}\n-209 _\b~_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be() {}\n-210#endif\n-211 };\n-212\n-213#ifdef __clang__\n-214# pragma clang diagnostic pop\n-215#endif\n-216\n-217}\n-218\n-219/* *************************************************************************\n-*/\n-222#ifdef NDEBUG\n-223#define assert_throw(CONDITION, EXCEPTION) ((void)0)\n-224#else\n-_\b2_\b2_\b5#define assert_throw(CONDITION, EXCEPTION) \\\n-226 if (!(CONDITION)) { \\\n-227 throw (EXCEPTION); \\\n-228 }\n-229#endif\n-230\n-231#ifdef _MSC_VER\n-232\n-233// Define some common g++ functions and macros we use that MSVC does not\n-have\n-234\n-235#if (_MSC_VER < 1800)\n-236\n-237#include \n-238namespace std {\n-239 template inline int isfinite(T a) {\n-240 return (int)boost::math::isfinite(a); }\n-241 template inline int isnan(T a) {\n-242 return (int)boost::math::isnan(a); }\n-243 template inline int isinf(T a) {\n-244 return (int)boost::math::isinf(a); }\n-245}\n-246\n-247#endif\n-248\n-249#include \n-250#ifndef M_PI\n-251#define M_PI (boost::math::constants::pi())\n-252#endif\n-253#ifndef M_PI_2\n-254#define M_PI_2 (boost::math::constants::pi() / 2.0)\n-255#endif\n-256#ifndef M_PI_4\n-257#define M_PI_4 (boost::math::constants::pi() / 4.0)\n-258#endif\n-259\n-260#endif\n-261\n-262#ifdef min\n-263#undef min\n-264#endif\n-265\n-266#ifdef max\n-267#undef max\n-268#endif\n-269\n-270#ifdef ERROR\n-271#undef ERROR\n-272#endif\n-273\n-274namespace _\bg_\bt_\bs_\ba_\bm {\n-275\n-_\b2_\b7_\b7 template using _\bv_\bo_\bi_\bd_\b__\bt = void;\n-278\n-294 template>\n-_\b2_\b9_\b5 struct _\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br : std::false_type {\n-296 };\n-297 template\n-_\b2_\b9_\b8 struct _\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b,_\b _\bv_\bo_\bi_\bd_\b__\bt_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\b:_\b:\n-_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b__\bt_\br_\ba_\bi_\bt_\b>> : std::true_type {\n-299 };\n-300\n-301}\n-302\n-_\b3_\b0_\b8#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW \\\n-309 EIGEN_MAKE_ALIGNED_OPERATOR_NEW \\\n-310 using _eigen_aligned_allocator_trait = void;\n-311\n-_\b3_\b1_\b7#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\\n-318 EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\\n-319 using _eigen_aligned_allocator_trait = void;\n+102private:\n+_\b1_\b0_\b4 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+105 template\n+106 void save(Archive& ar, const unsigned int /*version*/) const\n+107 {\n+108 // Copy to an STL container and serialize that\n+109 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bp_\ba_\bi_\br_\b<_\bK_\bE_\bY_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b> > map(this->size());\n+110 std::copy(this->begin(), this->end(), map.begin());\n+111 ar & BOOST_SERIALIZATION_NVP(map);\n+112 }\n+113 template\n+114 void load(Archive& ar, const unsigned int /*version*/)\n+115 {\n+116 this->clear();\n+117 // Load into STL container and then fill our map\n+118 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bp_\ba_\bi_\br_\b<_\bK_\bE_\bY_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b> > map;\n+119 ar & BOOST_SERIALIZATION_NVP(map);\n+120 this->insert(map.begin(), map.end());\n+121 }\n+122 BOOST_SERIALIZATION_SPLIT_MEMBER()\n+123};\n+124\n+125}\n+_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n+A thin wrapper around std::map that uses boost's fast_pool_allocator.\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be\n-ListOfOneContainer< T > ListOfOne(const T &element)\n-Factory function for ListOfOneContainer to enable ListOfOne(e) syntax.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:178\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bm_\ba_\bn_\bg_\bl_\be\n-std::string demangle(const char *name)\n-Pretty print Value type name.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.cpp:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx\n-std::uint64_t FactorIndex\n-Integer nonlinear factor index type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bv_\bo_\bi_\bd_\b__\bt\n-void void_t\n-Convenience void_t as we assume C++11, it will not conflict the std one in\n-C++17 as this is in gtsam:...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:277\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br\n-Helper class that uses templates to select between two types based on whether\n-TEST_TYPE is const or n...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt\n-Helper struct that encapsulates a value with a default, this is just used as a\n-member object so you d...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-T & operator*()\n-Operator to access the value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:147\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-const T & operator*() const\n-Operator to access the value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt\n-ValueWithDefault()\n-Default constructor, initialize to default value supplied in template argument.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt\n-ValueWithDefault(const T &_value)\n-Initialize to the given value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:144\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br\n-A helper class that behaves as a container with one element, and works with\n-boost::range.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be\n-An object whose scope defines a block where TBB and OpenMP parallelism are\n-mixed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-A SFINAE trait to mark classes that need special alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:295\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n+ConcurrentMap(INPUTITERATOR first, INPUTITERATOR last)\n+Constructor from a range, passes through to base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n+ConcurrentMap(const ConcurrentMap< KEY, VALUE > &x)\n+Copy constructor from another ConcurrentMap.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n+bool exists(const KEY &e) const\n+Handy 'exists' function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n+ConcurrentMap(const Base &x)\n+Copy constructor from the base map class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n+ConcurrentMap()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bt_\by_\bp_\be_\bs_\b._\bh\n+ * C\bCo\bon\bnc\bcu\bur\brr\bre\ben\bnt\btM\bMa\bap\bp.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00050.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00050.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/cholesky.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Vector.cpp File Reference\n \n \n \n \n \n \n \n@@ -96,46 +96,110 @@\n \n \n \n
\n \n-
cholesky.cpp File Reference
\n+
Vector.cpp File Reference
\n
\n
\n \n-

Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky. \n+

typedef and functions to augment Eigen's Vectors \n More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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 Functions

pair< size_t, bool > gtsam::choleskyCareful (Matrix &ATA, int order=-1)
 \"Careful\" Cholesky computes the positive square-root of a positive symmetric semi-definite matrix (i.e.
 
bool gtsam::choleskyPartial (Matrix &ABC, size_t nFrontal, size_t topleft=0)
 Partial Cholesky computes a factor [R S such that [R' 0 [R S = [A B 0 L] S' I] 0 L] B' C].
 
bool gtsam::fpEqual (double a, double b, double tol, bool check_relative_also=true)
 Ensure we are not including a different version of Eigen in user code than while compiling gtsam, since it can lead to hard-to-understand runtime crashes.
 
\n+void gtsam::print (const Vector &v, const std::string &s, std::ostream &stream)
 print without optional string, must specify cout yourself
 
\n+void gtsam::print (const Vector &v, const std::string &s="")
 print with optional string to cout
 
\n+void gtsam::save (const Vector &A, const std::string &s, const std::string &filename)
 save a vector to file, which can be loaded by matlab
 
\n+bool gtsam::operator== (const Vector &vec1, const Vector &vec2)
 operator==()
 
\n+bool gtsam::greaterThanOrEqual (const Vector &v1, const Vector &v2)
 Greater than or equal to operation returns true if all elements in v1 are greater than corresponding elements in v2.
 
\n+bool gtsam::equal_with_abs_tol (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 VecA == VecB up to tolerance.
 
\n+bool gtsam::equal_with_abs_tol (const SubVector &vec1, const SubVector &vec2, double tol)
 
bool gtsam::assert_equal (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 Same, prints if error.
 
bool gtsam::assert_inequal (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 Not the same, prints if error.
 
bool gtsam::assert_equal (const SubVector &vec1, const SubVector &vec2, double tol=1e-9)
 Same, prints if error.
 
\n+bool gtsam::assert_equal (const ConstSubVector &expected, const ConstSubVector &actual, double tol)
 
bool gtsam::linear_dependent (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 check whether two vectors are linearly dependent
 
Vector gtsam::ediv_ (const Vector &a, const Vector &b)
 elementwise division, but 0/0 = 0, not inf
 
\n+double gtsam::houseInPlace (Vector &x)
 beta = house(x) computes the HouseHolder vector in place
 
pair< double, Vector > gtsam::house (const Vector &x)
 house(x,j) computes HouseHolder vector v and scaling factor beta from x, such that the corresponding Householder reflection zeroes out all but x.
 
\n+double gtsam::weightedPseudoinverse (const Vector &a, const Vector &weights, Vector &pseudo)
 
pair< Vector, double > gtsam::weightedPseudoinverse (const Vector &v, const Vector &weights)
 Weighted Householder solution vector, a.k.a., the pseudoinverse of the column NOTE: if any sigmas are zero (indicating a constraint) the pseudoinverse will be a selection vector, and the variance will be zero.
 
\n+Vector gtsam::concatVectors (const std::list< Vector > &vs)
 concatenate Vectors
 
\n+Vector gtsam::concatVectors (size_t nrVectors,...)
 concatenate Vectors
 
\n

Detailed Description

\n-

Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.

\n-
Author
Richard Roberts
\n+

typedef and functions to augment Eigen's Vectors

\n+
Author
Kai Ni
\n
\n-Frank Dellaert
\n-
Date
Nov 5, 2010
\n+Frank Dellaert \n+
\n+Varun Agrawal
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,105 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-cholesky.cpp File Reference\n-Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n-Cholesky. _\bM_\bo_\br_\be_\b._\b._\b.\n+Vector.cpp File Reference\n+typedef and functions to augment Eigen's Vectors _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-pair< size_t, bool >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bC_\ba_\br_\be_\bf_\bu_\bl (Matrix &ATA, int order=-1)\n-\u00a0 \"Careful\" Cholesky computes the positive square-root of a\n- positive symmetric semi-definite matrix (i.e.\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl (Matrix &ABC, size_t nFrontal,\n- size_t topleft=0)\n-\u00a0 Partial Cholesky computes a factor [R S such that [R' 0\n- [R S = [A B 0 L] S' I] 0 L] B' C].\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bp_\bE_\bq_\bu_\ba_\bl (double a, double b, double tol, bool\n+ check_relative_also=true)\n+ Ensure we are not including a different version of\n+\u00a0 Eigen in user code than while compiling gtsam, since it\n+ can lead to hard-to-understand runtime crashes.\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Vector &v, const std::string &s,\n+ std::ostream &stream)\n+\u00a0 print without optional string, must specify cout\n+ yourself\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Vector &v, const std::string &s=\"\")\n+\u00a0 print with optional string to cout\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsa\bav\bve\be (const Vector &A, const std::string &s,\n+ const std::string &filename)\n+\u00a0 save a vector to file, which can be loaded by matlab\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br=\b==\b= (const Vector &vec1, const Vector\n+ &vec2)\n+\u00a0 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=_\b(_\b)\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgr\bre\bea\bat\bte\ber\brT\bTh\bha\ban\bnO\bOr\brE\bEq\bqu\bua\bal\bl (const Vector &v1, const\n+ Vector &v2)\n+ Greater than or equal to operation returns true if all\n+\u00a0 elements in v1 are greater than corresponding elements\n+ in v2.\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl_\b_w\bwi\bit\bth\bh_\b_a\bab\bbs\bs_\b_t\bto\bol\bl (const Vector &vec1, const\n+ Vector &vec2, double tol=1e-9)\n+\u00a0 VecA == VecB up to tolerance.\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl_\b_w\bwi\bit\bth\bh_\b_a\bab\bbs\bs_\b_t\bto\bol\bl (const SubVector &vec1, const\n+ SubVector &vec2, double tol)\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl (const Vector &vec1, const Vector\n+ &vec2, double tol=1e-9)\n+\u00a0 Same, prints if error.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl (const Vector &vec1, const Vector\n+ &vec2, double tol=1e-9)\n+\u00a0 Not the same, prints if error.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl (const SubVector &vec1, const\n+ SubVector &vec2, double tol=1e-9)\n+\u00a0 Same, prints if error.\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const ConstSubVector &expected,\n+ const ConstSubVector &actual, double tol)\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt (const Vector &vec1, const\n+ Vector &vec2, double tol=1e-9)\n+\u00a0 check whether two vectors are linearly dependent\n+\u00a0\n+ Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bd_\bi_\bv_\b_ (const Vector &a, const Vector &b)\n+\u00a0 elementwise division, but 0/0 = 0, not inf\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:h\bho\bou\bus\bse\beI\bIn\bnP\bPl\bla\bac\bce\be (Vector &x)\n+\u00a0 beta = house(x) computes the HouseHolder vector in\n+ place\n+\u00a0\n+pair< double, Vector >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be (const Vector &x)\n+ house(x,j) computes HouseHolder vector v and scaling\n+\u00a0 factor beta from x, such that the corresponding\n+ Householder reflection zeroes out all but x.\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:w\bwe\bei\big\bgh\bht\bte\bed\bdP\bPs\bse\beu\bud\bdo\boi\bin\bnv\bve\ber\brs\bse\be (const Vector &a, const\n+ Vector &weights, Vector &pseudo)\n+\u00a0\n+pair< Vector, double >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\bP_\bs_\be_\bu_\bd_\bo_\bi_\bn_\bv_\be_\br_\bs_\be (const Vector &v, const\n+ Vector &weights)\n+ Weighted Householder solution vector, a.k.a., the\n+\u00a0 pseudoinverse of the column NOTE: if any sigmas are\n+ zero (indicating a constraint) the pseudoinverse will\n+ be a selection vector, and the variance will be zero.\n+\u00a0\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnc\bca\bat\btV\bVe\bec\bct\bto\bor\brs\bs (const std::list< Vector > &vs)\n+\u00a0 concatenate Vectors\n+\u00a0\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnc\bca\bat\btV\bVe\bec\bct\bto\bor\brs\bs (size_t nrVectors,...)\n+\u00a0 concatenate Vectors\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n-Cholesky.\n+typedef and functions to augment Eigen's Vectors\n Author\n- Richard Roberts\n+ Kai Ni\n Frank Dellaert\n- Date\n- Nov 5, 2010\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b._\bc_\bp_\bp\n+ * _\bV_\be_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00050.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00050.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,19 @@\n var a00050 = [\n- [\"choleskyCareful\", \"a00050.html#a747683f736c50bca16b3aab0e95b1b76\", null],\n- [\"choleskyPartial\", \"a00050.html#abe82fa6aceccfa2360cf314ab44f39ad\", null]\n+ [\"assert_equal\", \"a00050.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\", null],\n+ [\"assert_equal\", \"a00050.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\", null],\n+ [\"assert_inequal\", \"a00050.html#a2ca3db47b15350977c1f03c5560ab332\", null],\n+ [\"concatVectors\", \"a00050.html#ae1c88acfa9575bcea3f2e738cb637a85\", null],\n+ [\"concatVectors\", \"a00050.html#a09610ec69a8b3f3a00399bb378eda9cf\", null],\n+ [\"ediv_\", \"a00050.html#a14844c96706dc362917e0d5e76d65fbe\", null],\n+ [\"equal_with_abs_tol\", \"a00050.html#a8bdced1844ffd6a53af0396d82eaa6da\", null],\n+ [\"fpEqual\", \"a00050.html#ae19c359190a379cba44bf818a2293f7c\", null],\n+ [\"greaterThanOrEqual\", \"a00050.html#a368ee40bd9c0124d572d2e49bcb077bf\", null],\n+ [\"house\", \"a00050.html#afb77eefc25dea0fb3e0fcc8f246b617a\", null],\n+ [\"houseInPlace\", \"a00050.html#ac9c0c05b0198ec0fb6e4115edb755910\", null],\n+ [\"linear_dependent\", \"a00050.html#a2a0cfd7908b06491df49b6a9c9186775\", null],\n+ [\"operator==\", \"a00050.html#a64988014ab746343803620dc42513646\", null],\n+ [\"print\", \"a00050.html#a760cc36e9009b23cf564c436294b3504\", null],\n+ [\"print\", \"a00050.html#a5e5d8018a0f44a6a299406aeda27d44b\", null],\n+ [\"save\", \"a00050.html#a09f2bbdb9f9d633542362dbe8d79f9ab\", null],\n+ [\"weightedPseudoinverse\", \"a00050.html#aca1c56d11a05464a7a5458dc32ccc777\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00053.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00053.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/TestableAssertions.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/debug.h File Reference\n \n \n \n \n \n \n \n@@ -95,104 +95,60 @@\n \n \n \n \n
\n \n-
TestableAssertions.h File Reference
\n+
debug.h File Reference
\n
\n
\n \n-

Provides additional testing facilities for common data structures. \n+

Global debugging flags. \n More...

\n \n

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+

\n+Macros

\n+#define ISDEBUG(S)   (gtsam::guardedIsDebug(S))
 
\n+#define SETDEBUG(S, V)   ((void)(gtsam::guardedSetDebug(S,V)))
 
\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 Functions

\n-bool gtsam::assert_equal (const Key &expected, const Key &actual, double tol=0.0)
 Equals testing for basic types.
 
template<class V >
bool gtsam::assert_equal (const boost::optional< V > &expected, const boost::optional< V > &actual, double tol=1e-9)
 Comparisons for boost.optional objects that checks whether objects exist before comparing their values.
 
\n-template<class V >
bool gtsam::assert_equal (const V &expected, const boost::optional< V > &actual, double tol=1e-9)
 
\n-template<class V >
bool gtsam::assert_equal (const V &expected, const boost::optional< const V & > &actual, double tol=1e-9)
 
\n-template<class V1 , class V2 >
bool gtsam::assert_container_equal (const std::map< V1, V2 > &expected, const std::map< V1, V2 > &actual, double tol=1e-9)
 Function for comparing maps of testable->testable TODO: replace with more generalized version.
 
\n-template<class V2 >
bool gtsam::assert_container_equal (const std::map< size_t, V2 > &expected, const std::map< size_t, V2 > &actual, double tol=1e-9)
 Function for comparing maps of size_t->testable.
 
\n-template<class V1 , class V2 >
bool gtsam::assert_container_equal (const std::vector< std::pair< V1, V2 > > &expected, const std::vector< std::pair< V1, V2 > > &actual, double tol=1e-9)
 Function for comparing vector of pairs (testable, testable)
 
\n-template<class V >
bool gtsam::assert_container_equal (const V &expected, const V &actual, double tol=1e-9)
 General function for comparing containers of testable objects.
 
\n-template<class V2 >
bool gtsam::assert_container_equality (const std::map< size_t, V2 > &expected, const std::map< size_t, V2 > &actual)
 Function for comparing maps of size_t->testable Types are assumed to have operator ==.
 
\n-template<class V >
bool gtsam::assert_container_equality (const V &expected, const V &actual)
 General function for comparing containers of objects with operator==.
 
\n-bool gtsam::assert_equal (const std::string &expected, const std::string &actual)
 Compare strings for unit tests.
 
\n-template<class V >
bool gtsam::assert_inequal (const V &expected, const V &actual, double tol=1e-9)
 Allow for testing inequality.
 
\n-template<class V >
bool gtsam::assert_stdout_equal (const std::string &expected, const V &actual)
 Capture std out via cout stream and compare against string.
 
template<class V >
bool gtsam::assert_print_equal (const std::string &expected, const V &actual, const std::string &s="")
 Capture print function output and compare against string.
 
\n+bool gtsam::guardedIsDebug (const std::string &s)
 
\n+void gtsam::guardedSetDebug (const std::string &s, const bool v)
 
\n+bool gtsam::isDebugVersion ()
 
\n

Detailed Description

\n-

Provides additional testing facilities for common data structures.

\n-
Author
Alex Cunningham
\n+

Global debugging flags.

\n+
Author
Richard Roberts
\n+
Date
Feb 1, 2011
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,90 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-TestableAssertions.h File Reference\n-Provides additional testing facilities for common data structures. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+debug.h File Reference\n+Global debugging flags. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 I\bIS\bSD\bDE\bEB\bBU\bUG\bG(S)\u00a0\u00a0\u00a0(gtsam::guardedIsDebug(S))\n+\u00a0\n+#define\u00a0 S\bSE\bET\bTD\bDE\bEB\bBU\bUG\bG(S, V)\u00a0\u00a0\u00a0((void)(gtsam::guardedSetDebug(S,V)))\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const _\bK_\be_\by &expected, const _\bK_\be_\by &actual, double\n- tol=0.0)\n-\u00a0 Equals testing for basic types.\n-\u00a0\n-template\n-bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl (const boost::optional< V > &expected, const boost::\n- optional< V > &actual, double tol=1e-9)\n-\u00a0 Comparisons for boost.optional objects that checks whether objects exist\n- before comparing their values.\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const V &expected, const boost::optional< V >\n- &actual, double tol=1e-9)\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const V &expected, const boost::optional< const V &\n- > &actual, double tol=1e-9)\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bl (const std::map< V1, V2 > &expected, const\n- std::map< V1, V2 > &actual, double tol=1e-9)\n-\u00a0 Function for comparing maps of testable->testable TODO: replace with more\n- generalized version.\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bl (const std::map< size_t, V2 > &expected,\n- const std::map< size_t, V2 > &actual, double tol=1e-9)\n-\u00a0 Function for comparing maps of size_t->testable.\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bl (const std::vector< std::pair< V1, V2 > >\n- &expected, const std::vector< std::pair< V1, V2 > > &actual, double\n- tol=1e-9)\n-\u00a0 Function for comparing vector of pairs (testable, testable)\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bl (const V &expected, const V &actual, double\n- tol=1e-9)\n-\u00a0 General function for comparing containers of testable objects.\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bli\bit\bty\by (const std::map< size_t, V2 > &expected,\n- const std::map< size_t, V2 > &actual)\n-\u00a0 Function for comparing maps of size_t->testable Types are assumed to have\n- operator ==.\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bli\bit\bty\by (const V &expected, const V &actual)\n-\u00a0 General function for comparing containers of objects with operator==.\n-\u00a0\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const std::string &expected, const std::string\n- &actual)\n-\u00a0 Compare strings for unit tests.\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_i\bin\bne\beq\bqu\bua\bal\bl (const V &expected, const V &actual, double tol=1e-\n- 9)\n-\u00a0 Allow for testing inequality.\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_s\bst\btd\bdo\bou\but\bt_\b_e\beq\bqu\bua\bal\bl (const std::string &expected, const V &actual)\n-\u00a0 Capture std out via cout stream and compare against string.\n-\u00a0\n-template\n-bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bp_\br_\bi_\bn_\bt_\b__\be_\bq_\bu_\ba_\bl (const std::string &expected, const V &actual,\n- const std::string &s=\"\")\n-\u00a0 Capture print function output and compare against string.\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgu\bua\bar\brd\bde\bed\bdI\bIs\bsD\bDe\beb\bbu\bug\bg (const std::string &s)\n+\u00a0\n+void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgu\bua\bar\brd\bde\bed\bdS\bSe\bet\btD\bDe\beb\bbu\bug\bg (const std::string &s, const bool v)\n+\u00a0\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bis\bsD\bDe\beb\bbu\bug\bgV\bVe\ber\brs\bsi\bio\bon\bn ()\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Provides additional testing facilities for common data structures.\n+Global debugging flags.\n Author\n- Alex Cunningham\n+ Richard Roberts\n+ Date\n+ Feb 1, 2011\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bA_\bs_\bs_\be_\br_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+ * _\bd_\be_\bb_\bu_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00053_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00053_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/TestableAssertions.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/debug.h Source File\n \n \n \n \n \n \n \n@@ -98,399 +98,86 @@\n
No Matches
\n \n \n \n \n \n
\n-
TestableAssertions.h
\n+
debug.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Testable.h>
\n-\n+
19#include <gtsam/base/FastMap.h>
\n+\n+
21#include <string>
\n
22
\n-
23#include <boost/optional.hpp>
\n-
24#include <map>
\n-
25#include <iostream>
\n-
26#include <sstream>
\n-
27#include <vector>
\n-
28
\n-
29namespace gtsam {
\n-
30
\n-
\n-
34inline bool assert_equal(const Key& expected, const Key& actual, double tol = 0.0) {
\n-
35 if(expected != actual) {
\n-
36 std::cout << "Not equal:\\nexpected: " << expected << "\\nactual: " << actual << std::endl;
\n-
37 return false;
\n-
38 }
\n-
39 return true;
\n-
40}
\n-
\n-
41
\n-
49template<class V>
\n-
\n-
50bool assert_equal(const boost::optional<V>& expected,
\n-
51 const boost::optional<V>& actual, double tol = 1e-9) {
\n-
52 if (!expected && actual) {
\n-
53 std::cout << "expected is boost::none, while actual is not" << std::endl;
\n-
54 return false;
\n-
55 }
\n-
56 if (expected && !actual) {
\n-
57 std::cout << "actual is boost::none, while expected is not" << std::endl;
\n-
58 return false;
\n-
59 }
\n-
60 if (!expected && !actual)
\n-
61 return true;
\n-
62 return assert_equal(*expected, *actual, tol);
\n-
63}
\n-
\n+
23
\n+
24// This file defines granular debugging flags that may be switched on and off
\n+
25// at run time. Typical usage is 'if(ISDEBUG("myFunction"))' to check if the
\n+
26// 'myFunction' flag is enabled, and SETDEBUG("myFunction", true) to enable
\n+
27// this flag, or SETDEBUG("myFunction", false) to disable it.
\n+
28//
\n+
29// Debug flags are created automatically as they are accessed, so they can be
\n+
30// used immediately without explicitly creating them. Each flag defaults to
\n+
31// 'false', i.e. disabled.
\n+
32//
\n+
33// For these macro to have any effect, granular debugging must be enabled by
\n+
34// defining GTSAM_ENABLE_DEBUG. If NDEBUG is not defined, then
\n+
35// GTSAM_ENABLE_DEBUG will be automatically defined and thus granular
\n+
36// debugging enabled.
\n+
37
\n+
38#ifndef NDEBUG
\n+
39#ifndef GTSAM_ENABLE_DEBUG
\n+
40#define GTSAM_ENABLE_DEBUG
\n+
41#endif
\n+
42#endif
\n+
43
\n+
44namespace gtsam {
\n+
45 GTSAM_EXTERN_EXPORT FastMap<std::string, ValueWithDefault<bool,false> > debugFlags;
\n+
46
\n+
47 // Non-guarded use led to crashes, and solved in commit cd35db2
\n+
48 bool GTSAM_EXPORT guardedIsDebug(const std::string& s);
\n+
49 void GTSAM_EXPORT guardedSetDebug(const std::string& s, const bool v);
\n+
50
\n+
51 // function to check if compiled version has debug information
\n+
52 bool GTSAM_EXPORT isDebugVersion();
\n+
53}
\n+
54
\n+
55#undef ISDEBUG
\n+
56#undef SETDEBUG
\n+
57
\n+
58#ifdef GTSAM_ENABLE_DEBUG
\n+
59
\n+
60#define ISDEBUG(S) (gtsam::guardedIsDebug(S))
\n+
61#define SETDEBUG(S,V) ((void)(gtsam::guardedSetDebug(S,V)))
\n+
62
\n+
63#else
\n
64
\n-
65template<class V>
\n-
66bool assert_equal(const V& expected, const boost::optional<V>& actual, double tol = 1e-9) {
\n-
67 if (!actual) {
\n-
68 std::cout << "actual is boost::none" << std::endl;
\n-
69 return false;
\n-
70 }
\n-
71 return assert_equal(expected, *actual, tol);
\n-
72}
\n-
73
\n-
74template<class V>
\n-
75bool assert_equal(const V& expected, const boost::optional<const V&>& actual, double tol = 1e-9) {
\n-
76 if (!actual) {
\n-
77 std::cout << "actual is boost::none" << std::endl;
\n-
78 return false;
\n-
79 }
\n-
80 return assert_equal(expected, *actual, tol);
\n-
81}
\n-
82
\n-
83#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
88template<class V>
\n-
89bool GTSAM_DEPRECATED assert_equal(const std::vector<V>& expected, const std::vector<V>& actual, double tol = 1e-9) {
\n-
90 bool match = true;
\n-
91 if (expected.size() != actual.size())
\n-
92 match = false;
\n-
93 if(match) {
\n-
94 size_t i = 0;
\n-
95 for(const V& a: expected) {
\n-
96 if (!assert_equal(a, actual[i++], tol)) {
\n-
97 match = false;
\n-
98 break;
\n-
99 }
\n-
100 }
\n-
101 }
\n-
102 if(!match) {
\n-
103 std::cout << "expected: " << std::endl;
\n-
104 for(const V& a: expected) { std::cout << a << " "; }
\n-
105 std::cout << "\\nactual: " << std::endl;
\n-
106 for(const V& a: actual) { std::cout << a << " "; }
\n-
107 std::cout << std::endl;
\n-
108 return false;
\n-
109 }
\n-
110 return true;
\n-
111}
\n-
112#endif
\n-
113
\n-
118template<class V1, class V2>
\n-
\n-
119bool assert_container_equal(const std::map<V1,V2>& expected, const std::map<V1,V2>& actual, double tol = 1e-9) {
\n-
120 typedef typename std::map<V1,V2> Map;
\n-
121 bool match = true;
\n-
122 if (expected.size() != actual.size())
\n-
123 match = false;
\n-
124 typename Map::const_iterator
\n-
125 itExp = expected.begin(),
\n-
126 itAct = actual.begin();
\n-
127 if(match) {
\n-
128 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n-
129 if (!assert_equal(itExp->first, itAct->first, tol) ||
\n-
130 !assert_equal(itExp->second, itAct->second, tol)) {
\n-
131 match = false;
\n-
132 break;
\n-
133 }
\n-
134 }
\n-
135 }
\n-
136 if(!match) {
\n-
137 std::cout << "expected: " << std::endl;
\n-
138 for(const typename Map::value_type& a: expected) {
\n-
139 a.first.print("key");
\n-
140 a.second.print(" value");
\n-
141 }
\n-
142 std::cout << "\\nactual: " << std::endl;
\n-
143 for(const typename Map::value_type& a: actual) {
\n-
144 a.first.print("key");
\n-
145 a.second.print(" value");
\n-
146 }
\n-
147 std::cout << std::endl;
\n-
148 return false;
\n-
149 }
\n-
150 return true;
\n-
151}
\n-
\n-
152
\n-
156template<class V2>
\n-
\n-
157bool assert_container_equal(const std::map<size_t,V2>& expected, const std::map<size_t,V2>& actual, double tol = 1e-9) {
\n-
158 typedef typename std::map<size_t,V2> Map;
\n-
159 bool match = true;
\n-
160 if (expected.size() != actual.size())
\n-
161 match = false;
\n-
162 typename Map::const_iterator
\n-
163 itExp = expected.begin(),
\n-
164 itAct = actual.begin();
\n-
165 if(match) {
\n-
166 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n-
167 if (itExp->first != itAct->first ||
\n-
168 !assert_equal(itExp->second, itAct->second, tol)) {
\n-
169 match = false;
\n-
170 break;
\n-
171 }
\n-
172 }
\n-
173 }
\n-
174 if(!match) {
\n-
175 std::cout << "expected: " << std::endl;
\n-
176 for(const typename Map::value_type& a: expected) {
\n-
177 std::cout << "Key: " << a.first << std::endl;
\n-
178 a.second.print(" value");
\n-
179 }
\n-
180 std::cout << "\\nactual: " << std::endl;
\n-
181 for(const typename Map::value_type& a: actual) {
\n-
182 std::cout << "Key: " << a.first << std::endl;
\n-
183 a.second.print(" value");
\n-
184 }
\n-
185 std::cout << std::endl;
\n-
186 return false;
\n-
187 }
\n-
188 return true;
\n-
189}
\n-
\n-
190
\n-
194template<class V1, class V2>
\n-
\n-
195bool assert_container_equal(const std::vector<std::pair<V1,V2> >& expected,
\n-
196 const std::vector<std::pair<V1,V2> >& actual, double tol = 1e-9) {
\n-
197 typedef typename std::vector<std::pair<V1,V2> > VectorPair;
\n-
198 bool match = true;
\n-
199 if (expected.size() != actual.size())
\n-
200 match = false;
\n-
201 typename VectorPair::const_iterator
\n-
202 itExp = expected.begin(),
\n-
203 itAct = actual.begin();
\n-
204 if(match) {
\n-
205 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n-
206 if (!assert_equal(itExp->first, itAct->first, tol) ||
\n-
207 !assert_equal(itExp->second, itAct->second, tol)) {
\n-
208 match = false;
\n-
209 break;
\n-
210 }
\n-
211 }
\n-
212 }
\n-
213 if(!match) {
\n-
214 std::cout << "expected: " << std::endl;
\n-
215 for(const typename VectorPair::value_type& a: expected) {
\n-
216 a.first.print( " first ");
\n-
217 a.second.print(" second");
\n-
218 }
\n-
219 std::cout << "\\nactual: " << std::endl;
\n-
220 for(const typename VectorPair::value_type& a: actual) {
\n-
221 a.first.print( " first ");
\n-
222 a.second.print(" second");
\n-
223 }
\n-
224 std::cout << std::endl;
\n-
225 return false;
\n-
226 }
\n-
227 return true;
\n-
228}
\n-
\n-
229
\n-
230
\n-
234template<class V>
\n-
\n-
235bool assert_container_equal(const V& expected, const V& actual, double tol = 1e-9) {
\n-
236 bool match = true;
\n-
237 typename V::const_iterator
\n-
238 itExp = expected.begin(),
\n-
239 itAct = actual.begin();
\n-
240 if(match) {
\n-
241 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n-
242 if (!assert_equal(*itExp, *itAct, tol)) {
\n-
243 match = false;
\n-
244 break;
\n-
245 }
\n-
246 }
\n-
247 if(itExp != expected.end() || itAct != actual.end())
\n-
248 match = false;
\n-
249 }
\n-
250 if(!match) {
\n-
251 std::cout << "expected: " << std::endl;
\n-
252 for(const typename V::value_type& a: expected) { a.print(" "); }
\n-
253 std::cout << "\\nactual: " << std::endl;
\n-
254 for(const typename V::value_type& a: actual) { a.print(" "); }
\n-
255 std::cout << std::endl;
\n-
256 return false;
\n-
257 }
\n-
258 return true;
\n-
259}
\n-
\n-
260
\n-
265template<class V2>
\n-
\n-
266bool assert_container_equality(const std::map<size_t,V2>& expected, const std::map<size_t,V2>& actual) {
\n-
267 typedef typename std::map<size_t,V2> Map;
\n-
268 bool match = true;
\n-
269 if (expected.size() != actual.size())
\n-
270 match = false;
\n-
271 typename Map::const_iterator
\n-
272 itExp = expected.begin(),
\n-
273 itAct = actual.begin();
\n-
274 if(match) {
\n-
275 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n-
276 if (itExp->first != itAct->first || itExp->second != itAct->second) {
\n-
277 match = false;
\n-
278 break;
\n-
279 }
\n-
280 }
\n-
281 }
\n-
282 if(!match) {
\n-
283 std::cout << "expected: " << std::endl;
\n-
284 for(const typename Map::value_type& a: expected) {
\n-
285 std::cout << "Key: " << a.first << std::endl;
\n-
286 std::cout << "Value: " << a.second << std::endl;
\n-
287 }
\n-
288 std::cout << "\\nactual: " << std::endl;
\n-
289 for(const typename Map::value_type& a: actual) {
\n-
290 std::cout << "Key: " << a.first << std::endl;
\n-
291 std::cout << "Value: " << a.second << std::endl;
\n-
292 }
\n-
293 std::cout << std::endl;
\n-
294 return false;
\n-
295 }
\n-
296 return true;
\n-
297}
\n-
\n-
298
\n-
299
\n-
303template<class V>
\n-
\n-
304bool assert_container_equality(const V& expected, const V& actual) {
\n-
305 bool match = true;
\n-
306 if (expected.size() != actual.size())
\n-
307 match = false;
\n-
308 typename V::const_iterator
\n-
309 itExp = expected.begin(),
\n-
310 itAct = actual.begin();
\n-
311 if(match) {
\n-
312 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n-
313 if (*itExp != *itAct) {
\n-
314 match = false;
\n-
315 break;
\n-
316 }
\n-
317 }
\n-
318 }
\n-
319 if(!match) {
\n-
320 std::cout << "expected: " << std::endl;
\n-
321 for(const typename V::value_type& a: expected) { std::cout << a << " "; }
\n-
322 std::cout << "\\nactual: " << std::endl;
\n-
323 for(const typename V::value_type& a: actual) { std::cout << a << " "; }
\n-
324 std::cout << std::endl;
\n-
325 return false;
\n-
326 }
\n-
327 return true;
\n-
328}
\n-
\n-
329
\n-
\n-
333inline bool assert_equal(const std::string& expected, const std::string& actual) {
\n-
334 if (expected == actual)
\n-
335 return true;
\n-
336 printf("Not equal:\\n");
\n-
337 std::cout << "expected: [" << expected << "]\\n";
\n-
338 std::cout << "actual: [" << actual << "]" << std::endl;
\n-
339 return false;
\n-
340}
\n-
\n-
341
\n-
345template<class V>
\n-
\n-
346bool assert_inequal(const V& expected, const V& actual, double tol = 1e-9) {
\n-
347 if (!actual.equals(expected, tol))
\n-
348 return true;
\n-
349 printf("Erroneously equal:\\n");
\n-
350 expected.print("expected");
\n-
351 actual.print("actual");
\n-
352 return false;
\n-
353}
\n-
\n-
354
\n-
358template<class V>
\n-
\n-
359bool assert_stdout_equal(const std::string& expected, const V& actual) {
\n-
360 // Redirect output to buffer so we can compare
\n-
361 std::stringstream buffer;
\n-
362 // Save the original output stream so we can reset later
\n-
363 std::streambuf* old = std::cout.rdbuf(buffer.rdbuf());
\n-
364
\n-
365 // We test against actual std::cout for faithful reproduction
\n-
366 std::cout << actual;
\n-
367
\n-
368 // Get output string and reset stdout
\n-
369 std::string actual_ = buffer.str();
\n-
370 std::cout.rdbuf(old);
\n-
371
\n-
372 return assert_equal(expected, actual_);
\n-
373}
\n-
\n-
374
\n-
380template <class V>
\n-
\n-
381bool assert_print_equal(const std::string& expected, const V& actual,
\n-
382 const std::string& s = "") {
\n-
383 // Redirect output to buffer so we can compare
\n-
384 std::stringstream buffer;
\n-
385 // Save the original output stream so we can reset later
\n-
386 std::streambuf* old = std::cout.rdbuf(buffer.rdbuf());
\n-
387
\n-
388 // We test against actual std::cout for faithful reproduction
\n-
389 actual.print(s);
\n-
390
\n-
391 // Get output string and reset stdout
\n-
392 std::string actual_ = buffer.str();
\n-
393 std::cout.rdbuf(old);
\n-
394
\n-
395 return assert_equal(expected, actual_);
\n-
396}
\n-
\n-
397
\n-
398} // \\namespace gtsam
\n-
Concept check for values that can be used in unit tests.
\n-
Included from all GTSAM files.
\n+
65#define ISDEBUG(S) (false)
\n+
66#define SETDEBUG(S,V) ((void)false)
\n+
67
\n+
68#endif
\n+
69
\n+
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
Included from all GTSAM files.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
bool assert_stdout_equal(const std::string &expected, const V &actual)
Capture std out via cout stream and compare against string.
Definition TestableAssertions.h:359
\n-
bool assert_container_equal(const std::map< V1, V2 > &expected, const std::map< V1, V2 > &actual, double tol=1e-9)
Function for comparing maps of testable->testable TODO: replace with more generalized version.
Definition TestableAssertions.h:119
\n-
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n-
bool assert_container_equality(const std::map< size_t, V2 > &expected, const std::map< size_t, V2 > &actual)
Function for comparing maps of size_t->testable Types are assumed to have operator ==.
Definition TestableAssertions.h:266
\n-
bool assert_inequal(const Matrix &A, const Matrix &B, double tol)
inequals with an tolerance, prints out message if within tolerance
Definition Matrix.cpp:63
\n-
bool assert_print_equal(const std::string &expected, const V &actual, const std::string &s="")
Capture print function output and compare against string.
Definition TestableAssertions.h:381
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,407 +1,83 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-TestableAssertions.h\n+debug.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+21#include \n 22\n-23#include \n-24#include \n-25#include \n-26#include \n-27#include \n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-_\b3_\b4inline bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const _\bK_\be_\by& expected, const _\bK_\be_\by& actual, double tol =\n-0.0) {\n-35 if(expected != actual) {\n-36 std::cout << \"Not equal:\\nexpected: \" << expected << \"\\nactual: \" << actual\n-<< std::endl;\n-37 return false;\n-38 }\n-39 return true;\n-40}\n-41\n-49template\n-_\b5_\b0bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const boost::optional& expected,\n-51 const boost::optional& actual, double tol = 1e-9) {\n-52 if (!expected && actual) {\n-53 std::cout << \"expected is boost::none, while actual is not\" << std::endl;\n-54 return false;\n-55 }\n-56 if (expected && !actual) {\n-57 std::cout << \"actual is boost::none, while expected is not\" << std::endl;\n-58 return false;\n-59 }\n-60 if (!expected && !actual)\n-61 return true;\n-62 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(*expected, *actual, tol);\n-63}\n+23\n+24// This file defines granular debugging flags that may be switched on and off\n+25// at run time. Typical usage is 'if(ISDEBUG(\"myFunction\"))' to check if the\n+26// 'myFunction' flag is enabled, and SETDEBUG(\"myFunction\", true) to enable\n+27// this flag, or SETDEBUG(\"myFunction\", false) to disable it.\n+28//\n+29// Debug flags are created automatically as they are accessed, so they can be\n+30// used immediately without explicitly creating them. Each flag defaults to\n+31// 'false', i.e. disabled.\n+32//\n+33// For these macro to have any effect, granular debugging must be enabled by\n+34// defining GTSAM_ENABLE_DEBUG. If NDEBUG is not defined, then\n+35// GTSAM_ENABLE_DEBUG will be automatically defined and thus granular\n+36// debugging enabled.\n+37\n+38#ifndef NDEBUG\n+39#ifndef GTSAM_ENABLE_DEBUG\n+40#define GTSAM_ENABLE_DEBUG\n+41#endif\n+42#endif\n+43\n+44namespace _\bg_\bt_\bs_\ba_\bm {\n+45 GTSAM_EXTERN_EXPORT FastMap >\n+debugFlags;\n+46\n+47 // Non-guarded use led to crashes, and solved in commit cd35db2\n+48 bool GTSAM_EXPORT guardedIsDebug(const std::string& s);\n+49 void GTSAM_EXPORT guardedSetDebug(const std::string& s, const bool v);\n+50\n+51 // function to check if compiled version has debug information\n+52 bool GTSAM_EXPORT isDebugVersion();\n+53}\n+54\n+55#undef ISDEBUG\n+56#undef SETDEBUG\n+57\n+58#ifdef GTSAM_ENABLE_DEBUG\n+59\n+60#define ISDEBUG(S) (gtsam::guardedIsDebug(S))\n+61#define SETDEBUG(S,V) ((void)(gtsam::guardedSetDebug(S,V)))\n+62\n+63#else\n 64\n-65template\n-66bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const V& expected, const boost::optional& actual, double\n-tol = 1e-9) {\n-67 if (!actual) {\n-68 std::cout << \"actual is boost::none\" << std::endl;\n-69 return false;\n-70 }\n-71 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(expected, *actual, tol);\n-72}\n-73\n-74template\n-75bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const V& expected, const boost::optional& actual,\n-double tol = 1e-9) {\n-76 if (!actual) {\n-77 std::cout << \"actual is boost::none\" << std::endl;\n-78 return false;\n-79 }\n-80 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(expected, *actual, tol);\n-81}\n-82\n-83#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-88template\n-89bool GTSAM_DEPRECATED _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const std::vector& expected, const\n-std::vector& actual, double tol = 1e-9) {\n-90 bool match = true;\n-91 if (expected.size() != actual.size())\n-92 match = false;\n-93 if(match) {\n-94 size_t i = 0;\n-95 for(const V& a: expected) {\n-96 if (!_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(a, actual[i++], tol)) {\n-97 match = false;\n-98 break;\n-99 }\n-100 }\n-101 }\n-102 if(!match) {\n-103 std::cout << \"expected: \" << std::endl;\n-104 for(const V& a: expected) { std::cout << a << \" \"; }\n-105 std::cout << \"\\nactual: \" << std::endl;\n-106 for(const V& a: actual) { std::cout << a << \" \"; }\n-107 std::cout << std::endl;\n-108 return false;\n-109 }\n-110 return true;\n-111}\n-112#endif\n-113\n-118template\n-_\b1_\b1_\b9bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl(const std::map& expected, const std::\n-map& actual, double tol = 1e-9) {\n-120 typedef typename std::map Map;\n-121 bool match = true;\n-122 if (expected.size() != actual.size())\n-123 match = false;\n-124 typename Map::const_iterator\n-125 itExp = expected.begin(),\n-126 itAct = actual.begin();\n-127 if(match) {\n-128 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n-129 if (!_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(itExp->first, itAct->first, tol) ||\n-130 !_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(itExp->second, itAct->second, tol)) {\n-131 match = false;\n-132 break;\n-133 }\n-134 }\n-135 }\n-136 if(!match) {\n-137 std::cout << \"expected: \" << std::endl;\n-138 for(const typename Map::value_type& a: expected) {\n-139 a.first.print(\"key\");\n-140 a.second.print(\" value\");\n-141 }\n-142 std::cout << \"\\nactual: \" << std::endl;\n-143 for(const typename Map::value_type& a: actual) {\n-144 a.first.print(\"key\");\n-145 a.second.print(\" value\");\n-146 }\n-147 std::cout << std::endl;\n-148 return false;\n-149 }\n-150 return true;\n-151}\n-152\n-156template\n-_\b1_\b5_\b7bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl(const std::map& expected, const std::\n-map& actual, double tol = 1e-9) {\n-158 typedef typename std::map Map;\n-159 bool match = true;\n-160 if (expected.size() != actual.size())\n-161 match = false;\n-162 typename Map::const_iterator\n-163 itExp = expected.begin(),\n-164 itAct = actual.begin();\n-165 if(match) {\n-166 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n-167 if (itExp->first != itAct->first ||\n-168 !_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(itExp->second, itAct->second, tol)) {\n-169 match = false;\n-170 break;\n-171 }\n-172 }\n-173 }\n-174 if(!match) {\n-175 std::cout << \"expected: \" << std::endl;\n-176 for(const typename Map::value_type& a: expected) {\n-177 std::cout << \"Key: \" << a.first << std::endl;\n-178 a.second.print(\" value\");\n-179 }\n-180 std::cout << \"\\nactual: \" << std::endl;\n-181 for(const typename Map::value_type& a: actual) {\n-182 std::cout << \"Key: \" << a.first << std::endl;\n-183 a.second.print(\" value\");\n-184 }\n-185 std::cout << std::endl;\n-186 return false;\n-187 }\n-188 return true;\n-189}\n-190\n-194template\n-_\b1_\b9_\b5bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl(const std::vector >& expected,\n-196 const std::vector >& actual, double tol = 1e-9) {\n-197 typedef typename std::vector > VectorPair;\n-198 bool match = true;\n-199 if (expected.size() != actual.size())\n-200 match = false;\n-201 typename VectorPair::const_iterator\n-202 itExp = expected.begin(),\n-203 itAct = actual.begin();\n-204 if(match) {\n-205 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n-206 if (!_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(itExp->first, itAct->first, tol) ||\n-207 !_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(itExp->second, itAct->second, tol)) {\n-208 match = false;\n-209 break;\n-210 }\n-211 }\n-212 }\n-213 if(!match) {\n-214 std::cout << \"expected: \" << std::endl;\n-215 for(const typename VectorPair::value_type& a: expected) {\n-216 a.first.print( \" first \");\n-217 a.second.print(\" second\");\n-218 }\n-219 std::cout << \"\\nactual: \" << std::endl;\n-220 for(const typename VectorPair::value_type& a: actual) {\n-221 a.first.print( \" first \");\n-222 a.second.print(\" second\");\n-223 }\n-224 std::cout << std::endl;\n-225 return false;\n-226 }\n-227 return true;\n-228}\n-229\n-230\n-234template\n-_\b2_\b3_\b5bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl(const V& expected, const V& actual, double tol =\n-1e-9) {\n-236 bool match = true;\n-237 typename V::const_iterator\n-238 itExp = expected.begin(),\n-239 itAct = actual.begin();\n-240 if(match) {\n-241 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n-242 if (!_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(*itExp, *itAct, tol)) {\n-243 match = false;\n-244 break;\n-245 }\n-246 }\n-247 if(itExp != expected.end() || itAct != actual.end())\n-248 match = false;\n-249 }\n-250 if(!match) {\n-251 std::cout << \"expected: \" << std::endl;\n-252 for(const typename V::value_type& a: expected) { a.print(\" \"); }\n-253 std::cout << \"\\nactual: \" << std::endl;\n-254 for(const typename V::value_type& a: actual) { a.print(\" \"); }\n-255 std::cout << std::endl;\n-256 return false;\n-257 }\n-258 return true;\n-259}\n-260\n-265template\n-_\b2_\b6_\b6bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl_\bi_\bt_\by(const std::map& expected, const\n-std::map& actual) {\n-267 typedef typename std::map Map;\n-268 bool match = true;\n-269 if (expected.size() != actual.size())\n-270 match = false;\n-271 typename Map::const_iterator\n-272 itExp = expected.begin(),\n-273 itAct = actual.begin();\n-274 if(match) {\n-275 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n-276 if (itExp->first != itAct->first || itExp->second != itAct->second) {\n-277 match = false;\n-278 break;\n-279 }\n-280 }\n-281 }\n-282 if(!match) {\n-283 std::cout << \"expected: \" << std::endl;\n-284 for(const typename Map::value_type& a: expected) {\n-285 std::cout << \"Key: \" << a.first << std::endl;\n-286 std::cout << \"Value: \" << a.second << std::endl;\n-287 }\n-288 std::cout << \"\\nactual: \" << std::endl;\n-289 for(const typename Map::value_type& a: actual) {\n-290 std::cout << \"Key: \" << a.first << std::endl;\n-291 std::cout << \"Value: \" << a.second << std::endl;\n-292 }\n-293 std::cout << std::endl;\n-294 return false;\n-295 }\n-296 return true;\n-297}\n-298\n-299\n-303template\n-_\b3_\b0_\b4bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl_\bi_\bt_\by(const V& expected, const V& actual) {\n-305 bool match = true;\n-306 if (expected.size() != actual.size())\n-307 match = false;\n-308 typename V::const_iterator\n-309 itExp = expected.begin(),\n-310 itAct = actual.begin();\n-311 if(match) {\n-312 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n-313 if (*itExp != *itAct) {\n-314 match = false;\n-315 break;\n-316 }\n-317 }\n-318 }\n-319 if(!match) {\n-320 std::cout << \"expected: \" << std::endl;\n-321 for(const typename V::value_type& a: expected) { std::cout << a << \" \"; }\n-322 std::cout << \"\\nactual: \" << std::endl;\n-323 for(const typename V::value_type& a: actual) { std::cout << a << \" \"; }\n-324 std::cout << std::endl;\n-325 return false;\n-326 }\n-327 return true;\n-328}\n-329\n-_\b3_\b3_\b3inline bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const std::string& expected, const std::string&\n-actual) {\n-334 if (expected == actual)\n-335 return true;\n-336 printf(\"Not equal:\\n\");\n-337 std::cout << \"expected: [\" << expected << \"]\\n\";\n-338 std::cout << \"actual: [\" << actual << \"]\" << std::endl;\n-339 return false;\n-340}\n-341\n-345template\n-_\b3_\b4_\b6bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl(const V& expected, const V& actual, double tol = 1e-9) {\n-347 if (!actual.equals(expected, tol))\n-348 return true;\n-349 printf(\"Erroneously equal:\\n\");\n-350 expected.print(\"expected\");\n-351 actual.print(\"actual\");\n-352 return false;\n-353}\n-354\n-358template\n-_\b3_\b5_\b9bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bs_\bt_\bd_\bo_\bu_\bt_\b__\be_\bq_\bu_\ba_\bl(const std::string& expected, const V& actual) {\n-360 // Redirect output to buffer so we can compare\n-361 std::stringstream buffer;\n-362 // Save the original output stream so we can reset later\n-363 std::streambuf* old = std::cout.rdbuf(buffer.rdbuf());\n-364\n-365 // We test against actual std::cout for faithful reproduction\n-366 std::cout << actual;\n-367\n-368 // Get output string and reset stdout\n-369 std::string actual_ = buffer.str();\n-370 std::cout.rdbuf(old);\n-371\n-372 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(expected, actual_);\n-373}\n-374\n-380template \n-_\b3_\b8_\b1bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bp_\br_\bi_\bn_\bt_\b__\be_\bq_\bu_\ba_\bl(const std::string& expected, const V& actual,\n-382 const std::string& s = \"\") {\n-383 // Redirect output to buffer so we can compare\n-384 std::stringstream buffer;\n-385 // Save the original output stream so we can reset later\n-386 std::streambuf* old = std::cout.rdbuf(buffer.rdbuf());\n-387\n-388 // We test against actual std::cout for faithful reproduction\n-389 actual.print(s);\n-390\n-391 // Get output string and reset stdout\n-392 std::string actual_ = buffer.str();\n-393 std::cout.rdbuf(old);\n-394\n-395 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(expected, actual_);\n-396}\n-397\n-398} // \\namespace gtsam\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n+65#define ISDEBUG(S) (false)\n+66#define SETDEBUG(S,V) ((void)false)\n+67\n+68#endif\n+69\n+_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n+A thin wrapper around std::map that uses boost's fast_pool_allocator.\n _\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n Included from all GTSAM files.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bs_\bt_\bd_\bo_\bu_\bt_\b__\be_\bq_\bu_\ba_\bl\n-bool assert_stdout_equal(const std::string &expected, const V &actual)\n-Capture std out via cout stream and compare against string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TestableAssertions.h:359\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl\n-bool assert_container_equal(const std::map< V1, V2 > &expected, const std::map<\n-V1, V2 > &actual, double tol=1e-9)\n-Function for comparing maps of testable->testable TODO: replace with more\n-generalized version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TestableAssertions.h:119\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n-bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n-equals with an tolerance, prints out message if unequal\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl_\bi_\bt_\by\n-bool assert_container_equality(const std::map< size_t, V2 > &expected, const\n-std::map< size_t, V2 > &actual)\n-Function for comparing maps of size_t->testable Types are assumed to have\n-operator ==.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TestableAssertions.h:266\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl\n-bool assert_inequal(const Matrix &A, const Matrix &B, double tol)\n-inequals with an tolerance, prints out message if within tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bp_\br_\bi_\bn_\bt_\b__\be_\bq_\bu_\ba_\bl\n-bool assert_print_equal(const std::string &expected, const V &actual, const\n-std::string &s=\"\")\n-Capture print function output and compare against string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TestableAssertions.h:381\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bA_\bs_\bs_\be_\br_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+ * _\bd_\be_\bb_\bu_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00056.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00056.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSerialization.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,119 @@\n \n \n \n \n \n
\n \n-
VectorSerialization.h File Reference
\n+Classes |\n+Namespaces |\n+Macros |\n+Functions |\n+Variables
\n+
Group.h File Reference
\n \n
\n \n-

serialization for Vectors \n+

Concept check class for variable types with Group properties. \n More...

\n \n

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::group_tag
 tag to assert a type is a group More...
 
struct  gtsam::multiplicative_group_tag
 Group operator syntax flavors. More...
 
struct  gtsam::additive_group_tag
 
class  gtsam::IsGroup< G >
 Group Concept. More...
 
class  gtsam::DirectProduct
 
struct  gtsam::traits< DirectProduct< G, H > >
 
class  gtsam::DirectSum< G, H >
 Template to construct the direct sum of two additive groups Assumes existence of three additive operators for both groups. More...
 
struct  gtsam::traits< DirectSum< G, H > >
 
\n+\n+\n+\n+\n+

\n+Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+

\n+Macros

#define GTSAM_CONCEPT_GROUP_INST(T)   template class gtsam::IsGroup<T>;
 Macros for using the IsGroup.
 
\n+#define GTSAM_CONCEPT_GROUP_TYPE(T)   typedef gtsam::IsGroup<T> _gtsam_IsGroup_##T;
 
\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+

\n Functions

\n-template<class Archive >
void boost::serialization::save (Archive &ar, const gtsam::Vector &v, unsigned int)
 
\n-template<class Archive >
void boost::serialization::load (Archive &ar, gtsam::Vector &v, unsigned int)
 
\n-template<class Archive , int D>
void boost::serialization::save (Archive &ar, const Eigen::Matrix< double, D, 1 > &v, unsigned int)
 
\n-template<class Archive , int D>
void boost::serialization::load (Archive &ar, Eigen::Matrix< double, D, 1 > &v, unsigned int)
 
\n+template<typename G >
 gtsam::BOOST_CONCEPT_REQUIRES (((IsGroup< G >)),(bool)) check_group_invariants(const G &a
 Check invariants.
 
\n+\n+\n+\n+\n+\n

\n+Variables

\n+const G & gtsam::b
 
\n+const G double gtsam::tol
 
\n

Detailed Description

\n-

serialization for Vectors

\n-
Author
Frank Dellaert
\n-
Date
February 2022
\n-
\n+

Concept check class for variable types with Group properties.

\n+
Date
November, 2011
\n+
Author
Alex Cunningham
\n+
\n+Frank Dellaert
\n+

Macro Definition Documentation

\n+\n+

◆ GTSAM_CONCEPT_GROUP_INST

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
#define GTSAM_CONCEPT_GROUP_INST( T)   template class gtsam::IsGroup<T>;
\n+
\n+\n+

Macros for using the IsGroup.

\n+
    \n+
  • An instantiation for use inside unit tests
  • \n+
  • A typedef for use inside generic algorithms
  • \n+
\n+

NOTE: intentionally not in the gtsam namespace to allow for classes not in the gtsam namespace to be more easily enforced as testable

\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,72 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-VectorSerialization.h File Reference\n-serialization for Vectors _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+Group.h File Reference\n+Concept check class for variable types with Group properties. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+\u00a0 tag to assert a type is a group _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+\u00a0 Group operator syntax flavors. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\b _\bG_\b _\b>\n+\u00a0 Group Concept. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt_\b<_\b _\bG_\b,_\b _\bH_\b _\b>_\b _\b>\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm_\b<_\b _\bG_\b,_\b _\bH_\b _\b>\n+\u00a0 Template to construct the direct sum of two additive groups Assumes\n+ existence of three additive operators for both groups. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm_\b<_\b _\bG_\b,_\b _\bH_\b _\b>_\b _\b>\n+\u00a0\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n+\u00a0 Global functions in a separate testing namespace.\n+\u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bG_\bR_\bO_\bU_\bP_\b__\bI_\bN_\bS_\bT(T)\u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp;\n+\u00a0 Macros for using the IsGroup.\n+\u00a0\n+#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_G\bGR\bRO\bOU\bUP\bP_\b_T\bTY\bYP\bPE\bE(T)\u00a0\u00a0\u00a0typedef _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp\n+ _gtsam_IsGroup_##T;\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:s\bsa\bav\bve\be (Archive &ar, const gtsam::Vector &v, unsigned\n- int)\n-\u00a0\n-template\n-void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:l\blo\boa\bad\bd (Archive &ar, gtsam::Vector &v, unsigned int)\n-\u00a0\n-template\n-void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:s\bsa\bav\bve\be (Archive &ar, const Eigen::Matrix< double, D,\n- 1 > &v, unsigned int)\n-\u00a0\n-template\n-void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:l\blo\boa\bad\bd (Archive &ar, Eigen::Matrix< double, D, 1 >\n- &v, unsigned int)\n+template\n+\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBO\bOO\bOS\bST\bT_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_R\bRE\bEQ\bQU\bUI\bIR\bRE\bES\bS (((_\bI_\bs_\bG_\br_\bo_\bu_\bp< G >)),(bool))\n+ check_group_invariants(const G &a\n+\u00a0 Check invariants.\n+\u00a0\n+V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n+ const G &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:b\bb\n+\u00a0\n+const G double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bto\bol\bl\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-serialization for Vectors\n+Concept check class for variable types with Group properties.\n+ Date\n+ November, 2011\n Author\n+ Alex Cunningham\n Frank Dellaert\n- Date\n- February 2022\n+*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_G\bGR\bRO\bOU\bUP\bP_\b_I\bIN\bNS\bST\bT *\b**\b**\b**\b**\b*\n+#define GTSAM_CONCEPT_GROUP_INST ( \u00a0 T ) \u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp;\n+Macros for using the IsGroup.\n+ * An instantiation for use inside unit tests\n+ * A typedef for use inside generic algorithms\n+NOTE: intentionally not in the gtsam namespace to allow for classes not in the\n+gtsam namespace to be more easily enforced as testable\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bG_\br_\bo_\bu_\bp_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00056_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00056_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSerialization.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h Source File\n \n \n \n \n \n \n \n@@ -98,81 +98,220 @@\n
No Matches
\n \n \n \n \n \n
\n-
VectorSerialization.h
\n+
Group.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <gtsam/base/Vector.h>
\n+
21#pragma once
\n
22
\n-
23#include <boost/serialization/array.hpp>
\n-
24#include <boost/serialization/nvp.hpp>
\n-
25#include <boost/serialization/split_free.hpp>
\n-
26
\n-
27namespace boost {
\n-
28namespace serialization {
\n-
29
\n-
30// split version - copies into an STL vector for serialization
\n-
31template <class Archive>
\n-
32void save(Archive& ar, const gtsam::Vector& v, unsigned int /*version*/) {
\n-
33 const size_t size = v.size();
\n-
34 ar << BOOST_SERIALIZATION_NVP(size);
\n-
35 ar << make_nvp("data", make_array(v.data(), v.size()));
\n-
36}
\n-
37
\n-
38template <class Archive>
\n-
39void load(Archive& ar, gtsam::Vector& v, unsigned int /*version*/) {
\n-
40 size_t size;
\n-
41 ar >> BOOST_SERIALIZATION_NVP(size);
\n-
42 v.resize(size);
\n-
43 ar >> make_nvp("data", make_array(v.data(), v.size()));
\n-
44}
\n-
45
\n-
46// split version - copies into an STL vector for serialization
\n-
47template <class Archive, int D>
\n-
48void save(Archive& ar, const Eigen::Matrix<double, D, 1>& v,
\n-
49 unsigned int /*version*/) {
\n-
50 ar << make_nvp("data", make_array(v.data(), v.RowsAtCompileTime));
\n-
51}
\n-
52
\n-
53template <class Archive, int D>
\n-
54void load(Archive& ar, Eigen::Matrix<double, D, 1>& v,
\n-
55 unsigned int /*version*/) {
\n-
56 ar >> make_nvp("data", make_array(v.data(), v.RowsAtCompileTime));
\n-
57}
\n-
58
\n-
59} // namespace serialization
\n-
60} // namespace boost
\n-
61
\n-
62BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector)
\n-
63BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector2)
\n-
64BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector3)
\n-
65BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector6)
\n-
typedef and functions to augment Eigen's VectorXd
\n-
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition Matrix.cpp:167
\n+
23#include <gtsam/base/Testable.h>
\n+
24
\n+
25#include <boost/concept_check.hpp>
\n+
26#include <boost/concept/requires.hpp>
\n+
27#include <boost/type_traits/is_base_of.hpp>
\n+
28#include <boost/static_assert.hpp>
\n+
29#include <utility>
\n+
30
\n+
31namespace gtsam {
\n+
32
\n+
34struct group_tag {};
\n+
35
\n+\n+\n+
39
\n+
40template <typename T> struct traits;
\n+
41
\n+
45template<typename G>
\n+
\n+
46class IsGroup {
\n+
47public:
\n+
48 typedef typename traits<G>::structure_category structure_category_tag;
\n+
49 typedef typename traits<G>::group_flavor flavor_tag;
\n+
50 //typedef typename traits<G>::identity::value_type identity_value_type;
\n+
51
\n+
52 BOOST_CONCEPT_USAGE(IsGroup) {
\n+
53 BOOST_STATIC_ASSERT_MSG(
\n+
54 (boost::is_base_of<group_tag, structure_category_tag>::value),
\n+
55 "This type's structure_category trait does not assert it as a group (or derived)");
\n+\n+
57 e = traits<G>::Compose(g, h);
\n+
58 e = traits<G>::Between(g, h);
\n+
59 e = traits<G>::Inverse(g);
\n+
60 operator_usage(flavor);
\n+
61 // todo: how do we test the act concept? or do we even need to?
\n+
62 }
\n+
63
\n+
64private:
\n+
65 void operator_usage(multiplicative_group_tag) {
\n+
66 e = g * h;
\n+
67 //e = -g; // todo this should work, but it is failing for Quaternions
\n+
68 }
\n+
69 void operator_usage(additive_group_tag) {
\n+
70 e = g + h;
\n+
71 e = h - g;
\n+
72 e = -g;
\n+
73 }
\n+
74
\n+
75 flavor_tag flavor;
\n+
76 G e, g, h;
\n+
77 bool b;
\n+
78};
\n+
\n+
79
\n+
81template<typename G>
\n+\n+
83check_group_invariants(const G& a, const G& b, double tol = 1e-9) {
\n+
84 G e = traits<G>::Identity();
\n+\n+\n+\n+
88}
\n+
89
\n+
90namespace internal {
\n+
91
\n+
94template<class Class>
\n+
95struct MultiplicativeGroupTraits {
\n+
96 typedef group_tag structure_category;
\n+
97 typedef multiplicative_group_tag group_flavor;
\n+
98 static Class Identity() { return Class::Identity(); }
\n+
99 static Class Compose(const Class &g, const Class & h) { return g * h;}
\n+
100 static Class Between(const Class &g, const Class & h) { return g.inverse() * h;}
\n+
101 static Class Inverse(const Class &g) { return g.inverse();}
\n+
102};
\n+
103
\n+
105template<class Class>
\n+
106struct MultiplicativeGroup : MultiplicativeGroupTraits<Class>, Testable<Class> {};
\n+
107
\n+
110template<class Class>
\n+
111struct AdditiveGroupTraits {
\n+
112 typedef group_tag structure_category;
\n+
113 typedef additive_group_tag group_flavor;
\n+
114 static Class Identity() { return Class::Identity(); }
\n+
115 static Class Compose(const Class &g, const Class & h) { return g + h;}
\n+
116 static Class Between(const Class &g, const Class & h) { return h - g;}
\n+
117 static Class Inverse(const Class &g) { return -g;}
\n+
118};
\n+
119
\n+
121template<class Class>
\n+
122struct AdditiveGroup : AdditiveGroupTraits<Class>, Testable<Class> {};
\n+
123
\n+
124} // namespace internal
\n+
125
\n+
127template<typename G>
\n+
128BOOST_CONCEPT_REQUIRES(((IsGroup<G>)),(G)) //
\n+
129compose_pow(const G& g, size_t n) {
\n+
130 if (n == 0) return traits<G>::Identity();
\n+
131 else if (n == 1) return g;
\n+
132 else return traits<G>::Compose(compose_pow(g, n - 1), g);
\n+
133}
\n+
134
\n+
137template<typename G, typename H>
\n+
\n+
138class DirectProduct: public std::pair<G, H> {
\n+
139 BOOST_CONCEPT_ASSERT((IsGroup<G>));
\n+
140 BOOST_CONCEPT_ASSERT((IsGroup<H>));
\n+
141
\n+
142public:
\n+
144 DirectProduct():std::pair<G,H>(traits<G>::Identity(),traits<H>::Identity()) {}
\n+
145
\n+
146 // Construct from two subgroup elements
\n+
147 DirectProduct(const G& g, const H& h):std::pair<G,H>(g,h) {}
\n+
148
\n+
149 // identity
\n+
150 static DirectProduct Identity() { return DirectProduct(); }
\n+
151
\n+
152 DirectProduct operator*(const DirectProduct& other) const {
\n+
153 return DirectProduct(traits<G>::Compose(this->first, other.first),
\n+
154 traits<H>::Compose(this->second, other.second));
\n+
155 }
\n+
156 DirectProduct inverse() const {
\n+
157 return DirectProduct(this->first.inverse(), this->second.inverse());
\n+
158 }
\n+
159};
\n+
\n+
160
\n+
161// Define any direct product group to be a model of the multiplicative Group concept
\n+
162template<typename G, typename H>
\n+
\n+
163struct traits<DirectProduct<G, H> > :
\n+
164 internal::MultiplicativeGroupTraits<DirectProduct<G, H> > {};
\n+
\n+
165
\n+
168template<typename G, typename H>
\n+
\n+
169class DirectSum: public std::pair<G, H> {
\n+
170 BOOST_CONCEPT_ASSERT((IsGroup<G>)); // TODO(frank): check additive
\n+
171 BOOST_CONCEPT_ASSERT((IsGroup<H>)); // TODO(frank): check additive
\n+
172
\n+
173 const G& g() const { return this->first; }
\n+
174 const H& h() const { return this->second;}
\n+
175
\n+
176public:
\n+
178 DirectSum():std::pair<G,H>(traits<G>::Identity(),traits<H>::Identity()) {}
\n+
179
\n+
180 // Construct from two subgroup elements
\n+
181 DirectSum(const G& g, const H& h):std::pair<G,H>(g,h) {}
\n+
182
\n+
183 // identity
\n+
184 static DirectSum Identity() { return DirectSum(); }
\n+
185
\n+
186 DirectSum operator+(const DirectSum& other) const {
\n+
187 return DirectSum(g()+other.g(), h()+other.h());
\n+
188 }
\n+
189 DirectSum operator-(const DirectSum& other) const {
\n+
190 return DirectSum(g()-other.g(), h()-other.h());
\n+
191 }
\n+
192 DirectSum operator-() const {
\n+
193 return DirectSum(- g(), - h());
\n+
194 }
\n+
195};
\n+
\n+
196
\n+
197// Define direct sums to be a model of the Additive Group concept
\n+
198template<typename G, typename H>
\n+
\n+
199struct traits<DirectSum<G, H> > :
\n+
200 internal::AdditiveGroupTraits<DirectSum<G, H> > {};
\n+
\n+
201
\n+
202} // namespace gtsam
\n+
203
\n+
212#define GTSAM_CONCEPT_GROUP_INST(T) template class gtsam::IsGroup<T>;
\n+
213#define GTSAM_CONCEPT_GROUP_TYPE(T) typedef gtsam::IsGroup<T> _gtsam_IsGroup_##T;
\n+
Concept check for values that can be used in unit tests.
\n+
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
BOOST_CONCEPT_REQUIRES(((IsGroup< G >)),(bool)) check_group_invariants(const G &a
Check invariants.
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
tag to assert a type is a group
Definition Group.h:34
\n+
Group operator syntax flavors.
Definition Group.h:37
\n+
Definition Group.h:38
\n+
Group Concept.
Definition Group.h:46
\n+
Definition Group.h:138
\n+
DirectProduct()
Default constructor yields identity.
Definition Group.h:144
\n+
Template to construct the direct sum of two additive groups Assumes existence of three additive opera...
Definition Group.h:169
\n+
DirectSum()
Default constructor yields identity.
Definition Group.h:178
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,77 +1,237 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VectorSerialization.h\n+Group.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+21#pragma once\n 22\n-23#include \n-24#include \n-25#include \n-26\n-27namespace boost {\n-28namespace serialization {\n-29\n-30// split version - copies into an STL vector for serialization\n-31template \n-32void _\bs_\ba_\bv_\be(Archive& ar, const gtsam::Vector& v, unsigned int /*version*/) {\n-33 const size_t size = v.size();\n-34 ar << BOOST_SERIALIZATION_NVP(size);\n-35 ar << make_nvp(\"data\", make_array(v.data(), v.size()));\n-36}\n-37\n-38template \n-39void load(Archive& ar, gtsam::Vector& v, unsigned int /*version*/) {\n-40 size_t size;\n-41 ar >> BOOST_SERIALIZATION_NVP(size);\n-42 v.resize(size);\n-43 ar >> make_nvp(\"data\", make_array(v.data(), v.size()));\n-44}\n-45\n-46// split version - copies into an STL vector for serialization\n-47template \n-48void _\bs_\ba_\bv_\be(Archive& ar, const Eigen::Matrix& v,\n-49 unsigned int /*version*/) {\n-50 ar << make_nvp(\"data\", make_array(v.data(), v.RowsAtCompileTime));\n-51}\n-52\n-53template \n-54void load(Archive& ar, Eigen::Matrix& v,\n-55 unsigned int /*version*/) {\n-56 ar >> make_nvp(\"data\", make_array(v.data(), v.RowsAtCompileTime));\n-57}\n-58\n-59} // namespace serialization\n-60} // namespace boost\n-61\n-62BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector)\n-63BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector2)\n-64BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector3)\n-65BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector6)\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\ba_\bv_\be\n-void save(const Matrix &A, const string &s, const string &filename)\n-save a matrix to file, which can be loaded by matlab\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:167\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+24\n+25#include \n+26#include \n+27#include \n+28#include \n+29#include \n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32\n+_\b3_\b4struct _\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg {};\n+35\n+_\b3_\b7struct _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg {};\n+_\b3_\b8struct _\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg {};\n+39\n+40template struct _\bt_\br_\ba_\bi_\bt_\bs;\n+41\n+45template\n+_\b4_\b6class _\bI_\bs_\bG_\br_\bo_\bu_\bp {\n+47public:\n+48 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by structure_category_tag;\n+49 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br flavor_tag;\n+50 //typedef typename traits::identity::value_type identity_value_type;\n+51\n+52 BOOST_CONCEPT_USAGE(_\bI_\bs_\bG_\br_\bo_\bu_\bp) {\n+53 BOOST_STATIC_ASSERT_MSG(\n+54 (boost::is_base_of::value),\n+55 \"This type's structure_category trait does not assert it as a group (or\n+derived)\");\n+56 e = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by();\n+57 e = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(g, h);\n+58 e = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(g, h);\n+59 e = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bI_\bn_\bv_\be_\br_\bs_\be(g);\n+60 operator_usage(flavor);\n+61 // todo: how do we test the act concept? or do we even need to?\n+62 }\n+63\n+64private:\n+65 void operator_usage(_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg) {\n+66 e = g * h;\n+67 //e = -g; // todo this should work, but it is failing for Quaternions\n+68 }\n+69 void operator_usage(_\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg) {\n+70 e = g + h;\n+71 e = h - g;\n+72 e = -g;\n+73 }\n+74\n+75 flavor_tag flavor;\n+76 G e, g, h;\n+77 bool b;\n+78};\n+79\n+81template\n+_\b8_\b2_\bB_\bO_\bO_\bS_\bT_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bR_\bE_\bQ_\bU_\bI_\bR_\bE_\bS(((_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\bG_\b>)),(bool)) //\n+83check_group_invariants(const G& a, const G& b, double tol = 1e-9) {\n+84 G e = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by();\n+85 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(a, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bI_\bn_\bv_\be_\br_\bs_\be(a)), e,\n+tol)\n+86 && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(a, b), _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be\n+(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bI_\bn_\bv_\be_\br_\bs_\be(a), b), tol)\n+87 && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(a, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(a, b)), b,\n+tol);\n+88}\n+89\n+90namespace internal {\n+91\n+94template\n+95struct MultiplicativeGroupTraits {\n+96 typedef group_tag structure_category;\n+97 typedef multiplicative_group_tag group_flavor;\n+98 static Class Identity() { return Class::Identity(); }\n+99 static Class Compose(const Class &g, const Class & h) { return g * h;}\n+100 static Class Between(const Class &g, const Class & h) { return g.inverse()\n+* h;}\n+101 static Class Inverse(const Class &g) { return g.inverse();}\n+102};\n+103\n+105template\n+106struct MultiplicativeGroup : MultiplicativeGroupTraits,\n+Testable {};\n+107\n+110template\n+111struct AdditiveGroupTraits {\n+112 typedef group_tag structure_category;\n+113 typedef additive_group_tag group_flavor;\n+114 static Class Identity() { return Class::Identity(); }\n+115 static Class Compose(const Class &g, const Class & h) { return g + h;}\n+116 static Class Between(const Class &g, const Class & h) { return h - g;}\n+117 static Class Inverse(const Class &g) { return -g;}\n+118};\n+119\n+121template\n+122struct AdditiveGroup : AdditiveGroupTraits, Testable {};\n+123\n+124} // namespace internal\n+125\n+127template\n+128_\bB_\bO_\bO_\bS_\bT_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bR_\bE_\bQ_\bU_\bI_\bR_\bE_\bS(((IsGroup)),(G)) //\n+129compose_pow(const G& g, size_t n) {\n+130 if (n == 0) return traits::Identity();\n+131 else if (n == 1) return g;\n+132 else return traits::Compose(compose_pow(g, n - 1), g);\n+133}\n+134\n+137template\n+_\b1_\b3_\b8class _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt: public std::pair {\n+139 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\bG_\b>));\n+140 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\bH_\b>));\n+141\n+142public:\n+_\b1_\b4_\b4 _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt():std::pair(_\bt_\br_\ba_\bi_\bt_\bs::Identity(),_\bt_\br_\ba_\bi_\bt_\bs::Identity())\n+{}\n+145\n+146 // Construct from two subgroup elements\n+147 _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt(const G& g, const H& h):std::pair(g,h) {}\n+148\n+149 // identity\n+150 static _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt Identity() { return _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt(); }\n+151\n+152 _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt operator*(const _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt& other) const {\n+153 return _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt(traits::Compose(this->first, other.first),\n+154 traits::Compose(this->second, other.second));\n+155 }\n+156 _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt inverse() const {\n+157 return _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt(this->first.inverse(), this->second.inverse());\n+158 }\n+159};\n+160\n+161// Define any direct product group to be a model of the multiplicative Group\n+concept\n+162template\n+_\b1_\b6_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt > :\n+164 internal::MultiplicativeGroupTraits > {};\n+165\n+168template\n+_\b1_\b6_\b9class _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm: public std::pair {\n+170 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\bG_\b>)); // TODO(frank): check additive\n+171 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\bH_\b>)); // TODO(frank): check additive\n+172\n+173 const G& g() const { return this->first; }\n+174 const H& h() const { return this->second;}\n+175\n+176public:\n+_\b1_\b7_\b8 _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm():std::pair(_\bt_\br_\ba_\bi_\bt_\bs::Identity(),_\bt_\br_\ba_\bi_\bt_\bs::Identity()) {}\n+179\n+180 // Construct from two subgroup elements\n+181 _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm(const G& g, const H& h):std::pair(g,h) {}\n+182\n+183 // identity\n+184 static _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm Identity() { return _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm(); }\n+185\n+186 _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm operator+(const _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm& other) const {\n+187 return _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm(g()+other.g(), h()+other.h());\n+188 }\n+189 _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm operator-(const _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm& other) const {\n+190 return _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm(g()-other.g(), h()-other.h());\n+191 }\n+192 _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm operator-() const {\n+193 return _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm(- g(), - h());\n+194 }\n+195};\n+196\n+197// Define direct sums to be a model of the Additive Group concept\n+198template\n+_\b1_\b9_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm > :\n+200 internal::AdditiveGroupTraits > {};\n+201\n+202} // namespace gtsam\n+203\n+_\b2_\b1_\b2#define GTSAM_CONCEPT_GROUP_INST(T) template class gtsam::IsGroup;\n+213#define GTSAM_CONCEPT_GROUP_TYPE(T) typedef gtsam::IsGroup\n+_gtsam_IsGroup_##T;\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bg_\bt_\bs_\ba_\bm\n+Global functions in a separate testing namespace.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bO_\bO_\bS_\bT_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bR_\bE_\bQ_\bU_\bI_\bR_\bE_\bS\n+BOOST_CONCEPT_REQUIRES(((IsGroup< G >)),(bool)) check_group_invariants(const G\n+&a\n+Check invariants.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+tag to assert a type is a group\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+Group operator syntax flavors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp\n+Group Concept.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt\n+DirectProduct()\n+Default constructor yields identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:144\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm\n+Template to construct the direct sum of two additive groups Assumes existence\n+of three additive opera...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:169\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm\n+DirectSum()\n+Default constructor yields identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:178\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bG_\br_\bo_\bu_\bp_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00059.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00059.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Value.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/TestableAssertions.h File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,105 @@\n \n \n \n \n \n
\n \n-
Value.h File Reference
\n+Namespaces |\n+Functions
\n+
TestableAssertions.h File Reference
\n \n
\n \n-

The base class for any variable that can be optimized or used in a factor. \n+

Provides additional testing facilities for common data structures. \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::Value
 This is the base class for any type to be stored in Values. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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+Functions

\n+bool gtsam::assert_equal (const Key &expected, const Key &actual, double tol=0.0)
 Equals testing for basic types.
 
template<class V >
bool gtsam::assert_equal (const boost::optional< V > &expected, const boost::optional< V > &actual, double tol=1e-9)
 Comparisons for boost.optional objects that checks whether objects exist before comparing their values.
 
\n+template<class V >
bool gtsam::assert_equal (const V &expected, const boost::optional< V > &actual, double tol=1e-9)
 
\n+template<class V >
bool gtsam::assert_equal (const V &expected, const boost::optional< const V & > &actual, double tol=1e-9)
 
\n+template<class V1 , class V2 >
bool gtsam::assert_container_equal (const std::map< V1, V2 > &expected, const std::map< V1, V2 > &actual, double tol=1e-9)
 Function for comparing maps of testable->testable TODO: replace with more generalized version.
 
\n+template<class V2 >
bool gtsam::assert_container_equal (const std::map< size_t, V2 > &expected, const std::map< size_t, V2 > &actual, double tol=1e-9)
 Function for comparing maps of size_t->testable.
 
\n+template<class V1 , class V2 >
bool gtsam::assert_container_equal (const std::vector< std::pair< V1, V2 > > &expected, const std::vector< std::pair< V1, V2 > > &actual, double tol=1e-9)
 Function for comparing vector of pairs (testable, testable)
 
\n+template<class V >
bool gtsam::assert_container_equal (const V &expected, const V &actual, double tol=1e-9)
 General function for comparing containers of testable objects.
 
\n+template<class V2 >
bool gtsam::assert_container_equality (const std::map< size_t, V2 > &expected, const std::map< size_t, V2 > &actual)
 Function for comparing maps of size_t->testable Types are assumed to have operator ==.
 
\n+template<class V >
bool gtsam::assert_container_equality (const V &expected, const V &actual)
 General function for comparing containers of objects with operator==.
 
\n+bool gtsam::assert_equal (const std::string &expected, const std::string &actual)
 Compare strings for unit tests.
 
\n+template<class V >
bool gtsam::assert_inequal (const V &expected, const V &actual, double tol=1e-9)
 Allow for testing inequality.
 
\n+template<class V >
bool gtsam::assert_stdout_equal (const std::string &expected, const V &actual)
 Capture std out via cout stream and compare against string.
 
template<class V >
bool gtsam::assert_print_equal (const std::string &expected, const V &actual, const std::string &s="")
 Capture print function output and compare against string.
 
\n

Detailed Description

\n-

The base class for any variable that can be optimized or used in a factor.

\n-
Author
Richard Roberts
\n-
Date
Jan 14, 2012
\n+

Provides additional testing facilities for common data structures.

\n+
Author
Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,90 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Value.h File Reference\n-The base class for any variable that can be optimized or used in a factor.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+TestableAssertions.h File Reference\n+Provides additional testing facilities for common data structures. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-\u00a0 This is the base class for any type to be stored in _\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const _\bK_\be_\by &expected, const _\bK_\be_\by &actual, double\n+ tol=0.0)\n+\u00a0 Equals testing for basic types.\n+\u00a0\n+template\n+bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl (const boost::optional< V > &expected, const boost::\n+ optional< V > &actual, double tol=1e-9)\n+\u00a0 Comparisons for boost.optional objects that checks whether objects exist\n+ before comparing their values.\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const V &expected, const boost::optional< V >\n+ &actual, double tol=1e-9)\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const V &expected, const boost::optional< const V &\n+ > &actual, double tol=1e-9)\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bl (const std::map< V1, V2 > &expected, const\n+ std::map< V1, V2 > &actual, double tol=1e-9)\n+\u00a0 Function for comparing maps of testable->testable TODO: replace with more\n+ generalized version.\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bl (const std::map< size_t, V2 > &expected,\n+ const std::map< size_t, V2 > &actual, double tol=1e-9)\n+\u00a0 Function for comparing maps of size_t->testable.\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bl (const std::vector< std::pair< V1, V2 > >\n+ &expected, const std::vector< std::pair< V1, V2 > > &actual, double\n+ tol=1e-9)\n+\u00a0 Function for comparing vector of pairs (testable, testable)\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bl (const V &expected, const V &actual, double\n+ tol=1e-9)\n+\u00a0 General function for comparing containers of testable objects.\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bli\bit\bty\by (const std::map< size_t, V2 > &expected,\n+ const std::map< size_t, V2 > &actual)\n+\u00a0 Function for comparing maps of size_t->testable Types are assumed to have\n+ operator ==.\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_c\bco\bon\bnt\bta\bai\bin\bne\ber\br_\b_e\beq\bqu\bua\bal\bli\bit\bty\by (const V &expected, const V &actual)\n+\u00a0 General function for comparing containers of objects with operator==.\n+\u00a0\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const std::string &expected, const std::string\n+ &actual)\n+\u00a0 Compare strings for unit tests.\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_i\bin\bne\beq\bqu\bua\bal\bl (const V &expected, const V &actual, double tol=1e-\n+ 9)\n+\u00a0 Allow for testing inequality.\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_s\bst\btd\bdo\bou\but\bt_\b_e\beq\bqu\bua\bal\bl (const std::string &expected, const V &actual)\n+\u00a0 Capture std out via cout stream and compare against string.\n+\u00a0\n+template\n+bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bp_\br_\bi_\bn_\bt_\b__\be_\bq_\bu_\ba_\bl (const std::string &expected, const V &actual,\n+ const std::string &s=\"\")\n+\u00a0 Capture print function output and compare against string.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-The base class for any variable that can be optimized or used in a factor.\n+Provides additional testing facilities for common data structures.\n Author\n- Richard Roberts\n- Date\n- Jan 14, 2012\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bV_\ba_\bl_\bu_\be_\b._\bh\n+ * _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bA_\bs_\bs_\be_\br_\bt_\bi_\bo_\bn_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00059.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00059.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,14 @@\n var a00059 = [\n- [\"gtsam::Value\", \"a02596.html\", \"a02596\"]\n+ [\"assert_container_equal\", \"a00059.html#a2f509195ea2180d0f7dbd3a99a088ff4\", null],\n+ [\"assert_container_equal\", \"a00059.html#a254be27d6d4b416fa2b546c77ae783fc\", null],\n+ [\"assert_container_equal\", \"a00059.html#a0eec17f894b358dd9f30d7af28082ba5\", null],\n+ [\"assert_container_equal\", \"a00059.html#a6d6b2964354593f69848f6bf5d3e0ca1\", null],\n+ [\"assert_container_equality\", \"a00059.html#a59ba6a7db27344c5cb021f1421905020\", null],\n+ [\"assert_container_equality\", \"a00059.html#aa0926a5d779171bd8e1d30fb5982b5c0\", null],\n+ [\"assert_equal\", \"a00059.html#add6d6575582314cc9b5dbdbe2a86374d\", null],\n+ [\"assert_equal\", \"a00059.html#a982034802415eb6e9bd02355257ed96a\", null],\n+ [\"assert_equal\", \"a00059.html#a21e760bc75888053afd86a27d56b6148\", null],\n+ [\"assert_inequal\", \"a00059.html#a2f19ba6625a264457805513fefcb5c32\", null],\n+ [\"assert_print_equal\", \"a00059.html#a830c8c65902d7d0e763562e6c9357346\", null],\n+ [\"assert_stdout_equal\", \"a00059.html#a08641f0f7145716bba9159dd95099a44\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00059_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00059_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Value.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/TestableAssertions.h Source File\n \n \n \n \n \n \n \n@@ -98,100 +98,399 @@\n
No Matches
\n \n \n \n \n \n
\n-
Value.h
\n+
TestableAssertions.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <gtsam/config.h> // Configuration from CMake
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Testable.h>
\n+\n
22
\n-
23#include <gtsam/base/Vector.h>
\n-
24#include <boost/serialization/nvp.hpp>
\n-
25#include <boost/serialization/assume_abstract.hpp>
\n-
26#include <memory>
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
\n-
37 class GTSAM_EXPORT Value {
\n-
38 public:
\n-
39
\n-
41 virtual Value* clone_() const = 0;
\n-
42
\n-
44 virtual void deallocate_() const = 0;
\n-
45
\n-
47 virtual boost::shared_ptr<Value> clone() const = 0;
\n-
48
\n-
50 virtual bool equals_(const Value& other, double tol = 1e-9) const = 0;
\n-
51
\n-
53 virtual void print(const std::string& str = "") const = 0;
\n-
54
\n-
60 virtual size_t dim() const = 0;
\n-
61
\n-
68 virtual Value* retract_(const Vector& delta) const = 0;
\n-
69
\n-
76 virtual Vector localCoordinates_(const Value& value) const = 0;
\n-
77
\n-
\n-
79 virtual Value& operator=(const Value& /*rhs*/) {
\n-
80 //needs a empty definition so recursion in implicit derived assignment operators work
\n-
81 return *this;
\n-
82 }
\n-
\n-
83
\n-
85 template<typename ValueType>
\n-
86 const ValueType& cast() const;
\n-
87
\n-
89 virtual ~Value() {}
\n-
90
\n-
91 private:
\n-
122 friend class boost::serialization::access;
\n-
123 template<class ARCHIVE>
\n-
124 void serialize(ARCHIVE & /*ar*/, const unsigned int /*version*/) {
\n-
125 }
\n-
126
\n-
127 };
\n-
\n-
128
\n-
129} /* namespace gtsam */
\n-
130
\n-
131BOOST_SERIALIZATION_ASSUME_ABSTRACT(gtsam::Value)
\n-
typedef and functions to augment Eigen's VectorXd
\n+
23#include <boost/optional.hpp>
\n+
24#include <map>
\n+
25#include <iostream>
\n+
26#include <sstream>
\n+
27#include <vector>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n+
\n+
34inline bool assert_equal(const Key& expected, const Key& actual, double tol = 0.0) {
\n+
35 if(expected != actual) {
\n+
36 std::cout << "Not equal:\\nexpected: " << expected << "\\nactual: " << actual << std::endl;
\n+
37 return false;
\n+
38 }
\n+
39 return true;
\n+
40}
\n+
\n+
41
\n+
49template<class V>
\n+
\n+
50bool assert_equal(const boost::optional<V>& expected,
\n+
51 const boost::optional<V>& actual, double tol = 1e-9) {
\n+
52 if (!expected && actual) {
\n+
53 std::cout << "expected is boost::none, while actual is not" << std::endl;
\n+
54 return false;
\n+
55 }
\n+
56 if (expected && !actual) {
\n+
57 std::cout << "actual is boost::none, while expected is not" << std::endl;
\n+
58 return false;
\n+
59 }
\n+
60 if (!expected && !actual)
\n+
61 return true;
\n+
62 return assert_equal(*expected, *actual, tol);
\n+
63}
\n+
\n+
64
\n+
65template<class V>
\n+
66bool assert_equal(const V& expected, const boost::optional<V>& actual, double tol = 1e-9) {
\n+
67 if (!actual) {
\n+
68 std::cout << "actual is boost::none" << std::endl;
\n+
69 return false;
\n+
70 }
\n+
71 return assert_equal(expected, *actual, tol);
\n+
72}
\n+
73
\n+
74template<class V>
\n+
75bool assert_equal(const V& expected, const boost::optional<const V&>& actual, double tol = 1e-9) {
\n+
76 if (!actual) {
\n+
77 std::cout << "actual is boost::none" << std::endl;
\n+
78 return false;
\n+
79 }
\n+
80 return assert_equal(expected, *actual, tol);
\n+
81}
\n+
82
\n+
83#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
88template<class V>
\n+
89bool GTSAM_DEPRECATED assert_equal(const std::vector<V>& expected, const std::vector<V>& actual, double tol = 1e-9) {
\n+
90 bool match = true;
\n+
91 if (expected.size() != actual.size())
\n+
92 match = false;
\n+
93 if(match) {
\n+
94 size_t i = 0;
\n+
95 for(const V& a: expected) {
\n+
96 if (!assert_equal(a, actual[i++], tol)) {
\n+
97 match = false;
\n+
98 break;
\n+
99 }
\n+
100 }
\n+
101 }
\n+
102 if(!match) {
\n+
103 std::cout << "expected: " << std::endl;
\n+
104 for(const V& a: expected) { std::cout << a << " "; }
\n+
105 std::cout << "\\nactual: " << std::endl;
\n+
106 for(const V& a: actual) { std::cout << a << " "; }
\n+
107 std::cout << std::endl;
\n+
108 return false;
\n+
109 }
\n+
110 return true;
\n+
111}
\n+
112#endif
\n+
113
\n+
118template<class V1, class V2>
\n+
\n+
119bool assert_container_equal(const std::map<V1,V2>& expected, const std::map<V1,V2>& actual, double tol = 1e-9) {
\n+
120 typedef typename std::map<V1,V2> Map;
\n+
121 bool match = true;
\n+
122 if (expected.size() != actual.size())
\n+
123 match = false;
\n+
124 typename Map::const_iterator
\n+
125 itExp = expected.begin(),
\n+
126 itAct = actual.begin();
\n+
127 if(match) {
\n+
128 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n+
129 if (!assert_equal(itExp->first, itAct->first, tol) ||
\n+
130 !assert_equal(itExp->second, itAct->second, tol)) {
\n+
131 match = false;
\n+
132 break;
\n+
133 }
\n+
134 }
\n+
135 }
\n+
136 if(!match) {
\n+
137 std::cout << "expected: " << std::endl;
\n+
138 for(const typename Map::value_type& a: expected) {
\n+
139 a.first.print("key");
\n+
140 a.second.print(" value");
\n+
141 }
\n+
142 std::cout << "\\nactual: " << std::endl;
\n+
143 for(const typename Map::value_type& a: actual) {
\n+
144 a.first.print("key");
\n+
145 a.second.print(" value");
\n+
146 }
\n+
147 std::cout << std::endl;
\n+
148 return false;
\n+
149 }
\n+
150 return true;
\n+
151}
\n+
\n+
152
\n+
156template<class V2>
\n+
\n+
157bool assert_container_equal(const std::map<size_t,V2>& expected, const std::map<size_t,V2>& actual, double tol = 1e-9) {
\n+
158 typedef typename std::map<size_t,V2> Map;
\n+
159 bool match = true;
\n+
160 if (expected.size() != actual.size())
\n+
161 match = false;
\n+
162 typename Map::const_iterator
\n+
163 itExp = expected.begin(),
\n+
164 itAct = actual.begin();
\n+
165 if(match) {
\n+
166 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n+
167 if (itExp->first != itAct->first ||
\n+
168 !assert_equal(itExp->second, itAct->second, tol)) {
\n+
169 match = false;
\n+
170 break;
\n+
171 }
\n+
172 }
\n+
173 }
\n+
174 if(!match) {
\n+
175 std::cout << "expected: " << std::endl;
\n+
176 for(const typename Map::value_type& a: expected) {
\n+
177 std::cout << "Key: " << a.first << std::endl;
\n+
178 a.second.print(" value");
\n+
179 }
\n+
180 std::cout << "\\nactual: " << std::endl;
\n+
181 for(const typename Map::value_type& a: actual) {
\n+
182 std::cout << "Key: " << a.first << std::endl;
\n+
183 a.second.print(" value");
\n+
184 }
\n+
185 std::cout << std::endl;
\n+
186 return false;
\n+
187 }
\n+
188 return true;
\n+
189}
\n+
\n+
190
\n+
194template<class V1, class V2>
\n+
\n+
195bool assert_container_equal(const std::vector<std::pair<V1,V2> >& expected,
\n+
196 const std::vector<std::pair<V1,V2> >& actual, double tol = 1e-9) {
\n+
197 typedef typename std::vector<std::pair<V1,V2> > VectorPair;
\n+
198 bool match = true;
\n+
199 if (expected.size() != actual.size())
\n+
200 match = false;
\n+
201 typename VectorPair::const_iterator
\n+
202 itExp = expected.begin(),
\n+
203 itAct = actual.begin();
\n+
204 if(match) {
\n+
205 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n+
206 if (!assert_equal(itExp->first, itAct->first, tol) ||
\n+
207 !assert_equal(itExp->second, itAct->second, tol)) {
\n+
208 match = false;
\n+
209 break;
\n+
210 }
\n+
211 }
\n+
212 }
\n+
213 if(!match) {
\n+
214 std::cout << "expected: " << std::endl;
\n+
215 for(const typename VectorPair::value_type& a: expected) {
\n+
216 a.first.print( " first ");
\n+
217 a.second.print(" second");
\n+
218 }
\n+
219 std::cout << "\\nactual: " << std::endl;
\n+
220 for(const typename VectorPair::value_type& a: actual) {
\n+
221 a.first.print( " first ");
\n+
222 a.second.print(" second");
\n+
223 }
\n+
224 std::cout << std::endl;
\n+
225 return false;
\n+
226 }
\n+
227 return true;
\n+
228}
\n+
\n+
229
\n+
230
\n+
234template<class V>
\n+
\n+
235bool assert_container_equal(const V& expected, const V& actual, double tol = 1e-9) {
\n+
236 bool match = true;
\n+
237 typename V::const_iterator
\n+
238 itExp = expected.begin(),
\n+
239 itAct = actual.begin();
\n+
240 if(match) {
\n+
241 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n+
242 if (!assert_equal(*itExp, *itAct, tol)) {
\n+
243 match = false;
\n+
244 break;
\n+
245 }
\n+
246 }
\n+
247 if(itExp != expected.end() || itAct != actual.end())
\n+
248 match = false;
\n+
249 }
\n+
250 if(!match) {
\n+
251 std::cout << "expected: " << std::endl;
\n+
252 for(const typename V::value_type& a: expected) { a.print(" "); }
\n+
253 std::cout << "\\nactual: " << std::endl;
\n+
254 for(const typename V::value_type& a: actual) { a.print(" "); }
\n+
255 std::cout << std::endl;
\n+
256 return false;
\n+
257 }
\n+
258 return true;
\n+
259}
\n+
\n+
260
\n+
265template<class V2>
\n+
\n+
266bool assert_container_equality(const std::map<size_t,V2>& expected, const std::map<size_t,V2>& actual) {
\n+
267 typedef typename std::map<size_t,V2> Map;
\n+
268 bool match = true;
\n+
269 if (expected.size() != actual.size())
\n+
270 match = false;
\n+
271 typename Map::const_iterator
\n+
272 itExp = expected.begin(),
\n+
273 itAct = actual.begin();
\n+
274 if(match) {
\n+
275 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n+
276 if (itExp->first != itAct->first || itExp->second != itAct->second) {
\n+
277 match = false;
\n+
278 break;
\n+
279 }
\n+
280 }
\n+
281 }
\n+
282 if(!match) {
\n+
283 std::cout << "expected: " << std::endl;
\n+
284 for(const typename Map::value_type& a: expected) {
\n+
285 std::cout << "Key: " << a.first << std::endl;
\n+
286 std::cout << "Value: " << a.second << std::endl;
\n+
287 }
\n+
288 std::cout << "\\nactual: " << std::endl;
\n+
289 for(const typename Map::value_type& a: actual) {
\n+
290 std::cout << "Key: " << a.first << std::endl;
\n+
291 std::cout << "Value: " << a.second << std::endl;
\n+
292 }
\n+
293 std::cout << std::endl;
\n+
294 return false;
\n+
295 }
\n+
296 return true;
\n+
297}
\n+
\n+
298
\n+
299
\n+
303template<class V>
\n+
\n+
304bool assert_container_equality(const V& expected, const V& actual) {
\n+
305 bool match = true;
\n+
306 if (expected.size() != actual.size())
\n+
307 match = false;
\n+
308 typename V::const_iterator
\n+
309 itExp = expected.begin(),
\n+
310 itAct = actual.begin();
\n+
311 if(match) {
\n+
312 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {
\n+
313 if (*itExp != *itAct) {
\n+
314 match = false;
\n+
315 break;
\n+
316 }
\n+
317 }
\n+
318 }
\n+
319 if(!match) {
\n+
320 std::cout << "expected: " << std::endl;
\n+
321 for(const typename V::value_type& a: expected) { std::cout << a << " "; }
\n+
322 std::cout << "\\nactual: " << std::endl;
\n+
323 for(const typename V::value_type& a: actual) { std::cout << a << " "; }
\n+
324 std::cout << std::endl;
\n+
325 return false;
\n+
326 }
\n+
327 return true;
\n+
328}
\n+
\n+
329
\n+
\n+
333inline bool assert_equal(const std::string& expected, const std::string& actual) {
\n+
334 if (expected == actual)
\n+
335 return true;
\n+
336 printf("Not equal:\\n");
\n+
337 std::cout << "expected: [" << expected << "]\\n";
\n+
338 std::cout << "actual: [" << actual << "]" << std::endl;
\n+
339 return false;
\n+
340}
\n+
\n+
341
\n+
345template<class V>
\n+
\n+
346bool assert_inequal(const V& expected, const V& actual, double tol = 1e-9) {
\n+
347 if (!actual.equals(expected, tol))
\n+
348 return true;
\n+
349 printf("Erroneously equal:\\n");
\n+
350 expected.print("expected");
\n+
351 actual.print("actual");
\n+
352 return false;
\n+
353}
\n+
\n+
354
\n+
358template<class V>
\n+
\n+
359bool assert_stdout_equal(const std::string& expected, const V& actual) {
\n+
360 // Redirect output to buffer so we can compare
\n+
361 std::stringstream buffer;
\n+
362 // Save the original output stream so we can reset later
\n+
363 std::streambuf* old = std::cout.rdbuf(buffer.rdbuf());
\n+
364
\n+
365 // We test against actual std::cout for faithful reproduction
\n+
366 std::cout << actual;
\n+
367
\n+
368 // Get output string and reset stdout
\n+
369 std::string actual_ = buffer.str();
\n+
370 std::cout.rdbuf(old);
\n+
371
\n+
372 return assert_equal(expected, actual_);
\n+
373}
\n+
\n+
374
\n+
380template <class V>
\n+
\n+
381bool assert_print_equal(const std::string& expected, const V& actual,
\n+
382 const std::string& s = "") {
\n+
383 // Redirect output to buffer so we can compare
\n+
384 std::stringstream buffer;
\n+
385 // Save the original output stream so we can reset later
\n+
386 std::streambuf* old = std::cout.rdbuf(buffer.rdbuf());
\n+
387
\n+
388 // We test against actual std::cout for faithful reproduction
\n+
389 actual.print(s);
\n+
390
\n+
391 // Get output string and reset stdout
\n+
392 std::string actual_ = buffer.str();
\n+
393 std::cout.rdbuf(old);
\n+
394
\n+
395 return assert_equal(expected, actual_);
\n+
396}
\n+
\n+
397
\n+
398} // \\namespace gtsam
\n+
Concept check for values that can be used in unit tests.
\n+
Included from all GTSAM files.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n-
virtual size_t dim() const =0
Return the dimensionality of the tangent space of this value.
\n-
virtual Value * retract_(const Vector &delta) const =0
Increment the value, by mapping from the vector delta in the tangent space of the current value back ...
\n-
virtual void deallocate_() const =0
Deallocate a raw pointer of this value.
\n-
virtual ~Value()
Virutal destructor.
Definition Value.h:89
\n-
virtual bool equals_(const Value &other, double tol=1e-9) const =0
Compare this Value with another for equality.
\n-
virtual Vector localCoordinates_(const Value &value) const =0
Compute the coordinates in the tangent space of this value that retract() would map to value.
\n-
virtual Value & operator=(const Value &)
Assignment operator.
Definition Value.h:79
\n-
virtual void print(const std::string &str="") const =0
Print this value, for debugging and unit tests.
\n-
virtual Value * clone_() const =0
Clone this value in a special memory pool, must be deleted with Value::deallocate_,...
\n-
virtual boost::shared_ptr< Value > clone() const =0
Clone this value (normal clone on the heap, delete with 'delete' operator)
\n+
bool assert_stdout_equal(const std::string &expected, const V &actual)
Capture std out via cout stream and compare against string.
Definition TestableAssertions.h:359
\n+
bool assert_container_equal(const std::map< V1, V2 > &expected, const std::map< V1, V2 > &actual, double tol=1e-9)
Function for comparing maps of testable->testable TODO: replace with more generalized version.
Definition TestableAssertions.h:119
\n+
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n+
bool assert_container_equality(const std::map< size_t, V2 > &expected, const std::map< size_t, V2 > &actual)
Function for comparing maps of size_t->testable Types are assumed to have operator ==.
Definition TestableAssertions.h:266
\n+
bool assert_inequal(const Matrix &A, const Matrix &B, double tol)
inequals with an tolerance, prints out message if within tolerance
Definition Matrix.cpp:63
\n+
bool assert_print_equal(const std::string &expected, const V &actual, const std::string &s="")
Capture print function output and compare against string.
Definition TestableAssertions.h:381
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,119 +1,407 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Value.h\n+TestableAssertions.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include // Configuration from CMake\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n 22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-24#include \n-25#include \n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-_\b3_\b7 class GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be {\n-38 public:\n-39\n-_\b4_\b1 virtual _\bV_\ba_\bl_\bu_\be* _\bc_\bl_\bo_\bn_\be_\b_() const = 0;\n-42\n-_\b4_\b4 virtual void _\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be_\b_() const = 0;\n-45\n-_\b4_\b7 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const = 0;\n-48\n-_\b5_\b0 virtual bool _\be_\bq_\bu_\ba_\bl_\bs_\b_(const _\bV_\ba_\bl_\bu_\be& other, double tol = 1e-9) const = 0;\n-51\n-_\b5_\b3 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const = 0;\n-54\n-_\b6_\b0 virtual size_t _\bd_\bi_\bm() const = 0;\n-61\n-_\b6_\b8 virtual _\bV_\ba_\bl_\bu_\be* _\br_\be_\bt_\br_\ba_\bc_\bt_\b_(const Vector& delta) const = 0;\n-69\n-_\b7_\b6 virtual Vector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\b_(const _\bV_\ba_\bl_\bu_\be& value) const = 0;\n-77\n-_\b7_\b9 virtual _\bV_\ba_\bl_\bu_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bV_\ba_\bl_\bu_\be& /*rhs*/) {\n-80 //needs a empty definition so recursion in implicit derived assignment\n-operators work\n-81 return *this;\n-82 }\n-83\n-85 template\n-86 const ValueType& cast() const;\n-87\n-_\b8_\b9 virtual _\b~_\bV_\ba_\bl_\bu_\be() {}\n-90\n-91 private:\n-_\b1_\b2_\b2 friend class boost::serialization::access;\n-123 template\n-124 void serialize(ARCHIVE & /*ar*/, const unsigned int /*version*/) {\n-125 }\n-126\n-127 };\n-128\n-129} /* namespace gtsam */\n-130\n-131BOOST_SERIALIZATION_ASSUME_ABSTRACT(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be)\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n+23#include \n+24#include \n+25#include \n+26#include \n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+_\b3_\b4inline bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const _\bK_\be_\by& expected, const _\bK_\be_\by& actual, double tol =\n+0.0) {\n+35 if(expected != actual) {\n+36 std::cout << \"Not equal:\\nexpected: \" << expected << \"\\nactual: \" << actual\n+<< std::endl;\n+37 return false;\n+38 }\n+39 return true;\n+40}\n+41\n+49template\n+_\b5_\b0bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const boost::optional& expected,\n+51 const boost::optional& actual, double tol = 1e-9) {\n+52 if (!expected && actual) {\n+53 std::cout << \"expected is boost::none, while actual is not\" << std::endl;\n+54 return false;\n+55 }\n+56 if (expected && !actual) {\n+57 std::cout << \"actual is boost::none, while expected is not\" << std::endl;\n+58 return false;\n+59 }\n+60 if (!expected && !actual)\n+61 return true;\n+62 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(*expected, *actual, tol);\n+63}\n+64\n+65template\n+66bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const V& expected, const boost::optional& actual, double\n+tol = 1e-9) {\n+67 if (!actual) {\n+68 std::cout << \"actual is boost::none\" << std::endl;\n+69 return false;\n+70 }\n+71 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(expected, *actual, tol);\n+72}\n+73\n+74template\n+75bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const V& expected, const boost::optional& actual,\n+double tol = 1e-9) {\n+76 if (!actual) {\n+77 std::cout << \"actual is boost::none\" << std::endl;\n+78 return false;\n+79 }\n+80 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(expected, *actual, tol);\n+81}\n+82\n+83#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+88template\n+89bool GTSAM_DEPRECATED _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const std::vector& expected, const\n+std::vector& actual, double tol = 1e-9) {\n+90 bool match = true;\n+91 if (expected.size() != actual.size())\n+92 match = false;\n+93 if(match) {\n+94 size_t i = 0;\n+95 for(const V& a: expected) {\n+96 if (!_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(a, actual[i++], tol)) {\n+97 match = false;\n+98 break;\n+99 }\n+100 }\n+101 }\n+102 if(!match) {\n+103 std::cout << \"expected: \" << std::endl;\n+104 for(const V& a: expected) { std::cout << a << \" \"; }\n+105 std::cout << \"\\nactual: \" << std::endl;\n+106 for(const V& a: actual) { std::cout << a << \" \"; }\n+107 std::cout << std::endl;\n+108 return false;\n+109 }\n+110 return true;\n+111}\n+112#endif\n+113\n+118template\n+_\b1_\b1_\b9bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl(const std::map& expected, const std::\n+map& actual, double tol = 1e-9) {\n+120 typedef typename std::map Map;\n+121 bool match = true;\n+122 if (expected.size() != actual.size())\n+123 match = false;\n+124 typename Map::const_iterator\n+125 itExp = expected.begin(),\n+126 itAct = actual.begin();\n+127 if(match) {\n+128 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n+129 if (!_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(itExp->first, itAct->first, tol) ||\n+130 !_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(itExp->second, itAct->second, tol)) {\n+131 match = false;\n+132 break;\n+133 }\n+134 }\n+135 }\n+136 if(!match) {\n+137 std::cout << \"expected: \" << std::endl;\n+138 for(const typename Map::value_type& a: expected) {\n+139 a.first.print(\"key\");\n+140 a.second.print(\" value\");\n+141 }\n+142 std::cout << \"\\nactual: \" << std::endl;\n+143 for(const typename Map::value_type& a: actual) {\n+144 a.first.print(\"key\");\n+145 a.second.print(\" value\");\n+146 }\n+147 std::cout << std::endl;\n+148 return false;\n+149 }\n+150 return true;\n+151}\n+152\n+156template\n+_\b1_\b5_\b7bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl(const std::map& expected, const std::\n+map& actual, double tol = 1e-9) {\n+158 typedef typename std::map Map;\n+159 bool match = true;\n+160 if (expected.size() != actual.size())\n+161 match = false;\n+162 typename Map::const_iterator\n+163 itExp = expected.begin(),\n+164 itAct = actual.begin();\n+165 if(match) {\n+166 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n+167 if (itExp->first != itAct->first ||\n+168 !_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(itExp->second, itAct->second, tol)) {\n+169 match = false;\n+170 break;\n+171 }\n+172 }\n+173 }\n+174 if(!match) {\n+175 std::cout << \"expected: \" << std::endl;\n+176 for(const typename Map::value_type& a: expected) {\n+177 std::cout << \"Key: \" << a.first << std::endl;\n+178 a.second.print(\" value\");\n+179 }\n+180 std::cout << \"\\nactual: \" << std::endl;\n+181 for(const typename Map::value_type& a: actual) {\n+182 std::cout << \"Key: \" << a.first << std::endl;\n+183 a.second.print(\" value\");\n+184 }\n+185 std::cout << std::endl;\n+186 return false;\n+187 }\n+188 return true;\n+189}\n+190\n+194template\n+_\b1_\b9_\b5bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl(const std::vector >& expected,\n+196 const std::vector >& actual, double tol = 1e-9) {\n+197 typedef typename std::vector > VectorPair;\n+198 bool match = true;\n+199 if (expected.size() != actual.size())\n+200 match = false;\n+201 typename VectorPair::const_iterator\n+202 itExp = expected.begin(),\n+203 itAct = actual.begin();\n+204 if(match) {\n+205 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n+206 if (!_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(itExp->first, itAct->first, tol) ||\n+207 !_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(itExp->second, itAct->second, tol)) {\n+208 match = false;\n+209 break;\n+210 }\n+211 }\n+212 }\n+213 if(!match) {\n+214 std::cout << \"expected: \" << std::endl;\n+215 for(const typename VectorPair::value_type& a: expected) {\n+216 a.first.print( \" first \");\n+217 a.second.print(\" second\");\n+218 }\n+219 std::cout << \"\\nactual: \" << std::endl;\n+220 for(const typename VectorPair::value_type& a: actual) {\n+221 a.first.print( \" first \");\n+222 a.second.print(\" second\");\n+223 }\n+224 std::cout << std::endl;\n+225 return false;\n+226 }\n+227 return true;\n+228}\n+229\n+230\n+234template\n+_\b2_\b3_\b5bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl(const V& expected, const V& actual, double tol =\n+1e-9) {\n+236 bool match = true;\n+237 typename V::const_iterator\n+238 itExp = expected.begin(),\n+239 itAct = actual.begin();\n+240 if(match) {\n+241 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n+242 if (!_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(*itExp, *itAct, tol)) {\n+243 match = false;\n+244 break;\n+245 }\n+246 }\n+247 if(itExp != expected.end() || itAct != actual.end())\n+248 match = false;\n+249 }\n+250 if(!match) {\n+251 std::cout << \"expected: \" << std::endl;\n+252 for(const typename V::value_type& a: expected) { a.print(\" \"); }\n+253 std::cout << \"\\nactual: \" << std::endl;\n+254 for(const typename V::value_type& a: actual) { a.print(\" \"); }\n+255 std::cout << std::endl;\n+256 return false;\n+257 }\n+258 return true;\n+259}\n+260\n+265template\n+_\b2_\b6_\b6bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl_\bi_\bt_\by(const std::map& expected, const\n+std::map& actual) {\n+267 typedef typename std::map Map;\n+268 bool match = true;\n+269 if (expected.size() != actual.size())\n+270 match = false;\n+271 typename Map::const_iterator\n+272 itExp = expected.begin(),\n+273 itAct = actual.begin();\n+274 if(match) {\n+275 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n+276 if (itExp->first != itAct->first || itExp->second != itAct->second) {\n+277 match = false;\n+278 break;\n+279 }\n+280 }\n+281 }\n+282 if(!match) {\n+283 std::cout << \"expected: \" << std::endl;\n+284 for(const typename Map::value_type& a: expected) {\n+285 std::cout << \"Key: \" << a.first << std::endl;\n+286 std::cout << \"Value: \" << a.second << std::endl;\n+287 }\n+288 std::cout << \"\\nactual: \" << std::endl;\n+289 for(const typename Map::value_type& a: actual) {\n+290 std::cout << \"Key: \" << a.first << std::endl;\n+291 std::cout << \"Value: \" << a.second << std::endl;\n+292 }\n+293 std::cout << std::endl;\n+294 return false;\n+295 }\n+296 return true;\n+297}\n+298\n+299\n+303template\n+_\b3_\b0_\b4bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl_\bi_\bt_\by(const V& expected, const V& actual) {\n+305 bool match = true;\n+306 if (expected.size() != actual.size())\n+307 match = false;\n+308 typename V::const_iterator\n+309 itExp = expected.begin(),\n+310 itAct = actual.begin();\n+311 if(match) {\n+312 for (; itExp!=expected.end() && itAct!=actual.end(); ++itExp, ++itAct) {\n+313 if (*itExp != *itAct) {\n+314 match = false;\n+315 break;\n+316 }\n+317 }\n+318 }\n+319 if(!match) {\n+320 std::cout << \"expected: \" << std::endl;\n+321 for(const typename V::value_type& a: expected) { std::cout << a << \" \"; }\n+322 std::cout << \"\\nactual: \" << std::endl;\n+323 for(const typename V::value_type& a: actual) { std::cout << a << \" \"; }\n+324 std::cout << std::endl;\n+325 return false;\n+326 }\n+327 return true;\n+328}\n+329\n+_\b3_\b3_\b3inline bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const std::string& expected, const std::string&\n+actual) {\n+334 if (expected == actual)\n+335 return true;\n+336 printf(\"Not equal:\\n\");\n+337 std::cout << \"expected: [\" << expected << \"]\\n\";\n+338 std::cout << \"actual: [\" << actual << \"]\" << std::endl;\n+339 return false;\n+340}\n+341\n+345template\n+_\b3_\b4_\b6bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl(const V& expected, const V& actual, double tol = 1e-9) {\n+347 if (!actual.equals(expected, tol))\n+348 return true;\n+349 printf(\"Erroneously equal:\\n\");\n+350 expected.print(\"expected\");\n+351 actual.print(\"actual\");\n+352 return false;\n+353}\n+354\n+358template\n+_\b3_\b5_\b9bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bs_\bt_\bd_\bo_\bu_\bt_\b__\be_\bq_\bu_\ba_\bl(const std::string& expected, const V& actual) {\n+360 // Redirect output to buffer so we can compare\n+361 std::stringstream buffer;\n+362 // Save the original output stream so we can reset later\n+363 std::streambuf* old = std::cout.rdbuf(buffer.rdbuf());\n+364\n+365 // We test against actual std::cout for faithful reproduction\n+366 std::cout << actual;\n+367\n+368 // Get output string and reset stdout\n+369 std::string actual_ = buffer.str();\n+370 std::cout.rdbuf(old);\n+371\n+372 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(expected, actual_);\n+373}\n+374\n+380template \n+_\b3_\b8_\b1bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bp_\br_\bi_\bn_\bt_\b__\be_\bq_\bu_\ba_\bl(const std::string& expected, const V& actual,\n+382 const std::string& s = \"\") {\n+383 // Redirect output to buffer so we can compare\n+384 std::stringstream buffer;\n+385 // Save the original output stream so we can reset later\n+386 std::streambuf* old = std::cout.rdbuf(buffer.rdbuf());\n+387\n+388 // We test against actual std::cout for faithful reproduction\n+389 actual.print(s);\n+390\n+391 // Get output string and reset stdout\n+392 std::string actual_ = buffer.str();\n+393 std::cout.rdbuf(old);\n+394\n+395 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(expected, actual_);\n+396}\n+397\n+398} // \\namespace gtsam\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-This is the base class for any type to be stored in Values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bd_\bi_\bm\n-virtual size_t dim() const =0\n-Return the dimensionality of the tangent space of this value.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt_\b_\n-virtual Value * retract_(const Vector &delta) const =0\n-Increment the value, by mapping from the vector delta in the tangent space of\n-the current value back ...\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be_\b_\n-virtual void deallocate_() const =0\n-Deallocate a raw pointer of this value.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\b~_\bV_\ba_\bl_\bu_\be\n-virtual ~Value()\n-Virutal destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs_\b_\n-virtual bool equals_(const Value &other, double tol=1e-9) const =0\n-Compare this Value with another for equality.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\b_\n-virtual Vector localCoordinates_(const Value &value) const =0\n-Compute the coordinates in the tangent space of this value that retract() would\n-map to value.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-virtual Value & operator=(const Value &)\n-Assignment operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &str=\"\") const =0\n-Print this value, for debugging and unit tests.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be_\b_\n-virtual Value * clone_() const =0\n-Clone this value in a special memory pool, must be deleted with Value::\n-deallocate_,...\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual boost::shared_ptr< Value > clone() const =0\n-Clone this value (normal clone on the heap, delete with 'delete' operator)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bs_\bt_\bd_\bo_\bu_\bt_\b__\be_\bq_\bu_\ba_\bl\n+bool assert_stdout_equal(const std::string &expected, const V &actual)\n+Capture std out via cout stream and compare against string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TestableAssertions.h:359\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl\n+bool assert_container_equal(const std::map< V1, V2 > &expected, const std::map<\n+V1, V2 > &actual, double tol=1e-9)\n+Function for comparing maps of testable->testable TODO: replace with more\n+generalized version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TestableAssertions.h:119\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n+bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n+equals with an tolerance, prints out message if unequal\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bc_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b__\be_\bq_\bu_\ba_\bl_\bi_\bt_\by\n+bool assert_container_equality(const std::map< size_t, V2 > &expected, const\n+std::map< size_t, V2 > &actual)\n+Function for comparing maps of size_t->testable Types are assumed to have\n+operator ==.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TestableAssertions.h:266\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl\n+bool assert_inequal(const Matrix &A, const Matrix &B, double tol)\n+inequals with an tolerance, prints out message if within tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bp_\br_\bi_\bn_\bt_\b__\be_\bq_\bu_\ba_\bl\n+bool assert_print_equal(const std::string &expected, const V &actual, const\n+std::string &s=\"\")\n+Capture print function output and compare against string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TestableAssertions.h:381\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bV_\ba_\bl_\bu_\be_\b._\bh\n+ * _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bA_\bs_\bs_\be_\br_\bt_\bi_\bo_\bn_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00062.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00062.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastSet.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/serialization.h File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,166 @@\n \n \n \n \n \n
\n \n-
FastSet.h File Reference
\n+
serialization.h File Reference
\n
\n
\n \n-

A thin wrapper around std::set that uses boost's fast_pool_allocator. \n+

Convenience functions for serializing data structures via boost.serialization. \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::FastSet< VALUE >
 FastSet is a thin wrapper around std::set that uses the boost fast_pool_allocator instead of the default STL allocator. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

Standard serialization

Serialization in default compressed format

\n+
template<class T >
void gtsam::serializeToStream (const T &input, std::ostream &out_archive_stream)
 
\n+template<class T >
void gtsam::deserializeFromStream (std::istream &in_archive_stream, T &output)
 deserializes from a stream
 
\n+template<class T >
std::string gtsam::serializeToString (const T &input)
 serializes to a string
 
\n+template<class T >
void gtsam::deserializeFromString (const std::string &serialized, T &output)
 deserializes from a string
 
\n+template<class T >
bool gtsam::serializeToFile (const T &input, const std::string &filename)
 serializes to a file
 
\n+template<class T >
bool gtsam::deserializeFromFile (const std::string &filename, T &output)
 deserializes from a file
 
\n+template<class T >
std::string gtsam::serialize (const T &input)
 serializes to a string
 
\n+template<class T >
void gtsam::deserialize (const std::string &serialized, T &output)
 deserializes from a string
 
XML Serialization

Serialization to XML format with named structures

\n+
template<class T >
void gtsam::serializeToXMLStream (const T &input, std::ostream &out_archive_stream, const std::string &name="data")
 
\n+template<class T >
void gtsam::deserializeFromXMLStream (std::istream &in_archive_stream, T &output, const std::string &name="data")
 deserializes from a stream in XML
 
\n+template<class T >
std::string gtsam::serializeToXMLString (const T &input, const std::string &name="data")
 serializes to a string in XML
 
\n+template<class T >
void gtsam::deserializeFromXMLString (const std::string &serialized, T &output, const std::string &name="data")
 deserializes from a string in XML
 
\n+template<class T >
bool gtsam::serializeToXMLFile (const T &input, const std::string &filename, const std::string &name="data")
 serializes to an XML file
 
\n+template<class T >
bool gtsam::deserializeFromXMLFile (const std::string &filename, T &output, const std::string &name="data")
 deserializes from an XML file
 
\n+template<class T >
std::string gtsam::serializeXML (const T &input, const std::string &name="data")
 serializes to a string in XML
 
\n+template<class T >
void gtsam::deserializeXML (const std::string &serialized, T &output, const std::string &name="data")
 deserializes from a string in XML
 
Binary Serialization

Serialization to binary format with named structures

\n+
template<class T >
void gtsam::serializeToBinaryStream (const T &input, std::ostream &out_archive_stream, const std::string &name="data")
 
\n+template<class T >
void gtsam::deserializeFromBinaryStream (std::istream &in_archive_stream, T &output, const std::string &name="data")
 deserializes from a stream in binary
 
\n+template<class T >
std::string gtsam::serializeToBinaryString (const T &input, const std::string &name="data")
 serializes to a string in binary
 
\n+template<class T >
void gtsam::deserializeFromBinaryString (const std::string &serialized, T &output, const std::string &name="data")
 deserializes from a string in binary
 
\n+template<class T >
bool gtsam::serializeToBinaryFile (const T &input, const std::string &filename, const std::string &name="data")
 serializes to a binary file
 
\n+template<class T >
bool gtsam::deserializeFromBinaryFile (const std::string &filename, T &output, const std::string &name="data")
 deserializes from a binary file
 
\n+template<class T >
std::string gtsam::serializeBinary (const T &input, const std::string &name="data")
 serializes to a string in binary
 
\n+template<class T >
void gtsam::deserializeBinary (const std::string &serialized, T &output, const std::string &name="data")
 deserializes from a string in binary
 
\n

Detailed Description

\n-

A thin wrapper around std::set that uses boost's fast_pool_allocator.

\n-
Author
Richard Roberts
\n-
Date
Oct 17, 2010
\n+

Convenience functions for serializing data structures via boost.serialization.

\n+
Author
Alex Cunningham
\n+
\n+Richard Roberts
\n+
Date
Feb 7, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,146 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-FastSet.h File Reference\n-A thin wrapper around std::set that uses boost's fast_pool_allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+serialization.h File Reference\n+Convenience functions for serializing data structures via boost.serialization.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n-\u00a0 _\bF_\ba_\bs_\bt_\bS_\be_\bt is a thin wrapper around std::set that uses the boost\n- fast_pool_allocator instead of the default STL allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+Standard serialization\n+Serialization in default compressed format\n+template\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\be_\ba_\bm (const T &input, std::ostream\n+ &out_archive_stream)\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmS\bSt\btr\bre\bea\bam\bm (std::istream &in_archive_stream, T\n+ &output)\n+\u00a0 deserializes from a stream\n+\u00a0\n+template\n+std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boS\bSt\btr\bri\bin\bng\bg (const T &input)\n+\u00a0 serializes to a string\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmS\bSt\btr\bri\bin\bng\bg (const std::string &serialized, T\n+ &output)\n+\u00a0 deserializes from a string\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boF\bFi\bil\ble\be (const T &input, const std::string\n+ &filename)\n+\u00a0 serializes to a file\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmF\bFi\bil\ble\be (const std::string &filename, T\n+ &output)\n+\u00a0 deserializes from a file\n+\u00a0\n+template\n+std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (const T &input)\n+\u00a0 serializes to a string\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\be (const std::string &serialized, T &output)\n+\u00a0 deserializes from a string\n+\u00a0\n+XML Serialization\n+Serialization to XML format with named structures\n+template\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm (const T &input, std::ostream\n+ &out_archive_stream, const std::string &name=\"data\")\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmX\bXM\bML\bLS\bSt\btr\bre\bea\bam\bm (std::istream &in_archive_stream,\n+ T &output, const std::string &name=\"data\")\n+\u00a0 deserializes from a stream in XML\n+\u00a0\n+template\n+std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boX\bXM\bML\bLS\bSt\btr\bri\bin\bng\bg (const T &input, const std::string\n+ &name=\"data\")\n+\u00a0 serializes to a string in XML\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmX\bXM\bML\bLS\bSt\btr\bri\bin\bng\bg (const std::string &serialized, T\n+ &output, const std::string &name=\"data\")\n+\u00a0 deserializes from a string in XML\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boX\bXM\bML\bLF\bFi\bil\ble\be (const T &input, const std::string\n+ &filename, const std::string &name=\"data\")\n+\u00a0 serializes to an XML file\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmX\bXM\bML\bLF\bFi\bil\ble\be (const std::string &filename, T\n+ &output, const std::string &name=\"data\")\n+\u00a0 deserializes from an XML file\n+\u00a0\n+template\n+std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beX\bXM\bML\bL (const T &input, const std::string\n+ &name=\"data\")\n+\u00a0 serializes to a string in XML\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beX\bXM\bML\bL (const std::string &serialized, T &output,\n+ const std::string &name=\"data\")\n+\u00a0 deserializes from a string in XML\n+\u00a0\n+Binary Serialization\n+Serialization to binary format with named structures\n+template\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm (const T &input, std::ostream\n+ &out_archive_stream, const std::string &name=\"data\")\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmB\bBi\bin\bna\bar\bry\byS\bSt\btr\bre\bea\bam\bm (std::istream\n+ &in_archive_stream, T &output, const std::string &name=\"data\")\n+\u00a0 deserializes from a stream in binary\n+\u00a0\n+template\n+std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boB\bBi\bin\bna\bar\bry\byS\bSt\btr\bri\bin\bng\bg (const T &input, const std::string\n+ &name=\"data\")\n+\u00a0 serializes to a string in binary\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmB\bBi\bin\bna\bar\bry\byS\bSt\btr\bri\bin\bng\bg (const std::string &serialized,\n+ T &output, const std::string &name=\"data\")\n+\u00a0 deserializes from a string in binary\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boB\bBi\bin\bna\bar\bry\byF\bFi\bil\ble\be (const T &input, const std::string\n+ &filename, const std::string &name=\"data\")\n+\u00a0 serializes to a binary file\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmB\bBi\bin\bna\bar\bry\byF\bFi\bil\ble\be (const std::string &filename, T\n+ &output, const std::string &name=\"data\")\n+\u00a0 deserializes from a binary file\n+\u00a0\n+template\n+std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beB\bBi\bin\bna\bar\bry\by (const T &input, const std::string\n+ &name=\"data\")\n+\u00a0 serializes to a string in binary\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beB\bBi\bin\bna\bar\bry\by (const std::string &serialized, T\n+ &output, const std::string &name=\"data\")\n+\u00a0 deserializes from a string in binary\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A thin wrapper around std::set that uses boost's fast_pool_allocator.\n+Convenience functions for serializing data structures via boost.serialization.\n Author\n+ Alex Cunningham\n Richard Roberts\n Date\n- Oct 17, 2010\n+ Feb 7, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n+ * _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00062_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00062_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastSet.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/serialization.h Source File\n \n \n \n \n \n \n \n@@ -98,162 +98,319 @@\n
No Matches
\n \n \n \n \n \n
\n-
FastSet.h
\n+
serialization.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <boost/version.hpp>
\n-
22#if BOOST_VERSION >= 107400
\n-
23#include <boost/serialization/library_version_type.hpp>
\n-
24#endif
\n-
25#include <boost/serialization/nvp.hpp>
\n-
26#include <boost/serialization/set.hpp>
\n-\n-
28#include <gtsam/base/Testable.h>
\n-
29
\n-
30#include <functional>
\n-
31#include <set>
\n-
32
\n-
33namespace boost {
\n-
34namespace serialization {
\n-
35class access;
\n-
36} /* namespace serialization */
\n-
37} /* namespace boost */
\n-
38
\n-
39namespace gtsam {
\n-
40
\n-
48template<typename VALUE>
\n-
\n-
49class FastSet: public std::set<VALUE, std::less<VALUE>,
\n-
50 typename internal::FastDefaultAllocator<VALUE>::type> {
\n-
51
\n-
52 BOOST_CONCEPT_ASSERT ((IsTestable<VALUE> ));
\n-
53
\n-
54public:
\n+
20#pragma once
\n+
21
\n+
22#include <Eigen/Core>
\n+
23#include <fstream>
\n+
24#include <sstream>
\n+
25#include <string>
\n+
26
\n+
27// includes for standard serialization types
\n+
28#include <boost/serialization/version.hpp>
\n+
29#include <boost/serialization/optional.hpp>
\n+
30#include <boost/serialization/shared_ptr.hpp>
\n+
31#include <boost/serialization/vector.hpp>
\n+
32#include <boost/serialization/map.hpp>
\n+
33#include <boost/serialization/list.hpp>
\n+
34#include <boost/serialization/deque.hpp>
\n+
35#include <boost/serialization/weak_ptr.hpp>
\n+
36
\n+
37#include <boost/archive/text_oarchive.hpp>
\n+
38#include <boost/archive/text_iarchive.hpp>
\n+
39#include <boost/archive/xml_iarchive.hpp>
\n+
40#include <boost/archive/xml_oarchive.hpp>
\n+
41#include <boost/archive/binary_iarchive.hpp>
\n+
42#include <boost/archive/binary_oarchive.hpp>
\n+
43#include <boost/serialization/export.hpp>
\n+
44
\n+
45// Workaround a bug in GCC >= 7 and C++17
\n+
46// ref. https://gitlab.com/libeigen/eigen/-/issues/1676
\n+
47#ifdef __GNUC__
\n+
48#if __GNUC__ >= 7 && __cplusplus >= 201703L
\n+
49namespace boost { namespace serialization { struct U; } }
\n+
50namespace Eigen { namespace internal {
\n+
51template<> struct traits<boost::serialization::U> {enum {Flags=0};};
\n+
52} }
\n+
53#endif
\n+
54#endif
\n
55
\n-
56 typedef std::set<VALUE, std::less<VALUE>,
\n-
57 typename internal::FastDefaultAllocator<VALUE>::type> Base;
\n-
58
\n-
59 using Base::Base; // Inherit the set constructors
\n-
60
\n-
61 FastSet() = default;
\n-
62
\n-
64 template<typename INPUTCONTAINER>
\n-
\n-
65 explicit FastSet(const INPUTCONTAINER& container) :
\n-
66 Base(container.begin(), container.end()) {
\n-
67 }
\n+
56namespace gtsam {
\n+
57
\n+
63template <class T>
\n+
\n+
64void serializeToStream(const T& input, std::ostream& out_archive_stream) {
\n+
65 boost::archive::text_oarchive out_archive(out_archive_stream);
\n+
66 out_archive << input;
\n+
67}
\n
\n
68
\n-
\n-\n-
71 Base(x) {
\n-
72 }
\n-
\n-
73
\n-
\n-
75 FastSet(const Base& x) :
\n-
76 Base(x) {
\n-
77 }
\n-
\n-
78
\n-
79#ifdef GTSAM_ALLOCATOR_BOOSTPOOL
\n-
81 FastSet(const std::set<VALUE>& x) {
\n-
82 // This if statement works around a bug in boost pool allocator and/or
\n-
83 // STL vector where if the size is zero, the pool allocator will allocate
\n-
84 // huge amounts of memory.
\n-
85 if(x.size() > 0)
\n-
86 Base::insert(x.begin(), x.end());
\n-
87 }
\n-
88#endif
\n-
89
\n-
\n-
91 operator std::set<VALUE>() const {
\n-
92 return std::set<VALUE>(this->begin(), this->end());
\n-
93 }
\n-
\n-
94
\n-
\n-
96 bool exists(const VALUE& e) const {
\n-
97 return this->find(e) != this->end();
\n-
98 }
\n-
\n-
99
\n-
\n-
101 void print(const std::string& str = "") const {
\n-
102 for (typename Base::const_iterator it = this->begin(); it != this->end(); ++it)
\n-
103 traits<VALUE>::Print(*it, str);
\n-
104 }
\n-
\n-
105
\n-
\n-
107 bool equals(const FastSet<VALUE>& other, double tol = 1e-9) const {
\n-
108 typename Base::const_iterator it1 = this->begin(), it2 = other.begin();
\n-
109 while (it1 != this->end()) {
\n-
110 if (it2 == other.end() || !traits<VALUE>::Equals(*it2, *it2, tol))
\n-
111 return false;
\n-
112 ++it1;
\n-
113 ++it2;
\n-
114 }
\n-
115 return true;
\n-
116 }
\n+
70template <class T>
\n+
\n+
71void deserializeFromStream(std::istream& in_archive_stream, T& output) {
\n+
72 boost::archive::text_iarchive in_archive(in_archive_stream);
\n+
73 in_archive >> output;
\n+
74}
\n+
\n+
75
\n+
77template <class T>
\n+
\n+
78std::string serializeToString(const T& input) {
\n+
79 std::ostringstream out_archive_stream;
\n+
80 serializeToStream(input, out_archive_stream);
\n+
81 return out_archive_stream.str();
\n+
82}
\n+
\n+
83
\n+
85template <class T>
\n+
\n+
86void deserializeFromString(const std::string& serialized, T& output) {
\n+
87 std::istringstream in_archive_stream(serialized);
\n+
88 deserializeFromStream(in_archive_stream, output);
\n+
89}
\n+
\n+
90
\n+
92template <class T>
\n+
\n+
93bool serializeToFile(const T& input, const std::string& filename) {
\n+
94 std::ofstream out_archive_stream(filename.c_str());
\n+
95 if (!out_archive_stream.is_open()) return false;
\n+
96 serializeToStream(input, out_archive_stream);
\n+
97 out_archive_stream.close();
\n+
98 return true;
\n+
99}
\n+
\n+
100
\n+
102template <class T>
\n+
\n+
103bool deserializeFromFile(const std::string& filename, T& output) {
\n+
104 std::ifstream in_archive_stream(filename.c_str());
\n+
105 if (!in_archive_stream.is_open()) return false;
\n+
106 deserializeFromStream(in_archive_stream, output);
\n+
107 in_archive_stream.close();
\n+
108 return true;
\n+
109}
\n+
\n+
110
\n+
112template <class T>
\n+
\n+
113std::string serialize(const T& input) {
\n+
114 return serializeToString(input);
\n+
115}
\n
\n-
117
\n+
116
\n+
118template <class T>
\n
\n-
119 void merge(const FastSet& other) {
\n-
120 Base::insert(other.begin(), other.end());
\n-
121 }
\n-
\n-
122
\n-
123private:
\n-\n-
126 template<class ARCHIVE>
\n-
127 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
128 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
129 }
\n-
130};
\n-
\n-
131
\n-
132}
\n-
An easy way to control which allocator is used for Fast* collections.
\n-
Concept check for values that can be used in unit tests.
\n+
119void deserialize(const std::string& serialized, T& output) {
\n+
120 deserializeFromString(serialized, output);
\n+
121}
\n+
\n+
123
\n+
129template <class T>
\n+
\n+
130void serializeToXMLStream(const T& input, std::ostream& out_archive_stream,
\n+
131 const std::string& name = "data") {
\n+
132 boost::archive::xml_oarchive out_archive(out_archive_stream);
\n+
133 out_archive << boost::serialization::make_nvp(name.c_str(), input);
\n+
134}
\n+
\n+
135
\n+
137template <class T>
\n+
\n+
138void deserializeFromXMLStream(std::istream& in_archive_stream, T& output,
\n+
139 const std::string& name = "data") {
\n+
140 boost::archive::xml_iarchive in_archive(in_archive_stream);
\n+
141 in_archive >> boost::serialization::make_nvp(name.c_str(), output);
\n+
142}
\n+
\n+
143
\n+
145template <class T>
\n+
\n+
146std::string serializeToXMLString(const T& input,
\n+
147 const std::string& name = "data") {
\n+
148 std::ostringstream out_archive_stream;
\n+
149 serializeToXMLStream(input, out_archive_stream, name);
\n+
150 return out_archive_stream.str();
\n+
151}
\n+
\n+
152
\n+
154template <class T>
\n+
\n+
155void deserializeFromXMLString(const std::string& serialized, T& output,
\n+
156 const std::string& name = "data") {
\n+
157 std::istringstream in_archive_stream(serialized);
\n+
158 deserializeFromXMLStream(in_archive_stream, output, name);
\n+
159}
\n+
\n+
160
\n+
162template <class T>
\n+
\n+
163bool serializeToXMLFile(const T& input, const std::string& filename,
\n+
164 const std::string& name = "data") {
\n+
165 std::ofstream out_archive_stream(filename.c_str());
\n+
166 if (!out_archive_stream.is_open()) return false;
\n+
167 serializeToXMLStream(input, out_archive_stream, name);
\n+
168 out_archive_stream.close();
\n+
169 return true;
\n+
170}
\n+
\n+
171
\n+
173template <class T>
\n+
\n+
174bool deserializeFromXMLFile(const std::string& filename, T& output,
\n+
175 const std::string& name = "data") {
\n+
176 std::ifstream in_archive_stream(filename.c_str());
\n+
177 if (!in_archive_stream.is_open()) return false;
\n+
178 deserializeFromXMLStream(in_archive_stream, output, name);
\n+
179 in_archive_stream.close();
\n+
180 return true;
\n+
181}
\n+
\n+
182
\n+
184template <class T>
\n+
\n+
185std::string serializeXML(const T& input,
\n+
186 const std::string& name = "data") {
\n+
187 return serializeToXMLString(input, name);
\n+
188}
\n+
\n+
189
\n+
191template <class T>
\n+
\n+
192void deserializeXML(const std::string& serialized, T& output,
\n+
193 const std::string& name = "data") {
\n+
194 deserializeFromXMLString(serialized, output, name);
\n+
195}
\n+
\n+
197
\n+
203template <class T>
\n+
\n+
204void serializeToBinaryStream(const T& input, std::ostream& out_archive_stream,
\n+
205 const std::string& name = "data") {
\n+
206 boost::archive::binary_oarchive out_archive(out_archive_stream);
\n+
207 out_archive << boost::serialization::make_nvp(name.c_str(), input);
\n+
208}
\n+
\n+
209
\n+
211template <class T>
\n+
\n+
212void deserializeFromBinaryStream(std::istream& in_archive_stream, T& output,
\n+
213 const std::string& name = "data") {
\n+
214 boost::archive::binary_iarchive in_archive(in_archive_stream);
\n+
215 in_archive >> boost::serialization::make_nvp(name.c_str(), output);
\n+
216}
\n+
\n+
217
\n+
219template <class T>
\n+
\n+
220std::string serializeToBinaryString(const T& input,
\n+
221 const std::string& name = "data") {
\n+
222 std::ostringstream out_archive_stream;
\n+
223 serializeToBinaryStream(input, out_archive_stream, name);
\n+
224 return out_archive_stream.str();
\n+
225}
\n+
\n+
226
\n+
228template <class T>
\n+
\n+
229void deserializeFromBinaryString(const std::string& serialized, T& output,
\n+
230 const std::string& name = "data") {
\n+
231 std::istringstream in_archive_stream(serialized);
\n+
232 deserializeFromBinaryStream(in_archive_stream, output, name);
\n+
233}
\n+
\n+
234
\n+
236template <class T>
\n+
\n+
237bool serializeToBinaryFile(const T& input, const std::string& filename,
\n+
238 const std::string& name = "data") {
\n+
239 std::ofstream out_archive_stream(filename.c_str());
\n+
240 if (!out_archive_stream.is_open()) return false;
\n+
241 serializeToBinaryStream(input, out_archive_stream, name);
\n+
242 out_archive_stream.close();
\n+
243 return true;
\n+
244}
\n+
\n+
245
\n+
247template <class T>
\n+
\n+
248bool deserializeFromBinaryFile(const std::string& filename, T& output,
\n+
249 const std::string& name = "data") {
\n+
250 std::ifstream in_archive_stream(filename.c_str());
\n+
251 if (!in_archive_stream.is_open()) return false;
\n+
252 deserializeFromBinaryStream(in_archive_stream, output, name);
\n+
253 in_archive_stream.close();
\n+
254 return true;
\n+
255}
\n+
\n+
256
\n+
258template <class T>
\n+
\n+
259std::string serializeBinary(const T& input,
\n+
260 const std::string& name = "data") {
\n+
261 return serializeToBinaryString(input, name);
\n+
262}
\n+
\n+
263
\n+
265template <class T>
\n+
\n+
266void deserializeBinary(const std::string& serialized, T& output,
\n+
267 const std::string& name = "data") {
\n+
268 deserializeFromBinaryString(serialized, output, name);
\n+
269}
\n+
\n+
271
\n+
272} // namespace gtsam
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
FastSet is a thin wrapper around std::set that uses the boost fast_pool_allocator instead of the defa...
Definition FastSet.h:50
\n-
void merge(const FastSet &other)
insert another set: handy for MATLAB access
Definition FastSet.h:119
\n-
void print(const std::string &str="") const
Print to implement Testable: pretty basic.
Definition FastSet.h:101
\n-
FastSet(const INPUTCONTAINER &container)
Constructor from a iterable container, passes through to base class.
Definition FastSet.h:65
\n-
FastSet(const FastSet< VALUE > &x)
Copy constructor from another FastSet.
Definition FastSet.h:70
\n-
bool exists(const VALUE &e) const
Handy 'exists' function.
Definition FastSet.h:96
\n-
bool equals(const FastSet< VALUE > &other, double tol=1e-9) const
Check for equality within tolerance to implement Testable.
Definition FastSet.h:107
\n-
friend class boost::serialization::access
Serialization function.
Definition FastSet.h:125
\n-
FastSet(const Base &x)
Copy constructor from the base set class.
Definition FastSet.h:75
\n-
FastSet()=default
Default constructor.
\n-
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n+
void serializeToStream(const T &input, std::ostream &out_archive_stream)
Definition serialization.h:64
\n+
bool deserializeFromXMLFile(const std::string &filename, T &output, const std::string &name="data")
deserializes from an XML file
Definition serialization.h:174
\n+
std::string serializeToXMLString(const T &input, const std::string &name="data")
serializes to a string in XML
Definition serialization.h:146
\n+
void deserializeFromString(const std::string &serialized, T &output)
deserializes from a string
Definition serialization.h:86
\n+
std::string serialize(const T &input)
serializes to a string
Definition serialization.h:113
\n+
void deserializeFromBinaryString(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in binary
Definition serialization.h:229
\n+
void deserializeBinary(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in binary
Definition serialization.h:266
\n+
void deserializeFromXMLString(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in XML
Definition serialization.h:155
\n+
std::string serializeToBinaryString(const T &input, const std::string &name="data")
serializes to a string in binary
Definition serialization.h:220
\n+
void deserializeXML(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in XML
Definition serialization.h:192
\n+
bool serializeToXMLFile(const T &input, const std::string &filename, const std::string &name="data")
serializes to an XML file
Definition serialization.h:163
\n+
void deserializeFromXMLStream(std::istream &in_archive_stream, T &output, const std::string &name="data")
deserializes from a stream in XML
Definition serialization.h:138
\n+
void deserializeFromBinaryStream(std::istream &in_archive_stream, T &output, const std::string &name="data")
deserializes from a stream in binary
Definition serialization.h:212
\n+
std::string serializeXML(const T &input, const std::string &name="data")
serializes to a string in XML
Definition serialization.h:185
\n+
std::string serializeToString(const T &input)
serializes to a string
Definition serialization.h:78
\n+
bool serializeToFile(const T &input, const std::string &filename)
serializes to a file
Definition serialization.h:93
\n+
void deserialize(const std::string &serialized, T &output)
deserializes from a string
Definition serialization.h:119
\n+
void serializeToBinaryStream(const T &input, std::ostream &out_archive_stream, const std::string &name="data")
Definition serialization.h:204
\n+
void deserializeFromStream(std::istream &in_archive_stream, T &output)
deserializes from a stream
Definition serialization.h:71
\n+
std::string serializeBinary(const T &input, const std::string &name="data")
serializes to a string in binary
Definition serialization.h:259
\n+
bool serializeToBinaryFile(const T &input, const std::string &filename, const std::string &name="data")
serializes to a binary file
Definition serialization.h:237
\n+
bool deserializeFromFile(const std::string &filename, T &output)
deserializes from a file
Definition serialization.h:103
\n+
void serializeToXMLStream(const T &input, std::ostream &out_archive_stream, const std::string &name="data")
Definition serialization.h:130
\n+
bool deserializeFromBinaryFile(const std::string &filename, T &output, const std::string &name="data")
deserializes from a binary file
Definition serialization.h:248
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,176 +1,349 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FastSet.h\n+serialization.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include \n-22#if BOOST_VERSION >= 107400\n-23#include \n-24#endif\n-25#include \n-26#include \n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-29\n-30#include \n-31#include \n-32\n-33namespace boost {\n-34namespace serialization {\n-35class access;\n-36} /* namespace serialization */\n-37} /* namespace boost */\n-38\n-39namespace _\bg_\bt_\bs_\ba_\bm {\n-40\n-48template\n-_\b4_\b9class _\bF_\ba_\bs_\bt_\bS_\be_\bt: public std::set,\n-50 typename internal::FastDefaultAllocator::type> {\n-51\n-52 BOOST_CONCEPT_ASSERT ((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bV_\bA_\bL_\bU_\bE_\b> ));\n-53\n-54public:\n+20#pragma once\n+21\n+22#include \n+23#include \n+24#include \n+25#include \n+26\n+27// includes for standard serialization types\n+28#include \n+29#include \n+30#include \n+31#include \n+32#include \n+33#include \n+34#include \n+35#include \n+36\n+37#include \n+38#include \n+39#include \n+40#include \n+41#include \n+42#include \n+43#include \n+44\n+45// Workaround a bug in GCC >= 7 and C++17\n+46// ref. https://gitlab.com/libeigen/eigen/-/issues/1676\n+47#ifdef __GNUC__\n+48#if __GNUC__ >= 7 && __cplusplus >= 201703L\n+49namespace boost { namespace serialization { struct U; } }\n+50namespace Eigen { namespace internal {\n+51template<> struct traits {enum {Flags=0};};\n+52} }\n+53#endif\n+54#endif\n 55\n-56 typedef std::set,\n-57 typename internal::FastDefaultAllocator::type> Base;\n-58\n-59 using Base::Base; // Inherit the set constructors\n-60\n-_\b6_\b1 _\bF_\ba_\bs_\bt_\bS_\be_\bt() = default;\n-62\n-64 template\n-_\b6_\b5 explicit _\bF_\ba_\bs_\bt_\bS_\be_\bt(const INPUTCONTAINER& container) :\n-66 Base(container.begin(), container.end()) {\n-67 }\n+56namespace _\bg_\bt_\bs_\ba_\bm {\n+57\n+63template \n+_\b6_\b4void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\be_\ba_\bm(const T& input, std::ostream& out_archive_stream) {\n+65 boost::archive::text_oarchive out_archive(out_archive_stream);\n+66 out_archive << input;\n+67}\n 68\n-_\b7_\b0 _\bF_\ba_\bs_\bt_\bS_\be_\bt(const _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\bV_\bA_\bL_\bU_\bE_\b>& x) :\n-71 Base(x) {\n-72 }\n-73\n-_\b7_\b5 _\bF_\ba_\bs_\bt_\bS_\be_\bt(const Base& x) :\n-76 Base(x) {\n-77 }\n-78\n-79#ifdef GTSAM_ALLOCATOR_BOOSTPOOL\n-81 _\bF_\ba_\bs_\bt_\bS_\be_\bt(const std::set& x) {\n-82 // This if statement works around a bug in boost pool allocator and/or\n-83 // STL vector where if the size is zero, the pool allocator will allocate\n-84 // huge amounts of memory.\n-85 if(x.size() > 0)\n-86 Base::insert(x.begin(), x.end());\n-87 }\n-88#endif\n-89\n-_\b9_\b1 operator std::set() const {\n-92 return std::set(this->begin(), this->end());\n-93 }\n-94\n-_\b9_\b6 bool _\be_\bx_\bi_\bs_\bt_\bs(const VALUE& e) const {\n-97 return this->find(e) != this->end();\n-98 }\n-99\n-_\b1_\b0_\b1 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const {\n-102 for (typename Base::const_iterator it = this->begin(); it != this->end();\n-++it)\n-103 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(*it, str);\n-104 }\n-105\n-_\b1_\b0_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\bV_\bA_\bL_\bU_\bE_\b>& other, double tol = 1e-9) const {\n-108 typename Base::const_iterator it1 = this->begin(), it2 = other.begin();\n-109 while (it1 != this->end()) {\n-110 if (it2 == other.end() || !_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(*it2, *it2, tol))\n-111 return false;\n-112 ++it1;\n-113 ++it2;\n-114 }\n-115 return true;\n-116 }\n-117\n-_\b1_\b1_\b9 void _\bm_\be_\br_\bg_\be(const _\bF_\ba_\bs_\bt_\bS_\be_\bt& other) {\n-120 Base::insert(other.begin(), other.end());\n-121 }\n-122\n-123private:\n-_\b1_\b2_\b5 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-126 template\n-127 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-128 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n-129 }\n-130};\n-131\n-132}\n-_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n-An easy way to control which allocator is used for Fast* collections.\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n+70template \n+_\b7_\b1void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\be_\ba_\bm(std::istream& in_archive_stream, T& output) {\n+72 boost::archive::text_iarchive in_archive(in_archive_stream);\n+73 in_archive >> output;\n+74}\n+75\n+77template \n+_\b7_\b8std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\bi_\bn_\bg(const T& input) {\n+79 std::ostringstream out_archive_stream;\n+80 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream);\n+81 return out_archive_stream.str();\n+82}\n+83\n+85template \n+_\b8_\b6void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\bi_\bn_\bg(const std::string& serialized, T& output) {\n+87 std::istringstream in_archive_stream(serialized);\n+88 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output);\n+89}\n+90\n+92template \n+_\b9_\b3bool _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bF_\bi_\bl_\be(const T& input, const std::string& filename) {\n+94 std::ofstream out_archive_stream(filename.c_str());\n+95 if (!out_archive_stream.is_open()) return false;\n+96 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream);\n+97 out_archive_stream.close();\n+98 return true;\n+99}\n+100\n+102template \n+_\b1_\b0_\b3bool _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bF_\bi_\bl_\be(const std::string& filename, T& output) {\n+104 std::ifstream in_archive_stream(filename.c_str());\n+105 if (!in_archive_stream.is_open()) return false;\n+106 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output);\n+107 in_archive_stream.close();\n+108 return true;\n+109}\n+110\n+112template \n+_\b1_\b1_\b3std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(const T& input) {\n+114 return _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\bi_\bn_\bg(input);\n+115}\n+116\n+118template \n+_\b1_\b1_\b9void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(const std::string& serialized, T& output) {\n+120 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\bi_\bn_\bg(serialized, output);\n+121}\n+123\n+129template \n+_\b1_\b3_\b0void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(const T& input, std::ostream& out_archive_stream,\n+131 const std::string& name = \"data\") {\n+132 boost::archive::xml_oarchive out_archive(out_archive_stream);\n+133 out_archive << boost::serialization::make_nvp(name.c_str(), input);\n+134}\n+135\n+137template \n+_\b1_\b3_\b8void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(std::istream& in_archive_stream, T& output,\n+139 const std::string& name = \"data\") {\n+140 boost::archive::xml_iarchive in_archive(in_archive_stream);\n+141 in_archive >> boost::serialization::make_nvp(name.c_str(), output);\n+142}\n+143\n+145template \n+_\b1_\b4_\b6std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg(const T& input,\n+147 const std::string& name = \"data\") {\n+148 std::ostringstream out_archive_stream;\n+149 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream, name);\n+150 return out_archive_stream.str();\n+151}\n+152\n+154template \n+_\b1_\b5_\b5void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg(const std::string& serialized, T& output,\n+156 const std::string& name = \"data\") {\n+157 std::istringstream in_archive_stream(serialized);\n+158 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output, name);\n+159}\n+160\n+162template \n+_\b1_\b6_\b3bool _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bF_\bi_\bl_\be(const T& input, const std::string& filename,\n+164 const std::string& name = \"data\") {\n+165 std::ofstream out_archive_stream(filename.c_str());\n+166 if (!out_archive_stream.is_open()) return false;\n+167 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream, name);\n+168 out_archive_stream.close();\n+169 return true;\n+170}\n+171\n+173template \n+_\b1_\b7_\b4bool _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bF_\bi_\bl_\be(const std::string& filename, T& output,\n+175 const std::string& name = \"data\") {\n+176 std::ifstream in_archive_stream(filename.c_str());\n+177 if (!in_archive_stream.is_open()) return false;\n+178 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output, name);\n+179 in_archive_stream.close();\n+180 return true;\n+181}\n+182\n+184template \n+_\b1_\b8_\b5std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL(const T& input,\n+186 const std::string& name = \"data\") {\n+187 return _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg(input, name);\n+188}\n+189\n+191template \n+_\b1_\b9_\b2void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL(const std::string& serialized, T& output,\n+193 const std::string& name = \"data\") {\n+194 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg(serialized, output, name);\n+195}\n+197\n+203template \n+_\b2_\b0_\b4void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(const T& input, std::ostream&\n+out_archive_stream,\n+205 const std::string& name = \"data\") {\n+206 boost::archive::binary_oarchive out_archive(out_archive_stream);\n+207 out_archive << boost::serialization::make_nvp(name.c_str(), input);\n+208}\n+209\n+211template \n+_\b2_\b1_\b2void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(std::istream& in_archive_stream, T& output,\n+213 const std::string& name = \"data\") {\n+214 boost::archive::binary_iarchive in_archive(in_archive_stream);\n+215 in_archive >> boost::serialization::make_nvp(name.c_str(), output);\n+216}\n+217\n+219template \n+_\b2_\b2_\b0std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg(const T& input,\n+221 const std::string& name = \"data\") {\n+222 std::ostringstream out_archive_stream;\n+223 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream, name);\n+224 return out_archive_stream.str();\n+225}\n+226\n+228template \n+_\b2_\b2_\b9void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg(const std::string& serialized, T& output,\n+230 const std::string& name = \"data\") {\n+231 std::istringstream in_archive_stream(serialized);\n+232 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output, name);\n+233}\n+234\n+236template \n+_\b2_\b3_\b7bool _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be(const T& input, const std::string& filename,\n+238 const std::string& name = \"data\") {\n+239 std::ofstream out_archive_stream(filename.c_str());\n+240 if (!out_archive_stream.is_open()) return false;\n+241 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream, name);\n+242 out_archive_stream.close();\n+243 return true;\n+244}\n+245\n+247template \n+_\b2_\b4_\b8bool _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be(const std::string& filename, T& output,\n+249 const std::string& name = \"data\") {\n+250 std::ifstream in_archive_stream(filename.c_str());\n+251 if (!in_archive_stream.is_open()) return false;\n+252 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output, name);\n+253 in_archive_stream.close();\n+254 return true;\n+255}\n+256\n+258template \n+_\b2_\b5_\b9std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by(const T& input,\n+260 const std::string& name = \"data\") {\n+261 return _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg(input, name);\n+262}\n+263\n+265template \n+_\b2_\b6_\b6void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by(const std::string& serialized, T& output,\n+267 const std::string& name = \"data\") {\n+268 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg(serialized, output, name);\n+269}\n+271\n+272} // namespace gtsam\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n-FastSet is a thin wrapper around std::set that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bm_\be_\br_\bg_\be\n-void merge(const FastSet &other)\n-insert another set: handy for MATLAB access\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:119\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &str=\"\") const\n-Print to implement Testable: pretty basic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n-FastSet(const INPUTCONTAINER &container)\n-Constructor from a iterable container, passes through to base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n-FastSet(const FastSet< VALUE > &x)\n-Copy constructor from another FastSet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(const VALUE &e) const\n-Handy 'exists' function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const FastSet< VALUE > &other, double tol=1e-9) const\n-Check for equality within tolerance to implement Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:125\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n-FastSet(const Base &x)\n-Copy constructor from the base set class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n-FastSet()=default\n-Default constructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A testable concept check that should be placed in applicable unit tests and in\n-generic algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\be_\ba_\bm\n+void serializeToStream(const T &input, std::ostream &out_archive_stream)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bF_\bi_\bl_\be\n+bool deserializeFromXMLFile(const std::string &filename, T &output, const std::\n+string &name=\"data\")\n+deserializes from an XML file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg\n+std::string serializeToXMLString(const T &input, const std::string\n+&name=\"data\")\n+serializes to a string in XML\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:146\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\bi_\bn_\bg\n+void deserializeFromString(const std::string &serialized, T &output)\n+deserializes from a string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n+std::string serialize(const T &input)\n+serializes to a string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg\n+void deserializeFromBinaryString(const std::string &serialized, T &output,\n+const std::string &name=\"data\")\n+deserializes from a string in binary\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:229\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by\n+void deserializeBinary(const std::string &serialized, T &output, const std::\n+string &name=\"data\")\n+deserializes from a string in binary\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:266\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg\n+void deserializeFromXMLString(const std::string &serialized, T &output, const\n+std::string &name=\"data\")\n+deserializes from a string in XML\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg\n+std::string serializeToBinaryString(const T &input, const std::string\n+&name=\"data\")\n+serializes to a string in binary\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:220\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL\n+void deserializeXML(const std::string &serialized, T &output, const std::string\n+&name=\"data\")\n+deserializes from a string in XML\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bF_\bi_\bl_\be\n+bool serializeToXMLFile(const T &input, const std::string &filename, const\n+std::string &name=\"data\")\n+serializes to an XML file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm\n+void deserializeFromXMLStream(std::istream &in_archive_stream, T &output, const\n+std::string &name=\"data\")\n+deserializes from a stream in XML\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm\n+void deserializeFromBinaryStream(std::istream &in_archive_stream, T &output,\n+const std::string &name=\"data\")\n+deserializes from a stream in binary\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL\n+std::string serializeXML(const T &input, const std::string &name=\"data\")\n+serializes to a string in XML\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\bi_\bn_\bg\n+std::string serializeToString(const T &input)\n+serializes to a string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bF_\bi_\bl_\be\n+bool serializeToFile(const T &input, const std::string &filename)\n+serializes to a file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n+void deserialize(const std::string &serialized, T &output)\n+deserializes from a string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:119\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm\n+void serializeToBinaryStream(const T &input, std::ostream &out_archive_stream,\n+const std::string &name=\"data\")\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:204\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\be_\ba_\bm\n+void deserializeFromStream(std::istream &in_archive_stream, T &output)\n+deserializes from a stream\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by\n+std::string serializeBinary(const T &input, const std::string &name=\"data\")\n+serializes to a string in binary\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:259\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be\n+bool serializeToBinaryFile(const T &input, const std::string &filename, const\n+std::string &name=\"data\")\n+serializes to a binary file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:237\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bF_\bi_\bl_\be\n+bool deserializeFromFile(const std::string &filename, T &output)\n+deserializes from a file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm\n+void serializeToXMLStream(const T &input, std::ostream &out_archive_stream,\n+const std::string &name=\"data\")\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be\n+bool deserializeFromBinaryFile(const std::string &filename, T &output, const\n+std::string &name=\"data\")\n+deserializes from a binary file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:248\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n+ * _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00068.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00068.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/cholesky.cpp File Reference\n \n \n \n \n \n \n \n@@ -96,157 +96,46 @@\n \n \n \n
\n \n-
Matrix.cpp File Reference
\n+
cholesky.cpp File Reference
\n
\n
\n \n-

matrix class \n+

Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky. \n More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n

\n Functions

\n-bool gtsam::assert_equal (const Matrix &A, const Matrix &B, double tol=1e-9)
 equals with an tolerance, prints out message if unequal
 
\n-bool gtsam::assert_inequal (const Matrix &A, const Matrix &B, double tol=1e-9)
 inequals with an tolerance, prints out message if within tolerance
 
\n-bool gtsam::assert_equal (const std::list< Matrix > &As, const std::list< Matrix > &Bs, double tol=1e-9)
 equals with an tolerance, prints out message if unequal
 
\n-bool gtsam::linear_independent (const Matrix &A, const Matrix &B, double tol=1e-9)
 check whether the rows of two matrices are linear independent
 
\n-bool gtsam::linear_dependent (const Matrix &A, const Matrix &B, double tol=1e-9)
 check whether the rows of two matrices are linear dependent
 
\n-Vector gtsam::operator^ (const Matrix &A, const Vector &v)
 overload ^ for trans(A)*v We transpose the vectors for speed.
 
\n-const Eigen::IOFormat & gtsam::matlabFormat ()
 
\n-void gtsam::print (const Matrix &A, const std::string &s, std::ostream &stream)
 print without optional string, must specify cout yourself
 
\n-void gtsam::print (const Matrix &A, const std::string &s="")
 print with optional string to cout
 
\n-void gtsam::save (const Matrix &A, const std::string &s, const std::string &filename)
 save a matrix to file, which can be loaded by matlab
 
istream & gtsam::operator>> (std::istream &inputStream, Matrix &destinationMatrix)
 Read a matrix from an input stream, such as a file.
 
\n-Matrix gtsam::diag (const std::vector< Matrix > &Hs)
 Create a matrix with submatrices along its diagonal.
 
\n-Vector gtsam::columnNormSquare (const Matrix &A)
 
pair< Matrix, Matrix > gtsam::qr (const Matrix &A)
 Householder QR factorization, Golub & Van Loan p 224, explicit version
\n-
 
list< boost::tuple< Vector, double, double > > gtsam::weighted_eliminate (Matrix &A, Vector &b, const Vector &sigmas)
 Imperative algorithm for in-place full elimination with weights and constraint handling.
 
void gtsam::householder_ (Matrix &A, size_t k, bool copy_vectors)
 Imperative version of Householder QR factorization, Golub & Van Loan p 224 version with Householder vectors below diagonal, as in GVL.
 
void gtsam::householder (Matrix &A, size_t k)
 Householder tranformation, zeros below diagonal.
 
Vector gtsam::backSubstituteLower (const Matrix &L, const Vector &b, bool unit=false)
 backSubstitute L*x=b
 
Vector gtsam::backSubstituteUpper (const Matrix &U, const Vector &b, bool unit=false)
 backSubstitute U*x=b
 
Vector gtsam::backSubstituteUpper (const Vector &b, const Matrix &U, bool unit=false)
 backSubstitute x'*U=b'
 
Matrix gtsam::stack (size_t nrMatrices,...)
 create a matrix by stacking other matrices Given a set of matrices: A1, A2, A3...
 
\n-Matrix gtsam::stack (const std::vector< Matrix > &blocks)
 
Matrix gtsam::collect (const std::vector< const Matrix * > &matrices, size_t m=0, size_t n=0)
 create a matrix by concatenating Given a set of matrices: A1, A2, A3... If all matrices have the same size, specifying single matrix dimensions will avoid the lookup of dimensions
 
\n-Matrix gtsam::collect (size_t nrMatrices,...)
 
void gtsam::vector_scale_inplace (const Vector &v, Matrix &A, bool inf_mask=false)
 scales a matrix row or column by the values in a vector Arguments (Matrix, Vector) scales the columns, (Vector, Matrix) scales the rows
 
\n-Matrix gtsam::vector_scale (const Vector &v, const Matrix &A, bool inf_mask)
 
\n-Matrix gtsam::vector_scale (const Matrix &A, const Vector &v, bool inf_mask)
 
\n-Matrix gtsam::LLt (const Matrix &A)
 
\n-Matrix gtsam::RtR (const Matrix &A)
 
Matrix gtsam::cholesky_inverse (const Matrix &A)
 Return the inverse of a S.P.D.
 
\n-Matrix gtsam::inverse_square_root (const Matrix &A)
 Use Cholesky to calculate inverse square root of a matrix.
 
void gtsam::svd (const Matrix &A, Matrix &U, Vector &S, Matrix &V)
 SVD computes economy SVD A=U*S*V'.
 
boost::tuple< int, double, Vector > gtsam::DLT (const Matrix &A, double rank_tol=1e-9)
 Direct linear transform algorithm that calls svd to find a vector v that minimizes the algebraic error A*v.
 
Matrix gtsam::expm (const Matrix &A, size_t K=7)
 Numerical exponential map, naive approach, not industrial strength !!!
 
\n-std::string gtsam::formatMatrixIndented (const std::string &label, const Matrix &matrix, bool makeVectorHorizontal)
 
void gtsam::inplace_QR (Matrix &A)
 QR factorization using Eigen's internal block QR algorithm.
 
pair< size_t, bool > gtsam::choleskyCareful (Matrix &ATA, int order=-1)
 \"Careful\" Cholesky computes the positive square-root of a positive symmetric semi-definite matrix (i.e.
 
bool gtsam::choleskyPartial (Matrix &ABC, size_t nFrontal, size_t topleft=0)
 Partial Cholesky computes a factor [R S such that [R' 0 [R S = [A B 0 L] S' I] 0 L] B' C].
 
\n

Detailed Description

\n-

matrix class

\n-
Author
Christian Potthast
\n+

Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.

\n+
Author
Richard Roberts
\n+
\n+Frank Dellaert
\n+
Date
Nov 5, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,179 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Matrix.cpp File Reference\n-matrix class _\bM_\bo_\br_\be_\b._\b._\b.\n+cholesky.cpp File Reference\n+Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n+Cholesky. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const Matrix &A,\n- const Matrix &B, double tol=1e-9)\n-\u00a0 equals with an tolerance, prints out\n- message if unequal\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_i\bin\bne\beq\bqu\bua\bal\bl (const Matrix &A,\n- const Matrix &B, double tol=1e-9)\n-\u00a0 inequals with an tolerance, prints out\n- message if within tolerance\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const std::list<\n- Matrix > &As, const std::list< Matrix >\n- &Bs, double tol=1e-9)\n-\u00a0 equals with an tolerance, prints out\n- message if unequal\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bli\bin\bne\bea\bar\br_\b_i\bin\bnd\bde\bep\bpe\ben\bnd\bde\ben\bnt\bt (const Matrix\n- &A, const Matrix &B, double tol=1e-9)\n-\u00a0 check whether the rows of two matrices are\n- linear independent\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bli\bin\bne\bea\bar\br_\b_d\bde\bep\bpe\ben\bnd\bde\ben\bnt\bt (const Matrix &A,\n- const Matrix &B, double tol=1e-9)\n-\u00a0 check whether the rows of two matrices are\n- linear dependent\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br^\b^ (const Matrix &A, const\n- Vector &v)\n-\u00a0 overload ^ for trans(A)*v We transpose the\n- vectors for speed.\n-\u00a0\n- const Eigen::IOFormat &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bma\bat\btl\bla\bab\bbF\bFo\bor\brm\bma\bat\bt ()\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Matrix &A, const std::\n- string &s, std::ostream &stream)\n-\u00a0 print without optional string, must\n- specify cout yourself\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Matrix &A, const std::\n- string &s=\"\")\n-\u00a0 print with optional string to cout\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsa\bav\bve\be (const Matrix &A, const std::\n- string &s, const std::string &filename)\n-\u00a0 save a matrix to file, which can be loaded\n- by matlab\n-\u00a0\n- istream &\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b> (std::istream\n- &inputStream, Matrix &destinationMatrix)\n-\u00a0 Read a matrix from an input stream, such\n- as a file.\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bia\bag\bg (const std::vector< Matrix >\n- &Hs)\n-\u00a0 Create a matrix with submatrices along its\n- diagonal.\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bol\blu\bum\bmn\bnN\bNo\bor\brm\bmS\bSq\bqu\bua\bar\bre\be (const Matrix &A)\n-\u00a0\n- pair< Matrix, Matrix >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bq_\br (const Matrix &A)\n- Householder QR factorization, Golub & Van\n-\u00a0 Loan p 224, explicit version\n-\n-\u00a0\n- list< boost::tuple< Vector, double, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\b__\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be (Matrix &A,\n- double > >\u00a0 Vector &b, const Vector &sigmas)\n- Imperative algorithm for in-place full\n-\u00a0 elimination with weights and constraint\n- handling.\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br_\b_ (Matrix &A, size_t k,\n- bool copy_vectors)\n- Imperative version of Householder QR\n-\u00a0 factorization, Golub & Van Loan p 224\n- version with Householder vectors below\n- diagonal, as in GVL.\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br (Matrix &A, size_t k)\n-\u00a0 Householder tranformation, zeros below\n- diagonal.\n-\u00a0\n- Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bL_\bo_\bw_\be_\br (const Matrix\n- &L, const Vector &b, bool unit=false)\n-\u00a0 backSubstitute L*x=b\n-\u00a0\n- Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br (const Matrix\n- &U, const Vector &b, bool unit=false)\n-\u00a0 backSubstitute U*x=b\n-\u00a0\n- Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br (const Vector\n- &b, const Matrix &U, bool unit=false)\n-\u00a0 backSubstitute x'*U=b'\n-\u00a0\n- Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\ba_\bc_\bk (size_t nrMatrices,...)\n-\u00a0 create a matrix by stacking other matrices\n- Given a set of matrices: A1, A2, A3...\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bta\bac\bck\bk (const std::vector< Matrix >\n- &blocks)\n-\u00a0\n- Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bl_\bl_\be_\bc_\bt (const std::vector< const\n- Matrix * > &matrices, size_t m=0, size_t\n- n=0)\n- create a matrix by concatenating Given a\n- set of matrices: A1, A2, A3... If all\n-\u00a0 matrices have the same size, specifying\n- single matrix dimensions will avoid the\n- lookup of dimensions\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bol\bll\ble\bec\bct\bt (size_t nrMatrices,...)\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bc_\ba_\bl_\be_\b__\bi_\bn_\bp_\bl_\ba_\bc_\be (const Vector\n- &v, Matrix &A, bool inf_mask=false)\n- scales a matrix row or column by the\n-\u00a0 values in a vector Arguments (Matrix,\n- Vector) scales the columns, (Vector,\n- Matrix) scales the rows\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:v\bve\bec\bct\bto\bor\br_\b_s\bsc\bca\bal\ble\be (const Vector &v,\n- const Matrix &A, bool inf_mask)\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:v\bve\bec\bct\bto\bor\br_\b_s\bsc\bca\bal\ble\be (const Matrix &A,\n- const Vector &v, bool inf_mask)\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:L\bLL\bLt\bt (const Matrix &A)\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:R\bRt\btR\bR (const Matrix &A)\n-\u00a0\n- Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b__\bi_\bn_\bv_\be_\br_\bs_\be (const Matrix &A)\n-\u00a0 Return the inverse of a S.P.D.\n-\u00a0\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnv\bve\ber\brs\bse\be_\b_s\bsq\bqu\bua\bar\bre\be_\b_r\bro\boo\bot\bt (const Matrix\n- &A)\n-\u00a0 Use Cholesky to calculate inverse square\n- root of a matrix.\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bv_\bd (const Matrix &A, Matrix &U,\n- Vector &S, Matrix &V)\n-\u00a0 SVD computes economy SVD A=U*S*V'.\n-\u00a0\n-boost::tuple< int, double, Vector >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bL_\bT (const Matrix &A, double\n- rank_tol=1e-9)\n- Direct linear transform algorithm that\n-\u00a0 calls svd to find a vector v that\n- minimizes the algebraic error A*v.\n-\u00a0\n- Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm (const Matrix &A, size_t K=7)\n-\u00a0 Numerical exponential map, naive approach,\n- not industrial strength !!!\n-\u00a0\n- std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:f\bfo\bor\brm\bma\bat\btM\bMa\bat\btr\bri\bix\bxI\bIn\bnd\bde\ben\bnt\bte\bed\bd (const std::\n- string &label, const Matrix &matrix, bool\n- makeVectorHorizontal)\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bp_\bl_\ba_\bc_\be_\b__\bQ_\bR (Matrix &A)\n-\u00a0 QR factorization using Eigen's internal\n- block QR algorithm.\n+pair< size_t, bool >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bC_\ba_\br_\be_\bf_\bu_\bl (Matrix &ATA, int order=-1)\n+\u00a0 \"Careful\" Cholesky computes the positive square-root of a\n+ positive symmetric semi-definite matrix (i.e.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl (Matrix &ABC, size_t nFrontal,\n+ size_t topleft=0)\n+\u00a0 Partial Cholesky computes a factor [R S such that [R' 0\n+ [R S = [A B 0 L] S' I] 0 L] B' C].\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-matrix class\n+Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n+Cholesky.\n Author\n- Christian Potthast\n+ Richard Roberts\n+ Frank Dellaert\n+ Date\n+ Nov 5, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bM_\ba_\bt_\br_\bi_\bx_\b._\bc_\bp_\bp\n+ * _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00068.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00068.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,29 +1,4 @@\n var a00068 = [\n- [\"assert_equal\", \"a00068.html#a3f9622226dfe06908f11b42bf0bdd22d\", null],\n- [\"assert_equal\", \"a00068.html#abb0e19bbbeaca95843e8161b89a12fda\", null],\n- [\"assert_inequal\", \"a00068.html#a7a116d0643f123ef3b15d91056506492\", null],\n- [\"backSubstituteLower\", \"a00068.html#a0d998e1b770c9864946ddb031b1c4522\", null],\n- [\"backSubstituteUpper\", \"a00068.html#a6c4876cbe85d5651a52eda0e97c60f2f\", null],\n- [\"backSubstituteUpper\", \"a00068.html#a8b0bf332d52b333dab2b20d763c8925b\", null],\n- [\"cholesky_inverse\", \"a00068.html#aba542e2cd85f08b76f80a0871a4ea713\", null],\n- [\"collect\", \"a00068.html#ad8b524ba6c9aed0d21a020999c9b5d88\", null],\n- [\"diag\", \"a00068.html#af1c32907adce74cf9edd6ee5bba5a085\", null],\n- [\"DLT\", \"a00068.html#ab2c65f1a69009a306b6a5f9ef31dcee2\", null],\n- [\"expm\", \"a00068.html#ab15462d8c16813d0a7a5b1f76a2f64b7\", null],\n- [\"householder\", \"a00068.html#a7baa2f3184a444adce108633c0265e0c\", null],\n- [\"householder_\", \"a00068.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\", null],\n- [\"inplace_QR\", \"a00068.html#a7eec9339ab5a008a28ddfaa6b2c94611\", null],\n- [\"inverse_square_root\", \"a00068.html#aff78dee59ac0250432081f39deb5f6d1\", null],\n- [\"linear_dependent\", \"a00068.html#a4b81794af72954abafbb726fc712f5db\", null],\n- [\"linear_independent\", \"a00068.html#ad8f0349471464c1fb515819d9503849a\", null],\n- [\"operator>>\", \"a00068.html#a7d85957bab2d18cf56ab9aaf95a106de\", null],\n- [\"operator^\", \"a00068.html#a2218e53a2b99c449e70aa5b7805895fc\", null],\n- [\"print\", \"a00068.html#a54fa43c89c5334314c8c75939dd5c2d7\", null],\n- [\"print\", \"a00068.html#a44ead03912d5dcf094d8421e1702ee71\", null],\n- [\"qr\", \"a00068.html#ae32c295e2c40c1e85f146a8a6266eaa8\", null],\n- [\"save\", \"a00068.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\", null],\n- [\"stack\", \"a00068.html#a5c82884a356ddd09229a5283aed04df9\", null],\n- [\"svd\", \"a00068.html#a8d7e46204d953f64a39445599dbd7eee\", null],\n- [\"vector_scale_inplace\", \"a00068.html#a24d3ad0252f91f0ec301593c45cf5af7\", null],\n- [\"weighted_eliminate\", \"a00068.html#a60019a03f26b92c6b2a08e43d153d4c0\", null]\n+ [\"choleskyCareful\", \"a00068.html#a747683f736c50bca16b3aab0e95b1b76\", null],\n+ [\"choleskyPartial\", \"a00068.html#abe82fa6aceccfa2360cf314ab44f39ad\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00071.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00071.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VerticalBlockMatrix.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,159 @@\n \n \n \n \n \n
\n \n-
VerticalBlockMatrix.h File Reference
\n+Namespaces |\n+Functions
\n+
Matrix.cpp File Reference
\n \n
\n \n-

A matrix with column blocks of pre-defined sizes. \n+

matrix class \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::VerticalBlockMatrix
 This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+bool gtsam::assert_equal (const Matrix &A, const Matrix &B, double tol=1e-9)
 equals with an tolerance, prints out message if unequal
 
\n+bool gtsam::assert_inequal (const Matrix &A, const Matrix &B, double tol=1e-9)
 inequals with an tolerance, prints out message if within tolerance
 
\n+bool gtsam::assert_equal (const std::list< Matrix > &As, const std::list< Matrix > &Bs, double tol=1e-9)
 equals with an tolerance, prints out message if unequal
 
\n+bool gtsam::linear_independent (const Matrix &A, const Matrix &B, double tol=1e-9)
 check whether the rows of two matrices are linear independent
 
\n+bool gtsam::linear_dependent (const Matrix &A, const Matrix &B, double tol=1e-9)
 check whether the rows of two matrices are linear dependent
 
\n+Vector gtsam::operator^ (const Matrix &A, const Vector &v)
 overload ^ for trans(A)*v We transpose the vectors for speed.
 
\n+const Eigen::IOFormat & gtsam::matlabFormat ()
 
\n+void gtsam::print (const Matrix &A, const std::string &s, std::ostream &stream)
 print without optional string, must specify cout yourself
 
\n+void gtsam::print (const Matrix &A, const std::string &s="")
 print with optional string to cout
 
\n+void gtsam::save (const Matrix &A, const std::string &s, const std::string &filename)
 save a matrix to file, which can be loaded by matlab
 
istream & gtsam::operator>> (std::istream &inputStream, Matrix &destinationMatrix)
 Read a matrix from an input stream, such as a file.
 
\n+Matrix gtsam::diag (const std::vector< Matrix > &Hs)
 Create a matrix with submatrices along its diagonal.
 
\n+Vector gtsam::columnNormSquare (const Matrix &A)
 
pair< Matrix, Matrix > gtsam::qr (const Matrix &A)
 Householder QR factorization, Golub & Van Loan p 224, explicit version
\n+
 
list< boost::tuple< Vector, double, double > > gtsam::weighted_eliminate (Matrix &A, Vector &b, const Vector &sigmas)
 Imperative algorithm for in-place full elimination with weights and constraint handling.
 
void gtsam::householder_ (Matrix &A, size_t k, bool copy_vectors)
 Imperative version of Householder QR factorization, Golub & Van Loan p 224 version with Householder vectors below diagonal, as in GVL.
 
void gtsam::householder (Matrix &A, size_t k)
 Householder tranformation, zeros below diagonal.
 
Vector gtsam::backSubstituteLower (const Matrix &L, const Vector &b, bool unit=false)
 backSubstitute L*x=b
 
Vector gtsam::backSubstituteUpper (const Matrix &U, const Vector &b, bool unit=false)
 backSubstitute U*x=b
 
Vector gtsam::backSubstituteUpper (const Vector &b, const Matrix &U, bool unit=false)
 backSubstitute x'*U=b'
 
Matrix gtsam::stack (size_t nrMatrices,...)
 create a matrix by stacking other matrices Given a set of matrices: A1, A2, A3...
 
\n+Matrix gtsam::stack (const std::vector< Matrix > &blocks)
 
Matrix gtsam::collect (const std::vector< const Matrix * > &matrices, size_t m=0, size_t n=0)
 create a matrix by concatenating Given a set of matrices: A1, A2, A3... If all matrices have the same size, specifying single matrix dimensions will avoid the lookup of dimensions
 
\n+Matrix gtsam::collect (size_t nrMatrices,...)
 
void gtsam::vector_scale_inplace (const Vector &v, Matrix &A, bool inf_mask=false)
 scales a matrix row or column by the values in a vector Arguments (Matrix, Vector) scales the columns, (Vector, Matrix) scales the rows
 
\n+Matrix gtsam::vector_scale (const Vector &v, const Matrix &A, bool inf_mask)
 
\n+Matrix gtsam::vector_scale (const Matrix &A, const Vector &v, bool inf_mask)
 
\n+Matrix gtsam::LLt (const Matrix &A)
 
\n+Matrix gtsam::RtR (const Matrix &A)
 
Matrix gtsam::cholesky_inverse (const Matrix &A)
 Return the inverse of a S.P.D.
 
\n+Matrix gtsam::inverse_square_root (const Matrix &A)
 Use Cholesky to calculate inverse square root of a matrix.
 
void gtsam::svd (const Matrix &A, Matrix &U, Vector &S, Matrix &V)
 SVD computes economy SVD A=U*S*V'.
 
boost::tuple< int, double, Vector > gtsam::DLT (const Matrix &A, double rank_tol=1e-9)
 Direct linear transform algorithm that calls svd to find a vector v that minimizes the algebraic error A*v.
 
Matrix gtsam::expm (const Matrix &A, size_t K=7)
 Numerical exponential map, naive approach, not industrial strength !!!
 
\n+std::string gtsam::formatMatrixIndented (const std::string &label, const Matrix &matrix, bool makeVectorHorizontal)
 
void gtsam::inplace_QR (Matrix &A)
 QR factorization using Eigen's internal block QR algorithm.
 
\n

Detailed Description

\n-

A matrix with column blocks of pre-defined sizes.

\n-

Used in JacobianFactor and GaussianConditional.

Author
Richard Roberts
\n-
Date
Sep 18, 2010
\n+

matrix class

\n+
Author
Christian Potthast
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,179 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-VerticalBlockMatrix.h File Reference\n-A matrix with column blocks of pre-defined sizes. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-\u00a0 This class stores a dense matrix and allows it to be accessed as a\n- collection of vertical blocks. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Matrix.cpp File Reference\n+matrix class _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const Matrix &A,\n+ const Matrix &B, double tol=1e-9)\n+\u00a0 equals with an tolerance, prints out\n+ message if unequal\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_i\bin\bne\beq\bqu\bua\bal\bl (const Matrix &A,\n+ const Matrix &B, double tol=1e-9)\n+\u00a0 inequals with an tolerance, prints out\n+ message if within tolerance\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const std::list<\n+ Matrix > &As, const std::list< Matrix >\n+ &Bs, double tol=1e-9)\n+\u00a0 equals with an tolerance, prints out\n+ message if unequal\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bli\bin\bne\bea\bar\br_\b_i\bin\bnd\bde\bep\bpe\ben\bnd\bde\ben\bnt\bt (const Matrix\n+ &A, const Matrix &B, double tol=1e-9)\n+\u00a0 check whether the rows of two matrices are\n+ linear independent\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bli\bin\bne\bea\bar\br_\b_d\bde\bep\bpe\ben\bnd\bde\ben\bnt\bt (const Matrix &A,\n+ const Matrix &B, double tol=1e-9)\n+\u00a0 check whether the rows of two matrices are\n+ linear dependent\n+\u00a0\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br^\b^ (const Matrix &A, const\n+ Vector &v)\n+\u00a0 overload ^ for trans(A)*v We transpose the\n+ vectors for speed.\n+\u00a0\n+ const Eigen::IOFormat &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bma\bat\btl\bla\bab\bbF\bFo\bor\brm\bma\bat\bt ()\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Matrix &A, const std::\n+ string &s, std::ostream &stream)\n+\u00a0 print without optional string, must\n+ specify cout yourself\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Matrix &A, const std::\n+ string &s=\"\")\n+\u00a0 print with optional string to cout\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsa\bav\bve\be (const Matrix &A, const std::\n+ string &s, const std::string &filename)\n+\u00a0 save a matrix to file, which can be loaded\n+ by matlab\n+\u00a0\n+ istream &\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b>_\b> (std::istream\n+ &inputStream, Matrix &destinationMatrix)\n+\u00a0 Read a matrix from an input stream, such\n+ as a file.\n+\u00a0\n+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bia\bag\bg (const std::vector< Matrix >\n+ &Hs)\n+\u00a0 Create a matrix with submatrices along its\n+ diagonal.\n+\u00a0\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bol\blu\bum\bmn\bnN\bNo\bor\brm\bmS\bSq\bqu\bua\bar\bre\be (const Matrix &A)\n+\u00a0\n+ pair< Matrix, Matrix >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bq_\br (const Matrix &A)\n+ Householder QR factorization, Golub & Van\n+\u00a0 Loan p 224, explicit version\n+\n+\u00a0\n+ list< boost::tuple< Vector, double, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\b__\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be (Matrix &A,\n+ double > >\u00a0 Vector &b, const Vector &sigmas)\n+ Imperative algorithm for in-place full\n+\u00a0 elimination with weights and constraint\n+ handling.\n+\u00a0\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br_\b_ (Matrix &A, size_t k,\n+ bool copy_vectors)\n+ Imperative version of Householder QR\n+\u00a0 factorization, Golub & Van Loan p 224\n+ version with Householder vectors below\n+ diagonal, as in GVL.\n+\u00a0\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bh_\bo_\bl_\bd_\be_\br (Matrix &A, size_t k)\n+\u00a0 Householder tranformation, zeros below\n+ diagonal.\n+\u00a0\n+ Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bL_\bo_\bw_\be_\br (const Matrix\n+ &L, const Vector &b, bool unit=false)\n+\u00a0 backSubstitute L*x=b\n+\u00a0\n+ Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br (const Matrix\n+ &U, const Vector &b, bool unit=false)\n+\u00a0 backSubstitute U*x=b\n+\u00a0\n+ Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\ba_\bc_\bk_\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\be_\bU_\bp_\bp_\be_\br (const Vector\n+ &b, const Matrix &U, bool unit=false)\n+\u00a0 backSubstitute x'*U=b'\n+\u00a0\n+ Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\ba_\bc_\bk (size_t nrMatrices,...)\n+\u00a0 create a matrix by stacking other matrices\n+ Given a set of matrices: A1, A2, A3...\n+\u00a0\n+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bta\bac\bck\bk (const std::vector< Matrix >\n+ &blocks)\n+\u00a0\n+ Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bl_\bl_\be_\bc_\bt (const std::vector< const\n+ Matrix * > &matrices, size_t m=0, size_t\n+ n=0)\n+ create a matrix by concatenating Given a\n+ set of matrices: A1, A2, A3... If all\n+\u00a0 matrices have the same size, specifying\n+ single matrix dimensions will avoid the\n+ lookup of dimensions\n+\u00a0\n+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bol\bll\ble\bec\bct\bt (size_t nrMatrices,...)\n+\u00a0\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bc_\ba_\bl_\be_\b__\bi_\bn_\bp_\bl_\ba_\bc_\be (const Vector\n+ &v, Matrix &A, bool inf_mask=false)\n+ scales a matrix row or column by the\n+\u00a0 values in a vector Arguments (Matrix,\n+ Vector) scales the columns, (Vector,\n+ Matrix) scales the rows\n+\u00a0\n+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:v\bve\bec\bct\bto\bor\br_\b_s\bsc\bca\bal\ble\be (const Vector &v,\n+ const Matrix &A, bool inf_mask)\n+\u00a0\n+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:v\bve\bec\bct\bto\bor\br_\b_s\bsc\bca\bal\ble\be (const Matrix &A,\n+ const Vector &v, bool inf_mask)\n+\u00a0\n+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:L\bLL\bLt\bt (const Matrix &A)\n+\u00a0\n+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:R\bRt\btR\bR (const Matrix &A)\n+\u00a0\n+ Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b__\bi_\bn_\bv_\be_\br_\bs_\be (const Matrix &A)\n+\u00a0 Return the inverse of a S.P.D.\n+\u00a0\n+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnv\bve\ber\brs\bse\be_\b_s\bsq\bqu\bua\bar\bre\be_\b_r\bro\boo\bot\bt (const Matrix\n+ &A)\n+\u00a0 Use Cholesky to calculate inverse square\n+ root of a matrix.\n+\u00a0\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bv_\bd (const Matrix &A, Matrix &U,\n+ Vector &S, Matrix &V)\n+\u00a0 SVD computes economy SVD A=U*S*V'.\n+\u00a0\n+boost::tuple< int, double, Vector >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bL_\bT (const Matrix &A, double\n+ rank_tol=1e-9)\n+ Direct linear transform algorithm that\n+\u00a0 calls svd to find a vector v that\n+ minimizes the algebraic error A*v.\n+\u00a0\n+ Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm (const Matrix &A, size_t K=7)\n+\u00a0 Numerical exponential map, naive approach,\n+ not industrial strength !!!\n+\u00a0\n+ std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:f\bfo\bor\brm\bma\bat\btM\bMa\bat\btr\bri\bix\bxI\bIn\bnd\bde\ben\bnt\bte\bed\bd (const std::\n+ string &label, const Matrix &matrix, bool\n+ makeVectorHorizontal)\n+\u00a0\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bp_\bl_\ba_\bc_\be_\b__\bQ_\bR (Matrix &A)\n+\u00a0 QR factorization using Eigen's internal\n+ block QR algorithm.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A matrix with column blocks of pre-defined sizes.\n-Used in _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br and _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl.\n+matrix class\n Author\n- Richard Roberts\n- Date\n- Sep 18, 2010\n+ Christian Potthast\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+ * _\bM_\ba_\bt_\br_\bi_\bx_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00074.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00074.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/numericalDerivative.h File Reference\n \n \n \n \n \n \n \n@@ -96,136 +96,304 @@\n \n \n \n
\n \n-
Lie.h File Reference
\n+
numericalDerivative.h File Reference
\n
\n
\n \n-

Base class and basic functions for Lie types. \n+

Some functions to compute numerical derivatives. \n More...

\n \n

Go to the source code of this file.

\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 Classes

struct  gtsam::LieGroup< Class, N >
 A CRTP helper class that implements Lie group methods Prerequisites: methods operator*, inverse, and AdjointMap, as well as a ChartAtOrigin struct that will be used to define the manifold Chart To use, simply derive, but also say \"using LieGroup<Class,N>::inverse\" For derivative math, see doc/math.pdf. More...
struct  gtsam::internal::FixedSizeMatrix< Y, X >
 
struct  gtsam::lie_group_tag
 tag to assert a type is a Lie group More...
 
struct  gtsam::internal::LieGroupTraits< Class >
 A helper class that implements the traits interface for GTSAM lie groups. More...
 
struct  gtsam::internal::LieGroup< Class >
 Both LieGroupTraits and Testable. More...
 
class  gtsam::IsLieGroup< T >
 Lie Group Concept. More...
 
class  gtsam::TransformCovariance< T >
 Functor for transforming covariance of T. More...
class  gtsam::G_x1< X1, X2 >
 Helper class that computes the derivative of f w.r.t. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-

\n-Macros

#define GTSAM_CONCEPT_LIE_INST(T)   template class gtsam::IsLieGroup<T>;
 Macros for using the LieConcept.
 
\n-#define GTSAM_CONCEPT_LIE_TYPE(T)   using _gtsam_IsLieGroup_##T = gtsam::IsLieGroup<T>;
 
\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+\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+\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 Functions

template<class Class >
Class gtsam::between_default (const Class &l1, const Class &l2)
 These core global functions can be specialized by new Lie types for better performance.
 
template<class Class >
Vector gtsam::logmap_default (const Class &l0, const Class &lp)
 Log map centered at l0, s.t.
 
template<class Class >
Class gtsam::expmap_default (const Class &t, const Vector &d)
 Exponential map centered at l0, s.t.
 
template<class T >
gtsam::BCH (const T &X, const T &Y)
 Three term approximation of the Baker-Campbell-Hausdorff formula In non-commutative Lie groups, when composing exp(Z) = exp(X)exp(Y) it is not true that Z = X+Y.
 
\n-template<class T >
Matrix gtsam::wedge (const Vector &x)
 Declaration of wedge (see Murray94book) used to convert from n exponential coordinates to n*n element of the Lie algebra.
 
template<class T >
gtsam::expm (const Vector &x, int K=7)
 Exponential map given exponential coordinates class T needs a wedge<> function and a constructor from Matrix.
 
template<typename T >
gtsam::interpolate (const T &X, const T &Y, double t, typename MakeOptionalJacobian< T, T >::type Hx=boost::none, typename MakeOptionalJacobian< T, T >::type Hy=boost::none)
 Linear interpolation between X and Y by coefficient t.
 
template<class X , int N = traits<X>::dimension>
Eigen::Matrix< double, N, 1 > gtsam::numericalGradient (std::function< double(const X &)> h, const X &x, double delta=1e-5)
 Numerically compute gradient of scalar function.
 
template<class Y , class X , int N = traits<X>::dimension>
internal::FixedSizeMatrix< Y, X >::type gtsam::numericalDerivative11 (std::function< Y(const X &)> h, const X &x, double delta=1e-5)
 New-style numerical derivatives using manifold_traits.
 
\n+template<class Y , class X >
internal::FixedSizeMatrix< Y, X >::type gtsam::numericalDerivative11 (Y(*h)(const X &), const X &x, double delta=1e-5)
 use a raw C++ function pointer
 
template<class Y , class X1 , class X2 , int N = traits<X1>::dimension>
internal::FixedSizeMatrix< Y, X1 >::type gtsam::numericalDerivative21 (const std::function< Y(const X1 &, const X2 &)> &h, const X1 &x1, const X2 &x2, double delta=1e-5)
 Compute numerical derivative in argument 1 of binary function.
 
\n+template<class Y , class X1 , class X2 >
internal::FixedSizeMatrix< Y, X1 >::type gtsam::numericalDerivative21 (Y(*h)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)
 use a raw C++ function pointer
 
template<class Y , class X1 , class X2 , int N = traits<X2>::dimension>
internal::FixedSizeMatrix< Y, X2 >::type gtsam::numericalDerivative22 (std::function< Y(const X1 &, const X2 &)> h, const X1 &x1, const X2 &x2, double delta=1e-5)
 Compute numerical derivative in argument 2 of binary function.
 
\n+template<class Y , class X1 , class X2 >
internal::FixedSizeMatrix< Y, X2 >::type gtsam::numericalDerivative22 (Y(*h)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)
 use a raw C++ function pointer
 
template<class Y , class X1 , class X2 , class X3 , int N = traits<X1>::dimension>
internal::FixedSizeMatrix< Y, X1 >::type gtsam::numericalDerivative31 (std::function< Y(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Compute numerical derivative in argument 1 of ternary function.
 
\n+template<class Y , class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< Y, X1 >::type gtsam::numericalDerivative31 (Y(*h)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , int N = traits<X2>::dimension>
internal::FixedSizeMatrix< Y, X2 >::type gtsam::numericalDerivative32 (std::function< Y(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Compute numerical derivative in argument 2 of ternary function.
 
\n+template<class Y , class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< Y, X2 >::type gtsam::numericalDerivative32 (Y(*h)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , int N = traits<X3>::dimension>
internal::FixedSizeMatrix< Y, X3 >::type gtsam::numericalDerivative33 (std::function< Y(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Compute numerical derivative in argument 3 of ternary function.
 
\n+template<class Y , class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< Y, X3 >::type gtsam::numericalDerivative33 (Y(*h)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , int N = traits<X1>::dimension>
internal::FixedSizeMatrix< Y, X1 >::type gtsam::numericalDerivative41 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Compute numerical derivative in argument 1 of 4-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 >
internal::FixedSizeMatrix< Y, X1 >::type gtsam::numericalDerivative41 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , int N = traits<X2>::dimension>
internal::FixedSizeMatrix< Y, X2 >::type gtsam::numericalDerivative42 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Compute numerical derivative in argument 2 of 4-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 >
internal::FixedSizeMatrix< Y, X2 >::type gtsam::numericalDerivative42 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , int N = traits<X3>::dimension>
internal::FixedSizeMatrix< Y, X3 >::type gtsam::numericalDerivative43 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Compute numerical derivative in argument 3 of 4-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 >
internal::FixedSizeMatrix< Y, X3 >::type gtsam::numericalDerivative43 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , int N = traits<X4>::dimension>
internal::FixedSizeMatrix< Y, X4 >::type gtsam::numericalDerivative44 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 Compute numerical derivative in argument 4 of 4-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 >
internal::FixedSizeMatrix< Y, X4 >::type gtsam::numericalDerivative44 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , int N = traits<X1>::dimension>
internal::FixedSizeMatrix< Y, X1 >::type gtsam::numericalDerivative51 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Compute numerical derivative in argument 1 of 5-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 >
internal::FixedSizeMatrix< Y, X1 >::type gtsam::numericalDerivative51 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , int N = traits<X2>::dimension>
internal::FixedSizeMatrix< Y, X2 >::type gtsam::numericalDerivative52 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Compute numerical derivative in argument 2 of 5-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 >
internal::FixedSizeMatrix< Y, X2 >::type gtsam::numericalDerivative52 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , int N = traits<X3>::dimension>
internal::FixedSizeMatrix< Y, X3 >::type gtsam::numericalDerivative53 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Compute numerical derivative in argument 3 of 5-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 >
internal::FixedSizeMatrix< Y, X3 >::type gtsam::numericalDerivative53 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , int N = traits<X4>::dimension>
internal::FixedSizeMatrix< Y, X4 >::type gtsam::numericalDerivative54 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Compute numerical derivative in argument 4 of 5-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 >
internal::FixedSizeMatrix< Y, X4 >::type gtsam::numericalDerivative54 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , int N = traits<X5>::dimension>
internal::FixedSizeMatrix< Y, X5 >::type gtsam::numericalDerivative55 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 Compute numerical derivative in argument 5 of 5-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 >
internal::FixedSizeMatrix< Y, X5 >::type gtsam::numericalDerivative55 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 , int N = traits<X1>::dimension>
internal::FixedSizeMatrix< Y, X1 >::type gtsam::numericalDerivative61 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 1 of 6-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 >
internal::FixedSizeMatrix< Y, X1 >::type gtsam::numericalDerivative61 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 , int N = traits<X2>::dimension>
internal::FixedSizeMatrix< Y, X2 >::type gtsam::numericalDerivative62 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 2 of 6-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 >
internal::FixedSizeMatrix< Y, X2 >::type gtsam::numericalDerivative62 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 , int N = traits<X3>::dimension>
internal::FixedSizeMatrix< Y, X3 >::type gtsam::numericalDerivative63 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 3 of 6-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 >
internal::FixedSizeMatrix< Y, X3 >::type gtsam::numericalDerivative63 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 , int N = traits<X4>::dimension>
internal::FixedSizeMatrix< Y, X4 >::type gtsam::numericalDerivative64 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 4 of 6-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 >
internal::FixedSizeMatrix< Y, X4 >::type gtsam::numericalDerivative64 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 , int N = traits<X5>::dimension>
internal::FixedSizeMatrix< Y, X5 >::type gtsam::numericalDerivative65 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 5 of 6-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 >
internal::FixedSizeMatrix< Y, X5 >::type gtsam::numericalDerivative65 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 
template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 , int N = traits<X6>::dimension>
internal::FixedSizeMatrix< Y, X6 >::type gtsam::numericalDerivative66 (std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 Compute numerical derivative in argument 6 of 6-argument function.
 
\n+template<class Y , class X1 , class X2 , class X3 , class X4 , class X5 , class X6 >
internal::FixedSizeMatrix< Y, X6 >::type gtsam::numericalDerivative66 (Y(*h)(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &), const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
 
template<class X >
internal::FixedSizeMatrix< X, X >::type gtsam::numericalHessian (std::function< double(const X &)> f, const X &x, double delta=1e-5)
 Compute numerical Hessian matrix.
 
\n+template<class X >
internal::FixedSizeMatrix< X, X >::type gtsam::numericalHessian (double(*f)(const X &), const X &x, double delta=1e-5)
 
\n+template<class X1 , class X2 >
internal::FixedSizeMatrix< X1, X2 >::type gtsam::numericalHessian212 (std::function< double(const X1 &, const X2 &)> f, const X1 &x1, const X2 &x2, double delta=1e-5)
 
\n+template<class X1 , class X2 >
internal::FixedSizeMatrix< X1, X2 >::type gtsam::numericalHessian212 (double(*f)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)
 
\n+template<class X1 , class X2 >
internal::FixedSizeMatrix< X1, X1 >::type gtsam::numericalHessian211 (std::function< double(const X1 &, const X2 &)> f, const X1 &x1, const X2 &x2, double delta=1e-5)
 
\n+template<class X1 , class X2 >
internal::FixedSizeMatrix< X1, X1 >::type gtsam::numericalHessian211 (double(*f)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)
 
\n+template<class X1 , class X2 >
internal::FixedSizeMatrix< X2, X2 >::type gtsam::numericalHessian222 (std::function< double(const X1 &, const X2 &)> f, const X1 &x1, const X2 &x2, double delta=1e-5)
 
\n+template<class X1 , class X2 >
internal::FixedSizeMatrix< X2, X2 >::type gtsam::numericalHessian222 (double(*f)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X1, X1 >::type gtsam::numericalHessian311 (std::function< double(const X1 &, const X2 &, const X3 &)> f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 Numerical Hessian for tenary functions.
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X1, X1 >::type gtsam::numericalHessian311 (double(*f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X2, X2 >::type gtsam::numericalHessian322 (std::function< double(const X1 &, const X2 &, const X3 &)> f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X2, X2 >::type gtsam::numericalHessian322 (double(*f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X3, X3 >::type gtsam::numericalHessian333 (std::function< double(const X1 &, const X2 &, const X3 &)> f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X3, X3 >::type gtsam::numericalHessian333 (double(*f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X1, X2 >::type gtsam::numericalHessian312 (std::function< double(const X1 &, const X2 &, const X3 &)> f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X1, X3 >::type gtsam::numericalHessian313 (std::function< double(const X1 &, const X2 &, const X3 &)> f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X2, X3 >::type gtsam::numericalHessian323 (std::function< double(const X1 &, const X2 &, const X3 &)> f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X1, X2 >::type gtsam::numericalHessian312 (double(*f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X1, X3 >::type gtsam::numericalHessian313 (double(*f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n+template<class X1 , class X2 , class X3 >
internal::FixedSizeMatrix< X2, X3 >::type gtsam::numericalHessian323 (double(*f)(const X1 &, const X2 &, const X3 &), const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
 
\n

Detailed Description

\n-

Base class and basic functions for Lie types.

\n-
Author
Richard Roberts
\n-
\n-Alex Cunningham
\n-
\n-Frank Dellaert
\n-
\n-Mike Bosse
\n-
\n-Duy Nguyen Ta
\n-
\n-Yotam Stern
\n-

Macro Definition Documentation

\n-\n-

◆ GTSAM_CONCEPT_LIE_INST

\n-\n-
\n-
\n- \n- \n- \n- \n- \n- \n- \n- \n-
#define GTSAM_CONCEPT_LIE_INST( T)   template class gtsam::IsLieGroup<T>;
\n-
\n-\n-

Macros for using the LieConcept.

\n-
    \n-
  • An instantiation for use inside unit tests
  • \n-
  • A typedef for use inside generic algorithms
  • \n-
\n-

NOTE: intentionally not in the gtsam namespace to allow for classes not in the gtsam namespace to be more easily enforced as testable

\n-\n-
\n-
\n-
\n+

Some functions to compute numerical derivatives.

\n+
Author
Frank Dellaert
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,101 +1,516 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Lie.h File Reference\n-Base class and basic functions for Lie types. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+numericalDerivative.h File Reference\n+Some functions to compute numerical derivatives. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b,_\b _\bN_\b _\b>\n- A CRTP helper class that implements Lie group methods Prerequisites:\n- methods operator*, inverse, and AdjointMap, as well as a ChartAtOrigin\n-\u00a0 struct that will be used to define the manifold Chart To use, simply\n- derive, but also say \"using LieGroup::inverse\" For derivative\n- math, see doc/math.pdf. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-\u00a0 tag to assert a type is a Lie group _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b _\b>\n-\u00a0 A helper class that implements the traits interface for GTSAM lie\n- groups. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bY_\b,_\b _\bX_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bC_\bl_\ba_\bs_\bs_\b _\b>\n-\u00a0 Both _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs and _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bT_\b _\b>\n-\u00a0 Lie Group Concept. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b<_\b _\bT_\b _\b>\n-\u00a0 Functor for transforming covariance of T. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\b__\bx_\b1_\b<_\b _\bX_\b1_\b,_\b _\bX_\b2_\b _\b>\n+\u00a0 Helper class that computes the derivative of f w.r.t. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bL_\bI_\bE_\b__\bI_\bN_\bS_\bT(T)\u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp;\n-\u00a0 Macros for using the LieConcept.\n-\u00a0\n-#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_L\bLI\bIE\bE_\b_T\bTY\bYP\bPE\bE(T)\u00a0\u00a0\u00a0using _gtsam_IsLieGroup_##T = _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n- _\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp;\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- Class\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\be_\bt_\bw_\be_\be_\bn_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt (const Class &l1, const Class &l2)\n-\u00a0 These core global functions can be specialized by new Lie types for\n- better performance.\n-\u00a0\n-template\n-Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\bg_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt (const Class &l0, const Class &lp)\n-\u00a0 Log map centered at l0, s.t.\n-\u00a0\n-template\n- Class\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt (const Class &t, const Vector &d)\n-\u00a0 Exponential map centered at l0, s.t.\n-\u00a0\n-template\n- T\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bC_\bH (const T &X, const T &Y)\n- Three term approximation of the Baker-Campbell-Hausdorff formula In\n-\u00a0 non-commutative Lie groups, when composing exp(Z) = exp(X)exp(Y) it is\n- not true that Z = X+Y.\n-\u00a0\n-template\n-Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:w\bwe\bed\bdg\bge\be (const Vector &x)\n-\u00a0 Declaration of wedge (see Murray94book) used to convert from n\n- exponential coordinates to n*n element of the Lie algebra.\n-\u00a0\n-template\n- T\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm (const Vector &x, int K=7)\n-\u00a0 Exponential map given exponential coordinates class T needs a wedge<>\n- function and a constructor from Matrix.\n-\u00a0\n-template\n- T\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be (const T &X, const T &Y, double t, typename\n- _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< T, T >::type Hx=boost::none, typename\n- _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< T, T >::type Hy=boost::none)\n-\u00a0 Linear interpolation between X and Y by coefficient t.\n+template::dimension>\n+ Eigen::Matrix< double, N, 1 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt (std::function<\n+ double(const X &)> h, const X &x, double\n+ delta=1e-5)\n+\u00a0 Numerically compute gradient of scalar\n+ function.\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b1_\b1 (std::\n+ type\u00a0 function< Y(const X &)> h, const X &x,\n+ double delta=1e-5)\n+\u00a0 New-style numerical derivatives using\n+ manifold_traits.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be1\b11\b1 (Y(*h)\n+ type\u00a0 (const X &), const X &x, double\n+ delta=1e-5)\n+\u00a0 use a raw C++ function pointer\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X1 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b1 (const\n+ type\u00a0 std::function< Y(const X1 &, const X2\n+ &)> &h, const X1 &x1, const X2 &x2,\n+ double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 1 of binary function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X1 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be2\b21\b1 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &), const X1 &x1,\n+ const X2 &x2, double delta=1e-5)\n+\u00a0 use a raw C++ function pointer\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X2 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b2 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &)> h,\n+ const X1 &x1, const X2 &x2, double\n+ delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 2 of binary function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be2\b22\b2 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &), const X1 &x1,\n+ const X2 &x2, double delta=1e-5)\n+\u00a0 use a raw C++ function pointer\n+\u00a0\n+template::\n+dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X1 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b1 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &)> h, const X1 &x1, const X2\n+ &x2, const X3 &x3, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 1 of ternary function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X1 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be3\b31\b1 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, double delta=1e-5)\n+\u00a0\n+template::\n+dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X2 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b2 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &)> h, const X1 &x1, const X2\n+ &x2, const X3 &x3, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 2 of ternary function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be3\b32\b2 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, double delta=1e-5)\n+\u00a0\n+template::\n+dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X3 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b3 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &)> h, const X1 &x1, const X2\n+ &x2, const X3 &x3, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 3 of ternary function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X3 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be3\b33\b3 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X1 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b1 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &)> h, const X1\n+ &x1, const X2 &x2, const X3 &x3, const\n+ X4 &x4, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 1 of 4-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X1 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be4\b41\b1 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &), const X1 &x1, const X2 &x2,\n+ const X3 &x3, const X4 &x4, double\n+ delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X2 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b2 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &)> h, const X1\n+ &x1, const X2 &x2, const X3 &x3, const\n+ X4 &x4, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 2 of 4-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be4\b42\b2 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &), const X1 &x1, const X2 &x2,\n+ const X3 &x3, const X4 &x4, double\n+ delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X3 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b3 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &)> h, const X1\n+ &x1, const X2 &x2, const X3 &x3, const\n+ X4 &x4, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 3 of 4-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X3 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be4\b43\b3 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &), const X1 &x1, const X2 &x2,\n+ const X3 &x3, const X4 &x4, double\n+ delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X4 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b4 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &)> h, const X1\n+ &x1, const X2 &x2, const X3 &x3, const\n+ X4 &x4, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 4 of 4-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X4 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be4\b44\b4 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &), const X1 &x1, const X2 &x2,\n+ const X3 &x3, const X4 &x4, double\n+ delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X1 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b1 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &)> h,\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, double\n+ delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 1 of 5-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X1 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be5\b51\b1 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &), const X1 &x1,\n+ const X2 &x2, const X3 &x3, const X4\n+ &x4, const X5 &x5, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X2 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b2 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &)> h,\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, double\n+ delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 2 of 5-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be5\b52\b2 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &), const X1 &x1,\n+ const X2 &x2, const X3 &x3, const X4\n+ &x4, const X5 &x5, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X3 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b3 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &)> h,\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, double\n+ delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 3 of 5-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X3 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be5\b53\b3 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &), const X1 &x1,\n+ const X2 &x2, const X3 &x3, const X4\n+ &x4, const X5 &x5, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X4 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b4 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &)> h,\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, double\n+ delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 4 of 5-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X4 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be5\b54\b4 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &), const X1 &x1,\n+ const X2 &x2, const X3 &x3, const X4\n+ &x4, const X5 &x5, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X5 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b5 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &)> h,\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, double\n+ delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 5 of 5-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X5 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be5\b55\b5 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &), const X1 &x1,\n+ const X2 &x2, const X3 &x3, const X4\n+ &x4, const X5 &x5, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X1 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b1 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &,\n+ const X6 &)> h, const X1 &x1, const X2\n+ &x2, const X3 &x3, const X4 &x4, const\n+ X5 &x5, const X6 &x6, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 1 of 6-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X1 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be6\b61\b1 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &, const X6 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, const\n+ X6 &x6, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X2 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b2 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &,\n+ const X6 &)> h, const X1 &x1, const X2\n+ &x2, const X3 &x3, const X4 &x4, const\n+ X5 &x5, const X6 &x6, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 2 of 6-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be6\b62\b2 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &, const X6 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, const\n+ X6 &x6, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X3 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b3 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &,\n+ const X6 &)> h, const X1 &x1, const X2\n+ &x2, const X3 &x3, const X4 &x4, const\n+ X5 &x5, const X6 &x6, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 3 of 6-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X3 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be6\b63\b3 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &, const X6 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, const\n+ X6 &x6, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X4 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b4 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &,\n+ const X6 &)> h, const X1 &x1, const X2\n+ &x2, const X3 &x3, const X4 &x4, const\n+ X5 &x5, const X6 &x6, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 4 of 6-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X4 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be6\b64\b4 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &, const X6 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, const\n+ X6 &x6, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X5 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b5 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &,\n+ const X6 &)> h, const X1 &x1, const X2\n+ &x2, const X3 &x3, const X4 &x4, const\n+ X5 &x5, const X6 &x6, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 5 of 6-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X5 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be6\b65\b5 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &, const X6 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, const\n+ X6 &x6, double delta=1e-5)\n+\u00a0\n+template::dimension>\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X6 >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b6 (std::\n+ type\u00a0 function< Y(const X1 &, const X2 &,\n+ const X3 &, const X4 &, const X5 &,\n+ const X6 &)> h, const X1 &x1, const X2\n+ &x2, const X3 &x3, const X4 &x4, const\n+ X5 &x5, const X6 &x6, double delta=1e-5)\n+\u00a0 Compute numerical derivative in argument\n+ 6 of 6-argument function.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< Y, X6 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blD\bDe\ber\bri\biv\bva\bat\bti\biv\bve\be6\b66\b6 (Y(*h)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &,\n+ const X4 &, const X5 &, const X6 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, const X4 &x4, const X5 &x5, const\n+ X6 &x6, double delta=1e-5)\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X, X >:: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn (std::function<\n+ type\u00a0 double(const X &)> f, const X &x, double\n+ delta=1e-5)\n+\u00a0 Compute numerical Hessian matrix.\n+\u00a0\n+template\n+ _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X, X >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn (double(*f)\n+ type\u00a0 (const X &), const X &x, double\n+ delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X1, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn2\b21\b12\b2 (std::\n+ type\u00a0 function< double(const X1 &, const X2\n+ &)> f, const X1 &x1, const X2 &x2,\n+ double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X1, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn2\b21\b12\b2 (double(*f)\n+ type\u00a0 (const X1 &, const X2 &), const X1 &x1,\n+ const X2 &x2, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X1, X1 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn2\b21\b11\b1 (std::\n+ type\u00a0 function< double(const X1 &, const X2\n+ &)> f, const X1 &x1, const X2 &x2,\n+ double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X1, X1 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn2\b21\b11\b1 (double(*f)\n+ type\u00a0 (const X1 &, const X2 &), const X1 &x1,\n+ const X2 &x2, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X2, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn2\b22\b22\b2 (std::\n+ type\u00a0 function< double(const X1 &, const X2\n+ &)> f, const X1 &x1, const X2 &x2,\n+ double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X2, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn2\b22\b22\b2 (double(*f)\n+ type\u00a0 (const X1 &, const X2 &), const X1 &x1,\n+ const X2 &x2, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X1, X1 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b31\b11\b1 (std::\n+ type\u00a0 function< double(const X1 &, const X2 &,\n+ const X3 &)> f, const X1 &x1, const X2\n+ &x2, const X3 &x3, double delta=1e-5)\n+\u00a0 Numerical Hessian for tenary functions.\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X1, X1 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b31\b11\b1 (double(*f)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X2, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b32\b22\b2 (std::\n+ type\u00a0 function< double(const X1 &, const X2 &,\n+ const X3 &)> f, const X1 &x1, const X2\n+ &x2, const X3 &x3, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X2, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b32\b22\b2 (double(*f)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X3, X3 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b33\b33\b3 (std::\n+ type\u00a0 function< double(const X1 &, const X2 &,\n+ const X3 &)> f, const X1 &x1, const X2\n+ &x2, const X3 &x3, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X3, X3 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b33\b33\b3 (double(*f)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X1, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b31\b12\b2 (std::\n+ type\u00a0 function< double(const X1 &, const X2 &,\n+ const X3 &)> f, const X1 &x1, const X2\n+ &x2, const X3 &x3, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X1, X3 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b31\b13\b3 (std::\n+ type\u00a0 function< double(const X1 &, const X2 &,\n+ const X3 &)> f, const X1 &x1, const X2\n+ &x2, const X3 &x3, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X2, X3 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b32\b23\b3 (std::\n+ type\u00a0 function< double(const X1 &, const X2 &,\n+ const X3 &)> f, const X1 &x1, const X2\n+ &x2, const X3 &x3, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X1, X2 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b31\b12\b2 (double(*f)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X1, X3 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b31\b13\b3 (double(*f)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, double delta=1e-5)\n+\u00a0\n+template\n+_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx< X2, X3 >:: g\bgt\bts\bsa\bam\bm:\b::\b:n\bnu\bum\bme\ber\bri\bic\bca\bal\blH\bHe\bes\bss\bsi\bia\ban\bn3\b32\b23\b3 (double(*f)\n+ type\u00a0 (const X1 &, const X2 &, const X3 &),\n+ const X1 &x1, const X2 &x2, const X3\n+ &x3, double delta=1e-5)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Base class and basic functions for Lie types.\n+Some functions to compute numerical derivatives.\n Author\n- Richard Roberts\n- Alex Cunningham\n Frank Dellaert\n- Mike Bosse\n- Duy Nguyen Ta\n- Yotam Stern\n-*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_L\bLI\bIE\bE_\b_I\bIN\bNS\bST\bT *\b**\b**\b**\b**\b*\n-#define GTSAM_CONCEPT_LIE_INST ( \u00a0 T ) \u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp;\n-Macros for using the LieConcept.\n- * An instantiation for use inside unit tests\n- * A typedef for use inside generic algorithms\n-NOTE: intentionally not in the gtsam namespace to allow for classes not in the\n-gtsam namespace to be more easily enforced as testable\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bL_\bi_\be_\b._\bh\n+ * _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00074.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00074.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,16 +1,31 @@\n var a00074 = [\n- [\"gtsam::LieGroup< Class, N >\", \"a02364.html\", \"a02364\"],\n- [\"gtsam::lie_group_tag\", \"a02368.html\", null],\n- [\"gtsam::internal::LieGroupTraits< Class >\", \"a02372.html\", null],\n- [\"gtsam::internal::LieGroup< Class >\", \"a02376.html\", null],\n- [\"gtsam::IsLieGroup< T >\", \"a02380.html\", null],\n- [\"gtsam::TransformCovariance< T >\", \"a02384.html\", null],\n- [\"GTSAM_CONCEPT_LIE_INST\", \"a00074.html#aeef5af7d583d275fbc0e6e5af8bf2afc\", null],\n- [\"BCH\", \"a00074.html#adbd55c711e6ceee791b595558eb3ec8a\", null],\n- [\"between_default\", \"a00074.html#abd92914d0822d42584d46f31fb500048\", null],\n- [\"expm\", \"a00074.html#a3041816208c79ef76d3ef2e0991d90b2\", null],\n- [\"expmap_default\", \"a00074.html#af5a7c0a7422c38a0baa131c073e233ac\", null],\n- [\"interpolate\", \"a00074.html#adaf06b04fa93b050e99bc3d571d85d53\", null],\n- [\"logmap_default\", \"a00074.html#a5c6ccec4a3ea452361c0956766bccef5\", null],\n- [\"wedge\", \"a00074.html#afe28b7f8e3592fb9f5cf9ebae09497ba\", null]\n+ [\"gtsam::internal::FixedSizeMatrix< Y, X >\", \"a02440.html\", null],\n+ [\"gtsam::G_x1< X1, X2 >\", \"a02444.html\", null],\n+ [\"numericalDerivative11\", \"a00074.html#a581a9f8db043590096fbac682b8f6a93\", null],\n+ [\"numericalDerivative11\", \"a00074.html#a4c4c5744f0b348d4ec6c047f796e7924\", null],\n+ [\"numericalDerivative21\", \"a00074.html#a157eb3b44dd4e38bbd66f3cc68a20e43\", null],\n+ [\"numericalDerivative21\", \"a00074.html#afcc94e3b49906e824c01a3d56df62d33\", null],\n+ [\"numericalDerivative22\", \"a00074.html#a5b0db4ac5f279b12fc91fab4cb40b1bf\", null],\n+ [\"numericalDerivative22\", \"a00074.html#a46d002a0529f1172aebb7e1d85d5c08c\", null],\n+ [\"numericalDerivative31\", \"a00074.html#aa8f0264edaf78d503809c1e3152340ee\", null],\n+ [\"numericalDerivative32\", \"a00074.html#acfbadc0ab0cd9386205b2737c5d0b727\", null],\n+ [\"numericalDerivative33\", \"a00074.html#a526a422ea611724345affed8b71d9bac\", null],\n+ [\"numericalDerivative41\", \"a00074.html#a3b0937e08e79604ee6ab10fca6ffe65e\", null],\n+ [\"numericalDerivative42\", \"a00074.html#af40f61e8eff01acdb028ad33b8f3529b\", null],\n+ [\"numericalDerivative43\", \"a00074.html#a6846b5cc84c1d5a54a436121b27057e0\", null],\n+ [\"numericalDerivative44\", \"a00074.html#a8061b20199f839b115512d95d058fcbf\", null],\n+ [\"numericalDerivative51\", \"a00074.html#a272af6f7139b76d085279060646e32d1\", null],\n+ [\"numericalDerivative52\", \"a00074.html#a722e98babba795ce480f89527b572251\", null],\n+ [\"numericalDerivative53\", \"a00074.html#acc2f741132522a6ce57d544a27a95855\", null],\n+ [\"numericalDerivative54\", \"a00074.html#a2cf5181fc7bca1ef6a1070959de7b975\", null],\n+ [\"numericalDerivative55\", \"a00074.html#a5ca42a2fc87373c005299f3087995a97\", null],\n+ [\"numericalDerivative61\", \"a00074.html#a0ca8a22de666bc39015da34f150df748\", null],\n+ [\"numericalDerivative62\", \"a00074.html#ac224e2384e41171181b2dbc0f700cdc1\", null],\n+ [\"numericalDerivative63\", \"a00074.html#a15c46aa999886d4ccd06ab73fc02db31\", null],\n+ [\"numericalDerivative64\", \"a00074.html#a3eb3fef9c77920dfd9496e71a0bcf669\", null],\n+ [\"numericalDerivative65\", \"a00074.html#a799c83517a20a8e0b0b014f26b50f660\", null],\n+ [\"numericalDerivative66\", \"a00074.html#a4e010b7f436124b9b421ba7dc438d987\", null],\n+ [\"numericalGradient\", \"a00074.html#afd8862271510196ec4e2d894f623942d\", null],\n+ [\"numericalHessian\", \"a00074.html#a11011d8e9bd69e486c9752875f710c18\", null],\n+ [\"numericalHessian311\", \"a00074.html#a10295660c0177e08d45812fbb7e4c554\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00074_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00074_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/numericalDerivative.h Source File\n \n \n \n \n \n \n \n@@ -98,382 +98,941 @@\n
No Matches
\n \n \n \n \n \n
\n-
Lie.h
\n+
numericalDerivative.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
24#pragma once
\n-
25
\n-
26#include <gtsam/base/Manifold.h>
\n-
27#include <gtsam/base/Group.h>
\n-
28
\n-
29namespace gtsam {
\n-
30
\n-
36template <class Class, int N>
\n-
\n-
37struct LieGroup {
\n-
38
\n-
39 enum { dimension = N };
\n-
40 typedef OptionalJacobian<N, N> ChartJacobian;
\n-
41 typedef Eigen::Matrix<double, N, N> Jacobian;
\n-
42 typedef Eigen::Matrix<double, N, 1> TangentVector;
\n-
43
\n-
44 const Class & derived() const {
\n-
45 return static_cast<const Class&>(*this);
\n-
46 }
\n-
47
\n-
48 Class compose(const Class& g) const {
\n-
49 return derived() * g;
\n-
50 }
\n+
18// \\callgraph
\n+
19#pragma once
\n+
20
\n+
21#include <functional>
\n+
22
\n+\n+\n+\n+
26#include <gtsam/base/Lie.h>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
30/*
\n+
31 * Note that all of these functions have two versions, a boost.function version and a
\n+
32 * standard C++ function pointer version. This allows reformulating the arguments of
\n+
33 * a function to fit the correct structure, which is useful for situations like
\n+
34 * member functions and functions with arguments not involved in the derivative:
\n+
35 *
\n+
36 * Usage of the boost bind version to rearrange arguments:
\n+
37 * for a function with one relevant param and an optional derivative:
\n+
38 * Foo bar(const Obj& a, boost::optional<Matrix&> H1)
\n+
39 * Use boost.bind to restructure:
\n+
40 * std::bind(bar, std::placeholders::_1, boost::none)
\n+
41 * This syntax will fix the optional argument to boost::none, while using the first argument provided
\n+
42 *
\n+
43 * For member functions, such as below, with an instantiated copy instanceOfSomeClass
\n+
44 * Foo SomeClass::bar(const Obj& a)
\n+
45 * Use boost bind as follows to create a function pointer that uses the member function:
\n+
46 * std::bind(&SomeClass::bar, ref(instanceOfSomeClass), std::placeholders::_1)
\n+
47 *
\n+
48 * For additional details, see the documentation:
\n+
49 * http://www.boost.org/doc/libs/release/libs/bind/bind.html
\n+
50 */
\n
51
\n-
52 Class between(const Class& g) const {
\n-
53 return derived().inverse() * g;
\n-
54 }
\n-
55
\n-
56 Class compose(const Class& g, ChartJacobian H1,
\n-
57 ChartJacobian H2 = boost::none) const {
\n-
58 if (H1) *H1 = g.inverse().AdjointMap();
\n-
59 if (H2) *H2 = Eigen::Matrix<double, N, N>::Identity();
\n-
60 return derived() * g;
\n-
61 }
\n-
62
\n-
63 Class between(const Class& g, ChartJacobian H1,
\n-
64 ChartJacobian H2 = boost::none) const {
\n-
65 Class result = derived().inverse() * g;
\n-
66 if (H1) *H1 = - result.inverse().AdjointMap();
\n-
67 if (H2) *H2 = Eigen::Matrix<double, N, N>::Identity();
\n-
68 return result;
\n-
69 }
\n-
70
\n-
71 Class inverse(ChartJacobian H) const {
\n-
72 if (H) *H = - derived().AdjointMap();
\n-
73 return derived().inverse();
\n-
74 }
\n-
75
\n-
\n-
78 Class expmap(const TangentVector& v) const {
\n-
79 return compose(Class::Expmap(v));
\n-
80 }
\n-
\n-
81
\n-
\n-
84 TangentVector logmap(const Class& g) const {
\n-
85 return Class::Logmap(between(g));
\n-
86 }
\n-
\n-
87
\n-
\n-
89 Class expmap(const TangentVector& v, //
\n-
90 ChartJacobian H1, ChartJacobian H2 = boost::none) const {
\n-
91 Jacobian D_g_v;
\n-
92 Class g = Class::Expmap(v,H2 ? &D_g_v : 0);
\n-
93 Class h = compose(g); // derivatives inlined below
\n-
94 if (H1) *H1 = g.inverse().AdjointMap();
\n-
95 if (H2) *H2 = D_g_v;
\n-
96 return h;
\n-
97 }
\n-
\n-
98
\n-
\n-
100 TangentVector logmap(const Class& g, //
\n-
101 ChartJacobian H1, ChartJacobian H2 = boost::none) const {
\n-
102 Class h = between(g); // derivatives inlined below
\n-
103 Jacobian D_v_h;
\n-
104 TangentVector v = Class::Logmap(h, (H1 || H2) ? &D_v_h : 0);
\n-
105 if (H1) *H1 = - D_v_h * h.inverse().AdjointMap();
\n-
106 if (H2) *H2 = D_v_h;
\n-
107 return v;
\n-
108 }
\n-
\n-
109
\n-
\n-
111 static Class Retract(const TangentVector& v) {
\n-
112 return Class::ChartAtOrigin::Retract(v);
\n-
113 }
\n-
\n-
114
\n-
\n-
116 static TangentVector LocalCoordinates(const Class& g) {
\n-
117 return Class::ChartAtOrigin::Local(g);
\n-
118 }
\n-
\n-
119
\n-
\n-
121 static Class Retract(const TangentVector& v, ChartJacobian H) {
\n-
122 return Class::ChartAtOrigin::Retract(v,H);
\n-
123 }
\n-
\n-
124
\n-
\n-
126 static TangentVector LocalCoordinates(const Class& g, ChartJacobian H) {
\n-
127 return Class::ChartAtOrigin::Local(g,H);
\n-
128 }
\n-
\n+
52
\n+
53// a quick helper struct to get the appropriate fixed sized matrix from two value types
\n+
54namespace internal {
\n+
55template<class Y, class X=double>
\n+
\n+\n+
57 typedef Eigen::Matrix<double,traits<Y>::dimension, traits<X>::dimension> type;
\n+
58};
\n+
\n+
59}
\n+
60
\n+
69template <class X, int N = traits<X>::dimension>
\n+
\n+
70typename Eigen::Matrix<double, N, 1> numericalGradient(
\n+
71 std::function<double(const X&)> h, const X& x, double delta = 1e-5) {
\n+
72 double factor = 1.0 / (2.0 * delta);
\n+
73
\n+
74 BOOST_STATIC_ASSERT_MSG(
\n+
75 (boost::is_base_of<manifold_tag, typename traits<X>::structure_category>::value),
\n+
76 "Template argument X must be a manifold type.");
\n+
77 BOOST_STATIC_ASSERT_MSG(N>0, "Template argument X must be fixed-size type or N must be specified.");
\n+
78
\n+
79 // Prepare a tangent vector to perturb x with, only works for fixed size
\n+
80 typename traits<X>::TangentVector d;
\n+
81 d.setZero();
\n+
82
\n+
83 Eigen::Matrix<double,N,1> g;
\n+
84 g.setZero();
\n+
85 for (int j = 0; j < N; j++) {
\n+
86 d(j) = delta;
\n+
87 double hxplus = h(traits<X>::Retract(x, d));
\n+
88 d(j) = -delta;
\n+
89 double hxmin = h(traits<X>::Retract(x, d));
\n+
90 d(j) = 0;
\n+
91 g(j) = (hxplus - hxmin) * factor;
\n+
92 }
\n+
93 return g;
\n+
94}
\n+
\n+
95
\n+
108template <class Y, class X, int N = traits<X>::dimension>
\n+
109// TODO Should compute fixed-size matrix
\n+
\n+
110typename internal::FixedSizeMatrix<Y, X>::type numericalDerivative11(
\n+
111 std::function<Y(const X&)> h, const X& x, double delta = 1e-5) {
\n+
112 typedef typename internal::FixedSizeMatrix<Y,X>::type Matrix;
\n+
113
\n+
114 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
115 "Template argument Y must be a manifold type.");
\n+
116 typedef traits<Y> TraitsY;
\n+
117
\n+
118 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X>::structure_category>::value),
\n+
119 "Template argument X must be a manifold type.");
\n+
120 BOOST_STATIC_ASSERT_MSG(N>0, "Template argument X must be fixed-size type or N must be specified.");
\n+
121 typedef traits<X> TraitsX;
\n+
122
\n+
123 // get value at x, and corresponding chart
\n+
124 const Y hx = h(x);
\n+
125
\n+
126 // Bit of a hack for now to find number of rows
\n+
127 const typename TraitsY::TangentVector zeroY = TraitsY::Local(hx, hx);
\n+
128 const size_t m = zeroY.size();
\n
129
\n-
\n-
131 Class retract(const TangentVector& v) const {
\n-
132 return compose(Class::ChartAtOrigin::Retract(v));
\n-
133 }
\n-
\n-
134
\n-
\n-
136 TangentVector localCoordinates(const Class& g) const {
\n-
137 return Class::ChartAtOrigin::Local(between(g));
\n-
138 }
\n-
\n-
139
\n-
\n-
141 Class retract(const TangentVector& v, //
\n-
142 ChartJacobian H1, ChartJacobian H2 = boost::none) const {
\n-
143 Jacobian D_g_v;
\n-
144 Class g = Class::ChartAtOrigin::Retract(v, H2 ? &D_g_v : 0);
\n-
145 Class h = compose(g); // derivatives inlined below
\n-
146 if (H1) *H1 = g.inverse().AdjointMap();
\n-
147 if (H2) *H2 = D_g_v;
\n-
148 return h;
\n-
149 }
\n-
\n-
150
\n-
\n-
152 TangentVector localCoordinates(const Class& g, //
\n-
153 ChartJacobian H1, ChartJacobian H2 = boost::none) const {
\n-
154 Class h = between(g); // derivatives inlined below
\n-
155 Jacobian D_v_h;
\n-
156 TangentVector v = Class::ChartAtOrigin::Local(h, (H1 || H2) ? &D_v_h : 0);
\n-
157 if (H1) *H1 = - D_v_h * h.inverse().AdjointMap();
\n-
158 if (H2) *H2 = D_v_h;
\n-
159 return v;
\n-
160 }
\n-
\n-
161};
\n-
\n-
162
\n-
164struct lie_group_tag: public manifold_tag, public group_tag {};
\n-
165
\n-
166namespace internal {
\n-
167
\n-
173template<class Class>
\n-
\n-
174struct LieGroupTraits: GetDimensionImpl<Class, Class::dimension> {
\n-\n-
176
\n-\n-
180 static Class Identity() { return Class::Identity();}
\n-
182
\n-
185 typedef Class ManifoldType;
\n-
186 enum { dimension = Class::dimension };
\n-
187 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
\n-
188 typedef OptionalJacobian<dimension, dimension> ChartJacobian;
\n-
189
\n-
190 static TangentVector Local(const Class& origin, const Class& other,
\n-
191 ChartJacobian Horigin = boost::none, ChartJacobian Hother = boost::none) {
\n-
192 return origin.localCoordinates(other, Horigin, Hother);
\n-
193 }
\n-
194
\n-
195 static Class Retract(const Class& origin, const TangentVector& v,
\n-
196 ChartJacobian Horigin = boost::none, ChartJacobian Hv = boost::none) {
\n-
197 return origin.retract(v, Horigin, Hv);
\n-
198 }
\n-
200
\n-
203 static TangentVector Logmap(const Class& m, ChartJacobian Hm = boost::none) {
\n-
204 return Class::Logmap(m, Hm);
\n-
205 }
\n-
206
\n-
207 static Class Expmap(const TangentVector& v, ChartJacobian Hv = boost::none) {
\n-
208 return Class::Expmap(v, Hv);
\n-
209 }
\n-
210
\n-
211 static Class Compose(const Class& m1, const Class& m2, //
\n-
212 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
213 return m1.compose(m2, H1, H2);
\n-
214 }
\n-
215
\n-
216 static Class Between(const Class& m1, const Class& m2, //
\n-
217 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
218 return m1.between(m2, H1, H2);
\n-
219 }
\n-
220
\n-
221 static Class Inverse(const Class& m, //
\n-
222 ChartJacobian H = boost::none) {
\n-
223 return m.inverse(H);
\n-
224 }
\n-
226};
\n-
\n-
227
\n-
229template<class Class> struct LieGroup: LieGroupTraits<Class>, Testable<Class> {};
\n-
230
\n-
231} // \\ namepsace internal
\n-
232
\n-
239template<class Class>
\n-
\n-
240inline Class between_default(const Class& l1, const Class& l2) {
\n-
241 return l1.inverse().compose(l2);
\n-
242}
\n-
\n-
243
\n-
245template<class Class>
\n-
\n-
246inline Vector logmap_default(const Class& l0, const Class& lp) {
\n-
247 return Class::Logmap(l0.between(lp));
\n-
248}
\n-
\n-
249
\n-
251template<class Class>
\n-
\n-
252inline Class expmap_default(const Class& t, const Vector& d) {
\n-
253 return t.compose(Class::Expmap(d));
\n-
254}
\n-
\n-
255
\n-
259template<typename T>
\n-
\n-
260class IsLieGroup: public IsGroup<T>, public IsManifold<T> {
\n-
261public:
\n-
262 typedef typename traits<T>::structure_category structure_category_tag;
\n-
263 typedef typename traits<T>::ManifoldType ManifoldType;
\n-
264 typedef typename traits<T>::TangentVector TangentVector;
\n-
265 typedef typename traits<T>::ChartJacobian ChartJacobian;
\n-
266
\n-
267 BOOST_CONCEPT_USAGE(IsLieGroup) {
\n-
268 BOOST_STATIC_ASSERT_MSG(
\n-
269 (boost::is_base_of<lie_group_tag, structure_category_tag>::value),
\n-
270 "This type's trait does not assert it is a Lie group (or derived)");
\n-
271
\n-
272 // group opertations with Jacobians
\n-
273 g = traits<T>::Compose(g, h, Hg, Hh);
\n-
274 g = traits<T>::Between(g, h, Hg, Hh);
\n-
275 g = traits<T>::Inverse(g, Hg);
\n-
276 // log and exp map without Jacobians
\n-
277 g = traits<T>::Expmap(v);
\n-
278 v = traits<T>::Logmap(g);
\n-
279 // log and exponential map with Jacobians
\n-
280 g = traits<T>::Expmap(v, Hg);
\n-
281 v = traits<T>::Logmap(g, Hg);
\n-
282 }
\n-
283private:
\n-
284 T g, h;
\n-
285 TangentVector v;
\n-
286 ChartJacobian Hg, Hh;
\n-
287};
\n-
\n-
288
\n-
297template<class T>
\n-
\n-
298T BCH(const T& X, const T& Y) {
\n-
299 static const double _2 = 1. / 2., _12 = 1. / 12., _24 = 1. / 24.;
\n-
300 T X_Y = bracket(X, Y);
\n-
301 return T(X + Y + _2 * X_Y + _12 * bracket(X - Y, X_Y) - _24 * bracket(Y, bracket(X, X_Y)));
\n+
130 // Prepare a tangent vector to perturb x with, only works for fixed size
\n+
131 Eigen::Matrix<double, N, 1> dx;
\n+
132 dx.setZero();
\n+
133
\n+
134 // Fill in Jacobian H
\n+
135 Matrix H = Matrix::Zero(m, N);
\n+
136 const double factor = 1.0 / (2.0 * delta);
\n+
137 for (int j = 0; j < N; j++) {
\n+
138 dx(j) = delta;
\n+
139 const auto dy1 = TraitsY::Local(hx, h(TraitsX::Retract(x, dx)));
\n+
140 dx(j) = -delta;
\n+
141 const auto dy2 = TraitsY::Local(hx, h(TraitsX::Retract(x, dx)));
\n+
142 dx(j) = 0;
\n+
143 H.col(j) << (dy1 - dy2) * factor;
\n+
144 }
\n+
145 return H;
\n+
146}
\n+
\n+
147
\n+
149template<class Y, class X>
\n+
\n+
150typename internal::FixedSizeMatrix<Y,X>::type numericalDerivative11(Y (*h)(const X&), const X& x,
\n+
151 double delta = 1e-5) {
\n+
152 return numericalDerivative11<Y, X>(std::bind(h, std::placeholders::_1), x,
\n+
153 delta);
\n+
154}
\n+
\n+
155
\n+
165template<class Y, class X1, class X2, int N = traits<X1>::dimension>
\n+
\n+
166typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative21(const std::function<Y(const X1&, const X2&)>& h,
\n+
167 const X1& x1, const X2& x2, double delta = 1e-5) {
\n+
168 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
169 "Template argument Y must be a manifold type.");
\n+
170 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
171 "Template argument X1 must be a manifold type.");
\n+
172 return numericalDerivative11<Y, X1, N>(
\n+
173 std::bind(h, std::placeholders::_1, std::cref(x2)), x1, delta);
\n+
174}
\n+
\n+
175
\n+
177template<class Y, class X1, class X2>
\n+
\n+
178typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative21(Y (*h)(const X1&, const X2&), const X1& x1,
\n+
179 const X2& x2, double delta = 1e-5) {
\n+
180 return numericalDerivative21<Y, X1, X2>(
\n+
181 std::bind(h, std::placeholders::_1, std::placeholders::_2), x1, x2,
\n+
182 delta);
\n+
183}
\n+
\n+
184
\n+
194template<class Y, class X1, class X2, int N = traits<X2>::dimension>
\n+
\n+
195typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative22(std::function<Y(const X1&, const X2&)> h,
\n+
196 const X1& x1, const X2& x2, double delta = 1e-5) {
\n+
197// BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
198// "Template argument X1 must be a manifold type.");
\n+
199 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X2>::structure_category>::value),
\n+
200 "Template argument X2 must be a manifold type.");
\n+
201 return numericalDerivative11<Y, X2, N>(
\n+
202 std::bind(h, std::cref(x1), std::placeholders::_1), x2, delta);
\n+
203}
\n+
\n+
204
\n+
206template<class Y, class X1, class X2>
\n+
\n+
207typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative22(Y (*h)(const X1&, const X2&), const X1& x1,
\n+
208 const X2& x2, double delta = 1e-5) {
\n+
209 return numericalDerivative22<Y, X1, X2>(
\n+
210 std::bind(h, std::placeholders::_1, std::placeholders::_2), x1, x2,
\n+
211 delta);
\n+
212}
\n+
\n+
213
\n+
225template<class Y, class X1, class X2, class X3, int N = traits<X1>::dimension>
\n+
\n+
226typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative31(
\n+
227 std::function<Y(const X1&, const X2&, const X3&)> h, const X1& x1,
\n+
228 const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
229 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
230 "Template argument Y must be a manifold type.");
\n+
231 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
232 "Template argument X1 must be a manifold type.");
\n+
233 return numericalDerivative11<Y, X1, N>(
\n+
234 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3)),
\n+
235 x1, delta);
\n+
236}
\n+
\n+
237
\n+
238template<class Y, class X1, class X2, class X3>
\n+
239typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative31(Y (*h)(const X1&, const X2&, const X3&),
\n+
240 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
241 return numericalDerivative31<Y, X1, X2, X3>(
\n+
242 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
243 std::placeholders::_3),
\n+
244 x1, x2, x3, delta);
\n+
245}
\n+
246
\n+
258template<class Y, class X1, class X2, class X3, int N = traits<X2>::dimension>
\n+
\n+
259typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative32(
\n+
260 std::function<Y(const X1&, const X2&, const X3&)> h, const X1& x1,
\n+
261 const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
262 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
263 "Template argument Y must be a manifold type.");
\n+
264 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X2>::structure_category>::value),
\n+
265 "Template argument X2 must be a manifold type.");
\n+
266 return numericalDerivative11<Y, X2, N>(
\n+
267 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3)),
\n+
268 x2, delta);
\n+
269}
\n+
\n+
270
\n+
271template<class Y, class X1, class X2, class X3>
\n+
272inline typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative32(Y (*h)(const X1&, const X2&, const X3&),
\n+
273 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
274 return numericalDerivative32<Y, X1, X2, X3>(
\n+
275 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
276 std::placeholders::_3),
\n+
277 x1, x2, x3, delta);
\n+
278}
\n+
279
\n+
291template<class Y, class X1, class X2, class X3, int N = traits<X3>::dimension>
\n+
\n+
292typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative33(
\n+
293 std::function<Y(const X1&, const X2&, const X3&)> h, const X1& x1,
\n+
294 const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
295 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
296 "Template argument Y must be a manifold type.");
\n+
297 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X3>::structure_category>::value),
\n+
298 "Template argument X3 must be a manifold type.");
\n+
299 return numericalDerivative11<Y, X3, N>(
\n+
300 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1),
\n+
301 x3, delta);
\n
302}
\n
\n
303
\n-
308template <class T> Matrix wedge(const Vector& x);
\n-
309
\n-
316template <class T>
\n-
\n-
317T expm(const Vector& x, int K=7) {
\n-
318 Matrix xhat = wedge<T>(x);
\n-
319 return T(expm(xhat,K));
\n-
320}
\n-
\n-
321
\n-
326template <typename T>
\n-
\n-
327T interpolate(const T& X, const T& Y, double t,
\n-
328 typename MakeOptionalJacobian<T, T>::type Hx = boost::none,
\n-
329 typename MakeOptionalJacobian<T, T>::type Hy = boost::none) {
\n-
330 if (Hx || Hy) {
\n-
331 typename MakeJacobian<T, T>::type between_H_x, log_H, exp_H, compose_H_x;
\n-
332 const T between =
\n-
333 traits<T>::Between(X, Y, between_H_x); // between_H_y = identity
\n-
334 typename traits<T>::TangentVector delta = traits<T>::Logmap(between, log_H);
\n-
335 const T Delta = traits<T>::Expmap(t * delta, exp_H);
\n-
336 const T result = traits<T>::Compose(
\n-
337 X, Delta, compose_H_x); // compose_H_xinv_y = identity
\n-
338
\n-
339 if (Hx) *Hx = compose_H_x + t * exp_H * log_H * between_H_x;
\n-
340 if (Hy) *Hy = t * exp_H * log_H;
\n-
341 return result;
\n-
342 }
\n-
343 return traits<T>::Compose(
\n-\n+
304template<class Y, class X1, class X2, class X3>
\n+
305inline typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative33(Y (*h)(const X1&, const X2&, const X3&),
\n+
306 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
307 return numericalDerivative33<Y, X1, X2, X3>(
\n+
308 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
309 std::placeholders::_3),
\n+
310 x1, x2, x3, delta);
\n+
311}
\n+
312
\n+
324template<class Y, class X1, class X2, class X3, class X4, int N = traits<X1>::dimension>
\n+
\n+
325typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative41(
\n+
326 std::function<Y(const X1&, const X2&, const X3&, const X4&)> h, const X1& x1,
\n+
327 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n+
328 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
329 "Template argument Y must be a manifold type.");
\n+
330 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
331 "Template argument X1 must be a manifold type.");
\n+
332 return numericalDerivative11<Y, X1, N>(
\n+
333 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),
\n+
334 std::cref(x4)),
\n+
335 x1, delta);
\n+
336}
\n+
\n+
337
\n+
338template<class Y, class X1, class X2, class X3, class X4>
\n+
339inline typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative41(Y (*h)(const X1&, const X2&, const X3&, const X4&),
\n+
340 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n+
341 return numericalDerivative41<Y, X1, X2, X3, X4>(
\n+
342 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
343 std::placeholders::_3, std::placeholders::_4),
\n+
344 x1, x2, x3, x4);
\n
345}
\n-
\n
346
\n-
351template<class T>
\n-
\n-\n-
353{
\n-
354private:
\n-
355 typename T::Jacobian adjointMap_;
\n-
356public:
\n-
357 explicit TransformCovariance(const T &X) : adjointMap_{X.AdjointMap()} {}
\n-
358 typename T::Jacobian operator()(const typename T::Jacobian &covariance)
\n-
359 { return adjointMap_ * covariance * adjointMap_.transpose(); }
\n-
360};
\n-
\n-
361
\n-
362} // namespace gtsam
\n-
363
\n-
372#define GTSAM_CONCEPT_LIE_INST(T) template class gtsam::IsLieGroup<T>;
\n-
373#define GTSAM_CONCEPT_LIE_TYPE(T) using _gtsam_IsLieGroup_##T = gtsam::IsLieGroup<T>;
\n-
Base class and basic functions for Manifold types.
\n-
Concept check class for variable types with Group properties.
\n+
358template<class Y, class X1, class X2, class X3, class X4, int N = traits<X2>::dimension>
\n+
\n+
359typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative42(
\n+
360 std::function<Y(const X1&, const X2&, const X3&, const X4&)> h, const X1& x1,
\n+
361 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n+
362 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
363 "Template argument Y must be a manifold type.");
\n+
364 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X2>::structure_category>::value),
\n+
365 "Template argument X2 must be a manifold type.");
\n+
366 return numericalDerivative11<Y, X2, N>(
\n+
367 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),
\n+
368 std::cref(x4)),
\n+
369 x2, delta);
\n+
370}
\n+
\n+
371
\n+
372template<class Y, class X1, class X2, class X3, class X4>
\n+
373inline typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative42(Y (*h)(const X1&, const X2&, const X3&, const X4&),
\n+
374 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n+
375 return numericalDerivative42<Y, X1, X2, X3, X4>(
\n+
376 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
377 std::placeholders::_3, std::placeholders::_4),
\n+
378 x1, x2, x3, x4);
\n+
379}
\n+
380
\n+
392template<class Y, class X1, class X2, class X3, class X4, int N = traits<X3>::dimension>
\n+
\n+
393typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative43(
\n+
394 std::function<Y(const X1&, const X2&, const X3&, const X4&)> h, const X1& x1,
\n+
395 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n+
396 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
397 "Template argument Y must be a manifold type.");
\n+
398 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X3>::structure_category>::value),
\n+
399 "Template argument X3 must be a manifold type.");
\n+
400 return numericalDerivative11<Y, X3, N>(
\n+
401 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,
\n+
402 std::cref(x4)),
\n+
403 x3, delta);
\n+
404}
\n+
\n+
405
\n+
406template<class Y, class X1, class X2, class X3, class X4>
\n+
407inline typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative43(Y (*h)(const X1&, const X2&, const X3&, const X4&),
\n+
408 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n+
409 return numericalDerivative43<Y, X1, X2, X3, X4>(
\n+
410 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
411 std::placeholders::_3, std::placeholders::_4),
\n+
412 x1, x2, x3, x4);
\n+
413}
\n+
414
\n+
426template<class Y, class X1, class X2, class X3, class X4, int N = traits<X4>::dimension>
\n+
\n+
427typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative44(
\n+
428 std::function<Y(const X1&, const X2&, const X3&, const X4&)> h, const X1& x1,
\n+
429 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n+
430 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
431 "Template argument Y must be a manifold type.");
\n+
432 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X4>::structure_category>::value),
\n+
433 "Template argument X4 must be a manifold type.");
\n+
434 return numericalDerivative11<Y, X4, N>(
\n+
435 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n+
436 std::placeholders::_1),
\n+
437 x4, delta);
\n+
438}
\n+
\n+
439
\n+
440template<class Y, class X1, class X2, class X3, class X4>
\n+
441inline typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative44(Y (*h)(const X1&, const X2&, const X3&, const X4&),
\n+
442 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n+
443 return numericalDerivative44<Y, X1, X2, X3, X4>(
\n+
444 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
445 std::placeholders::_3, std::placeholders::_4),
\n+
446 x1, x2, x3, x4);
\n+
447}
\n+
448
\n+
461template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X1>::dimension>
\n+
\n+
462typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative51(
\n+
463 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&)> h, const X1& x1,
\n+
464 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n+
465 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
466 "Template argument Y must be a manifold type.");
\n+
467 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
468 "Template argument X1 must be a manifold type.");
\n+
469 return numericalDerivative11<Y, X1, N>(
\n+
470 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),
\n+
471 std::cref(x4), std::cref(x5)),
\n+
472 x1, delta);
\n+
473}
\n+
\n+
474
\n+
475template<class Y, class X1, class X2, class X3, class X4, class X5>
\n+
476inline typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative51(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),
\n+
477 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n+
478 return numericalDerivative51<Y, X1, X2, X3, X4, X5>(
\n+
479 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
480 std::placeholders::_3, std::placeholders::_4,
\n+
481 std::placeholders::_5),
\n+
482 x1, x2, x3, x4, x5);
\n+
483}
\n+
484
\n+
497template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X2>::dimension>
\n+
\n+
498typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative52(
\n+
499 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&)> h, const X1& x1,
\n+
500 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n+
501 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
502 "Template argument Y must be a manifold type.");
\n+
503 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
504 "Template argument X1 must be a manifold type.");
\n+
505 return numericalDerivative11<Y, X2, N>(
\n+
506 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),
\n+
507 std::cref(x4), std::cref(x5)),
\n+
508 x2, delta);
\n+
509}
\n+
\n+
510
\n+
511template<class Y, class X1, class X2, class X3, class X4, class X5>
\n+
512inline typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative52(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),
\n+
513 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n+
514 return numericalDerivative52<Y, X1, X2, X3, X4, X5>(
\n+
515 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
516 std::placeholders::_3, std::placeholders::_4,
\n+
517 std::placeholders::_5),
\n+
518 x1, x2, x3, x4, x5);
\n+
519}
\n+
520
\n+
533template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X3>::dimension>
\n+
\n+
534typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative53(
\n+
535 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&)> h, const X1& x1,
\n+
536 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n+
537 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
538 "Template argument Y must be a manifold type.");
\n+
539 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
540 "Template argument X1 must be a manifold type.");
\n+
541 return numericalDerivative11<Y, X3, N>(
\n+
542 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,
\n+
543 std::cref(x4), std::cref(x5)),
\n+
544 x3, delta);
\n+
545}
\n+
\n+
546
\n+
547template<class Y, class X1, class X2, class X3, class X4, class X5>
\n+
548inline typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative53(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),
\n+
549 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n+
550 return numericalDerivative53<Y, X1, X2, X3, X4, X5>(
\n+
551 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
552 std::placeholders::_3, std::placeholders::_4,
\n+
553 std::placeholders::_5),
\n+
554 x1, x2, x3, x4, x5);
\n+
555}
\n+
556
\n+
569template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X4>::dimension>
\n+
\n+
570typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative54(
\n+
571 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&)> h, const X1& x1,
\n+
572 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n+
573 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
574 "Template argument Y must be a manifold type.");
\n+
575 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
576 "Template argument X1 must be a manifold type.");
\n+
577 return numericalDerivative11<Y, X4, N>(
\n+
578 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n+
579 std::placeholders::_1, std::cref(x5)),
\n+
580 x4, delta);
\n+
581}
\n+
\n+
582
\n+
583template<class Y, class X1, class X2, class X3, class X4, class X5>
\n+
584inline typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative54(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),
\n+
585 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n+
586 return numericalDerivative54<Y, X1, X2, X3, X4, X5>(
\n+
587 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
588 std::placeholders::_3, std::placeholders::_4,
\n+
589 std::placeholders::_5),
\n+
590 x1, x2, x3, x4, x5);
\n+
591}
\n+
592
\n+
605template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X5>::dimension>
\n+
\n+
606typename internal::FixedSizeMatrix<Y,X5>::type numericalDerivative55(
\n+
607 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&)> h, const X1& x1,
\n+
608 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n+
609 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
610 "Template argument Y must be a manifold type.");
\n+
611 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
612 "Template argument X1 must be a manifold type.");
\n+
613 return numericalDerivative11<Y, X5, N>(
\n+
614 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n+
615 std::cref(x4), std::placeholders::_1),
\n+
616 x5, delta);
\n+
617}
\n+
\n+
618
\n+
619template<class Y, class X1, class X2, class X3, class X4, class X5>
\n+
620inline typename internal::FixedSizeMatrix<Y,X5>::type numericalDerivative55(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),
\n+
621 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n+
622 return numericalDerivative55<Y, X1, X2, X3, X4, X5>(
\n+
623 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
624 std::placeholders::_3, std::placeholders::_4,
\n+
625 std::placeholders::_5),
\n+
626 x1, x2, x3, x4, x5);
\n+
627}
\n+
628
\n+
642template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X1>::dimension>
\n+
\n+
643typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative61(
\n+
644 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h, const X1& x1,
\n+
645 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
646 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
647 "Template argument Y must be a manifold type.");
\n+
648 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
649 "Template argument X1 must be a manifold type.");
\n+
650 return numericalDerivative11<Y, X1, N>(
\n+
651 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),
\n+
652 std::cref(x4), std::cref(x5), std::cref(x6)),
\n+
653 x1, delta);
\n+
654}
\n+
\n+
655
\n+
656template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n+
657inline typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative61(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n+
658 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
659 return numericalDerivative61<Y, X1, X2, X3, X4, X5, X6>(
\n+
660 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
661 std::placeholders::_3, std::placeholders::_4,
\n+
662 std::placeholders::_5, std::placeholders::_6),
\n+
663 x1, x2, x3, x4, x5, x6);
\n+
664}
\n+
665
\n+
679template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X2>::dimension>
\n+
\n+
680typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative62(
\n+
681 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h, const X1& x1,
\n+
682 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
683 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
684 "Template argument Y must be a manifold type.");
\n+
685 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
686 "Template argument X1 must be a manifold type.");
\n+
687 return numericalDerivative11<Y, X2, N>(
\n+
688 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),
\n+
689 std::cref(x4), std::cref(x5), std::cref(x6)),
\n+
690 x2, delta);
\n+
691}
\n+
\n+
692
\n+
693template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n+
694inline typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative62(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n+
695 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
696 return numericalDerivative62<Y, X1, X2, X3, X4, X5, X6>(
\n+
697 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
698 std::placeholders::_3, std::placeholders::_4,
\n+
699 std::placeholders::_5, std::placeholders::_6),
\n+
700 x1, x2, x3, x4, x5, x6);
\n+
701}
\n+
702
\n+
716template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X3>::dimension>
\n+
\n+
717typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative63(
\n+
718 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h, const X1& x1,
\n+
719 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
720 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
721 "Template argument Y must be a manifold type.");
\n+
722 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
723 "Template argument X1 must be a manifold type.");
\n+
724 return numericalDerivative11<Y, X3, N>(
\n+
725 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,
\n+
726 std::cref(x4), std::cref(x5), std::cref(x6)),
\n+
727 x3, delta);
\n+
728}
\n+
\n+
729
\n+
730template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n+
731inline typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative63(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n+
732 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
733 return numericalDerivative63<Y, X1, X2, X3, X4, X5, X6>(
\n+
734 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
735 std::placeholders::_3, std::placeholders::_4,
\n+
736 std::placeholders::_5, std::placeholders::_6),
\n+
737 x1, x2, x3, x4, x5, x6);
\n+
738}
\n+
739
\n+
753template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X4>::dimension>
\n+
\n+
754typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative64(
\n+
755 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h, const X1& x1,
\n+
756 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
757 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
758 "Template argument Y must be a manifold type.");
\n+
759 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
760 "Template argument X1 must be a manifold type.");
\n+
761 return numericalDerivative11<Y, X4, N>(
\n+
762 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n+
763 std::placeholders::_1, std::cref(x5), std::cref(x6)),
\n+
764 x4, delta);
\n+
765}
\n+
\n+
766
\n+
767template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n+
768inline typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative64(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n+
769 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
770 return numericalDerivative64<Y, X1, X2, X3, X4, X5>(
\n+
771 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
772 std::placeholders::_3, std::placeholders::_4,
\n+
773 std::placeholders::_5, std::placeholders::_6),
\n+
774 x1, x2, x3, x4, x5, x6);
\n+
775}
\n+
776
\n+
790template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X5>::dimension>
\n+
\n+
791typename internal::FixedSizeMatrix<Y,X5>::type numericalDerivative65(
\n+
792 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h, const X1& x1,
\n+
793 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
794 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
795 "Template argument Y must be a manifold type.");
\n+
796 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
797 "Template argument X1 must be a manifold type.");
\n+
798 return numericalDerivative11<Y, X5, N>(
\n+
799 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n+
800 std::cref(x4), std::placeholders::_1, std::cref(x6)),
\n+
801 x5, delta);
\n+
802}
\n+
\n+
803
\n+
804template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n+
805inline typename internal::FixedSizeMatrix<Y,X5>::type numericalDerivative65(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n+
806 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
807 return numericalDerivative65<Y, X1, X2, X3, X4, X5, X6>(
\n+
808 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
809 std::placeholders::_3, std::placeholders::_4,
\n+
810 std::placeholders::_5, std::placeholders::_6),
\n+
811 x1, x2, x3, x4, x5, x6);
\n+
812}
\n+
813
\n+
827template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X6>::dimension>
\n+
\n+
828typename internal::FixedSizeMatrix<Y, X6>::type numericalDerivative66(
\n+
829 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h,
\n+
830 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,
\n+
831 double delta = 1e-5) {
\n+
832 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n+
833 "Template argument Y must be a manifold type.");
\n+
834 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n+
835 "Template argument X1 must be a manifold type.");
\n+
836 return numericalDerivative11<Y, X6, N>(
\n+
837 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n+
838 std::cref(x4), std::cref(x5), std::placeholders::_1),
\n+
839 x6, delta);
\n+
840}
\n+
\n+
841
\n+
842template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n+
843inline typename internal::FixedSizeMatrix<Y,X6>::type numericalDerivative66(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n+
844 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n+
845 return numericalDerivative66<Y, X1, X2, X3, X4, X5, X6>(
\n+
846 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n+
847 std::placeholders::_3, std::placeholders::_4,
\n+
848 std::placeholders::_5, std::placeholders::_6),
\n+
849 x1, x2, x3, x4, x5, x6);
\n+
850}
\n+
851
\n+
860template<class X>
\n+
\n+
861inline typename internal::FixedSizeMatrix<X,X>::type numericalHessian(std::function<double(const X&)> f, const X& x,
\n+
862 double delta = 1e-5) {
\n+
863 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X>::structure_category>::value),
\n+
864 "Template argument X must be a manifold type.");
\n+
865 typedef Eigen::Matrix<double, traits<X>::dimension, 1> VectorD;
\n+
866 typedef std::function<double(const X&)> F;
\n+
867 typedef std::function<VectorD(F, const X&, double)> G;
\n+
868 G ng = static_cast<G>(numericalGradient<X> );
\n+
869 return numericalDerivative11<VectorD, X>(
\n+
870 std::bind(ng, f, std::placeholders::_1, delta), x, delta);
\n+
871}
\n+
\n+
872
\n+
873template<class X>
\n+
874inline typename internal::FixedSizeMatrix<X,X>::type numericalHessian(double (*f)(const X&), const X& x, double delta =
\n+
875 1e-5) {
\n+
876 return numericalHessian(std::function<double(const X&)>(f), x, delta);
\n+
877}
\n+
878
\n+
882template<class X1, class X2>
\n+
\n+
883class G_x1 {
\n+
884 const std::function<double(const X1&, const X2&)>& f_;
\n+
885 X1 x1_;
\n+
886 double delta_;
\n+
887public:
\n+
888 typedef typename internal::FixedSizeMatrix<X1>::type Vector;
\n+
889
\n+
890 G_x1(const std::function<double(const X1&, const X2&)>& f, const X1& x1,
\n+
891 double delta) :
\n+
892 f_(f), x1_(x1), delta_(delta) {
\n+
893 }
\n+
894 Vector operator()(const X2& x2) {
\n+
895 return numericalGradient<X1>(
\n+
896 std::bind(f_, std::placeholders::_1, std::cref(x2)), x1_, delta_);
\n+
897 }
\n+
898};
\n+
\n+
899
\n+
900template<class X1, class X2>
\n+
901inline typename internal::FixedSizeMatrix<X1,X2>::type numericalHessian212(
\n+
902 std::function<double(const X1&, const X2&)> f, const X1& x1, const X2& x2,
\n+
903 double delta = 1e-5) {
\n+
904 typedef typename internal::FixedSizeMatrix<X1>::type Vector;
\n+
905 G_x1<X1, X2> g_x1(f, x1, delta);
\n+
906 return numericalDerivative11<Vector, X2>(
\n+
907 std::function<Vector(const X2&)>(
\n+
908 std::bind<Vector>(std::ref(g_x1), std::placeholders::_1)),
\n+
909 x2, delta);
\n+
910}
\n+
911
\n+
912template<class X1, class X2>
\n+
913inline typename internal::FixedSizeMatrix<X1,X2>::type numericalHessian212(double (*f)(const X1&, const X2&),
\n+
914 const X1& x1, const X2& x2, double delta = 1e-5) {
\n+
915 return numericalHessian212(std::function<double(const X1&, const X2&)>(f),
\n+
916 x1, x2, delta);
\n+
917}
\n+
918
\n+
919template<class X1, class X2>
\n+
920inline typename internal::FixedSizeMatrix<X1,X1>::type numericalHessian211(
\n+
921 std::function<double(const X1&, const X2&)> f, const X1& x1, const X2& x2,
\n+
922 double delta = 1e-5) {
\n+
923
\n+
924 typedef typename internal::FixedSizeMatrix<X1>::type Vector;
\n+
925
\n+
926 Vector (*numGrad)(std::function<double(const X1&)>, const X1&,
\n+
927 double) = &numericalGradient<X1>;
\n+
928 std::function<double(const X1&)> f2(
\n+
929 std::bind(f, std::placeholders::_1, std::cref(x2)));
\n+
930
\n+
931 return numericalDerivative11<Vector, X1>(
\n+
932 std::function<Vector(const X1&)>(
\n+
933 std::bind(numGrad, f2, std::placeholders::_1, delta)),
\n+
934 x1, delta);
\n+
935}
\n+
936
\n+
937template<class X1, class X2>
\n+
938inline typename internal::FixedSizeMatrix<X1,X1>::type numericalHessian211(double (*f)(const X1&, const X2&),
\n+
939 const X1& x1, const X2& x2, double delta = 1e-5) {
\n+
940 return numericalHessian211(std::function<double(const X1&, const X2&)>(f),
\n+
941 x1, x2, delta);
\n+
942}
\n+
943
\n+
944template<class X1, class X2>
\n+
945inline typename internal::FixedSizeMatrix<X2,X2>::type numericalHessian222(
\n+
946 std::function<double(const X1&, const X2&)> f, const X1& x1, const X2& x2,
\n+
947 double delta = 1e-5) {
\n+
948 typedef typename internal::FixedSizeMatrix<X2>::type Vector;
\n+
949 Vector (*numGrad)(std::function<double(const X2&)>, const X2&,
\n+
950 double) = &numericalGradient<X2>;
\n+
951 std::function<double(const X2&)> f2(
\n+
952 std::bind(f, std::cref(x1), std::placeholders::_1));
\n+
953
\n+
954 return numericalDerivative11<Vector, X2>(
\n+
955 std::function<Vector(const X2&)>(
\n+
956 std::bind(numGrad, f2, std::placeholders::_1, delta)),
\n+
957 x2, delta);
\n+
958}
\n+
959
\n+
960template<class X1, class X2>
\n+
961inline typename internal::FixedSizeMatrix<X2,X2>::type numericalHessian222(double (*f)(const X1&, const X2&),
\n+
962 const X1& x1, const X2& x2, double delta = 1e-5) {
\n+
963 return numericalHessian222(std::function<double(const X1&, const X2&)>(f),
\n+
964 x1, x2, delta);
\n+
965}
\n+
966
\n+
970/* **************************************************************** */
\n+
971template<class X1, class X2, class X3>
\n+
\n+
972inline typename internal::FixedSizeMatrix<X1,X1>::type numericalHessian311(
\n+
973 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n+
974 const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
975 typedef typename internal::FixedSizeMatrix<X1>::type Vector;
\n+
976 Vector (*numGrad)(std::function<double(const X1&)>, const X1&,
\n+
977 double) = &numericalGradient<X1>;
\n+
978 std::function<double(const X1&)> f2(std::bind(
\n+
979 f, std::placeholders::_1, std::cref(x2), std::cref(x3)));
\n+
980
\n+
981 return numericalDerivative11<Vector, X1>(
\n+
982 std::function<Vector(const X1&)>(
\n+
983 std::bind(numGrad, f2, std::placeholders::_1, delta)),
\n+
984 x1, delta);
\n+
985}
\n+
\n+
986
\n+
987template<class X1, class X2, class X3>
\n+
988inline typename internal::FixedSizeMatrix<X1,X1>::type numericalHessian311(double (*f)(const X1&, const X2&, const X3&),
\n+
989 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
990 return numericalHessian311(
\n+
991 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n+
992 delta);
\n+
993}
\n+
994
\n+
995/* **************************************************************** */
\n+
996template<class X1, class X2, class X3>
\n+
997inline typename internal::FixedSizeMatrix<X2,X2>::type numericalHessian322(
\n+
998 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n+
999 const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
1000 typedef typename internal::FixedSizeMatrix<X2>::type Vector;
\n+
1001 Vector (*numGrad)(std::function<double(const X2&)>, const X2&,
\n+
1002 double) = &numericalGradient<X2>;
\n+
1003 std::function<double(const X2&)> f2(std::bind(
\n+
1004 f, std::cref(x1), std::placeholders::_1, std::cref(x3)));
\n+
1005
\n+
1006 return numericalDerivative11<Vector, X2>(
\n+
1007 std::function<Vector(const X2&)>(
\n+
1008 std::bind(numGrad, f2, std::placeholders::_1, delta)),
\n+
1009 x2, delta);
\n+
1010}
\n+
1011
\n+
1012template<class X1, class X2, class X3>
\n+
1013inline typename internal::FixedSizeMatrix<X2,X2>::type numericalHessian322(double (*f)(const X1&, const X2&, const X3&),
\n+
1014 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
1015 return numericalHessian322(
\n+
1016 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n+
1017 delta);
\n+
1018}
\n+
1019
\n+
1020/* **************************************************************** */
\n+
1021template<class X1, class X2, class X3>
\n+
1022inline typename internal::FixedSizeMatrix<X3,X3>::type numericalHessian333(
\n+
1023 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n+
1024 const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
1025 typedef typename internal::FixedSizeMatrix<X3>::type Vector;
\n+
1026 Vector (*numGrad)(std::function<double(const X3&)>, const X3&,
\n+
1027 double) = &numericalGradient<X3>;
\n+
1028 std::function<double(const X3&)> f2(std::bind(
\n+
1029 f, std::cref(x1), std::cref(x2), std::placeholders::_1));
\n+
1030
\n+
1031 return numericalDerivative11<Vector, X3>(
\n+
1032 std::function<Vector(const X3&)>(
\n+
1033 std::bind(numGrad, f2, std::placeholders::_1, delta)),
\n+
1034 x3, delta);
\n+
1035}
\n+
1036
\n+
1037template<class X1, class X2, class X3>
\n+
1038inline typename internal::FixedSizeMatrix<X3,X3>::type numericalHessian333(double (*f)(const X1&, const X2&, const X3&),
\n+
1039 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
1040 return numericalHessian333(
\n+
1041 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n+
1042 delta);
\n+
1043}
\n+
1044
\n+
1045/* **************************************************************** */
\n+
1046template<class X1, class X2, class X3>
\n+
1047inline typename internal::FixedSizeMatrix<X1,X2>::type numericalHessian312(
\n+
1048 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n+
1049 const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
1050 return numericalHessian212<X1, X2>(
\n+
1051 std::function<double(const X1&, const X2&)>(
\n+
1052 std::bind(f, std::placeholders::_1, std::placeholders::_2,
\n+
1053 std::cref(x3))),
\n+
1054 x1, x2, delta);
\n+
1055}
\n+
1056
\n+
1057template<class X1, class X2, class X3>
\n+
1058inline typename internal::FixedSizeMatrix<X1,X3>::type numericalHessian313(
\n+
1059 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n+
1060 const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
1061 return numericalHessian212<X1, X3>(
\n+
1062 std::function<double(const X1&, const X3&)>(
\n+
1063 std::bind(f, std::placeholders::_1, std::cref(x2),
\n+
1064 std::placeholders::_2)),
\n+
1065 x1, x3, delta);
\n+
1066}
\n+
1067
\n+
1068template<class X1, class X2, class X3>
\n+
1069inline typename internal::FixedSizeMatrix<X2,X3>::type numericalHessian323(
\n+
1070 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n+
1071 const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
1072 return numericalHessian212<X2, X3>(
\n+
1073 std::function<double(const X2&, const X3&)>(
\n+
1074 std::bind(f, std::cref(x1), std::placeholders::_1,
\n+
1075 std::placeholders::_2)),
\n+
1076 x2, x3, delta);
\n+
1077}
\n+
1078
\n+
1079/* **************************************************************** */
\n+
1080template<class X1, class X2, class X3>
\n+
1081inline typename internal::FixedSizeMatrix<X1,X2>::type numericalHessian312(double (*f)(const X1&, const X2&, const X3&),
\n+
1082 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
1083 return numericalHessian312(
\n+
1084 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n+
1085 delta);
\n+
1086}
\n+
1087
\n+
1088template<class X1, class X2, class X3>
\n+
1089inline typename internal::FixedSizeMatrix<X1,X3>::type numericalHessian313(double (*f)(const X1&, const X2&, const X3&),
\n+
1090 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
1091 return numericalHessian313(
\n+
1092 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n+
1093 delta);
\n+
1094}
\n+
1095
\n+
1096template<class X1, class X2, class X3>
\n+
1097inline typename internal::FixedSizeMatrix<X2,X3>::type numericalHessian323(double (*f)(const X1&, const X2&, const X3&),
\n+
1098 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n+
1099 return numericalHessian323(
\n+
1100 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n+
1101 delta);
\n+
1102}
\n+
1103
\n+
1104} // namespace gtsam
\n+
1105
\n+
Base class and basic functions for Lie types.
\n+\n+
Factor Graph Values.
\n+
A non-templated config holding any types of Manifold-group elements.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
T expm(const Vector &x, int K=7)
Exponential map given exponential coordinates class T needs a wedge<> function and a constructor from...
Definition Lie.h:317
\n-
Vector logmap_default(const Class &l0, const Class &lp)
Log map centered at l0, s.t.
Definition Lie.h:246
\n-
Class between_default(const Class &l1, const Class &l2)
These core global functions can be specialized by new Lie types for better performance.
Definition Lie.h:240
\n-
T interpolate(const T &X, const T &Y, double t, typename MakeOptionalJacobian< T, T >::type Hx=boost::none, typename MakeOptionalJacobian< T, T >::type Hy=boost::none)
Linear interpolation between X and Y by coefficient t.
Definition Lie.h:327
\n-
T BCH(const T &X, const T &Y)
Three term approximation of the Baker-Campbell-Hausdorff formula In non-commutative Lie groups,...
Definition Lie.h:298
\n-
Class expmap_default(const Class &t, const Vector &d)
Exponential map centered at l0, s.t.
Definition Lie.h:252
\n-
Matrix wedge(const Vector &x)
Declaration of wedge (see Murray94book) used to convert from n exponential coordinates to n*n element...
\n+
internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative61(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 1 of 6-argument function.
Definition numericalDerivative.h:643
\n+
internal::FixedSizeMatrix< X1, X1 >::type numericalHessian311(std::function< double(const X1 &, const X2 &, const X3 &)> f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
Numerical Hessian for tenary functions.
Definition numericalDerivative.h:972
\n+
internal::FixedSizeMatrix< X, X >::type numericalHessian(std::function< double(const X &)> f, const X &x, double delta=1e-5)
Compute numerical Hessian matrix.
Definition numericalDerivative.h:861
\n+
internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative21(const std::function< Y(const X1 &, const X2 &)> &h, const X1 &x1, const X2 &x2, double delta=1e-5)
Compute numerical derivative in argument 1 of binary function.
Definition numericalDerivative.h:166
\n+
internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative63(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 3 of 6-argument function.
Definition numericalDerivative.h:717
\n+
internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative51(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
Compute numerical derivative in argument 1 of 5-argument function.
Definition numericalDerivative.h:462
\n+
internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative54(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
Compute numerical derivative in argument 4 of 5-argument function.
Definition numericalDerivative.h:570
\n+
internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative41(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
Compute numerical derivative in argument 1 of 4-argument function.
Definition numericalDerivative.h:325
\n+
internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative64(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 4 of 6-argument function.
Definition numericalDerivative.h:754
\n+
internal::FixedSizeMatrix< Y, X6 >::type numericalDerivative66(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 6 of 6-argument function.
Definition numericalDerivative.h:828
\n+
internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative33(std::function< Y(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
Compute numerical derivative in argument 3 of ternary function.
Definition numericalDerivative.h:292
\n+
internal::FixedSizeMatrix< Y, X >::type numericalDerivative11(std::function< Y(const X &)> h, const X &x, double delta=1e-5)
New-style numerical derivatives using manifold_traits.
Definition numericalDerivative.h:110
\n+
internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative22(std::function< Y(const X1 &, const X2 &)> h, const X1 &x1, const X2 &x2, double delta=1e-5)
Compute numerical derivative in argument 2 of binary function.
Definition numericalDerivative.h:195
\n+
internal::FixedSizeMatrix< Y, X5 >::type numericalDerivative55(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
Compute numerical derivative in argument 5 of 5-argument function.
Definition numericalDerivative.h:606
\n+
internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative43(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
Compute numerical derivative in argument 3 of 4-argument function.
Definition numericalDerivative.h:393
\n+
internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative52(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
Compute numerical derivative in argument 2 of 5-argument function.
Definition numericalDerivative.h:498
\n+
internal::FixedSizeMatrix< Y, X5 >::type numericalDerivative65(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 5 of 6-argument function.
Definition numericalDerivative.h:791
\n+
internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative44(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
Compute numerical derivative in argument 4 of 4-argument function.
Definition numericalDerivative.h:427
\n+
internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative31(std::function< Y(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
Compute numerical derivative in argument 1 of ternary function.
Definition numericalDerivative.h:226
\n+
internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative62(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 2 of 6-argument function.
Definition numericalDerivative.h:680
\n+
internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative53(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
Compute numerical derivative in argument 3 of 5-argument function.
Definition numericalDerivative.h:534
\n+
internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative32(std::function< Y(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
Compute numerical derivative in argument 2 of ternary function.
Definition numericalDerivative.h:259
\n+
internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative42(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
Compute numerical derivative in argument 2 of 4-argument function.
Definition numericalDerivative.h:359
\n+
Eigen::Matrix< double, N, 1 > numericalGradient(std::function< double(const X &)> h, const X &x, double delta=1e-5)
Numerically compute gradient of scalar function.
Definition numericalDerivative.h:70
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
tag to assert a type is a group
Definition Group.h:34
\n-
Group operator syntax flavors.
Definition Group.h:37
\n-
Group Concept.
Definition Group.h:46
\n-
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n-
static Class Retract(const TangentVector &v, ChartJacobian H)
Retract at origin with optional derivative.
Definition Lie.h:121
\n-
TangentVector localCoordinates(const Class &g) const
localCoordinates as required by manifold concept: finds tangent vector between *this and g
Definition Lie.h:136
\n-
Class expmap(const TangentVector &v, ChartJacobian H1, ChartJacobian H2=boost::none) const
expmap with optional derivatives
Definition Lie.h:89
\n-
TangentVector localCoordinates(const Class &g, ChartJacobian H1, ChartJacobian H2=boost::none) const
localCoordinates with optional derivatives
Definition Lie.h:152
\n-
TangentVector logmap(const Class &g) const
logmap as required by manifold concept Applies logarithmic map to group element that takes *this to g
Definition Lie.h:84
\n-
TangentVector logmap(const Class &g, ChartJacobian H1, ChartJacobian H2=boost::none) const
logmap with optional derivatives
Definition Lie.h:100
\n-
static TangentVector LocalCoordinates(const Class &g)
LocalCoordinates at origin: possible in Lie group because it has an identity.
Definition Lie.h:116
\n-
Class retract(const TangentVector &v, ChartJacobian H1, ChartJacobian H2=boost::none) const
retract with optional derivatives
Definition Lie.h:141
\n-
static TangentVector LocalCoordinates(const Class &g, ChartJacobian H)
LocalCoordinates at origin with optional derivative.
Definition Lie.h:126
\n-
Class retract(const TangentVector &v) const
retract as required by manifold concept: applies v at *this
Definition Lie.h:131
\n-
Class expmap(const TangentVector &v) const
expmap as required by manifold concept Applies exponential map to v and composes with *this
Definition Lie.h:78
\n-
static Class Retract(const TangentVector &v)
Retract at origin: possible in Lie group because it has an identity.
Definition Lie.h:111
\n-
tag to assert a type is a Lie group
Definition Lie.h:164
\n-
A helper class that implements the traits interface for GTSAM lie groups.
Definition Lie.h:174
\n-
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n-
Lie Group Concept.
Definition Lie.h:260
\n-
Functor for transforming covariance of T.
Definition Lie.h:353
\n
tag to assert a type is a manifold
Definition Manifold.h:33
\n-
Extra manifold traits for fixed-dimension types.
Definition Manifold.h:75
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
Definition numericalDerivative.h:56
\n+
Helper class that computes the derivative of f w.r.t.
Definition numericalDerivative.h:883
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,440 +1,1165 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Lie.h\n+numericalDerivative.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-24#pragma once\n-25\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bG_\br_\bo_\bu_\bp_\b._\bh>\n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-36template \n-_\b3_\b7struct _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n-38\n-39 enum { dimension = N };\n-40 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b> ChartJacobian;\n-41 typedef Eigen::Matrix Jacobian;\n-42 typedef Eigen::Matrix TangentVector;\n-43\n-44 const Class & derived() const {\n-45 return static_cast(*this);\n-46 }\n-47\n-48 Class compose(const Class& g) const {\n-49 return derived() * g;\n-50 }\n+18// \\callgraph\n+19#pragma once\n+20\n+21#include \n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+30/*\n+31 * Note that all of these functions have two versions, a boost.function\n+version and a\n+32 * standard C++ function pointer version. This allows reformulating the\n+arguments of\n+33 * a function to fit the correct structure, which is useful for situations\n+like\n+34 * member functions and functions with arguments not involved in the\n+derivative:\n+35 *\n+36 * Usage of the boost bind version to rearrange arguments:\n+37 * for a function with one relevant param and an optional derivative:\n+38 * Foo bar(const Obj& a, boost::optional H1)\n+39 * Use boost.bind to restructure:\n+40 * std::bind(bar, std::placeholders::_1, boost::none)\n+41 * This syntax will fix the optional argument to boost::none, while using the\n+first argument provided\n+42 *\n+43 * For member functions, such as below, with an instantiated copy\n+instanceOfSomeClass\n+44 * Foo SomeClass::bar(const Obj& a)\n+45 * Use boost bind as follows to create a function pointer that uses the\n+member function:\n+46 * std::bind(&SomeClass::bar, ref(instanceOfSomeClass), std::placeholders::\n+_1)\n+47 *\n+48 * For additional details, see the documentation:\n+49 * http://www.boost.org/doc/libs/release/libs/bind/bind.html\n+50 */\n 51\n-52 Class between(const Class& g) const {\n-53 return derived().inverse() * g;\n-54 }\n-55\n-56 Class compose(const Class& g, ChartJacobian H1,\n-57 ChartJacobian H2 = boost::none) const {\n-58 if (H1) *H1 = g.inverse().AdjointMap();\n-59 if (H2) *H2 = Eigen::Matrix::Identity();\n-60 return derived() * g;\n-61 }\n-62\n-63 Class between(const Class& g, ChartJacobian H1,\n-64 ChartJacobian H2 = boost::none) const {\n-65 Class result = derived().inverse() * g;\n-66 if (H1) *H1 = - result.inverse().AdjointMap();\n-67 if (H2) *H2 = Eigen::Matrix::Identity();\n-68 return result;\n-69 }\n-70\n-71 Class inverse(ChartJacobian H) const {\n-72 if (H) *H = - derived().AdjointMap();\n-73 return derived().inverse();\n-74 }\n-75\n-_\b7_\b8 Class _\be_\bx_\bp_\bm_\ba_\bp(const TangentVector& v) const {\n-79 return compose(Class::Expmap(v));\n-80 }\n-81\n-_\b8_\b4 TangentVector _\bl_\bo_\bg_\bm_\ba_\bp(const Class& g) const {\n-85 return Class::Logmap(between(g));\n-86 }\n-87\n-_\b8_\b9 Class _\be_\bx_\bp_\bm_\ba_\bp(const TangentVector& v, //\n-90 ChartJacobian H1, ChartJacobian H2 = boost::none) const {\n-91 Jacobian D_g_v;\n-92 Class g = Class::Expmap(v,H2 ? &D_g_v : 0);\n-93 Class h = compose(g); // derivatives inlined below\n-94 if (H1) *H1 = g.inverse().AdjointMap();\n-95 if (H2) *H2 = D_g_v;\n-96 return h;\n-97 }\n-98\n-_\b1_\b0_\b0 TangentVector _\bl_\bo_\bg_\bm_\ba_\bp(const Class& g, //\n-101 ChartJacobian H1, ChartJacobian H2 = boost::none) const {\n-102 Class h = between(g); // derivatives inlined below\n-103 Jacobian D_v_h;\n-104 TangentVector v = Class::Logmap(h, (H1 || H2) ? &D_v_h : 0);\n-105 if (H1) *H1 = - D_v_h * h.inverse().AdjointMap();\n-106 if (H2) *H2 = D_v_h;\n-107 return v;\n-108 }\n-109\n-_\b1_\b1_\b1 static Class _\bR_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& v) {\n-112 return Class::ChartAtOrigin::Retract(v);\n-113 }\n-114\n-_\b1_\b1_\b6 static TangentVector _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const Class& g) {\n-117 return Class::ChartAtOrigin::Local(g);\n-118 }\n-119\n-_\b1_\b2_\b1 static Class _\bR_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& v, ChartJacobian H) {\n-122 return Class::ChartAtOrigin::Retract(v,H);\n-123 }\n-124\n-_\b1_\b2_\b6 static TangentVector _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const Class& g, ChartJacobian H) {\n-127 return Class::ChartAtOrigin::Local(g,H);\n-128 }\n+52\n+53// a quick helper struct to get the appropriate fixed sized matrix from two\n+value types\n+54namespace internal {\n+55template\n+_\b5_\b6struct _\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx {\n+57 typedef Eigen::Matrix::dimension, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>\n+type;\n+58};\n+59}\n+60\n+69template ::dimension>\n+_\b7_\b0typename Eigen::Matrix _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt(\n+71 std::function h, const X& x, double delta = 1e-5) {\n+72 double factor = 1.0 / (2.0 * delta);\n+73\n+74 BOOST_STATIC_ASSERT_MSG(\n+75 (boost::is_base_of<_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::\n+value),\n+76 \"Template argument X must be a manifold type.\");\n+77 BOOST_STATIC_ASSERT_MSG(N>0, \"Template argument X must be fixed-size type or\n+N must be specified.\");\n+78\n+79 // Prepare a tangent vector to perturb x with, only works for fixed size\n+80 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br d;\n+81 d.setZero();\n+82\n+83 Eigen::Matrix g;\n+84 g.setZero();\n+85 for (int j = 0; j < N; j++) {\n+86 d(j) = delta;\n+87 double hxplus = h(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(x, d));\n+88 d(j) = -delta;\n+89 double hxmin = h(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(x, d));\n+90 d(j) = 0;\n+91 g(j) = (hxplus - hxmin) * factor;\n+92 }\n+93 return g;\n+94}\n+95\n+108template ::dimension>\n+109// TODO Should compute fixed-size matrix\n+_\b1_\b1_\b0typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b1_\b1(\n+111 std::function h, const X& x, double delta = 1e-5) {\n+112 typedef typename internal::FixedSizeMatrix::type Matrix;\n+113\n+114 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+115 \"Template argument Y must be a manifold type.\");\n+116 typedef _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b> TraitsY;\n+117\n+118 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+119 \"Template argument X must be a manifold type.\");\n+120 BOOST_STATIC_ASSERT_MSG(N>0, \"Template argument X must be fixed-size type\n+or N must be specified.\");\n+121 typedef _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b> TraitsX;\n+122\n+123 // get value at x, and corresponding chart\n+124 const Y hx = h(x);\n+125\n+126 // Bit of a hack for now to find number of rows\n+127 const typename TraitsY::TangentVector zeroY = TraitsY::Local(hx, hx);\n+128 const size_t m = zeroY.size();\n 129\n-_\b1_\b3_\b1 Class _\br_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& v) const {\n-132 return compose(Class::ChartAtOrigin::Retract(v));\n-133 }\n-134\n-_\b1_\b3_\b6 TangentVector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const Class& g) const {\n-137 return Class::ChartAtOrigin::Local(between(g));\n-138 }\n-139\n-_\b1_\b4_\b1 Class _\br_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& v, //\n-142 ChartJacobian H1, ChartJacobian H2 = boost::none) const {\n-143 Jacobian D_g_v;\n-144 Class g = Class::ChartAtOrigin::Retract(v, H2 ? &D_g_v : 0);\n-145 Class h = compose(g); // derivatives inlined below\n-146 if (H1) *H1 = g.inverse().AdjointMap();\n-147 if (H2) *H2 = D_g_v;\n-148 return h;\n-149 }\n-150\n-_\b1_\b5_\b2 TangentVector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const Class& g, //\n-153 ChartJacobian H1, ChartJacobian H2 = boost::none) const {\n-154 Class h = between(g); // derivatives inlined below\n-155 Jacobian D_v_h;\n-156 TangentVector v = Class::ChartAtOrigin::Local(h, (H1 || H2) ? &D_v_h : 0);\n-157 if (H1) *H1 = - D_v_h * h.inverse().AdjointMap();\n-158 if (H2) *H2 = D_v_h;\n-159 return v;\n-160 }\n-161};\n-162\n-_\b1_\b6_\b4struct _\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg: public _\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, public _\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg {};\n-165\n-166namespace internal {\n-167\n-173template\n-_\b1_\b7_\b4struct _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs: _\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl {\n-175 typedef _\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n-176\n-179 typedef _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n-180 static Class Identity() { return Class::Identity();}\n-182\n-185 typedef Class ManifoldType;\n-186 enum { dimension = Class::dimension };\n-187 typedef Eigen::Matrix TangentVector;\n-188 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> ChartJacobian;\n-189\n-190 static TangentVector Local(const Class& origin, const Class& other,\n-191 ChartJacobian Horigin = boost::none, ChartJacobian Hother = boost::none) {\n-192 return origin.localCoordinates(other, Horigin, Hother);\n-193 }\n-194\n-195 static Class Retract(const Class& origin, const TangentVector& v,\n-196 ChartJacobian Horigin = boost::none, ChartJacobian Hv = boost::none) {\n-197 return origin.retract(v, Horigin, Hv);\n-198 }\n-200\n-203 static TangentVector Logmap(const Class& m, ChartJacobian Hm = boost::none)\n-{\n-204 return Class::Logmap(m, Hm);\n-205 }\n-206\n-207 static Class Expmap(const TangentVector& v, ChartJacobian Hv = boost::none)\n-{\n-208 return Class::Expmap(v, Hv);\n-209 }\n-210\n-211 static Class Compose(const Class& m1, const Class& m2, //\n-212 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-213 return m1.compose(m2, H1, H2);\n-214 }\n-215\n-216 static Class Between(const Class& m1, const Class& m2, //\n-217 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-218 return m1.between(m2, H1, H2);\n-219 }\n-220\n-221 static Class Inverse(const Class& m, //\n-222 ChartJacobian H = boost::none) {\n-223 return m.inverse(H);\n-224 }\n-226};\n-227\n-_\b2_\b2_\b9template struct _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp: _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs,\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-230\n-231} // \\ namepsace internal\n-232\n-239template\n-_\b2_\b4_\b0inline Class _\bb_\be_\bt_\bw_\be_\be_\bn_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt(const Class& l1, const Class& l2) {\n-241 return l1.inverse().compose(l2);\n-242}\n-243\n-245template\n-_\b2_\b4_\b6inline Vector _\bl_\bo_\bg_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt(const Class& l0, const Class& lp) {\n-247 return Class::Logmap(l0.between(lp));\n-248}\n-249\n-251template\n-_\b2_\b5_\b2inline Class _\be_\bx_\bp_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt(const Class& t, const Vector& d) {\n-253 return t.compose(Class::Expmap(d));\n-254}\n-255\n-259template\n-_\b2_\b6_\b0class _\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp: public _\bI_\bs_\bG_\br_\bo_\bu_\bp, public IsManifold {\n-261public:\n-262 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by structure_category_tag;\n-263 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\by_\bp_\be ManifoldType;\n-264 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br TangentVector;\n-265 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn ChartJacobian;\n-266\n-267 BOOST_CONCEPT_USAGE(_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp) {\n-268 BOOST_STATIC_ASSERT_MSG(\n-269 (boost::is_base_of::value),\n-270 \"This type's trait does not assert it is a Lie group (or derived)\");\n-271\n-272 // group opertations with Jacobians\n-273 g = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(g, h, Hg, Hh);\n-274 g = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(g, h, Hg, Hh);\n-275 g = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bI_\bn_\bv_\be_\br_\bs_\be(g, Hg);\n-276 // log and exp map without Jacobians\n-277 g = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(v);\n-278 v = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(g);\n-279 // log and exponential map with Jacobians\n-280 g = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(v, Hg);\n-281 v = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(g, Hg);\n-282 }\n-283private:\n-284 T g, h;\n-285 TangentVector v;\n-286 ChartJacobian Hg, Hh;\n-287};\n-288\n-297template\n-_\b2_\b9_\b8T _\bB_\bC_\bH(const T& X, const T& Y) {\n-299 static const double _2 = 1. / 2., _12 = 1. / 12., _24 = 1. / 24.;\n-300 T X_Y = bracket(X, Y);\n-301 return T(X + Y + _2 * X_Y + _12 * bracket(X - Y, X_Y) - _24 * bracket(Y,\n-bracket(X, X_Y)));\n+130 // Prepare a tangent vector to perturb x with, only works for fixed size\n+131 Eigen::Matrix dx;\n+132 dx.setZero();\n+133\n+134 // Fill in Jacobian H\n+135 Matrix H = Matrix::Zero(m, N);\n+136 const double factor = 1.0 / (2.0 * delta);\n+137 for (int j = 0; j < N; j++) {\n+138 dx(j) = delta;\n+139 const auto dy1 = TraitsY::Local(hx, h(TraitsX::Retract(x, dx)));\n+140 dx(j) = -delta;\n+141 const auto dy2 = TraitsY::Local(hx, h(TraitsX::Retract(x, dx)));\n+142 dx(j) = 0;\n+143 H.col(j) << (dy1 - dy2) * factor;\n+144 }\n+145 return H;\n+146}\n+147\n+149template\n+_\b1_\b5_\b0typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b1_\b1(Y (*h)\n+(const X&), const X& x,\n+151 double delta = 1e-5) {\n+152 return numericalDerivative11(std::bind(h, std::placeholders::_1), x,\n+153 delta);\n+154}\n+155\n+165template::dimension>\n+_\b1_\b6_\b6typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b1(const\n+std::function& h,\n+167 const X1& x1, const X2& x2, double delta = 1e-5) {\n+168 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+169 \"Template argument Y must be a manifold type.\");\n+170 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+171 \"Template argument X1 must be a manifold type.\");\n+172 return numericalDerivative11(\n+173 std::bind(h, std::placeholders::_1, std::cref(x2)), x1, delta);\n+174}\n+175\n+177template\n+_\b1_\b7_\b8typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b1(Y (*h)\n+(const X1&, const X2&), const X1& x1,\n+179 const X2& x2, double delta = 1e-5) {\n+180 return numericalDerivative21(\n+181 std::bind(h, std::placeholders::_1, std::placeholders::_2), x1, x2,\n+182 delta);\n+183}\n+184\n+194template::dimension>\n+_\b1_\b9_\b5typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b2(std::\n+function h,\n+196 const X1& x1, const X2& x2, double delta = 1e-5) {\n+197// BOOST_STATIC_ASSERT_MSG( (boost::is_base_of::structure_category>::value),\n+198// \"Template argument X1 must be a manifold type.\");\n+199 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b2_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+200 \"Template argument X2 must be a manifold type.\");\n+201 return numericalDerivative11(\n+202 std::bind(h, std::cref(x1), std::placeholders::_1), x2, delta);\n+203}\n+204\n+206template\n+_\b2_\b0_\b7typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b2(Y (*h)\n+(const X1&, const X2&), const X1& x1,\n+208 const X2& x2, double delta = 1e-5) {\n+209 return numericalDerivative22(\n+210 std::bind(h, std::placeholders::_1, std::placeholders::_2), x1, x2,\n+211 delta);\n+212}\n+213\n+225template::\n+dimension>\n+_\b2_\b2_\b6typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b1(\n+227 std::function h, const X1& x1,\n+228 const X2& x2, const X3& x3, double delta = 1e-5) {\n+229 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+230 \"Template argument Y must be a manifold type.\");\n+231 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+232 \"Template argument X1 must be a manifold type.\");\n+233 return numericalDerivative11(\n+234 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3)),\n+235 x1, delta);\n+236}\n+237\n+238template\n+239typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b1(Y (*h)\n+(const X1&, const X2&, const X3&),\n+240 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n+241 return numericalDerivative31(\n+242 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+243 std::placeholders::_3),\n+244 x1, x2, x3, delta);\n+245}\n+246\n+258template::\n+dimension>\n+_\b2_\b5_\b9typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b2(\n+260 std::function h, const X1& x1,\n+261 const X2& x2, const X3& x3, double delta = 1e-5) {\n+262 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+263 \"Template argument Y must be a manifold type.\");\n+264 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b2_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+265 \"Template argument X2 must be a manifold type.\");\n+266 return numericalDerivative11(\n+267 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3)),\n+268 x2, delta);\n+269}\n+270\n+271template\n+272inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b2\n+(Y (*h)(const X1&, const X2&, const X3&),\n+273 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n+274 return numericalDerivative32(\n+275 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+276 std::placeholders::_3),\n+277 x1, x2, x3, delta);\n+278}\n+279\n+291template::\n+dimension>\n+_\b2_\b9_\b2typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b3(\n+293 std::function h, const X1& x1,\n+294 const X2& x2, const X3& x3, double delta = 1e-5) {\n+295 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+296 \"Template argument Y must be a manifold type.\");\n+297 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b3_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+298 \"Template argument X3 must be a manifold type.\");\n+299 return numericalDerivative11(\n+300 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1),\n+301 x3, delta);\n 302}\n 303\n-_\b3_\b0_\b8template Matrix _\bw_\be_\bd_\bg_\be(const Vector& x);\n-309\n-316template \n-_\b3_\b1_\b7T _\be_\bx_\bp_\bm(const Vector& x, int K=7) {\n-318 Matrix xhat = wedge(x);\n-319 return T(_\be_\bx_\bp_\bm(xhat,K));\n-320}\n-321\n-326template \n-_\b3_\b2_\b7T _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const T& X, const T& Y, double t,\n-328 typename MakeOptionalJacobian::type Hx = boost::none,\n-329 typename MakeOptionalJacobian::type Hy = boost::none) {\n-330 if (Hx || Hy) {\n-331 typename MakeJacobian::type between_H_x, log_H, exp_H, compose_H_x;\n-332 const T between =\n-333 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(X, Y, between_H_x); // between_H_y = identity\n-334 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br delta = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(between,\n-log_H);\n-335 const T Delta = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(t * delta, exp_H);\n-336 const T result = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(\n-337 X, Delta, compose_H_x); // compose_H_xinv_y = identity\n-338\n-339 if (Hx) *Hx = compose_H_x + t * exp_H * log_H * between_H_x;\n-340 if (Hy) *Hy = t * exp_H * log_H;\n-341 return result;\n-342 }\n-343 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(\n-344 X, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(t * _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(X, Y))));\n+304template\n+305inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b3\n+(Y (*h)(const X1&, const X2&, const X3&),\n+306 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n+307 return numericalDerivative33(\n+308 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+309 std::placeholders::_3),\n+310 x1, x2, x3, delta);\n+311}\n+312\n+324template::dimension>\n+_\b3_\b2_\b5typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b1(\n+326 std::function h, const X1&\n+x1,\n+327 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {\n+328 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+329 \"Template argument Y must be a manifold type.\");\n+330 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+331 \"Template argument X1 must be a manifold type.\");\n+332 return numericalDerivative11(\n+333 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),\n+334 std::cref(x4)),\n+335 x1, delta);\n+336}\n+337\n+338template\n+339inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b1\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&),\n+340 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-\n+5) {\n+341 return numericalDerivative41(\n+342 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+343 std::placeholders::_3, std::placeholders::_4),\n+344 x1, x2, x3, x4);\n 345}\n 346\n-351template\n-_\b3_\b5_\b2class _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n-353{\n-354private:\n-355 typename T::Jacobian adjointMap_;\n-356public:\n-357 explicit _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be(const T &X) : adjointMap_{X.AdjointMap()} {}\n-358 typename T::Jacobian operator()(const typename T::Jacobian &covariance)\n-359 { return adjointMap_ * covariance * adjointMap_.transpose(); }\n-360};\n-361\n-362} // namespace gtsam\n-363\n-_\b3_\b7_\b2#define GTSAM_CONCEPT_LIE_INST(T) template class gtsam::IsLieGroup;\n-373#define GTSAM_CONCEPT_LIE_TYPE(T) using _gtsam_IsLieGroup_##T = gtsam::\n-IsLieGroup;\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bG_\br_\bo_\bu_\bp_\b._\bh\n-Concept check class for variable types with Group properties.\n+358template::dimension>\n+_\b3_\b5_\b9typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b2(\n+360 std::function h, const X1&\n+x1,\n+361 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {\n+362 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+363 \"Template argument Y must be a manifold type.\");\n+364 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b2_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+365 \"Template argument X2 must be a manifold type.\");\n+366 return numericalDerivative11(\n+367 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),\n+368 std::cref(x4)),\n+369 x2, delta);\n+370}\n+371\n+372template\n+373inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b2\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&),\n+374 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-\n+5) {\n+375 return numericalDerivative42(\n+376 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+377 std::placeholders::_3, std::placeholders::_4),\n+378 x1, x2, x3, x4);\n+379}\n+380\n+392template::dimension>\n+_\b3_\b9_\b3typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b3(\n+394 std::function h, const X1&\n+x1,\n+395 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {\n+396 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+397 \"Template argument Y must be a manifold type.\");\n+398 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b3_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+399 \"Template argument X3 must be a manifold type.\");\n+400 return numericalDerivative11(\n+401 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,\n+402 std::cref(x4)),\n+403 x3, delta);\n+404}\n+405\n+406template\n+407inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b3\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&),\n+408 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-\n+5) {\n+409 return numericalDerivative43(\n+410 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+411 std::placeholders::_3, std::placeholders::_4),\n+412 x1, x2, x3, x4);\n+413}\n+414\n+426template::dimension>\n+_\b4_\b2_\b7typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b4(\n+428 std::function h, const X1&\n+x1,\n+429 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {\n+430 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+431 \"Template argument Y must be a manifold type.\");\n+432 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b4_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+433 \"Template argument X4 must be a manifold type.\");\n+434 return numericalDerivative11(\n+435 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n+436 std::placeholders::_1),\n+437 x4, delta);\n+438}\n+439\n+440template\n+441inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b4\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&),\n+442 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-\n+5) {\n+443 return numericalDerivative44(\n+444 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+445 std::placeholders::_3, std::placeholders::_4),\n+446 x1, x2, x3, x4);\n+447}\n+448\n+461template::dimension>\n+_\b4_\b6_\b2typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b1(\n+463 std::function h,\n+const X1& x1,\n+464 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-\n+5) {\n+465 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+466 \"Template argument Y must be a manifold type.\");\n+467 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+468 \"Template argument X1 must be a manifold type.\");\n+469 return numericalDerivative11(\n+470 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),\n+471 std::cref(x4), std::cref(x5)),\n+472 x1, delta);\n+473}\n+474\n+475template\n+476inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b1\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),\n+477 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5,\n+double delta = 1e-5) {\n+478 return numericalDerivative51(\n+479 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+480 std::placeholders::_3, std::placeholders::_4,\n+481 std::placeholders::_5),\n+482 x1, x2, x3, x4, x5);\n+483}\n+484\n+497template::dimension>\n+_\b4_\b9_\b8typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b2(\n+499 std::function h,\n+const X1& x1,\n+500 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-\n+5) {\n+501 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+502 \"Template argument Y must be a manifold type.\");\n+503 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+504 \"Template argument X1 must be a manifold type.\");\n+505 return numericalDerivative11(\n+506 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),\n+507 std::cref(x4), std::cref(x5)),\n+508 x2, delta);\n+509}\n+510\n+511template\n+512inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b2\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),\n+513 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5,\n+double delta = 1e-5) {\n+514 return numericalDerivative52(\n+515 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+516 std::placeholders::_3, std::placeholders::_4,\n+517 std::placeholders::_5),\n+518 x1, x2, x3, x4, x5);\n+519}\n+520\n+533template::dimension>\n+_\b5_\b3_\b4typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b3(\n+535 std::function h,\n+const X1& x1,\n+536 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-\n+5) {\n+537 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+538 \"Template argument Y must be a manifold type.\");\n+539 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+540 \"Template argument X1 must be a manifold type.\");\n+541 return numericalDerivative11(\n+542 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,\n+543 std::cref(x4), std::cref(x5)),\n+544 x3, delta);\n+545}\n+546\n+547template\n+548inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b3\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),\n+549 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5,\n+double delta = 1e-5) {\n+550 return numericalDerivative53(\n+551 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+552 std::placeholders::_3, std::placeholders::_4,\n+553 std::placeholders::_5),\n+554 x1, x2, x3, x4, x5);\n+555}\n+556\n+569template::dimension>\n+_\b5_\b7_\b0typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b4(\n+571 std::function h,\n+const X1& x1,\n+572 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-\n+5) {\n+573 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+574 \"Template argument Y must be a manifold type.\");\n+575 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+576 \"Template argument X1 must be a manifold type.\");\n+577 return numericalDerivative11(\n+578 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n+579 std::placeholders::_1, std::cref(x5)),\n+580 x4, delta);\n+581}\n+582\n+583template\n+584inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b4\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),\n+585 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5,\n+double delta = 1e-5) {\n+586 return numericalDerivative54(\n+587 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+588 std::placeholders::_3, std::placeholders::_4,\n+589 std::placeholders::_5),\n+590 x1, x2, x3, x4, x5);\n+591}\n+592\n+605template::dimension>\n+_\b6_\b0_\b6typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b5(\n+607 std::function h,\n+const X1& x1,\n+608 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-\n+5) {\n+609 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+610 \"Template argument Y must be a manifold type.\");\n+611 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+612 \"Template argument X1 must be a manifold type.\");\n+613 return numericalDerivative11(\n+614 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n+615 std::cref(x4), std::placeholders::_1),\n+616 x5, delta);\n+617}\n+618\n+619template\n+620inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b5\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),\n+621 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5,\n+double delta = 1e-5) {\n+622 return numericalDerivative55(\n+623 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+624 std::placeholders::_3, std::placeholders::_4,\n+625 std::placeholders::_5),\n+626 x1, x2, x3, x4, x5);\n+627}\n+628\n+642template::dimension>\n+_\b6_\b4_\b3typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b1(\n+644 std::function h, const X1& x1,\n+645 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,\n+double delta = 1e-5) {\n+646 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+647 \"Template argument Y must be a manifold type.\");\n+648 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+649 \"Template argument X1 must be a manifold type.\");\n+650 return numericalDerivative11(\n+651 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),\n+652 std::cref(x4), std::cref(x5), std::cref(x6)),\n+653 x1, delta);\n+654}\n+655\n+656template\n+657inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b1\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n+658 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n+X6& x6, double delta = 1e-5) {\n+659 return numericalDerivative61(\n+660 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+661 std::placeholders::_3, std::placeholders::_4,\n+662 std::placeholders::_5, std::placeholders::_6),\n+663 x1, x2, x3, x4, x5, x6);\n+664}\n+665\n+679template::dimension>\n+_\b6_\b8_\b0typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b2(\n+681 std::function h, const X1& x1,\n+682 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,\n+double delta = 1e-5) {\n+683 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+684 \"Template argument Y must be a manifold type.\");\n+685 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+686 \"Template argument X1 must be a manifold type.\");\n+687 return numericalDerivative11(\n+688 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),\n+689 std::cref(x4), std::cref(x5), std::cref(x6)),\n+690 x2, delta);\n+691}\n+692\n+693template\n+694inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b2\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n+695 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n+X6& x6, double delta = 1e-5) {\n+696 return numericalDerivative62(\n+697 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+698 std::placeholders::_3, std::placeholders::_4,\n+699 std::placeholders::_5, std::placeholders::_6),\n+700 x1, x2, x3, x4, x5, x6);\n+701}\n+702\n+716template::dimension>\n+_\b7_\b1_\b7typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b3(\n+718 std::function h, const X1& x1,\n+719 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,\n+double delta = 1e-5) {\n+720 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+721 \"Template argument Y must be a manifold type.\");\n+722 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+723 \"Template argument X1 must be a manifold type.\");\n+724 return numericalDerivative11(\n+725 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,\n+726 std::cref(x4), std::cref(x5), std::cref(x6)),\n+727 x3, delta);\n+728}\n+729\n+730template\n+731inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b3\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n+732 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n+X6& x6, double delta = 1e-5) {\n+733 return numericalDerivative63(\n+734 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+735 std::placeholders::_3, std::placeholders::_4,\n+736 std::placeholders::_5, std::placeholders::_6),\n+737 x1, x2, x3, x4, x5, x6);\n+738}\n+739\n+753template::dimension>\n+_\b7_\b5_\b4typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b4(\n+755 std::function h, const X1& x1,\n+756 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,\n+double delta = 1e-5) {\n+757 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+758 \"Template argument Y must be a manifold type.\");\n+759 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+760 \"Template argument X1 must be a manifold type.\");\n+761 return numericalDerivative11(\n+762 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n+763 std::placeholders::_1, std::cref(x5), std::cref(x6)),\n+764 x4, delta);\n+765}\n+766\n+767template\n+768inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b4\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n+769 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n+X6& x6, double delta = 1e-5) {\n+770 return numericalDerivative64(\n+771 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+772 std::placeholders::_3, std::placeholders::_4,\n+773 std::placeholders::_5, std::placeholders::_6),\n+774 x1, x2, x3, x4, x5, x6);\n+775}\n+776\n+790template::dimension>\n+_\b7_\b9_\b1typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b5(\n+792 std::function h, const X1& x1,\n+793 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,\n+double delta = 1e-5) {\n+794 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+795 \"Template argument Y must be a manifold type.\");\n+796 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+797 \"Template argument X1 must be a manifold type.\");\n+798 return numericalDerivative11(\n+799 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n+800 std::cref(x4), std::placeholders::_1, std::cref(x6)),\n+801 x5, delta);\n+802}\n+803\n+804template\n+805inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b5\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n+806 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n+X6& x6, double delta = 1e-5) {\n+807 return numericalDerivative65(\n+808 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+809 std::placeholders::_3, std::placeholders::_4,\n+810 std::placeholders::_5, std::placeholders::_6),\n+811 x1, x2, x3, x4, x5, x6);\n+812}\n+813\n+827template::dimension>\n+_\b8_\b2_\b8typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b6(\n+829 std::function h,\n+830 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n+X6& x6,\n+831 double delta = 1e-5) {\n+832 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+833 \"Template argument Y must be a manifold type.\");\n+834 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+835 \"Template argument X1 must be a manifold type.\");\n+836 return numericalDerivative11(\n+837 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n+838 std::cref(x4), std::cref(x5), std::placeholders::_1),\n+839 x6, delta);\n+840}\n+841\n+842template\n+843inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b6\n+(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n+844 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n+X6& x6, double delta = 1e-5) {\n+845 return numericalDerivative66(\n+846 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n+847 std::placeholders::_3, std::placeholders::_4,\n+848 std::placeholders::_5, std::placeholders::_6),\n+849 x1, x2, x3, x4, x5, x6);\n+850}\n+851\n+860template\n+_\b8_\b6_\b1inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn(std::\n+function f, const X& x,\n+862 double delta = 1e-5) {\n+863 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n+_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n+864 \"Template argument X must be a manifold type.\");\n+865 typedef Eigen::Matrix::dimension, 1> VectorD;\n+866 typedef std::function F;\n+867 typedef std::function G;\n+868 G ng = static_cast(numericalGradient );\n+869 return numericalDerivative11(\n+870 std::bind(ng, f, std::placeholders::_1, delta), x, delta);\n+871}\n+872\n+873template\n+874inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn(double\n+(*f)(const X&), const X& x, double delta =\n+875 1e-5) {\n+876 return _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn(std::function(f), x, delta);\n+877}\n+878\n+882template\n+_\b8_\b8_\b3class _\bG_\b__\bx_\b1 {\n+884 const std::function& f_;\n+885 X1 x1_;\n+886 double delta_;\n+887public:\n+888 typedef typename internal::FixedSizeMatrix::type Vector;\n+889\n+890 _\bG_\b__\bx_\b1(const std::function& f, const X1& x1,\n+891 double delta) :\n+892 f_(f), x1_(x1), delta_(delta) {\n+893 }\n+894 Vector operator()(const X2& x2) {\n+895 return numericalGradient(\n+896 std::bind(f_, std::placeholders::_1, std::cref(x2)), x1_, delta_);\n+897 }\n+898};\n+899\n+900template\n+901inline typename internal::FixedSizeMatrix::type numericalHessian212(\n+902 std::function f, const X1& x1, const X2& x2,\n+903 double delta = 1e-5) {\n+904 typedef typename internal::FixedSizeMatrix::type Vector;\n+905 _\bG_\b__\bx_\b1_\b<_\bX_\b1_\b,_\b _\bX_\b2_\b> g_x1(f, x1, delta);\n+906 return numericalDerivative11(\n+907 std::function(\n+908 std::bind(std::ref(g_x1), std::placeholders::_1)),\n+909 x2, delta);\n+910}\n+911\n+912template\n+913inline typename internal::FixedSizeMatrix::type numericalHessian212\n+(double (*f)(const X1&, const X2&),\n+914 const X1& x1, const X2& x2, double delta = 1e-5) {\n+915 return numericalHessian212(std::function(f),\n+916 x1, x2, delta);\n+917}\n+918\n+919template\n+920inline typename internal::FixedSizeMatrix::type numericalHessian211(\n+921 std::function f, const X1& x1, const X2& x2,\n+922 double delta = 1e-5) {\n+923\n+924 typedef typename internal::FixedSizeMatrix::type Vector;\n+925\n+926 Vector (*numGrad)(std::function, const X1&,\n+927 double) = &numericalGradient;\n+928 std::function f2(\n+929 std::bind(f, std::placeholders::_1, std::cref(x2)));\n+930\n+931 return numericalDerivative11(\n+932 std::function(\n+933 std::bind(numGrad, f2, std::placeholders::_1, delta)),\n+934 x1, delta);\n+935}\n+936\n+937template\n+938inline typename internal::FixedSizeMatrix::type numericalHessian211\n+(double (*f)(const X1&, const X2&),\n+939 const X1& x1, const X2& x2, double delta = 1e-5) {\n+940 return numericalHessian211(std::function(f),\n+941 x1, x2, delta);\n+942}\n+943\n+944template\n+945inline typename internal::FixedSizeMatrix::type numericalHessian222(\n+946 std::function f, const X1& x1, const X2& x2,\n+947 double delta = 1e-5) {\n+948 typedef typename internal::FixedSizeMatrix::type Vector;\n+949 Vector (*numGrad)(std::function, const X2&,\n+950 double) = &numericalGradient;\n+951 std::function f2(\n+952 std::bind(f, std::cref(x1), std::placeholders::_1));\n+953\n+954 return numericalDerivative11(\n+955 std::function(\n+956 std::bind(numGrad, f2, std::placeholders::_1, delta)),\n+957 x2, delta);\n+958}\n+959\n+960template\n+961inline typename internal::FixedSizeMatrix::type numericalHessian222\n+(double (*f)(const X1&, const X2&),\n+962 const X1& x1, const X2& x2, double delta = 1e-5) {\n+963 return numericalHessian222(std::function(f),\n+964 x1, x2, delta);\n+965}\n+966\n+970/* **************************************************************** */\n+971template\n+_\b9_\b7_\b2inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn_\b3_\b1_\b1(\n+973 std::function f, const X1& x1,\n+974 const X2& x2, const X3& x3, double delta = 1e-5) {\n+975 typedef typename internal::FixedSizeMatrix::type Vector;\n+976 Vector (*numGrad)(std::function, const X1&,\n+977 double) = &numericalGradient;\n+978 std::function f2(std::bind(\n+979 f, std::placeholders::_1, std::cref(x2), std::cref(x3)));\n+980\n+981 return numericalDerivative11(\n+982 std::function(\n+983 std::bind(numGrad, f2, std::placeholders::_1, delta)),\n+984 x1, delta);\n+985}\n+986\n+987template\n+988inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn_\b3_\b1_\b1\n+(double (*f)(const X1&, const X2&, const X3&),\n+989 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n+990 return _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn_\b3_\b1_\b1(\n+991 std::function(f), x1, x2, x3,\n+992 delta);\n+993}\n+994\n+995/* **************************************************************** */\n+996template\n+997inline typename internal::FixedSizeMatrix::type numericalHessian322(\n+998 std::function f, const X1& x1,\n+999 const X2& x2, const X3& x3, double delta = 1e-5) {\n+1000 typedef typename internal::FixedSizeMatrix::type Vector;\n+1001 Vector (*numGrad)(std::function, const X2&,\n+1002 double) = &numericalGradient;\n+1003 std::function f2(std::bind(\n+1004 f, std::cref(x1), std::placeholders::_1, std::cref(x3)));\n+1005\n+1006 return numericalDerivative11(\n+1007 std::function(\n+1008 std::bind(numGrad, f2, std::placeholders::_1, delta)),\n+1009 x2, delta);\n+1010}\n+1011\n+1012template\n+1013inline typename internal::FixedSizeMatrix::type numericalHessian322\n+(double (*f)(const X1&, const X2&, const X3&),\n+1014 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n+1015 return numericalHessian322(\n+1016 std::function(f), x1, x2, x3,\n+1017 delta);\n+1018}\n+1019\n+1020/* **************************************************************** */\n+1021template\n+1022inline typename internal::FixedSizeMatrix::type numericalHessian333(\n+1023 std::function f, const X1& x1,\n+1024 const X2& x2, const X3& x3, double delta = 1e-5) {\n+1025 typedef typename internal::FixedSizeMatrix::type Vector;\n+1026 Vector (*numGrad)(std::function, const X3&,\n+1027 double) = &numericalGradient;\n+1028 std::function f2(std::bind(\n+1029 f, std::cref(x1), std::cref(x2), std::placeholders::_1));\n+1030\n+1031 return numericalDerivative11(\n+1032 std::function(\n+1033 std::bind(numGrad, f2, std::placeholders::_1, delta)),\n+1034 x3, delta);\n+1035}\n+1036\n+1037template\n+1038inline typename internal::FixedSizeMatrix::type numericalHessian333\n+(double (*f)(const X1&, const X2&, const X3&),\n+1039 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n+1040 return numericalHessian333(\n+1041 std::function(f), x1, x2, x3,\n+1042 delta);\n+1043}\n+1044\n+1045/* **************************************************************** */\n+1046template\n+1047inline typename internal::FixedSizeMatrix::type numericalHessian312(\n+1048 std::function f, const X1& x1,\n+1049 const X2& x2, const X3& x3, double delta = 1e-5) {\n+1050 return numericalHessian212(\n+1051 std::function(\n+1052 std::bind(f, std::placeholders::_1, std::placeholders::_2,\n+1053 std::cref(x3))),\n+1054 x1, x2, delta);\n+1055}\n+1056\n+1057template\n+1058inline typename internal::FixedSizeMatrix::type numericalHessian313(\n+1059 std::function f, const X1& x1,\n+1060 const X2& x2, const X3& x3, double delta = 1e-5) {\n+1061 return numericalHessian212(\n+1062 std::function(\n+1063 std::bind(f, std::placeholders::_1, std::cref(x2),\n+1064 std::placeholders::_2)),\n+1065 x1, x3, delta);\n+1066}\n+1067\n+1068template\n+1069inline typename internal::FixedSizeMatrix::type numericalHessian323(\n+1070 std::function f, const X1& x1,\n+1071 const X2& x2, const X3& x3, double delta = 1e-5) {\n+1072 return numericalHessian212(\n+1073 std::function(\n+1074 std::bind(f, std::cref(x1), std::placeholders::_1,\n+1075 std::placeholders::_2)),\n+1076 x2, x3, delta);\n+1077}\n+1078\n+1079/* **************************************************************** */\n+1080template\n+1081inline typename internal::FixedSizeMatrix::type numericalHessian312\n+(double (*f)(const X1&, const X2&, const X3&),\n+1082 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n+1083 return numericalHessian312(\n+1084 std::function(f), x1, x2, x3,\n+1085 delta);\n+1086}\n+1087\n+1088template\n+1089inline typename internal::FixedSizeMatrix::type numericalHessian313\n+(double (*f)(const X1&, const X2&, const X3&),\n+1090 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n+1091 return numericalHessian313(\n+1092 std::function(f), x1, x2, x3,\n+1093 delta);\n+1094}\n+1095\n+1096template\n+1097inline typename internal::FixedSizeMatrix::type numericalHessian323\n+(double (*f)(const X1&, const X2&, const X3&),\n+1098 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n+1099 return numericalHessian323(\n+1100 std::function(f), x1, x2, x3,\n+1101 delta);\n+1102}\n+1103\n+1104} // namespace gtsam\n+1105\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n+_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+A non-templated config holding any types of Manifold-group elements.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm\n-T expm(const Vector &x, int K=7)\n-Exponential map given exponential coordinates class T needs a wedge<> function\n-and a constructor from...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:317\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\bg_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt\n-Vector logmap_default(const Class &l0, const Class &lp)\n-Log map centered at l0, s.t.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:246\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\be_\bt_\bw_\be_\be_\bn_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt\n-Class between_default(const Class &l1, const Class &l2)\n-These core global functions can be specialized by new Lie types for better\n-performance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:240\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be\n-T interpolate(const T &X, const T &Y, double t, typename MakeOptionalJacobian<\n-T, T >::type Hx=boost::none, typename MakeOptionalJacobian< T, T >::type\n-Hy=boost::none)\n-Linear interpolation between X and Y by coefficient t.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:327\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bC_\bH\n-T BCH(const T &X, const T &Y)\n-Three term approximation of the Baker-Campbell-Hausdorff formula In non-\n-commutative Lie groups,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:298\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt\n-Class expmap_default(const Class &t, const Vector &d)\n-Exponential map centered at l0, s.t.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:252\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bd_\bg_\be\n-Matrix wedge(const Vector &x)\n-Declaration of wedge (see Murray94book) used to convert from n exponential\n-coordinates to n*n element...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b1\n+internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative61(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n+const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n+&x6, double delta=1e-5)\n+Compute numerical derivative in argument 1 of 6-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:643\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn_\b3_\b1_\b1\n+internal::FixedSizeMatrix< X1, X1 >::type numericalHessian311(std::function<\n+double(const X1 &, const X2 &, const X3 &)> f, const X1 &x1, const X2 &x2,\n+const X3 &x3, double delta=1e-5)\n+Numerical Hessian for tenary functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:972\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn\n+internal::FixedSizeMatrix< X, X >::type numericalHessian(std::function< double\n+(const X &)> f, const X &x, double delta=1e-5)\n+Compute numerical Hessian matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:861\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b1\n+internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative21(const std::\n+function< Y(const X1 &, const X2 &)> &h, const X1 &x1, const X2 &x2, double\n+delta=1e-5)\n+Compute numerical derivative in argument 1 of binary function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:166\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b3\n+internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative63(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n+const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n+&x6, double delta=1e-5)\n+Compute numerical derivative in argument 3 of 6-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:717\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b1\n+internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative51(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1,\n+const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)\n+Compute numerical derivative in argument 1 of 5-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:462\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b4\n+internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative54(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1,\n+const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)\n+Compute numerical derivative in argument 4 of 5-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:570\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b1\n+internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative41(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2\n+&x2, const X3 &x3, const X4 &x4, double delta=1e-5)\n+Compute numerical derivative in argument 1 of 4-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:325\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b4\n+internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative64(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n+const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n+&x6, double delta=1e-5)\n+Compute numerical derivative in argument 4 of 6-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:754\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b6\n+internal::FixedSizeMatrix< Y, X6 >::type numericalDerivative66(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n+const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n+&x6, double delta=1e-5)\n+Compute numerical derivative in argument 6 of 6-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:828\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b3\n+internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative33(std::function< Y\n+(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3\n+&x3, double delta=1e-5)\n+Compute numerical derivative in argument 3 of ternary function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:292\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b1_\b1\n+internal::FixedSizeMatrix< Y, X >::type numericalDerivative11(std::function< Y\n+(const X &)> h, const X &x, double delta=1e-5)\n+New-style numerical derivatives using manifold_traits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b2\n+internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative22(std::function< Y\n+(const X1 &, const X2 &)> h, const X1 &x1, const X2 &x2, double delta=1e-5)\n+Compute numerical derivative in argument 2 of binary function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b5\n+internal::FixedSizeMatrix< Y, X5 >::type numericalDerivative55(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1,\n+const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)\n+Compute numerical derivative in argument 5 of 5-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:606\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b3\n+internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative43(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2\n+&x2, const X3 &x3, const X4 &x4, double delta=1e-5)\n+Compute numerical derivative in argument 3 of 4-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:393\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b2\n+internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative52(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1,\n+const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)\n+Compute numerical derivative in argument 2 of 5-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:498\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b5\n+internal::FixedSizeMatrix< Y, X5 >::type numericalDerivative65(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n+const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n+&x6, double delta=1e-5)\n+Compute numerical derivative in argument 5 of 6-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:791\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b4\n+internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative44(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2\n+&x2, const X3 &x3, const X4 &x4, double delta=1e-5)\n+Compute numerical derivative in argument 4 of 4-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:427\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b1\n+internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative31(std::function< Y\n+(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3\n+&x3, double delta=1e-5)\n+Compute numerical derivative in argument 1 of ternary function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:226\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b2\n+internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative62(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n+const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n+&x6, double delta=1e-5)\n+Compute numerical derivative in argument 2 of 6-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:680\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b3\n+internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative53(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1,\n+const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)\n+Compute numerical derivative in argument 3 of 5-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:534\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b2\n+internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative32(std::function< Y\n+(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3\n+&x3, double delta=1e-5)\n+Compute numerical derivative in argument 2 of ternary function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:259\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b2\n+internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative42(std::function< Y\n+(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2\n+&x2, const X3 &x3, const X4 &x4, double delta=1e-5)\n+Compute numerical derivative in argument 2 of 4-argument function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:359\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt\n+Eigen::Matrix< double, N, 1 > numericalGradient(std::function< double(const X\n+&)> h, const X &x, double delta=1e-5)\n+Numerically compute gradient of scalar function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:70\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-tag to assert a type is a group\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-Group operator syntax flavors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp\n-Group Concept.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-A CRTP helper class that implements Lie group methods Prerequisites: methods\n-operator*,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n-static Class Retract(const TangentVector &v, ChartJacobian H)\n-Retract at origin with optional derivative.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:121\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-TangentVector localCoordinates(const Class &g) const\n-localCoordinates as required by manifold concept: finds tangent vector between\n-*this and g\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\be_\bx_\bp_\bm_\ba_\bp\n-Class expmap(const TangentVector &v, ChartJacobian H1, ChartJacobian H2=boost::\n-none) const\n-expmap with optional derivatives\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-TangentVector localCoordinates(const Class &g, ChartJacobian H1, ChartJacobian\n-H2=boost::none) const\n-localCoordinates with optional derivatives\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bg_\bm_\ba_\bp\n-TangentVector logmap(const Class &g) const\n-logmap as required by manifold concept Applies logarithmic map to group element\n-that takes *this to g\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bg_\bm_\ba_\bp\n-TangentVector logmap(const Class &g, ChartJacobian H1, ChartJacobian H2=boost::\n-none) const\n-logmap with optional derivatives\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-static TangentVector LocalCoordinates(const Class &g)\n-LocalCoordinates at origin: possible in Lie group because it has an identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:116\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-Class retract(const TangentVector &v, ChartJacobian H1, ChartJacobian\n-H2=boost::none) const\n-retract with optional derivatives\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-static TangentVector LocalCoordinates(const Class &g, ChartJacobian H)\n-LocalCoordinates at origin with optional derivative.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-Class retract(const TangentVector &v) const\n-retract as required by manifold concept: applies v at *this\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\be_\bx_\bp_\bm_\ba_\bp\n-Class expmap(const TangentVector &v) const\n-expmap as required by manifold concept Applies exponential map to v and\n-composes with *this\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n-static Class Retract(const TangentVector &v)\n-Retract at origin: possible in Lie group because it has an identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-tag to assert a type is a Lie group\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs\n-A helper class that implements the traits interface for GTSAM lie groups.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Both LieGroupTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Lie Group Concept.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n-Functor for transforming covariance of T.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:353\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg\n tag to assert a type is a manifold\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl\n-Extra manifold traits for fixed-dimension types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\b__\bx_\b1\n+Helper class that computes the derivative of f w.r.t.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:883\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bL_\bi_\be_\b._\bh\n+ * _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00077.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00077.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/make_shared.h File Reference\n \n \n \n \n \n \n \n@@ -94,48 +94,59 @@\n \n \n \n \n \n
\n \n-
DSFVector.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
make_shared.h File Reference
\n \n
\n \n-

A faster implementation for DSF, which uses vector rather than btree. \n+

make_shared trampoline function to ensure proper alignment \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::DSFBase
 A fast implementation of disjoint set forests that uses vector as underly data structure. More...
 
class  gtsam::DSFVector
 DSFVector additionally keeps a vector of keys to support more expensive operations. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+

\n+Typedefs

\n+template<bool B, class T = void>
using gtsam::enable_if_t = typename std::enable_if< B, T >::type
 An shorthand alias for accessing the ::type inside std::enable_if that can be used in a template directly.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

template<typename T , typename ... Args>
gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > gtsam::make_shared (Args &&... args)
 Add our own make_shared as a layer of wrapping on boost::make_shared This solves the problem with the stock make_shared that custom alignment is not respected, causing SEGFAULTs at runtime, which is notoriously hard to debug.
 
\n+template<typename T , typename ... Args>
gtsam::enable_if_t<!needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > gtsam::make_shared (Args &&... args)
 Fall back to the boost version if no need for alignment.
 
\n

Detailed Description

\n-

A faster implementation for DSF, which uses vector rather than btree.

\n-
Date
Jun 25, 2010
\n-
Author
Kai Ni
\n+

make_shared trampoline function to ensure proper alignment

\n+
Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,47 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DSFVector.h File Reference\n-A faster implementation for DSF, which uses vector rather than btree. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+make_shared.h File Reference\n+make_shared trampoline function to ensure proper alignment _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bB_\ba_\bs_\be\n-\u00a0 A fast implementation of disjoint set forests that uses vector as\n- underly data structure. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br\n-\u00a0 _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br additionally keeps a vector of keys to support more expensive\n- operations. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\ben\bna\bab\bbl\ble\be_\b_i\bif\bf_\b_t\bt = typename std::enable_if< B, T >::type\n+\u00a0 An shorthand alias for accessing the ::type inside std::enable_if that\n+ can be used in a template directly.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt<\n+ _\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T >::value, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd (Args &&...\n+ boost::shared_ptr< T > >\u00a0 args)\n+ Add our own make_shared as a layer\n+ of wrapping on boost::make_shared\n+ This solves the problem with the\n+\u00a0 stock make_shared that custom\n+ alignment is not respected, causing\n+ SEGFAULTs at runtime, which is\n+ notoriously hard to debug.\n+\u00a0\n+template\n+ _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n+_\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt::value, boost::shared_ptr< T > >\u00a0 args)\n+\u00a0 Fall back to the boost version if\n+ no need for alignment.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A faster implementation for DSF, which uses vector rather than btree.\n- Date\n- Jun 25, 2010\n+make_shared trampoline function to ensure proper alignment\n Author\n- Kai Ni\n+ Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00077_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00077_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/make_shared.h Source File\n \n \n \n \n \n \n \n@@ -98,96 +98,68 @@\n
No Matches
\n \n \n \n \n \n
\n-
DSFVector.h
\n+
make_shared.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2020, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <gtsam/dllexport.h>
\n-\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/types.h>
\n+
21
\n+
22#include <Eigen/Core>
\n
23
\n-
24#include <boost/shared_ptr.hpp>
\n+
24#include <boost/make_shared.hpp>
\n
25
\n-
26#include <vector>
\n-
27#include <set>
\n-
28#include <map>
\n-
29
\n-
30namespace gtsam {
\n-
31
\n-
\n-
38class GTSAM_EXPORT DSFBase {
\n-
39
\n-
40public:
\n-
41 typedef std::vector<size_t> V;
\n-
42
\n-
43private:
\n-
44 boost::shared_ptr<V> v_;
\n-
45
\n-
46public:
\n-
48 DSFBase(const size_t numNodes);
\n-
49
\n-
51 DSFBase(const boost::shared_ptr<V>& v_in);
\n-
52
\n-
54 size_t find(size_t key) const;
\n-
55
\n-
57 void merge(const size_t& i1, const size_t& i2);
\n-
58};
\n-
\n-
59
\n-
\n-
64class GTSAM_EXPORT DSFVector: public DSFBase {
\n-
65
\n-
66private:
\n-
67 std::vector<size_t> keys_;
\n-
68
\n-
69public:
\n-
71 DSFVector(const size_t numNodes);
\n-
72
\n-
74 DSFVector(const std::vector<size_t>& keys);
\n-
75
\n-
77 DSFVector(const boost::shared_ptr<V>& v_in, const std::vector<size_t>& keys);
\n-
78
\n-
79 // All operations below loop over all keys and hence are *at least* O(n)
\n-
80
\n-
82 bool isSingleton(const size_t& label) const;
\n-
83
\n-
85 std::set<size_t> set(const size_t& label) const;
\n-
86
\n-
88 std::map<size_t, std::set<size_t> > sets() const;
\n-
89
\n-
91 std::map<size_t, std::vector<size_t> > arrays() const;
\n-
92};
\n-
\n-
93
\n-
94}
\n-
Included from all GTSAM files.
\n+
26#include <type_traits>
\n+
27
\n+
28namespace gtsam {
\n+
30 template<bool B, class T = void>
\n+
31 using enable_if_t = typename std::enable_if<B, T>::type;
\n+
32}
\n+
33
\n+
34namespace gtsam {
\n+
35
\n+
56 template<typename T, typename ... Args>
\n+
\n+\n+
58 return boost::allocate_shared<T>(Eigen::aligned_allocator<T>(), std::forward<Args>(args)...);
\n+
59 }
\n+
\n+
60
\n+
62 template<typename T, typename ... Args>
\n+
\n+\n+
64 return boost::make_shared<T>(std::forward<Args>(args)...);
\n+
65 }
\n+
\n+
66
\n+
67}
\n+
Typedefs for easier changing of types.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A fast implementation of disjoint set forests that uses vector as underly data structure.
Definition DSFVector.h:38
\n-
std::vector< size_t > V
Vector of ints.
Definition DSFVector.h:41
\n-
DSFVector additionally keeps a vector of keys to support more expensive operations.
Definition DSFVector.h:64
\n+
typename std::enable_if< B, T >::type enable_if_t
An shorthand alias for accessing the ::type inside std::enable_if that can be used in a template dire...
Definition make_shared.h:31
\n+
gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > make_shared(Args &&... args)
Add our own make_shared as a layer of wrapping on boost::make_shared This solves the problem with the...
Definition make_shared.h:57
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,97 +1,71 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DSFVector.h\n+make_shared.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2020, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include \n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+21\n+22#include \n 23\n-24#include \n+24#include \n 25\n-26#include \n-27#include \n-28#include \n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-_\b3_\b8class GTSAM_EXPORT _\bD_\bS_\bF_\bB_\ba_\bs_\be {\n-39\n-40public:\n-_\b4_\b1 typedef std::vector _\bV;\n-42\n-43private:\n-44 boost::shared_ptr v_;\n-45\n-46public:\n-48 _\bD_\bS_\bF_\bB_\ba_\bs_\be(const size_t numNodes);\n-49\n-51 _\bD_\bS_\bF_\bB_\ba_\bs_\be(const boost::shared_ptr& v_in);\n-52\n-54 size_t find(size_t key) const;\n-55\n-57 void merge(const size_t& i1, const size_t& i2);\n-58};\n-59\n-_\b6_\b4class GTSAM_EXPORT _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br: public _\bD_\bS_\bF_\bB_\ba_\bs_\be {\n-65\n-66private:\n-67 std::vector keys_;\n-68\n-69public:\n-71 _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br(const size_t numNodes);\n-72\n-74 _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br(const std::vector& keys);\n-75\n-77 _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br(const boost::shared_ptr& v_in, const std::vector&\n-keys);\n-78\n-79 // All operations below loop over all keys and hence are *at least* O(n)\n-80\n-82 bool isSingleton(const size_t& label) const;\n-83\n-85 std::set set(const size_t& label) const;\n-86\n-88 std::map > sets() const;\n-89\n-91 std::map > arrays() const;\n-92};\n-93\n-94}\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+30 template\n+_\b3_\b1 using _\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt = typename std::enable_if::type;\n+32}\n+33\n+34namespace _\bg_\bt_\bs_\ba_\bm {\n+35\n+56 template\n+_\b5_\b7 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt_\b<_\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be, boost::\n+shared_ptr> _\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd(Args &&... args) {\n+58 return boost::allocate_shared(Eigen::aligned_allocator(), std::\n+forward(args)...);\n+59 }\n+60\n+62 template\n+_\b6_\b3 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt_\b<_\b!_\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be, boost::\n+shared_ptr> _\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd(Args &&... args) {\n+64 return boost::make_shared(std::forward(args)...);\n+65 }\n+66\n+67}\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bB_\ba_\bs_\be\n-A fast implementation of disjoint set forests that uses vector as underly data\n-structure.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFVector.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bB_\ba_\bs_\be_\b:_\b:_\bV\n-std::vector< size_t > V\n-Vector of ints.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFVector.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br\n-DSFVector additionally keeps a vector of keys to support more expensive\n-operations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFVector.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\b__\bi_\bf_\b__\bt\n+typename std::enable_if< B, T >::type enable_if_t\n+An shorthand alias for accessing the ::type inside std::enable_if that can be\n+used in a template dire...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn make_shared.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd\n+gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::\n+shared_ptr< T > > make_shared(Args &&... args)\n+Add our own make_shared as a layer of wrapping on boost::make_shared This\n+solves the problem with the...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn make_shared.h:57\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00080.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00080.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastVector.h File Reference\n \n \n \n \n \n \n \n@@ -94,123 +94,48 @@\n \n \n \n \n \n
\n \n-
Testable.h File Reference
\n+Typedefs
\n+
FastVector.h File Reference
\n \n
\n \n-

Concept check for values that can be used in unit tests. \n+

A thin wrapper around std::vector that uses a custom allocator. \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::IsTestable< T >
 A testable concept check that should be placed in applicable unit tests and in generic algorithms. More...
 
struct  gtsam::equals< V >
 Template to create a binary predicate. More...
 
struct  gtsam::equals_star< V >
 Binary predicate on shared pointers. More...
 
struct  gtsam::HasTestablePrereqs< T >
 Requirements on type to pass it to Testable template below. More...
 
struct  gtsam::Testable< T >
 A helper that implements the traits interface for GTSAM types. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Macros

\n-#define GTSAM_PRINT(x)   ((x).print(#x))
 
#define GTSAM_CONCEPT_TESTABLE_INST(T)   template class gtsam::IsTestable<T>;
 Macros for using the TestableConcept.
 
\n-#define GTSAM_CONCEPT_TESTABLE_TYPE(T)   using _gtsam_Testable_##T = gtsam::IsTestable<T>;
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n

\n-Functions

\n-void gtsam::print (float v, const std::string &s="")
 
\n-void gtsam::print (double v, const std::string &s="")
 
\n-template<class T >
bool gtsam::equal (const T &obj1, const T &obj2, double tol)
 Call equal on the object.
 
\n-template<class T >
bool gtsam::equal (const T &obj1, const T &obj2)
 Call equal without tolerance (use default tolerance)
 
\n-template<class V >
bool gtsam::assert_equal (const V &expected, const V &actual, double tol=1e-9)
 This template works for any type with equals.
 

\n+Typedefs

template<typename T >
using gtsam::FastVector = std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >
 FastVector is a type alias to a std::vector with a custom memory allocator.
 
\n

Detailed Description

\n-

Concept check for values that can be used in unit tests.

\n-
Author
Frank Dellaert
\n-

The necessary functions to implement for Testable are defined below with additional details as to the interface. The concept checking function will check whether or not the function exists in derived class and throw compile-time errors.

\n-

print with optional string naming the object void print(const std::string& name) const = 0;

\n-

equality up to tolerance tricky to implement, see PriorFactor for an example equals is not supposed to print out anything, just return true|false bool equals(const Derived& expected, double tol) const = 0;

\n-

Macro Definition Documentation

\n-\n-

◆ GTSAM_CONCEPT_TESTABLE_INST

\n-\n-
\n-
\n- \n- \n- \n- \n- \n- \n- \n- \n-
#define GTSAM_CONCEPT_TESTABLE_INST( T)   template class gtsam::IsTestable<T>;
\n-
\n-\n-

Macros for using the TestableConcept.

\n-
    \n-
  • An instantiation for use inside unit tests
  • \n-
  • A typedef for use inside generic algorithms
  • \n-
\n-

NOTE: intentionally not in the gtsam namespace to allow for classes not in the gtsam namespace to be more easily enforced as testable

Deprecated:
please use BOOST_CONCEPT_ASSERT and
\n-\n-
\n-
\n-
\n+

A thin wrapper around std::vector that uses a custom allocator.

\n+
Author
Richard Roberts
\n+
\n+Frank Dellaert
\n+
Date
Feb 9, 2011
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,84 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Testable.h File Reference\n-Concept check for values that can be used in unit tests. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+FastVector.h File Reference\n+A thin wrapper around std::vector that uses a custom allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\b _\bT_\b _\b>\n-\u00a0 A testable concept check that should be placed in applicable unit\n- tests and in generic algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs_\b<_\b _\bV_\b _\b>\n-\u00a0 Template to create a binary predicate. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs_\b__\bs_\bt_\ba_\br_\b<_\b _\bV_\b _\b>\n-\u00a0 Binary predicate on shared pointers. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bP_\br_\be_\br_\be_\bq_\bs_\b<_\b _\bT_\b _\b>\n-\u00a0 Requirements on type to pass it to _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be template below. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\b _\bT_\b _\b>\n-\u00a0 A helper that implements the traits interface for GTSAM types. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_P\bPR\bRI\bIN\bNT\bT(x)\u00a0\u00a0\u00a0((x).print(#x))\n-\u00a0\n-#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bT_\bE_\bS_\bT_\bA_\bB_\bL_\bE_\b__\bI_\bN_\bS_\bT(T)\u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be;\n-\u00a0 Macros for using the TestableConcept.\n-\u00a0\n-#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_T\bTE\bES\bST\bTA\bAB\bBL\bLE\bE_\b_T\bTY\bYP\bPE\bE(T)\u00a0\u00a0\u00a0using _gtsam_Testable_##T = _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n- _\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be;\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (float v, const std::string &s=\"\")\n-\u00a0\n-void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (double v, const std::string &s=\"\")\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl (const T &obj1, const T &obj2, double tol)\n-\u00a0 Call equal on the object.\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl (const T &obj1, const T &obj2)\n-\u00a0 Call equal without tolerance (use default tolerance)\n-\u00a0\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const V &expected, const V &actual, double tol=1e-9)\n-\u00a0 This template works for any type with equals.\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+template\n+using\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br = std::vector< T, typename _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:\n+ _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bV_\be_\bc_\bt_\bo_\br_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T >::type >\n+\u00a0 FastVector is a type alias to a std::vector with a custom memory\n+ allocator.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Concept check for values that can be used in unit tests.\n+A thin wrapper around std::vector that uses a custom allocator.\n Author\n+ Richard Roberts\n Frank Dellaert\n-The necessary functions to implement for Testable are defined below with\n-additional details as to the interface. The concept checking function will\n-check whether or not the function exists in derived class and throw compile-\n-time errors.\n-print with optional string naming the object void print(const std::string&\n-name) const = 0;\n-equality up to tolerance tricky to implement, see PriorFactor for an example\n-equals is not supposed to print out a\ban\bny\byt\bth\bhi\bin\bng\bg, just return true|false bool\n-equals(const Derived& expected, double tol) const = 0;\n-*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_T\bTE\bES\bST\bTA\bAB\bBL\bLE\bE_\b_I\bIN\bNS\bST\bT *\b**\b**\b**\b**\b*\n-#define GTSAM_CONCEPT_TESTABLE_INST ( \u00a0 T ) \u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n- _\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be;\n-Macros for using the TestableConcept.\n- * An instantiation for use inside unit tests\n- * A typedef for use inside generic algorithms\n-NOTE: intentionally not in the gtsam namespace to allow for classes not in the\n-gtsam namespace to be more easily enforced as testable\n- _\bD\bD_\be\be_\bp\bp_\br\br_\be\be_\bc\bc_\ba\ba_\bt\bt_\be\be_\bd\bd_\b:\b:\n- please use BOOST_CONCEPT_ASSERT and\n+ Date\n+ Feb 9, 2011\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00080.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00080.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,10 +1,3 @@\n var a00080 = [\n- [\"gtsam::equals< V >\", \"a02480.html\", null],\n- [\"gtsam::equals_star< V >\", \"a02484.html\", null],\n- [\"gtsam::HasTestablePrereqs< T >\", \"a02488.html\", null],\n- [\"gtsam::Testable< T >\", \"a02492.html\", null],\n- [\"GTSAM_CONCEPT_TESTABLE_INST\", \"a00080.html#abe0a238cdd07d484ff0be56ae945b182\", null],\n- [\"assert_equal\", \"a00080.html#a659619cca082d1c10b07c033d48c54da\", null],\n- [\"equal\", \"a00080.html#a1f3dc67ad88b799c469088e428c583b1\", null],\n- [\"equal\", \"a00080.html#ad2dbee4a72127938c79162cc8b6d5152\", null]\n+ [\"FastVector\", \"a00080.html#gafeaa7d82369f3ff952157586240273c8\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00080_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00080_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastVector.h Source File\n \n \n \n \n \n \n \n@@ -98,171 +98,47 @@\n
No Matches
\n \n \n \n \n \n
\n-
Testable.h
\n+
FastVector.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
32// \\callgraph
\n-
33
\n-
34#pragma once
\n+
20#pragma once
\n+
21
\n+\n+
23#include <vector>
\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
32template <typename T>
\n+\n+
34 std::vector<T, typename internal::FastDefaultVectorAllocator<T>::type>;
\n
35
\n-
36#include <boost/concept_check.hpp>
\n-
37#include <functional>
\n-
38#include <iostream>
\n-
39#include <memory>
\n-
40#include <string>
\n-
41
\n-
42#define GTSAM_PRINT(x)((x).print(#x))
\n-
43
\n-
44namespace gtsam {
\n-
45
\n-
46 // Forward declaration
\n-
47 template <typename T> struct traits;
\n-
48
\n-
57 template <class T>
\n-
\n-
58 class IsTestable {
\n-
59 T t;
\n-
60 bool r1,r2;
\n-
61 public:
\n-
62
\n-
63 BOOST_CONCEPT_USAGE(IsTestable) {
\n-
64 // check print function, with optional string
\n-
65 traits<T>::Print(t, std::string());
\n-\n-
67
\n-
68 // check print, with optional threshold
\n-
69 double tol = 1.0;
\n-
70 r1 = traits<T>::Equals(t,t,tol);
\n-
71 r2 = traits<T>::Equals(t,t);
\n-
72 }
\n-
73 }; // \\ Testable
\n-
\n-
74
\n-
75 inline void print(float v, const std::string& s = "") {
\n-
76 std::cout << (s.empty() ? s : s + " ") << v << std::endl;
\n-
77 }
\n-
78 inline void print(double v, const std::string& s = "") {
\n-
79 std::cout << (s.empty() ? s : s + " ") << v << std::endl;
\n-
80 }
\n-
81
\n-
83 template<class T>
\n-
\n-
84 inline bool equal(const T& obj1, const T& obj2, double tol) {
\n-
85 return traits<T>::Equals(obj1,obj2, tol);
\n-
86 }
\n-
\n-
87
\n-
89 template<class T>
\n-
\n-
90 inline bool equal(const T& obj1, const T& obj2) {
\n-
91 return traits<T>::Equals(obj1,obj2);
\n-
92 }
\n-
\n-
93
\n-
97 template<class V>
\n-
\n-
98 bool assert_equal(const V& expected, const V& actual, double tol = 1e-9) {
\n-
99 if (traits<V>::Equals(actual,expected, tol))
\n-
100 return true;
\n-
101 printf("Not equal:\\n");
\n-
102 traits<V>::Print(expected,"expected:\\n");
\n-
103 traits<V>::Print(actual,"actual:\\n");
\n-
104 return false;
\n-
105 }
\n-
\n-
106
\n-
110 template<class V>
\n-
\n-
111 struct equals : public std::function<bool(const V&, const V&)> {
\n-
112 double tol_;
\n-
113 equals(double tol = 1e-9) : tol_(tol) {}
\n-
114 bool operator()(const V& expected, const V& actual) {
\n-
115 return (traits<V>::Equals(actual, expected, tol_));
\n-
116 }
\n-
117 };
\n-
\n-
118
\n-
122 template<class V>
\n-
\n-
123 struct equals_star : public std::function<bool(const std::shared_ptr<V>&, const std::shared_ptr<V>&)> {
\n-
124 double tol_;
\n-
125 equals_star(double tol = 1e-9) : tol_(tol) {}
\n-
126 bool operator()(const std::shared_ptr<V>& expected, const std::shared_ptr<V>& actual) {
\n-
127 if (!actual && !expected) return true;
\n-
128 return actual && expected && traits<V>::Equals(*actual,*expected, tol_);
\n-
129 }
\n-
130 };
\n-
\n-
131
\n-
133 template<typename T>
\n-
\n-\n-
135
\n-
136 BOOST_CONCEPT_USAGE(HasTestablePrereqs) {
\n-
137 t->print(str);
\n-
138 b = t->equals(*s,tol);
\n-
139 }
\n-
140
\n-
141 T *t, *s; // Pointer is to allow abstract classes
\n-
142 bool b;
\n-
143 double tol;
\n-
144 std::string str;
\n-
145 };
\n-
\n-
146
\n-
150 template<typename T>
\n-
\n-
151 struct Testable {
\n-
152
\n-
153 // Check that T has the necessary methods
\n-
154 BOOST_CONCEPT_ASSERT((HasTestablePrereqs<T>));
\n-
155
\n-
156 static void Print(const T& m, const std::string& str = "") {
\n-
157 m.print(str);
\n-
158 }
\n-
159 static bool Equals(const T& m1, const T& m2, double tol = 1e-8) {
\n-
160 return m1.equals(m2, tol);
\n-
161 }
\n-
162 };
\n-
\n-
163
\n-
164} // \\namespace gtsam
\n-
165
\n-
175#define GTSAM_CONCEPT_TESTABLE_INST(T) template class gtsam::IsTestable<T>;
\n-
176#define GTSAM_CONCEPT_TESTABLE_TYPE(T) using _gtsam_Testable_##T = gtsam::IsTestable<T>;
\n+
36} // namespace gtsam
\n+
An easy way to control which allocator is used for Fast* collections.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
bool equal(const T &obj1, const T &obj2, double tol)
Call equal on the object.
Definition Testable.h:84
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
Binary predicate on shared pointers.
Definition Testable.h:123
\n-
Requirements on type to pass it to Testable template below.
Definition Testable.h:134
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,175 +1,46 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Testable.h\n+FastVector.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-32// \\callgraph\n-33\n-34#pragma once\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh>\n+23#include \n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+32template \n+_\b3_\b3using _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br =\n+34 std::vector::type>;\n 35\n-36#include \n-37#include \n-38#include \n-39#include \n-40#include \n-41\n-42#define GTSAM_PRINT(x)((x).print(#x))\n-43\n-44namespace _\bg_\bt_\bs_\ba_\bm {\n-45\n-46 // Forward declaration\n-47 template struct traits;\n-48\n-57 template \n-_\b5_\b8 class _\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-59 T t;\n-60 bool r1,r2;\n-61 public:\n-62\n-63 BOOST_CONCEPT_USAGE(_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be) {\n-64 // check print function, with optional string\n-65 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(t, std::string());\n-66 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(t);\n-67\n-68 // check print, with optional threshold\n-69 double tol = 1.0;\n-70 r1 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(t,t,tol);\n-71 r2 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(t,t);\n-72 }\n-73 }; // \\ Testable\n-74\n-75 inline void _\bp_\br_\bi_\bn_\bt(float v, const std::string& s = \"\") {\n-76 std::cout << (s.empty() ? s : s + \" \") << v << std::endl;\n-77 }\n-78 inline void _\bp_\br_\bi_\bn_\bt(double v, const std::string& s = \"\") {\n-79 std::cout << (s.empty() ? s : s + \" \") << v << std::endl;\n-80 }\n-81\n-83 template\n-_\b8_\b4 inline bool _\be_\bq_\bu_\ba_\bl(const T& obj1, const T& obj2, double tol) {\n-85 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(obj1,obj2, tol);\n-86 }\n-87\n-89 template\n-_\b9_\b0 inline bool _\be_\bq_\bu_\ba_\bl(const T& obj1, const T& obj2) {\n-91 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(obj1,obj2);\n-92 }\n-93\n-97 template\n-_\b9_\b8 bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const V& expected, const V& actual, double tol = 1e-9) {\n-99 if (_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(actual,expected, tol))\n-100 return true;\n-101 printf(\"Not equal:\\n\");\n-102 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(expected,\"expected:\\n\");\n-103 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(actual,\"actual:\\n\");\n-104 return false;\n-105 }\n-106\n-110 template\n-_\b1_\b1_\b1 struct _\be_\bq_\bu_\ba_\bl_\bs : public std::function {\n-112 double tol_;\n-113 _\be_\bq_\bu_\ba_\bl_\bs(double tol = 1e-9) : tol_(tol) {}\n-114 bool operator()(const V& expected, const V& actual) {\n-115 return (_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(actual, expected, tol_));\n-116 }\n-117 };\n-118\n-122 template\n-_\b1_\b2_\b3 struct _\be_\bq_\bu_\ba_\bl_\bs_\b__\bs_\bt_\ba_\br : public std::function&,\n-const std::shared_ptr&)> {\n-124 double tol_;\n-125 _\be_\bq_\bu_\ba_\bl_\bs_\b__\bs_\bt_\ba_\br(double tol = 1e-9) : tol_(tol) {}\n-126 bool operator()(const std::shared_ptr& expected, const std::\n-shared_ptr& actual) {\n-127 if (!actual && !expected) return true;\n-128 return actual && expected && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(*actual,*expected, tol_);\n-129 }\n-130 };\n-131\n-133 template\n-_\b1_\b3_\b4 struct _\bH_\ba_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bP_\br_\be_\br_\be_\bq_\bs {\n-135\n-136 BOOST_CONCEPT_USAGE(_\bH_\ba_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bP_\br_\be_\br_\be_\bq_\bs) {\n-137 t->print(str);\n-138 b = t->equals(*s,tol);\n-139 }\n-140\n-141 T *t, *s; // Pointer is to allow abstract classes\n-142 bool b;\n-143 double tol;\n-144 std::string str;\n-145 };\n-146\n-150 template\n-_\b1_\b5_\b1 struct _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-152\n-153 // Check that T has the necessary methods\n-154 BOOST_CONCEPT_ASSERT((_\bH_\ba_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bP_\br_\be_\br_\be_\bq_\bs_\b<_\bT_\b>));\n-155\n-156 static void Print(const T& m, const std::string& str = \"\") {\n-157 m.print(str);\n-158 }\n-159 static bool Equals(const T& m1, const T& m2, double tol = 1e-8) {\n-160 return m1.equals(m2, tol);\n-161 }\n-162 };\n-163\n-164} // \\namespace gtsam\n-165\n-_\b1_\b7_\b5#define GTSAM_CONCEPT_TESTABLE_INST(T) template class gtsam::IsTestable;\n-176#define GTSAM_CONCEPT_TESTABLE_TYPE(T) using _gtsam_Testable_##T = gtsam::\n-IsTestable;\n+36} // namespace gtsam\n+_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n+An easy way to control which allocator is used for Fast* collections.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n-bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n-equals with an tolerance, prints out message if unequal\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl\n-bool equal(const T &obj1, const T &obj2, double tol)\n-Call equal on the object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A testable concept check that should be placed in applicable unit tests and in\n-generic algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs_\b__\bs_\bt_\ba_\br\n-Binary predicate on shared pointers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bP_\br_\be_\br_\be_\bq_\bs\n-Requirements on type to pass it to Testable template below.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+ * _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00083.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00083.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastVector.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/SymmetricBlockMatrix.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,48 +94,36 @@\n \n \n \n \n \n
\n \n-
FastVector.h File Reference
\n+Namespaces
\n+
SymmetricBlockMatrix.cpp File Reference
\n \n
\n \n-

A thin wrapper around std::vector that uses a custom allocator. \n+

Access to matrices via blocks of pre-defined sizes. \n More...

\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n

\n-Typedefs

template<typename T >
using gtsam::FastVector = std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >
 FastVector is a type alias to a std::vector with a custom memory allocator.
 
\n

Detailed Description

\n-

A thin wrapper around std::vector that uses a custom allocator.

\n-
Author
Richard Roberts
\n-
\n-Frank Dellaert
\n-
Date
Feb 9, 2011
\n+

Access to matrices via blocks of pre-defined sizes.

\n+

Used in GaussianFactor and GaussianConditional.

Author
Richard Roberts
\n+
Date
Sep 18, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-FastVector.h File Reference\n-A thin wrapper around std::vector that uses a custom allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymmetricBlockMatrix.cpp File Reference\n+Access to matrices via blocks of pre-defined sizes. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-template\n-using\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br = std::vector< T, typename _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:\n- _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bV_\be_\bc_\bt_\bo_\br_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br< T >::type >\n-\u00a0 FastVector is a type alias to a std::vector with a custom memory\n- allocator.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A thin wrapper around std::vector that uses a custom allocator.\n+Access to matrices via blocks of pre-defined sizes.\n+Used in GaussianFactor and _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl.\n Author\n Richard Roberts\n- Frank Dellaert\n Date\n- Feb 9, 2011\n+ Sep 18, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00086_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00086_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/testLie.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastList.h Source File\n \n \n \n \n \n \n \n@@ -98,111 +98,99 @@\n
No Matches
\n \n \n \n \n \n
\n-
testLie.h
\n+
FastList.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file testLie.h
\n-
14 * @brief Test utilities for Lie groups
\n-
15 * @date November, 2014
\n-
16 * @author Paul Furgale
\n-
17 */
\n-
18
\n
19#pragma once
\n
20
\n-
21#include <gtsam/base/Lie.h>
\n-\n-
23
\n-
24#include <CppUnitLite/TestResult.h>
\n-
25#include <CppUnitLite/Test.h>
\n-
26#include <CppUnitLite/Failure.h>
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
30// Do a comprehensive test of Lie Group derivatives
\n-
31template<typename G>
\n-
32void testLieGroupDerivatives(TestResult& result_, const std::string& name_,
\n-
33 const G& t1, const G& t2) {
\n-
34
\n-
35 Matrix H1, H2;
\n-
36 typedef traits<G> T;
\n-
37 typedef OptionalJacobian<T::dimension,T::dimension> OJ;
\n-
38
\n-
39 // Inverse
\n-
40 OJ none;
\n-
41 EXPECT(assert_equal<G>(t1.inverse(),T::Inverse(t1, H1)));
\n-
42 EXPECT(assert_equal(numericalDerivative21<G,G,OJ>(T::Inverse, t1, none),H1));
\n+\n+
22#include <list>
\n+
23#include <boost/utility/enable_if.hpp>
\n+
24#include <boost/serialization/nvp.hpp>
\n+
25#include <boost/serialization/version.hpp>
\n+
26#include <boost/serialization/optional.hpp>
\n+
27#include <boost/serialization/list.hpp>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n+
39template<typename VALUE>
\n+
\n+
40class FastList: public std::list<VALUE, typename internal::FastDefaultAllocator<VALUE>::type> {
\n+
41
\n+
42public:
\n
43
\n-
44 EXPECT(assert_equal<G>(t2.inverse(),T::Inverse(t2, H1)));
\n-
45 EXPECT(assert_equal(numericalDerivative21<G,G,OJ>(T::Inverse, t2, none),H1));
\n-
46
\n-
47 // Compose
\n-
48 EXPECT(assert_equal<G>(t1 * t2,T::Compose(t1, t2, H1, H2)));
\n-
49 EXPECT(assert_equal(numericalDerivative41<G,G,G,OJ,OJ>(T::Compose, t1, t2, none, none), H1));
\n-
50 EXPECT(assert_equal(numericalDerivative42<G,G,G,OJ,OJ>(T::Compose, t1, t2, none, none), H2));
\n-
51
\n-
52 // Between
\n-
53 EXPECT(assert_equal<G>(t1.inverse() * t2,T::Between(t1, t2, H1, H2)));
\n-
54 EXPECT(assert_equal(numericalDerivative41<G,G,G,OJ,OJ>(T::Between, t1, t2, none, none), H1));
\n-
55 EXPECT(assert_equal(numericalDerivative42<G,G,G,OJ,OJ>(T::Between, t1, t2, none, none), H2));
\n-
56}
\n-
57
\n-
58// Do a comprehensive test of Lie Group Chart derivatives
\n-
59template<typename G>
\n-
60void testChartDerivatives(TestResult& result_, const std::string& name_,
\n-
61 const G& t1, const G& t2) {
\n-
62
\n-
63 Matrix H1, H2;
\n-
64 typedef traits<G> T;
\n-
65 typedef typename T::TangentVector V;
\n-
66 typedef OptionalJacobian<T::dimension,T::dimension> OJ;
\n-
67
\n-
68 // Retract
\n-
69 OJ none;
\n-
70 V w12 = T::Local(t1, t2);
\n-
71 EXPECT(assert_equal<G>(t2, T::Retract(t1,w12, H1, H2)));
\n-
72 EXPECT(assert_equal(numericalDerivative41<G,G,V,OJ,OJ>(T::Retract, t1, w12, none, none), H1));
\n-
73 EXPECT(assert_equal(numericalDerivative42<G,G,V,OJ,OJ>(T::Retract, t1, w12, none, none), H2));
\n-
74
\n-
75 // Local
\n-
76 EXPECT(assert_equal(w12, T::Local(t1, t2, H1, H2)));
\n-
77 EXPECT(assert_equal(numericalDerivative41<V,G,G,OJ,OJ>(T::Local, t1, t2, none, none), H1));
\n-
78 EXPECT(assert_equal(numericalDerivative42<V,G,G,OJ,OJ>(T::Local, t1, t2, none, none), H2));
\n-
79}
\n-
80} // namespace gtsam
\n-
81
\n-
82#define CHECK_LIE_GROUP_DERIVATIVES(t1,t2) \\
\n-
83 { gtsam::testLieGroupDerivatives(result_, name_, t1, t2); }
\n-
84
\n-
85#define CHECK_CHART_DERIVATIVES(t1,t2) \\
\n-
86 { gtsam::testChartDerivatives(result_, name_, t1, t2); }
\n-
Base class and basic functions for Lie types.
\n-
Some functions to compute numerical derivatives.
\n+
44 typedef std::list<VALUE, typename internal::FastDefaultAllocator<VALUE>::type> Base;
\n+
45
\n+\n+
48
\n+
50 template<typename INPUTITERATOR>
\n+
51 explicit FastList(INPUTITERATOR first, INPUTITERATOR last) : Base(first, last) {}
\n+
52
\n+
54 FastList(const FastList<VALUE>& x) : Base(x) {}
\n+
55
\n+
57 FastList(const Base& x) : Base(x) {}
\n+
58
\n+
60 FastList(std::initializer_list<VALUE> l) : Base(l) {}
\n+
61
\n+
62#ifdef GTSAM_ALLOCATOR_BOOSTPOOL
\n+
64 FastList(const std::list<VALUE>& x) {
\n+
65 // This if statement works around a bug in boost pool allocator and/or
\n+
66 // STL vector where if the size is zero, the pool allocator will allocate
\n+
67 // huge amounts of memory.
\n+
68 if(x.size() > 0)
\n+
69 Base::assign(x.begin(), x.end());
\n+
70 }
\n+
71#endif
\n+
72
\n+
\n+
74 operator std::list<VALUE>() const {
\n+
75 return std::list<VALUE>(this->begin(), this->end());
\n+
76 }
\n+
\n+
77
\n+
78private:
\n+\n+
81 template<class ARCHIVE>
\n+
82 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
83 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
84 }
\n+
85
\n+
86};
\n+
\n+
87
\n+
88}
\n+
An easy way to control which allocator is used for Fast* collections.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n+
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n+
FastList(INPUTITERATOR first, INPUTITERATOR last)
Constructor from a range, passes through to base class.
Definition FastList.h:51
\n+
FastList()
Default constructor.
Definition FastList.h:47
\n+
FastList(std::initializer_list< VALUE > l)
Construct from c++11 initializer list:
Definition FastList.h:60
\n+
FastList(const FastList< VALUE > &x)
Copy constructor from another FastList.
Definition FastList.h:54
\n+
friend class boost::serialization::access
Serialization function.
Definition FastList.h:80
\n+
FastList(const Base &x)
Copy constructor from the base list class.
Definition FastList.h:57
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,119 +1,114 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-testLie.h\n+FastList.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file testLie.h\n-14 * @brief Test utilities for Lie groups\n-15 * @date November, 2014\n-16 * @author Paul Furgale\n-17 */\n-18\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh>\n-23\n-24#include \n-25#include \n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-30// Do a comprehensive test of Lie Group derivatives\n-31template\n-32void testLieGroupDerivatives(TestResult& result_, const std::string& name_,\n-33 const G& t1, const G& t2) {\n-34\n-35 Matrix H1, H2;\n-36 typedef traits T;\n-37 typedef OptionalJacobian OJ;\n-38\n-39 // Inverse\n-40 OJ none;\n-41 EXPECT(assert_equal(t1.inverse(),T::Inverse(t1, H1)));\n-42 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative21(T::Inverse, t1,\n-none),H1));\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh>\n+22#include \n+23#include \n+24#include \n+25#include \n+26#include \n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+39template\n+_\b4_\b0class _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt: public std::list::type> {\n+41\n+42public:\n 43\n-44 EXPECT(assert_equal(t2.inverse(),T::Inverse(t2, H1)));\n-45 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative21(T::Inverse, t2,\n-none),H1));\n-46\n-47 // Compose\n-48 EXPECT(assert_equal(t1 * t2,T::Compose(t1, t2, H1, H2)));\n-49 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative41(T::Compose, t1, t2,\n-none, none), H1));\n-50 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative42(T::Compose, t1, t2,\n-none, none), H2));\n-51\n-52 // Between\n-53 EXPECT(assert_equal(t1.inverse() * t2,T::Between(t1, t2, H1, H2)));\n-54 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative41(T::Between, t1, t2,\n-none, none), H1));\n-55 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative42(T::Between, t1, t2,\n-none, none), H2));\n-56}\n-57\n-58// Do a comprehensive test of Lie Group Chart derivatives\n-59template\n-60void testChartDerivatives(TestResult& result_, const std::string& name_,\n-61 const G& t1, const G& t2) {\n-62\n-63 Matrix H1, H2;\n-64 typedef traits T;\n-65 typedef typename T::TangentVector V;\n-66 typedef OptionalJacobian OJ;\n-67\n-68 // Retract\n-69 OJ none;\n-70 V w12 = T::Local(t1, t2);\n-71 EXPECT(assert_equal(t2, T::Retract(t1,w12, H1, H2)));\n-72 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative41(T::Retract, t1, w12,\n-none, none), H1));\n-73 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative42(T::Retract, t1, w12,\n-none, none), H2));\n-74\n-75 // Local\n-76 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(w12, T::Local(t1, t2, H1, H2)));\n-77 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative41(T::Local, t1, t2,\n-none, none), H1));\n-78 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative42(T::Local, t1, t2,\n-none, none), H2));\n-79}\n-80} // namespace gtsam\n-81\n-82#define CHECK_LIE_GROUP_DERIVATIVES(t1,t2) \\\n-83 { gtsam::testLieGroupDerivatives(result_, name_, t1, t2); }\n-84\n-85#define CHECK_CHART_DERIVATIVES(t1,t2) \\\n-86 { gtsam::testChartDerivatives(result_, name_, t1, t2); }\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n-_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh\n-Some functions to compute numerical derivatives.\n+44 typedef std::list::\n+type> Base;\n+45\n+_\b4_\b7 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt() {}\n+48\n+50 template\n+_\b5_\b1 explicit _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(INPUTITERATOR first, INPUTITERATOR last) : Base(first,\n+last) {}\n+52\n+_\b5_\b4 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(const _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bV_\bA_\bL_\bU_\bE_\b>& x) : Base(x) {}\n+55\n+_\b5_\b7 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(const Base& x) : Base(x) {}\n+58\n+_\b6_\b0 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(std::initializer_list l) : Base(l) {}\n+61\n+62#ifdef GTSAM_ALLOCATOR_BOOSTPOOL\n+64 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt(const std::list& x) {\n+65 // This if statement works around a bug in boost pool allocator and/or\n+66 // STL vector where if the size is zero, the pool allocator will allocate\n+67 // huge amounts of memory.\n+68 if(x.size() > 0)\n+69 Base::assign(x.begin(), x.end());\n+70 }\n+71#endif\n+72\n+_\b7_\b4 operator std::list() const {\n+75 return std::list(this->begin(), this->end());\n+76 }\n+77\n+78private:\n+_\b8_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+81 template\n+82 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+83 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n+84 }\n+85\n+86};\n+87\n+88}\n+_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n+An easy way to control which allocator is used for Fast* collections.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n-bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n-equals with an tolerance, prints out message if unequal\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList is a thin wrapper around std::list that uses the boost\n+fast_pool_allocator instead of the de...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList(INPUTITERATOR first, INPUTITERATOR last)\n+Constructor from a range, passes through to base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList(std::initializer_list< VALUE > l)\n+Construct from c++11 initializer list:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList(const FastList< VALUE > &x)\n+Copy constructor from another FastList.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList(const Base &x)\n+Copy constructor from the base list class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:57\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * t\bte\bes\bst\btL\bLi\bie\be.\b.h\bh\n+ * _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00089.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00089.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Vector.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSerialization.h File Reference\n \n \n \n \n \n \n \n@@ -94,186 +94,51 @@\n \n \n \n \n \n
\n \n-
Vector.h File Reference
\n+
VectorSerialization.h File Reference
\n
\n
\n \n-

typedef and functions to augment Eigen's VectorXd \n+

serialization for Vectors \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-

\n-Macros

\n-#define MKL_BLAS   MKL_DOMAIN_BLAS
 
#define GTSAM_MAKE_VECTOR_DEFS(N)
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Typedefs

\n-typedef Eigen::VectorXd gtsam::Vector
 
\n-typedef Eigen::Matrix< double, 1, 1 > gtsam::Vector1
 
\n-typedef Eigen::Vector2d gtsam::Vector2
 
\n-typedef Eigen::Vector3d gtsam::Vector3
 
\n-typedef Eigen::VectorBlock< Vector > gtsam::SubVector
 
\n-typedef Eigen::VectorBlock< const Vector > gtsam::ConstSubVector
 
\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 Functions

bool gtsam::fpEqual (double a, double b, double tol, bool check_relative_also=true)
 Ensure we are not including a different version of Eigen in user code than while compiling gtsam, since it can lead to hard-to-understand runtime crashes.
 
\n-void gtsam::print (const Vector &v, const std::string &s, std::ostream &stream)
 print without optional string, must specify cout yourself
 
\n-void gtsam::print (const Vector &v, const std::string &s="")
 print with optional string to cout
 
\n-void gtsam::save (const Vector &A, const std::string &s, const std::string &filename)
 save a vector to file, which can be loaded by matlab
 
\n-bool gtsam::operator== (const Vector &vec1, const Vector &vec2)
 operator==()
 
\n-bool gtsam::greaterThanOrEqual (const Vector &v1, const Vector &v2)
 Greater than or equal to operation returns true if all elements in v1 are greater than corresponding elements in v2.
 
\n-bool gtsam::equal_with_abs_tol (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 VecA == VecB up to tolerance.
 
\n-bool gtsam::equal_with_abs_tol (const SubVector &vec1, const SubVector &vec2, double tol)
 
\n-bool gtsam::equal (const Vector &vec1, const Vector &vec2, double tol)
 Override of equal in Lie.h.
 
\n-bool gtsam::equal (const Vector &vec1, const Vector &vec2)
 Override of equal in Lie.h.
 
bool gtsam::assert_equal (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 Same, prints if error.
 
bool gtsam::assert_inequal (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 Not the same, prints if error.
 
bool gtsam::assert_equal (const SubVector &vec1, const SubVector &vec2, double tol=1e-9)
 Same, prints if error.
 
\n-bool gtsam::assert_equal (const ConstSubVector &expected, const ConstSubVector &actual, double tol)
 
bool gtsam::linear_dependent (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 check whether two vectors are linearly dependent
 
Vector gtsam::ediv_ (const Vector &a, const Vector &b)
 elementwise division, but 0/0 = 0, not inf
 
\n-template<class V1 , class V2 >
double gtsam::dot (const V1 &a, const V2 &b)
 Dot product.
 
\n-template<class V1 , class V2 >
double gtsam::inner_prod (const V1 &a, const V2 &b)
 compatibility version for ublas' inner_prod()
 
pair< double, Vector > gtsam::house (const Vector &x)
 house(x,j) computes HouseHolder vector v and scaling factor beta from x, such that the corresponding Householder reflection zeroes out all but x.
 
\n-double gtsam::houseInPlace (Vector &x)
 beta = house(x) computes the HouseHolder vector in place
 
pair< Vector, double > gtsam::weightedPseudoinverse (const Vector &v, const Vector &weights)
 Weighted Householder solution vector, a.k.a., the pseudoinverse of the column NOTE: if any sigmas are zero (indicating a constraint) the pseudoinverse will be a selection vector, and the variance will be zero.
 
\n-double gtsam::weightedPseudoinverse (const Vector &a, const Vector &weights, Vector &pseudo)
 
\n-Vector gtsam::concatVectors (const std::list< Vector > &vs)
 concatenate Vectors
 
\n-Vector gtsam::concatVectors (size_t nrVectors,...)
 concatenate Vectors
 
\n+template<class Archive >
void boost::serialization::save (Archive &ar, const gtsam::Vector &v, unsigned int)
 
\n+template<class Archive >
void boost::serialization::load (Archive &ar, gtsam::Vector &v, unsigned int)
 
\n+template<class Archive , int D>
void boost::serialization::save (Archive &ar, const Eigen::Matrix< double, D, 1 > &v, unsigned int)
 
\n+template<class Archive , int D>
void boost::serialization::load (Archive &ar, Eigen::Matrix< double, D, 1 > &v, unsigned int)
 
\n

Detailed Description

\n-

typedef and functions to augment Eigen's VectorXd

\n-
Author
Kai Ni
\n-
\n-Frank Dellaert
\n-
\n-Alex Hagiopol
\n-
\n-Varun Agrawal
\n-

Macro Definition Documentation

\n-\n-

◆ GTSAM_MAKE_VECTOR_DEFS

\n-\n-
\n-
\n- \n- \n- \n- \n- \n- \n- \n- \n-
#define GTSAM_MAKE_VECTOR_DEFS( N)
\n-
\n-Value:
using Vector##N = Eigen::Matrix<double, N, 1>; \\
\n-
static const Eigen::MatrixBase<Vector##N>::ConstantReturnType Z_##N##x1 = Vector##N::Zero();
\n-
\n-
\n-
\n-
\n+

serialization for Vectors

\n+
Author
Frank Dellaert
\n+
Date
February 2022
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,147 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Vector.h File Reference\n-typedef and functions to augment Eigen's VectorXd _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+VectorSerialization.h File Reference\n+serialization for Vectors _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n-\u00a0 Global functions in a separate testing namespace.\n-\u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 M\bMK\bKL\bL_\b_B\bBL\bLA\bAS\bS\u00a0\u00a0\u00a0MKL_DOMAIN_BLAS\n-\u00a0\n-#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bV_\bE_\bC_\bT_\bO_\bR_\b__\bD_\bE_\bF_\bS(N)\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n- typedef Eigen::VectorXd\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br\n-\u00a0\n- typedef Eigen::Matrix< double, 1, 1 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br1\b1\n-\u00a0\n- typedef Eigen::Vector2d\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br2\b2\n-\u00a0\n- typedef Eigen::Vector3d\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br3\b3\n-\u00a0\n- typedef Eigen::VectorBlock< Vector >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSu\bub\bbV\bVe\bec\bct\bto\bor\br\n-\u00a0\n-typedef Eigen::VectorBlock< const Vector >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bon\bns\bst\btS\bSu\bub\bbV\bVe\bec\bct\bto\bor\br\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bp_\bE_\bq_\bu_\ba_\bl (double a, double b, double tol, bool\n- check_relative_also=true)\n- Ensure we are not including a different version of\n-\u00a0 Eigen in user code than while compiling gtsam, since it\n- can lead to hard-to-understand runtime crashes.\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Vector &v, const std::string &s,\n- std::ostream &stream)\n-\u00a0 print without optional string, must specify cout\n- yourself\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Vector &v, const std::string &s=\"\")\n-\u00a0 print with optional string to cout\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsa\bav\bve\be (const Vector &A, const std::string &s,\n- const std::string &filename)\n-\u00a0 save a vector to file, which can be loaded by matlab\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br=\b==\b= (const Vector &vec1, const Vector\n- &vec2)\n-\u00a0 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=_\b(_\b)\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgr\bre\bea\bat\bte\ber\brT\bTh\bha\ban\bnO\bOr\brE\bEq\bqu\bua\bal\bl (const Vector &v1, const\n- Vector &v2)\n- Greater than or equal to operation returns true if all\n-\u00a0 elements in v1 are greater than corresponding elements\n- in v2.\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl_\b_w\bwi\bit\bth\bh_\b_a\bab\bbs\bs_\b_t\bto\bol\bl (const Vector &vec1, const\n- Vector &vec2, double tol=1e-9)\n-\u00a0 VecA == VecB up to tolerance.\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl_\b_w\bwi\bit\bth\bh_\b_a\bab\bbs\bs_\b_t\bto\bol\bl (const SubVector &vec1, const\n- SubVector &vec2, double tol)\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl (const Vector &vec1, const Vector &vec2,\n- double tol)\n-\u00a0 Override of equal in _\bL_\bi_\be_\b._\bh.\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl (const Vector &vec1, const Vector &vec2)\n-\u00a0 Override of equal in _\bL_\bi_\be_\b._\bh.\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl (const Vector &vec1, const Vector\n- &vec2, double tol=1e-9)\n-\u00a0 Same, prints if error.\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl (const Vector &vec1, const Vector\n- &vec2, double tol=1e-9)\n-\u00a0 Not the same, prints if error.\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl (const SubVector &vec1, const\n- SubVector &vec2, double tol=1e-9)\n-\u00a0 Same, prints if error.\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const ConstSubVector &expected,\n- const ConstSubVector &actual, double tol)\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt (const Vector &vec1, const\n- Vector &vec2, double tol=1e-9)\n-\u00a0 check whether two vectors are linearly dependent\n-\u00a0\n- Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bd_\bi_\bv_\b_ (const Vector &a, const Vector &b)\n-\u00a0 elementwise division, but 0/0 = 0, not inf\n-\u00a0\n-template\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdo\bot\bt (const V1 &a, const V2 &b)\n-\u00a0 Dot product.\n-\u00a0\n-template\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnn\bne\ber\br_\b_p\bpr\bro\bod\bd (const V1 &a, const V2 &b)\n-\u00a0 compatibility version for ublas' _\bi_\bn_\bn_\be_\br_\b__\bp_\br_\bo_\bd_\b(_\b)\n-\u00a0\n-pair< double, Vector >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be (const Vector &x)\n- house(x,j) computes HouseHolder vector v and scaling\n-\u00a0 factor beta from x, such that the corresponding\n- Householder reflection zeroes out all but x.\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:h\bho\bou\bus\bse\beI\bIn\bnP\bPl\bla\bac\bce\be (Vector &x)\n-\u00a0 beta = house(x) computes the HouseHolder vector in\n- place\n-\u00a0\n-pair< Vector, double >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\bP_\bs_\be_\bu_\bd_\bo_\bi_\bn_\bv_\be_\br_\bs_\be (const Vector &v, const\n- Vector &weights)\n- Weighted Householder solution vector, a.k.a., the\n-\u00a0 pseudoinverse of the column NOTE: if any sigmas are\n- zero (indicating a constraint) the pseudoinverse will\n- be a selection vector, and the variance will be zero.\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:w\bwe\bei\big\bgh\bht\bte\bed\bdP\bPs\bse\beu\bud\bdo\boi\bin\bnv\bve\ber\brs\bse\be (const Vector &a, const\n- Vector &weights, Vector &pseudo)\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnc\bca\bat\btV\bVe\bec\bct\bto\bor\brs\bs (const std::list< Vector > &vs)\n-\u00a0 concatenate Vectors\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnc\bca\bat\btV\bVe\bec\bct\bto\bor\brs\bs (size_t nrVectors,...)\n-\u00a0 concatenate Vectors\n+template\n+void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:s\bsa\bav\bve\be (Archive &ar, const gtsam::Vector &v, unsigned\n+ int)\n+\u00a0\n+template\n+void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:l\blo\boa\bad\bd (Archive &ar, gtsam::Vector &v, unsigned int)\n+\u00a0\n+template\n+void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:s\bsa\bav\bve\be (Archive &ar, const Eigen::Matrix< double, D,\n+ 1 > &v, unsigned int)\n+\u00a0\n+template\n+void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:l\blo\boa\bad\bd (Archive &ar, Eigen::Matrix< double, D, 1 >\n+ &v, unsigned int)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-typedef and functions to augment Eigen's VectorXd\n+serialization for Vectors\n Author\n- Kai Ni\n Frank Dellaert\n- Alex Hagiopol\n- Varun Agrawal\n-*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_M\bMA\bAK\bKE\bE_\b_V\bVE\bEC\bCT\bTO\bOR\bR_\b_D\bDE\bEF\bFS\bS *\b**\b**\b**\b**\b*\n-#define GTSAM_MAKE_VECTOR_DEFS ( \u00a0 N )\n-V\bVa\bal\blu\bue\be:\b:\n-using Vector##N = Eigen::Matrix; \\\n-static const Eigen::MatrixBase::ConstantReturnType Z_##N##x1 =\n-Vector##N::Zero();\n+ Date\n+ February 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00089_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00089_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Vector.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSerialization.h Source File\n \n \n \n \n \n \n \n@@ -98,192 +98,81 @@\n
No Matches
\n \n \n \n \n \n
\n-
Vector.h
\n+
VectorSerialization.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21// \\callgraph
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/base/Vector.h>
\n
22
\n-
23#pragma once
\n-
24#ifndef MKL_BLAS
\n-
25#define MKL_BLAS MKL_DOMAIN_BLAS
\n-
26#endif
\n-
27
\n-\n-
29#include <Eigen/Core>
\n-
30#include <iosfwd>
\n-
31#include <list>
\n-
32
\n-
33namespace gtsam {
\n-
34
\n-
35// Vector is just a typedef of the Eigen dynamic vector type
\n-
36
\n-
37// Typedef arbitary length vector
\n-
38typedef Eigen::VectorXd Vector;
\n-
39
\n-
40// Commonly used fixed size vectors
\n-
41typedef Eigen::Matrix<double, 1, 1> Vector1;
\n-
42typedef Eigen::Vector2d Vector2;
\n-
43typedef Eigen::Vector3d Vector3;
\n-
44
\n-
45static const Eigen::MatrixBase<Vector2>::ConstantReturnType Z_2x1 = Vector2::Zero();
\n-
46static const Eigen::MatrixBase<Vector3>::ConstantReturnType Z_3x1 = Vector3::Zero();
\n-
47
\n-
48// Create handy typedefs and constants for vectors with N>3
\n-
49// VectorN and Z_Nx1, for N=1..9
\n-
50#define GTSAM_MAKE_VECTOR_DEFS(N) \\
\n-
51 using Vector##N = Eigen::Matrix<double, N, 1>; \\
\n-
52 static const Eigen::MatrixBase<Vector##N>::ConstantReturnType Z_##N##x1 = Vector##N::Zero();
\n-
53
\n-
54GTSAM_MAKE_VECTOR_DEFS(4)
\n-
55GTSAM_MAKE_VECTOR_DEFS(5)
\n-
56GTSAM_MAKE_VECTOR_DEFS(6)
\n-
57GTSAM_MAKE_VECTOR_DEFS(7)
\n-
58GTSAM_MAKE_VECTOR_DEFS(8)
\n-
59GTSAM_MAKE_VECTOR_DEFS(9)
\n-
60GTSAM_MAKE_VECTOR_DEFS(10)
\n-
61GTSAM_MAKE_VECTOR_DEFS(11)
\n-
62GTSAM_MAKE_VECTOR_DEFS(12)
\n-
63GTSAM_MAKE_VECTOR_DEFS(15)
\n-
64
\n-
65typedef Eigen::VectorBlock<Vector> SubVector;
\n-
66typedef Eigen::VectorBlock<const Vector> ConstSubVector;
\n-
67
\n-
73#if defined(GTSAM_EIGEN_VERSION_WORLD)
\n-
74static_assert(
\n-
75 GTSAM_EIGEN_VERSION_WORLD==EIGEN_WORLD_VERSION &&
\n-
76 GTSAM_EIGEN_VERSION_MAJOR==EIGEN_MAJOR_VERSION,
\n-
77 "Error: GTSAM was built against a different version of Eigen");
\n-
78#endif
\n-
79
\n-
96GTSAM_EXPORT bool fpEqual(double a, double b, double tol,
\n-
97 bool check_relative_also = true);
\n-
98
\n-
102GTSAM_EXPORT void print(const Vector& v, const std::string& s, std::ostream& stream);
\n-
103
\n-
107GTSAM_EXPORT void print(const Vector& v, const std::string& s = "");
\n-
108
\n-
112GTSAM_EXPORT void save(const Vector& A, const std::string &s, const std::string& filename);
\n-
113
\n-
117GTSAM_EXPORT bool operator==(const Vector& vec1,const Vector& vec2);
\n-
118
\n-
124GTSAM_EXPORT bool greaterThanOrEqual(const Vector& v1, const Vector& v2);
\n-
125
\n-
129GTSAM_EXPORT bool equal_with_abs_tol(const Vector& vec1, const Vector& vec2, double tol=1e-9);
\n-
130GTSAM_EXPORT bool equal_with_abs_tol(const SubVector& vec1, const SubVector& vec2, double tol=1e-9);
\n-
131
\n-
\n-
135inline bool equal(const Vector& vec1, const Vector& vec2, double tol) {
\n-
136 return equal_with_abs_tol(vec1, vec2, tol);
\n-
137}
\n-
\n-
138
\n-
\n-
142inline bool equal(const Vector& vec1, const Vector& vec2) {
\n-
143 return equal_with_abs_tol(vec1, vec2);
\n-
144}
\n-
\n-
145
\n-
153GTSAM_EXPORT bool assert_equal(const Vector& vec1, const Vector& vec2, double tol=1e-9);
\n-
154
\n-
162GTSAM_EXPORT bool assert_inequal(const Vector& vec1, const Vector& vec2, double tol=1e-9);
\n-
163
\n-
171GTSAM_EXPORT bool assert_equal(const SubVector& vec1, const SubVector& vec2, double tol=1e-9);
\n-
172GTSAM_EXPORT bool assert_equal(const ConstSubVector& vec1, const ConstSubVector& vec2, double tol=1e-9);
\n-
173
\n-
181GTSAM_EXPORT bool linear_dependent(const Vector& vec1, const Vector& vec2, double tol=1e-9);
\n-
182
\n-
189GTSAM_EXPORT Vector ediv_(const Vector &a, const Vector &b);
\n-
190
\n-
194template<class V1, class V2>
\n-
\n-
195inline double dot(const V1 &a, const V2& b) {
\n-
196 assert (b.size()==a.size());
\n-
197 return a.dot(b);
\n-
198}
\n-
\n-
199
\n-
201template<class V1, class V2>
\n-
\n-
202inline double inner_prod(const V1 &a, const V2& b) {
\n-
203 assert (b.size()==a.size());
\n-
204 return a.dot(b);
\n-
205}
\n-
\n-
206
\n-
207#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
212inline void GTSAM_DEPRECATED scal(double alpha, Vector& x) { x *= alpha; }
\n-
213
\n-
218template<class V1, class V2>
\n-
219inline void GTSAM_DEPRECATED axpy(double alpha, const V1& x, V2& y) {
\n-
220 assert (y.size()==x.size());
\n-
221 y += alpha * x;
\n-
222}
\n-
223inline void axpy(double alpha, const Vector& x, SubVector y) {
\n-
224 assert (y.size()==x.size());
\n-
225 y += alpha * x;
\n-
226}
\n-
227#endif
\n-
228
\n-
234GTSAM_EXPORT std::pair<double,Vector> house(const Vector &x);
\n-
235
\n-
237GTSAM_EXPORT double houseInPlace(Vector &x);
\n-
238
\n-
249GTSAM_EXPORT std::pair<Vector, double>
\n-
250weightedPseudoinverse(const Vector& v, const Vector& weights);
\n-
251
\n-
252/*
\n-
253 * Fast version *no error checking* !
\n-
254 * Pass in initialized vector pseudo of size(weights) or will crash !
\n-
255 * @return the precision, pseudoinverse in third argument
\n-
256 */
\n-
257GTSAM_EXPORT double weightedPseudoinverse(const Vector& a, const Vector& weights, Vector& pseudo);
\n-
258
\n-
262GTSAM_EXPORT Vector concatVectors(const std::list<Vector>& vs);
\n-
263
\n-
267GTSAM_EXPORT Vector concatVectors(size_t nrVectors, ...);
\n-
268} // namespace gtsam
\n-
Included from all GTSAM files.
\n-
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Vector ediv_(const Vector &a, const Vector &b)
elementwise division, but 0/0 = 0, not inf
Definition Vector.cpp:199
\n-
bool greaterThanOrEqual(const Vector &vec1, const Vector &vec2)
Greater than or equal to operation returns true if all elements in v1 are greater than corresponding ...
Definition Vector.cpp:114
\n+
23#include <boost/serialization/array.hpp>
\n+
24#include <boost/serialization/nvp.hpp>
\n+
25#include <boost/serialization/split_free.hpp>
\n+
26
\n+
27namespace boost {
\n+
28namespace serialization {
\n+
29
\n+
30// split version - copies into an STL vector for serialization
\n+
31template <class Archive>
\n+
32void save(Archive& ar, const gtsam::Vector& v, unsigned int /*version*/) {
\n+
33 const size_t size = v.size();
\n+
34 ar << BOOST_SERIALIZATION_NVP(size);
\n+
35 ar << make_nvp("data", make_array(v.data(), v.size()));
\n+
36}
\n+
37
\n+
38template <class Archive>
\n+
39void load(Archive& ar, gtsam::Vector& v, unsigned int /*version*/) {
\n+
40 size_t size;
\n+
41 ar >> BOOST_SERIALIZATION_NVP(size);
\n+
42 v.resize(size);
\n+
43 ar >> make_nvp("data", make_array(v.data(), v.size()));
\n+
44}
\n+
45
\n+
46// split version - copies into an STL vector for serialization
\n+
47template <class Archive, int D>
\n+
48void save(Archive& ar, const Eigen::Matrix<double, D, 1>& v,
\n+
49 unsigned int /*version*/) {
\n+
50 ar << make_nvp("data", make_array(v.data(), v.RowsAtCompileTime));
\n+
51}
\n+
52
\n+
53template <class Archive, int D>
\n+
54void load(Archive& ar, Eigen::Matrix<double, D, 1>& v,
\n+
55 unsigned int /*version*/) {
\n+
56 ar >> make_nvp("data", make_array(v.data(), v.RowsAtCompileTime));
\n+
57}
\n+
58
\n+
59} // namespace serialization
\n+
60} // namespace boost
\n+
61
\n+
62BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector)
\n+
63BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector2)
\n+
64BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector3)
\n+
65BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector6)
\n+
typedef and functions to augment Eigen's VectorXd
\n
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition Matrix.cpp:167
\n-
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n-
bool linear_dependent(const Matrix &A, const Matrix &B, double tol)
check whether the rows of two matrices are linear dependent
Definition Matrix.cpp:117
\n-
double inner_prod(const V1 &a, const V2 &b)
compatibility version for ublas' inner_prod()
Definition Vector.h:202
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
void axpy(double alpha, const Errors &x, Errors &y)
BLAS level 2 style AXPY, y := alpha*x + y
Definition Errors.cpp:111
\n-
bool assert_inequal(const Matrix &A, const Matrix &B, double tol)
inequals with an tolerance, prints out message if within tolerance
Definition Matrix.cpp:63
\n-
double houseInPlace(Vector &v)
beta = house(x) computes the HouseHolder vector in place
Definition Vector.cpp:212
\n-
bool equal(const T &obj1, const T &obj2, double tol)
Call equal on the object.
Definition Testable.h:84
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
bool fpEqual(double a, double b, double tol, bool check_relative_also)
Ensure we are not including a different version of Eigen in user code than while compiling gtsam,...
Definition Vector.cpp:42
\n-
Vector concatVectors(const std::list< Vector > &vs)
concatenate Vectors
Definition Vector.cpp:302
\n-
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n-
pair< double, Vector > house(const Vector &x)
house(x,j) computes HouseHolder vector v and scaling factor beta from x, such that the corresponding ...
Definition Vector.cpp:237
\n-
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition Matrix.h:100
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,247 +1,77 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Vector.h\n+VectorSerialization.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21// \\callgraph\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n 22\n-23#pragma once\n-24#ifndef MKL_BLAS\n-25#define MKL_BLAS MKL_DOMAIN_BLAS\n-26#endif\n-27\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-29#include \n-30#include \n-31#include \n-32\n-33namespace _\bg_\bt_\bs_\ba_\bm {\n-34\n-35// Vector is just a typedef of the Eigen dynamic vector type\n-36\n-37// Typedef arbitary length vector\n-38typedef Eigen::VectorXd Vector;\n-39\n-40// Commonly used fixed size vectors\n-41typedef Eigen::Matrix Vector1;\n-42typedef Eigen::Vector2d Vector2;\n-43typedef Eigen::Vector3d Vector3;\n-44\n-45static const Eigen::MatrixBase::ConstantReturnType Z_2x1 = Vector2::\n-Zero();\n-46static const Eigen::MatrixBase::ConstantReturnType Z_3x1 = Vector3::\n-Zero();\n-47\n-48// Create handy typedefs and constants for vectors with N>3\n-49// VectorN and Z_Nx1, for N=1..9\n-50#define GTSAM_MAKE_VECTOR_DEFS(N) \\\n-51 using Vector##N = Eigen::Matrix; \\\n-52 static const Eigen::MatrixBase::ConstantReturnType Z_##N##x1 =\n-Vector##N::Zero();\n-53\n-54GTSAM_MAKE_VECTOR_DEFS(4)\n-55GTSAM_MAKE_VECTOR_DEFS(5)\n-56GTSAM_MAKE_VECTOR_DEFS(6)\n-57GTSAM_MAKE_VECTOR_DEFS(7)\n-58GTSAM_MAKE_VECTOR_DEFS(8)\n-59GTSAM_MAKE_VECTOR_DEFS(9)\n-60GTSAM_MAKE_VECTOR_DEFS(10)\n-61GTSAM_MAKE_VECTOR_DEFS(11)\n-62GTSAM_MAKE_VECTOR_DEFS(12)\n-63GTSAM_MAKE_VECTOR_DEFS(15)\n-64\n-65typedef Eigen::VectorBlock SubVector;\n-66typedef Eigen::VectorBlock ConstSubVector;\n-67\n-73#if defined(GTSAM_EIGEN_VERSION_WORLD)\n-74static_assert(\n-75 GTSAM_EIGEN_VERSION_WORLD==EIGEN_WORLD_VERSION &&\n-76 GTSAM_EIGEN_VERSION_MAJOR==EIGEN_MAJOR_VERSION,\n-77 \"Error: GTSAM was built against a different version of Eigen\");\n-78#endif\n-79\n-96GTSAM_EXPORT bool _\bf_\bp_\bE_\bq_\bu_\ba_\bl(double a, double b, double tol,\n-97 bool check_relative_also = true);\n-98\n-102GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const Vector& v, const std::string& s, std::ostream&\n-stream);\n-103\n-107GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const Vector& v, const std::string& s = \"\");\n-108\n-112GTSAM_EXPORT void _\bs_\ba_\bv_\be(const Vector& A, const std::string &s, const std::\n-string& filename);\n-113\n-117GTSAM_EXPORT bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const Vector& vec1,const Vector& vec2);\n-118\n-124GTSAM_EXPORT bool _\bg_\br_\be_\ba_\bt_\be_\br_\bT_\bh_\ba_\bn_\bO_\br_\bE_\bq_\bu_\ba_\bl(const Vector& v1, const Vector& v2);\n-125\n-129GTSAM_EXPORT bool _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(const Vector& vec1, const Vector& vec2,\n-double tol=1e-9);\n-130GTSAM_EXPORT bool _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(const SubVector& vec1, const SubVector&\n-vec2, double tol=1e-9);\n-131\n-_\b1_\b3_\b5inline bool _\be_\bq_\bu_\ba_\bl(const Vector& vec1, const Vector& vec2, double tol) {\n-136 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(vec1, vec2, tol);\n-137}\n-138\n-_\b1_\b4_\b2inline bool _\be_\bq_\bu_\ba_\bl(const Vector& vec1, const Vector& vec2) {\n-143 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(vec1, vec2);\n-144}\n-145\n-153GTSAM_EXPORT bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const Vector& vec1, const Vector& vec2,\n-double tol=1e-9);\n-154\n-162GTSAM_EXPORT bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl(const Vector& vec1, const Vector& vec2,\n-double tol=1e-9);\n-163\n-171GTSAM_EXPORT bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const SubVector& vec1, const SubVector& vec2,\n-double tol=1e-9);\n-172GTSAM_EXPORT bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const ConstSubVector& vec1, const\n-ConstSubVector& vec2, double tol=1e-9);\n-173\n-181GTSAM_EXPORT bool _\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt(const Vector& vec1, const Vector& vec2,\n-double tol=1e-9);\n-182\n-189GTSAM_EXPORT Vector _\be_\bd_\bi_\bv_\b_(const Vector &a, const Vector &b);\n-190\n-194template\n-_\b1_\b9_\b5inline double _\bd_\bo_\bt(const V1 &a, const V2& b) {\n-196 assert (b.size()==a.size());\n-197 return a.dot(b);\n-198}\n-199\n-201template\n-_\b2_\b0_\b2inline double _\bi_\bn_\bn_\be_\br_\b__\bp_\br_\bo_\bd(const V1 &a, const V2& b) {\n-203 assert (b.size()==a.size());\n-204 return a.dot(b);\n-205}\n-206\n-207#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-212inline void GTSAM_DEPRECATED scal(double alpha, Vector& x) { x *= alpha; }\n-213\n-218template\n-219inline void GTSAM_DEPRECATED _\ba_\bx_\bp_\by(double alpha, const V1& x, V2& y) {\n-220 assert (y.size()==x.size());\n-221 y += alpha * x;\n-222}\n-223inline void _\ba_\bx_\bp_\by(double alpha, const Vector& x, SubVector y) {\n-224 assert (y.size()==x.size());\n-225 y += alpha * x;\n-226}\n-227#endif\n-228\n-234GTSAM_EXPORT std::pair _\bh_\bo_\bu_\bs_\be(const Vector &x);\n-235\n-237GTSAM_EXPORT double _\bh_\bo_\bu_\bs_\be_\bI_\bn_\bP_\bl_\ba_\bc_\be(Vector &x);\n-238\n-249GTSAM_EXPORT std::pair\n-250weightedPseudoinverse(const Vector& v, const Vector& weights);\n-251\n-252/*\n-253 * Fast version *no error checking* !\n-254 * Pass in initialized vector pseudo of size(weights) or will crash !\n-255 * @return the precision, pseudoinverse in third argument\n-256 */\n-257GTSAM_EXPORT double weightedPseudoinverse(const Vector& a, const Vector&\n-weights, Vector& pseudo);\n-258\n-262GTSAM_EXPORT Vector _\bc_\bo_\bn_\bc_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs(const std::list& vs);\n-263\n-267GTSAM_EXPORT Vector _\bc_\bo_\bn_\bc_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs(size_t nrVectors, ...);\n-268} // namespace gtsam\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n-_\bg_\bt_\bs_\ba_\bm\n-Global functions in a separate testing namespace.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bd_\bi_\bv_\b_\n-Vector ediv_(const Vector &a, const Vector &b)\n-elementwise division, but 0/0 = 0, not inf\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:199\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\br_\be_\ba_\bt_\be_\br_\bT_\bh_\ba_\bn_\bO_\br_\bE_\bq_\bu_\ba_\bl\n-bool greaterThanOrEqual(const Vector &vec1, const Vector &vec2)\n-Greater than or equal to operation returns true if all elements in v1 are\n-greater than corresponding ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:114\n+23#include \n+24#include \n+25#include \n+26\n+27namespace boost {\n+28namespace serialization {\n+29\n+30// split version - copies into an STL vector for serialization\n+31template \n+32void _\bs_\ba_\bv_\be(Archive& ar, const gtsam::Vector& v, unsigned int /*version*/) {\n+33 const size_t size = v.size();\n+34 ar << BOOST_SERIALIZATION_NVP(size);\n+35 ar << make_nvp(\"data\", make_array(v.data(), v.size()));\n+36}\n+37\n+38template \n+39void load(Archive& ar, gtsam::Vector& v, unsigned int /*version*/) {\n+40 size_t size;\n+41 ar >> BOOST_SERIALIZATION_NVP(size);\n+42 v.resize(size);\n+43 ar >> make_nvp(\"data\", make_array(v.data(), v.size()));\n+44}\n+45\n+46// split version - copies into an STL vector for serialization\n+47template \n+48void _\bs_\ba_\bv_\be(Archive& ar, const Eigen::Matrix& v,\n+49 unsigned int /*version*/) {\n+50 ar << make_nvp(\"data\", make_array(v.data(), v.RowsAtCompileTime));\n+51}\n+52\n+53template \n+54void load(Archive& ar, Eigen::Matrix& v,\n+55 unsigned int /*version*/) {\n+56 ar >> make_nvp(\"data\", make_array(v.data(), v.RowsAtCompileTime));\n+57}\n+58\n+59} // namespace serialization\n+60} // namespace boost\n+61\n+62BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector)\n+63BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector2)\n+64BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector3)\n+65BOOST_SERIALIZATION_SPLIT_FREE(gtsam::Vector6)\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\ba_\bv_\be\n void save(const Matrix &A, const string &s, const string &filename)\n save a matrix to file, which can be loaded by matlab\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n-bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n-equals with an tolerance, prints out message if unequal\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt\n-bool linear_dependent(const Matrix &A, const Matrix &B, double tol)\n-check whether the rows of two matrices are linear dependent\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bn_\be_\br_\b__\bp_\br_\bo_\bd\n-double inner_prod(const V1 &a, const V2 &b)\n-compatibility version for ublas' inner_prod()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:202\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bx_\bp_\by\n-void axpy(double alpha, const Errors &x, Errors &y)\n-BLAS level 2 style AXPY, y := alpha*x + y\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl\n-bool assert_inequal(const Matrix &A, const Matrix &B, double tol)\n-inequals with an tolerance, prints out message if within tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-double houseInPlace(Vector &v)\n-beta = house(x) computes the HouseHolder vector in place\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl\n-bool equal(const T &obj1, const T &obj2, double tol)\n-Call equal on the object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bp_\bE_\bq_\bu_\ba_\bl\n-bool fpEqual(double a, double b, double tol, bool check_relative_also)\n-Ensure we are not including a different version of Eigen in user code than\n-while compiling gtsam,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bc_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs\n-Vector concatVectors(const std::list< Vector > &vs)\n-concatenate Vectors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:302\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n-bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n-DenseBase< MATRIX > &B, double tol=1e-9)\n-equals with a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be\n-pair< double, Vector > house(const Vector &x)\n-house(x,j) computes HouseHolder vector v and scaling factor beta from x, such\n-that the corresponding ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:237\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const Matrix &A, const Matrix &B)\n-equality is just equal_with_abs_tol 1e-9\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:100\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00092.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00092.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/serialization.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastSet.h File Reference\n \n \n \n \n \n \n \n@@ -94,166 +94,45 @@\n \n \n \n \n \n
\n \n-
serialization.h File Reference
\n+
FastSet.h File Reference
\n
\n
\n \n-

Convenience functions for serializing data structures via boost.serialization. \n+

A thin wrapper around std::set that uses boost's fast_pool_allocator. \n More...

\n \n

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::FastSet< VALUE >
 FastSet is a thin wrapper around std::set that uses the boost fast_pool_allocator instead of the default STL allocator. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

Standard serialization

Serialization in default compressed format

\n-
template<class T >
void gtsam::serializeToStream (const T &input, std::ostream &out_archive_stream)
 
\n-template<class T >
void gtsam::deserializeFromStream (std::istream &in_archive_stream, T &output)
 deserializes from a stream
 
\n-template<class T >
std::string gtsam::serializeToString (const T &input)
 serializes to a string
 
\n-template<class T >
void gtsam::deserializeFromString (const std::string &serialized, T &output)
 deserializes from a string
 
\n-template<class T >
bool gtsam::serializeToFile (const T &input, const std::string &filename)
 serializes to a file
 
\n-template<class T >
bool gtsam::deserializeFromFile (const std::string &filename, T &output)
 deserializes from a file
 
\n-template<class T >
std::string gtsam::serialize (const T &input)
 serializes to a string
 
\n-template<class T >
void gtsam::deserialize (const std::string &serialized, T &output)
 deserializes from a string
 
XML Serialization

Serialization to XML format with named structures

\n-
template<class T >
void gtsam::serializeToXMLStream (const T &input, std::ostream &out_archive_stream, const std::string &name="data")
 
\n-template<class T >
void gtsam::deserializeFromXMLStream (std::istream &in_archive_stream, T &output, const std::string &name="data")
 deserializes from a stream in XML
 
\n-template<class T >
std::string gtsam::serializeToXMLString (const T &input, const std::string &name="data")
 serializes to a string in XML
 
\n-template<class T >
void gtsam::deserializeFromXMLString (const std::string &serialized, T &output, const std::string &name="data")
 deserializes from a string in XML
 
\n-template<class T >
bool gtsam::serializeToXMLFile (const T &input, const std::string &filename, const std::string &name="data")
 serializes to an XML file
 
\n-template<class T >
bool gtsam::deserializeFromXMLFile (const std::string &filename, T &output, const std::string &name="data")
 deserializes from an XML file
 
\n-template<class T >
std::string gtsam::serializeXML (const T &input, const std::string &name="data")
 serializes to a string in XML
 
\n-template<class T >
void gtsam::deserializeXML (const std::string &serialized, T &output, const std::string &name="data")
 deserializes from a string in XML
 
Binary Serialization

Serialization to binary format with named structures

\n-
template<class T >
void gtsam::serializeToBinaryStream (const T &input, std::ostream &out_archive_stream, const std::string &name="data")
 
\n-template<class T >
void gtsam::deserializeFromBinaryStream (std::istream &in_archive_stream, T &output, const std::string &name="data")
 deserializes from a stream in binary
 
\n-template<class T >
std::string gtsam::serializeToBinaryString (const T &input, const std::string &name="data")
 serializes to a string in binary
 
\n-template<class T >
void gtsam::deserializeFromBinaryString (const std::string &serialized, T &output, const std::string &name="data")
 deserializes from a string in binary
 
\n-template<class T >
bool gtsam::serializeToBinaryFile (const T &input, const std::string &filename, const std::string &name="data")
 serializes to a binary file
 
\n-template<class T >
bool gtsam::deserializeFromBinaryFile (const std::string &filename, T &output, const std::string &name="data")
 deserializes from a binary file
 
\n-template<class T >
std::string gtsam::serializeBinary (const T &input, const std::string &name="data")
 serializes to a string in binary
 
\n-template<class T >
void gtsam::deserializeBinary (const std::string &serialized, T &output, const std::string &name="data")
 deserializes from a string in binary
 
\n

Detailed Description

\n-

Convenience functions for serializing data structures via boost.serialization.

\n-
Author
Alex Cunningham
\n-
\n-Richard Roberts
\n-
Date
Feb 7, 2012
\n+

A thin wrapper around std::set that uses boost's fast_pool_allocator.

\n+
Author
Richard Roberts
\n+
Date
Oct 17, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,146 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-serialization.h File Reference\n-Convenience functions for serializing data structures via boost.serialization.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+FastSet.h File Reference\n+A thin wrapper around std::set that uses boost's fast_pool_allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n+\u00a0 _\bF_\ba_\bs_\bt_\bS_\be_\bt is a thin wrapper around std::set that uses the boost\n+ fast_pool_allocator instead of the default STL allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-Standard serialization\n-Serialization in default compressed format\n-template\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\be_\ba_\bm (const T &input, std::ostream\n- &out_archive_stream)\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmS\bSt\btr\bre\bea\bam\bm (std::istream &in_archive_stream, T\n- &output)\n-\u00a0 deserializes from a stream\n-\u00a0\n-template\n-std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boS\bSt\btr\bri\bin\bng\bg (const T &input)\n-\u00a0 serializes to a string\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmS\bSt\btr\bri\bin\bng\bg (const std::string &serialized, T\n- &output)\n-\u00a0 deserializes from a string\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boF\bFi\bil\ble\be (const T &input, const std::string\n- &filename)\n-\u00a0 serializes to a file\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmF\bFi\bil\ble\be (const std::string &filename, T\n- &output)\n-\u00a0 deserializes from a file\n-\u00a0\n-template\n-std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (const T &input)\n-\u00a0 serializes to a string\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\be (const std::string &serialized, T &output)\n-\u00a0 deserializes from a string\n-\u00a0\n-XML Serialization\n-Serialization to XML format with named structures\n-template\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm (const T &input, std::ostream\n- &out_archive_stream, const std::string &name=\"data\")\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmX\bXM\bML\bLS\bSt\btr\bre\bea\bam\bm (std::istream &in_archive_stream,\n- T &output, const std::string &name=\"data\")\n-\u00a0 deserializes from a stream in XML\n-\u00a0\n-template\n-std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boX\bXM\bML\bLS\bSt\btr\bri\bin\bng\bg (const T &input, const std::string\n- &name=\"data\")\n-\u00a0 serializes to a string in XML\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmX\bXM\bML\bLS\bSt\btr\bri\bin\bng\bg (const std::string &serialized, T\n- &output, const std::string &name=\"data\")\n-\u00a0 deserializes from a string in XML\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boX\bXM\bML\bLF\bFi\bil\ble\be (const T &input, const std::string\n- &filename, const std::string &name=\"data\")\n-\u00a0 serializes to an XML file\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmX\bXM\bML\bLF\bFi\bil\ble\be (const std::string &filename, T\n- &output, const std::string &name=\"data\")\n-\u00a0 deserializes from an XML file\n-\u00a0\n-template\n-std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beX\bXM\bML\bL (const T &input, const std::string\n- &name=\"data\")\n-\u00a0 serializes to a string in XML\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beX\bXM\bML\bL (const std::string &serialized, T &output,\n- const std::string &name=\"data\")\n-\u00a0 deserializes from a string in XML\n-\u00a0\n-Binary Serialization\n-Serialization to binary format with named structures\n-template\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm (const T &input, std::ostream\n- &out_archive_stream, const std::string &name=\"data\")\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmB\bBi\bin\bna\bar\bry\byS\bSt\btr\bre\bea\bam\bm (std::istream\n- &in_archive_stream, T &output, const std::string &name=\"data\")\n-\u00a0 deserializes from a stream in binary\n-\u00a0\n-template\n-std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boB\bBi\bin\bna\bar\bry\byS\bSt\btr\bri\bin\bng\bg (const T &input, const std::string\n- &name=\"data\")\n-\u00a0 serializes to a string in binary\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmB\bBi\bin\bna\bar\bry\byS\bSt\btr\bri\bin\bng\bg (const std::string &serialized,\n- T &output, const std::string &name=\"data\")\n-\u00a0 deserializes from a string in binary\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beT\bTo\boB\bBi\bin\bna\bar\bry\byF\bFi\bil\ble\be (const T &input, const std::string\n- &filename, const std::string &name=\"data\")\n-\u00a0 serializes to a binary file\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beF\bFr\bro\bom\bmB\bBi\bin\bna\bar\bry\byF\bFi\bil\ble\be (const std::string &filename, T\n- &output, const std::string &name=\"data\")\n-\u00a0 deserializes from a binary file\n-\u00a0\n-template\n-std::string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\beB\bBi\bin\bna\bar\bry\by (const T &input, const std::string\n- &name=\"data\")\n-\u00a0 serializes to a string in binary\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\bes\bse\ber\bri\bia\bal\bli\biz\bze\beB\bBi\bin\bna\bar\bry\by (const std::string &serialized, T\n- &output, const std::string &name=\"data\")\n-\u00a0 deserializes from a string in binary\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Convenience functions for serializing data structures via boost.serialization.\n+A thin wrapper around std::set that uses boost's fast_pool_allocator.\n Author\n- Alex Cunningham\n Richard Roberts\n Date\n- Feb 7, 2012\n+ Oct 17, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00092_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00092_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/serialization.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastSet.h Source File\n \n \n \n \n \n \n \n@@ -98,319 +98,162 @@\n
No Matches
\n \n \n \n \n \n
\n-
serialization.h
\n+
FastSet.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <Eigen/Core>
\n-
23#include <fstream>
\n-
24#include <sstream>
\n-
25#include <string>
\n-
26
\n-
27// includes for standard serialization types
\n-
28#include <boost/serialization/version.hpp>
\n-
29#include <boost/serialization/optional.hpp>
\n-
30#include <boost/serialization/shared_ptr.hpp>
\n-
31#include <boost/serialization/vector.hpp>
\n-
32#include <boost/serialization/map.hpp>
\n-
33#include <boost/serialization/list.hpp>
\n-
34#include <boost/serialization/deque.hpp>
\n-
35#include <boost/serialization/weak_ptr.hpp>
\n-
36
\n-
37#include <boost/archive/text_oarchive.hpp>
\n-
38#include <boost/archive/text_iarchive.hpp>
\n-
39#include <boost/archive/xml_iarchive.hpp>
\n-
40#include <boost/archive/xml_oarchive.hpp>
\n-
41#include <boost/archive/binary_iarchive.hpp>
\n-
42#include <boost/archive/binary_oarchive.hpp>
\n-
43#include <boost/serialization/export.hpp>
\n-
44
\n-
45// Workaround a bug in GCC >= 7 and C++17
\n-
46// ref. https://gitlab.com/libeigen/eigen/-/issues/1676
\n-
47#ifdef __GNUC__
\n-
48#if __GNUC__ >= 7 && __cplusplus >= 201703L
\n-
49namespace boost { namespace serialization { struct U; } }
\n-
50namespace Eigen { namespace internal {
\n-
51template<> struct traits<boost::serialization::U> {enum {Flags=0};};
\n-
52} }
\n-
53#endif
\n-
54#endif
\n+
19#pragma once
\n+
20
\n+
21#include <boost/version.hpp>
\n+
22#if BOOST_VERSION >= 107400
\n+
23#include <boost/serialization/library_version_type.hpp>
\n+
24#endif
\n+
25#include <boost/serialization/nvp.hpp>
\n+
26#include <boost/serialization/set.hpp>
\n+\n+
28#include <gtsam/base/Testable.h>
\n+
29
\n+
30#include <functional>
\n+
31#include <set>
\n+
32
\n+
33namespace boost {
\n+
34namespace serialization {
\n+
35class access;
\n+
36} /* namespace serialization */
\n+
37} /* namespace boost */
\n+
38
\n+
39namespace gtsam {
\n+
40
\n+
48template<typename VALUE>
\n+
\n+
49class FastSet: public std::set<VALUE, std::less<VALUE>,
\n+
50 typename internal::FastDefaultAllocator<VALUE>::type> {
\n+
51
\n+
52 BOOST_CONCEPT_ASSERT ((IsTestable<VALUE> ));
\n+
53
\n+
54public:
\n
55
\n-
56namespace gtsam {
\n-
57
\n-
63template <class T>
\n-
\n-
64void serializeToStream(const T& input, std::ostream& out_archive_stream) {
\n-
65 boost::archive::text_oarchive out_archive(out_archive_stream);
\n-
66 out_archive << input;
\n-
67}
\n+
56 typedef std::set<VALUE, std::less<VALUE>,
\n+
57 typename internal::FastDefaultAllocator<VALUE>::type> Base;
\n+
58
\n+
59 using Base::Base; // Inherit the set constructors
\n+
60
\n+
61 FastSet() = default;
\n+
62
\n+
64 template<typename INPUTCONTAINER>
\n+
\n+
65 explicit FastSet(const INPUTCONTAINER& container) :
\n+
66 Base(container.begin(), container.end()) {
\n+
67 }
\n
\n
68
\n-
70template <class T>
\n-
\n-
71void deserializeFromStream(std::istream& in_archive_stream, T& output) {
\n-
72 boost::archive::text_iarchive in_archive(in_archive_stream);
\n-
73 in_archive >> output;
\n-
74}
\n-
\n-
75
\n-
77template <class T>
\n-
\n-
78std::string serializeToString(const T& input) {
\n-
79 std::ostringstream out_archive_stream;
\n-
80 serializeToStream(input, out_archive_stream);
\n-
81 return out_archive_stream.str();
\n-
82}
\n-
\n-
83
\n-
85template <class T>
\n-
\n-
86void deserializeFromString(const std::string& serialized, T& output) {
\n-
87 std::istringstream in_archive_stream(serialized);
\n-
88 deserializeFromStream(in_archive_stream, output);
\n-
89}
\n-
\n-
90
\n-
92template <class T>
\n-
\n-
93bool serializeToFile(const T& input, const std::string& filename) {
\n-
94 std::ofstream out_archive_stream(filename.c_str());
\n-
95 if (!out_archive_stream.is_open()) return false;
\n-
96 serializeToStream(input, out_archive_stream);
\n-
97 out_archive_stream.close();
\n-
98 return true;
\n-
99}
\n-
\n-
100
\n-
102template <class T>
\n-
\n-
103bool deserializeFromFile(const std::string& filename, T& output) {
\n-
104 std::ifstream in_archive_stream(filename.c_str());
\n-
105 if (!in_archive_stream.is_open()) return false;
\n-
106 deserializeFromStream(in_archive_stream, output);
\n-
107 in_archive_stream.close();
\n-
108 return true;
\n-
109}
\n-
\n-
110
\n-
112template <class T>
\n-
\n-
113std::string serialize(const T& input) {
\n-
114 return serializeToString(input);
\n-
115}
\n+
\n+\n+
71 Base(x) {
\n+
72 }
\n+
\n+
73
\n+
\n+
75 FastSet(const Base& x) :
\n+
76 Base(x) {
\n+
77 }
\n+
\n+
78
\n+
79#ifdef GTSAM_ALLOCATOR_BOOSTPOOL
\n+
81 FastSet(const std::set<VALUE>& x) {
\n+
82 // This if statement works around a bug in boost pool allocator and/or
\n+
83 // STL vector where if the size is zero, the pool allocator will allocate
\n+
84 // huge amounts of memory.
\n+
85 if(x.size() > 0)
\n+
86 Base::insert(x.begin(), x.end());
\n+
87 }
\n+
88#endif
\n+
89
\n+
\n+
91 operator std::set<VALUE>() const {
\n+
92 return std::set<VALUE>(this->begin(), this->end());
\n+
93 }
\n+
\n+
94
\n+
\n+
96 bool exists(const VALUE& e) const {
\n+
97 return this->find(e) != this->end();
\n+
98 }
\n+
\n+
99
\n+
\n+
101 void print(const std::string& str = "") const {
\n+
102 for (typename Base::const_iterator it = this->begin(); it != this->end(); ++it)
\n+
103 traits<VALUE>::Print(*it, str);
\n+
104 }
\n+
\n+
105
\n+
\n+
107 bool equals(const FastSet<VALUE>& other, double tol = 1e-9) const {
\n+
108 typename Base::const_iterator it1 = this->begin(), it2 = other.begin();
\n+
109 while (it1 != this->end()) {
\n+
110 if (it2 == other.end() || !traits<VALUE>::Equals(*it2, *it2, tol))
\n+
111 return false;
\n+
112 ++it1;
\n+
113 ++it2;
\n+
114 }
\n+
115 return true;
\n+
116 }
\n
\n-
116
\n-
118template <class T>
\n+
117
\n
\n-
119void deserialize(const std::string& serialized, T& output) {
\n-
120 deserializeFromString(serialized, output);
\n-
121}
\n-
\n-
123
\n-
129template <class T>
\n-
\n-
130void serializeToXMLStream(const T& input, std::ostream& out_archive_stream,
\n-
131 const std::string& name = "data") {
\n-
132 boost::archive::xml_oarchive out_archive(out_archive_stream);
\n-
133 out_archive << boost::serialization::make_nvp(name.c_str(), input);
\n-
134}
\n-
\n-
135
\n-
137template <class T>
\n-
\n-
138void deserializeFromXMLStream(std::istream& in_archive_stream, T& output,
\n-
139 const std::string& name = "data") {
\n-
140 boost::archive::xml_iarchive in_archive(in_archive_stream);
\n-
141 in_archive >> boost::serialization::make_nvp(name.c_str(), output);
\n-
142}
\n-
\n-
143
\n-
145template <class T>
\n-
\n-
146std::string serializeToXMLString(const T& input,
\n-
147 const std::string& name = "data") {
\n-
148 std::ostringstream out_archive_stream;
\n-
149 serializeToXMLStream(input, out_archive_stream, name);
\n-
150 return out_archive_stream.str();
\n-
151}
\n-
\n-
152
\n-
154template <class T>
\n-
\n-
155void deserializeFromXMLString(const std::string& serialized, T& output,
\n-
156 const std::string& name = "data") {
\n-
157 std::istringstream in_archive_stream(serialized);
\n-
158 deserializeFromXMLStream(in_archive_stream, output, name);
\n-
159}
\n-
\n-
160
\n-
162template <class T>
\n-
\n-
163bool serializeToXMLFile(const T& input, const std::string& filename,
\n-
164 const std::string& name = "data") {
\n-
165 std::ofstream out_archive_stream(filename.c_str());
\n-
166 if (!out_archive_stream.is_open()) return false;
\n-
167 serializeToXMLStream(input, out_archive_stream, name);
\n-
168 out_archive_stream.close();
\n-
169 return true;
\n-
170}
\n-
\n-
171
\n-
173template <class T>
\n-
\n-
174bool deserializeFromXMLFile(const std::string& filename, T& output,
\n-
175 const std::string& name = "data") {
\n-
176 std::ifstream in_archive_stream(filename.c_str());
\n-
177 if (!in_archive_stream.is_open()) return false;
\n-
178 deserializeFromXMLStream(in_archive_stream, output, name);
\n-
179 in_archive_stream.close();
\n-
180 return true;
\n-
181}
\n-
\n-
182
\n-
184template <class T>
\n-
\n-
185std::string serializeXML(const T& input,
\n-
186 const std::string& name = "data") {
\n-
187 return serializeToXMLString(input, name);
\n-
188}
\n-
\n-
189
\n-
191template <class T>
\n-
\n-
192void deserializeXML(const std::string& serialized, T& output,
\n-
193 const std::string& name = "data") {
\n-
194 deserializeFromXMLString(serialized, output, name);
\n-
195}
\n-
\n-
197
\n-
203template <class T>
\n-
\n-
204void serializeToBinaryStream(const T& input, std::ostream& out_archive_stream,
\n-
205 const std::string& name = "data") {
\n-
206 boost::archive::binary_oarchive out_archive(out_archive_stream);
\n-
207 out_archive << boost::serialization::make_nvp(name.c_str(), input);
\n-
208}
\n-
\n-
209
\n-
211template <class T>
\n-
\n-
212void deserializeFromBinaryStream(std::istream& in_archive_stream, T& output,
\n-
213 const std::string& name = "data") {
\n-
214 boost::archive::binary_iarchive in_archive(in_archive_stream);
\n-
215 in_archive >> boost::serialization::make_nvp(name.c_str(), output);
\n-
216}
\n-
\n-
217
\n-
219template <class T>
\n-
\n-
220std::string serializeToBinaryString(const T& input,
\n-
221 const std::string& name = "data") {
\n-
222 std::ostringstream out_archive_stream;
\n-
223 serializeToBinaryStream(input, out_archive_stream, name);
\n-
224 return out_archive_stream.str();
\n-
225}
\n-
\n-
226
\n-
228template <class T>
\n-
\n-
229void deserializeFromBinaryString(const std::string& serialized, T& output,
\n-
230 const std::string& name = "data") {
\n-
231 std::istringstream in_archive_stream(serialized);
\n-
232 deserializeFromBinaryStream(in_archive_stream, output, name);
\n-
233}
\n-
\n-
234
\n-
236template <class T>
\n-
\n-
237bool serializeToBinaryFile(const T& input, const std::string& filename,
\n-
238 const std::string& name = "data") {
\n-
239 std::ofstream out_archive_stream(filename.c_str());
\n-
240 if (!out_archive_stream.is_open()) return false;
\n-
241 serializeToBinaryStream(input, out_archive_stream, name);
\n-
242 out_archive_stream.close();
\n-
243 return true;
\n-
244}
\n-
\n-
245
\n-
247template <class T>
\n-
\n-
248bool deserializeFromBinaryFile(const std::string& filename, T& output,
\n-
249 const std::string& name = "data") {
\n-
250 std::ifstream in_archive_stream(filename.c_str());
\n-
251 if (!in_archive_stream.is_open()) return false;
\n-
252 deserializeFromBinaryStream(in_archive_stream, output, name);
\n-
253 in_archive_stream.close();
\n-
254 return true;
\n-
255}
\n-
\n-
256
\n-
258template <class T>
\n-
\n-
259std::string serializeBinary(const T& input,
\n-
260 const std::string& name = "data") {
\n-
261 return serializeToBinaryString(input, name);
\n-
262}
\n-
\n-
263
\n-
265template <class T>
\n-
\n-
266void deserializeBinary(const std::string& serialized, T& output,
\n-
267 const std::string& name = "data") {
\n-
268 deserializeFromBinaryString(serialized, output, name);
\n-
269}
\n-
\n-
271
\n-
272} // namespace gtsam
\n+
119 void merge(const FastSet& other) {
\n+
120 Base::insert(other.begin(), other.end());
\n+
121 }
\n+
\n+
122
\n+
123private:
\n+\n+
126 template<class ARCHIVE>
\n+
127 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
128 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
129 }
\n+
130};
\n+
\n+
131
\n+
132}
\n+
An easy way to control which allocator is used for Fast* collections.
\n+
Concept check for values that can be used in unit tests.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void serializeToStream(const T &input, std::ostream &out_archive_stream)
Definition serialization.h:64
\n-
bool deserializeFromXMLFile(const std::string &filename, T &output, const std::string &name="data")
deserializes from an XML file
Definition serialization.h:174
\n-
std::string serializeToXMLString(const T &input, const std::string &name="data")
serializes to a string in XML
Definition serialization.h:146
\n-
void deserializeFromString(const std::string &serialized, T &output)
deserializes from a string
Definition serialization.h:86
\n-
std::string serialize(const T &input)
serializes to a string
Definition serialization.h:113
\n-
void deserializeFromBinaryString(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in binary
Definition serialization.h:229
\n-
void deserializeBinary(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in binary
Definition serialization.h:266
\n-
void deserializeFromXMLString(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in XML
Definition serialization.h:155
\n-
std::string serializeToBinaryString(const T &input, const std::string &name="data")
serializes to a string in binary
Definition serialization.h:220
\n-
void deserializeXML(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in XML
Definition serialization.h:192
\n-
bool serializeToXMLFile(const T &input, const std::string &filename, const std::string &name="data")
serializes to an XML file
Definition serialization.h:163
\n-
void deserializeFromXMLStream(std::istream &in_archive_stream, T &output, const std::string &name="data")
deserializes from a stream in XML
Definition serialization.h:138
\n-
void deserializeFromBinaryStream(std::istream &in_archive_stream, T &output, const std::string &name="data")
deserializes from a stream in binary
Definition serialization.h:212
\n-
std::string serializeXML(const T &input, const std::string &name="data")
serializes to a string in XML
Definition serialization.h:185
\n-
std::string serializeToString(const T &input)
serializes to a string
Definition serialization.h:78
\n-
bool serializeToFile(const T &input, const std::string &filename)
serializes to a file
Definition serialization.h:93
\n-
void deserialize(const std::string &serialized, T &output)
deserializes from a string
Definition serialization.h:119
\n-
void serializeToBinaryStream(const T &input, std::ostream &out_archive_stream, const std::string &name="data")
Definition serialization.h:204
\n-
void deserializeFromStream(std::istream &in_archive_stream, T &output)
deserializes from a stream
Definition serialization.h:71
\n-
std::string serializeBinary(const T &input, const std::string &name="data")
serializes to a string in binary
Definition serialization.h:259
\n-
bool serializeToBinaryFile(const T &input, const std::string &filename, const std::string &name="data")
serializes to a binary file
Definition serialization.h:237
\n-
bool deserializeFromFile(const std::string &filename, T &output)
deserializes from a file
Definition serialization.h:103
\n-
void serializeToXMLStream(const T &input, std::ostream &out_archive_stream, const std::string &name="data")
Definition serialization.h:130
\n-
bool deserializeFromBinaryFile(const std::string &filename, T &output, const std::string &name="data")
deserializes from a binary file
Definition serialization.h:248
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
FastSet is a thin wrapper around std::set that uses the boost fast_pool_allocator instead of the defa...
Definition FastSet.h:50
\n+
void merge(const FastSet &other)
insert another set: handy for MATLAB access
Definition FastSet.h:119
\n+
void print(const std::string &str="") const
Print to implement Testable: pretty basic.
Definition FastSet.h:101
\n+
FastSet(const INPUTCONTAINER &container)
Constructor from a iterable container, passes through to base class.
Definition FastSet.h:65
\n+
FastSet(const FastSet< VALUE > &x)
Copy constructor from another FastSet.
Definition FastSet.h:70
\n+
bool exists(const VALUE &e) const
Handy 'exists' function.
Definition FastSet.h:96
\n+
bool equals(const FastSet< VALUE > &other, double tol=1e-9) const
Check for equality within tolerance to implement Testable.
Definition FastSet.h:107
\n+
friend class boost::serialization::access
Serialization function.
Definition FastSet.h:125
\n+
FastSet(const Base &x)
Copy constructor from the base set class.
Definition FastSet.h:75
\n+
FastSet()=default
Default constructor.
\n+
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,349 +1,176 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-serialization.h\n+FastSet.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include \n-23#include \n-24#include \n-25#include \n-26\n-27// includes for standard serialization types\n-28#include \n-29#include \n-30#include \n-31#include \n-32#include \n-33#include \n-34#include \n-35#include \n-36\n-37#include \n-38#include \n-39#include \n-40#include \n-41#include \n-42#include \n-43#include \n-44\n-45// Workaround a bug in GCC >= 7 and C++17\n-46// ref. https://gitlab.com/libeigen/eigen/-/issues/1676\n-47#ifdef __GNUC__\n-48#if __GNUC__ >= 7 && __cplusplus >= 201703L\n-49namespace boost { namespace serialization { struct U; } }\n-50namespace Eigen { namespace internal {\n-51template<> struct traits {enum {Flags=0};};\n-52} }\n-53#endif\n-54#endif\n+19#pragma once\n+20\n+21#include \n+22#if BOOST_VERSION >= 107400\n+23#include \n+24#endif\n+25#include \n+26#include \n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+29\n+30#include \n+31#include \n+32\n+33namespace boost {\n+34namespace serialization {\n+35class access;\n+36} /* namespace serialization */\n+37} /* namespace boost */\n+38\n+39namespace _\bg_\bt_\bs_\ba_\bm {\n+40\n+48template\n+_\b4_\b9class _\bF_\ba_\bs_\bt_\bS_\be_\bt: public std::set,\n+50 typename internal::FastDefaultAllocator::type> {\n+51\n+52 BOOST_CONCEPT_ASSERT ((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bV_\bA_\bL_\bU_\bE_\b> ));\n+53\n+54public:\n 55\n-56namespace _\bg_\bt_\bs_\ba_\bm {\n-57\n-63template \n-_\b6_\b4void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\be_\ba_\bm(const T& input, std::ostream& out_archive_stream) {\n-65 boost::archive::text_oarchive out_archive(out_archive_stream);\n-66 out_archive << input;\n-67}\n+56 typedef std::set,\n+57 typename internal::FastDefaultAllocator::type> Base;\n+58\n+59 using Base::Base; // Inherit the set constructors\n+60\n+_\b6_\b1 _\bF_\ba_\bs_\bt_\bS_\be_\bt() = default;\n+62\n+64 template\n+_\b6_\b5 explicit _\bF_\ba_\bs_\bt_\bS_\be_\bt(const INPUTCONTAINER& container) :\n+66 Base(container.begin(), container.end()) {\n+67 }\n 68\n-70template \n-_\b7_\b1void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\be_\ba_\bm(std::istream& in_archive_stream, T& output) {\n-72 boost::archive::text_iarchive in_archive(in_archive_stream);\n-73 in_archive >> output;\n-74}\n-75\n-77template \n-_\b7_\b8std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\bi_\bn_\bg(const T& input) {\n-79 std::ostringstream out_archive_stream;\n-80 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream);\n-81 return out_archive_stream.str();\n-82}\n-83\n-85template \n-_\b8_\b6void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\bi_\bn_\bg(const std::string& serialized, T& output) {\n-87 std::istringstream in_archive_stream(serialized);\n-88 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output);\n-89}\n-90\n-92template \n-_\b9_\b3bool _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bF_\bi_\bl_\be(const T& input, const std::string& filename) {\n-94 std::ofstream out_archive_stream(filename.c_str());\n-95 if (!out_archive_stream.is_open()) return false;\n-96 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream);\n-97 out_archive_stream.close();\n-98 return true;\n-99}\n-100\n-102template \n-_\b1_\b0_\b3bool _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bF_\bi_\bl_\be(const std::string& filename, T& output) {\n-104 std::ifstream in_archive_stream(filename.c_str());\n-105 if (!in_archive_stream.is_open()) return false;\n-106 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output);\n-107 in_archive_stream.close();\n-108 return true;\n-109}\n-110\n-112template \n-_\b1_\b1_\b3std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(const T& input) {\n-114 return _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\bi_\bn_\bg(input);\n-115}\n-116\n-118template \n-_\b1_\b1_\b9void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(const std::string& serialized, T& output) {\n-120 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\bi_\bn_\bg(serialized, output);\n-121}\n-123\n-129template \n-_\b1_\b3_\b0void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(const T& input, std::ostream& out_archive_stream,\n-131 const std::string& name = \"data\") {\n-132 boost::archive::xml_oarchive out_archive(out_archive_stream);\n-133 out_archive << boost::serialization::make_nvp(name.c_str(), input);\n-134}\n-135\n-137template \n-_\b1_\b3_\b8void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(std::istream& in_archive_stream, T& output,\n-139 const std::string& name = \"data\") {\n-140 boost::archive::xml_iarchive in_archive(in_archive_stream);\n-141 in_archive >> boost::serialization::make_nvp(name.c_str(), output);\n-142}\n-143\n-145template \n-_\b1_\b4_\b6std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg(const T& input,\n-147 const std::string& name = \"data\") {\n-148 std::ostringstream out_archive_stream;\n-149 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream, name);\n-150 return out_archive_stream.str();\n-151}\n-152\n-154template \n-_\b1_\b5_\b5void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg(const std::string& serialized, T& output,\n-156 const std::string& name = \"data\") {\n-157 std::istringstream in_archive_stream(serialized);\n-158 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output, name);\n-159}\n-160\n-162template \n-_\b1_\b6_\b3bool _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bF_\bi_\bl_\be(const T& input, const std::string& filename,\n-164 const std::string& name = \"data\") {\n-165 std::ofstream out_archive_stream(filename.c_str());\n-166 if (!out_archive_stream.is_open()) return false;\n-167 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream, name);\n-168 out_archive_stream.close();\n-169 return true;\n-170}\n-171\n-173template \n-_\b1_\b7_\b4bool _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bF_\bi_\bl_\be(const std::string& filename, T& output,\n-175 const std::string& name = \"data\") {\n-176 std::ifstream in_archive_stream(filename.c_str());\n-177 if (!in_archive_stream.is_open()) return false;\n-178 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output, name);\n-179 in_archive_stream.close();\n-180 return true;\n-181}\n-182\n-184template \n-_\b1_\b8_\b5std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL(const T& input,\n-186 const std::string& name = \"data\") {\n-187 return _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg(input, name);\n-188}\n-189\n-191template \n-_\b1_\b9_\b2void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL(const std::string& serialized, T& output,\n-193 const std::string& name = \"data\") {\n-194 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg(serialized, output, name);\n-195}\n-197\n-203template \n-_\b2_\b0_\b4void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(const T& input, std::ostream&\n-out_archive_stream,\n-205 const std::string& name = \"data\") {\n-206 boost::archive::binary_oarchive out_archive(out_archive_stream);\n-207 out_archive << boost::serialization::make_nvp(name.c_str(), input);\n-208}\n-209\n-211template \n-_\b2_\b1_\b2void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(std::istream& in_archive_stream, T& output,\n-213 const std::string& name = \"data\") {\n-214 boost::archive::binary_iarchive in_archive(in_archive_stream);\n-215 in_archive >> boost::serialization::make_nvp(name.c_str(), output);\n-216}\n-217\n-219template \n-_\b2_\b2_\b0std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg(const T& input,\n-221 const std::string& name = \"data\") {\n-222 std::ostringstream out_archive_stream;\n-223 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream, name);\n-224 return out_archive_stream.str();\n-225}\n-226\n-228template \n-_\b2_\b2_\b9void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg(const std::string& serialized, T& output,\n-230 const std::string& name = \"data\") {\n-231 std::istringstream in_archive_stream(serialized);\n-232 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output, name);\n-233}\n-234\n-236template \n-_\b2_\b3_\b7bool _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be(const T& input, const std::string& filename,\n-238 const std::string& name = \"data\") {\n-239 std::ofstream out_archive_stream(filename.c_str());\n-240 if (!out_archive_stream.is_open()) return false;\n-241 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(input, out_archive_stream, name);\n-242 out_archive_stream.close();\n-243 return true;\n-244}\n-245\n-247template \n-_\b2_\b4_\b8bool _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be(const std::string& filename, T& output,\n-249 const std::string& name = \"data\") {\n-250 std::ifstream in_archive_stream(filename.c_str());\n-251 if (!in_archive_stream.is_open()) return false;\n-252 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm(in_archive_stream, output, name);\n-253 in_archive_stream.close();\n-254 return true;\n-255}\n-256\n-258template \n-_\b2_\b5_\b9std::string _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by(const T& input,\n-260 const std::string& name = \"data\") {\n-261 return _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg(input, name);\n-262}\n-263\n-265template \n-_\b2_\b6_\b6void _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by(const std::string& serialized, T& output,\n-267 const std::string& name = \"data\") {\n-268 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg(serialized, output, name);\n-269}\n-271\n-272} // namespace gtsam\n+_\b7_\b0 _\bF_\ba_\bs_\bt_\bS_\be_\bt(const _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\bV_\bA_\bL_\bU_\bE_\b>& x) :\n+71 Base(x) {\n+72 }\n+73\n+_\b7_\b5 _\bF_\ba_\bs_\bt_\bS_\be_\bt(const Base& x) :\n+76 Base(x) {\n+77 }\n+78\n+79#ifdef GTSAM_ALLOCATOR_BOOSTPOOL\n+81 _\bF_\ba_\bs_\bt_\bS_\be_\bt(const std::set& x) {\n+82 // This if statement works around a bug in boost pool allocator and/or\n+83 // STL vector where if the size is zero, the pool allocator will allocate\n+84 // huge amounts of memory.\n+85 if(x.size() > 0)\n+86 Base::insert(x.begin(), x.end());\n+87 }\n+88#endif\n+89\n+_\b9_\b1 operator std::set() const {\n+92 return std::set(this->begin(), this->end());\n+93 }\n+94\n+_\b9_\b6 bool _\be_\bx_\bi_\bs_\bt_\bs(const VALUE& e) const {\n+97 return this->find(e) != this->end();\n+98 }\n+99\n+_\b1_\b0_\b1 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const {\n+102 for (typename Base::const_iterator it = this->begin(); it != this->end();\n+++it)\n+103 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(*it, str);\n+104 }\n+105\n+_\b1_\b0_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\bV_\bA_\bL_\bU_\bE_\b>& other, double tol = 1e-9) const {\n+108 typename Base::const_iterator it1 = this->begin(), it2 = other.begin();\n+109 while (it1 != this->end()) {\n+110 if (it2 == other.end() || !_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(*it2, *it2, tol))\n+111 return false;\n+112 ++it1;\n+113 ++it2;\n+114 }\n+115 return true;\n+116 }\n+117\n+_\b1_\b1_\b9 void _\bm_\be_\br_\bg_\be(const _\bF_\ba_\bs_\bt_\bS_\be_\bt& other) {\n+120 Base::insert(other.begin(), other.end());\n+121 }\n+122\n+123private:\n+_\b1_\b2_\b5 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+126 template\n+127 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+128 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n+129 }\n+130};\n+131\n+132}\n+_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n+An easy way to control which allocator is used for Fast* collections.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\be_\ba_\bm\n-void serializeToStream(const T &input, std::ostream &out_archive_stream)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bF_\bi_\bl_\be\n-bool deserializeFromXMLFile(const std::string &filename, T &output, const std::\n-string &name=\"data\")\n-deserializes from an XML file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg\n-std::string serializeToXMLString(const T &input, const std::string\n-&name=\"data\")\n-serializes to a string in XML\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:146\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\bi_\bn_\bg\n-void deserializeFromString(const std::string &serialized, T &output)\n-deserializes from a string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n-std::string serialize(const T &input)\n-serializes to a string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg\n-void deserializeFromBinaryString(const std::string &serialized, T &output,\n-const std::string &name=\"data\")\n-deserializes from a string in binary\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:229\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by\n-void deserializeBinary(const std::string &serialized, T &output, const std::\n-string &name=\"data\")\n-deserializes from a string in binary\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:266\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\bi_\bn_\bg\n-void deserializeFromXMLString(const std::string &serialized, T &output, const\n-std::string &name=\"data\")\n-deserializes from a string in XML\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\bi_\bn_\bg\n-std::string serializeToBinaryString(const T &input, const std::string\n-&name=\"data\")\n-serializes to a string in binary\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:220\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL\n-void deserializeXML(const std::string &serialized, T &output, const std::string\n-&name=\"data\")\n-deserializes from a string in XML\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bF_\bi_\bl_\be\n-bool serializeToXMLFile(const T &input, const std::string &filename, const\n-std::string &name=\"data\")\n-serializes to an XML file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm\n-void deserializeFromXMLStream(std::istream &in_archive_stream, T &output, const\n-std::string &name=\"data\")\n-deserializes from a stream in XML\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm\n-void deserializeFromBinaryStream(std::istream &in_archive_stream, T &output,\n-const std::string &name=\"data\")\n-deserializes from a stream in binary\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL\n-std::string serializeXML(const T &input, const std::string &name=\"data\")\n-serializes to a string in XML\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bS_\bt_\br_\bi_\bn_\bg\n-std::string serializeToString(const T &input)\n-serializes to a string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bF_\bi_\bl_\be\n-bool serializeToFile(const T &input, const std::string &filename)\n-serializes to a file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n-void deserialize(const std::string &serialized, T &output)\n-deserializes from a string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:119\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bS_\bt_\br_\be_\ba_\bm\n-void serializeToBinaryStream(const T &input, std::ostream &out_archive_stream,\n-const std::string &name=\"data\")\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:204\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bS_\bt_\br_\be_\ba_\bm\n-void deserializeFromStream(std::istream &in_archive_stream, T &output)\n-deserializes from a stream\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by\n-std::string serializeBinary(const T &input, const std::string &name=\"data\")\n-serializes to a string in binary\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:259\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be\n-bool serializeToBinaryFile(const T &input, const std::string &filename, const\n-std::string &name=\"data\")\n-serializes to a binary file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:237\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bF_\bi_\bl_\be\n-bool deserializeFromFile(const std::string &filename, T &output)\n-deserializes from a file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bS_\bt_\br_\be_\ba_\bm\n-void serializeToXMLStream(const T &input, std::ostream &out_archive_stream,\n-const std::string &name=\"data\")\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be\n-bool deserializeFromBinaryFile(const std::string &filename, T &output, const\n-std::string &name=\"data\")\n-deserializes from a binary file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:248\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n+FastSet is a thin wrapper around std::set that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bm_\be_\br_\bg_\be\n+void merge(const FastSet &other)\n+insert another set: handy for MATLAB access\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:119\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &str=\"\") const\n+Print to implement Testable: pretty basic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n+FastSet(const INPUTCONTAINER &container)\n+Constructor from a iterable container, passes through to base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n+FastSet(const FastSet< VALUE > &x)\n+Copy constructor from another FastSet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n+bool exists(const VALUE &e) const\n+Handy 'exists' function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const FastSet< VALUE > &other, double tol=1e-9) const\n+Check for equality within tolerance to implement Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:125\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n+FastSet(const Base &x)\n+Copy constructor from the base set class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n+FastSet()=default\n+Default constructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A testable concept check that should be placed in applicable unit tests and in\n+generic algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00095.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00095.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/WeightedSampler.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/OptionalJacobian.h File Reference\n \n \n \n \n \n \n \n@@ -96,42 +96,53 @@\n \n \n \n
\n \n-
WeightedSampler.h File Reference
\n+
OptionalJacobian.h File Reference
\n
\n
\n \n-

Fast sampling without replacement. \n+

Special class for optional Jacobian arguments. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::WeightedSampler< Engine >
class  gtsam::OptionalJacobian< Rows, Cols >
 OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size or dynamic Eigen matrix. More...
 
class  gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >
 
struct  gtsam::MakeJacobian< T, A >
 : meta-function to generate Jacobian More...
 
struct  gtsam::MakeOptionalJacobian< T, A >
 : meta-function to generate JacobianTA optional reference Used mainly by Expressions More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Fast sampling without replacement.

\n-
Author
Frank Dellaert
\n-
Date
May 2019
\n+

Special class for optional Jacobian arguments.

\n+
Author
Frank Dellaert
\n+
\n+Natesh Srinivasan
\n+
Date
Nov 28, 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,38 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-WeightedSampler.h File Reference\n-Fast sampling without replacement. _\bM_\bo_\br_\be_\b._\b._\b.\n+OptionalJacobian.h File Reference\n+Special class for optional Jacobian arguments. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br_\b<_\b _\bE_\bn_\bg_\bi_\bn_\be_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bR_\bo_\bw_\bs_\b,_\b _\bC_\bo_\bl_\bs_\b _\b>\n+\u00a0 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn is an Eigen::Ref like class that can take be\n+ constructed using either a fixed size or dynamic Eigen matrix. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bT_\b,_\b _\bA_\b _\b>\n+\u00a0 : meta-function to generate Jacobian _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bT_\b,_\b _\bA_\b _\b>\n+\u00a0 : meta-function to generate JacobianTA optional reference Used mainly\n+ by Expressions _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Fast sampling without replacement.\n+Special class for optional Jacobian arguments.\n Author\n Frank Dellaert\n+ Natesh Srinivasan\n Date\n- May 2019\n+ Nov 28, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh\n+ * _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00095.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00095.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a00095 = [\n- [\"gtsam::WeightedSampler< Engine >\", \"a02664.html\", \"a02664\"]\n+ [\"gtsam::OptionalJacobian< Rows, Cols >\", \"a02448.html\", \"a02448\"],\n+ [\"gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >\", \"a02452.html\", \"a02452\"],\n+ [\"gtsam::MakeJacobian< T, A >\", \"a02456.html\", null],\n+ [\"gtsam::MakeOptionalJacobian< T, A >\", \"a02460.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00095_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00095_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/WeightedSampler.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/OptionalJacobian.h Source File\n \n \n \n \n \n \n \n@@ -98,152 +98,292 @@\n
No Matches
\n \n \n \n \n \n
\n-
WeightedSampler.h
\n+
OptionalJacobian.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <cmath>
\n-
22#include <queue>
\n-
23#include <random>
\n-
24#include <stdexcept>
\n-
25#include <utility>
\n-
26#include <vector>
\n-
27
\n-
28namespace gtsam {
\n-
29/*
\n-
30 * Fast sampling without replacement.
\n-
31 * Example usage:
\n-
32 * std::mt19937 rng(42);
\n-
33 * WeightedSampler<std::mt19937> sampler(&rng);
\n-
34 * auto samples = sampler.sampleWithoutReplacement(5, weights);
\n-
35 */
\n-
36template <class Engine = std::mt19937>
\n-
\n-\n-
38 private:
\n-
39 Engine* engine_; // random number generation engine
\n-
40
\n-
41 public:
\n-
46 explicit WeightedSampler(Engine* engine) : engine_(engine) {}
\n-
47
\n-
48 std::vector<size_t> sampleWithoutReplacement(
\n-
49 size_t numSamples, const std::vector<double>& weights) {
\n-
50 // Implementation adapted from code accompanying paper at
\n-
51 // https://www.ethz.ch/content/dam/ethz/special-interest/baug/ivt/ivt-dam/vpl/reports/1101-1200/ab1141.pdf
\n-
52 const size_t n = weights.size();
\n-
53 if (n < numSamples) {
\n-
54 throw std::runtime_error(
\n-
55 "numSamples must be smaller than weights.size()");
\n-
56 }
\n-
57
\n-
58 // Return empty array if numSamples==0
\n-
59 std::vector<size_t> result(numSamples);
\n-
60 if (numSamples == 0) return result;
\n-
61
\n-
62 // Step 1: The first m items of V are inserted into reservoir
\n-
63 // Step 2: For each item v_i \u2208 reservoir: Calculate a key k_i = u_i^(1/w),
\n-
64 // where u_i = random(0, 1)
\n-
65 // (Modification: Calculate and store -log k_i = e_i / w where e_i = exp(1),
\n-
66 // reservoir is a priority queue that pops the *maximum* elements)
\n-
67 std::priority_queue<std::pair<double, size_t> > reservoir;
\n+
20#pragma once
\n+
21#include <gtsam/config.h> // Configuration from CMake
\n+
22#include <Eigen/Dense>
\n+
23#include <stdexcept>
\n+
24#include <string>
\n+
25
\n+
26#ifndef OPTIONALJACOBIAN_NOBOOST
\n+
27#include <boost/optional.hpp>
\n+
28#endif
\n+
29
\n+
30namespace gtsam {
\n+
31
\n+
40template<int Rows, int Cols>
\n+
\n+\n+
42
\n+
43public:
\n+
44
\n+
47 typedef Eigen::Matrix<double, Rows, Cols> Jacobian;
\n+
48
\n+
49private:
\n+
50
\n+
51 Eigen::Map<Jacobian> map_;
\n+
52
\n+
53 // Trick from http://eigen.tuxfamily.org/dox/group__TutorialMapClass.html
\n+
54 // uses "placement new" to make map_ usurp the memory of the fixed size matrix
\n+
55 void usurp(double* data) {
\n+
56 new (&map_) Eigen::Map<Jacobian>(data);
\n+
57 }
\n+
58
\n+
59 // Private and very dangerous constructor straight from memory
\n+
60 OptionalJacobian(double* data) : map_(nullptr) {
\n+
61 if (data) usurp(data);
\n+
62 }
\n+
63
\n+
64 template<int M, int N>
\n+
65 friend class OptionalJacobian;
\n+
66
\n+
67public:
\n
68
\n-
69 static const double kexp1 = std::exp(1.0);
\n-
70 for (auto it = weights.begin(); it != weights.begin() + numSamples; ++it) {
\n-
71 const double k_i = kexp1 / *it;
\n-
72 reservoir.push(std::make_pair(k_i, it - weights.begin() + 1));
\n-
73 }
\n-
74
\n-
75 // Step 4: Repeat Steps 5\u201310 until the population is exhausted
\n-
76 {
\n-
77 // Step 3: The threshold T_w is the minimum key of reservoir
\n-
78 // (Modification: This is now the logarithm)
\n-
79 // Step 10: The new threshold T w is the new minimum key of reservoir
\n-
80 const std::pair<double, size_t>& T_w = reservoir.top();
\n-
81
\n-
82 // Incrementing it is part of Step 7
\n-
83 for (auto it = weights.begin() + numSamples; it != weights.end(); ++it) {
\n-
84 // Step 5: Let r = random(0, 1) and X_w = log(r) / log(T_w)
\n-
85 // (Modification: Use e = -exp(1) instead of log(r))
\n-
86 const double X_w = kexp1 / T_w.first;
\n-
87
\n-
88 // Step 6: From the current item v_c skip items until item v_i, such
\n-
89 // that:
\n-
90 double w = 0.0;
\n-
91
\n-
92 // Step 7: w_c + w_{c+1} + \u00b7\u00b7\u00b7 + w_{i\u22121} < X_w <= w_c + w_{c+1} + \u00b7\u00b7\u00b7 +
\n-
93 // w_{i\u22121} + w_i
\n-
94 for (; it != weights.end(); ++it) {
\n-
95 w += *it;
\n-
96 if (X_w <= w) break;
\n-
97 }
\n-
98
\n-
99 // Step 7: No such item, terminate
\n-
100 if (it == weights.end()) break;
\n-
101
\n-
102 // Step 9: Let t_w = T_w^{w_i}, r_2 = random(t_w, 1) and v_i\u2019s key: k_i
\n-
103 // = (r_2)^{1/w_i} (Mod: Let t_w = log(T_w) * {w_i}, e_2 =
\n-
104 // log(random(e^{t_w}, 1)) and v_i\u2019s key: k_i = -e_2 / w_i)
\n-
105 const double t_w = -T_w.first * *it;
\n-
106 std::uniform_real_distribution<double> randomAngle(std::exp(t_w), 1.0);
\n-
107 const double e_2 = std::log(randomAngle(*engine_));
\n-
108 const double k_i = -e_2 / *it;
\n-
109
\n-
110 // Step 8: The item in reservoir with the minimum key is replaced by
\n-
111 // item v_i
\n-
112 reservoir.pop();
\n-
113 reservoir.push(std::make_pair(k_i, it - weights.begin() + 1));
\n-
114 }
\n-
115 }
\n-
116
\n-
117 for (auto iret = result.end(); iret != result.begin();) {
\n-
118 --iret;
\n-
119
\n-
120 if (reservoir.empty()) {
\n-
121 throw std::runtime_error(
\n-
122 "Reservoir empty before all elements have been filled");
\n-
123 }
\n-
124
\n-
125 *iret = reservoir.top().second - 1;
\n-
126 reservoir.pop();
\n-
127 }
\n-
128
\n-
129 if (!reservoir.empty()) {
\n-
130 throw std::runtime_error(
\n-
131 "Reservoir not empty after all elements have been filled");
\n+
\n+\n+
71 map_(nullptr) {
\n+
72 }
\n+
\n+
73
\n+
\n+\n+
76 map_(nullptr) {
\n+
77 usurp(fixed.data());
\n+
78 }
\n+
\n+
79
\n+
\n+\n+
82 map_(nullptr) {
\n+
83 if (fixedPtr)
\n+
84 usurp(fixedPtr->data());
\n+
85 }
\n+
\n+
86
\n+
\n+
88 OptionalJacobian(Eigen::MatrixXd& dynamic) :
\n+
89 map_(nullptr) {
\n+
90 dynamic.resize(Rows, Cols); // no malloc if correct size
\n+
91 usurp(dynamic.data());
\n+
92 }
\n+
\n+
93
\n+
\n+
95 OptionalJacobian(Eigen::MatrixXd* dynamic) :
\n+
96 map_(nullptr) {
\n+
97 dynamic->resize(Rows, Cols); // no malloc if correct size
\n+
98 usurp(dynamic->data());
\n+
99 }
\n+
\n+
100
\n+
105 template<class MATRIX>
\n+
\n+
106 OptionalJacobian(Eigen::Ref<MATRIX> dynamic_ref) :
\n+
107 map_(nullptr) {
\n+
108 if (dynamic_ref.rows() == Rows && dynamic_ref.cols() == Cols && !dynamic_ref.IsRowMajor) {
\n+
109 usurp(dynamic_ref.data());
\n+
110 } else {
\n+
111 throw std::invalid_argument(
\n+
112 std::string("OptionalJacobian called with wrong dimensions or "
\n+
113 "storage order.\\n"
\n+
114 "Expected: ") +
\n+
115 "(" + std::to_string(Rows) + ", " + std::to_string(Cols) + ")");
\n+
116 }
\n+
117 }
\n+
\n+
118
\n+
119#ifndef OPTIONALJACOBIAN_NOBOOST
\n+
120
\n+
\n+
122 OptionalJacobian(boost::none_t /*none*/) :
\n+
123 map_(nullptr) {
\n+
124 }
\n+
\n+
125
\n+
\n+
127 OptionalJacobian(const boost::optional<Eigen::MatrixXd&> optional) :
\n+
128 map_(nullptr) {
\n+
129 if (optional) {
\n+
130 optional->resize(Rows, Cols);
\n+
131 usurp(optional->data());
\n
132 }
\n-
133
\n-
134 return result;
\n-
135 }
\n-
136}; // namespace gtsam
\n+
133 }
\n+
\n+
134
\n+
135#endif
\n+
136
\n+
139 // template <typename Derived, bool InnerPanel>
\n+
140 // OptionalJacobian(Eigen::Block<Derived,Rows,Cols,InnerPanel> block) : map_(nullptr) { ?? }
\n+
141
\n+
\n+
143 operator bool() const {
\n+
144 return map_.data() != nullptr;
\n+
145 }
\n+
\n+
146
\n+
\n+
148 Eigen::Map<Jacobian>& operator*() {
\n+
149 return map_;
\n+
150 }
\n+
\n+
151
\n+
\n+
153 Eigen::Map<Jacobian>* operator->() {
\n+
154 return &map_;
\n+
155 }
\n+
\n+
156
\n+
159 // template <int M, int N>
\n+
160 // OptionalJacobian<M, N> block(int startRow, int startCol) {
\n+
161 // if (*this)
\n+
162 // OptionalJacobian<M, N>(map_.block<M, N>(startRow, startCol));
\n+
163 // else
\n+
164 // return OptionalJacobian<M, N>();
\n+
165 // }
\n+
166
\n+
170 template <int N>
\n+
\n+\n+
172 if (*this)
\n+
173 return OptionalJacobian<Rows, N>(&map_(0,startCol));
\n+
174 else
\n+\n+
176 }
\n+
\n+
177
\n+
182};
\n+
\n+
183
\n+
184// The pure dynamic specialization of this is needed to support
\n+
185// variable-sized types. Note that this is designed to work like the
\n+
186// boost optional scheme from GTSAM 3.
\n+
187template<>
\n+
\n+
188class OptionalJacobian<Eigen::Dynamic, Eigen::Dynamic> {
\n+
189
\n+
190public:
\n+
191
\n+
193 typedef Eigen::MatrixXd Jacobian;
\n+
194
\n+
195private:
\n+
196
\n+
197 Jacobian* pointer_;
\n+
198
\n+
199public:
\n+
200
\n+
\n+\n+
203 pointer_(nullptr) {
\n+
204 }
\n+
\n+
205
\n+
207 OptionalJacobian(Jacobian* pointer) : pointer_(pointer) {}
\n+
208
\n+
210 OptionalJacobian(Jacobian& dynamic) : pointer_(&dynamic) {}
\n+
211
\n+
212#ifndef OPTIONALJACOBIAN_NOBOOST
\n+
213
\n+
\n+
215 OptionalJacobian(boost::none_t /*none*/) :
\n+
216 pointer_(nullptr) {
\n+
217 }
\n+
\n+
218
\n+
\n+
220 OptionalJacobian(const boost::optional<Eigen::MatrixXd&> optional) :
\n+
221 pointer_(nullptr) {
\n+
222 if (optional) pointer_ = &(*optional);
\n+
223 }
\n+
\n+
224
\n+
225#endif
\n+
226
\n+
\n+
228 operator bool() const {
\n+
229 return pointer_!=nullptr;
\n+
230 }
\n+
\n+
231
\n+
\n+\n+
234 return *pointer_;
\n+
235 }
\n+
\n+
236
\n+
238 Jacobian* operator->(){ return pointer_; }
\n+
239};
\n+
\n+
240
\n+
241// forward declare
\n+
242template <typename T> struct traits;
\n+
243
\n+
249template <class T, class A>
\n+
\n+\n+
251 typedef Eigen::Matrix<double, traits<T>::dimension, traits<A>::dimension> type;
\n+
252};
\n+
\n+
253
\n+
260template<class T, class A>
\n+
\n+\n+\n+\n+
264};
\n
\n-
137} // namespace gtsam
\n+
265
\n+
266} // namespace gtsam
\n+
267
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Definition WeightedSampler.h:37
\n-
WeightedSampler(Engine *engine)
Construct from random number generation engine We only store a pointer to it.
Definition WeightedSampler.h:46
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)
Constructor compatible with old-style derivatives.
Definition OptionalJacobian.h:127
\n+
OptionalJacobian(boost::none_t)
Constructor with boost::none just makes empty.
Definition OptionalJacobian.h:122
\n+
OptionalJacobian(Eigen::MatrixXd &dynamic)
Constructor that will resize a dynamic matrix (unless already correct)
Definition OptionalJacobian.h:88
\n+
Eigen::Map< Jacobian > & operator*()
De-reference, like boost optional.
Definition OptionalJacobian.h:148
\n+
OptionalJacobian()
Default constructor acts like boost::none.
Definition OptionalJacobian.h:70
\n+
OptionalJacobian(Jacobian &fixed)
Constructor that will usurp data of a fixed-size matrix.
Definition OptionalJacobian.h:75
\n+
OptionalJacobian(Eigen::Ref< MATRIX > dynamic_ref)
Constructor from an Eigen::Ref value.
Definition OptionalJacobian.h:106
\n+
OptionalJacobian(Eigen::MatrixXd *dynamic)
Constructor that will resize a dynamic matrix (unless already correct)
Definition OptionalJacobian.h:95
\n+
Eigen::Map< Jacobian > * operator->()
operator->()
Definition OptionalJacobian.h:153
\n+
Eigen::Matrix< double, Rows, Cols > Jacobian
Jacobian size type TODO(frank): how to enforce RowMajor? Or better, make it work with any storage ord...
Definition OptionalJacobian.h:47
\n+
OptionalJacobian(Jacobian *fixedPtr)
Constructor that will usurp data of a fixed-size matrix, pointer version.
Definition OptionalJacobian.h:81
\n+
OptionalJacobian< Rows, N > cols(int startCol)
Access M*N sub-block if we are allocated, otherwise none TODO(frank): this could work as is below if ...
Definition OptionalJacobian.h:171
\n+
OptionalJacobian()
View on constructor argument, if given.
Definition OptionalJacobian.h:202
\n+
OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)
Constructor compatible with old-style derivatives.
Definition OptionalJacobian.h:220
\n+
Eigen::MatrixXd Jacobian
Jacobian size type.
Definition OptionalJacobian.h:193
\n+
Jacobian & operator*()
De-reference, like boost optional.
Definition OptionalJacobian.h:233
\n+
OptionalJacobian(boost::none_t)
Constructor with boost::none just makes empty.
Definition OptionalJacobian.h:215
\n+
OptionalJacobian(Jacobian *pointer)
Construct from pointer to dynamic matrix.
Definition OptionalJacobian.h:207
\n+
OptionalJacobian(Jacobian &dynamic)
Construct from refrence to dynamic matrix.
Definition OptionalJacobian.h:210
\n+
Jacobian * operator->()
TODO: operator->()
Definition OptionalJacobian.h:238
\n+
: meta-function to generate Jacobian
Definition OptionalJacobian.h:250
\n+
: meta-function to generate JacobianTA optional reference Used mainly by Expressions
Definition OptionalJacobian.h:261
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,150 +1,321 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-WeightedSampler.h\n+OptionalJacobian.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include \n-22#include \n-23#include \n-24#include \n-25#include \n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29/*\n-30 * Fast sampling without replacement.\n-31 * Example usage:\n-32 * std::mt19937 rng(42);\n-33 * WeightedSampler sampler(&rng);\n-34 * auto samples = sampler.sampleWithoutReplacement(5, weights);\n-35 */\n-36template \n-_\b3_\b7class _\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br {\n-38 private:\n-39 Engine* engine_; // random number generation engine\n-40\n-41 public:\n-_\b4_\b6 explicit _\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br(Engine* engine) : engine_(engine) {}\n-47\n-48 std::vector sampleWithoutReplacement(\n-49 size_t numSamples, const std::vector& weights) {\n-50 // Implementation adapted from code accompanying paper at\n-51 // https://www.ethz.ch/content/dam/ethz/special-interest/baug/ivt/ivt-dam/\n-vpl/reports/1101-1200/ab1141.pdf\n-52 const size_t n = weights.size();\n-53 if (n < numSamples) {\n-54 throw std::runtime_error(\n-55 \"numSamples must be smaller than weights.size()\");\n-56 }\n-57\n-58 // Return empty array if numSamples==0\n-59 std::vector result(numSamples);\n-60 if (numSamples == 0) return result;\n-61\n-62 // Step 1: The first m items of V are inserted into reservoir\n-63 // Step 2: For each item v_i \u00e2\u0088\u0088 reservoir: Calculate a key k_i = u_i^(1/w),\n-64 // where u_i = random(0, 1)\n-65 // (Modification: Calculate and store -log k_i = e_i / w where e_i = exp(1),\n-66 // reservoir is a priority queue that pops the *maximum* elements)\n-67 std::priority_queue > reservoir;\n+20#pragma once\n+21#include // Configuration from CMake\n+22#include \n+23#include \n+24#include \n+25\n+26#ifndef OPTIONALJACOBIAN_NOBOOST\n+27#include \n+28#endif\n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+40template\n+_\b4_\b1class _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn {\n+42\n+43public:\n+44\n+_\b4_\b7 typedef Eigen::Matrix _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n+48\n+49private:\n+50\n+51 Eigen::Map map_;\n+52\n+53 // Trick from http://eigen.tuxfamily.org/dox/group__TutorialMapClass.html\n+54 // uses \"placement new\" to make map_ usurp the memory of the fixed size\n+matrix\n+55 void usurp(double* data) {\n+56 new (&map_) Eigen::Map(data);\n+57 }\n+58\n+59 // Private and very dangerous constructor straight from memory\n+60 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(double* data) : map_(nullptr) {\n+61 if (data) usurp(data);\n+62 }\n+63\n+64 template\n+65 friend class OptionalJacobian;\n+66\n+67public:\n 68\n-69 static const double kexp1 = std::exp(1.0);\n-70 for (auto it = weights.begin(); it != weights.begin() + numSamples; ++it) {\n-71 const double k_i = kexp1 / *it;\n-72 reservoir.push(std::make_pair(k_i, it - weights.begin() + 1));\n-73 }\n-74\n-75 // Step 4: Repeat Steps 5\u00e2\u0080\u009310 until the population is exhausted\n-76 {\n-77 // Step 3: The threshold T_w is the minimum key of reservoir\n-78 // (Modification: This is now the logarithm)\n-79 // Step 10: The new threshold T w is the new minimum key of reservoir\n-80 const std::pair& T_w = reservoir.top();\n-81\n-82 // Incrementing it is part of Step 7\n-83 for (auto it = weights.begin() + numSamples; it != weights.end(); ++it) {\n-84 // Step 5: Let r = random(0, 1) and X_w = log(r) / log(T_w)\n-85 // (Modification: Use e = -exp(1) instead of log(r))\n-86 const double X_w = kexp1 / T_w.first;\n-87\n-88 // Step 6: From the current item v_c skip items until item v_i, such\n-89 // that:\n-90 double w = 0.0;\n-91\n-92 // Step 7: w_c + w_{c+1} + \u00c2\u00b7\u00c2\u00b7\u00c2\u00b7 + w_{i\u00e2\u0088\u00921} < X_w <= w_c + w_{c+1} +\n-\u00c2\u00b7\u00c2\u00b7\u00c2\u00b7 +\n-93 // w_{i\u00e2\u0088\u00921} + w_i\n-94 for (; it != weights.end(); ++it) {\n-95 w += *it;\n-96 if (X_w <= w) break;\n-97 }\n-98\n-99 // Step 7: No such item, terminate\n-100 if (it == weights.end()) break;\n-101\n-102 // Step 9: Let t_w = T_w^{w_i}, r_2 = random(t_w, 1) and v_i\u00e2\u0080\u0099s key: k_i\n-103 // = (r_2)^{1/w_i} (Mod: Let t_w = log(T_w) * {w_i}, e_2 =\n-104 // log(random(e^{t_w}, 1)) and v_i\u00e2\u0080\u0099s key: k_i = -e_2 / w_i)\n-105 const double t_w = -T_w.first * *it;\n-106 std::uniform_real_distribution randomAngle(std::exp(t_w), 1.0);\n-107 const double e_2 = std::log(randomAngle(*engine_));\n-108 const double k_i = -e_2 / *it;\n-109\n-110 // Step 8: The item in reservoir with the minimum key is replaced by\n-111 // item v_i\n-112 reservoir.pop();\n-113 reservoir.push(std::make_pair(k_i, it - weights.begin() + 1));\n-114 }\n-115 }\n-116\n-117 for (auto iret = result.end(); iret != result.begin();) {\n-118 --iret;\n-119\n-120 if (reservoir.empty()) {\n-121 throw std::runtime_error(\n-122 \"Reservoir empty before all elements have been filled\");\n-123 }\n-124\n-125 *iret = reservoir.top().second - 1;\n-126 reservoir.pop();\n-127 }\n-128\n-129 if (!reservoir.empty()) {\n-130 throw std::runtime_error(\n-131 \"Reservoir not empty after all elements have been filled\");\n+_\b7_\b0 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() :\n+71 map_(nullptr) {\n+72 }\n+73\n+_\b7_\b5 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn& fixed) :\n+76 map_(nullptr) {\n+77 usurp(fixed.data());\n+78 }\n+79\n+_\b8_\b1 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn* fixedPtr) :\n+82 map_(nullptr) {\n+83 if (fixedPtr)\n+84 usurp(fixedPtr->data());\n+85 }\n+86\n+_\b8_\b8 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(Eigen::MatrixXd& dynamic) :\n+89 map_(nullptr) {\n+90 dynamic.resize(Rows, Cols); // no malloc if correct size\n+91 usurp(dynamic.data());\n+92 }\n+93\n+_\b9_\b5 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(Eigen::MatrixXd* dynamic) :\n+96 map_(nullptr) {\n+97 dynamic->resize(Rows, Cols); // no malloc if correct size\n+98 usurp(dynamic->data());\n+99 }\n+100\n+105 template\n+_\b1_\b0_\b6 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(Eigen::Ref dynamic_ref) :\n+107 map_(nullptr) {\n+108 if (dynamic_ref.rows() == Rows && dynamic_ref.cols() == Cols &&\n+!dynamic_ref.IsRowMajor) {\n+109 usurp(dynamic_ref.data());\n+110 } else {\n+111 throw std::invalid_argument(\n+112 std::string(\"OptionalJacobian called with wrong dimensions or \"\n+113 \"storage order.\\n\"\n+114 \"Expected: \") +\n+115 \"(\" + std::to_string(Rows) + \", \" + std::to_string(Cols) + \")\");\n+116 }\n+117 }\n+118\n+119#ifndef OPTIONALJACOBIAN_NOBOOST\n+120\n+_\b1_\b2_\b2 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(boost::none_t /*none*/) :\n+123 map_(nullptr) {\n+124 }\n+125\n+_\b1_\b2_\b7 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(const boost::optional optional) :\n+128 map_(nullptr) {\n+129 if (optional) {\n+130 optional->resize(Rows, Cols);\n+131 usurp(optional->data());\n 132 }\n-133\n-134 return result;\n-135 }\n-136}; // namespace gtsam\n-137} // namespace gtsam\n+133 }\n+134\n+135#endif\n+136\n+139 // template \n+140 // OptionalJacobian(Eigen::Block block) :\n+map_(nullptr) { ?? }\n+141\n+_\b1_\b4_\b3 operator bool() const {\n+144 return map_.data() != nullptr;\n+145 }\n+146\n+_\b1_\b4_\b8 Eigen::Map& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() {\n+149 return map_;\n+150 }\n+151\n+_\b1_\b5_\b3 Eigen::Map* _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>() {\n+154 return &map_;\n+155 }\n+156\n+159 // template \n+160 // OptionalJacobian block(int startRow, int startCol) {\n+161 // if (*this)\n+162 // OptionalJacobian(map_.block(startRow, startCol));\n+163 // else\n+164 // return OptionalJacobian();\n+165 // }\n+166\n+170 template \n+_\b1_\b7_\b1 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bR_\bo_\bw_\bs_\b,_\b _\bN_\b> _\bc_\bo_\bl_\bs(int startCol) {\n+172 if (*this)\n+173 return _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bR_\bo_\bw_\bs_\b,_\b _\bN_\b>(&map_(0,startCol));\n+174 else\n+175 return _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bR_\bo_\bw_\bs_\b,_\b _\bN_\b>();\n+176 }\n+177\n+182};\n+183\n+184// The pure dynamic specialization of this is needed to support\n+185// variable-sized types. Note that this is designed to work like the\n+186// boost optional scheme from GTSAM 3.\n+187template<>\n+_\b1_\b8_\b8class _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn {\n+189\n+190public:\n+191\n+_\b1_\b9_\b3 typedef Eigen::MatrixXd _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n+194\n+195private:\n+196\n+197 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn* pointer_;\n+198\n+199public:\n+200\n+_\b2_\b0_\b2 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() :\n+203 pointer_(nullptr) {\n+204 }\n+205\n+_\b2_\b0_\b7 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn* pointer) : pointer_(pointer) {}\n+208\n+_\b2_\b1_\b0 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn& dynamic) : pointer_(&dynamic) {}\n+211\n+212#ifndef OPTIONALJACOBIAN_NOBOOST\n+213\n+_\b2_\b1_\b5 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(boost::none_t /*none*/) :\n+216 pointer_(nullptr) {\n+217 }\n+218\n+_\b2_\b2_\b0 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(const boost::optional optional) :\n+221 pointer_(nullptr) {\n+222 if (optional) pointer_ = &(*optional);\n+223 }\n+224\n+225#endif\n+226\n+_\b2_\b2_\b8 operator bool() const {\n+229 return pointer_!=nullptr;\n+230 }\n+231\n+_\b2_\b3_\b3 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() {\n+234 return *pointer_;\n+235 }\n+236\n+_\b2_\b3_\b8 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn* _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>(){ return pointer_; }\n+239};\n+240\n+241// forward declare\n+242template struct traits;\n+243\n+249template \n+_\b2_\b5_\b0struct _\bM_\ba_\bk_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn {\n+251 typedef Eigen::Matrix::dimension, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>\n+type;\n+252};\n+253\n+260template\n+_\b2_\b6_\b1struct _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn {\n+262 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn,\n+263 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> type;\n+264};\n+265\n+266} // namespace gtsam\n+267\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WeightedSampler.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br\n-WeightedSampler(Engine *engine)\n-Construct from random number generation engine We only store a pointer to it.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WeightedSampler.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)\n+Constructor compatible with old-style derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(boost::none_t)\n+Constructor with boost::none just makes empty.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:122\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(Eigen::MatrixXd &dynamic)\n+Constructor that will resize a dynamic matrix (unless already correct)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Eigen::Map< Jacobian > & operator*()\n+De-reference, like boost optional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:148\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian()\n+Default constructor acts like boost::none.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(Jacobian &fixed)\n+Constructor that will usurp data of a fixed-size matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(Eigen::Ref< MATRIX > dynamic_ref)\n+Constructor from an Eigen::Ref value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(Eigen::MatrixXd *dynamic)\n+Constructor that will resize a dynamic matrix (unless already correct)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n+Eigen::Map< Jacobian > * operator->()\n+operator->()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+Eigen::Matrix< double, Rows, Cols > Jacobian\n+Jacobian size type TODO(frank): how to enforce RowMajor? Or better, make it\n+work with any storage ord...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(Jacobian *fixedPtr)\n+Constructor that will usurp data of a fixed-size matrix, pointer version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bc_\bo_\bl_\bs\n+OptionalJacobian< Rows, N > cols(int startCol)\n+Access M*N sub-block if we are allocated, otherwise none TODO(frank): this\n+could work as is below if ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:171\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian()\n+View on constructor argument, if given.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:202\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)\n+Constructor compatible with old-style derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:220\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+Eigen::MatrixXd Jacobian\n+Jacobian size type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:193\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Jacobian & operator*()\n+De-reference, like boost optional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:233\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(boost::none_t)\n+Constructor with boost::none just makes empty.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:215\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(Jacobian *pointer)\n+Construct from pointer to dynamic matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian(Jacobian &dynamic)\n+Construct from refrence to dynamic matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:210\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n+Jacobian * operator->()\n+TODO: operator->()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:238\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+: meta-function to generate Jacobian\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:250\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+: meta-function to generate JacobianTA optional reference Used mainly by\n+Expressions\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:261\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh\n+ * _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00098_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00098_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/ThreadsafeException.h Source File\n \n \n \n \n \n \n \n@@ -98,487 +98,160 @@\n
No Matches
\n \n \n \n \n \n
\n-
VectorSpace.h
\n+
ThreadsafeException.h
\n
\n
\n-
1/*
\n-
2 * VectorSpace.h
\n-
3 *
\n-
4 * @date December 21, 2014
\n-
5 * @author Mike Bosse
\n-
6 * @author Frank Dellaert
\n-
7 */
\n-
8
\n-
9#pragma once
\n-
10
\n-
11#include <gtsam/base/Lie.h>
\n-
12
\n-
13namespace gtsam {
\n-
14
\n-
\n-\n-
17};
\n-
\n-
18
\n-
19template<typename T> struct traits;
\n-
20
\n-
21namespace internal {
\n-
22
\n-
24template<class Class, int N>
\n-
\n-\n-
26
\n-
29 typedef Eigen::Matrix<double, N, 1> TangentVector;
\n-
30 typedef OptionalJacobian<N, N> ChartJacobian;
\n-
31 typedef Eigen::Matrix<double, N, N> Jacobian;
\n-
32 static int GetDimension(const Class&) { return N;}
\n-
33
\n-
34 static TangentVector Local(const Class& origin, const Class& other,
\n-
35 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
36 if (H1) *H1 = - Jacobian::Identity();
\n-
37 if (H2) *H2 = Jacobian::Identity();
\n-
38 Class v = other-origin;
\n-
39 return v.vector();
\n-
40 }
\n-
41
\n-
42 static Class Retract(const Class& origin, const TangentVector& v,
\n-
43 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
44 if (H1) *H1 = Jacobian::Identity();
\n-
45 if (H2) *H2 = Jacobian::Identity();
\n-
46 return origin + v;
\n-
47 }
\n-
48
\n-
50
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n+
11
\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/config.h> // for GTSAM_USE_TBB
\n+
23
\n+
24#include <boost/optional/optional.hpp>
\n+
25#include <gtsam/dllexport.h>
\n+
26#include <string>
\n+
27#include <typeinfo>
\n+
28#include <exception>
\n+
29
\n+
30#ifdef GTSAM_USE_TBB
\n+
31#include <tbb/tbb_allocator.h>
\n+
32#include <tbb/scalable_allocator.h>
\n+
33#include <iostream>
\n+
34#endif
\n+
35
\n+
36namespace gtsam {
\n+
37
\n+
39template<class DERIVED>
\n+
\n+\n+
41public std::exception
\n+
42{
\n+
43private:
\n+
44 typedef std::exception Base;
\n+
45#ifdef GTSAM_USE_TBB
\n+
46protected:
\n+
47 typedef std::basic_string<char, std::char_traits<char>,
\n+
48 tbb::tbb_allocator<char> > String;
\n+
49#else
\n+
50protected:
\n+
51 typedef std::string String;
\n+
52#endif
\n
53
\n-
54 static TangentVector Logmap(const Class& m, ChartJacobian Hm = boost::none) {
\n-
55 if (Hm) *Hm = Jacobian::Identity();
\n-
56 return m.vector();
\n-
57 }
\n-
58
\n-
59 static Class Expmap(const TangentVector& v, ChartJacobian Hv = boost::none) {
\n-
60 if (Hv) *Hv = Jacobian::Identity();
\n-
61 return Class(v);
\n-
62 }
\n-
63
\n-
64 static Class Compose(const Class& v1, const Class& v2, ChartJacobian H1 = boost::none,
\n-
65 ChartJacobian H2 = boost::none) {
\n-
66 if (H1) *H1 = Jacobian::Identity();
\n-
67 if (H2) *H2 = Jacobian::Identity();
\n-
68 return v1 + v2;
\n-
69 }
\n-
70
\n-
71 static Class Between(const Class& v1, const Class& v2, ChartJacobian H1 = boost::none,
\n-
72 ChartJacobian H2 = boost::none) {
\n-
73 if (H1) *H1 = - Jacobian::Identity();
\n-
74 if (H2) *H2 = Jacobian::Identity();
\n-
75 return v2 - v1;
\n+
54protected:
\n+
55 bool dynamic_;
\n+
56 mutable boost::optional<String> description_;
\n+
57
\n+
\n+\n+
60 dynamic_(false) {
\n+
61 }
\n+
\n+
62
\n+
\n+\n+
65 Base(other), dynamic_(false) {
\n+
66 }
\n+
\n+
67
\n+
\n+
69 ThreadsafeException(const std::string& description) :
\n+
70 dynamic_(false), description_(
\n+
71 String(description.begin(), description.end())) {
\n+
72 }
\n+
\n+
73
\n+
\n+
75 ~ThreadsafeException() noexcept override {
\n
76 }
\n+
\n
77
\n-
78 static Class Inverse(const Class& v, ChartJacobian H = boost::none) {
\n-
79 if (H) *H = - Jacobian::Identity();
\n-
80 return -v;
\n+
78public:
\n+
79 const char* what() const noexcept override {
\n+
80 return description_ ? description_->c_str() : "";
\n
81 }
\n-
82
\n-
84};
\n+
82};
\n+
\n+
83
\n+
\n+
85class GTSAM_EXPORT RuntimeErrorThreadsafe: public ThreadsafeException<RuntimeErrorThreadsafe> {
\n+
86public:
\n+
\n+
88 RuntimeErrorThreadsafe(const std::string& description) :
\n+\n+
90 }
\n+
\n+
91};
\n+
\n+
92
\n+
\n+
94class OutOfRangeThreadsafe: public ThreadsafeException<OutOfRangeThreadsafe> {
\n+
95public:
\n+
\n+
97 OutOfRangeThreadsafe(const std::string& description) :
\n+\n+
99 }
\n+
\n+
100};
\n+
\n+
101
\n+
\n+\n+
104 InvalidArgumentThreadsafe> {
\n+
105public:
\n+
\n+
107 InvalidArgumentThreadsafe(const std::string& description) :
\n+\n+
109 }
\n+
\n+
110};
\n+
\n+
111
\n+
\n+
113class CholeskyFailed : public gtsam::ThreadsafeException<CholeskyFailed>
\n+
114{
\n+
115public:
\n+
116 CholeskyFailed() noexcept {}
\n+
117 ~CholeskyFailed() noexcept override {}
\n+
118};
\n
\n-
85
\n-
87template<class Class>
\n-
\n-
88struct VectorSpaceImpl<Class,Eigen::Dynamic> {
\n-
89
\n-
92 static Class Compose(const Class& v1, const Class& v2) { return v1+v2;}
\n-
93 static Class Between(const Class& v1, const Class& v2) { return v2-v1;}
\n-
94 static Class Inverse(const Class& m) { return -m;}
\n-
96
\n-
99 typedef Eigen::VectorXd TangentVector;
\n-\n-
101 static int GetDimension(const Class& m) { return m.dim();}
\n-
102
\n-
103 static Eigen::MatrixXd Eye(const Class& m) {
\n-
104 int dim = GetDimension(m);
\n-
105 return Eigen::MatrixXd::Identity(dim, dim);
\n-
106 }
\n-
107
\n-
108 static TangentVector Local(const Class& origin, const Class& other,
\n-
109 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
110 if (H1) *H1 = - Eye(origin);
\n-
111 if (H2) *H2 = Eye(other);
\n-
112 Class v = other-origin;
\n-
113 return v.vector();
\n-
114 }
\n-
115
\n-
116 static Class Retract(const Class& origin, const TangentVector& v,
\n-
117 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
118 if (H1) *H1 = Eye(origin);
\n-
119 if (H2) *H2 = Eye(origin);
\n-
120 return origin + v;
\n-
121 }
\n-
122
\n-
124
\n-
127
\n-
128 static TangentVector Logmap(const Class& m, ChartJacobian Hm = boost::none) {
\n-
129 if (Hm) *Hm = Eye(m);
\n-
130 return m.vector();
\n-
131 }
\n-
132
\n-
133 static Class Expmap(const TangentVector& v, ChartJacobian Hv = boost::none) {
\n-
134 Class result(v);
\n-
135 if (Hv)
\n-
136 *Hv = Eye(v);
\n-
137 return result;
\n-
138 }
\n-
139
\n-
140 static Class Compose(const Class& v1, const Class& v2, ChartJacobian H1,
\n-
141 ChartJacobian H2 = boost::none) {
\n-
142 if (H1) *H1 = Eye(v1);
\n-
143 if (H2) *H2 = Eye(v2);
\n-
144 return v1 + v2;
\n-
145 }
\n-
146
\n-
147 static Class Between(const Class& v1, const Class& v2, ChartJacobian H1,
\n-
148 ChartJacobian H2 = boost::none) {
\n-
149 if (H1) *H1 = - Eye(v1);
\n-
150 if (H2) *H2 = Eye(v2);
\n-
151 return v2 - v1;
\n-
152 }
\n-
153
\n-
154 static Class Inverse(const Class& v, ChartJacobian H) {
\n-
155 if (H) *H = -Eye(v);
\n-
156 return -v;
\n-
157 }
\n-
158
\n-
160};
\n-
\n-
161
\n-
163template<class Class>
\n-
\n-\n-
165
\n-
166 enum { dim = Class::dimension };
\n-
167
\n-
168 Class p, q;
\n-
169 Vector v;
\n-
170
\n-
171 BOOST_CONCEPT_USAGE(HasVectorSpacePrereqs) {
\n-
172 p = Class::Identity(); // identity
\n-
173 q = p + p; // addition
\n-
174 q = p - p; // subtraction
\n-
175 v = p.vector(); // conversion to vector
\n-
176 q = p + v; // addition of a vector on the right
\n-
177 }
\n-
178};
\n-
\n-
179
\n-
184template<class Class>
\n-
\n-
185struct VectorSpaceTraits: VectorSpaceImpl<Class, Class::dimension> {
\n-
186
\n-
187 // Check that Class has the necessary machinery
\n-
188 BOOST_CONCEPT_ASSERT((HasVectorSpacePrereqs<Class>));
\n-
189
\n-\n-
191
\n-\n-
195 static Class Identity() { return Class::Identity();}
\n-
197
\n-
200 enum { dimension = Class::dimension};
\n-
201 typedef Class ManifoldType;
\n-
203};
\n-
\n-
204
\n-
206template<class Class>
\n-
207struct VectorSpace: Testable<Class>, VectorSpaceTraits<Class> {};
\n-
208
\n-
211template<typename Scalar>
\n-
\n-
212struct ScalarTraits : VectorSpaceImpl<Scalar, 1> {
\n-
213
\n-\n-
215
\n-
218 static void Print(Scalar m, const std::string& str = "") {
\n-
219 gtsam::print(m, str);
\n-
220 }
\n-
221 static bool Equals(Scalar v1, Scalar v2, double tol = 1e-8) {
\n-
222 return std::abs(v1 - v2) < tol;
\n-
223 }
\n-
225
\n-\n-
229 static Scalar Identity() { return 0;}
\n-
231
\n-
234 typedef Scalar ManifoldType;
\n-
235 enum { dimension = 1 };
\n-
236 typedef Eigen::Matrix<double, 1, 1> TangentVector;
\n-
237 typedef OptionalJacobian<1, 1> ChartJacobian;
\n-
238
\n-
239 static TangentVector Local(Scalar origin, Scalar other,
\n-
240 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
241 if (H1) (*H1)[0] = -1.0;
\n-
242 if (H2) (*H2)[0] = 1.0;
\n-
243 TangentVector result;
\n-
244 result(0) = other - origin;
\n-
245 return result;
\n-
246 }
\n-
247
\n-
248 static Scalar Retract(Scalar origin, const TangentVector& v,
\n-
249 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
250 if (H1) (*H1)[0] = 1.0;
\n-
251 if (H2) (*H2)[0] = 1.0;
\n-
252 return origin + v[0];
\n-
253 }
\n-
255
\n-
258 static TangentVector Logmap(Scalar m, ChartJacobian H = boost::none) {
\n-
259 if (H) (*H)[0] = 1.0;
\n-
260 return Local(0, m);
\n-
261 }
\n-
262
\n-
263 static Scalar Expmap(const TangentVector& v, ChartJacobian H = boost::none) {
\n-
264 if (H) (*H)[0] = 1.0;
\n-
265 return v[0];
\n-
266 }
\n-
268
\n-
269};
\n-
\n-
270
\n-
271} // namespace internal
\n-
272
\n-
\n-
274template<> struct traits<double> : public internal::ScalarTraits<double> {
\n-
275};
\n-
\n-
276
\n-
\n-
278template<> struct traits<float> : public internal::ScalarTraits<float> {
\n-
279};
\n-
\n-
280
\n-
281// traits for any fixed double Eigen matrix
\n-
282template<int M, int N, int Options, int MaxRows, int MaxCols>
\n-
\n-
283struct traits<Eigen::Matrix<double, M, N, Options, MaxRows, MaxCols> > :
\n-\n-
285 Eigen::Matrix<double, M, N, Options, MaxRows, MaxCols>, M * N> {
\n-
286
\n-\n-
288 typedef Eigen::Matrix<double, M, N, Options, MaxRows, MaxCols> Fixed;
\n-
289
\n-
292 static void Print(const Fixed& m, const std::string& str = "") {
\n-
293 gtsam::print(Eigen::MatrixXd(m), str);
\n-
294 }
\n-
295 static bool Equals(const Fixed& v1, const Fixed& v2, double tol = 1e-8) {
\n-
296 return equal_with_abs_tol(v1, v2, tol);
\n-
297 }
\n-
299
\n-\n-
303 static Fixed Identity() { return Fixed::Zero();}
\n-
305
\n-
308 enum { dimension = M*N};
\n-
309 typedef Fixed ManifoldType;
\n-
310 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
\n-
311 typedef Eigen::Matrix<double, dimension, dimension> Jacobian;
\n-\n-
313
\n-
314 static TangentVector Local(const Fixed& origin, const Fixed& other,
\n-
315 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
316 if (H1) (*H1) = -Jacobian::Identity();
\n-
317 if (H2) (*H2) = Jacobian::Identity();
\n-
318 TangentVector result;
\n-
319 Eigen::Map<Fixed>(result.data()) = other - origin;
\n-
320 return result;
\n-
321 }
\n-
322
\n-
323 static Fixed Retract(const Fixed& origin, const TangentVector& v,
\n-
324 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
325 if (H1) (*H1) = Jacobian::Identity();
\n-
326 if (H2) (*H2) = Jacobian::Identity();
\n-
327 return origin + Eigen::Map<const Fixed>(v.data());
\n-
328 }
\n-
330
\n-
333 static TangentVector Logmap(const Fixed& m, ChartJacobian H = boost::none) {
\n-
334 if (H) *H = Jacobian::Identity();
\n-
335 TangentVector result;
\n-
336 Eigen::Map<Fixed>(result.data()) = m;
\n-
337 return result;
\n-
338 }
\n-
339
\n-
340 static Fixed Expmap(const TangentVector& v, ChartJacobian H = boost::none) {
\n-
341 Fixed m;
\n-
342 m.setZero();
\n-
343 if (H) *H = Jacobian::Identity();
\n-
344 return m + Eigen::Map<const Fixed>(v.data());
\n-
345 }
\n-
347};
\n-
\n-
348
\n-
349
\n-
350namespace internal {
\n-
351
\n-
352// traits for dynamic Eigen matrices
\n-
353template<int M, int N, int Options, int MaxRows, int MaxCols>
\n-
\n-\n-
355
\n-\n-
357 typedef Eigen::Matrix<double, M, N, Options, MaxRows, MaxCols> Dynamic;
\n-
358
\n-
361 static void Print(const Dynamic& m, const std::string& str = "") {
\n-
362 gtsam::print(Eigen::MatrixXd(m), str);
\n-
363 }
\n-
364 static bool Equals(const Dynamic& v1, const Dynamic& v2,
\n-
365 double tol = 1e-8) {
\n-
366 return equal_with_abs_tol(v1, v2, tol);
\n-
367 }
\n-
369
\n-\n-
373 static Dynamic Identity() {
\n-
374 throw std::runtime_error("Identity not defined for dynamic types");
\n-
375 }
\n-
377
\n-
380 enum { dimension = Eigen::Dynamic };
\n-
381 typedef Eigen::VectorXd TangentVector;
\n-
382 typedef Eigen::MatrixXd Jacobian;
\n-
383 typedef OptionalJacobian<dimension, dimension> ChartJacobian;
\n-
384 typedef Dynamic ManifoldType;
\n-
385
\n-
386 static int GetDimension(const Dynamic& m) {
\n-
387 return m.rows() * m.cols();
\n-
388 }
\n-
389
\n-
390 static Jacobian Eye(const Dynamic& m) {
\n-
391 int dim = GetDimension(m);
\n-
392 return Eigen::Matrix<double, dimension, dimension>::Identity(dim, dim);
\n-
393 }
\n-
394
\n-
395 static TangentVector Local(const Dynamic& m, const Dynamic& other, //
\n-
396 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
397 if (H1) *H1 = -Eye(m);
\n-
398 if (H2) *H2 = Eye(m);
\n-
399 TangentVector v(GetDimension(m));
\n-
400 Eigen::Map<Dynamic>(v.data(), m.rows(), m.cols()) = other - m;
\n-
401 return v;
\n-
402 }
\n-
403
\n-
404 static Dynamic Retract(const Dynamic& m, const TangentVector& v, //
\n-
405 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
406 if (H1) *H1 = Eye(m);
\n-
407 if (H2) *H2 = Eye(m);
\n-
408 return m + Eigen::Map<const Dynamic>(v.data(), m.rows(), m.cols());
\n-
409 }
\n-
411
\n-
414 static TangentVector Logmap(const Dynamic& m, ChartJacobian H = boost::none) {
\n-
415 if (H) *H = Eye(m);
\n-
416 TangentVector result(GetDimension(m));
\n-
417 Eigen::Map<Dynamic>(result.data(), m.cols(), m.rows()) = m;
\n-
418 return result;
\n-
419 }
\n-
420
\n-
421 static Dynamic Expmap(const TangentVector& /*v*/, ChartJacobian H = boost::none) {
\n-
422 static_cast<void>(H);
\n-
423 throw std::runtime_error("Expmap not defined for dynamic types");
\n-
424 }
\n-
425
\n-
426 static Dynamic Inverse(const Dynamic& m, ChartJacobian H = boost::none) {
\n-
427 if (H) *H = -Eye(m);
\n-
428 return -m;
\n-
429 }
\n-
430
\n-
431 static Dynamic Compose(const Dynamic& v1, const Dynamic& v2,
\n-
432 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
433 if (H1) *H1 = Eye(v1);
\n-
434 if (H2) *H2 = Eye(v1);
\n-
435 return v1 + v2;
\n-
436 }
\n-
437
\n-
438 static Dynamic Between(const Dynamic& v1, const Dynamic& v2,
\n-
439 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
440 if (H1) *H1 = -Eye(v1);
\n-
441 if (H2) *H2 = Eye(v1);
\n-
442 return v2 - v1;
\n-
443 }
\n-
445
\n-
446};
\n-
\n-
447
\n-
448} // \\ internal
\n-
449
\n-
450// traits for fully dynamic matrix
\n-
451template<int Options, int MaxRows, int MaxCols>
\n-
\n-
452struct traits<Eigen::Matrix<double, -1, -1, Options, MaxRows, MaxCols> > :
\n-
453 public internal::DynamicTraits<-1, -1, Options, MaxRows, MaxCols> {
\n-
454};
\n-
\n-
455
\n-
456// traits for dynamic column vector
\n-
457template<int Options, int MaxRows, int MaxCols>
\n-
\n-
458struct traits<Eigen::Matrix<double, -1, 1, Options, MaxRows, MaxCols> > :
\n-
459 public internal::DynamicTraits<-1, 1, Options, MaxRows, MaxCols> {
\n-
460};
\n-
\n-
461
\n-
462// traits for dynamic row vector
\n-
463template<int Options, int MaxRows, int MaxCols>
\n-
\n-
464struct traits<Eigen::Matrix<double, 1, -1, Options, MaxRows, MaxCols> > :
\n-
465 public internal::DynamicTraits<1, -1, Options, MaxRows, MaxCols> {
\n-
466};
\n-
\n-
467
\n-
469template<typename T>
\n-
\n-
470class IsVectorSpace: public IsLieGroup<T> {
\n-
471public:
\n-
472
\n-
473 typedef typename traits<T>::structure_category structure_category_tag;
\n-
474
\n-
475 BOOST_CONCEPT_USAGE(IsVectorSpace) {
\n-
476 BOOST_STATIC_ASSERT_MSG(
\n-
477 (boost::is_base_of<vector_space_tag, structure_category_tag>::value),
\n-
478 "This type's trait does not assert it as a vector space (or derived)");
\n-
479 r = p + q;
\n-
480 r = -p;
\n-
481 r = p - q;
\n-
482 }
\n-
483
\n-
484private:
\n-
485 T p, q, r;
\n-
486};
\n-
\n-
487
\n-
488} // namespace gtsam
\n-
489
\n-
Base class and basic functions for Lie types.
\n+
119
\n+
120} // namespace gtsam
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Definition Group.h:38
\n-
tag to assert a type is a Lie group
Definition Lie.h:164
\n-
Lie Group Concept.
Definition Lie.h:260
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
OptionalJacobian< Rows, N > cols(int startCol)
Access M*N sub-block if we are allocated, otherwise none TODO(frank): this could work as is below if ...
Definition OptionalJacobian.h:171
\n-\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
tag to assert a type is a vector space
Definition VectorSpace.h:16
\n-
VectorSpaceTraits Implementation for Fixed sizes.
Definition VectorSpace.h:25
\n-
Requirements on type to pass it to Manifold template below.
Definition VectorSpace.h:164
\n-
A helper that implements the traits interface for classes that define vector spaces To use this for y...
Definition VectorSpace.h:185
\n-
VectorSpace provides both Testable and VectorSpaceTraits.
Definition VectorSpace.h:207
\n-
A helper that implements the traits interface for scalar vector spaces.
Definition VectorSpace.h:212
\n-
Definition VectorSpace.h:354
\n-
Vector Space concept.
Definition VectorSpace.h:470
\n+
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
Definition ThreadsafeException.h:42
\n+
~ThreadsafeException() noexcept override
Default destructor doesn't have the noexcept.
Definition ThreadsafeException.h:75
\n+
bool dynamic_
Whether this object was moved.
Definition ThreadsafeException.h:55
\n+
ThreadsafeException()
Default constructor is protected - may only be created from derived classes.
Definition ThreadsafeException.h:59
\n+
ThreadsafeException(const ThreadsafeException &other)
Copy constructor is protected - may only be created from derived classes.
Definition ThreadsafeException.h:64
\n+
ThreadsafeException(const std::string &description)
Construct with description string.
Definition ThreadsafeException.h:69
\n+
boost::optional< String > description_
Optional description.
Definition ThreadsafeException.h:56
\n+
Thread-safe runtime error exception.
Definition ThreadsafeException.h:85
\n+
RuntimeErrorThreadsafe(const std::string &description)
Construct with a string describing the exception.
Definition ThreadsafeException.h:88
\n+
Thread-safe out of range exception.
Definition ThreadsafeException.h:94
\n+
OutOfRangeThreadsafe(const std::string &description)
Construct with a string describing the exception.
Definition ThreadsafeException.h:97
\n+
Thread-safe invalid argument exception.
Definition ThreadsafeException.h:104
\n+
InvalidArgumentThreadsafe(const std::string &description)
Construct with a string describing the exception.
Definition ThreadsafeException.h:107
\n+
Indicate Cholesky factorization failure.
Definition ThreadsafeException.h:114
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,503 +1,169 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VectorSpace.h\n-1/*\n-2 * VectorSpace.h\n-3 *\n-4 * @date December 21, 2014\n-5 * @author Mike Bosse\n-6 * @author Frank Dellaert\n-7 */\n-8\n-9#pragma once\n-10\n-11#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-12\n-13namespace _\bg_\bt_\bs_\ba_\bm {\n-14\n-_\b1_\b6struct _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg: public _\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg {\n-17};\n-18\n-19template struct _\bt_\br_\ba_\bi_\bt_\bs;\n-20\n-21namespace internal {\n-22\n-24template\n-_\b2_\b5struct _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl {\n-26\n-29 typedef Eigen::Matrix TangentVector;\n-30 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b> ChartJacobian;\n-31 typedef Eigen::Matrix Jacobian;\n-32 static int GetDimension(const Class&) { return N;}\n-33\n-34 static TangentVector Local(const Class& origin, const Class& other,\n-35 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-36 if (H1) *H1 = - Jacobian::Identity();\n-37 if (H2) *H2 = Jacobian::Identity();\n-38 Class v = other-origin;\n-39 return v.vector();\n-40 }\n-41\n-42 static Class Retract(const Class& origin, const TangentVector& v,\n-43 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-44 if (H1) *H1 = Jacobian::Identity();\n-45 if (H2) *H2 = Jacobian::Identity();\n-46 return origin + v;\n-47 }\n-48\n-50\n+ThreadsafeException.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+7\n+8 * See LICENSE for the license information\n+9\n+10 * -------------------------------------------------------------------------\n+- */\n+11\n+20#pragma once\n+21\n+22#include // for GTSAM_USE_TBB\n+23\n+24#include \n+25#include \n+26#include \n+27#include \n+28#include \n+29\n+30#ifdef GTSAM_USE_TBB\n+31#include \n+32#include \n+33#include \n+34#endif\n+35\n+36namespace _\bg_\bt_\bs_\ba_\bm {\n+37\n+39template\n+_\b4_\b0class _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn:\n+41public std::exception\n+42{\n+43private:\n+44 typedef std::exception Base;\n+45#ifdef GTSAM_USE_TBB\n+46protected:\n+47 typedef std::basic_string,\n+48 tbb::tbb_allocator > String;\n+49#else\n+50protected:\n+51 typedef std::string String;\n+52#endif\n 53\n-54 static TangentVector Logmap(const Class& m, ChartJacobian Hm = boost::none)\n-{\n-55 if (Hm) *Hm = Jacobian::Identity();\n-56 return m.vector();\n-57 }\n-58\n-59 static Class Expmap(const TangentVector& v, ChartJacobian Hv = boost::none)\n-{\n-60 if (Hv) *Hv = Jacobian::Identity();\n-61 return Class(v);\n-62 }\n-63\n-64 static Class Compose(const Class& v1, const Class& v2, ChartJacobian H1 =\n-boost::none,\n-65 ChartJacobian H2 = boost::none) {\n-66 if (H1) *H1 = Jacobian::Identity();\n-67 if (H2) *H2 = Jacobian::Identity();\n-68 return v1 + v2;\n-69 }\n-70\n-71 static Class Between(const Class& v1, const Class& v2, ChartJacobian H1 =\n-boost::none,\n-72 ChartJacobian H2 = boost::none) {\n-73 if (H1) *H1 = - Jacobian::Identity();\n-74 if (H2) *H2 = Jacobian::Identity();\n-75 return v2 - v1;\n+54protected:\n+_\b5_\b5 bool _\bd_\by_\bn_\ba_\bm_\bi_\bc_\b_;\n+_\b5_\b6 mutable boost::optional _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\b_;\n+57\n+_\b5_\b9 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() :\n+60 _\bd_\by_\bn_\ba_\bm_\bi_\bc_\b_(false) {\n+61 }\n+62\n+_\b6_\b4 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(const _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn& other) :\n+65 Base(other), _\bd_\by_\bn_\ba_\bm_\bi_\bc_\b_(false) {\n+66 }\n+67\n+_\b6_\b9 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(const std::string& description) :\n+70 _\bd_\by_\bn_\ba_\bm_\bi_\bc_\b_(false), _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\b_(\n+71 String(description.begin(), description.end())) {\n+72 }\n+73\n+_\b7_\b5 _\b~_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() noexcept override {\n 76 }\n 77\n-78 static Class Inverse(const Class& v, ChartJacobian H = boost::none) {\n-79 if (H) *H = - Jacobian::Identity();\n-80 return -v;\n+78public:\n+79 const char* what() const noexcept override {\n+80 return _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\b_ ? _\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\b_->c_str() : \"\";\n 81 }\n-82\n-84};\n-85\n-87template\n-_\b8_\b8struct _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl {\n-89\n-92 static Class Compose(const Class& v1, const Class& v2) { return v1+v2;}\n-93 static Class Between(const Class& v1, const Class& v2) { return v2-v1;}\n-94 static Class Inverse(const Class& m) { return -m;}\n-96\n-99 typedef Eigen::VectorXd TangentVector;\n-100 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b> _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n-101 static int GetDimension(const Class& m) { return m.dim();}\n-102\n-103 static Eigen::MatrixXd Eye(const Class& m) {\n-104 int dim = GetDimension(m);\n-105 return Eigen::MatrixXd::Identity(dim, dim);\n-106 }\n-107\n-108 static TangentVector Local(const Class& origin, const Class& other,\n-109 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1 = boost::none, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n-110 if (H1) *H1 = - Eye(origin);\n-111 if (H2) *H2 = Eye(other);\n-112 Class v = other-origin;\n-113 return v.vector();\n-114 }\n-115\n-116 static Class Retract(const Class& origin, const TangentVector& v,\n-117 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1 = boost::none, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n-118 if (H1) *H1 = Eye(origin);\n-119 if (H2) *H2 = Eye(origin);\n-120 return origin + v;\n-121 }\n-122\n-124\n-127\n-128 static TangentVector Logmap(const Class& m, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn Hm = boost::none)\n-{\n-129 if (Hm) *Hm = Eye(m);\n-130 return m.vector();\n-131 }\n-132\n-133 static Class Expmap(const TangentVector& v, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn Hv = boost::none)\n-{\n-134 Class result(v);\n-135 if (Hv)\n-136 *Hv = Eye(v);\n-137 return result;\n-138 }\n-139\n-140 static Class Compose(const Class& v1, const Class& v2, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1,\n-141 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n-142 if (H1) *H1 = Eye(v1);\n-143 if (H2) *H2 = Eye(v2);\n-144 return v1 + v2;\n-145 }\n-146\n-147 static Class Between(const Class& v1, const Class& v2, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1,\n-148 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n-149 if (H1) *H1 = - Eye(v1);\n-150 if (H2) *H2 = Eye(v2);\n-151 return v2 - v1;\n-152 }\n-153\n-154 static Class Inverse(const Class& v, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H) {\n-155 if (H) *H = -Eye(v);\n-156 return -v;\n-157 }\n-158\n-160};\n-161\n-163template\n-_\b1_\b6_\b4struct _\bH_\ba_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bP_\br_\be_\br_\be_\bq_\bs {\n-165\n-166 enum { dim = Class::dimension };\n-167\n-168 Class p, q;\n-169 Vector v;\n-170\n-171 BOOST_CONCEPT_USAGE(_\bH_\ba_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bP_\br_\be_\br_\be_\bq_\bs) {\n-172 p = Class::Identity(); // identity\n-173 q = p + p; // addition\n-174 q = p - p; // subtraction\n-175 v = p.vector(); // conversion to vector\n-176 q = p + v; // addition of a vector on the right\n-177 }\n-178};\n-179\n-184template\n-_\b1_\b8_\b5struct _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bT_\br_\ba_\bi_\bt_\bs: _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl {\n-186\n-187 // Check that Class has the necessary machinery\n-188 BOOST_CONCEPT_ASSERT((_\bH_\ba_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bP_\br_\be_\br_\be_\bq_\bs_\b<_\bC_\bl_\ba_\bs_\bs_\b>));\n-189\n-190 typedef _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n-191\n-194 typedef _\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n-195 static Class Identity() { return Class::Identity();}\n-197\n-200 enum { dimension = Class::dimension};\n-201 typedef Class ManifoldType;\n-203};\n-204\n-206template\n-_\b2_\b0_\b7struct _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be: _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be, _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bT_\br_\ba_\bi_\bt_\bs {};\n-208\n-211template\n-_\b2_\b1_\b2struct _\bS_\bc_\ba_\bl_\ba_\br_\bT_\br_\ba_\bi_\bt_\bs : _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl {\n-213\n-214 typedef _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n-215\n-218 static void Print(Scalar m, const std::string& str = \"\") {\n-219 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(m, str);\n-220 }\n-221 static bool Equals(Scalar v1, Scalar v2, double tol = 1e-8) {\n-222 return std::abs(v1 - v2) < tol;\n-223 }\n-225\n-228 typedef _\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n-229 static Scalar Identity() { return 0;}\n-231\n-234 typedef Scalar ManifoldType;\n-235 enum { dimension = 1 };\n-236 typedef Eigen::Matrix TangentVector;\n-237 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b1_\b> ChartJacobian;\n-238\n-239 static TangentVector Local(Scalar origin, Scalar other,\n-240 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-241 if (H1) (*H1)[0] = -1.0;\n-242 if (H2) (*H2)[0] = 1.0;\n-243 TangentVector result;\n-244 result(0) = other - origin;\n-245 return result;\n-246 }\n-247\n-248 static Scalar Retract(Scalar origin, const TangentVector& v,\n-249 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-250 if (H1) (*H1)[0] = 1.0;\n-251 if (H2) (*H2)[0] = 1.0;\n-252 return origin + v[0];\n-253 }\n-255\n-258 static TangentVector Logmap(Scalar m, ChartJacobian H = boost::none) {\n-259 if (H) (*H)[0] = 1.0;\n-260 return Local(0, m);\n-261 }\n-262\n-263 static Scalar Expmap(const TangentVector& v, ChartJacobian H = boost::none)\n-{\n-264 if (H) (*H)[0] = 1.0;\n-265 return v[0];\n-266 }\n-268\n-269};\n-270\n-271} // namespace internal\n-272\n-_\b2_\b7_\b4template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bT_\br_\ba_\bi_\bt_\bs {\n-275};\n-276\n-_\b2_\b7_\b8template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bT_\br_\ba_\bi_\bt_\bs {\n-279};\n-280\n-281// traits for any fixed double Eigen matrix\n-282template\n-_\b2_\b8_\b3struct _\bt_\br_\ba_\bi_\bt_\bs > :\n-284 _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl<\n-285 Eigen::Matrix, M * N> {\n-286\n-287 typedef _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n-288 typedef Eigen::Matrix Fixed;\n-289\n-292 static void Print(const Fixed& m, const std::string& str = \"\") {\n-293 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Eigen::MatrixXd(m), str);\n-294 }\n-295 static bool Equals(const Fixed& v1, const Fixed& v2, double tol = 1e-8) {\n-296 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(v1, v2, tol);\n-297 }\n-299\n-302 typedef _\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n-303 static Fixed Identity() { return Fixed::Zero();}\n-305\n-308 enum { dimension = M*N};\n-309 typedef Fixed ManifoldType;\n-310 typedef Eigen::Matrix TangentVector;\n-311 typedef Eigen::Matrix Jacobian;\n-312 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n-313\n-314 static TangentVector Local(const Fixed& origin, const Fixed& other,\n-315 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1 = boost::none, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n-316 if (H1) (*H1) = -Jacobian::Identity();\n-317 if (H2) (*H2) = Jacobian::Identity();\n-318 TangentVector result;\n-319 Eigen::Map(result.data()) = other - origin;\n-320 return result;\n-321 }\n-322\n-323 static Fixed Retract(const Fixed& origin, const TangentVector& v,\n-324 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1 = boost::none, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n-325 if (H1) (*H1) = Jacobian::Identity();\n-326 if (H2) (*H2) = Jacobian::Identity();\n-327 return origin + Eigen::Map(v.data());\n-328 }\n-330\n-333 static TangentVector Logmap(const Fixed& m, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H = boost::none)\n-{\n-334 if (H) *H = Jacobian::Identity();\n-335 TangentVector result;\n-336 Eigen::Map(result.data()) = m;\n-337 return result;\n-338 }\n-339\n-340 static Fixed Expmap(const TangentVector& v, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H = boost::none)\n-{\n-341 Fixed m;\n-342 m.setZero();\n-343 if (H) *H = Jacobian::Identity();\n-344 return m + Eigen::Map(v.data());\n-345 }\n-347};\n-348\n-349\n-350namespace internal {\n-351\n-352// traits for dynamic Eigen matrices\n-353template\n-_\b3_\b5_\b4struct _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bT_\br_\ba_\bi_\bt_\bs {\n-355\n-356 typedef _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n-357 typedef Eigen::Matrix Dynamic;\n-358\n-361 static void Print(const Dynamic& m, const std::string& str = \"\") {\n-362 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Eigen::MatrixXd(m), str);\n-363 }\n-364 static bool Equals(const Dynamic& v1, const Dynamic& v2,\n-365 double tol = 1e-8) {\n-366 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(v1, v2, tol);\n-367 }\n-369\n-372 typedef _\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n-373 static Dynamic Identity() {\n-374 throw std::runtime_error(\"Identity not defined for dynamic types\");\n-375 }\n-377\n-380 enum { dimension = Eigen::Dynamic };\n-381 typedef Eigen::VectorXd TangentVector;\n-382 typedef Eigen::MatrixXd Jacobian;\n-383 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> ChartJacobian;\n-384 typedef Dynamic ManifoldType;\n-385\n-386 static int GetDimension(const Dynamic& m) {\n-387 return m.rows() * m._\bc_\bo_\bl_\bs();\n-388 }\n-389\n-390 static Jacobian Eye(const Dynamic& m) {\n-391 int dim = GetDimension(m);\n-392 return Eigen::Matrix::Identity(dim, dim);\n-393 }\n-394\n-395 static TangentVector Local(const Dynamic& m, const Dynamic& other, //\n-396 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-397 if (H1) *H1 = -Eye(m);\n-398 if (H2) *H2 = Eye(m);\n-399 TangentVector v(GetDimension(m));\n-400 Eigen::Map(v.data(), m.rows(), m.cols()) = other - m;\n-401 return v;\n-402 }\n-403\n-404 static Dynamic Retract(const Dynamic& m, const TangentVector& v, //\n-405 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-406 if (H1) *H1 = Eye(m);\n-407 if (H2) *H2 = Eye(m);\n-408 return m + Eigen::Map(v.data(), m.rows(), m.cols());\n-409 }\n-411\n-414 static TangentVector Logmap(const Dynamic& m, ChartJacobian H = boost::\n-none) {\n-415 if (H) *H = Eye(m);\n-416 TangentVector result(GetDimension(m));\n-417 Eigen::Map(result.data(), m.cols(), m.rows()) = m;\n-418 return result;\n-419 }\n-420\n-421 static Dynamic Expmap(const TangentVector& /*v*/, ChartJacobian H = boost::\n-none) {\n-422 static_cast(H);\n-423 throw std::runtime_error(\"Expmap not defined for dynamic types\");\n-424 }\n-425\n-426 static Dynamic Inverse(const Dynamic& m, ChartJacobian H = boost::none) {\n-427 if (H) *H = -Eye(m);\n-428 return -m;\n-429 }\n-430\n-431 static Dynamic Compose(const Dynamic& v1, const Dynamic& v2,\n-432 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-433 if (H1) *H1 = Eye(v1);\n-434 if (H2) *H2 = Eye(v1);\n-435 return v1 + v2;\n-436 }\n-437\n-438 static Dynamic Between(const Dynamic& v1, const Dynamic& v2,\n-439 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-440 if (H1) *H1 = -Eye(v1);\n-441 if (H2) *H2 = Eye(v1);\n-442 return v2 - v1;\n-443 }\n-445\n-446};\n-447\n-448} // \\ internal\n-449\n-450// traits for fully dynamic matrix\n-451template\n-_\b4_\b5_\b2struct _\bt_\br_\ba_\bi_\bt_\bs > :\n-453 public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bT_\br_\ba_\bi_\bt_\bs<-1, -1, Options, MaxRows, MaxCols> {\n-454};\n-455\n-456// traits for dynamic column vector\n-457template\n-_\b4_\b5_\b8struct _\bt_\br_\ba_\bi_\bt_\bs > :\n-459 public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bT_\br_\ba_\bi_\bt_\bs<-1, 1, Options, MaxRows, MaxCols> {\n-460};\n-461\n-462// traits for dynamic row vector\n-463template\n-_\b4_\b6_\b4struct _\bt_\br_\ba_\bi_\bt_\bs > :\n-465 public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bT_\br_\ba_\bi_\bt_\bs<1, -1, Options, MaxRows, MaxCols> {\n-466};\n-467\n-469template\n-_\b4_\b7_\b0class _\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be: public _\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n-471public:\n-472\n-473 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by structure_category_tag;\n-474\n-475 BOOST_CONCEPT_USAGE(_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be) {\n-476 BOOST_STATIC_ASSERT_MSG(\n-477 (boost::is_base_of::value),\n-478 \"This type's trait does not assert it as a vector space (or derived)\");\n-479 r = p + q;\n-480 r = -p;\n-481 r = p - q;\n-482 }\n-483\n-484private:\n-485 T p, q, r;\n-486};\n-487\n-488} // namespace gtsam\n-489\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n+82};\n+83\n+_\b8_\b5class GTSAM_EXPORT _\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be: public\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn {\n+86public:\n+_\b8_\b8 _\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be(const std::string& description) :\n+89 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<_\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be>(description) {\n+90 }\n+91};\n+92\n+_\b9_\b4class _\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be: public _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+{\n+95public:\n+_\b9_\b7 _\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be(const std::string& description) :\n+98 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be>(description) {\n+99 }\n+100};\n+101\n+_\b1_\b0_\b3class _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be: public _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<\n+104 InvalidArgumentThreadsafe> {\n+105public:\n+_\b1_\b0_\b7 _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be(const std::string& description) :\n+108 _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be>(description) {\n+109 }\n+110};\n+111\n+_\b1_\b1_\b3class _\bC_\bh_\bo_\bl_\be_\bs_\bk_\by_\bF_\ba_\bi_\bl_\be_\bd : public _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+114{\n+115public:\n+116 _\bC_\bh_\bo_\bl_\be_\bs_\bk_\by_\bF_\ba_\bi_\bl_\be_\bd() noexcept {}\n+117 _\b~_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by_\bF_\ba_\bi_\bl_\be_\bd() noexcept override {}\n+118};\n+119\n+120} // namespace gtsam\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n-bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n-DenseBase< MATRIX > &B, double tol=1e-9)\n-equals with a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-tag to assert a type is a Lie group\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Lie Group Concept.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bc_\bo_\bl_\bs\n-OptionalJacobian< Rows, N > cols(int startCol)\n-Access M*N sub-block if we are allocated, otherwise none TODO(frank): this\n-could work as is below if ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:171\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:188\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg\n-tag to assert a type is a vector space\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:16\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl\n-VectorSpaceTraits Implementation for Fixed sizes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:25\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bH_\ba_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bP_\br_\be_\br_\be_\bq_\bs\n-Requirements on type to pass it to Manifold template below.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bT_\br_\ba_\bi_\bt_\bs\n-A helper that implements the traits interface for classes that define vector\n-spaces To use this for y...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be\n-VectorSpace provides both Testable and VectorSpaceTraits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bT_\br_\ba_\bi_\bt_\bs\n-A helper that implements the traits interface for scalar vector spaces.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bT_\br_\ba_\bi_\bt_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:354\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be\n-Vector Space concept.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:470\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\b~_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+~ThreadsafeException() noexcept override\n+Default destructor doesn't have the noexcept.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\by_\bn_\ba_\bm_\bi_\bc_\b_\n+bool dynamic_\n+Whether this object was moved.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+ThreadsafeException()\n+Default constructor is protected - may only be created from derived classes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+ThreadsafeException(const ThreadsafeException &other)\n+Copy constructor is protected - may only be created from derived classes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+ThreadsafeException(const std::string &description)\n+Construct with description string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\b_\n+boost::optional< String > description_\n+Optional description.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n+Thread-safe runtime error exception.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\b:_\b:_\bR_\bu_\bn_\bt_\bi_\bm_\be_\bE_\br_\br_\bo_\br_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n+RuntimeErrorThreadsafe(const std::string &description)\n+Construct with a string describing the exception.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n+Thread-safe out of range exception.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\b:_\b:_\bO_\bu_\bt_\bO_\bf_\bR_\ba_\bn_\bg_\be_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n+OutOfRangeThreadsafe(const std::string &description)\n+Construct with a string describing the exception.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n+Thread-safe invalid argument exception.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bA_\br_\bg_\bu_\bm_\be_\bn_\bt_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be\n+InvalidArgumentThreadsafe(const std::string &description)\n+Construct with a string describing the exception.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by_\bF_\ba_\bi_\bl_\be_\bd\n+Indicate Cholesky factorization failure.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:114\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * V\bVe\bec\bct\bto\bor\brS\bSp\bpa\bac\bce\be.\b.h\bh\n+ * _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00101.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00101.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VerticalBlockMatrix.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/debug.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,56 @@\n
\n \n \n \n \n
\n \n-
VerticalBlockMatrix.cpp File Reference
\n+Namespaces |\n+Functions |\n+Variables
\n+
debug.cpp File Reference
\n \n
\n \n-

A matrix with column blocks of pre-defined sizes. \n+

Global debugging flags. \n More...

\n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+

\n+Functions

\n+bool gtsam::guardedIsDebug (const std::string &s)
 
\n+void gtsam::guardedSetDebug (const std::string &s, const bool v)
 
\n+bool gtsam::isDebugVersion ()
 
\n+\n+\n+\n

\n+Variables

\n+GTSAM_EXPORT FastMap< std::string, ValueWithDefault< bool, false > > gtsam::debugFlags
 
\n

Detailed Description

\n-

A matrix with column blocks of pre-defined sizes.

\n-

Used in JacobianFactor and GaussianConditional.

Author
Richard Roberts
\n-
Date
Sep 18, 2010
\n+

Global debugging flags.

\n+
Author
Richard Roberts
\n+
Date
Feb 1, 2011
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-VerticalBlockMatrix.cpp File Reference\n-A matrix with column blocks of pre-defined sizes. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+debug.cpp File Reference\n+Global debugging flags. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgu\bua\bar\brd\bde\bed\bdI\bIs\bsD\bDe\beb\bbu\bug\bg (const std::string &s)\n+\u00a0\n+void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgu\bua\bar\brd\bde\bed\bdS\bSe\bet\btD\bDe\beb\bbu\bug\bg (const std::string &s, const bool v)\n+\u00a0\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bis\bsD\bDe\beb\bbu\bug\bgV\bVe\ber\brs\bsi\bio\bon\bn ()\n+\u00a0\n+V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n+GTSAM_EXPORT _\bF_\ba_\bs_\bt_\bM_\ba_\bp< std::string, _\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt< bool,\n+ false > >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bde\beb\bbu\bug\bgF\bFl\bla\bag\bgs\bs\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A matrix with column blocks of pre-defined sizes.\n-Used in _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br and _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl.\n+Global debugging flags.\n Author\n Richard Roberts\n Date\n- Sep 18, 2010\n+ Feb 1, 2011\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bc_\bp_\bp\n+ * _\bd_\be_\bb_\bu_\bg_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00104_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00104_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/MatrixSerialization.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/testLie.h Source File\n \n \n \n \n \n \n \n@@ -98,91 +98,111 @@\n
No Matches
\n \n \n \n \n \n
\n-
MatrixSerialization.h
\n+
testLie.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19// \\callgraph
\n+
12/*
\n+
13 * @file testLie.h
\n+
14 * @brief Test utilities for Lie groups
\n+
15 * @date November, 2014
\n+
16 * @author Paul Furgale
\n+
17 */
\n+
18
\n+
19#pragma once
\n
20
\n-
21#pragma once
\n-
22
\n-
23#include <gtsam/base/Matrix.h>
\n-
24
\n-
25#include <boost/serialization/array.hpp>
\n-
26#include <boost/serialization/nvp.hpp>
\n-
27#include <boost/serialization/split_free.hpp>
\n-
28
\n-
29namespace boost {
\n-
30namespace serialization {
\n-
31
\n-
47// split version - sends sizes ahead
\n-
48template <class Archive, typename Scalar_, int Rows_, int Cols_, int Ops_,
\n-
49 int MaxRows_, int MaxCols_>
\n-
\n-
50void save(
\n-
51 Archive& ar,
\n-
52 const Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_>& m,
\n-
53 const unsigned int /*version*/) {
\n-
54 const size_t rows = m.rows(), cols = m.cols();
\n-
55 ar << BOOST_SERIALIZATION_NVP(rows);
\n-
56 ar << BOOST_SERIALIZATION_NVP(cols);
\n-
57 ar << make_nvp("data", make_array(m.data(), m.size()));
\n-
58}
\n-
\n-
59
\n-
60template <class Archive, typename Scalar_, int Rows_, int Cols_, int Ops_,
\n-
61 int MaxRows_, int MaxCols_>
\n-
62void load(Archive& ar,
\n-
63 Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_>& m,
\n-
64 const unsigned int /*version*/) {
\n-
65 size_t rows, cols;
\n-
66 ar >> BOOST_SERIALIZATION_NVP(rows);
\n-
67 ar >> BOOST_SERIALIZATION_NVP(cols);
\n-
68 m.resize(rows, cols);
\n-
69 ar >> make_nvp("data", make_array(m.data(), m.size()));
\n-
70}
\n-
71
\n-
72// templated version of BOOST_SERIALIZATION_SPLIT_FREE(Eigen::Matrix);
\n-
73template <class Archive, typename Scalar_, int Rows_, int Cols_, int Ops_,
\n-
74 int MaxRows_, int MaxCols_>
\n-
75void serialize(
\n-
76 Archive& ar,
\n-
77 Eigen::Matrix<Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_>& m,
\n-
78 const unsigned int version) {
\n-
79 split_free(ar, m, version);
\n-
80}
\n+
21#include <gtsam/base/Lie.h>
\n+\n+
23
\n+
24#include <CppUnitLite/TestResult.h>
\n+
25#include <CppUnitLite/Test.h>
\n+
26#include <CppUnitLite/Failure.h>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
30// Do a comprehensive test of Lie Group derivatives
\n+
31template<typename G>
\n+
32void testLieGroupDerivatives(TestResult& result_, const std::string& name_,
\n+
33 const G& t1, const G& t2) {
\n+
34
\n+
35 Matrix H1, H2;
\n+
36 typedef traits<G> T;
\n+
37 typedef OptionalJacobian<T::dimension,T::dimension> OJ;
\n+
38
\n+
39 // Inverse
\n+
40 OJ none;
\n+
41 EXPECT(assert_equal<G>(t1.inverse(),T::Inverse(t1, H1)));
\n+
42 EXPECT(assert_equal(numericalDerivative21<G,G,OJ>(T::Inverse, t1, none),H1));
\n+
43
\n+
44 EXPECT(assert_equal<G>(t2.inverse(),T::Inverse(t2, H1)));
\n+
45 EXPECT(assert_equal(numericalDerivative21<G,G,OJ>(T::Inverse, t2, none),H1));
\n+
46
\n+
47 // Compose
\n+
48 EXPECT(assert_equal<G>(t1 * t2,T::Compose(t1, t2, H1, H2)));
\n+
49 EXPECT(assert_equal(numericalDerivative41<G,G,G,OJ,OJ>(T::Compose, t1, t2, none, none), H1));
\n+
50 EXPECT(assert_equal(numericalDerivative42<G,G,G,OJ,OJ>(T::Compose, t1, t2, none, none), H2));
\n+
51
\n+
52 // Between
\n+
53 EXPECT(assert_equal<G>(t1.inverse() * t2,T::Between(t1, t2, H1, H2)));
\n+
54 EXPECT(assert_equal(numericalDerivative41<G,G,G,OJ,OJ>(T::Between, t1, t2, none, none), H1));
\n+
55 EXPECT(assert_equal(numericalDerivative42<G,G,G,OJ,OJ>(T::Between, t1, t2, none, none), H2));
\n+
56}
\n+
57
\n+
58// Do a comprehensive test of Lie Group Chart derivatives
\n+
59template<typename G>
\n+
60void testChartDerivatives(TestResult& result_, const std::string& name_,
\n+
61 const G& t1, const G& t2) {
\n+
62
\n+
63 Matrix H1, H2;
\n+
64 typedef traits<G> T;
\n+
65 typedef typename T::TangentVector V;
\n+
66 typedef OptionalJacobian<T::dimension,T::dimension> OJ;
\n+
67
\n+
68 // Retract
\n+
69 OJ none;
\n+
70 V w12 = T::Local(t1, t2);
\n+
71 EXPECT(assert_equal<G>(t2, T::Retract(t1,w12, H1, H2)));
\n+
72 EXPECT(assert_equal(numericalDerivative41<G,G,V,OJ,OJ>(T::Retract, t1, w12, none, none), H1));
\n+
73 EXPECT(assert_equal(numericalDerivative42<G,G,V,OJ,OJ>(T::Retract, t1, w12, none, none), H2));
\n+
74
\n+
75 // Local
\n+
76 EXPECT(assert_equal(w12, T::Local(t1, t2, H1, H2)));
\n+
77 EXPECT(assert_equal(numericalDerivative41<V,G,G,OJ,OJ>(T::Local, t1, t2, none, none), H1));
\n+
78 EXPECT(assert_equal(numericalDerivative42<V,G,G,OJ,OJ>(T::Local, t1, t2, none, none), H2));
\n+
79}
\n+
80} // namespace gtsam
\n
81
\n-
82// specialized to Matrix for MATLAB wrapper
\n-
83template <class Archive>
\n-
84void serialize(Archive& ar, gtsam::Matrix& m, const unsigned int version) {
\n-
85 split_free(ar, m, version);
\n-
86}
\n-
87
\n-
88} // namespace serialization
\n-
89} // namespace boost
\n-
typedef and functions to augment Eigen's MatrixXd
\n+
82#define CHECK_LIE_GROUP_DERIVATIVES(t1,t2) \\
\n+
83 { gtsam::testLieGroupDerivatives(result_, name_, t1, t2); }
\n+
84
\n+
85#define CHECK_CHART_DERIVATIVES(t1,t2) \\
\n+
86 { gtsam::testChartDerivatives(result_, name_, t1, t2); }
\n+
Base class and basic functions for Lie types.
\n+
Some functions to compute numerical derivatives.
\n+
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,82 +1,119 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MatrixSerialization.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+testLie.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19// \\callgraph\n+12/*\n+13 * @file testLie.h\n+14 * @brief Test utilities for Lie groups\n+15 * @date November, 2014\n+16 * @author Paul Furgale\n+17 */\n+18\n+19#pragma once\n 20\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-24\n-25#include \n-26#include \n-27#include \n-28\n-29namespace boost {\n-30namespace serialization {\n-31\n-47// split version - sends sizes ahead\n-48template \n-_\b5_\b0void save(\n-51 Archive& ar,\n-52 const Eigen::Matrix& m,\n-53 const unsigned int /*version*/) {\n-54 const size_t rows = m.rows(), cols = m.cols();\n-55 ar << BOOST_SERIALIZATION_NVP(rows);\n-56 ar << BOOST_SERIALIZATION_NVP(cols);\n-57 ar << make_nvp(\"data\", make_array(m.data(), m.size()));\n-58}\n-59\n-60template \n-62void load(Archive& ar,\n-63 Eigen::Matrix& m,\n-64 const unsigned int /*version*/) {\n-65 size_t rows, cols;\n-66 ar >> BOOST_SERIALIZATION_NVP(rows);\n-67 ar >> BOOST_SERIALIZATION_NVP(cols);\n-68 m.resize(rows, cols);\n-69 ar >> make_nvp(\"data\", make_array(m.data(), m.size()));\n-70}\n-71\n-72// templated version of BOOST_SERIALIZATION_SPLIT_FREE(Eigen::Matrix);\n-73template \n-75void serialize(\n-76 Archive& ar,\n-77 Eigen::Matrix& m,\n-78 const unsigned int version) {\n-79 split_free(ar, m, version);\n-80}\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh>\n+23\n+24#include \n+25#include \n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+30// Do a comprehensive test of Lie Group derivatives\n+31template\n+32void testLieGroupDerivatives(TestResult& result_, const std::string& name_,\n+33 const G& t1, const G& t2) {\n+34\n+35 Matrix H1, H2;\n+36 typedef traits T;\n+37 typedef OptionalJacobian OJ;\n+38\n+39 // Inverse\n+40 OJ none;\n+41 EXPECT(assert_equal(t1.inverse(),T::Inverse(t1, H1)));\n+42 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative21(T::Inverse, t1,\n+none),H1));\n+43\n+44 EXPECT(assert_equal(t2.inverse(),T::Inverse(t2, H1)));\n+45 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative21(T::Inverse, t2,\n+none),H1));\n+46\n+47 // Compose\n+48 EXPECT(assert_equal(t1 * t2,T::Compose(t1, t2, H1, H2)));\n+49 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative41(T::Compose, t1, t2,\n+none, none), H1));\n+50 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative42(T::Compose, t1, t2,\n+none, none), H2));\n+51\n+52 // Between\n+53 EXPECT(assert_equal(t1.inverse() * t2,T::Between(t1, t2, H1, H2)));\n+54 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative41(T::Between, t1, t2,\n+none, none), H1));\n+55 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative42(T::Between, t1, t2,\n+none, none), H2));\n+56}\n+57\n+58// Do a comprehensive test of Lie Group Chart derivatives\n+59template\n+60void testChartDerivatives(TestResult& result_, const std::string& name_,\n+61 const G& t1, const G& t2) {\n+62\n+63 Matrix H1, H2;\n+64 typedef traits T;\n+65 typedef typename T::TangentVector V;\n+66 typedef OptionalJacobian OJ;\n+67\n+68 // Retract\n+69 OJ none;\n+70 V w12 = T::Local(t1, t2);\n+71 EXPECT(assert_equal(t2, T::Retract(t1,w12, H1, H2)));\n+72 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative41(T::Retract, t1, w12,\n+none, none), H1));\n+73 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative42(T::Retract, t1, w12,\n+none, none), H2));\n+74\n+75 // Local\n+76 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(w12, T::Local(t1, t2, H1, H2)));\n+77 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative41(T::Local, t1, t2,\n+none, none), H1));\n+78 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(numericalDerivative42(T::Local, t1, t2,\n+none, none), H2));\n+79}\n+80} // namespace gtsam\n 81\n-82// specialized to Matrix for MATLAB wrapper\n-83template \n-84void serialize(Archive& ar, gtsam::Matrix& m, const unsigned int version) {\n-85 split_free(ar, m, version);\n-86}\n-87\n-88} // namespace serialization\n-89} // namespace boost\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n+82#define CHECK_LIE_GROUP_DERIVATIVES(t1,t2) \\\n+83 { gtsam::testLieGroupDerivatives(result_, name_, t1, t2); }\n+84\n+85#define CHECK_CHART_DERIVATIVES(t1,t2) \\\n+86 { gtsam::testChartDerivatives(result_, name_, t1, t2); }\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh\n+Some functions to compute numerical derivatives.\n+_\bg_\bt_\bs_\ba_\bm\n+Global functions in a separate testing namespace.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n+bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n+equals with an tolerance, prints out message if unequal\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bM_\ba_\bt_\br_\bi_\bx_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * t\bte\bes\bst\btL\bLi\bie\be.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00107.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00107.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/SymmetricBlockMatrix.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/treeTraversal-inst.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,61 @@\n \n \n \n \n \n
\n \n-
SymmetricBlockMatrix.cpp File Reference
\n+Namespaces |\n+Functions
\n+
treeTraversal-inst.h File Reference
\n \n
\n \n-

Access to matrices via blocks of pre-defined sizes. \n-More...

\n+

Go to the source code of this file.

\n \n \n \n \n \n+\n+\n+\n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
namespace  gtsam::treeTraversal
 Internal functions used for traversing trees.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

template<class FOREST , typename DATA , typename VISITOR_PRE , typename VISITOR_POST >
void gtsam::treeTraversal::DepthFirstForest (FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost)
 Traverse a forest depth-first with pre-order and post-order visits.
 
template<class FOREST , typename DATA , typename VISITOR_PRE >
void gtsam::treeTraversal::DepthFirstForest (FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre)
 Traverse a forest depth-first, with a pre-order visit but no post-order visit.
 
template<class FOREST , typename DATA , typename VISITOR_PRE , typename VISITOR_POST >
void gtsam::treeTraversal::DepthFirstForestParallel (FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)
 Traverse a forest depth-first with pre-order and post-order visits.
 
template<class FOREST >
FastVector< boost::shared_ptr< typename FOREST::Node > > gtsam::treeTraversal::CloneForest (const FOREST &forest)
 Clone a tree, copy-constructing new nodes (calling boost::make_shared) and setting up child pointers for a clone of the original tree.
 
template<class FOREST >
void gtsam::treeTraversal::PrintForest (const FOREST &forest, std::string str, const KeyFormatter &keyFormatter)
 Print a tree, prefixing each line with str, and formatting keys using keyFormatter.
 
\n

Detailed Description

\n-

Access to matrices via blocks of pre-defined sizes.

\n-

Used in GaussianFactor and GaussianConditional.

Author
Richard Roberts
\n-
Date
Sep 18, 2010
\n+
Author
Richard Roberts
\n+
Date
April 9, 2013
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,68 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymmetricBlockMatrix.cpp File Reference\n-Access to matrices via blocks of pre-defined sizes. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+treeTraversal-inst.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl\n+\u00a0 Internal functions used for traversing trees.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt\n+ (FOREST &forest, DATA &rootData,\n+ VISITOR_PRE &visitorPre, VISITOR_POST\n+ &visitorPost)\n+\u00a0 Traverse a forest depth-first with pre-\n+ order and post-order visits.\n+\u00a0\n+template\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt\n+ (FOREST &forest, DATA &rootData,\n+ VISITOR_PRE &visitorPre)\n+ Traverse a forest depth-first, with a\n+\u00a0 pre-order visit but no post-order\n+ visit.\n+\u00a0\n+template\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:\n+ _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl (FOREST\n+ &forest, DATA &rootData, VISITOR_PRE\n+ &visitorPre, VISITOR_POST &visitorPost,\n+ int problemSizeThreshold=10)\n+\u00a0 Traverse a forest depth-first with pre-\n+ order and post-order visits.\n+\u00a0\n+template\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br< boost::shared_ptr< typename _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt\n+ FOREST::Node > >\u00a0 (const FOREST &forest)\n+ Clone a tree, copy-constructing new\n+\u00a0 nodes (calling boost::make_shared) and\n+ setting up child pointers for a clone\n+ of the original tree.\n+\u00a0\n+template\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt\n+ (const FOREST &forest, std::string str,\n+ const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter)\n+ Print a tree, prefixing each line with\n+\u00a0 str, and formatting keys using\n+ keyFormatter.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Access to matrices via blocks of pre-defined sizes.\n-Used in GaussianFactor and _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl.\n Author\n Richard Roberts\n Date\n- Sep 18, 2010\n+ April 9, 2013\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bc_\bp_\bp\n+ * _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00110_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00110_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/GenericValue.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h Source File\n \n \n \n \n \n \n \n@@ -98,281 +98,171 @@\n
No Matches
\n \n \n \n \n \n
\n-
GenericValue.h
\n+
Testable.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file GenericValue.h
\n-
14 * @brief Wraps any type T so it can play as a Value
\n-
15 * @date October, 2014
\n-
16 * @author Michael Bosse, Abel Gawel, Renaud Dube
\n-
17 * based on DerivedValue.h by Duy Nguyen Ta
\n-
18 */
\n-
19
\n-
20#pragma once
\n-
21
\n-
22#include <gtsam/base/Manifold.h>
\n-
23#include <gtsam/base/types.h>
\n-
24#include <gtsam/base/Value.h>
\n-
25
\n-
26#include <boost/make_shared.hpp>
\n-
27#include <boost/pool/pool_alloc.hpp>
\n-
28
\n-
29#include <cmath>
\n-
30#include <iostream>
\n-
31#include <typeinfo> // operator typeid
\n-
32
\n-
33#ifdef _WIN32
\n-
34#define GENERICVALUE_VISIBILITY
\n-
35#else
\n-
36// This will trigger a LNKxxxx on MSVC, so disable for MSVC build
\n-
37// Please refer to https://github.com/borglab/gtsam/blob/develop/Using-GTSAM-EXPORT.md
\n-
38#define GENERICVALUE_VISIBILITY GTSAM_EXPORT
\n-
39#endif
\n-
40
\n-
41namespace gtsam {
\n-
42
\n-
46template<class T>
\n-
\n-
47class GenericValue: public Value {
\n+
32// \\callgraph
\n+
33
\n+
34#pragma once
\n+
35
\n+
36#include <boost/concept_check.hpp>
\n+
37#include <functional>
\n+
38#include <iostream>
\n+
39#include <memory>
\n+
40#include <string>
\n+
41
\n+
42#define GTSAM_PRINT(x)((x).print(#x))
\n+
43
\n+
44namespace gtsam {
\n+
45
\n+
46 // Forward declaration
\n+
47 template <typename T> struct traits;
\n
48
\n-
49public:
\n-
50
\n-
51 typedef T type;
\n-
52
\n-
53protected:
\n-
54
\n-\n-
56
\n-
57public:
\n-
58 // Only needed for serialization.
\n-
59 GenericValue(){}
\n-
60
\n-
\n-
62 GenericValue(const T& value) :
\n-
63 value_(value) {
\n-
64 }
\n-
\n-
65
\n-
\n-
67 const T& value() const {
\n-
68 return value_;
\n-
69 }
\n-
\n-
70
\n-
\n-
72 T& value() {
\n-
73 return value_;
\n-
74 }
\n-
\n-
75
\n-
\n-
77 ~GenericValue() override {
\n-
78 }
\n-
\n-
79
\n-
\n-
81 bool equals_(const Value& p, double tol = 1e-9) const override {
\n-
82 // Cast the base class Value pointer to a templated generic class pointer
\n-
83 const GenericValue& genericValue2 = static_cast<const GenericValue&>(p);
\n-
84 // Return the result of using the equals traits for the derived class
\n-
85 return traits<T>::Equals(this->value_, genericValue2.value_, tol);
\n+
57 template <class T>
\n+
\n+
58 class IsTestable {
\n+
59 T t;
\n+
60 bool r1,r2;
\n+
61 public:
\n+
62
\n+
63 BOOST_CONCEPT_USAGE(IsTestable) {
\n+
64 // check print function, with optional string
\n+
65 traits<T>::Print(t, std::string());
\n+\n+
67
\n+
68 // check print, with optional threshold
\n+
69 double tol = 1.0;
\n+
70 r1 = traits<T>::Equals(t,t,tol);
\n+
71 r2 = traits<T>::Equals(t,t);
\n+
72 }
\n+
73 }; // \\ Testable
\n+
\n+
74
\n+
75 inline void print(float v, const std::string& s = "") {
\n+
76 std::cout << (s.empty() ? s : s + " ") << v << std::endl;
\n+
77 }
\n+
78 inline void print(double v, const std::string& s = "") {
\n+
79 std::cout << (s.empty() ? s : s + " ") << v << std::endl;
\n+
80 }
\n+
81
\n+
83 template<class T>
\n+
\n+
84 inline bool equal(const T& obj1, const T& obj2, double tol) {
\n+
85 return traits<T>::Equals(obj1,obj2, tol);
\n
86 }
\n
\n
87
\n-
\n-
89 bool equals(const GenericValue &other, double tol = 1e-9) const {
\n-
90 return traits<T>::Equals(this->value(), other.value(), tol);
\n-
91 }
\n-
\n-
92
\n-
\n-
94 void print(const std::string& str) const override {
\n-
95 std::cout << "(" << demangle(typeid(T).name()) << ")\\n";
\n-\n-
97 }
\n-
\n-
98
\n-
\n-
102 Value* clone_() const override {
\n-
103 GenericValue* ptr = new GenericValue(*this); // calls copy constructor to fill in
\n-
104 return ptr;
\n-
105 }
\n+
89 template<class T>
\n+
\n+
90 inline bool equal(const T& obj1, const T& obj2) {
\n+
91 return traits<T>::Equals(obj1,obj2);
\n+
92 }
\n+
\n+
93
\n+
97 template<class V>
\n+
\n+
98 bool assert_equal(const V& expected, const V& actual, double tol = 1e-9) {
\n+
99 if (traits<V>::Equals(actual,expected, tol))
\n+
100 return true;
\n+
101 printf("Not equal:\\n");
\n+
102 traits<V>::Print(expected,"expected:\\n");
\n+
103 traits<V>::Print(actual,"actual:\\n");
\n+
104 return false;
\n+
105 }
\n
\n
106
\n-
\n-
110 void deallocate_() const override {
\n-
111 delete this;
\n-
112 }
\n-
\n-
113
\n-
\n-
117 boost::shared_ptr<Value> clone() const override {
\n-
118 return boost::allocate_shared<GenericValue>(Eigen::aligned_allocator<GenericValue>(), *this);
\n-
119 }
\n-
\n-
120
\n-
\n-
122 Value* retract_(const Vector& delta) const override {
\n-
123 // Call retract on the derived class using the retract trait function
\n-
124 const T retractResult = traits<T>::Retract(GenericValue<T>::value(), delta);
\n-
125
\n-
126 Value* resultAsValue = new GenericValue(retractResult);
\n-
127
\n-
128 // Return the pointer to the Value base class
\n-
129 return resultAsValue;
\n-
130 }
\n+
110 template<class V>
\n+
\n+
111 struct equals : public std::function<bool(const V&, const V&)> {
\n+
112 double tol_;
\n+
113 equals(double tol = 1e-9) : tol_(tol) {}
\n+
114 bool operator()(const V& expected, const V& actual) {
\n+
115 return (traits<V>::Equals(actual, expected, tol_));
\n+
116 }
\n+
117 };
\n+
\n+
118
\n+
122 template<class V>
\n+
\n+
123 struct equals_star : public std::function<bool(const std::shared_ptr<V>&, const std::shared_ptr<V>&)> {
\n+
124 double tol_;
\n+
125 equals_star(double tol = 1e-9) : tol_(tol) {}
\n+
126 bool operator()(const std::shared_ptr<V>& expected, const std::shared_ptr<V>& actual) {
\n+
127 if (!actual && !expected) return true;
\n+
128 return actual && expected && traits<V>::Equals(*actual,*expected, tol_);
\n+
129 }
\n+
130 };
\n
\n
131
\n-
\n-
133 Vector localCoordinates_(const Value& value2) const override {
\n-
134 // Cast the base class Value pointer to a templated generic class pointer
\n-
135 const GenericValue<T>& genericValue2 =
\n-
136 static_cast<const GenericValue<T>&>(value2);
\n-
137
\n-
138 // Return the result of calling localCoordinates trait on the derived class
\n-
139 return traits<T>::Local(GenericValue<T>::value(), genericValue2.value());
\n-
140 }
\n-
\n-
141
\n-
\n-
143 GenericValue retract(const Vector& delta) const {
\n-\n-
145 }
\n+
133 template<typename T>
\n+
\n+\n+
135
\n+
136 BOOST_CONCEPT_USAGE(HasTestablePrereqs) {
\n+
137 t->print(str);
\n+
138 b = t->equals(*s,tol);
\n+
139 }
\n+
140
\n+
141 T *t, *s; // Pointer is to allow abstract classes
\n+
142 bool b;
\n+
143 double tol;
\n+
144 std::string str;
\n+
145 };
\n
\n
146
\n-
\n-
148 Vector localCoordinates(const GenericValue& value2) const {
\n-
149 return localCoordinates_(value2);
\n-
150 }
\n-
\n-
151
\n-
\n-
153 size_t dim() const override {
\n-\n-
155 }
\n-
\n-
156
\n-
\n-
158 Value& operator=(const Value& rhs) override {
\n-
159 // Cast the base class Value pointer to a derived class pointer
\n-
160 const GenericValue& derivedRhs = static_cast<const GenericValue&>(rhs);
\n-
161
\n-
162 // Do the assignment and return the result
\n-
163 *this = GenericValue(derivedRhs); // calls copy constructor
\n-
164 return *this;
\n-
165 }
\n-
\n-
166
\n-
167 protected:
\n-
168
\n-
\n-\n-
172 Value::operator=(static_cast<Value const&>(rhs));
\n-
173 value_ = rhs.value_;
\n-
174 return *this;
\n-
175 }
\n-
\n-
176
\n-
177 private:
\n-
178
\n-\n-
181 template<class ARCHIVE>
\n-
182 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
183 ar & boost::serialization::make_nvp("GenericValue",
\n-
184 boost::serialization::base_object<Value>(*this));
\n-
185 ar & boost::serialization::make_nvp("value", value_);
\n-
186 }
\n-
187
\n-
188
\n-
189 // Alignment, see https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html
\n-
190 enum { NeedsToAlign = (sizeof(T) % 16) == 0 };
\n-
191public:
\n-\n-
193};
\n-
\n-
194
\n-
196#define GTSAM_VALUE_EXPORT(Type) BOOST_CLASS_EXPORT(gtsam::GenericValue<Type>)
\n-
197
\n-
198// traits
\n-
199template <typename ValueType>
\n-
\n-
200struct traits<GenericValue<ValueType> >
\n-
201 : public Testable<GenericValue<ValueType> > {};
\n-
\n-
202
\n-
203// define Value::cast here since now GenericValue has been declared
\n-
204template<typename ValueType>
\n-
\n-
205const ValueType& Value::cast() const {
\n-
206 return dynamic_cast<const GenericValue<ValueType>&>(*this).value();
\n-
207}
\n-
\n-
208
\n-
211template<class T>
\n-
\n-\n-
213 return GenericValue<T>(v);
\n-
214}
\n-
\n-
215
\n-
216
\n-
217} /* namespace gtsam */
\n-
Base class and basic functions for Manifold types.
\n-
Typedefs for easier changing of types.
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n-
The base class for any variable that can be optimized or used in a factor.
\n+
150 template<typename T>
\n+
\n+
151 struct Testable {
\n+
152
\n+
153 // Check that T has the necessary methods
\n+
154 BOOST_CONCEPT_ASSERT((HasTestablePrereqs<T>));
\n+
155
\n+
156 static void Print(const T& m, const std::string& str = "") {
\n+
157 m.print(str);
\n+
158 }
\n+
159 static bool Equals(const T& m1, const T& m2, double tol = 1e-8) {
\n+
160 return m1.equals(m2, tol);
\n+
161 }
\n+
162 };
\n+
\n+
163
\n+
164} // \\namespace gtsam
\n+
165
\n+
175#define GTSAM_CONCEPT_TESTABLE_INST(T) template class gtsam::IsTestable<T>;
\n+
176#define GTSAM_CONCEPT_TESTABLE_TYPE(T) using _gtsam_Testable_##T = gtsam::IsTestable<T>;
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::string demangle(const char *name)
Pretty print Value type name.
Definition types.cpp:37
\n-
GenericValue< T > genericValue(const T &v)
Functional constructor of GenericValue<T> so T can be automatically deduced.
Definition GenericValue.h:212
\n+
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
bool equal(const T &obj1, const T &obj2, double tol)
Call equal on the object.
Definition Testable.h:84
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Wraps any type T so it can play as a Value.
Definition GenericValue.h:47
\n-
Value * clone_() const override
Create a duplicate object returned as a pointer to the generic Value interface.
Definition GenericValue.h:102
\n-
T & value()
Return the value.
Definition GenericValue.h:72
\n-
Value * retract_(const Vector &delta) const override
Generic Value interface version of retract.
Definition GenericValue.h:122
\n-
Value & operator=(const Value &rhs) override
Assignment operator.
Definition GenericValue.h:158
\n-
void print(const std::string &str) const override
Virtual print function, uses traits.
Definition GenericValue.h:94
\n-
bool equals(const GenericValue &other, double tol=1e-9) const
non virtual equals function, uses traits
Definition GenericValue.h:89
\n-
size_t dim() const override
Return run-time dimensionality.
Definition GenericValue.h:153
\n-
GenericValue(const T &value)
Construct from value.
Definition GenericValue.h:62
\n-
void deallocate_() const override
Destroy and deallocate this object, only if it was originally allocated using clone_().
Definition GenericValue.h:110
\n-
T value_
The wrapped value.
Definition GenericValue.h:55
\n-
GenericValue< T > & operator=(const GenericValue< T > &rhs)
Assignment operator, protected because only the Value or DERIVED assignment operators should be used.
Definition GenericValue.h:171
\n-
Vector localCoordinates(const GenericValue &value2) const
Non-virtual version of localCoordinates.
Definition GenericValue.h:148
\n-
friend class boost::serialization::access
Serialization function.
Definition GenericValue.h:180
\n-
bool equals_(const Value &p, double tol=1e-9) const override
equals implementing generic Value interface
Definition GenericValue.h:81
\n-
const T & value() const
Return a constant value.
Definition GenericValue.h:67
\n-
~GenericValue() override
Destructor.
Definition GenericValue.h:77
\n-
GenericValue retract(const Vector &delta) const
Non-virtual version of retract.
Definition GenericValue.h:143
\n-
Vector localCoordinates_(const Value &value2) const override
Generic Value interface version of localCoordinates.
Definition GenericValue.h:133
\n-
boost::shared_ptr< Value > clone() const override
Clone this value (normal clone on the heap, delete with 'delete' operator)
Definition GenericValue.h:117
\n+
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
Binary predicate on shared pointers.
Definition Testable.h:123
\n+
Requirements on type to pass it to Testable template below.
Definition Testable.h:134
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n-
const ValueType & cast() const
Cast to known ValueType.
Definition GenericValue.h:205
\n-
virtual Value & operator=(const Value &)
Assignment operator.
Definition Value.h:79
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,324 +1,175 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GenericValue.h\n+Testable.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file GenericValue.h\n-14 * @brief Wraps any type T so it can play as a Value\n-15 * @date October, 2014\n-16 * @author Michael Bosse, Abel Gawel, Renaud Dube\n-17 * based on DerivedValue.h by Duy Nguyen Ta\n-18 */\n-19\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\ba_\bl_\bu_\be_\b._\bh>\n-25\n-26#include \n-27#include \n-28\n-29#include \n-30#include \n-31#include // operator typeid\n-32\n-33#ifdef _WIN32\n-34#define GENERICVALUE_VISIBILITY\n-35#else\n-36// This will trigger a LNKxxxx on MSVC, so disable for MSVC build\n-37// Please refer to https://github.com/borglab/gtsam/blob/develop/Using-GTSAM-\n-EXPORT.md\n-38#define GENERICVALUE_VISIBILITY GTSAM_EXPORT\n-39#endif\n-40\n-41namespace _\bg_\bt_\bs_\ba_\bm {\n-42\n-46template\n-_\b4_\b7class _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be: public _\bV_\ba_\bl_\bu_\be {\n+32// \\callgraph\n+33\n+34#pragma once\n+35\n+36#include \n+37#include \n+38#include \n+39#include \n+40#include \n+41\n+42#define GTSAM_PRINT(x)((x).print(#x))\n+43\n+44namespace _\bg_\bt_\bs_\ba_\bm {\n+45\n+46 // Forward declaration\n+47 template struct traits;\n 48\n-49public:\n-50\n-51 typedef T type;\n-52\n-53protected:\n-54\n-_\b5_\b5 T _\bv_\ba_\bl_\bu_\be_\b_;\n-56\n-57public:\n-58 // Only needed for serialization.\n-59 _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(){}\n-60\n-_\b6_\b2 _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(const T& _\bv_\ba_\bl_\bu_\be) :\n-63 _\bv_\ba_\bl_\bu_\be_\b_(_\bv_\ba_\bl_\bu_\be) {\n-64 }\n-65\n-_\b6_\b7 const T& _\bv_\ba_\bl_\bu_\be() const {\n-68 return _\bv_\ba_\bl_\bu_\be_\b_;\n-69 }\n-70\n-_\b7_\b2 T& _\bv_\ba_\bl_\bu_\be() {\n-73 return _\bv_\ba_\bl_\bu_\be_\b_;\n-74 }\n-75\n-_\b7_\b7 _\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be() override {\n-78 }\n-79\n-_\b8_\b1 bool _\be_\bq_\bu_\ba_\bl_\bs_\b_(const _\bV_\ba_\bl_\bu_\be& p, double tol = 1e-9) const override {\n-82 // Cast the base class Value pointer to a templated generic class pointer\n-83 const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be& genericValue2 = static_cast(p);\n-84 // Return the result of using the equals traits for the derived class\n-85 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->value_, genericValue2._\bv_\ba_\bl_\bu_\be_\b_, tol);\n+57 template \n+_\b5_\b8 class _\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+59 T t;\n+60 bool r1,r2;\n+61 public:\n+62\n+63 BOOST_CONCEPT_USAGE(_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be) {\n+64 // check print function, with optional string\n+65 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(t, std::string());\n+66 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(t);\n+67\n+68 // check print, with optional threshold\n+69 double tol = 1.0;\n+70 r1 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(t,t,tol);\n+71 r2 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(t,t);\n+72 }\n+73 }; // \\ Testable\n+74\n+75 inline void _\bp_\br_\bi_\bn_\bt(float v, const std::string& s = \"\") {\n+76 std::cout << (s.empty() ? s : s + \" \") << v << std::endl;\n+77 }\n+78 inline void _\bp_\br_\bi_\bn_\bt(double v, const std::string& s = \"\") {\n+79 std::cout << (s.empty() ? s : s + \" \") << v << std::endl;\n+80 }\n+81\n+83 template\n+_\b8_\b4 inline bool _\be_\bq_\bu_\ba_\bl(const T& obj1, const T& obj2, double tol) {\n+85 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(obj1,obj2, tol);\n 86 }\n 87\n-_\b8_\b9 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be &other, double tol = 1e-9) const {\n-90 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->_\bv_\ba_\bl_\bu_\be(), other._\bv_\ba_\bl_\bu_\be(), tol);\n-91 }\n-92\n-_\b9_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string& str) const override {\n-95 std::cout << \"(\" << _\bd_\be_\bm_\ba_\bn_\bg_\bl_\be(typeid(T).name()) << \")\\n\";\n-96 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(_\bv_\ba_\bl_\bu_\be_\b_, str);\n-97 }\n-98\n-_\b1_\b0_\b2 _\bV_\ba_\bl_\bu_\be* _\bc_\bl_\bo_\bn_\be_\b_() const override {\n-103 _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be* ptr = new _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(*this); // calls copy constructor to\n-fill in\n-104 return ptr;\n+89 template\n+_\b9_\b0 inline bool _\be_\bq_\bu_\ba_\bl(const T& obj1, const T& obj2) {\n+91 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(obj1,obj2);\n+92 }\n+93\n+97 template\n+_\b9_\b8 bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const V& expected, const V& actual, double tol = 1e-9) {\n+99 if (_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(actual,expected, tol))\n+100 return true;\n+101 printf(\"Not equal:\\n\");\n+102 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(expected,\"expected:\\n\");\n+103 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(actual,\"actual:\\n\");\n+104 return false;\n 105 }\n 106\n-_\b1_\b1_\b0 void _\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be_\b_() const override {\n-111 delete this;\n-112 }\n-113\n-_\b1_\b1_\b7 boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-118 return boost::allocate_shared(Eigen::\n-aligned_allocator(), *this);\n-119 }\n-120\n-_\b1_\b2_\b2 _\bV_\ba_\bl_\bu_\be* _\br_\be_\bt_\br_\ba_\bc_\bt_\b_(const Vector& delta) const override {\n-123 // Call retract on the derived class using the retract trait function\n-124 const T retractResult = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be(),\n-delta);\n-125\n-126 _\bV_\ba_\bl_\bu_\be* resultAsValue = new _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(retractResult);\n-127\n-128 // Return the pointer to the Value base class\n-129 return resultAsValue;\n-130 }\n+110 template\n+_\b1_\b1_\b1 struct _\be_\bq_\bu_\ba_\bl_\bs : public std::function {\n+112 double tol_;\n+113 _\be_\bq_\bu_\ba_\bl_\bs(double tol = 1e-9) : tol_(tol) {}\n+114 bool operator()(const V& expected, const V& actual) {\n+115 return (_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(actual, expected, tol_));\n+116 }\n+117 };\n+118\n+122 template\n+_\b1_\b2_\b3 struct _\be_\bq_\bu_\ba_\bl_\bs_\b__\bs_\bt_\ba_\br : public std::function&,\n+const std::shared_ptr&)> {\n+124 double tol_;\n+125 _\be_\bq_\bu_\ba_\bl_\bs_\b__\bs_\bt_\ba_\br(double tol = 1e-9) : tol_(tol) {}\n+126 bool operator()(const std::shared_ptr& expected, const std::\n+shared_ptr& actual) {\n+127 if (!actual && !expected) return true;\n+128 return actual && expected && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(*actual,*expected, tol_);\n+129 }\n+130 };\n 131\n-_\b1_\b3_\b3 Vector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\b_(const _\bV_\ba_\bl_\bu_\be& value2) const override {\n-134 // Cast the base class Value pointer to a templated generic class pointer\n-135 const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>& genericValue2 =\n-136 static_cast&>(value2);\n-137\n-138 // Return the result of calling localCoordinates trait on the derived class\n-139 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be(), genericValue2._\bv_\ba_\bl_\bu_\be());\n-140 }\n-141\n-_\b1_\b4_\b3 _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& delta) const {\n-144 return _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be(), delta));\n-145 }\n+133 template\n+_\b1_\b3_\b4 struct _\bH_\ba_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bP_\br_\be_\br_\be_\bq_\bs {\n+135\n+136 BOOST_CONCEPT_USAGE(_\bH_\ba_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bP_\br_\be_\br_\be_\bq_\bs) {\n+137 t->print(str);\n+138 b = t->equals(*s,tol);\n+139 }\n+140\n+141 T *t, *s; // Pointer is to allow abstract classes\n+142 bool b;\n+143 double tol;\n+144 std::string str;\n+145 };\n 146\n-_\b1_\b4_\b8 Vector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be& value2) const {\n-149 return _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\b_(value2);\n-150 }\n-151\n-_\b1_\b5_\b3 size_t _\bd_\bi_\bm() const override {\n-154 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(_\bv_\ba_\bl_\bu_\be_\b_);\n-155 }\n-156\n-_\b1_\b5_\b8 _\bV_\ba_\bl_\bu_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bV_\ba_\bl_\bu_\be& rhs) override {\n-159 // Cast the base class Value pointer to a derived class pointer\n-160 const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be& derivedRhs = static_cast(rhs);\n-161\n-162 // Do the assignment and return the result\n-163 *this = _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(derivedRhs); // calls copy constructor\n-164 return *this;\n-165 }\n-166\n-167 protected:\n-168\n-_\b1_\b7_\b1 _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>& rhs) {\n-172 _\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(static_cast<_\bV_\ba_\bl_\bu_\be const&>(rhs));\n-173 _\bv_\ba_\bl_\bu_\be_\b_ = rhs._\bv_\ba_\bl_\bu_\be_\b_;\n-174 return *this;\n-175 }\n-176\n-177 private:\n-178\n-_\b1_\b8_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-181 template\n-182 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-183 ar & boost::serialization::make_nvp(\"GenericValue\",\n-184 boost::serialization::base_object(*this));\n-185 ar & boost::serialization::make_nvp(\"value\", _\bv_\ba_\bl_\bu_\be_\b_);\n-186 }\n-187\n-188\n-189 // Alignment, see https://eigen.tuxfamily.org/dox/\n-group__TopicStructHavingEigenMembers.html\n-190 enum { NeedsToAlign = (sizeof(T) % 16) == 0 };\n-191public:\n-192 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(NeedsToAlign)\n-193};\n-194\n-196#define GTSAM_VALUE_EXPORT(Type) BOOST_CLASS_EXPORT(gtsam::\n-GenericValue)\n-197\n-198// traits\n-199template \n-_\b2_\b0_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be >\n-201 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n-202\n-203// define Value::cast here since now GenericValue has been declared\n-204template\n-_\b2_\b0_\b5const ValueType& _\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\ba_\bs_\bt() const {\n-206 return dynamic_cast&>(*this)._\bv_\ba_\bl_\bu_\be();\n-207}\n-208\n-211template\n-_\b2_\b1_\b2_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b> _\bg_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be(const T& v) {\n-213 return _\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bT_\b>(v);\n-214}\n-215\n-216\n-217} /* namespace gtsam */\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:317\n-_\bV_\ba_\bl_\bu_\be_\b._\bh\n-The base class for any variable that can be optimized or used in a factor.\n+150 template\n+_\b1_\b5_\b1 struct _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+152\n+153 // Check that T has the necessary methods\n+154 BOOST_CONCEPT_ASSERT((_\bH_\ba_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bP_\br_\be_\br_\be_\bq_\bs_\b<_\bT_\b>));\n+155\n+156 static void Print(const T& m, const std::string& str = \"\") {\n+157 m.print(str);\n+158 }\n+159 static bool Equals(const T& m1, const T& m2, double tol = 1e-8) {\n+160 return m1.equals(m2, tol);\n+161 }\n+162 };\n+163\n+164} // \\namespace gtsam\n+165\n+_\b1_\b7_\b5#define GTSAM_CONCEPT_TESTABLE_INST(T) template class gtsam::IsTestable;\n+176#define GTSAM_CONCEPT_TESTABLE_TYPE(T) using _gtsam_Testable_##T = gtsam::\n+IsTestable;\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bm_\ba_\bn_\bg_\bl_\be\n-std::string demangle(const char *name)\n-Pretty print Value type name.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.cpp:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n-GenericValue< T > genericValue(const T &v)\n-Functional constructor of GenericValue so T can be automatically deduced.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n+bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n+equals with an tolerance, prints out message if unequal\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl\n+bool equal(const T &obj1, const T &obj2, double tol)\n+Call equal on the object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:84\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n-Wraps any type T so it can play as a Value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be_\b_\n-Value * clone_() const override\n-Create a duplicate object returned as a pointer to the generic Value interface.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-T & value()\n-Return the value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt_\b_\n-Value * retract_(const Vector &delta) const override\n-Generic Value interface version of retract.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:122\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-Value & operator=(const Value &rhs) override\n-Assignment operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:158\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &str) const override\n-Virtual print function, uses traits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const GenericValue &other, double tol=1e-9) const\n-non virtual equals function, uses traits\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-Return run-time dimensionality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:153\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n-GenericValue(const T &value)\n-Construct from value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be_\b_\n-void deallocate_() const override\n-Destroy and deallocate this object, only if it was originally allocated using\n-clone_().\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b_\n-T value_\n-The wrapped value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-GenericValue< T > & operator=(const GenericValue< T > &rhs)\n-Assignment operator, protected because only the Value or DERIVED assignment\n-operators should be used.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:171\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-Vector localCoordinates(const GenericValue &value2) const\n-Non-virtual version of localCoordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:148\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:180\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs_\b_\n-bool equals_(const Value &p, double tol=1e-9) const override\n-equals implementing generic Value interface\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-const T & value() const\n-Return a constant value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n-~GenericValue() override\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-GenericValue retract(const Vector &delta) const\n-Non-virtual version of retract.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:143\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\b_\n-Vector localCoordinates_(const Value &value2) const override\n-Generic Value interface version of localCoordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:133\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-boost::shared_ptr< Value > clone() const override\n-Clone this value (normal clone on the heap, delete with 'delete' operator)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A testable concept check that should be placed in applicable unit tests and in\n+generic algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs_\b__\bs_\bt_\ba_\br\n+Binary predicate on shared pointers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bP_\br_\be_\br_\be_\bq_\bs\n+Requirements on type to pass it to Testable template below.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:134\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-This is the base class for any type to be stored in Values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\ba_\bs_\bt\n-const ValueType & cast() const\n-Cast to known ValueType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:205\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-virtual Value & operator=(const Value &)\n-Assignment operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:79\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * G\bGe\ben\bne\ber\bri\bic\bcV\bVa\bal\blu\bue\be.\b.h\bh\n+ * _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00113_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00113_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/chartTesting.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Vector.h Source File\n \n \n \n \n \n \n \n@@ -98,95 +98,192 @@\n
No Matches
\n
\n
\n
\n
\n \n
\n-
chartTesting.h
\n+
Vector.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file chartTesting.h
\n-
14 * @brief
\n-
15 * @date November, 2014
\n-
16 * @author Paul Furgale
\n-
17 */
\n-
18
\n-
19#pragma once
\n-
20
\n-
21#include <gtsam/base/Matrix.h>
\n-
22#include <gtsam/base/Manifold.h>
\n-
23#include <gtsam/base/Testable.h>
\n-
24#include <CppUnitLite/TestResult.h>
\n-
25#include <CppUnitLite/Test.h>
\n-
26#include <CppUnitLite/Failure.h>
\n+
21// \\callgraph
\n+
22
\n+
23#pragma once
\n+
24#ifndef MKL_BLAS
\n+
25#define MKL_BLAS MKL_DOMAIN_BLAS
\n+
26#endif
\n
27
\n-
\n-
28namespace gtsam {
\n-
29// Do a full concept check and test the invertibility of local() vs. retract().
\n-
30template<typename T>
\n-
31void testDefaultChart(TestResult& result_,
\n-
32 const std::string& name_,
\n-
33 const T& value) {
\n+\n+
29#include <Eigen/Core>
\n+
30#include <iosfwd>
\n+
31#include <list>
\n+
32
\n+
33namespace gtsam {
\n
34
\n-
35 GTSAM_CONCEPT_TESTABLE_TYPE(T)
\n+
35// Vector is just a typedef of the Eigen dynamic vector type
\n
36
\n-
37 typedef typename gtsam::DefaultChart<T> Chart;
\n-
38 typedef typename Chart::vector Vector;
\n+
37// Typedef arbitary length vector
\n+
38typedef Eigen::VectorXd Vector;
\n
39
\n-
40 // First, check the basic chart concept. This checks that the interface is satisfied.
\n-
41 // The rest of the function is even more detailed, checking the correctness of the chart.
\n-
42 BOOST_CONCEPT_ASSERT((ChartConcept<Chart>));
\n-
43
\n-
44 T other = value;
\n-
45
\n-
46 // Check that the dimension of the local value matches the chart dimension.
\n-
47 Vector dx = Chart::local(value, other);
\n-
48 EXPECT_LONGS_EQUAL(Chart::getDimension(value), dx.size());
\n-
49 // And that the "local" of a value vs. itself is zero.
\n-
50 EXPECT(assert_equal(Matrix(dx), Matrix(Eigen::VectorXd::Zero(dx.size()))));
\n-
51
\n-
52 // Test the invertibility of retract/local
\n-
53 dx.setRandom();
\n-
54 T updated = Chart::retract(value, dx);
\n-
55 Vector invdx = Chart::local(value, updated);
\n-
56 EXPECT(assert_equal(Matrix(dx), Matrix(invdx), 1e-9));
\n-
57
\n-
58 // And test that negative steps work as well.
\n-
59 dx = -dx;
\n-
60 updated = Chart::retract(value, dx);
\n-
61 invdx = Chart::local(value, updated);
\n-
62 EXPECT(assert_equal(Matrix(dx), Matrix(invdx), 1e-9));
\n-
63}
\n-
64} // namespace gtsam
\n-
\n-
65
\n-
68#define CHECK_CHART_CONCEPT(value) \\
\n-
69 { gtsam::testDefaultChart(result_, name_, value); }
\n-
Base class and basic functions for Manifold types.
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Concept check for values that can be used in unit tests.
\n+
40// Commonly used fixed size vectors
\n+
41typedef Eigen::Matrix<double, 1, 1> Vector1;
\n+
42typedef Eigen::Vector2d Vector2;
\n+
43typedef Eigen::Vector3d Vector3;
\n+
44
\n+
45static const Eigen::MatrixBase<Vector2>::ConstantReturnType Z_2x1 = Vector2::Zero();
\n+
46static const Eigen::MatrixBase<Vector3>::ConstantReturnType Z_3x1 = Vector3::Zero();
\n+
47
\n+
48// Create handy typedefs and constants for vectors with N>3
\n+
49// VectorN and Z_Nx1, for N=1..9
\n+
50#define GTSAM_MAKE_VECTOR_DEFS(N) \\
\n+
51 using Vector##N = Eigen::Matrix<double, N, 1>; \\
\n+
52 static const Eigen::MatrixBase<Vector##N>::ConstantReturnType Z_##N##x1 = Vector##N::Zero();
\n+
53
\n+
54GTSAM_MAKE_VECTOR_DEFS(4)
\n+
55GTSAM_MAKE_VECTOR_DEFS(5)
\n+
56GTSAM_MAKE_VECTOR_DEFS(6)
\n+
57GTSAM_MAKE_VECTOR_DEFS(7)
\n+
58GTSAM_MAKE_VECTOR_DEFS(8)
\n+
59GTSAM_MAKE_VECTOR_DEFS(9)
\n+
60GTSAM_MAKE_VECTOR_DEFS(10)
\n+
61GTSAM_MAKE_VECTOR_DEFS(11)
\n+
62GTSAM_MAKE_VECTOR_DEFS(12)
\n+
63GTSAM_MAKE_VECTOR_DEFS(15)
\n+
64
\n+
65typedef Eigen::VectorBlock<Vector> SubVector;
\n+
66typedef Eigen::VectorBlock<const Vector> ConstSubVector;
\n+
67
\n+
73#if defined(GTSAM_EIGEN_VERSION_WORLD)
\n+
74static_assert(
\n+
75 GTSAM_EIGEN_VERSION_WORLD==EIGEN_WORLD_VERSION &&
\n+
76 GTSAM_EIGEN_VERSION_MAJOR==EIGEN_MAJOR_VERSION,
\n+
77 "Error: GTSAM was built against a different version of Eigen");
\n+
78#endif
\n+
79
\n+
96GTSAM_EXPORT bool fpEqual(double a, double b, double tol,
\n+
97 bool check_relative_also = true);
\n+
98
\n+
102GTSAM_EXPORT void print(const Vector& v, const std::string& s, std::ostream& stream);
\n+
103
\n+
107GTSAM_EXPORT void print(const Vector& v, const std::string& s = "");
\n+
108
\n+
112GTSAM_EXPORT void save(const Vector& A, const std::string &s, const std::string& filename);
\n+
113
\n+
117GTSAM_EXPORT bool operator==(const Vector& vec1,const Vector& vec2);
\n+
118
\n+
124GTSAM_EXPORT bool greaterThanOrEqual(const Vector& v1, const Vector& v2);
\n+
125
\n+
129GTSAM_EXPORT bool equal_with_abs_tol(const Vector& vec1, const Vector& vec2, double tol=1e-9);
\n+
130GTSAM_EXPORT bool equal_with_abs_tol(const SubVector& vec1, const SubVector& vec2, double tol=1e-9);
\n+
131
\n+
\n+
135inline bool equal(const Vector& vec1, const Vector& vec2, double tol) {
\n+
136 return equal_with_abs_tol(vec1, vec2, tol);
\n+
137}
\n+
\n+
138
\n+
\n+
142inline bool equal(const Vector& vec1, const Vector& vec2) {
\n+
143 return equal_with_abs_tol(vec1, vec2);
\n+
144}
\n+
\n+
145
\n+
153GTSAM_EXPORT bool assert_equal(const Vector& vec1, const Vector& vec2, double tol=1e-9);
\n+
154
\n+
162GTSAM_EXPORT bool assert_inequal(const Vector& vec1, const Vector& vec2, double tol=1e-9);
\n+
163
\n+
171GTSAM_EXPORT bool assert_equal(const SubVector& vec1, const SubVector& vec2, double tol=1e-9);
\n+
172GTSAM_EXPORT bool assert_equal(const ConstSubVector& vec1, const ConstSubVector& vec2, double tol=1e-9);
\n+
173
\n+
181GTSAM_EXPORT bool linear_dependent(const Vector& vec1, const Vector& vec2, double tol=1e-9);
\n+
182
\n+
189GTSAM_EXPORT Vector ediv_(const Vector &a, const Vector &b);
\n+
190
\n+
194template<class V1, class V2>
\n+
\n+
195inline double dot(const V1 &a, const V2& b) {
\n+
196 assert (b.size()==a.size());
\n+
197 return a.dot(b);
\n+
198}
\n+
\n+
199
\n+
201template<class V1, class V2>
\n+
\n+
202inline double inner_prod(const V1 &a, const V2& b) {
\n+
203 assert (b.size()==a.size());
\n+
204 return a.dot(b);
\n+
205}
\n+
\n+
206
\n+
207#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
212inline void GTSAM_DEPRECATED scal(double alpha, Vector& x) { x *= alpha; }
\n+
213
\n+
218template<class V1, class V2>
\n+
219inline void GTSAM_DEPRECATED axpy(double alpha, const V1& x, V2& y) {
\n+
220 assert (y.size()==x.size());
\n+
221 y += alpha * x;
\n+
222}
\n+
223inline void axpy(double alpha, const Vector& x, SubVector y) {
\n+
224 assert (y.size()==x.size());
\n+
225 y += alpha * x;
\n+
226}
\n+
227#endif
\n+
228
\n+
234GTSAM_EXPORT std::pair<double,Vector> house(const Vector &x);
\n+
235
\n+
237GTSAM_EXPORT double houseInPlace(Vector &x);
\n+
238
\n+
249GTSAM_EXPORT std::pair<Vector, double>
\n+
250weightedPseudoinverse(const Vector& v, const Vector& weights);
\n+
251
\n+
252/*
\n+
253 * Fast version *no error checking* !
\n+
254 * Pass in initialized vector pseudo of size(weights) or will crash !
\n+
255 * @return the precision, pseudoinverse in third argument
\n+
256 */
\n+
257GTSAM_EXPORT double weightedPseudoinverse(const Vector& a, const Vector& weights, Vector& pseudo);
\n+
258
\n+
262GTSAM_EXPORT Vector concatVectors(const std::list<Vector>& vs);
\n+
263
\n+
267GTSAM_EXPORT Vector concatVectors(size_t nrVectors, ...);
\n+
268} // namespace gtsam
\n+
Included from all GTSAM files.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
Vector ediv_(const Vector &a, const Vector &b)
elementwise division, but 0/0 = 0, not inf
Definition Vector.cpp:199
\n+
bool greaterThanOrEqual(const Vector &vec1, const Vector &vec2)
Greater than or equal to operation returns true if all elements in v1 are greater than corresponding ...
Definition Vector.cpp:114
\n+
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition Matrix.cpp:167
\n
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n+
bool linear_dependent(const Matrix &A, const Matrix &B, double tol)
check whether the rows of two matrices are linear dependent
Definition Matrix.cpp:117
\n+
double inner_prod(const V1 &a, const V2 &b)
compatibility version for ublas' inner_prod()
Definition Vector.h:202
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
void axpy(double alpha, const Errors &x, Errors &y)
BLAS level 2 style AXPY, y := alpha*x + y
Definition Errors.cpp:111
\n+
bool assert_inequal(const Matrix &A, const Matrix &B, double tol)
inequals with an tolerance, prints out message if within tolerance
Definition Matrix.cpp:63
\n+
double houseInPlace(Vector &v)
beta = house(x) computes the HouseHolder vector in place
Definition Vector.cpp:212
\n+
bool equal(const T &obj1, const T &obj2, double tol)
Call equal on the object.
Definition Testable.h:84
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n+
bool fpEqual(double a, double b, double tol, bool check_relative_also)
Ensure we are not including a different version of Eigen in user code than while compiling gtsam,...
Definition Vector.cpp:42
\n+
Vector concatVectors(const std::list< Vector > &vs)
concatenate Vectors
Definition Vector.cpp:302
\n+
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n+
pair< double, Vector > house(const Vector &x)
house(x,j) computes HouseHolder vector v and scaling factor beta from x, such that the corresponding ...
Definition Vector.cpp:237
\n+
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition Matrix.h:100
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,95 +1,247 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-chartTesting.h\n+Vector.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file chartTesting.h\n-14 * @brief\n-15 * @date November, 2014\n-16 * @author Paul Furgale\n-17 */\n-18\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-24#include \n-25#include \n-26#include \n+21// \\callgraph\n+22\n+23#pragma once\n+24#ifndef MKL_BLAS\n+25#define MKL_BLAS MKL_DOMAIN_BLAS\n+26#endif\n 27\n-_\b2_\b8namespace _\bg_\bt_\bs_\ba_\bm {\n-29// Do a full concept check and test the invertibility of local() vs. retract\n-().\n-30template\n-31void testDefaultChart(TestResult& result_,\n-32 const std::string& name_,\n-33 const T& value) {\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+29#include \n+30#include \n+31#include \n+32\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n 34\n-35 GTSAM_CONCEPT_TESTABLE_TYPE(T)\n+35// Vector is just a typedef of the Eigen dynamic vector type\n 36\n-37 typedef typename gtsam::DefaultChart Chart;\n-38 typedef typename Chart::vector Vector;\n+37// Typedef arbitary length vector\n+38typedef Eigen::VectorXd Vector;\n 39\n-40 // First, check the basic chart concept. This checks that the interface is\n-satisfied.\n-41 // The rest of the function is even more detailed, checking the correctness\n-of the chart.\n-42 BOOST_CONCEPT_ASSERT((ChartConcept));\n-43\n-44 T other = value;\n-45\n-46 // Check that the dimension of the local value matches the chart dimension.\n-47 Vector dx = Chart::local(value, other);\n-48 EXPECT_LONGS_EQUAL(Chart::getDimension(value), dx.size());\n-49 // And that the \"local\" of a value vs. itself is zero.\n-50 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(Matrix(dx), Matrix(Eigen::VectorXd::Zero(dx.size()))));\n-51\n-52 // Test the invertibility of retract/local\n-53 dx.setRandom();\n-54 T updated = Chart::retract(value, dx);\n-55 Vector invdx = Chart::local(value, updated);\n-56 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(Matrix(dx), Matrix(invdx), 1e-9));\n-57\n-58 // And test that negative steps work as well.\n-59 dx = -dx;\n-60 updated = Chart::retract(value, dx);\n-61 invdx = Chart::local(value, updated);\n-62 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(Matrix(dx), Matrix(invdx), 1e-9));\n-63}\n-64} // namespace gtsam\n-65\n-68#define CHECK_CHART_CONCEPT(value) \\\n-69 { gtsam::testDefaultChart(result_, name_, value); }\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n+40// Commonly used fixed size vectors\n+41typedef Eigen::Matrix Vector1;\n+42typedef Eigen::Vector2d Vector2;\n+43typedef Eigen::Vector3d Vector3;\n+44\n+45static const Eigen::MatrixBase::ConstantReturnType Z_2x1 = Vector2::\n+Zero();\n+46static const Eigen::MatrixBase::ConstantReturnType Z_3x1 = Vector3::\n+Zero();\n+47\n+48// Create handy typedefs and constants for vectors with N>3\n+49// VectorN and Z_Nx1, for N=1..9\n+50#define GTSAM_MAKE_VECTOR_DEFS(N) \\\n+51 using Vector##N = Eigen::Matrix; \\\n+52 static const Eigen::MatrixBase::ConstantReturnType Z_##N##x1 =\n+Vector##N::Zero();\n+53\n+54GTSAM_MAKE_VECTOR_DEFS(4)\n+55GTSAM_MAKE_VECTOR_DEFS(5)\n+56GTSAM_MAKE_VECTOR_DEFS(6)\n+57GTSAM_MAKE_VECTOR_DEFS(7)\n+58GTSAM_MAKE_VECTOR_DEFS(8)\n+59GTSAM_MAKE_VECTOR_DEFS(9)\n+60GTSAM_MAKE_VECTOR_DEFS(10)\n+61GTSAM_MAKE_VECTOR_DEFS(11)\n+62GTSAM_MAKE_VECTOR_DEFS(12)\n+63GTSAM_MAKE_VECTOR_DEFS(15)\n+64\n+65typedef Eigen::VectorBlock SubVector;\n+66typedef Eigen::VectorBlock ConstSubVector;\n+67\n+73#if defined(GTSAM_EIGEN_VERSION_WORLD)\n+74static_assert(\n+75 GTSAM_EIGEN_VERSION_WORLD==EIGEN_WORLD_VERSION &&\n+76 GTSAM_EIGEN_VERSION_MAJOR==EIGEN_MAJOR_VERSION,\n+77 \"Error: GTSAM was built against a different version of Eigen\");\n+78#endif\n+79\n+96GTSAM_EXPORT bool _\bf_\bp_\bE_\bq_\bu_\ba_\bl(double a, double b, double tol,\n+97 bool check_relative_also = true);\n+98\n+102GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const Vector& v, const std::string& s, std::ostream&\n+stream);\n+103\n+107GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const Vector& v, const std::string& s = \"\");\n+108\n+112GTSAM_EXPORT void _\bs_\ba_\bv_\be(const Vector& A, const std::string &s, const std::\n+string& filename);\n+113\n+117GTSAM_EXPORT bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const Vector& vec1,const Vector& vec2);\n+118\n+124GTSAM_EXPORT bool _\bg_\br_\be_\ba_\bt_\be_\br_\bT_\bh_\ba_\bn_\bO_\br_\bE_\bq_\bu_\ba_\bl(const Vector& v1, const Vector& v2);\n+125\n+129GTSAM_EXPORT bool _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(const Vector& vec1, const Vector& vec2,\n+double tol=1e-9);\n+130GTSAM_EXPORT bool _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(const SubVector& vec1, const SubVector&\n+vec2, double tol=1e-9);\n+131\n+_\b1_\b3_\b5inline bool _\be_\bq_\bu_\ba_\bl(const Vector& vec1, const Vector& vec2, double tol) {\n+136 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(vec1, vec2, tol);\n+137}\n+138\n+_\b1_\b4_\b2inline bool _\be_\bq_\bu_\ba_\bl(const Vector& vec1, const Vector& vec2) {\n+143 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(vec1, vec2);\n+144}\n+145\n+153GTSAM_EXPORT bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const Vector& vec1, const Vector& vec2,\n+double tol=1e-9);\n+154\n+162GTSAM_EXPORT bool _\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl(const Vector& vec1, const Vector& vec2,\n+double tol=1e-9);\n+163\n+171GTSAM_EXPORT bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const SubVector& vec1, const SubVector& vec2,\n+double tol=1e-9);\n+172GTSAM_EXPORT bool _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(const ConstSubVector& vec1, const\n+ConstSubVector& vec2, double tol=1e-9);\n+173\n+181GTSAM_EXPORT bool _\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt(const Vector& vec1, const Vector& vec2,\n+double tol=1e-9);\n+182\n+189GTSAM_EXPORT Vector _\be_\bd_\bi_\bv_\b_(const Vector &a, const Vector &b);\n+190\n+194template\n+_\b1_\b9_\b5inline double _\bd_\bo_\bt(const V1 &a, const V2& b) {\n+196 assert (b.size()==a.size());\n+197 return a.dot(b);\n+198}\n+199\n+201template\n+_\b2_\b0_\b2inline double _\bi_\bn_\bn_\be_\br_\b__\bp_\br_\bo_\bd(const V1 &a, const V2& b) {\n+203 assert (b.size()==a.size());\n+204 return a.dot(b);\n+205}\n+206\n+207#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+212inline void GTSAM_DEPRECATED scal(double alpha, Vector& x) { x *= alpha; }\n+213\n+218template\n+219inline void GTSAM_DEPRECATED _\ba_\bx_\bp_\by(double alpha, const V1& x, V2& y) {\n+220 assert (y.size()==x.size());\n+221 y += alpha * x;\n+222}\n+223inline void _\ba_\bx_\bp_\by(double alpha, const Vector& x, SubVector y) {\n+224 assert (y.size()==x.size());\n+225 y += alpha * x;\n+226}\n+227#endif\n+228\n+234GTSAM_EXPORT std::pair _\bh_\bo_\bu_\bs_\be(const Vector &x);\n+235\n+237GTSAM_EXPORT double _\bh_\bo_\bu_\bs_\be_\bI_\bn_\bP_\bl_\ba_\bc_\be(Vector &x);\n+238\n+249GTSAM_EXPORT std::pair\n+250weightedPseudoinverse(const Vector& v, const Vector& weights);\n+251\n+252/*\n+253 * Fast version *no error checking* !\n+254 * Pass in initialized vector pseudo of size(weights) or will crash !\n+255 * @return the precision, pseudoinverse in third argument\n+256 */\n+257GTSAM_EXPORT double weightedPseudoinverse(const Vector& a, const Vector&\n+weights, Vector& pseudo);\n+258\n+262GTSAM_EXPORT Vector _\bc_\bo_\bn_\bc_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs(const std::list& vs);\n+263\n+267GTSAM_EXPORT Vector _\bc_\bo_\bn_\bc_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs(size_t nrVectors, ...);\n+268} // namespace gtsam\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bd_\bi_\bv_\b_\n+Vector ediv_(const Vector &a, const Vector &b)\n+elementwise division, but 0/0 = 0, not inf\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:199\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\br_\be_\ba_\bt_\be_\br_\bT_\bh_\ba_\bn_\bO_\br_\bE_\bq_\bu_\ba_\bl\n+bool greaterThanOrEqual(const Vector &vec1, const Vector &vec2)\n+Greater than or equal to operation returns true if all elements in v1 are\n+greater than corresponding ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\ba_\bv_\be\n+void save(const Matrix &A, const string &s, const string &filename)\n+save a matrix to file, which can be loaded by matlab\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:167\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n equals with an tolerance, prints out message if unequal\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt\n+bool linear_dependent(const Matrix &A, const Matrix &B, double tol)\n+check whether the rows of two matrices are linear dependent\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bn_\be_\br_\b__\bp_\br_\bo_\bd\n+double inner_prod(const V1 &a, const V2 &b)\n+compatibility version for ublas' inner_prod()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:202\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bx_\bp_\by\n+void axpy(double alpha, const Errors &x, Errors &y)\n+BLAS level 2 style AXPY, y := alpha*x + y\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl\n+bool assert_inequal(const Matrix &A, const Matrix &B, double tol)\n+inequals with an tolerance, prints out message if within tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+double houseInPlace(Vector &v)\n+beta = house(x) computes the HouseHolder vector in place\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl\n+bool equal(const T &obj1, const T &obj2, double tol)\n+Call equal on the object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bp_\bE_\bq_\bu_\ba_\bl\n+bool fpEqual(double a, double b, double tol, bool check_relative_also)\n+Ensure we are not including a different version of Eigen in user code than\n+while compiling gtsam,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bc_\ba_\bt_\bV_\be_\bc_\bt_\bo_\br_\bs\n+Vector concatVectors(const std::list< Vector > &vs)\n+concatenate Vectors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:302\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n+bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n+DenseBase< MATRIX > &B, double tol=1e-9)\n+equals with a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be\n+pair< double, Vector > house(const Vector &x)\n+house(x,j) computes HouseHolder vector v and scaling factor beta from x, such\n+that the corresponding ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.cpp:237\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(const Matrix &A, const Matrix &B)\n+equality is just equal_with_abs_tol 1e-9\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:100\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * c\bch\bha\bar\brt\btT\bTe\bes\bst\bti\bin\bng\bg.\b.h\bh\n+ * _\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00122.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00122.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/lieProxies.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/SymmetricBlockMatrix.h File Reference\n \n \n \n \n \n \n \n@@ -94,64 +94,45 @@\n \n \n \n \n \n
\n \n-
lieProxies.h File Reference
\n+Classes |\n+Namespaces
\n+
SymmetricBlockMatrix.h File Reference
\n \n
\n \n-

Provides convenient mappings of common member functions for testing. \n+

Access to matrices via blocks of pre-defined sizes. \n More...

\n \n

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::SymmetricBlockMatrix
 This class stores a dense matrix and allows it to be accessed as a collection of blocks. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-template<class T >
gtsam::testing::between (const T &t1, const T &t2)
 binary functions
 
\n-template<class T >
gtsam::testing::compose (const T &t1, const T &t2)
 
\n-template<class T >
gtsam::testing::inverse (const T &t)
 unary functions
 
\n-template<class T , class P >
gtsam::testing::rotate (const T &r, const P &pt)
 rotation functions
 
\n-template<class T , class P >
gtsam::testing::unrotate (const T &r, const P &pt)
 
\n

Detailed Description

\n-

Provides convenient mappings of common member functions for testing.

\n-
Author
Alex Cunningham
\n+

Access to matrices via blocks of pre-defined sizes.

\n+

Used in GaussianFactor and GaussianConditional.

Author
Richard Roberts
\n+
Date
Sep 18, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,40 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-lieProxies.h File Reference\n-Provides convenient mappings of common member functions for testing. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymmetricBlockMatrix.h File Reference\n+Access to matrices via blocks of pre-defined sizes. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+\u00a0 This class stores a dense matrix and allows it to be accessed as a\n+ collection of blocks. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-T\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bte\bes\bst\bti\bin\bng\bg:\b::\b:b\bbe\bet\btw\bwe\bee\ben\bn (const T &t1, const T &t2)\n-\u00a0 binary functions\n-\u00a0\n-template\n-T\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bte\bes\bst\bti\bin\bng\bg:\b::\b:c\bco\bom\bmp\bpo\bos\bse\be (const T &t1, const T &t2)\n-\u00a0\n-template\n-T\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bte\bes\bst\bti\bin\bng\bg:\b::\b:i\bin\bnv\bve\ber\brs\bse\be (const T &t)\n-\u00a0 unary functions\n-\u00a0\n-template\n-P\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bte\bes\bst\bti\bin\bng\bg:\b::\b:r\bro\bot\bta\bat\bte\be (const T &r, const P &pt)\n-\u00a0 rotation functions\n-\u00a0\n-template\n-P\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bte\bes\bst\bti\bin\bng\bg:\b::\b:u\bun\bnr\bro\bot\bta\bat\bte\be (const T &r, const P &pt)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Provides convenient mappings of common member functions for testing.\n+Access to matrices via blocks of pre-defined sizes.\n+Used in GaussianFactor and _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl.\n Author\n- Alex Cunningham\n+ Richard Roberts\n+ Date\n+ Sep 18, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\b._\bh\n+ * _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00122_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00122_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/lieProxies.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/SymmetricBlockMatrix.h Source File\n \n \n \n \n \n \n \n@@ -98,63 +98,439 @@\n
No Matches
\n \n \n \n \n \n
\n-
lieProxies.h
\n+
SymmetricBlockMatrix.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4* Atlanta, Georgia 30332-0415
\n+
5* All Rights Reserved
\n+
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8 * See LICENSE for the license information
\n+
8* See LICENSE for the license information
\n
9
\n-
10 * -------------------------------------------------------------------------- */
\n+
10* -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n-
21
\n-
31namespace gtsam {
\n-
32namespace testing {
\n-
33
\n-
35 template<class T>
\n-
36 T between(const T& t1, const T& t2) { return t1.between(t2); }
\n-
37
\n-
38 template<class T>
\n-
39 T compose(const T& t1, const T& t2) { return t1.compose(t2); }
\n-
40
\n-
42 template<class T>
\n-
43 T inverse(const T& t) { return t.inverse(); }
\n-
44
\n-
46 template<class T, class P>
\n-
47 P rotate(const T& r, const P& pt) { return r.rotate(pt); }
\n-
48
\n-
49 template<class T, class P>
\n-
50 P unrotate(const T& r, const P& pt) { return r.unrotate(pt); }
\n-
51
\n-
52} // \\namespace testing
\n-
53} // \\namespace gtsam
\n-
54
\n-
55
\n-
P rotate(const T &r, const P &pt)
rotation functions
Definition lieProxies.h:47
\n-
T between(const T &t1, const T &t2)
binary functions
Definition lieProxies.h:36
\n-
T inverse(const T &t)
unary functions
Definition lieProxies.h:43
\n-
Included from all GTSAM files.
\n+\n+
21#include <gtsam/base/Matrix.h>
\n+
22#include <gtsam/base/types.h>
\n+
23#include <gtsam/dllexport.h>
\n+
24#include <boost/serialization/nvp.hpp>
\n+
25#include <cassert>
\n+
26#include <stdexcept>
\n+
27#include <array>
\n+
28
\n+
29namespace boost {
\n+
30namespace serialization {
\n+
31class access;
\n+
32} /* namespace serialization */
\n+
33} /* namespace boost */
\n+
34
\n+
35namespace gtsam {
\n+
36
\n+
37 // Forward declarations
\n+
38 class VerticalBlockMatrix;
\n+
39
\n+
\n+
51 class GTSAM_EXPORT SymmetricBlockMatrix
\n+
52 {
\n+
53 public:
\n+\n+
55 typedef Eigen::Block<Matrix> Block;
\n+
56 typedef Eigen::Block<const Matrix> constBlock;
\n+
57
\n+
58 protected:
\n+
59 Matrix matrix_;
\n+\n+
61
\n+\n+
63
\n+
64 public:
\n+\n+
67
\n+
69 template<typename CONTAINER>
\n+
\n+
70 SymmetricBlockMatrix(const CONTAINER& dimensions, bool appendOneDimension = false) :
\n+
71 blockStart_(0)
\n+
72 {
\n+
73 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);
\n+
74 matrix_.resize(variableColOffsets_.back(), variableColOffsets_.back());
\n+
75 assertInvariants();
\n+
76 }
\n+
\n+
77
\n+
79 template<typename ITERATOR>
\n+
\n+
80 SymmetricBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension = false) :
\n+
81 blockStart_(0)
\n+
82 {
\n+
83 fillOffsets(firstBlockDim, lastBlockDim, appendOneDimension);
\n+
84 matrix_.resize(variableColOffsets_.back(), variableColOffsets_.back());
\n+
85 assertInvariants();
\n+
86 }
\n+
\n+
87
\n+
89 template<typename CONTAINER>
\n+
\n+
90 SymmetricBlockMatrix(const CONTAINER& dimensions, const Matrix& matrix, bool appendOneDimension = false) :
\n+
91 blockStart_(0)
\n+
92 {
\n+
93 matrix_.resize(matrix.rows(), matrix.cols());
\n+
94 matrix_.triangularView<Eigen::Upper>() = matrix.triangularView<Eigen::Upper>();
\n+
95 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);
\n+
96 if(matrix_.rows() != matrix_.cols())
\n+
97 throw std::invalid_argument("Requested to create a SymmetricBlockMatrix from a non-square matrix.");
\n+
98 if(variableColOffsets_.back() != matrix_.cols())
\n+
99 throw std::invalid_argument("Requested to create a SymmetricBlockMatrix with dimensions that do not sum to the total size of the provided matrix.");
\n+
100 assertInvariants();
\n+
101 }
\n+
\n+
102
\n+
106 static SymmetricBlockMatrix LikeActiveViewOf(const SymmetricBlockMatrix& other);
\n+
107
\n+
111 static SymmetricBlockMatrix LikeActiveViewOf(const VerticalBlockMatrix& other);
\n+
112
\n+
114 DenseIndex rows() const { assertInvariants(); return variableColOffsets_.back() - variableColOffsets_[blockStart_]; }
\n+
115
\n+
117 DenseIndex cols() const { return rows(); }
\n+
118
\n+
120 DenseIndex nBlocks() const { return nActualBlocks() - blockStart_; }
\n+
121
\n+
\n+\n+
124 return calcIndices(block, block, 1, 1)[2];
\n+
125 }
\n+
\n+
126
\n+
129
\n+
132 Matrix block(DenseIndex I, DenseIndex J) const;
\n+
133
\n+
\n+
135 Eigen::SelfAdjointView<Block, Eigen::Upper> diagonalBlock(DenseIndex J) {
\n+
136 return block_(J, J).selfadjointView<Eigen::Upper>();
\n+
137 }
\n+
\n+
138
\n+
\n+
140 Eigen::SelfAdjointView<constBlock, Eigen::Upper> diagonalBlock(DenseIndex J) const {
\n+
141 return block_(J, J).selfadjointView<Eigen::Upper>();
\n+
142 }
\n+
\n+
143
\n+
\n+
145 Vector diagonal(DenseIndex J) const {
\n+
146 return block_(J, J).diagonal();
\n+
147 }
\n+
\n+
148
\n+
\n+
150 constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const {
\n+
151 assert(I < J);
\n+
152 return block_(I, J);
\n+
153 }
\n+
\n+
154
\n+
\n+
156 Eigen::SelfAdjointView<constBlock, Eigen::Upper> selfadjointView(
\n+
157 DenseIndex I, DenseIndex J) const {
\n+
158 assert(J > I);
\n+
159 return block_(I, I, J - I, J - I).selfadjointView<Eigen::Upper>();
\n+
160 }
\n+
\n+
161
\n+
\n+
163 Eigen::TriangularView<constBlock, Eigen::Upper> triangularView(DenseIndex I,
\n+
164 DenseIndex J) const {
\n+
165 assert(J > I);
\n+
166 return block_(I, I, J - I, J - I).triangularView<Eigen::Upper>();
\n+
167 }
\n+
\n+
168
\n+
\n+
170 constBlock aboveDiagonalRange(DenseIndex i_startBlock,
\n+
171 DenseIndex i_endBlock,
\n+
172 DenseIndex j_startBlock,
\n+
173 DenseIndex j_endBlock) const {
\n+
174 assert(i_startBlock < j_startBlock);
\n+
175 assert(i_endBlock <= j_startBlock);
\n+
176 return block_(i_startBlock, j_startBlock, i_endBlock - i_startBlock,
\n+
177 j_endBlock - j_startBlock);
\n+
178 }
\n+
\n+
179
\n+
\n+
181 Block aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock,
\n+
182 DenseIndex j_startBlock, DenseIndex j_endBlock) {
\n+
183 assert(i_startBlock < j_startBlock);
\n+
184 assert(i_endBlock <= j_startBlock);
\n+
185 return block_(i_startBlock, j_startBlock, i_endBlock - i_startBlock,
\n+
186 j_endBlock - j_startBlock);
\n+
187 }
\n+
\n+
188
\n+
192
\n+
194 template <typename XprType>
\n+
\n+
195 void setDiagonalBlock(DenseIndex I, const XprType& xpr) {
\n+
196 block_(I, I).triangularView<Eigen::Upper>() = xpr.template triangularView<Eigen::Upper>();
\n+
197 }
\n+
\n+
198
\n+
200 template <typename XprType>
\n+
\n+
201 void setOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType& xpr) {
\n+
202 assert(I != J);
\n+
203 if (I < J) {
\n+
204 block_(I, J) = xpr;
\n+
205 } else {
\n+
206 block_(J, I) = xpr.transpose();
\n+
207 }
\n+
208 }
\n+
\n+
209
\n+
211 template <typename XprType>
\n+
\n+
212 void updateDiagonalBlock(DenseIndex I, const XprType& xpr) {
\n+
213 // TODO(gareth): Eigen won't let us add triangular or self-adjoint views
\n+
214 // here, so we do it manually.
\n+
215 auto dest = block_(I, I);
\n+
216 assert(dest.rows() == xpr.rows());
\n+
217 assert(dest.cols() == xpr.cols());
\n+
218 for (DenseIndex col = 0; col < dest.cols(); ++col) {
\n+
219 for (DenseIndex row = 0; row <= col; ++row) {
\n+
220 dest(row, col) += xpr(row, col);
\n+
221 }
\n+
222 }
\n+
223 }
\n+
\n+
224
\n+
227 template <typename XprType>
\n+
\n+
228 void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType& xpr) {
\n+
229 assert(I != J);
\n+
230 if (I < J) {
\n+
231 block_(I, J).noalias() += xpr;
\n+
232 } else {
\n+
233 block_(J, I).noalias() += xpr.transpose();
\n+
234 }
\n+
235 }
\n+
\n+
236
\n+
240
\n+
\n+
242 Eigen::SelfAdjointView<Block, Eigen::Upper> selfadjointView() {
\n+
243 return full().selfadjointView<Eigen::Upper>();
\n+
244 }
\n+
\n+
245
\n+
\n+
247 Eigen::SelfAdjointView<constBlock, Eigen::Upper> selfadjointView() const {
\n+
248 return full().selfadjointView<Eigen::Upper>();
\n+
249 }
\n+
\n+
250
\n+
252 template <typename XprType>
\n+
\n+
253 void setFullMatrix(const XprType& xpr) {
\n+
254 full().triangularView<Eigen::Upper>() = xpr.template triangularView<Eigen::Upper>();
\n+
255 }
\n+
\n+
256
\n+
\n+
258 void setZero() {
\n+
259 full().triangularView<Eigen::Upper>().setZero();
\n+
260 }
\n+
\n+
261
\n+
263 void negate();
\n+
264
\n+
266 void invertInPlace();
\n+
267
\n+
269
\n+
273 DenseIndex& blockStart() { return blockStart_; }
\n+
274
\n+
277 DenseIndex blockStart() const { return blockStart_; }
\n+
278
\n+
289 void choleskyPartial(DenseIndex nFrontals);
\n+
290
\n+\n+
297
\n+
298 protected:
\n+
299
\n+
\n+\n+
302 return variableColOffsets_.size();
\n+
303 }
\n+
\n+
304
\n+
\n+\n+
307 return nOffsets() - 1;
\n+
308 }
\n+
\n+
309
\n+
\n+\n+
312 assert(block >= 0);
\n+
313 const DenseIndex actual_index = block + blockStart();
\n+
314 assert(actual_index < nOffsets());
\n+
315 return variableColOffsets_[actual_index];
\n+
316 }
\n+
\n+
317
\n+
\n+
319 constBlock block_(DenseIndex iBlock, DenseIndex jBlock,
\n+
320 DenseIndex blockRows = 1, DenseIndex blockCols = 1) const {
\n+
321 const std::array<DenseIndex, 4> indices =
\n+
322 calcIndices(iBlock, jBlock, blockRows, blockCols);
\n+
323 return matrix_.block(indices[0], indices[1], indices[2], indices[3]);
\n+
324 }
\n+
\n+
325
\n+
\n+
327 Block block_(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows = 1,
\n+
328 DenseIndex blockCols = 1) {
\n+
329 const std::array<DenseIndex, 4> indices =
\n+
330 calcIndices(iBlock, jBlock, blockRows, blockCols);
\n+
331 return matrix_.block(indices[0], indices[1], indices[2], indices[3]);
\n+
332 }
\n+
\n+
333
\n+
\n+
335 constBlock full() const {
\n+
336 return block_(0, 0, nBlocks(), nBlocks());
\n+
337 }
\n+
\n+
338
\n+
\n+
340 Block full() {
\n+
341 return block_(0, 0, nBlocks(), nBlocks());
\n+
342 }
\n+
\n+
343
\n+
\n+
345 std::array<DenseIndex, 4> calcIndices(DenseIndex iBlock, DenseIndex jBlock,
\n+
346 DenseIndex blockRows,
\n+
347 DenseIndex blockCols) const {
\n+
348 assert(blockRows >= 0);
\n+
349 assert(blockCols >= 0);
\n+
350
\n+
351 // adjust indices to account for start and size of blocks
\n+
352 const DenseIndex denseI = offset(iBlock);
\n+
353 const DenseIndex denseJ = offset(jBlock);
\n+
354 const DenseIndex denseRows = offset(iBlock + blockRows) - denseI;
\n+
355 const DenseIndex denseCols = offset(jBlock + blockCols) - denseJ;
\n+
356 return {{denseI, denseJ, denseRows, denseCols}};
\n+
357 }
\n+
\n+
358
\n+
359 void assertInvariants() const
\n+
360 {
\n+
361 assert(matrix_.rows() == matrix_.cols());
\n+
362 assert(matrix_.cols() == variableColOffsets_.back());
\n+
363 assert(blockStart_ < (DenseIndex)variableColOffsets_.size());
\n+
364 }
\n+
365
\n+
366 template<typename ITERATOR>
\n+
367 void fillOffsets(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension)
\n+
368 {
\n+
369 variableColOffsets_.resize((lastBlockDim-firstBlockDim) + 1 + (appendOneDimension ? 1 : 0));
\n+
370 variableColOffsets_[0] = 0;
\n+
371 DenseIndex j=0;
\n+
372 for(ITERATOR dim=firstBlockDim; dim!=lastBlockDim; ++dim) {
\n+
373 variableColOffsets_[j+1] = variableColOffsets_[j] + *dim;
\n+
374 ++ j;
\n+
375 }
\n+
376 if(appendOneDimension)
\n+
377 {
\n+
378 variableColOffsets_[j+1] = variableColOffsets_[j] + 1;
\n+
379 ++ j;
\n+
380 }
\n+
381 }
\n+
382
\n+
383 friend class VerticalBlockMatrix;
\n+
384 template<typename SymmetricBlockMatrixType> friend class SymmetricBlockMatrixBlockExpr;
\n+
385
\n+
386 private:
\n+
388 friend class boost::serialization::access;
\n+
389 template<class ARCHIVE>
\n+
390 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
391 // Fill in the lower triangle part of the matrix, so boost::serialization won't
\n+
392 // complain about uninitialized data with an input_stream_error exception
\n+
393 // http://www.boost.org/doc/libs/1_37_0/libs/serialization/doc/exceptions.html#stream_error
\n+
394 matrix_.triangularView<Eigen::Lower>() = matrix_.triangularView<Eigen::Upper>().transpose();
\n+
395 ar & BOOST_SERIALIZATION_NVP(matrix_);
\n+
396 ar & BOOST_SERIALIZATION_NVP(variableColOffsets_);
\n+
397 ar & BOOST_SERIALIZATION_NVP(blockStart_);
\n+
398 }
\n+
399 };
\n+
\n+
400
\n+
402 class CholeskyFailed;
\n+
403
\n+
404}
\n+
Typedefs for easier changing of types.
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)
Extracts a row view from a matrix that avoids a copy.
Definition Matrix.h:222
\n+
void split(const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)
Split the graph into two parts: one corresponds to the given spanning tree, and the other corresponds...
Definition graph-inl.h:255
\n+
bool choleskyPartial(Matrix &ABC, size_t nFrontal, size_t topleft)
Partial Cholesky computes a factor [R S such that [R' 0 [R S = [A B 0 L] S' I] 0 L] B' C].
Definition cholesky.cpp:108
\n+
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n+
Block full()
Get the full matrix as a block.
Definition SymmetricBlockMatrix.h:340
\n+
DenseIndex blockStart_
Changes apparent matrix view, see main class comment.
Definition SymmetricBlockMatrix.h:62
\n+
void setDiagonalBlock(DenseIndex I, const XprType &xpr)
Set a diagonal block. Only the upper triangular portion of xpr is evaluated.
Definition SymmetricBlockMatrix.h:195
\n+
DenseIndex nActualBlocks() const
Number of actual blocks in the full matrix.
Definition SymmetricBlockMatrix.h:306
\n+
Vector diagonal(DenseIndex J) const
Get the diagonal of the J'th diagonal block.
Definition SymmetricBlockMatrix.h:145
\n+
Matrix matrix_
The full matrix.
Definition SymmetricBlockMatrix.h:59
\n+
DenseIndex cols() const
Column size.
Definition SymmetricBlockMatrix.h:117
\n+
DenseIndex getDim(DenseIndex block) const
Number of dimensions for variable on this diagonal block.
Definition SymmetricBlockMatrix.h:123
\n+
void setZero()
Set the entire active matrix zero.
Definition SymmetricBlockMatrix.h:258
\n+
void setOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)
Set an off-diagonal block. Only the upper triangular portion of xpr is evaluated.
Definition SymmetricBlockMatrix.h:201
\n+
void setFullMatrix(const XprType &xpr)
Set the entire active matrix. Only reads the upper triangular part of xpr.
Definition SymmetricBlockMatrix.h:253
\n+
Eigen::SelfAdjointView< Block, Eigen::Upper > selfadjointView()
Get self adjoint view.
Definition SymmetricBlockMatrix.h:242
\n+
constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const
Get block above the diagonal (I, J).
Definition SymmetricBlockMatrix.h:150
\n+
constBlock block_(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows=1, DenseIndex blockCols=1) const
Get an arbitrary block from the matrix. Indices are in block units.
Definition SymmetricBlockMatrix.h:319
\n+
constBlock full() const
Get the full matrix as a block.
Definition SymmetricBlockMatrix.h:335
\n+
DenseIndex rows() const
Row size.
Definition SymmetricBlockMatrix.h:114
\n+
Block aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock, DenseIndex j_startBlock, DenseIndex j_endBlock)
Get a range [i,j) from the matrix. Indices are in block units.
Definition SymmetricBlockMatrix.h:181
\n+
Eigen::TriangularView< constBlock, Eigen::Upper > triangularView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j) as a triangular view.
Definition SymmetricBlockMatrix.h:163
\n+
Eigen::SelfAdjointView< constBlock, Eigen::Upper > diagonalBlock(DenseIndex J) const
Return the J'th diagonal block as a self adjoint view.
Definition SymmetricBlockMatrix.h:140
\n+
SymmetricBlockMatrix(const CONTAINER &dimensions, const Matrix &matrix, bool appendOneDimension=false)
Construct from a container of the sizes of each vertical block and a pre-prepared matrix.
Definition SymmetricBlockMatrix.h:90
\n+
DenseIndex blockStart() const
Retrieve the first logical block, i.e.
Definition SymmetricBlockMatrix.h:277
\n+
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView() const
Get self adjoint view.
Definition SymmetricBlockMatrix.h:247
\n+
void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)
Update an off diagonal block.
Definition SymmetricBlockMatrix.h:228
\n+
SymmetricBlockMatrix(const CONTAINER &dimensions, bool appendOneDimension=false)
Construct from a container of the sizes of each block.
Definition SymmetricBlockMatrix.h:70
\n+
SymmetricBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension=false)
Construct from iterator over the sizes of each vertical block.
Definition SymmetricBlockMatrix.h:80
\n+
DenseIndex & blockStart()
Retrieve or modify the first logical block, i.e.
Definition SymmetricBlockMatrix.h:273
\n+
constBlock aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock, DenseIndex j_startBlock, DenseIndex j_endBlock) const
Get a range [i,j) from the matrix. Indices are in block units.
Definition SymmetricBlockMatrix.h:170
\n+
Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)
Return the J'th diagonal block as a self adjoint view.
Definition SymmetricBlockMatrix.h:135
\n+
Block block_(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows=1, DenseIndex blockCols=1)
Get an arbitrary block from the matrix. Indices are in block units.
Definition SymmetricBlockMatrix.h:327
\n+
void updateDiagonalBlock(DenseIndex I, const XprType &xpr)
Increment the diagonal block by the values in xpr. Only reads the upper triangular part of xpr.
Definition SymmetricBlockMatrix.h:212
\n+
DenseIndex nOffsets() const
Number of offsets in the full matrix.
Definition SymmetricBlockMatrix.h:301
\n+
std::array< DenseIndex, 4 > calcIndices(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows, DenseIndex blockCols) const
Compute the indices into the underlying matrix for a given block.
Definition SymmetricBlockMatrix.h:345
\n+
DenseIndex nBlocks() const
Block count.
Definition SymmetricBlockMatrix.h:120
\n+
FastVector< DenseIndex > variableColOffsets_
the starting columns of each block (0-based)
Definition SymmetricBlockMatrix.h:60
\n+
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j).
Definition SymmetricBlockMatrix.h:156
\n+
DenseIndex offset(DenseIndex block) const
Get an offset for a block index (in the active view).
Definition SymmetricBlockMatrix.h:311
\n+
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,67 +1,546 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-lieProxies.h\n+SymmetricBlockMatrix.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4* Atlanta, Georgia 30332-0415\n+5* All Rights Reserved\n+6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8 * See LICENSE for the license information\n+8* See LICENSE for the license information\n 9\n-10 * -------------------------------------------------------------------------\n+10* -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-21\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32namespace testing {\n-33\n-35 template\n-_\b3_\b6 T _\bb_\be_\bt_\bw_\be_\be_\bn(const T& t1, const T& t2) { return t1.between(t2); }\n-37\n-38 template\n-39 T compose(const T& t1, const T& t2) { return t1.compose(t2); }\n-40\n-42 template\n-_\b4_\b3 T _\bi_\bn_\bv_\be_\br_\bs_\be(const T& t) { return t.inverse(); }\n-44\n-46 template\n-_\b4_\b7 P _\br_\bo_\bt_\ba_\bt_\be(const T& r, const P& pt) { return r.rotate(pt); }\n-48\n-49 template\n-50 P unrotate(const T& r, const P& pt) { return r.unrotate(pt); }\n-51\n-52} // \\namespace testing\n-53} // \\namespace gtsam\n-54\n-55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\be_\bs_\bt_\bi_\bn_\bg_\b:_\b:_\br_\bo_\bt_\ba_\bt_\be\n-P rotate(const T &r, const P &pt)\n-rotation functions\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lieProxies.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\be_\bs_\bt_\bi_\bn_\bg_\b:_\b:_\bb_\be_\bt_\bw_\be_\be_\bn\n-T between(const T &t1, const T &t2)\n-binary functions\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lieProxies.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\be_\bs_\bt_\bi_\bn_\bg_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n-T inverse(const T &t)\n-unary functions\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lieProxies.h:43\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+23#include \n+24#include \n+25#include \n+26#include \n+27#include \n+28\n+29namespace boost {\n+30namespace serialization {\n+31class access;\n+32} /* namespace serialization */\n+33} /* namespace boost */\n+34\n+35namespace _\bg_\bt_\bs_\ba_\bm {\n+36\n+37 // Forward declarations\n+38 class VerticalBlockMatrix;\n+39\n+_\b5_\b1 class GTSAM_EXPORT _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+52 {\n+53 public:\n+54 typedef _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bT_\bh_\bi_\bs;\n+55 typedef Eigen::Block Block;\n+56 typedef Eigen::Block constBlock;\n+57\n+58 protected:\n+_\b5_\b9 Matrix _\bm_\ba_\bt_\br_\bi_\bx_\b_;\n+_\b6_\b0 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx_\b> _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bC_\bo_\bl_\bO_\bf_\bf_\bs_\be_\bt_\bs_\b_;\n+61\n+_\b6_\b2 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt_\b_;\n+63\n+64 public:\n+66 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx();\n+67\n+69 template\n+_\b7_\b0 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(const CONTAINER& dimensions, bool appendOneDimension =\n+false) :\n+71 blockStart_(0)\n+72 {\n+73 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);\n+74 matrix_.resize(variableColOffsets_.back(), variableColOffsets_.back());\n+75 assertInvariants();\n+76 }\n+77\n+79 template\n+_\b8_\b0 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool\n+appendOneDimension = false) :\n+81 blockStart_(0)\n+82 {\n+83 fillOffsets(firstBlockDim, lastBlockDim, appendOneDimension);\n+84 matrix_.resize(variableColOffsets_.back(), variableColOffsets_.back());\n+85 assertInvariants();\n+86 }\n+87\n+89 template\n+_\b9_\b0 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(const CONTAINER& dimensions, const Matrix& matrix, bool\n+appendOneDimension = false) :\n+91 blockStart_(0)\n+92 {\n+93 matrix_.resize(matrix.rows(), matrix.cols());\n+94 matrix_.triangularView() = matrix.triangularView\n+();\n+95 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);\n+96 if(matrix_.rows() != matrix_.cols())\n+97 throw std::invalid_argument(\"Requested to create a SymmetricBlockMatrix from\n+a non-square matrix.\");\n+98 if(variableColOffsets_.back() != matrix_.cols())\n+99 throw std::invalid_argument(\"Requested to create a SymmetricBlockMatrix with\n+dimensions that do not sum to the total size of the provided matrix.\");\n+100 assertInvariants();\n+101 }\n+102\n+106 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx LikeActiveViewOf(const _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n+other);\n+107\n+111 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx LikeActiveViewOf(const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n+other);\n+112\n+_\b1_\b1_\b4 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\br_\bo_\bw_\bs() const { assertInvariants(); return\n+variableColOffsets_.back() - variableColOffsets_[blockStart_]; }\n+115\n+_\b1_\b1_\b7 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bc_\bo_\bl_\bs() const { return rows(); }\n+118\n+_\b1_\b2_\b0 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bn_\bB_\bl_\bo_\bc_\bk_\bs() const { return nActualBlocks() - blockStart_; }\n+121\n+_\b1_\b2_\b3 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bD_\bi_\bm(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx block) const {\n+124 return calcIndices(block, block, 1, 1)[2];\n+125 }\n+126\n+129\n+132 Matrix block(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) const;\n+133\n+_\b1_\b3_\b5 Eigen::SelfAdjointView _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) {\n+136 return block_(J, J).selfadjointView();\n+137 }\n+138\n+_\b1_\b4_\b0 Eigen::SelfAdjointView _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+J) const {\n+141 return block_(J, J).selfadjointView();\n+142 }\n+143\n+_\b1_\b4_\b5 Vector _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) const {\n+146 return block_(J, J).diagonal();\n+147 }\n+148\n+_\b1_\b5_\b0 constBlock _\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) const {\n+151 assert(I < J);\n+152 return block_(I, J);\n+153 }\n+154\n+_\b1_\b5_\b6 Eigen::SelfAdjointView _\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw(\n+157 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) const {\n+158 assert(J > I);\n+159 return block_(I, I, J - I, J - I).selfadjointView();\n+160 }\n+161\n+_\b1_\b6_\b3 Eigen::TriangularView _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\br_\bV_\bi_\be_\bw(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+I,\n+164 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J) const {\n+165 assert(J > I);\n+166 return block_(I, I, J - I, J - I).triangularView();\n+167 }\n+168\n+_\b1_\b7_\b0 constBlock _\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i_startBlock,\n+171 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i_endBlock,\n+172 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j_startBlock,\n+173 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j_endBlock) const {\n+174 assert(i_startBlock < j_startBlock);\n+175 assert(i_endBlock <= j_startBlock);\n+176 return block_(i_startBlock, j_startBlock, i_endBlock - i_startBlock,\n+177 j_endBlock - j_startBlock);\n+178 }\n+179\n+_\b1_\b8_\b1 Block _\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i_startBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i_endBlock,\n+182 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j_startBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j_endBlock) {\n+183 assert(i_startBlock < j_startBlock);\n+184 assert(i_endBlock <= j_startBlock);\n+185 return block_(i_startBlock, j_startBlock, i_endBlock - i_startBlock,\n+186 j_endBlock - j_startBlock);\n+187 }\n+188\n+192\n+194 template \n+_\b1_\b9_\b5 void _\bs_\be_\bt_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, const XprType& xpr) {\n+196 block_(I, I).triangularView() = xpr.template\n+triangularView();\n+197 }\n+198\n+200 template \n+_\b2_\b0_\b1 void _\bs_\be_\bt_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J, const XprType& xpr) {\n+202 assert(I != J);\n+203 if (I < J) {\n+204 block_(I, J) = xpr;\n+205 } else {\n+206 block_(J, I) = xpr.transpose();\n+207 }\n+208 }\n+209\n+211 template \n+_\b2_\b1_\b2 void _\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, const XprType& xpr) {\n+213 // TODO(gareth): Eigen won't let us add triangular or self-adjoint views\n+214 // here, so we do it manually.\n+215 auto dest = block_(I, I);\n+216 assert(dest.rows() == xpr.rows());\n+217 assert(dest.cols() == xpr.cols());\n+218 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx col = 0; col < dest.cols(); ++col) {\n+219 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\br_\bo_\bw = 0; _\br_\bo_\bw <= col; ++_\br_\bo_\bw) {\n+220 dest(_\br_\bo_\bw, col) += xpr(_\br_\bo_\bw, col);\n+221 }\n+222 }\n+223 }\n+224\n+227 template \n+_\b2_\b2_\b8 void _\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx I, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx J, const XprType& xpr)\n+{\n+229 assert(I != J);\n+230 if (I < J) {\n+231 block_(I, J).noalias() += xpr;\n+232 } else {\n+233 block_(J, I).noalias() += xpr.transpose();\n+234 }\n+235 }\n+236\n+240\n+_\b2_\b4_\b2 Eigen::SelfAdjointView _\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw() {\n+243 return full().selfadjointView();\n+244 }\n+245\n+_\b2_\b4_\b7 Eigen::SelfAdjointView _\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw() const {\n+248 return full().selfadjointView();\n+249 }\n+250\n+252 template \n+_\b2_\b5_\b3 void _\bs_\be_\bt_\bF_\bu_\bl_\bl_\bM_\ba_\bt_\br_\bi_\bx(const XprType& xpr) {\n+254 full().triangularView() = xpr.template triangularView();\n+255 }\n+256\n+_\b2_\b5_\b8 void _\bs_\be_\bt_\bZ_\be_\br_\bo() {\n+259 full().triangularView().setZero();\n+260 }\n+261\n+263 void negate();\n+264\n+266 void invertInPlace();\n+267\n+269\n+_\b2_\b7_\b3 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt() { return blockStart_; }\n+274\n+_\b2_\b7_\b7 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt() const { return blockStart_; }\n+278\n+289 void _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx nFrontals);\n+290\n+296 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bs_\bp_\bl_\bi_\bt(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx nFrontals);\n+297\n+298 protected:\n+299\n+_\b3_\b0_\b1 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bn_\bO_\bf_\bf_\bs_\be_\bt_\bs() const {\n+302 return variableColOffsets_.size();\n+303 }\n+304\n+_\b3_\b0_\b6 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bn_\bA_\bc_\bt_\bu_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bs() const {\n+307 return nOffsets() - 1;\n+308 }\n+309\n+_\b3_\b1_\b1 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bo_\bf_\bf_\bs_\be_\bt(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx block) const {\n+312 assert(block >= 0);\n+313 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actual_index = block + blockStart();\n+314 assert(actual_index < nOffsets());\n+315 return variableColOffsets_[actual_index];\n+316 }\n+317\n+_\b3_\b1_\b9 constBlock _\bb_\bl_\bo_\bc_\bk_\b_(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx iBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx jBlock,\n+320 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockRows = 1, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockCols = 1) const {\n+321 const std::array indices =\n+322 calcIndices(iBlock, jBlock, blockRows, blockCols);\n+323 return matrix_.block(indices[0], indices[1], indices[2], indices[3]);\n+324 }\n+325\n+_\b3_\b2_\b7 Block _\bb_\bl_\bo_\bc_\bk_\b_(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx iBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx jBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockRows =\n+1,\n+328 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockCols = 1) {\n+329 const std::array indices =\n+330 calcIndices(iBlock, jBlock, blockRows, blockCols);\n+331 return matrix_.block(indices[0], indices[1], indices[2], indices[3]);\n+332 }\n+333\n+_\b3_\b3_\b5 constBlock _\bf_\bu_\bl_\bl() const {\n+336 return block_(0, 0, nBlocks(), nBlocks());\n+337 }\n+338\n+_\b3_\b4_\b0 Block _\bf_\bu_\bl_\bl() {\n+341 return block_(0, 0, nBlocks(), nBlocks());\n+342 }\n+343\n+_\b3_\b4_\b5 std::array _\bc_\ba_\bl_\bc_\bI_\bn_\bd_\bi_\bc_\be_\bs(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx iBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx jBlock,\n+346 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockRows,\n+347 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockCols) const {\n+348 assert(blockRows >= 0);\n+349 assert(blockCols >= 0);\n+350\n+351 // adjust indices to account for start and size of blocks\n+352 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx denseI = offset(iBlock);\n+353 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx denseJ = offset(jBlock);\n+354 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx denseRows = offset(iBlock + blockRows) - denseI;\n+355 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx denseCols = offset(jBlock + blockCols) - denseJ;\n+356 return {{denseI, denseJ, denseRows, denseCols}};\n+357 }\n+358\n+359 void assertInvariants() const\n+360 {\n+361 assert(matrix_.rows() == matrix_.cols());\n+362 assert(matrix_.cols() == variableColOffsets_.back());\n+363 assert(blockStart_ < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)variableColOffsets_.size());\n+364 }\n+365\n+366 template\n+367 void fillOffsets(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool\n+appendOneDimension)\n+368 {\n+369 variableColOffsets_.resize((lastBlockDim-firstBlockDim) + 1 +\n+(appendOneDimension ? 1 : 0));\n+370 variableColOffsets_[0] = 0;\n+371 DenseIndex j=0;\n+372 for(ITERATOR dim=firstBlockDim; dim!=lastBlockDim; ++dim) {\n+373 variableColOffsets_[j+1] = variableColOffsets_[j] + *dim;\n+374 ++ j;\n+375 }\n+376 if(appendOneDimension)\n+377 {\n+378 variableColOffsets_[j+1] = variableColOffsets_[j] + 1;\n+379 ++ j;\n+380 }\n+381 }\n+382\n+383 friend class VerticalBlockMatrix;\n+384 template friend class\n+SymmetricBlockMatrixBlockExpr;\n+385\n+386 private:\n+_\b3_\b8_\b8 friend class boost::serialization::access;\n+389 template\n+390 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+391 // Fill in the lower triangle part of the matrix, so boost::serialization\n+won't\n+392 // complain about uninitialized data with an input_stream_error exception\n+393 // http://www.boost.org/doc/libs/1_37_0/libs/serialization/doc/\n+exceptions.html#stream_error\n+394 matrix_.triangularView() = matrix_.triangularView().transpose();\n+395 ar & BOOST_SERIALIZATION_NVP(matrix_);\n+396 ar & BOOST_SERIALIZATION_NVP(variableColOffsets_);\n+397 ar & BOOST_SERIALIZATION_NVP(blockStart_);\n+398 }\n+399 };\n+400\n+402 class CholeskyFailed;\n+403\n+404}\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\bo_\bw\n+const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)\n+Extracts a row view from a matrix that avoids a copy.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:222\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\bl_\bi_\bt\n+void split(const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)\n+Split the graph into two parts: one corresponds to the given spanning tree, and\n+the other corresponds...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:255\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl\n+bool choleskyPartial(Matrix &ABC, size_t nFrontal, size_t topleft)\n+Partial Cholesky computes a factor [R S such that [R' 0 [R S = [A B 0 L] S' I]\n+0 L] B' C].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn cholesky.cpp:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bu_\bl_\bl\n+Block full()\n+Get the full matrix as a block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:340\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt_\b_\n+DenseIndex blockStart_\n+Changes apparent matrix view, see main class comment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+void setDiagonalBlock(DenseIndex I, const XprType &xpr)\n+Set a diagonal block. Only the upper triangular portion of xpr is evaluated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bA_\bc_\bt_\bu_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bs\n+DenseIndex nActualBlocks() const\n+Number of actual blocks in the full matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:306\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+Vector diagonal(DenseIndex J) const\n+Get the diagonal of the J'th diagonal block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:145\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\b_\n+Matrix matrix_\n+The full matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n+DenseIndex cols() const\n+Column size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n+DenseIndex getDim(DenseIndex block) const\n+Number of dimensions for variable on this diagonal block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bZ_\be_\br_\bo\n+void setZero()\n+Set the entire active matrix zero.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:258\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+void setOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)\n+Set an off-diagonal block. Only the upper triangular portion of xpr is\n+evaluated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:201\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bF_\bu_\bl_\bl_\bM_\ba_\bt_\br_\bi_\bx\n+void setFullMatrix(const XprType &xpr)\n+Set the entire active matrix. Only reads the upper triangular part of xpr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:253\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n+Eigen::SelfAdjointView< Block, Eigen::Upper > selfadjointView()\n+Get self adjoint view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:242\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const\n+Get block above the diagonal (I, J).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\b_\n+constBlock block_(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows=1,\n+DenseIndex blockCols=1) const\n+Get an arbitrary block from the matrix. Indices are in block units.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:319\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bu_\bl_\bl\n+constBlock full() const\n+Get the full matrix as a block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:335\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n+DenseIndex rows() const\n+Row size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be\n+Block aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock,\n+DenseIndex j_startBlock, DenseIndex j_endBlock)\n+Get a range [i,j) from the matrix. Indices are in block units.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:181\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\br_\bV_\bi_\be_\bw\n+Eigen::TriangularView< constBlock, Eigen::Upper > triangularView(DenseIndex I,\n+DenseIndex J) const\n+Return the square sub-matrix that contains blocks(i:j, i:j) as a triangular\n+view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+Eigen::SelfAdjointView< constBlock, Eigen::Upper > diagonalBlock(DenseIndex J)\n+const\n+Return the J'th diagonal block as a self adjoint view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+SymmetricBlockMatrix(const CONTAINER &dimensions, const Matrix &matrix, bool\n+appendOneDimension=false)\n+Construct from a container of the sizes of each vertical block and a pre-\n+prepared matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:90\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt\n+DenseIndex blockStart() const\n+Retrieve the first logical block, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:277\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n+Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView() const\n+Get self adjoint view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:247\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)\n+Update an off diagonal block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:228\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+SymmetricBlockMatrix(const CONTAINER &dimensions, bool\n+appendOneDimension=false)\n+Construct from a container of the sizes of each block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+SymmetricBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool\n+appendOneDimension=false)\n+Construct from iterator over the sizes of each vertical block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt\n+DenseIndex & blockStart()\n+Retrieve or modify the first logical block, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:273\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be\n+constBlock aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock,\n+DenseIndex j_startBlock, DenseIndex j_endBlock) const\n+Get a range [i,j) from the matrix. Indices are in block units.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:170\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)\n+Return the J'th diagonal block as a self adjoint view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\b_\n+Block block_(DenseIndex iBlock, DenseIndex jBlock, DenseIndex blockRows=1,\n+DenseIndex blockCols=1)\n+Get an arbitrary block from the matrix. Indices are in block units.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:327\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+void updateDiagonalBlock(DenseIndex I, const XprType &xpr)\n+Increment the diagonal block by the values in xpr. Only reads the upper\n+triangular part of xpr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bO_\bf_\bf_\bs_\be_\bt_\bs\n+DenseIndex nOffsets() const\n+Number of offsets in the full matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:301\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\ba_\bl_\bc_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+std::array< DenseIndex, 4 > calcIndices(DenseIndex iBlock, DenseIndex jBlock,\n+DenseIndex blockRows, DenseIndex blockCols) const\n+Compute the indices into the underlying matrix for a given block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:345\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bB_\bl_\bo_\bc_\bk_\bs\n+DenseIndex nBlocks() const\n+Block count.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bC_\bo_\bl_\bO_\bf_\bf_\bs_\be_\bt_\bs_\b_\n+FastVector< DenseIndex > variableColOffsets_\n+the starting columns of each block (0-based)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n+Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex\n+I, DenseIndex J) const\n+Return the square sub-matrix that contains blocks(i:j, i:j).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bf_\bf_\bs_\be_\bt\n+DenseIndex offset(DenseIndex block) const\n+Get an offset for a block index (in the active view).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:311\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of vertical blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\b._\bh\n+ * _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00125.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00125.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/cholesky.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,48 +94,36 @@\n \n \n \n \n \n
\n \n-
cholesky.h File Reference
\n+Namespaces
\n+
DSFVector.cpp File Reference
\n \n
\n \n-

Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky. \n+

a faster implementation for DSF, which uses vector rather than btree. \n More...

\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

pair< size_t, bool > gtsam::choleskyCareful (Matrix &ATA, int order=-1)
 \"Careful\" Cholesky computes the positive square-root of a positive symmetric semi-definite matrix (i.e.
 
bool gtsam::choleskyPartial (Matrix &ABC, size_t nFrontal, size_t topleft=0)
 Partial Cholesky computes a factor [R S such that [R' 0 [R S = [A B 0 L] S' I] 0 L] B' C].
 
\n

Detailed Description

\n-

Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.

\n-
Author
Richard Roberts
\n-
Date
Nov 5, 2010
\n+

a faster implementation for DSF, which uses vector rather than btree.

\n+
Date
Jun 25, 2010
\n+
Author
Kai Ni
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-cholesky.h File Reference\n-Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n-Cholesky. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DSFVector.cpp File Reference\n+a faster implementation for DSF, which uses vector rather than btree. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-pair< size_t, bool >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bC_\ba_\br_\be_\bf_\bu_\bl (Matrix &ATA, int order=-1)\n-\u00a0 \"Careful\" Cholesky computes the positive square-root of a\n- positive symmetric semi-definite matrix (i.e.\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\bP_\ba_\br_\bt_\bi_\ba_\bl (Matrix &ABC, size_t nFrontal,\n- size_t topleft=0)\n-\u00a0 Partial Cholesky computes a factor [R S such that [R' 0\n- [R S = [A B 0 L] S' I] 0 L] B' C].\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n-Cholesky.\n- Author\n- Richard Roberts\n+a faster implementation for DSF, which uses vector rather than btree.\n Date\n- Nov 5, 2010\n+ Jun 25, 2010\n+ Author\n+ Kai Ni\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b._\bh\n+ * _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00131.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00131.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/timing.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VerticalBlockMatrix.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,212 +94,36 @@\n \n \n \n \n \n
\n \n-
timing.h File Reference
\n+Namespaces
\n+
VerticalBlockMatrix.cpp File Reference
\n \n
\n \n-

Timing utilities. \n+

A matrix with column blocks of pre-defined sizes. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::internal::TimingOutline
 Timing Entry, arranged in a tree. More...
 
class  gtsam::internal::AutoTicToc
 Small class that calls internal::tic at construction, and internol::toc when destroyed. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-Macros

#define gttic_(label)
 
\n-#define gttoc_(label)    label##_obj.stop()
 
#define longtic_(label)
 
#define longtoc_(label)
 
#define tictoc_getNode(variable, label)
 
\n-#define gttic(label)   ((void)0)
 
\n-#define gttoc(label)   ((void)0)
 
\n-#define longtic(label)   ((void)0)
 
\n-#define longtoc(label)   ((void)0)
 
\n-#define tictoc_finishedIteration()   ((void)0)
 
\n-#define tictoc_print()   ((void)0)
 
\n-#define tictoc_reset()   ((void)0)
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Functions

\n-size_t gtsam::internal::getTicTocID (const char *descriptionC)
 
\n-void gtsam::internal::tic (size_t id, const char *labelC)
 
\n-void gtsam::internal::toc (size_t id, const char *label)
 
\n-void gtsam::tictoc_finishedIteration_ ()
 
\n-void gtsam::tictoc_print_ ()
 
\n-void gtsam::tictoc_print2_ ()
 
\n-void gtsam::tictoc_reset_ ()
 
\n-\n-\n-\n-\n-\n

\n-Variables

\n-GTSAM_EXTERN_EXPORT boost::shared_ptr< TimingOutlinegtsam::internal::gTimingRoot
 
\n-GTSAM_EXTERN_EXPORT boost::weak_ptr< TimingOutlinegtsam::internal::gCurrentTimer
 
\n

Detailed Description

\n-

Timing utilities.

\n-
Author
Richard Roberts, Michael Kaess
\n-
Date
Oct 5, 2010
\n-

Macro Definition Documentation

\n-\n-

◆ gttic_

\n-\n-
\n-
\n- \n- \n- \n- \n- \n- \n- \n- \n-
#define gttic_( label)
\n-
\n-Value:
static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\
\n-
::gtsam::internal::AutoTicToc label##_obj(label##_id_tic, #label)
\n-
Small class that calls internal::tic at construction, and internol::toc when destroyed.
Definition timing.h:199
\n-
\n-
\n-
\n-\n-

◆ longtic_

\n-\n-
\n-
\n- \n- \n- \n- \n- \n- \n- \n- \n-
#define longtic_( label)
\n-
\n-Value:
static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\
\n-
::gtsam::internal::ticInternal(label##_id_tic, #label)
\n-
\n-
\n-
\n-\n-

◆ longtoc_

\n-\n-
\n-
\n- \n- \n- \n- \n- \n- \n- \n- \n-
#define longtoc_( label)
\n-
\n-Value:
static const size_t label##_id_toc = ::gtsam::internal::getTicTocID(#label); \\
\n-
::gtsam::internal::tocInternal(label##_id_toc, #label)
\n-
\n-
\n-
\n-\n-

◆ tictoc_getNode

\n-\n-
\n-
\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n-
#define tictoc_getNode( variable,
 label 
)
\n-
\n-Value:
static const size_t label##_id_getnode = ::gtsam::internal::getTicTocID(#label); \\
\n-
const boost::shared_ptr<const ::gtsam::internal::TimingOutline> variable = \\
\n-
::gtsam::internal::gCurrentTimer.lock()->child(label##_id_getnode, #label, ::gtsam::internal::gCurrentTimer);
\n-
\n-
\n-
\n-
\n+

A matrix with column blocks of pre-defined sizes.

\n+

Used in JacobianFactor and GaussianConditional.

Author
Richard Roberts
\n+
Date
Sep 18, 2010
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,108 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-timing.h File Reference\n-Timing utilities. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be\n-\u00a0 Timing Entry, arranged in a tree. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc\n-\u00a0 Small class that calls internal::tic at construction, and internol::toc\n- when destroyed. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+VerticalBlockMatrix.cpp File Reference\n+A matrix with column blocks of pre-defined sizes. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bg_\bt_\bt_\bi_\bc_\b_(label)\n-\u00a0\n-#define\u00a0 g\bgt\btt\bto\boc\bc_\b_(label)\u00a0\u00a0\u00a0 label##_obj.stop()\n-\u00a0\n-#define\u00a0 _\bl_\bo_\bn_\bg_\bt_\bi_\bc_\b_(label)\n-\u00a0\n-#define\u00a0 _\bl_\bo_\bn_\bg_\bt_\bo_\bc_\b_(label)\n-\u00a0\n-#define\u00a0 _\bt_\bi_\bc_\bt_\bo_\bc_\b__\bg_\be_\bt_\bN_\bo_\bd_\be(variable, label)\n-\u00a0\n-#define\u00a0 g\bgt\btt\bti\bic\bc(label)\u00a0\u00a0\u00a0((void)0)\n-\u00a0\n-#define\u00a0 g\bgt\btt\bto\boc\bc(label)\u00a0\u00a0\u00a0((void)0)\n-\u00a0\n-#define\u00a0 l\blo\bon\bng\bgt\bti\bic\bc(label)\u00a0\u00a0\u00a0((void)0)\n-\u00a0\n-#define\u00a0 l\blo\bon\bng\bgt\bto\boc\bc(label)\u00a0\u00a0\u00a0((void)0)\n-\u00a0\n-#define\u00a0 t\bti\bic\bct\bto\boc\bc_\b_f\bfi\bin\bni\bis\bsh\bhe\bed\bdI\bIt\bte\ber\bra\bat\bti\bio\bon\bn()\u00a0\u00a0\u00a0((void)0)\n-\u00a0\n-#define\u00a0 t\bti\bic\bct\bto\boc\bc_\b_p\bpr\bri\bin\bnt\bt()\u00a0\u00a0\u00a0((void)0)\n-\u00a0\n-#define\u00a0 t\bti\bic\bct\bto\boc\bc_\b_r\bre\bes\bse\bet\bt()\u00a0\u00a0\u00a0((void)0)\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-size_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:g\bge\bet\btT\bTi\bic\bcT\bTo\boc\bcI\bID\bD (const char *descriptionC)\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:t\bti\bic\bc (size_t id, const char *labelC)\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:t\bto\boc\bc (size_t id, const char *label)\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bti\bic\bct\bto\boc\bc_\b_f\bfi\bin\bni\bis\bsh\bhe\bed\bdI\bIt\bte\ber\bra\bat\bti\bio\bon\bn_\b_ ()\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bti\bic\bct\bto\boc\bc_\b_p\bpr\bri\bin\bnt\bt_\b_ ()\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bti\bic\bct\bto\boc\bc_\b_p\bpr\bri\bin\bnt\bt2\b2_\b_ ()\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bti\bic\bct\bto\boc\bc_\b_r\bre\bes\bse\bet\bt_\b_ ()\n-\u00a0\n-V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n-GTSAM_EXTERN_EXPORT boost::shared_ptr<\n- _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:g\bgT\bTi\bim\bmi\bin\bng\bgR\bRo\boo\bot\bt\n-\u00a0\n- GTSAM_EXTERN_EXPORT boost::weak_ptr<\n- _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:g\bgC\bCu\bur\brr\bre\ben\bnt\btT\bTi\bim\bme\ber\br\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Timing utilities.\n+A matrix with column blocks of pre-defined sizes.\n+Used in _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br and _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl.\n Author\n- Richard Roberts, Michael Kaess\n+ Richard Roberts\n Date\n- Oct 5, 2010\n-*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0g\bgt\btt\bti\bic\bc_\b_ *\b**\b**\b**\b**\b*\n-#define gttic_ ( \u00a0 label )\n-V\bVa\bal\blu\bue\be:\b:\n-static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\\n-_\b:_\b:_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc label##_obj(label##_id_tic, #label)\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc\n-Small class that calls internal::tic at construction, and internol::toc when\n-destroyed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:199\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0l\blo\bon\bng\bgt\bti\bic\bc_\b_ *\b**\b**\b**\b**\b*\n-#define longtic_ ( \u00a0 label )\n-V\bVa\bal\blu\bue\be:\b:\n-static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\\n-::gtsam::internal::ticInternal(label##_id_tic, #label)\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0l\blo\bon\bng\bgt\bto\boc\bc_\b_ *\b**\b**\b**\b**\b*\n-#define longtoc_ ( \u00a0 label )\n-V\bVa\bal\blu\bue\be:\b:\n-static const size_t label##_id_toc = ::gtsam::internal::getTicTocID(#label); \\\n-::gtsam::internal::tocInternal(label##_id_toc, #label)\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0t\bti\bic\bct\bto\boc\bc_\b_g\bge\bet\btN\bNo\bod\bde\be *\b**\b**\b**\b**\b*\n-#define tictoc_getNode ( \u00a0 variable,\n- \u00a0 label\u00a0\n- )\n-V\bVa\bal\blu\bue\be:\b:\n-static const size_t label##_id_getnode = ::gtsam::internal::getTicTocID\n-(#label); \\\n-const boost::shared_ptr variable = \\\n-::gtsam::internal::gCurrentTimer.lock()->child(label##_id_getnode, #label, ::\n-gtsam::internal::gCurrentTimer);\n+ Sep 18, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+ * _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00134.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00134.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/serializationTestHelpers.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,113 +95,42 @@\n \n \n \n \n
\n \n-
serializationTestHelpers.h File Reference
\n+Functions
\n+
types.cpp File Reference
\n \n
\n \n-

Go to the source code of this file.

\n+

Functions for handling type information. \n+More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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 Functions

\n-template<class T >
gtsam::serializationTestHelpers::create ()
 
\n-boost::filesystem::path gtsam::serializationTestHelpers::resetFilesystem (boost::filesystem::path folder="actual")
 
\n-template<class T >
void gtsam::serializationTestHelpers::roundtrip (const T &input, T &output)
 
\n-template<class T >
void gtsam::serializationTestHelpers::roundtripFile (const T &input, T &output)
 
\n-template<class T >
bool gtsam::serializationTestHelpers::equality (const T &input=T())
 
\n-template<class T >
bool gtsam::serializationTestHelpers::equalsObj (const T &input=T())
 
\n-template<class T >
bool gtsam::serializationTestHelpers::equalsDereferenced (const T &input)
 
\n-template<class T >
void gtsam::serializationTestHelpers::roundtripXML (const T &input, T &output)
 
\n-template<class T >
void gtsam::serializationTestHelpers::roundtripXMLFile (const T &input, T &output)
 
\n-template<class T >
bool gtsam::serializationTestHelpers::equalityXML (const T &input=T())
 
\n-template<class T >
bool gtsam::serializationTestHelpers::equalsXML (const T &input=T())
 
\n-template<class T >
bool gtsam::serializationTestHelpers::equalsDereferencedXML (const T &input=T())
 
\n-template<class T >
void gtsam::serializationTestHelpers::roundtripBinary (const T &input, T &output)
 
\n-template<class T >
void gtsam::serializationTestHelpers::roundtripBinaryFile (const T &input, T &output)
 
\n-template<class T >
bool gtsam::serializationTestHelpers::equalityBinary (const T &input=T())
 
\n-template<class T >
bool gtsam::serializationTestHelpers::equalsBinary (const T &input=T())
 
\n-template<class T >
bool gtsam::serializationTestHelpers::equalsDereferencedBinary (const T &input=T())
 
\n-\n-\n-\n+\n+\n+\n

\n-Variables

\n-const bool verbose = false
 
std::string gtsam::demangle (const char *name)
 Pretty print Value type name.
 
\n

Detailed Description

\n-
Author
Alex Cunningham
\n-
\n-Richard Roberts
\n-
Date
Feb 7, 2012
\n+

Functions for handling type information.

\n+
Author
Varun Agrawal
\n+
Date
May 18, 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,92 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-serializationTestHelpers.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+types.cpp File Reference\n+_\bB_\ba_\bs_\be\n+Functions for handling type information. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- T\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:c\bcr\bre\bea\bat\bte\be ()\n-\u00a0\n-boost::filesystem::path\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bre\bes\bse\bet\btF\bFi\bil\ble\bes\bsy\bys\bst\bte\bem\bm\n- (boost::filesystem::path folder=\"actual\")\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bp (const T\n- &input, T &output)\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bpF\bFi\bil\ble\be (const\n- T &input, T &output)\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bli\bit\bty\by (const T\n- &input=T())\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bls\bsO\bOb\bbj\bj (const T\n- &input=T())\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bls\bsD\bDe\ber\bre\bef\bfe\ber\bre\ben\bnc\bce\bed\bd\n- (const T &input)\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bpX\bXM\bML\bL (const T\n- &input, T &output)\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bpX\bXM\bML\bLF\bFi\bil\ble\be\n- (const T &input, T &output)\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bli\bit\bty\byX\bXM\bML\bL (const T\n- &input=T())\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bls\bsX\bXM\bML\bL (const T\n- &input=T())\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bls\bsD\bDe\ber\bre\bef\bfe\ber\bre\ben\bnc\bce\bed\bdX\bXM\bML\bL\n- (const T &input=T())\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bpB\bBi\bin\bna\bar\bry\by\n- (const T &input, T &output)\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bpB\bBi\bin\bna\bar\bry\byF\bFi\bil\ble\be\n- (const T &input, T &output)\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bli\bit\bty\byB\bBi\bin\bna\bar\bry\by (const\n- T &input=T())\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bls\bsB\bBi\bin\bna\bar\bry\by (const T\n- &input=T())\n-\u00a0\n-template\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:\n- e\beq\bqu\bua\bal\bls\bsD\bDe\ber\bre\bef\bfe\ber\bre\ben\bnc\bce\bed\bdB\bBi\bin\bna\bar\bry\by (const T &input=T())\n-\u00a0\n-V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n-const bool\u00a0 v\bve\ber\brb\bbo\bos\bse\be = false\n+std::string\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bm_\ba_\bn_\bg_\bl_\be (const char *name)\n+\u00a0 Pretty print _\bV_\ba_\bl_\bu_\be type name.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Functions for handling type information.\n Author\n- Alex Cunningham\n- Richard Roberts\n+ Varun Agrawal\n Date\n- Feb 7, 2012\n+ May 18, 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\be_\bs_\bt_\bH_\be_\bl_\bp_\be_\br_\bs_\b._\bh\n+ * _\bt_\by_\bp_\be_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00137.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00137.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/OptionalJacobian.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/timing.h File Reference\n \n \n \n \n \n \n \n@@ -95,54 +95,211 @@\n \n \n \n \n
\n \n-
OptionalJacobian.h File Reference
\n+Namespaces |\n+Macros |\n+Functions |\n+Variables
\n+
timing.h File Reference
\n \n
\n \n-

Special class for optional Jacobian arguments. \n+

Timing utilities. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::OptionalJacobian< Rows, Cols >
 OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size or dynamic Eigen matrix. More...
class  gtsam::internal::TimingOutline
 Timing Entry, arranged in a tree. More...
 
class  gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >
 
struct  gtsam::MakeJacobian< T, A >
 : meta-function to generate Jacobian More...
 
struct  gtsam::MakeOptionalJacobian< T, A >
 : meta-function to generate JacobianTA optional reference Used mainly by Expressions More...
class  gtsam::internal::AutoTicToc
 Small class that calls internal::tic at construction, and internol::toc when destroyed. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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+Macros

#define gttic_(label)
 
\n+#define gttoc_(label)    label##_obj.stop()
 
#define longtic_(label)
 
#define longtoc_(label)
 
#define tictoc_getNode(variable, label)
 
\n+#define gttic(label)   ((void)0)
 
\n+#define gttoc(label)   ((void)0)
 
\n+#define longtic(label)   ((void)0)
 
\n+#define longtoc(label)   ((void)0)
 
\n+#define tictoc_finishedIteration()   ((void)0)
 
\n+#define tictoc_print()   ((void)0)
 
\n+#define tictoc_reset()   ((void)0)
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Functions

\n+size_t gtsam::internal::getTicTocID (const char *descriptionC)
 
\n+void gtsam::internal::tic (size_t id, const char *labelC)
 
\n+void gtsam::internal::toc (size_t id, const char *label)
 
\n+void gtsam::tictoc_finishedIteration_ ()
 
\n+void gtsam::tictoc_print_ ()
 
\n+void gtsam::tictoc_print2_ ()
 
\n+void gtsam::tictoc_reset_ ()
 
\n+\n+\n+\n+\n+\n

\n+Variables

\n+GTSAM_EXTERN_EXPORT boost::shared_ptr< TimingOutlinegtsam::internal::gTimingRoot
 
\n+GTSAM_EXTERN_EXPORT boost::weak_ptr< TimingOutlinegtsam::internal::gCurrentTimer
 
\n

Detailed Description

\n-

Special class for optional Jacobian arguments.

\n-
Author
Frank Dellaert
\n-
\n-Natesh Srinivasan
\n-
Date
Nov 28, 2014
\n-
\n+

Timing utilities.

\n+
Author
Richard Roberts, Michael Kaess
\n+
Date
Oct 5, 2010
\n+

Macro Definition Documentation

\n+\n+

◆ gttic_

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
#define gttic_( label)
\n+
\n+Value:
static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\
\n+
::gtsam::internal::AutoTicToc label##_obj(label##_id_tic, #label)
\n+
Small class that calls internal::tic at construction, and internol::toc when destroyed.
Definition timing.h:199
\n+
\n+
\n+
\n+\n+

◆ longtic_

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
#define longtic_( label)
\n+
\n+Value:
static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\
\n+
::gtsam::internal::ticInternal(label##_id_tic, #label)
\n+
\n+
\n+
\n+\n+

◆ longtoc_

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
#define longtoc_( label)
\n+
\n+Value:
static const size_t label##_id_toc = ::gtsam::internal::getTicTocID(#label); \\
\n+
::gtsam::internal::tocInternal(label##_id_toc, #label)
\n+
\n+
\n+
\n+\n+

◆ tictoc_getNode

\n+\n+
\n+
\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
#define tictoc_getNode( variable,
 label 
)
\n+
\n+Value:
static const size_t label##_id_getnode = ::gtsam::internal::getTicTocID(#label); \\
\n+
const boost::shared_ptr<const ::gtsam::internal::TimingOutline> variable = \\
\n+
::gtsam::internal::gCurrentTimer.lock()->child(label##_id_getnode, #label, ::gtsam::internal::gCurrentTimer);
\n+
\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,38 +1,108 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-OptionalJacobian.h File Reference\n-Special class for optional Jacobian arguments. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+timing.h File Reference\n+Timing utilities. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bR_\bo_\bw_\bs_\b,_\b _\bC_\bo_\bl_\bs_\b _\b>\n-\u00a0 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn is an Eigen::Ref like class that can take be\n- constructed using either a fixed size or dynamic Eigen matrix. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bT_\b,_\b _\bA_\b _\b>\n-\u00a0 : meta-function to generate Jacobian _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bT_\b,_\b _\bA_\b _\b>\n-\u00a0 : meta-function to generate JacobianTA optional reference Used mainly\n- by Expressions _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be\n+\u00a0 Timing Entry, arranged in a tree. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc\n+\u00a0 Small class that calls internal::tic at construction, and internol::toc\n+ when destroyed. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bg_\bt_\bt_\bi_\bc_\b_(label)\n+\u00a0\n+#define\u00a0 g\bgt\btt\bto\boc\bc_\b_(label)\u00a0\u00a0\u00a0 label##_obj.stop()\n+\u00a0\n+#define\u00a0 _\bl_\bo_\bn_\bg_\bt_\bi_\bc_\b_(label)\n+\u00a0\n+#define\u00a0 _\bl_\bo_\bn_\bg_\bt_\bo_\bc_\b_(label)\n+\u00a0\n+#define\u00a0 _\bt_\bi_\bc_\bt_\bo_\bc_\b__\bg_\be_\bt_\bN_\bo_\bd_\be(variable, label)\n+\u00a0\n+#define\u00a0 g\bgt\btt\bti\bic\bc(label)\u00a0\u00a0\u00a0((void)0)\n+\u00a0\n+#define\u00a0 g\bgt\btt\bto\boc\bc(label)\u00a0\u00a0\u00a0((void)0)\n+\u00a0\n+#define\u00a0 l\blo\bon\bng\bgt\bti\bic\bc(label)\u00a0\u00a0\u00a0((void)0)\n+\u00a0\n+#define\u00a0 l\blo\bon\bng\bgt\bto\boc\bc(label)\u00a0\u00a0\u00a0((void)0)\n+\u00a0\n+#define\u00a0 t\bti\bic\bct\bto\boc\bc_\b_f\bfi\bin\bni\bis\bsh\bhe\bed\bdI\bIt\bte\ber\bra\bat\bti\bio\bon\bn()\u00a0\u00a0\u00a0((void)0)\n+\u00a0\n+#define\u00a0 t\bti\bic\bct\bto\boc\bc_\b_p\bpr\bri\bin\bnt\bt()\u00a0\u00a0\u00a0((void)0)\n+\u00a0\n+#define\u00a0 t\bti\bic\bct\bto\boc\bc_\b_r\bre\bes\bse\bet\bt()\u00a0\u00a0\u00a0((void)0)\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+size_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:g\bge\bet\btT\bTi\bic\bcT\bTo\boc\bcI\bID\bD (const char *descriptionC)\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:t\bti\bic\bc (size_t id, const char *labelC)\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:t\bto\boc\bc (size_t id, const char *label)\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bti\bic\bct\bto\boc\bc_\b_f\bfi\bin\bni\bis\bsh\bhe\bed\bdI\bIt\bte\ber\bra\bat\bti\bio\bon\bn_\b_ ()\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bti\bic\bct\bto\boc\bc_\b_p\bpr\bri\bin\bnt\bt_\b_ ()\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bti\bic\bct\bto\boc\bc_\b_p\bpr\bri\bin\bnt\bt2\b2_\b_ ()\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bti\bic\bct\bto\boc\bc_\b_r\bre\bes\bse\bet\bt_\b_ ()\n+\u00a0\n+V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n+GTSAM_EXTERN_EXPORT boost::shared_ptr<\n+ _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:g\bgT\bTi\bim\bmi\bin\bng\bgR\bRo\boo\bot\bt\n+\u00a0\n+ GTSAM_EXTERN_EXPORT boost::weak_ptr<\n+ _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:g\bgC\bCu\bur\brr\bre\ben\bnt\btT\bTi\bim\bme\ber\br\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Special class for optional Jacobian arguments.\n+Timing utilities.\n Author\n- Frank Dellaert\n- Natesh Srinivasan\n+ Richard Roberts, Michael Kaess\n Date\n- Nov 28, 2014\n+ Oct 5, 2010\n+*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0g\bgt\btt\bti\bic\bc_\b_ *\b**\b**\b**\b**\b*\n+#define gttic_ ( \u00a0 label )\n+V\bVa\bal\blu\bue\be:\b:\n+static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\\n+_\b:_\b:_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc label##_obj(label##_id_tic, #label)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc\n+Small class that calls internal::tic at construction, and internol::toc when\n+destroyed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:199\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0l\blo\bon\bng\bgt\bti\bic\bc_\b_ *\b**\b**\b**\b**\b*\n+#define longtic_ ( \u00a0 label )\n+V\bVa\bal\blu\bue\be:\b:\n+static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\\n+::gtsam::internal::ticInternal(label##_id_tic, #label)\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0l\blo\bon\bng\bgt\bto\boc\bc_\b_ *\b**\b**\b**\b**\b*\n+#define longtoc_ ( \u00a0 label )\n+V\bVa\bal\blu\bue\be:\b:\n+static const size_t label##_id_toc = ::gtsam::internal::getTicTocID(#label); \\\n+::gtsam::internal::tocInternal(label##_id_toc, #label)\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0t\bti\bic\bct\bto\boc\bc_\b_g\bge\bet\btN\bNo\bod\bde\be *\b**\b**\b**\b**\b*\n+#define tictoc_getNode ( \u00a0 variable,\n+ \u00a0 label\u00a0\n+ )\n+V\bVa\bal\blu\bue\be:\b:\n+static const size_t label##_id_getnode = ::gtsam::internal::getTicTocID\n+(#label); \\\n+const boost::shared_ptr variable = \\\n+::gtsam::internal::gCurrentTimer.lock()->child(label##_id_getnode, #label, ::\n+gtsam::internal::gCurrentTimer);\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n+ * _\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00137.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00137.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,4 @@\n var a00137 = [\n- [\"gtsam::OptionalJacobian< Rows, Cols >\", \"a02448.html\", \"a02448\"],\n- [\"gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >\", \"a02452.html\", \"a02452\"],\n- [\"gtsam::MakeJacobian< T, A >\", \"a02456.html\", null],\n- [\"gtsam::MakeOptionalJacobian< T, A >\", \"a02460.html\", null]\n+ [\"gtsam::internal::TimingOutline\", \"a02516.html\", \"a02516\"],\n+ [\"gtsam::internal::AutoTicToc\", \"a02520.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00137_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00137_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/OptionalJacobian.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/timing.h Source File\n \n \n \n \n \n \n \n@@ -98,292 +98,328 @@\n
No Matches
\n \n \n \n \n \n
\n-
OptionalJacobian.h
\n+
timing.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21#include <gtsam/config.h> // Configuration from CMake
\n-
22#include <Eigen/Dense>
\n-
23#include <stdexcept>
\n-
24#include <string>
\n-
25
\n-
26#ifndef OPTIONALJACOBIAN_NOBOOST
\n-
27#include <boost/optional.hpp>
\n-
28#endif
\n-
29
\n-
30namespace gtsam {
\n-
31
\n-
40template<int Rows, int Cols>
\n-
\n-\n-
42
\n-
43public:
\n-
44
\n-
47 typedef Eigen::Matrix<double, Rows, Cols> Jacobian;
\n-
48
\n-
49private:
\n-
50
\n-
51 Eigen::Map<Jacobian> map_;
\n-
52
\n-
53 // Trick from http://eigen.tuxfamily.org/dox/group__TutorialMapClass.html
\n-
54 // uses "placement new" to make map_ usurp the memory of the fixed size matrix
\n-
55 void usurp(double* data) {
\n-
56 new (&map_) Eigen::Map<Jacobian>(data);
\n-
57 }
\n-
58
\n-
59 // Private and very dangerous constructor straight from memory
\n-
60 OptionalJacobian(double* data) : map_(nullptr) {
\n-
61 if (data) usurp(data);
\n-
62 }
\n-
63
\n-
64 template<int M, int N>
\n-
65 friend class OptionalJacobian;
\n-
66
\n-
67public:
\n-
68
\n-
\n-\n-
71 map_(nullptr) {
\n-
72 }
\n-
\n-
73
\n-
\n-\n-
76 map_(nullptr) {
\n-
77 usurp(fixed.data());
\n-
78 }
\n-
\n-
79
\n-
\n-\n-
82 map_(nullptr) {
\n-
83 if (fixedPtr)
\n-
84 usurp(fixedPtr->data());
\n-
85 }
\n-
\n-
86
\n-
\n-
88 OptionalJacobian(Eigen::MatrixXd& dynamic) :
\n-
89 map_(nullptr) {
\n-
90 dynamic.resize(Rows, Cols); // no malloc if correct size
\n-
91 usurp(dynamic.data());
\n-
92 }
\n-
\n-
93
\n-
\n-
95 OptionalJacobian(Eigen::MatrixXd* dynamic) :
\n-
96 map_(nullptr) {
\n-
97 dynamic->resize(Rows, Cols); // no malloc if correct size
\n-
98 usurp(dynamic->data());
\n-
99 }
\n-
\n-
100
\n-
105 template<class MATRIX>
\n-
\n-
106 OptionalJacobian(Eigen::Ref<MATRIX> dynamic_ref) :
\n-
107 map_(nullptr) {
\n-
108 if (dynamic_ref.rows() == Rows && dynamic_ref.cols() == Cols && !dynamic_ref.IsRowMajor) {
\n-
109 usurp(dynamic_ref.data());
\n-
110 } else {
\n-
111 throw std::invalid_argument(
\n-
112 std::string("OptionalJacobian called with wrong dimensions or "
\n-
113 "storage order.\\n"
\n-
114 "Expected: ") +
\n-
115 "(" + std::to_string(Rows) + ", " + std::to_string(Cols) + ")");
\n-
116 }
\n-
117 }
\n-
\n-
118
\n-
119#ifndef OPTIONALJACOBIAN_NOBOOST
\n-
120
\n-
\n-
122 OptionalJacobian(boost::none_t /*none*/) :
\n-
123 map_(nullptr) {
\n-
124 }
\n-
\n-
125
\n-
\n-
127 OptionalJacobian(const boost::optional<Eigen::MatrixXd&> optional) :
\n-
128 map_(nullptr) {
\n-
129 if (optional) {
\n-
130 optional->resize(Rows, Cols);
\n-
131 usurp(optional->data());
\n-
132 }
\n-
133 }
\n-
\n-
134
\n-
135#endif
\n-
136
\n-
139 // template <typename Derived, bool InnerPanel>
\n-
140 // OptionalJacobian(Eigen::Block<Derived,Rows,Cols,InnerPanel> block) : map_(nullptr) { ?? }
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/FastMap.h>
\n+
21#include <gtsam/dllexport.h>
\n+
22#include <gtsam/config.h> // for GTSAM_USE_TBB
\n+
23
\n+
24#include <boost/smart_ptr/shared_ptr.hpp>
\n+
25#include <boost/smart_ptr/weak_ptr.hpp>
\n+
26#include <boost/version.hpp>
\n+
27
\n+
28#include <cstddef>
\n+
29#include <string>
\n+
30
\n+
31// This file contains the GTSAM timing instrumentation library, a low-overhead method for
\n+
32// learning at a medium-fine level how much time various components of an algorithm take
\n+
33// in CPU and wall time.
\n+
34//
\n+
35// The output of this instrumentation is a call-tree-like printout containing statistics
\n+
36// about each instrumented code block. To print this output at any time, call
\n+
37// tictoc_print() or tictoc_print_().
\n+
38//
\n+
39// An overall point to be aware of is that there are two versions of each function - one
\n+
40// ending in an underscore '_' and one without the trailing underscore. The underscore
\n+
41// versions always are active, but the versions without an underscore are active only when
\n+
42// GTSAM_ENABLE_TIMING is defined (automatically defined in our CMake Timing build type).
\n+
43// GTSAM algorithms are all instrumented with the non-underscore versions, so generally
\n+
44// you should use the underscore versions in your own code to leave out the GTSAM detail.
\n+
45//
\n+
46// gttic and gttoc start and stop a timed section, respectively. gttic creates a *scoped*
\n+
47// object - when it goes out of scope gttoc is called automatically. Thus, you do not
\n+
48// need to call gttoc if you are timing an entire function (see basic use examples below).
\n+
49// However, you must be *aware* of this scoped nature - putting gttic inside of an if(...)
\n+
50// block, for example, will only time code until the closing brace '}'. See advanced
\n+
51// usage below if you need to avoid this.
\n+
52//
\n+
53// Multiple calls nest automatically - each gttic nests under the previous gttic called
\n+
54// for which gttoc has not been called (or the previous gttic did not go out of scope).
\n+
55//
\n+
56// Basic usage examples are as follows:
\n+
57//
\n+
58// - Timing an entire function:
\n+
59// void myFunction() {
\n+
60// gttic_(myFunction);
\n+
61// ........
\n+
62// }
\n+
63//
\n+
64// - Timing an entire function as well as its component parts:
\n+
65// void myLongFunction() {
\n+
66// gttic_(myLongFunction);
\n+
67// gttic_(step1); // Will nest under the 'myLongFunction' label
\n+
68// ........
\n+
69// gttoc_(step1);
\n+
70// gttic_(step2); // Will nest under the 'myLongFunction' label
\n+
71// ........
\n+
72// gttoc_(step2);
\n+
73// ........
\n+
74// }
\n+
75//
\n+
76// - Timing functions calling/called by other functions:
\n+
77// void oneStep() {
\n+
78// gttic_(oneStep); // Will automatically nest under the gttic label of the calling function
\n+
79// .......
\n+
80// }
\n+
81// void algorithm() {
\n+
82// gttic_(algorithm);
\n+
83// oneStep(); // gttic's inside this function will automatically nest inside our 'algorithm' label
\n+
84// twoStep(); // gttic's inside this function will automatically nest inside our 'algorithm' label
\n+
85// }
\n+
86//
\n+
87//
\n+
88// Advanced usage:
\n+
89//
\n+
90// - "Finishing iterations" - to get correct min/max times for each call, you must define
\n+
91// in your code what constitutes an iteration. A single sum for the min/max times is
\n+
92// accumulated within each iteration. If you don't care about min/max times, you don't
\n+
93// need to worry about this. For example:
\n+
94// void myOuterLoop() {
\n+
95// while(true) {
\n+
96// iterateMyAlgorithm();
\n+
97// tictoc_finishedIteration_();
\n+
98// tictoc_print_(); // Optional
\n+
99// }
\n+
100// }
\n+
101//
\n+
102// - Stopping timing a section in a different scope than it is started. Normally, a gttoc
\n+
103// statement goes out of scope at end of C++ scope. However, you can use longtic and
\n+
104// longtoc to start and stop timing with the specified label at any point, without regard
\n+
105// too scope. Note that if you use these, it may become difficult to ensure that you
\n+
106// have matching gttic/gttoc statments. You may want to consider reorganizing your timing
\n+
107// outline to match the scope of your code.
\n+
108
\n+
109// Automatically use the new Boost timers if version is recent enough.
\n+
110#if BOOST_VERSION >= 104800
\n+
111# ifndef GTSAM_DISABLE_NEW_TIMERS
\n+
112# define GTSAM_USING_NEW_BOOST_TIMERS
\n+
113# endif
\n+
114#endif
\n+
115
\n+
116#ifdef GTSAM_USING_NEW_BOOST_TIMERS
\n+
117# include <boost/timer/timer.hpp>
\n+
118#else
\n+
119# include <boost/timer.hpp>
\n+
120# include <gtsam/base/types.h>
\n+
121#endif
\n+
122
\n+
123#ifdef GTSAM_USE_TBB
\n+
124# include <tbb/tick_count.h>
\n+
125# undef min
\n+
126# undef max
\n+
127# undef ERROR
\n+
128#endif
\n+
129
\n+
130namespace gtsam {
\n+
131
\n+
132 namespace internal {
\n+
133 // Generate/retrieve a unique global ID number that will be used to look up tic/toc statements
\n+
134 GTSAM_EXPORT size_t getTicTocID(const char *description);
\n+
135
\n+
136 // Create new TimingOutline child for gCurrentTimer, make it gCurrentTimer, and call tic method
\n+
137 GTSAM_EXPORT void tic(size_t id, const char *label);
\n+
138
\n+
139 // Call toc on gCurrentTimer and then set gCurrentTimer to the parent of gCurrentTimer
\n+
140 GTSAM_EXPORT void toc(size_t id, const char *label);
\n
141
\n-
\n-
143 operator bool() const {
\n-
144 return map_.data() != nullptr;
\n-
145 }
\n-
\n-
146
\n-
\n-
148 Eigen::Map<Jacobian>& operator*() {
\n-
149 return map_;
\n-
150 }
\n-
\n-
151
\n-
\n-
153 Eigen::Map<Jacobian>* operator->() {
\n-
154 return &map_;
\n-
155 }
\n-
\n-
156
\n-
159 // template <int M, int N>
\n-
160 // OptionalJacobian<M, N> block(int startRow, int startCol) {
\n-
161 // if (*this)
\n-
162 // OptionalJacobian<M, N>(map_.block<M, N>(startRow, startCol));
\n-
163 // else
\n-
164 // return OptionalJacobian<M, N>();
\n-
165 // }
\n-
166
\n-
170 template <int N>
\n-
\n-\n-
172 if (*this)
\n-
173 return OptionalJacobian<Rows, N>(&map_(0,startCol));
\n-
174 else
\n-\n-
176 }
\n-
\n-
177
\n-
182};
\n-
\n-
183
\n-
184// The pure dynamic specialization of this is needed to support
\n-
185// variable-sized types. Note that this is designed to work like the
\n-
186// boost optional scheme from GTSAM 3.
\n-
187template<>
\n-
\n-
188class OptionalJacobian<Eigen::Dynamic, Eigen::Dynamic> {
\n-
189
\n-
190public:
\n-
191
\n-
193 typedef Eigen::MatrixXd Jacobian;
\n-
194
\n-
195private:
\n-
196
\n-
197 Jacobian* pointer_;
\n-
198
\n-
199public:
\n-
200
\n-
\n-\n-
203 pointer_(nullptr) {
\n-
204 }
\n-
\n-
205
\n-
207 OptionalJacobian(Jacobian* pointer) : pointer_(pointer) {}
\n-
208
\n-
210 OptionalJacobian(Jacobian& dynamic) : pointer_(&dynamic) {}
\n-
211
\n-
212#ifndef OPTIONALJACOBIAN_NOBOOST
\n-
213
\n-
\n-
215 OptionalJacobian(boost::none_t /*none*/) :
\n-
216 pointer_(nullptr) {
\n-
217 }
\n+
\n+\n+
146 protected:
\n+
147 size_t id_;
\n+
148 size_t t_;
\n+
149 size_t tWall_;
\n+
150 double t2_ ;
\n+
151 size_t tIt_;
\n+
152 size_t tMax_;
\n+
153 size_t tMin_;
\n+
154 size_t n_;
\n+
155 size_t myOrder_;
\n+
156 size_t lastChildOrder_;
\n+
157 std::string label_;
\n+
158
\n+
159 // Tree structure
\n+
160 boost::weak_ptr<TimingOutline> parent_;
\n+\n+\n+
163
\n+
164#ifdef GTSAM_USING_NEW_BOOST_TIMERS
\n+
165 boost::timer::cpu_timer timer_;
\n+
166#else
\n+
167 boost::timer timer_;
\n+\n+
169#endif
\n+
170#ifdef GTSAM_USE_TBB
\n+
171 tbb::tick_count tbbTimer_;
\n+
172#endif
\n+
173 void add(size_t usecs, size_t usecsWall);
\n+
174
\n+
175 public:
\n+
177 GTSAM_EXPORT TimingOutline(const std::string& label, size_t myId);
\n+
178 GTSAM_EXPORT size_t time() const;
\n+
179 double secs() const { return double(time()) / 1000000.0;}
\n+
\n+
180 double self() const { return double(t_) / 1000000.0;}
\n+
\n+
181 double wall() const { return double(tWall_) / 1000000.0;}
\n+
\n+
182 double min() const { return double(tMin_) / 1000000.0;}
\n+
\n+
183 double max() const { return double(tMax_) / 1000000.0;}
\n+
\n+
184 double mean() const { return self() / double(n_); }
\n+
185 GTSAM_EXPORT void print(const std::string& outline = "") const;
\n+
186 GTSAM_EXPORT void print2(const std::string& outline = "", const double parentTotal = -1.0) const;
\n+
187 GTSAM_EXPORT const boost::shared_ptr<TimingOutline>&
\n+
188 child(size_t child, const std::string& label, const boost::weak_ptr<TimingOutline>& thisPtr);
\n+
189 GTSAM_EXPORT void tic();
\n+
190 GTSAM_EXPORT void toc();
\n+
191 GTSAM_EXPORT void finishedIteration();
\n+
192
\n+
193 GTSAM_EXPORT friend void toc(size_t id, const char *label);
\n+
194 }; // \\TimingOutline
\n+
195
\n+
\n+
199 class GTSAM_EXPORT AutoTicToc {
\n+
200 private:
\n+
201 size_t id_;
\n+
202 const char* label_;
\n+
203 bool isSet_;
\n+
204
\n+
205 public:
\n+
206 AutoTicToc(size_t id, const char* label)
\n+
207 : id_(id), label_(label), isSet_(true) {
\n+
208 tic(id_, label_);
\n+
209 }
\n+
210 void stop() {
\n+
211 toc(id_, label_);
\n+
212 isSet_ = false;
\n+
213 }
\n+
214 ~AutoTicToc() {
\n+
215 if (isSet_) stop();
\n+
216 }
\n+
217 };
\n
\n
218
\n-
\n-
220 OptionalJacobian(const boost::optional<Eigen::MatrixXd&> optional) :
\n-
221 pointer_(nullptr) {
\n-
222 if (optional) pointer_ = &(*optional);
\n-
223 }
\n-
\n-
224
\n-
225#endif
\n-
226
\n-
\n-
228 operator bool() const {
\n-
229 return pointer_!=nullptr;
\n-
230 }
\n-
\n-
231
\n-
\n-\n-
234 return *pointer_;
\n-
235 }
\n-
\n-
236
\n-
238 Jacobian* operator->(){ return pointer_; }
\n-
239};
\n-
\n-
240
\n-
241// forward declare
\n-
242template <typename T> struct traits;
\n-
243
\n-
249template <class T, class A>
\n-
\n-\n-
251 typedef Eigen::Matrix<double, traits<T>::dimension, traits<A>::dimension> type;
\n-
252};
\n-
\n-
253
\n-
260template<class T, class A>
\n-
\n-\n-\n-\n-
264};
\n-
\n+
219 GTSAM_EXTERN_EXPORT boost::shared_ptr<TimingOutline> gTimingRoot;
\n+
220 GTSAM_EXTERN_EXPORT boost::weak_ptr<TimingOutline> gCurrentTimer;
\n+
221 }
\n+
222
\n+
223// Tic and toc functions that are always active (whether or not ENABLE_TIMING is defined)
\n+
224// There is a trick being used here to achieve near-zero runtime overhead, in that a
\n+
225// static variable is created for each tic/toc statement storing an integer ID, but the
\n+
226// integer ID is only looked up by string once when the static variable is initialized
\n+
227// as the program starts.
\n+
228
\n+
229// tic
\n+
230#define gttic_(label) \\
\n+
231 static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\
\n+
232 ::gtsam::internal::AutoTicToc label##_obj(label##_id_tic, #label)
\n+
233
\n+
234// toc
\n+
235#define gttoc_(label) \\
\n+
236 label##_obj.stop()
\n+
237
\n+
238// tic
\n+
239#define longtic_(label) \\
\n+
240 static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\
\n+
241 ::gtsam::internal::ticInternal(label##_id_tic, #label)
\n+
242
\n+
243// toc
\n+
244#define longtoc_(label) \\
\n+
245 static const size_t label##_id_toc = ::gtsam::internal::getTicTocID(#label); \\
\n+
246 ::gtsam::internal::tocInternal(label##_id_toc, #label)
\n+
247
\n+
248// indicate iteration is finished
\n+
249inline void tictoc_finishedIteration_() {
\n+
250 ::gtsam::internal::gTimingRoot->finishedIteration(); }
\n+
251
\n+
252// print
\n+
253inline void tictoc_print_() {
\n+
254 ::gtsam::internal::gTimingRoot->print(); }
\n+
255
\n+
256// print mean and standard deviation
\n+
257inline void tictoc_print2_() {
\n+
258 ::gtsam::internal::gTimingRoot->print2(); }
\n+
259
\n+
260// get a node by label and assign it to variable
\n+
261#define tictoc_getNode(variable, label) \\
\n+
262 static const size_t label##_id_getnode = ::gtsam::internal::getTicTocID(#label); \\
\n+
263 const boost::shared_ptr<const ::gtsam::internal::TimingOutline> variable = \\
\n+
264 ::gtsam::internal::gCurrentTimer.lock()->child(label##_id_getnode, #label, ::gtsam::internal::gCurrentTimer);
\n
265
\n-
266} // namespace gtsam
\n-
267
\n+
266// reset
\n+
267inline void tictoc_reset_() {
\n+
268 ::gtsam::internal::gTimingRoot.reset(new ::gtsam::internal::TimingOutline("Total", ::gtsam::internal::getTicTocID("Total")));
\n+
269 ::gtsam::internal::gCurrentTimer = ::gtsam::internal::gTimingRoot; }
\n+
270
\n+
271#ifdef ENABLE_TIMING
\n+
272#define gttic(label) gttic_(label)
\n+
273#define gttoc(label) gttoc_(label)
\n+
274#define longtic(label) longtic_(label)
\n+
275#define longtoc(label) longtoc_(label)
\n+
276#define tictoc_finishedIteration tictoc_finishedIteration_
\n+
277#define tictoc_print tictoc_print_
\n+
278#define tictoc_reset tictoc_reset_
\n+
279#else
\n+
280#define gttic(label) ((void)0)
\n+
281#define gttoc(label) ((void)0)
\n+
282#define longtic(label) ((void)0)
\n+
283#define longtoc(label) ((void)0)
\n+
284#define tictoc_finishedIteration() ((void)0)
\n+
285#define tictoc_print() ((void)0)
\n+
286#define tictoc_reset() ((void)0)
\n+
287#endif
\n+
288
\n+
289}
\n+
\n+
\n+
\n+
\n+
\n+
\n+
Typedefs for easier changing of types.
\n+
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)
Constructor compatible with old-style derivatives.
Definition OptionalJacobian.h:127
\n-
OptionalJacobian(boost::none_t)
Constructor with boost::none just makes empty.
Definition OptionalJacobian.h:122
\n-
OptionalJacobian(Eigen::MatrixXd &dynamic)
Constructor that will resize a dynamic matrix (unless already correct)
Definition OptionalJacobian.h:88
\n-
Eigen::Map< Jacobian > & operator*()
De-reference, like boost optional.
Definition OptionalJacobian.h:148
\n-
OptionalJacobian()
Default constructor acts like boost::none.
Definition OptionalJacobian.h:70
\n-
OptionalJacobian(Jacobian &fixed)
Constructor that will usurp data of a fixed-size matrix.
Definition OptionalJacobian.h:75
\n-
OptionalJacobian(Eigen::Ref< MATRIX > dynamic_ref)
Constructor from an Eigen::Ref value.
Definition OptionalJacobian.h:106
\n-
OptionalJacobian(Eigen::MatrixXd *dynamic)
Constructor that will resize a dynamic matrix (unless already correct)
Definition OptionalJacobian.h:95
\n-
Eigen::Map< Jacobian > * operator->()
operator->()
Definition OptionalJacobian.h:153
\n-
Eigen::Matrix< double, Rows, Cols > Jacobian
Jacobian size type TODO(frank): how to enforce RowMajor? Or better, make it work with any storage ord...
Definition OptionalJacobian.h:47
\n-
OptionalJacobian(Jacobian *fixedPtr)
Constructor that will usurp data of a fixed-size matrix, pointer version.
Definition OptionalJacobian.h:81
\n-
OptionalJacobian< Rows, N > cols(int startCol)
Access M*N sub-block if we are allocated, otherwise none TODO(frank): this could work as is below if ...
Definition OptionalJacobian.h:171
\n-
OptionalJacobian()
View on constructor argument, if given.
Definition OptionalJacobian.h:202
\n-
OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)
Constructor compatible with old-style derivatives.
Definition OptionalJacobian.h:220
\n-
Eigen::MatrixXd Jacobian
Jacobian size type.
Definition OptionalJacobian.h:193
\n-
Jacobian & operator*()
De-reference, like boost optional.
Definition OptionalJacobian.h:233
\n-
OptionalJacobian(boost::none_t)
Constructor with boost::none just makes empty.
Definition OptionalJacobian.h:215
\n-
OptionalJacobian(Jacobian *pointer)
Construct from pointer to dynamic matrix.
Definition OptionalJacobian.h:207
\n-
OptionalJacobian(Jacobian &dynamic)
Construct from refrence to dynamic matrix.
Definition OptionalJacobian.h:210
\n-
Jacobian * operator->()
TODO: operator->()
Definition OptionalJacobian.h:238
\n-
: meta-function to generate Jacobian
Definition OptionalJacobian.h:250
\n-
: meta-function to generate JacobianTA optional reference Used mainly by Expressions
Definition OptionalJacobian.h:261
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+
Timing Entry, arranged in a tree.
Definition timing.h:145
\n+
double t2_
cache the
Definition timing.h:150
\n+
ChildMap children_
subtrees
Definition timing.h:162
\n+
double max() const
max time, in seconds
Definition timing.h:183
\n+
double wall() const
wall time, in seconds
Definition timing.h:181
\n+
double secs() const
time taken, in seconds, including children
Definition timing.h:179
\n+
double self() const
self time only, in seconds
Definition timing.h:180
\n+
boost::weak_ptr< TimingOutline > parent_
parent pointer
Definition timing.h:160
\n+
double min() const
min time, in seconds
Definition timing.h:182
\n+
double mean() const
mean self time, in seconds
Definition timing.h:184
\n+
GTSAM_EXPORT size_t time() const
time taken, including children
Definition timing.cpp:65
\n+
Small class that calls internal::tic at construction, and internol::toc when destroyed.
Definition timing.h:199
\n+
Helper struct that encapsulates a value with a default, this is just used as a member object so you d...
Definition types.h:137
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,321 +1,394 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-OptionalJacobian.h\n+timing.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21#include // Configuration from CMake\n-22#include \n-23#include \n-24#include \n-25\n-26#ifndef OPTIONALJACOBIAN_NOBOOST\n-27#include \n-28#endif\n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-40template\n-_\b4_\b1class _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn {\n-42\n-43public:\n-44\n-_\b4_\b7 typedef Eigen::Matrix _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n-48\n-49private:\n-50\n-51 Eigen::Map map_;\n-52\n-53 // Trick from http://eigen.tuxfamily.org/dox/group__TutorialMapClass.html\n-54 // uses \"placement new\" to make map_ usurp the memory of the fixed size\n-matrix\n-55 void usurp(double* data) {\n-56 new (&map_) Eigen::Map(data);\n-57 }\n-58\n-59 // Private and very dangerous constructor straight from memory\n-60 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(double* data) : map_(nullptr) {\n-61 if (data) usurp(data);\n-62 }\n-63\n-64 template\n-65 friend class OptionalJacobian;\n-66\n-67public:\n-68\n-_\b7_\b0 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() :\n-71 map_(nullptr) {\n-72 }\n-73\n-_\b7_\b5 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn& fixed) :\n-76 map_(nullptr) {\n-77 usurp(fixed.data());\n-78 }\n-79\n-_\b8_\b1 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn* fixedPtr) :\n-82 map_(nullptr) {\n-83 if (fixedPtr)\n-84 usurp(fixedPtr->data());\n-85 }\n-86\n-_\b8_\b8 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(Eigen::MatrixXd& dynamic) :\n-89 map_(nullptr) {\n-90 dynamic.resize(Rows, Cols); // no malloc if correct size\n-91 usurp(dynamic.data());\n-92 }\n-93\n-_\b9_\b5 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(Eigen::MatrixXd* dynamic) :\n-96 map_(nullptr) {\n-97 dynamic->resize(Rows, Cols); // no malloc if correct size\n-98 usurp(dynamic->data());\n-99 }\n-100\n-105 template\n-_\b1_\b0_\b6 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(Eigen::Ref dynamic_ref) :\n-107 map_(nullptr) {\n-108 if (dynamic_ref.rows() == Rows && dynamic_ref.cols() == Cols &&\n-!dynamic_ref.IsRowMajor) {\n-109 usurp(dynamic_ref.data());\n-110 } else {\n-111 throw std::invalid_argument(\n-112 std::string(\"OptionalJacobian called with wrong dimensions or \"\n-113 \"storage order.\\n\"\n-114 \"Expected: \") +\n-115 \"(\" + std::to_string(Rows) + \", \" + std::to_string(Cols) + \")\");\n-116 }\n-117 }\n-118\n-119#ifndef OPTIONALJACOBIAN_NOBOOST\n-120\n-_\b1_\b2_\b2 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(boost::none_t /*none*/) :\n-123 map_(nullptr) {\n-124 }\n-125\n-_\b1_\b2_\b7 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(const boost::optional optional) :\n-128 map_(nullptr) {\n-129 if (optional) {\n-130 optional->resize(Rows, Cols);\n-131 usurp(optional->data());\n-132 }\n-133 }\n-134\n-135#endif\n-136\n-139 // template \n-140 // OptionalJacobian(Eigen::Block block) :\n-map_(nullptr) { ?? }\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n+21#include \n+22#include // for GTSAM_USE_TBB\n+23\n+24#include \n+25#include \n+26#include \n+27\n+28#include \n+29#include \n+30\n+31// This file contains the GTSAM timing instrumentation library, a low-\n+overhead method for\n+32// learning at a medium-fine level how much time various components of an\n+algorithm take\n+33// in CPU and wall time.\n+34//\n+35// The output of this instrumentation is a call-tree-like printout containing\n+statistics\n+36// about each instrumented code block. To print this output at any time, call\n+37// tictoc_print() or tictoc_print_().\n+38//\n+39// An overall point to be aware of is that there are two versions of each\n+function - one\n+40// ending in an underscore '_' and one without the trailing underscore. The\n+underscore\n+41// versions always are active, but the versions without an underscore are\n+active only when\n+42// GTSAM_ENABLE_TIMING is defined (automatically defined in our CMake Timing\n+build type).\n+43// GTSAM algorithms are all instrumented with the non-underscore versions, so\n+generally\n+44// you should use the underscore versions in your own code to leave out the\n+GTSAM detail.\n+45//\n+46// gttic and gttoc start and stop a timed section, respectively. gttic\n+creates a *scoped*\n+47// object - when it goes out of scope gttoc is called automatically. Thus,\n+you do not\n+48// need to call gttoc if you are timing an entire function (see basic use\n+examples below).\n+49// However, you must be *aware* of this scoped nature - putting gttic inside\n+of an if(...)\n+50// block, for example, will only time code until the closing brace '}'. See\n+advanced\n+51// usage below if you need to avoid this.\n+52//\n+53// Multiple calls nest automatically - each gttic nests under the previous\n+gttic called\n+54// for which gttoc has not been called (or the previous gttic did not go out\n+of scope).\n+55//\n+56// Basic usage examples are as follows:\n+57//\n+58// - Timing an entire function:\n+59// void myFunction() {\n+60// gttic_(myFunction);\n+61// ........\n+62// }\n+63//\n+64// - Timing an entire function as well as its component parts:\n+65// void myLongFunction() {\n+66// gttic_(myLongFunction);\n+67// gttic_(step1); // Will nest under the 'myLongFunction' label\n+68// ........\n+69// gttoc_(step1);\n+70// gttic_(step2); // Will nest under the 'myLongFunction' label\n+71// ........\n+72// gttoc_(step2);\n+73// ........\n+74// }\n+75//\n+76// - Timing functions calling/called by other functions:\n+77// void oneStep() {\n+78// gttic_(oneStep); // Will automatically nest under the gttic label of the\n+calling function\n+79// .......\n+80// }\n+81// void algorithm() {\n+82// gttic_(algorithm);\n+83// oneStep(); // gttic's inside this function will automatically nest inside\n+our 'algorithm' label\n+84// twoStep(); // gttic's inside this function will automatically nest inside\n+our 'algorithm' label\n+85// }\n+86//\n+87//\n+88// Advanced usage:\n+89//\n+90// - \"Finishing iterations\" - to get correct min/max times for each call, you\n+must define\n+91// in your code what constitutes an iteration. A single sum for the min/max\n+times is\n+92// accumulated within each iteration. If you don't care about min/max times,\n+you don't\n+93// need to worry about this. For example:\n+94// void myOuterLoop() {\n+95// while(true) {\n+96// iterateMyAlgorithm();\n+97// tictoc_finishedIteration_();\n+98// tictoc_print_(); // Optional\n+99// }\n+100// }\n+101//\n+102// - Stopping timing a section in a different scope than it is started.\n+Normally, a gttoc\n+103// statement goes out of scope at end of C++ scope. However, you can use\n+longtic and\n+104// longtoc to start and stop timing with the specified label at any point,\n+without regard\n+105// too scope. Note that if you use these, it may become difficult to ensure\n+that you\n+106// have matching gttic/gttoc statments. You may want to consider\n+reorganizing your timing\n+107// outline to match the scope of your code.\n+108\n+109// Automatically use the new Boost timers if version is recent enough.\n+110#if BOOST_VERSION >= 104800\n+111# ifndef GTSAM_DISABLE_NEW_TIMERS\n+112# define GTSAM_USING_NEW_BOOST_TIMERS\n+113# endif\n+114#endif\n+115\n+116#ifdef GTSAM_USING_NEW_BOOST_TIMERS\n+117# include \n+118#else\n+119# include \n+120# include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+121#endif\n+122\n+123#ifdef GTSAM_USE_TBB\n+124# include \n+125# undef min\n+126# undef max\n+127# undef ERROR\n+128#endif\n+129\n+130namespace _\bg_\bt_\bs_\ba_\bm {\n+131\n+132 namespace internal {\n+133 // Generate/retrieve a unique global ID number that will be used to look up\n+tic/toc statements\n+134 GTSAM_EXPORT size_t getTicTocID(const char *description);\n+135\n+136 // Create new TimingOutline child for gCurrentTimer, make it gCurrentTimer,\n+and call tic method\n+137 GTSAM_EXPORT void tic(size_t id, const char *label);\n+138\n+139 // Call toc on gCurrentTimer and then set gCurrentTimer to the parent of\n+gCurrentTimer\n+140 GTSAM_EXPORT void toc(size_t id, const char *label);\n 141\n-_\b1_\b4_\b3 operator bool() const {\n-144 return map_.data() != nullptr;\n-145 }\n-146\n-_\b1_\b4_\b8 Eigen::Map& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() {\n-149 return map_;\n-150 }\n-151\n-_\b1_\b5_\b3 Eigen::Map* _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>() {\n-154 return &map_;\n-155 }\n-156\n-159 // template \n-160 // OptionalJacobian block(int startRow, int startCol) {\n-161 // if (*this)\n-162 // OptionalJacobian(map_.block(startRow, startCol));\n-163 // else\n-164 // return OptionalJacobian();\n-165 // }\n-166\n-170 template \n-_\b1_\b7_\b1 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bR_\bo_\bw_\bs_\b,_\b _\bN_\b> _\bc_\bo_\bl_\bs(int startCol) {\n-172 if (*this)\n-173 return _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bR_\bo_\bw_\bs_\b,_\b _\bN_\b>(&map_(0,startCol));\n-174 else\n-175 return _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bR_\bo_\bw_\bs_\b,_\b _\bN_\b>();\n-176 }\n-177\n-182};\n-183\n-184// The pure dynamic specialization of this is needed to support\n-185// variable-sized types. Note that this is designed to work like the\n-186// boost optional scheme from GTSAM 3.\n-187template<>\n-_\b1_\b8_\b8class _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn {\n-189\n-190public:\n-191\n-_\b1_\b9_\b3 typedef Eigen::MatrixXd _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n-194\n-195private:\n-196\n-197 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn* pointer_;\n-198\n-199public:\n-200\n-_\b2_\b0_\b2 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() :\n-203 pointer_(nullptr) {\n-204 }\n-205\n-_\b2_\b0_\b7 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn* pointer) : pointer_(pointer) {}\n-208\n-_\b2_\b1_\b0 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn& dynamic) : pointer_(&dynamic) {}\n-211\n-212#ifndef OPTIONALJACOBIAN_NOBOOST\n-213\n-_\b2_\b1_\b5 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(boost::none_t /*none*/) :\n-216 pointer_(nullptr) {\n-217 }\n+_\b1_\b4_\b5 class _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be {\n+146 protected:\n+147 size_t id_;\n+148 size_t t_;\n+149 size_t tWall_;\n+_\b1_\b5_\b0 double _\bt_\b2_\b_ ;\n+151 size_t tIt_;\n+152 size_t tMax_;\n+153 size_t tMin_;\n+154 size_t n_;\n+155 size_t myOrder_;\n+156 size_t lastChildOrder_;\n+157 std::string label_;\n+158\n+159 // Tree structure\n+_\b1_\b6_\b0 boost::weak_ptr _\bp_\ba_\br_\be_\bn_\bt_\b_;\n+161 typedef _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bs_\bi_\bz_\be_\b__\bt_\b,_\b _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b<_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b> > _\bC_\bh_\bi_\bl_\bd_\bM_\ba_\bp;\n+_\b1_\b6_\b2 _\bC_\bh_\bi_\bl_\bd_\bM_\ba_\bp _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_;\n+163\n+164#ifdef GTSAM_USING_NEW_BOOST_TIMERS\n+165 boost::timer::cpu_timer timer_;\n+166#else\n+167 boost::timer timer_;\n+168 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b<_\bb_\bo_\bo_\bl_\b,_\bf_\ba_\bl_\bs_\be_\b> timerActive_;\n+169#endif\n+170#ifdef GTSAM_USE_TBB\n+171 tbb::tick_count tbbTimer_;\n+172#endif\n+173 void add(size_t usecs, size_t usecsWall);\n+174\n+175 public:\n+177 GTSAM_EXPORT _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be(const std::string& label, size_t myId);\n+178 GTSAM_EXPORT size_t _\bt_\bi_\bm_\be() const;\n+_\b1_\b7_\b9 double _\bs_\be_\bc_\bs() const { return double(_\bt_\bi_\bm_\be()) / 1000000.0;}\n+_\b1_\b8_\b0 double _\bs_\be_\bl_\bf() const { return double(t_) / 1000000.0;}\n+_\b1_\b8_\b1 double _\bw_\ba_\bl_\bl() const { return double(tWall_) / 1000000.0;}\n+_\b1_\b8_\b2 double _\bm_\bi_\bn() const { return double(tMin_) / 1000000.0;}\n+_\b1_\b8_\b3 double _\bm_\ba_\bx() const { return double(tMax_) / 1000000.0;}\n+_\b1_\b8_\b4 double _\bm_\be_\ba_\bn() const { return _\bs_\be_\bl_\bf() / double(n_); }\n+185 GTSAM_EXPORT void print(const std::string& outline = \"\") const;\n+186 GTSAM_EXPORT void print2(const std::string& outline = \"\", const double\n+parentTotal = -1.0) const;\n+187 GTSAM_EXPORT const boost::shared_ptr&\n+188 child(size_t child, const std::string& label, const boost::\n+weak_ptr& thisPtr);\n+189 GTSAM_EXPORT void tic();\n+190 GTSAM_EXPORT void toc();\n+191 GTSAM_EXPORT void finishedIteration();\n+192\n+193 GTSAM_EXPORT friend void toc(size_t id, const char *label);\n+194 }; // \\TimingOutline\n+195\n+_\b1_\b9_\b9 class GTSAM_EXPORT _\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc {\n+200 private:\n+201 size_t id_;\n+202 const char* label_;\n+203 bool isSet_;\n+204\n+205 public:\n+206 _\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc(size_t id, const char* label)\n+207 : id_(id), label_(label), isSet_(true) {\n+208 tic(id_, label_);\n+209 }\n+210 void stop() {\n+211 toc(id_, label_);\n+212 isSet_ = false;\n+213 }\n+214 _\b~_\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc() {\n+215 if (isSet_) stop();\n+216 }\n+217 };\n 218\n-_\b2_\b2_\b0 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(const boost::optional optional) :\n-221 pointer_(nullptr) {\n-222 if (optional) pointer_ = &(*optional);\n-223 }\n-224\n-225#endif\n-226\n-_\b2_\b2_\b8 operator bool() const {\n-229 return pointer_!=nullptr;\n-230 }\n-231\n-_\b2_\b3_\b3 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() {\n-234 return *pointer_;\n-235 }\n-236\n-_\b2_\b3_\b8 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn* _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>(){ return pointer_; }\n-239};\n-240\n-241// forward declare\n-242template struct traits;\n-243\n-249template \n-_\b2_\b5_\b0struct _\bM_\ba_\bk_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn {\n-251 typedef Eigen::Matrix::dimension, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>\n-type;\n-252};\n-253\n-260template\n-_\b2_\b6_\b1struct _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn {\n-262 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn,\n-263 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> type;\n-264};\n+219 GTSAM_EXTERN_EXPORT boost::shared_ptr gTimingRoot;\n+220 GTSAM_EXTERN_EXPORT boost::weak_ptr gCurrentTimer;\n+221 }\n+222\n+223// Tic and toc functions that are always active (whether or not\n+ENABLE_TIMING is defined)\n+224// There is a trick being used here to achieve near-zero runtime overhead,\n+in that a\n+225// static variable is created for each tic/toc statement storing an integer\n+ID, but the\n+226// integer ID is only looked up by string once when the static variable is\n+initialized\n+227// as the program starts.\n+228\n+229// tic\n+230#define gttic_(label) \\\n+231 static const size_t label##_id_tic = ::gtsam::internal::getTicTocID\n+(#label); \\\n+232 ::gtsam::internal::AutoTicToc label##_obj(label##_id_tic, #label)\n+233\n+234// toc\n+235#define gttoc_(label) \\\n+236 label##_obj.stop()\n+237\n+238// tic\n+239#define longtic_(label) \\\n+240 static const size_t label##_id_tic = ::gtsam::internal::getTicTocID\n+(#label); \\\n+241 ::gtsam::internal::ticInternal(label##_id_tic, #label)\n+242\n+243// toc\n+244#define longtoc_(label) \\\n+245 static const size_t label##_id_toc = ::gtsam::internal::getTicTocID\n+(#label); \\\n+246 ::gtsam::internal::tocInternal(label##_id_toc, #label)\n+247\n+248// indicate iteration is finished\n+249inline void tictoc_finishedIteration_() {\n+250 ::gtsam::internal::gTimingRoot->finishedIteration(); }\n+251\n+252// print\n+253inline void tictoc_print_() {\n+254 ::gtsam::internal::gTimingRoot->print(); }\n+255\n+256// print mean and standard deviation\n+257inline void tictoc_print2_() {\n+258 ::gtsam::internal::gTimingRoot->print2(); }\n+259\n+260// get a node by label and assign it to variable\n+261#define tictoc_getNode(variable, label) \\\n+262 static const size_t label##_id_getnode = ::gtsam::internal::getTicTocID\n+(#label); \\\n+263 const boost::shared_ptr variable =\n+\\\n+264 ::gtsam::internal::gCurrentTimer.lock()->child(label##_id_getnode, #label,\n+::gtsam::internal::gCurrentTimer);\n 265\n-266} // namespace gtsam\n-267\n+266// reset\n+267inline void tictoc_reset_() {\n+268 ::gtsam::internal::gTimingRoot.reset(new ::gtsam::internal::TimingOutline\n+(\"Total\", ::gtsam::internal::getTicTocID(\"Total\")));\n+269 ::gtsam::internal::gCurrentTimer = ::gtsam::internal::gTimingRoot; }\n+270\n+271#ifdef ENABLE_TIMING\n+272#define gttic(label) gttic_(label)\n+273#define gttoc(label) gttoc_(label)\n+274#define longtic(label) longtic_(label)\n+275#define longtoc(label) longtoc_(label)\n+276#define tictoc_finishedIteration tictoc_finishedIteration_\n+277#define tictoc_print tictoc_print_\n+278#define tictoc_reset tictoc_reset_\n+279#else\n+280#define gttic(label) ((void)0)\n+281#define gttoc(label) ((void)0)\n+282#define longtic(label) ((void)0)\n+283#define longtoc(label) ((void)0)\n+284#define tictoc_finishedIteration() ((void)0)\n+285#define tictoc_print() ((void)0)\n+286#define tictoc_reset() ((void)0)\n+287#endif\n+288\n+289}\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n+_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n+A thin wrapper around std::map that uses boost's fast_pool_allocator.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)\n-Constructor compatible with old-style derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:127\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(boost::none_t)\n-Constructor with boost::none just makes empty.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:122\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(Eigen::MatrixXd &dynamic)\n-Constructor that will resize a dynamic matrix (unless already correct)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Eigen::Map< Jacobian > & operator*()\n-De-reference, like boost optional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:148\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian()\n-Default constructor acts like boost::none.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(Jacobian &fixed)\n-Constructor that will usurp data of a fixed-size matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(Eigen::Ref< MATRIX > dynamic_ref)\n-Constructor from an Eigen::Ref value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(Eigen::MatrixXd *dynamic)\n-Constructor that will resize a dynamic matrix (unless already correct)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n-Eigen::Map< Jacobian > * operator->()\n-operator->()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:153\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-Eigen::Matrix< double, Rows, Cols > Jacobian\n-Jacobian size type TODO(frank): how to enforce RowMajor? Or better, make it\n-work with any storage ord...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(Jacobian *fixedPtr)\n-Constructor that will usurp data of a fixed-size matrix, pointer version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bc_\bo_\bl_\bs\n-OptionalJacobian< Rows, N > cols(int startCol)\n-Access M*N sub-block if we are allocated, otherwise none TODO(frank): this\n-could work as is below if ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:171\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian()\n-View on constructor argument, if given.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:202\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)\n-Constructor compatible with old-style derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:220\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-Eigen::MatrixXd Jacobian\n-Jacobian size type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:193\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Jacobian & operator*()\n-De-reference, like boost optional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:233\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(boost::none_t)\n-Constructor with boost::none just makes empty.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:215\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(Jacobian *pointer)\n-Construct from pointer to dynamic matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian(Jacobian &dynamic)\n-Construct from refrence to dynamic matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:210\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-_\b>\n-Jacobian * operator->()\n-TODO: operator->()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:238\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-: meta-function to generate Jacobian\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:250\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-: meta-function to generate JacobianTA optional reference Used mainly by\n-Expressions\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:261\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be\n+Timing Entry, arranged in a tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:145\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bt_\b2_\b_\n+double t2_\n+cache the\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_\n+ChildMap children_\n+subtrees\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bm_\ba_\bx\n+double max() const\n+max time, in seconds\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:183\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bw_\ba_\bl_\bl\n+double wall() const\n+wall time, in seconds\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:181\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bs_\be_\bc_\bs\n+double secs() const\n+time taken, in seconds, including children\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:179\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bs_\be_\bl_\bf\n+double self() const\n+self time only, in seconds\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bp_\ba_\br_\be_\bn_\bt_\b_\n+boost::weak_ptr< TimingOutline > parent_\n+parent pointer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bm_\bi_\bn\n+double min() const\n+min time, in seconds\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:182\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bm_\be_\ba_\bn\n+double mean() const\n+mean self time, in seconds\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bt_\bi_\bm_\be\n+GTSAM_EXPORT size_t time() const\n+time taken, including children\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.cpp:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc\n+Small class that calls internal::tic at construction, and internol::toc when\n+destroyed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:199\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt\n+Helper struct that encapsulates a value with a default, this is just used as a\n+member object so you d...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:137\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n+ * _\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00140.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00140.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Vector.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/WeightedSampler.h File Reference\n \n \n \n \n \n \n \n@@ -94,112 +94,44 @@\n \n \n \n \n \n
\n \n-
Vector.cpp File Reference
\n+Classes |\n+Namespaces
\n+
WeightedSampler.h File Reference
\n \n
\n \n-

typedef and functions to augment Eigen's Vectors \n+

Fast sampling without replacement. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+

\n+Classes

class  gtsam::WeightedSampler< Engine >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-Functions

bool gtsam::fpEqual (double a, double b, double tol, bool check_relative_also=true)
 Ensure we are not including a different version of Eigen in user code than while compiling gtsam, since it can lead to hard-to-understand runtime crashes.
 
\n-void gtsam::print (const Vector &v, const std::string &s, std::ostream &stream)
 print without optional string, must specify cout yourself
 
\n-void gtsam::print (const Vector &v, const std::string &s="")
 print with optional string to cout
 
\n-void gtsam::save (const Vector &A, const std::string &s, const std::string &filename)
 save a vector to file, which can be loaded by matlab
 
\n-bool gtsam::operator== (const Vector &vec1, const Vector &vec2)
 operator==()
 
\n-bool gtsam::greaterThanOrEqual (const Vector &v1, const Vector &v2)
 Greater than or equal to operation returns true if all elements in v1 are greater than corresponding elements in v2.
 
\n-bool gtsam::equal_with_abs_tol (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 VecA == VecB up to tolerance.
 
\n-bool gtsam::equal_with_abs_tol (const SubVector &vec1, const SubVector &vec2, double tol)
 
bool gtsam::assert_equal (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 Same, prints if error.
 
bool gtsam::assert_inequal (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 Not the same, prints if error.
 
bool gtsam::assert_equal (const SubVector &vec1, const SubVector &vec2, double tol=1e-9)
 Same, prints if error.
 
\n-bool gtsam::assert_equal (const ConstSubVector &expected, const ConstSubVector &actual, double tol)
 
bool gtsam::linear_dependent (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 check whether two vectors are linearly dependent
 
Vector gtsam::ediv_ (const Vector &a, const Vector &b)
 elementwise division, but 0/0 = 0, not inf
 
\n-double gtsam::houseInPlace (Vector &x)
 beta = house(x) computes the HouseHolder vector in place
 
pair< double, Vector > gtsam::house (const Vector &x)
 house(x,j) computes HouseHolder vector v and scaling factor beta from x, such that the corresponding Householder reflection zeroes out all but x.
 
\n-double gtsam::weightedPseudoinverse (const Vector &a, const Vector &weights, Vector &pseudo)
 
pair< Vector, double > gtsam::weightedPseudoinverse (const Vector &v, const Vector &weights)
 Weighted Householder solution vector, a.k.a., the pseudoinverse of the column NOTE: if any sigmas are zero (indicating a constraint) the pseudoinverse will be a selection vector, and the variance will be zero.
 
\n-Vector gtsam::concatVectors (const std::list< Vector > &vs)
 concatenate Vectors
 
\n-Vector gtsam::concatVectors (size_t nrVectors,...)
 concatenate Vectors
 
\n

Detailed Description

\n-

typedef and functions to augment Eigen's Vectors

\n-
Author
Kai Ni
\n-
\n-Frank Dellaert
\n-
\n-Varun Agrawal
\n+

Fast sampling without replacement.

\n+
Author
Frank Dellaert
\n+
Date
May 2019
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,105 +1,26 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Vector.cpp File Reference\n-typedef and functions to augment Eigen's Vectors _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+WeightedSampler.h File Reference\n+Fast sampling without replacement. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br_\b<_\b _\bE_\bn_\bg_\bi_\bn_\be_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bp_\bE_\bq_\bu_\ba_\bl (double a, double b, double tol, bool\n- check_relative_also=true)\n- Ensure we are not including a different version of\n-\u00a0 Eigen in user code than while compiling gtsam, since it\n- can lead to hard-to-understand runtime crashes.\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Vector &v, const std::string &s,\n- std::ostream &stream)\n-\u00a0 print without optional string, must specify cout\n- yourself\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Vector &v, const std::string &s=\"\")\n-\u00a0 print with optional string to cout\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsa\bav\bve\be (const Vector &A, const std::string &s,\n- const std::string &filename)\n-\u00a0 save a vector to file, which can be loaded by matlab\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br=\b==\b= (const Vector &vec1, const Vector\n- &vec2)\n-\u00a0 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=_\b(_\b)\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgr\bre\bea\bat\bte\ber\brT\bTh\bha\ban\bnO\bOr\brE\bEq\bqu\bua\bal\bl (const Vector &v1, const\n- Vector &v2)\n- Greater than or equal to operation returns true if all\n-\u00a0 elements in v1 are greater than corresponding elements\n- in v2.\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl_\b_w\bwi\bit\bth\bh_\b_a\bab\bbs\bs_\b_t\bto\bol\bl (const Vector &vec1, const\n- Vector &vec2, double tol=1e-9)\n-\u00a0 VecA == VecB up to tolerance.\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl_\b_w\bwi\bit\bth\bh_\b_a\bab\bbs\bs_\b_t\bto\bol\bl (const SubVector &vec1, const\n- SubVector &vec2, double tol)\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl (const Vector &vec1, const Vector\n- &vec2, double tol=1e-9)\n-\u00a0 Same, prints if error.\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl (const Vector &vec1, const Vector\n- &vec2, double tol=1e-9)\n-\u00a0 Not the same, prints if error.\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl (const SubVector &vec1, const\n- SubVector &vec2, double tol=1e-9)\n-\u00a0 Same, prints if error.\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const ConstSubVector &expected,\n- const ConstSubVector &actual, double tol)\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt (const Vector &vec1, const\n- Vector &vec2, double tol=1e-9)\n-\u00a0 check whether two vectors are linearly dependent\n-\u00a0\n- Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bd_\bi_\bv_\b_ (const Vector &a, const Vector &b)\n-\u00a0 elementwise division, but 0/0 = 0, not inf\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:h\bho\bou\bus\bse\beI\bIn\bnP\bPl\bla\bac\bce\be (Vector &x)\n-\u00a0 beta = house(x) computes the HouseHolder vector in\n- place\n-\u00a0\n-pair< double, Vector >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be (const Vector &x)\n- house(x,j) computes HouseHolder vector v and scaling\n-\u00a0 factor beta from x, such that the corresponding\n- Householder reflection zeroes out all but x.\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:w\bwe\bei\big\bgh\bht\bte\bed\bdP\bPs\bse\beu\bud\bdo\boi\bin\bnv\bve\ber\brs\bse\be (const Vector &a, const\n- Vector &weights, Vector &pseudo)\n-\u00a0\n-pair< Vector, double >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\bP_\bs_\be_\bu_\bd_\bo_\bi_\bn_\bv_\be_\br_\bs_\be (const Vector &v, const\n- Vector &weights)\n- Weighted Householder solution vector, a.k.a., the\n-\u00a0 pseudoinverse of the column NOTE: if any sigmas are\n- zero (indicating a constraint) the pseudoinverse will\n- be a selection vector, and the variance will be zero.\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnc\bca\bat\btV\bVe\bec\bct\bto\bor\brs\bs (const std::list< Vector > &vs)\n-\u00a0 concatenate Vectors\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnc\bca\bat\btV\bVe\bec\bct\bto\bor\brs\bs (size_t nrVectors,...)\n-\u00a0 concatenate Vectors\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-typedef and functions to augment Eigen's Vectors\n+Fast sampling without replacement.\n Author\n- Kai Ni\n Frank Dellaert\n- Varun Agrawal\n+ Date\n+ May 2019\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bV_\be_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00140.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00140.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,19 +1,3 @@\n var a00140 = [\n- [\"assert_equal\", \"a00140.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\", null],\n- [\"assert_equal\", \"a00140.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\", null],\n- [\"assert_inequal\", \"a00140.html#a2ca3db47b15350977c1f03c5560ab332\", null],\n- [\"concatVectors\", \"a00140.html#ae1c88acfa9575bcea3f2e738cb637a85\", null],\n- [\"concatVectors\", \"a00140.html#a09610ec69a8b3f3a00399bb378eda9cf\", null],\n- [\"ediv_\", \"a00140.html#a14844c96706dc362917e0d5e76d65fbe\", null],\n- [\"equal_with_abs_tol\", \"a00140.html#a8bdced1844ffd6a53af0396d82eaa6da\", null],\n- [\"fpEqual\", \"a00140.html#ae19c359190a379cba44bf818a2293f7c\", null],\n- [\"greaterThanOrEqual\", \"a00140.html#a368ee40bd9c0124d572d2e49bcb077bf\", null],\n- [\"house\", \"a00140.html#afb77eefc25dea0fb3e0fcc8f246b617a\", null],\n- [\"houseInPlace\", \"a00140.html#ac9c0c05b0198ec0fb6e4115edb755910\", null],\n- [\"linear_dependent\", \"a00140.html#a2a0cfd7908b06491df49b6a9c9186775\", null],\n- [\"operator==\", \"a00140.html#a64988014ab746343803620dc42513646\", null],\n- [\"print\", \"a00140.html#a760cc36e9009b23cf564c436294b3504\", null],\n- [\"print\", \"a00140.html#a5e5d8018a0f44a6a299406aeda27d44b\", null],\n- [\"save\", \"a00140.html#a09f2bbdb9f9d633542362dbe8d79f9ab\", null],\n- [\"weightedPseudoinverse\", \"a00140.html#aca1c56d11a05464a7a5458dc32ccc777\", null]\n+ [\"gtsam::WeightedSampler< Engine >\", \"a02664.html\", \"a02664\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00143_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00143_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/numericalDerivative.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/chartTesting.h Source File\n \n \n \n \n \n \n \n@@ -98,941 +98,95 @@\n
No Matches
\n \n \n \n \n \n
\n-
numericalDerivative.h
\n+
chartTesting.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18// \\callgraph
\n+
12/*
\n+
13 * @file chartTesting.h
\n+
14 * @brief
\n+
15 * @date November, 2014
\n+
16 * @author Paul Furgale
\n+
17 */
\n+
18
\n
19#pragma once
\n
20
\n-
21#include <functional>
\n-
22
\n-\n-\n-\n-
26#include <gtsam/base/Lie.h>
\n+
21#include <gtsam/base/Matrix.h>
\n+
22#include <gtsam/base/Manifold.h>
\n+
23#include <gtsam/base/Testable.h>
\n+
24#include <CppUnitLite/TestResult.h>
\n+
25#include <CppUnitLite/Test.h>
\n+
26#include <CppUnitLite/Failure.h>
\n
27
\n-
28namespace gtsam {
\n-
29
\n-
30/*
\n-
31 * Note that all of these functions have two versions, a boost.function version and a
\n-
32 * standard C++ function pointer version. This allows reformulating the arguments of
\n-
33 * a function to fit the correct structure, which is useful for situations like
\n-
34 * member functions and functions with arguments not involved in the derivative:
\n-
35 *
\n-
36 * Usage of the boost bind version to rearrange arguments:
\n-
37 * for a function with one relevant param and an optional derivative:
\n-
38 * Foo bar(const Obj& a, boost::optional<Matrix&> H1)
\n-
39 * Use boost.bind to restructure:
\n-
40 * std::bind(bar, std::placeholders::_1, boost::none)
\n-
41 * This syntax will fix the optional argument to boost::none, while using the first argument provided
\n-
42 *
\n-
43 * For member functions, such as below, with an instantiated copy instanceOfSomeClass
\n-
44 * Foo SomeClass::bar(const Obj& a)
\n-
45 * Use boost bind as follows to create a function pointer that uses the member function:
\n-
46 * std::bind(&SomeClass::bar, ref(instanceOfSomeClass), std::placeholders::_1)
\n-
47 *
\n-
48 * For additional details, see the documentation:
\n-
49 * http://www.boost.org/doc/libs/release/libs/bind/bind.html
\n-
50 */
\n+
\n+
28namespace gtsam {
\n+
29// Do a full concept check and test the invertibility of local() vs. retract().
\n+
30template<typename T>
\n+
31void testDefaultChart(TestResult& result_,
\n+
32 const std::string& name_,
\n+
33 const T& value) {
\n+
34
\n+
35 GTSAM_CONCEPT_TESTABLE_TYPE(T)
\n+
36
\n+
37 typedef typename gtsam::DefaultChart<T> Chart;
\n+
38 typedef typename Chart::vector Vector;
\n+
39
\n+
40 // First, check the basic chart concept. This checks that the interface is satisfied.
\n+
41 // The rest of the function is even more detailed, checking the correctness of the chart.
\n+
42 BOOST_CONCEPT_ASSERT((ChartConcept<Chart>));
\n+
43
\n+
44 T other = value;
\n+
45
\n+
46 // Check that the dimension of the local value matches the chart dimension.
\n+
47 Vector dx = Chart::local(value, other);
\n+
48 EXPECT_LONGS_EQUAL(Chart::getDimension(value), dx.size());
\n+
49 // And that the "local" of a value vs. itself is zero.
\n+
50 EXPECT(assert_equal(Matrix(dx), Matrix(Eigen::VectorXd::Zero(dx.size()))));
\n
51
\n-
52
\n-
53// a quick helper struct to get the appropriate fixed sized matrix from two value types
\n-
54namespace internal {
\n-
55template<class Y, class X=double>
\n-
\n-\n-
57 typedef Eigen::Matrix<double,traits<Y>::dimension, traits<X>::dimension> type;
\n-
58};
\n-
\n-
59}
\n-
60
\n-
69template <class X, int N = traits<X>::dimension>
\n-
\n-
70typename Eigen::Matrix<double, N, 1> numericalGradient(
\n-
71 std::function<double(const X&)> h, const X& x, double delta = 1e-5) {
\n-
72 double factor = 1.0 / (2.0 * delta);
\n-
73
\n-
74 BOOST_STATIC_ASSERT_MSG(
\n-
75 (boost::is_base_of<manifold_tag, typename traits<X>::structure_category>::value),
\n-
76 "Template argument X must be a manifold type.");
\n-
77 BOOST_STATIC_ASSERT_MSG(N>0, "Template argument X must be fixed-size type or N must be specified.");
\n-
78
\n-
79 // Prepare a tangent vector to perturb x with, only works for fixed size
\n-
80 typename traits<X>::TangentVector d;
\n-
81 d.setZero();
\n-
82
\n-
83 Eigen::Matrix<double,N,1> g;
\n-
84 g.setZero();
\n-
85 for (int j = 0; j < N; j++) {
\n-
86 d(j) = delta;
\n-
87 double hxplus = h(traits<X>::Retract(x, d));
\n-
88 d(j) = -delta;
\n-
89 double hxmin = h(traits<X>::Retract(x, d));
\n-
90 d(j) = 0;
\n-
91 g(j) = (hxplus - hxmin) * factor;
\n-
92 }
\n-
93 return g;
\n-
94}
\n-
\n-
95
\n-
108template <class Y, class X, int N = traits<X>::dimension>
\n-
109// TODO Should compute fixed-size matrix
\n-
\n-
110typename internal::FixedSizeMatrix<Y, X>::type numericalDerivative11(
\n-
111 std::function<Y(const X&)> h, const X& x, double delta = 1e-5) {
\n-
112 typedef typename internal::FixedSizeMatrix<Y,X>::type Matrix;
\n-
113
\n-
114 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
115 "Template argument Y must be a manifold type.");
\n-
116 typedef traits<Y> TraitsY;
\n-
117
\n-
118 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X>::structure_category>::value),
\n-
119 "Template argument X must be a manifold type.");
\n-
120 BOOST_STATIC_ASSERT_MSG(N>0, "Template argument X must be fixed-size type or N must be specified.");
\n-
121 typedef traits<X> TraitsX;
\n-
122
\n-
123 // get value at x, and corresponding chart
\n-
124 const Y hx = h(x);
\n-
125
\n-
126 // Bit of a hack for now to find number of rows
\n-
127 const typename TraitsY::TangentVector zeroY = TraitsY::Local(hx, hx);
\n-
128 const size_t m = zeroY.size();
\n-
129
\n-
130 // Prepare a tangent vector to perturb x with, only works for fixed size
\n-
131 Eigen::Matrix<double, N, 1> dx;
\n-
132 dx.setZero();
\n-
133
\n-
134 // Fill in Jacobian H
\n-
135 Matrix H = Matrix::Zero(m, N);
\n-
136 const double factor = 1.0 / (2.0 * delta);
\n-
137 for (int j = 0; j < N; j++) {
\n-
138 dx(j) = delta;
\n-
139 const auto dy1 = TraitsY::Local(hx, h(TraitsX::Retract(x, dx)));
\n-
140 dx(j) = -delta;
\n-
141 const auto dy2 = TraitsY::Local(hx, h(TraitsX::Retract(x, dx)));
\n-
142 dx(j) = 0;
\n-
143 H.col(j) << (dy1 - dy2) * factor;
\n-
144 }
\n-
145 return H;
\n-
146}
\n-
\n-
147
\n-
149template<class Y, class X>
\n-
\n-
150typename internal::FixedSizeMatrix<Y,X>::type numericalDerivative11(Y (*h)(const X&), const X& x,
\n-
151 double delta = 1e-5) {
\n-
152 return numericalDerivative11<Y, X>(std::bind(h, std::placeholders::_1), x,
\n-
153 delta);
\n-
154}
\n-
\n-
155
\n-
165template<class Y, class X1, class X2, int N = traits<X1>::dimension>
\n-
\n-
166typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative21(const std::function<Y(const X1&, const X2&)>& h,
\n-
167 const X1& x1, const X2& x2, double delta = 1e-5) {
\n-
168 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
169 "Template argument Y must be a manifold type.");
\n-
170 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
171 "Template argument X1 must be a manifold type.");
\n-
172 return numericalDerivative11<Y, X1, N>(
\n-
173 std::bind(h, std::placeholders::_1, std::cref(x2)), x1, delta);
\n-
174}
\n-
\n-
175
\n-
177template<class Y, class X1, class X2>
\n-
\n-
178typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative21(Y (*h)(const X1&, const X2&), const X1& x1,
\n-
179 const X2& x2, double delta = 1e-5) {
\n-
180 return numericalDerivative21<Y, X1, X2>(
\n-
181 std::bind(h, std::placeholders::_1, std::placeholders::_2), x1, x2,
\n-
182 delta);
\n-
183}
\n-
\n-
184
\n-
194template<class Y, class X1, class X2, int N = traits<X2>::dimension>
\n-
\n-
195typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative22(std::function<Y(const X1&, const X2&)> h,
\n-
196 const X1& x1, const X2& x2, double delta = 1e-5) {
\n-
197// BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
198// "Template argument X1 must be a manifold type.");
\n-
199 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X2>::structure_category>::value),
\n-
200 "Template argument X2 must be a manifold type.");
\n-
201 return numericalDerivative11<Y, X2, N>(
\n-
202 std::bind(h, std::cref(x1), std::placeholders::_1), x2, delta);
\n-
203}
\n-
\n-
204
\n-
206template<class Y, class X1, class X2>
\n-
\n-
207typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative22(Y (*h)(const X1&, const X2&), const X1& x1,
\n-
208 const X2& x2, double delta = 1e-5) {
\n-
209 return numericalDerivative22<Y, X1, X2>(
\n-
210 std::bind(h, std::placeholders::_1, std::placeholders::_2), x1, x2,
\n-
211 delta);
\n-
212}
\n-
\n-
213
\n-
225template<class Y, class X1, class X2, class X3, int N = traits<X1>::dimension>
\n-
\n-
226typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative31(
\n-
227 std::function<Y(const X1&, const X2&, const X3&)> h, const X1& x1,
\n-
228 const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
229 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
230 "Template argument Y must be a manifold type.");
\n-
231 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
232 "Template argument X1 must be a manifold type.");
\n-
233 return numericalDerivative11<Y, X1, N>(
\n-
234 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3)),
\n-
235 x1, delta);
\n-
236}
\n-
\n-
237
\n-
238template<class Y, class X1, class X2, class X3>
\n-
239typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative31(Y (*h)(const X1&, const X2&, const X3&),
\n-
240 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
241 return numericalDerivative31<Y, X1, X2, X3>(
\n-
242 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
243 std::placeholders::_3),
\n-
244 x1, x2, x3, delta);
\n-
245}
\n-
246
\n-
258template<class Y, class X1, class X2, class X3, int N = traits<X2>::dimension>
\n-
\n-
259typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative32(
\n-
260 std::function<Y(const X1&, const X2&, const X3&)> h, const X1& x1,
\n-
261 const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
262 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
263 "Template argument Y must be a manifold type.");
\n-
264 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X2>::structure_category>::value),
\n-
265 "Template argument X2 must be a manifold type.");
\n-
266 return numericalDerivative11<Y, X2, N>(
\n-
267 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3)),
\n-
268 x2, delta);
\n-
269}
\n-
\n-
270
\n-
271template<class Y, class X1, class X2, class X3>
\n-
272inline typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative32(Y (*h)(const X1&, const X2&, const X3&),
\n-
273 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
274 return numericalDerivative32<Y, X1, X2, X3>(
\n-
275 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
276 std::placeholders::_3),
\n-
277 x1, x2, x3, delta);
\n-
278}
\n-
279
\n-
291template<class Y, class X1, class X2, class X3, int N = traits<X3>::dimension>
\n-
\n-
292typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative33(
\n-
293 std::function<Y(const X1&, const X2&, const X3&)> h, const X1& x1,
\n-
294 const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
295 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
296 "Template argument Y must be a manifold type.");
\n-
297 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X3>::structure_category>::value),
\n-
298 "Template argument X3 must be a manifold type.");
\n-
299 return numericalDerivative11<Y, X3, N>(
\n-
300 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1),
\n-
301 x3, delta);
\n-
302}
\n-
\n-
303
\n-
304template<class Y, class X1, class X2, class X3>
\n-
305inline typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative33(Y (*h)(const X1&, const X2&, const X3&),
\n-
306 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
307 return numericalDerivative33<Y, X1, X2, X3>(
\n-
308 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
309 std::placeholders::_3),
\n-
310 x1, x2, x3, delta);
\n-
311}
\n-
312
\n-
324template<class Y, class X1, class X2, class X3, class X4, int N = traits<X1>::dimension>
\n-
\n-
325typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative41(
\n-
326 std::function<Y(const X1&, const X2&, const X3&, const X4&)> h, const X1& x1,
\n-
327 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n-
328 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
329 "Template argument Y must be a manifold type.");
\n-
330 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
331 "Template argument X1 must be a manifold type.");
\n-
332 return numericalDerivative11<Y, X1, N>(
\n-
333 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),
\n-
334 std::cref(x4)),
\n-
335 x1, delta);
\n-
336}
\n-
\n-
337
\n-
338template<class Y, class X1, class X2, class X3, class X4>
\n-
339inline typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative41(Y (*h)(const X1&, const X2&, const X3&, const X4&),
\n-
340 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n-
341 return numericalDerivative41<Y, X1, X2, X3, X4>(
\n-
342 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
343 std::placeholders::_3, std::placeholders::_4),
\n-
344 x1, x2, x3, x4);
\n-
345}
\n-
346
\n-
358template<class Y, class X1, class X2, class X3, class X4, int N = traits<X2>::dimension>
\n-
\n-
359typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative42(
\n-
360 std::function<Y(const X1&, const X2&, const X3&, const X4&)> h, const X1& x1,
\n-
361 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n-
362 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
363 "Template argument Y must be a manifold type.");
\n-
364 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X2>::structure_category>::value),
\n-
365 "Template argument X2 must be a manifold type.");
\n-
366 return numericalDerivative11<Y, X2, N>(
\n-
367 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),
\n-
368 std::cref(x4)),
\n-
369 x2, delta);
\n-
370}
\n-
\n-
371
\n-
372template<class Y, class X1, class X2, class X3, class X4>
\n-
373inline typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative42(Y (*h)(const X1&, const X2&, const X3&, const X4&),
\n-
374 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n-
375 return numericalDerivative42<Y, X1, X2, X3, X4>(
\n-
376 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
377 std::placeholders::_3, std::placeholders::_4),
\n-
378 x1, x2, x3, x4);
\n-
379}
\n-
380
\n-
392template<class Y, class X1, class X2, class X3, class X4, int N = traits<X3>::dimension>
\n-
\n-
393typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative43(
\n-
394 std::function<Y(const X1&, const X2&, const X3&, const X4&)> h, const X1& x1,
\n-
395 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n-
396 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
397 "Template argument Y must be a manifold type.");
\n-
398 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X3>::structure_category>::value),
\n-
399 "Template argument X3 must be a manifold type.");
\n-
400 return numericalDerivative11<Y, X3, N>(
\n-
401 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,
\n-
402 std::cref(x4)),
\n-
403 x3, delta);
\n-
404}
\n-
\n-
405
\n-
406template<class Y, class X1, class X2, class X3, class X4>
\n-
407inline typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative43(Y (*h)(const X1&, const X2&, const X3&, const X4&),
\n-
408 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n-
409 return numericalDerivative43<Y, X1, X2, X3, X4>(
\n-
410 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
411 std::placeholders::_3, std::placeholders::_4),
\n-
412 x1, x2, x3, x4);
\n-
413}
\n-
414
\n-
426template<class Y, class X1, class X2, class X3, class X4, int N = traits<X4>::dimension>
\n-
\n-
427typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative44(
\n-
428 std::function<Y(const X1&, const X2&, const X3&, const X4&)> h, const X1& x1,
\n-
429 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n-
430 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
431 "Template argument Y must be a manifold type.");
\n-
432 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X4>::structure_category>::value),
\n-
433 "Template argument X4 must be a manifold type.");
\n-
434 return numericalDerivative11<Y, X4, N>(
\n-
435 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n-
436 std::placeholders::_1),
\n-
437 x4, delta);
\n-
438}
\n-
\n-
439
\n-
440template<class Y, class X1, class X2, class X3, class X4>
\n-
441inline typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative44(Y (*h)(const X1&, const X2&, const X3&, const X4&),
\n-
442 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {
\n-
443 return numericalDerivative44<Y, X1, X2, X3, X4>(
\n-
444 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
445 std::placeholders::_3, std::placeholders::_4),
\n-
446 x1, x2, x3, x4);
\n-
447}
\n-
448
\n-
461template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X1>::dimension>
\n-
\n-
462typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative51(
\n-
463 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&)> h, const X1& x1,
\n-
464 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n-
465 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
466 "Template argument Y must be a manifold type.");
\n-
467 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
468 "Template argument X1 must be a manifold type.");
\n-
469 return numericalDerivative11<Y, X1, N>(
\n-
470 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),
\n-
471 std::cref(x4), std::cref(x5)),
\n-
472 x1, delta);
\n-
473}
\n-
\n-
474
\n-
475template<class Y, class X1, class X2, class X3, class X4, class X5>
\n-
476inline typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative51(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),
\n-
477 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n-
478 return numericalDerivative51<Y, X1, X2, X3, X4, X5>(
\n-
479 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
480 std::placeholders::_3, std::placeholders::_4,
\n-
481 std::placeholders::_5),
\n-
482 x1, x2, x3, x4, x5);
\n-
483}
\n-
484
\n-
497template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X2>::dimension>
\n-
\n-
498typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative52(
\n-
499 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&)> h, const X1& x1,
\n-
500 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n-
501 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
502 "Template argument Y must be a manifold type.");
\n-
503 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
504 "Template argument X1 must be a manifold type.");
\n-
505 return numericalDerivative11<Y, X2, N>(
\n-
506 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),
\n-
507 std::cref(x4), std::cref(x5)),
\n-
508 x2, delta);
\n-
509}
\n-
\n-
510
\n-
511template<class Y, class X1, class X2, class X3, class X4, class X5>
\n-
512inline typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative52(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),
\n-
513 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n-
514 return numericalDerivative52<Y, X1, X2, X3, X4, X5>(
\n-
515 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
516 std::placeholders::_3, std::placeholders::_4,
\n-
517 std::placeholders::_5),
\n-
518 x1, x2, x3, x4, x5);
\n-
519}
\n-
520
\n-
533template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X3>::dimension>
\n-
\n-
534typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative53(
\n-
535 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&)> h, const X1& x1,
\n-
536 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n-
537 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
538 "Template argument Y must be a manifold type.");
\n-
539 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
540 "Template argument X1 must be a manifold type.");
\n-
541 return numericalDerivative11<Y, X3, N>(
\n-
542 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,
\n-
543 std::cref(x4), std::cref(x5)),
\n-
544 x3, delta);
\n-
545}
\n-
\n-
546
\n-
547template<class Y, class X1, class X2, class X3, class X4, class X5>
\n-
548inline typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative53(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),
\n-
549 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n-
550 return numericalDerivative53<Y, X1, X2, X3, X4, X5>(
\n-
551 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
552 std::placeholders::_3, std::placeholders::_4,
\n-
553 std::placeholders::_5),
\n-
554 x1, x2, x3, x4, x5);
\n-
555}
\n-
556
\n-
569template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X4>::dimension>
\n-
\n-
570typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative54(
\n-
571 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&)> h, const X1& x1,
\n-
572 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n-
573 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
574 "Template argument Y must be a manifold type.");
\n-
575 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
576 "Template argument X1 must be a manifold type.");
\n-
577 return numericalDerivative11<Y, X4, N>(
\n-
578 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n-
579 std::placeholders::_1, std::cref(x5)),
\n-
580 x4, delta);
\n-
581}
\n-
\n-
582
\n-
583template<class Y, class X1, class X2, class X3, class X4, class X5>
\n-
584inline typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative54(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),
\n-
585 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n-
586 return numericalDerivative54<Y, X1, X2, X3, X4, X5>(
\n-
587 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
588 std::placeholders::_3, std::placeholders::_4,
\n-
589 std::placeholders::_5),
\n-
590 x1, x2, x3, x4, x5);
\n-
591}
\n-
592
\n-
605template<class Y, class X1, class X2, class X3, class X4, class X5, int N = traits<X5>::dimension>
\n-
\n-
606typename internal::FixedSizeMatrix<Y,X5>::type numericalDerivative55(
\n-
607 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&)> h, const X1& x1,
\n-
608 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n-
609 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
610 "Template argument Y must be a manifold type.");
\n-
611 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
612 "Template argument X1 must be a manifold type.");
\n-
613 return numericalDerivative11<Y, X5, N>(
\n-
614 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n-
615 std::cref(x4), std::placeholders::_1),
\n-
616 x5, delta);
\n-
617}
\n-
\n-
618
\n-
619template<class Y, class X1, class X2, class X3, class X4, class X5>
\n-
620inline typename internal::FixedSizeMatrix<Y,X5>::type numericalDerivative55(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),
\n-
621 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-5) {
\n-
622 return numericalDerivative55<Y, X1, X2, X3, X4, X5>(
\n-
623 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
624 std::placeholders::_3, std::placeholders::_4,
\n-
625 std::placeholders::_5),
\n-
626 x1, x2, x3, x4, x5);
\n-
627}
\n-
628
\n-
642template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X1>::dimension>
\n-
\n-
643typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative61(
\n-
644 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h, const X1& x1,
\n-
645 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
646 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
647 "Template argument Y must be a manifold type.");
\n-
648 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
649 "Template argument X1 must be a manifold type.");
\n-
650 return numericalDerivative11<Y, X1, N>(
\n-
651 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),
\n-
652 std::cref(x4), std::cref(x5), std::cref(x6)),
\n-
653 x1, delta);
\n-
654}
\n-
\n-
655
\n-
656template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n-
657inline typename internal::FixedSizeMatrix<Y,X1>::type numericalDerivative61(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n-
658 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
659 return numericalDerivative61<Y, X1, X2, X3, X4, X5, X6>(
\n-
660 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
661 std::placeholders::_3, std::placeholders::_4,
\n-
662 std::placeholders::_5, std::placeholders::_6),
\n-
663 x1, x2, x3, x4, x5, x6);
\n-
664}
\n-
665
\n-
679template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X2>::dimension>
\n-
\n-
680typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative62(
\n-
681 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h, const X1& x1,
\n-
682 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
683 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
684 "Template argument Y must be a manifold type.");
\n-
685 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
686 "Template argument X1 must be a manifold type.");
\n-
687 return numericalDerivative11<Y, X2, N>(
\n-
688 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),
\n-
689 std::cref(x4), std::cref(x5), std::cref(x6)),
\n-
690 x2, delta);
\n-
691}
\n-
\n-
692
\n-
693template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n-
694inline typename internal::FixedSizeMatrix<Y,X2>::type numericalDerivative62(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n-
695 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
696 return numericalDerivative62<Y, X1, X2, X3, X4, X5, X6>(
\n-
697 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
698 std::placeholders::_3, std::placeholders::_4,
\n-
699 std::placeholders::_5, std::placeholders::_6),
\n-
700 x1, x2, x3, x4, x5, x6);
\n-
701}
\n-
702
\n-
716template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X3>::dimension>
\n-
\n-
717typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative63(
\n-
718 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h, const X1& x1,
\n-
719 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
720 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
721 "Template argument Y must be a manifold type.");
\n-
722 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
723 "Template argument X1 must be a manifold type.");
\n-
724 return numericalDerivative11<Y, X3, N>(
\n-
725 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,
\n-
726 std::cref(x4), std::cref(x5), std::cref(x6)),
\n-
727 x3, delta);
\n-
728}
\n-
\n-
729
\n-
730template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n-
731inline typename internal::FixedSizeMatrix<Y,X3>::type numericalDerivative63(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n-
732 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
733 return numericalDerivative63<Y, X1, X2, X3, X4, X5, X6>(
\n-
734 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
735 std::placeholders::_3, std::placeholders::_4,
\n-
736 std::placeholders::_5, std::placeholders::_6),
\n-
737 x1, x2, x3, x4, x5, x6);
\n-
738}
\n-
739
\n-
753template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X4>::dimension>
\n-
\n-
754typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative64(
\n-
755 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h, const X1& x1,
\n-
756 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
757 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
758 "Template argument Y must be a manifold type.");
\n-
759 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
760 "Template argument X1 must be a manifold type.");
\n-
761 return numericalDerivative11<Y, X4, N>(
\n-
762 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n-
763 std::placeholders::_1, std::cref(x5), std::cref(x6)),
\n-
764 x4, delta);
\n-
765}
\n-
\n-
766
\n-
767template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n-
768inline typename internal::FixedSizeMatrix<Y,X4>::type numericalDerivative64(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n-
769 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
770 return numericalDerivative64<Y, X1, X2, X3, X4, X5>(
\n-
771 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
772 std::placeholders::_3, std::placeholders::_4,
\n-
773 std::placeholders::_5, std::placeholders::_6),
\n-
774 x1, x2, x3, x4, x5, x6);
\n-
775}
\n-
776
\n-
790template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X5>::dimension>
\n-
\n-
791typename internal::FixedSizeMatrix<Y,X5>::type numericalDerivative65(
\n-
792 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h, const X1& x1,
\n-
793 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
794 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
795 "Template argument Y must be a manifold type.");
\n-
796 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
797 "Template argument X1 must be a manifold type.");
\n-
798 return numericalDerivative11<Y, X5, N>(
\n-
799 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n-
800 std::cref(x4), std::placeholders::_1, std::cref(x6)),
\n-
801 x5, delta);
\n-
802}
\n-
\n-
803
\n-
804template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n-
805inline typename internal::FixedSizeMatrix<Y,X5>::type numericalDerivative65(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n-
806 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
807 return numericalDerivative65<Y, X1, X2, X3, X4, X5, X6>(
\n-
808 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
809 std::placeholders::_3, std::placeholders::_4,
\n-
810 std::placeholders::_5, std::placeholders::_6),
\n-
811 x1, x2, x3, x4, x5, x6);
\n-
812}
\n-
813
\n-
827template<class Y, class X1, class X2, class X3, class X4, class X5, class X6, int N = traits<X6>::dimension>
\n-
\n-
828typename internal::FixedSizeMatrix<Y, X6>::type numericalDerivative66(
\n-
829 std::function<Y(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&)> h,
\n-
830 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,
\n-
831 double delta = 1e-5) {
\n-
832 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<Y>::structure_category>::value),
\n-
833 "Template argument Y must be a manifold type.");
\n-
834 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X1>::structure_category>::value),
\n-
835 "Template argument X1 must be a manifold type.");
\n-
836 return numericalDerivative11<Y, X6, N>(
\n-
837 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),
\n-
838 std::cref(x4), std::cref(x5), std::placeholders::_1),
\n-
839 x6, delta);
\n-
840}
\n-
\n-
841
\n-
842template<class Y, class X1, class X2, class X3, class X4, class X5, class X6>
\n-
843inline typename internal::FixedSizeMatrix<Y,X6>::type numericalDerivative66(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),
\n-
844 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6, double delta = 1e-5) {
\n-
845 return numericalDerivative66<Y, X1, X2, X3, X4, X5, X6>(
\n-
846 std::bind(h, std::placeholders::_1, std::placeholders::_2,
\n-
847 std::placeholders::_3, std::placeholders::_4,
\n-
848 std::placeholders::_5, std::placeholders::_6),
\n-
849 x1, x2, x3, x4, x5, x6);
\n-
850}
\n-
851
\n-
860template<class X>
\n-
\n-
861inline typename internal::FixedSizeMatrix<X,X>::type numericalHessian(std::function<double(const X&)> f, const X& x,
\n-
862 double delta = 1e-5) {
\n-
863 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<gtsam::manifold_tag, typename traits<X>::structure_category>::value),
\n-
864 "Template argument X must be a manifold type.");
\n-
865 typedef Eigen::Matrix<double, traits<X>::dimension, 1> VectorD;
\n-
866 typedef std::function<double(const X&)> F;
\n-
867 typedef std::function<VectorD(F, const X&, double)> G;
\n-
868 G ng = static_cast<G>(numericalGradient<X> );
\n-
869 return numericalDerivative11<VectorD, X>(
\n-
870 std::bind(ng, f, std::placeholders::_1, delta), x, delta);
\n-
871}
\n-
\n-
872
\n-
873template<class X>
\n-
874inline typename internal::FixedSizeMatrix<X,X>::type numericalHessian(double (*f)(const X&), const X& x, double delta =
\n-
875 1e-5) {
\n-
876 return numericalHessian(std::function<double(const X&)>(f), x, delta);
\n-
877}
\n-
878
\n-
882template<class X1, class X2>
\n-
\n-
883class G_x1 {
\n-
884 const std::function<double(const X1&, const X2&)>& f_;
\n-
885 X1 x1_;
\n-
886 double delta_;
\n-
887public:
\n-
888 typedef typename internal::FixedSizeMatrix<X1>::type Vector;
\n-
889
\n-
890 G_x1(const std::function<double(const X1&, const X2&)>& f, const X1& x1,
\n-
891 double delta) :
\n-
892 f_(f), x1_(x1), delta_(delta) {
\n-
893 }
\n-
894 Vector operator()(const X2& x2) {
\n-
895 return numericalGradient<X1>(
\n-
896 std::bind(f_, std::placeholders::_1, std::cref(x2)), x1_, delta_);
\n-
897 }
\n-
898};
\n-
\n-
899
\n-
900template<class X1, class X2>
\n-
901inline typename internal::FixedSizeMatrix<X1,X2>::type numericalHessian212(
\n-
902 std::function<double(const X1&, const X2&)> f, const X1& x1, const X2& x2,
\n-
903 double delta = 1e-5) {
\n-
904 typedef typename internal::FixedSizeMatrix<X1>::type Vector;
\n-
905 G_x1<X1, X2> g_x1(f, x1, delta);
\n-
906 return numericalDerivative11<Vector, X2>(
\n-
907 std::function<Vector(const X2&)>(
\n-
908 std::bind<Vector>(std::ref(g_x1), std::placeholders::_1)),
\n-
909 x2, delta);
\n-
910}
\n-
911
\n-
912template<class X1, class X2>
\n-
913inline typename internal::FixedSizeMatrix<X1,X2>::type numericalHessian212(double (*f)(const X1&, const X2&),
\n-
914 const X1& x1, const X2& x2, double delta = 1e-5) {
\n-
915 return numericalHessian212(std::function<double(const X1&, const X2&)>(f),
\n-
916 x1, x2, delta);
\n-
917}
\n-
918
\n-
919template<class X1, class X2>
\n-
920inline typename internal::FixedSizeMatrix<X1,X1>::type numericalHessian211(
\n-
921 std::function<double(const X1&, const X2&)> f, const X1& x1, const X2& x2,
\n-
922 double delta = 1e-5) {
\n-
923
\n-
924 typedef typename internal::FixedSizeMatrix<X1>::type Vector;
\n-
925
\n-
926 Vector (*numGrad)(std::function<double(const X1&)>, const X1&,
\n-
927 double) = &numericalGradient<X1>;
\n-
928 std::function<double(const X1&)> f2(
\n-
929 std::bind(f, std::placeholders::_1, std::cref(x2)));
\n-
930
\n-
931 return numericalDerivative11<Vector, X1>(
\n-
932 std::function<Vector(const X1&)>(
\n-
933 std::bind(numGrad, f2, std::placeholders::_1, delta)),
\n-
934 x1, delta);
\n-
935}
\n-
936
\n-
937template<class X1, class X2>
\n-
938inline typename internal::FixedSizeMatrix<X1,X1>::type numericalHessian211(double (*f)(const X1&, const X2&),
\n-
939 const X1& x1, const X2& x2, double delta = 1e-5) {
\n-
940 return numericalHessian211(std::function<double(const X1&, const X2&)>(f),
\n-
941 x1, x2, delta);
\n-
942}
\n-
943
\n-
944template<class X1, class X2>
\n-
945inline typename internal::FixedSizeMatrix<X2,X2>::type numericalHessian222(
\n-
946 std::function<double(const X1&, const X2&)> f, const X1& x1, const X2& x2,
\n-
947 double delta = 1e-5) {
\n-
948 typedef typename internal::FixedSizeMatrix<X2>::type Vector;
\n-
949 Vector (*numGrad)(std::function<double(const X2&)>, const X2&,
\n-
950 double) = &numericalGradient<X2>;
\n-
951 std::function<double(const X2&)> f2(
\n-
952 std::bind(f, std::cref(x1), std::placeholders::_1));
\n-
953
\n-
954 return numericalDerivative11<Vector, X2>(
\n-
955 std::function<Vector(const X2&)>(
\n-
956 std::bind(numGrad, f2, std::placeholders::_1, delta)),
\n-
957 x2, delta);
\n-
958}
\n-
959
\n-
960template<class X1, class X2>
\n-
961inline typename internal::FixedSizeMatrix<X2,X2>::type numericalHessian222(double (*f)(const X1&, const X2&),
\n-
962 const X1& x1, const X2& x2, double delta = 1e-5) {
\n-
963 return numericalHessian222(std::function<double(const X1&, const X2&)>(f),
\n-
964 x1, x2, delta);
\n-
965}
\n-
966
\n-
970/* **************************************************************** */
\n-
971template<class X1, class X2, class X3>
\n-
\n-
972inline typename internal::FixedSizeMatrix<X1,X1>::type numericalHessian311(
\n-
973 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n-
974 const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
975 typedef typename internal::FixedSizeMatrix<X1>::type Vector;
\n-
976 Vector (*numGrad)(std::function<double(const X1&)>, const X1&,
\n-
977 double) = &numericalGradient<X1>;
\n-
978 std::function<double(const X1&)> f2(std::bind(
\n-
979 f, std::placeholders::_1, std::cref(x2), std::cref(x3)));
\n-
980
\n-
981 return numericalDerivative11<Vector, X1>(
\n-
982 std::function<Vector(const X1&)>(
\n-
983 std::bind(numGrad, f2, std::placeholders::_1, delta)),
\n-
984 x1, delta);
\n-
985}
\n-
\n-
986
\n-
987template<class X1, class X2, class X3>
\n-
988inline typename internal::FixedSizeMatrix<X1,X1>::type numericalHessian311(double (*f)(const X1&, const X2&, const X3&),
\n-
989 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
990 return numericalHessian311(
\n-
991 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n-
992 delta);
\n-
993}
\n-
994
\n-
995/* **************************************************************** */
\n-
996template<class X1, class X2, class X3>
\n-
997inline typename internal::FixedSizeMatrix<X2,X2>::type numericalHessian322(
\n-
998 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n-
999 const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
1000 typedef typename internal::FixedSizeMatrix<X2>::type Vector;
\n-
1001 Vector (*numGrad)(std::function<double(const X2&)>, const X2&,
\n-
1002 double) = &numericalGradient<X2>;
\n-
1003 std::function<double(const X2&)> f2(std::bind(
\n-
1004 f, std::cref(x1), std::placeholders::_1, std::cref(x3)));
\n-
1005
\n-
1006 return numericalDerivative11<Vector, X2>(
\n-
1007 std::function<Vector(const X2&)>(
\n-
1008 std::bind(numGrad, f2, std::placeholders::_1, delta)),
\n-
1009 x2, delta);
\n-
1010}
\n-
1011
\n-
1012template<class X1, class X2, class X3>
\n-
1013inline typename internal::FixedSizeMatrix<X2,X2>::type numericalHessian322(double (*f)(const X1&, const X2&, const X3&),
\n-
1014 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
1015 return numericalHessian322(
\n-
1016 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n-
1017 delta);
\n-
1018}
\n-
1019
\n-
1020/* **************************************************************** */
\n-
1021template<class X1, class X2, class X3>
\n-
1022inline typename internal::FixedSizeMatrix<X3,X3>::type numericalHessian333(
\n-
1023 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n-
1024 const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
1025 typedef typename internal::FixedSizeMatrix<X3>::type Vector;
\n-
1026 Vector (*numGrad)(std::function<double(const X3&)>, const X3&,
\n-
1027 double) = &numericalGradient<X3>;
\n-
1028 std::function<double(const X3&)> f2(std::bind(
\n-
1029 f, std::cref(x1), std::cref(x2), std::placeholders::_1));
\n-
1030
\n-
1031 return numericalDerivative11<Vector, X3>(
\n-
1032 std::function<Vector(const X3&)>(
\n-
1033 std::bind(numGrad, f2, std::placeholders::_1, delta)),
\n-
1034 x3, delta);
\n-
1035}
\n-
1036
\n-
1037template<class X1, class X2, class X3>
\n-
1038inline typename internal::FixedSizeMatrix<X3,X3>::type numericalHessian333(double (*f)(const X1&, const X2&, const X3&),
\n-
1039 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
1040 return numericalHessian333(
\n-
1041 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n-
1042 delta);
\n-
1043}
\n-
1044
\n-
1045/* **************************************************************** */
\n-
1046template<class X1, class X2, class X3>
\n-
1047inline typename internal::FixedSizeMatrix<X1,X2>::type numericalHessian312(
\n-
1048 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n-
1049 const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
1050 return numericalHessian212<X1, X2>(
\n-
1051 std::function<double(const X1&, const X2&)>(
\n-
1052 std::bind(f, std::placeholders::_1, std::placeholders::_2,
\n-
1053 std::cref(x3))),
\n-
1054 x1, x2, delta);
\n-
1055}
\n-
1056
\n-
1057template<class X1, class X2, class X3>
\n-
1058inline typename internal::FixedSizeMatrix<X1,X3>::type numericalHessian313(
\n-
1059 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n-
1060 const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
1061 return numericalHessian212<X1, X3>(
\n-
1062 std::function<double(const X1&, const X3&)>(
\n-
1063 std::bind(f, std::placeholders::_1, std::cref(x2),
\n-
1064 std::placeholders::_2)),
\n-
1065 x1, x3, delta);
\n-
1066}
\n-
1067
\n-
1068template<class X1, class X2, class X3>
\n-
1069inline typename internal::FixedSizeMatrix<X2,X3>::type numericalHessian323(
\n-
1070 std::function<double(const X1&, const X2&, const X3&)> f, const X1& x1,
\n-
1071 const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
1072 return numericalHessian212<X2, X3>(
\n-
1073 std::function<double(const X2&, const X3&)>(
\n-
1074 std::bind(f, std::cref(x1), std::placeholders::_1,
\n-
1075 std::placeholders::_2)),
\n-
1076 x2, x3, delta);
\n-
1077}
\n-
1078
\n-
1079/* **************************************************************** */
\n-
1080template<class X1, class X2, class X3>
\n-
1081inline typename internal::FixedSizeMatrix<X1,X2>::type numericalHessian312(double (*f)(const X1&, const X2&, const X3&),
\n-
1082 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
1083 return numericalHessian312(
\n-
1084 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n-
1085 delta);
\n-
1086}
\n-
1087
\n-
1088template<class X1, class X2, class X3>
\n-
1089inline typename internal::FixedSizeMatrix<X1,X3>::type numericalHessian313(double (*f)(const X1&, const X2&, const X3&),
\n-
1090 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
1091 return numericalHessian313(
\n-
1092 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n-
1093 delta);
\n-
1094}
\n-
1095
\n-
1096template<class X1, class X2, class X3>
\n-
1097inline typename internal::FixedSizeMatrix<X2,X3>::type numericalHessian323(double (*f)(const X1&, const X2&, const X3&),
\n-
1098 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {
\n-
1099 return numericalHessian323(
\n-
1100 std::function<double(const X1&, const X2&, const X3&)>(f), x1, x2, x3,
\n-
1101 delta);
\n-
1102}
\n-
1103
\n-
1104} // namespace gtsam
\n-
1105
\n-
Base class and basic functions for Lie types.
\n-
Factor Graph Values.
\n-\n-
A non-templated config holding any types of Manifold-group elements.
\n+
52 // Test the invertibility of retract/local
\n+
53 dx.setRandom();
\n+
54 T updated = Chart::retract(value, dx);
\n+
55 Vector invdx = Chart::local(value, updated);
\n+
56 EXPECT(assert_equal(Matrix(dx), Matrix(invdx), 1e-9));
\n+
57
\n+
58 // And test that negative steps work as well.
\n+
59 dx = -dx;
\n+
60 updated = Chart::retract(value, dx);
\n+
61 invdx = Chart::local(value, updated);
\n+
62 EXPECT(assert_equal(Matrix(dx), Matrix(invdx), 1e-9));
\n+
63}
\n+
64} // namespace gtsam
\n+
\n+
65
\n+
68#define CHECK_CHART_CONCEPT(value) \\
\n+
69 { gtsam::testDefaultChart(result_, name_, value); }
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Base class and basic functions for Manifold types.
\n+
Concept check for values that can be used in unit tests.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative61(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 1 of 6-argument function.
Definition numericalDerivative.h:643
\n-
internal::FixedSizeMatrix< X1, X1 >::type numericalHessian311(std::function< double(const X1 &, const X2 &, const X3 &)> f, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
Numerical Hessian for tenary functions.
Definition numericalDerivative.h:972
\n-
internal::FixedSizeMatrix< X, X >::type numericalHessian(std::function< double(const X &)> f, const X &x, double delta=1e-5)
Compute numerical Hessian matrix.
Definition numericalDerivative.h:861
\n-
internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative21(const std::function< Y(const X1 &, const X2 &)> &h, const X1 &x1, const X2 &x2, double delta=1e-5)
Compute numerical derivative in argument 1 of binary function.
Definition numericalDerivative.h:166
\n-
internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative63(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 3 of 6-argument function.
Definition numericalDerivative.h:717
\n-
internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative51(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
Compute numerical derivative in argument 1 of 5-argument function.
Definition numericalDerivative.h:462
\n-
internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative54(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
Compute numerical derivative in argument 4 of 5-argument function.
Definition numericalDerivative.h:570
\n-
internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative41(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
Compute numerical derivative in argument 1 of 4-argument function.
Definition numericalDerivative.h:325
\n-
internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative64(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 4 of 6-argument function.
Definition numericalDerivative.h:754
\n-
internal::FixedSizeMatrix< Y, X6 >::type numericalDerivative66(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 6 of 6-argument function.
Definition numericalDerivative.h:828
\n-
internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative33(std::function< Y(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
Compute numerical derivative in argument 3 of ternary function.
Definition numericalDerivative.h:292
\n-
internal::FixedSizeMatrix< Y, X >::type numericalDerivative11(std::function< Y(const X &)> h, const X &x, double delta=1e-5)
New-style numerical derivatives using manifold_traits.
Definition numericalDerivative.h:110
\n-
internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative22(std::function< Y(const X1 &, const X2 &)> h, const X1 &x1, const X2 &x2, double delta=1e-5)
Compute numerical derivative in argument 2 of binary function.
Definition numericalDerivative.h:195
\n-
internal::FixedSizeMatrix< Y, X5 >::type numericalDerivative55(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
Compute numerical derivative in argument 5 of 5-argument function.
Definition numericalDerivative.h:606
\n-
internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative43(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
Compute numerical derivative in argument 3 of 4-argument function.
Definition numericalDerivative.h:393
\n-
internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative52(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
Compute numerical derivative in argument 2 of 5-argument function.
Definition numericalDerivative.h:498
\n-
internal::FixedSizeMatrix< Y, X5 >::type numericalDerivative65(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 5 of 6-argument function.
Definition numericalDerivative.h:791
\n-
internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative44(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
Compute numerical derivative in argument 4 of 4-argument function.
Definition numericalDerivative.h:427
\n-
internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative31(std::function< Y(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
Compute numerical derivative in argument 1 of ternary function.
Definition numericalDerivative.h:226
\n-
internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative62(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6 &x6, double delta=1e-5)
Compute numerical derivative in argument 2 of 6-argument function.
Definition numericalDerivative.h:680
\n-
internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative53(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)
Compute numerical derivative in argument 3 of 5-argument function.
Definition numericalDerivative.h:534
\n-
internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative32(std::function< Y(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, double delta=1e-5)
Compute numerical derivative in argument 2 of ternary function.
Definition numericalDerivative.h:259
\n-
internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative42(std::function< Y(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, double delta=1e-5)
Compute numerical derivative in argument 2 of 4-argument function.
Definition numericalDerivative.h:359
\n-
Eigen::Matrix< double, N, 1 > numericalGradient(std::function< double(const X &)> h, const X &x, double delta=1e-5)
Numerically compute gradient of scalar function.
Definition numericalDerivative.h:70
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
tag to assert a type is a manifold
Definition Manifold.h:33
\n-
Definition numericalDerivative.h:56
\n-
Helper class that computes the derivative of f w.r.t.
Definition numericalDerivative.h:883
\n+
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,1165 +1,95 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-numericalDerivative.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+chartTesting.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18// \\callgraph\n+12/*\n+13 * @file chartTesting.h\n+14 * @brief\n+15 * @date November, 2014\n+16 * @author Paul Furgale\n+17 */\n+18\n 19#pragma once\n 20\n-21#include \n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+24#include \n+25#include \n+26#include \n 27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-30/*\n-31 * Note that all of these functions have two versions, a boost.function\n-version and a\n-32 * standard C++ function pointer version. This allows reformulating the\n-arguments of\n-33 * a function to fit the correct structure, which is useful for situations\n-like\n-34 * member functions and functions with arguments not involved in the\n-derivative:\n-35 *\n-36 * Usage of the boost bind version to rearrange arguments:\n-37 * for a function with one relevant param and an optional derivative:\n-38 * Foo bar(const Obj& a, boost::optional H1)\n-39 * Use boost.bind to restructure:\n-40 * std::bind(bar, std::placeholders::_1, boost::none)\n-41 * This syntax will fix the optional argument to boost::none, while using the\n-first argument provided\n-42 *\n-43 * For member functions, such as below, with an instantiated copy\n-instanceOfSomeClass\n-44 * Foo SomeClass::bar(const Obj& a)\n-45 * Use boost bind as follows to create a function pointer that uses the\n-member function:\n-46 * std::bind(&SomeClass::bar, ref(instanceOfSomeClass), std::placeholders::\n-_1)\n-47 *\n-48 * For additional details, see the documentation:\n-49 * http://www.boost.org/doc/libs/release/libs/bind/bind.html\n-50 */\n+_\b2_\b8namespace _\bg_\bt_\bs_\ba_\bm {\n+29// Do a full concept check and test the invertibility of local() vs. retract\n+().\n+30template\n+31void testDefaultChart(TestResult& result_,\n+32 const std::string& name_,\n+33 const T& value) {\n+34\n+35 GTSAM_CONCEPT_TESTABLE_TYPE(T)\n+36\n+37 typedef typename gtsam::DefaultChart Chart;\n+38 typedef typename Chart::vector Vector;\n+39\n+40 // First, check the basic chart concept. This checks that the interface is\n+satisfied.\n+41 // The rest of the function is even more detailed, checking the correctness\n+of the chart.\n+42 BOOST_CONCEPT_ASSERT((ChartConcept));\n+43\n+44 T other = value;\n+45\n+46 // Check that the dimension of the local value matches the chart dimension.\n+47 Vector dx = Chart::local(value, other);\n+48 EXPECT_LONGS_EQUAL(Chart::getDimension(value), dx.size());\n+49 // And that the \"local\" of a value vs. itself is zero.\n+50 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(Matrix(dx), Matrix(Eigen::VectorXd::Zero(dx.size()))));\n 51\n-52\n-53// a quick helper struct to get the appropriate fixed sized matrix from two\n-value types\n-54namespace internal {\n-55template\n-_\b5_\b6struct _\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx {\n-57 typedef Eigen::Matrix::dimension, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>\n-type;\n-58};\n-59}\n-60\n-69template ::dimension>\n-_\b7_\b0typename Eigen::Matrix _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt(\n-71 std::function h, const X& x, double delta = 1e-5) {\n-72 double factor = 1.0 / (2.0 * delta);\n-73\n-74 BOOST_STATIC_ASSERT_MSG(\n-75 (boost::is_base_of<_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::\n-value),\n-76 \"Template argument X must be a manifold type.\");\n-77 BOOST_STATIC_ASSERT_MSG(N>0, \"Template argument X must be fixed-size type or\n-N must be specified.\");\n-78\n-79 // Prepare a tangent vector to perturb x with, only works for fixed size\n-80 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br d;\n-81 d.setZero();\n-82\n-83 Eigen::Matrix g;\n-84 g.setZero();\n-85 for (int j = 0; j < N; j++) {\n-86 d(j) = delta;\n-87 double hxplus = h(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(x, d));\n-88 d(j) = -delta;\n-89 double hxmin = h(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(x, d));\n-90 d(j) = 0;\n-91 g(j) = (hxplus - hxmin) * factor;\n-92 }\n-93 return g;\n-94}\n-95\n-108template ::dimension>\n-109// TODO Should compute fixed-size matrix\n-_\b1_\b1_\b0typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b1_\b1(\n-111 std::function h, const X& x, double delta = 1e-5) {\n-112 typedef typename internal::FixedSizeMatrix::type Matrix;\n-113\n-114 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-115 \"Template argument Y must be a manifold type.\");\n-116 typedef _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b> TraitsY;\n-117\n-118 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-119 \"Template argument X must be a manifold type.\");\n-120 BOOST_STATIC_ASSERT_MSG(N>0, \"Template argument X must be fixed-size type\n-or N must be specified.\");\n-121 typedef _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b> TraitsX;\n-122\n-123 // get value at x, and corresponding chart\n-124 const Y hx = h(x);\n-125\n-126 // Bit of a hack for now to find number of rows\n-127 const typename TraitsY::TangentVector zeroY = TraitsY::Local(hx, hx);\n-128 const size_t m = zeroY.size();\n-129\n-130 // Prepare a tangent vector to perturb x with, only works for fixed size\n-131 Eigen::Matrix dx;\n-132 dx.setZero();\n-133\n-134 // Fill in Jacobian H\n-135 Matrix H = Matrix::Zero(m, N);\n-136 const double factor = 1.0 / (2.0 * delta);\n-137 for (int j = 0; j < N; j++) {\n-138 dx(j) = delta;\n-139 const auto dy1 = TraitsY::Local(hx, h(TraitsX::Retract(x, dx)));\n-140 dx(j) = -delta;\n-141 const auto dy2 = TraitsY::Local(hx, h(TraitsX::Retract(x, dx)));\n-142 dx(j) = 0;\n-143 H.col(j) << (dy1 - dy2) * factor;\n-144 }\n-145 return H;\n-146}\n-147\n-149template\n-_\b1_\b5_\b0typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b1_\b1(Y (*h)\n-(const X&), const X& x,\n-151 double delta = 1e-5) {\n-152 return numericalDerivative11(std::bind(h, std::placeholders::_1), x,\n-153 delta);\n-154}\n-155\n-165template::dimension>\n-_\b1_\b6_\b6typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b1(const\n-std::function& h,\n-167 const X1& x1, const X2& x2, double delta = 1e-5) {\n-168 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-169 \"Template argument Y must be a manifold type.\");\n-170 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-171 \"Template argument X1 must be a manifold type.\");\n-172 return numericalDerivative11(\n-173 std::bind(h, std::placeholders::_1, std::cref(x2)), x1, delta);\n-174}\n-175\n-177template\n-_\b1_\b7_\b8typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b1(Y (*h)\n-(const X1&, const X2&), const X1& x1,\n-179 const X2& x2, double delta = 1e-5) {\n-180 return numericalDerivative21(\n-181 std::bind(h, std::placeholders::_1, std::placeholders::_2), x1, x2,\n-182 delta);\n-183}\n-184\n-194template::dimension>\n-_\b1_\b9_\b5typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b2(std::\n-function h,\n-196 const X1& x1, const X2& x2, double delta = 1e-5) {\n-197// BOOST_STATIC_ASSERT_MSG( (boost::is_base_of::structure_category>::value),\n-198// \"Template argument X1 must be a manifold type.\");\n-199 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b2_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-200 \"Template argument X2 must be a manifold type.\");\n-201 return numericalDerivative11(\n-202 std::bind(h, std::cref(x1), std::placeholders::_1), x2, delta);\n-203}\n-204\n-206template\n-_\b2_\b0_\b7typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b2(Y (*h)\n-(const X1&, const X2&), const X1& x1,\n-208 const X2& x2, double delta = 1e-5) {\n-209 return numericalDerivative22(\n-210 std::bind(h, std::placeholders::_1, std::placeholders::_2), x1, x2,\n-211 delta);\n-212}\n-213\n-225template::\n-dimension>\n-_\b2_\b2_\b6typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b1(\n-227 std::function h, const X1& x1,\n-228 const X2& x2, const X3& x3, double delta = 1e-5) {\n-229 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-230 \"Template argument Y must be a manifold type.\");\n-231 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-232 \"Template argument X1 must be a manifold type.\");\n-233 return numericalDerivative11(\n-234 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3)),\n-235 x1, delta);\n-236}\n-237\n-238template\n-239typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b1(Y (*h)\n-(const X1&, const X2&, const X3&),\n-240 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n-241 return numericalDerivative31(\n-242 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-243 std::placeholders::_3),\n-244 x1, x2, x3, delta);\n-245}\n-246\n-258template::\n-dimension>\n-_\b2_\b5_\b9typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b2(\n-260 std::function h, const X1& x1,\n-261 const X2& x2, const X3& x3, double delta = 1e-5) {\n-262 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-263 \"Template argument Y must be a manifold type.\");\n-264 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b2_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-265 \"Template argument X2 must be a manifold type.\");\n-266 return numericalDerivative11(\n-267 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3)),\n-268 x2, delta);\n-269}\n-270\n-271template\n-272inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b2\n-(Y (*h)(const X1&, const X2&, const X3&),\n-273 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n-274 return numericalDerivative32(\n-275 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-276 std::placeholders::_3),\n-277 x1, x2, x3, delta);\n-278}\n-279\n-291template::\n-dimension>\n-_\b2_\b9_\b2typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b3(\n-293 std::function h, const X1& x1,\n-294 const X2& x2, const X3& x3, double delta = 1e-5) {\n-295 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-296 \"Template argument Y must be a manifold type.\");\n-297 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b3_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-298 \"Template argument X3 must be a manifold type.\");\n-299 return numericalDerivative11(\n-300 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1),\n-301 x3, delta);\n-302}\n-303\n-304template\n-305inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b3\n-(Y (*h)(const X1&, const X2&, const X3&),\n-306 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n-307 return numericalDerivative33(\n-308 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-309 std::placeholders::_3),\n-310 x1, x2, x3, delta);\n-311}\n-312\n-324template::dimension>\n-_\b3_\b2_\b5typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b1(\n-326 std::function h, const X1&\n-x1,\n-327 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {\n-328 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-329 \"Template argument Y must be a manifold type.\");\n-330 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-331 \"Template argument X1 must be a manifold type.\");\n-332 return numericalDerivative11(\n-333 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),\n-334 std::cref(x4)),\n-335 x1, delta);\n-336}\n-337\n-338template\n-339inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b1\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&),\n-340 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-\n-5) {\n-341 return numericalDerivative41(\n-342 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-343 std::placeholders::_3, std::placeholders::_4),\n-344 x1, x2, x3, x4);\n-345}\n-346\n-358template::dimension>\n-_\b3_\b5_\b9typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b2(\n-360 std::function h, const X1&\n-x1,\n-361 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {\n-362 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-363 \"Template argument Y must be a manifold type.\");\n-364 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b2_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-365 \"Template argument X2 must be a manifold type.\");\n-366 return numericalDerivative11(\n-367 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),\n-368 std::cref(x4)),\n-369 x2, delta);\n-370}\n-371\n-372template\n-373inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b2\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&),\n-374 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-\n-5) {\n-375 return numericalDerivative42(\n-376 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-377 std::placeholders::_3, std::placeholders::_4),\n-378 x1, x2, x3, x4);\n-379}\n-380\n-392template::dimension>\n-_\b3_\b9_\b3typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b3(\n-394 std::function h, const X1&\n-x1,\n-395 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {\n-396 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-397 \"Template argument Y must be a manifold type.\");\n-398 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b3_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-399 \"Template argument X3 must be a manifold type.\");\n-400 return numericalDerivative11(\n-401 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,\n-402 std::cref(x4)),\n-403 x3, delta);\n-404}\n-405\n-406template\n-407inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b3\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&),\n-408 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-\n-5) {\n-409 return numericalDerivative43(\n-410 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-411 std::placeholders::_3, std::placeholders::_4),\n-412 x1, x2, x3, x4);\n-413}\n-414\n-426template::dimension>\n-_\b4_\b2_\b7typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b4(\n-428 std::function h, const X1&\n-x1,\n-429 const X2& x2, const X3& x3, const X4& x4, double delta = 1e-5) {\n-430 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-431 \"Template argument Y must be a manifold type.\");\n-432 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b4_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-433 \"Template argument X4 must be a manifold type.\");\n-434 return numericalDerivative11(\n-435 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n-436 std::placeholders::_1),\n-437 x4, delta);\n-438}\n-439\n-440template\n-441inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b4\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&),\n-442 const X1& x1, const X2& x2, const X3& x3, const X4& x4, double delta = 1e-\n-5) {\n-443 return numericalDerivative44(\n-444 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-445 std::placeholders::_3, std::placeholders::_4),\n-446 x1, x2, x3, x4);\n-447}\n-448\n-461template::dimension>\n-_\b4_\b6_\b2typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b1(\n-463 std::function h,\n-const X1& x1,\n-464 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-\n-5) {\n-465 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-466 \"Template argument Y must be a manifold type.\");\n-467 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-468 \"Template argument X1 must be a manifold type.\");\n-469 return numericalDerivative11(\n-470 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),\n-471 std::cref(x4), std::cref(x5)),\n-472 x1, delta);\n-473}\n-474\n-475template\n-476inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b1\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),\n-477 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5,\n-double delta = 1e-5) {\n-478 return numericalDerivative51(\n-479 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-480 std::placeholders::_3, std::placeholders::_4,\n-481 std::placeholders::_5),\n-482 x1, x2, x3, x4, x5);\n-483}\n-484\n-497template::dimension>\n-_\b4_\b9_\b8typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b2(\n-499 std::function h,\n-const X1& x1,\n-500 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-\n-5) {\n-501 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-502 \"Template argument Y must be a manifold type.\");\n-503 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-504 \"Template argument X1 must be a manifold type.\");\n-505 return numericalDerivative11(\n-506 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),\n-507 std::cref(x4), std::cref(x5)),\n-508 x2, delta);\n-509}\n-510\n-511template\n-512inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b2\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),\n-513 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5,\n-double delta = 1e-5) {\n-514 return numericalDerivative52(\n-515 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-516 std::placeholders::_3, std::placeholders::_4,\n-517 std::placeholders::_5),\n-518 x1, x2, x3, x4, x5);\n-519}\n-520\n-533template::dimension>\n-_\b5_\b3_\b4typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b3(\n-535 std::function h,\n-const X1& x1,\n-536 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-\n-5) {\n-537 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-538 \"Template argument Y must be a manifold type.\");\n-539 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-540 \"Template argument X1 must be a manifold type.\");\n-541 return numericalDerivative11(\n-542 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,\n-543 std::cref(x4), std::cref(x5)),\n-544 x3, delta);\n-545}\n-546\n-547template\n-548inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b3\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),\n-549 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5,\n-double delta = 1e-5) {\n-550 return numericalDerivative53(\n-551 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-552 std::placeholders::_3, std::placeholders::_4,\n-553 std::placeholders::_5),\n-554 x1, x2, x3, x4, x5);\n-555}\n-556\n-569template::dimension>\n-_\b5_\b7_\b0typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b4(\n-571 std::function h,\n-const X1& x1,\n-572 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-\n-5) {\n-573 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-574 \"Template argument Y must be a manifold type.\");\n-575 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-576 \"Template argument X1 must be a manifold type.\");\n-577 return numericalDerivative11(\n-578 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n-579 std::placeholders::_1, std::cref(x5)),\n-580 x4, delta);\n-581}\n-582\n-583template\n-584inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b4\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),\n-585 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5,\n-double delta = 1e-5) {\n-586 return numericalDerivative54(\n-587 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-588 std::placeholders::_3, std::placeholders::_4,\n-589 std::placeholders::_5),\n-590 x1, x2, x3, x4, x5);\n-591}\n-592\n-605template::dimension>\n-_\b6_\b0_\b6typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b5(\n-607 std::function h,\n-const X1& x1,\n-608 const X2& x2, const X3& x3, const X4& x4, const X5& x5, double delta = 1e-\n-5) {\n-609 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-610 \"Template argument Y must be a manifold type.\");\n-611 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-612 \"Template argument X1 must be a manifold type.\");\n-613 return numericalDerivative11(\n-614 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n-615 std::cref(x4), std::placeholders::_1),\n-616 x5, delta);\n-617}\n-618\n-619template\n-620inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b5\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&),\n-621 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5,\n-double delta = 1e-5) {\n-622 return numericalDerivative55(\n-623 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-624 std::placeholders::_3, std::placeholders::_4,\n-625 std::placeholders::_5),\n-626 x1, x2, x3, x4, x5);\n-627}\n-628\n-642template::dimension>\n-_\b6_\b4_\b3typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b1(\n-644 std::function h, const X1& x1,\n-645 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,\n-double delta = 1e-5) {\n-646 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-647 \"Template argument Y must be a manifold type.\");\n-648 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-649 \"Template argument X1 must be a manifold type.\");\n-650 return numericalDerivative11(\n-651 std::bind(h, std::placeholders::_1, std::cref(x2), std::cref(x3),\n-652 std::cref(x4), std::cref(x5), std::cref(x6)),\n-653 x1, delta);\n-654}\n-655\n-656template\n-657inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b1\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n-658 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n-X6& x6, double delta = 1e-5) {\n-659 return numericalDerivative61(\n-660 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-661 std::placeholders::_3, std::placeholders::_4,\n-662 std::placeholders::_5, std::placeholders::_6),\n-663 x1, x2, x3, x4, x5, x6);\n-664}\n-665\n-679template::dimension>\n-_\b6_\b8_\b0typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b2(\n-681 std::function h, const X1& x1,\n-682 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,\n-double delta = 1e-5) {\n-683 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-684 \"Template argument Y must be a manifold type.\");\n-685 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-686 \"Template argument X1 must be a manifold type.\");\n-687 return numericalDerivative11(\n-688 std::bind(h, std::cref(x1), std::placeholders::_1, std::cref(x3),\n-689 std::cref(x4), std::cref(x5), std::cref(x6)),\n-690 x2, delta);\n-691}\n-692\n-693template\n-694inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b2\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n-695 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n-X6& x6, double delta = 1e-5) {\n-696 return numericalDerivative62(\n-697 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-698 std::placeholders::_3, std::placeholders::_4,\n-699 std::placeholders::_5, std::placeholders::_6),\n-700 x1, x2, x3, x4, x5, x6);\n-701}\n-702\n-716template::dimension>\n-_\b7_\b1_\b7typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b3(\n-718 std::function h, const X1& x1,\n-719 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,\n-double delta = 1e-5) {\n-720 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-721 \"Template argument Y must be a manifold type.\");\n-722 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-723 \"Template argument X1 must be a manifold type.\");\n-724 return numericalDerivative11(\n-725 std::bind(h, std::cref(x1), std::cref(x2), std::placeholders::_1,\n-726 std::cref(x4), std::cref(x5), std::cref(x6)),\n-727 x3, delta);\n-728}\n-729\n-730template\n-731inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b3\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n-732 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n-X6& x6, double delta = 1e-5) {\n-733 return numericalDerivative63(\n-734 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-735 std::placeholders::_3, std::placeholders::_4,\n-736 std::placeholders::_5, std::placeholders::_6),\n-737 x1, x2, x3, x4, x5, x6);\n-738}\n-739\n-753template::dimension>\n-_\b7_\b5_\b4typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b4(\n-755 std::function h, const X1& x1,\n-756 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,\n-double delta = 1e-5) {\n-757 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-758 \"Template argument Y must be a manifold type.\");\n-759 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-760 \"Template argument X1 must be a manifold type.\");\n-761 return numericalDerivative11(\n-762 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n-763 std::placeholders::_1, std::cref(x5), std::cref(x6)),\n-764 x4, delta);\n-765}\n-766\n-767template\n-768inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b4\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n-769 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n-X6& x6, double delta = 1e-5) {\n-770 return numericalDerivative64(\n-771 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-772 std::placeholders::_3, std::placeholders::_4,\n-773 std::placeholders::_5, std::placeholders::_6),\n-774 x1, x2, x3, x4, x5, x6);\n-775}\n-776\n-790template::dimension>\n-_\b7_\b9_\b1typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b5(\n-792 std::function h, const X1& x1,\n-793 const X2& x2, const X3& x3, const X4& x4, const X5& x5, const X6& x6,\n-double delta = 1e-5) {\n-794 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-795 \"Template argument Y must be a manifold type.\");\n-796 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-797 \"Template argument X1 must be a manifold type.\");\n-798 return numericalDerivative11(\n-799 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n-800 std::cref(x4), std::placeholders::_1, std::cref(x6)),\n-801 x5, delta);\n-802}\n-803\n-804template\n-805inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b5\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n-806 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n-X6& x6, double delta = 1e-5) {\n-807 return numericalDerivative65(\n-808 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-809 std::placeholders::_3, std::placeholders::_4,\n-810 std::placeholders::_5, std::placeholders::_6),\n-811 x1, x2, x3, x4, x5, x6);\n-812}\n-813\n-827template::dimension>\n-_\b8_\b2_\b8typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b6(\n-829 std::function h,\n-830 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n-X6& x6,\n-831 double delta = 1e-5) {\n-832 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bY_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-833 \"Template argument Y must be a manifold type.\");\n-834 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b1_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-835 \"Template argument X1 must be a manifold type.\");\n-836 return numericalDerivative11(\n-837 std::bind(h, std::cref(x1), std::cref(x2), std::cref(x3),\n-838 std::cref(x4), std::cref(x5), std::placeholders::_1),\n-839 x6, delta);\n-840}\n-841\n-842template\n-843inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b6\n-(Y (*h)(const X1&, const X2&, const X3&, const X4&, const X5&, const X6&),\n-844 const X1& x1, const X2& x2, const X3& x3, const X4& x4, const X5& x5, const\n-X6& x6, double delta = 1e-5) {\n-845 return numericalDerivative66(\n-846 std::bind(h, std::placeholders::_1, std::placeholders::_2,\n-847 std::placeholders::_3, std::placeholders::_4,\n-848 std::placeholders::_5, std::placeholders::_6),\n-849 x1, x2, x3, x4, x5, x6);\n-850}\n-851\n-860template\n-_\b8_\b6_\b1inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn(std::\n-function f, const X& x,\n-862 double delta = 1e-5) {\n-863 BOOST_STATIC_ASSERT_MSG( (boost::is_base_of<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, typename\n-_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by>::value),\n-864 \"Template argument X must be a manifold type.\");\n-865 typedef Eigen::Matrix::dimension, 1> VectorD;\n-866 typedef std::function F;\n-867 typedef std::function G;\n-868 G ng = static_cast(numericalGradient );\n-869 return numericalDerivative11(\n-870 std::bind(ng, f, std::placeholders::_1, delta), x, delta);\n-871}\n-872\n-873template\n-874inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn(double\n-(*f)(const X&), const X& x, double delta =\n-875 1e-5) {\n-876 return _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn(std::function(f), x, delta);\n-877}\n-878\n-882template\n-_\b8_\b8_\b3class _\bG_\b__\bx_\b1 {\n-884 const std::function& f_;\n-885 X1 x1_;\n-886 double delta_;\n-887public:\n-888 typedef typename internal::FixedSizeMatrix::type Vector;\n-889\n-890 _\bG_\b__\bx_\b1(const std::function& f, const X1& x1,\n-891 double delta) :\n-892 f_(f), x1_(x1), delta_(delta) {\n-893 }\n-894 Vector operator()(const X2& x2) {\n-895 return numericalGradient(\n-896 std::bind(f_, std::placeholders::_1, std::cref(x2)), x1_, delta_);\n-897 }\n-898};\n-899\n-900template\n-901inline typename internal::FixedSizeMatrix::type numericalHessian212(\n-902 std::function f, const X1& x1, const X2& x2,\n-903 double delta = 1e-5) {\n-904 typedef typename internal::FixedSizeMatrix::type Vector;\n-905 _\bG_\b__\bx_\b1_\b<_\bX_\b1_\b,_\b _\bX_\b2_\b> g_x1(f, x1, delta);\n-906 return numericalDerivative11(\n-907 std::function(\n-908 std::bind(std::ref(g_x1), std::placeholders::_1)),\n-909 x2, delta);\n-910}\n-911\n-912template\n-913inline typename internal::FixedSizeMatrix::type numericalHessian212\n-(double (*f)(const X1&, const X2&),\n-914 const X1& x1, const X2& x2, double delta = 1e-5) {\n-915 return numericalHessian212(std::function(f),\n-916 x1, x2, delta);\n-917}\n-918\n-919template\n-920inline typename internal::FixedSizeMatrix::type numericalHessian211(\n-921 std::function f, const X1& x1, const X2& x2,\n-922 double delta = 1e-5) {\n-923\n-924 typedef typename internal::FixedSizeMatrix::type Vector;\n-925\n-926 Vector (*numGrad)(std::function, const X1&,\n-927 double) = &numericalGradient;\n-928 std::function f2(\n-929 std::bind(f, std::placeholders::_1, std::cref(x2)));\n-930\n-931 return numericalDerivative11(\n-932 std::function(\n-933 std::bind(numGrad, f2, std::placeholders::_1, delta)),\n-934 x1, delta);\n-935}\n-936\n-937template\n-938inline typename internal::FixedSizeMatrix::type numericalHessian211\n-(double (*f)(const X1&, const X2&),\n-939 const X1& x1, const X2& x2, double delta = 1e-5) {\n-940 return numericalHessian211(std::function(f),\n-941 x1, x2, delta);\n-942}\n-943\n-944template\n-945inline typename internal::FixedSizeMatrix::type numericalHessian222(\n-946 std::function f, const X1& x1, const X2& x2,\n-947 double delta = 1e-5) {\n-948 typedef typename internal::FixedSizeMatrix::type Vector;\n-949 Vector (*numGrad)(std::function, const X2&,\n-950 double) = &numericalGradient;\n-951 std::function f2(\n-952 std::bind(f, std::cref(x1), std::placeholders::_1));\n-953\n-954 return numericalDerivative11(\n-955 std::function(\n-956 std::bind(numGrad, f2, std::placeholders::_1, delta)),\n-957 x2, delta);\n-958}\n-959\n-960template\n-961inline typename internal::FixedSizeMatrix::type numericalHessian222\n-(double (*f)(const X1&, const X2&),\n-962 const X1& x1, const X2& x2, double delta = 1e-5) {\n-963 return numericalHessian222(std::function(f),\n-964 x1, x2, delta);\n-965}\n-966\n-970/* **************************************************************** */\n-971template\n-_\b9_\b7_\b2inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn_\b3_\b1_\b1(\n-973 std::function f, const X1& x1,\n-974 const X2& x2, const X3& x3, double delta = 1e-5) {\n-975 typedef typename internal::FixedSizeMatrix::type Vector;\n-976 Vector (*numGrad)(std::function, const X1&,\n-977 double) = &numericalGradient;\n-978 std::function f2(std::bind(\n-979 f, std::placeholders::_1, std::cref(x2), std::cref(x3)));\n-980\n-981 return numericalDerivative11(\n-982 std::function(\n-983 std::bind(numGrad, f2, std::placeholders::_1, delta)),\n-984 x1, delta);\n-985}\n-986\n-987template\n-988inline typename internal::FixedSizeMatrix::type _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn_\b3_\b1_\b1\n-(double (*f)(const X1&, const X2&, const X3&),\n-989 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n-990 return _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn_\b3_\b1_\b1(\n-991 std::function(f), x1, x2, x3,\n-992 delta);\n-993}\n-994\n-995/* **************************************************************** */\n-996template\n-997inline typename internal::FixedSizeMatrix::type numericalHessian322(\n-998 std::function f, const X1& x1,\n-999 const X2& x2, const X3& x3, double delta = 1e-5) {\n-1000 typedef typename internal::FixedSizeMatrix::type Vector;\n-1001 Vector (*numGrad)(std::function, const X2&,\n-1002 double) = &numericalGradient;\n-1003 std::function f2(std::bind(\n-1004 f, std::cref(x1), std::placeholders::_1, std::cref(x3)));\n-1005\n-1006 return numericalDerivative11(\n-1007 std::function(\n-1008 std::bind(numGrad, f2, std::placeholders::_1, delta)),\n-1009 x2, delta);\n-1010}\n-1011\n-1012template\n-1013inline typename internal::FixedSizeMatrix::type numericalHessian322\n-(double (*f)(const X1&, const X2&, const X3&),\n-1014 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n-1015 return numericalHessian322(\n-1016 std::function(f), x1, x2, x3,\n-1017 delta);\n-1018}\n-1019\n-1020/* **************************************************************** */\n-1021template\n-1022inline typename internal::FixedSizeMatrix::type numericalHessian333(\n-1023 std::function f, const X1& x1,\n-1024 const X2& x2, const X3& x3, double delta = 1e-5) {\n-1025 typedef typename internal::FixedSizeMatrix::type Vector;\n-1026 Vector (*numGrad)(std::function, const X3&,\n-1027 double) = &numericalGradient;\n-1028 std::function f2(std::bind(\n-1029 f, std::cref(x1), std::cref(x2), std::placeholders::_1));\n-1030\n-1031 return numericalDerivative11(\n-1032 std::function(\n-1033 std::bind(numGrad, f2, std::placeholders::_1, delta)),\n-1034 x3, delta);\n-1035}\n-1036\n-1037template\n-1038inline typename internal::FixedSizeMatrix::type numericalHessian333\n-(double (*f)(const X1&, const X2&, const X3&),\n-1039 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n-1040 return numericalHessian333(\n-1041 std::function(f), x1, x2, x3,\n-1042 delta);\n-1043}\n-1044\n-1045/* **************************************************************** */\n-1046template\n-1047inline typename internal::FixedSizeMatrix::type numericalHessian312(\n-1048 std::function f, const X1& x1,\n-1049 const X2& x2, const X3& x3, double delta = 1e-5) {\n-1050 return numericalHessian212(\n-1051 std::function(\n-1052 std::bind(f, std::placeholders::_1, std::placeholders::_2,\n-1053 std::cref(x3))),\n-1054 x1, x2, delta);\n-1055}\n-1056\n-1057template\n-1058inline typename internal::FixedSizeMatrix::type numericalHessian313(\n-1059 std::function f, const X1& x1,\n-1060 const X2& x2, const X3& x3, double delta = 1e-5) {\n-1061 return numericalHessian212(\n-1062 std::function(\n-1063 std::bind(f, std::placeholders::_1, std::cref(x2),\n-1064 std::placeholders::_2)),\n-1065 x1, x3, delta);\n-1066}\n-1067\n-1068template\n-1069inline typename internal::FixedSizeMatrix::type numericalHessian323(\n-1070 std::function f, const X1& x1,\n-1071 const X2& x2, const X3& x3, double delta = 1e-5) {\n-1072 return numericalHessian212(\n-1073 std::function(\n-1074 std::bind(f, std::cref(x1), std::placeholders::_1,\n-1075 std::placeholders::_2)),\n-1076 x2, x3, delta);\n-1077}\n-1078\n-1079/* **************************************************************** */\n-1080template\n-1081inline typename internal::FixedSizeMatrix::type numericalHessian312\n-(double (*f)(const X1&, const X2&, const X3&),\n-1082 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n-1083 return numericalHessian312(\n-1084 std::function(f), x1, x2, x3,\n-1085 delta);\n-1086}\n-1087\n-1088template\n-1089inline typename internal::FixedSizeMatrix::type numericalHessian313\n-(double (*f)(const X1&, const X2&, const X3&),\n-1090 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n-1091 return numericalHessian313(\n-1092 std::function(f), x1, x2, x3,\n-1093 delta);\n-1094}\n-1095\n-1096template\n-1097inline typename internal::FixedSizeMatrix::type numericalHessian323\n-(double (*f)(const X1&, const X2&, const X3&),\n-1098 const X1& x1, const X2& x2, const X3& x3, double delta = 1e-5) {\n-1099 return numericalHessian323(\n-1100 std::function(f), x1, x2, x3,\n-1101 delta);\n-1102}\n-1103\n-1104} // namespace gtsam\n-1105\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\n+52 // Test the invertibility of retract/local\n+53 dx.setRandom();\n+54 T updated = Chart::retract(value, dx);\n+55 Vector invdx = Chart::local(value, updated);\n+56 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(Matrix(dx), Matrix(invdx), 1e-9));\n+57\n+58 // And test that negative steps work as well.\n+59 dx = -dx;\n+60 updated = Chart::retract(value, dx);\n+61 invdx = Chart::local(value, updated);\n+62 EXPECT(_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(Matrix(dx), Matrix(invdx), 1e-9));\n+63}\n+64} // namespace gtsam\n+65\n+68#define CHECK_CHART_CONCEPT(value) \\\n+69 { gtsam::testDefaultChart(result_, name_, value); }\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b1\n-internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative61(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n-const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n-&x6, double delta=1e-5)\n-Compute numerical derivative in argument 1 of 6-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:643\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn_\b3_\b1_\b1\n-internal::FixedSizeMatrix< X1, X1 >::type numericalHessian311(std::function<\n-double(const X1 &, const X2 &, const X3 &)> f, const X1 &x1, const X2 &x2,\n-const X3 &x3, double delta=1e-5)\n-Numerical Hessian for tenary functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:972\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bH_\be_\bs_\bs_\bi_\ba_\bn\n-internal::FixedSizeMatrix< X, X >::type numericalHessian(std::function< double\n-(const X &)> f, const X &x, double delta=1e-5)\n-Compute numerical Hessian matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:861\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b1\n-internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative21(const std::\n-function< Y(const X1 &, const X2 &)> &h, const X1 &x1, const X2 &x2, double\n-delta=1e-5)\n-Compute numerical derivative in argument 1 of binary function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:166\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b3\n-internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative63(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n-const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n-&x6, double delta=1e-5)\n-Compute numerical derivative in argument 3 of 6-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:717\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b1\n-internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative51(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1,\n-const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)\n-Compute numerical derivative in argument 1 of 5-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:462\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b4\n-internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative54(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1,\n-const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)\n-Compute numerical derivative in argument 4 of 5-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:570\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b1\n-internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative41(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2\n-&x2, const X3 &x3, const X4 &x4, double delta=1e-5)\n-Compute numerical derivative in argument 1 of 4-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:325\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b4\n-internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative64(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n-const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n-&x6, double delta=1e-5)\n-Compute numerical derivative in argument 4 of 6-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:754\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b6\n-internal::FixedSizeMatrix< Y, X6 >::type numericalDerivative66(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n-const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n-&x6, double delta=1e-5)\n-Compute numerical derivative in argument 6 of 6-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:828\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b3\n-internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative33(std::function< Y\n-(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3\n-&x3, double delta=1e-5)\n-Compute numerical derivative in argument 3 of ternary function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:292\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b1_\b1\n-internal::FixedSizeMatrix< Y, X >::type numericalDerivative11(std::function< Y\n-(const X &)> h, const X &x, double delta=1e-5)\n-New-style numerical derivatives using manifold_traits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b2_\b2\n-internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative22(std::function< Y\n-(const X1 &, const X2 &)> h, const X1 &x1, const X2 &x2, double delta=1e-5)\n-Compute numerical derivative in argument 2 of binary function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b5\n-internal::FixedSizeMatrix< Y, X5 >::type numericalDerivative55(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1,\n-const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)\n-Compute numerical derivative in argument 5 of 5-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:606\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b3\n-internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative43(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2\n-&x2, const X3 &x3, const X4 &x4, double delta=1e-5)\n-Compute numerical derivative in argument 3 of 4-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:393\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b2\n-internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative52(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1,\n-const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)\n-Compute numerical derivative in argument 2 of 5-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:498\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b5\n-internal::FixedSizeMatrix< Y, X5 >::type numericalDerivative65(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n-const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n-&x6, double delta=1e-5)\n-Compute numerical derivative in argument 5 of 6-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:791\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b4\n-internal::FixedSizeMatrix< Y, X4 >::type numericalDerivative44(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2\n-&x2, const X3 &x3, const X4 &x4, double delta=1e-5)\n-Compute numerical derivative in argument 4 of 4-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:427\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b1\n-internal::FixedSizeMatrix< Y, X1 >::type numericalDerivative31(std::function< Y\n-(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3\n-&x3, double delta=1e-5)\n-Compute numerical derivative in argument 1 of ternary function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:226\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b6_\b2\n-internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative62(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &, const X6 &)> h,\n-const X1 &x1, const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, const X6\n-&x6, double delta=1e-5)\n-Compute numerical derivative in argument 2 of 6-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:680\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b5_\b3\n-internal::FixedSizeMatrix< Y, X3 >::type numericalDerivative53(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &, const X5 &)> h, const X1 &x1,\n-const X2 &x2, const X3 &x3, const X4 &x4, const X5 &x5, double delta=1e-5)\n-Compute numerical derivative in argument 3 of 5-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:534\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b3_\b2\n-internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative32(std::function< Y\n-(const X1 &, const X2 &, const X3 &)> h, const X1 &x1, const X2 &x2, const X3\n-&x3, double delta=1e-5)\n-Compute numerical derivative in argument 2 of ternary function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:259\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b4_\b2\n-internal::FixedSizeMatrix< Y, X2 >::type numericalDerivative42(std::function< Y\n-(const X1 &, const X2 &, const X3 &, const X4 &)> h, const X1 &x1, const X2\n-&x2, const X3 &x3, const X4 &x4, double delta=1e-5)\n-Compute numerical derivative in argument 2 of 4-argument function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:359\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt\n-Eigen::Matrix< double, N, 1 > numericalGradient(std::function< double(const X\n-&)> h, const X &x, double delta=1e-5)\n-Numerically compute gradient of scalar function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg\n-tag to assert a type is a manifold\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bS_\bi_\bz_\be_\bM_\ba_\bt_\br_\bi_\bx\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\b__\bx_\b1\n-Helper class that computes the derivative of f w.r.t.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn numericalDerivative.h:883\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n+bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n+equals with an tolerance, prints out message if unequal\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh\n+ * c\bch\bha\bar\brt\btT\bTe\bes\bst\bti\bin\bng\bg.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00146_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00146_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/treeTraversal-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h Source File\n \n \n \n \n \n \n \n@@ -98,217 +98,487 @@\n
No Matches
\n \n \n \n \n \n
\n-
treeTraversal-inst.h
\n+
VectorSpace.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
7
\n-
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n-
11
\n-
17#pragma once
\n+
1/*
\n+
2 * VectorSpace.h
\n+
3 *
\n+
4 * @date December 21, 2014
\n+
5 * @author Mike Bosse
\n+
6 * @author Frank Dellaert
\n+
7 */
\n+
8
\n+
9#pragma once
\n+
10
\n+
11#include <gtsam/base/Lie.h>
\n+
12
\n+
13namespace gtsam {
\n+
14
\n+
\n+\n+
17};
\n+
\n
18
\n-
19#include <gtsam/base/treeTraversal/parallelTraversalTasks.h>
\n-
20#include <gtsam/base/treeTraversal/statistics.h>
\n-
21
\n-
22#include <gtsam/base/FastList.h>
\n-\n-
24#include <gtsam/inference/Key.h>
\n-
25#include <gtsam/config.h> // for GTSAM_USE_TBB
\n+
19template<typename T> struct traits;
\n+
20
\n+
21namespace internal {
\n+
22
\n+
24template<class Class, int N>
\n+
\n+\n
26
\n-
27#include <stack>
\n-
28#include <vector>
\n-
29#include <string>
\n-
30#include <boost/shared_ptr.hpp>
\n-
31#include <boost/make_shared.hpp>
\n-
32
\n-
33namespace gtsam {
\n-
34
\n-
\n-
36namespace treeTraversal {
\n-
37
\n-
38/* ************************************************************************* */
\n-
39namespace {
\n-
40// Internal node used in DFS preorder stack
\n-
41template<typename NODE, typename DATA>
\n-
42struct TraversalNode {
\n-
43 bool expanded;
\n-
44 const boost::shared_ptr<NODE>& treeNode;
\n-
45 DATA& parentData;
\n-
46 typename FastList<DATA>::iterator dataPointer;
\n-
47 TraversalNode(const boost::shared_ptr<NODE>& _treeNode, DATA& _parentData) :
\n-
48 expanded(false), treeNode(_treeNode), parentData(_parentData) {
\n-
49 }
\n-
50};
\n-
51
\n-
52// Do nothing - default argument for post-visitor for tree traversal
\n-
53struct no_op {
\n-
54 template<typename NODE, typename DATA>
\n-
55 void operator()(const boost::shared_ptr<NODE>& node, const DATA& data) {
\n-
56 }
\n-
57};
\n+
29 typedef Eigen::Matrix<double, N, 1> TangentVector;
\n+
30 typedef OptionalJacobian<N, N> ChartJacobian;
\n+
31 typedef Eigen::Matrix<double, N, N> Jacobian;
\n+
32 static int GetDimension(const Class&) { return N;}
\n+
33
\n+
34 static TangentVector Local(const Class& origin, const Class& other,
\n+
35 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
36 if (H1) *H1 = - Jacobian::Identity();
\n+
37 if (H2) *H2 = Jacobian::Identity();
\n+
38 Class v = other-origin;
\n+
39 return v.vector();
\n+
40 }
\n+
41
\n+
42 static Class Retract(const Class& origin, const TangentVector& v,
\n+
43 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
44 if (H1) *H1 = Jacobian::Identity();
\n+
45 if (H2) *H2 = Jacobian::Identity();
\n+
46 return origin + v;
\n+
47 }
\n+
48
\n+
50
\n+
53
\n+
54 static TangentVector Logmap(const Class& m, ChartJacobian Hm = boost::none) {
\n+
55 if (Hm) *Hm = Jacobian::Identity();
\n+
56 return m.vector();
\n+
57 }
\n
58
\n-
59}
\n-
60
\n-
75template<class FOREST, typename DATA, typename VISITOR_PRE,
\n-
76 typename VISITOR_POST>
\n-
\n-
77void DepthFirstForest(FOREST& forest, DATA& rootData, VISITOR_PRE& visitorPre,
\n-
78 VISITOR_POST& visitorPost) {
\n-
79 // Typedefs
\n-
80 typedef typename FOREST::Node Node;
\n-
81 typedef boost::shared_ptr<Node> sharedNode;
\n+
59 static Class Expmap(const TangentVector& v, ChartJacobian Hv = boost::none) {
\n+
60 if (Hv) *Hv = Jacobian::Identity();
\n+
61 return Class(v);
\n+
62 }
\n+
63
\n+
64 static Class Compose(const Class& v1, const Class& v2, ChartJacobian H1 = boost::none,
\n+
65 ChartJacobian H2 = boost::none) {
\n+
66 if (H1) *H1 = Jacobian::Identity();
\n+
67 if (H2) *H2 = Jacobian::Identity();
\n+
68 return v1 + v2;
\n+
69 }
\n+
70
\n+
71 static Class Between(const Class& v1, const Class& v2, ChartJacobian H1 = boost::none,
\n+
72 ChartJacobian H2 = boost::none) {
\n+
73 if (H1) *H1 = - Jacobian::Identity();
\n+
74 if (H2) *H2 = Jacobian::Identity();
\n+
75 return v2 - v1;
\n+
76 }
\n+
77
\n+
78 static Class Inverse(const Class& v, ChartJacobian H = boost::none) {
\n+
79 if (H) *H = - Jacobian::Identity();
\n+
80 return -v;
\n+
81 }
\n
82
\n-
83 // Depth first traversal stack
\n-
84 typedef TraversalNode<typename FOREST::Node, DATA> TraversalNode;
\n-
85 typedef FastList<TraversalNode> Stack;
\n-
86 Stack stack;
\n-
87 FastList<DATA> dataList; // List to store node data as it is returned from the pre-order visitor
\n-
88
\n-
89 // Add roots to stack (insert such that they are visited and processed in order
\n-
90 {
\n-
91 typename Stack::iterator insertLocation = stack.begin();
\n-
92 for(const sharedNode& root: forest.roots())
\n-
93 stack.insert(insertLocation, TraversalNode(root, rootData));
\n-
94 }
\n-
95
\n-
96 // Traverse
\n-
97 while (!stack.empty()) {
\n-
98 // Get next node
\n-
99 TraversalNode& node = stack.front();
\n-
100
\n-
101 if (node.expanded) {
\n-
102 // If already expanded, then the data stored in the node is no longer needed, so visit
\n-
103 // then delete it.
\n-
104 (void) visitorPost(node.treeNode, *node.dataPointer);
\n-
105 dataList.erase(node.dataPointer);
\n-
106 stack.pop_front();
\n-
107 } else {
\n-
108 // If not already visited, visit the node and add its children (use reverse iterators so
\n-
109 // children are processed in the order they appear)
\n-
110 node.dataPointer = dataList.insert(dataList.end(),
\n-
111 visitorPre(node.treeNode, node.parentData));
\n-
112 typename Stack::iterator insertLocation = stack.begin();
\n-
113 for(const sharedNode& child: node.treeNode->children)
\n-
114 stack.insert(insertLocation, TraversalNode(child, *node.dataPointer));
\n-
115 node.expanded = true;
\n-
116 }
\n-
117 }
\n-
118 assert(dataList.empty());
\n-
119}
\n-
\n-
120
\n-
132template<class FOREST, typename DATA, typename VISITOR_PRE>
\n-
\n-
133void DepthFirstForest(FOREST& forest, DATA& rootData, VISITOR_PRE& visitorPre) {
\n-
134 no_op visitorPost;
\n-
135 DepthFirstForest(forest, rootData, visitorPre, visitorPost);
\n-
136}
\n-
\n-
137
\n-
152template<class FOREST, typename DATA, typename VISITOR_PRE,
\n-
153 typename VISITOR_POST>
\n-
\n-
154void DepthFirstForestParallel(FOREST& forest, DATA& rootData,
\n-
155 VISITOR_PRE& visitorPre, VISITOR_POST& visitorPost,
\n-
156 int problemSizeThreshold = 10) {
\n-
157#ifdef GTSAM_USE_TBB
\n-
158 // Typedefs
\n-
159 typedef typename FOREST::Node Node;
\n-
160
\n-
161 internal::CreateRootTask<Node>(forest.roots(), rootData, visitorPre,
\n-
162 visitorPost, problemSizeThreshold);
\n-
163#else
\n-
164 DepthFirstForest(forest, rootData, visitorPre, visitorPost);
\n-
165#endif
\n-
166}
\n+
84};
\n
\n+
85
\n+
87template<class Class>
\n+
\n+
88struct VectorSpaceImpl<Class,Eigen::Dynamic> {
\n+
89
\n+
92 static Class Compose(const Class& v1, const Class& v2) { return v1+v2;}
\n+
93 static Class Between(const Class& v1, const Class& v2) { return v2-v1;}
\n+
94 static Class Inverse(const Class& m) { return -m;}
\n+
96
\n+
99 typedef Eigen::VectorXd TangentVector;
\n+\n+
101 static int GetDimension(const Class& m) { return m.dim();}
\n+
102
\n+
103 static Eigen::MatrixXd Eye(const Class& m) {
\n+
104 int dim = GetDimension(m);
\n+
105 return Eigen::MatrixXd::Identity(dim, dim);
\n+
106 }
\n+
107
\n+
108 static TangentVector Local(const Class& origin, const Class& other,
\n+
109 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
110 if (H1) *H1 = - Eye(origin);
\n+
111 if (H2) *H2 = Eye(other);
\n+
112 Class v = other-origin;
\n+
113 return v.vector();
\n+
114 }
\n+
115
\n+
116 static Class Retract(const Class& origin, const TangentVector& v,
\n+
117 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
118 if (H1) *H1 = Eye(origin);
\n+
119 if (H2) *H2 = Eye(origin);
\n+
120 return origin + v;
\n+
121 }
\n+
122
\n+
124
\n+
127
\n+
128 static TangentVector Logmap(const Class& m, ChartJacobian Hm = boost::none) {
\n+
129 if (Hm) *Hm = Eye(m);
\n+
130 return m.vector();
\n+
131 }
\n+
132
\n+
133 static Class Expmap(const TangentVector& v, ChartJacobian Hv = boost::none) {
\n+
134 Class result(v);
\n+
135 if (Hv)
\n+
136 *Hv = Eye(v);
\n+
137 return result;
\n+
138 }
\n+
139
\n+
140 static Class Compose(const Class& v1, const Class& v2, ChartJacobian H1,
\n+
141 ChartJacobian H2 = boost::none) {
\n+
142 if (H1) *H1 = Eye(v1);
\n+
143 if (H2) *H2 = Eye(v2);
\n+
144 return v1 + v2;
\n+
145 }
\n+
146
\n+
147 static Class Between(const Class& v1, const Class& v2, ChartJacobian H1,
\n+
148 ChartJacobian H2 = boost::none) {
\n+
149 if (H1) *H1 = - Eye(v1);
\n+
150 if (H2) *H2 = Eye(v2);
\n+
151 return v2 - v1;
\n+
152 }
\n+
153
\n+
154 static Class Inverse(const Class& v, ChartJacobian H) {
\n+
155 if (H) *H = -Eye(v);
\n+
156 return -v;
\n+
157 }
\n+
158
\n+
160};
\n+
\n+
161
\n+
163template<class Class>
\n+
\n+\n+
165
\n+
166 enum { dim = Class::dimension };
\n
167
\n-
168/* ************************************************************************* */
\n-
170namespace {
\n-
171template<typename NODE>
\n-
172boost::shared_ptr<NODE> CloneForestVisitorPre(
\n-
173 const boost::shared_ptr<NODE>& node,
\n-
174 const boost::shared_ptr<NODE>& parentPointer) {
\n-
175 // Clone the current node and add it to its cloned parent
\n-
176 boost::shared_ptr<NODE> clone = boost::make_shared<NODE>(*node);
\n-
177 clone->children.clear();
\n-
178 parentPointer->children.push_back(clone);
\n-
179 return clone;
\n-
180}
\n-
181}
\n-
182
\n-
188template<class FOREST>
\n-
\n-\n-
190 const FOREST& forest) {
\n-
191 typedef typename FOREST::Node Node;
\n-
192 boost::shared_ptr<Node> rootContainer = boost::make_shared<Node>();
\n-
193 DepthFirstForest(forest, rootContainer, CloneForestVisitorPre<Node>);
\n-
194 return FastVector<boost::shared_ptr<Node> >(rootContainer->children.begin(),
\n-
195 rootContainer->children.end());
\n-
196}
\n-
\n+
168 Class p, q;
\n+
169 Vector v;
\n+
170
\n+
171 BOOST_CONCEPT_USAGE(HasVectorSpacePrereqs) {
\n+
172 p = Class::Identity(); // identity
\n+
173 q = p + p; // addition
\n+
174 q = p - p; // subtraction
\n+
175 v = p.vector(); // conversion to vector
\n+
176 q = p + v; // addition of a vector on the right
\n+
177 }
\n+
178};
\n+
\n+
179
\n+
184template<class Class>
\n+
\n+
185struct VectorSpaceTraits: VectorSpaceImpl<Class, Class::dimension> {
\n+
186
\n+
187 // Check that Class has the necessary machinery
\n+
188 BOOST_CONCEPT_ASSERT((HasVectorSpacePrereqs<Class>));
\n+
189
\n+\n+
191
\n+\n+
195 static Class Identity() { return Class::Identity();}
\n
197
\n-
198/* ************************************************************************* */
\n-
200namespace {
\n-
201struct PrintForestVisitorPre {
\n-
202 const KeyFormatter& formatter;
\n-
203 PrintForestVisitorPre(const KeyFormatter& formatter) :
\n-
204 formatter(formatter) {
\n-
205 }
\n-
206 template<typename NODE> std::string operator()(
\n-
207 const boost::shared_ptr<NODE>& node, const std::string& parentString) {
\n-
208 // Print the current node
\n-
209 node->print(parentString + "-", formatter);
\n-
210 // Increment the indentation
\n-
211 return parentString + "| ";
\n-
212 }
\n-
213};
\n-
214}
\n+
200 enum { dimension = Class::dimension};
\n+
201 typedef Class ManifoldType;
\n+
203};
\n+
\n+
204
\n+
206template<class Class>
\n+
207struct VectorSpace: Testable<Class>, VectorSpaceTraits<Class> {};
\n+
208
\n+
211template<typename Scalar>
\n+
\n+
212struct ScalarTraits : VectorSpaceImpl<Scalar, 1> {
\n+
213
\n+\n
215
\n-
218template<class FOREST>
\n-
\n-
219void PrintForest(const FOREST& forest, std::string str,
\n-
220 const KeyFormatter& keyFormatter) {
\n-
221 PrintForestVisitorPre visitor(keyFormatter);
\n-
222 DepthFirstForest(forest, str, visitor);
\n-
223}
\n-
\n-
224} // namespace treeTraversal
\n-
\n+
218 static void Print(Scalar m, const std::string& str = "") {
\n+
219 gtsam::print(m, str);
\n+
220 }
\n+
221 static bool Equals(Scalar v1, Scalar v2, double tol = 1e-8) {
\n+
222 return std::abs(v1 - v2) < tol;
\n+
223 }
\n
225
\n-
226} // namespace gtsam
\n-
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+\n+
229 static Scalar Identity() { return 0;}
\n+
231
\n+
234 typedef Scalar ManifoldType;
\n+
235 enum { dimension = 1 };
\n+
236 typedef Eigen::Matrix<double, 1, 1> TangentVector;
\n+
237 typedef OptionalJacobian<1, 1> ChartJacobian;
\n+
238
\n+
239 static TangentVector Local(Scalar origin, Scalar other,
\n+
240 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
241 if (H1) (*H1)[0] = -1.0;
\n+
242 if (H2) (*H2)[0] = 1.0;
\n+
243 TangentVector result;
\n+
244 result(0) = other - origin;
\n+
245 return result;
\n+
246 }
\n+
247
\n+
248 static Scalar Retract(Scalar origin, const TangentVector& v,
\n+
249 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
250 if (H1) (*H1)[0] = 1.0;
\n+
251 if (H2) (*H2)[0] = 1.0;
\n+
252 return origin + v[0];
\n+
253 }
\n+
255
\n+
258 static TangentVector Logmap(Scalar m, ChartJacobian H = boost::none) {
\n+
259 if (H) (*H)[0] = 1.0;
\n+
260 return Local(0, m);
\n+
261 }
\n+
262
\n+
263 static Scalar Expmap(const TangentVector& v, ChartJacobian H = boost::none) {
\n+
264 if (H) (*H)[0] = 1.0;
\n+
265 return v[0];
\n+
266 }
\n+
268
\n+
269};
\n+
\n+
270
\n+
271} // namespace internal
\n+
272
\n+
\n+
274template<> struct traits<double> : public internal::ScalarTraits<double> {
\n+
275};
\n+
\n+
276
\n+
\n+
278template<> struct traits<float> : public internal::ScalarTraits<float> {
\n+
279};
\n+
\n+
280
\n+
281// traits for any fixed double Eigen matrix
\n+
282template<int M, int N, int Options, int MaxRows, int MaxCols>
\n+
\n+
283struct traits<Eigen::Matrix<double, M, N, Options, MaxRows, MaxCols> > :
\n+\n+
285 Eigen::Matrix<double, M, N, Options, MaxRows, MaxCols>, M * N> {
\n+
286
\n+\n+
288 typedef Eigen::Matrix<double, M, N, Options, MaxRows, MaxCols> Fixed;
\n+
289
\n+
292 static void Print(const Fixed& m, const std::string& str = "") {
\n+
293 gtsam::print(Eigen::MatrixXd(m), str);
\n+
294 }
\n+
295 static bool Equals(const Fixed& v1, const Fixed& v2, double tol = 1e-8) {
\n+
296 return equal_with_abs_tol(v1, v2, tol);
\n+
297 }
\n+
299
\n+\n+
303 static Fixed Identity() { return Fixed::Zero();}
\n+
305
\n+
308 enum { dimension = M*N};
\n+
309 typedef Fixed ManifoldType;
\n+
310 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
\n+
311 typedef Eigen::Matrix<double, dimension, dimension> Jacobian;
\n+\n+
313
\n+
314 static TangentVector Local(const Fixed& origin, const Fixed& other,
\n+
315 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
316 if (H1) (*H1) = -Jacobian::Identity();
\n+
317 if (H2) (*H2) = Jacobian::Identity();
\n+
318 TangentVector result;
\n+
319 Eigen::Map<Fixed>(result.data()) = other - origin;
\n+
320 return result;
\n+
321 }
\n+
322
\n+
323 static Fixed Retract(const Fixed& origin, const TangentVector& v,
\n+
324 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
325 if (H1) (*H1) = Jacobian::Identity();
\n+
326 if (H2) (*H2) = Jacobian::Identity();
\n+
327 return origin + Eigen::Map<const Fixed>(v.data());
\n+
328 }
\n+
330
\n+
333 static TangentVector Logmap(const Fixed& m, ChartJacobian H = boost::none) {
\n+
334 if (H) *H = Jacobian::Identity();
\n+
335 TangentVector result;
\n+
336 Eigen::Map<Fixed>(result.data()) = m;
\n+
337 return result;
\n+
338 }
\n+
339
\n+
340 static Fixed Expmap(const TangentVector& v, ChartJacobian H = boost::none) {
\n+
341 Fixed m;
\n+
342 m.setZero();
\n+
343 if (H) *H = Jacobian::Identity();
\n+
344 return m + Eigen::Map<const Fixed>(v.data());
\n+
345 }
\n+
347};
\n+
\n+
348
\n+
349
\n+
350namespace internal {
\n+
351
\n+
352// traits for dynamic Eigen matrices
\n+
353template<int M, int N, int Options, int MaxRows, int MaxCols>
\n+
\n+\n+
355
\n+\n+
357 typedef Eigen::Matrix<double, M, N, Options, MaxRows, MaxCols> Dynamic;
\n+
358
\n+
361 static void Print(const Dynamic& m, const std::string& str = "") {
\n+
362 gtsam::print(Eigen::MatrixXd(m), str);
\n+
363 }
\n+
364 static bool Equals(const Dynamic& v1, const Dynamic& v2,
\n+
365 double tol = 1e-8) {
\n+
366 return equal_with_abs_tol(v1, v2, tol);
\n+
367 }
\n+
369
\n+\n+
373 static Dynamic Identity() {
\n+
374 throw std::runtime_error("Identity not defined for dynamic types");
\n+
375 }
\n+
377
\n+
380 enum { dimension = Eigen::Dynamic };
\n+
381 typedef Eigen::VectorXd TangentVector;
\n+
382 typedef Eigen::MatrixXd Jacobian;
\n+
383 typedef OptionalJacobian<dimension, dimension> ChartJacobian;
\n+
384 typedef Dynamic ManifoldType;
\n+
385
\n+
386 static int GetDimension(const Dynamic& m) {
\n+
387 return m.rows() * m.cols();
\n+
388 }
\n+
389
\n+
390 static Jacobian Eye(const Dynamic& m) {
\n+
391 int dim = GetDimension(m);
\n+
392 return Eigen::Matrix<double, dimension, dimension>::Identity(dim, dim);
\n+
393 }
\n+
394
\n+
395 static TangentVector Local(const Dynamic& m, const Dynamic& other, //
\n+
396 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
397 if (H1) *H1 = -Eye(m);
\n+
398 if (H2) *H2 = Eye(m);
\n+
399 TangentVector v(GetDimension(m));
\n+
400 Eigen::Map<Dynamic>(v.data(), m.rows(), m.cols()) = other - m;
\n+
401 return v;
\n+
402 }
\n+
403
\n+
404 static Dynamic Retract(const Dynamic& m, const TangentVector& v, //
\n+
405 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
406 if (H1) *H1 = Eye(m);
\n+
407 if (H2) *H2 = Eye(m);
\n+
408 return m + Eigen::Map<const Dynamic>(v.data(), m.rows(), m.cols());
\n+
409 }
\n+
411
\n+
414 static TangentVector Logmap(const Dynamic& m, ChartJacobian H = boost::none) {
\n+
415 if (H) *H = Eye(m);
\n+
416 TangentVector result(GetDimension(m));
\n+
417 Eigen::Map<Dynamic>(result.data(), m.cols(), m.rows()) = m;
\n+
418 return result;
\n+
419 }
\n+
420
\n+
421 static Dynamic Expmap(const TangentVector& /*v*/, ChartJacobian H = boost::none) {
\n+
422 static_cast<void>(H);
\n+
423 throw std::runtime_error("Expmap not defined for dynamic types");
\n+
424 }
\n+
425
\n+
426 static Dynamic Inverse(const Dynamic& m, ChartJacobian H = boost::none) {
\n+
427 if (H) *H = -Eye(m);
\n+
428 return -m;
\n+
429 }
\n+
430
\n+
431 static Dynamic Compose(const Dynamic& v1, const Dynamic& v2,
\n+
432 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
433 if (H1) *H1 = Eye(v1);
\n+
434 if (H2) *H2 = Eye(v1);
\n+
435 return v1 + v2;
\n+
436 }
\n+
437
\n+
438 static Dynamic Between(const Dynamic& v1, const Dynamic& v2,
\n+
439 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
440 if (H1) *H1 = -Eye(v1);
\n+
441 if (H2) *H2 = Eye(v1);
\n+
442 return v2 - v1;
\n+
443 }
\n+
445
\n+
446};
\n+
\n+
447
\n+
448} // \\ internal
\n+
449
\n+
450// traits for fully dynamic matrix
\n+
451template<int Options, int MaxRows, int MaxCols>
\n+
\n+
452struct traits<Eigen::Matrix<double, -1, -1, Options, MaxRows, MaxCols> > :
\n+
453 public internal::DynamicTraits<-1, -1, Options, MaxRows, MaxCols> {
\n+
454};
\n+
\n+
455
\n+
456// traits for dynamic column vector
\n+
457template<int Options, int MaxRows, int MaxCols>
\n+
\n+
458struct traits<Eigen::Matrix<double, -1, 1, Options, MaxRows, MaxCols> > :
\n+
459 public internal::DynamicTraits<-1, 1, Options, MaxRows, MaxCols> {
\n+
460};
\n+
\n+
461
\n+
462// traits for dynamic row vector
\n+
463template<int Options, int MaxRows, int MaxCols>
\n+
\n+
464struct traits<Eigen::Matrix<double, 1, -1, Options, MaxRows, MaxCols> > :
\n+
465 public internal::DynamicTraits<1, -1, Options, MaxRows, MaxCols> {
\n+
466};
\n+
\n+
467
\n+
469template<typename T>
\n+
\n+
470class IsVectorSpace: public IsLieGroup<T> {
\n+
471public:
\n+
472
\n+
473 typedef typename traits<T>::structure_category structure_category_tag;
\n+
474
\n+
475 BOOST_CONCEPT_USAGE(IsVectorSpace) {
\n+
476 BOOST_STATIC_ASSERT_MSG(
\n+
477 (boost::is_base_of<vector_space_tag, structure_category_tag>::value),
\n+
478 "This type's trait does not assert it as a vector space (or derived)");
\n+
479 r = p + q;
\n+
480 r = -p;
\n+
481 r = p - q;
\n+
482 }
\n+
483
\n+
484private:
\n+
485 T p, q, r;
\n+
486};
\n+
\n+
487
\n+
488} // namespace gtsam
\n+
489
\n+
Base class and basic functions for Lie types.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Matrix stack(size_t nrMatrices,...)
create a matrix by stacking other matrices Given a set of matrices: A1, A2, A3...
Definition Matrix.cpp:397
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:77
\n-
FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const FOREST &forest)
Clone a tree, copy-constructing new nodes (calling boost::make_shared) and setting up child pointers ...
Definition treeTraversal-inst.h:189
\n-
void PrintForest(const FOREST &forest, std::string str, const KeyFormatter &keyFormatter)
Print a tree, prefixing each line with str, and formatting keys using keyFormatter.
Definition treeTraversal-inst.h:219
\n-
void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:154
\n-
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Definition Group.h:38
\n+
tag to assert a type is a Lie group
Definition Lie.h:164
\n+
Lie Group Concept.
Definition Lie.h:260
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
OptionalJacobian< Rows, N > cols(int startCol)
Access M*N sub-block if we are allocated, otherwise none TODO(frank): this could work as is below if ...
Definition OptionalJacobian.h:171
\n+\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
tag to assert a type is a vector space
Definition VectorSpace.h:16
\n+
VectorSpaceTraits Implementation for Fixed sizes.
Definition VectorSpace.h:25
\n+
Requirements on type to pass it to Manifold template below.
Definition VectorSpace.h:164
\n+
A helper that implements the traits interface for classes that define vector spaces To use this for y...
Definition VectorSpace.h:185
\n+
VectorSpace provides both Testable and VectorSpaceTraits.
Definition VectorSpace.h:207
\n+
A helper that implements the traits interface for scalar vector spaces.
Definition VectorSpace.h:212
\n+
Definition VectorSpace.h:354
\n+
Vector Space concept.
Definition VectorSpace.h:470
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,243 +1,503 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-treeTraversal-inst.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1/* ---------------------------------------------------------------------------\n--\n-2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n-7\n-8 * See LICENSE for the license information\n-9\n-10 * -------------------------------------------------------------------------\n-- */\n-11\n-17#pragma once\n+VectorSpace.h\n+1/*\n+2 * VectorSpace.h\n+3 *\n+4 * @date December 21, 2014\n+5 * @author Mike Bosse\n+6 * @author Frank Dellaert\n+7 */\n+8\n+9#pragma once\n+10\n+11#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+12\n+13namespace _\bg_\bt_\bs_\ba_\bm {\n+14\n+_\b1_\b6struct _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg: public _\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg {\n+17};\n 18\n-19#include \n-20#include \n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-25#include // for GTSAM_USE_TBB\n+19template struct _\bt_\br_\ba_\bi_\bt_\bs;\n+20\n+21namespace internal {\n+22\n+24template\n+_\b2_\b5struct _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl {\n 26\n-27#include \n-28#include \n-29#include \n-30#include \n-31#include \n-32\n-33namespace _\bg_\bt_\bs_\ba_\bm {\n-34\n-_\b3_\b6namespace treeTraversal {\n-37\n-38/* *************************************************************************\n-*/\n-39namespace {\n-40// Internal node used in DFS preorder stack\n-41template\n-42struct TraversalNode {\n-43 bool expanded;\n-44 const boost::shared_ptr& treeNode;\n-45 DATA& parentData;\n-46 typename _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bD_\bA_\bT_\bA_\b>_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br dataPointer;\n-47 TraversalNode(const boost::shared_ptr& _treeNode, DATA& _parentData) :\n-48 expanded(false), treeNode(_treeNode), parentData(_parentData) {\n-49 }\n-50};\n-51\n-52// Do nothing - default argument for post-visitor for tree traversal\n-53struct no_op {\n-54 template\n-55 void operator()(const boost::shared_ptr& node, const DATA& data) {\n-56 }\n-57};\n+29 typedef Eigen::Matrix TangentVector;\n+30 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b> ChartJacobian;\n+31 typedef Eigen::Matrix Jacobian;\n+32 static int GetDimension(const Class&) { return N;}\n+33\n+34 static TangentVector Local(const Class& origin, const Class& other,\n+35 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+36 if (H1) *H1 = - Jacobian::Identity();\n+37 if (H2) *H2 = Jacobian::Identity();\n+38 Class v = other-origin;\n+39 return v.vector();\n+40 }\n+41\n+42 static Class Retract(const Class& origin, const TangentVector& v,\n+43 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+44 if (H1) *H1 = Jacobian::Identity();\n+45 if (H2) *H2 = Jacobian::Identity();\n+46 return origin + v;\n+47 }\n+48\n+50\n+53\n+54 static TangentVector Logmap(const Class& m, ChartJacobian Hm = boost::none)\n+{\n+55 if (Hm) *Hm = Jacobian::Identity();\n+56 return m.vector();\n+57 }\n 58\n-59}\n-60\n-75template\n-_\b7_\b7void _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(FOREST& forest, DATA& rootData, VISITOR_PRE&\n-visitorPre,\n-78 VISITOR_POST& visitorPost) {\n-79 // Typedefs\n-80 typedef typename FOREST::Node Node;\n-81 typedef boost::shared_ptr sharedNode;\n+59 static Class Expmap(const TangentVector& v, ChartJacobian Hv = boost::none)\n+{\n+60 if (Hv) *Hv = Jacobian::Identity();\n+61 return Class(v);\n+62 }\n+63\n+64 static Class Compose(const Class& v1, const Class& v2, ChartJacobian H1 =\n+boost::none,\n+65 ChartJacobian H2 = boost::none) {\n+66 if (H1) *H1 = Jacobian::Identity();\n+67 if (H2) *H2 = Jacobian::Identity();\n+68 return v1 + v2;\n+69 }\n+70\n+71 static Class Between(const Class& v1, const Class& v2, ChartJacobian H1 =\n+boost::none,\n+72 ChartJacobian H2 = boost::none) {\n+73 if (H1) *H1 = - Jacobian::Identity();\n+74 if (H2) *H2 = Jacobian::Identity();\n+75 return v2 - v1;\n+76 }\n+77\n+78 static Class Inverse(const Class& v, ChartJacobian H = boost::none) {\n+79 if (H) *H = - Jacobian::Identity();\n+80 return -v;\n+81 }\n 82\n-83 // Depth first traversal stack\n-84 typedef TraversalNode TraversalNode;\n-85 typedef _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\bN_\bo_\bd_\be_\b> Stack;\n-86 Stack _\bs_\bt_\ba_\bc_\bk;\n-87 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bD_\bA_\bT_\bA_\b> dataList; // List to store node data as it is returned from\n-the pre-order visitor\n-88\n-89 // Add roots to stack (insert such that they are visited and processed in\n-order\n-90 {\n-91 typename Stack::iterator insertLocation = _\bs_\bt_\ba_\bc_\bk.begin();\n-92 for(const sharedNode& root: forest.roots())\n-93 _\bs_\bt_\ba_\bc_\bk.insert(insertLocation, TraversalNode(root, rootData));\n-94 }\n-95\n-96 // Traverse\n-97 while (!_\bs_\bt_\ba_\bc_\bk.empty()) {\n-98 // Get next node\n-99 TraversalNode& node = _\bs_\bt_\ba_\bc_\bk.front();\n-100\n-101 if (node.expanded) {\n-102 // If already expanded, then the data stored in the node is no longer\n-needed, so visit\n-103 // then delete it.\n-104 (void) visitorPost(node.treeNode, *node.dataPointer);\n-105 dataList.erase(node.dataPointer);\n-106 _\bs_\bt_\ba_\bc_\bk.pop_front();\n-107 } else {\n-108 // If not already visited, visit the node and add its children (use reverse\n-iterators so\n-109 // children are processed in the order they appear)\n-110 node.dataPointer = dataList.insert(dataList.end(),\n-111 visitorPre(node.treeNode, node.parentData));\n-112 typename Stack::iterator insertLocation = _\bs_\bt_\ba_\bc_\bk.begin();\n-113 for(const sharedNode& child: node.treeNode->children)\n-114 _\bs_\bt_\ba_\bc_\bk.insert(insertLocation, TraversalNode(child, *node.dataPointer));\n-115 node.expanded = true;\n-116 }\n-117 }\n-118 assert(dataList.empty());\n-119}\n-120\n-132template\n-_\b1_\b3_\b3void _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(FOREST& forest, DATA& rootData, VISITOR_PRE&\n-visitorPre) {\n-134 no_op visitorPost;\n-135 _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(forest, rootData, visitorPre, visitorPost);\n-136}\n-137\n-152template\n-_\b1_\b5_\b4void _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl(FOREST& forest, DATA& rootData,\n-155 VISITOR_PRE& visitorPre, VISITOR_POST& visitorPost,\n-156 int problemSizeThreshold = 10) {\n-157#ifdef GTSAM_USE_TBB\n-158 // Typedefs\n-159 typedef typename FOREST::Node Node;\n-160\n-161 internal::CreateRootTask(forest.roots(), rootData, visitorPre,\n-162 visitorPost, problemSizeThreshold);\n-163#else\n-164 _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(forest, rootData, visitorPre, visitorPost);\n-165#endif\n-166}\n+84};\n+85\n+87template\n+_\b8_\b8struct _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl {\n+89\n+92 static Class Compose(const Class& v1, const Class& v2) { return v1+v2;}\n+93 static Class Between(const Class& v1, const Class& v2) { return v2-v1;}\n+94 static Class Inverse(const Class& m) { return -m;}\n+96\n+99 typedef Eigen::VectorXd TangentVector;\n+100 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b> _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n+101 static int GetDimension(const Class& m) { return m.dim();}\n+102\n+103 static Eigen::MatrixXd Eye(const Class& m) {\n+104 int dim = GetDimension(m);\n+105 return Eigen::MatrixXd::Identity(dim, dim);\n+106 }\n+107\n+108 static TangentVector Local(const Class& origin, const Class& other,\n+109 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1 = boost::none, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n+110 if (H1) *H1 = - Eye(origin);\n+111 if (H2) *H2 = Eye(other);\n+112 Class v = other-origin;\n+113 return v.vector();\n+114 }\n+115\n+116 static Class Retract(const Class& origin, const TangentVector& v,\n+117 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1 = boost::none, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n+118 if (H1) *H1 = Eye(origin);\n+119 if (H2) *H2 = Eye(origin);\n+120 return origin + v;\n+121 }\n+122\n+124\n+127\n+128 static TangentVector Logmap(const Class& m, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn Hm = boost::none)\n+{\n+129 if (Hm) *Hm = Eye(m);\n+130 return m.vector();\n+131 }\n+132\n+133 static Class Expmap(const TangentVector& v, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn Hv = boost::none)\n+{\n+134 Class result(v);\n+135 if (Hv)\n+136 *Hv = Eye(v);\n+137 return result;\n+138 }\n+139\n+140 static Class Compose(const Class& v1, const Class& v2, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1,\n+141 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n+142 if (H1) *H1 = Eye(v1);\n+143 if (H2) *H2 = Eye(v2);\n+144 return v1 + v2;\n+145 }\n+146\n+147 static Class Between(const Class& v1, const Class& v2, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1,\n+148 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n+149 if (H1) *H1 = - Eye(v1);\n+150 if (H2) *H2 = Eye(v2);\n+151 return v2 - v1;\n+152 }\n+153\n+154 static Class Inverse(const Class& v, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H) {\n+155 if (H) *H = -Eye(v);\n+156 return -v;\n+157 }\n+158\n+160};\n+161\n+163template\n+_\b1_\b6_\b4struct _\bH_\ba_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bP_\br_\be_\br_\be_\bq_\bs {\n+165\n+166 enum { dim = Class::dimension };\n 167\n-168/* *************************************************************************\n-*/\n-170namespace {\n-171template\n-172boost::shared_ptr CloneForestVisitorPre(\n-173 const boost::shared_ptr& node,\n-174 const boost::shared_ptr& parentPointer) {\n-175 // Clone the current node and add it to its cloned parent\n-176 boost::shared_ptr clone = boost::make_shared(*node);\n-177 clone->children.clear();\n-178 parentPointer->children.push_back(clone);\n-179 return clone;\n-180}\n-181}\n-182\n-188template\n-_\b1_\b8_\b9_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bF_\bO_\bR_\bE_\bS_\bT_\b:_\b:_\bN_\bo_\bd_\be_\b> > _\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt(\n-190 const FOREST& forest) {\n-191 typedef typename FOREST::Node Node;\n-192 boost::shared_ptr rootContainer = boost::make_shared();\n-193 _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(forest, rootContainer, CloneForestVisitorPre);\n-194 return _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b<_\bN_\bo_\bd_\be_\b> >(rootContainer->children.begin\n-(),\n-195 rootContainer->children.end());\n-196}\n+168 Class p, q;\n+169 Vector v;\n+170\n+171 BOOST_CONCEPT_USAGE(_\bH_\ba_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bP_\br_\be_\br_\be_\bq_\bs) {\n+172 p = Class::Identity(); // identity\n+173 q = p + p; // addition\n+174 q = p - p; // subtraction\n+175 v = p.vector(); // conversion to vector\n+176 q = p + v; // addition of a vector on the right\n+177 }\n+178};\n+179\n+184template\n+_\b1_\b8_\b5struct _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bT_\br_\ba_\bi_\bt_\bs: _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl {\n+186\n+187 // Check that Class has the necessary machinery\n+188 BOOST_CONCEPT_ASSERT((_\bH_\ba_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bP_\br_\be_\br_\be_\bq_\bs_\b<_\bC_\bl_\ba_\bs_\bs_\b>));\n+189\n+190 typedef _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n+191\n+194 typedef _\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n+195 static Class Identity() { return Class::Identity();}\n 197\n-198/* *************************************************************************\n-*/\n-200namespace {\n-201struct PrintForestVisitorPre {\n-202 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter;\n-203 PrintForestVisitorPre(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter) :\n-204 formatter(formatter) {\n-205 }\n-206 template std::string operator()(\n-207 const boost::shared_ptr& node, const std::string& parentString) {\n-208 // Print the current node\n-209 node->print(parentString + \"-\", formatter);\n-210 // Increment the indentation\n-211 return parentString + \"| \";\n-212 }\n-213};\n-214}\n+200 enum { dimension = Class::dimension};\n+201 typedef Class ManifoldType;\n+203};\n+204\n+206template\n+_\b2_\b0_\b7struct _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be: _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be, _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bT_\br_\ba_\bi_\bt_\bs {};\n+208\n+211template\n+_\b2_\b1_\b2struct _\bS_\bc_\ba_\bl_\ba_\br_\bT_\br_\ba_\bi_\bt_\bs : _\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl {\n+213\n+214 typedef _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n 215\n-218template\n-_\b2_\b1_\b9void _\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt(const FOREST& forest, std::string str,\n-220 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) {\n-221 PrintForestVisitorPre visitor(keyFormatter);\n-222 _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(forest, str, visitor);\n-223}\n-224} // namespace treeTraversal\n+218 static void Print(Scalar m, const std::string& str = \"\") {\n+219 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(m, str);\n+220 }\n+221 static bool Equals(Scalar v1, Scalar v2, double tol = 1e-8) {\n+222 return std::abs(v1 - v2) < tol;\n+223 }\n 225\n-226} // namespace gtsam\n-_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n-A thin wrapper around std::list that uses boost's fast_pool_allocator.\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bK_\be_\by_\b._\bh\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+228 typedef _\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n+229 static Scalar Identity() { return 0;}\n+231\n+234 typedef Scalar ManifoldType;\n+235 enum { dimension = 1 };\n+236 typedef Eigen::Matrix TangentVector;\n+237 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b1_\b> ChartJacobian;\n+238\n+239 static TangentVector Local(Scalar origin, Scalar other,\n+240 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+241 if (H1) (*H1)[0] = -1.0;\n+242 if (H2) (*H2)[0] = 1.0;\n+243 TangentVector result;\n+244 result(0) = other - origin;\n+245 return result;\n+246 }\n+247\n+248 static Scalar Retract(Scalar origin, const TangentVector& v,\n+249 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+250 if (H1) (*H1)[0] = 1.0;\n+251 if (H2) (*H2)[0] = 1.0;\n+252 return origin + v[0];\n+253 }\n+255\n+258 static TangentVector Logmap(Scalar m, ChartJacobian H = boost::none) {\n+259 if (H) (*H)[0] = 1.0;\n+260 return Local(0, m);\n+261 }\n+262\n+263 static Scalar Expmap(const TangentVector& v, ChartJacobian H = boost::none)\n+{\n+264 if (H) (*H)[0] = 1.0;\n+265 return v[0];\n+266 }\n+268\n+269};\n+270\n+271} // namespace internal\n+272\n+_\b2_\b7_\b4template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bT_\br_\ba_\bi_\bt_\bs {\n+275};\n+276\n+_\b2_\b7_\b8template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bT_\br_\ba_\bi_\bt_\bs {\n+279};\n+280\n+281// traits for any fixed double Eigen matrix\n+282template\n+_\b2_\b8_\b3struct _\bt_\br_\ba_\bi_\bt_\bs > :\n+284 _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl<\n+285 Eigen::Matrix, M * N> {\n+286\n+287 typedef _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n+288 typedef Eigen::Matrix Fixed;\n+289\n+292 static void Print(const Fixed& m, const std::string& str = \"\") {\n+293 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Eigen::MatrixXd(m), str);\n+294 }\n+295 static bool Equals(const Fixed& v1, const Fixed& v2, double tol = 1e-8) {\n+296 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(v1, v2, tol);\n+297 }\n+299\n+302 typedef _\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n+303 static Fixed Identity() { return Fixed::Zero();}\n+305\n+308 enum { dimension = M*N};\n+309 typedef Fixed ManifoldType;\n+310 typedef Eigen::Matrix TangentVector;\n+311 typedef Eigen::Matrix Jacobian;\n+312 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn;\n+313\n+314 static TangentVector Local(const Fixed& origin, const Fixed& other,\n+315 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1 = boost::none, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n+316 if (H1) (*H1) = -Jacobian::Identity();\n+317 if (H2) (*H2) = Jacobian::Identity();\n+318 TangentVector result;\n+319 Eigen::Map(result.data()) = other - origin;\n+320 return result;\n+321 }\n+322\n+323 static Fixed Retract(const Fixed& origin, const TangentVector& v,\n+324 _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H1 = boost::none, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H2 = boost::none) {\n+325 if (H1) (*H1) = Jacobian::Identity();\n+326 if (H2) (*H2) = Jacobian::Identity();\n+327 return origin + Eigen::Map(v.data());\n+328 }\n+330\n+333 static TangentVector Logmap(const Fixed& m, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H = boost::none)\n+{\n+334 if (H) *H = Jacobian::Identity();\n+335 TangentVector result;\n+336 Eigen::Map(result.data()) = m;\n+337 return result;\n+338 }\n+339\n+340 static Fixed Expmap(const TangentVector& v, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H = boost::none)\n+{\n+341 Fixed m;\n+342 m.setZero();\n+343 if (H) *H = Jacobian::Identity();\n+344 return m + Eigen::Map(v.data());\n+345 }\n+347};\n+348\n+349\n+350namespace internal {\n+351\n+352// traits for dynamic Eigen matrices\n+353template\n+_\b3_\b5_\b4struct _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bT_\br_\ba_\bi_\bt_\bs {\n+355\n+356 typedef _\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n+357 typedef Eigen::Matrix Dynamic;\n+358\n+361 static void Print(const Dynamic& m, const std::string& str = \"\") {\n+362 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Eigen::MatrixXd(m), str);\n+363 }\n+364 static bool Equals(const Dynamic& v1, const Dynamic& v2,\n+365 double tol = 1e-8) {\n+366 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(v1, v2, tol);\n+367 }\n+369\n+372 typedef _\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n+373 static Dynamic Identity() {\n+374 throw std::runtime_error(\"Identity not defined for dynamic types\");\n+375 }\n+377\n+380 enum { dimension = Eigen::Dynamic };\n+381 typedef Eigen::VectorXd TangentVector;\n+382 typedef Eigen::MatrixXd Jacobian;\n+383 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> ChartJacobian;\n+384 typedef Dynamic ManifoldType;\n+385\n+386 static int GetDimension(const Dynamic& m) {\n+387 return m.rows() * m._\bc_\bo_\bl_\bs();\n+388 }\n+389\n+390 static Jacobian Eye(const Dynamic& m) {\n+391 int dim = GetDimension(m);\n+392 return Eigen::Matrix::Identity(dim, dim);\n+393 }\n+394\n+395 static TangentVector Local(const Dynamic& m, const Dynamic& other, //\n+396 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+397 if (H1) *H1 = -Eye(m);\n+398 if (H2) *H2 = Eye(m);\n+399 TangentVector v(GetDimension(m));\n+400 Eigen::Map(v.data(), m.rows(), m.cols()) = other - m;\n+401 return v;\n+402 }\n+403\n+404 static Dynamic Retract(const Dynamic& m, const TangentVector& v, //\n+405 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+406 if (H1) *H1 = Eye(m);\n+407 if (H2) *H2 = Eye(m);\n+408 return m + Eigen::Map(v.data(), m.rows(), m.cols());\n+409 }\n+411\n+414 static TangentVector Logmap(const Dynamic& m, ChartJacobian H = boost::\n+none) {\n+415 if (H) *H = Eye(m);\n+416 TangentVector result(GetDimension(m));\n+417 Eigen::Map(result.data(), m.cols(), m.rows()) = m;\n+418 return result;\n+419 }\n+420\n+421 static Dynamic Expmap(const TangentVector& /*v*/, ChartJacobian H = boost::\n+none) {\n+422 static_cast(H);\n+423 throw std::runtime_error(\"Expmap not defined for dynamic types\");\n+424 }\n+425\n+426 static Dynamic Inverse(const Dynamic& m, ChartJacobian H = boost::none) {\n+427 if (H) *H = -Eye(m);\n+428 return -m;\n+429 }\n+430\n+431 static Dynamic Compose(const Dynamic& v1, const Dynamic& v2,\n+432 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+433 if (H1) *H1 = Eye(v1);\n+434 if (H2) *H2 = Eye(v1);\n+435 return v1 + v2;\n+436 }\n+437\n+438 static Dynamic Between(const Dynamic& v1, const Dynamic& v2,\n+439 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+440 if (H1) *H1 = -Eye(v1);\n+441 if (H2) *H2 = Eye(v1);\n+442 return v2 - v1;\n+443 }\n+445\n+446};\n+447\n+448} // \\ internal\n+449\n+450// traits for fully dynamic matrix\n+451template\n+_\b4_\b5_\b2struct _\bt_\br_\ba_\bi_\bt_\bs > :\n+453 public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bT_\br_\ba_\bi_\bt_\bs<-1, -1, Options, MaxRows, MaxCols> {\n+454};\n+455\n+456// traits for dynamic column vector\n+457template\n+_\b4_\b5_\b8struct _\bt_\br_\ba_\bi_\bt_\bs > :\n+459 public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bT_\br_\ba_\bi_\bt_\bs<-1, 1, Options, MaxRows, MaxCols> {\n+460};\n+461\n+462// traits for dynamic row vector\n+463template\n+_\b4_\b6_\b4struct _\bt_\br_\ba_\bi_\bt_\bs > :\n+465 public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bT_\br_\ba_\bi_\bt_\bs<1, -1, Options, MaxRows, MaxCols> {\n+466};\n+467\n+469template\n+_\b4_\b7_\b0class _\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be: public _\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n+471public:\n+472\n+473 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by structure_category_tag;\n+474\n+475 BOOST_CONCEPT_USAGE(_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be) {\n+476 BOOST_STATIC_ASSERT_MSG(\n+477 (boost::is_base_of::value),\n+478 \"This type's trait does not assert it as a vector space (or derived)\");\n+479 r = p + q;\n+480 r = -p;\n+481 r = p - q;\n+482 }\n+483\n+484private:\n+485 T p, q, r;\n+486};\n+487\n+488} // namespace gtsam\n+489\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\ba_\bc_\bk\n-Matrix stack(size_t nrMatrices,...)\n-create a matrix by stacking other matrices Given a set of matrices: A1, A2,\n-A3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:397\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt\n-void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre,\n-VISITOR_POST &visitorPost)\n-Traverse a forest depth-first with pre-order and post-order visits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt\n-FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const\n-FOREST &forest)\n-Clone a tree, copy-constructing new nodes (calling boost::make_shared) and\n-setting up child pointers ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt\n-void PrintForest(const FOREST &forest, std::string str, const KeyFormatter\n-&keyFormatter)\n-Print a tree, prefixing each line with str, and formatting keys using\n-keyFormatter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl\n-void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE\n-&visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)\n-Traverse a forest depth-first with pre-order and post-order visits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList is a thin wrapper around std::list that uses the boost\n-fast_pool_allocator instead of the de...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n+bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n+DenseBase< MATRIX > &B, double tol=1e-9)\n+equals with a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+tag to assert a type is a Lie group\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Lie Group Concept.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bc_\bo_\bl_\bs\n+OptionalJacobian< Rows, N > cols(int startCol)\n+Access M*N sub-block if we are allocated, otherwise none TODO(frank): this\n+could work as is below if ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:171\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b,_\b _\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b _\b>\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:188\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br_\b__\bs_\bp_\ba_\bc_\be_\b__\bt_\ba_\bg\n+tag to assert a type is a vector space\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:16\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bI_\bm_\bp_\bl\n+VectorSpaceTraits Implementation for Fixed sizes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:25\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bH_\ba_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bP_\br_\be_\br_\be_\bq_\bs\n+Requirements on type to pass it to Manifold template below.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\bT_\br_\ba_\bi_\bt_\bs\n+A helper that implements the traits interface for classes that define vector\n+spaces To use this for y...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be\n+VectorSpace provides both Testable and VectorSpaceTraits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bT_\br_\ba_\bi_\bt_\bs\n+A helper that implements the traits interface for scalar vector spaces.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bT_\br_\ba_\bi_\bt_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:354\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be\n+Vector Space concept.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:470\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * V\bVe\bec\bct\bto\bor\brS\bSp\bpa\bac\bce\be.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00149.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00149.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastMap.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/serializationTestHelpers.h File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,114 @@\n
\n \n \n \n \n
\n \n-
FastMap.h File Reference
\n+Namespaces |\n+Functions |\n+Variables
\n+
serializationTestHelpers.h File Reference
\n \n
\n \n-

A thin wrapper around std::map that uses boost's fast_pool_allocator. \n-More...

\n-\n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::FastMap< KEY, VALUE >
 FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the default STL allocator. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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+Functions

\n+template<class T >
gtsam::serializationTestHelpers::create ()
 
\n+boost::filesystem::path gtsam::serializationTestHelpers::resetFilesystem (boost::filesystem::path folder="actual")
 
\n+template<class T >
void gtsam::serializationTestHelpers::roundtrip (const T &input, T &output)
 
\n+template<class T >
void gtsam::serializationTestHelpers::roundtripFile (const T &input, T &output)
 
\n+template<class T >
bool gtsam::serializationTestHelpers::equality (const T &input=T())
 
\n+template<class T >
bool gtsam::serializationTestHelpers::equalsObj (const T &input=T())
 
\n+template<class T >
bool gtsam::serializationTestHelpers::equalsDereferenced (const T &input)
 
\n+template<class T >
void gtsam::serializationTestHelpers::roundtripXML (const T &input, T &output)
 
\n+template<class T >
void gtsam::serializationTestHelpers::roundtripXMLFile (const T &input, T &output)
 
\n+template<class T >
bool gtsam::serializationTestHelpers::equalityXML (const T &input=T())
 
\n+template<class T >
bool gtsam::serializationTestHelpers::equalsXML (const T &input=T())
 
\n+template<class T >
bool gtsam::serializationTestHelpers::equalsDereferencedXML (const T &input=T())
 
\n+template<class T >
void gtsam::serializationTestHelpers::roundtripBinary (const T &input, T &output)
 
\n+template<class T >
void gtsam::serializationTestHelpers::roundtripBinaryFile (const T &input, T &output)
 
\n+template<class T >
bool gtsam::serializationTestHelpers::equalityBinary (const T &input=T())
 
\n+template<class T >
bool gtsam::serializationTestHelpers::equalsBinary (const T &input=T())
 
\n+template<class T >
bool gtsam::serializationTestHelpers::equalsDereferencedBinary (const T &input=T())
 
\n+\n+\n+\n

\n+Variables

\n+const bool verbose = false
 
\n

Detailed Description

\n-

A thin wrapper around std::map that uses boost's fast_pool_allocator.

\n-
Author
Richard Roberts
\n-
Date
Oct 17, 2010
\n+
Author
Alex Cunningham
\n+
\n+Richard Roberts
\n+
Date
Feb 7, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,92 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-FastMap.h File Reference\n-A thin wrapper around std::map that uses boost's fast_pool_allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+serializationTestHelpers.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\b _\bK_\bE_\bY_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n-\u00a0 _\bF_\ba_\bs_\bt_\bM_\ba_\bp is a thin wrapper around std::map that uses the boost\n- fast_pool_allocator instead of the default STL allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ T\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:c\bcr\bre\bea\bat\bte\be ()\n+\u00a0\n+boost::filesystem::path\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bre\bes\bse\bet\btF\bFi\bil\ble\bes\bsy\bys\bst\bte\bem\bm\n+ (boost::filesystem::path folder=\"actual\")\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bp (const T\n+ &input, T &output)\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bpF\bFi\bil\ble\be (const\n+ T &input, T &output)\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bli\bit\bty\by (const T\n+ &input=T())\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bls\bsO\bOb\bbj\bj (const T\n+ &input=T())\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bls\bsD\bDe\ber\bre\bef\bfe\ber\bre\ben\bnc\bce\bed\bd\n+ (const T &input)\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bpX\bXM\bML\bL (const T\n+ &input, T &output)\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bpX\bXM\bML\bLF\bFi\bil\ble\be\n+ (const T &input, T &output)\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bli\bit\bty\byX\bXM\bML\bL (const T\n+ &input=T())\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bls\bsX\bXM\bML\bL (const T\n+ &input=T())\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bls\bsD\bDe\ber\bre\bef\bfe\ber\bre\ben\bnc\bce\bed\bdX\bXM\bML\bL\n+ (const T &input=T())\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bpB\bBi\bin\bna\bar\bry\by\n+ (const T &input, T &output)\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:r\bro\bou\bun\bnd\bdt\btr\bri\bip\bpB\bBi\bin\bna\bar\bry\byF\bFi\bil\ble\be\n+ (const T &input, T &output)\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bli\bit\bty\byB\bBi\bin\bna\bar\bry\by (const\n+ T &input=T())\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:e\beq\bqu\bua\bal\bls\bsB\bBi\bin\bna\bar\bry\by (const T\n+ &input=T())\n+\u00a0\n+template\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bnT\bTe\bes\bst\btH\bHe\bel\blp\bpe\ber\brs\bs:\b::\b:\n+ e\beq\bqu\bua\bal\bls\bsD\bDe\ber\bre\bef\bfe\ber\bre\ben\bnc\bce\bed\bdB\bBi\bin\bna\bar\bry\by (const T &input=T())\n+\u00a0\n+V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n+const bool\u00a0 v\bve\ber\brb\bbo\bos\bse\be = false\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A thin wrapper around std::map that uses boost's fast_pool_allocator.\n Author\n+ Alex Cunningham\n Richard Roberts\n Date\n- Oct 17, 2010\n+ Feb 7, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n+ * _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\be_\bs_\bt_\bH_\be_\bl_\bp_\be_\br_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00149_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00149_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastMap.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/serializationTestHelpers.h Source File\n \n \n \n \n \n \n \n@@ -98,91 +98,202 @@\n
No Matches
\n \n \n \n \n \n
\n-
FastMap.h
\n+
serializationTestHelpers.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-
22#include <boost/serialization/nvp.hpp>
\n-
23#include <boost/serialization/map.hpp>
\n-
24#include <map>
\n+
20#pragma once
\n+
21
\n+
22#include <iostream>
\n+
23#include <sstream>
\n+
24#include <string>
\n
25
\n-
26namespace gtsam {
\n+\n
27
\n-
36template<typename KEY, typename VALUE>
\n-
\n-
37class FastMap : public std::map<KEY, VALUE, std::less<KEY>,
\n-
38 typename internal::FastDefaultAllocator<std::pair<const KEY, VALUE> >::type> {
\n-
39
\n-
40public:
\n-
41
\n-
42 typedef std::map<KEY, VALUE, std::less<KEY>,
\n-\n-
44
\n-\n-
47
\n-
49 template<typename INPUTITERATOR>
\n-
50 explicit FastMap(INPUTITERATOR first, INPUTITERATOR last) : Base(first, last) {}
\n+
28#include <boost/serialization/serialization.hpp>
\n+
29#include <boost/filesystem.hpp>
\n+
30
\n+
31
\n+
32// whether to print the serialized text to stdout
\n+
33const bool verbose = false;
\n+
34
\n+
35namespace gtsam {
\n+
36namespace serializationTestHelpers {
\n+
37
\n+
38// templated default object creation so we only need to declare one friend (if applicable)
\n+
39template<class T>
\n+
40T create() {
\n+
41 return T();
\n+
42}
\n+
43
\n+
44// Creates or empties a folder in the build folder and returns the relative path
\n+
45inline boost::filesystem::path resetFilesystem(
\n+
46 boost::filesystem::path folder = "actual") {
\n+
47 boost::filesystem::remove_all(folder);
\n+
48 boost::filesystem::create_directory(folder);
\n+
49 return folder;
\n+
50}
\n
51
\n-
53 FastMap(const FastMap<KEY,VALUE>& x) : Base(x) {}
\n-
54
\n-
56 FastMap(const Base& x) : Base(x) {}
\n-
57
\n-
\n-
59 operator std::map<KEY,VALUE>() const {
\n-
60 return std::map<KEY,VALUE>(this->begin(), this->end());
\n-
61 }
\n-
\n-
62
\n-
64 bool insert2(const KEY& key, const VALUE& val) { return Base::insert(std::make_pair(key, val)).second; }
\n-
65
\n-
67 bool exists(const KEY& e) const { return this->find(e) != this->end(); }
\n-
68
\n-
69private:
\n-\n-
72 template<class ARCHIVE>
\n-
73 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
74 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
75 }
\n-
76};
\n-
\n-
77
\n-
78}
\n-
An easy way to control which allocator is used for Fast* collections.
\n+
52// Templated round-trip serialization
\n+
53template<class T>
\n+
54void roundtrip(const T& input, T& output) {
\n+
55 std::string serialized = serialize(input);
\n+
56 if (verbose) std::cout << serialized << std::endl << std::endl;
\n+
57 deserialize(serialized, output);
\n+
58}
\n+
59
\n+
60// Templated round-trip serialization using a file
\n+
61template<class T>
\n+
62void roundtripFile(const T& input, T& output) {
\n+
63 boost::filesystem::path path = resetFilesystem()/"graph.dat";
\n+
64 serializeToFile(input, path.string());
\n+
65 deserializeFromFile(path.string(), output);
\n+
66}
\n+
67
\n+
68// This version requires equality operator and uses string and file round-trips
\n+
69template<class T>
\n+
70bool equality(const T& input = T()) {
\n+
71 T output = create<T>(), outputf = create<T>();
\n+
72 roundtrip<T>(input,output);
\n+
73 roundtripFile<T>(input,outputf);
\n+
74 return (input==output) && (input==outputf);
\n+
75}
\n+
76
\n+
77// This version requires Testable
\n+
78template<class T>
\n+
79bool equalsObj(const T& input = T()) {
\n+
80 T output = create<T>();
\n+
81 roundtrip<T>(input,output);
\n+
82 return assert_equal(input, output);
\n+
83}
\n+
84
\n+
85// De-referenced version for pointers, requires equals method
\n+
86template<class T>
\n+
87bool equalsDereferenced(const T& input) {
\n+
88 T output = create<T>();
\n+
89 roundtrip<T>(input,output);
\n+
90 return input->equals(*output);
\n+
91}
\n+
92
\n+
93// Templated round-trip serialization using XML
\n+
94template<class T>
\n+
95void roundtripXML(const T& input, T& output) {
\n+
96 std::string serialized = serializeXML<T>(input);
\n+
97 if (verbose) std::cout << serialized << std::endl << std::endl;
\n+
98 deserializeXML(serialized, output);
\n+
99}
\n+
100
\n+
101// Templated round-trip serialization using XML File
\n+
102template<class T>
\n+
103void roundtripXMLFile(const T& input, T& output) {
\n+
104 boost::filesystem::path path = resetFilesystem()/"graph.xml";
\n+
105 serializeToXMLFile(input, path.string());
\n+
106 deserializeFromXMLFile(path.string(), output);
\n+
107}
\n+
108
\n+
109// This version requires equality operator
\n+
110template<class T>
\n+
111bool equalityXML(const T& input = T()) {
\n+
112 T output = create<T>(), outputf = create<T>();
\n+
113 roundtripXML<T>(input,output);
\n+
114 roundtripXMLFile<T>(input,outputf);
\n+
115 return (input==output) && (input==outputf);
\n+
116}
\n+
117
\n+
118// This version requires Testable
\n+
119template<class T>
\n+
120bool equalsXML(const T& input = T()) {
\n+
121 T output = create<T>();
\n+
122 roundtripXML<T>(input,output);
\n+
123 return assert_equal(input, output);
\n+
124}
\n+
125
\n+
126// This version is for pointers, requires equals method
\n+
127template<class T>
\n+
128bool equalsDereferencedXML(const T& input = T()) {
\n+
129 T output = create<T>();
\n+
130 roundtripXML<T>(input,output);
\n+
131 return input->equals(*output);
\n+
132}
\n+
133
\n+
134// Templated round-trip serialization using XML
\n+
135template<class T>
\n+
136void roundtripBinary(const T& input, T& output) {
\n+
137 std::string serialized = serializeBinary<T>(input);
\n+
138 if (verbose) std::cout << serialized << std::endl << std::endl;
\n+
139 deserializeBinary(serialized, output);
\n+
140}
\n+
141
\n+
142// Templated round-trip serialization using Binary file
\n+
143template<class T>
\n+
144void roundtripBinaryFile(const T& input, T& output) {
\n+
145 boost::filesystem::path path = resetFilesystem()/"graph.bin";
\n+
146 serializeToBinaryFile(input, path.string());
\n+
147 deserializeFromBinaryFile(path.string(), output);
\n+
148}
\n+
149
\n+
150// This version requires equality operator
\n+
151template<class T>
\n+
152bool equalityBinary(const T& input = T()) {
\n+
153 T output = create<T>(), outputf = create<T>();
\n+
154 roundtripBinary<T>(input,output);
\n+
155 roundtripBinaryFile<T>(input,outputf);
\n+
156 return (input==output) && (input==outputf);
\n+
157}
\n+
158
\n+
159// This version requires Testable
\n+
160template<class T>
\n+
161bool equalsBinary(const T& input = T()) {
\n+
162 T output = create<T>();
\n+
163 roundtripBinary<T>(input,output);
\n+
164 return assert_equal(input, output);
\n+
165}
\n+
166
\n+
167// This version is for pointers, requires equals method
\n+
168template<class T>
\n+
169bool equalsDereferencedBinary(const T& input = T()) {
\n+
170 T output = create<T>();
\n+
171 roundtripBinary<T>(input,output);
\n+
172 return input->equals(*output);
\n+
173}
\n+
174
\n+
175} // \\namespace serializationTestHelpers
\n+
176} // \\namespace gtsam
\n+
Convenience functions for serializing data structures via boost.serialization.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Default allocator for list, map, and set types.
Definition FastDefaultAllocator.h:50
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-
FastMap(const Base &x)
Copy constructor from the base map class.
Definition FastMap.h:56
\n-
FastMap(INPUTITERATOR first, INPUTITERATOR last)
Constructor from a range, passes through to base class.
Definition FastMap.h:50
\n-
bool insert2(const KEY &key, const VALUE &val)
Handy 'insert' function for Matlab wrapper.
Definition FastMap.h:64
\n-
FastMap(const FastMap< KEY, VALUE > &x)
Copy constructor from another FastMap.
Definition FastMap.h:53
\n-
FastMap()
Default constructor.
Definition FastMap.h:46
\n-
bool exists(const KEY &e) const
Handy 'exists' function.
Definition FastMap.h:67
\n-
friend class boost::serialization::access
Serialization function.
Definition FastMap.h:71
\n+
bool deserializeFromXMLFile(const std::string &filename, T &output, const std::string &name="data")
deserializes from an XML file
Definition serialization.h:174
\n+
std::string serialize(const T &input)
serializes to a string
Definition serialization.h:113
\n+
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n+
void deserializeBinary(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in binary
Definition serialization.h:266
\n+
void deserializeXML(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in XML
Definition serialization.h:192
\n+
bool serializeToXMLFile(const T &input, const std::string &filename, const std::string &name="data")
serializes to an XML file
Definition serialization.h:163
\n+
bool serializeToFile(const T &input, const std::string &filename)
serializes to a file
Definition serialization.h:93
\n+
void deserialize(const std::string &serialized, T &output)
deserializes from a string
Definition serialization.h:119
\n+
bool serializeToBinaryFile(const T &input, const std::string &filename, const std::string &name="data")
serializes to a binary file
Definition serialization.h:237
\n+
bool deserializeFromFile(const std::string &filename, T &output)
deserializes from a file
Definition serialization.h:103
\n+
bool deserializeFromBinaryFile(const std::string &filename, T &output, const std::string &name="data")
deserializes from a binary file
Definition serialization.h:248
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,112 +1,239 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FastMap.h\n+serializationTestHelpers.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh>\n-22#include \n-23#include \n-24#include \n+20#pragma once\n+21\n+22#include \n+23#include \n+24#include \n 25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n 27\n-36template\n-_\b3_\b7class _\bF_\ba_\bs_\bt_\bM_\ba_\bp : public std::map,\n-38 typename internal::FastDefaultAllocator >::type>\n-{\n-39\n-40public:\n-41\n-42 typedef std::map,\n-43 typename _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bp_\ba_\bi_\br_\b<_\bc_\bo_\bn_\bs_\bt_\b _\bK_\bE_\bY_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b> >::type\n-> Base;\n-44\n-_\b4_\b6 _\bF_\ba_\bs_\bt_\bM_\ba_\bp() {}\n-47\n-49 template\n-_\b5_\b0 explicit _\bF_\ba_\bs_\bt_\bM_\ba_\bp(INPUTITERATOR first, INPUTITERATOR last) : Base(first,\n-last) {}\n+28#include \n+29#include \n+30\n+31\n+32// whether to print the serialized text to stdout\n+33const bool verbose = false;\n+34\n+35namespace _\bg_\bt_\bs_\ba_\bm {\n+36namespace serializationTestHelpers {\n+37\n+38// templated default object creation so we only need to declare one friend\n+(if applicable)\n+39template\n+40T create() {\n+41 return T();\n+42}\n+43\n+44// Creates or empties a folder in the build folder and returns the relative\n+path\n+45inline boost::filesystem::path resetFilesystem(\n+46 boost::filesystem::path folder = \"actual\") {\n+47 boost::filesystem::remove_all(folder);\n+48 boost::filesystem::create_directory(folder);\n+49 return folder;\n+50}\n 51\n-_\b5_\b3 _\bF_\ba_\bs_\bt_\bM_\ba_\bp(const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b,_\bV_\bA_\bL_\bU_\bE_\b>& x) : Base(x) {}\n-54\n-_\b5_\b6 _\bF_\ba_\bs_\bt_\bM_\ba_\bp(const Base& x) : Base(x) {}\n-57\n-_\b5_\b9 operator std::map() const {\n-60 return std::map(this->begin(), this->end());\n-61 }\n-62\n-_\b6_\b4 bool _\bi_\bn_\bs_\be_\br_\bt_\b2(const KEY& key, const VALUE& val) { return Base::insert(std::\n-make_pair(key, val)).second; }\n-65\n-_\b6_\b7 bool _\be_\bx_\bi_\bs_\bt_\bs(const KEY& e) const { return this->find(e) != this->end(); }\n-68\n-69private:\n-_\b7_\b1 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-72 template\n-73 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-74 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n-75 }\n-76};\n-77\n-78}\n-_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n-An easy way to control which allocator is used for Fast* collections.\n+52// Templated round-trip serialization\n+53template\n+54void roundtrip(const T& input, T& output) {\n+55 std::string serialized = _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(input);\n+56 if (verbose) std::cout << serialized << std::endl << std::endl;\n+57 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(serialized, output);\n+58}\n+59\n+60// Templated round-trip serialization using a file\n+61template\n+62void roundtripFile(const T& input, T& output) {\n+63 boost::filesystem::path path = resetFilesystem()/\"graph.dat\";\n+64 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bF_\bi_\bl_\be(input, path.string());\n+65 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bF_\bi_\bl_\be(path.string(), output);\n+66}\n+67\n+68// This version requires equality operator and uses string and file round-\n+trips\n+69template\n+70bool equality(const T& input = T()) {\n+71 T output = create(), outputf = create();\n+72 roundtrip(input,output);\n+73 roundtripFile(input,outputf);\n+74 return (input==output) && (input==outputf);\n+75}\n+76\n+77// This version requires Testable\n+78template\n+79bool equalsObj(const T& input = T()) {\n+80 T output = create();\n+81 roundtrip(input,output);\n+82 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(input, output);\n+83}\n+84\n+85// De-referenced version for pointers, requires equals method\n+86template\n+87bool equalsDereferenced(const T& input) {\n+88 T output = create();\n+89 roundtrip(input,output);\n+90 return input->equals(*output);\n+91}\n+92\n+93// Templated round-trip serialization using XML\n+94template\n+95void roundtripXML(const T& input, T& output) {\n+96 std::string serialized = serializeXML(input);\n+97 if (verbose) std::cout << serialized << std::endl << std::endl;\n+98 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL(serialized, output);\n+99}\n+100\n+101// Templated round-trip serialization using XML File\n+102template\n+103void roundtripXMLFile(const T& input, T& output) {\n+104 boost::filesystem::path path = resetFilesystem()/\"graph.xml\";\n+105 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bF_\bi_\bl_\be(input, path.string());\n+106 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bF_\bi_\bl_\be(path.string(), output);\n+107}\n+108\n+109// This version requires equality operator\n+110template\n+111bool equalityXML(const T& input = T()) {\n+112 T output = create(), outputf = create();\n+113 roundtripXML(input,output);\n+114 roundtripXMLFile(input,outputf);\n+115 return (input==output) && (input==outputf);\n+116}\n+117\n+118// This version requires Testable\n+119template\n+120bool equalsXML(const T& input = T()) {\n+121 T output = create();\n+122 roundtripXML(input,output);\n+123 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(input, output);\n+124}\n+125\n+126// This version is for pointers, requires equals method\n+127template\n+128bool equalsDereferencedXML(const T& input = T()) {\n+129 T output = create();\n+130 roundtripXML(input,output);\n+131 return input->equals(*output);\n+132}\n+133\n+134// Templated round-trip serialization using XML\n+135template\n+136void roundtripBinary(const T& input, T& output) {\n+137 std::string serialized = serializeBinary(input);\n+138 if (verbose) std::cout << serialized << std::endl << std::endl;\n+139 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by(serialized, output);\n+140}\n+141\n+142// Templated round-trip serialization using Binary file\n+143template\n+144void roundtripBinaryFile(const T& input, T& output) {\n+145 boost::filesystem::path path = resetFilesystem()/\"graph.bin\";\n+146 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be(input, path.string());\n+147 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be(path.string(), output);\n+148}\n+149\n+150// This version requires equality operator\n+151template\n+152bool equalityBinary(const T& input = T()) {\n+153 T output = create(), outputf = create();\n+154 roundtripBinary(input,output);\n+155 roundtripBinaryFile(input,outputf);\n+156 return (input==output) && (input==outputf);\n+157}\n+158\n+159// This version requires Testable\n+160template\n+161bool equalsBinary(const T& input = T()) {\n+162 T output = create();\n+163 roundtripBinary(input,output);\n+164 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(input, output);\n+165}\n+166\n+167// This version is for pointers, requires equals method\n+168template\n+169bool equalsDereferencedBinary(const T& input = T()) {\n+170 T output = create();\n+171 roundtripBinary(input,output);\n+172 return input->equals(*output);\n+173}\n+174\n+175} // \\namespace serializationTestHelpers\n+176} // \\namespace gtsam\n+_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+Convenience functions for serializing data structures via boost.serialization.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-Default allocator for list, map, and set types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastDefaultAllocator.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap(const Base &x)\n-Copy constructor from the base map class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap(INPUTITERATOR first, INPUTITERATOR last)\n-Constructor from a range, passes through to base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b2\n-bool insert2(const KEY &key, const VALUE &val)\n-Handy 'insert' function for Matlab wrapper.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap(const FastMap< KEY, VALUE > &x)\n-Copy constructor from another FastMap.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(const KEY &e) const\n-Handy 'exists' function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bF_\bi_\bl_\be\n+bool deserializeFromXMLFile(const std::string &filename, T &output, const std::\n+string &name=\"data\")\n+deserializes from an XML file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n+std::string serialize(const T &input)\n+serializes to a string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n+bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n+equals with an tolerance, prints out message if unequal\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by\n+void deserializeBinary(const std::string &serialized, T &output, const std::\n+string &name=\"data\")\n+deserializes from a string in binary\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:266\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL\n+void deserializeXML(const std::string &serialized, T &output, const std::string\n+&name=\"data\")\n+deserializes from a string in XML\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bF_\bi_\bl_\be\n+bool serializeToXMLFile(const T &input, const std::string &filename, const\n+std::string &name=\"data\")\n+serializes to an XML file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bF_\bi_\bl_\be\n+bool serializeToFile(const T &input, const std::string &filename)\n+serializes to a file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n+void deserialize(const std::string &serialized, T &output)\n+deserializes from a string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:119\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be\n+bool serializeToBinaryFile(const T &input, const std::string &filename, const\n+std::string &name=\"data\")\n+serializes to a binary file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:237\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bF_\bi_\bl_\be\n+bool deserializeFromFile(const std::string &filename, T &output)\n+deserializes from a file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be\n+bool deserializeFromBinaryFile(const std::string &filename, T &output, const\n+std::string &name=\"data\")\n+deserializes from a binary file\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:248\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n+ * _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\be_\bs_\bt_\bH_\be_\bl_\bp_\be_\br_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00152.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00152.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/ParameterMatrix.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/FitBasis.h File Reference\n \n \n \n \n \n \n \n@@ -96,53 +96,55 @@\n \n \n \n
\n \n-
ParameterMatrix.h File Reference
\n+Typedefs
\n+
FitBasis.h File Reference
\n \n
\n \n-

Define ParameterMatrix class which is used to store values at interpolation points. \n+

Fit a Basis using least-squares. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::ParameterMatrix< M >
 A matrix abstraction of MxN values at the Basis points. More...
 
struct  gtsam::traits< ParameterMatrix< M > >
class  gtsam::FitBasis< Basis >
 Class that does regression via least squares Example usage: size_t N = 3; auto fit = FitBasis<Chebyshev2>(data_points, noise_model, N); Vector coefficients = fit.parameters();. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n

\n-Functions

\n-template<int M>
std::ostream & gtsam::operator<< (std::ostream &os, const ParameterMatrix< M > &parameterMatrix)
 

\n+Typedefs

\n+using gtsam::Sequence = std::map< double, double >
 Our sequence representation is a map of {x: y} values where y = f(x)
 
\n+using gtsam::Sample = std::pair< double, double >
 A sample is a key-value pair from a sequence.
 
\n

Detailed Description

\n-

Define ParameterMatrix class which is used to store values at interpolation points.

\n+

Fit a Basis using least-squares.

\n+
Date
July 4, 2020
\n
Author
Varun Agrawal, Frank Dellaert
\n-
Date
September 21, 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,36 +1,36 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-ParameterMatrix.h File Reference\n-Define ParameterMatrix class which is used to store values at interpolation\n-points. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+FitBasis.h File Reference\n+Fit a Basis using least-squares. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bM_\b _\b>\n-\u00a0 A matrix abstraction of MxN values at the _\bB_\ba_\bs_\bi_\bs points. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bM_\b _\b>_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bB_\ba_\bs_\bi_\bs_\b _\b>\n+ Class that does regression via least squares Example usage: size_t N =\n+\u00a0 3; auto fit = FitBasis(data_points, noise_model, N); Vector\n+ coefficients = fit.parameters();. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx< M >\n- ¶meterMatrix)\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSe\beq\bqu\bue\ben\bnc\bce\be = std::map< double, double >\n+\u00a0 Our sequence representation is a map of {x: y} values where y = f(x)\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSa\bam\bmp\bpl\ble\be = std::pair< double, double >\n+\u00a0 A sample is a key-value pair from a sequence.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Define ParameterMatrix class which is used to store values at interpolation\n-points.\n+Fit a Basis using least-squares.\n+ Date\n+ July 4, 2020\n Author\n Varun Agrawal, Frank Dellaert\n- Date\n- September 21, 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+ * _\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00152.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00152.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,5 @@\n var a00152 = [\n- [\"gtsam::ParameterMatrix< M >\", \"a02752.html\", \"a02752\"],\n- [\"gtsam::traits< ParameterMatrix< M > >\", \"a02756.html\", null]\n+ [\"gtsam::FitBasis< Basis >\", \"a02744.html\", \"a02744\"],\n+ [\"Sample\", \"a00152.html#a9920fe883a2f506440aca7c1a2bd1a00\", null],\n+ [\"Sequence\", \"a00152.html#a24ec5d6ec6b211d0cbaf645c11c198de\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00152_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00152_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/ParameterMatrix.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/FitBasis.h Source File\n \n \n \n \n \n \n \n@@ -98,208 +98,119 @@\n
No Matches
\n \n \n \n \n \n
\n-
ParameterMatrix.h
\n+
FitBasis.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <gtsam/base/Matrix.h>
\n-
23#include <gtsam/base/Testable.h>
\n-
24#include <gtsam/base/VectorSpace.h>
\n-
25
\n-
26#include <iostream>
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
37template <int M>
\n-
\n-\n-
39 using MatrixType = Eigen::Matrix<double, M, -1>;
\n-
40
\n-
41 private:
\n-
42 MatrixType matrix_;
\n-
43
\n-
44 public:
\n-
45 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n-
46
\n-
47 enum { dimension = Eigen::Dynamic };
\n-
48
\n-
53 ParameterMatrix(const size_t N) : matrix_(M, N) { matrix_.setZero(); }
\n-
54
\n-
59 ParameterMatrix(const MatrixType& matrix) : matrix_(matrix) {}
\n-
60
\n-
62 size_t rows() const { return matrix_.rows(); }
\n-
63
\n-
65 size_t cols() const { return matrix_.cols(); }
\n-
66
\n-
68 MatrixType matrix() const { return matrix_; }
\n-
69
\n-
71 Eigen::Matrix<double, -1, M> transpose() const { return matrix_.transpose(); }
\n-
72
\n-
\n-
77 Eigen::Matrix<double, 1, -1> row(size_t index) const {
\n-
78 return matrix_.row(index);
\n-
79 }
\n-
\n-
80
\n-
\n-
85 auto row(size_t index) -> Eigen::Block<MatrixType, 1, -1, false> {
\n-
86 return matrix_.row(index);
\n-
87 }
\n-
\n-
88
\n-
\n-
93 Eigen::Matrix<double, M, 1> col(size_t index) const {
\n-
94 return matrix_.col(index);
\n-
95 }
\n-
\n-
96
\n-
\n-
101 auto col(size_t index) -> Eigen::Block<MatrixType, M, 1, true> {
\n-
102 return matrix_.col(index);
\n-
103 }
\n-
\n-
104
\n-
108 void setZero() { matrix_.setZero(); }
\n-
109
\n-
\n-\n-
115 return ParameterMatrix<M>(matrix_ + other.matrix());
\n-
116 }
\n-
\n-
117
\n-
\n-\n-
123 const Eigen::Matrix<double, -1, 1>& other) const {
\n-
124 // This form avoids a deep copy and instead typecasts `other`.
\n-
125 Eigen::Map<const MatrixType> other_(other.data(), M, cols());
\n-
126 return ParameterMatrix<M>(matrix_ + other_);
\n-
127 }
\n-
\n-
128
\n-
\n-\n-
134 return ParameterMatrix<M>(matrix_ - other.matrix());
\n-
135 }
\n-
\n-
136
\n-
\n-\n-
142 const Eigen::Matrix<double, -1, 1>& other) const {
\n-
143 Eigen::Map<const MatrixType> other_(other.data(), M, cols());
\n-
144 return ParameterMatrix<M>(matrix_ - other_);
\n-
145 }
\n-
\n-
146
\n-
\n-
152 MatrixType operator*(const Eigen::Matrix<double, -1, -1>& other) const {
\n-
153 return matrix_ * other;
\n-
154 }
\n-
\n-
155
\n-
158
\n-
\n-
163 void print(const std::string& s = "") const {
\n-
164 std::cout << (s == "" ? s : s + " ") << matrix_ << std::endl;
\n-
165 }
\n-
\n-
166
\n-
\n-
172 bool equals(const ParameterMatrix<M>& other, double tol = 1e-8) const {
\n-
173 return gtsam::equal_with_abs_tol(matrix_, other.matrix(), tol);
\n-
174 }
\n-
\n-
175
\n-
177 inline size_t dim() const { return matrix_.size(); }
\n-
178
\n-
\n-
180 inline Vector vector() const {
\n-
181 using RowMajor = Eigen::Matrix<double, -1, -1, Eigen::RowMajor>;
\n-
182 Vector result(matrix_.size());
\n-
183 Eigen::Map<RowMajor>(&result(0), rows(), cols()) = matrix_;
\n-
184 return result;
\n-
185 }
\n-
\n-
186
\n-
\n-
192 inline static ParameterMatrix Identity() {
\n-
193 // throw std::runtime_error(
\n-
194 // "ParameterMatrix::Identity(): Don't use this function");
\n-
195 return ParameterMatrix(0);
\n-
196 }
\n-
\n-
197
\n-
199};
\n-
\n-
200
\n-
201// traits for ParameterMatrix
\n-
202template <int M>
\n-
\n-\n-
204 : public internal::VectorSpace<ParameterMatrix<M>> {};
\n-
\n-
205
\n-
206/* ************************************************************************* */
\n-
207// Stream operator that takes a ParameterMatrix. Used for printing.
\n-
208template <int M>
\n-
209inline std::ostream& operator<<(std::ostream& os,
\n-
210 const ParameterMatrix<M>& parameterMatrix) {
\n-
211 os << parameterMatrix.matrix();
\n-
212 return os;
\n-
213}
\n-
214
\n-
215} // namespace gtsam
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Concept check for values that can be used in unit tests.
\n+
19/*
\n+
20 * Concept needed for LS. Parameters = Coefficients | Values
\n+
21 * - Parameters, Jacobian
\n+
22 * - PredictFactor(double x)(Parameters p, OptionalJacobian<1,N> H)
\n+
23 */
\n+
24
\n+
25#pragma once
\n+
26
\n+
27#include <gtsam/basis/Basis.h>
\n+\n+\n+\n+\n+
32
\n+
33namespace gtsam {
\n+
34
\n+
36using Sequence = std::map<double, double>;
\n+
38using Sample = std::pair<double, double>;
\n+
39
\n+
51template <class Basis>
\n+
\n+
52class FitBasis {
\n+
53 public:
\n+
54 using Parameters = typename Basis::Parameters;
\n+
55
\n+
56 private:
\n+
57 Parameters parameters_;
\n+
58
\n+
59 public:
\n+
\n+\n+
62 const SharedNoiseModel& model,
\n+
63 size_t N) {
\n+\n+
65 for (const Sample sample : sequence) {
\n+
66 graph.emplace_shared<EvaluationFactor<Basis>>(0, sample.second, model, N,
\n+
67 sample.first);
\n+
68 }
\n+
69 return graph;
\n+
70 }
\n+
\n+
71
\n+
\n+\n+
74 const Sequence& sequence, const SharedNoiseModel& model, size_t N) {
\n+
75 NonlinearFactorGraph graph = NonlinearGraph(sequence, model, N);
\n+
76 Values values;
\n+
77 values.insert<Parameters>(0, Parameters::Zero(N));
\n+
78 GaussianFactorGraph::shared_ptr gfg = graph.linearize(values);
\n+
79 return gfg;
\n+
80 }
\n+
\n+
81
\n+
\n+
89 FitBasis(const Sequence& sequence, const SharedNoiseModel& model, size_t N) {
\n+
90 GaussianFactorGraph::shared_ptr gfg = LinearGraph(sequence, model, N);
\n+
91 VectorValues solution = gfg->optimize();
\n+
92 parameters_ = solution.at(0);
\n+
93 }
\n+
\n+
94
\n+
96 Parameters parameters() const { return parameters_; }
\n+
97};
\n+
\n+
98
\n+
99} // namespace gtsam
\n+
Factor definitions for various Basis functors.
\n+
Compute an interpolating basis.
\n+
Linear Factor Graph where all factors are Gaussians.
\n+
Factor Graph Values.
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
VectorSpace provides both Testable and VectorSpaceTraits.
Definition VectorSpace.h:207
\n-
A matrix abstraction of MxN values at the Basis points.
Definition ParameterMatrix.h:38
\n-
MatrixType operator*(const Eigen::Matrix< double, -1, -1 > &other) const
Multiply ParameterMatrix with an Eigen matrix.
Definition ParameterMatrix.h:152
\n-
ParameterMatrix< M > operator-(const Eigen::Matrix< double, -1, 1 > &other) const
Subtract a MxN-sized vector from the ParameterMatrix.
Definition ParameterMatrix.h:141
\n-
Eigen::Matrix< double, 1, -1 > row(size_t index) const
Get the matrix row specified by index.
Definition ParameterMatrix.h:77
\n-
ParameterMatrix(const size_t N)
Create ParameterMatrix using the number of basis points.
Definition ParameterMatrix.h:53
\n-
static ParameterMatrix Identity()
Identity function to satisfy VectorSpace traits.
Definition ParameterMatrix.h:192
\n-
void setZero()
Set all matrix coefficients to zero.
Definition ParameterMatrix.h:108
\n-
MatrixType matrix() const
Get the underlying matrix.
Definition ParameterMatrix.h:68
\n-
ParameterMatrix(const MatrixType &matrix)
Create ParameterMatrix from an MxN Eigen Matrix.
Definition ParameterMatrix.h:59
\n-
Eigen::Matrix< double, M, 1 > col(size_t index) const
Get the matrix column specified by index.
Definition ParameterMatrix.h:93
\n-
Vector vector() const
Convert to vector form, is done row-wise.
Definition ParameterMatrix.h:180
\n-
bool equals(const ParameterMatrix< M > &other, double tol=1e-8) const
Check for equality up to absolute tolerance.
Definition ParameterMatrix.h:172
\n-
ParameterMatrix< M > operator+(const ParameterMatrix< M > &other) const
Add a ParameterMatrix to another.
Definition ParameterMatrix.h:114
\n-
size_t rows() const
Get the number of rows.
Definition ParameterMatrix.h:62
\n-
auto row(size_t index) -> Eigen::Block< MatrixType, 1, -1, false >
Set the matrix row specified by index.
Definition ParameterMatrix.h:85
\n-
void print(const std::string &s="") const
Print the ParameterMatrix.
Definition ParameterMatrix.h:163
\n-
auto col(size_t index) -> Eigen::Block< MatrixType, M, 1, true >
Set the matrix column specified by index.
Definition ParameterMatrix.h:101
\n-
ParameterMatrix< M > operator+(const Eigen::Matrix< double, -1, 1 > &other) const
Add a MxN-sized vector to the ParameterMatrix.
Definition ParameterMatrix.h:122
\n-
ParameterMatrix< M > operator-(const ParameterMatrix< M > &other) const
Subtract a ParameterMatrix from another.
Definition ParameterMatrix.h:133
\n-
size_t dim() const
Returns dimensionality of the tangent space.
Definition ParameterMatrix.h:177
\n-
size_t cols() const
Get the number of columns.
Definition ParameterMatrix.h:65
\n-
Eigen::Matrix< double, -1, M > transpose() const
Return the tranpose of the underlying matrix.
Definition ParameterMatrix.h:71
\n+
std::map< double, double > Sequence
Our sequence representation is a map of {x: y} values where y = f(x)
Definition FitBasis.h:36
\n+
std::pair< double, double > Sample
A sample is a key-value pair from a sequence.
Definition FitBasis.h:38
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
Factor for enforcing the scalar value of the polynomial BASIS representation at x is the same as the ...
Definition BasisFactors.h:39
\n+
Class that does regression via least squares Example usage: size_t N = 3; auto fit = FitBasis<Chebysh...
Definition FitBasis.h:52
\n+
static NonlinearFactorGraph NonlinearGraph(const Sequence &sequence, const SharedNoiseModel &model, size_t N)
Create nonlinear FG from Sequence.
Definition FitBasis.h:61
\n+
Parameters parameters() const
Return Fourier coefficients.
Definition FitBasis.h:96
\n+
FitBasis(const Sequence &sequence, const SharedNoiseModel &model, size_t N)
Construct a new FitBasis object.
Definition FitBasis.h:89
\n+
static GaussianFactorGraph::shared_ptr LinearGraph(const Sequence &sequence, const SharedNoiseModel &model, size_t N)
Create linear FG from Sequence.
Definition FitBasis.h:73
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
Vector & at(Key j)
Read/write access to the vector value with key j, throws std::out_of_range if j does not exist,...
Definition VectorValues.h:139
\n+
Definition NonlinearFactorGraph.h:55
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
void insert(Key j, const Value &val)
Add a variable with the given j, throws KeyAlreadyExists<J> if j is already present.
Definition Values.cpp:157
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,252 +1,157 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ParameterMatrix.h\n+FitBasis.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-24#include \n-25\n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-37template \n-_\b3_\b8class _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx {\n-39 using MatrixType = Eigen::Matrix;\n-40\n-41 private:\n-42 MatrixType matrix_;\n-43\n-44 public:\n-45 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n-46\n-47 enum { dimension = Eigen::Dynamic };\n-48\n-_\b5_\b3 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx(const size_t N) : matrix_(M, N) { matrix_.setZero(); }\n-54\n-_\b5_\b9 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx(const MatrixType& _\bm_\ba_\bt_\br_\bi_\bx) : matrix_(_\bm_\ba_\bt_\br_\bi_\bx) {}\n-60\n-_\b6_\b2 size_t _\br_\bo_\bw_\bs() const { return matrix_.rows(); }\n-63\n-_\b6_\b5 size_t _\bc_\bo_\bl_\bs() const { return matrix_.cols(); }\n-66\n-_\b6_\b8 MatrixType _\bm_\ba_\bt_\br_\bi_\bx() const { return matrix_; }\n-69\n-_\b7_\b1 Eigen::Matrix _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be() const { return matrix_.transpose();\n-}\n-72\n-_\b7_\b7 Eigen::Matrix _\br_\bo_\bw(size_t index) const {\n-78 return matrix_.row(index);\n-79 }\n-80\n-_\b8_\b5 auto _\br_\bo_\bw(size_t index) -> Eigen::Block {\n-86 return matrix_.row(index);\n-87 }\n-88\n-_\b9_\b3 Eigen::Matrix _\bc_\bo_\bl(size_t index) const {\n-94 return matrix_.col(index);\n-95 }\n-96\n-_\b1_\b0_\b1 auto _\bc_\bo_\bl(size_t index) -> Eigen::Block {\n-102 return matrix_.col(index);\n-103 }\n-104\n-_\b1_\b0_\b8 void _\bs_\be_\bt_\bZ_\be_\br_\bo() { matrix_.setZero(); }\n-109\n-_\b1_\b1_\b4 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& other) const {\n-115 return _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>(matrix_ + other._\bm_\ba_\bt_\br_\bi_\bx());\n-116 }\n-117\n-_\b1_\b2_\b2 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(\n-123 const Eigen::Matrix& other) const {\n-124 // This form avoids a deep copy and instead typecasts `other`.\n-125 Eigen::Map other_(other.data(), M, _\bc_\bo_\bl_\bs());\n-126 return _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>(matrix_ + other_);\n-127 }\n-128\n-_\b1_\b3_\b3 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& other) const {\n-134 return _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>(matrix_ - other._\bm_\ba_\bt_\br_\bi_\bx());\n-135 }\n-136\n-_\b1_\b4_\b1 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(\n-142 const Eigen::Matrix& other) const {\n-143 Eigen::Map other_(other.data(), M, _\bc_\bo_\bl_\bs());\n-144 return _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>(matrix_ - other_);\n-145 }\n-146\n-_\b1_\b5_\b2 MatrixType _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const Eigen::Matrix& other) const {\n-153 return matrix_ * other;\n-154 }\n-155\n-158\n-_\b1_\b6_\b3 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const {\n-164 std::cout << (s == \"\" ? s : s + \" \") << matrix_ << std::endl;\n-165 }\n-166\n-_\b1_\b7_\b2 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& other, double tol = 1e-8) const {\n-173 return _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(matrix_, other._\bm_\ba_\bt_\br_\bi_\bx(), tol);\n-174 }\n-175\n-_\b1_\b7_\b7 inline size_t _\bd_\bi_\bm() const { return matrix_.size(); }\n-178\n-_\b1_\b8_\b0 inline Vector _\bv_\be_\bc_\bt_\bo_\br() const {\n-181 using RowMajor = Eigen::Matrix;\n-182 Vector result(matrix_.size());\n-183 Eigen::Map(&result(0), _\br_\bo_\bw_\bs(), _\bc_\bo_\bl_\bs()) = matrix_;\n-184 return result;\n-185 }\n-186\n-_\b1_\b9_\b2 inline static _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n-193 // throw std::runtime_error(\n-194 // \"ParameterMatrix::Identity(): Don't use this function\");\n-195 return _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx(0);\n-196 }\n-197\n-199};\n-200\n-201// traits for ParameterMatrix\n-202template \n-_\b2_\b0_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx>\n-204 : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be> {};\n-205\n-206/* *************************************************************************\n-*/\n-207// Stream operator that takes a ParameterMatrix. Used for printing.\n-208template \n-209inline std::ostream& operator<<(std::ostream& os,\n-210 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& parameterMatrix) {\n-211 os << parameterMatrix._\bm_\ba_\bt_\br_\bi_\bx();\n-212 return os;\n-213}\n-214\n-215} // namespace gtsam\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n+19/*\n+20 * Concept needed for LS. Parameters = Coefficients | Values\n+21 * - Parameters, Jacobian\n+22 * - PredictFactor(double x)(Parameters p, OptionalJacobian<1,N> H)\n+23 */\n+24\n+25#pragma once\n+26\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b._\bh>\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+32\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n+34\n+_\b3_\b6using _\bS_\be_\bq_\bu_\be_\bn_\bc_\be = std::map;\n+_\b3_\b8using _\bS_\ba_\bm_\bp_\bl_\be = std::pair;\n+39\n+51template \n+_\b5_\b2class _\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs {\n+53 public:\n+54 using Parameters = typename Basis::Parameters;\n+55\n+56 private:\n+57 Parameters parameters_;\n+58\n+59 public:\n+_\b6_\b1 static _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bG_\br_\ba_\bp_\bh(const _\bS_\be_\bq_\bu_\be_\bn_\bc_\be& sequence,\n+62 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n+63 size_t N) {\n+64 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph;\n+65 for (const _\bS_\ba_\bm_\bp_\bl_\be sample : sequence) {\n+66 graph.emplace_shared<_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bB_\ba_\bs_\bi_\bs_\b>>(0, sample.second, model, N,\n+67 sample.first);\n+68 }\n+69 return graph;\n+70 }\n+71\n+_\b7_\b3 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bL_\bi_\bn_\be_\ba_\br_\bG_\br_\ba_\bp_\bh(\n+74 const _\bS_\be_\bq_\bu_\be_\bn_\bc_\be& sequence, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model, size_t N) {\n+75 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph = _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bG_\br_\ba_\bp_\bh(sequence, model, N);\n+76 _\bV_\ba_\bl_\bu_\be_\bs values;\n+77 values._\bi_\bn_\bs_\be_\br_\bt(0, Parameters::Zero(N));\n+78 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br gfg = graph.linearize(values);\n+79 return gfg;\n+80 }\n+81\n+_\b8_\b9 _\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs(const _\bS_\be_\bq_\bu_\be_\bn_\bc_\be& sequence, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model, size_t N)\n+{\n+90 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br gfg = _\bL_\bi_\bn_\be_\ba_\br_\bG_\br_\ba_\bp_\bh(sequence, model, N);\n+91 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs solution = gfg->optimize();\n+92 parameters_ = solution._\ba_\bt(0);\n+93 }\n+94\n+_\b9_\b6 Parameters _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs() const { return parameters_; }\n+97};\n+98\n+99} // namespace gtsam\n+_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b._\bh\n+Factor definitions for various Basis functors.\n+_\bB_\ba_\bs_\bi_\bs_\b._\bh\n+Compute an interpolating basis.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n-bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n-DenseBase< MATRIX > &B, double tol=1e-9)\n-equals with a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be\n-VectorSpace provides both Testable and VectorSpaceTraits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx\n-A matrix abstraction of MxN values at the Basis points.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-MatrixType operator*(const Eigen::Matrix< double, -1, -1 > &other) const\n-Multiply ParameterMatrix with an Eigen matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-ParameterMatrix< M > operator-(const Eigen::Matrix< double, -1, 1 > &other)\n-const\n-Subtract a MxN-sized vector from the ParameterMatrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw\n-Eigen::Matrix< double, 1, -1 > row(size_t index) const\n-Get the matrix row specified by index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx\n-ParameterMatrix(const size_t N)\n-Create ParameterMatrix using the number of basis points.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static ParameterMatrix Identity()\n-Identity function to satisfy VectorSpace traits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bZ_\be_\br_\bo\n-void setZero()\n-Set all matrix coefficients to zero.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-MatrixType matrix() const\n-Get the underlying matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx\n-ParameterMatrix(const MatrixType &matrix)\n-Create ParameterMatrix from an MxN Eigen Matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl\n-Eigen::Matrix< double, M, 1 > col(size_t index) const\n-Get the matrix column specified by index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-Vector vector() const\n-Convert to vector form, is done row-wise.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:180\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const ParameterMatrix< M > &other, double tol=1e-8) const\n-Check for equality up to absolute tolerance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:172\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-ParameterMatrix< M > operator+(const ParameterMatrix< M > &other) const\n-Add a ParameterMatrix to another.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-size_t rows() const\n-Get the number of rows.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw\n-auto row(size_t index) -> Eigen::Block< MatrixType, 1, -1, false >\n-Set the matrix row specified by index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\") const\n-Print the ParameterMatrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl\n-auto col(size_t index) -> Eigen::Block< MatrixType, M, 1, true >\n-Set the matrix column specified by index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-ParameterMatrix< M > operator+(const Eigen::Matrix< double, -1, 1 > &other)\n-const\n-Add a MxN-sized vector to the ParameterMatrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:122\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-ParameterMatrix< M > operator-(const ParameterMatrix< M > &other) const\n-Subtract a ParameterMatrix from another.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:133\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-Returns dimensionality of the tangent space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n-size_t cols() const\n-Get the number of columns.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be\n-Eigen::Matrix< double, -1, M > transpose() const\n-Return the tranpose of the underlying matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\be_\bq_\bu_\be_\bn_\bc_\be\n+std::map< double, double > Sequence\n+Our sequence representation is a map of {x: y} values where y = f(x)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FitBasis.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be\n+std::pair< double, double > Sample\n+A sample is a key-value pair from a sequence.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FitBasis.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+Factor for enforcing the scalar value of the polynomial BASIS representation at\n+x is the same as the ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs\n+Class that does regression via least squares Example usage: size_t N = 3; auto\n+fit = FitBasis shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+Vector & at(Key j)\n+Read/write access to the vector value with key j, throws std::out_of_range if j\n+does not exist,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:139\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n+void insert(Key j, const Value &val)\n+Add a variable with the given j, throws KeyAlreadyExists if j is already\n+present.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:157\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+ * _\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00155_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00155_source.html", "unified_diff": "@@ -114,16 +114,16 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/base/Manifold.h>
\n-
22#include <gtsam/basis/Basis.h>
\n+
21#include <gtsam/base/Manifold.h>
\n+
22#include <gtsam/basis/Basis.h>
\n
23
\n
24namespace gtsam {
\n
25
\n
\n
32struct GTSAM_EXPORT Chebyshev1Basis : Basis<Chebyshev1Basis> {
\n
33 using Parameters = Eigen::Matrix<double, -1, 1 /*Nx1*/>;
\n
34
\n@@ -146,16 +146,16 @@\n
93
\n
103 static Weights DerivativeWeights(size_t N, double x, double a = -1,
\n
104 double b = 1);
\n
105}; // Chebyshev2Basis
\n
\n
106
\n
107} // namespace gtsam
\n-
Base class and basic functions for Manifold types.
\n-
Compute an interpolating basis.
\n+
Base class and basic functions for Manifold types.
\n+
Compute an interpolating basis.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
CRTP Base class for function bases.
Definition Basis.h:100
\n
Basis of Chebyshev polynomials of the first kind https://en.wikipedia.org/wiki/Chebyshev_polynomials#...
Definition Chebyshev.h:32
\n
Basis of Chebyshev polynomials of the second kind.
Definition Chebyshev.h:80
\n \n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00158.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00158.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Fourier.h File Reference\n \n \n \n \n \n \n \n@@ -95,83 +95,44 @@\n \n \n \n \n
\n \n-
Basis.h File Reference
\n+Namespaces
\n+
Fourier.h File Reference
\n \n
\n \n-

Compute an interpolating basis. \n+

Fourier decomposition, see e.g. \n More...

\n \n

Go to the source code of this file.

\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 Classes

class  gtsam::Basis< DERIVED >
 CRTP Base class for function bases. More...
 
class  gtsam::Basis< DERIVED >::EvaluationFunctor
 An instance of an EvaluationFunctor calculates f(x;p) at a given x, applied to Parameters p. More...
 
class  gtsam::Basis< DERIVED >::VectorEvaluationFunctor< M >
 VectorEvaluationFunctor at a given x, applied to ParameterMatrix<M>. More...
 
class  gtsam::Basis< DERIVED >::VectorComponentFunctor< M >
 Given a M*N Matrix of M-vectors at N polynomial points, an instance of VectorComponentFunctor computes the N-vector value for a specific row component of the M-vectors at all the polynomial points. More...
 
class  gtsam::Basis< DERIVED >::ManifoldEvaluationFunctor< T >
 Manifold EvaluationFunctor at a given x, applied to ParameterMatrix<M>. More...
 
class  gtsam::Basis< DERIVED >::DerivativeFunctorBase
 Base class for functors below that calculate derivative weights. More...
 
class  gtsam::Basis< DERIVED >::DerivativeFunctor
 An instance of a DerivativeFunctor calculates f'(x;p) at a given x, applied to Parameters p. More...
 
class  gtsam::Basis< DERIVED >::VectorDerivativeFunctor< M >
 VectorDerivativeFunctor at a given x, applied to ParameterMatrix<M>. More...
 
class  gtsam::Basis< DERIVED >::ComponentDerivativeFunctor< M >
 Given a M*N Matrix of M-vectors at N polynomial points, an instance of ComponentDerivativeFunctor computes the N-vector derivative for a specific row component of the M-vectors at all the polynomial points. More...
class  gtsam::FourierBasis
 Fourier basis. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::Weights = Eigen::Matrix< double, 1, -1 >
 
\n-\n-\n-\n-\n-\n

\n-Functions

template<size_t M>
Matrix gtsam::kroneckerProductIdentity (const Weights &w)
 Function for computing the kronecker product of the 1*N Weight vector w with the MxM identity matrix I efficiently.
 
\n

Detailed Description

\n-

Compute an interpolating basis.

\n-
Author
Varun Agrawal, Jing Dong, Frank Dellaert
\n+

Fourier decomposition, see e.g.

\n+

http://mathworld.wolfram.com/FourierSeries.html

Author
Varun Agrawal, Frank Dellaert
\n
Date
July 4, 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,71 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Basis.h File Reference\n-Compute an interpolating basis. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Fourier.h File Reference\n+Fourier decomposition, see e.g. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>\n-\u00a0 CRTP Base class for function bases. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-\u00a0 An instance of an _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br calculates f(x;p) at a given x,\n- applied to Parameters p. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bM_\b _\b>\n-\u00a0 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br at a given x, applied to ParameterMatrix.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bM_\b _\b>\n- Given a M*N Matrix of M-vectors at N polynomial points, an instance of\n-\u00a0 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br computes the N-vector value for a specific row\n- component of the M-vectors at all the polynomial points. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n-\u00a0 Manifold _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br at a given x, applied to ParameterMatrix.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n-\u00a0 Base class for functors below that calculate derivative weights.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-\u00a0 An instance of a _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br calculates f'(x;p) at a given x,\n- applied to Parameters p. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bM_\b _\b>\n-\u00a0 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br at a given x, applied to ParameterMatrix.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bM_\b _\b>\n- Given a M*N Matrix of M-vectors at N polynomial points, an instance of\n-\u00a0 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br computes the N-vector derivative for a\n- specific row component of the M-vectors at all the polynomial points.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs\n+\u00a0 Fourier basis. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:W\bWe\bei\big\bgh\bht\bts\bs = Eigen::Matrix< double, 1, -1 >\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bk_\br_\bo_\bn_\be_\bc_\bk_\be_\br_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by (const Weights &w)\n-\u00a0 Function for computing the kronecker product of the 1*N Weight vector w\n- with the MxM identity matrix I efficiently.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Compute an interpolating basis.\n+Fourier decomposition, see e.g.\n+_\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bm_\ba_\bt_\bh_\bw_\bo_\br_\bl_\bd_\b._\bw_\bo_\bl_\bf_\br_\ba_\bm_\b._\bc_\bo_\bm_\b/_\bF_\bo_\bu_\br_\bi_\be_\br_\bS_\be_\br_\bi_\be_\bs_\b._\bh_\bt_\bm_\bl\n Author\n- Varun Agrawal, Jing Dong, Frank Dellaert\n+ Varun Agrawal, Frank Dellaert\n Date\n July 4, 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bB_\ba_\bs_\bi_\bs_\b._\bh\n+ * _\bF_\bo_\bu_\br_\bi_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00158.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00158.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,3 @@\n var a00158 = [\n- [\"gtsam::Basis< DERIVED >::EvaluationFunctor\", \"a02672.html\", \"a02672\"],\n- [\"gtsam::Basis< DERIVED >::VectorEvaluationFunctor< M >\", \"a02676.html\", \"a02676\"],\n- [\"gtsam::Basis< DERIVED >::VectorComponentFunctor< M >\", \"a02680.html\", \"a02680\"],\n- [\"gtsam::Basis< DERIVED >::ManifoldEvaluationFunctor< T >\", \"a02684.html\", \"a02684\"],\n- [\"gtsam::Basis< DERIVED >::DerivativeFunctorBase\", \"a02688.html\", \"a02688\"],\n- [\"gtsam::Basis< DERIVED >::DerivativeFunctor\", \"a02692.html\", \"a02692\"],\n- [\"gtsam::Basis< DERIVED >::VectorDerivativeFunctor< M >\", \"a02696.html\", \"a02696\"],\n- [\"gtsam::Basis< DERIVED >::ComponentDerivativeFunctor< M >\", \"a02700.html\", \"a02700\"],\n- [\"kroneckerProductIdentity\", \"a00158.html#ga2ce44d31cae1eda44c2a86d32d92b935\", null]\n+ [\"gtsam::FourierBasis\", \"a02748.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00158_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00158_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Fourier.h Source File\n \n \n \n \n \n \n \n@@ -98,473 +98,106 @@\n
No Matches
\n \n \n \n \n \n
\n-
Basis.h
\n+
Fourier.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <gtsam/base/Matrix.h>
\n-\n-\n-
24
\n-
25#include <iostream>
\n-
26
\n-
68namespace gtsam {
\n-
69
\n-
70using Weights = Eigen::Matrix<double, 1, -1>; /* 1xN vector */
\n-
71
\n-
84template <size_t M>
\n-
\n-
85Matrix kroneckerProductIdentity(const Weights& w) {
\n-
86 Matrix result(M, w.cols() * M);
\n-
87 result.setZero();
\n-
88
\n-
89 for (int i = 0; i < w.cols(); i++) {
\n-
90 result.block(0, i * M, M, M).diagonal().array() = w(i);
\n-
91 }
\n-
92 return result;
\n-
93}
\n-
\n-
94
\n-
99template <typename DERIVED>
\n-
\n-
100class Basis {
\n-
101 public:
\n-
\n-
107 static Matrix WeightMatrix(size_t N, const Vector& X) {
\n-
108 Matrix W(X.size(), N);
\n-
109 for (int i = 0; i < X.size(); i++)
\n-
110 W.row(i) = DERIVED::CalculateWeights(N, X(i));
\n-
111 return W;
\n-
112 }
\n-
\n-
113
\n-
\n-
123 static Matrix WeightMatrix(size_t N, const Vector& X, double a, double b) {
\n-
124 Matrix W(X.size(), N);
\n-
125 for (int i = 0; i < X.size(); i++)
\n-
126 W.row(i) = DERIVED::CalculateWeights(N, X(i), a, b);
\n-
127 return W;
\n-
128 }
\n-
\n-
129
\n-
\n-\n-
138 protected:
\n-
139 Weights weights_;
\n-
140
\n-
141 public:
\n-\n-
144
\n-
\n-
146 EvaluationFunctor(size_t N, double x)
\n-
147 : weights_(DERIVED::CalculateWeights(N, x)) {}
\n-
\n-
148
\n-
\n-
150 EvaluationFunctor(size_t N, double x, double a, double b)
\n-
151 : weights_(DERIVED::CalculateWeights(N, x, a, b)) {}
\n-
\n-
152
\n-
\n-
154 double apply(const typename DERIVED::Parameters& p,
\n-
155 OptionalJacobian<-1, -1> H = boost::none) const {
\n-
156 if (H) *H = weights_;
\n-
157 return (weights_ * p)(0);
\n-
158 }
\n-
\n-
159
\n-
\n-
161 double operator()(const typename DERIVED::Parameters& p,
\n-
162 OptionalJacobian<-1, -1> H = boost::none) const {
\n-
163 return apply(p, H); // might call apply in derived
\n-
164 }
\n-
\n-
165
\n-
166 void print(const std::string& s = "") const {
\n-
167 std::cout << s << (s != "" ? " " : "") << weights_ << std::endl;
\n-
168 }
\n-
169 };
\n-
\n-
170
\n-
177 template <int M>
\n-
\n-\n-
179 protected:
\n-
180 using VectorM = Eigen::Matrix<double, M, 1>;
\n-
181 using Jacobian = Eigen::Matrix<double, /*MxMN*/ M, -1>;
\n-
182 Jacobian H_;
\n-
183
\n-
\n-\n-
193 H_ = kroneckerProductIdentity<M>(this->weights_);
\n-
194 }
\n-
\n-
195
\n-
196 public:
\n-
197 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n-
198
\n-\n-
201
\n-
\n-
203 VectorEvaluationFunctor(size_t N, double x) : EvaluationFunctor(N, x) {
\n-\n-
205 }
\n-
\n-
206
\n-
\n-
208 VectorEvaluationFunctor(size_t N, double x, double a, double b)
\n-
209 : EvaluationFunctor(N, x, a, b) {
\n-\n-
211 }
\n-
\n-
212
\n-
\n-
214 VectorM apply(const ParameterMatrix<M>& P,
\n-
215 OptionalJacobian</*MxN*/ -1, -1> H = boost::none) const {
\n-
216 if (H) *H = H_;
\n-
217 return P.matrix() * this->weights_.transpose();
\n-
218 }
\n-
\n-
219
\n-
\n-\n-
222 OptionalJacobian</*MxN*/ -1, -1> H = boost::none) const {
\n-
223 return apply(P, H);
\n-
224 }
\n-
\n-
225 };
\n-
\n-
226
\n-
234 template <int M>
\n-
\n-\n-
236 protected:
\n-
237 using Jacobian = Eigen::Matrix<double, /*1xMN*/ 1, -1>;
\n-
238 size_t rowIndex_;
\n-
239 Jacobian H_;
\n-
240
\n-
241 /*
\n-
242 * Calculate the `1*(M*N)` Jacobian of this functor with respect to
\n-
243 * the M*N parameter matrix `P`.
\n-
244 * We flatten assuming column-major order, e.g., if N=3 and M=2, we have
\n-
245 * H=[w(0) 0 w(1) 0 w(2) 0] for rowIndex==0
\n-
246 * H=[0 w(0) 0 w(1) 0 w(2)] for rowIndex==1
\n-
247 * i.e., one row of the Kronecker product of weights_ with the
\n-
248 * MxM identity matrix. See also VectorEvaluationFunctor.
\n-
249 */
\n-
250 void calculateJacobian(size_t N) {
\n-
251 H_.setZero(1, M * N);
\n-
252 for (int j = 0; j < EvaluationFunctor::weights_.size(); j++)
\n-
253 H_(0, rowIndex_ + j * M) = EvaluationFunctor::weights_(j);
\n-
254 }
\n-
255
\n-
256 public:
\n-\n-
259
\n-
\n-
261 VectorComponentFunctor(size_t N, size_t i, double x)
\n-
262 : EvaluationFunctor(N, x), rowIndex_(i) {
\n-
263 calculateJacobian(N);
\n-
264 }
\n-
\n-
265
\n-
\n-
267 VectorComponentFunctor(size_t N, size_t i, double x, double a, double b)
\n-
268 : EvaluationFunctor(N, x, a, b), rowIndex_(i) {
\n-
269 calculateJacobian(N);
\n-
270 }
\n-
\n-
271
\n-
\n-
273 double apply(const ParameterMatrix<M>& P,
\n-
274 OptionalJacobian</*1xMN*/ -1, -1> H = boost::none) const {
\n-
275 if (H) *H = H_;
\n-
276 return P.row(rowIndex_) * EvaluationFunctor::weights_.transpose();
\n-
277 }
\n-
\n-
278
\n-
\n-\n-
281 OptionalJacobian</*1xMN*/ -1, -1> H = boost::none) const {
\n-
282 return apply(P, H);
\n-
283 }
\n-
\n-
284 };
\n-
\n-
285
\n-
299 template <class T>
\n-
\n-\n-
301 : public VectorEvaluationFunctor<traits<T>::dimension> {
\n-
302 enum { M = traits<T>::dimension };
\n-
303 using Base = VectorEvaluationFunctor<M>;
\n-
304
\n-
305 public:
\n-\n-
308
\n-
310 ManifoldEvaluationFunctor(size_t N, double x) : Base(N, x) {}
\n-
311
\n-
\n-
313 ManifoldEvaluationFunctor(size_t N, double x, double a, double b)
\n-
314 : Base(N, x, a, b) {}
\n-
\n-
315
\n-
\n-\n-
318 OptionalJacobian</*MxMN*/ -1, -1> H = boost::none) const {
\n-
319 // Interpolate the M-dimensional vector to yield a vector in tangent space
\n-
320 Eigen::Matrix<double, M, 1> xi = Base::operator()(P, H);
\n-
321
\n-
322 // Now call retract with this M-vector, possibly with derivatives
\n-
323 Eigen::Matrix<double, M, M> D_result_xi;
\n-
324 T result = T::ChartAtOrigin::Retract(xi, H ? &D_result_xi : 0);
\n-
325
\n-
326 // Finally, if derivatives are asked, apply chain rule where H is Mx(M*N)
\n-
327 // derivative of interpolation and D_result_xi is MxM derivative of
\n-
328 // retract.
\n-
329 if (H) *H = D_result_xi * (*H);
\n-
330
\n-
331 // and return a T
\n-
332 return result;
\n-
333 }
\n-
\n-
334
\n-
\n-\n-
337 OptionalJacobian</*MxN*/ -1, -1> H = boost::none) const {
\n-
338 return apply(P, H); // might call apply in derived
\n-
339 }
\n-
\n-
340 };
\n-
\n-
341
\n-
\n-\n-
344 protected:
\n-
345 Weights weights_;
\n-
346
\n-
347 public:
\n-\n-
350
\n-
351 DerivativeFunctorBase(size_t N, double x)
\n-
352 : weights_(DERIVED::DerivativeWeights(N, x)) {}
\n-
353
\n-
354 DerivativeFunctorBase(size_t N, double x, double a, double b)
\n-
355 : weights_(DERIVED::DerivativeWeights(N, x, a, b)) {}
\n-
356
\n-
357 void print(const std::string& s = "") const {
\n-
358 std::cout << s << (s != "" ? " " : "") << weights_ << std::endl;
\n-
359 }
\n-
360 };
\n-
\n-
361
\n-
\n-\n-
370 public:
\n-\n-
373
\n-
374 DerivativeFunctor(size_t N, double x) : DerivativeFunctorBase(N, x) {}
\n-
375
\n-
376 DerivativeFunctor(size_t N, double x, double a, double b)
\n-
377 : DerivativeFunctorBase(N, x, a, b) {}
\n-
378
\n-
379 double apply(const typename DERIVED::Parameters& p,
\n-
380 OptionalJacobian</*1xN*/ -1, -1> H = boost::none) const {
\n-
381 if (H) *H = this->weights_;
\n-
382 return (this->weights_ * p)(0);
\n-
383 }
\n-
\n-
385 double operator()(const typename DERIVED::Parameters& p,
\n-
386 OptionalJacobian</*1xN*/ -1, -1> H = boost::none) const {
\n-
387 return apply(p, H); // might call apply in derived
\n-
388 }
\n-
\n-
389 };
\n-
\n-
390
\n-
399 template <int M>
\n-
\n-\n-
401 protected:
\n-
402 using VectorM = Eigen::Matrix<double, M, 1>;
\n-
403 using Jacobian = Eigen::Matrix<double, /*MxMN*/ M, -1>;
\n-
404 Jacobian H_;
\n-
405
\n-
\n-\n-
415 H_ = kroneckerProductIdentity<M>(this->weights_);
\n-
416 }
\n-
\n-
417
\n-
418 public:
\n-
419 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n-
420
\n-\n-
423
\n-
\n-
425 VectorDerivativeFunctor(size_t N, double x) : DerivativeFunctorBase(N, x) {
\n-\n-
427 }
\n-
\n-
428
\n-
\n-
430 VectorDerivativeFunctor(size_t N, double x, double a, double b)
\n-
431 : DerivativeFunctorBase(N, x, a, b) {
\n-\n-
433 }
\n-
\n-
434
\n-
435 VectorM apply(const ParameterMatrix<M>& P,
\n-
436 OptionalJacobian</*MxMN*/ -1, -1> H = boost::none) const {
\n-
437 if (H) *H = H_;
\n-
438 return P.matrix() * this->weights_.transpose();
\n-
439 }
\n-
\n-
441 VectorM operator()(
\n-
442 const ParameterMatrix<M>& P,
\n-
443 OptionalJacobian</*MxMN*/ -1, -1> H = boost::none) const {
\n-
444 return apply(P, H);
\n-
445 }
\n-
\n-
446 };
\n-
\n-
447
\n-
455 template <int M>
\n-
\n-\n-
457 protected:
\n-
458 using Jacobian = Eigen::Matrix<double, /*1xMN*/ 1, -1>;
\n-
459 size_t rowIndex_;
\n-
460 Jacobian H_;
\n-
461
\n-
462 /*
\n-
463 * Calculate the `1*(M*N)` Jacobian of this functor with respect to
\n-
464 * the M*N parameter matrix `P`.
\n-
465 * We flatten assuming column-major order, e.g., if N=3 and M=2, we have
\n-
466 * H=[w(0) 0 w(1) 0 w(2) 0] for rowIndex==0
\n-
467 * H=[0 w(0) 0 w(1) 0 w(2)] for rowIndex==1
\n-
468 * i.e., one row of the Kronecker product of weights_ with the
\n-
469 * MxM identity matrix. See also VectorDerivativeFunctor.
\n-
470 */
\n-
471 void calculateJacobian(size_t N) {
\n-
472 H_.setZero(1, M * N);
\n-
473 for (int j = 0; j < this->weights_.size(); j++)
\n-
474 H_(0, rowIndex_ + j * M) = this->weights_(j);
\n-
475 }
\n-
476
\n-
477 public:
\n-\n-
480
\n-
\n-
482 ComponentDerivativeFunctor(size_t N, size_t i, double x)
\n-
483 : DerivativeFunctorBase(N, x), rowIndex_(i) {
\n-
484 calculateJacobian(N);
\n-
485 }
\n-
\n-
486
\n-
\n-
488 ComponentDerivativeFunctor(size_t N, size_t i, double x, double a, double b)
\n-
489 : DerivativeFunctorBase(N, x, a, b), rowIndex_(i) {
\n-
490 calculateJacobian(N);
\n-
491 }
\n-
\n-
\n-
493 double apply(const ParameterMatrix<M>& P,
\n-
494 OptionalJacobian</*1xMN*/ -1, -1> H = boost::none) const {
\n-
495 if (H) *H = H_;
\n-
496 return P.row(rowIndex_) * this->weights_.transpose();
\n-
497 }
\n-
\n-
\n-\n-
500 OptionalJacobian</*1xMN*/ -1, -1> H = boost::none) const {
\n-
501 return apply(P, H);
\n-
502 }
\n-
\n-
503 };
\n-
\n-
504
\n-
505};
\n-
\n-
506
\n-
507} // namespace gtsam
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Special class for optional Jacobian arguments.
\n-
Define ParameterMatrix class which is used to store values at interpolation points.
\n-
Matrix kroneckerProductIdentity(const Weights &w)
Function for computing the kronecker product of the 1*N Weight vector w with the MxM identity matrix ...
Definition Basis.h:85
\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/basis/Basis.h>
\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
\n+
27class FourierBasis : public Basis<FourierBasis> {
\n+
28 public:
\n+
29 using Parameters = Eigen::Matrix<double, /*Nx1*/ -1, 1>;
\n+
30 using DiffMatrix = Eigen::Matrix<double, /*NxN*/ -1, -1>;
\n+
31
\n+
\n+
40 static Weights CalculateWeights(size_t N, double x) {
\n+
41 Weights b(N);
\n+
42 b[0] = 1;
\n+
43 for (size_t i = 1, n = 1; i < N; i++) {
\n+
44 if (i % 2 == 1) {
\n+
45 b[i] = cos(n * x);
\n+
46 } else {
\n+
47 b[i] = sin(n * x);
\n+
48 n++;
\n+
49 }
\n+
50 }
\n+
51 return b;
\n+
52 }
\n+
\n+
53
\n+
\n+
64 static Weights CalculateWeights(size_t N, double x, double a, double b) {
\n+
65 // TODO(Varun) How do we enforce an interval for Fourier series?
\n+
66 return CalculateWeights(N, x);
\n+
67 }
\n+
\n+
68
\n+
\n+
73 static DiffMatrix DifferentiationMatrix(size_t N) {
\n+
74 DiffMatrix D = DiffMatrix::Zero(N, N);
\n+
75 double k = 1;
\n+
76 for (size_t i = 1; i < N; i += 2) {
\n+
77 D(i, i + 1) = k; // sin'(k*x) = k*cos(k*x)
\n+
78 D(i + 1, i) = -k; // cos'(k*x) = -k*sin(k*x)
\n+
79 k += 1;
\n+
80 }
\n+
81
\n+
82 return D;
\n+
83 }
\n+
\n+
84
\n+
\n+
92 static Weights DerivativeWeights(size_t N, double x) {
\n+\n+
94 }
\n+
\n+
95
\n+
\n+
106 static Weights DerivativeWeights(size_t N, double x, double a, double b) {
\n+
107 return CalculateWeights(N, x, a, b) * DifferentiationMatrix(N);
\n+
108 }
\n+
\n+
109
\n+
110}; // FourierBasis
\n+
\n+
111
\n+
112} // namespace gtsam
\n+
Compute an interpolating basis.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
CRTP Base class for function bases.
Definition Basis.h:100
\n-
static Matrix WeightMatrix(size_t N, const Vector &X, double a, double b)
Calculate weights for all x in vector X, with interval [a,b].
Definition Basis.h:123
\n-
static Matrix WeightMatrix(size_t N, const Vector &X)
Calculate weights for all x in vector X.
Definition Basis.h:107
\n-
An instance of an EvaluationFunctor calculates f(x;p) at a given x, applied to Parameters p.
Definition Basis.h:137
\n-
EvaluationFunctor(size_t N, double x)
Constructor with interval [a,b].
Definition Basis.h:146
\n-
EvaluationFunctor(size_t N, double x, double a, double b)
Constructor with interval [a,b].
Definition Basis.h:150
\n-
double apply(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -1 > H=boost::none) const
Regular 1D evaluation.
Definition Basis.h:154
\n-
EvaluationFunctor()
For serialization.
Definition Basis.h:143
\n-
double operator()(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:161
\n-
VectorEvaluationFunctor at a given x, applied to ParameterMatrix<M>.
Definition Basis.h:178
\n-
VectorEvaluationFunctor(size_t N, double x, double a, double b)
Constructor, with interval [a,b].
Definition Basis.h:208
\n-
EIGEN_MAKE_ALIGNED_OPERATOR_NEW VectorEvaluationFunctor()
For serialization.
Definition Basis.h:200
\n-
VectorEvaluationFunctor(size_t N, double x)
Default Constructor.
Definition Basis.h:203
\n-
void calculateJacobian()
Calculate the M*(M*N) Jacobian of this functor with respect to the M*N parameter matrix P.
Definition Basis.h:192
\n-
VectorM operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:221
\n-
VectorM apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
M-dimensional evaluation.
Definition Basis.h:214
\n-
Given a M*N Matrix of M-vectors at N polynomial points, an instance of VectorComponentFunctor compute...
Definition Basis.h:235
\n-
double operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:280
\n-
VectorComponentFunctor()
For serialization.
Definition Basis.h:258
\n-
VectorComponentFunctor(size_t N, size_t i, double x)
Construct with row index.
Definition Basis.h:261
\n-
VectorComponentFunctor(size_t N, size_t i, double x, double a, double b)
Construct with row index and interval.
Definition Basis.h:267
\n-
double apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
Calculate component of component rowIndex_ of P.
Definition Basis.h:273
\n-
Manifold EvaluationFunctor at a given x, applied to ParameterMatrix<M>.
Definition Basis.h:301
\n-
ManifoldEvaluationFunctor(size_t N, double x, double a, double b)
Constructor, with interval [a,b].
Definition Basis.h:313
\n-
T apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
Manifold evaluation.
Definition Basis.h:317
\n-
ManifoldEvaluationFunctor()
For serialization.
Definition Basis.h:307
\n-
ManifoldEvaluationFunctor(size_t N, double x)
Default Constructor.
Definition Basis.h:310
\n-
T operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:336
\n-
Base class for functors below that calculate derivative weights.
Definition Basis.h:343
\n-
DerivativeFunctorBase()
For serialization.
Definition Basis.h:349
\n-
An instance of a DerivativeFunctor calculates f'(x;p) at a given x, applied to Parameters p.
Definition Basis.h:369
\n-
DerivativeFunctor()
For serialization.
Definition Basis.h:372
\n-
double operator()(const typename DERIVED::Parameters &p, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:385
\n-
VectorDerivativeFunctor at a given x, applied to ParameterMatrix<M>.
Definition Basis.h:400
\n-
void calculateJacobian()
Calculate the M*(M*N) Jacobian of this functor with respect to the M*N parameter matrix P.
Definition Basis.h:414
\n-
VectorDerivativeFunctor(size_t N, double x, double a, double b)
Constructor, with optional interval [a,b].
Definition Basis.h:430
\n-
VectorM operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:441
\n-
EIGEN_MAKE_ALIGNED_OPERATOR_NEW VectorDerivativeFunctor()
For serialization.
Definition Basis.h:422
\n-
VectorDerivativeFunctor(size_t N, double x)
Default Constructor.
Definition Basis.h:425
\n-
Given a M*N Matrix of M-vectors at N polynomial points, an instance of ComponentDerivativeFunctor com...
Definition Basis.h:456
\n-
ComponentDerivativeFunctor(size_t N, size_t i, double x)
Construct with row index.
Definition Basis.h:482
\n-
double operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:499
\n-
ComponentDerivativeFunctor()
For serialization.
Definition Basis.h:479
\n-
ComponentDerivativeFunctor(size_t N, size_t i, double x, double a, double b)
Construct with row index and interval.
Definition Basis.h:488
\n-
double apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
Calculate derivative of component rowIndex_ of F.
Definition Basis.h:493
\n-
A matrix abstraction of MxN values at the Basis points.
Definition ParameterMatrix.h:38
\n+
Fourier basis.
Definition Fourier.h:27
\n+
static DiffMatrix DifferentiationMatrix(size_t N)
Compute D = differentiation matrix.
Definition Fourier.h:73
\n+
static Weights DerivativeWeights(size_t N, double x)
Get weights at a given x that calculate the derivative.
Definition Fourier.h:92
\n+
static Weights CalculateWeights(size_t N, double x)
Evaluate Real Fourier Weights of size N in interval [a, b], e.g.
Definition Fourier.h:40
\n+
static Weights DerivativeWeights(size_t N, double x, double a, double b)
Get derivative weights at a given x that calculate the derivative, in the interval [a,...
Definition Fourier.h:106
\n+
static Weights CalculateWeights(size_t N, double x, double a, double b)
Evaluate Real Fourier Weights of size N in interval [a, b], e.g.
Definition Fourier.h:64
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,554 +1,109 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Basis.h\n+Fourier.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-24\n-25#include \n-26\n-68namespace _\bg_\bt_\bs_\ba_\bm {\n-69\n-70using Weights = Eigen::Matrix; /* 1xN vector */\n-71\n-84template \n-_\b8_\b5Matrix _\bk_\br_\bo_\bn_\be_\bc_\bk_\be_\br_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by(const Weights& w) {\n-86 Matrix result(M, w.cols() * M);\n-87 result.setZero();\n-88\n-89 for (int i = 0; i < w.cols(); i++) {\n-90 result.block(0, i * M, M, M).diagonal().array() = w(i);\n-91 }\n-92 return result;\n-93}\n-94\n-99template \n-_\b1_\b0_\b0class _\bB_\ba_\bs_\bi_\bs {\n-101 public:\n-_\b1_\b0_\b7 static Matrix _\bW_\be_\bi_\bg_\bh_\bt_\bM_\ba_\bt_\br_\bi_\bx(size_t N, const Vector& X) {\n-108 Matrix W(X.size(), N);\n-109 for (int i = 0; i < X.size(); i++)\n-110 W.row(i) = DERIVED::CalculateWeights(N, X(i));\n-111 return W;\n-112 }\n-113\n-_\b1_\b2_\b3 static Matrix _\bW_\be_\bi_\bg_\bh_\bt_\bM_\ba_\bt_\br_\bi_\bx(size_t N, const Vector& X, double a, double b) {\n-124 Matrix W(X.size(), N);\n-125 for (int i = 0; i < X.size(); i++)\n-126 W.row(i) = DERIVED::CalculateWeights(N, X(i), a, b);\n-127 return W;\n-128 }\n-129\n-_\b1_\b3_\b7 class _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br {\n-138 protected:\n-139 Weights weights_;\n-140\n-141 public:\n-_\b1_\b4_\b3 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n-144\n-_\b1_\b4_\b6 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x)\n-147 : weights_(DERIVED::CalculateWeights(N, x)) {}\n-148\n-_\b1_\b5_\b0 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x, double a, double b)\n-151 : weights_(DERIVED::CalculateWeights(N, x, a, b)) {}\n-152\n-_\b1_\b5_\b4 double _\ba_\bp_\bp_\bl_\by(const typename DERIVED::Parameters& p,\n-155 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-156 if (H) *H = weights_;\n-157 return (weights_ * p)(0);\n-158 }\n-159\n-_\b1_\b6_\b1 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const typename DERIVED::Parameters& p,\n-162 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-163 return _\ba_\bp_\bp_\bl_\by(p, H); // might call apply in derived\n-164 }\n-165\n-166 void print(const std::string& s = \"\") const {\n-167 std::cout << s << (s != \"\" ? \" \" : \"\") << weights_ << std::endl;\n-168 }\n-169 };\n-170\n-177 template \n-_\b1_\b7_\b8 class _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br : protected _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br {\n-179 protected:\n-180 using VectorM = Eigen::Matrix;\n-181 using Jacobian = Eigen::Matrix;\n-182 Jacobian H_;\n-183\n-_\b1_\b9_\b2 void _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() {\n-193 H_ = kroneckerProductIdentity(this->weights_);\n-194 }\n-195\n-196 public:\n-197 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n-198\n-_\b2_\b0_\b0 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n-201\n-_\b2_\b0_\b3 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x) : _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(N, x) {\n-204 _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn();\n-205 }\n-206\n-_\b2_\b0_\b8 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x, double a, double b)\n-209 : _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(N, x, a, b) {\n-210 _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn();\n-211 }\n-212\n-_\b2_\b1_\b4 VectorM _\ba_\bp_\bp_\bl_\by(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n-215 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-216 if (H) *H = H_;\n-217 return P.matrix() * this->weights_.transpose();\n-218 }\n-219\n-_\b2_\b2_\b1 VectorM _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n-222 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-223 return _\ba_\bp_\bp_\bl_\by(P, H);\n-224 }\n-225 };\n-226\n-234 template \n-_\b2_\b3_\b5 class _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br : public _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br {\n-236 protected:\n-237 using Jacobian = Eigen::Matrix;\n-238 size_t rowIndex_;\n-239 Jacobian H_;\n-240\n-241 /*\n-242 * Calculate the `1*(M*N)` Jacobian of this functor with respect to\n-243 * the M*N parameter matrix `P`.\n-244 * We flatten assuming column-major order, e.g., if N=3 and M=2, we have\n-245 * H=[w(0) 0 w(1) 0 w(2) 0] for rowIndex==0\n-246 * H=[0 w(0) 0 w(1) 0 w(2)] for rowIndex==1\n-247 * i.e., one row of the Kronecker product of weights_ with the\n-248 * MxM identity matrix. See also VectorEvaluationFunctor.\n-249 */\n-250 void calculateJacobian(size_t N) {\n-251 H_.setZero(1, M * N);\n-252 for (int j = 0; j < EvaluationFunctor::weights_.size(); j++)\n-253 H_(0, rowIndex_ + j * M) = EvaluationFunctor::weights_(j);\n-254 }\n-255\n-256 public:\n-_\b2_\b5_\b8 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n-259\n-_\b2_\b6_\b1 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, size_t i, double x)\n-262 : _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(N, x), rowIndex_(i) {\n-263 calculateJacobian(N);\n-264 }\n-265\n-_\b2_\b6_\b7 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, size_t i, double x, double a, double b)\n-268 : _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(N, x, a, b), rowIndex_(i) {\n-269 calculateJacobian(N);\n-270 }\n-271\n-_\b2_\b7_\b3 double _\ba_\bp_\bp_\bl_\by(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n-274 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\b1_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-275 if (H) *H = H_;\n-276 return P.row(rowIndex_) * EvaluationFunctor::weights_.transpose();\n-277 }\n-278\n-_\b2_\b8_\b0 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n-281 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\b1_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-282 return _\ba_\bp_\bp_\bl_\by(P, H);\n-283 }\n-284 };\n-285\n-299 template \n-_\b3_\b0_\b0 class _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-301 : public _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br::dimension> {\n-302 enum { M = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn };\n-303 using Base = _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\bM_\b>;\n-304\n-305 public:\n-_\b3_\b0_\b7 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n-308\n-_\b3_\b1_\b0 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x) : Base(N, x) {}\n-311\n-_\b3_\b1_\b3 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x, double a, double b)\n-314 : Base(N, x, a, b) {}\n-315\n-_\b3_\b1_\b7 T _\ba_\bp_\bp_\bl_\by(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n-318 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-319 // Interpolate the M-dimensional vector to yield a vector in tangent space\n-320 Eigen::Matrix xi = Base::operator()(P, H);\n-321\n-322 // Now call retract with this M-vector, possibly with derivatives\n-323 Eigen::Matrix D_result_xi;\n-324 T result = T::ChartAtOrigin::Retract(xi, H ? &D_result_xi : 0);\n-325\n-326 // Finally, if derivatives are asked, apply chain rule where H is Mx(M*N)\n-327 // derivative of interpolation and D_result_xi is MxM derivative of\n-328 // retract.\n-329 if (H) *H = D_result_xi * (*H);\n-330\n-331 // and return a T\n-332 return result;\n-333 }\n-334\n-_\b3_\b3_\b6 T _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n-337 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-338 return _\ba_\bp_\bp_\bl_\by(P, H); // might call apply in derived\n-339 }\n-340 };\n-341\n-_\b3_\b4_\b3 class _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be {\n-344 protected:\n-345 Weights weights_;\n-346\n-347 public:\n-_\b3_\b4_\b9 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be() {}\n-350\n-351 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(size_t N, double x)\n-352 : weights_(DERIVED::DerivativeWeights(N, x)) {}\n-353\n-354 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(size_t N, double x, double a, double b)\n-355 : weights_(DERIVED::DerivativeWeights(N, x, a, b)) {}\n-356\n-357 void print(const std::string& s = \"\") const {\n-358 std::cout << s << (s != \"\" ? \" \" : \"\") << weights_ << std::endl;\n-359 }\n-360 };\n-361\n-_\b3_\b6_\b9 class _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br : protected _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be {\n-370 public:\n-_\b3_\b7_\b2 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n-373\n-374 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x) : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x) {}\n-375\n-376 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x, double a, double b)\n-377 : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x, a, b) {}\n-378\n-379 double apply(const typename DERIVED::Parameters& p,\n-380 OptionalJacobian H = boost::none) const {\n-381 if (H) *H = this->weights_;\n-382 return (this->weights_ * p)(0);\n-383 }\n-_\b3_\b8_\b5 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const typename DERIVED::Parameters& p,\n-386 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\b1_\bx_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-387 return apply(p, H); // might call apply in derived\n-388 }\n-389 };\n-390\n-399 template \n-_\b4_\b0_\b0 class _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br : protected _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be {\n-401 protected:\n-402 using VectorM = Eigen::Matrix;\n-403 using Jacobian = Eigen::Matrix;\n-404 Jacobian H_;\n-405\n-_\b4_\b1_\b4 void _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() {\n-415 H_ = kroneckerProductIdentity(this->weights_);\n-416 }\n-417\n-418 public:\n-419 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n-420\n-_\b4_\b2_\b2 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n-423\n-_\b4_\b2_\b5 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x) : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x) {\n-426 _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn();\n-427 }\n-428\n-_\b4_\b3_\b0 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x, double a, double b)\n-431 : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x, a, b) {\n-432 _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn();\n-433 }\n-434\n-435 VectorM apply(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n-436 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-437 if (H) *H = H_;\n-438 return P.matrix() * this->weights_.transpose();\n-439 }\n-_\b4_\b4_\b1 VectorM _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(\n-442 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n-443 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-444 return apply(P, H);\n-445 }\n-446 };\n-447\n-455 template \n-_\b4_\b5_\b6 class _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br : protected _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be {\n-457 protected:\n-458 using Jacobian = Eigen::Matrix;\n-459 size_t rowIndex_;\n-460 Jacobian H_;\n-461\n-462 /*\n-463 * Calculate the `1*(M*N)` Jacobian of this functor with respect to\n-464 * the M*N parameter matrix `P`.\n-465 * We flatten assuming column-major order, e.g., if N=3 and M=2, we have\n-466 * H=[w(0) 0 w(1) 0 w(2) 0] for rowIndex==0\n-467 * H=[0 w(0) 0 w(1) 0 w(2)] for rowIndex==1\n-468 * i.e., one row of the Kronecker product of weights_ with the\n-469 * MxM identity matrix. See also VectorDerivativeFunctor.\n-470 */\n-471 void calculateJacobian(size_t N) {\n-472 H_.setZero(1, M * N);\n-473 for (int j = 0; j < this->weights_.size(); j++)\n-474 H_(0, rowIndex_ + j * M) = this->weights_(j);\n-475 }\n-476\n-477 public:\n-_\b4_\b7_\b9 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n-480\n-_\b4_\b8_\b2 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, size_t i, double x)\n-483 : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x), rowIndex_(i) {\n-484 calculateJacobian(N);\n-485 }\n-486\n-_\b4_\b8_\b8 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, size_t i, double x, double a, double\n-b)\n-489 : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x, a, b), rowIndex_(i) {\n-490 calculateJacobian(N);\n-491 }\n-_\b4_\b9_\b3 double _\ba_\bp_\bp_\bl_\by(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n-494 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\b1_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-495 if (H) *H = H_;\n-496 return P.row(rowIndex_) * this->weights_.transpose();\n-497 }\n-_\b4_\b9_\b9 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n-500 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\b1_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n-501 return _\ba_\bp_\bp_\bl_\by(P, H);\n-502 }\n-503 };\n-504\n-505};\n-506\n-507} // namespace gtsam\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n-Special class for optional Jacobian arguments.\n-_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-Define ParameterMatrix class which is used to store values at interpolation\n-points.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bk_\br_\bo_\bn_\be_\bc_\bk_\be_\br_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-Matrix kroneckerProductIdentity(const Weights &w)\n-Function for computing the kronecker product of the 1*N Weight vector w with\n-the MxM identity matrix ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:85\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+_\b2_\b7class _\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs : public _\bB_\ba_\bs_\bi_\bs {\n+28 public:\n+29 using Parameters = Eigen::Matrix;\n+30 using DiffMatrix = Eigen::Matrix;\n+31\n+_\b4_\b0 static Weights _\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(size_t N, double x) {\n+41 Weights b(N);\n+42 b[0] = 1;\n+43 for (size_t i = 1, n = 1; i < N; i++) {\n+44 if (i % 2 == 1) {\n+45 b[i] = cos(n * x);\n+46 } else {\n+47 b[i] = sin(n * x);\n+48 n++;\n+49 }\n+50 }\n+51 return b;\n+52 }\n+53\n+_\b6_\b4 static Weights _\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(size_t N, double x, double a, double b) {\n+65 // TODO(Varun) How do we enforce an interval for Fourier series?\n+66 return _\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(N, x);\n+67 }\n+68\n+_\b7_\b3 static DiffMatrix _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx(size_t N) {\n+74 DiffMatrix D = DiffMatrix::Zero(N, N);\n+75 double k = 1;\n+76 for (size_t i = 1; i < N; i += 2) {\n+77 D(i, i + 1) = k; // sin'(k*x) = k*cos(k*x)\n+78 D(i + 1, i) = -k; // cos'(k*x) = -k*sin(k*x)\n+79 k += 1;\n+80 }\n+81\n+82 return D;\n+83 }\n+84\n+_\b9_\b2 static Weights _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(size_t N, double x) {\n+93 return _\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(N, x) * _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx(N);\n+94 }\n+95\n+_\b1_\b0_\b6 static Weights _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(size_t N, double x, double a, double b) {\n+107 return _\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(N, x, a, b) * _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx(N);\n+108 }\n+109\n+110}; // FourierBasis\n+111\n+112} // namespace gtsam\n+_\bB_\ba_\bs_\bi_\bs_\b._\bh\n+Compute an interpolating basis.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs\n CRTP Base class for function bases.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt_\bM_\ba_\bt_\br_\bi_\bx\n-static Matrix WeightMatrix(size_t N, const Vector &X, double a, double b)\n-Calculate weights for all x in vector X, with interval [a,b].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt_\bM_\ba_\bt_\br_\bi_\bx\n-static Matrix WeightMatrix(size_t N, const Vector &X)\n-Calculate weights for all x in vector X.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-An instance of an EvaluationFunctor calculates f(x;p) at a given x, applied to\n-Parameters p.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-EvaluationFunctor(size_t N, double x)\n-Constructor with interval [a,b].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:146\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-EvaluationFunctor(size_t N, double x, double a, double b)\n-Constructor with interval [a,b].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-double apply(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -1 >\n-H=boost::none) const\n-Regular 1D evaluation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-EvaluationFunctor()\n-For serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:143\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-double operator()(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -\n-1 > H=boost::none) const\n-c++ sugar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-VectorEvaluationFunctor at a given x, applied to ParameterMatrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:178\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-VectorEvaluationFunctor(size_t N, double x, double a, double b)\n-Constructor, with interval [a,b].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:208\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-EIGEN_MAKE_ALIGNED_OPERATOR_NEW VectorEvaluationFunctor()\n-For serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:200\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-VectorEvaluationFunctor(size_t N, double x)\n-Default Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:203\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-void calculateJacobian()\n-Calculate the M*(M*N) Jacobian of this functor with respect to the M*N\n-parameter matrix P.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-VectorM operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n-H=boost::none) const\n-c++ sugar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:221\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-VectorM apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n-H=boost::none) const\n-M-dimensional evaluation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:214\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-Given a M*N Matrix of M-vectors at N polynomial points, an instance of\n-VectorComponentFunctor compute...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:235\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-double operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n-H=boost::none) const\n-c++ sugar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:280\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-VectorComponentFunctor()\n-For serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:258\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-VectorComponentFunctor(size_t N, size_t i, double x)\n-Construct with row index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:261\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-VectorComponentFunctor(size_t N, size_t i, double x, double a, double b)\n-Construct with row index and interval.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:267\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-double apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n-H=boost::none) const\n-Calculate component of component rowIndex_ of P.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:273\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-Manifold EvaluationFunctor at a given x, applied to ParameterMatrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:301\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-ManifoldEvaluationFunctor(size_t N, double x, double a, double b)\n-Constructor, with interval [a,b].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:313\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-T apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::\n-none) const\n-Manifold evaluation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:317\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-ManifoldEvaluationFunctor()\n-For serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:307\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-ManifoldEvaluationFunctor(size_t N, double x)\n-Default Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:310\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-T operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n-H=boost::none) const\n-c++ sugar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:336\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n-Base class for functors below that calculate derivative weights.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:343\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n-DerivativeFunctorBase()\n-For serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:349\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-An instance of a DerivativeFunctor calculates f'(x;p) at a given x, applied to\n-Parameters p.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:369\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-DerivativeFunctor()\n-For serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:372\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-double operator()(const typename DERIVED::Parameters &p, OptionalJacobian< -1,\n--1 > H=boost::none) const\n-c++ sugar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:385\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-VectorDerivativeFunctor at a given x, applied to ParameterMatrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-void calculateJacobian()\n-Calculate the M*(M*N) Jacobian of this functor with respect to the M*N\n-parameter matrix P.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:414\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-VectorDerivativeFunctor(size_t N, double x, double a, double b)\n-Constructor, with optional interval [a,b].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:430\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-VectorM operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n-H=boost::none) const\n-c++ sugar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:441\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-EIGEN_MAKE_ALIGNED_OPERATOR_NEW VectorDerivativeFunctor()\n-For serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:422\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-VectorDerivativeFunctor(size_t N, double x)\n-Default Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:425\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-Given a M*N Matrix of M-vectors at N polynomial points, an instance of\n-ComponentDerivativeFunctor com...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:456\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-ComponentDerivativeFunctor(size_t N, size_t i, double x)\n-Construct with row index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:482\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-double operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n-H=boost::none) const\n-c++ sugar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:499\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-ComponentDerivativeFunctor()\n-For serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:479\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-ComponentDerivativeFunctor(size_t N, size_t i, double x, double a, double b)\n-Construct with row index and interval.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:488\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-double apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n-H=boost::none) const\n-Calculate derivative of component rowIndex_ of F.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:493\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx\n-A matrix abstraction of MxN values at the Basis points.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs\n+Fourier basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx\n+static DiffMatrix DifferentiationMatrix(size_t N)\n+Compute D = differentiation matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+static Weights DerivativeWeights(size_t N, double x)\n+Get weights at a given x that calculate the derivative.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+static Weights CalculateWeights(size_t N, double x)\n+Evaluate Real Fourier Weights of size N in interval [a, b], e.g.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+static Weights DerivativeWeights(size_t N, double x, double a, double b)\n+Get derivative weights at a given x that calculate the derivative, in the\n+interval [a,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+static Weights CalculateWeights(size_t N, double x, double a, double b)\n+Evaluate Real Fourier Weights of size N in interval [a, b], e.g.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:64\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bB_\ba_\bs_\bi_\bs_\b._\bh\n+ * _\bF_\bo_\bu_\br_\bi_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00161.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00161.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Fourier.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/ParameterMatrix.h File Reference\n \n \n \n \n \n \n \n@@ -95,44 +95,54 @@\n \n \n \n \n
\n \n-
Fourier.h File Reference
\n+Namespaces |\n+Functions
\n+
ParameterMatrix.h File Reference
\n \n
\n \n-

Fourier decomposition, see e.g. \n+

Define ParameterMatrix class which is used to store values at interpolation points. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::FourierBasis
 Fourier basis. More...
class  gtsam::ParameterMatrix< M >
 A matrix abstraction of MxN values at the Basis points. More...
 
struct  gtsam::traits< ParameterMatrix< M > >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Functions

\n+template<int M>
std::ostream & gtsam::operator<< (std::ostream &os, const ParameterMatrix< M > &parameterMatrix)
 
\n

Detailed Description

\n-

Fourier decomposition, see e.g.

\n-

http://mathworld.wolfram.com/FourierSeries.html

Author
Varun Agrawal, Frank Dellaert
\n-
Date
July 4, 2020
\n+

Define ParameterMatrix class which is used to store values at interpolation points.

\n+
Author
Varun Agrawal, Frank Dellaert
\n+
Date
September 21, 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,36 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Fourier.h File Reference\n-Fourier decomposition, see e.g. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ParameterMatrix.h File Reference\n+Define ParameterMatrix class which is used to store values at interpolation\n+points. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs\n-\u00a0 Fourier basis. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bM_\b _\b>\n+\u00a0 A matrix abstraction of MxN values at the _\bB_\ba_\bs_\bi_\bs points. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\b _\bM_\b _\b>_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx< M >\n+ ¶meterMatrix)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Fourier decomposition, see e.g.\n-_\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bm_\ba_\bt_\bh_\bw_\bo_\br_\bl_\bd_\b._\bw_\bo_\bl_\bf_\br_\ba_\bm_\b._\bc_\bo_\bm_\b/_\bF_\bo_\bu_\br_\bi_\be_\br_\bS_\be_\br_\bi_\be_\bs_\b._\bh_\bt_\bm_\bl\n+Define ParameterMatrix class which is used to store values at interpolation\n+points.\n Author\n Varun Agrawal, Frank Dellaert\n Date\n- July 4, 2020\n+ September 21, 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bF_\bo_\bu_\br_\bi_\be_\br_\b._\bh\n+ * _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00161.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00161.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00161 = [\n- [\"gtsam::FourierBasis\", \"a02748.html\", null]\n+ [\"gtsam::ParameterMatrix< M >\", \"a02752.html\", \"a02752\"],\n+ [\"gtsam::traits< ParameterMatrix< M > >\", \"a02756.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00161_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00161_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Fourier.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/ParameterMatrix.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
Fourier.h
\n+
ParameterMatrix.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,90 +114,192 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
20#pragma once
\n
21
\n-
22#include <gtsam/basis/Basis.h>
\n-
23
\n-
24namespace gtsam {
\n+
22#include <gtsam/base/Matrix.h>
\n+
23#include <gtsam/base/Testable.h>
\n+
24#include <gtsam/base/VectorSpace.h>
\n
25
\n-
\n-
27class FourierBasis : public Basis<FourierBasis> {
\n-
28 public:
\n-
29 using Parameters = Eigen::Matrix<double, /*Nx1*/ -1, 1>;
\n-
30 using DiffMatrix = Eigen::Matrix<double, /*NxN*/ -1, -1>;
\n-
31
\n-
\n-
40 static Weights CalculateWeights(size_t N, double x) {
\n-
41 Weights b(N);
\n-
42 b[0] = 1;
\n-
43 for (size_t i = 1, n = 1; i < N; i++) {
\n-
44 if (i % 2 == 1) {
\n-
45 b[i] = cos(n * x);
\n-
46 } else {
\n-
47 b[i] = sin(n * x);
\n-
48 n++;
\n-
49 }
\n-
50 }
\n-
51 return b;
\n-
52 }
\n-
\n-
53
\n-
\n-
64 static Weights CalculateWeights(size_t N, double x, double a, double b) {
\n-
65 // TODO(Varun) How do we enforce an interval for Fourier series?
\n-
66 return CalculateWeights(N, x);
\n-
67 }
\n-
\n-
68
\n-
\n-
73 static DiffMatrix DifferentiationMatrix(size_t N) {
\n-
74 DiffMatrix D = DiffMatrix::Zero(N, N);
\n-
75 double k = 1;
\n-
76 for (size_t i = 1; i < N; i += 2) {
\n-
77 D(i, i + 1) = k; // sin'(k*x) = k*cos(k*x)
\n-
78 D(i + 1, i) = -k; // cos'(k*x) = -k*sin(k*x)
\n-
79 k += 1;
\n-
80 }
\n-
81
\n-
82 return D;
\n-
83 }
\n-
\n-
84
\n-
\n-
92 static Weights DerivativeWeights(size_t N, double x) {
\n-\n-
94 }
\n-
\n-
95
\n-
\n-
106 static Weights DerivativeWeights(size_t N, double x, double a, double b) {
\n-
107 return CalculateWeights(N, x, a, b) * DifferentiationMatrix(N);
\n-
108 }
\n+
26#include <iostream>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
37template <int M>
\n+
\n+\n+
39 using MatrixType = Eigen::Matrix<double, M, -1>;
\n+
40
\n+
41 private:
\n+
42 MatrixType matrix_;
\n+
43
\n+
44 public:
\n+
45 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n+
46
\n+
47 enum { dimension = Eigen::Dynamic };
\n+
48
\n+
53 ParameterMatrix(const size_t N) : matrix_(M, N) { matrix_.setZero(); }
\n+
54
\n+
59 ParameterMatrix(const MatrixType& matrix) : matrix_(matrix) {}
\n+
60
\n+
62 size_t rows() const { return matrix_.rows(); }
\n+
63
\n+
65 size_t cols() const { return matrix_.cols(); }
\n+
66
\n+
68 MatrixType matrix() const { return matrix_; }
\n+
69
\n+
71 Eigen::Matrix<double, -1, M> transpose() const { return matrix_.transpose(); }
\n+
72
\n+
\n+
77 Eigen::Matrix<double, 1, -1> row(size_t index) const {
\n+
78 return matrix_.row(index);
\n+
79 }
\n+
\n+
80
\n+
\n+
85 auto row(size_t index) -> Eigen::Block<MatrixType, 1, -1, false> {
\n+
86 return matrix_.row(index);
\n+
87 }
\n+
\n+
88
\n+
\n+
93 Eigen::Matrix<double, M, 1> col(size_t index) const {
\n+
94 return matrix_.col(index);
\n+
95 }
\n+
\n+
96
\n+
\n+
101 auto col(size_t index) -> Eigen::Block<MatrixType, M, 1, true> {
\n+
102 return matrix_.col(index);
\n+
103 }
\n
\n+
104
\n+
108 void setZero() { matrix_.setZero(); }
\n
109
\n-
110}; // FourierBasis
\n-
\n-
111
\n-
112} // namespace gtsam
\n-
Compute an interpolating basis.
\n+
\n+\n+
115 return ParameterMatrix<M>(matrix_ + other.matrix());
\n+
116 }
\n+
\n+
117
\n+
\n+\n+
123 const Eigen::Matrix<double, -1, 1>& other) const {
\n+
124 // This form avoids a deep copy and instead typecasts `other`.
\n+
125 Eigen::Map<const MatrixType> other_(other.data(), M, cols());
\n+
126 return ParameterMatrix<M>(matrix_ + other_);
\n+
127 }
\n+
\n+
128
\n+
\n+\n+
134 return ParameterMatrix<M>(matrix_ - other.matrix());
\n+
135 }
\n+
\n+
136
\n+
\n+\n+
142 const Eigen::Matrix<double, -1, 1>& other) const {
\n+
143 Eigen::Map<const MatrixType> other_(other.data(), M, cols());
\n+
144 return ParameterMatrix<M>(matrix_ - other_);
\n+
145 }
\n+
\n+
146
\n+
\n+
152 MatrixType operator*(const Eigen::Matrix<double, -1, -1>& other) const {
\n+
153 return matrix_ * other;
\n+
154 }
\n+
\n+
155
\n+
158
\n+
\n+
163 void print(const std::string& s = "") const {
\n+
164 std::cout << (s == "" ? s : s + " ") << matrix_ << std::endl;
\n+
165 }
\n+
\n+
166
\n+
\n+
172 bool equals(const ParameterMatrix<M>& other, double tol = 1e-8) const {
\n+
173 return gtsam::equal_with_abs_tol(matrix_, other.matrix(), tol);
\n+
174 }
\n+
\n+
175
\n+
177 inline size_t dim() const { return matrix_.size(); }
\n+
178
\n+
\n+
180 inline Vector vector() const {
\n+
181 using RowMajor = Eigen::Matrix<double, -1, -1, Eigen::RowMajor>;
\n+
182 Vector result(matrix_.size());
\n+
183 Eigen::Map<RowMajor>(&result(0), rows(), cols()) = matrix_;
\n+
184 return result;
\n+
185 }
\n+
\n+
186
\n+
\n+
192 inline static ParameterMatrix Identity() {
\n+
193 // throw std::runtime_error(
\n+
194 // "ParameterMatrix::Identity(): Don't use this function");
\n+
195 return ParameterMatrix(0);
\n+
196 }
\n+
\n+
197
\n+
199};
\n+
\n+
200
\n+
201// traits for ParameterMatrix
\n+
202template <int M>
\n+
\n+\n+
204 : public internal::VectorSpace<ParameterMatrix<M>> {};
\n+
\n+
205
\n+
206/* ************************************************************************* */
\n+
207// Stream operator that takes a ParameterMatrix. Used for printing.
\n+
208template <int M>
\n+
209inline std::ostream& operator<<(std::ostream& os,
\n+
210 const ParameterMatrix<M>& parameterMatrix) {
\n+
211 os << parameterMatrix.matrix();
\n+
212 return os;
\n+
213}
\n+
214
\n+
215} // namespace gtsam
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Concept check for values that can be used in unit tests.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
CRTP Base class for function bases.
Definition Basis.h:100
\n-
Fourier basis.
Definition Fourier.h:27
\n-
static DiffMatrix DifferentiationMatrix(size_t N)
Compute D = differentiation matrix.
Definition Fourier.h:73
\n-
static Weights DerivativeWeights(size_t N, double x)
Get weights at a given x that calculate the derivative.
Definition Fourier.h:92
\n-
static Weights CalculateWeights(size_t N, double x)
Evaluate Real Fourier Weights of size N in interval [a, b], e.g.
Definition Fourier.h:40
\n-
static Weights DerivativeWeights(size_t N, double x, double a, double b)
Get derivative weights at a given x that calculate the derivative, in the interval [a,...
Definition Fourier.h:106
\n-
static Weights CalculateWeights(size_t N, double x, double a, double b)
Evaluate Real Fourier Weights of size N in interval [a, b], e.g.
Definition Fourier.h:64
\n+
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
VectorSpace provides both Testable and VectorSpaceTraits.
Definition VectorSpace.h:207
\n+
A matrix abstraction of MxN values at the Basis points.
Definition ParameterMatrix.h:38
\n+
MatrixType operator*(const Eigen::Matrix< double, -1, -1 > &other) const
Multiply ParameterMatrix with an Eigen matrix.
Definition ParameterMatrix.h:152
\n+
ParameterMatrix< M > operator-(const Eigen::Matrix< double, -1, 1 > &other) const
Subtract a MxN-sized vector from the ParameterMatrix.
Definition ParameterMatrix.h:141
\n+
Eigen::Matrix< double, 1, -1 > row(size_t index) const
Get the matrix row specified by index.
Definition ParameterMatrix.h:77
\n+
ParameterMatrix(const size_t N)
Create ParameterMatrix using the number of basis points.
Definition ParameterMatrix.h:53
\n+
static ParameterMatrix Identity()
Identity function to satisfy VectorSpace traits.
Definition ParameterMatrix.h:192
\n+
void setZero()
Set all matrix coefficients to zero.
Definition ParameterMatrix.h:108
\n+
MatrixType matrix() const
Get the underlying matrix.
Definition ParameterMatrix.h:68
\n+
ParameterMatrix(const MatrixType &matrix)
Create ParameterMatrix from an MxN Eigen Matrix.
Definition ParameterMatrix.h:59
\n+
Eigen::Matrix< double, M, 1 > col(size_t index) const
Get the matrix column specified by index.
Definition ParameterMatrix.h:93
\n+
Vector vector() const
Convert to vector form, is done row-wise.
Definition ParameterMatrix.h:180
\n+
bool equals(const ParameterMatrix< M > &other, double tol=1e-8) const
Check for equality up to absolute tolerance.
Definition ParameterMatrix.h:172
\n+
ParameterMatrix< M > operator+(const ParameterMatrix< M > &other) const
Add a ParameterMatrix to another.
Definition ParameterMatrix.h:114
\n+
size_t rows() const
Get the number of rows.
Definition ParameterMatrix.h:62
\n+
auto row(size_t index) -> Eigen::Block< MatrixType, 1, -1, false >
Set the matrix row specified by index.
Definition ParameterMatrix.h:85
\n+
void print(const std::string &s="") const
Print the ParameterMatrix.
Definition ParameterMatrix.h:163
\n+
auto col(size_t index) -> Eigen::Block< MatrixType, M, 1, true >
Set the matrix column specified by index.
Definition ParameterMatrix.h:101
\n+
ParameterMatrix< M > operator+(const Eigen::Matrix< double, -1, 1 > &other) const
Add a MxN-sized vector to the ParameterMatrix.
Definition ParameterMatrix.h:122
\n+
ParameterMatrix< M > operator-(const ParameterMatrix< M > &other) const
Subtract a ParameterMatrix from another.
Definition ParameterMatrix.h:133
\n+
size_t dim() const
Returns dimensionality of the tangent space.
Definition ParameterMatrix.h:177
\n+
size_t cols() const
Get the number of columns.
Definition ParameterMatrix.h:65
\n+
Eigen::Matrix< double, -1, M > transpose() const
Return the tranpose of the underlying matrix.
Definition ParameterMatrix.h:71
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Fourier.h\n+ParameterMatrix.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,94 +16,237 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 20#pragma once\n 21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+24#include \n 25\n-_\b2_\b7class _\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs : public _\bB_\ba_\bs_\bi_\bs {\n-28 public:\n-29 using Parameters = Eigen::Matrix;\n-30 using DiffMatrix = Eigen::Matrix;\n-31\n-_\b4_\b0 static Weights _\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(size_t N, double x) {\n-41 Weights b(N);\n-42 b[0] = 1;\n-43 for (size_t i = 1, n = 1; i < N; i++) {\n-44 if (i % 2 == 1) {\n-45 b[i] = cos(n * x);\n-46 } else {\n-47 b[i] = sin(n * x);\n-48 n++;\n-49 }\n-50 }\n-51 return b;\n-52 }\n-53\n-_\b6_\b4 static Weights _\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(size_t N, double x, double a, double b) {\n-65 // TODO(Varun) How do we enforce an interval for Fourier series?\n-66 return _\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(N, x);\n-67 }\n-68\n-_\b7_\b3 static DiffMatrix _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx(size_t N) {\n-74 DiffMatrix D = DiffMatrix::Zero(N, N);\n-75 double k = 1;\n-76 for (size_t i = 1; i < N; i += 2) {\n-77 D(i, i + 1) = k; // sin'(k*x) = k*cos(k*x)\n-78 D(i + 1, i) = -k; // cos'(k*x) = -k*sin(k*x)\n-79 k += 1;\n-80 }\n-81\n-82 return D;\n-83 }\n-84\n-_\b9_\b2 static Weights _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(size_t N, double x) {\n-93 return _\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(N, x) * _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx(N);\n-94 }\n-95\n-_\b1_\b0_\b6 static Weights _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(size_t N, double x, double a, double b) {\n-107 return _\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(N, x, a, b) * _\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx(N);\n-108 }\n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+37template \n+_\b3_\b8class _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx {\n+39 using MatrixType = Eigen::Matrix;\n+40\n+41 private:\n+42 MatrixType matrix_;\n+43\n+44 public:\n+45 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n+46\n+47 enum { dimension = Eigen::Dynamic };\n+48\n+_\b5_\b3 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx(const size_t N) : matrix_(M, N) { matrix_.setZero(); }\n+54\n+_\b5_\b9 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx(const MatrixType& _\bm_\ba_\bt_\br_\bi_\bx) : matrix_(_\bm_\ba_\bt_\br_\bi_\bx) {}\n+60\n+_\b6_\b2 size_t _\br_\bo_\bw_\bs() const { return matrix_.rows(); }\n+63\n+_\b6_\b5 size_t _\bc_\bo_\bl_\bs() const { return matrix_.cols(); }\n+66\n+_\b6_\b8 MatrixType _\bm_\ba_\bt_\br_\bi_\bx() const { return matrix_; }\n+69\n+_\b7_\b1 Eigen::Matrix _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be() const { return matrix_.transpose();\n+}\n+72\n+_\b7_\b7 Eigen::Matrix _\br_\bo_\bw(size_t index) const {\n+78 return matrix_.row(index);\n+79 }\n+80\n+_\b8_\b5 auto _\br_\bo_\bw(size_t index) -> Eigen::Block {\n+86 return matrix_.row(index);\n+87 }\n+88\n+_\b9_\b3 Eigen::Matrix _\bc_\bo_\bl(size_t index) const {\n+94 return matrix_.col(index);\n+95 }\n+96\n+_\b1_\b0_\b1 auto _\bc_\bo_\bl(size_t index) -> Eigen::Block {\n+102 return matrix_.col(index);\n+103 }\n+104\n+_\b1_\b0_\b8 void _\bs_\be_\bt_\bZ_\be_\br_\bo() { matrix_.setZero(); }\n 109\n-110}; // FourierBasis\n-111\n-112} // namespace gtsam\n-_\bB_\ba_\bs_\bi_\bs_\b._\bh\n-Compute an interpolating basis.\n+_\b1_\b1_\b4 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& other) const {\n+115 return _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>(matrix_ + other._\bm_\ba_\bt_\br_\bi_\bx());\n+116 }\n+117\n+_\b1_\b2_\b2 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(\n+123 const Eigen::Matrix& other) const {\n+124 // This form avoids a deep copy and instead typecasts `other`.\n+125 Eigen::Map other_(other.data(), M, _\bc_\bo_\bl_\bs());\n+126 return _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>(matrix_ + other_);\n+127 }\n+128\n+_\b1_\b3_\b3 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& other) const {\n+134 return _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>(matrix_ - other._\bm_\ba_\bt_\br_\bi_\bx());\n+135 }\n+136\n+_\b1_\b4_\b1 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(\n+142 const Eigen::Matrix& other) const {\n+143 Eigen::Map other_(other.data(), M, _\bc_\bo_\bl_\bs());\n+144 return _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>(matrix_ - other_);\n+145 }\n+146\n+_\b1_\b5_\b2 MatrixType _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const Eigen::Matrix& other) const {\n+153 return matrix_ * other;\n+154 }\n+155\n+158\n+_\b1_\b6_\b3 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const {\n+164 std::cout << (s == \"\" ? s : s + \" \") << matrix_ << std::endl;\n+165 }\n+166\n+_\b1_\b7_\b2 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& other, double tol = 1e-8) const {\n+173 return _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(matrix_, other._\bm_\ba_\bt_\br_\bi_\bx(), tol);\n+174 }\n+175\n+_\b1_\b7_\b7 inline size_t _\bd_\bi_\bm() const { return matrix_.size(); }\n+178\n+_\b1_\b8_\b0 inline Vector _\bv_\be_\bc_\bt_\bo_\br() const {\n+181 using RowMajor = Eigen::Matrix;\n+182 Vector result(matrix_.size());\n+183 Eigen::Map(&result(0), _\br_\bo_\bw_\bs(), _\bc_\bo_\bl_\bs()) = matrix_;\n+184 return result;\n+185 }\n+186\n+_\b1_\b9_\b2 inline static _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n+193 // throw std::runtime_error(\n+194 // \"ParameterMatrix::Identity(): Don't use this function\");\n+195 return _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx(0);\n+196 }\n+197\n+199};\n+200\n+201// traits for ParameterMatrix\n+202template \n+_\b2_\b0_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx>\n+204 : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be> {};\n+205\n+206/* *************************************************************************\n+*/\n+207// Stream operator that takes a ParameterMatrix. Used for printing.\n+208template \n+209inline std::ostream& operator<<(std::ostream& os,\n+210 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& parameterMatrix) {\n+211 os << parameterMatrix._\bm_\ba_\bt_\br_\bi_\bx();\n+212 return os;\n+213}\n+214\n+215} // namespace gtsam\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs\n-CRTP Base class for function bases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs\n-Fourier basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\bi_\bf_\bf_\be_\br_\be_\bn_\bt_\bi_\ba_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx\n-static DiffMatrix DifferentiationMatrix(size_t N)\n-Compute D = differentiation matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-static Weights DerivativeWeights(size_t N, double x)\n-Get weights at a given x that calculate the derivative.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-static Weights CalculateWeights(size_t N, double x)\n-Evaluate Real Fourier Weights of size N in interval [a, b], e.g.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-static Weights DerivativeWeights(size_t N, double x, double a, double b)\n-Get derivative weights at a given x that calculate the derivative, in the\n-interval [a,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bo_\bu_\br_\bi_\be_\br_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-static Weights CalculateWeights(size_t N, double x, double a, double b)\n-Evaluate Real Fourier Weights of size N in interval [a, b], e.g.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Fourier.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n+bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n+DenseBase< MATRIX > &B, double tol=1e-9)\n+equals with a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be\n+VectorSpace provides both Testable and VectorSpaceTraits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx\n+A matrix abstraction of MxN values at the Basis points.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+MatrixType operator*(const Eigen::Matrix< double, -1, -1 > &other) const\n+Multiply ParameterMatrix with an Eigen matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+ParameterMatrix< M > operator-(const Eigen::Matrix< double, -1, 1 > &other)\n+const\n+Subtract a MxN-sized vector from the ParameterMatrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw\n+Eigen::Matrix< double, 1, -1 > row(size_t index) const\n+Get the matrix row specified by index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx\n+ParameterMatrix(const size_t N)\n+Create ParameterMatrix using the number of basis points.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static ParameterMatrix Identity()\n+Identity function to satisfy VectorSpace traits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bZ_\be_\br_\bo\n+void setZero()\n+Set all matrix coefficients to zero.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+MatrixType matrix() const\n+Get the underlying matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx\n+ParameterMatrix(const MatrixType &matrix)\n+Create ParameterMatrix from an MxN Eigen Matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl\n+Eigen::Matrix< double, M, 1 > col(size_t index) const\n+Get the matrix column specified by index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+Vector vector() const\n+Convert to vector form, is done row-wise.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const ParameterMatrix< M > &other, double tol=1e-8) const\n+Check for equality up to absolute tolerance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:172\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+ParameterMatrix< M > operator+(const ParameterMatrix< M > &other) const\n+Add a ParameterMatrix to another.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n+size_t rows() const\n+Get the number of rows.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw\n+auto row(size_t index) -> Eigen::Block< MatrixType, 1, -1, false >\n+Set the matrix row specified by index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\") const\n+Print the ParameterMatrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl\n+auto col(size_t index) -> Eigen::Block< MatrixType, M, 1, true >\n+Set the matrix column specified by index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+ParameterMatrix< M > operator+(const Eigen::Matrix< double, -1, 1 > &other)\n+const\n+Add a MxN-sized vector to the ParameterMatrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:122\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+ParameterMatrix< M > operator-(const ParameterMatrix< M > &other) const\n+Subtract a ParameterMatrix from another.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:133\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+Returns dimensionality of the tangent space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n+size_t cols() const\n+Get the number of columns.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be\n+Eigen::Matrix< double, -1, M > transpose() const\n+Return the tranpose of the underlying matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:71\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bF_\bo_\bu_\br_\bi_\be_\br_\b._\bh\n+ * _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00164.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00164.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev2.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,35 +95,35 @@\n \n \n \n \n
\n \n-
Chebyshev.cpp File Reference
\n+
Chebyshev2.cpp File Reference
\n
\n
\n \n-

Chebyshev basis decompositions. \n+

Chebyshev parameterizations on Chebyshev points of second kind. \n More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Chebyshev basis decompositions.

\n+

Chebyshev parameterizations on Chebyshev points of second kind.

\n
Author
Varun Agrawal, Jing Dong, Frank Dellaert
\n
Date
July 4, 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Chebyshev.cpp File Reference\n-Chebyshev basis decompositions. _\bM_\bo_\br_\be_\b._\b._\b.\n+Chebyshev2.cpp File Reference\n+Chebyshev parameterizations on Chebyshev points of second kind. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Chebyshev basis decompositions.\n+Chebyshev parameterizations on Chebyshev points of second kind.\n Author\n Varun Agrawal, Jing Dong, Frank Dellaert\n Date\n July 4, 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b._\bc_\bp_\bp\n+ * _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00167.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00167.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/FitBasis.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,57 +94,36 @@\n \n \n \n \n \n
\n \n-
FitBasis.h File Reference
\n+Namespaces
\n+
Chebyshev.cpp File Reference
\n \n
\n \n-

Fit a Basis using least-squares. \n+

Chebyshev basis decompositions. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::FitBasis< Basis >
 Class that does regression via least squares Example usage: size_t N = 3; auto fit = FitBasis<Chebyshev2>(data_points, noise_model, N); Vector coefficients = fit.parameters();. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n

\n-Typedefs

\n-using gtsam::Sequence = std::map< double, double >
 Our sequence representation is a map of {x: y} values where y = f(x)
 
\n-using gtsam::Sample = std::pair< double, double >
 A sample is a key-value pair from a sequence.
 
\n

Detailed Description

\n-

Fit a Basis using least-squares.

\n+

Chebyshev basis decompositions.

\n+
Author
Varun Agrawal, Jing Dong, Frank Dellaert
\n
Date
July 4, 2020
\n-
Author
Varun Agrawal, Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,36 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-FitBasis.h File Reference\n-Fit a Basis using least-squares. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bB_\ba_\bs_\bi_\bs_\b _\b>\n- Class that does regression via least squares Example usage: size_t N =\n-\u00a0 3; auto fit = FitBasis(data_points, noise_model, N); Vector\n- coefficients = fit.parameters();. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Chebyshev.cpp File Reference\n+Chebyshev basis decompositions. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSe\beq\bqu\bue\ben\bnc\bce\be = std::map< double, double >\n-\u00a0 Our sequence representation is a map of {x: y} values where y = f(x)\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSa\bam\bmp\bpl\ble\be = std::pair< double, double >\n-\u00a0 A sample is a key-value pair from a sequence.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Fit a Basis using least-squares.\n+Chebyshev basis decompositions.\n+ Author\n+ Varun Agrawal, Jing Dong, Frank Dellaert\n Date\n July 4, 2020\n- Author\n- Varun Agrawal, Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs_\b._\bh\n+ * _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00170.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00170.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev2.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,63 @@\n \n \n \n \n \n
\n \n-
Chebyshev2.cpp File Reference
\n+
BasisFactors.h File Reference
\n
\n
\n \n-

Chebyshev parameterizations on Chebyshev points of second kind. \n+

Factor definitions for various Basis functors. \n More...

\n+\n+

Go to the source code of this file.

\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+Classes

class  gtsam::EvaluationFactor< BASIS >
 Factor for enforcing the scalar value of the polynomial BASIS representation at x is the same as the measurement z when using a pseudo-spectral parameterization. More...
 
class  gtsam::VectorEvaluationFactor< BASIS, M >
 Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of size (M, N) is equal to a vector-valued measurement at the same point, when using a pseudo-spectral parameterization. More...
 
class  gtsam::VectorComponentFactor< BASIS, P >
 Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of size (P, N) is equal to specified measurement at the same point, when using a pseudo-spectral parameterization. More...
 
class  gtsam::ManifoldEvaluationFactor< BASIS, T >
 For a measurement value of type T i.e. More...
 
class  gtsam::DerivativeFactor< BASIS >
 A unary factor which enforces the evaluation of the derivative of a BASIS polynomial at a specified pointx is equal to the scalar measurement z. More...
 
class  gtsam::VectorDerivativeFactor< BASIS, M >
 A unary factor which enforces the evaluation of the derivative of a BASIS polynomial at a specified point x is equal to the vector value z. More...
 
class  gtsam::ComponentDerivativeFactor< BASIS, P >
 A unary factor which enforces the evaluation of the derivative of a BASIS polynomial is equal to the scalar value at a specific index i of a vector-valued measurement z. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Chebyshev parameterizations on Chebyshev points of second kind.

\n-
Author
Varun Agrawal, Jing Dong, Frank Dellaert
\n+

Factor definitions for various Basis functors.

\n+
Author
Varun Agrawal
\n
Date
July 4, 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,58 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Chebyshev2.cpp File Reference\n-Chebyshev parameterizations on Chebyshev points of second kind. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+BasisFactors.h File Reference\n+Factor definitions for various Basis functors. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b _\b>\n+ _\bF_\ba_\bc_\bt_\bo_\br for enforcing the scalar value of the polynomial BASIS\n+\u00a0 representation at x is the same as the measurement z when using a\n+ pseudo-spectral parameterization. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b,_\b _\bM_\b _\b>\n+ Unary factor for enforcing BASIS polynomial evaluation on a\n+\u00a0 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx of size (M, N) is equal to a vector-valued measurement\n+ at the same point, when using a pseudo-spectral parameterization.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b,_\b _\bP_\b _\b>\n+ Unary factor for enforcing BASIS polynomial evaluation on a\n+\u00a0 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx of size (P, N) is equal to specified measurement at the\n+ same point, when using a pseudo-spectral parameterization. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b,_\b _\bT_\b _\b>\n+\u00a0 For a measurement value of type T i.e. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b _\b>\n+ A unary factor which enforces the evaluation of the derivative of a\n+\u00a0 BASIS polynomial at a specified pointx is equal to the scalar\n+ measurement z. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b,_\b _\bM_\b _\b>\n+ A unary factor which enforces the evaluation of the derivative of a\n+\u00a0 BASIS polynomial at a specified point x is equal to the vector value z.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b,_\b _\bP_\b _\b>\n+ A unary factor which enforces the evaluation of the derivative of a\n+\u00a0 BASIS polynomial is equal to the scalar value at a specific index i of\n+ a vector-valued measurement z. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Chebyshev parameterizations on Chebyshev points of second kind.\n+Factor definitions for various Basis functors.\n Author\n- Varun Agrawal, Jing Dong, Frank Dellaert\n+ Varun Agrawal\n Date\n July 4, 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bC_\bh_\be_\bb_\by_\bs_\bh_\be_\bv_\b2_\b._\bc_\bp_\bp\n+ * _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00173_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00173_source.html", "unified_diff": "@@ -114,17 +114,17 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
33#pragma once
\n
34
\n-
35#include <gtsam/base/Manifold.h>
\n-\n-
37#include <gtsam/basis/Basis.h>
\n+
35#include <gtsam/base/Manifold.h>
\n+\n+
37#include <gtsam/basis/Basis.h>
\n
38
\n
39namespace gtsam {
\n
40
\n
\n
46class GTSAM_EXPORT Chebyshev2 : public Basis<Chebyshev2> {
\n
47 public:
\n
48 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n@@ -191,17 +191,17 @@\n
141 return Xmat;
\n
142 }
\n
\n
143}; // \\ Chebyshev2
\n \n
144
\n
145} // namespace gtsam
\n-
Base class and basic functions for Manifold types.
\n-
Special class for optional Jacobian arguments.
\n-
Compute an interpolating basis.
\n+
Base class and basic functions for Manifold types.
\n+
Special class for optional Jacobian arguments.
\n+
Compute an interpolating basis.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
CRTP Base class for function bases.
Definition Basis.h:100
\n
Chebyshev Interpolation on Chebyshev points of the second kind Note that N here, the number of points...
Definition Chebyshev2.h:46
\n
static double Point(size_t N, int j)
Specific Chebyshev point.
Definition Chebyshev2.h:55
\n
static double Point(size_t N, int j, double a, double b)
Specific Chebyshev point, within [a,b] interval.
Definition Chebyshev2.h:64
\n
static Vector Points(size_t N)
All Chebyshev points.
Definition Chebyshev2.h:72
\n
static Vector Points(size_t N, double a, double b)
All Chebyshev points, within [a,b] interval.
Definition Chebyshev2.h:79
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00176.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00176.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h File Reference\n \n \n \n \n \n \n \n@@ -95,62 +95,83 @@\n \n \n \n \n
\n \n-
BasisFactors.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
Basis.h File Reference
\n \n
\n \n-

Factor definitions for various Basis functors. \n+

Compute an interpolating basis. \n More...

\n \n

Go to the source code of this file.

\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 Classes

class  gtsam::EvaluationFactor< BASIS >
 Factor for enforcing the scalar value of the polynomial BASIS representation at x is the same as the measurement z when using a pseudo-spectral parameterization. More...
class  gtsam::Basis< DERIVED >
 CRTP Base class for function bases. More...
 
class  gtsam::VectorEvaluationFactor< BASIS, M >
 Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of size (M, N) is equal to a vector-valued measurement at the same point, when using a pseudo-spectral parameterization. More...
class  gtsam::Basis< DERIVED >::EvaluationFunctor
 An instance of an EvaluationFunctor calculates f(x;p) at a given x, applied to Parameters p. More...
 
class  gtsam::VectorComponentFactor< BASIS, P >
 Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of size (P, N) is equal to specified measurement at the same point, when using a pseudo-spectral parameterization. More...
class  gtsam::Basis< DERIVED >::VectorEvaluationFunctor< M >
 VectorEvaluationFunctor at a given x, applied to ParameterMatrix<M>. More...
 
class  gtsam::ManifoldEvaluationFactor< BASIS, T >
 For a measurement value of type T i.e. More...
class  gtsam::Basis< DERIVED >::VectorComponentFunctor< M >
 Given a M*N Matrix of M-vectors at N polynomial points, an instance of VectorComponentFunctor computes the N-vector value for a specific row component of the M-vectors at all the polynomial points. More...
 
class  gtsam::DerivativeFactor< BASIS >
 A unary factor which enforces the evaluation of the derivative of a BASIS polynomial at a specified pointx is equal to the scalar measurement z. More...
class  gtsam::Basis< DERIVED >::ManifoldEvaluationFunctor< T >
 Manifold EvaluationFunctor at a given x, applied to ParameterMatrix<M>. More...
 
class  gtsam::VectorDerivativeFactor< BASIS, M >
 A unary factor which enforces the evaluation of the derivative of a BASIS polynomial at a specified point x is equal to the vector value z. More...
class  gtsam::Basis< DERIVED >::DerivativeFunctorBase
 Base class for functors below that calculate derivative weights. More...
 
class  gtsam::ComponentDerivativeFactor< BASIS, P >
 A unary factor which enforces the evaluation of the derivative of a BASIS polynomial is equal to the scalar value at a specific index i of a vector-valued measurement z. More...
class  gtsam::Basis< DERIVED >::DerivativeFunctor
 An instance of a DerivativeFunctor calculates f'(x;p) at a given x, applied to Parameters p. More...
 
class  gtsam::Basis< DERIVED >::VectorDerivativeFunctor< M >
 VectorDerivativeFunctor at a given x, applied to ParameterMatrix<M>. More...
 
class  gtsam::Basis< DERIVED >::ComponentDerivativeFunctor< M >
 Given a M*N Matrix of M-vectors at N polynomial points, an instance of ComponentDerivativeFunctor computes the N-vector derivative for a specific row component of the M-vectors at all the polynomial points. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Typedefs

\n+using gtsam::Weights = Eigen::Matrix< double, 1, -1 >
 
\n+\n+\n+\n+\n+\n

\n+Functions

template<size_t M>
Matrix gtsam::kroneckerProductIdentity (const Weights &w)
 Function for computing the kronecker product of the 1*N Weight vector w with the MxM identity matrix I efficiently.
 
\n

Detailed Description

\n-

Factor definitions for various Basis functors.

\n-
Author
Varun Agrawal
\n+

Compute an interpolating basis.

\n+
Author
Varun Agrawal, Jing Dong, Frank Dellaert
\n
Date
July 4, 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,58 +1,71 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BasisFactors.h File Reference\n-Factor definitions for various Basis functors. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Basis.h File Reference\n+Compute an interpolating basis. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b _\b>\n- _\bF_\ba_\bc_\bt_\bo_\br for enforcing the scalar value of the polynomial BASIS\n-\u00a0 representation at x is the same as the measurement z when using a\n- pseudo-spectral parameterization. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b,_\b _\bM_\b _\b>\n- Unary factor for enforcing BASIS polynomial evaluation on a\n-\u00a0 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx of size (M, N) is equal to a vector-valued measurement\n- at the same point, when using a pseudo-spectral parameterization.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>\n+\u00a0 CRTP Base class for function bases. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+\u00a0 An instance of an _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br calculates f(x;p) at a given x,\n+ applied to Parameters p. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bM_\b _\b>\n+\u00a0 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br at a given x, applied to ParameterMatrix.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bM_\b _\b>\n+ Given a M*N Matrix of M-vectors at N polynomial points, an instance of\n+\u00a0 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br computes the N-vector value for a specific row\n+ component of the M-vectors at all the polynomial points. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n+\u00a0 Manifold _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br at a given x, applied to ParameterMatrix.\n _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b,_\b _\bP_\b _\b>\n- Unary factor for enforcing BASIS polynomial evaluation on a\n-\u00a0 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx of size (P, N) is equal to specified measurement at the\n- same point, when using a pseudo-spectral parameterization. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b,_\b _\bT_\b _\b>\n-\u00a0 For a measurement value of type T i.e. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b _\b>\n- A unary factor which enforces the evaluation of the derivative of a\n-\u00a0 BASIS polynomial at a specified pointx is equal to the scalar\n- measurement z. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b,_\b _\bM_\b _\b>\n- A unary factor which enforces the evaluation of the derivative of a\n-\u00a0 BASIS polynomial at a specified point x is equal to the vector value z.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n+\u00a0 Base class for functors below that calculate derivative weights.\n _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bS_\b,_\b _\bP_\b _\b>\n- A unary factor which enforces the evaluation of the derivative of a\n-\u00a0 BASIS polynomial is equal to the scalar value at a specific index i of\n- a vector-valued measurement z. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+\u00a0 An instance of a _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br calculates f'(x;p) at a given x,\n+ applied to Parameters p. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bM_\b _\b>\n+\u00a0 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br at a given x, applied to ParameterMatrix.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b _\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\b _\bM_\b _\b>\n+ Given a M*N Matrix of M-vectors at N polynomial points, an instance of\n+\u00a0 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br computes the N-vector derivative for a\n+ specific row component of the M-vectors at all the polynomial points.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:W\bWe\bei\big\bgh\bht\bts\bs = Eigen::Matrix< double, 1, -1 >\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bk_\br_\bo_\bn_\be_\bc_\bk_\be_\br_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by (const Weights &w)\n+\u00a0 Function for computing the kronecker product of the 1*N Weight vector w\n+ with the MxM identity matrix I efficiently.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor definitions for various Basis functors.\n+Compute an interpolating basis.\n Author\n- Varun Agrawal\n+ Varun Agrawal, Jing Dong, Frank Dellaert\n Date\n July 4, 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b._\bh\n+ * _\bB_\ba_\bs_\bi_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00176.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00176.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,11 @@\n var a00176 = [\n- [\"gtsam::ManifoldEvaluationFactor< BASIS, T >\", \"a02716.html\", \"a02716\"],\n- [\"gtsam::DerivativeFactor< BASIS >\", \"a02720.html\", \"a02720\"],\n- [\"gtsam::VectorDerivativeFactor< BASIS, M >\", \"a02724.html\", \"a02724\"],\n- [\"gtsam::ComponentDerivativeFactor< BASIS, P >\", \"a02728.html\", \"a02728\"]\n+ [\"gtsam::Basis< DERIVED >::EvaluationFunctor\", \"a02672.html\", \"a02672\"],\n+ [\"gtsam::Basis< DERIVED >::VectorEvaluationFunctor< M >\", \"a02676.html\", \"a02676\"],\n+ [\"gtsam::Basis< DERIVED >::VectorComponentFunctor< M >\", \"a02680.html\", \"a02680\"],\n+ [\"gtsam::Basis< DERIVED >::ManifoldEvaluationFunctor< T >\", \"a02684.html\", \"a02684\"],\n+ [\"gtsam::Basis< DERIVED >::DerivativeFunctorBase\", \"a02688.html\", \"a02688\"],\n+ [\"gtsam::Basis< DERIVED >::DerivativeFunctor\", \"a02692.html\", \"a02692\"],\n+ [\"gtsam::Basis< DERIVED >::VectorDerivativeFunctor< M >\", \"a02696.html\", \"a02696\"],\n+ [\"gtsam::Basis< DERIVED >::ComponentDerivativeFunctor< M >\", \"a02700.html\", \"a02700\"],\n+ [\"kroneckerProductIdentity\", \"a00176.html#ga2ce44d31cae1eda44c2a86d32d92b935\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00176_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00176_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
BasisFactors.h
\n+
Basis.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,251 +114,457 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/basis/Basis.h>
\n-\n-
23
\n-
24namespace gtsam {
\n-
25
\n-
38template <class BASIS>
\n-
\n-
39class EvaluationFactor : public FunctorizedFactor<double, Vector> {
\n-
40 private:
\n-\n-
42
\n-
43 public:
\n-\n-
45
\n-
\n-
55 EvaluationFactor(Key key, double z, const SharedNoiseModel &model,
\n-
56 const size_t N, double x)
\n-
57 : Base(key, z, model, typename BASIS::EvaluationFunctor(N, x)) {}
\n-
\n-
58
\n-
\n-
70 EvaluationFactor(Key key, double z, const SharedNoiseModel &model,
\n-
71 const size_t N, double x, double a, double b)
\n-
72 : Base(key, z, model, typename BASIS::EvaluationFunctor(N, x, a, b)) {}
\n-
\n-
73
\n-
74 virtual ~EvaluationFactor() {}
\n-
75};
\n-
\n-
76
\n-
94template <class BASIS, int M>
\n-
\n-\n-
96 : public FunctorizedFactor<Vector, ParameterMatrix<M>> {
\n-
97 private:
\n-\n-
99
\n-
100 public:
\n-\n-
102
\n-
\n-\n-
114 const SharedNoiseModel &model, const size_t N,
\n-
115 double x)
\n-
116 : Base(key, z, model,
\n-
117 typename BASIS::template VectorEvaluationFunctor<M>(N, x)) {}
\n-
\n-
118
\n-
\n-\n-
132 const SharedNoiseModel &model, const size_t N,
\n-
133 double x, double a, double b)
\n-
134 : Base(key, z, model,
\n-
135 typename BASIS::template VectorEvaluationFunctor<M>(N, x, a, b)) {}
\n-
\n-
136
\n-
137 virtual ~VectorEvaluationFactor() {}
\n-
138};
\n-
\n-
139
\n-
159template <class BASIS, size_t P>
\n-
\n-\n-
161 : public FunctorizedFactor<double, ParameterMatrix<P>> {
\n-
162 private:
\n-\n-
164
\n-
165 public:
\n-\n-
167
\n-
\n-
181 VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model,
\n-
182 const size_t N, size_t i, double x)
\n-
183 : Base(key, z, model,
\n-
184 typename BASIS::template VectorComponentFunctor<P>(N, i, x)) {}
\n-
\n-
185
\n-
\n-
201 VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model,
\n-
202 const size_t N, size_t i, double x, double a, double b)
\n-
203 : Base(
\n-
204 key, z, model,
\n-
205 typename BASIS::template VectorComponentFunctor<P>(N, i, x, a, b)) {
\n-
206 }
\n-
\n-
207
\n-
208 virtual ~VectorComponentFactor() {}
\n-
209};
\n-
\n-
210
\n-
228template <class BASIS, typename T>
\n-
\n-\n-
230 : public FunctorizedFactor<T, ParameterMatrix<traits<T>::dimension>> {
\n-
231 private:
\n-\n-
233
\n-
234 public:
\n-\n-
236
\n-
\n-\n-
248 const size_t N, double x)
\n-
249 : Base(key, z, model,
\n-
250 typename BASIS::template ManifoldEvaluationFunctor<T>(N, x)) {}
\n-
\n-
251
\n-
\n-\n-
265 const size_t N, double x, double a, double b)
\n-
266 : Base(
\n-
267 key, z, model,
\n-
268 typename BASIS::template ManifoldEvaluationFunctor<T>(N, x, a, b)) {
\n-
269 }
\n-
\n-
270
\n-
271 virtual ~ManifoldEvaluationFactor() {}
\n-
272};
\n-
\n-
273
\n-
280template <class BASIS>
\n-
\n-\n-
282 : public FunctorizedFactor<double, typename BASIS::Parameters> {
\n-
283 private:
\n-\n-
285
\n-
286 public:
\n-\n-
288
\n-
\n-
299 DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model,
\n-
300 const size_t N, double x)
\n-
301 : Base(key, z, model, typename BASIS::DerivativeFunctor(N, x)) {}
\n-
\n-
302
\n-
\n-
315 DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model,
\n-
316 const size_t N, double x, double a, double b)
\n-
317 : Base(key, z, model, typename BASIS::DerivativeFunctor(N, x, a, b)) {}
\n-
\n-
318
\n-
319 virtual ~DerivativeFactor() {}
\n-
320};
\n+
21#include <gtsam/base/Matrix.h>
\n+\n+\n+
24
\n+
25#include <iostream>
\n+
26
\n+
68namespace gtsam {
\n+
69
\n+
70using Weights = Eigen::Matrix<double, 1, -1>; /* 1xN vector */
\n+
71
\n+
84template <size_t M>
\n+
\n+
85Matrix kroneckerProductIdentity(const Weights& w) {
\n+
86 Matrix result(M, w.cols() * M);
\n+
87 result.setZero();
\n+
88
\n+
89 for (int i = 0; i < w.cols(); i++) {
\n+
90 result.block(0, i * M, M, M).diagonal().array() = w(i);
\n+
91 }
\n+
92 return result;
\n+
93}
\n+
\n+
94
\n+
99template <typename DERIVED>
\n+
\n+
100class Basis {
\n+
101 public:
\n+
\n+
107 static Matrix WeightMatrix(size_t N, const Vector& X) {
\n+
108 Matrix W(X.size(), N);
\n+
109 for (int i = 0; i < X.size(); i++)
\n+
110 W.row(i) = DERIVED::CalculateWeights(N, X(i));
\n+
111 return W;
\n+
112 }
\n+
\n+
113
\n+
\n+
123 static Matrix WeightMatrix(size_t N, const Vector& X, double a, double b) {
\n+
124 Matrix W(X.size(), N);
\n+
125 for (int i = 0; i < X.size(); i++)
\n+
126 W.row(i) = DERIVED::CalculateWeights(N, X(i), a, b);
\n+
127 return W;
\n+
128 }
\n+
\n+
129
\n+
\n+\n+
138 protected:
\n+
139 Weights weights_;
\n+
140
\n+
141 public:
\n+\n+
144
\n+
\n+
146 EvaluationFunctor(size_t N, double x)
\n+
147 : weights_(DERIVED::CalculateWeights(N, x)) {}
\n+
\n+
148
\n+
\n+
150 EvaluationFunctor(size_t N, double x, double a, double b)
\n+
151 : weights_(DERIVED::CalculateWeights(N, x, a, b)) {}
\n+
\n+
152
\n+
\n+
154 double apply(const typename DERIVED::Parameters& p,
\n+
155 OptionalJacobian<-1, -1> H = boost::none) const {
\n+
156 if (H) *H = weights_;
\n+
157 return (weights_ * p)(0);
\n+
158 }
\n+
\n+
159
\n+
\n+
161 double operator()(const typename DERIVED::Parameters& p,
\n+
162 OptionalJacobian<-1, -1> H = boost::none) const {
\n+
163 return apply(p, H); // might call apply in derived
\n+
164 }
\n+
\n+
165
\n+
166 void print(const std::string& s = "") const {
\n+
167 std::cout << s << (s != "" ? " " : "") << weights_ << std::endl;
\n+
168 }
\n+
169 };
\n+
\n+
170
\n+
177 template <int M>
\n+
\n+\n+
179 protected:
\n+
180 using VectorM = Eigen::Matrix<double, M, 1>;
\n+
181 using Jacobian = Eigen::Matrix<double, /*MxMN*/ M, -1>;
\n+
182 Jacobian H_;
\n+
183
\n+
\n+\n+
193 H_ = kroneckerProductIdentity<M>(this->weights_);
\n+
194 }
\n+
\n+
195
\n+
196 public:
\n+
197 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n+
198
\n+\n+
201
\n+
\n+
203 VectorEvaluationFunctor(size_t N, double x) : EvaluationFunctor(N, x) {
\n+\n+
205 }
\n+
\n+
206
\n+
\n+
208 VectorEvaluationFunctor(size_t N, double x, double a, double b)
\n+
209 : EvaluationFunctor(N, x, a, b) {
\n+\n+
211 }
\n+
\n+
212
\n+
\n+
214 VectorM apply(const ParameterMatrix<M>& P,
\n+
215 OptionalJacobian</*MxN*/ -1, -1> H = boost::none) const {
\n+
216 if (H) *H = H_;
\n+
217 return P.matrix() * this->weights_.transpose();
\n+
218 }
\n+
\n+
219
\n+
\n+\n+
222 OptionalJacobian</*MxN*/ -1, -1> H = boost::none) const {
\n+
223 return apply(P, H);
\n+
224 }
\n+
\n+
225 };
\n+
\n+
226
\n+
234 template <int M>
\n+
\n+\n+
236 protected:
\n+
237 using Jacobian = Eigen::Matrix<double, /*1xMN*/ 1, -1>;
\n+
238 size_t rowIndex_;
\n+
239 Jacobian H_;
\n+
240
\n+
241 /*
\n+
242 * Calculate the `1*(M*N)` Jacobian of this functor with respect to
\n+
243 * the M*N parameter matrix `P`.
\n+
244 * We flatten assuming column-major order, e.g., if N=3 and M=2, we have
\n+
245 * H=[w(0) 0 w(1) 0 w(2) 0] for rowIndex==0
\n+
246 * H=[0 w(0) 0 w(1) 0 w(2)] for rowIndex==1
\n+
247 * i.e., one row of the Kronecker product of weights_ with the
\n+
248 * MxM identity matrix. See also VectorEvaluationFunctor.
\n+
249 */
\n+
250 void calculateJacobian(size_t N) {
\n+
251 H_.setZero(1, M * N);
\n+
252 for (int j = 0; j < EvaluationFunctor::weights_.size(); j++)
\n+
253 H_(0, rowIndex_ + j * M) = EvaluationFunctor::weights_(j);
\n+
254 }
\n+
255
\n+
256 public:
\n+\n+
259
\n+
\n+
261 VectorComponentFunctor(size_t N, size_t i, double x)
\n+
262 : EvaluationFunctor(N, x), rowIndex_(i) {
\n+
263 calculateJacobian(N);
\n+
264 }
\n+
\n+
265
\n+
\n+
267 VectorComponentFunctor(size_t N, size_t i, double x, double a, double b)
\n+
268 : EvaluationFunctor(N, x, a, b), rowIndex_(i) {
\n+
269 calculateJacobian(N);
\n+
270 }
\n+
\n+
271
\n+
\n+
273 double apply(const ParameterMatrix<M>& P,
\n+
274 OptionalJacobian</*1xMN*/ -1, -1> H = boost::none) const {
\n+
275 if (H) *H = H_;
\n+
276 return P.row(rowIndex_) * EvaluationFunctor::weights_.transpose();
\n+
277 }
\n+
\n+
278
\n+
\n+\n+
281 OptionalJacobian</*1xMN*/ -1, -1> H = boost::none) const {
\n+
282 return apply(P, H);
\n+
283 }
\n
\n-
321
\n-
329template <class BASIS, int M>
\n-
\n-\n-
331 : public FunctorizedFactor<Vector, ParameterMatrix<M>> {
\n-
332 private:
\n-\n-
334 using Func = typename BASIS::template VectorDerivativeFunctor<M>;
\n-
335
\n-
336 public:
\n-\n-
338
\n-
\n-\n-
350 const SharedNoiseModel &model, const size_t N,
\n-
351 double x)
\n-
352 : Base(key, z, model, Func(N, x)) {}
\n+
284 };
\n
\n+
285
\n+
299 template <class T>
\n+
\n+\n+
301 : public VectorEvaluationFunctor<traits<T>::dimension> {
\n+
302 enum { M = traits<T>::dimension };
\n+
303 using Base = VectorEvaluationFunctor<M>;
\n+
304
\n+
305 public:
\n+\n+
308
\n+
310 ManifoldEvaluationFunctor(size_t N, double x) : Base(N, x) {}
\n+
311
\n+
\n+
313 ManifoldEvaluationFunctor(size_t N, double x, double a, double b)
\n+
314 : Base(N, x, a, b) {}
\n+
\n+
315
\n+
\n+\n+
318 OptionalJacobian</*MxMN*/ -1, -1> H = boost::none) const {
\n+
319 // Interpolate the M-dimensional vector to yield a vector in tangent space
\n+
320 Eigen::Matrix<double, M, 1> xi = Base::operator()(P, H);
\n+
321
\n+
322 // Now call retract with this M-vector, possibly with derivatives
\n+
323 Eigen::Matrix<double, M, M> D_result_xi;
\n+
324 T result = T::ChartAtOrigin::Retract(xi, H ? &D_result_xi : 0);
\n+
325
\n+
326 // Finally, if derivatives are asked, apply chain rule where H is Mx(M*N)
\n+
327 // derivative of interpolation and D_result_xi is MxM derivative of
\n+
328 // retract.
\n+
329 if (H) *H = D_result_xi * (*H);
\n+
330
\n+
331 // and return a T
\n+
332 return result;
\n+
333 }
\n+
\n+
334
\n+
\n+\n+
337 OptionalJacobian</*MxN*/ -1, -1> H = boost::none) const {
\n+
338 return apply(P, H); // might call apply in derived
\n+
339 }
\n+
\n+
340 };
\n+
\n+
341
\n+
\n+\n+
344 protected:
\n+
345 Weights weights_;
\n+
346
\n+
347 public:
\n+\n+
350
\n+
351 DerivativeFunctorBase(size_t N, double x)
\n+
352 : weights_(DERIVED::DerivativeWeights(N, x)) {}
\n
353
\n-
\n-\n-
367 const SharedNoiseModel &model, const size_t N,
\n-
368 double x, double a, double b)
\n-
369 : Base(key, z, model, Func(N, x, a, b)) {}
\n-
\n-
370
\n-
371 virtual ~VectorDerivativeFactor() {}
\n-
372};
\n-
\n+
354 DerivativeFunctorBase(size_t N, double x, double a, double b)
\n+
355 : weights_(DERIVED::DerivativeWeights(N, x, a, b)) {}
\n+
356
\n+
357 void print(const std::string& s = "") const {
\n+
358 std::cout << s << (s != "" ? " " : "") << weights_ << std::endl;
\n+
359 }
\n+
360 };
\n+
\n+
361
\n+
\n+\n+
370 public:
\n+\n
373
\n-
382template <class BASIS, int P>
\n-
\n-\n-
384 : public FunctorizedFactor<double, ParameterMatrix<P>> {
\n-
385 private:
\n-\n-
387 using Func = typename BASIS::template ComponentDerivativeFunctor<P>;
\n-
388
\n-
389 public:
\n-\n-
391
\n-
\n-\n-
406 const SharedNoiseModel &model, const size_t N,
\n-
407 size_t i, double x)
\n-
408 : Base(key, z, model, Func(N, i, x)) {}
\n-
\n-
409
\n+
374 DerivativeFunctor(size_t N, double x) : DerivativeFunctorBase(N, x) {}
\n+
375
\n+
376 DerivativeFunctor(size_t N, double x, double a, double b)
\n+
377 : DerivativeFunctorBase(N, x, a, b) {}
\n+
378
\n+
379 double apply(const typename DERIVED::Parameters& p,
\n+
380 OptionalJacobian</*1xN*/ -1, -1> H = boost::none) const {
\n+
381 if (H) *H = this->weights_;
\n+
382 return (this->weights_ * p)(0);
\n+
383 }
\n+
\n+
385 double operator()(const typename DERIVED::Parameters& p,
\n+
386 OptionalJacobian</*1xN*/ -1, -1> H = boost::none) const {
\n+
387 return apply(p, H); // might call apply in derived
\n+
388 }
\n+
\n+
389 };
\n+
\n+
390
\n+
399 template <int M>
\n+
\n+\n+
401 protected:
\n+
402 using VectorM = Eigen::Matrix<double, M, 1>;
\n+
403 using Jacobian = Eigen::Matrix<double, /*MxMN*/ M, -1>;
\n+
404 Jacobian H_;
\n+
405
\n+
\n+\n+
415 H_ = kroneckerProductIdentity<M>(this->weights_);
\n+
416 }
\n+
\n+
417
\n+
418 public:
\n+
419 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n+
420
\n+\n+
423
\n
\n-\n-
426 const SharedNoiseModel &model, const size_t N,
\n-
427 size_t i, double x, double a, double b)
\n-
428 : Base(key, z, model, Func(N, i, x, a, b)) {}
\n-
\n-
429
\n-
430 virtual ~ComponentDerivativeFactor() {}
\n-
431};
\n-
\n-
432
\n-
433} // namespace gtsam
\n-
Compute an interpolating basis.
\n-\n+
425 VectorDerivativeFunctor(size_t N, double x) : DerivativeFunctorBase(N, x) {
\n+\n+
427 }
\n+
\n+
428
\n+
\n+
430 VectorDerivativeFunctor(size_t N, double x, double a, double b)
\n+
431 : DerivativeFunctorBase(N, x, a, b) {
\n+\n+
433 }
\n+
\n+
434
\n+
435 VectorM apply(const ParameterMatrix<M>& P,
\n+
436 OptionalJacobian</*MxMN*/ -1, -1> H = boost::none) const {
\n+
437 if (H) *H = H_;
\n+
438 return P.matrix() * this->weights_.transpose();
\n+
439 }
\n+
\n+
441 VectorM operator()(
\n+
442 const ParameterMatrix<M>& P,
\n+
443 OptionalJacobian</*MxMN*/ -1, -1> H = boost::none) const {
\n+
444 return apply(P, H);
\n+
445 }
\n+
\n+
446 };
\n+
\n+
447
\n+
455 template <int M>
\n+
\n+\n+
457 protected:
\n+
458 using Jacobian = Eigen::Matrix<double, /*1xMN*/ 1, -1>;
\n+
459 size_t rowIndex_;
\n+
460 Jacobian H_;
\n+
461
\n+
462 /*
\n+
463 * Calculate the `1*(M*N)` Jacobian of this functor with respect to
\n+
464 * the M*N parameter matrix `P`.
\n+
465 * We flatten assuming column-major order, e.g., if N=3 and M=2, we have
\n+
466 * H=[w(0) 0 w(1) 0 w(2) 0] for rowIndex==0
\n+
467 * H=[0 w(0) 0 w(1) 0 w(2)] for rowIndex==1
\n+
468 * i.e., one row of the Kronecker product of weights_ with the
\n+
469 * MxM identity matrix. See also VectorDerivativeFunctor.
\n+
470 */
\n+
471 void calculateJacobian(size_t N) {
\n+
472 H_.setZero(1, M * N);
\n+
473 for (int j = 0; j < this->weights_.size(); j++)
\n+
474 H_(0, rowIndex_ + j * M) = this->weights_(j);
\n+
475 }
\n+
476
\n+
477 public:
\n+\n+
480
\n+
\n+
482 ComponentDerivativeFunctor(size_t N, size_t i, double x)
\n+
483 : DerivativeFunctorBase(N, x), rowIndex_(i) {
\n+
484 calculateJacobian(N);
\n+
485 }
\n+
\n+
486
\n+
\n+
488 ComponentDerivativeFunctor(size_t N, size_t i, double x, double a, double b)
\n+
489 : DerivativeFunctorBase(N, x, a, b), rowIndex_(i) {
\n+
490 calculateJacobian(N);
\n+
491 }
\n+
\n+
\n+
493 double apply(const ParameterMatrix<M>& P,
\n+
494 OptionalJacobian</*1xMN*/ -1, -1> H = boost::none) const {
\n+
495 if (H) *H = H_;
\n+
496 return P.row(rowIndex_) * this->weights_.transpose();
\n+
497 }
\n+
\n+
\n+\n+
500 OptionalJacobian</*1xMN*/ -1, -1> H = boost::none) const {
\n+
501 return apply(P, H);
\n+
502 }
\n+
\n+
503 };
\n+
\n+
504
\n+
505};
\n+
\n+
506
\n+
507} // namespace gtsam
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Special class for optional Jacobian arguments.
\n+
Define ParameterMatrix class which is used to store values at interpolation points.
\n+
Matrix kroneckerProductIdentity(const Weights &w)
Function for computing the kronecker product of the 1*N Weight vector w with the MxM identity matrix ...
Definition Basis.h:85
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
Factor for enforcing the scalar value of the polynomial BASIS representation at x is the same as the ...
Definition BasisFactors.h:39
\n-
EvaluationFactor(Key key, double z, const SharedNoiseModel &model, const size_t N, double x)
Construct a new EvaluationFactor object.
Definition BasisFactors.h:55
\n-
EvaluationFactor(Key key, double z, const SharedNoiseModel &model, const size_t N, double x, double a, double b)
Construct a new EvaluationFactor object.
Definition BasisFactors.h:70
\n-
Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of size (M,...
Definition BasisFactors.h:96
\n-
VectorEvaluationFactor(Key key, const Vector &z, const SharedNoiseModel &model, const size_t N, double x, double a, double b)
Construct a new VectorEvaluationFactor object.
Definition BasisFactors.h:131
\n-
VectorEvaluationFactor(Key key, const Vector &z, const SharedNoiseModel &model, const size_t N, double x)
Construct a new VectorEvaluationFactor object.
Definition BasisFactors.h:113
\n-
Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of size (P,...
Definition BasisFactors.h:161
\n-
VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x, double a, double b)
Construct a new VectorComponentFactor object.
Definition BasisFactors.h:201
\n-
VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x)
Construct a new VectorComponentFactor object.
Definition BasisFactors.h:181
\n-
For a measurement value of type T i.e.
Definition BasisFactors.h:230
\n-
ManifoldEvaluationFactor(Key key, const T &z, const SharedNoiseModel &model, const size_t N, double x, double a, double b)
Construct a new ManifoldEvaluationFactor object.
Definition BasisFactors.h:264
\n-
ManifoldEvaluationFactor(Key key, const T &z, const SharedNoiseModel &model, const size_t N, double x)
Construct a new ManifoldEvaluationFactor object.
Definition BasisFactors.h:247
\n-
A unary factor which enforces the evaluation of the derivative of a BASIS polynomial at a specified p...
Definition BasisFactors.h:282
\n-
DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, double x, double a, double b)
Construct a new DerivativeFactor object.
Definition BasisFactors.h:315
\n-
DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, double x)
Construct a new DerivativeFactor object.
Definition BasisFactors.h:299
\n-
A unary factor which enforces the evaluation of the derivative of a BASIS polynomial at a specified p...
Definition BasisFactors.h:331
\n-
VectorDerivativeFactor(Key key, const Vector &z, const SharedNoiseModel &model, const size_t N, double x)
Construct a new VectorDerivativeFactor object.
Definition BasisFactors.h:349
\n-
VectorDerivativeFactor(Key key, const Vector &z, const SharedNoiseModel &model, const size_t N, double x, double a, double b)
Construct a new VectorDerivativeFactor object.
Definition BasisFactors.h:366
\n-
A unary factor which enforces the evaluation of the derivative of a BASIS polynomial is equal to the ...
Definition BasisFactors.h:384
\n-
ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x, double a, double b)
Construct a new ComponentDerivativeFactor object.
Definition BasisFactors.h:425
\n-
ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x)
Construct a new ComponentDerivativeFactor object.
Definition BasisFactors.h:405
\n-
Factor which evaluates provided unary functor and uses the result to compute error with respect to th...
Definition FunctorizedFactor.h:59
\n-
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
CRTP Base class for function bases.
Definition Basis.h:100
\n+
static Matrix WeightMatrix(size_t N, const Vector &X, double a, double b)
Calculate weights for all x in vector X, with interval [a,b].
Definition Basis.h:123
\n+
static Matrix WeightMatrix(size_t N, const Vector &X)
Calculate weights for all x in vector X.
Definition Basis.h:107
\n+
An instance of an EvaluationFunctor calculates f(x;p) at a given x, applied to Parameters p.
Definition Basis.h:137
\n+
EvaluationFunctor(size_t N, double x)
Constructor with interval [a,b].
Definition Basis.h:146
\n+
EvaluationFunctor(size_t N, double x, double a, double b)
Constructor with interval [a,b].
Definition Basis.h:150
\n+
double apply(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -1 > H=boost::none) const
Regular 1D evaluation.
Definition Basis.h:154
\n+
EvaluationFunctor()
For serialization.
Definition Basis.h:143
\n+
double operator()(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:161
\n+
VectorEvaluationFunctor at a given x, applied to ParameterMatrix<M>.
Definition Basis.h:178
\n+
VectorEvaluationFunctor(size_t N, double x, double a, double b)
Constructor, with interval [a,b].
Definition Basis.h:208
\n+
EIGEN_MAKE_ALIGNED_OPERATOR_NEW VectorEvaluationFunctor()
For serialization.
Definition Basis.h:200
\n+
VectorEvaluationFunctor(size_t N, double x)
Default Constructor.
Definition Basis.h:203
\n+
void calculateJacobian()
Calculate the M*(M*N) Jacobian of this functor with respect to the M*N parameter matrix P.
Definition Basis.h:192
\n+
VectorM operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:221
\n+
VectorM apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
M-dimensional evaluation.
Definition Basis.h:214
\n+
Given a M*N Matrix of M-vectors at N polynomial points, an instance of VectorComponentFunctor compute...
Definition Basis.h:235
\n+
double operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:280
\n+
VectorComponentFunctor()
For serialization.
Definition Basis.h:258
\n+
VectorComponentFunctor(size_t N, size_t i, double x)
Construct with row index.
Definition Basis.h:261
\n+
VectorComponentFunctor(size_t N, size_t i, double x, double a, double b)
Construct with row index and interval.
Definition Basis.h:267
\n+
double apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
Calculate component of component rowIndex_ of P.
Definition Basis.h:273
\n+
Manifold EvaluationFunctor at a given x, applied to ParameterMatrix<M>.
Definition Basis.h:301
\n+
ManifoldEvaluationFunctor(size_t N, double x, double a, double b)
Constructor, with interval [a,b].
Definition Basis.h:313
\n+
T apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
Manifold evaluation.
Definition Basis.h:317
\n+
ManifoldEvaluationFunctor()
For serialization.
Definition Basis.h:307
\n+
ManifoldEvaluationFunctor(size_t N, double x)
Default Constructor.
Definition Basis.h:310
\n+
T operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:336
\n+
Base class for functors below that calculate derivative weights.
Definition Basis.h:343
\n+
DerivativeFunctorBase()
For serialization.
Definition Basis.h:349
\n+
An instance of a DerivativeFunctor calculates f'(x;p) at a given x, applied to Parameters p.
Definition Basis.h:369
\n+
DerivativeFunctor()
For serialization.
Definition Basis.h:372
\n+
double operator()(const typename DERIVED::Parameters &p, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:385
\n+
VectorDerivativeFunctor at a given x, applied to ParameterMatrix<M>.
Definition Basis.h:400
\n+
void calculateJacobian()
Calculate the M*(M*N) Jacobian of this functor with respect to the M*N parameter matrix P.
Definition Basis.h:414
\n+
VectorDerivativeFunctor(size_t N, double x, double a, double b)
Constructor, with optional interval [a,b].
Definition Basis.h:430
\n+
VectorM operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:441
\n+
EIGEN_MAKE_ALIGNED_OPERATOR_NEW VectorDerivativeFunctor()
For serialization.
Definition Basis.h:422
\n+
VectorDerivativeFunctor(size_t N, double x)
Default Constructor.
Definition Basis.h:425
\n+
Given a M*N Matrix of M-vectors at N polynomial points, an instance of ComponentDerivativeFunctor com...
Definition Basis.h:456
\n+
ComponentDerivativeFunctor(size_t N, size_t i, double x)
Construct with row index.
Definition Basis.h:482
\n+
double operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
c++ sugar
Definition Basis.h:499
\n+
ComponentDerivativeFunctor()
For serialization.
Definition Basis.h:479
\n+
ComponentDerivativeFunctor(size_t N, size_t i, double x, double a, double b)
Construct with row index and interval.
Definition Basis.h:488
\n+
double apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::none) const
Calculate derivative of component rowIndex_ of F.
Definition Basis.h:493
\n+
A matrix abstraction of MxN values at the Basis points.
Definition ParameterMatrix.h:38
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BasisFactors.h\n+Basis.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,297 +16,539 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-38template \n-_\b3_\b9class _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br {\n-40 private:\n-41 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b>;\n-42\n-43 public:\n-44 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-45\n-_\b5_\b5 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, double z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n-56 const size_t N, double x)\n-57 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, typename BASIS::EvaluationFunctor(N, x)) {}\n-58\n-_\b7_\b0 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, double z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n-71 const size_t N, double x, double a, double b)\n-72 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, typename BASIS::EvaluationFunctor(N, x, a, b)) {}\n-73\n-74 virtual _\b~_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-75};\n-76\n-94template \n-_\b9_\b5class _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-96 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> {\n-97 private:\n-98 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bV_\be_\bc_\bt_\bo_\br_\b,_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>>;\n-99\n-100 public:\n-101 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-102\n-_\b1_\b1_\b3 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Vector &z,\n-114 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n-115 double x)\n-116 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model,\n-117 typename BASIS::template VectorEvaluationFunctor(N, x)) {}\n-118\n-_\b1_\b3_\b1 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Vector &z,\n-132 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n-133 double x, double a, double b)\n-134 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model,\n-135 typename BASIS::template VectorEvaluationFunctor(N, x, a, b)) {}\n-136\n-137 virtual _\b~_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-138};\n-139\n-159template \n-_\b1_\b6_\b0class _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br\n-161 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> {\n-162 private:\n-163 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bP_\b>>;\n-164\n-165 public:\n-166 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br() {}\n-167\n-_\b1_\b8_\b1 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-&model,\n-182 const size_t N, size_t i, double x)\n-183 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model,\n-184 typename BASIS::template VectorComponentFunctor

(N, i, x)) {}\n-185\n-_\b2_\b0_\b1 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-&model,\n-202 const size_t N, size_t i, double x, double a, double b)\n-203 : _\bB_\ba_\bs_\be(\n-204 _\bk_\be_\by, z, model,\n-205 typename BASIS::template VectorComponentFunctor

(N, i, x, a, b)) {\n-206 }\n-207\n-208 virtual _\b~_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br() {}\n-209};\n-210\n-228template \n-_\b2_\b2_\b9class _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-230 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br::dimension>> {\n-231 private:\n-232 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bT_\b,_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>>;\n-233\n-234 public:\n-235 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-236\n-_\b2_\b4_\b7 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const T &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-&model,\n-248 const size_t N, double x)\n-249 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model,\n-250 typename BASIS::template ManifoldEvaluationFunctor(N, x)) {}\n-251\n-_\b2_\b6_\b4 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const T &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-&model,\n-265 const size_t N, double x, double a, double b)\n-266 : _\bB_\ba_\bs_\be(\n-267 _\bk_\be_\by, z, model,\n-268 typename BASIS::template ManifoldEvaluationFunctor(N, x, a, b)) {\n-269 }\n-270\n-271 virtual _\b~_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-272};\n-273\n-280template \n-_\b2_\b8_\b1class _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-282 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br {\n-283 private:\n-284 using Base = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bB_\bA_\bS_\bI_\bS_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b>;\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+24\n+25#include \n+26\n+68namespace _\bg_\bt_\bs_\ba_\bm {\n+69\n+70using Weights = Eigen::Matrix; /* 1xN vector */\n+71\n+84template \n+_\b8_\b5Matrix _\bk_\br_\bo_\bn_\be_\bc_\bk_\be_\br_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by(const Weights& w) {\n+86 Matrix result(M, w.cols() * M);\n+87 result.setZero();\n+88\n+89 for (int i = 0; i < w.cols(); i++) {\n+90 result.block(0, i * M, M, M).diagonal().array() = w(i);\n+91 }\n+92 return result;\n+93}\n+94\n+99template \n+_\b1_\b0_\b0class _\bB_\ba_\bs_\bi_\bs {\n+101 public:\n+_\b1_\b0_\b7 static Matrix _\bW_\be_\bi_\bg_\bh_\bt_\bM_\ba_\bt_\br_\bi_\bx(size_t N, const Vector& X) {\n+108 Matrix W(X.size(), N);\n+109 for (int i = 0; i < X.size(); i++)\n+110 W.row(i) = DERIVED::CalculateWeights(N, X(i));\n+111 return W;\n+112 }\n+113\n+_\b1_\b2_\b3 static Matrix _\bW_\be_\bi_\bg_\bh_\bt_\bM_\ba_\bt_\br_\bi_\bx(size_t N, const Vector& X, double a, double b) {\n+124 Matrix W(X.size(), N);\n+125 for (int i = 0; i < X.size(); i++)\n+126 W.row(i) = DERIVED::CalculateWeights(N, X(i), a, b);\n+127 return W;\n+128 }\n+129\n+_\b1_\b3_\b7 class _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br {\n+138 protected:\n+139 Weights weights_;\n+140\n+141 public:\n+_\b1_\b4_\b3 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n+144\n+_\b1_\b4_\b6 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x)\n+147 : weights_(DERIVED::CalculateWeights(N, x)) {}\n+148\n+_\b1_\b5_\b0 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x, double a, double b)\n+151 : weights_(DERIVED::CalculateWeights(N, x, a, b)) {}\n+152\n+_\b1_\b5_\b4 double _\ba_\bp_\bp_\bl_\by(const typename DERIVED::Parameters& p,\n+155 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+156 if (H) *H = weights_;\n+157 return (weights_ * p)(0);\n+158 }\n+159\n+_\b1_\b6_\b1 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const typename DERIVED::Parameters& p,\n+162 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+163 return _\ba_\bp_\bp_\bl_\by(p, H); // might call apply in derived\n+164 }\n+165\n+166 void print(const std::string& s = \"\") const {\n+167 std::cout << s << (s != \"\" ? \" \" : \"\") << weights_ << std::endl;\n+168 }\n+169 };\n+170\n+177 template \n+_\b1_\b7_\b8 class _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br : protected _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br {\n+179 protected:\n+180 using VectorM = Eigen::Matrix;\n+181 using Jacobian = Eigen::Matrix;\n+182 Jacobian H_;\n+183\n+_\b1_\b9_\b2 void _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() {\n+193 H_ = kroneckerProductIdentity(this->weights_);\n+194 }\n+195\n+196 public:\n+197 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n+198\n+_\b2_\b0_\b0 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n+201\n+_\b2_\b0_\b3 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x) : _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(N, x) {\n+204 _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn();\n+205 }\n+206\n+_\b2_\b0_\b8 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x, double a, double b)\n+209 : _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(N, x, a, b) {\n+210 _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn();\n+211 }\n+212\n+_\b2_\b1_\b4 VectorM _\ba_\bp_\bp_\bl_\by(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n+215 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+216 if (H) *H = H_;\n+217 return P.matrix() * this->weights_.transpose();\n+218 }\n+219\n+_\b2_\b2_\b1 VectorM _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n+222 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+223 return _\ba_\bp_\bp_\bl_\by(P, H);\n+224 }\n+225 };\n+226\n+234 template \n+_\b2_\b3_\b5 class _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br : public _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br {\n+236 protected:\n+237 using Jacobian = Eigen::Matrix;\n+238 size_t rowIndex_;\n+239 Jacobian H_;\n+240\n+241 /*\n+242 * Calculate the `1*(M*N)` Jacobian of this functor with respect to\n+243 * the M*N parameter matrix `P`.\n+244 * We flatten assuming column-major order, e.g., if N=3 and M=2, we have\n+245 * H=[w(0) 0 w(1) 0 w(2) 0] for rowIndex==0\n+246 * H=[0 w(0) 0 w(1) 0 w(2)] for rowIndex==1\n+247 * i.e., one row of the Kronecker product of weights_ with the\n+248 * MxM identity matrix. See also VectorEvaluationFunctor.\n+249 */\n+250 void calculateJacobian(size_t N) {\n+251 H_.setZero(1, M * N);\n+252 for (int j = 0; j < EvaluationFunctor::weights_.size(); j++)\n+253 H_(0, rowIndex_ + j * M) = EvaluationFunctor::weights_(j);\n+254 }\n+255\n+256 public:\n+_\b2_\b5_\b8 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n+259\n+_\b2_\b6_\b1 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, size_t i, double x)\n+262 : _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(N, x), rowIndex_(i) {\n+263 calculateJacobian(N);\n+264 }\n+265\n+_\b2_\b6_\b7 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, size_t i, double x, double a, double b)\n+268 : _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(N, x, a, b), rowIndex_(i) {\n+269 calculateJacobian(N);\n+270 }\n+271\n+_\b2_\b7_\b3 double _\ba_\bp_\bp_\bl_\by(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n+274 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\b1_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+275 if (H) *H = H_;\n+276 return P.row(rowIndex_) * EvaluationFunctor::weights_.transpose();\n+277 }\n+278\n+_\b2_\b8_\b0 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n+281 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\b1_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+282 return _\ba_\bp_\bp_\bl_\by(P, H);\n+283 }\n+284 };\n 285\n-286 public:\n-287 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n-288\n-_\b2_\b9_\b9 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n-300 const size_t N, double x)\n-301 : Base(_\bk_\be_\by, z, model, typename BASIS::DerivativeFunctor(N, x)) {}\n-302\n-_\b3_\b1_\b5 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n-316 const size_t N, double x, double a, double b)\n-317 : Base(_\bk_\be_\by, z, model, typename BASIS::DerivativeFunctor(N, x, a, b)) {}\n-318\n-319 virtual _\b~_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n-320};\n+299 template \n+_\b3_\b0_\b0 class _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+301 : public _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br::dimension> {\n+302 enum { M = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn };\n+303 using Base = _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b<_\bM_\b>;\n+304\n+305 public:\n+_\b3_\b0_\b7 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n+308\n+_\b3_\b1_\b0 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x) : Base(N, x) {}\n+311\n+_\b3_\b1_\b3 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x, double a, double b)\n+314 : Base(N, x, a, b) {}\n+315\n+_\b3_\b1_\b7 T _\ba_\bp_\bp_\bl_\by(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n+318 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+319 // Interpolate the M-dimensional vector to yield a vector in tangent space\n+320 Eigen::Matrix xi = Base::operator()(P, H);\n 321\n-329template \n-_\b3_\b3_\b0class _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-331 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> {\n-332 private:\n-333 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bV_\be_\bc_\bt_\bo_\br_\b,_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>>;\n-334 using Func = typename BASIS::template VectorDerivativeFunctor;\n-335\n-336 public:\n-337 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n-338\n-_\b3_\b4_\b9 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Vector &z,\n-350 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n-351 double x)\n-352 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, Func(N, x)) {}\n+322 // Now call retract with this M-vector, possibly with derivatives\n+323 Eigen::Matrix D_result_xi;\n+324 T result = T::ChartAtOrigin::Retract(xi, H ? &D_result_xi : 0);\n+325\n+326 // Finally, if derivatives are asked, apply chain rule where H is Mx(M*N)\n+327 // derivative of interpolation and D_result_xi is MxM derivative of\n+328 // retract.\n+329 if (H) *H = D_result_xi * (*H);\n+330\n+331 // and return a T\n+332 return result;\n+333 }\n+334\n+_\b3_\b3_\b6 T _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n+337 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+338 return _\ba_\bp_\bp_\bl_\by(P, H); // might call apply in derived\n+339 }\n+340 };\n+341\n+_\b3_\b4_\b3 class _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be {\n+344 protected:\n+345 Weights weights_;\n+346\n+347 public:\n+_\b3_\b4_\b9 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be() {}\n+350\n+351 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(size_t N, double x)\n+352 : weights_(DERIVED::DerivativeWeights(N, x)) {}\n 353\n-_\b3_\b6_\b6 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Vector &z,\n-367 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n-368 double x, double a, double b)\n-369 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, Func(N, x, a, b)) {}\n-370\n-371 virtual _\b~_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n-372};\n+354 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(size_t N, double x, double a, double b)\n+355 : weights_(DERIVED::DerivativeWeights(N, x, a, b)) {}\n+356\n+357 void print(const std::string& s = \"\") const {\n+358 std::cout << s << (s != \"\" ? \" \" : \"\") << weights_ << std::endl;\n+359 }\n+360 };\n+361\n+_\b3_\b6_\b9 class _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br : protected _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be {\n+370 public:\n+_\b3_\b7_\b2 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n 373\n-382template \n-_\b3_\b8_\b3class _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-384 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> {\n-385 private:\n-386 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bP_\b>>;\n-387 using Func = typename BASIS::template ComponentDerivativeFunctor

;\n-388\n-389 public:\n-390 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n-391\n-_\b4_\b0_\b5 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z,\n-406 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n-407 size_t i, double x)\n-408 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, Func(N, i, x)) {}\n-409\n-_\b4_\b2_\b5 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z,\n-426 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n-427 size_t i, double x, double a, double b)\n-428 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, Func(N, i, x, a, b)) {}\n-429\n-430 virtual _\b~_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n-431};\n-432\n-433} // namespace gtsam\n-_\bB_\ba_\bs_\bi_\bs_\b._\bh\n-Compute an interpolating basis.\n-_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+374 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x) : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x) {}\n+375\n+376 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x, double a, double b)\n+377 : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x, a, b) {}\n+378\n+379 double apply(const typename DERIVED::Parameters& p,\n+380 OptionalJacobian H = boost::none) const {\n+381 if (H) *H = this->weights_;\n+382 return (this->weights_ * p)(0);\n+383 }\n+_\b3_\b8_\b5 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const typename DERIVED::Parameters& p,\n+386 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\b1_\bx_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+387 return apply(p, H); // might call apply in derived\n+388 }\n+389 };\n+390\n+399 template \n+_\b4_\b0_\b0 class _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br : protected _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be {\n+401 protected:\n+402 using VectorM = Eigen::Matrix;\n+403 using Jacobian = Eigen::Matrix;\n+404 Jacobian H_;\n+405\n+_\b4_\b1_\b4 void _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() {\n+415 H_ = kroneckerProductIdentity(this->weights_);\n+416 }\n+417\n+418 public:\n+419 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n+420\n+_\b4_\b2_\b2 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n+423\n+_\b4_\b2_\b5 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x) : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x) {\n+426 _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn();\n+427 }\n+428\n+_\b4_\b3_\b0 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, double x, double a, double b)\n+431 : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x, a, b) {\n+432 _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn();\n+433 }\n+434\n+435 VectorM apply(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n+436 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+437 if (H) *H = H_;\n+438 return P.matrix() * this->weights_.transpose();\n+439 }\n+_\b4_\b4_\b1 VectorM _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(\n+442 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n+443 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\bM_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+444 return apply(P, H);\n+445 }\n+446 };\n+447\n+455 template \n+_\b4_\b5_\b6 class _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br : protected _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be {\n+457 protected:\n+458 using Jacobian = Eigen::Matrix;\n+459 size_t rowIndex_;\n+460 Jacobian H_;\n+461\n+462 /*\n+463 * Calculate the `1*(M*N)` Jacobian of this functor with respect to\n+464 * the M*N parameter matrix `P`.\n+465 * We flatten assuming column-major order, e.g., if N=3 and M=2, we have\n+466 * H=[w(0) 0 w(1) 0 w(2) 0] for rowIndex==0\n+467 * H=[0 w(0) 0 w(1) 0 w(2)] for rowIndex==1\n+468 * i.e., one row of the Kronecker product of weights_ with the\n+469 * MxM identity matrix. See also VectorDerivativeFunctor.\n+470 */\n+471 void calculateJacobian(size_t N) {\n+472 H_.setZero(1, M * N);\n+473 for (int j = 0; j < this->weights_.size(); j++)\n+474 H_(0, rowIndex_ + j * M) = this->weights_(j);\n+475 }\n+476\n+477 public:\n+_\b4_\b7_\b9 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br() {}\n+480\n+_\b4_\b8_\b2 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, size_t i, double x)\n+483 : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x), rowIndex_(i) {\n+484 calculateJacobian(N);\n+485 }\n+486\n+_\b4_\b8_\b8 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br(size_t N, size_t i, double x, double a, double\n+b)\n+489 : _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(N, x, a, b), rowIndex_(i) {\n+490 calculateJacobian(N);\n+491 }\n+_\b4_\b9_\b3 double _\ba_\bp_\bp_\bl_\by(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n+494 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\b1_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+495 if (H) *H = H_;\n+496 return P.row(rowIndex_) * this->weights_.transpose();\n+497 }\n+_\b4_\b9_\b9 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>& P,\n+500 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b/_\b*_\b1_\bx_\bM_\bN_\b*_\b/_\b _\b-_\b1_\b,_\b _\b-_\b1_\b> H = boost::none) const {\n+501 return _\ba_\bp_\bp_\bl_\by(P, H);\n+502 }\n+503 };\n+504\n+505};\n+506\n+507} // namespace gtsam\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n+Special class for optional Jacobian arguments.\n+_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+Define ParameterMatrix class which is used to store values at interpolation\n+points.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bk_\br_\bo_\bn_\be_\bc_\bk_\be_\br_\bP_\br_\bo_\bd_\bu_\bc_\bt_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+Matrix kroneckerProductIdentity(const Weights &w)\n+Function for computing the kronecker product of the 1*N Weight vector w with\n+the MxM identity matrix ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:85\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-Factor for enforcing the scalar value of the polynomial BASIS representation at\n-x is the same as the ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-EvaluationFactor(Key key, double z, const SharedNoiseModel &model, const size_t\n-N, double x)\n-Construct a new EvaluationFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-EvaluationFactor(Key key, double z, const SharedNoiseModel &model, const size_t\n-N, double x, double a, double b)\n-Construct a new EvaluationFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of\n-size (M,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-VectorEvaluationFactor(Key key, const Vector &z, const SharedNoiseModel &model,\n-const size_t N, double x, double a, double b)\n-Construct a new VectorEvaluationFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-VectorEvaluationFactor(Key key, const Vector &z, const SharedNoiseModel &model,\n-const size_t N, double x)\n-Construct a new VectorEvaluationFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br\n-Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of\n-size (P,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br\n-VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model,\n-const size_t N, size_t i, double x, double a, double b)\n-Construct a new VectorComponentFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:201\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br\n-VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model,\n-const size_t N, size_t i, double x)\n-Construct a new VectorComponentFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:181\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-For a measurement value of type T i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:230\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-ManifoldEvaluationFactor(Key key, const T &z, const SharedNoiseModel &model,\n-const size_t N, double x, double a, double b)\n-Construct a new ManifoldEvaluationFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:264\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-ManifoldEvaluationFactor(Key key, const T &z, const SharedNoiseModel &model,\n-const size_t N, double x)\n-Construct a new ManifoldEvaluationFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:247\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-A unary factor which enforces the evaluation of the derivative of a BASIS\n-polynomial at a specified p...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:282\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const\n-size_t N, double x, double a, double b)\n-Construct a new DerivativeFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:315\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const\n-size_t N, double x)\n-Construct a new DerivativeFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:299\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-A unary factor which enforces the evaluation of the derivative of a BASIS\n-polynomial at a specified p...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:331\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-VectorDerivativeFactor(Key key, const Vector &z, const SharedNoiseModel &model,\n-const size_t N, double x)\n-Construct a new VectorDerivativeFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:349\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-VectorDerivativeFactor(Key key, const Vector &z, const SharedNoiseModel &model,\n-const size_t N, double x, double a, double b)\n-Construct a new VectorDerivativeFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:366\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-A unary factor which enforces the evaluation of the derivative of a BASIS\n-polynomial is equal to the ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:384\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel\n-&model, const size_t N, size_t i, double x, double a, double b)\n-Construct a new ComponentDerivativeFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:425\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n-ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel\n-&model, const size_t N, size_t i, double x)\n-Construct a new ComponentDerivativeFactor object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:405\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-Factor which evaluates provided unary functor and uses the result to compute\n-error with respect to th...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bk_\be_\by\n-Key key() const\n-Returns a key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs\n+CRTP Base class for function bases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt_\bM_\ba_\bt_\br_\bi_\bx\n+static Matrix WeightMatrix(size_t N, const Vector &X, double a, double b)\n+Calculate weights for all x in vector X, with interval [a,b].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bW_\be_\bi_\bg_\bh_\bt_\bM_\ba_\bt_\br_\bi_\bx\n+static Matrix WeightMatrix(size_t N, const Vector &X)\n+Calculate weights for all x in vector X.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+An instance of an EvaluationFunctor calculates f(x;p) at a given x, applied to\n+Parameters p.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+EvaluationFunctor(size_t N, double x)\n+Constructor with interval [a,b].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:146\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+EvaluationFunctor(size_t N, double x, double a, double b)\n+Constructor with interval [a,b].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+double apply(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -1 >\n+H=boost::none) const\n+Regular 1D evaluation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+EvaluationFunctor()\n+For serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+double operator()(const typename DERIVED::Parameters &p, OptionalJacobian<-1, -\n+1 > H=boost::none) const\n+c++ sugar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:161\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+VectorEvaluationFunctor at a given x, applied to ParameterMatrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:178\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+VectorEvaluationFunctor(size_t N, double x, double a, double b)\n+Constructor, with interval [a,b].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:208\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+EIGEN_MAKE_ALIGNED_OPERATOR_NEW VectorEvaluationFunctor()\n+For serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:200\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+VectorEvaluationFunctor(size_t N, double x)\n+Default Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:203\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+void calculateJacobian()\n+Calculate the M*(M*N) Jacobian of this functor with respect to the M*N\n+parameter matrix P.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+VectorM operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n+H=boost::none) const\n+c++ sugar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:221\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+VectorM apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n+H=boost::none) const\n+M-dimensional evaluation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:214\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+Given a M*N Matrix of M-vectors at N polynomial points, an instance of\n+VectorComponentFunctor compute...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:235\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+double operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n+H=boost::none) const\n+c++ sugar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:280\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+VectorComponentFunctor()\n+For serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:258\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+VectorComponentFunctor(size_t N, size_t i, double x)\n+Construct with row index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:261\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+VectorComponentFunctor(size_t N, size_t i, double x, double a, double b)\n+Construct with row index and interval.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:267\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+double apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n+H=boost::none) const\n+Calculate component of component rowIndex_ of P.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:273\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+Manifold EvaluationFunctor at a given x, applied to ParameterMatrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:301\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+ManifoldEvaluationFunctor(size_t N, double x, double a, double b)\n+Constructor, with interval [a,b].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:313\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+T apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 > H=boost::\n+none) const\n+Manifold evaluation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:317\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+ManifoldEvaluationFunctor()\n+For serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:307\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+ManifoldEvaluationFunctor(size_t N, double x)\n+Default Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:310\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+T operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n+H=boost::none) const\n+c++ sugar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:336\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n+Base class for functors below that calculate derivative weights.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:343\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n+DerivativeFunctorBase()\n+For serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:349\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+An instance of a DerivativeFunctor calculates f'(x;p) at a given x, applied to\n+Parameters p.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:369\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+DerivativeFunctor()\n+For serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:372\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+double operator()(const typename DERIVED::Parameters &p, OptionalJacobian< -1,\n+-1 > H=boost::none) const\n+c++ sugar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:385\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+VectorDerivativeFunctor at a given x, applied to ParameterMatrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+void calculateJacobian()\n+Calculate the M*(M*N) Jacobian of this functor with respect to the M*N\n+parameter matrix P.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:414\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+VectorDerivativeFunctor(size_t N, double x, double a, double b)\n+Constructor, with optional interval [a,b].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:430\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+VectorM operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n+H=boost::none) const\n+c++ sugar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:441\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+EIGEN_MAKE_ALIGNED_OPERATOR_NEW VectorDerivativeFunctor()\n+For serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:422\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+VectorDerivativeFunctor(size_t N, double x)\n+Default Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:425\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+Given a M*N Matrix of M-vectors at N polynomial points, an instance of\n+ComponentDerivativeFunctor com...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:456\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+ComponentDerivativeFunctor(size_t N, size_t i, double x)\n+Construct with row index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:482\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+double operator()(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n+H=boost::none) const\n+c++ sugar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:499\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+ComponentDerivativeFunctor()\n+For serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:479\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+ComponentDerivativeFunctor(size_t N, size_t i, double x, double a, double b)\n+Construct with row index and interval.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:488\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\bs_\bi_\bs_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+double apply(const ParameterMatrix< M > &P, OptionalJacobian< -1, -1 >\n+H=boost::none) const\n+Calculate derivative of component rowIndex_ of F.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Basis.h:493\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx\n+A matrix abstraction of MxN values at the Basis points.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ParameterMatrix.h:38\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\bi_\bs\n- * _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b._\bh\n+ * _\bB_\ba_\bs_\bi_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00179.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00179.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteJunctionTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTree.h File Reference\n \n \n \n \n \n \n \n@@ -96,49 +96,72 @@\n \n \n \n

\n \n-
DiscreteJunctionTree.h File Reference
\n+Functions
\n+
DecisionTree.h File Reference
\n \n
\n \n+

Decision Tree for use in DiscreteFactors. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::DiscreteJunctionTree
 An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree, with the additional property that it represents the clique tree associated with a Bayes net. More...
class  gtsam::DecisionTree< L, Y >
 a decision tree is a function from assignments to values. More...
 
struct  gtsam::DecisionTree< L, Y >::Node
 ---------------------— Node base class ------------------------— More...
 
struct  gtsam::traits< DecisionTree< L, Y > >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n-Typedefs

\n-using gtsam::DiscreteCluster = DiscreteJunctionTree::Cluster
 typedef for wrapper:
 

\n+Functions

template<typename L , typename Y >
DecisionTree< L, Y > gtsam::apply (const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::Unary &op)
 free versions of apply
 
\n+template<typename L , typename Y >
DecisionTree< L, Y > gtsam::apply (const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::UnaryAssignment &op)
 Apply unary operator op with Assignment to DecisionTree f.
 
\n+template<typename L , typename Y >
DecisionTree< L, Y > gtsam::apply (const DecisionTree< L, Y > &f, const DecisionTree< L, Y > &g, const typename DecisionTree< L, Y >::Binary &op)
 Apply binary operator op to DecisionTree f.
 
template<typename L , typename T1 , typename T2 >
std::pair< DecisionTree< L, T1 >, DecisionTree< L, T2 > > gtsam::unzip (const DecisionTree< L, std::pair< T1, T2 > > &input)
 unzip a DecisionTree with std::pair values.
 
\n

Detailed Description

\n-
Date
Mar 29, 2013
\n+

Decision Tree for use in DiscreteFactors.

\n
Author
Frank Dellaert
\n
\n-Richard Roberts
\n+Can Erdogan \n+
Date
Jan 30, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,59 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-DiscreteJunctionTree.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+DecisionTree.h File Reference\n+Decision Tree for use in DiscreteFactors. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n- An _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be, i.e., a set of variable clusters with\n-\u00a0 factors, arranged in a tree, with the additional property that it\n- represents the clique tree associated with a Bayes net. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b,_\b _\bY_\b _\b>\n+\u00a0 a decision tree is a function from assignments to values. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b,_\b _\bY_\b _\b>_\b:_\b:_\bN_\bo_\bd_\be\n+\u00a0 ---------------------\u2014 _\bN_\bo_\bd_\be base class ------------------------\n+ \u2014 _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b,_\b _\bY_\b _\b>_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDi\bis\bsc\bcr\bre\bet\bte\beC\bCl\blu\bus\bst\bte\ber\br = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n-\u00a0 typedef for wrapper:\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bp_\bp_\bl_\by (const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y > &f,\n+ const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >::Unary\n+ &op)\n+\u00a0 free versions of apply\n+\u00a0\n+template\n+ _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bap\bpp\bpl\bly\by (const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y > &f,\n+ const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >::\n+ UnaryAssignment &op)\n+\u00a0 Apply unary operator op with _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt to\n+ _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be f.\n+\u00a0\n+template\n+ _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bap\bpp\bpl\bly\by (const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y > &f,\n+ const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y > &g, const typename\n+ _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >::Binary &op)\n+\u00a0 Apply binary operator op to _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be f.\n+\u00a0\n+template\n+std::pair< _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, T1 >, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bz_\bi_\bp (const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, std::\n+ _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, T2 > >\u00a0 pair< T1, T2 > > &input)\n+\u00a0 unzip a _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be with std::pair values.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Mar 29, 2013\n+Decision Tree for use in DiscreteFactors.\n Author\n Frank Dellaert\n- Richard Roberts\n+ Can Erdogan\n+ Date\n+ Jan 30, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00179.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00179.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,8 @@\n var a00179 = [\n- [\"DiscreteCluster\", \"a00179.html#aa8c26fa5afbbfd23795d7d421e543a81\", null]\n+ [\"gtsam::DecisionTree< L, Y >::Node\", \"a02800.html\", \"a02800\"],\n+ [\"gtsam::traits< DecisionTree< L, Y > >\", \"a02804.html\", null],\n+ [\"apply\", \"a00179.html#ae890a8919b441443ffdc0d8ab047838d\", null],\n+ [\"apply\", \"a00179.html#ad19a5c8f7d997b0b16cf646659834b0f\", null],\n+ [\"apply\", \"a00179.html#aaf5f5013828ac5e4750377dcad969276\", null],\n+ [\"unzip\", \"a00179.html#a1744c5e018220146e8df7a68a05d5c43\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00179_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00179_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteJunctionTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTree.h Source File\n \n \n \n \n \n \n \n@@ -98,68 +98,333 @@\n
No Matches
\n \n \n \n \n \n
\n-
DiscreteJunctionTree.h
\n+
DecisionTree.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
27 // Forward declarations
\n-
28 class DiscreteEliminationTree;
\n-
29
\n-
\n-
51 class GTSAM_EXPORT DiscreteJunctionTree :
\n-
52 public JunctionTree<DiscreteBayesTree, DiscreteFactorGraph> {
\n-
53 public:
\n-\n-\n-
56 typedef boost::shared_ptr<This> shared_ptr;
\n-
57
\n-
66 DiscreteJunctionTree(const DiscreteEliminationTree& eliminationTree);
\n-
67 };
\n-
\n-
68
\n-\n-
71}
\n-\n-
Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.
\n-
The junction tree.
\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/base/Testable.h>
\n+
23#include <gtsam/base/types.h>
\n+\n+
25
\n+
26#include <boost/serialization/nvp.hpp>
\n+
27#include <boost/shared_ptr.hpp>
\n+
28#include <functional>
\n+
29#include <iostream>
\n+
30#include <map>
\n+
31#include <set>
\n+
32#include <sstream>
\n+
33#include <string>
\n+
34#include <utility>
\n+
35#include <vector>
\n+
36
\n+
37namespace gtsam {
\n+
38
\n+
60 template<typename L, typename Y>
\n+
\n+\n+
62 protected:
\n+
\n+
64 static bool DefaultCompare(const Y& a, const Y& b) {
\n+
65 return a == b;
\n+
66 }
\n+
\n+
67
\n+
68 public:
\n+
69 using LabelFormatter = std::function<std::string(L)>;
\n+
70 using ValueFormatter = std::function<std::string(Y)>;
\n+
71 using CompareFunc = std::function<bool(const Y&, const Y&)>;
\n+
72
\n+
74 using Unary = std::function<Y(const Y&)>;
\n+
75 using UnaryAssignment = std::function<Y(const Assignment<L>&, const Y&)>;
\n+
76 using Binary = std::function<Y(const Y&, const Y&)>;
\n+
77
\n+
79 using LabelC = std::pair<L, size_t>;
\n+
80
\n+
82 struct Leaf;
\n+
83 struct Choice;
\n+
84
\n+
\n+
86 struct Node {
\n+
87 using Ptr = boost::shared_ptr<const Node>;
\n+
88
\n+
89#ifdef DT_DEBUG_MEMORY
\n+
90 static int nrNodes;
\n+
91#endif
\n+
92
\n+
93 // Constructor
\n+
94 Node() {
\n+
95#ifdef DT_DEBUG_MEMORY
\n+
96 std::cout << ++nrNodes << " constructed " << id() << std::endl;
\n+
97 std::cout.flush();
\n+
98#endif
\n+
99 }
\n+
100
\n+
101 // Destructor
\n+
102 virtual ~Node() {
\n+
103#ifdef DT_DEBUG_MEMORY
\n+
104 std::cout << --nrNodes << " destructed " << id() << std::endl;
\n+
105 std::cout.flush();
\n+
106#endif
\n+
107 }
\n+
108
\n+
109 // Unique ID for dot files
\n+
110 const void* id() const { return this; }
\n+
111
\n+
112 // everything else is virtual, no documentation here as internal
\n+
113 virtual void print(const std::string& s,
\n+
114 const LabelFormatter& labelFormatter,
\n+
115 const ValueFormatter& valueFormatter) const = 0;
\n+
116 virtual void dot(std::ostream& os, const LabelFormatter& labelFormatter,
\n+
117 const ValueFormatter& valueFormatter,
\n+
118 bool showZero) const = 0;
\n+
119 virtual bool sameLeaf(const Leaf& q) const = 0;
\n+
120 virtual bool sameLeaf(const Node& q) const = 0;
\n+
121 virtual bool equals(const Node& other, const CompareFunc& compare =
\n+
122 &DefaultCompare) const = 0;
\n+
123 virtual const Y& operator()(const Assignment<L>& x) const = 0;
\n+
124 virtual Ptr apply(const Unary& op) const = 0;
\n+
125 virtual Ptr apply(const UnaryAssignment& op,
\n+
126 const Assignment<L>& assignment) const = 0;
\n+
127 virtual Ptr apply_f_op_g(const Node&, const Binary&) const = 0;
\n+
128 virtual Ptr apply_g_op_fL(const Leaf&, const Binary&) const = 0;
\n+
129 virtual Ptr apply_g_op_fC(const Choice&, const Binary&) const = 0;
\n+
130 virtual Ptr choose(const L& label, size_t index) const = 0;
\n+
131 virtual bool isLeaf() const = 0;
\n+
132
\n+
133 private:
\n+\n+
136 template <class ARCHIVE>
\n+
137 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {}
\n+
138 };
\n+
\n+
141 public:
\n+
143 using NodePtr = typename Node::Ptr;
\n+
144
\n+\n+
147
\n+
148 protected:
\n+
153 template<typename It, typename ValueIt>
\n+
154 NodePtr create(It begin, It end, ValueIt beginY, ValueIt endY) const;
\n+
155
\n+
166 template <typename M, typename X>
\n+\n+
168 std::function<L(const M&)> L_of_M,
\n+
169 std::function<Y(const X&)> Y_of_X) const;
\n+
170
\n+
171 public:
\n+
174
\n+
176 DecisionTree();
\n+
177
\n+
179 explicit DecisionTree(const Y& y);
\n+
180
\n+
188 DecisionTree(const L& label, const Y& y1, const Y& y2);
\n+
189
\n+
191 DecisionTree(const LabelC& label, const Y& y1, const Y& y2);
\n+
192
\n+
194 DecisionTree(const std::vector<LabelC>& labelCs, const std::vector<Y>& ys);
\n+
195
\n+
197 DecisionTree(const std::vector<LabelC>& labelCs, const std::string& table);
\n+
198
\n+
200 template<typename Iterator>
\n+
201 DecisionTree(Iterator begin, Iterator end, const L& label);
\n+
202
\n+
204 DecisionTree(const L& label, const DecisionTree& f0,
\n+
205 const DecisionTree& f1);
\n+
206
\n+
214 template <typename X, typename Func>
\n+
215 DecisionTree(const DecisionTree<L, X>& other, Func Y_of_X);
\n+
216
\n+
227 template <typename M, typename X, typename Func>
\n+
228 DecisionTree(const DecisionTree<M, X>& other, const std::map<M, L>& map,
\n+
229 Func Y_of_X);
\n+
230
\n+
234
\n+
242 void print(const std::string& s, const LabelFormatter& labelFormatter,
\n+
243 const ValueFormatter& valueFormatter) const;
\n+
244
\n+
245 // Testable
\n+
246 bool equals(const DecisionTree& other,
\n+
247 const CompareFunc& compare = &DefaultCompare) const;
\n+
248
\n+
252
\n+
254 virtual ~DecisionTree() = default;
\n+
255
\n+
257 bool empty() const { return !root_; }
\n+
258
\n+
260 bool operator==(const DecisionTree& q) const;
\n+
261
\n+
263 const Y& operator()(const Assignment<L>& x) const;
\n+
264
\n+
279 template <typename Func>
\n+
280 void visit(Func f) const;
\n+
281
\n+
296 template <typename Func>
\n+
297 void visitLeaf(Func f) const;
\n+
298
\n+
313 template <typename Func>
\n+
314 void visitWith(Func f) const;
\n+
315
\n+
317 size_t nrLeaves() const;
\n+
318
\n+
334 template <typename Func, typename X>
\n+
335 X fold(Func f, X x0) const;
\n+
336
\n+
338 std::set<L> labels() const;
\n+
339
\n+
341 DecisionTree apply(const Unary& op) const;
\n+
342
\n+
351 DecisionTree apply(const UnaryAssignment& op) const;
\n+
352
\n+
354 DecisionTree apply(const DecisionTree& g, const Binary& op) const;
\n+
355
\n+
\n+
358 DecisionTree choose(const L& label, size_t index) const {
\n+
359 NodePtr newRoot = root_->choose(label, index);
\n+
360 return DecisionTree(newRoot);
\n+
361 }
\n+
\n+
362
\n+
364 DecisionTree combine(const L& label, size_t cardinality,
\n+
365 const Binary& op) const;
\n+
366
\n+
\n+
368 DecisionTree combine(const LabelC& labelC, const Binary& op) const {
\n+
369 return combine(labelC.first, labelC.second, op);
\n+
370 }
\n+
\n+
371
\n+
373 void dot(std::ostream& os, const LabelFormatter& labelFormatter,
\n+
374 const ValueFormatter& valueFormatter, bool showZero = true) const;
\n+
375
\n+
377 void dot(const std::string& name, const LabelFormatter& labelFormatter,
\n+
378 const ValueFormatter& valueFormatter, bool showZero = true) const;
\n+
379
\n+
381 std::string dot(const LabelFormatter& labelFormatter,
\n+
382 const ValueFormatter& valueFormatter,
\n+
383 bool showZero = true) const;
\n+
384
\n+
387
\n+
388 // internal use only
\n+
389 explicit DecisionTree(const NodePtr& root);
\n+
390
\n+
391 // internal use only
\n+
392 template<typename Iterator> NodePtr
\n+
393 compose(Iterator begin, Iterator end, const L& label) const;
\n+
394
\n+
396
\n+
397 private:
\n+\n+
400 template <class ARCHIVE>
\n+
401 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
402 ar& BOOST_SERIALIZATION_NVP(root_);
\n+
403 }
\n+
404 }; // DecisionTree
\n+
\n+
405
\n+
406 template <class L, class Y>
\n+
407 struct traits<DecisionTree<L, Y>> : public Testable<DecisionTree<L, Y>> {};
\n+
408
\n+
412 template<typename L, typename Y>
\n+
\n+\n+
414 const typename DecisionTree<L, Y>::Unary& op) {
\n+
415 return f.apply(op);
\n+
416 }
\n+
\n+
417
\n+
419 template<typename L, typename Y>
\n+
\n+\n+
421 const typename DecisionTree<L, Y>::UnaryAssignment& op) {
\n+
422 return f.apply(op);
\n+
423 }
\n+
\n+
424
\n+
426 template<typename L, typename Y>
\n+
\n+\n+
428 const DecisionTree<L, Y>& g,
\n+
429 const typename DecisionTree<L, Y>::Binary& op) {
\n+
430 return f.apply(g, op);
\n+
431 }
\n+
\n+
432
\n+
439 template <typename L, typename T1, typename T2>
\n+
\n+
440 std::pair<DecisionTree<L, T1>, DecisionTree<L, T2> > unzip(
\n+
441 const DecisionTree<L, std::pair<T1, T2> >& input) {
\n+
442 return std::make_pair(
\n+
443 DecisionTree<L, T1>(input, [](std::pair<T1, T2> i) { return i.first; }),
\n+\n+
445 [](std::pair<T1, T2> i) { return i.second; }));
\n+
446 }
\n+
\n+
447
\n+
448} // namespace gtsam
\n+
Typedefs for easier changing of types.
\n+
Concept check for values that can be used in unit tests.
\n+
An assignment from labels to a discrete value index (size_t)
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Elimination tree for discrete factors.
Definition DiscreteEliminationTree.h:33
\n-
An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition DiscreteJunctionTree.h:52
\n-
JunctionTree< DiscreteBayesTree, DiscreteFactorGraph > Base
Base class.
Definition DiscreteJunctionTree.h:54
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition DiscreteJunctionTree.h:56
\n-
DiscreteJunctionTree This
This class.
Definition DiscreteJunctionTree.h:55
\n-
A Cluster is just a collection of factors.
Definition ClusterTree.h:36
\n-
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n+
std::pair< DecisionTree< L, T1 >, DecisionTree< L, T2 > > unzip(const DecisionTree< L, std::pair< T1, T2 > > &input)
unzip a DecisionTree with std::pair values.
Definition DecisionTree.h:440
\n+
DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::Unary &op)
free versions of apply
Definition DecisionTree.h:413
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
An assignment from labels to value index (size_t).
Definition Assignment.h:37
\n+
Definition DecisionTree-inl.h:52
\n+
Definition DecisionTree-inl.h:172
\n+
a decision tree is a function from assignments to values.
Definition DecisionTree.h:61
\n+
DecisionTree apply(const Unary &op) const
apply Unary operation "op" to f
Definition DecisionTree-inl.h:889
\n+
DecisionTree choose(const L &label, size_t index) const
create a new function where value(label)==index It's like "restrict" in Darwiche09book pg329,...
Definition DecisionTree.h:358
\n+
NodePtr convertFrom(const typename DecisionTree< M, X >::NodePtr &f, std::function< L(const M &)> L_of_M, std::function< Y(const X &)> Y_of_X) const
Convert from a DecisionTree<M, X> to DecisionTree<L, Y>.
Definition DecisionTree-inl.h:671
\n+
DecisionTree combine(const LabelC &labelC, const Binary &op) const
combine with LabelC for convenience
Definition DecisionTree.h:368
\n+
NodePtr create(It begin, It end, ValueIt beginY, ValueIt endY) const
Internal recursive function to create from keys, cardinalities, and Y values.
Definition DecisionTree-inl.h:630
\n+
virtual ~DecisionTree()=default
Make virtual.
\n+
static bool DefaultCompare(const Y &a, const Y &b)
Default method for comparison of two objects of type Y.
Definition DecisionTree.h:64
\n+
typename Node::Ptr NodePtr
---------------------\u2014 Node base class ------------------------\u2014
Definition DecisionTree.h:143
\n+
std::set< L > labels() const
Retrieve all unique labels as a set.
Definition DecisionTree-inl.h:853
\n+
bool empty() const
Check if tree is empty.
Definition DecisionTree.h:257
\n+
void visit(Func f) const
Visit all leaves in depth-first fashion.
Definition DecisionTree-inl.h:736
\n+
void visitLeaf(Func f) const
Visit all leaves in depth-first fashion.
Definition DecisionTree-inl.h:773
\n+
std::function< Y(const Y &)> Unary
Handy typedefs for unary and binary function types.
Definition DecisionTree.h:74
\n+
X fold(Func f, X x0) const
Fold a binary function over the tree, returning accumulator.
Definition DecisionTree-inl.h:833
\n+
NodePtr root_
A DecisionTree just contains the root. TODO(dellaert): make protected.
Definition DecisionTree.h:146
\n+
void print(const std::string &s, const LabelFormatter &labelFormatter, const ValueFormatter &valueFormatter) const
GTSAM-style print.
Definition DecisionTree-inl.h:872
\n+
DecisionTree combine(const L &label, size_t cardinality, const Binary &op) const
combine subtrees on key with binary operation "op"
Definition DecisionTree-inl.h:937
\n+
void visitWith(Func f) const
Visit all leaves in depth-first fashion.
Definition DecisionTree-inl.h:816
\n+
const Y & operator()(const Assignment< L > &x) const
evaluate
Definition DecisionTree-inl.h:884
\n+
void dot(std::ostream &os, const LabelFormatter &labelFormatter, const ValueFormatter &valueFormatter, bool showZero=true) const
output to graphviz format, stream version
Definition DecisionTree-inl.h:949
\n+
friend class boost::serialization::access
Serialization function.
Definition DecisionTree.h:399
\n+
bool operator==(const DecisionTree &q) const
equality
Definition DecisionTree-inl.h:879
\n+
std::pair< L, size_t > LabelC
A label annotated with cardinality.
Definition DecisionTree.h:79
\n+
size_t nrLeaves() const
Return the number of leaves in the tree.
Definition DecisionTree-inl.h:823
\n+
DecisionTree()
Default constructor (for serialization)
Definition DecisionTree-inl.h:462
\n+
---------------------\u2014 Node base class ------------------------\u2014
Definition DecisionTree.h:86
\n+
friend class boost::serialization::access
Serialization function.
Definition DecisionTree.h:135
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,81 +1,417 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteJunctionTree.h\n+DecisionTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-27 // Forward declarations\n-28 class DiscreteEliminationTree;\n-29\n-_\b5_\b1 class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n-52 public _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n-53 public:\n-_\b5_\b4 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b,_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n-_\b5_\b5 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-_\b5_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-57\n-66 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be& eliminationTree);\n-67 };\n-68\n-_\b7_\b0 using _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bl_\bu_\bs_\bt_\be_\br = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br;\n-71}\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.\n-_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-The junction tree.\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh>\n+25\n+26#include \n+27#include \n+28#include \n+29#include \n+30#include \n+31#include \n+32#include \n+33#include \n+34#include \n+35#include \n+36\n+37namespace _\bg_\bt_\bs_\ba_\bm {\n+38\n+60 template\n+_\b6_\b1 class _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be {\n+62 protected:\n+_\b6_\b4 static bool _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bo_\bm_\bp_\ba_\br_\be(const Y& a, const Y& b) {\n+65 return a == b;\n+66 }\n+67\n+68 public:\n+69 using LabelFormatter = std::function;\n+70 using ValueFormatter = std::function;\n+71 using CompareFunc = std::function;\n+72\n+_\b7_\b4 using _\bU_\bn_\ba_\br_\by = std::function;\n+75 using UnaryAssignment = std::function&, const Y&)>;\n+76 using Binary = std::function;\n+77\n+_\b7_\b9 using _\bL_\ba_\bb_\be_\bl_\bC = std::pair;\n+80\n+82 struct _\bL_\be_\ba_\bf;\n+83 struct _\bC_\bh_\bo_\bi_\bc_\be;\n+84\n+_\b8_\b6 struct _\bN_\bo_\bd_\be {\n+87 using Ptr = boost::shared_ptr;\n+88\n+89#ifdef DT_DEBUG_MEMORY\n+90 static int nrNodes;\n+91#endif\n+92\n+93 // Constructor\n+94 _\bN_\bo_\bd_\be() {\n+95#ifdef DT_DEBUG_MEMORY\n+96 std::cout << ++nrNodes << \" constructed \" << id() << std::endl;\n+97 std::cout.flush();\n+98#endif\n+99 }\n+100\n+101 // Destructor\n+102 virtual _\b~_\bN_\bo_\bd_\be() {\n+103#ifdef DT_DEBUG_MEMORY\n+104 std::cout << --nrNodes << \" destructed \" << id() << std::endl;\n+105 std::cout.flush();\n+106#endif\n+107 }\n+108\n+109 // Unique ID for dot files\n+110 const void* id() const { return this; }\n+111\n+112 // everything else is virtual, no documentation here as internal\n+113 virtual void print(const std::string& s,\n+114 const LabelFormatter& labelFormatter,\n+115 const ValueFormatter& valueFormatter) const = 0;\n+116 virtual void dot(std::ostream& os, const LabelFormatter& labelFormatter,\n+117 const ValueFormatter& valueFormatter,\n+118 bool showZero) const = 0;\n+119 virtual bool sameLeaf(const _\bL_\be_\ba_\bf& q) const = 0;\n+120 virtual bool sameLeaf(const _\bN_\bo_\bd_\be& q) const = 0;\n+121 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bd_\be& other, const CompareFunc& compare =\n+122 &_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bo_\bm_\bp_\ba_\br_\be) const = 0;\n+123 virtual const Y& operator()(const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>& x) const = 0;\n+124 virtual Ptr apply(const _\bU_\bn_\ba_\br_\by& op) const = 0;\n+125 virtual Ptr apply(const UnaryAssignment& op,\n+126 const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>& assignment) const = 0;\n+127 virtual Ptr apply_f_op_g(const _\bN_\bo_\bd_\be&, const Binary&) const = 0;\n+128 virtual Ptr apply_g_op_fL(const _\bL_\be_\ba_\bf&, const Binary&) const = 0;\n+129 virtual Ptr apply_g_op_fC(const _\bC_\bh_\bo_\bi_\bc_\be&, const Binary&) const = 0;\n+130 virtual Ptr choose(const L& label, size_t index) const = 0;\n+131 virtual bool isLeaf() const = 0;\n+132\n+133 private:\n+_\b1_\b3_\b5 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+136 template \n+137 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {}\n+138 };\n+141 public:\n+_\b1_\b4_\b3 using _\bN_\bo_\bd_\be_\bP_\bt_\br = typename Node::Ptr;\n+144\n+_\b1_\b4_\b6 _\bN_\bo_\bd_\be_\bP_\bt_\br _\br_\bo_\bo_\bt_\b_;\n+147\n+148 protected:\n+153 template\n+154 _\bN_\bo_\bd_\be_\bP_\bt_\br _\bc_\br_\be_\ba_\bt_\be(It begin, It end, ValueIt beginY, ValueIt endY) const;\n+155\n+166 template \n+167 _\bN_\bo_\bd_\be_\bP_\bt_\br _\bc_\bo_\bn_\bv_\be_\br_\bt_\bF_\br_\bo_\bm(const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bM_\b,_\b _\bX_\b>_\b:_\b:_\bN_\bo_\bd_\be_\bP_\bt_\br& f,\n+168 std::function L_of_M,\n+169 std::function Y_of_X) const;\n+170\n+171 public:\n+174\n+176 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be();\n+177\n+179 explicit _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const Y& y);\n+180\n+188 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const L& label, const Y& y1, const Y& y2);\n+189\n+191 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bL_\ba_\bb_\be_\bl_\bC& label, const Y& y1, const Y& y2);\n+192\n+194 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const std::vector& labelCs, const std::vector& ys);\n+195\n+197 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const std::vector& labelCs, const std::string& table);\n+198\n+200 template\n+201 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(Iterator begin, Iterator end, const L& label);\n+202\n+204 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const L& label, const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& f0,\n+205 const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& f1);\n+206\n+214 template \n+215 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bX_\b>& other, Func Y_of_X);\n+216\n+227 template \n+228 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bM_\b,_\b _\bX_\b>& other, const std::map& map,\n+229 Func Y_of_X);\n+230\n+234\n+242 void _\bp_\br_\bi_\bn_\bt(const std::string& s, const LabelFormatter& labelFormatter,\n+243 const ValueFormatter& valueFormatter) const;\n+244\n+245 // Testable\n+246 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& other,\n+247 const CompareFunc& compare = &_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bo_\bm_\bp_\ba_\br_\be) const;\n+248\n+252\n+_\b2_\b5_\b4 virtual _\b~_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be() = default;\n+255\n+_\b2_\b5_\b7 bool _\be_\bm_\bp_\bt_\by() const { return !_\br_\bo_\bo_\bt_\b_; }\n+258\n+260 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& q) const;\n+261\n+263 const Y& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>& x) const;\n+264\n+279 template \n+280 void _\bv_\bi_\bs_\bi_\bt(Func f) const;\n+281\n+296 template \n+297 void _\bv_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf(Func f) const;\n+298\n+313 template \n+314 void _\bv_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh(Func f) const;\n+315\n+317 size_t _\bn_\br_\bL_\be_\ba_\bv_\be_\bs() const;\n+318\n+334 template \n+335 X _\bf_\bo_\bl_\bd(Func f, X x0) const;\n+336\n+338 std::set _\bl_\ba_\bb_\be_\bl_\bs() const;\n+339\n+341 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\ba_\bp_\bp_\bl_\by(const _\bU_\bn_\ba_\br_\by& op) const;\n+342\n+351 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\ba_\bp_\bp_\bl_\by(const UnaryAssignment& op) const;\n+352\n+354 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& g, const Binary& op) const;\n+355\n+_\b3_\b5_\b8 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\bc_\bh_\bo_\bo_\bs_\be(const L& label, size_t index) const {\n+359 _\bN_\bo_\bd_\be_\bP_\bt_\br newRoot = _\br_\bo_\bo_\bt_\b_->_\bc_\bh_\bo_\bo_\bs_\be(label, index);\n+360 return _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(newRoot);\n+361 }\n+362\n+364 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be combine(const L& label, size_t cardinality,\n+365 const Binary& op) const;\n+366\n+_\b3_\b6_\b8 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\bc_\bo_\bm_\bb_\bi_\bn_\be(const _\bL_\ba_\bb_\be_\bl_\bC& labelC, const Binary& op) const {\n+369 return _\bc_\bo_\bm_\bb_\bi_\bn_\be(labelC.first, labelC.second, op);\n+370 }\n+371\n+373 void _\bd_\bo_\bt(std::ostream& os, const LabelFormatter& labelFormatter,\n+374 const ValueFormatter& valueFormatter, bool showZero = true) const;\n+375\n+377 void _\bd_\bo_\bt(const std::string& name, const LabelFormatter& labelFormatter,\n+378 const ValueFormatter& valueFormatter, bool showZero = true) const;\n+379\n+381 std::string _\bd_\bo_\bt(const LabelFormatter& labelFormatter,\n+382 const ValueFormatter& valueFormatter,\n+383 bool showZero = true) const;\n+384\n+387\n+388 // internal use only\n+389 explicit _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bN_\bo_\bd_\be_\bP_\bt_\br& root);\n+390\n+391 // internal use only\n+392 template _\bN_\bo_\bd_\be_\bP_\bt_\br\n+393 compose(Iterator begin, Iterator end, const L& label) const;\n+394\n+396\n+397 private:\n+_\b3_\b9_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+400 template \n+401 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+402 ar& BOOST_SERIALIZATION_NVP(_\br_\bo_\bo_\bt_\b_);\n+403 }\n+404 }; // DecisionTree\n+405\n+406 template \n+_\b4_\b0_\b7 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n+408\n+412 template\n+_\b4_\b1_\b3 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b> _\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>& f,\n+414 const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bU_\bn_\ba_\br_\by& op) {\n+415 return f._\ba_\bp_\bp_\bl_\by(op);\n+416 }\n+417\n+419 template\n+_\b4_\b2_\b0 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b> _\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>& f,\n+421 const typename DecisionTree::UnaryAssignment& op) {\n+422 return f._\ba_\bp_\bp_\bl_\by(op);\n+423 }\n+424\n+426 template\n+_\b4_\b2_\b7 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b> _\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>& f,\n+428 const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>& g,\n+429 const typename DecisionTree::Binary& op) {\n+430 return f._\ba_\bp_\bp_\bl_\by(g, op);\n+431 }\n+432\n+439 template \n+_\b4_\b4_\b0 std::pair, _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bT_\b2_\b> > _\bu_\bn_\bz_\bi_\bp(\n+441 const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be >& input) {\n+442 return std::make_pair(\n+443 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bT_\b1_\b>(input, [](std::pair i) { return i.first; }),\n+444 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bT_\b2_\b>(input,\n+445 [](std::pair i) { return i.second; }));\n+446 }\n+447\n+448} // namespace gtsam\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh\n+An assignment from labels to a discrete value index (size_t)\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-Elimination tree for discrete factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-An EliminatableClusterTree, i.e., a set of variable clusters with factors,\n-arranged in a tree,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteJunctionTree.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n-JunctionTree< DiscreteBayesTree, DiscreteFactorGraph > Base\n-Base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteJunctionTree.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteJunctionTree.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-DiscreteJunctionTree This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteJunctionTree.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n-A Cluster is just a collection of factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-A JunctionTree is a cluster tree, a set of variable clusters with factors,\n-arranged in a tree,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bz_\bi_\bp\n+std::pair< DecisionTree< L, T1 >, DecisionTree< L, T2 > > unzip(const\n+DecisionTree< L, std::pair< T1, T2 > > &input)\n+unzip a DecisionTree with std::pair values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:440\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename\n+DecisionTree< L, Y >::Unary &op)\n+free versions of apply\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:413\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt\n+An assignment from labels to value index (size_t).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Assignment.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bL_\be_\ba_\bf\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:172\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n+a decision tree is a function from assignments to values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+DecisionTree apply(const Unary &op) const\n+apply Unary operation \"op\" to f\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:889\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bc_\bh_\bo_\bo_\bs_\be\n+DecisionTree choose(const L &label, size_t index) const\n+create a new function where value(label)==index It's like \"restrict\" in\n+Darwiche09book pg329,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:358\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bF_\br_\bo_\bm\n+NodePtr convertFrom(const typename DecisionTree< M, X >::NodePtr &f, std::\n+function< L(const M &)> L_of_M, std::function< Y(const X &)> Y_of_X) const\n+Convert from a DecisionTree to DecisionTree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:671\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bc_\bo_\bm_\bb_\bi_\bn_\be\n+DecisionTree combine(const LabelC &labelC, const Binary &op) const\n+combine with LabelC for convenience\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:368\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n+NodePtr create(It begin, It end, ValueIt beginY, ValueIt endY) const\n+Internal recursive function to create from keys, cardinalities, and Y values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:630\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\b~_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n+virtual ~DecisionTree()=default\n+Make virtual.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bo_\bm_\bp_\ba_\br_\be\n+static bool DefaultCompare(const Y &a, const Y &b)\n+Default method for comparison of two objects of type Y.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\bP_\bt_\br\n+typename Node::Ptr NodePtr\n+---------------------\u00e2\u0080\u0094 Node base class ------------------------\u00e2\u0080\u0094\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bl_\ba_\bb_\be_\bl_\bs\n+std::set< L > labels() const\n+Retrieve all unique labels as a set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:853\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+Check if tree is empty.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:257\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bv_\bi_\bs_\bi_\bt\n+void visit(Func f) const\n+Visit all leaves in depth-first fashion.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:736\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bv_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf\n+void visitLeaf(Func f) const\n+Visit all leaves in depth-first fashion.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:773\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bU_\bn_\ba_\br_\by\n+std::function< Y(const Y &)> Unary\n+Handy typedefs for unary and binary function types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bf_\bo_\bl_\bd\n+X fold(Func f, X x0) const\n+Fold a binary function over the tree, returning accumulator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:833\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\b_\n+NodePtr root_\n+A DecisionTree just contains the root. TODO(dellaert): make protected.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:146\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s, const LabelFormatter &labelFormatter, const\n+ValueFormatter &valueFormatter) const\n+GTSAM-style print.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:872\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bc_\bo_\bm_\bb_\bi_\bn_\be\n+DecisionTree combine(const L &label, size_t cardinality, const Binary &op)\n+const\n+combine subtrees on key with binary operation \"op\"\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:937\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bv_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh\n+void visitWith(Func f) const\n+Visit all leaves in depth-first fashion.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:816\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+const Y & operator()(const Assignment< L > &x) const\n+evaluate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:884\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bd_\bo_\bt\n+void dot(std::ostream &os, const LabelFormatter &labelFormatter, const\n+ValueFormatter &valueFormatter, bool showZero=true) const\n+output to graphviz format, stream version\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:949\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:399\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(const DecisionTree &q) const\n+equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:879\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bL_\ba_\bb_\be_\bl_\bC\n+std::pair< L, size_t > LabelC\n+A label annotated with cardinality.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bn_\br_\bL_\be_\ba_\bv_\be_\bs\n+size_t nrLeaves() const\n+Return the number of leaves in the tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:823\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n+DecisionTree()\n+Default constructor (for serialization)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:462\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be\n+---------------------\u00e2\u0080\u0094 Node base class ------------------------\u00e2\u0080\u0094\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:135\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00182.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00182.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Signature.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTreeFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,84 +94,38 @@\n \n \n \n \n \n
\n \n-
Signature.cpp File Reference
\n+Namespaces
\n+
DecisionTreeFactor.cpp File Reference
\n \n
\n \n-

signatures for conditional densities \n+

discrete factor \n More...

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-

\n-Typedefs

\n-typedef string::const_iterator gtsam::parser::It
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Functions

\n-Signature::Table gtsam::parser::logic (bool ff, bool ft, bool tf, bool tt)
 
\n-ostream & gtsam::operator<< (ostream &os, const Signature::Row &row)
 
\n-ostream & gtsam::operator<< (ostream &os, const Signature::Table &table)
 
\n-ostream & gtsam::operator<< (ostream &os, const Signature &s)
 
\n-Signature gtsam::operator| (const DiscreteKey &key, const DiscreteKey &parent)
 Helper function to create Signature objects example: Signature s = D | E;.
 
\n-Signature gtsam::operator% (const DiscreteKey &key, const std::string &parent)
 Helper function to create Signature objects example: Signature s(D % \"99/1\");.
 
\n-Signature gtsam::operator% (const DiscreteKey &key, const Signature::Table &parent)
 Helper function to create Signature objects, using table construction directly example: Signature s(D % table);.
 
\n-\n-\n-\n-\n-\n-\n-\n

\n-Variables

\n-Signature::Row gtsam::parser::F {1, 0}
 
\n-Signature::Row gtsam::parser::T {0, 1}
 
\n-struct gtsam::parser::Grammar gtsam::parser::grammar
 
\n

Detailed Description

\n-

signatures for conditional densities

\n-
Author
Frank Dellaert
\n-
Date
Feb 27, 2011
\n+

discrete factor

\n+
Date
Feb 14, 2011
\n+
Author
Duy-Nguyen Ta
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,57 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-Signature.cpp File Reference\n-signatures for conditional densities _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DecisionTreeFactor.cpp File Reference\n+discrete factor _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef string::const_iterator\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\ber\br:\b::\b:I\bIt\bt\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-Signature::Table\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\ber\br:\b::\b:l\blo\bog\bgi\bic\bc (bool ff, bool ft, bool tf, bool tt)\n-\u00a0\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bR_\bo_\bw &_\br_\bo_\bw)\n-\u00a0\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const Signature::Table\n- &table)\n-\u00a0\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be &s)\n-\u00a0\n- _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br|\b| (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n- &parent)\n-\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects example:\n- _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s = D | E;.\n-\u00a0\n- _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br%\b% (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const std::string\n- &parent)\n-\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects example:\n- _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s(D % \"99/1\");.\n-\u00a0\n- _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br%\b% (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const Signature::\n- Table &parent)\n-\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects, using table\n- construction directly example: _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s(D % table);.\n-\u00a0\n-V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n- _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bR_\bo_\bw\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\ber\br:\b::\b:F\bF {1, 0}\n-\u00a0\n- _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bR_\bo_\bw\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\ber\br:\b::\b:T\bT {0, 1}\n-\u00a0\n-struct gtsam::parser::Grammar\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\ber\br:\b::\b:g\bgr\bra\bam\bmm\bma\bar\br\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-signatures for conditional densities\n+discrete factor\n+ Date\n+ Feb 14, 2011\n Author\n+ Duy-Nguyen Ta\n Frank Dellaert\n- Date\n- Feb 27, 2011\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bc_\bp_\bp\n+ * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00188.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00188.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTreeFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,51 +95,44 @@\n \n \n \n \n
\n \n-
DiscreteFactor.h File Reference
\n+Namespaces
\n+
DecisionTreeFactor.h File Reference
\n \n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n+\n \n

\n Classes

class  gtsam::DiscreteFactor
 Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor. More...
class  gtsam::DecisionTreeFactor
 A discrete probabilistic factor. More...
 
struct  gtsam::traits< DiscreteFactor >
struct  gtsam::traits< DecisionTreeFactor >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

std::vector< double > gtsam::expNormalize (const std::vector< double > &logProbs)
 Normalize a set of log probabilities.
 
\n

Detailed Description

\n
Date
Feb 14, 2011
\n
Author
Duy-Nguyen Ta
\n
\n Frank Dellaert
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DiscreteFactor.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DecisionTreeFactor.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Base class for discrete probabilistic factors The most general one is\n- the derived _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 A discrete probabilistic factor. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::vector< double >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be (const std::vector< double >\n- &logProbs)\n-\u00a0 Normalize a set of log probabilities.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n Feb 14, 2011\n Author\n Duy-Nguyen Ta\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00188.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00188.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00188 = [\n- [\"gtsam::traits< DiscreteFactor >\", \"a02856.html\", null],\n- [\"expNormalize\", \"a00188.html#ae1c1177c8725296b34601409322400ea\", null]\n+ [\"gtsam::traits< DecisionTreeFactor >\", \"a02812.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00188_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00188_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTreeFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
DiscreteFactor.h
\n+
DecisionTreeFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,127 +114,225 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-
23#include <gtsam/base/Testable.h>
\n-
24
\n-
25#include <string>
\n-
26namespace gtsam {
\n-
27
\n-
28class DecisionTreeFactor;
\n-
29class DiscreteConditional;
\n-
30class HybridValues;
\n-
31
\n-
\n-
38class GTSAM_EXPORT DiscreteFactor: public Factor {
\n-
39
\n-
40public:
\n-
41
\n-
42 // typedefs needed to play nice with gtsam
\n-\n-
44 typedef boost::shared_ptr<DiscreteFactor> shared_ptr;
\n-
45 typedef Factor Base;
\n-
46
\n-\n-
48
\n-
49public:
\n-
50
\n-
53
\n-\n-
56
\n-
59 template<typename CONTAINER>
\n-
60 DiscreteFactor(const CONTAINER& keys) : Base(keys) {}
\n-
61
\n-
\n-
63 virtual ~DiscreteFactor() {
\n-
64 }
\n-
\n+\n+\n+\n+\n+
25
\n+
26#include <algorithm>
\n+
27#include <boost/shared_ptr.hpp>
\n+
28#include <map>
\n+
29#include <stdexcept>
\n+
30#include <string>
\n+
31#include <utility>
\n+
32#include <vector>
\n+
33
\n+
34namespace gtsam {
\n+
35
\n+
36 class DiscreteConditional;
\n+
37 class HybridValues;
\n+
38
\n+
\n+
44 class GTSAM_EXPORT DecisionTreeFactor : public DiscreteFactor,
\n+
45 public AlgebraicDecisionTree<Key> {
\n+
46 public:
\n+
47 // typedefs needed to play nice with gtsam
\n+\n+\n+
50 typedef boost::shared_ptr<DecisionTreeFactor> shared_ptr;
\n+\n+
52
\n+
53 protected:
\n+
54 std::map<Key, size_t> cardinalities_;
\n+
55
\n+
56 public:
\n+
59
\n+\n+
62
\n+
64 DecisionTreeFactor(const DiscreteKeys& keys, const ADT& potentials);
\n
65
\n-
69
\n-
71 virtual bool equals(const DiscreteFactor& lf, double tol = 1e-9) const = 0;
\n-
72
\n-
\n-
74 void print(
\n-
75 const std::string& s = "DiscreteFactor\\n",
\n-
76 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n-
77 Base::print(s, formatter);
\n-
78 }
\n-
\n-
79
\n-
83
\n-
85 virtual double operator()(const DiscreteValues&) const = 0;
\n-
86
\n-
88 double error(const DiscreteValues& values) const;
\n-
89
\n-
94 double error(const HybridValues& c) const override;
\n-
95
\n-\n-
98
\n-
99 virtual DecisionTreeFactor toDecisionTreeFactor() const = 0;
\n-
100
\n-
104
\n-\n+\n+
86 const std::vector<double>& table);
\n+
87
\n+
106 DecisionTreeFactor(const DiscreteKeys& keys, const std::string& table);
\n
107
\n-
115 virtual std::string markdown(
\n-
116 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
117 const Names& names = {}) const = 0;
\n-
118
\n-
126 virtual std::string html(
\n-
127 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
128 const Names& names = {}) const = 0;
\n-
129
\n-
131};
\n-
\n-
132// DiscreteFactor
\n-
133
\n-
134// traits
\n-
135template<> struct traits<DiscreteFactor> : public Testable<DiscreteFactor> {};
\n-
136
\n-
137
\n-
154std::vector<double> expNormalize(const std::vector<double> &logProbs);
\n-
155
\n+
109 template <class SOURCE>
\n+
\n+
110 DecisionTreeFactor(const DiscreteKey& key, SOURCE table)
\n+
111 : DecisionTreeFactor(DiscreteKeys{key}, table) {}
\n+
\n+
112
\n+
\n+
114 DecisionTreeFactor(const DiscreteKey& key, const std::vector<double>& row)
\n+\n+
\n+
116
\n+
118 explicit DecisionTreeFactor(const DiscreteConditional& c);
\n+
119
\n+
123
\n+
125 bool equals(const DiscreteFactor& other, double tol = 1e-9) const override;
\n+
126
\n+
127 // print
\n+
128 void print(
\n+
129 const std::string& s = "DecisionTreeFactor:\\n",
\n+
130 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n+
131
\n+
135
\n+
\n+
138 double evaluate(const DiscreteValues& values) const {
\n+
139 return ADT::operator()(values);
\n+
140 }
\n+
\n+
141
\n+
\n+
143 double operator()(const DiscreteValues& values) const override {
\n+
144 return ADT::operator()(values);
\n+
145 }
\n+
\n+
146
\n+
148 double error(const DiscreteValues& values) const;
\n+
149
\n+
\n+\n+
152 return apply(f, ADT::Ring::mul);
\n+
153 }
\n+
\n+
154
\n+
155 static double safe_div(const double& a, const double& b);
\n
156
\n-
157}// namespace gtsam
\n-
Concept check for values that can be used in unit tests.
\n-\n-
The base class for all factors.
\n+
157 size_t cardinality(Key j) const { return cardinalities_.at(j); }
\n+
158
\n+
\n+\n+
161 return apply(f, safe_div);
\n+
162 }
\n+
\n+
163
\n+
165 DecisionTreeFactor toDecisionTreeFactor() const override { return *this; }
\n+
166
\n+
\n+
168 shared_ptr sum(size_t nrFrontals) const {
\n+
169 return combine(nrFrontals, ADT::Ring::add);
\n+
170 }
\n+
\n+
171
\n+
\n+
173 shared_ptr sum(const Ordering& keys) const {
\n+
174 return combine(keys, ADT::Ring::add);
\n+
175 }
\n+
\n+
176
\n+
\n+
178 shared_ptr max(size_t nrFrontals) const {
\n+
179 return combine(nrFrontals, ADT::Ring::max);
\n+
180 }
\n+
\n+
181
\n+
\n+
183 shared_ptr max(const Ordering& keys) const {
\n+
184 return combine(keys, ADT::Ring::max);
\n+
185 }
\n+
\n+
186
\n+
190
\n+
196 DecisionTreeFactor apply(const DecisionTreeFactor& f, ADT::Binary op) const;
\n+
197
\n+
204 shared_ptr combine(size_t nrFrontals, ADT::Binary op) const;
\n+
205
\n+
212 shared_ptr combine(const Ordering& keys, ADT::Binary op) const;
\n+
213
\n+
215 std::vector<std::pair<DiscreteValues, double>> enumerate() const;
\n+
216
\n+
218 DiscreteKeys discreteKeys() const;
\n+
219
\n+
238 DecisionTreeFactor prune(size_t maxNrAssignments) const;
\n+
239
\n+
243
\n+
245 void dot(std::ostream& os,
\n+
246 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
247 bool showZero = true) const;
\n+
248
\n+
250 void dot(const std::string& name,
\n+
251 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
252 bool showZero = true) const;
\n+
253
\n+
255 std::string dot(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
256 bool showZero = true) const;
\n+
257
\n+
265 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
266 const Names& names = {}) const override;
\n+
267
\n+
275 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
276 const Names& names = {}) const override;
\n+
277
\n+
281
\n+
286 double error(const HybridValues& values) const override;
\n+
287
\n+
289
\n+
290 private:
\n+
292 friend class boost::serialization::access;
\n+
293 template <class ARCHIVE>
\n+
294 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
295 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
296 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(ADT);
\n+
297 ar& BOOST_SERIALIZATION_NVP(cardinalities_);
\n+
298 }
\n+
299 };
\n+
\n+
300
\n+
301// traits
\n+
302template <>
\n+
303struct traits<DecisionTreeFactor> : public Testable<DecisionTreeFactor> {};
\n+
304
\n+
305} // namespace gtsam
\n+
Algebraic Decision Trees.
\n+\n+
specialized key for discrete variables
\n+
Variable ordering for the elimination algorithm.
\n+
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::vector< double > expNormalize(const std::vector< double > &logProbs)
Normalize a set of log probabilities.
Definition DiscreteFactor.cpp:42
\n+
const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)
Extracts a row view from a matrix that avoids a copy.
Definition Matrix.h:222
\n+
string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of markdown.
Definition DiscreteValues.cpp:129
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::Unary &op)
free versions of apply
Definition DecisionTree.h:413
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
An algebraic decision tree fixes the range of a DecisionTree to double.
Definition AlgebraicDecisionTree.h:38
\n
A discrete probabilistic factor.
Definition DecisionTreeFactor.h:45
\n+
shared_ptr sum(const Ordering &keys) const
Create new factor by summing all values with the same separator values.
Definition DecisionTreeFactor.h:173
\n+
double operator()(const DiscreteValues &values) const override
Evaluate probability density, sugar.
Definition DecisionTreeFactor.h:143
\n+
DecisionTreeFactor operator*(const DecisionTreeFactor &f) const override
multiply two factors
Definition DecisionTreeFactor.h:151
\n+
shared_ptr max(size_t nrFrontals) const
Create new factor by maximizing over all values with the same separator.
Definition DecisionTreeFactor.h:178
\n+
shared_ptr max(const Ordering &keys) const
Create new factor by maximizing over all values with the same separator.
Definition DecisionTreeFactor.h:183
\n+
double evaluate(const DiscreteValues &values) const
Calculate probability for given values x, is just look up in AlgebraicDecisionTree.
Definition DecisionTreeFactor.h:138
\n+
DiscreteFactor Base
Typedef to base class.
Definition DecisionTreeFactor.h:49
\n+
shared_ptr sum(size_t nrFrontals) const
Create new factor by summing all values with the same separator values.
Definition DecisionTreeFactor.h:168
\n+
DecisionTreeFactor(const DiscreteKey &key, SOURCE table)
Single-key specialization.
Definition DecisionTreeFactor.h:110
\n+
DecisionTreeFactor toDecisionTreeFactor() const override
Convert into a decisiontree.
Definition DecisionTreeFactor.h:165
\n+
DecisionTreeFactor operator/(const DecisionTreeFactor &f) const
divide by factor f (safely)
Definition DecisionTreeFactor.h:160
\n+
DecisionTreeFactor(const DiscreteKey &key, const std::vector< double > &row)
Single-key specialization, with vector of doubles.
Definition DecisionTreeFactor.h:114
\n+
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n
Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor.
Definition DiscreteFactor.h:38
\n-
virtual std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter, const Names &names={}) const =0
Render as html table.
\n-
Factor Base
Our base class.
Definition DiscreteFactor.h:45
\n-
void print(const std::string &s="DiscreteFactor\\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition DiscreteFactor.h:74
\n-
boost::shared_ptr< DiscreteFactor > shared_ptr
shared_ptr to this class
Definition DiscreteFactor.h:44
\n-
virtual ~DiscreteFactor()
Virtual destructor.
Definition DiscreteFactor.h:63
\n-
DiscreteValues::Names Names
Translation table from values to strings.
Definition DiscreteFactor.h:106
\n-
virtual bool equals(const DiscreteFactor &lf, double tol=1e-9) const =0
equals
\n-
DiscreteFactor This
This class.
Definition DiscreteFactor.h:43
\n-
virtual DecisionTreeFactor operator*(const DecisionTreeFactor &) const =0
Multiply in a DecisionTreeFactor and return the result as DecisionTreeFactor.
\n-
virtual double operator()(const DiscreteValues &) const =0
Find value for given assignment of values to variables.
\n-
virtual std::string markdown(const KeyFormatter &keyFormatter=DefaultKeyFormatter, const Names &names={}) const =0
Render as markdown table.
\n-
DiscreteFactor(const CONTAINER &keys)
Construct from container of keys.
Definition DiscreteFactor.h:60
\n-
DiscreteFactor()
Default constructor creates empty factor.
Definition DiscreteFactor.h:55
\n+
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n
A map from keys to values.
Definition DiscreteValues.h:34
\n-
std::map< Key, std::vector< std::string > > Names
Translation table from values to strings.
Definition DiscreteValues.h:95
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Factor.h:68
\n+
Definition Ordering.h:34
\n
the error.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteFactor.h\n+DecisionTreeFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,181 +16,288 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-24\n-25#include \n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-28class DecisionTreeFactor;\n-29class DiscreteConditional;\n-30class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n-31\n-_\b3_\b8class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bF_\ba_\bc_\bt_\bo_\br {\n-39\n-40public:\n-41\n-42 // typedefs needed to play nice with gtsam\n-_\b4_\b3 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-_\b4_\b4 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-_\b4_\b5 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-46\n-_\b4_\b7 using _\bV_\ba_\bl_\bu_\be_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs;\n-48\n-49public:\n-50\n-53\n-_\b5_\b5 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n-56\n-59 template\n-_\b6_\b0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER& keys) : _\bB_\ba_\bs_\be(keys) {}\n-61\n-_\b6_\b3 virtual _\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br() {\n-64 }\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+25\n+26#include \n+27#include \n+28#include \n+29#include \n+30#include \n+31#include \n+32#include \n+33\n+34namespace _\bg_\bt_\bs_\ba_\bm {\n+35\n+36 class DiscreteConditional;\n+37 class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+38\n+_\b4_\b4 class GTSAM_EXPORT _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br : public _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br,\n+45 public _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be {\n+46 public:\n+47 // typedefs needed to play nice with gtsam\n+48 typedef _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+_\b4_\b9 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n+50 typedef boost::shared_ptr shared_ptr;\n+51 typedef _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b> _\bA_\bD_\bT;\n+52\n+53 protected:\n+54 std::map cardinalities_;\n+55\n+56 public:\n+59\n+61 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br();\n+62\n+64 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys, const _\bA_\bD_\bT& potentials);\n 65\n-69\n-_\b7_\b1 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br& lf, double tol = 1e-9) const = 0;\n-72\n-_\b7_\b4 void _\bp_\br_\bi_\bn_\bt(\n-75 const std::string& s = \"DiscreteFactor\\n\",\n-76 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n-77 Base::print(s, formatter);\n-78 }\n-79\n-83\n-_\b8_\b5 virtual double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs&) const = 0;\n-86\n-88 double error(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n-89\n-94 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n-95\n-_\b9_\b7 virtual _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br&) const = 0;\n-98\n-99 virtual _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br toDecisionTreeFactor() const = 0;\n-100\n-104\n-_\b1_\b0_\b6 using _\bN_\ba_\bm_\be_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs;\n+85 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys,\n+86 const std::vector& table);\n+87\n+106 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys, const std::string& table);\n 107\n-_\b1_\b1_\b5 virtual std::string _\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn(\n-116 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-117 const _\bN_\ba_\bm_\be_\bs& names = {}) const = 0;\n-118\n-_\b1_\b2_\b6 virtual std::string _\bh_\bt_\bm_\bl(\n-127 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-128 const _\bN_\ba_\bm_\be_\bs& names = {}) const = 0;\n-129\n-131};\n-132// DiscreteFactor\n-133\n-134// traits\n-_\b1_\b3_\b5template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-{};\n-136\n-137\n-154std::vector _\be_\bx_\bp_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be(const std::vector &logProbs);\n-155\n+109 template \n+_\b1_\b1_\b0 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, SOURCE table)\n+111 : _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs{key}, table) {}\n+112\n+_\b1_\b1_\b4 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::vector& row)\n+115 : _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs{key}, _\br_\bo_\bw) {}\n+116\n+118 explicit _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl& c);\n+119\n+123\n+125 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br& other, double tol = 1e-9) const override;\n+126\n+127 // print\n+128 void _\bp_\br_\bi_\bn_\bt(\n+129 const std::string& s = \"DecisionTreeFactor:\\n\",\n+130 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n+131\n+135\n+_\b1_\b3_\b8 double _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const {\n+139 return ADT::operator()(values);\n+140 }\n+141\n+_\b1_\b4_\b3 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n+144 return ADT::operator()(values);\n+145 }\n+146\n+148 double error(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n+149\n+_\b1_\b5_\b1 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br& f) const override {\n+152 return _\ba_\bp_\bp_\bl_\by(f, ADT::Ring::mul);\n+153 }\n+154\n+155 static double safe_div(const double& a, const double& b);\n 156\n-157}// namespace gtsam\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-The base class for all factors.\n+157 size_t cardinality(_\bK_\be_\by j) const { return cardinalities_.at(j); }\n+158\n+_\b1_\b6_\b0 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br& f) const {\n+161 return _\ba_\bp_\bp_\bl_\by(f, safe_div);\n+162 }\n+163\n+_\b1_\b6_\b5 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bt_\bo_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br() const override { return *this; }\n+166\n+_\b1_\b6_\b8 shared_ptr _\bs_\bu_\bm(size_t nrFrontals) const {\n+169 return combine(nrFrontals, ADT::Ring::add);\n+170 }\n+171\n+_\b1_\b7_\b3 shared_ptr _\bs_\bu_\bm(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) const {\n+174 return combine(keys, ADT::Ring::add);\n+175 }\n+176\n+_\b1_\b7_\b8 shared_ptr _\bm_\ba_\bx(size_t nrFrontals) const {\n+179 return combine(nrFrontals, ADT::Ring::max);\n+180 }\n+181\n+_\b1_\b8_\b3 shared_ptr _\bm_\ba_\bx(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) const {\n+184 return combine(keys, ADT::Ring::max);\n+185 }\n+186\n+190\n+196 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br& f, ADT::Binary op)\n+const;\n+197\n+204 shared_ptr combine(size_t nrFrontals, ADT::Binary op) const;\n+205\n+212 shared_ptr combine(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys, ADT::Binary op) const;\n+213\n+215 std::vector> enumerate() const;\n+216\n+218 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs discreteKeys() const;\n+219\n+238 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br prune(size_t maxNrAssignments) const;\n+239\n+243\n+245 void _\bd_\bo_\bt(std::ostream& os,\n+246 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+247 bool showZero = true) const;\n+248\n+250 void _\bd_\bo_\bt(const std::string& name,\n+251 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+252 bool showZero = true) const;\n+253\n+255 std::string _\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+256 bool showZero = true) const;\n+257\n+265 std::string _\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter,\n+266 const Names& names = {}) const override;\n+267\n+275 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,\n+276 const Names& names = {}) const override;\n+277\n+281\n+286 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const override;\n+287\n+289\n+290 private:\n+_\b2_\b9_\b2 friend class boost::serialization::access;\n+293 template \n+294 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+295 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+296 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bA_\bD_\bT);\n+297 ar& BOOST_SERIALIZATION_NVP(cardinalities_);\n+298 }\n+299 };\n+300\n+301// traits\n+302template <>\n+_\b3_\b0_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+304\n+305} // namespace gtsam\n+_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+Algebraic Decision Trees.\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n+specialized key for discrete variables\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n+std::pair< Key, size_t > DiscreteKey\n+Key type for discrete variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be\n-std::vector< double > expNormalize(const std::vector< double > &logProbs)\n-Normalize a set of log probabilities.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\bo_\bw\n+const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)\n+Extracts a row view from a matrix that avoids a copy.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:222\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn\n+string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n+const DiscreteValues::Names &names)\n+Free version of markdown.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:129\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bp_\bp_\bl_\by\n+DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename\n+DecisionTree< L, Y >::Unary &op)\n+free versions of apply\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:413\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n+An algebraic decision tree fixes the range of a DecisionTree to double.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:38\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n A discrete probabilistic factor.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bu_\bm\n+shared_ptr sum(const Ordering &keys) const\n+Create new factor by summing all values with the same separator values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:173\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+double operator()(const DiscreteValues &values) const override\n+Evaluate probability density, sugar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+DecisionTreeFactor operator*(const DecisionTreeFactor &f) const override\n+multiply two factors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\ba_\bx\n+shared_ptr max(size_t nrFrontals) const\n+Create new factor by maximizing over all values with the same separator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:178\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\ba_\bx\n+shared_ptr max(const Ordering &keys) const\n+Create new factor by maximizing over all values with the same separator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:183\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\n+double evaluate(const DiscreteValues &values) const\n+Calculate probability for given values x, is just look up in\n+AlgebraicDecisionTree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n+DiscreteFactor Base\n+Typedef to base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bu_\bm\n+shared_ptr sum(size_t nrFrontals) const\n+Create new factor by summing all values with the same separator values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:168\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n+DecisionTreeFactor(const DiscreteKey &key, SOURCE table)\n+Single-key specialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bo_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n+DecisionTreeFactor toDecisionTreeFactor() const override\n+Convert into a decisiontree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:165\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/\n+DecisionTreeFactor operator/(const DecisionTreeFactor &f) const\n+divide by factor f (safely)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n+DecisionTreeFactor(const DiscreteKey &key, const std::vector< double > &row)\n+Single-key specialization, with vector of doubles.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Discrete Conditional Density Derives from DecisionTreeFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:40\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n Base class for discrete probabilistic factors The most general one is the\n derived DecisionTreeFactor.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\bt_\bm_\bl\n-virtual std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter,\n-const Names &names={}) const =0\n-Render as html table.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-Factor Base\n-Our base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"DiscreteFactor\\n\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< DiscreteFactor > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n-virtual ~DiscreteFactor()\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\ba_\bm_\be_\bs\n-DiscreteValues::Names Names\n-Translation table from values to strings.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-virtual bool equals(const DiscreteFactor &lf, double tol=1e-9) const =0\n-equals\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-DiscreteFactor This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-virtual DecisionTreeFactor operator*(const DecisionTreeFactor &) const =0\n-Multiply in a DecisionTreeFactor and return the result as DecisionTreeFactor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-virtual double operator()(const DiscreteValues &) const =0\n-Find value for given assignment of values to variables.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn\n-virtual std::string markdown(const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter, const Names &names={}) const =0\n-Render as markdown table.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n-DiscreteFactor(const CONTAINER &keys)\n-Construct from container of keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n-DiscreteFactor()\n-Default constructor creates empty factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys is a set of keys that can be assembled using the & operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n A map from keys to values.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs\n-std::map< Key, std::vector< std::string > > Names\n-Translation table from values to strings.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n the error.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00191.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00191.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteValues.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Signature.h File Reference\n \n \n \n \n \n \n \n@@ -97,56 +97,58 @@\n \n \n
\n \n-
DiscreteValues.h File Reference
\n+
Signature.h File Reference
\n
\n
\n \n+

signatures for conditional densities \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::DiscreteValues
 A map from keys to values. More...
 
struct  gtsam::traits< DiscreteValues >
class  gtsam::Signature
 Signature for a discrete conditional density, used to construct conditionals. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n Functions

\n-std::vector< DiscreteValuesgtsam::cartesianProduct (const DiscreteKeys &keys)
 Free version of CartesianProduct.
 
\n-string gtsam::markdown (const DiscreteValues &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DiscreteValues::Names &names={})
 Free version of markdown.
 
\n-string gtsam::html (const DiscreteValues &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DiscreteValues::Names &names={})
 Free version of html.
 
\n+Signature gtsam::operator| (const DiscreteKey &key, const DiscreteKey &parent)
 Helper function to create Signature objects example: Signature s = D | E;.
 
\n+Signature gtsam::operator% (const DiscreteKey &key, const std::string &parent)
 Helper function to create Signature objects example: Signature s(D % \"99/1\");.
 
\n+Signature gtsam::operator% (const DiscreteKey &key, const Signature::Table &parent)
 Helper function to create Signature objects, using table construction directly example: Signature s(D % table);.
 
\n

Detailed Description

\n-
Date
Dec 13, 2021
\n+

signatures for conditional densities

\n
Author
Frank Dellaert
\n+
Date
Feb 27, 2011
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,43 +1,42 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DiscreteValues.h File Reference\n+Signature.h File Reference\n+signatures for conditional densities _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-\u00a0 A map from keys to values. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+\u00a0 _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be for a discrete conditional density, used to construct\n+ conditionals. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::vector< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bca\bar\brt\bte\bes\bsi\bia\ban\bnP\bPr\bro\bod\bdu\buc\bct\bt (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n- &keys)\n-\u00a0 Free version of CartesianProduct.\n-\u00a0\n- string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bma\bar\brk\bkd\bdo\bow\bwn\bn (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &values,\n- const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n- &keyFormatter=DefaultKeyFormatter, const\n- _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs &names={})\n-\u00a0 Free version of markdown.\n-\u00a0\n- string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:h\bht\btm\bml\bl (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &values, const\n- _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter=DefaultKeyFormatter,\n- const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs &names={})\n-\u00a0 Free version of html.\n+_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br|\b| (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &parent)\n+\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects example: _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s = D\n+ | E;.\n+\u00a0\n+_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br%\b% (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const std::string &parent)\n+\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects example: _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s(D %\n+ \"99/1\");.\n+\u00a0\n+_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br%\b% (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const Signature::Table\n+ &parent)\n+\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects, using table\n+ construction directly example: _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s(D % table);.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Dec 13, 2021\n+signatures for conditional densities\n Author\n Frank Dellaert\n+ Date\n+ Feb 27, 2011\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+ * _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00191.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00191.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,5 @@\n var a00191 = [\n- [\"gtsam::traits< DiscreteValues >\", \"a02904.html\", null],\n- [\"cartesianProduct\", \"a00191.html#a55a86a4657d82f6ff048a10d058c529f\", null],\n- [\"html\", \"a00191.html#a147114735037c2260d4810a8820e72f6\", null],\n- [\"markdown\", \"a00191.html#a2b6707b04064df79d26d1016dfa2a013\", null]\n+ [\"operator%\", \"a00191.html#ae4856250df52ce4b9b4b16c7a833408c\", null],\n+ [\"operator%\", \"a00191.html#ab98cf2a4777006c28d6983db5d8ec574\", null],\n+ [\"operator|\", \"a00191.html#aa6c58dfb2fc9398a026e3268ba2edfad\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00191_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00191_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteValues.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Signature.h Source File\n \n \n \n \n \n \n \n@@ -98,136 +98,112 @@\n
No Matches
\n \n \n \n \n \n
\n-
DiscreteValues.h
\n+
Signature.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-\n-
22#include <gtsam/inference/Key.h>
\n-
23
\n-
24#include <map>
\n-
25#include <string>
\n-
26#include <vector>
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
\n-
34class GTSAM_EXPORT DiscreteValues : public Assignment<Key> {
\n-
35 public:
\n-
36 using Base = Assignment<Key>; // base class
\n-
37
\n-
40 using Assignment::Assignment; // all constructors
\n-
41
\n-
42 // Define the implicit default constructor.
\n-
43 DiscreteValues() = default;
\n-
44
\n-
45 // Construct from assignment.
\n-
46 explicit DiscreteValues(const Base& a) : Base(a) {}
\n-
47
\n-
48 // Construct from initializer list.
\n-
49 DiscreteValues(std::initializer_list<std::pair<const Key, size_t>> init)
\n-
50 : Assignment<Key>{init} {}
\n-
51
\n+
19#pragma once
\n+
20#include <string>
\n+
21#include <vector>
\n+
22#include <boost/optional.hpp>
\n+\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
\n+
54 class GTSAM_EXPORT Signature {
\n
55
\n-
57 void print(const std::string& s = "",
\n-
58 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
59
\n-
61 bool equals(const DiscreteValues& x, double tol = 1e-9) const;
\n-
62
\n+
56 public:
\n+
57
\n+
59 typedef std::vector<double> Row;
\n+
60 typedef std::vector<Row> Table;
\n+
61
\n+
62 private:
\n+
63
\n+
65 DiscreteKey key_;
\n
66
\n-
67 // insert in base class;
\n-
68 std::pair<iterator, bool> insert( const value_type& value ){
\n-
69 return Base::insert(value);
\n-
70 }
\n-
71
\n-
74 DiscreteValues& insert(const DiscreteValues& values);
\n+
68 DiscreteKeys parents_;
\n+
69
\n+
70 // the given CPT specification string
\n+
71 boost::optional<std::string> spec_;
\n+
72
\n+
73 // the CPT as parsed, if successful
\n+
74 boost::optional<Table> table_;
\n
75
\n-
79 DiscreteValues& update(const DiscreteValues& values);
\n-
80
\n-
\n-
85 static std::vector<DiscreteValues> CartesianProduct(
\n-
86 const DiscreteKeys& keys) {
\n-
87 return Base::CartesianProduct<DiscreteValues>(keys);
\n-
88 }
\n-
\n-
89
\n-
93
\n-
95 using Names = std::map<Key, std::vector<std::string>>;
\n-
96
\n-
98 static std::string Translate(const Names& names, Key key, size_t index);
\n-
99
\n-
107 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
108 const Names& names = {}) const;
\n-
109
\n-
117 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
118 const Names& names = {}) const;
\n+
76 public:
\n+
88 Signature(const DiscreteKey& key, const DiscreteKeys& parents,
\n+
89 const Table& table);
\n+
90
\n+
102 Signature(const DiscreteKey& key, const DiscreteKeys& parents,
\n+
103 const std::string& spec);
\n+
104
\n+
112 Signature(const DiscreteKey& key);
\n+
113
\n+
115 const DiscreteKey& key() const { return key_; }
\n+
116
\n+
118 const DiscreteKeys& parents() const { return parents_; }
\n
119
\n-
121};
\n-
\n+
121 DiscreteKeys discreteKeys() const;
\n
122
\n-
\n-
124inline std::vector<DiscreteValues> cartesianProduct(const DiscreteKeys& keys) {
\n-\n-
126}
\n-
\n-
127
\n-
129std::string markdown(const DiscreteValues& values,
\n-
130 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
131 const DiscreteValues::Names& names = {});
\n-
132
\n-
134std::string html(const DiscreteValues& values,
\n-
135 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
136 const DiscreteValues::Names& names = {});
\n+
124 KeyVector indices() const;
\n+
125
\n+
126 // the CPT as parsed, if successful
\n+
127 const boost::optional<Table>& table() const { return table_; }
\n+
128
\n+
129 // the CPT as a vector of doubles, with key's values most rapidly changing
\n+
130 std::vector<double> cpt() const;
\n+
131
\n+
133 Signature& operator,(const DiscreteKey& parent);
\n+
134
\n+
136 Signature& operator=(const std::string& spec);
\n
137
\n-
138// traits
\n-
139template <>
\n-
140struct traits<DiscreteValues> : public Testable<DiscreteValues> {};
\n-
141
\n-
142} // namespace gtsam
\n-
An assignment from labels to a discrete value index (size_t)
\n-
specialized key for discrete variables
\n-\n+
139 Signature& operator=(const Table& table);
\n+
140
\n+
142 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n+
143 const Signature& s);
\n+
144 };
\n+
\n+
145
\n+
150 GTSAM_EXPORT Signature operator|(const DiscreteKey& key, const DiscreteKey& parent);
\n+
151
\n+
156 GTSAM_EXPORT Signature operator%(const DiscreteKey& key, const std::string& parent);
\n+
157
\n+
162 GTSAM_EXPORT Signature operator%(const DiscreteKey& key, const Signature::Table& parent);
\n+
163
\n+
164}
\n+
specialized key for discrete variables
\n+
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
string html(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of html.
Definition DiscreteValues.cpp:134
\n-
string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of markdown.
Definition DiscreteValues.cpp:129
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::vector< DiscreteValues > cartesianProduct(const DiscreteKeys &keys)
Free version of CartesianProduct.
Definition DiscreteValues.h:124
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
An assignment from labels to value index (size_t).
Definition Assignment.h:37
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
Signature operator|(const DiscreteKey &key, const DiscreteKey &parent)
Helper function to create Signature objects example: Signature s = D | E;.
Definition Signature.cpp:178
\n+
Signature operator%(const DiscreteKey &key, const string &parent)
Helper function to create Signature objects example: Signature s(D % "99/1");.
Definition Signature.cpp:183
\n
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n-
A map from keys to values.
Definition DiscreteValues.h:34
\n-
std::map< Key, std::vector< std::string > > Names
Translation table from values to strings.
Definition DiscreteValues.h:95
\n-
static std::vector< DiscreteValues > CartesianProduct(const DiscreteKeys &keys)
Return a vector of DiscreteValues, one for each possible combination of values.
Definition DiscreteValues.h:85
\n-
The Factor::error simply extracts the.
\n+
Signature for a discrete conditional density, used to construct conditionals.
Definition Signature.h:54
\n+
std::vector< double > Row
Data type for the CPT.
Definition Signature.h:59
\n+
const DiscreteKey & key() const
the variable key
Definition Signature.h:115
\n+
const DiscreteKeys & parents() const
the parent keys
Definition Signature.h:118
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,168 +1,133 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteValues.h\n+Signature.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-23\n-24#include \n-25#include \n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-_\b3_\b4class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs : public _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt {\n-35 public:\n-36 using _\bB_\ba_\bs_\be = _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bK_\be_\by_\b>; // base class\n-37\n-40 using Assignment::Assignment; // all constructors\n-41\n-42 // Define the implicit default constructor.\n-43 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs() = default;\n-44\n-45 // Construct from assignment.\n-46 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs(const _\bB_\ba_\bs_\be& a) : _\bB_\ba_\bs_\be(a) {}\n-47\n-48 // Construct from initializer list.\n-49 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs(std::initializer_list> init)\n-50 : _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bK_\be_\by_\b>{init} {}\n-51\n+19#pragma once\n+20#include \n+21#include \n+22#include \n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+_\b5_\b4 class GTSAM_EXPORT _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be {\n 55\n-57 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-58 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n-59\n-61 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& x, double tol = 1e-9) const;\n-62\n+56 public:\n+57\n+_\b5_\b9 typedef std::vector _\bR_\bo_\bw;\n+60 typedef std::vector Table;\n+61\n+62 private:\n+63\n+65 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by key_;\n 66\n-67 // insert in base class;\n-68 std::pair insert( const value_type& value ){\n-69 return Base::insert(value);\n-70 }\n-71\n-74 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& insert(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values);\n+68 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs parents_;\n+69\n+70 // the given CPT specification string\n+71 boost::optional spec_;\n+72\n+73 // the CPT as parsed, if successful\n+74 boost::optional table_;\n 75\n-79 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& update(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values);\n-80\n-_\b8_\b5 static std::vector _\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt(\n-86 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys) {\n-87 return Base::CartesianProduct(keys);\n-88 }\n-89\n-93\n-_\b9_\b5 using _\bN_\ba_\bm_\be_\bs = std::map>;\n-96\n-98 static std::string Translate(const _\bN_\ba_\bm_\be_\bs& names, _\bK_\be_\by key, size_t index);\n-99\n-107 std::string _\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-DefaultKeyFormatter,\n-108 const _\bN_\ba_\bm_\be_\bs& names = {}) const;\n-109\n-117 std::string _\bh_\bt_\bm_\bl(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-118 const Names& names = {}) const;\n+76 public:\n+88 _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& parents,\n+89 const Table& table);\n+90\n+102 _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& parents,\n+103 const std::string& spec);\n+104\n+112 _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key);\n+113\n+_\b1_\b1_\b5 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& _\bk_\be_\by() const { return key_; }\n+116\n+_\b1_\b1_\b8 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& _\bp_\ba_\br_\be_\bn_\bt_\bs() const { return parents_; }\n 119\n-121};\n+121 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs discreteKeys() const;\n 122\n-_\b1_\b2_\b4inline std::vector _\bc_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs&\n-keys) {\n-125 return _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt(keys);\n-126}\n-127\n-129std::string _\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values,\n-130 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-131 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs& names = {});\n-132\n-134std::string _\bh_\bt_\bm_\bl(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values,\n-135 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-136 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs& names = {});\n+124 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br indices() const;\n+125\n+126 // the CPT as parsed, if successful\n+127 const boost::optional
& table() const { return table_; }\n+128\n+129 // the CPT as a vector of doubles, with key's values most rapidly changing\n+130 std::vector cpt() const;\n+131\n+133 Signature& operator,(const DiscreteKey& parent);\n+134\n+136 Signature& operator=(const std::string& spec);\n 137\n-138// traits\n-139template <>\n-_\b1_\b4_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-141\n-142} // namespace gtsam\n-_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh\n-An assignment from labels to a discrete value index (size_t)\n+139 Signature& operator=(const Table& table);\n+140\n+142 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+143 const Signature& s);\n+144 };\n+145\n+150 GTSAM_EXPORT Signature _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b|(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by&\n+parent);\n+151\n+156 GTSAM_EXPORT Signature _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b%(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::string&\n+parent);\n+157\n+162 GTSAM_EXPORT Signature _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b%(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const Signature::\n+Table& parent);\n+163\n+164}\n _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n specialized key for discrete variables\n-_\bK_\be_\by_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n+std::pair< Key, size_t > DiscreteKey\n+Key type for discrete variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bt_\bm_\bl\n-string html(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n-const DiscreteValues::Names &names)\n-Free version of html.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn\n-string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n-const DiscreteValues::Names &names)\n-Free version of markdown.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt\n-std::vector< DiscreteValues > cartesianProduct(const DiscreteKeys &keys)\n-Free version of CartesianProduct.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:124\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt\n-An assignment from labels to value index (size_t).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Assignment.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b|\n+Signature operator|(const DiscreteKey &key, const DiscreteKey &parent)\n+Helper function to create Signature objects example: Signature s = D | E;.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.cpp:178\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b%\n+Signature operator%(const DiscreteKey &key, const string &parent)\n+Helper function to create Signature objects example: Signature s(D % \"99/1\");.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.cpp:183\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n DiscreteKeys is a set of keys that can be assembled using the & operator.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-A map from keys to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs\n-std::map< Key, std::vector< std::string > > Names\n-Translation table from values to strings.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt\n-static std::vector< DiscreteValues > CartesianProduct(const DiscreteKeys &keys)\n-Return a vector of DiscreteValues, one for each possible combination of values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:85\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+Signature for a discrete conditional density, used to construct conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bR_\bo_\bw\n+std::vector< double > Row\n+Data type for the CPT.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bk_\be_\by\n+const DiscreteKey & key() const\n+the variable key\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bp_\ba_\br_\be_\bn_\bt_\bs\n+const DiscreteKeys & parents() const\n+the parent keys\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.h:118\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+ * _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00194.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00194.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/AlgebraicDecisionTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteLookupDAG.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,46 @@\n \n \n \n \n \n
\n \n-
AlgebraicDecisionTree.cpp File Reference
\n+
DiscreteLookupDAG.h File Reference
\n
\n
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::DiscreteLookupTable
 DiscreteLookupTable table for max-product. More...
 
class  gtsam::DiscreteLookupDAG
 A DAG made from lookup tables, as defined above. More...
 
struct  gtsam::traits< DiscreteLookupDAG >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Feb 20, 2022
\n-
Author
Mike Sheffler
\n-
\n-Duy-Nguyen Ta
\n-
\n-Frank Dellaert
\n+
Date
January, 2022
\n+
Author
Frank dellaert
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-AlgebraicDecisionTree.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DiscreteLookupDAG.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be\n+\u00a0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be table for max-product. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG\n+\u00a0 A DAG made from lookup tables, as defined above. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Feb 20, 2022\n+ January, 2022\n Author\n- Mike Sheffler\n- Duy-Nguyen Ta\n- Frank Dellaert\n+ Frank dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00197.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00197.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesNet.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactorGraph.h File Reference\n \n \n \n \n \n \n \n@@ -95,44 +95,57 @@\n \n \n \n \n
\n \n-
DiscreteBayesNet.h File Reference
\n+Namespaces |\n+Functions
\n+
DiscreteFactorGraph.h File Reference
\n \n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n \n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::DiscreteBayesNet
 A Bayes net made from discrete conditional distributions. More...
struct  gtsam::EliminationTraits< DiscreteFactorGraph >
 
struct  gtsam::traits< DiscreteBayesNet >
class  gtsam::DiscreteFactorGraph
 A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e. More...
 
struct  gtsam::traits< DiscreteFactorGraph >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > gtsam::EliminateDiscrete (const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
 Main elimination function for DiscreteFactorGraph.
 
std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > gtsam::EliminateForMPE (const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
 Alternate elimination function for that creates non-normalized lookup tables.
 
\n

Detailed Description

\n-
Date
Feb 15, 2011
\n+
Date
Feb 14, 2011
\n
Author
Duy-Nguyen Ta
\n
\n-Frank dellaert
\n+Frank Dellaert \n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,45 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteBayesNet.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+DiscreteFactorGraph.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-\u00a0 A Bayes net made from discrete conditional distributions. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+\u00a0 A Discrete _\bF_\ba_\bc_\bt_\bo_\br Graph is a factor graph where all factors are\n+ Discrete, i.e. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::pair< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be (const\n+_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, DecisionTreeFactor:: _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n+ shared_ptr >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &frontalKeys)\n+\u00a0 Main elimination function for\n+ _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n+\u00a0\n+std::pair< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bF_\bo_\br_\bM_\bP_\bE (const\n+_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, DecisionTreeFactor:: _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n+ shared_ptr >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &frontalKeys)\n+\u00a0 Alternate elimination function for that\n+ creates non-normalized lookup tables.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Feb 15, 2011\n+ Feb 14, 2011\n Author\n Duy-Nguyen Ta\n- Frank dellaert\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00197.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00197.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a00197 = [\n- [\"gtsam::traits< DiscreteBayesNet >\", \"a02820.html\", null]\n+ [\"gtsam::EliminationTraits< DiscreteFactorGraph >\", \"a02860.html\", \"a02860\"],\n+ [\"gtsam::traits< DiscreteFactorGraph >\", \"a02868.html\", null],\n+ [\"EliminateDiscrete\", \"a00197.html#ga6996e9c84467350b071645649231223a\", null],\n+ [\"EliminateForMPE\", \"a00197.html#ga9bd0b2859a7513198a369f5de3c8cde3\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00197_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00197_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesNet.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
DiscreteBayesNet.h
\n+
DiscreteFactorGraph.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,157 +114,217 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-\n-\n-
25
\n-
26#include <boost/shared_ptr.hpp>
\n-
27#include <map>
\n-
28#include <string>
\n-
29#include <utility>
\n-
30#include <vector>
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
\n-
38class GTSAM_EXPORT DiscreteBayesNet: public BayesNet<DiscreteConditional> {
\n-
39 public:
\n-\n-
41 typedef DiscreteBayesNet This;
\n-\n-
43 typedef boost::shared_ptr<This> shared_ptr;
\n-
44 typedef boost::shared_ptr<ConditionalType> sharedConditional;
\n-
45
\n-
48
\n-\n-
51
\n-
53 template <typename ITERATOR>
\n-
\n-
54 DiscreteBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
\n-
55 : Base(firstConditional, lastConditional) {}
\n-
\n-
56
\n-
58 template <class CONTAINER>
\n-
\n-
59 explicit DiscreteBayesNet(const CONTAINER& conditionals)
\n-
60 : Base(conditionals) {}
\n-
\n-
61
\n-
64 template <class DERIVEDCONDITIONAL>
\n-
\n-\n-
66 : Base(graph) {}
\n-
\n-
67
\n-
69 virtual ~DiscreteBayesNet() {}
\n-
70
\n-
72
\n-
75
\n-
77 bool equals(const This& bn, double tol = 1e-9) const;
\n-
78
\n-
80
\n-
83
\n-
84 // Add inherited versions of add.
\n-
85 using Base::add;
\n-
86
\n-
\n-
88 void add(const DiscreteKey& key, const std::string& spec) {
\n-
89 emplace_shared<DiscreteDistribution>(key, spec);
\n-
90 }
\n-
\n-
91
\n-
93 template <typename... Args>
\n-
\n-
94 void add(Args&&... args) {
\n-
95 emplace_shared<DiscreteConditional>(std::forward<Args>(args)...);
\n-
96 }
\n-
\n-
97
\n-
98 //** evaluate for given DiscreteValues */
\n-
99 double evaluate(const DiscreteValues & values) const;
\n-
100
\n-
101 //** (Preferred) sugar for the above for given DiscreteValues */
\n-
102 double operator()(const DiscreteValues & values) const {
\n-
103 return evaluate(values);
\n-
104 }
\n-
105
\n-
106 //** log(evaluate(values)) for given DiscreteValues */
\n-
107 double logProbability(const DiscreteValues & values) const;
\n+\n+\n+\n+\n+\n+
26#include <gtsam/base/FastSet.h>
\n+
27
\n+
28#include <boost/make_shared.hpp>
\n+
29#include <string>
\n+
30#include <utility>
\n+
31#include <vector>
\n+
32
\n+
33namespace gtsam {
\n+
34
\n+
35// Forward declarations
\n+
36class DiscreteFactorGraph;
\n+
37class DiscreteConditional;
\n+
38class DiscreteBayesNet;
\n+
39class DiscreteEliminationTree;
\n+
40class DiscreteBayesTree;
\n+
41class DiscreteJunctionTree;
\n+
42
\n+
51GTSAM_EXPORT
\n+
52std::pair<DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr>
\n+
53EliminateDiscrete(const DiscreteFactorGraph& factors,
\n+
54 const Ordering& frontalKeys);
\n+
55
\n+
64GTSAM_EXPORT
\n+
65std::pair<DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr>
\n+
66EliminateForMPE(const DiscreteFactorGraph& factors,
\n+
67 const Ordering& frontalKeys);
\n+
68
\n+
\n+\n+
70{
\n+\n+\n+\n+\n+\n+\n+\n+
78
\n+
80 static std::pair<boost::shared_ptr<ConditionalType>,
\n+
81 boost::shared_ptr<FactorType> >
\n+
\n+
82 DefaultEliminate(const FactorGraphType& factors, const Ordering& keys) {
\n+
83 return EliminateDiscrete(factors, keys);
\n+
84 }
\n+
\n+
85
\n+
\n+\n+
88 const FactorGraphType& graph,
\n+
89 boost::optional<const VariableIndex&> variableIndex) {
\n+
90 return Ordering::Colamd(*variableIndex);
\n+
91 }
\n+
\n+
92};
\n+
\n+
93
\n+
\n+
99class GTSAM_EXPORT DiscreteFactorGraph
\n+
100 : public FactorGraph<DiscreteFactor>,
\n+
101 public EliminateableFactorGraph<DiscreteFactorGraph> {
\n+
102 public:
\n+\n+\n+\n+\n+
107 using shared_ptr = boost::shared_ptr<This>;
\n
108
\n-
118 DiscreteValues sample() const;
\n-
119
\n-
128 DiscreteValues sample(DiscreteValues given) const;
\n+\n+
110
\n+
111 using Indices = KeyVector;
\n+
112
\n+\n+
115
\n+
117 template <typename ITERATOR>
\n+
\n+
118 DiscreteFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
\n+
119 : Base(firstFactor, lastFactor) {}
\n+
\n+
120
\n+
122 template <class CONTAINER>
\n+
123 explicit DiscreteFactorGraph(const CONTAINER& factors) : Base(factors) {}
\n+
124
\n+
127 template <class DERIVED_FACTOR>
\n+\n
129
\n-
133
\n-
135 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
136 const DiscreteFactor::Names& names = {}) const;
\n+\n+
132
\n+
135
\n+
136 bool equals(const This& fg, double tol = 1e-9) const;
\n
137
\n-
139 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
140 const DiscreteFactor::Names& names = {}) const;
\n-
141
\n+
139
\n+
141 template <typename... Args>
\n+
\n+
142 void add(Args&&... args) {
\n+
143 emplace_shared<DecisionTreeFactor>(std::forward<Args>(args)...);
\n+
144 }
\n+
\n
145
\n-
146 using Base::error; // Expose error(const HybridValues&) method..
\n-
147 using Base::evaluate; // Expose evaluate(const HybridValues&) method..
\n-
148 using Base::logProbability; // Expose logProbability(const HybridValues&)
\n-
149
\n+
147 KeySet keys() const;
\n+
148
\n+
150 DiscreteKeys discreteKeys() const;
\n
151
\n-
152#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
155
\n-
156 DiscreteValues GTSAM_DEPRECATED optimize() const;
\n-
157 DiscreteValues GTSAM_DEPRECATED optimize(DiscreteValues given) const;
\n-
159#endif
\n+
153 DecisionTreeFactor product() const;
\n+
154
\n+
159 double operator()(const DiscreteValues& values) const;
\n
160
\n-
161 private:
\n-
163 friend class boost::serialization::access;
\n-
164 template<class ARCHIVE>
\n-
165 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
166 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
167 }
\n-
168 };
\n-
\n-
169
\n-
170// traits
\n-
171template<> struct traits<DiscreteBayesNet> : public Testable<DiscreteBayesNet> {};
\n-
172
\n-
173} // \\ namespace gtsam
\n+
162 void print(
\n+
163 const std::string& s = "DiscreteFactorGraph",
\n+
164 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n+
165
\n+
172 DiscreteBayesNet sumProduct(
\n+
173 OptionalOrderingType orderingType = boost::none) const;
\n
174
\n-\n-\n-
Factor Graph Base Class.
\n-
Bayes network.
\n-
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n+
181 DiscreteBayesNet sumProduct(const Ordering& ordering) const;
\n+
182
\n+
189 DiscreteLookupDAG maxProduct(
\n+
190 OptionalOrderingType orderingType = boost::none) const;
\n+
191
\n+
198 DiscreteLookupDAG maxProduct(const Ordering& ordering) const;
\n+
199
\n+\n+
207 OptionalOrderingType orderingType = boost::none) const;
\n+
208
\n+
215 DiscreteValues optimize(const Ordering& ordering) const;
\n+
216
\n+
219
\n+
227 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
228 const DiscreteFactor::Names& names = {}) const;
\n+
229
\n+
237 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
238 const DiscreteFactor::Names& names = {}) const;
\n+
239
\n+
243
\n+
244 using Base::error; // Expose error(const HybridValues&) method..
\n+
245
\n+
247}; // \\ DiscreteFactorGraph
\n+
\n+
248
\n+
250template <>
\n+
251struct traits<DiscreteFactorGraph> : public Testable<DiscreteFactorGraph> {};
\n+
252
\n+
253} // namespace gtsam
\n+
A thin wrapper around std::set that uses boost's fast_pool_allocator.
\n+\n+\n+
Variable ordering for the elimination algorithm.
\n+
Variable elimination algorithms for factor graphs.
\n+
Factor Graph Base Class.
\n+
std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > EliminateDiscrete(const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
Main elimination function for DiscreteFactorGraph.
Definition DiscreteFactorGraph.cpp:200
\n+
std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > EliminateForMPE(const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
Alternate elimination function for that creates non-normalized lookup tables.
Definition DiscreteFactorGraph.cpp:116
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
string html(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of html.
Definition DiscreteValues.cpp:134
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of markdown.
Definition DiscreteValues.cpp:129
\n
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+\n
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A discrete probabilistic factor.
Definition DecisionTreeFactor.h:45
\n
A Bayes net made from discrete conditional distributions.
Definition DiscreteBayesNet.h:38
\n-
DiscreteBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
Construct from iterator over conditionals.
Definition DiscreteBayesNet.h:54
\n-
DiscreteBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition DiscreteBayesNet.h:65
\n-
DiscreteBayesNet(const CONTAINER &conditionals)
Construct from container of factors (shared_ptr or plain objects)
Definition DiscreteBayesNet.h:59
\n-
DiscreteBayesNet()
Construct empty Bayes net.
Definition DiscreteBayesNet.h:50
\n-
virtual ~DiscreteBayesNet()
Destructor.
Definition DiscreteBayesNet.h:69
\n-
void add(Args &&... args)
Add a DiscreteCondtional.
Definition DiscreteBayesNet.h:94
\n-
void add(const DiscreteKey &key, const std::string &spec)
Add a DiscreteDistribution using a table or a string.
Definition DiscreteBayesNet.h:88
\n+
A Bayes tree representing a Discrete density.
Definition DiscreteBayesTree.h:75
\n
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n+
Elimination tree for discrete factors.
Definition DiscreteEliminationTree.h:33
\n+
Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor.
Definition DiscreteFactor.h:38
\n+
DiscreteValues::Names Names
Translation table from values to strings.
Definition DiscreteFactor.h:106
\n+
DiscreteFactorGraph FactorGraphType
Type of the factor graph (e.g. DiscreteFactorGraph)
Definition DiscreteFactorGraph.h:72
\n+
DiscreteJunctionTree JunctionTreeType
Type of Junction tree.
Definition DiscreteFactorGraph.h:77
\n+
DiscreteFactor FactorType
Type of factors in factor graph.
Definition DiscreteFactorGraph.h:71
\n+
static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering &keys)
The default dense elimination function.
Definition DiscreteFactorGraph.h:82
\n+
DiscreteBayesTree BayesTreeType
Type of Bayes tree.
Definition DiscreteFactorGraph.h:76
\n+
DiscreteBayesNet BayesNetType
Type of Bayes net from sequential elimination.
Definition DiscreteFactorGraph.h:74
\n+
DiscreteConditional ConditionalType
Type of conditionals from elimination.
Definition DiscreteFactorGraph.h:73
\n+
static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::optional< const VariableIndex & > variableIndex)
The default ordering generation function.
Definition DiscreteFactorGraph.h:87
\n+
DiscreteEliminationTree EliminationTreeType
Type of elimination tree.
Definition DiscreteFactorGraph.h:75
\n+
A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.
Definition DiscreteFactorGraph.h:101
\n+
DiscreteFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects)
Definition DiscreteFactorGraph.h:123
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to This
Definition DiscreteFactorGraph.h:107
\n+
DiscreteFactorGraph()
\u200dmap from keys to values
Definition DiscreteFactorGraph.h:114
\n+
DiscreteFactorGraph(const FactorGraph< DERIVED_FACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition DiscreteFactorGraph.h:128
\n+
DiscreteFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Construct from iterator over factors.
Definition DiscreteFactorGraph.h:118
\n+
virtual ~DiscreteFactorGraph()
Destructor.
Definition DiscreteFactorGraph.h:131
\n+
EliminateableFactorGraph< This > BaseEliminateable
for elimination
Definition DiscreteFactorGraph.h:106
\n+
void add(Args &&... args)
Add a decision-tree factor.
Definition DiscreteFactorGraph.h:142
\n+
An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition DiscreteJunctionTree.h:52
\n+
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n+
A DAG made from lookup tables, as defined above.
Definition DiscreteLookupDAG.h:77
\n
A map from keys to values.
Definition DiscreteValues.h:34
\n-
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
The Factor::error simply extracts the.
\n+
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n+
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:57
\n+
Definition Ordering.h:34
\n+
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:95
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteBayesNet.h\n+DiscreteFactorGraph.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,196 +16,337 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n 24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-25\n-26#include \n-27#include \n-28#include \n-29#include \n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-_\b3_\b8class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt: public _\bB_\ba_\by_\be_\bs_\bN_\be_\bt {\n-39 public:\n-40 typedef _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b> _\bB_\ba_\bs_\be;\n-41 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bT_\bh_\bi_\bs;\n-42 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-43 typedef boost::shared_ptr shared_ptr;\n-44 typedef boost::shared_ptr sharedConditional;\n-45\n-48\n-_\b5_\b0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n-51\n-53 template \n-_\b5_\b4 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(ITERATOR firstConditional, ITERATOR lastConditional)\n-55 : _\bB_\ba_\bs_\be(firstConditional, lastConditional) {}\n-56\n-58 template \n-_\b5_\b9 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const CONTAINER& conditionals)\n-60 : _\bB_\ba_\bs_\be(conditionals) {}\n-61\n-64 template \n-_\b6_\b5 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>& graph)\n-66 : _\bB_\ba_\bs_\be(graph) {}\n-67\n-_\b6_\b9 virtual _\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n-70\n-72\n-75\n-77 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& bn, double tol = 1e-9) const;\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh>\n+27\n+28#include \n+29#include \n+30#include \n+31#include \n+32\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n+34\n+35// Forward declarations\n+36class DiscreteFactorGraph;\n+37class DiscreteConditional;\n+38class DiscreteBayesNet;\n+39class DiscreteEliminationTree;\n+40class DiscreteBayesTree;\n+41class DiscreteJunctionTree;\n+42\n+51GTSAM_EXPORT\n+52std::pair\n+53_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be(const DiscreteFactorGraph& factors,\n+54 const Ordering& frontalKeys);\n+55\n+64GTSAM_EXPORT\n+65std::pair\n+66_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bF_\bo_\br_\bM_\bP_\bE(const DiscreteFactorGraph& factors,\n+67 const Ordering& frontalKeys);\n+68\n+_\b6_\b9template<> struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh>\n+70{\n+_\b7_\b1 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n+_\b7_\b2 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n+_\b7_\b3 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+_\b7_\b4 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n+_\b7_\b5 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+_\b7_\b6 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+_\b7_\b7 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n 78\n-80\n-83\n-84 // Add inherited versions of add.\n-85 using Base::add;\n-86\n-_\b8_\b8 void _\ba_\bd_\bd(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::string& spec) {\n-89 emplace_shared(key, spec);\n-90 }\n-91\n-93 template \n-_\b9_\b4 void _\ba_\bd_\bd(Args&&... args) {\n-95 emplace_shared(std::forward(args)...);\n-96 }\n-97\n-98 //** evaluate for given DiscreteValues */\n-99 double evaluate(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs & values) const;\n-100\n-101 //** (Preferred) sugar for the above for given DiscreteValues */\n-102 double operator()(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs & values) const {\n-103 return evaluate(values);\n-104 }\n-105\n-106 //** log(evaluate(values)) for given DiscreteValues */\n-107 double logProbability(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs & values) const;\n+80 static std::pair,\n+81 boost::shared_ptr >\n+_\b8_\b2 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) {\n+83 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be(factors, keys);\n+84 }\n+85\n+_\b8_\b7 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc(\n+88 const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& graph,\n+89 boost::optional variableIndex) {\n+90 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd(*variableIndex);\n+91 }\n+92};\n+93\n+_\b9_\b9class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+100 : public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh,\n+101 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n+102 public:\n+_\b1_\b0_\b3 using _\bT_\bh_\bi_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n+_\b1_\b0_\b4 using _\bB_\ba_\bs_\be = _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b>;\n+_\b1_\b0_\b5 using _\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be =\n+106 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bT_\bh_\bi_\bs_\b>;\n+_\b1_\b0_\b7 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n 108\n-118 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs sample() const;\n-119\n-128 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs sample(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs given) const;\n+_\b1_\b0_\b9 using _\bV_\ba_\bl_\bu_\be_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs;\n+110\n+111 using Indices = _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br;\n+112\n+_\b1_\b1_\b4 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n+115\n+117 template \n+_\b1_\b1_\b8 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(ITERATOR firstFactor, ITERATOR lastFactor)\n+119 : _\bB_\ba_\bs_\be(firstFactor, lastFactor) {}\n+120\n+122 template \n+_\b1_\b2_\b3 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const CONTAINER& factors) : _\bB_\ba_\bs_\be(factors) {}\n+124\n+127 template \n+_\b1_\b2_\b8 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b__\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph) : _\bB_\ba_\bs_\be(graph)\n+{}\n 129\n-133\n-135 std::string markdown(const KeyFormatter& keyFormatter =\n-DefaultKeyFormatter,\n-136 const DiscreteFactor::Names& names = {}) const;\n+_\b1_\b3_\b1 virtual _\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n+132\n+135\n+136 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& fg, double tol = 1e-9) const;\n 137\n-139 std::string _\bh_\bt_\bm_\bl(const KeyFormatter& keyFormatter = DefaultKeyFormatter,\n-140 const DiscreteFactor::Names& names = {}) const;\n-141\n+139\n+141 template \n+_\b1_\b4_\b2 void _\ba_\bd_\bd(Args&&... args) {\n+143 emplace_shared(std::forward(args)...);\n+144 }\n 145\n-146 using Base::error; // Expose error(const HybridValues&) method..\n-147 using Base::evaluate; // Expose evaluate(const HybridValues&) method..\n-148 using Base::logProbability; // Expose logProbability(const HybridValues&)\n-149\n+147 _\bK_\be_\by_\bS_\be_\bt keys() const;\n+148\n+150 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs discreteKeys() const;\n 151\n-152#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-155\n-156 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs GTSAM_DEPRECATED _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n-157 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs GTSAM_DEPRECATED _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs given) const;\n-159#endif\n+153 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br product() const;\n+154\n+159 double operator()(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n 160\n-161 private:\n-_\b1_\b6_\b3 friend class boost::serialization::access;\n-164 template\n-165 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-166 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-167 }\n-168 };\n-169\n-170// traits\n-_\b1_\b7_\b1template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt> : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-172\n-173} // \\ namespace gtsam\n+162 void _\bp_\br_\bi_\bn_\bt(\n+163 const std::string& s = \"DiscreteFactorGraph\",\n+164 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n+165\n+172 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt sumProduct(\n+173 OptionalOrderingType orderingType = boost::none) const;\n 174\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+181 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt sumProduct(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n+182\n+189 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG maxProduct(\n+190 OptionalOrderingType orderingType = boost::none) const;\n+191\n+198 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG maxProduct(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n+199\n+206 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(\n+207 OptionalOrderingType orderingType = boost::none) const;\n+208\n+215 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n+216\n+219\n+227 std::string _\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter,\n+228 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\ba_\bm_\be_\bs& names = {}) const;\n+229\n+237 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,\n+238 const DiscreteFactor::Names& names = {}) const;\n+239\n+243\n+244 using Base::error; // Expose error(const HybridValues&) method..\n+245\n+247}; // \\ DiscreteFactorGraph\n+248\n+250template <>\n+_\b2_\b5_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+{};\n+252\n+253} // namespace gtsam\n+_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n+A thin wrapper around std::set that uses boost's fast_pool_allocator.\n+_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bh\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Variable elimination algorithms for factor graphs.\n _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Factor Graph Base Class.\n-_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-Bayes network.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n-std::pair< Key, size_t > DiscreteKey\n-Key type for discrete variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be\n+std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr >\n+EliminateDiscrete(const DiscreteFactorGraph &factors, const Ordering\n+&frontalKeys)\n+Main elimination function for DiscreteFactorGraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.cpp:200\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bF_\bo_\br_\bM_\bP_\bE\n+std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr >\n+EliminateForMPE(const DiscreteFactorGraph &factors, const Ordering\n+&frontalKeys)\n+Alternate elimination function for that creates non-normalized lookup tables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.cpp:116\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bt_\bm_\bl\n-string html(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn\n+string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n const DiscreteValues::Names &names)\n-Free version of html.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:134\n+Free version of markdown.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:129\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n landmarkKey)\n Optimize for triangulation.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n+A discrete probabilistic factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:45\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n A Bayes net made from discrete conditional distributions.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-DiscreteBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)\n-Construct from iterator over conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-DiscreteBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+A Bayes tree representing a Discrete density.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesTree.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Discrete Conditional Density Derives from DecisionTreeFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+Elimination tree for discrete factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Base class for discrete probabilistic factors The most general one is the\n+derived DecisionTreeFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\ba_\bm_\be_\bs\n+DiscreteValues::Names Names\n+Translation table from values to strings.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n+DiscreteFactorGraph FactorGraphType\n+Type of the factor graph (e.g. DiscreteFactorGraph)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+DiscreteJunctionTree JunctionTreeType\n+Type of Junction tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n+DiscreteFactor FactorType\n+Type of factors in factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr<\n+FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering\n+&keys)\n+The default dense elimination function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+DiscreteBayesTree BayesTreeType\n+Type of Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n+DiscreteBayesNet BayesNetType\n+Type of Bayes net from sequential elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n+DiscreteConditional ConditionalType\n+Type of conditionals from elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc\n+static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::\n+optional< const VariableIndex & > variableIndex)\n+The default ordering generation function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+DiscreteEliminationTree EliminationTreeType\n+Type of elimination tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+DiscreteFactorGraph(const CONTAINER &factors)\n+Construct from container of factors (shared_ptr or plain objects)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+DiscreteFactorGraph()\n+\u00e2\u0080\u008dmap from keys to values\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+DiscreteFactorGraph(const FactorGraph< DERIVED_FACTOR > &graph)\n Implicit copy/downcast constructor to override explicit template container\n constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-DiscreteBayesNet(const CONTAINER &conditionals)\n-Construct from container of factors (shared_ptr or plain objects)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-DiscreteBayesNet()\n-Construct empty Bayes net.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-virtual ~DiscreteBayesNet()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+DiscreteFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)\n+Construct from iterator over factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+virtual ~DiscreteFactorGraph()\n Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\ba_\bd_\bd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be\n+EliminateableFactorGraph< This > BaseEliminateable\n+for elimination\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n void add(Args &&... args)\n-Add a DiscreteCondtional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\ba_\bd_\bd\n-void add(const DiscreteKey &key, const std::string &spec)\n-Add a DiscreteDistribution using a table or a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Discrete Conditional Density Derives from DecisionTreeFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:40\n+Add a decision-tree factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:142\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+An EliminatableClusterTree, i.e., a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteJunctionTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys is a set of keys that can be assembled using the & operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG\n+A DAG made from lookup tables, as defined above.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:77\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n A map from keys to values.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-A BayesNet is a tree of conditionals, stored in elimination order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n A factor graph is a bipartite graph with factor nodes connected to variable\n nodes.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n+Traits class for eliminateable factor graphs, specifies the types that result\n+from elimination,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+EliminateableFactorGraph is a base class for factor graphs that contains\n+elimination algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd\n+static Ordering Colamd(const FACTOR_GRAPH &graph)\n+Compute a fill-reducing ordering using COLAMD from a factor graph (see details\n+for note on performanc...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:95\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00200.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00200.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesNet.h File Reference\n \n \n \n \n \n \n \n@@ -94,37 +94,45 @@\n \n \n \n \n \n
\n \n-
DiscreteBayesTree.cpp File Reference
\n+
DiscreteBayesNet.h File Reference
\n
\n
\n \n-

Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree. \n-More...

\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::DiscreteBayesNet
 A Bayes net made from discrete conditional distributions. More...
 
struct  gtsam::traits< DiscreteBayesNet >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.

\n-

DiscreteBayesTree

Author
Frank Dellaert
\n+
Date
Feb 15, 2011
\n+
Author
Duy-Nguyen Ta
\n
\n-Richard Roberts
\n+Frank dellaert
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteBayesTree.cpp File Reference\n-Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DiscreteBayesNet.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+\u00a0 A Bayes net made from discrete conditional distributions. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.\n-DiscreteBayesTree\n+ Date\n+ Feb 15, 2011\n Author\n- Frank Dellaert\n- Richard Roberts\n+ Duy-Nguyen Ta\n+ Frank dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00203.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00203.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteEliminationTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteLookupDAG.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,33 +95,33 @@\n \n \n \n \n
\n \n-
DiscreteEliminationTree.cpp File Reference
\n+
DiscreteLookupDAG.cpp File Reference
\n
\n
\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Mar 29, 2013
\n-
Author
Frank Dellaert
\n+
Date
Feb 14, 2011
\n+
Author
Duy-Nguyen Ta
\n
\n-Richard Roberts
\n+Frank Dellaert
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteEliminationTree.cpp File Reference\n+DiscreteLookupDAG.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Mar 29, 2013\n+ Feb 14, 2011\n Author\n+ Duy-Nguyen Ta\n Frank Dellaert\n- Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00206.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00206.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteMarginals.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteJunctionTree.h File Reference\n \n \n \n \n \n \n \n@@ -95,48 +95,50 @@\n \n \n \n \n
\n \n-
DiscreteMarginals.h File Reference
\n+Namespaces |\n+Typedefs
\n+
DiscreteJunctionTree.h File Reference
\n \n
\n \n-

A class for computing marginals in a DiscreteFactorGraph. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::DiscreteMarginals
 A class for computing marginals of variables in a DiscreteFactorGraph. More...
class  gtsam::DiscreteJunctionTree
 An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree, with the additional property that it represents the clique tree associated with a Bayes net. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Typedefs

\n+using gtsam::DiscreteCluster = DiscreteJunctionTree::Cluster
 typedef for wrapper:
 
\n

Detailed Description

\n-

A class for computing marginals in a DiscreteFactorGraph.

\n-
Author
Abhijit Kundu
\n-
\n-Richard Roberts
\n+
Date
Mar 29, 2013
\n+
Author
Frank Dellaert
\n
\n-Frank Dellaert
\n-
Date
June 4, 2012
\n+Richard Roberts
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteMarginals.h File Reference\n-A class for computing marginals in a DiscreteFactorGraph. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+DiscreteJunctionTree.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n-\u00a0 A class for computing marginals of variables in a _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+ An _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be, i.e., a set of variable clusters with\n+\u00a0 factors, arranged in a tree, with the additional property that it\n+ represents the clique tree associated with a Bayes net. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDi\bis\bsc\bcr\bre\bet\bte\beC\bCl\blu\bus\bst\bte\ber\br = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n+\u00a0 typedef for wrapper:\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A class for computing marginals in a DiscreteFactorGraph.\n+ Date\n+ Mar 29, 2013\n Author\n- Abhijit Kundu\n- Richard Roberts\n Frank Dellaert\n- Date\n- June 4, 2012\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00206_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00206_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteMarginals.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteJunctionTree.h Source File\n \n \n \n \n \n \n \n@@ -98,101 +98,68 @@\n
No Matches
\n \n \n \n \n \n
\n-
DiscreteMarginals.h
\n+
DiscreteJunctionTree.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n-
22
\n-\n-\n-
25#include <gtsam/base/Vector.h>
\n+
19#pragma once
\n+
20
\n+\n+\n+\n+
24
\n+
25namespace gtsam {
\n
26
\n-
27namespace gtsam {
\n-
28
\n-
\n-\n-
34
\n-
35 protected:
\n-
36
\n-
37 DiscreteBayesTree::shared_ptr bayesTree_;
\n-
38
\n-
39 public:
\n-
40
\n-\n-
42
\n-
\n-\n-
47 bayesTree_ = graph.eliminateMultifrontal();
\n-
48 }
\n-
\n-
49
\n-
\n-\n-
52 // Compute marginal
\n-
53 DiscreteFactor::shared_ptr marginalFactor;
\n-
54 marginalFactor = bayesTree_->marginalFactor(variable, &EliminateDiscrete);
\n-
55 return marginalFactor;
\n-
56 }
\n-
\n+
27 // Forward declarations
\n+
28 class DiscreteEliminationTree;
\n+
29
\n+
\n+
51 class GTSAM_EXPORT DiscreteJunctionTree :
\n+
52 public JunctionTree<DiscreteBayesTree, DiscreteFactorGraph> {
\n+
53 public:
\n+\n+\n+
56 typedef boost::shared_ptr<This> shared_ptr;
\n
57
\n-
\n-
62 Vector marginalProbabilities(const DiscreteKey& key) const {
\n-
63 // Compute marginal
\n-
64 DiscreteFactor::shared_ptr marginalFactor;
\n-
65 marginalFactor = bayesTree_->marginalFactor(key.first, &EliminateDiscrete);
\n-
66
\n-
67 //Create result
\n-
68 Vector vResult(key.second);
\n-
69 for (size_t state = 0; state < key.second ; ++ state) {
\n-
70 DiscreteValues values;
\n-
71 values[key.first] = state;
\n-
72 vResult(state) = (*marginalFactor)(values);
\n-
73 }
\n-
74 return vResult;
\n-
75 }
\n-
\n-
76
\n-
77 };
\n-
\n-
78
\n-
79} /* namespace gtsam */
\n-
typedef and functions to augment Eigen's VectorXd
\n-\n-
Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.
\n-
std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > EliminateDiscrete(const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
Main elimination function for DiscreteFactorGraph.
Definition DiscreteFactorGraph.cpp:200
\n-
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n+
66 DiscreteJunctionTree(const DiscreteEliminationTree& eliminationTree);
\n+
67 };
\n+
\n+
68
\n+\n+
71}
\n+\n+
Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.
\n+
The junction tree.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
boost::shared_ptr< DiscreteFactor > shared_ptr
shared_ptr to this class
Definition DiscreteFactor.h:44
\n-
A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.
Definition DiscreteFactorGraph.h:101
\n-
A class for computing marginals of variables in a DiscreteFactorGraph.
Definition DiscreteMarginals.h:33
\n-
Vector marginalProbabilities(const DiscreteKey &key) const
Compute the marginal of a single variable.
Definition DiscreteMarginals.h:62
\n-
DiscreteMarginals(const DiscreteFactorGraph &graph)
Construct a marginals class.
Definition DiscreteMarginals.h:46
\n-
DiscreteFactor::shared_ptr operator()(Key variable) const
Compute the marginal of a single variable.
Definition DiscreteMarginals.h:51
\n-
A map from keys to values.
Definition DiscreteValues.h:34
\n+
Elimination tree for discrete factors.
Definition DiscreteEliminationTree.h:33
\n+
An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition DiscreteJunctionTree.h:52
\n+
JunctionTree< DiscreteBayesTree, DiscreteFactorGraph > Base
Base class.
Definition DiscreteJunctionTree.h:54
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition DiscreteJunctionTree.h:56
\n+
DiscreteJunctionTree This
This class.
Definition DiscreteJunctionTree.h:55
\n+
A Cluster is just a collection of factors.
Definition ClusterTree.h:36
\n+
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,118 +1,81 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteMarginals.h\n+DiscreteJunctionTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n 26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n-28\n-_\b3_\b3class _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs {\n-34\n-35 protected:\n-36\n-37 DiscreteBayesTree::shared_ptr bayesTree_;\n-38\n-39 public:\n-40\n-41 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs() {}\n-42\n-_\b4_\b6 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph) {\n-47 bayesTree_ = graph.eliminateMultifrontal();\n-48 }\n-49\n-_\b5_\b1 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bK_\be_\by variable) const {\n-52 // Compute marginal\n-53 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br marginalFactor;\n-54 marginalFactor = bayesTree_->marginalFactor(variable, &_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be);\n-55 return marginalFactor;\n-56 }\n+27 // Forward declarations\n+28 class DiscreteEliminationTree;\n+29\n+_\b5_\b1 class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n+52 public _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n+53 public:\n+_\b5_\b4 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b,_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n+_\b5_\b5 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+_\b5_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n 57\n-_\b6_\b2 Vector _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\bi_\be_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key) const {\n-63 // Compute marginal\n-64 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br marginalFactor;\n-65 marginalFactor = bayesTree_->marginalFactor(key.first, &_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be);\n-66\n-67 //Create result\n-68 Vector vResult(key.second);\n-69 for (size_t state = 0; state < key.second ; ++ state) {\n-70 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs values;\n-71 values[key.first] = state;\n-72 vResult(state) = (*marginalFactor)(values);\n-73 }\n-74 return vResult;\n-75 }\n-76\n-77 };\n-78\n-79} /* namespace gtsam */\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n+66 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be& eliminationTree);\n+67 };\n+68\n+_\b7_\b0 using _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bl_\bu_\bs_\bt_\be_\br = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br;\n+71}\n _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be\n-std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr >\n-EliminateDiscrete(const DiscreteFactorGraph &factors, const Ordering\n-&frontalKeys)\n-Main elimination function for DiscreteFactorGraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.cpp:200\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n-std::pair< Key, size_t > DiscreteKey\n-Key type for discrete variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n+_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+The junction tree.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< DiscreteFactor > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n-A class for computing marginals of variables in a DiscreteFactorGraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteMarginals.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\bi_\be_\bs\n-Vector marginalProbabilities(const DiscreteKey &key) const\n-Compute the marginal of a single variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteMarginals.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n-DiscreteMarginals(const DiscreteFactorGraph &graph)\n-Construct a marginals class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteMarginals.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-DiscreteFactor::shared_ptr operator()(Key variable) const\n-Compute the marginal of a single variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteMarginals.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-A map from keys to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+Elimination tree for discrete factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+An EliminatableClusterTree, i.e., a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteJunctionTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n+JunctionTree< DiscreteBayesTree, DiscreteFactorGraph > Base\n+Base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteJunctionTree.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Shared pointer to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteJunctionTree.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+DiscreteJunctionTree This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteJunctionTree.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n+A Cluster is just a collection of factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+A JunctionTree is a cluster tree, a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00209.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00209.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteLookupDAG.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Signature.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,34 +94,84 @@\n \n \n \n \n \n
\n \n-
DiscreteLookupDAG.cpp File Reference
\n+Namespaces |\n+Typedefs |\n+Functions |\n+Variables
\n+
Signature.cpp File Reference
\n \n
\n+\n+

signatures for conditional densities \n+More...

\n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Typedefs

\n+typedef string::const_iterator gtsam::parser::It
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Functions

\n+Signature::Table gtsam::parser::logic (bool ff, bool ft, bool tf, bool tt)
 
\n+ostream & gtsam::operator<< (ostream &os, const Signature::Row &row)
 
\n+ostream & gtsam::operator<< (ostream &os, const Signature::Table &table)
 
\n+ostream & gtsam::operator<< (ostream &os, const Signature &s)
 
\n+Signature gtsam::operator| (const DiscreteKey &key, const DiscreteKey &parent)
 Helper function to create Signature objects example: Signature s = D | E;.
 
\n+Signature gtsam::operator% (const DiscreteKey &key, const std::string &parent)
 Helper function to create Signature objects example: Signature s(D % \"99/1\");.
 
\n+Signature gtsam::operator% (const DiscreteKey &key, const Signature::Table &parent)
 Helper function to create Signature objects, using table construction directly example: Signature s(D % table);.
 
\n+\n+\n+\n+\n+\n+\n+\n

\n+Variables

\n+Signature::Row gtsam::parser::F {1, 0}
 
\n+Signature::Row gtsam::parser::T {0, 1}
 
\n+struct gtsam::parser::Grammar gtsam::parser::grammar
 
\n

Detailed Description

\n-
Date
Feb 14, 2011
\n-
Author
Duy-Nguyen Ta
\n-
\n-Frank Dellaert
\n+

signatures for conditional densities

\n+
Author
Frank Dellaert
\n+
Date
Feb 27, 2011
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,57 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteLookupDAG.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+Signature.cpp File Reference\n+signatures for conditional densities _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef string::const_iterator\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\ber\br:\b::\b:I\bIt\bt\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+Signature::Table\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\ber\br:\b::\b:l\blo\bog\bgi\bic\bc (bool ff, bool ft, bool tf, bool tt)\n+\u00a0\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bR_\bo_\bw &_\br_\bo_\bw)\n+\u00a0\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const Signature::Table\n+ &table)\n+\u00a0\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be &s)\n+\u00a0\n+ _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br|\b| (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n+ &parent)\n+\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects example:\n+ _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s = D | E;.\n+\u00a0\n+ _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br%\b% (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const std::string\n+ &parent)\n+\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects example:\n+ _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s(D % \"99/1\");.\n+\u00a0\n+ _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br%\b% (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const Signature::\n+ Table &parent)\n+\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects, using table\n+ construction directly example: _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s(D % table);.\n+\u00a0\n+V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n+ _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bR_\bo_\bw\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\ber\br:\b::\b:F\bF {1, 0}\n+\u00a0\n+ _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bR_\bo_\bw\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\ber\br:\b::\b:T\bT {0, 1}\n+\u00a0\n+struct gtsam::parser::Grammar\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\ber\br:\b::\b:g\bgr\bra\bam\bmm\bma\bar\br\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Feb 14, 2011\n+signatures for conditional densities\n Author\n- Duy-Nguyen Ta\n Frank Dellaert\n+ Date\n+ Feb 27, 2011\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bc_\bp_\bp\n+ * _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00212.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00212.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteConditional.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteDistribution.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,32 @@\n \n \n \n \n \n
\n \n-
DiscreteConditional.cpp File Reference
\n+Namespaces
\n+
DiscreteDistribution.cpp File Reference
\n \n
\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Variables

\n-template class GTSAM_EXPORT gtsam::Conditional< DecisionTreeFactor, DiscreteConditional >
 
\n

Detailed Description

\n-
Date
Feb 14, 2011
\n-
Author
Duy-Nguyen Ta
\n-
\n-Frank Dellaert
\n+
Date
December 2021
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-DiscreteConditional.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DiscreteDistribution.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n-template class GTSAM_EXPORT\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bon\bnd\bdi\bit\bti\bio\bon\bna\bal\bl<\b< D\bDe\bec\bci\bis\bsi\bio\bon\bnT\bTr\bre\bee\beF\bFa\bac\bct\bto\bor\br,\b,\n- D\bDi\bis\bsc\bcr\bre\bet\bte\beC\bCo\bon\bnd\bdi\bit\bti\bio\bon\bna\bal\bl >\b>\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Feb 14, 2011\n+ December 2021\n Author\n- Duy-Nguyen Ta\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bc_\bp_\bp\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00218.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00218.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Assignment.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesNet.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,34 @@\n \n \n \n \n \n
\n \n-
Assignment.h File Reference
\n+
DiscreteBayesNet.cpp File Reference
\n
\n
\n-\n-

An assignment from labels to a discrete value index (size_t) \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::Assignment< L >
 An assignment from labels to value index (size_t). More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

An assignment from labels to a discrete value index (size_t)

\n-
Author
Frank Dellaert
\n-
Date
Feb 5, 2012
\n+
Date
Feb 15, 2011
\n+
Author
Duy-Nguyen Ta
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Assignment.h File Reference\n-An assignment from labels to a discrete value index (size_t) _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\b _\bL_\b _\b>\n-\u00a0 An assignment from labels to value index (size_t). _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DiscreteBayesNet.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-An assignment from labels to a discrete value index (size_t)\n+ Date\n+ Feb 15, 2011\n Author\n+ Duy-Nguyen Ta\n Frank Dellaert\n- Date\n- Feb 5, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00221.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00221.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteKey.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteMarginals.h File Reference\n \n \n \n \n \n \n \n@@ -95,61 +95,48 @@\n \n \n \n \n
\n \n-
DiscreteKey.h File Reference
\n+Namespaces
\n+
DiscreteMarginals.h File Reference
\n \n
\n \n-

specialized key for discrete variables \n+

A class for computing marginals in a DiscreteFactorGraph. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::DiscreteKeys
 DiscreteKeys is a set of keys that can be assembled using the & operator. More...
 
struct  gtsam::traits< DiscreteKeys >
class  gtsam::DiscreteMarginals
 A class for computing marginals of variables in a DiscreteFactorGraph. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-

\n-Typedefs

using gtsam::DiscreteKey = std::pair< Key, size_t >
 Key type for discrete variables.
 
\n-\n-\n-\n-\n

\n-Functions

\n-DiscreteKeys gtsam::operator& (const DiscreteKey &key1, const DiscreteKey &key2)
 Create a list from two keys.
 
\n

Detailed Description

\n-

specialized key for discrete variables

\n-
Author
Frank Dellaert
\n-
Date
Feb 28, 2011
\n+

A class for computing marginals in a DiscreteFactorGraph.

\n+
Author
Abhijit Kundu
\n+
\n+Richard Roberts
\n+
\n+Frank Dellaert
\n+
Date
June 4, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DiscreteKey.h File Reference\n-specialized key for discrete variables _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DiscreteMarginals.h File Reference\n+A class for computing marginals in a DiscreteFactorGraph. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-\u00a0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs is a set of keys that can be assembled using the &\n- operator. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n+\u00a0 A class for computing marginals of variables in a _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by = std::pair< _\bK_\be_\by, size_t >\n-\u00a0 Key type for discrete variables.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br&\b& (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key1, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n- &key2)\n-\u00a0 Create a list from two keys.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-specialized key for discrete variables\n+A class for computing marginals in a DiscreteFactorGraph.\n Author\n+ Abhijit Kundu\n+ Richard Roberts\n Frank Dellaert\n Date\n- Feb 28, 2011\n+ June 4, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00221_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00221_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteKey.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteMarginals.h Source File\n \n \n \n \n \n \n \n@@ -98,121 +98,101 @@\n
No Matches
\n \n \n \n \n \n
\n-
DiscreteKey.h
\n+
DiscreteMarginals.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-
22#include <gtsam/inference/Key.h>
\n-
23
\n-
24#include <boost/serialization/vector.hpp>
\n-
25#include <map>
\n-
26#include <string>
\n-
27#include <vector>
\n+
21#pragma once
\n+
22
\n+\n+\n+
25#include <gtsam/base/Vector.h>
\n+
26
\n+
27namespace gtsam {
\n
28
\n-
29namespace gtsam {
\n-
30
\n-
36 using DiscreteKey = std::pair<Key,size_t>;
\n-
37
\n-
\n-
39 struct GTSAM_EXPORT DiscreteKeys: public std::vector<DiscreteKey> {
\n+
\n+\n+
34
\n+
35 protected:
\n+
36
\n+
37 DiscreteBayesTree::shared_ptr bayesTree_;
\n+
38
\n+
39 public:
\n
40
\n-
41 // Forward all constructors.
\n-
42 using std::vector<DiscreteKey>::vector;
\n-
43
\n-
45 DiscreteKeys() : std::vector<DiscreteKey>::vector() {}
\n-
46
\n-
48 explicit DiscreteKeys(const DiscreteKey& key) { push_back(key); }
\n+\n+
42
\n+
\n+\n+
47 bayesTree_ = graph.eliminateMultifrontal();
\n+
48 }
\n+
\n
49
\n
\n-
51 explicit DiscreteKeys(std::map<Key, size_t> cardinalities) {
\n-
52 for (auto&& kv : cardinalities) emplace_back(kv);
\n-
53 }
\n-
\n-
54
\n-
\n-
56 DiscreteKeys(const std::vector<DiscreteKey>& keys) :
\n-
57 std::vector<DiscreteKey>(keys) {
\n-
58 }
\n-
\n-
59
\n-
61 DiscreteKeys(const std::vector<int>& cs);
\n-
62
\n-
64 KeyVector indices() const;
\n-
65
\n-
67 std::map<Key,size_t> cardinalities() const;
\n-
68
\n-
\n-\n-
71 push_back(key);
\n-
72 return *this;
\n+\n+
52 // Compute marginal
\n+
53 DiscreteFactor::shared_ptr marginalFactor;
\n+
54 marginalFactor = bayesTree_->marginalFactor(variable, &EliminateDiscrete);
\n+
55 return marginalFactor;
\n+
56 }
\n+
\n+
57
\n+
\n+
62 Vector marginalProbabilities(const DiscreteKey& key) const {
\n+
63 // Compute marginal
\n+
64 DiscreteFactor::shared_ptr marginalFactor;
\n+
65 marginalFactor = bayesTree_->marginalFactor(key.first, &EliminateDiscrete);
\n+
66
\n+
67 //Create result
\n+
68 Vector vResult(key.second);
\n+
69 for (size_t state = 0; state < key.second ; ++ state) {
\n+
70 DiscreteValues values;
\n+
71 values[key.first] = state;
\n+
72 vResult(state) = (*marginalFactor)(values);
\n
73 }
\n+
74 return vResult;
\n+
75 }
\n+
\n+
76
\n+
77 };
\n
\n-
74
\n-
76 void print(const std::string& s = "",
\n-
77 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n
78
\n-
80 bool equals(const DiscreteKeys& other, double tol = 0) const;
\n-
81
\n-
83 friend class boost::serialization::access;
\n-
84 template <class ARCHIVE>
\n-
85 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
86 ar& boost::serialization::make_nvp(
\n-
87 "DiscreteKeys",
\n-
88 boost::serialization::base_object<std::vector<DiscreteKey>>(*this));
\n-
89 }
\n-
90
\n-
91 }; // DiscreteKeys
\n-
\n-
92
\n-
94 GTSAM_EXPORT DiscreteKeys operator&(const DiscreteKey& key1, const DiscreteKey& key2);
\n-
95
\n-
96 // traits
\n-
97 template <>
\n-
98 struct traits<DiscreteKeys> : public Testable<DiscreteKeys> {};
\n-
99
\n-
100 } // namespace gtsam
\n-\n-
Included from all GTSAM files.
\n+
79} /* namespace gtsam */
\n+
typedef and functions to augment Eigen's VectorXd
\n+\n+
Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.
\n+
std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > EliminateDiscrete(const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
Main elimination function for DiscreteFactorGraph.
Definition DiscreteFactorGraph.cpp:200
\n
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
DiscreteKeys operator&(const DiscreteKey &key1, const DiscreteKey &key2)
Create a list from two keys.
Definition DiscreteKey.cpp:46
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n-
DiscreteKeys & operator&(const DiscreteKey &key)
Add a key (non-const!)
Definition DiscreteKey.h:70
\n-
DiscreteKeys()
Constructor for serialization.
Definition DiscreteKey.h:45
\n-
DiscreteKeys(const DiscreteKey &key)
Construct from a key.
Definition DiscreteKey.h:48
\n-
DiscreteKeys(const std::vector< DiscreteKey > &keys)
Construct from a vector of keys.
Definition DiscreteKey.h:56
\n-
DiscreteKeys(std::map< Key, size_t > cardinalities)
Construct from cardinalities.
Definition DiscreteKey.h:51
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
boost::shared_ptr< DiscreteFactor > shared_ptr
shared_ptr to this class
Definition DiscreteFactor.h:44
\n+
A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.
Definition DiscreteFactorGraph.h:101
\n+
A class for computing marginals of variables in a DiscreteFactorGraph.
Definition DiscreteMarginals.h:33
\n+
Vector marginalProbabilities(const DiscreteKey &key) const
Compute the marginal of a single variable.
Definition DiscreteMarginals.h:62
\n+
DiscreteMarginals(const DiscreteFactorGraph &graph)
Construct a marginals class.
Definition DiscreteMarginals.h:46
\n+
DiscreteFactor::shared_ptr operator()(Key variable) const
Compute the marginal of a single variable.
Definition DiscreteMarginals.h:51
\n+
A map from keys to values.
Definition DiscreteValues.h:34
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,148 +1,118 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteKey.h\n+DiscreteMarginals.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-23\n-24#include \n-25#include \n-26#include \n-27#include \n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n 28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-_\b3_\b6 using _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by = std::pair;\n-37\n-_\b3_\b9 struct GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs: public std::vector {\n+_\b3_\b3class _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs {\n+34\n+35 protected:\n+36\n+37 DiscreteBayesTree::shared_ptr bayesTree_;\n+38\n+39 public:\n 40\n-41 // Forward all constructors.\n-42 using std::vector<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by>::vector;\n-43\n-_\b4_\b5 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs() : std::vector<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by>::vector() {}\n-46\n-_\b4_\b8 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key) { push_back(key); }\n+41 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs() {}\n+42\n+_\b4_\b6 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph) {\n+47 bayesTree_ = graph.eliminateMultifrontal();\n+48 }\n 49\n-_\b5_\b1 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs(std::map cardinalities) {\n-52 for (auto&& kv : cardinalities) emplace_back(kv);\n-53 }\n-54\n-_\b5_\b6 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs(const std::vector& keys) :\n-57 std::vector<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by>(keys) {\n-58 }\n-59\n-61 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs(const std::vector& cs);\n-62\n-64 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br indices() const;\n-65\n-67 std::map cardinalities() const;\n-68\n-_\b7_\b0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key) {\n-71 push_back(key);\n-72 return *this;\n+_\b5_\b1 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bK_\be_\by variable) const {\n+52 // Compute marginal\n+53 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br marginalFactor;\n+54 marginalFactor = bayesTree_->marginalFactor(variable, &_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be);\n+55 return marginalFactor;\n+56 }\n+57\n+_\b6_\b2 Vector _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\bi_\be_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key) const {\n+63 // Compute marginal\n+64 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br marginalFactor;\n+65 marginalFactor = bayesTree_->marginalFactor(key.first, &_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be);\n+66\n+67 //Create result\n+68 Vector vResult(key.second);\n+69 for (size_t state = 0; state < key.second ; ++ state) {\n+70 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs values;\n+71 values[key.first] = state;\n+72 vResult(state) = (*marginalFactor)(values);\n 73 }\n-74\n-76 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-77 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+74 return vResult;\n+75 }\n+76\n+77 };\n 78\n-80 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& other, double tol = 0) const;\n-81\n-_\b8_\b3 friend class boost::serialization::access;\n-84 template \n-85 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-86 ar& boost::serialization::make_nvp(\n-87 \"DiscreteKeys\",\n-88 boost::serialization::base_object>(*this));\n-89 }\n-90\n-91 }; // DiscreteKeys\n-92\n-94 GTSAM_EXPORT DiscreteKeys _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key1, const\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key2);\n-95\n-96 // traits\n-97 template <>\n-_\b9_\b8 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-99\n-100 } // namespace gtsam\n-_\bK_\be_\by_\b._\bh\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n+79} /* namespace gtsam */\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be\n+std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr >\n+EliminateDiscrete(const DiscreteFactorGraph &factors, const Ordering\n+&frontalKeys)\n+Main elimination function for DiscreteFactorGraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.cpp:200\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n std::pair< Key, size_t > DiscreteKey\n Key type for discrete variables.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&\n-DiscreteKeys operator&(const DiscreteKey &key1, const DiscreteKey &key2)\n-Create a list from two keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.cpp:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys is a set of keys that can be assembled using the & operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&\n-DiscreteKeys & operator&(const DiscreteKey &key)\n-Add a key (non-const!)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys()\n-Constructor for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys(const DiscreteKey &key)\n-Construct from a key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys(const std::vector< DiscreteKey > &keys)\n-Construct from a vector of keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys(std::map< Key, size_t > cardinalities)\n-Construct from cardinalities.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< DiscreteFactor > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n+A class for computing marginals of variables in a DiscreteFactorGraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteMarginals.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\bi_\be_\bs\n+Vector marginalProbabilities(const DiscreteKey &key) const\n+Compute the marginal of a single variable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteMarginals.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n+DiscreteMarginals(const DiscreteFactorGraph &graph)\n+Construct a marginals class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteMarginals.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+DiscreteFactor::shared_ptr operator()(Key variable) const\n+Compute the marginal of a single variable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteMarginals.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+A map from keys to values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00224.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00224.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/AlgebraicDecisionTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteEliminationTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,50 +94,34 @@\n \n \n \n \n \n
\n \n-
AlgebraicDecisionTree.h File Reference
\n+
DiscreteEliminationTree.cpp File Reference
\n
\n
\n-\n-

Algebraic Decision Trees. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::AlgebraicDecisionTree< L >
 An algebraic decision tree fixes the range of a DecisionTree to double. More...
 
struct  gtsam::AlgebraicDecisionTree< L >::Ring
 The Real ring with addition and multiplication. More...
 
struct  gtsam::traits< AlgebraicDecisionTree< T > >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Algebraic Decision Trees.

\n-
Author
Frank Dellaert
\n-
Date
Mar 14, 2011
\n+
Date
Mar 29, 2013
\n+
Author
Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-AlgebraicDecisionTree.h File Reference\n-Algebraic Decision Trees. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b _\b>\n-\u00a0 An algebraic decision tree fixes the range of a _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be to\n- double. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b _\b>_\b:_\b:_\bR_\bi_\bn_\bg\n-\u00a0 The Real ring with addition and multiplication. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bT_\b _\b>_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DiscreteEliminationTree.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Algebraic Decision Trees.\n+ Date\n+ Mar 29, 2013\n Author\n Frank Dellaert\n- Date\n- Mar 14, 2011\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00227.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00227.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTreeFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesTree.h File Reference\n \n \n \n \n \n \n \n@@ -96,43 +96,47 @@\n \n \n \n
\n \n-
DecisionTreeFactor.h File Reference
\n+
DiscreteBayesTree.h File Reference
\n
\n
\n \n+

Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n+\n+\n \n

\n Classes

class  gtsam::DecisionTreeFactor
 A discrete probabilistic factor. More...
class  gtsam::DiscreteBayesTreeClique
 A clique in a DiscreteBayesTree. More...
 
struct  gtsam::traits< DecisionTreeFactor >
class  gtsam::DiscreteBayesTree
 A Bayes tree representing a Discrete density. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Feb 14, 2011
\n-
Author
Duy-Nguyen Ta
\n+

Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.

\n+

DiscreteBayesTree

Author
Frank Dellaert
\n
\n-Frank Dellaert
\n+Richard Roberts
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DecisionTreeFactor.h File Reference\n+DiscreteBayesTree.h File Reference\n+Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 A discrete probabilistic factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n+\u00a0 A clique in a _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+\u00a0 A Bayes tree representing a Discrete density. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Feb 14, 2011\n+Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.\n+DiscreteBayesTree\n Author\n- Duy-Nguyen Ta\n Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00227.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00227.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00227 = [\n- [\"gtsam::traits< DecisionTreeFactor >\", \"a02812.html\", null]\n+ [\"gtsam::DiscreteBayesTreeClique\", \"a02824.html\", \"a02824\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00227_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00227_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTreeFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesTree.h Source File\n \n \n \n \n \n \n \n@@ -98,241 +98,134 @@\n
No Matches
\n \n \n \n \n \n
\n-
DecisionTreeFactor.h
\n+
DiscreteBayesTree.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-\n-
25
\n-
26#include <algorithm>
\n-
27#include <boost/shared_ptr.hpp>
\n-
28#include <map>
\n-
29#include <stdexcept>
\n-
30#include <string>
\n-
31#include <utility>
\n-
32#include <vector>
\n-
33
\n-
34namespace gtsam {
\n-
35
\n-
36 class DiscreteConditional;
\n-
37 class HybridValues;
\n-
38
\n-
\n-
44 class GTSAM_EXPORT DecisionTreeFactor : public DiscreteFactor,
\n-
45 public AlgebraicDecisionTree<Key> {
\n-
46 public:
\n-
47 // typedefs needed to play nice with gtsam
\n-\n-\n-
50 typedef boost::shared_ptr<DecisionTreeFactor> shared_ptr;
\n-\n+
21#pragma once
\n+
22
\n+\n+\n+\n+\n+\n+
28
\n+
29#include <string>
\n+
30
\n+
31namespace gtsam {
\n+
32
\n+
33// Forward declarations
\n+
34class DiscreteConditional;
\n+
35class VectorValues;
\n+
36
\n+
37/* ************************************************************************* */
\n+
\n+
39class GTSAM_EXPORT DiscreteBayesTreeClique
\n+
40 : public BayesTreeCliqueBase<DiscreteBayesTreeClique, DiscreteFactorGraph> {
\n+
41 public:
\n+\n+\n+
44 Base;
\n+
45 typedef boost::shared_ptr<This> shared_ptr;
\n+
46 typedef boost::weak_ptr<This> weak_ptr;
\n+\n+
48 virtual ~DiscreteBayesTreeClique() {}
\n+\n+
50 const boost::shared_ptr<DiscreteConditional>& conditional)
\n+
51 : Base(conditional) {}
\n
52
\n-
53 protected:
\n-
54 std::map<Key, size_t> cardinalities_;
\n-
55
\n-
56 public:
\n+
\n+\n+
55 const std::string& s = "Clique: ",
\n+
56 const KeyFormatter& formatter = DefaultKeyFormatter) const {
\n+
57 conditional_->printSignature(s, formatter);
\n+
58 }
\n+
\n
59
\n-\n+
60 //** evaluate conditional probability of subtree for given DiscreteValues */
\n+
61 double evaluate(const DiscreteValues& values) const;
\n
62
\n-
64 DecisionTreeFactor(const DiscreteKeys& keys, const ADT& potentials);
\n-
65
\n-\n-
86 const std::vector<double>& table);
\n+
63 //** (Preferred) sugar for the above for given DiscreteValues */
\n+
64 double operator()(const DiscreteValues& values) const {
\n+
65 return evaluate(values);
\n+
66 }
\n+
67};
\n+
\n+
68
\n+
69/* ************************************************************************* */
\n+
\n+
74class GTSAM_EXPORT DiscreteBayesTree
\n+
75 : public BayesTree<DiscreteBayesTreeClique> {
\n+
76 private:
\n+\n+
78
\n+
79 public:
\n+
80 typedef DiscreteBayesTree This;
\n+
81 typedef boost::shared_ptr<This> shared_ptr;
\n+
82
\n+
85
\n+\n
87
\n-
106 DecisionTreeFactor(const DiscreteKeys& keys, const std::string& table);
\n-
107
\n-
109 template <class SOURCE>
\n-
\n-
110 DecisionTreeFactor(const DiscreteKey& key, SOURCE table)
\n-
111 : DecisionTreeFactor(DiscreteKeys{key}, table) {}
\n-
\n-
112
\n-
\n-
114 DecisionTreeFactor(const DiscreteKey& key, const std::vector<double>& row)
\n-\n-
\n-
116
\n-
118 explicit DecisionTreeFactor(const DiscreteConditional& c);
\n-
119
\n-
123
\n-
125 bool equals(const DiscreteFactor& other, double tol = 1e-9) const override;
\n-
126
\n-
127 // print
\n-
128 void print(
\n-
129 const std::string& s = "DecisionTreeFactor:\\n",
\n-
130 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n-
131
\n-
135
\n-
\n-
138 double evaluate(const DiscreteValues& values) const {
\n-
139 return ADT::operator()(values);
\n-
140 }
\n-
\n-
141
\n-
\n-
143 double operator()(const DiscreteValues& values) const override {
\n-
144 return ADT::operator()(values);
\n-
145 }
\n-
\n-
146
\n-
148 double error(const DiscreteValues& values) const;
\n-
149
\n-
\n-\n-
152 return apply(f, ADT::Ring::mul);
\n-
153 }
\n-
\n-
154
\n-
155 static double safe_div(const double& a, const double& b);
\n-
156
\n-
157 size_t cardinality(Key j) const { return cardinalities_.at(j); }
\n-
158
\n-
\n-\n-
161 return apply(f, safe_div);
\n-
162 }
\n-
\n-
163
\n-
165 DecisionTreeFactor toDecisionTreeFactor() const override { return *this; }
\n-
166
\n-
\n-
168 shared_ptr sum(size_t nrFrontals) const {
\n-
169 return combine(nrFrontals, ADT::Ring::add);
\n-
170 }
\n-
\n-
171
\n-
\n-
173 shared_ptr sum(const Ordering& keys) const {
\n-
174 return combine(keys, ADT::Ring::add);
\n-
175 }
\n-
\n-
176
\n-
\n-
178 shared_ptr max(size_t nrFrontals) const {
\n-
179 return combine(nrFrontals, ADT::Ring::max);
\n-
180 }
\n-
\n-
181
\n-
\n-
183 shared_ptr max(const Ordering& keys) const {
\n-
184 return combine(keys, ADT::Ring::max);
\n-
185 }
\n-
\n-
186
\n-
190
\n-
196 DecisionTreeFactor apply(const DecisionTreeFactor& f, ADT::Binary op) const;
\n-
197
\n-
204 shared_ptr combine(size_t nrFrontals, ADT::Binary op) const;
\n-
205
\n-
212 shared_ptr combine(const Ordering& keys, ADT::Binary op) const;
\n-
213
\n-
215 std::vector<std::pair<DiscreteValues, double>> enumerate() const;
\n-
216
\n-
218 DiscreteKeys discreteKeys() const;
\n-
219
\n-
238 DecisionTreeFactor prune(size_t maxNrAssignments) const;
\n-
239
\n-
243
\n-
245 void dot(std::ostream& os,
\n-
246 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
247 bool showZero = true) const;
\n-
248
\n-
250 void dot(const std::string& name,
\n-
251 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
252 bool showZero = true) const;
\n-
253
\n-
255 std::string dot(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
256 bool showZero = true) const;
\n-
257
\n-
265 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
266 const Names& names = {}) const override;
\n-
267
\n-
275 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
276 const Names& names = {}) const override;
\n-
277
\n-
281
\n-
286 double error(const HybridValues& values) const override;
\n-
287
\n-
289
\n-
290 private:
\n-
292 friend class boost::serialization::access;
\n-
293 template <class ARCHIVE>
\n-
294 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
295 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
296 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(ADT);
\n-
297 ar& BOOST_SERIALIZATION_NVP(cardinalities_);
\n-
298 }
\n-
299 };
\n-
\n-
300
\n-
301// traits
\n-
302template <>
\n-
303struct traits<DecisionTreeFactor> : public Testable<DecisionTreeFactor> {};
\n-
304
\n-
305} // namespace gtsam
\n-\n-
specialized key for discrete variables
\n-
Algebraic Decision Trees.
\n-
Variable ordering for the elimination algorithm.
\n-
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n+
89 bool equals(const This& other, double tol = 1e-9) const;
\n+
90
\n+
91 //** evaluate probability for given DiscreteValues */
\n+
92 double evaluate(const DiscreteValues& values) const;
\n+
93
\n+
94 //** (Preferred) sugar for the above for given DiscreteValues */
\n+
95 double operator()(const DiscreteValues& values) const {
\n+
96 return evaluate(values);
\n+
97 }
\n+
98
\n+
102
\n+
104 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
105 const DiscreteFactor::Names& names = {}) const;
\n+
106
\n+
108 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
109 const DiscreteFactor::Names& names = {}) const;
\n+
110
\n+
112};
\n+
\n+
113
\n+
114} // namespace gtsam
\n+\n+\n+
Bayes Tree is a tree of cliques of a Bayes Chain.
\n+
Base class for conditional densities.
\n+
Base class for cliques of a BayesTree.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)
Extracts a row view from a matrix that avoids a copy.
Definition Matrix.h:222
\n-
string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of markdown.
Definition DiscreteValues.cpp:129
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::Unary &op)
free versions of apply
Definition DecisionTree.h:413
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
string html(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of html.
Definition DiscreteValues.cpp:134
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
An algebraic decision tree fixes the range of a DecisionTree to double.
Definition AlgebraicDecisionTree.h:38
\n-
A discrete probabilistic factor.
Definition DecisionTreeFactor.h:45
\n-
shared_ptr sum(const Ordering &keys) const
Create new factor by summing all values with the same separator values.
Definition DecisionTreeFactor.h:173
\n-
double operator()(const DiscreteValues &values) const override
Evaluate probability density, sugar.
Definition DecisionTreeFactor.h:143
\n-
DecisionTreeFactor operator*(const DecisionTreeFactor &f) const override
multiply two factors
Definition DecisionTreeFactor.h:151
\n-
shared_ptr max(size_t nrFrontals) const
Create new factor by maximizing over all values with the same separator.
Definition DecisionTreeFactor.h:178
\n-
shared_ptr max(const Ordering &keys) const
Create new factor by maximizing over all values with the same separator.
Definition DecisionTreeFactor.h:183
\n-
double evaluate(const DiscreteValues &values) const
Calculate probability for given values x, is just look up in AlgebraicDecisionTree.
Definition DecisionTreeFactor.h:138
\n-
DiscreteFactor Base
Typedef to base class.
Definition DecisionTreeFactor.h:49
\n-
shared_ptr sum(size_t nrFrontals) const
Create new factor by summing all values with the same separator values.
Definition DecisionTreeFactor.h:168
\n-
DecisionTreeFactor(const DiscreteKey &key, SOURCE table)
Single-key specialization.
Definition DecisionTreeFactor.h:110
\n-
DecisionTreeFactor toDecisionTreeFactor() const override
Convert into a decisiontree.
Definition DecisionTreeFactor.h:165
\n-
DecisionTreeFactor operator/(const DecisionTreeFactor &f) const
divide by factor f (safely)
Definition DecisionTreeFactor.h:160
\n-
DecisionTreeFactor(const DiscreteKey &key, const std::vector< double > &row)
Single-key specialization, with vector of doubles.
Definition DecisionTreeFactor.h:114
\n-
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n-
Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor.
Definition DiscreteFactor.h:38
\n-
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n+
A clique in a DiscreteBayesTree.
Definition DiscreteBayesTree.h:40
\n+
void printSignature(const std::string &s="Clique: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
print index signature only
Definition DiscreteBayesTree.h:54
\n+
A Bayes tree representing a Discrete density.
Definition DiscreteBayesTree.h:75
\n+
DiscreteBayesTree()
Default constructor, creates an empty Bayes tree.
Definition DiscreteBayesTree.h:86
\n
A map from keys to values.
Definition DiscreteValues.h:34
\n-
Definition Ordering.h:34
\n-
the error.
\n+
Bayes tree.
Definition BayesTree.h:67
\n+
This is the base class for BayesTree cliques.
Definition BayesTreeCliqueBase.h:50
\n+
The Factor::error simply extracts the.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,303 +1,155 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DecisionTreeFactor.h\n+DiscreteBayesTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n-25\n-26#include \n-27#include \n-28#include \n-29#include \n-30#include \n-31#include \n-32#include \n-33\n-34namespace _\bg_\bt_\bs_\ba_\bm {\n-35\n-36 class DiscreteConditional;\n-37 class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n-38\n-_\b4_\b4 class GTSAM_EXPORT _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br : public _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br,\n-45 public _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be {\n-46 public:\n-47 // typedefs needed to play nice with gtsam\n-48 typedef _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-_\b4_\b9 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-50 typedef boost::shared_ptr shared_ptr;\n-51 typedef _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b> _\bA_\bD_\bT;\n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh>\n+28\n+29#include \n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32\n+33// Forward declarations\n+34class DiscreteConditional;\n+35class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+36\n+37/* *************************************************************************\n+*/\n+_\b3_\b9class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n+40 : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be {\n+41 public:\n+42 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be _\bT_\bh_\bi_\bs;\n+43 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b,_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>\n+44 _\bB_\ba_\bs_\be;\n+45 typedef boost::shared_ptr shared_ptr;\n+46 typedef boost::weak_ptr weak_ptr;\n+47 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n+48 virtual _\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n+49 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be(\n+50 const boost::shared_ptr& conditional)\n+51 : _\bB_\ba_\bs_\be(conditional) {}\n 52\n-53 protected:\n-54 std::map cardinalities_;\n-55\n-56 public:\n+_\b5_\b4 void _\bp_\br_\bi_\bn_\bt_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(\n+55 const std::string& s = \"Clique: \",\n+56 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const {\n+57 conditional_->printSignature(s, formatter);\n+58 }\n 59\n-61 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br();\n+60 //** evaluate conditional probability of subtree for given DiscreteValues */\n+61 double evaluate(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n 62\n-64 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys, const _\bA_\bD_\bT& potentials);\n-65\n-85 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys,\n-86 const std::vector& table);\n+63 //** (Preferred) sugar for the above for given DiscreteValues */\n+64 double operator()(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const {\n+65 return evaluate(values);\n+66 }\n+67};\n+68\n+69/* *************************************************************************\n+*/\n+_\b7_\b4class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+75 : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be {\n+76 private:\n+77 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bB_\ba_\bs_\be;\n+78\n+79 public:\n+80 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+81 typedef boost::shared_ptr shared_ptr;\n+82\n+85\n+_\b8_\b6 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() {}\n 87\n-106 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys, const std::string& table);\n-107\n-109 template \n-_\b1_\b1_\b0 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, SOURCE table)\n-111 : _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs{key}, table) {}\n-112\n-_\b1_\b1_\b4 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::vector& row)\n-115 : _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs{key}, _\br_\bo_\bw) {}\n-116\n-118 explicit _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl& c);\n-119\n-123\n-125 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br& other, double tol = 1e-9) const override;\n-126\n-127 // print\n-128 void _\bp_\br_\bi_\bn_\bt(\n-129 const std::string& s = \"DecisionTreeFactor:\\n\",\n-130 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n-131\n-135\n-_\b1_\b3_\b8 double _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const {\n-139 return ADT::operator()(values);\n-140 }\n-141\n-_\b1_\b4_\b3 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n-144 return ADT::operator()(values);\n-145 }\n-146\n-148 double error(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n-149\n-_\b1_\b5_\b1 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br& f) const override {\n-152 return _\ba_\bp_\bp_\bl_\by(f, ADT::Ring::mul);\n-153 }\n-154\n-155 static double safe_div(const double& a, const double& b);\n-156\n-157 size_t cardinality(_\bK_\be_\by j) const { return cardinalities_.at(j); }\n-158\n-_\b1_\b6_\b0 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br& f) const {\n-161 return _\ba_\bp_\bp_\bl_\by(f, safe_div);\n-162 }\n-163\n-_\b1_\b6_\b5 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bt_\bo_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br() const override { return *this; }\n-166\n-_\b1_\b6_\b8 shared_ptr _\bs_\bu_\bm(size_t nrFrontals) const {\n-169 return combine(nrFrontals, ADT::Ring::add);\n-170 }\n-171\n-_\b1_\b7_\b3 shared_ptr _\bs_\bu_\bm(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) const {\n-174 return combine(keys, ADT::Ring::add);\n-175 }\n-176\n-_\b1_\b7_\b8 shared_ptr _\bm_\ba_\bx(size_t nrFrontals) const {\n-179 return combine(nrFrontals, ADT::Ring::max);\n-180 }\n-181\n-_\b1_\b8_\b3 shared_ptr _\bm_\ba_\bx(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) const {\n-184 return combine(keys, ADT::Ring::max);\n-185 }\n-186\n-190\n-196 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br& f, ADT::Binary op)\n-const;\n-197\n-204 shared_ptr combine(size_t nrFrontals, ADT::Binary op) const;\n-205\n-212 shared_ptr combine(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys, ADT::Binary op) const;\n-213\n-215 std::vector> enumerate() const;\n-216\n-218 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs discreteKeys() const;\n-219\n-238 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br prune(size_t maxNrAssignments) const;\n-239\n-243\n-245 void _\bd_\bo_\bt(std::ostream& os,\n-246 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-247 bool showZero = true) const;\n-248\n-250 void _\bd_\bo_\bt(const std::string& name,\n-251 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-252 bool showZero = true) const;\n-253\n-255 std::string _\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-256 bool showZero = true) const;\n-257\n-265 std::string _\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+89 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n+90\n+91 //** evaluate probability for given DiscreteValues */\n+92 double evaluate(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n+93\n+94 //** (Preferred) sugar for the above for given DiscreteValues */\n+95 double operator()(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const {\n+96 return evaluate(values);\n+97 }\n+98\n+102\n+104 std::string markdown(const KeyFormatter& keyFormatter =\n DefaultKeyFormatter,\n-266 const Names& names = {}) const override;\n-267\n-275 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,\n-276 const Names& names = {}) const override;\n-277\n-281\n-286 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const override;\n-287\n-289\n-290 private:\n-_\b2_\b9_\b2 friend class boost::serialization::access;\n-293 template \n-294 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-295 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-296 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bA_\bD_\bT);\n-297 ar& BOOST_SERIALIZATION_NVP(cardinalities_);\n-298 }\n-299 };\n-300\n-301// traits\n-302template <>\n-_\b3_\b0_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-304\n-305} // namespace gtsam\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n-specialized key for discrete variables\n-_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-Algebraic Decision Trees.\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n-std::pair< Key, size_t > DiscreteKey\n-Key type for discrete variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n+105 const DiscreteFactor::Names& names = {}) const;\n+106\n+108 std::string _\bh_\bt_\bm_\bl(const KeyFormatter& keyFormatter = DefaultKeyFormatter,\n+109 const DiscreteFactor::Names& names = {}) const;\n+110\n+112};\n+113\n+114} // namespace gtsam\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Bayes Tree is a tree of cliques of a Bayes Chain.\n+_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+Base class for conditional densities.\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n+Base class for cliques of a BayesTree.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\bo_\bw\n-const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)\n-Extracts a row view from a matrix that avoids a copy.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:222\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn\n-string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bt_\bm_\bl\n+string html(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n const DiscreteValues::Names &names)\n-Free version of markdown.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename\n-DecisionTree< L, Y >::Unary &op)\n-free versions of apply\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:413\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+Free version of html.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:134\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-An algebraic decision tree fixes the range of a DecisionTree to double.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n-A discrete probabilistic factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bu_\bm\n-shared_ptr sum(const Ordering &keys) const\n-Create new factor by summing all values with the same separator values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:173\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-double operator()(const DiscreteValues &values) const override\n-Evaluate probability density, sugar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:143\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-DecisionTreeFactor operator*(const DecisionTreeFactor &f) const override\n-multiply two factors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\ba_\bx\n-shared_ptr max(size_t nrFrontals) const\n-Create new factor by maximizing over all values with the same separator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:178\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\ba_\bx\n-shared_ptr max(const Ordering &keys) const\n-Create new factor by maximizing over all values with the same separator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:183\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\n-double evaluate(const DiscreteValues &values) const\n-Calculate probability for given values x, is just look up in\n-AlgebraicDecisionTree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-DiscreteFactor Base\n-Typedef to base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bu_\bm\n-shared_ptr sum(size_t nrFrontals) const\n-Create new factor by summing all values with the same separator values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:168\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n-DecisionTreeFactor(const DiscreteKey &key, SOURCE table)\n-Single-key specialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bo_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n-DecisionTreeFactor toDecisionTreeFactor() const override\n-Convert into a decisiontree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:165\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/\n-DecisionTreeFactor operator/(const DecisionTreeFactor &f) const\n-divide by factor f (safely)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n-DecisionTreeFactor(const DiscreteKey &key, const std::vector< double > &row)\n-Single-key specialization, with vector of doubles.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Discrete Conditional Density Derives from DecisionTreeFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Base class for discrete probabilistic factors The most general one is the\n-derived DecisionTreeFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys is a set of keys that can be assembled using the & operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n+A clique in a DiscreteBayesTree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesTree.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+void printSignature(const std::string &s=\"Clique: \", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print index signature only\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesTree.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+A Bayes tree representing a Discrete density.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesTree.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+DiscreteBayesTree()\n+Default constructor, creates an empty Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesTree.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n A map from keys to values.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-the error.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+This is the base class for BayesTree cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:50\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00230.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00230.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactorGraph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteConditional.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,58 +94,41 @@\n \n \n \n \n \n
\n \n-
DiscreteFactorGraph.h File Reference
\n+Variables
\n+
DiscreteConditional.cpp File Reference
\n \n
\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

struct  gtsam::EliminationTraits< DiscreteFactorGraph >
 
class  gtsam::DiscreteFactorGraph
 A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e. More...
 
struct  gtsam::traits< DiscreteFactorGraph >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n

\n-Functions

std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > gtsam::EliminateDiscrete (const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
 Main elimination function for DiscreteFactorGraph.
 
std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > gtsam::EliminateForMPE (const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
 Alternate elimination function for that creates non-normalized lookup tables.
 

\n+Variables

\n+template class GTSAM_EXPORT gtsam::Conditional< DecisionTreeFactor, DiscreteConditional >
 
\n

Detailed Description

\n
Date
Feb 14, 2011
\n
Author
Duy-Nguyen Ta
\n
\n Frank Dellaert
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,45 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DiscreteFactorGraph.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-\u00a0 A Discrete _\bF_\ba_\bc_\bt_\bo_\br Graph is a factor graph where all factors are\n- Discrete, i.e. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+DiscreteConditional.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::pair< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be (const\n-_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, DecisionTreeFactor:: _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n- shared_ptr >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &frontalKeys)\n-\u00a0 Main elimination function for\n- _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n-\u00a0\n-std::pair< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bF_\bo_\br_\bM_\bP_\bE (const\n-_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, DecisionTreeFactor:: _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n- shared_ptr >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &frontalKeys)\n-\u00a0 Alternate elimination function for that\n- creates non-normalized lookup tables.\n+V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n+template class GTSAM_EXPORT\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bon\bnd\bdi\bit\bti\bio\bon\bna\bal\bl<\b< D\bDe\bec\bci\bis\bsi\bio\bon\bnT\bTr\bre\bee\beF\bFa\bac\bct\bto\bor\br,\b,\n+ D\bDi\bis\bsc\bcr\bre\bet\bte\beC\bCo\bon\bnd\bdi\bit\bti\bio\bon\bna\bal\bl >\b>\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n Feb 14, 2011\n Author\n Duy-Nguyen Ta\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00233_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00233_source.html", "has_internal_linenos": true, "unified_diff": "@@ -25,12888 +25,2495 @@\n 00000180: 656e 743d 2277 6964 7468 3d64 6576 6963 ent=\"width=devic\n 00000190: 652d 7769 6474 682c 2069 6e69 7469 616c e-width, initial\n 000001a0: 2d73 6361 6c65 3d31 222f 3e0a 3c74 6974 -scale=1\"/>.gtsam: /build\n 000001c0: 2f72 6570 726f 6475 6369 626c 652d 7061 /reproducible-pa\n 000001d0: 7468 2f67 7473 616d 2d34 2e32 2e30 2b64 th/gtsam-4.2.0+d\n 000001e0: 6673 672f 6774 7361 6d2f 6469 7363 7265 fsg/gtsam/discre\n-000001f0: 7465 2f44 6563 6973 696f 6e54 7265 652d te/DecisionTree-\n-00000200: 696e 6c2e 6820 536f 7572 6365 2046 696c inl.h Source Fil\n-00000210: 653c 2f74 6974 6c65 3e0a 3c6c 696e 6b20 e...\n-000002c0: 3c2f 7363 7269 7074 3e0a 3c6c 696e 6b20 ...<\n-00000340: 7363 7269 7074 2074 7970 653d 2274 6578 script type=\"tex\n-00000350: 742f 6a61 7661 7363 7269 7074 2220 7372 t/javascript\" sr\n-00000360: 633d 226e 6176 7472 6565 6461 7461 2e6a c=\"navtreedata.j\n-00000370: 7322 3e3c 2f73 6372 6970 743e 0a3c 7363 s\">......MathJax.Hub.C\n-000004b0: 6f6e 6669 6728 7b0a 2020 6578 7465 6e73 onfig({. extens\n-000004c0: 696f 6e73 3a20 5b22 7465 7832 6a61 782e ions: [\"tex2jax.\n-000004d0: 6a73 225d 2c0a 2020 6a61 783a 205b 2269 js\"],. jax: [\"i\n-000004e0: 6e70 7574 2f54 6558 222c 226f 7574 7075 nput/TeX\",\"outpu\n-000004f0: 742f 4854 4d4c 2d43 5353 225d 2c0a 7d29 t/HTML-CSS\"],.})\n-00000500: 3b0a 3c2f 7363 7269 7074 3e0a 3c73 6372 ;..\n-00000590: 0a3c 6c69 6e6b 2068 7265 663d 2264 6f78 .....
.. . \n-00000680: 0a20 203c 7464 2069 643d 2270 726f 6a65 . . gtsam 4.2.0.
. \n-000006f0: 203c 6469 7620 6964 3d22 7072 6f6a 6563
gtsam. . . ..
..../* @li\n-000007a0: 6365 6e73 6520 6d61 676e 6574 3a3f 7874 cense magnet:?xt\n-000007b0: 3d75 726e 3a62 7469 683a 6433 6439 6139 =urn:btih:d3d9a9\n-000007c0: 6136 3539 3535 3231 6639 3636 3661 3565 a6595521f9666a5e\n-000007d0: 3934 6363 3833 3064 6162 3833 6236 3536 94cc830dab83b656\n-000007e0: 3939 2661 6d70 3b64 6e3d 6578 7061 742e 99&dn=expat.\n-000007f0: 7478 7420 4d49 5420 2a2f 0a76 6172 2073 txt MIT */.var s\n-00000800: 6561 7263 6842 6f78 203d 206e 6577 2053 earchBox = new S\n-00000810: 6561 7263 6842 6f78 2822 7365 6172 6368 earchBox(\"search\n-00000820: 426f 7822 2c20 2273 6561 7263 682f 222c Box\", \"search/\",\n-00000830: 272e 6874 6d6c 2729 3b0a 2f2a 2040 6c69 '.html');./* @li\n-00000840: 6365 6e73 652d 656e 6420 2a2f 0a3c 2f73 cense-end */...<\n-000009e0: 6469 7620 6964 3d22 6d61 696e 2d6e 6176 div id=\"main-nav\n-000009f0: 223e 3c2f 6469 763e 0a3c 7363 7269 7074 \">../* @lic\n-00000a20: 656e 7365 206d 6167 6e65 743a 3f78 743d ense magnet:?xt=\n-00000a30: 7572 6e3a 6274 6968 3a64 3364 3961 3961 urn:btih:d3d9a9a\n-00000a40: 3635 3935 3532 3166 3936 3636 6135 6539 6595521f9666a5e9\n-00000a50: 3463 6338 3330 6461 6238 3362 3635 3639 4cc830dab83b6569\n-00000a60: 3926 616d 703b 646e 3d65 7870 6174 2e74 9&dn=expat.t\n-00000a70: 7874 204d 4954 202a 2f0a 2428 646f 6375 xt MIT */.$(docu\n-00000a80: 6d65 6e74 292e 7265 6164 7928 6675 6e63 ment).ready(func\n-00000a90: 7469 6f6e 2829 207b 2069 6e69 745f 636f tion() { init_co\n-00000aa0: 6465 666f 6c64 2830 293b 207d 293b 0a2f defold(0); });./\n-00000ab0: 2a20 406c 6963 656e 7365 2d65 6e64 202a * @license-end *\n-00000ac0: 2f0a 3c2f 7363 7269 7074 3e0a 3c2f 6469 /...<\n-00000ae0: 6469 7620 6964 3d22 7369 6465 2d6e 6176 div id=\"side-nav\n-00000af0: 2220 636c 6173 733d 2275 692d 7265 7369 \" class=\"ui-resi\n-00000b00: 7a61 626c 6520 7369 6465 2d6e 6176 2d72 zable side-nav-r\n-00000b10: 6573 697a 6162 6c65 223e 0a20 203c 6469 esizable\">. \n-00000b30: 0a20 2020 203c 6469 7620 6964 3d22 6e61 .
.
. \n-00000b80: 2020 203c 2f64 6976 3e0a 2020 3c2f 6469
. .
. .
../* @\n-00000c20: 6c69 6365 6e73 6520 6d61 676e 6574 3a3f license magnet:?\n-00000c30: 7874 3d75 726e 3a62 7469 683a 6433 6439 xt=urn:btih:d3d9\n-00000c40: 6139 6136 3539 3535 3231 6639 3636 3661 a9a6595521f9666a\n-00000c50: 3565 3934 6363 3833 3064 6162 3833 6236 5e94cc830dab83b6\n-00000c60: 3536 3939 2661 6d70 3b64 6e3d 6578 7061 5699&dn=expa\n-00000c70: 742e 7478 7420 4d49 5420 2a2f 0a24 2864 t.txt MIT */.$(d\n-00000c80: 6f63 756d 656e 7429 2e72 6561 6479 2866 ocument).ready(f\n-00000c90: 756e 6374 696f 6e28 297b 696e 6974 4e61 unction(){initNa\n-00000ca0: 7654 7265 6528 2761 3030 3233 335f 736f vTree('a00233_so\n-00000cb0: 7572 6365 2e68 746d 6c27 2c27 2729 3b20 urce.html',''); \n-00000cc0: 696e 6974 5265 7369 7a61 626c 6528 293b initResizable();\n-00000cd0: 207d 293b 0a2f 2a20 406c 6963 656e 7365 });./* @license\n-00000ce0: 2d65 6e64 202a 2f0a 3c2f 7363 7269 7074 -end */..
..
.<\n-00000e00: 2f64 6976 3e0a 0a3c 212d 2d20 6966 7261 /div>...
.
.\n-00000e80: 3c64 6976 2063 6c61 7373 3d22 5352 5061
.
.
.
Loading...\n-00000ef0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
Sear\n-00000f20: 6368 696e 672e 2e2e 3c2f 6469 763e 0a3c ching...
.<\n-00000f30: 6469 7620 636c 6173 733d 2253 5253 7461 div class=\"SRSta\n-00000f40: 7475 7322 2069 643d 224e 6f4d 6174 6368 tus\" id=\"NoMatch\n-00000f50: 6573 223e 4e6f 204d 6174 6368 6573 3c2f es\">No Matches.
..
.
\n-00000f80: 0a0a 3c64 6976 2063 6c61 7373 3d22 6865 ..
.
DecisionTre\n-00000fd0: 652d 696e 6c2e 683c 2f64 6976 3e3c 2f64 e-inl.h
.
.
.<\n-00001010: 6469 7620 636c 6173 733d 2266 7261 676d div class=\"fragm\n-00001020: 656e 7422 3e3c 6469 7620 636c 6173 733d ent\">
\n-00001070: 2031 3c2f 7370 616e 3e3c 7370 616e 2063 1/\n-00001090: 2a20 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d * --------------\n-000010a0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-000010b0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-000010c0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-000010d0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 3c2f --------------
.<\n-00001120: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00001130: 6e6f 223e 2020 2020 323c 2f73 7061 6e3e no\"> 2\n-00001140: 3c73 7061 6e20 636c 6173 733d 2263 6f6d .
\n-000011b0: 2033 3c2f 7370 616e 3e3c 7370 616e 2063 3 \n-000011d0: 2a20 4754 5341 4d20 436f 7079 7269 6768 * GTSAM Copyrigh\n-000011e0: 7420 3230 3130 2c20 4765 6f72 6769 6120 t 2010, Georgia \n-000011f0: 5465 6368 2052 6573 6561 7263 6820 436f Tech Research Co\n-00001200: 7270 6f72 6174 696f 6e2c 3c2f 7370 616e rporation,
.
\n-00001260: 2020 2020 343c 2f73 7061 6e3e 3c73 7061 4 * Atlanta, Ge\n-00001290: 6f72 6769 6120 3330 3333 322d 3034 3135 orgia 30332-0415\n-000012a0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-000012c0: 3c61 2069 643d 226c 3030 3030 3522 206e 5 * All R\n-00001320: 6967 6874 7320 5265 7365 7276 6564 3c2f ights Reserved
.<\n-00001370: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00001380: 6e6f 223e 2020 2020 363c 2f73 7061 6e3e no\"> 6\n-00001390: 3c73 7061 6e20 636c 6173 733d 2263 6f6d * Authors\n-000013b0: 3a20 4672 616e 6b20 4465 6c6c 6165 7274 : Frank Dellaert\n-000013c0: 2c20 6574 2061 6c2e 2028 7365 6520 5448 , et al. (see TH\n-000013d0: 414e 4b53 2066 6f72 2074 6865 2066 756c ANKS for the ful\n-000013e0: 6c20 6175 7468 6f72 206c 6973 7429 3c2f l author list)
.<\n-00001430: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00001440: 6e6f 223e 2020 2020 373c 2f73 7061 6e3e no\"> 7\n-00001450: 3c73 7061 6e20 636c 6173 733d 2263 6f6d .
\n-000014c0: 2038 3c2f 7370 616e 3e3c 7370 616e 2063 8 \n-000014e0: 2a20 5365 6520 4c49 4345 4e53 4520 666f * See LICENSE fo\n-000014f0: 7220 7468 6520 6c69 6365 6e73 6520 696e r the license in\n-00001500: 666f 726d 6174 696f 6e3c 2f73 7061 6e3e formation\n-00001510: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00001560: 2020 2039 3c2f 7370 616e 3e3c 7370 616e 9
.\n-00001590: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-000016a0: 2020 2031 313c 2f73 7061 6e3e 203c 2f64 11 .
2\n-00001700: 303c 2f73 7061 6e3e 3c73 7061 6e20 636c 0#pragma once<\n-00001730: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-00001750: 6120 6964 3d22 6c30 3030 3231 2220 6e61 a id=\"l00021\" na\n-00001760: 6d65 3d22 6c30 3030 3231 223e 3c2f 613e me=\"l00021\">\n-00001770: 3c73 7061 6e20 636c 6173 733d 226c 696e 21
..
23 \n-000018c0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00001910: 2020 3234 3c2f 7370 616e 3e3c 7370 616e 24#include &\n-00001940: 6c74 3b61 6c67 6f72 6974 686d 2667 743b lt;algorithm>\n-00001950: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-00001970: 3c61 2069 643d 226c 3030 3032 3522 206e 25#in\n-000019d0: 636c 7564 6520 266c 743b 626f 6f73 742f clude <boost/\n-000019e0: 666f 726d 6174 2e68 7070 2667 743b 3c2f format.hpp>
.<\n-00001a30: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00001a40: 6e6f 223e 2020 2032 363c 2f73 7061 6e3e no\"> 26\n-00001a50: 3c73 7061 6e20 636c 6173 733d 2270 7265 #incl\n-00001a70: 7564 6520 266c 743b 626f 6f73 742f 6d61 ude <boost/ma\n-00001a80: 6b65 5f73 6861 7265 642e 6870 7026 6774 ke_shared.hpp>\n-00001a90: 3b3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c ;
.<\n-00001aa0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00001ab0: 3e3c 6120 6964 3d22 6c30 3030 3237 2220 > 27#i\n-00001b10: 6e63 6c75 6465 2026 6c74 3b62 6f6f 7374 nclude <boost\n-00001b20: 2f6f 7074 696f 6e61 6c2e 6870 7026 6774 /optional.hpp>\n-00001b30: 3b3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c ;
.<\n-00001b40: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00001b50: 3e3c 6120 6964 3d22 6c30 3030 3238 2220 > 28
.
29<\n-00001bf0: 7370 616e 2063 6c61 7373 3d22 7072 6570 span class=\"prep\n-00001c00: 726f 6365 7373 6f72 223e 2369 6e63 6c75 rocessor\">#inclu\n-00001c10: 6465 2026 6c74 3b63 6d61 7468 2667 743b de <cmath>\n-00001c20: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-00001c40: 3c61 2069 643d 226c 3030 3033 3022 206e 30#in\n-00001ca0: 636c 7564 6520 266c 743b 6673 7472 6561 clude <fstrea\n-00001cb0: 6d26 6774 3b3c 2f73 7061 6e3e 3c2f 6469 m>.
31\n-00001d10: 3c2f 7370 616e 3e3c 7370 616e 2063 6c61 #include <l\n-00001d40: 6973 7426 6774 3b3c 2f73 7061 6e3e 3c2f ist>.
\n-00001da0: 3332 3c2f 7370 616e 3e3c 7370 616e 2063 32#include <\n-00001dd0: 3b6d 6170 2667 743b 3c2f 7370 616e 3e3c ;map><\n-00001de0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00001e30: 2033 333c 2f73 7061 6e3e 3c73 7061 6e20 33#include &l\n-00001e60: 743b 7365 7426 6774 3b3c 2f73 7061 6e3e t;set>\n-00001e70: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00001ec0: 2020 3334 3c2f 7370 616e 3e3c 7370 616e 34#include &\n-00001ef0: 6c74 3b73 7374 7265 616d 2667 743b 3c2f lt;sstream>
.<\n-00001f40: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00001f50: 6e6f 223e 2020 2033 353c 2f73 7061 6e3e no\"> 35\n-00001f60: 3c73 7061 6e20 636c 6173 733d 2270 7265 #incl\n-00001f80: 7564 6520 266c 743b 7374 7269 6e67 2667 ude <string&g\n-00001f90: 743b 3c2f 7370 616e 3e3c 2f64 6976 3e0a t;
.\n-00001fa0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-00001fd0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 36#\n-00002010: 696e 636c 7564 6520 266c 743b 7665 6374 include <vect\n-00002020: 6f72 2667 743b 3c2f 7370 616e 3e3c 2f64 or>.
3\n-00002080: 373c 2f73 7061 6e3e 203c 2f64 6976 3e0a 7
.\n-00002090: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00002160: 6120 6964 3d22 6c30 3030 3339 2220 6e61 a id=\"l00039\" na\n-00002170: 6d65 3d22 6c30 3030 3339 223e 3c2f 613e me=\"l00039\">\n-00002180: 3c73 7061 6e20 636c 6173 733d 226c 696e 39
.
40 /**********\n-00002220: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002230: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002240: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002250: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002260: 2a2a 2f3c 2f73 7061 6e3e 3c2f 6469 763e **/
\n-00002270: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-000022a0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 41 // \n-000022e0: 4e6f 6465 3c2f 7370 616e 3e3c 2f64 6976 Node.
42<\n-00002340: 2f73 7061 6e3e 3c73 7061 6e20 636c 6173 /span> /*\n-00002360: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002370: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002380: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002390: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000023a0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2f 3c2f 7370 ***********/
.
43#ifdef \n-00002430: 4454 5f44 4542 5547 5f4d 454d 4f52 593c DT_DEBUG_MEMORY<\n-00002440: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-00002460: 6120 6964 3d22 6c30 3030 3434 2220 6e61 a id=\"l00044\" na\n-00002470: 6d65 3d22 6c30 3030 3434 223e 3c2f 613e me=\"l00044\">\n-00002480: 3c73 7061 6e20 636c 6173 733d 226c 696e 44 templat\n-000024c0: 653c 2f73 7061 6e3e 266c 743b 3c73 7061 e<typename L, typen\n-00002510: 616d 653c 2f73 7061 6e3e 2059 2667 743b ame Y>\n-00002520: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00002570: 2020 3435 3c2f 7370 616e 3e20 203c 7370 45 int DecisionTree&l\n-000025b0: 743b 4c2c 2059 2667 743b 3a3a 4e6f 6465 t;L, Y>::Node\n-000025c0: 3a3a 6e72 4e6f 6465 7320 3d20 303b 3c2f ::nrNodes = 0;.
\n-00002620: 3436 3c2f 7370 616e 3e3c 7370 616e 2063 46#endif
.
\n-000026a0: 2020 2034 373c 2f73 7061 6e3e 203c 2f64 47 .
4\n-00002700: 383c 2f73 7061 6e3e 3c73 7061 6e20 636c 8 \n-00002720: 2f2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a /***************\n-00002730: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002740: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002750: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002760: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2f 3c2f *************/
.<\n-000027b0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000027c0: 6e6f 223e 2020 2034 393c 2f73 7061 6e3e no\"> 49\n-000027d0: 2020 3c73 7061 6e20 636c 6173 733d 2263 // Leaf<\n-000027f0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-00002810: 6120 6964 3d22 6c30 3030 3530 2220 6e61 a id=\"l00050\" na\n-00002820: 6d65 3d22 6c30 3030 3530 223e 3c2f 613e me=\"l00050\">\n-00002830: 3c73 7061 6e20 636c 6173 733d 226c 696e 50 /******\n-00002870: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002880: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00002890: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000028a0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000028b0: 2a2a 2a2a 2a2a 2f3c 2f73 7061 6e3e 3c2f ******/.
\n-00002910: 3531 3c2f 7370 616e 3e20 203c 7370 616e 51 template\n-00002940: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n-00002960: 616d 653c 2f73 7061 6e3e 204c 2c20 3c73 ame L, typename Y>
.\n-000029a0: 3c64 6976 2063 6c61 7373 3d22 666f 6c64
.
<\n-00002a30: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-00002a40: 7265 663d 2261 3032 3737 362e 6874 6d6c ref=\"a02776.html\n-00002a50: 223e 2020 2035 323c 2f61 3e3c 2f73 7061 \"> 52 struct\n-00002a80: 203c 2f73 7061 6e3e 3c61 2063 6c61 7373 DecisionTree\n-00002ac0: 3c2f 613e 266c 743b 4c2c 2059 2667 743b <L, Y>\n-00002ad0: 3a3a 3c61 2063 6c61 7373 3d22 636f 6465 ::L\n-00002b00: 6561 663c 2f61 3e20 3a20 3c73 7061 6e20 eaf : \n-00002b20: 7075 626c 6963 3c2f 7370 616e 3e20 3c61 public Decisi\n-00002b60: 6f6e 5472 6565 3c2f 613e 266c 743b 4c2c onTree<L,\n-00002b70: 2059 2667 743b 3a3a 4e6f 6465 207b 3c2f Y>::Node {..\n-00002ca0: 3c61 2069 643d 226c 3030 3035 3522 206e 55
.
59\n-00002d80: 3c2f 7370 616e 3e20 2020 203c 7370 616e size_t nrAssignment\n-00002e10: 735f 3c2f 613e 3b3c 2f64 6976 3e0a 3c64 s_;
.\n-00002e30: 3c61 2069 643d 226c 3030 3036 3022 206e 60
.
62\n-00002f10: 3c2f 7370 616e 3e20 2020 203c 6120 636c Leaf\n-00002f70: 3c2f 613e 2829 207b 7d3c 2f64 6976 3e0a () {}
.\n-00002f80: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 ..
\n-000030b0: 2020 3635 3c2f 613e 3c2f 7370 616e 3e20 65 \n-000030c0: 2020 203c 6120 636c 6173 733d 2263 6f64 Leaf(const \n-00003140: 5926 616d 703b 2063 6f6e 7374 616e 742c Y& constant,\n-00003150: 203c 7370 616e 2063 6c61 7373 3d22 6b65 size_\n-00003170: 743c 2f73 7061 6e3e 206e 7241 7373 6967 t nrAssig\n-00003180: 6e6d 656e 7473 203d 2031 293c 2f64 6976 nments = 1).
66<\n-000031e0: 2f73 7061 6e3e 2020 2020 2020 2020 3a20 /span> : \n-000031f0: 636f 6e73 7461 6e74 5f28 636f 6e73 7461 constant_(consta\n-00003200: 6e74 292c 206e 7241 7373 6967 6e6d 656e nt), nrAssignmen\n-00003210: 7473 5f28 6e72 4173 7369 676e 6d65 6e74 ts_(nrAssignment\n-00003220: 7329 207b 7d3c 2f64 6976 3e0a 3c2f 6469 s) {}
..
67\n-00003280: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-00003290: 6469 7620 636c 6173 733d 2266 6f6c 646f div class=\"foldo\n-000032a0: 7065 6e22 2069 643d 2266 6f6c 646f 7065 pen\" id=\"foldope\n-000032b0: 6e30 3030 3639 2220 6461 7461 2d73 7461 n00069\" data-sta\n-000032c0: 7274 3d22 7b22 2064 6174 612d 656e 643d rt=\"{\" data-end=\n-000032d0: 227d 223e 0a3c 6469 7620 636c 6173 733d \"}\">.
69 cons\n-00003390: 743c 2f73 7061 6e3e 2059 2661 6d70 3b20 t Y& \n-000033a0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 constant()<\n-00003400: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00003410: 6f72 6422 3e20 636f 6e73 7420 3c2f 7370 ord\"> const {
.
70 \n-00003480: 2020 2020 203c 7370 616e 2063 6c61 7373 r\n-000034a0: 6574 7572 6e3c 2f73 7061 6e3e 2063 6f6e eturn con\n-000034b0: 7374 616e 745f 3b3c 2f64 6976 3e0a 3c64 stant_;
.\n-000034d0: 3c61 2069 643d 226c 3030 3037 3122 206e 71 }
..
\n-00003570: 3732 3c2f 7370 616e 3e20 3c2f 6469 763e 72
\n-00003580: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-000035b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n-00003610: 2037 343c 2f61 3e3c 2f73 7061 6e3e 2020 74 \n-00003620: 2020 3c73 7061 6e20 636c 6173 733d 226b size\n-00003640: 5f74 3c2f 7370 616e 3e20 3c61 2063 6c61 _t nrAss\n-000036a0: 6967 6e6d 656e 7473 3c2f 613e 2829 3c73 ignments() const { re\n-000036f0: 7475 726e 3c2f 7370 616e 3e20 6e72 4173 turn nrAs\n-00003700: 7369 676e 6d65 6e74 735f 3b20 7d3c 2f64 signments_; }.
7\n-00003760: 353c 2f73 7061 6e3e 203c 2f64 6976 3e0a 5
.\n-00003770: 3c64 6976 2063 6c61 7373 3d22 666f 6c64
.
77 bool sa\n-000038d0: 6d65 4c65 6166 3c2f 613e 283c 7370 616e meLeaf(const Leaf<\n-00003930: 2f61 3e26 616d 703b 2071 293c 7370 616e /a>& q) const override\n-00003960: 203c 2f73 7061 6e3e 7b3c 2f64 6976 3e0a {
.\n-00003970: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00003ab0: 2020 3739 3c2f 7370 616e 3e20 2020 207d 79 }\n-00003ac0: 3c2f 6469 763e 0a3c 2f64 6976 3e0a 3c64
.
.\n-00003ae0: 3c61 2069 643d 226c 3030 3038 3022 206e 80
.
.\n-00003b70: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-00003ba0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> \n-00003c00: 3832 3c2f 613e 3c2f 7370 616e 3e20 2020 82 \n-00003c10: 203c 7370 616e 2063 6c61 7373 3d22 6b65 bool<\n-00003c30: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> sameLeaf\n-00003c90: 3c2f 613e 283c 7370 616e 2063 6c61 7373 (const\n-00003cb0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 Node&am\n-00003cf0: 703b 2071 293c 7370 616e 2063 6c61 7373 p; q) cons\n-00003d10: 7420 6f76 6572 7269 6465 203c 2f73 7061 t override {
.
83 \n-00003d80: 2020 2020 3c73 7061 6e20 636c 6173 733d re\n-00003da0: 7475 726e 3c2f 7370 616e 3e20 2871 2e69 turn (q.i\n-00003db0: 734c 6561 6628 2920 2661 6d70 3b26 616d sLeaf() &&am\n-00003dc0: 703b 2071 2e73 616d 654c 6561 6628 2a3c p; q.sameLeaf(*<\n-00003dd0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00003de0: 6f72 6422 3e74 6869 733c 2f73 7061 6e3e ord\">this\n-00003df0: 2929 3b3c 2f64 6976 3e0a 3c64 6976 2063 ));
.
84 \n-00003e50: 2020 7d3c 2f64 6976 3e0a 3c2f 6469 763e }
.
\n-00003e60: 0a3c 6469 7620 636c 6173 733d 226c 696e ...
\n-00003f90: 2020 2038 373c 2f61 3e3c 2f73 7061 6e3e 87\n-00003fa0: 2020 2020 3c73 7061 6e20 636c 6173 733d bo\n-00003fc0: 6f6c 3c2f 7370 616e 3e20 3c61 2063 6c61 ol equal\n-00004020: 733c 2f61 3e28 3c73 7061 6e20 636c 6173 s(cons\n-00004040: 743c 2f73 7061 6e3e 203c 6120 636c 6173 t Node&a\n-00004080: 6d70 3b20 712c 203c 7370 616e 2063 6c61 mp; q, con\n-000040a0: 7374 3c2f 7370 616e 3e20 436f 6d70 6172 st Compar\n-000040b0: 6546 756e 6326 616d 703b 2063 6f6d 7061 eFunc& compa\n-000040c0: 7265 293c 7370 616e 2063 6c61 7373 3d22 re) const \n-000040e0: 6f76 6572 7269 6465 203c 2f73 7061 6e3e override \n-000040f0: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n-00004140: 2020 2038 383c 2f73 7061 6e3e 2020 2020 88 \n-00004150: 2020 3c73 7061 6e20 636c 6173 733d 226b const Leaf* othe\n-000041b0: 7220 3d20 3c73 7061 6e20 636c 6173 733d r = dynami\n-000041d0: 635f 6361 7374 266c 743b 3c2f 7370 616e c_cast<const Leaf*\n-00004250: 2667 743b 3c2f 7370 616e 3e28 2661 6d70 >(&\n-00004260: 3b71 293b 3c2f 6469 763e 0a3c 6469 7620 ;q);
.
89 \n-000042c0: 2020 2020 203c 7370 616e 2063 6c61 7373 i\n-000042e0: 663c 2f73 7061 6e3e 2028 216f 7468 6572 f (!other\n-000042f0: 2920 3c73 7061 6e20 636c 6173 733d 226b ) retu\n-00004310: 726e 3c2f 7370 616e 3e20 3c73 7061 6e20 rn \n-00004330: 6661 6c73 653c 2f73 7061 6e3e 3b3c 2f64 false;.
9\n-00004390: 303c 2f73 7061 6e3e 2020 2020 2020 3c73 0 return compare(th\n-000043d0: 6973 2d26 6774 3b63 6f6e 7374 616e 745f is->constant_\n-000043e0: 2c20 6f74 6865 722d 2667 743b 3c61 2063 , other->con\n-00004440: 7374 616e 745f 3c2f 613e 293b 3c2f 6469 stant_);.
91\n-000044a0: 3c2f 7370 616e 3e20 2020 207d 3c2f 6469 }.
.
92 <\n-00004510: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
.<\n-00004590: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000045a0: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 94 void print(const\n-000046a0: 2073 7464 3a3a 7374 7269 6e67 2661 6d70 std::string&\n-000046b0: 3b20 732c 203c 7370 616e 2063 6c61 7373 ; s, const\n-000046d0: 3c2f 7370 616e 3e20 4c61 6265 6c46 6f72 LabelFor\n-000046e0: 6d61 7474 6572 2661 6d70 3b20 6c61 6265 matter& labe\n-000046f0: 6c46 6f72 6d61 7474 6572 2c3c 2f64 6976 lFormatter,.
95<\n-00004750: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-00004760: 2020 2020 203c 7370 616e 2063 6c61 7373 const\n-00004780: 3c2f 7370 616e 3e20 5661 6c75 6546 6f72 ValueFor\n-00004790: 6d61 7474 6572 2661 6d70 3b20 7661 6c75 matter& valu\n-000047a0: 6546 6f72 6d61 7474 6572 293c 7370 616e eFormatter) const override\n-000047d0: 203c 2f73 7061 6e3e 7b3c 2f64 6976 3e0a {
.\n-000047e0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
97 \n-00004920: 2020 207d 3c2f 6469 763e 0a3c 2f64 6976 }
..
98<\n-00004980: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
...
\n-00004ba0: 2031 3031 3c2f 7370 616e 3e20 2020 2020 101 \n-00004bb0: 2020 2020 2020 2020 3c73 7061 6e20 636c co\n-00004bd0: 6e73 743c 2f73 7061 6e3e 2056 616c 7565 nst Value\n-00004be0: 466f 726d 6174 7465 7226 616d 703b 2076 Formatter& v\n-00004bf0: 616c 7565 466f 726d 6174 7465 722c 3c2f alueFormatter,.
1\n-00004c50: 3032 3c2f 7370 616e 3e20 2020 2020 2020 02 \n-00004c60: 2020 2020 2020 3c73 7061 6e20 636c 6173 \n-00004c80: 626f 6f6c 3c2f 7370 616e 3e20 7368 6f77 bool show\n-00004c90: 5a65 726f 293c 7370 616e 2063 6c61 7373 Zero) cons\n-00004cb0: 7420 6f76 6572 7269 6465 203c 2f73 7061 t override {
.
103 \n-00004d20: 2020 2020 7374 643a 3a73 7472 696e 6720 std::string \n-00004d30: 7661 6c75 6520 3d20 7661 6c75 6546 6f72 value = valueFor\n-00004d40: 6d61 7474 6572 2863 6f6e 7374 616e 745f matter(constant_\n-00004d50: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
104 \n-00004db0: 2020 203c 7370 616e 2063 6c61 7373 3d22 if<\n-00004dd0: 2f73 7061 6e3e 2028 7368 6f77 5a65 726f /span> (showZero\n-00004de0: 207c 7c20 7661 6c75 652e 636f 6d70 6172 || value.compar\n-00004df0: 6528 3c73 7061 6e20 636c 6173 733d 2273 e(&q\n-00004e10: 756f 743b 3026 7175 6f74 3b3c 2f73 7061 uot;0"))
.
105 \n-00004e80: 2020 2020 2020 206f 7320 266c 743b 266c os <&l\n-00004e90: 743b 203c 7370 616e 2063 6c61 7373 3d22 t; &\n-00004eb0: 7175 6f74 3b5c 2671 756f 743b 2671 756f quot;\\"&quo\n-00004ec0: 743b 3c2f 7370 616e 3e20 266c 743b 266c t; <&l\n-00004ed0: 743b 2074 6869 732d 2667 743b 6964 2829 t; this->id()\n-00004ee0: 2026 6c74 3b26 6c74 3b20 3c73 7061 6e20 << "\\&qu\n-00004f10: 6f74 3b20 5b6c 6162 656c 3d5c 2671 756f ot; [label=\\&quo\n-00004f20: 743b 2671 756f 743b 3c2f 7370 616e 3e20 t;" \n-00004f30: 266c 743b 266c 743b 2076 616c 7565 3c2f << value.
1\n-00004f90: 3036 3c2f 7370 616e 3e20 2020 2020 2020 06 \n-00004fa0: 2020 2020 266c 743b 266c 743b 203c 7370 << "\\\n-00004fd0: 2671 756f 743b 2c20 7368 6170 653d 626f ", shape=bo\n-00004fe0: 782c 2072 616e 6b3d 7369 6e6b 2c20 6865 x, rank=sink, he\n-00004ff0: 6967 6874 3d30 2e33 352c 2066 6978 6564 ight=0.35, fixed\n-00005000: 7369 7a65 3d74 7275 655d 5c6e 2671 756f size=true]\\n&quo\n-00005010: 743b 3c2f 7370 616e 3e3b 3c2f 6469 763e t;;
\n-00005020: 0a3c 6469 7620 636c 6173 733d 226c 696e .\n-00005080: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
\n-000050d0: 2020 3130 383c 2f73 7061 6e3e 203c 2f64 108 .
.
110\n-000051c0: 3c2f 7370 616e 3e20 2020 203c 7370 616e const Y&\n-000051f0: 616d 703b 203c 6120 636c 6173 733d 2263 amp; operator()\n-00005250: 3c2f 613e 283c 7370 616e 2063 6c61 7373 (const\n-00005270: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 Assignment&l\n-000052b0: 743b 4c26 6774 3b3c 2f61 3e26 616d 703b t;L>&\n-000052c0: 2078 293c 7370 616e 2063 6c61 7373 3d22 x) const \n-000052e0: 6f76 6572 7269 6465 203c 2f73 7061 6e3e override \n-000052f0: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n-00005340: 2020 3131 313c 2f73 7061 6e3e 2020 2020 111 \n-00005350: 2020 3c73 7061 6e20 636c 6173 733d 226b retu\n-00005370: 726e 3c2f 7370 616e 3e20 636f 6e73 7461 rn consta\n-00005380: 6e74 5f3b 3c2f 6469 763e 0a3c 6469 7620 nt_;
.
112 \n-000053e0: 2020 207d 3c2f 6469 763e 0a3c 2f64 6976 }
..
113<\n-00005440: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
..
115 NodePtr\n-00005590: 203c 6120 636c 6173 733d 2263 6f64 6520 apply(const <\n-00005610: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00005620: 5f74 7970 6564 6566 2220 6872 6566 3d22 _typedef\" href=\"\n-00005630: 6130 3237 3936 2e68 746d 6c23 6136 3065 a02796.html#a60e\n-00005640: 6436 3136 3235 3934 3564 3039 3636 3130 d61625945d096610\n-00005650: 3361 3539 6439 6334 3763 3861 3622 3e55 3a59d9c47c8a6\">U\n-00005660: 6e61 7279 3c2f 613e 2661 6d70 3b20 6f70 nary& op\n-00005670: 293c 7370 616e 2063 6c61 7373 3d22 6b65 ) const ov\n-00005690: 6572 7269 6465 203c 2f73 7061 6e3e 7b3c erride {<\n-000056a0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-000056f0: 3131 363c 2f73 7061 6e3e 2020 2020 2020 116 \n-00005700: 3c61 2063 6c61 7373 3d22 636f 6465 2068 \n-00005750: 4e6f 6465 5074 723c 2f61 3e20 6628 3c73 NodePtr f(new <\n-00005780: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00005790: 5f73 7472 7563 7422 2068 7265 663d 2261 _struct\" href=\"a\n-000057a0: 3032 3737 362e 6874 6d6c 223e 4c65 6166 02776.html\">Leaf\n-000057b0: 3c2f 613e 286f 7028 636f 6e73 7461 6e74 (op(constant\n-000057c0: 5f29 2c20 6e72 4173 7369 676e 6d65 6e74 _), nrAssignment\n-000057d0: 735f 2929 3b3c 2f64 6976 3e0a 3c64 6976 s_));
.<\n-00005810: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00005820: 6e6f 223e 2020 3131 373c 2f73 7061 6e3e no\"> 117\n-00005830: 2020 2020 2020 3c73 7061 6e20 636c 6173 \n-00005850: 7265 7475 726e 3c2f 7370 616e 3e20 663b return f;\n-00005860: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-000058b0: 2031 3138 3c2f 7370 616e 3e20 2020 207d 118 }\n-000058c0: 3c2f 6469 763e 0a3c 2f64 6976 3e0a 3c64
.
.\n-000058e0: 3c61 2069 643d 226c 3030 3131 3922 206e 119
.
.\n-00005970: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-000059a0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 1\n-00005a00: 3231 3c2f 613e 3c2f 7370 616e 3e20 2020 21 \n-00005a10: 203c 6120 636c 6173 733d 2263 6f64 6520 NodePtr ap\n-00005ac0: 706c 793c 2f61 3e28 3c73 7061 6e20 636c ply(co\n-00005ae0: 6e73 743c 2f73 7061 6e3e 2055 6e61 7279 nst Unary\n-00005af0: 4173 7369 676e 6d65 6e74 2661 6d70 3b20 Assignment& \n-00005b00: 6f70 2c3c 2f64 6976 3e0a 3c64 6976 2063 op,
.
122 \n-00005b60: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00005b70: 3c73 7061 6e20 636c 6173 733d 226b 6579 const A\n-00005bc0: 7373 6967 6e6d 656e 7426 6c74 3b4c 2667 ssignment<L&g\n-00005bd0: 743b 3c2f 613e 2661 6d70 3b20 6173 7369 t;& assi\n-00005be0: 676e 6d65 6e74 293c 7370 616e 2063 6c61 gnment) co\n-00005c00: 6e73 7420 6f76 6572 7269 6465 203c 2f73 nst override {
.<\n-00005c50: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00005c60: 6e6f 223e 2020 3132 333c 2f73 7061 6e3e no\"> 123\n-00005c70: 2020 2020 2020 3c61 2063 6c61 7373 3d22 NodePtr f(new Leaf(op(as\n-00005d30: 7369 676e 6d65 6e74 2c20 636f 6e73 7461 signment, consta\n-00005d40: 6e74 5f29 2c20 6e72 4173 7369 676e 6d65 nt_), nrAssignme\n-00005d50: 6e74 735f 2929 3b3c 2f64 6976 3e0a 3c64 nts_));
.\n-00005d70: 3c61 2069 643d 226c 3030 3132 3422 206e 124 return \n-00005de0: 663b 3c2f 6469 763e 0a3c 6469 7620 636c f;
.
125 \n-00005e40: 207d 3c2f 6469 763e 0a3c 2f64 6976 3e0a }
.
.\n-00005e50: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00005ee0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00005ef0: 6e6f 223e 2020 3132 373c 2f73 7061 6e3e no\"> 127\n-00005f00: 2020 2020 3c73 7061 6e20 636c 6173 733d // App\n-00005f20: 6c79 2062 696e 6172 7920 6f70 6572 6174 ly binary operat\n-00005f30: 6f72 2026 7175 6f74 3b68 203d 2066 206f or "h = f o\n-00005f40: 7020 6726 7175 6f74 3b20 6f6e 204c 6561 p g" on Lea\n-00005f50: 6620 6e6f 6465 3c2f 7370 616e 3e3c 2f64 f node.
12\n-00005fb0: 383c 2f73 7061 6e3e 2020 2020 3c73 7061 8 // Note op is \n-00005fe0: 6e6f 7420 6173 7375 6d65 6420 636f 6d6d not assumed comm\n-00005ff0: 7574 6174 6976 6520 736f 2077 6520 6e65 utative so we ne\n-00006000: 6564 2074 6f20 6b65 6570 2074 7261 636b ed to keep track\n-00006010: 206f 6620 6f72 6465 723c 2f73 7061 6e3e of order\n-00006020: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00006070: 2031 3239 3c2f 7370 616e 3e20 2020 203c 129 <\n-00006080: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00006090: 656e 7422 3e2f 2f20 5369 6d70 6c79 2063 ent\">// Simply c\n-000060a0: 616c 6c73 2061 7070 6c79 206f 6e20 6172 alls apply on ar\n-000060b0: 6775 6d65 6e74 2074 6f20 6361 6c6c 2063 gument to call c\n-000060c0: 6f72 7265 6374 2076 6972 7475 616c 206d orrect virtual m\n-000060d0: 6574 686f 643a 3c2f 7370 616e 3e3c 2f64 ethod:.
13\n-00006130: 303c 2f73 7061 6e3e 2020 2020 3c73 7061 0 // fL.apply_f_\n-00006160: 6f70 5f67 2867 4c29 202d 2667 743b 2067 op_g(gL) -> g\n-00006170: 4c2e 6170 706c 795f 675f 6f70 5f66 4c28 L.apply_g_op_fL(\n-00006180: 664c 2920 2862 656c 6f77 293c 2f73 7061 fL) (below)
.
131 \n-000061f0: 203c 7370 616e 2063 6c61 7373 3d22 636f // fL.app\n-00006210: 6c79 5f66 5f6f 705f 6728 6743 2920 2d26 ly_f_op_g(gC) -&\n-00006220: 6774 3b20 6743 2e61 7070 6c79 5f67 5f6f gt; gC.apply_g_o\n-00006230: 705f 664c 2866 4c29 2028 4368 6f69 6365 p_fL(fL) (Choice\n-00006240: 293c 2f73 7061 6e3e 3c2f 6469 763e 0a3c )
.<\n-00006250: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00006260: 3e3c 6120 6964 3d22 6c30 3031 3332 2220 > 132 NodePtr apply_f_op_g(\n-00006310: 3c73 7061 6e20 636c 6173 733d 226b 6579 const \n-00006360: 4e6f 6465 3c2f 613e 2661 6d70 3b20 672c Node& g,\n-00006370: 203c 7370 616e 2063 6c61 7373 3d22 6b65 const Binary& \n-000063a0: 6f70 293c 7370 616e 2063 6c61 7373 3d22 op) const \n-000063c0: 6f76 6572 7269 6465 203c 2f73 7061 6e3e override \n-000063d0: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n-00006420: 2020 3133 333c 2f73 7061 6e3e 2020 2020 133 \n-00006430: 2020 3c73 7061 6e20 636c 6173 733d 226b retu\n-00006450: 726e 3c2f 7370 616e 3e20 672e 6170 706c rn g.appl\n-00006460: 795f 675f 6f70 5f66 4c28 2a3c 7370 616e y_g_op_fL(*this, op\n-00006490: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
134 \n-000064f0: 207d 3c2f 6469 763e 0a3c 6469 7620 636c }
.
135 .
1\n-000065a0: 3336 3c2f 7370 616e 3e20 2020 203c 7370 36 // Applying b\n-000065d0: 696e 6172 7920 6f70 6572 6174 6f72 2074 inary operator t\n-000065e0: 6f20 7477 6f20 6c65 6176 6573 2072 6573 o two leaves res\n-000065f0: 756c 7473 2069 6e20 6120 6c65 6166 3c2f ults in a leaf
.<\n-00006640: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00006650: 6e6f 223e 2020 3133 373c 2f73 7061 6e3e no\"> 137\n-00006660: 2020 2020 3c61 2063 6c61 7373 3d22 636f NodePtr \n-000066c0: 6170 706c 795f 675f 6f70 5f66 4c28 3c73 apply_g_op_fL(const\n-000066f0: 204c 6561 6626 616d 703b 2066 4c2c 203c Leaf& fL, <\n-00006700: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00006710: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const Binary& op\n-00006730: 293c 7370 616e 2063 6c61 7373 3d22 6b65 ) const ov\n-00006750: 6572 7269 6465 203c 2f73 7061 6e3e 7b3c erride {<\n-00006760: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-000067b0: 3133 383c 2f73 7061 6e3e 2020 2020 2020 138 \n-000067c0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // fL op g\n-000067e0: 4c3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c L
.<\n-000067f0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00006800: 3e3c 6120 6964 3d22 6c30 3031 3339 2220 > 139 NodePtr\n-000068a0: 3c2f 613e 2068 283c 7370 616e 2063 6c61 h(new\n-000068c0: 3c2f 7370 616e 3e20 4c65 6166 286f 7028 Leaf(op(\n-000068d0: 664c 2e63 6f6e 7374 616e 745f 2c20 636f fL.constant_, co\n-000068e0: 6e73 7461 6e74 5f29 2c20 6e72 4173 7369 nstant_), nrAssi\n-000068f0: 676e 6d65 6e74 735f 2929 3b3c 2f64 6976 gnments_));.
140<\n-00006950: 2f73 7061 6e3e 2020 2020 2020 3c73 7061 /span> return h;
.<\n-000069a0: 6120 6964 3d22 6c30 3031 3431 2220 6e61 a id=\"l00141\" na\n-000069b0: 6d65 3d22 6c30 3031 3431 223e 3c2f 613e me=\"l00141\">\n-000069c0: 3c73 7061 6e20 636c 6173 733d 226c 696e 141 }
.<\n-00006a00: 6120 6964 3d22 6c30 3031 3432 2220 6e61 a id=\"l00142\" na\n-00006a10: 6d65 3d22 6c30 3031 3432 223e 3c2f 613e me=\"l00142\">\n-00006a20: 3c73 7061 6e20 636c 6173 733d 226c 696e 142
.
143 \n-00006aa0: 203c 7370 616e 2063 6c61 7373 3d22 636f // If sec\n-00006ac0: 6f6e 6420 6172 6775 6d65 6e74 2069 7320 ond argument is \n-00006ad0: 6120 4368 6f69 6365 206e 6f64 652c 2063 a Choice node, c\n-00006ae0: 616c 6c20 6974 2623 3339 3b73 2061 7070 all it's app\n-00006af0: 6c79 2077 6974 6820 6c65 6166 2061 7320 ly with leaf as \n-00006b00: 7365 636f 6e64 3c2f 7370 616e 3e3c 2f64 second.
14\n-00006b60: 343c 2f73 7061 6e3e 2020 2020 3c61 2063 4 Node\n-00006bc0: 5074 723c 2f61 3e20 6170 706c 795f 675f Ptr apply_g_\n-00006bd0: 6f70 5f66 4328 3c73 7061 6e20 636c 6173 op_fC(cons\n-00006bf0: 743c 2f73 7061 6e3e 2043 686f 6963 6526 t Choice&\n-00006c00: 616d 703b 2066 432c 203c 7370 616e 2063 amp; fC, c\n-00006c20: 6f6e 7374 3c2f 7370 616e 3e20 4269 6e61 onst Bina\n-00006c30: 7279 2661 6d70 3b20 6f70 293c 7370 616e ry& op) const override\n-00006c60: 203c 2f73 7061 6e3e 7b3c 2f64 6976 3e0a {
.\n-00006c70: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 \n-00006d70: 0a3c 6469 7620 636c 6173 733d 226c 696e .\n-00006dd0: 0a3c 6469 7620 636c 6173 733d 226c 696e ...
\n-00006f00: 2020 3134 393c 2f61 3e3c 2f73 7061 6e3e 149\n-00006f10: 2020 2020 3c61 2063 6c61 7373 3d22 636f NodePtr \n-00006f70: 3c61 2063 6c61 7373 3d22 636f 6465 2068 choose(const L\n-00006ff0: 2661 6d70 3b20 6c61 6265 6c2c 203c 7370 & label, size_t index) const override\n-00007050: 203c 2f73 7061 6e3e 7b3c 2f64 6976 3e0a {
.\n-00007060: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-00007090: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 150 return NodePtr(new <\n-00007160: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00007170: 5f73 7472 7563 7422 2068 7265 663d 2261 _struct\" href=\"a\n-00007180: 3032 3737 362e 6874 6d6c 223e 4c65 6166 02776.html\">Leaf\n-00007190: 3c2f 613e 2863 6f6e 7374 616e 7428 292c (constant(),\n-000071a0: 206e 7241 7373 6967 6e6d 656e 7473 2829 nrAssignments()\n-000071b0: 2929 3b3c 2f64 6976 3e0a 3c64 6976 2063 ));
.
151 \n-00007210: 2020 7d3c 2f64 6976 3e0a 3c2f 6469 763e }
.
\n-00007220: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00007290: 6120 6964 3d22 6c30 3031 3533 2220 6e61 a id=\"l00153\" na\n-000072a0: 6d65 3d22 6c30 3031 3533 223e 3c2f 613e me=\"l00153\">\n-000072b0: 3c73 7061 6e20 636c 6173 733d 226c 696e 153 b\n-000072f0: 6f6f 6c3c 2f73 7061 6e3e 2069 734c 6561 ool isLea\n-00007300: 6628 293c 7370 616e 2063 6c61 7373 3d22 f() const \n-00007320: 6f76 6572 7269 6465 203c 2f73 7061 6e3e override \n-00007330: 7b20 3c73 7061 6e20 636c 6173 733d 226b { retu\n-00007350: 726e 3c2f 7370 616e 3e20 3c73 7061 6e20 rn \n-00007370: 7472 7565 3c2f 7370 616e 3e3b 207d 3c2f true; }.
..\n-00007470: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-000074a0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 155 pri\n-000074e0: 7661 7465 3c2f 7370 616e 3e3a 3c2f 6469 vate:.
156\n-00007540: 3c2f 7370 616e 3e20 2020 203c 7370 616e using Ba\n-00007570: 7365 203d 203c 6120 636c 6173 733d 2263 se = DecisionTree&l\n-000075b0: 743b 4c2c 2059 2667 743b 3a3a 4e6f 6465 t;L, Y>::Node\n-000075c0: 3c2f 613e 3b3c 2f64 6976 3e0a 3c64 6976 ;
.<\n-00007600: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00007610: 6e6f 223e 2020 3135 373c 2f73 7061 6e3e no\"> 157\n-00007620: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
.
\n-00007670: 2020 3135 393c 2f73 7061 6e3e 2020 2020 159 \n-00007680: 3c73 7061 6e20 636c 6173 733d 226b 6579 friend class \n-000076c0: 3c2f 7370 616e 3e62 6f6f 7374 3a3a 7365 boost::se\n-000076d0: 7269 616c 697a 6174 696f 6e3a 3a61 6363 rialization::acc\n-000076e0: 6573 733b 3c2f 6469 763e 0a3c 6469 7620 ess;
.
160 \n-00007740: 2020 203c 7370 616e 2063 6c61 7373 3d22 templat\n-00007760: 653c 2f73 7061 6e3e 2026 6c74 3b3c 7370 e <class \n-00007790: 4152 4348 4956 4526 6774 3b3c 2f64 6976 ARCHIVE>.
161<\n-000077f0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> void \n-00007820: 7365 7269 616c 697a 6528 4152 4348 4956 serialize(ARCHIV\n-00007830: 4526 616d 703b 2061 722c 203c 7370 616e E& ar, const unsigned\n-00007880: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c int /*version*/) {
.<\n-000078e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000078f0: 3e3c 6120 6964 3d22 6c30 3031 3632 2220 > 162 ar &\n-00007940: 3b20 424f 4f53 545f 5345 5249 414c 495a ; BOOST_SERIALIZ\n-00007950: 4154 494f 4e5f 4241 5345 5f4f 424a 4543 ATION_BASE_OBJEC\n-00007960: 545f 4e56 5028 4261 7365 293b 3c2f 6469 T_NVP(Base);.
163\n-000079c0: 3c2f 7370 616e 3e20 2020 2020 2061 7226 ar&\n-000079d0: 616d 703b 2042 4f4f 5354 5f53 4552 4941 amp; BOOST_SERIA\n-000079e0: 4c49 5a41 5449 4f4e 5f4e 5650 2863 6f6e LIZATION_NVP(con\n-000079f0: 7374 616e 745f 293b 3c2f 6469 763e 0a3c stant_);
.<\n-00007a00: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00007a10: 3e3c 6120 6964 3d22 6c30 3031 3634 2220 > 164 ar&\n-00007a60: 2042 4f4f 5354 5f53 4552 4941 4c49 5a41 BOOST_SERIALIZA\n-00007a70: 5449 4f4e 5f4e 5650 286e 7241 7373 6967 TION_NVP(nrAssig\n-00007a80: 6e6d 656e 7473 5f29 3b3c 2f64 6976 3e0a nments_);
.\n-00007a90: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-00007af0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-00007b20: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 166 }; \n-00007b60: 2f2f 204c 6561 663c 2f73 7061 6e3e 3c2f // Leaf.
..\n-00007c60: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00007d70: 2020 3136 393c 2f73 7061 6e3e 2020 3c73 169 // Choice
.
170<\n-00007e00: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00007e10: 656e 7422 3e20 202f 2a2a 2a2a 2a2a 2a2a ent\"> /********\n-00007e20: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00007e30: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00007e40: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00007e50: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00007e60: 2a2a 2a2a 2f3c 2f73 7061 6e3e 3c2f 6469 ****/.
171\n-00007ec0: 3c2f 7370 616e 3e20 203c 7370 616e 2063 t\n-00007ee0: 656d 706c 6174 653c 2f73 7061 6e3e 266c emplate&l\n-00007ef0: 743b 3c73 7061 6e20 636c 6173 733d 226b t;typename\n-00007f10: 3c2f 7370 616e 3e20 4c2c 203c 7370 616e L, typename\n-00007f40: 2059 2667 743b 3c2f 6469 763e 0a3c 6469 Y>
..
\n-00008000: 2031 3732 3c2f 613e 3c2f 7370 616e 3e20 172 \n-00008010: 203c 7370 616e 2063 6c61 7373 3d22 6b65 struct DecisionTree<L, Y>::<\n-00008080: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00008090: 5f73 7472 7563 7422 2068 7265 663d 2261 _struct\" href=\"a\n-000080a0: 3032 3738 302e 6874 6d6c 223e 4368 6f69 02780.html\">Choi\n-000080b0: 6365 3c2f 613e 3a20 3c73 7061 6e20 636c ce: pu\n-000080d0: 626c 6963 3c2f 7370 616e 3e20 3c61 2063 blic Decision\n-00008110: 5472 6565 3c2f 613e 266c 743b 4c2c 2059 Tree<L, Y\n-00008120: 2667 743b 3a3a 4e6f 6465 207b 3c2f 6469 >::Node {.
\n-000081c0: 2020 3137 343c 2f61 3e3c 2f73 7061 6e3e 174\n-000081d0: 2020 2020 4c20 3c61 2063 6c61 7373 3d22 L label_;
.
175 .
177 std::vecto\n-00008340: 7226 6c74 3b4e 6f64 6550 7472 2667 743b r<NodePtr>\n-00008350: 203c 6120 636c 6173 733d 2263 6f64 6520 branches_;\n-000083b0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00008400: 2031 3738 3c2f 7370 616e 3e20 3c2f 6469 178 .
.
179<\n-000084f0: 2f73 7061 6e3e 2020 203c 7370 616e 2063 /span> p\n-00008510: 7269 7661 7465 3c2f 7370 616e 3e3a 3c2f rivate:.
1\n-00008570: 3834 3c2f 7370 616e 3e20 2020 203c 7370 84 size_t allSame_;.
1\n-00008600: 3835 3c2f 7370 616e 3e20 3c2f 6469 763e 85
\n-00008610: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00008640: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 186 u\n-00008680: 7369 6e67 203c 2f73 7061 6e3e 4368 6f69 sing Choi\n-00008690: 6365 5074 7220 3d20 626f 6f73 743a 3a73 cePtr = boost::s\n-000086a0: 6861 7265 645f 7074 7226 6c74 3b63 6f6e hared_ptr<con\n-000086b0: 7374 2043 686f 6963 6526 6774 3b3b 3c2f st Choice>;.
1\n-00008710: 3837 3c2f 7370 616e 3e20 3c2f 6469 763e 87
\n-00008720: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
.
<\n-000087b0: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-000087c0: 7265 663d 2261 3032 3739 362e 6874 6d6c ref=\"a02796.html\n-000087d0: 2361 6530 6238 3434 3437 3338 3233 6161 #ae0b844473823aa\n-000087e0: 3039 6337 3165 3636 3834 3439 3530 3963 09c71e668449509c\n-000087f0: 6432 223e 2020 3138 383c 2f61 3e3c 2f73 d2\"> 188 pub\n-00008820: 6c69 633c 2f73 7061 6e3e 3a3c 2f64 6976 lic:.
\n-000088c0: 2031 3930 3c2f 613e 3c2f 7370 616e 3e20 190 \n-000088d0: 2020 203c 6120 636c 6173 733d 2263 6f64 Choice()\n-00008930: 207b 7d3c 2f64 6976 3e0a 3c64 6976 2063 {}
.
.\n-00008980: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-000089b0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 1\n-00008a10: 3931 3c2f 613e 3c2f 7370 616e 3e20 3c2f 91 .
1\n-00008a70: 3932 3c2f 7370 616e 3e20 2020 207e 4368 92 ~Ch\n-00008a80: 6f69 6365 2829 3c73 7061 6e20 636c 6173 oice() ove\n-00008aa0: 7272 6964 6520 3c2f 7370 616e 3e7b 3c2f rride {.
1\n-00008b00: 3933 3c2f 7370 616e 3e3c 7370 616e 2063 93#ifdef DT_DE\n-00008b30: 4255 475f 4d45 4d4f 5259 3c2f 7370 616e BUG_MEMORY
.
.\n-00008ba0: 3c61 2069 643d 226c 3030 3139 3422 206e 194\n-00008c20: 3c2f 613e 3c2f 7370 616e 3e20 2020 2020 \n-00008c30: 2073 7464 3a3a 7374 643a 3a63 6f75 7420 std::std::cout \n-00008c40: 266c 743b 266c 743b 204e 6f64 653a 3a6e << Node::n\n-00008c50: 724e 6f64 6573 2026 6c74 3b26 6c74 3b20 rNodes << \n-00008c60: 3c73 7061 6e20 636c 6173 733d 2273 7472 &quo\n-00008c80: 743b 2064 6573 7472 7563 7469 6e67 2028 t; destructing (\n-00008c90: 4368 6f69 6365 2920 2671 756f 743b 3c2f Choice) " << t\n-00008cb0: 6869 732d 2667 743b 6964 2829 3c2f 6469 his->id().
195\n-00008d10: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n-00008d20: 2020 2020 2020 2020 2020 2020 266c 743b <\n-00008d30: 266c 743b 2073 7464 3a3a 7374 643a 3a65 < std::std::e\n-00008d40: 6e64 6c3b 3c2f 6469 763e 0a3c 6469 7620 ndl;
.
196<\n-00008da0: 7370 616e 2063 6c61 7373 3d22 7072 6570 span class=\"prep\n-00008db0: 726f 6365 7373 6f72 223e 2365 6e64 6966 rocessor\">#endif\n-00008dc0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
...<\n-00008ed0: 6120 6964 3d22 6c30 3031 3938 2220 6e61 a id=\"l00198\" na\n-00008ee0: 6d65 3d22 6c30 3031 3938 223e 3c2f 613e me=\"l00198\">\n-00008ef0: 3c73 7061 6e20 636c 6173 733d 226c 696e 198
.
.<\n-00008f60: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00008f70: 3e3c 6120 6964 3d22 6c30 3032 3030 2220 > 20\n-00008ff0: 303c 2f61 3e3c 2f73 7061 6e3e 2020 2020 0 \n-00009000: 3c73 7061 6e20 636c 6173 733d 226b 6579 static NodePtr \n-00009080: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Unique(const C\n-00009100: 686f 6963 6550 7472 2661 6d70 3b20 6629 hoicePtr& f)\n-00009110: 207b 3c2f 6469 763e 0a3c 6469 7620 636c {
.
.<\n-00009160: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00009170: 3e3c 6120 6964 3d22 6c30 3032 3031 2220 > 20\n-000091f0: 313c 2f61 3e3c 2f73 7061 6e3e 3c73 7061 1#ifndef G\n-00009220: 5453 414d 5f44 545f 4e4f 5f50 5255 4e49 TSAM_DT_NO_PRUNI\n-00009230: 4e47 3c2f 7370 616e 3e3c 2f64 6976 3e0a NG
.\n-00009240: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00009320: 2032 3033 3c2f 7370 616e 3e20 2020 2020 203 \n-00009330: 2020 2061 7373 6572 7428 662d 2667 743b assert(f->\n-00009340: 6272 616e 6368 6573 2829 2e73 697a 6528 branches().size(\n-00009350: 2920 2667 743b 2030 293b 3c2f 6469 763e ) > 0);
\n-00009360: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
.
<\n-000093f0: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-00009400: 7265 663d 2261 3032 3739 362e 6874 6d6c ref=\"a02796.html\n-00009410: 2361 6662 3635 6266 6535 6433 6463 3262 #afb65bfe5d3dc2b\n-00009420: 3866 3239 3465 6138 3934 6161 6263 3235 8f294ea894aabc25\n-00009430: 6133 223e 2020 3230 343c 2f61 3e3c 2f73 a3\"> 204 Node\n-000094a0: 5074 723c 2f61 3e20 6630 203d 2066 2d26 Ptr f0 = f-&\n-000094b0: 6774 3b62 7261 6e63 6865 735f 5b30 5d3b gt;branches_[0];\n-000094c0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00009510: 2032 3035 3c2f 7370 616e 3e20 3c2f 6469 205 .
206\n-00009570: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n-00009580: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00009590: 6f72 6474 7970 6522 3e73 697a 655f 743c ordtype\">size_t<\n-000095a0: 2f73 7061 6e3e 206e 7241 7373 6967 6e6d /span> nrAssignm\n-000095b0: 656e 7473 203d 2030 3b3c 2f64 6976 3e0a ents = 0;
.\n-000095c0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-000095f0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 207 for\n-00009640: 283c 7370 616e 2063 6c61 7373 3d22 6b65 (auto branch: f->\n-00009670: 3b62 7261 6e63 6865 7328 2929 207b 3c2f ;branches()) {.
2\n-000096d0: 3038 3c2f 7370 616e 3e20 2020 2020 2020 08 \n-000096e0: 2020 2061 7373 6572 7428 6272 616e 6368 assert(branch\n-000096f0: 2d26 6774 3b69 734c 6561 6628 2929 3b3c ->isLeaf());<\n-00009700: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00009750: 3230 393c 2f73 7061 6e3e 2020 2020 2020 209 \n-00009760: 2020 2020 6e72 4173 7369 676e 6d65 6e74 nrAssignment\n-00009770: 7320 2b3d 3c2f 6469 763e 0a3c 6469 7620 s +=
.
210 \n-000097d0: 2020 2020 2020 2020 2020 2020 2062 6f6f boo\n-000097e0: 7374 3a3a 6479 6e61 6d69 635f 706f 696e st::dynamic_poin\n-000097f0: 7465 725f 6361 7374 266c 743b 636f 6e73 ter_cast<cons\n-00009800: 7420 4c65 6166 2667 743b 2862 7261 6e63 t Leaf>(branc\n-00009810: 6829 2d26 6774 3b6e 7241 7373 6967 6e6d h)->nrAssignm\n-00009820: 656e 7473 2829 3b3c 2f64 6976 3e0a 3c64 ents();
.\n-00009840: 3c61 2069 643d 226c 3030 3231 3122 206e 211 }.
212<\n-000098e0: 2f73 7061 6e3e 2020 2020 2020 2020 3c61 /span> No\n-00009940: 6465 5074 723c 2f61 3e20 6e65 774c 6561 dePtr newLea\n-00009950: 6628 3c2f 6469 763e 0a3c 6469 7620 636c f(
.
213 \n-000099b0: 2020 2020 2020 2020 203c 7370 616e 2063 n\n-000099d0: 6577 3c2f 7370 616e 3e20 4c65 6166 2862 ew Leaf(b\n-000099e0: 6f6f 7374 3a3a 6479 6e61 6d69 635f 706f oost::dynamic_po\n-000099f0: 696e 7465 725f 6361 7374 266c 743b 636f inter_cast<co\n-00009a00: 6e73 7420 4c65 6166 2667 743b 2866 3029 nst Leaf>(f0)\n-00009a10: 2d26 6774 3b63 6f6e 7374 616e 7428 292c ->constant(),\n-00009a20: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00009a70: 2032 3134 3c2f 7370 616e 3e20 2020 2020 214 \n-00009a80: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00009a90: 6e72 4173 7369 676e 6d65 6e74 7329 293b nrAssignments));\n-00009aa0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
.<\n-00009b00: 6120 6964 3d22 6c30 3032 3135 2220 6e61 a id=\"l00215\" na\n-00009b10: 6d65 3d22 6c30 3032 3135 223e 3c2f 613e me=\"l00215\">\n-00009b20: 3c73 7061 6e20 636c 6173 733d 226c 696e 215<\n-00009b80: 2f61 3e3c 2f73 7061 6e3e 2020 2020 2020 /a> \n-00009b90: 2020 3c73 7061 6e20 636c 6173 733d 226b retu\n-00009bb0: 726e 3c2f 7370 616e 3e20 6e65 774c 6561 rn newLea\n-00009bc0: 663b 3c2f 6469 763e 0a3c 6469 7620 636c f;
.
216 \n-00009c20: 2020 207d 203c 7370 616e 2063 6c61 7373 } e\n-00009c40: 6c73 653c 2f73 7061 6e3e 3c2f 6469 763e lse
\n-00009c50: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00009c80: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 217\n-00009cc0: 2365 6e64 6966 3c2f 7370 616e 3e3c 2f64 #endif.
21\n-00009d20: 383c 2f73 7061 6e3e 2020 2020 2020 2020 8 \n-00009d30: 3c73 7061 6e20 636c 6173 733d 226b 6579 return\n-00009d50: 3c2f 7370 616e 3e20 663b 3c2f 6469 763e f;
\n-00009d60: 0a3c 6469 7620 636c 6173 733d 226c 696e .\n-00009dc0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00009e30: 6120 6964 3d22 6c30 3032 3231 2220 6e61 a id=\"l00221\" na\n-00009e40: 6d65 3d22 6c30 3032 3231 223e 3c2f 613e me=\"l00221\">\n-00009e50: 3c73 7061 6e20 636c 6173 733d 226c 696e 221 b\n-00009e90: 6f6f 6c3c 2f73 7061 6e3e 2069 734c 6561 ool isLea\n-00009ea0: 6628 293c 7370 616e 2063 6c61 7373 3d22 f() const \n-00009ec0: 6f76 6572 7269 6465 203c 2f73 7061 6e3e override \n-00009ed0: 7b20 3c73 7061 6e20 636c 6173 733d 226b { retu\n-00009ef0: 726e 3c2f 7370 616e 3e20 3c73 7061 6e20 rn \n-00009f10: 6661 6c73 653c 2f73 7061 6e3e 3b20 7d3c false; }<\n-00009f20: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00009f70: 3232 323c 2f73 7061 6e3e 203c 2f64 6976 222 .
.
\n-0000a010: 3c61 2063 6c61 7373 3d22 6c69 6e65 2220 224 Choice\n-0000a0c0: 3c2f 613e 283c 7370 616e 2063 6c61 7373 (const\n-0000a0e0: 3c2f 7370 616e 3e20 4c26 616d 703b 206c L& l\n-0000a0f0: 6162 656c 2c20 3c73 7061 6e20 636c 6173 abel, \n-0000a110: 7369 7a65 5f74 3c2f 7370 616e 3e20 636f size_t co\n-0000a120: 756e 7429 203a 3c2f 6469 763e 0a3c 6469 unt) :
.<\n-0000a140: 6120 6964 3d22 6c30 3032 3235 2220 6e61 a id=\"l00225\" na\n-0000a150: 6d65 3d22 6c30 3032 3235 223e 3c2f 613e me=\"l00225\">\n-0000a160: 3c73 7061 6e20 636c 6173 733d 226c 696e 225 label_(la\n-0000a190: 6265 6c29 2c20 616c 6c53 616d 655f 2874 bel), allSame_(t\n-0000a1a0: 7275 6529 207b 3c2f 6469 763e 0a3c 6469 rue) {
.<\n-0000a1c0: 6120 6964 3d22 6c30 3032 3236 2220 6e61 a id=\"l00226\" na\n-0000a1d0: 6d65 3d22 6c30 3032 3236 223e 3c2f 613e me=\"l00226\">\n-0000a1e0: 3c73 7061 6e20 636c 6173 733d 226c 696e 226 branches_\n-0000a210: 2e72 6573 6572 7665 2863 6f75 6e74 293b .reserve(count);\n-0000a220: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000a270: 2032 3237 3c2f 7370 616e 3e20 2020 207d 227 }\n-0000a280: 3c2f 6469 763e 0a3c 2f64 6976 3e0a 3c64
.
...
.<\n-0000a3c0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000a3d0: 3e3c 6120 6964 3d22 6c30 3032 3330 2220 > 23\n-0000a450: 303c 2f61 3e3c 2f73 7061 6e3e 2020 2020 0 \n-0000a460: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Choice(const <\n-0000a4e0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-0000a4f0: 5f73 7472 7563 7422 2068 7265 663d 2261 _struct\" href=\"a\n-0000a500: 3032 3738 302e 6874 6d6c 223e 4368 6f69 02780.html\">Choi\n-0000a510: 6365 3c2f 613e 2661 6d70 3b20 662c 203c ce& f, <\n-0000a520: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000a530: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const C\n-0000a570: 686f 6963 653c 2f61 3e26 616d 703b 2067 hoice& g\n-0000a580: 2c20 3c73 7061 6e20 636c 6173 733d 226b , const Binary&\n-0000a5b0: 206f 7029 203a 3c2f 6469 763e 0a3c 6469 op) :
.<\n-0000a5d0: 6120 6964 3d22 6c30 3032 3331 2220 6e61 a id=\"l00231\" na\n-0000a5e0: 6d65 3d22 6c30 3032 3331 223e 3c2f 613e me=\"l00231\">\n-0000a5f0: 3c73 7061 6e20 636c 6173 733d 226c 696e 231 allSame_(\n-0000a620: 7472 7565 2920 7b3c 2f64 6976 3e0a 3c64 true) {
.\n-0000a640: 3c61 2069 643d 226c 3030 3233 3222 206e 232 //\n-0000a6a0: 2043 686f 6f73 6520 7768 6174 2074 6f20 Choose what to \n-0000a6b0: 646f 2062 6173 6564 206f 6e20 6c61 6265 do based on labe\n-0000a6c0: 6c3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c l
.<\n-0000a6d0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000a6e0: 3e3c 6120 6964 3d22 6c30 3032 3333 2220 > 233 if (f.\n-0000a750: 3c61 2063 6c61 7373 3d22 636f 6465 2068 label() >\n-0000a7b0: 3b20 672e 3c61 2063 6c61 7373 3d22 636f ; g.label()\n-0000a810: 2920 7b3c 2f64 6976 3e0a 3c64 6976 2063 ) {
.
234 \n-0000a870: 2020 2020 2020 3c73 7061 6e20 636c 6173 // f\n-0000a890: 2068 6967 6865 7220 7468 616e 2067 3c2f higher than g
.<\n-0000a8e0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000a8f0: 6e6f 223e 2020 3233 353c 2f73 7061 6e3e no\"> 235\n-0000a900: 2020 2020 2020 2020 6c61 6265 6c5f 203d label_ =\n-0000a910: 2066 2e3c 6120 636c 6173 733d 2263 6f64 f.label();\n-0000a970: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000a9c0: 2032 3336 3c2f 7370 616e 3e20 2020 2020 236 \n-0000a9d0: 2020 203c 7370 616e 2063 6c61 7373 3d22 siz\n-0000a9f0: 655f 743c 2f73 7061 6e3e 2063 6f75 6e74 e_t count\n-0000aa00: 203d 2066 2e6e 7243 686f 6963 6573 2829 = f.nrChoices()\n-0000aa10: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0000aa60: 2020 3233 373c 2f73 7061 6e3e 2020 2020 237 \n-0000aa70: 2020 2020 6272 616e 6368 6573 5f2e 7265 branches_.re\n-0000aa80: 7365 7276 6528 636f 756e 7429 3b3c 2f64 serve(count);.
23\n-0000aae0: 383c 2f73 7061 6e3e 2020 2020 2020 2020 8 \n-0000aaf0: 3c73 7061 6e20 636c 6173 733d 226b 6579 for (\n-0000ab30: 7369 7a65 5f74 3c2f 7370 616e 3e20 6920 size_t i \n-0000ab40: 3d20 303b 2069 2026 6c74 3b20 636f 756e = 0; i < coun\n-0000ab50: 743b 2069 2b2b 293c 2f64 6976 3e0a 3c64 t; i++)
.\n-0000ab70: 3c61 2069 643d 226c 3030 3233 3922 206e 239 push\n-0000abc0: 5f62 6163 6b28 662e 3c61 2063 6c61 7373 _back(f.branche\n-0000ac20: 735f 3c2f 613e 5b69 5d2d 2667 743b 6170 s_[i]->ap\n-0000ac30: 706c 795f 665f 6f70 5f67 2867 2c20 6f70 ply_f_op_g(g, op\n-0000ac40: 2929 3b3c 2f64 6976 3e0a 3c64 6976 2063 ));
.
240 \n-0000aca0: 2020 2020 7d20 3c73 7061 6e20 636c 6173 } \n-0000acc0: 656c 7365 3c2f 7370 616e 3e20 3c73 7061 else if \n-0000acf0: 2867 2e3c 6120 636c 6173 733d 2263 6f64 (g.label() \n-0000ad50: 2667 743b 2066 2e3c 6120 636c 6173 733d > f.label()) {
.<\n-0000add0: 6120 6964 3d22 6c30 3032 3431 2220 6e61 a id=\"l00241\" na\n-0000ade0: 6d65 3d22 6c30 3032 3431 223e 3c2f 613e me=\"l00241\">\n-0000adf0: 3c73 7061 6e20 636c 6173 733d 226c 696e 241 /\n-0000ae30: 2f20 6620 6c6f 7765 7220 7468 616e 2067 / f lower than g\n-0000ae40: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
..
242 label_ \n-0000af40: 3d20 672e 3c61 2063 6c61 7373 3d22 636f = g.label()\n-0000afa0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0000aff0: 2020 3234 333c 2f73 7061 6e3e 2020 2020 243 \n-0000b000: 2020 2020 3c73 7061 6e20 636c 6173 733d si\n-0000b020: 7a65 5f74 3c2f 7370 616e 3e20 636f 756e ze_t coun\n-0000b030: 7420 3d20 672e 6e72 4368 6f69 6365 7328 t = g.nrChoices(\n-0000b040: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
244 \n-0000b0a0: 2020 2020 2062 7261 6e63 6865 735f 2e72 branches_.r\n-0000b0b0: 6573 6572 7665 2863 6f75 6e74 293b 3c2f eserve(count);.
2\n-0000b110: 3435 3c2f 7370 616e 3e20 2020 2020 2020 45 \n-0000b120: 203c 7370 616e 2063 6c61 7373 3d22 6b65 for (size_t i\n-0000b170: 203d 2030 3b20 6920 266c 743b 2063 6f75 = 0; i < cou\n-0000b180: 6e74 3b20 692b 2b29 3c2f 6469 763e 0a3c nt; i++)
.<\n-0000b190: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000b1a0: 3e3c 6120 6964 3d22 6c30 3032 3436 2220 > 246 pus\n-0000b1f0: 685f 6261 636b 2867 2e3c 6120 636c 6173 h_back(g.branch\n-0000b250: 6573 5f3c 2f61 3e5b 695d 2d26 6774 3b61 es_[i]->a\n-0000b260: 7070 6c79 5f67 5f6f 705f 6643 2866 2c20 pply_g_op_fC(f, \n-0000b270: 6f70 2929 3b3c 2f64 6976 3e0a 3c64 6976 op));
.<\n-0000b2b0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000b2c0: 6e6f 223e 2020 3234 373c 2f73 7061 6e3e no\"> 247\n-0000b2d0: 2020 2020 2020 7d20 3c73 7061 6e20 636c } else {<\n-0000b300: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0000b350: 3234 383c 2f73 7061 6e3e 2020 2020 2020 248 \n-0000b360: 2020 3c73 7061 6e20 636c 6173 733d 2263 // f sam\n-0000b380: 6520 6c65 7665 6c20 6173 2067 3c2f 7370 e level as g
.
249 \n-0000b3f0: 2020 2020 2020 6c61 6265 6c5f 203d 2066 label_ = f\n-0000b400: 2e3c 6120 636c 6173 733d 2263 6f64 6520 .label();.
2\n-0000b4b0: 3530 3c2f 7370 616e 3e20 2020 2020 2020 50 \n-0000b4c0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 size_\n-0000b4e0: 743c 2f73 7061 6e3e 2063 6f75 6e74 203d t count =\n-0000b4f0: 2066 2e6e 7243 686f 6963 6573 2829 3b3c f.nrChoices();<\n-0000b500: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0000b550: 3235 313c 2f73 7061 6e3e 2020 2020 2020 251 \n-0000b560: 2020 6272 616e 6368 6573 5f2e 7265 7365 branches_.rese\n-0000b570: 7276 6528 636f 756e 7429 3b3c 2f64 6976 rve(count);.
252<\n-0000b5d0: 2f73 7061 6e3e 2020 2020 2020 2020 3c73 /span> for (si\n-0000b620: 7a65 5f74 3c2f 7370 616e 3e20 6920 3d20 ze_t i = \n-0000b630: 303b 2069 2026 6c74 3b20 636f 756e 743b 0; i < count;\n-0000b640: 2069 2b2b 293c 2f64 6976 3e0a 3c64 6976 i++)
.<\n-0000b680: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000b690: 6e6f 223e 2020 3235 333c 2f73 7061 6e3e no\"> 253\n-0000b6a0: 2020 2020 2020 2020 2020 7075 7368 5f62 push_b\n-0000b6b0: 6163 6b28 662e 3c61 2063 6c61 7373 3d22 ack(f.branches_\n-0000b710: 3c2f 613e 5b69 5d2d 2667 743b 6170 706c [i]->appl\n-0000b720: 795f 665f 6f70 5f67 282a 672e 3c61 2063 y_f_op_g(*g.bra\n-0000b780: 6e63 6865 735f 3c2f 613e 5b69 5d2c 206f nches_[i], o\n-0000b790: 7029 293b 3c2f 6469 763e 0a3c 6469 7620 p));
.
254 \n-0000b7f0: 2020 2020 207d 3c2f 6469 763e 0a3c 6469 }
.<\n-0000b810: 6120 6964 3d22 6c30 3032 3535 2220 6e61 a id=\"l00255\" na\n-0000b820: 6d65 3d22 6c30 3032 3535 223e 3c2f 613e me=\"l00255\">\n-0000b830: 3c73 7061 6e20 636c 6173 733d 226c 696e 255 }
.<\n-0000b870: 6120 6964 3d22 6c30 3032 3536 2220 6e61 a id=\"l00256\" na\n-0000b880: 6d65 3d22 6c30 3032 3536 223e 3c2f 613e me=\"l00256\">\n-0000b890: 3c73 7061 6e20 636c 6173 733d 226c 696e 256
.
.<\n-0000b900: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000b910: 3e3c 6120 6964 3d22 6c30 3032 3538 2220 > 25\n-0000b990: 383c 2f61 3e3c 2f73 7061 6e3e 2020 2020 8 \n-0000b9a0: 3c73 7061 6e20 636c 6173 733d 226b 6579 const L& label\n-0000ba20: 3c2f 613e 2829 3c73 7061 6e20 636c 6173 () con\n-0000ba40: 7374 203c 2f73 7061 6e3e 7b3c 2f64 6976 st {..
266 \n-0000bee0: 2020 3c73 7061 6e20 636c 6173 733d 226b const std::vector\n-0000bf10: 266c 743b 4e6f 6465 5074 7226 6774 3b26 <NodePtr>&\n-0000bf20: 616d 703b 2062 7261 6e63 6865 7328 293c amp; branches()<\n-0000bf30: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000bf40: 6f72 6422 3e20 636f 6e73 7420 3c2f 7370 ord\"> const {
.
267 \n-0000bfb0: 2020 2020 203c 7370 616e 2063 6c61 7373 r\n-0000bfd0: 6574 7572 6e3c 2f73 7061 6e3e 2062 7261 eturn bra\n-0000bfe0: 6e63 6865 735f 3b3c 2f64 6976 3e0a 3c64 nches_;
.\n-0000c000: 3c61 2069 643d 226c 3030 3236 3822 206e 268 }
.\n-0000c060: 3c61 2069 643d 226c 3030 3236 3922 206e 269
.
.\n-0000c0f0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-0000c120: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 2\n-0000c180: 3731 3c2f 613e 3c2f 7370 616e 3e20 2020 71 \n-0000c190: 203c 7370 616e 2063 6c61 7373 3d22 6b65 void<\n-0000c1b0: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> push_bac\n-0000c210: 6b3c 2f61 3e28 3c73 7061 6e20 636c 6173 k(cons\n-0000c230: 743c 2f73 7061 6e3e 203c 6120 636c 6173 t NodePtr\n-0000c290: 3c2f 613e 2661 6d70 3b20 6e6f 6465 2920 & node) \n-0000c2a0: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n-0000c2f0: 2020 3237 323c 2f73 7061 6e3e 2020 2020 272 \n-0000c300: 2020 3c73 7061 6e20 636c 6173 733d 2263 // allSa\n-0000c320: 6d65 5f20 6973 2072 6573 7472 6963 7465 me_ is restricte\n-0000c330: 6420 746f 206c 6561 6620 6e6f 6465 7320 d to leaf nodes \n-0000c340: 696e 2061 2064 6563 6973 696f 6e20 7472 in a decision tr\n-0000c350: 6565 3c2f 7370 616e 3e3c 2f64 6976 3e0a ee
.\n-0000c360: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-0000c410: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000c420: 3e3c 6120 6964 3d22 6c30 3032 3734 2220 > 274 allSa\n-0000c470: 6d65 5f20 3d20 6e6f 6465 2d26 6774 3b73 me_ = node->s\n-0000c480: 616d 654c 6561 6628 2a62 7261 6e63 6865 ameLeaf(*branche\n-0000c490: 735f 2e62 6163 6b28 2929 3b3c 2f64 6976 s_.back());.
275<\n-0000c4f0: 2f73 7061 6e3e 2020 2020 2020 7d3c 2f64 /span> }.
27\n-0000c550: 363c 2f73 7061 6e3e 2020 2020 2020 6272 6 br\n-0000c560: 616e 6368 6573 5f2e 7075 7368 5f62 6163 anches_.push_bac\n-0000c570: 6b28 6e6f 6465 293b 3c2f 6469 763e 0a3c k(node);
.<\n-0000c580: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000c590: 3e3c 6120 6964 3d22 6c30 3032 3737 2220 > 277 }
.<\n-0000c5e0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0000c630: 3237 383c 2f73 7061 6e3e 203c 2f64 6976 278 .
.
\n-0000c6d0: 3c61 2063 6c61 7373 3d22 6c69 6e65 2220 280 void <\n-0000c750: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-0000c760: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n-0000c770: 2261 3032 3738 302e 6874 6d6c 2361 3437 \"a02780.html#a47\n-0000c780: 6366 3766 3361 6563 6538 6335 3365 6165 cf7f3aece8c53eae\n-0000c790: 6531 3039 3664 3665 3565 3062 3034 223e e1096d6e5e0b04\">\n-0000c7a0: 7072 696e 743c 2f61 3e28 3c73 7061 6e20 print(\n-0000c7c0: 636f 6e73 743c 2f73 7061 6e3e 2073 7464 const std\n-0000c7d0: 3a3a 7374 7269 6e67 2661 6d70 3b20 732c ::string& s,\n-0000c7e0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 const LabelFormatt\n-0000c810: 6572 2661 6d70 3b20 6c61 6265 6c46 6f72 er& labelFor\n-0000c820: 6d61 7474 6572 2c3c 2f64 6976 3e0a 3c64 matter,
.\n-0000c840: 3c61 2069 643d 226c 3030 3238 3122 206e 281 \n-0000c890: 203c 7370 616e 2063 6c61 7373 3d22 6b65 const ValueFormatt\n-0000c8c0: 6572 2661 6d70 3b20 7661 6c75 6546 6f72 er& valueFor\n-0000c8d0: 6d61 7474 6572 293c 7370 616e 2063 6c61 matter) co\n-0000c8f0: 6e73 7420 6f76 6572 7269 6465 203c 2f73 nst override {
.<\n-0000c940: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000c950: 6e6f 223e 2020 3238 323c 2f73 7061 6e3e no\"> 282\n-0000c960: 2020 2020 2020 7374 643a 3a63 6f75 7420 std::cout \n-0000c970: 266c 743b 266c 743b 2073 2026 6c74 3b26 << s <&\n-0000c980: 6c74 3b20 3c73 7061 6e20 636c 6173 733d lt; \n-0000c9a0: 2671 756f 743b 2043 686f 6963 6528 2671 " Choice(&q\n-0000c9b0: 756f 743b 3c2f 7370 616e 3e3b 3c2f 6469 uot;;.
283\n-0000ca10: 3c2f 7370 616e 3e20 2020 2020 2073 7464 std\n-0000ca20: 3a3a 636f 7574 2026 6c74 3b26 6c74 3b20 ::cout << \n-0000ca30: 6c61 6265 6c46 6f72 6d61 7474 6572 286c labelFormatter(l\n-0000ca40: 6162 656c 5f29 2026 6c74 3b26 6c74 3b20 abel_) << \n-0000ca50: 3c73 7061 6e20 636c 6173 733d 2273 7472 &quo\n-0000ca70: 743b 2920 2671 756f 743b 3c2f 7370 616e t;) " << std::\n-0000ca90: 656e 646c 3b3c 2f64 6976 3e0a 3c64 6976 endl;
.<\n-0000cad0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000cae0: 6e6f 223e 2020 3238 343c 2f73 7061 6e3e no\"> 284\n-0000caf0: 2020 2020 2020 3c73 7061 6e20 636c 6173 \n-0000cb10: 666f 723c 2f73 7061 6e3e 2028 3c73 7061 for (size_t i = 0; i <\n-0000cb50: 3b20 6272 616e 6368 6573 5f2e 7369 7a65 ; branches_.size\n-0000cb60: 2829 3b20 692b 2b29 3c2f 6469 763e 0a3c (); i++)
.<\n-0000cb70: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000cb80: 3e3c 6120 6964 3d22 6c30 3032 3835 2220 > 285 branc\n-0000cbd0: 6865 735f 5b69 5d2d 2667 743b 3c61 2063 hes_[i]->pri\n-0000cc30: 6e74 3c2f 613e 2828 626f 6f73 743a 3a66 nt((boost::f\n-0000cc40: 6f72 6d61 7428 3c73 7061 6e20 636c 6173 ormat("%s %d&qu\n-0000cc70: 6f74 3b3c 2f73 7061 6e3e 2920 2520 7320 ot;) % s \n-0000cc80: 2520 6929 2e73 7472 2829 2c3c 2f64 6976 % i).str(),.
286<\n-0000cce0: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-0000ccf0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0000cd00: 2020 6c61 6265 6c46 6f72 6d61 7474 6572 labelFormatter\n-0000cd10: 2c20 7661 6c75 6546 6f72 6d61 7474 6572 , valueFormatter\n-0000cd20: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
287 \n-0000cd80: 207d 3c2f 6469 763e 0a3c 2f64 6976 3e0a }
.
.\n-0000cd90: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 ..
\n-0000cec0: 2032 3930 3c2f 613e 3c2f 7370 616e 3e20 290 \n-0000ced0: 2020 203c 7370 616e 2063 6c61 7373 3d22 voi\n-0000cef0: 643c 2f73 7061 6e3e 203c 6120 636c 6173 d dot(std::ostream&a\n-0000cf60: 6d70 3b20 6f73 2c20 3c73 7061 6e20 636c mp; os, co\n-0000cf80: 6e73 743c 2f73 7061 6e3e 204c 6162 656c nst Label\n-0000cf90: 466f 726d 6174 7465 7226 616d 703b 206c Formatter& l\n-0000cfa0: 6162 656c 466f 726d 6174 7465 722c 3c2f abelFormatter,.
2\n-0000d000: 3931 3c2f 7370 616e 3e20 2020 2020 2020 91 \n-0000d010: 2020 2020 2020 3c73 7061 6e20 636c 6173 cons\n-0000d030: 743c 2f73 7061 6e3e 2056 616c 7565 466f t ValueFo\n-0000d040: 726d 6174 7465 7226 616d 703b 2076 616c rmatter& val\n-0000d050: 7565 466f 726d 6174 7465 722c 3c2f 6469 ueFormatter,.
292\n-0000d0b0: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n-0000d0c0: 2020 2020 3c73 7061 6e20 636c 6173 733d bo\n-0000d0e0: 6f6c 3c2f 7370 616e 3e20 7368 6f77 5a65 ol showZe\n-0000d0f0: 726f 293c 7370 616e 2063 6c61 7373 3d22 ro) const \n-0000d110: 6f76 6572 7269 6465 203c 2f73 7061 6e3e override \n-0000d120: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n-0000d170: 2020 3239 333c 2f73 7061 6e3e 2020 2020 293 \n-0000d180: 2020 6f73 2026 6c74 3b26 6c74 3b20 3c73 os << "\n-0000d1b0: 5c26 7175 6f74 3b26 7175 6f74 3b3c 2f73 \\"" << th\n-0000d1d0: 6973 2d26 6774 3b69 6428 2920 266c 743b is->id() <\n-0000d1e0: 266c 743b 203c 7370 616e 2063 6c61 7373 < "\\" [\n-0000d210: 7368 6170 653d 6369 7263 6c65 2c20 6c61 shape=circle, la\n-0000d220: 6265 6c3d 5c26 7175 6f74 3b26 7175 6f74 bel=\\""\n-0000d230: 3b3c 2f73 7061 6e3e 2026 6c74 3b26 6c74 ; <<\n-0000d240: 3b20 6c61 6265 6c5f 3c2f 6469 763e 0a3c ; label_
.<\n-0000d250: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000d260: 3e3c 6120 6964 3d22 6c30 3032 3934 2220 > 294 <\n-0000d2b0: 3b26 6c74 3b20 3c73 7061 6e20 636c 6173 ;< "\\"]\n-0000d2e0: 5c6e 2671 756f 743b 3c2f 7370 616e 3e3b \\n";\n-0000d2f0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000d340: 2032 3935 3c2f 7370 616e 3e20 2020 2020 295 \n-0000d350: 203c 7370 616e 2063 6c61 7373 3d22 6b65 size_\n-0000d370: 743c 2f73 7061 6e3e 2042 203d 2062 7261 t B = bra\n-0000d380: 6e63 6865 735f 2e73 697a 6528 293b 3c2f nches_.size();.
2\n-0000d3e0: 3936 3c2f 7370 616e 3e20 2020 2020 203c 96 <\n-0000d3f0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000d400: 6f72 6466 6c6f 7722 3e66 6f72 3c2f 7370 ordflow\">for (s\n-0000d430: 697a 655f 743c 2f73 7061 6e3e 2069 203d ize_t i =\n-0000d440: 2030 3b20 6920 266c 743b 2042 3b20 692b 0; i < B; i+\n-0000d450: 2b29 207b 3c2f 6469 763e 0a3c 6469 7620 +) {
.
\n-0000d4a0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0000d4d0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n-0000d530: 3239 373c 2f61 3e3c 2f73 7061 6e3e 2020 297 \n-0000d540: 2020 2020 2020 3c73 7061 6e20 636c 6173 cons\n-0000d560: 743c 2f73 7061 6e3e 203c 6120 636c 6173 t NodePtr\n-0000d5c0: 3c2f 613e 2661 6d70 3b20 6272 616e 6368 & branch\n-0000d5d0: 203d 2062 7261 6e63 6865 735f 5b69 5d3b = branches_[i];\n-0000d5e0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000d630: 2032 3938 3c2f 7370 616e 3e20 3c2f 6469 298 .
299\n-0000d690: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n-0000d6a0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-0000d6b0: 656e 7422 3e2f 2f20 4368 6563 6b20 6966 ent\">// Check if\n-0000d6c0: 207a 6572 6f3c 2f73 7061 6e3e 3c2f 6469 zero.
300\n-0000d720: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n-0000d730: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000d740: 6f72 6466 6c6f 7722 3e69 663c 2f73 7061 ordflow\">if (!showZero) {\n-0000d760: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000d7b0: 2033 3031 3c2f 7370 616e 3e20 2020 2020 301 \n-0000d7c0: 2020 2020 203c 7370 616e 2063 6c61 7373 const\n-0000d7e0: 3c2f 7370 616e 3e20 4c65 6166 2a20 6c65 Leaf* le\n-0000d7f0: 6166 203d 203c 7370 616e 2063 6c61 7373 af = dynam\n-0000d810: 6963 5f63 6173 7426 6c74 3b3c 2f73 7061 ic_cast<const Leaf*\n-0000d860: 2667 743b 3c2f 7370 616e 3e28 6272 616e >(bran\n-0000d870: 6368 2e67 6574 2829 293b 3c2f 6469 763e ch.get());
\n-0000d880: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0000d8b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 302 <\n-0000d8e0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000d8f0: 6f72 6466 6c6f 7722 3e69 663c 2f73 7061 ordflow\">if (leaf &&a\n-0000d910: 6d70 3b20 7661 6c75 6546 6f72 6d61 7474 mp; valueFormatt\n-0000d920: 6572 286c 6561 662d 2667 743b 636f 6e73 er(leaf->cons\n-0000d930: 7461 6e74 2829 292e 636f 6d70 6172 6528 tant()).compare(\n-0000d940: 3c73 7061 6e20 636c 6173 733d 2273 7472 &quo\n-0000d960: 743b 3026 7175 6f74 3b3c 2f73 7061 6e3e t;0"\n-0000d970: 2929 203c 7370 616e 2063 6c61 7373 3d22 )) con\n-0000d990: 7469 6e75 653c 2f73 7061 6e3e 3b3c 2f64 tinue;.
30\n-0000d9f0: 333c 2f73 7061 6e3e 2020 2020 2020 2020 3 \n-0000da00: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
.
\n-0000da50: 2020 3330 343c 2f73 7061 6e3e 203c 2f64 304 .
30\n-0000dab0: 353c 2f73 7061 6e3e 2020 2020 2020 2020 5 \n-0000dac0: 6f73 2026 6c74 3b26 6c74 3b20 3c73 7061 os << "\\&\n-0000daf0: 7175 6f74 3b26 7175 6f74 3b3c 2f73 7061 quot;" << this\n-0000db10: 2d26 6774 3b69 6428 2920 266c 743b 266c ->id() <&l\n-0000db20: 743b 203c 7370 616e 2063 6c61 7373 3d22 t; &\n-0000db40: 7175 6f74 3b5c 2671 756f 743b 202d 2667 quot;\\" -&g\n-0000db50: 743b 205c 2671 756f 743b 2671 756f 743b t; \\""\n-0000db60: 3c2f 7370 616e 3e20 266c 743b 266c 743b <<\n-0000db70: 2062 7261 6e63 682d 2667 743b 6964 2829 branch->id()\n-0000db80: 2026 6c74 3b26 6c74 3b20 3c73 7061 6e20 << "\\&qu\n-0000dbb0: 6f74 3b26 7175 6f74 3b3c 2f73 7061 6e3e ot;"\n-0000dbc0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0000dc10: 2020 3330 363c 2f73 7061 6e3e 2020 2020 306 \n-0000dc20: 2020 2020 3c73 7061 6e20 636c 6173 733d if\n-0000dc40: 3c2f 7370 616e 3e20 2842 203d 3d20 3220 (B == 2 \n-0000dc50: 2661 6d70 3b26 616d 703b 2069 203d 3d20 && i == \n-0000dc60: 3029 206f 7320 266c 743b 266c 743b 203c 0) os << <\n-0000dc70: 7370 616e 2063 6c61 7373 3d22 7374 7269 span class=\"stri\n-0000dc80: 6e67 6c69 7465 7261 6c22 3e26 7175 6f74 ngliteral\">"\n-0000dc90: 3b20 5b73 7479 6c65 3d64 6173 6865 645d ; [style=dashed]\n-0000dca0: 2671 756f 743b 3c2f 7370 616e 3e3b 3c2f ";.
3\n-0000dd00: 3037 3c2f 7370 616e 3e20 2020 2020 2020 07 \n-0000dd10: 206f 7320 266c 743b 266c 743b 2073 7464 os << std\n-0000dd20: 3a3a 656e 646c 3b3c 2f64 6976 3e0a 3c64 ::endl;
.\n-0000dd40: 3c61 2069 643d 226c 3030 3330 3822 206e 308 branch\n-0000dd90: 2d26 6774 3b64 6f74 286f 732c 206c 6162 ->dot(os, lab\n-0000dda0: 656c 466f 726d 6174 7465 722c 2076 616c elFormatter, val\n-0000ddb0: 7565 466f 726d 6174 7465 722c 2073 686f ueFormatter, sho\n-0000ddc0: 775a 6572 6f29 3b3c 2f64 6976 3e0a 3c64 wZero);
.\n-0000dde0: 3c61 2069 643d 226c 3030 3330 3922 206e 309 }
.\n-0000de30: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-0000de90: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 ..
\n-0000dfc0: 2033 3133 3c2f 613e 3c2f 7370 616e 3e20 313 \n-0000dfd0: 2020 203c 7370 616e 2063 6c61 7373 3d22 boo\n-0000dff0: 6c3c 2f73 7061 6e3e 203c 6120 636c 6173 l sameLe\n-0000e050: 6166 3c2f 613e 283c 7370 616e 2063 6c61 af(con\n-0000e070: 7374 3c2f 7370 616e 3e20 3c61 2063 6c61 st Leaf&\n-0000e0b0: 616d 703b 2071 293c 7370 616e 2063 6c61 amp; q) co\n-0000e0d0: 6e73 7420 6f76 6572 7269 6465 203c 2f73 nst override {
..
\n-0000e1c0: 2033 3134 3c2f 613e 3c2f 7370 616e 3e20 314 \n-0000e1d0: 2020 2020 203c 7370 616e 2063 6c61 7373 r\n-0000e1f0: 6574 7572 6e3c 2f73 7061 6e3e 203c 7370 eturn false;\n-0000e220: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000e270: 2033 3135 3c2f 7370 616e 3e20 2020 207d 315 }\n-0000e280: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0000e2d0: 2033 3136 3c2f 7370 616e 3e20 3c2f 6469 316 .
.
318<\n-0000e3c0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> bool \n-0000e3f0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 sameLeaf(const\n-0000e470: 203c 6120 636c 6173 733d 2263 6f64 6520 No\n-0000e4a0: 6465 3c2f 613e 2661 6d70 3b20 7129 3c73 de& q) const overr\n-0000e4d0: 6964 6520 3c2f 7370 616e 3e7b 3c2f 6469 ide {.
319\n-0000e530: 3c2f 7370 616e 3e20 2020 2020 203c 7370 return (q.isLeaf()\n-0000e570: 2026 616d 703b 2661 6d70 3b20 712e 7361 && q.sa\n-0000e580: 6d65 4c65 6166 282a 3c73 7061 6e20 636c meLeaf(*th\n-0000e5a0: 6973 3c2f 7370 616e 3e29 293b 3c2f 6469 is));.
320\n-0000e600: 3c2f 7370 616e 3e20 2020 207d 3c2f 6469 }.
.
321 <\n-0000e670: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
.<\n-0000e6f0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000e700: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 323 bool equals(<\n-0000e7e0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000e7f0: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const N\n-0000e830: 6f64 653c 2f61 3e26 616d 703b 2071 2c20 ode& q, \n-0000e840: 3c73 7061 6e20 636c 6173 733d 226b 6579 const CompareFunc&a\n-0000e870: 6d70 3b20 636f 6d70 6172 6529 3c73 7061 mp; compare) const overrid\n-0000e8a0: 6520 3c2f 7370 616e 3e7b 3c2f 6469 763e e {
\n-0000e8b0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0000e8e0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 324 const Choic\n-0000e960: 653c 2f61 3e2a 206f 7468 6572 203d 203c e* other = <\n-0000e970: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000e980: 6f72 6422 3e64 796e 616d 6963 5f63 6173 ord\">dynamic_cas\n-0000e990: 7426 6c74 3b3c 2f73 7061 6e3e 3c73 7061 t<const <\n-0000e9c0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-0000e9d0: 5f73 7472 7563 7422 2068 7265 663d 2261 _struct\" href=\"a\n-0000e9e0: 3032 3738 302e 6874 6d6c 223e 4368 6f69 02780.html\">Choi\n-0000e9f0: 6365 3c2f 613e 2a3c 7370 616e 2063 6c61 ce*>\n-0000ea10: 3b3c 2f73 7061 6e3e 2826 616d 703b 7129 ;(&q)\n-0000ea20: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0000ea70: 2020 3332 353c 2f73 7061 6e3e 2020 2020 325 \n-0000ea80: 2020 3c73 7061 6e20 636c 6173 733d 226b if (!other) <\n-0000eab0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0000eac0: 6f72 6466 6c6f 7722 3e72 6574 7572 6e3c ordflow\">return<\n-0000ead0: 2f73 7061 6e3e 203c 7370 616e 2063 6c61 /span> fal\n-0000eaf0: 7365 3c2f 7370 616e 3e3b 3c2f 6469 763e se;
\n-0000eb00: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0000eb30: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 326 if (\n-0000eb80: 7468 6973 2d26 6774 3b6c 6162 656c 5f20 this->label_ \n-0000eb90: 213d 206f 7468 6572 2d26 6774 3b3c 6120 != other->la\n-0000ebf0: 6265 6c5f 3c2f 613e 2920 3c73 7061 6e20 bel_) return false;
.<\n-0000ec80: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000ec90: 6e6f 223e 2020 3332 373c 2f73 7061 6e3e no\"> 327\n-0000eca0: 2020 2020 2020 3c73 7061 6e20 636c 6173 \n-0000ecc0: 6966 3c2f 7370 616e 3e20 2862 7261 6e63 if (branc\n-0000ecd0: 6865 735f 2e73 697a 6528 2920 213d 206f hes_.size() != o\n-0000ece0: 7468 6572 2d26 6774 3b3c 6120 636c 6173 ther->branch\n-0000ed40: 6573 5f3c 2f61 3e2e 7369 7a65 2829 2920 es_.size()) \n-0000ed50: 3c73 7061 6e20 636c 6173 733d 226b 6579 return\n-0000ed70: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c fa\n-0000ed90: 6c73 653c 2f73 7061 6e3e 3b3c 2f64 6976 lse;.
328<\n-0000edf0: 2f73 7061 6e3e 2020 2020 2020 3c73 7061 /span> // we don'\n-0000ee20: 7420 6361 7265 2061 626f 7574 2073 6861 t care about sha\n-0000ee30: 7265 6420 706f 696e 7465 7273 2062 6569 red pointers bei\n-0000ee40: 6e67 2065 7175 616c 2068 6572 653c 2f73 ng equal here
.
329 \n-0000eeb0: 2020 2020 203c 7370 616e 2063 6c61 7373 f\n-0000eed0: 6f72 3c2f 7370 616e 3e20 283c 7370 616e or (size_t i = 0; i <\n-0000ef10: 2062 7261 6e63 6865 735f 2e73 697a 6528 branches_.size(\n-0000ef20: 293b 2069 2b2b 293c 2f64 6976 3e0a 3c64 ); i++)
.\n-0000ef40: 3c61 2069 643d 226c 3030 3333 3022 206e 330 if (!\n-0000efb0: 2862 7261 6e63 6865 735f 5b69 5d2d 2667 (branches_[i]-&g\n-0000efc0: 743b 3c61 2063 6c61 7373 3d22 636f 6465 t;e\n-0000eff0: 7175 616c 733c 2f61 3e28 2a28 6f74 6865 quals(*(othe\n-0000f000: 722d 2667 743b 3c61 2063 6c61 7373 3d22 r->branches_\n-0000f060: 3c2f 613e 5b69 5d29 2c20 636f 6d70 6172 [i]), compar\n-0000f070: 6529 2929 3c2f 6469 763e 0a3c 6469 7620 e)))
.
331 \n-0000f0d0: 2020 2020 2020 2020 203c 7370 616e 2063 return\n-0000f100: 203c 7370 616e 2063 6c61 7373 3d22 6b65 false;
.
332 \n-0000f180: 2020 2020 203c 7370 616e 2063 6c61 7373 r\n-0000f1a0: 6574 7572 6e3c 2f73 7061 6e3e 203c 7370 eturn true;<\n-0000f1d0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0000f220: 3333 333c 2f73 7061 6e3e 2020 2020 7d3c 333 }<\n-0000f230: 2f64 6976 3e0a 3c2f 6469 763e 0a3c 6469 /div>.
.<\n-0000f250: 6120 6964 3d22 6c30 3033 3334 2220 6e61 a id=\"l00334\" na\n-0000f260: 6d65 3d22 6c30 3033 3334 223e 3c2f 613e me=\"l00334\">\n-0000f270: 3c73 7061 6e20 636c 6173 733d 226c 696e 334
.
.<\n-0000f2e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000f2f0: 3e3c 6120 6964 3d22 6c30 3033 3336 2220 > 33\n-0000f370: 363c 2f61 3e3c 2f73 7061 6e3e 2020 2020 6 \n-0000f380: 3c73 7061 6e20 636c 6173 733d 226b 6579 const Y& opera\n-0000f400: 746f 7228 293c 2f61 3e28 3c73 7061 6e20 tor()(\n-0000f420: 636f 6e73 743c 2f73 7061 6e3e 203c 6120 const Assignm\n-0000f460: 656e 7426 6c74 3b4c 2667 743b 3c2f 613e ent<L>\n-0000f470: 2661 6d70 3b20 7829 3c73 7061 6e20 636c & x) c\n-0000f490: 6f6e 7374 206f 7665 7272 6964 6520 3c2f onst override {
.<\n-0000f4c0: 6120 6964 3d22 6c30 3033 3337 2220 6e61 a id=\"l00337\" na\n-0000f4d0: 6d65 3d22 6c30 3033 3337 223e 3c2f 613e me=\"l00337\">\n-0000f4e0: 3c73 7061 6e20 636c 6173 733d 226c 696e 337#ifn\n-0000f520: 6465 6620 4e44 4542 5547 3c2f 7370 616e def NDEBUG
.
.\n-0000f590: 3c61 2069 643d 226c 3030 3333 3822 206e 338\n-0000f610: 3c2f 613e 3c2f 7370 616e 3e20 2020 2020 \n-0000f620: 203c 7370 616e 2063 6c61 7373 3d22 6b65 typename<\n-0000f640: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> Assignment<\n-0000f680: 3b4c 2667 743b 3a3a 636f 6e73 745f 6974 ;L>::const_it\n-0000f690: 6572 6174 6f72 3c2f 613e 2069 7420 3d20 erator it = \n-0000f6a0: 782e 6669 6e64 286c 6162 656c 5f29 3b3c x.find(label_);<\n-0000f6b0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0000f700: 3333 393c 2f73 7061 6e3e 2020 2020 2020 339 \n-0000f710: 3c73 7061 6e20 636c 6173 733d 226b 6579 if (it == x.end\n-0000f740: 2829 2920 7b3c 2f64 6976 3e0a 3c64 6976 ()) {
.<\n-0000f780: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000f790: 6e6f 223e 2020 3334 303c 2f73 7061 6e3e no\"> 340
\n-0000f7a0: 2020 2020 2020 2020 7374 643a 3a63 6f75 std::cou\n-0000f7b0: 7420 266c 743b 266c 743b 203c 7370 616e t << "Try\n-0000f7e0: 696e 6720 746f 2066 696e 6420 7661 6c75 ing to find valu\n-0000f7f0: 6520 666f 7220 2671 756f 743b 3c2f 7370 e for " << lab\n-0000f810: 656c 5f20 266c 743b 266c 743b 2073 7464 el_ << std\n-0000f820: 3a3a 656e 646c 3b3c 2f64 6976 3e0a 3c64 ::endl;
..
341 throw \n-0000f940: 7374 643a 3a69 6e76 616c 6964 5f61 7267 std::invalid_arg\n-0000f950: 756d 656e 7428 3c2f 6469 763e 0a3c 6469 ument(
.<\n-0000f970: 6120 6964 3d22 6c30 3033 3432 2220 6e61 a id=\"l00342\" na\n-0000f980: 6d65 3d22 6c30 3033 3432 223e 3c2f 613e me=\"l00342\">\n-0000f990: 3c73 7061 6e20 636c 6173 733d 226c 696e 342 "D\n-0000f9e0: 6563 6973 696f 6e54 7265 653a 3a6f 7065 ecisionTree::ope\n-0000f9f0: 7261 746f 7228 293a 2076 616c 7565 2075 rator(): value u\n-0000fa00: 6e64 6566 696e 6564 2066 6f72 2061 206c ndefined for a l\n-0000fa10: 6162 656c 2671 756f 743b 3c2f 7370 616e abel");
.
343 \n-0000fa80: 2020 2020 7d3c 2f64 6976 3e0a 3c64 6976 }
.<\n-0000fac0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0000fad0: 6e6f 223e 2020 3334 343c 2f73 7061 6e3e no\"> 344\n-0000fae0: 3c73 7061 6e20 636c 6173 733d 2270 7265 #endi\n-0000fb00: 663c 2f73 7061 6e3e 3c2f 6469 763e 0a3c f
.<\n-0000fb10: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0000fb20: 3e3c 6120 6964 3d22 6c30 3033 3435 2220 > 345 size_t\n-0000fb90: 2069 6e64 6578 203d 2078 2e61 7428 6c61 index = x.at(la\n-0000fba0: 6265 6c5f 293b 3c2f 6469 763e 0a3c 6469 bel_);
.<\n-0000fbc0: 6120 6964 3d22 6c30 3033 3436 2220 6e61 a id=\"l00346\" na\n-0000fbd0: 6d65 3d22 6c30 3033 3436 223e 3c2f 613e me=\"l00346\">\n-0000fbe0: 3c73 7061 6e20 636c 6173 733d 226c 696e 346 NodePtr child = branc\n-0000fc70: 6865 735f 5b69 6e64 6578 5d3b 3c2f 6469 hes_[index];.
347\n-0000fcd0: 3c2f 7370 616e 3e20 2020 2020 203c 7370 return (*child)(x)\n-0000fd10: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0000fd60: 2020 3334 383c 2f73 7061 6e3e 2020 2020 348 \n-0000fd70: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
.
\n-0000fdc0: 2020 3334 393c 2f73 7061 6e3e 203c 2f64 349 .
.
351\n-0000feb0: 3c2f 7370 616e 3e20 2020 2043 686f 6963 Choic\n-0000fec0: 6528 3c73 7061 6e20 636c 6173 733d 226b e(const L& labe\n-0000fef0: 6c2c 203c 7370 616e 2063 6c61 7373 3d22 l, const Choice&\n-0000ff20: 3b20 662c 203c 7370 616e 2063 6c61 7373 ; f, const\n-0000ff40: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 Unary& op) :.
352\n-00010000: 3c2f 7370 616e 3e20 2020 2020 206c 6162 lab\n-00010010: 656c 5f28 6c61 6265 6c29 2c20 616c 6c53 el_(label), allS\n-00010020: 616d 655f 2874 7275 6529 207b 3c2f 6469 ame_(true) {.
353\n-00010080: 3c2f 7370 616e 3e20 2020 2020 2062 7261 bra\n-00010090: 6e63 6865 735f 2e72 6573 6572 7665 2866 nches_.reserve(f\n-000100a0: 2e62 7261 6e63 6865 735f 2e73 697a 6528 .branches_.size(\n-000100b0: 2929 3b20 203c 7370 616e 2063 6c61 7373 )); // re\n-000100d0: 7365 7276 6520 7370 6163 653c 2f73 7061 serve space
.
.<\n-00010130: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00010140: 3e3c 6120 6964 3d22 6c30 3033 3534 2220 > 35\n-000101c0: 343c 2f61 3e3c 2f73 7061 6e3e 2020 2020 4 \n-000101d0: 2020 3c73 7061 6e20 636c 6173 733d 226b for<\n-000101f0: 2f73 7061 6e3e 2028 3c73 7061 6e20 636c /span> (co\n-00010210: 6e73 743c 2f73 7061 6e3e 203c 6120 636c nst NodeP\n-00010270: 7472 3c2f 613e 2661 6d70 3b20 6272 616e tr& bran\n-00010280: 6368 203a 2066 2e62 7261 6e63 6865 735f ch : f.branches_\n-00010290: 2920 7b3c 2f64 6976 3e0a 3c64 6976 2063 ) {
.
355 \n-000102f0: 2020 2020 2020 7075 7368 5f62 6163 6b28 push_back(\n-00010300: 6272 616e 6368 2d26 6774 3b61 7070 6c79 branch->apply\n-00010310: 286f 7029 293b 3c2f 6469 763e 0a3c 6469 (op));
.<\n-00010330: 6120 6964 3d22 6c30 3033 3536 2220 6e61 a id=\"l00356\" na\n-00010340: 6d65 3d22 6c30 3033 3536 223e 3c2f 613e me=\"l00356\">\n-00010350: 3c73 7061 6e20 636c 6173 733d 226c 696e 356 }
.<\n-00010380: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00010390: 3e3c 6120 6964 3d22 6c30 3033 3537 2220 > 357 }
.<\n-000103e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000103f0: 3e3c 6120 6964 3d22 6c30 3033 3538 2220 > 358
.
\n-00010480: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-000104b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n-00010510: 3336 393c 2f61 3e3c 2f73 7061 6e3e 2020 369 \n-00010520: 2020 3c61 2063 6c61 7373 3d22 636f 6465 Choice(const\n-000105a0: 204c 2661 6d70 3b20 6c61 6265 6c2c 203c L& label, <\n-000105b0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-000105c0: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const C\n-00010600: 686f 6963 653c 2f61 3e26 616d 703b 2066 hoice& f\n-00010610: 2c20 3c73 7061 6e20 636c 6173 733d 226b , const UnaryAssign\n-00010640: 6d65 6e74 2661 6d70 3b20 6f70 2c3c 2f64 ment& op,.
37\n-000106a0: 303c 2f73 7061 6e3e 2020 2020 2020 2020 0 \n-000106b0: 2020 203c 7370 616e 2063 6c61 7373 3d22 const Assignment<\n-00010710: 4c26 6774 3b3c 2f61 3e26 616d 703b 2061 L>& a\n-00010720: 7373 6967 6e6d 656e 7429 3c2f 6469 763e ssignment)
\n-00010730: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00010760: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 371 : l\n-00010790: 6162 656c 5f28 6c61 6265 6c29 2c20 616c abel_(label), al\n-000107a0: 6c53 616d 655f 2874 7275 6529 207b 3c2f lSame_(true) {.
3\n-00010800: 3732 3c2f 7370 616e 3e20 2020 2020 2062 72 b\n-00010810: 7261 6e63 6865 735f 2e72 6573 6572 7665 ranches_.reserve\n-00010820: 2866 2e3c 6120 636c 6173 733d 2263 6f64 (f.branches_.size()); // reserve spa\n-000108b0: 6365 3c2f 7370 616e 3e3c 2f64 6976 3e0a ce
.\n-000108c0: 3c64 6976 2063 6c61 7373 3d22 666f 6c64
.
373
.
374 \n-00010a00: 2020 2020 203c 6120 636c 6173 733d 2263 Assignment<L\n-00010a40: 2667 743b 3c2f 613e 2061 7373 6967 6e6d > assignm\n-00010a50: 656e 745f 203d 2061 7373 6967 6e6d 656e ent_ = assignmen\n-00010a60: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
.
375 .
3\n-00010b10: 3736 3c2f 7370 616e 3e20 2020 2020 203c 76 <\n-00010b20: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00010b30: 6f72 6466 6c6f 7722 3e66 6f72 3c2f 7370 ordflow\">for (s\n-00010b60: 697a 655f 743c 2f73 7061 6e3e 2069 203d ize_t i =\n-00010b70: 2030 3b20 6920 266c 743b 2066 2e3c 6120 0; i < f.br\n-00010bd0: 616e 6368 6573 5f3c 2f61 3e2e 7369 7a65 anches_.size\n-00010be0: 2829 3b20 692b 2b29 207b 3c2f 6469 763e (); i++) {
\n-00010bf0: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
.
<\n-00010c80: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-00010c90: 7265 663d 2261 3032 3739 362e 6874 6d6c ref=\"a02796.html\n-00010ca0: 2361 6364 6366 3732 3439 3966 3230 6437 #acdcf72499f20d7\n-00010cb0: 3935 3835 6134 3332 3239 3834 3862 3138 9585a43229848b18\n-00010cc0: 3433 223e 2020 3337 373c 2f61 3e3c 2f73 43\"> 377 assi\n-00010ce0: 676e 6d65 6e74 5f5b 6c61 6265 6c5f 5d20 gnment_[label_] \n-00010cf0: 3d20 693b 2020 3c73 7061 6e20 636c 6173 = i; // S\n-00010d10: 6574 2061 7373 6967 6e6d 656e 7420 666f et assignment fo\n-00010d20: 7220 6c61 6265 6c20 746f 2069 3c2f 7370 r label to i
.
378 <\n-00010d90: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00010de0: 3337 393c 2f73 7061 6e3e 2020 2020 2020 379 \n-00010df0: 2020 3c73 7061 6e20 636c 6173 733d 226b const NodePtr\n-00010e70: 2062 7261 6e63 6820 3d20 662e 3c61 2063 branch = f.bra\n-00010ed0: 6e63 6865 735f 3c2f 613e 5b69 5d3b 3c2f nches_[i];.\n-00011240: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00011270: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 385 }.
386\n-000112f0: 3c2f 7370 616e 3e20 2020 207d 3c2f 6469 }.
387\n-00011350: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-00011360: 6469 7620 636c 6173 733d 2266 6f6c 646f div class=\"foldo\n-00011370: 7065 6e22 2069 643d 2266 6f6c 646f 7065 pen\" id=\"foldope\n-00011380: 6e30 3033 3839 2220 6461 7461 2d73 7461 n00389\" data-sta\n-00011390: 7274 3d22 7b22 2064 6174 612d 656e 643d rt=\"{\" data-end=\n-000113a0: 227d 223e 0a3c 6469 7620 636c 6173 733d \"}\">.
389 NodePtr apply(const \n-00011520: 3c61 2063 6c61 7373 3d22 636f 6465 2068 \n-00011570: 556e 6172 793c 2f61 3e26 616d 703b 206f Unary& o\n-00011580: 7029 3c73 7061 6e20 636c 6173 733d 226b p) const o\n-000115a0: 7665 7272 6964 6520 3c2f 7370 616e 3e7b verride {\n-000115b0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00011600: 2033 3930 3c2f 7370 616e 3e20 2020 2020 390 \n-00011610: 203c 7370 616e 2063 6c61 7373 3d22 6b65 auto r = boost::ma\n-00011640: 6b65 5f73 6861 7265 6426 6c74 3b43 686f ke_shared<Cho\n-00011650: 6963 6526 6774 3b28 6c61 6265 6c5f 2c20 ice>(label_, \n-00011660: 2a3c 7370 616e 2063 6c61 7373 3d22 6b65 *this, op);
.<\n-00011690: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000116a0: 3e3c 6120 6964 3d22 6c30 3033 3931 2220 > 391 return\n-00011710: 2055 6e69 7175 6528 7229 3b3c 2f64 6976 Unique(r);.
392<\n-00011770: 2f73 7061 6e3e 2020 2020 7d3c 2f64 6976 /span> }.
.
393 .
.
395 Node\n-00011920: 5074 723c 2f61 3e20 3c61 2063 6c61 7373 Ptr apply(const UnaryAssig\n-000119b0: 6e6d 656e 7426 616d 703b 206f 702c 3c2f nment& op,.
3\n-00011a10: 3936 3c2f 7370 616e 3e20 2020 2020 2020 96 \n-00011a20: 2020 2020 2020 2020 2020 203c 7370 616e const Assign\n-00011a80: 6d65 6e74 266c 743b 4c26 6774 3b3c 2f61 ment<L>& assignmen\n-00011aa0: 7429 3c73 7061 6e20 636c 6173 733d 226b t) const o\n-00011ac0: 7665 7272 6964 6520 3c2f 7370 616e 3e7b verride {\n-00011ad0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00011b20: 2033 3937 3c2f 7370 616e 3e20 2020 2020 397 \n-00011b30: 203c 7370 616e 2063 6c61 7373 3d22 6b65 auto r = boost::ma\n-00011b60: 6b65 5f73 6861 7265 6426 6c74 3b43 686f ke_shared<Cho\n-00011b70: 6963 6526 6774 3b28 6c61 6265 6c5f 2c20 ice>(label_, \n-00011b80: 2a3c 7370 616e 2063 6c61 7373 3d22 6b65 *this, op, assignme\n-00011bb0: 6e74 293b 3c2f 6469 763e 0a3c 6469 7620 nt);
.
398 \n-00011c10: 2020 2020 203c 7370 616e 2063 6c61 7373 r\n-00011c30: 6574 7572 6e3c 2f73 7061 6e3e 2055 6e69 eturn Uni\n-00011c40: 7175 6528 7229 3b3c 2f64 6976 3e0a 3c64 que(r);
.\n-00011c60: 3c61 2069 643d 226c 3030 3339 3922 206e 399 }
..
4\n-00011d00: 3030 3c2f 7370 616e 3e20 3c2f 6469 763e 00
\n-00011d10: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00011d40: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 401 /\n-00011d80: 2f20 4170 706c 7920 6269 6e61 7279 206f / Apply binary o\n-00011d90: 7065 7261 746f 7220 2671 756f 743b 6820 perator "h \n-00011da0: 3d20 6620 6f70 2067 2671 756f 743b 206f = f op g" o\n-00011db0: 6e20 4368 6f69 6365 206e 6f64 653c 2f73 n Choice node
.
402 \n-00011e20: 2020 203c 7370 616e 2063 6c61 7373 3d22 // Note\n-00011e40: 206f 7020 6973 206e 6f74 2061 7373 756d op is not assum\n-00011e50: 6564 2063 6f6d 6d75 7461 7469 7665 2073 ed commutative s\n-00011e60: 6f20 7765 206e 6565 6420 746f 206b 6565 o we need to kee\n-00011e70: 7020 7472 6163 6b20 6f66 206f 7264 6572 p track of order\n-00011e80: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-00011ea0: 3c61 2069 643d 226c 3030 3430 3322 206e 403 // S\n-00011f00: 696d 706c 7920 6361 6c6c 7320 6170 706c imply calls appl\n-00011f10: 7920 6f6e 2061 7267 756d 656e 7420 746f y on argument to\n-00011f20: 2063 616c 6c20 636f 7272 6563 7420 7669 call correct vi\n-00011f30: 7274 7561 6c20 6d65 7468 6f64 3a3c 2f73 rtual method:
.
404 \n-00011fa0: 2020 203c 7370 616e 2063 6c61 7373 3d22 // fC.a\n-00011fc0: 7070 6c79 5f66 5f6f 705f 6728 674c 2920 pply_f_op_g(gL) \n-00011fd0: 2d26 6774 3b20 674c 2e61 7070 6c79 5f67 -> gL.apply_g\n-00011fe0: 5f6f 705f 6643 2866 4329 202d 2667 743b _op_fC(fC) ->\n-00011ff0: 2028 4c65 6166 293c 2f73 7061 6e3e 3c2f (Leaf).
4\n-00012050: 3035 3c2f 7370 616e 3e20 2020 203c 7370 05 // fC.apply_f\n-00012080: 5f6f 705f 6728 6743 2920 2d26 6774 3b20 _op_g(gC) -> \n-00012090: 6743 2e61 7070 6c79 5f67 5f6f 705f 6643 gC.apply_g_op_fC\n-000120a0: 2866 4329 202d 2667 743b 2028 6265 6c6f (fC) -> (belo\n-000120b0: 7729 3c2f 7370 616e 3e3c 2f64 6976 3e0a w)
.\n-000120c0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-000120f0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 406 NodePtr<\n-00012170: 2f61 3e20 6170 706c 795f 665f 6f70 5f67 /a> apply_f_op_g\n-00012180: 283c 7370 616e 2063 6c61 7373 3d22 6b65 (const Node& g\n-000121e0: 2c20 3c73 7061 6e20 636c 6173 733d 226b , const Binary&\n-00012210: 206f 7029 3c73 7061 6e20 636c 6173 733d op) const\n-00012230: 206f 7665 7272 6964 6520 3c2f 7370 616e override {
.
407 \n-000122a0: 2020 203c 7370 616e 2063 6c61 7373 3d22 ret\n-000122c0: 7572 6e3c 2f73 7061 6e3e 2067 2e61 7070 urn g.app\n-000122d0: 6c79 5f67 5f6f 705f 6643 282a 3c73 7061 ly_g_op_fC(*this, o\n-00012300: 7029 3b3c 2f64 6976 3e0a 3c64 6976 2063 p);
.
408 \n-00012360: 2020 7d3c 2f64 6976 3e0a 3c64 6976 2063 }
.
409 <\n-000123c0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00012410: 3431 303c 2f73 7061 6e3e 2020 2020 3c73 410 // If second\n-00012440: 2061 7267 756d 656e 7420 6f66 2062 696e argument of bin\n-00012450: 6172 7920 6f70 2069 7320 4c65 6166 206e ary op is Leaf n\n-00012460: 6f64 652c 2072 6563 7572 7365 206f 6e20 ode, recurse on \n-00012470: 6272 616e 6368 6573 3c2f 7370 616e 3e3c branches<\n-00012480: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-000124d0: 3431 313c 2f73 7061 6e3e 2020 2020 3c61 411 No\n-00012530: 6465 5074 723c 2f61 3e20 6170 706c 795f dePtr apply_\n-00012540: 675f 6f70 5f66 4c28 3c73 7061 6e20 636c g_op_fL(co\n-00012560: 6e73 743c 2f73 7061 6e3e 204c 6561 6626 nst Leaf&\n-00012570: 616d 703b 2066 4c2c 203c 7370 616e 2063 amp; fL, c\n-00012590: 6f6e 7374 3c2f 7370 616e 3e20 4269 6e61 onst Bina\n-000125a0: 7279 2661 6d70 3b20 6f70 293c 7370 616e ry& op) const override\n-000125d0: 203c 2f73 7061 6e3e 7b3c 2f64 6976 3e0a {
.\n-000125e0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-000126b0: 3c61 2069 643d 226c 3030 3431 3322 206e 413 for (auto&\n-00012740: 616d 703b 2661 6d70 3b20 6272 616e 6368 amp;& branch\n-00012750: 203a 2062 7261 6e63 6865 735f 293c 2f64 : branches_).
41\n-000127b0: 343c 2f73 7061 6e3e 2020 2020 2020 2020 4 \n-000127c0: 682d 2667 743b 7075 7368 5f62 6163 6b28 h->push_back(\n-000127d0: 664c 2e61 7070 6c79 5f66 5f6f 705f 6728 fL.apply_f_op_g(\n-000127e0: 2a62 7261 6e63 682c 206f 7029 293b 3c2f *branch, op));.
4\n-00012840: 3135 3c2f 7370 616e 3e20 2020 2020 203c 15 <\n-00012850: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00012860: 6f72 6466 6c6f 7722 3e72 6574 7572 6e3c ordflow\">return<\n-00012870: 2f73 7061 6e3e 2055 6e69 7175 6528 6829 /span> Unique(h)\n-00012880: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-000128d0: 2020 3431 363c 2f73 7061 6e3e 2020 2020 416 \n-000128e0: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
.
\n-00012930: 2020 3431 373c 2f73 7061 6e3e 203c 2f64 417 .
41\n-00012990: 383c 2f73 7061 6e3e 2020 2020 3c73 7061 8 // If second a\n-000129c0: 7267 756d 656e 7420 6f66 2062 696e 6172 rgument of binar\n-000129d0: 7920 6f70 2069 7320 4368 6f69 6365 2c20 y op is Choice, \n-000129e0: 6361 6c6c 2063 6f6e 7374 7275 6374 6f72 call constructor\n-000129f0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-00012a10: 3c61 2069 643d 226c 3030 3431 3922 206e 419 NodePtr apply_g_op_fC(\n-00012ac0: 3c73 7061 6e20 636c 6173 733d 226b 6579 const Choice& f\n-00012af0: 432c 203c 7370 616e 2063 6c61 7373 3d22 C, const Binary&\n-00012b20: 3b20 6f70 293c 7370 616e 2063 6c61 7373 ; op) cons\n-00012b40: 7420 6f76 6572 7269 6465 203c 2f73 7061 t override {
.
420 \n-00012bb0: 2020 2020 3c73 7061 6e20 636c 6173 733d auto h = boost:\n-00012be0: 3a6d 616b 655f 7368 6172 6564 266c 743b :make_shared<\n-00012bf0: 4368 6f69 6365 2667 743b 2866 432c 202a Choice>(fC, *\n-00012c00: 3c73 7061 6e20 636c 6173 733d 226b 6579 this, op);
.\n-00012c40: 3c61 2069 643d 226c 3030 3432 3122 206e 421 return \n-00012cb0: 556e 6971 7565 2868 293b 3c2f 6469 763e Unique(h);
\n-00012cc0: 0a3c 6469 7620 636c 6173 733d 226c 696e .\n-00012d20: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00012d90: 6120 6964 3d22 6c30 3034 3234 2220 6e61 a id=\"l00424\" na\n-00012da0: 6d65 3d22 6c30 3034 3234 223e 3c2f 613e me=\"l00424\">\n-00012db0: 3c73 7061 6e20 636c 6173 733d 226c 696e 424 // If\n-00012df0: 2073 6563 6f6e 6420 6172 6775 6d65 6e74 second argument\n-00012e00: 206f 6620 6269 6e61 7279 206f 7020 6973 of binary op is\n-00012e10: 204c 6561 663c 2f73 7061 6e3e 3c2f 6469 Leaf.
425\n-00012e70: 3c2f 7370 616e 3e20 2020 203c 7370 616e template\n-00012ea0: 266c 743b 3c73 7061 6e20 636c 6173 733d <typena\n-00012ec0: 6d65 3c2f 7370 616e 3e20 4f50 2667 743b me OP>\n-00012ed0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00012f20: 2034 3236 3c2f 7370 616e 3e20 2020 203c 426 <\n-00012f30: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00012f40: 5f74 7970 6564 6566 2220 6872 6566 3d22 _typedef\" href=\"\n-00012f50: 6130 3237 3936 2e68 746d 6c23 6133 3661 a02796.html#a36a\n-00012f60: 3938 6636 3162 3062 3764 6630 3432 3432 98f61b0b7df04242\n-00012f70: 3762 3133 3262 3331 3364 3766 6422 3e4e 7b132b313d7fd\">N\n-00012f80: 6f64 6550 7472 3c2f 613e 2061 7070 6c79 odePtr apply\n-00012f90: 5f66 435f 6f70 5f67 4c28 3c73 7061 6e20 _fC_op_gL(\n-00012fb0: 636f 6e73 743c 2f73 7061 6e3e 204c 6561 const Lea\n-00012fc0: 6626 616d 703b 2067 4c2c 204f 5020 6f70 f& gL, OP op\n-00012fd0: 293c 7370 616e 2063 6c61 7373 3d22 6b65 ) const {
.<\n-00013010: 6120 6964 3d22 6c30 3034 3237 2220 6e61 a id=\"l00427\" na\n-00013020: 6d65 3d22 6c30 3034 3237 223e 3c2f 613e me=\"l00427\">\n-00013030: 3c73 7061 6e20 636c 6173 733d 226c 696e 427 aut\n-00013070: 6f3c 2f73 7061 6e3e 2068 203d 2062 6f6f o h = boo\n-00013080: 7374 3a3a 6d61 6b65 5f73 6861 7265 6426 st::make_shared&\n-00013090: 6c74 3b43 686f 6963 6526 6774 3b28 6c61 lt;Choice>(la\n-000130a0: 6265 6c28 292c 206e 7243 686f 6963 6573 bel(), nrChoices\n-000130b0: 2829 293b 3c2f 6469 763e 0a3c 6469 7620 ());
.
428 \n-00013110: 2020 2020 203c 7370 616e 2063 6c61 7373 f\n-00013130: 6f72 3c2f 7370 616e 3e20 283c 7370 616e or (auto&\n-00013160: 3b26 616d 703b 2062 7261 6e63 6820 3a20 ;& branch : \n-00013170: 6272 616e 6368 6573 5f29 3c2f 6469 763e branches_)
\n-00013180: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-000131b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 429 h-&\n-000131e0: 6774 3b70 7573 685f 6261 636b 2862 7261 gt;push_back(bra\n-000131f0: 6e63 682d 2667 743b 6170 706c 795f 665f nch->apply_f_\n-00013200: 6f70 5f67 2867 4c2c 206f 7029 293b 3c2f op_g(gL, op));.
4\n-00013260: 3330 3c2f 7370 616e 3e20 2020 2020 203c 30 <\n-00013270: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00013280: 6f72 6466 6c6f 7722 3e72 6574 7572 6e3c ordflow\">return<\n-00013290: 2f73 7061 6e3e 2055 6e69 7175 6528 6829 /span> Unique(h)\n-000132a0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-000132f0: 2020 3433 313c 2f73 7061 6e3e 2020 2020 431 \n-00013300: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
.
\n-00013350: 2020 3433 323c 2f73 7061 6e3e 203c 2f64 432 .
..
\n-000135e0: 2034 3335 3c2f 7370 616e 3e20 2020 2020 435 \n-000135f0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 if (label_ == \n-00013620: 6c61 6265 6c29 203c 7370 616e 2063 6c61 label) return b\n-00013650: 7261 6e63 6865 735f 5b69 6e64 6578 5d3b ranches_[index];\n-00013660: 2020 3c73 7061 6e20 636c 6173 733d 2263 // choos\n-00013680: 6520 6272 616e 6368 3c2f 7370 616e 3e3c e branch<\n-00013690: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-000136e0: 3433 363c 2f73 7061 6e3e 203c 2f64 6976 436 .
437<\n-00013740: 2f73 7061 6e3e 2020 2020 2020 3c73 7061 /span> // second case\n-00013770: 2c20 6e6f 7420 6c61 6265 6c20 6f66 2069 , not label of i\n-00013780: 6e74 6572 6573 742c 206a 7573 7420 7265 nterest, just re\n-00013790: 6375 7273 653c 2f73 7061 6e3e 3c2f 6469 curse.
438\n-000137f0: 3c2f 7370 616e 3e20 2020 2020 203c 7370 auto r\n-00013820: 203d 2062 6f6f 7374 3a3a 6d61 6b65 5f73 = boost::make_s\n-00013830: 6861 7265 6426 6c74 3b43 686f 6963 6526 hared<Choice&\n-00013840: 6774 3b28 6c61 6265 6c5f 2c20 6272 616e gt;(label_, bran\n-00013850: 6368 6573 5f2e 7369 7a65 2829 293b 3c2f ches_.size());.
4\n-000138b0: 3339 3c2f 7370 616e 3e20 2020 2020 203c 39 <\n-000138c0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-000138d0: 6f72 6466 6c6f 7722 3e66 6f72 3c2f 7370 ordflow\">for (auto<\n-00013900: 2f73 7061 6e3e 2661 6d70 3b26 616d 703b /span>&&\n-00013910: 2062 7261 6e63 6820 3a20 6272 616e 6368 branch : branch\n-00013920: 6573 5f29 3c2f 6469 763e 0a3c 6469 7620 es_)
.
440 \n-00013980: 2020 2020 2020 2072 2d26 6774 3b70 7573 r->pus\n-00013990: 685f 6261 636b 2862 7261 6e63 682d 2667 h_back(branch-&g\n-000139a0: 743b 6368 6f6f 7365 286c 6162 656c 2c20 t;choose(label, \n-000139b0: 696e 6465 7829 293b 3c2f 6469 763e 0a3c index));
.<\n-000139c0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000139d0: 3e3c 6120 6964 3d22 6c30 3034 3431 2220 > 441 return\n-00013a40: 2055 6e69 7175 6528 7229 3b3c 2f64 6976 Unique(r);.
442<\n-00013aa0: 2f73 7061 6e3e 2020 2020 7d3c 2f64 6976 /span> }.
.
443 .
4\n-00013b60: 3434 3c2f 7370 616e 3e20 2020 3c73 7061 44 private\n-00013b90: 3a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 :
.
\n-00013be0: 2020 3434 353c 2f73 7061 6e3e 2020 2020 445 \n-00013bf0: 3c73 7061 6e20 636c 6173 733d 226b 6579 using Base = DecisionT\n-00013c50: 7265 6526 6c74 3b4c 2c20 5926 6774 3b3a ree<L, Y>:\n-00013c60: 3a4e 6f64 653c 2f61 3e3b 3c2f 6469 763e :Node;
\n-00013c70: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00013ce0: 6120 6964 3d22 6c30 3034 3438 2220 6e61 a id=\"l00448\" na\n-00013cf0: 6d65 3d22 6c30 3034 3438 223e 3c2f 613e me=\"l00448\">\n-00013d00: 3c73 7061 6e20 636c 6173 733d 226c 696e 448 frien\n-00013d40: 643c 2f73 7061 6e3e 203c 7370 616e 2063 d c\n-00013d60: 6c61 7373 203c 2f73 7061 6e3e 3c61 2063 lass boost\n-00013dc0: 3a3a 7365 7269 616c 697a 6174 696f 6e3a ::serialization:\n-00013dd0: 3a61 6363 6573 733c 2f61 3e3b 3c2f 6469 :access;.
449\n-00013e30: 3c2f 7370 616e 3e20 2020 203c 7370 616e template\n-00013e60: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <class\n-00013e80: 3c2f 7370 616e 3e20 4152 4348 4956 4526 ARCHIVE&\n-00013e90: 6774 3b3c 2f64 6976 3e0a 3c64 6976 2063 gt;
.
450 \n-00013ef0: 2020 3c73 7061 6e20 636c 6173 733d 226b void\n-00013f10: 3c2f 7370 616e 3e20 7365 7269 616c 697a serializ\n-00013f20: 6528 4152 4348 4956 4526 616d 703b 2061 e(ARCHIVE& a\n-00013f30: 722c 203c 7370 616e 2063 6c61 7373 3d22 r, const \n-00013f70: 756e 7369 676e 6564 3c2f 7370 616e 3e20 unsigned \n-00013f80: 3c73 7061 6e20 636c 6173 733d 226b 6579 int /*ver\n-00013fc0: 7369 6f6e 2a2f 3c2f 7370 616e 3e29 207b sion*/) {\n-00013fd0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00014020: 2034 3531 3c2f 7370 616e 3e20 2020 2020 451 \n-00014030: 2061 7220 2661 6d70 3b20 424f 4f53 545f ar & BOOST_\n-00014040: 5345 5249 414c 495a 4154 494f 4e5f 4241 SERIALIZATION_BA\n-00014050: 5345 5f4f 424a 4543 545f 4e56 5028 4261 SE_OBJECT_NVP(Ba\n-00014060: 7365 293b 3c2f 6469 763e 0a3c 6469 7620 se);
.
452 \n-000140c0: 2020 2020 2061 7226 616d 703b 2042 4f4f ar& BOO\n-000140d0: 5354 5f53 4552 4941 4c49 5a41 5449 4f4e ST_SERIALIZATION\n-000140e0: 5f4e 5650 286c 6162 656c 5f29 3b3c 2f64 _NVP(label_);.
45\n-00014140: 333c 2f73 7061 6e3e 2020 2020 2020 6172 3 ar\n-00014150: 2661 6d70 3b20 424f 4f53 545f 5345 5249 & BOOST_SERI\n-00014160: 414c 495a 4154 494f 4e5f 4e56 5028 6272 ALIZATION_NVP(br\n-00014170: 616e 6368 6573 5f29 3b3c 2f64 6976 3e0a anches_);
.\n-00014180: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
455 \n-00014260: 2020 207d 3c2f 6469 763e 0a3c 6469 7620 }
..
\n-000145b0: 2034 3631 3c2f 7370 616e 3e20 203c 7370 461 template<type\n-00014600: 6e61 6d65 3c2f 7370 616e 3e20 4c2c 203c name L, <\n-00014610: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00014620: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename Y>
\n-00014640: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
.
<\n-000146d0: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-000146e0: 7265 663d 2261 3032 3739 362e 6874 6d6c ref=\"a02796.html\n-000146f0: 2361 6632 3930 6664 6232 3962 6232 3534 #af290fdb29bb254\n-00014700: 6535 3162 6661 3239 3532 3038 3635 3562 e51bfa295208655b\n-00014710: 6366 223e 2020 3436 323c 2f61 3e3c 2f73 cf\"> 462 DecisionT\n-00014780: 7265 6526 6c74 3b4c 2c20 5926 6774 3b3a ree<L, Y>:\n-00014790: 3a44 6563 6973 696f 6e54 7265 653c 2f61 :DecisionTree() {
.<\n-000147e0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000147f0: 6e6f 223e 2020 3436 333c 2f73 7061 6e3e no\"> 463\n-00014800: 2020 7d3c 2f64 6976 3e0a 3c2f 6469 763e }
.
\n-00014810: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00014880: 6120 6964 3d22 6c30 3034 3635 2220 6e61 a id=\"l00465\" na\n-00014890: 6d65 3d22 6c30 3034 3635 223e 3c2f 613e me=\"l00465\">\n-000148a0: 3c73 7061 6e20 636c 6173 733d 226c 696e 465 templat\n-000148e0: 653c 2f73 7061 6e3e 266c 743b 3c73 7061 e<typename L, typen\n-00014930: 616d 653c 2f73 7061 6e3e 2059 2667 743b ame Y>\n-00014940: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00014990: 2034 3636 3c2f 7370 616e 3e20 203c 6120 466 De\n-000149f0: 6369 7369 6f6e 5472 6565 266c 743b 4c2c cisionTree<L,\n-00014a00: 2059 2667 743b 3a3a 4465 6369 7369 6f6e Y>::Decision\n-00014a10: 5472 6565 3c2f 613e 283c 7370 616e 2063 Tree(c\n-00014a30: 6f6e 7374 3c2f 7370 616e 3e20 4e6f 6465 onst Node\n-00014a40: 5074 7226 616d 703b 2072 6f6f 7429 203a Ptr& root) :\n-00014a50: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00014aa0: 2034 3637 3c2f 7370 616e 3e20 2020 2072 467 r\n-00014ab0: 6f6f 745f 2872 6f6f 7429 207b 3c2f 6469 oot_(root) {.
468\n-00014b10: 3c2f 7370 616e 3e20 207d 3c2f 6469 763e }
\n-00014b20: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00014b90: 6120 6964 3d22 6c30 3034 3730 2220 6e61 a id=\"l00470\" na\n-00014ba0: 6d65 3d22 6c30 3034 3730 223e 3c2f 613e me=\"l00470\">\n-00014bb0: 3c73 7061 6e20 636c 6173 733d 226c 696e 470 /******\n-00014bf0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00014c00: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00014c10: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00014c20: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00014c30: 2a2a 2a2a 2a2a 2f3c 2f73 7061 6e3e 3c2f ******/.
4\n-00014c90: 3731 3c2f 7370 616e 3e20 203c 7370 616e 71 template\n-00014cc0: 266c 743b 3c73 7061 6e20 636c 6173 733d <typena\n-00014ce0: 6d65 3c2f 7370 616e 3e20 4c2c 203c 7370 me L, typename Y>
.<\n-00014d20: 6469 7620 636c 6173 733d 2266 6f6c 646f div class=\"foldo\n-00014d30: 7065 6e22 2069 643d 2266 6f6c 646f 7065 pen\" id=\"foldope\n-00014d40: 6e30 3034 3732 2220 6461 7461 2d73 7461 n00472\" data-sta\n-00014d50: 7274 3d22 7b22 2064 6174 612d 656e 643d rt=\"{\" data-end=\n-00014d60: 227d 223e 0a3c 6469 7620 636c 6173 733d \"}\">.
472 DecisionTre\n-00014e60: 6526 6c74 3b4c 2c20 5926 6774 3b3a 3a44 e<L, Y>::D\n-00014e70: 6563 6973 696f 6e54 7265 653c 2f61 3e28 ecisionTree(\n-00014e80: 3c73 7061 6e20 636c 6173 733d 226b 6579 const Y& y) {<\n-00014eb0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00014f00: 3437 333c 2f73 7061 6e3e 2020 2020 726f 473 ro\n-00014f10: 6f74 5f20 3d20 3c61 2063 6c61 7373 3d22 ot_ = NodePtr(new \n-00014fc0: 4c65 6166 3c2f 613e 2879 2929 3b3c 2f64 Leaf(y));.
47\n-00015020: 343c 2f73 7061 6e3e 2020 7d3c 2f64 6976 4 }.
.
475 .
4\n-000150e0: 3736 3c2f 7370 616e 3e3c 7370 616e 2063 76 \n-00015100: 202f 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a /**************\n-00015110: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00015120: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00015130: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00015140: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2f3c **************/<\n-00015150: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-00015170: 6120 6964 3d22 6c30 3034 3737 2220 6e61 a id=\"l00477\" na\n-00015180: 6d65 3d22 6c30 3034 3737 223e 3c2f 613e me=\"l00477\">\n-00015190: 3c73 7061 6e20 636c 6173 733d 226c 696e 477 templat\n-000151d0: 653c 2f73 7061 6e3e 2026 6c74 3b3c 7370 e <typename L, type\n-00015220: 6e61 6d65 3c2f 7370 616e 3e20 5926 6774 name Y>\n-00015230: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
.\n-00015290: 3c61 2069 643d 226c 3030 3437 3822 206e 478\n-00015310: 3c2f 613e 3c2f 7370 616e 3e20 203c 6120 De\n-00015370: 6369 7369 6f6e 5472 6565 266c 743b 4c2c cisionTree<L,\n-00015380: 2059 2667 743b 3a3a 4465 6369 7369 6f6e Y>::Decision\n-00015390: 5472 6565 3c2f 613e 283c 7370 616e 2063 Tree(c\n-000153b0: 6f6e 7374 3c2f 7370 616e 3e20 4c26 616d onst L&am\n-000153c0: 703b 206c 6162 656c 2c20 3c73 7061 6e20 p; label, \n-000153e0: 636f 6e73 743c 2f73 7061 6e3e 2059 2661 const Y&a\n-000153f0: 6d70 3b20 7931 2c20 3c73 7061 6e20 636c mp; y1, co\n-00015410: 6e73 743c 2f73 7061 6e3e 2059 2661 6d70 nst Y&\n-00015420: 3b20 7932 2920 7b3c 2f64 6976 3e0a 3c64 ; y2) {
.\n-00015440: 3c61 2069 643d 226c 3030 3437 3922 206e 479 auto\n-000154a0: 3c2f 7370 616e 3e20 6120 3d20 626f 6f73 a = boos\n-000154b0: 743a 3a6d 616b 655f 7368 6172 6564 266c t::make_shared&l\n-000154c0: 743b 4368 6f69 6365 2667 743b 286c 6162 t;Choice>(lab\n-000154d0: 656c 2c20 3229 3b3c 2f64 6976 3e0a 3c64 el, 2);
.\n-000154f0: 3c61 2069 643d 226c 3030 3438 3022 206e 480 NodePtr l1(new Leaf(y1))\n-000155f0: 2c20 6c32 283c 7370 616e 2063 6c61 7373 , l2(new Leaf(y2))\n-00015650: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-000156a0: 2020 3438 313c 2f73 7061 6e3e 2020 2020 481 \n-000156b0: 612d 2667 743b 7075 7368 5f62 6163 6b28 a->push_back(\n-000156c0: 6c31 293b 3c2f 6469 763e 0a3c 6469 7620 l1);
.
482 \n-00015720: 2020 2061 2d26 6774 3b70 7573 685f 6261 a->push_ba\n-00015730: 636b 286c 3229 3b3c 2f64 6976 3e0a 3c64 ck(l2);
.\n-00015750: 3c61 2069 643d 226c 3030 3438 3322 206e 483 root_ = Ch\n-000157a0: 6f69 6365 3a3a 556e 6971 7565 2861 293b oice::Unique(a);\n-000157b0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00015800: 2034 3834 3c2f 7370 616e 3e20 207d 3c2f 484 }.
.<\n-00015850: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00015860: 6e6f 223e 2020 3438 353c 2f73 7061 6e3e no\"> 485\n-00015870: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
.
\n-000158c0: 2020 3438 363c 2f73 7061 6e3e 3c73 7061 486 /***********\n-000158f0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00015900: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00015910: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00015920: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00015930: 2a2f 3c2f 7370 616e 3e3c 2f64 6976 3e0a */
.\n-00015940: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00015a60: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00015a90: 3c2f 613e 3c73 7061 6e20 636c 6173 733d \n-00015af0: 3438 383c 2f61 3e3c 2f73 7061 6e3e 2020 488 \n-00015b00: 3c61 2063 6c61 7373 3d22 636f 6465 2068 DecisionTree<\n-00015b60: 3b4c 2c20 5926 6774 3b3a 3a44 6563 6973 ;L, Y>::Decis\n-00015b70: 696f 6e54 7265 653c 2f61 3e28 3c73 7061 ionTree(const <\n-00015ba0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00015bb0: 5f74 7970 6564 6566 2220 6872 6566 3d22 _typedef\" href=\"\n-00015bc0: 6130 3237 3936 2e68 746d 6c23 6164 6364 a02796.html#adcd\n-00015bd0: 6438 3061 6231 6166 3431 3564 3231 3233 d80ab1af415d2123\n-00015be0: 3937 6132 3636 3633 3230 6533 3522 3e4c 97a2666320e35\">L\n-00015bf0: 6162 656c 433c 2f61 3e26 616d 703b 206c abelC& l\n-00015c00: 6162 656c 432c 203c 7370 616e 2063 6c61 abelC, con\n-00015c20: 7374 3c2f 7370 616e 3e20 5926 616d 703b st Y&\n-00015c30: 2079 312c 3c2f 6469 763e 0a3c 6469 7620 y1,
.
489 \n-00015c90: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00015ca0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00015cb0: 2020 3c73 7061 6e20 636c 6173 733d 226b const Y& y2) \n-00015ce0: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n-00015d30: 2020 3439 303c 2f73 7061 6e3e 2020 2020 490 \n-00015d40: 3c73 7061 6e20 636c 6173 733d 226b 6579 if (labelC.seco\n-00015d70: 6e64 2021 3d20 3229 203c 7370 616e 2063 nd != 2) throw \n-00015da0: 7374 643a 3a69 6e76 616c 6964 5f61 7267 std::invalid_arg\n-00015db0: 756d 656e 7428 3c2f 6469 763e 0a3c 6469 ument(
.<\n-00015dd0: 6120 6964 3d22 6c30 3034 3931 2220 6e61 a id=\"l00491\" na\n-00015de0: 6d65 3d22 6c30 3034 3931 223e 3c2f 613e me=\"l00491\">\n-00015df0: 3c73 7061 6e20 636c 6173 733d 226c 696e 491 "Decis\n-00015e40: 696f 6e54 7265 653a 2062 696e 6172 7920 ionTree: binary \n-00015e50: 636f 6e73 7472 7563 746f 7220 6361 6c6c constructor call\n-00015e60: 6564 2077 6974 6820 6e6f 6e2d 6269 6e61 ed with non-bina\n-00015e70: 7279 206c 6162 656c 2671 756f 743b 3c2f ry label");
.\n-00015ea0: 3c61 2069 643d 226c 3030 3439 3222 206e 492 auto\n-00015f00: 3c2f 7370 616e 3e20 6120 3d20 626f 6f73 a = boos\n-00015f10: 743a 3a6d 616b 655f 7368 6172 6564 266c t::make_shared&l\n-00015f20: 743b 4368 6f69 6365 2667 743b 286c 6162 t;Choice>(lab\n-00015f30: 656c 432e 6669 7273 742c 2032 293b 3c2f elC.first, 2);.
4\n-00015f90: 3933 3c2f 7370 616e 3e20 2020 203c 6120 93 Nod\n-00015ff0: 6550 7472 3c2f 613e 206c 3128 3c73 7061 ePtr l1(new Leaf(y1)), l2(new Leaf(y2));
.<\n-000160c0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000160d0: 3e3c 6120 6964 3d22 6c30 3034 3934 2220 > 494 a->pus\n-00016120: 685f 6261 636b 286c 3129 3b3c 2f64 6976 h_back(l1);.
495<\n-00016180: 2f73 7061 6e3e 2020 2020 612d 2667 743b /span> a->\n-00016190: 7075 7368 5f62 6163 6b28 6c32 293b 3c2f push_back(l2);.
4\n-000161f0: 3936 3c2f 7370 616e 3e20 2020 2072 6f6f 96 roo\n-00016200: 745f 203d 2043 686f 6963 653a 3a55 6e69 t_ = Choice::Uni\n-00016210: 7175 6528 6129 3b3c 2f64 6976 3e0a 3c64 que(a);
.\n-00016230: 3c61 2069 643d 226c 3030 3439 3722 206e 497 }
..
498\n-000162d0: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-000162e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000162f0: 3e3c 6120 6964 3d22 6c30 3034 3939 2220 > 499 /****\n-00016350: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00016360: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00016370: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00016380: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00016390: 2a2a 2a2a 2a2a 2a2a 2f3c 2f73 7061 6e3e ********/\n-000163a0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-000163f0: 2035 3030 3c2f 7370 616e 3e20 203c 7370 500 template<type\n-00016440: 6e61 6d65 3c2f 7370 616e 3e20 4c2c 203c name L, <\n-00016450: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00016460: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename Y>
\n-00016480: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
.
<\n-00016510: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-00016520: 7265 663d 2261 3032 3739 362e 6874 6d6c ref=\"a02796.html\n-00016530: 2361 6437 3534 6438 3639 3963 6232 3035 #ad754d8699cb205\n-00016540: 3738 3866 3838 3966 3031 3237 3831 6264 788f889f012781bd\n-00016550: 6332 223e 2020 3530 313c 2f61 3e3c 2f73 c2\"> 501 DecisionT\n-000165c0: 7265 6526 6c74 3b4c 2c20 5926 6774 3b3a ree<L, Y>:\n-000165d0: 3a44 6563 6973 696f 6e54 7265 653c 2f61 :DecisionTree(const std::vector\n-00016610: 266c 743b 4c61 6265 6c43 2667 743b 2661 <LabelC>&a\n-00016620: 6d70 3b20 6c61 6265 6c43 732c 3c2f 6469 mp; labelCs,.
502\n-00016680: 3c2f 7370 616e 3e20 2020 2020 203c 7370 const \n-000166b0: 7374 643a 3a76 6563 746f 7226 6c74 3b59 std::vector<Y\n-000166c0: 2667 743b 2661 6d70 3b20 7973 2920 7b3c >& ys) {<\n-000166d0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00016720: 3530 333c 2f73 7061 6e3e 2020 2020 3c73 503 // call recu\n-00016750: 7273 6976 6520 4372 6561 7465 3c2f 7370 rsive Create
.
504 \n-000167c0: 2020 726f 6f74 5f20 3d20 6372 6561 7465 root_ = create\n-000167d0: 286c 6162 656c 4373 2e62 6567 696e 2829 (labelCs.begin()\n-000167e0: 2c20 6c61 6265 6c43 732e 656e 6428 292c , labelCs.end(),\n-000167f0: 2079 732e 6265 6769 6e28 292c 2079 732e ys.begin(), ys.\n-00016800: 656e 6428 2929 3b3c 2f64 6976 3e0a 3c64 end());
.\n-00016820: 3c61 2069 643d 226c 3030 3530 3522 206e 505 }
..
506\n-000168c0: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-000168d0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000168e0: 3e3c 6120 6964 3d22 6c30 3035 3037 2220 > 507 /****\n-00016940: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00016950: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00016960: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00016970: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00016980: 2a2a 2a2a 2a2a 2a2a 2f3c 2f73 7061 6e3e ********/\n-00016990: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-000169e0: 2035 3038 3c2f 7370 616e 3e20 203c 7370 508 template<type\n-00016a30: 6e61 6d65 3c2f 7370 616e 3e20 4c2c 203c name L, <\n-00016a40: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00016a50: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename Y>
\n-00016a70: 0a3c 6469 7620 636c 6173 733d 2266 6f6c .
.
<\n-00016b00: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-00016b10: 7265 663d 2261 3032 3739 362e 6874 6d6c ref=\"a02796.html\n-00016b20: 2361 3361 3961 3462 3432 3039 3831 3266 #a3a9a4b4209812f\n-00016b30: 3037 3163 3132 3235 6439 3534 3266 6134 071c1225d9542fa4\n-00016b40: 3433 223e 2020 3530 393c 2f61 3e3c 2f73 43\"> 509 DecisionT\n-00016bb0: 7265 6526 6c74 3b4c 2c20 5926 6774 3b3a ree<L, Y>:\n-00016bc0: 3a44 6563 6973 696f 6e54 7265 653c 2f61 :DecisionTree(const std::vector\n-00016c00: 266c 743b 4c61 6265 6c43 2667 743b 2661 <LabelC>&a\n-00016c10: 6d70 3b20 6c61 6265 6c43 732c 3c2f 6469 mp; labelCs,.
510\n-00016c70: 3c2f 7370 616e 3e20 2020 2020 203c 7370 const \n-00016ca0: 7374 643a 3a73 7472 696e 6726 616d 703b std::string&\n-00016cb0: 2074 6162 6c65 2920 7b3c 2f64 6976 3e0a table) {
.\n-00016cc0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-00016cf0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 511 //\n-00016d30: 2043 6f6e 7665 7274 2073 7464 3a3a 7374 Convert std::st\n-00016d40: 7269 6e67 2074 6f20 7661 6c75 6573 206f ring to values o\n-00016d50: 6620 7479 7065 2059 3c2f 7370 616e 3e3c f type Y<\n-00016d60: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00016db0: 3531 323c 2f73 7061 6e3e 2020 2020 7374 512 st\n-00016dc0: 643a 3a76 6563 746f 7226 6c74 3b59 2667 d::vector<Y&g\n-00016dd0: 743b 2079 733b 3c2f 6469 763e 0a3c 6469 t; ys;
.<\n-00016df0: 6120 6964 3d22 6c30 3035 3133 2220 6e61 a id=\"l00513\" na\n-00016e00: 6d65 3d22 6c30 3035 3133 223e 3c2f 613e me=\"l00513\">\n-00016e10: 3c73 7061 6e20 636c 6173 733d 226c 696e 513 std::istrin\n-00016e40: 6773 7472 6561 6d20 6973 7328 7461 626c gstream iss(tabl\n-00016e50: 6529 3b3c 2f64 6976 3e0a 3c64 6976 2063 e);
.
514 \n-00016eb0: 2020 636f 7079 2873 7464 3a3a 6973 7472 copy(std::istr\n-00016ec0: 6561 6d5f 6974 6572 6174 6f72 266c 743b eam_iterator<\n-00016ed0: 5926 6774 3b28 6973 7329 2c20 7374 643a Y>(iss), std:\n-00016ee0: 3a69 7374 7265 616d 5f69 7465 7261 746f :istream_iterato\n-00016ef0: 7226 6c74 3b59 2667 743b 2829 2c3c 2f64 r<Y>(),.
51\n-00016f50: 353c 2f73 7061 6e3e 2020 2020 2020 2020 5 \n-00016f60: 2062 6163 6b5f 696e 7365 7274 6572 2879 back_inserter(y\n-00016f70: 7329 293b 3c2f 6469 763e 0a3c 6469 7620 s));
.
516 \n-00016fd0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00017020: 2035 3137 3c2f 7370 616e 3e20 2020 203c 517 <\n-00017030: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00017040: 656e 7422 3e2f 2f20 6e6f 7720 6361 6c6c ent\">// now call\n-00017050: 2072 6563 7572 7369 7665 2043 7265 6174 recursive Creat\n-00017060: 653c 2f73 7061 6e3e 3c2f 6469 763e 0a3c e
.<\n-00017070: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00017080: 3e3c 6120 6964 3d22 6c30 3035 3138 2220 > 518 root_ = c\n-000170d0: 7265 6174 6528 6c61 6265 6c43 732e 6265 reate(labelCs.be\n-000170e0: 6769 6e28 292c 206c 6162 656c 4373 2e65 gin(), labelCs.e\n-000170f0: 6e64 2829 2c20 7973 2e62 6567 696e 2829 nd(), ys.begin()\n-00017100: 2c20 7973 2e65 6e64 2829 293b 3c2f 6469 , ys.end());.
519\n-00017160: 3c2f 7370 616e 3e20 207d 3c2f 6469 763e }
\n-00017170: 0a3c 2f64 6976 3e0a 3c64 6976 2063 6c61 .
.
\n-000171c0: 2020 3532 303c 2f73 7061 6e3e 203c 2f64 520 .
52\n-00017220: 313c 2f73 7061 6e3e 3c73 7061 6e20 636c 1 \n-00017240: 2f2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a /***************\n-00017250: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00017260: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00017270: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00017280: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2f 3c2f *************/
.<\n-000172d0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000172e0: 6e6f 223e 2020 3532 323c 2f73 7061 6e3e no\"> 522\n-000172f0: 2020 3c73 7061 6e20 636c 6173 733d 226b template\n-00017310: 3c2f 7370 616e 3e26 6c74 3b3c 7370 616e <typename\n-00017340: 204c 2c20 3c73 7061 6e20 636c 6173 733d L, typena\n-00017360: 6d65 3c2f 7370 616e 3e20 5926 6774 3b3c me Y><\n-00017370: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>..
524 \n-00017590: 2020 2020 4974 6572 6174 6f72 2062 6567 Iterator beg\n-000175a0: 696e 2c20 4974 6572 6174 6f72 2065 6e64 in, Iterator end\n-000175b0: 2c20 3c73 7061 6e20 636c 6173 733d 226b , const L& labe\n-000175e0: 6c29 207b 3c2f 6469 763e 0a3c 6469 7620 l) {
.
525 \n-00017640: 2020 2072 6f6f 745f 203d 2063 6f6d 706f root_ = compo\n-00017650: 7365 2862 6567 696e 2c20 656e 642c 206c se(begin, end, l\n-00017660: 6162 656c 293b 3c2f 6469 763e 0a3c 6469 abel);
.<\n-00017680: 6120 6964 3d22 6c30 3035 3236 2220 6e61 a id=\"l00526\" na\n-00017690: 6d65 3d22 6c30 3035 3236 223e 3c2f 613e me=\"l00526\">\n-000176a0: 3c73 7061 6e20 636c 6173 733d 226c 696e 526 }
..
527<\n-00017720: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n-00017740: 3c61 2069 643d 226c 3030 3532 3822 206e 528 /*****\n-000177a0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000177b0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000177c0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000177d0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000177e0: 2a2a 2a2a 2a2a 2a2f 3c2f 7370 616e 3e3c *******/<\n-000177f0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00017840: 3532 393c 2f73 7061 6e3e 2020 3c73 7061 529 template<typen\n-00017890: 616d 653c 2f73 7061 6e3e 204c 2c20 3c73 ame L, typename Y>
.\n-000178d0: 3c64 6976 2063 6c61 7373 3d22 666f 6c64
.
530 DecisionTr\n-00017a10: 6565 266c 743b 4c2c 2059 2667 743b 3a3a ee<L, Y>::\n-00017a20: 4465 6369 7369 6f6e 5472 6565 3c2f 613e DecisionTree\n-00017a30: 283c 7370 616e 2063 6c61 7373 3d22 6b65 (const L& label\n-00017a60: 2c3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ,
.
\n-00017ab0: 2020 3533 313c 2f73 7061 6e3e 2020 2020 531 \n-00017ac0: 2020 3c73 7061 6e20 636c 6173 733d 226b const DecisionTree& f0, const Decisi\n-00017b80: 6f6e 5472 6565 3c2f 613e 2661 6d70 3b20 onTree& \n-00017b90: 6631 2920 207b 3c2f 6469 763e 0a3c 6469 f1) {
.<\n-00017bb0: 6120 6964 3d22 6c30 3035 3332 2220 6e61 a id=\"l00532\" na\n-00017bc0: 6d65 3d22 6c30 3035 3332 223e 3c2f 613e me=\"l00532\">\n-00017bd0: 3c73 7061 6e20 636c 6173 733d 226c 696e 532 const\n-00017c10: 3c2f 7370 616e 3e20 7374 643a 3a76 6563 std::vec\n-00017c20: 746f 7226 6c74 3b44 6563 6973 696f 6e54 tor<DecisionT\n-00017c30: 7265 6526 6774 3b20 6675 6e63 7469 6f6e ree> function\n-00017c40: 737b 6630 2c20 6631 7d3b 3c2f 6469 763e s{f0, f1};
\n-00017c50: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00017c80: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 533 root_ =\n-00017cb0: 2063 6f6d 706f 7365 2866 756e 6374 696f compose(functio\n-00017cc0: 6e73 2e62 6567 696e 2829 2c20 6675 6e63 ns.begin(), func\n-00017cd0: 7469 6f6e 732e 656e 6428 292c 206c 6162 tions.end(), lab\n-00017ce0: 656c 293b 3c2f 6469 763e 0a3c 6469 7620 el);
.
534 \n-00017d40: 207d 3c2f 6469 763e 0a3c 2f64 6976 3e0a }
.
.\n-00017d50: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00017de0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00017df0: 6e6f 223e 2020 3533 363c 2f73 7061 6e3e no\"> 536\n-00017e00: 3c73 7061 6e20 636c 6173 733d 2263 6f6d /*******\n-00017e20: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00017e30: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00017e40: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00017e50: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00017e60: 2a2a 2a2a 2a2f 3c2f 7370 616e 3e3c 2f64 *****/.
53\n-00017ec0: 373c 2f73 7061 6e3e 2020 3c73 7061 6e20 7 \n-00017ee0: 7465 6d70 6c61 7465 3c2f 7370 616e 3e20 template \n-00017ef0: 266c 743b 3c73 7061 6e20 636c 6173 733d <typena\n-00017f10: 6d65 3c2f 7370 616e 3e20 4c2c 203c 7370 me L, typename Y>
.<\n-00017f50: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00017f60: 3e3c 6120 6964 3d22 6c30 3035 3338 2220 > 538 templ\n-00017fc0: 6174 653c 2f73 7061 6e3e 2026 6c74 3b3c ate <<\n-00017fd0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00017fe0: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename X, ty\n-00018010: 7065 6e61 6d65 3c2f 7370 616e 3e20 4675 pename Fu\n-00018020: 6e63 2667 743b 3c2f 6469 763e 0a3c 6469 nc>
...<\n-00018240: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00018250: 6e6f 223e 2020 3534 303c 2f73 7061 6e3e no\"> 540\n-00018260: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018270: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018280: 2020 2046 756e 6320 595f 6f66 5f58 2920 Func Y_of_X) \n-00018290: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
.
\n-000182e0: 2020 3534 313c 2f73 7061 6e3e 2020 2020 541 \n-000182f0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // Define \n-00018310: 6675 6e63 746f 7220 666f 7220 6964 656e functor for iden\n-00018320: 7469 7479 206d 6170 7069 6e67 206f 6620 tity mapping of \n-00018330: 6e6f 6465 206c 6162 656c 2e3c 2f73 7061 node label.
.
542 \n-000183a0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 auto L_of_L = [](<\n-000183d0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-000183e0: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const L& label) \n-00018400: 7b20 3c73 7061 6e20 636c 6173 733d 226b { retu\n-00018420: 726e 3c2f 7370 616e 3e20 6c61 6265 6c3b rn label;\n-00018430: 207d 3b3c 2f64 6976 3e0a 3c64 6976 2063 };
.
543 \n-00018490: 2020 726f 6f74 5f20 3d20 636f 6e76 6572 root_ = conver\n-000184a0: 7446 726f 6d26 6c74 3b4c 2c20 5826 6774 tFrom<L, X>\n-000184b0: 3b28 6f74 6865 722e 3c61 2063 6c61 7373 ;(other.root_, L_of_L, Y_of\n-00018520: 5f58 293b 3c2f 6469 763e 0a3c 6469 7620 _X);
.
544 \n-00018580: 207d 3c2f 6469 763e 0a3c 2f64 6976 3e0a }
.
.\n-00018590: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00018620: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00018630: 6e6f 223e 2020 3534 363c 2f73 7061 6e3e no\"> 546
\n-00018640: 3c73 7061 6e20 636c 6173 733d 2263 6f6d /*******\n-00018660: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00018670: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00018680: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00018690: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000186a0: 2a2a 2a2a 2a2f 3c2f 7370 616e 3e3c 2f64 *****/.
54\n-00018700: 373c 2f73 7061 6e3e 2020 3c73 7061 6e20 7 \n-00018720: 7465 6d70 6c61 7465 3c2f 7370 616e 3e20 template \n-00018730: 266c 743b 3c73 7061 6e20 636c 6173 733d <typena\n-00018750: 6d65 3c2f 7370 616e 3e20 4c2c 203c 7370 me L, typename Y>
.<\n-00018790: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000187a0: 3e3c 6120 6964 3d22 6c30 3035 3438 2220 > 548 templ\n-00018800: 6174 653c 2f73 7061 6e3e 2026 6c74 3b3c ate <<\n-00018810: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00018820: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename M, ty\n-00018850: 7065 6e61 6d65 3c2f 7370 616e 3e20 582c pename X,\n-00018860: 203c 7370 616e 2063 6c61 7373 3d22 6b65 typename<\n-00018880: 2f73 7061 6e3e 2046 756e 6326 6774 3b3c /span> Func><\n-00018890: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
.<\n-00018910: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00018920: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 549 Deci\n-000189d0: 7369 6f6e 5472 6565 266c 743b 4c2c 2059 sionTree<L, Y\n-000189e0: 2667 743b 3a3a 4465 6369 7369 6f6e 5472 >::DecisionTr\n-000189f0: 6565 3c2f 613e 283c 7370 616e 2063 6c61 ee(con\n-00018a10: 7374 3c2f 7370 616e 3e20 3c61 2063 6c61 st DecisionTr\n-00018a50: 6565 266c 743b 4d2c 2058 2667 743b 3c2f ee<M, X>& other,.
5\n-00018ac0: 3530 3c2f 7370 616e 3e20 2020 2020 2020 50 \n-00018ad0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00018ae0: 2020 2020 2020 2020 2020 2020 3c73 7061 const s\n-00018b10: 7464 3a3a 6d61 7026 6c74 3b4d 2c20 4c26 td::map<M, L&\n-00018b20: 6774 3b26 616d 703b 206d 6170 2c20 4675 gt;& map, Fu\n-00018b30: 6e63 2059 5f6f 665f 5829 207b 3c2f 6469 nc Y_of_X) {.
551\n-00018b90: 3c2f 7370 616e 3e20 2020 203c 7370 616e auto L_o\n-00018bc0: 665f 4d20 3d20 5b26 616d 703b 6d61 705d f_M = [&map]\n-00018bd0: 283c 7370 616e 2063 6c61 7373 3d22 6b65 (const M& label\n-00018c00: 2920 2d26 6774 3b20 4c20 7b20 3c73 7061 ) -> L { return map.at(label\n-00018c40: 293b 207d 3b3c 2f64 6976 3e0a 3c64 6976 ); };
.<\n-00018c80: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00018c90: 6e6f 223e 2020 3535 323c 2f73 7061 6e3e no\"> 552\n-00018ca0: 2020 2020 726f 6f74 5f20 3d20 636f 6e76 root_ = conv\n-00018cb0: 6572 7446 726f 6d26 6c74 3b4d 2c20 5826 ertFrom<M, X&\n-00018cc0: 6774 3b28 6f74 6865 722e 3c61 2063 6c61 gt;(other.root_\n-00018d20: 3c2f 613e 2c20 4c5f 6f66 5f4d 2c20 595f , L_of_M, Y_\n-00018d30: 6f66 5f58 293b 3c2f 6469 763e 0a3c 6469 of_X);
.<\n-00018d50: 6120 6964 3d22 6c30 3035 3533 2220 6e61 a id=\"l00553\" na\n-00018d60: 6d65 3d22 6c30 3035 3533 223e 3c2f 613e me=\"l00553\">\n-00018d70: 3c73 7061 6e20 636c 6173 733d 226c 696e 553 }
..
554<\n-00018df0: 2f73 7061 6e3e 203c 2f64 6976 3e0a 3c64 /span>
.\n-00018e10: 3c61 2069 643d 226c 3030 3535 3522 206e 555 /*****\n-00018e70: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00018e80: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00018e90: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00018ea0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00018eb0: 2a2a 2a2a 2a2a 2a2f 3c2f 7370 616e 3e3c *******/<\n-00018ec0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00018f10: 3535 363c 2f73 7061 6e3e 2020 3c73 7061 556 // Called by t\n-00018f40: 776f 2063 6f6e 7374 7275 6374 6f72 7320 wo constructors \n-00018f50: 6162 6f76 652e 3c2f 7370 616e 3e3c 2f64 above..
55\n-00018fb0: 373c 2f73 7061 6e3e 2020 3c73 7061 6e20 7 \n-00018fd0: 2f2f 2054 616b 6573 2061 206c 6162 656c // Takes a label\n-00018fe0: 2061 6e64 2061 2063 6f72 7265 7370 6f6e and a correspon\n-00018ff0: 6469 6e67 2072 616e 6765 206f 6620 6465 ding range of de\n-00019000: 6369 7369 6f6e 2074 7265 6573 2c20 616e cision trees, an\n-00019010: 6420 6372 6561 7465 7320 613c 2f73 7061 d creates a
.
558 <\n-00019080: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00019090: 656e 7422 3e2f 2f20 6e65 7720 6465 6369 ent\">// new deci\n-000190a0: 7369 6f6e 2074 7265 652e 2048 6f77 6576 sion tree. Howev\n-000190b0: 6572 2c20 7468 6520 6f72 6465 7220 6f66 er, the order of\n-000190c0: 2074 6865 206c 6162 656c 7320 6e65 6564 the labels need\n-000190d0: 7320 746f 2062 6520 7265 7370 6563 7465 s to be respecte\n-000190e0: 642c 3c2f 7370 616e 3e3c 2f64 6976 3e0a d,
.\n-000190f0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-00019120: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 559 // s\n-00019160: 6f20 7765 2063 616e 6e6f 7420 6a75 7374 o we cannot just\n-00019170: 2063 7265 6174 6520 6120 726f 6f74 2043 create a root C\n-00019180: 686f 6963 6520 6e6f 6465 206f 6e20 7468 hoice node on th\n-00019190: 6520 6c61 6265 6c3a 2069 6620 7468 6520 e label: if the \n-000191a0: 6c61 6265 6c20 6973 3c2f 7370 616e 3e3c label is<\n-000191b0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00019200: 3536 303c 2f73 7061 6e3e 2020 3c73 7061 560 // not the hig\n-00019230: 6865 7374 206c 6162 656c 2c20 7765 206e hest label, we n\n-00019240: 6565 6420 6120 636f 6d70 6c69 6361 7465 eed a complicate\n-00019250: 642f 2065 7870 656e 7369 7665 2072 6563 d/ expensive rec\n-00019260: 7572 7369 7665 2063 616c 6c2e 3c2f 7370 ursive call.
.
561 \n-000192d0: 3c73 7061 6e20 636c 6173 733d 226b 6579 template <\n-00019310: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n-00019320: 4c2c 203c 7370 616e 2063 6c61 7373 3d22 L, typenam\n-00019340: 653c 2f73 7061 6e3e 2059 2667 743b 3c2f e Y>.
5\n-000193a0: 3632 3c2f 7370 616e 3e20 203c 7370 616e 62 template\n-000193d0: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n-000193f0: 616d 653c 2f73 7061 6e3e 2049 7465 7261 ame Itera\n-00019400: 746f 7226 6774 3b3c 2f64 6976 3e0a 3c64 tor>
.\n-00019420: 3c61 2069 643d 226c 3030 3536 3322 206e 563 typena\n-00019480: 6d65 3c2f 7370 616e 3e20 3c61 2063 6c61 me Decisi\n-000194e0: 6f6e 5472 6565 266c 743b 4c2c 2059 2667 onTree<L, Y&g\n-000194f0: 743b 3a3a 4e6f 6465 5074 723c 2f61 3e20 t;::NodePtr \n-00019500: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Deci\n-00019530: 7369 6f6e 5472 6565 266c 743b 4c2c 2059 sionTree<L, Y\n-00019540: 2667 743b 3a3a 636f 6d70 6f73 653c 2f61 >::compose(
.
564 \n-000195b0: 2020 2049 7465 7261 746f 7220 6265 6769 Iterator begi\n-000195c0: 6e2c 2049 7465 7261 746f 7220 656e 642c n, Iterator end,\n-000195d0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 const L& label\n-00019600: 293c 7370 616e 2063 6c61 7373 3d22 6b65 ) const {
.<\n-00019640: 6120 6964 3d22 6c30 3035 3635 2220 6e61 a id=\"l00565\" na\n-00019650: 6d65 3d22 6c30 3035 3635 223e 3c2f 613e me=\"l00565\">\n-00019660: 3c73 7061 6e20 636c 6173 733d 226c 696e 565 // fi\n-000196a0: 6e64 2068 6967 6865 7374 206c 6162 656c nd highest label\n-000196b0: 2061 6d6f 6e67 2062 7261 6e63 6865 733c among branches<\n-000196c0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-000196e0: 6120 6964 3d22 6c30 3035 3636 2220 6e61 a id=\"l00566\" na\n-000196f0: 6d65 3d22 6c30 3035 3636 223e 3c2f 613e me=\"l00566\">\n-00019700: 3c73 7061 6e20 636c 6173 733d 226c 696e 566 boost::opti\n-00019730: 6f6e 616c 266c 743b 4c26 6774 3b20 6869 onal<L> hi\n-00019740: 6768 6573 744c 6162 656c 3b3c 2f64 6976 ghestLabel;.
567<\n-000197a0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> size_t nrChoices = 0;\n-000197e0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00019830: 2035 3638 3c2f 7370 616e 3e20 2020 203c 568 <\n-00019840: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00019850: 6f72 6466 6c6f 7722 3e66 6f72 3c2f 7370 ordflow\">for (Iterator it\n-00019870: 203d 2062 6567 696e 3b20 6974 2021 3d20 = begin; it != \n-00019880: 656e 643b 2069 742b 2b29 207b 3c2f 6469 end; it++) {.
569\n-000198e0: 3c2f 7370 616e 3e20 2020 2020 203c 7370 if\n-00019910: 2028 6974 2d26 6774 3b72 6f6f 745f 2d26 (it->root_-&\n-00019920: 6774 3b69 734c 6561 6628 2929 3c2f 6469 gt;isLeaf()).
570\n-00019980: 3c2f 7370 616e 3e20 2020 2020 2020 203c <\n-00019990: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-000199a0: 6f72 6466 6c6f 7722 3e63 6f6e 7469 6e75 ordflow\">continu\n-000199b0: 653c 2f73 7061 6e3e 3b3c 2f64 6976 3e0a e;
.\n-000199c0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
572 \n-00019aa0: 2020 2020 2020 2020 626f 6f73 743a 3a64 boost::d\n-00019ab0: 796e 616d 6963 5f70 6f69 6e74 6572 5f63 ynamic_pointer_c\n-00019ac0: 6173 7426 6c74 3b63 6f6e 7374 2043 686f ast<const Cho\n-00019ad0: 6963 6526 6774 3b28 6974 2d26 6774 3b72 ice>(it->r\n-00019ae0: 6f6f 745f 293b 3c2f 6469 763e 0a3c 6469 oot_);
.<\n-00019b00: 6120 6964 3d22 6c30 3035 3733 2220 6e61 a id=\"l00573\" na\n-00019b10: 6d65 3d22 6c30 3035 3733 223e 3c2f 613e me=\"l00573\">\n-00019b20: 3c73 7061 6e20 636c 6173 733d 226c 696e 573 if (!hig\n-00019b70: 6865 7374 4c61 6265 6c20 7c7c 2063 2d26 hestLabel || c-&\n-00019b80: 6774 3b6c 6162 656c 2829 2026 6774 3b20 gt;label() > \n-00019b90: 2a68 6967 6865 7374 4c61 6265 6c29 207b *highestLabel) {\n-00019ba0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00019bf0: 2035 3734 3c2f 7370 616e 3e20 2020 2020 574 \n-00019c00: 2020 2068 6967 6865 7374 4c61 6265 6c2e highestLabel.\n-00019c10: 7265 7365 7428 632d 2667 743b 6c61 6265 reset(c->labe\n-00019c20: 6c28 2929 3b3c 2f64 6976 3e0a 3c64 6976 l());
.<\n-00019c60: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00019c70: 6e6f 223e 2020 3537 353c 2f73 7061 6e3e no\"> 575\n-00019c80: 2020 2020 2020 2020 6e72 4368 6f69 6365 nrChoice\n-00019c90: 7320 3d20 632d 2667 743b 6e72 4368 6f69 s = c->nrChoi\n-00019ca0: 6365 7328 293b 3c2f 6469 763e 0a3c 6469 ces();
.<\n-00019cc0: 6120 6964 3d22 6c30 3035 3736 2220 6e61 a id=\"l00576\" na\n-00019cd0: 6d65 3d22 6c30 3035 3736 223e 3c2f 613e me=\"l00576\">\n-00019ce0: 3c73 7061 6e20 636c 6173 733d 226c 696e 576 }
.<\n-00019d10: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00019d20: 3e3c 6120 6964 3d22 6c30 3035 3737 2220 > 577 }
.<\n-00019d70: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00019d80: 3e3c 6120 6964 3d22 6c30 3035 3738 2220 > 578
.
579 \n-00019e20: 2020 203c 7370 616e 2063 6c61 7373 3d22 // if l\n-00019e40: 6162 656c 2069 7320 616c 7265 6164 7920 abel is already \n-00019e50: 696e 2063 6f72 7265 6374 206f 7264 6572 in correct order\n-00019e60: 2c20 6a75 7374 2070 7574 2074 6f67 6574 , just put toget\n-00019e70: 6865 7220 6120 6368 6f69 6365 206f 6e20 her a choice on \n-00019e80: 6c61 6265 6c3c 2f73 7061 6e3e 3c2f 6469 label.
580\n-00019ee0: 3c2f 7370 616e 3e20 2020 203c 7370 616e if (\n-00019f10: 216e 7243 686f 6963 6573 207c 7c20 2168 !nrChoices || !h\n-00019f20: 6967 6865 7374 4c61 6265 6c20 7c7c 206c ighestLabel || l\n-00019f30: 6162 656c 2026 6774 3b20 2a68 6967 6865 abel > *highe\n-00019f40: 7374 4c61 6265 6c29 207b 3c2f 6469 763e stLabel) {
\n-00019f50: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00019f80: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 581 auto cho\n-00019fd0: 6963 654f 6e4c 6162 656c 203d 2062 6f6f iceOnLabel = boo\n-00019fe0: 7374 3a3a 6d61 6b65 5f73 6861 7265 6426 st::make_shared&\n-00019ff0: 6c74 3b43 686f 6963 6526 6774 3b28 6c61 lt;Choice>(la\n-0001a000: 6265 6c2c 2065 6e64 202d 2062 6567 696e bel, end - begin\n-0001a010: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
582 \n-0001a070: 2020 203c 7370 616e 2063 6c61 7373 3d22 for\n-0001a090: 3c2f 7370 616e 3e20 2849 7465 7261 746f (Iterato\n-0001a0a0: 7220 6974 203d 2062 6567 696e 3b20 6974 r it = begin; it\n-0001a0b0: 2021 3d20 656e 643b 2069 742b 2b29 3c2f != end; it++).
5\n-0001a110: 3833 3c2f 7370 616e 3e20 2020 2020 2020 83 \n-0001a120: 2063 686f 6963 654f 6e4c 6162 656c 2d26 choiceOnLabel-&\n-0001a130: 6774 3b70 7573 685f 6261 636b 2869 742d gt;push_back(it-\n-0001a140: 2667 743b 726f 6f74 5f29 3b3c 2f64 6976 >root_);.
584<\n-0001a1a0: 2f73 7061 6e3e 2020 2020 2020 3c73 7061 /span> return Choice::Uniq\n-0001a1e0: 7565 2863 686f 6963 654f 6e4c 6162 656c ue(choiceOnLabel\n-0001a1f0: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
585 \n-0001a250: 207d 203c 7370 616e 2063 6c61 7373 3d22 } els\n-0001a270: 653c 2f73 7061 6e3e 207b 3c2f 6469 763e e {
\n-0001a280: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0001a2b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 586 // Set up a new\n-0001a300: 2063 686f 6963 6520 6f6e 2074 6865 2068 choice on the h\n-0001a310: 6967 6865 7374 206c 6162 656c 3c2f 7370 ighest label
.
587 \n-0001a380: 2020 2020 3c73 7061 6e20 636c 6173 733d auto choiceOnHi\n-0001a3b0: 6768 6573 744c 6162 656c 203d 3c2f 6469 ghestLabel =.
588\n-0001a410: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n-0001a420: 2062 6f6f 7374 3a3a 6d61 6b65 5f73 6861 boost::make_sha\n-0001a430: 7265 6426 6c74 3b43 686f 6963 6526 6774 red<Choice>\n-0001a440: 3b28 2a68 6967 6865 7374 4c61 6265 6c2c ;(*highestLabel,\n-0001a450: 206e 7243 686f 6963 6573 293b 3c2f 6469 nrChoices);.
589\n-0001a4b0: 3c2f 7370 616e 3e20 2020 2020 203c 7370 // now, for a\n-0001a4e0: 6c6c 2070 6f73 7369 626c 6520 7661 6c75 ll possible valu\n-0001a4f0: 6573 206f 6620 6869 6768 6573 744c 6162 es of highestLab\n-0001a500: 656c 3c2f 7370 616e 3e3c 2f64 6976 3e0a el
.\n-0001a510: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
591 \n-0001a640: 2020 2020 2020 3c73 7061 6e20 636c 6173 // m\n-0001a660: 616b 6520 6120 6e65 7720 7365 7420 6f66 ake a new set of\n-0001a670: 2066 756e 6374 696f 6e73 2066 6f72 2063 functions for c\n-0001a680: 6f6d 706f 7369 6e67 2062 7920 6974 6572 omposing by iter\n-0001a690: 6174 696e 6720 6f76 6572 2074 6865 2067 ating over the g\n-0001a6a0: 6976 656e 3c2f 7370 616e 3e3c 2f64 6976 iven.
592<\n-0001a700: 2f73 7061 6e3e 2020 2020 2020 2020 3c73 /span> // functions\n-0001a730: 2c20 616e 6420 7365 6c65 6374 696e 6720 , and selecting \n-0001a740: 7468 6520 6170 7072 6f70 7269 6174 6520 the appropriate \n-0001a750: 6272 616e 6368 2e3c 2f73 7061 6e3e 3c2f branch..
5\n-0001a7b0: 3933 3c2f 7370 616e 3e20 2020 2020 2020 93 \n-0001a7c0: 2073 7464 3a3a 7665 6374 6f72 266c 743b std::vector<\n-0001a7d0: 4465 6369 7369 6f6e 5472 6565 2667 743b DecisionTree>\n-0001a7e0: 2066 756e 6374 696f 6e73 3b3c 2f64 6976 functions;.
594<\n-0001a840: 2f73 7061 6e3e 2020 2020 2020 2020 3c73 /span> for (Iterator it \n-0001a880: 3d20 6265 6769 6e3b 2069 7420 213d 2065 = begin; it != e\n-0001a890: 6e64 3b20 6974 2b2b 2920 7b3c 2f64 6976 nd; it++) {.
595<\n-0001a8f0: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-0001a900: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // by rest\n-0001a920: 7269 6374 696e 6720 7468 6520 696e 7075 ricting the inpu\n-0001a930: 7420 6675 6e63 7469 6f6e 7320 746f 2076 t functions to v\n-0001a940: 616c 7565 2069 2066 6f72 206c 6162 656c alue i for label\n-0001a950: 4265 6c6f 773c 2f73 7061 6e3e 3c2f 6469 Below.
596\n-0001a9b0: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n-0001a9c0: 2044 6563 6973 696f 6e54 7265 6520 6368 DecisionTree ch\n-0001a9d0: 6f73 656e 203d 2069 742d 2667 743b 6368 osen = it->ch\n-0001a9e0: 6f6f 7365 282a 6869 6768 6573 744c 6162 oose(*highestLab\n-0001a9f0: 656c 2c20 696e 6465 7829 3b3c 2f64 6976 el, index);.
597<\n-0001aa50: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-0001aa60: 6675 6e63 7469 6f6e 732e 7075 7368 5f62 functions.push_b\n-0001aa70: 6163 6b28 6368 6f73 656e 293b 3c2f 6469 ack(chosen);.
598\n-0001aad0: 3c2f 7370 616e 3e20 2020 2020 2020 207d }\n-0001aae0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001ab30: 2035 3939 3c2f 7370 616e 3e20 2020 2020 599 \n-0001ab40: 2020 203c 7370 616e 2063 6c61 7373 3d22 // We t\n-0001ab60: 6865 6e20 7265 6375 7273 652c 2066 6f72 hen recurse, for\n-0001ab70: 2061 6c6c 2076 616c 7565 7320 6f66 2074 all values of t\n-0001ab80: 6865 2068 6967 6865 7374 206c 6162 656c he highest label\n-0001ab90: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-0001abb0: 3c61 2069 643d 226c 3030 3630 3022 206e 600 NodePt\n-0001ac00: 7220 6669 203d 2063 6f6d 706f 7365 2866 r fi = compose(f\n-0001ac10: 756e 6374 696f 6e73 2e62 6567 696e 2829 unctions.begin()\n-0001ac20: 2c20 6675 6e63 7469 6f6e 732e 656e 6428 , functions.end(\n-0001ac30: 292c 206c 6162 656c 293b 3c2f 6469 763e ), label);
\n-0001ac40: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0001ac70: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 601 cho\n-0001aca0: 6963 654f 6e48 6967 6865 7374 4c61 6265 iceOnHighestLabe\n-0001acb0: 6c2d 2667 743b 7075 7368 5f62 6163 6b28 l->push_back(\n-0001acc0: 6669 293b 3c2f 6469 763e 0a3c 6469 7620 fi);
.
602 \n-0001ad20: 2020 2020 207d 3c2f 6469 763e 0a3c 6469 }
.<\n-0001ad40: 6120 6964 3d22 6c30 3036 3033 2220 6e61 a id=\"l00603\" na\n-0001ad50: 6d65 3d22 6c30 3036 3033 223e 3c2f 613e me=\"l00603\">\n-0001ad60: 3c73 7061 6e20 636c 6173 733d 226c 696e 603 return C\n-0001adb0: 686f 6963 653a 3a55 6e69 7175 6528 6368 hoice::Unique(ch\n-0001adc0: 6f69 6365 4f6e 4869 6768 6573 744c 6162 oiceOnHighestLab\n-0001add0: 656c 293b 3c2f 6469 763e 0a3c 6469 7620 el);
.
604 \n-0001ae30: 2020 207d 3c2f 6469 763e 0a3c 6469 7620 }
.
605 \n-0001ae90: 207d 3c2f 6469 763e 0a3c 6469 7620 636c }
.
606 .
6\n-0001af40: 3037 3c2f 7370 616e 3e3c 7370 616e 2063 07 \n-0001af60: 202f 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a /**************\n-0001af70: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0001af80: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0001af90: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0001afa0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2f3c **************/<\n-0001afb0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-0001afd0: 6120 6964 3d22 6c30 3036 3038 2220 6e61 a id=\"l00608\" na\n-0001afe0: 6d65 3d22 6c30 3036 3038 223e 3c2f 613e me=\"l00608\">\n-0001aff0: 3c73 7061 6e20 636c 6173 733d 226c 696e 608 // &quo\n-0001b030: 743b 6372 6561 7465 2671 756f 743b 2069 t;create" i\n-0001b040: 7320 6120 6269 7420 6f66 2061 2063 6f6d s a bit of a com\n-0001b050: 706c 6963 6174 6564 2074 6869 6e67 2c20 plicated thing, \n-0001b060: 6275 7420 7665 7279 2075 7365 6675 6c2e but very useful.\n-0001b070: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-0001b090: 3c61 2069 643d 226c 3030 3630 3922 206e 609 // It \n-0001b0f0: 7461 6b65 7320 6120 7261 6e67 6520 6f66 takes a range of\n-0001b100: 206c 6162 656c 7320 616e 6420 6120 636f labels and a co\n-0001b110: 7272 6573 706f 6e64 696e 6720 7261 6e67 rresponding rang\n-0001b120: 6520 6f66 2076 616c 7565 732c 3c2f 7370 e of values,
.
610 \n-0001b190: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // and cre\n-0001b1b0: 6174 6573 2061 2064 6563 6973 696f 6e20 ates a decision \n-0001b1c0: 7472 6565 2c20 6173 2066 6f6c 6c6f 7773 tree, as follows\n-0001b1d0: 3a3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c :
.<\n-0001b1e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001b1f0: 3e3c 6120 6964 3d22 6c30 3036 3131 2220 > 611 // - \n-0001b250: 6966 2074 6865 7265 2069 7320 6f6e 6c79 if there is only\n-0001b260: 206f 6e65 206c 6162 656c 2c20 6372 6561 one label, crea\n-0001b270: 7465 7320 6120 6368 6f69 6365 206e 6f64 tes a choice nod\n-0001b280: 6520 7769 7468 2076 616c 7565 7320 696e e with values in\n-0001b290: 206c 6561 7665 733c 2f73 7061 6e3e 3c2f leaves.
6\n-0001b2f0: 3132 3c2f 7370 616e 3e20 203c 7370 616e 12 // - otherwise,\n-0001b320: 2069 7420 6576 656e 6c79 2073 706c 6974 it evenly split\n-0001b330: 7320 7570 2074 6865 2072 616e 6765 206f s up the range o\n-0001b340: 6620 7661 6c75 6573 2061 6e64 2063 7265 f values and cre\n-0001b350: 6174 6573 2061 2074 7265 6520 666f 723c ates a tree for<\n-0001b360: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-0001b380: 6120 6964 3d22 6c30 3036 3133 2220 6e61 a id=\"l00613\" na\n-0001b390: 6d65 3d22 6c30 3036 3133 223e 3c2f 613e me=\"l00613\">\n-0001b3a0: 3c73 7061 6e20 636c 6173 733d 226c 696e 613 // ea\n-0001b3e0: 6368 2073 7562 2d72 616e 6765 2c20 616e ch sub-range, an\n-0001b3f0: 6420 6173 7369 676e 7320 7468 6174 2074 d assigns that t\n-0001b400: 7265 6520 746f 2066 6972 7374 206c 6162 ree to first lab\n-0001b410: 656c 2623 3339 3b73 2063 686f 6963 6573 el's choices\n-0001b420: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-0001b440: 3c61 2069 643d 226c 3030 3631 3422 206e 614 // Exa\n-0001b4a0: 6d70 6c65 3a3c 2f73 7061 6e3e 3c2f 6469 mple:.
615\n-0001b500: 3c2f 7370 616e 3e20 203c 7370 616e 2063 /\n-0001b520: 2f20 6372 6561 7465 285b 4220 415d 2c5b / create([B A],[\n-0001b530: 3120 3220 3320 345d 2920 776f 756c 6420 1 2 3 4]) would \n-0001b540: 6361 6c6c 3c2f 7370 616e 3e3c 2f64 6976 call.
616<\n-0001b5a0: 2f73 7061 6e3e 2020 3c73 7061 6e20 636c /span> //\n-0001b5c0: 2020 2063 7265 6174 6528 5b41 5d2c 5b31 create([A],[1\n-0001b5d0: 2032 5d29 3c2f 7370 616e 3e3c 2f64 6976 2]).
617<\n-0001b630: 2f73 7061 6e3e 2020 3c73 7061 6e20 636c /span> //\n-0001b650: 2020 2063 7265 6174 6528 5b41 5d2c 5b33 create([A],[3\n-0001b660: 2034 5d29 3c2f 7370 616e 3e3c 2f64 6976 4]).
618<\n-0001b6c0: 2f73 7061 6e3e 2020 3c73 7061 6e20 636c /span> //\n-0001b6e0: 2061 6e64 2070 726f 6475 6365 3c2f 7370 and produce
.
619 \n-0001b750: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // B=0
.
620 \n-0001b7d0: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // A=0: 1\n-0001b7f0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-0001b810: 3c61 2069 643d 226c 3030 3632 3122 206e 621 // A=\n-0001b870: 313a 2032 3c2f 7370 616e 3e3c 2f64 6976 1: 2.
622<\n-0001b8d0: 2f73 7061 6e3e 2020 3c73 7061 6e20 636c /span> //\n-0001b8f0: 2042 3d31 3c2f 7370 616e 3e3c 2f64 6976 B=1.
623<\n-0001b950: 2f73 7061 6e3e 2020 3c73 7061 6e20 636c /span> //\n-0001b970: 2020 413d 303a 2033 3c2f 7370 616e 3e3c A=0: 3<\n-0001b980: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0001b9d0: 3632 343c 2f73 7061 6e3e 2020 3c73 7061 624 // A=1: 4
.
625 \n-0001ba60: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // Note, t\n-0001ba80: 6872 6f75 6768 2074 6865 206d 6167 6963 hrough the magic\n-0001ba90: 206f 6620 2671 756f 743b 636f 6d70 6f73 of "compos\n-0001baa0: 6526 7175 6f74 3b2c 2063 7265 6174 6528 e", create(\n-0001bab0: 5b41 2042 5d2c 5b31 2033 2032 2034 5d29 [A B],[1 3 2 4])\n-0001bac0: 2077 696c 6c20 7072 6f64 7563 653c 2f73 will produce
.
626 \n-0001bb30: 203c 7370 616e 2063 6c61 7373 3d22 636f // exactl\n-0001bb50: 7920 7468 6520 7361 6d65 2074 7265 6520 y the same tree \n-0001bb60: 6173 2061 626f 7665 3a20 7468 6520 6869 as above: the hi\n-0001bb70: 6768 6573 7420 6c61 6265 6c20 6973 2061 ghest label is a\n-0001bb80: 6c77 6179 7320 7468 6520 726f 6f74 2e3c lways the root.<\n-0001bb90: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-0001bbb0: 6120 6964 3d22 6c30 3036 3237 2220 6e61 a id=\"l00627\" na\n-0001bbc0: 6d65 3d22 6c30 3036 3237 223e 3c2f 613e me=\"l00627\">\n-0001bbd0: 3c73 7061 6e20 636c 6173 733d 226c 696e 627 // Howe\n-0001bc10: 7665 722c 2069 7420 7769 6c6c 2062 6520 ver, it will be \n-0001bc20: 2a77 6179 2a20 6661 7374 6572 2069 6620 *way* faster if \n-0001bc30: 6c61 6265 6c73 2061 7265 2067 6976 656e labels are given\n-0001bc40: 2068 6967 6865 7374 2074 6f20 6c6f 7765 highest to lowe\n-0001bc50: 7374 2e3c 2f73 7061 6e3e 3c2f 6469 763e st.
\n-0001bc60: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0001bc90: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 628 tem\n-0001bcd0: 706c 6174 653c 2f73 7061 6e3e 266c 743b plate<\n-0001bce0: 3c73 7061 6e20 636c 6173 733d 226b 6579 typename L, t\n-0001bd20: 7970 656e 616d 653c 2f73 7061 6e3e 2059 ypename Y\n-0001bd30: 2667 743b 3c2f 6469 763e 0a3c 6469 7620 >
.
629 \n-0001bd90: 203c 7370 616e 2063 6c61 7373 3d22 6b65 template<\n-0001bdb0: 2f73 7061 6e3e 266c 743b 3c73 7061 6e20 /span><\n-0001bdd0: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n-0001bde0: 4974 2c20 3c73 7061 6e20 636c 6173 733d It, typena\n-0001be00: 6d65 3c2f 7370 616e 3e20 5661 6c75 6549 me ValueI\n-0001be10: 7426 6774 3b3c 2f64 6976 3e0a 3c64 6976 t>
...
631 \n-0001c070: 2020 2020 4974 2062 6567 696e 2c20 4974 It begin, It\n-0001c080: 2065 6e64 2c20 5661 6c75 6549 7420 6265 end, ValueIt be\n-0001c090: 6769 6e59 2c20 5661 6c75 6549 7420 656e ginY, ValueIt en\n-0001c0a0: 6459 293c 7370 616e 2063 6c61 7373 3d22 dY) const \n-0001c0c0: 3c2f 7370 616e 3e7b 3c2f 6469 763e 0a3c {
.<\n-0001c0d0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001c0e0: 3e3c 6120 6964 3d22 6c30 3036 3332 2220 > 632 // \n-0001c140: 6765 7420 6372 7563 6961 6c20 636f 756e get crucial coun\n-0001c150: 7473 3c2f 7370 616e 3e3c 2f64 6976 3e0a ts
.\n-0001c160: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-0001c190: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 633 size_t \n-0001c1e0: 6e72 4368 6f69 6365 7320 3d20 6265 6769 nrChoices = begi\n-0001c1f0: 6e2d 2667 743b 7365 636f 6e64 3b3c 2f64 n->second;.
63\n-0001c250: 343c 2f73 7061 6e3e 2020 2020 3c73 7061 4 size_t size = endY \n-0001c290: 2d20 6265 6769 6e59 3b3c 2f64 6976 3e0a - beginY;
.\n-0001c2a0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-0001c330: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0001c340: 6e6f 223e 2020 3633 363c 2f73 7061 6e3e no\"> 636\n-0001c350: 2020 2020 3c73 7061 6e20 636c 6173 733d // Fin\n-0001c370: 6420 7468 6520 6e65 7874 206b 6579 2074 d the next key t\n-0001c380: 6f20 776f 726b 206f 6e3c 2f73 7061 6e3e o work on\n-0001c390: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001c3e0: 2036 3337 3c2f 7370 616e 3e20 2020 2049 637 I\n-0001c3f0: 7420 6c61 6265 6c43 203d 2062 6567 696e t labelC = begin\n-0001c400: 202b 2031 3b3c 2f64 6976 3e0a 3c64 6976 + 1;
.<\n-0001c440: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0001c450: 6e6f 223e 2020 3633 383c 2f73 7061 6e3e no\"> 638
\n-0001c460: 2020 2020 3c73 7061 6e20 636c 6173 733d if\n-0001c480: 3c2f 7370 616e 3e20 286c 6162 656c 4320 (labelC \n-0001c490: 3d3d 2065 6e64 2920 7b3c 2f64 6976 3e0a == end) {
.\n-0001c4a0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-0001c550: 6120 6964 3d22 6c30 3036 3430 2220 6e61 a id=\"l00640\" na\n-0001c560: 6d65 3d22 6c30 3036 3430 223e 3c2f 613e me=\"l00640\">\n-0001c570: 3c73 7061 6e20 636c 6173 733d 226c 696e 640 // \n-0001c5b0: 4372 6561 7465 2061 2073 696d 706c 6520 Create a simple \n-0001c5c0: 6368 6f69 6365 206e 6f64 6520 7769 7468 choice node with\n-0001c5d0: 2076 616c 7565 7320 6173 206c 6561 7665 values as leave\n-0001c5e0: 732e 3c2f 7370 616e 3e3c 2f64 6976 3e0a s.
.\n-0001c5f0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
642 \n-0001c6e0: 2020 2020 2020 7374 643a 3a63 6f75 7420 std::cout \n-0001c6f0: 266c 743b 266c 743b 203c 7370 616e 2063 << "Tryin\n-0001c720: 6720 746f 2063 7265 6174 6520 4444 206f g to create DD o\n-0001c730: 6e20 2671 756f 743b 3c2f 7370 616e 3e20 n " \n-0001c740: 266c 743b 266c 743b 2062 6567 696e 2d26 << begin-&\n-0001c750: 6774 3b66 6972 7374 2026 6c74 3b26 6c74 gt;first <<\n-0001c760: 3b20 7374 643a 3a65 6e64 6c3b 3c2f 6469 ; std::endl;.
643\n-0001c7c0: 3c2f 7370 616e 3e20 2020 2020 2020 2073 s\n-0001c7d0: 7464 3a3a 636f 7574 2026 6c74 3b26 6c74 td::cout <<\n-0001c7e0: 3b20 626f 6f73 743a 3a66 6f72 6d61 7428 ; boost::format(\n-0001c7f0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001c840: 2036 3434 3c2f 7370 616e 3e20 2020 2020 644 \n-0001c850: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001c860: 2020 2020 3c73 7061 6e20 636c 6173 733d \n-0001c880: 2671 756f 743b 4465 6369 7369 6f6e 5472 "DecisionTr\n-0001c890: 6565 3a3a 6372 6561 7465 3a20 6578 7065 ee::create: expe\n-0001c8a0: 6374 6564 2025 6420 7661 6c75 6573 2062 cted %d values b\n-0001c8b0: 7574 2067 6f74 2025 6420 2671 756f 743b ut got %d "\n-0001c8c0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-0001c8e0: 3c61 2069 643d 226c 3030 3634 3522 206e 645 \n-0001c930: 2020 2020 2020 2020 2020 203c 7370 616e "ins\n-0001c960: 7465 6164 2671 756f 743b 3c2f 7370 616e tead") %
.
646 \n-0001c9d0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001c9e0: 2020 2020 2020 2020 6e72 4368 6f69 6365 nrChoice\n-0001c9f0: 7320 2520 7369 7a65 3c2f 6469 763e 0a3c s % size
.<\n-0001ca00: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001ca10: 3e3c 6120 6964 3d22 6c30 3036 3437 2220 > 647 \n-0001ca60: 2020 2020 2026 6c74 3b26 6c74 3b20 7374 << st\n-0001ca70: 643a 3a65 6e64 6c3b 3c2f 6469 763e 0a3c d::endl;
.<\n-0001ca80: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001ca90: 3e3c 6120 6964 3d22 6c30 3036 3438 2220 > 648 throw std::invalid_a\n-0001cb10: 7267 756d 656e 7428 3c73 7061 6e20 636c rgument("Decisi\n-0001cb40: 6f6e 5472 6565 3a3a 6372 6561 7465 2069 onTree::create i\n-0001cb50: 6e76 616c 6964 2061 7267 756d 656e 7426 nvalid argument&\n-0001cb60: 7175 6f74 3b3c 2f73 7061 6e3e 293b 3c2f quot;);.
6\n-0001cbc0: 3439 3c2f 7370 616e 3e20 2020 2020 207d 49 }\n-0001cbd0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001cc20: 2036 3530 3c2f 7370 616e 3e20 2020 2020 650 \n-0001cc30: 203c 7370 616e 2063 6c61 7373 3d22 6b65 auto choice = boos\n-0001cc60: 743a 3a6d 616b 655f 7368 6172 6564 266c t::make_shared&l\n-0001cc70: 743b 4368 6f69 6365 2667 743b 2862 6567 t;Choice>(beg\n-0001cc80: 696e 2d26 6774 3b66 6972 7374 2c20 656e in->first, en\n-0001cc90: 6459 202d 2062 6567 696e 5929 3b3c 2f64 dY - beginY);.
65\n-0001ccf0: 313c 2f73 7061 6e3e 2020 2020 2020 3c73 1 for (ValueIt y = \n-0001cd30: 6265 6769 6e59 3b20 7920 213d 2065 6e64 beginY; y != end\n-0001cd40: 593b 2079 2b2b 293c 2f64 6976 3e0a 3c64 Y; y++)
.\n-0001cd60: 3c61 2069 643d 226c 3030 3635 3222 206e 652 choice\n-0001cdb0: 2d26 6774 3b70 7573 685f 6261 636b 283c ->push_back(<\n-0001cdc0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-0001cdd0: 5f74 7970 6564 6566 2220 6872 6566 3d22 _typedef\" href=\"\n-0001cde0: 6130 3237 3936 2e68 746d 6c23 6133 3661 a02796.html#a36a\n-0001cdf0: 3938 6636 3162 3062 3764 6630 3432 3432 98f61b0b7df04242\n-0001ce00: 3762 3133 3262 3331 3364 3766 6422 3e4e 7b132b313d7fd\">N\n-0001ce10: 6f64 6550 7472 3c2f 613e 283c 7370 616e odePtr(new
Leaf(*y)));
.<\n-0001ce80: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001ce90: 3e3c 6120 6964 3d22 6c30 3036 3533 2220 > 653 return\n-0001cf00: 2043 686f 6963 653a 3a55 6e69 7175 6528 Choice::Unique(\n-0001cf10: 6368 6f69 6365 293b 3c2f 6469 763e 0a3c choice);
.<\n-0001cf20: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001cf30: 3e3c 6120 6964 3d22 6c30 3036 3534 2220 > 654 }
.<\n-0001cf80: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001cf90: 3e3c 6120 6964 3d22 6c30 3036 3535 2220 > 655
.
656 \n-0001d030: 2020 203c 7370 616e 2063 6c61 7373 3d22 // Recu\n-0001d050: 7273 6976 6520 6361 7365 3a20 7065 7266 rsive case: perf\n-0001d060: 6f72 6d20 2671 756f 743b 5368 616e 6e6f orm "Shanno\n-0001d070: 6e20 6578 7061 6e73 696f 6e26 7175 6f74 n expansion"\n-0001d080: 3b3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c ;
.<\n-0001d090: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001d0a0: 3e3c 6120 6964 3d22 6c30 3036 3537 2220 > 657 // \n-0001d100: 4372 6561 7465 7320 6f6e 6520 7472 6565 Creates one tree\n-0001d110: 2028 692e 652e 2c66 756e 6374 696f 6e29 (i.e.,function)\n-0001d120: 2066 6f72 2065 6163 6820 6368 6f69 6365 for each choice\n-0001d130: 206f 6620 6375 7272 656e 7420 6b65 793c of current key<\n-0001d140: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-0001d160: 6120 6964 3d22 6c30 3036 3538 2220 6e61 a id=\"l00658\" na\n-0001d170: 6d65 3d22 6c30 3036 3538 223e 3c2f 613e me=\"l00658\">\n-0001d180: 3c73 7061 6e20 636c 6173 733d 226c 696e 658 // by\n-0001d1c0: 2063 616c 6c69 6e67 2063 7265 6174 6520 calling create \n-0001d1d0: 7265 6375 7273 6976 656c 792c 2061 6e64 recursively, and\n-0001d1e0: 2074 6865 6e20 7075 7473 2074 6865 6d20 then puts them \n-0001d1f0: 616c 6c20 746f 6765 7468 6572 2e3c 2f73 all together.
.
659 \n-0001d260: 2020 2073 7464 3a3a 7665 6374 6f72 266c std::vector&l\n-0001d270: 743b 4465 6369 7369 6f6e 5472 6565 2667 t;DecisionTree&g\n-0001d280: 743b 2066 756e 6374 696f 6e73 3b3c 2f64 t; functions;.
66\n-0001d2e0: 303c 2f73 7061 6e3e 2020 2020 3c73 7061 0 size_t split =\n-0001d370: 2073 697a 6520 2f20 6e72 4368 6f69 6365 size / nrChoice\n-0001d380: 733b 3c2f 6469 763e 0a3c 6469 7620 636c s;
.
661 \n-0001d3e0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 for (size_t i\n-0001d430: 203d 2030 3b20 6920 266c 743b 206e 7243 = 0; i < nrC\n-0001d440: 686f 6963 6573 3b20 692b 2b2c 2062 6567 hoices; i++, beg\n-0001d450: 696e 5920 2b3d 203c 6120 636c 6173 733d inY += split) {
.
662 \n-0001d510: 2020 2020 203c 6120 636c 6173 733d 2263 NodePtr\n-0001d570: 2066 203d 2063 7265 6174 6526 6c74 3b49 f = create<I\n-0001d580: 742c 2056 616c 7565 4974 2667 743b 286c t, ValueIt>(l\n-0001d590: 6162 656c 432c 2065 6e64 2c20 6265 6769 abelC, end, begi\n-0001d5a0: 6e59 2c20 6265 6769 6e59 202b 203c 6120 nY, beginY + sp\n-0001d600: 6c69 743c 2f61 3e29 3b3c 2f64 6976 3e0a lit);
.\n-0001d610: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
664 \n-0001d6e0: 2020 207d 3c2f 6469 763e 0a3c 6469 7620 }
.
665 \n-0001d740: 2020 203c 7370 616e 2063 6c61 7373 3d22 ret\n-0001d760: 7572 6e3c 2f73 7061 6e3e 2063 6f6d 706f urn compo\n-0001d770: 7365 2866 756e 6374 696f 6e73 2e62 6567 se(functions.beg\n-0001d780: 696e 2829 2c20 6675 6e63 7469 6f6e 732e in(), functions.\n-0001d790: 656e 6428 292c 2062 6567 696e 2d26 6774 end(), begin->\n-0001d7a0: 3b66 6972 7374 293b 3c2f 6469 763e 0a3c ;first);
.<\n-0001d7b0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001d7c0: 3e3c 6120 6964 3d22 6c30 3036 3636 2220 > 666 }
..
66\n-0001d860: 373c 2f73 7061 6e3e 203c 2f64 6976 3e0a 7
.\n-0001d870: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-0001d980: 2020 3636 393c 2f73 7061 6e3e 2020 3c73 669 template <ty\n-0001d9d0: 7065 6e61 6d65 3c2f 7370 616e 3e20 4c2c pename L,\n-0001d9e0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 typename<\n-0001da00: 2f73 7061 6e3e 2059 2667 743b 3c2f 6469 /span> Y>.
670\n-0001da60: 3c2f 7370 616e 3e20 203c 7370 616e 2063 t\n-0001da80: 656d 706c 6174 653c 2f73 7061 6e3e 2026 emplate &\n-0001da90: 6c74 3b3c 7370 616e 2063 6c61 7373 3d22 lt;typenam\n-0001dab0: 653c 2f73 7061 6e3e 204d 2c20 3c73 7061 e M, typename X>
..
671 typenam\n-0001dbf0: 653c 2f73 7061 6e3e 203c 6120 636c 6173 e Decisio\n-0001dc50: 6e54 7265 6526 6c74 3b4c 2c20 5926 6774 nTree<L, Y>\n-0001dc60: 3b3a 3a4e 6f64 6550 7472 3c2f 613e 203c ;::NodePtr <\n-0001dc70: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-0001dc80: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n-0001dc90: 2261 3032 3739 362e 6874 6d6c 2361 3134 \"a02796.html#a14\n-0001dca0: 3936 3661 3365 3231 6334 3239 3063 3430 966a3e21c4290c40\n-0001dcb0: 6133 3338 3833 3133 3437 3862 6638 223e a3388313478bf8\">\n-0001dcc0: 4465 6369 7369 6f6e 5472 6565 266c 743b DecisionTree<\n-0001dcd0: 4c2c 2059 2667 743b 3a3a 636f 6e76 6572 L, Y>::conver\n-0001dce0: 7446 726f 6d3c 2f61 3e28 3c2f 6469 763e tFrom(
\n-0001dcf0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..
\n-0001de60: 2020 3637 333c 2f73 7061 6e3e 2020 2020 673 \n-0001de70: 2020 7374 643a 3a66 756e 6374 696f 6e26 std::function&\n-0001de80: 6c74 3b4c 283c 7370 616e 2063 6c61 7373 lt;L(const\n-0001dea0: 3c2f 7370 616e 3e20 4d26 616d 703b 2926 M&)&\n-0001deb0: 6774 3b20 4c5f 6f66 5f4d 2c3c 2f64 6976 gt; L_of_M,.
674<\n-0001df10: 2f73 7061 6e3e 2020 2020 2020 7374 643a /span> std:\n-0001df20: 3a66 756e 6374 696f 6e26 6c74 3b59 283c :function<Y(<\n-0001df30: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0001df40: 6f72 6422 3e63 6f6e 7374 3c2f 7370 616e ord\">const X&)> Y_\n-0001df60: 6f66 5f58 293c 7370 616e 2063 6c61 7373 of_X) cons\n-0001df80: 7420 3c2f 7370 616e 3e7b 3c2f 6469 763e t {
\n-0001df90: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0001dfc0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 675 u\n-0001e000: 7369 6e67 203c 2f73 7061 6e3e 4c59 203d sing LY =\n-0001e010: 203c 6120 636c 6173 733d 2263 6f64 6520 Dec\n-0001e040: 6973 696f 6e54 7265 6526 6c74 3b4c 2c20 isionTree<L, \n-0001e050: 5926 6774 3b3c 2f61 3e3b 3c2f 6469 763e Y>;
\n-0001e060: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-0001e0d0: 6120 6964 3d22 6c30 3036 3737 2220 6e61 a id=\"l00677\" na\n-0001e0e0: 6d65 3d22 6c30 3036 3737 223e 3c2f 613e me=\"l00677\">\n-0001e0f0: 3c73 7061 6e20 636c 6173 733d 226c 696e 677 // Ug\n-0001e130: 6c69 6e65 7373 2062 656c 6f77 2062 6563 liness below bec\n-0001e140: 6175 7365 2061 7070 6172 656e 746c 7920 ause apparently \n-0001e150: 7765 2063 616e 2623 3339 3b74 2068 6176 we can't hav\n-0001e160: 6520 7465 6d70 6c61 7465 6420 7669 7274 e templated virt\n-0001e170: 7561 6c3c 2f73 7061 6e3e 3c2f 6469 763e ual
\n-0001e180: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0001e1b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 678 /\n-0001e1f0: 2f20 6675 6e63 7469 6f6e 732e 3c2f 7370 / functions.
.
679 \n-0001e260: 2020 3c73 7061 6e20 636c 6173 733d 2263 // If le\n-0001e280: 6166 2c20 6170 706c 7920 756e 6172 7920 af, apply unary \n-0001e290: 636f 6e76 6572 7369 6f6e 2026 7175 6f74 conversion "\n-0001e2a0: 3b6f 7026 7175 6f74 3b20 616e 6420 6372 ;op" and cr\n-0001e2b0: 6561 7465 2061 2075 6e69 7175 6520 6c65 eate a unique le\n-0001e2c0: 6166 2e3c 2f73 7061 6e3e 3c2f 6469 763e af.
\n-0001e2d0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0001e300: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 680 u\n-0001e340: 7369 6e67 203c 2f73 7061 6e3e 4d58 4c65 sing MXLe\n-0001e350: 6166 203d 203c 7370 616e 2063 6c61 7373 af = typen\n-0001e370: 616d 653c 2f73 7061 6e3e 203c 6120 636c ame Decision\n-0001e3b0: 5472 6565 266c 743b 4d2c 2058 2667 743b Tree<M, X>\n-0001e3c0: 3a3a 4c65 6166 3c2f 613e 3b3c 2f64 6976 ::Leaf;.
681<\n-0001e420: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> if (<\n-0001e450: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0001e460: 6f72 6422 3e61 7574 6f3c 2f73 7061 6e3e ord\">auto\n-0001e470: 206c 6561 6620 3d20 626f 6f73 743a 3a64 leaf = boost::d\n-0001e480: 796e 616d 6963 5f70 6f69 6e74 6572 5f63 ynamic_pointer_c\n-0001e490: 6173 7426 6c74 3b63 6f6e 7374 204d 584c ast<const MXL\n-0001e4a0: 6561 6626 6774 3b28 6629 2920 7b3c 2f64 eaf>(f)) {.
68\n-0001e500: 323c 2f73 7061 6e3e 2020 2020 2020 3c73 2 return NodePtr(new \n-0001e5e0: 4c65 6166 3c2f 613e 2859 5f6f 665f 5828 Leaf(Y_of_X(\n-0001e5f0: 6c65 6166 2d26 6774 3b63 6f6e 7374 616e leaf->constan\n-0001e600: 7428 2929 2c20 6c65 6166 2d26 6774 3b6e t()), leaf->n\n-0001e610: 7241 7373 6967 6e6d 656e 7473 2829 2929 rAssignments()))\n-0001e620: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0001e670: 2020 3638 333c 2f73 7061 6e3e 2020 2020 683 \n-0001e680: 7d3c 2f64 6976 3e0a 3c64 6976 2063 6c61 }
.
\n-0001e6d0: 2020 3638 343c 2f73 7061 6e3e 203c 2f64 684 .
68\n-0001e730: 353c 2f73 7061 6e3e 2020 2020 3c73 7061 5 // Check if Ch\n-0001e760: 6f69 6365 3c2f 7370 616e 3e3c 2f64 6976 oice.
686<\n-0001e7c0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n-0001e7e0: 7573 696e 6720 3c2f 7370 616e 3e4d 5843 using MXC\n-0001e7f0: 686f 6963 6520 3d20 3c73 7061 6e20 636c hoice = ty\n-0001e810: 7065 6e61 6d65 3c2f 7370 616e 3e20 3c61 pename Decis\n-0001e850: 696f 6e54 7265 6526 6c74 3b4d 2c20 5826 ionTree<M, X&\n-0001e860: 6774 3b3a 3a43 686f 6963 653c 2f61 3e3b gt;::Choice;\n-0001e870: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001e8c0: 2036 3837 3c2f 7370 616e 3e20 2020 203c 687 <\n-0001e8d0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0001e8e0: 6f72 6422 3e61 7574 6f3c 2f73 7061 6e3e ord\">auto\n-0001e8f0: 2063 686f 6963 6520 3d20 626f 6f73 743a choice = boost:\n-0001e900: 3a64 796e 616d 6963 5f70 6f69 6e74 6572 :dynamic_pointer\n-0001e910: 5f63 6173 7426 6c74 3b63 6f6e 7374 204d _cast<const M\n-0001e920: 5843 686f 6963 6526 6774 3b28 6629 3b3c XChoice>(f);<\n-0001e930: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0001e980: 3638 383c 2f73 7061 6e3e 2020 2020 3c73 688 if (!choice) throw std::invalid_\n-0001e9f0: 6172 6775 6d65 6e74 283c 2f64 6976 3e0a argument(
.\n-0001ea00: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-0001ead0: 3c61 2069 643d 226c 3030 3639 3022 206e 690
.
691 \n-0001eb70: 2020 3c73 7061 6e20 636c 6173 733d 2263 // get n\n-0001eb90: 6577 206c 6162 656c 3c2f 7370 616e 3e3c ew label<\n-0001eba0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0001ebf0: 3639 323c 2f73 7061 6e3e 2020 2020 3c73 692 const\n-0001ec20: 204d 206f 6c64 4c61 6265 6c20 3d20 6368 M oldLabel = ch\n-0001ec30: 6f69 6365 2d26 6774 3b6c 6162 656c 2829 oice->label()\n-0001ec40: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0001ec90: 2020 3639 333c 2f73 7061 6e3e 2020 2020 693 \n-0001eca0: 3c73 7061 6e20 636c 6173 733d 226b 6579 const L newLabel = \n-0001ecd0: 4c5f 6f66 5f4d 286f 6c64 4c61 6265 6c29 L_of_M(oldLabel)\n-0001ece0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-0001ed30: 2020 3639 343c 2f73 7061 6e3e 203c 2f64 694 .
69\n-0001ed90: 353c 2f73 7061 6e3e 2020 2020 3c73 7061 5 // put togethe\n-0001edc0: 7220 7669 6120 5368 616e 6e6f 6e20 6578 r via Shannon ex\n-0001edd0: 7061 6e73 696f 6e20 6f74 6865 7277 6973 pansion otherwis\n-0001ede0: 6520 6e6f 7420 736f 7274 6564 2e3c 2f73 e not sorted.
.
696 \n-0001ee50: 2020 2073 7464 3a3a 7665 6374 6f72 266c std::vector&l\n-0001ee60: 743b 4c59 2667 743b 2066 756e 6374 696f t;LY> functio\n-0001ee70: 6e73 3b3c 2f64 6976 3e0a 3c64 6976 2063 ns;
.
697 \n-0001eed0: 2020 3c73 7061 6e20 636c 6173 733d 226b for<\n-0001eef0: 2f73 7061 6e3e 2028 3c73 7061 6e20 636c /span> (au\n-0001ef10: 746f 3c2f 7370 616e 3e26 616d 703b 2661 to&&a\n-0001ef20: 6d70 3b20 6272 616e 6368 203a 2063 686f mp; branch : cho\n-0001ef30: 6963 652d 2667 743b 6272 616e 6368 6573 ice->branches\n-0001ef40: 2829 2920 7b3c 2f64 6976 3e0a 3c64 6976 ()) {
.<\n-0001ef80: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0001ef90: 6e6f 223e 2020 3639 383c 2f73 7061 6e3e no\"> 698\n-0001efa0: 2020 2020 2020 6675 6e63 7469 6f6e 732e functions.\n-0001efb0: 656d 706c 6163 655f 6261 636b 2863 6f6e emplace_back(con\n-0001efc0: 7665 7274 4672 6f6d 266c 743b 4d2c 2058 vertFrom<M, X\n-0001efd0: 2667 743b 2862 7261 6e63 682c 204c 5f6f >(branch, L_o\n-0001efe0: 665f 4d2c 2059 5f6f 665f 5829 293b 3c2f f_M, Y_of_X));.
6\n-0001f040: 3939 3c2f 7370 616e 3e20 2020 207d 3c2f 99 }.
7\n-0001f0a0: 3030 3c2f 7370 616e 3e20 2020 203c 7370 00 return LY::compose\n-0001f0e0: 2866 756e 6374 696f 6e73 2e62 6567 696e (functions.begin\n-0001f0f0: 2829 2c20 6675 6e63 7469 6f6e 732e 656e (), functions.en\n-0001f100: 6428 292c 206e 6577 4c61 6265 6c29 3b3c d(), newLabel);<\n-0001f110: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0001f160: 3730 313c 2f73 7061 6e3e 2020 7d3c 2f64 701 }.
.
702 \n-0001f1d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001f220: 2037 3033 3c2f 7370 616e 3e3c 7370 616e 703 /************\n-0001f250: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0001f260: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0001f270: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0001f280: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0001f290: 2f3c 2f73 7061 6e3e 3c2f 6469 763e 0a3c /
.<\n-0001f2a0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0001f2b0: 3e3c 6120 6964 3d22 6c30 3037 3134 2220 > 714 templ\n-0001f310: 6174 653c 2f73 7061 6e3e 2026 6c74 3b3c ate <<\n-0001f320: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0001f330: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename L, ty\n-0001f360: 7065 6e61 6d65 3c2f 7370 616e 3e20 5926 pename Y&\n-0001f370: 6774 3b3c 2f64 6976 3e0a 3c64 6976 2063 gt;
.
\n-0001f3c0: 0a3c 6469 7620 636c 6173 733d 226c 696e .\n-0001f4a0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0001f4d0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 716 u\n-0001f510: 7369 6e67 203c 2f73 7061 6e3e 4620 3d20 sing F = \n-0001f520: 7374 643a 3a66 756e 6374 696f 6e26 6c74 std::function<\n-0001f530: 3b76 6f69 6428 3c73 7061 6e20 636c 6173 ;void(cons\n-0001f550: 743c 2f73 7061 6e3e 2059 2661 6d70 3b29 t Y&)\n-0001f560: 2667 743b 3b3c 2f64 6976 3e0a 3c64 6976 >;
.<\n-0001f5a0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0001f5b0: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 717 explicit Visit(F \n-0001f690: 3c61 2063 6c61 7373 3d22 636f 6465 2068 f) : f\n-0001f740: 283c 6120 636c 6173 733d 2263 6f64 6520 (f) {} .
.
718 F f\n-0001f8e0: 3c2f 613e 3b20 2020 2020 2020 2020 2020 ; \n-0001f8f0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0001f900: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0001f950: 2037 3139 3c2f 7370 616e 3e20 3c2f 6469 719 .
.
721<\n-0001fa40: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> void \n-0001fa70: 3c61 2063 6c61 7373 3d22 636f 6465 2068 operator()(\n-0001fad0: 3c73 7061 6e20 636c 6173 733d 226b 6579 const typenam\n-0001fb10: 653c 2f73 7061 6e3e 203c 6120 636c 6173 e Decisio\n-0001fb70: 6e54 7265 6526 6c74 3b4c 2c20 5926 6774 nTree<L, Y>\n-0001fb80: 3b3a 3a4e 6f64 6550 7472 3c2f 613e 2661 ;::NodePtr&a\n-0001fb90: 6d70 3b20 6e6f 6465 293c 7370 616e 2063 mp; node) \n-0001fbb0: 636f 6e73 7420 3c2f 7370 616e 3e7b 3c2f const {.
7\n-0001fc10: 3232 3c2f 7370 616e 3e20 2020 2020 203c 22 <\n-0001fc20: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0001fc30: 6f72 6422 3e75 7369 6e67 203c 2f73 7061 ord\">using Leaf = t\n-0001fc60: 7970 656e 616d 653c 2f73 7061 6e3e 203c ypename <\n-0001fc70: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-0001fc80: 5f73 7472 7563 7422 2068 7265 663d 2261 _struct\" href=\"a\n-0001fc90: 3032 3737 362e 6874 6d6c 223e 4465 6369 02776.html\">Deci\n-0001fca0: 7369 6f6e 5472 6565 266c 743b 4c2c 2059 sionTree<L, Y\n-0001fcb0: 2667 743b 3a3a 4c65 6166 3c2f 613e 3b3c >::Leaf;<\n-0001fcc0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0001fd10: 3732 333c 2f73 7061 6e3e 2020 2020 2020 723 \n-0001fd20: 3c73 7061 6e20 636c 6173 733d 226b 6579 if (auto<\n-0001fd60: 2f73 7061 6e3e 206c 6561 6620 3d20 626f /span> leaf = bo\n-0001fd70: 6f73 743a 3a64 796e 616d 6963 5f70 6f69 ost::dynamic_poi\n-0001fd80: 6e74 6572 5f63 6173 7426 6c74 3b63 6f6e nter_cast<con\n-0001fd90: 7374 204c 6561 6626 6774 3b28 6e6f 6465 st Leaf>(node\n-0001fda0: 2929 3c2f 6469 763e 0a3c 6469 7620 636c ))
.
724 \n-0001fe00: 2020 2020 203c 7370 616e 2063 6c61 7373 r\n-0001fe20: 6574 7572 6e3c 2f73 7061 6e3e 203c 6120 eturn f<\n-0001fe80: 2f61 3e28 6c65 6166 2d26 6774 3b63 6f6e /a>(leaf->con\n-0001fe90: 7374 616e 7428 2929 3b3c 2f64 6976 3e0a stant());
.\n-0001fea0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-0001ff30: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-0001ff40: 6e6f 223e 2020 3732 363c 2f73 7061 6e3e no\"> 726\n-0001ff50: 2020 2020 2020 3c73 7061 6e20 636c 6173 usin\n-0001ff70: 6720 3c2f 7370 616e 3e43 686f 6963 6520 g Choice \n-0001ff80: 3d20 3c73 7061 6e20 636c 6173 733d 226b = typename\n-0001ffa0: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 DecisionTre\n-0001ffe0: 6526 6c74 3b4c 2c20 5926 6774 3b3a 3a43 e<L, Y>::C\n-0001fff0: 686f 6963 653c 2f61 3e3b 3c2f 6469 763e hoice;
\n-00020000: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00020030: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 727 auto cho\n-00020080: 6963 6520 3d20 626f 6f73 743a 3a64 796e ice = boost::dyn\n-00020090: 616d 6963 5f70 6f69 6e74 6572 5f63 6173 amic_pointer_cas\n-000200a0: 7426 6c74 3b63 6f6e 7374 2043 686f 6963 t<const Choic\n-000200b0: 6526 6774 3b28 6e6f 6465 293b 3c2f 6469 e>(node);.
728\n-00020110: 3c2f 7370 616e 3e20 2020 2020 203c 7370 if\n-00020140: 2028 2163 686f 6963 6529 3c2f 6469 763e (!choice)
\n-00020150: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00020180: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 729 throw std::invalid\n-000201e0: 5f61 7267 756d 656e 7428 3c73 7061 6e20 _argument("Deci\n-00020210: 7369 6f6e 5472 6565 3a3a 5669 7369 743a sionTree::Visit:\n-00020220: 2049 6e76 616c 6964 204e 6f64 6550 7472 Invalid NodePtr\n-00020230: 2671 756f 743b 3c2f 7370 616e 3e29 3b3c ");<\n-00020240: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00020290: 3733 303c 2f73 7061 6e3e 2020 2020 2020 730 \n-000202a0: 3c73 7061 6e20 636c 6173 733d 226b 6579 for (auto\n-000202e0: 3c2f 7370 616e 3e26 616d 703b 2661 6d70 &&\n-000202f0: 3b20 6272 616e 6368 203a 2063 686f 6963 ; branch : choic\n-00020300: 652d 2667 743b 6272 616e 6368 6573 2829 e->branches()\n-00020310: 2920 282a 3c73 7061 6e20 636c 6173 733d ) (*this)(branch); \n-00020340: 203c 7370 616e 2063 6c61 7373 3d22 636f // recurs\n-00020360: 6521 3c2f 7370 616e 3e3c 2f64 6976 3e0a e!
.\n-00020370: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-000203d0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00020420: 2037 3332 3c2f 7370 616e 3e20 207d 3b3c 732 };<\n-00020430: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00020480: 3733 333c 2f73 7061 6e3e 203c 2f64 6976 733 .
734<\n-000204e0: 2f73 7061 6e3e 2020 3c73 7061 6e20 636c /span> te\n-00020500: 6d70 6c61 7465 3c2f 7370 616e 3e20 266c mplate &l\n-00020510: 743b 3c73 7061 6e20 636c 6173 733d 226b t;typename\n-00020530: 3c2f 7370 616e 3e20 4c2c 203c 7370 616e L, typename\n-00020560: 2059 2667 743b 3c2f 6469 763e 0a3c 6469 Y>
.<\n-00020580: 6120 6964 3d22 6c30 3037 3335 2220 6e61 a id=\"l00735\" na\n-00020590: 6d65 3d22 6c30 3037 3335 223e 3c2f 613e me=\"l00735\">\n-000205a0: 3c73 7061 6e20 636c 6173 733d 226c 696e 735 templat\n-000205e0: 653c 2f73 7061 6e3e 2026 6c74 3b3c 7370 e <typename Func>.
.
\n-000206b0: 3c61 2063 6c61 7373 3d22 6c69 6e65 2220 736 void De\n-00020780: 6369 7369 6f6e 5472 6565 266c 743b 4c2c cisionTree<L,\n-00020790: 2059 2667 743b 3a3a 7669 7369 743c 2f61 Y>::visit(Func f) \n-000207c0: 636f 6e73 7420 3c2f 7370 616e 3e7b 3c2f const {.
7\n-00020820: 3337 3c2f 7370 616e 3e20 2020 203c 6120 37 Visit&\n-00020860: 6c74 3b4c 2c20 5926 6774 3b3c 2f61 3e20 lt;L, Y> \n-00020870: 7669 7369 7428 6629 3b3c 2f64 6976 3e0a visit(f);
.\n-00020880: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00020920: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00020930: 6e6f 223e 2020 3733 393c 2f73 7061 6e3e no\"> 739\n-00020940: 2020 7d3c 2f64 6976 3e0a 3c2f 6469 763e }
.
\n-00020950: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-000209c0: 6120 6964 3d22 6c30 3037 3431 2220 6e61 a id=\"l00741\" na\n-000209d0: 6d65 3d22 6c30 3037 3431 223e 3c2f 613e me=\"l00741\">\n-000209e0: 3c73 7061 6e20 636c 6173 733d 226c 696e 741 /******\n-00020a20: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00020a30: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00020a40: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00020a50: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00020a60: 2a2a 2a2a 2a2a 2f3c 2f73 7061 6e3e 3c2f ******/.
7\n-00020ac0: 3531 3c2f 7370 616e 3e20 203c 7370 616e 51 template\n-00020af0: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n-00020b10: 616d 653c 2f73 7061 6e3e 204c 2c20 3c73 ame L, typename Y>
.\n-00020b50: 3c64 6976 2063 6c61 7373 3d22 666f 6c64
.
<\n-00020be0: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-00020bf0: 7265 663d 2261 3032 3738 382e 6874 6d6c ref=\"a02788.html\n-00020c00: 223e 2020 3735 323c 2f61 3e3c 2f73 7061 \"> 752 struct\n-00020c30: 203c 2f73 7061 6e3e 3c61 2063 6c61 7373 VisitLeaf {
.
753 \n-00020cd0: 2020 203c 7370 616e 2063 6c61 7373 3d22 using <\n-00020cf0: 2f73 7061 6e3e 4620 3d20 7374 643a 3a66 /span>F = std::f\n-00020d00: 756e 6374 696f 6e26 6c74 3b76 6f69 6428 unction<void(\n-00020d10: 3c73 7061 6e20 636c 6173 733d 226b 6579 const typenam\n-00020d50: 653c 2f73 7061 6e3e 203c 6120 636c 6173 e DecisionTr\n-00020d90: 6565 266c 743b 4c2c 2059 2667 743b 3a3a ee<L, Y>::\n-00020da0: 4c65 6166 3c2f 613e 2661 6d70 3b29 2667 Leaf&)&g\n-00020db0: 743b 3b3c 2f64 6976 3e0a 3c64 6976 2063 t;;
.
754\n-00020e50: 3c2f 7370 616e 3e20 2020 203c 7370 616e explicit\n-00020e80: 203c 6120 636c 6173 733d 2263 6f64 6520 VisitLeaf(\n-00020ee0: 4620 3c61 2063 6c61 7373 3d22 636f 6465 F f) : f(f) {} <\n-00020ff0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
.<\n-00021050: 6120 6964 3d22 6c30 3037 3535 2220 6e61 a id=\"l00755\" na\n-00021060: 6d65 3d22 6c30 3037 3535 223e 3c2f 613e me=\"l00755\">\n-00021070: 3c73 7061 6e20 636c 6173 733d 226c 696e 755<\n-000210d0: 2f61 3e3c 2f73 7061 6e3e 2020 2020 4620 /a> F \n-000210e0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 f; \n-00021140: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00021150: 2020 3c2f 6469 763e 0a3c 6469 7620 636c
.
756 .
..
\n-00021460: 2037 3539 3c2f 7370 616e 3e20 2020 2020 759 \n-00021470: 203c 7370 616e 2063 6c61 7373 3d22 6b65 using Leaf = typename\n-000214c0: 203c 6120 636c 6173 733d 2263 6f64 6520 De\n-000214f0: 6369 7369 6f6e 5472 6565 266c 743b 4c2c cisionTree<L,\n-00021500: 2059 2667 743b 3a3a 4c65 6166 3c2f 613e Y>::Leaf\n-00021510: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00021560: 2020 3736 303c 2f73 7061 6e3e 2020 2020 760 \n-00021570: 2020 3c73 7061 6e20 636c 6173 733d 226b if (aut\n-000215b0: 6f3c 2f73 7061 6e3e 206c 6561 6620 3d20 o leaf = \n-000215c0: 626f 6f73 743a 3a64 796e 616d 6963 5f70 boost::dynamic_p\n-000215d0: 6f69 6e74 6572 5f63 6173 7426 6c74 3b63 ointer_cast<c\n-000215e0: 6f6e 7374 204c 6561 6626 6774 3b28 6e6f onst Leaf>(no\n-000215f0: 6465 2929 3c2f 6469 763e 0a3c 6469 7620 de))
.
761 \n-00021650: 2020 2020 2020 203c 7370 616e 2063 6c61 return <\n-00021680: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00021690: 5f76 6172 6961 626c 6522 2068 7265 663d _variable\" href=\n-000216a0: 2261 3032 3738 382e 6874 6d6c 2361 6330 \"a02788.html#ac0\n-000216b0: 6231 6136 6637 3233 3434 6638 6363 3436 b1a6f72344f8cc46\n-000216c0: 3038 6130 3564 6162 3433 3961 3461 223e 08a05dab439a4a\">\n-000216d0: 663c 2f61 3e28 2a6c 6561 6629 3b3c 2f64 f(*leaf);.
76\n-00021730: 323c 2f73 7061 6e3e 203c 2f64 6976 3e0a 2
.\n-00021740: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-00021770: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 763 \n-000217b0: 7573 696e 6720 3c2f 7370 616e 3e43 686f using Cho\n-000217c0: 6963 6520 3d20 3c73 7061 6e20 636c 6173 ice = type\n-000217e0: 6e61 6d65 3c2f 7370 616e 3e20 3c61 2063 name Decisio\n-00021820: 6e54 7265 6526 6c74 3b4c 2c20 5926 6774 nTree<L, Y>\n-00021830: 3b3a 3a43 686f 6963 653c 2f61 3e3b 3c2f ;::Choice;.
7\n-00021890: 3634 3c2f 7370 616e 3e20 2020 2020 203c 64 <\n-000218a0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-000218b0: 6f72 6422 3e61 7574 6f3c 2f73 7061 6e3e ord\">auto\n-000218c0: 2063 686f 6963 6520 3d20 626f 6f73 743a choice = boost:\n-000218d0: 3a64 796e 616d 6963 5f70 6f69 6e74 6572 :dynamic_pointer\n-000218e0: 5f63 6173 7426 6c74 3b63 6f6e 7374 2043 _cast<const C\n-000218f0: 686f 6963 6526 6774 3b28 6e6f 6465 293b hoice>(node);\n-00021900: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00021950: 2037 3635 3c2f 7370 616e 3e20 2020 2020 765 \n-00021960: 203c 7370 616e 2063 6c61 7373 3d22 6b65 if (!choice).
7\n-000219e0: 3636 3c2f 7370 616e 3e20 2020 2020 2020 66 \n-000219f0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 throw\n-00021a10: 3c2f 7370 616e 3e20 7374 643a 3a69 6e76 std::inv\n-00021a20: 616c 6964 5f61 7267 756d 656e 7428 3c73 alid_argument("\n-00021a50: 4465 6369 7369 6f6e 5472 6565 3a3a 5669 DecisionTree::Vi\n-00021a60: 7369 744c 6561 663a 2049 6e76 616c 6964 sitLeaf: Invalid\n-00021a70: 204e 6f64 6550 7472 2671 756f 743b 3c2f NodePtr");
.\n-00021aa0: 3c61 2069 643d 226c 3030 3736 3722 206e 767 for (auto&\n-00021b30: 616d 703b 2661 6d70 3b20 6272 616e 6368 amp;& branch\n-00021b40: 203a 2063 686f 6963 652d 2667 743b 6272 : choice->br\n-00021b50: 616e 6368 6573 2829 2920 282a 3c73 7061 anches()) (*this
)(b\n-00021b80: 7261 6e63 6829 3b20 203c 7370 616e 2063 ranch); /\n-00021ba0: 2f20 7265 6375 7273 6521 3c2f 7370 616e / recurse!
.
\n-00021c00: 2020 3736 383c 2f73 7061 6e3e 2020 2020 768 \n-00021c10: 7d3c 2f64 6976 3e0a 3c2f 6469 763e 0a3c }
.
.<\n-00021c20: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00021c30: 3e3c 6120 6964 3d22 6c30 3037 3639 2220 > 769 };
.\n-00021c90: 3c61 2069 643d 226c 3030 3737 3022 206e 770
.
771 \n-00021d30: 3c73 7061 6e20 636c 6173 733d 226b 6579 template <\n-00021d70: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n-00021d80: 4c2c 203c 7370 616e 2063 6c61 7373 3d22 L, typenam\n-00021da0: 653c 2f73 7061 6e3e 2059 2667 743b 3c2f e Y>.
7\n-00021e00: 3732 3c2f 7370 616e 3e20 203c 7370 616e 72 template\n-00021e30: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n-00021e50: 616d 653c 2f73 7061 6e3e 2046 756e 6326 ame Func&\n-00021e60: 6774 3b3c 2f64 6976 3e0a 3c64 6976 2063 gt;
.
.\n-00021eb0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65
<\n-00021ee0: 2f61 3e3c 7370 616e 2063 6c61 7373 3d22 /a> 7\n-00021f40: 3733 3c2f 613e 3c2f 7370 616e 3e20 203c 73 <\n-00021f50: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00021f60: 6f72 6474 7970 6522 3e76 6f69 643c 2f73 ordtype\">void DecisionTr\n-00021fd0: 6565 266c 743b 4c2c 2059 2667 743b 3a3a ee<L, Y>::\n-00021fe0: 7669 7369 744c 6561 663c 2f61 3e28 4675 visitLeaf(Fu\n-00021ff0: 6e63 2066 293c 7370 616e 2063 6c61 7373 nc f) cons\n-00022010: 7420 3c2f 7370 616e 3e7b 3c2f 6469 763e t {
\n-00022020: 0a3c 6469 7620 636c 6173 733d 226c 696e ..\n-000220d0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00022170: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00022180: 6e6f 223e 2020 3737 363c 2f73 7061 6e3e no\"> 776\n-00022190: 2020 7d3c 2f64 6976 3e0a 3c2f 6469 763e }
.
\n-000221a0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00022210: 6120 6964 3d22 6c30 3037 3738 2220 6e61 a id=\"l00778\" na\n-00022220: 6d65 3d22 6c30 3037 3738 223e 3c2f 613e me=\"l00778\">\n-00022230: 3c73 7061 6e20 636c 6173 733d 226c 696e 778 /******\n-00022270: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00022280: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00022290: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000222a0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000222b0: 2a2a 2a2a 2a2a 2f3c 2f73 7061 6e3e 3c2f ******/.
7\n-00022310: 3835 3c2f 7370 616e 3e20 203c 7370 616e 85 template\n-00022340: 2026 6c74 3b3c 7370 616e 2063 6c61 7373 <typen\n-00022360: 616d 653c 2f73 7061 6e3e 204c 2c20 3c73 ame L, typename Y>
.\n-000223a0: 3c64 6976 2063 6c61 7373 3d22 666f 6c64
.
<\n-00022430: 6120 636c 6173 733d 226c 696e 6522 2068 a class=\"line\" h\n-00022440: 7265 663d 2261 3032 3739 322e 6874 6d6c ref=\"a02792.html\n-00022450: 223e 2020 3738 363c 2f61 3e3c 2f73 7061 \"> 786 struct\n-00022480: 203c 2f73 7061 6e3e 3c61 2063 6c61 7373 VisitWith {
.
787 \n-00022520: 2020 203c 7370 616e 2063 6c61 7373 3d22 using <\n-00022540: 2f73 7061 6e3e 4620 3d20 7374 643a 3a66 /span>F = std::f\n-00022550: 756e 6374 696f 6e26 6c74 3b76 6f69 6428 unction<void(\n-00022560: 3c73 7061 6e20 636c 6173 733d 226b 6579 const A\n-000225b0: 7373 6967 6e6d 656e 7426 6c74 3b4c 2667 ssignment<L&g\n-000225c0: 743b 3c2f 613e 2661 6d70 3b2c 203c 7370 t;&, const \n-000225f0: 5926 616d 703b 2926 6774 3b3b 3c2f 6469 Y&)>;.
\n-00022690: 2020 3738 383c 2f61 3e3c 2f73 7061 6e3e 788\n-000226a0: 2020 2020 3c73 7061 6e20 636c 6173 733d explic\n-000226c0: 6974 3c2f 7370 616e 3e20 3c61 2063 6c61 it Visit\n-00022720: 5769 7468 3c2f 613e 2846 203c 6120 636c With(F f) : f(f) {}
.<\n-00022840: 6469 7620 636c 6173 733d 2266 6f6c 646f div class=\"foldo\n-00022850: 7065 6e22 2069 643d 2266 6f6c 646f 7065 pen\" id=\"foldope\n-00022860: 6e30 3037 3839 2220 6461 7461 2d73 7461 n00789\" data-sta\n-00022870: 7274 3d22 7b22 2064 6174 612d 656e 643d rt=\"{\" data-end=\n-00022880: 227d 3b22 3e0a 3c64 6976 2063 6c61 7373 \"};\">.
789 Assignment<\n-00022960: 3b4c 2667 743b 3c2f 613e 203c 6120 636c ;L> assi\n-000229c0: 676e 6d65 6e74 3c2f 613e 3b20 203c 2f64 gnment; .
790 F f; \n-00022ad0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00022ae0: 2020 2020 203c 2f64 6976 3e0a 3c64 6976
.<\n-00022b20: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00022b30: 6e6f 223e 2020 3739 313c 2f73 7061 6e3e no\"> 791
\n-00022b40: 203c 2f64 6976 3e0a 3c64 6976 2063 6c61
.
.\n-00022ba0: 3c61 2069 643d 226c 3030 3739 3322 206e 793\n-00022c20: 3c2f 613e 3c2f 7370 616e 3e20 2020 203c <\n-00022c30: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00022c40: 6f72 6474 7970 6522 3e76 6f69 643c 2f73 ordtype\">void operator()\n-00022cb0: 3c2f 613e 283c 7370 616e 2063 6c61 7373 (const\n-00022cd0: 3c2f 7370 616e 3e20 3c73 7061 6e20 636c ty\n-00022cf0: 7065 6e61 6d65 3c2f 7370 616e 3e20 3c61 pename De\n-00022d50: 6369 7369 6f6e 5472 6565 266c 743b 4c2c cisionTree<L,\n-00022d60: 2059 2667 743b 3a3a 4e6f 6465 5074 723c Y>::NodePtr<\n-00022d70: 2f61 3e26 616d 703b 206e 6f64 6529 207b /a>& node) {\n-00022d80: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00022dd0: 2037 3934 3c2f 7370 616e 3e20 2020 2020 794 \n-00022de0: 203c 7370 616e 2063 6c61 7373 3d22 6b65 using Leaf = typename\n-00022e30: 203c 6120 636c 6173 733d 2263 6f64 6520 De\n-00022e60: 6369 7369 6f6e 5472 6565 266c 743b 4c2c cisionTree<L,\n-00022e70: 2059 2667 743b 3a3a 4c65 6166 3c2f 613e Y>::Leaf\n-00022e80: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00022ed0: 2020 3739 353c 2f73 7061 6e3e 2020 2020 795 \n-00022ee0: 2020 3c73 7061 6e20 636c 6173 733d 226b if (aut\n-00022f20: 6f3c 2f73 7061 6e3e 206c 6561 6620 3d20 o leaf = \n-00022f30: 626f 6f73 743a 3a64 796e 616d 6963 5f70 boost::dynamic_p\n-00022f40: 6f69 6e74 6572 5f63 6173 7426 6c74 3b63 ointer_cast<c\n-00022f50: 6f6e 7374 204c 6561 6626 6774 3b28 6e6f onst Leaf>(no\n-00022f60: 6465 2929 3c2f 6469 763e 0a3c 6469 7620 de))
.
796 \n-00022fc0: 2020 2020 2020 203c 7370 616e 2063 6c61 return <\n-00022ff0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00023000: 5f76 6172 6961 626c 6522 2068 7265 663d _variable\" href=\n-00023010: 2261 3032 3739 322e 6874 6d6c 2361 6463 \"a02792.html#adc\n-00023020: 3463 6662 3532 6434 3430 3932 6364 6165 4cfb52d44092cdae\n-00023030: 3966 3136 6365 6461 3835 3066 3535 223e 9f16ceda850f55\">\n-00023040: 663c 2f61 3e28 3c61 2063 6c61 7373 3d22 f(assignmen\n-000230a0: 743c 2f61 3e2c 206c 6561 662d 2667 743b t, leaf->\n-000230b0: 636f 6e73 7461 6e74 2829 293b 3c2f 6469 constant());.
797\n-00023110: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-00023120: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00023130: 3e3c 6120 6964 3d22 6c30 3037 3938 2220 > 798 u\n-00023190: 7369 6e67 203c 2f73 7061 6e3e 4368 6f69 sing Choi\n-000231a0: 6365 203d 203c 7370 616e 2063 6c61 7373 ce = typen\n-000231c0: 616d 653c 2f73 7061 6e3e 203c 6120 636c ame Decision\n-00023200: 5472 6565 266c 743b 4c2c 2059 2667 743b Tree<L, Y>\n-00023210: 3a3a 4368 6f69 6365 3c2f 613e 3b3c 2f64 ::Choice;.
79\n-00023270: 393c 2f73 7061 6e3e 2020 2020 2020 3c73 9 auto \n-000232a0: 6368 6f69 6365 203d 2062 6f6f 7374 3a3a choice = boost::\n-000232b0: 6479 6e61 6d69 635f 706f 696e 7465 725f dynamic_pointer_\n-000232c0: 6361 7374 266c 743b 636f 6e73 7420 4368 cast<const Ch\n-000232d0: 6f69 6365 2667 743b 286e 6f64 6529 3b3c oice>(node);<\n-000232e0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00023330: 3830 303c 2f73 7061 6e3e 2020 2020 2020 800 \n-00023340: 3c73 7061 6e20 636c 6173 733d 226b 6579 if (!choice).
80\n-000233c0: 313c 2f73 7061 6e3e 2020 2020 2020 2020 1 \n-000233d0: 3c73 7061 6e20 636c 6173 733d 226b 6579 throw<\n-000233f0: 2f73 7061 6e3e 2073 7464 3a3a 696e 7661 /span> std::inva\n-00023400: 6c69 645f 6172 6775 6d65 6e74 283c 7370 lid_argument("D\n-00023430: 6563 6973 696f 6e54 7265 653a 3a56 6973 ecisionTree::Vis\n-00023440: 6974 5769 7468 3a20 496e 7661 6c69 6420 itWith: Invalid \n-00023450: 4e6f 6465 5074 7226 7175 6f74 3b3c 2f73 NodePtr");
.<\n-00023480: 6120 6964 3d22 6c30 3038 3032 2220 6e61 a id=\"l00802\" na\n-00023490: 6d65 3d22 6c30 3038 3032 223e 3c2f 613e me=\"l00802\">\n-000234a0: 3c73 7061 6e20 636c 6173 733d 226c 696e 802 for (size_t i = 0; i &l\n-00023520: 743b 2063 686f 6963 652d 2667 743b 6e72 t; choice->nr\n-00023530: 4368 6f69 6365 7328 293b 2069 2b2b 2920 Choices(); i++) \n-00023540: 7b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 {
..<\n-00023780: 6120 6964 3d22 6c30 3038 3036 2220 6e61 a id=\"l00806\" na\n-00023790: 6d65 3d22 6c30 3038 3036 223e 3c2f 613e me=\"l00806\">\n-000237a0: 3c73 7061 6e20 636c 6173 733d 226c 696e 806
.
807 \n-00023820: 2020 2020 203c 7370 616e 2063 6c61 7373 // Re\n-00023840: 6d6f 7665 2074 6865 2063 686f 6963 6520 move the choice \n-00023850: 736f 2077 6520 6172 6520 6261 636b 7472 so we are backtr\n-00023860: 6163 6b69 6e67 3c2f 7370 616e 3e3c 2f64 acking.
80\n-000238c0: 383c 2f73 7061 6e3e 2020 2020 2020 2020 8 \n-000238d0: 3c73 7061 6e20 636c 6173 733d 226b 6579 auto choice_it = a\n-00023950: 7373 6967 6e6d 656e 743c 2f61 3e2e 6669 ssignment.fi\n-00023960: 6e64 2863 686f 6963 652d 2667 743b 6c61 nd(choice->la\n-00023970: 6265 6c28 2929 3b3c 2f64 6976 3e0a 3c64 bel());
.\n-00023990: 3c61 2069 643d 226c 3030 3830 3922 206e 809 assig\n-00023a30: 6e6d 656e 743c 2f61 3e2e 6572 6173 6528 nment.erase(\n-00023a40: 6368 6f69 6365 5f69 7429 3b3c 2f64 6976 choice_it);.
810<\n-00023aa0: 2f73 7061 6e3e 2020 2020 2020 7d3c 2f64 /span> }.
81\n-00023b00: 313c 2f73 7061 6e3e 2020 2020 7d3c 2f64 1 }.
.
812 \n-00023b70: 207d 3b3c 2f64 6976 3e0a 3c64 6976 2063 };
.
813 <\n-00023bd0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00023c20: 3831 343c 2f73 7061 6e3e 2020 3c73 7061 814 template <type\n-00023c70: 6e61 6d65 3c2f 7370 616e 3e20 4c2c 203c name L, <\n-00023c80: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00023c90: 6f72 6422 3e74 7970 656e 616d 653c 2f73 ord\">typename Y>
\n-00023cb0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00023ce0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 815 tem\n-00023d20: 706c 6174 653c 2f73 7061 6e3e 2026 6c74 plate <\n-00023d30: 3b3c 7370 616e 2063 6c61 7373 3d22 6b65 ;typename<\n-00023d50: 2f73 7061 6e3e 2046 756e 6326 6774 3b3c /span> Func><\n-00023d60: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
.<\n-00023de0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00023df0: 6e6f 223e 3c61 2063 6c61 7373 3d22 6c69 no\"> 816 void\n-00023e70: 203c 6120 636c 6173 733d 2263 6f64 6520 DecisionTree&l\n-00023ed0: 743b 4c2c 2059 2667 743b 3a3a 7669 7369 t;L, Y>::visi\n-00023ee0: 7457 6974 683c 2f61 3e28 4675 6e63 2066 tWith(Func f\n-00023ef0: 293c 7370 616e 2063 6c61 7373 3d22 6b65 ) const {
.<\n-00023f30: 6120 6964 3d22 6c30 3038 3137 2220 6e61 a id=\"l00817\" na\n-00023f40: 6d65 3d22 6c30 3038 3137 223e 3c2f 613e me=\"l00817\">\n-00023f50: 3c73 7061 6e20 636c 6173 733d 226c 696e 817 VisitWith<L\n-00023fb0: 2c20 5926 6774 3b3c 2f61 3e20 7669 7369 , Y> visi\n-00023fc0: 7428 6629 3b3c 2f64 6976 3e0a 3c64 6976 t(f);
.<\n-00024000: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00024010: 6e6f 223e 2020 3831 383c 2f73 7061 6e3e no\"> 818\n-00024020: 2020 2020 7669 7369 7428 726f 6f74 5f29 visit(root_)\n-00024030: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00024080: 2020 3831 393c 2f73 7061 6e3e 2020 7d3c 819 }<\n-00024090: 2f64 6976 3e0a 3c2f 6469 763e 0a3c 6469 /div>.
.<\n-000240b0: 6120 6964 3d22 6c30 3038 3230 2220 6e61 a id=\"l00820\" na\n-000240c0: 6d65 3d22 6c30 3038 3230 223e 3c2f 613e me=\"l00820\">\n-000240d0: 3c73 7061 6e20 636c 6173 733d 226c 696e 820
.
821 /**********\n-00024170: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00024180: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00024190: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000241a0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000241b0: 2a2a 2f3c 2f73 7061 6e3e 3c2f 6469 763e **/
\n-000241c0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-000241f0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 822 tem\n-00024230: 706c 6174 653c 2f73 7061 6e3e 2026 6c74 plate <\n-00024240: 3b3c 7370 616e 2063 6c61 7373 3d22 6b65 ;typename<\n-00024260: 2f73 7061 6e3e 204c 2c20 3c73 7061 6e20 /span> L, \n-00024280: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n-00024290: 5926 6774 3b3c 2f64 6976 3e0a 3c64 6976 Y>
..
\n-00024370: 2038 3233 3c2f 613e 3c2f 7370 616e 3e20 823 \n-00024380: 203c 7370 616e 2063 6c61 7373 3d22 6b65 size_\n-000243a0: 743c 2f73 7061 6e3e 203c 6120 636c 6173 t Decisi\n-00024400: 6f6e 5472 6565 266c 743b 4c2c 2059 2667 onTree<L, Y&g\n-00024410: 743b 3a3a 6e72 4c65 6176 6573 3c2f 613e t;::nrLeaves\n-00024420: 2829 3c73 7061 6e20 636c 6173 733d 226b () const <\n-00024440: 2f73 7061 6e3e 7b3c 2f64 6976 3e0a 3c64 /span>{
.\n-00024460: 3c61 2069 643d 226c 3030 3832 3422 206e 824 \n-000244c0: 7369 7a65 5f74 3c2f 7370 616e 3e20 746f size_t to\n-000244d0: 7461 6c20 3d20 303b 3c2f 6469 763e 0a3c tal = 0;
.<\n-000244e0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000244f0: 3e3c 6120 6964 3d22 6c30 3038 3235 2220 > 825 visit([&a\n-00024540: 6d70 3b74 6f74 616c 5d28 3c73 7061 6e20 mp;total](\n-00024560: 636f 6e73 743c 2f73 7061 6e3e 2059 2661 const Y&a\n-00024570: 6d70 3b20 6e6f 6465 2920 7b20 746f 7461 mp; node) { tota\n-00024580: 6c20 2b3d 2031 3b20 7d29 3b3c 2f64 6976 l += 1; });.
826<\n-000245e0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> return total;
.<\n-00024620: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00024630: 3e3c 6120 6964 3d22 6c30 3038 3237 2220 > 827 }
..
82\n-000246d0: 383c 2f73 7061 6e3e 203c 2f64 6976 3e0a 8
.\n-000246e0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-000247f0: 2020 3833 303c 2f73 7061 6e3e 2020 3c73 830 // fold is j\n-00024820: 7573 7420 646f 6e65 2077 6974 6820 6120 ust done with a \n-00024830: 7669 7369 743c 2f73 7061 6e3e 3c2f 6469 visit.
831\n-00024890: 3c2f 7370 616e 3e20 203c 7370 616e 2063 t\n-000248b0: 656d 706c 6174 653c 2f73 7061 6e3e 2026 emplate &\n-000248c0: 6c74 3b3c 7370 616e 2063 6c61 7373 3d22 lt;typenam\n-000248e0: 653c 2f73 7061 6e3e 204c 2c20 3c73 7061 e L, typename Y>
.\n-00024930: 3c61 2069 643d 226c 3030 3833 3222 206e 832 templa\n-00024990: 7465 3c2f 7370 616e 3e20 266c 743b 3c73 te <typename Func, \n-000249e0: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n-000249f0: 5826 6774 3b3c 2f64 6976 3e0a 3c64 6976 X>
..
\n-00024ad0: 2038 3333 3c2f 613e 3c2f 7370 616e 3e20 833 \n-00024ae0: 2058 203c 6120 636c 6173 733d 2263 6f64 X DecisionTree\n-00024b40: 266c 743b 4c2c 2059 2667 743b 3a3a 666f <L, Y>::fo\n-00024b50: 6c64 3c2f 613e 2846 756e 6320 662c 2058 ld(Func f, X\n-00024b60: 2078 3029 3c73 7061 6e20 636c 6173 733d x0) const\n-00024b80: 203c 2f73 7061 6e3e 7b3c 2f64 6976 3e0a {
.\n-00024b90: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-00024c50: 3c61 2069 643d 226c 3030 3833 3522 206e 835 \n-00024cb0: 7265 7475 726e 3c2f 7370 616e 3e20 7830 return x0\n-00024cc0: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
\n-00024d10: 2020 3833 363c 2f73 7061 6e3e 2020 7d3c 836 }<\n-00024d20: 2f64 6976 3e0a 3c2f 6469 763e 0a3c 6469 /div>.
.<\n-00024d40: 6120 6964 3d22 6c30 3038 3337 2220 6e61 a id=\"l00837\" na\n-00024d50: 6d65 3d22 6c30 3038 3337 223e 3c2f 613e me=\"l00837\">\n-00024d60: 3c73 7061 6e20 636c 6173 733d 226c 696e 837
.
838 /**********\n-00024e00: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00024e10: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00024e20: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00024e30: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00024e40: 2a2a 2f3c 2f73 7061 6e3e 3c2f 6469 763e **/
\n-00024e50: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00024e80: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 852 tem\n-00024ec0: 706c 6174 653c 2f73 7061 6e3e 2026 6c74 plate <\n-00024ed0: 3b3c 7370 616e 2063 6c61 7373 3d22 6b65 ;typename<\n-00024ef0: 2f73 7061 6e3e 204c 2c20 3c73 7061 6e20 /span> L, \n-00024f10: 7479 7065 6e61 6d65 3c2f 7370 616e 3e20 typename \n-00024f20: 5926 6774 3b3c 2f64 6976 3e0a 3c64 6976 Y>
..
\n-00025000: 2038 3533 3c2f 613e 3c2f 7370 616e 3e20 853 \n-00025010: 2073 7464 3a3a 7365 7426 6c74 3b4c 2667 std::set<L&g\n-00025020: 743b 203c 6120 636c 6173 733d 2263 6f64 t; DecisionTree\n-00025080: 266c 743b 4c2c 2059 2667 743b 3a3a 6c61 <L, Y>::la\n-00025090: 6265 6c73 3c2f 613e 2829 3c73 7061 6e20 bels()\n-000250b0: 2063 6f6e 7374 203c 2f73 7061 6e3e 7b3c const {<\n-000250c0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00025110: 3835 343c 2f73 7061 6e3e 2020 2020 7374 854 st\n-00025120: 643a 3a73 6574 266c 743b 4c26 6774 3b20 d::set<L> \n-00025130: 756e 6971 7565 3b3c 2f64 6976 3e0a 3c64 unique;
.\n-00025150: 3c61 2069 643d 226c 3030 3835 3522 206e 855 auto\n-000251b0: 3c2f 7370 616e 3e20 6620 3d20 5b26 616d f = [&am\n-000251c0: 703b 5d28 3c73 7061 6e20 636c 6173 733d p;](const<\n-000251e0: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> Assignment<\n-00025220: 3b4c 2667 743b 3c2f 613e 2661 6d70 3b20 ;L>& \n-00025230: 6173 7369 676e 6d65 6e74 2c20 3c73 7061 assignment, const Y\n-00025260: 2661 6d70 3b29 207b 3c2f 6469 763e 0a3c &) {
.<\n-00025270: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00025280: 3e3c 6120 6964 3d22 6c30 3038 3536 2220 > 856 for (<\n-000252f0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00025300: 6f72 6422 3e61 7574 6f3c 2f73 7061 6e3e ord\">auto\n-00025310: 2661 6d70 3b26 616d 703b 206b 7620 3a20 && kv : \n-00025320: 6173 7369 676e 6d65 6e74 2920 7b3c 2f64 assignment) {.
85\n-00025380: 373c 2f73 7061 6e3e 2020 2020 2020 2020 7 \n-00025390: 756e 6971 7565 2e69 6e73 6572 7428 6b76 unique.insert(kv\n-000253a0: 2e66 6972 7374 293b 3c2f 6469 763e 0a3c .first);
.<\n-000253b0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-000253c0: 3e3c 6120 6964 3d22 6c30 3038 3538 2220 > 858 }
\n-00025410: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00025440: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 859 };.
860<\n-000254c0: 2f73 7061 6e3e 2020 2020 7669 7369 7457 /span> visitW\n-000254d0: 6974 6828 6629 3b3c 2f64 6976 3e0a 3c64 ith(f);
.\n-000254f0: 3c61 2069 643d 226c 3030 3836 3122 206e 861 \n-00025550: 7265 7475 726e 3c2f 7370 616e 3e20 756e return un\n-00025560: 6971 7565 3b3c 2f64 6976 3e0a 3c64 6976 ique;
.<\n-000255a0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000255b0: 6e6f 223e 2020 3836 323c 2f73 7061 6e3e no\"> 862\n-000255c0: 2020 7d3c 2f64 6976 3e0a 3c2f 6469 763e }
.
\n-000255d0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00025640: 6120 6964 3d22 6c30 3038 3634 2220 6e61 a id=\"l00864\" na\n-00025650: 6d65 3d22 6c30 3038 3634 223e 3c2f 613e me=\"l00864\">\n-00025660: 3c73 7061 6e20 636c 6173 733d 226c 696e 864/********\n-000256a0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000256b0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000256c0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000256d0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000256e0: 2a2a 2a2a 2f3c 2f73 7061 6e3e 3c2f 6469 ****/.
865\n-00025740: 3c2f 7370 616e 3e20 203c 7370 616e 2063 t\n-00025760: 656d 706c 6174 653c 2f73 7061 6e3e 2026 emplate &\n-00025770: 6c74 3b3c 7370 616e 2063 6c61 7373 3d22 lt;typenam\n-00025790: 653c 2f73 7061 6e3e 204c 2c20 3c73 7061 e L, typename Y>
.\n-000257e0: 3c61 2069 643d 226c 3030 3836 3622 206e 866 bo\n-00025840: 6f6c 3c2f 7370 616e 3e20 3c61 2063 6c61 ol DecisionTr\n-00025880: 6565 266c 743b 4c2c 2059 2667 743b 3a3a ee<L, Y>::\n-00025890: 6571 7561 6c73 3c2f 613e 283c 7370 616e equals(const
Decisi\n-000258f0: 6f6e 5472 6565 3c2f 613e 2661 6d70 3b20 onTree& \n-00025900: 6f74 6865 722c 3c2f 6469 763e 0a3c 6469 other,
.<\n-00025920: 6120 6964 3d22 6c30 3038 3637 2220 6e61 a id=\"l00867\" na\n-00025930: 6d65 3d22 6c30 3038 3637 223e 3c2f 613e me=\"l00867\">\n-00025940: 3c73 7061 6e20 636c 6173 733d 226c 696e 867 \n-00025970: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00025980: 2020 203c 7370 616e 2063 6c61 7373 3d22 const CompareFun\n-000259b0: 6326 616d 703b 2063 6f6d 7061 7265 293c c& compare)<\n-000259c0: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-000259d0: 6f72 6422 3e20 636f 6e73 7420 3c2f 7370 ord\"> const {
.
868 \n-00025a40: 2020 203c 7370 616e 2063 6c61 7373 3d22 ret\n-00025a60: 7572 6e3c 2f73 7061 6e3e 2072 6f6f 745f urn root_\n-00025a70: 2d26 6774 3b65 7175 616c 7328 2a6f 7468 ->equals(*oth\n-00025a80: 6572 2e3c 6120 636c 6173 733d 2263 6f64 er.root_, c\n-00025ae0: 6f6d 7061 7265 293b 3c2f 6469 763e 0a3c ompare);
.<\n-00025af0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00025b00: 3e3c 6120 6964 3d22 6c30 3038 3639 2220 > 869 }
.<\n-00025b60: 6120 6964 3d22 6c30 3038 3730 2220 6e61 a id=\"l00870\" na\n-00025b70: 6d65 3d22 6c30 3038 3730 223e 3c2f 613e me=\"l00870\">\n-00025b80: 3c73 7061 6e20 636c 6173 733d 226c 696e 870
.
871 <\n-00025c00: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00025c10: 6f72 6422 3e74 656d 706c 6174 653c 2f73 ord\">template <t\n-00025c40: 7970 656e 616d 653c 2f73 7061 6e3e 204c ypename L\n-00025c50: 2c20 3c73 7061 6e20 636c 6173 733d 226b , typename\n-00025c70: 3c2f 7370 616e 3e20 5926 6774 3b3c 2f64 Y>.
.
872\n-00025d60: 3c2f 7370 616e 3e20 203c 7370 616e 2063 void <\n-00025d90: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-00025da0: 5f66 756e 6374 696f 6e22 2068 7265 663d _function\" href=\n-00025db0: 2261 3032 3739 362e 6874 6d6c 2361 3930 \"a02796.html#a90\n-00025dc0: 3835 3439 3336 3135 3938 6562 6364 3661 8549361598ebcd6a\n-00025dd0: 6434 3061 3565 3565 6562 6337 3363 223e d40a5e5eebc73c\">\n-00025de0: 4465 6369 7369 6f6e 5472 6565 266c 743b DecisionTree<\n-00025df0: 4c2c 2059 2667 743b 3a3a 7072 696e 743c L, Y>::print<\n-00025e00: 2f61 3e28 3c73 7061 6e20 636c 6173 733d /a>(const<\n-00025e20: 2f73 7061 6e3e 2073 7464 3a3a 7374 7269 /span> std::stri\n-00025e30: 6e67 2661 6d70 3b20 732c 3c2f 6469 763e ng& s,
\n-00025e40: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-00025e70: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 873 \n-00025ea0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00025eb0: 2020 2020 2020 3c73 7061 6e20 636c 6173 cons\n-00025ed0: 743c 2f73 7061 6e3e 204c 6162 656c 466f t LabelFo\n-00025ee0: 726d 6174 7465 7226 616d 703b 206c 6162 rmatter& lab\n-00025ef0: 656c 466f 726d 6174 7465 722c 3c2f 6469 elFormatter,.
874\n-00025f50: 3c2f 7370 616e 3e20 2020 2020 2020 2020 \n-00025f60: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00025f70: 2020 2020 2020 2020 3c73 7061 6e20 636c co\n-00025f90: 6e73 743c 2f73 7061 6e3e 2056 616c 7565 nst Value\n-00025fa0: 466f 726d 6174 7465 7226 616d 703b 2076 Formatter& v\n-00025fb0: 616c 7565 466f 726d 6174 7465 7229 3c73 alueFormatter) const {
.
875 \n-00026040: 2020 726f 6f74 5f2d 2667 743b 7072 696e root_->prin\n-00026050: 7428 732c 206c 6162 656c 466f 726d 6174 t(s, labelFormat\n-00026060: 7465 722c 2076 616c 7565 466f 726d 6174 ter, valueFormat\n-00026070: 7465 7229 3b3c 2f64 6976 3e0a 3c64 6976 ter);
.<\n-000260b0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000260c0: 6e6f 223e 2020 3837 363c 2f73 7061 6e3e no\"> 876
\n-000260d0: 2020 7d3c 2f64 6976 3e0a 3c2f 6469 763e }
.
\n-000260e0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00026150: 6120 6964 3d22 6c30 3038 3738 2220 6e61 a id=\"l00878\" na\n-00026160: 6d65 3d22 6c30 3038 3738 223e 3c2f 613e me=\"l00878\">\n-00026170: 3c73 7061 6e20 636c 6173 733d 226c 696e 878 templat\n-000261b0: 653c 2f73 7061 6e3e 266c 743b 3c73 7061 e<typename L, typen\n-00026200: 616d 653c 2f73 7061 6e3e 2059 2667 743b ame Y>\n-00026210: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
.<\n-00026270: 6120 6964 3d22 6c30 3038 3739 2220 6e61 a id=\"l00879\" na\n-00026280: 6d65 3d22 6c30 3038 3739 223e 3c2f 613e me=\"l00879\">\n-00026290: 3c73 7061 6e20 636c 6173 733d 226c 696e 879<\n-000262f0: 2f61 3e3c 2f73 7061 6e3e 2020 3c73 7061 /a> bool DecisionTree&\n-00026380: 6c74 3b4c 2c20 5926 6774 3b3a 3a6f 7065 lt;L, Y>::ope\n-00026390: 7261 746f 723d 3d3c 2f61 3e28 3c73 7061 rator==(const <\n-000263c0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-000263d0: 5f63 6c61 7373 2220 6872 6566 3d22 6130 _class\" href=\"a0\n-000263e0: 3237 3936 2e68 746d 6c22 3e44 6563 6973 2796.html\">Decis\n-000263f0: 696f 6e54 7265 653c 2f61 3e26 616d 703b ionTree&\n-00026400: 206f 7468 6572 293c 7370 616e 2063 6c61 other) co\n-00026420: 6e73 7420 3c2f 7370 616e 3e7b 3c2f 6469 nst {.
880\n-00026480: 3c2f 7370 616e 3e20 2020 203c 7370 616e return root_->equ\n-000264c0: 616c 7328 2a6f 7468 6572 2e3c 6120 636c als(*other.root\n-00026520: 5f3c 2f61 3e29 3b3c 2f64 6976 3e0a 3c64 _);
.\n-00026540: 3c61 2069 643d 226c 3030 3838 3122 206e 881 }
..
882\n-000265e0: 3c2f 7370 616e 3e20 3c2f 6469 763e 0a3c
.<\n-000265f0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-00026600: 3e3c 6120 6964 3d22 6c30 3038 3833 2220 > 883 templ\n-00026660: 6174 653c 2f73 7061 6e3e 266c 743b 3c73 ate<typename L, typ\n-000266b0: 656e 616d 653c 2f73 7061 6e3e 2059 2667 ename Y&g\n-000266c0: 743b 3c2f 6469 763e 0a3c 6469 7620 636c t;
..<\n-00026920: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00026930: 6e6f 223e 2020 3838 353c 2f73 7061 6e3e no\"> 885\n-00026940: 2020 2020 3c73 7061 6e20 636c 6173 733d re\n-00026960: 7475 726e 3c2f 7370 616e 3e20 726f 6f74 turn root\n-00026970: 5f2d 2667 743b 6f70 6572 6174 6f72 2028 _->operator (\n-00026980: 2928 7829 3b3c 2f64 6976 3e0a 3c64 6976 )(x);
.<\n-000269c0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000269d0: 6e6f 223e 2020 3838 363c 2f73 7061 6e3e no\"> 886\n-000269e0: 2020 7d3c 2f64 6976 3e0a 3c2f 6469 763e }
.
\n-000269f0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00026a60: 6120 6964 3d22 6c30 3038 3838 2220 6e61 a id=\"l00888\" na\n-00026a70: 6d65 3d22 6c30 3038 3838 223e 3c2f 613e me=\"l00888\">\n-00026a80: 3c73 7061 6e20 636c 6173 733d 226c 696e 888 templat\n-00026ac0: 653c 2f73 7061 6e3e 266c 743b 3c73 7061 e<typename L, typen\n-00026b10: 616d 653c 2f73 7061 6e3e 2059 2667 743b ame Y>\n-00026b20: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
.<\n-00026b80: 6120 6964 3d22 6c30 3038 3839 2220 6e61 a id=\"l00889\" na\n-00026b90: 6d65 3d22 6c30 3038 3839 223e 3c2f 613e me=\"l00889\">\n-00026ba0: 3c73 7061 6e20 636c 6173 733d 226c 696e 889<\n-00026c00: 2f61 3e3c 2f73 7061 6e3e 2020 3c61 2063 /a> Decision\n-00026c40: 5472 6565 266c 743b 4c2c 2059 2667 743b Tree<L, Y>\n-00026c50: 3c2f 613e 203c 6120 636c 6173 733d 2263 DecisionTr\n-00026cb0: 6565 266c 743b 4c2c 2059 2667 743b 3a3a ee<L, Y>::\n-00026cc0: 6170 706c 793c 2f61 3e28 3c73 7061 6e20 apply(\n-00026ce0: 636f 6e73 743c 2f73 7061 6e3e 203c 6120 const Una\n-00026d40: 7279 3c2f 613e 2661 6d70 3b20 6f70 293c ry& op)<\n-00026d50: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00026d60: 6f72 6422 3e20 636f 6e73 7420 3c2f 7370 ord\"> const {
.
890 \n-00026dd0: 2020 203c 7370 616e 2063 6c61 7373 3d22 // It i\n-00026df0: 7320 756e 636c 6561 7220 7768 6174 2073 s unclear what s\n-00026e00: 686f 756c 6420 6861 7070 656e 2069 6620 hould happen if \n-00026e10: 7472 6565 2069 7320 656d 7074 793a 3c2f tree is empty:
.<\n-00026e60: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00026e70: 6e6f 223e 2020 3839 313c 2f73 7061 6e3e no\"> 891\n-00026e80: 2020 2020 3c73 7061 6e20 636c 6173 733d if\n-00026ea0: 3c2f 7370 616e 3e20 2865 6d70 7479 2829 (empty()\n-00026eb0: 2920 7b3c 2f64 6976 3e0a 3c64 6976 2063 ) {
.
892 \n-00026f10: 2020 2020 3c73 7061 6e20 636c 6173 733d th\n-00026f30: 726f 773c 2f73 7061 6e3e 2073 7464 3a3a row std::\n-00026f40: 7275 6e74 696d 655f 6572 726f 7228 3c2f runtime_error(.
8\n-00026fa0: 3933 3c2f 7370 616e 3e20 2020 2020 2020 93 \n-00026fb0: 2020 203c 7370 616e 2063 6c61 7373 3d22 &\n-00026fd0: 7175 6f74 3b44 6563 6973 696f 6e54 7265 quot;DecisionTre\n-00026fe0: 653a 3a61 7070 6c79 2875 6e61 7279 206f e::apply(unary o\n-00026ff0: 7029 2075 6e64 6566 696e 6564 2066 6f72 p) undefined for\n-00027000: 2065 6d70 7479 2074 7265 652e 2671 756f empty tree.&quo\n-00027010: 743b 3c2f 7370 616e 3e29 3b3c 2f64 6976 t;);.
894<\n-00027070: 2f73 7061 6e3e 2020 2020 7d3c 2f64 6976 /span> }.
895<\n-000270d0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> return De\n-00027130: 6369 7369 6f6e 5472 6565 3c2f 613e 2872 cisionTree(r\n-00027140: 6f6f 745f 2d26 6774 3b61 7070 6c79 286f oot_->apply(o\n-00027150: 7029 293b 3c2f 6469 763e 0a3c 6469 7620 p));
.
896 \n-000271b0: 207d 3c2f 6469 763e 0a3c 2f64 6976 3e0a }
.
.\n-000271c0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .<\n-00027250: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00027260: 6e6f 223e 2020 3839 393c 2f73 7061 6e3e no\"> 899\n-00027270: 2020 3c73 7061 6e20 636c 6173 733d 226b template\n-00027290: 3c2f 7370 616e 3e20 266c 743b 3c73 7061 <typename L, typen\n-000272e0: 616d 653c 2f73 7061 6e3e 2059 2667 743b ame Y>\n-000272f0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.\n-000274a0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-000274d0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 901 const Un\n-00027520: 6172 7941 7373 6967 6e6d 656e 7426 616d aryAssignment&am\n-00027530: 703b 206f 7029 3c73 7061 6e20 636c 6173 p; op) con\n-00027550: 7374 203c 2f73 7061 6e3e 7b3c 2f64 6976 st {.
902<\n-000275b0: 2f73 7061 6e3e 2020 2020 3c73 7061 6e20 /span> \n-000275d0: 2f2f 2049 7420 6973 2075 6e63 6c65 6172 // It is unclear\n-000275e0: 2077 6861 7420 7368 6f75 6c64 2068 6170 what should hap\n-000275f0: 7065 6e20 6966 2074 7265 6520 6973 2065 pen if tree is e\n-00027600: 6d70 7479 3a3c 2f73 7061 6e3e 3c2f 6469 mpty:.
903\n-00027660: 3c2f 7370 616e 3e20 2020 203c 7370 616e if (\n-00027690: 656d 7074 7928 2929 207b 3c2f 6469 763e empty()) {
\n-000276a0: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-000276d0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 904 throw std::runtime_e\n-00027730: 7272 6f72 283c 2f64 6976 3e0a 3c64 6976 rror(
.<\n-00027770: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00027780: 6e6f 223e 2020 3930 353c 2f73 7061 6e3e no\"> 905
\n-00027790: 2020 2020 2020 2020 2020 3c73 7061 6e20 "Deci\n-000277c0: 7369 6f6e 5472 6565 3a3a 6170 706c 7928 sionTree::apply(\n-000277d0: 756e 6172 7920 6f70 2920 756e 6465 6669 unary op) undefi\n-000277e0: 6e65 6420 666f 7220 656d 7074 7920 7472 ned for empty tr\n-000277f0: 6565 2e26 7175 6f74 3b3c 2f73 7061 6e3e ee."\n-00027800: 293b 3c2f 6469 763e 0a3c 6469 7620 636c );
.
906 \n-00027860: 207d 3c2f 6469 763e 0a3c 6469 7620 636c }
.
907 \n-000278c0: 203c 6120 636c 6173 733d 2263 6f64 6520 Ass\n-000278f0: 6967 6e6d 656e 7426 6c74 3b4c 2667 743b ignment<L>\n-00027900: 3c2f 613e 2061 7373 6967 6e6d 656e 743b assignment;\n-00027910: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00027960: 2039 3038 3c2f 7370 616e 3e20 2020 203c 908 <\n-00027970: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-00027980: 6f72 6466 6c6f 7722 3e72 6574 7572 6e3c ordflow\">return<\n-00027990: 2f73 7061 6e3e 203c 6120 636c 6173 733d /span> DecisionTree<\n-000279d0: 2f61 3e28 726f 6f74 5f2d 2667 743b 6170 /a>(root_->ap\n-000279e0: 706c 7928 6f70 2c20 6173 7369 676e 6d65 ply(op, assignme\n-000279f0: 6e74 2929 3b3c 2f64 6976 3e0a 3c64 6976 nt));
.<\n-00027a30: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-00027a40: 6e6f 223e 2020 3930 393c 2f73 7061 6e3e no\"> 909\n-00027a50: 2020 7d3c 2f64 6976 3e0a 3c2f 6469 763e }
.
\n-00027a60: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00027ad0: 6120 6964 3d22 6c30 3039 3131 2220 6e61 a id=\"l00911\" na\n-00027ae0: 6d65 3d22 6c30 3039 3131 223e 3c2f 613e me=\"l00911\">\n-00027af0: 3c73 7061 6e20 636c 6173 733d 226c 696e 911 /******\n-00027b30: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00027b40: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00027b50: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00027b60: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00027b70: 2a2a 2a2a 2a2a 2f3c 2f73 7061 6e3e 3c2f ******/.
9\n-00027bd0: 3132 3c2f 7370 616e 3e20 203c 7370 616e 12 template\n-00027c00: 266c 743b 3c73 7061 6e20 636c 6173 733d <typena\n-00027c20: 6d65 3c2f 7370 616e 3e20 4c2c 203c 7370 me L, typename Y>
.<\n-00027c60: 6469 7620 636c 6173 733d 2266 6f6c 646f div class=\"foldo\n-00027c70: 7065 6e22 2069 643d 2266 6f6c 646f 7065 pen\" id=\"foldope\n-00027c80: 6e30 3039 3133 2220 6461 7461 2d73 7461 n00913\" data-sta\n-00027c90: 7274 3d22 7b22 2064 6174 612d 656e 643d rt=\"{\" data-end=\n-00027ca0: 227d 223e 0a3c 6469 7620 636c 6173 733d \"}\">..\n-00027e70: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00027f70: 2020 3931 353c 2f73 7061 6e3e 2020 2020 915 \n-00027f80: 3c73 7061 6e20 636c 6173 733d 2263 6f6d // It is u\n-00027fa0: 6e63 6c65 6172 2077 6861 7420 7368 6f75 nclear what shou\n-00027fb0: 6c64 2068 6170 7065 6e20 6966 2065 6974 ld happen if eit\n-00027fc0: 6865 7220 7472 6565 2069 7320 656d 7074 her tree is empt\n-00027fd0: 793a 3c2f 7370 616e 3e3c 2f64 6976 3e0a y:
.\n-00027fe0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-000280d0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
918 \n-000281c0: 2020 2020 2020 2020 203c 7370 616e 2063 "Decis\n-000281f0: 696f 6e54 7265 653a 3a61 7070 6c79 2862 ionTree::apply(b\n-00028200: 696e 6172 7920 6f70 2920 756e 6465 6669 inary op) undefi\n-00028210: 6e65 6420 666f 7220 656d 7074 7920 7472 ned for empty tr\n-00028220: 6565 732e 2671 756f 743b 3c2f 7370 616e ees.");
.
919 \n-00028290: 2020 7d3c 2f64 6976 3e0a 3c64 6976 2063 }
.
920 \n-000282f0: 2020 3c73 7061 6e20 636c 6173 733d 2263 // apply\n-00028310: 2074 6865 206f 7065 7261 746f 6e20 6f6e the operaton on\n-00028320: 2074 6865 2072 6f6f 7420 6f66 2062 6f74 the root of bot\n-00028330: 6820 6469 6167 7261 6d73 3c2f 7370 616e h diagrams
.
\n-00028390: 2020 3932 313c 2f73 7061 6e3e 2020 2020 921 \n-000283a0: 3c61 2063 6c61 7373 3d22 636f 6465 2068 \n-000283f0: 4e6f 6465 5074 723c 2f61 3e20 6820 3d20 NodePtr h = \n-00028400: 726f 6f74 5f2d 2667 743b 6170 706c 795f root_->apply_\n-00028410: 665f 6f70 5f67 282a 672e 3c61 2063 6c61 f_op_g(*g.root_\n-00028470: 3c2f 613e 2c20 6f70 293b 3c2f 6469 763e , op);
\n-00028480: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-000284b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 922 /\n-000284f0: 2f20 6372 6561 7465 2061 206e 6577 2063 / create a new c\n-00028500: 6c61 7373 2077 6974 6820 7468 6520 7265 lass with the re\n-00028510: 7375 6c74 696e 6720 726f 6f74 2026 7175 sulting root &qu\n-00028520: 6f74 3b68 2671 756f 743b 3c2f 7370 616e ot;h"
.
\n-00028580: 2020 3932 333c 2f73 7061 6e3e 2020 2020 923 \n-00028590: 3c61 2063 6c61 7373 3d22 636f 6465 2068 Deci\n-000285c0: 7369 6f6e 5472 6565 3c2f 613e 2072 6573 sionTree res\n-000285d0: 756c 7428 6829 3b3c 2f64 6976 3e0a 3c64 ult(h);
.\n-000285f0: 3c61 2069 643d 226c 3030 3932 3422 206e 924 \n-00028650: 7265 7475 726e 3c2f 7370 616e 3e20 7265 return re\n-00028660: 7375 6c74 3b3c 2f64 6976 3e0a 3c64 6976 sult;
.<\n-000286a0: 7370 616e 2063 6c61 7373 3d22 6c69 6e65 span class=\"line\n-000286b0: 6e6f 223e 2020 3932 353c 2f73 7061 6e3e no\"> 925\n-000286c0: 2020 7d3c 2f64 6976 3e0a 3c2f 6469 763e }
.
\n-000286d0: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00028740: 6120 6964 3d22 6c30 3039 3237 2220 6e61 a id=\"l00927\" na\n-00028750: 6d65 3d22 6c30 3039 3237 223e 3c2f 613e me=\"l00927\">\n-00028760: 3c73 7061 6e20 636c 6173 733d 226c 696e 927 /******\n-000287a0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000287b0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000287c0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000287d0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-000287e0: 2a2a 2a2a 2a2a 2f3c 2f73 7061 6e3e 3c2f ******/.
9\n-00028840: 3238 3c2f 7370 616e 3e20 203c 7370 616e 28 // The way this\n-00028870: 2077 6f72 6b73 3a3c 2f73 7061 6e3e 3c2f works:.
9\n-000288d0: 3239 3c2f 7370 616e 3e20 203c 7370 616e 29 // We have an A\n-00028900: 4454 2c20 7069 6374 7572 6520 6974 2061 DT, picture it a\n-00028910: 7320 6120 7472 6565 2e3c 2f73 7061 6e3e s a tree.\n-00028920: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00028970: 2039 3330 3c2f 7370 616e 3e20 203c 7370 930 // At a certa\n-000289a0: 696e 2064 6570 7468 2c20 7765 2068 6176 in depth, we hav\n-000289b0: 6520 6120 6272 616e 6368 206f 6e20 2671 e a branch on &q\n-000289c0: 756f 743b 6c61 6265 6c26 7175 6f74 3b2e uot;label".\n-000289d0: 3c2f 7370 616e 3e3c 2f64 6976 3e0a 3c64
.\n-000289f0: 3c61 2069 643d 226c 3030 3933 3122 206e 931 // The\n-00028a50: 2066 756e 6374 696f 6e20 2671 756f 743b function "\n-00028a60: 6368 6f6f 7365 286c 6162 656c 2c69 6e64 choose(label,ind\n-00028a70: 6578 2926 7175 6f74 3b20 7769 6c6c 2072 ex)" will r\n-00028a80: 6574 7572 6e20 6120 7472 6565 206f 6620 eturn a tree of \n-00028a90: 6f6e 6520 6c65 7373 2064 6570 7468 2c3c one less depth,<\n-00028aa0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-00028ac0: 6120 6964 3d22 6c30 3039 3332 2220 6e61 a id=\"l00932\" na\n-00028ad0: 6d65 3d22 6c30 3039 3332 223e 3c2f 613e me=\"l00932\">\n-00028ae0: 3c73 7061 6e20 636c 6173 733d 226c 696e 932 // wher\n-00028b20: 6520 7468 6572 6520 6973 206e 6f20 6d6f e there is no mo\n-00028b30: 7265 2062 7261 6e63 6820 6f6e 2026 7175 re branch on &qu\n-00028b40: 6f74 3b6c 6162 656c 2671 756f 743b 3a20 ot;label": \n-00028b50: 6f6e 6c79 2074 6865 2073 7562 7472 6565 only the subtree\n-00028b60: 2075 6e64 6572 2074 6861 743c 2f73 7061 under that
.
933 <\n-00028bd0: 7370 616e 2063 6c61 7373 3d22 636f 6d6d span class=\"comm\n-00028be0: 656e 7422 3e2f 2f20 6272 616e 6368 2070 ent\">// branch p\n-00028bf0: 6f69 6e74 2063 6f72 7265 7370 6f6e 6469 oint correspondi\n-00028c00: 6e67 2074 6f20 7468 6520 7661 6c75 6520 ng to the value \n-00028c10: 2671 756f 743b 696e 6465 7826 7175 6f74 "index"\n-00028c20: 3b20 6973 206c 6566 7420 696e 7374 6561 ; is left instea\n-00028c30: 642e 3c2f 7370 616e 3e3c 2f64 6976 3e0a d.
.\n-00028c40: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .\n-00028d20: 3c61 2069 643d 226c 3030 3933 3522 206e 935 // Thi\n-00028d80: 7320 696d 706c 656d 656e 7473 206d 6172 s implements mar\n-00028d90: 6769 6e61 6c69 7a61 7469 6f6e 2069 6e20 ginalization in \n-00028da0: 4461 7277 6963 6865 3039 626f 6f6b 2c20 Darwiche09book, \n-00028db0: 7067 2033 3330 3c2f 7370 616e 3e3c 2f64 pg 330.
93\n-00028e10: 363c 2f73 7061 6e3e 2020 3c73 7061 6e20 6 \n-00028e30: 7465 6d70 6c61 7465 3c2f 7370 616e 3e26 template&\n-00028e40: 6c74 3b3c 7370 616e 2063 6c61 7373 3d22 lt;typenam\n-00028e60: 653c 2f73 7061 6e3e 204c 2c20 3c73 7061 e L, typename Y>
...
938 \n-000290d0: 2020 2020 3c73 7061 6e20 636c 6173 733d si\n-000290f0: 7a65 5f74 3c2f 7370 616e 3e20 6361 7264 ze_t card\n-00029100: 696e 616c 6974 792c 203c 7370 616e 2063 inality, c\n-00029120: 6f6e 7374 3c2f 7370 616e 3e20 4269 6e61 onst Bina\n-00029130: 7279 2661 6d70 3b20 6f70 293c 7370 616e ry& op) const {\n-00029160: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-000291b0: 2039 3339 3c2f 7370 616e 3e20 2020 203c 939 <\n-000291c0: 6120 636c 6173 733d 2263 6f64 6520 686c a class=\"code hl\n-000291d0: 5f63 6c61 7373 2220 6872 6566 3d22 6130 _class\" href=\"a0\n-000291e0: 3237 3936 2e68 746d 6c22 3e44 6563 6973 2796.html\">Decis\n-000291f0: 696f 6e54 7265 653c 2f61 3e20 7265 7375 ionTree resu\n-00029200: 6c74 203d 2063 686f 6f73 6528 6c61 6265 lt = choose(labe\n-00029210: 6c2c 2030 293b 3c2f 6469 763e 0a3c 6469 l, 0);
.<\n-00029230: 6120 6964 3d22 6c30 3039 3430 2220 6e61 a id=\"l00940\" na\n-00029240: 6d65 3d22 6c30 3039 3430 223e 3c2f 613e me=\"l00940\">\n-00029250: 3c73 7061 6e20 636c 6173 733d 226c 696e 940 f\n-00029290: 6f72 3c2f 7370 616e 3e20 283c 7370 616e or (size_t index = 1; in\n-000292d0: 6465 7820 266c 743b 2063 6172 6469 6e61 dex < cardina\n-000292e0: 6c69 7479 3b20 696e 6465 782b 2b29 207b lity; index++) {\n-000292f0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00029340: 2039 3431 3c2f 7370 616e 3e20 2020 2020 941 \n-00029350: 203c 6120 636c 6173 733d 2263 6f64 6520 Dec\n-00029380: 6973 696f 6e54 7265 653c 2f61 3e20 6368 isionTree ch\n-00029390: 6f73 656e 203d 2063 686f 6f73 6528 6c61 osen = choose(la\n-000293a0: 6265 6c2c 2069 6e64 6578 293b 3c2f 6469 bel, index);.
942\n-00029400: 3c2f 7370 616e 3e20 2020 2020 2072 6573 res\n-00029410: 756c 7420 3d20 7265 7375 6c74 2e61 7070 ult = result.app\n-00029420: 6c79 2863 686f 7365 6e2c 206f 7029 3b3c ly(chosen, op);<\n-00029430: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00029480: 3934 333c 2f73 7061 6e3e 2020 2020 7d3c 943 }<\n-00029490: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-000294e0: 3934 343c 2f73 7061 6e3e 2020 2020 3c73 944 return result;.
94\n-00029570: 353c 2f73 7061 6e3e 2020 7d3c 2f64 6976 5 }.
.
946 .
9\n-00029630: 3437 3c2f 7370 616e 3e3c 7370 616e 2063 47 \n-00029650: 202f 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a /**************\n-00029660: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00029670: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00029680: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-00029690: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2f3c **************/<\n-000296a0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-000296c0: 6120 6964 3d22 6c30 3039 3438 2220 6e61 a id=\"l00948\" na\n-000296d0: 6d65 3d22 6c30 3039 3438 223e 3c2f 613e me=\"l00948\">\n-000296e0: 3c73 7061 6e20 636c 6173 733d 226c 696e 948 templat\n-00029720: 653c 2f73 7061 6e3e 2026 6c74 3b3c 7370 e <typename L, type\n-00029770: 6e61 6d65 3c2f 7370 616e 3e20 5926 6774 name Y>\n-00029780: 3b3c 2f64 6976 3e0a 3c64 6976 2063 6c61 ;
.
.\n-000297e0: 3c61 2069 643d 226c 3030 3934 3922 206e 949\n-00029860: 3c2f 613e 3c2f 7370 616e 3e20 203c 7370 void DecisionTree\n-000298f0: 266c 743b 4c2c 2059 2667 743b 3a3a 646f <L, Y>::do\n-00029900: 743c 2f61 3e28 7374 643a 3a6f 7374 7265 t(std::ostre\n-00029910: 616d 2661 6d70 3b20 6f73 2c3c 2f64 6976 am& os,.
950<\n-00029970: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-00029980: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00029990: 2020 2020 203c 7370 616e 2063 6c61 7373 const\n-000299b0: 3c2f 7370 616e 3e20 4c61 6265 6c46 6f72 LabelFor\n-000299c0: 6d61 7474 6572 2661 6d70 3b20 6c61 6265 matter& labe\n-000299d0: 6c46 6f72 6d61 7474 6572 2c3c 2f64 6976 lFormatter,.
951<\n-00029a30: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-00029a40: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00029a50: 2020 2020 203c 7370 616e 2063 6c61 7373 const\n-00029a70: 3c2f 7370 616e 3e20 5661 6c75 6546 6f72 ValueFor\n-00029a80: 6d61 7474 6572 2661 6d70 3b20 7661 6c75 matter& valu\n-00029a90: 6546 6f72 6d61 7474 6572 2c3c 2f64 6976 eFormatter,.
952<\n-00029af0: 2f73 7061 6e3e 2020 2020 2020 2020 2020 /span> \n-00029b00: 2020 2020 2020 2020 2020 2020 2020 2020 \n-00029b10: 2020 2020 203c 7370 616e 2063 6c61 7373 b\n-00029b30: 6f6f 6c3c 2f73 7061 6e3e 2073 686f 775a ool showZ\n-00029b40: 6572 6f29 3c73 7061 6e20 636c 6173 733d ero) const\n-00029b60: 203c 2f73 7061 6e3e 7b3c 2f64 6976 3e0a {
.\n-00029b70: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 .
\n-00029c60: 2020 3935 343c 2f73 7061 6e3e 2020 2020 954 \n-00029c70: 726f 6f74 5f2d 2667 743b 646f 7428 6f73 root_->dot(os\n-00029c80: 2c20 6c61 6265 6c46 6f72 6d61 7474 6572 , labelFormatter\n-00029c90: 2c20 7661 6c75 6546 6f72 6d61 7474 6572 , valueFormatter\n-00029ca0: 2c20 7368 6f77 5a65 726f 293b 3c2f 6469 , showZero);.
955\n-00029d00: 3c2f 7370 616e 3e20 2020 206f 7320 266c os &l\n-00029d10: 743b 266c 743b 203c 7370 616e 2063 6c61 t;< " [order\n-00029d40: 696e 673d 6f75 745d 7d26 7175 6f74 3b3c ing=out]}"<\n-00029d50: 2f73 7061 6e3e 2026 6c74 3b26 6c74 3b20 /span> << \n-00029d60: 7374 643a 3a65 6e64 6c3b 3c2f 6469 763e std::endl;
\n-00029d70: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-00029dd0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-00029e20: 3935 373c 2f73 7061 6e3e 203c 2f64 6976 957 .
958<\n-00029e80: 2f73 7061 6e3e 2020 3c73 7061 6e20 636c /span> te\n-00029ea0: 6d70 6c61 7465 3c2f 7370 616e 3e20 266c mplate &l\n-00029eb0: 743b 3c73 7061 6e20 636c 6173 733d 226b t;typename\n-00029ed0: 3c2f 7370 616e 3e20 4c2c 203c 7370 616e L, typename\n-00029f00: 2059 2667 743b 3c2f 6469 763e 0a3c 6469 Y>
..
\n-00029fe0: 2020 3935 393c 2f61 3e3c 2f73 7061 6e3e 959\n-00029ff0: 2020 3c73 7061 6e20 636c 6173 733d 226b void\n-0002a010: 3c2f 7370 616e 3e20 3c61 2063 6c61 7373 Decisio\n-0002a070: 6e54 7265 6526 6c74 3b4c 2c20 5926 6774 nTree<L, Y>\n-0002a080: 3b3a 3a64 6f74 3c2f 613e 283c 7370 616e ;::dot(const st\n-0002a0b0: 643a 3a73 7472 696e 6726 616d 703b 206e d::string& n\n-0002a0c0: 616d 652c 3c2f 6469 763e 0a3c 6469 7620 ame,
.
960 \n-0002a120: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002a130: 2020 2020 2020 2020 2020 2020 2020 3c73 const\n-0002a160: 204c 6162 656c 466f 726d 6174 7465 7226 LabelFormatter&\n-0002a170: 616d 703b 206c 6162 656c 466f 726d 6174 amp; labelFormat\n-0002a180: 7465 722c 3c2f 6469 763e 0a3c 6469 7620 ter,
.
961 \n-0002a1e0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002a1f0: 2020 2020 2020 2020 2020 2020 2020 3c73 const\n-0002a220: 2056 616c 7565 466f 726d 6174 7465 7226 ValueFormatter&\n-0002a230: 616d 703b 2076 616c 7565 466f 726d 6174 amp; valueFormat\n-0002a240: 7465 722c 3c2f 6469 763e 0a3c 6469 7620 ter,
.
962 \n-0002a2a0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002a2b0: 2020 2020 2020 2020 2020 2020 2020 3c73 bool showZero) const {
.
963 \n-0002a370: 2073 7464 3a3a 6f66 7374 7265 616d 206f std::ofstream o\n-0002a380: 7328 286e 616d 6520 2b20 3c73 7061 6e20 s((name + ".dot\n-0002a3b0: 2671 756f 743b 3c2f 7370 616e 3e29 2e63 ").c\n-0002a3c0: 5f73 7472 2829 293b 3c2f 6469 763e 0a3c _str());
.<\n-0002a3d0: 6469 7620 636c 6173 733d 226c 696e 6522 div class=\"line\"\n-0002a3e0: 3e3c 6120 6964 3d22 6c30 3039 3634 2220 > 964 dot(\n-0002a480: 6f73 2c20 6c61 6265 6c46 6f72 6d61 7474 os, labelFormatt\n-0002a490: 6572 2c20 7661 6c75 6546 6f72 6d61 7474 er, valueFormatt\n-0002a4a0: 6572 2c20 7368 6f77 5a65 726f 293b 3c2f er, showZero);.
9\n-0002a500: 3635 3c2f 7370 616e 3e20 2020 203c 7370 65 int result =
\n-0002a540: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0002a570: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 966 sys\n-0002a5a0: 7465 6d28 283c 7370 616e 2063 6c61 7373 tem(("dot -Tpdf\n-0002a5d0: 2026 7175 6f74 3b3c 2f73 7061 6e3e 202b " +\n-0002a5e0: 206e 616d 6520 2b20 3c73 7061 6e20 636c name + ".dot -\n-0002a610: 6f20 2671 756f 743b 3c2f 7370 616e 3e20 o " \n-0002a620: 2b20 6e61 6d65 202b 203c 7370 616e 2063 + name + ".pdf \n-0002a650: 2667 743b 2661 6d70 3b20 2f64 6576 2f6e >& /dev/n\n-0002a660: 756c 6c26 7175 6f74 3b3c 2f73 7061 6e3e ull"\n-0002a670: 293c 2f64 6976 3e0a 3c64 6976 2063 6c61 )
.
\n-0002a6c0: 2020 3936 373c 2f73 7061 6e3e 2020 2020 967 \n-0002a6d0: 2020 2020 2020 2020 2020 2020 2020 202e .\n-0002a6e0: 635f 7374 7228 2929 3b3c 2f64 6976 3e0a c_str());
.\n-0002a6f0: 3c64 6976 2063 6c61 7373 3d22 6c69 6e65 \n-0002a780: 0a3c 6469 7620 636c 6173 733d 226c 696e .
\n-0002a7b0: 3c2f 613e 3c73 7061 6e20 636c 6173 733d 969 throw std::runtime_e\n-0002a810: 7272 6f72 283c 7370 616e 2063 6c61 7373 rror("DecisionT\n-0002a840: 7265 653a 3a64 6f74 2073 7973 7465 6d20 ree::dot system \n-0002a850: 6361 6c6c 2066 6169 6c65 6426 7175 6f74 call failed"\n-0002a860: 3b3c 2f73 7061 6e3e 293b 3c2f 6469 763e ;);
\n-0002a870: 0a3c 6469 7620 636c 6173 733d 226c 696e ..<\n-0002a8d0: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
\n-0002a920: 3937 313c 2f73 7061 6e3e 203c 2f64 6976 971 .
972<\n-0002a980: 2f73 7061 6e3e 2020 3c73 7061 6e20 636c /span> te\n-0002a9a0: 6d70 6c61 7465 3c2f 7370 616e 3e20 266c mplate &l\n-0002a9b0: 743b 3c73 7061 6e20 636c 6173 733d 226b t;typename\n-0002a9d0: 3c2f 7370 616e 3e20 4c2c 203c 7370 616e L, typename\n-0002aa00: 2059 2667 743b 3c2f 6469 763e 0a3c 6469 Y>
..
\n-0002aae0: 2020 3937 333c 2f61 3e3c 2f73 7061 6e3e 973\n-0002aaf0: 2020 7374 643a 3a73 7472 696e 6720 3c61 std::string D\n-0002ab50: 6563 6973 696f 6e54 7265 6526 6c74 3b4c ecisionTree<L\n-0002ab60: 2c20 5926 6774 3b3a 3a64 6f74 3c2f 613e , Y>::dot\n-0002ab70: 283c 7370 616e 2063 6c61 7373 3d22 6b65 (const LabelFormatt\n-0002aba0: 6572 2661 6d70 3b20 6c61 6265 6c46 6f72 er& labelFor\n-0002abb0: 6d61 7474 6572 2c3c 2f64 6976 3e0a 3c64 matter,
.\n-0002abd0: 3c61 2069 643d 226c 3030 3937 3422 206e 974 \n-0002ac20: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002ac30: 2020 2020 2020 2020 3c73 7061 6e20 636c co\n-0002ac50: 6e73 743c 2f73 7061 6e3e 2056 616c 7565 nst Value\n-0002ac60: 466f 726d 6174 7465 7226 616d 703b 2076 Formatter& v\n-0002ac70: 616c 7565 466f 726d 6174 7465 722c 3c2f alueFormatter,.
9\n-0002acd0: 3735 3c2f 7370 616e 3e20 2020 2020 2020 75 \n-0002ace0: 2020 2020 2020 2020 2020 2020 2020 2020 \n-0002acf0: 2020 2020 2020 2020 2020 2020 2020 203c <\n-0002ad00: 7370 616e 2063 6c61 7373 3d22 6b65 7977 span class=\"keyw\n-0002ad10: 6f72 6474 7970 6522 3e62 6f6f 6c3c 2f73 ordtype\">bool showZero) const {
.
976 \n-0002adb0: 2020 7374 643a 3a73 7472 696e 6773 7472 std::stringstr\n-0002adc0: 6561 6d20 7373 3b3c 2f64 6976 3e0a 3c64 eam ss;
.\n-0002ade0: 3c61 2069 643d 226c 3030 3937 3722 206e 977 dot(s\n-0002ae80: 732c 206c 6162 656c 466f 726d 6174 7465 s, labelFormatte\n-0002ae90: 722c 2076 616c 7565 466f 726d 6174 7465 r, valueFormatte\n-0002aea0: 722c 2073 686f 775a 6572 6f29 3b3c 2f64 r, showZero);.
97\n-0002af00: 383c 2f73 7061 6e3e 2020 2020 3c73 7061 8 return ss.str();.
97\n-0002af90: 393c 2f73 7061 6e3e 2020 7d3c 2f64 6976 9 }.
.
980 .
9\n-0002b050: 3831 3c2f 7370 616e 3e3c 7370 616e 2063 81/\n-0002b070: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0002b080: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0002b090: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0002b0a0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a ****************\n-0002b0b0: 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2a2a 2f3c **************/<\n-0002b0c0: 2f73 7061 6e3e 3c2f 6469 763e 0a3c 6469 /span>
.<\n-0002b0e0: 6120 6964 3d22 6c30 3039 3832 2220 6e61 a id=\"l00982\" na\n-0002b0f0: 6d65 3d22 6c30 3039 3832 223e 3c2f 613e me=\"l00982\">\n-0002b100: 3c73 7061 6e20 636c 6173 733d 226c 696e 982
.
983 }\n-0002b180: 2020 3c73 7061 6e20 636c 6173 733d 2263 // names\n-0002b1a0: 7061 6365 2067 7473 616d 3c2f 7370 616e pace gtsam
.
.<\n-0002b1c0: 2f64 6976 3e0a 3c2f 6469 763e 0a3c 2f64 /div>.
..
..
.
.\n-0002b1f0: 3c2f 6469 763e 0a3c 2f64 6976 3e0a 3c2f
.
..
..
.
\n-0002b220: 0a3c 2f64 6976 3e0a 3c2f 6469 763e 0a3c .
.
.<\n-0002b230: 2f64 6976 3e0a 3c2f 6469 763e 0a3c 2f64 /div>.
..
..
.
.\n-0002b260: 3c2f 6469 763e 0a3c 2f64 6976 3e0a 3c2f
.
..
..
.
\n-0002b290: 0a3c 2f64 6976 3e0a 3c2f 6469 763e 0a3c .
.
.<\n-0002b2a0: 2f64 6976 3e0a 3c2f 6469 763e 0a3c 2f64 /div>.
..
.
Global function\n-0002b3e0: 7320 696e 2061 2073 6570 6172 6174 6520 s in a separate \n-0002b3f0: 7465 7374 696e 6720 6e61 6d65 7370 6163 testing namespac\n-0002b400: 652e 3c2f 6469 763e 3c64 6976 2063 6c61 e.
De\n-0002b420: 6669 6e69 7469 6f6e 3c2f 623e 2063 6861 finition cha\n-0002b430: 7274 5465 7374 696e 672e 683a 3238 3c2f rtTesting.h:28
.
\n-0002b490: 3c64 6976 2063 6c61 7373 3d22 7474 6e61
gtsa\n-0002b4e0: 6d3a 3a73 706c 6974 3c2f 613e 3c2f 6469 m::split
void split\n-0002b510: 2863 6f6e 7374 2047 2026 616d 703b 672c (const G &g,\n-0002b520: 2063 6f6e 7374 2050 7265 6465 6365 7373 const Predecess\n-0002b530: 6f72 4d61 7026 6c74 3b20 4b45 5920 2667 orMap< KEY &g\n-0002b540: 743b 2026 616d 703b 7472 6565 2c20 4720 t; &tree, G \n-0002b550: 2661 6d70 3b41 6231 2c20 4720 2661 6d70 &Ab1, G &\n-0002b560: 3b41 6232 293c 2f64 6976 3e3c 6469 7620 ;Ab2)
Sp\n-0002b580: 6c69 7420 7468 6520 6772 6170 6820 696e lit the graph in\n-0002b590: 746f 2074 776f 2070 6172 7473 3a20 6f6e to two parts: on\n-0002b5a0: 6520 636f 7272 6573 706f 6e64 7320 746f e corresponds to\n-0002b5b0: 2074 6865 2067 6976 656e 2073 7061 6e6e the given spann\n-0002b5c0: 696e 6720 7472 6565 2c20 616e 6420 7468 ing tree, and th\n-0002b5d0: 6520 6f74 6865 7220 636f 7272 6573 706f e other correspo\n-0002b5e0: 6e64 732e 2e2e 3c2f 6469 763e 3c64 6976 nds...
<\n-0002b600: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition\n-0002b610: 2067 7261 7068 2d69 6e6c 2e68 3a32 3535 graph-inl.h:255\n-0002b620: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.
gt\n-0002b6c0: 7361 6d3a 3a64 6f74 3c2f 613e 3c2f 6469 sam::dot
double dot\n-0002b6f0: 2863 6f6e 7374 2056 3120 2661 6d70 3b61 (const V1 &a\n-0002b700: 2c20 636f 6e73 7420 5632 2026 616d 703b , const V2 &\n-0002b710: 6229 3c2f 6469 763e 3c64 6976 2063 6c61 b)
Dot p\n-0002b730: 726f 6475 6374 2e3c 2f64 6976 3e3c 6469 roduct.
\n-0002b750: 3c62 3e44 6566 696e 6974 696f 6e3c 2f62 Definition Vector.h:195
.<\n-0002b7e0: 6469 7620 636c 6173 733d 2274 7464 6f63 div class=\"ttdoc\n-0002b7f0: 223e 5465 6d70 6c61 7465 2074 6f20 6372 \">Template to cr\n-0002b800: 6561 7465 2061 2062 696e 6172 7920 7072 eate a binary pr\n-0002b810: 6564 6963 6174 652e 3c2f 6469 763e 3c64 edicate.
Definition Testable.h:11\n-0002b850: 313c 2f64 6976 3e3c 2f64 6976 3e0a 3c64 1
.
gtsam\n-0002b8b0: 3a3a 4173 7369 676e 6d65 6e74 3c2f 613e ::Assignment\n-0002b8c0: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
An assi\n-0002b8e0: 676e 6d65 6e74 2066 726f 6d20 6c61 6265 gnment from labe\n-0002b8f0: 6c73 2074 6f20 7661 6c75 6520 696e 6465 ls to value inde\n-0002b900: 7820 2873 697a 655f 7429 2e3c 2f64 6976 x (size_t).
Definitio\n-0002b930: 6e3c 2f62 3e20 4173 7369 676e 6d65 6e74 n Assignment\n-0002b940: 2e68 3a33 373c 2f64 6976 3e3c 2f64 6976 .h:37
.
g\n-0002b9a0: 7473 616d 3a3a 4465 6369 7369 6f6e 5472 tsam::DecisionTr\n-0002b9b0: 6565 3a3a 4c65 6166 3c2f 613e 3c2f 6469 ee::Leaf
Definiti\n-0002b9e0: 6f6e 3c2f 623e 2044 6563 6973 696f 6e54 on DecisionT\n-0002b9f0: 7265 652d 696e 6c2e 683a 3532 3c2f 6469 ree-inl.h:52
.
gtsam:\n-0002baa0: 3a44 6563 6973 696f 6e54 7265 653a 3a4c :DecisionTree::L\n-0002bab0: 6561 663a 3a63 686f 6f73 653c 2f61 3e3c eaf::choose<\n-0002bac0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
NodePtr\n-0002bae0: 2063 686f 6f73 6528 636f 6e73 7420 4c20 choose(const L \n-0002baf0: 2661 6d70 3b6c 6162 656c 2c20 7369 7a65 &label, size\n-0002bb00: 5f74 2069 6e64 6578 2920 636f 6e73 7420 _t index) const \n-0002bb10: 6f76 6572 7269 6465 3c2f 6469 763e 3c64 override
choose a branch\n-0002bb40: 2c20 6372 6561 7465 206e 6577 206d 656d , create new mem\n-0002bb50: 6f72 7920 213c 2f64 6976 3e3c 6469 7620 ory !
Definition \n-0002bb80: 4465 6369 7369 6f6e 5472 6565 2d69 6e6c DecisionTree-inl\n-0002bb90: 2e68 3a31 3439 3c2f 6469 763e 3c2f 6469 .h:149
.
gtsam::Decis\n-0002bc40: 696f 6e54 7265 653a 3a4c 6561 663a 3a6f ionTree::Leaf::o\n-0002bc50: 7065 7261 746f 7228 293c 2f61 3e3c 2f64 perator()
const Y &\n-0002bc80: 616d 703b 206f 7065 7261 746f 7228 2928 amp; operator()(\n-0002bc90: 636f 6e73 7420 4173 7369 676e 6d65 6e74 const Assignment\n-0002bca0: 266c 743b 204c 2026 6774 3b20 2661 6d70 < L > &\n-0002bcb0: 3b78 2920 636f 6e73 7420 6f76 6572 7269 ;x) const overri\n-0002bcc0: 6465 3c2f 6469 763e 3c64 6976 2063 6c61 de
evalu\n-0002bce0: 6174 653c 2f64 6976 3e3c 6469 7620 636c ate
D\n-0002bd00: 6566 696e 6974 696f 6e3c 2f62 3e20 4465 efinition De\n-0002bd10: 6369 7369 6f6e 5472 6565 2d69 6e6c 2e68 cisionTree-inl.h\n-0002bd20: 3a31 3130 3c2f 6469 763e 3c2f 6469 763e :110
\n-0002bd30: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
\n-0002be00: 4e6f 6465 5074 7220 6170 706c 7928 636f NodePtr apply(co\n-0002be10: 6e73 7420 556e 6172 7941 7373 6967 6e6d nst UnaryAssignm\n-0002be20: 656e 7420 2661 6d70 3b6f 702c 2063 6f6e ent &op, con\n-0002be30: 7374 2041 7373 6967 6e6d 656e 7426 6c74 st Assignment<\n-0002be40: 3b20 4c20 2667 743b 2026 616d 703b 6173 ; L > &as\n-0002be50: 7369 676e 6d65 6e74 2920 636f 6e73 7420 signment) const \n-0002be60: 6f76 6572 7269 6465 3c2f 6469 763e 3c64 override
Apply unary ope\n-0002be90: 7261 746f 7220 7769 7468 2061 7373 6967 rator with assig\n-0002bea0: 6e6d 656e 742e 3c2f 6469 763e 3c64 6976 nment.
<\n-0002bec0: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition
\n-0002bed0: 2044 6563 6973 696f 6e54 7265 652d 696e DecisionTree-in\n-0002bee0: 6c2e 683a 3132 313c 2f64 6976 3e3c 2f64 l.h:121
.
\n-0002bfb0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
bool equals(\n-0002bfd0: 636f 6e73 7420 4e6f 6465 2026 616d 703b const Node &\n-0002bfe0: 712c 2063 6f6e 7374 2043 6f6d 7061 7265 q, const Compare\n-0002bff0: 4675 6e63 2026 616d 703b 636f 6d70 6172 Func &compar\n-0002c000: 6529 2063 6f6e 7374 206f 7665 7272 6964 e) const overrid\n-0002c010: 653c 2f64 6976 3e3c 6469 7620 636c 6173 e
equali\n-0002c030: 7479 2075 7020 746f 2074 6f6c 6572 616e ty up to toleran\n-0002c040: 6365 3c2f 6469 763e 3c64 6976 2063 6c61 ce
De\n-0002c060: 6669 6e69 7469 6f6e 3c2f 623e 2044 6563 finition Dec\n-0002c070: 6973 696f 6e54 7265 652d 696e 6c2e 683a isionTree-inl.h:\n-0002c080: 3837 3c2f 6469 763e 3c2f 6469 763e 0a3c 87
.<\n-0002c090: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-0002c0a0: 6964 3d22 6161 3032 3737 365f 6874 6d6c id=\"aa02776_html\n-0002c0b0: 5f61 3763 3231 6461 6661 6262 3566 6261 _a7c21dafabb5fba\n-0002c0c0: 3661 3661 6263 6362 3839 6564 3230 3739 6a6abccb89ed2079\n-0002c0d0: 3563 223e 3c64 6976 2063 6c61 7373 3d22 5c\">Y constant_
constant s\n-0002c190: 746f 7265 6420 696e 2074 6869 7320 6c65 tored in this le\n-0002c1a0: 6166 3c2f 6469 763e 3c64 6976 2063 6c61 af
De\n-0002c1c0: 6669 6e69 7469 6f6e 3c2f 623e 2044 6563 finition Dec\n-0002c1d0: 6973 696f 6e54 7265 652d 696e 6c2e 683a isionTree-inl.h:\n-0002c1e0: 3534 3c2f 6469 763e 3c2f 6469 763e 0a3c 54
.<\n-0002c1f0: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-0002c200: 6964 3d22 6161 3032 3737 365f 6874 6d6c id=\"aa02776_html\n-0002c210: 5f61 3835 6536 3464 6336 6431 6434 6534 _a85e64dc6d1d4e4\n-0002c220: 3063 6135 3639 6439 3739 6236 3535 3433 0ca569d979b65543\n-0002c230: 6535 223e 3c64 6976 2063 6c61 7373 3d22 e5\">
vo\n-0002c2c0: 6964 2070 7269 6e74 2863 6f6e 7374 2073 id print(const s\n-0002c2d0: 7464 3a3a 7374 7269 6e67 2026 616d 703b td::string &\n-0002c2e0: 732c 2063 6f6e 7374 204c 6162 656c 466f s, const LabelFo\n-0002c2f0: 726d 6174 7465 7220 2661 6d70 3b6c 6162 rmatter &lab\n-0002c300: 656c 466f 726d 6174 7465 722c 2063 6f6e elFormatter, con\n-0002c310: 7374 2056 616c 7565 466f 726d 6174 7465 st ValueFormatte\n-0002c320: 7220 2661 6d70 3b76 616c 7565 466f 726d r &valueForm\n-0002c330: 6174 7465 7229 2063 6f6e 7374 206f 7665 atter) const ove\n-0002c340: 7272 6964 653c 2f64 6976 3e3c 6469 7620 rride
pr\n-0002c360: 696e 743c 2f64 6976 3e3c 6469 7620 636c int
D\n-0002c380: 6566 696e 6974 696f 6e3c 2f62 3e20 4465 efinition De\n-0002c390: 6369 7369 6f6e 5472 6565 2d69 6e6c 2e68 cisionTree-inl.h\n-0002c3a0: 3a39 343c 2f64 6976 3e3c 2f64 6976 3e0a :94
.\n-0002c3b0: 3c64 6976 2063 6c61 7373 3d22 7474 6322
N\n-0002c480: 6f64 6550 7472 2061 7070 6c79 2863 6f6e odePtr apply(con\n-0002c490: 7374 2055 6e61 7279 2026 616d 703b 6f70 st Unary &op\n-0002c4a0: 2920 636f 6e73 7420 6f76 6572 7269 6465 ) const override\n-0002c4b0: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
apply u\n-0002c4d0: 6e61 7279 206f 7065 7261 746f 723c 2f64 nary operator
Definit\n-0002c500: 696f 6e3c 2f62 3e20 4465 6369 7369 6f6e ion Decision\n-0002c510: 5472 6565 2d69 6e6c 2e68 3a31 3135 3c2f Tree-inl.h:115
.
\n-0002c570: 3c64 6976 2063 6c61 7373 3d22 7474 6e61 .
<\n-0002c760: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n-0002c770: 6922 3e4c 6561 6628 636f 6e73 7420 5920 i\">Leaf(const Y \n-0002c780: 2661 6d70 3b63 6f6e 7374 616e 742c 2073 &constant, s\n-0002c790: 697a 655f 7420 6e72 4173 7369 676e 6d65 ize_t nrAssignme\n-0002c7a0: 6e74 733d 3129 3c2f 6469 763e 3c64 6976 nts=1)
C\n-0002c7c0: 6f6e 7374 7275 6374 6f72 2066 726f 6d20 onstructor from \n-0002c7d0: 636f 6e73 7461 6e74 2e3c 2f64 6976 3e3c constant.
<\n-0002c7e0: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n-0002c7f0: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n-0002c800: 2f62 3e20 4465 6369 7369 6f6e 5472 6565 /b> DecisionTree\n-0002c810: 2d69 6e6c 2e68 3a36 353c 2f64 6976 3e3c -inl.h:65
<\n-0002c820: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
<\n-0002c880: 6120 6872 6566 3d22 6130 3237 3736 2e68 a href=\"a02776.h\n-0002c890: 746d 6c23 6162 3932 3036 3930 3338 3030 tml#ab9206903800\n-0002c8a0: 3830 3735 3165 6138 3037 6535 6233 6365 80751ea807e5b3ce\n-0002c8b0: 3962 3638 3322 3e67 7473 616d 3a3a 4465 9b683\">gtsam::De\n-0002c8c0: 6369 7369 6f6e 5472 6565 3a3a 4c65 6166 cisionTree::Leaf\n-0002c8d0: 3a3a 6e72 4173 7369 676e 6d65 6e74 735f ::nrAssignments_\n-0002c8e0: 3c2f 613e 3c2f 6469 763e 3c64 6976 2063
si\n-0002c900: 7a65 5f74 206e 7241 7373 6967 6e6d 656e ze_t nrAssignmen\n-0002c910: 7473 5f3c 2f64 6976 3e3c 6469 7620 636c ts_
The \n-0002c930: 6e75 6d62 6572 206f 6620 6173 7369 676e number of assign\n-0002c940: 6d65 6e74 7320 636f 6e74 6169 6e65 6420 ments contained \n-0002c950: 7769 7468 696e 2074 6869 7320 6c65 6166 within this leaf\n-0002c960: 2e3c 2f64 6976 3e3c 6469 7620 636c 6173 .
Def\n-0002c980: 696e 6974 696f 6e3c 2f62 3e20 4465 6369 inition Deci\n-0002c990: 7369 6f6e 5472 6565 2d69 6e6c 2e68 3a35 sionTree-inl.h:5\n-0002c9a0: 393c 2f64 6976 3e3c 2f64 6976 3e0a 3c64 9
.
void \n-0002ca80: 646f 7428 7374 643a 3a6f 7374 7265 616d dot(std::ostream\n-0002ca90: 2026 616d 703b 6f73 2c20 636f 6e73 7420 &os, const \n-0002caa0: 4c61 6265 6c46 6f72 6d61 7474 6572 2026 LabelFormatter &\n-0002cab0: 616d 703b 6c61 6265 6c46 6f72 6d61 7474 amp;labelFormatt\n-0002cac0: 6572 2c20 636f 6e73 7420 5661 6c75 6546 er, const ValueF\n-0002cad0: 6f72 6d61 7474 6572 2026 616d 703b 7661 ormatter &va\n-0002cae0: 6c75 6546 6f72 6d61 7474 6572 2c20 626f lueFormatter, bo\n-0002caf0: 6f6c 2073 686f 775a 6572 6f29 2063 6f6e ol showZero) con\n-0002cb00: 7374 206f 7665 7272 6964 653c 2f64 6976 st override
Write graphv\n-0002cb30: 697a 2066 6f72 6d61 7420 746f 2073 7472 iz format to str\n-0002cb40: 6561 6d20 6f73 2e3c 2f64 6976 3e3c 6469 eam os.
\n-0002cb60: 3c62 3e44 6566 696e 6974 696f 6e3c 2f62 Definition DecisionTree-i\n-0002cb80: 6e6c 2e68 3a31 3030 3c2f 6469 763e 3c2f nl.h:100
.
<\n-0002cc50: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n-0002cc60: 6922 3e4c 6561 6628 293c 2f64 6976 3e3c i\">Leaf()
<\n-0002cc70: 6469 7620 636c 6173 733d 2274 7464 6f63 div class=\"ttdoc\n-0002cc80: 223e 4465 6661 756c 7420 636f 6e73 7472 \">Default constr\n-0002cc90: 7563 746f 7220 666f 7220 7365 7269 616c uctor for serial\n-0002cca0: 697a 6174 696f 6e2e 3c2f 6469 763e 3c64 ization.
Definition DecisionTree-\n-0002cce0: 696e 6c2e 683a 3632 3c2f 6469 763e 3c2f inl.h:62
.
gtsam::Dec\n-0002cd90: 6973 696f 6e54 7265 653a 3a4c 6561 663a isionTree::Leaf:\n-0002cda0: 3a73 616d 654c 6561 663c 2f61 3e3c 2f64 :sameLeaf
bool same\n-0002cdd0: 4c65 6166 2863 6f6e 7374 204e 6f64 6520 Leaf(const Node \n-0002cde0: 2661 6d70 3b71 2920 636f 6e73 7420 6f76 &q) const ov\n-0002cdf0: 6572 7269 6465 3c2f 6469 763e 3c64 6976 erride
p\n-0002ce10: 6f6c 796d 6f72 7068 6963 2065 7175 616c olymorphic equal\n-0002ce20: 6974 793a 2069 7320 7120 6120 6c65 6166 ity: is q a leaf\n-0002ce30: 2061 6e64 2069 7320 6974 2074 6865 2073 and is it the s\n-0002ce40: 616d 6520 6173 2074 6869 7320 6c65 6166 ame as this leaf\n-0002ce50: 3f3c 2f64 6976 3e3c 6469 7620 636c 6173 ?
Def\n-0002ce70: 696e 6974 696f 6e3c 2f62 3e20 4465 6369 inition Deci\n-0002ce80: 7369 6f6e 5472 6565 2d69 6e6c 2e68 3a38 sionTree-inl.h:8\n-0002ce90: 323c 2f64 6976 3e3c 2f64 6976 3e0a 3c64 2
.\n-0002cf70: 636f 6e73 7420 5920 2661 6d70 3b20 636f const Y & co\n-0002cf80: 6e73 7461 6e74 2829 2063 6f6e 7374 3c2f nstant() const
Return th\n-0002cfb0: 6520 636f 6e73 7461 6e74 2e3c 2f64 6976 e constant.
Definitio\n-0002cfe0: 6e3c 2f62 3e20 4465 6369 7369 6f6e 5472 n DecisionTr\n-0002cff0: 6565 2d69 6e6c 2e68 3a36 393c 2f64 6976 ee-inl.h:69
.
s\n-0002d0e0: 697a 655f 7420 6e72 4173 7369 676e 6d65 ize_t nrAssignme\n-0002d0f0: 6e74 7328 2920 636f 6e73 743c 2f64 6976 nts() const
Return the n\n-0002d120: 756d 6265 7220 6f66 2061 7373 6967 6e6d umber of assignm\n-0002d130: 656e 7473 2063 6f6e 7461 696e 6564 2077 ents contained w\n-0002d140: 6974 6869 6e20 7468 6973 206c 6561 662e ithin this leaf.\n-0002d150: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
Defi\n-0002d170: 6e69 7469 6f6e 3c2f 623e 2044 6563 6973 nition Decis\n-0002d180: 696f 6e54 7265 652d 696e 6c2e 683a 3734 ionTree-inl.h:74\n-0002d190: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.\n-0002d1c0: 3c64 6976 2063 6c61 7373 3d22 7474 6e61 <\n-0002d210: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n-0002d220: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n-0002d230: 2f62 3e20 4465 6369 7369 6f6e 5472 6565 /b> DecisionTree\n-0002d240: 2d69 6e6c 2e68 3a31 3732 3c2f 6469 763e -inl.h:172
\n-0002d250: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0002d2b0: 3c61 2068 7265 663d 2261 3032 3738 302e gtsam::D\n-0002d2f0: 6563 6973 696f 6e54 7265 653a 3a43 686f ecisionTree::Cho\n-0002d300: 6963 653a 3a61 7070 6c79 3c2f 613e 3c2f ice::apply
NodePtr \n-0002d330: 6170 706c 7928 636f 6e73 7420 556e 6172 apply(const Unar\n-0002d340: 7920 2661 6d70 3b6f 7029 2063 6f6e 7374 y &op) const\n-0002d350: 206f 7665 7272 6964 653c 2f64 6976 3e3c override
<\n-0002d360: 6469 7620 636c 6173 733d 2274 7464 6f63 div class=\"ttdoc\n-0002d370: 223e 6170 706c 7920 756e 6172 7920 6f70 \">apply unary op\n-0002d380: 6572 6174 6f72 2e3c 2f64 6976 3e3c 6469 erator.
\n-0002d3a0: 3c62 3e44 6566 696e 6974 696f 6e3c 2f62 Definition DecisionTree-i\n-0002d3c0: 6e6c 2e68 3a33 3839 3c2f 6469 763e 3c2f nl.h:389
.
gtsam::Dec\n-0002d470: 6973 696f 6e54 7265 653a 3a43 686f 6963 isionTree::Choic\n-0002d480: 653a 3a43 686f 6963 653c 2f61 3e3c 2f64 e::Choice
Choice(co\n-0002d4b0: 6e73 7420 4c20 2661 6d70 3b6c 6162 656c nst L &label\n-0002d4c0: 2c20 636f 6e73 7420 4368 6f69 6365 2026 , const Choice &\n-0002d4d0: 616d 703b 662c 2063 6f6e 7374 2055 6e61 amp;f, const Una\n-0002d4e0: 7279 4173 7369 676e 6d65 6e74 2026 616d ryAssignment &am\n-0002d4f0: 703b 6f70 2c20 636f 6e73 7420 4173 7369 p;op, const Assi\n-0002d500: 676e 6d65 6e74 266c 743b 204c 2026 6774 gnment< L >\n-0002d510: 3b20 2661 6d70 3b61 7373 6967 6e6d 656e ; &assignmen\n-0002d520: 7429 3c2f 6469 763e 3c64 6976 2063 6c61 t)
Const\n-0002d540: 7275 6374 6f72 2077 6869 6368 2061 6363 ructor which acc\n-0002d550: 6570 7473 2061 2055 6e61 7279 4173 7369 epts a UnaryAssi\n-0002d560: 676e 6d65 6e74 206f 7020 616e 6420 7468 gnment op and th\n-0002d570: 6520 636f 7272 6573 706f 6e64 696e 6720 e corresponding \n-0002d580: 6173 7369 676e 6d65 6e74 2e3c 2f64 6976 assignment.
Definitio\n-0002d5b0: 6e3c 2f62 3e20 4465 6369 7369 6f6e 5472 n DecisionTr\n-0002d5c0: 6565 2d69 6e6c 2e68 3a33 3639 3c2f 6469 ee-inl.h:369
.
const \n-0002d6b0: 4c20 2661 6d70 3b20 6c61 6265 6c28 2920 L & label() \n-0002d6c0: 636f 6e73 743c 2f64 6976 3e3c 6469 7620 const
Re\n-0002d6e0: 7475 726e 2074 6865 206c 6162 656c 206f turn the label o\n-0002d6f0: 6620 7468 6973 2063 686f 6963 6520 6e6f f this choice no\n-0002d700: 6465 2e3c 2f64 6976 3e3c 6469 7620 636c de.
D\n-0002d720: 6566 696e 6974 696f 6e3c 2f62 3e20 4465 efinition De\n-0002d730: 6369 7369 6f6e 5472 6565 2d69 6e6c 2e68 cisionTree-inl.h\n-0002d740: 3a32 3538 3c2f 6469 763e 3c2f 6469 763e :258
\n-0002d750: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
void print(con\n-0002d830: 7374 2073 7464 3a3a 7374 7269 6e67 2026 st std::string &\n-0002d840: 616d 703b 732c 2063 6f6e 7374 204c 6162 amp;s, const Lab\n-0002d850: 656c 466f 726d 6174 7465 7220 2661 6d70 elFormatter &\n-0002d860: 3b6c 6162 656c 466f 726d 6174 7465 722c ;labelFormatter,\n-0002d870: 2063 6f6e 7374 2056 616c 7565 466f 726d const ValueForm\n-0002d880: 6174 7465 7220 2661 6d70 3b76 616c 7565 atter &value\n-0002d890: 466f 726d 6174 7465 7229 2063 6f6e 7374 Formatter) const\n-0002d8a0: 206f 7665 7272 6964 653c 2f64 6976 3e3c override
<\n-0002d8b0: 6469 7620 636c 6173 733d 2274 7464 6f63 div class=\"ttdoc\n-0002d8c0: 223e 7072 696e 7420 2861 7320 6120 7472 \">print (as a tr\n-0002d8d0: 6565 292e 3c2f 6469 763e 3c64 6976 2063 ee).
\n-0002d8f0: 4465 6669 6e69 7469 6f6e 3c2f 623e 2044 Definition D\n-0002d900: 6563 6973 696f 6e54 7265 652d 696e 6c2e ecisionTree-inl.\n-0002d910: 683a 3238 303c 2f64 6976 3e3c 2f64 6976 h:280
.
<\n-0002d9e0: 6469 7620 636c 6173 733d 2274 7464 6563 div class=\"ttdec\n-0002d9f0: 6922 3e4e 6f64 6550 7472 2061 7070 6c79 i\">NodePtr apply\n-0002da00: 2863 6f6e 7374 2055 6e61 7279 4173 7369 (const UnaryAssi\n-0002da10: 676e 6d65 6e74 2026 616d 703b 6f70 2c20 gnment &op, \n-0002da20: 636f 6e73 7420 4173 7369 676e 6d65 6e74 const Assignment\n-0002da30: 266c 743b 204c 2026 6774 3b20 2661 6d70 < L > &\n-0002da40: 3b61 7373 6967 6e6d 656e 7429 2063 6f6e ;assignment) con\n-0002da50: 7374 206f 7665 7272 6964 653c 2f64 6976 st override
Apply unary \n-0002da80: 6f70 6572 6174 6f72 2077 6974 6820 6173 operator with as\n-0002da90: 7369 676e 6d65 6e74 2e3c 2f64 6976 3e3c signment.
<\n-0002daa0: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n-0002dab0: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n-0002dac0: 2f62 3e20 4465 6369 7369 6f6e 5472 6565 /b> DecisionTree\n-0002dad0: 2d69 6e6c 2e68 3a33 3935 3c2f 6469 763e -inl.h:395
\n-0002dae0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-0002db40: 3c61 2068 7265 663d 2261 3032 3738 302e gtsam::D\n-0002db80: 6563 6973 696f 6e54 7265 653a 3a43 686f ecisionTree::Cho\n-0002db90: 6963 653a 3a6c 6162 656c 5f3c 2f61 3e3c ice::label_<\n-0002dba0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
L label\n-0002dbc0: 5f3c 2f64 6976 3e3c 6469 7620 636c 6173 _
the la\n-0002dbe0: 6265 6c20 6f66 2074 6865 2076 6172 6961 bel of the varia\n-0002dbf0: 626c 6520 6f6e 2077 6869 6368 2077 6520 ble on which we \n-0002dc00: 7370 6c69 743c 2f64 6976 3e3c 6469 7620 split
Definition \n-0002dc30: 4465 6369 7369 6f6e 5472 6565 2d69 6e6c DecisionTree-inl\n-0002dc40: 2e68 3a31 3734 3c2f 6469 763e 3c2f 6469 .h:174
.
gtsam::Decis\n-0002dcf0: 696f 6e54 7265 653a 3a43 686f 6963 653a ionTree::Choice:\n-0002dd00: 3a73 616d 654c 6561 663c 2f61 3e3c 2f64 :sameLeaf
bool same\n-0002dd30: 4c65 6166 2863 6f6e 7374 204e 6f64 6520 Leaf(const Node \n-0002dd40: 2661 6d70 3b71 2920 636f 6e73 7420 6f76 &q) const ov\n-0002dd50: 6572 7269 6465 3c2f 6469 763e 3c64 6976 erride
p\n-0002dd70: 6f6c 796d 6f72 7068 6963 2065 7175 616c olymorphic equal\n-0002dd80: 6974 793a 2069 6620 7120 6973 2061 206c ity: if q is a l\n-0002dd90: 6561 662c 2063 6f75 6c64 2062 652e 2e2e eaf, could be...\n-0002dda0: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
Defi\n-0002ddc0: 6e69 7469 6f6e 3c2f 623e 2044 6563 6973 nition Decis\n-0002ddd0: 696f 6e54 7265 652d 696e 6c2e 683a 3331 ionTree-inl.h:31\n-0002dde0: 383c 2f64 6976 3e3c 2f64 6976 3e0a 3c64 8
.\n-0002dec0: 4368 6f69 6365 2863 6f6e 7374 2043 686f Choice(const Cho\n-0002ded0: 6963 6520 2661 6d70 3b66 2c20 636f 6e73 ice &f, cons\n-0002dee0: 7420 4368 6f69 6365 2026 616d 703b 672c t Choice &g,\n-0002def0: 2063 6f6e 7374 2042 696e 6172 7920 2661 const Binary &a\n-0002df00: 6d70 3b6f 7029 3c2f 6469 763e 3c64 6976 mp;op)
C\n-0002df20: 6f6e 7374 7275 6374 2066 726f 6d20 6170 onstruct from ap\n-0002df30: 706c 7969 6e67 2062 696e 6172 7920 6f70 plying binary op\n-0002df40: 2074 6f20 7477 6f20 4368 6f69 6365 206e to two Choice n\n-0002df50: 6f64 6573 2e3c 2f64 6976 3e3c 6469 7620 odes.
Definition \n-0002df80: 4465 6369 7369 6f6e 5472 6565 2d69 6e6c DecisionTree-inl\n-0002df90: 2e68 3a32 3330 3c2f 6469 763e 3c2f 6469 .h:230
.
gtsam::Decis\n-0002e040: 696f 6e54 7265 653a 3a43 686f 6963 653a ionTree::Choice:\n-0002e050: 3a70 7573 685f 6261 636b 3c2f 613e 3c2f :push_back
void pus\n-0002e080: 685f 6261 636b 2863 6f6e 7374 204e 6f64 h_back(const Nod\n-0002e090: 6550 7472 2026 616d 703b 6e6f 6465 293c ePtr &node)<\n-0002e0a0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
add a br\n-0002e0c0: 616e 6368 3a20 544f 444f 206d 6572 6765 anch: TODO merge\n-0002e0d0: 2069 6e74 6f20 636f 6e73 7472 7563 746f into constructo\n-0002e0e0: 723c 2f64 6976 3e3c 6469 7620 636c 6173 r
Def\n-0002e100: 696e 6974 696f 6e3c 2f62 3e20 4465 6369 inition Deci\n-0002e110: 7369 6f6e 5472 6565 2d69 6e6c 2e68 3a32 sionTree-inl.h:2\n-0002e120: 3731 3c2f 6469 763e 3c2f 6469 763e 0a3c 71
.<\n-0002e130: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-0002e140: 6964 3d22 6161 3032 3738 305f 6874 6d6c id=\"aa02780_html\n-0002e150: 5f61 6131 3132 3136 6433 3066 6131 6430 _aa11216d30fa1d0\n-0002e160: 6162 6632 6634 6432 3666 3832 6331 6637 abf2f4d26f82c1f7\n-0002e170: 3832 223e 3c64 6976 2063 6c61 7373 3d22 82\">\n-0002e1f0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
std::vector&\n-0002e210: 6c74 3b20 4e6f 6465 5074 7220 2667 743b lt; NodePtr >\n-0002e220: 2062 7261 6e63 6865 735f 3c2f 6469 763e branches_
\n-0002e230: 3c64 6976 2063 6c61 7373 3d22 7474 646f
The children \n-0002e250: 6f66 2074 6869 7320 4368 6f69 6365 206e of this Choice n\n-0002e260: 6f64 652e 3c2f 6469 763e 3c64 6976 2063 ode.
\n-0002e280: 4465 6669 6e69 7469 6f6e 3c2f 623e 2044 Definition D\n-0002e290: 6563 6973 696f 6e54 7265 652d 696e 6c2e ecisionTree-inl.\n-0002e2a0: 683a 3137 373c 2f64 6976 3e3c 2f64 6976 h:177
.
\n-0002e370: 3c64 6976 2063 6c61 7373 3d22 7474 6465
Choice()
Default con\n-0002e3b0: 7374 7275 6374 6f72 2066 6f72 2073 6572 structor for ser\n-0002e3c0: 6961 6c69 7a61 7469 6f6e 2e3c 2f64 6976 ialization.
Definitio\n-0002e3f0: 6e3c 2f62 3e20 4465 6369 7369 6f6e 5472 n DecisionTr\n-0002e400: 6565 2d69 6e6c 2e68 3a31 3930 3c2f 6469 ee-inl.h:190
.
c\n-0002e4f0: 6f6e 7374 2059 2026 616d 703b 206f 7065 onst Y & ope\n-0002e500: 7261 746f 7228 2928 636f 6e73 7420 4173 rator()(const As\n-0002e510: 7369 676e 6d65 6e74 266c 743b 204c 2026 signment< L &\n-0002e520: 6774 3b20 2661 6d70 3b78 2920 636f 6e73 gt; &x) cons\n-0002e530: 7420 6f76 6572 7269 6465 3c2f 6469 763e t override
\n-0002e540: 3c64 6976 2063 6c61 7373 3d22 7474 646f .\n-0002e820: 4e6f 6465 5074 7220 6368 6f6f 7365 2863 NodePtr choose(c\n-0002e830: 6f6e 7374 204c 2026 616d 703b 6c61 6265 onst L &labe\n-0002e840: 6c2c 2073 697a 655f 7420 696e 6465 7829 l, size_t index)\n-0002e850: 2063 6f6e 7374 206f 7665 7272 6964 653c const override<\n-0002e860: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
choose a\n-0002e880: 2062 7261 6e63 682c 2072 6563 7572 7369 branch, recursi\n-0002e890: 7665 6c79 3c2f 6469 763e 3c64 6976 2063 vely
\n-0002e8b0: 4465 6669 6e69 7469 6f6e 3c2f 623e 2044 Definition D\n-0002e8c0: 6563 6973 696f 6e54 7265 652d 696e 6c2e ecisionTree-inl.\n-0002e8d0: 683a 3433 343c 2f64 6976 3e3c 2f64 6976 h:434
.
void dot(std::o\n-0002e9c0: 7374 7265 616d 2026 616d 703b 6f73 2c20 stream &os, \n-0002e9d0: 636f 6e73 7420 4c61 6265 6c46 6f72 6d61 const LabelForma\n-0002e9e0: 7474 6572 2026 616d 703b 6c61 6265 6c46 tter &labelF\n-0002e9f0: 6f72 6d61 7474 6572 2c20 636f 6e73 7420 ormatter, const \n-0002ea00: 5661 6c75 6546 6f72 6d61 7474 6572 2026 ValueFormatter &\n-0002ea10: 616d 703b 7661 6c75 6546 6f72 6d61 7474 amp;valueFormatt\n-0002ea20: 6572 2c20 626f 6f6c 2073 686f 775a 6572 er, bool showZer\n-0002ea30: 6f29 2063 6f6e 7374 206f 7665 7272 6964 o) const overrid\n-0002ea40: 653c 2f64 6976 3e3c 6469 7620 636c 6173 e
output\n-0002ea60: 2074 6f20 6772 6170 6876 697a 2028 6173 to graphviz (as\n-0002ea70: 2061 2061 2067 7261 7068 293c 2f64 6976 a a graph)
Definitio\n-0002eaa0: 6e3c 2f62 3e20 4465 6369 7369 6f6e 5472 n DecisionTr\n-0002eab0: 6565 2d69 6e6c 2e68 3a32 3930 3c2f 6469 ee-inl.h:290
.<\n-0002ec50: 2f64 6976 3e0a 3c64 6976 2063 6c61 7373 /div>.
<\n-0002ecb0: 6120 6872 6566 3d22 6130 3237 3830 2e68 a href=\"a02780.h\n-0002ecc0: 746d 6c23 6166 3936 6332 3331 3633 3662 tml#af96c231636b\n-0002ecd0: 3534 3862 6234 6466 3934 3165 3564 3137 548bb4df941e5d17\n-0002ece0: 3265 3032 6622 3e67 7473 616d 3a3a 4465 2e02f\">gtsam::De\n-0002ecf0: 6369 7369 6f6e 5472 6565 3a3a 4368 6f69 cisionTree::Choi\n-0002ed00: 6365 3a3a 556e 6971 7565 3c2f 613e 3c2f ce::Unique
static N\n-0002ed30: 6f64 6550 7472 2055 6e69 7175 6528 636f odePtr Unique(co\n-0002ed40: 6e73 7420 4368 6f69 6365 5074 7220 2661 nst ChoicePtr &a\n-0002ed50: 6d70 3b66 293c 2f64 6976 3e3c 6469 7620 mp;f)
If\n-0002ed70: 2061 6c6c 2062 7261 6e63 6865 7320 6f66 all branches of\n-0002ed80: 2061 2063 686f 6963 6520 6e6f 6465 2066 a choice node f\n-0002ed90: 2061 7265 2074 6865 2073 616d 652c 206a are the same, j\n-0002eda0: 7573 7420 7265 7475 726e 2061 2062 7261 ust return a bra\n-0002edb0: 6e63 682e 3c2f 6469 763e 3c64 6976 2063 nch.
\n-0002edd0: 4465 6669 6e69 7469 6f6e 3c2f 623e 2044 Definition D\n-0002ede0: 6563 6973 696f 6e54 7265 652d 696e 6c2e ecisionTree-inl.\n-0002edf0: 683a 3230 303c 2f64 6976 3e3c 2f64 6976 h:200
.
\n-0002eec0: 3c64 6976 2063 6c61 7373 3d22 7474 6465
bool equals(\n-0002eee0: 636f 6e73 7420 4e6f 6465 2026 616d 703b const Node &\n-0002eef0: 712c 2063 6f6e 7374 2043 6f6d 7061 7265 q, const Compare\n-0002ef00: 4675 6e63 2026 616d 703b 636f 6d70 6172 Func &compar\n-0002ef10: 6529 2063 6f6e 7374 206f 7665 7272 6964 e) const overrid\n-0002ef20: 653c 2f64 6976 3e3c 6469 7620 636c 6173 e
equali\n-0002ef40: 7479 3c2f 6469 763e 3c64 6976 2063 6c61 ty
De\n-0002ef60: 6669 6e69 7469 6f6e 3c2f 623e 2044 6563 finition Dec\n-0002ef70: 6973 696f 6e54 7265 652d 696e 6c2e 683a isionTree-inl.h:\n-0002ef80: 3332 333c 2f64 6976 3e3c 2f64 6976 3e0a 323
.\n-0002ef90: 3c64 6976 2063 6c61 7373 3d22 7474 6322
gts\n-0002efe0: 616d 3a3a 5669 7369 743c 2f61 3e3c 2f64 am::Visit
Functor pe\n-0002f010: 7266 6f72 6d69 6e67 2064 6570 7468 2d66 rforming depth-f\n-0002f020: 6972 7374 2076 6973 6974 2074 6f20 6561 irst visit to ea\n-0002f030: 6368 206c 6561 6620 7769 7468 2074 6865 ch leaf with the\n-0002f040: 206c 6561 6620 7661 6c75 6520 6173 2074 leaf value as t\n-0002f050: 6865 2061 7267 756d 656e 742e 3c2f 6469 he argument.
Definiti\n-0002f080: 6f6e 3c2f 623e 2044 6563 6973 696f 6e54 on DecisionT\n-0002f090: 7265 652d 696e 6c2e 683a 3731 353c 2f64 ree-inl.h:715
.
<\n-0002f0f0: 6469 7620 636c 6173 733d 2274 746e 616d div class=\"ttnam\n-0002f100: 6522 3e3c 6120 6872 6566 3d22 6130 3237 e\">gtsam\n-0002f140: 3a3a 5669 7369 743a 3a66 3c2f 613e 3c2f ::Visit::f
F f
folding func\n-0002f190: 7469 6f6e 206f 626a 6563 742e 3c2f 6469 tion object.
Definiti\n-0002f1c0: 6f6e 3c2f 623e 2044 6563 6973 696f 6e54 on DecisionT\n-0002f1d0: 7265 652d 696e 6c2e 683a 3731 383c 2f64 ree-inl.h:718
.
<\n-0002f230: 6469 7620 636c 6173 733d 2274 746e 616d div class=\"ttnam\n-0002f240: 6522 3e3c 6120 6872 6566 3d22 6130 3237 e\">gtsam\n-0002f280: 3a3a 5669 7369 743a 3a6f 7065 7261 746f ::Visit::operato\n-0002f290: 7228 293c 2f61 3e3c 2f64 6976 3e3c 6469 r()
void operator()\n-0002f2c0: 2863 6f6e 7374 2074 7970 656e 616d 6520 (const typename \n-0002f2d0: 4465 6369 7369 6f6e 5472 6565 266c 743b DecisionTree<\n-0002f2e0: 204c 2c20 5920 2667 743b 3a3a 4e6f 6465 L, Y >::Node\n-0002f2f0: 5074 7220 2661 6d70 3b6e 6f64 6529 2063 Ptr &node) c\n-0002f300: 6f6e 7374 3c2f 6469 763e 3c64 6976 2063 onst
Do \n-0002f320: 6120 6465 7074 682d 6669 7273 7420 7669 a depth-first vi\n-0002f330: 7369 7420 6f6e 2074 6865 2074 7265 6520 sit on the tree \n-0002f340: 726f 6f74 6564 2061 7420 6e6f 6465 2e3c rooted at node.<\n-0002f350: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
Defin\n-0002f370: 6974 696f 6e3c 2f62 3e20 4465 6369 7369 ition Decisi\n-0002f380: 6f6e 5472 6565 2d69 6e6c 2e68 3a37 3231 onTree-inl.h:721\n-0002f390: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.
V\n-0002f460: 6973 6974 2846 2066 293c 2f64 6976 3e3c isit(F f)
<\n-0002f470: 6469 7620 636c 6173 733d 2274 7464 6f63 div class=\"ttdoc\n-0002f480: 223e 436f 6e73 7472 7563 7420 6672 6f6d \">Construct from\n-0002f490: 2066 6f6c 6469 6e67 2066 756e 6374 696f folding functio\n-0002f4a0: 6e2e 3c2f 6469 763e 3c64 6976 2063 6c61 n.
De\n-0002f4c0: 6669 6e69 7469 6f6e 3c2f 623e 2044 6563 finition Dec\n-0002f4d0: 6973 696f 6e54 7265 652d 696e 6c2e 683a isionTree-inl.h:\n-0002f4e0: 3731 373c 2f64 6976 3e3c 2f64 6976 3e0a 717
.\n-0002f4f0: 3c64 6976 2063 6c61 7373 3d22 7474 6322 .
V\n-0002f6e0: 6973 6974 4c65 6166 2846 2066 293c 2f64 isitLeaf(F f)
Construct \n-0002f710: 6672 6f6d 2066 6f6c 6469 6e67 2066 756e from folding fun\n-0002f720: 6374 696f 6e2e 3c2f 6469 763e 3c64 6976 ction.
<\n-0002f740: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition
\n-0002f750: 2044 6563 6973 696f 6e54 7265 652d 696e DecisionTree-in\n-0002f760: 6c2e 683a 3735 343c 2f64 6976 3e3c 2f64 l.h:754
.
v\n-0002f840: 6f69 6420 6f70 6572 6174 6f72 2829 2863 oid operator()(c\n-0002f850: 6f6e 7374 2074 7970 656e 616d 6520 4465 onst typename De\n-0002f860: 6369 7369 6f6e 5472 6565 266c 743b 204c cisionTree< L\n-0002f870: 2c20 5920 2667 743b 3a3a 4e6f 6465 5074 , Y >::NodePt\n-0002f880: 7220 2661 6d70 3b6e 6f64 6529 2063 6f6e r &node) con\n-0002f890: 7374 3c2f 6469 763e 3c64 6976 2063 6c61 st
Do a \n-0002f8b0: 6465 7074 682d 6669 7273 7420 7669 7369 depth-first visi\n-0002f8c0: 7420 6f6e 2074 6865 2074 7265 6520 726f t on the tree ro\n-0002f8d0: 6f74 6564 2061 7420 6e6f 6465 2e3c 2f64 oted at node.
Definit\n-0002f900: 696f 6e3c 2f62 3e20 4465 6369 7369 6f6e ion Decision\n-0002f910: 5472 6565 2d69 6e6c 2e68 3a37 3538 3c2f Tree-inl.h:758
..<\n-0002fa70: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-0002fa80: 6964 3d22 6161 3032 3739 325f 6874 6d6c id=\"aa02792_html\n-0002fa90: 223e 3c64 6976 2063 6c61 7373 3d22 7474 \">
gtsa\n-0002fac0: 6d3a 3a56 6973 6974 5769 7468 3c2f 613e m::VisitWith\n-0002fad0: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
Functor\n-0002faf0: 2070 6572 666f 726d 696e 6720 6465 7074 performing dept\n-0002fb00: 682d 6669 7273 7420 7669 7369 7420 746f h-first visit to\n-0002fb10: 2065 6163 6820 6c65 6166 2077 6974 6820 each leaf with \n-0002fb20: 7468 6520 6c65 6166 2773 2041 7373 6967 the leaf's Assig\n-0002fb30: 6e6d 656e 7426 6c74 3b4c 2667 743b 2061 nment<L> a\n-0002fb40: 6e64 2076 616c 7565 2070 6173 7365 6420 nd value passed \n-0002fb50: 6173 2061 2e2e 2e3c 2f64 6976 3e3c 6469 as a...
\n-0002fb70: 3c62 3e44 6566 696e 6974 696f 6e3c 2f62 Definition DecisionTree-i\n-0002fb90: 6e6c 2e68 3a37 3836 3c2f 6469 763e 3c2f nl.h:786
.
gtsam::Vis\n-0002fc40: 6974 5769 7468 3a3a 5669 7369 7457 6974 itWith::VisitWit\n-0002fc50: 683c 2f61 3e3c 2f64 6976 3e3c 6469 7620 h
V\n-0002fc70: 6973 6974 5769 7468 2846 2066 293c 2f64 isitWith(F f)
Construct \n-0002fca0: 6672 6f6d 2066 6f6c 6469 6e67 2066 756e from folding fun\n-0002fcb0: 6374 696f 6e2e 3c2f 6469 763e 3c64 6976 ction.
<\n-0002fcd0: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition
\n-0002fce0: 2044 6563 6973 696f 6e54 7265 652d 696e DecisionTree-in\n-0002fcf0: 6c2e 683a 3738 383c 2f64 6976 3e3c 2f64 l.h:788
.
A\n-0002fdd0: 7373 6967 6e6d 656e 7426 6c74 3b20 4c20 ssignment< L \n-0002fde0: 2667 743b 2061 7373 6967 6e6d 656e 743c > assignment<\n-0002fdf0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
Assignme\n-0002fe10: 6e74 2c20 6d75 7461 7469 6e67 2074 6872 nt, mutating thr\n-0002fe20: 6f75 6768 2072 6563 7572 7369 6f6e 2e3c ough recursion.<\n-0002fe30: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
Defin\n-0002fe50: 6974 696f 6e3c 2f62 3e20 4465 6369 7369 ition Decisi\n-0002fe60: 6f6e 5472 6565 2d69 6e6c 2e68 3a37 3839 onTree-inl.h:789\n-0002fe70: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.
gt\n-0002ff10: 7361 6d3a 3a56 6973 6974 5769 7468 3a3a sam::VisitWith::\n-0002ff20: 6f70 6572 6174 6f72 2829 3c2f 613e 3c2f operator()
void ope\n-0002ff50: 7261 746f 7228 2928 636f 6e73 7420 7479 rator()(const ty\n-0002ff60: 7065 6e61 6d65 2044 6563 6973 696f 6e54 pename DecisionT\n-0002ff70: 7265 6526 6c74 3b20 4c2c 2059 2026 6774 ree< L, Y >\n-0002ff80: 3b3a 3a4e 6f64 6550 7472 2026 616d 703b ;::NodePtr &\n-0002ff90: 6e6f 6465 293c 2f64 6976 3e3c 6469 7620 node)
Do\n-0002ffb0: 2061 2064 6570 7468 2d66 6972 7374 2076 a depth-first v\n-0002ffc0: 6973 6974 206f 6e20 7468 6520 7472 6565 isit on the tree\n-0002ffd0: 2072 6f6f 7465 6420 6174 206e 6f64 652e rooted at node.\n-0002ffe0: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
Defi\n-00030000: 6e69 7469 6f6e 3c2f 623e 2044 6563 6973 nition Decis\n-00030010: 696f 6e54 7265 652d 696e 6c2e 683a 3739 ionTree-inl.h:79\n-00030020: 333c 2f64 6976 3e3c 2f64 6976 3e0a 3c64 3
.\n-000300f0: 4620 663c 2f64 6976 3e3c 6469 7620 636c F f
fold\n-00030110: 696e 6720 6675 6e63 7469 6f6e 206f 626a ing function obj\n-00030120: 6563 742e 3c2f 6469 763e 3c64 6976 2063 ect.
\n-00030140: 4465 6669 6e69 7469 6f6e 3c2f 623e 2044 Definition D\n-00030150: 6563 6973 696f 6e54 7265 652d 696e 6c2e ecisionTree-inl.\n-00030160: 683a 3739 303c 2f64 6976 3e3c 2f64 6976 h:790
.
a\n-000301f0: 2064 6563 6973 696f 6e20 7472 6565 2069 decision tree i\n-00030200: 7320 6120 6675 6e63 7469 6f6e 2066 726f s a function fro\n-00030210: 6d20 6173 7369 676e 6d65 6e74 7320 746f m assignments to\n-00030220: 2076 616c 7565 732e 3c2f 6469 763e 3c64 values.
Definition DecisionTree.\n-00030260: 683a 3631 3c2f 6469 763e 3c2f 6469 763e h:61
\n-00030270: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
gtsam::Decisio\n-00030310: 6e54 7265 653a 3a61 7070 6c79 3c2f 613e nTree::apply\n-00030320: 3c2f 6469 763e 3c64 6976 2063 6c61 7373
Decisi\n-00030340: 6f6e 5472 6565 2061 7070 6c79 2863 6f6e onTree apply(con\n-00030350: 7374 2055 6e61 7279 2026 616d 703b 6f70 st Unary &op\n-00030360: 2920 636f 6e73 743c 2f64 6976 3e3c 6469 ) const
\n-00030380: 6170 706c 7920 556e 6172 7920 6f70 6572 apply Unary oper\n-00030390: 6174 696f 6e20 2671 756f 743b 6f70 2671 ation "op&q\n-000303a0: 756f 743b 2074 6f20 663c 2f64 6976 3e3c uot; to f
<\n-000303b0: 6469 7620 636c 6173 733d 2274 7464 6566 div class=\"ttdef\n-000303c0: 223e 3c62 3e44 6566 696e 6974 696f 6e3c \">Definition<\n-000303d0: 2f62 3e20 4465 6369 7369 6f6e 5472 6565 /b> DecisionTree\n-000303e0: 2d69 6e6c 2e68 3a38 3839 3c2f 6469 763e -inl.h:889
\n-000303f0: 3c2f 6469 763e 0a3c 6469 7620 636c 6173
.
\n-00030450: 3c61 2068 7265 663d 2261 3032 3739 362e gtsam::D\n-00030490: 6563 6973 696f 6e54 7265 653a 3a63 6f6e ecisionTree::con\n-000304a0: 7665 7274 4672 6f6d 3c2f 613e 3c2f 6469 vertFrom
NodePtr co\n-000304d0: 6e76 6572 7446 726f 6d28 636f 6e73 7420 nvertFrom(const \n-000304e0: 7479 7065 6e61 6d65 2044 6563 6973 696f typename Decisio\n-000304f0: 6e54 7265 6526 6c74 3b20 4d2c 2058 2026 nTree< M, X &\n-00030500: 6774 3b3a 3a4e 6f64 6550 7472 2026 616d gt;::NodePtr &am\n-00030510: 703b 662c 2073 7464 3a3a 6675 6e63 7469 p;f, std::functi\n-00030520: 6f6e 266c 743b 204c 2863 6f6e 7374 204d on< L(const M\n-00030530: 2026 616d 703b 2926 6774 3b20 4c5f 6f66 &)> L_of\n-00030540: 5f4d 2c20 7374 643a 3a66 756e 6374 696f _M, std::functio\n-00030550: 6e26 6c74 3b20 5928 636f 6e73 7420 5820 n< Y(const X \n-00030560: 2661 6d70 3b29 2667 743b 2059 5f6f 665f &)> Y_of_\n-00030570: 5829 2063 6f6e 7374 3c2f 6469 763e 3c64 X) const
Convert from a \n-000305a0: 4465 6369 7369 6f6e 5472 6565 266c 743b DecisionTree<\n-000305b0: 4d2c 2058 2667 743b 2074 6f20 4465 6369 M, X> to Deci\n-000305c0: 7369 6f6e 5472 6565 266c 743b 4c2c 2059 sionTree<L, Y\n-000305d0: 2667 743b 2e3c 2f64 6976 3e3c 6469 7620 >.
Definition \n-00030600: 4465 6369 7369 6f6e 5472 6565 2d69 6e6c DecisionTree-inl\n-00030610: 2e68 3a36 3731 3c2f 6469 763e 3c2f 6469 .h:671
..
\n-000308b0: 7479 7065 6e61 6d65 204e 6f64 653a 3a50 typename Node::P\n-000308c0: 7472 204e 6f64 6550 7472 3c2f 6469 763e tr NodePtr
\n-000308d0: 3c64 6976 2063 6c61 7373 3d22 7474 646f
-------------\n-000308f0: 2d2d 2d2d 2d2d 2d2d e280 9420 4e6f 6465 --------... Node\n-00030900: 2062 6173 6520 636c 6173 7320 2d2d 2d2d base class ----\n-00030910: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-00030920: 2d2d 2d2d e280 943c 2f64 6976 3e3c 6469 ----...
\n-00030940: 3c62 3e44 6566 696e 6974 696f 6e3c 2f62 Definition DecisionTree.h\n-00030960: 3a31 3433 3c2f 6469 763e 3c2f 6469 763e :143
\n-00030970: 0a3c 6469 7620 636c 6173 733d 2274 7463 ..
gt\n-00030cd0: 7361 6d3a 3a44 6563 6973 696f 6e54 7265 sam::DecisionTre\n-00030ce0: 653a 3a76 6973 6974 3c2f 613e 3c2f 6469 e::visit
void visit\n-00030d10: 2846 756e 6320 6629 2063 6f6e 7374 3c2f (Func f) const
Visit all\n-00030d40: 206c 6561 7665 7320 696e 2064 6570 7468 leaves in depth\n-00030d50: 2d66 6972 7374 2066 6173 6869 6f6e 2e3c -first fashion.<\n-00030d60: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
Defin\n-00030d80: 6974 696f 6e3c 2f62 3e20 4465 6369 7369 ition Decisi\n-00030d90: 6f6e 5472 6565 2d69 6e6c 2e68 3a37 3336 onTree-inl.h:736\n-00030da0: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.
void v\n-00030e80: 6973 6974 4c65 6166 2846 756e 6320 6629 isitLeaf(Func f)\n-00030e90: 2063 6f6e 7374 3c2f 6469 763e 3c64 6976 const
V\n-00030eb0: 6973 6974 2061 6c6c 206c 6561 7665 7320 isit all leaves \n-00030ec0: 696e 2064 6570 7468 2d66 6972 7374 2066 in depth-first f\n-00030ed0: 6173 6869 6f6e 2e3c 2f64 6976 3e3c 6469 ashion.
\n-00030ef0: 3c62 3e44 6566 696e 6974 696f 6e3c 2f62 Definition DecisionTree-i\n-00030f10: 6e6c 2e68 3a37 3733 3c2f 6469 763e 3c2f nl.h:773
.
gtsam::Dec\n-00030fc0: 6973 696f 6e54 7265 653a 3a55 6e61 7279 isionTree::Unary\n-00030fd0: 3c2f 613e 3c2f 6469 763e 3c64 6976 2063
st\n-00030ff0: 643a 3a66 756e 6374 696f 6e26 6c74 3b20 d::function< \n-00031000: 5928 636f 6e73 7420 5920 2661 6d70 3b29 Y(const Y &)\n-00031010: 2667 743b 2055 6e61 7279 3c2f 6469 763e > Unary
\n-00031020: 3c64 6976 2063 6c61 7373 3d22 7474 646f
Handy typedef\n-00031040: 7320 666f 7220 756e 6172 7920 616e 6420 s for unary and \n-00031050: 6269 6e61 7279 2066 756e 6374 696f 6e20 binary function \n-00031060: 7479 7065 732e 3c2f 6469 763e 3c64 6976 types.
<\n-00031080: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition
\n-00031090: 2044 6563 6973 696f 6e54 7265 652e 683a DecisionTree.h:\n-000310a0: 3734 3c2f 6469 763e 3c2f 6469 763e 0a3c 74
.<\n-000310b0: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-000310c0: 6964 3d22 6161 3032 3739 365f 6874 6d6c id=\"aa02796_html\n-000310d0: 5f61 3733 6361 3535 3833 6163 3264 6262 _a73ca5583ac2dbb\n-000310e0: 3236 6163 6366 6335 3464 6536 3961 3963 26accfc54de69a9c\n-000310f0: 3061 223e 3c64 6976 2063 6c61 7373 3d22 0a\">
\n-00031140: 6774 7361 6d3a 3a44 6563 6973 696f 6e54 gtsam::DecisionT\n-00031150: 7265 653a 3a66 6f6c 643c 2f61 3e3c 2f64 ree::fold
X fold(Fu\n-00031180: 6e63 2066 2c20 5820 7830 2920 636f 6e73 nc f, X x0) cons\n-00031190: 743c 2f64 6976 3e3c 6469 7620 636c 6173 t
Fold a\n-000311b0: 2062 696e 6172 7920 6675 6e63 7469 6f6e binary function\n-000311c0: 206f 7665 7220 7468 6520 7472 6565 2c20 over the tree, \n-000311d0: 7265 7475 726e 696e 6720 6163 6375 6d75 returning accumu\n-000311e0: 6c61 746f 722e 3c2f 6469 763e 3c64 6976 lator.
<\n-00031200: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition
\n-00031210: 2044 6563 6973 696f 6e54 7265 652d 696e DecisionTree-in\n-00031220: 6c2e 683a 3833 333c 2f64 6976 3e3c 2f64 l.h:833
..
\n-00031500: 3c64 6976 2063 6c61 7373 3d22 7474 646f
GTSAM-style p\n-00031520: 7269 6e74 2e3c 2f64 6976 3e3c 6469 7620 rint.
Definition \n-00031550: 4465 6369 7369 6f6e 5472 6565 2d69 6e6c DecisionTree-inl\n-00031560: 2e68 3a38 3732 3c2f 6469 763e 3c2f 6469 .h:872
.
De\n-00031640: 6369 7369 6f6e 5472 6565 2063 6f6d 6269 cisionTree combi\n-00031650: 6e65 2863 6f6e 7374 204c 2026 616d 703b ne(const L &\n-00031660: 6c61 6265 6c2c 2073 697a 655f 7420 6361 label, size_t ca\n-00031670: 7264 696e 616c 6974 792c 2063 6f6e 7374 rdinality, const\n-00031680: 2042 696e 6172 7920 2661 6d70 3b6f 7029 Binary &op)\n-00031690: 2063 6f6e 7374 3c2f 6469 763e 3c64 6976 const
c\n-000316b0: 6f6d 6269 6e65 2073 7562 7472 6565 7320 ombine subtrees \n-000316c0: 6f6e 206b 6579 2077 6974 6820 6269 6e61 on key with bina\n-000316d0: 7279 206f 7065 7261 7469 6f6e 2026 7175 ry operation &qu\n-000316e0: 6f74 3b6f 7026 7175 6f74 3b3c 2f64 6976 ot;op"
Definitio\n-00031710: 6e3c 2f62 3e20 4465 6369 7369 6f6e 5472 n DecisionTr\n-00031720: 6565 2d69 6e6c 2e68 3a39 3337 3c2f 6469 ee-inl.h:937
.
gtsam:\n-000317d0: 3a44 6563 6973 696f 6e54 7265 653a 3a76 :DecisionTree::v\n-000317e0: 6973 6974 5769 7468 3c2f 613e 3c2f 6469 isitWith
void visit\n-00031810: 5769 7468 2846 756e 6320 6629 2063 6f6e With(Func f) con\n-00031820: 7374 3c2f 6469 763e 3c64 6976 2063 6c61 st
Visit\n-00031840: 2061 6c6c 206c 6561 7665 7320 696e 2064 all leaves in d\n-00031850: 6570 7468 2d66 6972 7374 2066 6173 6869 epth-first fashi\n-00031860: 6f6e 2e3c 2f64 6976 3e3c 6469 7620 636c on.
D\n-00031880: 6566 696e 6974 696f 6e3c 2f62 3e20 4465 efinition De\n-00031890: 6369 7369 6f6e 5472 6565 2d69 6e6c 2e68 cisionTree-inl.h\n-000318a0: 3a38 3136 3c2f 6469 763e 3c2f 6469 763e :816
\n-000318b0: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
c\n-00031980: 6f6e 7374 2059 2026 616d 703b 206f 7065 onst Y & ope\n-00031990: 7261 746f 7228 2928 636f 6e73 7420 4173 rator()(const As\n-000319a0: 7369 676e 6d65 6e74 266c 743b 204c 2026 signment< L &\n-000319b0: 6774 3b20 2661 6d70 3b78 2920 636f 6e73 gt; &x) cons\n-000319c0: 743c 2f64 6976 3e3c 6469 7620 636c 6173 t
evalua\n-000319e0: 7465 3c2f 6469 763e 3c64 6976 2063 6c61 te
De\n-00031a00: 6669 6e69 7469 6f6e 3c2f 623e 2044 6563 finition Dec\n-00031a10: 6973 696f 6e54 7265 652d 696e 6c2e 683a isionTree-inl.h:\n-00031a20: 3838 343c 2f64 6976 3e3c 2f64 6976 3e0a 884
.\n-00031a30: 3c64 6976 2063 6c61 7373 3d22 7474 6322
gtsam::Decision\n-00031ad0: 5472 6565 3a3a 646f 743c 2f61 3e3c 2f64 Tree::dot
void dot(\n-00031b00: 7374 643a 3a6f 7374 7265 616d 2026 616d std::ostream &am\n-00031b10: 703b 6f73 2c20 636f 6e73 7420 4c61 6265 p;os, const Labe\n-00031b20: 6c46 6f72 6d61 7474 6572 2026 616d 703b lFormatter &\n-00031b30: 6c61 6265 6c46 6f72 6d61 7474 6572 2c20 labelFormatter, \n-00031b40: 636f 6e73 7420 5661 6c75 6546 6f72 6d61 const ValueForma\n-00031b50: 7474 6572 2026 616d 703b 7661 6c75 6546 tter &valueF\n-00031b60: 6f72 6d61 7474 6572 2c20 626f 6f6c 2073 ormatter, bool s\n-00031b70: 686f 775a 6572 6f3d 7472 7565 2920 636f howZero=true) co\n-00031b80: 6e73 743c 2f64 6976 3e3c 6469 7620 636c nst
outp\n-00031ba0: 7574 2074 6f20 6772 6170 6876 697a 2066 ut to graphviz f\n-00031bb0: 6f72 6d61 742c 2073 7472 6561 6d20 7665 ormat, stream ve\n-00031bc0: 7273 696f 6e3c 2f64 6976 3e3c 6469 7620 rsion
Definition \n-00031bf0: 4465 6369 7369 6f6e 5472 6565 2d69 6e6c DecisionTree-inl\n-00031c00: 2e68 3a39 3439 3c2f 6469 763e 3c2f 6469 .h:949
.<\n-00031d50: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition\n-00031d60: 2044 6563 6973 696f 6e54 7265 652e 683a DecisionTree.h:\n-00031d70: 3339 393c 2f64 6976 3e3c 2f64 6976 3e0a 399
.\n-00031d80: 3c64 6976 2063 6c61 7373 3d22 7474 6322
bo\n-00031e50: 6f6c 206f 7065 7261 746f 723d 3d28 636f ol operator==(co\n-00031e60: 6e73 7420 4465 6369 7369 6f6e 5472 6565 nst DecisionTree\n-00031e70: 2026 616d 703b 7129 2063 6f6e 7374 3c2f &q) const
equality<\n-00031ea0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
Defin\n-00031ec0: 6974 696f 6e3c 2f62 3e20 4465 6369 7369 ition Decisi\n-00031ed0: 6f6e 5472 6565 2d69 6e6c 2e68 3a38 3739 onTree-inl.h:879\n-00031ee0: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.
gt\n-00031f80: 7361 6d3a 3a44 6563 6973 696f 6e54 7265 sam::DecisionTre\n-00031f90: 653a 3a4c 6162 656c 433c 2f61 3e3c 2f64 e::LabelC
std::pair\n-00031fc0: 266c 743b 204c 2c20 7369 7a65 5f74 2026 < L, size_t &\n-00031fd0: 6774 3b20 4c61 6265 6c43 3c2f 6469 763e gt; LabelC
\n-00031fe0: 3c64 6976 2063 6c61 7373 3d22 7474 646f
A label annot\n-00032000: 6174 6564 2077 6974 6820 6361 7264 696e ated with cardin\n-00032010: 616c 6974 792e 3c2f 6469 763e 3c64 6976 ality.
<\n-00032030: 623e 4465 6669 6e69 7469 6f6e 3c2f 623e b>Definition\n-00032040: 2044 6563 6973 696f 6e54 7265 652e 683a DecisionTree.h:\n-00032050: 3739 3c2f 6469 763e 3c2f 6469 763e 0a3c 79
.<\n-00032060: 6469 7620 636c 6173 733d 2274 7463 2220 div class=\"ttc\" \n-00032070: 6964 3d22 6161 3032 3739 365f 6874 6d6c id=\"aa02796_html\n-00032080: 5f61 6538 3065 3635 6139 3066 6539 6163 _ae80e65a90fe9ac\n-00032090: 3430 6235 6335 6134 6430 3764 6662 6264 40b5c5a4d07dfbbd\n-000320a0: 6137 223e 3c64 6976 2063 6c61 7373 3d22 a7\">
\n-000321d0: 0a3c 6469 7620 636c 6173 733d 2274 7463 .
DecisionTree()<\n-000322b0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
Default \n-000322d0: 636f 6e73 7472 7563 746f 7220 2866 6f72 constructor (for\n-000322e0: 2073 6572 6961 6c69 7a61 7469 6f6e 293c serialization)<\n-000322f0: 2f64 6976 3e3c 6469 7620 636c 6173 733d /div>
Defin\n-00032310: 6974 696f 6e3c 2f62 3e20 4465 6369 7369 ition Decisi\n-00032320: 6f6e 5472 6565 2d69 6e6c 2e68 3a34 3632 onTree-inl.h:462\n-00032330: 3c2f 6469 763e 3c2f 6469 763e 0a3c 6469
.\n-00032360: 3c64 6976 2063 6c61 7373 3d22 7474 6e61 \n-000323c0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-000323d0: 2d2d 2d2d 2de2 8094 204e 6f64 6520 6261 -----... Node ba\n-000323e0: 7365 2063 6c61 7373 202d 2d2d 2d2d 2d2d se class -------\n-000323f0: 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d 2d2d ----------------\n-00032400: 2de2 8094 3c2f 6469 763e 3c64 6976 2063 -...
\n-00032420: 4465 6669 6e69 7469 6f6e 3c2f 623e 2044 Definition D\n-00032430: 6563 6973 696f 6e54 7265 652e 683a 3836 ecisionTree.h:86\n-00032440: 3c2f 6469 763e 3c2f 6469 763e 0a3c 2f64
.
...
.<\n+00000640: 7461 626c 6520 6365 6c6c 7370 6163 696e table cellspacin\n+00000650: 673d 2230 2220 6365 6c6c 7061 6464 696e g=\"0\" cellpaddin\n+00000660: 673d 2230 223e 0a20 3c74 626f 6479 3e0a g=\"0\">. .\n+00000670: 203c 7472 2069 643d 2270 726f 6a65 6374 . . \n+000006a0: 2020 3c64 6976 2069 643d 2270 726f 6a65
gtsam 4.2.\n+000006e0: 303c 2f73 7061 6e3e 0a20 2020 3c2f 6469 0. .
gts\n+00000710: 616d 3c2f 6469 763e 0a20 203c 2f74 643e am
. \n+00000720: 0a20 3c2f 7472 3e0a 203c 2f74 626f 6479 . . .....<\n+00000780: 7363 7269 7074 2074 7970 653d 2274 6578 script type=\"tex\n+00000790: 742f 6a61 7661 7363 7269 7074 223e 0a2f t/javascript\">./\n+000007a0: 2a20 406c 6963 656e 7365 206d 6167 6e65 * @license magne\n+000007b0: 743a 3f78 743d 7572 6e3a 6274 6968 3a64 t:?xt=urn:btih:d\n+000007c0: 3364 3961 3961 3635 3935 3532 3166 3936 3d9a9a6595521f96\n+000007d0: 3636 6135 6539 3463 6338 3330 6461 6238 66a5e94cc830dab8\n+000007e0: 3362 3635 3639 3926 616d 703b 646e 3d65 3b65699&dn=e\n+000007f0: 7870 6174 2e74 7874 204d 4954 202a 2f0a xpat.txt MIT */.\n+00000800: 7661 7220 7365 6172 6368 426f 7820 3d20 var searchBox = \n+00000810: 6e65 7720 5365 6172 6368 426f 7828 2273 new SearchBox(\"s\n+00000820: 6561 7263 6842 6f78 222c 2022 7365 6172 earchBox\", \"sear\n+00000830: 6368 2f22 2c27 2e68 746d 6c27 293b 0a2f ch/\",'.html');./\n+00000840: 2a20 406c 6963 656e 7365 2d65 6e64 202a * @license-end *\n+00000850: 2f0a 3c2f 7363 7269 7074 3e0a 3c73 6372 /...../*\n+000008f0: 2040 6c69 6365 6e73 6520 6d61 676e 6574 @license magnet\n+00000900: 3a3f 7874 3d75 726e 3a62 7469 683a 6433 :?xt=urn:btih:d3\n+00000910: 6439 6139 6136 3539 3535 3231 6639 3636 d9a9a6595521f966\n+00000920: 3661 3565 3934 6363 3833 3064 6162 3833 6a5e94cc830dab83\n+00000930: 6236 3536 3939 2661 6d70 3b64 6e3d 6578 b65699&dn=ex\n+00000940: 7061 742e 7478 7420 4d49 5420 2a2f 0a24 pat.txt MIT */.$\n+00000950: 2866 756e 6374 696f 6e28 2920 7b0a 2020 (function() {. \n+00000960: 696e 6974 4d65 6e75 2827 272c 7472 7565 initMenu('',true\n+00000970: 2c66 616c 7365 2c27 7365 6172 6368 2e70 ,false,'search.p\n+00000980: 6870 272c 2753 6561 7263 6827 293b 0a20 hp','Search');. \n+00000990: 2024 2864 6f63 756d 656e 7429 2e72 6561 $(document).rea\n+000009a0: 6479 2866 756e 6374 696f 6e28 2920 7b20 dy(function() { \n+000009b0: 696e 6974 5f73 6561 7263 6828 293b 207d init_search(); }\n+000009c0: 293b 0a7d 293b 0a2f 2a20 406c 6963 656e );.});./* @licen\n+000009d0: 7365 2d65 6e64 202a 2f0a 3c2f 7363 7269 se-end */..
../*\n+00000a20: 2040 6c69 6365 6e73 6520 6d61 676e 6574 @license magnet\n+00000a30: 3a3f 7874 3d75 726e 3a62 7469 683a 6433 :?xt=urn:btih:d3\n+00000a40: 6439 6139 6136 3539 3535 3231 6639 3636 d9a9a6595521f966\n+00000a50: 3661 3565 3934 6363 3833 3064 6162 3833 6a5e94cc830dab83\n+00000a60: 6236 3536 3939 2661 6d70 3b64 6e3d 6578 b65699&dn=ex\n+00000a70: 7061 742e 7478 7420 4d49 5420 2a2f 0a24 pat.txt MIT */.$\n+00000a80: 2864 6f63 756d 656e 7429 2e72 6561 6479 (document).ready\n+00000a90: 2866 756e 6374 696f 6e28 2920 7b20 696e (function() { in\n+00000aa0: 6974 5f63 6f64 6566 6f6c 6428 3029 3b20 it_codefold(0); \n+00000ab0: 7d29 3b0a 2f2a 2040 6c69 6365 6e73 652d });./* @license-\n+00000ac0: 656e 6420 2a2f 0a3c 2f73 6372 6970 743e end */.\n+00000ad0: 0a3c 2f64 6976 3e3c 212d 2d20 746f 7020 .
.
.\n+00000b20: 2020 3c64 6976 2069 643d 226e 6176 2d74
.
. .
. \n+00000b90: 203c 2f64 6976 3e0a 2020 3c64 6976 2069
.
\n+00000bf0: 0a20 203c 2f64 6976 3e0a 3c2f 6469 763e .
.
\n+00000c00: 0a3c 7363 7269 7074 2074 7970 653d 2274 .\n \n \n \n \n \n@@ -94,32 +94,44 @@\n
\n
\n
\n
\n \n
\n \n-
DiscreteDistribution.cpp File Reference
\n+Namespaces |\n+Functions
\n+
DiscreteFactorGraph.cpp File Reference
\n
\n
\n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > gtsam::EliminateForMPE (const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
 Alternate elimination function for that creates non-normalized lookup tables.
 
std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > gtsam::EliminateDiscrete (const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
 Main elimination function for DiscreteFactorGraph.
 
\n

Detailed Description

\n-
Date
December 2021
\n-
Author
Frank Dellaert
\n+
Date
Feb 14, 2011
\n+
Author
Duy-Nguyen Ta
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,34 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteDistribution.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+DiscreteFactorGraph.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::pair< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bF_\bo_\br_\bM_\bP_\bE (const\n+_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, DecisionTreeFactor:: _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n+ shared_ptr >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &frontalKeys)\n+\u00a0 Alternate elimination function for that\n+ creates non-normalized lookup tables.\n+\u00a0\n+std::pair< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be (const\n+_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, DecisionTreeFactor:: _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n+ shared_ptr >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &frontalKeys)\n+\u00a0 Main elimination function for\n+ _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- December 2021\n+ Feb 14, 2011\n Author\n+ Duy-Nguyen Ta\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bc_\bp_\bp\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00242.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00242.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteDistribution.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,42 +95,51 @@\n
\n
\n
\n \n
\n \n-
DiscreteDistribution.h File Reference
\n+Namespaces |\n+Functions
\n+
DiscreteFactor.h File Reference
\n
\n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n+\n \n

\n Classes

class  gtsam::DiscreteDistribution
 A prior probability on a set of discrete variables. More...
class  gtsam::DiscreteFactor
 Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor. More...
 
struct  gtsam::traits< DiscreteDistribution >
struct  gtsam::traits< DiscreteFactor >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Functions

std::vector< double > gtsam::expNormalize (const std::vector< double > &logProbs)
 Normalize a set of log probabilities.
 
\n

Detailed Description

\n-
Date
December 2021
\n-
Author
Frank Dellaert
\n+
Date
Feb 14, 2011
\n+
Author
Duy-Nguyen Ta
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,34 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteDistribution.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+DiscreteFactor.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n-\u00a0 A prior probability on a set of discrete variables. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Base class for discrete probabilistic factors The most general one is\n+ the derived _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::vector< double >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be (const std::vector< double >\n+ &logProbs)\n+\u00a0 Normalize a set of log probabilities.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- December 2021\n+ Feb 14, 2011\n Author\n+ Duy-Nguyen Ta\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00242.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00242.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00242 = [\n- [\"gtsam::traits< DiscreteDistribution >\", \"a02844.html\", null]\n+ [\"gtsam::traits< DiscreteFactor >\", \"a02856.html\", null],\n+ [\"expNormalize\", \"a00242.html#ae1c1177c8725296b34601409322400ea\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00242_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00242_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteDistribution.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,105 +98,143 @@\n
No Matches
\n
\n
\n
\n
\n \n
\n-
DiscreteDistribution.h
\n+
DiscreteFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-
21
\n-
22#include <string>
\n-
23#include <vector>
\n+
19#pragma once
\n+
20
\n+\n+\n+
23#include <gtsam/base/Testable.h>
\n
24
\n-
25namespace gtsam {
\n-
26
\n-
\n-
33class GTSAM_EXPORT DiscreteDistribution : public DiscreteConditional {
\n-
34 public:
\n-\n-
36
\n+
25#include <string>
\n+
26namespace gtsam {
\n+
27
\n+
28class DecisionTreeFactor;
\n+
29class DiscreteConditional;
\n+
30class HybridValues;
\n+
31
\n+
\n+
38class GTSAM_EXPORT DiscreteFactor: public Factor {
\n
39
\n-\n-
42
\n-
\n-\n-
45 : Base(f.size(), f) {}
\n-
\n+
40public:
\n+
41
\n+
42 // typedefs needed to play nice with gtsam
\n+\n+
44 typedef boost::shared_ptr<DiscreteFactor> shared_ptr;
\n+
45 typedef Factor Base;
\n
46
\n-
52 explicit DiscreteDistribution(const Signature& s) : Base(s) {}
\n+\n+
48
\n+
49public:
\n+
50
\n
53
\n-
\n-
60 DiscreteDistribution(const DiscreteKey& key, const std::vector<double>& spec)
\n-
61 : DiscreteDistribution(Signature(key, {}, Signature::Table{spec})) {}
\n-
\n-
62
\n-
\n-
69 DiscreteDistribution(const DiscreteKey& key, const std::string& spec)
\n-
70 : DiscreteDistribution(Signature(key, {}, spec)) {}
\n-
\n-
71
\n-
75
\n-
77 void print(
\n-
78 const std::string& s = "Discrete Prior: ",
\n-
79 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n-
80
\n-
84
\n-
86 double operator()(size_t value) const;
\n-
87
\n-
89 // TODO(dellaert): does not play well with wrapper!
\n-
90 // using Base::operator();
\n-
91
\n-
93 std::vector<double> pmf() const;
\n-
94
\n-
96#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
99 size_t GTSAM_DEPRECATED solve() const { return Base::solve({}); }
\n-
101#endif
\n-
102};
\n-
\n-
103// DiscreteDistribution
\n-
104
\n-
105// traits
\n-
106template <>
\n-
107struct traits<DiscreteDistribution> : public Testable<DiscreteDistribution> {};
\n-
108
\n-
109} // namespace gtsam
\n-\n-
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n+\n+
56
\n+
59 template<typename CONTAINER>
\n+
60 DiscreteFactor(const CONTAINER& keys) : Base(keys) {}
\n+
61
\n+
\n+
63 virtual ~DiscreteFactor() {
\n+
64 }
\n+
\n+
65
\n+
69
\n+
71 virtual bool equals(const DiscreteFactor& lf, double tol = 1e-9) const = 0;
\n+
72
\n+
\n+
74 void print(
\n+
75 const std::string& s = "DiscreteFactor\\n",
\n+
76 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n+
77 Base::print(s, formatter);
\n+
78 }
\n+
\n+
79
\n+
83
\n+
85 virtual double operator()(const DiscreteValues&) const = 0;
\n+
86
\n+
88 double error(const DiscreteValues& values) const;
\n+
89
\n+
94 double error(const HybridValues& c) const override;
\n+
95
\n+\n+
98
\n+
99 virtual DecisionTreeFactor toDecisionTreeFactor() const = 0;
\n+
100
\n+
104
\n+\n+
107
\n+
115 virtual std::string markdown(
\n+
116 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
117 const Names& names = {}) const = 0;
\n+
118
\n+
126 virtual std::string html(
\n+
127 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
128 const Names& names = {}) const = 0;
\n+
129
\n+
131};
\n+
\n+
132// DiscreteFactor
\n+
133
\n+
134// traits
\n+
135template<> struct traits<DiscreteFactor> : public Testable<DiscreteFactor> {};
\n+
136
\n+
137
\n+
154std::vector<double> expNormalize(const std::vector<double> &logProbs);
\n+
155
\n+
156
\n+
157}// namespace gtsam
\n+
Concept check for values that can be used in unit tests.
\n+\n+
The base class for all factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
std::vector< double > expNormalize(const std::vector< double > &logProbs)
Normalize a set of log probabilities.
Definition DiscreteFactor.cpp:42
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
A discrete probabilistic factor.
Definition DecisionTreeFactor.h:45
\n-
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n-
A prior probability on a set of discrete variables.
Definition DiscreteDistribution.h:33
\n-
DiscreteDistribution(const Signature &s)
Construct from a Signature.
Definition DiscreteDistribution.h:52
\n-
DiscreteDistribution(const DiscreteKey &key, const std::vector< double > &spec)
Construct from key and a vector of floats specifying the probability mass function (PMF).
Definition DiscreteDistribution.h:60
\n-
DiscreteDistribution(const DiscreteKey &key, const std::string &spec)
Construct from key and a string specifying the probability mass function (PMF).
Definition DiscreteDistribution.h:69
\n-
DiscreteDistribution()
Default constructor needed for serialization.
Definition DiscreteDistribution.h:41
\n-
DiscreteDistribution(const DecisionTreeFactor &f)
Constructor from factor.
Definition DiscreteDistribution.h:44
\n-
Signature for a discrete conditional density, used to construct conditionals.
Definition Signature.h:54
\n+
Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor.
Definition DiscreteFactor.h:38
\n+
virtual std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter, const Names &names={}) const =0
Render as html table.
\n+
Factor Base
Our base class.
Definition DiscreteFactor.h:45
\n+
void print(const std::string &s="DiscreteFactor\\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition DiscreteFactor.h:74
\n+
boost::shared_ptr< DiscreteFactor > shared_ptr
shared_ptr to this class
Definition DiscreteFactor.h:44
\n+
virtual ~DiscreteFactor()
Virtual destructor.
Definition DiscreteFactor.h:63
\n+
DiscreteValues::Names Names
Translation table from values to strings.
Definition DiscreteFactor.h:106
\n+
virtual bool equals(const DiscreteFactor &lf, double tol=1e-9) const =0
equals
\n+
DiscreteFactor This
This class.
Definition DiscreteFactor.h:43
\n+
virtual DecisionTreeFactor operator*(const DecisionTreeFactor &) const =0
Multiply in a DecisionTreeFactor and return the result as DecisionTreeFactor.
\n+
virtual double operator()(const DiscreteValues &) const =0
Find value for given assignment of values to variables.
\n+
virtual std::string markdown(const KeyFormatter &keyFormatter=DefaultKeyFormatter, const Names &names={}) const =0
Render as markdown table.
\n+
DiscreteFactor(const CONTAINER &keys)
Construct from container of keys.
Definition DiscreteFactor.h:60
\n+
DiscreteFactor()
Default constructor creates empty factor.
Definition DiscreteFactor.h:55
\n+
A map from keys to values.
Definition DiscreteValues.h:34
\n+
std::map< Key, std::vector< std::string > > Names
Translation table from values to strings.
Definition DiscreteValues.h:95
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
Definition Factor.h:68
\n+
the error.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,125 +1,196 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteDistribution.h\n+DiscreteFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-21\n-22#include \n-23#include \n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n 24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-_\b3_\b3class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn : public _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n-34 public:\n-35 using _\bB_\ba_\bs_\be = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-36\n+25#include \n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28class DecisionTreeFactor;\n+29class DiscreteConditional;\n+30class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+31\n+_\b3_\b8class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bF_\ba_\bc_\bt_\bo_\br {\n 39\n-_\b4_\b1 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn() {}\n-42\n-_\b4_\b4 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br& f)\n-45 : _\bB_\ba_\bs_\be(f.size(), f) {}\n+40public:\n+41\n+42 // typedefs needed to play nice with gtsam\n+_\b4_\b3 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+_\b4_\b4 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b4_\b5 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n 46\n-_\b5_\b2 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be& s) : _\bB_\ba_\bs_\be(s) {}\n+_\b4_\b7 using _\bV_\ba_\bl_\bu_\be_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs;\n+48\n+49public:\n+50\n 53\n-_\b6_\b0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::vector&\n-spec)\n-61 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(key, {}, Signature::Table{spec})) {}\n-62\n-_\b6_\b9 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::string& spec)\n-70 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(key, {}, spec)) {}\n-71\n-75\n-77 void print(\n-78 const std::string& s = \"Discrete Prior: \",\n-79 const KeyFormatter& formatter = DefaultKeyFormatter) const override;\n-80\n-84\n-86 double operator()(size_t value) const;\n-87\n-89 // TODO(dellaert): does not play well with wrapper!\n-90 // using Base::operator();\n-91\n-93 std::vector pmf() const;\n-94\n-96#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-99 size_t GTSAM_DEPRECATED solve() const { return Base::solve({}); }\n-101#endif\n-102};\n-103// DiscreteDistribution\n+_\b5_\b5 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+56\n+59 template\n+_\b6_\b0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER& keys) : _\bB_\ba_\bs_\be(keys) {}\n+61\n+_\b6_\b3 virtual _\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br() {\n+64 }\n+65\n+69\n+_\b7_\b1 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br& lf, double tol = 1e-9) const = 0;\n+72\n+_\b7_\b4 void _\bp_\br_\bi_\bn_\bt(\n+75 const std::string& s = \"DiscreteFactor\\n\",\n+76 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n+77 Base::print(s, formatter);\n+78 }\n+79\n+83\n+_\b8_\b5 virtual double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs&) const = 0;\n+86\n+88 double error(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n+89\n+94 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n+95\n+_\b9_\b7 virtual _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br&) const = 0;\n+98\n+99 virtual _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br toDecisionTreeFactor() const = 0;\n+100\n 104\n-105// traits\n-106template <>\n-_\b1_\b0_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+_\b1_\b0_\b6 using _\bN_\ba_\bm_\be_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs;\n+107\n+_\b1_\b1_\b5 virtual std::string _\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn(\n+116 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+117 const _\bN_\ba_\bm_\be_\bs& names = {}) const = 0;\n+118\n+_\b1_\b2_\b6 virtual std::string _\bh_\bt_\bm_\bl(\n+127 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+128 const _\bN_\ba_\bm_\be_\bs& names = {}) const = 0;\n+129\n+131};\n+132// DiscreteFactor\n+133\n+134// traits\n+_\b1_\b3_\b5template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n {};\n-108\n-109} // namespace gtsam\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n-std::pair< Key, size_t > DiscreteKey\n-Key type for discrete variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n+136\n+137\n+154std::vector _\be_\bx_\bp_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be(const std::vector &logProbs);\n+155\n+156\n+157}// namespace gtsam\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+The base class for all factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be\n+std::vector< double > expNormalize(const std::vector< double > &logProbs)\n+Normalize a set of log probabilities.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n A discrete probabilistic factor.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Discrete Conditional Density Derives from DecisionTreeFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n-A prior probability on a set of discrete variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n-DiscreteDistribution(const Signature &s)\n-Construct from a Signature.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n-DiscreteDistribution(const DiscreteKey &key, const std::vector< double > &spec)\n-Construct from key and a vector of floats specifying the probability mass\n-function (PMF).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n-DiscreteDistribution(const DiscreteKey &key, const std::string &spec)\n-Construct from key and a string specifying the probability mass function (PMF).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n-DiscreteDistribution()\n-Default constructor needed for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n-DiscreteDistribution(const DecisionTreeFactor &f)\n-Constructor from factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-Signature for a discrete conditional density, used to construct conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Base class for discrete probabilistic factors The most general one is the\n+derived DecisionTreeFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\bt_\bm_\bl\n+virtual std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter,\n+const Names &names={}) const =0\n+Render as html table.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n+Factor Base\n+Our base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"DiscreteFactor\\n\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< DiscreteFactor > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n+virtual ~DiscreteFactor()\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\ba_\bm_\be_\bs\n+DiscreteValues::Names Names\n+Translation table from values to strings.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+virtual bool equals(const DiscreteFactor &lf, double tol=1e-9) const =0\n+equals\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+DiscreteFactor This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+virtual DecisionTreeFactor operator*(const DecisionTreeFactor &) const =0\n+Multiply in a DecisionTreeFactor and return the result as DecisionTreeFactor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+virtual double operator()(const DiscreteValues &) const =0\n+Find value for given assignment of values to variables.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn\n+virtual std::string markdown(const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter, const Names &names={}) const =0\n+Render as markdown table.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n+DiscreteFactor(const CONTAINER &keys)\n+Construct from container of keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n+DiscreteFactor()\n+Default constructor creates empty factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+A map from keys to values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs\n+std::map< Key, std::vector< std::string > > Names\n+Translation table from values to strings.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+the error.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00245.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00245.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteLookupDAG.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,46 +94,37 @@\n
\n
\n
\n
\n \n
\n \n-
DiscreteLookupDAG.h File Reference
\n+
DiscreteBayesTree.cpp File Reference
\n
\n
\n \n-

Go to the source code of this file.

\n+

Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree. \n+More...

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::DiscreteLookupTable
 DiscreteLookupTable table for max-product. More...
 
class  gtsam::DiscreteLookupDAG
 A DAG made from lookup tables, as defined above. More...
 
struct  gtsam::traits< DiscreteLookupDAG >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
January, 2022
\n-
Author
Frank dellaert
\n+

Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.

\n+

DiscreteBayesTree

Author
Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteLookupDAG.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be\n-\u00a0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bT_\ba_\bb_\bl_\be table for max-product. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG\n-\u00a0 A DAG made from lookup tables, as defined above. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DiscreteBayesTree.cpp File Reference\n+Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- January, 2022\n+Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.\n+DiscreteBayesTree\n Author\n- Frank dellaert\n+ Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00248.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00248.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Signature.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Assignment.h File Reference\n \n \n \n \n \n \n \n@@ -95,60 +95,44 @@\n
\n
\n
\n \n
\n \n-
Signature.h File Reference
\n+Namespaces
\n+
Assignment.h File Reference
\n
\n
\n \n-

signatures for conditional densities \n+

An assignment from labels to a discrete value index (size_t) \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::Signature
 Signature for a discrete conditional density, used to construct conditionals. More...
class  gtsam::Assignment< L >
 An assignment from labels to value index (size_t). More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-Signature gtsam::operator| (const DiscreteKey &key, const DiscreteKey &parent)
 Helper function to create Signature objects example: Signature s = D | E;.
 
\n-Signature gtsam::operator% (const DiscreteKey &key, const std::string &parent)
 Helper function to create Signature objects example: Signature s(D % \"99/1\");.
 
\n-Signature gtsam::operator% (const DiscreteKey &key, const Signature::Table &parent)
 Helper function to create Signature objects, using table construction directly example: Signature s(D % table);.
 
\n

Detailed Description

\n-

signatures for conditional densities

\n+

An assignment from labels to a discrete value index (size_t)

\n
Author
Frank Dellaert
\n-
Date
Feb 27, 2011
\n+
Date
Feb 5, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,42 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Signature.h File Reference\n-signatures for conditional densities _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Assignment.h File Reference\n+An assignment from labels to a discrete value index (size_t) _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-\u00a0 _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be for a discrete conditional density, used to construct\n- conditionals. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\b _\bL_\b _\b>\n+\u00a0 An assignment from labels to value index (size_t). _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br|\b| (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &parent)\n-\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects example: _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s = D\n- | E;.\n-\u00a0\n-_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br%\b% (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const std::string &parent)\n-\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects example: _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s(D %\n- \"99/1\");.\n-\u00a0\n-_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br%\b% (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key, const Signature::Table\n- &parent)\n-\u00a0 Helper function to create _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be objects, using table\n- construction directly example: _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be s(D % table);.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-signatures for conditional densities\n+An assignment from labels to a discrete value index (size_t)\n Author\n Frank Dellaert\n Date\n- Feb 27, 2011\n+ Feb 5, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh\n+ * _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00248_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00248_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Signature.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Assignment.h Source File\n \n \n \n \n \n \n \n@@ -98,112 +98,110 @@\n
No Matches
\n
\n
\n
\n
\n \n
\n-
Signature.h
\n+
Assignment.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n-
20#include <string>
\n-
21#include <vector>
\n-
22#include <boost/optional.hpp>
\n-\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
\n-
54 class GTSAM_EXPORT Signature {
\n-
55
\n-
56 public:
\n-
57
\n-
59 typedef std::vector<double> Row;
\n-
60 typedef std::vector<Row> Table;
\n-
61
\n-
62 private:
\n-
63
\n-
65 DiscreteKey key_;
\n-
66
\n-
68 DiscreteKeys parents_;
\n-
69
\n-
70 // the given CPT specification string
\n-
71 boost::optional<std::string> spec_;
\n-
72
\n-
73 // the CPT as parsed, if successful
\n-
74 boost::optional<Table> table_;
\n+
20
\n+
21#include <functional>
\n+
22#include <iostream>
\n+
23#include <map>
\n+
24#include <sstream>
\n+
25#include <utility>
\n+
26#include <vector>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
36template <class L>
\n+
\n+
37class Assignment : public std::map<L, size_t> {
\n+
45 static std::string DefaultFormatter(const L& x) {
\n+
46 std::stringstream ss;
\n+
47 ss << x;
\n+
48 return ss.str();
\n+
49 }
\n+
50
\n+
51 public:
\n+
52 using std::map<L, size_t>::operator=;
\n+
53
\n+
54 // Define the implicit default constructor.
\n+
55 Assignment() = default;
\n+
56
\n+
57 // Construct from initializer list.
\n+
58 Assignment(std::initializer_list<std::pair<const L, size_t>> init)
\n+
59 : std::map<L, size_t>{init} {}
\n+
60
\n+
61 void print(const std::string& s = "Assignment: ",
\n+
62 const std::function<std::string(L)>& labelFormatter =
\n+
63 &DefaultFormatter) const {
\n+
64 std::cout << s << ": ";
\n+
65 for (const typename Assignment::value_type& keyValue : *this) {
\n+
66 std::cout << "(" << labelFormatter(keyValue.first) << ", "
\n+
67 << keyValue.second << ")";
\n+
68 }
\n+
69 std::cout << std::endl;
\n+
70 }
\n+
71
\n+
72 bool equals(const Assignment& other, double tol = 1e-9) const {
\n+
73 return (*this == other);
\n+
74 }
\n
75
\n-
76 public:
\n-
88 Signature(const DiscreteKey& key, const DiscreteKeys& parents,
\n-
89 const Table& table);
\n-
90
\n-
102 Signature(const DiscreteKey& key, const DiscreteKeys& parents,
\n-
103 const std::string& spec);
\n-
104
\n-
112 Signature(const DiscreteKey& key);
\n-
113
\n-
115 const DiscreteKey& key() const { return key_; }
\n-
116
\n-
118 const DiscreteKeys& parents() const { return parents_; }
\n-
119
\n-
121 DiscreteKeys discreteKeys() const;
\n-
122
\n-
124 KeyVector indices() const;
\n-
125
\n-
126 // the CPT as parsed, if successful
\n-
127 const boost::optional<Table>& table() const { return table_; }
\n-
128
\n-
129 // the CPT as a vector of doubles, with key's values most rapidly changing
\n-
130 std::vector<double> cpt() const;
\n-
131
\n-
133 Signature& operator,(const DiscreteKey& parent);
\n-
134
\n-
136 Signature& operator=(const std::string& spec);
\n-
137
\n-
139 Signature& operator=(const Table& table);
\n-
140
\n-
142 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n-
143 const Signature& s);
\n-
144 };
\n-
\n-
145
\n-
150 GTSAM_EXPORT Signature operator|(const DiscreteKey& key, const DiscreteKey& parent);
\n-
151
\n-
156 GTSAM_EXPORT Signature operator%(const DiscreteKey& key, const std::string& parent);
\n-
157
\n-
162 GTSAM_EXPORT Signature operator%(const DiscreteKey& key, const Signature::Table& parent);
\n-
163
\n-
164}
\n-
specialized key for discrete variables
\n+
88 template <typename Derived = Assignment<L>>
\n+
\n+
89 static std::vector<Derived> CartesianProduct(
\n+
90 const std::vector<std::pair<L, size_t>>& keys) {
\n+
91 std::vector<Derived> allPossValues;
\n+
92 Derived values;
\n+
93 typedef std::pair<L, size_t> DiscreteKey;
\n+
94 for (const DiscreteKey& key : keys)
\n+
95 values[key.first] = 0; // Initialize from 0
\n+
96 while (1) {
\n+
97 allPossValues.push_back(values);
\n+
98 size_t j = 0;
\n+
99 for (j = 0; j < keys.size(); j++) {
\n+
100 L idx = keys[j].first;
\n+
101 values[idx]++;
\n+
102 if (values[idx] < keys[j].second) break;
\n+
103 // Wrap condition
\n+
104 values[idx] = 0;
\n+
105 }
\n+
106 if (j == keys.size()) break;
\n+
107 }
\n+
108 return allPossValues;
\n+
109 }
\n+
\n+
110}; // Assignment
\n+
\n+
111
\n+
112} // namespace gtsam
\n
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
Signature operator|(const DiscreteKey &key, const DiscreteKey &parent)
Helper function to create Signature objects example: Signature s = D | E;.
Definition Signature.cpp:178
\n-
Signature operator%(const DiscreteKey &key, const string &parent)
Helper function to create Signature objects example: Signature s(D % "99/1");.
Definition Signature.cpp:183
\n-
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n-
Signature for a discrete conditional density, used to construct conditionals.
Definition Signature.h:54
\n-
std::vector< double > Row
Data type for the CPT.
Definition Signature.h:59
\n-
const DiscreteKey & key() const
the variable key
Definition Signature.h:115
\n-
const DiscreteKeys & parents() const
the parent keys
Definition Signature.h:118
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
An assignment from labels to value index (size_t).
Definition Assignment.h:37
\n+
static std::vector< Derived > CartesianProduct(const std::vector< std::pair< L, size_t > > &keys)
Get Cartesian product consisting all possible configurations.
Definition Assignment.h:89
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Signature.h\n+Assignment.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -15,119 +15,97 @@\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n-20#include \n-21#include \n-22#include \n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-_\b5_\b4 class GTSAM_EXPORT _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be {\n-55\n-56 public:\n-57\n-_\b5_\b9 typedef std::vector _\bR_\bo_\bw;\n-60 typedef std::vector Table;\n-61\n-62 private:\n-63\n-65 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by key_;\n-66\n-68 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs parents_;\n-69\n-70 // the given CPT specification string\n-71 boost::optional spec_;\n-72\n-73 // the CPT as parsed, if successful\n-74 boost::optional table_;\n+20\n+21#include \n+22#include \n+23#include \n+24#include \n+25#include \n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+36template \n+_\b3_\b7class _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt : public std::map {\n+45 static std::string DefaultFormatter(const L& x) {\n+46 std::stringstream ss;\n+47 ss << x;\n+48 return ss.str();\n+49 }\n+50\n+51 public:\n+52 using std::map::operator=;\n+53\n+54 // Define the implicit default constructor.\n+55 _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt() = default;\n+56\n+57 // Construct from initializer list.\n+58 _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt(std::initializer_list> init)\n+59 : std::map{init} {}\n+60\n+61 void print(const std::string& s = \"Assignment: \",\n+62 const std::function& labelFormatter =\n+63 &DefaultFormatter) const {\n+64 std::cout << s << \": \";\n+65 for (const typename Assignment::value_type& keyValue : *this) {\n+66 std::cout << \"(\" << labelFormatter(keyValue.first) << \", \"\n+67 << keyValue.second << \")\";\n+68 }\n+69 std::cout << std::endl;\n+70 }\n+71\n+72 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt& other, double tol = 1e-9) const {\n+73 return (*this == other);\n+74 }\n 75\n-76 public:\n-88 _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& parents,\n-89 const Table& table);\n-90\n-102 _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& parents,\n-103 const std::string& spec);\n-104\n-112 _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key);\n-113\n-_\b1_\b1_\b5 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& _\bk_\be_\by() const { return key_; }\n-116\n-_\b1_\b1_\b8 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& _\bp_\ba_\br_\be_\bn_\bt_\bs() const { return parents_; }\n-119\n-121 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs discreteKeys() const;\n-122\n-124 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br indices() const;\n-125\n-126 // the CPT as parsed, if successful\n-127 const boost::optional
& table() const { return table_; }\n-128\n-129 // the CPT as a vector of doubles, with key's values most rapidly changing\n-130 std::vector cpt() const;\n-131\n-133 Signature& operator,(const DiscreteKey& parent);\n-134\n-136 Signature& operator=(const std::string& spec);\n-137\n-139 Signature& operator=(const Table& table);\n-140\n-142 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-143 const Signature& s);\n-144 };\n-145\n-150 GTSAM_EXPORT Signature _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b|(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by&\n-parent);\n-151\n-156 GTSAM_EXPORT Signature _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b%(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::string&\n-parent);\n-157\n-162 GTSAM_EXPORT Signature _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b%(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const Signature::\n-Table& parent);\n-163\n-164}\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n-specialized key for discrete variables\n+88 template >\n+_\b8_\b9 static std::vector _\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt(\n+90 const std::vector>& keys) {\n+91 std::vector allPossValues;\n+92 Derived values;\n+93 typedef std::pair _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by;\n+94 for (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key : keys)\n+95 values[key.first] = 0; // Initialize from 0\n+96 while (1) {\n+97 allPossValues.push_back(values);\n+98 size_t j = 0;\n+99 for (j = 0; j < keys.size(); j++) {\n+100 L idx = keys[j].first;\n+101 values[idx]++;\n+102 if (values[idx] < keys[j].second) break;\n+103 // Wrap condition\n+104 values[idx] = 0;\n+105 }\n+106 if (j == keys.size()) break;\n+107 }\n+108 return allPossValues;\n+109 }\n+110}; // Assignment\n+111\n+112} // namespace gtsam\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n std::pair< Key, size_t > DiscreteKey\n Key type for discrete variables.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b|\n-Signature operator|(const DiscreteKey &key, const DiscreteKey &parent)\n-Helper function to create Signature objects example: Signature s = D | E;.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.cpp:178\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b%\n-Signature operator%(const DiscreteKey &key, const string &parent)\n-Helper function to create Signature objects example: Signature s(D % \"99/1\");.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.cpp:183\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys is a set of keys that can be assembled using the & operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-Signature for a discrete conditional density, used to construct conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bR_\bo_\bw\n-std::vector< double > Row\n-Data type for the CPT.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bk_\be_\by\n-const DiscreteKey & key() const\n-the variable key\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b:_\b:_\bp_\ba_\br_\be_\bn_\bt_\bs\n-const DiscreteKeys & parents() const\n-the parent keys\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt\n+An assignment from labels to value index (size_t).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Assignment.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b:_\b:_\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt\n+static std::vector< Derived > CartesianProduct(const std::vector< std::pair< L,\n+size_t > > &keys)\n+Get Cartesian product consisting all possible configurations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Assignment.h:89\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be_\b._\bh\n+ * _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00251.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00251.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteEliminationTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteDistribution.h File Reference\n \n \n \n \n \n \n \n@@ -96,41 +96,41 @@\n \n \n \n
\n \n-
DiscreteEliminationTree.h File Reference
\n+
DiscreteDistribution.h File Reference
\n
\n
\n \n-\n-\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::DiscreteEliminationTree
 Elimination tree for discrete factors. More...
class  gtsam::DiscreteDistribution
 A prior probability on a set of discrete variables. More...
 
struct  gtsam::traits< DiscreteDistribution >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Mar 29, 2013
\n-
Author
Frank Dellaert
\n-
\n-Richard Roberts
\n+
Date
December 2021
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteEliminationTree.h File Reference\n+DiscreteDistribution.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-\u00a0 Elimination tree for discrete factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n+\u00a0 A prior probability on a set of discrete variables. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Mar 29, 2013\n+ December 2021\n Author\n Frank Dellaert\n- Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00251_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00251_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteEliminationTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteDistribution.h Source File\n \n \n \n \n \n \n \n@@ -98,78 +98,105 @@\n
No Matches
\n
\n
\n
\n
\n \n
\n-
DiscreteEliminationTree.h
\n+
DiscreteDistribution.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n+
18#pragma once
\n+
19
\n+\n+
21
\n+
22#include <string>
\n+
23#include <vector>
\n
24
\n
25namespace gtsam {
\n
26
\n-
\n-
31 class GTSAM_EXPORT DiscreteEliminationTree :
\n-
32 public EliminationTree<DiscreteBayesNet, DiscreteFactorGraph>
\n-
33 {
\n-
34 public:
\n-\n-\n-
37 typedef boost::shared_ptr<This> shared_ptr;
\n-
38
\n-\n-
48 const VariableIndex& structure, const Ordering& order);
\n-
49
\n-\n-
56 const Ordering& order);
\n-
57
\n-
59 bool equals(const This& other, double tol = 1e-9) const;
\n-
60
\n-
61 private:
\n+
\n+
33class GTSAM_EXPORT DiscreteDistribution : public DiscreteConditional {
\n+
34 public:
\n+\n+
36
\n+
39
\n+\n+
42
\n+
\n+\n+
45 : Base(f.size(), f) {}
\n+
\n+
46
\n+
52 explicit DiscreteDistribution(const Signature& s) : Base(s) {}
\n+
53
\n+
\n+
60 DiscreteDistribution(const DiscreteKey& key, const std::vector<double>& spec)
\n+
61 : DiscreteDistribution(Signature(key, {}, Signature::Table{spec})) {}
\n+
\n
62
\n-
63 friend class ::EliminationTreeTester;
\n-
64
\n-
65 };
\n-
\n-
66
\n-
67}
\n-\n-\n-\n+
\n+
69 DiscreteDistribution(const DiscreteKey& key, const std::string& spec)
\n+
70 : DiscreteDistribution(Signature(key, {}, spec)) {}
\n+
\n+
71
\n+
75
\n+
77 void print(
\n+
78 const std::string& s = "Discrete Prior: ",
\n+
79 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n+
80
\n+
84
\n+
86 double operator()(size_t value) const;
\n+
87
\n+
89 // TODO(dellaert): does not play well with wrapper!
\n+
90 // using Base::operator();
\n+
91
\n+
93 std::vector<double> pmf() const;
\n+
94
\n+
96#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
99 size_t GTSAM_DEPRECATED solve() const { return Base::solve({}); }
\n+
101#endif
\n+
102};
\n+
\n+
103// DiscreteDistribution
\n+
104
\n+
105// traits
\n+
106template <>
\n+
107struct traits<DiscreteDistribution> : public Testable<DiscreteDistribution> {};
\n+
108
\n+
109} // namespace gtsam
\n+\n+
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
Elimination tree for discrete factors.
Definition DiscreteEliminationTree.h:33
\n-
DiscreteEliminationTree This
This class.
Definition DiscreteEliminationTree.h:36
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition DiscreteEliminationTree.h:37
\n-
EliminationTree< DiscreteBayesNet, DiscreteFactorGraph > Base
Base class.
Definition DiscreteEliminationTree.h:35
\n-
A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.
Definition DiscreteFactorGraph.h:101
\n-
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n-
Definition Ordering.h:34
\n-
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A discrete probabilistic factor.
Definition DecisionTreeFactor.h:45
\n+
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n+
A prior probability on a set of discrete variables.
Definition DiscreteDistribution.h:33
\n+
DiscreteDistribution(const Signature &s)
Construct from a Signature.
Definition DiscreteDistribution.h:52
\n+
DiscreteDistribution(const DiscreteKey &key, const std::vector< double > &spec)
Construct from key and a vector of floats specifying the probability mass function (PMF).
Definition DiscreteDistribution.h:60
\n+
DiscreteDistribution(const DiscreteKey &key, const std::string &spec)
Construct from key and a string specifying the probability mass function (PMF).
Definition DiscreteDistribution.h:69
\n+
DiscreteDistribution()
Default constructor needed for serialization.
Definition DiscreteDistribution.h:41
\n+
DiscreteDistribution(const DecisionTreeFactor &f)
Constructor from factor.
Definition DiscreteDistribution.h:44
\n+
Signature for a discrete conditional density, used to construct conditionals.
Definition Signature.h:54
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,91 +1,125 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteEliminationTree.h\n+DiscreteDistribution.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+21\n+22#include \n+23#include \n 24\n 25namespace _\bg_\bt_\bs_\ba_\bm {\n 26\n-_\b3_\b1 class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n-32 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-33 {\n+_\b3_\b3class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn : public _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n 34 public:\n-_\b3_\b5 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b,_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n-_\b3_\b6 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-_\b3_\b7 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-38\n-47 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n-48 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n-49\n-55 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n-56 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n-57\n-59 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n-60\n-61 private:\n+35 using _\bB_\ba_\bs_\be = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+36\n+39\n+_\b4_\b1 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn() {}\n+42\n+_\b4_\b4 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br& f)\n+45 : _\bB_\ba_\bs_\be(f.size(), f) {}\n+46\n+_\b5_\b2 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(const _\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be& s) : _\bB_\ba_\bs_\be(s) {}\n+53\n+_\b6_\b0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::vector&\n+spec)\n+61 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(key, {}, Signature::Table{spec})) {}\n 62\n-63 friend class ::EliminationTreeTester;\n-64\n-65 };\n-66\n-67}\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+_\b6_\b9 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::string& spec)\n+70 : _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn(_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(key, {}, spec)) {}\n+71\n+75\n+77 void print(\n+78 const std::string& s = \"Discrete Prior: \",\n+79 const KeyFormatter& formatter = DefaultKeyFormatter) const override;\n+80\n+84\n+86 double operator()(size_t value) const;\n+87\n+89 // TODO(dellaert): does not play well with wrapper!\n+90 // using Base::operator();\n+91\n+93 std::vector pmf() const;\n+94\n+96#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+99 size_t GTSAM_DEPRECATED solve() const { return Base::solve({}); }\n+101#endif\n+102};\n+103// DiscreteDistribution\n+104\n+105// traits\n+106template <>\n+_\b1_\b0_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+{};\n+108\n+109} // namespace gtsam\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n+std::pair< Key, size_t > DiscreteKey\n+Key type for discrete variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-Elimination tree for discrete factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-DiscreteEliminationTree This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n-EliminationTree< DiscreteBayesNet, DiscreteFactorGraph > Base\n-Base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-An elimination tree is a data structure used intermediately during elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-The VariableIndex class computes and stores the block column structure of a\n-factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n+A discrete probabilistic factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Discrete Conditional Density Derives from DecisionTreeFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n+A prior probability on a set of discrete variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n+DiscreteDistribution(const Signature &s)\n+Construct from a Signature.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n+DiscreteDistribution(const DiscreteKey &key, const std::vector< double > &spec)\n+Construct from key and a vector of floats specifying the probability mass\n+function (PMF).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n+DiscreteDistribution(const DiscreteKey &key, const std::string &spec)\n+Construct from key and a string specifying the probability mass function (PMF).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n+DiscreteDistribution()\n+Default constructor needed for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n+DiscreteDistribution(const DecisionTreeFactor &f)\n+Constructor from factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteDistribution.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n+Signature for a discrete conditional density, used to construct conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Signature.h:54\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00254.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00254.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactorGraph.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteValues.h File Reference\n \n \n \n \n \n \n \n@@ -94,44 +94,59 @@\n
\n \n \n \n \n
\n \n-
DiscreteFactorGraph.cpp File Reference
\n+
DiscreteValues.h File Reference
\n
\n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::DiscreteValues
 A map from keys to values. More...
 
struct  gtsam::traits< DiscreteValues >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n Functions

std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > gtsam::EliminateForMPE (const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
 Alternate elimination function for that creates non-normalized lookup tables.
 
std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > gtsam::EliminateDiscrete (const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
 Main elimination function for DiscreteFactorGraph.
 
\n+std::vector< DiscreteValuesgtsam::cartesianProduct (const DiscreteKeys &keys)
 Free version of CartesianProduct.
 
\n+string gtsam::markdown (const DiscreteValues &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DiscreteValues::Names &names={})
 Free version of markdown.
 
\n+string gtsam::html (const DiscreteValues &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DiscreteValues::Names &names={})
 Free version of html.
 
\n

Detailed Description

\n-
Date
Feb 14, 2011
\n-
Author
Duy-Nguyen Ta
\n-
\n-Frank Dellaert
\n+
Date
Dec 13, 2021
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,43 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DiscreteFactorGraph.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+DiscreteValues.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+\u00a0 A map from keys to values. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::pair< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bF_\bo_\br_\bM_\bP_\bE (const\n-_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, DecisionTreeFactor:: _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n- shared_ptr >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &frontalKeys)\n-\u00a0 Alternate elimination function for that\n- creates non-normalized lookup tables.\n-\u00a0\n-std::pair< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be (const\n-_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, DecisionTreeFactor:: _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n- shared_ptr >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &frontalKeys)\n-\u00a0 Main elimination function for\n- _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n+std::vector< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bca\bar\brt\bte\bes\bsi\bia\ban\bnP\bPr\bro\bod\bdu\buc\bct\bt (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+ &keys)\n+\u00a0 Free version of CartesianProduct.\n+\u00a0\n+ string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bma\bar\brk\bkd\bdo\bow\bwn\bn (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &values,\n+ const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+ &keyFormatter=DefaultKeyFormatter, const\n+ _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs &names={})\n+\u00a0 Free version of markdown.\n+\u00a0\n+ string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:h\bht\btm\bml\bl (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &values, const\n+ _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter=DefaultKeyFormatter,\n+ const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs &names={})\n+\u00a0 Free version of html.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Feb 14, 2011\n+ Dec 13, 2021\n Author\n- Duy-Nguyen Ta\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00254.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00254.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,6 @@\n var a00254 = [\n- [\"EliminateDiscrete\", \"a00254.html#ga6996e9c84467350b071645649231223a\", null],\n- [\"EliminateForMPE\", \"a00254.html#ga9bd0b2859a7513198a369f5de3c8cde3\", null]\n+ [\"gtsam::traits< DiscreteValues >\", \"a02904.html\", null],\n+ [\"cartesianProduct\", \"a00254.html#a55a86a4657d82f6ff048a10d058c529f\", null],\n+ [\"html\", \"a00254.html#a147114735037c2260d4810a8820e72f6\", null],\n+ [\"markdown\", \"a00254.html#a2b6707b04064df79d26d1016dfa2a013\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00257.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00257.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteConditional.h File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,45 @@\n \n \n \n \n \n
\n \n-
DiscreteFactor.cpp File Reference
\n+Classes |\n+Namespaces
\n+
DiscreteConditional.h File Reference
\n \n
\n \n-

discrete factor \n-More...

\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::DiscreteConditional
 Discrete Conditional Density Derives from DecisionTreeFactor. More...
 
struct  gtsam::traits< DiscreteConditional >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

std::vector< double > gtsam::expNormalize (const std::vector< double > &logProbs)
 Normalize a set of log probabilities.
 
\n

Detailed Description

\n-

discrete factor

\n-
Date
Feb 14, 2011
\n+
Date
Feb 14, 2011
\n
Author
Duy-Nguyen Ta
\n
\n Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DiscreteFactor.cpp File Reference\n-discrete factor _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DiscreteConditional.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+\u00a0 Discrete _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl Density Derives from _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::vector< double >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be (const std::vector< double >\n- &logProbs)\n-\u00a0 Normalize a set of log probabilities.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-discrete factor\n Date\n Feb 14, 2011\n Author\n Duy-Nguyen Ta\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00257.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00257.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00257 = [\n- [\"expNormalize\", \"a00257.html#ae1c1177c8725296b34601409322400ea\", null]\n+ [\"gtsam::traits< DiscreteConditional >\", \"a02836.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00260.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00260.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteConditional.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteValues.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,44 @@\n \n \n \n \n \n
\n \n-
DiscreteConditional.h File Reference
\n+Namespaces |\n+Functions
\n+
DiscreteValues.cpp File Reference
\n \n
\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::DiscreteConditional
 Discrete Conditional Density Derives from DecisionTreeFactor. More...
 
struct  gtsam::traits< DiscreteConditional >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+string gtsam::markdown (const DiscreteValues &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DiscreteValues::Names &names={})
 Free version of markdown.
 
\n+string gtsam::html (const DiscreteValues &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DiscreteValues::Names &names={})
 Free version of html.
 
\n

Detailed Description

\n-
Date
Feb 14, 2011
\n-
Author
Duy-Nguyen Ta
\n-
\n-Frank Dellaert
\n+
Date
January, 2022
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteConditional.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-\u00a0 Discrete _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl Density Derives from _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+DiscreteValues.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bma\bar\brk\bkd\bdo\bow\bwn\bn (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &values, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+ &keyFormatter=DefaultKeyFormatter, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs &names=\n+ {})\n+\u00a0 Free version of markdown.\n+\u00a0\n+string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:h\bht\btm\bml\bl (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &values, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+ &keyFormatter=DefaultKeyFormatter, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs &names=\n+ {})\n+\u00a0 Free version of html.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Feb 14, 2011\n+ January, 2022\n Author\n- Duy-Nguyen Ta\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00260.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00260.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00260 = [\n- [\"gtsam::traits< DiscreteConditional >\", \"a02836.html\", null]\n+ [\"html\", \"a00260.html#a147114735037c2260d4810a8820e72f6\", null],\n+ [\"markdown\", \"a00260.html#a2b6707b04064df79d26d1016dfa2a013\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00266.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00266.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,49 +94,45 @@\n \n \n \n \n \n
\n \n-
DiscreteBayesTree.h File Reference
\n+Namespaces |\n+Functions
\n+
DiscreteFactor.cpp File Reference
\n \n
\n \n-

Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree. \n+

discrete factor \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::DiscreteBayesTreeClique
 A clique in a DiscreteBayesTree. More...
 
class  gtsam::DiscreteBayesTree
 A Bayes tree representing a Discrete density. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Functions

std::vector< double > gtsam::expNormalize (const std::vector< double > &logProbs)
 Normalize a set of log probabilities.
 
\n

Detailed Description

\n-

Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.

\n-

DiscreteBayesTree

Author
Frank Dellaert
\n+

discrete factor

\n+
Date
Feb 14, 2011
\n+
Author
Duy-Nguyen Ta
\n
\n-Richard Roberts
\n+Frank Dellaert
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteBayesTree.h File Reference\n-Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-\u00a0 A clique in a _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-\u00a0 A Bayes tree representing a Discrete density. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+DiscreteFactor.cpp File Reference\n+discrete factor _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::vector< double >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be (const std::vector< double >\n+ &logProbs)\n+\u00a0 Normalize a set of log probabilities.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.\n-DiscreteBayesTree\n+discrete factor\n+ Date\n+ Feb 14, 2011\n Author\n+ Duy-Nguyen Ta\n Frank Dellaert\n- Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00266.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00266.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00266 = [\n- [\"gtsam::DiscreteBayesTreeClique\", \"a02824.html\", \"a02824\"]\n+ [\"expNormalize\", \"a00266.html#ae1c1177c8725296b34601409322400ea\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00269.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00269.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesNet.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteEliminationTree.h File Reference\n \n \n \n \n \n \n \n@@ -94,34 +94,43 @@\n \n \n \n \n \n
\n \n-
DiscreteBayesNet.cpp File Reference
\n+
DiscreteEliminationTree.h File Reference
\n
\n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::DiscreteEliminationTree
 Elimination tree for discrete factors. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Feb 15, 2011
\n-
Author
Duy-Nguyen Ta
\n+
Date
Mar 29, 2013
\n+
Author
Frank Dellaert
\n
\n-Frank Dellaert
\n+Richard Roberts
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,26 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DiscreteBayesNet.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DiscreteEliminationTree.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+\u00a0 Elimination tree for discrete factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Feb 15, 2011\n+ Mar 29, 2013\n Author\n- Duy-Nguyen Ta\n Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bc_\bp_\bp\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00272.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00272.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTreeFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteKey.h File Reference\n \n \n \n \n \n \n \n@@ -94,38 +94,62 @@\n \n \n \n \n \n
\n \n-
DecisionTreeFactor.cpp File Reference
\n+Classes |\n+Namespaces |\n+Typedefs |\n+Functions
\n+
DiscreteKey.h File Reference
\n \n
\n \n-

discrete factor \n+

specialized key for discrete variables \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::DiscreteKeys
 DiscreteKeys is a set of keys that can be assembled using the & operator. More...
 
struct  gtsam::traits< DiscreteKeys >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+

\n+Typedefs

using gtsam::DiscreteKey = std::pair< Key, size_t >
 Key type for discrete variables.
 
\n+\n+\n+\n+\n

\n+Functions

\n+DiscreteKeys gtsam::operator& (const DiscreteKey &key1, const DiscreteKey &key2)
 Create a list from two keys.
 
\n

Detailed Description

\n-

discrete factor

\n-
Date
Feb 14, 2011
\n-
Author
Duy-Nguyen Ta
\n-
\n-Frank Dellaert
\n+

specialized key for discrete variables

\n+
Author
Frank Dellaert
\n+
Date
Feb 28, 2011
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,39 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DecisionTreeFactor.cpp File Reference\n-discrete factor _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+DiscreteKey.h File Reference\n+specialized key for discrete variables _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+\u00a0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs is a set of keys that can be assembled using the &\n+ operator. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by = std::pair< _\bK_\be_\by, size_t >\n+\u00a0 Key type for discrete variables.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br&\b& (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by &key1, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n+ &key2)\n+\u00a0 Create a list from two keys.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-discrete factor\n- Date\n- Feb 14, 2011\n+specialized key for discrete variables\n Author\n- Duy-Nguyen Ta\n Frank Dellaert\n+ Date\n+ Feb 28, 2011\n * _\bg_\bt_\bs_\ba_\bm\n * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00278.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00278.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h File Reference\n \n \n \n \n \n \n \n@@ -98,71 +98,72 @@\n \n
\n \n-
Pose2.h File Reference
\n+
Pose3.h File Reference
\n
\n
\n \n-

2D Pose \n+

3D Pose \n More...

\n \n

Go to the source code of this file.

\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 Classes

class  gtsam::Pose2
 A 2D pose (Point2,Rot2) More...
class  gtsam::Pose3
 A 3D pose (R,t) : (Rot3,Point3) More...
 
struct  gtsam::Pose2::ChartAtOrigin
struct  gtsam::Pose3::ChartAtOrigin
 
struct  gtsam::traits< Pose2 >
struct  gtsam::traits< Pose3 >
 
struct  gtsam::traits< const Pose2 >
struct  gtsam::traits< const Pose3 >
 
struct  gtsam::Bearing< Pose2, T >
struct  gtsam::Bearing< Pose3, Point3 >
 
struct  gtsam::Range< Pose2, T >
struct  gtsam::Bearing< Pose3, Pose3 >
 
struct  gtsam::Range< Pose3, T >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n

\n Typedefs

\n-using gtsam::Pose2Pair = std::pair< Pose2, Pose2 >
 
\n-using gtsam::Pose2Pairs = std::vector< Pose2Pair >
 
\n+using gtsam::Pose3Pair = std::pair< Pose3, Pose3 >
 
\n+using gtsam::Pose3Pairs = std::vector< std::pair< Pose3, Pose3 > >
 
\n+typedef std::vector< Pose3gtsam::Pose3Vector
 
\n \n-\n-\n-\n-\n+\n+\n+\n+\n

\n Functions

\n-template<>
Matrix gtsam::wedge< Pose2 > (const Vector &xi)
 specialization for pose2 wedge function (generic template in Lie.h)
 
template<>
Matrix gtsam::wedge< Pose3 > (const Vector &xi)
 wedge for Pose3:
 
\n

Detailed Description

\n-

2D Pose

\n-
Author
: Frank Dellaert
\n-
\n-: Richard Roberts
\n+

3D Pose

\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,46 +1,48 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Pose2.h File Reference\n-2D Pose _\bM_\bo_\br_\be_\b._\b._\b.\n+Pose3.h File Reference\n+3D Pose _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-\u00a0 A 2D pose (Point2,_\bR_\bo_\bt_\b2) _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+\u00a0 A 3D pose (R,t) : (_\bR_\bo_\bt_\b3,Point3) _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bo_\bs_\be_\b2_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bo_\bs_\be_\b3_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bP_\bo_\bs_\be_\b2_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bP_\bo_\bs_\be_\b3_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\b _\bP_\bo_\bs_\be_\b2_\b,_\b _\bT_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\b _\bP_\bo_\bs_\be_\b3_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bo_\bs_\be_\b2_\b,_\b _\bT_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\b _\bP_\bo_\bs_\be_\b3_\b,_\b _\bP_\bo_\bs_\be_\b3_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bo_\bs_\be_\b3_\b,_\b _\bT_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\bos\bse\be2\b2P\bPa\bai\bir\br = std::pair< _\bP_\bo_\bs_\be_\b2, _\bP_\bo_\bs_\be_\b2 >\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\bos\bse\be3\b3P\bPa\bai\bir\br = std::pair< _\bP_\bo_\bs_\be_\b3, _\bP_\bo_\bs_\be_\b3 >\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\bos\bse\be3\b3P\bPa\bai\bir\brs\bs = std::vector< std::pair<\n+ _\bP_\bo_\bs_\be_\b3, _\bP_\bo_\bs_\be_\b3 > >\n \u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\bos\bse\be2\b2P\bPa\bai\bir\brs\bs = std::vector< Pose2Pair >\n+typedef std::vector< _\bP_\bo_\bs_\be_\b3 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\bos\bse\be3\b3V\bVe\bec\bct\bto\bor\br\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n template<>\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:w\bwe\bed\bdg\bge\be<\b< P\bPo\bos\bse\be2\b2 >\b> (const Vector &xi)\n-\u00a0 specialization for pose2 wedge function (generic template in _\bL_\bi_\be_\b._\bh)\n+ Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bd_\bg_\be_\b<_\b _\bP_\bo_\bs_\be_\b3_\b _\b> (const Vector &xi)\n+\u00a0 wedge for _\bP_\bo_\bs_\be_\b3:\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-2D Pose\n- Author\n- : Frank Dellaert\n- : Richard Roberts\n+3D Pose\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bs_\be_\b2_\b._\bh\n+ * _\bP_\bo_\bs_\be_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00278.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00278.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,8 +1,9 @@\n var a00278 = [\n- [\"gtsam::Pose2::ChartAtOrigin\", \"a03160.html\", null],\n- [\"gtsam::traits< Pose2 >\", \"a03164.html\", null],\n- [\"gtsam::traits< const Pose2 >\", \"a03168.html\", null],\n- [\"gtsam::Bearing< Pose2, T >\", \"a03172.html\", null],\n- [\"gtsam::Range< Pose2, T >\", \"a03176.html\", null],\n- [\"wedge< Pose2 >\", \"a00278.html#a4b78f4db0e05f3ca838ee4da6187710e\", null]\n+ [\"gtsam::Pose3::ChartAtOrigin\", \"a03184.html\", null],\n+ [\"gtsam::traits< Pose3 >\", \"a03188.html\", null],\n+ [\"gtsam::traits< const Pose3 >\", \"a03192.html\", null],\n+ [\"gtsam::Bearing< Pose3, Point3 >\", \"a03196.html\", null],\n+ [\"gtsam::Bearing< Pose3, Pose3 >\", \"a03200.html\", null],\n+ [\"gtsam::Range< Pose3, T >\", \"a03204.html\", null],\n+ [\"wedge< Pose3 >\", \"a00278.html#aefb606eb24889c0f418acf1515a2c723\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00278_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00278_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h Source File\n \n \n \n \n \n \n \n@@ -98,337 +98,334 @@\n
No Matches
\n \n \n \n \n \n
\n-
Pose2.h
\n+
Pose3.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19// \\callgraph
\n-
20
\n-
21#pragma once
\n-
22
\n-\n-\n-
25#include <gtsam/geometry/Rot2.h>
\n-
26#include <gtsam/base/Lie.h>
\n-
27#include <gtsam/dllexport.h>
\n+
17// \\callgraph
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/config.h>
\n+
21
\n+\n+\n+
24#include <gtsam/geometry/Rot3.h>
\n+
25#include <gtsam/base/Lie.h>
\n+
26
\n+
27namespace gtsam {
\n
28
\n-
29namespace gtsam {
\n-
30
\n-
\n-
36class Pose2: public LieGroup<Pose2, 3> {
\n-
37
\n+
29class Pose2;
\n+
30// forward declare
\n+
31
\n+
\n+
37class GTSAM_EXPORT Pose3: public LieGroup<Pose3, 6> {
\n
38public:
\n
39
\n-
41 typedef Rot2 Rotation;
\n-
42 typedef Point2 Translation;
\n+
41 typedef Rot3 Rotation;
\n+
42 typedef Point3 Translation;
\n
43
\n
44private:
\n
45
\n-
46 Rot2 r_;
\n-
47 Point2 t_;
\n+
46 Rot3 R_;
\n+
47 Point3 t_;
\n
48
\n
49public:
\n
50
\n
53
\n-
\n-\n-
56 r_(traits<Rot2>::Identity()), t_(traits<Point2>::Identity()) {
\n-
57 }
\n+
55 Pose3() : R_(traits<Rot3>::Identity()), t_(traits<Point3>::Identity()) {}
\n+
56
\n+
\n+
58 Pose3(const Pose3& pose) :
\n+
59 R_(pose.R_), t_(pose.t_) {
\n+
60 }
\n
\n-
58
\n-
60 Pose2(const Pose2& pose) : r_(pose.r_), t_(pose.t_) {}
\n
61
\n-
\n-
68 Pose2(double x, double y, double theta) :
\n-
69 r_(Rot2::fromAngle(theta)), t_(x, y) {
\n-
70 }
\n-
\n-
71
\n-
\n-
73 Pose2(double theta, const Point2& t) :
\n-
74 r_(Rot2::fromAngle(theta)), t_(t) {
\n-
75 }
\n-
\n-
76
\n-
78 Pose2(const Rot2& r, const Point2& t) : r_(r), t_(t) {}
\n-
79
\n-
\n-
81 Pose2(const Matrix &T) :
\n-
82 r_(Rot2::atan2(T(1, 0), T(0, 0))), t_(T(0, 2), T(1, 2)) {
\n-
83 assert(T.rows() == 3 && T.cols() == 3);
\n-
84 }
\n-
\n-
85
\n-
89
\n-
\n-
91 Pose2(const Vector& v) : Pose2() {
\n-
92 *this = Expmap(v);
\n-
93 }
\n-
\n+
\n+
63 Pose3(const Rot3& R, const Point3& t) :
\n+
64 R_(R), t_(t) {
\n+
65 }
\n+
\n+
66
\n+
68 explicit Pose3(const Pose2& pose2);
\n+
69
\n+
\n+
71 Pose3(const Matrix &T) :
\n+
72 R_(T(0, 0), T(0, 1), T(0, 2), T(1, 0), T(1, 1), T(1, 2), T(2, 0), T(2, 1),
\n+
73 T(2, 2)), t_(T(0, 3), T(1, 3), T(2, 3)) {
\n+
74 }
\n+
\n+
75
\n+
77 static Pose3 Create(const Rot3& R, const Point3& t,
\n+
78 OptionalJacobian<6, 3> HR = boost::none,
\n+
79 OptionalJacobian<6, 3> Ht = boost::none);
\n+
80
\n+
86 static boost::optional<Pose3> Align(const Point3Pairs& abPointPairs);
\n+
87
\n+
88 // Version of Pose3::Align that takes 2 matrices.
\n+
89 static boost::optional<Pose3> Align(const Matrix& a, const Matrix& b);
\n+
90
\n
94
\n-
102 static boost::optional<Pose2> Align(const Point2Pairs& abPointPairs);
\n-
103
\n-
104 // Version of Pose2::Align that takes 2 matrices.
\n-
105 static boost::optional<Pose2> Align(const Matrix& a, const Matrix& b);
\n-
106
\n-
110
\n-
112 GTSAM_EXPORT void print(const std::string& s = "") const;
\n-
113
\n-
115 GTSAM_EXPORT bool equals(const Pose2& pose, double tol = 1e-9) const;
\n-
116
\n-
120
\n-
122 inline static Pose2 Identity() { return Pose2(); }
\n-
123
\n-
125 GTSAM_EXPORT Pose2 inverse() const;
\n-
126
\n-
\n-
128 inline Pose2 operator*(const Pose2& p2) const {
\n-
129 return Pose2(r_*p2.r(), t_ + r_*p2.t());
\n-
130 }
\n-
\n-
131
\n-
135
\n-
137 GTSAM_EXPORT static Pose2 Expmap(const Vector3& xi, ChartJacobian H = boost::none);
\n-
138
\n-
140 GTSAM_EXPORT static Vector3 Logmap(const Pose2& p, ChartJacobian H = boost::none);
\n-
141
\n-
146 GTSAM_EXPORT Matrix3 AdjointMap() const;
\n-
147
\n-
\n-
149 inline Vector3 Adjoint(const Vector3& xi) const {
\n-
150 return AdjointMap()*xi;
\n-
151 }
\n-
\n-
152
\n-
156 GTSAM_EXPORT static Matrix3 adjointMap(const Vector3& v);
\n-
157
\n-
\n-
161 static Vector3 adjoint(const Vector3& xi, const Vector3& y) {
\n-
162 return adjointMap(xi) * y;
\n-
163 }
\n-
\n+
96 void print(const std::string& s = "") const;
\n+
97
\n+
99 bool equals(const Pose3& pose, double tol = 1e-9) const;
\n+
100
\n+
104
\n+
\n+
106 static Pose3 Identity() {
\n+
107 return Pose3();
\n+
108 }
\n+
\n+
109
\n+
111 Pose3 inverse() const;
\n+
112
\n+
\n+
114 Pose3 operator*(const Pose3& T) const {
\n+
115 return Pose3(R_ * T.R_, t_ + R_ * T.t_);
\n+
116 }
\n+
\n+
117
\n+
132 Pose3 interpolateRt(const Pose3& T, double t) const;
\n+
133
\n+
137
\n+
139 static Pose3 Expmap(const Vector6& xi, OptionalJacobian<6, 6> Hxi = boost::none);
\n+
140
\n+
142 static Vector6 Logmap(const Pose3& pose, OptionalJacobian<6, 6> Hpose = boost::none);
\n+
143
\n+
148 Matrix6 AdjointMap() const;
\n+
149
\n+
156 Vector6 Adjoint(const Vector6& xi_b,
\n+
157 OptionalJacobian<6, 6> H_this = boost::none,
\n+
158 OptionalJacobian<6, 6> H_xib = boost::none) const;
\n+
159
\n+
161 Vector6 AdjointTranspose(const Vector6& x,
\n+
162 OptionalJacobian<6, 6> H_this = boost::none,
\n+
163 OptionalJacobian<6, 6> H_x = boost::none) const;
\n
164
\n-
\n-
168 static Vector3 adjointTranspose(const Vector3& xi, const Vector3& y) {
\n-
169 return adjointMap(xi).transpose() * y;
\n-
170 }
\n-
\n-
171
\n-
172 // temporary fix for wrappers until case issue is resolved
\n-
173 static Matrix3 adjointMap_(const Vector3 &xi) { return adjointMap(xi);}
\n-
174 static Vector3 adjoint_(const Vector3 &xi, const Vector3 &y) { return adjoint(xi, y);}
\n-
175
\n-
\n-
183 static inline Matrix3 wedge(double vx, double vy, double w) {
\n-
184 Matrix3 m;
\n-
185 m << 0.,-w, vx,
\n-
186 w, 0., vy,
\n-
187 0., 0., 0.;
\n-
188 return m;
\n-
189 }
\n-
\n-
190
\n-
192 GTSAM_EXPORT static Matrix3 ExpmapDerivative(const Vector3& v);
\n-
193
\n-
195 GTSAM_EXPORT static Matrix3 LogmapDerivative(const Pose2& v);
\n-
196
\n-
197 // Chart at origin, depends on compile-time flag SLOW_BUT_CORRECT_EXPMAP
\n-
\n-\n-
199 GTSAM_EXPORT static Pose2 Retract(const Vector3& v, ChartJacobian H = boost::none);
\n-
200 GTSAM_EXPORT static Vector3 Local(const Pose2& r, ChartJacobian H = boost::none);
\n-
201 };
\n-
\n+
180 static Matrix6 adjointMap(const Vector6& xi);
\n+
181
\n+
185 static Vector6 adjoint(const Vector6& xi, const Vector6& y,
\n+
186 OptionalJacobian<6, 6> Hxi = boost::none,
\n+
187 OptionalJacobian<6, 6> H_y = boost::none);
\n+
188
\n+
189 // temporary fix for wrappers until case issue is resolved
\n+
190 static Matrix6 adjointMap_(const Vector6 &xi) { return adjointMap(xi);}
\n+
191 static Vector6 adjoint_(const Vector6 &xi, const Vector6 &y) { return adjoint(xi, y);}
\n+
192
\n+
196 static Vector6 adjointTranspose(const Vector6& xi, const Vector6& y,
\n+
197 OptionalJacobian<6, 6> Hxi = boost::none,
\n+
198 OptionalJacobian<6, 6> H_y = boost::none);
\n+
199
\n+
201 static Matrix6 ExpmapDerivative(const Vector6& xi);
\n
202
\n-
203 using LieGroup<Pose2, 3>::inverse; // version with derivative
\n-
204
\n-
208
\n-
210 GTSAM_EXPORT Point2 transformTo(const Point2& point,
\n-
211 OptionalJacobian<2, 3> Dpose = boost::none,
\n-
212 OptionalJacobian<2, 2> Dpoint = boost::none) const;
\n-
213
\n-
219 Matrix transformTo(const Matrix& points) const;
\n-
220
\n-
222 GTSAM_EXPORT Point2 transformFrom(const Point2& point,
\n-
223 OptionalJacobian<2, 3> Dpose = boost::none,
\n-
224 OptionalJacobian<2, 2> Dpoint = boost::none) const;
\n+
204 static Matrix6 LogmapDerivative(const Pose3& xi);
\n+
205
\n+
206 // Chart at origin, depends on compile-time flag GTSAM_POSE3_EXPMAP
\n+
\n+\n+
208 static Pose3 Retract(const Vector6& xi, ChartJacobian Hxi = boost::none);
\n+
209 static Vector6 Local(const Pose3& pose, ChartJacobian Hpose = boost::none);
\n+
210 };
\n+
\n+
211
\n+
221 static Matrix3 ComputeQforExpmapDerivative(
\n+
222 const Vector6& xi, double nearZeroThreshold = 1e-5);
\n+
223
\n+
224 using LieGroup<Pose3, 6>::inverse; // version with derivative
\n
225
\n-
231 Matrix transformFrom(const Matrix& points) const;
\n-
232
\n-
\n-
234 inline Point2 operator*(const Point2& point) const {
\n-
235 return transformFrom(point);
\n+
\n+
233 static Matrix wedge(double wx, double wy, double wz, double vx, double vy,
\n+
234 double vz) {
\n+
235 return (Matrix(4, 4) << 0., -wz, wy, vx, wz, 0., -wx, vy, -wy, wx, 0., vz, 0., 0., 0., 0.).finished();
\n
236 }
\n
\n
237
\n
241
\n-
243 inline double x() const { return t_.x(); }
\n-
244
\n-
246 inline double y() const { return t_.y(); }
\n-
247
\n-
249 inline double theta() const { return r_.theta(); }
\n-
250
\n-
252 inline const Point2& t() const { return t_; }
\n-
253
\n-
255 inline const Rot2& r() const { return r_; }
\n-
256
\n-
258 inline const Point2& translation() const { return t_; }
\n-
259
\n-
261 inline const Rot2& rotation() const { return r_; }
\n-
262
\n-
264 GTSAM_EXPORT Matrix3 matrix() const;
\n-
265
\n-
271 GTSAM_EXPORT Rot2 bearing(const Point2& point,
\n-
272 OptionalJacobian<1, 3> H1=boost::none, OptionalJacobian<1, 2> H2=boost::none) const;
\n+
249 Point3 transformFrom(const Point3& point, OptionalJacobian<3, 6> Hself =
\n+
250 boost::none, OptionalJacobian<3, 3> Hpoint = boost::none) const;
\n+
251
\n+
257 Matrix transformFrom(const Matrix& points) const;
\n+
258
\n+
\n+
260 inline Point3 operator*(const Point3& point) const {
\n+
261 return transformFrom(point);
\n+
262 }
\n+
\n+
263
\n+
271 Point3 transformTo(const Point3& point, OptionalJacobian<3, 6> Hself =
\n+
272 boost::none, OptionalJacobian<3, 3> Hpoint = boost::none) const;
\n
273
\n-
279 GTSAM_EXPORT Rot2 bearing(const Pose2& pose,
\n-
280 OptionalJacobian<1, 3> H1=boost::none, OptionalJacobian<1, 3> H2=boost::none) const;
\n-
281
\n-
287 GTSAM_EXPORT double range(const Point2& point,
\n-
288 OptionalJacobian<1, 3> H1=boost::none,
\n-
289 OptionalJacobian<1, 2> H2=boost::none) const;
\n+
279 Matrix transformTo(const Matrix& points) const;
\n+
280
\n+
284
\n+
286 const Rot3& rotation(OptionalJacobian<3, 6> Hself = boost::none) const;
\n+
287
\n+
289 const Point3& translation(OptionalJacobian<3, 6> Hself = boost::none) const;
\n
290
\n-
296 GTSAM_EXPORT double range(const Pose2& point,
\n-
297 OptionalJacobian<1, 3> H1=boost::none,
\n-
298 OptionalJacobian<1, 3> H2=boost::none) const;
\n-
299
\n-
303
\n-
309 inline static std::pair<size_t, size_t> translationInterval() { return std::make_pair(0, 1); }
\n-
310
\n-
316 static std::pair<size_t, size_t> rotationInterval() { return std::make_pair(2, 2); }
\n-
317
\n-
319 GTSAM_EXPORT
\n-
320 friend std::ostream &operator<<(std::ostream &os, const Pose2& p);
\n-
321
\n+
\n+
292 double x() const {
\n+
293 return t_.x();
\n+
294 }
\n+
\n+
295
\n+
\n+
297 double y() const {
\n+
298 return t_.y();
\n+
299 }
\n+
\n+
300
\n+
\n+
302 double z() const {
\n+
303 return t_.z();
\n+
304 }
\n+
\n+
305
\n+
307 Matrix4 matrix() const;
\n+
308
\n+
314 Pose3 transformPoseFrom(const Pose3& aTb, OptionalJacobian<6, 6> Hself = boost::none,
\n+
315 OptionalJacobian<6, 6> HaTb = boost::none) const;
\n+
316
\n+
321 Pose3 transformPoseTo(const Pose3& wTb, OptionalJacobian<6, 6> Hself = boost::none,
\n+
322 OptionalJacobian<6, 6> HwTb = boost::none) const;
\n
323
\n-
324 private:
\n-
325
\n-
326 // Serialization function
\n-
327 friend class boost::serialization::access;
\n-
328 template<class Archive>
\n-
329 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
330 ar & BOOST_SERIALIZATION_NVP(t_);
\n-
331 ar & BOOST_SERIALIZATION_NVP(r_);
\n-
332 }
\n-
333
\n-
334public:
\n-
335 // Align for Point2, which is either derived from, or is typedef, of Vector2
\n-\n-
337}; // Pose2
\n-
\n-
338
\n-
340template <>
\n-
\n-
341inline Matrix wedge<Pose2>(const Vector& xi) {
\n-
342 // NOTE(chris): Need eval() as workaround for Apple clang + avx2.
\n-
343 return Matrix(Pose2::wedge(xi(0),xi(1),xi(2))).eval();
\n-
344}
\n-
\n-
345
\n-
346#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
352GTSAM_EXPORT boost::optional<Pose2>
\n-
353GTSAM_DEPRECATED align(const Point2Pairs& pairs);
\n-
354#endif
\n-
355
\n-
356// Convenience typedef
\n-
357using Pose2Pair = std::pair<Pose2, Pose2>;
\n-
358using Pose2Pairs = std::vector<Pose2Pair>;
\n-
359
\n-
360template <>
\n-
361struct traits<Pose2> : public internal::LieGroup<Pose2> {};
\n-
362
\n-
363template <>
\n-
364struct traits<const Pose2> : public internal::LieGroup<Pose2> {};
\n-
365
\n-
366// bearing and range traits, used in RangeFactor
\n-
367template <typename T>
\n-
368struct Bearing<Pose2, T> : HasBearing<Pose2, T, Rot2> {};
\n+
329 double range(const Point3& point, OptionalJacobian<1, 6> Hself = boost::none,
\n+
330 OptionalJacobian<1, 3> Hpoint = boost::none) const;
\n+
331
\n+
337 double range(const Pose3& pose, OptionalJacobian<1, 6> Hself = boost::none,
\n+
338 OptionalJacobian<1, 6> Hpose = boost::none) const;
\n+
339
\n+
345 Unit3 bearing(const Point3& point, OptionalJacobian<2, 6> Hself = boost::none,
\n+
346 OptionalJacobian<2, 3> Hpoint = boost::none) const;
\n+
347
\n+
354 Unit3 bearing(const Pose3& pose, OptionalJacobian<2, 6> Hself = boost::none,
\n+
355 OptionalJacobian<2, 6> Hpose = boost::none) const;
\n+
356
\n+
360
\n+
\n+
366 inline static std::pair<size_t, size_t> translationInterval() {
\n+
367 return std::make_pair(3, 5);
\n+
368 }
\n+
\n
369
\n-
370template <typename T>
\n-
371struct Range<Pose2, T> : HasRange<Pose2, T, double> {};
\n-
372
\n-
373} // namespace gtsam
\n-
374
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Base class and basic functions for Lie types.
\n-
Bearing-Range product.
\n-
2D rotation
\n-
2D Point
\n+
\n+
375 static std::pair<size_t, size_t> rotationInterval() {
\n+
376 return std::make_pair(0, 2);
\n+
377 }
\n+
\n+
378
\n+
384 Pose3 slerp(double t, const Pose3& other, OptionalJacobian<6, 6> Hx = boost::none,
\n+
385 OptionalJacobian<6, 6> Hy = boost::none) const;
\n+
386
\n+
388 GTSAM_EXPORT
\n+
389 friend std::ostream &operator<<(std::ostream &os, const Pose3& p);
\n+
390
\n+
391 private:
\n+
393 friend class boost::serialization::access;
\n+
394 template<class Archive>
\n+
395 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
396 ar & BOOST_SERIALIZATION_NVP(R_);
\n+
397 ar & BOOST_SERIALIZATION_NVP(t_);
\n+
398 }
\n+
400
\n+
401#ifdef GTSAM_USE_QUATERNIONS
\n+
402 // Align if we are using Quaternions
\n+
403 public:
\n+\n+
405#endif
\n+
406};
\n+
\n+
407// Pose3 class
\n+
408
\n+
416template<>
\n+
\n+
417inline Matrix wedge<Pose3>(const Vector& xi) {
\n+
418 return Pose3::wedge(xi(0), xi(1), xi(2), xi(3), xi(4), xi(5));
\n+
419}
\n+
\n+
420
\n+
421// Convenience typedef
\n+
422using Pose3Pair = std::pair<Pose3, Pose3>;
\n+
423using Pose3Pairs = std::vector<std::pair<Pose3, Pose3> >;
\n+
424
\n+
425// For MATLAB wrapper
\n+
426typedef std::vector<Pose3> Pose3Vector;
\n+
427
\n+
428template <>
\n+
429struct traits<Pose3> : public internal::LieGroup<Pose3> {};
\n+
430
\n+
431template <>
\n+
432struct traits<const Pose3> : public internal::LieGroup<Pose3> {};
\n+
433
\n+
434// bearing and range traits, used in RangeFactor
\n+
435template <>
\n+
436struct Bearing<Pose3, Point3> : HasBearing<Pose3, Point3, Unit3> {};
\n+
437
\n+
438template<>
\n+
439struct Bearing<Pose3, Pose3> : HasBearing<Pose3, Pose3, Unit3> {};
\n+
440
\n+
441template <typename T>
\n+
442struct Range<Pose3, T> : HasRange<Pose3, T, double> {};
\n+
443
\n+
444} // namespace gtsam
\n+
Base class and basic functions for Lie types.
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
3D rotation represented as a rotation matrix or quaternion
\n+
Bearing-Range product.
\n+
3D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Matrix wedge< Pose2 >(const Vector &xi)
specialization for pose2 wedge function (generic template in Lie.h)
Definition Pose2.h:341
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
Line3 transformTo(const Pose3 &wTc, const Line3 &wL, OptionalJacobian< 4, 6 > Dpose, OptionalJacobian< 4, 4 > Dline)
Transform a line from world to camera frame.
Definition Line3.cpp:94
\n+
Matrix wedge< Pose3 >(const Vector &xi)
wedge for Pose3:
Definition Pose3.h:417
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Template to create a binary predicate.
Definition Testable.h:111
\n
Definition BearingRange.h:34
\n
Definition BearingRange.h:40
\n
Definition BearingRange.h:180
\n
Definition BearingRange.h:194
\n
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n-
GTSAM_EXPORT Rot2 bearing(const Point2 &point, OptionalJacobian< 1, 3 > H1=boost::none, OptionalJacobian< 1, 2 > H2=boost::none) const
Calculate bearing to a landmark.
Definition Pose2.cpp:245
\n-
Pose2 operator*(const Pose2 &p2) const
compose syntactic sugar
Definition Pose2.h:128
\n-
GTSAM_EXPORT void print(const std::string &s="") const
print with optional string
Definition Pose2.cpp:50
\n-
const Rot2 & rotation() const
rotation
Definition Pose2.h:261
\n-
GTSAM_EXPORT Matrix3 AdjointMap() const
Calculate Adjoint map Ad_pose is 3*3 matrix that when applied to twist xi , returns Ad_pose(xi)
Definition Pose2.cpp:126
\n-
static GTSAM_EXPORT Matrix3 LogmapDerivative(const Pose2 &v)
Derivative of Logmap.
Definition Pose2.cpp:179
\n-
double y() const
get y
Definition Pose2.h:246
\n-
static GTSAM_EXPORT Vector3 Logmap(const Pose2 &p, ChartJacobian H=boost::none)
Log map at identity - return the canonical coordinates of this rotation.
Definition Pose2.cpp:82
\n-
GTSAM_EXPORT Pose2 inverse() const
inverse
Definition Pose2.cpp:201
\n-
GTSAM_EXPORT friend std::ostream & operator<<(std::ostream &os, const Pose2 &p)
Output stream operator.
Definition Pose2.cpp:55
\n-
Point2 operator*(const Point2 &point) const
syntactic sugar for transformFrom
Definition Pose2.h:234
\n-
Pose2(double x, double y, double theta)
construct from (x,y,theta)
Definition Pose2.h:68
\n-
const Point2 & t() const
translation
Definition Pose2.h:252
\n-
static std::pair< size_t, size_t > translationInterval()
Return the start and end indices (inclusive) of the translation component of the exponential map para...
Definition Pose2.h:309
\n-
Pose2(double theta, const Point2 &t)
construct from rotation and translation
Definition Pose2.h:73
\n-
double x() const
get x
Definition Pose2.h:243
\n-
const Rot2 & r() const
rotation
Definition Pose2.h:255
\n-
Pose2(const Vector &v)
Construct from canonical coordinates (Lie algebra)
Definition Pose2.h:91
\n-
Vector3 Adjoint(const Vector3 &xi) const
Apply AdjointMap to twist xi.
Definition Pose2.h:149
\n-
static Matrix3 wedge(double vx, double vy, double w)
wedge for SE(2):
Definition Pose2.h:183
\n-
static std::pair< size_t, size_t > rotationInterval()
Return the start and end indices (inclusive) of the rotation component of the exponential map paramet...
Definition Pose2.h:316
\n-
static GTSAM_EXPORT Matrix3 adjointMap(const Vector3 &v)
Compute the [ad(w,v)] operator for SE2 as in [Kobilarov09siggraph], pg 19.
Definition Pose2.cpp:137
\n-
GTSAM_EXPORT Point2 transformTo(const Point2 &point, OptionalJacobian< 2, 3 > Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const
Return point coordinates in pose coordinate frame.
Definition Pose2.cpp:207
\n-
double theta() const
get theta
Definition Pose2.h:249
\n-
static GTSAM_EXPORT Matrix3 ExpmapDerivative(const Vector3 &v)
Derivative of Expmap.
Definition Pose2.cpp:148
\n-
Rot2 Rotation
Pose Concept requirements.
Definition Pose2.h:41
\n-
Pose2()
default constructor = origin
Definition Pose2.h:55
\n-
GTSAM_EXPORT Point2 transformFrom(const Point2 &point, OptionalJacobian< 2, 3 > Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const
Return point coordinates in global frame.
Definition Pose2.cpp:226
\n-
static Vector3 adjointTranspose(const Vector3 &xi, const Vector3 &y)
The dual version of adjoint action, acting on the dual space of the Lie-algebra vector space.
Definition Pose2.h:168
\n-
static GTSAM_EXPORT Pose2 Expmap(const Vector3 &xi, ChartJacobian H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates .
Definition Pose2.cpp:66
\n-
static Pose2 Identity()
identity for group operation
Definition Pose2.h:122
\n-
static boost::optional< Pose2 > Align(const Point2Pairs &abPointPairs)
Create Pose2 by aligning two point pairs A pose aTb is estimated between pairs (a_point,...
Definition Pose2.cpp:330
\n-
Pose2(const Rot2 &r, const Point2 &t)
construct from r,t
Definition Pose2.h:78
\n-
static Vector3 adjoint(const Vector3 &xi, const Vector3 &y)
Action of the adjointMap on a Lie-algebra vector y, with optional derivatives.
Definition Pose2.h:161
\n-
Pose2(const Pose2 &pose)
copy constructor
Definition Pose2.h:60
\n-
const Point2 & translation() const
translation
Definition Pose2.h:258
\n-
Pose2(const Matrix &T)
Constructor from 3*3 matrix.
Definition Pose2.h:81
\n-
Definition Pose2.h:198
\n-
Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.
Definition Rot2.h:36
\n-
double theta() const
return angle (RADIANS)
Definition Rot2.h:187
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
static Pose3 Identity()
identity for group operation
Definition Pose3.h:106
\n+
Pose3(const Pose3 &pose)
Copy constructor.
Definition Pose3.h:58
\n+
Pose3()
Default constructor is origin.
Definition Pose3.h:55
\n+
static Matrix wedge(double wx, double wy, double wz, double vx, double vy, double vz)
wedge for Pose3:
Definition Pose3.h:233
\n+
Pose3(const Rot3 &R, const Point3 &t)
Construct from R,t.
Definition Pose3.h:63
\n+
Pose3(const Matrix &T)
Constructor from 4*4 matrix.
Definition Pose3.h:71
\n+
double z() const
get z
Definition Pose3.h:302
\n+
static std::pair< size_t, size_t > rotationInterval()
Return the start and end indices (inclusive) of the rotation component of the exponential map paramet...
Definition Pose3.h:375
\n+
Pose3 operator*(const Pose3 &T) const
compose syntactic sugar
Definition Pose3.h:114
\n+
Rot3 Rotation
Pose Concept requirements.
Definition Pose3.h:41
\n+
double y() const
get y
Definition Pose3.h:297
\n+
static std::pair< size_t, size_t > translationInterval()
Return the start and end indices (inclusive) of the translation component of the exponential map para...
Definition Pose3.h:366
\n+
Point3 operator*(const Point3 &point) const
syntactic sugar for transformFrom
Definition Pose3.h:260
\n+
double x() const
get x
Definition Pose3.h:292
\n+
Definition Pose3.h:207
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,280 +1,305 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Pose2.h\n+Pose3.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19// \\callgraph\n-20\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-27#include \n+17// \\callgraph\n+18#pragma once\n+19\n+20#include \n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n 28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-_\b3_\b6class _\bP_\bo_\bs_\be_\b2: public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n-37\n+29class Pose2;\n+30// forward declare\n+31\n+_\b3_\b7class GTSAM_EXPORT _\bP_\bo_\bs_\be_\b3: public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n 38public:\n 39\n-_\b4_\b1 typedef _\bR_\bo_\bt_\b2 _\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn;\n-42 typedef _\bP_\bo_\bi_\bn_\bt_\b2 Translation;\n+_\b4_\b1 typedef _\bR_\bo_\bt_\b3 _\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn;\n+42 typedef _\bP_\bo_\bi_\bn_\bt_\b3 Translation;\n 43\n 44private:\n 45\n-46 _\bR_\bo_\bt_\b2 r_;\n-47 _\bP_\bo_\bi_\bn_\bt_\b2 t_;\n+46 _\bR_\bo_\bt_\b3 R_;\n+47 _\bP_\bo_\bi_\bn_\bt_\b3 t_;\n 48\n 49public:\n 50\n 53\n-_\b5_\b5 _\bP_\bo_\bs_\be_\b2() :\n-56 r_(_\bt_\br_\ba_\bi_\bt_\bs<_\bR_\bo_\bt_\b2>::_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by()), t_(_\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bo_\bi_\bn_\bt_\b2>::_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by()) {\n-57 }\n-58\n-_\b6_\b0 _\bP_\bo_\bs_\be_\b2(const _\bP_\bo_\bs_\be_\b2& pose) : r_(pose.r_), t_(pose.t_) {}\n+_\b5_\b5 _\bP_\bo_\bs_\be_\b3() : R_(_\bt_\br_\ba_\bi_\bt_\bs<_\bR_\bo_\bt_\b3>::Identity()), t_(_\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bo_\bi_\bn_\bt_\b3>::Identity()) {}\n+56\n+_\b5_\b8 _\bP_\bo_\bs_\be_\b3(const _\bP_\bo_\bs_\be_\b3& pose) :\n+59 R_(pose.R_), t_(pose.t_) {\n+60 }\n 61\n-_\b6_\b8 _\bP_\bo_\bs_\be_\b2(double _\bx, double _\by, double _\bt_\bh_\be_\bt_\ba) :\n-69 r_(_\bR_\bo_\bt_\b2::fromAngle(_\bt_\bh_\be_\bt_\ba)), t_(_\bx, _\by) {\n-70 }\n-71\n-_\b7_\b3 _\bP_\bo_\bs_\be_\b2(double _\bt_\bh_\be_\bt_\ba, const _\bP_\bo_\bi_\bn_\bt_\b2& _\bt) :\n-74 r_(_\bR_\bo_\bt_\b2::fromAngle(_\bt_\bh_\be_\bt_\ba)), t_(_\bt) {\n-75 }\n-76\n-_\b7_\b8 _\bP_\bo_\bs_\be_\b2(const _\bR_\bo_\bt_\b2& _\br, const _\bP_\bo_\bi_\bn_\bt_\b2& _\bt) : r_(_\br), t_(_\bt) {}\n-79\n-_\b8_\b1 _\bP_\bo_\bs_\be_\b2(const Matrix &T) :\n-82 r_(_\bR_\bo_\bt_\b2::atan2(T(1, 0), T(0, 0))), t_(T(0, 2), T(1, 2)) {\n-83 assert(T.rows() == 3 && T.cols() == 3);\n-84 }\n-85\n-89\n-_\b9_\b1 _\bP_\bo_\bs_\be_\b2(const Vector& v) : _\bP_\bo_\bs_\be_\b2() {\n-92 *this = _\bE_\bx_\bp_\bm_\ba_\bp(v);\n-93 }\n+_\b6_\b3 _\bP_\bo_\bs_\be_\b3(const _\bR_\bo_\bt_\b3& R, const _\bP_\bo_\bi_\bn_\bt_\b3& t) :\n+64 R_(R), t_(t) {\n+65 }\n+66\n+68 explicit _\bP_\bo_\bs_\be_\b3(const _\bP_\bo_\bs_\be_\b2& pose2);\n+69\n+_\b7_\b1 _\bP_\bo_\bs_\be_\b3(const Matrix &T) :\n+72 R_(T(0, 0), T(0, 1), T(0, 2), T(1, 0), T(1, 1), T(1, 2), T(2, 0), T(2, 1),\n+73 T(2, 2)), t_(T(0, 3), T(1, 3), T(2, 3)) {\n+74 }\n+75\n+77 static _\bP_\bo_\bs_\be_\b3 Create(const _\bR_\bo_\bt_\b3& R, const _\bP_\bo_\bi_\bn_\bt_\b3& t,\n+78 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b3_\b> HR = boost::none,\n+79 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b3_\b> Ht = boost::none);\n+80\n+86 static boost::optional Align(const Point3Pairs& abPointPairs);\n+87\n+88 // Version of Pose3::Align that takes 2 matrices.\n+89 static boost::optional Align(const Matrix& a, const Matrix& b);\n+90\n 94\n-102 static boost::optional _\bA_\bl_\bi_\bg_\bn(const Point2Pairs& abPointPairs);\n-103\n-104 // Version of Pose2::Align that takes 2 matrices.\n-105 static boost::optional _\bA_\bl_\bi_\bg_\bn(const Matrix& a, const Matrix& b);\n-106\n-110\n-112 GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n-113\n-115 GTSAM_EXPORT bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\bo_\bs_\be_\b2& pose, double tol = 1e-9) const;\n-116\n-120\n-_\b1_\b2_\b2 inline static _\bP_\bo_\bs_\be_\b2 _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() { return _\bP_\bo_\bs_\be_\b2(); }\n-123\n-125 GTSAM_EXPORT _\bP_\bo_\bs_\be_\b2 _\bi_\bn_\bv_\be_\br_\bs_\be() const;\n-126\n-_\b1_\b2_\b8 inline _\bP_\bo_\bs_\be_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bs_\be_\b2& p2) const {\n-129 return _\bP_\bo_\bs_\be_\b2(r_*p2._\br(), t_ + r_*p2._\bt());\n-130 }\n-131\n-135\n-137 GTSAM_EXPORT static _\bP_\bo_\bs_\be_\b2 _\bE_\bx_\bp_\bm_\ba_\bp(const Vector3& xi, ChartJacobian H =\n-boost::none);\n-138\n-140 GTSAM_EXPORT static Vector3 _\bL_\bo_\bg_\bm_\ba_\bp(const _\bP_\bo_\bs_\be_\b2& p, ChartJacobian H =\n+96 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n+97\n+99 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\bo_\bs_\be_\b3& pose, double tol = 1e-9) const;\n+100\n+104\n+_\b1_\b0_\b6 static _\bP_\bo_\bs_\be_\b3 _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n+107 return _\bP_\bo_\bs_\be_\b3();\n+108 }\n+109\n+111 _\bP_\bo_\bs_\be_\b3 inverse() const;\n+112\n+_\b1_\b1_\b4 _\bP_\bo_\bs_\be_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bs_\be_\b3& T) const {\n+115 return _\bP_\bo_\bs_\be_\b3(R_ * T.R_, t_ + R_ * T.t_);\n+116 }\n+117\n+132 _\bP_\bo_\bs_\be_\b3 interpolateRt(const _\bP_\bo_\bs_\be_\b3& T, double t) const;\n+133\n+137\n+139 static _\bP_\bo_\bs_\be_\b3 Expmap(const Vector6& xi, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hxi = boost::\n+none);\n+140\n+142 static Vector6 Logmap(const _\bP_\bo_\bs_\be_\b3& pose, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hpose =\n boost::none);\n-141\n-146 GTSAM_EXPORT Matrix3 _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const;\n-147\n-_\b1_\b4_\b9 inline Vector3 _\bA_\bd_\bj_\bo_\bi_\bn_\bt(const Vector3& xi) const {\n-150 return _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp()*xi;\n-151 }\n-152\n-156 GTSAM_EXPORT static Matrix3 _\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp(const Vector3& v);\n-157\n-_\b1_\b6_\b1 static Vector3 _\ba_\bd_\bj_\bo_\bi_\bn_\bt(const Vector3& xi, const Vector3& _\by) {\n-162 return _\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp(xi) * _\by;\n-163 }\n+143\n+148 Matrix6 AdjointMap() const;\n+149\n+156 Vector6 Adjoint(const Vector6& xi_b,\n+157 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H_this = boost::none,\n+158 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H_xib = boost::none) const;\n+159\n+161 Vector6 AdjointTranspose(const Vector6& x,\n+162 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H_this = boost::none,\n+163 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H_x = boost::none) const;\n 164\n-_\b1_\b6_\b8 static Vector3 _\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be(const Vector3& xi, const Vector3& _\by) {\n-169 return _\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp(xi).transpose() * _\by;\n-170 }\n-171\n-172 // temporary fix for wrappers until case issue is resolved\n-173 static Matrix3 adjointMap_(const Vector3 &xi) { return _\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp(xi);}\n-174 static Vector3 adjoint_(const Vector3 &xi, const Vector3 &_\by) { return\n-_\ba_\bd_\bj_\bo_\bi_\bn_\bt(xi, _\by);}\n-175\n-_\b1_\b8_\b3 static inline Matrix3 _\bw_\be_\bd_\bg_\be(double vx, double vy, double w) {\n-184 Matrix3 m;\n-185 m << 0.,-w, vx,\n-186 w, 0., vy,\n-187 0., 0., 0.;\n-188 return m;\n-189 }\n-190\n-192 GTSAM_EXPORT static Matrix3 _\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const Vector3& v);\n-193\n-195 GTSAM_EXPORT static Matrix3 _\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bP_\bo_\bs_\be_\b2& v);\n-196\n-197 // Chart at origin, depends on compile-time flag SLOW_BUT_CORRECT_EXPMAP\n-_\b1_\b9_\b8 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n-199 GTSAM_EXPORT static _\bP_\bo_\bs_\be_\b2 Retract(const Vector3& v, ChartJacobian H =\n-boost::none);\n-200 GTSAM_EXPORT static Vector3 Local(const _\bP_\bo_\bs_\be_\b2& _\br, ChartJacobian H = boost::\n-none);\n-201 };\n+180 static Matrix6 adjointMap(const Vector6& xi);\n+181\n+185 static Vector6 adjoint(const Vector6& xi, const Vector6& y,\n+186 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hxi = boost::none,\n+187 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H_y = boost::none);\n+188\n+189 // temporary fix for wrappers until case issue is resolved\n+190 static Matrix6 adjointMap_(const Vector6 &xi) { return adjointMap(xi);}\n+191 static Vector6 adjoint_(const Vector6 &xi, const Vector6 &y) { return\n+adjoint(xi, y);}\n+192\n+196 static Vector6 adjointTranspose(const Vector6& xi, const Vector6& y,\n+197 OptionalJacobian<6, 6> Hxi = boost::none,\n+198 OptionalJacobian<6, 6> H_y = boost::none);\n+199\n+201 static Matrix6 ExpmapDerivative(const Vector6& xi);\n 202\n-203 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bP_\bo_\bs_\be_\b2, 3>_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be; // version with derivative\n-204\n-208\n-210 GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b2 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(const _\bP_\bo_\bi_\bn_\bt_\b2& point,\n-211 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpose = boost::none,\n-212 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dpoint = boost::none) const;\n-213\n-219 Matrix _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(const Matrix& points) const;\n-220\n-222 GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b2 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm(const _\bP_\bo_\bi_\bn_\bt_\b2& point,\n-223 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpose = boost::none,\n-224 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dpoint = boost::none) const;\n+204 static Matrix6 LogmapDerivative(const Pose3& xi);\n+205\n+206 // Chart at origin, depends on compile-time flag GTSAM_POSE3_EXPMAP\n+_\b2_\b0_\b7 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n+208 static _\bP_\bo_\bs_\be_\b3 Retract(const Vector6& xi, ChartJacobian Hxi = boost::none);\n+209 static Vector6 Local(const _\bP_\bo_\bs_\be_\b3& pose, ChartJacobian Hpose = boost::none);\n+210 };\n+211\n+221 static Matrix3 ComputeQforExpmapDerivative(\n+222 const Vector6& xi, double nearZeroThreshold = 1e-5);\n+223\n+224 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bP_\bo_\bs_\be_\b3, 6>::inverse; // version with derivative\n 225\n-231 Matrix _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm(const Matrix& points) const;\n-232\n-_\b2_\b3_\b4 inline _\bP_\bo_\bi_\bn_\bt_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bi_\bn_\bt_\b2& point) const {\n-235 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm(point);\n+_\b2_\b3_\b3 static Matrix _\bw_\be_\bd_\bg_\be(double wx, double wy, double wz, double vx, double vy,\n+234 double vz) {\n+235 return (Matrix(4, 4) << 0., -wz, wy, vx, wz, 0., -wx, vy, -wy, wx, 0., vz,\n+0., 0., 0., 0.).finished();\n 236 }\n 237\n 241\n-_\b2_\b4_\b3 inline double _\bx() const { return t_.x(); }\n-244\n-_\b2_\b4_\b6 inline double _\by() const { return t_.y(); }\n-247\n-_\b2_\b4_\b9 inline double _\bt_\bh_\be_\bt_\ba() const { return r_._\bt_\bh_\be_\bt_\ba(); }\n-250\n-_\b2_\b5_\b2 inline const _\bP_\bo_\bi_\bn_\bt_\b2& _\bt() const { return t_; }\n-253\n-_\b2_\b5_\b5 inline const _\bR_\bo_\bt_\b2& _\br() const { return r_; }\n-256\n-_\b2_\b5_\b8 inline const _\bP_\bo_\bi_\bn_\bt_\b2& _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn() const { return t_; }\n-259\n-_\b2_\b6_\b1 inline const _\bR_\bo_\bt_\b2& _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn() const { return r_; }\n-262\n-264 GTSAM_EXPORT Matrix3 matrix() const;\n-265\n-271 GTSAM_EXPORT _\bR_\bo_\bt_\b2 _\bb_\be_\ba_\br_\bi_\bn_\bg(const _\bP_\bo_\bi_\bn_\bt_\b2& point,\n-272 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H2=boost::\n-none) const;\n+249 _\bP_\bo_\bi_\bn_\bt_\b3 transformFrom(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Hself =\n+250 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> Hpoint = boost::none) const;\n+251\n+257 Matrix transformFrom(const Matrix& points) const;\n+258\n+_\b2_\b6_\b0 inline _\bP_\bo_\bi_\bn_\bt_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bi_\bn_\bt_\b3& point) const {\n+261 return transformFrom(point);\n+262 }\n+263\n+271 _\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Hself =\n+272 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> Hpoint = boost::none) const;\n 273\n-279 GTSAM_EXPORT _\bR_\bo_\bt_\b2 _\bb_\be_\ba_\br_\bi_\bn_\bg(const _\bP_\bo_\bs_\be_\b2& pose,\n-280 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H2=boost::\n-none) const;\n-281\n-287 GTSAM_EXPORT double range(const _\bP_\bo_\bi_\bn_\bt_\b2& point,\n-288 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1=boost::none,\n-289 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H2=boost::none) const;\n+279 Matrix _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(const Matrix& points) const;\n+280\n+284\n+286 const _\bR_\bo_\bt_\b3& rotation(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Hself = boost::none) const;\n+287\n+289 const _\bP_\bo_\bi_\bn_\bt_\b3& translation(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Hself = boost::none)\n+const;\n 290\n-296 GTSAM_EXPORT double range(const _\bP_\bo_\bs_\be_\b2& point,\n-297 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1=boost::none,\n-298 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H2=boost::none) const;\n-299\n-303\n-_\b3_\b0_\b9 inline static std::pair _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() { return\n-std::make_pair(0, 1); }\n-310\n-_\b3_\b1_\b6 static std::pair _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() { return std::make_pair\n-(2, 2); }\n-317\n-319 GTSAM_EXPORT\n-320 friend std::ostream &_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(std::ostream &os, const _\bP_\bo_\bs_\be_\b2& p);\n-321\n+_\b2_\b9_\b2 double _\bx() const {\n+293 return t_.x();\n+294 }\n+295\n+_\b2_\b9_\b7 double _\by() const {\n+298 return t_.y();\n+299 }\n+300\n+_\b3_\b0_\b2 double _\bz() const {\n+303 return t_.z();\n+304 }\n+305\n+307 Matrix4 matrix() const;\n+308\n+314 _\bP_\bo_\bs_\be_\b3 transformPoseFrom(const _\bP_\bo_\bs_\be_\b3& aTb, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hself =\n+boost::none,\n+315 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> HaTb = boost::none) const;\n+316\n+321 _\bP_\bo_\bs_\be_\b3 transformPoseTo(const _\bP_\bo_\bs_\be_\b3& wTb, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hself =\n+boost::none,\n+322 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> HwTb = boost::none) const;\n 323\n-324 private:\n-325\n-326 // Serialization function\n-327 friend class boost::serialization::access;\n-328 template\n-329 void serialize(Archive & ar, const unsigned int /*version*/) {\n-330 ar & BOOST_SERIALIZATION_NVP(t_);\n-331 ar & BOOST_SERIALIZATION_NVP(r_);\n-332 }\n-333\n-334public:\n-335 // Align for Point2, which is either derived from, or is typedef, of\n-Vector2\n-336 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-337}; // Pose2\n-338\n-340template <>\n-_\b3_\b4_\b1inline Matrix _\bw_\be_\bd_\bg_\be_\b<_\bP_\bo_\bs_\be_\b2_\b>(const Vector& xi) {\n-342 // NOTE(chris): Need eval() as workaround for Apple clang + avx2.\n-343 return Matrix(_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bw_\be_\bd_\bg_\be(xi(0),xi(1),xi(2))).eval();\n-344}\n-345\n-346#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-352GTSAM_EXPORT boost::optional\n-353GTSAM_DEPRECATED align(const Point2Pairs& pairs);\n-354#endif\n-355\n-356// Convenience typedef\n-357using Pose2Pair = std::pair;\n-358using Pose2Pairs = std::vector;\n-359\n-360template <>\n-_\b3_\b6_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bo_\bs_\be_\b2> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-362\n-363template <>\n-_\b3_\b6_\b4struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-365\n-366// bearing and range traits, used in RangeFactor\n-367template \n-_\b3_\b6_\b8struct _\bB_\be_\ba_\br_\bi_\bn_\bg<_\bP_\bo_\bs_\be_\b2, T> : _\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg {};\n+329 double range(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Hself = boost::\n+none,\n+330 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> Hpoint = boost::none) const;\n+331\n+337 double range(const _\bP_\bo_\bs_\be_\b3& pose, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Hself = boost::none,\n+338 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Hpose = boost::none) const;\n+339\n+345 _\bU_\bn_\bi_\bt_\b3 bearing(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Hself = boost::\n+none,\n+346 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Hpoint = boost::none) const;\n+347\n+354 _\bU_\bn_\bi_\bt_\b3 bearing(const _\bP_\bo_\bs_\be_\b3& pose, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Hself = boost::\n+none,\n+355 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Hpose = boost::none) const;\n+356\n+360\n+_\b3_\b6_\b6 inline static std::pair _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() {\n+367 return std::make_pair(3, 5);\n+368 }\n 369\n-370template \n-_\b3_\b7_\b1struct _\bR_\ba_\bn_\bg_\be<_\bP_\bo_\bs_\be_\b2, T> : _\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be {};\n-372\n-373} // namespace gtsam\n-374\n+_\b3_\b7_\b5 static std::pair _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() {\n+376 return std::make_pair(0, 2);\n+377 }\n+378\n+384 _\bP_\bo_\bs_\be_\b3 slerp(double t, const _\bP_\bo_\bs_\be_\b3& other, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hx =\n+boost::none,\n+385 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hy = boost::none) const;\n+386\n+388 GTSAM_EXPORT\n+389 friend std::ostream &operator<<(std::ostream &os, const _\bP_\bo_\bs_\be_\b3& p);\n+390\n+391 private:\n+_\b3_\b9_\b3 friend class boost::serialization::access;\n+394 template\n+395 void serialize(Archive & ar, const unsigned int /*version*/) {\n+396 ar & BOOST_SERIALIZATION_NVP(R_);\n+397 ar & BOOST_SERIALIZATION_NVP(t_);\n+398 }\n+400\n+401#ifdef GTSAM_USE_QUATERNIONS\n+402 // Align if we are using Quaternions\n+403 public:\n+404 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+405#endif\n+406};\n+407// Pose3 class\n+408\n+416template<>\n+_\b4_\b1_\b7inline Matrix _\bw_\be_\bd_\bg_\be_\b<_\bP_\bo_\bs_\be_\b3_\b>(const Vector& xi) {\n+418 return _\bP_\bo_\bs_\be_\b3_\b:_\b:_\bw_\be_\bd_\bg_\be(xi(0), xi(1), xi(2), xi(3), xi(4), xi(5));\n+419}\n+420\n+421// Convenience typedef\n+422using Pose3Pair = std::pair;\n+423using Pose3Pairs = std::vector >;\n+424\n+425// For MATLAB wrapper\n+426typedef std::vector Pose3Vector;\n+427\n+428template <>\n+_\b4_\b2_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bo_\bs_\be_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+430\n+431template <>\n+_\b4_\b3_\b2struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+433\n+434// bearing and range traits, used in RangeFactor\n+435template <>\n+_\b4_\b3_\b6struct _\bB_\be_\ba_\br_\bi_\bn_\bg<_\bP_\bo_\bs_\be_\b3, _\bP_\bo_\bi_\bn_\bt_\b3> : _\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg {};\n+437\n+438template<>\n+_\b4_\b3_\b9struct _\bB_\be_\ba_\br_\bi_\bn_\bg<_\bP_\bo_\bs_\be_\b3, _\bP_\bo_\bs_\be_\b3> : _\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg {};\n+440\n+441template \n+_\b4_\b4_\b2struct _\bR_\ba_\bn_\bg_\be<_\bP_\bo_\bs_\be_\b3, T> : _\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be {};\n+443\n+444} // namespace gtsam\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n This marks a GTSAM object to require alignment.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n+_\bR_\bo_\bt_\b3_\b._\bh\n+3D rotation represented as a rotation matrix or quaternion\n _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n Bearing-Range product.\n-_\bR_\bo_\bt_\b2_\b._\bh\n-2D rotation\n-_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-2D Point\n+_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+3D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bd_\bg_\be_\b<_\b _\bP_\bo_\bs_\be_\b2_\b _\b>\n-Matrix wedge< Pose2 >(const Vector &xi)\n-specialization for pose2 wedge function (generic template in Lie.h)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:341\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo\n+Line3 transformTo(const Pose3 &wTc, const Line3 &wL, OptionalJacobian< 4, 6 >\n+Dpose, OptionalJacobian< 4, 4 > Dline)\n+Transform a line from world to camera frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.cpp:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bd_\bg_\be_\b<_\b _\bP_\bo_\bs_\be_\b3_\b _\b>\n+Matrix wedge< Pose3 >(const Vector &xi)\n+wedge for Pose3:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:417\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n A CRTP helper class that implements Lie group methods Prerequisites: methods\n operator*,...\n@@ -296,177 +321,82 @@\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:180\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:194\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n A 2D pose (Point2,Rot2)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bb_\be_\ba_\br_\bi_\bn_\bg\n-GTSAM_EXPORT Rot2 bearing(const Point2 &point, OptionalJacobian< 1, 3 >\n-H1=boost::none, OptionalJacobian< 1, 2 > H2=boost::none) const\n-Calculate bearing to a landmark.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:245\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Pose2 operator*(const Pose2 &p2) const\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static Pose3 Identity()\n+identity for group operation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+Pose3(const Pose3 &pose)\n+Copy constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+Pose3()\n+Default constructor is origin.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bw_\be_\bd_\bg_\be\n+static Matrix wedge(double wx, double wy, double wz, double vx, double vy,\n+double vz)\n+wedge for Pose3:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:233\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+Pose3(const Rot3 &R, const Point3 &t)\n+Construct from R,t.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+Pose3(const Matrix &T)\n+Constructor from 4*4 matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bz\n+double z() const\n+get z\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:302\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n+static std::pair< size_t, size_t > rotationInterval()\n+Return the start and end indices (inclusive) of the rotation component of the\n+exponential map paramet...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:375\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Pose3 operator*(const Pose3 &T) const\n compose syntactic sugar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-GTSAM_EXPORT void print(const std::string &s=\"\") const\n-print with optional string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-const Rot2 & rotation() const\n-rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:261\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n-GTSAM_EXPORT Matrix3 AdjointMap() const\n-Calculate Adjoint map Ad_pose is 3*3 matrix that when applied to twist xi ,\n-returns Ad_pose(xi)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-static GTSAM_EXPORT Matrix3 LogmapDerivative(const Pose2 &v)\n-Derivative of Logmap.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:179\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\by\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+Rot3 Rotation\n+Pose Concept requirements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\by\n double y() const\n get y\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:246\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp\n-static GTSAM_EXPORT Vector3 Logmap(const Pose2 &p, ChartJacobian H=boost::none)\n-Log map at identity - return the canonical coordinates of this rotation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n-GTSAM_EXPORT Pose2 inverse() const\n-inverse\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:201\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-GTSAM_EXPORT friend std::ostream & operator<<(std::ostream &os, const Pose2 &p)\n-Output stream operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Point2 operator*(const Point2 &point) const\n-syntactic sugar for transformFrom\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:234\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-Pose2(double x, double y, double theta)\n-construct from (x,y,theta)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt\n-const Point2 & t() const\n-translation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:252\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:297\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n static std::pair< size_t, size_t > translationInterval()\n Return the start and end indices (inclusive) of the translation component of\n the exponential map para...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:309\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-Pose2(double theta, const Point2 &t)\n-construct from rotation and translation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bx\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:366\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point3 operator*(const Point3 &point) const\n+syntactic sugar for transformFrom\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bx\n double x() const\n get x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:243\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\br\n-const Rot2 & r() const\n-rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:255\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-Pose2(const Vector &v)\n-Construct from canonical coordinates (Lie algebra)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt\n-Vector3 Adjoint(const Vector3 &xi) const\n-Apply AdjointMap to twist xi.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:149\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bw_\be_\bd_\bg_\be\n-static Matrix3 wedge(double vx, double vy, double w)\n-wedge for SE(2):\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:183\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n-static std::pair< size_t, size_t > rotationInterval()\n-Return the start and end indices (inclusive) of the rotation component of the\n-exponential map paramet...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:316\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n-static GTSAM_EXPORT Matrix3 adjointMap(const Vector3 &v)\n-Compute the [ad(w,v)] operator for SE2 as in [Kobilarov09siggraph], pg 19.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo\n-GTSAM_EXPORT Point2 transformTo(const Point2 &point, OptionalJacobian< 2, 3 >\n-Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const\n-Return point coordinates in pose coordinate frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt_\bh_\be_\bt_\ba\n-double theta() const\n-get theta\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:249\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-static GTSAM_EXPORT Matrix3 ExpmapDerivative(const Vector3 &v)\n-Derivative of Expmap.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:148\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-Rot2 Rotation\n-Pose Concept requirements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-Pose2()\n-default constructor = origin\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm\n-GTSAM_EXPORT Point2 transformFrom(const Point2 &point, OptionalJacobian< 2, 3 >\n-Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const\n-Return point coordinates in global frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:226\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be\n-static Vector3 adjointTranspose(const Vector3 &xi, const Vector3 &y)\n-The dual version of adjoint action, acting on the dual space of the Lie-algebra\n-vector space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:168\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n-static GTSAM_EXPORT Pose2 Expmap(const Vector3 &xi, ChartJacobian H=boost::\n-none)\n-Exponential map at identity - create a rotation from canonical coordinates .\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static Pose2 Identity()\n-identity for group operation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:122\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bA_\bl_\bi_\bg_\bn\n-static boost::optional< Pose2 > Align(const Point2Pairs &abPointPairs)\n-Create Pose2 by aligning two point pairs A pose aTb is estimated between pairs\n-(a_point,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:330\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-Pose2(const Rot2 &r, const Point2 &t)\n-construct from r,t\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\ba_\bd_\bj_\bo_\bi_\bn_\bt\n-static Vector3 adjoint(const Vector3 &xi, const Vector3 &y)\n-Action of the adjointMap on a Lie-algebra vector y, with optional derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-Pose2(const Pose2 &pose)\n-copy constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n-const Point2 & translation() const\n-translation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:258\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-Pose2(const Matrix &T)\n-Constructor from 3*3 matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:198\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2\n-Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bt_\bh_\be_\bt_\ba\n-double theta() const\n-return angle (RADIANS)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:187\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:292\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bs_\be_\b2_\b._\bh\n+ * _\bP_\bo_\bs_\be_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00284_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00284_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/OrientedPlane3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h Source File\n \n \n \n \n \n \n \n@@ -98,178 +98,337 @@\n
No Matches
\n
\n \n \n \n \n
\n-
OrientedPlane3.h
\n+
Pose2.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * Atlanta, Georgia 30332-0415
\n-
4 * All Rights Reserved
\n-
5 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file OrientedPlane3.h
\n-
14 * @date Dec 19, 2013
\n-
15 * @author Alex Trevor
\n-
16 * @author Frank Dellaert
\n-
17 * @author Zhaoyang Lv
\n-
18 * @brief An infinite plane, represented by a normal direction and perpendicular distance
\n-
19 */
\n+
19// \\callgraph
\n
20
\n
21#pragma once
\n
22
\n-
23#include <gtsam/geometry/Unit3.h>
\n-\n-
25#include <string>
\n-
26
\n-
27namespace gtsam {
\n+\n+\n+
25#include <gtsam/geometry/Rot2.h>
\n+
26#include <gtsam/base/Lie.h>
\n+
27#include <gtsam/dllexport.h>
\n
28
\n+
29namespace gtsam {
\n+
30
\n
\n-
36class GTSAM_EXPORT OrientedPlane3 {
\n-
37private:
\n-
38 Unit3 n_;
\n-
39 double d_;
\n-
40
\n-
41public:
\n-
42 enum {
\n-
43 dimension = 3
\n-
44 };
\n+
36class Pose2: public LieGroup<Pose2, 3> {
\n+
37
\n+
38public:
\n+
39
\n+
41 typedef Rot2 Rotation;
\n+
42 typedef Point2 Translation;
\n+
43
\n+
44private:
\n
45
\n+
46 Rot2 r_;
\n+
47 Point2 t_;
\n
48
\n-
\n-\n-
51 n_(), d_(0.0) {
\n-
52 }
\n-
\n+
49public:
\n+
50
\n
53
\n
\n-
55 OrientedPlane3(const Unit3& n, double d) :
\n-
56 n_(n), d_(d) {
\n+\n+
56 r_(traits<Rot2>::Identity()), t_(traits<Point2>::Identity()) {
\n
57 }
\n
\n
58
\n-
\n-
60 explicit OrientedPlane3(const Vector4& vec)
\n-
61 : n_(vec(0), vec(1), vec(2)), d_(vec(3)) {}
\n-
\n-
62
\n-
\n-
64 OrientedPlane3(double a, double b, double c, double d) {
\n-
65 n_ = Unit3(a, b, c);
\n-
66 d_ = d;
\n-
67 }
\n-
\n-
68
\n-
72
\n-
74 void print(const std::string& s = std::string()) const;
\n-
75
\n-
\n-
77 bool equals(const OrientedPlane3& s, double tol = 1e-9) const {
\n-
78 return (n_.equals(s.n_, tol) && (std::abs(d_ - s.d_) < tol));
\n-
79 }
\n-
\n-
80
\n-
82
\n-
89 OrientedPlane3 transform(const Pose3& xr,
\n-
90 OptionalJacobian<3, 3> Hp = boost::none,
\n-
91 OptionalJacobian<3, 6> Hr = boost::none) const;
\n-
92
\n-
100 Vector3 errorVector(const OrientedPlane3& other,
\n-
101 OptionalJacobian<3, 3> H1 = boost::none,
\n-
102 OptionalJacobian<3, 3> H2 = boost::none) const;
\n-
103
\n-
\n-
105 inline static size_t Dim() {
\n-
106 return 3;
\n-
107 }
\n-
\n-
108
\n-
\n-
110 inline size_t dim() const {
\n-
111 return 3;
\n-
112 }
\n+
60 Pose2(const Pose2& pose) : r_(pose.r_), t_(pose.t_) {}
\n+
61
\n+
\n+
68 Pose2(double x, double y, double theta) :
\n+
69 r_(Rot2::fromAngle(theta)), t_(x, y) {
\n+
70 }
\n+
\n+
71
\n+
\n+
73 Pose2(double theta, const Point2& t) :
\n+
74 r_(Rot2::fromAngle(theta)), t_(t) {
\n+
75 }
\n+
\n+
76
\n+
78 Pose2(const Rot2& r, const Point2& t) : r_(r), t_(t) {}
\n+
79
\n+
\n+
81 Pose2(const Matrix &T) :
\n+
82 r_(Rot2::atan2(T(1, 0), T(0, 0))), t_(T(0, 2), T(1, 2)) {
\n+
83 assert(T.rows() == 3 && T.cols() == 3);
\n+
84 }
\n+
\n+
85
\n+
89
\n+
\n+
91 Pose2(const Vector& v) : Pose2() {
\n+
92 *this = Expmap(v);
\n+
93 }
\n
\n+
94
\n+
102 static boost::optional<Pose2> Align(const Point2Pairs& abPointPairs);
\n+
103
\n+
104 // Version of Pose2::Align that takes 2 matrices.
\n+
105 static boost::optional<Pose2> Align(const Matrix& a, const Matrix& b);
\n+
106
\n+
110
\n+
112 GTSAM_EXPORT void print(const std::string& s = "") const;
\n
113
\n-
115 OrientedPlane3 retract(const Vector3& v,
\n-
116 OptionalJacobian<3, 3> H = boost::none) const;
\n-
117
\n-
119 Vector3 localCoordinates(const OrientedPlane3& s) const;
\n+
115 GTSAM_EXPORT bool equals(const Pose2& pose, double tol = 1e-9) const;
\n+
116
\n
120
\n-
\n-
122 inline Vector4 planeCoefficients() const {
\n-
123 Vector3 unit_vec = n_.unitVector();
\n-
124 return Vector4(unit_vec[0], unit_vec[1], unit_vec[2], d_);
\n-
125 }
\n-
\n+
122 inline static Pose2 Identity() { return Pose2(); }
\n+
123
\n+
125 GTSAM_EXPORT Pose2 inverse() const;
\n
126
\n
\n-
128 inline Unit3 normal(OptionalJacobian<2, 3> H = boost::none) const {
\n-
129 if (H) *H << I_2x2, Z_2x1;
\n-
130 return n_;
\n-
131 }
\n-
\n-
132
\n-
\n-
134 inline double distance(OptionalJacobian<1, 3> H = boost::none) const {
\n-
135 if (H) *H << 0,0,1;
\n-
136 return d_;
\n-
137 }
\n-
\n-
138};
\n-
\n-
139
\n-
\n-
140template<> struct traits<OrientedPlane3> : public internal::Manifold<
\n-
141OrientedPlane3> {
\n-
142};
\n-
\n-
143
\n-
\n-
144template<> struct traits<const OrientedPlane3> : public internal::Manifold<
\n-
145OrientedPlane3> {
\n-
146};
\n-
\n+
128 inline Pose2 operator*(const Pose2& p2) const {
\n+
129 return Pose2(r_*p2.r(), t_ + r_*p2.t());
\n+
130 }
\n+
\n+
131
\n+
135
\n+
137 GTSAM_EXPORT static Pose2 Expmap(const Vector3& xi, ChartJacobian H = boost::none);
\n+
138
\n+
140 GTSAM_EXPORT static Vector3 Logmap(const Pose2& p, ChartJacobian H = boost::none);
\n+
141
\n+
146 GTSAM_EXPORT Matrix3 AdjointMap() const;
\n
147
\n-
148} // namespace gtsam
\n-
149
\n-
3D Pose
\n+
\n+
149 inline Vector3 Adjoint(const Vector3& xi) const {
\n+
150 return AdjointMap()*xi;
\n+
151 }
\n+
\n+
152
\n+
156 GTSAM_EXPORT static Matrix3 adjointMap(const Vector3& v);
\n+
157
\n+
\n+
161 static Vector3 adjoint(const Vector3& xi, const Vector3& y) {
\n+
162 return adjointMap(xi) * y;
\n+
163 }
\n+
\n+
164
\n+
\n+
168 static Vector3 adjointTranspose(const Vector3& xi, const Vector3& y) {
\n+
169 return adjointMap(xi).transpose() * y;
\n+
170 }
\n+
\n+
171
\n+
172 // temporary fix for wrappers until case issue is resolved
\n+
173 static Matrix3 adjointMap_(const Vector3 &xi) { return adjointMap(xi);}
\n+
174 static Vector3 adjoint_(const Vector3 &xi, const Vector3 &y) { return adjoint(xi, y);}
\n+
175
\n+
\n+
183 static inline Matrix3 wedge(double vx, double vy, double w) {
\n+
184 Matrix3 m;
\n+
185 m << 0.,-w, vx,
\n+
186 w, 0., vy,
\n+
187 0., 0., 0.;
\n+
188 return m;
\n+
189 }
\n+
\n+
190
\n+
192 GTSAM_EXPORT static Matrix3 ExpmapDerivative(const Vector3& v);
\n+
193
\n+
195 GTSAM_EXPORT static Matrix3 LogmapDerivative(const Pose2& v);
\n+
196
\n+
197 // Chart at origin, depends on compile-time flag SLOW_BUT_CORRECT_EXPMAP
\n+
\n+\n+
199 GTSAM_EXPORT static Pose2 Retract(const Vector3& v, ChartJacobian H = boost::none);
\n+
200 GTSAM_EXPORT static Vector3 Local(const Pose2& r, ChartJacobian H = boost::none);
\n+
201 };
\n+
\n+
202
\n+
203 using LieGroup<Pose2, 3>::inverse; // version with derivative
\n+
204
\n+
208
\n+
210 GTSAM_EXPORT Point2 transformTo(const Point2& point,
\n+
211 OptionalJacobian<2, 3> Dpose = boost::none,
\n+
212 OptionalJacobian<2, 2> Dpoint = boost::none) const;
\n+
213
\n+
219 Matrix transformTo(const Matrix& points) const;
\n+
220
\n+
222 GTSAM_EXPORT Point2 transformFrom(const Point2& point,
\n+
223 OptionalJacobian<2, 3> Dpose = boost::none,
\n+
224 OptionalJacobian<2, 2> Dpoint = boost::none) const;
\n+
225
\n+
231 Matrix transformFrom(const Matrix& points) const;
\n+
232
\n+
\n+
234 inline Point2 operator*(const Point2& point) const {
\n+
235 return transformFrom(point);
\n+
236 }
\n+
\n+
237
\n+
241
\n+
243 inline double x() const { return t_.x(); }
\n+
244
\n+
246 inline double y() const { return t_.y(); }
\n+
247
\n+
249 inline double theta() const { return r_.theta(); }
\n+
250
\n+
252 inline const Point2& t() const { return t_; }
\n+
253
\n+
255 inline const Rot2& r() const { return r_; }
\n+
256
\n+
258 inline const Point2& translation() const { return t_; }
\n+
259
\n+
261 inline const Rot2& rotation() const { return r_; }
\n+
262
\n+
264 GTSAM_EXPORT Matrix3 matrix() const;
\n+
265
\n+
271 GTSAM_EXPORT Rot2 bearing(const Point2& point,
\n+
272 OptionalJacobian<1, 3> H1=boost::none, OptionalJacobian<1, 2> H2=boost::none) const;
\n+
273
\n+
279 GTSAM_EXPORT Rot2 bearing(const Pose2& pose,
\n+
280 OptionalJacobian<1, 3> H1=boost::none, OptionalJacobian<1, 3> H2=boost::none) const;
\n+
281
\n+
287 GTSAM_EXPORT double range(const Point2& point,
\n+
288 OptionalJacobian<1, 3> H1=boost::none,
\n+
289 OptionalJacobian<1, 2> H2=boost::none) const;
\n+
290
\n+
296 GTSAM_EXPORT double range(const Pose2& point,
\n+
297 OptionalJacobian<1, 3> H1=boost::none,
\n+
298 OptionalJacobian<1, 3> H2=boost::none) const;
\n+
299
\n+
303
\n+
309 inline static std::pair<size_t, size_t> translationInterval() { return std::make_pair(0, 1); }
\n+
310
\n+
316 static std::pair<size_t, size_t> rotationInterval() { return std::make_pair(2, 2); }
\n+
317
\n+
319 GTSAM_EXPORT
\n+
320 friend std::ostream &operator<<(std::ostream &os, const Pose2& p);
\n+
321
\n+
323
\n+
324 private:
\n+
325
\n+
326 // Serialization function
\n+
327 friend class boost::serialization::access;
\n+
328 template<class Archive>
\n+
329 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
330 ar & BOOST_SERIALIZATION_NVP(t_);
\n+
331 ar & BOOST_SERIALIZATION_NVP(r_);
\n+
332 }
\n+
333
\n+
334public:
\n+
335 // Align for Point2, which is either derived from, or is typedef, of Vector2
\n+\n+
337}; // Pose2
\n+
\n+
338
\n+
340template <>
\n+
\n+
341inline Matrix wedge<Pose2>(const Vector& xi) {
\n+
342 // NOTE(chris): Need eval() as workaround for Apple clang + avx2.
\n+
343 return Matrix(Pose2::wedge(xi(0),xi(1),xi(2))).eval();
\n+
344}
\n+
\n+
345
\n+
346#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
352GTSAM_EXPORT boost::optional<Pose2>
\n+
353GTSAM_DEPRECATED align(const Point2Pairs& pairs);
\n+
354#endif
\n+
355
\n+
356// Convenience typedef
\n+
357using Pose2Pair = std::pair<Pose2, Pose2>;
\n+
358using Pose2Pairs = std::vector<Pose2Pair>;
\n+
359
\n+
360template <>
\n+
361struct traits<Pose2> : public internal::LieGroup<Pose2> {};
\n+
362
\n+
363template <>
\n+
364struct traits<const Pose2> : public internal::LieGroup<Pose2> {};
\n+
365
\n+
366// bearing and range traits, used in RangeFactor
\n+
367template <typename T>
\n+
368struct Bearing<Pose2, T> : HasBearing<Pose2, T, Rot2> {};
\n+
369
\n+
370template <typename T>
\n+
371struct Range<Pose2, T> : HasRange<Pose2, T, double> {};
\n+
372
\n+
373} // namespace gtsam
\n+
374
\n+
Base class and basic functions for Lie types.
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Bearing-Range product.
\n+
2D rotation
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Matrix wedge< Pose2 >(const Vector &xi)
specialization for pose2 wedge function (generic template in Lie.h)
Definition Pose2.h:341
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n+
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n+
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Represents an infinite plane in 3D, which is composed of a planar normal and its perpendicular distan...
Definition OrientedPlane3.h:36
\n-
OrientedPlane3(double a, double b, double c, double d)
Construct from four numbers of plane coeffcients (a, b, c, d)
Definition OrientedPlane3.h:64
\n-
Vector4 planeCoefficients() const
Returns the plane coefficients.
Definition OrientedPlane3.h:122
\n-
OrientedPlane3(const Unit3 &n, double d)
Construct from a Unit3 and a distance.
Definition OrientedPlane3.h:55
\n-
size_t dim() const
Dimensionality of tangent space = 3 DOF.
Definition OrientedPlane3.h:110
\n-
bool equals(const OrientedPlane3 &s, double tol=1e-9) const
The equals function with tolerance.
Definition OrientedPlane3.h:77
\n-
OrientedPlane3(const Vector4 &vec)
Construct from a vector of plane coefficients.
Definition OrientedPlane3.h:60
\n-
static size_t Dim()
Dimensionality of tangent space = 3 DOF.
Definition OrientedPlane3.h:105
\n-
OrientedPlane3()
Default constructor.
Definition OrientedPlane3.h:50
\n-
double distance(OptionalJacobian< 1, 3 > H=boost::none) const
Return the perpendicular distance to the origin.
Definition OrientedPlane3.h:134
\n-
Unit3 normal(OptionalJacobian< 2, 3 > H=boost::none) const
Return the normal.
Definition OrientedPlane3.h:128
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n-
Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const
Return unit-norm Vector.
Definition Unit3.cpp:151
\n-
bool equals(const Unit3 &s, double tol=1e-9) const
The equals function with tolerance.
Definition Unit3.h:115
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
Definition BearingRange.h:34
\n+
Definition BearingRange.h:40
\n+
Definition BearingRange.h:180
\n+
Definition BearingRange.h:194
\n+
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n+
GTSAM_EXPORT Rot2 bearing(const Point2 &point, OptionalJacobian< 1, 3 > H1=boost::none, OptionalJacobian< 1, 2 > H2=boost::none) const
Calculate bearing to a landmark.
Definition Pose2.cpp:245
\n+
Pose2 operator*(const Pose2 &p2) const
compose syntactic sugar
Definition Pose2.h:128
\n+
GTSAM_EXPORT void print(const std::string &s="") const
print with optional string
Definition Pose2.cpp:50
\n+
const Rot2 & rotation() const
rotation
Definition Pose2.h:261
\n+
GTSAM_EXPORT Matrix3 AdjointMap() const
Calculate Adjoint map Ad_pose is 3*3 matrix that when applied to twist xi , returns Ad_pose(xi)
Definition Pose2.cpp:126
\n+
static GTSAM_EXPORT Matrix3 LogmapDerivative(const Pose2 &v)
Derivative of Logmap.
Definition Pose2.cpp:179
\n+
double y() const
get y
Definition Pose2.h:246
\n+
static GTSAM_EXPORT Vector3 Logmap(const Pose2 &p, ChartJacobian H=boost::none)
Log map at identity - return the canonical coordinates of this rotation.
Definition Pose2.cpp:82
\n+
GTSAM_EXPORT Pose2 inverse() const
inverse
Definition Pose2.cpp:201
\n+
GTSAM_EXPORT friend std::ostream & operator<<(std::ostream &os, const Pose2 &p)
Output stream operator.
Definition Pose2.cpp:55
\n+
Point2 operator*(const Point2 &point) const
syntactic sugar for transformFrom
Definition Pose2.h:234
\n+
Pose2(double x, double y, double theta)
construct from (x,y,theta)
Definition Pose2.h:68
\n+
const Point2 & t() const
translation
Definition Pose2.h:252
\n+
static std::pair< size_t, size_t > translationInterval()
Return the start and end indices (inclusive) of the translation component of the exponential map para...
Definition Pose2.h:309
\n+
Pose2(double theta, const Point2 &t)
construct from rotation and translation
Definition Pose2.h:73
\n+
double x() const
get x
Definition Pose2.h:243
\n+
const Rot2 & r() const
rotation
Definition Pose2.h:255
\n+
Pose2(const Vector &v)
Construct from canonical coordinates (Lie algebra)
Definition Pose2.h:91
\n+
Vector3 Adjoint(const Vector3 &xi) const
Apply AdjointMap to twist xi.
Definition Pose2.h:149
\n+
static Matrix3 wedge(double vx, double vy, double w)
wedge for SE(2):
Definition Pose2.h:183
\n+
static std::pair< size_t, size_t > rotationInterval()
Return the start and end indices (inclusive) of the rotation component of the exponential map paramet...
Definition Pose2.h:316
\n+
static GTSAM_EXPORT Matrix3 adjointMap(const Vector3 &v)
Compute the [ad(w,v)] operator for SE2 as in [Kobilarov09siggraph], pg 19.
Definition Pose2.cpp:137
\n+
GTSAM_EXPORT Point2 transformTo(const Point2 &point, OptionalJacobian< 2, 3 > Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const
Return point coordinates in pose coordinate frame.
Definition Pose2.cpp:207
\n+
double theta() const
get theta
Definition Pose2.h:249
\n+
static GTSAM_EXPORT Matrix3 ExpmapDerivative(const Vector3 &v)
Derivative of Expmap.
Definition Pose2.cpp:148
\n+
Rot2 Rotation
Pose Concept requirements.
Definition Pose2.h:41
\n+
Pose2()
default constructor = origin
Definition Pose2.h:55
\n+
GTSAM_EXPORT Point2 transformFrom(const Point2 &point, OptionalJacobian< 2, 3 > Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const
Return point coordinates in global frame.
Definition Pose2.cpp:226
\n+
static Vector3 adjointTranspose(const Vector3 &xi, const Vector3 &y)
The dual version of adjoint action, acting on the dual space of the Lie-algebra vector space.
Definition Pose2.h:168
\n+
static GTSAM_EXPORT Pose2 Expmap(const Vector3 &xi, ChartJacobian H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates .
Definition Pose2.cpp:66
\n+
static Pose2 Identity()
identity for group operation
Definition Pose2.h:122
\n+
static boost::optional< Pose2 > Align(const Point2Pairs &abPointPairs)
Create Pose2 by aligning two point pairs A pose aTb is estimated between pairs (a_point,...
Definition Pose2.cpp:330
\n+
Pose2(const Rot2 &r, const Point2 &t)
construct from r,t
Definition Pose2.h:78
\n+
static Vector3 adjoint(const Vector3 &xi, const Vector3 &y)
Action of the adjointMap on a Lie-algebra vector y, with optional derivatives.
Definition Pose2.h:161
\n+
Pose2(const Pose2 &pose)
copy constructor
Definition Pose2.h:60
\n+
const Point2 & translation() const
translation
Definition Pose2.h:258
\n+
Pose2(const Matrix &T)
Constructor from 3*3 matrix.
Definition Pose2.h:81
\n+
Definition Pose2.h:198
\n+
Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.
Definition Rot2.h:36
\n+
double theta() const
return angle (RADIANS)
Definition Rot2.h:187
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,201 +1,472 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-OrientedPlane3.h\n+Pose2.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * Atlanta, Georgia 30332-0415\n-4 * All Rights Reserved\n-5 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file OrientedPlane3.h\n-14 * @date Dec 19, 2013\n-15 * @author Alex Trevor\n-16 * @author Frank Dellaert\n-17 * @author Zhaoyang Lv\n-18 * @brief An infinite plane, represented by a normal direction and\n-perpendicular distance\n-19 */\n+19// \\callgraph\n 20\n 21#pragma once\n 22\n-23#include \n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-25#include \n-26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+27#include \n 28\n-_\b3_\b6class GTSAM_EXPORT _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3 {\n-37private:\n-38 _\bU_\bn_\bi_\bt_\b3 n_;\n-39 double d_;\n-40\n-41public:\n-42 enum {\n-43 dimension = 3\n-44 };\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+_\b3_\b6class _\bP_\bo_\bs_\be_\b2: public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n+37\n+38public:\n+39\n+_\b4_\b1 typedef _\bR_\bo_\bt_\b2 _\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn;\n+42 typedef _\bP_\bo_\bi_\bn_\bt_\b2 Translation;\n+43\n+44private:\n 45\n+46 _\bR_\bo_\bt_\b2 r_;\n+47 _\bP_\bo_\bi_\bn_\bt_\b2 t_;\n 48\n-_\b5_\b0 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3() :\n-51 n_(), d_(0.0) {\n-52 }\n+49public:\n+50\n 53\n-_\b5_\b5 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3(const _\bU_\bn_\bi_\bt_\b3& n, double d) :\n-56 n_(n), d_(d) {\n+_\b5_\b5 _\bP_\bo_\bs_\be_\b2() :\n+56 r_(_\bt_\br_\ba_\bi_\bt_\bs<_\bR_\bo_\bt_\b2>::_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by()), t_(_\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bo_\bi_\bn_\bt_\b2>::_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by()) {\n 57 }\n 58\n-_\b6_\b0 explicit _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3(const Vector4& vec)\n-61 : n_(vec(0), vec(1), vec(2)), d_(vec(3)) {}\n-62\n-_\b6_\b4 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3(double a, double b, double c, double d) {\n-65 n_ = _\bU_\bn_\bi_\bt_\b3(a, b, c);\n-66 d_ = d;\n-67 }\n-68\n-72\n-74 void _\bp_\br_\bi_\bn_\bt(const std::string& s = std::string()) const;\n-75\n-_\b7_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3& s, double tol = 1e-9) const {\n-78 return (n_._\be_\bq_\bu_\ba_\bl_\bs(s.n_, tol) && (std::abs(d_ - s.d_) < tol));\n-79 }\n-80\n-82\n-89 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3 transform(const _\bP_\bo_\bs_\be_\b3& xr,\n-90 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> Hp = boost::none,\n-91 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Hr = boost::none) const;\n-92\n-100 Vector3 errorVector(const _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3& other,\n-101 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H1 = boost::none,\n-102 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const;\n+_\b6_\b0 _\bP_\bo_\bs_\be_\b2(const _\bP_\bo_\bs_\be_\b2& pose) : r_(pose.r_), t_(pose.t_) {}\n+61\n+_\b6_\b8 _\bP_\bo_\bs_\be_\b2(double _\bx, double _\by, double _\bt_\bh_\be_\bt_\ba) :\n+69 r_(_\bR_\bo_\bt_\b2::fromAngle(_\bt_\bh_\be_\bt_\ba)), t_(_\bx, _\by) {\n+70 }\n+71\n+_\b7_\b3 _\bP_\bo_\bs_\be_\b2(double _\bt_\bh_\be_\bt_\ba, const _\bP_\bo_\bi_\bn_\bt_\b2& _\bt) :\n+74 r_(_\bR_\bo_\bt_\b2::fromAngle(_\bt_\bh_\be_\bt_\ba)), t_(_\bt) {\n+75 }\n+76\n+_\b7_\b8 _\bP_\bo_\bs_\be_\b2(const _\bR_\bo_\bt_\b2& _\br, const _\bP_\bo_\bi_\bn_\bt_\b2& _\bt) : r_(_\br), t_(_\bt) {}\n+79\n+_\b8_\b1 _\bP_\bo_\bs_\be_\b2(const Matrix &T) :\n+82 r_(_\bR_\bo_\bt_\b2::atan2(T(1, 0), T(0, 0))), t_(T(0, 2), T(1, 2)) {\n+83 assert(T.rows() == 3 && T.cols() == 3);\n+84 }\n+85\n+89\n+_\b9_\b1 _\bP_\bo_\bs_\be_\b2(const Vector& v) : _\bP_\bo_\bs_\be_\b2() {\n+92 *this = _\bE_\bx_\bp_\bm_\ba_\bp(v);\n+93 }\n+94\n+102 static boost::optional _\bA_\bl_\bi_\bg_\bn(const Point2Pairs& abPointPairs);\n 103\n-_\b1_\b0_\b5 inline static size_t _\bD_\bi_\bm() {\n-106 return 3;\n-107 }\n-108\n-_\b1_\b1_\b0 inline size_t _\bd_\bi_\bm() const {\n-111 return 3;\n-112 }\n+104 // Version of Pose2::Align that takes 2 matrices.\n+105 static boost::optional _\bA_\bl_\bi_\bg_\bn(const Matrix& a, const Matrix& b);\n+106\n+110\n+112 GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n 113\n-115 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3 retract(const Vector3& v,\n-116 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::none) const;\n-117\n-119 Vector3 localCoordinates(const _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3& s) const;\n+115 GTSAM_EXPORT bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\bo_\bs_\be_\b2& pose, double tol = 1e-9) const;\n+116\n 120\n-_\b1_\b2_\b2 inline Vector4 _\bp_\bl_\ba_\bn_\be_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs() const {\n-123 Vector3 unit_vec = n_._\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br();\n-124 return Vector4(unit_vec[0], unit_vec[1], unit_vec[2], d_);\n-125 }\n+_\b1_\b2_\b2 inline static _\bP_\bo_\bs_\be_\b2 _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() { return _\bP_\bo_\bs_\be_\b2(); }\n+123\n+125 GTSAM_EXPORT _\bP_\bo_\bs_\be_\b2 _\bi_\bn_\bv_\be_\br_\bs_\be() const;\n 126\n-_\b1_\b2_\b8 inline _\bU_\bn_\bi_\bt_\b3 _\bn_\bo_\br_\bm_\ba_\bl(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> H = boost::none) const {\n-129 if (H) *H << I_2x2, Z_2x1;\n-130 return n_;\n-131 }\n-132\n-_\b1_\b3_\b4 inline double _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H = boost::none) const {\n-135 if (H) *H << 0,0,1;\n-136 return d_;\n-137 }\n-138};\n-139\n-_\b1_\b4_\b0template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd<\n-141OrientedPlane3> {\n-142};\n-143\n-_\b1_\b4_\b4template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd<\n-145OrientedPlane3> {\n-146};\n+_\b1_\b2_\b8 inline _\bP_\bo_\bs_\be_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bs_\be_\b2& p2) const {\n+129 return _\bP_\bo_\bs_\be_\b2(r_*p2._\br(), t_ + r_*p2._\bt());\n+130 }\n+131\n+135\n+137 GTSAM_EXPORT static _\bP_\bo_\bs_\be_\b2 _\bE_\bx_\bp_\bm_\ba_\bp(const Vector3& xi, ChartJacobian H =\n+boost::none);\n+138\n+140 GTSAM_EXPORT static Vector3 _\bL_\bo_\bg_\bm_\ba_\bp(const _\bP_\bo_\bs_\be_\b2& p, ChartJacobian H =\n+boost::none);\n+141\n+146 GTSAM_EXPORT Matrix3 _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const;\n 147\n-148} // namespace gtsam\n-149\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n+_\b1_\b4_\b9 inline Vector3 _\bA_\bd_\bj_\bo_\bi_\bn_\bt(const Vector3& xi) const {\n+150 return _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp()*xi;\n+151 }\n+152\n+156 GTSAM_EXPORT static Matrix3 _\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp(const Vector3& v);\n+157\n+_\b1_\b6_\b1 static Vector3 _\ba_\bd_\bj_\bo_\bi_\bn_\bt(const Vector3& xi, const Vector3& _\by) {\n+162 return _\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp(xi) * _\by;\n+163 }\n+164\n+_\b1_\b6_\b8 static Vector3 _\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be(const Vector3& xi, const Vector3& _\by) {\n+169 return _\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp(xi).transpose() * _\by;\n+170 }\n+171\n+172 // temporary fix for wrappers until case issue is resolved\n+173 static Matrix3 adjointMap_(const Vector3 &xi) { return _\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp(xi);}\n+174 static Vector3 adjoint_(const Vector3 &xi, const Vector3 &_\by) { return\n+_\ba_\bd_\bj_\bo_\bi_\bn_\bt(xi, _\by);}\n+175\n+_\b1_\b8_\b3 static inline Matrix3 _\bw_\be_\bd_\bg_\be(double vx, double vy, double w) {\n+184 Matrix3 m;\n+185 m << 0.,-w, vx,\n+186 w, 0., vy,\n+187 0., 0., 0.;\n+188 return m;\n+189 }\n+190\n+192 GTSAM_EXPORT static Matrix3 _\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const Vector3& v);\n+193\n+195 GTSAM_EXPORT static Matrix3 _\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const _\bP_\bo_\bs_\be_\b2& v);\n+196\n+197 // Chart at origin, depends on compile-time flag SLOW_BUT_CORRECT_EXPMAP\n+_\b1_\b9_\b8 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n+199 GTSAM_EXPORT static _\bP_\bo_\bs_\be_\b2 Retract(const Vector3& v, ChartJacobian H =\n+boost::none);\n+200 GTSAM_EXPORT static Vector3 Local(const _\bP_\bo_\bs_\be_\b2& _\br, ChartJacobian H = boost::\n+none);\n+201 };\n+202\n+203 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bP_\bo_\bs_\be_\b2, 3>_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be; // version with derivative\n+204\n+208\n+210 GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b2 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(const _\bP_\bo_\bi_\bn_\bt_\b2& point,\n+211 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpose = boost::none,\n+212 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dpoint = boost::none) const;\n+213\n+219 Matrix _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(const Matrix& points) const;\n+220\n+222 GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b2 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm(const _\bP_\bo_\bi_\bn_\bt_\b2& point,\n+223 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpose = boost::none,\n+224 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dpoint = boost::none) const;\n+225\n+231 Matrix _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm(const Matrix& points) const;\n+232\n+_\b2_\b3_\b4 inline _\bP_\bo_\bi_\bn_\bt_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bi_\bn_\bt_\b2& point) const {\n+235 return _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm(point);\n+236 }\n+237\n+241\n+_\b2_\b4_\b3 inline double _\bx() const { return t_.x(); }\n+244\n+_\b2_\b4_\b6 inline double _\by() const { return t_.y(); }\n+247\n+_\b2_\b4_\b9 inline double _\bt_\bh_\be_\bt_\ba() const { return r_._\bt_\bh_\be_\bt_\ba(); }\n+250\n+_\b2_\b5_\b2 inline const _\bP_\bo_\bi_\bn_\bt_\b2& _\bt() const { return t_; }\n+253\n+_\b2_\b5_\b5 inline const _\bR_\bo_\bt_\b2& _\br() const { return r_; }\n+256\n+_\b2_\b5_\b8 inline const _\bP_\bo_\bi_\bn_\bt_\b2& _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn() const { return t_; }\n+259\n+_\b2_\b6_\b1 inline const _\bR_\bo_\bt_\b2& _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn() const { return r_; }\n+262\n+264 GTSAM_EXPORT Matrix3 matrix() const;\n+265\n+271 GTSAM_EXPORT _\bR_\bo_\bt_\b2 _\bb_\be_\ba_\br_\bi_\bn_\bg(const _\bP_\bo_\bi_\bn_\bt_\b2& point,\n+272 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H2=boost::\n+none) const;\n+273\n+279 GTSAM_EXPORT _\bR_\bo_\bt_\b2 _\bb_\be_\ba_\br_\bi_\bn_\bg(const _\bP_\bo_\bs_\be_\b2& pose,\n+280 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H2=boost::\n+none) const;\n+281\n+287 GTSAM_EXPORT double range(const _\bP_\bo_\bi_\bn_\bt_\b2& point,\n+288 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1=boost::none,\n+289 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H2=boost::none) const;\n+290\n+296 GTSAM_EXPORT double range(const _\bP_\bo_\bs_\be_\b2& point,\n+297 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1=boost::none,\n+298 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H2=boost::none) const;\n+299\n+303\n+_\b3_\b0_\b9 inline static std::pair _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() { return\n+std::make_pair(0, 1); }\n+310\n+_\b3_\b1_\b6 static std::pair _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() { return std::make_pair\n+(2, 2); }\n+317\n+319 GTSAM_EXPORT\n+320 friend std::ostream &_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(std::ostream &os, const _\bP_\bo_\bs_\be_\b2& p);\n+321\n+323\n+324 private:\n+325\n+326 // Serialization function\n+327 friend class boost::serialization::access;\n+328 template\n+329 void serialize(Archive & ar, const unsigned int /*version*/) {\n+330 ar & BOOST_SERIALIZATION_NVP(t_);\n+331 ar & BOOST_SERIALIZATION_NVP(r_);\n+332 }\n+333\n+334public:\n+335 // Align for Point2, which is either derived from, or is typedef, of\n+Vector2\n+336 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+337}; // Pose2\n+338\n+340template <>\n+_\b3_\b4_\b1inline Matrix _\bw_\be_\bd_\bg_\be_\b<_\bP_\bo_\bs_\be_\b2_\b>(const Vector& xi) {\n+342 // NOTE(chris): Need eval() as workaround for Apple clang + avx2.\n+343 return Matrix(_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bw_\be_\bd_\bg_\be(xi(0),xi(1),xi(2))).eval();\n+344}\n+345\n+346#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+352GTSAM_EXPORT boost::optional\n+353GTSAM_DEPRECATED align(const Point2Pairs& pairs);\n+354#endif\n+355\n+356// Convenience typedef\n+357using Pose2Pair = std::pair;\n+358using Pose2Pairs = std::vector;\n+359\n+360template <>\n+_\b3_\b6_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bo_\bs_\be_\b2> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+362\n+363template <>\n+_\b3_\b6_\b4struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+365\n+366// bearing and range traits, used in RangeFactor\n+367template \n+_\b3_\b6_\b8struct _\bB_\be_\ba_\br_\bi_\bn_\bg<_\bP_\bo_\bs_\be_\b2, T> : _\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg {};\n+369\n+370template \n+_\b3_\b7_\b1struct _\bR_\ba_\bn_\bg_\be<_\bP_\bo_\bs_\be_\b2, T> : _\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be {};\n+372\n+373} // namespace gtsam\n+374\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n+Bearing-Range product.\n+_\bR_\bo_\bt_\b2_\b._\bh\n+2D rotation\n+_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bd_\bg_\be_\b<_\b _\bP_\bo_\bs_\be_\b2_\b _\b>\n+Matrix wedge< Pose2 >(const Vector &xi)\n+specialization for pose2 wedge function (generic template in Lie.h)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:341\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-Both ManifoldTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+A CRTP helper class that implements Lie group methods Prerequisites: methods\n+operator*,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Both LieGroupTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n-Represents an infinite plane in 3D, which is composed of a planar normal and\n-its perpendicular distan...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n-OrientedPlane3(double a, double b, double c, double d)\n-Construct from four numbers of plane coeffcients (a, b, c, d)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bp_\bl_\ba_\bn_\be_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n-Vector4 planeCoefficients() const\n-Returns the plane coefficients.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:122\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n-OrientedPlane3(const Unit3 &n, double d)\n-Construct from a Unit3 and a distance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-Dimensionality of tangent space = 3 DOF.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const OrientedPlane3 &s, double tol=1e-9) const\n-The equals function with tolerance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n-OrientedPlane3(const Vector4 &vec)\n-Construct from a vector of plane coefficients.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-Dimensionality of tangent space = 3 DOF.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n-OrientedPlane3()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be\n-double distance(OptionalJacobian< 1, 3 > H=boost::none) const\n-Return the perpendicular distance to the origin.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl\n-Unit3 normal(OptionalJacobian< 2, 3 > H=boost::none) const\n-Return the normal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br\n-Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const\n-Return unit-norm Vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const Unit3 &s, double tol=1e-9) const\n-The equals function with tolerance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:194\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+A 2D pose (Point2,Rot2)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bb_\be_\ba_\br_\bi_\bn_\bg\n+GTSAM_EXPORT Rot2 bearing(const Point2 &point, OptionalJacobian< 1, 3 >\n+H1=boost::none, OptionalJacobian< 1, 2 > H2=boost::none) const\n+Calculate bearing to a landmark.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:245\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Pose2 operator*(const Pose2 &p2) const\n+compose syntactic sugar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+GTSAM_EXPORT void print(const std::string &s=\"\") const\n+print with optional string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+const Rot2 & rotation() const\n+rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:261\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n+GTSAM_EXPORT Matrix3 AdjointMap() const\n+Calculate Adjoint map Ad_pose is 3*3 matrix that when applied to twist xi ,\n+returns Ad_pose(xi)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+static GTSAM_EXPORT Matrix3 LogmapDerivative(const Pose2 &v)\n+Derivative of Logmap.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:179\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\by\n+double y() const\n+get y\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:246\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp\n+static GTSAM_EXPORT Vector3 Logmap(const Pose2 &p, ChartJacobian H=boost::none)\n+Log map at identity - return the canonical coordinates of this rotation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n+GTSAM_EXPORT Pose2 inverse() const\n+inverse\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:201\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+GTSAM_EXPORT friend std::ostream & operator<<(std::ostream &os, const Pose2 &p)\n+Output stream operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point2 operator*(const Point2 &point) const\n+syntactic sugar for transformFrom\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:234\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+Pose2(double x, double y, double theta)\n+construct from (x,y,theta)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt\n+const Point2 & t() const\n+translation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:252\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n+static std::pair< size_t, size_t > translationInterval()\n+Return the start and end indices (inclusive) of the translation component of\n+the exponential map para...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:309\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+Pose2(double theta, const Point2 &t)\n+construct from rotation and translation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bx\n+double x() const\n+get x\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:243\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\br\n+const Rot2 & r() const\n+rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:255\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+Pose2(const Vector &v)\n+Construct from canonical coordinates (Lie algebra)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt\n+Vector3 Adjoint(const Vector3 &xi) const\n+Apply AdjointMap to twist xi.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:149\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bw_\be_\bd_\bg_\be\n+static Matrix3 wedge(double vx, double vy, double w)\n+wedge for SE(2):\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:183\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n+static std::pair< size_t, size_t > rotationInterval()\n+Return the start and end indices (inclusive) of the rotation component of the\n+exponential map paramet...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:316\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n+static GTSAM_EXPORT Matrix3 adjointMap(const Vector3 &v)\n+Compute the [ad(w,v)] operator for SE2 as in [Kobilarov09siggraph], pg 19.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo\n+GTSAM_EXPORT Point2 transformTo(const Point2 &point, OptionalJacobian< 2, 3 >\n+Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const\n+Return point coordinates in pose coordinate frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt_\bh_\be_\bt_\ba\n+double theta() const\n+get theta\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:249\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+static GTSAM_EXPORT Matrix3 ExpmapDerivative(const Vector3 &v)\n+Derivative of Expmap.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:148\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+Rot2 Rotation\n+Pose Concept requirements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+Pose2()\n+default constructor = origin\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm\n+GTSAM_EXPORT Point2 transformFrom(const Point2 &point, OptionalJacobian< 2, 3 >\n+Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const\n+Return point coordinates in global frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:226\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bT_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be\n+static Vector3 adjointTranspose(const Vector3 &xi, const Vector3 &y)\n+The dual version of adjoint action, acting on the dual space of the Lie-algebra\n+vector space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:168\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n+static GTSAM_EXPORT Pose2 Expmap(const Vector3 &xi, ChartJacobian H=boost::\n+none)\n+Exponential map at identity - create a rotation from canonical coordinates .\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static Pose2 Identity()\n+identity for group operation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:122\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bA_\bl_\bi_\bg_\bn\n+static boost::optional< Pose2 > Align(const Point2Pairs &abPointPairs)\n+Create Pose2 by aligning two point pairs A pose aTb is estimated between pairs\n+(a_point,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.cpp:330\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+Pose2(const Rot2 &r, const Point2 &t)\n+construct from r,t\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\ba_\bd_\bj_\bo_\bi_\bn_\bt\n+static Vector3 adjoint(const Vector3 &xi, const Vector3 &y)\n+Action of the adjointMap on a Lie-algebra vector y, with optional derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:161\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+Pose2(const Pose2 &pose)\n+copy constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n+const Point2 & translation() const\n+translation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:258\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+Pose2(const Matrix &T)\n+Constructor from 3*3 matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:198\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2\n+Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bt_\bh_\be_\bt_\ba\n+double theta() const\n+return angle (RADIANS)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:187\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * O\bOr\bri\bie\ben\bnt\bte\bed\bdP\bPl\bla\ban\bne\be3\b3.\b.h\bh\n+ * _\bP_\bo_\bs_\be_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00287.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00287.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,84 @@\n \n \n \n \n \n
\n \n-
Cal3Unified.cpp File Reference
\n+
Rot3.h File Reference
\n
\n
\n+\n+

3D rotation represented as a rotation matrix or quaternion \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Rot3
 Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIONS is not defined, or as a quaternion if it is defined. More...
 
struct  gtsam::Rot3::CayleyChart
 
struct  gtsam::Rot3::ChartAtOrigin
 
struct  gtsam::traits< Rot3 >
 
struct  gtsam::traits< const Rot3 >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Macros

\n+#define ROT3_DEFAULT_COORDINATES_MODE   Rot3::CAYLEY
 
\n+\n+\n+\n+\n+

\n+Typedefs

\n+using gtsam::Rot3Vector = std::vector< Rot3, Eigen::aligned_allocator< Rot3 > >
 std::vector of Rot3s, mainly for wrapper
 
\n \n-\n-\n+\n+\n+\n

\n Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Cal3Unified &cal)
 
pair< Matrix3, Vector3 > gtsam::RQ (const Matrix3 &A, OptionalJacobian< 3, 9 > H=boost::none)
 [RQ] receives a 3 by 3 matrix and returns an upper triangular matrix R and 3 rotation angles corresponding to the rotation matrix Q=Qz'*Qy'*Qx' such that A = R*Q = R*Qz'*Qy'*Qx'.
 
\n

Detailed Description

\n-
Date
Mar 8, 2014
\n-
Author
Jing Dong
\n+

3D rotation represented as a rotation matrix or quaternion

\n+
Author
Alireza Fathi
\n+
\n+Christian Potthast
\n+
\n+Frank Dellaert
\n+
\n+Richard Roberts
\n+
\n+Luca Carlone
\n
\n Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,56 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Cal3Unified.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Rot3.h File Reference\n+3D rotation represented as a rotation matrix or quaternion _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+ _\bR_\bo_\bt_\b3 is a 3D rotation represented as a rotation matrix if the\n+\u00a0 preprocessor symbol GTSAM_USE_QUATERNIONS is not defined, or as a\n+ quaternion if it is defined. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\ba_\by_\bl_\be_\by_\bC_\bh_\ba_\br_\bt\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\bo_\bt_\b3_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bR_\bo_\bt_\b3_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 R\bRO\bOT\bT3\b3_\b_D\bDE\bEF\bFA\bAU\bUL\bLT\bT_\b_C\bCO\bOO\bOR\bRD\bDI\bIN\bNA\bAT\bTE\bES\bS_\b_M\bMO\bOD\bDE\bE\u00a0\u00a0\u00a0Rot3::CAYLEY\n+\u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:R\bRo\bot\bt3\b3V\bVe\bec\bct\bto\bor\br = std::vector< _\bR_\bo_\bt_\b3, Eigen::aligned_allocator< _\bR_\bo_\bt_\b3 >\n+ >\n+\u00a0 std::vector of Rot3s, mainly for wrapper\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd &cal)\n+pair< Matrix3, Vector3 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bQ (const Matrix3 &A, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 9 >\n+ H=boost::none)\n+ [RQ] receives a 3 by 3 matrix and returns an upper\n+\u00a0 triangular matrix R and 3 rotation angles\n+ corresponding to the rotation matrix Q=Qz'*Qy'*Qx'\n+ such that A = R*Q = R*Qz'*Qy'*Qx'.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Mar 8, 2014\n+3D rotation represented as a rotation matrix or quaternion\n Author\n- Jing Dong\n+ Alireza Fathi\n+ Christian Potthast\n+ Frank Dellaert\n+ Richard Roberts\n+ Luca Carlone\n Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b._\bc_\bp_\bp\n+ * _\bR_\bo_\bt_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00290.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00290.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn-inl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,38 +94,41 @@\n \n \n \n \n \n
\n \n-
SOn-inl.h File Reference
\n+Namespaces |\n+Functions
\n+
Cal3DS2.cpp File Reference
\n \n
\n-\n-

Template implementations for SO(n) \n-More...

\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Functions

\n+std::ostream & gtsam::operator<< (std::ostream &os, const Cal3DS2 &cal)
 
\n

Detailed Description

\n-

Template implementations for SO(n)

\n-
Author
Frank Dellaert
\n-
Date
March 2019
\n+
Date
Feb 28, 2010
\n+
Author
ydjian
\n+
\n+Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,24 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SOn-inl.h File Reference\n-Template implementations for SO(n) _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Cal3DS2.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\bD_\bS_\b2 &cal)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Template implementations for SO(n)\n- Author\n- Frank Dellaert\n Date\n- March 2019\n+ Feb 28, 2010\n+ Author\n+ ydjian\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\bn_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00293.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00293.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SimpleCamera.h File Reference\n \n \n \n \n \n \n \n@@ -94,52 +94,57 @@\n \n \n \n \n \n
\n \n-
Cal3.h File Reference
\n+Typedefs
\n+
SimpleCamera.h File Reference
\n \n
\n \n-

Common code for all Calibration models. \n+

A simple camera class with a Cal3_S2 calibration. \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::Cal3
 Common base class for all calibration models. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n-Functions

template<typename Cal , size_t Dim>
void gtsam::calibrateJacobians (const Cal &calibration, const Point2 &pn, OptionalJacobian< 2, Dim > Dcal=boost::none, OptionalJacobian< 2, 2 > Dp=boost::none)
 Function which makes use of the Implicit Function Theorem to compute the Jacobians of calibrate using uncalibrate.
 

\n+Typedefs

using gtsam::PinholeCameraCal3_S2 = gtsam::PinholeCamera< gtsam::Cal3_S2 >
 Convenient aliases for Pinhole camera classes with different calibrations.
 
\n+using gtsam::PinholeCameraCal3Bundler = gtsam::PinholeCamera< gtsam::Cal3Bundler >
 
\n+using gtsam::PinholeCameraCal3DS2 = gtsam::PinholeCamera< gtsam::Cal3DS2 >
 
\n+using gtsam::PinholeCameraCal3Unified = gtsam::PinholeCamera< gtsam::Cal3Unified >
 
\n+using gtsam::PinholeCameraCal3Fisheye = gtsam::PinholeCamera< gtsam::Cal3Fisheye >
 
\n

Detailed Description

\n-

Common code for all Calibration models.

\n-
Author
Varun Agrawal
\n+

A simple camera class with a Cal3_S2 calibration.

\n+
Date
Aug 16, 2009
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,39 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Cal3.h File Reference\n-Common code for all Calibration models. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+SimpleCamera.h File Reference\n+A simple camera class with a Cal3_S2 calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3\n-\u00a0 Common base class for all calibration models. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs (const Cal &calibration, const _\bP_\bo_\bi_\bn_\bt_\b2 &pn,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 2, Dim > Dcal=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 2, 2 >\n- Dp=boost::none)\n-\u00a0 Function which makes use of the Implicit Function Theorem to compute the\n- Jacobians of calibrate using uncalibrate.\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\bC_\ba_\bl_\b3_\b__\bS_\b2 = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2 >\n+\u00a0 Convenient aliases for Pinhole camera classes with different\n+ calibrations.\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPi\bin\bnh\bho\bol\ble\beC\bCa\bam\bme\ber\bra\baC\bCa\bal\bl3\b3B\bBu\bun\bnd\bdl\ble\ber\br = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n+ _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPi\bin\bnh\bho\bol\ble\beC\bCa\bam\bme\ber\bra\baC\bCa\bal\bl3\b3D\bDS\bS2\b2 = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2 >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPi\bin\bnh\bho\bol\ble\beC\bCa\bam\bme\ber\bra\baC\bCa\bal\bl3\b3U\bUn\bni\bif\bfi\bie\bed\bd = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n+ _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPi\bin\bnh\bho\bol\ble\beC\bCa\bam\bme\ber\bra\baC\bCa\bal\bl3\b3F\bFi\bis\bsh\bhe\bey\bye\be = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n+ _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be >\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Common code for all Calibration models.\n+A simple camera class with a Cal3_S2 calibration.\n+ Date\n+ Aug 16, 2009\n Author\n- Varun Agrawal\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\b._\bh\n+ * _\bS_\bi_\bm_\bp_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00293.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00293.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00293 = [\n- [\"calibrateJacobians\", \"a00293.html#a9ac814fcc4484bce32e4616d69afb225\", null]\n+ [\"PinholeCameraCal3_S2\", \"a00293.html#a3a2e8c622e65623a6853c84073bdb4f2\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00293_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00293_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SimpleCamera.h Source File\n \n \n \n \n \n \n \n@@ -98,177 +98,141 @@\n
No Matches
\n \n \n \n \n \n
\n-
Cal3.h
\n+
SimpleCamera.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
22#pragma once
\n-
23
\n-\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
46template <typename Cal, size_t Dim>
\n-
\n-
47void calibrateJacobians(const Cal& calibration, const Point2& pn,
\n-
48 OptionalJacobian<2, Dim> Dcal = boost::none,
\n-
49 OptionalJacobian<2, 2> Dp = boost::none) {
\n-
50 if (Dcal || Dp) {
\n-
51 Eigen::Matrix<double, 2, Dim> H_uncal_K;
\n-
52 Matrix22 H_uncal_pn, H_uncal_pn_inv;
\n-
53
\n-
54 // Compute uncalibrate Jacobians
\n-
55 calibration.uncalibrate(pn, Dcal ? &H_uncal_K : nullptr, H_uncal_pn);
\n-
56
\n-
57 H_uncal_pn_inv = H_uncal_pn.inverse();
\n-
58
\n-
59 if (Dp) *Dp = H_uncal_pn_inv;
\n-
60 if (Dcal) *Dcal = -H_uncal_pn_inv * H_uncal_K;
\n-
61 }
\n-
62}
\n-
\n-
63
\n-
\n-
69class GTSAM_EXPORT Cal3 {
\n-
70 protected:
\n-
71 double fx_ = 1.0f, fy_ = 1.0f;
\n-
72 double s_ = 0.0f;
\n-
73 double u0_ = 0.0f, v0_ = 0.0f;
\n-
74
\n-
75 public:
\n-
76 enum { dimension = 5 };
\n-
78 using shared_ptr = boost::shared_ptr<Cal3>;
\n-
79
\n-
82
\n-
84 Cal3() = default;
\n+
19#pragma once
\n+
20
\n+\n+\n+\n+\n+\n+\n+\n+\n+
29
\n+
30namespace gtsam {
\n+
31
\n+\n+
35 using PinholeCameraCal3Bundler = gtsam::PinholeCamera<gtsam::Cal3Bundler>;
\n+
36 using PinholeCameraCal3DS2 = gtsam::PinholeCamera<gtsam::Cal3DS2>;
\n+
37 using PinholeCameraCal3Unified = gtsam::PinholeCamera<gtsam::Cal3Unified>;
\n+
38 using PinholeCameraCal3Fisheye = gtsam::PinholeCamera<gtsam::Cal3Fisheye>;
\n+
39
\n+
40#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
45class GTSAM_EXPORT SimpleCamera : public PinholeCameraCal3_S2 {
\n+
46
\n+
47 typedef PinholeCamera<Cal3_S2> Base;
\n+
48 typedef boost::shared_ptr<SimpleCamera> shared_ptr;
\n+
49
\n+
50public:
\n+
51
\n+
54
\n+
56 SimpleCamera() :
\n+
57 Base() {
\n+
58 }
\n+
59
\n+
61 explicit SimpleCamera(const Pose3& pose) :
\n+
62 Base(pose) {
\n+
63 }
\n+
64
\n+
66 SimpleCamera(const Pose3& pose, const Cal3_S2& K) :
\n+
67 Base(pose, K) {
\n+
68 }
\n+
69
\n+
73
\n+
81 static SimpleCamera Level(const Cal3_S2 &K, const Pose2& pose2,
\n+
82 double height) {
\n+
83 return SimpleCamera(Base::LevelPose(pose2, height), K);
\n+
84 }
\n
85
\n-
\n-
87 Cal3(double fx, double fy, double s, double u0, double v0)
\n-
88 : fx_(fx), fy_(fy), s_(s), u0_(u0), v0_(v0) {}
\n-
\n-
89
\n-
\n-
91 Cal3(const Vector5& d)
\n-
92 : fx_(d(0)), fy_(d(1)), s_(d(2)), u0_(d(3)), v0_(d(4)) {}
\n-
\n-
93
\n-
100 Cal3(double fov, int w, int h);
\n-
101
\n-
103 virtual ~Cal3() {}
\n+
87 static SimpleCamera Level(const Pose2& pose2, double height) {
\n+
88 return SimpleCamera::Level(Cal3_S2(), pose2, height);
\n+
89 }
\n+
90
\n+
100 static SimpleCamera Lookat(const Point3& eye, const Point3& target,
\n+
101 const Point3& upVector, const Cal3_S2& K = Cal3_S2()) {
\n+
102 return SimpleCamera(Base::LookatPose(eye, target, upVector), K);
\n+
103 }
\n
104
\n
108
\n-
118 Cal3(const std::string& path);
\n-
119
\n-
123
\n-
125 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n-
126 const Cal3& cal);
\n-
127
\n-
129 virtual void print(const std::string& s = "") const;
\n-
130
\n-
132 bool equals(const Cal3& K, double tol = 10e-9) const;
\n-
133
\n+
110 explicit SimpleCamera(const Vector &v) :
\n+
111 Base(v) {
\n+
112 }
\n+
113
\n+
115 SimpleCamera(const Vector &v, const Vector &K) :
\n+
116 Base(v, K) {
\n+
117 }
\n+
118
\n+
120 SimpleCamera::shared_ptr clone() const { return boost::make_shared<SimpleCamera>(*this); }
\n+
121
\n+
122
\n+
126
\n+
128 SimpleCamera retract(const Vector& d) const {
\n+
129 if ((size_t) d.size() == 6)
\n+
130 return SimpleCamera(this->pose().retract(d), calibration());
\n+
131 else
\n+
132 return SimpleCamera(this->pose().retract(d.head(6)),
\n+
133 calibration().retract(d.tail(calibration().dim())));
\n+
134 }
\n+
135
\n
137
\n-
139 inline double fx() const { return fx_; }
\n-
140
\n-
142 inline double fy() const { return fy_; }
\n-
143
\n-
145 inline double aspectRatio() const { return fx_ / fy_; }
\n+
138};
\n+
139
\n+
141GTSAM_EXPORT SimpleCamera simpleCamera(const Matrix34& P);
\n+
142
\n+
143// manifold traits
\n+
144template <>
\n+
145struct traits<SimpleCamera> : public internal::Manifold<SimpleCamera> {};
\n
146
\n-
148 inline double skew() const { return s_; }
\n+
147template <>
\n+
148struct traits<const SimpleCamera> : public internal::Manifold<SimpleCamera> {};
\n
149
\n-
151 inline double px() const { return u0_; }
\n-
152
\n-
154 inline double py() const { return v0_; }
\n+
150// range traits, used in RangeFactor
\n+
151template <typename T>
\n+
152struct Range<SimpleCamera, T> : HasRange<SimpleCamera, T, double> {};
\n+
153
\n+
154#endif
\n
155
\n-
157 Point2 principalPoint() const { return Point2(u0_, v0_); }
\n-
158
\n-
\n-
160 Vector5 vector() const {
\n-
161 Vector5 v;
\n-
162 v << fx_, fy_, s_, u0_, v0_;
\n-
163 return v;
\n-
164 }
\n-
\n-
165
\n-
\n-
167 virtual Matrix3 K() const {
\n-
168 Matrix3 K;
\n-
169 K << fx_, s_, u0_, 0.0, fy_, v0_, 0.0, 0.0, 1.0;
\n-
170 return K;
\n-
171 }
\n-
\n-
172
\n-
173#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
175 Matrix3 GTSAM_DEPRECATED matrix() const { return K(); }
\n-
176#endif
\n-
177
\n-
179 Matrix3 inverse() const;
\n-
180
\n-
182 inline virtual size_t dim() const { return Dim(); }
\n-
183
\n-
185 inline static size_t Dim() { return dimension; }
\n-
186
\n-
190
\n-
191 private:
\n-
193 friend class boost::serialization::access;
\n-
194 template <class Archive>
\n-
195 void serialize(Archive& ar, const unsigned int /*version*/) {
\n-
196 ar& BOOST_SERIALIZATION_NVP(fx_);
\n-
197 ar& BOOST_SERIALIZATION_NVP(fy_);
\n-
198 ar& BOOST_SERIALIZATION_NVP(s_);
\n-
199 ar& BOOST_SERIALIZATION_NVP(u0_);
\n-
200 ar& BOOST_SERIALIZATION_NVP(v0_);
\n-
201 }
\n-
202
\n-
204};
\n-
\n-
205
\n-
206} // \\ namespace gtsam
\n-
2D Point
\n+
156} // namespace gtsam
\n+
Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.
\n+
Calibration used by Bundler.
\n+
Bearing-Range product.
\n+
Base class for all pinhole cameras.
\n+
The most common 5DOF 3D->2D calibration.
\n+
Unified Calibration Model, see Mei07icra for details.
\n+
Calibration of a fisheye camera.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
void calibrateJacobians(const Cal &calibration, const Point2 &pn, OptionalJacobian< 2, Dim > Dcal=boost::none, OptionalJacobian< 2, 2 > Dp=boost::none)
Function which makes use of the Implicit Function Theorem to compute the Jacobians of calibrate using...
Definition Cal3.h:47
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
Common base class for all calibration models.
Definition Cal3.h:69
\n-
Cal3(double fx, double fy, double s, double u0, double v0)
constructor from doubles
Definition Cal3.h:87
\n-
virtual Matrix3 K() const
return calibration matrix K
Definition Cal3.h:167
\n-
Cal3(const Vector5 &d)
constructor from vector
Definition Cal3.h:91
\n-
virtual ~Cal3()
Virtual destructor.
Definition Cal3.h:103
\n-
Vector5 vector() const
vectorized form (column-wise)
Definition Cal3.h:160
\n-
Cal3()=default
Create a default calibration that leaves coordinates unchanged.
\n-
double px() const
image center in x
Definition Cal3.h:151
\n-
static size_t Dim()
return DOF, dimensionality of tangent space
Definition Cal3.h:185
\n-
Point2 principalPoint() const
return the principal point
Definition Cal3.h:157
\n-
double fx() const
focal length x
Definition Cal3.h:139
\n-
double py() const
image center in y
Definition Cal3.h:154
\n-
double skew() const
skew
Definition Cal3.h:148
\n-
virtual size_t dim() const
return DOF, dimensionality of tangent space
Definition Cal3.h:182
\n-
double aspectRatio() const
aspect ratio
Definition Cal3.h:145
\n-
double fy() const
focal length y
Definition Cal3.h:142
\n+
gtsam::PinholeCamera< gtsam::Cal3_S2 > PinholeCameraCal3_S2
Convenient aliases for Pinhole camera classes with different calibrations.
Definition SimpleCamera.h:34
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
The most common 5DOF 3D->2D calibration.
Definition Cal3_S2.h:34
\n+
A pinhole camera class that has a Pose3 and a Calibration.
Definition PinholeCamera.h:33
\n+
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,224 +1,160 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3.h\n+SimpleCamera.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-22#pragma once\n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-46template \n-_\b4_\b7void _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(const Cal& calibration, const _\bP_\bo_\bi_\bn_\bt_\b2& pn,\n-48 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bD_\bi_\bm_\b> Dcal = boost::none,\n-49 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dp = boost::none) {\n-50 if (Dcal || Dp) {\n-51 Eigen::Matrix H_uncal_K;\n-52 Matrix22 H_uncal_pn, H_uncal_pn_inv;\n-53\n-54 // Compute uncalibrate Jacobians\n-55 calibration.uncalibrate(pn, Dcal ? &H_uncal_K : nullptr, H_uncal_pn);\n-56\n-57 H_uncal_pn_inv = H_uncal_pn.inverse();\n-58\n-59 if (Dp) *Dp = H_uncal_pn_inv;\n-60 if (Dcal) *Dcal = -H_uncal_pn_inv * H_uncal_K;\n-61 }\n-62}\n-63\n-_\b6_\b9class GTSAM_EXPORT _\bC_\ba_\bl_\b3 {\n-70 protected:\n-_\b7_\b1 double fx_ = 1.0f, fy_ = 1.0f;\n-_\b7_\b2 double s_ = 0.0f;\n-_\b7_\b3 double u0_ = 0.0f, v0_ = 0.0f;\n-74\n-75 public:\n-76 enum { dimension = 5 };\n-78 using shared_ptr = boost::shared_ptr;\n-79\n-82\n-_\b8_\b4 _\bC_\ba_\bl_\b3() = default;\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+_\b3_\b4 using _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\bC_\ba_\bl_\b3_\b__\bS_\b2 = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b>;\n+35 using PinholeCameraCal3Bundler = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b>;\n+36 using PinholeCameraCal3DS2 = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b>;\n+37 using PinholeCameraCal3Unified = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b>;\n+38 using PinholeCameraCal3Fisheye = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b>;\n+39\n+40#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+45class GTSAM_EXPORT SimpleCamera : public _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\bC_\ba_\bl_\b3_\b__\bS_\b2 {\n+46\n+47 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b> Base;\n+48 typedef boost::shared_ptr shared_ptr;\n+49\n+50public:\n+51\n+54\n+56 SimpleCamera() :\n+57 Base() {\n+58 }\n+59\n+61 explicit SimpleCamera(const _\bP_\bo_\bs_\be_\b3& pose) :\n+62 Base(pose) {\n+63 }\n+64\n+66 SimpleCamera(const _\bP_\bo_\bs_\be_\b3& pose, const _\bC_\ba_\bl_\b3_\b__\bS_\b2& K) :\n+67 Base(pose, K) {\n+68 }\n+69\n+73\n+81 static SimpleCamera Level(const _\bC_\ba_\bl_\b3_\b__\bS_\b2 &K, const _\bP_\bo_\bs_\be_\b2& pose2,\n+82 double height) {\n+83 return SimpleCamera(Base::LevelPose(pose2, height), K);\n+84 }\n 85\n-_\b8_\b7 _\bC_\ba_\bl_\b3(double fx, double fy, double s, double u0, double v0)\n-88 : fx_(fx), fy_(fy), s_(s), u0_(u0), v0_(v0) {}\n-89\n-_\b9_\b1 _\bC_\ba_\bl_\b3(const Vector5& d)\n-92 : fx_(d(0)), fy_(d(1)), s_(d(2)), u0_(d(3)), v0_(d(4)) {}\n-93\n-100 _\bC_\ba_\bl_\b3(double fov, int w, int h);\n-101\n-_\b1_\b0_\b3 virtual _\b~_\bC_\ba_\bl_\b3() {}\n+87 static SimpleCamera Level(const _\bP_\bo_\bs_\be_\b2& pose2, double height) {\n+88 return SimpleCamera::Level(_\bC_\ba_\bl_\b3_\b__\bS_\b2(), pose2, height);\n+89 }\n+90\n+100 static SimpleCamera Lookat(const _\bP_\bo_\bi_\bn_\bt_\b3& eye, const _\bP_\bo_\bi_\bn_\bt_\b3& target,\n+101 const _\bP_\bo_\bi_\bn_\bt_\b3& upVector, const _\bC_\ba_\bl_\b3_\b__\bS_\b2& K = _\bC_\ba_\bl_\b3_\b__\bS_\b2()) {\n+102 return SimpleCamera(Base::LookatPose(eye, target, upVector), K);\n+103 }\n 104\n 108\n-118 _\bC_\ba_\bl_\b3(const std::string& path);\n-119\n-123\n-125 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-126 const _\bC_\ba_\bl_\b3& cal);\n-127\n-129 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n-130\n-132 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bl_\b3& K, double tol = 10e-9) const;\n-133\n+110 explicit SimpleCamera(const Vector &v) :\n+111 Base(v) {\n+112 }\n+113\n+115 SimpleCamera(const Vector &v, const Vector &K) :\n+116 Base(v, K) {\n+117 }\n+118\n+120 SimpleCamera::shared_ptr clone() const { return boost::\n+make_shared(*this); }\n+121\n+122\n+126\n+128 SimpleCamera retract(const Vector& d) const {\n+129 if ((size_t) d.size() == 6)\n+130 return SimpleCamera(this->pose().retract(d), calibration());\n+131 else\n+132 return SimpleCamera(this->pose().retract(d.head(6)),\n+133 calibration().retract(d.tail(calibration().dim())));\n+134 }\n+135\n 137\n-_\b1_\b3_\b9 inline double _\bf_\bx() const { return fx_; }\n-140\n-_\b1_\b4_\b2 inline double _\bf_\by() const { return fy_; }\n-143\n-_\b1_\b4_\b5 inline double _\ba_\bs_\bp_\be_\bc_\bt_\bR_\ba_\bt_\bi_\bo() const { return fx_ / fy_; }\n+138};\n+139\n+141GTSAM_EXPORT SimpleCamera simpleCamera(const Matrix34& P);\n+142\n+143// manifold traits\n+144template <>\n+145struct traits : public internal::Manifold {};\n 146\n-_\b1_\b4_\b8 inline double _\bs_\bk_\be_\bw() const { return s_; }\n+147template <>\n+148struct traits : public internal::Manifold\n+{};\n 149\n-_\b1_\b5_\b1 inline double _\bp_\bx() const { return u0_; }\n-152\n-_\b1_\b5_\b4 inline double _\bp_\by() const { return v0_; }\n+150// range traits, used in RangeFactor\n+151template \n+152struct Range : HasRange {};\n+153\n+154#endif\n 155\n-_\b1_\b5_\b7 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl_\bP_\bo_\bi_\bn_\bt() const { return _\bP_\bo_\bi_\bn_\bt_\b2(u0_, v0_); }\n-158\n-_\b1_\b6_\b0 Vector5 _\bv_\be_\bc_\bt_\bo_\br() const {\n-161 Vector5 v;\n-162 v << fx_, fy_, s_, u0_, v0_;\n-163 return v;\n-164 }\n-165\n-_\b1_\b6_\b7 virtual Matrix3 _\bK() const {\n-168 Matrix3 K;\n-169 K << fx_, s_, u0_, 0.0, fy_, v0_, 0.0, 0.0, 1.0;\n-170 return K;\n-171 }\n-172\n-173#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-175 Matrix3 GTSAM_DEPRECATED matrix() const { return K(); }\n-176#endif\n-177\n-179 Matrix3 inverse() const;\n-180\n-_\b1_\b8_\b2 inline virtual size_t _\bd_\bi_\bm() const { return Dim(); }\n-183\n-_\b1_\b8_\b5 inline static size_t _\bD_\bi_\bm() { return dimension; }\n-186\n-190\n-191 private:\n-_\b1_\b9_\b3 friend class boost::serialization::access;\n-194 template \n-195 void serialize(Archive& ar, const unsigned int /*version*/) {\n-196 ar& BOOST_SERIALIZATION_NVP(fx_);\n-197 ar& BOOST_SERIALIZATION_NVP(fy_);\n-198 ar& BOOST_SERIALIZATION_NVP(s_);\n-199 ar& BOOST_SERIALIZATION_NVP(u0_);\n-200 ar& BOOST_SERIALIZATION_NVP(v0_);\n-201 }\n-202\n-204};\n-205\n-206} // \\ namespace gtsam\n-_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-2D Point\n+156} // namespace gtsam\n+_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bh\n+Calibration of a camera with radial distortion, calculations in base class\n+Cal3DS2_Base.\n+_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n+Calibration used by Bundler.\n+_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n+Bearing-Range product.\n+_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+Base class for all pinhole cameras.\n+_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n+The most common 5DOF 3D->2D calibration.\n+_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b._\bh\n+Unified Calibration Model, see Mei07icra for details.\n+_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n+Calibration of a fisheye camera.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\bC_\ba_\bl_\b3_\b__\bS_\b2\n+gtsam::PinholeCamera< gtsam::Cal3_S2 > PinholeCameraCal3_S2\n+Convenient aliases for Pinhole camera classes with different calibrations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SimpleCamera.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n-void calibrateJacobians(const Cal &calibration, const Point2 &pn,\n-OptionalJacobian< 2, Dim > Dcal=boost::none, OptionalJacobian< 2, 2 >\n-Dp=boost::none)\n-Function which makes use of the Implicit Function Theorem to compute the\n-Jacobians of calibrate using...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3\n-Common base class for all calibration models.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bC_\ba_\bl_\b3\n-Cal3(double fx, double fy, double s, double u0, double v0)\n-constructor from doubles\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bK\n-virtual Matrix3 K() const\n-return calibration matrix K\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bC_\ba_\bl_\b3\n-Cal3(const Vector5 &d)\n-constructor from vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\b~_\bC_\ba_\bl_\b3\n-virtual ~Cal3()\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-Vector5 vector() const\n-vectorized form (column-wise)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bC_\ba_\bl_\b3\n-Cal3()=default\n-Create a default calibration that leaves coordinates unchanged.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bp_\bx\n-double px() const\n-image center in x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-return DOF, dimensionality of tangent space\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl_\bP_\bo_\bi_\bn_\bt\n-Point2 principalPoint() const\n-return the principal point\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bf_\bx\n-double fx() const\n-focal length x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:139\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bp_\by\n-double py() const\n-image center in y\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bs_\bk_\be_\bw\n-double skew() const\n-skew\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:148\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bd_\bi_\bm\n-virtual size_t dim() const\n-return DOF, dimensionality of tangent space\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:182\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\ba_\bs_\bp_\be_\bc_\bt_\bR_\ba_\bt_\bi_\bo\n-double aspectRatio() const\n-aspect ratio\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:145\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bf_\by\n-double fy() const\n-focal length y\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:142\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n+The most common 5DOF 3D->2D calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n+A pinhole camera class that has a Pose3 and a Calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+A 2D pose (Point2,Rot2)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\b._\bh\n+ * _\bS_\bi_\bm_\bp_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00296.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00296.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2_Base.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.h File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,54 @@\n \n \n \n \n \n
\n \n-
Cal3DS2_Base.cpp File Reference
\n+Classes |\n+Namespaces
\n+
Cal3DS2.h File Reference
\n \n
\n+\n+

Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Cal3DS2
 Calibration of a camera with radial distortion that also supports Lie-group behaviors for optimization. More...
 
struct  gtsam::traits< Cal3DS2 >
 
struct  gtsam::traits< const Cal3DS2 >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Cal3DS2_Base &cal)
 
\n

Detailed Description

\n-
Date
Feb 28, 2010
\n+

Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.

\n+

Calibration of a camera with radial distortion.

\n+
Date
Feb 28, 2010
\n+
Author
ydjian @autho Varun Agrawal
\n+
Date
Feb 28, 2010
\n
Author
ydjian
\n
\n Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,40 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Cal3DS2_Base.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Cal3DS2.h File Reference\n+Calibration of a camera with radial distortion, calculations in base class\n+Cal3DS2_Base. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2\n+\u00a0 Calibration of a camera with radial distortion that also supports Lie-\n+ group behaviors for optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be &cal)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Calibration of a camera with radial distortion, calculations in base class\n+Cal3DS2_Base.\n+Calibration of a camera with radial distortion.\n+ Date\n+ Feb 28, 2010\n+ Author\n+ ydjian @autho Varun Agrawal\n Date\n Feb 28, 2010\n Author\n ydjian\n Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\b._\bc_\bp_\bp\n+ * _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00308.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00308.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h File Reference\n \n \n \n \n \n \n \n@@ -96,49 +96,52 @@\n \n \n \n
\n \n-
StereoCamera.h File Reference
\n+
PinholePose.h File Reference
\n
\n
\n \n-

A Stereo Camera based on two Simple Cameras. \n+

Pinhole camera with known calibration. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n \n-\n-\n+\n+\n \n-\n+\n \n-\n+\n \n

\n Classes

class  gtsam::StereoCheiralityException
class  gtsam::PinholeBaseK< CALIBRATION >
 A pinhole camera class that has a Pose3 and a fixed Calibration. More...
 
class  gtsam::StereoCamera
 A stereo camera class, parameterize by left camera pose and stereo calibration. More...
class  gtsam::PinholePose< CALIBRATION >
 A pinhole camera class that has a Pose3 and a fixed Calibration. More...
 
struct  gtsam::traits< StereoCamera >
struct  gtsam::traits< PinholePose< CALIBRATION > >
 
struct  gtsam::traits< const StereoCamera >
struct  gtsam::traits< const PinholePose< CALIBRATION > >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A Stereo Camera based on two Simple Cameras.

\n-

A Rectified Stereo Camera.

\n-
Author
Chris Beall
\n+

Pinhole camera with known calibration.

\n+
Author
Yong-Dian Jian
\n+
\n+Frank Dellaert
\n+
Date
Feb 20, 2015
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,37 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-StereoCamera.h File Reference\n-A Stereo Camera based on two Simple Cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n+PinholePose.h File Reference\n+Pinhole camera with known calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n+\u00a0 A pinhole camera class that has a _\bP_\bo_\bs_\be_\b3 and a f\bfi\bix\bxe\bed\bd Calibration.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba\n-\u00a0 A stereo camera class, parameterize by left camera pose and stereo\n- calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n+\u00a0 A pinhole camera class that has a _\bP_\bo_\bs_\be_\b3 and a f\bfi\bix\bxe\bed\bd Calibration.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A Stereo Camera based on two Simple Cameras.\n-A Rectified Stereo Camera.\n+Pinhole camera with known calibration.\n Author\n- Chris Beall\n+ Yong-Dian Jian\n+ Frank Dellaert\n+ Date\n+ Feb 20, 2015\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+ * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00308.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00308.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,4 @@\n var a00308 = [\n- [\"gtsam::StereoCheiralityException\", \"a03336.html\", null],\n- [\"gtsam::traits< StereoCamera >\", \"a03344.html\", null],\n- [\"gtsam::traits< const StereoCamera >\", \"a03348.html\", null]\n+ [\"gtsam::traits< PinholePose< CALIBRATION > >\", \"a03128.html\", null],\n+ [\"gtsam::traits< const PinholePose< CALIBRATION > >\", \"a03132.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00308_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00308_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h Source File\n \n \n \n \n \n \n \n@@ -98,222 +98,503 @@\n
No Matches
\n \n \n \n \n \n
\n-
StereoCamera.h
\n+
PinholePose.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-\n-\n-
23
\n-
24namespace gtsam {
\n+
20#pragma once
\n+
21
\n+\n+\n+
24#include <boost/make_shared.hpp>
\n
25
\n-
\n-
26class GTSAM_EXPORT StereoCheiralityException: public std::runtime_error {
\n-
27public:
\n-\n-
29 : StereoCheiralityException(std::numeric_limits<Key>::max()) {}
\n-
30
\n-\n-
32 : std::runtime_error("Stereo Cheirality Exception"),
\n-
33 j_(j) {}
\n-
34
\n-
35 Key nearbyVariable() const {
\n-
36 return j_;
\n-
37 }
\n-
38
\n-
39private:
\n-
40 Key j_;
\n-
41};
\n-
\n+
26namespace gtsam {
\n+
27
\n+
33template<typename CALIBRATION>
\n+
\n+\n+
35
\n+
36private:
\n+
37
\n+
38 GTSAM_CONCEPT_MANIFOLD_TYPE(CALIBRATION)
\n+
39
\n+
40 // Get dimensions of calibration type at compile time
\n+
41 static const int DimK = FixedDimension<CALIBRATION>::value;
\n
42
\n-
\n-
47class GTSAM_EXPORT StereoCamera {
\n-
48
\n-
49public:
\n-
50
\n-\n-
56 typedef StereoPoint2Vector MeasurementVector;
\n-
57
\n-
58private:
\n-
59 Pose3 leftCamPose_;
\n-
60 Cal3_S2Stereo::shared_ptr K_;
\n-
61
\n-
62public:
\n-
63
\n-
64 enum {
\n-
65 dimension = 6
\n-
66 };
\n-
67
\n+
43public:
\n+
44
\n+
45 typedef CALIBRATION CalibrationType;
\n+
46
\n+
49
\n+
\n+\n+
52 }
\n+
\n+
53
\n+
\n+
55 explicit PinholeBaseK(const Pose3& pose) :
\n+\n+
57 }
\n+
\n+
58
\n+
62
\n+
63 explicit PinholeBaseK(const Vector &v) :
\n+
64 PinholeBase(v) {
\n+
65 }
\n+
66
\n
70
\n-
\n-\n-
73 K_(new Cal3_S2Stereo()) {
\n-
74 }
\n-
\n-
75
\n-
77 StereoCamera(const Pose3& leftCamPose, const Cal3_S2Stereo::shared_ptr K);
\n-
78
\n-
\n-
80 const Cal3_S2Stereo& calibration() const {
\n-
81 return *K_;
\n-
82 }
\n+
71 virtual ~PinholeBaseK() {
\n+
72 }
\n+
73
\n+
75 virtual const CALIBRATION& calibration() const = 0;
\n+
76
\n+
80
\n+
\n+
82 std::pair<Point2, bool> projectSafe(const Point3& pw) const {
\n+
83 std::pair<Point2, bool> pn = PinholeBase::projectSafe(pw);
\n+
84 pn.first = calibration().uncalibrate(pn.first);
\n+
85 return pn;
\n+
86 }
\n
\n-
83
\n
87
\n-
\n-
89 void print(const std::string& s = "") const {
\n-
90 leftCamPose_.print(s + ".camera.");
\n-
91 K_->print(s + ".calibration.");
\n-
92 }
\n-
\n-
93
\n-
\n-
95 bool equals(const StereoCamera &camera, double tol = 1e-9) const {
\n-
96 return leftCamPose_.equals(camera.leftCamPose_, tol)
\n-
97 && K_->equals(*camera.K_, tol);
\n-
98 }
\n-
\n+
88
\n+
95 template <class POINT>
\n+
\n+\n+\n+
98 OptionalJacobian<2, DimK> Dcal) const {
\n
99
\n-
103
\n-
\n-
105 inline size_t dim() const {
\n-
106 return 6;
\n-
107 }
\n-
\n-
108
\n-
\n-
110 static inline size_t Dim() {
\n-
111 return 6;
\n-
112 }
\n-
\n+
100 // project to normalized coordinates
\n+
101 const Point2 pn = PinholeBase::project2(pw, Dpose, Dpoint);
\n+
102
\n+
103 // uncalibrate to pixel coordinates
\n+
104 Matrix2 Dpi_pn;
\n+
105 const Point2 pi = calibration().uncalibrate(pn, Dcal,
\n+
106 Dpose || Dpoint ? &Dpi_pn : 0);
\n+
107
\n+
108 // If needed, apply chain rule
\n+
109 if (Dpose)
\n+
110 *Dpose = Dpi_pn * *Dpose;
\n+
111 if (Dpoint)
\n+
112 *Dpoint = Dpi_pn * *Dpoint;
\n
113
\n-
\n-
115 inline StereoCamera retract(const Vector& v) const {
\n-
116 return StereoCamera(pose().retract(v), K_);
\n-
117 }
\n-
\n-
118
\n-
\n-
120 inline Vector6 localCoordinates(const StereoCamera& t2) const {
\n-
121 return leftCamPose_.localCoordinates(t2.leftCamPose_);
\n+
114 return pi;
\n+
115 }
\n+
\n+
116
\n+
\n+\n+
119 OptionalJacobian<2, 3> Dpoint = boost::none,
\n+
120 OptionalJacobian<2, DimK> Dcal = boost::none) const {
\n+
121 return _project(pw, Dpose, Dpoint, Dcal);
\n
122 }
\n
\n
123
\n-
127
\n-
\n-
129 const Pose3& pose() const {
\n-
130 return leftCamPose_;
\n-
131 }
\n-
\n-
132
\n-
\n-
134 double baseline() const {
\n-
135 return K_->baseline();
\n+
\n+
125 Point2 reprojectionError(const Point3& pw, const Point2& measured, OptionalJacobian<2, 6> Dpose = boost::none,
\n+
126 OptionalJacobian<2, 3> Dpoint = boost::none,
\n+
127 OptionalJacobian<2, DimK> Dcal = boost::none) const {
\n+
128 return Point2(_project(pw, Dpose, Dpoint, Dcal) - measured);
\n+
129 }
\n+
\n+
130
\n+
\n+\n+
133 OptionalJacobian<2, 2> Dpoint = boost::none,
\n+
134 OptionalJacobian<2, DimK> Dcal = boost::none) const {
\n+
135 return _project(pw, Dpose, Dpoint, Dcal);
\n
136 }
\n
\n
137
\n-
139 StereoPoint2 project(const Point3& point) const;
\n-
140
\n-
145 StereoPoint2 project2(const Point3& point, OptionalJacobian<3, 6> H1 =
\n-
146 boost::none, OptionalJacobian<3, 3> H2 = boost::none) const;
\n-
147
\n-
149 Point3 backproject(const StereoPoint2& z) const;
\n-
150
\n-
155 Point3 backproject2(const StereoPoint2& z,
\n-
156 OptionalJacobian<3, 6> H1 = boost::none,
\n-
157 OptionalJacobian<3, 3> H2 = boost::none) const;
\n-
158
\n-
162
\n-\n-\n-
171 boost::none) const;
\n-
172
\n-
\n-\n-
175 return Eigen::Matrix<double,traits<Measurement>::dimension,1>::Constant(2.0 * K_->fx());;
\n-
176 }
\n-
\n-
177
\n-
179
\n-
180private:
\n-
181
\n-
182 friend class boost::serialization::access;
\n-
183 template<class Archive>
\n-
184 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
185 ar & BOOST_SERIALIZATION_NVP(leftCamPose_);
\n-
186 ar & BOOST_SERIALIZATION_NVP(K_);
\n-
187 }
\n-
188
\n-
189};
\n-
\n-
190
\n-
191template<>
\n-
\n-
192struct traits<StereoCamera> : public internal::Manifold<StereoCamera> {
\n-
193};
\n-
\n-
194
\n-
195template<>
\n-
\n-
196struct traits<const StereoCamera> : public internal::Manifold<StereoCamera> {
\n-
197};
\n-
\n-
198}
\n-
3D Pose
\n-
The most common 5DOF 3D->2D calibration + Stereo baseline.
\n-
A 2D stereo point (uL,uR,v)
\n+
\n+
139 Point3 backproject(const Point2& p, double depth,
\n+
140 OptionalJacobian<3, 6> Dresult_dpose = boost::none,
\n+
141 OptionalJacobian<3, 2> Dresult_dp = boost::none,
\n+
142 OptionalJacobian<3, 1> Dresult_ddepth = boost::none,
\n+
143 OptionalJacobian<3, DimK> Dresult_dcal = boost::none) const {
\n+
144 typedef Eigen::Matrix<double, 2, DimK> Matrix2K;
\n+
145 Matrix2K Dpn_dcal;
\n+
146 Matrix22 Dpn_dp;
\n+
147 const Point2 pn = calibration().calibrate(p, Dresult_dcal ? &Dpn_dcal : 0,
\n+
148 Dresult_dp ? &Dpn_dp : 0);
\n+
149 Matrix32 Dpoint_dpn;
\n+
150 Matrix31 Dpoint_ddepth;
\n+
151 const Point3 point = BackprojectFromCamera(pn, depth,
\n+
152 (Dresult_dp || Dresult_dcal) ? &Dpoint_dpn : 0,
\n+
153 Dresult_ddepth ? &Dpoint_ddepth : 0);
\n+
154 Matrix33 Dresult_dpoint;
\n+
155 const Point3 result = pose().transformFrom(point, Dresult_dpose,
\n+
156 (Dresult_ddepth ||
\n+
157 Dresult_dp ||
\n+
158 Dresult_dcal) ? &Dresult_dpoint : 0);
\n+
159 if (Dresult_dcal)
\n+
160 *Dresult_dcal = Dresult_dpoint * Dpoint_dpn * Dpn_dcal; // (3x3)*(3x2)*(2xDimK)
\n+
161 if (Dresult_dp)
\n+
162 *Dresult_dp = Dresult_dpoint * Dpoint_dpn * Dpn_dp; // (3x3)*(3x2)*(2x2)
\n+
163 if (Dresult_ddepth)
\n+
164 *Dresult_ddepth = Dresult_dpoint * Dpoint_ddepth; // (3x3)*(3x1)
\n+
165
\n+
166 return result;
\n+
167 }
\n+
\n+
168
\n+
\n+\n+
171 const Point2 pn = calibration().calibrate(p);
\n+
172 const Unit3 pc(pn.x(), pn.y(), 1.0); //by convention the last element is 1
\n+
173 return pose().rotation().rotate(pc);
\n+
174 }
\n+
\n+
175
\n+
\n+
181 double range(const Point3& point,
\n+
182 OptionalJacobian<1, 6> Dcamera = boost::none,
\n+
183 OptionalJacobian<1, 3> Dpoint = boost::none) const {
\n+
184 return pose().range(point, Dcamera, Dpoint);
\n+
185 }
\n+
\n+
186
\n+
\n+
192 double range(const Pose3& pose, OptionalJacobian<1, 6> Dcamera = boost::none,
\n+
193 OptionalJacobian<1, 6> Dpose = boost::none) const {
\n+
194 return this->pose().range(pose, Dcamera, Dpose);
\n+
195 }
\n+
\n+
196
\n+
\n+
202 double range(const CalibratedCamera& camera, OptionalJacobian<1, 6> Dcamera =
\n+
203 boost::none, OptionalJacobian<1, 6> Dother = boost::none) const {
\n+
204 return pose().range(camera.pose(), Dcamera, Dother);
\n+
205 }
\n+
\n+
206
\n+
212 template<class CalibrationB>
\n+
\n+
213 double range(const PinholeBaseK<CalibrationB>& camera,
\n+
214 OptionalJacobian<1, 6> Dcamera = boost::none,
\n+
215 OptionalJacobian<1, 6> Dother = boost::none) const {
\n+
216 return pose().range(camera.pose(), Dcamera, Dother);
\n+
217 }
\n+
\n+
218
\n+
219private:
\n+
220
\n+\n+
223 template<class Archive>
\n+
224 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
225 ar
\n+
226 & boost::serialization::make_nvp("PinholeBase",
\n+
227 boost::serialization::base_object<PinholeBase>(*this));
\n+
228 }
\n+
229
\n+
230public:
\n+\n+
232};
\n+
\n+
233// end of class PinholeBaseK
\n+
234
\n+
242template<typename CALIBRATION>
\n+
\n+
243class PinholePose: public PinholeBaseK<CALIBRATION> {
\n+
244
\n+
245private:
\n+
246
\n+\n+
248 boost::shared_ptr<CALIBRATION> K_;
\n+
249
\n+
250public:
\n+
251
\n+
252 enum {
\n+
253 dimension = 6
\n+
254 };
\n+
255
\n+
258
\n+
\n+\n+
261 }
\n+
\n+
262
\n+
\n+
264 explicit PinholePose(const Pose3& pose) :
\n+
265 Base(pose), K_(new CALIBRATION()) {
\n+
266 }
\n+
\n+
267
\n+
\n+
269 PinholePose(const Pose3& pose, const boost::shared_ptr<CALIBRATION>& K) :
\n+
270 Base(pose), K_(K) {
\n+
271 }
\n+
\n+
272
\n+
276
\n+
\n+
284 static PinholePose Level(const boost::shared_ptr<CALIBRATION>& K,
\n+
285 const Pose2& pose2, double height) {
\n+
286 return PinholePose(Base::LevelPose(pose2, height), K);
\n+
287 }
\n+
\n+
288
\n+
\n+
290 static PinholePose Level(const Pose2& pose2, double height) {
\n+
291 return PinholePose::Level(boost::make_shared<CALIBRATION>(), pose2, height);
\n+
292 }
\n+
\n+
293
\n+
\n+
303 static PinholePose Lookat(const Point3& eye, const Point3& target,
\n+
304 const Point3& upVector, const boost::shared_ptr<CALIBRATION>& K =
\n+
305 boost::make_shared<CALIBRATION>()) {
\n+
306 return PinholePose(Base::LookatPose(eye, target, upVector), K);
\n+
307 }
\n+
\n+
308
\n+
312
\n+
\n+
314 explicit PinholePose(const Vector &v) :
\n+
315 Base(v), K_(new CALIBRATION()) {
\n+
316 }
\n+
\n+
317
\n+
\n+
319 PinholePose(const Vector &v, const Vector &K) :
\n+
320 Base(v), K_(new CALIBRATION(K)) {
\n+
321 }
\n+
\n+
322
\n+
323 // Init from Pose3 and calibration
\n+
324 PinholePose(const Pose3 &pose, const Vector &K) :
\n+
325 Base(pose), K_(new CALIBRATION(K)) {
\n+
326 }
\n+
327
\n+
331
\n+
\n+
333 bool equals(const Base &camera, double tol = 1e-9) const {
\n+
334 const PinholePose* e = dynamic_cast<const PinholePose*>(&camera);
\n+
335 return Base::equals(camera, tol) && K_->equals(e->calibration(), tol);
\n+
336 }
\n+
\n+
337
\n+
\n+
339 friend std::ostream& operator<<(std::ostream &os, const PinholePose& camera) {
\n+
340 os << "{R: " << camera.pose().rotation().rpy().transpose();
\n+
341 os << ", t: " << camera.pose().translation().transpose();
\n+
342 if (!camera.K_) os << ", K: none";
\n+
343 else os << ", K: " << *camera.K_;
\n+
344 os << "}";
\n+
345 return os;
\n+
346 }
\n+
\n+
347
\n+
\n+
349 void print(const std::string& s = "PinholePose") const override {
\n+
350 Base::print(s);
\n+
351 if (!K_)
\n+
352 std::cout << "s No calibration given" << std::endl;
\n+
353 else
\n+
354 K_->print(s + ".calibration");
\n+
355 }
\n+
\n+
356
\n+
360
\n+
361 ~PinholePose() override {
\n+
362 }
\n+
363
\n+
\n+
365 const boost::shared_ptr<CALIBRATION>& sharedCalibration() const {
\n+
366 return K_;
\n+
367 }
\n+
\n+
368
\n+
\n+
370 const CALIBRATION& calibration() const override {
\n+
371 return *K_;
\n+
372 }
\n+
\n+
373
\n+
\n+\n+
380 OptionalJacobian<2, 3> Dpoint = boost::none) const {
\n+
381 return Base::project(pw, Dpose, Dpoint);
\n+
382 }
\n+
\n+
383
\n+
\n+\n+
386 OptionalJacobian<2, 2> Dpoint = boost::none) const {
\n+
387 return Base::project(pw, Dpose, Dpoint);
\n+
388 }
\n+
\n+
389
\n+
393
\n+
\n+
395 size_t dim() const {
\n+
396 return 6;
\n+
397 }
\n+
\n+
398
\n+
\n+
400 static size_t Dim() {
\n+
401 return 6;
\n+
402 }
\n+
\n+
403
\n+
\n+
405 PinholePose retract(const Vector6& d) const {
\n+
406 return PinholePose(Base::pose().retract(d), K_);
\n+
407 }
\n+
\n+
408
\n+
\n+
410 Vector6 localCoordinates(const PinholePose& p) const {
\n+
411 return Base::pose().localCoordinates(p.Base::pose());
\n+
412 }
\n+
\n+
413
\n+
\n+\n+
416 return PinholePose(); // assumes that the default constructor is valid
\n+
417 }
\n+
\n+
418
\n+
\n+
420 Matrix34 cameraProjectionMatrix() const {
\n+
421 Matrix34 P = Matrix34(PinholeBase::pose().inverse().matrix().block(0, 0, 3, 4));
\n+
422 return K_->K() * P;
\n+
423 }
\n+
\n+
424
\n+
\n+\n+
427 return Eigen::Matrix<double,traits<Point2>::dimension,1>::Constant(2.0 * K_->fx());;
\n+
428 }
\n+
\n+
430
\n+
431private:
\n+
432
\n+\n+
435 template<class Archive>
\n+
436 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
437 ar
\n+
438 & boost::serialization::make_nvp("PinholeBaseK",
\n+
439 boost::serialization::base_object<Base>(*this));
\n+
440 ar & BOOST_SERIALIZATION_NVP(K_);
\n+
441 }
\n+
442
\n+
443public:
\n+\n+
445};
\n+
\n+
446// end of class PinholePose
\n+
447
\n+
448template<typename CALIBRATION>
\n+
\n+
449struct traits<PinholePose<CALIBRATION> > : public internal::Manifold<
\n+
450 PinholePose<CALIBRATION> > {
\n+
451};
\n+
\n+
452
\n+
453template<typename CALIBRATION>
\n+
\n+
454struct traits<const PinholePose<CALIBRATION> > : public internal::Manifold<
\n+
455 PinholePose<CALIBRATION> > {
\n+
456};
\n+
\n+
457
\n+
458} // \\ gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Calibrated camera for which only pose is unknown.
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n-
Point2_ project(const Point3_ &p_cam)
Expression version of PinholeBase::Project.
Definition expressions.h:131
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
TangentVector localCoordinates(const Class &g) const
localCoordinates as required by manifold concept: finds tangent vector between *this and g
Definition Lie.h:136
\n
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n+
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
The most common 5DOF 3D->2D calibration, stereo version.
Definition Cal3_S2Stereo.h:30
\n+
A pinhole camera class that has a Pose3, functions as base class for all pinhole cameras.
Definition CalibratedCamera.h:52
\n+
static Matrix26 Dpose(const Point2 &pn, double d)
Calculate Jacobian with respect to pose.
Definition CalibratedCamera.cpp:27
\n+
virtual void print(const std::string &s="PinholeBase") const
print
Definition CalibratedCamera.cpp:74
\n+
std::pair< Point2, bool > projectSafe(const Point3 &pw) const
Project a point into the image and check depth.
Definition CalibratedCamera.cpp:109
\n+
const Pose3 & pose() const
return pose, constant version
Definition CalibratedCamera.h:152
\n+
static Pose3 LevelPose(const Pose2 &pose2, double height)
Create a level pose at the given 2D pose and height.
Definition CalibratedCamera.cpp:49
\n+
bool equals(const PinholeBase &camera, double tol=1e-9) const
assert equality up to a tolerance
Definition CalibratedCamera.cpp:69
\n+
static Matrix23 Dpoint(const Point2 &pn, double d, const Matrix3 &Rt)
Calculate Jacobian with respect to point.
Definition CalibratedCamera.cpp:37
\n+
static Point3 BackprojectFromCamera(const Point2 &p, const double depth, OptionalJacobian< 3, 2 > Dpoint=boost::none, OptionalJacobian< 3, 1 > Ddepth=boost::none)
backproject a 2-dimensional point to a 3-dimensional point at given depth
Definition CalibratedCamera.cpp:167
\n+
static Pose3 LookatPose(const Point3 &eye, const Point3 &target, const Point3 &upVector)
Create a camera pose at the given eye position looking at a target point in the scene with the specif...
Definition CalibratedCamera.cpp:58
\n+
Point2 project2(const Point3 &point, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const
Project point into the image Throws a CheiralityException if point behind image plane iff GTSAM_THROW...
Definition CalibratedCamera.cpp:116
\n+
A Calibrated camera class [R|-R't], calibration K=I.
Definition CalibratedCamera.h:247
\n+
A pinhole camera class that has a Pose3 and a fixed Calibration.
Definition PinholePose.h:34
\n+
double range(const CalibratedCamera &camera, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const
Calculate range to a CalibratedCamera.
Definition PinholePose.h:202
\n+
Point2 project(const Unit3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const
project a point at infinity from world coordinates into the image
Definition PinholePose.h:132
\n+
Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const
project a 3D point from world coordinates into the image
Definition PinholePose.h:118
\n+
std::pair< Point2, bool > projectSafe(const Point3 &pw) const
Project a point into the image and check depth.
Definition PinholePose.h:82
\n+
PinholeBaseK()
default constructor
Definition PinholePose.h:51
\n+
double range(const Point3 &point, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 3 > Dpoint=boost::none) const
Calculate range to a landmark.
Definition PinholePose.h:181
\n+
virtual const CALIBRATION & calibration() const =0
return calibration
\n+
Point2 reprojectionError(const Point3 &pw, const Point2 &measured, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const
project a 3D point from world coordinates into the image
Definition PinholePose.h:125
\n+
PinholeBaseK(const Pose3 &pose)
constructor with pose
Definition PinholePose.h:55
\n+
Point3 backproject(const Point2 &p, double depth, OptionalJacobian< 3, 6 > Dresult_dpose=boost::none, OptionalJacobian< 3, 2 > Dresult_dp=boost::none, OptionalJacobian< 3, 1 > Dresult_ddepth=boost::none, OptionalJacobian< 3, DimK > Dresult_dcal=boost::none) const
backproject a 2-dimensional point to a 3-dimensional point at given depth
Definition PinholePose.h:139
\n+
double range(const PinholeBaseK< CalibrationB > &camera, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const
Calculate range to a PinholePoseK derived class.
Definition PinholePose.h:213
\n+
Unit3 backprojectPointAtInfinity(const Point2 &p) const
backproject a 2-dimensional point to a 3-dimensional point at infinity
Definition PinholePose.h:170
\n+
friend class boost::serialization::access
Serialization function.
Definition PinholePose.h:222
\n+
Point2 _project(const POINT &pw, OptionalJacobian< 2, 6 > Dpose, OptionalJacobian< 2, FixedDimension< POINT >::value > Dpoint, OptionalJacobian< 2, DimK > Dcal) const
Templated projection of a point (possibly at infinity) from world coordinate to the image.
Definition PinholePose.h:96
\n+
double range(const Pose3 &pose, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dpose=boost::none) const
Calculate range to another pose.
Definition PinholePose.h:192
\n+
A pinhole camera class that has a Pose3 and a fixed Calibration.
Definition PinholePose.h:243
\n+
static PinholePose Lookat(const Point3 &eye, const Point3 &target, const Point3 &upVector, const boost::shared_ptr< CALIBRATION > &K=boost::make_shared< CALIBRATION >())
Create a camera at the given eye position looking at a target point in the scene with the specified u...
Definition PinholePose.h:303
\n+
PinholePose()
default constructor
Definition PinholePose.h:260
\n+
Matrix34 cameraProjectionMatrix() const
for Linear Triangulation
Definition PinholePose.h:420
\n+
Point2 project2(const Unit3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const
project2 version for point at infinity
Definition PinholePose.h:385
\n+
const CALIBRATION & calibration() const override
return calibration
Definition PinholePose.h:370
\n+
Vector defaultErrorWhenTriangulatingBehindCamera() const
for Nonlinear Triangulation
Definition PinholePose.h:426
\n+
friend std::ostream & operator<<(std::ostream &os, const PinholePose &camera)
stream operator
Definition PinholePose.h:339
\n+
static PinholePose Identity()
for Canonical
Definition PinholePose.h:415
\n+
PinholePose(const Vector &v, const Vector &K)
Init from Vector and calibration.
Definition PinholePose.h:319
\n+
const boost::shared_ptr< CALIBRATION > & sharedCalibration() const
return shared pointer to calibration
Definition PinholePose.h:365
\n+
size_t dim() const
Definition PinholePose.h:395
\n+
Point2 project2(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const
project a point from world coordinate to the image, 2 derivatives only
Definition PinholePose.h:379
\n+
PinholePose retract(const Vector6 &d) const
move a cameras according to d
Definition PinholePose.h:405
\n+
PinholePose(const Vector &v)
Init from 6D vector.
Definition PinholePose.h:314
\n+
PinholePose(const Pose3 &pose, const boost::shared_ptr< CALIBRATION > &K)
constructor with pose and calibration
Definition PinholePose.h:269
\n+
static size_t Dim()
Definition PinholePose.h:400
\n+
friend class boost::serialization::access
Serialization function.
Definition PinholePose.h:434
\n+
bool equals(const Base &camera, double tol=1e-9) const
assert equality up to a tolerance
Definition PinholePose.h:333
\n+
void print(const std::string &s="PinholePose") const override
print
Definition PinholePose.h:349
\n+
static PinholePose Level(const boost::shared_ptr< CALIBRATION > &K, const Pose2 &pose2, double height)
Create a level camera at the given 2D pose and height.
Definition PinholePose.h:284
\n+
PinholePose(const Pose3 &pose)
constructor with pose, uses default calibration
Definition PinholePose.h:264
\n+
static PinholePose Level(const Pose2 &pose2, double height)
PinholePose::level with default calibration.
Definition PinholePose.h:290
\n+
Vector6 localCoordinates(const PinholePose &p) const
return canonical coordinate
Definition PinholePose.h:410
\n+
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
bool equals(const Pose3 &pose, double tol=1e-9) const
assert equality up to a tolerance
Definition Pose3.cpp:157
\n-
void print(const std::string &s="") const
print with optional string
Definition Pose3.cpp:152
\n-
Definition StereoCamera.h:26
\n-
A stereo camera class, parameterize by left camera pose and stereo calibration.
Definition StereoCamera.h:47
\n-
StereoCamera()
Default constructor allocates a calibration!
Definition StereoCamera.h:72
\n-
static size_t Dim()
Dimensionality of the tangent space.
Definition StereoCamera.h:110
\n-
void print(const std::string &s="") const
print
Definition StereoCamera.h:89
\n-
Vector6 localCoordinates(const StereoCamera &t2) const
Local coordinates of manifold neighborhood around current value.
Definition StereoCamera.h:120
\n-
bool equals(const StereoCamera &camera, double tol=1e-9) const
equals
Definition StereoCamera.h:95
\n-
size_t dim() const
Dimensionality of the tangent space.
Definition StereoCamera.h:105
\n-
StereoCamera retract(const Vector &v) const
Updates a with tangent space delta.
Definition StereoCamera.h:115
\n-
StereoPoint2 Measurement
Some classes template on either PinholeCamera or StereoCamera, and this typedef informs those classes...
Definition StereoCamera.h:55
\n-
const Cal3_S2Stereo & calibration() const
Return shared pointer to calibration.
Definition StereoCamera.h:80
\n-
double baseline() const
baseline
Definition StereoCamera.h:134
\n-
const Pose3 & pose() const
pose
Definition StereoCamera.h:129
\n-
Vector defaultErrorWhenTriangulatingBehindCamera() const
for Nonlinear Triangulation
Definition StereoCamera.h:174
\n-
A 2D stereo point, v will be same for rectified images.
Definition StereoPoint2.h:32
\n+
Point3 transformFrom(const Point3 &point, OptionalJacobian< 3, 6 > Hself=boost::none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const
takes point in Pose coordinates and transforms it to world coordinates
Definition Pose3.cpp:347
\n+
double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none, OptionalJacobian< 1, 3 > Hpoint=boost::none) const
Calculate range to a landmark.
Definition Pose3.cpp:399
\n+
const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get translation
Definition Pose3.cpp:308
\n+
const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get rotation
Definition Pose3.cpp:315
\n+
Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
rotate point from rotated coordinate frame to world
Definition Rot3M.cpp:149
\n+
Vector3 rpy(OptionalJacobian< 3, 3 > H=boost::none) const
Use RQ to calculate roll-pitch-yaw angle representation.
Definition Rot3.cpp:192
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,265 +1,662 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-StereoCamera.h\n+PinholePose.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+24#include \n 25\n-_\b2_\b6class GTSAM_EXPORT _\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn: public std::runtime_error {\n-27public:\n-28 _\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn()\n-29 : _\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(std::numeric_limits::max()) {}\n-30\n-31 _\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(_\bK_\be_\by j)\n-32 : std::runtime_error(\"Stereo Cheirality Exception\"),\n-33 j_(j) {}\n-34\n-35 _\bK_\be_\by nearbyVariable() const {\n-36 return j_;\n-37 }\n-38\n-39private:\n-40 _\bK_\be_\by j_;\n-41};\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+33template\n+_\b3_\b4class _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK: public _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be {\n+35\n+36private:\n+37\n+38 GTSAM_CONCEPT_MANIFOLD_TYPE(CALIBRATION)\n+39\n+40 // Get dimensions of calibration type at compile time\n+41 static const int DimK = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n 42\n-_\b4_\b7class GTSAM_EXPORT _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba {\n-48\n-49public:\n-50\n-_\b5_\b5 typedef _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt;\n-56 typedef StereoPoint2Vector MeasurementVector;\n-57\n-58private:\n-59 _\bP_\bo_\bs_\be_\b3 leftCamPose_;\n-60 Cal3_S2Stereo::shared_ptr K_;\n-61\n-62public:\n-63\n-64 enum {\n-65 dimension = 6\n-66 };\n-67\n+43public:\n+44\n+45 typedef CALIBRATION CalibrationType;\n+46\n+49\n+_\b5_\b1 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK() {\n+52 }\n+53\n+_\b5_\b5 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be) :\n+56 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(_\bp_\bo_\bs_\be) {\n+57 }\n+58\n+62\n+63 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK(const Vector &v) :\n+64 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(v) {\n+65 }\n+66\n 70\n-_\b7_\b2 _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba() :\n-73 K_(new _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo()) {\n-74 }\n-75\n-77 _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& leftCamPose, const Cal3_S2Stereo::shared_ptr K);\n-78\n-_\b8_\b0 const _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n-81 return *K_;\n-82 }\n-83\n+71 virtual ~PinholeBaseK() {\n+72 }\n+73\n+_\b7_\b5 virtual const CALIBRATION& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const = 0;\n+76\n+80\n+_\b8_\b2 std::pair _\bp_\br_\bo_\bj_\be_\bc_\bt_\bS_\ba_\bf_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& pw) const {\n+83 std::pair pn = _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bS_\ba_\bf_\be(pw);\n+84 pn.first = _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn().uncalibrate(pn.first);\n+85 return pn;\n+86 }\n 87\n-_\b8_\b9 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const {\n-90 leftCamPose_._\bp_\br_\bi_\bn_\bt(s + \".camera.\");\n-91 K_->print(s + \".calibration.\");\n-92 }\n-93\n-_\b9_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba &camera, double tol = 1e-9) const {\n-96 return leftCamPose_._\be_\bq_\bu_\ba_\bl_\bs(camera.leftCamPose_, tol)\n-97 && K_->equals(*camera.K_, tol);\n-98 }\n+88\n+95 template \n+_\b9_\b6 _\bP_\bo_\bi_\bn_\bt_\b2 _\b__\bp_\br_\bo_\bj_\be_\bc_\bt(const POINT& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be,\n+97 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<2, _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bP_\bO_\bI_\bN_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be> _\bD_\bp_\bo_\bi_\bn_\bt,\n+98 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bD_\bi_\bm_\bK_\b> Dcal) const {\n 99\n-103\n-_\b1_\b0_\b5 inline size_t _\bd_\bi_\bm() const {\n-106 return 6;\n-107 }\n-108\n-_\b1_\b1_\b0 static inline size_t _\bD_\bi_\bm() {\n-111 return 6;\n-112 }\n+100 // project to normalized coordinates\n+101 const _\bP_\bo_\bi_\bn_\bt_\b2 pn = _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt);\n+102\n+103 // uncalibrate to pixel coordinates\n+104 Matrix2 Dpi_pn;\n+105 const _\bP_\bo_\bi_\bn_\bt_\b2 pi = _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn().uncalibrate(pn, Dcal,\n+106 _\bD_\bp_\bo_\bs_\be || _\bD_\bp_\bo_\bi_\bn_\bt ? &Dpi_pn : 0);\n+107\n+108 // If needed, apply chain rule\n+109 if (_\bD_\bp_\bo_\bs_\be)\n+110 *_\bD_\bp_\bo_\bs_\be = Dpi_pn * *_\bD_\bp_\bo_\bs_\be;\n+111 if (_\bD_\bp_\bo_\bi_\bn_\bt)\n+112 *_\bD_\bp_\bo_\bi_\bn_\bt = Dpi_pn * *_\bD_\bp_\bo_\bi_\bn_\bt;\n 113\n-_\b1_\b1_\b5 inline _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& v) const {\n-116 return _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba(pose().retract(v), K_);\n-117 }\n-118\n-_\b1_\b2_\b0 inline Vector6 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba& t2) const {\n-121 return leftCamPose_._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(t2.leftCamPose_);\n+114 return pi;\n+115 }\n+116\n+_\b1_\b1_\b8 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::\n+none,\n+119 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none,\n+120 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bD_\bi_\bm_\bK_\b> Dcal = boost::none) const {\n+121 return _\b__\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt, Dcal);\n 122 }\n 123\n-127\n-_\b1_\b2_\b9 const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be() const {\n-130 return leftCamPose_;\n-131 }\n-132\n-_\b1_\b3_\b4 double _\bb_\ba_\bs_\be_\bl_\bi_\bn_\be() const {\n-135 return K_->baseline();\n+_\b1_\b2_\b5 _\bP_\bo_\bi_\bn_\bt_\b2 _\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b3& pw, const _\bP_\bo_\bi_\bn_\bt_\b2& measured,\n+_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::none,\n+126 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none,\n+127 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bD_\bi_\bm_\bK_\b> Dcal = boost::none) const {\n+128 return _\bP_\bo_\bi_\bn_\bt_\b2(_\b__\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt, Dcal) - measured);\n+129 }\n+130\n+_\b1_\b3_\b2 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bU_\bn_\bi_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::none,\n+133 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none,\n+134 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bD_\bi_\bm_\bK_\b> Dcal = boost::none) const {\n+135 return _\b__\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt, Dcal);\n 136 }\n 137\n-139 _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& point) const;\n-140\n-145 _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 project2(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> H1 =\n-146 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const;\n-147\n-149 _\bP_\bo_\bi_\bn_\bt_\b3 backproject(const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2& z) const;\n-150\n-155 _\bP_\bo_\bi_\bn_\bt_\b3 backproject2(const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2& z,\n-156 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> H1 = boost::none,\n-157 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const;\n-158\n-162\n-169 _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> H1,\n-170 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b0_\b> H3 =\n-171 boost::none) const;\n-172\n-_\b1_\b7_\b4 Vector _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba() const {\n-175 return Eigen::Matrix::dimension,1>::Constant(2.0\n-* K_->fx());;\n-176 }\n-177\n-179\n-180private:\n-181\n-182 friend class boost::serialization::access;\n-183 template\n-184 void serialize(Archive & ar, const unsigned int /*version*/) {\n-185 ar & BOOST_SERIALIZATION_NVP(leftCamPose_);\n-186 ar & BOOST_SERIALIZATION_NVP(K_);\n-187 }\n-188\n-189};\n-190\n-191template<>\n-_\b1_\b9_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {\n-193};\n-194\n-195template<>\n-_\b1_\b9_\b6struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-{\n-197};\n-198}\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n-_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b._\bh\n-The most common 5DOF 3D->2D calibration + Stereo baseline.\n-_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-A 2D stereo point (uL,uR,v)\n+_\b1_\b3_\b9 _\bP_\bo_\bi_\bn_\bt_\b3 _\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b2& p, double depth,\n+140 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Dresult_dpose = boost::none,\n+141 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b2_\b> Dresult_dp = boost::none,\n+142 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Dresult_ddepth = boost::none,\n+143 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\bD_\bi_\bm_\bK_\b> Dresult_dcal = boost::none) const {\n+144 typedef Eigen::Matrix Matrix2K;\n+145 Matrix2K Dpn_dcal;\n+146 Matrix22 Dpn_dp;\n+147 const _\bP_\bo_\bi_\bn_\bt_\b2 pn = _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn().calibrate(p, Dresult_dcal ? &Dpn_dcal : 0,\n+148 Dresult_dp ? &Dpn_dp : 0);\n+149 Matrix32 Dpoint_dpn;\n+150 Matrix31 Dpoint_ddepth;\n+151 const _\bP_\bo_\bi_\bn_\bt_\b3 point = _\bB_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt_\bF_\br_\bo_\bm_\bC_\ba_\bm_\be_\br_\ba(pn, depth,\n+152 (Dresult_dp || Dresult_dcal) ? &Dpoint_dpn : 0,\n+153 Dresult_ddepth ? &Dpoint_ddepth : 0);\n+154 Matrix33 Dresult_dpoint;\n+155 const _\bP_\bo_\bi_\bn_\bt_\b3 result = _\bp_\bo_\bs_\be()._\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm(point, Dresult_dpose,\n+156 (Dresult_ddepth ||\n+157 Dresult_dp ||\n+158 Dresult_dcal) ? &Dresult_dpoint : 0);\n+159 if (Dresult_dcal)\n+160 *Dresult_dcal = Dresult_dpoint * Dpoint_dpn * Dpn_dcal; // (3x3)*(3x2)*\n+(2xDimK)\n+161 if (Dresult_dp)\n+162 *Dresult_dp = Dresult_dpoint * Dpoint_dpn * Dpn_dp; // (3x3)*(3x2)*(2x2)\n+163 if (Dresult_ddepth)\n+164 *Dresult_ddepth = Dresult_dpoint * Dpoint_ddepth; // (3x3)*(3x1)\n+165\n+166 return result;\n+167 }\n+168\n+_\b1_\b7_\b0 _\bU_\bn_\bi_\bt_\b3 _\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt_\bP_\bo_\bi_\bn_\bt_\bA_\bt_\bI_\bn_\bf_\bi_\bn_\bi_\bt_\by(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const {\n+171 const _\bP_\bo_\bi_\bn_\bt_\b2 pn = _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn().calibrate(p);\n+172 const _\bU_\bn_\bi_\bt_\b3 pc(pn.x(), pn.y(), 1.0); //by convention the last element is 1\n+173 return _\bp_\bo_\bs_\be()._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn()._\br_\bo_\bt_\ba_\bt_\be(pc);\n+174 }\n+175\n+_\b1_\b8_\b1 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& point,\n+182 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera = boost::none,\n+183 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n+184 return _\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(point, Dcamera, _\bD_\bp_\bo_\bi_\bn_\bt);\n+185 }\n+186\n+_\b1_\b9_\b2 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera = boost::\n+none,\n+193 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::none) const {\n+194 return this->_\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(pose, Dcamera, _\bD_\bp_\bo_\bs_\be);\n+195 }\n+196\n+_\b2_\b0_\b2 double _\br_\ba_\bn_\bg_\be(const _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba& camera, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera\n+=\n+203 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dother = boost::none) const {\n+204 return _\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(camera._\bp_\bo_\bs_\be(), Dcamera, Dother);\n+205 }\n+206\n+212 template\n+_\b2_\b1_\b3 double _\br_\ba_\bn_\bg_\be(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\bB_\b>& camera,\n+214 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera = boost::none,\n+215 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dother = boost::none) const {\n+216 return _\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(camera._\bp_\bo_\bs_\be(), Dcamera, Dother);\n+217 }\n+218\n+219private:\n+220\n+_\b2_\b2_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+223 template\n+224 void serialize(Archive & ar, const unsigned int /*version*/) {\n+225 ar\n+226 & boost::serialization::make_nvp(\"PinholeBase\",\n+227 boost::serialization::base_object(*this));\n+228 }\n+229\n+230public:\n+231 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+232};\n+233// end of class PinholeBaseK\n+234\n+242template\n+_\b2_\b4_\b3class _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be: public _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK {\n+244\n+245private:\n+246\n+247 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> _\bB_\ba_\bs_\be;\n+248 boost::shared_ptr K_;\n+249\n+250public:\n+251\n+252 enum {\n+253 dimension = 6\n+254 };\n+255\n+258\n+_\b2_\b6_\b0 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be() {\n+261 }\n+262\n+_\b2_\b6_\b4 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be) :\n+265 _\bB_\ba_\bs_\be(_\bp_\bo_\bs_\be), K_(new CALIBRATION()) {\n+266 }\n+267\n+_\b2_\b6_\b9 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be, const boost::shared_ptr& K) :\n+270 _\bB_\ba_\bs_\be(_\bp_\bo_\bs_\be), K_(K) {\n+271 }\n+272\n+276\n+_\b2_\b8_\b4 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be _\bL_\be_\bv_\be_\bl(const boost::shared_ptr& K,\n+285 const _\bP_\bo_\bs_\be_\b2& pose2, double height) {\n+286 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(_\bB_\ba_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl_\bP_\bo_\bs_\be(pose2, height), K);\n+287 }\n+288\n+_\b2_\b9_\b0 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be _\bL_\be_\bv_\be_\bl(const _\bP_\bo_\bs_\be_\b2& pose2, double height) {\n+291 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl(boost::make_shared(), pose2,\n+height);\n+292 }\n+293\n+_\b3_\b0_\b3 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be _\bL_\bo_\bo_\bk_\ba_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& eye, const _\bP_\bo_\bi_\bn_\bt_\b3& target,\n+304 const _\bP_\bo_\bi_\bn_\bt_\b3& upVector, const boost::shared_ptr& K =\n+305 boost::make_shared()) {\n+306 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt_\bP_\bo_\bs_\be(eye, target, upVector), K);\n+307 }\n+308\n+312\n+_\b3_\b1_\b4 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(const Vector &v) :\n+315 _\bB_\ba_\bs_\be(v), K_(new CALIBRATION()) {\n+316 }\n+317\n+_\b3_\b1_\b9 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(const Vector &v, const Vector &K) :\n+320 _\bB_\ba_\bs_\be(v), K_(new CALIBRATION(K)) {\n+321 }\n+322\n+323 // Init from Pose3 and calibration\n+324 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(const _\bP_\bo_\bs_\be_\b3 &_\bp_\bo_\bs_\be, const Vector &K) :\n+325 Base(_\bp_\bo_\bs_\be), K_(new CALIBRATION(K)) {\n+326 }\n+327\n+331\n+_\b3_\b3_\b3 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &camera, double tol = 1e-9) const {\n+334 const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be* e = dynamic_cast(&camera);\n+335 return _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(camera, tol) && K_->_\be_\bq_\bu_\ba_\bl_\bs(e->_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn(), tol);\n+336 }\n+337\n+_\b3_\b3_\b9 friend std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(std::ostream &os, const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be&\n+camera) {\n+340 os << \"{R: \" << camera._\bp_\bo_\bs_\be()._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn()._\br_\bp_\by().transpose();\n+341 os << \", t: \" << camera._\bp_\bo_\bs_\be()._\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn().transpose();\n+342 if (!camera.K_) os << \", K: none\";\n+343 else os << \", K: \" << *camera.K_;\n+344 os << \"}\";\n+345 return os;\n+346 }\n+347\n+_\b3_\b4_\b9 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"PinholePose\") const override {\n+350 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n+351 if (!K_)\n+352 std::cout << \"s No calibration given\" << std::endl;\n+353 else\n+354 K_->print(s + \".calibration\");\n+355 }\n+356\n+360\n+361 _\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be() override {\n+362 }\n+363\n+_\b3_\b6_\b5 const boost::shared_ptr& _\bs_\bh_\ba_\br_\be_\bd_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n+366 return K_;\n+367 }\n+368\n+_\b3_\b7_\b0 const CALIBRATION& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const override {\n+371 return *K_;\n+372 }\n+373\n+_\b3_\b7_\b9 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const _\bP_\bo_\bi_\bn_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::\n+none,\n+380 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n+381 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt);\n+382 }\n+383\n+_\b3_\b8_\b5 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const _\bU_\bn_\bi_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::\n+none,\n+386 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n+387 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt);\n+388 }\n+389\n+393\n+_\b3_\b9_\b5 size_t _\bd_\bi_\bm() const {\n+396 return 6;\n+397 }\n+398\n+_\b4_\b0_\b0 static size_t _\bD_\bi_\bm() {\n+401 return 6;\n+402 }\n+403\n+_\b4_\b0_\b5 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector6& d) const {\n+406 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be()._\br_\be_\bt_\br_\ba_\bc_\bt(d), K_);\n+407 }\n+408\n+_\b4_\b1_\b0 Vector6 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be& p) const {\n+411 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be()._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(p.Base::pose());\n+412 }\n+413\n+_\b4_\b1_\b5 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n+416 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(); // assumes that the default constructor is valid\n+417 }\n+418\n+_\b4_\b2_\b0 Matrix34 _\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx() const {\n+421 Matrix34 P = Matrix34(_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be().inverse().matrix().block(0, 0, 3,\n+4));\n+422 return K_->K() * P;\n+423 }\n+424\n+_\b4_\b2_\b6 Vector _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba() const {\n+427 return Eigen::Matrix::dimension,1>::Constant(2.0 *\n+K_->fx());;\n+428 }\n+430\n+431private:\n+432\n+_\b4_\b3_\b4 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+435 template\n+436 void serialize(Archive & ar, const unsigned int /*version*/) {\n+437 ar\n+438 & boost::serialization::make_nvp(\"PinholeBaseK\",\n+439 boost::serialization::base_object(*this));\n+440 ar & BOOST_SERIALIZATION_NVP(K_);\n+441 }\n+442\n+443public:\n+444 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+445};\n+446// end of class PinholePose\n+447\n+448template\n+_\b4_\b4_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be > : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd<\n+450 PinholePose > {\n+451};\n+452\n+453template\n+_\b4_\b5_\b4struct _\bt_\br_\ba_\bi_\bt_\bs > : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd<\n+455 PinholePose > {\n+456};\n+457\n+458} // \\ gtsam\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+Calibrated camera for which only pose is unknown.\n+_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n Vector3 Point3\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n typedef Point3 to Vector3...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n-Point2_ project(const Point3_ &p_cam)\n-Expression version of PinholeBase::Project.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn expressions.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n TangentVector localCoordinates(const Class &g) const\n localCoordinates as required by manifold concept: finds tangent vector between\n *this and g\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:136\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n Both ManifoldTraits and Testable.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+Give fixed size dimension of a type, fails at compile time if dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n-The most common 5DOF 3D->2D calibration, stereo version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const Pose3 &pose, double tol=1e-9) const\n-assert equality up to a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\") const\n-print with optional string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:26\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba\n-A stereo camera class, parameterize by left camera pose and stereo calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba\n-StereoCamera()\n-Default constructor allocates a calibration!\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-Dimensionality of the tangent space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\") const\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n+A pinhole camera class that has a Pose3, functions as base class for all\n+pinhole cameras.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bp_\bo_\bs_\be\n+static Matrix26 Dpose(const Point2 &pn, double d)\n+Calculate Jacobian with respect to pose.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"PinholeBase\") const\n print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-Vector6 localCoordinates(const StereoCamera &t2) const\n-Local coordinates of manifold neighborhood around current value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const StereoCamera &camera, double tol=1e-9) const\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-Dimensionality of the tangent space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-StereoCamera retract(const Vector &v) const\n-Updates a with tangent space delta.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-StereoPoint2 Measurement\n-Some classes template on either PinholeCamera or StereoCamera, and this typedef\n-informs those classes...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-const Cal3_S2Stereo & calibration() const\n-Return shared pointer to calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bb_\ba_\bs_\be_\bl_\bi_\bn_\be\n-double baseline() const\n-baseline\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\bo_\bs_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bS_\ba_\bf_\be\n+std::pair< Point2, bool > projectSafe(const Point3 &pw) const\n+Project a point into the image and check depth.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be\n const Pose3 & pose() const\n-pose\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba\n+return pose, constant version\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl_\bP_\bo_\bs_\be\n+static Pose3 LevelPose(const Pose2 &pose2, double height)\n+Create a level pose at the given 2D pose and height.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const PinholeBase &camera, double tol=1e-9) const\n+assert equality up to a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bp_\bo_\bi_\bn_\bt\n+static Matrix23 Dpoint(const Point2 &pn, double d, const Matrix3 &Rt)\n+Calculate Jacobian with respect to point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt_\bF_\br_\bo_\bm_\bC_\ba_\bm_\be_\br_\ba\n+static Point3 BackprojectFromCamera(const Point2 &p, const double depth,\n+OptionalJacobian< 3, 2 > Dpoint=boost::none, OptionalJacobian< 3, 1 >\n+Ddepth=boost::none)\n+backproject a 2-dimensional point to a 3-dimensional point at given depth\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt_\bP_\bo_\bs_\be\n+static Pose3 LookatPose(const Point3 &eye, const Point3 &target, const Point3\n+&upVector)\n+Create a camera pose at the given eye position looking at a target point in the\n+scene with the specif...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n+Point2 project2(const Point3 &point, OptionalJacobian< 2, 6 > Dpose=boost::\n+none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const\n+Project point into the image Throws a CheiralityException if point behind image\n+plane iff GTSAM_THROW...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:116\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n+A Calibrated camera class [R|-R't], calibration K=I.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:247\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK\n+A pinhole camera class that has a Pose3 and a fixed Calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const CalibratedCamera &camera, OptionalJacobian< 1, 6 >\n+Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const\n+Calculate range to a CalibratedCamera.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:202\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n+Point2 project(const Unit3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n+OptionalJacobian< 2, 2 > Dpoint=boost::none, OptionalJacobian< 2, DimK >\n+Dcal=boost::none) const\n+project a point at infinity from world coordinates into the image\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n+Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n+OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK >\n+Dcal=boost::none) const\n+project a 3D point from world coordinates into the image\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bS_\ba_\bf_\be\n+std::pair< Point2, bool > projectSafe(const Point3 &pw) const\n+Project a point into the image and check depth.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK\n+PinholeBaseK()\n+default constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const Point3 &point, OptionalJacobian< 1, 6 > Dcamera=boost::none,\n+OptionalJacobian< 1, 3 > Dpoint=boost::none) const\n+Calculate range to a landmark.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:181\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+virtual const CALIBRATION & calibration() const =0\n+return calibration\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n+Point2 reprojectionError(const Point3 &pw, const Point2 &measured,\n+OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 >\n+Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const\n+project a 3D point from world coordinates into the image\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:125\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK\n+PinholeBaseK(const Pose3 &pose)\n+constructor with pose\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt\n+Point3 backproject(const Point2 &p, double depth, OptionalJacobian< 3, 6 >\n+Dresult_dpose=boost::none, OptionalJacobian< 3, 2 > Dresult_dp=boost::none,\n+OptionalJacobian< 3, 1 > Dresult_ddepth=boost::none, OptionalJacobian< 3, DimK\n+> Dresult_dcal=boost::none) const\n+backproject a 2-dimensional point to a 3-dimensional point at given depth\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:139\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const PinholeBaseK< CalibrationB > &camera, OptionalJacobian< 1, 6\n+> Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const\n+Calculate range to a PinholePoseK derived class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:213\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt_\bP_\bo_\bi_\bn_\bt_\bA_\bt_\bI_\bn_\bf_\bi_\bn_\bi_\bt_\by\n+Unit3 backprojectPointAtInfinity(const Point2 &p) const\n+backproject a 2-dimensional point to a 3-dimensional point at infinity\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:170\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:222\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\b__\bp_\br_\bo_\bj_\be_\bc_\bt\n+Point2 _project(const POINT &pw, OptionalJacobian< 2, 6 > Dpose,\n+OptionalJacobian< 2, FixedDimension< POINT >::value > Dpoint, OptionalJacobian<\n+2, DimK > Dcal) const\n+Templated projection of a point (possibly at infinity) from world coordinate to\n+the image.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const Pose3 &pose, OptionalJacobian< 1, 6 > Dcamera=boost::none,\n+OptionalJacobian< 1, 6 > Dpose=boost::none) const\n+Calculate range to another pose.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n+A pinhole camera class that has a Pose3 and a fixed Calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:243\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt\n+static PinholePose Lookat(const Point3 &eye, const Point3 &target, const Point3\n+&upVector, const boost::shared_ptr< CALIBRATION > &K=boost::make_shared<\n+CALIBRATION >())\n+Create a camera at the given eye position looking at a target point in the\n+scene with the specified u...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:303\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n+PinholePose()\n+default constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx\n+Matrix34 cameraProjectionMatrix() const\n+for Linear Triangulation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:420\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n+Point2 project2(const Unit3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n+OptionalJacobian< 2, 2 > Dpoint=boost::none) const\n+project2 version for point at infinity\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:385\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+const CALIBRATION & calibration() const override\n+return calibration\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:370\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba\n Vector defaultErrorWhenTriangulatingBehindCamera() const\n for Nonlinear Triangulation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2\n-A 2D stereo point, v will be same for rectified images.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoPoint2.h:32\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:426\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n+friend std::ostream & operator<<(std::ostream &os, const PinholePose &camera)\n+stream operator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:339\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static PinholePose Identity()\n+for Canonical\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:415\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n+PinholePose(const Vector &v, const Vector &K)\n+Init from Vector and calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:319\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+const boost::shared_ptr< CALIBRATION > & sharedCalibration() const\n+return shared pointer to calibration\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:365\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:395\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n+Point2 project2(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n+OptionalJacobian< 2, 3 > Dpoint=boost::none) const\n+project a point from world coordinate to the image, 2 derivatives only\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:379\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+PinholePose retract(const Vector6 &d) const\n+move a cameras according to d\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:405\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n+PinholePose(const Vector &v)\n+Init from 6D vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:314\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n+PinholePose(const Pose3 &pose, const boost::shared_ptr< CALIBRATION > &K)\n+constructor with pose and calibration\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:269\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:434\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const Base &camera, double tol=1e-9) const\n+assert equality up to a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:333\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"PinholePose\") const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:349\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl\n+static PinholePose Level(const boost::shared_ptr< CALIBRATION > &K, const Pose2\n+&pose2, double height)\n+Create a level camera at the given 2D pose and height.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:284\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n+PinholePose(const Pose3 &pose)\n+constructor with pose, uses default calibration\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:264\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl\n+static PinholePose Level(const Pose2 &pose2, double height)\n+PinholePose::level with default calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:290\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+Vector6 localCoordinates(const PinholePose &p) const\n+return canonical coordinate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:410\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+A 2D pose (Point2,Rot2)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm\n+Point3 transformFrom(const Point3 &point, OptionalJacobian< 3, 6 >\n+Hself=boost::none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const\n+takes point in Pose coordinates and transforms it to world coordinates\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:347\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none,\n+OptionalJacobian< 1, 3 > Hpoint=boost::none) const\n+Calculate range to a landmark.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:399\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n+const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n+get translation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:308\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n+get rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:315\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\be\n+Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none,\n+OptionalJacobian< 3, 3 > H2=boost::none) const\n+rotate point from rotated coordinate frame to world\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:149\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\br_\bp_\by\n+Vector3 rpy(OptionalJacobian< 3, 3 > H=boost::none) const\n+Use RQ to calculate roll-pitch-yaw angle representation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.cpp:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+ * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00311.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00311.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeSet.h File Reference\n \n \n \n \n \n \n \n@@ -94,44 +94,48 @@\n
\n
\n \n \n \n
\n \n-
Similarity3.cpp File Reference
\n+Classes |\n+Namespaces
\n+
PinholeSet.h File Reference
\n \n
\n \n-

Implementation of Similarity3 transform. \n+

A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::PinholeSet< CAMERA >
 PinholeSet: triangulates point and keeps an estimate of it around. More...
 
struct  gtsam::traits< PinholeSet< CAMERA > >
 
struct  gtsam::traits< const PinholeSet< CAMERA > >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Similarity3 &p)
 
\n

Detailed Description

\n-

Implementation of Similarity3 transform.

\n-
Author
Paul Drews
\n-
\n-John Lambert
\n+

A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera.

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Similarity3.cpp File Reference\n-Implementation of Similarity3 transform. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+PinholeSet.h File Reference\n+A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n+\u00a0 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt: triangulates point and keeps an estimate of it around.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3 &p)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implementation of Similarity3 transform.\n+A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera.\n Author\n- Paul Drews\n- John Lambert\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b._\bc_\bp_\bp\n+ * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00314.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00314.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.h File Reference\n \n \n \n \n \n \n \n@@ -94,42 +94,61 @@\n \n \n \n \n \n
\n \n-
Cal3_S2.cpp File Reference
\n+
Similarity3.h File Reference
\n
\n
\n \n-

The most common 5DOF 3D->2D calibration. \n+

Implementation of Similarity3 transform. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Similarity3
 3D similarity transform More...
 
struct  gtsam::Similarity3::ChartAtOrigin
 Chart at the origin. More...
 
struct  gtsam::traits< Similarity3 >
 
struct  gtsam::traits< const Similarity3 >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n+\n+\n+\n

\n Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Cal3_S2 &cal)
 
\n+template<>
Matrix gtsam::wedge< Similarity3 > (const Vector &xi)
 
\n

Detailed Description

\n-

The most common 5DOF 3D->2D calibration.

\n-
Author
Frank Dellaert
\n+

Implementation of Similarity3 transform.

\n+
Author
Paul Drews
\n+
\n+John Lambert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,37 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Cal3_S2.cpp File Reference\n-The most common 5DOF 3D->2D calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Similarity3.h File Reference\n+Implementation of Similarity3 transform. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3\n+\u00a0 3D similarity transform _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+\u00a0 Chart at the origin. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\b__\bS_\b2 &cal)\n+template<>\n+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:w\bwe\bed\bdg\bge\be<\b< S\bSi\bim\bmi\bil\bla\bar\bri\bit\bty\by3\b3 >\b> (const Vector &xi)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-The most common 5DOF 3D->2D calibration.\n+Implementation of Similarity3 transform.\n Author\n- Frank Dellaert\n+ Paul Drews\n+ John Lambert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bc_\bp_\bp\n+ * _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00320.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00320.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point2.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Bundler.h File Reference\n \n \n \n \n \n \n \n@@ -94,63 +94,51 @@\n \n \n \n \n \n
\n \n-
Point2.cpp File Reference
\n+Classes |\n+Namespaces
\n+
Cal3Bundler.h File Reference
\n \n
\n \n-

2D Point \n+

Calibration used by Bundler. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Cal3Bundler
 Calibration used by Bundler. More...
 
struct  gtsam::traits< Cal3Bundler >
 
struct  gtsam::traits< const Cal3Bundler >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-double gtsam::norm2 (const Point2 &p, OptionalJacobian< 1, 2 > H=boost::none)
 Distance of the point from the origin, with Jacobian.
 
\n-double gtsam::distance2 (const Point2 &p1, const Point2 &q, OptionalJacobian< 1, 2 > H1=boost::none, OptionalJacobian< 1, 2 > H2=boost::none)
 distance between two points
 
\n-boost::optional< Point2gtsam::circleCircleIntersection (double R_d, double r_d, double tol)
 
\n-list< Point2gtsam::circleCircleIntersection (Point2 c1, Point2 c2, boost::optional< Point2 > fh)
 
list< Point2gtsam::circleCircleIntersection (Point2 c1, double r1, Point2 c2, double r2, double tol=1e-9)
 Intersect 2 circles.
 
\n-Point2Pair gtsam::means (const std::vector< Point2Pair > &abPointPairs)
 Calculate the two means of a set of Point2 pairs.
 
\n-ostream & gtsam::operator<< (ostream &os, const gtsam::Point2Pair &p)
 
\n

Detailed Description

\n-

2D Point

\n-
Author
Frank Dellaert
\n+

Calibration used by Bundler.

\n+
Date
Sep 25, 2010
\n+
Author
Yong Dian Jian
\n+
\n+Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,48 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Point2.cpp File Reference\n-2D Point _\bM_\bo_\br_\be_\b._\b._\b.\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n-\u00a0 Global functions in a separate testing namespace.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bm2\b2 (const _\bP_\bo_\bi_\bn_\bt_\b2 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1,\n- 2 > H=boost::none)\n-\u00a0 Distance of the point from the origin, with\n- Jacobian.\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bis\bst\bta\ban\bnc\bce\be2\b2 (const _\bP_\bo_\bi_\bn_\bt_\b2 &p1, const _\bP_\bo_\bi_\bn_\bt_\b2 &q,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 2 > H1=boost::none,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 2 > H2=boost::none)\n-\u00a0 distance between two points\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Cal3Bundler.h File Reference\n+Calibration used by Bundler. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br\n+\u00a0 Calibration used by Bundler. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-boost::optional< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bci\bir\brc\bcl\ble\beC\bCi\bir\brc\bcl\ble\beI\bIn\bnt\bte\ber\brs\bse\bec\bct\bti\bio\bon\bn (double R_d, double\n- r_d, double tol)\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b _\b>\n \u00a0\n- list< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bci\bir\brc\bcl\ble\beC\bCi\bir\brc\bcl\ble\beI\bIn\bnt\bte\ber\brs\bse\bec\bct\bti\bio\bon\bn (_\bP_\bo_\bi_\bn_\bt_\b2 c1, _\bP_\bo_\bi_\bn_\bt_\b2\n- c2, boost::optional< _\bP_\bo_\bi_\bn_\bt_\b2 > fh)\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b _\b>\n \u00a0\n- list< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bi_\br_\bc_\bl_\be_\bC_\bi_\br_\bc_\bl_\be_\bI_\bn_\bt_\be_\br_\bs_\be_\bc_\bt_\bi_\bo_\bn (_\bP_\bo_\bi_\bn_\bt_\b2 c1, double\n- r1, _\bP_\bo_\bi_\bn_\bt_\b2 c2, double r2, double tol=1e-9)\n-\u00a0 Intersect 2 circles.\n-\u00a0\n- Point2Pair\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bme\bea\ban\bns\bs (const std::vector< Point2Pair >\n- &abPointPairs)\n-\u00a0 Calculate the two means of a set of Point2 pairs.\n-\u00a0\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const gtsam::\n- Point2Pair &p)\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n+\u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-2D Point\n+Calibration used by Bundler.\n+ Date\n+ Sep 25, 2010\n Author\n- Frank Dellaert\n+ Yong Dian Jian\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bi_\bn_\bt_\b2_\b._\bc_\bp_\bp\n+ * _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00320.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00320.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,4 @@\n var a00320 = [\n- [\"circleCircleIntersection\", \"a00320.html#a93d4e38a582b6f32fc4f301df10721d5\", null],\n- [\"distance2\", \"a00320.html#afd1282dfb080cb393ae60188b4582cb2\", null],\n- [\"means\", \"a00320.html#a9e357cda5287fae1438f86bc4df27a80\", null],\n- [\"norm2\", \"a00320.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\", null]\n+ [\"gtsam::traits< Cal3Bundler >\", \"a02972.html\", null],\n+ [\"gtsam::traits< const Cal3Bundler >\", \"a02976.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00323.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00323.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeSet.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,48 +94,41 @@\n \n \n \n \n \n
\n \n-
PinholeSet.h File Reference
\n+Namespaces |\n+Functions
\n+
Pose2.cpp File Reference
\n \n
\n \n-

A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera. \n+

2D Pose \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::PinholeSet< CAMERA >
 PinholeSet: triangulates point and keeps an estimate of it around. More...
 
struct  gtsam::traits< PinholeSet< CAMERA > >
 
struct  gtsam::traits< const PinholeSet< CAMERA > >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Functions

\n+std::ostream & gtsam::operator<< (std::ostream &os, const Pose2 &pose)
 
\n

Detailed Description

\n-

A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera.

\n-
Author
Frank Dellaert
\n+

2D Pose

\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-PinholeSet.h File Reference\n-A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n-\u00a0 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt: triangulates point and keeps an estimate of it around.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Pose2.cpp File Reference\n+2D Pose _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bP_\bo_\bs_\be_\b2 &pose)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera.\n- Author\n- Frank Dellaert\n+2D Pose\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bS_\be_\bt_\b._\bh\n+ * _\bP_\bo_\bs_\be_\b2_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00329.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00329.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,61 +94,42 @@\n \n \n \n \n \n
\n \n-
Similarity3.h File Reference
\n+
Cal3.cpp File Reference
\n
\n
\n \n-

Implementation of Similarity3 transform. \n+

Common code for all calibration models. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::Similarity3
 3D similarity transform More...
 
struct  gtsam::Similarity3::ChartAtOrigin
 Chart at the origin. More...
 
struct  gtsam::traits< Similarity3 >
 
struct  gtsam::traits< const Similarity3 >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n+\n+\n

\n Functions

\n-template<>
Matrix gtsam::wedge< Similarity3 > (const Vector &xi)
 
\n+std::ostream & gtsam::operator<< (std::ostream &os, const Cal3 &cal)
 
\n

Detailed Description

\n-

Implementation of Similarity3 transform.

\n-
Author
Paul Drews
\n-
\n-John Lambert
\n+

Common code for all calibration models.

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Similarity3.h File Reference\n-Implementation of Similarity3 transform. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3\n-\u00a0 3D similarity transform _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-\u00a0 Chart at the origin. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Cal3.cpp File Reference\n+Common code for all calibration models. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template<>\n- Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:w\bwe\bed\bdg\bge\be<\b< S\bSi\bim\bmi\bil\bla\bar\bri\bit\bty\by3\b3 >\b> (const Vector &xi)\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3 &cal)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implementation of Similarity3 transform.\n+Common code for all calibration models.\n Author\n- Paul Drews\n- John Lambert\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3_\b._\bh\n+ * _\bC_\ba_\bl_\b3_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00332.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00332.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cyclic.h File Reference\n \n \n \n \n \n \n \n@@ -95,83 +95,46 @@\n \n \n \n \n
\n \n-
Rot3.h File Reference
\n+Namespaces
\n+
Cyclic.h File Reference
\n \n
\n \n-

3D rotation represented as a rotation matrix or quaternion \n+

Cyclic group, i.e., the integers modulo N. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::Rot3
 Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIONS is not defined, or as a quaternion if it is defined. More...
class  gtsam::Cyclic< N >
 Cyclic group of order N. More...
 
struct  gtsam::Rot3::CayleyChart
 
struct  gtsam::Rot3::ChartAtOrigin
 
struct  gtsam::traits< Rot3 >
 
struct  gtsam::traits< const Rot3 >
struct  gtsam::traits< Cyclic< N > >
 Define cyclic group to be a model of the Additive Group concept. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-

\n-Macros

\n-#define ROT3_DEFAULT_COORDINATES_MODE   Rot3::CAYLEY
 
\n-\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::Rot3Vector = std::vector< Rot3, Eigen::aligned_allocator< Rot3 > >
 std::vector of Rot3s, mainly for wrapper
 
\n-\n-\n-\n-\n

\n-Functions

pair< Matrix3, Vector3 > gtsam::RQ (const Matrix3 &A, OptionalJacobian< 3, 9 > H=boost::none)
 [RQ] receives a 3 by 3 matrix and returns an upper triangular matrix R and 3 rotation angles corresponding to the rotation matrix Q=Qz'*Qy'*Qx' such that A = R*Q = R*Qz'*Qy'*Qx'.
 
\n

Detailed Description

\n-

3D rotation represented as a rotation matrix or quaternion

\n-
Author
Alireza Fathi
\n-
\n-Christian Potthast
\n-
\n-Frank Dellaert
\n-
\n-Richard Roberts
\n-
\n-Luca Carlone
\n-
\n-Varun Agrawal
\n+

Cyclic group, i.e., the integers modulo N.

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,56 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Rot3.h File Reference\n-3D rotation represented as a rotation matrix or quaternion _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Cyclic.h File Reference\n+Cyclic group, i.e., the integers modulo N. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n- _\bR_\bo_\bt_\b3 is a 3D rotation represented as a rotation matrix if the\n-\u00a0 preprocessor symbol GTSAM_USE_QUATERNIONS is not defined, or as a\n- quaternion if it is defined. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b<_\b _\bN_\b _\b>\n+\u00a0 _\bC_\by_\bc_\bl_\bi_\bc group of order N. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\ba_\by_\bl_\be_\by_\bC_\bh_\ba_\br_\bt\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\bo_\bt_\b3_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bR_\bo_\bt_\b3_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\by_\bc_\bl_\bi_\bc_\b<_\b _\bN_\b _\b>_\b _\b>\n+\u00a0 Define cyclic group to be a model of the Additive Group concept.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 R\bRO\bOT\bT3\b3_\b_D\bDE\bEF\bFA\bAU\bUL\bLT\bT_\b_C\bCO\bOO\bOR\bRD\bDI\bIN\bNA\bAT\bTE\bES\bS_\b_M\bMO\bOD\bDE\bE\u00a0\u00a0\u00a0Rot3::CAYLEY\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:R\bRo\bot\bt3\b3V\bVe\bec\bct\bto\bor\br = std::vector< _\bR_\bo_\bt_\b3, Eigen::aligned_allocator< _\bR_\bo_\bt_\b3 >\n- >\n-\u00a0 std::vector of Rot3s, mainly for wrapper\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-pair< Matrix3, Vector3 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bQ (const Matrix3 &A, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 9 >\n- H=boost::none)\n- [RQ] receives a 3 by 3 matrix and returns an upper\n-\u00a0 triangular matrix R and 3 rotation angles\n- corresponding to the rotation matrix Q=Qz'*Qy'*Qx'\n- such that A = R*Q = R*Qz'*Qy'*Qx'.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-3D rotation represented as a rotation matrix or quaternion\n+Cyclic group, i.e., the integers modulo N.\n Author\n- Alireza Fathi\n- Christian Potthast\n Frank Dellaert\n- Richard Roberts\n- Luca Carlone\n- Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bR_\bo_\bt_\b3_\b._\bh\n+ * _\bC_\by_\bc_\bl_\bi_\bc_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00332.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00332.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,8 +1,4 @@\n var a00332 = [\n- [\"gtsam::Rot3::CayleyChart\", \"a03232.html\", null],\n- [\"gtsam::Rot3::ChartAtOrigin\", \"a03236.html\", null],\n- [\"gtsam::traits< Rot3 >\", \"a03240.html\", null],\n- [\"gtsam::traits< const Rot3 >\", \"a03244.html\", null],\n- [\"Rot3Vector\", \"a00332.html#a52e26554234edf7de94a5e43dd0bcbf9\", null],\n- [\"RQ\", \"a00332.html#a5172b5b6d51bd5348c7e551e1376f60a\", null]\n+ [\"gtsam::Cyclic< N >\", \"a03060.html\", \"a03060\"],\n+ [\"gtsam::traits< Cyclic< N > >\", \"a03064.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00332_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00332_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cyclic.h Source File\n \n \n \n \n \n \n \n@@ -98,443 +98,114 @@\n
No Matches
\n \n \n \n \n \n
\n-
Rot3.h
\n+
Cyclic.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
22// \\callgraph
\n-
23
\n-
24#pragma once
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Group.h>
\n+
21#include <gtsam/base/Testable.h>
\n+
22
\n+
23#include <cassert>
\n+
24#include <iostream> // for cout :-(
\n
25
\n-
26#include <gtsam/geometry/Unit3.h>
\n-\n-
28#include <gtsam/geometry/SO3.h>
\n-
29#include <gtsam/base/concepts.h>
\n-
30#include <gtsam/config.h> // Get GTSAM_USE_QUATERNIONS macro
\n-
31
\n-
32#include <random>
\n-
33
\n-
34// You can override the default coordinate mode using this flag
\n-
35#ifndef ROT3_DEFAULT_COORDINATES_MODE
\n-
36 #ifdef GTSAM_USE_QUATERNIONS
\n-
37 // Exponential map is very cheap for quaternions
\n-
38 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::EXPMAP
\n-
39 #else
\n-
40 // If user doesn't require GTSAM_ROT3_EXPMAP in cmake when building
\n-
41 #ifndef GTSAM_ROT3_EXPMAP
\n-
42 // For rotation matrices, the Cayley transform is a fast retract alternative
\n-
43 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::CAYLEY
\n-
44 #else
\n-
45 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::EXPMAP
\n-
46 #endif
\n-
47 #endif
\n-
48#endif
\n-
49
\n-
50namespace gtsam {
\n-
51
\n-
\n-
58class GTSAM_EXPORT Rot3 : public LieGroup<Rot3, 3> {
\n-
59 private:
\n-
60
\n-
61#ifdef GTSAM_USE_QUATERNIONS
\n-
63 gtsam::Quaternion quaternion_;
\n-
64#else
\n-
65 SO3 rot_;
\n-
66#endif
\n-
67
\n-
68 public:
\n-
71
\n-
73 Rot3();
\n+
26namespace gtsam {
\n+
27
\n+
29template<size_t N>
\n+
\n+
30class Cyclic {
\n+
31 size_t i_;
\n+
32public:
\n+
\n+
34 Cyclic(size_t i) :
\n+
35 i_(i) {
\n+
36 assert(i < N);
\n+
37 }
\n+
\n+
\n+
39 Cyclic():i_(0) {
\n+
40 }
\n+
\n+
41 static Cyclic Identity() { return Cyclic();}
\n+
42
\n+
\n+
44 operator size_t() const {
\n+
45 return i_;
\n+
46 }
\n+
\n+
\n+
48 Cyclic operator+(const Cyclic& h) const {
\n+
49 return (i_ + h.i_) % N;
\n+
50 }
\n+
\n+
\n+
52 Cyclic operator-(const Cyclic& h) const {
\n+
53 return (N + i_ - h.i_) % N;
\n+
54 }
\n+
\n+
\n+
56 Cyclic operator-() const {
\n+
57 return (N - i_) % N;
\n+
58 }
\n+
\n+
\n+
60 void print(const std::string& s = "") const {
\n+
61 std::cout << s << i_ << std::endl;
\n+
62 }
\n+
\n+
\n+
64 bool equals(const Cyclic& other, double tol = 1e-9) const {
\n+
65 return other.i_ == i_;
\n+
66 }
\n+
\n+
67};
\n+
\n+
68
\n+
70template<size_t N>
\n+
\n+
71struct traits<Cyclic<N> > : internal::AdditiveGroupTraits<Cyclic<N> >, //
\n+
72 Testable<Cyclic<N> > {
\n+
73};
\n+
\n
74
\n-
81 Rot3(const Point3& col1, const Point3& col2, const Point3& col3);
\n-
82
\n-
84 Rot3(double R11, double R12, double R13,
\n-
85 double R21, double R22, double R23,
\n-
86 double R31, double R32, double R33);
\n-
87
\n-
95 template <typename Derived>
\n-
96#ifdef GTSAM_USE_QUATERNIONS
\n-
97 explicit Rot3(const Eigen::MatrixBase<Derived>& R) {
\n-
98 quaternion_ = Matrix3(R);
\n-
99 }
\n-
100#else
\n-
\n-
101 explicit Rot3(const Eigen::MatrixBase<Derived>& R) : rot_(R) {
\n-
102 }
\n-
\n-
103#endif
\n-
104
\n-
109#ifdef GTSAM_USE_QUATERNIONS
\n-
110 explicit Rot3(const Matrix3& R) : quaternion_(R) {}
\n-
111#else
\n-
112 explicit Rot3(const Matrix3& R) : rot_(R) {}
\n-
113#endif
\n-
114
\n-
118#ifdef GTSAM_USE_QUATERNIONS
\n-
119 explicit Rot3(const SO3& R) : quaternion_(R.matrix()) {}
\n-
120#else
\n-
121 explicit Rot3(const SO3& R) : rot_(R) {}
\n-
122#endif
\n-
123
\n-
128 Rot3(const Quaternion& q);
\n-
129 Rot3(double w, double x, double y, double z) : Rot3(Quaternion(w, x, y, z)) {}
\n-
130
\n-
137 static Rot3 Random(std::mt19937 & rng);
\n-
138
\n-
140 virtual ~Rot3() {}
\n-
141
\n-
142 /* Static member function to generate some well known rotations */
\n-
143
\n-
145 static Rot3 Rx(double t);
\n-
146
\n-
148 static Rot3 Ry(double t);
\n-
149
\n-
151 static Rot3 Rz(double t);
\n-
152
\n-
154 static Rot3 RzRyRx(double x, double y, double z,
\n-
155 OptionalJacobian<3, 1> Hx = boost::none,
\n-
156 OptionalJacobian<3, 1> Hy = boost::none,
\n-
157 OptionalJacobian<3, 1> Hz = boost::none);
\n-
158
\n-
\n-
160 inline static Rot3 RzRyRx(const Vector& xyz,
\n-
161 OptionalJacobian<3, 3> H = boost::none) {
\n-
162 assert(xyz.size() == 3);
\n-
163 Rot3 out;
\n-
164 if (H) {
\n-
165 Vector3 Hx, Hy, Hz;
\n-
166 out = RzRyRx(xyz(0), xyz(1), xyz(2), Hx, Hy, Hz);
\n-
167 (*H) << Hx, Hy, Hz;
\n-
168 } else
\n-
169 out = RzRyRx(xyz(0), xyz(1), xyz(2));
\n-
170 return out;
\n-
171 }
\n-
\n-
172
\n-
174 static Rot3 Yaw (double t) { return Rz(t); }
\n-
175
\n-
177 static Rot3 Pitch(double t) { return Ry(t); }
\n-
178
\n-
180 static Rot3 Roll (double t) { return Rx(t); }
\n-
181
\n-
\n-
196 static Rot3 Ypr(double y, double p, double r,
\n-
197 OptionalJacobian<3, 1> Hy = boost::none,
\n-
198 OptionalJacobian<3, 1> Hp = boost::none,
\n-
199 OptionalJacobian<3, 1> Hr = boost::none) {
\n-
200 return RzRyRx(r, p, y, Hr, Hp, Hy);
\n-
201 }
\n-
\n-
202
\n-
\n-
204 static Rot3 Quaternion(double w, double x, double y, double z) {
\n-
205 gtsam::Quaternion q(w, x, y, z);
\n-
206 return Rot3(q);
\n-
207 }
\n-
\n-
208
\n-
\n-
215 static Rot3 AxisAngle(const Point3& axis, double angle) {
\n-
216 // Convert to unit vector.
\n-
217 Vector3 unitAxis = Unit3(axis).unitVector();
\n-
218#ifdef GTSAM_USE_QUATERNIONS
\n-
219 return gtsam::Quaternion(Eigen::AngleAxis<double>(angle, unitAxis));
\n-
220#else
\n-
221 return Rot3(SO3::AxisAngle(unitAxis,angle));
\n-
222#endif
\n-
223 }
\n-
\n-
224
\n-
\n-
231 static Rot3 AxisAngle(const Unit3& axis, double angle) {
\n-
232 return AxisAngle(axis.unitVector(),angle);
\n-
233 }
\n-
\n-
234
\n-
\n-
240 static Rot3 Rodrigues(const Vector3& w) {
\n-
241 return Rot3::Expmap(w);
\n-
242 }
\n-
\n-
243
\n-
\n-
251 static Rot3 Rodrigues(double wx, double wy, double wz) {
\n-
252 return Rodrigues(Vector3(wx, wy, wz));
\n-
253 }
\n-
\n-
254
\n-
256 static Rot3 AlignPair(const Unit3& axis, const Unit3& a_p, const Unit3& b_p);
\n-
257
\n-
259 static Rot3 AlignTwoPairs(const Unit3& a_p, const Unit3& b_p, //
\n-
260 const Unit3& a_q, const Unit3& b_q);
\n-
261
\n-
271 static Rot3 ClosestTo(const Matrix3& M) { return Rot3(SO3::ClosestTo(M)); }
\n-
272
\n-
283 Rot3 normalized() const;
\n-
284
\n-
288
\n-
290 void print(const std::string& s="") const;
\n-
291
\n-
293 bool equals(const Rot3& p, double tol = 1e-9) const;
\n-
294
\n-
298
\n-
\n-
300 inline static Rot3 Identity() {
\n-
301 return Rot3();
\n-
302 }
\n-
\n-
303
\n-
305 Rot3 operator*(const Rot3& R2) const;
\n-
306
\n-
\n-
308 Rot3 inverse() const {
\n-
309#ifdef GTSAM_USE_QUATERNIONS
\n-
310 return Rot3(quaternion_.inverse());
\n-
311#else
\n-
312 return Rot3(rot_.matrix().transpose());
\n-
313#endif
\n-
314 }
\n-
\n-
315
\n-
\n-
321 Rot3 conjugate(const Rot3& cRb) const {
\n-
322 // TODO: do more efficiently by using Eigen or quaternion properties
\n-
323 return cRb * (*this) * cRb.inverse();
\n-
324 }
\n-
\n-
325
\n-
329
\n-
\n-\n-\n-
341#ifndef GTSAM_USE_QUATERNIONS
\n-\n-
343#endif
\n-
344 };
\n-
\n-
345
\n-
346#ifndef GTSAM_USE_QUATERNIONS
\n-
347
\n-
348 // Cayley chart around origin
\n-
\n-
349 struct CayleyChart {
\n-
350 static Rot3 Retract(const Vector3& v, OptionalJacobian<3, 3> H = boost::none);
\n-
351 static Vector3 Local(const Rot3& r, OptionalJacobian<3, 3> H = boost::none);
\n-
352 };
\n-
\n-
353
\n-
\n-
355 Rot3 retractCayley(const Vector& omega) const {
\n-
356 return compose(CayleyChart::Retract(omega));
\n-
357 }
\n-
\n-
358
\n-
\n-
360 Vector3 localCayley(const Rot3& other) const {
\n-
361 return CayleyChart::Local(between(other));
\n-
362 }
\n-
\n-
363
\n-
364#endif
\n-
365
\n-
369
\n-
\n-
374 static Rot3 Expmap(const Vector3& v, OptionalJacobian<3,3> H = boost::none) {
\n-
375 if(H) *H = Rot3::ExpmapDerivative(v);
\n-
376#ifdef GTSAM_USE_QUATERNIONS
\n-\n-
378#else
\n-
379 return Rot3(traits<SO3>::Expmap(v));
\n-
380#endif
\n-
381 }
\n-
\n-
382
\n-
387 static Vector3 Logmap(const Rot3& R, OptionalJacobian<3,3> H = boost::none);
\n-
388
\n-
390 static Matrix3 ExpmapDerivative(const Vector3& x);
\n-
391
\n-
393 static Matrix3 LogmapDerivative(const Vector3& x);
\n-
394
\n-
396 Matrix3 AdjointMap() const { return matrix(); }
\n-
397
\n-
398 // Chart at origin, depends on compile-time flag ROT3_DEFAULT_COORDINATES_MODE
\n-
\n-\n-
400 static Rot3 Retract(const Vector3& v, ChartJacobian H = boost::none);
\n-
401 static Vector3 Local(const Rot3& r, ChartJacobian H = boost::none);
\n-
402 };
\n-
\n-
403
\n-
404 using LieGroup<Rot3, 3>::inverse; // version with derivative
\n-
405
\n-
409
\n-
413 Point3 rotate(const Point3& p, OptionalJacobian<3,3> H1 = boost::none,
\n-
414 OptionalJacobian<3,3> H2 = boost::none) const;
\n-
415
\n-
417 Point3 operator*(const Point3& p) const;
\n-
418
\n-
420 Point3 unrotate(const Point3& p, OptionalJacobian<3,3> H1 = boost::none,
\n-
421 OptionalJacobian<3,3> H2=boost::none) const;
\n-
422
\n-
426
\n-
428 Unit3 rotate(const Unit3& p, OptionalJacobian<2,3> HR = boost::none,
\n-
429 OptionalJacobian<2,2> Hp = boost::none) const;
\n-
430
\n-
432 Unit3 unrotate(const Unit3& p, OptionalJacobian<2,3> HR = boost::none,
\n-
433 OptionalJacobian<2,2> Hp = boost::none) const;
\n-
434
\n-
436 Unit3 operator*(const Unit3& p) const;
\n-
437
\n-
441
\n-
443 Matrix3 matrix() const;
\n-
444
\n-
448 Matrix3 transpose() const;
\n-
449
\n-
451 Point3 column(int index) const;
\n-
452
\n-
453 Point3 r1() const;
\n-
454 Point3 r2() const;
\n-
455 Point3 r3() const;
\n-
456
\n-
461 Vector3 xyz(OptionalJacobian<3, 3> H = boost::none) const;
\n-
462
\n-
467 Vector3 ypr(OptionalJacobian<3, 3> H = boost::none) const;
\n-
468
\n-
473 Vector3 rpy(OptionalJacobian<3, 3> H = boost::none) const;
\n-
474
\n-
481 double roll(OptionalJacobian<1, 3> H = boost::none) const;
\n-
482
\n-
489 double pitch(OptionalJacobian<1, 3> H = boost::none) const;
\n-
490
\n-
497 double yaw(OptionalJacobian<1, 3> H = boost::none) const;
\n-
498
\n-
502
\n-
511 std::pair<Unit3, double> axisAngle() const;
\n-
512
\n-
516 gtsam::Quaternion toQuaternion() const;
\n-
517
\n-
518#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
526 Vector GTSAM_DEPRECATED quaternion() const;
\n-
527#endif
\n-
528
\n-
534 Rot3 slerp(double t, const Rot3& other) const;
\n-
535
\n-
537 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &os, const Rot3& p);
\n-
538
\n-
540
\n-
541 private:
\n-
543 friend class boost::serialization::access;
\n-
544 template <class ARCHIVE>
\n-
545 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
546#ifndef GTSAM_USE_QUATERNIONS
\n-
547 Matrix3& M = rot_.matrix_;
\n-
548 ar& boost::serialization::make_nvp("rot11", M(0, 0));
\n-
549 ar& boost::serialization::make_nvp("rot12", M(0, 1));
\n-
550 ar& boost::serialization::make_nvp("rot13", M(0, 2));
\n-
551 ar& boost::serialization::make_nvp("rot21", M(1, 0));
\n-
552 ar& boost::serialization::make_nvp("rot22", M(1, 1));
\n-
553 ar& boost::serialization::make_nvp("rot23", M(1, 2));
\n-
554 ar& boost::serialization::make_nvp("rot31", M(2, 0));
\n-
555 ar& boost::serialization::make_nvp("rot32", M(2, 1));
\n-
556 ar& boost::serialization::make_nvp("rot33", M(2, 2));
\n-
557#else
\n-
558 ar& boost::serialization::make_nvp("w", quaternion_.w());
\n-
559 ar& boost::serialization::make_nvp("x", quaternion_.x());
\n-
560 ar& boost::serialization::make_nvp("y", quaternion_.y());
\n-
561 ar& boost::serialization::make_nvp("z", quaternion_.z());
\n-
562#endif
\n-
563 }
\n-
564
\n-
565#ifdef GTSAM_USE_QUATERNIONS
\n-
566 // only align if quaternion, Matrix3 has no alignment requirements
\n-
567 public:
\n-\n-
569#endif
\n-
570 };
\n-
\n-
571
\n-
573 using Rot3Vector = std::vector<Rot3, Eigen::aligned_allocator<Rot3> >;
\n-
574
\n-
585 GTSAM_EXPORT std::pair<Matrix3, Vector3> RQ(
\n-
586 const Matrix3& A, OptionalJacobian<3, 9> H = boost::none);
\n-
587
\n-
588 template<>
\n-
589 struct traits<Rot3> : public internal::LieGroup<Rot3> {};
\n-
590
\n-
591 template<>
\n-
592 struct traits<const Rot3> : public internal::LieGroup<Rot3> {};
\n-
593
\n-
594} // namespace gtsam
\n-
595
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Lie Group wrapper for Eigen Quaternions.
\n-
3*3 matrix representation of SO(3)
\n+
75} // \\namespace gtsam
\n+
76
\n+
Concept check class for variable types with Group properties.
\n+
Concept check for values that can be used in unit tests.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
pair< Matrix3, Vector3 > RQ(const Matrix3 &A, OptionalJacobian< 3, 9 > H)
[RQ] receives a 3 by 3 matrix and returns an upper triangular matrix R and 3 rotation angles correspo...
Definition Rot3.cpp:260
\n-
std::vector< Rot3, Eigen::aligned_allocator< Rot3 > > Rot3Vector
std::vector of Rot3s, mainly for wrapper
Definition Rot3.h:573
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
const MATRIX::ConstColXpr column(const MATRIX &A, size_t j)
Extracts a column view from a matrix that avoids a copy.
Definition Matrix.h:211
\n-
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n-
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
static Rot3 Identity()
identity rotation for group operation
Definition Rot3.h:300
\n-
Rot3 retractCayley(const Vector &omega) const
Retraction from R^3 to Rot3 manifold using the Cayley transform.
Definition Rot3.h:355
\n-
Matrix3 AdjointMap() const
Calculate Adjoint map.
Definition Rot3.h:396
\n-
static Rot3 ClosestTo(const Matrix3 &M)
Static, named constructor that finds Rot3 element closest to M in Frobenius norm.
Definition Rot3.h:271
\n-
virtual ~Rot3()
Virtual destructor.
Definition Rot3.h:140
\n-
static Rot3 Yaw(double t)
Positive yaw is to right (as in aircraft heading). See ypr.
Definition Rot3.h:174
\n-
static Rot3 AxisAngle(const Unit3 &axis, double angle)
Convert from axis/angle representation.
Definition Rot3.h:231
\n-
Rot3(const Matrix3 &R)
Constructor from a rotation matrix Overload version for Matrix3 to avoid casting in quaternion mode.
Definition Rot3.h:112
\n-
static Rot3 Rodrigues(const Vector3 &w)
Rodrigues' formula to compute an incremental rotation.
Definition Rot3.h:240
\n-
static Rot3 AxisAngle(const Point3 &axis, double angle)
Convert from axis/angle representation.
Definition Rot3.h:215
\n-
static Rot3 Pitch(double t)
Positive pitch is up (increasing aircraft altitude).See ypr.
Definition Rot3.h:177
\n-
static Rot3 RzRyRx(const Vector &xyz, OptionalJacobian< 3, 3 > H=boost::none)
Rotations around Z, Y, then X axes as in http://en.wikipedia.org/wiki/Rotation_matrix,...
Definition Rot3.h:160
\n-
Vector3 localCayley(const Rot3 &other) const
Inverse of retractCayley.
Definition Rot3.h:360
\n-
static Rot3 Quaternion(double w, double x, double y, double z)
Create from Quaternion coefficients.
Definition Rot3.h:204
\n-
Rot3 conjugate(const Rot3 &cRb) const
Conjugation: given a rotation acting in frame B, compute rotation c1Rc2 acting in a frame C.
Definition Rot3.h:321
\n-
static Rot3 Rodrigues(double wx, double wy, double wz)
Rodrigues' formula to compute an incremental rotation.
Definition Rot3.h:251
\n-
Rot3 inverse() const
inverse of a rotation
Definition Rot3.h:308
\n-
Rot3(const SO3 &R)
Constructor from an SO3 instance.
Definition Rot3.h:121
\n-
static Rot3 Expmap(const Vector3 &v, OptionalJacobian< 3, 3 > H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates using Rodrigues' formula.
Definition Rot3.h:374
\n-
static Rot3 Ypr(double y, double p, double r, OptionalJacobian< 3, 1 > Hy=boost::none, OptionalJacobian< 3, 1 > Hp=boost::none, OptionalJacobian< 3, 1 > Hr=boost::none)
Returns rotation nRb from body to nav frame.
Definition Rot3.h:196
\n-
CoordinatesMode
The method retract() is used to map from the tangent space back to the manifold.
Definition Rot3.h:339
\n-
@ CAYLEY
Retract and localCoordinates using the Cayley transform.
Definition Rot3.h:342
\n-
@ EXPMAP
Use the Lie group exponential map to retract.
Definition Rot3.h:340
\n-
Rot3(const Eigen::MatrixBase< Derived > &R)
Constructor from a rotation matrix Version for generic matrices.
Definition Rot3.h:101
\n-
Definition Rot3.h:349
\n-
Definition Rot3.h:399
\n-\n-
MatrixNN matrix_
Rotation matrix.
Definition SOn.h:62
\n-
const MatrixNN & matrix() const
Return matrix.
Definition SOn.h:155
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n-
Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const
Return unit-norm Vector.
Definition Unit3.cpp:151
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
Cyclic group of order N.
Definition Cyclic.h:30
\n+
bool equals(const Cyclic &other, double tol=1e-9) const
equals with an tolerance, prints out message if unequal
Definition Cyclic.h:64
\n+
void print(const std::string &s="") const
print with optional string
Definition Cyclic.h:60
\n+
Cyclic()
Default constructor yields identity.
Definition Cyclic.h:39
\n+
Cyclic(size_t i)
Constructor.
Definition Cyclic.h:34
\n+
Cyclic operator-(const Cyclic &h) const
Subtraction modulo N.
Definition Cyclic.h:52
\n+
Cyclic operator+(const Cyclic &h) const
Addition modulo N.
Definition Cyclic.h:48
\n+
Cyclic operator-() const
Inverse.
Definition Cyclic.h:56
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,543 +1,118 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Rot3.h\n+Cyclic.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-22// \\callgraph\n-23\n-24#pragma once\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bG_\br_\bo_\bu_\bp_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+22\n+23#include \n+24#include // for cout :-(\n 25\n-26#include \n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\b3_\b._\bh>\n-29#include \n-30#include // Get GTSAM_USE_QUATERNIONS macro\n-31\n-32#include \n-33\n-34// You can override the default coordinate mode using this flag\n-35#ifndef ROT3_DEFAULT_COORDINATES_MODE\n-36 #ifdef GTSAM_USE_QUATERNIONS\n-37 // Exponential map is very cheap for quaternions\n-38 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::EXPMAP\n-39 #else\n-40 // If user doesn't require GTSAM_ROT3_EXPMAP in cmake when building\n-41 #ifndef GTSAM_ROT3_EXPMAP\n-42 // For rotation matrices, the Cayley transform is a fast retract alternative\n-43 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::CAYLEY\n-44 #else\n-45 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::EXPMAP\n-46 #endif\n-47 #endif\n-48#endif\n-49\n-50namespace _\bg_\bt_\bs_\ba_\bm {\n-51\n-_\b5_\b8class GTSAM_EXPORT _\bR_\bo_\bt_\b3 : public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n-59 private:\n-60\n-61#ifdef GTSAM_USE_QUATERNIONS\n-63 gtsam::Quaternion quaternion_;\n-64#else\n-65 _\bS_\bO_\b3 rot_;\n-66#endif\n-67\n-68 public:\n-71\n-73 _\bR_\bo_\bt_\b3();\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+29template\n+_\b3_\b0class _\bC_\by_\bc_\bl_\bi_\bc {\n+31 size_t i_;\n+32public:\n+_\b3_\b4 _\bC_\by_\bc_\bl_\bi_\bc(size_t i) :\n+35 i_(i) {\n+36 assert(i < N);\n+37 }\n+_\b3_\b9 _\bC_\by_\bc_\bl_\bi_\bc():i_(0) {\n+40 }\n+41 static _\bC_\by_\bc_\bl_\bi_\bc Identity() { return _\bC_\by_\bc_\bl_\bi_\bc();}\n+42\n+_\b4_\b4 operator size_t() const {\n+45 return i_;\n+46 }\n+_\b4_\b8 _\bC_\by_\bc_\bl_\bi_\bc _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bC_\by_\bc_\bl_\bi_\bc& h) const {\n+49 return (i_ + h.i_) % N;\n+50 }\n+_\b5_\b2 _\bC_\by_\bc_\bl_\bi_\bc _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bC_\by_\bc_\bl_\bi_\bc& h) const {\n+53 return (N + i_ - h.i_) % N;\n+54 }\n+_\b5_\b6 _\bC_\by_\bc_\bl_\bi_\bc _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-() const {\n+57 return (N - i_) % N;\n+58 }\n+_\b6_\b0 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const {\n+61 std::cout << s << i_ << std::endl;\n+62 }\n+_\b6_\b4 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\by_\bc_\bl_\bi_\bc& other, double tol = 1e-9) const {\n+65 return other.i_ == i_;\n+66 }\n+67};\n+68\n+70template\n+_\b7_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\by_\bc_\bl_\bi_\bc > : internal::AdditiveGroupTraits >, //\n+72 _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {\n+73};\n 74\n-81 _\bR_\bo_\bt_\b3(const _\bP_\bo_\bi_\bn_\bt_\b3& col1, const _\bP_\bo_\bi_\bn_\bt_\b3& col2, const _\bP_\bo_\bi_\bn_\bt_\b3& col3);\n-82\n-84 _\bR_\bo_\bt_\b3(double R11, double R12, double R13,\n-85 double R21, double R22, double R23,\n-86 double R31, double R32, double R33);\n-87\n-95 template \n-96#ifdef GTSAM_USE_QUATERNIONS\n-97 explicit _\bR_\bo_\bt_\b3(const Eigen::MatrixBase& R) {\n-98 quaternion_ = Matrix3(R);\n-99 }\n-100#else\n-_\b1_\b0_\b1 explicit _\bR_\bo_\bt_\b3(const Eigen::MatrixBase& R) : rot_(R) {\n-102 }\n-103#endif\n-104\n-109#ifdef GTSAM_USE_QUATERNIONS\n-110 explicit _\bR_\bo_\bt_\b3(const Matrix3& R) : quaternion_(R) {}\n-111#else\n-_\b1_\b1_\b2 explicit _\bR_\bo_\bt_\b3(const Matrix3& R) : rot_(R) {}\n-113#endif\n-114\n-118#ifdef GTSAM_USE_QUATERNIONS\n-119 explicit _\bR_\bo_\bt_\b3(const _\bS_\bO_\b3& R) : quaternion_(R.matrix()) {}\n-120#else\n-_\b1_\b2_\b1 explicit _\bR_\bo_\bt_\b3(const _\bS_\bO_\b3& R) : rot_(R) {}\n-122#endif\n-123\n-128 _\bR_\bo_\bt_\b3(const Quaternion& q);\n-129 _\bR_\bo_\bt_\b3(double w, double x, double y, double z) : _\bR_\bo_\bt_\b3(Quaternion(w, x, y, z))\n-{}\n-130\n-137 static Rot3 Random(std::mt19937 & rng);\n-138\n-_\b1_\b4_\b0 virtual _\b~_\bR_\bo_\bt_\b3() {}\n-141\n-142 /* Static member function to generate some well known rotations */\n-143\n-145 static _\bR_\bo_\bt_\b3 Rx(double t);\n-146\n-148 static _\bR_\bo_\bt_\b3 Ry(double t);\n-149\n-151 static _\bR_\bo_\bt_\b3 Rz(double t);\n-152\n-154 static _\bR_\bo_\bt_\b3 RzRyRx(double x, double y, double z,\n-155 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hx = boost::none,\n-156 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hy = boost::none,\n-157 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hz = boost::none);\n-158\n-_\b1_\b6_\b0 inline static _\bR_\bo_\bt_\b3 _\bR_\bz_\bR_\by_\bR_\bx(const Vector& xyz,\n-161 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::none) {\n-162 assert(xyz.size() == 3);\n-163 _\bR_\bo_\bt_\b3 out;\n-164 if (H) {\n-165 Vector3 Hx, Hy, Hz;\n-166 out = RzRyRx(xyz(0), xyz(1), xyz(2), Hx, Hy, Hz);\n-167 (*H) << Hx, Hy, Hz;\n-168 } else\n-169 out = RzRyRx(xyz(0), xyz(1), xyz(2));\n-170 return out;\n-171 }\n-172\n-_\b1_\b7_\b4 static _\bR_\bo_\bt_\b3 _\bY_\ba_\bw (double t) { return Rz(t); }\n-175\n-_\b1_\b7_\b7 static _\bR_\bo_\bt_\b3 _\bP_\bi_\bt_\bc_\bh(double t) { return Ry(t); }\n-178\n-180 static _\bR_\bo_\bt_\b3 Roll (double t) { return Rx(t); }\n-181\n-_\b1_\b9_\b6 static _\bR_\bo_\bt_\b3 _\bY_\bp_\br(double y, double p, double r,\n-197 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hy = boost::none,\n-198 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hp = boost::none,\n-199 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hr = boost::none) {\n-200 return RzRyRx(r, p, y, Hr, Hp, Hy);\n-201 }\n-202\n-_\b2_\b0_\b4 static _\bR_\bo_\bt_\b3 _\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn(double w, double x, double y, double z) {\n-205 gtsam::Quaternion q(w, x, y, z);\n-206 return _\bR_\bo_\bt_\b3(q);\n-207 }\n-208\n-_\b2_\b1_\b5 static _\bR_\bo_\bt_\b3 _\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& axis, double angle) {\n-216 // Convert to unit vector.\n-217 Vector3 unitAxis = _\bU_\bn_\bi_\bt_\b3(axis)._\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br();\n-218#ifdef GTSAM_USE_QUATERNIONS\n-219 return gtsam::Quaternion(Eigen::AngleAxis(angle, unitAxis));\n-220#else\n-221 return _\bR_\bo_\bt_\b3(SO3::AxisAngle(unitAxis,angle));\n-222#endif\n-223 }\n-224\n-_\b2_\b3_\b1 static _\bR_\bo_\bt_\b3 _\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be(const _\bU_\bn_\bi_\bt_\b3& axis, double angle) {\n-232 return AxisAngle(axis._\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br(),angle);\n-233 }\n-234\n-_\b2_\b4_\b0 static _\bR_\bo_\bt_\b3 _\bR_\bo_\bd_\br_\bi_\bg_\bu_\be_\bs(const Vector3& w) {\n-241 return Rot3::Expmap(w);\n-242 }\n-243\n-_\b2_\b5_\b1 static _\bR_\bo_\bt_\b3 _\bR_\bo_\bd_\br_\bi_\bg_\bu_\be_\bs(double wx, double wy, double wz) {\n-252 return Rodrigues(Vector3(wx, wy, wz));\n-253 }\n-254\n-256 static _\bR_\bo_\bt_\b3 AlignPair(const _\bU_\bn_\bi_\bt_\b3& axis, const _\bU_\bn_\bi_\bt_\b3& a_p, const _\bU_\bn_\bi_\bt_\b3&\n-b_p);\n-257\n-259 static _\bR_\bo_\bt_\b3 AlignTwoPairs(const _\bU_\bn_\bi_\bt_\b3& a_p, const _\bU_\bn_\bi_\bt_\b3& b_p, //\n-260 const _\bU_\bn_\bi_\bt_\b3& a_q, const _\bU_\bn_\bi_\bt_\b3& b_q);\n-261\n-_\b2_\b7_\b1 static _\bR_\bo_\bt_\b3 _\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo(const Matrix3& M) { return _\bR_\bo_\bt_\b3(SO3::ClosestTo(M)); }\n-272\n-283 _\bR_\bo_\bt_\b3 normalized() const;\n-284\n-288\n-290 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\") const;\n-291\n-293 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bR_\bo_\bt_\b3& p, double tol = 1e-9) const;\n-294\n-298\n-_\b3_\b0_\b0 inline static _\bR_\bo_\bt_\b3 _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n-301 return _\bR_\bo_\bt_\b3();\n-302 }\n-303\n-305 _\bR_\bo_\bt_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bR_\bo_\bt_\b3& R2) const;\n-306\n-_\b3_\b0_\b8 _\bR_\bo_\bt_\b3 _\bi_\bn_\bv_\be_\br_\bs_\be() const {\n-309#ifdef GTSAM_USE_QUATERNIONS\n-310 return _\bR_\bo_\bt_\b3(quaternion_.inverse());\n-311#else\n-312 return _\bR_\bo_\bt_\b3(rot_._\bm_\ba_\bt_\br_\bi_\bx().transpose());\n-313#endif\n-314 }\n-315\n-_\b3_\b2_\b1 _\bR_\bo_\bt_\b3 _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be(const _\bR_\bo_\bt_\b3& cRb) const {\n-322 // TODO: do more efficiently by using Eigen or quaternion properties\n-323 return cRb * (*this) * cRb._\bi_\bn_\bv_\be_\br_\bs_\be();\n-324 }\n-325\n-329\n-_\b3_\b3_\b9 enum _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\bM_\bo_\bd_\be {\n-_\b3_\b4_\b0 _\bE_\bX_\bP_\bM_\bA_\bP,\n-341#ifndef GTSAM_USE_QUATERNIONS\n-_\b3_\b4_\b2 _\bC_\bA_\bY_\bL_\bE_\bY,\n-343#endif\n-344 };\n-345\n-346#ifndef GTSAM_USE_QUATERNIONS\n-347\n-348 // Cayley chart around origin\n-_\b3_\b4_\b9 struct _\bC_\ba_\by_\bl_\be_\by_\bC_\bh_\ba_\br_\bt {\n-350 static _\bR_\bo_\bt_\b3 Retract(const Vector3& v, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::\n-none);\n-351 static Vector3 Local(const _\bR_\bo_\bt_\b3& r, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::\n-none);\n-352 };\n-353\n-_\b3_\b5_\b5 _\bR_\bo_\bt_\b3 _\br_\be_\bt_\br_\ba_\bc_\bt_\bC_\ba_\by_\bl_\be_\by(const Vector& omega) const {\n-356 return compose(CayleyChart::Retract(omega));\n-357 }\n-358\n-_\b3_\b6_\b0 Vector3 _\bl_\bo_\bc_\ba_\bl_\bC_\ba_\by_\bl_\be_\by(const _\bR_\bo_\bt_\b3& other) const {\n-361 return CayleyChart::Local(between(other));\n-362 }\n-363\n-364#endif\n-365\n-369\n-_\b3_\b7_\b4 static _\bR_\bo_\bt_\b3 _\bE_\bx_\bp_\bm_\ba_\bp(const Vector3& v, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H = boost::none)\n-{\n-375 if(H) *H = Rot3::ExpmapDerivative(v);\n-376#ifdef GTSAM_USE_QUATERNIONS\n-377 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(v);\n-378#else\n-379 return _\bR_\bo_\bt_\b3(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bO_\b3_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(v));\n-380#endif\n-381 }\n-382\n-387 static Vector3 Logmap(const _\bR_\bo_\bt_\b3& R, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H = boost::\n-none);\n-388\n-390 static Matrix3 ExpmapDerivative(const Vector3& x);\n-391\n-393 static Matrix3 LogmapDerivative(const Vector3& x);\n-394\n-_\b3_\b9_\b6 Matrix3 _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const { return matrix(); }\n-397\n-398 // Chart at origin, depends on compile-time flag\n-ROT3_DEFAULT_COORDINATES_MODE\n-_\b3_\b9_\b9 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n-400 static _\bR_\bo_\bt_\b3 Retract(const Vector3& v, ChartJacobian H = boost::none);\n-401 static Vector3 Local(const _\bR_\bo_\bt_\b3& r, ChartJacobian H = boost::none);\n-402 };\n-403\n-404 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bR_\bo_\bt_\b3, 3>::inverse; // version with derivative\n-405\n-409\n-413 _\bP_\bo_\bi_\bn_\bt_\b3 rotate(const _\bP_\bo_\bi_\bn_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H1 = boost::none,\n-414 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H2 = boost::none) const;\n-415\n-417 _\bP_\bo_\bi_\bn_\bt_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bi_\bn_\bt_\b3& p) const;\n-418\n-420 _\bP_\bo_\bi_\bn_\bt_\b3 unrotate(const _\bP_\bo_\bi_\bn_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H1 = boost::none,\n-421 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H2=boost::none) const;\n-422\n-426\n-428 _\bU_\bn_\bi_\bt_\b3 rotate(const _\bU_\bn_\bi_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b3_\b> HR = boost::none,\n-429 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b2_\b> Hp = boost::none) const;\n-430\n-432 _\bU_\bn_\bi_\bt_\b3 unrotate(const _\bU_\bn_\bi_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b3_\b> HR = boost::none,\n-433 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b2_\b> Hp = boost::none) const;\n-434\n-436 _\bU_\bn_\bi_\bt_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bU_\bn_\bi_\bt_\b3& p) const;\n-437\n-441\n-443 Matrix3 matrix() const;\n-444\n-448 Matrix3 transpose() const;\n-449\n-451 _\bP_\bo_\bi_\bn_\bt_\b3 _\bc_\bo_\bl_\bu_\bm_\bn(int index) const;\n-452\n-453 _\bP_\bo_\bi_\bn_\bt_\b3 r1() const;\n-454 _\bP_\bo_\bi_\bn_\bt_\b3 r2() const;\n-455 _\bP_\bo_\bi_\bn_\bt_\b3 r3() const;\n-456\n-461 Vector3 xyz(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::none) const;\n-462\n-467 Vector3 ypr(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::none) const;\n-468\n-473 Vector3 rpy(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::none) const;\n-474\n-481 double roll(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H = boost::none) const;\n-482\n-489 double pitch(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H = boost::none) const;\n-490\n-497 double yaw(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H = boost::none) const;\n-498\n-502\n-511 std::pair axisAngle() const;\n-512\n-516 gtsam::Quaternion toQuaternion() const;\n-517\n-518#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-526 Vector GTSAM_DEPRECATED quaternion() const;\n-527#endif\n-528\n-534 _\bR_\bo_\bt_\b3 slerp(double t, const _\bR_\bo_\bt_\b3& other) const;\n-535\n-537 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &os, const _\bR_\bo_\bt_\b3&\n-p);\n-538\n-540\n-541 private:\n-_\b5_\b4_\b3 friend class boost::serialization::access;\n-544 template \n-545 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-546#ifndef GTSAM_USE_QUATERNIONS\n-547 Matrix3& M = rot_._\bm_\ba_\bt_\br_\bi_\bx_\b_;\n-548 ar& boost::serialization::make_nvp(\"rot11\", M(0, 0));\n-549 ar& boost::serialization::make_nvp(\"rot12\", M(0, 1));\n-550 ar& boost::serialization::make_nvp(\"rot13\", M(0, 2));\n-551 ar& boost::serialization::make_nvp(\"rot21\", M(1, 0));\n-552 ar& boost::serialization::make_nvp(\"rot22\", M(1, 1));\n-553 ar& boost::serialization::make_nvp(\"rot23\", M(1, 2));\n-554 ar& boost::serialization::make_nvp(\"rot31\", M(2, 0));\n-555 ar& boost::serialization::make_nvp(\"rot32\", M(2, 1));\n-556 ar& boost::serialization::make_nvp(\"rot33\", M(2, 2));\n-557#else\n-558 ar& boost::serialization::make_nvp(\"w\", quaternion_.w());\n-559 ar& boost::serialization::make_nvp(\"x\", quaternion_.x());\n-560 ar& boost::serialization::make_nvp(\"y\", quaternion_.y());\n-561 ar& boost::serialization::make_nvp(\"z\", quaternion_.z());\n-562#endif\n-563 }\n-564\n-565#ifdef GTSAM_USE_QUATERNIONS\n-566 // only align if quaternion, Matrix3 has no alignment requirements\n-567 public:\n-568 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-569#endif\n-570 };\n-571\n-_\b5_\b7_\b3 using _\bR_\bo_\bt_\b3_\bV_\be_\bc_\bt_\bo_\br = std::vector >;\n-574\n-585 GTSAM_EXPORT std::pair _\bR_\bQ(\n-586 const Matrix3& A, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b9_\b> H = boost::none);\n-587\n-588 template<>\n-_\b5_\b8_\b9 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\bo_\bt_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-590\n-591 template<>\n-_\b5_\b9_\b2 struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-593\n-594} // namespace gtsam\n-595\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh\n-Lie Group wrapper for Eigen Quaternions.\n-_\bS_\bO_\b3_\b._\bh\n-3*3 matrix representation of SO(3)\n+75} // \\namespace gtsam\n+76\n+_\bG_\br_\bo_\bu_\bp_\b._\bh\n+Concept check class for variable types with Group properties.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bQ\n-pair< Matrix3, Vector3 > RQ(const Matrix3 &A, OptionalJacobian< 3, 9 > H)\n-[RQ] receives a 3 by 3 matrix and returns an upper triangular matrix R and 3\n-rotation angles correspo...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.cpp:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< Rot3, Eigen::aligned_allocator< Rot3 > > Rot3Vector\n-std::vector of Rot3s, mainly for wrapper\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:573\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bl_\bu_\bm_\bn\n-const MATRIX::ConstColXpr column(const MATRIX &A, size_t j)\n-Extracts a column view from a matrix that avoids a copy.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:211\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Point2 operator*(double s, const Point2 &p)\n-multiply with scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-A CRTP helper class that implements Lie group methods Prerequisites: methods\n-operator*,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Both LieGroupTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n-symbol GTSAM_USE_QUATERNIO...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static Rot3 Identity()\n-identity rotation for group operation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:300\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt_\bC_\ba_\by_\bl_\be_\by\n-Rot3 retractCayley(const Vector &omega) const\n-Retraction from R^3 to Rot3 manifold using the Cayley transform.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:355\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n-Matrix3 AdjointMap() const\n-Calculate Adjoint map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:396\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo\n-static Rot3 ClosestTo(const Matrix3 &M)\n-Static, named constructor that finds Rot3 element closest to M in Frobenius\n-norm.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:271\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\b~_\bR_\bo_\bt_\b3\n-virtual ~Rot3()\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bY_\ba_\bw\n-static Rot3 Yaw(double t)\n-Positive yaw is to right (as in aircraft heading). See ypr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be\n-static Rot3 AxisAngle(const Unit3 &axis, double angle)\n-Convert from axis/angle representation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:231\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3(const Matrix3 &R)\n-Constructor from a rotation matrix Overload version for Matrix3 to avoid\n-casting in quaternion mode.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bo_\bd_\br_\bi_\bg_\bu_\be_\bs\n-static Rot3 Rodrigues(const Vector3 &w)\n-Rodrigues' formula to compute an incremental rotation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:240\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be\n-static Rot3 AxisAngle(const Point3 &axis, double angle)\n-Convert from axis/angle representation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:215\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bP_\bi_\bt_\bc_\bh\n-static Rot3 Pitch(double t)\n-Positive pitch is up (increasing aircraft altitude).See ypr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bz_\bR_\by_\bR_\bx\n-static Rot3 RzRyRx(const Vector &xyz, OptionalJacobian< 3, 3 > H=boost::none)\n-Rotations around Z, Y, then X axes as in http://en.wikipedia.org/wiki/\n-Rotation_matrix,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\ba_\by_\bl_\be_\by\n-Vector3 localCayley(const Rot3 &other) const\n-Inverse of retractCayley.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:360\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn\n-static Rot3 Quaternion(double w, double x, double y, double z)\n-Create from Quaternion coefficients.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:204\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be\n-Rot3 conjugate(const Rot3 &cRb) const\n-Conjugation: given a rotation acting in frame B, compute rotation c1Rc2 acting\n-in a frame C.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:321\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bo_\bd_\br_\bi_\bg_\bu_\be_\bs\n-static Rot3 Rodrigues(double wx, double wy, double wz)\n-Rodrigues' formula to compute an incremental rotation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:251\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n-Rot3 inverse() const\n-inverse of a rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:308\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3(const SO3 &R)\n-Constructor from an SO3 instance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:121\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n-static Rot3 Expmap(const Vector3 &v, OptionalJacobian< 3, 3 > H=boost::none)\n-Exponential map at identity - create a rotation from canonical coordinates\n-using Rodrigues' formula.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:374\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bY_\bp_\br\n-static Rot3 Ypr(double y, double p, double r, OptionalJacobian< 3, 1 >\n-Hy=boost::none, OptionalJacobian< 3, 1 > Hp=boost::none, OptionalJacobian< 3, 1\n-> Hr=boost::none)\n-Returns rotation nRb from body to nav frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:196\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\bM_\bo_\bd_\be\n-CoordinatesMode\n-The method retract() is used to map from the tangent space back to the\n-manifold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:339\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\bA_\bY_\bL_\bE_\bY\n-@ CAYLEY\n-Retract and localCoordinates using the Cayley transform.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:342\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bE_\bX_\bP_\bM_\bA_\bP\n-@ EXPMAP\n-Use the Lie group exponential map to retract.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:340\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3(const Eigen::MatrixBase< Derived > &R)\n-Constructor from a rotation matrix Version for generic matrices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\ba_\by_\bl_\be_\by_\bC_\bh_\ba_\br_\bt\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:349\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:399\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\b_\n-MatrixNN matrix_\n-Rotation matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-const MatrixNN & matrix() const\n-Return matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br\n-Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const\n-Return unit-norm Vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc\n+Cyclic group of order N.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const Cyclic &other, double tol=1e-9) const\n+equals with an tolerance, prints out message if unequal\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\") const\n+print with optional string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc\n+Cyclic()\n+Default constructor yields identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc\n+Cyclic(size_t i)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+Cyclic operator-(const Cyclic &h) const\n+Subtraction modulo N.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+Cyclic operator+(const Cyclic &h) const\n+Addition modulo N.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+Cyclic operator-() const\n+Inverse.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:56\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bR_\bo_\bt_\b3_\b._\bh\n+ * _\bC_\by_\bc_\bl_\bi_\bc_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00341.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00341.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3M.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,51 @@\n \n \n \n \n \n
\n \n-
Rot3M.cpp File Reference
\n+
StereoCamera.h File Reference
\n
\n
\n \n-

Rotation (internal: 3*3 matrix representation*) \n+

A Stereo Camera based on two Simple Cameras. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::StereoCheiralityException
 
class  gtsam::StereoCamera
 A stereo camera class, parameterize by left camera pose and stereo calibration. More...
 
struct  gtsam::traits< StereoCamera >
 
struct  gtsam::traits< const StereoCamera >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Rotation (internal: 3*3 matrix representation*)

\n-
Author
Alireza Fathi
\n-
\n-Christian Potthast
\n-
\n-Frank Dellaert
\n-
\n-Richard Roberts
\n+

A Stereo Camera based on two Simple Cameras.

\n+

A Rectified Stereo Camera.

\n+
Author
Chris Beall
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Rot3M.cpp File Reference\n-Rotation (internal: 3*3 matrix representation*) _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+StereoCamera.h File Reference\n+A Stereo Camera based on two Simple Cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba\n+\u00a0 A stereo camera class, parameterize by left camera pose and stereo\n+ calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Rotation (internal: 3*3 matrix representation*)\n+A Stereo Camera based on two Simple Cameras.\n+A Rectified Stereo Camera.\n Author\n- Alireza Fathi\n- Christian Potthast\n- Frank Dellaert\n- Richard Roberts\n+ Chris Beall\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bR_\bo_\bt_\b3_\bM_\b._\bc_\bp_\bp\n+ * _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00344.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00344.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,77 +94,36 @@\n \n \n \n \n \n
\n \n-
SOn.h File Reference
\n+Namespaces
\n+
Rot2.cpp File Reference
\n \n
\n \n-

N*N matrix representation of SO(N). \n+

2D Rotations \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::SO< N >
 Manifold of special orthogonal rotation matrices SO<N>. More...
 
struct  gtsam::SO< N >::ChartAtOrigin
 
struct  gtsam::traits< SO< N > >
 
struct  gtsam::traits< const SO< N > >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::SOn = SO< Eigen::Dynamic >
 
\n-using gtsam::DynamicJacobian = OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-constexpr int gtsam::internal::DimensionSO (int N)
 Calculate dimensionality of SO<N> manifold, or return Dynamic if so.
 
\n-constexpr int gtsam::internal::NSquaredSO (int N)
 
\n-template<class Archive >
void gtsam::serialize (Archive &ar, SOn &Q, const unsigned int file_version)
 Serialization function.
 
\n

Detailed Description

\n-

N*N matrix representation of SO(N).

\n-

N can be Eigen::Dynamic

Author
Frank Dellaert
\n-
Date
March 2019
\n+

2D Rotations

\n+
Date
Dec 9, 2009
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,52 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SOn.h File Reference\n-N*N matrix representation of SO(N). _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\bN_\b _\b>\n-\u00a0 Manifold of special orthogonal rotation matrices SO. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\bN_\b _\b>_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bO_\b<_\b _\bN_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bO_\b<_\b _\bN_\b _\b>_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Rot2.cpp File Reference\n+2D Rotations _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSO\bOn\bn = _\bS_\bO< Eigen::Dynamic >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDy\byn\bna\bam\bmi\bic\bcJ\bJa\bac\bco\bob\bbi\bia\ban\bn = _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< Eigen::Dynamic, Eigen::\n- Dynamic >\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-constexpr int\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:D\bDi\bim\bme\ben\bns\bsi\bio\bon\bnS\bSO\bO (int N)\n-\u00a0 Calculate dimensionality of SO manifold, or return Dynamic if\n- so.\n-\u00a0\n-constexpr int\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:N\bNS\bSq\bqu\bua\bar\bre\bed\bdS\bSO\bO (int N)\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (Archive &ar, _\bS_\bO_\bn &Q, const unsigned int\n- file_version)\n-\u00a0 Serialization function.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-N*N matrix representation of SO(N).\n-N can be Eigen::Dynamic\n+2D Rotations\n+ Date\n+ Dec 9, 2009\n Author\n Frank Dellaert\n- Date\n- March 2019\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\bn_\b._\bh\n+ * _\bR_\bo_\bt_\b2_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00347.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00347.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.cpp File Reference\n \n \n \n \n \n \n \n@@ -96,39 +96,51 @@\n \n \n \n
\n \n-
Cal3Fisheye.cpp File Reference
\n+
Rot3.cpp File Reference
\n
\n
\n+\n+

Rotation, common code between Rotation matrix and Quaternion. \n+More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n+\n+\n+\n+\n+\n

\n Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Cal3Fisheye &cal)
 
pair< Matrix3, Vector3 > gtsam::RQ (const Matrix3 &A, OptionalJacobian< 3, 9 > H=boost::none)
 [RQ] receives a 3 by 3 matrix and returns an upper triangular matrix R and 3 rotation angles corresponding to the rotation matrix Q=Qz'*Qy'*Qx' such that A = R*Q = R*Qz'*Qy'*Qx'.
 
\n+ostream & gtsam::operator<< (ostream &os, const Rot3 &R)
 
\n

Detailed Description

\n-
Date
Apr 8, 2020
\n-
Author
ghaggin
\n+

Rotation, common code between Rotation matrix and Quaternion.

\n+
Author
Alireza Fathi
\n+
\n+Christian Potthast
\n+
\n+Frank Dellaert
\n+
\n+Richard Roberts
\n
\n Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,34 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Cal3Fisheye.cpp File Reference\n+Rot3.cpp File Reference\n+Rotation, common code between Rotation matrix and Quaternion. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be &cal)\n+pair< Matrix3, Vector3 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bQ (const Matrix3 &A, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 9 >\n+ H=boost::none)\n+ [RQ] receives a 3 by 3 matrix and returns an upper\n+\u00a0 triangular matrix R and 3 rotation angles\n+ corresponding to the rotation matrix Q=Qz'*Qy'*Qx'\n+ such that A = R*Q = R*Qz'*Qy'*Qx'.\n+\u00a0\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bR_\bo_\bt_\b3 &R)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Apr 8, 2020\n+Rotation, common code between Rotation matrix and Quaternion.\n Author\n- ghaggin\n+ Alireza Fathi\n+ Christian Potthast\n+ Frank Dellaert\n+ Richard Roberts\n Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bc_\bp_\bp\n+ * _\bR_\bo_\bt_\b3_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00350.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00350.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cyclic.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h File Reference\n \n \n \n \n \n \n \n@@ -96,45 +96,49 @@\n \n \n \n
\n \n-
Cyclic.h File Reference
\n+
BearingRange.h File Reference
\n
\n
\n \n-

Cyclic group, i.e., the integers modulo N. \n+

Bearing-Range product. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::Cyclic< N >
 Cyclic group of order N. More...
struct  gtsam::BearingRange< A1, A2, B, R >
 Bearing-Range product for a particular A1,A2 combination will use the functors above to create a similar functor of type A1*A2 -> pair<Bearing::return_type,Range::return_type> For example BearingRange<Pose2,Point2>(pose,point) will return pair<Rot2,double> and BearingRange<Pose3,Point3>(pose,point) will return pair<Unit3,double> More...
 
struct  gtsam::traits< Cyclic< N > >
 Define cyclic group to be a model of the Additive Group concept. More...
struct  gtsam::traits< BearingRange< A1, A2 > >
 
struct  gtsam::HasBearing< A1, A2, RT >
 
struct  gtsam::HasRange< A1, A2, RT >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Cyclic group, i.e., the integers modulo N.

\n+

Bearing-Range product.

\n+
Date
July, 2015
\n
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,38 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Cyclic.h File Reference\n-Cyclic group, i.e., the integers modulo N. _\bM_\bo_\br_\be_\b._\b._\b.\n+BearingRange.h File Reference\n+Bearing-Range product. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b<_\b _\bN_\b _\b>\n-\u00a0 _\bC_\by_\bc_\bl_\bi_\bc group of order N. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b,_\b _\bB_\b,_\b _\bR_\b _\b>\n+ Bearing-Range product for a particular A1,A2 combination will use the\n+ functors above to create a similar functor of type A1*A2 -\n+\u00a0 > pair For example\n+ BearingRange(pose,point) will return pair\n+ and BearingRange(pose,point) will return\n+ pair _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\by_\bc_\bl_\bi_\bc_\b<_\b _\bN_\b _\b>_\b _\b>\n-\u00a0 Define cyclic group to be a model of the Additive Group concept.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b _\b>_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b,_\b _\bR_\bT_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b,_\b _\bR_\bT_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Cyclic group, i.e., the integers modulo N.\n+Bearing-Range product.\n+ Date\n+ July, 2015\n Author\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\by_\bc_\bl_\bi_\bc_\b._\bh\n+ * _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00350.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00350.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,6 @@\n var a00350 = [\n- [\"gtsam::Cyclic< N >\", \"a03060.html\", \"a03060\"],\n- [\"gtsam::traits< Cyclic< N > >\", \"a03064.html\", null]\n+ [\"gtsam::BearingRange< A1, A2, B, R >\", \"a02924.html\", \"a02924\"],\n+ [\"gtsam::traits< BearingRange< A1, A2 > >\", \"a02928.html\", null],\n+ [\"gtsam::HasBearing< A1, A2, RT >\", \"a02932.html\", null],\n+ [\"gtsam::HasRange< A1, A2, RT >\", \"a02936.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00350_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00350_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cyclic.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h Source File\n \n \n \n \n \n \n \n@@ -98,114 +98,228 @@\n
No Matches
\n \n \n \n \n \n
\n-
Cyclic.h
\n+
BearingRange.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Group.h>
\n-
21#include <gtsam/base/Testable.h>
\n-
22
\n-
23#include <cassert>
\n-
24#include <iostream> // for cout :-(
\n-
25
\n-
26namespace gtsam {
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/base/Manifold.h>
\n+
22#include <gtsam/base/Testable.h>
\n+\n+
24#include <boost/concept/assert.hpp>
\n+
25#include <boost/serialization/nvp.hpp>
\n+
26#include <iostream>
\n
27
\n-
29template<size_t N>
\n-
\n-
30class Cyclic {
\n-
31 size_t i_;
\n-
32public:
\n-
\n-
34 Cyclic(size_t i) :
\n-
35 i_(i) {
\n-
36 assert(i < N);
\n-
37 }
\n-
\n-
\n-
39 Cyclic():i_(0) {
\n-
40 }
\n-
\n-
41 static Cyclic Identity() { return Cyclic();}
\n-
42
\n-
\n-
44 operator size_t() const {
\n-
45 return i_;
\n-
46 }
\n-
\n-
\n-
48 Cyclic operator+(const Cyclic& h) const {
\n-
49 return (i_ + h.i_) % N;
\n-
50 }
\n-
\n-
\n-
52 Cyclic operator-(const Cyclic& h) const {
\n-
53 return (N + i_ - h.i_) % N;
\n-
54 }
\n-
\n-
\n-
56 Cyclic operator-() const {
\n-
57 return (N - i_) % N;
\n-
58 }
\n-
\n-
\n-
60 void print(const std::string& s = "") const {
\n-
61 std::cout << s << i_ << std::endl;
\n-
62 }
\n-
\n-
\n-
64 bool equals(const Cyclic& other, double tol = 1e-9) const {
\n-
65 return other.i_ == i_;
\n-
66 }
\n-
\n-
67};
\n-
\n-
68
\n-
70template<size_t N>
\n-
\n-
71struct traits<Cyclic<N> > : internal::AdditiveGroupTraits<Cyclic<N> >, //
\n-
72 Testable<Cyclic<N> > {
\n-
73};
\n-
\n-
74
\n-
75} // \\namespace gtsam
\n+
28namespace gtsam {
\n+
29
\n+
30// Forward declaration of Bearing functor which should be of A1*A2 -> return_type
\n+
31// For example Bearing<Pose3,Point3>(pose,point), defined in Pose3.h will return Unit3
\n+
32// At time of writing only Pose2 and Pose3 specialize this functor.
\n+
33template <typename A1, typename A2>
\n+
34struct Bearing;
\n+
35
\n+
36// Forward declaration of Range functor which should be of A1*A2 -> return_type
\n+
37// For example Range<Pose2,Pose2>(T1,T2), defined in Pose2.h will return double
\n+
38// At time of writing Pose2, Pose3, and several Camera variants specialize this for several types
\n+
39template <typename A1, typename A2>
\n+
40struct Range;
\n+
41
\n+
48template <typename A1, typename A2,
\n+
49 typename B = typename Bearing<A1, A2>::result_type,
\n+
50 typename R = typename Range<A1, A2>::result_type>
\n+
\n+\n+
52private:
\n+
53 B bearing_;
\n+
54 R range_;
\n+
55
\n+
56public:
\n+
57 enum { dimB = traits<B>::dimension };
\n+
58 enum { dimR = traits<R>::dimension };
\n+
59 enum { dimension = dimB + dimR };
\n+
60
\n+
63
\n+
64 BearingRange() {}
\n+
65 BearingRange(const B& b, const R& r) : bearing_(b), range_(r) {}
\n+
66
\n+
70
\n+
72 const B& bearing() const { return bearing_; }
\n+
73
\n+
75 const R& range() const { return range_; }
\n
76
\n-
Concept check class for variable types with Group properties.
\n-
Concept check for values that can be used in unit tests.
\n+
\n+\n+
79 const A1& a1, const A2& a2,
\n+
80 OptionalJacobian<dimension, traits<A1>::dimension> H1 = boost::none,
\n+
81 OptionalJacobian<dimension, traits<A2>::dimension> H2 = boost::none) {
\n+
82 typename MakeJacobian<B, A1>::type HB1;
\n+
83 typename MakeJacobian<B, A2>::type HB2;
\n+
84 typename MakeJacobian<R, A1>::type HR1;
\n+
85 typename MakeJacobian<R, A2>::type HR2;
\n+
86
\n+
87 B b = Bearing<A1, A2>()(a1, a2, H1 ? &HB1 : 0, H2 ? &HB2 : 0);
\n+
88 R r = Range<A1, A2>()(a1, a2, H1 ? &HR1 : 0, H2 ? &HR2 : 0);
\n+
89
\n+
90 if (H1) *H1 << HB1, HR1;
\n+
91 if (H2) *H2 << HB2, HR2;
\n+
92 return BearingRange(b, r);
\n+
93 }
\n+
\n+
94
\n+
\n+
96 static B MeasureBearing(const A1& a1, const A2& a2) {
\n+
97 return Bearing<A1, A2>()(a1, a2);
\n+
98 }
\n+
\n+
99
\n+
\n+
101 static R MeasureRange(const A1& a1, const A2& a2) {
\n+
102 return Range<A1, A2>()(a1, a2);
\n+
103 }
\n+
\n+
104
\n+
108
\n+
109 void print(const std::string& str = "") const {
\n+
110 std::cout << str;
\n+
111 traits<B>::Print(bearing_, "bearing ");
\n+
112 traits<R>::Print(range_, "range ");
\n+
113 }
\n+
114 bool equals(const BearingRange<A1, A2>& m2, double tol = 1e-8) const {
\n+
115 return traits<B>::Equals(bearing_, m2.bearing_, tol) &&
\n+
116 traits<R>::Equals(range_, m2.range_, tol);
\n+
117 }
\n+
118
\n+
122
\n+
123 inline static size_t Dim() { return dimension; }
\n+
124 inline size_t dim() const { return dimension; }
\n+
125
\n+
126 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
\n+
127 typedef OptionalJacobian<dimension, dimension> ChartJacobian;
\n+
128
\n+
\n+
130 BearingRange retract(const TangentVector& xi) const {
\n+
131 B m1 = traits<B>::Retract(bearing_, xi.template head<dimB>());
\n+
132 R m2 = traits<R>::Retract(range_, xi.template tail<dimR>());
\n+
133 return BearingRange(m1, m2);
\n+
134 }
\n+
\n+
135
\n+
\n+
137 TangentVector localCoordinates(const BearingRange& other) const {
\n+
138 typename traits<B>::TangentVector v1 = traits<B>::Local(bearing_, other.bearing_);
\n+
139 typename traits<R>::TangentVector v2 = traits<R>::Local(range_, other.range_);
\n+
140 TangentVector v;
\n+
141 v << v1, v2;
\n+
142 return v;
\n+
143 }
\n+
\n+
144
\n+
148
\n+
149private:
\n+
151 template <class ARCHIVE>
\n+
152 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
153 ar& boost::serialization::make_nvp("bearing", bearing_);
\n+
154 ar& boost::serialization::make_nvp("range", range_);
\n+
155 }
\n+
156
\n+
157 friend class boost::serialization::access;
\n+
158
\n+
160
\n+
161 // Alignment, see https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html
\n+
162 enum {
\n+
163 NeedsToAlign = (sizeof(B) % 16) == 0 || (sizeof(R) % 16) == 0
\n+
164 };
\n+
165public:
\n+\n+
167};
\n+
\n+
168
\n+
169// Declare this to be both Testable and a Manifold
\n+
170template <typename A1, typename A2>
\n+
\n+
171struct traits<BearingRange<A1, A2> >
\n+
172 : Testable<BearingRange<A1, A2> >,
\n+
173 internal::ManifoldTraits<BearingRange<A1, A2> > {};
\n+
\n+
174
\n+
175// Helper class for to implement Range traits for classes with a bearing method
\n+
176// For example, to specialize Bearing to Pose3 and Point3, using Pose3::bearing, it suffices to say
\n+
177// template <> struct Bearing<Pose3, Point3> : HasBearing<Pose3, Point3, Unit3> {};
\n+
178// where the third argument is used to indicate the return type
\n+
179template <class A1, typename A2, class RT>
\n+
\n+\n+
181 typedef RT result_type;
\n+
182 RT operator()(
\n+
183 const A1& a1, const A2& a2,
\n+\n+\n+
186 return a1.bearing(a2, H1, H2);
\n+
187 }
\n+
188};
\n+
\n+
189
\n+
190// Similar helper class for to implement Range traits for classes with a range method
\n+
191// For classes with overloaded range methods, such as PinholeCamera, this can even be templated:
\n+
192// template <typename T> struct Range<PinholeCamera, T> : HasRange<PinholeCamera, T, double> {};
\n+
193template <class A1, typename A2, class RT>
\n+
\n+
194struct HasRange {
\n+
195 typedef RT result_type;
\n+
196 RT operator()(
\n+
197 const A1& a1, const A2& a2,
\n+\n+\n+
200 return a1.range(a2, H1, H2);
\n+
201 }
\n+
202};
\n+
\n+
203
\n+
204} // namespace gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n+
Base class and basic functions for Manifold types.
\n+
Special class for optional Jacobian arguments.
\n+
Concept check for values that can be used in unit tests.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM manifolds.
Definition Manifold.h:95
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Cyclic group of order N.
Definition Cyclic.h:30
\n-
bool equals(const Cyclic &other, double tol=1e-9) const
equals with an tolerance, prints out message if unequal
Definition Cyclic.h:64
\n-
void print(const std::string &s="") const
print with optional string
Definition Cyclic.h:60
\n-
Cyclic()
Default constructor yields identity.
Definition Cyclic.h:39
\n-
Cyclic(size_t i)
Constructor.
Definition Cyclic.h:34
\n-
Cyclic operator-(const Cyclic &h) const
Subtraction modulo N.
Definition Cyclic.h:52
\n-
Cyclic operator+(const Cyclic &h) const
Addition modulo N.
Definition Cyclic.h:48
\n-
Cyclic operator-() const
Inverse.
Definition Cyclic.h:56
\n+
Definition BearingRange.h:34
\n+
Definition BearingRange.h:40
\n+
Bearing-Range product for a particular A1,A2 combination will use the functors above to create a simi...
Definition BearingRange.h:51
\n+
static R MeasureRange(const A1 &a1, const A2 &a2)
Predict range.
Definition BearingRange.h:101
\n+
static BearingRange Measure(const A1 &a1, const A2 &a2, OptionalJacobian< dimension, traits< A1 >::dimension > H1=boost::none, OptionalJacobian< dimension, traits< A2 >::dimension > H2=boost::none)
Prediction function that stacks measurements.
Definition BearingRange.h:78
\n+
BearingRange retract(const TangentVector &xi) const
Retract delta to manifold.
Definition BearingRange.h:130
\n+
const B & bearing() const
Return bearing measurement.
Definition BearingRange.h:72
\n+
TangentVector localCoordinates(const BearingRange &other) const
Compute the coordinates in the tangent space.
Definition BearingRange.h:137
\n+
const R & range() const
Return range measurement.
Definition BearingRange.h:75
\n+
static B MeasureBearing(const A1 &a1, const A2 &a2)
Predict bearing.
Definition BearingRange.h:96
\n+
Definition BearingRange.h:180
\n+
Definition BearingRange.h:194
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,118 +1,268 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cyclic.h\n+BearingRange.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bG_\br_\bo_\bu_\bp_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-22\n-23#include \n-24#include // for cout :-(\n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n+24#include \n+25#include \n+26#include \n 27\n-29template\n-_\b3_\b0class _\bC_\by_\bc_\bl_\bi_\bc {\n-31 size_t i_;\n-32public:\n-_\b3_\b4 _\bC_\by_\bc_\bl_\bi_\bc(size_t i) :\n-35 i_(i) {\n-36 assert(i < N);\n-37 }\n-_\b3_\b9 _\bC_\by_\bc_\bl_\bi_\bc():i_(0) {\n-40 }\n-41 static _\bC_\by_\bc_\bl_\bi_\bc Identity() { return _\bC_\by_\bc_\bl_\bi_\bc();}\n-42\n-_\b4_\b4 operator size_t() const {\n-45 return i_;\n-46 }\n-_\b4_\b8 _\bC_\by_\bc_\bl_\bi_\bc _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bC_\by_\bc_\bl_\bi_\bc& h) const {\n-49 return (i_ + h.i_) % N;\n-50 }\n-_\b5_\b2 _\bC_\by_\bc_\bl_\bi_\bc _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bC_\by_\bc_\bl_\bi_\bc& h) const {\n-53 return (N + i_ - h.i_) % N;\n-54 }\n-_\b5_\b6 _\bC_\by_\bc_\bl_\bi_\bc _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-() const {\n-57 return (N - i_) % N;\n-58 }\n-_\b6_\b0 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const {\n-61 std::cout << s << i_ << std::endl;\n-62 }\n-_\b6_\b4 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\by_\bc_\bl_\bi_\bc& other, double tol = 1e-9) const {\n-65 return other.i_ == i_;\n-66 }\n-67};\n-68\n-70template\n-_\b7_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\by_\bc_\bl_\bi_\bc > : internal::AdditiveGroupTraits >, //\n-72 _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {\n-73};\n-74\n-75} // \\namespace gtsam\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+30// Forward declaration of Bearing functor which should be of A1*A2 -\n+> return_type\n+31// For example Bearing(pose,point), defined in Pose3.h will\n+return Unit3\n+32// At time of writing only Pose2 and Pose3 specialize this functor.\n+33template \n+_\b3_\b4struct _\bB_\be_\ba_\br_\bi_\bn_\bg;\n+35\n+36// Forward declaration of Range functor which should be of A1*A2 -\n+> return_type\n+37// For example Range(T1,T2), defined in Pose2.h will return\n+double\n+38// At time of writing Pose2, Pose3, and several Camera variants specialize\n+this for several types\n+39template \n+_\b4_\b0struct _\bR_\ba_\bn_\bg_\be;\n+41\n+48template _\b:_\b:_\br_\be_\bs_\bu_\bl_\bt_\b__\bt_\by_\bp_\be,\n+50 typename R = typename _\bR_\ba_\bn_\bg_\be_\b<_\bA_\b1_\b,_\b _\bA_\b2_\b>_\b:_\b:_\br_\be_\bs_\bu_\bl_\bt_\b__\bt_\by_\bp_\be>\n+_\b5_\b1struct _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be {\n+52private:\n+53 B bearing_;\n+54 R range_;\n+55\n+56public:\n+57 enum { dimB = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bB_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn };\n+58 enum { dimR = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn };\n+59 enum { dimension = dimB + dimR };\n+60\n+63\n+64 _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be() {}\n+65 _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be(const B& b, const R& r) : bearing_(b), range_(r) {}\n+66\n+70\n+_\b7_\b2 const B& _\bb_\be_\ba_\br_\bi_\bn_\bg() const { return bearing_; }\n+73\n+_\b7_\b5 const R& _\br_\ba_\bn_\bg_\be() const { return range_; }\n 76\n-_\bG_\br_\bo_\bu_\bp_\b._\bh\n-Concept check class for variable types with Group properties.\n+_\b7_\b8 static _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be _\bM_\be_\ba_\bs_\bu_\br_\be(\n+79 const A1& a1, const A2& a2,\n+80 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H1 = boost::none,\n+81 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H2 = boost::none) {\n+82 typename MakeJacobian::type HB1;\n+83 typename MakeJacobian::type HB2;\n+84 typename MakeJacobian::type HR1;\n+85 typename MakeJacobian::type HR2;\n+86\n+87 B b = _\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\bA_\b1_\b,_\b _\bA_\b2_\b>()(a1, a2, H1 ? &HB1 : 0, H2 ? &HB2 : 0);\n+88 R r = _\bR_\ba_\bn_\bg_\be_\b<_\bA_\b1_\b,_\b _\bA_\b2_\b>()(a1, a2, H1 ? &HR1 : 0, H2 ? &HR2 : 0);\n+89\n+90 if (H1) *H1 << HB1, HR1;\n+91 if (H2) *H2 << HB2, HR2;\n+92 return _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be(b, r);\n+93 }\n+94\n+_\b9_\b6 static B _\bM_\be_\ba_\bs_\bu_\br_\be_\bB_\be_\ba_\br_\bi_\bn_\bg(const A1& a1, const A2& a2) {\n+97 return _\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\bA_\b1_\b,_\b _\bA_\b2_\b>()(a1, a2);\n+98 }\n+99\n+_\b1_\b0_\b1 static R _\bM_\be_\ba_\bs_\bu_\br_\be_\bR_\ba_\bn_\bg_\be(const A1& a1, const A2& a2) {\n+102 return _\bR_\ba_\bn_\bg_\be_\b<_\bA_\b1_\b,_\b _\bA_\b2_\b>()(a1, a2);\n+103 }\n+104\n+108\n+109 void print(const std::string& str = \"\") const {\n+110 std::cout << str;\n+111 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bB_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(bearing_, \"bearing \");\n+112 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(range_, \"range \");\n+113 }\n+114 bool equals(const BearingRange& m2, double tol = 1e-8) const {\n+115 return traits::Equals(bearing_, m2.bearing_, tol) &&\n+116 traits::Equals(range_, m2.range_, tol);\n+117 }\n+118\n+122\n+123 inline static size_t Dim() { return dimension; }\n+124 inline size_t dim() const { return dimension; }\n+125\n+126 typedef Eigen::Matrix TangentVector;\n+127 typedef OptionalJacobian ChartJacobian;\n+128\n+_\b1_\b3_\b0 _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be _\br_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& xi) const {\n+131 B m1 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bB_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(bearing_, xi.template head());\n+132 R m2 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(range_, xi.template tail());\n+133 return _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be(m1, m2);\n+134 }\n+135\n+_\b1_\b3_\b7 TangentVector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be& other) const {\n+138 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bB_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br v1 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bB_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(bearing_,\n+other.bearing_);\n+139 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br v2 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(range_,\n+other.range_);\n+140 TangentVector v;\n+141 v << v1, v2;\n+142 return v;\n+143 }\n+144\n+148\n+149private:\n+151 template \n+152 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+153 ar& boost::serialization::make_nvp(\"bearing\", bearing_);\n+154 ar& boost::serialization::make_nvp(\"range\", range_);\n+155 }\n+156\n+157 friend class boost::serialization::access;\n+158\n+160\n+161 // Alignment, see https://eigen.tuxfamily.org/dox/\n+group__TopicStructHavingEigenMembers.html\n+162 enum {\n+163 NeedsToAlign = (sizeof(B) % 16) == 0 || (sizeof(R) % 16) == 0\n+164 };\n+165public:\n+166 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(NeedsToAlign)\n+167};\n+168\n+169// Declare this to be both Testable and a Manifold\n+170template \n+_\b1_\b7_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be >\n+172 : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be >,\n+173 _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs > {};\n+174\n+175// Helper class for to implement Range traits for classes with a bearing\n+method\n+176// For example, to specialize Bearing to Pose3 and Point3, using Pose3::\n+bearing, it suffices to say\n+177// template <> struct Bearing : HasBearing {};\n+178// where the third argument is used to indicate the return type\n+179template \n+_\b1_\b8_\b0struct _\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg {\n+181 typedef RT result_type;\n+182 RT operator()(\n+183 const A1& a1, const A2& a2,\n+184 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b1_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H1=boost::\n+none,\n+185 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b2_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H2=boost::\n+none) {\n+186 return a1.bearing(a2, H1, H2);\n+187 }\n+188};\n+189\n+190// Similar helper class for to implement Range traits for classes with a\n+range method\n+191// For classes with overloaded range methods, such as PinholeCamera, this\n+can even be templated:\n+192// template struct Range :\n+HasRange {};\n+193template \n+_\b1_\b9_\b4struct _\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be {\n+195 typedef RT result_type;\n+196 RT operator()(\n+197 const A1& a1, const A2& a2,\n+198 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b1_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H1=boost::\n+none,\n+199 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b2_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H2=boost::\n+none) {\n+200 return a1.range(a2, H1, H2);\n+201 }\n+202};\n+203\n+204} // namespace gtsam\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:317\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n+Special class for optional Jacobian arguments.\n _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n Concept check for values that can be used in unit tests.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs\n+A helper that implements the traits interface for GTSAM manifolds.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc\n-Cyclic group of order N.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const Cyclic &other, double tol=1e-9) const\n-equals with an tolerance, prints out message if unequal\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\") const\n-print with optional string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc\n-Cyclic()\n-Default constructor yields identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc\n-Cyclic(size_t i)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-Cyclic operator-(const Cyclic &h) const\n-Subtraction modulo N.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-Cyclic operator+(const Cyclic &h) const\n-Addition modulo N.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\by_\bc_\bl_\bi_\bc_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-Cyclic operator-() const\n-Inverse.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cyclic.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be\n+Bearing-Range product for a particular A1,A2 combination will use the functors\n+above to create a simi...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bR_\ba_\bn_\bg_\be\n+static R MeasureRange(const A1 &a1, const A2 &a2)\n+Predict range.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be\n+static BearingRange Measure(const A1 &a1, const A2 &a2, OptionalJacobian<\n+dimension, traits< A1 >::dimension > H1=boost::none, OptionalJacobian<\n+dimension, traits< A2 >::dimension > H2=boost::none)\n+Prediction function that stacks measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+BearingRange retract(const TangentVector &xi) const\n+Retract delta to manifold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bb_\be_\ba_\br_\bi_\bn_\bg\n+const B & bearing() const\n+Return bearing measurement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+TangentVector localCoordinates(const BearingRange &other) const\n+Compute the coordinates in the tangent space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\br_\ba_\bn_\bg_\be\n+const R & range() const\n+Return range measurement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bB_\be_\ba_\br_\bi_\bn_\bg\n+static B MeasureBearing(const A1 &a1, const A2 &a2)\n+Predict bearing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:194\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\by_\bc_\bl_\bi_\bc_\b._\bh\n+ * _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00356.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00356.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point2.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,63 @@\n \n \n \n \n \n
\n \n-
Cal3Fisheye.h File Reference
\n+Namespaces |\n+Functions
\n+
Point2.cpp File Reference
\n \n
\n \n-

Calibration of a fisheye camera. \n+

2D Point \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::Cal3Fisheye
 Calibration of a fisheye camera. More...
 
struct  gtsam::traits< Cal3Fisheye >
 
struct  gtsam::traits< const Cal3Fisheye >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+double gtsam::norm2 (const Point2 &p, OptionalJacobian< 1, 2 > H=boost::none)
 Distance of the point from the origin, with Jacobian.
 
\n+double gtsam::distance2 (const Point2 &p1, const Point2 &q, OptionalJacobian< 1, 2 > H1=boost::none, OptionalJacobian< 1, 2 > H2=boost::none)
 distance between two points
 
\n+boost::optional< Point2gtsam::circleCircleIntersection (double R_d, double r_d, double tol)
 
\n+list< Point2gtsam::circleCircleIntersection (Point2 c1, Point2 c2, boost::optional< Point2 > fh)
 
list< Point2gtsam::circleCircleIntersection (Point2 c1, double r1, Point2 c2, double r2, double tol=1e-9)
 Intersect 2 circles.
 
\n+Point2Pair gtsam::means (const std::vector< Point2Pair > &abPointPairs)
 Calculate the two means of a set of Point2 pairs.
 
\n+ostream & gtsam::operator<< (ostream &os, const gtsam::Point2Pair &p)
 
\n

Detailed Description

\n-

Calibration of a fisheye camera.

\n-
Date
Apr 8, 2020
\n-
Author
ghaggin
\n-
\n-Varun Agrawal
\n+

2D Point

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,48 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Cal3Fisheye.h File Reference\n-Calibration of a fisheye camera. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be\n-\u00a0 Calibration of a fisheye camera. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Point2.cpp File Reference\n+2D Point _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bm2\b2 (const _\bP_\bo_\bi_\bn_\bt_\b2 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1,\n+ 2 > H=boost::none)\n+\u00a0 Distance of the point from the origin, with\n+ Jacobian.\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bis\bst\bta\ban\bnc\bce\be2\b2 (const _\bP_\bo_\bi_\bn_\bt_\b2 &p1, const _\bP_\bo_\bi_\bn_\bt_\b2 &q,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 2 > H1=boost::none,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 2 > H2=boost::none)\n+\u00a0 distance between two points\n+\u00a0\n+boost::optional< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bci\bir\brc\bcl\ble\beC\bCi\bir\brc\bcl\ble\beI\bIn\bnt\bte\ber\brs\bse\bec\bct\bti\bio\bon\bn (double R_d, double\n+ r_d, double tol)\n+\u00a0\n+ list< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bci\bir\brc\bcl\ble\beC\bCi\bir\brc\bcl\ble\beI\bIn\bnt\bte\ber\brs\bse\bec\bct\bti\bio\bon\bn (_\bP_\bo_\bi_\bn_\bt_\b2 c1, _\bP_\bo_\bi_\bn_\bt_\b2\n+ c2, boost::optional< _\bP_\bo_\bi_\bn_\bt_\b2 > fh)\n+\u00a0\n+ list< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bi_\br_\bc_\bl_\be_\bC_\bi_\br_\bc_\bl_\be_\bI_\bn_\bt_\be_\br_\bs_\be_\bc_\bt_\bi_\bo_\bn (_\bP_\bo_\bi_\bn_\bt_\b2 c1, double\n+ r1, _\bP_\bo_\bi_\bn_\bt_\b2 c2, double r2, double tol=1e-9)\n+\u00a0 Intersect 2 circles.\n+\u00a0\n+ Point2Pair\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bme\bea\ban\bns\bs (const std::vector< Point2Pair >\n+ &abPointPairs)\n+\u00a0 Calculate the two means of a set of Point2 pairs.\n+\u00a0\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const gtsam::\n+ Point2Pair &p)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Calibration of a fisheye camera.\n- Date\n- Apr 8, 2020\n+2D Point\n Author\n- ghaggin\n- Varun Agrawal\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n+ * _\bP_\bo_\bi_\bn_\bt_\b2_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00356.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00356.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,6 @@\n var a00356 = [\n- [\"gtsam::traits< Cal3Fisheye >\", \"a03000.html\", null],\n- [\"gtsam::traits< const Cal3Fisheye >\", \"a03004.html\", null]\n+ [\"circleCircleIntersection\", \"a00356.html#a93d4e38a582b6f32fc4f301df10721d5\", null],\n+ [\"distance2\", \"a00356.html#afd1282dfb080cb393ae60188b4582cb2\", null],\n+ [\"means\", \"a00356.html#a9e357cda5287fae1438f86bc4df27a80\", null],\n+ [\"norm2\", \"a00356.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00359.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00359.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CalibratedCamera.h File Reference\n \n \n \n \n \n \n \n@@ -96,46 +96,54 @@\n \n \n \n
\n \n-
Cal3_S2.h File Reference
\n+
CalibratedCamera.h File Reference
\n
\n
\n \n-

The most common 5DOF 3D->2D calibration. \n+

Calibrated camera for which only pose is unknown. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n \n-\n+\n+\n \n-\n+\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::Cal3_S2
 The most common 5DOF 3D->2D calibration. More...
class  gtsam::CheiralityException
 
struct  gtsam::traits< Cal3_S2 >
class  gtsam::PinholeBase
 A pinhole camera class that has a Pose3, functions as base class for all pinhole cameras. More...
 
struct  gtsam::traits< const Cal3_S2 >
class  gtsam::CalibratedCamera
 A Calibrated camera class [R|-R't], calibration K=I. More...
 
struct  gtsam::traits< CalibratedCamera >
 
struct  gtsam::traits< const CalibratedCamera >
 
struct  gtsam::Range< CalibratedCamera, T >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

The most common 5DOF 3D->2D calibration.

\n+

Calibrated camera for which only pose is unknown.

\n+
Date
Aug 17, 2009
\n
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,39 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Cal3_S2.h File Reference\n-The most common 5DOF 3D->2D calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n+CalibratedCamera.h File Reference\n+Calibrated camera for which only pose is unknown. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n-\u00a0 The most common 5DOF 3D->2D calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n+\u00a0 A pinhole camera class that has a _\bP_\bo_\bs_\be_\b3, functions as base class for\n+ all pinhole cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n+\u00a0 A Calibrated camera class [R|-R't], calibration K=I. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b,_\b _\bT_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-The most common 5DOF 3D->2D calibration.\n+Calibrated camera for which only pose is unknown.\n+ Date\n+ Aug 17, 2009\n Author\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n+ * _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00359.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00359.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,6 @@\n var a00359 = [\n- [\"gtsam::traits< Cal3_S2 >\", \"a02948.html\", null],\n- [\"gtsam::traits< const Cal3_S2 >\", \"a02952.html\", null]\n+ [\"gtsam::CheiralityException\", \"a03020.html\", null],\n+ [\"gtsam::traits< CalibratedCamera >\", \"a03032.html\", null],\n+ [\"gtsam::traits< const CalibratedCamera >\", \"a03036.html\", null],\n+ [\"gtsam::Range< CalibratedCamera, T >\", \"a03040.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00359_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00359_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CalibratedCamera.h Source File\n \n \n \n \n \n \n \n@@ -98,142 +98,368 @@\n
No Matches
\n \n \n \n \n \n
\n-
Cal3_S2.h
\n+
CalibratedCamera.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
22#pragma once
\n-
23
\n-
24#include <gtsam/geometry/Cal3.h>
\n-\n-
26
\n-
27namespace gtsam {
\n-
28
\n-
\n-
34class GTSAM_EXPORT Cal3_S2 : public Cal3 {
\n-
35 public:
\n-
36 enum { dimension = 5 };
\n-
37
\n-
39 using shared_ptr = boost::shared_ptr<Cal3_S2>;
\n+
19#pragma once
\n+
20
\n+\n+\n+\n+
24#include <gtsam/base/concepts.h>
\n+
25#include <gtsam/base/Manifold.h>
\n+\n+
27#include <gtsam/dllexport.h>
\n+
28#include <boost/serialization/nvp.hpp>
\n+
29
\n+
30namespace gtsam {
\n+
31
\n+
\n+
32class GTSAM_EXPORT CheiralityException: public ThreadsafeException<CheiralityException> {
\n+
33public:
\n+\n+
35 : CheiralityException(std::numeric_limits<Key>::max()) {}
\n+
36
\n+\n+
38 : ThreadsafeException<CheiralityException>("CheiralityException"),
\n+
39 j_(j) {}
\n
40
\n-
43
\n-
45 Cal3_S2() = default;
\n-
46
\n-
\n-
48 Cal3_S2(double fx, double fy, double s, double u0, double v0)
\n-
49 : Cal3(fx, fy, s, u0, v0) {}
\n+
41 Key nearbyVariable() const {return j_;}
\n+
42
\n+
43private:
\n+
44 Key j_;
\n+
45};
\n
\n-
50
\n-
52 Cal3_S2(const Vector5& d) : Cal3(d) {}
\n+
46
\n+
\n+
52class GTSAM_EXPORT PinholeBase {
\n
53
\n-
60 Cal3_S2(double fov, int w, int h) : Cal3(fov, w, h) {}
\n-
61
\n-
69 Point2 uncalibrate(const Point2& p, OptionalJacobian<2, 5> Dcal = boost::none,
\n-
70 OptionalJacobian<2, 2> Dp = boost::none) const;
\n-
71
\n-
79 Point2 calibrate(const Point2& p, OptionalJacobian<2, 5> Dcal = boost::none,
\n-
80 OptionalJacobian<2, 2> Dp = boost::none) const;
\n-
81
\n-
87 Vector3 calibrate(const Vector3& p) const;
\n-
88
\n+
54public:
\n+
55
\n+
57 typedef Rot3 Rotation;
\n+
58 typedef Point3 Translation;
\n+
59
\n+\n+
65 typedef Point2Vector MeasurementVector;
\n+
66
\n+
67private:
\n+
68
\n+
69 Pose3 pose_;
\n+
70
\n+
71protected:
\n+
72
\n+
75
\n+
81 static Matrix26 Dpose(const Point2& pn, double d);
\n+
82
\n+
89 static Matrix23 Dpoint(const Point2& pn, double d, const Matrix3& Rt);
\n+
90
\n
92
\n-
94 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n-
95 const Cal3_S2& cal);
\n-
96
\n-
98 void print(const std::string& s = "Cal3_S2") const override;
\n-
99
\n-
101 bool equals(const Cal3_S2& K, double tol = 10e-9) const;
\n-
102
\n-
\n-
104 inline Cal3_S2 between(const Cal3_S2& q,
\n-
105 OptionalJacobian<5, 5> H1 = boost::none,
\n-
106 OptionalJacobian<5, 5> H2 = boost::none) const {
\n-
107 if (H1) *H1 = -I_5x5;
\n-
108 if (H2) *H2 = I_5x5;
\n-
109 return Cal3_S2(q.fx_ - fx_, q.fy_ - fy_, q.s_ - s_, q.u0_ - u0_,
\n-
110 q.v0_ - v0_);
\n-
111 }
\n-
\n-
112
\n-
116
\n-
118 inline static size_t Dim() { return dimension; }
\n-
119
\n-
\n-
121 inline Cal3_S2 retract(const Vector& d) const {
\n-
122 return Cal3_S2(fx_ + d(0), fy_ + d(1), s_ + d(2), u0_ + d(3), v0_ + d(4));
\n-
123 }
\n-
\n+
93public:
\n+
94
\n+
97
\n+
105 static Pose3 LevelPose(const Pose2& pose2, double height);
\n+
106
\n+
115 static Pose3 LookatPose(const Point3& eye, const Point3& target,
\n+
116 const Point3& upVector);
\n+
117
\n+
121
\n+\n
124
\n-
\n-
126 Vector5 localCoordinates(const Cal3_S2& T2) const {
\n-
127 return T2.vector() - vector();
\n-
128 }
\n-
\n-
129
\n+
126 explicit PinholeBase(const Pose3& pose) : pose_(pose) {}
\n+
127
\n+
131
\n+
132 explicit PinholeBase(const Vector& v) : pose_(Pose3::Expmap(v)) {}
\n
133
\n-
134 private:
\n-
136 friend class boost::serialization::access;
\n-
137 template <class Archive>
\n-
138 void serialize(Archive& ar, const unsigned int /*version*/) {
\n-
139 ar& boost::serialization::make_nvp(
\n-
140 "Cal3_S2", boost::serialization::base_object<Cal3>(*this));
\n-
141 }
\n-
142
\n-
144};
\n-
\n-
145
\n-
146template <>
\n-
147struct traits<Cal3_S2> : public internal::Manifold<Cal3_S2> {};
\n-
148
\n-
149template <>
\n-
150struct traits<const Cal3_S2> : public internal::Manifold<Cal3_S2> {};
\n-
151
\n-
152} // \\ namespace gtsam
\n-
Common code for all Calibration models.
\n-
2D Point
\n+
135 virtual ~PinholeBase() = default;
\n+
136
\n+
140
\n+
142 bool equals(const PinholeBase &camera, double tol = 1e-9) const;
\n+
143
\n+
145 virtual void print(const std::string& s = "PinholeBase") const;
\n+
146
\n+
150
\n+
\n+
152 const Pose3& pose() const {
\n+
153 return pose_;
\n+
154 }
\n+
\n+
155
\n+
\n+
157 const Rot3& rotation() const {
\n+
158 return pose_.rotation();
\n+
159 }
\n+
\n+
160
\n+
\n+
162 const Point3& translation() const {
\n+
163 return pose_.translation();
\n+
164 }
\n+
\n+
165
\n+
167 const Pose3& getPose(OptionalJacobian<6, 6> H) const;
\n+
168
\n+
172
\n+
178 static Point2 Project(const Point3& pc, //
\n+
179 OptionalJacobian<2, 3> Dpoint = boost::none);
\n+
180
\n+
186 static Point2 Project(const Unit3& pc, //
\n+
187 OptionalJacobian<2, 2> Dpoint = boost::none);
\n+
188
\n+
190 std::pair<Point2, bool> projectSafe(const Point3& pw) const;
\n+
191
\n+
197 Point2 project2(const Point3& point, OptionalJacobian<2, 6> Dpose =
\n+
198 boost::none, OptionalJacobian<2, 3> Dpoint = boost::none) const;
\n+
199
\n+
205 Point2 project2(const Unit3& point,
\n+
206 OptionalJacobian<2, 6> Dpose = boost::none,
\n+
207 OptionalJacobian<2, 2> Dpoint = boost::none) const;
\n+
208
\n+
210 static Point3 BackprojectFromCamera(const Point2& p, const double depth,
\n+
211 OptionalJacobian<3, 2> Dpoint = boost::none,
\n+
212 OptionalJacobian<3, 1> Ddepth = boost::none);
\n+
213
\n+
217
\n+
\n+
223 inline static std::pair<size_t, size_t> translationInterval() {
\n+
224 return std::make_pair(3, 5);
\n+
225 }
\n+
\n+
226
\n+
228
\n+
229private:
\n+
230
\n+
232 friend class boost::serialization::access;
\n+
233 template<class Archive>
\n+
234 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
235 ar & BOOST_SERIALIZATION_NVP(pose_);
\n+
236 }
\n+
237};
\n+
\n+
238// end of class PinholeBase
\n+
239
\n+
\n+
247class GTSAM_EXPORT CalibratedCamera: public PinholeBase {
\n+
248
\n+
249public:
\n+
250
\n+
251 enum {
\n+
252 dimension = 6
\n+
253 };
\n+
254
\n+
257
\n+
\n+\n+
260 }
\n+
\n+
261
\n+
\n+
263 explicit CalibratedCamera(const Pose3& pose) :
\n+
264 PinholeBase(pose) {
\n+
265 }
\n+
\n+
266
\n+
270
\n+
271 // Create CalibratedCamera, with derivatives
\n+
272 static CalibratedCamera Create(const Pose3& pose,
\n+
273 OptionalJacobian<dimension, 6> H1 = boost::none) {
\n+
274 if (H1)
\n+
275 *H1 << I_6x6;
\n+
276 return CalibratedCamera(pose);
\n+
277 }
\n+
278
\n+
285 static CalibratedCamera Level(const Pose2& pose2, double height);
\n+
286
\n+
295 static CalibratedCamera Lookat(const Point3& eye, const Point3& target,
\n+
296 const Point3& upVector);
\n+
297
\n+
301
\n+
\n+
303 explicit CalibratedCamera(const Vector &v) :
\n+
304 PinholeBase(v) {
\n+
305 }
\n+
\n+
306
\n+
310
\n+
\n+\n+
313 }
\n+
\n+
314
\n+
318
\n+
320 CalibratedCamera retract(const Vector& d) const;
\n+
321
\n+
323 Vector localCoordinates(const CalibratedCamera& T2) const;
\n+
324
\n+
\n+
326 void print(const std::string& s = "CalibratedCamera") const override {
\n+
327 PinholeBase::print(s);
\n+
328 }
\n+
\n+
329
\n+
\n+
331 inline size_t dim() const {
\n+
332 return dimension;
\n+
333 }
\n+
\n+
334
\n+
\n+
336 inline static size_t Dim() {
\n+
337 return dimension;
\n+
338 }
\n+
\n+
339
\n+
343
\n+
348 Point2 project(const Point3& point, OptionalJacobian<2, 6> Dcamera =
\n+
349 boost::none, OptionalJacobian<2, 3> Dpoint = boost::none) const;
\n+
350
\n+
\n+
352 Point3 backproject(const Point2& pn, double depth,
\n+
353 OptionalJacobian<3, 6> Dresult_dpose = boost::none,
\n+
354 OptionalJacobian<3, 2> Dresult_dp = boost::none,
\n+
355 OptionalJacobian<3, 1> Dresult_ddepth = boost::none) const {
\n+
356
\n+
357 Matrix32 Dpoint_dpn;
\n+
358 Matrix31 Dpoint_ddepth;
\n+
359 const Point3 point = BackprojectFromCamera(pn, depth,
\n+
360 Dresult_dp ? &Dpoint_dpn : 0,
\n+
361 Dresult_ddepth ? &Dpoint_ddepth : 0);
\n+
362
\n+
363 Matrix33 Dresult_dpoint;
\n+
364 const Point3 result = pose().transformFrom(point, Dresult_dpose,
\n+
365 (Dresult_ddepth ||
\n+
366 Dresult_dp) ? &Dresult_dpoint : 0);
\n+
367
\n+
368 if (Dresult_dp)
\n+
369 *Dresult_dp = Dresult_dpoint * Dpoint_dpn;
\n+
370 if (Dresult_ddepth)
\n+
371 *Dresult_ddepth = Dresult_dpoint * Dpoint_ddepth;
\n+
372
\n+
373 return result;
\n+
374 }
\n+
\n+
375
\n+
\n+
381 double range(const Point3& point,
\n+
382 OptionalJacobian<1, 6> Dcamera = boost::none,
\n+
383 OptionalJacobian<1, 3> Dpoint = boost::none) const {
\n+
384 return pose().range(point, Dcamera, Dpoint);
\n+
385 }
\n+
\n+
386
\n+
\n+
392 double range(const Pose3& pose, OptionalJacobian<1, 6> Dcamera = boost::none,
\n+
393 OptionalJacobian<1, 6> Dpose = boost::none) const {
\n+
394 return this->pose().range(pose, Dcamera, Dpose);
\n+
395 }
\n+
\n+
396
\n+
\n+
402 double range(const CalibratedCamera& camera, //
\n+
403 OptionalJacobian<1, 6> H1 = boost::none, //
\n+
404 OptionalJacobian<1, 6> H2 = boost::none) const {
\n+
405 return pose().range(camera.pose(), H1, H2);
\n+
406 }
\n+
\n+
407
\n+
409
\n+
410private:
\n+
411
\n+
414
\n+
416 friend class boost::serialization::access;
\n+
417 template<class Archive>
\n+
418 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
419 ar
\n+
420 & boost::serialization::make_nvp("PinholeBase",
\n+
421 boost::serialization::base_object<PinholeBase>(*this));
\n+
422 }
\n+
423
\n+
425};
\n+
\n+
426
\n+
427// manifold traits
\n+
428template <>
\n+
429struct traits<CalibratedCamera> : public internal::Manifold<CalibratedCamera> {};
\n+
430
\n+
431template <>
\n+
432struct traits<const CalibratedCamera> : public internal::Manifold<CalibratedCamera> {};
\n+
433
\n+
434// range traits, used in RangeFactor
\n+
435template <typename T>
\n+
436struct Range<CalibratedCamera, T> : HasRange<CalibratedCamera, T, double> {};
\n+
437
\n+
438} // namespace gtsam
\n+
Base class and basic functions for Manifold types.
\n+
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
\n+
3D Pose
\n+
Bearing-Range product.
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
Point2_ project(const Point3_ &p_cam)
Expression version of PinholeBase::Project.
Definition expressions.h:131
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
Common base class for all calibration models.
Definition Cal3.h:69
\n-
Vector5 vector() const
vectorized form (column-wise)
Definition Cal3.h:160
\n-
double fy_
focal length
Definition Cal3.h:71
\n-
double s_
skew
Definition Cal3.h:72
\n-
double v0_
principal point
Definition Cal3.h:73
\n-
The most common 5DOF 3D->2D calibration.
Definition Cal3_S2.h:34
\n-
Cal3_S2()=default
Create a default calibration that leaves coordinates unchanged.
\n-
Cal3_S2(double fx, double fy, double s, double u0, double v0)
constructor from doubles
Definition Cal3_S2.h:48
\n-
Cal3_S2 between(const Cal3_S2 &q, OptionalJacobian< 5, 5 > H1=boost::none, OptionalJacobian< 5, 5 > H2=boost::none) const
"Between", subtracts calibrations. between(p,q) == compose(inverse(p),q)
Definition Cal3_S2.h:104
\n-
static size_t Dim()
return DOF, dimensionality of tangent space
Definition Cal3_S2.h:118
\n-
Cal3_S2(const Vector5 &d)
constructor from vector
Definition Cal3_S2.h:52
\n-
Vector5 localCoordinates(const Cal3_S2 &T2) const
Unretraction for the calibration.
Definition Cal3_S2.h:126
\n-
Cal3_S2(double fov, int w, int h)
Easy constructor, takes fov in degrees, asssumes zero skew, unit aspect.
Definition Cal3_S2.h:60
\n-
Cal3_S2 retract(const Vector &d) const
Given 5-dim tangent vector, create new calibration.
Definition Cal3_S2.h:121
\n+
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
Definition ThreadsafeException.h:42
\n+
Definition BearingRange.h:40
\n+
Definition BearingRange.h:194
\n+
Definition CalibratedCamera.h:32
\n+
A pinhole camera class that has a Pose3, functions as base class for all pinhole cameras.
Definition CalibratedCamera.h:52
\n+
PinholeBase()
Default constructor.
Definition CalibratedCamera.h:123
\n+
PinholeBase(const Pose3 &pose)
Constructor with pose.
Definition CalibratedCamera.h:126
\n+
const Point3 & translation() const
get translation
Definition CalibratedCamera.h:162
\n+
const Rot3 & rotation() const
get rotation
Definition CalibratedCamera.h:157
\n+
Point2 Measurement
Some classes template on either PinholeCamera or StereoCamera, and this typedef informs those classes...
Definition CalibratedCamera.h:64
\n+
const Pose3 & pose() const
return pose, constant version
Definition CalibratedCamera.h:152
\n+
static std::pair< size_t, size_t > translationInterval()
Return the start and end indices (inclusive) of the translation component of the exponential map para...
Definition CalibratedCamera.h:223
\n+
Rot3 Rotation
Pose Concept requirements.
Definition CalibratedCamera.h:57
\n+
virtual ~PinholeBase()=default
Default destructor.
\n+
A Calibrated camera class [R|-R't], calibration K=I.
Definition CalibratedCamera.h:247
\n+
Point3 backproject(const Point2 &pn, double depth, OptionalJacobian< 3, 6 > Dresult_dpose=boost::none, OptionalJacobian< 3, 2 > Dresult_dp=boost::none, OptionalJacobian< 3, 1 > Dresult_ddepth=boost::none) const
backproject a 2-dimensional point to a 3-dimensional point at given depth
Definition CalibratedCamera.h:352
\n+
CalibratedCamera()
default constructor
Definition CalibratedCamera.h:259
\n+
double range(const Pose3 &pose, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dpose=boost::none) const
Calculate range to another pose.
Definition CalibratedCamera.h:392
\n+
size_t dim() const
Definition CalibratedCamera.h:331
\n+
CalibratedCamera(const Vector &v)
construct from vector
Definition CalibratedCamera.h:303
\n+
virtual ~CalibratedCamera()
destructor
Definition CalibratedCamera.h:312
\n+
static size_t Dim()
Definition CalibratedCamera.h:336
\n+
double range(const CalibratedCamera &camera, OptionalJacobian< 1, 6 > H1=boost::none, OptionalJacobian< 1, 6 > H2=boost::none) const
Calculate range to another camera.
Definition CalibratedCamera.h:402
\n+
void print(const std::string &s="CalibratedCamera") const override
print
Definition CalibratedCamera.h:326
\n+
double range(const Point3 &point, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 3 > Dpoint=boost::none) const
Calculate range to a landmark.
Definition CalibratedCamera.h:381
\n+
CalibratedCamera(const Pose3 &pose)
construct with pose
Definition CalibratedCamera.h:263
\n+
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Point3 transformFrom(const Point3 &point, OptionalJacobian< 3, 6 > Hself=boost::none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const
takes point in Pose coordinates and transforms it to world coordinates
Definition Pose3.cpp:347
\n+
double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none, OptionalJacobian< 1, 3 > Hpoint=boost::none) const
Calculate range to a landmark.
Definition Pose3.cpp:399
\n+
const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get translation
Definition Pose3.cpp:308
\n+
const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get rotation
Definition Pose3.cpp:315
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,186 +1,460 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3_S2.h\n+CalibratedCamera.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-22#pragma once\n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n-28\n-_\b3_\b4class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\b__\bS_\b2 : public _\bC_\ba_\bl_\b3 {\n-35 public:\n-36 enum { dimension = 5 };\n-37\n-39 using shared_ptr = boost::shared_ptr;\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+24#include \n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh>\n+27#include \n+28#include \n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+_\b3_\b2class GTSAM_EXPORT _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn: public\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn {\n+33public:\n+34 _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn()\n+35 : _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(std::numeric_limits::max()) {}\n+36\n+37 _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(_\bK_\be_\by j)\n+38 : _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b<_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b>(\"CheiralityException\"),\n+39 j_(j) {}\n 40\n-43\n-_\b4_\b5 _\bC_\ba_\bl_\b3_\b__\bS_\b2() = default;\n+41 _\bK_\be_\by nearbyVariable() const {return j_;}\n+42\n+43private:\n+44 _\bK_\be_\by j_;\n+45};\n 46\n-_\b4_\b8 _\bC_\ba_\bl_\b3_\b__\bS_\b2(double fx, double fy, double s, double u0, double v0)\n-49 : _\bC_\ba_\bl_\b3(fx, fy, s, u0, v0) {}\n-50\n-_\b5_\b2 _\bC_\ba_\bl_\b3_\b__\bS_\b2(const Vector5& d) : _\bC_\ba_\bl_\b3(d) {}\n+_\b5_\b2class GTSAM_EXPORT _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be {\n 53\n-_\b6_\b0 _\bC_\ba_\bl_\b3_\b__\bS_\b2(double fov, int w, int h) : _\bC_\ba_\bl_\b3(fov, w, h) {}\n-61\n-69 _\bP_\bo_\bi_\bn_\bt_\b2 uncalibrate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b5_\b> Dcal = boost::\n-none,\n-70 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dp = boost::none) const;\n-71\n-79 _\bP_\bo_\bi_\bn_\bt_\b2 calibrate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b5_\b> Dcal = boost::none,\n-80 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dp = boost::none) const;\n-81\n-87 Vector3 calibrate(const Vector3& p) const;\n-88\n+54public:\n+55\n+_\b5_\b7 typedef _\bR_\bo_\bt_\b3 _\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn;\n+58 typedef _\bP_\bo_\bi_\bn_\bt_\b3 Translation;\n+59\n+_\b6_\b4 typedef _\bP_\bo_\bi_\bn_\bt_\b2 _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt;\n+65 typedef Point2Vector MeasurementVector;\n+66\n+67private:\n+68\n+69 _\bP_\bo_\bs_\be_\b3 pose_;\n+70\n+71protected:\n+72\n+75\n+81 static Matrix26 Dpose(const _\bP_\bo_\bi_\bn_\bt_\b2& pn, double d);\n+82\n+89 static Matrix23 Dpoint(const _\bP_\bo_\bi_\bn_\bt_\b2& pn, double d, const Matrix3& Rt);\n+90\n 92\n-94 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-95 const _\bC_\ba_\bl_\b3_\b__\bS_\b2& cal);\n-96\n-98 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"Cal3_S2\") const override;\n-99\n-101 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bl_\b3_\b__\bS_\b2& K, double tol = 10e-9) const;\n-102\n-_\b1_\b0_\b4 inline _\bC_\ba_\bl_\b3_\b__\bS_\b2 _\bb_\be_\bt_\bw_\be_\be_\bn(const _\bC_\ba_\bl_\b3_\b__\bS_\b2& q,\n-105 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b5_\b,_\b _\b5_\b> H1 = boost::none,\n-106 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b5_\b,_\b _\b5_\b> H2 = boost::none) const {\n-107 if (H1) *H1 = -I_5x5;\n-108 if (H2) *H2 = I_5x5;\n-109 return _\bC_\ba_\bl_\b3_\b__\bS_\b2(q.fx_ - fx_, q._\bf_\by_\b_ - fy_, q._\bs_\b_ - s_, q.u0_ - u0_,\n-110 q._\bv_\b0_\b_ - v0_);\n-111 }\n-112\n-116\n-_\b1_\b1_\b8 inline static size_t _\bD_\bi_\bm() { return dimension; }\n-119\n-_\b1_\b2_\b1 inline _\bC_\ba_\bl_\b3_\b__\bS_\b2 _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& d) const {\n-122 return _\bC_\ba_\bl_\b3_\b__\bS_\b2(fx_ + d(0), fy_ + d(1), s_ + d(2), u0_ + d(3), v0_ + d(4));\n-123 }\n+93public:\n+94\n+97\n+105 static _\bP_\bo_\bs_\be_\b3 LevelPose(const _\bP_\bo_\bs_\be_\b2& pose2, double height);\n+106\n+115 static _\bP_\bo_\bs_\be_\b3 LookatPose(const _\bP_\bo_\bi_\bn_\bt_\b3& eye, const _\bP_\bo_\bi_\bn_\bt_\b3& target,\n+116 const _\bP_\bo_\bi_\bn_\bt_\b3& upVector);\n+117\n+121\n+_\b1_\b2_\b3 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be() {}\n 124\n-_\b1_\b2_\b6 Vector5 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bC_\ba_\bl_\b3_\b__\bS_\b2& T2) const {\n-127 return T2._\bv_\be_\bc_\bt_\bo_\br() - vector();\n-128 }\n-129\n+_\b1_\b2_\b6 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(const _\bP_\bo_\bs_\be_\b3& pose) : pose_(pose) {}\n+127\n+131\n+132 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(const Vector& v) : pose_(_\bP_\bo_\bs_\be_\b3::Expmap(v)) {}\n 133\n-134 private:\n-_\b1_\b3_\b6 friend class boost::serialization::access;\n-137 template \n-138 void serialize(Archive& ar, const unsigned int /*version*/) {\n-139 ar& boost::serialization::make_nvp(\n-140 \"Cal3_S2\", boost::serialization::base_object(*this));\n-141 }\n-142\n-144};\n-145\n-146template <>\n-_\b1_\b4_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\b__\bS_\b2> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n-148\n-149template <>\n-_\b1_\b5_\b0struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n-151\n-152} // \\ namespace gtsam\n-_\bC_\ba_\bl_\b3_\b._\bh\n-Common code for all Calibration models.\n+_\b1_\b3_\b5 virtual _\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be() = default;\n+136\n+140\n+142 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be &camera, double tol = 1e-9) const;\n+143\n+145 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"PinholeBase\") const;\n+146\n+150\n+_\b1_\b5_\b2 const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be() const {\n+153 return pose_;\n+154 }\n+155\n+_\b1_\b5_\b7 const _\bR_\bo_\bt_\b3& _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn() const {\n+158 return pose_._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn();\n+159 }\n+160\n+_\b1_\b6_\b2 const _\bP_\bo_\bi_\bn_\bt_\b3& _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn() const {\n+163 return pose_._\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn();\n+164 }\n+165\n+167 const _\bP_\bo_\bs_\be_\b3& getPose(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H) const;\n+168\n+172\n+178 static _\bP_\bo_\bi_\bn_\bt_\b2 Project(const _\bP_\bo_\bi_\bn_\bt_\b3& pc, //\n+179 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none);\n+180\n+186 static _\bP_\bo_\bi_\bn_\bt_\b2 Project(const _\bU_\bn_\bi_\bt_\b3& pc, //\n+187 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dpoint = boost::none);\n+188\n+190 std::pair projectSafe(const _\bP_\bo_\bi_\bn_\bt_\b3& pw) const;\n+191\n+197 _\bP_\bo_\bi_\bn_\bt_\b2 project2(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose =\n+198 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none) const;\n+199\n+205 _\bP_\bo_\bi_\bn_\bt_\b2 project2(const _\bU_\bn_\bi_\bt_\b3& point,\n+206 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose = boost::none,\n+207 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dpoint = boost::none) const;\n+208\n+210 static _\bP_\bo_\bi_\bn_\bt_\b3 BackprojectFromCamera(const _\bP_\bo_\bi_\bn_\bt_\b2& p, const double depth,\n+211 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b2_\b> Dpoint = boost::none,\n+212 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Ddepth = boost::none);\n+213\n+217\n+_\b2_\b2_\b3 inline static std::pair _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() {\n+224 return std::make_pair(3, 5);\n+225 }\n+226\n+228\n+229private:\n+230\n+_\b2_\b3_\b2 friend class boost::serialization::access;\n+233 template\n+234 void serialize(Archive & ar, const unsigned int /*version*/) {\n+235 ar & BOOST_SERIALIZATION_NVP(pose_);\n+236 }\n+237};\n+238// end of class PinholeBase\n+239\n+_\b2_\b4_\b7class GTSAM_EXPORT _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba: public _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be {\n+248\n+249public:\n+250\n+251 enum {\n+252 dimension = 6\n+253 };\n+254\n+257\n+_\b2_\b5_\b9 _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba() {\n+260 }\n+261\n+_\b2_\b6_\b3 explicit _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& pose) :\n+264 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(pose) {\n+265 }\n+266\n+270\n+271 // Create CalibratedCamera, with derivatives\n+272 static _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba Create(const _\bP_\bo_\bs_\be_\b3& pose,\n+273 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b6_\b> H1 = boost::none) {\n+274 if (H1)\n+275 *H1 << I_6x6;\n+276 return _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba(pose);\n+277 }\n+278\n+285 static CalibratedCamera Level(const Pose2& pose2, double height);\n+286\n+295 static CalibratedCamera Lookat(const Point3& eye, const Point3& target,\n+296 const Point3& upVector);\n+297\n+301\n+_\b3_\b0_\b3 explicit _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba(const Vector &v) :\n+304 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(v) {\n+305 }\n+306\n+310\n+_\b3_\b1_\b2 virtual _\b~_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba() {\n+313 }\n+314\n+318\n+320 _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba retract(const Vector& d) const;\n+321\n+323 Vector localCoordinates(const _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba& T2) const;\n+324\n+_\b3_\b2_\b6 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"CalibratedCamera\") const override {\n+327 PinholeBase::print(s);\n+328 }\n+329\n+_\b3_\b3_\b1 inline size_t _\bd_\bi_\bm() const {\n+332 return dimension;\n+333 }\n+334\n+_\b3_\b3_\b6 inline static size_t _\bD_\bi_\bm() {\n+337 return dimension;\n+338 }\n+339\n+343\n+348 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dcamera =\n+349 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none) const;\n+350\n+_\b3_\b5_\b2 _\bP_\bo_\bi_\bn_\bt_\b3 _\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b2& pn, double depth,\n+353 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Dresult_dpose = boost::none,\n+354 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b2_\b> Dresult_dp = boost::none,\n+355 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Dresult_ddepth = boost::none) const {\n+356\n+357 Matrix32 Dpoint_dpn;\n+358 Matrix31 Dpoint_ddepth;\n+359 const _\bP_\bo_\bi_\bn_\bt_\b3 point = BackprojectFromCamera(pn, depth,\n+360 Dresult_dp ? &Dpoint_dpn : 0,\n+361 Dresult_ddepth ? &Dpoint_ddepth : 0);\n+362\n+363 Matrix33 Dresult_dpoint;\n+364 const _\bP_\bo_\bi_\bn_\bt_\b3 result = pose()._\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm(point, Dresult_dpose,\n+365 (Dresult_ddepth ||\n+366 Dresult_dp) ? &Dresult_dpoint : 0);\n+367\n+368 if (Dresult_dp)\n+369 *Dresult_dp = Dresult_dpoint * Dpoint_dpn;\n+370 if (Dresult_ddepth)\n+371 *Dresult_ddepth = Dresult_dpoint * Dpoint_ddepth;\n+372\n+373 return result;\n+374 }\n+375\n+_\b3_\b8_\b1 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& point,\n+382 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera = boost::none,\n+383 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> Dpoint = boost::none) const {\n+384 return pose()._\br_\ba_\bn_\bg_\be(point, Dcamera, Dpoint);\n+385 }\n+386\n+_\b3_\b9_\b2 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bs_\be_\b3& pose, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera = boost::\n+none,\n+393 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dpose = boost::none) const {\n+394 return this->pose()._\br_\ba_\bn_\bg_\be(pose, Dcamera, Dpose);\n+395 }\n+396\n+_\b4_\b0_\b2 double _\br_\ba_\bn_\bg_\be(const _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba& camera, //\n+403 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> H1 = boost::none, //\n+404 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> H2 = boost::none) const {\n+405 return pose()._\br_\ba_\bn_\bg_\be(camera._\bp_\bo_\bs_\be(), H1, H2);\n+406 }\n+407\n+409\n+410private:\n+411\n+414\n+_\b4_\b1_\b6 friend class boost::serialization::access;\n+417 template\n+418 void serialize(Archive & ar, const unsigned int /*version*/) {\n+419 ar\n+420 & boost::serialization::make_nvp(\"PinholeBase\",\n+421 boost::serialization::base_object(*this));\n+422 }\n+423\n+425};\n+426\n+427// manifold traits\n+428template <>\n+_\b4_\b2_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n+430\n+431template <>\n+_\b4_\b3_\b2struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n+433\n+434// range traits, used in RangeFactor\n+435template \n+_\b4_\b3_\b6struct _\bR_\ba_\bn_\bg_\be<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba, T> : _\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n+{};\n+437\n+438} // namespace gtsam\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n+Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n+_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n+Bearing-Range product.\n _\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n 2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n Vector2 Point2\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n typedef Point2 to Vector2...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n+Point2_ project(const Point3_ &p_cam)\n+Expression version of PinholeBase::Project.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn expressions.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n Both ManifoldTraits and Testable.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3\n-Common base class for all calibration models.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-Vector5 vector() const\n-vectorized form (column-wise)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bf_\by_\b_\n-double fy_\n-focal length\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bs_\b_\n-double s_\n-skew\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bv_\b0_\b_\n-double v0_\n-principal point\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n-The most common 5DOF 3D->2D calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n-Cal3_S2()=default\n-Create a default calibration that leaves coordinates unchanged.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n-Cal3_S2(double fx, double fy, double s, double u0, double v0)\n-constructor from doubles\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bb_\be_\bt_\bw_\be_\be_\bn\n-Cal3_S2 between(const Cal3_S2 &q, OptionalJacobian< 5, 5 > H1=boost::none,\n-OptionalJacobian< 5, 5 > H2=boost::none) const\n-\"Between\", subtracts calibrations. between(p,q) == compose(inverse(p),q)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bD_\bi_\bm\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:194\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n+A pinhole camera class that has a Pose3, functions as base class for all\n+pinhole cameras.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n+PinholeBase()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n+PinholeBase(const Pose3 &pose)\n+Constructor with pose.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n+const Point3 & translation() const\n+get translation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+const Rot3 & rotation() const\n+get rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+Point2 Measurement\n+Some classes template on either PinholeCamera or StereoCamera, and this typedef\n+informs those classes...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be\n+const Pose3 & pose() const\n+return pose, constant version\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n+static std::pair< size_t, size_t > translationInterval()\n+Return the start and end indices (inclusive) of the translation component of\n+the exponential map para...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:223\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+Rot3 Rotation\n+Pose Concept requirements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n+virtual ~PinholeBase()=default\n+Default destructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n+A Calibrated camera class [R|-R't], calibration K=I.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:247\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt\n+Point3 backproject(const Point2 &pn, double depth, OptionalJacobian< 3, 6 >\n+Dresult_dpose=boost::none, OptionalJacobian< 3, 2 > Dresult_dp=boost::none,\n+OptionalJacobian< 3, 1 > Dresult_ddepth=boost::none) const\n+backproject a 2-dimensional point to a 3-dimensional point at given depth\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:352\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n+CalibratedCamera()\n+default constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:259\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const Pose3 &pose, OptionalJacobian< 1, 6 > Dcamera=boost::none,\n+OptionalJacobian< 1, 6 > Dpose=boost::none) const\n+Calculate range to another pose.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:392\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:331\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n+CalibratedCamera(const Vector &v)\n+construct from vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:303\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\b~_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n+virtual ~CalibratedCamera()\n+destructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:312\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bD_\bi_\bm\n static size_t Dim()\n-return DOF, dimensionality of tangent space\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n-Cal3_S2(const Vector5 &d)\n-constructor from vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-Vector5 localCoordinates(const Cal3_S2 &T2) const\n-Unretraction for the calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n-Cal3_S2(double fov, int w, int h)\n-Easy constructor, takes fov in degrees, asssumes zero skew, unit aspect.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-Cal3_S2 retract(const Vector &d) const\n-Given 5-dim tangent vector, create new calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:121\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:336\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const CalibratedCamera &camera, OptionalJacobian< 1, 6 >\n+H1=boost::none, OptionalJacobian< 1, 6 > H2=boost::none) const\n+Calculate range to another camera.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:402\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"CalibratedCamera\") const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:326\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const Point3 &point, OptionalJacobian< 1, 6 > Dcamera=boost::none,\n+OptionalJacobian< 1, 3 > Dpoint=boost::none) const\n+Calculate range to a landmark.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:381\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n+CalibratedCamera(const Pose3 &pose)\n+construct with pose\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:263\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+A 2D pose (Point2,Rot2)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm\n+Point3 transformFrom(const Point3 &point, OptionalJacobian< 3, 6 >\n+Hself=boost::none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const\n+takes point in Pose coordinates and transforms it to world coordinates\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:347\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none,\n+OptionalJacobian< 1, 3 > Hpoint=boost::none) const\n+Calculate range to a landmark.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:399\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n+const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n+get translation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:308\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n+get rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:315\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n+ * _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00365.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00365.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SimpleCamera.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,52 @@\n \n \n \n \n \n
\n \n-
SimpleCamera.cpp File Reference
\n+Classes |\n+Namespaces |\n+Functions
\n+
Cal3.h File Reference
\n \n
\n \n-

A simple camera class with a Cal3_S2 calibration. \n+

Common code for all Calibration models. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Cal3
 Common base class for all calibration models. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n

\n+Functions

template<typename Cal , size_t Dim>
void gtsam::calibrateJacobians (const Cal &calibration, const Point2 &pn, OptionalJacobian< 2, Dim > Dcal=boost::none, OptionalJacobian< 2, 2 > Dp=boost::none)
 Function which makes use of the Implicit Function Theorem to compute the Jacobians of calibrate using uncalibrate.
 
\n

Detailed Description

\n-

A simple camera class with a Cal3_S2 calibration.

\n-
Date
June 30, 2012
\n-
Author
Frank Dellaert
\n+

Common code for all Calibration models.

\n+
Author
Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SimpleCamera.cpp File Reference\n-A simple camera class with a Cal3_S2 calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Cal3.h File Reference\n+Common code for all Calibration models. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3\n+\u00a0 Common base class for all calibration models. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs (const Cal &calibration, const _\bP_\bo_\bi_\bn_\bt_\b2 &pn,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 2, Dim > Dcal=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 2, 2 >\n+ Dp=boost::none)\n+\u00a0 Function which makes use of the Implicit Function Theorem to compute the\n+ Jacobians of calibrate using uncalibrate.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A simple camera class with a Cal3_S2 calibration.\n- Date\n- June 30, 2012\n+Common code for all Calibration models.\n Author\n- Frank Dellaert\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bi_\bm_\bp_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bc_\bp_\bp\n+ * _\bC_\ba_\bl_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00371.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00371.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeCamera.h File Reference\n \n \n \n \n \n \n \n@@ -96,52 +96,49 @@\n \n \n \n
\n \n-
Cal3DS2.h File Reference
\n+
PinholeCamera.h File Reference
\n
\n
\n \n-

Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base. \n+

Base class for all pinhole cameras. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n+\n \n-\n+\n+\n+\n \n

\n Classes

class  gtsam::Cal3DS2
 Calibration of a camera with radial distortion that also supports Lie-group behaviors for optimization. More...
class  gtsam::PinholeCamera< Calibration >
 A pinhole camera class that has a Pose3 and a Calibration. More...
 
struct  gtsam::traits< Cal3DS2 >
struct  gtsam::traits< PinholeCamera< Calibration > >
 
struct  gtsam::traits< const Cal3DS2 >
struct  gtsam::traits< const PinholeCamera< Calibration > >
 
struct  gtsam::Range< PinholeCamera< Calibration >, T >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.

\n-

Calibration of a camera with radial distortion.

\n-
Date
Feb 28, 2010
\n-
Author
ydjian @autho Varun Agrawal
\n-
Date
Feb 28, 2010
\n-
Author
ydjian
\n-
\n-Varun Agrawal
\n+

Base class for all pinhole cameras.

\n+
Author
Yong-Dian Jian
\n+
Date
Jan 27, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,40 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Cal3DS2.h File Reference\n-Calibration of a camera with radial distortion, calculations in base class\n-Cal3DS2_Base. _\bM_\bo_\br_\be_\b._\b._\b.\n+PinholeCamera.h File Reference\n+Base class for all pinhole cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2\n-\u00a0 Calibration of a camera with radial distortion that also supports Lie-\n- group behaviors for optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b _\b>\n+\u00a0 A pinhole camera class that has a _\bP_\bo_\bs_\be_\b3 and a Calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b _\b>_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b _\b>_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b _\b>_\b,_\b _\bT_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Calibration of a camera with radial distortion, calculations in base class\n-Cal3DS2_Base.\n-Calibration of a camera with radial distortion.\n- Date\n- Feb 28, 2010\n+Base class for all pinhole cameras.\n Author\n- ydjian @autho Varun Agrawal\n+ Yong-Dian Jian\n Date\n- Feb 28, 2010\n- Author\n- ydjian\n- Varun Agrawal\n+ Jan 27, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bh\n+ * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00371.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00371.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,5 @@\n var a00371 = [\n- [\"gtsam::traits< Cal3DS2 >\", \"a02984.html\", null],\n- [\"gtsam::traits< const Cal3DS2 >\", \"a02988.html\", null]\n+ [\"gtsam::traits< PinholeCamera< Calibration > >\", \"a03108.html\", null],\n+ [\"gtsam::traits< const PinholeCamera< Calibration > >\", \"a03112.html\", null],\n+ [\"gtsam::Range< PinholeCamera< Calibration >, T >\", \"a03116.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00371_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00371_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeCamera.h Source File\n \n \n \n \n \n \n \n@@ -98,113 +98,400 @@\n
No Matches
\n \n \n \n \n \n
\n-
Cal3DS2.h
\n+
PinholeCamera.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n-
22
\n-
23#include <gtsam/geometry/Cal3DS2_Base.h>
\n-
24#include <boost/shared_ptr.hpp>
\n+
19#pragma once
\n+
20
\n+\n+\n+
23
\n+
24namespace gtsam {
\n
25
\n-
26namespace gtsam {
\n-
27
\n-
\n-
35class GTSAM_EXPORT Cal3DS2 : public Cal3DS2_Base {
\n-
36 using Base = Cal3DS2_Base;
\n-
37
\n-
38 public:
\n-
39 enum { dimension = 9 };
\n-
40
\n-
42 using shared_ptr = boost::shared_ptr<Cal3DS2>;
\n+
32template<typename Calibration>
\n+
\n+
33class PinholeCamera: public PinholeBaseK<Calibration> {
\n+
34
\n+
35public:
\n+
36
\n+\n+
42 typedef Point2Vector MeasurementVector;
\n
43
\n-
46
\n-
48 Cal3DS2() = default;
\n-
49
\n-
50 Cal3DS2(double fx, double fy, double s, double u0, double v0, double k1,
\n-
51 double k2, double p1 = 0.0, double p2 = 0.0, double tol = 1e-5)
\n-
52 : Base(fx, fy, s, u0, v0, k1, k2, p1, p2, tol) {}
\n+
44private:
\n+
45
\n+\n+
47 Calibration K_;
\n+
48
\n+
49 // Get dimensions of calibration type at compile time
\n+
50 static const int DimK = FixedDimension<Calibration>::value;
\n+
51
\n+
52public:
\n
53
\n-
54 ~Cal3DS2() override {}
\n-
55
\n-
59
\n-
60 Cal3DS2(const Vector9& v) : Base(v) {}
\n-
61
\n-
65
\n-
67 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n-
68 const Cal3DS2& cal);
\n+
54 enum {
\n+
55 dimension = 6 + DimK
\n+
56 };
\n+
57
\n+
60
\n+
\n+\n+
63 }
\n+
\n+
64
\n+
\n+
66 explicit PinholeCamera(const Pose3& pose) :
\n+
67 Base(pose) {
\n+
68 }
\n+
\n
69
\n-
71 void print(const std::string& s = "") const override;
\n-
72
\n-
74 bool equals(const Cal3DS2& K, double tol = 10e-9) const;
\n-
75
\n-
79
\n-
81 Cal3DS2 retract(const Vector& d) const;
\n-
82
\n-
84 Vector localCoordinates(const Cal3DS2& T2) const;
\n-
85
\n-
87 size_t dim() const override { return Dim(); }
\n-
88
\n-
90 inline static size_t Dim() { return dimension; }
\n-
91
\n+
\n+
71 PinholeCamera(const Pose3& pose, const Calibration& K) :
\n+
72 Base(pose), K_(K) {
\n+
73 }
\n+
\n+
74
\n+
78
\n+
\n+
86 static PinholeCamera Level(const Calibration &K, const Pose2& pose2,
\n+
87 double height) {
\n+
88 return PinholeCamera(Base::LevelPose(pose2, height), K);
\n+
89 }
\n+
\n+
90
\n+
\n+
92 static PinholeCamera Level(const Pose2& pose2, double height) {
\n+
93 return PinholeCamera::Level(Calibration(), pose2, height);
\n+
94 }
\n+
\n
95
\n-
\n-
97 boost::shared_ptr<Base> clone() const override {
\n-
98 return boost::shared_ptr<Base>(new Cal3DS2(*this));
\n-
99 }
\n-
\n-
100
\n-
102
\n-
103 private:
\n-
106
\n-
108 friend class boost::serialization::access;
\n-
109 template <class Archive>
\n-
110 void serialize(Archive& ar, const unsigned int /*version*/) {
\n-
111 ar& boost::serialization::make_nvp(
\n-
112 "Cal3DS2", boost::serialization::base_object<Cal3DS2_Base>(*this));
\n-
113 }
\n-
114
\n-
116};
\n-
\n-
117
\n-
118template <>
\n-
119struct traits<Cal3DS2> : public internal::Manifold<Cal3DS2> {};
\n-
120
\n-
121template <>
\n-
122struct traits<const Cal3DS2> : public internal::Manifold<Cal3DS2> {};
\n-
123}
\n+
\n+
105 static PinholeCamera Lookat(const Point3& eye, const Point3& target,
\n+
106 const Point3& upVector, const Calibration& K = Calibration()) {
\n+
107 return PinholeCamera(Base::LookatPose(eye, target, upVector), K);
\n+
108 }
\n+
\n+
109
\n+
110 // Create PinholeCamera, with derivatives
\n+
111 static PinholeCamera Create(const Pose3& pose, const Calibration &K,
\n+
112 OptionalJacobian<dimension, 6> H1 = boost::none, //
\n+
113 OptionalJacobian<dimension, DimK> H2 = boost::none) {
\n+
114 typedef Eigen::Matrix<double, DimK, 6> MatrixK6;
\n+
115 if (H1)
\n+
116 *H1 << I_6x6, MatrixK6::Zero();
\n+
117 typedef Eigen::Matrix<double, 6, DimK> Matrix6K;
\n+
118 typedef Eigen::Matrix<double, DimK, DimK> MatrixK;
\n+
119 if (H2)
\n+
120 *H2 << Matrix6K::Zero(), MatrixK::Identity();
\n+
121 return PinholeCamera(pose,K);
\n+
122 }
\n+
123
\n+
127
\n+
\n+
129 explicit PinholeCamera(const Vector &v) :
\n+
130 Base(v.head<6>()) {
\n+
131 if (v.size() > 6)
\n+
132 K_ = Calibration(v.tail<DimK>());
\n+
133 }
\n+
\n+
134
\n+
\n+
136 PinholeCamera(const Vector &v, const Vector &K) :
\n+
137 Base(v), K_(K) {
\n+
138 }
\n+
\n+
139
\n+
143
\n+
\n+
145 bool equals(const Base &camera, double tol = 1e-9) const {
\n+
146 const PinholeCamera* e = dynamic_cast<const PinholeCamera*>(&camera);
\n+
147 return Base::equals(camera, tol) && K_.equals(e->calibration(), tol);
\n+
148 }
\n+
\n+
149
\n+
\n+
151 void print(const std::string& s = "PinholeCamera") const override {
\n+
152 Base::print(s);
\n+
153 K_.print(s + ".calibration");
\n+
154 }
\n+
\n+
155
\n+
159
\n+
160 ~PinholeCamera() override {
\n+
161 }
\n+
162
\n+
\n+
164 const Pose3& pose() const {
\n+
165 return Base::pose();
\n+
166 }
\n+
\n+
167
\n+
\n+\n+
170 if (H) {
\n+
171 H->setZero();
\n+
172 H->template block<6, 6>(0, 0) = I_6x6;
\n+
173 }
\n+
174 return Base::pose();
\n+
175 }
\n+
\n+
176
\n+
\n+
178 const Calibration& calibration() const override {
\n+
179 return K_;
\n+
180 }
\n+
\n+
181
\n+
185
\n+
\n+
187 size_t dim() const {
\n+
188 return dimension;
\n+
189 }
\n+
\n+
190
\n+
\n+
192 static size_t Dim() {
\n+
193 return dimension;
\n+
194 }
\n+
\n+
195
\n+
196 typedef Eigen::Matrix<double, dimension, 1> VectorK6;
\n+
197
\n+
\n+
199 PinholeCamera retract(const Vector& d) const {
\n+
200 if ((size_t) d.size() == 6)
\n+
201 return PinholeCamera(this->pose().retract(d), calibration());
\n+
202 else
\n+
203 return PinholeCamera(this->pose().retract(d.head<6>()),
\n+
204 calibration().retract(d.tail(calibration().dim())));
\n+
205 }
\n+
\n+
206
\n+
\n+
208 VectorK6 localCoordinates(const PinholeCamera& T2) const {
\n+
209 VectorK6 d;
\n+
210 d.template head<6>() = this->pose().localCoordinates(T2.pose());
\n+
211 d.template tail<DimK>() = calibration().localCoordinates(T2.calibration());
\n+
212 return d;
\n+
213 }
\n+
\n+
214
\n+
\n+\n+
217 return PinholeCamera(); // assumes that the default constructor is valid
\n+
218 }
\n+
\n+
219
\n+
223
\n+
224 typedef Eigen::Matrix<double, 2, DimK> Matrix2K;
\n+
225
\n+
229 template<class POINT>
\n+
\n+\n+\n+
232 // We just call 3-derivative version in Base
\n+
233 if (Dcamera){
\n+
234 Matrix26 Dpose;
\n+
235 Eigen::Matrix<double, 2, DimK> Dcal;
\n+
236 const Point2 pi = Base::project(pw, Dpose, Dpoint, Dcal);
\n+
237 *Dcamera << Dpose, Dcal;
\n+
238 return pi;
\n+
239 } else {
\n+
240 return Base::project(pw, boost::none, Dpoint, boost::none);
\n+
241 }
\n+
242 }
\n+
\n+
243
\n+
\n+\n+
246 boost::none, OptionalJacobian<2, 3> Dpoint = boost::none) const {
\n+
247 return _project2(pw, Dcamera, Dpoint);
\n+
248 }
\n+
\n+
249
\n+
\n+\n+
252 boost::none, OptionalJacobian<2, 2> Dpoint = boost::none) const {
\n+
253 return _project2(pw, Dcamera, Dpoint);
\n+
254 }
\n+
\n+
255
\n+
\n+
261 double range(const Point3& point, OptionalJacobian<1, dimension> Dcamera =
\n+
262 boost::none, OptionalJacobian<1, 3> Dpoint = boost::none) const {
\n+
263 Matrix16 Dpose_;
\n+
264 double result = this->pose().range(point, Dcamera ? &Dpose_ : 0, Dpoint);
\n+
265 if (Dcamera)
\n+
266 *Dcamera << Dpose_, Eigen::Matrix<double, 1, DimK>::Zero();
\n+
267 return result;
\n+
268 }
\n+
\n+
269
\n+
\n+\n+
276 boost::none, OptionalJacobian<1, 6> Dpose = boost::none) const {
\n+
277 Matrix16 Dpose_;
\n+
278 double result = this->pose().range(pose, Dcamera ? &Dpose_ : 0, Dpose);
\n+
279 if (Dcamera)
\n+
280 *Dcamera << Dpose_, Eigen::Matrix<double, 1, DimK>::Zero();
\n+
281 return result;
\n+
282 }
\n+
\n+
283
\n+
289 template<class CalibrationB>
\n+
\n+
290 double range(const PinholeCamera<CalibrationB>& camera,
\n+
291 OptionalJacobian<1, dimension> Dcamera = boost::none,
\n+
292 OptionalJacobian<1, 6 + CalibrationB::dimension> Dother = boost::none) const {
\n+
293 Matrix16 Dcamera_, Dother_;
\n+
294 double result = this->pose().range(camera.pose(), Dcamera ? &Dcamera_ : 0,
\n+
295 Dother ? &Dother_ : 0);
\n+
296 if (Dcamera) {
\n+
297 *Dcamera << Dcamera_, Eigen::Matrix<double, 1, DimK>::Zero();
\n+
298 }
\n+
299 if (Dother) {
\n+
300 Dother->setZero();
\n+
301 Dother->template block<1, 6>(0, 0) = Dother_;
\n+
302 }
\n+
303 return result;
\n+
304 }
\n+
\n+
305
\n+
\n+
311 double range(const CalibratedCamera& camera,
\n+
312 OptionalJacobian<1, dimension> Dcamera = boost::none,
\n+
313 OptionalJacobian<1, 6> Dother = boost::none) const {
\n+
314 return range(camera.pose(), Dcamera, Dother);
\n+
315 }
\n+
\n+
316
\n+
\n+
318 Matrix34 cameraProjectionMatrix() const {
\n+
319 return K_.K() * PinholeBase::pose().inverse().matrix().block(0, 0, 3, 4);
\n+
320 }
\n+
\n+
321
\n+
\n+\n+
324 return Eigen::Matrix<double,traits<Point2>::dimension,1>::Constant(2.0 * K_.fx());;
\n+
325 }
\n+
\n+
326
\n+
327private:
\n+
328
\n+\n+
331 template<class Archive>
\n+
332 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
333 ar
\n+
334 & boost::serialization::make_nvp("PinholeBaseK",
\n+
335 boost::serialization::base_object<Base>(*this));
\n+
336 ar & BOOST_SERIALIZATION_NVP(K_);
\n+
337 }
\n+
338
\n+
339public:
\n+\n+
341};
\n+
\n+
342
\n+
343// manifold traits
\n+
344
\n+
345template <typename Calibration>
\n+
\n+
346struct traits<PinholeCamera<Calibration> >
\n+
347 : public internal::Manifold<PinholeCamera<Calibration> > {};
\n+
\n+
348
\n+
349template <typename Calibration>
\n+
\n+
350struct traits<const PinholeCamera<Calibration> >
\n+
351 : public internal::Manifold<PinholeCamera<Calibration> > {};
\n+
\n+
352
\n+
353// range traits, used in RangeFactor
\n+
354template <typename Calibration, typename T>
\n+
355struct Range<PinholeCamera<Calibration>, T> : HasRange<PinholeCamera<Calibration>, T, double> {};
\n+
356
\n+
357} // \\ gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Pinhole camera with known calibration.
\n+
Bearing-Range product.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
TangentVector localCoordinates(const Class &g) const
localCoordinates as required by manifold concept: finds tangent vector between *this and g
Definition Lie.h:136
\n
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n-
Calibration of a camera with radial distortion that also supports Lie-group behaviors for optimizatio...
Definition Cal3DS2.h:35
\n-
size_t dim() const override
Return dimensions of calibration manifold object.
Definition Cal3DS2.h:87
\n-
boost::shared_ptr< Base > clone() const override
Definition Cal3DS2.h:97
\n-
static size_t Dim()
Return dimensions of calibration manifold object.
Definition Cal3DS2.h:90
\n-
Cal3DS2()=default
Default Constructor with only unit focal length.
\n-
Calibration of a camera with radial distortion.
Definition Cal3DS2_Base.h:42
\n+
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
Definition BearingRange.h:40
\n+
Definition BearingRange.h:194
\n+
static Matrix26 Dpose(const Point2 &pn, double d)
Calculate Jacobian with respect to pose.
Definition CalibratedCamera.cpp:27
\n+
virtual void print(const std::string &s="PinholeBase") const
print
Definition CalibratedCamera.cpp:74
\n+
const Pose3 & pose() const
return pose, constant version
Definition CalibratedCamera.h:152
\n+
static Pose3 LevelPose(const Pose2 &pose2, double height)
Create a level pose at the given 2D pose and height.
Definition CalibratedCamera.cpp:49
\n+
bool equals(const PinholeBase &camera, double tol=1e-9) const
assert equality up to a tolerance
Definition CalibratedCamera.cpp:69
\n+
static Matrix23 Dpoint(const Point2 &pn, double d, const Matrix3 &Rt)
Calculate Jacobian with respect to point.
Definition CalibratedCamera.cpp:37
\n+
static Pose3 LookatPose(const Point3 &eye, const Point3 &target, const Point3 &upVector)
Create a camera pose at the given eye position looking at a target point in the scene with the specif...
Definition CalibratedCamera.cpp:58
\n+
A Calibrated camera class [R|-R't], calibration K=I.
Definition CalibratedCamera.h:247
\n+
A pinhole camera class that has a Pose3 and a Calibration.
Definition PinholeCamera.h:33
\n+
void print(const std::string &s="PinholeCamera") const override
print
Definition PinholeCamera.h:151
\n+
Point2 _project2(const POINT &pw, OptionalJacobian< 2, dimension > Dcamera, OptionalJacobian< 2, FixedDimension< POINT >::value > Dpoint) const
Templated projection of a 3D point or a point at infinity into the image.
Definition PinholeCamera.h:230
\n+
Vector defaultErrorWhenTriangulatingBehindCamera() const
for Nonlinear Triangulation
Definition PinholeCamera.h:323
\n+
const Calibration & calibration() const override
return calibration
Definition PinholeCamera.h:178
\n+
const Pose3 & getPose(OptionalJacobian< 6, dimension > H) const
return pose, with derivative
Definition PinholeCamera.h:169
\n+
Point2 project2(const Point3 &pw, OptionalJacobian< 2, dimension > Dcamera=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const
project a 3D point from world coordinates into the image
Definition PinholeCamera.h:245
\n+
PinholeCamera(const Pose3 &pose)
constructor with pose
Definition PinholeCamera.h:66
\n+
static PinholeCamera Level(const Pose2 &pose2, double height)
PinholeCamera::level with default calibration.
Definition PinholeCamera.h:92
\n+
PinholeCamera(const Pose3 &pose, const Calibration &K)
constructor with pose and calibration
Definition PinholeCamera.h:71
\n+
static PinholeCamera Level(const Calibration &K, const Pose2 &pose2, double height)
Create a level camera at the given 2D pose and height.
Definition PinholeCamera.h:86
\n+
size_t dim() const
Definition PinholeCamera.h:187
\n+
static PinholeCamera Identity()
for Canonical
Definition PinholeCamera.h:216
\n+
static size_t Dim()
Definition PinholeCamera.h:192
\n+
bool equals(const Base &camera, double tol=1e-9) const
assert equality up to a tolerance
Definition PinholeCamera.h:145
\n+
double range(const Pose3 &pose, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dpose=boost::none) const
Calculate range to another pose.
Definition PinholeCamera.h:275
\n+
double range(const PinholeCamera< CalibrationB > &camera, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 6+CalibrationB::dimension > Dother=boost::none) const
Calculate range to another camera.
Definition PinholeCamera.h:290
\n+
PinholeCamera(const Vector &v, const Vector &K)
Init from Vector and calibration.
Definition PinholeCamera.h:136
\n+
static PinholeCamera Lookat(const Point3 &eye, const Point3 &target, const Point3 &upVector, const Calibration &K=Calibration())
Create a camera at the given eye position looking at a target point in the scene with the specified u...
Definition PinholeCamera.h:105
\n+
Matrix34 cameraProjectionMatrix() const
for Linear Triangulation
Definition PinholeCamera.h:318
\n+
VectorK6 localCoordinates(const PinholeCamera &T2) const
return canonical coordinate
Definition PinholeCamera.h:208
\n+
PinholeCamera retract(const Vector &d) const
move a cameras according to d
Definition PinholeCamera.h:199
\n+
friend class boost::serialization::access
Serialization function.
Definition PinholeCamera.h:330
\n+
Point2 project2(const Unit3 &pw, OptionalJacobian< 2, dimension > Dcamera=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const
project a point at infinity from world coordinates into the image
Definition PinholeCamera.h:251
\n+
const Pose3 & pose() const
return pose
Definition PinholeCamera.h:164
\n+
PinholeCamera(const Vector &v)
Init from vector, can be 6D (default calibration) or dim.
Definition PinholeCamera.h:129
\n+
PinholeCamera()
default constructor
Definition PinholeCamera.h:62
\n+
Point2 Measurement
Some classes template on either PinholeCamera or StereoCamera, and this typedef informs those classes...
Definition PinholeCamera.h:41
\n+
double range(const CalibratedCamera &camera, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const
Calculate range to a calibrated camera.
Definition PinholeCamera.h:311
\n+
double range(const Point3 &point, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 3 > Dpoint=boost::none) const
Calculate range to a landmark.
Definition PinholeCamera.h:261
\n+
A pinhole camera class that has a Pose3 and a fixed Calibration.
Definition PinholePose.h:34
\n+
Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const
project a 3D point from world coordinates into the image
Definition PinholePose.h:118
\n+
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none, OptionalJacobian< 1, 3 > Hpoint=boost::none) const
Calculate range to a landmark.
Definition Pose3.cpp:399
\n+
Matrix4 matrix() const
convert to 4*4 matrix
Definition Pose3.cpp:323
\n+
Pose3 inverse() const
inverse transformation with derivatives
Definition Pose3.cpp:49
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,126 +1,513 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3DS2.h\n+PinholeCamera.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n-22\n-23#include \n-24#include \n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n 25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-_\b3_\b5class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\bD_\bS_\b2 : public _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be {\n-36 using _\bB_\ba_\bs_\be = _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be;\n-37\n-38 public:\n-39 enum { dimension = 9 };\n-40\n-42 using shared_ptr = boost::shared_ptr;\n+32template\n+_\b3_\b3class _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba: public _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK {\n+34\n+35public:\n+36\n+_\b4_\b1 typedef _\bP_\bo_\bi_\bn_\bt_\b2 _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt;\n+42 typedef Point2Vector MeasurementVector;\n 43\n-46\n-_\b4_\b8 _\bC_\ba_\bl_\b3_\bD_\bS_\b2() = default;\n-49\n-50 _\bC_\ba_\bl_\b3_\bD_\bS_\b2(double fx, double fy, double s, double u0, double v0, double k1,\n-51 double k2, double p1 = 0.0, double p2 = 0.0, double tol = 1e-5)\n-52 : _\bB_\ba_\bs_\be(fx, fy, s, u0, v0, k1, k2, p1, p2, tol) {}\n+44private:\n+45\n+46 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b> _\bB_\ba_\bs_\be;\n+47 Calibration K_;\n+48\n+49 // Get dimensions of calibration type at compile time\n+50 static const int DimK = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n+51\n+52public:\n 53\n-54 _\b~_\bC_\ba_\bl_\b3_\bD_\bS_\b2() override {}\n-55\n-59\n-60 Cal3DS2(const Vector9& v) : Base(v) {}\n-61\n-65\n-67 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-68 const Cal3DS2& cal);\n+54 enum {\n+55 dimension = 6 + DimK\n+56 };\n+57\n+60\n+_\b6_\b2 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba() {\n+63 }\n+64\n+_\b6_\b6 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be) :\n+67 _\bB_\ba_\bs_\be(_\bp_\bo_\bs_\be) {\n+68 }\n 69\n-71 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override;\n-72\n-74 bool equals(const Cal3DS2& K, double tol = 10e-9) const;\n-75\n-79\n-81 Cal3DS2 retract(const Vector& d) const;\n-82\n-84 Vector localCoordinates(const Cal3DS2& T2) const;\n-85\n-_\b8_\b7 size_t _\bd_\bi_\bm() const override { return Dim(); }\n-88\n-_\b9_\b0 inline static size_t _\bD_\bi_\bm() { return dimension; }\n-91\n+_\b7_\b1 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be, const Calibration& K) :\n+72 _\bB_\ba_\bs_\be(_\bp_\bo_\bs_\be), K_(K) {\n+73 }\n+74\n+78\n+_\b8_\b6 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba _\bL_\be_\bv_\be_\bl(const Calibration &K, const _\bP_\bo_\bs_\be_\b2& pose2,\n+87 double height) {\n+88 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(_\bB_\ba_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl_\bP_\bo_\bs_\be(pose2, height), K);\n+89 }\n+90\n+_\b9_\b2 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba _\bL_\be_\bv_\be_\bl(const _\bP_\bo_\bs_\be_\b2& pose2, double height) {\n+93 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bL_\be_\bv_\be_\bl(Calibration(), pose2, height);\n+94 }\n 95\n-_\b9_\b7 boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-98 return boost::shared_ptr(new _\bC_\ba_\bl_\b3_\bD_\bS_\b2(*this));\n-99 }\n-100\n-102\n-103 private:\n-106\n-_\b1_\b0_\b8 friend class boost::serialization::access;\n-109 template \n-110 void serialize(Archive& ar, const unsigned int /*version*/) {\n-111 ar& boost::serialization::make_nvp(\n-112 \"Cal3DS2\", boost::serialization::base_object(*this));\n-113 }\n-114\n-116};\n-117\n-118template <>\n-_\b1_\b1_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\bD_\bS_\b2> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n-120\n-121template <>\n-_\b1_\b2_\b2struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n-123}\n+_\b1_\b0_\b5 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba _\bL_\bo_\bo_\bk_\ba_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& eye, const _\bP_\bo_\bi_\bn_\bt_\b3& target,\n+106 const _\bP_\bo_\bi_\bn_\bt_\b3& upVector, const Calibration& K = Calibration()) {\n+107 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt_\bP_\bo_\bs_\be(eye, target, upVector), K);\n+108 }\n+109\n+110 // Create PinholeCamera, with derivatives\n+111 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba Create(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be, const Calibration &K,\n+112 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b6_\b> H1 = boost::none, //\n+113 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bD_\bi_\bm_\bK_\b> H2 = boost::none) {\n+114 typedef Eigen::Matrix MatrixK6;\n+115 if (H1)\n+116 *H1 << I_6x6, MatrixK6::Zero();\n+117 typedef Eigen::Matrix Matrix6K;\n+118 typedef Eigen::Matrix MatrixK;\n+119 if (H2)\n+120 *H2 << Matrix6K::Zero(), MatrixK::Identity();\n+121 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(_\bp_\bo_\bs_\be,K);\n+122 }\n+123\n+127\n+_\b1_\b2_\b9 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(const Vector &v) :\n+130 _\bB_\ba_\bs_\be(v.head<6>()) {\n+131 if (v.size() > 6)\n+132 K_ = Calibration(v.tail());\n+133 }\n+134\n+_\b1_\b3_\b6 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(const Vector &v, const Vector &K) :\n+137 _\bB_\ba_\bs_\be(v), K_(K) {\n+138 }\n+139\n+143\n+_\b1_\b4_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &camera, double tol = 1e-9) const {\n+146 const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba* e = dynamic_cast(&camera);\n+147 return _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(camera, tol) && K_._\be_\bq_\bu_\ba_\bl_\bs(e->_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn(), tol);\n+148 }\n+149\n+_\b1_\b5_\b1 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"PinholeCamera\") const override {\n+152 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n+153 K_.print(s + \".calibration\");\n+154 }\n+155\n+159\n+160 _\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba() override {\n+161 }\n+162\n+_\b1_\b6_\b4 const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be() const {\n+165 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be();\n+166 }\n+167\n+_\b1_\b6_\b9 const _\bP_\bo_\bs_\be_\b3& _\bg_\be_\bt_\bP_\bo_\bs_\be(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> H) const {\n+170 if (H) {\n+171 H->setZero();\n+172 H->template block<6, 6>(0, 0) = I_6x6;\n+173 }\n+174 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be();\n+175 }\n+176\n+_\b1_\b7_\b8 const Calibration& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const override {\n+179 return K_;\n+180 }\n+181\n+185\n+_\b1_\b8_\b7 size_t _\bd_\bi_\bm() const {\n+188 return dimension;\n+189 }\n+190\n+_\b1_\b9_\b2 static size_t _\bD_\bi_\bm() {\n+193 return dimension;\n+194 }\n+195\n+196 typedef Eigen::Matrix VectorK6;\n+197\n+_\b1_\b9_\b9 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& d) const {\n+200 if ((size_t) d.size() == 6)\n+201 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(this->_\bp_\bo_\bs_\be()._\br_\be_\bt_\br_\ba_\bc_\bt(d), _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn());\n+202 else\n+203 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(this->_\bp_\bo_\bs_\be()._\br_\be_\bt_\br_\ba_\bc_\bt(d.head<6>()),\n+204 _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn()._\br_\be_\bt_\br_\ba_\bc_\bt(d.tail(_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn()._\bd_\bi_\bm())));\n+205 }\n+206\n+_\b2_\b0_\b8 VectorK6 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba& T2) const {\n+209 VectorK6 d;\n+210 d.template head<6>() = this->_\bp_\bo_\bs_\be()._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(T2._\bp_\bo_\bs_\be());\n+211 d.template tail() = _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn().localCoordinates(T2._\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn());\n+212 return d;\n+213 }\n+214\n+_\b2_\b1_\b6 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n+217 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(); // assumes that the default constructor is valid\n+218 }\n+219\n+223\n+224 typedef Eigen::Matrix Matrix2K;\n+225\n+229 template\n+_\b2_\b3_\b0 _\bP_\bo_\bi_\bn_\bt_\b2 _\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const POINT& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera,\n+231 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<2, _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bP_\bO_\bI_\bN_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be> _\bD_\bp_\bo_\bi_\bn_\bt) const {\n+232 // We just call 3-derivative version in Base\n+233 if (Dcamera){\n+234 Matrix26 _\bD_\bp_\bo_\bs_\be;\n+235 Eigen::Matrix Dcal;\n+236 const _\bP_\bo_\bi_\bn_\bt_\b2 pi = _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt, Dcal);\n+237 *Dcamera << _\bD_\bp_\bo_\bs_\be, Dcal;\n+238 return pi;\n+239 } else {\n+240 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt(pw, boost::none, _\bD_\bp_\bo_\bi_\bn_\bt, boost::none);\n+241 }\n+242 }\n+243\n+_\b2_\b4_\b5 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const _\bP_\bo_\bi_\bn_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera =\n+246 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n+247 return _\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(pw, Dcamera, _\bD_\bp_\bo_\bi_\bn_\bt);\n+248 }\n+249\n+_\b2_\b5_\b1 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const _\bU_\bn_\bi_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera =\n+252 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n+253 return _\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(pw, Dcamera, _\bD_\bp_\bo_\bi_\bn_\bt);\n+254 }\n+255\n+_\b2_\b6_\b1 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera =\n+262 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n+263 Matrix16 Dpose_;\n+264 double result = this->_\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(point, Dcamera ? &Dpose_ : 0, _\bD_\bp_\bo_\bi_\bn_\bt);\n+265 if (Dcamera)\n+266 *Dcamera << Dpose_, Eigen::Matrix::Zero();\n+267 return result;\n+268 }\n+269\n+_\b2_\b7_\b5 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera =\n+276 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::none) const {\n+277 Matrix16 Dpose_;\n+278 double result = this->_\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(pose, Dcamera ? &Dpose_ : 0, _\bD_\bp_\bo_\bs_\be);\n+279 if (Dcamera)\n+280 *Dcamera << Dpose_, Eigen::Matrix::Zero();\n+281 return result;\n+282 }\n+283\n+289 template\n+_\b2_\b9_\b0 double _\br_\ba_\bn_\bg_\be(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\bB_\b>& camera,\n+291 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera = boost::none,\n+292 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b _\b+_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\bB_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dother = boost::none)\n+const {\n+293 Matrix16 Dcamera_, Dother_;\n+294 double result = this->_\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(camera._\bp_\bo_\bs_\be(), Dcamera ? &Dcamera_ : 0,\n+295 Dother ? &Dother_ : 0);\n+296 if (Dcamera) {\n+297 *Dcamera << Dcamera_, Eigen::Matrix::Zero();\n+298 }\n+299 if (Dother) {\n+300 Dother->setZero();\n+301 Dother->template block<1, 6>(0, 0) = Dother_;\n+302 }\n+303 return result;\n+304 }\n+305\n+_\b3_\b1_\b1 double _\br_\ba_\bn_\bg_\be(const _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba& camera,\n+312 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera = boost::none,\n+313 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dother = boost::none) const {\n+314 return _\br_\ba_\bn_\bg_\be(camera._\bp_\bo_\bs_\be(), Dcamera, Dother);\n+315 }\n+316\n+_\b3_\b1_\b8 Matrix34 _\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx() const {\n+319 return K_.K() * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be()._\bi_\bn_\bv_\be_\br_\bs_\be()._\bm_\ba_\bt_\br_\bi_\bx().block(0, 0, 3, 4);\n+320 }\n+321\n+_\b3_\b2_\b3 Vector _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba() const {\n+324 return Eigen::Matrix::dimension,1>::Constant(2.0 *\n+K_.fx());;\n+325 }\n+326\n+327private:\n+328\n+_\b3_\b3_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+331 template\n+332 void serialize(Archive & ar, const unsigned int /*version*/) {\n+333 ar\n+334 & boost::serialization::make_nvp(\"PinholeBaseK\",\n+335 boost::serialization::base_object(*this));\n+336 ar & BOOST_SERIALIZATION_NVP(K_);\n+337 }\n+338\n+339public:\n+340 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+341};\n+342\n+343// manifold traits\n+344\n+345template \n+_\b3_\b4_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba >\n+347 : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd > {};\n+348\n+349template \n+_\b3_\b5_\b0struct _\bt_\br_\ba_\bi_\bt_\bs >\n+351 : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd > {};\n+352\n+353// range traits, used in RangeFactor\n+354template \n+_\b3_\b5_\b5struct _\bR_\ba_\bn_\bg_\be<_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba, T> :\n+_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be, T, double> {};\n+356\n+357} // \\ gtsam\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b._\bh\n+Pinhole camera with known calibration.\n+_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n+Bearing-Range product.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+TangentVector localCoordinates(const Class &g) const\n+localCoordinates as required by manifold concept: finds tangent vector between\n+*this and g\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:136\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n Both ManifoldTraits and Testable.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2\n-Calibration of a camera with radial distortion that also supports Lie-group\n-behaviors for optimizatio...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-Return dimensions of calibration manifold object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-boost::shared_ptr< Base > clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b:_\b:_\bD_\bi_\bm\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+Give fixed size dimension of a type, fails at compile time if dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:194\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bp_\bo_\bs_\be\n+static Matrix26 Dpose(const Point2 &pn, double d)\n+Calculate Jacobian with respect to pose.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"PinholeBase\") const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be\n+const Pose3 & pose() const\n+return pose, constant version\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl_\bP_\bo_\bs_\be\n+static Pose3 LevelPose(const Pose2 &pose2, double height)\n+Create a level pose at the given 2D pose and height.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const PinholeBase &camera, double tol=1e-9) const\n+assert equality up to a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bp_\bo_\bi_\bn_\bt\n+static Matrix23 Dpoint(const Point2 &pn, double d, const Matrix3 &Rt)\n+Calculate Jacobian with respect to point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt_\bP_\bo_\bs_\be\n+static Pose3 LookatPose(const Point3 &eye, const Point3 &target, const Point3\n+&upVector)\n+Create a camera pose at the given eye position looking at a target point in the\n+scene with the specif...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n+A Calibrated camera class [R|-R't], calibration K=I.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:247\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n+A pinhole camera class that has a Pose3 and a Calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"PinholeCamera\") const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n+Point2 _project2(const POINT &pw, OptionalJacobian< 2, dimension > Dcamera,\n+OptionalJacobian< 2, FixedDimension< POINT >::value > Dpoint) const\n+Templated projection of a 3D point or a point at infinity into the image.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:230\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba\n+Vector defaultErrorWhenTriangulatingBehindCamera() const\n+for Nonlinear Triangulation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:323\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+const Calibration & calibration() const override\n+return calibration\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:178\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bg_\be_\bt_\bP_\bo_\bs_\be\n+const Pose3 & getPose(OptionalJacobian< 6, dimension > H) const\n+return pose, with derivative\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:169\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n+Point2 project2(const Point3 &pw, OptionalJacobian< 2, dimension >\n+Dcamera=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const\n+project a 3D point from world coordinates into the image\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:245\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n+PinholeCamera(const Pose3 &pose)\n+constructor with pose\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bL_\be_\bv_\be_\bl\n+static PinholeCamera Level(const Pose2 &pose2, double height)\n+PinholeCamera::level with default calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n+PinholeCamera(const Pose3 &pose, const Calibration &K)\n+constructor with pose and calibration\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bL_\be_\bv_\be_\bl\n+static PinholeCamera Level(const Calibration &K, const Pose2 &pose2, double\n+height)\n+Create a level camera at the given 2D pose and height.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:187\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static PinholeCamera Identity()\n+for Canonical\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:216\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bD_\bi_\bm\n static size_t Dim()\n-Return dimensions of calibration manifold object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2.h:90\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2\n-Cal3DS2()=default\n-Default Constructor with only unit focal length.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be\n-Calibration of a camera with radial distortion.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2_Base.h:42\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const Base &camera, double tol=1e-9) const\n+assert equality up to a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:145\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const Pose3 &pose, OptionalJacobian< 1, dimension >\n+Dcamera=boost::none, OptionalJacobian< 1, 6 > Dpose=boost::none) const\n+Calculate range to another pose.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:275\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const PinholeCamera< CalibrationB > &camera, OptionalJacobian< 1,\n+dimension > Dcamera=boost::none, OptionalJacobian< 1, 6+CalibrationB::dimension\n+> Dother=boost::none) const\n+Calculate range to another camera.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:290\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n+PinholeCamera(const Vector &v, const Vector &K)\n+Init from Vector and calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt\n+static PinholeCamera Lookat(const Point3 &eye, const Point3 &target, const\n+Point3 &upVector, const Calibration &K=Calibration())\n+Create a camera at the given eye position looking at a target point in the\n+scene with the specified u...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx\n+Matrix34 cameraProjectionMatrix() const\n+for Linear Triangulation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:318\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+VectorK6 localCoordinates(const PinholeCamera &T2) const\n+return canonical coordinate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:208\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+PinholeCamera retract(const Vector &d) const\n+move a cameras according to d\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:199\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:330\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n+Point2 project2(const Unit3 &pw, OptionalJacobian< 2, dimension >\n+Dcamera=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const\n+project a point at infinity from world coordinates into the image\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:251\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\bo_\bs_\be\n+const Pose3 & pose() const\n+return pose\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n+PinholeCamera(const Vector &v)\n+Init from vector, can be 6D (default calibration) or dim.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:129\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n+PinholeCamera()\n+default constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+Point2 Measurement\n+Some classes template on either PinholeCamera or StereoCamera, and this typedef\n+informs those classes...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const CalibratedCamera &camera, OptionalJacobian< 1, dimension >\n+Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const\n+Calculate range to a calibrated camera.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:311\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const Point3 &point, OptionalJacobian< 1, dimension >\n+Dcamera=boost::none, OptionalJacobian< 1, 3 > Dpoint=boost::none) const\n+Calculate range to a landmark.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:261\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK\n+A pinhole camera class that has a Pose3 and a fixed Calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n+Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n+OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK >\n+Dcal=boost::none) const\n+project a 3D point from world coordinates into the image\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+A 2D pose (Point2,Rot2)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\ba_\bn_\bg_\be\n+double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none,\n+OptionalJacobian< 1, 3 > Hpoint=boost::none) const\n+Calculate range to a landmark.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:399\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+Matrix4 matrix() const\n+convert to 4*4 matrix\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:323\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n+Pose3 inverse() const\n+inverse transformation with derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bh\n+ * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00374.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00374.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.h File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,71 @@\n \n \n \n \n \n
\n \n-
Pose2.cpp File Reference
\n+
SO4.h File Reference
\n
\n
\n \n-

2D Pose \n+

4*4 matrix representation of SO(4) \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::traits< SO4 >
 
struct  gtsam::traits< const SO4 >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Typedefs

\n+using gtsam::SO4 = SO< 4 >
 
\n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Pose2 &pose)
 
GTSAM_EXPORT Matrix3 gtsam::topLeft (const SO4 &Q, OptionalJacobian< 9, 6 > H=boost::none)
 Project to top-left 3*3 matrix.
 
\n+GTSAM_EXPORT Matrix43 gtsam::stiefel (const SO4 &Q, OptionalJacobian< 12, 6 > H=boost::none)
 Project to Stiefel manifold of 4*3 orthonormal 3-frames in R^4, i.e., pi(Q) -> \\( S \\in St(3,4) \\).
 
\n+template<class Archive >
void gtsam::serialize (Archive &ar, SO4 &Q, const unsigned int)
 Serialization function.
 
\n

Detailed Description

\n-

2D Pose

\n+

4*4 matrix representation of SO(4)

\n+
Author
Frank Dellaert
\n+
\n+Luca Carlone
\n+
Date
March 2019
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,47 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Pose2.cpp File Reference\n-2D Pose _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SO4.h File Reference\n+4*4 matrix representation of SO(4) _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bO_\b4_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bO_\b4_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSO\bO4\b4 = _\bS_\bO< 4 >\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bP_\bo_\bs_\be_\b2 &pose)\n+ GTSAM_EXPORT Matrix3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\bo_\bp_\bL_\be_\bf_\bt (const _\bS_\bO_\b4 &Q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 9, 6 >\n+ H=boost::none)\n+\u00a0 Project to top-left 3*3 matrix.\n+\u00a0\n+GTSAM_EXPORT Matrix43\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bti\bie\bef\bfe\bel\bl (const _\bS_\bO_\b4 &Q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 12, 6 >\n+ H=boost::none)\n+\u00a0 Project to Stiefel manifold of 4*3 orthonormal 3-frames\n+ in R^4, i.e., pi(Q) -> \\( S \\in St(3,4) \\).\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (Archive &ar, _\bS_\bO_\b4 &Q, const unsigned\n+ int)\n+\u00a0 Serialization function.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-2D Pose\n+4*4 matrix representation of SO(4)\n+ Author\n+ Frank Dellaert\n+ Luca Carlone\n+ Date\n+ March 2019\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bs_\be_\b2_\b._\bc_\bp_\bp\n+ * _\bS_\bO_\b4_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00380.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00380.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3Q.cpp File Reference\n \n \n \n \n \n \n \n@@ -93,52 +93,27 @@\n
No Matches
\n \n \n \n \n \n
\n- \n-
Cal3Unified.h File Reference
\n+
Rot3Q.cpp File Reference
\n
\n
\n \n-

Unified Calibration Model, see Mei07icra for details. \n+

Rotation (internal: quaternion representation*) \n More...

\n-\n-

Go to the source code of this file.

\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::Cal3Unified
 Calibration of a omni-directional camera with mirror + lens radial distortion. More...
 
struct  gtsam::traits< Cal3Unified >
 
struct  gtsam::traits< const Cal3Unified >
 
\n-\n-\n-\n-\n-

\n-Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Unified Calibration Model, see Mei07icra for details.

\n-
Date
Mar 8, 2014
\n-
Author
Jing Dong
\n-
\n-Varun Agrawal
\n+

Rotation (internal: quaternion representation*)

\n+
Author
Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,15 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Cal3Unified.h File Reference\n-Unified Calibration Model, see Mei07icra for details. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd\n-\u00a0 Calibration of a omni-directional camera with mirror + lens radial\n- distortion. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b _\b>\n-\u00a0\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n-\u00a0 Global functions in a separate testing namespace.\n-\u00a0\n+Rot3Q.cpp File Reference\n+Rotation (internal: quaternion representation*) _\bM_\bo_\br_\be_\b._\b._\b.\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Unified Calibration Model, see Mei07icra for details.\n- Date\n- Mar 8, 2014\n+Rotation (internal: quaternion representation*)\n Author\n- Jing Dong\n- Varun Agrawal\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b._\bh\n+ * _\bR_\bo_\bt_\b3_\bQ_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00383.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00383.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CameraSet.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point3.h File Reference\n \n \n \n \n \n \n \n@@ -95,48 +95,98 @@\n \n \n \n \n
\n \n-
CameraSet.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
Point3.h File Reference
\n \n
\n \n-

Base class to create smart factors on poses or cameras. \n+

3D Point \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n-\n+\n \n

\n Classes

class  gtsam::CameraSet< CAMERA >
 A set of cameras, all with their own calibration. More...
 
struct  gtsam::traits< CameraSet< CAMERA > >
 
struct  gtsam::traits< const CameraSet< CAMERA > >
struct  gtsam::Range< Point3, Point3 >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Typedefs

\n+typedef Vector3 gtsam::Point3
 As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3.
 
\n+typedef std::vector< Point3, Eigen::aligned_allocator< Point3 > > gtsam::Point3Vector
 
\n+using gtsam::Point3Pair = std::pair< Point3, Point3 >
 
\n+using gtsam::Point3Pairs = std::vector< Point3Pair >
 
\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+Functions

\n+ostream & gtsam::operator<< (ostream &os, const gtsam::Point3Pair &p)
 
\n+double gtsam::distance3 (const Point3 &p1, const Point3 &q, OptionalJacobian< 1, 3 > H1=boost::none, OptionalJacobian< 1, 3 > H2=boost::none)
 distance between two points
 
\n+double gtsam::norm3 (const Point3 &p, OptionalJacobian< 1, 3 > H=boost::none)
 Distance of the point from the origin, with Jacobian.
 
\n+Point3 gtsam::normalize (const Point3 &p, OptionalJacobian< 3, 3 > H=boost::none)
 normalize, with optional Jacobian
 
Point3 gtsam::cross (const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H_p=boost::none, OptionalJacobian< 3, 3 > H_q=boost::none)
 cross product
 
\n+double gtsam::dot (const Point3 &p, const Point3 &q, OptionalJacobian< 1, 3 > H_p=boost::none, OptionalJacobian< 1, 3 > H_q=boost::none)
 dot product
 
\n+template<class CONTAINER >
Point3 gtsam::mean (const CONTAINER &points)
 mean
 
\n+Point3Pair gtsam::means (const std::vector< Point3Pair > &abPointPairs)
 Calculate the two means of a set of Point3 pairs.
 
\n

Detailed Description

\n-

Base class to create smart factors on poses or cameras.

\n-
Author
Frank Dellaert
\n-
Date
Feb 19, 2015
\n+

3D Point

\n+
Author
Alireza Fathi
\n+
\n+Christian Potthast
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,72 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-CameraSet.h File Reference\n-Base class to create smart factors on poses or cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Point3.h File Reference\n+3D Point _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n-\u00a0 A set of cameras, all with their own calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+ typedef Vector3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt3\b3\n+ As of GTSAM 4, in order to make GTSAM more\n+\u00a0 lean, it is now possible to just typedef\n+ Point3 to Vector3.\n+\u00a0\n+typedef std::vector< _\bP_\bo_\bi_\bn_\bt_\b3, Eigen::\n+ aligned_allocator< _\bP_\bo_\bi_\bn_\bt_\b3 > >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt3\b3V\bVe\bec\bct\bto\bor\br\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt3\b3P\bPa\bai\bir\br = std::pair< _\bP_\bo_\bi_\bn_\bt_\b3,\n+ _\bP_\bo_\bi_\bn_\bt_\b3 >\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt3\b3P\bPa\bai\bir\brs\bs = std::vector<\n+ Point3Pair >\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const gtsam::Point3Pair &p)\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bis\bst\bta\ban\bnc\bce\be3\b3 (const _\bP_\bo_\bi_\bn_\bt_\b3 &p1, const _\bP_\bo_\bi_\bn_\bt_\b3 &q,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H1=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 >\n+ H2=boost::none)\n+\u00a0 distance between two points\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bm3\b3 (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H=boost::\n+ none)\n+\u00a0 Distance of the point from the origin, with Jacobian.\n+\u00a0\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bma\bal\bli\biz\bze\be (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 3 >\n+ H=boost::none)\n+\u00a0 normalize, with optional Jacobian\n+\u00a0\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\bo_\bs_\bs (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, const _\bP_\bo_\bi_\bn_\bt_\b3 &q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<\n+ 3, 3 > H_p=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 3 > H_q=boost::none)\n+\u00a0 cross product\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdo\bot\bt (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, const _\bP_\bo_\bi_\bn_\bt_\b3 &q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1,\n+ 3 > H_p=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H_q=boost::none)\n+\u00a0 dot product\n+\u00a0\n+template\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bme\bea\ban\bn (const CONTAINER &points)\n+\u00a0 mean\n+\u00a0\n+Point3Pair\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bme\bea\ban\bns\bs (const std::vector< Point3Pair > &abPointPairs)\n+\u00a0 Calculate the two means of a set of Point3 pairs.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Base class to create smart factors on poses or cameras.\n+3D Point\n Author\n+ Alireza Fathi\n+ Christian Potthast\n Frank Dellaert\n- Date\n- Feb 19, 2015\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n+ * _\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00383.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00383.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,11 @@\n var a00383 = [\n- [\"gtsam::CameraSet< CAMERA >\", \"a03044.html\", \"a03044\"],\n- [\"gtsam::traits< CameraSet< CAMERA > >\", \"a03048.html\", null],\n- [\"gtsam::traits< const CameraSet< CAMERA > >\", \"a03052.html\", null]\n+ [\"gtsam::Range< Point3, Point3 >\", \"a03152.html\", null],\n+ [\"Point3\", \"a00383.html#aaa8ed89fd60ea4601d9de63c4811525b\", null],\n+ [\"cross\", \"a00383.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\", null],\n+ [\"distance3\", \"a00383.html#aa42f7ec660b7353de39f9c86a26711cc\", null],\n+ [\"dot\", \"a00383.html#a7dc820e4e47218768f104b43a184a1bd\", null],\n+ [\"mean\", \"a00383.html#a300205092710091b8745c0a145da20a1\", null],\n+ [\"means\", \"a00383.html#a57f778b84bc6106471006421d289b832\", null],\n+ [\"norm3\", \"a00383.html#ac37b6f807985ffd25217e33f6136fe58\", null],\n+ [\"normalize\", \"a00383.html#abb52bb00c68909fc1147e5d112e8c2ae\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00383_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00383_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CameraSet.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point3.h Source File\n \n \n \n \n \n \n \n@@ -98,494 +98,113 @@\n
No Matches
\n \n \n \n \n \n
\n-
CameraSet.h
\n+
Point3.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <gtsam/base/FastMap.h>
\n-\n-
23#include <gtsam/base/Testable.h>
\n-
24#include <gtsam/geometry/CalibratedCamera.h> // for Cheirality exception
\n-\n-
26#include <gtsam/inference/Key.h>
\n-
27
\n-
28#include <vector>
\n-
29
\n-
30namespace gtsam {
\n+
20// \\callgraph
\n+
21
\n+
22#pragma once
\n+
23
\n+
24#include <gtsam/config.h>
\n+
25#include <gtsam/base/VectorSpace.h>
\n+
26#include <gtsam/base/Vector.h>
\n+
27#include <gtsam/dllexport.h>
\n+\n+
29#include <boost/serialization/nvp.hpp>
\n+
30#include <numeric>
\n
31
\n-
35template <class CAMERA>
\n-
\n-
36class CameraSet : public std::vector<CAMERA, Eigen::aligned_allocator<CAMERA>> {
\n-
37 protected:
\n-
38 using Base = std::vector<CAMERA, typename Eigen::aligned_allocator<CAMERA>>;
\n-
39
\n-
44 typedef typename CAMERA::Measurement Z;
\n-
45 typedef typename CAMERA::MeasurementVector ZVector;
\n-
46
\n-
47 static const int D = traits<CAMERA>::dimension;
\n-
48 static const int ZDim = traits<Z>::dimension;
\n+
32namespace gtsam {
\n+
33
\n+
36typedef Vector3 Point3;
\n+
37typedef std::vector<Point3, Eigen::aligned_allocator<Point3> > Point3Vector;
\n+
38
\n+
39// Convenience typedef
\n+
40using Point3Pair = std::pair<Point3, Point3>;
\n+
41GTSAM_EXPORT std::ostream &operator<<(std::ostream &os, const gtsam::Point3Pair &p);
\n+
42
\n+
43using Point3Pairs = std::vector<Point3Pair>;
\n+
44
\n+
46GTSAM_EXPORT double distance3(const Point3& p1, const Point3& q,
\n+
47 OptionalJacobian<1, 3> H1 = boost::none,
\n+
48 OptionalJacobian<1, 3> H2 = boost::none);
\n
49
\n-
\n-
51 static Vector ErrorVector(const ZVector& predicted, const ZVector& measured) {
\n-
52 // Check size
\n-
53 size_t m = predicted.size();
\n-
54 if (measured.size() != m)
\n-
55 throw std::runtime_error("CameraSet::errors: size mismatch");
\n-
56
\n-
57 // Project and fill error vector
\n-
58 Vector b(ZDim * m);
\n-
59 for (size_t i = 0, row = 0; i < m; i++, row += ZDim) {
\n-
60 Vector bi = traits<Z>::Local(measured[i], predicted[i]);
\n-
61 if (ZDim == 3 && std::isnan(bi(1))) { // if it is a stereo point and the
\n-
62 // right pixel is missing (nan)
\n-
63 bi(1) = 0;
\n-
64 }
\n-
65 b.segment<ZDim>(row) = bi;
\n-
66 }
\n-
67 return b;
\n-
68 }
\n-
\n-
69
\n-
70 public:
\n-
71 using Base::Base; // Inherit the vector constructors
\n-
72
\n-
74 virtual ~CameraSet() = default;
\n-
75
\n-
77 using MatrixZD = Eigen::Matrix<double, ZDim, D>;
\n-
78 using FBlocks = std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD>>;
\n-
79
\n-
\n-
85 virtual void print(const std::string& s = "") const {
\n-
86 std::cout << s << "CameraSet, cameras = \\n";
\n-
87 for (size_t k = 0; k < this->size(); ++k) this->at(k).print(s);
\n+
51GTSAM_EXPORT double norm3(const Point3& p, OptionalJacobian<1, 3> H = boost::none);
\n+
52
\n+
54GTSAM_EXPORT Point3 normalize(const Point3& p, OptionalJacobian<3, 3> H = boost::none);
\n+
55
\n+
57GTSAM_EXPORT Point3 cross(const Point3& p, const Point3& q,
\n+
58 OptionalJacobian<3, 3> H_p = boost::none,
\n+
59 OptionalJacobian<3, 3> H_q = boost::none);
\n+
60
\n+
62GTSAM_EXPORT double dot(const Point3& p, const Point3& q,
\n+
63 OptionalJacobian<1, 3> H_p = boost::none,
\n+
64 OptionalJacobian<1, 3> H_q = boost::none);
\n+
65
\n+
67template <class CONTAINER>
\n+
\n+
68Point3 mean(const CONTAINER& points) {
\n+
69 if (points.size() == 0) throw std::invalid_argument("Point3::mean input container is empty");
\n+
70 Point3 sum(0, 0, 0);
\n+
71 sum = std::accumulate(points.begin(), points.end(), sum);
\n+
72 return sum / points.size();
\n+
73}
\n+
\n+
74
\n+
76GTSAM_EXPORT Point3Pair means(const std::vector<Point3Pair> &abPointPairs);
\n+
77
\n+
78template <typename A1, typename A2>
\n+
79struct Range;
\n+
80
\n+
81template <>
\n+
\n+\n+
83 typedef double result_type;
\n+
84 double operator()(const Point3& p, const Point3& q,
\n+
85 OptionalJacobian<1, 3> H1 = boost::none,
\n+
86 OptionalJacobian<1, 3> H2 = boost::none) {
\n+
87 return distance3(p, q, H1, H2);
\n
88 }
\n+
89};
\n
\n-
89
\n-
\n-
91 bool equals(const CameraSet& p, double tol = 1e-9) const {
\n-
92 if (this->size() != p.size()) return false;
\n-
93 bool camerasAreEqual = true;
\n-
94 for (size_t i = 0; i < this->size(); i++) {
\n-
95 if (this->at(i).equals(p.at(i), tol) == false) camerasAreEqual = false;
\n-
96 break;
\n-
97 }
\n-
98 return camerasAreEqual;
\n-
99 }
\n-
\n-
100
\n-
107 template <class POINT>
\n-
\n-
108 ZVector project2(const POINT& point, //
\n-
109 boost::optional<FBlocks&> Fs = boost::none, //
\n-
110 boost::optional<Matrix&> E = boost::none) const {
\n-
111 static const int N = FixedDimension<POINT>::value;
\n-
112
\n-
113 // Allocate result
\n-
114 size_t m = this->size();
\n-
115 ZVector z;
\n-
116 z.reserve(m);
\n-
117
\n-
118 // Allocate derivatives
\n-
119 if (E) E->resize(ZDim * m, N);
\n-
120 if (Fs) Fs->resize(m);
\n-
121
\n-
122 // Project and fill derivatives
\n-
123 for (size_t i = 0; i < m; i++) {
\n-
124 MatrixZD Fi;
\n-
125 Eigen::Matrix<double, ZDim, N> Ei;
\n-
126 z.emplace_back(this->at(i).project2(point, Fs ? &Fi : 0, E ? &Ei : 0));
\n-
127 if (Fs) (*Fs)[i] = Fi;
\n-
128 if (E) E->block<ZDim, N>(ZDim * i, 0) = Ei;
\n-
129 }
\n-
130
\n-
131 return z;
\n-
132 }
\n-
\n-
133
\n-
135 template <class POINT>
\n-
\n-
136 Vector reprojectionError(const POINT& point, const ZVector& measured,
\n-
137 boost::optional<FBlocks&> Fs = boost::none, //
\n-
138 boost::optional<Matrix&> E = boost::none) const {
\n-
139 return ErrorVector(project2(point, Fs, E), measured);
\n-
140 }
\n-
\n-
141
\n-
148 template <int N,
\n-
149 int ND> // N = 2 or 3 (point dimension), ND is the camera dimension
\n-
\n-\n-
151 const std::vector<
\n-
152 Eigen::Matrix<double, ZDim, ND>,
\n-
153 Eigen::aligned_allocator<Eigen::Matrix<double, ZDim, ND>>>& Fs,
\n-
154 const Matrix& E, const Eigen::Matrix<double, N, N>& P, const Vector& b) {
\n-
155 // a single point is observed in m cameras
\n-
156 size_t m = Fs.size();
\n-
157
\n-
158 // Create a SymmetricBlockMatrix (augmented hessian, with extra row/column
\n-
159 // with info vector)
\n-
160 size_t M1 = ND * m + 1;
\n-
161 std::vector<DenseIndex> dims(m + 1); // this also includes the b term
\n-
162 std::fill(dims.begin(), dims.end() - 1, ND);
\n-
163 dims.back() = 1;
\n-
164 SymmetricBlockMatrix augmentedHessian(dims, Matrix::Zero(M1, M1));
\n-
165
\n-
166 // Blockwise Schur complement
\n-
167 for (size_t i = 0; i < m; i++) { // for each camera
\n-
168
\n-
169 const Eigen::Matrix<double, ZDim, ND>& Fi = Fs[i];
\n-
170 const auto FiT = Fi.transpose();
\n-
171 const Eigen::Matrix<double, ZDim, N> Ei_P = //
\n-
172 E.block(ZDim * i, 0, ZDim, N) * P;
\n-
173
\n-
174 // D = (Dx2) * ZDim
\n-
175 augmentedHessian.setOffDiagonalBlock(
\n-
176 i, m,
\n-
177 FiT * b.segment<ZDim>(ZDim * i) // F' * b
\n-
178 -
\n-
179 FiT *
\n-
180 (Ei_P *
\n-
181 (E.transpose() *
\n-
182 b))); // D = (DxZDim) * (ZDimx3) * (N*ZDimm) * (ZDimm x 1)
\n-
183
\n-
184 // (DxD) = (DxZDim) * ( (ZDimxD) - (ZDimx3) * (3xZDim) * (ZDimxD) )
\n-
185 augmentedHessian.setDiagonalBlock(
\n-
186 i,
\n-
187 FiT * (Fi - Ei_P * E.block(ZDim * i, 0, ZDim, N).transpose() * Fi));
\n-
188
\n-
189 // upper triangular part of the hessian
\n-
190 for (size_t j = i + 1; j < m; j++) { // for each camera
\n-
191 const Eigen::Matrix<double, ZDim, ND>& Fj = Fs[j];
\n-
192
\n-
193 // (DxD) = (Dx2) * ( (2x2) * (2xD) )
\n-
194 augmentedHessian.setOffDiagonalBlock(
\n-
195 i, j,
\n-
196 -FiT * (Ei_P * E.block(ZDim * j, 0, ZDim, N).transpose() * Fj));
\n-
197 }
\n-
198 } // end of for over cameras
\n-
199
\n-
200 augmentedHessian.diagonalBlock(m)(0, 0) += b.squaredNorm();
\n-
201 return augmentedHessian;
\n-
202 }
\n-
\n-
203
\n-
217 template <int N, int ND, int NDD>
\n-
\n-\n-
219 const std::vector<
\n-
220 Eigen::Matrix<double, ZDim, ND>,
\n-
221 Eigen::aligned_allocator<Eigen::Matrix<double, ZDim, ND>>>& Fs,
\n-
222 const Matrix& E, const Eigen::Matrix<double, N, N>& P, const Vector& b,
\n-
223 const KeyVector& jacobianKeys, const KeyVector& hessianKeys) {
\n-
224 size_t nrNonuniqueKeys = jacobianKeys.size();
\n-
225 size_t nrUniqueKeys = hessianKeys.size();
\n-
226
\n-
227 // Marginalize point: note - we reuse the standard SchurComplement function.
\n-
228 SymmetricBlockMatrix augmentedHessian = SchurComplement<N, ND>(Fs, E, P, b);
\n-
229
\n-
230 // Pack into an Hessian factor, allow space for b term.
\n-
231 std::vector<DenseIndex> dims(nrUniqueKeys + 1);
\n-
232 std::fill(dims.begin(), dims.end() - 1, NDD);
\n-
233 dims.back() = 1;
\n-
234 SymmetricBlockMatrix augmentedHessianUniqueKeys;
\n-
235
\n-
236 // Deal with the fact that some blocks may share the same keys.
\n-
237 if (nrUniqueKeys == nrNonuniqueKeys) {
\n-
238 // Case when there is 1 calibration key per camera:
\n-
239 augmentedHessianUniqueKeys = SymmetricBlockMatrix(
\n-
240 dims, Matrix(augmentedHessian.selfadjointView()));
\n-
241 } else {
\n-
242 // When multiple cameras share a calibration we have to rearrange
\n-
243 // the results of the Schur complement matrix.
\n-
244 std::vector<DenseIndex> nonuniqueDims(nrNonuniqueKeys + 1); // includes b
\n-
245 std::fill(nonuniqueDims.begin(), nonuniqueDims.end() - 1, NDD);
\n-
246 nonuniqueDims.back() = 1;
\n-
247 augmentedHessian = SymmetricBlockMatrix(
\n-
248 nonuniqueDims, Matrix(augmentedHessian.selfadjointView()));
\n-
249
\n-
250 // Get map from key to location in the new augmented Hessian matrix (the
\n-
251 // one including only unique keys).
\n-
252 std::map<Key, size_t> keyToSlotMap;
\n-
253 for (size_t k = 0; k < nrUniqueKeys; k++) {
\n-
254 keyToSlotMap[hessianKeys[k]] = k;
\n-
255 }
\n-
256
\n-
257 // Initialize matrix to zero.
\n-
258 augmentedHessianUniqueKeys = SymmetricBlockMatrix(
\n-
259 dims, Matrix::Zero(NDD * nrUniqueKeys + 1, NDD * nrUniqueKeys + 1));
\n-
260
\n-
261 // Add contributions for each key: note this loops over the hessian with
\n-
262 // nonUnique keys (augmentedHessian) and populates an Hessian that only
\n-
263 // includes the unique keys (that is what we want to return).
\n-
264 for (size_t i = 0; i < nrNonuniqueKeys; i++) { // rows
\n-
265 Key key_i = jacobianKeys.at(i);
\n-
266
\n-
267 // Update information vector.
\n-
268 augmentedHessianUniqueKeys.updateOffDiagonalBlock(
\n-
269 keyToSlotMap[key_i], nrUniqueKeys,
\n-
270 augmentedHessian.aboveDiagonalBlock(i, nrNonuniqueKeys));
\n-
271
\n-
272 // Update blocks.
\n-
273 for (size_t j = i; j < nrNonuniqueKeys; j++) { // cols
\n-
274 Key key_j = jacobianKeys.at(j);
\n-
275 if (i == j) {
\n-
276 augmentedHessianUniqueKeys.updateDiagonalBlock(
\n-
277 keyToSlotMap[key_i], augmentedHessian.diagonalBlock(i));
\n-
278 } else { // (i < j)
\n-
279 if (keyToSlotMap[key_i] != keyToSlotMap[key_j]) {
\n-
280 augmentedHessianUniqueKeys.updateOffDiagonalBlock(
\n-
281 keyToSlotMap[key_i], keyToSlotMap[key_j],
\n-
282 augmentedHessian.aboveDiagonalBlock(i, j));
\n-
283 } else {
\n-
284 augmentedHessianUniqueKeys.updateDiagonalBlock(
\n-
285 keyToSlotMap[key_i],
\n-
286 augmentedHessian.aboveDiagonalBlock(i, j) +
\n-
287 augmentedHessian.aboveDiagonalBlock(i, j).transpose());
\n-
288 }
\n-
289 }
\n-
290 }
\n-
291 }
\n-
292
\n-
293 // Update bottom right element of the matrix.
\n-
294 augmentedHessianUniqueKeys.updateDiagonalBlock(
\n-
295 nrUniqueKeys, augmentedHessian.diagonalBlock(nrNonuniqueKeys));
\n-
296 }
\n-
297 return augmentedHessianUniqueKeys;
\n-
298 }
\n-
\n-
299
\n-
306 template <int N> // N = 2 or 3
\n-
\n-\n-
308 const FBlocks& Fs, const Matrix& E, const Eigen::Matrix<double, N, N>& P,
\n-
309 const Vector& b) {
\n-
310 return SchurComplement<N, D>(Fs, E, P, b);
\n-
311 }
\n-
\n-
312
\n-
314 template <int N> // N = 2 or 3 (point dimension)
\n-
\n-
315 static void ComputePointCovariance(Eigen::Matrix<double, N, N>& P,
\n-
316 const Matrix& E, double lambda,
\n-
317 bool diagonalDamping = false) {
\n-
318 Matrix EtE = E.transpose() * E;
\n-
319
\n-
320 if (diagonalDamping) { // diagonal of the hessian
\n-
321 EtE.diagonal() += lambda * EtE.diagonal();
\n-
322 } else {
\n-
323 DenseIndex n = E.cols();
\n-
324 EtE += lambda * Eigen::MatrixXd::Identity(n, n);
\n-
325 }
\n-
326
\n-
327 P = (EtE).inverse();
\n-
328 }
\n-
\n-
329
\n-
\n-
331 static Matrix PointCov(const Matrix& E, const double lambda = 0.0,
\n-
332 bool diagonalDamping = false) {
\n-
333 if (E.cols() == 2) {
\n-
334 Matrix2 P2;
\n-
335 ComputePointCovariance<2>(P2, E, lambda, diagonalDamping);
\n-
336 return P2;
\n-
337 } else {
\n-
338 Matrix3 P3;
\n-
339 ComputePointCovariance<3>(P3, E, lambda, diagonalDamping);
\n-
340 return P3;
\n-
341 }
\n-
342 }
\n-
\n-
343
\n-
\n-
348 static SymmetricBlockMatrix SchurComplement(const FBlocks& Fblocks,
\n-
349 const Matrix& E, const Vector& b,
\n-
350 const double lambda = 0.0,
\n-
351 bool diagonalDamping = false) {
\n-
352 if (E.cols() == 2) {
\n-
353 Matrix2 P;
\n-
354 ComputePointCovariance<2>(P, E, lambda, diagonalDamping);
\n-
355 return SchurComplement<2>(Fblocks, E, P, b);
\n-
356 } else {
\n-
357 Matrix3 P;
\n-
358 ComputePointCovariance<3>(P, E, lambda, diagonalDamping);
\n-
359 return SchurComplement<3>(Fblocks, E, P, b);
\n-
360 }
\n-
361 }
\n-
\n-
362
\n-
368 template <int N> // N = 2 or 3 (point dimension)
\n-
\n-\n-
370 const FBlocks& Fs, const Matrix& E, const Eigen::Matrix<double, N, N>& P,
\n-
371 const Vector& b, const KeyVector& allKeys, const KeyVector& keys,
\n-
372 /*output ->*/ SymmetricBlockMatrix& augmentedHessian) {
\n-
373 assert(keys.size() == Fs.size());
\n-
374 assert(keys.size() <= allKeys.size());
\n-
375
\n-
376 FastMap<Key, size_t> KeySlotMap;
\n-
377 for (size_t slot = 0; slot < allKeys.size(); slot++)
\n-
378 KeySlotMap.insert(std::make_pair(allKeys[slot], slot));
\n-
379
\n-
380 // Schur complement trick
\n-
381 // G = F' * F - F' * E * P * E' * F
\n-
382 // g = F' * (b - E * P * E' * b)
\n-
383
\n-
384 // a single point is observed in m cameras
\n-
385 size_t m = Fs.size(); // cameras observing current point
\n-
386 size_t M = (augmentedHessian.rows() - 1) / D; // all cameras in the group
\n-
387 assert(allKeys.size() == M);
\n-
388
\n-
389 // Blockwise Schur complement
\n-
390 for (size_t i = 0; i < m; i++) { // for each camera in the current factor
\n-
391
\n-
392 const MatrixZD& Fi = Fs[i];
\n-
393 const auto FiT = Fi.transpose();
\n-
394 const Eigen::Matrix<double, 2, N> Ei_P =
\n-
395 E.template block<ZDim, N>(ZDim * i, 0) * P;
\n-
396
\n-
397 // D = (DxZDim) * (ZDim)
\n-
398 // allKeys are the list of all camera keys in the group, e.g, (1,3,4,5,7)
\n-
399 // we should map those to a slot in the local (grouped) hessian
\n-
400 // (0,1,2,3,4) Key cameraKey_i = this->keys_[i];
\n-
401 DenseIndex aug_i = KeySlotMap.at(keys[i]);
\n-
402
\n-
403 // information vector - store previous vector
\n-
404 // vectorBlock = augmentedHessian(aug_i, aug_m).knownOffDiagonal();
\n-
405 // add contribution of current factor
\n-
406 augmentedHessian.updateOffDiagonalBlock(
\n-
407 aug_i, M,
\n-
408 FiT * b.segment<ZDim>(ZDim * i) // F' * b
\n-
409 -
\n-
410 FiT *
\n-
411 (Ei_P *
\n-
412 (E.transpose() *
\n-
413 b))); // D = (DxZDim) * (ZDimx3) * (N*ZDimm) * (ZDimm x 1)
\n-
414
\n-
415 // (DxD) += (DxZDim) * ( (ZDimxD) - (ZDimx3) * (3xZDim) * (ZDimxD) )
\n-
416 // add contribution of current factor
\n-
417 // TODO(gareth): Eigen doesn't let us pass the expression. Call eval() for
\n-
418 // now...
\n-
419 augmentedHessian.updateDiagonalBlock(
\n-
420 aug_i,
\n-
421 ((FiT *
\n-
422 (Fi -
\n-
423 Ei_P * E.template block<ZDim, N>(ZDim * i, 0).transpose() * Fi)))
\n-
424 .eval());
\n-
425
\n-
426 // upper triangular part of the hessian
\n-
427 for (size_t j = i + 1; j < m; j++) { // for each camera
\n-
428 const MatrixZD& Fj = Fs[j];
\n-
429
\n-
430 DenseIndex aug_j = KeySlotMap.at(keys[j]);
\n-
431
\n-
432 // (DxD) = (DxZDim) * ( (ZDimxZDim) * (ZDimxD) )
\n-
433 // off diagonal block - store previous block
\n-
434 // matrixBlock = augmentedHessian(aug_i, aug_j).knownOffDiagonal();
\n-
435 // add contribution of current factor
\n-
436 augmentedHessian.updateOffDiagonalBlock(
\n-
437 aug_i, aug_j,
\n-
438 -FiT * (Ei_P * E.template block<ZDim, N>(ZDim * j, 0).transpose() *
\n-
439 Fj));
\n-
440 }
\n-
441 } // end of for over cameras
\n-
442
\n-
443 augmentedHessian.diagonalBlock(M)(0, 0) += b.squaredNorm();
\n-
444 }
\n-
\n-
445
\n-
446 private:
\n-\n-
449 template <class ARCHIVE>
\n-
450 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
451 ar&(*this);
\n-
452 }
\n-
453
\n-
454 public:
\n-\n-
456};
\n-
\n-
457
\n-
458template <class CAMERA>
\n-
459const int CameraSet<CAMERA>::D;
\n-
460
\n-
461template <class CAMERA>
\n-\n-
463
\n-
464template <class CAMERA>
\n-
465struct traits<CameraSet<CAMERA>> : public Testable<CameraSet<CAMERA>> {};
\n-
466
\n-
467template <class CAMERA>
\n-
468struct traits<const CameraSet<CAMERA>> : public Testable<CameraSet<CAMERA>> {};
\n-
469
\n-
470} // namespace gtsam
\n-
Access to matrices via blocks of pre-defined sizes.
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Concept check for values that can be used in unit tests.
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n-
Calibrated camera for which only pose is unknown.
\n-
3D Point
\n-\n+
90
\n+
91} // namespace gtsam
\n+
92
\n+
serialization for Vectors
\n+
typedef and functions to augment Eigen's VectorXd
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)
Extracts a row view from a matrix that avoids a copy.
Definition Matrix.h:222
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
void setDiagonalBlock(DenseIndex I, const XprType &xpr)
Set a diagonal block. Only the upper triangular portion of xpr is evaluated.
Definition SymmetricBlockMatrix.h:195
\n-
void setOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)
Set an off-diagonal block. Only the upper triangular portion of xpr is evaluated.
Definition SymmetricBlockMatrix.h:201
\n-
constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const
Get block above the diagonal (I, J).
Definition SymmetricBlockMatrix.h:150
\n-
DenseIndex rows() const
Row size.
Definition SymmetricBlockMatrix.h:114
\n-
void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)
Update an off diagonal block.
Definition SymmetricBlockMatrix.h:228
\n-
Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)
Return the J'th diagonal block as a self adjoint view.
Definition SymmetricBlockMatrix.h:135
\n-
void updateDiagonalBlock(DenseIndex I, const XprType &xpr)
Increment the diagonal block by the values in xpr. Only reads the upper triangular part of xpr.
Definition SymmetricBlockMatrix.h:212
\n-
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j).
Definition SymmetricBlockMatrix.h:156
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n-
Vector reprojectionError(const POINT &point, const ZVector &measured, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Calculate vector [project2(point)-z] of re-projection errors.
Definition CameraSet.h:136
\n-
virtual void print(const std::string &s="") const
print
Definition CameraSet.h:85
\n-
static void ComputePointCovariance(Eigen::Matrix< double, N, N > &P, const Matrix &E, double lambda, bool diagonalDamping=false)
Computes Point Covariance P, with lambda parameter.
Definition CameraSet.h:315
\n-
static SymmetricBlockMatrix SchurComplement(const FBlocks &Fblocks, const Matrix &E, const Vector &b, const double lambda=0.0, bool diagonalDamping=false)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix Dynamic version.
Definition CameraSet.h:348
\n-
CAMERA::Measurement Z
2D measurement and noise model for each of the m views The order is kept the same as the keys that we...
Definition CameraSet.h:44
\n-
virtual ~CameraSet()=default
Destructor.
\n-
bool equals(const CameraSet &p, double tol=1e-9) const
equals
Definition CameraSet.h:91
\n-
static Matrix PointCov(const Matrix &E, const double lambda=0.0, bool diagonalDamping=false)
Computes Point Covariance P, with lambda parameter, dynamic version.
Definition CameraSet.h:331
\n-
static Vector ErrorVector(const ZVector &predicted, const ZVector &measured)
Make a vector of re-projection errors.
Definition CameraSet.h:51
\n-
static void UpdateSchurComplement(const FBlocks &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &allKeys, const KeyVector &keys, SymmetricBlockMatrix &augmentedHessian)
Applies Schur complement (exploiting block structure) to get a smart factor on cameras,...
Definition CameraSet.h:369
\n-
static SymmetricBlockMatrix SchurComplementAndRearrangeBlocks(const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &jacobianKeys, const KeyVector &hessianKeys)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * ...
Definition CameraSet.h:218
\n-
static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * ...
Definition CameraSet.h:150
\n-
static const int ZDim
Measurement dimension.
Definition CameraSet.h:48
\n-
static SymmetricBlockMatrix SchurComplement(const FBlocks &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * ...
Definition CameraSet.h:307
\n-
static const int D
Camera dimension.
Definition CameraSet.h:47
\n-
friend class boost::serialization::access
Serialization function.
Definition CameraSet.h:448
\n-
Eigen::Matrix< double, ZDim, D > MatrixZD
Definitions for blocks of F.
Definition CameraSet.h:77
\n-
ZVector project2(const POINT &point, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Project a point (possibly Unit3 at infinity), with derivatives Note that F is a sparse block-diagonal...
Definition CameraSet.h:108
\n+
Point3 mean(const CONTAINER &points)
mean
Definition Point3.h:68
\n+
Point3 cross(const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H1, OptionalJacobian< 3, 3 > H2)
cross product
Definition Point3.cpp:64
\n+
Point2Pair means(const std::vector< Point2Pair > &abPointPairs)
Calculate the two means of a set of Point2 pairs.
Definition Point2.cpp:116
\n+
double distance3(const Point3 &p1, const Point3 &q, OptionalJacobian< 1, 3 > H1, OptionalJacobian< 1, 3 > H2)
distance between two points
Definition Point3.cpp:27
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)
normalize, with optional Jacobian
Definition Point3.cpp:52
\n+
double norm3(const Point3 &p, OptionalJacobian< 1, 3 > H)
Distance of the point from the origin, with Jacobian.
Definition Point3.cpp:41
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
Definition BearingRange.h:40
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,606 +1,140 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-CameraSet.h\n+Point3.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh> // for Cheirality exception\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-27\n-28#include \n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n+20// \\callgraph\n+21\n+22#pragma once\n+23\n+24#include \n+25#include \n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+27#include \n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+29#include \n+30#include \n 31\n-35template \n-_\b3_\b6class _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt : public std::vector> {\n-37 protected:\n-38 using Base = std::vector>;\n-39\n-_\b4_\b4 typedef typename CAMERA::Measurement _\bZ;\n-45 typedef typename CAMERA::MeasurementVector ZVector;\n-46\n-_\b4_\b7 static const int _\bD = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-_\b4_\b8 static const int _\bZ_\bD_\bi_\bm = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bZ_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+_\b3_\b6typedef Vector3 _\bP_\bo_\bi_\bn_\bt_\b3;\n+37typedef std::vector > Point3Vector;\n+38\n+39// Convenience typedef\n+40using Point3Pair = std::pair;\n+41GTSAM_EXPORT std::ostream &operator<<(std::ostream &os, const gtsam::\n+Point3Pair &p);\n+42\n+43using Point3Pairs = std::vector;\n+44\n+46GTSAM_EXPORT double _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b3(const _\bP_\bo_\bi_\bn_\bt_\b3& p1, const _\bP_\bo_\bi_\bn_\bt_\b3& q,\n+47 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1 = boost::none,\n+48 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H2 = boost::none);\n 49\n-_\b5_\b1 static Vector _\bE_\br_\br_\bo_\br_\bV_\be_\bc_\bt_\bo_\br(const ZVector& predicted, const ZVector& measured)\n-{\n-52 // Check size\n-53 size_t m = predicted.size();\n-54 if (measured.size() != m)\n-55 throw std::runtime_error(\"CameraSet::errors: size mismatch\");\n-56\n-57 // Project and fill error vector\n-58 Vector b(_\bZ_\bD_\bi_\bm * m);\n-59 for (size_t i = 0, _\br_\bo_\bw = 0; i < m; i++, _\br_\bo_\bw += _\bZ_\bD_\bi_\bm) {\n-60 Vector bi = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bZ_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured[i], predicted[i]);\n-61 if (_\bZ_\bD_\bi_\bm == 3 && std::isnan(bi(1))) { // if it is a stereo point and the\n-62 // right pixel is missing (nan)\n-63 bi(1) = 0;\n-64 }\n-65 b.segment<_\bZ_\bD_\bi_\bm>(_\br_\bo_\bw) = bi;\n-66 }\n-67 return b;\n-68 }\n-69\n-70 public:\n-71 using Base::Base; // Inherit the vector constructors\n-72\n-_\b7_\b4 virtual _\b~_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt() = default;\n-75\n-_\b7_\b7 using _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD = Eigen::Matrix;\n-78 using FBlocks = std::vector>;\n-79\n-_\b8_\b5 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const {\n-86 std::cout << s << \"CameraSet, cameras = \\n\";\n-87 for (size_t k = 0; k < this->size(); ++k) this->at(k).print(s);\n+51GTSAM_EXPORT double _\bn_\bo_\br_\bm_\b3(const _\bP_\bo_\bi_\bn_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H = boost::\n+none);\n+52\n+54GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H =\n+boost::none);\n+55\n+57GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bc_\br_\bo_\bs_\bs(const _\bP_\bo_\bi_\bn_\bt_\b3& p, const _\bP_\bo_\bi_\bn_\bt_\b3& q,\n+58 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H_p = boost::none,\n+59 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H_q = boost::none);\n+60\n+62GTSAM_EXPORT double _\bd_\bo_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& p, const _\bP_\bo_\bi_\bn_\bt_\b3& q,\n+63 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H_p = boost::none,\n+64 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H_q = boost::none);\n+65\n+67template \n+_\b6_\b8_\bP_\bo_\bi_\bn_\bt_\b3 _\bm_\be_\ba_\bn(const CONTAINER& points) {\n+69 if (points.size() == 0) throw std::invalid_argument(\"Point3::mean input\n+container is empty\");\n+70 _\bP_\bo_\bi_\bn_\bt_\b3 sum(0, 0, 0);\n+71 sum = std::accumulate(points.begin(), points.end(), sum);\n+72 return sum / points.size();\n+73}\n+74\n+76GTSAM_EXPORT Point3Pair _\bm_\be_\ba_\bn_\bs(const std::vector &abPointPairs);\n+77\n+78template \n+79struct Range;\n+80\n+81template <>\n+_\b8_\b2struct _\bR_\ba_\bn_\bg_\be<_\bP_\bo_\bi_\bn_\bt_\b3, _\bP_\bo_\bi_\bn_\bt_\b3> {\n+83 typedef double result_type;\n+84 double operator()(const _\bP_\bo_\bi_\bn_\bt_\b3& p, const _\bP_\bo_\bi_\bn_\bt_\b3& q,\n+85 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1 = boost::none,\n+86 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H2 = boost::none) {\n+87 return _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b3(p, q, H1, H2);\n 88 }\n-89\n-_\b9_\b1 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt& p, double tol = 1e-9) const {\n-92 if (this->size() != p.size()) return false;\n-93 bool camerasAreEqual = true;\n-94 for (size_t i = 0; i < this->size(); i++) {\n-95 if (this->at(i).equals(p.at(i), tol) == false) camerasAreEqual = false;\n-96 break;\n-97 }\n-98 return camerasAreEqual;\n-99 }\n-100\n-107 template \n-_\b1_\b0_\b8 ZVector _\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const POINT& point, //\n-109 boost::optional Fs = boost::none, //\n-110 boost::optional E = boost::none) const {\n-111 static const int N = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bP_\bO_\bI_\bN_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n-112\n-113 // Allocate result\n-114 size_t m = this->size();\n-115 ZVector z;\n-116 z.reserve(m);\n-117\n-118 // Allocate derivatives\n-119 if (E) E->resize(_\bZ_\bD_\bi_\bm * m, N);\n-120 if (Fs) Fs->resize(m);\n-121\n-122 // Project and fill derivatives\n-123 for (size_t i = 0; i < m; i++) {\n-124 _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD Fi;\n-125 Eigen::Matrix Ei;\n-126 z.emplace_back(this->at(i)._\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(point, Fs ? &Fi : 0, E ? &Ei : 0));\n-127 if (Fs) (*Fs)[i] = Fi;\n-128 if (E) E->block<_\bZ_\bD_\bi_\bm, N>(_\bZ_\bD_\bi_\bm * i, 0) = Ei;\n-129 }\n-130\n-131 return z;\n-132 }\n-133\n-135 template \n-_\b1_\b3_\b6 Vector _\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(const POINT& point, const ZVector& measured,\n-137 boost::optional Fs = boost::none, //\n-138 boost::optional E = boost::none) const {\n-139 return _\bE_\br_\br_\bo_\br_\bV_\be_\bc_\bt_\bo_\br(_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(point, Fs, E), measured);\n-140 }\n-141\n-148 template // N = 2 or 3 (point dimension), ND is the camera dimension\n-_\b1_\b5_\b0 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(\n-151 const std::vector<\n-152 Eigen::Matrix,\n-153 Eigen::aligned_allocator>>& Fs,\n-154 const Matrix& E, const Eigen::Matrix& P, const Vector& b) {\n-155 // a single point is observed in m cameras\n-156 size_t m = Fs.size();\n-157\n-158 // Create a SymmetricBlockMatrix (augmented hessian, with extra row/column\n-159 // with info vector)\n-160 size_t M1 = ND * m + 1;\n-161 std::vector dims(m + 1); // this also includes the b term\n-162 std::fill(dims.begin(), dims.end() - 1, ND);\n-163 dims.back() = 1;\n-164 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessian(dims, Matrix::Zero(M1, M1));\n-165\n-166 // Blockwise Schur complement\n-167 for (size_t i = 0; i < m; i++) { // for each camera\n-168\n-169 const Eigen::Matrix& Fi = Fs[i];\n-170 const auto FiT = Fi.transpose();\n-171 const Eigen::Matrix Ei_P = //\n-172 E.block(_\bZ_\bD_\bi_\bm * i, 0, _\bZ_\bD_\bi_\bm, N) * P;\n-173\n-174 // D = (Dx2) * ZDim\n-175 augmentedHessian._\bs_\be_\bt_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-176 i, m,\n-177 FiT * b.segment<_\bZ_\bD_\bi_\bm>(_\bZ_\bD_\bi_\bm * i) // F' * b\n-178 -\n-179 FiT *\n-180 (Ei_P *\n-181 (E.transpose() *\n-182 b))); // D = (DxZDim) * (ZDimx3) * (N*ZDimm) * (ZDimm x 1)\n-183\n-184 // (DxD) = (DxZDim) * ( (ZDimxD) - (ZDimx3) * (3xZDim) * (ZDimxD) )\n-185 augmentedHessian._\bs_\be_\bt_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-186 i,\n-187 FiT * (Fi - Ei_P * E.block(_\bZ_\bD_\bi_\bm * i, 0, _\bZ_\bD_\bi_\bm, N).transpose() * Fi));\n-188\n-189 // upper triangular part of the hessian\n-190 for (size_t j = i + 1; j < m; j++) { // for each camera\n-191 const Eigen::Matrix& Fj = Fs[j];\n-192\n-193 // (DxD) = (Dx2) * ( (2x2) * (2xD) )\n-194 augmentedHessian._\bs_\be_\bt_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-195 i, j,\n-196 -FiT * (Ei_P * E.block(_\bZ_\bD_\bi_\bm * j, 0, _\bZ_\bD_\bi_\bm, N).transpose() * Fj));\n-197 }\n-198 } // end of for over cameras\n-199\n-200 augmentedHessian._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(m)(0, 0) += b.squaredNorm();\n-201 return augmentedHessian;\n-202 }\n-203\n-217 template \n-_\b2_\b1_\b8 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\bA_\bn_\bd_\bR_\be_\ba_\br_\br_\ba_\bn_\bg_\be_\bB_\bl_\bo_\bc_\bk_\bs(\n-219 const std::vector<\n-220 Eigen::Matrix,\n-221 Eigen::aligned_allocator>>& Fs,\n-222 const Matrix& E, const Eigen::Matrix& P, const Vector& b,\n-223 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& jacobianKeys, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& hessianKeys) {\n-224 size_t nrNonuniqueKeys = jacobianKeys.size();\n-225 size_t nrUniqueKeys = hessianKeys.size();\n-226\n-227 // Marginalize point: note - we reuse the standard SchurComplement\n-function.\n-228 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessian = SchurComplement(Fs, E, P,\n-b);\n-229\n-230 // Pack into an Hessian factor, allow space for b term.\n-231 std::vector dims(nrUniqueKeys + 1);\n-232 std::fill(dims.begin(), dims.end() - 1, NDD);\n-233 dims.back() = 1;\n-234 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessianUniqueKeys;\n-235\n-236 // Deal with the fact that some blocks may share the same keys.\n-237 if (nrUniqueKeys == nrNonuniqueKeys) {\n-238 // Case when there is 1 calibration key per camera:\n-239 augmentedHessianUniqueKeys = _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(\n-240 dims, Matrix(augmentedHessian._\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw()));\n-241 } else {\n-242 // When multiple cameras share a calibration we have to rearrange\n-243 // the results of the Schur complement matrix.\n-244 std::vector nonuniqueDims(nrNonuniqueKeys + 1); // includes b\n-245 std::fill(nonuniqueDims.begin(), nonuniqueDims.end() - 1, NDD);\n-246 nonuniqueDims.back() = 1;\n-247 augmentedHessian = _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(\n-248 nonuniqueDims, Matrix(augmentedHessian._\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw()));\n-249\n-250 // Get map from key to location in the new augmented Hessian matrix (the\n-251 // one including only unique keys).\n-252 std::map keyToSlotMap;\n-253 for (size_t k = 0; k < nrUniqueKeys; k++) {\n-254 keyToSlotMap[hessianKeys[k]] = k;\n-255 }\n-256\n-257 // Initialize matrix to zero.\n-258 augmentedHessianUniqueKeys = _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(\n-259 dims, Matrix::Zero(NDD * nrUniqueKeys + 1, NDD * nrUniqueKeys + 1));\n-260\n-261 // Add contributions for each key: note this loops over the hessian with\n-262 // nonUnique keys (augmentedHessian) and populates an Hessian that only\n-263 // includes the unique keys (that is what we want to return).\n-264 for (size_t i = 0; i < nrNonuniqueKeys; i++) { // rows\n-265 _\bK_\be_\by key_i = jacobianKeys.at(i);\n-266\n-267 // Update information vector.\n-268 augmentedHessianUniqueKeys._\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-269 keyToSlotMap[key_i], nrUniqueKeys,\n-270 augmentedHessian._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i, nrNonuniqueKeys));\n-271\n-272 // Update blocks.\n-273 for (size_t j = i; j < nrNonuniqueKeys; j++) { // cols\n-274 _\bK_\be_\by key_j = jacobianKeys.at(j);\n-275 if (i == j) {\n-276 augmentedHessianUniqueKeys._\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-277 keyToSlotMap[key_i], augmentedHessian._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i));\n-278 } else { // (i < j)\n-279 if (keyToSlotMap[key_i] != keyToSlotMap[key_j]) {\n-280 augmentedHessianUniqueKeys._\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-281 keyToSlotMap[key_i], keyToSlotMap[key_j],\n-282 augmentedHessian._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i, j));\n-283 } else {\n-284 augmentedHessianUniqueKeys._\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-285 keyToSlotMap[key_i],\n-286 augmentedHessian._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i, j) +\n-287 augmentedHessian._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i, j).transpose());\n-288 }\n-289 }\n-290 }\n-291 }\n-292\n-293 // Update bottom right element of the matrix.\n-294 augmentedHessianUniqueKeys._\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-295 nrUniqueKeys, augmentedHessian._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(nrNonuniqueKeys));\n-296 }\n-297 return augmentedHessianUniqueKeys;\n-298 }\n-299\n-306 template // N = 2 or 3\n-_\b3_\b0_\b7 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(\n-308 const FBlocks& Fs, const Matrix& E, const Eigen::Matrix& P,\n-309 const Vector& b) {\n-310 return SchurComplement(Fs, E, P, b);\n-311 }\n-312\n-314 template // N = 2 or 3 (point dimension)\n-_\b3_\b1_\b5 static void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be(Eigen::Matrix& P,\n-316 const Matrix& E, double lambda,\n-317 bool diagonalDamping = false) {\n-318 Matrix EtE = E.transpose() * E;\n-319\n-320 if (diagonalDamping) { // diagonal of the hessian\n-321 EtE.diagonal() += lambda * EtE.diagonal();\n-322 } else {\n-323 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx n = E.cols();\n-324 EtE += lambda * Eigen::MatrixXd::Identity(n, n);\n-325 }\n-326\n-327 P = (EtE).inverse();\n-328 }\n-329\n-_\b3_\b3_\b1 static Matrix _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv(const Matrix& E, const double lambda = 0.0,\n-332 bool diagonalDamping = false) {\n-333 if (E.cols() == 2) {\n-334 Matrix2 P2;\n-335 ComputePointCovariance<2>(P2, E, lambda, diagonalDamping);\n-336 return P2;\n-337 } else {\n-338 Matrix3 P3;\n-339 ComputePointCovariance<3>(P3, E, lambda, diagonalDamping);\n-340 return P3;\n-341 }\n-342 }\n-343\n-_\b3_\b4_\b8 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(const FBlocks& Fblocks,\n-349 const Matrix& E, const Vector& b,\n-350 const double lambda = 0.0,\n-351 bool diagonalDamping = false) {\n-352 if (E.cols() == 2) {\n-353 Matrix2 P;\n-354 ComputePointCovariance<2>(P, E, lambda, diagonalDamping);\n-355 return SchurComplement<2>(Fblocks, E, P, b);\n-356 } else {\n-357 Matrix3 P;\n-358 ComputePointCovariance<3>(P, E, lambda, diagonalDamping);\n-359 return SchurComplement<3>(Fblocks, E, P, b);\n-360 }\n-361 }\n-362\n-368 template // N = 2 or 3 (point dimension)\n-_\b3_\b6_\b9 static void _\bU_\bp_\bd_\ba_\bt_\be_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(\n-370 const FBlocks& Fs, const Matrix& E, const Eigen::Matrix& P,\n-371 const Vector& b, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& allKeys, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys,\n-372 /*output ->*/ _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& augmentedHessian) {\n-373 assert(keys.size() == Fs.size());\n-374 assert(keys.size() <= allKeys.size());\n-375\n-376 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bs_\bi_\bz_\be_\b__\bt_\b> KeySlotMap;\n-377 for (size_t slot = 0; slot < allKeys.size(); slot++)\n-378 KeySlotMap.insert(std::make_pair(allKeys[slot], slot));\n-379\n-380 // Schur complement trick\n-381 // G = F' * F - F' * E * P * E' * F\n-382 // g = F' * (b - E * P * E' * b)\n-383\n-384 // a single point is observed in m cameras\n-385 size_t m = Fs.size(); // cameras observing current point\n-386 size_t M = (augmentedHessian._\br_\bo_\bw_\bs() - 1) / _\bD; // all cameras in the group\n-387 assert(allKeys.size() == M);\n-388\n-389 // Blockwise Schur complement\n-390 for (size_t i = 0; i < m; i++) { // for each camera in the current factor\n-391\n-392 const _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD& Fi = Fs[i];\n-393 const auto FiT = Fi.transpose();\n-394 const Eigen::Matrix Ei_P =\n-395 E.template block(_\bZ_\bD_\bi_\bm * i, 0) * P;\n-396\n-397 // D = (DxZDim) * (ZDim)\n-398 // allKeys are the list of all camera keys in the group, e.g, (1,3,4,5,7)\n-399 // we should map those to a slot in the local (grouped) hessian\n-400 // (0,1,2,3,4) Key cameraKey_i = this->keys_[i];\n-401 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx aug_i = KeySlotMap.at(keys[i]);\n-402\n-403 // information vector - store previous vector\n-404 // vectorBlock = augmentedHessian(aug_i, aug_m).knownOffDiagonal();\n-405 // add contribution of current factor\n-406 augmentedHessian._\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-407 aug_i, M,\n-408 FiT * b.segment<_\bZ_\bD_\bi_\bm>(_\bZ_\bD_\bi_\bm * i) // F' * b\n-409 -\n-410 FiT *\n-411 (Ei_P *\n-412 (E.transpose() *\n-413 b))); // D = (DxZDim) * (ZDimx3) * (N*ZDimm) * (ZDimm x 1)\n-414\n-415 // (DxD) += (DxZDim) * ( (ZDimxD) - (ZDimx3) * (3xZDim) * (ZDimxD) )\n-416 // add contribution of current factor\n-417 // TODO(gareth): Eigen doesn't let us pass the expression. Call eval() for\n-418 // now...\n-419 augmentedHessian._\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-420 aug_i,\n-421 ((FiT *\n-422 (Fi -\n-423 Ei_P * E.template block(_\bZ_\bD_\bi_\bm * i, 0).transpose() * Fi)))\n-424 .eval());\n-425\n-426 // upper triangular part of the hessian\n-427 for (size_t j = i + 1; j < m; j++) { // for each camera\n-428 const _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD& Fj = Fs[j];\n-429\n-430 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx aug_j = KeySlotMap.at(keys[j]);\n-431\n-432 // (DxD) = (DxZDim) * ( (ZDimxZDim) * (ZDimxD) )\n-433 // off diagonal block - store previous block\n-434 // matrixBlock = augmentedHessian(aug_i, aug_j).knownOffDiagonal();\n-435 // add contribution of current factor\n-436 augmentedHessian._\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n-437 aug_i, aug_j,\n-438 -FiT * (Ei_P * E.template block(_\bZ_\bD_\bi_\bm * j, 0).transpose() *\n-439 Fj));\n-440 }\n-441 } // end of for over cameras\n-442\n-443 augmentedHessian._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(M)(0, 0) += b.squaredNorm();\n-444 }\n-445\n-446 private:\n-_\b4_\b4_\b8 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-449 template \n-450 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-451 ar&(*this);\n-452 }\n-453\n-454 public:\n-455 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-456};\n-457\n-458template \n-459const int _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bD;\n-460\n-461template \n-462const int _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bZ_\bD_\bi_\bm;\n-463\n-464template \n-_\b4_\b6_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n-466\n-467template \n-_\b4_\b6_\b8struct _\bt_\br_\ba_\bi_\bt_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be>\n-{};\n-469\n-470} // namespace gtsam\n-_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-Access to matrices via blocks of pre-defined sizes.\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n-A thin wrapper around std::map that uses boost's fast_pool_allocator.\n-_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n-Calibrated camera for which only pose is unknown.\n-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\n-_\bK_\be_\by_\b._\bh\n+89};\n+90\n+91} // namespace gtsam\n+92\n+_\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+serialization for Vectors\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\bo_\bw\n-const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)\n-Extracts a row view from a matrix that avoids a copy.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:222\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-Give fixed size dimension of a type, fails at compile time if dynamic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-void setDiagonalBlock(DenseIndex I, const XprType &xpr)\n-Set a diagonal block. Only the upper triangular portion of xpr is evaluated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-void setOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)\n-Set an off-diagonal block. Only the upper triangular portion of xpr is\n-evaluated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:201\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const\n-Get block above the diagonal (I, J).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-DenseIndex rows() const\n-Row size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)\n-Update an off diagonal block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:228\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)\n-Return the J'th diagonal block as a self adjoint view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-void updateDiagonalBlock(DenseIndex I, const XprType &xpr)\n-Increment the diagonal block by the values in xpr. Only reads the upper\n-triangular part of xpr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n-Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex\n-I, DenseIndex J) const\n-Return the square sub-matrix that contains blocks(i:j, i:j).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n-A set of cameras, all with their own calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n-Vector reprojectionError(const POINT &point, const ZVector &measured, boost::\n-optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::\n-none) const\n-Calculate vector [project2(point)-z] of re-projection errors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"\") const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n-static void ComputePointCovariance(Eigen::Matrix< double, N, N > &P, const\n-Matrix &E, double lambda, bool diagonalDamping=false)\n-Computes Point Covariance P, with lambda parameter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:315\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n-static SymmetricBlockMatrix SchurComplement(const FBlocks &Fblocks, const\n-Matrix &E, const Vector &b, const double lambda=0.0, bool\n-diagonalDamping=false)\n-Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix\n-Dynamic version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:348\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bZ\n-CAMERA::Measurement Z\n-2D measurement and noise model for each of the m views The order is kept the\n-same as the keys that we...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\b~_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n-virtual ~CameraSet()=default\n-Destructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const CameraSet &p, double tol=1e-9) const\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv\n-static Matrix PointCov(const Matrix &E, const double lambda=0.0, bool\n-diagonalDamping=false)\n-Computes Point Covariance P, with lambda parameter, dynamic version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:331\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bE_\br_\br_\bo_\br_\bV_\be_\bc_\bt_\bo_\br\n-static Vector ErrorVector(const ZVector &predicted, const ZVector &measured)\n-Make a vector of re-projection errors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n-static void UpdateSchurComplement(const FBlocks &Fs, const Matrix &E, const\n-Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &allKeys,\n-const KeyVector &keys, SymmetricBlockMatrix &augmentedHessian)\n-Applies Schur complement (exploiting block structure) to get a smart factor on\n-cameras,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:369\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\bA_\bn_\bd_\bR_\be_\ba_\br_\br_\ba_\bn_\bg_\be_\bB_\bl_\bo_\bc_\bk_\bs\n-static SymmetricBlockMatrix SchurComplementAndRearrangeBlocks(const std::\n-vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::\n-Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix<\n-double, N, N > &P, const Vector &b, const KeyVector &jacobianKeys, const\n-KeyVector &hessianKeys)\n-Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G =\n-F' * F - F' * E * P * ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:218\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n-static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix<\n-double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND >\n-> > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector\n-&b)\n-Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G =\n-F' * F - F' * E * P * ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bZ_\bD_\bi_\bm\n-static const int ZDim\n-Measurement dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n-static SymmetricBlockMatrix SchurComplement(const FBlocks &Fs, const Matrix &E,\n-const Eigen::Matrix< double, N, N > &P, const Vector &b)\n-Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G =\n-F' * F - F' * E * P * ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:307\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bD\n-static const int D\n-Camera dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:448\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD\n-Eigen::Matrix< double, ZDim, D > MatrixZD\n-Definitions for blocks of F.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n-ZVector project2(const POINT &point, boost::optional< FBlocks & > Fs=boost::\n-none, boost::optional< Matrix & > E=boost::none) const\n-Project a point (possibly Unit3 at infinity), with derivatives Note that F is a\n-sparse block-diagonal...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\be_\ba_\bn\n+Point3 mean(const CONTAINER &points)\n+mean\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\bo_\bs_\bs\n+Point3 cross(const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H1,\n+OptionalJacobian< 3, 3 > H2)\n+cross product\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\be_\ba_\bn_\bs\n+Point2Pair means(const std::vector< Point2Pair > &abPointPairs)\n+Calculate the two means of a set of Point2 pairs.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.cpp:116\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b3\n+double distance3(const Point3 &p1, const Point3 &q, OptionalJacobian< 1, 3 >\n+H1, OptionalJacobian< 1, 3 > H2)\n+distance between two points\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be\n+Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)\n+normalize, with optional Jacobian\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\br_\bm_\b3\n+double norm3(const Point3 &p, OptionalJacobian< 1, 3 > H)\n+Distance of the point from the origin, with Jacobian.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n+ * _\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00386.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00386.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.h File Reference\n \n \n \n \n \n \n \n@@ -94,42 +94,48 @@\n \n \n \n \n \n
\n \n-
Similarity2.cpp File Reference
\n+Classes |\n+Namespaces
\n+
Cal3_S2.h File Reference
\n \n
\n \n-

Implementation of Similarity2 transform. \n+

The most common 5DOF 3D->2D calibration. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Cal3_S2
 The most common 5DOF 3D->2D calibration. More...
 
struct  gtsam::traits< Cal3_S2 >
 
struct  gtsam::traits< const Cal3_S2 >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Similarity2 &p)
 
\n

Detailed Description

\n-

Implementation of Similarity2 transform.

\n-
Author
John Lambert, Varun Agrawal
\n+

The most common 5DOF 3D->2D calibration.

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Similarity2.cpp File Reference\n-Implementation of Similarity2 transform. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Cal3_S2.h File Reference\n+The most common 5DOF 3D->2D calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n+\u00a0 The most common 5DOF 3D->2D calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 &p)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implementation of Similarity2 transform.\n+The most common 5DOF 3D->2D calibration.\n Author\n- John Lambert, Varun Agrawal\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b._\bc_\bp_\bp\n+ * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00392.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00392.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SphericalCamera.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,52 +94,39 @@\n \n \n \n \n \n
\n \n-
SphericalCamera.h File Reference
\n+Namespaces |\n+Functions
\n+
StereoPoint2.cpp File Reference
\n \n
\n-\n-

Calibrated camera with spherical projection. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::EmptyCal
 Empty calibration. More...
 
class  gtsam::SphericalCamera
 A spherical camera class that has a Pose3 and measures bearing vectors. More...
 
struct  gtsam::traits< SphericalCamera >
 
struct  gtsam::traits< const SphericalCamera >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Functions

\n+ostream & gtsam::operator<< (ostream &os, const StereoPoint2 &p)
 
\n

Detailed Description

\n-

Calibrated camera with spherical projection.

\n-
Date
Aug 26, 2021
\n-
Author
Luca Carlone
\n+
Date
Jan 26, 2010
\n+
Author
dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SphericalCamera.h File Reference\n-Calibrated camera with spherical projection. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl\n-\u00a0 Empty calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n-\u00a0 A spherical camera class that has a _\bP_\bo_\bs_\be_\b3 and measures bearing\n- vectors. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+StereoPoint2.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 &p)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Calibrated camera with spherical projection.\n Date\n- Aug 26, 2021\n+ Jan 26, 2010\n Author\n- Luca Carlone\n+ dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+ * _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00395.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00395.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,53 +94,41 @@\n \n \n \n \n \n
\n \n-
Rot2.h File Reference
\n+Namespaces |\n+Functions
\n+
Cal3Unified.cpp File Reference
\n \n
\n-\n-

2D rotation \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::Rot2
 Rotation matrix NOTE: the angle theta is in radians unless explicitly stated. More...
 
struct  gtsam::Rot2::ChartAtOrigin
 
struct  gtsam::traits< Rot2 >
 
struct  gtsam::traits< const Rot2 >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Functions

\n+std::ostream & gtsam::operator<< (std::ostream &os, const Cal3Unified &cal)
 
\n

Detailed Description

\n-

2D rotation

\n-
Date
Dec 9, 2009
\n-
Author
Frank Dellaert
\n+
Date
Mar 8, 2014
\n+
Author
Jing Dong
\n
\n-John Lambert
\n+Varun Agrawal
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,24 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Rot2.h File Reference\n-2D rotation _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2\n-\u00a0 Rotation matrix NOTE: the angle theta is in radians unless explicitly\n- stated. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\bo_\bt_\b2_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bR_\bo_\bt_\b2_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Cal3Unified.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd &cal)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-2D rotation\n Date\n- Dec 9, 2009\n+ Mar 8, 2014\n Author\n- Frank Dellaert\n- John Lambert\n+ Jing Dong\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bR_\bo_\bt_\b2_\b._\bh\n+ * _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00401.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00401.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Quaternion.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point3.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,57 +94,64 @@\n \n \n \n \n \n
\n \n-
Quaternion.h File Reference
\n+Functions
\n+
Point3.cpp File Reference
\n \n
\n \n-

Lie Group wrapper for Eigen Quaternions. \n+

3D Point \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-

\n-Classes

struct  gtsam::traits< QUATERNION_TYPE >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-

\n-Macros

\n-#define QUATERNION_TYPE   Eigen::Quaternion<_Scalar,_Options>
 
\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-Typedefs

\n-typedef Eigen::Quaternion< double, Eigen::DontAlign > gtsam::Quaternion
 

\n+Functions

\n+double gtsam::distance3 (const Point3 &p1, const Point3 &q, OptionalJacobian< 1, 3 > H1=boost::none, OptionalJacobian< 1, 3 > H2=boost::none)
 distance between two points
 
\n+double gtsam::norm3 (const Point3 &p, OptionalJacobian< 1, 3 > H=boost::none)
 Distance of the point from the origin, with Jacobian.
 
\n+Point3 gtsam::normalize (const Point3 &p, OptionalJacobian< 3, 3 > H=boost::none)
 normalize, with optional Jacobian
 
Point3 gtsam::cross (const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H_p=boost::none, OptionalJacobian< 3, 3 > H_q=boost::none)
 cross product
 
\n+double gtsam::dot (const Point3 &p, const Point3 &q, OptionalJacobian< 1, 3 > H_p=boost::none, OptionalJacobian< 1, 3 > H_q=boost::none)
 dot product
 
\n+Point3Pair gtsam::means (const std::vector< Point3Pair > &abPointPairs)
 Calculate the two means of a set of Point3 pairs.
 
\n+ostream & gtsam::operator<< (ostream &os, const gtsam::Point3Pair &p)
 
\n

Detailed Description

\n-

Lie Group wrapper for Eigen Quaternions.

\n-
Author
Frank Dellaert
\n+

3D Point

\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,45 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-Quaternion.h File Reference\n-Lie Group wrapper for Eigen Quaternions. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bQ_\bU_\bA_\bT_\bE_\bR_\bN_\bI_\bO_\bN_\b__\bT_\bY_\bP_\bE_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Point3.cpp File Reference\n+3D Point _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 Q\bQU\bUA\bAT\bTE\bER\bRN\bNI\bIO\bON\bN_\b_T\bTY\bYP\bPE\bE\u00a0\u00a0\u00a0Eigen::Quaternion<_Scalar,_Options>\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bis\bst\bta\ban\bnc\bce\be3\b3 (const _\bP_\bo_\bi_\bn_\bt_\b3 &p1, const _\bP_\bo_\bi_\bn_\bt_\b3 &q,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H1=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 >\n+ H2=boost::none)\n+\u00a0 distance between two points\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bm3\b3 (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H=boost::\n+ none)\n+\u00a0 Distance of the point from the origin, with Jacobian.\n+\u00a0\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bma\bal\bli\biz\bze\be (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 3 >\n+ H=boost::none)\n+\u00a0 normalize, with optional Jacobian\n+\u00a0\n+ _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\bo_\bs_\bs (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, const _\bP_\bo_\bi_\bn_\bt_\b3 &q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<\n+ 3, 3 > H_p=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 3 > H_q=boost::none)\n+\u00a0 cross product\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdo\bot\bt (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, const _\bP_\bo_\bi_\bn_\bt_\b3 &q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1,\n+ 3 > H_p=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H_q=boost::none)\n+\u00a0 dot product\n+\u00a0\n+Point3Pair\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bme\bea\ban\bns\bs (const std::vector< Point3Pair > &abPointPairs)\n+\u00a0 Calculate the two means of a set of Point3 pairs.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef Eigen::Quaternion< double, Eigen::DontAlign >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:Q\bQu\bua\bat\bte\ber\brn\bni\bio\bon\bn\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const gtsam::Point3Pair &p)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Lie Group wrapper for Eigen Quaternions.\n- Author\n- Frank Dellaert\n+3D Point\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh\n+ * _\bP_\bo_\bi_\bn_\bt_\b3_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00401.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00401.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,8 @@\n var a00401 = [\n- [\"gtsam::traits< QUATERNION_TYPE >\", \"a03208.html\", null]\n+ [\"cross\", \"a00401.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\", null],\n+ [\"distance3\", \"a00401.html#aa42f7ec660b7353de39f9c86a26711cc\", null],\n+ [\"dot\", \"a00401.html#a7dc820e4e47218768f104b43a184a1bd\", null],\n+ [\"means\", \"a00401.html#a57f778b84bc6106471006421d289b832\", null],\n+ [\"norm3\", \"a00401.html#ac37b6f807985ffd25217e33f6136fe58\", null],\n+ [\"normalize\", \"a00401.html#abb52bb00c68909fc1147e5d112e8c2ae\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00407.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00407.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point3.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CalibratedCamera.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,99 +94,36 @@\n \n \n \n \n \n
\n \n-
Point3.h File Reference
\n+Namespaces
\n+
CalibratedCamera.cpp File Reference
\n \n
\n \n-

3D Point \n+

Calibrated camera for which only pose is unknown. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-

\n-Classes

struct  gtsam::Range< Point3, Point3 >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Typedefs

\n-typedef Vector3 gtsam::Point3
 As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3.
 
\n-typedef std::vector< Point3, Eigen::aligned_allocator< Point3 > > gtsam::Point3Vector
 
\n-using gtsam::Point3Pair = std::pair< Point3, Point3 >
 
\n-using gtsam::Point3Pairs = std::vector< Point3Pair >
 
\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-Functions

\n-ostream & gtsam::operator<< (ostream &os, const gtsam::Point3Pair &p)
 
\n-double gtsam::distance3 (const Point3 &p1, const Point3 &q, OptionalJacobian< 1, 3 > H1=boost::none, OptionalJacobian< 1, 3 > H2=boost::none)
 distance between two points
 
\n-double gtsam::norm3 (const Point3 &p, OptionalJacobian< 1, 3 > H=boost::none)
 Distance of the point from the origin, with Jacobian.
 
\n-Point3 gtsam::normalize (const Point3 &p, OptionalJacobian< 3, 3 > H=boost::none)
 normalize, with optional Jacobian
 
Point3 gtsam::cross (const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H_p=boost::none, OptionalJacobian< 3, 3 > H_q=boost::none)
 cross product
 
\n-double gtsam::dot (const Point3 &p, const Point3 &q, OptionalJacobian< 1, 3 > H_p=boost::none, OptionalJacobian< 1, 3 > H_q=boost::none)
 dot product
 
\n-template<class CONTAINER >
Point3 gtsam::mean (const CONTAINER &points)
 mean
 
\n-Point3Pair gtsam::means (const std::vector< Point3Pair > &abPointPairs)
 Calculate the two means of a set of Point3 pairs.
 
\n

Detailed Description

\n-

3D Point

\n-
Author
Alireza Fathi
\n-
\n-Christian Potthast
\n-
\n-Frank Dellaert
\n+

Calibrated camera for which only pose is unknown.

\n+
Date
Aug 17, 2009
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,72 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Point3.h File Reference\n-3D Point _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+CalibratedCamera.cpp File Reference\n+Calibrated camera for which only pose is unknown. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n- typedef Vector3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt3\b3\n- As of GTSAM 4, in order to make GTSAM more\n-\u00a0 lean, it is now possible to just typedef\n- Point3 to Vector3.\n-\u00a0\n-typedef std::vector< _\bP_\bo_\bi_\bn_\bt_\b3, Eigen::\n- aligned_allocator< _\bP_\bo_\bi_\bn_\bt_\b3 > >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt3\b3V\bVe\bec\bct\bto\bor\br\n-\u00a0\n- using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt3\b3P\bPa\bai\bir\br = std::pair< _\bP_\bo_\bi_\bn_\bt_\b3,\n- _\bP_\bo_\bi_\bn_\bt_\b3 >\n-\u00a0\n- using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt3\b3P\bPa\bai\bir\brs\bs = std::vector<\n- Point3Pair >\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const gtsam::Point3Pair &p)\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bis\bst\bta\ban\bnc\bce\be3\b3 (const _\bP_\bo_\bi_\bn_\bt_\b3 &p1, const _\bP_\bo_\bi_\bn_\bt_\b3 &q,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H1=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 >\n- H2=boost::none)\n-\u00a0 distance between two points\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bm3\b3 (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H=boost::\n- none)\n-\u00a0 Distance of the point from the origin, with Jacobian.\n-\u00a0\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bma\bal\bli\biz\bze\be (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 3 >\n- H=boost::none)\n-\u00a0 normalize, with optional Jacobian\n-\u00a0\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\bo_\bs_\bs (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, const _\bP_\bo_\bi_\bn_\bt_\b3 &q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<\n- 3, 3 > H_p=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 3 > H_q=boost::none)\n-\u00a0 cross product\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdo\bot\bt (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, const _\bP_\bo_\bi_\bn_\bt_\b3 &q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1,\n- 3 > H_p=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H_q=boost::none)\n-\u00a0 dot product\n-\u00a0\n-template\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bme\bea\ban\bn (const CONTAINER &points)\n-\u00a0 mean\n-\u00a0\n-Point3Pair\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bme\bea\ban\bns\bs (const std::vector< Point3Pair > &abPointPairs)\n-\u00a0 Calculate the two means of a set of Point3 pairs.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-3D Point\n+Calibrated camera for which only pose is unknown.\n+ Date\n+ Aug 17, 2009\n Author\n- Alireza Fathi\n- Christian Potthast\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+ * _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00410.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00410.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SimpleCamera.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,76 +94,36 @@\n \n \n \n \n \n
\n \n-
Pose3.h File Reference
\n+Namespaces
\n+
SimpleCamera.cpp File Reference
\n \n
\n \n-

3D Pose \n+

A simple camera class with a Cal3_S2 calibration. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::Pose3
 A 3D pose (R,t) : (Rot3,Point3) More...
 
struct  gtsam::Pose3::ChartAtOrigin
 
struct  gtsam::traits< Pose3 >
 
struct  gtsam::traits< const Pose3 >
 
struct  gtsam::Bearing< Pose3, Point3 >
 
struct  gtsam::Bearing< Pose3, Pose3 >
 
struct  gtsam::Range< Pose3, T >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::Pose3Pair = std::pair< Pose3, Pose3 >
 
\n-using gtsam::Pose3Pairs = std::vector< std::pair< Pose3, Pose3 > >
 
\n-typedef std::vector< Pose3gtsam::Pose3Vector
 
\n-\n-\n-\n-\n-\n

\n-Functions

template<>
Matrix gtsam::wedge< Pose3 > (const Vector &xi)
 wedge for Pose3:
 
\n

Detailed Description

\n-

3D Pose

\n+

A simple camera class with a Cal3_S2 calibration.

\n+
Date
June 30, 2012
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,48 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Pose3.h File Reference\n-3D Pose _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-\u00a0 A 3D pose (R,t) : (_\bR_\bo_\bt_\b3,Point3) _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bo_\bs_\be_\b3_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bP_\bo_\bs_\be_\b3_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\b _\bP_\bo_\bs_\be_\b3_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\b _\bP_\bo_\bs_\be_\b3_\b,_\b _\bP_\bo_\bs_\be_\b3_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bo_\bs_\be_\b3_\b,_\b _\bT_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SimpleCamera.cpp File Reference\n+A simple camera class with a Cal3_S2 calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n- using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\bos\bse\be3\b3P\bPa\bai\bir\br = std::pair< _\bP_\bo_\bs_\be_\b3, _\bP_\bo_\bs_\be_\b3 >\n-\u00a0\n- using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\bos\bse\be3\b3P\bPa\bai\bir\brs\bs = std::vector< std::pair<\n- _\bP_\bo_\bs_\be_\b3, _\bP_\bo_\bs_\be_\b3 > >\n-\u00a0\n-typedef std::vector< _\bP_\bo_\bs_\be_\b3 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\bos\bse\be3\b3V\bVe\bec\bct\bto\bor\br\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template<>\n- Matrix\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bd_\bg_\be_\b<_\b _\bP_\bo_\bs_\be_\b3_\b _\b> (const Vector &xi)\n-\u00a0 wedge for _\bP_\bo_\bs_\be_\b3:\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-3D Pose\n+A simple camera class with a Cal3_S2 calibration.\n+ Date\n+ June 30, 2012\n+ Author\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bs_\be_\b3_\b._\bh\n+ * _\bS_\bi_\bm_\bp_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00413.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00413.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2Stereo.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h File Reference\n \n \n \n \n \n \n \n@@ -94,42 +94,53 @@\n \n \n \n \n \n
\n \n-
Cal3_S2Stereo.cpp File Reference
\n+Classes |\n+Namespaces
\n+
Rot2.h File Reference
\n \n
\n \n-

The most common 5DOF 3D->2D calibration + Stereo baseline. \n+

2D rotation \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Rot2
 Rotation matrix NOTE: the angle theta is in radians unless explicitly stated. More...
 
struct  gtsam::Rot2::ChartAtOrigin
 
struct  gtsam::traits< Rot2 >
 
struct  gtsam::traits< const Rot2 >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Cal3_S2Stereo &cal)
 
\n

Detailed Description

\n-

The most common 5DOF 3D->2D calibration + Stereo baseline.

\n-
Author
Chris Beall
\n+

2D rotation

\n+
Date
Dec 9, 2009
\n+
Author
Frank Dellaert
\n+
\n+John Lambert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Cal3_S2Stereo.cpp File Reference\n-The most common 5DOF 3D->2D calibration + Stereo baseline. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Rot2.h File Reference\n+2D rotation _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2\n+\u00a0 Rotation matrix NOTE: the angle theta is in radians unless explicitly\n+ stated. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\bo_\bt_\b2_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bR_\bo_\bt_\b2_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo &cal)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-The most common 5DOF 3D->2D calibration + Stereo baseline.\n+2D rotation\n+ Date\n+ Dec 9, 2009\n Author\n- Chris Beall\n+ Frank Dellaert\n+ John Lambert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b._\bc_\bp_\bp\n+ * _\bR_\bo_\bt_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00419_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00419_source.html", "unified_diff": "@@ -114,15 +114,15 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n+\n
21#include <iosfwd>
\n
22
\n
23namespace gtsam {
\n
24
\n
\n
30class GTSAM_EXPORT Cal3_S2Stereo : public Cal3_S2 {
\n
31 private:
\n@@ -220,15 +220,15 @@\n
161template <>
\n
\n
162struct traits<const Cal3_S2Stereo> : public internal::Manifold<Cal3_S2Stereo> {
\n
163};
\n
\n
164
\n
165} // \\ namespace gtsam
\n-
The most common 5DOF 3D->2D calibration.
\n+
The most common 5DOF 3D->2D calibration.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Template to create a binary predicate.
Definition Testable.h:111
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00422.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00422.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,56 @@\n
\n \n \n \n \n
\n \n-
Rot2.cpp File Reference
\n+Classes |\n+Namespaces |\n+Typedefs
\n+
StereoPoint2.h File Reference
\n \n
\n \n-

2D Rotations \n+

A 2D stereo point (uL,uR,v) \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::StereoPoint2
 A 2D stereo point, v will be same for rectified images. More...
 
struct  gtsam::traits< StereoPoint2 >
 
struct  gtsam::traits< const StereoPoint2 >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Typedefs

\n+typedef std::vector< StereoPoint2gtsam::StereoPoint2Vector
 
\n

Detailed Description

\n-

2D Rotations

\n-
Date
Dec 9, 2009
\n+

A 2D stereo point (uL,uR,v)

\n+
Date
Jan 26, 2010
\n
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,34 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Rot2.cpp File Reference\n-2D Rotations _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+StereoPoint2.h File Reference\n+A 2D stereo point (uL,uR,v) _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2\n+\u00a0 A 2D stereo point, v will be same for rectified images. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef std::vector< _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSt\bte\ber\bre\beo\boP\bPo\boi\bin\bnt\bt2\b2V\bVe\bec\bct\bto\bor\br\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-2D Rotations\n+A 2D stereo point (uL,uR,v)\n Date\n- Dec 9, 2009\n+ Jan 26, 2010\n Author\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bR_\bo_\bt_\b2_\b._\bc_\bp_\bp\n+ * _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00425.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00425.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SimpleCamera.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,56 +95,88 @@\n \n \n \n \n
\n \n-
SimpleCamera.h File Reference
\n+Functions
\n+
SO3.cpp File Reference
\n \n
\n \n-

A simple camera class with a Cal3_S2 calibration. \n+

3*3 matrix representation of SO(3) \n More...

\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n

\n-Typedefs

using gtsam::PinholeCameraCal3_S2 = gtsam::PinholeCamera< gtsam::Cal3_S2 >
 Convenient aliases for Pinhole camera classes with different calibrations.
 
\n-using gtsam::PinholeCameraCal3Bundler = gtsam::PinholeCamera< gtsam::Cal3Bundler >
 
\n-using gtsam::PinholeCameraCal3DS2 = gtsam::PinholeCamera< gtsam::Cal3DS2 >
 
\n-using gtsam::PinholeCameraCal3Unified = gtsam::PinholeCamera< gtsam::Cal3Unified >
 
\n-using gtsam::PinholeCameraCal3Fisheye = gtsam::PinholeCamera< gtsam::Cal3Fisheye >
 

\n+Functions

\n+GTSAM_EXPORT Matrix99 gtsam::so3::Dcompose (const SO3 &R)
 (constant) Jacobian of compose wrpt M
 
GTSAM_EXPORT Matrix3 gtsam::so3::compose (const Matrix3 &M, const SO3 &R, OptionalJacobian< 9, 9 > H=boost::none)
 Compose general matrix with an SO(3) element.
 
\n

Detailed Description

\n-

A simple camera class with a Cal3_S2 calibration.

\n-
Date
Aug 16, 2009
\n-
Author
Frank Dellaert
\n-
\n+

3*3 matrix representation of SO(3)

\n+
Author
Frank Dellaert
\n+
\n+Luca Carlone
\n+
\n+Duy Nguyen Ta
\n+
Date
December 2014
\n+

Function Documentation

\n+\n+

◆ compose()

\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+
GTSAM_EXPORT Matrix3 gtsam::so3::compose (const Matrix3 & M,
const SO3R,
OptionalJacobian< 9, 9 > H = boost::none 
)
\n+
\n+\n+

Compose general matrix with an SO(3) element.

\n+

We only provide the 9*9 derivative in the first argument M.

\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,41 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-SimpleCamera.h File Reference\n-A simple camera class with a Cal3_S2 calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SO3.cpp File Reference\n+3*3 matrix representation of SO(3) _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\bC_\ba_\bl_\b3_\b__\bS_\b2 = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2 >\n-\u00a0 Convenient aliases for Pinhole camera classes with different\n- calibrations.\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPi\bin\bnh\bho\bol\ble\beC\bCa\bam\bme\ber\bra\baC\bCa\bal\bl3\b3B\bBu\bun\bnd\bdl\ble\ber\br = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n- _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPi\bin\bnh\bho\bol\ble\beC\bCa\bam\bme\ber\bra\baC\bCa\bal\bl3\b3D\bDS\bS2\b2 = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2 >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPi\bin\bnh\bho\bol\ble\beC\bCa\bam\bme\ber\bra\baC\bCa\bal\bl3\b3U\bUn\bni\bif\bfi\bie\bed\bd = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n- _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPi\bin\bnh\bho\bol\ble\beC\bCa\bam\bme\ber\bra\baC\bCa\bal\bl3\b3F\bFi\bis\bsh\bhe\bey\bye\be = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n- _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be >\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+GTSAM_EXPORT Matrix99\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bso\bo3\b3:\b::\b:D\bDc\bco\bom\bmp\bpo\bos\bse\be (const _\bS_\bO_\b3 &R)\n+\u00a0 (constant) Jacobian of compose wrpt M\n+\u00a0\n+ GTSAM_EXPORT Matrix3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bc_\bo_\bm_\bp_\bo_\bs_\be (const Matrix3 &M, const _\bS_\bO_\b3 &R,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 9, 9 > H=boost::none)\n+\u00a0 Compose general matrix with an SO(3) element.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A simple camera class with a Cal3_S2 calibration.\n- Date\n- Aug 16, 2009\n+3*3 matrix representation of SO(3)\n Author\n Frank Dellaert\n+ Luca Carlone\n+ Duy Nguyen Ta\n+ Date\n+ December 2014\n+*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0c\bco\bom\bmp\bpo\bos\bse\be(\b()\b) *\b**\b**\b**\b**\b*\n+GTSAM_EXPORT Matrix3 gtsam::so3:: ( const Matrix3 &\u00a0 M\bM,\n+compose\n+ const _\bS_\bO_\b3 &\u00a0 R\bR,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 9, 9 >\u00a0 H\bH = boost::none\u00a0\n+ )\n+Compose general matrix with an SO(3) element.\n+We only provide the 9*9 derivative in the first argument M.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bi_\bm_\bp_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+ * _\bS_\bO_\b3_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00425.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00425.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00425 = [\n- [\"PinholeCameraCal3_S2\", \"a00425.html#a3a2e8c622e65623a6853c84073bdb4f2\", null]\n+ [\"compose\", \"a00425.html#a72fc8b10f24d82aa8a4c99f99403fe5e\", null],\n+ [\"Dcompose\", \"a00425.html#a7c7e26b6d07ec0f16363c196247b294d\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00428.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00428.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cyclic.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,35 @@\n \n \n \n \n \n
\n \n-
Pose3.cpp File Reference
\n+Namespaces
\n+
Cyclic.cpp File Reference
\n \n
\n \n-

3D Pose \n+

Cyclic group implementation. \n More...

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Pose3 &pose)
 
\n

Detailed Description

\n-

3D Pose

\n+

Cyclic group implementation.

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Pose3.cpp File Reference\n-3D Pose _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Cyclic.cpp File Reference\n+Cyclic group implementation. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bP_\bo_\bs_\be_\b3 &pose)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-3D Pose\n+Cyclic group implementation.\n+ Author\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bs_\be_\b3_\b._\bc_\bp_\bp\n+ * _\bC_\by_\bc_\bl_\bi_\bc_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00431.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00431.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CalibratedCamera.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point2.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,92 @@\n \n \n \n \n \n
\n \n-
CalibratedCamera.cpp File Reference
\n+Classes |\n+Namespaces |\n+Typedefs |\n+Functions
\n+
Point2.h File Reference
\n \n
\n \n-

Calibrated camera for which only pose is unknown. \n+

2D Point \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+

\n+Classes

struct  gtsam::Range< Point2, Point2 >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Typedefs

\n+typedef Vector2 gtsam::Point2
 As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2.
 
\n+using gtsam::Point2Pair = std::pair< Point2, Point2 >
 
\n+using gtsam::Point2Pairs = std::vector< Point2Pair >
 
\n+typedef std::vector< Point2, Eigen::aligned_allocator< Point2 > > gtsam::Point2Vector
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+ostream & gtsam::operator<< (ostream &os, const gtsam::Point2Pair &p)
 
\n+double gtsam::norm2 (const Point2 &p, OptionalJacobian< 1, 2 > H=boost::none)
 Distance of the point from the origin, with Jacobian.
 
\n+double gtsam::distance2 (const Point2 &p1, const Point2 &q, OptionalJacobian< 1, 2 > H1=boost::none, OptionalJacobian< 1, 2 > H2=boost::none)
 distance between two points
 
\n+Point2 gtsam::operator* (double s, const Point2 &p)
 multiply with scalar
 
\n+boost::optional< Point2gtsam::circleCircleIntersection (double R_d, double r_d, double tol)
 
\n+list< Point2gtsam::circleCircleIntersection (Point2 c1, Point2 c2, boost::optional< Point2 > fh)
 
\n+Point2Pair gtsam::means (const std::vector< Point2Pair > &abPointPairs)
 Calculate the two means of a set of Point2 pairs.
 
list< Point2gtsam::circleCircleIntersection (Point2 c1, double r1, Point2 c2, double r2, double tol=1e-9)
 Intersect 2 circles.
 
\n

Detailed Description

\n-

Calibrated camera for which only pose is unknown.

\n-
Date
Aug 17, 2009
\n+

2D Point

\n
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,70 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-CalibratedCamera.cpp File Reference\n-Calibrated camera for which only pose is unknown. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Point2.h File Reference\n+2D Point _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bo_\bi_\bn_\bt_\b2_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b2_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+ typedef Vector2\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt2\b2\n+ As of GTSAM 4, in order to make GTSAM more\n+\u00a0 lean, it is now possible to just typedef\n+ Point2 to Vector2.\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt2\b2P\bPa\bai\bir\br = std::pair< _\bP_\bo_\bi_\bn_\bt_\b2,\n+ _\bP_\bo_\bi_\bn_\bt_\b2 >\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt2\b2P\bPa\bai\bir\brs\bs = std::vector<\n+ Point2Pair >\n+\u00a0\n+typedef std::vector< _\bP_\bo_\bi_\bn_\bt_\b2, Eigen::\n+ aligned_allocator< _\bP_\bo_\bi_\bn_\bt_\b2 > >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt2\b2V\bVe\bec\bct\bto\bor\br\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const gtsam::\n+ Point2Pair &p)\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bm2\b2 (const _\bP_\bo_\bi_\bn_\bt_\b2 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1,\n+ 2 > H=boost::none)\n+\u00a0 Distance of the point from the origin, with\n+ Jacobian.\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bis\bst\bta\ban\bnc\bce\be2\b2 (const _\bP_\bo_\bi_\bn_\bt_\b2 &p1, const _\bP_\bo_\bi_\bn_\bt_\b2 &q,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 2 > H1=boost::none,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 2 > H2=boost::none)\n+\u00a0 distance between two points\n+\u00a0\n+ _\bP_\bo_\bi_\bn_\bt_\b2\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br*\b* (double s, const _\bP_\bo_\bi_\bn_\bt_\b2 &p)\n+\u00a0 multiply with scalar\n+\u00a0\n+boost::optional< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bci\bir\brc\bcl\ble\beC\bCi\bir\brc\bcl\ble\beI\bIn\bnt\bte\ber\brs\bse\bec\bct\bti\bio\bon\bn (double R_d, double\n+ r_d, double tol)\n+\u00a0\n+ list< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bci\bir\brc\bcl\ble\beC\bCi\bir\brc\bcl\ble\beI\bIn\bnt\bte\ber\brs\bse\bec\bct\bti\bio\bon\bn (_\bP_\bo_\bi_\bn_\bt_\b2 c1, _\bP_\bo_\bi_\bn_\bt_\b2\n+ c2, boost::optional< _\bP_\bo_\bi_\bn_\bt_\b2 > fh)\n+\u00a0\n+ Point2Pair\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bme\bea\ban\bns\bs (const std::vector< Point2Pair >\n+ &abPointPairs)\n+\u00a0 Calculate the two means of a set of Point2 pairs.\n+\u00a0\n+ list< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bi_\br_\bc_\bl_\be_\bC_\bi_\br_\bc_\bl_\be_\bI_\bn_\bt_\be_\br_\bs_\be_\bc_\bt_\bi_\bo_\bn (_\bP_\bo_\bi_\bn_\bt_\b2 c1, double\n+ r1, _\bP_\bo_\bi_\bn_\bt_\b2 c2, double r2, double tol=1e-9)\n+\u00a0 Intersect 2 circles.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Calibrated camera for which only pose is unknown.\n- Date\n- Aug 17, 2009\n+2D Point\n Author\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bc_\bp_\bp\n+ * _\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00434.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00434.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.h File Reference\n \n \n \n \n \n \n \n@@ -94,89 +94,51 @@\n \n \n \n \n \n
\n \n-
SO3.cpp File Reference
\n+Classes |\n+Namespaces
\n+
Cal3Unified.h File Reference
\n \n
\n \n-

3*3 matrix representation of SO(3) \n+

Unified Calibration Model, see Mei07icra for details. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Cal3Unified
 Calibration of a omni-directional camera with mirror + lens radial distortion. More...
 
struct  gtsam::traits< Cal3Unified >
 
struct  gtsam::traits< const Cal3Unified >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-GTSAM_EXPORT Matrix99 gtsam::so3::Dcompose (const SO3 &R)
 (constant) Jacobian of compose wrpt M
 
GTSAM_EXPORT Matrix3 gtsam::so3::compose (const Matrix3 &M, const SO3 &R, OptionalJacobian< 9, 9 > H=boost::none)
 Compose general matrix with an SO(3) element.
 
\n

Detailed Description

\n-

3*3 matrix representation of SO(3)

\n-
Author
Frank Dellaert
\n+

Unified Calibration Model, see Mei07icra for details.

\n+
Date
Mar 8, 2014
\n+
Author
Jing Dong
\n
\n-Luca Carlone
\n-
\n-Duy Nguyen Ta
\n-
Date
December 2014
\n-

Function Documentation

\n-\n-

◆ compose()

\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-
GTSAM_EXPORT Matrix3 gtsam::so3::compose (const Matrix3 & M,
const SO3R,
OptionalJacobian< 9, 9 > H = boost::none 
)
\n-
\n-\n-

Compose general matrix with an SO(3) element.

\n-

We only provide the 9*9 derivative in the first argument M.

\n-\n-
\n-
\n-
\n+Varun Agrawal \n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,41 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SO3.cpp File Reference\n-3*3 matrix representation of SO(3) _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Cal3Unified.h File Reference\n+Unified Calibration Model, see Mei07icra for details. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd\n+\u00a0 Calibration of a omni-directional camera with mirror + lens radial\n+ distortion. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-GTSAM_EXPORT Matrix99\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bso\bo3\b3:\b::\b:D\bDc\bco\bom\bmp\bpo\bos\bse\be (const _\bS_\bO_\b3 &R)\n-\u00a0 (constant) Jacobian of compose wrpt M\n-\u00a0\n- GTSAM_EXPORT Matrix3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bc_\bo_\bm_\bp_\bo_\bs_\be (const Matrix3 &M, const _\bS_\bO_\b3 &R,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 9, 9 > H=boost::none)\n-\u00a0 Compose general matrix with an SO(3) element.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-3*3 matrix representation of SO(3)\n- Author\n- Frank Dellaert\n- Luca Carlone\n- Duy Nguyen Ta\n+Unified Calibration Model, see Mei07icra for details.\n Date\n- December 2014\n-*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0c\bco\bom\bmp\bpo\bos\bse\be(\b()\b) *\b**\b**\b**\b**\b*\n-GTSAM_EXPORT Matrix3 gtsam::so3:: ( const Matrix3 &\u00a0 M\bM,\n-compose\n- const _\bS_\bO_\b3 &\u00a0 R\bR,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 9, 9 >\u00a0 H\bH = boost::none\u00a0\n- )\n-Compose general matrix with an SO(3) element.\n-We only provide the 9*9 derivative in the first argument M.\n+ Mar 8, 2014\n+ Author\n+ Jing Dong\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\b3_\b._\bc_\bp_\bp\n+ * _\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00434.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00434.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00434 = [\n- [\"compose\", \"a00434.html#a72fc8b10f24d82aa8a4c99f99403fe5e\", null],\n- [\"Dcompose\", \"a00434.html#a7c7e26b6d07ec0f16363c196247b294d\", null]\n+ [\"gtsam::traits< Cal3Unified >\", \"a03012.html\", null],\n+ [\"gtsam::traits< const Cal3Unified >\", \"a03016.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00437.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00437.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cyclic.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Line3.h File Reference\n \n \n \n \n \n \n \n@@ -94,35 +94,57 @@\n \n \n \n \n \n
\n \n-
Cyclic.cpp File Reference
\n+Classes |\n+Namespaces |\n+Functions
\n+
Line3.h File Reference
\n \n
\n \n-

Cyclic group implementation. \n+

4 dimensional manifold of 3D lines \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Line3
 A 3D line (R,a,b) : (Rot3,Scalar,Scalar) More...
 
struct  gtsam::traits< Line3 >
 
struct  gtsam::traits< const Line3 >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Functions

Line3 gtsam::transformTo (const Pose3 &wTc, const Line3 &wL, OptionalJacobian< 4, 6 > Dpose=boost::none, OptionalJacobian< 4, 4 > Dline=boost::none)
 Transform a line from world to camera frame.
 
\n

Detailed Description

\n-

Cyclic group implementation.

\n-
Author
Frank Dellaert
\n+

4 dimensional manifold of 3D lines

\n+
Author
Akshay Krishnan
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Cyclic.cpp File Reference\n-Cyclic group implementation. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Line3.h File Reference\n+4 dimensional manifold of 3D lines _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3\n+\u00a0 A 3D line (R,a,b) : (_\bR_\bo_\bt_\b3,Scalar,Scalar) _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bL_\bi_\bn_\be_\b3_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bL_\bi_\bn_\be_\b3_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+_\bL_\bi_\bn_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo (const _\bP_\bo_\bs_\be_\b3 &wTc, const _\bL_\bi_\bn_\be_\b3 &wL, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<\n+ 4, 6 > Dpose=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 4, 4 > Dline=boost::none)\n+\u00a0 Transform a line from world to camera frame.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Cyclic group implementation.\n+4 dimensional manifold of 3D lines\n Author\n+ Akshay Krishnan\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\by_\bc_\bl_\bi_\bc_\b._\bc_\bp_\bp\n+ * _\bL_\bi_\bn_\be_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00440.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00440.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,39 +94,38 @@\n \n \n \n \n \n
\n \n-
StereoPoint2.cpp File Reference
\n+Namespaces
\n+
SOn.cpp File Reference
\n \n
\n+\n+

Definitions of dynamic specializations of SO(n) \n+More...

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Functions

\n-ostream & gtsam::operator<< (ostream &os, const StereoPoint2 &p)
 
\n

Detailed Description

\n-
Date
Jan 26, 2010
\n-
Author
dellaert
\n+

Definitions of dynamic specializations of SO(n)

\n+
Author
Frank Dellaert
\n+
\n+Varun Agrawal
\n+
Date
March 2019
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-StereoPoint2.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SOn.cpp File Reference\n+Definitions of dynamic specializations of SO(n) _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 &p)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Jan 26, 2010\n+Definitions of dynamic specializations of SO(n)\n Author\n- dellaert\n+ Frank Dellaert\n+ Varun Agrawal\n+ Date\n+ March 2019\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bc_\bp_\bp\n+ * _\bS_\bO_\bn_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00449.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00449.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn-inl.h File Reference\n \n \n \n \n \n \n \n@@ -94,53 +94,38 @@\n \n \n \n \n \n
\n \n-
Rot3.cpp File Reference
\n+Namespaces
\n+
SOn-inl.h File Reference
\n \n
\n \n-

Rotation, common code between Rotation matrix and Quaternion. \n+

Template implementations for SO(n) \n More...

\n+\n+

Go to the source code of this file.

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n

\n-Functions

pair< Matrix3, Vector3 > gtsam::RQ (const Matrix3 &A, OptionalJacobian< 3, 9 > H=boost::none)
 [RQ] receives a 3 by 3 matrix and returns an upper triangular matrix R and 3 rotation angles corresponding to the rotation matrix Q=Qz'*Qy'*Qx' such that A = R*Q = R*Qz'*Qy'*Qx'.
 
\n-ostream & gtsam::operator<< (ostream &os, const Rot3 &R)
 
\n

Detailed Description

\n-

Rotation, common code between Rotation matrix and Quaternion.

\n-
Author
Alireza Fathi
\n-
\n-Christian Potthast
\n-
\n-Frank Dellaert
\n-
\n-Richard Roberts
\n-
\n-Varun Agrawal
\n+

Template implementations for SO(n)

\n+
Author
Frank Dellaert
\n+
Date
March 2019
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Rot3.cpp File Reference\n-Rotation, common code between Rotation matrix and Quaternion. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SOn-inl.h File Reference\n+Template implementations for SO(n) _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-pair< Matrix3, Vector3 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bQ (const Matrix3 &A, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 9 >\n- H=boost::none)\n- [RQ] receives a 3 by 3 matrix and returns an upper\n-\u00a0 triangular matrix R and 3 rotation angles\n- corresponding to the rotation matrix Q=Qz'*Qy'*Qx'\n- such that A = R*Q = R*Qz'*Qy'*Qx'.\n-\u00a0\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bR_\bo_\bt_\b3 &R)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Rotation, common code between Rotation matrix and Quaternion.\n+Template implementations for SO(n)\n Author\n- Alireza Fathi\n- Christian Potthast\n Frank Dellaert\n- Richard Roberts\n- Varun Agrawal\n+ Date\n+ March 2019\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bR_\bo_\bt_\b3_\b._\bc_\bp_\bp\n+ * _\bS_\bO_\bn_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00452_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00452_source.html", "unified_diff": "@@ -114,25 +114,25 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
21#pragma once
\n
22
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n-\n+\n
34#include <gtsam/slam/TriangulationFactor.h>
\n
35
\n
36namespace gtsam {
\n
37
\n
\n
39class GTSAM_EXPORT TriangulationUnderconstrainedException: public std::runtime_error {
\n
40public:
\n@@ -696,24 +696,24 @@\n
740using CameraSetCal3_S2 = CameraSet<PinholeCamera<Cal3_S2>>;
\n
741using CameraSetCal3DS2 = CameraSet<PinholeCamera<Cal3DS2>>;
\n
742using CameraSetCal3Fisheye = CameraSet<PinholeCamera<Cal3Fisheye>>;
\n
743using CameraSetCal3Unified = CameraSet<PinholeCamera<Cal3Unified>>;
\n
744using CameraSetSpherical = CameraSet<SphericalCamera>;
\n
745} // \\namespace gtsam
\n
746
\n-
2D Pose
\n-
Calibration of a fisheye camera.
\n-
The most common 5DOF 3D->2D calibration.
\n-
Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.
\n-
Unified Calibration Model, see Mei07icra for details.
\n-
Base class to create smart factors on poses or cameras.
\n-
Calibrated camera with spherical projection.
\n-
Base class for all pinhole cameras.
\n-
Calibration used by Bundler.
\n-
Factor Graph consisting of non-linear factors.
\n+
2D Pose
\n+
Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.
\n+
Base class to create smart factors on poses or cameras.
\n+
Calibration used by Bundler.
\n+
Base class for all pinhole cameras.
\n+
The most common 5DOF 3D->2D calibration.
\n+
Calibrated camera with spherical projection.
\n+
Unified Calibration Model, see Mei07icra for details.
\n+
Calibration of a fisheye camera.
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Point3Vector calibrateMeasurementsShared(const CALIBRATION &cal, const Point2Vector &measurements)
Convert pixel measurements in image to homogeneous measurements in the image plane using shared camer...
Definition triangulation.h:357
\n
Point3 triangulateLOST(const std::vector< Pose3 > &poses, const Point3Vector &calibratedMeasurements, const SharedIsotropic &measurementNoise)
Triangulation using the LOST (Linear Optimal Sine Triangulation) algorithm proposed in https://arxiv....
Definition triangulation.cpp:92
\n
Point2Vector undistortMeasurements(const CALIBRATION &cal, const Point2Vector &measurements)
Remove distortion for measurements so as if the measurements came from a pinhole camera.
Definition triangulation.h:282
\n
Cal3_S2 createPinholeCalibration(const CALIBRATION &cal)
Create a pinhole calibration from a different Cal3 object, removing distortion.
Definition triangulation.h:253
\n
MEASUREMENT undistortMeasurementInternal(const CALIBRATION &cal, const MEASUREMENT &measurement, boost::optional< Cal3_S2 > pinholeCal=boost::none)
Internal undistortMeasurement to be used by undistortMeasurement and undistortMeasurements.
Definition triangulation.h:261
\n
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -571,31 +571,31 @@\n 742using CameraSetCal3Fisheye = CameraSet>;\n 743using CameraSetCal3Unified = CameraSet>;\n 744using CameraSetSpherical = CameraSet;\n 745} // \\namespace gtsam\n 746\n _\bP_\bo_\bs_\be_\b2_\b._\bh\n 2D Pose\n-_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n-Calibration of a fisheye camera.\n-_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n-The most common 5DOF 3D->2D calibration.\n _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bh\n Calibration of a camera with radial distortion, calculations in base class\n Cal3DS2_Base.\n-_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b._\bh\n-Unified Calibration Model, see Mei07icra for details.\n _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n Base class to create smart factors on poses or cameras.\n-_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n-Calibrated camera with spherical projection.\n-_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n-Base class for all pinhole cameras.\n _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n Calibration used by Bundler.\n+_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+Base class for all pinhole cameras.\n+_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n+The most common 5DOF 3D->2D calibration.\n+_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+Calibrated camera with spherical projection.\n+_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b._\bh\n+Unified Calibration Model, see Mei07icra for details.\n+_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n+Calibration of a fisheye camera.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\bS_\bh_\ba_\br_\be_\bd\n Point3Vector calibrateMeasurementsShared(const CALIBRATION &cal, const\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00455.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00455.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h File Reference\n \n \n \n \n \n \n \n@@ -95,70 +95,50 @@\n
\n \n \n \n
\n \n-
SO4.h File Reference
\n+Namespaces
\n+
Similarity2.h File Reference
\n \n
\n \n-

4*4 matrix representation of SO(4) \n+

Implementation of Similarity2 transform. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n \n-\n+\n+\n+\n+\n+\n+\n \n

\n Classes

struct  gtsam::traits< SO4 >
class  gtsam::Similarity2
 2D similarity transform More...
 
struct  gtsam::traits< const SO4 >
struct  gtsam::Similarity2::ChartAtOrigin
 Chart at the origin. More...
 
struct  gtsam::traits< Similarity2 >
 
struct  gtsam::traits< const Similarity2 >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::SO4 = SO< 4 >
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

GTSAM_EXPORT Matrix3 gtsam::topLeft (const SO4 &Q, OptionalJacobian< 9, 6 > H=boost::none)
 Project to top-left 3*3 matrix.
 
\n-GTSAM_EXPORT Matrix43 gtsam::stiefel (const SO4 &Q, OptionalJacobian< 12, 6 > H=boost::none)
 Project to Stiefel manifold of 4*3 orthonormal 3-frames in R^4, i.e., pi(Q) -> \\( S \\in St(3,4) \\).
 
\n-template<class Archive >
void gtsam::serialize (Archive &ar, SO4 &Q, const unsigned int)
 Serialization function.
 
\n

Detailed Description

\n-

4*4 matrix representation of SO(4)

\n-
Author
Frank Dellaert
\n-
\n-Luca Carlone
\n-
Date
March 2019
\n+

Implementation of Similarity2 transform.

\n+
Author
John Lambert, Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,47 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SO4.h File Reference\n-4*4 matrix representation of SO(4) _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Similarity2.h File Reference\n+Implementation of Similarity2 transform. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bO_\b4_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2\n+\u00a0 2D similarity transform _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bO_\b4_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+\u00a0 Chart at the origin. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSO\bO4\b4 = _\bS_\bO< 4 >\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- GTSAM_EXPORT Matrix3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\bo_\bp_\bL_\be_\bf_\bt (const _\bS_\bO_\b4 &Q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 9, 6 >\n- H=boost::none)\n-\u00a0 Project to top-left 3*3 matrix.\n-\u00a0\n-GTSAM_EXPORT Matrix43\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bti\bie\bef\bfe\bel\bl (const _\bS_\bO_\b4 &Q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 12, 6 >\n- H=boost::none)\n-\u00a0 Project to Stiefel manifold of 4*3 orthonormal 3-frames\n- in R^4, i.e., pi(Q) -> \\( S \\in St(3,4) \\).\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (Archive &ar, _\bS_\bO_\b4 &Q, const unsigned\n- int)\n-\u00a0 Serialization function.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-4*4 matrix representation of SO(4)\n+Implementation of Similarity2 transform.\n Author\n- Frank Dellaert\n- Luca Carlone\n- Date\n- March 2019\n+ John Lambert, Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\b4_\b._\bh\n+ * _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00455.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00455.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,7 +1,6 @@\n var a00455 = [\n- [\"gtsam::traits< SO4 >\", \"a03296.html\", null],\n- [\"gtsam::traits< const SO4 >\", \"a03300.html\", null],\n- [\"serialize\", \"a00455.html#a76855a1214bf05a8704ee3deaece6339\", null],\n- [\"stiefel\", \"a00455.html#a3e57e4771f13855a495ec2c6454c9121\", null],\n- [\"topLeft\", \"a00455.html#a8d21728e3da4cf1a96e1b6f87a97da47\", null]\n+ [\"gtsam::Similarity2\", \"a03248.html\", \"a03248\"],\n+ [\"gtsam::Similarity2::ChartAtOrigin\", \"a03252.html\", null],\n+ [\"gtsam::traits< Similarity2 >\", \"a03256.html\", null],\n+ [\"gtsam::traits< const Similarity2 >\", \"a03260.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00455_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00455_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h Source File\n \n \n \n \n \n \n \n@@ -98,141 +98,167 @@\n
No Matches
\n \n \n \n \n \n
\n-
SO4.h
\n+
Similarity2.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <gtsam/geometry/SOn.h>
\n-
23
\n-
24#include <gtsam/base/Group.h>
\n-
25#include <gtsam/base/Lie.h>
\n-
26#include <gtsam/base/Manifold.h>
\n-
27#include <gtsam/base/Matrix.h>
\n-
28#include <gtsam/dllexport.h>
\n-
29
\n-
30#include <string>
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Lie.h>
\n+
21#include <gtsam/base/Manifold.h>
\n+
22#include <gtsam/dllexport.h>
\n+\n+\n+
25#include <gtsam/geometry/Rot2.h>
\n+
26
\n+
27namespace gtsam {
\n+
28
\n+
29// Forward declarations
\n+
30class Pose2;
\n
31
\n-
32namespace gtsam {
\n-
33
\n-
34using SO4 = SO<4>;
\n-
35
\n-
36// /// Random SO(4) element (no big claims about uniformity)
\n-
37// static SO4 Random(std::mt19937 &rng);
\n-
38
\n-
39// Below are all declarations of SO<4> specializations.
\n-
40// They are *defined* in SO4.cpp.
\n+
\n+
35class GTSAM_EXPORT Similarity2 : public LieGroup<Similarity2, 4> {
\n+
38 typedef Rot2 Rotation;
\n+
39 typedef Point2 Translation;
\n
41
\n-
42template <>
\n-
43GTSAM_EXPORT
\n-
44Matrix4 SO4::Hat(const TangentVector &xi);
\n-
45
\n-
46template <>
\n-
47GTSAM_EXPORT
\n-
48Vector6 SO4::Vee(const Matrix4 &X);
\n-
49
\n-
50template <>
\n-
51GTSAM_EXPORT
\n-
52SO4 SO4::Expmap(const Vector6 &xi, ChartJacobian H);
\n+
42 private:
\n+
43 Rot2 R_;
\n+
44 Point2 t_;
\n+
45 double s_;
\n+
46
\n+
47 public:
\n+
50
\n+\n
53
\n-
54template <>
\n-
55GTSAM_EXPORT
\n-
56Matrix6 SO4::AdjointMap() const;
\n-
57
\n-
58template <>
\n-
59GTSAM_EXPORT
\n-
60SO4::VectorN2 SO4::vec(OptionalJacobian<16, 6> H) const;
\n-
61
\n-
62template <>
\n-
63GTSAM_EXPORT
\n-
64SO4 SO4::ChartAtOrigin::Retract(const Vector6 &omega, ChartJacobian H);
\n+
55 Similarity2(double s);
\n+
56
\n+
58 Similarity2(const Rot2& R, const Point2& t, double s);
\n+
59
\n+
61 Similarity2(const Matrix2& R, const Vector2& t, double s);
\n+
62
\n+
64 Similarity2(const Matrix3& T);
\n
65
\n-
66template <>
\n-
67GTSAM_EXPORT
\n-
68Vector6 SO4::ChartAtOrigin::Local(const SO4 &Q, ChartJacobian H);
\n
69
\n-
73GTSAM_EXPORT Matrix3 topLeft(const SO4 &Q, OptionalJacobian<9, 6> H = boost::none);
\n-
74
\n-
79GTSAM_EXPORT Matrix43 stiefel(const SO4 &Q, OptionalJacobian<12, 6> H = boost::none);
\n+
71 bool equals(const Similarity2& sim, double tol) const;
\n+
72
\n+
74 bool operator==(const Similarity2& other) const;
\n+
75
\n+
77 void print(const std::string& s) const;
\n+
78
\n+
79 friend std::ostream& operator<<(std::ostream& os, const Similarity2& p);
\n
80
\n-
82template <class Archive>
\n-
\n-
83void serialize(Archive &ar, SO4 &Q, const unsigned int /*version*/) {
\n-
84 Matrix4 &M = Q.matrix_;
\n-
85 ar &boost::serialization::make_nvp("Q11", M(0, 0));
\n-
86 ar &boost::serialization::make_nvp("Q12", M(0, 1));
\n-
87 ar &boost::serialization::make_nvp("Q13", M(0, 2));
\n-
88 ar &boost::serialization::make_nvp("Q14", M(0, 3));
\n-
89
\n-
90 ar &boost::serialization::make_nvp("Q21", M(1, 0));
\n-
91 ar &boost::serialization::make_nvp("Q22", M(1, 1));
\n-
92 ar &boost::serialization::make_nvp("Q23", M(1, 2));
\n-
93 ar &boost::serialization::make_nvp("Q24", M(1, 3));
\n-
94
\n-
95 ar &boost::serialization::make_nvp("Q31", M(2, 0));
\n-
96 ar &boost::serialization::make_nvp("Q32", M(2, 1));
\n-
97 ar &boost::serialization::make_nvp("Q33", M(2, 2));
\n-
98 ar &boost::serialization::make_nvp("Q34", M(2, 3));
\n-
99
\n-
100 ar &boost::serialization::make_nvp("Q41", M(3, 0));
\n-
101 ar &boost::serialization::make_nvp("Q42", M(3, 1));
\n-
102 ar &boost::serialization::make_nvp("Q43", M(3, 2));
\n-
103 ar &boost::serialization::make_nvp("Q44", M(3, 3));
\n-
104}
\n-
\n-
105
\n-
106/*
\n-
107 * Define the traits. internal::LieGroup provides both Lie group and Testable
\n-
108 */
\n-
109
\n-
110template <>
\n-
111struct traits<SO4> : public internal::LieGroup<SO4> {};
\n-
112
\n-
113template <>
\n-
114struct traits<const SO4> : public internal::LieGroup<SO4> {};
\n-
115
\n-
116} // end namespace gtsam
\n-
Base class and basic functions for Manifold types.
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Concept check class for variable types with Group properties.
\n-
Base class and basic functions for Lie types.
\n-
N*N matrix representation of SO(N).
\n+
84
\n+
86 static Similarity2 Identity();
\n+
87
\n+
89 Similarity2 operator*(const Similarity2& S) const;
\n+
90
\n+
92 Similarity2 inverse() const;
\n+
93
\n+
97
\n+
99 Point2 transformFrom(const Point2& p) const;
\n+
100
\n+
112 Pose2 transformFrom(const Pose2& T) const;
\n+
113
\n+
114 /* syntactic sugar for transformFrom */
\n+
115 Point2 operator*(const Point2& p) const;
\n+
116
\n+
120 static Similarity2 Align(const Point2Pairs& abPointPairs);
\n+
121
\n+
135 static Similarity2 Align(const Pose2Pairs& abPosePairs);
\n+
136
\n+
140
\n+
145 static Vector4 Logmap(const Similarity2& S, //
\n+
146 OptionalJacobian<4, 4> Hm = boost::none);
\n+
147
\n+
149 static Similarity2 Expmap(const Vector4& v, //
\n+
150 OptionalJacobian<4, 4> Hm = boost::none);
\n+
151
\n+
\n+\n+
154 static Similarity2 Retract(const Vector4& v,
\n+
155 ChartJacobian H = boost::none) {
\n+
156 return Similarity2::Expmap(v, H);
\n+
157 }
\n+
158 static Vector4 Local(const Similarity2& other,
\n+
159 ChartJacobian H = boost::none) {
\n+
160 return Similarity2::Logmap(other, H);
\n+
161 }
\n+
162 };
\n+
\n+
163
\n+
165 Matrix4 AdjointMap() const;
\n+
166
\n+
167 using LieGroup<Similarity2, 4>::inverse;
\n+
168
\n+
172
\n+
174 Matrix3 matrix() const;
\n+
175
\n+
177 Rot2 rotation() const { return R_; }
\n+
178
\n+
180 Point2 translation() const { return t_; }
\n+
181
\n+
183 double scale() const { return s_; }
\n+
184
\n+
186 inline static size_t Dim() { return 4; }
\n+
187
\n+
189 inline size_t dim() const { return 4; }
\n+
190
\n+
192};
\n+
\n+
193
\n+
194template <>
\n+
195struct traits<Similarity2> : public internal::LieGroup<Similarity2> {};
\n+
196
\n+
197template <>
\n+
198struct traits<const Similarity2> : public internal::LieGroup<Similarity2> {};
\n+
199
\n+
200} // namespace gtsam
\n+
Base class and basic functions for Lie types.
\n+
Base class and basic functions for Manifold types.
\n+
2D Pose
\n+
2D rotation
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::string serialize(const T &input)
serializes to a string
Definition serialization.h:113
\n-
GTSAM_EXPORT Matrix43 stiefel(const SO4 &Q, OptionalJacobian< 12, 6 > H)
Project to Stiefel manifold of 4*3 orthonormal 3-frames in R^4, i.e., pi(Q) -> .
Definition SO4.cpp:220
\n-
GTSAM_EXPORT Matrix3 topLeft(const SO4 &Q, OptionalJacobian< 9, 6 > H)
Project to top-left 3*3 matrix.
Definition SO4.cpp:206
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n+
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition Matrix.h:100
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
static SO< N > Retract(const TangentVector &v)
Retract at origin: possible in Lie group because it has an identity.
Definition Lie.h:111
\n+
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n-
Manifold of special orthogonal rotation matrices SO<N>.
Definition SOn.h:52
\n-
static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates.
Definition SOn-inl.h:67
\n-
VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::none) const
Return vectorized rotation matrix in column order.
Definition SOn-inl.h:88
\n-
static TangentVector Vee(const MatrixNN &X)
Inverse of Hat. See note about xi element order in Hat.
Definition SOn-inl.h:35
\n-
MatrixDD AdjointMap() const
Adjoint map.
Definition SO4.cpp:159
\n-
static MatrixNN Hat(const TangentVector &xi)
Hat operator creates Lie algebra element corresponding to d-vector, where d is the dimensionality of ...
Definition SOn-inl.h:29
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n+
Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.
Definition Rot2.h:36
\n+
2D similarity transform
Definition Similarity2.h:35
\n+
Point2 translation() const
Return a GTSAM translation.
Definition Similarity2.h:180
\n+
double scale() const
Return the scale.
Definition Similarity2.h:183
\n+
static size_t Dim()
Dimensionality of tangent space = 4 DOF - used to autodetect sizes.
Definition Similarity2.h:186
\n+
Rot2 rotation() const
Return a GTSAM rotation.
Definition Similarity2.h:177
\n+
size_t dim() const
Dimensionality of tangent space = 4 DOF.
Definition Similarity2.h:189
\n+
Chart at the origin.
Definition Similarity2.h:153
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,178 +1,212 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SO4.h\n+Similarity2.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\bn_\b._\bh>\n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bG_\br_\bo_\bu_\bp_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-28#include \n-29\n-30#include \n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+22#include \n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b2_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n+28\n+29// Forward declarations\n+30class Pose2;\n 31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-34using SO4 = SO<4>;\n-35\n-36// /// Random SO(4) element (no big claims about uniformity)\n-37// static SO4 Random(std::mt19937 &rng);\n-38\n-39// Below are all declarations of SO<4> specializations.\n-40// They are *defined* in SO4.cpp.\n+_\b3_\b5class GTSAM_EXPORT _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 : public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n+38 typedef _\bR_\bo_\bt_\b2 _\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn;\n+39 typedef _\bP_\bo_\bi_\bn_\bt_\b2 Translation;\n 41\n-42template <>\n-43GTSAM_EXPORT\n-44Matrix4 _\bS_\bO_\b4_\b:_\b:_\bH_\ba_\bt(const TangentVector &xi);\n-45\n-46template <>\n-47GTSAM_EXPORT\n-48Vector6 _\bS_\bO_\b4_\b:_\b:_\bV_\be_\be(const Matrix4 &X);\n-49\n-50template <>\n-51GTSAM_EXPORT\n-52SO4 _\bS_\bO_\b4_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(const Vector6 &xi, ChartJacobian H);\n+42 private:\n+43 _\bR_\bo_\bt_\b2 R_;\n+44 _\bP_\bo_\bi_\bn_\bt_\b2 t_;\n+45 double s_;\n+46\n+47 public:\n+50\n+52 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2();\n 53\n-54template <>\n-55GTSAM_EXPORT\n-56Matrix6 _\bS_\bO_\b4_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const;\n-57\n-58template <>\n-59GTSAM_EXPORT\n-60SO4::VectorN2 _\bS_\bO_\b4_\b:_\b:_\bv_\be_\bc(OptionalJacobian<16, 6> H) const;\n-61\n-62template <>\n-63GTSAM_EXPORT\n-64SO4 _\bS_\bO_\b4_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(const Vector6 &omega, ChartJacobian H);\n+55 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2(double s);\n+56\n+58 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2(const _\bR_\bo_\bt_\b2& R, const _\bP_\bo_\bi_\bn_\bt_\b2& t, double s);\n+59\n+61 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2(const Matrix2& R, const Vector2& t, double s);\n+62\n+64 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2(const Matrix3& T);\n 65\n-66template <>\n-67GTSAM_EXPORT\n-68Vector6 SO4::ChartAtOrigin::Local(const SO4 &Q, ChartJacobian H);\n 69\n-73GTSAM_EXPORT Matrix3 _\bt_\bo_\bp_\bL_\be_\bf_\bt(const SO4 &Q, OptionalJacobian<9, 6> H = boost::\n-none);\n-74\n-79GTSAM_EXPORT Matrix43 _\bs_\bt_\bi_\be_\bf_\be_\bl(const SO4 &Q, OptionalJacobian<12, 6> H =\n-boost::none);\n+71 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& sim, double tol) const;\n+72\n+74 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& other) const;\n+75\n+77 void _\bp_\br_\bi_\bn_\bt(const std::string& s) const;\n+78\n+79 friend std::ostream& operator<<(std::ostream& os, const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& p);\n 80\n-82template \n-_\b8_\b3void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(Archive &ar, _\bS_\bO_\b4 &Q, const unsigned int /*version*/) {\n-84 Matrix4 &M = Q.matrix_;\n-85 ar &boost::serialization::make_nvp(\"Q11\", M(0, 0));\n-86 ar &boost::serialization::make_nvp(\"Q12\", M(0, 1));\n-87 ar &boost::serialization::make_nvp(\"Q13\", M(0, 2));\n-88 ar &boost::serialization::make_nvp(\"Q14\", M(0, 3));\n-89\n-90 ar &boost::serialization::make_nvp(\"Q21\", M(1, 0));\n-91 ar &boost::serialization::make_nvp(\"Q22\", M(1, 1));\n-92 ar &boost::serialization::make_nvp(\"Q23\", M(1, 2));\n-93 ar &boost::serialization::make_nvp(\"Q24\", M(1, 3));\n-94\n-95 ar &boost::serialization::make_nvp(\"Q31\", M(2, 0));\n-96 ar &boost::serialization::make_nvp(\"Q32\", M(2, 1));\n-97 ar &boost::serialization::make_nvp(\"Q33\", M(2, 2));\n-98 ar &boost::serialization::make_nvp(\"Q34\", M(2, 3));\n-99\n-100 ar &boost::serialization::make_nvp(\"Q41\", M(3, 0));\n-101 ar &boost::serialization::make_nvp(\"Q42\", M(3, 1));\n-102 ar &boost::serialization::make_nvp(\"Q43\", M(3, 2));\n-103 ar &boost::serialization::make_nvp(\"Q44\", M(3, 3));\n-104}\n-105\n-106/*\n-107 * Define the traits. internal::LieGroup provides both Lie group and\n-Testable\n-108 */\n-109\n-110template <>\n-_\b1_\b1_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bO_\b4> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-112\n-113template <>\n-_\b1_\b1_\b4struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-115\n-116} // end namespace gtsam\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bG_\br_\bo_\bu_\bp_\b._\bh\n-Concept check class for variable types with Group properties.\n+84\n+86 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Identity();\n+87\n+89 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& S) const;\n+90\n+92 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 inverse() const;\n+93\n+97\n+99 _\bP_\bo_\bi_\bn_\bt_\b2 transformFrom(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n+100\n+112 _\bP_\bo_\bs_\be_\b2 transformFrom(const _\bP_\bo_\bs_\be_\b2& T) const;\n+113\n+114 /* syntactic sugar for transformFrom */\n+115 _\bP_\bo_\bi_\bn_\bt_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n+116\n+120 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Align(const Point2Pairs& abPointPairs);\n+121\n+135 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Align(const Pose2Pairs& abPosePairs);\n+136\n+140\n+145 static Vector4 Logmap(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& S, //\n+146 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Hm = boost::none);\n+147\n+149 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Expmap(const Vector4& v, //\n+150 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Hm = boost::none);\n+151\n+_\b1_\b5_\b3 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n+154 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Retract(const Vector4& v,\n+155 ChartJacobian H = boost::none) {\n+156 return Similarity2::Expmap(v, H);\n+157 }\n+158 static Vector4 Local(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& other,\n+159 ChartJacobian H = boost::none) {\n+160 return Similarity2::Logmap(other, H);\n+161 }\n+162 };\n+163\n+165 Matrix4 AdjointMap() const;\n+166\n+167 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2, 4>::inverse;\n+168\n+172\n+174 Matrix3 matrix() const;\n+175\n+_\b1_\b7_\b7 _\bR_\bo_\bt_\b2 _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn() const { return R_; }\n+178\n+_\b1_\b8_\b0 _\bP_\bo_\bi_\bn_\bt_\b2 _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn() const { return t_; }\n+181\n+_\b1_\b8_\b3 double _\bs_\bc_\ba_\bl_\be() const { return s_; }\n+184\n+_\b1_\b8_\b6 inline static size_t _\bD_\bi_\bm() { return 4; }\n+187\n+_\b1_\b8_\b9 inline size_t _\bd_\bi_\bm() const { return 4; }\n+190\n+192};\n+193\n+194template <>\n+_\b1_\b9_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+196\n+197template <>\n+_\b1_\b9_\b8struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+{};\n+199\n+200} // namespace gtsam\n _\bL_\bi_\be_\b._\bh\n Base class and basic functions for Lie types.\n-_\bS_\bO_\bn_\b._\bh\n-N*N matrix representation of SO(N).\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bP_\bo_\bs_\be_\b2_\b._\bh\n+2D Pose\n+_\bR_\bo_\bt_\b2_\b._\bh\n+2D rotation\n+_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n-std::string serialize(const T &input)\n-serializes to a string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\bi_\be_\bf_\be_\bl\n-GTSAM_EXPORT Matrix43 stiefel(const SO4 &Q, OptionalJacobian< 12, 6 > H)\n-Project to Stiefel manifold of 4*3 orthonormal 3-frames in R^4, i.e., pi(Q) -\n-> .\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO4.cpp:220\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\bo_\bp_\bL_\be_\bf_\bt\n-GTSAM_EXPORT Matrix3 topLeft(const SO4 &Q, OptionalJacobian< 9, 6 > H)\n-Project to top-left 3*3 matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO4.cpp:206\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point2 operator*(double s, const Point2 &p)\n+multiply with scalar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(const Matrix &A, const Matrix &B)\n+equality is just equal_with_abs_tol 1e-9\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bS_\bO_\b<_\b _\bN_\b _\b>_\b,_\b _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bS_\bO_\b(_\bN_\b)_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n-static SO< N > Retract(const TangentVector &v)\n-Retract at origin: possible in Lie group because it has an identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+A CRTP helper class that implements Lie group methods Prerequisites: methods\n+operator*,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n Both LieGroupTraits and Testable.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO\n-Manifold of special orthogonal rotation matrices SO.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n-static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)\n-Exponential map at identity - create a rotation from canonical coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bv_\be_\bc\n-VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::\n-none) const\n-Return vectorized rotation matrix in column order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bV_\be_\be\n-static TangentVector Vee(const MatrixNN &X)\n-Inverse of Hat. See note about xi element order in Hat.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n-MatrixDD AdjointMap() const\n-Adjoint map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO4.cpp:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bH_\ba_\bt\n-static MatrixNN Hat(const TangentVector &xi)\n-Hat operator creates Lie algebra element corresponding to d-vector, where d is\n-the dimensionality of ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+A 2D pose (Point2,Rot2)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2\n+Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2\n+2D similarity transform\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n+Point2 translation() const\n+Return a GTSAM translation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bs_\bc_\ba_\bl_\be\n+double scale() const\n+Return the scale.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:183\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+Dimensionality of tangent space = 4 DOF - used to autodetect sizes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+Rot2 rotation() const\n+Return a GTSAM rotation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+Dimensionality of tangent space = 4 DOF.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+Chart at the origin.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:153\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\b4_\b._\bh\n+ * _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00458.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00458.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeCamera.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Quaternion.h File Reference\n \n \n \n \n \n \n \n@@ -95,50 +95,56 @@\n \n \n \n \n
\n \n-
PinholeCamera.h File Reference
\n+Namespaces |\n+Macros |\n+Typedefs
\n+
Quaternion.h File Reference
\n \n
\n \n-

Base class for all pinhole cameras. \n+

Lie Group wrapper for Eigen Quaternions. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n-\n-\n-\n+\n \n

\n Classes

class  gtsam::PinholeCamera< Calibration >
 A pinhole camera class that has a Pose3 and a Calibration. More...
 
struct  gtsam::traits< PinholeCamera< Calibration > >
 
struct  gtsam::traits< const PinholeCamera< Calibration > >
 
struct  gtsam::Range< PinholeCamera< Calibration >, T >
struct  gtsam::traits< QUATERNION_TYPE >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Macros

\n+#define QUATERNION_TYPE   Eigen::Quaternion<_Scalar,_Options>
 
\n+\n+\n+\n

\n+Typedefs

\n+typedef Eigen::Quaternion< double, Eigen::DontAlign > gtsam::Quaternion
 
\n

Detailed Description

\n-

Base class for all pinhole cameras.

\n-
Author
Yong-Dian Jian
\n-
Date
Jan 27, 2012
\n+

Lie Group wrapper for Eigen Quaternions.

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-PinholeCamera.h File Reference\n-Base class for all pinhole cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+Quaternion.h File Reference\n+Lie Group wrapper for Eigen Quaternions. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b _\b>\n-\u00a0 A pinhole camera class that has a _\bP_\bo_\bs_\be_\b3 and a Calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b _\b>_\b,_\b _\bT_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bQ_\bU_\bA_\bT_\bE_\bR_\bN_\bI_\bO_\bN_\b__\bT_\bY_\bP_\bE_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 Q\bQU\bUA\bAT\bTE\bER\bRN\bNI\bIO\bON\bN_\b_T\bTY\bYP\bPE\bE\u00a0\u00a0\u00a0Eigen::Quaternion<_Scalar,_Options>\n+\u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef Eigen::Quaternion< double, Eigen::DontAlign >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:Q\bQu\bua\bat\bte\ber\brn\bni\bio\bon\bn\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Base class for all pinhole cameras.\n+Lie Group wrapper for Eigen Quaternions.\n Author\n- Yong-Dian Jian\n- Date\n- Jan 27, 2012\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+ * _\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00458.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00458.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a00458 = [\n- [\"gtsam::traits< PinholeCamera< Calibration > >\", \"a03108.html\", null],\n- [\"gtsam::traits< const PinholeCamera< Calibration > >\", \"a03112.html\", null],\n- [\"gtsam::Range< PinholeCamera< Calibration >, T >\", \"a03116.html\", null]\n+ [\"gtsam::traits< QUATERNION_TYPE >\", \"a03208.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00458_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00458_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeCamera.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Quaternion.h Source File\n \n \n \n \n \n \n \n@@ -98,400 +98,200 @@\n
No Matches
\n \n \n \n \n \n
\n-
PinholeCamera.h
\n+
Quaternion.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-
23
\n-
24namespace gtsam {
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Lie.h>
\n+
21#include <gtsam/base/concepts.h>
\n+
22#include <gtsam/geometry/SO3.h> // Logmap/Expmap derivatives
\n+
23#include <limits>
\n+
24#include <iostream>
\n
25
\n-
32template<typename Calibration>
\n-
\n-
33class PinholeCamera: public PinholeBaseK<Calibration> {
\n-
34
\n-
35public:
\n-
36
\n-\n-
42 typedef Point2Vector MeasurementVector;
\n-
43
\n-
44private:
\n-
45
\n-\n-
47 Calibration K_;
\n-
48
\n-
49 // Get dimensions of calibration type at compile time
\n-
50 static const int DimK = FixedDimension<Calibration>::value;
\n-
51
\n-
52public:
\n+
26#define QUATERNION_TYPE Eigen::Quaternion<_Scalar,_Options>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
30// Define traits
\n+
31template<typename _Scalar, int _Options>
\n+
\n+
32struct traits<QUATERNION_TYPE> {
\n+
33 typedef QUATERNION_TYPE ManifoldType;
\n+
34 typedef QUATERNION_TYPE Q;
\n+
35
\n+\n+\n+
38
\n+
41 static Q Identity() {
\n+
42 return Q::Identity();
\n+
43 }
\n+
44
\n+
48 enum {
\n+
49 dimension = 3
\n+
50 };
\n+
51 typedef OptionalJacobian<3, 3> ChartJacobian;
\n+
52 typedef Eigen::Matrix<_Scalar, 3, 1, _Options, 3, 1> TangentVector;
\n
53
\n-
54 enum {
\n-
55 dimension = 6 + DimK
\n-
56 };
\n-
57
\n-
60
\n-
\n-\n-
63 }
\n-
\n-
64
\n-
\n-
66 explicit PinholeCamera(const Pose3& pose) :
\n-
67 Base(pose) {
\n-
68 }
\n-
\n-
69
\n-
\n-
71 PinholeCamera(const Pose3& pose, const Calibration& K) :
\n-
72 Base(pose), K_(K) {
\n-
73 }
\n-
\n-
74
\n-
78
\n-
\n-
86 static PinholeCamera Level(const Calibration &K, const Pose2& pose2,
\n-
87 double height) {
\n-
88 return PinholeCamera(Base::LevelPose(pose2, height), K);
\n-
89 }
\n-
\n-
90
\n-
\n-
92 static PinholeCamera Level(const Pose2& pose2, double height) {
\n-
93 return PinholeCamera::Level(Calibration(), pose2, height);
\n-
94 }
\n-
\n-
95
\n-
\n-
105 static PinholeCamera Lookat(const Point3& eye, const Point3& target,
\n-
106 const Point3& upVector, const Calibration& K = Calibration()) {
\n-
107 return PinholeCamera(Base::LookatPose(eye, target, upVector), K);
\n-
108 }
\n-
\n-
109
\n-
110 // Create PinholeCamera, with derivatives
\n-
111 static PinholeCamera Create(const Pose3& pose, const Calibration &K,
\n-
112 OptionalJacobian<dimension, 6> H1 = boost::none, //
\n-
113 OptionalJacobian<dimension, DimK> H2 = boost::none) {
\n-
114 typedef Eigen::Matrix<double, DimK, 6> MatrixK6;
\n-
115 if (H1)
\n-
116 *H1 << I_6x6, MatrixK6::Zero();
\n-
117 typedef Eigen::Matrix<double, 6, DimK> Matrix6K;
\n-
118 typedef Eigen::Matrix<double, DimK, DimK> MatrixK;
\n-
119 if (H2)
\n-
120 *H2 << Matrix6K::Zero(), MatrixK::Identity();
\n-
121 return PinholeCamera(pose,K);
\n-
122 }
\n-
123
\n-
127
\n-
\n-
129 explicit PinholeCamera(const Vector &v) :
\n-
130 Base(v.head<6>()) {
\n-
131 if (v.size() > 6)
\n-
132 K_ = Calibration(v.tail<DimK>());
\n-
133 }
\n-
\n-
134
\n-
\n-
136 PinholeCamera(const Vector &v, const Vector &K) :
\n-
137 Base(v), K_(K) {
\n-
138 }
\n-
\n-
139
\n-
143
\n-
\n-
145 bool equals(const Base &camera, double tol = 1e-9) const {
\n-
146 const PinholeCamera* e = dynamic_cast<const PinholeCamera*>(&camera);
\n-
147 return Base::equals(camera, tol) && K_.equals(e->calibration(), tol);
\n-
148 }
\n-
\n-
149
\n-
\n-
151 void print(const std::string& s = "PinholeCamera") const override {
\n-
152 Base::print(s);
\n-
153 K_.print(s + ".calibration");
\n-
154 }
\n-
\n-
155
\n-
159
\n-
160 ~PinholeCamera() override {
\n-
161 }
\n-
162
\n-
\n-
164 const Pose3& pose() const {
\n-
165 return Base::pose();
\n-
166 }
\n-
\n-
167
\n-
\n-\n-
170 if (H) {
\n-
171 H->setZero();
\n-
172 H->template block<6, 6>(0, 0) = I_6x6;
\n-
173 }
\n-
174 return Base::pose();
\n+
57 static Q Compose(const Q &g, const Q & h,
\n+
58 ChartJacobian Hg = boost::none, ChartJacobian Hh = boost::none) {
\n+
59 if (Hg) *Hg = h.toRotationMatrix().transpose();
\n+
60 if (Hh) *Hh = I_3x3;
\n+
61 return g * h;
\n+
62 }
\n+
63
\n+
64 static Q Between(const Q &g, const Q & h,
\n+
65 ChartJacobian Hg = boost::none, ChartJacobian Hh = boost::none) {
\n+
66 Q d = g.inverse() * h;
\n+
67 if (Hg) *Hg = -d.toRotationMatrix().transpose();
\n+
68 if (Hh) *Hh = I_3x3;
\n+
69 return d;
\n+
70 }
\n+
71
\n+
72 static Q Inverse(const Q &g,
\n+
73 ChartJacobian H = boost::none) {
\n+
74 if (H) *H = -g.toRotationMatrix();
\n+
75 return g.inverse();
\n+
76 }
\n+
77
\n+
\n+
79 static Q Expmap(const Eigen::Ref<const TangentVector>& omega,
\n+
80 ChartJacobian H = boost::none) {
\n+
81 using std::cos;
\n+
82 using std::sin;
\n+
83 if (H) *H = SO3::ExpmapDerivative(omega.template cast<double>());
\n+
84 _Scalar theta2 = omega.dot(omega);
\n+
85 if (theta2 > std::numeric_limits<_Scalar>::epsilon()) {
\n+
86 _Scalar theta = std::sqrt(theta2);
\n+
87 _Scalar ha = _Scalar(0.5) * theta;
\n+
88 Vector3 vec = (sin(ha) / theta) * omega;
\n+
89 return Q(cos(ha), vec.x(), vec.y(), vec.z());
\n+
90 } else {
\n+
91 // first order approximation sin(theta/2)/theta = 0.5
\n+
92 Vector3 vec = _Scalar(0.5) * omega;
\n+
93 return Q(1.0, vec.x(), vec.y(), vec.z());
\n+
94 }
\n+
95 }
\n+
\n+
96
\n+
\n+
98 static TangentVector Logmap(const Q& q, ChartJacobian H = boost::none) {
\n+
99 using std::acos;
\n+
100 using std::sqrt;
\n+
101
\n+
102 // define these compile time constants to avoid std::abs:
\n+
103 static const double twoPi = 2.0 * M_PI, NearlyOne = 1.0 - 1e-10,
\n+
104 NearlyNegativeOne = -1.0 + 1e-10;
\n+
105
\n+
106 TangentVector omega;
\n+
107
\n+
108 const _Scalar qw = q.w();
\n+
109 // See Quaternion-Logmap.nb in doc for Taylor expansions
\n+
110 if (qw > NearlyOne) {
\n+
111 // Taylor expansion of (angle / s) at 1
\n+
112 // (2 + 2 * (1-qw) / 3) * q.vec();
\n+
113 omega = ( 8. / 3. - 2. / 3. * qw) * q.vec();
\n+
114 } else if (qw < NearlyNegativeOne) {
\n+
115 // Taylor expansion of (angle / s) at -1
\n+
116 // (-2 - 2 * (1 + qw) / 3) * q.vec();
\n+
117 omega = (-8. / 3. - 2. / 3. * qw) * q.vec();
\n+
118 } else {
\n+
119 // Normal, away from zero case
\n+
120 if (qw > 0) {
\n+
121 _Scalar angle = 2 * acos(qw), s = sqrt(1 - qw * qw);
\n+
122 // Important: convert to [-pi,pi] to keep error continuous
\n+
123 if (angle > M_PI)
\n+
124 angle -= twoPi;
\n+
125 else if (angle < -M_PI)
\n+
126 angle += twoPi;
\n+
127 omega = (angle / s) * q.vec();
\n+
128 } else {
\n+
129 // Make sure that we are using a canonical quaternion with w > 0
\n+
130 _Scalar angle = 2 * acos(-qw), s = sqrt(1 - qw * qw);
\n+
131 if (angle > M_PI)
\n+
132 angle -= twoPi;
\n+
133 else if (angle < -M_PI)
\n+
134 angle += twoPi;
\n+
135 omega = (angle / s) * -q.vec();
\n+
136 }
\n+
137 }
\n+
138
\n+
139 if(H) *H = SO3::LogmapDerivative(omega.template cast<double>());
\n+
140 return omega;
\n+
141 }
\n+
\n+
142
\n+
146
\n+
147 static TangentVector Local(const Q& g, const Q& h,
\n+
148 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
149 Q b = Between(g, h, H1, H2);
\n+
150 Matrix3 D_v_b;
\n+
151 TangentVector v = Logmap(b, (H1 || H2) ? &D_v_b : 0);
\n+
152 if (H1) *H1 = D_v_b * (*H1);
\n+
153 if (H2) *H2 = D_v_b * (*H2);
\n+
154 return v;
\n+
155 }
\n+
156
\n+
157 static Q Retract(const Q& g, const TangentVector& v,
\n+
158 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
159 Matrix3 D_h_v;
\n+
160 Q b = Expmap(v,H2 ? &D_h_v : 0);
\n+
161 Q h = Compose(g, b, H1, H2);
\n+
162 if (H2) *H2 = (*H2) * D_h_v;
\n+
163 return h;
\n+
164 }
\n+
165
\n+
169 static void Print(const Q& q, const std::string& str = "") {
\n+
170 if (str.size() == 0)
\n+
171 std::cout << "Eigen::Quaternion: ";
\n+
172 else
\n+
173 std::cout << str << " ";
\n+
174 std::cout << q.vec().transpose() << std::endl;
\n
175 }
\n-
\n-
176
\n-
\n-
178 const Calibration& calibration() const override {
\n-
179 return K_;
\n-
180 }
\n+
176 static bool Equals(const Q& q1, const Q& q2, double tol = 1e-8) {
\n+
177 return Between(q1, q2).vec().array().abs().maxCoeff() < tol;
\n+
178 }
\n+
180};
\n
\n
181
\n+
182typedef Eigen::Quaternion<double, Eigen::DontAlign> Quaternion;
\n+
183
\n+
184} // \\namespace gtsam
\n
185
\n-
\n-
187 size_t dim() const {
\n-
188 return dimension;
\n-
189 }
\n-
\n-
190
\n-
\n-
192 static size_t Dim() {
\n-
193 return dimension;
\n-
194 }
\n-
\n-
195
\n-
196 typedef Eigen::Matrix<double, dimension, 1> VectorK6;
\n-
197
\n-
\n-
199 PinholeCamera retract(const Vector& d) const {
\n-
200 if ((size_t) d.size() == 6)
\n-
201 return PinholeCamera(this->pose().retract(d), calibration());
\n-
202 else
\n-
203 return PinholeCamera(this->pose().retract(d.head<6>()),
\n-
204 calibration().retract(d.tail(calibration().dim())));
\n-
205 }
\n-
\n-
206
\n-
\n-
208 VectorK6 localCoordinates(const PinholeCamera& T2) const {
\n-
209 VectorK6 d;
\n-
210 d.template head<6>() = this->pose().localCoordinates(T2.pose());
\n-
211 d.template tail<DimK>() = calibration().localCoordinates(T2.calibration());
\n-
212 return d;
\n-
213 }
\n-
\n-
214
\n-
\n-\n-
217 return PinholeCamera(); // assumes that the default constructor is valid
\n-
218 }
\n-
\n-
219
\n-
223
\n-
224 typedef Eigen::Matrix<double, 2, DimK> Matrix2K;
\n-
225
\n-
229 template<class POINT>
\n-
\n-\n-\n-
232 // We just call 3-derivative version in Base
\n-
233 if (Dcamera){
\n-
234 Matrix26 Dpose;
\n-
235 Eigen::Matrix<double, 2, DimK> Dcal;
\n-
236 const Point2 pi = Base::project(pw, Dpose, Dpoint, Dcal);
\n-
237 *Dcamera << Dpose, Dcal;
\n-
238 return pi;
\n-
239 } else {
\n-
240 return Base::project(pw, boost::none, Dpoint, boost::none);
\n-
241 }
\n-
242 }
\n-
\n-
243
\n-
\n-\n-
246 boost::none, OptionalJacobian<2, 3> Dpoint = boost::none) const {
\n-
247 return _project2(pw, Dcamera, Dpoint);
\n-
248 }
\n-
\n-
249
\n-
\n-\n-
252 boost::none, OptionalJacobian<2, 2> Dpoint = boost::none) const {
\n-
253 return _project2(pw, Dcamera, Dpoint);
\n-
254 }
\n-
\n-
255
\n-
\n-
261 double range(const Point3& point, OptionalJacobian<1, dimension> Dcamera =
\n-
262 boost::none, OptionalJacobian<1, 3> Dpoint = boost::none) const {
\n-
263 Matrix16 Dpose_;
\n-
264 double result = this->pose().range(point, Dcamera ? &Dpose_ : 0, Dpoint);
\n-
265 if (Dcamera)
\n-
266 *Dcamera << Dpose_, Eigen::Matrix<double, 1, DimK>::Zero();
\n-
267 return result;
\n-
268 }
\n-
\n-
269
\n-
\n-\n-
276 boost::none, OptionalJacobian<1, 6> Dpose = boost::none) const {
\n-
277 Matrix16 Dpose_;
\n-
278 double result = this->pose().range(pose, Dcamera ? &Dpose_ : 0, Dpose);
\n-
279 if (Dcamera)
\n-
280 *Dcamera << Dpose_, Eigen::Matrix<double, 1, DimK>::Zero();
\n-
281 return result;
\n-
282 }
\n-
\n-
283
\n-
289 template<class CalibrationB>
\n-
\n-
290 double range(const PinholeCamera<CalibrationB>& camera,
\n-
291 OptionalJacobian<1, dimension> Dcamera = boost::none,
\n-
292 OptionalJacobian<1, 6 + CalibrationB::dimension> Dother = boost::none) const {
\n-
293 Matrix16 Dcamera_, Dother_;
\n-
294 double result = this->pose().range(camera.pose(), Dcamera ? &Dcamera_ : 0,
\n-
295 Dother ? &Dother_ : 0);
\n-
296 if (Dcamera) {
\n-
297 *Dcamera << Dcamera_, Eigen::Matrix<double, 1, DimK>::Zero();
\n-
298 }
\n-
299 if (Dother) {
\n-
300 Dother->setZero();
\n-
301 Dother->template block<1, 6>(0, 0) = Dother_;
\n-
302 }
\n-
303 return result;
\n-
304 }
\n-
\n-
305
\n-
\n-
311 double range(const CalibratedCamera& camera,
\n-
312 OptionalJacobian<1, dimension> Dcamera = boost::none,
\n-
313 OptionalJacobian<1, 6> Dother = boost::none) const {
\n-
314 return range(camera.pose(), Dcamera, Dother);
\n-
315 }
\n-
\n-
316
\n-
\n-
318 Matrix34 cameraProjectionMatrix() const {
\n-
319 return K_.K() * PinholeBase::pose().inverse().matrix().block(0, 0, 3, 4);
\n-
320 }
\n-
\n-
321
\n-
\n-\n-
324 return Eigen::Matrix<double,traits<Point2>::dimension,1>::Constant(2.0 * K_.fx());;
\n-
325 }
\n-
\n-
326
\n-
327private:
\n-
328
\n-\n-
331 template<class Archive>
\n-
332 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
333 ar
\n-
334 & boost::serialization::make_nvp("PinholeBaseK",
\n-
335 boost::serialization::base_object<Base>(*this));
\n-
336 ar & BOOST_SERIALIZATION_NVP(K_);
\n-
337 }
\n-
338
\n-
339public:
\n-\n-
341};
\n-
\n-
342
\n-
343// manifold traits
\n-
344
\n-
345template <typename Calibration>
\n-
\n-
346struct traits<PinholeCamera<Calibration> >
\n-
347 : public internal::Manifold<PinholeCamera<Calibration> > {};
\n-
\n-
348
\n-
349template <typename Calibration>
\n-
\n-
350struct traits<const PinholeCamera<Calibration> >
\n-
351 : public internal::Manifold<PinholeCamera<Calibration> > {};
\n-
\n-
352
\n-
353// range traits, used in RangeFactor
\n-
354template <typename Calibration, typename T>
\n-
355struct Range<PinholeCamera<Calibration>, T> : HasRange<PinholeCamera<Calibration>, T, double> {};
\n-
356
\n-
357} // \\ gtsam
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Bearing-Range product.
\n-
Pinhole camera with known calibration.
\n+
Base class and basic functions for Lie types.
\n+
3*3 matrix representation of SO(3)
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
TangentVector localCoordinates(const Class &g) const
localCoordinates as required by manifold concept: finds tangent vector between *this and g
Definition Lie.h:136
\n-
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n-
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n+
Group operator syntax flavors.
Definition Group.h:37
\n+
tag to assert a type is a Lie group
Definition Lie.h:164
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Definition BearingRange.h:40
\n-
Definition BearingRange.h:194
\n-
static Matrix26 Dpose(const Point2 &pn, double d)
Calculate Jacobian with respect to pose.
Definition CalibratedCamera.cpp:27
\n-
virtual void print(const std::string &s="PinholeBase") const
print
Definition CalibratedCamera.cpp:74
\n-
const Pose3 & pose() const
return pose, constant version
Definition CalibratedCamera.h:152
\n-
static Pose3 LevelPose(const Pose2 &pose2, double height)
Create a level pose at the given 2D pose and height.
Definition CalibratedCamera.cpp:49
\n-
bool equals(const PinholeBase &camera, double tol=1e-9) const
assert equality up to a tolerance
Definition CalibratedCamera.cpp:69
\n-
static Matrix23 Dpoint(const Point2 &pn, double d, const Matrix3 &Rt)
Calculate Jacobian with respect to point.
Definition CalibratedCamera.cpp:37
\n-
static Pose3 LookatPose(const Point3 &eye, const Point3 &target, const Point3 &upVector)
Create a camera pose at the given eye position looking at a target point in the scene with the specif...
Definition CalibratedCamera.cpp:58
\n-
A Calibrated camera class [R|-R't], calibration K=I.
Definition CalibratedCamera.h:247
\n-
A pinhole camera class that has a Pose3 and a Calibration.
Definition PinholeCamera.h:33
\n-
void print(const std::string &s="PinholeCamera") const override
print
Definition PinholeCamera.h:151
\n-
Point2 _project2(const POINT &pw, OptionalJacobian< 2, dimension > Dcamera, OptionalJacobian< 2, FixedDimension< POINT >::value > Dpoint) const
Templated projection of a 3D point or a point at infinity into the image.
Definition PinholeCamera.h:230
\n-
Vector defaultErrorWhenTriangulatingBehindCamera() const
for Nonlinear Triangulation
Definition PinholeCamera.h:323
\n-
const Calibration & calibration() const override
return calibration
Definition PinholeCamera.h:178
\n-
const Pose3 & getPose(OptionalJacobian< 6, dimension > H) const
return pose, with derivative
Definition PinholeCamera.h:169
\n-
Point2 project2(const Point3 &pw, OptionalJacobian< 2, dimension > Dcamera=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const
project a 3D point from world coordinates into the image
Definition PinholeCamera.h:245
\n-
PinholeCamera(const Pose3 &pose)
constructor with pose
Definition PinholeCamera.h:66
\n-
static PinholeCamera Level(const Pose2 &pose2, double height)
PinholeCamera::level with default calibration.
Definition PinholeCamera.h:92
\n-
PinholeCamera(const Pose3 &pose, const Calibration &K)
constructor with pose and calibration
Definition PinholeCamera.h:71
\n-
static PinholeCamera Level(const Calibration &K, const Pose2 &pose2, double height)
Create a level camera at the given 2D pose and height.
Definition PinholeCamera.h:86
\n-
size_t dim() const
Definition PinholeCamera.h:187
\n-
static PinholeCamera Identity()
for Canonical
Definition PinholeCamera.h:216
\n-
static size_t Dim()
Definition PinholeCamera.h:192
\n-
bool equals(const Base &camera, double tol=1e-9) const
assert equality up to a tolerance
Definition PinholeCamera.h:145
\n-
double range(const Pose3 &pose, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dpose=boost::none) const
Calculate range to another pose.
Definition PinholeCamera.h:275
\n-
double range(const PinholeCamera< CalibrationB > &camera, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 6+CalibrationB::dimension > Dother=boost::none) const
Calculate range to another camera.
Definition PinholeCamera.h:290
\n-
PinholeCamera(const Vector &v, const Vector &K)
Init from Vector and calibration.
Definition PinholeCamera.h:136
\n-
static PinholeCamera Lookat(const Point3 &eye, const Point3 &target, const Point3 &upVector, const Calibration &K=Calibration())
Create a camera at the given eye position looking at a target point in the scene with the specified u...
Definition PinholeCamera.h:105
\n-
Matrix34 cameraProjectionMatrix() const
for Linear Triangulation
Definition PinholeCamera.h:318
\n-
VectorK6 localCoordinates(const PinholeCamera &T2) const
return canonical coordinate
Definition PinholeCamera.h:208
\n-
PinholeCamera retract(const Vector &d) const
move a cameras according to d
Definition PinholeCamera.h:199
\n-
friend class boost::serialization::access
Serialization function.
Definition PinholeCamera.h:330
\n-
Point2 project2(const Unit3 &pw, OptionalJacobian< 2, dimension > Dcamera=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const
project a point at infinity from world coordinates into the image
Definition PinholeCamera.h:251
\n-
const Pose3 & pose() const
return pose
Definition PinholeCamera.h:164
\n-
PinholeCamera(const Vector &v)
Init from vector, can be 6D (default calibration) or dim.
Definition PinholeCamera.h:129
\n-
PinholeCamera()
default constructor
Definition PinholeCamera.h:62
\n-
Point2 Measurement
Some classes template on either PinholeCamera or StereoCamera, and this typedef informs those classes...
Definition PinholeCamera.h:41
\n-
double range(const CalibratedCamera &camera, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const
Calculate range to a calibrated camera.
Definition PinholeCamera.h:311
\n-
double range(const Point3 &point, OptionalJacobian< 1, dimension > Dcamera=boost::none, OptionalJacobian< 1, 3 > Dpoint=boost::none) const
Calculate range to a landmark.
Definition PinholeCamera.h:261
\n-
A pinhole camera class that has a Pose3 and a fixed Calibration.
Definition PinholePose.h:34
\n-
Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const
project a 3D point from world coordinates into the image
Definition PinholePose.h:118
\n-
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none, OptionalJacobian< 1, 3 > Hpoint=boost::none) const
Calculate range to a landmark.
Definition Pose3.cpp:399
\n-
Matrix4 matrix() const
convert to 4*4 matrix
Definition Pose3.cpp:323
\n-
Pose3 inverse() const
inverse transformation with derivatives
Definition Pose3.cpp:49
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
static Q Expmap(const Eigen::Ref< const TangentVector > &omega, ChartJacobian H=boost::none)
Exponential map, using the inlined code from Eigen's conversion from axis/angle.
Definition Quaternion.h:79
\n+
static TangentVector Logmap(const Q &q, ChartJacobian H=boost::none)
We use our own Logmap, as there is a slight bug in Eigen.
Definition Quaternion.h:98
\n+
static MatrixDD ExpmapDerivative(const TangentVector &omega)
Derivative of Expmap, currently only defined for SO3.
Definition SOn-inl.h:72
\n+
static MatrixDD LogmapDerivative(const TangentVector &omega)
Derivative of Logmap, currently only defined for SO3.
Definition SOn-inl.h:82
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,513 +1,214 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PinholeCamera.h\n+Quaternion.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+21#include \n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\b3_\b._\bh> // Logmap/Expmap derivatives\n+23#include \n+24#include \n 25\n-32template\n-_\b3_\b3class _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba: public _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK {\n-34\n-35public:\n-36\n-_\b4_\b1 typedef _\bP_\bo_\bi_\bn_\bt_\b2 _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt;\n-42 typedef Point2Vector MeasurementVector;\n-43\n-44private:\n-45\n-46 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b> _\bB_\ba_\bs_\be;\n-47 Calibration K_;\n-48\n-49 // Get dimensions of calibration type at compile time\n-50 static const int DimK = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n-51\n-52public:\n+26#define QUATERNION_TYPE Eigen::Quaternion<_Scalar,_Options>\n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+30// Define traits\n+31template\n+_\b3_\b2struct _\bt_\br_\ba_\bi_\bt_\bs {\n+33 typedef QUATERNION_TYPE ManifoldType;\n+34 typedef QUATERNION_TYPE Q;\n+35\n+36 typedef _\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n+37 typedef _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n+38\n+41 static Q Identity() {\n+42 return Q::Identity();\n+43 }\n+44\n+48 enum {\n+49 dimension = 3\n+50 };\n+51 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> ChartJacobian;\n+52 typedef Eigen::Matrix<_Scalar, 3, 1, _Options, 3, 1> TangentVector;\n 53\n-54 enum {\n-55 dimension = 6 + DimK\n-56 };\n-57\n-60\n-_\b6_\b2 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba() {\n-63 }\n-64\n-_\b6_\b6 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be) :\n-67 _\bB_\ba_\bs_\be(_\bp_\bo_\bs_\be) {\n-68 }\n-69\n-_\b7_\b1 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be, const Calibration& K) :\n-72 _\bB_\ba_\bs_\be(_\bp_\bo_\bs_\be), K_(K) {\n-73 }\n-74\n-78\n-_\b8_\b6 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba _\bL_\be_\bv_\be_\bl(const Calibration &K, const _\bP_\bo_\bs_\be_\b2& pose2,\n-87 double height) {\n-88 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(_\bB_\ba_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl_\bP_\bo_\bs_\be(pose2, height), K);\n-89 }\n-90\n-_\b9_\b2 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba _\bL_\be_\bv_\be_\bl(const _\bP_\bo_\bs_\be_\b2& pose2, double height) {\n-93 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bL_\be_\bv_\be_\bl(Calibration(), pose2, height);\n+57 static Q Compose(const Q &g, const Q & h,\n+58 ChartJacobian Hg = boost::none, ChartJacobian Hh = boost::none) {\n+59 if (Hg) *Hg = h.toRotationMatrix().transpose();\n+60 if (Hh) *Hh = I_3x3;\n+61 return g * h;\n+62 }\n+63\n+64 static Q Between(const Q &g, const Q & h,\n+65 ChartJacobian Hg = boost::none, ChartJacobian Hh = boost::none) {\n+66 Q d = g.inverse() * h;\n+67 if (Hg) *Hg = -d.toRotationMatrix().transpose();\n+68 if (Hh) *Hh = I_3x3;\n+69 return d;\n+70 }\n+71\n+72 static Q Inverse(const Q &g,\n+73 ChartJacobian H = boost::none) {\n+74 if (H) *H = -g.toRotationMatrix();\n+75 return g.inverse();\n+76 }\n+77\n+_\b7_\b9 static Q _\bE_\bx_\bp_\bm_\ba_\bp(const Eigen::Ref& omega,\n+80 ChartJacobian H = boost::none) {\n+81 using std::cos;\n+82 using std::sin;\n+83 if (H) *H = _\bS_\bO_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(omega.template cast());\n+84 _Scalar theta2 = omega.dot(omega);\n+85 if (theta2 > std::numeric_limits<_Scalar>::epsilon()) {\n+86 _Scalar theta = std::sqrt(theta2);\n+87 _Scalar ha = _Scalar(0.5) * theta;\n+88 Vector3 vec = (sin(ha) / theta) * omega;\n+89 return Q(cos(ha), vec.x(), vec.y(), vec.z());\n+90 } else {\n+91 // first order approximation sin(theta/2)/theta = 0.5\n+92 Vector3 vec = _Scalar(0.5) * omega;\n+93 return Q(1.0, vec.x(), vec.y(), vec.z());\n 94 }\n-95\n-_\b1_\b0_\b5 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba _\bL_\bo_\bo_\bk_\ba_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& eye, const _\bP_\bo_\bi_\bn_\bt_\b3& target,\n-106 const _\bP_\bo_\bi_\bn_\bt_\b3& upVector, const Calibration& K = Calibration()) {\n-107 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt_\bP_\bo_\bs_\be(eye, target, upVector), K);\n-108 }\n-109\n-110 // Create PinholeCamera, with derivatives\n-111 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba Create(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be, const Calibration &K,\n-112 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b6_\b> H1 = boost::none, //\n-113 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bD_\bi_\bm_\bK_\b> H2 = boost::none) {\n-114 typedef Eigen::Matrix MatrixK6;\n-115 if (H1)\n-116 *H1 << I_6x6, MatrixK6::Zero();\n-117 typedef Eigen::Matrix Matrix6K;\n-118 typedef Eigen::Matrix MatrixK;\n-119 if (H2)\n-120 *H2 << Matrix6K::Zero(), MatrixK::Identity();\n-121 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(_\bp_\bo_\bs_\be,K);\n-122 }\n-123\n-127\n-_\b1_\b2_\b9 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(const Vector &v) :\n-130 _\bB_\ba_\bs_\be(v.head<6>()) {\n-131 if (v.size() > 6)\n-132 K_ = Calibration(v.tail());\n-133 }\n-134\n-_\b1_\b3_\b6 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(const Vector &v, const Vector &K) :\n-137 _\bB_\ba_\bs_\be(v), K_(K) {\n-138 }\n-139\n-143\n-_\b1_\b4_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &camera, double tol = 1e-9) const {\n-146 const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba* e = dynamic_cast(&camera);\n-147 return _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(camera, tol) && K_._\be_\bq_\bu_\ba_\bl_\bs(e->_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn(), tol);\n-148 }\n-149\n-_\b1_\b5_\b1 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"PinholeCamera\") const override {\n-152 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n-153 K_.print(s + \".calibration\");\n-154 }\n-155\n-159\n-160 _\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba() override {\n-161 }\n-162\n-_\b1_\b6_\b4 const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be() const {\n-165 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be();\n-166 }\n-167\n-_\b1_\b6_\b9 const _\bP_\bo_\bs_\be_\b3& _\bg_\be_\bt_\bP_\bo_\bs_\be(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> H) const {\n-170 if (H) {\n-171 H->setZero();\n-172 H->template block<6, 6>(0, 0) = I_6x6;\n-173 }\n-174 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be();\n+95 }\n+96\n+_\b9_\b8 static TangentVector _\bL_\bo_\bg_\bm_\ba_\bp(const Q& q, ChartJacobian H = boost::none) {\n+99 using std::acos;\n+100 using std::sqrt;\n+101\n+102 // define these compile time constants to avoid std::abs:\n+103 static const double twoPi = 2.0 * M_PI, NearlyOne = 1.0 - 1e-10,\n+104 NearlyNegativeOne = -1.0 + 1e-10;\n+105\n+106 TangentVector omega;\n+107\n+108 const _Scalar qw = q.w();\n+109 // See Quaternion-Logmap.nb in doc for Taylor expansions\n+110 if (qw > NearlyOne) {\n+111 // Taylor expansion of (angle / s) at 1\n+112 // (2 + 2 * (1-qw) / 3) * q.vec();\n+113 omega = ( 8. / 3. - 2. / 3. * qw) * q.vec();\n+114 } else if (qw < NearlyNegativeOne) {\n+115 // Taylor expansion of (angle / s) at -1\n+116 // (-2 - 2 * (1 + qw) / 3) * q.vec();\n+117 omega = (-8. / 3. - 2. / 3. * qw) * q.vec();\n+118 } else {\n+119 // Normal, away from zero case\n+120 if (qw > 0) {\n+121 _Scalar angle = 2 * acos(qw), s = sqrt(1 - qw * qw);\n+122 // Important: convert to [-pi,pi] to keep error continuous\n+123 if (angle > M_PI)\n+124 angle -= twoPi;\n+125 else if (angle < -M_PI)\n+126 angle += twoPi;\n+127 omega = (angle / s) * q.vec();\n+128 } else {\n+129 // Make sure that we are using a canonical quaternion with w > 0\n+130 _Scalar angle = 2 * acos(-qw), s = sqrt(1 - qw * qw);\n+131 if (angle > M_PI)\n+132 angle -= twoPi;\n+133 else if (angle < -M_PI)\n+134 angle += twoPi;\n+135 omega = (angle / s) * -q.vec();\n+136 }\n+137 }\n+138\n+139 if(H) *H = _\bS_\bO_\b3_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(omega.template cast());\n+140 return omega;\n+141 }\n+142\n+146\n+147 static TangentVector Local(const Q& g, const Q& h,\n+148 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+149 Q b = Between(g, h, H1, H2);\n+150 Matrix3 D_v_b;\n+151 TangentVector v = Logmap(b, (H1 || H2) ? &D_v_b : 0);\n+152 if (H1) *H1 = D_v_b * (*H1);\n+153 if (H2) *H2 = D_v_b * (*H2);\n+154 return v;\n+155 }\n+156\n+157 static Q Retract(const Q& g, const TangentVector& v,\n+158 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+159 Matrix3 D_h_v;\n+160 Q b = Expmap(v,H2 ? &D_h_v : 0);\n+161 Q h = Compose(g, b, H1, H2);\n+162 if (H2) *H2 = (*H2) * D_h_v;\n+163 return h;\n+164 }\n+165\n+169 static void Print(const Q& q, const std::string& str = \"\") {\n+170 if (str.size() == 0)\n+171 std::cout << \"Eigen::Quaternion: \";\n+172 else\n+173 std::cout << str << \" \";\n+174 std::cout << q.vec().transpose() << std::endl;\n 175 }\n-176\n-_\b1_\b7_\b8 const Calibration& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const override {\n-179 return K_;\n-180 }\n+176 static bool Equals(const Q& q1, const Q& q2, double tol = 1e-8) {\n+177 return Between(q1, q2).vec().array().abs().maxCoeff() < tol;\n+178 }\n+180};\n 181\n+182typedef Eigen::Quaternion Quaternion;\n+183\n+184} // \\namespace gtsam\n 185\n-_\b1_\b8_\b7 size_t _\bd_\bi_\bm() const {\n-188 return dimension;\n-189 }\n-190\n-_\b1_\b9_\b2 static size_t _\bD_\bi_\bm() {\n-193 return dimension;\n-194 }\n-195\n-196 typedef Eigen::Matrix VectorK6;\n-197\n-_\b1_\b9_\b9 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& d) const {\n-200 if ((size_t) d.size() == 6)\n-201 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(this->_\bp_\bo_\bs_\be()._\br_\be_\bt_\br_\ba_\bc_\bt(d), _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn());\n-202 else\n-203 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(this->_\bp_\bo_\bs_\be()._\br_\be_\bt_\br_\ba_\bc_\bt(d.head<6>()),\n-204 _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn()._\br_\be_\bt_\br_\ba_\bc_\bt(d.tail(_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn()._\bd_\bi_\bm())));\n-205 }\n-206\n-_\b2_\b0_\b8 VectorK6 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba& T2) const {\n-209 VectorK6 d;\n-210 d.template head<6>() = this->_\bp_\bo_\bs_\be()._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(T2._\bp_\bo_\bs_\be());\n-211 d.template tail() = _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn().localCoordinates(T2._\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn());\n-212 return d;\n-213 }\n-214\n-_\b2_\b1_\b6 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n-217 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba(); // assumes that the default constructor is valid\n-218 }\n-219\n-223\n-224 typedef Eigen::Matrix Matrix2K;\n-225\n-229 template\n-_\b2_\b3_\b0 _\bP_\bo_\bi_\bn_\bt_\b2 _\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const POINT& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera,\n-231 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<2, _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bP_\bO_\bI_\bN_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be> _\bD_\bp_\bo_\bi_\bn_\bt) const {\n-232 // We just call 3-derivative version in Base\n-233 if (Dcamera){\n-234 Matrix26 _\bD_\bp_\bo_\bs_\be;\n-235 Eigen::Matrix Dcal;\n-236 const _\bP_\bo_\bi_\bn_\bt_\b2 pi = _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt, Dcal);\n-237 *Dcamera << _\bD_\bp_\bo_\bs_\be, Dcal;\n-238 return pi;\n-239 } else {\n-240 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt(pw, boost::none, _\bD_\bp_\bo_\bi_\bn_\bt, boost::none);\n-241 }\n-242 }\n-243\n-_\b2_\b4_\b5 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const _\bP_\bo_\bi_\bn_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera =\n-246 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n-247 return _\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(pw, Dcamera, _\bD_\bp_\bo_\bi_\bn_\bt);\n-248 }\n-249\n-_\b2_\b5_\b1 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const _\bU_\bn_\bi_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera =\n-252 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n-253 return _\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(pw, Dcamera, _\bD_\bp_\bo_\bi_\bn_\bt);\n-254 }\n-255\n-_\b2_\b6_\b1 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera =\n-262 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n-263 Matrix16 Dpose_;\n-264 double result = this->_\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(point, Dcamera ? &Dpose_ : 0, _\bD_\bp_\bo_\bi_\bn_\bt);\n-265 if (Dcamera)\n-266 *Dcamera << Dpose_, Eigen::Matrix::Zero();\n-267 return result;\n-268 }\n-269\n-_\b2_\b7_\b5 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera =\n-276 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::none) const {\n-277 Matrix16 Dpose_;\n-278 double result = this->_\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(pose, Dcamera ? &Dpose_ : 0, _\bD_\bp_\bo_\bs_\be);\n-279 if (Dcamera)\n-280 *Dcamera << Dpose_, Eigen::Matrix::Zero();\n-281 return result;\n-282 }\n-283\n-289 template\n-_\b2_\b9_\b0 double _\br_\ba_\bn_\bg_\be(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\bB_\b>& camera,\n-291 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera = boost::none,\n-292 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b _\b+_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\bB_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dother = boost::none)\n-const {\n-293 Matrix16 Dcamera_, Dother_;\n-294 double result = this->_\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(camera._\bp_\bo_\bs_\be(), Dcamera ? &Dcamera_ : 0,\n-295 Dother ? &Dother_ : 0);\n-296 if (Dcamera) {\n-297 *Dcamera << Dcamera_, Eigen::Matrix::Zero();\n-298 }\n-299 if (Dother) {\n-300 Dother->setZero();\n-301 Dother->template block<1, 6>(0, 0) = Dother_;\n-302 }\n-303 return result;\n-304 }\n-305\n-_\b3_\b1_\b1 double _\br_\ba_\bn_\bg_\be(const _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba& camera,\n-312 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> Dcamera = boost::none,\n-313 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dother = boost::none) const {\n-314 return _\br_\ba_\bn_\bg_\be(camera._\bp_\bo_\bs_\be(), Dcamera, Dother);\n-315 }\n-316\n-_\b3_\b1_\b8 Matrix34 _\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx() const {\n-319 return K_.K() * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be()._\bi_\bn_\bv_\be_\br_\bs_\be()._\bm_\ba_\bt_\br_\bi_\bx().block(0, 0, 3, 4);\n-320 }\n-321\n-_\b3_\b2_\b3 Vector _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba() const {\n-324 return Eigen::Matrix::dimension,1>::Constant(2.0 *\n-K_.fx());;\n-325 }\n-326\n-327private:\n-328\n-_\b3_\b3_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-331 template\n-332 void serialize(Archive & ar, const unsigned int /*version*/) {\n-333 ar\n-334 & boost::serialization::make_nvp(\"PinholeBaseK\",\n-335 boost::serialization::base_object(*this));\n-336 ar & BOOST_SERIALIZATION_NVP(K_);\n-337 }\n-338\n-339public:\n-340 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-341};\n-342\n-343// manifold traits\n-344\n-345template \n-_\b3_\b4_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba >\n-347 : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd > {};\n-348\n-349template \n-_\b3_\b5_\b0struct _\bt_\br_\ba_\bi_\bt_\bs >\n-351 : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd > {};\n-352\n-353// range traits, used in RangeFactor\n-354template \n-_\b3_\b5_\b5struct _\bR_\ba_\bn_\bg_\be<_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba, T> :\n-_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be, T, double> {};\n-356\n-357} // \\ gtsam\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n-Bearing-Range product.\n-_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b._\bh\n-Pinhole camera with known calibration.\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bS_\bO_\b3_\b._\bh\n+3*3 matrix representation of SO(3)\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-TangentVector localCoordinates(const Class &g) const\n-localCoordinates as required by manifold concept: finds tangent vector between\n-*this and g\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-Both ManifoldTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-Give fixed size dimension of a type, fails at compile time if dynamic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+Group operator syntax flavors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+tag to assert a type is a Lie group\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:164\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:194\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bp_\bo_\bs_\be\n-static Matrix26 Dpose(const Point2 &pn, double d)\n-Calculate Jacobian with respect to pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"PinholeBase\") const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be\n-const Pose3 & pose() const\n-return pose, constant version\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl_\bP_\bo_\bs_\be\n-static Pose3 LevelPose(const Pose2 &pose2, double height)\n-Create a level pose at the given 2D pose and height.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const PinholeBase &camera, double tol=1e-9) const\n-assert equality up to a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bp_\bo_\bi_\bn_\bt\n-static Matrix23 Dpoint(const Point2 &pn, double d, const Matrix3 &Rt)\n-Calculate Jacobian with respect to point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt_\bP_\bo_\bs_\be\n-static Pose3 LookatPose(const Point3 &eye, const Point3 &target, const Point3\n-&upVector)\n-Create a camera pose at the given eye position looking at a target point in the\n-scene with the specif...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n-A Calibrated camera class [R|-R't], calibration K=I.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:247\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n-A pinhole camera class that has a Pose3 and a Calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"PinholeCamera\") const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\b__\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n-Point2 _project2(const POINT &pw, OptionalJacobian< 2, dimension > Dcamera,\n-OptionalJacobian< 2, FixedDimension< POINT >::value > Dpoint) const\n-Templated projection of a 3D point or a point at infinity into the image.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:230\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba\n-Vector defaultErrorWhenTriangulatingBehindCamera() const\n-for Nonlinear Triangulation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:323\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-const Calibration & calibration() const override\n-return calibration\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:178\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bg_\be_\bt_\bP_\bo_\bs_\be\n-const Pose3 & getPose(OptionalJacobian< 6, dimension > H) const\n-return pose, with derivative\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:169\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n-Point2 project2(const Point3 &pw, OptionalJacobian< 2, dimension >\n-Dcamera=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const\n-project a 3D point from world coordinates into the image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:245\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n-PinholeCamera(const Pose3 &pose)\n-constructor with pose\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bL_\be_\bv_\be_\bl\n-static PinholeCamera Level(const Pose2 &pose2, double height)\n-PinholeCamera::level with default calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n-PinholeCamera(const Pose3 &pose, const Calibration &K)\n-constructor with pose and calibration\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bL_\be_\bv_\be_\bl\n-static PinholeCamera Level(const Calibration &K, const Pose2 &pose2, double\n-height)\n-Create a level camera at the given 2D pose and height.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:187\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static PinholeCamera Identity()\n-for Canonical\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:216\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const Base &camera, double tol=1e-9) const\n-assert equality up to a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:145\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const Pose3 &pose, OptionalJacobian< 1, dimension >\n-Dcamera=boost::none, OptionalJacobian< 1, 6 > Dpose=boost::none) const\n-Calculate range to another pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:275\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const PinholeCamera< CalibrationB > &camera, OptionalJacobian< 1,\n-dimension > Dcamera=boost::none, OptionalJacobian< 1, 6+CalibrationB::dimension\n-> Dother=boost::none) const\n-Calculate range to another camera.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:290\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n-PinholeCamera(const Vector &v, const Vector &K)\n-Init from Vector and calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt\n-static PinholeCamera Lookat(const Point3 &eye, const Point3 &target, const\n-Point3 &upVector, const Calibration &K=Calibration())\n-Create a camera at the given eye position looking at a target point in the\n-scene with the specified u...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx\n-Matrix34 cameraProjectionMatrix() const\n-for Linear Triangulation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:318\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-VectorK6 localCoordinates(const PinholeCamera &T2) const\n-return canonical coordinate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:208\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-PinholeCamera retract(const Vector &d) const\n-move a cameras according to d\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:199\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:330\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n-Point2 project2(const Unit3 &pw, OptionalJacobian< 2, dimension >\n-Dcamera=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const\n-project a point at infinity from world coordinates into the image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:251\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\bo_\bs_\be\n-const Pose3 & pose() const\n-return pose\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n-PinholeCamera(const Vector &v)\n-Init from vector, can be 6D (default calibration) or dim.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n-PinholeCamera()\n-default constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-Point2 Measurement\n-Some classes template on either PinholeCamera or StereoCamera, and this typedef\n-informs those classes...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const CalibratedCamera &camera, OptionalJacobian< 1, dimension >\n-Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const\n-Calculate range to a calibrated camera.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:311\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const Point3 &point, OptionalJacobian< 1, dimension >\n-Dcamera=boost::none, OptionalJacobian< 1, 3 > Dpoint=boost::none) const\n-Calculate range to a landmark.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:261\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK\n-A pinhole camera class that has a Pose3 and a fixed Calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\b _\b>_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n-Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n-OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK >\n-Dcal=boost::none) const\n-project a 3D point from world coordinates into the image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-A 2D pose (Point2,Rot2)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none,\n-OptionalJacobian< 1, 3 > Hpoint=boost::none) const\n-Calculate range to a landmark.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:399\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-Matrix4 matrix() const\n-convert to 4*4 matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:323\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n-Pose3 inverse() const\n-inverse transformation with derivatives\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bQ_\bU_\bA_\bT_\bE_\bR_\bN_\bI_\bO_\bN_\b__\bT_\bY_\bP_\bE_\b _\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n+static Q Expmap(const Eigen::Ref< const TangentVector > &omega, ChartJacobian\n+H=boost::none)\n+Exponential map, using the inlined code from Eigen's conversion from axis/\n+angle.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Quaternion.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bQ_\bU_\bA_\bT_\bE_\bR_\bN_\bI_\bO_\bN_\b__\bT_\bY_\bP_\bE_\b _\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp\n+static TangentVector Logmap(const Q &q, ChartJacobian H=boost::none)\n+We use our own Logmap, as there is a slight bug in Eigen.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Quaternion.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+static MatrixDD ExpmapDerivative(const TangentVector &omega)\n+Derivative of Expmap, currently only defined for SO3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+static MatrixDD LogmapDerivative(const TangentVector &omega)\n+Derivative of Logmap, currently only defined for SO3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:82\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+ * _\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00461.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00461.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h File Reference\n \n \n \n \n \n \n \n@@ -95,50 +95,116 @@\n \n \n \n \n
\n \n-
Similarity2.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
SO3.h File Reference
\n \n
\n \n-

Implementation of Similarity2 transform. \n+

3*3 matrix representation of SO(3) \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n-\n+\n \n-\n+\n \n

\n Classes

class  gtsam::Similarity2
 2D similarity transform More...
class  gtsam::so3::ExpmapFunctor
 Functor implementing Exponential map. More...
 
struct  gtsam::Similarity2::ChartAtOrigin
 Chart at the origin. More...
class  gtsam::so3::DexpFunctor
 Functor that implements Exponential map and its derivatives. More...
 
struct  gtsam::traits< Similarity2 >
struct  gtsam::traits< SO3 >
 
struct  gtsam::traits< const Similarity2 >
struct  gtsam::traits< const SO3 >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Typedefs

\n+using gtsam::SO3 = SO< 3 >
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+template<class Archive >
void gtsam::serialize (Archive &ar, SO3 &R, const unsigned int)
 Serialization function.
 
GTSAM_EXPORT Matrix3 gtsam::so3::compose (const Matrix3 &M, const SO3 &R, OptionalJacobian< 9, 9 > H=boost::none)
 Compose general matrix with an SO(3) element.
 
\n+GTSAM_EXPORT Matrix99 gtsam::so3::Dcompose (const SO3 &R)
 (constant) Jacobian of compose wrpt M
 
\n

Detailed Description

\n-

Implementation of Similarity2 transform.

\n-
Author
John Lambert, Varun Agrawal
\n-
\n+

3*3 matrix representation of SO(3)

\n+
Author
Frank Dellaert
\n+
\n+Luca Carlone
\n+
\n+Duy Nguyen Ta
\n+
Date
December 2014
\n+

Function Documentation

\n+\n+

◆ compose()

\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+
GTSAM_EXPORT Matrix3 gtsam::so3::compose (const Matrix3 & M,
const SO3R,
OptionalJacobian< 9, 9 > H = boost::none 
)
\n+
\n+\n+

Compose general matrix with an SO(3) element.

\n+

We only provide the 9*9 derivative in the first argument M.

\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,61 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Similarity2.h File Reference\n-Implementation of Similarity2 transform. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SO3.h File Reference\n+3*3 matrix representation of SO(3) _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2\n-\u00a0 2D similarity transform _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+\u00a0 Functor implementing Exponential map. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-\u00a0 Chart at the origin. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+\u00a0 Functor that implements Exponential map a\ban\bnd\bd its derivatives. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bO_\b3_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bO_\b3_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSO\bO3\b3 = _\bS_\bO< 3 >\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (Archive &ar, _\bS_\bO_\b3 &R, const unsigned\n+ int)\n+\u00a0 Serialization function.\n+\u00a0\n+ GTSAM_EXPORT Matrix3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bc_\bo_\bm_\bp_\bo_\bs_\be (const Matrix3 &M, const _\bS_\bO_\b3 &R,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 9, 9 > H=boost::none)\n+\u00a0 Compose general matrix with an SO(3) element.\n+\u00a0\n+GTSAM_EXPORT Matrix99\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bso\bo3\b3:\b::\b:D\bDc\bco\bom\bmp\bpo\bos\bse\be (const _\bS_\bO_\b3 &R)\n+\u00a0 (constant) Jacobian of compose wrpt M\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implementation of Similarity2 transform.\n+3*3 matrix representation of SO(3)\n Author\n- John Lambert, Varun Agrawal\n+ Frank Dellaert\n+ Luca Carlone\n+ Duy Nguyen Ta\n+ Date\n+ December 2014\n+*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0c\bco\bom\bmp\bpo\bos\bse\be(\b()\b) *\b**\b**\b**\b**\b*\n+GTSAM_EXPORT Matrix3 gtsam::so3:: ( const Matrix3 &\u00a0 M\bM,\n+compose\n+ const _\bS_\bO_\b3 &\u00a0 R\bR,\n+ _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 9, 9 >\u00a0 H\bH = boost::none\u00a0\n+ )\n+Compose general matrix with an SO(3) element.\n+We only provide the 9*9 derivative in the first argument M.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b._\bh\n+ * _\bS_\bO_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00461.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00461.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,9 @@\n var a00461 = [\n- [\"gtsam::Similarity2\", \"a03248.html\", \"a03248\"],\n- [\"gtsam::Similarity2::ChartAtOrigin\", \"a03252.html\", null],\n- [\"gtsam::traits< Similarity2 >\", \"a03256.html\", null],\n- [\"gtsam::traits< const Similarity2 >\", \"a03260.html\", null]\n+ [\"gtsam::so3::ExpmapFunctor\", \"a03280.html\", \"a03280\"],\n+ [\"gtsam::so3::DexpFunctor\", \"a03284.html\", \"a03284\"],\n+ [\"gtsam::traits< SO3 >\", \"a03288.html\", null],\n+ [\"gtsam::traits< const SO3 >\", \"a03292.html\", null],\n+ [\"compose\", \"a00461.html#a72fc8b10f24d82aa8a4c99f99403fe5e\", null],\n+ [\"Dcompose\", \"a00461.html#a7c7e26b6d07ec0f16363c196247b294d\", null],\n+ [\"serialize\", \"a00461.html#a2e0b14126ed42ee95ca5f5f092c5bc84\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00461_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00461_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h Source File\n \n \n \n \n \n \n \n@@ -98,167 +98,211 @@\n
No Matches
\n \n \n \n \n \n
\n-
Similarity2.h
\n+
SO3.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Lie.h>
\n-
21#include <gtsam/base/Manifold.h>
\n-
22#include <gtsam/dllexport.h>
\n-\n-\n-
25#include <gtsam/geometry/Rot2.h>
\n-
26
\n-
27namespace gtsam {
\n+
21#pragma once
\n+
22
\n+
23#include <gtsam/geometry/SOn.h>
\n+
24
\n+
25#include <gtsam/base/Lie.h>
\n+
26#include <gtsam/base/Matrix.h>
\n+
27#include <gtsam/dllexport.h>
\n
28
\n-
29// Forward declarations
\n-
30class Pose2;
\n+
29#include <cmath>
\n+
30#include <vector>
\n
31
\n-
\n-
35class GTSAM_EXPORT Similarity2 : public LieGroup<Similarity2, 4> {
\n-
38 typedef Rot2 Rotation;
\n-
39 typedef Point2 Translation;
\n-
41
\n-
42 private:
\n-
43 Rot2 R_;
\n-
44 Point2 t_;
\n-
45 double s_;
\n+
32namespace gtsam {
\n+
33
\n+
34using SO3 = SO<3>;
\n+
35
\n+
36// Below are all declarations of SO<3> specializations.
\n+
37// They are *defined* in SO3.cpp.
\n+
38
\n+
39template <>
\n+
40GTSAM_EXPORT
\n+
41SO3 SO3::AxisAngle(const Vector3& axis, double theta);
\n+
42
\n+
43template <>
\n+
44GTSAM_EXPORT
\n+
45SO3 SO3::ClosestTo(const Matrix3& M);
\n
46
\n-
47 public:
\n+
47template <>
\n+
48GTSAM_EXPORT
\n+
49SO3 SO3::ChordalMean(const std::vector<SO3>& rotations);
\n
50
\n-\n-
53
\n-
55 Similarity2(double s);
\n-
56
\n-
58 Similarity2(const Rot2& R, const Point2& t, double s);
\n-
59
\n-
61 Similarity2(const Matrix2& R, const Vector2& t, double s);
\n+
51template <>
\n+
52GTSAM_EXPORT
\n+
53Matrix3 SO3::Hat(const Vector3& xi);
\n+
54
\n+
55template <>
\n+
56GTSAM_EXPORT
\n+
57Vector3 SO3::Vee(const Matrix3& X);
\n+
58
\n+
60template <>
\n+
61Matrix3 SO3::AdjointMap() const;
\n
62
\n-
64 Similarity2(const Matrix3& T);
\n-
65
\n-
69
\n-
71 bool equals(const Similarity2& sim, double tol) const;
\n-
72
\n-
74 bool operator==(const Similarity2& other) const;
\n+
67template <>
\n+
68GTSAM_EXPORT
\n+
69SO3 SO3::Expmap(const Vector3& omega, ChartJacobian H);
\n+
70
\n+
72template <>
\n+
73GTSAM_EXPORT
\n+
74Matrix3 SO3::ExpmapDerivative(const Vector3& omega);
\n
75
\n-
77 void print(const std::string& s) const;
\n-
78
\n-
79 friend std::ostream& operator<<(std::ostream& os, const Similarity2& p);
\n-
80
\n-
84
\n-
86 static Similarity2 Identity();
\n-
87
\n-
89 Similarity2 operator*(const Similarity2& S) const;
\n-
90
\n-
92 Similarity2 inverse() const;
\n+
80template <>
\n+
81GTSAM_EXPORT
\n+
82Vector3 SO3::Logmap(const SO3& R, ChartJacobian H);
\n+
83
\n+
85template <>
\n+
86GTSAM_EXPORT
\n+
87Matrix3 SO3::LogmapDerivative(const Vector3& omega);
\n+
88
\n+
89// Chart at origin for SO3 is *not* Cayley but actual Expmap/Logmap
\n+
90template <>
\n+
91GTSAM_EXPORT
\n+
92SO3 SO3::ChartAtOrigin::Retract(const Vector3& omega, ChartJacobian H);
\n
93
\n+
94template <>
\n+
95GTSAM_EXPORT
\n+
96Vector3 SO3::ChartAtOrigin::Local(const SO3& R, ChartJacobian H);
\n
97
\n-
99 Point2 transformFrom(const Point2& p) const;
\n-
100
\n-
112 Pose2 transformFrom(const Pose2& T) const;
\n-
113
\n-
114 /* syntactic sugar for transformFrom */
\n-
115 Point2 operator*(const Point2& p) const;
\n+
98template <>
\n+
99GTSAM_EXPORT
\n+
100Vector9 SO3::vec(OptionalJacobian<9, 3> H) const;
\n+
101
\n+
103template <class Archive>
\n+
\n+
104void serialize(Archive& ar, SO3& R, const unsigned int /*version*/) {
\n+
105 Matrix3& M = R.matrix_;
\n+
106 ar& boost::serialization::make_nvp("R11", M(0, 0));
\n+
107 ar& boost::serialization::make_nvp("R12", M(0, 1));
\n+
108 ar& boost::serialization::make_nvp("R13", M(0, 2));
\n+
109 ar& boost::serialization::make_nvp("R21", M(1, 0));
\n+
110 ar& boost::serialization::make_nvp("R22", M(1, 1));
\n+
111 ar& boost::serialization::make_nvp("R23", M(1, 2));
\n+
112 ar& boost::serialization::make_nvp("R31", M(2, 0));
\n+
113 ar& boost::serialization::make_nvp("R32", M(2, 1));
\n+
114 ar& boost::serialization::make_nvp("R33", M(2, 2));
\n+
115}
\n+
\n
116
\n-
120 static Similarity2 Align(const Point2Pairs& abPointPairs);
\n-
121
\n-
135 static Similarity2 Align(const Pose2Pairs& abPosePairs);
\n-
136
\n+
117namespace so3 {
\n+
118
\n+
123GTSAM_EXPORT Matrix3 compose(const Matrix3& M, const SO3& R,
\n+
124 OptionalJacobian<9, 9> H = boost::none);
\n+
125
\n+
127GTSAM_EXPORT Matrix99 Dcompose(const SO3& R);
\n+
128
\n+
129// Below are two functors that allow for saving computation when exponential map
\n+
130// and its derivatives are needed at the same location in so<3>. The second
\n+
131// functor also implements dedicated methods to apply dexp and/or inv(dexp).
\n+
132
\n+
\n+
134class GTSAM_EXPORT ExpmapFunctor {
\n+
135 protected:
\n+
136 const double theta2;
\n+
137 Matrix3 W, K, KK;
\n+
138 bool nearZero;
\n+
139 double theta, sin_theta, one_minus_cos; // only defined if !nearZero
\n
140
\n-
145 static Vector4 Logmap(const Similarity2& S, //
\n-
146 OptionalJacobian<4, 4> Hm = boost::none);
\n-
147
\n-
149 static Similarity2 Expmap(const Vector4& v, //
\n-
150 OptionalJacobian<4, 4> Hm = boost::none);
\n-
151
\n-
\n-\n-
154 static Similarity2 Retract(const Vector4& v,
\n-
155 ChartJacobian H = boost::none) {
\n-
156 return Similarity2::Expmap(v, H);
\n-
157 }
\n-
158 static Vector4 Local(const Similarity2& other,
\n-
159 ChartJacobian H = boost::none) {
\n-
160 return Similarity2::Logmap(other, H);
\n-
161 }
\n-
162 };
\n+
141 void init(bool nearZeroApprox = false);
\n+
142
\n+
143 public:
\n+
145 explicit ExpmapFunctor(const Vector3& omega, bool nearZeroApprox = false);
\n+
146
\n+
148 ExpmapFunctor(const Vector3& axis, double angle, bool nearZeroApprox = false);
\n+
149
\n+
151 SO3 expmap() const;
\n+
152};
\n
\n+
153
\n+
\n+\n+
156 const Vector3 omega;
\n+
157 double a, b;
\n+
158 Matrix3 dexp_;
\n+
159
\n+
160 public:
\n+
162 GTSAM_EXPORT explicit DexpFunctor(const Vector3& omega, bool nearZeroApprox = false);
\n
163
\n-
165 Matrix4 AdjointMap() const;
\n-
166
\n-
167 using LieGroup<Similarity2, 4>::inverse;
\n-
168
\n-
172
\n-
174 Matrix3 matrix() const;
\n+
164 // NOTE(luca): Right Jacobian for Exponential map in SO(3) - equation
\n+
165 // (10.86) and following equations in G.S. Chirikjian, "Stochastic Models,
\n+
166 // Information Theory, and Lie Groups", Volume 2, 2008.
\n+
167 // expmap(omega + v) \\approx expmap(omega) * expmap(dexp * v)
\n+
168 // This maps a perturbation v in the tangent space to
\n+
169 // a perturbation on the manifold Expmap(dexp * v) */
\n+
170 const Matrix3& dexp() const { return dexp_; }
\n+
171
\n+
173 GTSAM_EXPORT Vector3 applyDexp(const Vector3& v, OptionalJacobian<3, 3> H1 = boost::none,
\n+
174 OptionalJacobian<3, 3> H2 = boost::none) const;
\n
175
\n-
177 Rot2 rotation() const { return R_; }
\n-
178
\n-
180 Point2 translation() const { return t_; }
\n-
181
\n-
183 double scale() const { return s_; }
\n-
184
\n-
186 inline static size_t Dim() { return 4; }
\n-
187
\n-
189 inline size_t dim() const { return 4; }
\n-
190
\n-
192};
\n-
\n-
193
\n-
194template <>
\n-
195struct traits<Similarity2> : public internal::LieGroup<Similarity2> {};
\n-
196
\n-
197template <>
\n-
198struct traits<const Similarity2> : public internal::LieGroup<Similarity2> {};
\n-
199
\n-
200} // namespace gtsam
\n-
Base class and basic functions for Manifold types.
\n-
Base class and basic functions for Lie types.
\n-
2D Pose
\n-
2D rotation
\n-
2D Point
\n+
177 GTSAM_EXPORT Vector3 applyInvDexp(const Vector3& v,
\n+
178 OptionalJacobian<3, 3> H1 = boost::none,
\n+
179 OptionalJacobian<3, 3> H2 = boost::none) const;
\n+
180};
\n+
\n+
181} // namespace so3
\n+
182
\n+
183/*
\n+
184 * Define the traits. internal::LieGroup provides both Lie group and Testable
\n+
185 */
\n+
186
\n+
187template <>
\n+
188struct traits<SO3> : public internal::LieGroup<SO3> {};
\n+
189
\n+
190template <>
\n+
191struct traits<const SO3> : public internal::LieGroup<SO3> {};
\n+
192
\n+
193} // end namespace gtsam
\n+
Base class and basic functions for Lie types.
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
N*N matrix representation of SO(N).
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition Matrix.h:100
\n+
std::string serialize(const T &input)
serializes to a string
Definition serialization.h:113
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n+
static SO< N > Retract(const TangentVector &v)
Retract at origin: possible in Lie group because it has an identity.
Definition Lie.h:111
\n
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n-
Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.
Definition Rot2.h:36
\n-
2D similarity transform
Definition Similarity2.h:35
\n-
Point2 translation() const
Return a GTSAM translation.
Definition Similarity2.h:180
\n-
double scale() const
Return the scale.
Definition Similarity2.h:183
\n-
static size_t Dim()
Dimensionality of tangent space = 4 DOF - used to autodetect sizes.
Definition Similarity2.h:186
\n-
Rot2 rotation() const
Return a GTSAM rotation.
Definition Similarity2.h:177
\n-
size_t dim() const
Dimensionality of tangent space = 4 DOF.
Definition Similarity2.h:189
\n-
Chart at the origin.
Definition Similarity2.h:153
\n+
Functor implementing Exponential map.
Definition SO3.h:134
\n+
Functor that implements Exponential map and its derivatives.
Definition SO3.h:155
\n+
GTSAM_EXPORT Vector3 applyDexp(const Vector3 &v, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
Multiplies with dexp(), with optional derivatives.
Definition SO3.cpp:101
\n+
GTSAM_EXPORT Vector3 applyInvDexp(const Vector3 &v, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
Multiplies with dexp().inverse(), with optional derivatives.
Definition SO3.cpp:120
\n+\n+
static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates.
Definition SOn-inl.h:67
\n+
VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::none) const
Return vectorized rotation matrix in column order.
Definition SOn-inl.h:88
\n+
static SO ChordalMean(const std::vector< SO > &rotations)
Named constructor that finds chordal mean , currently only defined for SO3.
\n+
static TangentVector Vee(const MatrixNN &X)
Inverse of Hat. See note about xi element order in Hat.
Definition SOn-inl.h:35
\n+
static TangentVector Logmap(const SO &R, ChartJacobian H=boost::none)
Log map at identity - returns the canonical coordinates of this rotation.
Definition SOn-inl.h:77
\n+
static SO AxisAngle(const Vector3 &axis, double theta)
Constructor from axis and angle. Only defined for SO3.
\n+
MatrixDD AdjointMap() const
Adjoint map.
Definition SO4.cpp:159
\n+
static MatrixNN Hat(const TangentVector &xi)
Hat operator creates Lie algebra element corresponding to d-vector, where d is the dimensionality of ...
Definition SOn-inl.h:29
\n+
static MatrixDD ExpmapDerivative(const TangentVector &omega)
Derivative of Expmap, currently only defined for SO3.
Definition SOn-inl.h:72
\n+
static MatrixDD LogmapDerivative(const TangentVector &omega)
Derivative of Logmap, currently only defined for SO3.
Definition SOn-inl.h:82
\n+
static SO ClosestTo(const MatrixNN &M)
Named constructor that finds SO(n) matrix closest to M in Frobenius norm, currently only defined for ...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,212 +1,266 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Similarity2.h\n+SO3.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-22#include \n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b2_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n-26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\bn_\b._\bh>\n+24\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+27#include \n 28\n-29// Forward declarations\n-30class Pose2;\n+29#include \n+30#include \n 31\n-_\b3_\b5class GTSAM_EXPORT _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 : public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n-38 typedef _\bR_\bo_\bt_\b2 _\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn;\n-39 typedef _\bP_\bo_\bi_\bn_\bt_\b2 Translation;\n-41\n-42 private:\n-43 _\bR_\bo_\bt_\b2 R_;\n-44 _\bP_\bo_\bi_\bn_\bt_\b2 t_;\n-45 double s_;\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+34using SO3 = SO<3>;\n+35\n+36// Below are all declarations of SO<3> specializations.\n+37// They are *defined* in SO3.cpp.\n+38\n+39template <>\n+40GTSAM_EXPORT\n+41SO3 _\bS_\bO_\b3_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be(const Vector3& axis, double theta);\n+42\n+43template <>\n+44GTSAM_EXPORT\n+45SO3 _\bS_\bO_\b3_\b:_\b:_\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo(const Matrix3& M);\n 46\n-47 public:\n+47template <>\n+48GTSAM_EXPORT\n+49SO3 _\bS_\bO_\b3_\b:_\b:_\bC_\bh_\bo_\br_\bd_\ba_\bl_\bM_\be_\ba_\bn(const std::vector& rotations);\n 50\n-52 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2();\n-53\n-55 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2(double s);\n-56\n-58 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2(const _\bR_\bo_\bt_\b2& R, const _\bP_\bo_\bi_\bn_\bt_\b2& t, double s);\n-59\n-61 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2(const Matrix2& R, const Vector2& t, double s);\n+51template <>\n+52GTSAM_EXPORT\n+53Matrix3 _\bS_\bO_\b3_\b:_\b:_\bH_\ba_\bt(const Vector3& xi);\n+54\n+55template <>\n+56GTSAM_EXPORT\n+57Vector3 _\bS_\bO_\b3_\b:_\b:_\bV_\be_\be(const Matrix3& X);\n+58\n+60template <>\n+61Matrix3 _\bS_\bO_\b3_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const;\n 62\n-64 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2(const Matrix3& T);\n-65\n-69\n-71 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& sim, double tol) const;\n-72\n-74 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& other) const;\n+67template <>\n+68GTSAM_EXPORT\n+69SO3 _\bS_\bO_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(const Vector3& omega, ChartJacobian H);\n+70\n+72template <>\n+73GTSAM_EXPORT\n+74Matrix3 _\bS_\bO_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const Vector3& omega);\n 75\n-77 void _\bp_\br_\bi_\bn_\bt(const std::string& s) const;\n-78\n-79 friend std::ostream& operator<<(std::ostream& os, const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& p);\n-80\n-84\n-86 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Identity();\n-87\n-89 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& S) const;\n-90\n-92 _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 inverse() const;\n+80template <>\n+81GTSAM_EXPORT\n+82Vector3 _\bS_\bO_\b3_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(const SO3& R, ChartJacobian H);\n+83\n+85template <>\n+86GTSAM_EXPORT\n+87Matrix3 _\bS_\bO_\b3_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const Vector3& omega);\n+88\n+89// Chart at origin for SO3 is *not* Cayley but actual Expmap/Logmap\n+90template <>\n+91GTSAM_EXPORT\n+92SO3 _\bS_\bO_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(const Vector3& omega, ChartJacobian H);\n 93\n+94template <>\n+95GTSAM_EXPORT\n+96Vector3 SO3::ChartAtOrigin::Local(const SO3& R, ChartJacobian H);\n 97\n-99 _\bP_\bo_\bi_\bn_\bt_\b2 transformFrom(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n-100\n-112 _\bP_\bo_\bs_\be_\b2 transformFrom(const _\bP_\bo_\bs_\be_\b2& T) const;\n-113\n-114 /* syntactic sugar for transformFrom */\n-115 _\bP_\bo_\bi_\bn_\bt_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const;\n+98template <>\n+99GTSAM_EXPORT\n+100Vector9 _\bS_\bO_\b3_\b:_\b:_\bv_\be_\bc(OptionalJacobian<9, 3> H) const;\n+101\n+103template \n+_\b1_\b0_\b4void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(Archive& ar, _\bS_\bO_\b3& R, const unsigned int /*version*/) {\n+105 Matrix3& M = R.matrix_;\n+106 ar& boost::serialization::make_nvp(\"R11\", M(0, 0));\n+107 ar& boost::serialization::make_nvp(\"R12\", M(0, 1));\n+108 ar& boost::serialization::make_nvp(\"R13\", M(0, 2));\n+109 ar& boost::serialization::make_nvp(\"R21\", M(1, 0));\n+110 ar& boost::serialization::make_nvp(\"R22\", M(1, 1));\n+111 ar& boost::serialization::make_nvp(\"R23\", M(1, 2));\n+112 ar& boost::serialization::make_nvp(\"R31\", M(2, 0));\n+113 ar& boost::serialization::make_nvp(\"R32\", M(2, 1));\n+114 ar& boost::serialization::make_nvp(\"R33\", M(2, 2));\n+115}\n 116\n-120 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Align(const Point2Pairs& abPointPairs);\n-121\n-135 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Align(const Pose2Pairs& abPosePairs);\n-136\n+117namespace so3 {\n+118\n+123GTSAM_EXPORT Matrix3 compose(const Matrix3& M, const SO3& R,\n+124 OptionalJacobian<9, 9> H = boost::none);\n+125\n+127GTSAM_EXPORT Matrix99 Dcompose(const SO3& R);\n+128\n+129// Below are two functors that allow for saving computation when exponential\n+map\n+130// and its derivatives are needed at the same location in so<3>. The second\n+131// functor also implements dedicated methods to apply dexp and/or inv(dexp).\n+132\n+_\b1_\b3_\b4class GTSAM_EXPORT _\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br {\n+135 protected:\n+136 const double theta2;\n+137 Matrix3 W, K, KK;\n+138 bool nearZero;\n+139 double theta, sin_theta, one_minus_cos; // only defined if !nearZero\n 140\n-145 static Vector4 Logmap(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& S, //\n-146 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Hm = boost::none);\n-147\n-149 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Expmap(const Vector4& v, //\n-150 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b4_\b,_\b _\b4_\b> Hm = boost::none);\n-151\n-_\b1_\b5_\b3 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n-154 static _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2 Retract(const Vector4& v,\n-155 ChartJacobian H = boost::none) {\n-156 return Similarity2::Expmap(v, H);\n-157 }\n-158 static Vector4 Local(const _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2& other,\n-159 ChartJacobian H = boost::none) {\n-160 return Similarity2::Logmap(other, H);\n-161 }\n-162 };\n+141 void init(bool nearZeroApprox = false);\n+142\n+143 public:\n+145 explicit _\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br(const Vector3& omega, bool nearZeroApprox = false);\n+146\n+148 _\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br(const Vector3& axis, double angle, bool nearZeroApprox =\n+false);\n+149\n+151 _\bS_\bO_\b3 expmap() const;\n+152};\n+153\n+_\b1_\b5_\b5class _\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br : public _\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br {\n+156 const Vector3 omega;\n+157 double a, b;\n+158 Matrix3 dexp_;\n+159\n+160 public:\n+162 GTSAM_EXPORT explicit _\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br(const Vector3& omega, bool nearZeroApprox\n+= false);\n 163\n-165 Matrix4 AdjointMap() const;\n-166\n-167 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2, 4>::inverse;\n-168\n-172\n-174 Matrix3 matrix() const;\n+164 // NOTE(luca): Right Jacobian for Exponential map in SO(3) - equation\n+165 // (10.86) and following equations in G.S. Chirikjian, \"Stochastic Models,\n+166 // Information Theory, and Lie Groups\", Volume 2, 2008.\n+167 // expmap(omega + v) \\approx expmap(omega) * expmap(dexp * v)\n+168 // This maps a perturbation v in the tangent space to\n+169 // a perturbation on the manifold Expmap(dexp * v) */\n+170 const Matrix3& dexp() const { return dexp_; }\n+171\n+173 GTSAM_EXPORT Vector3 _\ba_\bp_\bp_\bl_\by_\bD_\be_\bx_\bp(const Vector3& v, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H1\n+= boost::none,\n+174 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const;\n 175\n-_\b1_\b7_\b7 _\bR_\bo_\bt_\b2 _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn() const { return R_; }\n-178\n-_\b1_\b8_\b0 _\bP_\bo_\bi_\bn_\bt_\b2 _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn() const { return t_; }\n-181\n-_\b1_\b8_\b3 double _\bs_\bc_\ba_\bl_\be() const { return s_; }\n-184\n-_\b1_\b8_\b6 inline static size_t _\bD_\bi_\bm() { return 4; }\n-187\n-_\b1_\b8_\b9 inline size_t _\bd_\bi_\bm() const { return 4; }\n-190\n-192};\n-193\n-194template <>\n-_\b1_\b9_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-196\n-197template <>\n-_\b1_\b9_\b8struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-{};\n-199\n-200} // namespace gtsam\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n+177 GTSAM_EXPORT Vector3 _\ba_\bp_\bp_\bl_\by_\bI_\bn_\bv_\bD_\be_\bx_\bp(const Vector3& v,\n+178 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H1 = boost::none,\n+179 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const;\n+180};\n+181} // namespace so3\n+182\n+183/*\n+184 * Define the traits. internal::LieGroup provides both Lie group and\n+Testable\n+185 */\n+186\n+187template <>\n+_\b1_\b8_\b8struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bO_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+189\n+190template <>\n+_\b1_\b9_\b1struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+192\n+193} // end namespace gtsam\n _\bL_\bi_\be_\b._\bh\n Base class and basic functions for Lie types.\n-_\bP_\bo_\bs_\be_\b2_\b._\bh\n-2D Pose\n-_\bR_\bo_\bt_\b2_\b._\bh\n-2D rotation\n-_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-2D Point\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bS_\bO_\bn_\b._\bh\n+N*N matrix representation of SO(N).\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Point2 operator*(double s, const Point2 &p)\n-multiply with scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const Matrix &A, const Matrix &B)\n-equality is just equal_with_abs_tol 1e-9\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n+std::string serialize(const T &input)\n+serializes to a string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:113\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-A CRTP helper class that implements Lie group methods Prerequisites: methods\n-operator*,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bS_\bO_\b<_\b _\bN_\b _\b>_\b,_\b _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bS_\bO_\b(_\bN_\b)_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n+static SO< N > Retract(const TangentVector &v)\n+Retract at origin: possible in Lie group because it has an identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n Both LieGroupTraits and Testable.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-A 2D pose (Point2,Rot2)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2\n-Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2\n-2D similarity transform\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n-Point2 translation() const\n-Return a GTSAM translation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:180\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bs_\bc_\ba_\bl_\be\n-double scale() const\n-Return the scale.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:183\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-Dimensionality of tangent space = 4 DOF - used to autodetect sizes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-Rot2 rotation() const\n-Return a GTSAM rotation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-Dimensionality of tangent space = 4 DOF.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-Chart at the origin.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Similarity2.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+Functor implementing Exponential map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO3.h:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br\n+Functor that implements Exponential map and its derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO3.h:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by_\bD_\be_\bx_\bp\n+GTSAM_EXPORT Vector3 applyDexp(const Vector3 &v, OptionalJacobian< 3, 3 >\n+H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const\n+Multiplies with dexp(), with optional derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO3.cpp:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by_\bI_\bn_\bv_\bD_\be_\bx_\bp\n+GTSAM_EXPORT Vector3 applyInvDexp(const Vector3 &v, OptionalJacobian< 3, 3 >\n+H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const\n+Multiplies with dexp().inverse(), with optional derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO3.cpp:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n+static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)\n+Exponential map at identity - create a rotation from canonical coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bv_\be_\bc\n+VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::\n+none) const\n+Return vectorized rotation matrix in column order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bC_\bh_\bo_\br_\bd_\ba_\bl_\bM_\be_\ba_\bn\n+static SO ChordalMean(const std::vector< SO > &rotations)\n+Named constructor that finds chordal mean , currently only defined for SO3.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bV_\be_\be\n+static TangentVector Vee(const MatrixNN &X)\n+Inverse of Hat. See note about xi element order in Hat.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp\n+static TangentVector Logmap(const SO &R, ChartJacobian H=boost::none)\n+Log map at identity - returns the canonical coordinates of this rotation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be\n+static SO AxisAngle(const Vector3 &axis, double theta)\n+Constructor from axis and angle. Only defined for SO3.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n+MatrixDD AdjointMap() const\n+Adjoint map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO4.cpp:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bH_\ba_\bt\n+static MatrixNN Hat(const TangentVector &xi)\n+Hat operator creates Lie algebra element corresponding to d-vector, where d is\n+the dimensionality of ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+static MatrixDD ExpmapDerivative(const TangentVector &omega)\n+Derivative of Expmap, currently only defined for SO3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+static MatrixDD LogmapDerivative(const TangentVector &omega)\n+Derivative of Logmap, currently only defined for SO3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo\n+static SO ClosestTo(const MatrixNN &M)\n+Named constructor that finds SO(n) matrix closest to M in Frobenius norm,\n+currently only defined for ...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b2_\b._\bh\n+ * _\bS_\bO_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00464.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00464.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Line3.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2Stereo.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,57 +94,42 @@\n \n \n \n \n \n
\n \n-
Line3.h File Reference
\n+
Cal3_S2Stereo.cpp File Reference
\n
\n
\n \n-

4 dimensional manifold of 3D lines \n+

The most common 5DOF 3D->2D calibration + Stereo baseline. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::Line3
 A 3D line (R,a,b) : (Rot3,Scalar,Scalar) More...
 
struct  gtsam::traits< Line3 >
 
struct  gtsam::traits< const Line3 >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n+\n+\n

\n Functions

Line3 gtsam::transformTo (const Pose3 &wTc, const Line3 &wL, OptionalJacobian< 4, 6 > Dpose=boost::none, OptionalJacobian< 4, 4 > Dline=boost::none)
 Transform a line from world to camera frame.
 
\n+std::ostream & gtsam::operator<< (std::ostream &os, const Cal3_S2Stereo &cal)
 
\n

Detailed Description

\n-

4 dimensional manifold of 3D lines

\n-
Author
Akshay Krishnan
\n-
\n-Frank Dellaert
\n+

The most common 5DOF 3D->2D calibration + Stereo baseline.

\n+
Author
Chris Beall
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Line3.h File Reference\n-4 dimensional manifold of 3D lines _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\b3\n-\u00a0 A 3D line (R,a,b) : (_\bR_\bo_\bt_\b3,Scalar,Scalar) _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bL_\bi_\bn_\be_\b3_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bL_\bi_\bn_\be_\b3_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Cal3_S2Stereo.cpp File Reference\n+The most common 5DOF 3D->2D calibration + Stereo baseline. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-_\bL_\bi_\bn_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo (const _\bP_\bo_\bs_\be_\b3 &wTc, const _\bL_\bi_\bn_\be_\b3 &wL, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<\n- 4, 6 > Dpose=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 4, 4 > Dline=boost::none)\n-\u00a0 Transform a line from world to camera frame.\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo &cal)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-4 dimensional manifold of 3D lines\n+The most common 5DOF 3D->2D calibration + Stereo baseline.\n Author\n- Akshay Krishnan\n- Frank Dellaert\n+ Chris Beall\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bL_\bi_\bn_\be_\b3_\b._\bh\n+ * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00470.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00470.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2_Base.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,117 +94,41 @@\n \n \n \n \n \n
\n \n-
SO3.h File Reference
\n+
Cal3DS2_Base.cpp File Reference
\n
\n
\n-\n-

3*3 matrix representation of SO(3) \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::so3::ExpmapFunctor
 Functor implementing Exponential map. More...
 
class  gtsam::so3::DexpFunctor
 Functor that implements Exponential map and its derivatives. More...
 
struct  gtsam::traits< SO3 >
 
struct  gtsam::traits< const SO3 >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::SO3 = SO< 3 >
 
\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n

\n Functions

\n-template<class Archive >
void gtsam::serialize (Archive &ar, SO3 &R, const unsigned int)
 Serialization function.
 
GTSAM_EXPORT Matrix3 gtsam::so3::compose (const Matrix3 &M, const SO3 &R, OptionalJacobian< 9, 9 > H=boost::none)
 Compose general matrix with an SO(3) element.
 
\n-GTSAM_EXPORT Matrix99 gtsam::so3::Dcompose (const SO3 &R)
 (constant) Jacobian of compose wrpt M
 
\n+std::ostream & gtsam::operator<< (std::ostream &os, const Cal3DS2_Base &cal)
 
\n

Detailed Description

\n-

3*3 matrix representation of SO(3)

\n-
Author
Frank Dellaert
\n-
\n-Luca Carlone
\n+
Date
Feb 28, 2010
\n+
Author
ydjian
\n
\n-Duy Nguyen Ta
\n-
Date
December 2014
\n-

Function Documentation

\n-\n-

◆ compose()

\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-
GTSAM_EXPORT Matrix3 gtsam::so3::compose (const Matrix3 & M,
const SO3R,
OptionalJacobian< 9, 9 > H = boost::none 
)
\n-
\n-\n-

Compose general matrix with an SO(3) element.

\n-

We only provide the 9*9 derivative in the first argument M.

\n-\n-
\n-
\n-
\n+Varun Agrawal \n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,61 +1,24 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SO3.h File Reference\n-3*3 matrix representation of SO(3) _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-\u00a0 Functor implementing Exponential map. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-\u00a0 Functor that implements Exponential map a\ban\bnd\bd its derivatives. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bO_\b3_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bO_\b3_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Cal3DS2_Base.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSO\bO3\b3 = _\bS_\bO< 3 >\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (Archive &ar, _\bS_\bO_\b3 &R, const unsigned\n- int)\n-\u00a0 Serialization function.\n-\u00a0\n- GTSAM_EXPORT Matrix3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bc_\bo_\bm_\bp_\bo_\bs_\be (const Matrix3 &M, const _\bS_\bO_\b3 &R,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 9, 9 > H=boost::none)\n-\u00a0 Compose general matrix with an SO(3) element.\n-\u00a0\n-GTSAM_EXPORT Matrix99\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bso\bo3\b3:\b::\b:D\bDc\bco\bom\bmp\bpo\bos\bse\be (const _\bS_\bO_\b3 &R)\n-\u00a0 (constant) Jacobian of compose wrpt M\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be &cal)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-3*3 matrix representation of SO(3)\n- Author\n- Frank Dellaert\n- Luca Carlone\n- Duy Nguyen Ta\n Date\n- December 2014\n-*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0c\bco\bom\bmp\bpo\bos\bse\be(\b()\b) *\b**\b**\b**\b**\b*\n-GTSAM_EXPORT Matrix3 gtsam::so3:: ( const Matrix3 &\u00a0 M\bM,\n-compose\n- const _\bS_\bO_\b3 &\u00a0 R\bR,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 9, 9 >\u00a0 H\bH = boost::none\u00a0\n- )\n-Compose general matrix with an SO(3) element.\n-We only provide the 9*9 derivative in the first argument M.\n+ Feb 28, 2010\n+ Author\n+ ydjian\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\b3_\b._\bh\n+ * _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00476.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00476.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point2.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.h File Reference\n \n \n \n \n \n \n \n@@ -95,91 +95,50 @@\n \n \n \n \n
\n \n-
Point2.h File Reference
\n+Namespaces
\n+
Cal3Fisheye.h File Reference
\n \n
\n \n-

2D Point \n+

Calibration of a fisheye camera. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n+\n+\n+\n+\n \n

\n Classes

struct  gtsam::Range< Point2, Point2 >
class  gtsam::Cal3Fisheye
 Calibration of a fisheye camera. More...
 
struct  gtsam::traits< Cal3Fisheye >
 
struct  gtsam::traits< const Cal3Fisheye >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Typedefs

\n-typedef Vector2 gtsam::Point2
 As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2.
 
\n-using gtsam::Point2Pair = std::pair< Point2, Point2 >
 
\n-using gtsam::Point2Pairs = std::vector< Point2Pair >
 
\n-typedef std::vector< Point2, Eigen::aligned_allocator< Point2 > > gtsam::Point2Vector
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-ostream & gtsam::operator<< (ostream &os, const gtsam::Point2Pair &p)
 
\n-double gtsam::norm2 (const Point2 &p, OptionalJacobian< 1, 2 > H=boost::none)
 Distance of the point from the origin, with Jacobian.
 
\n-double gtsam::distance2 (const Point2 &p1, const Point2 &q, OptionalJacobian< 1, 2 > H1=boost::none, OptionalJacobian< 1, 2 > H2=boost::none)
 distance between two points
 
\n-Point2 gtsam::operator* (double s, const Point2 &p)
 multiply with scalar
 
\n-boost::optional< Point2gtsam::circleCircleIntersection (double R_d, double r_d, double tol)
 
\n-list< Point2gtsam::circleCircleIntersection (Point2 c1, Point2 c2, boost::optional< Point2 > fh)
 
\n-Point2Pair gtsam::means (const std::vector< Point2Pair > &abPointPairs)
 Calculate the two means of a set of Point2 pairs.
 
list< Point2gtsam::circleCircleIntersection (Point2 c1, double r1, Point2 c2, double r2, double tol=1e-9)
 Intersect 2 circles.
 
\n

Detailed Description

\n-

2D Point

\n-
Author
Frank Dellaert
\n+

Calibration of a fisheye camera.

\n+
Date
Apr 8, 2020
\n+
Author
ghaggin
\n+
\n+Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,70 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Point2.h File Reference\n-2D Point _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Cal3Fisheye.h File Reference\n+Calibration of a fisheye camera. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bo_\bi_\bn_\bt_\b2_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b2_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be\n+\u00a0 Calibration of a fisheye camera. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n- typedef Vector2\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt2\b2\n- As of GTSAM 4, in order to make GTSAM more\n-\u00a0 lean, it is now possible to just typedef\n- Point2 to Vector2.\n-\u00a0\n- using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt2\b2P\bPa\bai\bir\br = std::pair< _\bP_\bo_\bi_\bn_\bt_\b2,\n- _\bP_\bo_\bi_\bn_\bt_\b2 >\n-\u00a0\n- using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt2\b2P\bPa\bai\bir\brs\bs = std::vector<\n- Point2Pair >\n-\u00a0\n-typedef std::vector< _\bP_\bo_\bi_\bn_\bt_\b2, Eigen::\n- aligned_allocator< _\bP_\bo_\bi_\bn_\bt_\b2 > >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\boi\bin\bnt\bt2\b2V\bVe\bec\bct\bto\bor\br\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const gtsam::\n- Point2Pair &p)\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bm2\b2 (const _\bP_\bo_\bi_\bn_\bt_\b2 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1,\n- 2 > H=boost::none)\n-\u00a0 Distance of the point from the origin, with\n- Jacobian.\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bis\bst\bta\ban\bnc\bce\be2\b2 (const _\bP_\bo_\bi_\bn_\bt_\b2 &p1, const _\bP_\bo_\bi_\bn_\bt_\b2 &q,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 2 > H1=boost::none,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 2 > H2=boost::none)\n-\u00a0 distance between two points\n-\u00a0\n- _\bP_\bo_\bi_\bn_\bt_\b2\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br*\b* (double s, const _\bP_\bo_\bi_\bn_\bt_\b2 &p)\n-\u00a0 multiply with scalar\n-\u00a0\n-boost::optional< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bci\bir\brc\bcl\ble\beC\bCi\bir\brc\bcl\ble\beI\bIn\bnt\bte\ber\brs\bse\bec\bct\bti\bio\bon\bn (double R_d, double\n- r_d, double tol)\n-\u00a0\n- list< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bci\bir\brc\bcl\ble\beC\bCi\bir\brc\bcl\ble\beI\bIn\bnt\bte\ber\brs\bse\bec\bct\bti\bio\bon\bn (_\bP_\bo_\bi_\bn_\bt_\b2 c1, _\bP_\bo_\bi_\bn_\bt_\b2\n- c2, boost::optional< _\bP_\bo_\bi_\bn_\bt_\b2 > fh)\n-\u00a0\n- Point2Pair\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bme\bea\ban\bns\bs (const std::vector< Point2Pair >\n- &abPointPairs)\n-\u00a0 Calculate the two means of a set of Point2 pairs.\n-\u00a0\n- list< _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bi_\br_\bc_\bl_\be_\bC_\bi_\br_\bc_\bl_\be_\bI_\bn_\bt_\be_\br_\bs_\be_\bc_\bt_\bi_\bo_\bn (_\bP_\bo_\bi_\bn_\bt_\b2 c1, double\n- r1, _\bP_\bo_\bi_\bn_\bt_\b2 c2, double r2, double tol=1e-9)\n-\u00a0 Intersect 2 circles.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-2D Point\n+Calibration of a fisheye camera.\n+ Date\n+ Apr 8, 2020\n Author\n- Frank Dellaert\n+ ghaggin\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+ * _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00476.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00476.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,9 +1,4 @@\n var a00476 = [\n- [\"gtsam::Range< Point2, Point2 >\", \"a03148.html\", null],\n- [\"Point2\", \"a00476.html#a6ede8384dee0353a0ce5fb54ea50c21d\", null],\n- [\"circleCircleIntersection\", \"a00476.html#a93d4e38a582b6f32fc4f301df10721d5\", null],\n- [\"distance2\", \"a00476.html#afd1282dfb080cb393ae60188b4582cb2\", null],\n- [\"means\", \"a00476.html#a9e357cda5287fae1438f86bc4df27a80\", null],\n- [\"norm2\", \"a00476.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\", null],\n- [\"operator*\", \"a00476.html#a63d86e99c211c6daeac2b7b4dd9d928e\", null]\n+ [\"gtsam::traits< Cal3Fisheye >\", \"a03000.html\", null],\n+ [\"gtsam::traits< const Cal3Fisheye >\", \"a03004.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00476_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00476_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point2.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.h Source File\n \n \n \n \n \n \n \n@@ -98,116 +98,177 @@\n
No Matches
\n \n \n \n \n \n
\n-
Point2.h
\n+
Cal3Fisheye.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/VectorSpace.h>
\n-
21#include <boost/serialization/nvp.hpp>
\n-
22
\n-
23namespace gtsam {
\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/geometry/Cal3.h>
\n+\n
24
\n-
27typedef Vector2 Point2;
\n-
28
\n-
29// Convenience typedef
\n-
30using Point2Pair = std::pair<Point2, Point2>;
\n-
31GTSAM_EXPORT std::ostream &operator<<(std::ostream &os, const gtsam::Point2Pair &p);
\n-
32
\n-
33using Point2Pairs = std::vector<Point2Pair>;
\n-
34
\n-
36GTSAM_EXPORT double norm2(const Point2& p, OptionalJacobian<1, 2> H = boost::none);
\n-
37
\n-
39GTSAM_EXPORT double distance2(const Point2& p1, const Point2& q,
\n-
40 OptionalJacobian<1, 2> H1 = boost::none,
\n-
41 OptionalJacobian<1, 2> H2 = boost::none);
\n-
42
\n-
43// For MATLAB wrapper
\n-
44typedef std::vector<Point2, Eigen::aligned_allocator<Point2> > Point2Vector;
\n-
45
\n-
\n-
47inline Point2 operator*(double s, const Point2& p) {
\n-
48 return Point2(s * p.x(), s * p.y());
\n-
49}
\n-
\n-
50
\n-
51/*
\n-
52 * @brief Circle-circle intersection, given normalized radii.
\n-
53 * Calculate f and h, respectively the parallel and perpendicular distance of
\n-
54 * the intersections of two circles along and from the line connecting the centers.
\n-
55 * Both are dimensionless fractions of the distance d between the circle centers.
\n-
56 * If the circles do not intersect or they are identical, returns boost::none.
\n-
57 * If one solution (touching circles, as determined by tol), h will be exactly zero.
\n-
58 * h is a good measure for how accurate the intersection will be, as when circles touch
\n-
59 * or nearly touch, the intersection is ill-defined with noisy radius measurements.
\n-
60 * @param R_d : R/d, ratio of radius of first circle to distance between centers
\n-
61 * @param r_d : r/d, ratio of radius of second circle to distance between centers
\n-
62 * @param tol: absolute tolerance below which we consider touching circles
\n-
63 * @return optional Point2 with f and h, boost::none if no solution.
\n-
64 */
\n-
65GTSAM_EXPORT boost::optional<Point2> circleCircleIntersection(double R_d, double r_d, double tol = 1e-9);
\n-
66
\n-
67/*
\n-
68 * @brief Circle-circle intersection, from the normalized radii solution.
\n-
69 * @param c1 center of first circle
\n-
70 * @param c2 center of second circle
\n-
71 * @return list of solutions (0,1, or 2). Identical circles will return empty list, as well.
\n-
72 */
\n-
73GTSAM_EXPORT std::list<Point2> circleCircleIntersection(Point2 c1, Point2 c2, boost::optional<Point2> fh);
\n-
74
\n-
76GTSAM_EXPORT Point2Pair means(const std::vector<Point2Pair> &abPointPairs);
\n+
25#include <boost/shared_ptr.hpp>
\n+
26
\n+
27#include <string>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n+
\n+
51class GTSAM_EXPORT Cal3Fisheye : public Cal3 {
\n+
52 private:
\n+
53 double k1_ = 0.0f, k2_ = 0.0f;
\n+
54 double k3_ = 0.0f, k4_ = 0.0f;
\n+
55 double tol_ = 1e-5;
\n+
56
\n+
57 public:
\n+
58 enum { dimension = 9 };
\n+
60 using shared_ptr = boost::shared_ptr<Cal3Fisheye>;
\n+
61
\n+
64
\n+
66 Cal3Fisheye() = default;
\n+
67
\n+
68 Cal3Fisheye(const double fx, const double fy, const double s, const double u0,
\n+
69 const double v0, const double k1, const double k2,
\n+
70 const double k3, const double k4, double tol = 1e-5)
\n+
71 : Cal3(fx, fy, s, u0, v0),
\n+
72 k1_(k1),
\n+
73 k2_(k2),
\n+
74 k3_(k3),
\n+
75 k4_(k4),
\n+
76 tol_(tol) {}
\n
77
\n-
87GTSAM_EXPORT std::list<Point2> circleCircleIntersection(Point2 c1, double r1,
\n-
88 Point2 c2, double r2, double tol = 1e-9);
\n-
89
\n-
90template <typename A1, typename A2>
\n-
91struct Range;
\n-
92
\n-
93template <>
\n-
\n-\n-
95 typedef double result_type;
\n-
96 double operator()(const Point2& p, const Point2& q,
\n-
97 OptionalJacobian<1, 2> H1 = boost::none,
\n-
98 OptionalJacobian<1, 2> H2 = boost::none) {
\n-
99 return distance2(p, q, H1, H2);
\n-
100 }
\n-
101};
\n-
\n-
102
\n-
103} // \\ namespace gtsam
\n-
104
\n+
78 ~Cal3Fisheye() override {}
\n+
79
\n+
83
\n+
84 explicit Cal3Fisheye(const Vector9& v)
\n+
85 : Cal3(v(0), v(1), v(2), v(3), v(4)),
\n+
86 k1_(v(5)),
\n+
87 k2_(v(6)),
\n+
88 k3_(v(7)),
\n+
89 k4_(v(8)) {}
\n+
90
\n+
94
\n+
96 inline double k1() const { return k1_; }
\n+
97
\n+
99 inline double k2() const { return k2_; }
\n+
100
\n+
102 inline double k3() const { return k3_; }
\n+
103
\n+
105 inline double k4() const { return k4_; }
\n+
106
\n+
108 Vector4 k() const { return Vector4(k1_, k2_, k3_, k4_); }
\n+
109
\n+
111 Vector9 vector() const;
\n+
112
\n+
114 static double Scaling(double r);
\n+
115
\n+
124 Point2 uncalibrate(const Point2& p, OptionalJacobian<2, 9> Dcal = boost::none,
\n+
125 OptionalJacobian<2, 2> Dp = boost::none) const;
\n+
126
\n+
135 Point2 calibrate(const Point2& p, OptionalJacobian<2, 9> Dcal = boost::none,
\n+
136 OptionalJacobian<2, 2> Dp = boost::none) const;
\n+
137
\n+
141
\n+
143 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n+
144 const Cal3Fisheye& cal);
\n+
145
\n+
147 void print(const std::string& s = "") const override;
\n+
148
\n+
150 bool equals(const Cal3Fisheye& K, double tol = 10e-9) const;
\n+
151
\n+
155
\n+
157 size_t dim() const override { return Dim(); }
\n+
158
\n+
160 inline static size_t Dim() { return dimension; }
\n+
161
\n+
\n+
163 inline Cal3Fisheye retract(const Vector& d) const {
\n+
164 return Cal3Fisheye(vector() + d);
\n+
165 }
\n+
\n+
166
\n+
\n+
168 Vector localCoordinates(const Cal3Fisheye& T2) const {
\n+
169 return T2.vector() - vector();
\n+
170 }
\n+
\n+
171
\n+
175
\n+
\n+
177 virtual boost::shared_ptr<Cal3Fisheye> clone() const {
\n+
178 return boost::shared_ptr<Cal3Fisheye>(new Cal3Fisheye(*this));
\n+
179 }
\n+
\n+
180
\n+
182
\n+
183 private:
\n+
186
\n+
188 friend class boost::serialization::access;
\n+
189 template <class Archive>
\n+
190 void serialize(Archive& ar, const unsigned int /*version*/) {
\n+
191 ar& boost::serialization::make_nvp(
\n+
192 "Cal3Fisheye", boost::serialization::base_object<Cal3>(*this));
\n+
193 ar& BOOST_SERIALIZATION_NVP(k1_);
\n+
194 ar& BOOST_SERIALIZATION_NVP(k2_);
\n+
195 ar& BOOST_SERIALIZATION_NVP(k3_);
\n+
196 ar& BOOST_SERIALIZATION_NVP(k4_);
\n+
197 }
\n+
198
\n+
200};
\n+
\n+
201
\n+
202template <>
\n+
203struct traits<Cal3Fisheye> : public internal::Manifold<Cal3Fisheye> {};
\n+
204
\n+
205template <>
\n+
206struct traits<const Cal3Fisheye> : public internal::Manifold<Cal3Fisheye> {};
\n+
207
\n+
208} // namespace gtsam
\n+
Common code for all Calibration models.
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
Point2Pair means(const std::vector< Point2Pair > &abPointPairs)
Calculate the two means of a set of Point2 pairs.
Definition Point2.cpp:116
\n-
double distance2(const Point2 &p, const Point2 &q, OptionalJacobian< 1, 2 > H1, OptionalJacobian< 1, 2 > H2)
distance between two points
Definition Point2.cpp:39
\n-
double norm2(const Point2 &p, OptionalJacobian< 1, 2 > H)
Distance of the point from the origin, with Jacobian.
Definition Point2.cpp:27
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Definition BearingRange.h:40
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
Common base class for all calibration models.
Definition Cal3.h:69
\n+
Calibration of a fisheye camera.
Definition Cal3Fisheye.h:51
\n+
double k4() const
Second tangential distortion coefficient.
Definition Cal3Fisheye.h:105
\n+
double k1() const
First distortion coefficient.
Definition Cal3Fisheye.h:96
\n+
double k3() const
First tangential distortion coefficient.
Definition Cal3Fisheye.h:102
\n+
Vector localCoordinates(const Cal3Fisheye &T2) const
Given a different calibration, calculate update to obtain it.
Definition Cal3Fisheye.h:168
\n+
static size_t Dim()
Return dimensions of calibration manifold object.
Definition Cal3Fisheye.h:160
\n+
double k2() const
Second distortion coefficient.
Definition Cal3Fisheye.h:99
\n+
size_t dim() const override
Return dimensions of calibration manifold object.
Definition Cal3Fisheye.h:157
\n+
Vector9 vector() const
Return all parameters as a vector.
Definition Cal3Fisheye.cpp:28
\n+
virtual boost::shared_ptr< Cal3Fisheye > clone() const
Definition Cal3Fisheye.h:177
\n+
Vector4 k() const
return distortion parameter vector
Definition Cal3Fisheye.h:108
\n+
Cal3Fisheye()=default
Default Constructor with only unit focal length.
\n+
Cal3Fisheye retract(const Vector &d) const
Given delta vector, update calibration.
Definition Cal3Fisheye.h:163
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,140 +1,224 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Point2.h\n+Cal3Fisheye.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include \n-21#include \n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n 24\n-_\b2_\b7typedef Vector2 _\bP_\bo_\bi_\bn_\bt_\b2;\n+25#include \n+26\n+27#include \n 28\n-29// Convenience typedef\n-30using Point2Pair = std::pair;\n-31GTSAM_EXPORT std::ostream &operator<<(std::ostream &os, const gtsam::\n-Point2Pair &p);\n-32\n-33using Point2Pairs = std::vector;\n-34\n-36GTSAM_EXPORT double _\bn_\bo_\br_\bm_\b2(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H = boost::\n-none);\n-37\n-39GTSAM_EXPORT double _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b2(const _\bP_\bo_\bi_\bn_\bt_\b2& p1, const _\bP_\bo_\bi_\bn_\bt_\b2& q,\n-40 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H1 = boost::none,\n-41 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H2 = boost::none);\n-42\n-43// For MATLAB wrapper\n-44typedef std::vector > Point2Vector;\n-45\n-_\b4_\b7inline _\bP_\bo_\bi_\bn_\bt_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(double s, const _\bP_\bo_\bi_\bn_\bt_\b2& p) {\n-48 return _\bP_\bo_\bi_\bn_\bt_\b2(s * p.x(), s * p.y());\n-49}\n-50\n-51/*\n-52 * @brief Circle-circle intersection, given normalized radii.\n-53 * Calculate f and h, respectively the parallel and perpendicular distance of\n-54 * the intersections of two circles along and from the line connecting the\n-centers.\n-55 * Both are dimensionless fractions of the distance d between the circle\n-centers.\n-56 * If the circles do not intersect or they are identical, returns boost::\n-none.\n-57 * If one solution (touching circles, as determined by tol), h will be\n-exactly zero.\n-58 * h is a good measure for how accurate the intersection will be, as when\n-circles touch\n-59 * or nearly touch, the intersection is ill-defined with noisy radius\n-measurements.\n-60 * @param R_d : R/d, ratio of radius of first circle to distance between\n-centers\n-61 * @param r_d : r/d, ratio of radius of second circle to distance between\n-centers\n-62 * @param tol: absolute tolerance below which we consider touching circles\n-63 * @return optional Point2 with f and h, boost::none if no solution.\n-64 */\n-65GTSAM_EXPORT boost::optional circleCircleIntersection(double R_d,\n-double r_d, double tol = 1e-9);\n-66\n-67/*\n-68 * @brief Circle-circle intersection, from the normalized radii solution.\n-69 * @param c1 center of first circle\n-70 * @param c2 center of second circle\n-71 * @return list of solutions (0,1, or 2). Identical circles will return empty\n-list, as well.\n-72 */\n-73GTSAM_EXPORT std::list circleCircleIntersection(_\bP_\bo_\bi_\bn_\bt_\b2 c1, _\bP_\bo_\bi_\bn_\bt_\b2 c2,\n-boost::optional fh);\n-74\n-76GTSAM_EXPORT Point2Pair _\bm_\be_\ba_\bn_\bs(const std::vector &abPointPairs);\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+_\b5_\b1class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be : public _\bC_\ba_\bl_\b3 {\n+52 private:\n+53 double k1_ = 0.0f, k2_ = 0.0f;\n+54 double k3_ = 0.0f, k4_ = 0.0f;\n+55 double tol_ = 1e-5;\n+56\n+57 public:\n+58 enum { dimension = 9 };\n+60 using shared_ptr = boost::shared_ptr;\n+61\n+64\n+_\b6_\b6 _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be() = default;\n+67\n+68 _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be(const double fx, const double fy, const double s, const double\n+u0,\n+69 const double v0, const double k1, const double k2,\n+70 const double k3, const double k4, double tol = 1e-5)\n+71 : _\bC_\ba_\bl_\b3(fx, fy, s, u0, v0),\n+72 k1_(k1),\n+73 k2_(k2),\n+74 k3_(k3),\n+75 k4_(k4),\n+76 tol_(tol) {}\n 77\n-87GTSAM_EXPORT std::list circleCircleIntersection(_\bP_\bo_\bi_\bn_\bt_\b2 c1, double r1,\n-88 _\bP_\bo_\bi_\bn_\bt_\b2 c2, double r2, double tol = 1e-9);\n-89\n-90template \n-91struct Range;\n-92\n-93template <>\n-_\b9_\b4struct _\bR_\ba_\bn_\bg_\be<_\bP_\bo_\bi_\bn_\bt_\b2, _\bP_\bo_\bi_\bn_\bt_\b2> {\n-95 typedef double result_type;\n-96 double operator()(const _\bP_\bo_\bi_\bn_\bt_\b2& p, const _\bP_\bo_\bi_\bn_\bt_\b2& q,\n-97 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H1 = boost::none,\n-98 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H2 = boost::none) {\n-99 return _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b2(p, q, H1, H2);\n-100 }\n-101};\n-102\n-103} // \\ namespace gtsam\n-104\n+78 _\b~_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be() override {}\n+79\n+83\n+84 explicit Cal3Fisheye(const Vector9& v)\n+85 : Cal3(v(0), v(1), v(2), v(3), v(4)),\n+86 k1_(v(5)),\n+87 k2_(v(6)),\n+88 k3_(v(7)),\n+89 k4_(v(8)) {}\n+90\n+94\n+_\b9_\b6 inline double _\bk_\b1() const { return k1_; }\n+97\n+_\b9_\b9 inline double _\bk_\b2() const { return k2_; }\n+100\n+_\b1_\b0_\b2 inline double _\bk_\b3() const { return k3_; }\n+103\n+_\b1_\b0_\b5 inline double _\bk_\b4() const { return k4_; }\n+106\n+_\b1_\b0_\b8 Vector4 _\bk() const { return Vector4(k1_, k2_, k3_, k4_); }\n+109\n+111 Vector9 vector() const;\n+112\n+114 static double Scaling(double r);\n+115\n+124 _\bP_\bo_\bi_\bn_\bt_\b2 uncalibrate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b9_\b> Dcal = boost::\n+none,\n+125 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dp = boost::none) const;\n+126\n+135 _\bP_\bo_\bi_\bn_\bt_\b2 calibrate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b9_\b> Dcal = boost::\n+none,\n+136 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dp = boost::none) const;\n+137\n+141\n+143 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+144 const _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be& cal);\n+145\n+147 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override;\n+148\n+150 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be& K, double tol = 10e-9) const;\n+151\n+155\n+_\b1_\b5_\b7 size_t _\bd_\bi_\bm() const override { return Dim(); }\n+158\n+_\b1_\b6_\b0 inline static size_t _\bD_\bi_\bm() { return dimension; }\n+161\n+_\b1_\b6_\b3 inline _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& d) const {\n+164 return _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be(vector() + d);\n+165 }\n+166\n+_\b1_\b6_\b8 Vector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be& T2) const {\n+169 return T2._\bv_\be_\bc_\bt_\bo_\br() - vector();\n+170 }\n+171\n+175\n+_\b1_\b7_\b7 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n+178 return boost::shared_ptr(new _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be(*this));\n+179 }\n+180\n+182\n+183 private:\n+186\n+_\b1_\b8_\b8 friend class boost::serialization::access;\n+189 template \n+190 void serialize(Archive& ar, const unsigned int /*version*/) {\n+191 ar& boost::serialization::make_nvp(\n+192 \"Cal3Fisheye\", boost::serialization::base_object(*this));\n+193 ar& BOOST_SERIALIZATION_NVP(k1_);\n+194 ar& BOOST_SERIALIZATION_NVP(k2_);\n+195 ar& BOOST_SERIALIZATION_NVP(k3_);\n+196 ar& BOOST_SERIALIZATION_NVP(k4_);\n+197 }\n+198\n+200};\n+201\n+202template <>\n+_\b2_\b0_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n+204\n+205template <>\n+_\b2_\b0_\b6struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+{};\n+207\n+208} // namespace gtsam\n+_\bC_\ba_\bl_\b3_\b._\bh\n+Common code for all Calibration models.\n+_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Point2 operator*(double s, const Point2 &p)\n-multiply with scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n Vector2 Point2\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n typedef Point2 to Vector2...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\be_\ba_\bn_\bs\n-Point2Pair means(const std::vector< Point2Pair > &abPointPairs)\n-Calculate the two means of a set of Point2 pairs.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.cpp:116\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b2\n-double distance2(const Point2 &p, const Point2 &q, OptionalJacobian< 1, 2 > H1,\n-OptionalJacobian< 1, 2 > H2)\n-distance between two points\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.cpp:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\br_\bm_\b2\n-double norm2(const Point2 &p, OptionalJacobian< 1, 2 > H)\n-Distance of the point from the origin, with Jacobian.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.cpp:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+Both ManifoldTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3\n+Common base class for all calibration models.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be\n+Calibration of a fisheye camera.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bk_\b4\n+double k4() const\n+Second tangential distortion coefficient.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bk_\b1\n+double k1() const\n+First distortion coefficient.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bk_\b3\n+double k3() const\n+First tangential distortion coefficient.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+Vector localCoordinates(const Cal3Fisheye &T2) const\n+Given a different calibration, calculate update to obtain it.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:168\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+Return dimensions of calibration manifold object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bk_\b2\n+double k2() const\n+Second distortion coefficient.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+Return dimensions of calibration manifold object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+Vector9 vector() const\n+Return all parameters as a vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.cpp:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual boost::shared_ptr< Cal3Fisheye > clone() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bk\n+Vector4 k() const\n+return distortion parameter vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be\n+Cal3Fisheye()=default\n+Default Constructor with only unit focal length.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+Cal3Fisheye retract(const Vector &d) const\n+Given delta vector, update calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:163\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+ * _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00479.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00479.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,56 +94,41 @@\n \n \n \n \n \n
\n \n-
StereoPoint2.h File Reference
\n+Functions
\n+
Pose3.cpp File Reference
\n \n
\n \n-

A 2D stereo point (uL,uR,v) \n+

3D Pose \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::StereoPoint2
 A 2D stereo point, v will be same for rectified images. More...
 
struct  gtsam::traits< StereoPoint2 >
 
struct  gtsam::traits< const StereoPoint2 >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n+\n+\n+\n

\n-Typedefs

\n-typedef std::vector< StereoPoint2gtsam::StereoPoint2Vector
 

\n+Functions

\n+std::ostream & gtsam::operator<< (std::ostream &os, const Pose3 &pose)
 
\n

Detailed Description

\n-

A 2D stereo point (uL,uR,v)

\n-
Date
Jan 26, 2010
\n-
Author
Frank Dellaert
\n+

3D Pose

\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-StereoPoint2.h File Reference\n-A 2D stereo point (uL,uR,v) _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2\n-\u00a0 A 2D stereo point, v will be same for rectified images. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Pose3.cpp File Reference\n+3D Pose _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef std::vector< _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSt\bte\ber\bre\beo\boP\bPo\boi\bin\bnt\bt2\b2V\bVe\bec\bct\bto\bor\br\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bP_\bo_\bs_\be_\b3 &pose)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A 2D stereo point (uL,uR,v)\n- Date\n- Jan 26, 2010\n- Author\n- Frank Dellaert\n+3D Pose\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+ * _\bP_\bo_\bs_\be_\b3_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00482.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00482.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridConditional.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridValues.h File Reference\n \n \n \n \n \n \n \n@@ -94,32 +94,43 @@\n \n \n \n \n \n
\n \n-
HybridConditional.cpp File Reference
\n+
HybridValues.h File Reference
\n
\n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::HybridValues
 HybridValues represents a collection of DiscreteValues and VectorValues. More...
 
struct  gtsam::traits< HybridValues >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Mar 11, 2022
\n-
Author
Fan Jiang
\n+
Date
Jul 28, 2022
\n+
Author
Shangjie Xue
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridConditional.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HybridValues.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+\u00a0 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs represents a collection of _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs and\n+ _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Mar 11, 2022\n+ Jul 28, 2022\n Author\n- Fan Jiang\n+ Shangjie Xue\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00485.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00485.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearFactorGraph.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridEliminationTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,35 +95,31 @@\n \n \n \n \n
\n \n-
HybridNonlinearFactorGraph.cpp File Reference
\n+
HybridEliminationTree.cpp File Reference
\n
\n
\n-\n-

Nonlinear hybrid factor graph that uses type erasure. \n-More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Nonlinear hybrid factor graph that uses type erasure.

\n-
Author
Varun Agrawal
\n-
Date
May 28, 2022
\n+
Date
Mar 11, 2022
\n+
Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridNonlinearFactorGraph.cpp File Reference\n-Nonlinear hybrid factor graph that uses type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n+HybridEliminationTree.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Nonlinear hybrid factor graph that uses type erasure.\n- Author\n- Varun Agrawal\n Date\n- May 28, 2022\n+ Mar 11, 2022\n+ Author\n+ Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00488.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00488.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearISAM.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridBayesTree.h File Reference\n \n \n \n \n \n \n \n@@ -94,32 +94,54 @@\n \n \n \n \n \n
\n \n-
HybridNonlinearISAM.cpp File Reference
\n+
HybridBayesTree.h File Reference
\n
\n
\n+\n+

Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::HybridBayesTreeClique
 A clique in a HybridBayesTree which is a HybridConditional internally. More...
 
class  gtsam::HybridBayesTree
 A Bayes tree representing a Hybrid density. More...
 
struct  gtsam::traits< HybridBayesTree >
 traits More...
 
class  gtsam::BayesTreeOrphanWrapper< HybridBayesTreeClique >
 Class for Hybrid Bayes tree orphan subtrees. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Sep 12, 2022
\n-
Author
Varun Agrawal
\n+

Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.

\n+
Date
Mar 11, 2022
\n+
Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,37 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridNonlinearISAM.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HybridBayesTree.h File Reference\n+Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n+\u00a0 A clique in a _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be which is a _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl internally.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+\u00a0 A Bayes tree representing a Hybrid density. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>\n+\u00a0 Class for Hybrid Bayes tree orphan subtrees. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\n Date\n- Sep 12, 2022\n+ Mar 11, 2022\n Author\n- Varun Agrawal\n+ Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00491.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00491.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/MixtureFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianFactorGraph.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,47 +94,60 @@\n \n \n \n \n \n
\n \n-
MixtureFactor.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
HybridGaussianFactorGraph.cpp File Reference
\n \n
\n \n-

Nonlinear Mixture factor of continuous and discrete. \n+

Hybrid factor graph that uses type erasure. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::MixtureFactor
 Implementation of a discrete conditional mixture factor. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Typedefs

\n+using gtsam::OrphanWrapper = BayesTreeOrphanWrapper< HybridBayesTree::Clique >
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

const Ordering gtsam::HybridOrdering (const HybridGaussianFactorGraph &graph)
 Return a Colamd constrained ordering where the discrete keys are eliminated after the continuous keys.
 
\n+GaussianFactorGraphTree gtsam::removeEmpty (const GaussianFactorGraphTree &sum)
 
std::pair< HybridConditional::shared_ptr, boost::shared_ptr< Factor > > gtsam::EliminateHybrid (const HybridGaussianFactorGraph &factors, const Ordering &keys)
 Main elimination function for HybridGaussianFactorGraph.
 
\n

Detailed Description

\n-

Nonlinear Mixture factor of continuous and discrete.

\n-
Author
Kevin Doherty, kdohe.nosp@m.rty@.nosp@m.mit.e.nosp@m.du
\n+

Hybrid factor graph that uses type erasure.

\n+
Author
Fan Jiang
\n+
\n+Varun Agrawal
\n
\n-Varun Agrawal
\n-
Date
December 2021
\n+Frank Dellaert
\n+
Date
Mar 11, 2022
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,43 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-MixtureFactor.h File Reference\n-Nonlinear Mixture factor of continuous and discrete. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Implementation of a discrete conditional mixture factor. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+HybridGaussianFactorGraph.cpp File Reference\n+Hybrid factor graph that uses type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:O\bOr\brp\bph\bha\ban\bnW\bWr\bra\bap\bpp\bpe\ber\br = _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br< _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be >\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bO_\br_\bd_\be_\br_\bi_\bn_\bg (const\n+ _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph)\n+ Return a Colamd constrained ordering\n+\u00a0 where the discrete keys are eliminated\n+ after the continuous keys.\n+\u00a0\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:r\bre\bem\bmo\bov\bve\beE\bEm\bmp\bpt\bty\by (const\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be &sum)\n+\u00a0\n+ std::pair< _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bH_\by_\bb_\br_\bi_\bd (const\n+_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, boost::shared_ptr< _\bF_\ba_\bc_\bt_\bo_\br > _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors,\n+ >\u00a0 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n+\u00a0 Main elimination function for\n+ _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Nonlinear Mixture factor of continuous and discrete.\n+Hybrid factor graph that uses type erasure.\n Author\n- Kevin Doherty, _\bk_\bd_\bo_\bh_\be_\b._\bn_\bo_\bs_\bp_\b@_\bm_\b._\br_\bt_\by_\b@_\b._\bn_\bo_\bs_\bp_\b@_\bm_\b._\bm_\bi_\bt_\b._\be_\b._\bn_\bo_\bs_\bp_\b@_\bm_\b._\bd_\bu\n+ Fan Jiang\n Varun Agrawal\n+ Frank Dellaert\n Date\n- December 2021\n+ Mar 11, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00491.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00491.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00491 = [\n- [\"gtsam::MixtureFactor\", \"a03512.html\", \"a03512\"]\n+ [\"EliminateHybrid\", \"a00491.html#gacbc9f97e48e6aa3abb5f789af8c3bfe5\", null],\n+ [\"HybridOrdering\", \"a00491.html#a584e4e05d52a617c1d313e1f53c8ce58\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00494.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00494.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridBayesTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,54 +94,45 @@\n \n \n \n \n \n
\n \n-
HybridBayesTree.h File Reference
\n+Namespaces |\n+Functions
\n+
HybridFactor.cpp File Reference
\n \n
\n-\n-

Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::HybridBayesTreeClique
 A clique in a HybridBayesTree which is a HybridConditional internally. More...
 
class  gtsam::HybridBayesTree
 A Bayes tree representing a Hybrid density. More...
 
struct  gtsam::traits< HybridBayesTree >
 traits More...
 
class  gtsam::BayesTreeOrphanWrapper< HybridBayesTreeClique >
 Class for Hybrid Bayes tree orphan subtrees. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+KeyVector gtsam::CollectKeys (const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys)
 
\n+KeyVector gtsam::CollectKeys (const KeyVector &keys1, const KeyVector &keys2)
 
\n+DiscreteKeys gtsam::CollectDiscreteKeys (const DiscreteKeys &key1, const DiscreteKeys &key2)
 
\n

Detailed Description

\n-

Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.

\n-
Date
Mar 11, 2022
\n+
Date
Mar 11, 2022
\n
Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridBayesTree.h File Reference\n-Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-\u00a0 A clique in a _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be which is a _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl internally.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-\u00a0 A Bayes tree representing a Hybrid density. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>\n-\u00a0 Class for Hybrid Bayes tree orphan subtrees. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+HybridFactor.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btK\bKe\bey\bys\bs (const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys, const\n+ _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys)\n+\u00a0\n+ _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btK\bKe\bey\bys\bs (const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys1, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+ &keys2)\n+\u00a0\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btD\bDi\bis\bsc\bcr\bre\bet\bte\beK\bKe\bey\bys\bs (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key1, const\n+ _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key2)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\n Date\n Mar 11, 2022\n Author\n Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00497.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00497.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridSmoother.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixture.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,48 @@\n \n \n \n \n \n
\n \n-
HybridSmoother.cpp File Reference
\n+Namespaces |\n+Functions
\n+
GaussianMixture.cpp File Reference
\n \n
\n \n-

An incremental smoother for hybrid factor graphs. \n+

A hybrid conditional in the Conditional Linear Gaussian scheme. \n More...

\n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Functions

\n+std::set< DiscreteKeygtsam::DiscreteKeysAsSet (const DiscreteKeys &discreteKeys)
 Return the DiscreteKey vector as a set.
 
\n

Detailed Description

\n-

An incremental smoother for hybrid factor graphs.

\n-
Author
Varun Agrawal
\n-
Date
October 2022
\n+

A hybrid conditional in the Conditional Linear Gaussian scheme.

\n+
Author
Fan Jiang
\n+
\n+Varun Agrawal
\n+
\n+Frank Dellaert
\n+
Date
Mar 12, 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridSmoother.cpp File Reference\n-An incremental smoother for hybrid factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+GaussianMixture.cpp File Reference\n+A hybrid conditional in the Conditional Linear Gaussian scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::set< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDi\bis\bsc\bcr\bre\bet\bte\beK\bKe\bey\bys\bsA\bAs\bsS\bSe\bet\bt (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+ &discreteKeys)\n+\u00a0 Return the DiscreteKey vector as a set.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-An incremental smoother for hybrid factor graphs.\n+A hybrid conditional in the Conditional Linear Gaussian scheme.\n Author\n+ Fan Jiang\n Varun Agrawal\n+ Frank Dellaert\n Date\n- October 2022\n+ Mar 12, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b._\bc_\bp_\bp\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00500.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00500.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearFactorGraph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridSmoother.h File Reference\n \n \n \n \n \n \n \n@@ -96,44 +96,42 @@\n \n \n \n
\n \n-
HybridNonlinearFactorGraph.h File Reference
\n+
HybridSmoother.h File Reference
\n
\n
\n \n-

Nonlinear hybrid factor graph that uses type erasure. \n+

An incremental smoother for hybrid factor graphs. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n+\n \n

\n Classes

class  gtsam::HybridNonlinearFactorGraph
 
struct  gtsam::traits< HybridNonlinearFactorGraph >
class  gtsam::HybridSmoother
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Nonlinear hybrid factor graph that uses type erasure.

\n+

An incremental smoother for hybrid factor graphs.

\n
Author
Varun Agrawal
\n-
Date
May 28, 2022
\n+
Date
October 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,26 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridNonlinearFactorGraph.h File Reference\n-Nonlinear hybrid factor graph that uses type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n+HybridSmoother.h File Reference\n+An incremental smoother for hybrid factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Nonlinear hybrid factor graph that uses type erasure.\n+An incremental smoother for hybrid factor graphs.\n Author\n Varun Agrawal\n Date\n- May 28, 2022\n+ October 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00500.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00500.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00500 = [\n- [\"gtsam::HybridNonlinearFactorGraph\", \"a03488.html\", \"a03488\"],\n- [\"gtsam::traits< HybridNonlinearFactorGraph >\", \"a03492.html\", null]\n+ [\"gtsam::HybridSmoother\", \"a03500.html\", \"a03500\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00500_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00500_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridSmoother.h Source File\n \n \n \n \n \n \n \n@@ -98,91 +98,73 @@\n
No Matches
\n \n \n \n \n \n
\n-
HybridNonlinearFactorGraph.h
\n+
HybridSmoother.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n+\n+\n+\n
22
\n
23namespace gtsam {
\n
24
\n-
25class HybridGaussianFactorGraph;
\n-
26
\n-
\n-
33class GTSAM_EXPORT HybridNonlinearFactorGraph : public HybridFactorGraph {
\n-
34 protected:
\n-
35 public:
\n-
36 using Base = HybridFactorGraph;
\n-\n-
38 using shared_ptr = boost::shared_ptr<This>;
\n-
39
\n-\n-
41 using Indices = KeyVector;
\n-
42
\n-
45
\n-\n-
47
\n-
53 template <class DERIVEDFACTOR>
\n-
\n-\n-
55 : Base(graph) {}
\n-
\n-
56
\n-
60
\n-
62 void print(
\n-
63 const std::string& s = "HybridNonlinearFactorGraph",
\n-
64 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n-
65
\n-
69
\n-
77 boost::shared_ptr<HybridGaussianFactorGraph> linearize(
\n-
78 const Values& continuousValues) const;
\n-
80};
\n-
\n-
81
\n-
82template <>
\n-
\n-\n-
84 : public Testable<HybridNonlinearFactorGraph> {};
\n-
\n-
85
\n-
86} // namespace gtsam
\n-
Factor graph with utilities for hybrid factors.
\n+
\n+\n+
26 private:
\n+
27 HybridBayesNet hybridBayesNet_;
\n+
28 HybridGaussianFactorGraph remainingFactorGraph_;
\n+
29
\n+
30 public:
\n+
50 void update(HybridGaussianFactorGraph graph, const Ordering& ordering,
\n+
51 boost::optional<size_t> maxNrLeaves = boost::none);
\n+
52
\n+
53 Ordering getOrdering(const HybridGaussianFactorGraph& newFactors);
\n+
54
\n+
64 std::pair<HybridGaussianFactorGraph, HybridBayesNet> addConditionals(
\n+
65 const HybridGaussianFactorGraph& graph,
\n+
66 const HybridBayesNet& hybridBayesNet, const Ordering& ordering) const;
\n+
67
\n+
69 GaussianMixture::shared_ptr gaussianMixture(size_t index) const;
\n+
70
\n+
72 const HybridBayesNet& hybridBayesNet() const;
\n+
73};
\n+
\n+
74
\n+
75}; // namespace gtsam
\n+\n+
A Bayes net of Gaussian Conditionals indexed by discrete keys.
\n+
Linearized Hybrid factor graph that uses type erasure.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Hybrid Factor Graph Factor graph with utilities for hybrid factors.
Definition HybridFactorGraph.h:39
\n-
Definition HybridNonlinearFactorGraph.h:33
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to This
Definition HybridNonlinearFactorGraph.h:38
\n-
HybridNonlinearFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition HybridNonlinearFactorGraph.h:54
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
A hybrid Bayes net is a collection of HybridConditionals, which can have discrete conditionals,...
Definition HybridBayesNet.h:35
\n+
Definition HybridGaussianFactorGraph.h:102
\n+
Definition HybridSmoother.h:25
\n+
GaussianMixture::shared_ptr gaussianMixture(size_t index) const
Get the Gaussian Mixture from the Bayes Net posterior at index.
Definition HybridSmoother.cpp:131
\n+
void update(HybridGaussianFactorGraph graph, const Ordering &ordering, boost::optional< size_t > maxNrLeaves=boost::none)
Given new factors, perform an incremental update.
Definition HybridSmoother.cpp:58
\n+
std::pair< HybridGaussianFactorGraph, HybridBayesNet > addConditionals(const HybridGaussianFactorGraph &graph, const HybridBayesNet &hybridBayesNet, const Ordering &ordering) const
Add conditionals from previous timestep as part of liquefication.
Definition HybridSmoother.cpp:85
\n+
const HybridBayesNet & hybridBayesNet() const
Return the Bayes Net posterior.
Definition HybridSmoother.cpp:137
\n+
Definition Ordering.h:34
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,109 +1,88 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridNonlinearFactorGraph.h\n+HybridSmoother.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n 22\n 23namespace _\bg_\bt_\bs_\ba_\bm {\n 24\n-25class HybridGaussianFactorGraph;\n-26\n-_\b3_\b3class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n-34 protected:\n-35 public:\n-36 using _\bB_\ba_\bs_\be = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n-_\b3_\b7 using _\bT_\bh_\bi_\bs = _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n-_\b3_\b8 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n-39\n-_\b4_\b0 using _\bV_\ba_\bl_\bu_\be_\bs = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs;\n-41 using Indices = _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br;\n-42\n-45\n-46 _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() = default;\n-47\n-53 template \n-_\b5_\b4 _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph)\n-55 : _\bB_\ba_\bs_\be(graph) {}\n-56\n-60\n-62 void _\bp_\br_\bi_\bn_\bt(\n-63 const std::string& s = \"HybridNonlinearFactorGraph\",\n-64 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n-65\n-69\n-77 boost::shared_ptr linearize(\n-78 const _\bV_\ba_\bl_\bu_\be_\bs& continuousValues) const;\n-80};\n-81\n-82template <>\n-_\b8_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh>\n-84 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-85\n-86} // namespace gtsam\n-_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor graph with utilities for hybrid factors.\n+_\b2_\b5class _\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br {\n+26 private:\n+27 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt hybridBayesNet_;\n+28 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh remainingFactorGraph_;\n+29\n+30 public:\n+50 void _\bu_\bp_\bd_\ba_\bt_\be(_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+51 boost::optional maxNrLeaves = boost::none);\n+52\n+53 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg getOrdering(const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors);\n+54\n+64 std::pair _\ba_\bd_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bs(\n+65 const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n+66 const _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& _\bh_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n+67\n+69 GaussianMixture::shared_ptr _\bg_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be(size_t index) const;\n+70\n+72 const _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& _\bh_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() const;\n+73};\n+74\n+75}; // namespace gtsam\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+A Bayes net of Gaussian Conditionals indexed by discrete keys.\n+_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linearized Hybrid factor graph that uses type erasure.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-Hybrid Factor Graph Factor graph with utilities for hybrid factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearFactorGraph.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearFactorGraph.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-HybridNonlinearFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n-Implicit copy/downcast constructor to override explicit template container\n-constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearFactorGraph.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+A hybrid Bayes net is a collection of HybridConditionals, which can have\n+discrete conditionals,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridSmoother.h:25\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b:_\b:_\bg_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be\n+GaussianMixture::shared_ptr gaussianMixture(size_t index) const\n+Get the Gaussian Mixture from the Bayes Net posterior at index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridSmoother.cpp:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(HybridGaussianFactorGraph graph, const Ordering &ordering, boost::\n+optional< size_t > maxNrLeaves=boost::none)\n+Given new factors, perform an incremental update.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridSmoother.cpp:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b:_\b:_\ba_\bd_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bs\n+std::pair< HybridGaussianFactorGraph, HybridBayesNet > addConditionals(const\n+HybridGaussianFactorGraph &graph, const HybridBayesNet &hybridBayesNet, const\n+Ordering &ordering) const\n+Add conditionals from previous timestep as part of liquefication.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridSmoother.cpp:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+const HybridBayesNet & hybridBayesNet() const\n+Return the Bayes Net posterior.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridSmoother.cpp:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00503.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00503.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixture.h File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,57 @@\n \n \n \n \n \n
\n \n-
HybridFactor.cpp File Reference
\n+
GaussianMixture.h File Reference
\n
\n
\n+\n+

A hybrid conditional in the Conditional Linear Gaussian scheme. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::GaussianMixture
 A conditional of gaussian mixtures indexed by discrete variables, as part of a Bayes Network. More...
 
struct  gtsam::traits< GaussianMixture >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n

\n Functions

\n-KeyVector gtsam::CollectKeys (const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys)
 
\n-KeyVector gtsam::CollectKeys (const KeyVector &keys1, const KeyVector &keys2)
 
\n-DiscreteKeys gtsam::CollectDiscreteKeys (const DiscreteKeys &key1, const DiscreteKeys &key2)
 
\n+std::set< DiscreteKeygtsam::DiscreteKeysAsSet (const DiscreteKeys &discreteKeys)
 Return the DiscreteKey vector as a set.
 
\n

Detailed Description

\n-
Date
Mar 11, 2022
\n-
Author
Fan Jiang
\n+

A hybrid conditional in the Conditional Linear Gaussian scheme.

\n+
Author
Fan Jiang
\n+
\n+Varun Agrawal
\n+
Date
Mar 12, 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,36 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-HybridFactor.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+GaussianMixture.h File Reference\n+A hybrid conditional in the Conditional Linear Gaussian scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be\n+\u00a0 A conditional of gaussian mixtures indexed by discrete variables, as\n+ part of a Bayes Network. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btK\bKe\bey\bys\bs (const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys, const\n- _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys)\n-\u00a0\n- _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btK\bKe\bey\bys\bs (const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys1, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n- &keys2)\n-\u00a0\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btD\bDi\bis\bsc\bcr\bre\bet\bte\beK\bKe\bey\bys\bs (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key1, const\n- _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key2)\n+std::set< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDi\bis\bsc\bcr\bre\bet\bte\beK\bKe\bey\bys\bsA\bAs\bsS\bSe\bet\bt (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+ &discreteKeys)\n+\u00a0 Return the DiscreteKey vector as a set.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Mar 11, 2022\n+A hybrid conditional in the Conditional Linear Gaussian scheme.\n Author\n Fan Jiang\n+ Varun Agrawal\n+ Date\n+ Mar 12, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00506.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00506.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixtureFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearISAM.h File Reference\n \n \n \n \n \n \n \n@@ -94,40 +94,41 @@\n \n \n \n \n \n
\n \n-
GaussianMixtureFactor.cpp File Reference
\n+
HybridNonlinearISAM.h File Reference
\n
\n
\n \n-

A set of Gaussian factors indexed by a set of discrete keys. \n-More...

\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::HybridNonlinearISAM
 Wrapper class to manage ISAM in a nonlinear context. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A set of Gaussian factors indexed by a set of discrete keys.

\n-
Author
Fan Jiang
\n-
\n-Varun Agrawal
\n-
\n-Frank Dellaert
\n-
Date
Mar 12, 2022
\n+
Date
Sep 12, 2022
\n+
Author
Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianMixtureFactor.cpp File Reference\n-A set of Gaussian factors indexed by a set of discrete keys. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HybridNonlinearISAM.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n+\u00a0 Wrapper class to manage _\bI_\bS_\bA_\bM in a nonlinear context. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A set of Gaussian factors indexed by a set of discrete keys.\n+ Date\n+ Sep 12, 2022\n Author\n- Fan Jiang\n Varun Agrawal\n- Frank Dellaert\n- Date\n- Mar 12, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00509.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00509.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridBayesNet.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridBayesTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,52 +94,36 @@\n \n \n \n \n \n
\n \n-
HybridBayesNet.h File Reference
\n+
HybridBayesTree.cpp File Reference
\n
\n
\n \n-

A Bayes net of Gaussian Conditionals indexed by discrete keys. \n+

Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::HybridBayesNet
 A hybrid Bayes net is a collection of HybridConditionals, which can have discrete conditionals, Gaussian mixtures, or pure Gaussian conditionals. More...
 
struct  gtsam::traits< HybridBayesNet >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A Bayes net of Gaussian Conditionals indexed by discrete keys.

\n-
Author
Varun Agrawal
\n-
\n-Fan Jiang
\n-
\n-Frank Dellaert
\n-
Date
December 2021
\n+

Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.

\n+
Date
Mar 11, 2022
\n+
Author
Fan Jiang, Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridBayesNet.h File Reference\n-A Bayes net of Gaussian Conditionals indexed by discrete keys. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n- A hybrid Bayes net is a collection of HybridConditionals, which can\n-\u00a0 have discrete conditionals, Gaussian mixtures, or pure Gaussian\n- conditionals. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HybridBayesTree.cpp File Reference\n+Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A Bayes net of Gaussian Conditionals indexed by discrete keys.\n- Author\n- Varun Agrawal\n- Fan Jiang\n- Frank Dellaert\n+Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\n Date\n- December 2021\n+ Mar 11, 2022\n+ Author\n+ Fan Jiang, Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00515.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00515.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridEliminationTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridBayesNet.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,32 +94,49 @@\n \n \n \n \n \n
\n \n-
HybridEliminationTree.cpp File Reference
\n+Namespaces |\n+Functions
\n+
HybridBayesNet.cpp File Reference
\n \n
\n+\n+

A Bayes net of Gaussian Conditionals indexed by discrete keys. \n+More...

\n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Functions

std::function< double(const Assignment< Key > &, double)> gtsam::prunerFunc (const DecisionTreeFactor &prunedDecisionTree, const HybridConditional &conditional)
 Helper function to get the pruner functional.
 
\n

Detailed Description

\n-
Date
Mar 11, 2022
\n-
Author
Fan Jiang
\n+

A Bayes net of Gaussian Conditionals indexed by discrete keys.

\n+
Author
Fan Jiang
\n+
\n+Varun Agrawal
\n+
\n+Shangjie Xue
\n+
\n+Frank Dellaert
\n+
Date
January 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridEliminationTree.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+HybridBayesNet.cpp File Reference\n+A Bayes net of Gaussian Conditionals indexed by discrete keys. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::function< double(const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bu_\bn_\be_\br_\bF_\bu_\bn_\bc (const\n+ _\bK_\be_\by > &, double)>\u00a0 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br &prunedDecisionTree,\n+ const _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl &conditional)\n+\u00a0 Helper function to get the pruner\n+ functional.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Mar 11, 2022\n+A Bayes net of Gaussian Conditionals indexed by discrete keys.\n Author\n Fan Jiang\n+ Varun Agrawal\n+ Shangjie Xue\n+ Frank Dellaert\n+ Date\n+ January 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00518.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00518.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixture.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearFactorGraph.h File Reference\n \n \n \n \n \n \n \n@@ -94,48 +94,46 @@\n \n \n \n \n \n
\n \n-
GaussianMixture.cpp File Reference
\n+Classes |\n+Namespaces
\n+
HybridNonlinearFactorGraph.h File Reference
\n \n
\n \n-

A hybrid conditional in the Conditional Linear Gaussian scheme. \n+

Nonlinear hybrid factor graph that uses type erasure. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::HybridNonlinearFactorGraph
 
struct  gtsam::traits< HybridNonlinearFactorGraph >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

\n-std::set< DiscreteKeygtsam::DiscreteKeysAsSet (const DiscreteKeys &discreteKeys)
 Return the DiscreteKey vector as a set.
 
\n

Detailed Description

\n-

A hybrid conditional in the Conditional Linear Gaussian scheme.

\n-
Author
Fan Jiang
\n-
\n-Varun Agrawal
\n-
\n-Frank Dellaert
\n-
Date
Mar 12, 2022
\n+

Nonlinear hybrid factor graph that uses type erasure.

\n+
Author
Varun Agrawal
\n+
Date
May 28, 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-GaussianMixture.cpp File Reference\n-A hybrid conditional in the Conditional Linear Gaussian scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HybridNonlinearFactorGraph.h File Reference\n+Nonlinear hybrid factor graph that uses type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::set< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDi\bis\bsc\bcr\bre\bet\bte\beK\bKe\bey\bys\bsA\bAs\bsS\bSe\bet\bt (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n- &discreteKeys)\n-\u00a0 Return the DiscreteKey vector as a set.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A hybrid conditional in the Conditional Linear Gaussian scheme.\n+Nonlinear hybrid factor graph that uses type erasure.\n Author\n- Fan Jiang\n Varun Agrawal\n- Frank Dellaert\n Date\n- Mar 12, 2022\n+ May 28, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00518.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00518.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00518 = [\n- [\"DiscreteKeysAsSet\", \"a00518.html#ad92a1966f54e02a7c2ce061c1228c7b3\", null]\n+ [\"gtsam::HybridNonlinearFactorGraph\", \"a03488.html\", \"a03488\"],\n+ [\"gtsam::traits< HybridNonlinearFactorGraph >\", \"a03492.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00521.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00521.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridBayesTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridJunctionTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,35 +95,31 @@\n \n \n \n \n
\n \n-
HybridBayesTree.cpp File Reference
\n+
HybridJunctionTree.cpp File Reference
\n
\n
\n-\n-

Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. \n-More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.

\n-
Date
Mar 11, 2022
\n-
Author
Fan Jiang, Varun Agrawal
\n+
Date
Mar 11, 2022
\n+
Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridBayesTree.cpp File Reference\n-Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n+HybridJunctionTree.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\n Date\n Mar 11, 2022\n Author\n- Fan Jiang, Varun Agrawal\n+ Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00524.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00524.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridJunctionTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridSmoother.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,36 @@\n \n \n \n \n \n
\n \n-
HybridJunctionTree.h File Reference
\n+
HybridSmoother.cpp File Reference
\n
\n
\n \n-

Go to the source code of this file.

\n+

An incremental smoother for hybrid factor graphs. \n+More...

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::HybridJunctionTree
 An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree, with the additional property that it represents the clique tree associated with a Bayes net. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Mar 11, 2022
\n-
Author
Fan Jiang
\n+

An incremental smoother for hybrid factor graphs.

\n+
Author
Varun Agrawal
\n+
Date
October 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridJunctionTree.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n- An _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be, i.e., a set of variable clusters with\n-\u00a0 factors, arranged in a tree, with the additional property that it\n- represents the clique tree associated with a Bayes net. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HybridSmoother.cpp File Reference\n+An incremental smoother for hybrid factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Mar 11, 2022\n+An incremental smoother for hybrid factor graphs.\n Author\n- Fan Jiang\n+ Varun Agrawal\n+ Date\n+ October 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00527.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00527.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactorGraph.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridBayesNet.h File Reference\n \n \n \n \n \n \n \n@@ -94,38 +94,52 @@\n \n \n \n \n \n
\n \n-
HybridFactorGraph.cpp File Reference
\n+
HybridBayesNet.h File Reference
\n
\n
\n \n-

Factor graph with utilities for hybrid factors. \n+

A Bayes net of Gaussian Conditionals indexed by discrete keys. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::HybridBayesNet
 A hybrid Bayes net is a collection of HybridConditionals, which can have discrete conditionals, Gaussian mixtures, or pure Gaussian conditionals. More...
 
struct  gtsam::traits< HybridBayesNet >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Factor graph with utilities for hybrid factors.

\n+

A Bayes net of Gaussian Conditionals indexed by discrete keys.

\n
Author
Varun Agrawal
\n
\n+Fan Jiang
\n+
\n Frank Dellaert
\n-
Date
January, 2023
\n+
Date
December 2021
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,34 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridFactorGraph.cpp File Reference\n-Factor graph with utilities for hybrid factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HybridBayesNet.h File Reference\n+A Bayes net of Gaussian Conditionals indexed by discrete keys. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+ A hybrid Bayes net is a collection of HybridConditionals, which can\n+\u00a0 have discrete conditionals, Gaussian mixtures, or pure Gaussian\n+ conditionals. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor graph with utilities for hybrid factors.\n+A Bayes net of Gaussian Conditionals indexed by discrete keys.\n Author\n Varun Agrawal\n+ Fan Jiang\n Frank Dellaert\n Date\n- January, 2023\n+ December 2021\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00533.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00533.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridConditional.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,42 +95,63 @@\n \n \n \n \n
\n \n-
HybridConditional.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
HybridFactor.h File Reference
\n \n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n+\n \n

\n Classes

class  gtsam::HybridConditional
 Hybrid Conditional Density. More...
class  gtsam::HybridFactor
 Base class for truly hybrid probabilistic factors. More...
 
struct  gtsam::traits< HybridConditional >
struct  gtsam::traits< HybridFactor >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+

\n+Typedefs

\n+using gtsam::GaussianFactorGraphTree = DecisionTree< Key, GaussianFactorGraph >
 Alias for DecisionTree of GaussianFactorGraphs.
 
\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+KeyVector gtsam::CollectKeys (const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys)
 
\n+KeyVector gtsam::CollectKeys (const KeyVector &keys1, const KeyVector &keys2)
 
\n+DiscreteKeys gtsam::CollectDiscreteKeys (const DiscreteKeys &key1, const DiscreteKeys &key2)
 
\n

Detailed Description

\n
Date
Mar 11, 2022
\n
Author
Fan Jiang
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,42 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridConditional.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+HybridFactor.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-\u00a0 Hybrid _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl Density. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Base class for t\btr\bru\bul\bly\by hybrid probabilistic factors. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:G\bGa\bau\bus\bss\bsi\bia\ban\bnF\bFa\bac\bct\bto\bor\brG\bGr\bra\bap\bph\bhT\bTr\bre\bee\be = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< _\bK_\be_\by, _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+ >\n+\u00a0 Alias for _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be of GaussianFactorGraphs.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btK\bKe\bey\bys\bs (const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys, const\n+ _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys)\n+\u00a0\n+ _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btK\bKe\bey\bys\bs (const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys1, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+ &keys2)\n+\u00a0\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btD\bDi\bis\bsc\bcr\bre\bet\bte\beK\bKe\bey\bys\bs (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key1, const\n+ _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key2)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n Mar 11, 2022\n Author\n Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00533.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00533.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00533 = [\n- [\"gtsam::traits< HybridConditional >\", \"a03440.html\", null]\n+ [\"gtsam::traits< HybridFactor >\", \"a03452.html\", null],\n+ [\"GaussianFactorGraphTree\", \"a00533.html#a8b4a8e0d32b81b0fa2fa15c437b89e7c\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00533_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00533_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridConditional.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
HybridConditional.h
\n+
HybridFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,190 +114,141 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n-\n-\n-\n-\n-
25#include <gtsam/inference/Key.h>
\n-\n-
27
\n-
28#include <boost/make_shared.hpp>
\n-
29#include <boost/shared_ptr.hpp>
\n-
30#include <stdexcept>
\n-
31#include <string>
\n-
32#include <typeinfo>
\n-
33#include <vector>
\n-
34
\n-
35namespace gtsam {
\n-
36
\n-
\n-
60class GTSAM_EXPORT HybridConditional
\n-
61 : public HybridFactor,
\n-
62 public Conditional<HybridFactor, HybridConditional> {
\n-
63 public:
\n-
64 // typedefs needed to play nice with gtsam
\n-\n-
66 typedef boost::shared_ptr<This> shared_ptr;
\n-\n-\n-\n+
20#include <gtsam/base/Testable.h>
\n+\n+\n+\n+\n+\n+
26
\n+
27#include <cstddef>
\n+
28#include <string>
\n+
29namespace gtsam {
\n+
30
\n+
31class HybridValues;
\n+
32
\n+\n+
35
\n+
36KeyVector CollectKeys(const KeyVector &continuousKeys,
\n+
37 const DiscreteKeys &discreteKeys);
\n+
38KeyVector CollectKeys(const KeyVector &keys1, const KeyVector &keys2);
\n+
39DiscreteKeys CollectDiscreteKeys(const DiscreteKeys &key1,
\n+
40 const DiscreteKeys &key2);
\n+
41
\n+
\n+
52class GTSAM_EXPORT HybridFactor : public Factor {
\n+
53 private:
\n+
54 bool isDiscrete_ = false;
\n+
55 bool isContinuous_ = false;
\n+
56 bool isHybrid_ = false;
\n+
57
\n+
58 protected:
\n+
59 // Set of DiscreteKeys for this factor.
\n+
60 DiscreteKeys discreteKeys_;
\n+\n+
63
\n+
64 public:
\n+
65 // typedefs needed to play nice with gtsam
\n+\n+
67 typedef boost::shared_ptr<HybridFactor>
\n+\n+
69 typedef Factor Base;
\n
70
\n-
71 protected:
\n-
73 boost::shared_ptr<Factor> inner_;
\n-
74
\n-
75 public:
\n-
78
\n-
80 HybridConditional() = default;
\n-
81
\n-
\n-
89 HybridConditional(const KeyVector& continuousKeys,
\n-
90 const DiscreteKeys& discreteKeys, size_t nFrontals)
\n-
91 : BaseFactor(continuousKeys, discreteKeys), BaseConditional(nFrontals) {}
\n-
\n-
92
\n-
102 HybridConditional(const KeyVector& continuousFrontals,
\n-
103 const DiscreteKeys& discreteFrontals,
\n-
104 const KeyVector& continuousParents,
\n-
105 const DiscreteKeys& discreteParents);
\n+
73
\n+
75 HybridFactor() = default;
\n+
76
\n+
82 explicit HybridFactor(const KeyVector &keys);
\n+
83
\n+
89 explicit HybridFactor(const DiscreteKeys &discreteKeys);
\n+
90
\n+
97 HybridFactor(const KeyVector &continuousKeys,
\n+
98 const DiscreteKeys &discreteKeys);
\n+
99
\n+
101 virtual ~HybridFactor() = default;
\n+
102
\n
106
\n-\n-
114 const boost::shared_ptr<GaussianConditional>& continuousConditional);
\n-
115
\n-\n-
123 const boost::shared_ptr<DiscreteConditional>& discreteConditional);
\n+
108 virtual bool equals(const HybridFactor &lf, double tol = 1e-9) const;
\n+
109
\n+
111 void print(
\n+
112 const std::string &s = "HybridFactor\\n",
\n+
113 const KeyFormatter &formatter = DefaultKeyFormatter) const override;
\n+
114
\n+
118
\n+
120 bool isDiscrete() const { return isDiscrete_; }
\n+
121
\n+
123 bool isContinuous() const { return isContinuous_; }
\n
124
\n-
131 HybridConditional(const boost::shared_ptr<GaussianMixture>& gaussianMixture);
\n-
132
\n+
126 bool isHybrid() const { return isHybrid_; }
\n+
127
\n+
129 size_t nrContinuous() const { return continuousKeys_.size(); }
\n+
130
\n+
132 const DiscreteKeys &discreteKeys() const { return discreteKeys_; }
\n+
133
\n+
135 const KeyVector &continuousKeys() const { return continuousKeys_; }
\n
136
\n-
138 void print(
\n-
139 const std::string& s = "Hybrid Conditional: ",
\n-
140 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n-
141
\n-
143 bool equals(const HybridFactor& other, double tol = 1e-9) const override;
\n-
144
\n-
148
\n-
\n-
154 GaussianMixture::shared_ptr asMixture() const {
\n-
155 return boost::dynamic_pointer_cast<GaussianMixture>(inner_);
\n-
156 }
\n-
\n+
138
\n+
139 private:
\n+
141 friend class boost::serialization::access;
\n+
142 template <class ARCHIVE>
\n+
143 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n+
144 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
145 ar &BOOST_SERIALIZATION_NVP(isDiscrete_);
\n+
146 ar &BOOST_SERIALIZATION_NVP(isContinuous_);
\n+
147 ar &BOOST_SERIALIZATION_NVP(isHybrid_);
\n+
148 ar &BOOST_SERIALIZATION_NVP(discreteKeys_);
\n+
149 ar &BOOST_SERIALIZATION_NVP(continuousKeys_);
\n+
150 }
\n+
151};
\n+
\n+
152// HybridFactor
\n+
153
\n+
154// traits
\n+
155template <>
\n+
156struct traits<HybridFactor> : public Testable<HybridFactor> {};
\n
157
\n-
\n-\n-
164 return boost::dynamic_pointer_cast<GaussianConditional>(inner_);
\n-
165 }
\n-
\n-
166
\n-
\n-\n-
173 return boost::dynamic_pointer_cast<DiscreteConditional>(inner_);
\n-
174 }
\n-
\n-
175
\n-
177 boost::shared_ptr<Factor> inner() const { return inner_; }
\n-
178
\n-
180 double error(const HybridValues& values) const override;
\n-
181
\n-
183 double logProbability(const HybridValues& values) const override;
\n-
184
\n-
190 double logNormalizationConstant() const override;
\n-
191
\n-
193 double evaluate(const HybridValues& values) const override;
\n-
194
\n-
\n-
196 bool frontalsIn(const VectorValues& measurements) const {
\n-
197 for (Key key : frontals()) {
\n-
198 if (!measurements.exists(key)) {
\n-
199 return false;
\n-
200 }
\n-
201 }
\n-
202 return true;
\n-
203 }
\n-
\n-
204
\n-
206
\n-
207 private:
\n-
209 friend class boost::serialization::access;
\n-
210 template <class Archive>
\n-
211 void serialize(Archive& ar, const unsigned int /*version*/) {
\n-
212 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
\n-
213 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
\n-
214 ar& BOOST_SERIALIZATION_NVP(inner_);
\n-
215
\n-
216 // register the various casts based on the type of inner_
\n-
217 // https://www.boost.org/doc/libs/1_80_0/libs/serialization/doc/serialization.html#runtimecasting
\n-
218 if (isDiscrete()) {
\n-
219 boost::serialization::void_cast_register<DiscreteConditional, Factor>(
\n-
220 static_cast<DiscreteConditional*>(NULL), static_cast<Factor*>(NULL));
\n-
221 } else if (isContinuous()) {
\n-
222 boost::serialization::void_cast_register<GaussianConditional, Factor>(
\n-
223 static_cast<GaussianConditional*>(NULL), static_cast<Factor*>(NULL));
\n-
224 } else {
\n-
225 boost::serialization::void_cast_register<GaussianMixture, Factor>(
\n-
226 static_cast<GaussianMixture*>(NULL), static_cast<Factor*>(NULL));
\n-
227 }
\n-
228 }
\n-
229
\n-
230}; // HybridConditional
\n-
\n-
231
\n-
232// traits
\n-
233template <>
\n-
234struct traits<HybridConditional> : public Testable<HybridConditional> {};
\n-
235
\n-
236} // namespace gtsam
\n-\n-
Linearized Hybrid factor graph that uses type erasure.
\n-\n-
A hybrid conditional in the Conditional Linear Gaussian scheme.
\n-\n-
Base class for conditional densities.
\n-
Conditional Gaussian Base class.
\n+
158} // namespace gtsam
\n+
Concept check for values that can be used in unit tests.
\n+
Decision Tree for use in DiscreteFactors.
\n+
specialized key for discrete variables
\n+
The base class for all factors.
\n+
Linear Factor Graph where all factors are Gaussians.
\n+
A non-templated config holding any types of Manifold-group elements.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition DiscreteConditional.h:44
\n+
a decision tree is a function from assignments to values.
Definition DecisionTree.h:61
\n
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n-
Hybrid Conditional Density.
Definition HybridConditional.h:62
\n-
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition HybridConditional.h:69
\n-
HybridFactor BaseFactor
Typedef to our factor base class.
Definition HybridConditional.h:67
\n-
boost::shared_ptr< Factor > inner_
Type-erased pointer to the inner type.
Definition HybridConditional.h:73
\n-
DiscreteConditional::shared_ptr asDiscrete() const
Return conditional as a DiscreteConditional.
Definition HybridConditional.h:172
\n-
GaussianMixture::shared_ptr asMixture() const
Return HybridConditional as a GaussianMixture.
Definition HybridConditional.h:154
\n-
boost::shared_ptr< Factor > inner() const
Get the type-erased pointer to the inner type.
Definition HybridConditional.h:177
\n-
bool frontalsIn(const VectorValues &measurements) const
Check if VectorValues measurements contains all frontal keys.
Definition HybridConditional.h:196
\n-
HybridConditional(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys, size_t nFrontals)
Construct a new Hybrid Conditional object.
Definition HybridConditional.h:89
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition HybridConditional.h:66
\n-
GaussianConditional::shared_ptr asGaussian() const
Return HybridConditional as a GaussianConditional.
Definition HybridConditional.h:163
\n-
HybridConditional This
Typedef to this class.
Definition HybridConditional.h:65
\n-
HybridConditional()=default
Default constructor needed for serialization.
\n
Base class for truly hybrid probabilistic factors.
Definition HybridFactor.h:52
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Conditional.h:64
\n+
size_t nrContinuous() const
Return the number of continuous variables in this factor.
Definition HybridFactor.h:129
\n+
HybridFactor This
This class.
Definition HybridFactor.h:66
\n+
boost::shared_ptr< HybridFactor > shared_ptr
shared_ptr to this class
Definition HybridFactor.h:68
\n+
bool isDiscrete() const
True if this is a factor of discrete variables only.
Definition HybridFactor.h:120
\n+
bool isHybrid() const
True is this is a Discrete-Continuous factor.
Definition HybridFactor.h:126
\n+
HybridFactor()=default
Default constructor creates empty factor.
\n+
Factor Base
Our base class.
Definition HybridFactor.h:69
\n+
const KeyVector & continuousKeys() const
Return only the continuous keys for this factor.
Definition HybridFactor.h:135
\n+
bool isContinuous() const
True if this is a factor of continuous variables only.
Definition HybridFactor.h:123
\n+
KeyVector continuousKeys_
Record continuous keys for book-keeping.
Definition HybridFactor.h:62
\n+
virtual ~HybridFactor()=default
Virtual destructor.
\n+
const DiscreteKeys & discreteKeys() const
Return the discrete keys for this factor.
Definition HybridFactor.h:132
\n
Definition Factor.h:68
\n-
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianConditional.h:46
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
bool exists(Key j) const
Check whether a variable with key j exists.
Definition VectorValues.h:133
\n+
the error.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridConditional.h\n+HybridFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,260 +16,198 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-27\n-28#include \n-29#include \n-30#include \n-31#include \n-32#include \n-33#include \n-34\n-35namespace _\bg_\bt_\bs_\ba_\bm {\n-36\n-_\b6_\b0class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-61 : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br,\n-62 public _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n-63 public:\n-64 // typedefs needed to play nice with gtsam\n-_\b6_\b5 typedef _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bT_\bh_\bi_\bs;\n-_\b6_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-_\b6_\b7 typedef _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br;\n-68 typedef _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bT_\bh_\bi_\bs_\b>\n-_\b6_\b9 _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+26\n+27#include \n+28#include \n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+31class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+32\n+_\b3_\b4using _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>;\n+35\n+36_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br CollectKeys(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys,\n+37 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys);\n+38_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br CollectKeys(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys1, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys2);\n+39_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs CollectDiscreteKeys(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key1,\n+40 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key2);\n+41\n+_\b5_\b2class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br : public _\bF_\ba_\bc_\bt_\bo_\br {\n+53 private:\n+54 bool isDiscrete_ = false;\n+55 bool isContinuous_ = false;\n+56 bool isHybrid_ = false;\n+57\n+58 protected:\n+59 // Set of DiscreteKeys for this factor.\n+60 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs discreteKeys_;\n+_\b6_\b2 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs_\b_;\n+63\n+64 public:\n+65 // typedefs needed to play nice with gtsam\n+_\b6_\b6 typedef _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+67 typedef boost::shared_ptr\n+_\b6_\b8 _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b6_\b9 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n 70\n-71 protected:\n-_\b7_\b3 boost::shared_ptr _\bi_\bn_\bn_\be_\br_\b_;\n-74\n-75 public:\n-78\n-_\b8_\b0 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() = default;\n-81\n-_\b8_\b9 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& continuousKeys,\n-90 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& discreteKeys, size_t nFrontals)\n-91 : _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(continuousKeys, discreteKeys), _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(nFrontals) {}\n-92\n-102 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& continuousFrontals,\n-103 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& discreteFrontals,\n-104 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& continuousParents,\n-105 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& discreteParents);\n+73\n+_\b7_\b5 _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br() = default;\n+76\n+82 explicit _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys);\n+83\n+89 explicit _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys);\n+90\n+97 _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys,\n+98 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys);\n+99\n+_\b1_\b0_\b1 virtual _\b~_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br() = default;\n+102\n 106\n-113 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(\n-114 const boost::shared_ptr& continuousConditional);\n-115\n-122 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(\n-123 const boost::shared_ptr& discreteConditional);\n+108 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br &lf, double tol = 1e-9) const;\n+109\n+111 void _\bp_\br_\bi_\bn_\bt(\n+112 const std::string &s = \"HybridFactor\\n\",\n+113 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &formatter = DefaultKeyFormatter) const override;\n+114\n+118\n+_\b1_\b2_\b0 bool _\bi_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be() const { return isDiscrete_; }\n+121\n+_\b1_\b2_\b3 bool _\bi_\bs_\bC_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs() const { return isContinuous_; }\n 124\n-131 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const boost::shared_ptr&\n-gaussianMixture);\n-132\n+_\b1_\b2_\b6 bool _\bi_\bs_\bH_\by_\bb_\br_\bi_\bd() const { return isHybrid_; }\n+127\n+_\b1_\b2_\b9 size_t _\bn_\br_\bC_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs() const { return continuousKeys_.size(); }\n+130\n+_\b1_\b3_\b2 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs() const { return discreteKeys_; }\n+133\n+_\b1_\b3_\b5 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs() const { return continuousKeys_; }\n 136\n-138 void _\bp_\br_\bi_\bn_\bt(\n-139 const std::string& s = \"Hybrid Conditional: \",\n-140 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n-141\n-143 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br& other, double tol = 1e-9) const override;\n-144\n-148\n-_\b1_\b5_\b4 GaussianMixture::shared_ptr _\ba_\bs_\bM_\bi_\bx_\bt_\bu_\br_\be() const {\n-155 return boost::dynamic_pointer_cast(inner_);\n-156 }\n+138\n+139 private:\n+_\b1_\b4_\b1 friend class boost::serialization::access;\n+142 template \n+143 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+144 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+145 ar &BOOST_SERIALIZATION_NVP(isDiscrete_);\n+146 ar &BOOST_SERIALIZATION_NVP(isContinuous_);\n+147 ar &BOOST_SERIALIZATION_NVP(isHybrid_);\n+148 ar &BOOST_SERIALIZATION_NVP(discreteKeys_);\n+149 ar &BOOST_SERIALIZATION_NVP(continuousKeys_);\n+150 }\n+151};\n+152// HybridFactor\n+153\n+154// traits\n+155template <>\n+_\b1_\b5_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n 157\n-_\b1_\b6_\b3 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\ba_\bs_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn() const {\n-164 return boost::dynamic_pointer_cast(inner_);\n-165 }\n-166\n-_\b1_\b7_\b2 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\ba_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be() const {\n-173 return boost::dynamic_pointer_cast(inner_);\n-174 }\n-175\n-_\b1_\b7_\b7 boost::shared_ptr _\bi_\bn_\bn_\be_\br() const { return inner_; }\n-178\n-180 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const override;\n-181\n-183 double logProbability(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const override;\n-184\n-190 double logNormalizationConstant() const override;\n-191\n-193 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const override;\n-194\n-_\b1_\b9_\b6 bool _\bf_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bI_\bn(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& measurements) const {\n-197 for (_\bK_\be_\by key : frontals()) {\n-198 if (!measurements._\be_\bx_\bi_\bs_\bt_\bs(key)) {\n-199 return false;\n-200 }\n-201 }\n-202 return true;\n-203 }\n-204\n-206\n-207 private:\n-_\b2_\b0_\b9 friend class boost::serialization::access;\n-210 template \n-211 void serialize(Archive& ar, const unsigned int /*version*/) {\n-212 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br);\n-213 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl);\n-214 ar& BOOST_SERIALIZATION_NVP(inner_);\n-215\n-216 // register the various casts based on the type of inner_\n-217 // https://www.boost.org/doc/libs/1_80_0/libs/serialization/doc/\n-serialization.html#runtimecasting\n-218 if (isDiscrete()) {\n-219 boost::serialization::void_cast_register(\n-220 static_cast<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl*>(NULL), static_cast<_\bF_\ba_\bc_\bt_\bo_\br*>(NULL));\n-221 } else if (isContinuous()) {\n-222 boost::serialization::void_cast_register(\n-223 static_cast<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl*>(NULL), static_cast<_\bF_\ba_\bc_\bt_\bo_\br*>(NULL));\n-224 } else {\n-225 boost::serialization::void_cast_register(\n-226 static_cast(NULL), static_cast(NULL));\n-227 }\n-228 }\n-229\n-230}; // HybridConditional\n-231\n-232// traits\n-233template <>\n-_\b2_\b3_\b4struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-235\n-236} // namespace gtsam\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linearized Hybrid factor graph that uses type erasure.\n-_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b._\bh\n-A hybrid conditional in the Conditional Linear Gaussian scheme.\n-_\bK_\be_\by_\b._\bh\n-_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-Base class for conditional densities.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-Conditional Gaussian Base class.\n+158} // namespace gtsam\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+Decision Tree for use in DiscreteFactors.\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n+specialized key for discrete variables\n+_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+The base class for all factors.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+A non-templated config holding any types of Manifold-group elements.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Discrete Conditional Density Derives from DecisionTreeFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n+a decision tree is a function from assignments to values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:61\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n DiscreteKeys is a set of keys that can be assembled using the & operator.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Hybrid Conditional Density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Conditional< BaseFactor, This > BaseConditional\n-Typedef to our conditional base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-HybridFactor BaseFactor\n-Typedef to our factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bi_\bn_\bn_\be_\br_\b_\n-boost::shared_ptr< Factor > inner_\n-Type-erased pointer to the inner type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\ba_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be\n-DiscreteConditional::shared_ptr asDiscrete() const\n-Return conditional as a DiscreteConditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:172\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\ba_\bs_\bM_\bi_\bx_\bt_\bu_\br_\be\n-GaussianMixture::shared_ptr asMixture() const\n-Return HybridConditional as a GaussianMixture.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bi_\bn_\bn_\be_\br\n-boost::shared_ptr< Factor > inner() const\n-Get the type-erased pointer to the inner type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bI_\bn\n-bool frontalsIn(const VectorValues &measurements) const\n-Check if VectorValues measurements contains all frontal keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:196\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-HybridConditional(const KeyVector &continuousKeys, const DiscreteKeys\n-&discreteKeys, size_t nFrontals)\n-Construct a new Hybrid Conditional object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\ba_\bs_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn\n-GaussianConditional::shared_ptr asGaussian() const\n-Return HybridConditional as a GaussianConditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bT_\bh_\bi_\bs\n-HybridConditional This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-HybridConditional()=default\n-Default constructor needed for serialization.\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n Base class for truly hybrid probabilistic factors.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\br_\bC_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs\n+size_t nrContinuous() const\n+Return the number of continuous variables in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:129\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+HybridFactor This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< HybridFactor > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be\n+bool isDiscrete() const\n+True if this is a factor of discrete variables only.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bH_\by_\bb_\br_\bi_\bd\n+bool isHybrid() const\n+True is this is a Discrete-Continuous factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+HybridFactor()=default\n+Default constructor creates empty factor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n+Factor Base\n+Our base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs\n+const KeyVector & continuousKeys() const\n+Return only the continuous keys for this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs\n+bool isContinuous() const\n+True if this is a factor of continuous variables only.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs_\b_\n+KeyVector continuousKeys_\n+Record continuous keys for book-keeping.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+virtual ~HybridFactor()=default\n+Virtual destructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+const DiscreteKeys & discreteKeys() const\n+Return the discrete keys for this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:132\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-A GaussianConditional functions as the node in a Bayes network.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(Key j) const\n-Check whether a variable with key j exists.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:133\n+_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+the error.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00536.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00536.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactorGraph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixtureFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,53 +95,50 @@\n \n \n \n \n
\n \n-
HybridFactorGraph.h File Reference
\n+Namespaces
\n+
GaussianMixtureFactor.h File Reference
\n \n
\n \n-

Factor graph with utilities for hybrid factors. \n+

A set of GaussianFactors, indexed by a set of discrete keys. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::HybridFactorGraph
 Hybrid Factor Graph Factor graph with utilities for hybrid factors. More...
class  gtsam::GaussianMixtureFactor
 Implementation of a discrete conditional mixture factor. More...
 
struct  gtsam::traits< GaussianMixtureFactor >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Typedefs

\n-using gtsam::SharedFactor = boost::shared_ptr< Factor >
 
\n

Detailed Description

\n-

Factor graph with utilities for hybrid factors.

\n-
Author
Varun Agrawal
\n+

A set of GaussianFactors, indexed by a set of discrete keys.

\n+
Author
Fan Jiang
\n+
\n+Varun Agrawal
\n
\n Frank Dellaert
\n-
Date
May 28, 2022
\n+
Date
Mar 12, 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-HybridFactorGraph.h File Reference\n-Factor graph with utilities for hybrid factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GaussianMixtureFactor.h File Reference\n+A set of GaussianFactors, indexed by a set of discrete keys. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-\u00a0 Hybrid _\bF_\ba_\bc_\bt_\bo_\br Graph _\bF_\ba_\bc_\bt_\bo_\br graph with utilities for hybrid factors.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Implementation of a discrete conditional mixture factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bha\bar\bre\bed\bdF\bFa\bac\bct\bto\bor\br = boost::shared_ptr< _\bF_\ba_\bc_\bt_\bo_\br >\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor graph with utilities for hybrid factors.\n+A set of GaussianFactors, indexed by a set of discrete keys.\n Author\n+ Fan Jiang\n Varun Agrawal\n Frank Dellaert\n Date\n- May 28, 2022\n+ Mar 12, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00536.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00536.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00536 = [\n- [\"gtsam::HybridFactorGraph\", \"a03456.html\", \"a03456\"]\n+ [\"gtsam::traits< GaussianMixtureFactor >\", \"a03404.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00536_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00536_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixtureFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,92 +98,149 @@\n
No Matches
\n \n \n \n \n \n
\n-
HybridFactorGraph.h
\n+
GaussianMixtureFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-\n-
24
\n-
25#include <boost/format.hpp>
\n-
26#include <unordered_map>
\n-
27
\n-
28namespace gtsam {
\n+
21#pragma once
\n+
22
\n+\n+\n+\n+\n+\n+\n
29
\n-
30class DiscreteFactor;
\n-
31class Ordering;
\n-
32
\n-
33using SharedFactor = boost::shared_ptr<Factor>;
\n-
34
\n-
\n-
39class HybridFactorGraph : public FactorGraph<Factor> {
\n-
40 public:
\n-\n-\n-
43 using shared_ptr = boost::shared_ptr<This>;
\n-
44
\n-\n-
46 using Indices = KeyVector;
\n-
47
\n+
30namespace gtsam {
\n+
31
\n+
32class HybridValues;
\n+
33class DiscreteValues;
\n+
34class VectorValues;
\n+
35
\n+
\n+
47class GTSAM_EXPORT GaussianMixtureFactor : public HybridFactor {
\n
48 public:
\n-
51
\n-
53 HybridFactorGraph() = default;
\n+
49 using Base = HybridFactor;
\n+\n+
51 using shared_ptr = boost::shared_ptr<This>;
\n+
52
\n+
53 using sharedFactor = boost::shared_ptr<GaussianFactor>;
\n
54
\n-
60 template <class DERIVEDFACTOR>
\n-\n-
62
\n-
66
\n-
68 std::set<DiscreteKey> discreteKeys() const;
\n+\n+
57
\n+
58 private:
\n+
60 Factors factors_;
\n+
61
\n+
68 GaussianFactorGraphTree asGaussianFactorGraphTree() const;
\n
69
\n-
71 KeySet discreteKeySet() const;
\n-
72
\n-
74 std::unordered_map<Key, DiscreteKey> discreteKeyMap() const;
\n-
75
\n-
77 const KeySet continuousKeySet() const;
\n-
78
\n-
80};
\n-
\n-
81
\n-
82} // namespace gtsam
\n-\n-
Factor Graph Base Class.
\n+
70 public:
\n+
73
\n+\n+
76
\n+
86 GaussianMixtureFactor(const KeyVector &continuousKeys,
\n+
87 const DiscreteKeys &discreteKeys,
\n+
88 const Factors &factors);
\n+
89
\n+
\n+
98 GaussianMixtureFactor(const KeyVector &continuousKeys,
\n+
99 const DiscreteKeys &discreteKeys,
\n+
100 const std::vector<sharedFactor> &factors)
\n+
101 : GaussianMixtureFactor(continuousKeys, discreteKeys,
\n+
102 Factors(discreteKeys, factors)) {}
\n+
\n+
103
\n+
107
\n+
108 bool equals(const HybridFactor &lf, double tol = 1e-9) const override;
\n+
109
\n+
110 void print(
\n+
111 const std::string &s = "GaussianMixtureFactor\\n",
\n+
112 const KeyFormatter &formatter = DefaultKeyFormatter) const override;
\n+
113
\n+
117
\n+
119 sharedFactor operator()(const DiscreteValues &assignment) const;
\n+
120
\n+\n+
130
\n+
138 AlgebraicDecisionTree<Key> error(const VectorValues &continuousValues) const;
\n+
139
\n+
144 double error(const HybridValues &values) const override;
\n+
145
\n+
\n+\n+\n+
149 sum = factor.add(sum);
\n+
150 return sum;
\n+
151 }
\n+
\n+
153
\n+
154 private:
\n+
156 friend class boost::serialization::access;
\n+
157 template <class ARCHIVE>
\n+
158 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n+
159 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
160 ar &BOOST_SERIALIZATION_NVP(factors_);
\n+
161 }
\n+
162};
\n+
\n+
163
\n+
164// traits
\n+
165template <>
\n+
\n+
166struct traits<GaussianMixtureFactor> : public Testable<GaussianMixtureFactor> {
\n+
167};
\n+
\n+
168
\n+
169} // namespace gtsam
\n+
Decision Tree for use in DiscreteFactors.
\n+
Algebraic Decision Trees.
\n+
specialized key for discrete variables
\n+\n+
A factor with a quadratic error function - a Gaussian.
\n+
Linear Factor Graph where all factors are Gaussians.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-\n-
Hybrid Factor Graph Factor graph with utilities for hybrid factors.
Definition HybridFactorGraph.h:39
\n-
HybridFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition HybridFactorGraph.h:61
\n-
KeySet discreteKeySet() const
Get all the discrete keys in the factor graph, as a set.
Definition HybridFactorGraph.cpp:46
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to This
Definition HybridFactorGraph.h:43
\n-
std::unordered_map< Key, DiscreteKey > discreteKeyMap() const
Get a map from Key to corresponding DiscreteKey.
Definition HybridFactorGraph.cpp:56
\n-
const KeySet continuousKeySet() const
Get all the continuous keys in the factor graph.
Definition HybridFactorGraph.cpp:65
\n-
HybridFactorGraph()=default
Default constructor.
\n-
std::set< DiscreteKey > discreteKeys() const
Get all the discrete keys in the factor graph.
Definition HybridFactorGraph.cpp:28
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
An algebraic decision tree fixes the range of a DecisionTree to double.
Definition AlgebraicDecisionTree.h:38
\n+\n+
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n+
A map from keys to values.
Definition DiscreteValues.h:34
\n+
Implementation of a discrete conditional mixture factor.
Definition GaussianMixtureFactor.h:47
\n+
GaussianMixtureFactor()=default
Default constructor, mainly for serialization.
\n+
GaussianMixtureFactor(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys, const std::vector< sharedFactor > &factors)
Construct a new GaussianMixtureFactor object using a vector of GaussianFactor shared pointers.
Definition GaussianMixtureFactor.h:98
\n+
GaussianFactorGraphTree add(const GaussianFactorGraphTree &sum) const
Combine the Gaussian Factor Graphs in sum and this while maintaining the original tree structure.
Definition GaussianMixtureFactor.cpp:85
\n+
friend GaussianFactorGraphTree & operator+=(GaussianFactorGraphTree &sum, const GaussianMixtureFactor &factor)
Add MixtureFactor to a Sum, syntactic sugar.
Definition GaussianMixtureFactor.h:147
\n+
Base class for truly hybrid probabilistic factors.
Definition HybridFactor.h:52
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
The Factor::error simply extracts the.
\n+
the error.
\n+
The Factor::error simply extracts the.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,116 +1,191 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridFactorGraph.h\n+GaussianMixtureFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24\n-25#include \n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n 29\n-30class DiscreteFactor;\n-31class Ordering;\n-32\n-33using SharedFactor = boost::shared_ptr;\n-34\n-_\b3_\b9class _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh : public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n-40 public:\n-41 using _\bB_\ba_\bs_\be = _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\ba_\bc_\bt_\bo_\br_\b>;\n-_\b4_\b2 using _\bT_\bh_\bi_\bs = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n-_\b4_\b3 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n-44\n-_\b4_\b5 using _\bV_\ba_\bl_\bu_\be_\bs = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs;\n-46 using Indices = _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br;\n-47\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+32class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+33class _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs;\n+34class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+35\n+_\b4_\b7class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br {\n 48 public:\n-51\n-_\b5_\b3 _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() = default;\n+49 using _\bB_\ba_\bs_\be = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n+50 using _\bT_\bh_\bi_\bs = _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br;\n+51 using shared_ptr = boost::shared_ptr;\n+52\n+53 using sharedFactor = boost::shared_ptr;\n 54\n-60 template \n-_\b6_\b1 _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph) : _\bB_\ba_\bs_\be(graph) {}\n-62\n-66\n-68 std::set _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs() const;\n+_\b5_\b6 using _\bF_\ba_\bc_\bt_\bo_\br_\bs = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b,_\b _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>;\n+57\n+58 private:\n+60 _\bF_\ba_\bc_\bt_\bo_\br_\bs factors_;\n+61\n+68 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be asGaussianFactorGraphTree() const;\n 69\n-71 _\bK_\be_\by_\bS_\be_\bt _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bS_\be_\bt() const;\n-72\n-74 std::unordered_map _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bM_\ba_\bp() const;\n-75\n-77 const _\bK_\be_\by_\bS_\be_\bt _\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bS_\be_\bt() const;\n-78\n-80};\n-81\n-82} // namespace gtsam\n+70 public:\n+73\n+_\b7_\b5 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br() = default;\n+76\n+86 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys,\n+87 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys,\n+88 const _\bF_\ba_\bc_\bt_\bo_\br_\bs &factors);\n+89\n+_\b9_\b8 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys,\n+99 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys,\n+100 const std::vector &factors)\n+101 : _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br(continuousKeys, discreteKeys,\n+102 _\bF_\ba_\bc_\bt_\bo_\br_\bs(discreteKeys, factors)) {}\n+103\n+107\n+108 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br &lf, double tol = 1e-9) const override;\n+109\n+110 void _\bp_\br_\bi_\bn_\bt(\n+111 const std::string &s = \"GaussianMixtureFactor\\n\",\n+112 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &formatter = DefaultKeyFormatter) const override;\n+113\n+117\n+119 sharedFactor operator()(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &assignment) const;\n+120\n+129 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be add(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be &sum) const;\n+130\n+138 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b> error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &continuousValues)\n+const;\n+139\n+144 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const override;\n+145\n+_\b1_\b4_\b7 friend _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be &_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(\n+148 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be &sum, const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br &factor) {\n+149 sum = factor._\ba_\bd_\bd(sum);\n+150 return sum;\n+151 }\n+153\n+154 private:\n+_\b1_\b5_\b6 friend class boost::serialization::access;\n+157 template \n+158 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+159 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+160 ar &BOOST_SERIALIZATION_NVP(factors_);\n+161 }\n+162};\n+163\n+164// traits\n+165template <>\n+_\b1_\b6_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br> : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+167};\n+168\n+169} // namespace gtsam\n+_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+Decision Tree for use in DiscreteFactors.\n+_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+Algebraic Decision Trees.\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n+specialized key for discrete variables\n _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+A factor with a quadratic error function - a Gaussian.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-Hybrid Factor Graph Factor graph with utilities for hybrid factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-HybridFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n-Implicit copy/downcast constructor to override explicit template container\n-constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bS_\be_\bt\n-KeySet discreteKeySet() const\n-Get all the discrete keys in the factor graph, as a set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.cpp:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bM_\ba_\bp\n-std::unordered_map< Key, DiscreteKey > discreteKeyMap() const\n-Get a map from Key to corresponding DiscreteKey.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.cpp:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bS_\be_\bt\n-const KeySet continuousKeySet() const\n-Get all the continuous keys in the factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.cpp:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-HybridFactorGraph()=default\n-Default constructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-std::set< DiscreteKey > discreteKeys() const\n-Get all the discrete keys in the factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.cpp:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n+An algebraic decision tree fixes the range of a DecisionTree to double.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bK_\be_\by_\b,_\b _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys is a set of keys that can be assembled using the & operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+A map from keys to values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Implementation of a discrete conditional mixture factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixtureFactor.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n+GaussianMixtureFactor()=default\n+Default constructor, mainly for serialization.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n+GaussianMixtureFactor(const KeyVector &continuousKeys, const DiscreteKeys\n+&discreteKeys, const std::vector< sharedFactor > &factors)\n+Construct a new GaussianMixtureFactor object using a vector of GaussianFactor\n+shared pointers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixtureFactor.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bd\n+GaussianFactorGraphTree add(const GaussianFactorGraphTree &sum) const\n+Combine the Gaussian Factor Graphs in sum and this while maintaining the\n+original tree structure.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixtureFactor.cpp:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n+friend GaussianFactorGraphTree & operator+=(GaussianFactorGraphTree &sum, const\n+GaussianMixtureFactor &factor)\n+Add MixtureFactor to a Sum, syntactic sugar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixtureFactor.h:147\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+Base class for truly hybrid probabilistic factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n+_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+the error.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00539.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00539.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianFactorGraph.h File Reference\n \n \n \n \n \n \n \n@@ -96,62 +96,54 @@\n \n \n \n
\n \n-
HybridFactor.h File Reference
\n+
HybridGaussianFactorGraph.h File Reference
\n
\n
\n \n+

Linearized Hybrid factor graph that uses type erasure. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n+\n \n-\n+\n \n

\n Classes

class  gtsam::HybridFactor
 Base class for truly hybrid probabilistic factors. More...
struct  gtsam::EliminationTraits< HybridGaussianFactorGraph >
 
struct  gtsam::traits< HybridFactor >
class  gtsam::HybridGaussianFactorGraph
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::GaussianFactorGraphTree = DecisionTree< Key, GaussianFactorGraph >
 Alias for DecisionTree of GaussianFactorGraphs.
 
\n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n

\n Functions

\n-KeyVector gtsam::CollectKeys (const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys)
 
\n-KeyVector gtsam::CollectKeys (const KeyVector &keys1, const KeyVector &keys2)
 
\n-DiscreteKeys gtsam::CollectDiscreteKeys (const DiscreteKeys &key1, const DiscreteKeys &key2)
 
std::pair< HybridConditional::shared_ptr, boost::shared_ptr< Factor > > gtsam::EliminateHybrid (const HybridGaussianFactorGraph &factors, const Ordering &keys)
 Main elimination function for HybridGaussianFactorGraph.
 
const Ordering gtsam::HybridOrdering (const HybridGaussianFactorGraph &graph)
 Return a Colamd constrained ordering where the discrete keys are eliminated after the continuous keys.
 
\n

Detailed Description

\n-
Date
Mar 11, 2022
\n-
Author
Fan Jiang
\n+

Linearized Hybrid factor graph that uses type erasure.

\n+
Author
Fan Jiang, Varun Agrawal, Frank Dellaert
\n+
Date
Mar 11, 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,42 +1,41 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-HybridFactor.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+HybridGaussianFactorGraph.h File Reference\n+Linearized Hybrid factor graph that uses type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Base class for t\btr\bru\bul\bly\by hybrid probabilistic factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:G\bGa\bau\bus\bss\bsi\bia\ban\bnF\bFa\bac\bct\bto\bor\brG\bGr\bra\bap\bph\bhT\bTr\bre\bee\be = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< _\bK_\be_\by, _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n- >\n-\u00a0 Alias for _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be of GaussianFactorGraphs.\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btK\bKe\bey\bys\bs (const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys, const\n- _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys)\n-\u00a0\n- _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btK\bKe\bey\bys\bs (const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys1, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n- &keys2)\n-\u00a0\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bol\bll\ble\bec\bct\btD\bDi\bis\bsc\bcr\bre\bet\bte\beK\bKe\bey\bys\bs (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key1, const\n- _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key2)\n+ std::pair< _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bH_\by_\bb_\br_\bi_\bd (const\n+_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, boost::shared_ptr< _\bF_\ba_\bc_\bt_\bo_\br > _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors,\n+ >\u00a0 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n+\u00a0 Main elimination function for\n+ _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n+\u00a0\n+ const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bO_\br_\bd_\be_\br_\bi_\bn_\bg (const\n+ _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph)\n+ Return a Colamd constrained ordering\n+\u00a0 where the discrete keys are eliminated\n+ after the continuous keys.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Linearized Hybrid factor graph that uses type erasure.\n+ Author\n+ Fan Jiang, Varun Agrawal, Frank Dellaert\n Date\n Mar 11, 2022\n- Author\n- Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00539.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00539.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,5 @@\n var a00539 = [\n- [\"gtsam::traits< HybridFactor >\", \"a03452.html\", null],\n- [\"GaussianFactorGraphTree\", \"a00539.html#a8b4a8e0d32b81b0fa2fa15c437b89e7c\", null]\n+ [\"gtsam::EliminationTraits< HybridGaussianFactorGraph >\", \"a03460.html\", \"a03460\"],\n+ [\"EliminateHybrid\", \"a00539.html#gacbc9f97e48e6aa3abb5f789af8c3bfe5\", null],\n+ [\"HybridOrdering\", \"a00539.html#a584e4e05d52a617c1d313e1f53c8ce58\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00539_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00539_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -98,157 +98,192 @@\n
No Matches
\n \n \n \n \n \n
\n-
HybridFactor.h
\n+
HybridGaussianFactorGraph.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Testable.h>
\n-\n-\n-\n-\n-\n-
26
\n-
27#include <cstddef>
\n-
28#include <string>
\n-
29namespace gtsam {
\n-
30
\n-
31class HybridValues;
\n-
32
\n-\n-
35
\n-
36KeyVector CollectKeys(const KeyVector &continuousKeys,
\n-
37 const DiscreteKeys &discreteKeys);
\n-
38KeyVector CollectKeys(const KeyVector &keys1, const KeyVector &keys2);
\n-
39DiscreteKeys CollectDiscreteKeys(const DiscreteKeys &key1,
\n-
40 const DiscreteKeys &key2);
\n-
41
\n-
\n-
52class GTSAM_EXPORT HybridFactor : public Factor {
\n-
53 private:
\n-
54 bool isDiscrete_ = false;
\n-
55 bool isContinuous_ = false;
\n-
56 bool isHybrid_ = false;
\n-
57
\n-
58 protected:
\n-
59 // Set of DiscreteKeys for this factor.
\n-
60 DiscreteKeys discreteKeys_;
\n-\n+
19#pragma once
\n+
20
\n+\n+\n+\n+\n+\n+\n+\n+\n+
29
\n+
30namespace gtsam {
\n+
31
\n+
32// Forward declarations
\n+
33class HybridGaussianFactorGraph;
\n+
34class HybridConditional;
\n+
35class HybridBayesNet;
\n+
36class HybridEliminationTree;
\n+
37class HybridBayesTree;
\n+
38class HybridJunctionTree;
\n+
39class DecisionTreeFactor;
\n+
40class JacobianFactor;
\n+
41class HybridValues;
\n+
42
\n+
51GTSAM_EXPORT
\n+
52std::pair<boost::shared_ptr<HybridConditional>, boost::shared_ptr<Factor>>
\n+
53EliminateHybrid(const HybridGaussianFactorGraph& factors, const Ordering& keys);
\n+
54
\n+
61GTSAM_EXPORT const Ordering
\n+
62HybridOrdering(const HybridGaussianFactorGraph& graph);
\n
63
\n-
64 public:
\n-
65 // typedefs needed to play nice with gtsam
\n-\n-
67 typedef boost::shared_ptr<HybridFactor>
\n-\n-
69 typedef Factor Base;
\n-
70
\n-
73
\n-
75 HybridFactor() = default;
\n-
76
\n-
82 explicit HybridFactor(const KeyVector &keys);
\n-
83
\n-
89 explicit HybridFactor(const DiscreteKeys &discreteKeys);
\n-
90
\n-
97 HybridFactor(const KeyVector &continuousKeys,
\n-
98 const DiscreteKeys &discreteKeys);
\n-
99
\n-
101 virtual ~HybridFactor() = default;
\n-
102
\n-
106
\n-
108 virtual bool equals(const HybridFactor &lf, double tol = 1e-9) const;
\n-
109
\n-
111 void print(
\n-
112 const std::string &s = "HybridFactor\\n",
\n-
113 const KeyFormatter &formatter = DefaultKeyFormatter) const override;
\n-
114
\n+
64/* ************************************************************************* */
\n+
65template <>
\n+
\n+\n+\n+\n+\n+
71 typedef HybridConditional
\n+\n+
73 typedef HybridBayesNet
\n+\n+\n+\n+\n+\n+
80 static std::pair<boost::shared_ptr<ConditionalType>,
\n+
81 boost::shared_ptr<FactorType>>
\n+
\n+
82 DefaultEliminate(const FactorGraphType& factors, const Ordering& keys) {
\n+
83 return EliminateHybrid(factors, keys);
\n+
84 }
\n+
\n+
\n+\n+
87 const FactorGraphType& graph,
\n+
88 boost::optional<const VariableIndex&> variableIndex) {
\n+
89 return HybridOrdering(graph);
\n+
90 }
\n+
\n+
91};
\n+
\n+
92
\n+
\n+\n+
101 : public HybridFactorGraph,
\n+
102 public EliminateableFactorGraph<HybridGaussianFactorGraph> {
\n+
103 protected:
\n+
105 template <typename FACTOR>
\n+
106 using IsGaussian = typename std::enable_if<
\n+
107 std::is_base_of<GaussianFactor, FACTOR>::value>::type;
\n+
108
\n+
109 public:
\n+
110 using Base = HybridFactorGraph;
\n+\n+\n+\n+
114 using shared_ptr = boost::shared_ptr<This>;
\n+
115
\n+\n+\n
118
\n-
120 bool isDiscrete() const { return isDiscrete_; }
\n
121
\n-
123 bool isContinuous() const { return isContinuous_; }
\n+\n
124
\n-
126 bool isHybrid() const { return isHybrid_; }
\n-
127
\n-
129 size_t nrContinuous() const { return continuousKeys_.size(); }
\n-
130
\n-
132 const DiscreteKeys &discreteKeys() const { return discreteKeys_; }
\n+
130 template <class DERIVEDFACTOR>
\n+
\n+\n+
132 : Base(graph) {}
\n+
\n
133
\n-
135 const KeyVector &continuousKeys() const { return continuousKeys_; }
\n-
136
\n-
138
\n-
139 private:
\n-
141 friend class boost::serialization::access;
\n-
142 template <class ARCHIVE>
\n-
143 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n-
144 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
145 ar &BOOST_SERIALIZATION_NVP(isDiscrete_);
\n-
146 ar &BOOST_SERIALIZATION_NVP(isContinuous_);
\n-
147 ar &BOOST_SERIALIZATION_NVP(isHybrid_);
\n-
148 ar &BOOST_SERIALIZATION_NVP(discreteKeys_);
\n-
149 ar &BOOST_SERIALIZATION_NVP(continuousKeys_);
\n-
150 }
\n-
151};
\n-
\n-
152// HybridFactor
\n-
153
\n-
154// traits
\n-
155template <>
\n-
156struct traits<HybridFactor> : public Testable<HybridFactor> {};
\n-
157
\n-
158} // namespace gtsam
\n-
Concept check for values that can be used in unit tests.
\n-
specialized key for discrete variables
\n-
Decision Tree for use in DiscreteFactors.
\n-
The base class for all factors.
\n-
Linear Factor Graph where all factors are Gaussians.
\n-
A non-templated config holding any types of Manifold-group elements.
\n+
137
\n+
138 // TODO(dellaert): customize print and equals.
\n+
139 // void print(const std::string& s = "HybridGaussianFactorGraph",
\n+
140 // const KeyFormatter& keyFormatter = DefaultKeyFormatter) const
\n+
141 // override;
\n+
142 // bool equals(const This& fg, double tol = 1e-9) const override;
\n+
143
\n+
147
\n+
148 using Base::error; // Expose error(const HybridValues&) method..
\n+
149
\n+
159 AlgebraicDecisionTree<Key> error(const VectorValues& continuousValues) const;
\n+
160
\n+\n+
170 const VectorValues& continuousValues) const;
\n+
171
\n+
178 double probPrime(const HybridValues& values) const;
\n+
179
\n+
189 GaussianFactorGraphTree assembleGraphTree() const;
\n+
190
\n+
192};
\n+
\n+
193
\n+
194} // namespace gtsam
\n+\n+
A set of GaussianFactors, indexed by a set of discrete keys.
\n+
Factor graph with utilities for hybrid factors.
\n+
Variable ordering for the elimination algorithm.
\n+
Variable elimination algorithms for factor graphs.
\n+
Factor Graph Base Class.
\n+
A factor with a quadratic error function - a Gaussian.
\n+
Factor Graph Values.
\n+
std::pair< HybridConditional::shared_ptr, boost::shared_ptr< Factor > > EliminateHybrid(const HybridGaussianFactorGraph &factors, const Ordering &frontalKeys)
Main elimination function for HybridGaussianFactorGraph.
Definition HybridGaussianFactorGraph.cpp:320
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
const Ordering HybridOrdering(const HybridGaussianFactorGraph &graph)
Return a Colamd constrained ordering where the discrete keys are eliminated after the continuous keys...
Definition HybridGaussianFactorGraph.cpp:72
\n+
An algebraic decision tree fixes the range of a DecisionTree to double.
Definition AlgebraicDecisionTree.h:38
\n
a decision tree is a function from assignments to values.
Definition DecisionTree.h:61
\n-
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n-
Base class for truly hybrid probabilistic factors.
Definition HybridFactor.h:52
\n-
size_t nrContinuous() const
Return the number of continuous variables in this factor.
Definition HybridFactor.h:129
\n-
HybridFactor This
This class.
Definition HybridFactor.h:66
\n-
boost::shared_ptr< HybridFactor > shared_ptr
shared_ptr to this class
Definition HybridFactor.h:68
\n-
bool isDiscrete() const
True if this is a factor of discrete variables only.
Definition HybridFactor.h:120
\n-
bool isHybrid() const
True is this is a Discrete-Continuous factor.
Definition HybridFactor.h:126
\n-
HybridFactor()=default
Default constructor creates empty factor.
\n-
Factor Base
Our base class.
Definition HybridFactor.h:69
\n-
const KeyVector & continuousKeys() const
Return only the continuous keys for this factor.
Definition HybridFactor.h:135
\n-
bool isContinuous() const
True if this is a factor of continuous variables only.
Definition HybridFactor.h:123
\n-
KeyVector continuousKeys_
Record continuous keys for book-keeping.
Definition HybridFactor.h:62
\n-
virtual ~HybridFactor()=default
Virtual destructor.
\n-
const DiscreteKeys & discreteKeys() const
Return the discrete keys for this factor.
Definition HybridFactor.h:132
\n+
A hybrid Bayes net is a collection of HybridConditionals, which can have discrete conditionals,...
Definition HybridBayesNet.h:35
\n+
A Bayes tree representing a Hybrid density.
Definition HybridBayesTree.h:64
\n+
Hybrid Conditional Density.
Definition HybridConditional.h:62
\n+
Elimination Tree type for Hybrid Factor Graphs.
Definition HybridEliminationTree.h:32
\n+
Hybrid Factor Graph Factor graph with utilities for hybrid factors.
Definition HybridFactorGraph.h:39
\n+
static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering &keys)
The default dense elimination function.
Definition HybridGaussianFactorGraph.h:82
\n+
HybridConditional ConditionalType
Type of conditionals from elimination.
Definition HybridGaussianFactorGraph.h:72
\n+
HybridGaussianFactorGraph FactorGraphType
Type of the factor graph (e.g.
Definition HybridGaussianFactorGraph.h:69
\n+
HybridJunctionTree JunctionTreeType
Type of Junction tree.
Definition HybridGaussianFactorGraph.h:78
\n+
HybridEliminationTree EliminationTreeType
Type of elimination tree.
Definition HybridGaussianFactorGraph.h:76
\n+
static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::optional< const VariableIndex & > variableIndex)
The default ordering generation function.
Definition HybridGaussianFactorGraph.h:86
\n+
Factor FactorType
Type of factors in factor graph.
Definition HybridGaussianFactorGraph.h:67
\n+
HybridBayesTree BayesTreeType
Type of Bayes tree.
Definition HybridGaussianFactorGraph.h:77
\n+
HybridBayesNet BayesNetType
Type of Bayes net from sequential elimination.
Definition HybridGaussianFactorGraph.h:74
\n+
Definition HybridGaussianFactorGraph.h:102
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to This
Definition HybridGaussianFactorGraph.h:114
\n+
typename std::enable_if< std::is_base_of< GaussianFactor, FACTOR >::value >::type IsGaussian
Check if FACTOR type is derived from GaussianFactor.
Definition HybridGaussianFactorGraph.h:107
\n+
KeyVector Indices
map from keys to values
Definition HybridGaussianFactorGraph.h:117
\n+
EliminateableFactorGraph< This > BaseEliminateable
for elimination
Definition HybridGaussianFactorGraph.h:113
\n+
HybridGaussianFactorGraph()=default
Default constructor.
\n+
HybridGaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition HybridGaussianFactorGraph.h:131
\n+
An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition HybridJunctionTree.h:53
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n+
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:57
\n
Definition Factor.h:68
\n+
Definition Ordering.h:34
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
the error.
\n+
In Gaussian factors, the error function returns either the negative log-likelihood,...
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,213 +1,287 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridFactor.h\n+HybridGaussianFactorGraph.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-26\n-27#include \n-28#include \n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-31class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n-32\n-_\b3_\b4using _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>;\n-35\n-36_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br CollectKeys(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys,\n-37 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys);\n-38_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br CollectKeys(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys1, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys2);\n-39_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs CollectDiscreteKeys(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key1,\n-40 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &key2);\n-41\n-_\b5_\b2class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br : public _\bF_\ba_\bc_\bt_\bo_\br {\n-53 private:\n-54 bool isDiscrete_ = false;\n-55 bool isContinuous_ = false;\n-56 bool isHybrid_ = false;\n-57\n-58 protected:\n-59 // Set of DiscreteKeys for this factor.\n-60 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs discreteKeys_;\n-_\b6_\b2 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs_\b_;\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+32// Forward declarations\n+33class HybridGaussianFactorGraph;\n+34class HybridConditional;\n+35class HybridBayesNet;\n+36class HybridEliminationTree;\n+37class HybridBayesTree;\n+38class HybridJunctionTree;\n+39class DecisionTreeFactor;\n+40class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br;\n+41class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+42\n+51GTSAM_EXPORT\n+52std::pair, boost::shared_ptr>\n+53_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bH_\by_\bb_\br_\bi_\bd(const HybridGaussianFactorGraph& factors, const Ordering&\n+keys);\n+54\n+61GTSAM_EXPORT const Ordering\n+62_\bH_\by_\bb_\br_\bi_\bd_\bO_\br_\bd_\be_\br_\bi_\bn_\bg(const HybridGaussianFactorGraph& graph);\n 63\n-64 public:\n-65 // typedefs needed to play nice with gtsam\n-_\b6_\b6 typedef _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-67 typedef boost::shared_ptr\n-_\b6_\b8 _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-_\b6_\b9 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-70\n-73\n-_\b7_\b5 _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br() = default;\n-76\n-82 explicit _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys);\n-83\n-89 explicit _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys);\n-90\n-97 _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys,\n-98 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys);\n-99\n-_\b1_\b0_\b1 virtual _\b~_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br() = default;\n-102\n-106\n-108 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br &lf, double tol = 1e-9) const;\n-109\n-111 void _\bp_\br_\bi_\bn_\bt(\n-112 const std::string &s = \"HybridFactor\\n\",\n-113 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &formatter = DefaultKeyFormatter) const override;\n-114\n+64/* *************************************************************************\n+*/\n+65template <>\n+_\b6_\b6struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh> {\n+_\b6_\b7 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n+68 typedef _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+_\b6_\b9 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n+71 typedef _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+_\b7_\b2 _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+73 typedef _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+_\b7_\b4 _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n+75 typedef _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+_\b7_\b6 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+_\b7_\b7 typedef _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+_\b7_\b8 typedef _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+80 static std::pair,\n+81 boost::shared_ptr>\n+_\b8_\b2 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) {\n+83 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bH_\by_\bb_\br_\bi_\bd(factors, keys);\n+84 }\n+_\b8_\b6 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc(\n+87 const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& graph,\n+88 boost::optional variableIndex) {\n+89 return _\bH_\by_\bb_\br_\bi_\bd_\bO_\br_\bd_\be_\br_\bi_\bn_\bg(graph);\n+90 }\n+91};\n+92\n+_\b1_\b0_\b0class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+101 : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh,\n+102 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n+103 protected:\n+105 template \n+_\b1_\b0_\b6 using _\bI_\bs_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn = typename std::enable_if<\n+107 std::is_base_of::value>::type;\n+108\n+109 public:\n+110 using _\bB_\ba_\bs_\be = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n+_\b1_\b1_\b1 using _\bT_\bh_\bi_\bs = _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n+_\b1_\b1_\b2 using _\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be =\n+113 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bT_\bh_\bi_\bs_\b>;\n+_\b1_\b1_\b4 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n+115\n+_\b1_\b1_\b6 using _\bV_\ba_\bl_\bu_\be_\bs = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs;\n+_\b1_\b1_\b7 using _\bI_\bn_\bd_\bi_\bc_\be_\bs = _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br;\n 118\n-_\b1_\b2_\b0 bool _\bi_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be() const { return isDiscrete_; }\n 121\n-_\b1_\b2_\b3 bool _\bi_\bs_\bC_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs() const { return isContinuous_; }\n+_\b1_\b2_\b3 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() = default;\n 124\n-_\b1_\b2_\b6 bool _\bi_\bs_\bH_\by_\bb_\br_\bi_\bd() const { return isHybrid_; }\n-127\n-_\b1_\b2_\b9 size_t _\bn_\br_\bC_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs() const { return continuousKeys_.size(); }\n-130\n-_\b1_\b3_\b2 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs() const { return discreteKeys_; }\n+130 template \n+_\b1_\b3_\b1 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph)\n+132 : _\bB_\ba_\bs_\be(graph) {}\n 133\n-_\b1_\b3_\b5 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs() const { return continuousKeys_; }\n-136\n-138\n-139 private:\n-_\b1_\b4_\b1 friend class boost::serialization::access;\n-142 template \n-143 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-144 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-145 ar &BOOST_SERIALIZATION_NVP(isDiscrete_);\n-146 ar &BOOST_SERIALIZATION_NVP(isContinuous_);\n-147 ar &BOOST_SERIALIZATION_NVP(isHybrid_);\n-148 ar &BOOST_SERIALIZATION_NVP(discreteKeys_);\n-149 ar &BOOST_SERIALIZATION_NVP(continuousKeys_);\n-150 }\n-151};\n-152// HybridFactor\n-153\n-154// traits\n-155template <>\n-_\b1_\b5_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-157\n-158} // namespace gtsam\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n-specialized key for discrete variables\n-_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-Decision Tree for use in DiscreteFactors.\n-_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-The base class for all factors.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\n+137\n+138 // TODO(dellaert): customize print and equals.\n+139 // void print(const std::string& s = \"HybridGaussianFactorGraph\",\n+140 // const KeyFormatter& keyFormatter = DefaultKeyFormatter) const\n+141 // override;\n+142 // bool equals(const This& fg, double tol = 1e-9) const override;\n+143\n+147\n+148 using Base::error; // Expose error(const HybridValues&) method..\n+149\n+159 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b> error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& continuousValues)\n+const;\n+160\n+169 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b> probPrime(\n+170 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& continuousValues) const;\n+171\n+178 double probPrime(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n+179\n+189 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be assembleGraphTree() const;\n+190\n+192};\n+193\n+194} // namespace gtsam\n+_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+A set of GaussianFactors, indexed by a set of discrete keys.\n+_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor graph with utilities for hybrid factors.\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Variable elimination algorithms for factor graphs.\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+A factor with a quadratic error function - a Gaussian.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bH_\by_\bb_\br_\bi_\bd\n+std::pair< HybridConditional::shared_ptr, boost::shared_ptr< Factor > >\n+EliminateHybrid(const HybridGaussianFactorGraph &factors, const Ordering\n+&frontalKeys)\n+Main elimination function for HybridGaussianFactorGraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.cpp:320\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+const Ordering HybridOrdering(const HybridGaussianFactorGraph &graph)\n+Return a Colamd constrained ordering where the discrete keys are eliminated\n+after the continuous keys...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.cpp:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n+An algebraic decision tree fixes the range of a DecisionTree to double.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:38\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n a decision tree is a function from assignments to values.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys is a set of keys that can be assembled using the & operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-Base class for truly hybrid probabilistic factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\br_\bC_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs\n-size_t nrContinuous() const\n-Return the number of continuous variables in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-HybridFactor This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< HybridFactor > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be\n-bool isDiscrete() const\n-True if this is a factor of discrete variables only.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bH_\by_\bb_\br_\bi_\bd\n-bool isHybrid() const\n-True is this is a Discrete-Continuous factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-HybridFactor()=default\n-Default constructor creates empty factor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-Factor Base\n-Our base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs\n-const KeyVector & continuousKeys() const\n-Return only the continuous keys for this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs\n-bool isContinuous() const\n-True if this is a factor of continuous variables only.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs_\b_\n-KeyVector continuousKeys_\n-Record continuous keys for book-keeping.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-virtual ~HybridFactor()=default\n-Virtual destructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-const DiscreteKeys & discreteKeys() const\n-Return the discrete keys for this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+A hybrid Bayes net is a collection of HybridConditionals, which can have\n+discrete conditionals,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+A Bayes tree representing a Hybrid density.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Hybrid Conditional Density.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+Elimination Tree type for Hybrid Factor Graphs.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+Hybrid Factor Graph Factor graph with utilities for hybrid factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr<\n+FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering\n+&keys)\n+The default dense elimination function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n+HybridConditional ConditionalType\n+Type of conditionals from elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n+HybridGaussianFactorGraph FactorGraphType\n+Type of the factor graph (e.g.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+HybridJunctionTree JunctionTreeType\n+Type of Junction tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+HybridEliminationTree EliminationTreeType\n+Type of elimination tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc\n+static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::\n+optional< const VariableIndex & > variableIndex)\n+The default ordering generation function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n+Factor FactorType\n+Type of factors in factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+HybridBayesTree BayesTreeType\n+Type of Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n+HybridBayesNet BayesNetType\n+Type of Bayes net from sequential elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bI_\bs_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn\n+typename std::enable_if< std::is_base_of< GaussianFactor, FACTOR >::value >::\n+type IsGaussian\n+Check if FACTOR type is derived from GaussianFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+KeyVector Indices\n+map from keys to values\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be\n+EliminateableFactorGraph< This > BaseEliminateable\n+for elimination\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+HybridGaussianFactorGraph()=default\n+Default constructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+HybridGaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n+Implicit copy/downcast constructor to override explicit template container\n+constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+An EliminatableClusterTree, i.e., a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridJunctionTree.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n+Traits class for eliminateable factor graphs, specifies the types that result\n+from elimination,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+EliminateableFactorGraph is a base class for factor graphs that contains\n+elimination algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:57\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n the error.\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+In Gaussian factors, the error function returns either the negative log-\n+likelihood,...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00542.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00542.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixtureFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridEliminationTree.h File Reference\n \n \n \n \n \n \n \n@@ -96,49 +96,39 @@\n \n \n \n
\n \n-
GaussianMixtureFactor.h File Reference
\n+
HybridEliminationTree.h File Reference
\n
\n
\n \n-

A set of GaussianFactors, indexed by a set of discrete keys. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::GaussianMixtureFactor
 Implementation of a discrete conditional mixture factor. More...
 
struct  gtsam::traits< GaussianMixtureFactor >
class  gtsam::HybridEliminationTree
 Elimination Tree type for Hybrid Factor Graphs. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A set of GaussianFactors, indexed by a set of discrete keys.

\n-
Author
Fan Jiang
\n-
\n-Varun Agrawal
\n-
\n-Frank Dellaert
\n-
Date
Mar 12, 2022
\n+
Date
Mar 11, 2022
\n+
Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianMixtureFactor.h File Reference\n-A set of GaussianFactors, indexed by a set of discrete keys. _\bM_\bo_\br_\be_\b._\b._\b.\n+HybridEliminationTree.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Implementation of a discrete conditional mixture factor. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+\u00a0 Elimination Tree type for Hybrid _\bF_\ba_\bc_\bt_\bo_\br Graphs. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A set of GaussianFactors, indexed by a set of discrete keys.\n+ Date\n+ Mar 11, 2022\n Author\n Fan Jiang\n- Varun Agrawal\n- Frank Dellaert\n- Date\n- Mar 12, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00542_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00542_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixtureFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridEliminationTree.h Source File\n \n \n \n \n \n \n \n@@ -98,149 +98,78 @@\n
No Matches
\n \n \n \n \n \n
\n-
GaussianMixtureFactor.h
\n+
HybridEliminationTree.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n-
22
\n-\n-\n-\n-\n-\n-\n-
29
\n-
30namespace gtsam {
\n-
31
\n-
32class HybridValues;
\n-
33class DiscreteValues;
\n-
34class VectorValues;
\n+
18#pragma once
\n+
19
\n+\n+\n+\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
\n+
31class GTSAM_EXPORT HybridEliminationTree
\n+
32 : public EliminationTree<HybridBayesNet, HybridGaussianFactorGraph> {
\n+
33 private:
\n+
34 friend class ::EliminationTreeTester;
\n
35
\n-
\n-
47class GTSAM_EXPORT GaussianMixtureFactor : public HybridFactor {
\n-
48 public:
\n-
49 using Base = HybridFactor;
\n-\n-
51 using shared_ptr = boost::shared_ptr<This>;
\n-
52
\n-
53 using sharedFactor = boost::shared_ptr<GaussianFactor>;
\n-
54
\n-\n-
57
\n-
58 private:
\n-
60 Factors factors_;
\n-
61
\n-
68 GaussianFactorGraphTree asGaussianFactorGraphTree() const;
\n-
69
\n-
70 public:
\n-
73
\n-\n-
76
\n-
86 GaussianMixtureFactor(const KeyVector &continuousKeys,
\n-
87 const DiscreteKeys &discreteKeys,
\n-
88 const Factors &factors);
\n-
89
\n-
\n-
98 GaussianMixtureFactor(const KeyVector &continuousKeys,
\n-
99 const DiscreteKeys &discreteKeys,
\n-
100 const std::vector<sharedFactor> &factors)
\n-
101 : GaussianMixtureFactor(continuousKeys, discreteKeys,
\n-
102 Factors(discreteKeys, factors)) {}
\n-
\n-
103
\n-
107
\n-
108 bool equals(const HybridFactor &lf, double tol = 1e-9) const override;
\n-
109
\n-
110 void print(
\n-
111 const std::string &s = "GaussianMixtureFactor\\n",
\n-
112 const KeyFormatter &formatter = DefaultKeyFormatter) const override;
\n-
113
\n-
117
\n-
119 sharedFactor operator()(const DiscreteValues &assignment) const;
\n-
120
\n-\n-
130
\n-
138 AlgebraicDecisionTree<Key> error(const VectorValues &continuousValues) const;
\n-
139
\n-
144 double error(const HybridValues &values) const override;
\n-
145
\n-
\n-\n-\n-
149 sum = factor.add(sum);
\n-
150 return sum;
\n-
151 }
\n-
\n-
153
\n-
154 private:
\n-
156 friend class boost::serialization::access;
\n-
157 template <class ARCHIVE>
\n-
158 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n-
159 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
160 ar &BOOST_SERIALIZATION_NVP(factors_);
\n-
161 }
\n-
162};
\n-
\n-
163
\n-
164// traits
\n-
165template <>
\n-
\n-
166struct traits<GaussianMixtureFactor> : public Testable<GaussianMixtureFactor> {
\n-
167};
\n-
\n-
168
\n-
169} // namespace gtsam
\n-
specialized key for discrete variables
\n-
Algebraic Decision Trees.
\n-
Decision Tree for use in DiscreteFactors.
\n-\n-
A factor with a quadratic error function - a Gaussian.
\n-
Linear Factor Graph where all factors are Gaussians.
\n+
36 public:
\n+\n+\n+\n+
40 typedef boost::shared_ptr<This> shared_ptr;
\n+
41
\n+
44
\n+\n+
55 const VariableIndex& structure, const Ordering& order);
\n+
56
\n+\n+
63 const Ordering& order);
\n+
64
\n+
66
\n+
68 bool equals(const This& other, double tol = 1e-9) const;
\n+
69};
\n+
\n+
70
\n+
71} // namespace gtsam
\n+
A Bayes net of Gaussian Conditionals indexed by discrete keys.
\n+
Linearized Hybrid factor graph that uses type erasure.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
An algebraic decision tree fixes the range of a DecisionTree to double.
Definition AlgebraicDecisionTree.h:38
\n-\n-
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n-
A map from keys to values.
Definition DiscreteValues.h:34
\n-
Implementation of a discrete conditional mixture factor.
Definition GaussianMixtureFactor.h:47
\n-
GaussianMixtureFactor()=default
Default constructor, mainly for serialization.
\n-
GaussianMixtureFactor(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys, const std::vector< sharedFactor > &factors)
Construct a new GaussianMixtureFactor object using a vector of GaussianFactor shared pointers.
Definition GaussianMixtureFactor.h:98
\n-
GaussianFactorGraphTree add(const GaussianFactorGraphTree &sum) const
Combine the Gaussian Factor Graphs in sum and this while maintaining the original tree structure.
Definition GaussianMixtureFactor.cpp:85
\n-
friend GaussianFactorGraphTree & operator+=(GaussianFactorGraphTree &sum, const GaussianMixtureFactor &factor)
Add MixtureFactor to a Sum, syntactic sugar.
Definition GaussianMixtureFactor.h:147
\n-
Base class for truly hybrid probabilistic factors.
Definition HybridFactor.h:52
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
The Factor::error simply extracts the.
\n-
the error.
\n-
The Factor::error simply extracts the.
\n+
Elimination Tree type for Hybrid Factor Graphs.
Definition HybridEliminationTree.h:32
\n+
HybridEliminationTree This
This class.
Definition HybridEliminationTree.h:39
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition HybridEliminationTree.h:40
\n+
EliminationTree< HybridBayesNet, HybridGaussianFactorGraph > Base
Base class.
Definition HybridEliminationTree.h:38
\n+
Definition HybridGaussianFactorGraph.h:102
\n+
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n+
Definition Ordering.h:34
\n+
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,191 +1,92 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianMixtureFactor.h\n+HybridEliminationTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-32class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n-33class _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs;\n-34class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+_\b3_\b1class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+32 : public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n+33 private:\n+34 friend class ::EliminationTreeTester;\n 35\n-_\b4_\b7class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br {\n-48 public:\n-49 using _\bB_\ba_\bs_\be = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n-50 using _\bT_\bh_\bi_\bs = _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br;\n-51 using shared_ptr = boost::shared_ptr;\n-52\n-53 using sharedFactor = boost::shared_ptr;\n-54\n-_\b5_\b6 using _\bF_\ba_\bc_\bt_\bo_\br_\bs = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b,_\b _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>;\n-57\n-58 private:\n-60 _\bF_\ba_\bc_\bt_\bo_\br_\bs factors_;\n-61\n-68 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be asGaussianFactorGraphTree() const;\n-69\n-70 public:\n-73\n-_\b7_\b5 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br() = default;\n-76\n-86 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys,\n-87 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys,\n-88 const _\bF_\ba_\bc_\bt_\bo_\br_\bs &factors);\n-89\n-_\b9_\b8 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &continuousKeys,\n-99 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs &discreteKeys,\n-100 const std::vector &factors)\n-101 : _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br(continuousKeys, discreteKeys,\n-102 _\bF_\ba_\bc_\bt_\bo_\br_\bs(discreteKeys, factors)) {}\n-103\n-107\n-108 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br &lf, double tol = 1e-9) const override;\n-109\n-110 void _\bp_\br_\bi_\bn_\bt(\n-111 const std::string &s = \"GaussianMixtureFactor\\n\",\n-112 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &formatter = DefaultKeyFormatter) const override;\n-113\n-117\n-119 sharedFactor operator()(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &assignment) const;\n-120\n-129 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be add(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be &sum) const;\n-130\n-138 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b> error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &continuousValues)\n-const;\n-139\n-144 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const override;\n-145\n-_\b1_\b4_\b7 friend _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be &_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(\n-148 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be &sum, const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br &factor) {\n-149 sum = factor._\ba_\bd_\bd(sum);\n-150 return sum;\n-151 }\n-153\n-154 private:\n-_\b1_\b5_\b6 friend class boost::serialization::access;\n-157 template \n-158 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-159 ar &BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-160 ar &BOOST_SERIALIZATION_NVP(factors_);\n-161 }\n-162};\n-163\n-164// traits\n-165template <>\n-_\b1_\b6_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br> : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-167};\n-168\n-169} // namespace gtsam\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n-specialized key for discrete variables\n-_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-Algebraic Decision Trees.\n-_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-Decision Tree for use in DiscreteFactors.\n-_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-A factor with a quadratic error function - a Gaussian.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n+36 public:\n+37 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b,_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>\n+_\b3_\b8 _\bB_\ba_\bs_\be;\n+_\b3_\b9 typedef _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+_\b4_\b0 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+41\n+44\n+54 _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n+55 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+56\n+62 _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n+63 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+64\n+66\n+68 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n+69};\n+70\n+71} // namespace gtsam\n+_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+A Bayes net of Gaussian Conditionals indexed by discrete keys.\n+_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linearized Hybrid factor graph that uses type erasure.\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-An algebraic decision tree fixes the range of a DecisionTree to double.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bK_\be_\by_\b,_\b _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys is a set of keys that can be assembled using the & operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-A map from keys to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Implementation of a discrete conditional mixture factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixtureFactor.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n-GaussianMixtureFactor()=default\n-Default constructor, mainly for serialization.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n-GaussianMixtureFactor(const KeyVector &continuousKeys, const DiscreteKeys\n-&discreteKeys, const std::vector< sharedFactor > &factors)\n-Construct a new GaussianMixtureFactor object using a vector of GaussianFactor\n-shared pointers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixtureFactor.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bd\n-GaussianFactorGraphTree add(const GaussianFactorGraphTree &sum) const\n-Combine the Gaussian Factor Graphs in sum and this while maintaining the\n-original tree structure.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixtureFactor.cpp:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n-friend GaussianFactorGraphTree & operator+=(GaussianFactorGraphTree &sum, const\n-GaussianMixtureFactor &factor)\n-Add MixtureFactor to a Sum, syntactic sugar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianMixtureFactor.h:147\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-Base class for truly hybrid probabilistic factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n-_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-the error.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+Elimination Tree type for Hybrid Factor Graphs.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+HybridEliminationTree This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Shared pointer to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n+EliminationTree< HybridBayesNet, HybridGaussianFactorGraph > Base\n+Base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+An elimination tree is a data structure used intermediately during elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+The VariableIndex class computes and stores the block column structure of a\n+factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00545.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00545.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridBayesNet.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactorGraph.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,49 +94,38 @@\n \n \n \n \n \n
\n \n-
HybridBayesNet.cpp File Reference
\n+Namespaces
\n+
HybridFactorGraph.cpp File Reference
\n \n
\n \n-

A Bayes net of Gaussian Conditionals indexed by discrete keys. \n+

Factor graph with utilities for hybrid factors. \n More...

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

std::function< double(const Assignment< Key > &, double)> gtsam::prunerFunc (const DecisionTreeFactor &prunedDecisionTree, const HybridConditional &conditional)
 Helper function to get the pruner functional.
 
\n

Detailed Description

\n-

A Bayes net of Gaussian Conditionals indexed by discrete keys.

\n-
Author
Fan Jiang
\n-
\n-Varun Agrawal
\n-
\n-Shangjie Xue
\n+

Factor graph with utilities for hybrid factors.

\n+
Author
Varun Agrawal
\n
\n Frank Dellaert
\n-
Date
January 2022
\n+
Date
January, 2023
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-HybridBayesNet.cpp File Reference\n-A Bayes net of Gaussian Conditionals indexed by discrete keys. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HybridFactorGraph.cpp File Reference\n+Factor graph with utilities for hybrid factors. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::function< double(const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bu_\bn_\be_\br_\bF_\bu_\bn_\bc (const\n- _\bK_\be_\by > &, double)>\u00a0 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br &prunedDecisionTree,\n- const _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl &conditional)\n-\u00a0 Helper function to get the pruner\n- functional.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A Bayes net of Gaussian Conditionals indexed by discrete keys.\n+Factor graph with utilities for hybrid factors.\n Author\n- Fan Jiang\n Varun Agrawal\n- Shangjie Xue\n Frank Dellaert\n Date\n- January 2022\n+ January, 2023\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00548.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00548.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridJunctionTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearFactorGraph.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,31 +95,35 @@\n \n \n \n \n
\n \n-
HybridJunctionTree.cpp File Reference
\n+
HybridNonlinearFactorGraph.cpp File Reference
\n
\n
\n+\n+

Nonlinear hybrid factor graph that uses type erasure. \n+More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Mar 11, 2022
\n-
Author
Fan Jiang
\n+

Nonlinear hybrid factor graph that uses type erasure.

\n+
Author
Varun Agrawal
\n+
Date
May 28, 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridJunctionTree.cpp File Reference\n+HybridNonlinearFactorGraph.cpp File Reference\n+Nonlinear hybrid factor graph that uses type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Mar 11, 2022\n+Nonlinear hybrid factor graph that uses type erasure.\n Author\n- Fan Jiang\n+ Varun Agrawal\n+ Date\n+ May 28, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00551.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00551.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridEliminationTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridJunctionTree.h File Reference\n \n \n \n \n \n \n \n@@ -96,24 +96,24 @@\n \n \n \n
\n \n-
HybridEliminationTree.h File Reference
\n+
HybridJunctionTree.h File Reference
\n
\n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::HybridEliminationTree
 Elimination Tree type for Hybrid Factor Graphs. More...
class  gtsam::HybridJunctionTree
 An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree, with the additional property that it represents the clique tree associated with a Bayes net. More...
 
\n \n \n \n \n@@ -122,13 +122,13 @@\n
Date
Mar 11, 2022
\n
Author
Fan Jiang
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridEliminationTree.h File Reference\n+HybridJunctionTree.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-\u00a0 Elimination Tree type for Hybrid _\bF_\ba_\bc_\bt_\bo_\br Graphs. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+ An _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be, i.e., a set of variable clusters with\n+\u00a0 factors, arranged in a tree, with the additional property that it\n+ represents the clique tree associated with a Bayes net. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n Mar 11, 2022\n Author\n Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00551_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00551_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridEliminationTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridJunctionTree.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
HybridEliminationTree.h
\n+
HybridJunctionTree.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,62 +114,52 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n-\n-\n+\n+\n+\n
23
\n
24namespace gtsam {
\n
25
\n-
\n-
31class GTSAM_EXPORT HybridEliminationTree
\n-
32 : public EliminationTree<HybridBayesNet, HybridGaussianFactorGraph> {
\n-
33 private:
\n-
34 friend class ::EliminationTreeTester;
\n-
35
\n-
36 public:
\n-\n-\n-\n-
40 typedef boost::shared_ptr<This> shared_ptr;
\n-
41
\n-
44
\n-\n-
55 const VariableIndex& structure, const Ordering& order);
\n-
56
\n-\n-
63 const Ordering& order);
\n-
64
\n-
66
\n-
68 bool equals(const This& other, double tol = 1e-9) const;
\n-
69};
\n-
\n-
70
\n-
71} // namespace gtsam
\n-
A Bayes net of Gaussian Conditionals indexed by discrete keys.
\n-
Linearized Hybrid factor graph that uses type erasure.
\n-\n+
26// Forward declarations
\n+
27class HybridEliminationTree;
\n+
28
\n+
\n+
52class GTSAM_EXPORT HybridJunctionTree
\n+
53 : public JunctionTree<HybridBayesTree, HybridGaussianFactorGraph> {
\n+
54
\n+
55 public:
\n+\n+\n+\n+
59 typedef boost::shared_ptr<This> shared_ptr;
\n+
60
\n+
70 HybridJunctionTree(const HybridEliminationTree& eliminationTree);
\n+
71};
\n+
\n+
72
\n+
73} // namespace gtsam
\n+
Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
\n+
Linearized Hybrid factor graph that uses type erasure.
\n+
The junction tree.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n
Elimination Tree type for Hybrid Factor Graphs.
Definition HybridEliminationTree.h:32
\n-
HybridEliminationTree This
This class.
Definition HybridEliminationTree.h:39
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition HybridEliminationTree.h:40
\n-
EliminationTree< HybridBayesNet, HybridGaussianFactorGraph > Base
Base class.
Definition HybridEliminationTree.h:38
\n-
Definition HybridGaussianFactorGraph.h:102
\n-
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n-
Definition Ordering.h:34
\n-
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n+
An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition HybridJunctionTree.h:53
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition HybridJunctionTree.h:59
\n+
JunctionTree< HybridBayesTree, HybridGaussianFactorGraph > Base
Base class.
Definition HybridJunctionTree.h:57
\n+
HybridJunctionTree This
This class.
Definition HybridJunctionTree.h:58
\n+
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridEliminationTree.h\n+HybridJunctionTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,77 +16,65 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n 21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n 23\n 24namespace _\bg_\bt_\bs_\ba_\bm {\n 25\n-_\b3_\b1class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-32 : public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n-33 private:\n-34 friend class ::EliminationTreeTester;\n-35\n-36 public:\n-37 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b,_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>\n-_\b3_\b8 _\bB_\ba_\bs_\be;\n-_\b3_\b9 typedef _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-_\b4_\b0 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-41\n-44\n-54 _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n-55 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n-56\n-62 _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n-63 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n-64\n-66\n-68 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n-69};\n-70\n-71} // namespace gtsam\n-_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-A Bayes net of Gaussian Conditionals indexed by discrete keys.\n+26// Forward declarations\n+27class HybridEliminationTree;\n+28\n+_\b5_\b2class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+53 : public _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n+54\n+55 public:\n+56 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b,_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>\n+_\b5_\b7 _\bB_\ba_\bs_\be;\n+_\b5_\b8 typedef _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+_\b5_\b9 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+60\n+70 _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be& eliminationTree);\n+71};\n+72\n+73} // namespace gtsam\n+_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\n _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Linearized Hybrid factor graph that uses type erasure.\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+The junction tree.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n Elimination Tree type for Hybrid Factor Graphs.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-HybridEliminationTree This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+An EliminatableClusterTree, i.e., a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridJunctionTree.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n boost::shared_ptr< This > shared_ptr\n Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n-EliminationTree< HybridBayesNet, HybridGaussianFactorGraph > Base\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridJunctionTree.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n+JunctionTree< HybridBayesTree, HybridGaussianFactorGraph > Base\n Base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-An elimination tree is a data structure used intermediately during elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-The VariableIndex class computes and stores the block column structure of a\n-factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridJunctionTree.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+HybridJunctionTree This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridJunctionTree.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+A JunctionTree is a cluster tree, a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00554.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00554.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianISAM.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/MixtureFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,51 +96,45 @@\n \n \n \n
\n \n-
HybridGaussianISAM.h File Reference
\n+
MixtureFactor.h File Reference
\n
\n
\n \n+

Nonlinear Mixture factor of continuous and discrete. \n+More...

\n+\n

Go to the source code of this file.

\n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::HybridGaussianISAM
 
struct  gtsam::traits< HybridGaussianISAM >
 traits More...
class  gtsam::MixtureFactor
 Implementation of a discrete conditional mixture factor. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
March 31, 2022
\n-
Author
Fan Jiang
\n-
\n-Frank Dellaert
\n-
\n-Varun Agrawal
\n-
Date
March 31, 2022
\n-
Author
Fan Jiang
\n-
\n-Frank Dellaert
\n+

Nonlinear Mixture factor of continuous and discrete.

\n+
Author
Kevin Doherty, kdohe.nosp@m.rty@.nosp@m.mit.e.nosp@m.du
\n
\n-Richard Roberts
\n+Varun Agrawal
\n+
Date
December 2021
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridGaussianISAM.h File Reference\n+MixtureFactor.h File Reference\n+Nonlinear Mixture factor of continuous and discrete. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Implementation of a discrete conditional mixture factor. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- March 31, 2022\n+Nonlinear Mixture factor of continuous and discrete.\n Author\n- Fan Jiang\n- Frank Dellaert\n+ Kevin Doherty, _\bk_\bd_\bo_\bh_\be_\b._\bn_\bo_\bs_\bp_\b@_\bm_\b._\br_\bt_\by_\b@_\b._\bn_\bo_\bs_\bp_\b@_\bm_\b._\bm_\bi_\bt_\b._\be_\b._\bn_\bo_\bs_\bp_\b@_\bm_\b._\bd_\bu\n Varun Agrawal\n Date\n- March 31, 2022\n- Author\n- Fan Jiang\n- Frank Dellaert\n- Richard Roberts\n+ December 2021\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh\n+ * _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00554.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00554.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00554 = [\n- [\"gtsam::traits< HybridGaussianISAM >\", \"a03472.html\", null]\n+ [\"gtsam::MixtureFactor\", \"a03512.html\", \"a03512\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00554_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00554_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianISAM.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/MixtureFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
HybridGaussianISAM.h
\n+
MixtureFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,75 +114,276 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
20#pragma once
\n
21
\n-
22#include <gtsam/base/Testable.h>
\n-\n-\n-\n-
26
\n-
27namespace gtsam {
\n+\n+\n+\n+\n+\n+\n
28
\n-
\n-
34class GTSAM_EXPORT HybridGaussianISAM : public ISAM<HybridBayesTree> {
\n-
35 public:
\n-\n-\n-
38 typedef boost::shared_ptr<This> shared_ptr;
\n-
39
\n-
42
\n-\n-
45
\n-
47 HybridGaussianISAM(const HybridBayesTree& bayesTree);
\n-
48
\n-
50
\n-
51 private:
\n-
53 void updateInternal(
\n-
54 const HybridGaussianFactorGraph& newFactors,
\n-
55 HybridBayesTree::Cliques* orphans,
\n-
56 const boost::optional<size_t>& maxNrLeaves = boost::none,
\n-
57 const boost::optional<Ordering>& ordering = boost::none,
\n-
58 const HybridBayesTree::Eliminate& function =
\n-
59 HybridBayesTree::EliminationTraitsType::DefaultEliminate);
\n+
29#include <algorithm>
\n+
30#include <boost/format.hpp>
\n+
31#include <cmath>
\n+
32#include <limits>
\n+
33#include <vector>
\n+
34
\n+
35namespace gtsam {
\n+
36
\n+
\n+\n+
49 public:
\n+
50 using Base = HybridFactor;
\n+
51 using This = MixtureFactor;
\n+
52 using shared_ptr = boost::shared_ptr<MixtureFactor>;
\n+
53 using sharedFactor = boost::shared_ptr<NonlinearFactor>;
\n+
54
\n+\n
60
\n-
61 public:
\n-
70 void update(const HybridGaussianFactorGraph& newFactors,
\n-
71 const boost::optional<size_t>& maxNrLeaves = boost::none,
\n-
72 const boost::optional<Ordering>& ordering = boost::none,
\n-
73 const HybridBayesTree::Eliminate& function =
\n-
74 HybridBayesTree::EliminationTraitsType::DefaultEliminate);
\n-
75
\n-
84 static Ordering GetOrdering(HybridGaussianFactorGraph& factors,
\n-
85 const HybridGaussianFactorGraph& newFactors);
\n-
86};
\n-
\n-
87
\n-
89template <>
\n-
90struct traits<HybridGaussianISAM> : public Testable<HybridGaussianISAM> {};
\n-
91
\n-
92} // namespace gtsam
\n-
Concept check for values that can be used in unit tests.
\n-
Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
\n-
Linearized Hybrid factor graph that uses type erasure.
\n-
Incremental update functionality (iSAM) for BayesTree.
\n+
61 private:
\n+
63 Factors factors_;
\n+
64 bool normalized_;
\n+
65
\n+
66 public:
\n+
67 MixtureFactor() = default;
\n+
68
\n+
\n+\n+
79 const Factors& factors, bool normalized = false)
\n+
80 : Base(keys, discreteKeys), factors_(factors), normalized_(normalized) {}
\n+
\n+
81
\n+
98 template <typename FACTOR>
\n+
\n+\n+
100 const std::vector<boost::shared_ptr<FACTOR>>& factors,
\n+
101 bool normalized = false)
\n+
102 : Base(keys, discreteKeys), normalized_(normalized) {
\n+
103 std::vector<NonlinearFactor::shared_ptr> nonlinear_factors;
\n+
104 KeySet continuous_keys_set(keys.begin(), keys.end());
\n+
105 KeySet factor_keys_set;
\n+
106 for (auto&& f : factors) {
\n+
107 // Insert all factor continuous keys in the continuous keys set.
\n+
108 std::copy(f->keys().begin(), f->keys().end(),
\n+
109 std::inserter(factor_keys_set, factor_keys_set.end()));
\n+
110
\n+
111 if (auto nf = boost::dynamic_pointer_cast<NonlinearFactor>(f)) {
\n+
112 nonlinear_factors.push_back(nf);
\n+
113 } else {
\n+
114 throw std::runtime_error(
\n+
115 "Factors passed into MixtureFactor need to be nonlinear!");
\n+
116 }
\n+
117 }
\n+
118 factors_ = Factors(discreteKeys, nonlinear_factors);
\n+
119
\n+
120 if (continuous_keys_set != factor_keys_set) {
\n+
121 throw std::runtime_error(
\n+
122 "The specified continuous keys and the keys in the factors don't "
\n+
123 "match!");
\n+
124 }
\n+
125 }
\n+
\n+
126
\n+
127 ~MixtureFactor() = default;
\n+
128
\n+
\n+
137 AlgebraicDecisionTree<Key> error(const Values& continuousValues) const {
\n+
138 // functor to convert from sharedFactor to double error value.
\n+
139 auto errorFunc = [continuousValues](const sharedFactor& factor) {
\n+
140 return factor->error(continuousValues);
\n+
141 };
\n+
142 DecisionTree<Key, double> errorTree(factors_, errorFunc);
\n+
143 return errorTree;
\n+
144 }
\n+
\n+
145
\n+
\n+
153 double error(const Values& continuousValues,
\n+
154 const DiscreteValues& discreteValues) const {
\n+
155 // Retrieve the factor corresponding to the assignment in discreteValues.
\n+
156 auto factor = factors_(discreteValues);
\n+
157 // Compute the error for the selected factor
\n+
158 const double factorError = factor->error(continuousValues);
\n+
159 if (normalized_) return factorError;
\n+
160 return factorError + this->nonlinearFactorLogNormalizingConstant(
\n+
161 factor, continuousValues);
\n+
162 }
\n+
\n+
163
\n+
\n+
170 double error(const HybridValues& values) const override {
\n+
171 return error(values.nonlinear(), values.discrete());
\n+
172 }
\n+
\n+
173
\n+
\n+
179 size_t dim() const {
\n+
180 const auto assignments = DiscreteValues::CartesianProduct(discreteKeys_);
\n+
181 auto factor = factors_(assignments.at(0));
\n+
182 return factor->dim();
\n+
183 }
\n+
\n+
184
\n+
187
\n+
\n+
189 void print(
\n+
190 const std::string& s = "",
\n+
191 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
192 std::cout << (s.empty() ? "" : s + " ");
\n+
193 Base::print("", keyFormatter);
\n+
194 std::cout << "\\nMixtureFactor\\n";
\n+
195 auto valueFormatter = [](const sharedFactor& v) {
\n+
196 if (v) {
\n+
197 return (boost::format("Nonlinear factor on %d keys") % v->size()).str();
\n+
198 } else {
\n+
199 return std::string("nullptr");
\n+
200 }
\n+
201 };
\n+
202 factors_.print("", keyFormatter, valueFormatter);
\n+
203 }
\n+
\n+
204
\n+
\n+
206 bool equals(const HybridFactor& other, double tol = 1e-9) const override {
\n+
207 // We attempt a dynamic cast from HybridFactor to MixtureFactor. If it
\n+
208 // fails, return false.
\n+
209 if (!dynamic_cast<const MixtureFactor*>(&other)) return false;
\n+
210
\n+
211 // If the cast is successful, we'll properly construct a MixtureFactor
\n+
212 // object from `other`
\n+
213 const MixtureFactor& f(static_cast<const MixtureFactor&>(other));
\n+
214
\n+
215 // Ensure that this MixtureFactor and `f` have the same `factors_`.
\n+
216 auto compare = [tol](const sharedFactor& a, const sharedFactor& b) {
\n+
217 return traits<NonlinearFactor>::Equals(*a, *b, tol);
\n+
218 };
\n+
219 if (!factors_.equals(f.factors_, compare)) return false;
\n+
220
\n+
221 // If everything above passes, and the keys_, discreteKeys_ and normalized_
\n+
222 // member variables are identical, return true.
\n+
223 return (std::equal(keys_.begin(), keys_.end(), f.keys().begin()) &&
\n+
224 (discreteKeys_ == f.discreteKeys_) &&
\n+
225 (normalized_ == f.normalized_));
\n+
226 }
\n+
\n+
227
\n+
229
\n+
\n+\n+
233 const Values& continuousValues,
\n+
234 const DiscreteValues& discreteValues) const {
\n+
235 auto factor = factors_(discreteValues);
\n+
236 return factor->linearize(continuousValues);
\n+
237 }
\n+
\n+
238
\n+
\n+
240 boost::shared_ptr<GaussianMixtureFactor> linearize(
\n+
241 const Values& continuousValues) const {
\n+
242 // functional to linearize each factor in the decision tree
\n+
243 auto linearizeDT = [continuousValues](const sharedFactor& factor) {
\n+
244 return factor->linearize(continuousValues);
\n+
245 };
\n+
246
\n+\n+
248 factors_, linearizeDT);
\n+
249
\n+
250 return boost::make_shared<GaussianMixtureFactor>(
\n+
251 continuousKeys_, discreteKeys_, linearized_factors);
\n+
252 }
\n+
\n+
253
\n+
\n+
261 double nonlinearFactorLogNormalizingConstant(const sharedFactor& factor,
\n+
262 const Values& values) const {
\n+
263 // Information matrix (inverse covariance matrix) for the factor.
\n+
264 Matrix infoMat;
\n+
265
\n+
266 // If this is a NoiseModelFactor, we'll use its noiseModel to
\n+
267 // otherwise noiseModelFactor will be nullptr
\n+
268 if (auto noiseModelFactor =
\n+
269 boost::dynamic_pointer_cast<NoiseModelFactor>(factor)) {
\n+
270 // If dynamic cast to NoiseModelFactor succeeded, see if the noise model
\n+
271 // is Gaussian
\n+
272 auto noiseModel = noiseModelFactor->noiseModel();
\n+
273
\n+
274 auto gaussianNoiseModel =
\n+
275 boost::dynamic_pointer_cast<noiseModel::Gaussian>(noiseModel);
\n+
276 if (gaussianNoiseModel) {
\n+
277 // If the noise model is Gaussian, retrieve the information matrix
\n+
278 infoMat = gaussianNoiseModel->information();
\n+
279 } else {
\n+
280 // If the factor is not a Gaussian factor, we'll linearize it to get
\n+
281 // something with a normalized noise model
\n+
282 // TODO(kevin): does this make sense to do? I think maybe not in
\n+
283 // general? Should we just yell at the user?
\n+
284 auto gaussianFactor = factor->linearize(values);
\n+
285 infoMat = gaussianFactor->information();
\n+
286 }
\n+
287 }
\n+
288
\n+
289 // Compute the (negative) log of the normalizing constant
\n+
290 return -(factor->dim() * log(2.0 * M_PI) / 2.0) -
\n+
291 (log(infoMat.determinant()) / 2.0);
\n+
292 }
\n+
\n+
293};
\n+
\n+
294
\n+
295} // namespace gtsam
\n+\n+\n+
A set of GaussianFactors, indexed by a set of discrete keys.
\n+
Non-linear factor base classes.
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A Bayes tree representing a Hybrid density.
Definition HybridBayesTree.h:64
\n-
Definition HybridGaussianFactorGraph.h:102
\n-
Definition HybridGaussianISAM.h:34
\n-
A Bayes tree with an update methods that implements the iSAM algorithm.
Definition ISAM.h:31
\n-
Definition Ordering.h:34
\n+\n+
An algebraic decision tree fixes the range of a DecisionTree to double.
Definition AlgebraicDecisionTree.h:38
\n+\n+
void print(const std::string &s, const LabelFormatter &labelFormatter, const ValueFormatter &valueFormatter) const
GTSAM-style print.
Definition DecisionTree-inl.h:872
\n+
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n+
A map from keys to values.
Definition DiscreteValues.h:34
\n+
static std::vector< DiscreteValues > CartesianProduct(const DiscreteKeys &keys)
Return a vector of DiscreteValues, one for each possible combination of values.
Definition DiscreteValues.h:85
\n+
Base class for truly hybrid probabilistic factors.
Definition HybridFactor.h:52
\n+
HybridFactor()=default
Default constructor creates empty factor.
\n+
void print(const std::string &s="HybridFactor\\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition HybridFactor.cpp:82
\n+
KeyVector continuousKeys_
Record continuous keys for book-keeping.
Definition HybridFactor.h:62
\n+
const DiscreteKeys & discreteKeys() const
Return the discrete keys for this factor.
Definition HybridFactor.h:132
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
const DiscreteValues & discrete() const
Return the discrete values.
Definition HybridValues.h:92
\n+
const Values & nonlinear() const
Return the nonlinear values.
Definition HybridValues.h:95
\n+
Implementation of a discrete conditional mixture factor.
Definition MixtureFactor.h:48
\n+
MixtureFactor(const KeyVector &keys, const DiscreteKeys &discreteKeys, const std::vector< boost::shared_ptr< FACTOR > > &factors, bool normalized=false)
Convenience constructor that generates the underlying factor decision tree for us.
Definition MixtureFactor.h:99
\n+
double error(const Values &continuousValues, const DiscreteValues &discreteValues) const
Compute error of factor given both continuous and discrete values.
Definition MixtureFactor.h:153
\n+
AlgebraicDecisionTree< Key > error(const Values &continuousValues) const
Compute error of the MixtureFactor as a tree.
Definition MixtureFactor.h:137
\n+
MixtureFactor(const KeyVector &keys, const DiscreteKeys &discreteKeys, const Factors &factors, bool normalized=false)
Construct from Decision tree.
Definition MixtureFactor.h:78
\n+
bool equals(const HybridFactor &other, double tol=1e-9) const override
Check equality.
Definition MixtureFactor.h:206
\n+
GaussianFactor::shared_ptr linearize(const Values &continuousValues, const DiscreteValues &discreteValues) const
Linearize specific nonlinear factors based on the assignment in discreteValues.
Definition MixtureFactor.h:232
\n+
double nonlinearFactorLogNormalizingConstant(const sharedFactor &factor, const Values &values) const
If the component factors are not already normalized, we want to compute their normalizing constants s...
Definition MixtureFactor.h:261
\n+
double error(const HybridValues &values) const override
Compute error of factor given hybrid values.
Definition MixtureFactor.h:170
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Testable.
Definition MixtureFactor.h:189
\n+
DecisionTree< Key, sharedFactor > Factors
typedef for DecisionTree which has Keys as node labels and NonlinearFactor as leaf nodes.
Definition MixtureFactor.h:59
\n+
size_t dim() const
Get the dimension of the factor (number of rows on linearization).
Definition MixtureFactor.h:179
\n+
boost::shared_ptr< GaussianMixtureFactor > linearize(const Values &continuousValues) const
Linearize all the continuous factors to get a GaussianMixtureFactor.
Definition MixtureFactor.h:240
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
Symbol.h was moved to inference directory, this header was retained for compatibility.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridGaussianISAM.h\n+MixtureFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,84 +16,355 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 20#pragma once\n 21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bI_\bS_\bA_\bM_\b._\bh>\n-26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n 28\n-_\b3_\b4class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM : public _\bI_\bS_\bA_\bM {\n-35 public:\n-36 typedef _\bI_\bS_\bA_\bM_\b<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b> _\bB_\ba_\bs_\be;\n-37 typedef _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM _\bT_\bh_\bi_\bs;\n-38 typedef boost::shared_ptr shared_ptr;\n-39\n-42\n-44 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM();\n-45\n-47 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM(const _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be& bayesTree);\n-48\n-50\n-51 private:\n-53 void updateInternal(\n-54 const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n-55 HybridBayesTree::Cliques* orphans,\n-56 const boost::optional& maxNrLeaves = boost::none,\n-57 const boost::optional& ordering = boost::none,\n-58 const HybridBayesTree::Eliminate& function =\n-59 HybridBayesTree::EliminationTraitsType::DefaultEliminate);\n+29#include \n+30#include \n+31#include \n+32#include \n+33#include \n+34\n+35namespace _\bg_\bt_\bs_\ba_\bm {\n+36\n+_\b4_\b8class _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br {\n+49 public:\n+50 using _\bB_\ba_\bs_\be = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n+51 using _\bT_\bh_\bi_\bs = _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br;\n+52 using shared_ptr = boost::shared_ptr;\n+53 using sharedFactor = boost::shared_ptr;\n+54\n+_\b5_\b9 using _\bF_\ba_\bc_\bt_\bo_\br_\bs = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b,_\b _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>;\n 60\n-61 public:\n-70 void update(const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n-71 const boost::optional& maxNrLeaves = boost::none,\n-72 const boost::optional& ordering = boost::none,\n-73 const HybridBayesTree::Eliminate& function =\n-74 HybridBayesTree::EliminationTraitsType::DefaultEliminate);\n-75\n-84 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg GetOrdering(_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factors,\n-85 const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors);\n-86};\n-87\n-89template <>\n-_\b9_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-91\n-92} // namespace gtsam\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\n-_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linearized Hybrid factor graph that uses type erasure.\n-_\bI_\bS_\bA_\bM_\b._\bh\n-Incremental update functionality (iSAM) for BayesTree.\n+61 private:\n+63 _\bF_\ba_\bc_\bt_\bo_\br_\bs factors_;\n+64 bool normalized_;\n+65\n+66 public:\n+67 _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br() = default;\n+68\n+_\b7_\b8 _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs,\n+79 const _\bF_\ba_\bc_\bt_\bo_\br_\bs& factors, bool normalized = false)\n+80 : _\bB_\ba_\bs_\be(_\bk_\be_\by_\bs, _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs), factors_(factors), normalized_(normalized) {}\n+81\n+98 template \n+_\b9_\b9 _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs,\n+100 const std::vector>& factors,\n+101 bool normalized = false)\n+102 : _\bB_\ba_\bs_\be(_\bk_\be_\by_\bs, _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs), normalized_(normalized) {\n+103 std::vector nonlinear_factors;\n+104 _\bK_\be_\by_\bS_\be_\bt continuous_keys_set(_\bk_\be_\by_\bs.begin(), _\bk_\be_\by_\bs.end());\n+105 _\bK_\be_\by_\bS_\be_\bt factor_keys_set;\n+106 for (auto&& f : factors) {\n+107 // Insert all factor continuous keys in the continuous keys set.\n+108 std::copy(f->keys().begin(), f->keys().end(),\n+109 std::inserter(factor_keys_set, factor_keys_set.end()));\n+110\n+111 if (auto nf = boost::dynamic_pointer_cast(f)) {\n+112 nonlinear_factors.push_back(nf);\n+113 } else {\n+114 throw std::runtime_error(\n+115 \"Factors passed into MixtureFactor need to be nonlinear!\");\n+116 }\n+117 }\n+118 factors_ = _\bF_\ba_\bc_\bt_\bo_\br_\bs(_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs, nonlinear_factors);\n+119\n+120 if (continuous_keys_set != factor_keys_set) {\n+121 throw std::runtime_error(\n+122 \"The specified continuous keys and the keys in the factors don't \"\n+123 \"match!\");\n+124 }\n+125 }\n+126\n+127 _\b~_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br() = default;\n+128\n+_\b1_\b3_\b7 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b> _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& continuousValues) const {\n+138 // functor to convert from sharedFactor to double error value.\n+139 auto errorFunc = [continuousValues](const sharedFactor& factor) {\n+140 return factor->error(continuousValues);\n+141 };\n+142 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b,_\b _\bd_\bo_\bu_\bb_\bl_\be_\b> errorTree(factors_, errorFunc);\n+143 return errorTree;\n+144 }\n+145\n+_\b1_\b5_\b3 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& continuousValues,\n+154 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& discreteValues) const {\n+155 // Retrieve the factor corresponding to the assignment in discreteValues.\n+156 auto factor = factors_(discreteValues);\n+157 // Compute the error for the selected factor\n+158 const double factorError = factor->error(continuousValues);\n+159 if (normalized_) return factorError;\n+160 return factorError + this->_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bL_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt(\n+161 factor, continuousValues);\n+162 }\n+163\n+_\b1_\b7_\b0 double _\be_\br_\br_\bo_\br(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n+171 return _\be_\br_\br_\bo_\br(values._\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br(), values._\bd_\bi_\bs_\bc_\br_\be_\bt_\be());\n+172 }\n+173\n+_\b1_\b7_\b9 size_t _\bd_\bi_\bm() const {\n+180 const auto assignments = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt(discreteKeys_);\n+181 auto factor = factors_(assignments.at(0));\n+182 return factor->dim();\n+183 }\n+184\n+187\n+_\b1_\b8_\b9 void _\bp_\br_\bi_\bn_\bt(\n+190 const std::string& s = \"\",\n+191 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+192 std::cout << (s.empty() ? \"\" : s + \" \");\n+193 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n+194 std::cout << \"\\nMixtureFactor\\n\";\n+195 auto valueFormatter = [](const sharedFactor& v) {\n+196 if (v) {\n+197 return (boost::format(\"Nonlinear factor on %d keys\") % v->size()).str();\n+198 } else {\n+199 return std::string(\"nullptr\");\n+200 }\n+201 };\n+202 factors_._\bp_\br_\bi_\bn_\bt(\"\", keyFormatter, valueFormatter);\n+203 }\n+204\n+_\b2_\b0_\b6 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br& other, double tol = 1e-9) const override {\n+207 // We attempt a dynamic cast from HybridFactor to MixtureFactor. If it\n+208 // fails, return false.\n+209 if (!dynamic_cast(&other)) return false;\n+210\n+211 // If the cast is successful, we'll properly construct a MixtureFactor\n+212 // object from `other`\n+213 const _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br& f(static_cast(other));\n+214\n+215 // Ensure that this MixtureFactor and `f` have the same `factors_`.\n+216 auto compare = [tol](const sharedFactor& a, const sharedFactor& b) {\n+217 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(*a, *b, tol);\n+218 };\n+219 if (!factors_.equals(f.factors_, compare)) return false;\n+220\n+221 // If everything above passes, and the keys_, discreteKeys_ and normalized_\n+222 // member variables are identical, return true.\n+223 return (std::equal(_\bk_\be_\by_\bs_\b_.begin(), _\bk_\be_\by_\bs_\b_.end(), f._\bk_\be_\by_\bs().begin()) &&\n+224 (discreteKeys_ == f.discreteKeys_) &&\n+225 (normalized_ == f.normalized_));\n+226 }\n+227\n+229\n+_\b2_\b3_\b2 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(\n+233 const _\bV_\ba_\bl_\bu_\be_\bs& continuousValues,\n+234 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& discreteValues) const {\n+235 auto factor = factors_(discreteValues);\n+236 return factor->linearize(continuousValues);\n+237 }\n+238\n+_\b2_\b4_\b0 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(\n+241 const _\bV_\ba_\bl_\bu_\be_\bs& continuousValues) const {\n+242 // functional to linearize each factor in the decision tree\n+243 auto linearizeDT = [continuousValues](const sharedFactor& factor) {\n+244 return factor->linearize(continuousValues);\n+245 };\n+246\n+247 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b> linearized_factors(\n+248 factors_, linearizeDT);\n+249\n+250 return boost::make_shared(\n+251 _\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs_\b_, discreteKeys_, linearized_factors);\n+252 }\n+253\n+_\b2_\b6_\b1 double _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bL_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt(const sharedFactor& factor,\n+262 const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n+263 // Information matrix (inverse covariance matrix) for the factor.\n+264 Matrix infoMat;\n+265\n+266 // If this is a NoiseModelFactor, we'll use its noiseModel to\n+267 // otherwise noiseModelFactor will be nullptr\n+268 if (auto noiseModelFactor =\n+269 boost::dynamic_pointer_cast(factor)) {\n+270 // If dynamic cast to NoiseModelFactor succeeded, see if the noise model\n+271 // is Gaussian\n+272 auto noiseModel = noiseModelFactor->noiseModel();\n+273\n+274 auto gaussianNoiseModel =\n+275 boost::dynamic_pointer_cast(noiseModel);\n+276 if (gaussianNoiseModel) {\n+277 // If the noise model is Gaussian, retrieve the information matrix\n+278 infoMat = gaussianNoiseModel->information();\n+279 } else {\n+280 // If the factor is not a Gaussian factor, we'll linearize it to get\n+281 // something with a normalized noise model\n+282 // TODO(kevin): does this make sense to do? I think maybe not in\n+283 // general? Should we just yell at the user?\n+284 auto gaussianFactor = factor->linearize(values);\n+285 infoMat = gaussianFactor->information();\n+286 }\n+287 }\n+288\n+289 // Compute the (negative) log of the normalizing constant\n+290 return -(factor->dim() * log(2.0 * M_PI) / 2.0) -\n+291 (log(infoMat.determinant()) / 2.0);\n+292 }\n+293};\n+294\n+295} // namespace gtsam\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+A set of GaussianFactors, indexed by a set of discrete keys.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-A Bayes tree representing a Hybrid density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianISAM.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM\n-A Bayes tree with an update methods that implements the iSAM algorithm.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n+An algebraic decision tree fixes the range of a DecisionTree to double.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bK_\be_\by_\b,_\b _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s, const LabelFormatter &labelFormatter, const\n+ValueFormatter &valueFormatter) const\n+GTSAM-style print.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:872\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys is a set of keys that can be assembled using the & operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+A map from keys to values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt\n+static std::vector< DiscreteValues > CartesianProduct(const DiscreteKeys &keys)\n+Return a vector of DiscreteValues, one for each possible combination of values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+Base class for truly hybrid probabilistic factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+HybridFactor()=default\n+Default constructor creates empty factor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"HybridFactor\\n\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.cpp:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs_\b_\n+KeyVector continuousKeys_\n+Record continuous keys for book-keeping.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+const DiscreteKeys & discreteKeys() const\n+Return the discrete keys for this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n+const DiscreteValues & discrete() const\n+Return the discrete values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+const Values & nonlinear() const\n+Return the nonlinear values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Implementation of a discrete conditional mixture factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n+MixtureFactor(const KeyVector &keys, const DiscreteKeys &discreteKeys, const\n+std::vector< boost::shared_ptr< FACTOR > > &factors, bool normalized=false)\n+Convenience constructor that generates the underlying factor decision tree for\n+us.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &continuousValues, const DiscreteValues\n+&discreteValues) const\n+Compute error of factor given both continuous and discrete values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+AlgebraicDecisionTree< Key > error(const Values &continuousValues) const\n+Compute error of the MixtureFactor as a tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n+MixtureFactor(const KeyVector &keys, const DiscreteKeys &discreteKeys, const\n+Factors &factors, bool normalized=false)\n+Construct from Decision tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const HybridFactor &other, double tol=1e-9) const override\n+Check equality.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:206\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+GaussianFactor::shared_ptr linearize(const Values &continuousValues, const\n+DiscreteValues &discreteValues) const\n+Linearize specific nonlinear factors based on the assignment in discreteValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:232\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bL_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n+double nonlinearFactorLogNormalizingConstant(const sharedFactor &factor, const\n+Values &values) const\n+If the component factors are not already normalized, we want to compute their\n+normalizing constants s...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:261\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const HybridValues &values) const override\n+Compute error of factor given hybrid values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:170\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+DecisionTree< Key, sharedFactor > Factors\n+typedef for DecisionTree which has Keys as node labels and NonlinearFactor as\n+leaf nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+Get the dimension of the factor (number of rows on linearization).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:179\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianMixtureFactor > linearize(const Values\n+&continuousValues) const\n+Linearize all the continuous factors to get a GaussianMixtureFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:240\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n+Symbol.h was moved to inference directory, this header was retained for\n+compatibility.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh\n+ * _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00557.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00557.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridSmoother.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixtureFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,44 +94,40 @@\n \n \n \n \n \n
\n \n-
HybridSmoother.h File Reference
\n+
GaussianMixtureFactor.cpp File Reference
\n
\n
\n \n-

An incremental smoother for hybrid factor graphs. \n+

A set of Gaussian factors indexed by a set of discrete keys. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-

\n-Classes

class  gtsam::HybridSmoother
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

An incremental smoother for hybrid factor graphs.

\n-
Author
Varun Agrawal
\n-
Date
October 2022
\n+

A set of Gaussian factors indexed by a set of discrete keys.

\n+
Author
Fan Jiang
\n+
\n+Varun Agrawal
\n+
\n+Frank Dellaert
\n+
Date
Mar 12, 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,24 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridSmoother.h File Reference\n-An incremental smoother for hybrid factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GaussianMixtureFactor.cpp File Reference\n+A set of Gaussian factors indexed by a set of discrete keys. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-An incremental smoother for hybrid factor graphs.\n+A set of Gaussian factors indexed by a set of discrete keys.\n Author\n+ Fan Jiang\n Varun Agrawal\n+ Frank Dellaert\n Date\n- October 2022\n+ Mar 12, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00560.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00560.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridValues.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridConditional.h File Reference\n \n \n \n \n \n \n \n@@ -96,41 +96,41 @@\n \n \n \n
\n \n-
HybridValues.h File Reference
\n+
HybridConditional.h File Reference
\n
\n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n+\n \n

\n Classes

class  gtsam::HybridValues
 HybridValues represents a collection of DiscreteValues and VectorValues. More...
class  gtsam::HybridConditional
 Hybrid Conditional Density. More...
 
struct  gtsam::traits< HybridValues >
struct  gtsam::traits< HybridConditional >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Jul 28, 2022
\n-
Author
Shangjie Xue
\n+
Date
Mar 11, 2022
\n+
Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridValues.h File Reference\n+HybridConditional.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-\u00a0 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs represents a collection of _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs and\n- _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+\u00a0 Hybrid _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl Density. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Jul 28, 2022\n+ Mar 11, 2022\n Author\n- Shangjie Xue\n+ Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00560.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00560.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00560 = [\n- [\"gtsam::HybridValues\", \"a03504.html\", \"a03504\"],\n- [\"gtsam::traits< HybridValues >\", \"a03508.html\", null]\n+ [\"gtsam::traits< HybridConditional >\", \"a03440.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00560_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00560_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridValues.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridConditional.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
HybridValues.h
\n+
HybridConditional.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,254 +114,190 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n-\n-\n-
23#include <gtsam/inference/Key.h>
\n-\n-\n-
26
\n-
27#include <map>
\n-
28#include <string>
\n-
29#include <vector>
\n-
30
\n-
31namespace gtsam {
\n-
32
\n-
\n-
38class GTSAM_EXPORT HybridValues {
\n-
39 private:
\n-
41 VectorValues continuous_;
\n-
42
\n-
44 DiscreteValues discrete_;
\n-
45
\n-
47 Values nonlinear_;
\n-
48
\n-
49 public:
\n-
52
\n-
54 HybridValues() = default;
\n-
55
\n-
\n-\n-
58 : continuous_(cv), discrete_(dv){};
\n-
\n-
59
\n-
\n-\n-
62 const Values& v)
\n-
63 : continuous_(cv), discrete_(dv), nonlinear_(v){};
\n-
\n-
64
\n-
68
\n-
\n-
70 void print(const std::string& s = "HybridValues",
\n-
71 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {
\n-
72 std::cout << s << ": \\n";
\n-
73 continuous_.print(" Continuous",
\n-
74 keyFormatter); // print continuous components
\n-
75 discrete_.print(" Discrete", keyFormatter); // print discrete components
\n-
76 };
\n-
\n-
77
\n-
\n-
79 bool equals(const HybridValues& other, double tol = 1e-9) const {
\n-
80 return continuous_.equals(other.continuous_, tol) &&
\n-
81 discrete_.equals(other.discrete_, tol);
\n-
82 }
\n-
\n-
83
\n-
87
\n-
89 const VectorValues& continuous() const { return continuous_; }
\n-
90
\n-
92 const DiscreteValues& discrete() const { return discrete_; }
\n-
93
\n-
95 const Values& nonlinear() const { return nonlinear_; }
\n-
96
\n-
98 bool existsVector(Key j) { return continuous_.exists(j); };
\n-
99
\n-
101 bool existsDiscrete(Key j) { return (discrete_.find(j) != discrete_.end()); };
\n-
102
\n-
\n-\n-
105 return nonlinear_.exists(j);
\n-
106 };
\n-
\n-
107
\n-
\n-
109 bool exists(Key j) {
\n-
110 return existsVector(j) || existsDiscrete(j) || existsNonlinear(j);
\n-
111 };
\n-
\n-
112
\n-
117 void insert(Key j, const Vector& value) { continuous_.insert(j, value); }
\n-
118
\n-
123 void insert(Key j, size_t value) { discrete_[j] = value; };
\n+\n+\n+\n+\n+\n+
25#include <gtsam/inference/Key.h>
\n+\n+
27
\n+
28#include <boost/make_shared.hpp>
\n+
29#include <boost/shared_ptr.hpp>
\n+
30#include <stdexcept>
\n+
31#include <string>
\n+
32#include <typeinfo>
\n+
33#include <vector>
\n+
34
\n+
35namespace gtsam {
\n+
36
\n+
\n+
60class GTSAM_EXPORT HybridConditional
\n+
61 : public HybridFactor,
\n+
62 public Conditional<HybridFactor, HybridConditional> {
\n+
63 public:
\n+
64 // typedefs needed to play nice with gtsam
\n+\n+
66 typedef boost::shared_ptr<This> shared_ptr;
\n+\n+\n+\n+
70
\n+
71 protected:
\n+
73 boost::shared_ptr<Factor> inner_;
\n+
74
\n+
75 public:
\n+
78
\n+
80 HybridConditional() = default;
\n+
81
\n+
\n+
89 HybridConditional(const KeyVector& continuousKeys,
\n+
90 const DiscreteKeys& discreteKeys, size_t nFrontals)
\n+
91 : BaseFactor(continuousKeys, discreteKeys), BaseConditional(nFrontals) {}
\n+
\n+
92
\n+
102 HybridConditional(const KeyVector& continuousFrontals,
\n+
103 const DiscreteKeys& discreteFrontals,
\n+
104 const KeyVector& continuousParents,
\n+
105 const DiscreteKeys& discreteParents);
\n+
106
\n+\n+
114 const boost::shared_ptr<GaussianConditional>& continuousConditional);
\n+
115
\n+\n+
123 const boost::shared_ptr<DiscreteConditional>& discreteConditional);
\n
124
\n-
\n-
126 void insert_or_assign(Key j, const Vector& value) {
\n-
127 continuous_.insert_or_assign(j, value);
\n-
128 }
\n-
\n-
129
\n-
\n-
131 void insert_or_assign(Key j, size_t value) {
\n-
132 discrete_[j] = value;
\n-
133 }
\n-
\n-
134
\n-
\n-\n-
138 continuous_.insert(values);
\n-
139 return *this;
\n-
140 }
\n-
\n+
131 HybridConditional(const boost::shared_ptr<GaussianMixture>& gaussianMixture);
\n+
132
\n+
136
\n+
138 void print(
\n+
139 const std::string& s = "Hybrid Conditional: ",
\n+
140 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n
141
\n-
\n-\n-
145 discrete_.insert(values);
\n-
146 return *this;
\n-
147 }
\n-
\n+
143 bool equals(const HybridFactor& other, double tol = 1e-9) const override;
\n+
144
\n
148
\n-
\n-
151 HybridValues& insert(const Values& values) {
\n-
152 nonlinear_.insert(values);
\n-
153 return *this;
\n-
154 }
\n-
\n-
155
\n-
\n-\n-
159 continuous_.insert(values.continuous());
\n-
160 discrete_.insert(values.discrete());
\n-
161 nonlinear_.insert(values.nonlinear());
\n-
162 return *this;
\n-
163 }
\n-
\n-
164
\n-
169 Vector& at(Key j) { return continuous_.at(j); };
\n-
170
\n-
175 size_t& atDiscrete(Key j) { return discrete_.at(j); };
\n-
176
\n-
\n-\n-
182 continuous_.update(values);
\n-
183 return *this;
\n-
184 }
\n-
\n-
185
\n-
\n-\n-
191 discrete_.update(values);
\n-
192 return *this;
\n-
193 }
\n-
\n+
\n+
154 GaussianMixture::shared_ptr asMixture() const {
\n+
155 return boost::dynamic_pointer_cast<GaussianMixture>(inner_);
\n+
156 }
\n+
\n+
157
\n+
\n+\n+
164 return boost::dynamic_pointer_cast<GaussianConditional>(inner_);
\n+
165 }
\n+
\n+
166
\n+
\n+\n+
173 return boost::dynamic_pointer_cast<DiscreteConditional>(inner_);
\n+
174 }
\n+
\n+
175
\n+
177 boost::shared_ptr<Factor> inner() const { return inner_; }
\n+
178
\n+
180 double error(const HybridValues& values) const override;
\n+
181
\n+
183 double logProbability(const HybridValues& values) const override;
\n+
184
\n+
190 double logNormalizationConstant() const override;
\n+
191
\n+
193 double evaluate(const HybridValues& values) const override;
\n
194
\n-
\n-\n-
200 continuous_.update(values.continuous());
\n-
201 discrete_.update(values.discrete());
\n-
202 return *this;
\n+
\n+
196 bool frontalsIn(const VectorValues& measurements) const {
\n+
197 for (Key key : frontals()) {
\n+
198 if (!measurements.exists(key)) {
\n+
199 return false;
\n+
200 }
\n+
201 }
\n+
202 return true;
\n
203 }
\n
\n
204
\n-
\n-\n-
207 VectorValues measurements;
\n-
208 for (const auto& key : keys) {
\n-
209 measurements.insert(key, continuous_.at(key));
\n-
210 }
\n-
211 return measurements;
\n-
212 }
\n-
\n-
213
\n-
217
\n-
\n-
224 std::string html(
\n-
225 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {
\n-
226 std::stringstream ss;
\n-
227 ss << this->continuous_.html(keyFormatter);
\n-
228 ss << this->discrete_.html(keyFormatter);
\n-
229 return ss.str();
\n-
230 };
\n+
206
\n+
207 private:
\n+
209 friend class boost::serialization::access;
\n+
210 template <class Archive>
\n+
211 void serialize(Archive& ar, const unsigned int /*version*/) {
\n+
212 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
\n+
213 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
\n+
214 ar& BOOST_SERIALIZATION_NVP(inner_);
\n+
215
\n+
216 // register the various casts based on the type of inner_
\n+
217 // https://www.boost.org/doc/libs/1_80_0/libs/serialization/doc/serialization.html#runtimecasting
\n+
218 if (isDiscrete()) {
\n+
219 boost::serialization::void_cast_register<DiscreteConditional, Factor>(
\n+
220 static_cast<DiscreteConditional*>(NULL), static_cast<Factor*>(NULL));
\n+
221 } else if (isContinuous()) {
\n+
222 boost::serialization::void_cast_register<GaussianConditional, Factor>(
\n+
223 static_cast<GaussianConditional*>(NULL), static_cast<Factor*>(NULL));
\n+
224 } else {
\n+
225 boost::serialization::void_cast_register<GaussianMixture, Factor>(
\n+
226 static_cast<GaussianMixture*>(NULL), static_cast<Factor*>(NULL));
\n+
227 }
\n+
228 }
\n+
229
\n+
230}; // HybridConditional
\n
\n
231
\n-
233};
\n-
\n-
234
\n-
235// traits
\n-
236template <>
\n-
237struct traits<HybridValues> : public Testable<HybridValues> {};
\n-
238
\n-
239} // namespace gtsam
\n-\n-
An assignment from labels to a discrete value index (size_t)
\n-
specialized key for discrete variables
\n-\n-
Factor Graph Values.
\n-
A non-templated config holding any types of Manifold-group elements.
\n+
232// traits
\n+
233template <>
\n+
234struct traits<HybridConditional> : public Testable<HybridConditional> {};
\n+
235
\n+
236} // namespace gtsam
\n+\n+
A hybrid conditional in the Conditional Linear Gaussian scheme.
\n+\n+
Linearized Hybrid factor graph that uses type erasure.
\n+\n+
Base class for conditional densities.
\n+
Conditional Gaussian Base class.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A map from keys to values.
Definition DiscreteValues.h:34
\n-
std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter, const Names &names={}) const
Output as a html table.
Definition DiscreteValues.cpp:104
\n-
DiscreteValues & update(const DiscreteValues &values)
For all key/value pairs in values, replace values with corresponding keys in this object with those i...
Definition DiscreteValues.cpp:63
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print required by Testable.
Definition DiscreteValues.cpp:31
\n-
bool equals(const DiscreteValues &x, double tol=1e-9) const
equals required by Testable for unit testing.
Definition DiscreteValues.cpp:40
\n+
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition DiscreteConditional.h:44
\n+
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n+
Hybrid Conditional Density.
Definition HybridConditional.h:62
\n+
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition HybridConditional.h:69
\n+
HybridFactor BaseFactor
Typedef to our factor base class.
Definition HybridConditional.h:67
\n+
boost::shared_ptr< Factor > inner_
Type-erased pointer to the inner type.
Definition HybridConditional.h:73
\n+
DiscreteConditional::shared_ptr asDiscrete() const
Return conditional as a DiscreteConditional.
Definition HybridConditional.h:172
\n+
GaussianMixture::shared_ptr asMixture() const
Return HybridConditional as a GaussianMixture.
Definition HybridConditional.h:154
\n+
boost::shared_ptr< Factor > inner() const
Get the type-erased pointer to the inner type.
Definition HybridConditional.h:177
\n+
bool frontalsIn(const VectorValues &measurements) const
Check if VectorValues measurements contains all frontal keys.
Definition HybridConditional.h:196
\n+
HybridConditional(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys, size_t nFrontals)
Construct a new Hybrid Conditional object.
Definition HybridConditional.h:89
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition HybridConditional.h:66
\n+
GaussianConditional::shared_ptr asGaussian() const
Return HybridConditional as a GaussianConditional.
Definition HybridConditional.h:163
\n+
HybridConditional This
Typedef to this class.
Definition HybridConditional.h:65
\n+
HybridConditional()=default
Default constructor needed for serialization.
\n+
Base class for truly hybrid probabilistic factors.
Definition HybridFactor.h:52
\n
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
void print(const std::string &s="HybridValues", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print required by Testable for unit testing
Definition HybridValues.h:70
\n-
void insert(Key j, const Vector &value)
Insert a vector value with key j.
Definition HybridValues.h:117
\n-
HybridValues & insert(const DiscreteValues &values)
Insert all discrete values from values.
Definition HybridValues.h:144
\n-
HybridValues(const VectorValues &cv, const DiscreteValues &dv, const Values &v)
Construct from all values types.
Definition HybridValues.h:61
\n-
std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Output as a html table.
Definition HybridValues.h:224
\n-
VectorValues continuousSubset(const KeyVector &keys) const
Extract continuous values with given keys.
Definition HybridValues.h:206
\n-
void insert_or_assign(Key j, const Vector &value)
insert_or_assign() , similar to Values.h
Definition HybridValues.h:126
\n-
HybridValues & insert(const Values &values)
Insert all values from values.
Definition HybridValues.h:151
\n-
bool equals(const HybridValues &other, double tol=1e-9) const
equals required by Testable for unit testing
Definition HybridValues.h:79
\n-
HybridValues & update(const VectorValues &values)
For all key/value pairs in values, replace continuous values with corresponding keys in this object w...
Definition HybridValues.h:181
\n-
const DiscreteValues & discrete() const
Return the discrete values.
Definition HybridValues.h:92
\n-
bool existsDiscrete(Key j)
Check whether a variable with key j exists in DiscreteValues.
Definition HybridValues.h:101
\n-
const VectorValues & continuous() const
Return the multi-dimensional vector values.
Definition HybridValues.h:89
\n-
Vector & at(Key j)
Read/write access to the vector value with key j, throws std::out_of_range if j does not exist.
Definition HybridValues.h:169
\n-
bool exists(Key j)
Check whether a variable with key j exists.
Definition HybridValues.h:109
\n-
HybridValues & update(const DiscreteValues &values)
For all key/value pairs in values, replace discrete values with corresponding keys in this object wit...
Definition HybridValues.h:190
\n-
HybridValues & insert(const HybridValues &values)
Insert all values from values.
Definition HybridValues.h:158
\n-
HybridValues & insert(const VectorValues &values)
Insert all continuous values from values.
Definition HybridValues.h:137
\n-
void insert(Key j, size_t value)
Insert a discrete value with key j.
Definition HybridValues.h:123
\n-
const Values & nonlinear() const
Return the nonlinear values.
Definition HybridValues.h:95
\n-
bool existsNonlinear(Key j)
Check whether a variable with key j exists in values.
Definition HybridValues.h:104
\n-
HybridValues & update(const HybridValues &values)
For all key/value pairs in values, replace all values with corresponding keys in this object with tho...
Definition HybridValues.h:199
\n-
HybridValues()=default
Default constructor creates an empty HybridValues.
\n-
bool existsVector(Key j)
Check whether a variable with key j exists in VectorValues.
Definition HybridValues.h:98
\n-
HybridValues(const VectorValues &cv, const DiscreteValues &dv)
Construct from DiscreteValues and VectorValues.
Definition HybridValues.h:57
\n-
size_t & atDiscrete(Key j)
Read/write access to the discrete value with key j, throws std::out_of_range if j does not exist.
Definition HybridValues.h:175
\n-
void insert_or_assign(Key j, size_t value)
insert_or_assign() , similar to Values.h
Definition HybridValues.h:131
\n+
Definition Conditional.h:64
\n+
Definition Factor.h:68
\n+
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianConditional.h:46
\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
iterator insert(const std::pair< Key, Vector > &key_value)
Insert a vector value with key j.
Definition VectorValues.cpp:91
\n-
void print(const std::string &str="VectorValues", const KeyFormatter &formatter=DefaultKeyFormatter) const
print required by Testable for unit testing
Definition VectorValues.cpp:158
\n-
bool equals(const VectorValues &x, double tol=1e-9) const
equals required by Testable for unit testing
Definition VectorValues.cpp:166
\n
bool exists(Key j) const
Check whether a variable with key j exists.
Definition VectorValues.h:133
\n-
std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Output as a html table.
Definition VectorValues.cpp:387
\n-
void insert_or_assign(Key j, const Vector &value)
insert_or_assign that mimics the STL map insert_or_assign - if the value already exists,...
Definition VectorValues.h:219
\n-
Vector & at(Key j)
Read/write access to the vector value with key j, throws std::out_of_range if j does not exist,...
Definition VectorValues.h:139
\n-
VectorValues & update(const VectorValues &values)
For all key/value pairs in values, replace values with corresponding keys in this class with those in...
Definition VectorValues.cpp:101
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
void insert(Key j, const Value &val)
Add a variable with the given j, throws KeyAlreadyExists<J> if j is already present.
Definition Values.cpp:157
\n-
bool exists(Key j) const
Check if a value exists with key j.
Definition Values.cpp:94
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridValues.h\n+HybridConditional.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,377 +16,260 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-26\n-27#include \n-28#include \n-29#include \n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32\n-_\b3_\b8class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs {\n-39 private:\n-41 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs continuous_;\n-42\n-44 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs discrete_;\n-45\n-47 _\bV_\ba_\bl_\bu_\be_\bs nonlinear_;\n-48\n-49 public:\n-52\n-_\b5_\b4 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs() = default;\n-55\n-_\b5_\b7 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& cv, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& dv)\n-58 : continuous_(cv), discrete_(dv){};\n-59\n-_\b6_\b1 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& cv, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& dv,\n-62 const _\bV_\ba_\bl_\bu_\be_\bs& v)\n-63 : continuous_(cv), discrete_(dv), nonlinear_(v){};\n-64\n-68\n-_\b7_\b0 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"HybridValues\",\n-71 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const {\n-72 std::cout << s << \": \\n\";\n-73 continuous_._\bp_\br_\bi_\bn_\bt(\" Continuous\",\n-74 keyFormatter); // print continuous components\n-75 discrete_._\bp_\br_\bi_\bn_\bt(\" Discrete\", keyFormatter); // print discrete components\n-76 };\n-77\n-_\b7_\b9 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& other, double tol = 1e-9) const {\n-80 return continuous_._\be_\bq_\bu_\ba_\bl_\bs(other.continuous_, tol) &&\n-81 discrete_._\be_\bq_\bu_\ba_\bl_\bs(other.discrete_, tol);\n-82 }\n-83\n-87\n-_\b8_\b9 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& _\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs() const { return continuous_; }\n-90\n-_\b9_\b2 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& _\bd_\bi_\bs_\bc_\br_\be_\bt_\be() const { return discrete_; }\n-93\n-_\b9_\b5 const _\bV_\ba_\bl_\bu_\be_\bs& _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br() const { return nonlinear_; }\n-96\n-_\b9_\b8 bool _\be_\bx_\bi_\bs_\bt_\bs_\bV_\be_\bc_\bt_\bo_\br(_\bK_\be_\by j) { return continuous_._\be_\bx_\bi_\bs_\bt_\bs(j); };\n-99\n-_\b1_\b0_\b1 bool _\be_\bx_\bi_\bs_\bt_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be(_\bK_\be_\by j) { return (discrete_.find(j) != discrete_.end());\n-};\n-102\n-_\b1_\b0_\b4 bool _\be_\bx_\bi_\bs_\bt_\bs_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br(_\bK_\be_\by j) {\n-105 return nonlinear_._\be_\bx_\bi_\bs_\bt_\bs(j);\n-106 };\n-107\n-_\b1_\b0_\b9 bool _\be_\bx_\bi_\bs_\bt_\bs(_\bK_\be_\by j) {\n-110 return existsVector(j) || existsDiscrete(j) || existsNonlinear(j);\n-111 };\n-112\n-_\b1_\b1_\b7 void _\bi_\bn_\bs_\be_\br_\bt(_\bK_\be_\by j, const Vector& value) { continuous_._\bi_\bn_\bs_\be_\br_\bt(j, value); }\n-118\n-_\b1_\b2_\b3 void _\bi_\bn_\bs_\be_\br_\bt(_\bK_\be_\by j, size_t value) { discrete_[j] = value; };\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+27\n+28#include \n+29#include \n+30#include \n+31#include \n+32#include \n+33#include \n+34\n+35namespace _\bg_\bt_\bs_\ba_\bm {\n+36\n+_\b6_\b0class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+61 : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br,\n+62 public _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n+63 public:\n+64 // typedefs needed to play nice with gtsam\n+_\b6_\b5 typedef _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bT_\bh_\bi_\bs;\n+_\b6_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b6_\b7 typedef _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br;\n+68 typedef _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bT_\bh_\bi_\bs_\b>\n+_\b6_\b9 _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+70\n+71 protected:\n+_\b7_\b3 boost::shared_ptr _\bi_\bn_\bn_\be_\br_\b_;\n+74\n+75 public:\n+78\n+_\b8_\b0 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() = default;\n+81\n+_\b8_\b9 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& continuousKeys,\n+90 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& discreteKeys, size_t nFrontals)\n+91 : _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(continuousKeys, discreteKeys), _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(nFrontals) {}\n+92\n+102 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& continuousFrontals,\n+103 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& discreteFrontals,\n+104 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& continuousParents,\n+105 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& discreteParents);\n+106\n+113 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(\n+114 const boost::shared_ptr& continuousConditional);\n+115\n+122 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(\n+123 const boost::shared_ptr& discreteConditional);\n 124\n-_\b1_\b2_\b6 void _\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn(_\bK_\be_\by j, const Vector& value) {\n-127 continuous_._\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn(j, value);\n-128 }\n-129\n-_\b1_\b3_\b1 void _\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn(_\bK_\be_\by j, size_t value) {\n-132 discrete_[j] = value;\n-133 }\n-134\n-_\b1_\b3_\b7 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& _\bi_\bn_\bs_\be_\br_\bt(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& values) {\n-138 continuous_._\bi_\bn_\bs_\be_\br_\bt(values);\n-139 return *this;\n-140 }\n+131 _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const boost::shared_ptr&\n+gaussianMixture);\n+132\n+136\n+138 void _\bp_\br_\bi_\bn_\bt(\n+139 const std::string& s = \"Hybrid Conditional: \",\n+140 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n 141\n-_\b1_\b4_\b4 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& _\bi_\bn_\bs_\be_\br_\bt(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) {\n-145 discrete_.insert(values);\n-146 return *this;\n-147 }\n+143 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br& other, double tol = 1e-9) const override;\n+144\n 148\n-_\b1_\b5_\b1 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& _\bi_\bn_\bs_\be_\br_\bt(const _\bV_\ba_\bl_\bu_\be_\bs& values) {\n-152 nonlinear_._\bi_\bn_\bs_\be_\br_\bt(values);\n-153 return *this;\n-154 }\n-155\n-_\b1_\b5_\b8 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& _\bi_\bn_\bs_\be_\br_\bt(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) {\n-159 continuous_._\bi_\bn_\bs_\be_\br_\bt(values._\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs());\n-160 discrete_.insert(values._\bd_\bi_\bs_\bc_\br_\be_\bt_\be());\n-161 nonlinear_._\bi_\bn_\bs_\be_\br_\bt(values._\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br());\n-162 return *this;\n-163 }\n-164\n-_\b1_\b6_\b9 Vector& _\ba_\bt(_\bK_\be_\by j) { return continuous_._\ba_\bt(j); };\n-170\n-_\b1_\b7_\b5 size_t& _\ba_\bt_\bD_\bi_\bs_\bc_\br_\be_\bt_\be(_\bK_\be_\by j) { return discrete_.at(j); };\n-176\n-_\b1_\b8_\b1 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& _\bu_\bp_\bd_\ba_\bt_\be(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& values) {\n-182 continuous_._\bu_\bp_\bd_\ba_\bt_\be(values);\n-183 return *this;\n-184 }\n-185\n-_\b1_\b9_\b0 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& _\bu_\bp_\bd_\ba_\bt_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) {\n-191 discrete_._\bu_\bp_\bd_\ba_\bt_\be(values);\n-192 return *this;\n-193 }\n+_\b1_\b5_\b4 GaussianMixture::shared_ptr _\ba_\bs_\bM_\bi_\bx_\bt_\bu_\br_\be() const {\n+155 return boost::dynamic_pointer_cast(inner_);\n+156 }\n+157\n+_\b1_\b6_\b3 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\ba_\bs_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn() const {\n+164 return boost::dynamic_pointer_cast(inner_);\n+165 }\n+166\n+_\b1_\b7_\b2 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\ba_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be() const {\n+173 return boost::dynamic_pointer_cast(inner_);\n+174 }\n+175\n+_\b1_\b7_\b7 boost::shared_ptr _\bi_\bn_\bn_\be_\br() const { return inner_; }\n+178\n+180 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const override;\n+181\n+183 double logProbability(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const override;\n+184\n+190 double logNormalizationConstant() const override;\n+191\n+193 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const override;\n 194\n-_\b1_\b9_\b9 _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& _\bu_\bp_\bd_\ba_\bt_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) {\n-200 continuous_._\bu_\bp_\bd_\ba_\bt_\be(values._\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs());\n-201 discrete_._\bu_\bp_\bd_\ba_\bt_\be(values._\bd_\bi_\bs_\bc_\br_\be_\bt_\be());\n-202 return *this;\n+_\b1_\b9_\b6 bool _\bf_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bI_\bn(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& measurements) const {\n+197 for (_\bK_\be_\by key : frontals()) {\n+198 if (!measurements._\be_\bx_\bi_\bs_\bt_\bs(key)) {\n+199 return false;\n+200 }\n+201 }\n+202 return true;\n 203 }\n 204\n-_\b2_\b0_\b6 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bS_\bu_\bb_\bs_\be_\bt(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys) const {\n-207 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs measurements;\n-208 for (const auto& key : keys) {\n-209 measurements._\bi_\bn_\bs_\be_\br_\bt(key, continuous_._\ba_\bt(key));\n-210 }\n-211 return measurements;\n-212 }\n-213\n-217\n-_\b2_\b2_\b4 std::string _\bh_\bt_\bm_\bl(\n-225 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const {\n-226 std::stringstream ss;\n-227 ss << this->continuous_._\bh_\bt_\bm_\bl(keyFormatter);\n-228 ss << this->discrete_._\bh_\bt_\bm_\bl(keyFormatter);\n-229 return ss.str();\n-230 };\n+206\n+207 private:\n+_\b2_\b0_\b9 friend class boost::serialization::access;\n+210 template \n+211 void serialize(Archive& ar, const unsigned int /*version*/) {\n+212 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br);\n+213 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl);\n+214 ar& BOOST_SERIALIZATION_NVP(inner_);\n+215\n+216 // register the various casts based on the type of inner_\n+217 // https://www.boost.org/doc/libs/1_80_0/libs/serialization/doc/\n+serialization.html#runtimecasting\n+218 if (isDiscrete()) {\n+219 boost::serialization::void_cast_register(\n+220 static_cast<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl*>(NULL), static_cast<_\bF_\ba_\bc_\bt_\bo_\br*>(NULL));\n+221 } else if (isContinuous()) {\n+222 boost::serialization::void_cast_register(\n+223 static_cast<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl*>(NULL), static_cast<_\bF_\ba_\bc_\bt_\bo_\br*>(NULL));\n+224 } else {\n+225 boost::serialization::void_cast_register(\n+226 static_cast(NULL), static_cast(NULL));\n+227 }\n+228 }\n+229\n+230}; // HybridConditional\n 231\n-233};\n-234\n-235// traits\n-236template <>\n-_\b2_\b3_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-238\n-239} // namespace gtsam\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh\n-An assignment from labels to a discrete value index (size_t)\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n-specialized key for discrete variables\n+232// traits\n+233template <>\n+_\b2_\b3_\b4struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+235\n+236} // namespace gtsam\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b._\bh\n+A hybrid conditional in the Conditional Linear Gaussian scheme.\n+_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linearized Hybrid factor graph that uses type erasure.\n _\bK_\be_\by_\b._\bh\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\n+_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+Base class for conditional densities.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+Conditional Gaussian Base class.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-A map from keys to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bh_\bt_\bm_\bl\n-std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter, const\n-Names &names={}) const\n-Output as a html table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-DiscreteValues & update(const DiscreteValues &values)\n-For all key/value pairs in values, replace values with corresponding keys in\n-this object with those i...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-print required by Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const DiscreteValues &x, double tol=1e-9) const\n-equals required by Testable for unit testing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Discrete Conditional Density Derives from DecisionTreeFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys is a set of keys that can be assembled using the & operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Hybrid Conditional Density.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Conditional< BaseFactor, This > BaseConditional\n+Typedef to our conditional base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+HybridFactor BaseFactor\n+Typedef to our factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bi_\bn_\bn_\be_\br_\b_\n+boost::shared_ptr< Factor > inner_\n+Type-erased pointer to the inner type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\ba_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be\n+DiscreteConditional::shared_ptr asDiscrete() const\n+Return conditional as a DiscreteConditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:172\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\ba_\bs_\bM_\bi_\bx_\bt_\bu_\br_\be\n+GaussianMixture::shared_ptr asMixture() const\n+Return HybridConditional as a GaussianMixture.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bi_\bn_\bn_\be_\br\n+boost::shared_ptr< Factor > inner() const\n+Get the type-erased pointer to the inner type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bI_\bn\n+bool frontalsIn(const VectorValues &measurements) const\n+Check if VectorValues measurements contains all frontal keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:196\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+HybridConditional(const KeyVector &continuousKeys, const DiscreteKeys\n+&discreteKeys, size_t nFrontals)\n+Construct a new Hybrid Conditional object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\ba_\bs_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn\n+GaussianConditional::shared_ptr asGaussian() const\n+Return HybridConditional as a GaussianConditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bT_\bh_\bi_\bs\n+HybridConditional This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+HybridConditional()=default\n+Default constructor needed for serialization.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+Base class for truly hybrid probabilistic factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:52\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n HybridValues represents a collection of DiscreteValues and VectorValues.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"HybridValues\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-print required by Testable for unit testing\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-void insert(Key j, const Vector &value)\n-Insert a vector value with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-HybridValues & insert(const DiscreteValues &values)\n-Insert all discrete values from values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:144\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues(const VectorValues &cv, const DiscreteValues &dv, const Values &v)\n-Construct from all values types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bh_\bt_\bm_\bl\n-std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter) const\n-Output as a html table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:224\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bS_\bu_\bb_\bs_\be_\bt\n-VectorValues continuousSubset(const KeyVector &keys) const\n-Extract continuous values with given keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:206\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn\n-void insert_or_assign(Key j, const Vector &value)\n-insert_or_assign() , similar to Values.h\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-HybridValues & insert(const Values &values)\n-Insert all values from values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const HybridValues &other, double tol=1e-9) const\n-equals required by Testable for unit testing\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-HybridValues & update(const VectorValues &values)\n-For all key/value pairs in values, replace continuous values with corresponding\n-keys in this object w...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:181\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n-const DiscreteValues & discrete() const\n-Return the discrete values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs_\bD_\bi_\bs_\bc_\br_\be_\bt_\be\n-bool existsDiscrete(Key j)\n-Check whether a variable with key j exists in DiscreteValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs\n-const VectorValues & continuous() const\n-Return the multi-dimensional vector values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-Vector & at(Key j)\n-Read/write access to the vector value with key j, throws std::out_of_range if j\n-does not exist.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:169\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(Key j)\n-Check whether a variable with key j exists.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-HybridValues & update(const DiscreteValues &values)\n-For all key/value pairs in values, replace discrete values with corresponding\n-keys in this object wit...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:190\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-HybridValues & insert(const HybridValues &values)\n-Insert all values from values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:158\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-HybridValues & insert(const VectorValues &values)\n-Insert all continuous values from values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-void insert(Key j, size_t value)\n-Insert a discrete value with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n-const Values & nonlinear() const\n-Return the nonlinear values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n-bool existsNonlinear(Key j)\n-Check whether a variable with key j exists in values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-HybridValues & update(const HybridValues &values)\n-For all key/value pairs in values, replace all values with corresponding keys\n-in this object with tho...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:199\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues()=default\n-Default constructor creates an empty HybridValues.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs_\bV_\be_\bc_\bt_\bo_\br\n-bool existsVector(Key j)\n-Check whether a variable with key j exists in VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues(const VectorValues &cv, const DiscreteValues &dv)\n-Construct from DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt_\bD_\bi_\bs_\bc_\br_\be_\bt_\be\n-size_t & atDiscrete(Key j)\n-Read/write access to the discrete value with key j, throws std::out_of_range if\n-j does not exist.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:175\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn\n-void insert_or_assign(Key j, size_t value)\n-insert_or_assign() , similar to Values.h\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+A GaussianConditional functions as the node in a Bayes network.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:46\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n VectorValues represents a collection of vector-valued variables associated each\n with a unique integer...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-iterator insert(const std::pair< Key, Vector > &key_value)\n-Insert a vector value with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.cpp:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &str=\"VectorValues\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print required by Testable for unit testing\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.cpp:158\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const VectorValues &x, double tol=1e-9) const\n-equals required by Testable for unit testing\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.cpp:166\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n bool exists(Key j) const\n Check whether a variable with key j exists.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:133\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bh_\bt_\bm_\bl\n-std::string html(const KeyFormatter &keyFormatter=DefaultKeyFormatter) const\n-Output as a html table.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.cpp:387\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn\n-void insert_or_assign(Key j, const Vector &value)\n-insert_or_assign that mimics the STL map insert_or_assign - if the value\n-already exists,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-Vector & at(Key j)\n-Read/write access to the vector value with key j, throws std::out_of_range if j\n-does not exist,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:139\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-VectorValues & update(const VectorValues &values)\n-For all key/value pairs in values, replace values with corresponding keys in\n-this class with those in...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.cpp:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-void insert(Key j, const Value &val)\n-Add a variable with the given j, throws KeyAlreadyExists if j is already\n-present.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(Key j) const\n-Check if a value exists with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:94\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00563.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00563.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearISAM.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactorGraph.h File Reference\n \n \n \n \n \n \n \n@@ -95,40 +95,53 @@\n
\n \n \n \n
\n \n-
HybridNonlinearISAM.h File Reference
\n+Namespaces |\n+Typedefs
\n+
HybridFactorGraph.h File Reference
\n \n
\n \n+

Factor graph with utilities for hybrid factors. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::HybridNonlinearISAM
 Wrapper class to manage ISAM in a nonlinear context. More...
class  gtsam::HybridFactorGraph
 Hybrid Factor Graph Factor graph with utilities for hybrid factors. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Typedefs

\n+using gtsam::SharedFactor = boost::shared_ptr< Factor >
 
\n

Detailed Description

\n-
Date
Sep 12, 2022
\n-
Author
Varun Agrawal
\n+

Factor graph with utilities for hybrid factors.

\n+
Author
Varun Agrawal
\n+
\n+Frank Dellaert
\n+
Date
May 28, 2022
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HybridNonlinearISAM.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+HybridFactorGraph.h File Reference\n+Factor graph with utilities for hybrid factors. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n-\u00a0 Wrapper class to manage _\bI_\bS_\bA_\bM in a nonlinear context. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+\u00a0 Hybrid _\bF_\ba_\bc_\bt_\bo_\br Graph _\bF_\ba_\bc_\bt_\bo_\br graph with utilities for hybrid factors.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bha\bar\bre\bed\bdF\bFa\bac\bct\bto\bor\br = boost::shared_ptr< _\bF_\ba_\bc_\bt_\bo_\br >\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Sep 12, 2022\n+Factor graph with utilities for hybrid factors.\n Author\n Varun Agrawal\n+ Frank Dellaert\n+ Date\n+ May 28, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00563.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00563.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00563 = [\n- [\"gtsam::HybridNonlinearISAM\", \"a03496.html\", \"a03496\"]\n+ [\"gtsam::HybridFactorGraph\", \"a03456.html\", \"a03456\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00563_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00563_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearISAM.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -98,139 +98,92 @@\n
No Matches
\n \n \n \n \n \n
\n-
HybridNonlinearISAM.h
\n+
HybridFactorGraph.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-\n-
22
\n-
23namespace gtsam {
\n-
\n-
27class GTSAM_EXPORT HybridNonlinearISAM {
\n-
28 protected:
\n-\n-
31
\n-\n+
20#pragma once
\n+
21
\n+\n+\n+
24
\n+
25#include <boost/format.hpp>
\n+
26#include <unordered_map>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
30class DiscreteFactor;
\n+
31class Ordering;
\n+
32
\n+
33using SharedFactor = boost::shared_ptr<Factor>;
\n
34
\n-\n-
37
\n-\n-
40
\n-\n-
43 int reorderCounter_;
\n+
\n+
39class HybridFactorGraph : public FactorGraph<Factor> {
\n+
40 public:
\n+\n+\n+
43 using shared_ptr = boost::shared_ptr<This>;
\n
44
\n-\n+\n+
46 using Indices = KeyVector;
\n
47
\n
48 public:
\n
51
\n-
\n-\n-
60 int reorderInterval = 1,
\n-
61 const HybridGaussianFactorGraph::Eliminate& eliminationFunction =
\n-
62 HybridGaussianFactorGraph::EliminationTraitsType::DefaultEliminate)
\n-
63 : reorderInterval_(reorderInterval),
\n-
64 reorderCounter_(0),
\n-
65 eliminationFunction_(eliminationFunction) {}
\n-
\n+
53 HybridFactorGraph() = default;
\n+
54
\n+
60 template <class DERIVEDFACTOR>
\n+\n+
62
\n
66
\n-
70
\n-
72 Values estimate();
\n-
73
\n-
74 // /** find the marginal covariance for a single variable */
\n-
75 // Matrix marginalCovariance(Key key) const;
\n-
76
\n-
77 // access
\n+
68 std::set<DiscreteKey> discreteKeys() const;
\n+
69
\n+
71 KeySet discreteKeySet() const;
\n+
72
\n+
74 std::unordered_map<Key, DiscreteKey> discreteKeyMap() const;
\n+
75
\n+
77 const KeySet continuousKeySet() const;
\n
78
\n-
80 const HybridGaussianISAM& bayesTree() const { return isam_; }
\n-
81
\n-
87 void prune(const size_t maxNumberLeaves) { isam_.prune(maxNumberLeaves); }
\n-
88
\n-
90 const Values& getLinearizationPoint() const { return linPoint_; }
\n-
91
\n-
93 const DiscreteValues& assignment() const { return assignment_; }
\n-
94
\n-
\n-\n-
97 return factors_;
\n-
98 }
\n-
\n-
99
\n-
101 int reorderInterval() const { return reorderInterval_; }
\n-
\n-
102 int reorderCounter() const { return reorderCounter_; }
\n-
103
\n-
105 void print(const std::string& s = "",
\n-
106 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
107
\n-
109 void printStats() const;
\n-
110
\n-
112 void saveGraph(const std::string& s,
\n-
113 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
114
\n-
118
\n-
120 void update(const HybridNonlinearFactorGraph& newFactors,
\n-
121 const Values& initialValues,
\n-
122 const boost::optional<size_t>& maxNrLeaves = boost::none,
\n-
123 const boost::optional<Ordering>& ordering = boost::none);
\n-
124
\n-
126 void reorder_relinearize();
\n-
127
\n-
129};
\n-
130
\n-
131} // namespace gtsam
\n+
80};
\n
\n-
\n-
Nonlinear hybrid factor graph that uses type erasure.
\n-\n+
81
\n+
82} // namespace gtsam
\n+\n+
Factor Graph Base Class.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A map from keys to values.
Definition DiscreteValues.h:34
\n-
void prune(const size_t maxNumberLeaves)
Prune the underlying Bayes tree.
Definition HybridBayesTree.cpp:175
\n-
Definition HybridGaussianISAM.h:34
\n-
Definition HybridNonlinearFactorGraph.h:33
\n-
Wrapper class to manage ISAM in a nonlinear context.
Definition HybridNonlinearISAM.h:27
\n-
const HybridNonlinearFactorGraph & getFactorsUnsafe() const
get underlying nonlinear graph
Definition HybridNonlinearISAM.h:96
\n-
DiscreteValues assignment_
The discrete assignment.
Definition HybridNonlinearISAM.h:36
\n-
const Values & getLinearizationPoint() const
Return the current linearization point.
Definition HybridNonlinearISAM.h:90
\n-
HybridNonlinearISAM(int reorderInterval=1, const HybridGaussianFactorGraph::Eliminate &eliminationFunction=HybridGaussianFactorGraph::EliminationTraitsType::DefaultEliminate)
Periodically reorder and relinearize.
Definition HybridNonlinearISAM.h:59
\n-
HybridNonlinearFactorGraph factors_
The original factors, used when relinearizing.
Definition HybridNonlinearISAM.h:39
\n-
const DiscreteValues & assignment() const
Return the current discrete assignment.
Definition HybridNonlinearISAM.h:93
\n-
int reorderCounter() const
TODO: comment.
Definition HybridNonlinearISAM.h:102
\n-
void prune(const size_t maxNumberLeaves)
Prune the underlying Bayes tree.
Definition HybridNonlinearISAM.h:87
\n-
int reorderInterval_
The reordering interval and counter.
Definition HybridNonlinearISAM.h:42
\n-
int reorderInterval() const
get counters
Definition HybridNonlinearISAM.h:101
\n-
Values linPoint_
The current linearization point.
Definition HybridNonlinearISAM.h:33
\n-
gtsam::HybridGaussianISAM isam_
The internal iSAM object.
Definition HybridNonlinearISAM.h:30
\n-
HybridGaussianFactorGraph::Eliminate eliminationFunction_
The elimination function.
Definition HybridNonlinearISAM.h:46
\n-
const HybridGaussianISAM & bayesTree() const
access the underlying bayes tree
Definition HybridNonlinearISAM.h:80
\n-
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition EliminateableFactorGraph.h:89
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+\n+
Hybrid Factor Graph Factor graph with utilities for hybrid factors.
Definition HybridFactorGraph.h:39
\n+
HybridFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition HybridFactorGraph.h:61
\n+
KeySet discreteKeySet() const
Get all the discrete keys in the factor graph, as a set.
Definition HybridFactorGraph.cpp:46
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to This
Definition HybridFactorGraph.h:43
\n+
std::unordered_map< Key, DiscreteKey > discreteKeyMap() const
Get a map from Key to corresponding DiscreteKey.
Definition HybridFactorGraph.cpp:56
\n+
const KeySet continuousKeySet() const
Get all the continuous keys in the factor graph.
Definition HybridFactorGraph.cpp:65
\n+
HybridFactorGraph()=default
Default constructor.
\n+
std::set< DiscreteKey > discreteKeys() const
Get all the discrete keys in the factor graph.
Definition HybridFactorGraph.cpp:28
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,191 +1,116 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridNonlinearISAM.h\n+HybridFactorGraph.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-_\b2_\b7class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM {\n-28 protected:\n-_\b3_\b0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM _\bi_\bs_\ba_\bm_\b_;\n-31\n-_\b3_\b3 _\bV_\ba_\bl_\bu_\be_\bs _\bl_\bi_\bn_\bP_\bo_\bi_\bn_\bt_\b_;\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+24\n+25#include \n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+30class DiscreteFactor;\n+31class Ordering;\n+32\n+33using SharedFactor = boost::shared_ptr;\n 34\n-_\b3_\b6 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs _\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b_;\n-37\n-_\b3_\b9 _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_;\n-40\n-_\b4_\b2 int _\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\b_;\n-43 int reorderCounter_;\n+_\b3_\b9class _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh : public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n+40 public:\n+41 using _\bB_\ba_\bs_\be = _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\ba_\bc_\bt_\bo_\br_\b>;\n+_\b4_\b2 using _\bT_\bh_\bi_\bs = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n+_\b4_\b3 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n 44\n-_\b4_\b6 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_;\n+_\b4_\b5 using _\bV_\ba_\bl_\bu_\be_\bs = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs;\n+46 using Indices = _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br;\n 47\n 48 public:\n 51\n-_\b5_\b9 _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM(\n-60 int reorderInterval = 1,\n-61 const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& eliminationFunction =\n-62 HybridGaussianFactorGraph::EliminationTraitsType::DefaultEliminate)\n-63 : reorderInterval_(reorderInterval),\n-64 reorderCounter_(0),\n-65 eliminationFunction_(eliminationFunction) {}\n+_\b5_\b3 _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() = default;\n+54\n+60 template \n+_\b6_\b1 _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph) : _\bB_\ba_\bs_\be(graph) {}\n+62\n 66\n-70\n-72 _\bV_\ba_\bl_\bu_\be_\bs estimate();\n-73\n-74 // /** find the marginal covariance for a single variable */\n-75 // Matrix marginalCovariance(Key key) const;\n-76\n-77 // access\n+68 std::set _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs() const;\n+69\n+71 _\bK_\be_\by_\bS_\be_\bt _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bS_\be_\bt() const;\n+72\n+74 std::unordered_map _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bM_\ba_\bp() const;\n+75\n+77 const _\bK_\be_\by_\bS_\be_\bt _\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bS_\be_\bt() const;\n 78\n-_\b8_\b0 const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM& _\bb_\ba_\by_\be_\bs_\bT_\br_\be_\be() const { return isam_; }\n+80};\n 81\n-_\b8_\b7 void _\bp_\br_\bu_\bn_\be(const size_t maxNumberLeaves) { isam_._\bp_\br_\bu_\bn_\be(maxNumberLeaves); }\n-88\n-_\b9_\b0 const _\bV_\ba_\bl_\bu_\be_\bs& _\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt() const { return linPoint_; }\n-91\n-_\b9_\b3 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& _\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt() const { return assignment_; }\n-94\n-_\b9_\b6 const _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be() const {\n-97 return factors_;\n-98 }\n-99\n-_\b1_\b0_\b1 int _\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() const { return reorderInterval_; }\n-_\b1_\b0_\b2 int _\br_\be_\bo_\br_\bd_\be_\br_\bC_\bo_\bu_\bn_\bt_\be_\br() const { return reorderCounter_; }\n-103\n-105 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-106 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n-107\n-109 void printStats() const;\n-110\n-112 void saveGraph(const std::string& s,\n-113 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n-114\n-118\n-120 void update(const _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n-121 const _\bV_\ba_\bl_\bu_\be_\bs& initialValues,\n-122 const boost::optional& maxNrLeaves = boost::none,\n-123 const boost::optional& ordering = boost::none);\n-124\n-126 void reorder_relinearize();\n-127\n-129};\n-130\n-131} // namespace gtsam\n-_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Nonlinear hybrid factor graph that uses type erasure.\n-_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh\n+82} // namespace gtsam\n+_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-A map from keys to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bu_\bn_\be\n-void prune(const size_t maxNumberLeaves)\n-Prune the underlying Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.cpp:175\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianISAM.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearFactorGraph.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n-Wrapper class to manage ISAM in a nonlinear context.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be\n-const HybridNonlinearFactorGraph & getFactorsUnsafe() const\n-get underlying nonlinear graph\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b_\n-DiscreteValues assignment_\n-The discrete assignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt\n-const Values & getLinearizationPoint() const\n-Return the current linearization point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:90\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n-HybridNonlinearISAM(int reorderInterval=1, const HybridGaussianFactorGraph::\n-Eliminate &eliminationFunction=HybridGaussianFactorGraph::\n-EliminationTraitsType::DefaultEliminate)\n-Periodically reorder and relinearize.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_\n-HybridNonlinearFactorGraph factors_\n-The original factors, used when relinearizing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt\n-const DiscreteValues & assignment() const\n-Return the current discrete assignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bC_\bo_\bu_\bn_\bt_\be_\br\n-int reorderCounter() const\n-TODO: comment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bp_\br_\bu_\bn_\be\n-void prune(const size_t maxNumberLeaves)\n-Prune the underlying Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\b_\n-int reorderInterval_\n-The reordering interval and counter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n-int reorderInterval() const\n-get counters\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bl_\bi_\bn_\bP_\bo_\bi_\bn_\bt_\b_\n-Values linPoint_\n-The current linearization point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bi_\bs_\ba_\bm_\b_\n-gtsam::HybridGaussianISAM isam_\n-The internal iSAM object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_\n-HybridGaussianFactorGraph::Eliminate eliminationFunction_\n-The elimination function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bb_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-const HybridGaussianISAM & bayesTree() const\n-access the underlying bayes tree\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-std::function< EliminationResult(const FactorGraphType &, const Ordering &)>\n-Eliminate\n-The function type that does a single dense elimination step on a subgraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+Hybrid Factor Graph Factor graph with utilities for hybrid factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+HybridFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n+Implicit copy/downcast constructor to override explicit template container\n+constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bS_\be_\bt\n+KeySet discreteKeySet() const\n+Get all the discrete keys in the factor graph, as a set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.cpp:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bM_\ba_\bp\n+std::unordered_map< Key, DiscreteKey > discreteKeyMap() const\n+Get a map from Key to corresponding DiscreteKey.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.cpp:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bS_\be_\bt\n+const KeySet continuousKeySet() const\n+Get all the continuous keys in the factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.cpp:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+HybridFactorGraph()=default\n+Default constructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+std::set< DiscreteKey > discreteKeys() const\n+Get all the discrete keys in the factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.cpp:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00566.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00566.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/GaussianMixture.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridConditional.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,57 +94,32 @@\n \n \n \n \n \n
\n \n-
GaussianMixture.h File Reference
\n+Namespaces
\n+
HybridConditional.cpp File Reference
\n \n
\n-\n-

A hybrid conditional in the Conditional Linear Gaussian scheme. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::GaussianMixture
 A conditional of gaussian mixtures indexed by discrete variables, as part of a Bayes Network. More...
 
struct  gtsam::traits< GaussianMixture >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

\n-std::set< DiscreteKeygtsam::DiscreteKeysAsSet (const DiscreteKeys &discreteKeys)
 Return the DiscreteKey vector as a set.
 
\n

Detailed Description

\n-

A hybrid conditional in the Conditional Linear Gaussian scheme.

\n-
Author
Fan Jiang
\n-
\n-Varun Agrawal
\n-
Date
Mar 12, 2022
\n+
Date
Mar 11, 2022
\n+
Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,36 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-GaussianMixture.h File Reference\n-A hybrid conditional in the Conditional Linear Gaussian scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be\n-\u00a0 A conditional of gaussian mixtures indexed by discrete variables, as\n- part of a Bayes Network. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HybridConditional.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::set< _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDi\bis\bsc\bcr\bre\bet\bte\beK\bKe\bey\bys\bsA\bAs\bsS\bSe\bet\bt (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n- &discreteKeys)\n-\u00a0 Return the DiscreteKey vector as a set.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A hybrid conditional in the Conditional Linear Gaussian scheme.\n+ Date\n+ Mar 11, 2022\n Author\n Fan Jiang\n- Varun Agrawal\n- Date\n- Mar 12, 2022\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\b._\bh\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00569.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00569.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianFactorGraph.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianISAM.h File Reference\n \n \n \n \n \n \n \n@@ -94,60 +94,53 @@\n \n \n \n \n \n
\n \n-
HybridGaussianFactorGraph.cpp File Reference
\n+Classes |\n+Namespaces
\n+
HybridGaussianISAM.h File Reference
\n \n
\n \n-

Hybrid factor graph that uses type erasure. \n-More...

\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::HybridGaussianISAM
 
struct  gtsam::traits< HybridGaussianISAM >
 traits More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::OrphanWrapper = BayesTreeOrphanWrapper< HybridBayesTree::Clique >
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

const Ordering gtsam::HybridOrdering (const HybridGaussianFactorGraph &graph)
 Return a Colamd constrained ordering where the discrete keys are eliminated after the continuous keys.
 
\n-GaussianFactorGraphTree gtsam::removeEmpty (const GaussianFactorGraphTree &sum)
 
std::pair< HybridConditional::shared_ptr, boost::shared_ptr< Factor > > gtsam::EliminateHybrid (const HybridGaussianFactorGraph &factors, const Ordering &keys)
 Main elimination function for HybridGaussianFactorGraph.
 
\n

Detailed Description

\n-

Hybrid factor graph that uses type erasure.

\n+
Date
March 31, 2022
\n+
Author
Fan Jiang
\n+
\n+Frank Dellaert
\n+
\n+Varun Agrawal
\n+
Date
March 31, 2022
\n
Author
Fan Jiang
\n
\n-Varun Agrawal
\n+Frank Dellaert \n
\n-Frank Dellaert
\n-
Date
Mar 11, 2022
\n+Richard Roberts \n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,43 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-HybridGaussianFactorGraph.cpp File Reference\n-Hybrid factor graph that uses type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HybridGaussianISAM.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:O\bOr\brp\bph\bha\ban\bnW\bWr\bra\bap\bpp\bpe\ber\br = _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br< _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be >\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bO_\br_\bd_\be_\br_\bi_\bn_\bg (const\n- _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph)\n- Return a Colamd constrained ordering\n-\u00a0 where the discrete keys are eliminated\n- after the continuous keys.\n-\u00a0\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:r\bre\bem\bmo\bov\bve\beE\bEm\bmp\bpt\bty\by (const\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be &sum)\n-\u00a0\n- std::pair< _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bH_\by_\bb_\br_\bi_\bd (const\n-_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, boost::shared_ptr< _\bF_\ba_\bc_\bt_\bo_\br > _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors,\n- >\u00a0 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n-\u00a0 Main elimination function for\n- _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Hybrid factor graph that uses type erasure.\n+ Date\n+ March 31, 2022\n Author\n Fan Jiang\n- Varun Agrawal\n Frank Dellaert\n+ Varun Agrawal\n Date\n- Mar 11, 2022\n+ March 31, 2022\n+ Author\n+ Fan Jiang\n+ Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00569.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00569.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00569 = [\n- [\"EliminateHybrid\", \"a00569.html#gacbc9f97e48e6aa3abb5f789af8c3bfe5\", null],\n- [\"HybridOrdering\", \"a00569.html#a584e4e05d52a617c1d313e1f53c8ce58\", null]\n+ [\"gtsam::traits< HybridGaussianISAM >\", \"a03472.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00572.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00572.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/DotWriter.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph-inst.h File Reference\n \n \n \n \n \n \n \n@@ -95,35 +95,44 @@\n \n \n \n \n
\n \n-
DotWriter.cpp File Reference
\n+
FactorGraph-inst.h File Reference
\n
\n
\n \n-

Graphviz formatting for factor graphs. \n+

Factor Graph Base Class. \n More...

\n+\n+

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Graphviz formatting for factor graphs.

\n-
Author
Frank Dellaert
\n-
Date
December, 2021
\n+

Factor Graph Base Class.

\n+
Author
Carlos Nieto
\n+
\n+Frank Dellaert
\n+
\n+Alireza Fathi
\n+
\n+Michael Kaess
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DotWriter.cpp File Reference\n-Graphviz formatting for factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\n+FactorGraph-inst.h File Reference\n+Factor Graph Base Class. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Graphviz formatting for factor graphs.\n+Factor Graph Base Class.\n Author\n+ Carlos Nieto\n Frank Dellaert\n- Date\n- December, 2021\n+ Alireza Fathi\n+ Michael Kaess\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bc_\bp_\bp\n+ * _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00575.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00575.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableIndex.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,59 +94,32 @@\n \n \n \n \n \n
\n \n-
FactorGraph.h File Reference
\n+
VariableIndex.cpp File Reference
\n
\n
\n-\n-

Factor Graph Base Class. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::CRefCallPushBack< C >
 Helper. More...
 
class  gtsam::RefCallPushBack< C >
 Helper. More...
 
class  gtsam::CRefCallAddCopy< C >
 Helper. More...
 
class  gtsam::FactorGraph< FACTOR >
 A factor graph is a bipartite graph with factor nodes connected to variable nodes. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Factor Graph Base Class.

\n-
Author
Carlos Nieto
\n-
\n-Christian Potthast
\n-
\n-Michael Kaess
\n-
\n-Richard Roberts
\n+
Author
Richard Roberts
\n+
Date
March 26, 2013
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,38 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-FactorGraph.h File Reference\n-Factor Graph Base Class. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk_\b<_\b _\bC_\b _\b>\n-\u00a0 Helper. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk_\b<_\b _\bC_\b _\b>\n-\u00a0 Helper. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bA_\bd_\bd_\bC_\bo_\bp_\by_\b<_\b _\bC_\b _\b>\n-\u00a0 Helper. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bF_\bA_\bC_\bT_\bO_\bR_\b _\b>\n-\u00a0 A factor graph is a bipartite graph with factor nodes connected to\n- variable nodes. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+VariableIndex.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor Graph Base Class.\n Author\n- Carlos Nieto\n- Christian Potthast\n- Michael Kaess\n Richard Roberts\n+ Date\n+ March 26, 2013\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00578_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00578_source.html", "unified_diff": "@@ -113,17 +113,17 @@\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9 * -------------------------------------------------------------------------- */
\n
10
\n
17#pragma once
\n
18
\n-\n-\n-
21#include <gtsam/base/timing.h>
\n+\n+\n+
21#include <gtsam/base/timing.h>
\n
22
\n
23namespace gtsam {
\n
24
\n
25 /* ************************************************************************* */
\n
26 template<class DERIVED, class FACTORGRAPH>
\n \n \n \n \n \n \n \n-
Timing utilities.
\n-
Base class for cliques of a BayesTree.
\n-
Factor Graph Base Class.
\n+
Timing utilities.
\n+
Factor Graph Base Class.
\n+
Base class for cliques of a BayesTree.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n \n
Template to create a binary predicate.
Definition Testable.h:111
\n
A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.
Definition DiscreteFactorGraph.h:101
\n
size_t treeSize() const
The size of subtree rooted at this clique, i.e., nr of Cliques.
Definition BayesTreeCliqueBase-inst.h:84
\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -244,18 +244,18 @@\n 221 }\n 222\n 223 }\n 224\n 225}\n _\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n Timing utilities.\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n-Base class for cliques of a BayesTree.\n _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh\n Factor Graph Base Class.\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n+Base class for cliques of a BayesTree.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00581.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00581.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/DotWriter.h File Reference\n \n \n \n \n \n \n \n@@ -94,34 +94,45 @@\n \n \n \n \n \n
\n \n-
Ordering.cpp File Reference
\n+
DotWriter.h File Reference
\n
\n
\n+\n+

Graphviz formatter. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::DotWriter
 DotWriter is a helper class for writing graphviz .dot files. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
\n-Andrew Melim
\n-
Date
Sep 2, 2010
\n+

Graphviz formatter.

\n+
Author
Frank Dellaert
\n+
Date
December, 2021
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Ordering.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DotWriter.h File Reference\n+Graphviz formatter. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n+\u00a0 _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br is a helper class for writing graphviz .dot files. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Graphviz formatter.\n Author\n- Richard Roberts\n- Andrew Melim\n+ Frank Dellaert\n Date\n- Sep 2, 2010\n+ December, 2021\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bc_\bp_\bp\n+ * _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00587.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00587.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminationTree-inst.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,51 @@\n \n \n \n \n \n
\n \n-
EliminationTree-inst.h File Reference
\n+
Ordering.h File Reference
\n
\n
\n \n+

Variable ordering for the elimination algorithm. \n+More...

\n+\n

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Ordering
 
struct  gtsam::traits< Ordering >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Frank Dellaert
\n+

Variable ordering for the elimination algorithm.

\n+
Author
Richard Roberts
\n+
\n+Andrew Melim
\n
\n-Richard Roberts
\n-
Date
Oct 13, 2010
\n+Frank Dellaert
\n+
Date
Sep 2, 2010
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-EliminationTree-inst.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Ordering.h File Reference\n+Variable ordering for the elimination algorithm. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Variable ordering for the elimination algorithm.\n Author\n- Frank Dellaert\n Richard Roberts\n+ Andrew Melim\n+ Frank Dellaert\n Date\n- Oct 13, 2010\n+ Sep 2, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00587_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00587_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminationTree-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.h Source File\n \n \n \n \n \n \n \n@@ -98,363 +98,255 @@\n
No Matches
\n \n \n \n \n \n
\n-
EliminationTree-inst.h
\n+
Ordering.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4* Atlanta, Georgia 30332-0415
\n-
5* All Rights Reserved
\n-
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8* See LICENSE for the license information
\n+
8 * See LICENSE for the license information
\n
9
\n-
10* -------------------------------------------------------------------------- */
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <boost/make_shared.hpp>
\n-
21#include <stack>
\n+
21#pragma once
\n
22
\n-
23#include <gtsam/base/timing.h>
\n-\n-\n-\n-\n-\n-
29
\n-
30namespace gtsam {
\n+
23#include <gtsam/inference/Key.h>
\n+\n+\n+
26#include <gtsam/base/FastSet.h>
\n+
27
\n+
28#include <boost/assign/list_inserter.hpp>
\n+
29#include <algorithm>
\n+
30#include <vector>
\n
31
\n-
32 /* ************************************************************************* */
\n-
33 template<class BAYESNET, class GRAPH>
\n-\n-
35 EliminationTree<BAYESNET,GRAPH>::Node::eliminate(
\n-
36 const boost::shared_ptr<BayesNetType>& output,
\n-
37 const Eliminate& function, const FastVector<sharedFactor>& childrenResults) const
\n-
38 {
\n-
39 // This function eliminates one node (Node::eliminate) - see below eliminate for the whole tree.
\n-
40
\n-
41 assert(childrenResults.size() == children.size());
\n-
42
\n-
43 // Gather factors
\n-
44 FactorGraphType gatheredFactors;
\n-
45 gatheredFactors.reserve(factors.size() + children.size());
\n-
46 gatheredFactors.push_back(factors.begin(), factors.end());
\n-
47 gatheredFactors.push_back(childrenResults.begin(), childrenResults.end());
\n-
48
\n-
49 // Do dense elimination step
\n-
50 KeyVector keyAsVector(1); keyAsVector[0] = key;
\n-
51 auto eliminationResult = function(gatheredFactors, Ordering(keyAsVector));
\n-
52
\n-
53 // Add conditional to BayesNet
\n-
54 output->push_back(eliminationResult.first);
\n-
55
\n-
56 // Return result
\n-
57 return eliminationResult.second;
\n-
58 }
\n-
59
\n-
60 /* ************************************************************************* */
\n-
61 template<class BAYESNET, class GRAPH>
\n-
62 void EliminationTree<BAYESNET,GRAPH>::Node::print(
\n-
63 const std::string& str, const KeyFormatter& keyFormatter) const
\n-
64 {
\n-
65 std::cout << str << "(" << keyFormatter(key) << ")\\n";
\n-
66 for(const sharedFactor& factor: factors) {
\n-
67 if(factor)
\n-
68 factor->print(str);
\n-
69 else
\n-
70 std::cout << str << "null factor\\n";
\n-
71 }
\n-
72 }
\n-
73
\n-
74
\n-
75 /* ************************************************************************* */
\n-
76 template<class BAYESNET, class GRAPH>
\n-
\n-\n-
78 const VariableIndex& structure, const Ordering& order)
\n-
79 {
\n-
80 gttic(EliminationTree_Contructor);
\n-
81
\n-
82 // Number of factors and variables - NOTE in the case of partial elimination, n here may
\n-
83 // be fewer variables than are actually present in the graph.
\n-
84 const size_t m = graph.size();
\n-
85 const size_t n = order.size();
\n-
86
\n-
87 static const size_t none = std::numeric_limits<size_t>::max();
\n-
88
\n-
89 // Allocate result parent vector and vector of last factor columns
\n-\n-
91 FastVector<size_t> parents(n, none);
\n-
92 FastVector<size_t> prevCol(m, none);
\n-
93 FastVector<bool> factorUsed(m, false);
\n-
94
\n-
95 try {
\n-
96 // for column j \\in 1 to n do
\n-
97 for (size_t j = 0; j < n; j++)
\n-
98 {
\n-
99 // Retrieve the factors involving this variable and create the current node
\n-
\n-
100 const FactorIndices& factors = structure[order[j]];
\n-
101 const sharedNode node = boost::make_shared<Node>();
\n-
102 node->key = order[j];
\n-
103
\n-
104 // for row i \\in Struct[A*j] do
\n-
105 node->children.reserve(factors.size());
\n-
106 node->factors.reserve(factors.size());
\n-
107 for(const size_t i: factors) {
\n-
\n-
108 // If we already hit a variable in this factor, make the subtree containing the previous
\n-
109 // variable in this factor a child of the current node. This means that the variables
\n-
110 // eliminated earlier in the factor depend on the later variables in the factor. If we
\n-
111 // haven't yet hit a variable in this factor, we add the factor to the current node.
\n-
112 // TODO: Store root shortcuts instead of parents.
\n-
113 if (prevCol[i] != none) {
\n-
114 size_t k = prevCol[i];
\n-
115 // Find root r of the current tree that contains k. Use raw pointers in computing the
\n-
\n-
116 // parents to avoid changing the reference counts while traversing up the tree.
\n-
117 size_t r = k;
\n-
118 while (parents[r] != none)
\n-
119 r = parents[r];
\n-
120 // If the root of the subtree involving this node is actually the current node,
\n-
121 // TODO: what does this mean? forest?
\n-
122 if (r != j) {
\n-
123 // Now that we found the root, hook up parent and child pointers in the nodes.
\n-
124 parents[r] = j;
\n-
125 node->children.push_back(nodes[r]);
\n-
126 }
\n-
127 } else {
\n-
128 // Add the factor to the current node since we are at the first variable in this factor.
\n-
129 node->factors.push_back(graph[i]);
\n-
\n-
130 factorUsed[i] = true;
\n-
131 }
\n-
132 prevCol[i] = j;
\n-
133 }
\n-
134 nodes[j] = node;
\n-
135 }
\n-
136 } catch(std::invalid_argument& e) {
\n-
\n-
137 // If this is thrown from structure[order[j]] above, it means that it was requested to
\n-
138 // eliminate a variable not present in the graph, so throw a more informative error message.
\n-
139 (void)e; // Prevent unused variable warning
\n-
140 throw std::invalid_argument("EliminationTree: given ordering contains variables that are not involved in the factor graph");
\n-
141 } catch(...) {
\n-
\n-
142 throw;
\n-
143 }
\n-
144
\n-
145 // Find roots
\n-
146 assert(parents.empty() || parents.back() == none); // We expect the last-eliminated node to be a root no matter what
\n-
147 for(size_t j = 0; j < n; ++j)
\n-
148 if(parents[j] == none)
\n-
149 roots_.push_back(nodes[j]);
\n-
150
\n-
151 // Gather remaining factors (exclude null factors)
\n-
152 for(size_t i = 0; i < m; ++i)
\n-
153 if(!factorUsed[i] && graph[i])
\n-
154 remainingFactors_.push_back(graph[i]);
\n-
155 }
\n-
156
\n-
\n-
157 /* ************************************************************************* */
\n-
158 template<class BAYESNET, class GRAPH>
\n-
\n-\n-
160 const FactorGraphType& factorGraph, const Ordering& order)
\n-
161 {
\n-
162 gttic(ET_Create2);
\n-
163 // Build variable index first
\n-
164 const VariableIndex variableIndex(factorGraph);
\n-
165 This temp(factorGraph, variableIndex, order);
\n-
166 this->swap(temp); // Swap in the tree, and temp will be deleted
\n-
167 }
\n-
\n-
168
\n-
169 /* ************************************************************************* */
\n-
170 template<class BAYESNET, class GRAPH>
\n-\n-
\n-\n-
173 {
\n-
174 // Start by duplicating the tree.
\n-\n-
176
\n-
177 // Assign the remaining factors - these are pointers to factors in the original factor graph and
\n-
178 // we do not clone them.
\n-
179 remainingFactors_ = other.remainingFactors_;
\n-
180
\n-
181 return *this;
\n-
182 }
\n-
\n-
183
\n-
184 /* ************************************************************************* */
\n-
185 template<class BAYESNET, class GRAPH>
\n-
186 std::pair<boost::shared_ptr<BAYESNET>, boost::shared_ptr<GRAPH> >
\n-
\n-\n-
188 {
\n-
189 gttic(EliminationTree_eliminate);
\n-
190 // Allocate result
\n-
191 auto result = boost::make_shared<BayesNetType>();
\n-
192
\n-
193 // Run tree elimination algorithm
\n-
194 FastVector<sharedFactor> remainingFactors = inference::EliminateTree(result, *this, function);
\n-
195
\n-
196 // Add remaining factors that were not involved with eliminated variables
\n-
197 auto allRemainingFactors = boost::make_shared<FactorGraphType>();
\n-
198 allRemainingFactors->push_back(remainingFactors_.begin(), remainingFactors_.end());
\n-
199 allRemainingFactors->push_back(remainingFactors.begin(), remainingFactors.end());
\n-
200
\n-
201 // Return result
\n-
202 return std::make_pair(result, allRemainingFactors);
\n-
203 }
\n+
32namespace gtsam {
\n+
33
\n+
\n+
34class Ordering: public KeyVector {
\n+
35protected:
\n+
36 typedef KeyVector Base;
\n+
37
\n+
38public:
\n+
39
\n+
\n+\n+
42 COLAMD, METIS, NATURAL, CUSTOM
\n+
43 };
\n+
\n+
44
\n+
45 typedef Ordering This;
\n+
46 typedef boost::shared_ptr<This> shared_ptr;
\n+
47
\n+
49 GTSAM_EXPORT
\n+
\n+\n+
51 }
\n
\n+
52
\n+
53 using KeyVector::KeyVector; // Inherit the KeyVector's constructors
\n+
54
\n+
56 template<typename KEYS>
\n+
\n+
57 explicit Ordering(const KEYS& keys) :
\n+
58 Base(keys.begin(), keys.end()) {
\n+
59 }
\n+
\n+
60
\n+
\n+
63 boost::assign::list_inserter<boost::assign_detail::call_push_back<This> > operator+=(
\n+
64 Key key) {
\n+
65 return boost::assign::make_list_inserter(
\n+
66 boost::assign_detail::call_push_back<This>(*this))(key);
\n+
67 }
\n+
\n+
68
\n+\n+
76
\n+
78 bool contains(const Key& key) const;
\n+
79
\n+\n+
87
\n+
90
\n+
94 template<class FACTOR_GRAPH>
\n+
\n+
95 static Ordering Colamd(const FACTOR_GRAPH& graph) {
\n+
96 if (graph.empty())
\n+
97 return Ordering();
\n+
98 else
\n+
99 return Colamd(VariableIndex(graph));
\n+
100 }
\n+
\n+
101
\n+
103 static GTSAM_EXPORT Ordering Colamd(const VariableIndex& variableIndex);
\n+
104
\n+
113 template<class FACTOR_GRAPH>
\n+
\n+
114 static Ordering ColamdConstrainedLast(const FACTOR_GRAPH& graph,
\n+
115 const KeyVector& constrainLast, bool forceOrder = false) {
\n+
116 if (graph.empty())
\n+
117 return Ordering();
\n+
118 else
\n+
119 return ColamdConstrainedLast(VariableIndex(graph), constrainLast, forceOrder);
\n+
120 }
\n+
\n+
121
\n+
128 static GTSAM_EXPORT Ordering ColamdConstrainedLast(
\n+
129 const VariableIndex& variableIndex, const KeyVector& constrainLast,
\n+
130 bool forceOrder = false);
\n+
131
\n+
140 template<class FACTOR_GRAPH>
\n+
\n+
141 static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH& graph,
\n+
142 const KeyVector& constrainFirst, bool forceOrder = false) {
\n+
143 if (graph.empty())
\n+
144 return Ordering();
\n+
145 else
\n+
146 return ColamdConstrainedFirst(VariableIndex(graph), constrainFirst, forceOrder);
\n+
147 }
\n+
\n+
148
\n+
156 static GTSAM_EXPORT Ordering ColamdConstrainedFirst(
\n+
157 const VariableIndex& variableIndex,
\n+
158 const KeyVector& constrainFirst, bool forceOrder = false);
\n+
159
\n+
169 template<class FACTOR_GRAPH>
\n+
\n+
170 static Ordering ColamdConstrained(const FACTOR_GRAPH& graph,
\n+
171 const FastMap<Key, int>& groups) {
\n+
172 if (graph.empty())
\n+
173 return Ordering();
\n+
174 else
\n+
175 return ColamdConstrained(VariableIndex(graph), groups);
\n+
176 }
\n+
\n+
177
\n+
185 static GTSAM_EXPORT Ordering ColamdConstrained(
\n+
186 const VariableIndex& variableIndex, const FastMap<Key, int>& groups);
\n+
187
\n+
189 template<class FACTOR_GRAPH>
\n+
\n+
190 static Ordering Natural(const FACTOR_GRAPH &fg) {
\n+
191 KeySet src = fg.keys();
\n+
192 KeyVector keys(src.begin(), src.end());
\n+
193 std::stable_sort(keys.begin(), keys.end());
\n+
194 return Ordering(keys.begin(), keys.end());
\n+
195 }
\n+
\n+
196
\n+
198 template<class FACTOR_GRAPH>
\n+
199 static GTSAM_EXPORT void CSRFormat(std::vector<int>& xadj,
\n+
200 std::vector<int>& adj, const FACTOR_GRAPH& graph);
\n+
201
\n+
203 static GTSAM_EXPORT Ordering Metis(const MetisIndex& met);
\n
204
\n-
205 /* ************************************************************************* */
\n-
206 template<class BAYESNET, class GRAPH>
\n-
\n-
207 void EliminationTree<BAYESNET,GRAPH>::print(const std::string& name, const KeyFormatter& formatter) const
\n-
208 {
\n-
209 treeTraversal::PrintForest(*this, name, formatter);
\n-
210 }
\n-
\n-
211
\n-
212 /* ************************************************************************* */
\n-
213 template<class BAYESNET, class GRAPH>
\n-
\n-
214 bool EliminationTree<BAYESNET,GRAPH>::equals(const This& expected, double tol) const
\n-
215 {
\n-
216 // Depth-first-traversal stacks
\n-
217 std::stack<sharedNode, FastVector<sharedNode> > stack1, stack2;
\n-
218
\n-
219 // Add roots in sorted order
\n-
220 {
\n-\n-
222 for(const sharedNode& root: this->roots_) { keys.insert(std::make_pair(root->key, root)); }
\n-
223 typedef typename FastMap<Key,sharedNode>::value_type Key_Node;
\n-
224 for(const Key_Node& key_node: keys) { stack1.push(key_node.second); }
\n-
225 }
\n-
226 {
\n-\n-
228 for(const sharedNode& root: expected.roots_) { keys.insert(std::make_pair(root->key, root)); }
\n-
229 typedef typename FastMap<Key,sharedNode>::value_type Key_Node;
\n-
230 for(const Key_Node& key_node: keys) { stack2.push(key_node.second); }
\n-
231 }
\n-
232
\n-
233 // Traverse, adding children in sorted order
\n-
234 while(!stack1.empty() && !stack2.empty()) {
\n-
235 // Pop nodes
\n-
236 sharedNode node1 = stack1.top();
\n-
237 stack1.pop();
\n-
238 sharedNode node2 = stack2.top();
\n-
239 stack2.pop();
\n-
240
\n-
241 // Compare nodes
\n-
242 if(node1->key != node2->key)
\n-
243 return false;
\n-
244 if(node1->factors.size() != node2->factors.size()) {
\n-
245 return false;
\n-
246 } else {
\n-
247 for(typename Node::Factors::const_iterator it1 = node1->factors.begin(), it2 = node2->factors.begin();
\n-
248 it1 != node1->factors.end(); ++it1, ++it2) // Only check it1 == end because we already returned false for different counts
\n-
249 {
\n-
250 if(*it1 && *it2) {
\n-
251 if(!(*it1)->equals(**it2, tol))
\n-
252 return false;
\n-
253 } else if((*it1 && !*it2) || (*it2 && !*it1)) {
\n-
254 return false;
\n-
255 }
\n-
256 }
\n-
257 }
\n+
205 template<class FACTOR_GRAPH>
\n+
206 static Ordering Metis(const FACTOR_GRAPH& graph) {
\n+
207 if (graph.empty())
\n+
208 return Ordering();
\n+
209 else
\n+
210 return Metis(MetisIndex(graph));
\n+
211 }
\n+
212
\n+
214
\n+
217
\n+
218 template<class FACTOR_GRAPH>
\n+
219 static Ordering Create(OrderingType orderingType,
\n+
220 const FACTOR_GRAPH& graph) {
\n+
221 if (graph.empty())
\n+
222 return Ordering();
\n+
223
\n+
224 switch (orderingType) {
\n+
225 case COLAMD:
\n+
226 return Colamd(graph);
\n+
227 case METIS:
\n+
228 return Metis(graph);
\n+
229 case NATURAL:
\n+
230 return Natural(graph);
\n+
231 case CUSTOM:
\n+
232 throw std::runtime_error(
\n+
233 "Ordering::Create error: called with CUSTOM ordering type.");
\n+
234 default:
\n+
235 throw std::runtime_error(
\n+
236 "Ordering::Create error: called with unknown ordering type.");
\n+
237 }
\n+
238 }
\n+
239
\n+
241
\n+
244
\n+
245 GTSAM_EXPORT
\n+
246 void print(const std::string& str = "", const KeyFormatter& keyFormatter =
\n+
247 DefaultKeyFormatter) const;
\n+
248
\n+
249 GTSAM_EXPORT
\n+
250 bool equals(const Ordering& other, double tol = 1e-9) const;
\n+
251
\n+
253
\n+
254private:
\n+
256 static GTSAM_EXPORT Ordering ColamdConstrained(
\n+
257 const VariableIndex& variableIndex, std::vector<int>& cmember);
\n
258
\n-
259 // Add children in sorted order
\n-
260 {
\n-\n-
262 for(const sharedNode& node: node1->children) { keys.insert(std::make_pair(node->key, node)); }
\n-
263 typedef typename FastMap<Key,sharedNode>::value_type Key_Node;
\n-
264 for(const Key_Node& key_node: keys) { stack1.push(key_node.second); }
\n-
265 }
\n-
266 {
\n-\n-
268 for(const sharedNode& node: node2->children) { keys.insert(std::make_pair(node->key, node)); }
\n-
269 typedef typename FastMap<Key,sharedNode>::value_type Key_Node;
\n-
270 for(const Key_Node& key_node: keys) { stack2.push(key_node.second); }
\n-
271 }
\n-
272 }
\n-
273
\n-
274 // If either stack is not empty, the number of nodes differed
\n-
275 if(!stack1.empty() || !stack2.empty())
\n-
276 return false;
\n-
277
\n-
278 return true;
\n-
279 }
\n-
\n-
280
\n-
281 /* ************************************************************************* */
\n-
282 template<class BAYESNET, class GRAPH>
\n-
\n-\n-
284 roots_.swap(other.roots_);
\n-
285 remainingFactors_.swap(other.remainingFactors_);
\n-
286 }
\n-
\n-
\n-
287
\n-
288
\n-
289}
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
Timing utilities.
\n-\n-
Contains generic inference algorithms that convert between templated graphical models,...
\n+\n+
261 template<class ARCHIVE>
\n+
262 void serialize(ARCHIVE & ar, const unsigned int version) {
\n+
263 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
264 }
\n+
265};
\n+
\n+
266
\n+
\n+
268template<> struct traits<Ordering> : public Testable<Ordering> {
\n+
269};
\n+
\n+
270
\n+
271}
\n+
272
\n+
A thin wrapper around std::set that uses boost's fast_pool_allocator.
\n \n-\n-
Variable ordering for the elimination algorithm.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const FOREST &forest)
Clone a tree, copy-constructing new nodes (calling boost::make_shared) and setting up child pointers ...
Definition treeTraversal-inst.h:189
\n-
void PrintForest(const FOREST &forest, std::string str, const KeyFormatter &keyFormatter)
Print a tree, prefixing each line with str, and formatting keys using keyFormatter.
Definition treeTraversal-inst.h:219
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n-
bool equals(const This &other, double tol=1e-9) const
Test whether the tree is equal to another.
Definition EliminationTree-inst.h:214
\n-
void print(const std::string &name="EliminationTree: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
Print the tree to cout.
Definition EliminationTree-inst.h:207
\n-
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminate(Eliminate function) const
Eliminate the factors to a Bayes net and remaining factor graph.
Definition EliminationTree-inst.h:187
\n-
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition EliminationTree-inst.h:172
\n-
FastVector< sharedNode > roots_
concept check
Definition EliminationTree.h:86
\n-
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition EliminationTree.h:60
\n-
GRAPH FactorGraphType
The factor graph type.
Definition EliminationTree.h:58
\n-
void swap(This &other)
Swap the data of this tree with another one, this operation is very fast.
Definition EliminationTree-inst.h:283
\n-
EliminationTree()
Protected default constructor.
Definition EliminationTree.h:161
\n-
boost::shared_ptr< Node > sharedNode
Shared pointer to Node.
Definition EliminationTree.h:80
\n-
const FastVector< sharedFactor > & remainingFactors() const
Return the remaining factors that are not pulled into elimination.
Definition EliminationTree.h:154
\n-
Key key
key associated with root
Definition EliminationTree.h:70
\n-
Children children
sub-trees
Definition EliminationTree.h:72
\n-
Factors factors
factors associated with root
Definition EliminationTree.h:71
\n+\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
The MetisIndex class converts a factor graph into the Compressed Sparse Row format for use in METIS a...
Definition MetisIndex.h:45
\n
Definition Ordering.h:34
\n+
static Ordering Natural(const FACTOR_GRAPH &fg)
Return a natural Ordering. Typically used by iterative solvers.
Definition Ordering.h:190
\n+
static Ordering ColamdConstrained(const FACTOR_GRAPH &graph, const FastMap< Key, int > &groups)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:170
\n+
Ordering(const KEYS &keys)
Create from a container.
Definition Ordering.h:57
\n+
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:95
\n+
OrderingType
Type of ordering to use.
Definition Ordering.h:41
\n+
static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const KeyVector &constrainLast, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:114
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition Ordering.h:46
\n+
boost::assign::list_inserter< boost::assign_detail::call_push_back< This > > operator+=(Key key)
Add new variables to the ordering as ordering += key1, key2, ... Equivalent to calling push_back.
Definition Ordering.h:63
\n+
static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const KeyVector &constrainFirst, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:141
\n+
GTSAM_EXPORT Ordering()
Create an empty ordering.
Definition Ordering.h:50
\n+
static GTSAM_EXPORT Ordering Metis(const MetisIndex &met)
Compute an ordering determined by METIS from a VariableIndex.
Definition Ordering.cpp:212
\n+
FastMap< Key, size_t > invert() const
Invert (not reverse) the ordering - returns a map from key to order position.
Definition Ordering.cpp:36
\n+
friend class boost::serialization::access
Serialization function.
Definition Ordering.h:260
\n+
Ordering This
Typedef to this class.
Definition Ordering.h:45
\n+
bool contains(const Key &key) const
Check if key exists in ordering.
Definition Ordering.cpp:293
\n+
static GTSAM_EXPORT void CSRFormat(std::vector< int > &xadj, std::vector< int > &adj, const FACTOR_GRAPH &graph)
METIS Formatting function.
\n
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,449 +1,312 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-EliminationTree-inst.h\n+Ordering.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4* Atlanta, Georgia 30332-0415\n-5* All Rights Reserved\n-6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8* See LICENSE for the license information\n+8 * See LICENSE for the license information\n 9\n-10* -------------------------------------------------------------------------\n+10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include \n-21#include \n+21#pragma once\n 22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh>\n+27\n+28#include \n+29#include \n+30#include \n 31\n-32 /* *************************************************************************\n-*/\n-33 template\n-34 typename _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-35 EliminationTree::Node::eliminate(\n-36 const boost::shared_ptr& output,\n-37 const Eliminate& function, const FastVector& childrenResults)\n-const\n-38 {\n-39 // This function eliminates one node (Node::eliminate) - see below eliminate\n-for the whole tree.\n-40\n-41 assert(childrenResults.size() == _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn.size());\n-42\n-43 // Gather factors\n-44 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be gatheredFactors;\n-45 gatheredFactors.reserve(_\bf_\ba_\bc_\bt_\bo_\br_\bs.size() + _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn.size());\n-46 gatheredFactors.push_back(_\bf_\ba_\bc_\bt_\bo_\br_\bs.begin(), _\bf_\ba_\bc_\bt_\bo_\br_\bs.end());\n-47 gatheredFactors.push_back(childrenResults.begin(), childrenResults.end());\n-48\n-49 // Do dense elimination step\n-50 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keyAsVector(1); keyAsVector[0] = _\bk_\be_\by;\n-51 auto eliminationResult = function(gatheredFactors, Ordering(keyAsVector));\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+_\b3_\b4class _\bO_\br_\bd_\be_\br_\bi_\bn_\bg: public _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br {\n+35protected:\n+36 typedef _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br Base;\n+37\n+38public:\n+39\n+_\b4_\b1 enum _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be {\n+42 COLAMD, METIS, NATURAL, CUSTOM\n+43 };\n+44\n+_\b4_\b5 typedef _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bT_\bh_\bi_\bs;\n+_\b4_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+47\n+49 GTSAM_EXPORT\n+_\b5_\b0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg() {\n+51 }\n 52\n-53 // Add conditional to BayesNet\n-54 output->push_back(eliminationResult.first);\n-55\n-56 // Return result\n-57 return eliminationResult.second;\n-58 }\n-59\n-60 /* *************************************************************************\n-*/\n-61 template\n-62 void EliminationTree::Node::print(\n-63 const std::string& str, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const\n-64 {\n-65 std::cout << str << \"(\" << keyFormatter(key) << \")\\n\";\n-66 for(const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor: factors) {\n-67 if(factor)\n-68 factor->print(str);\n-69 else\n-70 std::cout << str << \"null factor\\n\";\n-71 }\n-72 }\n-73\n-74\n-75 /* *************************************************************************\n-*/\n-76 template\n-_\b7_\b7 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be&\n-graph,\n-78 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order)\n-79 {\n-80 gttic(EliminationTree_Contructor);\n-81\n-82 // Number of factors and variables - NOTE in the case of partial\n-elimination, n here may\n-83 // be fewer variables than are actually present in the graph.\n-84 const size_t m = graph.size();\n-85 const size_t n = order.size();\n-86\n-87 static const size_t none = std::numeric_limits::max();\n-88\n-89 // Allocate result parent vector and vector of last factor columns\n-90 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> nodes(n);\n-91 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b> parents(n, none);\n-92 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b> prevCol(m, none);\n-93 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bo_\bo_\bl_\b> factorUsed(m, false);\n-94\n-95 try {\n-96 // for column j \\in 1 to n do\n-97 for (size_t j = 0; j < n; j++)\n-98 {\n-99 // Retrieve the factors involving this variable and create the current node\n-_\b1_\b0_\b0 const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& factors = structure[order[j]];\n-101 const _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be node = boost::make_shared();\n-102 node->key = order[j];\n-103\n-104 // for row i \\in Struct[A*j] do\n-105 node->children.reserve(factors.size());\n-106 node->factors.reserve(factors.size());\n-107 for(const size_t i: factors) {\n-_\b1_\b0_\b8 // If we already hit a variable in this factor, make the subtree containing\n-the previous\n-109 // variable in this factor a child of the current node. This means that the\n-variables\n-110 // eliminated earlier in the factor depend on the later variables in the\n-factor. If we\n-111 // haven't yet hit a variable in this factor, we add the factor to the\n-current node.\n-112 // TODO: Store root shortcuts instead of parents.\n-113 if (prevCol[i] != none) {\n-114 size_t k = prevCol[i];\n-115 // Find root r of the current tree that contains k. Use raw pointers in\n-computing the\n-_\b1_\b1_\b6 // parents to avoid changing the reference counts while traversing up the\n-tree.\n-117 size_t r = k;\n-118 while (parents[r] != none)\n-119 r = parents[r];\n-120 // If the root of the subtree involving this node is actually the current\n-node,\n-121 // TODO: what does this mean? forest?\n-122 if (r != j) {\n-123 // Now that we found the root, hook up parent and child pointers in the\n-nodes.\n-124 parents[r] = j;\n-125 node->children.push_back(nodes[r]);\n-126 }\n-127 } else {\n-128 // Add the factor to the current node since we are at the first variable in\n-this factor.\n-129 node->factors.push_back(graph[i]);\n-_\b1_\b3_\b0 factorUsed[i] = true;\n-131 }\n-132 prevCol[i] = j;\n-133 }\n-134 nodes[j] = node;\n-135 }\n-136 } catch(std::invalid_argument& e) {\n-_\b1_\b3_\b7 // If this is thrown from structure[order[j]] above, it means that it was\n-requested to\n-138 // eliminate a variable not present in the graph, so throw a more\n-informative error message.\n-139 (void)e; // Prevent unused variable warning\n-140 throw std::invalid_argument(\"EliminationTree: given ordering contains\n-variables that are not involved in the factor graph\");\n-141 } catch(...) {\n-_\b1_\b4_\b2 throw;\n-143 }\n-144\n-145 // Find roots\n-146 assert(parents.empty() || parents.back() == none); // We expect the last-\n-eliminated node to be a root no matter what\n-147 for(size_t j = 0; j < n; ++j)\n-148 if(parents[j] == none)\n-149 _\br_\bo_\bo_\bt_\bs_\b_.push_back(nodes[j]);\n-150\n-151 // Gather remaining factors (exclude null factors)\n-152 for(size_t i = 0; i < m; ++i)\n-153 if(!factorUsed[i] && graph[i])\n-154 remainingFactors_.push_back(graph[i]);\n-155 }\n-156\n-_\b1_\b5_\b7 /\n-* ************************************************************************* */\n-158 template\n-_\b1_\b5_\b9 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(\n-160 const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factorGraph, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order)\n-161 {\n-162 gttic(ET_Create2);\n-163 // Build variable index first\n-164 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex(factorGraph);\n-165 _\bT_\bh_\bi_\bs temp(factorGraph, variableIndex, order);\n-166 this->_\bs_\bw_\ba_\bp(temp); // Swap in the tree, and temp will be deleted\n-167 }\n-168\n-169 /\n-* ************************************************************************* */\n-170 template\n-171 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>&\n-_\b1_\b7_\b2 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>& other)\n-173 {\n-174 // Start by duplicating the tree.\n-175 _\br_\bo_\bo_\bt_\bs_\b_ = _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt(other);\n-176\n-177 // Assign the remaining factors - these are pointers to factors in the\n-original factor graph and\n-178 // we do not clone them.\n-179 remainingFactors_ = other.remainingFactors_;\n-180\n-181 return *this;\n-182 }\n-183\n-184 /\n-* ************************************************************************* */\n-185 template\n-186 std::pair, boost::shared_ptr >\n-_\b1_\b8_\b7 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(Eliminate function) const\n-188 {\n-189 gttic(EliminationTree_eliminate);\n-190 // Allocate result\n-191 auto result = boost::make_shared();\n-192\n-193 // Run tree elimination algorithm\n-194 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b> _\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs = inference::EliminateTree\n-(result, *this, function);\n-195\n-196 // Add remaining factors that were not involved with eliminated variables\n-197 auto allRemainingFactors = boost::make_shared();\n-198 allRemainingFactors->push_back(remainingFactors_.begin(),\n-remainingFactors_.end());\n-199 allRemainingFactors->push_back(_\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs.begin(),\n-_\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs.end());\n-200\n-201 // Return result\n-202 return std::make_pair(result, allRemainingFactors);\n-203 }\n+53 using KeyVector::KeyVector; // Inherit the KeyVector's constructors\n+54\n+56 template\n+_\b5_\b7 explicit _\bO_\br_\bd_\be_\br_\bi_\bn_\bg(const KEYS& keys) :\n+58 Base(keys.begin(), keys.end()) {\n+59 }\n+60\n+_\b6_\b3 boost::assign::list_inserter >\n+_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(\n+64 _\bK_\be_\by key) {\n+65 return boost::assign::make_list_inserter(\n+66 boost::assign_detail::call_push_back(*this))(key);\n+67 }\n+68\n+75 _\bT_\bh_\bi_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys);\n+76\n+78 bool _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(const _\bK_\be_\by& key) const;\n+79\n+86 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bs_\bi_\bz_\be_\b__\bt_\b> _\bi_\bn_\bv_\be_\br_\bt() const;\n+87\n+90\n+94 template\n+_\b9_\b5 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd(const FACTOR_GRAPH& graph) {\n+96 if (graph.empty())\n+97 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n+98 else\n+99 return _\bC_\bo_\bl_\ba_\bm_\bd(_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx(graph));\n+100 }\n+101\n+103 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd(const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& variableIndex);\n+104\n+113 template\n+_\b1_\b1_\b4 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(const FACTOR_GRAPH& graph,\n+115 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& constrainLast, bool forceOrder = false) {\n+116 if (graph.empty())\n+117 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n+118 else\n+119 return _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx(graph), constrainLast,\n+forceOrder);\n+120 }\n+121\n+128 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(\n+129 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& variableIndex, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& constrainLast,\n+130 bool forceOrder = false);\n+131\n+140 template\n+_\b1_\b4_\b1 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt(const FACTOR_GRAPH& graph,\n+142 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& constrainFirst, bool forceOrder = false) {\n+143 if (graph.empty())\n+144 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n+145 else\n+146 return _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt(_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx(graph), constrainFirst,\n+forceOrder);\n+147 }\n+148\n+156 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt(\n+157 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& variableIndex,\n+158 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& constrainFirst, bool forceOrder = false);\n+159\n+169 template\n+_\b1_\b7_\b0 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(const FACTOR_GRAPH& graph,\n+171 const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bi_\bn_\bt_\b>& groups) {\n+172 if (graph.empty())\n+173 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n+174 else\n+175 return _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx(graph), groups);\n+176 }\n+177\n+185 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(\n+186 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& variableIndex, const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bi_\bn_\bt_\b>& groups);\n+187\n+189 template\n+_\b1_\b9_\b0 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bN_\ba_\bt_\bu_\br_\ba_\bl(const FACTOR_GRAPH &fg) {\n+191 _\bK_\be_\by_\bS_\be_\bt src = fg.keys();\n+192 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keys(src.begin(), src.end());\n+193 std::stable_sort(keys.begin(), keys.end());\n+194 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg(keys.begin(), keys.end());\n+195 }\n+196\n+198 template\n+_\b1_\b9_\b9 static GTSAM_EXPORT void _\bC_\bS_\bR_\bF_\bo_\br_\bm_\ba_\bt(std::vector& xadj,\n+200 std::vector& adj, const FACTOR_GRAPH& graph);\n+201\n+203 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bM_\be_\bt_\bi_\bs(const _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx& met);\n 204\n-205 /\n-* ************************************************************************* */\n-206 template\n-_\b2_\b0_\b7 void _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& name, const\n-_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter) const\n-208 {\n-209 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt(*this, name, formatter);\n-210 }\n-211\n-212 /\n-* ************************************************************************* */\n-213 template\n-_\b2_\b1_\b4 bool _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& expected, double\n-tol) const\n-215 {\n-216 // Depth-first-traversal stacks\n-217 std::stack > stack1, stack2;\n-218\n-219 // Add roots in sorted order\n-220 {\n-221 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> keys;\n-222 for(const _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be& root: this->_\br_\bo_\bo_\bt_\bs_\b_) { keys.insert(std::make_pair\n-(root->key, root)); }\n-223 typedef typename _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be Key_Node;\n-224 for(const Key_Node& key_node: keys) { stack1.push(key_node.second); }\n-225 }\n-226 {\n-227 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> keys;\n-228 for(const _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be& root: expected._\br_\bo_\bo_\bt_\bs_\b_) { keys.insert(std::make_pair\n-(root->key, root)); }\n-229 typedef typename _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be Key_Node;\n-230 for(const Key_Node& key_node: keys) { stack2.push(key_node.second); }\n-231 }\n-232\n-233 // Traverse, adding children in sorted order\n-234 while(!stack1.empty() && !stack2.empty()) {\n-235 // Pop nodes\n-236 _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be node1 = stack1.top();\n-237 stack1.pop();\n-238 _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be node2 = stack2.top();\n-239 stack2.pop();\n-240\n-241 // Compare nodes\n-242 if(node1->key != node2->key)\n-243 return false;\n-244 if(node1->factors.size() != node2->factors.size()) {\n-245 return false;\n-246 } else {\n-247 for(typename Node::Factors::const_iterator it1 = node1->factors.begin(),\n-it2 = node2->factors.begin();\n-248 it1 != node1->factors.end(); ++it1, ++it2) // Only check it1 == end because\n-we already returned false for different counts\n-249 {\n-250 if(*it1 && *it2) {\n-251 if(!(*it1)->equals(**it2, tol))\n-252 return false;\n-253 } else if((*it1 && !*it2) || (*it2 && !*it1)) {\n-254 return false;\n-255 }\n-256 }\n-257 }\n+205 template\n+206 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bM_\be_\bt_\bi_\bs(const FACTOR_GRAPH& graph) {\n+207 if (graph.empty())\n+208 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n+209 else\n+210 return _\bM_\be_\bt_\bi_\bs(_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx(graph));\n+211 }\n+212\n+214\n+217\n+218 template\n+219 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg Create(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType,\n+220 const FACTOR_GRAPH& graph) {\n+221 if (graph.empty())\n+222 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n+223\n+224 switch (orderingType) {\n+225 case COLAMD:\n+226 return _\bC_\bo_\bl_\ba_\bm_\bd(graph);\n+227 case METIS:\n+228 return _\bM_\be_\bt_\bi_\bs(graph);\n+229 case NATURAL:\n+230 return _\bN_\ba_\bt_\bu_\br_\ba_\bl(graph);\n+231 case CUSTOM:\n+232 throw std::runtime_error(\n+233 \"Ordering::Create error: called with CUSTOM ordering type.\");\n+234 default:\n+235 throw std::runtime_error(\n+236 \"Ordering::Create error: called with unknown ordering type.\");\n+237 }\n+238 }\n+239\n+241\n+244\n+245 GTSAM_EXPORT\n+246 void print(const std::string& str = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+247 DefaultKeyFormatter) const;\n+248\n+249 GTSAM_EXPORT\n+250 bool equals(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& other, double tol = 1e-9) const;\n+251\n+253\n+254private:\n+256 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(\n+257 const VariableIndex& variableIndex, std::vector& cmember);\n 258\n-259 // Add children in sorted order\n-260 {\n-261 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> keys;\n-262 for(const _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be& node: node1->children) { keys.insert(std::make_pair\n-(node->key, node)); }\n-263 typedef typename _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be Key_Node;\n-264 for(const Key_Node& key_node: keys) { stack1.push(key_node.second); }\n-265 }\n-266 {\n-267 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> keys;\n-268 for(const _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be& node: node2->children) { keys.insert(std::make_pair\n-(node->key, node)); }\n-269 typedef typename _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be Key_Node;\n-270 for(const Key_Node& key_node: keys) { stack2.push(key_node.second); }\n-271 }\n-272 }\n-273\n-274 // If either stack is not empty, the number of nodes differed\n-275 if(!stack1.empty() || !stack2.empty())\n-276 return false;\n-277\n-278 return true;\n-279 }\n-280\n-281 /\n-* ************************************************************************* */\n-282 template\n-_\b2_\b8_\b3 void _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bs_\bw_\ba_\bp(_\bT_\bh_\bi_\bs& other) {\n-284 _\br_\bo_\bo_\bt_\bs_\b_.swap(other._\br_\bo_\bo_\bt_\bs_\b_);\n-285 remainingFactors_.swap(other.remainingFactors_);\n-286 }\n-287\n-288\n-289}\n-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\n-_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n-_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n-Contains generic inference algorithms that convert between templated graphical\n-models,...\n+_\b2_\b6_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+261 template\n+262 void serialize(ARCHIVE & ar, const unsigned int version) {\n+263 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n+264 }\n+265};\n+266\n+_\b2_\b6_\b8template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bO_\br_\bd_\be_\br_\bi_\bn_\bg> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+269};\n+270\n+271}\n+272\n+_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n+A thin wrapper around std::set that uses boost's fast_pool_allocator.\n _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+_\bK_\be_\by_\b._\bh\n+_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-FastVector< FactorIndex > FactorIndices\n-Define collection types:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt\n-FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const\n-FOREST &forest)\n-Clone a tree, copy-constructing new nodes (calling boost::make_shared) and\n-setting up child pointers ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt\n-void PrintForest(const FOREST &forest, std::string str, const KeyFormatter\n-&keyFormatter)\n-Print a tree, prefixing each line with str, and formatting keys using\n-keyFormatter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n FastMap is a thin wrapper around std::map that uses the boost\n fast_pool_allocator instead of the defa...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-An elimination tree is a data structure used intermediately during elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-Test whether the tree is equal to another.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:214\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &name=\"EliminationTree: \", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-Print the tree to cout.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr<\n-FactorGraphType > > eliminate(Eliminate function) const\n-Eliminate the factors to a Bayes net and remaining factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:187\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-This & operator=(const This &other)\n-Assignment operator - makes a deep copy of the tree structure, but only\n-pointers to factors are copie...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:172\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs_\b_\n-FastVector< sharedNode > roots_\n-concept check\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< FactorType > sharedFactor\n-Shared pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n-GRAPH FactorGraphType\n-The factor graph type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bw_\ba_\bp\n-void swap(This &other)\n-Swap the data of this tree with another one, this operation is very fast.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:283\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-EliminationTree()\n-Protected default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b,_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be\n-boost::shared_ptr< Node > sharedNode\n-Shared pointer to Node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-const FastVector< sharedFactor > & remainingFactors() const\n-Return the remaining factors that are not pulled into elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bk_\be_\by\n-Key key\n-key associated with root\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n-Children children\n-sub-trees\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs\n-Factors factors\n-factors associated with root\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx\n+The MetisIndex class converts a factor graph into the Compressed Sparse Row\n+format for use in METIS a...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MetisIndex.h:45\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bN_\ba_\bt_\bu_\br_\ba_\bl\n+static Ordering Natural(const FACTOR_GRAPH &fg)\n+Return a natural Ordering. Typically used by iterative solvers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:190\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n+static Ordering ColamdConstrained(const FACTOR_GRAPH &graph, const FastMap<\n+Key, int > &groups)\n+Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n+(see details for note o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:170\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+Ordering(const KEYS &keys)\n+Create from a container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd\n+static Ordering Colamd(const FACTOR_GRAPH &graph)\n+Compute a fill-reducing ordering using COLAMD from a factor graph (see details\n+for note on performanc...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be\n+OrderingType\n+Type of ordering to use.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt\n+static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const\n+KeyVector &constrainLast, bool forceOrder=false)\n+Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n+(see details for note o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n+boost::assign::list_inserter< boost::assign_detail::call_push_back< This > >\n+operator+=(Key key)\n+Add new variables to the ordering as ordering += key1, key2, ... Equivalent to\n+calling push_back.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt\n+static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const\n+KeyVector &constrainFirst, bool forceOrder=false)\n+Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n+(see details for note o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+GTSAM_EXPORT Ordering()\n+Create an empty ordering.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bM_\be_\bt_\bi_\bs\n+static GTSAM_EXPORT Ordering Metis(const MetisIndex &met)\n+Compute an ordering determined by METIS from a VariableIndex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.cpp:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt\n+FastMap< Key, size_t > invert() const\n+Invert (not reverse) the ordering - returns a map from key to order position.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.cpp:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bT_\bh_\bi_\bs\n+Ordering This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs\n+bool contains(const Key &key) const\n+Check if key exists in ordering.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.cpp:293\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bS_\bR_\bF_\bo_\br_\bm_\ba_\bt\n+static GTSAM_EXPORT void CSRFormat(std::vector< int > &xadj, std::vector< int >\n+&adj, const FACTOR_GRAPH &graph)\n+METIS Formatting function.\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n The VariableIndex class computes and stores the block column structure of a\n factor graph.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00590.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00590.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Symbol.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminateableFactorGraph.h File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,48 @@\n \n \n \n \n \n
\n \n-
Symbol.cpp File Reference
\n+Classes |\n+Namespaces
\n+
EliminateableFactorGraph.h File Reference
\n \n
\n+\n+

Variable elimination algorithms for factor graphs. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::EliminationTraits< GRAPH >
 Traits class for eliminateable factor graphs, specifies the types that result from elimination, etc. More...
 
class  gtsam::EliminateableFactorGraph< FACTOR_GRAPH >
 EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Functions

\n-GTSAM_EXPORT std::ostream & gtsam::operator<< (std::ostream &os, const Symbol &symbol)
 
\n

Detailed Description

\n-
Date
June 9, 2012
\n-
Author
: Frank Dellaert
\n-
\n-: Richard Roberts
\n+

Variable elimination algorithms for factor graphs.

\n+
Author
Richard Roberts
\n+
Date
Apr 21, 2013
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Symbol.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+EliminateableFactorGraph.h File Reference\n+Variable elimination algorithms for factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>\n+\u00a0 Traits class for eliminateable factor graphs, specifies the types that\n+ result from elimination, etc. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bF_\bA_\bC_\bT_\bO_\bR_\b__\bG_\bR_\bA_\bP_\bH_\b _\b>\n+\u00a0 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh is a base class for factor graphs that\n+ contains elimination algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-GTSAM_EXPORT std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bS_\by_\bm_\bb_\bo_\bl\n- &_\bs_\by_\bm_\bb_\bo_\bl)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- June 9, 2012\n+Variable elimination algorithms for factor graphs.\n Author\n- : Frank Dellaert\n- : Richard Roberts\n+ Richard Roberts\n+ Date\n+ Apr 21, 2013\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bS_\by_\bm_\bb_\bo_\bl_\b._\bc_\bp_\bp\n+ * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00593.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00593.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h File Reference\n \n \n \n \n \n \n \n@@ -95,56 +95,52 @@\n \n \n \n \n
\n \n-
Factor.h File Reference
\n+Namespaces
\n+
BayesTree.h File Reference
\n \n
\n \n-

The base class for all factors. \n+

Bayes Tree is a tree of cliques of a Bayes Chain. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::Factor
struct  gtsam::BayesTreeCliqueStats
 clique statistics More...
 
struct  gtsam::BayesTreeCliqueData
 store all the sizes
\n+ More...
 
class  gtsam::BayesTree< CLIQUE >
 Bayes tree. More...
 
class  gtsam::BayesTreeOrphanWrapper< CLIQUE, typename >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n

\n-Typedefs

typedef FastVector< FactorIndexgtsam::FactorIndices
 Define collection types:
 
\n-typedef FastSet< FactorIndexgtsam::FactorIndexSet
 
\n

Detailed Description

\n-

The base class for all factors.

\n-
Author
Kai Ni
\n-
\n-Frank Dellaert
\n-
\n-Richard Roberts
\n+

Bayes Tree is a tree of cliques of a Bayes Chain.

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,34 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-Factor.h File Reference\n-The base class for all factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+BayesTree.h File Reference\n+Bayes Tree is a tree of cliques of a Bayes Chain. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bS_\bt_\ba_\bt_\bs\n+\u00a0 clique statistics _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba\n+\u00a0 store all the sizes\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\b _\bC_\bL_\bI_\bQ_\bU_\bE_\b _\b>\n+\u00a0 Bayes tree. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bC_\bL_\bI_\bQ_\bU_\bE_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br< _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-\u00a0 Define collection types:\n-\u00a0\n- typedef _\bF_\ba_\bs_\bt_\bS_\be_\bt< _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:F\bFa\bac\bct\bto\bor\brI\bIn\bnd\bde\bex\bxS\bSe\bet\bt\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-The base class for all factors.\n+Bayes Tree is a tree of cliques of a Bayes Chain.\n Author\n- Kai Ni\n Frank Dellaert\n- Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00593.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00593.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,5 @@\n var a00593 = [\n- [\"gtsam::Factor\", \"a03592.html\", \"a03592\"],\n- [\"FactorIndices\", \"a00593.html#a99e63c90a8ac740d99716e73fe97e054\", null]\n+ [\"gtsam::BayesTreeCliqueStats\", \"a03532.html\", null],\n+ [\"gtsam::BayesTreeCliqueData\", \"a03536.html\", null],\n+ [\"gtsam::BayesTreeOrphanWrapper< CLIQUE, typename >\", \"a03544.html\", \"a03544\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00593_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00593_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h Source File\n \n \n \n \n \n \n \n@@ -98,183 +98,295 @@\n
No Matches
\n \n \n \n \n \n
\n-
Factor.h
\n+
BayesTree.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20// \\callgraph
\n+
18// \\callgraph
\n+
19
\n+
20#pragma once
\n
21
\n-
22#pragma once
\n+
22#include <boost/shared_ptr.hpp>
\n
23
\n-
24#include <boost/serialization/nvp.hpp>
\n-
25#include <boost/shared_ptr.hpp>
\n-
26
\n-
27#include <gtsam/base/types.h>
\n-\n-
29#include <gtsam/inference/Key.h>
\n+
24#include <gtsam/inference/Key.h>
\n+
25#include <gtsam/base/FastList.h>
\n+
26#include <gtsam/base/ConcurrentMap.h>
\n+\n+
28
\n+
29#include <string>
\n
30
\n
31namespace gtsam {
\n
32
\n-\n-
35 typedef FastSet<FactorIndex> FactorIndexSet;
\n+
33 // Forward declarations
\n+
34 template<class FACTOR> class FactorGraph;
\n+
35 template<class BAYESTREE, class GRAPH> class EliminatableClusterTree;
\n
36
\n-
37 class HybridValues; // forward declaration of a Value type for error.
\n-
38
\n-
\n-
67 class GTSAM_EXPORT Factor
\n-
68 {
\n-
69
\n-
70 private:
\n-
71 // These typedefs are private because they must be overridden in derived classes.
\n-
72 typedef Factor This;
\n-
73 typedef boost::shared_ptr<Factor> shared_ptr;
\n-
74
\n-
75 public:
\n-
77 typedef KeyVector::iterator iterator;
\n-
78
\n-
80 typedef KeyVector::const_iterator const_iterator;
\n-
81
\n-
82 protected:
\n-
83
\n-\n-
86
\n-
89
\n-
91 Factor() {}
\n-
92
\n-
95 template<typename CONTAINER>
\n-
96 explicit Factor(const CONTAINER& keys) : keys_(keys.begin(), keys.end()) {}
\n-
97
\n-
100 template<typename ITERATOR>
\n-
101 Factor(ITERATOR first, ITERATOR last) : keys_(first, last) {}
\n-
102
\n-
105 template<typename CONTAINER>
\n-
\n-
106 static Factor FromKeys(const CONTAINER& keys) {
\n-
107 return Factor(keys.begin(), keys.end()); }
\n-
\n-
108
\n-
111 template<typename ITERATOR>
\n-
\n-
112 static Factor FromIterators(ITERATOR first, ITERATOR last) {
\n-
113 return Factor(first, last); }
\n-
\n-
114
\n-
116
\n-
117 public:
\n-
119 // public since it is required for boost serialization and static methods.
\n-
120 // virtual since it is public.
\n-
121 // http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-dtor-virtual
\n-
122 virtual ~Factor() = default;
\n-
123
\n-
126
\n-
128 bool empty() const { return keys_.empty(); }
\n-
129
\n-
131 Key front() const { return keys_.front(); }
\n-
132
\n-
134 Key back() const { return keys_.back(); }
\n-
135
\n-
137 const_iterator find(Key key) const { return std::find(begin(), end(), key); }
\n-
138
\n-
140 const KeyVector& keys() const { return keys_; }
\n+
37 /* ************************************************************************* */
\n+
\n+
39 struct GTSAM_EXPORT BayesTreeCliqueStats {
\n+
40 double avgConditionalSize;
\n+
41 std::size_t maxConditionalSize;
\n+
42 double avgSeparatorSize;
\n+
43 std::size_t maxSeparatorSize;
\n+
44 void print(const std::string& s = "") const ;
\n+
45 };
\n+
\n+
46
\n+
\n+
48 struct GTSAM_EXPORT BayesTreeCliqueData {
\n+
49 FastVector<std::size_t> conditionalSizes;
\n+
50 FastVector<std::size_t> separatorSizes;
\n+
51 BayesTreeCliqueStats getStats() const;
\n+
52 };
\n+
\n+
53
\n+
54 /* ************************************************************************* */
\n+
65 template<class CLIQUE>
\n+
\n+\n+
67 {
\n+
68 protected:
\n+
69 typedef BayesTree<CLIQUE> This;
\n+
70 typedef boost::shared_ptr<This> shared_ptr;
\n+
71
\n+
72 public:
\n+
73 typedef CLIQUE Clique;
\n+
74 typedef boost::shared_ptr<Clique> sharedClique;
\n+
75 typedef Clique Node;
\n+\n+
77 typedef typename CLIQUE::ConditionalType ConditionalType;
\n+
78 typedef boost::shared_ptr<ConditionalType> sharedConditional;
\n+
79 typedef typename CLIQUE::BayesNetType BayesNetType;
\n+
80 typedef boost::shared_ptr<BayesNetType> sharedBayesNet;
\n+
81 typedef typename CLIQUE::FactorType FactorType;
\n+
82 typedef boost::shared_ptr<FactorType> sharedFactor;
\n+
83 typedef typename CLIQUE::FactorGraphType FactorGraphType;
\n+
84 typedef boost::shared_ptr<FactorGraphType> sharedFactorGraph;
\n+
85 typedef typename FactorGraphType::Eliminate Eliminate;
\n+
86 typedef typename CLIQUE::EliminationTraitsType EliminationTraitsType;
\n+
87
\n+\n+
90
\n+\n+
93
\n+\n+
96
\n+
97 protected:
\n+
98
\n+\n+
101
\n+\n+
104
\n+
107
\n+\n+
110
\n+
112 BayesTree(const This& other);
\n+
113
\n+
115
\n+
117 This& operator=(const This& other);
\n+
118
\n+
121
\n+
123 bool equals(const This& other, double tol = 1e-9) const;
\n+
124
\n+
125 public:
\n+
127 void print(const std::string& s = "",
\n+
128 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
130
\n+
133
\n+
135 size_t size() const;
\n+
136
\n+
\n+
138 inline bool empty() const {
\n+
139 return nodes_.empty();
\n+
140 }
\n+
\n
141
\n-
143 const_iterator begin() const { return keys_.begin(); }
\n+
143 const Nodes& nodes() const { return nodes_; }
\n
144
\n-
146 const_iterator end() const { return keys_.end(); }
\n+
146 sharedClique operator[](Key j) const { return nodes_.at(j); }
\n
147
\n-
152 virtual double error(const HybridValues& c) const;
\n-
153
\n-
157 size_t size() const { return keys_.size(); }
\n-
158
\n-
160
\n-
163
\n-
165 virtual void print(
\n-
166 const std::string& s = "Factor",
\n-
167 const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n-
168
\n-
170 virtual void printKeys(
\n-
171 const std::string& s = "Factor",
\n-
172 const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n-
173
\n-
175 bool equals(const This& other, double tol = 1e-9) const;
\n-
176
\n-
180
\n-
182 KeyVector& keys() { return keys_; }
\n-
183
\n-
185 iterator begin() { return keys_.begin(); }
\n-
186
\n-
188 iterator end() { return keys_.end(); }
\n-
189
\n-
191
\n-
192 private:
\n-
193
\n-
196
\n-
198 friend class boost::serialization::access;
\n-
199 template<class Archive>
\n-
200 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
201 ar & BOOST_SERIALIZATION_NVP(keys_);
\n-
202 }
\n-
203
\n-
205
\n-
206 };
\n-
\n-
207
\n-
208} // \\namespace gtsam
\n-
Typedefs for easier changing of types.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-\n+
149 const Roots& roots() const { return roots_; }
\n+
150
\n+
\n+
152 const sharedClique& clique(Key j) const {
\n+
153 typename Nodes::const_iterator c = nodes_.find(j);
\n+
154 if(c == nodes_.end())
\n+
155 throw std::out_of_range("Requested the BayesTree clique for a key that is not in the BayesTree");
\n+
156 else
\n+
157 return c->second;
\n+
158 }
\n+
\n+
159
\n+\n+
162
\n+
164 size_t numCachedSeparatorMarginals() const;
\n+
165
\n+
171 sharedConditional marginalFactor(Key j, const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
\n+
172
\n+
177 sharedFactorGraph joint(Key j1, Key j2, const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
\n+
178
\n+
183 sharedBayesNet jointBayesNet(Key j1, Key j2, const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
\n+
184
\n+
187
\n+
189 void dot(std::ostream& os, const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
190
\n+
192 std::string dot(
\n+
193 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
194
\n+
196 void saveGraph(const std::string& filename,
\n+
197 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
198
\n+
202
\n+
207 template<class CONTAINER>
\n+
208 Key findParentClique(const CONTAINER& parents) const;
\n+
209
\n+
211 void clear();
\n+
212
\n+\n+
215
\n+
220 void removePath(sharedClique clique, BayesNetType* bn, Cliques* orphans);
\n+
221
\n+
226 void removeTop(const KeyVector& keys, BayesNetType* bn, Cliques* orphans);
\n+
227
\n+
230 Cliques removeSubtree(const sharedClique& subtree);
\n+
231
\n+
235 void insertRoot(const sharedClique& subtree);
\n+
236
\n+
238 void addClique(const sharedClique& clique, const sharedClique& parent_clique = sharedClique());
\n+
239
\n+\n+
242
\n+
243 protected:
\n+
244
\n+
246 void dot(std::ostream &s, sharedClique clique, const KeyFormatter& keyFormatter,
\n+
247 int parentnum = 0) const;
\n+
248
\n+\n+
251
\n+\n+
254
\n+
256 void fillNodesIndex(const sharedClique& subtree);
\n+
257
\n+
258 // Friend JunctionTree because it directly fills roots and nodes index.
\n+
259 template<class BAYESTREE, class GRAPH> friend class EliminatableClusterTree;
\n+
260
\n+
261 private:
\n+\n+
264 template<class ARCHIVE>
\n+
265 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
266 ar & BOOST_SERIALIZATION_NVP(nodes_);
\n+
267 ar & BOOST_SERIALIZATION_NVP(roots_);
\n+
268 }
\n+
269
\n+
271
\n+
272 }; // BayesTree
\n+
\n+
273
\n+
274 /* ************************************************************************* */
\n+
275 template <class CLIQUE, typename = void>
\n+
\n+
276 class BayesTreeOrphanWrapper : public CLIQUE::ConditionalType {
\n+
277 public:
\n+
278 typedef CLIQUE CliqueType;
\n+
279 typedef typename CLIQUE::ConditionalType Base;
\n+
280
\n+
281 boost::shared_ptr<CliqueType> clique;
\n+
282
\n+
\n+
293 BayesTreeOrphanWrapper(const boost::shared_ptr<CliqueType>& clique)
\n+
294 : clique(clique) {
\n+
295 this->keys_.assign(clique->conditional()->beginParents(),
\n+
296 clique->conditional()->endParents());
\n+
297 }
\n+
\n+
298
\n+
299 void print(
\n+
300 const std::string& s = "",
\n+
301 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n+
302 clique->print(s + "stored clique", formatter);
\n+
303 }
\n+
304 };
\n+
\n+
305
\n+
306}
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n+\n
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
FastSet is a thin wrapper around std::set that uses the boost fast_pool_allocator instead of the defa...
Definition FastSet.h:50
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition ConcurrentMap.h:68
\n+
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Factor.h:68
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
const_iterator find(Key key) const
find
Definition Factor.h:137
\n-
const_iterator begin() const
Iterator at beginning of involved variable keys.
Definition Factor.h:143
\n-
Factor()
Default constructor for I/O.
Definition Factor.h:91
\n-
iterator end()
Iterator at end of involved variable keys.
Definition Factor.h:188
\n-
bool empty() const
Whether the factor is empty (involves zero variables).
Definition Factor.h:128
\n-
KeyVector & keys()
Definition Factor.h:182
\n-
static Factor FromIterators(ITERATOR first, ITERATOR last)
Construct factor from iterator keys.
Definition Factor.h:112
\n-
static Factor FromKeys(const CONTAINER &keys)
Construct factor from container of keys.
Definition Factor.h:106
\n-
iterator begin()
Iterator at beginning of involved variable keys.
Definition Factor.h:185
\n-
virtual ~Factor()=default
Default destructor.
\n-
Factor(ITERATOR first, ITERATOR last)
Construct factor from iterator keys.
Definition Factor.h:101
\n-
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n-
const_iterator end() const
Iterator at end of involved variable keys.
Definition Factor.h:146
\n-
Factor(const CONTAINER &keys)
Construct factor from container of keys.
Definition Factor.h:96
\n-
KeyVector::iterator iterator
Iterator over keys.
Definition Factor.h:77
\n-
Key back() const
Last key.
Definition Factor.h:134
\n-
Key front() const
First key.
Definition Factor.h:131
\n-
size_t size() const
Definition Factor.h:157
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
A cluster-tree that eliminates to a Bayes tree.
Definition ClusterTree.h:184
\n+
clique statistics
Definition BayesTree.h:39
\n+
store all the sizes
Definition BayesTree.h:48
\n+
Bayes tree.
Definition BayesTree.h:67
\n+
Nodes nodes_
Map from indices to Clique.
Definition BayesTree.h:100
\n+
void removeClique(sharedClique clique)
remove a clique: warning, can result in a forest
Definition BayesTree-inst.h:424
\n+
sharedFactorGraph joint(Key j1, Key j2, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
return joint on two variables Limitation: can only calculate joint if cliques are disjoint or one of ...
Definition BayesTree-inst.h:293
\n+
void fillNodesIndex(const sharedClique &subtree)
Fill the nodes index for a subtree.
Definition BayesTree-inst.h:246
\n+
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Output to graphviz format, stream version.
Definition BayesTree-inst.h:64
\n+
void addFactorsToGraph(FactorGraph< FactorType > *graph) const
Add all cliques in this BayesTree to the specified factor graph.
Definition BayesTree-inst.h:168
\n+
sharedClique operator[](Key j) const
Access node by variable.
Definition BayesTree.h:146
\n+
This & operator=(const This &other)
Assignment operator.
Definition BayesTree-inst.h:199
\n+
boost::shared_ptr< Clique > sharedClique
Shared pointer to a clique.
Definition BayesTree.h:74
\n+
BayesTree()
Create an empty Bayes Tree.
Definition BayesTree.h:109
\n+
Clique Node
Synonym for Clique (TODO: remove)
Definition BayesTree.h:75
\n+
void clear()
Remove all nodes.
Definition BayesTree-inst.h:408
\n+
Roots roots_
Root cliques.
Definition BayesTree.h:103
\n+
void addClique(const sharedClique &clique, const sharedClique &parent_clique=sharedClique())
add a clique (top down)
Definition BayesTree-inst.h:142
\n+
sharedBayesNet jointBayesNet(Key j1, Key j2, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
return joint on two variables as a BayesNet Limitation: can only calculate joint if cliques are disjo...
Definition BayesTree-inst.h:302
\n+
sharedClique sharedNode
Synonym for sharedClique (TODO: remove)
Definition BayesTree.h:76
\n+
Key findParentClique(const CONTAINER &parents) const
Find parent clique of a conditional.
Definition BayesTree-inst.h:238
\n+
size_t size() const
number of cliques
Definition BayesTree-inst.h:133
\n+
void deleteCachedShortcuts()
Clear all shortcut caches - use before timing on marginal calculation to avoid residual cache data.
Definition BayesTree-inst.h:416
\n+
void removePath(sharedClique clique, BayesNetType *bn, Cliques *orphans)
Remove path from clique to root and return that path as factors plus a list of orphaned subtree roots...
Definition BayesTree-inst.h:448
\n+
const Nodes & nodes() const
Return nodes.
Definition BayesTree.h:143
\n+
FastList< sharedClique > Cliques
A convenience class for a list of shared cliques.
Definition BayesTree.h:89
\n+
CLIQUE Clique
The clique type, normally BayesTreeClique.
Definition BayesTree.h:73
\n+
sharedConditional marginalFactor(Key j, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
Return marginal on any variable.
Definition BayesTree-inst.h:270
\n+
const Roots & roots() const
return root cliques
Definition BayesTree.h:149
\n+
const sharedClique & clique(Key j) const
alternate syntax for matlab: find the clique that contains the variable with Key j
Definition BayesTree.h:152
\n+
ConcurrentMap< Key, sharedClique > Nodes
Map from keys to Clique.
Definition BayesTree.h:92
\n+
friend class boost::serialization::access
Serialization function.
Definition BayesTree.h:263
\n+
size_t numCachedSeparatorMarginals() const
Collect number of cliques with cached separator marginals.
Definition BayesTree-inst.h:55
\n+
BayesTreeCliqueData getCliqueData() const
Gather data on all cliques.
Definition BayesTree-inst.h:35
\n+
Cliques removeSubtree(const sharedClique &subtree)
Remove the requested subtree.
Definition BayesTree-inst.h:496
\n+
bool empty() const
Check if there are any cliques in the tree.
Definition BayesTree.h:138
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition BayesTree-inst.h:212
\n+
void insertRoot(const sharedClique &subtree)
Insert a new subtree with known parent clique.
Definition BayesTree-inst.h:260
\n+
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
output to file with graphviz format.
Definition BayesTree-inst.h:85
\n+
void removeTop(const KeyVector &keys, BayesNetType *bn, Cliques *orphans)
Given a list of indices, turn "contaminated" part of the tree back into a factor graph.
Definition BayesTree-inst.h:475
\n+
FastVector< sharedClique > Roots
Root cliques.
Definition BayesTree.h:95
\n+
Definition BayesTree.h:276
\n+
BayesTreeOrphanWrapper(const boost::shared_ptr< CliqueType > &clique)
Construct a new Bayes Tree Orphan Wrapper object.
Definition BayesTree.h:293
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,145 +1,235 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Factor.h\n+BayesTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20// \\callgraph\n+18// \\callgraph\n+19\n+20#pragma once\n 21\n-22#pragma once\n+22#include \n 23\n-24#include \n-25#include \n-26\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n+26#include \n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+28\n+29#include \n 30\n 31namespace _\bg_\bt_\bs_\ba_\bm {\n 32\n-_\b3_\b4 typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx_\b> _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n-35 typedef _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx_\b> FactorIndexSet;\n+33 // Forward declarations\n+34 template class FactorGraph;\n+35 template class EliminatableClusterTree;\n 36\n-37 class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs; // forward declaration of a Value type for error.\n-38\n-_\b6_\b7 class GTSAM_EXPORT _\bF_\ba_\bc_\bt_\bo_\br\n-68 {\n-69\n-70 private:\n-71 // These typedefs are private because they must be overridden in derived\n-classes.\n-72 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-73 typedef boost::shared_ptr shared_ptr;\n-74\n-75 public:\n-_\b7_\b7 typedef KeyVector::iterator _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-78\n-_\b8_\b0 typedef KeyVector::const_iterator _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-81\n-82 protected:\n-83\n-_\b8_\b5 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bk_\be_\by_\bs_\b_;\n-86\n-89\n-_\b9_\b1 _\bF_\ba_\bc_\bt_\bo_\br() {}\n-92\n-95 template\n-_\b9_\b6 explicit _\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER& keys) : keys_(keys.begin(), keys.end()) {}\n-97\n-100 template\n-_\b1_\b0_\b1 _\bF_\ba_\bc_\bt_\bo_\br(ITERATOR first, ITERATOR last) : keys_(first, last) {}\n-102\n-105 template\n-_\b1_\b0_\b6 static _\bF_\ba_\bc_\bt_\bo_\br _\bF_\br_\bo_\bm_\bK_\be_\by_\bs(const CONTAINER& keys) {\n-107 return _\bF_\ba_\bc_\bt_\bo_\br(keys.begin(), keys.end()); }\n-108\n-111 template\n-_\b1_\b1_\b2 static _\bF_\ba_\bc_\bt_\bo_\br _\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs(ITERATOR first, ITERATOR last) {\n-113 return _\bF_\ba_\bc_\bt_\bo_\br(first, last); }\n-114\n-116\n-117 public:\n-119 // public since it is required for boost serialization and static methods.\n-120 // virtual since it is public.\n-121 // http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-dtor-\n-virtual\n-_\b1_\b2_\b2 virtual _\b~_\bF_\ba_\bc_\bt_\bo_\br() = default;\n-123\n-126\n-_\b1_\b2_\b8 bool _\be_\bm_\bp_\bt_\by() const { return keys_.empty(); }\n-129\n-_\b1_\b3_\b1 _\bK_\be_\by _\bf_\br_\bo_\bn_\bt() const { return keys_.front(); }\n-132\n-_\b1_\b3_\b4 _\bK_\be_\by _\bb_\ba_\bc_\bk() const { return keys_.back(); }\n-135\n-_\b1_\b3_\b7 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bf_\bi_\bn_\bd(_\bK_\be_\by key) const { return std::find(begin(), end(), key);\n-}\n-138\n-_\b1_\b4_\b0 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs() const { return keys_; }\n+37 /* *************************************************************************\n+*/\n+_\b3_\b9 struct GTSAM_EXPORT _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bS_\bt_\ba_\bt_\bs {\n+40 double avgConditionalSize;\n+41 std::size_t maxConditionalSize;\n+42 double avgSeparatorSize;\n+43 std::size_t maxSeparatorSize;\n+44 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const ;\n+45 };\n+46\n+_\b4_\b8 struct GTSAM_EXPORT _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba {\n+49 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\b> conditionalSizes;\n+50 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\b> separatorSizes;\n+51 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bS_\bt_\ba_\bt_\bs getStats() const;\n+52 };\n+53\n+54 /* *************************************************************************\n+*/\n+65 template\n+_\b6_\b6 class _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+67 {\n+68 protected:\n+69 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b> _\bT_\bh_\bi_\bs;\n+70 typedef boost::shared_ptr shared_ptr;\n+71\n+72 public:\n+_\b7_\b3 typedef CLIQUE _\bC_\bl_\bi_\bq_\bu_\be;\n+_\b7_\b4 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be;\n+_\b7_\b5 typedef _\bC_\bl_\bi_\bq_\bu_\be _\bN_\bo_\bd_\be;\n+_\b7_\b6 typedef _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be;\n+77 typedef typename CLIQUE::ConditionalType ConditionalType;\n+78 typedef boost::shared_ptr sharedConditional;\n+79 typedef typename CLIQUE::BayesNetType BayesNetType;\n+80 typedef boost::shared_ptr sharedBayesNet;\n+81 typedef typename CLIQUE::FactorType FactorType;\n+82 typedef boost::shared_ptr sharedFactor;\n+83 typedef typename CLIQUE::FactorGraphType FactorGraphType;\n+84 typedef boost::shared_ptr sharedFactorGraph;\n+85 typedef typename FactorGraphType::Eliminate Eliminate;\n+86 typedef typename CLIQUE::EliminationTraitsType EliminationTraitsType;\n+87\n+_\b8_\b9 typedef _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bC_\bl_\bi_\bq_\bu_\be_\bs;\n+90\n+_\b9_\b2 typedef _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bN_\bo_\bd_\be_\bs;\n+93\n+_\b9_\b5 typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bR_\bo_\bo_\bt_\bs;\n+96\n+97 protected:\n+98\n+_\b1_\b0_\b0 _\bN_\bo_\bd_\be_\bs _\bn_\bo_\bd_\be_\bs_\b_;\n+101\n+_\b1_\b0_\b3 _\bR_\bo_\bo_\bt_\bs _\br_\bo_\bo_\bt_\bs_\b_;\n+104\n+107\n+_\b1_\b0_\b9 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() {}\n+110\n+112 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(const This& other);\n+113\n+115\n+117 This& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const This& other);\n+118\n+121\n+123 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n+124\n+125 public:\n+127 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+128 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+130\n+133\n+135 size_t _\bs_\bi_\bz_\be() const;\n+136\n+_\b1_\b3_\b8 inline bool _\be_\bm_\bp_\bt_\by() const {\n+139 return _\bn_\bo_\bd_\be_\bs_\b_.empty();\n+140 }\n 141\n-_\b1_\b4_\b3 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const { return keys_.begin(); }\n+_\b1_\b4_\b3 const _\bN_\bo_\bd_\be_\bs& _\bn_\bo_\bd_\be_\bs() const { return _\bn_\bo_\bd_\be_\bs_\b_; }\n 144\n-_\b1_\b4_\b6 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const { return keys_.end(); }\n+_\b1_\b4_\b6 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bK_\be_\by j) const { return _\bn_\bo_\bd_\be_\bs_\b_.at(j); }\n 147\n-152 virtual double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-153\n-_\b1_\b5_\b7 size_t _\bs_\bi_\bz_\be() const { return keys_.size(); }\n-158\n-160\n-163\n-165 virtual void _\bp_\br_\bi_\bn_\bt(\n-166 const std::string& s = \"Factor\",\n-167 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const;\n-168\n-170 virtual void printKeys(\n-171 const std::string& s = \"Factor\",\n-172 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const;\n-173\n-175 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n-176\n-180\n-_\b1_\b8_\b2 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs() { return keys_; }\n-183\n-_\b1_\b8_\b5 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() { return keys_.begin(); }\n-186\n-_\b1_\b8_\b8 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() { return keys_.end(); }\n-189\n-191\n-192 private:\n-193\n-196\n-_\b1_\b9_\b8 friend class boost::serialization::access;\n-199 template\n-200 void serialize(Archive & ar, const unsigned int /*version*/) {\n-201 ar & BOOST_SERIALIZATION_NVP(keys_);\n-202 }\n-203\n-205\n-206 };\n-207\n-208} // \\namespace gtsam\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n+_\b1_\b4_\b9 const _\bR_\bo_\bo_\bt_\bs& _\br_\bo_\bo_\bt_\bs() const { return _\br_\bo_\bo_\bt_\bs_\b_; }\n+150\n+_\b1_\b5_\b2 const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& _\bc_\bl_\bi_\bq_\bu_\be(_\bK_\be_\by j) const {\n+153 typename Nodes::const_iterator c = _\bn_\bo_\bd_\be_\bs_\b_.find(j);\n+154 if(c == _\bn_\bo_\bd_\be_\bs_\b_.end())\n+155 throw std::out_of_range(\"Requested the BayesTree clique for a key that is\n+not in the BayesTree\");\n+156 else\n+157 return c->second;\n+158 }\n+159\n+161 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba _\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba() const;\n+162\n+164 size_t _\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs() const;\n+165\n+171 sharedConditional _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j, const Eliminate& function =\n+EliminationTraitsType::DefaultEliminate) const;\n+172\n+177 sharedFactorGraph _\bj_\bo_\bi_\bn_\bt(_\bK_\be_\by j1, _\bK_\be_\by j2, const Eliminate& function =\n+EliminationTraitsType::DefaultEliminate) const;\n+178\n+183 sharedBayesNet _\bj_\bo_\bi_\bn_\bt_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(_\bK_\be_\by j1, _\bK_\be_\by j2, const Eliminate& function =\n+EliminationTraitsType::DefaultEliminate) const;\n+184\n+187\n+189 void _\bd_\bo_\bt(std::ostream& os, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter) const;\n+190\n+192 std::string _\bd_\bo_\bt(\n+193 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+194\n+196 void _\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n+197 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+198\n+202\n+207 template\n+208 _\bK_\be_\by _\bf_\bi_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bC_\bl_\bi_\bq_\bu_\be(const CONTAINER& parents) const;\n+209\n+211 void _\bc_\bl_\be_\ba_\br();\n+212\n+214 void _\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs();\n+215\n+220 void _\br_\be_\bm_\bo_\bv_\be_\bP_\ba_\bt_\bh(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bc_\bl_\bi_\bq_\bu_\be, BayesNetType* bn, _\bC_\bl_\bi_\bq_\bu_\be_\bs* orphans);\n+221\n+226 void _\br_\be_\bm_\bo_\bv_\be_\bT_\bo_\bp(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys, BayesNetType* bn, _\bC_\bl_\bi_\bq_\bu_\be_\bs* orphans);\n+227\n+230 _\bC_\bl_\bi_\bq_\bu_\be_\bs _\br_\be_\bm_\bo_\bv_\be_\bS_\bu_\bb_\bt_\br_\be_\be(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree);\n+231\n+235 void _\bi_\bn_\bs_\be_\br_\bt_\bR_\bo_\bo_\bt(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree);\n+236\n+238 void _\ba_\bd_\bd_\bC_\bl_\bi_\bq_\bu_\be(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& _\bc_\bl_\bi_\bq_\bu_\be, const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be&\n+parent_clique = _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be());\n+239\n+241 void _\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh(_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be_\b>* graph) const;\n+242\n+243 protected:\n+244\n+246 void _\bd_\bo_\bt(std::ostream &s, _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bc_\bl_\bi_\bq_\bu_\be, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n+keyFormatter,\n+247 int parentnum = 0) const;\n+248\n+250 void _\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bc_\bl_\bi_\bq_\bu_\be, _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba* stats) const;\n+251\n+253 void _\br_\be_\bm_\bo_\bv_\be_\bC_\bl_\bi_\bq_\bu_\be(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bc_\bl_\bi_\bq_\bu_\be);\n+254\n+256 void _\bf_\bi_\bl_\bl_\bN_\bo_\bd_\be_\bs_\bI_\bn_\bd_\be_\bx(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree);\n+257\n+258 // Friend JunctionTree because it directly fills roots and nodes index.\n+259 template friend class\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be;\n+260\n+261 private:\n+_\b2_\b6_\b3 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+264 template\n+265 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+266 ar & BOOST_SERIALIZATION_NVP(_\bn_\bo_\bd_\be_\bs_\b_);\n+267 ar & BOOST_SERIALIZATION_NVP(_\br_\bo_\bo_\bt_\bs_\b_);\n+268 }\n+269\n+271\n+272 }; // BayesTree\n+273\n+274 /\n+* ************************************************************************* */\n+275 template \n+_\b2_\b7_\b6 class _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br : public CLIQUE::ConditionalType {\n+277 public:\n+278 typedef CLIQUE CliqueType;\n+279 typedef typename CLIQUE::ConditionalType Base;\n+280\n+281 boost::shared_ptr clique;\n+282\n+_\b2_\b9_\b3 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br(const boost::shared_ptr& clique)\n+294 : clique(clique) {\n+295 this->keys_.assign(clique->conditional()->beginParents(),\n+296 clique->conditional()->endParents());\n+297 }\n+298\n+299 void print(\n+300 const std::string& s = \"\",\n+301 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n+302 clique->print(s + \"stored clique\", formatter);\n+303 }\n+304 };\n+305\n+306}\n _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n A thin wrapper around std::vector that uses a custom allocator.\n+_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+A thin wrapper around std::list that uses boost's fast_pool_allocator.\n _\bK_\be_\by_\b._\bh\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n FastVector\n FastVector is a type alias to a std::vector with a custom memory allocator.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n@@ -149,112 +239,213 @@\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-FastVector< FactorIndex > FactorIndices\n-Define collection types:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n-FastSet is a thin wrapper around std::set that uses the boost\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:50\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList is a thin wrapper around std::list that uses the boost\n+fast_pool_allocator instead of the de...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bn_\bd\n-const_iterator find(Key key) const\n-find\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-Iterator at beginning of involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:143\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-Factor()\n-Default constructor for I/O.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bn_\bd\n-iterator end()\n-Iterator at end of involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:188\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty() const\n-Whether the factor is empty (involves zero variables).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-KeyVector & keys()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:182\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs\n-static Factor FromIterators(ITERATOR first, ITERATOR last)\n-Construct factor from iterator keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs\n-static Factor FromKeys(const CONTAINER &keys)\n-Construct factor from container of keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-iterator begin()\n-Iterator at beginning of involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bF_\ba_\bc_\bt_\bo_\br\n-virtual ~Factor()=default\n-Default destructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-Factor(ITERATOR first, ITERATOR last)\n-Construct factor from iterator keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::const_iterator const_iterator\n-Const iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bn_\bd\n-const_iterator end() const\n-Iterator at end of involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:146\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-Factor(const CONTAINER &keys)\n-Construct factor from container of keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::iterator iterator\n-Iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\ba_\bc_\bk\n-Key back() const\n-Last key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\br_\bo_\bn_\bt\n-Key front() const\n-First key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n+A cluster-tree that eliminates to a Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bS_\bt_\ba_\bt_\bs\n+clique statistics\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba\n+store all the sizes\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bn_\bo_\bd_\be_\bs_\b_\n+Nodes nodes_\n+Map from indices to Clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bC_\bl_\bi_\bq_\bu_\be\n+void removeClique(sharedClique clique)\n+remove a clique: warning, can result in a forest\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:424\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bj_\bo_\bi_\bn_\bt\n+sharedFactorGraph joint(Key j1, Key j2, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate) const\n+return joint on two variables Limitation: can only calculate joint if cliques\n+are disjoint or one of ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:293\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bf_\bi_\bl_\bl_\bN_\bo_\bd_\be_\bs_\bI_\bn_\bd_\be_\bx\n+void fillNodesIndex(const sharedClique &subtree)\n+Fill the nodes index for a subtree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:246\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bd_\bo_\bt\n+void dot(std::ostream &os, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const\n+Output to graphviz format, stream version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh\n+void addFactorsToGraph(FactorGraph< FactorType > *graph) const\n+Add all cliques in this BayesTree to the specified factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:168\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+sharedClique operator[](Key j) const\n+Access node by variable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:146\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+This & operator=(const This &other)\n+Assignment operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:199\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be\n+boost::shared_ptr< Clique > sharedClique\n+Shared pointer to a clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+BayesTree()\n+Create an empty Bayes Tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be\n+Clique Node\n+Synonym for Clique (TODO: remove)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bc_\bl_\be_\ba_\br\n+void clear()\n+Remove all nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:408\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs_\b_\n+Roots roots_\n+Root cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bd_\bd_\bC_\bl_\bi_\bq_\bu_\be\n+void addClique(const sharedClique &clique, const sharedClique\n+&parent_clique=sharedClique())\n+add a clique (top down)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:142\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bj_\bo_\bi_\bn_\bt_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+sharedBayesNet jointBayesNet(Key j1, Key j2, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate) const\n+return joint on two variables as a BayesNet Limitation: can only calculate\n+joint if cliques are disjo...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:302\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be\n+sharedClique sharedNode\n+Synonym for sharedClique (TODO: remove)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bf_\bi_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bC_\bl_\bi_\bq_\bu_\be\n+Key findParentClique(const CONTAINER &parents) const\n+Find parent clique of a conditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:238\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\bi_\bz_\be\n size_t size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n+number of cliques\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:133\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs\n+void deleteCachedShortcuts()\n+Clear all shortcut caches - use before timing on marginal calculation to avoid\n+residual cache data.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:416\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bP_\ba_\bt_\bh\n+void removePath(sharedClique clique, BayesNetType *bn, Cliques *orphans)\n+Remove path from clique to root and return that path as factors plus a list of\n+orphaned subtree roots...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:448\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bn_\bo_\bd_\be_\bs\n+const Nodes & nodes() const\n+Return nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be_\bs\n+FastList< sharedClique > Cliques\n+A convenience class for a list of shared cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be\n+CLIQUE Clique\n+The clique type, normally BayesTreeClique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+sharedConditional marginalFactor(Key j, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate) const\n+Return marginal on any variable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:270\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs\n+const Roots & roots() const\n+return root cliques\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:149\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bc_\bl_\bi_\bq_\bu_\be\n+const sharedClique & clique(Key j) const\n+alternate syntax for matlab: find the clique that contains the variable with\n+Key j\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\bs\n+ConcurrentMap< Key, sharedClique > Nodes\n+Map from keys to Clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:263\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n+size_t numCachedSeparatorMarginals() const\n+Collect number of cliques with cached separator marginals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba\n+BayesTreeCliqueData getCliqueData() const\n+Gather data on all cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bS_\bu_\bb_\bt_\br_\be_\be\n+Cliques removeSubtree(const sharedClique &subtree)\n+Remove the requested subtree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:496\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+Check if there are any cliques in the tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bR_\bo_\bo_\bt\n+void insertRoot(const sharedClique &subtree)\n+Insert a new subtree with known parent clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n+void saveGraph(const std::string &filename, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const\n+output to file with graphviz format.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bT_\bo_\bp\n+void removeTop(const KeyVector &keys, BayesNetType *bn, Cliques *orphans)\n+Given a list of indices, turn \"contaminated\" part of the tree back into a\n+factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:475\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bR_\bo_\bo_\bt_\bs\n+FastVector< sharedClique > Roots\n+Root cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:276\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n+BayesTreeOrphanWrapper(const boost::shared_ptr< CliqueType > &clique)\n+Construct a new Bayes Tree Orphan Wrapper object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:293\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00596.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00596.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableSlots.h File Reference\n \n \n \n \n \n \n \n@@ -95,83 +95,47 @@\n \n \n \n \n
\n \n-
graph.h File Reference
\n+Namespaces
\n+
VariableSlots.h File Reference
\n \n
\n \n-

Graph algorithm using boost library. \n+

VariableSlots describes the structure of a combined factor in terms of where each block comes from in the source factors. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::SDGraph< KEY >
 SDGraph is undirected graph with variable keys and double edge weights. More...
class  gtsam::VariableSlots
 A combined factor is assembled as one block of rows for each component factor. More...
 
class  gtsam::SGraph< KEY >
 
class  gtsam::PredecessorMap< KEY >
 Map from variable key to parent key. More...
struct  gtsam::traits< VariableSlots >
 traits More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-Functions

\n-template<class KEY >
std::list< KEY > gtsam::predecessorMap2Keys (const PredecessorMap< KEY > &p_map)
 Generate a list of keys from a spanning tree represented by its predecessor map.
 
\n-template<class G , class F , class KEY >
SDGraph< KEY > gtsam::toBoostGraph (const G &graph)
 Convert the factor graph to an SDGraph G = Graph type F = Factor type Key = Key type.
 
template<class G , class V , class KEY >
boost::tuple< G, V, std::map< KEY, V > > gtsam::predecessorMap2Graph (const PredecessorMap< KEY > &p_map)
 Build takes a predecessor map, and builds a directed graph corresponding to the tree.
 
\n-template<class G , class Factor , class POSE , class KEY >
boost::shared_ptr< Valuesgtsam::composePoses (const G &graph, const PredecessorMap< KEY > &tree, const POSE &rootPose)
 Compose the poses by following the chain specified by the spanning tree.
 
\n-template<class G , class KEY , class FACTOR2 >
PredecessorMap< KEY > gtsam::findMinimumSpanningTree (const G &g)
 find the minimum spanning tree using boost graph library
 
\n-template<class G , class KEY , class FACTOR2 >
void gtsam::split (const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)
 Split the graph into two parts: one corresponds to the given spanning tree, and the other corresponds to the rest of the factors.
 
\n

Detailed Description

\n-

Graph algorithm using boost library.

\n-
Author
: Kai Ni
\n-
Date
Jan 11, 2010
\n+

VariableSlots describes the structure of a combined factor in terms of where each block comes from in the source factors.

\n+
Author
Richard Roberts
\n+
Date
Oct 4, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,75 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-graph.h File Reference\n-Graph algorithm using boost library. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+VariableSlots.h File Reference\n+VariableSlots describes the structure of a combined factor in terms of where\n+each block comes from in the source factors. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bD_\bG_\br_\ba_\bp_\bh_\b<_\b _\bK_\bE_\bY_\b _\b>\n-\u00a0 _\bS_\bD_\bG_\br_\ba_\bp_\bh is undirected graph with variable keys and double edge weights.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs\n+\u00a0 A combined factor is assembled as one block of rows for each component\n+ factor. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bG_\br_\ba_\bp_\bh_\b<_\b _\bK_\bE_\bY_\b _\b>\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\b _\bK_\bE_\bY_\b _\b>\n-\u00a0 Map from variable key to parent key. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- std::list< KEY >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bre\bed\bde\bec\bce\bes\bss\bso\bor\brM\bMa\bap\bp2\b2K\bKe\bey\bys\bs (const\n- _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< KEY > &p_map)\n-\u00a0 Generate a list of keys from a spanning\n- tree represented by its predecessor map.\n-\u00a0\n-template\n- _\bS_\bD_\bG_\br_\ba_\bp_\bh< KEY >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bto\boB\bBo\boo\bos\bst\btG\bGr\bra\bap\bph\bh (const G &graph)\n- Convert the factor graph to an _\bS_\bD_\bG_\br_\ba_\bp_\bh G\n-\u00a0 = Graph type F = _\bF_\ba_\bc_\bt_\bo_\br type Key = Key\n- type.\n-\u00a0\n-template\n-boost::tuple< G, V, std::map< KEY, V > _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bG_\br_\ba_\bp_\bh (const\n- >\u00a0 _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< KEY > &p_map)\n- Build takes a predecessor map, and\n-\u00a0 builds a directed graph corresponding to\n- the tree.\n-\u00a0\n-template\n- boost::shared_ptr< _\bV_\ba_\bl_\bu_\be_\bs >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bom\bmp\bpo\bos\bse\beP\bPo\bos\bse\bes\bs (const G &graph,\n- const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< KEY > &tree, const\n- POSE &rootPose)\n-\u00a0 Compose the poses by following the chain\n- specified by the spanning tree.\n-\u00a0\n-template\n- _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< KEY >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:f\bfi\bin\bnd\bdM\bMi\bin\bni\bim\bmu\bum\bmS\bSp\bpa\ban\bnn\bni\bin\bng\bgT\bTr\bre\bee\be (const G\n- &g)\n-\u00a0 find the minimum spanning tree using\n- boost graph library\n-\u00a0\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsp\bpl\bli\bit\bt (const G &g, const\n- _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< KEY > &tree, G &Ab1, G\n- &Ab2)\n- Split the graph into two parts: one\n-\u00a0 corresponds to the given spanning tree,\n- and the other corresponds to the rest of\n- the factors.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Graph algorithm using boost library.\n+VariableSlots describes the structure of a combined factor in terms of where\n+each block comes from in the source factors.\n Author\n- : Kai Ni\n+ Richard Roberts\n Date\n- Jan 11, 2010\n+ Oct 4, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bg_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00596.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00596.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,4 @@\n var a00596 = [\n- [\"gtsam::SDGraph< KEY >\", \"a03616.html\", null],\n- [\"gtsam::SGraph< KEY >\", \"a03620.html\", null],\n- [\"gtsam::PredecessorMap< KEY >\", \"a03624.html\", \"a03624\"],\n- [\"composePoses\", \"a00596.html#a62b34d6038ccdfa84d8a5bb0c15328b1\", null],\n- [\"findMinimumSpanningTree\", \"a00596.html#a7771a103b41708e88763ff67059ff01d\", null],\n- [\"predecessorMap2Graph\", \"a00596.html#ae67d0d86c4e55b175859967a70b36983\", null],\n- [\"predecessorMap2Keys\", \"a00596.html#a18a265afdea057ea54be10262396be12\", null],\n- [\"split\", \"a00596.html#a3453247aec1d8b4642947ffd4bca426b\", null],\n- [\"toBoostGraph\", \"a00596.html#a6c0319a6ebcc83d4a5cf9ff51729bb80\", null]\n+ [\"gtsam::VariableSlots\", \"a03708.html\", \"a03708\"],\n+ [\"gtsam::traits< VariableSlots >\", \"a03712.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00596_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00596_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableSlots.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
graph.h
\n+
VariableSlots.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,99 +114,110 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <map>
\n-
22
\n-
23#define BOOST_NO_HASH // to pacify the warnings about depricated headers in boost.graph
\n-
24
\n-
25#include <boost/graph/graph_traits.hpp>
\n-
26#include <boost/graph/adjacency_list.hpp>
\n-
27#include <boost/shared_ptr.hpp>
\n-\n-
29
\n-
30namespace gtsam {
\n+\n+
22#include <gtsam/base/FastMap.h>
\n+\n+
24#include <gtsam/base/timing.h>
\n+
25#include <gtsam/base/Testable.h>
\n+
26
\n+
27#include <boost/tuple/tuple.hpp>
\n+
28
\n+
29#include <iostream>
\n+
30#include <string>
\n
31
\n-
32 // type definitions :
\n+
32namespace gtsam {
\n
33
\n-
37 template<class KEY>
\n-
\n-
38 class SDGraph: public boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS,
\n-
39 boost::property<boost::vertex_name_t, KEY>, boost::property<
\n-
40 boost::edge_weight_t, double> > {
\n-
41 public:
\n-
42 typedef typename boost::graph_traits<SDGraph<KEY> >::vertex_descriptor Vertex;
\n-
43 };
\n-
\n-
44
\n-
45 template<class KEY>
\n-
\n-
46 class SGraph : public boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS,
\n-
47 boost::property<boost::vertex_name_t, KEY> > {
\n-
48 public:
\n-
49 typedef typename boost::graph_traits<SGraph<KEY> >::vertex_descriptor Vertex;
\n-
50 };
\n-
\n-
51
\n-
52 //typedef boost::graph_traits<SGraph>::vertex_descriptor SVertex;
\n+
\n+
52class VariableSlots : public FastMap<Key, FastVector<size_t> > {
\n
53
\n-
57 template<class KEY>
\n-
\n-
58 class PredecessorMap: public std::map<KEY, KEY> {
\n-
59 public:
\n-
\n-
61 inline void insert(const KEY& key, const KEY& parent) {
\n-
62 std::map<KEY, KEY>::insert(std::make_pair(key, parent));
\n-
63 }
\n-
\n-
64 };
\n-
\n-
65
\n-
69 template<class KEY>
\n-
70 std::list<KEY> predecessorMap2Keys(const PredecessorMap<KEY>& p_map);
\n+
54public:
\n+
55
\n+\n+
57 GTSAM_EXPORT static const size_t Empty;
\n+
58
\n+
61
\n+
67 template<class FG>
\n+
68 VariableSlots(const FG& factorGraph);
\n+
69
\n
71
\n-
78 template<class G, class F, class KEY> SDGraph<KEY> toBoostGraph(const G& graph);
\n-
79
\n-
85 template<class G, class V, class KEY>
\n-
86 boost::tuple<G, V, std::map<KEY,V> > predecessorMap2Graph(const PredecessorMap<KEY>& p_map);
\n-
87
\n-
91 template<class G, class Factor, class POSE, class KEY>
\n-
92 boost::shared_ptr<Values>
\n-
93 composePoses(const G& graph, const PredecessorMap<KEY>& tree, const POSE& rootPose);
\n-
94
\n-
95
\n-
99 template<class G, class KEY, class FACTOR2>
\n-
100 PredecessorMap<KEY> findMinimumSpanningTree(const G& g) ;
\n-
101
\n-
106 template<class G, class KEY, class FACTOR2>
\n-
107 void split(const G& g, const PredecessorMap<KEY>& tree, G& Ab1, G& Ab2) ;
\n-
108
\n-
109
\n-
110} // namespace gtsam
\n-
111
\n-
112#include <gtsam/inference/graph-inl.h>
\n-
A non-templated config holding any types of Manifold-group elements.
\n+
74
\n+
76 GTSAM_EXPORT void print(const std::string& str = "VariableSlots: ") const;
\n+
77
\n+
79 GTSAM_EXPORT bool equals(const VariableSlots& rhs, double tol = 0.0) const;
\n+
80
\n+
82};
\n+
\n+
83
\n+
85template<> struct traits<VariableSlots> : public Testable<VariableSlots> {};
\n+
86
\n+
87/* ************************************************************************* */
\n+
88template<class FG>
\n+
\n+
89VariableSlots::VariableSlots(const FG& factorGraph)
\n+
90{
\n+
91 gttic(VariableSlots_constructor);
\n+
92 static const bool debug = false;
\n+
93
\n+
94 // Compute a mapping (called variableSlots) *from* each involved
\n+
95 // variable that will be in the new joint factor *to* the slot in each
\n+
96 // removed factor in which that variable appears. For each variable,
\n+
97 // this is stored as a vector of slot numbers, stored in order of the
\n+
98 // removed factors. The slot number is the max integer value if the
\n+
99 // factor does not involve that variable.
\n+
100 size_t jointFactorPos = 0;
\n+
101 for(const typename FG::sharedFactor& factor: factorGraph) {
\n+
102 if (!factor) {
\n+
103 continue;
\n+
104 }
\n+
105 size_t factorVarSlot = 0;
\n+
106 for(const Key involvedVariable: *factor) {
\n+
107 // Set the slot in this factor for this variable. If the
\n+
108 // variable was not already discovered, create an array for it
\n+
109 // that we'll fill with the slot indices for each factor that
\n+
110 // we're combining. Initially we put the max integer value in
\n+
111 // the array entry for each factor that will indicate the factor
\n+
112 // does not involve the variable.
\n+
113 iterator thisVarSlots; bool inserted;
\n+
114 boost::tie(thisVarSlots, inserted) = this->insert(std::make_pair(involvedVariable, FastVector<size_t>()));
\n+
115 if(inserted)
\n+
116 thisVarSlots->second.resize(factorGraph.nrFactors(), Empty);
\n+
117 thisVarSlots->second[jointFactorPos] = factorVarSlot;
\n+
118 if(debug) std::cout << " var " << involvedVariable << " rowblock " << jointFactorPos << " comes from factor's slot " << factorVarSlot << std::endl;
\n+
119 ++ factorVarSlot;
\n+
120 }
\n+
121 ++ jointFactorPos;
\n+
122 }
\n+
123}
\n+
\n+
124
\n+
125}
\n+
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
Concept check for values that can be used in unit tests.
\n+
Timing utilities.
\n+
Included from all GTSAM files.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::list< KEY > predecessorMap2Keys(const PredecessorMap< KEY > &p_map)
Generate a list of keys from a spanning tree represented by its predecessor map.
Definition graph-inl.h:50
\n-
void split(const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)
Split the graph into two parts: one corresponds to the given spanning tree, and the other corresponds...
Definition graph-inl.h:255
\n-
boost::shared_ptr< Values > composePoses(const G &graph, const PredecessorMap< KEY > &tree, const POSE &rootPose)
Compose the poses by following the chain specified by the spanning tree.
Definition graph-inl.h:174
\n-
SDGraph< KEY > toBoostGraph(const G &graph)
Convert the factor graph to an SDGraph G = Graph type F = Factor type Key = Key type.
Definition graph-inl.h:68
\n-
PredecessorMap< KEY > findMinimumSpanningTree(const G &fg)
find the minimum spanning tree using boost graph library
Definition graph-inl.h:232
\n-
boost::tuple< G, V, std::map< KEY, V > > predecessorMap2Graph(const PredecessorMap< KEY > &p_map)
Build takes a predecessor map, and builds a directed graph corresponding to the tree.
Definition graph-inl.h:118
\n-
SDGraph is undirected graph with variable keys and double edge weights.
Definition graph.h:40
\n-
Definition graph.h:47
\n-
Map from variable key to parent key.
Definition graph.h:58
\n-
void insert(const KEY &key, const KEY &parent)
convenience insert so we can pass ints for TypedSymbol keys
Definition graph.h:61
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A combined factor is assembled as one block of rows for each component factor.
Definition VariableSlots.h:52
\n+
GTSAM_EXPORT void print(const std::string &str="VariableSlots: ") const
print
Definition VariableSlots.cpp:29
\n+
VariableSlots(const FG &factorGraph)
Constructor from a set of factors to be combined.
Definition VariableSlots.h:89
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-graph.h\n+VariableSlots.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,127 +16,134 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include \n-22\n-23#define BOOST_NO_HASH // to pacify the warnings about depricated headers in\n-boost.graph\n-24\n-25#include \n-26#include \n-27#include \n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+26\n+27#include \n+28\n+29#include \n+30#include \n 31\n-32 // type definitions :\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n 33\n-37 template\n-_\b3_\b8 class _\bS_\bD_\bG_\br_\ba_\bp_\bh: public boost::adjacency_list, boost::property<\n-40 boost::edge_weight_t, double> > {\n-41 public:\n-42 typedef typename boost::graph_traits >::vertex_descriptor\n-Vertex;\n-43 };\n-44\n-45 template\n-_\b4_\b6 class _\bS_\bG_\br_\ba_\bp_\bh : public boost::adjacency_list > {\n-48 public:\n-49 typedef typename boost::graph_traits >::vertex_descriptor\n-Vertex;\n-50 };\n-51\n-52 //typedef boost::graph_traits::vertex_descriptor SVertex;\n+_\b5_\b2class _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs : public _\bF_\ba_\bs_\bt_\bM_\ba_\bp > {\n 53\n-57 template\n-_\b5_\b8 class _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp: public std::map {\n-59 public:\n-_\b6_\b1 inline void _\bi_\bn_\bs_\be_\br_\bt(const KEY& key, const KEY& parent) {\n-62 std::map::insert(std::make_pair(key, parent));\n-63 }\n-64 };\n-65\n-69 template\n-70 std::list _\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bK_\be_\by_\bs(const PredecessorMap& p_map);\n+54public:\n+55\n+56 typedef _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b> > _\bB_\ba_\bs_\be;\n+57 GTSAM_EXPORT static const size_t Empty;\n+58\n+61\n+67 template\n+68 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs(const FG& factorGraph);\n+69\n 71\n-78 template SDGraph _\bt_\bo_\bB_\bo_\bo_\bs_\bt_\bG_\br_\ba_\bp_\bh(const G&\n-graph);\n-79\n-85 template\n-86 boost::tuple > _\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bG_\br_\ba_\bp_\bh(const\n-PredecessorMap& p_map);\n-87\n-91 template\n-92 boost::shared_ptr\n-93 _\bc_\bo_\bm_\bp_\bo_\bs_\be_\bP_\bo_\bs_\be_\bs(const G& graph, const PredecessorMap& tree, const POSE&\n-rootPose);\n-94\n-95\n-99 template\n-100 PredecessorMap _\bf_\bi_\bn_\bd_\bM_\bi_\bn_\bi_\bm_\bu_\bm_\bS_\bp_\ba_\bn_\bn_\bi_\bn_\bg_\bT_\br_\be_\be(const G& g) ;\n-101\n-106 template\n-107 void _\bs_\bp_\bl_\bi_\bt(const G& g, const PredecessorMap& tree, G& Ab1, G& Ab2) ;\n-108\n-109\n-110} // namespace gtsam\n-111\n-112#include \n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\n+74\n+76 GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"VariableSlots: \") const;\n+77\n+79 GTSAM_EXPORT bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs& rhs, double tol = 0.0) const;\n+80\n+82};\n+83\n+_\b8_\b5template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+86\n+87/* *************************************************************************\n+*/\n+88template\n+_\b8_\b9_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs(const FG& factorGraph)\n+90{\n+91 gttic(VariableSlots_constructor);\n+92 static const bool debug = false;\n+93\n+94 // Compute a mapping (called variableSlots) *from* each involved\n+95 // variable that will be in the new joint factor *to* the slot in each\n+96 // removed factor in which that variable appears. For each variable,\n+97 // this is stored as a vector of slot numbers, stored in order of the\n+98 // removed factors. The slot number is the max integer value if the\n+99 // factor does not involve that variable.\n+100 size_t jointFactorPos = 0;\n+101 for(const typename FG::sharedFactor& factor: factorGraph) {\n+102 if (!factor) {\n+103 continue;\n+104 }\n+105 size_t factorVarSlot = 0;\n+106 for(const _\bK_\be_\by involvedVariable: *factor) {\n+107 // Set the slot in this factor for this variable. If the\n+108 // variable was not already discovered, create an array for it\n+109 // that we'll fill with the slot indices for each factor that\n+110 // we're combining. Initially we put the max integer value in\n+111 // the array entry for each factor that will indicate the factor\n+112 // does not involve the variable.\n+113 iterator thisVarSlots; bool inserted;\n+114 boost::tie(thisVarSlots, inserted) = this->insert(std::make_pair\n+(involvedVariable, _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b>()));\n+115 if(inserted)\n+116 thisVarSlots->second.resize(factorGraph.nrFactors(), Empty);\n+117 thisVarSlots->second[jointFactorPos] = factorVarSlot;\n+118 if(debug) std::cout << \" var \" << involvedVariable << \" rowblock \" <<\n+jointFactorPos << \" comes from factor's slot \" << factorVarSlot << std::endl;\n+119 ++ factorVarSlot;\n+120 }\n+121 ++ jointFactorPos;\n+122 }\n+123}\n+124\n+125}\n+_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n+A thin wrapper around std::map that uses boost's fast_pool_allocator.\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bK_\be_\by_\bs\n-std::list< KEY > predecessorMap2Keys(const PredecessorMap< KEY > &p_map)\n-Generate a list of keys from a spanning tree represented by its predecessor\n-map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\bl_\bi_\bt\n-void split(const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)\n-Split the graph into two parts: one corresponds to the given spanning tree, and\n-the other corresponds...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:255\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bm_\bp_\bo_\bs_\be_\bP_\bo_\bs_\be_\bs\n-boost::shared_ptr< Values > composePoses(const G &graph, const PredecessorMap<\n-KEY > &tree, const POSE &rootPose)\n-Compose the poses by following the chain specified by the spanning tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\bo_\bB_\bo_\bo_\bs_\bt_\bG_\br_\ba_\bp_\bh\n-SDGraph< KEY > toBoostGraph(const G &graph)\n-Convert the factor graph to an SDGraph G = Graph type F = Factor type Key = Key\n-type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bi_\bn_\bd_\bM_\bi_\bn_\bi_\bm_\bu_\bm_\bS_\bp_\ba_\bn_\bn_\bi_\bn_\bg_\bT_\br_\be_\be\n-PredecessorMap< KEY > findMinimumSpanningTree(const G &fg)\n-find the minimum spanning tree using boost graph library\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:232\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bG_\br_\ba_\bp_\bh\n-boost::tuple< G, V, std::map< KEY, V > > predecessorMap2Graph(const\n-PredecessorMap< KEY > &p_map)\n-Build takes a predecessor map, and builds a directed graph corresponding to the\n-tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bD_\bG_\br_\ba_\bp_\bh\n-SDGraph is undirected graph with variable keys and double edge weights.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp\n-Map from variable key to parent key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-void insert(const KEY &key, const KEY &parent)\n-convenience insert so we can pass ints for TypedSymbol keys\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs\n+A combined factor is assembled as one block of rows for each component factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableSlots.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+GTSAM_EXPORT void print(const std::string &str=\"VariableSlots: \") const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableSlots.cpp:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs\n+VariableSlots(const FG &factorGraph)\n+Constructor from a set of factors to be combined.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableSlots.h:89\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bg_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00599.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00599.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/LabeledSymbol.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/DotWriter.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,69 +94,36 @@\n \n \n \n \n \n
\n \n-
LabeledSymbol.h File Reference
\n+Namespaces
\n+
DotWriter.cpp File Reference
\n \n
\n \n-

Go to the source code of this file.

\n+

Graphviz formatting for factor graphs. \n+More...

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::LabeledSymbol
 Customized version of gtsam::Symbol for multi-robot use. More...
 
struct  gtsam::traits< LabeledSymbol >
 traits More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

Key gtsam::mrsymbol (unsigned char c, unsigned char label, size_t j)
 Create a symbol key from a character, label and index, i.e.
 
\n-unsigned char gtsam::mrsymbolChr (Key key)
 Return the character portion of a symbol key.
 
\n-unsigned char gtsam::mrsymbolLabel (Key key)
 Return the label portion of a symbol key.
 
\n-size_t gtsam::mrsymbolIndex (Key key)
 Return the index portion of a symbol key.
 
\n

Detailed Description

\n-
Date
Jan 12, 2010
\n-
Author
: Alex Cunningham
\n-
Date
Jan 12, 2010
\n-
Author
: Alex Cunningham
\n-
\n-: Frank Dellaert
\n-
\n-: Richard Roberts
\n+

Graphviz formatting for factor graphs.

\n+
Author
Frank Dellaert
\n+
Date
December, 2021
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,47 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-LabeledSymbol.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl\n-\u00a0 Customized version of _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl for multi-robot use. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DotWriter.cpp File Reference\n+Graphviz formatting for factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- _\bK_\be_\by\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\br_\bs_\by_\bm_\bb_\bo_\bl (unsigned char c, unsigned char label, size_t j)\n-\u00a0 Create a symbol key from a character, label and index, i.e.\n-\u00a0\n-unsigned char\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bmr\brs\bsy\bym\bmb\bbo\bol\blC\bCh\bhr\br (_\bK_\be_\by key)\n-\u00a0 Return the character portion of a symbol key.\n-\u00a0\n-unsigned char\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bmr\brs\bsy\bym\bmb\bbo\bol\blL\bLa\bab\bbe\bel\bl (_\bK_\be_\by key)\n-\u00a0 Return the label portion of a symbol key.\n-\u00a0\n- size_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bmr\brs\bsy\bym\bmb\bbo\bol\blI\bIn\bnd\bde\bex\bx (_\bK_\be_\by key)\n-\u00a0 Return the index portion of a symbol key.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Jan 12, 2010\n+Graphviz formatting for factor graphs.\n Author\n- : Alex Cunningham\n+ Frank Dellaert\n Date\n- Jan 12, 2010\n- Author\n- : Alex Cunningham\n- : Frank Dellaert\n- : Richard Roberts\n+ December, 2021\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n+ * _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00602.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00602.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTreeCliqueBase.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableIndex-inl.h File Reference\n \n \n \n \n \n \n \n@@ -94,44 +94,34 @@\n \n \n \n \n \n
\n \n-
BayesTreeCliqueBase.h File Reference
\n+
VariableIndex-inl.h File Reference
\n
\n
\n \n-

Base class for cliques of a BayesTree. \n-More...

\n-\n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::BayesTreeCliqueBase< DERIVED, FACTORGRAPH >
 This is the base class for BayesTree cliques. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Base class for cliques of a BayesTree.

\n-
Author
Richard Roberts and Frank Dellaert
\n+
Author
Richard Roberts
\n+
Date
March 26, 2013
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BayesTreeCliqueBase.h File Reference\n-Base class for cliques of a BayesTree. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+VariableIndex-inl.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b,_\b _\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b _\b>\n-\u00a0 This is the base class for _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be cliques. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Base class for cliques of a BayesTree.\n Author\n- Richard Roberts and Frank Dellaert\n+ Richard Roberts\n+ Date\n+ March 26, 2013\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n+ * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00602_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00602_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTreeCliqueBase.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableIndex-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
BayesTreeCliqueBase.h
\n+
VariableIndex-inl.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,210 +114,109 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-
20#include <gtsam/inference/Key.h>
\n-\n-
22#include <gtsam/base/types.h>
\n-\n-
24#include <boost/optional.hpp>
\n-
25
\n-
26#include <string>
\n-
27#include <mutex>
\n-
28
\n-
29namespace gtsam {
\n+\n+
21#include <gtsam/base/timing.h>
\n+
22
\n+
23namespace gtsam {
\n+
24
\n+
25/* ************************************************************************* */
\n+
26template<class FG>
\n+
\n+
27void VariableIndex::augment(const FG& factors,
\n+
28 boost::optional<const FactorIndices&> newFactorIndices) {
\n+
29 gttic(VariableIndex_augment);
\n
30
\n-
31 // Forward declarations
\n-
32 template<class CLIQUE> class BayesTree;
\n-
33 template<class GRAPH> struct EliminationTraits;
\n-
34
\n-
48 template<class DERIVED, class FACTORGRAPH>
\n-
\n-\n-
50 {
\n-
51 private:
\n-\n-
53 typedef DERIVED DerivedType;
\n-
54 typedef EliminationTraits<FACTORGRAPH> EliminationTraitsType;
\n-
55 typedef boost::shared_ptr<This> shared_ptr;
\n-
56 typedef boost::weak_ptr<This> weak_ptr;
\n-
57 typedef boost::shared_ptr<DerivedType> derived_ptr;
\n-
58 typedef boost::weak_ptr<DerivedType> derived_weak_ptr;
\n-
59
\n-
60 public:
\n-
61 typedef FACTORGRAPH FactorGraphType;
\n-
62 typedef typename EliminationTraitsType::BayesNetType BayesNetType;
\n-
63 typedef typename BayesNetType::ConditionalType ConditionalType;
\n-
64 typedef boost::shared_ptr<ConditionalType> sharedConditional;
\n-
65 typedef typename FactorGraphType::FactorType FactorType;
\n-
66 typedef typename FactorGraphType::Eliminate Eliminate;
\n-
67
\n-
68 protected:
\n-
69
\n-
72
\n-
74 BayesTreeCliqueBase() : problemSize_(1) {}
\n-
75
\n-
\n-
78 BayesTreeCliqueBase(const sharedConditional& conditional)
\n-
79 : conditional_(conditional), problemSize_(1) {}
\n-
\n-
80
\n-
\n-\n-
83 : conditional_(c.conditional_),
\n-
84 parent_(c.parent_),
\n-
85 children(c.children),
\n-
86 problemSize_(c.problemSize_),
\n-
87 is_root(c.is_root) {}
\n-
\n-
88
\n-
\n-\n-
91 conditional_ = c.conditional_;
\n-
92 parent_ = c.parent_;
\n-
93 children = c.children;
\n-
94 problemSize_ = c.problemSize_;
\n-
95 is_root = c.is_root;
\n-
96 return *this;
\n-
97 }
\n-
\n-
98
\n-
99 // Virtual destructor.
\n-
100 virtual ~BayesTreeCliqueBase() {}
\n-
101
\n-
103
\n-
105 mutable boost::optional<FactorGraphType> cachedSeparatorMarginal_;
\n-\n-
111
\n-
112 public:
\n-
113 sharedConditional conditional_;
\n-
114 derived_weak_ptr parent_;
\n-\n-
116 int problemSize_;
\n-
117
\n-
118 bool is_root = false;
\n-
119
\n-
123 void setEliminationResult(const typename FactorGraphType::EliminationResult& eliminationResult);
\n-
124
\n-
127
\n-
129 bool equals(const DERIVED& other, double tol = 1e-9) const;
\n-
130
\n-
132 virtual void print(
\n-
133 const std::string& s = "",
\n-
134 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
135
\n-
139
\n-
141 const sharedConditional& conditional() const { return conditional_; }
\n-
142
\n-
144 inline bool isRoot() const { return parent_.expired(); }
\n-
145
\n-
147 size_t nrChildren() const { return children.size(); }
\n-
148
\n-
150 const derived_ptr operator[](size_t i) const { return children[i]; }
\n-
151
\n-
153 size_t treeSize() const;
\n-
154
\n-
156 size_t numCachedSeparatorMarginals() const;
\n-
157
\n-
159 derived_ptr parent() const { return parent_.lock(); }
\n-
160
\n-
162 int problemSize() const { return problemSize_; }
\n-
163
\n-
167
\n-
169 BayesNetType shortcut(const derived_ptr& root, Eliminate function = EliminationTraitsType::DefaultEliminate) const;
\n-
170
\n-
172 FactorGraphType separatorMarginal(Eliminate function = EliminationTraitsType::DefaultEliminate) const;
\n-
173
\n-
175 FactorGraphType marginal2(Eliminate function = EliminationTraitsType::DefaultEliminate) const;
\n-
176
\n-\n-
182
\n-
183 const boost::optional<FactorGraphType>& cachedSeparatorMarginal() const {
\n-
184 std::lock_guard<std::mutex> marginalLock(cachedSeparatorMarginalMutex_);
\n-\n-
186 }
\n-
187
\n-
188 friend class BayesTree<DerivedType>;
\n-
189
\n-
190 protected:
\n-
191
\n-
193 KeyVector separator_setminus_B(const derived_ptr& B) const;
\n-
194
\n-
198 KeyVector shortcut_indices(const derived_ptr& B, const FactorGraphType& p_Cp_B) const;
\n-
199
\n-
\n-\n-
202 std::lock_guard<std::mutex> marginalLock(cachedSeparatorMarginalMutex_);
\n-
203 cachedSeparatorMarginal_ = boost::none;
\n-
204 }
\n-
\n-
205
\n-
206 private:
\n-
207
\n-\n-
210 template<class ARCHIVE>
\n-
211 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
212 if(!parent_.lock()) {
\n-
213 is_root = true;
\n-
214 }
\n-
215 ar & BOOST_SERIALIZATION_NVP(is_root);
\n-
216 ar & BOOST_SERIALIZATION_NVP(conditional_);
\n-
217 if (!is_root) { // TODO(fan): Workaround for boost/serialization #119
\n-
218 ar & BOOST_SERIALIZATION_NVP(parent_);
\n-
219 }
\n-
220 ar & BOOST_SERIALIZATION_NVP(children);
\n-
221 }
\n-
222
\n-
224
\n-
225 };
\n-
\n-
226
\n-
227}
\n-
Typedefs for easier changing of types.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-\n-
Variable ordering for the elimination algorithm.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
31 // Augment index for each factor
\n+
32 for (size_t i = 0; i < factors.size(); ++i) {
\n+
33 if (factors[i]) {
\n+
34 const size_t globalI =
\n+
35 newFactorIndices ? (*newFactorIndices)[i] : nFactors_;
\n+
36 for(const Key key: *factors[i]) {
\n+
37 index_[key].push_back(globalI);
\n+
38 ++nEntries_;
\n+
39 }
\n+
40 }
\n+
41
\n+
42 // Increment factor count even if factors are null, to keep indices consistent
\n+
43 if (newFactorIndices) {
\n+
44 if ((*newFactorIndices)[i] >= nFactors_)
\n+
45 nFactors_ = (*newFactorIndices)[i] + 1;
\n+
46 } else {
\n+
47 ++nFactors_;
\n+
48 }
\n+
49 }
\n+
50}
\n+
\n+
51
\n+
52/* ************************************************************************* */
\n+
53template<typename ITERATOR, class FG>
\n+
\n+
54void VariableIndex::remove(ITERATOR firstFactor, ITERATOR lastFactor,
\n+
55 const FG& factors) {
\n+
56 gttic(VariableIndex_remove);
\n+
57
\n+
58 // NOTE: We intentionally do not decrement nFactors_ because the factor
\n+
59 // indices need to remain consistent. Removing factors from a factor graph
\n+
60 // does not shift the indices of other factors. Also, we keep nFactors_
\n+
61 // one greater than the highest-numbered factor referenced in a VariableIndex.
\n+
62 ITERATOR factorIndex = firstFactor;
\n+
63 size_t i = 0;
\n+
64 for (; factorIndex != lastFactor; ++factorIndex, ++i) {
\n+
65 if (i >= factors.size())
\n+
66 throw std::invalid_argument(
\n+
67 "Internal error, requested inconsistent number of factor indices and factors in VariableIndex::remove");
\n+
68 if (factors[i]) {
\n+
69 for(Key j: *factors[i]) {
\n+
70 FactorIndices& factorEntries = internalAt(j);
\n+
71 auto entry = std::find(factorEntries.begin(),
\n+
72 factorEntries.end(), *factorIndex);
\n+
73 if (entry == factorEntries.end())
\n+
74 throw std::invalid_argument(
\n+
75 "Internal error, indices and factors passed into VariableIndex::remove are not consistent with the existing variable index");
\n+
76 factorEntries.erase(entry);
\n+
77 --nEntries_;
\n+
78 }
\n+
79 }
\n+
80 }
\n+
81}
\n+
\n+
82
\n+
83/* ************************************************************************* */
\n+
84template<typename ITERATOR>
\n+
\n+
85void VariableIndex::removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey) {
\n+
86 for (ITERATOR key = firstKey; key != lastKey; ++key) {
\n+
87 KeyMap::iterator entry = index_.find(*key);
\n+
88 if (!entry->second.empty())
\n+
89 throw std::invalid_argument(
\n+
90 "Asking to remove variables from the variable index that are not unused");
\n+
91 index_.erase(entry);
\n+
92 }
\n+
93}
\n+
\n+
94
\n+
95}
\n+
Timing utilities.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n-
This is the base class for BayesTree cliques.
Definition BayesTreeCliqueBase.h:50
\n-
const derived_ptr operator[](size_t i) const
Return the child at index i.
Definition BayesTreeCliqueBase.h:150
\n-
BayesTreeCliqueBase & operator=(const BayesTreeCliqueBase &c)
Shallow copy assignment constructor.
Definition BayesTreeCliqueBase.h:90
\n-
void deleteCachedShortcutsNonRecursive()
Non-recursive delete cached shortcuts and marginals - internal only.
Definition BayesTreeCliqueBase.h:201
\n-
size_t nrChildren() const
Return the number of children.
Definition BayesTreeCliqueBase.h:147
\n-
int problemSize() const
Problem size (used for parallel traversal)
Definition BayesTreeCliqueBase.h:162
\n-
BayesTreeCliqueBase()
Default constructor.
Definition BayesTreeCliqueBase.h:74
\n-
derived_ptr parent() const
return a shared_ptr to the parent clique
Definition BayesTreeCliqueBase.h:159
\n-
size_t treeSize() const
The size of subtree rooted at this clique, i.e., nr of Cliques.
Definition BayesTreeCliqueBase-inst.h:84
\n-
BayesTreeCliqueBase(const sharedConditional &conditional)
Construct from a conditional, leaving parent and child pointers uninitialized.
Definition BayesTreeCliqueBase.h:78
\n-
std::mutex cachedSeparatorMarginalMutex_
This protects Cached seperator marginal P(S) from concurrent read/writes as many the functions which ...
Definition BayesTreeCliqueBase.h:110
\n-
bool isRoot() const
Return true if this clique is the root of a Bayes tree.
Definition BayesTreeCliqueBase.h:144
\n-
BayesTreeCliqueBase(const BayesTreeCliqueBase &c)
Shallow copy constructor.
Definition BayesTreeCliqueBase.h:82
\n-
FactorGraphType marginal2(Eliminate function=EliminationTraitsType::DefaultEliminate) const
return the marginal P(C) of the clique, using marginal caching
Definition BayesTreeCliqueBase-inst.h:195
\n-
FactorGraphType separatorMarginal(Eliminate function=EliminationTraitsType::DefaultEliminate) const
return the marginal P(S) on the separator
Definition BayesTreeCliqueBase-inst.h:147
\n-
BayesNetType shortcut(const derived_ptr &root, Eliminate function=EliminationTraitsType::DefaultEliminate) const
return the conditional P(S|Root) on the separator given the root
Definition BayesTreeCliqueBase-inst.h:113
\n-
void deleteCachedShortcuts()
This deletes the cached shortcuts of all cliques (subtree) below this clique.
Definition BayesTreeCliqueBase-inst.h:207
\n-
KeyVector shortcut_indices(const derived_ptr &B, const FactorGraphType &p_Cp_B) const
Determine variable indices to keep in recursive separator shortcut calculation The factor graph p_Cp_...
Definition BayesTreeCliqueBase-inst.h:57
\n-
const sharedConditional & conditional() const
Access the conditional.
Definition BayesTreeCliqueBase.h:141
\n-
friend class boost::serialization::access
Serialization function.
Definition BayesTreeCliqueBase.h:209
\n-
KeyVector separator_setminus_B(const derived_ptr &B) const
Calculate set for shortcut calculations.
Definition BayesTreeCliqueBase-inst.h:45
\n-
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print this node
Definition BayesTreeCliqueBase-inst.h:76
\n-
size_t numCachedSeparatorMarginals() const
Collect number of cliques with cached separator marginals.
Definition BayesTreeCliqueBase-inst.h:93
\n-
boost::optional< FactorGraphType > cachedSeparatorMarginal_
This stores the Cached separator marginal P(S)
Definition BayesTreeCliqueBase.h:105
\n-
void setEliminationResult(const typename FactorGraphType::EliminationResult &eliminationResult)
Fill the elimination result produced during elimination.
Definition BayesTreeCliqueBase-inst.h:27
\n+
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
const FactorIndices & internalAt(Key variable) const
Internal version of 'at' that asserts existence.
Definition VariableIndex.h:172
\n+
void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG &factors)
Remove entries corresponding to the specified factors.
Definition VariableIndex-inl.h:54
\n+
void removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey)
Remove unused empty variables (in debug mode verifies they are empty).
Definition VariableIndex-inl.h:85
\n+
void augment(const FG &factors, boost::optional< const FactorIndices & > newFactorIndices=boost::none)
Augment the variable index with new factors.
Definition VariableIndex-inl.h:27
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BayesTreeCliqueBase.h\n+VariableIndex-inl.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,300 +16,126 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-24#include \n-25\n-26#include \n-27#include \n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+25/* *************************************************************************\n+*/\n+26template\n+_\b2_\b7void _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt(const FG& factors,\n+28 boost::optional newFactorIndices) {\n+29 gttic(VariableIndex_augment);\n 30\n-31 // Forward declarations\n-32 template class BayesTree;\n-33 template struct EliminationTraits;\n-34\n-48 template\n-_\b4_\b9 class _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-50 {\n-51 private:\n-52 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b,_\b _\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b> This;\n-53 typedef DERIVED DerivedType;\n-54 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b> EliminationTraitsType;\n-55 typedef boost::shared_ptr shared_ptr;\n-56 typedef boost::weak_ptr weak_ptr;\n-57 typedef boost::shared_ptr derived_ptr;\n-58 typedef boost::weak_ptr derived_weak_ptr;\n-59\n-60 public:\n-61 typedef FACTORGRAPH FactorGraphType;\n-62 typedef typename EliminationTraitsType::BayesNetType BayesNetType;\n-63 typedef typename BayesNetType::ConditionalType ConditionalType;\n-64 typedef boost::shared_ptr sharedConditional;\n-65 typedef typename FactorGraphType::FactorType FactorType;\n-66 typedef typename FactorGraphType::Eliminate Eliminate;\n-67\n-68 protected:\n-69\n-72\n-_\b7_\b4 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be() : problemSize_(1) {}\n-75\n-_\b7_\b8 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be(const sharedConditional& _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl)\n-79 : conditional_(_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl), problemSize_(1) {}\n-80\n-_\b8_\b2 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be(const _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be& c)\n-83 : conditional_(c.conditional_),\n-84 parent_(c.parent_),\n-85 children(c.children),\n-86 problemSize_(c.problemSize_),\n-87 is_root(c.is_root) {}\n-88\n-_\b9_\b0 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be& c) {\n-91 conditional_ = c.conditional_;\n-92 parent_ = c.parent_;\n-93 children = c.children;\n-94 problemSize_ = c.problemSize_;\n-95 is_root = c.is_root;\n-96 return *this;\n-97 }\n-98\n-99 // Virtual destructor.\n-100 virtual _\b~_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be() {}\n-101\n-103\n-_\b1_\b0_\b5 mutable boost::optional _\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b_;\n-_\b1_\b1_\b0 mutable std::mutex _\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bt_\be_\bx_\b_;\n-111\n-112 public:\n-113 sharedConditional conditional_;\n-114 derived_weak_ptr parent_;\n-115 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bp_\bt_\br_\b> children;\n-116 int problemSize_;\n-117\n-118 bool is_root = false;\n-119\n-123 void _\bs_\be_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(const typename FactorGraphType::\n-EliminationResult& eliminationResult);\n-124\n-127\n-129 bool _\be_\bq_\bu_\ba_\bl_\bs(const DERIVED& other, double tol = 1e-9) const;\n-130\n-132 virtual void _\bp_\br_\bi_\bn_\bt(\n-133 const std::string& s = \"\",\n-134 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n-135\n-139\n-_\b1_\b4_\b1 const sharedConditional& _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() const { return conditional_; }\n-142\n-_\b1_\b4_\b4 inline bool _\bi_\bs_\bR_\bo_\bo_\bt() const { return parent_.expired(); }\n-145\n-_\b1_\b4_\b7 size_t _\bn_\br_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn() const { return children.size(); }\n-148\n-_\b1_\b5_\b0 const derived_ptr _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](size_t i) const { return children[i]; }\n-151\n-153 size_t _\bt_\br_\be_\be_\bS_\bi_\bz_\be() const;\n-154\n-156 size_t _\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs() const;\n-157\n-_\b1_\b5_\b9 derived_ptr _\bp_\ba_\br_\be_\bn_\bt() const { return parent_.lock(); }\n-160\n-_\b1_\b6_\b2 int _\bp_\br_\bo_\bb_\bl_\be_\bm_\bS_\bi_\bz_\be() const { return problemSize_; }\n-163\n-167\n-169 BayesNetType _\bs_\bh_\bo_\br_\bt_\bc_\bu_\bt(const derived_ptr& root, Eliminate function =\n-EliminationTraitsType::DefaultEliminate) const;\n-170\n-172 FactorGraphType _\bs_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl(Eliminate function =\n-EliminationTraitsType::DefaultEliminate) const;\n-173\n-175 FactorGraphType _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b2(Eliminate function = EliminationTraitsType::\n-DefaultEliminate) const;\n-176\n-181 void _\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs();\n-182\n-183 const boost::optional& cachedSeparatorMarginal() const {\n-184 std::lock_guard marginalLock(_\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bt_\be_\bx_\b_);\n-185 return _\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b_;\n-186 }\n-187\n-188 friend class BayesTree;\n-189\n-190 protected:\n-191\n-193 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bs_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\b__\bs_\be_\bt_\bm_\bi_\bn_\bu_\bs_\b__\bB(const derived_ptr& B) const;\n-194\n-198 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bs_\bh_\bo_\br_\bt_\bc_\bu_\bt_\b__\bi_\bn_\bd_\bi_\bc_\be_\bs(const derived_ptr& B, const FactorGraphType&\n-p_Cp_B) const;\n-199\n-_\b2_\b0_\b1 void _\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs_\bN_\bo_\bn_\bR_\be_\bc_\bu_\br_\bs_\bi_\bv_\be() {\n-202 std::lock_guard marginalLock(_\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bt_\be_\bx_\b_);\n-203 _\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b_ = boost::none;\n-204 }\n-205\n-206 private:\n-207\n-_\b2_\b0_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-210 template\n-211 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-212 if(!parent_.lock()) {\n-213 is_root = true;\n-214 }\n-215 ar & BOOST_SERIALIZATION_NVP(is_root);\n-216 ar & BOOST_SERIALIZATION_NVP(conditional_);\n-217 if (!is_root) { // TODO(fan): Workaround for boost/serialization #119\n-218 ar & BOOST_SERIALIZATION_NVP(parent_);\n-219 }\n-220 ar & BOOST_SERIALIZATION_NVP(children);\n-221 }\n-222\n-224\n-225 };\n-226\n-227}\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bK_\be_\by_\b._\bh\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+31 // Augment index for each factor\n+32 for (size_t i = 0; i < factors.size(); ++i) {\n+33 if (factors[i]) {\n+34 const size_t globalI =\n+35 newFactorIndices ? (*newFactorIndices)[i] : nFactors_;\n+36 for(const _\bK_\be_\by key: *factors[i]) {\n+37 index_[key].push_back(globalI);\n+38 ++nEntries_;\n+39 }\n+40 }\n+41\n+42 // Increment factor count even if factors are null, to keep indices\n+consistent\n+43 if (newFactorIndices) {\n+44 if ((*newFactorIndices)[i] >= nFactors_)\n+45 nFactors_ = (*newFactorIndices)[i] + 1;\n+46 } else {\n+47 ++nFactors_;\n+48 }\n+49 }\n+50}\n+51\n+52/* *************************************************************************\n+*/\n+53template\n+_\b5_\b4void _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\br_\be_\bm_\bo_\bv_\be(ITERATOR firstFactor, ITERATOR lastFactor,\n+55 const FG& factors) {\n+56 gttic(VariableIndex_remove);\n+57\n+58 // NOTE: We intentionally do not decrement nFactors_ because the factor\n+59 // indices need to remain consistent. Removing factors from a factor graph\n+60 // does not shift the indices of other factors. Also, we keep nFactors_\n+61 // one greater than the highest-numbered factor referenced in a\n+VariableIndex.\n+62 ITERATOR factorIndex = firstFactor;\n+63 size_t i = 0;\n+64 for (; factorIndex != lastFactor; ++factorIndex, ++i) {\n+65 if (i >= factors.size())\n+66 throw std::invalid_argument(\n+67 \"Internal error, requested inconsistent number of factor indices and factors\n+in VariableIndex::remove\");\n+68 if (factors[i]) {\n+69 for(_\bK_\be_\by j: *factors[i]) {\n+70 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& factorEntries = _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\bA_\bt(j);\n+71 auto entry = std::find(factorEntries.begin(),\n+72 factorEntries.end(), *factorIndex);\n+73 if (entry == factorEntries.end())\n+74 throw std::invalid_argument(\n+75 \"Internal error, indices and factors passed into VariableIndex::remove are\n+not consistent with the existing variable index\");\n+76 factorEntries.erase(entry);\n+77 --nEntries_;\n+78 }\n+79 }\n+80 }\n+81}\n+82\n+83/* *************************************************************************\n+*/\n+84template\n+_\b8_\b5void _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bU_\bn_\bu_\bs_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs(ITERATOR firstKey, ITERATOR\n+lastKey) {\n+86 for (ITERATOR key = firstKey; key != lastKey; ++key) {\n+87 KeyMap::iterator entry = index_.find(*key);\n+88 if (!entry->second.empty())\n+89 throw std::invalid_argument(\n+90 \"Asking to remove variables from the variable index that are not unused\");\n+91 index_.erase(entry);\n+92 }\n+93}\n+94\n+95}\n+_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\n+_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n-Traits class for eliminateable factor graphs, specifies the types that result\n-from elimination,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-This is the base class for BayesTree cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const derived_ptr operator[](size_t i) const\n-Return the child at index i.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-BayesTreeCliqueBase & operator=(const BayesTreeCliqueBase &c)\n-Shallow copy assignment constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:90\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs_\bN_\bo_\bn_\bR_\be_\bc_\bu_\br_\bs_\bi_\bv_\be\n-void deleteCachedShortcutsNonRecursive()\n-Non-recursive delete cached shortcuts and marginals - internal only.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:201\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bn_\br_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn\n-size_t nrChildren() const\n-Return the number of children.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:147\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bb_\bl_\be_\bm_\bS_\bi_\bz_\be\n-int problemSize() const\n-Problem size (used for parallel traversal)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:162\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-BayesTreeCliqueBase()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\ba_\br_\be_\bn_\bt\n-derived_ptr parent() const\n-return a shared_ptr to the parent clique\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bt_\br_\be_\be_\bS_\bi_\bz_\be\n-size_t treeSize() const\n-The size of subtree rooted at this clique, i.e., nr of Cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-BayesTreeCliqueBase(const sharedConditional &conditional)\n-Construct from a conditional, leaving parent and child pointers uninitialized.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bt_\be_\bx_\b_\n-std::mutex cachedSeparatorMarginalMutex_\n-This protects Cached seperator marginal P(S) from concurrent read/writes as\n-many the functions which ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bi_\bs_\bR_\bo_\bo_\bt\n-bool isRoot() const\n-Return true if this clique is the root of a Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:144\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-BayesTreeCliqueBase(const BayesTreeCliqueBase &c)\n-Shallow copy constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b2\n-FactorGraphType marginal2(Eliminate function=EliminationTraitsType::\n-DefaultEliminate) const\n-return the marginal P(C) of the clique, using marginal caching\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bs_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl\n-FactorGraphType separatorMarginal(Eliminate function=EliminationTraitsType::\n-DefaultEliminate) const\n-return the marginal P(S) on the separator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:147\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bs_\bh_\bo_\br_\bt_\bc_\bu_\bt\n-BayesNetType shortcut(const derived_ptr &root, Eliminate\n-function=EliminationTraitsType::DefaultEliminate) const\n-return the conditional P(S|Root) on the separator given the root\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs\n-void deleteCachedShortcuts()\n-This deletes the cached shortcuts of all cliques (subtree) below this clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bs_\bh_\bo_\br_\bt_\bc_\bu_\bt_\b__\bi_\bn_\bd_\bi_\bc_\be_\bs\n-KeyVector shortcut_indices(const derived_ptr &B, const FactorGraphType &p_Cp_B)\n-const\n-Determine variable indices to keep in recursive separator shortcut calculation\n-The factor graph p_Cp_...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-const sharedConditional & conditional() const\n-Access the conditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:209\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bs_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\b__\bs_\be_\bt_\bm_\bi_\bn_\bu_\bs_\b__\bB\n-KeyVector separator_setminus_B(const derived_ptr &B) const\n-Calculate set for shortcut calculations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-print this node\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n-size_t numCachedSeparatorMarginals() const\n-Collect number of cliques with cached separator marginals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b_\n-boost::optional< FactorGraphType > cachedSeparatorMarginal_\n-This stores the Cached separator marginal P(S)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bs_\be_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n-void setEliminationResult(const typename FactorGraphType::EliminationResult\n-&eliminationResult)\n-Fill the elimination result produced during elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+FastVector< FactorIndex > FactorIndices\n+Define collection types:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\bA_\bt\n+const FactorIndices & internalAt(Key variable) const\n+Internal version of 'at' that asserts existence.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:172\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\br_\be_\bm_\bo_\bv_\be\n+void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG &factors)\n+Remove entries corresponding to the specified factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex-inl.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bU_\bn_\bu_\bs_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+void removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey)\n+Remove unused empty variables (in debug mode verifies they are empty).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex-inl.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt\n+void augment(const FG &factors, boost::optional< const FactorIndices & >\n+newFactorIndices=boost::none)\n+Augment the variable index with new factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex-inl.h:27\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n+ * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00608.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00608.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableSlots.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,55 +94,32 @@\n \n \n \n \n \n
\n \n-
ClusterTree.h File Reference
\n+
VariableSlots.cpp File Reference
\n
\n
\n-\n-

Collects factorgraph fragments defined on variable clusters, arranged in a tree. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::ClusterTree< GRAPH >
 A cluster-tree is associated with a factor graph and is defined as in Koller-Friedman: each node k represents a subset \\( C_k \\sub X \\), and the tree is family preserving, in that each factor \\( f_i \\) is associated with a single cluster and \\( scope(f_i) \\sub C_k \\). More...
 
struct  gtsam::ClusterTree< GRAPH >::Cluster
 A Cluster is just a collection of factors. More...
 
class  gtsam::EliminatableClusterTree< BAYESTREE, GRAPH >
 A cluster-tree that eliminates to a Bayes tree. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Collects factorgraph fragments defined on variable clusters, arranged in a tree.

\n-
Date
Oct 8, 2013
\n-
Author
Kai Ni
\n-
\n-Richard Roberts
\n-
\n-Frank Dellaert
\n+
Author
Richard Roberts
\n+
Date
Oct 5, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,41 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ClusterTree.h File Reference\n-Collects factorgraph fragments defined on variable clusters, arranged in a\n-tree. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>\n- A cluster-tree is associated with a factor graph and is defined as in\n- Koller-Friedman: each node k represents a subset \\( C_k \\sub X \\), and\n-\u00a0 the tree is family preserving, in that each factor \\( f_i \\) is\n- associated with a single cluster and \\( scope(f_i) \\sub C_k \\).\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n-\u00a0 A _\bC_\bl_\bu_\bs_\bt_\be_\br is just a collection of factors. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>\n-\u00a0 A cluster-tree that eliminates to a Bayes tree. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+VariableSlots.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Collects factorgraph fragments defined on variable clusters, arranged in a\n-tree.\n- Date\n- Oct 8, 2013\n Author\n- Kai Ni\n Richard Roberts\n- Frank Dellaert\n+ Date\n+ Oct 5, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh\n+ * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00611_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00611_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableIndex-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesNet-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,125 +98,151 @@\n
No Matches
\n \n \n \n \n \n
\n-
VariableIndex-inl.h
\n+
BayesNet-inst.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4* Atlanta, Georgia 30332-0415
\n+
5* All Rights Reserved
\n+
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8 * See LICENSE for the license information
\n+
8* See LICENSE for the license information
\n
9
\n-
10 * -------------------------------------------------------------------------- */
\n+
10* -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-
21#include <gtsam/base/timing.h>
\n-
22
\n-
23namespace gtsam {
\n-
24
\n-
25/* ************************************************************************* */
\n-
26template<class FG>
\n-
\n-
27void VariableIndex::augment(const FG& factors,
\n-
28 boost::optional<const FactorIndices&> newFactorIndices) {
\n-
29 gttic(VariableIndex_augment);
\n-
30
\n-
31 // Augment index for each factor
\n-
32 for (size_t i = 0; i < factors.size(); ++i) {
\n-
33 if (factors[i]) {
\n-
34 const size_t globalI =
\n-
35 newFactorIndices ? (*newFactorIndices)[i] : nFactors_;
\n-
36 for(const Key key: *factors[i]) {
\n-
37 index_[key].push_back(globalI);
\n-
38 ++nEntries_;
\n-
39 }
\n-
40 }
\n-
41
\n-
42 // Increment factor count even if factors are null, to keep indices consistent
\n-
43 if (newFactorIndices) {
\n-
44 if ((*newFactorIndices)[i] >= nFactors_)
\n-
45 nFactors_ = (*newFactorIndices)[i] + 1;
\n-
46 } else {
\n-
47 ++nFactors_;
\n-
48 }
\n-
49 }
\n-
50}
\n-
\n-
51
\n-
52/* ************************************************************************* */
\n-
53template<typename ITERATOR, class FG>
\n-
\n-
54void VariableIndex::remove(ITERATOR firstFactor, ITERATOR lastFactor,
\n-
55 const FG& factors) {
\n-
56 gttic(VariableIndex_remove);
\n+
19#pragma once
\n+
20
\n+\n+\n+
23
\n+
24#include <boost/range/adaptor/reversed.hpp>
\n+
25#include <fstream>
\n+
26#include <string>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
30/* ************************************************************************* */
\n+
31template <class CONDITIONAL>
\n+
\n+
32void BayesNet<CONDITIONAL>::print(const std::string& s,
\n+
33 const KeyFormatter& formatter) const {
\n+
34 std::cout << (s.empty() ? "" : s + " ") << std::endl;
\n+
35 std::cout << "size: " << this->size() << std::endl;
\n+
36 for (size_t i = 0; i < this->size(); i++) {
\n+
37 const auto& conditional = this->at(i);
\n+
38 std::stringstream ss;
\n+
39 ss << "conditional " << i << ": ";
\n+
40 if (conditional) conditional->print(ss.str(), formatter);
\n+
41 }
\n+
42}
\n+
\n+
43
\n+
44/* ************************************************************************* */
\n+
45template <class CONDITIONAL>
\n+
\n+
46void BayesNet<CONDITIONAL>::dot(std::ostream& os,
\n+
47 const KeyFormatter& keyFormatter,
\n+
48 const DotWriter& writer) const {
\n+
49 writer.digraphPreamble(&os);
\n+
50
\n+
51 // Create nodes for each variable in the graph
\n+
52 for (Key key : this->keys()) {
\n+
53 auto position = writer.variablePos(key);
\n+
54 writer.drawVariable(key, keyFormatter, position, &os);
\n+
55 }
\n+
56 os << "\\n";
\n
57
\n-
58 // NOTE: We intentionally do not decrement nFactors_ because the factor
\n-
59 // indices need to remain consistent. Removing factors from a factor graph
\n-
60 // does not shift the indices of other factors. Also, we keep nFactors_
\n-
61 // one greater than the highest-numbered factor referenced in a VariableIndex.
\n-
62 ITERATOR factorIndex = firstFactor;
\n-
63 size_t i = 0;
\n-
64 for (; factorIndex != lastFactor; ++factorIndex, ++i) {
\n-
65 if (i >= factors.size())
\n-
66 throw std::invalid_argument(
\n-
67 "Internal error, requested inconsistent number of factor indices and factors in VariableIndex::remove");
\n-
68 if (factors[i]) {
\n-
69 for(Key j: *factors[i]) {
\n-
70 FactorIndices& factorEntries = internalAt(j);
\n-
71 auto entry = std::find(factorEntries.begin(),
\n-
72 factorEntries.end(), *factorIndex);
\n-
73 if (entry == factorEntries.end())
\n-
74 throw std::invalid_argument(
\n-
75 "Internal error, indices and factors passed into VariableIndex::remove are not consistent with the existing variable index");
\n-
76 factorEntries.erase(entry);
\n-
77 --nEntries_;
\n-
78 }
\n-
79 }
\n-
80 }
\n-
81}
\n-
\n-
82
\n-
83/* ************************************************************************* */
\n-
84template<typename ITERATOR>
\n-
\n-
85void VariableIndex::removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey) {
\n-
86 for (ITERATOR key = firstKey; key != lastKey; ++key) {
\n-
87 KeyMap::iterator entry = index_.find(*key);
\n-
88 if (!entry->second.empty())
\n-
89 throw std::invalid_argument(
\n-
90 "Asking to remove variables from the variable index that are not unused");
\n-
91 index_.erase(entry);
\n-
92 }
\n-
93}
\n-
\n-
94
\n-
95}
\n-
Timing utilities.
\n-\n+
58 // Reverse order as typically Bayes nets stored in reverse topological sort.
\n+
59 for (auto conditional : boost::adaptors::reverse(*this)) {
\n+
60 auto frontals = conditional->frontals();
\n+
61 const Key me = frontals.front();
\n+
62 auto parents = conditional->parents();
\n+
63 for (const Key& p : parents) {
\n+
64 os << " var" << p << "->var" << me << "\\n";
\n+
65 }
\n+
66 }
\n+
67
\n+
68 os << "}";
\n+
69 std::flush(os);
\n+\n+
\n+
71
\n+
72/* ************************************************************************* */
\n+
73template <class CONDITIONAL>
\n+
\n+
74std::string BayesNet<CONDITIONAL>::dot(const KeyFormatter& keyFormatter,
\n+
75 const DotWriter& writer) const {
\n+
76 std::stringstream ss;
\n+
77 dot(ss, keyFormatter, writer);
\n+
78 return ss.str();
\n+\n+
\n+
80
\n+
81/* ************************************************************************* */
\n+
82template <class CONDITIONAL>
\n+
\n+
83void BayesNet<CONDITIONAL>::saveGraph(const std::string& filename,
\n+
\n+
84 const KeyFormatter& keyFormatter,
\n+
85 const DotWriter& writer) const {
\n+
86 std::ofstream of(filename.c_str());
\n+
87 dot(of, keyFormatter, writer);
\n+
\n+
88 of.close();
\n+
89}
\n+
\n+
90
\n+
91/* ************************************************************************* */
\n+
92template <class CONDITIONAL>
\n+\n+
94 double sum = 0.;
\n+
95 for (const auto& gc : *this) {
\n+
96 if (gc) sum += gc->logProbability(x);
\n+
97 }
\n+
98 return sum;
\n+
99}
\n+
100
\n+
101/* ************************************************************************* */
\n+
102template <class CONDITIONAL>
\n+
103double BayesNet<CONDITIONAL>::evaluate(const HybridValues& x) const {
\n+
104 return exp(-logProbability(x));
\n+
105}
\n+
106
\n+
107/* ************************************************************************* */
\n+
108
\n+
109} // namespace gtsam
\n+
\n+
\n+
Factor Graph Base Class.
\n+
Bayes network.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
const FactorIndices & internalAt(Key variable) const
Internal version of 'at' that asserts existence.
Definition VariableIndex.h:172
\n-
void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG &factors)
Remove entries corresponding to the specified factors.
Definition VariableIndex-inl.h:54
\n-
void removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey)
Remove unused empty variables (in debug mode verifies they are empty).
Definition VariableIndex-inl.h:85
\n-
void augment(const FG &factors, boost::optional< const FactorIndices & > newFactorIndices=boost::none)
Augment the variable index with new factors.
Definition VariableIndex-inl.h:27
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n+
void print(const std::string &s="BayesNet", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print out graph
Definition BayesNet-inst.h:32
\n+
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
Output to graphviz format, stream version.
Definition BayesNet-inst.h:46
\n+
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
output to file with graphviz format.
Definition BayesNet-inst.h:83
\n+
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n+
void drawVariable(Key key, const KeyFormatter &keyFormatter, const boost::optional< Vector2 > &position, std::ostream *os) const
Create a variable dot fragment.
Definition DotWriter.cpp:42
\n+
void digraphPreamble(std::ostream *os) const
Write out preamble for digraph, including size.
Definition DotWriter.cpp:36
\n+
boost::optional< Vector2 > variablePos(Key key) const
Return variable position or none.
Definition DotWriter.cpp:79
\n+
the error.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,141 +1,179 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VariableIndex-inl.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+BayesNet-inst.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4* Atlanta, Georgia 30332-0415\n+5* All Rights Reserved\n+6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8 * See LICENSE for the license information\n+8* See LICENSE for the license information\n 9\n-10 * -------------------------------------------------------------------------\n+10* -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-25/* *************************************************************************\n-*/\n-26template\n-_\b2_\b7void _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt(const FG& factors,\n-28 boost::optional newFactorIndices) {\n-29 gttic(VariableIndex_augment);\n-30\n-31 // Augment index for each factor\n-32 for (size_t i = 0; i < factors.size(); ++i) {\n-33 if (factors[i]) {\n-34 const size_t globalI =\n-35 newFactorIndices ? (*newFactorIndices)[i] : nFactors_;\n-36 for(const _\bK_\be_\by key: *factors[i]) {\n-37 index_[key].push_back(globalI);\n-38 ++nEntries_;\n-39 }\n-40 }\n-41\n-42 // Increment factor count even if factors are null, to keep indices\n-consistent\n-43 if (newFactorIndices) {\n-44 if ((*newFactorIndices)[i] >= nFactors_)\n-45 nFactors_ = (*newFactorIndices)[i] + 1;\n-46 } else {\n-47 ++nFactors_;\n-48 }\n-49 }\n-50}\n-51\n-52/* *************************************************************************\n-*/\n-53template\n-_\b5_\b4void _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\br_\be_\bm_\bo_\bv_\be(ITERATOR firstFactor, ITERATOR lastFactor,\n-55 const FG& factors) {\n-56 gttic(VariableIndex_remove);\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n+23\n+24#include \n+25#include \n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+30/* *************************************************************************\n+*/\n+31template \n+_\b3_\b2void _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s,\n+33 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter) const {\n+34 std::cout << (s.empty() ? \"\" : s + \" \") << std::endl;\n+35 std::cout << \"size: \" << this->size() << std::endl;\n+36 for (size_t i = 0; i < this->size(); i++) {\n+37 const auto& conditional = this->at(i);\n+38 std::stringstream ss;\n+39 ss << \"conditional \" << i << \": \";\n+40 if (conditional) conditional->print(ss.str(), formatter);\n+41 }\n+42}\n+43\n+44/* *************************************************************************\n+*/\n+45template \n+_\b4_\b6void _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bd_\bo_\bt(std::ostream& os,\n+47 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n+48 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n+49 writer._\bd_\bi_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\ba_\bm_\bb_\bl_\be(&os);\n+50\n+51 // Create nodes for each variable in the graph\n+52 for (_\bK_\be_\by key : this->keys()) {\n+53 auto position = writer._\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs(key);\n+54 writer._\bd_\br_\ba_\bw_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be(key, keyFormatter, position, &os);\n+55 }\n+56 os << \"\\n\";\n 57\n-58 // NOTE: We intentionally do not decrement nFactors_ because the factor\n-59 // indices need to remain consistent. Removing factors from a factor graph\n-60 // does not shift the indices of other factors. Also, we keep nFactors_\n-61 // one greater than the highest-numbered factor referenced in a\n-VariableIndex.\n-62 ITERATOR factorIndex = firstFactor;\n-63 size_t i = 0;\n-64 for (; factorIndex != lastFactor; ++factorIndex, ++i) {\n-65 if (i >= factors.size())\n-66 throw std::invalid_argument(\n-67 \"Internal error, requested inconsistent number of factor indices and factors\n-in VariableIndex::remove\");\n-68 if (factors[i]) {\n-69 for(_\bK_\be_\by j: *factors[i]) {\n-70 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& factorEntries = _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\bA_\bt(j);\n-71 auto entry = std::find(factorEntries.begin(),\n-72 factorEntries.end(), *factorIndex);\n-73 if (entry == factorEntries.end())\n-74 throw std::invalid_argument(\n-75 \"Internal error, indices and factors passed into VariableIndex::remove are\n-not consistent with the existing variable index\");\n-76 factorEntries.erase(entry);\n-77 --nEntries_;\n-78 }\n-79 }\n-80 }\n-81}\n-82\n-83/* *************************************************************************\n-*/\n-84template\n-_\b8_\b5void _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bU_\bn_\bu_\bs_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs(ITERATOR firstKey, ITERATOR\n-lastKey) {\n-86 for (ITERATOR key = firstKey; key != lastKey; ++key) {\n-87 KeyMap::iterator entry = index_.find(*key);\n-88 if (!entry->second.empty())\n-89 throw std::invalid_argument(\n-90 \"Asking to remove variables from the variable index that are not unused\");\n-91 index_.erase(entry);\n-92 }\n-93}\n-94\n-95}\n-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\n-_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n+58 // Reverse order as typically Bayes nets stored in reverse topological sort.\n+59 for (auto conditional : boost::adaptors::reverse(*this)) {\n+60 auto frontals = conditional->frontals();\n+61 const _\bK_\be_\by me = frontals.front();\n+62 auto parents = conditional->parents();\n+63 for (const _\bK_\be_\by& p : parents) {\n+64 os << \" var\" << p << \"->var\" << me << \"\\n\";\n+65 }\n+66 }\n+67\n+68 os << \"}\";\n+69 std::flush(os);\n+_\b7_\b0}\n+71\n+72/* *************************************************************************\n+*/\n+73template \n+_\b7_\b4std::string _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n+75 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n+76 std::stringstream ss;\n+77 _\bd_\bo_\bt(ss, keyFormatter, writer);\n+78 return ss.str();\n+_\b7_\b9}\n+80\n+81/* *************************************************************************\n+*/\n+82template \n+_\b8_\b3void _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n+_\b8_\b4 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n+85 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n+86 std::ofstream of(filename.c_str());\n+87 _\bd_\bo_\bt(of, keyFormatter, writer);\n+_\b8_\b8 of.close();\n+89}\n+90\n+91/* *************************************************************************\n+*/\n+92template \n+93double _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n+94 double sum = 0.;\n+95 for (const auto& gc : *this) {\n+96 if (gc) sum += gc->logProbability(x);\n+97 }\n+98 return sum;\n+99}\n+100\n+101/* *************************************************************************\n+*/\n+102template \n+103double BayesNet::evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n+104 return exp(-logProbability(x));\n+105}\n+106\n+107/* *************************************************************************\n+*/\n+108\n+109} // namespace gtsam\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+Factor Graph Base Class.\n+_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+Bayes network.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-FastVector< FactorIndex > FactorIndices\n-Define collection types:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\bA_\bt\n-const FactorIndices & internalAt(Key variable) const\n-Internal version of 'at' that asserts existence.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:172\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\br_\be_\bm_\bo_\bv_\be\n-void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG &factors)\n-Remove entries corresponding to the specified factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex-inl.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bU_\bn_\bu_\bs_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-void removeUnusedVariables(ITERATOR firstKey, ITERATOR lastKey)\n-Remove unused empty variables (in debug mode verifies they are empty).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex-inl.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt\n-void augment(const FG &factors, boost::optional< const FactorIndices & >\n-newFactorIndices=boost::none)\n-Augment the variable index with new factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex-inl.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+A BayesNet is a tree of conditionals, stored in elimination order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"BayesNet\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const override\n+print out graph\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bd_\bo_\bt\n+void dot(std::ostream &os, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n+Output to graphviz format, stream version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n+void saveGraph(const std::string &filename, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n+output to file with graphviz format.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n+DotWriter is a helper class for writing graphviz .dot files.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bd_\br_\ba_\bw_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be\n+void drawVariable(Key key, const KeyFormatter &keyFormatter, const boost::\n+optional< Vector2 > &position, std::ostream *os) const\n+Create a variable dot fragment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bd_\bi_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\ba_\bm_\bb_\bl_\be\n+void digraphPreamble(std::ostream *os) const\n+Write out preamble for digraph, including size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs\n+boost::optional< Vector2 > variablePos(Key key) const\n+Return variable position or none.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:79\n+_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+the error.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n+ * B\bBa\bay\bye\bes\bsN\bNe\bet\bt-\b-i\bin\bns\bst\bt.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00614.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00614.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesNet.h File Reference\n \n \n \n \n \n \n \n@@ -94,39 +94,46 @@\n \n \n \n \n \n
\n \n-
Factor.cpp File Reference
\n+
BayesNet.h File Reference
\n
\n
\n \n-

The base class for all factors. \n+

Bayes network. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::BayesNet< CONDITIONAL >
 A BayesNet is a tree of conditionals, stored in elimination order. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

The base class for all factors.

\n-
Author
Kai Ni
\n-
\n-Frank Dellaert
\n+

Bayes network.

\n+
Author
Frank Dellaert
\n
\n Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Factor.cpp File Reference\n-The base class for all factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+BayesNet.h File Reference\n+Bayes network. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\b _\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b _\b>\n+\u00a0 A _\bB_\ba_\by_\be_\bs_\bN_\be_\bt is a tree of conditionals, stored in elimination order.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-The base class for all factors.\n+Bayes network.\n Author\n- Kai Ni\n Frank Dellaert\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00617.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00617.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/inference-inst.h File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,87 @@\n \n \n \n \n \n
\n \n-
MetisIndex.h File Reference
\n+Namespaces |\n+Functions
\n+
inference-inst.h File Reference
\n \n
\n \n+

Contains generic inference algorithms that convert between templated graphical models, i.e., factor graphs, Bayes nets, and Bayes trees. \n+More...

\n+\n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::MetisIndex
 The MetisIndex class converts a factor graph into the Compressed Sparse Row format for use in METIS algorithms. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n

\n+Functions

template<class TREE , class RESULT >
FastVector< typename TREE::sharedFactor > gtsam::inference::EliminateTree (RESULT &result, const TREE &tree, const typename TREE::Eliminate &function)
 Eliminate an elimination tree or a Bayes tree (used internally).
 
\n

Detailed Description

\n-
Author
Andrew Melim
\n-
Date
Oct. 10, 2014
\n-
\n+

Contains generic inference algorithms that convert between templated graphical models, i.e., factor graphs, Bayes nets, and Bayes trees.

\n+
Author
Frank Dellaert
\n+
\n+Richard Roberts
\n+

Function Documentation

\n+\n+

◆ EliminateTree()

\n+\n+
\n+
\n+
\n+template<class TREE , class RESULT >
\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+
FastVector< typename TREE::sharedFactor > gtsam::inference::EliminateTree (RESULT & result,
const TREE & tree,
const typename TREE::Eliminate & function 
)
\n+
\n+\n+

Eliminate an elimination tree or a Bayes tree (used internally).

\n+

Requires TREE::BayesNetType, TREE::FactorGraphType, TREE::sharedConditional, TREE::sharedFactor, TREE::Node, TREE::sharedNode, TREE::Node::factors, TREE::Node::children.

\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,45 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-MetisIndex.h File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+inference-inst.h File Reference\n+Contains g\bge\ben\bne\ber\bri\bic\bc inference algorithms that convert between templated graphical\n+models, i.e., factor graphs, Bayes nets, and Bayes trees. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx\n-\u00a0 The _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx class converts a factor graph into the Compressed Sparse\n- Row format for use in METIS algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br< typename TREE::sharedFactor _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bT_\br_\be_\be (RESULT\n+ >\u00a0 &result, const TREE &tree, const\n+ typename TREE::Eliminate &function)\n+\u00a0 Eliminate an elimination tree or a\n+ Bayes tree (used internally).\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Contains g\bge\ben\bne\ber\bri\bic\bc inference algorithms that convert between templated graphical\n+models, i.e., factor graphs, Bayes nets, and Bayes trees.\n Author\n- Andrew Melim\n- Date\n- Oct. 10, 2014\n+ Frank Dellaert\n+ Richard Roberts\n+*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0E\bEl\bli\bim\bmi\bin\bna\bat\bte\beT\bTr\bre\bee\be(\b()\b) *\b**\b**\b**\b**\b*\n+template\n+FastVector< typename TREE::\n+sharedFactor > gtsam::inference:: ( RESULT &\u00a0 r\bre\bes\bsu\bul\blt\bt,\n+EliminateTree\n+ const TREE &\u00a0 t\btr\bre\bee\be,\n+ const typename TREE::Eliminate &\u00a0 f\bfu\bun\bnc\bct\bti\bio\bon\bn\u00a0\n+ )\n+Eliminate an elimination tree or a Bayes tree (used internally).\n+Requires TREE::BayesNetType, TREE::FactorGraphType, TREE::sharedConditional,\n+TREE::sharedFactor, TREE::Node, TREE::sharedNode, TREE::Node::factors, TREE::\n+Node::children.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00617.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00617.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00617 = [\n- [\"gtsam::MetisIndex\", \"a03676.html\", \"a03676\"]\n+ [\"EliminateTree\", \"a00617.html#ae955942fde34b4cf32ac3573a1aa1e29\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00617_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00617_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/inference-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,113 +98,109 @@\n
No Matches
\n \n \n \n \n \n
\n-
MetisIndex.h
\n+
inference-inst.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4* Atlanta, Georgia 30332-0415
\n+
5* All Rights Reserved
\n+
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8 * See LICENSE for the license information
\n-
9 * -------------------------------------------------------------------------- */
\n-
10
\n-
17#pragma once
\n-
18
\n-
19
\n-
20#include <gtsam/inference/Key.h>
\n-\n-
22#include <gtsam/base/types.h>
\n-
23#include <gtsam/base/timing.h>
\n+
8* See LICENSE for the license information
\n+
9
\n+
10* -------------------------------------------------------------------------- */
\n+
11
\n+
20#pragma once
\n+
21
\n+
22#include <boost/shared_ptr.hpp>
\n+
23#include <utility>
\n
24
\n-
25// Boost bimap generates many ugly warnings in CLANG
\n-
26#ifdef __clang__
\n-
27# pragma clang diagnostic push
\n-
28# pragma clang diagnostic ignored "-Wredeclared-class-member"
\n-
29#endif
\n-
30#include <boost/bimap.hpp>
\n-
31#ifdef __clang__
\n-
32# pragma clang diagnostic pop
\n-
33#endif
\n-
34
\n-
35#include <vector>
\n-
36
\n-
37namespace gtsam {
\n-
\n-
45class GTSAM_EXPORT MetisIndex {
\n-
46public:
\n-
47 typedef boost::shared_ptr<MetisIndex> shared_ptr;
\n-
48 typedef boost::bimap<Key, int32_t> bm_type;
\n-
49
\n-
50private:
\n-
51 std::vector<int32_t> xadj_; // Index of node's adjacency list in adj
\n-
52 std::vector<int32_t> adj_; // Stores ajacency lists of all nodes, appended into a single vector
\n-
53 boost::bimap<Key, int32_t> intKeyBMap_; // Stores Key <-> integer value relationship
\n-
54 size_t nKeys_;
\n-
55
\n-
56public:
\n-
59
\n-
\n-\n-
62 nKeys_(0) {
\n-
63 }
\n-
\n-
64
\n-
65 template<class FACTORGRAPH>
\n-
66 MetisIndex(const FACTORGRAPH& factorGraph) :
\n-
67 nKeys_(0) {
\n-
68 augment(factorGraph);
\n-
69 }
\n-
70
\n-
71 ~MetisIndex() {
\n-
72 }
\n-
76
\n-
81 template<class FACTORGRAPH>
\n-
82 void augment(const FACTORGRAPH& factors);
\n-
83
\n-
84 const std::vector<int32_t>& xadj() const {
\n-
85 return xadj_;
\n-
86 }
\n-
87 const std::vector<int32_t>& adj() const {
\n-
88 return adj_;
\n-
89 }
\n-
90 size_t nValues() const {
\n-
91 return nKeys_;
\n-
92 }
\n-
93 Key intToKey(int32_t value) const {
\n-
94 assert(value >= 0);
\n-
95 return intKeyBMap_.right.find(value)->second;
\n-
96 }
\n-
97
\n-
99};
\n-
\n-
100
\n-
101} // \\ namesace gtsam
\n-
102
\n-\n-
Typedefs for easier changing of types.
\n-
Timing utilities.
\n-
Factor Graph Base Class.
\n-\n-\n+\n+\n+
27
\n+
28namespace gtsam {
\n+
29 namespace inference {
\n+
30
\n+
31 namespace {
\n+
32 /* ************************************************************************* */
\n+
33 template<class TREE>
\n+
34 struct EliminationData {
\n+
35 EliminationData* const parentData;
\n+
36 FastVector<typename TREE::sharedFactor> childFactors;
\n+
37 EliminationData(EliminationData* _parentData, size_t nChildren) :
\n+
38 parentData(_parentData) { childFactors.reserve(nChildren); }
\n+
39 };
\n+
40
\n+
41 /* ************************************************************************* */
\n+
42 template<class TREE>
\n+
43 EliminationData<TREE> eliminationPreOrderVisitor(
\n+
44 const typename TREE::sharedNode& node, EliminationData<TREE>& parentData)
\n+
45 {
\n+
46 // This function is called before visiting the children. Here, we create this node's data,
\n+
47 // which includes a pointer to the parent data and space for the factors of the children.
\n+
48 return EliminationData<TREE>(&parentData, node->children.size());
\n+
49 }
\n+
50
\n+
51 /* ************************************************************************* */
\n+
52 template<class TREE, class RESULT>
\n+
53 struct EliminationPostOrderVisitor
\n+
54 {
\n+
55 RESULT& result;
\n+
56 const typename TREE::Eliminate& eliminationFunction;
\n+
57 EliminationPostOrderVisitor(RESULT& result, const typename TREE::Eliminate& eliminationFunction) :
\n+
58 result(result), eliminationFunction(eliminationFunction) {}
\n+
59 void operator()(const typename TREE::sharedNode& node, EliminationData<TREE>& myData)
\n+
60 {
\n+
61 // Call eliminate on the node and add the result to the parent's gathered factors
\n+
62 typename TREE::sharedFactor childFactor = node->eliminate(result, eliminationFunction, myData.childFactors);
\n+
63 if(childFactor && !childFactor->empty())
\n+
64 myData.parentData->childFactors.push_back(childFactor);
\n+
65 }
\n+
66 };
\n+
67 }
\n+
68
\n+
69 /* ************************************************************************* */
\n+
73 template<class TREE, class RESULT>
\n+
74 FastVector<typename TREE::sharedFactor>
\n+
\n+
75 EliminateTree(RESULT& result, const TREE& tree, const typename TREE::Eliminate& function)
\n+
76 {
\n+
77 // Do elimination using a depth-first traversal. During the pre-order visit (see
\n+
78 // eliminationPreOrderVisitor), we store a pointer to the parent data (where we'll put the
\n+
79 // remaining factor) and reserve a vector of factors to store the children elimination
\n+
80 // results. During the post-order visit (see eliminationPostOrderVisitor), we call dense
\n+
81 // elimination (using the gathered child factors) and store the result in the parent's
\n+
82 // gathered factors.
\n+
83 EliminationData<TREE> rootData(0, tree.roots().size());
\n+
84 EliminationPostOrderVisitor<TREE,RESULT> visitorPost(result, function);
\n+
85 treeTraversal::DepthFirstForest(tree, rootData, eliminationPreOrderVisitor<TREE>, visitorPost);
\n+
86
\n+
87 // Return remaining factors
\n+
88 return rootData.childFactors;
\n+
89 }
\n+
\n+
90
\n+
91 }
\n+
92}
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+\n+
FastVector< typename TREE::sharedFactor > EliminateTree(RESULT &result, const TREE &tree, const typename TREE::Eliminate &function)
Eliminate an elimination tree or a Bayes tree (used internally).
Definition inference-inst.h:75
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
The MetisIndex class converts a factor graph into the Compressed Sparse Row format for use in METIS a...
Definition MetisIndex.h:45
\n-
MetisIndex()
Default constructor, creates empty MetisIndex.
Definition MetisIndex.h:61
\n+
void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:77
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,117 +1,127 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MetisIndex.h\n+inference-inst.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4* Atlanta, Georgia 30332-0415\n+5* All Rights Reserved\n+6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8 * See LICENSE for the license information\n-9 * -------------------------------------------------------------------------\n+8* See LICENSE for the license information\n+9\n+10* -------------------------------------------------------------------------\n - */\n-10\n-17#pragma once\n-18\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n+11\n+20#pragma once\n+21\n+22#include \n+23#include \n 24\n-25// Boost bimap generates many ugly warnings in CLANG\n-26#ifdef __clang__\n-27# pragma clang diagnostic push\n-28# pragma clang diagnostic ignored \"-Wredeclared-class-member\"\n-29#endif\n-30#include \n-31#ifdef __clang__\n-32# pragma clang diagnostic pop\n-33#endif\n-34\n-35#include \n-36\n-37namespace _\bg_\bt_\bs_\ba_\bm {\n-_\b4_\b5class GTSAM_EXPORT _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx {\n-46public:\n-47 typedef boost::shared_ptr shared_ptr;\n-48 typedef boost::bimap bm_type;\n-49\n-50private:\n-51 std::vector xadj_; // Index of node's adjacency list in adj\n-52 std::vector adj_; // Stores ajacency lists of all nodes, appended\n-into a single vector\n-53 boost::bimap intKeyBMap_; // Stores Key <-> integer value\n-relationship\n-54 size_t nKeys_;\n-55\n-56public:\n-59\n-_\b6_\b1 _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx() :\n-62 nKeys_(0) {\n-63 }\n-64\n-65 template\n-66 _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx(const FACTORGRAPH& factorGraph) :\n-67 nKeys_(0) {\n-68 augment(factorGraph);\n-69 }\n-70\n-71 ~MetisIndex() {\n-72 }\n-76\n-81 template\n-82 void augment(const FACTORGRAPH& factors);\n-83\n-84 const std::vector& xadj() const {\n-85 return xadj_;\n-86 }\n-87 const std::vector& adj() const {\n-88 return adj_;\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29 namespace inference {\n+30\n+31 namespace {\n+32 /* *************************************************************************\n+*/\n+33 template\n+34 struct EliminationData {\n+35 EliminationData* const parentData;\n+36 FastVector childFactors;\n+37 EliminationData(EliminationData* _parentData, size_t nChildren) :\n+38 parentData(_parentData) { childFactors.reserve(nChildren); }\n+39 };\n+40\n+41 /* *************************************************************************\n+*/\n+42 template\n+43 EliminationData eliminationPreOrderVisitor(\n+44 const typename TREE::sharedNode& node, EliminationData& parentData)\n+45 {\n+46 // This function is called before visiting the children. Here, we create\n+this node's data,\n+47 // which includes a pointer to the parent data and space for the factors of\n+the children.\n+48 return EliminationData(&parentData, node->children.size());\n+49 }\n+50\n+51 /* *************************************************************************\n+*/\n+52 template\n+53 struct EliminationPostOrderVisitor\n+54 {\n+55 RESULT& result;\n+56 const typename TREE::Eliminate& eliminationFunction;\n+57 EliminationPostOrderVisitor(RESULT& result, const typename TREE::Eliminate&\n+eliminationFunction) :\n+58 result(result), eliminationFunction(eliminationFunction) {}\n+59 void operator()(const typename TREE::sharedNode& node,\n+EliminationData& myData)\n+60 {\n+61 // Call eliminate on the node and add the result to the parent's gathered\n+factors\n+62 typename TREE::sharedFactor childFactor = node->eliminate(result,\n+eliminationFunction, myData.childFactors);\n+63 if(childFactor && !childFactor->empty())\n+64 myData.parentData->childFactors.push_back(childFactor);\n+65 }\n+66 };\n+67 }\n+68\n+69 /* *************************************************************************\n+*/\n+73 template\n+74 FastVector\n+_\b7_\b5 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bT_\br_\be_\be(RESULT& result, const TREE& tree, const typename TREE::\n+Eliminate& function)\n+76 {\n+77 // Do elimination using a depth-first traversal. During the pre-order visit\n+(see\n+78 // eliminationPreOrderVisitor), we store a pointer to the parent data (where\n+we'll put the\n+79 // remaining factor) and reserve a vector of factors to store the children\n+elimination\n+80 // results. During the post-order visit (see eliminationPostOrderVisitor),\n+we call dense\n+81 // elimination (using the gathered child factors) and store the result in\n+the parent's\n+82 // gathered factors.\n+83 EliminationData rootData(0, tree.roots().size());\n+84 EliminationPostOrderVisitor visitorPost(result, function);\n+85 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(tree, rootData,\n+eliminationPreOrderVisitor, visitorPost);\n+86\n+87 // Return remaining factors\n+88 return rootData.childFactors;\n 89 }\n-90 size_t nValues() const {\n-91 return nKeys_;\n-92 }\n-93 _\bK_\be_\by intToKey(int32_t value) const {\n-94 assert(value >= 0);\n-95 return intKeyBMap_.right.find(value)->second;\n-96 }\n-97\n-99};\n-100\n-101} // \\ namesace gtsam\n-102\n-103#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh>\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n-_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n-_\bK_\be_\by_\b._\bh\n+90\n+91 }\n+92}\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bT_\br_\be_\be\n+FastVector< typename TREE::sharedFactor > EliminateTree(RESULT &result, const\n+TREE &tree, const typename TREE::Eliminate &function)\n+Eliminate an elimination tree or a Bayes tree (used internally).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn inference-inst.h:75\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx\n-The MetisIndex class converts a factor graph into the Compressed Sparse Row\n-format for use in METIS a...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MetisIndex.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx\n-MetisIndex()\n-Default constructor, creates empty MetisIndex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MetisIndex.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt\n+void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre,\n+VISITOR_POST &visitorPost)\n+Traverse a forest depth-first with pre-order and post-order visits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:77\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00620.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00620.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/inference-inst.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex-inl.h File Reference\n \n \n \n \n \n \n \n@@ -94,87 +94,34 @@\n \n \n \n \n \n
\n \n-
inference-inst.h File Reference
\n+Namespaces
\n+
MetisIndex-inl.h File Reference
\n \n
\n \n-

Contains generic inference algorithms that convert between templated graphical models, i.e., factor graphs, Bayes nets, and Bayes trees. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n

\n-Functions

template<class TREE , class RESULT >
FastVector< typename TREE::sharedFactor > gtsam::inference::EliminateTree (RESULT &result, const TREE &tree, const typename TREE::Eliminate &function)
 Eliminate an elimination tree or a Bayes tree (used internally).
 
\n

Detailed Description

\n-

Contains generic inference algorithms that convert between templated graphical models, i.e., factor graphs, Bayes nets, and Bayes trees.

\n-
Author
Frank Dellaert
\n-
\n-Richard Roberts
\n-

Function Documentation

\n-\n-

◆ EliminateTree()

\n-\n-
\n-
\n-
\n-template<class TREE , class RESULT >
\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-
FastVector< typename TREE::sharedFactor > gtsam::inference::EliminateTree (RESULT & result,
const TREE & tree,
const typename TREE::Eliminate & function 
)
\n-
\n-\n-

Eliminate an elimination tree or a Bayes tree (used internally).

\n-

Requires TREE::BayesNetType, TREE::FactorGraphType, TREE::sharedConditional, TREE::sharedFactor, TREE::Node, TREE::sharedNode, TREE::Node::factors, TREE::Node::children.

\n-\n-
\n-
\n-
\n+
Author
Andrew Melim
\n+
Date
Oct. 10, 2014
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,45 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-inference-inst.h File Reference\n-Contains g\bge\ben\bne\ber\bri\bic\bc inference algorithms that convert between templated graphical\n-models, i.e., factor graphs, Bayes nets, and Bayes trees. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+MetisIndex-inl.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br< typename TREE::sharedFactor _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bT_\br_\be_\be (RESULT\n- >\u00a0 &result, const TREE &tree, const\n- typename TREE::Eliminate &function)\n-\u00a0 Eliminate an elimination tree or a\n- Bayes tree (used internally).\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Contains g\bge\ben\bne\ber\bri\bic\bc inference algorithms that convert between templated graphical\n-models, i.e., factor graphs, Bayes nets, and Bayes trees.\n Author\n- Frank Dellaert\n- Richard Roberts\n-*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0E\bEl\bli\bim\bmi\bin\bna\bat\bte\beT\bTr\bre\bee\be(\b()\b) *\b**\b**\b**\b**\b*\n-template\n-FastVector< typename TREE::\n-sharedFactor > gtsam::inference:: ( RESULT &\u00a0 r\bre\bes\bsu\bul\blt\bt,\n-EliminateTree\n- const TREE &\u00a0 t\btr\bre\bee\be,\n- const typename TREE::Eliminate &\u00a0 f\bfu\bun\bnc\bct\bti\bio\bon\bn\u00a0\n- )\n-Eliminate an elimination tree or a Bayes tree (used internally).\n-Requires TREE::BayesNetType, TREE::FactorGraphType, TREE::sharedConditional,\n-TREE::sharedFactor, TREE::Node, TREE::sharedNode, TREE::Node::factors, TREE::\n-Node::children.\n+ Andrew Melim\n+ Date\n+ Oct. 10, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00620_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00620_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/inference-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,109 +98,104 @@\n
No Matches
\n \n \n \n \n \n
\n-
inference-inst.h
\n+
MetisIndex-inl.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4* Atlanta, Georgia 30332-0415
\n-
5* All Rights Reserved
\n-
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8* See LICENSE for the license information
\n+
8 * See LICENSE for the license information
\n
9
\n-
10* -------------------------------------------------------------------------- */
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <boost/shared_ptr.hpp>
\n-
23#include <utility>
\n+
18#pragma once
\n+
19
\n+
20#include <map>
\n+
21#include <vector>
\n+
22
\n+
23namespace gtsam {
\n
24
\n-\n-\n-
27
\n-
28namespace gtsam {
\n-
29 namespace inference {
\n-
30
\n-
31 namespace {
\n-
32 /* ************************************************************************* */
\n-
33 template<class TREE>
\n-
34 struct EliminationData {
\n-
35 EliminationData* const parentData;
\n-
36 FastVector<typename TREE::sharedFactor> childFactors;
\n-
37 EliminationData(EliminationData* _parentData, size_t nChildren) :
\n-
38 parentData(_parentData) { childFactors.reserve(nChildren); }
\n-
39 };
\n-
40
\n-
41 /* ************************************************************************* */
\n-
42 template<class TREE>
\n-
43 EliminationData<TREE> eliminationPreOrderVisitor(
\n-
44 const typename TREE::sharedNode& node, EliminationData<TREE>& parentData)
\n-
45 {
\n-
46 // This function is called before visiting the children. Here, we create this node's data,
\n-
47 // which includes a pointer to the parent data and space for the factors of the children.
\n-
48 return EliminationData<TREE>(&parentData, node->children.size());
\n-
49 }
\n-
50
\n-
51 /* ************************************************************************* */
\n-
52 template<class TREE, class RESULT>
\n-
53 struct EliminationPostOrderVisitor
\n-
54 {
\n-
55 RESULT& result;
\n-
56 const typename TREE::Eliminate& eliminationFunction;
\n-
57 EliminationPostOrderVisitor(RESULT& result, const typename TREE::Eliminate& eliminationFunction) :
\n-
58 result(result), eliminationFunction(eliminationFunction) {}
\n-
59 void operator()(const typename TREE::sharedNode& node, EliminationData<TREE>& myData)
\n-
60 {
\n-
61 // Call eliminate on the node and add the result to the parent's gathered factors
\n-
62 typename TREE::sharedFactor childFactor = node->eliminate(result, eliminationFunction, myData.childFactors);
\n-
63 if(childFactor && !childFactor->empty())
\n-
64 myData.parentData->childFactors.push_back(childFactor);
\n-
65 }
\n-
66 };
\n-
67 }
\n-
68
\n-
69 /* ************************************************************************* */
\n-
73 template<class TREE, class RESULT>
\n-
74 FastVector<typename TREE::sharedFactor>
\n-
\n-
75 EliminateTree(RESULT& result, const TREE& tree, const typename TREE::Eliminate& function)
\n-
76 {
\n-
77 // Do elimination using a depth-first traversal. During the pre-order visit (see
\n-
78 // eliminationPreOrderVisitor), we store a pointer to the parent data (where we'll put the
\n-
79 // remaining factor) and reserve a vector of factors to store the children elimination
\n-
80 // results. During the post-order visit (see eliminationPostOrderVisitor), we call dense
\n-
81 // elimination (using the gathered child factors) and store the result in the parent's
\n-
82 // gathered factors.
\n-
83 EliminationData<TREE> rootData(0, tree.roots().size());
\n-
84 EliminationPostOrderVisitor<TREE,RESULT> visitorPost(result, function);
\n-
85 treeTraversal::DepthFirstForest(tree, rootData, eliminationPreOrderVisitor<TREE>, visitorPost);
\n-
86
\n-
87 // Return remaining factors
\n-
88 return rootData.childFactors;
\n-
89 }
\n-
\n-
90
\n-
91 }
\n-
92}
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-\n-
FastVector< typename TREE::sharedFactor > EliminateTree(RESULT &result, const TREE &tree, const typename TREE::Eliminate &function)
Eliminate an elimination tree or a Bayes tree (used internally).
Definition inference-inst.h:75
\n+
25/* ************************************************************************* */
\n+
26template<class FACTORGRAPH>
\n+
\n+
27void MetisIndex::augment(const FACTORGRAPH& factors) {
\n+
28 std::map<int32_t, std::set<int32_t> > iAdjMap; // Stores a set of keys that are adjacent to key x, with adjMap.first
\n+
29 std::map<int32_t, std::set<int32_t> >::iterator iAdjMapIt;
\n+
30 std::set<Key> keySet;
\n+
31
\n+
32 /* ********** Convert to CSR format ********** */
\n+
33 // Assuming that vertex numbering starts from 0 (C style),
\n+
34 // then the adjacency list of vertex i is stored in array adjncy
\n+
35 // starting at index xadj[i] and ending at(but not including)
\n+
36 // index xadj[i + 1](i.e., adjncy[xadj[i]] through
\n+
37 // and including adjncy[xadj[i + 1] - 1]).
\n+
38 int32_t keyCounter = 0;
\n+
39
\n+
40 // First: Record a copy of each key inside the factorgraph and create a
\n+
41 // key to integer mapping. This is referenced during the adjaceny step
\n+
42 for (size_t i = 0; i < factors.size(); i++) {
\n+
43 if (factors[i]) {
\n+
44 for(const Key& key: *factors[i]) {
\n+
45 keySet.insert(keySet.end(), key); // Keep a track of all unique keys
\n+
46 if (intKeyBMap_.left.find(key) == intKeyBMap_.left.end()) {
\n+
47 intKeyBMap_.insert(bm_type::value_type(key, keyCounter));
\n+
48 keyCounter++;
\n+
49 }
\n+
50 }
\n+
51 }
\n+
52 }
\n+
53
\n+
54 // Create an adjacency mapping that stores the set of all adjacent keys for every key
\n+
55 for (size_t i = 0; i < factors.size(); i++) {
\n+
56 if (factors[i]) {
\n+
57 for(const Key& k1: *factors[i])
\n+
58 for(const Key& k2: *factors[i])
\n+
59 if (k1 != k2) {
\n+
60 // Store both in Key and int32_t format
\n+
61 int i = intKeyBMap_.left.at(k1);
\n+
62 int j = intKeyBMap_.left.at(k2);
\n+
63 iAdjMap[i].insert(iAdjMap[i].end(), j);
\n+
64 }
\n+
65 }
\n+
66 }
\n+
67
\n+
68 // Number of keys referenced in this factor graph
\n+
69 nKeys_ = keySet.size();
\n+
70
\n+
71 xadj_.push_back(0); // Always set the first index to zero
\n+
72 for (iAdjMapIt = iAdjMap.begin(); iAdjMapIt != iAdjMap.end(); ++iAdjMapIt) {
\n+
73 std::vector<int32_t> temp;
\n+
74 // Copy from the FastSet into a temporary vector
\n+
75 std::copy(iAdjMapIt->second.begin(), iAdjMapIt->second.end(),
\n+
76 std::back_inserter(temp));
\n+
77 // Insert each index's set in order by appending them to the end of adj_
\n+
78 adj_.insert(adj_.end(), temp.begin(), temp.end());
\n+
79 //adj_.push_back(temp);
\n+
80 xadj_.push_back((int32_t) adj_.size());
\n+
81 }
\n+
82}
\n+
\n+
83
\n+
84} // \\ gtsam
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:77
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
void augment(const FACTORGRAPH &factors)
Augment the variable index with new factors.
Definition MetisIndex-inl.h:27
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,127 +1,105 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-inference-inst.h\n+MetisIndex-inl.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4* Atlanta, Georgia 30332-0415\n-5* All Rights Reserved\n-6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8* See LICENSE for the license information\n+8 * See LICENSE for the license information\n 9\n-10* -------------------------------------------------------------------------\n+10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include \n-23#include \n+18#pragma once\n+19\n+20#include \n+21#include \n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n 24\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29 namespace inference {\n-30\n-31 namespace {\n-32 /* *************************************************************************\n+25/* *************************************************************************\n */\n-33 template\n-34 struct EliminationData {\n-35 EliminationData* const parentData;\n-36 FastVector childFactors;\n-37 EliminationData(EliminationData* _parentData, size_t nChildren) :\n-38 parentData(_parentData) { childFactors.reserve(nChildren); }\n-39 };\n-40\n-41 /* *************************************************************************\n-*/\n-42 template\n-43 EliminationData eliminationPreOrderVisitor(\n-44 const typename TREE::sharedNode& node, EliminationData& parentData)\n-45 {\n-46 // This function is called before visiting the children. Here, we create\n-this node's data,\n-47 // which includes a pointer to the parent data and space for the factors of\n-the children.\n-48 return EliminationData(&parentData, node->children.size());\n+26template\n+_\b2_\b7void _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt(const FACTORGRAPH& factors) {\n+28 std::map > iAdjMap; // Stores a set of keys that\n+are adjacent to key x, with adjMap.first\n+29 std::map >::iterator iAdjMapIt;\n+30 std::set keySet;\n+31\n+32 /* ********** Convert to CSR format ********** */\n+33 // Assuming that vertex numbering starts from 0 (C style),\n+34 // then the adjacency list of vertex i is stored in array adjncy\n+35 // starting at index xadj[i] and ending at(but not including)\n+36 // index xadj[i + 1](i.e., adjncy[xadj[i]] through\n+37 // and including adjncy[xadj[i + 1] - 1]).\n+38 int32_t keyCounter = 0;\n+39\n+40 // First: Record a copy of each key inside the factorgraph and create a\n+41 // key to integer mapping. This is referenced during the adjaceny step\n+42 for (size_t i = 0; i < factors.size(); i++) {\n+43 if (factors[i]) {\n+44 for(const _\bK_\be_\by& key: *factors[i]) {\n+45 keySet.insert(keySet.end(), key); // Keep a track of all unique keys\n+46 if (intKeyBMap_.left.find(key) == intKeyBMap_.left.end()) {\n+47 intKeyBMap_.insert(bm_type::value_type(key, keyCounter));\n+48 keyCounter++;\n 49 }\n-50\n-51 /* *************************************************************************\n-*/\n-52 template\n-53 struct EliminationPostOrderVisitor\n-54 {\n-55 RESULT& result;\n-56 const typename TREE::Eliminate& eliminationFunction;\n-57 EliminationPostOrderVisitor(RESULT& result, const typename TREE::Eliminate&\n-eliminationFunction) :\n-58 result(result), eliminationFunction(eliminationFunction) {}\n-59 void operator()(const typename TREE::sharedNode& node,\n-EliminationData& myData)\n-60 {\n-61 // Call eliminate on the node and add the result to the parent's gathered\n-factors\n-62 typename TREE::sharedFactor childFactor = node->eliminate(result,\n-eliminationFunction, myData.childFactors);\n-63 if(childFactor && !childFactor->empty())\n-64 myData.parentData->childFactors.push_back(childFactor);\n+50 }\n+51 }\n+52 }\n+53\n+54 // Create an adjacency mapping that stores the set of all adjacent keys for\n+every key\n+55 for (size_t i = 0; i < factors.size(); i++) {\n+56 if (factors[i]) {\n+57 for(const _\bK_\be_\by& k1: *factors[i])\n+58 for(const _\bK_\be_\by& k2: *factors[i])\n+59 if (k1 != k2) {\n+60 // Store both in Key and int32_t format\n+61 int i = intKeyBMap_.left.at(k1);\n+62 int j = intKeyBMap_.left.at(k2);\n+63 iAdjMap[i].insert(iAdjMap[i].end(), j);\n+64 }\n 65 }\n-66 };\n-67 }\n-68\n-69 /* *************************************************************************\n-*/\n-73 template\n-74 FastVector\n-_\b7_\b5 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bT_\br_\be_\be(RESULT& result, const TREE& tree, const typename TREE::\n-Eliminate& function)\n-76 {\n-77 // Do elimination using a depth-first traversal. During the pre-order visit\n-(see\n-78 // eliminationPreOrderVisitor), we store a pointer to the parent data (where\n-we'll put the\n-79 // remaining factor) and reserve a vector of factors to store the children\n-elimination\n-80 // results. During the post-order visit (see eliminationPostOrderVisitor),\n-we call dense\n-81 // elimination (using the gathered child factors) and store the result in\n-the parent's\n-82 // gathered factors.\n-83 EliminationData rootData(0, tree.roots().size());\n-84 EliminationPostOrderVisitor visitorPost(result, function);\n-85 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(tree, rootData,\n-eliminationPreOrderVisitor, visitorPost);\n-86\n-87 // Return remaining factors\n-88 return rootData.childFactors;\n-89 }\n-90\n-91 }\n-92}\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bT_\br_\be_\be\n-FastVector< typename TREE::sharedFactor > EliminateTree(RESULT &result, const\n-TREE &tree, const typename TREE::Eliminate &function)\n-Eliminate an elimination tree or a Bayes tree (used internally).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn inference-inst.h:75\n+66 }\n+67\n+68 // Number of keys referenced in this factor graph\n+69 nKeys_ = keySet.size();\n+70\n+71 xadj_.push_back(0); // Always set the first index to zero\n+72 for (iAdjMapIt = iAdjMap.begin(); iAdjMapIt != iAdjMap.end(); ++iAdjMapIt) {\n+73 std::vector temp;\n+74 // Copy from the FastSet into a temporary vector\n+75 std::copy(iAdjMapIt->second.begin(), iAdjMapIt->second.end(),\n+76 std::back_inserter(temp));\n+77 // Insert each index's set in order by appending them to the end of adj_\n+78 adj_.insert(adj_.end(), temp.begin(), temp.end());\n+79 //adj_.push_back(temp);\n+80 xadj_.push_back((int32_t) adj_.size());\n+81 }\n+82}\n+83\n+84} // \\ gtsam\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt\n-void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre,\n-VISITOR_POST &visitorPost)\n-Traverse a forest depth-first with pre-order and post-order visits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt\n+void augment(const FACTORGRAPH &factors)\n+Augment the variable index with new factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MetisIndex-inl.h:27\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00623.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00623.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminateableFactorGraph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree-inst.h File Reference\n \n \n \n \n \n \n \n@@ -96,46 +96,48 @@\n \n \n \n
\n \n-
EliminateableFactorGraph.h File Reference
\n+
ClusterTree-inst.h File Reference
\n
\n
\n \n-

Variable elimination algorithms for factor graphs. \n+

Collects factorgraph fragments defined on variable clusters, arranged in a tree. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n \n-\n-\n+\n \n

\n Classes

struct  gtsam::EliminationTraits< GRAPH >
 Traits class for eliminateable factor graphs, specifies the types that result from elimination, etc. More...
struct  gtsam::EliminationData< CLUSTERTREE >
 
class  gtsam::EliminateableFactorGraph< FACTOR_GRAPH >
 EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms. More...
class  gtsam::EliminationData< CLUSTERTREE >::EliminationPostOrderVisitor
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Variable elimination algorithms for factor graphs.

\n-
Author
Richard Roberts
\n-
Date
Apr 21, 2013
\n+

Collects factorgraph fragments defined on variable clusters, arranged in a tree.

\n+
Date
Oct 8, 2013
\n+
Author
Kai Ni
\n+
\n+Richard Roberts
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-EliminateableFactorGraph.h File Reference\n-Variable elimination algorithms for factor graphs. _\bM_\bo_\br_\be_\b._\b._\b.\n+ClusterTree-inst.h File Reference\n+Collects factorgraph fragments defined on variable clusters, arranged in a\n+tree. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>\n-\u00a0 Traits class for eliminateable factor graphs, specifies the types that\n- result from elimination, etc. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba_\b<_\b _\bC_\bL_\bU_\bS_\bT_\bE_\bR_\bT_\bR_\bE_\bE_\b _\b>\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bF_\bA_\bC_\bT_\bO_\bR_\b__\bG_\bR_\bA_\bP_\bH_\b _\b>\n-\u00a0 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh is a base class for factor graphs that\n- contains elimination algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba_\b<_\b _\bC_\bL_\bU_\bS_\bT_\bE_\bR_\bT_\bR_\bE_\bE_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\bt_\bO_\br_\bd_\be_\br_\bV_\bi_\bs_\bi_\bt_\bo_\br\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Variable elimination algorithms for factor graphs.\n+Collects factorgraph fragments defined on variable clusters, arranged in a\n+tree.\n+ Date\n+ Oct 8, 2013\n Author\n+ Kai Ni\n Richard Roberts\n- Date\n- Apr 21, 2013\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00623.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00623.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00623 = [\n- [\"gtsam::EliminationTraits< GRAPH >\", \"a03548.html\", null],\n- [\"gtsam::EliminateableFactorGraph< FACTOR_GRAPH >\", \"a03580.html\", \"a03580\"]\n+ [\"gtsam::EliminationData< CLUSTERTREE >\", \"a03556.html\", \"a03556\"],\n+ [\"gtsam::EliminationData< CLUSTERTREE >::EliminationPostOrderVisitor\", \"a03560.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00623_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00623_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminateableFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,250 +98,357 @@\n
No Matches
\n \n \n \n \n \n
\n-
EliminateableFactorGraph.h
\n+
ClusterTree-inst.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
7
\n-
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n+Go to the documentation of this file.
1
\n+
10#pragma once
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <boost/shared_ptr.hpp>
\n-
22#include <functional>
\n-
23#include <boost/variant.hpp>
\n-
24#include <boost/optional.hpp>
\n-
25
\n-\n-\n-
28
\n-
29namespace gtsam {
\n-
30
\n-
34 template<class GRAPH>
\n-
\n-\n-
36 {
\n-
37 // Template for deriving:
\n-
38 // typedef MyFactor FactorType; ///< Type of factors in factor graph (e.g. GaussianFactor)
\n-
39 // typedef MyFactorGraphType FactorGraphType; ///< Type of the factor graph (e.g. GaussianFactorGraph)
\n-
40 // typedef MyConditional ConditionalType; ///< Type of conditionals from elimination (e.g. GaussianConditional)
\n-
41 // typedef MyBayesNet BayesNetType; ///< Type of Bayes net from sequential elimination (e.g. GaussianBayesNet)
\n-
42 // typedef MyEliminationTree EliminationTreeType; ///< Type of elimination tree (e.g. GaussianEliminationTree)
\n-
43 // typedef MyBayesTree BayesTreeType; ///< Type of Bayes tree (e.g. GaussianBayesTree)
\n-
44 // typedef MyJunctionTree JunctionTreeType; ///< Type of Junction tree (e.g. GaussianJunctionTree)
\n-
45 // static pair<shared_ptr<ConditionalType>, shared_ptr<FactorType>
\n-
46 // DefaultEliminate(
\n-
47 // const MyFactorGraph& factors, const Ordering& keys); ///< The default dense elimination function
\n-
48 };
\n-
\n-
49
\n-
50
\n-
55 template<class FACTOR_GRAPH>
\n-
\n-\n-
57 {
\n-
58 private:
\n-\n-
60 typedef FACTOR_GRAPH FactorGraphType;
\n-
61 // Base factor type stored in this graph (private because derived classes will get this from
\n-
62 // their FactorGraph base class)
\n-
63 typedef typename EliminationTraits<FactorGraphType>::FactorType _FactorType;
\n-
64
\n-
65 public:
\n-\n-
68
\n-
70 typedef typename EliminationTraitsType::ConditionalType ConditionalType;
\n-
71
\n-
73 typedef typename EliminationTraitsType::BayesNetType BayesNetType;
\n-
74
\n-
76 typedef typename EliminationTraitsType::EliminationTreeType EliminationTreeType;
\n+\n+\n+\n+
15#include <gtsam/base/timing.h>
\n+\n+
17
\n+
18#ifdef GTSAM_USE_TBB
\n+
19#include <mutex>
\n+
20#endif
\n+
21
\n+
22namespace gtsam {
\n+
23
\n+
24/* ************************************************************************* */
\n+
25template<class GRAPH>
\n+
\n+
26void ClusterTree<GRAPH>::Cluster::print(const std::string& s,
\n+
27 const KeyFormatter& keyFormatter) const {
\n+
28 std::cout << s << " (" << problemSize_ << ")";
\n+\n+
30}
\n+
\n+
31
\n+
32/* ************************************************************************* */
\n+
33template <class GRAPH>
\n+
\n+\n+
35 std::vector<size_t> nrFrontals;
\n+
36 nrFrontals.reserve(nrChildren());
\n+
37 for (const sharedNode& child : children)
\n+
38 nrFrontals.push_back(child->nrFrontals());
\n+
39 return nrFrontals;
\n+
40}
\n+
\n+
41
\n+
42/* ************************************************************************* */
\n+
43template <class GRAPH>
\n+
\n+
44void ClusterTree<GRAPH>::Cluster::merge(const boost::shared_ptr<Cluster>& cluster) {
\n+
45 // Merge keys. For efficiency, we add keys in reverse order at end, calling reverse after..
\n+
46 orderedFrontalKeys.insert(orderedFrontalKeys.end(), cluster->orderedFrontalKeys.rbegin(),
\n+
47 cluster->orderedFrontalKeys.rend());
\n+
48 factors.push_back(cluster->factors);
\n+
49 children.insert(children.end(), cluster->children.begin(), cluster->children.end());
\n+
50 // Increment problem size
\n+
51 problemSize_ = std::max(problemSize_, cluster->problemSize_);
\n+
52}
\n+
\n+
53
\n+
54/* ************************************************************************* */
\n+
55template<class GRAPH>
\n+
\n+\n+
57 const std::vector<bool>& merge) {
\n+
58 gttic(Cluster_mergeChildren);
\n+
59 assert(merge.size() == this->children.size());
\n+
60
\n+
61 // Count how many keys, factors and children we'll end up with
\n+
62 size_t nrKeys = orderedFrontalKeys.size();
\n+
63 size_t nrFactors = factors.size();
\n+
64 size_t nrNewChildren = 0;
\n+
65 // Loop over children
\n+
66 size_t i = 0;
\n+
67 for(const sharedNode& child: this->children) {
\n+
68 if (merge[i]) {
\n+
69 nrKeys += child->orderedFrontalKeys.size();
\n+
70 nrFactors += child->factors.size();
\n+
71 nrNewChildren += child->nrChildren();
\n+
72 } else {
\n+
73 nrNewChildren += 1; // we keep the child
\n+
74 }
\n+
75 ++i;
\n+
76 }
\n
77
\n-
79 typedef typename EliminationTraitsType::BayesTreeType BayesTreeType;
\n-
80
\n-
82 typedef typename EliminationTraitsType::JunctionTreeType JunctionTreeType;
\n-
83
\n-
86 typedef std::pair<boost::shared_ptr<ConditionalType>, boost::shared_ptr<_FactorType> > EliminationResult;
\n-
87
\n-
89 typedef std::function<EliminationResult(const FactorGraphType&, const Ordering&)> Eliminate;
\n-
90
\n-
92 typedef boost::optional<const VariableIndex&> OptionalVariableIndex;
\n-
93
\n-
95 typedef boost::optional<Ordering::OrderingType> OptionalOrderingType;
\n-
96
\n-
117 boost::shared_ptr<BayesNetType> eliminateSequential(
\n-
118 OptionalOrderingType orderingType = boost::none,
\n-
119 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
120 OptionalVariableIndex variableIndex = boost::none) const;
\n-
121
\n-
136 boost::shared_ptr<BayesNetType> eliminateSequential(
\n-
137 const Ordering& ordering,
\n-
138 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
139 OptionalVariableIndex variableIndex = boost::none) const;
\n-
140
\n-
157 boost::shared_ptr<BayesTreeType> eliminateMultifrontal(
\n-
158 OptionalOrderingType orderingType = boost::none,
\n-
159 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
160 OptionalVariableIndex variableIndex = boost::none) const;
\n-
161
\n-
171 boost::shared_ptr<BayesTreeType> eliminateMultifrontal(
\n-
172 const Ordering& ordering,
\n-
173 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
174 OptionalVariableIndex variableIndex = boost::none) const;
\n-
175
\n-
180 std::pair<boost::shared_ptr<BayesNetType>, boost::shared_ptr<FactorGraphType> >
\n-\n-
182 const Ordering& ordering,
\n-
183 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
184 OptionalVariableIndex variableIndex = boost::none) const;
\n-
185
\n-
190 std::pair<boost::shared_ptr<BayesNetType>, boost::shared_ptr<FactorGraphType> >
\n-\n-
192 const KeyVector& variables,
\n-
193 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
194 OptionalVariableIndex variableIndex = boost::none) const;
\n-
195
\n-
200 std::pair<boost::shared_ptr<BayesTreeType>, boost::shared_ptr<FactorGraphType> >
\n-\n-
202 const Ordering& ordering,
\n-
203 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
204 OptionalVariableIndex variableIndex = boost::none) const;
\n-
205
\n-
210 std::pair<boost::shared_ptr<BayesTreeType>, boost::shared_ptr<FactorGraphType> >
\n-\n-
212 const KeyVector& variables,
\n-
213 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
214 OptionalVariableIndex variableIndex = boost::none) const;
\n-
215
\n-
225 boost::shared_ptr<BayesNetType> marginalMultifrontalBayesNet(
\n-
226 boost::variant<const Ordering&, const KeyVector&> variables,
\n-
227 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
228 OptionalVariableIndex variableIndex = boost::none) const;
\n-
229
\n-
240 boost::shared_ptr<BayesNetType> marginalMultifrontalBayesNet(
\n-
241 boost::variant<const Ordering&, const KeyVector&> variables,
\n-
242 const Ordering& marginalizedVariableOrdering,
\n-
243 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
244 OptionalVariableIndex variableIndex = boost::none) const;
\n-
245
\n-
255 boost::shared_ptr<BayesTreeType> marginalMultifrontalBayesTree(
\n-
256 boost::variant<const Ordering&, const KeyVector&> variables,
\n-
257 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
258 OptionalVariableIndex variableIndex = boost::none) const;
\n-
259
\n-
270 boost::shared_ptr<BayesTreeType> marginalMultifrontalBayesTree(
\n-
271 boost::variant<const Ordering&, const KeyVector&> variables,
\n-
272 const Ordering& marginalizedVariableOrdering,
\n-
273 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
274 OptionalVariableIndex variableIndex = boost::none) const;
\n-
275
\n-
277 boost::shared_ptr<FactorGraphType> marginal(
\n-
278 const KeyVector& variables,
\n-
279 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
280 OptionalVariableIndex variableIndex = boost::none) const;
\n-
281
\n-
282 private:
\n-
283
\n-
284 // Access the derived factor graph class
\n-
285 const FactorGraphType& asDerived() const { return static_cast<const FactorGraphType&>(*this); }
\n-
286
\n-
287 // Access the derived factor graph class
\n-
288 FactorGraphType& asDerived() { return static_cast<FactorGraphType&>(*this); }
\n-
289
\n-
290 public:
\n-
291 #ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
293 boost::shared_ptr<BayesNetType> GTSAM_DEPRECATED eliminateSequential(
\n-
294 const Ordering& ordering,
\n-
295 const Eliminate& function,
\n-
296 OptionalVariableIndex variableIndex,
\n-
297 OptionalOrderingType orderingType) const {
\n-
298 return eliminateSequential(ordering, function, variableIndex);
\n-
299 }
\n-
300
\n-
302 boost::shared_ptr<BayesNetType> GTSAM_DEPRECATED eliminateSequential(
\n-
303 const Eliminate& function,
\n-
304 OptionalVariableIndex variableIndex = boost::none,
\n-
305 OptionalOrderingType orderingType = boost::none) const {
\n-
306 return eliminateSequential(orderingType, function, variableIndex);
\n-
307 }
\n-
308
\n-
310 boost::shared_ptr<BayesTreeType> GTSAM_DEPRECATED eliminateMultifrontal(
\n-
311 const Ordering& ordering,
\n-
312 const Eliminate& function,
\n-
313 OptionalVariableIndex variableIndex,
\n-
314 OptionalOrderingType orderingType) const {
\n-
315 return eliminateMultifrontal(ordering, function, variableIndex);
\n-
316 }
\n-
317
\n-
319 boost::shared_ptr<BayesTreeType> GTSAM_DEPRECATED eliminateMultifrontal(
\n-
320 const Eliminate& function,
\n-
321 OptionalVariableIndex variableIndex = boost::none,
\n-
322 OptionalOrderingType orderingType = boost::none) const {
\n-
323 return eliminateMultifrontal(orderingType, function, variableIndex);
\n-
324 }
\n-
325
\n-
327 boost::shared_ptr<BayesNetType> GTSAM_DEPRECATED marginalMultifrontalBayesNet(
\n-
328 boost::variant<const Ordering&, const KeyVector&> variables,
\n-
329 boost::none_t,
\n-
330 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
331 OptionalVariableIndex variableIndex = boost::none) const {
\n-
332 return marginalMultifrontalBayesNet(variables, function, variableIndex);
\n-
333 }
\n-
334
\n-
336 boost::shared_ptr<BayesTreeType> GTSAM_DEPRECATED marginalMultifrontalBayesTree(
\n-
337 boost::variant<const Ordering&, const KeyVector&> variables,
\n-
338 boost::none_t,
\n-
339 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n-
340 OptionalVariableIndex variableIndex = boost::none) const {
\n-
341 return marginalMultifrontalBayesTree(variables, function, variableIndex);
\n-
342 }
\n-
343 #endif
\n-
344 };
\n-
\n-
345
\n-
346}
\n-\n-
Variable ordering for the elimination algorithm.
\n+
78 // now reserve space, and really merge
\n+
79 auto oldChildren = this->children;
\n+
80 this->children.clear();
\n+
81 this->children.reserve(nrNewChildren);
\n+
82 orderedFrontalKeys.reserve(nrKeys);
\n+
83 factors.reserve(nrFactors);
\n+
84 i = 0;
\n+
85 for (const sharedNode& child : oldChildren) {
\n+
86 if (merge[i]) {
\n+
87 this->merge(child);
\n+
88 } else {
\n+
89 this->addChild(child); // we keep the child
\n+
90 }
\n+
91 ++i;
\n+
92 }
\n+
\n+
93 std::reverse(orderedFrontalKeys.begin(), orderedFrontalKeys.end());
\n+
94}
\n+
95
\n+
96/* ************************************************************************* */
\n+
\n+
97template <class GRAPH>
\n+
\n+
98void ClusterTree<GRAPH>::print(const std::string& s, const KeyFormatter& keyFormatter) const {
\n+
99 treeTraversal::PrintForest(*this, s, keyFormatter);
\n+\n+
\n+
101
\n+
102/* ************************************************************************* */
\n+
\n+
103template <class GRAPH>
\n+
\n+\n+
105 // Start by duplicating the tree.
\n+\n+
107 return *this;
\n+
108}
\n+
\n+
109
\n+
110/* ************************************************************************* */
\n+
111// Elimination traversal data - stores a pointer to the parent data and collects
\n+
112// the factors resulting from elimination of the children. Also sets up BayesTree
\n+
113// cliques with parent and child pointers.
\n+
114template<class CLUSTERTREE>
\n+
\n+\n+
116 // Typedefs
\n+
117 typedef typename CLUSTERTREE::sharedFactor sharedFactor;
\n+
118 typedef typename CLUSTERTREE::FactorType FactorType;
\n+
119 typedef typename CLUSTERTREE::FactorGraphType FactorGraphType;
\n+
120 typedef typename CLUSTERTREE::ConditionalType ConditionalType;
\n+
121 typedef typename CLUSTERTREE::BayesTreeType::Node BTNode;
\n+
122
\n+
123 EliminationData* const parentData;
\n+
124 size_t myIndexInParent;
\n+
125 FastVector<sharedFactor> childFactors;
\n+
126 boost::shared_ptr<BTNode> bayesTreeNode;
\n+
127#ifdef GTSAM_USE_TBB
\n+
128 boost::shared_ptr<std::mutex> writeLock;
\n+
129#endif
\n+
130
\n+
131 EliminationData(EliminationData* _parentData, size_t nChildren) :
\n+
132 parentData(_parentData), bayesTreeNode(boost::make_shared<BTNode>())
\n+
133#ifdef GTSAM_USE_TBB
\n+
134 , writeLock(boost::make_shared<std::mutex>())
\n+
135#endif
\n+
136 {
\n+
137 if (parentData) {
\n+
\n+
138#ifdef GTSAM_USE_TBB
\n+
139 parentData->writeLock->lock();
\n+
140#endif
\n+
141 myIndexInParent = parentData->childFactors.size();
\n+
142 parentData->childFactors.push_back(sharedFactor());
\n+
143#ifdef GTSAM_USE_TBB
\n+
144 parentData->writeLock->unlock();
\n+
145#endif
\n+
146 } else {
\n+
147 myIndexInParent = 0;
\n+
148 }
\n+
149 // Set up BayesTree parent and child pointers
\n+
150 if (parentData) {
\n+
151 if (parentData->parentData) // If our parent is not the dummy node
\n+
152 bayesTreeNode->parent_ = parentData->bayesTreeNode;
\n+
153 parentData->bayesTreeNode->children.push_back(bayesTreeNode);
\n+
154 }
\n+
155 }
\n+
156
\n+
157 // Elimination pre-order visitor - creates the EliminationData structure for the visited node.
\n+
158 static EliminationData EliminationPreOrderVisitor(
\n+
159 const typename CLUSTERTREE::sharedNode& node,
\n+
160 EliminationData& parentData) {
\n+
161 assert(node);
\n+
162 EliminationData myData(&parentData, node->nrChildren());
\n+
163 myData.bayesTreeNode->problemSize_ = node->problemSize();
\n+
164 return myData;
\n+
165 }
\n+
166
\n+
167 // Elimination post-order visitor - combine the child factors with our own factors, add the
\n+
168 // resulting conditional to the BayesTree, and add the remaining factor to the parent.
\n+
\n+\n+
170 const typename CLUSTERTREE::Eliminate& eliminationFunction_;
\n+
171 typename CLUSTERTREE::BayesTreeType::Nodes& nodesIndex_;
\n+
172
\n+
173 public:
\n+
174 // Construct functor
\n+
\n+
175 EliminationPostOrderVisitor(
\n+
176 const typename CLUSTERTREE::Eliminate& eliminationFunction,
\n+
177 typename CLUSTERTREE::BayesTreeType::Nodes& nodesIndex) :
\n+
178 eliminationFunction_(eliminationFunction), nodesIndex_(nodesIndex) {
\n+
179 }
\n+
180
\n+
181 // Function that does the HEAVY lifting
\n+
182 void operator()(const typename CLUSTERTREE::sharedNode& node, EliminationData& myData) {
\n+
183 assert(node);
\n+
184
\n+
185 // Gather factors
\n+
186 FactorGraphType gatheredFactors;
\n+
187 gatheredFactors.reserve(node->factors.size() + node->nrChildren());
\n+
188 gatheredFactors += node->factors;
\n+
189 gatheredFactors += myData.childFactors;
\n+
190
\n+
191 // Check for Bayes tree orphan subtrees, and add them to our children
\n+
192 // TODO(frank): should this really happen here?
\n+
193 for (const sharedFactor& factor: node->factors) {
\n+
194 auto asSubtree = dynamic_cast<const BayesTreeOrphanWrapper<BTNode>*>(factor.get());
\n+
195 if (asSubtree) {
\n+
196 myData.bayesTreeNode->children.push_back(asSubtree->clique);
\n+
197 asSubtree->clique->parent_ = myData.bayesTreeNode;
\n+
198 }
\n+
199 }
\n+
200
\n+
201 // >>>>>>>>>>>>>> Do dense elimination step >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
\n+
202 auto eliminationResult = eliminationFunction_(gatheredFactors, node->orderedFrontalKeys);
\n+
203 // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\n+
204
\n+
205 // Store conditional in BayesTree clique, and in the case of ISAM2Clique also store the
\n+
206 // remaining factor
\n+
207 myData.bayesTreeNode->setEliminationResult(eliminationResult);
\n+
208
\n+
209 // Fill nodes index - we do this here instead of calling insertRoot at the end to avoid
\n+
210 // putting orphan subtrees in the index - they'll already be in the index of the ISAM2
\n+
211 // object they're added to.
\n+
212 for (const Key& j: myData.bayesTreeNode->conditional()->frontals())
\n+
213 nodesIndex_.insert(std::make_pair(j, myData.bayesTreeNode));
\n+
214
\n+
215 // Store remaining factor in parent's gathered factors
\n+
216 if (!eliminationResult.second->empty()) {
\n+
217#ifdef GTSAM_USE_TBB
\n+
218 myData.parentData->writeLock->lock();
\n+
219#endif
\n+
220 myData.parentData->childFactors[myData.myIndexInParent] = eliminationResult.second;
\n+
221#ifdef GTSAM_USE_TBB
\n+
\n+
222 myData.parentData->writeLock->unlock();
\n+
223#endif
\n+
224 }
\n+
225 }
\n+
226 };
\n+
227};
\n+
228
\n+
229/* ************************************************************************* */
\n+
230template<class BAYESTREE, class GRAPH>
\n+
\n+\n+
232 const This& other) {
\n+\n+
234
\n+
235 // Assign the remaining factors - these are pointers to factors in the original factor graph and
\n+
236 // we do not clone them.
\n+
237 remainingFactors_ = other.remainingFactors_;
\n+
238
\n+
239 return *this;
\n+
240}
\n+
\n+
241
\n+
242/* ************************************************************************* */
\n+
\n+
243template <class BAYESTREE, class GRAPH>
\n+
244std::pair<boost::shared_ptr<BAYESTREE>, boost::shared_ptr<GRAPH> >
\n+
\n+\n+
246 gttic(ClusterTree_eliminate);
\n+
247 // Do elimination (depth-first traversal). The rootsContainer stores a 'dummy' BayesTree node
\n+
248 // that contains all of the roots as its children. rootsContainer also stores the remaining
\n+
249 // un-eliminated factors passed up from the roots.
\n+
250 boost::shared_ptr<BayesTreeType> result = boost::make_shared<BayesTreeType>();
\n+
251
\n+
252 typedef EliminationData<This> Data;
\n+
253 Data rootsContainer(0, this->nrRoots());
\n+
254
\n+
255 typename Data::EliminationPostOrderVisitor visitorPost(function, result->nodes_);
\n+
256 {
\n+
257 TbbOpenMPMixedScope threadLimiter; // Limits OpenMP threads since we're mixing TBB and OpenMP
\n+
258 treeTraversal::DepthFirstForestParallel(*this, rootsContainer, Data::EliminationPreOrderVisitor,
\n+
259 visitorPost, 10);
\n+
260 }
\n+
261
\n+
262 // Create BayesTree from roots stored in the dummy BayesTree node.
\n+
263 result->roots_.insert(result->roots_.end(), rootsContainer.bayesTreeNode->children.begin(),
\n+
264 rootsContainer.bayesTreeNode->children.end());
\n+
265
\n+
266 // Add remaining factors that were not involved with eliminated variables
\n+
267 boost::shared_ptr<FactorGraphType> remaining = boost::make_shared<FactorGraphType>();
\n+
268 remaining->reserve(remainingFactors_.size() + rootsContainer.childFactors.size());
\n+
269 remaining->push_back(remainingFactors_.begin(), remainingFactors_.end());
\n+
270 for (const sharedFactor& factor : rootsContainer.childFactors) {
\n+
271 if (factor)
\n+
272 remaining->push_back(factor);
\n+
273 }
\n+
274
\n+
275 // Return result
\n+
276 return std::make_pair(result, remaining);
\n+
277}
\n+
\n+
278
\n+
279} // namespace gtsam
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+\n+
Timing utilities.
\n+
Variable ordering for the elimination algorithm.
\n+
Bayes Tree is a tree of cliques of a Bayes Chain.
\n+
Collects factorgraph fragments defined on variable clusters, arranged in a tree.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n-
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:57
\n-
boost::shared_ptr< BayesTreeType > marginalMultifrontalBayesTree(boost::variant< const Ordering &, const KeyVector & > variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal of the requested variables and return the result as a Bayes tree.
Definition EliminateableFactorGraph-inst.h:300
\n-
EliminationTraitsType::JunctionTreeType JunctionTreeType
Junction tree type that can do multifrontal elimination of this graph.
Definition EliminateableFactorGraph.h:82
\n-
boost::shared_ptr< FactorGraphType > marginal(const KeyVector &variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal factor graph of the requested variables.
Definition EliminateableFactorGraph-inst.h:367
\n-
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition EliminateableFactorGraph.h:89
\n-
EliminationTraitsType::BayesTreeType BayesTreeType
Bayes tree type produced by multifrontal elimination.
Definition EliminateableFactorGraph.h:79
\n-
EliminationTraitsType::BayesNetType BayesNetType
Bayes net type produced by sequential elimination.
Definition EliminateableFactorGraph.h:73
\n-
std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< _FactorType > > EliminationResult
The pair of conditional and remaining factor produced by a single dense elimination step on a subgrap...
Definition EliminateableFactorGraph.h:86
\n-
boost::shared_ptr< BayesNetType > eliminateSequential(OptionalOrderingType orderingType=boost::none, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do sequential elimination of all variables to produce a Bayes net.
Definition EliminateableFactorGraph-inst.h:30
\n-
boost::shared_ptr< BayesTreeType > eliminateMultifrontal(OptionalOrderingType orderingType=boost::none, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do multifrontal elimination of all variables to produce a Bayes tree.
Definition EliminateableFactorGraph-inst.h:91
\n-
EliminationTraitsType::ConditionalType ConditionalType
Conditional type stored in the Bayes net produced by elimination.
Definition EliminateableFactorGraph.h:70
\n-
EliminationTraitsType::EliminationTreeType EliminationTreeType
Elimination tree type that can do sequential elimination of this graph.
Definition EliminateableFactorGraph.h:76
\n-
boost::optional< const VariableIndex & > OptionalVariableIndex
Typedef for an optional variable index as an argument to elimination functions.
Definition EliminateableFactorGraph.h:92
\n-
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do sequential elimination of some variables, in ordering provided, to produce a Bayes net and a remai...
Definition EliminateableFactorGraph-inst.h:154
\n-
boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant< const Ordering &, const KeyVector & > variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal of the requested variables and return the result as a Bayes net.
Definition EliminateableFactorGraph-inst.h:233
\n-
std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr< FactorGraphType > > eliminatePartialMultifrontal(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do multifrontal elimination of some variables, in ordering provided, to produce a Bayes tree and a re...
Definition EliminateableFactorGraph-inst.h:193
\n-
EliminationTraits< FactorGraphType > EliminationTraitsType
Typedef to the specific EliminationTraits for this graph.
Definition EliminateableFactorGraph.h:67
\n-
boost::optional< Ordering::OrderingType > OptionalOrderingType
Typedef for an optional ordering type.
Definition EliminateableFactorGraph.h:95
\n-
Definition Ordering.h:34
\n+
void PrintKeyVector(const KeyVector &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition Key.cpp:77
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const FOREST &forest)
Clone a tree, copy-constructing new nodes (calling boost::make_shared) and setting up child pointers ...
Definition treeTraversal-inst.h:189
\n+
void PrintForest(const FOREST &forest, std::string str, const KeyFormatter &keyFormatter)
Print a tree, prefixing each line with str, and formatting keys using keyFormatter.
Definition treeTraversal-inst.h:219
\n+
void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:154
\n+
An object whose scope defines a block where TBB and OpenMP parallelism are mixed.
Definition types.h:192
\n+
A cluster-tree that eliminates to a Bayes tree.
Definition ClusterTree.h:184
\n+
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition ClusterTree-inst.h:231
\n+
std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr< FactorGraphType > > eliminate(const Eliminate &function) const
Eliminate the factors to a Bayes tree and remaining factor graph.
Definition ClusterTree-inst.h:245
\n+
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition ClusterTree.h:197
\n+
GRAPH::Eliminate Eliminate
Typedef for an eliminate subroutine.
Definition ClusterTree.h:195
\n+
Definition BayesTree.h:276
\n+
Definition ClusterTree-inst.h:115
\n+\n+
A cluster-tree is associated with a factor graph and is defined as in Koller-Friedman: each node k re...
Definition ClusterTree.h:25
\n+
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition ClusterTree-inst.h:104
\n+
FastVector< sharedNode > roots_
concept check
Definition ClusterTree.h:116
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Print the cluster tree.
Definition ClusterTree-inst.h:98
\n+
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition ClusterTree.h:32
\n+
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print this node
Definition ClusterTree-inst.h:26
\n+
Keys orderedFrontalKeys
Frontal keys of this node.
Definition ClusterTree.h:41
\n+
void mergeChildren(const std::vector< bool > &merge)
Merge all children for which bit is set into this node.
Definition ClusterTree-inst.h:56
\n+
void merge(const boost::shared_ptr< Cluster > &cluster)
Merge in given cluster.
Definition ClusterTree-inst.h:44
\n+
std::vector< size_t > nrFrontalsOfChildren() const
Return a vector with nrFrontal keys for each child.
Definition ClusterTree-inst.h:34
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,347 +1,439 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-EliminateableFactorGraph.h\n+ClusterTree-inst.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1/* ---------------------------------------------------------------------------\n--\n-2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n-7\n-8 * See LICENSE for the license information\n-9\n-10 * -------------------------------------------------------------------------\n-- */\n+1\n+10#pragma once\n 11\n-19#pragma once\n-20\n-21#include \n-22#include \n-23#include \n-24#include \n-25\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-34 template\n-_\b3_\b5 struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n-36 {\n-37 // Template for deriving:\n-38 // typedef MyFactor FactorType; ///< Type of factors in factor graph (e.g.\n-GaussianFactor)\n-39 // typedef MyFactorGraphType FactorGraphType; ///< Type of the factor graph\n-(e.g. GaussianFactorGraph)\n-40 // typedef MyConditional ConditionalType; ///< Type of conditionals from\n-elimination (e.g. GaussianConditional)\n-41 // typedef MyBayesNet BayesNetType; ///< Type of Bayes net from sequential\n-elimination (e.g. GaussianBayesNet)\n-42 // typedef MyEliminationTree EliminationTreeType; ///< Type of elimination\n-tree (e.g. GaussianEliminationTree)\n-43 // typedef MyBayesTree BayesTreeType; ///< Type of Bayes tree (e.g.\n-GaussianBayesTree)\n-44 // typedef MyJunctionTree JunctionTreeType; ///< Type of Junction tree (e.g.\n-GaussianJunctionTree)\n-45 // static pair, shared_ptr\n-46 // DefaultEliminate(\n-47 // const MyFactorGraph& factors, const Ordering& keys); ///< The default\n-dense elimination function\n-48 };\n-49\n-50\n-55 template\n-_\b5_\b6 class _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-57 {\n-58 private:\n-59 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b__\bG_\bR_\bA_\bP_\bH_\b> This;\n-60 typedef FACTOR_GRAPH FactorGraphType;\n-61 // Base factor type stored in this graph (private because derived classes\n-will get this from\n-62 // their FactorGraph base class)\n-63 typedef typename _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be_\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be _FactorType;\n-64\n-65 public:\n-_\b6_\b7 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be_\b> _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\bT_\by_\bp_\be;\n-68\n-_\b7_\b0 typedef typename EliminationTraitsType::ConditionalType _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-71\n-_\b7_\b3 typedef typename EliminationTraitsType::BayesNetType _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n-74\n-_\b7_\b6 typedef typename EliminationTraitsType::EliminationTreeType\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh>\n+13#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+14#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+15#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n+16#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n+17\n+18#ifdef GTSAM_USE_TBB\n+19#include \n+20#endif\n+21\n+22namespace _\bg_\bt_\bs_\ba_\bm {\n+23\n+24/* *************************************************************************\n+*/\n+25template\n+_\b2_\b6void _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s,\n+27 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const {\n+28 std::cout << s << \" (\" << problemSize_ << \")\";\n+29 _\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br(_\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs);\n+30}\n+31\n+32/* *************************************************************************\n+*/\n+33template \n+_\b3_\b4std::vector _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bO_\bf_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn() const\n+{\n+35 std::vector nrFrontals;\n+36 nrFrontals.reserve(nrChildren());\n+37 for (const sharedNode& child : children)\n+38 nrFrontals.push_back(child->nrFrontals());\n+39 return nrFrontals;\n+40}\n+41\n+42/* *************************************************************************\n+*/\n+43template \n+_\b4_\b4void _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be(const boost::shared_ptr&\n+cluster) {\n+45 // Merge keys. For efficiency, we add keys in reverse order at end, calling\n+reverse after..\n+46 orderedFrontalKeys.insert(orderedFrontalKeys.end(), cluster-\n+>orderedFrontalKeys.rbegin(),\n+47 cluster->orderedFrontalKeys.rend());\n+48 factors.push_back(cluster->factors);\n+49 children.insert(children.end(), cluster->children.begin(), cluster-\n+>children.end());\n+50 // Increment problem size\n+51 problemSize_ = std::max(problemSize_, cluster->problemSize_);\n+52}\n+53\n+54/* *************************************************************************\n+*/\n+55template\n+_\b5_\b6void _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn(\n+57 const std::vector& merge) {\n+58 gttic(Cluster_mergeChildren);\n+59 assert(merge.size() == this->children.size());\n+60\n+61 // Count how many keys, factors and children we'll end up with\n+62 size_t nrKeys = orderedFrontalKeys.size();\n+63 size_t nrFactors = factors.size();\n+64 size_t nrNewChildren = 0;\n+65 // Loop over children\n+66 size_t i = 0;\n+67 for(const sharedNode& child: this->children) {\n+68 if (merge[i]) {\n+69 nrKeys += child->orderedFrontalKeys.size();\n+70 nrFactors += child->factors.size();\n+71 nrNewChildren += child->nrChildren();\n+72 } else {\n+73 nrNewChildren += 1; // we keep the child\n+74 }\n+75 ++i;\n+76 }\n 77\n-_\b7_\b9 typedef typename EliminationTraitsType::BayesTreeType _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-80\n-_\b8_\b2 typedef typename EliminationTraitsType::JunctionTreeType _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-83\n-_\b8_\b6 typedef std::pair, boost::\n-shared_ptr<_FactorType> > _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt;\n-87\n-_\b8_\b9 typedef std::function<_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(const FactorGraphType&, const\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg&)> _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be;\n-90\n-_\b9_\b2 typedef boost::optional _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx;\n-93\n-_\b9_\b5 typedef boost::optional _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be;\n-96\n-117 boost::shared_ptr _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n-118 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType = boost::none,\n-119 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-120 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-121\n-136 boost::shared_ptr _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n-137 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-138 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-139 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-140\n-157 boost::shared_ptr _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n-158 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType = boost::none,\n-159 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-160 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-161\n-171 boost::shared_ptr _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n-172 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-173 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-174 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-175\n-180 std::pair, boost::\n-shared_ptr >\n-181 _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n-182 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-183 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-184 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-185\n-190 std::pair, boost::\n-shared_ptr >\n-191 _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n-192 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables,\n-193 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-194 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-195\n-200 std::pair, boost::\n-shared_ptr >\n-201 _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n-202 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-203 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-204 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-205\n-210 std::pair, boost::\n-shared_ptr >\n-211 _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n-212 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables,\n-213 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-214 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-215\n-225 boost::shared_ptr _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n-226 boost::variant variables,\n-227 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-228 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-229\n-240 boost::shared_ptr _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n-241 boost::variant variables,\n-242 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& marginalizedVariableOrdering,\n-243 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-244 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-245\n-255 boost::shared_ptr _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(\n-256 boost::variant variables,\n-257 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-258 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-259\n-270 boost::shared_ptr _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(\n-271 boost::variant variables,\n-272 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& marginalizedVariableOrdering,\n-273 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-274 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-275\n-277 boost::shared_ptr _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl(\n-278 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables,\n-279 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-280 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n-281\n-282 private:\n-283\n-284 // Access the derived factor graph class\n-285 const FactorGraphType& asDerived() const { return static_cast(*this); }\n-286\n-287 // Access the derived factor graph class\n-288 FactorGraphType& asDerived() { return static_cast(*this);\n-}\n-289\n-290 public:\n-291 #ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-293 boost::shared_ptr GTSAM_DEPRECATED _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n-294 const Ordering& ordering,\n-295 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n-296 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex,\n-297 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType) const {\n-298 return _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(ordering, function, variableIndex);\n-299 }\n-300\n-302 boost::shared_ptr GTSAM_DEPRECATED _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n-303 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n-304 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none,\n-305 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType = boost::none) const {\n-306 return _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(orderingType, function, variableIndex);\n-307 }\n-308\n-310 boost::shared_ptr GTSAM_DEPRECATED _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n-311 const Ordering& ordering,\n-312 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n-313 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex,\n-314 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType) const {\n-315 return _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(ordering, function, variableIndex);\n-316 }\n-317\n-319 boost::shared_ptr GTSAM_DEPRECATED _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n-320 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n-321 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none,\n-322 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType = boost::none) const {\n-323 return _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(orderingType, function, variableIndex);\n-324 }\n-325\n-327 boost::shared_ptr GTSAM_DEPRECATED\n-_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n-328 boost::variant variables,\n-329 boost::none_t,\n-330 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-331 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const {\n-332 return _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(variables, function, variableIndex);\n-333 }\n-334\n-336 boost::shared_ptr GTSAM_DEPRECATED\n-_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(\n-337 boost::variant variables,\n-338 boost::none_t,\n-339 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n-340 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const {\n-341 return _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(variables, function, variableIndex);\n-342 }\n-343 #endif\n-344 };\n-345\n-346}\n-_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n+78 // now reserve space, and really merge\n+79 auto oldChildren = this->children;\n+80 this->children.clear();\n+81 this->children.reserve(nrNewChildren);\n+82 orderedFrontalKeys.reserve(nrKeys);\n+83 factors.reserve(nrFactors);\n+84 i = 0;\n+85 for (const sharedNode& child : oldChildren) {\n+86 if (merge[i]) {\n+87 this->merge(child);\n+88 } else {\n+89 this->addChild(child); // we keep the child\n+90 }\n+91 ++i;\n+92 }\n+_\b9_\b3 std::reverse(orderedFrontalKeys.begin(), orderedFrontalKeys.end());\n+94}\n+95\n+96/* *************************************************************************\n+*/\n+_\b9_\b7template \n+_\b9_\b8void _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n+keyFormatter) const {\n+99 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt(*this, s, keyFormatter);\n+_\b1_\b0_\b0}\n+101\n+102/* *************************************************************************\n+*/\n+_\b1_\b0_\b3template \n+_\b1_\b0_\b4_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>& _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs& other) {\n+105 // Start by duplicating the tree.\n+106 _\br_\bo_\bo_\bt_\bs_\b_ = _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt(other);\n+107 return *this;\n+108}\n+109\n+110/* *************************************************************************\n+*/\n+111// Elimination traversal data - stores a pointer to the parent data and\n+collects\n+112// the factors resulting from elimination of the children. Also sets up\n+BayesTree\n+113// cliques with parent and child pointers.\n+114template\n+_\b1_\b1_\b5struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba {\n+116 // Typedefs\n+117 typedef typename CLUSTERTREE::sharedFactor sharedFactor;\n+118 typedef typename CLUSTERTREE::FactorType FactorType;\n+119 typedef typename CLUSTERTREE::FactorGraphType FactorGraphType;\n+120 typedef typename CLUSTERTREE::ConditionalType ConditionalType;\n+121 typedef typename CLUSTERTREE::BayesTreeType::Node BTNode;\n+122\n+123 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba* const parentData;\n+124 size_t myIndexInParent;\n+125 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b> childFactors;\n+126 boost::shared_ptr bayesTreeNode;\n+127#ifdef GTSAM_USE_TBB\n+128 boost::shared_ptr writeLock;\n+129#endif\n+130\n+131 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba(_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba* _parentData, size_t nChildren) :\n+132 parentData(_parentData), bayesTreeNode(boost::make_shared())\n+133#ifdef GTSAM_USE_TBB\n+134 , writeLock(boost::make_shared())\n+135#endif\n+136 {\n+137 if (parentData) {\n+_\b1_\b3_\b8#ifdef GTSAM_USE_TBB\n+139 parentData->writeLock->lock();\n+140#endif\n+141 myIndexInParent = parentData->childFactors.size();\n+142 parentData->childFactors.push_back(_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br());\n+143#ifdef GTSAM_USE_TBB\n+144 parentData->writeLock->unlock();\n+145#endif\n+146 } else {\n+147 myIndexInParent = 0;\n+148 }\n+149 // Set up BayesTree parent and child pointers\n+150 if (parentData) {\n+151 if (parentData->parentData) // If our parent is not the dummy node\n+152 bayesTreeNode->parent_ = parentData->bayesTreeNode;\n+153 parentData->bayesTreeNode->children.push_back(bayesTreeNode);\n+154 }\n+155 }\n+156\n+157 // Elimination pre-order visitor - creates the EliminationData structure\n+for the visited node.\n+158 static EliminationData EliminationPreOrderVisitor(\n+159 const typename CLUSTERTREE::sharedNode& node,\n+160 EliminationData& parentData) {\n+161 assert(node);\n+162 EliminationData myData(&parentData, node->nrChildren());\n+163 myData.bayesTreeNode->problemSize_ = node->problemSize();\n+164 return myData;\n+165 }\n+166\n+167 // Elimination post-order visitor - combine the child factors with our own\n+factors, add the\n+168 // resulting conditional to the BayesTree, and add the remaining factor to\n+the parent.\n+_\b1_\b6_\b9 class _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\bt_\bO_\br_\bd_\be_\br_\bV_\bi_\bs_\bi_\bt_\bo_\br {\n+170 const typename CLUSTERTREE::Eliminate& eliminationFunction_;\n+171 typename CLUSTERTREE::BayesTreeType::Nodes& nodesIndex_;\n+172\n+173 public:\n+174 // Construct functor\n+_\b1_\b7_\b5 EliminationPostOrderVisitor(\n+176 const typename CLUSTERTREE::Eliminate& eliminationFunction,\n+177 typename CLUSTERTREE::BayesTreeType::Nodes& nodesIndex) :\n+178 eliminationFunction_(eliminationFunction), nodesIndex_(nodesIndex) {\n+179 }\n+180\n+181 // Function that does the HEAVY lifting\n+182 void operator()(const typename CLUSTERTREE::sharedNode& node,\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba& myData) {\n+183 assert(node);\n+184\n+185 // Gather factors\n+186 FactorGraphType gatheredFactors;\n+187 gatheredFactors.reserve(node->factors.size() + node->nrChildren());\n+188 gatheredFactors += node->factors;\n+189 gatheredFactors += myData.childFactors;\n+190\n+191 // Check for Bayes tree orphan subtrees, and add them to our children\n+192 // TODO(frank): should this really happen here?\n+193 for (const sharedFactor& factor: node->factors) {\n+194 auto asSubtree = dynamic_cast*>\n+(factor.get());\n+195 if (asSubtree) {\n+196 myData.bayesTreeNode->children.push_back(asSubtree->clique);\n+197 asSubtree->clique->parent_ = myData.bayesTreeNode;\n+198 }\n+199 }\n+200\n+201 // >>>>>>>>>>>>>> Do dense elimination step >>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n+202 auto eliminationResult = eliminationFunction_(gatheredFactors, node-\n+>orderedFrontalKeys);\n+203 // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n+204\n+205 // Store conditional in BayesTree clique, and in the case of ISAM2Clique\n+also store the\n+206 // remaining factor\n+207 myData.bayesTreeNode->setEliminationResult(eliminationResult);\n+208\n+209 // Fill nodes index - we do this here instead of calling insertRoot at the\n+end to avoid\n+210 // putting orphan subtrees in the index - they'll already be in the index\n+of the ISAM2\n+211 // object they're added to.\n+212 for (const Key& j: myData.bayesTreeNode->conditional()->frontals())\n+213 nodesIndex_.insert(std::make_pair(j, myData.bayesTreeNode));\n+214\n+215 // Store remaining factor in parent's gathered factors\n+216 if (!eliminationResult.second->empty()) {\n+217#ifdef GTSAM_USE_TBB\n+218 myData.parentData->writeLock->lock();\n+219#endif\n+220 myData.parentData->childFactors[myData.myIndexInParent] =\n+eliminationResult.second;\n+221#ifdef GTSAM_USE_TBB\n+_\b2_\b2_\b2 myData.parentData->writeLock->unlock();\n+223#endif\n+224 }\n+225 }\n+226 };\n+227};\n+228\n+229/* *************************************************************************\n+*/\n+230template\n+_\b2_\b3_\b1_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b>&\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(\n+232 const _\bT_\bh_\bi_\bs& other) {\n+233 _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(other);\n+234\n+235 // Assign the remaining factors - these are pointers to factors in the\n+original factor graph and\n+236 // we do not clone them.\n+237 remainingFactors_ = other.remainingFactors_;\n+238\n+239 return *this;\n+240}\n+241\n+242/* *************************************************************************\n+*/\n+_\b2_\b4_\b3template \n+244std::pair, boost::shared_ptr >\n+_\b2_\b4_\b5_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be&\n+function) const {\n+246 gttic(ClusterTree_eliminate);\n+247 // Do elimination (depth-first traversal). The rootsContainer stores a\n+'dummy' BayesTree node\n+248 // that contains all of the roots as its children. rootsContainer also\n+stores the remaining\n+249 // un-eliminated factors passed up from the roots.\n+250 boost::shared_ptr result = boost::make_shared\n+();\n+251\n+252 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba_\b<_\bT_\bh_\bi_\bs_\b> Data;\n+253 Data rootsContainer(0, this->nrRoots());\n+254\n+255 typename Data::EliminationPostOrderVisitor visitorPost(function, result-\n+>nodes_);\n+256 {\n+257 _\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be threadLimiter; // Limits OpenMP threads since we're\n+mixing TBB and OpenMP\n+258 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl(*this, rootsContainer, Data::\n+EliminationPreOrderVisitor,\n+259 visitorPost, 10);\n+260 }\n+261\n+262 // Create BayesTree from roots stored in the dummy BayesTree node.\n+263 result->roots_.insert(result->roots_.end(), rootsContainer.bayesTreeNode-\n+>children.begin(),\n+264 rootsContainer.bayesTreeNode->children.end());\n+265\n+266 // Add remaining factors that were not involved with eliminated variables\n+267 boost::shared_ptr remaining = boost::\n+make_shared();\n+268 remaining->reserve(remainingFactors_.size() +\n+rootsContainer.childFactors.size());\n+269 remaining->push_back(remainingFactors_.begin(), remainingFactors_.end());\n+270 for (const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor : rootsContainer.childFactors) {\n+271 if (factor)\n+272 remaining->push_back(factor);\n+273 }\n+274\n+275 // Return result\n+276 return std::make_pair(result, remaining);\n+277}\n+278\n+279} // namespace gtsam\n+_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\n _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n Variable ordering for the elimination algorithm.\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Bayes Tree is a tree of cliques of a Bayes Chain.\n+_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh\n+Collects factorgraph fragments defined on variable clusters, arranged in a\n+tree.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n-Traits class for eliminateable factor graphs, specifies the types that result\n-from elimination,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-EliminateableFactorGraph is a base class for factor graphs that contains\n-elimination algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-boost::shared_ptr< BayesTreeType > marginalMultifrontalBayesTree(boost::\n-variant< const Ordering &, const KeyVector & > variables, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex\n-variableIndex=boost::none) const\n-Compute the marginal of the requested variables and return the result as a\n-Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:300\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-EliminationTraitsType::JunctionTreeType JunctionTreeType\n-Junction tree type that can do multifrontal elimination of this graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl\n-boost::shared_ptr< FactorGraphType > marginal(const KeyVector &variables, const\n-Eliminate &function=EliminationTraitsType::DefaultEliminate,\n-OptionalVariableIndex variableIndex=boost::none) const\n-Compute the marginal factor graph of the requested variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:367\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-std::function< EliminationResult(const FactorGraphType &, const Ordering &)>\n-Eliminate\n-The function type that does a single dense elimination step on a subgraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-EliminationTraitsType::BayesTreeType BayesTreeType\n-Bayes tree type produced by multifrontal elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n-EliminationTraitsType::BayesNetType BayesNetType\n-Bayes net type produced by sequential elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n-std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< _FactorType\n-> > EliminationResult\n-The pair of conditional and remaining factor produced by a single dense\n-elimination step on a subgrap...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl\n-boost::shared_ptr< BayesNetType > eliminateSequential(OptionalOrderingType\n-orderingType=boost::none, const Eliminate &function=EliminationTraitsType::\n-DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const\n-Do sequential elimination of all variables to produce a Bayes net.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl\n-boost::shared_ptr< BayesTreeType > eliminateMultifrontal(OptionalOrderingType\n-orderingType=boost::none, const Eliminate &function=EliminationTraitsType::\n-DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const\n-Do multifrontal elimination of all variables to produce a Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n-EliminationTraitsType::ConditionalType ConditionalType\n-Conditional type stored in the Bayes net produced by elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-EliminationTraitsType::EliminationTreeType EliminationTreeType\n-Elimination tree type that can do sequential elimination of this graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-boost::optional< const VariableIndex & > OptionalVariableIndex\n-Typedef for an optional variable index as an argument to elimination functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl\n-std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr<\n-FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const\n-Eliminate &function=EliminationTraitsType::DefaultEliminate,\n-OptionalVariableIndex variableIndex=boost::none) const\n-Do sequential elimination of some variables, in ordering provided, to produce a\n-Bayes net and a remai...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant<\n-const Ordering &, const KeyVector & > variables, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex\n-variableIndex=boost::none) const\n-Compute the marginal of the requested variables and return the result as a\n-Bayes net.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:233\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+void PrintKeyVector(const KeyVector &keys, const string &s, const KeyFormatter\n+&keyFormatter)\n+Utility function to print sets of keys with optional prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.cpp:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt\n+FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const\n+FOREST &forest)\n+Clone a tree, copy-constructing new nodes (calling boost::make_shared) and\n+setting up child pointers ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt\n+void PrintForest(const FOREST &forest, std::string str, const KeyFormatter\n+&keyFormatter)\n+Print a tree, prefixing each line with str, and formatting keys using\n+keyFormatter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl\n+void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE\n+&visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)\n+Traverse a forest depth-first with pre-order and post-order visits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be\n+An object whose scope defines a block where TBB and OpenMP parallelism are\n+mixed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n+A cluster-tree that eliminates to a Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+This & operator=(const This &other)\n+Assignment operator - makes a deep copy of the tree structure, but only\n+pointers to factors are copie...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:231\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr<\n-FactorGraphType > > eliminatePartialMultifrontal(const Ordering &ordering,\n-const Eliminate &function=EliminationTraitsType::DefaultEliminate,\n-OptionalVariableIndex variableIndex=boost::none) const\n-Do multifrontal elimination of some variables, in ordering provided, to produce\n-a Bayes tree and a re...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:193\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\bT_\by_\bp_\be\n-EliminationTraits< FactorGraphType > EliminationTraitsType\n-Typedef to the specific EliminationTraits for this graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be\n-boost::optional< Ordering::OrderingType > OptionalOrderingType\n-Typedef for an optional ordering type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+FactorGraphType > > eliminate(const Eliminate &function) const\n+Eliminate the factors to a Bayes tree and remaining factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:245\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< FactorType > sharedFactor\n+Shared pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:197\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+GRAPH::Eliminate Eliminate\n+Typedef for an eliminate subroutine.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:276\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\bt_\bO_\br_\bd_\be_\br_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:169\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n+A cluster-tree is associated with a factor graph and is defined as in Koller-\n+Friedman: each node k re...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:25\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+This & operator=(const This &other)\n+Assignment operator - makes a deep copy of the tree structure, but only\n+pointers to factors are copie...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs_\b_\n+FastVector< sharedNode > roots_\n+concept check\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:116\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const\n+Print the cluster tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< FactorType > sharedFactor\n+Shared pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const\n+print this node\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs\n+Keys orderedFrontalKeys\n+Frontal keys of this node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn\n+void mergeChildren(const std::vector< bool > &merge)\n+Merge all children for which bit is set into this node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be\n+void merge(const boost::shared_ptr< Cluster > &cluster)\n+Merge in given cluster.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bO_\bf_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn\n+std::vector< size_t > nrFrontalsOfChildren() const\n+Return a vector with nrFrontal keys for each child.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:34\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00626_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00626_source.html", "unified_diff": "@@ -114,18 +114,18 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n-
21#include <gtsam/inference/Key.h>
\n-
22#include <gtsam/base/FastMap.h>
\n-\n+\n+
21#include <gtsam/inference/Key.h>
\n+
22#include <gtsam/base/FastMap.h>
\n+\n
24#include <gtsam/dllexport.h>
\n
25
\n
26#include <boost/optional/optional.hpp>
\n
27#include <boost/smart_ptr/shared_ptr.hpp>
\n
28
\n
29#include <cassert>
\n
30#include <stdexcept>
\n@@ -249,20 +249,20 @@\n
\n
200struct traits<VariableIndex> : public Testable<VariableIndex> {
\n
201};
\n
\n
202
\n
203} //\\ namespace gtsam
\n
204
\n-\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n-
The base class for all factors.
\n-\n-\n+\n+
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+\n+\n+
The base class for all factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
std::uint64_t FactorIndex
Integer nonlinear factor index type.
Definition types.h:103
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -145,22 +145,22 @@\n 199template<>\n _\b2_\b0_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n 201};\n 202\n 203} //\\ namespace gtsam\n 204\n 205#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh>\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n A thin wrapper around std::map that uses boost's fast_pool_allocator.\n-_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-The base class for all factors.\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n _\bK_\be_\by_\b._\bh\n+_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+The base class for all factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx\n std::uint64_t FactorIndex\n Integer nonlinear factor index type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:103\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00629.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00629.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree-inst.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/inferenceExceptions.h File Reference\n \n \n \n \n \n \n \n@@ -96,48 +96,43 @@\n \n \n \n
\n \n-
ClusterTree-inst.h File Reference
\n+
inferenceExceptions.h File Reference
\n
\n
\n \n-

Collects factorgraph fragments defined on variable clusters, arranged in a tree. \n+

Exceptions that may be thrown by inference algorithms. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::EliminationData< CLUSTERTREE >
 
class  gtsam::EliminationData< CLUSTERTREE >::EliminationPostOrderVisitor
class  gtsam::InconsistentEliminationRequested
 An inference algorithm was called with inconsistent arguments. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Collects factorgraph fragments defined on variable clusters, arranged in a tree.

\n-
Date
Oct 8, 2013
\n-
Author
Kai Ni
\n-
\n-Richard Roberts
\n-
\n-Frank Dellaert
\n+

Exceptions that may be thrown by inference algorithms.

\n+
Author
Richard Roberts
\n+
Date
Apr 25, 2013
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ClusterTree-inst.h File Reference\n-Collects factorgraph fragments defined on variable clusters, arranged in a\n-tree. _\bM_\bo_\br_\be_\b._\b._\b.\n+inferenceExceptions.h File Reference\n+Exceptions that may be thrown by inference algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba_\b<_\b _\bC_\bL_\bU_\bS_\bT_\bE_\bR_\bT_\bR_\bE_\bE_\b _\b>\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba_\b<_\b _\bC_\bL_\bU_\bS_\bT_\bE_\bR_\bT_\bR_\bE_\bE_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\bt_\bO_\br_\bd_\be_\br_\bV_\bi_\bs_\bi_\bt_\bo_\br\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd\n+\u00a0 An inference algorithm was called with inconsistent arguments. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Collects factorgraph fragments defined on variable clusters, arranged in a\n-tree.\n- Date\n- Oct 8, 2013\n+Exceptions that may be thrown by inference algorithms.\n Author\n- Kai Ni\n Richard Roberts\n- Frank Dellaert\n+ Date\n+ Apr 25, 2013\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00629.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00629.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00629 = [\n- [\"gtsam::EliminationData< CLUSTERTREE >\", \"a03556.html\", \"a03556\"],\n- [\"gtsam::EliminationData< CLUSTERTREE >::EliminationPostOrderVisitor\", \"a03560.html\", null]\n+ [\"gtsam::InconsistentEliminationRequested\", \"a03636.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00629_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00629_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/inferenceExceptions.h Source File\n \n \n \n \n \n \n \n@@ -98,357 +98,59 @@\n
No Matches
\n \n \n \n \n \n
\n-
ClusterTree-inst.h
\n+
inferenceExceptions.h
\n
\n
\n-Go to the documentation of this file.
1
\n-
10#pragma once
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-\n-\n-\n-
15#include <gtsam/base/timing.h>
\n-\n-
17
\n-
18#ifdef GTSAM_USE_TBB
\n-
19#include <mutex>
\n-
20#endif
\n-
21
\n-
22namespace gtsam {
\n+
18#pragma once
\n+
19
\n+\n+
21#include <boost/lexical_cast.hpp>
\n+
22#include <exception>
\n
23
\n-
24/* ************************************************************************* */
\n-
25template<class GRAPH>
\n-
\n-
26void ClusterTree<GRAPH>::Cluster::print(const std::string& s,
\n-
27 const KeyFormatter& keyFormatter) const {
\n-
28 std::cout << s << " (" << problemSize_ << ")";
\n-\n-
30}
\n-
\n-
31
\n-
32/* ************************************************************************* */
\n-
33template <class GRAPH>
\n-
\n-\n-
35 std::vector<size_t> nrFrontals;
\n-
36 nrFrontals.reserve(nrChildren());
\n-
37 for (const sharedNode& child : children)
\n-
38 nrFrontals.push_back(child->nrFrontals());
\n-
39 return nrFrontals;
\n-
40}
\n+
24namespace gtsam {
\n+
25
\n+
\n+
29 class InconsistentEliminationRequested : public std::exception {
\n+
30 public:
\n+\n+
32 ~InconsistentEliminationRequested() noexcept override {}
\n+
33 const char* what() const noexcept override {
\n+
34 return
\n+
35 "An inference algorithm was called with inconsistent arguments. The\\n"
\n+
36 "factor graph, ordering, or variable index were inconsistent with each\\n"
\n+
37 "other, or a full elimination routine was called with an ordering that\\n"
\n+
38 "does not include all of the variables.";
\n+
39 }
\n+
40 };
\n
\n
41
\n-
42/* ************************************************************************* */
\n-
43template <class GRAPH>
\n-
\n-
44void ClusterTree<GRAPH>::Cluster::merge(const boost::shared_ptr<Cluster>& cluster) {
\n-
45 // Merge keys. For efficiency, we add keys in reverse order at end, calling reverse after..
\n-
46 orderedFrontalKeys.insert(orderedFrontalKeys.end(), cluster->orderedFrontalKeys.rbegin(),
\n-
47 cluster->orderedFrontalKeys.rend());
\n-
48 factors.push_back(cluster->factors);
\n-
49 children.insert(children.end(), cluster->children.begin(), cluster->children.end());
\n-
50 // Increment problem size
\n-
51 problemSize_ = std::max(problemSize_, cluster->problemSize_);
\n-
52}
\n-
\n-
53
\n-
54/* ************************************************************************* */
\n-
55template<class GRAPH>
\n-
\n-\n-
57 const std::vector<bool>& merge) {
\n-
58 gttic(Cluster_mergeChildren);
\n-
59 assert(merge.size() == this->children.size());
\n-
60
\n-
61 // Count how many keys, factors and children we'll end up with
\n-
62 size_t nrKeys = orderedFrontalKeys.size();
\n-
63 size_t nrFactors = factors.size();
\n-
64 size_t nrNewChildren = 0;
\n-
65 // Loop over children
\n-
66 size_t i = 0;
\n-
67 for(const sharedNode& child: this->children) {
\n-
68 if (merge[i]) {
\n-
69 nrKeys += child->orderedFrontalKeys.size();
\n-
70 nrFactors += child->factors.size();
\n-
71 nrNewChildren += child->nrChildren();
\n-
72 } else {
\n-
73 nrNewChildren += 1; // we keep the child
\n-
74 }
\n-
75 ++i;
\n-
76 }
\n-
77
\n-
78 // now reserve space, and really merge
\n-
79 auto oldChildren = this->children;
\n-
80 this->children.clear();
\n-
81 this->children.reserve(nrNewChildren);
\n-
82 orderedFrontalKeys.reserve(nrKeys);
\n-
83 factors.reserve(nrFactors);
\n-
84 i = 0;
\n-
85 for (const sharedNode& child : oldChildren) {
\n-
86 if (merge[i]) {
\n-
87 this->merge(child);
\n-
88 } else {
\n-
89 this->addChild(child); // we keep the child
\n-
90 }
\n-
91 ++i;
\n-
92 }
\n-
\n-
93 std::reverse(orderedFrontalKeys.begin(), orderedFrontalKeys.end());
\n-
94}
\n-
95
\n-
96/* ************************************************************************* */
\n-
\n-
97template <class GRAPH>
\n-
\n-
98void ClusterTree<GRAPH>::print(const std::string& s, const KeyFormatter& keyFormatter) const {
\n-
99 treeTraversal::PrintForest(*this, s, keyFormatter);
\n-\n-
\n-
101
\n-
102/* ************************************************************************* */
\n-
\n-
103template <class GRAPH>
\n-
\n-\n-
105 // Start by duplicating the tree.
\n-\n-
107 return *this;
\n-
108}
\n-
\n-
109
\n-
110/* ************************************************************************* */
\n-
111// Elimination traversal data - stores a pointer to the parent data and collects
\n-
112// the factors resulting from elimination of the children. Also sets up BayesTree
\n-
113// cliques with parent and child pointers.
\n-
114template<class CLUSTERTREE>
\n-
\n-\n-
116 // Typedefs
\n-
117 typedef typename CLUSTERTREE::sharedFactor sharedFactor;
\n-
118 typedef typename CLUSTERTREE::FactorType FactorType;
\n-
119 typedef typename CLUSTERTREE::FactorGraphType FactorGraphType;
\n-
120 typedef typename CLUSTERTREE::ConditionalType ConditionalType;
\n-
121 typedef typename CLUSTERTREE::BayesTreeType::Node BTNode;
\n-
122
\n-
123 EliminationData* const parentData;
\n-
124 size_t myIndexInParent;
\n-
125 FastVector<sharedFactor> childFactors;
\n-
126 boost::shared_ptr<BTNode> bayesTreeNode;
\n-
127#ifdef GTSAM_USE_TBB
\n-
128 boost::shared_ptr<std::mutex> writeLock;
\n-
129#endif
\n-
130
\n-
131 EliminationData(EliminationData* _parentData, size_t nChildren) :
\n-
132 parentData(_parentData), bayesTreeNode(boost::make_shared<BTNode>())
\n-
133#ifdef GTSAM_USE_TBB
\n-
134 , writeLock(boost::make_shared<std::mutex>())
\n-
135#endif
\n-
136 {
\n-
137 if (parentData) {
\n-
\n-
138#ifdef GTSAM_USE_TBB
\n-
139 parentData->writeLock->lock();
\n-
140#endif
\n-
141 myIndexInParent = parentData->childFactors.size();
\n-
142 parentData->childFactors.push_back(sharedFactor());
\n-
143#ifdef GTSAM_USE_TBB
\n-
144 parentData->writeLock->unlock();
\n-
145#endif
\n-
146 } else {
\n-
147 myIndexInParent = 0;
\n-
148 }
\n-
149 // Set up BayesTree parent and child pointers
\n-
150 if (parentData) {
\n-
151 if (parentData->parentData) // If our parent is not the dummy node
\n-
152 bayesTreeNode->parent_ = parentData->bayesTreeNode;
\n-
153 parentData->bayesTreeNode->children.push_back(bayesTreeNode);
\n-
154 }
\n-
155 }
\n-
156
\n-
157 // Elimination pre-order visitor - creates the EliminationData structure for the visited node.
\n-
158 static EliminationData EliminationPreOrderVisitor(
\n-
159 const typename CLUSTERTREE::sharedNode& node,
\n-
160 EliminationData& parentData) {
\n-
161 assert(node);
\n-
162 EliminationData myData(&parentData, node->nrChildren());
\n-
163 myData.bayesTreeNode->problemSize_ = node->problemSize();
\n-
164 return myData;
\n-
165 }
\n-
166
\n-
167 // Elimination post-order visitor - combine the child factors with our own factors, add the
\n-
168 // resulting conditional to the BayesTree, and add the remaining factor to the parent.
\n-
\n-\n-
170 const typename CLUSTERTREE::Eliminate& eliminationFunction_;
\n-
171 typename CLUSTERTREE::BayesTreeType::Nodes& nodesIndex_;
\n-
172
\n-
173 public:
\n-
174 // Construct functor
\n-
\n-
175 EliminationPostOrderVisitor(
\n-
176 const typename CLUSTERTREE::Eliminate& eliminationFunction,
\n-
177 typename CLUSTERTREE::BayesTreeType::Nodes& nodesIndex) :
\n-
178 eliminationFunction_(eliminationFunction), nodesIndex_(nodesIndex) {
\n-
179 }
\n-
180
\n-
181 // Function that does the HEAVY lifting
\n-
182 void operator()(const typename CLUSTERTREE::sharedNode& node, EliminationData& myData) {
\n-
183 assert(node);
\n-
184
\n-
185 // Gather factors
\n-
186 FactorGraphType gatheredFactors;
\n-
187 gatheredFactors.reserve(node->factors.size() + node->nrChildren());
\n-
188 gatheredFactors += node->factors;
\n-
189 gatheredFactors += myData.childFactors;
\n-
190
\n-
191 // Check for Bayes tree orphan subtrees, and add them to our children
\n-
192 // TODO(frank): should this really happen here?
\n-
193 for (const sharedFactor& factor: node->factors) {
\n-
194 auto asSubtree = dynamic_cast<const BayesTreeOrphanWrapper<BTNode>*>(factor.get());
\n-
195 if (asSubtree) {
\n-
196 myData.bayesTreeNode->children.push_back(asSubtree->clique);
\n-
197 asSubtree->clique->parent_ = myData.bayesTreeNode;
\n-
198 }
\n-
199 }
\n-
200
\n-
201 // >>>>>>>>>>>>>> Do dense elimination step >>>>>>>>>>>>>>>>>>>>>>>>>>>>>
\n-
202 auto eliminationResult = eliminationFunction_(gatheredFactors, node->orderedFrontalKeys);
\n-
203 // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
\n-
204
\n-
205 // Store conditional in BayesTree clique, and in the case of ISAM2Clique also store the
\n-
206 // remaining factor
\n-
207 myData.bayesTreeNode->setEliminationResult(eliminationResult);
\n-
208
\n-
209 // Fill nodes index - we do this here instead of calling insertRoot at the end to avoid
\n-
210 // putting orphan subtrees in the index - they'll already be in the index of the ISAM2
\n-
211 // object they're added to.
\n-
212 for (const Key& j: myData.bayesTreeNode->conditional()->frontals())
\n-
213 nodesIndex_.insert(std::make_pair(j, myData.bayesTreeNode));
\n-
214
\n-
215 // Store remaining factor in parent's gathered factors
\n-
216 if (!eliminationResult.second->empty()) {
\n-
217#ifdef GTSAM_USE_TBB
\n-
218 myData.parentData->writeLock->lock();
\n-
219#endif
\n-
220 myData.parentData->childFactors[myData.myIndexInParent] = eliminationResult.second;
\n-
221#ifdef GTSAM_USE_TBB
\n-
\n-
222 myData.parentData->writeLock->unlock();
\n-
223#endif
\n-
224 }
\n-
225 }
\n-
226 };
\n-
227};
\n-
228
\n-
229/* ************************************************************************* */
\n-
230template<class BAYESTREE, class GRAPH>
\n-
\n-\n-
232 const This& other) {
\n-\n-
234
\n-
235 // Assign the remaining factors - these are pointers to factors in the original factor graph and
\n-
236 // we do not clone them.
\n-
237 remainingFactors_ = other.remainingFactors_;
\n-
238
\n-
239 return *this;
\n-
240}
\n-
\n-
241
\n-
242/* ************************************************************************* */
\n-
\n-
243template <class BAYESTREE, class GRAPH>
\n-
244std::pair<boost::shared_ptr<BAYESTREE>, boost::shared_ptr<GRAPH> >
\n-
\n-\n-
246 gttic(ClusterTree_eliminate);
\n-
247 // Do elimination (depth-first traversal). The rootsContainer stores a 'dummy' BayesTree node
\n-
248 // that contains all of the roots as its children. rootsContainer also stores the remaining
\n-
249 // un-eliminated factors passed up from the roots.
\n-
250 boost::shared_ptr<BayesTreeType> result = boost::make_shared<BayesTreeType>();
\n-
251
\n-
252 typedef EliminationData<This> Data;
\n-
253 Data rootsContainer(0, this->nrRoots());
\n-
254
\n-
255 typename Data::EliminationPostOrderVisitor visitorPost(function, result->nodes_);
\n-
256 {
\n-
257 TbbOpenMPMixedScope threadLimiter; // Limits OpenMP threads since we're mixing TBB and OpenMP
\n-
258 treeTraversal::DepthFirstForestParallel(*this, rootsContainer, Data::EliminationPreOrderVisitor,
\n-
259 visitorPost, 10);
\n-
260 }
\n-
261
\n-
262 // Create BayesTree from roots stored in the dummy BayesTree node.
\n-
263 result->roots_.insert(result->roots_.end(), rootsContainer.bayesTreeNode->children.begin(),
\n-
264 rootsContainer.bayesTreeNode->children.end());
\n-
265
\n-
266 // Add remaining factors that were not involved with eliminated variables
\n-
267 boost::shared_ptr<FactorGraphType> remaining = boost::make_shared<FactorGraphType>();
\n-
268 remaining->reserve(remainingFactors_.size() + rootsContainer.childFactors.size());
\n-
269 remaining->push_back(remainingFactors_.begin(), remainingFactors_.end());
\n-
270 for (const sharedFactor& factor : rootsContainer.childFactors) {
\n-
271 if (factor)
\n-
272 remaining->push_back(factor);
\n-
273 }
\n-
274
\n-
275 // Return result
\n-
276 return std::make_pair(result, remaining);
\n-
277}
\n-
\n-
278
\n-
279} // namespace gtsam
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
Timing utilities.
\n-\n-
Collects factorgraph fragments defined on variable clusters, arranged in a tree.
\n-
Variable ordering for the elimination algorithm.
\n-
Bayes Tree is a tree of cliques of a Bayes Chain.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
42}
\n+
Included from all GTSAM files.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void PrintKeyVector(const KeyVector &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition Key.cpp:77
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const FOREST &forest)
Clone a tree, copy-constructing new nodes (calling boost::make_shared) and setting up child pointers ...
Definition treeTraversal-inst.h:189
\n-
void PrintForest(const FOREST &forest, std::string str, const KeyFormatter &keyFormatter)
Print a tree, prefixing each line with str, and formatting keys using keyFormatter.
Definition treeTraversal-inst.h:219
\n-
void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:154
\n-
An object whose scope defines a block where TBB and OpenMP parallelism are mixed.
Definition types.h:192
\n-
A cluster-tree that eliminates to a Bayes tree.
Definition ClusterTree.h:184
\n-
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition ClusterTree-inst.h:231
\n-
std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr< FactorGraphType > > eliminate(const Eliminate &function) const
Eliminate the factors to a Bayes tree and remaining factor graph.
Definition ClusterTree-inst.h:245
\n-
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition ClusterTree.h:197
\n-
GRAPH::Eliminate Eliminate
Typedef for an eliminate subroutine.
Definition ClusterTree.h:195
\n-
Definition BayesTree.h:276
\n-
Definition ClusterTree-inst.h:115
\n-\n-
A cluster-tree is associated with a factor graph and is defined as in Koller-Friedman: each node k re...
Definition ClusterTree.h:25
\n-
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition ClusterTree-inst.h:104
\n-
FastVector< sharedNode > roots_
concept check
Definition ClusterTree.h:116
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Print the cluster tree.
Definition ClusterTree-inst.h:98
\n-
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition ClusterTree.h:32
\n-
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print this node
Definition ClusterTree-inst.h:26
\n-
Keys orderedFrontalKeys
Frontal keys of this node.
Definition ClusterTree.h:41
\n-
void mergeChildren(const std::vector< bool > &merge)
Merge all children for which bit is set into this node.
Definition ClusterTree-inst.h:56
\n-
void merge(const boost::shared_ptr< Cluster > &cluster)
Merge in given cluster.
Definition ClusterTree-inst.h:44
\n-
std::vector< size_t > nrFrontalsOfChildren() const
Return a vector with nrFrontal keys for each child.
Definition ClusterTree-inst.h:34
\n+
An inference algorithm was called with inconsistent arguments.
Definition inferenceExceptions.h:29
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,439 +1,54 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ClusterTree-inst.h\n+inferenceExceptions.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1\n-10#pragma once\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+7\n+8 * See LICENSE for the license information\n+9\n+10 * -------------------------------------------------------------------------\n+- */\n 11\n-12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh>\n-13#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-14#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n-15#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n-16#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n-17\n-18#ifdef GTSAM_USE_TBB\n-19#include \n-20#endif\n-21\n-22namespace _\bg_\bt_\bs_\ba_\bm {\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+21#include \n+22#include \n 23\n-24/* *************************************************************************\n-*/\n-25template\n-_\b2_\b6void _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s,\n-27 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const {\n-28 std::cout << s << \" (\" << problemSize_ << \")\";\n-29 _\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br(_\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs);\n-30}\n-31\n-32/* *************************************************************************\n-*/\n-33template \n-_\b3_\b4std::vector _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bO_\bf_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn() const\n-{\n-35 std::vector nrFrontals;\n-36 nrFrontals.reserve(nrChildren());\n-37 for (const sharedNode& child : children)\n-38 nrFrontals.push_back(child->nrFrontals());\n-39 return nrFrontals;\n-40}\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+_\b2_\b9 class _\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd : public std::exception {\n+30 public:\n+31 _\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd() noexcept {}\n+32 _\b~_\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd() noexcept override {}\n+33 const char* what() const noexcept override {\n+34 return\n+35 \"An inference algorithm was called with inconsistent arguments. The\\n\"\n+36 \"factor graph, ordering, or variable index were inconsistent with each\\n\"\n+37 \"other, or a full elimination routine was called with an ordering that\\n\"\n+38 \"does not include all of the variables.\";\n+39 }\n+40 };\n 41\n-42/* *************************************************************************\n-*/\n-43template \n-_\b4_\b4void _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be(const boost::shared_ptr&\n-cluster) {\n-45 // Merge keys. For efficiency, we add keys in reverse order at end, calling\n-reverse after..\n-46 orderedFrontalKeys.insert(orderedFrontalKeys.end(), cluster-\n->orderedFrontalKeys.rbegin(),\n-47 cluster->orderedFrontalKeys.rend());\n-48 factors.push_back(cluster->factors);\n-49 children.insert(children.end(), cluster->children.begin(), cluster-\n->children.end());\n-50 // Increment problem size\n-51 problemSize_ = std::max(problemSize_, cluster->problemSize_);\n-52}\n-53\n-54/* *************************************************************************\n-*/\n-55template\n-_\b5_\b6void _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn(\n-57 const std::vector& merge) {\n-58 gttic(Cluster_mergeChildren);\n-59 assert(merge.size() == this->children.size());\n-60\n-61 // Count how many keys, factors and children we'll end up with\n-62 size_t nrKeys = orderedFrontalKeys.size();\n-63 size_t nrFactors = factors.size();\n-64 size_t nrNewChildren = 0;\n-65 // Loop over children\n-66 size_t i = 0;\n-67 for(const sharedNode& child: this->children) {\n-68 if (merge[i]) {\n-69 nrKeys += child->orderedFrontalKeys.size();\n-70 nrFactors += child->factors.size();\n-71 nrNewChildren += child->nrChildren();\n-72 } else {\n-73 nrNewChildren += 1; // we keep the child\n-74 }\n-75 ++i;\n-76 }\n-77\n-78 // now reserve space, and really merge\n-79 auto oldChildren = this->children;\n-80 this->children.clear();\n-81 this->children.reserve(nrNewChildren);\n-82 orderedFrontalKeys.reserve(nrKeys);\n-83 factors.reserve(nrFactors);\n-84 i = 0;\n-85 for (const sharedNode& child : oldChildren) {\n-86 if (merge[i]) {\n-87 this->merge(child);\n-88 } else {\n-89 this->addChild(child); // we keep the child\n-90 }\n-91 ++i;\n-92 }\n-_\b9_\b3 std::reverse(orderedFrontalKeys.begin(), orderedFrontalKeys.end());\n-94}\n-95\n-96/* *************************************************************************\n-*/\n-_\b9_\b7template \n-_\b9_\b8void _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n-keyFormatter) const {\n-99 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt(*this, s, keyFormatter);\n-_\b1_\b0_\b0}\n-101\n-102/* *************************************************************************\n-*/\n-_\b1_\b0_\b3template \n-_\b1_\b0_\b4_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>& _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs& other) {\n-105 // Start by duplicating the tree.\n-106 _\br_\bo_\bo_\bt_\bs_\b_ = _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt(other);\n-107 return *this;\n-108}\n-109\n-110/* *************************************************************************\n-*/\n-111// Elimination traversal data - stores a pointer to the parent data and\n-collects\n-112// the factors resulting from elimination of the children. Also sets up\n-BayesTree\n-113// cliques with parent and child pointers.\n-114template\n-_\b1_\b1_\b5struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba {\n-116 // Typedefs\n-117 typedef typename CLUSTERTREE::sharedFactor sharedFactor;\n-118 typedef typename CLUSTERTREE::FactorType FactorType;\n-119 typedef typename CLUSTERTREE::FactorGraphType FactorGraphType;\n-120 typedef typename CLUSTERTREE::ConditionalType ConditionalType;\n-121 typedef typename CLUSTERTREE::BayesTreeType::Node BTNode;\n-122\n-123 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba* const parentData;\n-124 size_t myIndexInParent;\n-125 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b> childFactors;\n-126 boost::shared_ptr bayesTreeNode;\n-127#ifdef GTSAM_USE_TBB\n-128 boost::shared_ptr writeLock;\n-129#endif\n-130\n-131 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba(_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba* _parentData, size_t nChildren) :\n-132 parentData(_parentData), bayesTreeNode(boost::make_shared())\n-133#ifdef GTSAM_USE_TBB\n-134 , writeLock(boost::make_shared())\n-135#endif\n-136 {\n-137 if (parentData) {\n-_\b1_\b3_\b8#ifdef GTSAM_USE_TBB\n-139 parentData->writeLock->lock();\n-140#endif\n-141 myIndexInParent = parentData->childFactors.size();\n-142 parentData->childFactors.push_back(_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br());\n-143#ifdef GTSAM_USE_TBB\n-144 parentData->writeLock->unlock();\n-145#endif\n-146 } else {\n-147 myIndexInParent = 0;\n-148 }\n-149 // Set up BayesTree parent and child pointers\n-150 if (parentData) {\n-151 if (parentData->parentData) // If our parent is not the dummy node\n-152 bayesTreeNode->parent_ = parentData->bayesTreeNode;\n-153 parentData->bayesTreeNode->children.push_back(bayesTreeNode);\n-154 }\n-155 }\n-156\n-157 // Elimination pre-order visitor - creates the EliminationData structure\n-for the visited node.\n-158 static EliminationData EliminationPreOrderVisitor(\n-159 const typename CLUSTERTREE::sharedNode& node,\n-160 EliminationData& parentData) {\n-161 assert(node);\n-162 EliminationData myData(&parentData, node->nrChildren());\n-163 myData.bayesTreeNode->problemSize_ = node->problemSize();\n-164 return myData;\n-165 }\n-166\n-167 // Elimination post-order visitor - combine the child factors with our own\n-factors, add the\n-168 // resulting conditional to the BayesTree, and add the remaining factor to\n-the parent.\n-_\b1_\b6_\b9 class _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\bt_\bO_\br_\bd_\be_\br_\bV_\bi_\bs_\bi_\bt_\bo_\br {\n-170 const typename CLUSTERTREE::Eliminate& eliminationFunction_;\n-171 typename CLUSTERTREE::BayesTreeType::Nodes& nodesIndex_;\n-172\n-173 public:\n-174 // Construct functor\n-_\b1_\b7_\b5 EliminationPostOrderVisitor(\n-176 const typename CLUSTERTREE::Eliminate& eliminationFunction,\n-177 typename CLUSTERTREE::BayesTreeType::Nodes& nodesIndex) :\n-178 eliminationFunction_(eliminationFunction), nodesIndex_(nodesIndex) {\n-179 }\n-180\n-181 // Function that does the HEAVY lifting\n-182 void operator()(const typename CLUSTERTREE::sharedNode& node,\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba& myData) {\n-183 assert(node);\n-184\n-185 // Gather factors\n-186 FactorGraphType gatheredFactors;\n-187 gatheredFactors.reserve(node->factors.size() + node->nrChildren());\n-188 gatheredFactors += node->factors;\n-189 gatheredFactors += myData.childFactors;\n-190\n-191 // Check for Bayes tree orphan subtrees, and add them to our children\n-192 // TODO(frank): should this really happen here?\n-193 for (const sharedFactor& factor: node->factors) {\n-194 auto asSubtree = dynamic_cast*>\n-(factor.get());\n-195 if (asSubtree) {\n-196 myData.bayesTreeNode->children.push_back(asSubtree->clique);\n-197 asSubtree->clique->parent_ = myData.bayesTreeNode;\n-198 }\n-199 }\n-200\n-201 // >>>>>>>>>>>>>> Do dense elimination step >>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n-202 auto eliminationResult = eliminationFunction_(gatheredFactors, node-\n->orderedFrontalKeys);\n-203 // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n-204\n-205 // Store conditional in BayesTree clique, and in the case of ISAM2Clique\n-also store the\n-206 // remaining factor\n-207 myData.bayesTreeNode->setEliminationResult(eliminationResult);\n-208\n-209 // Fill nodes index - we do this here instead of calling insertRoot at the\n-end to avoid\n-210 // putting orphan subtrees in the index - they'll already be in the index\n-of the ISAM2\n-211 // object they're added to.\n-212 for (const Key& j: myData.bayesTreeNode->conditional()->frontals())\n-213 nodesIndex_.insert(std::make_pair(j, myData.bayesTreeNode));\n-214\n-215 // Store remaining factor in parent's gathered factors\n-216 if (!eliminationResult.second->empty()) {\n-217#ifdef GTSAM_USE_TBB\n-218 myData.parentData->writeLock->lock();\n-219#endif\n-220 myData.parentData->childFactors[myData.myIndexInParent] =\n-eliminationResult.second;\n-221#ifdef GTSAM_USE_TBB\n-_\b2_\b2_\b2 myData.parentData->writeLock->unlock();\n-223#endif\n-224 }\n-225 }\n-226 };\n-227};\n-228\n-229/* *************************************************************************\n-*/\n-230template\n-_\b2_\b3_\b1_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b>&\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(\n-232 const _\bT_\bh_\bi_\bs& other) {\n-233 _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(other);\n-234\n-235 // Assign the remaining factors - these are pointers to factors in the\n-original factor graph and\n-236 // we do not clone them.\n-237 remainingFactors_ = other.remainingFactors_;\n-238\n-239 return *this;\n-240}\n-241\n-242/* *************************************************************************\n-*/\n-_\b2_\b4_\b3template \n-244std::pair, boost::shared_ptr >\n-_\b2_\b4_\b5_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be&\n-function) const {\n-246 gttic(ClusterTree_eliminate);\n-247 // Do elimination (depth-first traversal). The rootsContainer stores a\n-'dummy' BayesTree node\n-248 // that contains all of the roots as its children. rootsContainer also\n-stores the remaining\n-249 // un-eliminated factors passed up from the roots.\n-250 boost::shared_ptr result = boost::make_shared\n-();\n-251\n-252 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba_\b<_\bT_\bh_\bi_\bs_\b> Data;\n-253 Data rootsContainer(0, this->nrRoots());\n-254\n-255 typename Data::EliminationPostOrderVisitor visitorPost(function, result-\n->nodes_);\n-256 {\n-257 _\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be threadLimiter; // Limits OpenMP threads since we're\n-mixing TBB and OpenMP\n-258 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl(*this, rootsContainer, Data::\n-EliminationPreOrderVisitor,\n-259 visitorPost, 10);\n-260 }\n-261\n-262 // Create BayesTree from roots stored in the dummy BayesTree node.\n-263 result->roots_.insert(result->roots_.end(), rootsContainer.bayesTreeNode-\n->children.begin(),\n-264 rootsContainer.bayesTreeNode->children.end());\n-265\n-266 // Add remaining factors that were not involved with eliminated variables\n-267 boost::shared_ptr remaining = boost::\n-make_shared();\n-268 remaining->reserve(remainingFactors_.size() +\n-rootsContainer.childFactors.size());\n-269 remaining->push_back(remainingFactors_.begin(), remainingFactors_.end());\n-270 for (const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor : rootsContainer.childFactors) {\n-271 if (factor)\n-272 remaining->push_back(factor);\n-273 }\n-274\n-275 // Return result\n-276 return std::make_pair(result, remaining);\n-277}\n-278\n-279} // namespace gtsam\n-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\n-_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n-_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh\n-Collects factorgraph fragments defined on variable clusters, arranged in a\n-tree.\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Bayes Tree is a tree of cliques of a Bayes Chain.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+42}\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-void PrintKeyVector(const KeyVector &keys, const string &s, const KeyFormatter\n-&keyFormatter)\n-Utility function to print sets of keys with optional prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.cpp:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt\n-FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const\n-FOREST &forest)\n-Clone a tree, copy-constructing new nodes (calling boost::make_shared) and\n-setting up child pointers ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt\n-void PrintForest(const FOREST &forest, std::string str, const KeyFormatter\n-&keyFormatter)\n-Print a tree, prefixing each line with str, and formatting keys using\n-keyFormatter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl\n-void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE\n-&visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)\n-Traverse a forest depth-first with pre-order and post-order visits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be\n-An object whose scope defines a block where TBB and OpenMP parallelism are\n-mixed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n-A cluster-tree that eliminates to a Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-This & operator=(const This &other)\n-Assignment operator - makes a deep copy of the tree structure, but only\n-pointers to factors are copie...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:231\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr<\n-FactorGraphType > > eliminate(const Eliminate &function) const\n-Eliminate the factors to a Bayes tree and remaining factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:245\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< FactorType > sharedFactor\n-Shared pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:197\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-GRAPH::Eliminate Eliminate\n-Typedef for an eliminate subroutine.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:276\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bD_\ba_\bt_\ba_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\bt_\bO_\br_\bd_\be_\br_\bV_\bi_\bs_\bi_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:169\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n-A cluster-tree is associated with a factor graph and is defined as in Koller-\n-Friedman: each node k re...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:25\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-This & operator=(const This &other)\n-Assignment operator - makes a deep copy of the tree structure, but only\n-pointers to factors are copie...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs_\b_\n-FastVector< sharedNode > roots_\n-concept check\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:116\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-Print the cluster tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< FactorType > sharedFactor\n-Shared pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-print this node\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:26\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs\n-Keys orderedFrontalKeys\n-Frontal keys of this node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn\n-void mergeChildren(const std::vector< bool > &merge)\n-Merge all children for which bit is set into this node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be\n-void merge(const boost::shared_ptr< Cluster > &cluster)\n-Merge in given cluster.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bO_\bf_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn\n-std::vector< size_t > nrFrontalsOfChildren() const\n-Return a vector with nrFrontal keys for each child.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd\n+An inference algorithm was called with inconsistent arguments.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn inferenceExceptions.h:29\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00632.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00632.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex-inl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,33 +95,40 @@\n
\n \n \n \n
\n \n-
MetisIndex-inl.h File Reference
\n+
BayesTree.cpp File Reference
\n
\n
\n \n-

Go to the source code of this file.

\n+

Bayes Tree is a tree of cliques of a Bayes Chain. \n+More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Andrew Melim
\n-
Date
Oct. 10, 2014
\n+

Bayes Tree is a tree of cliques of a Bayes Chain.

\n+
Author
Frank Dellaert
\n+
\n+Michael Kaess
\n+
\n+Viorela Ila
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-MetisIndex-inl.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+BayesTree.cpp File Reference\n+Bayes Tree is a tree of cliques of a Bayes Chain. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Bayes Tree is a tree of cliques of a Bayes Chain.\n Author\n- Andrew Melim\n- Date\n- Oct. 10, 2014\n+ Frank Dellaert\n+ Michael Kaess\n+ Viorela Ila\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00635.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00635.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableIndex.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.h File Reference\n \n \n \n \n \n \n \n@@ -94,32 +94,97 @@\n \n \n \n \n \n
\n \n-
VariableIndex.cpp File Reference
\n+Classes |\n+Namespaces |\n+Typedefs |\n+Functions
\n+
Key.h File Reference
\n \n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::StreamedKey
 To use the key_formatter on Keys, they must be wrapped in a StreamedKey. More...
 
class  gtsam::key_formatter
 Output stream manipulator that will format gtsam::Keys according to the given KeyFormatter, as long as Key values are wrapped in a gtsam::StreamedKey. More...
 
struct  gtsam::traits< Key >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Typedefs

\n+using gtsam::KeyFormatter = std::function< std::string(Key)>
 Typedef for a function to format a key, i.e. to convert it to a string.
 
\n+using gtsam::KeyVector = FastVector< Key >
 Define collection type once and for all - also used in wrappers.
 
\n+using gtsam::KeyList = FastList< Key >
 
\n+using gtsam::KeySet = FastSet< Key >
 
\n+using gtsam::KeyGroupMap = FastMap< Key, int >
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+string gtsam::_defaultKeyFormatter (Key key)
 
\n+string gtsam::_multirobotKeyFormatter (Key key)
 
\n+void gtsam::PrintKey (Key key, const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter)
 Utility function to print one key with optional prefix.
 
\n+void gtsam::PrintKeyList (const KeyList &keys, const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter)
 Utility function to print sets of keys with optional prefix.
 
\n+void gtsam::PrintKeyVector (const KeyVector &keys, const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter)
 Utility function to print sets of keys with optional prefix.
 
\n+void gtsam::PrintKeySet (const KeySet &keys, const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter)
 Utility function to print sets of keys with optional prefix.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
March 26, 2013
\n+
Author
Richard Roberts
\n+
\n+Alex Cunningham
\n+
Date
Feb 20, 2012
\n+
Author
Richard Roberts
\n+
Date
Feb 20, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,72 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-VariableIndex.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Key.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by\n+\u00a0 To use the _\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br on Keys, they must be wrapped in a\n+ _\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+ Output stream manipulator that will format gtsam::Keys according to\n+\u00a0 the given KeyFormatter, as long as Key values are wrapped in a _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n+ _\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bK_\be_\by_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byF\bFo\bor\brm\bma\bat\btt\bte\ber\br = std::function< std::string(_\bK_\be_\by)>\n+\u00a0 Typedef for a function to format a key, i.e. to convert it to a string.\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byV\bVe\bec\bct\bto\bor\br = _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br< _\bK_\be_\by >\n+\u00a0 Define collection type once and for all - also used in wrappers.\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byL\bLi\bis\bst\bt = _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt< _\bK_\be_\by >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byS\bSe\bet\bt = _\bF_\ba_\bs_\bt_\bS_\be_\bt< _\bK_\be_\by >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byG\bGr\bro\bou\bup\bpM\bMa\bap\bp = _\bF_\ba_\bs_\bt_\bM_\ba_\bp< _\bK_\be_\by, int >\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:_\b_d\bde\bef\bfa\bau\bul\blt\btK\bKe\bey\byF\bFo\bor\brm\bma\bat\btt\bte\ber\br (_\bK_\be_\by key)\n+\u00a0\n+string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:_\b_m\bmu\bul\blt\bti\bir\bro\bob\bbo\bot\btK\bKe\bey\byF\bFo\bor\brm\bma\bat\btt\bte\ber\br (_\bK_\be_\by key)\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPr\bri\bin\bnt\btK\bKe\bey\by (_\bK_\be_\by key, const std::string &s=\"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+ &keyFormatter=DefaultKeyFormatter)\n+\u00a0 Utility function to print one key with optional prefix.\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPr\bri\bin\bnt\btK\bKe\bey\byL\bLi\bis\bst\bt (const _\bK_\be_\by_\bL_\bi_\bs_\bt &keys, const std::string &s=\"\",\n+ const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter=DefaultKeyFormatter)\n+\u00a0 Utility function to print sets of keys with optional prefix.\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPr\bri\bin\bnt\btK\bKe\bey\byV\bVe\bec\bct\bto\bor\br (const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys, const std::string &s=\"\",\n+ const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter=DefaultKeyFormatter)\n+\u00a0 Utility function to print sets of keys with optional prefix.\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPr\bri\bin\bnt\btK\bKe\bey\byS\bSe\bet\bt (const _\bK_\be_\by_\bS_\be_\bt &keys, const std::string &s=\"\", const\n+ _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter=DefaultKeyFormatter)\n+\u00a0 Utility function to print sets of keys with optional prefix.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n Richard Roberts\n+ Alex Cunningham\n+ Date\n+ Feb 20, 2012\n+ Author\n+ Richard Roberts\n Date\n- March 26, 2013\n+ Feb 20, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bc_\bp_\bp\n+ * _\bK_\be_\by_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00638_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00638_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminateableFactorGraph-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM.h Source File\n \n \n \n \n \n \n \n@@ -98,483 +98,80 @@\n
No Matches
\n \n \n \n \n \n
\n-
EliminateableFactorGraph-inst.h
\n+
ISAM.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n+
18// \\callgraph
\n
19#pragma once
\n
20
\n-\n-\n-
23#include <boost/tuple/tuple.hpp>
\n+\n+
22
\n+
23namespace gtsam {
\n
24
\n-
25namespace gtsam {
\n-
26
\n-
27 /* ************************************************************************* */
\n-
28 template<class FACTORGRAPH>
\n-
29 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>
\n-
\n-\n-
31 OptionalOrderingType orderingType, const Eliminate& function,
\n-
32 OptionalVariableIndex variableIndex) const {
\n-
33 if(!variableIndex) {
\n-
34 // If no VariableIndex provided, compute one and call this function again IMPORTANT: we check
\n-
35 // for no variable index first so that it's always computed if we need to call COLAMD because
\n-
36 // no Ordering is provided. When removing optional from VariableIndex, create VariableIndex
\n-
37 // before creating ordering.
\n-
38 VariableIndex computedVariableIndex(asDerived());
\n-
39 return eliminateSequential(orderingType, function, computedVariableIndex);
\n-
40 }
\n-
41 else {
\n-
42 // Compute an ordering and call this function again. We are guaranteed to have a
\n-
43 // VariableIndex already here because we computed one if needed in the previous 'if' block.
\n-
44 if (orderingType == Ordering::METIS) {
\n-
45 Ordering computedOrdering = Ordering::Metis(asDerived());
\n-
46 return eliminateSequential(computedOrdering, function, variableIndex);
\n-
47 } else if (orderingType == Ordering::COLAMD) {
\n-
48 Ordering computedOrdering = Ordering::Colamd(*variableIndex);
\n-
49 return eliminateSequential(computedOrdering, function, variableIndex);
\n-
50 } else if (orderingType == Ordering::NATURAL) {
\n-
51 Ordering computedOrdering = Ordering::Natural(asDerived());
\n-
52 return eliminateSequential(computedOrdering, function, variableIndex);
\n-
53 } else {
\n-
54 Ordering computedOrdering = EliminationTraitsType::DefaultOrderingFunc(
\n-
55 asDerived(), variableIndex);
\n-
56 return eliminateSequential(computedOrdering, function, variableIndex);
\n-
57 }
\n-
58 }
\n-
59 }
\n-
\n-
60
\n-
61 /* ************************************************************************* */
\n-
62 template<class FACTORGRAPH>
\n-
63 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>
\n-
\n-\n-
65 const Ordering& ordering, const Eliminate& function,
\n-
66 OptionalVariableIndex variableIndex) const
\n-
67 {
\n-
68 if(!variableIndex) {
\n-
69 // If no VariableIndex provided, compute one and call this function again
\n-
70 VariableIndex computedVariableIndex(asDerived());
\n-
71 return eliminateSequential(ordering, function, computedVariableIndex);
\n-
72 } else {
\n-
73 gttic(eliminateSequential);
\n-
74 // Do elimination
\n-
75 EliminationTreeType etree(asDerived(), *variableIndex, ordering);
\n-
76 boost::shared_ptr<BayesNetType> bayesNet;
\n-
77 boost::shared_ptr<FactorGraphType> factorGraph;
\n-
78 boost::tie(bayesNet,factorGraph) = etree.eliminate(function);
\n-
79 // If any factors are remaining, the ordering was incomplete
\n-
80 if(!factorGraph->empty())
\n-\n-
82 // Return the Bayes net
\n-
83 return bayesNet;
\n-
84 }
\n-
85 }
\n-
\n-
86
\n-
87 /* ************************************************************************* */
\n-
88 template <class FACTORGRAPH>
\n-
89 boost::shared_ptr<
\n-\n-
\n-\n-
92 OptionalOrderingType orderingType, const Eliminate& function,
\n-
93 OptionalVariableIndex variableIndex) const {
\n-
94 if (!variableIndex) {
\n-
95 // If no VariableIndex provided, compute one and call this function again
\n-
96 // IMPORTANT: we check for no variable index first so that it's always
\n-
97 // computed if we need to call COLAMD because no Ordering is provided.
\n-
98 // When removing optional from VariableIndex, create VariableIndex before
\n-
99 // creating ordering.
\n-
100 VariableIndex computedVariableIndex(asDerived());
\n-
101 return eliminateMultifrontal(orderingType, function,
\n-
102 computedVariableIndex);
\n-
103 } else {
\n-
104 // Compute an ordering and call this function again. We are guaranteed to
\n-
105 // have a VariableIndex already here because we computed one if needed in
\n-
106 // the previous 'if' block.
\n-
107 if (orderingType == Ordering::METIS) {
\n-
108 Ordering computedOrdering = Ordering::Metis(asDerived());
\n-
109 return eliminateMultifrontal(computedOrdering, function, variableIndex);
\n-
110 } else if (orderingType == Ordering::COLAMD) {
\n-
111 Ordering computedOrdering = Ordering::Colamd(*variableIndex);
\n-
112 return eliminateMultifrontal(computedOrdering, function, variableIndex);
\n-
113 } else if (orderingType == Ordering::NATURAL) {
\n-
114 Ordering computedOrdering = Ordering::Natural(asDerived());
\n-
115 return eliminateMultifrontal(computedOrdering, function, variableIndex);
\n-
116 } else {
\n-
\n-
117 Ordering computedOrdering = EliminationTraitsType::DefaultOrderingFunc(
\n-
118 asDerived(), variableIndex);
\n-
119 return eliminateMultifrontal(computedOrdering, function, variableIndex);
\n-
120 }
\n-
121 }
\n-
122 }
\n-
123
\n-
124 /* ************************************************************************* */
\n-
125 template<class FACTORGRAPH>
\n-
126 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>
\n-
\n-\n-
128 const Ordering& ordering, const Eliminate& function,
\n-
129 OptionalVariableIndex variableIndex) const
\n-
130 {
\n-
131 if(!variableIndex) {
\n-
132 // If no VariableIndex provided, compute one and call this function again
\n-
133 VariableIndex computedVariableIndex(asDerived());
\n-
134 return eliminateMultifrontal(ordering, function, computedVariableIndex);
\n-
135 } else {
\n-
\n-
136 gttic(eliminateMultifrontal);
\n-
137 // Do elimination with given ordering
\n-
138 EliminationTreeType etree(asDerived(), *variableIndex, ordering);
\n-
139 JunctionTreeType junctionTree(etree);
\n-
140 boost::shared_ptr<BayesTreeType> bayesTree;
\n-
141 boost::shared_ptr<FactorGraphType> factorGraph;
\n-
142 boost::tie(bayesTree,factorGraph) = junctionTree.eliminate(function);
\n-
143 // If any factors are remaining, the ordering was incomplete
\n-
144 if(!factorGraph->empty())
\n-\n-
146 // Return the Bayes tree
\n-
147 return bayesTree;
\n-
148 }
\n-
149 }
\n-
150
\n-
151 /* ************************************************************************* */
\n-
152 template<class FACTORGRAPH>
\n-
153 std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>, boost::shared_ptr<FACTORGRAPH> >
\n-
\n-\n-
155 const Ordering& ordering, const Eliminate& function, OptionalVariableIndex variableIndex) const
\n-
156 {
\n-
\n-
157 if(variableIndex) {
\n-
158 gttic(eliminatePartialSequential);
\n-
159 // Do elimination
\n-
160 EliminationTreeType etree(asDerived(), *variableIndex, ordering);
\n-
161 return etree.eliminate(function);
\n-
162 } else {
\n-
163 // If no variable index is provided, compute one and call this function again
\n-
164 VariableIndex computedVariableIndex(asDerived());
\n-
165 return eliminatePartialSequential(ordering, function, computedVariableIndex);
\n-
166 }
\n-
167 }
\n-
168
\n-
169 /* ************************************************************************* */
\n-
170 template<class FACTORGRAPH>
\n-
\n-
171 std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>, boost::shared_ptr<FACTORGRAPH> >
\n-
\n-\n-
173 const KeyVector& variables, const Eliminate& function, OptionalVariableIndex variableIndex) const
\n-
174 {
\n-
175 if(variableIndex) {
\n-
176 gttic(eliminatePartialSequential);
\n-
177 // Compute full ordering
\n-
178 Ordering fullOrdering = Ordering::ColamdConstrainedFirst(*variableIndex, variables);
\n-
179
\n-
180 // Split off the part of the ordering for the variables being eliminated
\n-
\n-
181 Ordering ordering(fullOrdering.begin(), fullOrdering.begin() + variables.size());
\n-
182 return eliminatePartialSequential(ordering, function, variableIndex);
\n-
183 } else {
\n-
184 // If no variable index is provided, compute one and call this function again
\n-
185 VariableIndex computedVariableIndex(asDerived());
\n-
186 return eliminatePartialSequential(variables, function, computedVariableIndex);
\n-
187 }
\n-
188 }
\n-
189
\n-
190 /* ************************************************************************* */
\n-
\n-
191 template<class FACTORGRAPH>
\n-
192 std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>, boost::shared_ptr<FACTORGRAPH> >
\n-
\n-\n-
194 const Ordering& ordering, const Eliminate& function, OptionalVariableIndex variableIndex) const
\n-
195 {
\n-
196 if(variableIndex) {
\n-
197 gttic(eliminatePartialMultifrontal);
\n-
198 // Do elimination
\n-
199 EliminationTreeType etree(asDerived(), *variableIndex, ordering);
\n-
200 JunctionTreeType junctionTree(etree);
\n-
\n-
201 return junctionTree.eliminate(function);
\n-
202 } else {
\n-
203 // If no variable index is provided, compute one and call this function again
\n-
204 VariableIndex computedVariableIndex(asDerived());
\n-
205 return eliminatePartialMultifrontal(ordering, function, computedVariableIndex);
\n-
206 }
\n-
207 }
\n-
\n-
\n-
208
\n-
209 /* ************************************************************************* */
\n-
210 template<class FACTORGRAPH>
\n-
\n-
211 std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>, boost::shared_ptr<FACTORGRAPH> >
\n-
\n-\n-
213 const KeyVector& variables, const Eliminate& function, OptionalVariableIndex variableIndex) const
\n-
214 {
\n-
215 if(variableIndex) {
\n-
216 gttic(eliminatePartialMultifrontal);
\n-
217 // Compute full ordering
\n-
218 Ordering fullOrdering = Ordering::ColamdConstrainedFirst(*variableIndex, variables);
\n-
219
\n-
220 // Split off the part of the ordering for the variables being eliminated
\n-
221 Ordering ordering(fullOrdering.begin(), fullOrdering.begin() + variables.size());
\n-
222 return eliminatePartialMultifrontal(ordering, function, variableIndex);
\n-
223 } else {
\n-
224 // If no variable index is provided, compute one and call this function again
\n-
\n-
225 VariableIndex computedVariableIndex(asDerived());
\n-
226 return eliminatePartialMultifrontal(variables, function, computedVariableIndex);
\n-
227 }
\n-
228 }
\n-
229
\n-
230 /* ************************************************************************* */
\n-
231 template<class FACTORGRAPH>
\n-
232 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>
\n-
\n-\n-
234 boost::variant<const Ordering&, const KeyVector&> variables,
\n-
235 const Eliminate& function, OptionalVariableIndex variableIndex) const
\n-
236 {
\n-
237 if(!variableIndex) {
\n-
238 // If no variable index is provided, compute one and call this function again
\n-
239 VariableIndex index(asDerived());
\n-
\n-
240 return marginalMultifrontalBayesNet(variables, function, index);
\n-
241 } else {
\n-
242 // No ordering was provided for the marginalized variables, so order them using constrained
\n-
243 // COLAMD.
\n-
244 bool unmarginalizedAreOrdered = (boost::get<const Ordering&>(&variables) != 0);
\n-
245 const KeyVector* variablesOrOrdering =
\n-
246 unmarginalizedAreOrdered ?
\n-
247 boost::get<const Ordering&>(&variables) : boost::get<const KeyVector&>(&variables);
\n-
248
\n-
249 Ordering totalOrdering =
\n-
250 Ordering::ColamdConstrainedLast(*variableIndex, *variablesOrOrdering, unmarginalizedAreOrdered);
\n-
251
\n-
252 // Split up ordering
\n-
253 const size_t nVars = variablesOrOrdering->size();
\n-
254 Ordering marginalizationOrdering(totalOrdering.begin(), totalOrdering.end() - nVars);
\n-
\n-
255 Ordering marginalVarsOrdering(totalOrdering.end() - nVars, totalOrdering.end());
\n-
256
\n-
257 // Call this function again with the computed orderings
\n-
258 return marginalMultifrontalBayesNet(marginalVarsOrdering, marginalizationOrdering, function, *variableIndex);
\n-
259 }
\n-
260 }
\n-
261
\n-
262 /* ************************************************************************* */
\n-
263 template<class FACTORGRAPH>
\n-
264 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>
\n-
\n-\n-
266 boost::variant<const Ordering&, const KeyVector&> variables,
\n-
267 const Ordering& marginalizedVariableOrdering,
\n-
268 const Eliminate& function, OptionalVariableIndex variableIndex) const
\n-
269 {
\n-
\n-
270 if(!variableIndex) {
\n-
271 // If no variable index is provided, compute one and call this function again
\n-
272 VariableIndex index(asDerived());
\n-
273 return marginalMultifrontalBayesNet(variables, marginalizedVariableOrdering, function, index);
\n-
274 } else {
\n-
275 gttic(marginalMultifrontalBayesNet);
\n-
276 // An ordering was provided for the marginalized variables, so we can first eliminate them
\n-
\n-
277 // in the order requested.
\n-
278 boost::shared_ptr<BayesTreeType> bayesTree;
\n-
279 boost::shared_ptr<FactorGraphType> factorGraph;
\n-
280 boost::tie(bayesTree,factorGraph) =
\n-
281 eliminatePartialMultifrontal(marginalizedVariableOrdering, function, *variableIndex);
\n-
282
\n-
283 if(const Ordering* varsAsOrdering = boost::get<const Ordering&>(&variables))
\n-
284 {
\n-
285 // An ordering was also provided for the unmarginalized variables, so we can also
\n-
286 // eliminate them in the order requested.
\n-
287 return factorGraph->eliminateSequential(*varsAsOrdering, function);
\n-
288 }
\n-
289 else
\n-
290 {
\n-
291 // No ordering was provided for the unmarginalized variables, so order them with COLAMD.
\n-
292 return factorGraph->eliminateSequential(Ordering::COLAMD, function);
\n-
293 }
\n-
294 }
\n-
295 }
\n-
296
\n-
297 /* ************************************************************************* */
\n-
298 template<class FACTORGRAPH>
\n-
299 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>
\n-
\n-\n-
301 boost::variant<const Ordering&, const KeyVector&> variables,
\n-
302 const Eliminate& function, OptionalVariableIndex variableIndex) const
\n-
303 {
\n-
304 if(!variableIndex) {
\n-
305 // If no variable index is provided, compute one and call this function again
\n-
306 VariableIndex computedVariableIndex(asDerived());
\n-
307 return marginalMultifrontalBayesTree(variables, function, computedVariableIndex);
\n-
308 } else {
\n-
309 // No ordering was provided for the marginalized variables, so order them using constrained
\n-
310 // COLAMD.
\n-
311 bool unmarginalizedAreOrdered = (boost::get<const Ordering&>(&variables) != 0);
\n-
312 const KeyVector* variablesOrOrdering =
\n-
313 unmarginalizedAreOrdered ?
\n-
314 boost::get<const Ordering&>(&variables) : boost::get<const KeyVector&>(&variables);
\n-
315
\n-
316 Ordering totalOrdering =
\n-
317 Ordering::ColamdConstrainedLast(*variableIndex, *variablesOrOrdering, unmarginalizedAreOrdered);
\n-
318
\n-
319 // Split up ordering
\n-
320 const size_t nVars = variablesOrOrdering->size();
\n-
321 Ordering marginalizationOrdering(totalOrdering.begin(), totalOrdering.end() - nVars);
\n-
322 Ordering marginalVarsOrdering(totalOrdering.end() - nVars, totalOrdering.end());
\n-
323
\n-
324 // Call this function again with the computed orderings
\n-
325 return marginalMultifrontalBayesTree(marginalVarsOrdering, marginalizationOrdering, function, *variableIndex);
\n-
326 }
\n-
327 }
\n-
\n-
328
\n-
329 /* ************************************************************************* */
\n-
330 template<class FACTORGRAPH>
\n-
331 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>
\n-
\n-\n-
333 boost::variant<const Ordering&, const KeyVector&> variables,
\n-
334 const Ordering& marginalizedVariableOrdering,
\n-
335 const Eliminate& function, OptionalVariableIndex variableIndex) const
\n-
336 {
\n-
337 if(!variableIndex) {
\n-
338 // If no variable index is provided, compute one and call this function again
\n-
339 VariableIndex computedVariableIndex(asDerived());
\n-
340 return marginalMultifrontalBayesTree(variables, marginalizedVariableOrdering, function, computedVariableIndex);
\n-
341 } else {
\n-
342 gttic(marginalMultifrontalBayesTree);
\n-
343 // An ordering was provided for the marginalized variables, so we can first eliminate them
\n-
344 // in the order requested.
\n-
345 boost::shared_ptr<BayesTreeType> bayesTree;
\n-
346 boost::shared_ptr<FactorGraphType> factorGraph;
\n-
347 boost::tie(bayesTree,factorGraph) =
\n-
348 eliminatePartialMultifrontal(marginalizedVariableOrdering, function, *variableIndex);
\n-
349
\n-
350 if(const Ordering* varsAsOrdering = boost::get<const Ordering&>(&variables))
\n-
351 {
\n-
352 // An ordering was also provided for the unmarginalized variables, so we can also
\n-
353 // eliminate them in the order requested.
\n-
354 return factorGraph->eliminateMultifrontal(*varsAsOrdering, function);
\n-
355 }
\n-
356 else
\n-
357 {
\n-
358 // No ordering was provided for the unmarginalized variables, so order them with COLAMD.
\n-
359 return factorGraph->eliminateMultifrontal(Ordering::COLAMD, function);
\n-
360 }
\n-
361 }
\n-
362 }
\n-
\n-
363
\n-
364 /* ************************************************************************* */
\n-
365 template<class FACTORGRAPH>
\n-
366 boost::shared_ptr<FACTORGRAPH>
\n-
\n-\n-
368 const KeyVector& variables,
\n-
369 const Eliminate& function, OptionalVariableIndex variableIndex) const
\n-
370 {
\n-
371 if(variableIndex)
\n-
372 {
\n-
373 // Compute a total ordering for all variables
\n-
374 Ordering totalOrdering = Ordering::ColamdConstrainedLast(*variableIndex, variables);
\n-
375
\n-
376 // Split out the part for the marginalized variables
\n-
377 Ordering marginalizationOrdering(totalOrdering.begin(), totalOrdering.end() - variables.size());
\n-
378
\n-
379 // Eliminate and return the remaining factor graph
\n-
380 return eliminatePartialMultifrontal(marginalizationOrdering, function, *variableIndex).second;
\n-
381 }
\n-
382 else
\n-
383 {
\n-
384 // If no variable index is provided, compute one and call this function again
\n-
385 VariableIndex computedVariableIndex(asDerived());
\n-
386 return marginal(variables, function, computedVariableIndex);
\n-
387 }
\n-
388 }
\n-
\n-
\n-
389
\n-
390
\n-
391}
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
Variable elimination algorithms for factor graphs.
\n-
Exceptions that may be thrown by inference algorithms.
\n+
30template <class BAYESTREE>
\n+
\n+
31class ISAM : public BAYESTREE {
\n+
32 public:
\n+
33 typedef BAYESTREE Base;
\n+
34 typedef typename Base::BayesNetType BayesNetType;
\n+
35 typedef typename Base::FactorGraphType FactorGraphType;
\n+
36 typedef typename Base::Clique Clique;
\n+
37 typedef typename Base::sharedClique sharedClique;
\n+
38 typedef typename Base::Cliques Cliques;
\n+
39
\n+
40 private:
\n+
41 typedef typename Base::Eliminate Eliminate;
\n+
42 typedef typename Base::EliminationTraitsType EliminationTraitsType;
\n+
43
\n+
44 public:
\n+
47
\n+
49 ISAM() {}
\n+
50
\n+
52 explicit ISAM(const Base& bayesTree) : Base(bayesTree) {}
\n+
53
\n+
57
\n+
64 void update(
\n+
65 const FactorGraphType& newFactors,
\n+
66 const Eliminate& function = EliminationTraitsType::DefaultEliminate);
\n+
67
\n+
70 void updateInternal(
\n+
71 const FactorGraphType& newFactors, Cliques* orphans,
\n+
72 const Eliminate& function = EliminationTraitsType::DefaultEliminate);
\n+
73
\n+
75};
\n+
\n+
76
\n+
77} // namespace gtsam
\n+
Included from all GTSAM files.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
boost::shared_ptr< BayesTreeType > marginalMultifrontalBayesTree(boost::variant< const Ordering &, const KeyVector & > variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal of the requested variables and return the result as a Bayes tree.
Definition EliminateableFactorGraph-inst.h:300
\n-
EliminationTraitsType::JunctionTreeType JunctionTreeType
Junction tree type that can do multifrontal elimination of this graph.
Definition EliminateableFactorGraph.h:82
\n-
boost::shared_ptr< FactorGraphType > marginal(const KeyVector &variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal factor graph of the requested variables.
Definition EliminateableFactorGraph-inst.h:367
\n-
boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant< const Ordering &, const KeyVector & > variables, const Ordering &marginalizedVariableOrdering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal of the requested variables and return the result as a Bayes net.
Definition EliminateableFactorGraph-inst.h:265
\n-
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition EliminateableFactorGraph.h:89
\n-
EliminationTraitsType::BayesTreeType BayesTreeType
Bayes tree type produced by multifrontal elimination.
Definition EliminateableFactorGraph.h:79
\n-
boost::shared_ptr< BayesNetType > eliminateSequential(OptionalOrderingType orderingType=boost::none, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do sequential elimination of all variables to produce a Bayes net.
Definition EliminateableFactorGraph-inst.h:30
\n-
boost::shared_ptr< BayesTreeType > eliminateMultifrontal(OptionalOrderingType orderingType=boost::none, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do multifrontal elimination of all variables to produce a Bayes tree.
Definition EliminateableFactorGraph-inst.h:91
\n-
EliminationTraitsType::EliminationTreeType EliminationTreeType
Elimination tree type that can do sequential elimination of this graph.
Definition EliminateableFactorGraph.h:76
\n-
boost::optional< const VariableIndex & > OptionalVariableIndex
Typedef for an optional variable index as an argument to elimination functions.
Definition EliminateableFactorGraph.h:92
\n-
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do sequential elimination of some variables, in ordering provided, to produce a Bayes net and a remai...
Definition EliminateableFactorGraph-inst.h:154
\n-
boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant< const Ordering &, const KeyVector & > variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal of the requested variables and return the result as a Bayes net.
Definition EliminateableFactorGraph-inst.h:233
\n-
std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr< FactorGraphType > > eliminatePartialMultifrontal(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do multifrontal elimination of some variables, in ordering provided, to produce a Bayes tree and a re...
Definition EliminateableFactorGraph-inst.h:193
\n-
boost::optional< Ordering::OrderingType > OptionalOrderingType
Typedef for an optional ordering type.
Definition EliminateableFactorGraph.h:95
\n-
An inference algorithm was called with inconsistent arguments.
Definition inferenceExceptions.h:29
\n-
Definition Ordering.h:34
\n-
static Ordering Natural(const FACTOR_GRAPH &fg)
Return a natural Ordering. Typically used by iterative solvers.
Definition Ordering.h:190
\n-
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:95
\n-
static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const KeyVector &constrainLast, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:114
\n-
static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const KeyVector &constrainFirst, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:141
\n-
static GTSAM_EXPORT Ordering Metis(const MetisIndex &met)
Compute an ordering determined by METIS from a VariableIndex.
Definition Ordering.cpp:212
\n-
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n+
A Bayes tree with an update methods that implements the iSAM algorithm.
Definition ISAM.h:31
\n+
void update(const FactorGraphType &newFactors, const Eliminate &function=EliminationTraitsType::DefaultEliminate)
update the Bayes tree with a set of new factors, typically derived from measurements
Definition ISAM-inst.h:62
\n+
ISAM(const Base &bayesTree)
Copy constructor.
Definition ISAM.h:52
\n+
ISAM()
Create an empty Bayes Tree.
Definition ISAM.h:49
\n+
void updateInternal(const FactorGraphType &newFactors, Cliques *orphans, const Eliminate &function=EliminationTraitsType::DefaultEliminate)
updateInternal provides access to list of orphans for drawing purposes
Definition ISAM-inst.h:27
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,609 +1,90 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-EliminateableFactorGraph-inst.h\n+ISAM.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n+18// \\callgraph\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh>\n-23#include \n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n 24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-27 /* *************************************************************************\n-*/\n-28 template\n-29 boost::shared_ptr::\n-BayesNetType>\n-_\b3_\b0 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n-31 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n-32 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const {\n-33 if(!variableIndex) {\n-34 // If no VariableIndex provided, compute one and call this function again\n-IMPORTANT: we check\n-35 // for no variable index first so that it's always computed if we need to\n-call COLAMD because\n-36 // no Ordering is provided. When removing optional from VariableIndex,\n-create VariableIndex\n-37 // before creating ordering.\n-38 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-39 return eliminateSequential(orderingType, function, computedVariableIndex);\n-40 }\n-41 else {\n-42 // Compute an ordering and call this function again. We are guaranteed to\n-have a\n-43 // VariableIndex already here because we computed one if needed in the\n-previous 'if' block.\n-44 if (orderingType == Ordering::METIS) {\n-45 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bM_\be_\bt_\bi_\bs(asDerived());\n-46 return eliminateSequential(computedOrdering, function, variableIndex);\n-47 } else if (orderingType == Ordering::COLAMD) {\n-48 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd(*variableIndex);\n-49 return eliminateSequential(computedOrdering, function, variableIndex);\n-50 } else if (orderingType == Ordering::NATURAL) {\n-51 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bN_\ba_\bt_\bu_\br_\ba_\bl(asDerived());\n-52 return eliminateSequential(computedOrdering, function, variableIndex);\n-53 } else {\n-54 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = EliminationTraitsType::DefaultOrderingFunc(\n-55 asDerived(), variableIndex);\n-56 return eliminateSequential(computedOrdering, function, variableIndex);\n-57 }\n-58 }\n-59 }\n-60\n-61 /* *************************************************************************\n-*/\n-62 template\n-63 boost::shared_ptr::\n-BayesNetType>\n-_\b6_\b4 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n-65 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n-66 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n-67 {\n-68 if(!variableIndex) {\n-69 // If no VariableIndex provided, compute one and call this function again\n-70 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-71 return eliminateSequential(ordering, function, computedVariableIndex);\n-72 } else {\n-73 gttic(eliminateSequential);\n-74 // Do elimination\n-75 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be etree(asDerived(), *variableIndex, ordering);\n-76 boost::shared_ptr bayesNet;\n-77 boost::shared_ptr factorGraph;\n-78 boost::tie(bayesNet,factorGraph) = etree.eliminate(function);\n-79 // If any factors are remaining, the ordering was incomplete\n-80 if(!factorGraph->empty())\n-81 throw _\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd();\n-82 // Return the Bayes net\n-83 return bayesNet;\n-84 }\n-85 }\n-86\n-87 /* *************************************************************************\n-*/\n-88 template \n-89 boost::shared_ptr<\n-90 typename _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be>\n-_\b9_\b1 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n-92 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n-93 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const {\n-94 if (!variableIndex) {\n-95 // If no VariableIndex provided, compute one and call this function again\n-96 // IMPORTANT: we check for no variable index first so that it's always\n-97 // computed if we need to call COLAMD because no Ordering is provided.\n-98 // When removing optional from VariableIndex, create VariableIndex before\n-99 // creating ordering.\n-100 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-101 return eliminateMultifrontal(orderingType, function,\n-102 computedVariableIndex);\n-103 } else {\n-104 // Compute an ordering and call this function again. We are guaranteed to\n-105 // have a VariableIndex already here because we computed one if needed in\n-106 // the previous 'if' block.\n-107 if (orderingType == Ordering::METIS) {\n-108 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bM_\be_\bt_\bi_\bs(asDerived());\n-109 return eliminateMultifrontal(computedOrdering, function, variableIndex);\n-110 } else if (orderingType == Ordering::COLAMD) {\n-111 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd(*variableIndex);\n-112 return eliminateMultifrontal(computedOrdering, function, variableIndex);\n-113 } else if (orderingType == Ordering::NATURAL) {\n-114 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bN_\ba_\bt_\bu_\br_\ba_\bl(asDerived());\n-115 return eliminateMultifrontal(computedOrdering, function, variableIndex);\n-116 } else {\n-_\b1_\b1_\b7 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = EliminationTraitsType::DefaultOrderingFunc(\n-118 asDerived(), variableIndex);\n-119 return eliminateMultifrontal(computedOrdering, function, variableIndex);\n-120 }\n-121 }\n-122 }\n-123\n-124 /\n-* ************************************************************************* */\n-125 template\n-126 boost::shared_ptr::\n-BayesTreeType>\n-_\b1_\b2_\b7 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n-128 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n-129 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n-130 {\n-131 if(!variableIndex) {\n-132 // If no VariableIndex provided, compute one and call this function again\n-133 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-134 return eliminateMultifrontal(ordering, function, computedVariableIndex);\n-135 } else {\n-_\b1_\b3_\b6 gttic(eliminateMultifrontal);\n-137 // Do elimination with given ordering\n-138 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be etree(asDerived(), *variableIndex, ordering);\n-139 _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be junctionTree(etree);\n-140 boost::shared_ptr bayesTree;\n-141 boost::shared_ptr factorGraph;\n-142 boost::tie(bayesTree,factorGraph) = junctionTree.eliminate(function);\n-143 // If any factors are remaining, the ordering was incomplete\n-144 if(!factorGraph->empty())\n-145 throw _\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd();\n-146 // Return the Bayes tree\n-147 return bayesTree;\n-148 }\n-149 }\n-150\n-151 /\n-* ************************************************************************* */\n-152 template\n-153 std::pair::BayesNetType>, boost::\n-shared_ptr >\n-_\b1_\b5_\b4 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n-155 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-variableIndex) const\n-156 {\n-_\b1_\b5_\b7 if(variableIndex) {\n-158 gttic(eliminatePartialSequential);\n-159 // Do elimination\n-160 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be etree(asDerived(), *variableIndex, ordering);\n-161 return etree.eliminate(function);\n-162 } else {\n-163 // If no variable index is provided, compute one and call this function\n-again\n-164 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-165 return eliminatePartialSequential(ordering, function,\n-computedVariableIndex);\n-166 }\n-167 }\n-168\n-169 /\n-* ************************************************************************* */\n-170 template\n-_\b1_\b7_\b1 std::pair::BayesNetType>, boost::\n-shared_ptr >\n-_\b1_\b7_\b2 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n-173 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n-_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n-174 {\n-175 if(variableIndex) {\n-176 gttic(eliminatePartialSequential);\n-177 // Compute full ordering\n-178 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg fullOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt(*variableIndex,\n-variables);\n-179\n-180 // Split off the part of the ordering for the variables being eliminated\n-_\b1_\b8_\b1 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg ordering(fullOrdering.begin(), fullOrdering.begin() +\n-variables.size());\n-182 return eliminatePartialSequential(ordering, function, variableIndex);\n-183 } else {\n-184 // If no variable index is provided, compute one and call this function\n-again\n-185 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-186 return eliminatePartialSequential(variables, function,\n-computedVariableIndex);\n-187 }\n-188 }\n-189\n-190 /\n-* ************************************************************************* */\n-_\b1_\b9_\b1 template\n-192 std::pair::BayesTreeType>, boost::\n-shared_ptr >\n-_\b1_\b9_\b3 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n-194 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-variableIndex) const\n-195 {\n-196 if(variableIndex) {\n-197 gttic(eliminatePartialMultifrontal);\n-198 // Do elimination\n-199 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be etree(asDerived(), *variableIndex, ordering);\n-200 _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be junctionTree(etree);\n-_\b2_\b0_\b1 return junctionTree.eliminate(function);\n-202 } else {\n-203 // If no variable index is provided, compute one and call this function\n-again\n-204 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-205 return eliminatePartialMultifrontal(ordering, function,\n-computedVariableIndex);\n-206 }\n-207 }\n-208\n-209 /\n-* ************************************************************************* */\n-210 template\n-_\b2_\b1_\b1 std::pair::BayesTreeType>, boost::\n-shared_ptr >\n-_\b2_\b1_\b2 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n-213 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n-_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n-214 {\n-215 if(variableIndex) {\n-216 gttic(eliminatePartialMultifrontal);\n-217 // Compute full ordering\n-218 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg fullOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt(*variableIndex,\n-variables);\n-219\n-220 // Split off the part of the ordering for the variables being eliminated\n-221 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg ordering(fullOrdering.begin(), fullOrdering.begin() +\n-variables.size());\n-222 return eliminatePartialMultifrontal(ordering, function, variableIndex);\n-223 } else {\n-224 // If no variable index is provided, compute one and call this function\n-again\n-_\b2_\b2_\b5 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-226 return eliminatePartialMultifrontal(variables, function,\n-computedVariableIndex);\n-227 }\n-228 }\n-229\n-230 /\n-* ************************************************************************* */\n-231 template\n-232 boost::shared_ptr::\n-BayesNetType>\n-_\b2_\b3_\b3 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n-234 boost::variant variables,\n-235 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n-236 {\n-237 if(!variableIndex) {\n-238 // If no variable index is provided, compute one and call this function\n-again\n-239 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx index(asDerived());\n-_\b2_\b4_\b0 return _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(variables, function, index);\n-241 } else {\n-242 // No ordering was provided for the marginalized variables, so order them\n-using constrained\n-243 // COLAMD.\n-244 bool unmarginalizedAreOrdered = (boost::get(&variables) !=\n-0);\n-245 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br* variablesOrOrdering =\n-246 unmarginalizedAreOrdered ?\n-247 boost::get(&variables) : boost::get\n-(&variables);\n-248\n-249 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg totalOrdering =\n-250 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(*variableIndex, *variablesOrOrdering,\n-unmarginalizedAreOrdered);\n-251\n-252 // Split up ordering\n-253 const size_t nVars = variablesOrOrdering->size();\n-254 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg marginalizationOrdering(totalOrdering.begin(), totalOrdering.end()\n-- nVars);\n-_\b2_\b5_\b5 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg marginalVarsOrdering(totalOrdering.end() - nVars,\n-totalOrdering.end());\n-256\n-257 // Call this function again with the computed orderings\n-258 return marginalMultifrontalBayesNet(marginalVarsOrdering,\n-marginalizationOrdering, function, *variableIndex);\n-259 }\n-260 }\n-261\n-262 /\n-* ************************************************************************* */\n-263 template\n-264 boost::shared_ptr::\n-BayesNetType>\n-_\b2_\b6_\b5 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n-266 boost::variant variables,\n-267 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& marginalizedVariableOrdering,\n-268 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n-269 {\n-_\b2_\b7_\b0 if(!variableIndex) {\n-271 // If no variable index is provided, compute one and call this function\n-again\n-272 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx index(asDerived());\n-273 return marginalMultifrontalBayesNet(variables,\n-marginalizedVariableOrdering, function, index);\n-274 } else {\n-275 gttic(marginalMultifrontalBayesNet);\n-276 // An ordering was provided for the marginalized variables, so we can first\n-eliminate them\n-_\b2_\b7_\b7 // in the order requested.\n-278 boost::shared_ptr bayesTree;\n-279 boost::shared_ptr factorGraph;\n-280 boost::tie(bayesTree,factorGraph) =\n-281 eliminatePartialMultifrontal(marginalizedVariableOrdering, function,\n-*variableIndex);\n-282\n-283 if(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg* varsAsOrdering = boost::get\n-(&variables))\n-284 {\n-285 // An ordering was also provided for the unmarginalized variables, so we\n-can also\n-286 // eliminate them in the order requested.\n-287 return factorGraph->eliminateSequential(*varsAsOrdering, function);\n-288 }\n-289 else\n-290 {\n-291 // No ordering was provided for the unmarginalized variables, so order them\n-with COLAMD.\n-292 return factorGraph->eliminateSequential(Ordering::COLAMD, function);\n-293 }\n-294 }\n-295 }\n-296\n-297 /\n-* ************************************************************************* */\n-298 template\n-299 boost::shared_ptr::\n-BayesTreeType>\n-_\b3_\b0_\b0 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(\n-301 boost::variant variables,\n-302 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n-303 {\n-304 if(!variableIndex) {\n-305 // If no variable index is provided, compute one and call this function\n-again\n-306 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-307 return marginalMultifrontalBayesTree(variables, function,\n-computedVariableIndex);\n-308 } else {\n-309 // No ordering was provided for the marginalized variables, so order them\n-using constrained\n-310 // COLAMD.\n-311 bool unmarginalizedAreOrdered = (boost::get(&variables) !=\n-0);\n-312 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br* variablesOrOrdering =\n-313 unmarginalizedAreOrdered ?\n-314 boost::get(&variables) : boost::get\n-(&variables);\n-315\n-316 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg totalOrdering =\n-317 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(*variableIndex, *variablesOrOrdering,\n-unmarginalizedAreOrdered);\n-318\n-319 // Split up ordering\n-320 const size_t nVars = variablesOrOrdering->size();\n-321 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg marginalizationOrdering(totalOrdering.begin(), totalOrdering.end()\n-- nVars);\n-322 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg marginalVarsOrdering(totalOrdering.end() - nVars,\n-totalOrdering.end());\n-323\n-324 // Call this function again with the computed orderings\n-325 return marginalMultifrontalBayesTree(marginalVarsOrdering,\n-marginalizationOrdering, function, *variableIndex);\n-326 }\n-327 }\n-328\n-329 /\n-* ************************************************************************* */\n-330 template\n-331 boost::shared_ptr::\n-BayesTreeType>\n-_\b3_\b3_\b2 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(\n-333 boost::variant variables,\n-334 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& marginalizedVariableOrdering,\n-335 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n-336 {\n-337 if(!variableIndex) {\n-338 // If no variable index is provided, compute one and call this function\n-again\n-339 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-340 return marginalMultifrontalBayesTree(variables,\n-marginalizedVariableOrdering, function, computedVariableIndex);\n-341 } else {\n-342 gttic(marginalMultifrontalBayesTree);\n-343 // An ordering was provided for the marginalized variables, so we can first\n-eliminate them\n-344 // in the order requested.\n-345 boost::shared_ptr bayesTree;\n-346 boost::shared_ptr factorGraph;\n-347 boost::tie(bayesTree,factorGraph) =\n-348 eliminatePartialMultifrontal(marginalizedVariableOrdering, function,\n-*variableIndex);\n-349\n-350 if(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg* varsAsOrdering = boost::get\n-(&variables))\n-351 {\n-352 // An ordering was also provided for the unmarginalized variables, so we\n-can also\n-353 // eliminate them in the order requested.\n-354 return factorGraph->eliminateMultifrontal(*varsAsOrdering, function);\n-355 }\n-356 else\n-357 {\n-358 // No ordering was provided for the unmarginalized variables, so order them\n-with COLAMD.\n-359 return factorGraph->eliminateMultifrontal(Ordering::COLAMD, function);\n-360 }\n-361 }\n-362 }\n-363\n-364 /\n-* ************************************************************************* */\n-365 template\n-366 boost::shared_ptr\n-_\b3_\b6_\b7 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl(\n-368 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables,\n-369 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n-370 {\n-371 if(variableIndex)\n-372 {\n-373 // Compute a total ordering for all variables\n-374 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg totalOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(*variableIndex,\n-variables);\n-375\n-376 // Split out the part for the marginalized variables\n-377 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg marginalizationOrdering(totalOrdering.begin(), totalOrdering.end()\n-- variables.size());\n-378\n-379 // Eliminate and return the remaining factor graph\n-380 return eliminatePartialMultifrontal(marginalizationOrdering, function,\n-*variableIndex).second;\n-381 }\n-382 else\n-383 {\n-384 // If no variable index is provided, compute one and call this function\n-again\n-385 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n-386 return marginal(variables, function, computedVariableIndex);\n-387 }\n-388 }\n-389\n-390\n-391}\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Variable elimination algorithms for factor graphs.\n-_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n-Exceptions that may be thrown by inference algorithms.\n+30template \n+_\b3_\b1class _\bI_\bS_\bA_\bM : public BAYESTREE {\n+32 public:\n+33 typedef BAYESTREE Base;\n+34 typedef typename Base::BayesNetType BayesNetType;\n+35 typedef typename Base::FactorGraphType FactorGraphType;\n+36 typedef typename Base::Clique Clique;\n+37 typedef typename Base::sharedClique sharedClique;\n+38 typedef typename Base::Cliques Cliques;\n+39\n+40 private:\n+41 typedef typename Base::Eliminate Eliminate;\n+42 typedef typename Base::EliminationTraitsType EliminationTraitsType;\n+43\n+44 public:\n+47\n+_\b4_\b9 _\bI_\bS_\bA_\bM() {}\n+50\n+_\b5_\b2 explicit _\bI_\bS_\bA_\bM(const Base& bayesTree) : Base(bayesTree) {}\n+53\n+57\n+64 void _\bu_\bp_\bd_\ba_\bt_\be(\n+65 const FactorGraphType& newFactors,\n+66 const Eliminate& function = EliminationTraitsType::DefaultEliminate);\n+67\n+70 void _\bu_\bp_\bd_\ba_\bt_\be_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl(\n+71 const FactorGraphType& newFactors, Cliques* orphans,\n+72 const Eliminate& function = EliminationTraitsType::DefaultEliminate);\n+73\n+75};\n+76\n+77} // namespace gtsam\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-boost::shared_ptr< BayesTreeType > marginalMultifrontalBayesTree(boost::\n-variant< const Ordering &, const KeyVector & > variables, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex\n-variableIndex=boost::none) const\n-Compute the marginal of the requested variables and return the result as a\n-Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:300\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-EliminationTraitsType::JunctionTreeType JunctionTreeType\n-Junction tree type that can do multifrontal elimination of this graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl\n-boost::shared_ptr< FactorGraphType > marginal(const KeyVector &variables, const\n-Eliminate &function=EliminationTraitsType::DefaultEliminate,\n-OptionalVariableIndex variableIndex=boost::none) const\n-Compute the marginal factor graph of the requested variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:367\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant<\n-const Ordering &, const KeyVector & > variables, const Ordering\n-&marginalizedVariableOrdering, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex\n-variableIndex=boost::none) const\n-Compute the marginal of the requested variables and return the result as a\n-Bayes net.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:265\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-std::function< EliminationResult(const FactorGraphType &, const Ordering &)>\n-Eliminate\n-The function type that does a single dense elimination step on a subgraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-EliminationTraitsType::BayesTreeType BayesTreeType\n-Bayes tree type produced by multifrontal elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl\n-boost::shared_ptr< BayesNetType > eliminateSequential(OptionalOrderingType\n-orderingType=boost::none, const Eliminate &function=EliminationTraitsType::\n-DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const\n-Do sequential elimination of all variables to produce a Bayes net.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl\n-boost::shared_ptr< BayesTreeType > eliminateMultifrontal(OptionalOrderingType\n-orderingType=boost::none, const Eliminate &function=EliminationTraitsType::\n-DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const\n-Do multifrontal elimination of all variables to produce a Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-EliminationTraitsType::EliminationTreeType EliminationTreeType\n-Elimination tree type that can do sequential elimination of this graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-boost::optional< const VariableIndex & > OptionalVariableIndex\n-Typedef for an optional variable index as an argument to elimination functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl\n-std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr<\n-FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const\n-Eliminate &function=EliminationTraitsType::DefaultEliminate,\n-OptionalVariableIndex variableIndex=boost::none) const\n-Do sequential elimination of some variables, in ordering provided, to produce a\n-Bayes net and a remai...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant<\n-const Ordering &, const KeyVector & > variables, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex\n-variableIndex=boost::none) const\n-Compute the marginal of the requested variables and return the result as a\n-Bayes net.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:233\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl\n-std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr<\n-FactorGraphType > > eliminatePartialMultifrontal(const Ordering &ordering,\n-const Eliminate &function=EliminationTraitsType::DefaultEliminate,\n-OptionalVariableIndex variableIndex=boost::none) const\n-Do multifrontal elimination of some variables, in ordering provided, to produce\n-a Bayes tree and a re...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:193\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be\n-boost::optional< Ordering::OrderingType > OptionalOrderingType\n-Typedef for an optional ordering type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd\n-An inference algorithm was called with inconsistent arguments.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn inferenceExceptions.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bN_\ba_\bt_\bu_\br_\ba_\bl\n-static Ordering Natural(const FACTOR_GRAPH &fg)\n-Return a natural Ordering. Typically used by iterative solvers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:190\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd\n-static Ordering Colamd(const FACTOR_GRAPH &graph)\n-Compute a fill-reducing ordering using COLAMD from a factor graph (see details\n-for note on performanc...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt\n-static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const\n-KeyVector &constrainLast, bool forceOrder=false)\n-Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n-(see details for note o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt\n-static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const\n-KeyVector &constrainFirst, bool forceOrder=false)\n-Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n-(see details for note o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bM_\be_\bt_\bi_\bs\n-static GTSAM_EXPORT Ordering Metis(const MetisIndex &met)\n-Compute an ordering determined by METIS from a VariableIndex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.cpp:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-The VariableIndex class computes and stores the block column structure of a\n-factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM\n+A Bayes tree with an update methods that implements the iSAM algorithm.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const FactorGraphType &newFactors, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate)\n+update the Bayes tree with a set of new factors, typically derived from\n+measurements\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM-inst.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bI_\bS_\bA_\bM\n+ISAM(const Base &bayesTree)\n+Copy constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bI_\bS_\bA_\bM\n+ISAM()\n+Create an empty Bayes Tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl\n+void updateInternal(const FactorGraphType &newFactors, Cliques *orphans, const\n+Eliminate &function=EliminationTraitsType::DefaultEliminate)\n+updateInternal provides access to list of orphans for drawing purposes\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM-inst.h:27\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * E\bEl\bli\bim\bmi\bin\bna\bat\bte\bea\bab\bbl\ble\beF\bFa\bac\bct\bto\bor\brG\bGr\bra\bap\bph\bh-\b-i\bin\bns\bst\bt.\b.h\bh\n+ * _\bI_\bS_\bA_\bM_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00641.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00641.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminationTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/LabeledSymbol.h File Reference\n \n \n \n \n \n \n \n@@ -95,44 +95,68 @@\n \n \n \n \n
\n \n-
EliminationTree.h File Reference
\n+Namespaces |\n+Functions
\n+
LabeledSymbol.h File Reference
\n \n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n+\n+\n \n

\n Classes

class  gtsam::EliminationTree< BAYESNET, GRAPH >
 An elimination tree is a data structure used intermediately during elimination. More...
class  gtsam::LabeledSymbol
 Customized version of gtsam::Symbol for multi-robot use. More...
 
struct  gtsam::EliminationTree< BAYESNET, GRAPH >::Node
struct  gtsam::traits< LabeledSymbol >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

Key gtsam::mrsymbol (unsigned char c, unsigned char label, size_t j)
 Create a symbol key from a character, label and index, i.e.
 
\n+unsigned char gtsam::mrsymbolChr (Key key)
 Return the character portion of a symbol key.
 
\n+unsigned char gtsam::mrsymbolLabel (Key key)
 Return the label portion of a symbol key.
 
\n+size_t gtsam::mrsymbolIndex (Key key)
 Return the index portion of a symbol key.
 
\n

Detailed Description

\n-
Author
Frank Dellaert
\n+
Date
Jan 12, 2010
\n+
Author
: Alex Cunningham
\n+
Date
Jan 12, 2010
\n+
Author
: Alex Cunningham
\n+
\n+: Frank Dellaert
\n
\n-Richard Roberts
\n-
Date
Oct 13, 2010
\n+: Richard Roberts
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,47 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-EliminationTree.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+LabeledSymbol.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>\n-\u00a0 An elimination tree is a data structure used intermediately during\n- elimination. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl\n+\u00a0 Customized version of _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl for multi-robot use. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>_\b:_\b:_\bN_\bo_\bd_\be\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ _\bK_\be_\by\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\br_\bs_\by_\bm_\bb_\bo_\bl (unsigned char c, unsigned char label, size_t j)\n+\u00a0 Create a symbol key from a character, label and index, i.e.\n+\u00a0\n+unsigned char\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bmr\brs\bsy\bym\bmb\bbo\bol\blC\bCh\bhr\br (_\bK_\be_\by key)\n+\u00a0 Return the character portion of a symbol key.\n+\u00a0\n+unsigned char\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bmr\brs\bsy\bym\bmb\bbo\bol\blL\bLa\bab\bbe\bel\bl (_\bK_\be_\by key)\n+\u00a0 Return the label portion of a symbol key.\n+\u00a0\n+ size_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bmr\brs\bsy\bym\bmb\bbo\bol\blI\bIn\bnd\bde\bex\bx (_\bK_\be_\by key)\n+\u00a0 Return the index portion of a symbol key.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+ Date\n+ Jan 12, 2010\n Author\n- Frank Dellaert\n- Richard Roberts\n+ : Alex Cunningham\n Date\n- Oct 13, 2010\n+ Jan 12, 2010\n+ Author\n+ : Alex Cunningham\n+ : Frank Dellaert\n+ : Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00641.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00641.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,8 @@\n var a00641 = [\n- [\"gtsam::EliminationTree< BAYESNET, GRAPH >\", \"a03584.html\", \"a03584\"],\n- [\"gtsam::EliminationTree< BAYESNET, GRAPH >::Node\", \"a03588.html\", \"a03588\"]\n+ [\"gtsam::LabeledSymbol\", \"a03668.html\", \"a03668\"],\n+ [\"gtsam::traits< LabeledSymbol >\", \"a03672.html\", null],\n+ [\"mrsymbol\", \"a00641.html#ae9a7dceb0a85c356062b55f6939b1419\", null],\n+ [\"mrsymbolChr\", \"a00641.html#a37995b0d0610e5fb29c6bd0715151d67\", null],\n+ [\"mrsymbolIndex\", \"a00641.html#a4adc1bb606fa4a14d5dbd246f95cecd3\", null],\n+ [\"mrsymbolLabel\", \"a00641.html#a4e4c133c4fd0d9d73593f601be2248a6\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00641_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00641_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminationTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/LabeledSymbol.h Source File\n \n \n \n \n \n \n \n@@ -98,160 +98,146 @@\n
No Matches
\n \n \n \n \n \n
\n-
EliminationTree.h
\n+
LabeledSymbol.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4* Atlanta, Georgia 30332-0415
\n-
5* All Rights Reserved
\n-
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8* See LICENSE for the license information
\n+
8 * See LICENSE for the license information
\n
9
\n-
10* -------------------------------------------------------------------------- */
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <utility>
\n-
21#include <boost/shared_ptr.hpp>
\n-
22
\n-
23#include <gtsam/base/Testable.h>
\n-\n-
25
\n-
26class EliminationTreeTester; // for unit tests, see testEliminationTree
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
30 class VariableIndex;
\n-
31 class Ordering;
\n-
32
\n-
50 template<class BAYESNET, class GRAPH>
\n-
\n-\n-
52 {
\n-
53 protected:
\n-\n-
55 typedef boost::shared_ptr<This> shared_ptr;
\n-
56
\n-
57 public:
\n-
58 typedef GRAPH FactorGraphType;
\n-
59 typedef typename GRAPH::FactorType FactorType;
\n-
60 typedef typename boost::shared_ptr<FactorType> sharedFactor;
\n-
61 typedef BAYESNET BayesNetType;
\n-
62 typedef typename BayesNetType::ConditionalType ConditionalType;
\n-
63 typedef typename boost::shared_ptr<ConditionalType> sharedConditional;
\n-
64 typedef typename GRAPH::Eliminate Eliminate;
\n+
20#pragma once
\n+
21
\n+
22#include <functional>
\n+\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
\n+
35class GTSAM_EXPORT LabeledSymbol {
\n+
36protected:
\n+
37 unsigned char c_, label_;
\n+
38 std::uint64_t j_;
\n+
39
\n+
40public:
\n+\n+
43
\n+
45 LabeledSymbol(const LabeledSymbol& key);
\n+
46
\n+
48 LabeledSymbol(unsigned char c, unsigned char label, std::uint64_t j);
\n+
49
\n+\n+
52
\n+
54 operator gtsam::Key() const;
\n+
55
\n+
56 // Testable Requirements
\n+
57 void print(const std::string& s = "") const;
\n+
58
\n+
59 bool equals(const LabeledSymbol& expected, double tol = 0.0) const {
\n+
60 return (*this) == expected;
\n+
61 }
\n+
62
\n+
64 gtsam::Key key() const { return (gtsam::Key) *this; }
\n
65
\n-
\n-
66 struct Node {
\n-
67 typedef FastVector<sharedFactor> Factors;
\n-
68 typedef FastVector<boost::shared_ptr<Node> > Children;
\n-
69
\n-\n-
71 Factors factors;
\n-
72 Children children;
\n-
73
\n-
74 sharedFactor eliminate(const boost::shared_ptr<BayesNetType>& output,
\n-
75 const Eliminate& function, const FastVector<sharedFactor>& childrenFactors) const;
\n-
76
\n-
77 void print(const std::string& str, const KeyFormatter& keyFormatter) const;
\n-
78 };
\n-
\n-
79
\n-
80 typedef boost::shared_ptr<Node> sharedNode;
\n-
81
\n-
82 protected:
\n-
84 GTSAM_CONCEPT_TESTABLE_TYPE(FactorType)
\n-
85
\n-\n-
87 FastVector<sharedFactor> remainingFactors_;
\n-
88
\n-
91
\n-
100 EliminationTree(const FactorGraphType& factorGraph,
\n-
101 const VariableIndex& structure, const Ordering& order);
\n-
102
\n-
108 EliminationTree(const FactorGraphType& factorGraph, const Ordering& order);
\n+
67 inline unsigned char label() const { return label_; }
\n+
68
\n+
70 inline unsigned char chr() const { return c_; }
\n+
71
\n+
73 inline size_t index() const { return j_; }
\n+
74
\n+
76 operator std::string() const;
\n+
77
\n+
79 bool operator<(const LabeledSymbol& comp) const;
\n+
80 bool operator==(const LabeledSymbol& comp) const;
\n+
81 bool operator==(gtsam::Key comp) const;
\n+
82 bool operator!=(const LabeledSymbol& comp) const;
\n+
83 bool operator!=(gtsam::Key comp) const;
\n+
84
\n+
91 // Checks only the type
\n+
92 static std::function<bool(gtsam::Key)> TypeTest(unsigned char c);
\n+
93
\n+
94 // Checks only the robot ID (label_)
\n+
95 static std::function<bool(gtsam::Key)> LabelTest(unsigned char label);
\n+
96
\n+
97 // Checks both type and the robot ID
\n+
98 static std::function<bool(gtsam::Key)> TypeLabelTest(unsigned char c, unsigned char label);
\n+
99
\n+
100 // Converts to upper/lower versions of labels
\n+
101 LabeledSymbol upper() const { return LabeledSymbol(c_, toupper(label_), j_); }
\n+
102 LabeledSymbol lower() const { return LabeledSymbol(c_, tolower(label_), j_); }
\n+
103
\n+
104 // Create a new symbol with a different character.
\n+
105 LabeledSymbol newChr(unsigned char c) const { return LabeledSymbol(c, label_, j_); }
\n+
106
\n+
107 // Create a new symbol with a different label.
\n+
108 LabeledSymbol newLabel(unsigned char label) const { return LabeledSymbol(c_, label, j_); }
\n
109
\n-
112 EliminationTree(const This& other) { *this = other; }
\n-
113
\n-
116 This& operator=(const This& other);
\n-
117
\n-
119
\n-
120 public:
\n-
123
\n-
129 std::pair<boost::shared_ptr<BayesNetType>, boost::shared_ptr<FactorGraphType> >
\n-
130 eliminate(Eliminate function) const;
\n-
131
\n+
111 friend GTSAM_EXPORT std::ostream &operator<<(std::ostream &, const LabeledSymbol &);
\n+
112
\n+
113private:
\n+
114
\n+
116 friend class boost::serialization::access;
\n+
117 template<class ARCHIVE>
\n+
118 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
119 ar & BOOST_SERIALIZATION_NVP(c_);
\n+
120 ar & BOOST_SERIALIZATION_NVP(label_);
\n+
121 ar & BOOST_SERIALIZATION_NVP(j_);
\n+
122 }
\n+
123}; // \\class LabeledSymbol
\n+
\n+
124
\n+
\n+
126inline Key mrsymbol(unsigned char c, unsigned char label, size_t j) {
\n+
127 return (Key)LabeledSymbol(c,label,j);
\n+
128}
\n+
\n+
129
\n+
131inline unsigned char mrsymbolChr(Key key) { return LabeledSymbol(key).chr(); }
\n+
132
\n+
134inline unsigned char mrsymbolLabel(Key key) { return LabeledSymbol(key).label(); }
\n
135
\n-
137 void print(const std::string& name = "EliminationTree: ",
\n-
138 const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n-
139
\n-
140 protected:
\n-
142 bool equals(const This& other, double tol = 1e-9) const;
\n+
137inline size_t mrsymbolIndex(Key key) { return LabeledSymbol(key).index(); }
\n+
138
\n+
140template<> struct traits<LabeledSymbol> : public Testable<LabeledSymbol> {};
\n+
141
\n+
142} // \\namespace gtsam
\n
143
\n-
145
\n-
146 public:
\n-
149
\n-
151 const FastVector<sharedNode>& roots() const { return roots_; }
\n-
152
\n-
154 const FastVector<sharedFactor>& remainingFactors() const { return remainingFactors_; }
\n-
155
\n-
157 void swap(This& other);
\n-
158
\n-
159 protected:
\n-\n-
162
\n-
163 private:
\n-
165 friend class ::EliminationTreeTester;
\n-
166 };
\n-
\n-
167
\n-
168}
\n-
Concept check for values that can be used in unit tests.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
unsigned char mrsymbolChr(Key key)
Return the character portion of a symbol key.
Definition LabeledSymbol.h:131
\n+
size_t mrsymbolIndex(Key key)
Return the index portion of a symbol key.
Definition LabeledSymbol.h:137
\n+
unsigned char mrsymbolLabel(Key key)
Return the label portion of a symbol key.
Definition LabeledSymbol.h:134
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
bool operator!=(const Matrix &A, const Matrix &B)
inequality
Definition Matrix.h:107
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
Key mrsymbol(unsigned char c, unsigned char label, size_t j)
Create a symbol key from a character, label and index, i.e.
Definition LabeledSymbol.h:126
\n+
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition Matrix.h:100
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n-
void print(const std::string &name="EliminationTree: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
Print the tree to cout.
Definition EliminationTree-inst.h:207
\n-
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminate(Eliminate function) const
Eliminate the factors to a Bayes net and remaining factor graph.
Definition EliminationTree-inst.h:187
\n-
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition EliminationTree-inst.h:172
\n-
EliminationTree< BAYESNET, GRAPH > This
This class.
Definition EliminationTree.h:54
\n-
FastVector< sharedNode > roots_
concept check
Definition EliminationTree.h:86
\n-
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition EliminationTree.h:60
\n-
BAYESNET BayesNetType
The BayesNet corresponding to FACTOR.
Definition EliminationTree.h:61
\n-
boost::shared_ptr< ConditionalType > sharedConditional
Shared pointer to a conditional.
Definition EliminationTree.h:63
\n-
const FastVector< sharedNode > & roots() const
Return the set of roots (one for a tree, multiple for a forest)
Definition EliminationTree.h:151
\n-
GRAPH FactorGraphType
The factor graph type.
Definition EliminationTree.h:58
\n-
void swap(This &other)
Swap the data of this tree with another one, this operation is very fast.
Definition EliminationTree-inst.h:283
\n-
EliminationTree()
Protected default constructor.
Definition EliminationTree.h:161
\n-
BayesNetType::ConditionalType ConditionalType
The type of conditionals.
Definition EliminationTree.h:62
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition EliminationTree.h:55
\n-
GRAPH::FactorType FactorType
The type of factors.
Definition EliminationTree.h:59
\n-
boost::shared_ptr< Node > sharedNode
Shared pointer to Node.
Definition EliminationTree.h:80
\n-
const FastVector< sharedFactor > & remainingFactors() const
Return the remaining factors that are not pulled into elimination.
Definition EliminationTree.h:154
\n-
Definition EliminationTree.h:66
\n-
Key key
key associated with root
Definition EliminationTree.h:70
\n-
Children children
sub-trees
Definition EliminationTree.h:72
\n-
Factors factors
factors associated with root
Definition EliminationTree.h:71
\n-
Definition Ordering.h:34
\n-
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
Customized version of gtsam::Symbol for multi-robot use.
Definition LabeledSymbol.h:35
\n+
unsigned char chr() const
Retrieve key character.
Definition LabeledSymbol.h:70
\n+
gtsam::Key key() const
return the integer version
Definition LabeledSymbol.h:64
\n+
size_t index() const
Retrieve key index.
Definition LabeledSymbol.h:73
\n+
unsigned char label() const
Retrieve label character.
Definition LabeledSymbol.h:67
\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,237 +1,189 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-EliminationTree.h\n+LabeledSymbol.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4* Atlanta, Georgia 30332-0415\n-5* All Rights Reserved\n-6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8* See LICENSE for the license information\n+8 * See LICENSE for the license information\n 9\n-10* -------------------------------------------------------------------------\n+10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include \n-21#include \n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-25\n-26class EliminationTreeTester; // for unit tests, see testEliminationTree\n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-30 class VariableIndex;\n-31 class Ordering;\n-32\n-50 template\n-_\b5_\b1 class _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-52 {\n-53 protected:\n-_\b5_\b4 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b> _\bT_\bh_\bi_\bs;\n-_\b5_\b5 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-56\n-57 public:\n-_\b5_\b8 typedef GRAPH _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n-_\b5_\b9 typedef typename GRAPH::FactorType _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n-_\b6_\b0 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n-_\b6_\b1 typedef BAYESNET _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n-_\b6_\b2 typedef typename BayesNetType::ConditionalType _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-_\b6_\b3 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-64 typedef typename GRAPH::Eliminate Eliminate;\n+20#pragma once\n+21\n+22#include \n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+_\b3_\b5class GTSAM_EXPORT _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl {\n+36protected:\n+37 unsigned char c_, label_;\n+38 std::uint64_t j_;\n+39\n+40public:\n+42 _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl();\n+43\n+45 _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(const _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl& key);\n+46\n+48 _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(unsigned char c, unsigned char label, std::uint64_t j);\n+49\n+51 _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by key);\n+52\n+54 operator _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by() const;\n+55\n+56 // Testable Requirements\n+57 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n+58\n+59 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl& expected, double tol = 0.0) const {\n+60 return (*this) == expected;\n+61 }\n+62\n+_\b6_\b4 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by _\bk_\be_\by() const { return (_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by) *this; }\n 65\n-_\b6_\b6 struct _\bN_\bo_\bd_\be {\n-67 typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b> Factors;\n-68 typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b<_\bN_\bo_\bd_\be_\b> > Children;\n-69\n-_\b7_\b0 _\bK_\be_\by _\bk_\be_\by;\n-_\b7_\b1 Factors _\bf_\ba_\bc_\bt_\bo_\br_\bs;\n-_\b7_\b2 Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n-73\n-74 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br eliminate(const boost::shared_ptr& output,\n-75 const Eliminate& function, const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>& childrenFactors)\n-const;\n-76\n-77 void print(const std::string& str, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const;\n-78 };\n-79\n-_\b8_\b0 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be;\n-81\n-82 protected:\n-84 GTSAM_CONCEPT_TESTABLE_TYPE(_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be)\n-85\n-_\b8_\b6 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br<_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be> _\br_\bo_\bo_\bt_\bs_\b_;\n-87 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> remainingFactors_;\n-88\n-91\n-100 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factorGraph,\n-101 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n-102\n-108 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factorGraph, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+_\b6_\b7 inline unsigned char _\bl_\ba_\bb_\be_\bl() const { return label_; }\n+68\n+_\b7_\b0 inline unsigned char _\bc_\bh_\br() const { return c_; }\n+71\n+_\b7_\b3 inline size_t _\bi_\bn_\bd_\be_\bx() const { return j_; }\n+74\n+76 operator std::string() const;\n+77\n+79 bool operator<(const _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl& comp) const;\n+80 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl& comp) const;\n+81 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by comp) const;\n+82 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl& comp) const;\n+83 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by comp) const;\n+84\n+91 // Checks only the type\n+92 static std::function TypeTest(unsigned char c);\n+93\n+94 // Checks only the robot ID (label_)\n+95 static std::function LabelTest(unsigned char label);\n+96\n+97 // Checks both type and the robot ID\n+98 static std::function TypeLabelTest(unsigned char c,\n+unsigned char label);\n+99\n+100 // Converts to upper/lower versions of labels\n+101 _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl upper() const { return _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(c_, toupper(label_),\n+j_); }\n+102 LabeledSymbol lower() const { return LabeledSymbol(c_, tolower(label_),\n+j_); }\n+103\n+104 // Create a new symbol with a different character.\n+105 LabeledSymbol newChr(unsigned char c) const { return LabeledSymbol(c,\n+label_, j_); }\n+106\n+107 // Create a new symbol with a different label.\n+108 LabeledSymbol newLabel(unsigned char label) const { return LabeledSymbol\n+(c_, label, j_); }\n 109\n-_\b1_\b1_\b2 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bT_\bh_\bi_\bs& other) { *this = other; }\n-113\n-116 _\bT_\bh_\bi_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs& other);\n-117\n-119\n-120 public:\n-123\n-129 std::pair, boost::\n-shared_ptr >\n-130 _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(Eliminate function) const;\n-131\n+111 friend GTSAM_EXPORT std::ostream &operator<<(std::ostream &, const\n+LabeledSymbol &);\n+112\n+113private:\n+114\n+_\b1_\b1_\b6 friend class boost::serialization::access;\n+117 template\n+118 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+119 ar & BOOST_SERIALIZATION_NVP(c_);\n+120 ar & BOOST_SERIALIZATION_NVP(label_);\n+121 ar & BOOST_SERIALIZATION_NVP(j_);\n+122 }\n+123}; // \\class LabeledSymbol\n+124\n+_\b1_\b2_\b6inline _\bK_\be_\by _\bm_\br_\bs_\by_\bm_\bb_\bo_\bl(unsigned char c, unsigned char label, size_t j) {\n+127 return (_\bK_\be_\by)_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(c,label,j);\n+128}\n+129\n+_\b1_\b3_\b1inline unsigned char _\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bC_\bh_\br(_\bK_\be_\by key) { return _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(key)._\bc_\bh_\br();\n+}\n+132\n+_\b1_\b3_\b4inline unsigned char _\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bL_\ba_\bb_\be_\bl(_\bK_\be_\by key) { return _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl\n+(key)._\bl_\ba_\bb_\be_\bl(); }\n 135\n-137 void _\bp_\br_\bi_\bn_\bt(const std::string& name = \"EliminationTree: \",\n-138 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const;\n-139\n-140 protected:\n-142 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n+_\b1_\b3_\b7inline size_t _\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bI_\bn_\bd_\be_\bx(_\bK_\be_\by key) { return _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(key)._\bi_\bn_\bd_\be_\bx(); }\n+138\n+_\b1_\b4_\b0template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+141\n+142} // \\namespace gtsam\n 143\n-145\n-146 public:\n-149\n-_\b1_\b5_\b1 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>& _\br_\bo_\bo_\bt_\bs() const { return _\br_\bo_\bo_\bt_\bs_\b_; }\n-152\n-_\b1_\b5_\b4 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>& _\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs() const { return\n-remainingFactors_; }\n-155\n-157 void _\bs_\bw_\ba_\bp(_\bT_\bh_\bi_\bs& other);\n-158\n-159 protected:\n-_\b1_\b6_\b1 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be() {}\n-162\n-163 private:\n-_\b1_\b6_\b5 friend class ::EliminationTreeTester;\n-166 };\n-167\n-168}\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bC_\bh_\br\n+unsigned char mrsymbolChr(Key key)\n+Return the character portion of a symbol key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bI_\bn_\bd_\be_\bx\n+size_t mrsymbolIndex(Key key)\n+Return the index portion of a symbol key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bL_\ba_\bb_\be_\bl\n+unsigned char mrsymbolLabel(Key key)\n+Return the label portion of a symbol key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n+bool operator!=(const Matrix &A, const Matrix &B)\n+inequality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:107\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\br_\bs_\by_\bm_\bb_\bo_\bl\n+Key mrsymbol(unsigned char c, unsigned char label, size_t j)\n+Create a symbol key from a character, label and index, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(const Matrix &A, const Matrix &B)\n+equality is just equal_with_abs_tol 1e-9\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-An elimination tree is a data structure used intermediately during elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &name=\"EliminationTree: \", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-Print the tree to cout.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr<\n-FactorGraphType > > eliminate(Eliminate function) const\n-Eliminate the factors to a Bayes net and remaining factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:187\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-This & operator=(const This &other)\n-Assignment operator - makes a deep copy of the tree structure, but only\n-pointers to factors are copie...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:172\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-EliminationTree< BAYESNET, GRAPH > This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs_\b_\n-FastVector< sharedNode > roots_\n-concept check\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< FactorType > sharedFactor\n-Shared pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n-BAYESNET BayesNetType\n-The BayesNet corresponding to FACTOR.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-boost::shared_ptr< ConditionalType > sharedConditional\n-Shared pointer to a conditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs\n-const FastVector< sharedNode > & roots() const\n-Return the set of roots (one for a tree, multiple for a forest)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n-GRAPH FactorGraphType\n-The factor graph type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bw_\ba_\bp\n-void swap(This &other)\n-Swap the data of this tree with another one, this operation is very fast.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:283\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-EliminationTree()\n-Protected default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n-BayesNetType::ConditionalType ConditionalType\n-The type of conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n-GRAPH::FactorType FactorType\n-The type of factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be\n-boost::shared_ptr< Node > sharedNode\n-Shared pointer to Node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-const FastVector< sharedFactor > & remainingFactors() const\n-Return the remaining factors that are not pulled into elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bk_\be_\by\n-Key key\n-key associated with root\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n-Children children\n-sub-trees\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs\n-Factors factors\n-factors associated with root\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-The VariableIndex class computes and stores the block column structure of a\n-factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl\n+Customized version of gtsam::Symbol for multi-robot use.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b:_\b:_\bc_\bh_\br\n+unsigned char chr() const\n+Retrieve key character.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b:_\b:_\bk_\be_\by\n+gtsam::Key key() const\n+return the integer version\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b:_\b:_\bi_\bn_\bd_\be_\bx\n+size_t index() const\n+Retrieve key index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b:_\b:_\bl_\ba_\bb_\be_\bl\n+unsigned char label() const\n+Retrieve label character.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:67\n+_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00644_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00644_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Conditional-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,100 +98,143 @@\n
No Matches
\n \n \n \n \n \n
\n-
ISAM-inst.h
\n+
Conditional-inst.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-\n+
18// \\callgraph
\n+
19#pragma once
\n+
20
\n+\n
22
\n-
23namespace gtsam {
\n-
24
\n-
25/* ************************************************************************* */
\n-
26template<class BAYESTREE>
\n-
\n-
27void ISAM<BAYESTREE>::updateInternal(const FactorGraphType& newFactors,
\n-
28 Cliques* orphans, const Eliminate& function) {
\n-
29 // Remove the contaminated part of the Bayes tree
\n-
30 BayesNetType bn;
\n-
31 const KeySet newFactorKeys = newFactors.keys();
\n-
32 if (!this->empty()) {
\n-
33 KeyVector keyVector(newFactorKeys.begin(), newFactorKeys.end());
\n-
34 this->removeTop(keyVector, &bn, orphans);
\n-
35 }
\n-
36
\n-
37 // Add the removed top and the new factors
\n-
38 FactorGraphType factors;
\n-
39 factors += bn;
\n-
40 factors += newFactors;
\n-
41
\n-
42 // Add the orphaned subtrees
\n-
43 for (const sharedClique& orphan : *orphans)
\n-
44 factors += boost::make_shared<BayesTreeOrphanWrapper<Clique> >(orphan);
\n+
23#include <cmath>
\n+
24#include <iostream>
\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
28/* ************************************************************************* */
\n+
29template <class FACTOR, class DERIVEDCONDITIONAL>
\n+
\n+\n+
31 const std::string& s, const KeyFormatter& formatter) const {
\n+
32 std::cout << s << " P(";
\n+
33 for (Key key : frontals()) std::cout << " " << formatter(key);
\n+
34 if (nrParents() > 0) std::cout << " |";
\n+
35 for (Key parent : parents()) std::cout << " " << formatter(parent);
\n+
36 std::cout << ")" << std::endl;
\n+
37}
\n+
\n+
38
\n+
39/* ************************************************************************* */
\n+
40template <class FACTOR, class DERIVEDCONDITIONAL>
\n+
\n+\n+
42 double tol) const {
\n+
43 return nrFrontals_ == c.nrFrontals_;
\n+
44}
\n+
\n
45
\n-
46 // Get an ordering where the new keys are eliminated last
\n-
47 const VariableIndex index(factors);
\n-
48 const Ordering ordering = Ordering::ColamdConstrainedLast(index,
\n-
49 KeyVector(newFactorKeys.begin(), newFactorKeys.end()));
\n-
50
\n-
51 // eliminate all factors (top, added, orphans) into a new Bayes tree
\n-
52 auto bayesTree = factors.eliminateMultifrontal(ordering, function, index);
\n-
53
\n-
54 // Re-add into Bayes tree data structures
\n-
55 this->roots_.insert(this->roots_.end(), bayesTree->roots().begin(),
\n-
56 bayesTree->roots().end());
\n-
57 this->nodes_.insert(bayesTree->nodes().begin(), bayesTree->nodes().end());
\n+
46/* ************************************************************************* */
\n+
47template <class FACTOR, class DERIVEDCONDITIONAL>
\n+
\n+\n+
49 const HybridValues& c) const {
\n+
50 throw std::runtime_error("Conditional::logProbability is not implemented");
\n+
51}
\n+
\n+
52
\n+
53/* ************************************************************************* */
\n+
54template <class FACTOR, class DERIVEDCONDITIONAL>
\n+
\n+\n+
56 const HybridValues& c) const {
\n+
57 throw std::runtime_error("Conditional::evaluate is not implemented");
\n
58}
\n
\n
59
\n
60/* ************************************************************************* */
\n-
61template<class BAYESTREE>
\n+
61template <class FACTOR, class DERIVEDCONDITIONAL>
\n
\n-
62void ISAM<BAYESTREE>::update(const FactorGraphType& newFactors,
\n-
63 const Eliminate& function) {
\n-
\n-
64 Cliques orphans;
\n-
65 this->updateInternal(newFactors, &orphans, function);
\n+\n+
63 const {
\n+
64 throw std::runtime_error(
\n+
65 "Conditional::logNormalizationConstant is not implemented");
\n
66}
\n
\n-
\n
67
\n-
68}
\n-\n-
Incremental update functionality (iSAM) for BayesTree.
\n+
68/* ************************************************************************* */
\n+
69template <class FACTOR, class DERIVEDCONDITIONAL>
\n+
\n+\n+
71 return std::exp(logNormalizationConstant());
\n+
72}
\n+
\n+
73
\n+
74/* ************************************************************************* */
\n+
75template <class FACTOR, class DERIVEDCONDITIONAL>
\n+
76template <class VALUES>
\n+
\n+\n+
78 const DERIVEDCONDITIONAL& conditional, const VALUES& values) {
\n+
79 const double prob_or_density = conditional.evaluate(values);
\n+
80 if (prob_or_density < 0.0) return false; // prob_or_density is negative.
\n+
81 if (std::abs(prob_or_density - conditional(values)) > 1e-9)
\n+
82 return false; // operator and evaluate differ
\n+
83 const double logProb = conditional.logProbability(values);
\n+
84 if (std::abs(prob_or_density - std::exp(logProb)) > 1e-9)
\n+
85 return false; // logProb is not consistent with prob_or_density
\n+
86 if (std::abs(conditional.logNormalizationConstant() -
\n+
87 std::log(conditional.normalizationConstant())) > 1e-9)
\n+
88 return false; // log normalization constant is not consistent with
\n+
89 // normalization constant
\n+
90 const double error = conditional.error(values);
\n+
91 if (error < 0.0) return false; // prob_or_density is negative.
\n+
92 const double expected = conditional.logNormalizationConstant() - error;
\n+
93 if (std::abs(logProb - expected) > 1e-9)
\n+
94 return false; // logProb is not consistent with error
\n+
95 return true;
\n+
96}
\n+
\n+
\n+\n+
98} // namespace gtsam
\n+
\n+
Base class for conditional densities.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-\n-
Definition BayesTree.h:276
\n-
void update(const FactorGraphType &newFactors, const Eliminate &function=EliminationTraitsType::DefaultEliminate)
update the Bayes tree with a set of new factors, typically derived from measurements
Definition ISAM-inst.h:62
\n-
void updateInternal(const FactorGraphType &newFactors, Cliques *orphans, const Eliminate &function=EliminationTraitsType::DefaultEliminate)
updateInternal provides access to list of orphans for drawing purposes
Definition ISAM-inst.h:27
\n-
Definition Ordering.h:34
\n-
static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const KeyVector &constrainLast, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:114
\n-
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
Definition Conditional.h:64
\n+
static bool CheckInvariants(const DERIVEDCONDITIONAL &conditional, const VALUES &x)
Check invariants of this conditional, given the values x.
Definition Conditional-inst.h:77
\n+
size_t nrFrontals_
The first nrFrontal variables are frontal and the rest are parents.
Definition Conditional.h:67
\n+
virtual double logNormalizationConstant() const
All conditional types need to implement a log normalization constant to make it such that error>=0.
Definition Conditional-inst.h:62
\n+
virtual double evaluate(const HybridValues &c) const
All conditional types need to implement an evaluate function, that yields a true probability.
Definition Conditional-inst.h:55
\n+
bool equals(const This &c, double tol=1e-9) const
check equality
Definition Conditional-inst.h:41
\n+
virtual double logProbability(const HybridValues &c) const
All conditional types need to implement a logProbability function, for which exp(logProbability(x)) =...
Definition Conditional-inst.h:48
\n+
double normalizationConstant() const
Non-virtual, exponentiate logNormalizationConstant.
Definition Conditional-inst.h:70
\n+
void print(const std::string &s="Conditional", const KeyFormatter &formatter=DefaultKeyFormatter) const
print with optional formatter
Definition Conditional-inst.h:30
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,113 +1,167 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM-inst.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+Conditional-inst.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bI_\bS_\bA_\bM_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n+18// \\callgraph\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n 22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-25/* *************************************************************************\n-*/\n-26template\n-_\b2_\b7void _\bI_\bS_\bA_\bM_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b>_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl(const FactorGraphType& newFactors,\n-28 Cliques* orphans, const Eliminate& function) {\n-29 // Remove the contaminated part of the Bayes tree\n-30 BayesNetType bn;\n-31 const _\bK_\be_\by_\bS_\be_\bt newFactorKeys = newFactors.keys();\n-32 if (!this->empty()) {\n-33 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keyVector(newFactorKeys.begin(), newFactorKeys.end());\n-34 this->removeTop(keyVector, &bn, orphans);\n-35 }\n-36\n-37 // Add the removed top and the new factors\n-38 FactorGraphType factors;\n-39 factors += bn;\n-40 factors += newFactors;\n-41\n-42 // Add the orphaned subtrees\n-43 for (const sharedClique& orphan : *orphans)\n-44 factors += boost::make_shared<_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bC_\bl_\bi_\bq_\bu_\be_\b> >(orphan);\n+23#include \n+24#include \n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28/* *************************************************************************\n+*/\n+29template \n+_\b3_\b0void _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(\n+31 const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter) const {\n+32 std::cout << s << \" P(\";\n+33 for (_\bK_\be_\by key : frontals()) std::cout << \" \" << formatter(key);\n+34 if (nrParents() > 0) std::cout << \" |\";\n+35 for (_\bK_\be_\by parent : parents()) std::cout << \" \" << formatter(parent);\n+36 std::cout << \")\" << std::endl;\n+37}\n+38\n+39/* *************************************************************************\n+*/\n+40template \n+_\b4_\b1bool _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& c,\n+42 double tol) const {\n+43 return nrFrontals_ == c._\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_;\n+44}\n 45\n-46 // Get an ordering where the new keys are eliminated last\n-47 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx index(factors);\n-48 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg ordering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(index,\n-49 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br(newFactorKeys.begin(), newFactorKeys.end()));\n-50\n-51 // eliminate all factors (top, added, orphans) into a new Bayes tree\n-52 auto bayesTree = factors.eliminateMultifrontal(ordering, function, index);\n-53\n-54 // Re-add into Bayes tree data structures\n-55 this->roots_.insert(this->roots_.end(), bayesTree->roots().begin(),\n-56 bayesTree->roots().end());\n-57 this->nodes_.insert(bayesTree->nodes().begin(), bayesTree->nodes().end());\n+46/* *************************************************************************\n+*/\n+47template \n+_\b4_\b8double _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(\n+49 const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const {\n+50 throw std::runtime_error(\"Conditional::logProbability is not implemented\");\n+51}\n+52\n+53/* *************************************************************************\n+*/\n+54template \n+_\b5_\b5double _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(\n+56 const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const {\n+57 throw std::runtime_error(\"Conditional::evaluate is not implemented\");\n 58}\n 59\n 60/* *************************************************************************\n */\n-61template\n-_\b6_\b2void _\bI_\bS_\bA_\bM_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b>_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be(const FactorGraphType& newFactors,\n-63 const Eliminate& function) {\n-_\b6_\b4 Cliques orphans;\n-65 this->updateInternal(newFactors, &orphans, function);\n+61template \n+_\b6_\b2double _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bl_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt()\n+63 const {\n+64 throw std::runtime_error(\n+65 \"Conditional::logNormalizationConstant is not implemented\");\n 66}\n 67\n-68}\n-_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n-_\bI_\bS_\bA_\bM_\b._\bh\n-Incremental update functionality (iSAM) for BayesTree.\n+68/* *************************************************************************\n+*/\n+69template \n+_\b7_\b0double _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt() const\n+{\n+71 return std::exp(logNormalizationConstant());\n+72}\n+73\n+74/* *************************************************************************\n+*/\n+75template \n+76template \n+_\b7_\b7bool _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bC_\bh_\be_\bc_\bk_\bI_\bn_\bv_\ba_\br_\bi_\ba_\bn_\bt_\bs(\n+78 const DERIVEDCONDITIONAL& conditional, const VALUES& values) {\n+79 const double prob_or_density = conditional.evaluate(values);\n+80 if (prob_or_density < 0.0) return false; // prob_or_density is negative.\n+81 if (std::abs(prob_or_density - conditional(values)) > 1e-9)\n+82 return false; // operator and evaluate differ\n+83 const double logProb = conditional.logProbability(values);\n+84 if (std::abs(prob_or_density - std::exp(logProb)) > 1e-9)\n+85 return false; // logProb is not consistent with prob_or_density\n+86 if (std::abs(conditional.logNormalizationConstant() -\n+87 std::log(conditional.normalizationConstant())) > 1e-9)\n+88 return false; // log normalization constant is not consistent with\n+89 // normalization constant\n+90 const double error = conditional.error(values);\n+91 if (error < 0.0) return false; // prob_or_density is negative.\n+92 const double expected = conditional.logNormalizationConstant() - error;\n+93 if (std::abs(logProb - expected) > 1e-9)\n+94 return false; // logProb is not consistent with error\n+95 return true;\n+96}\n+_\b9_\b7\n+98} // namespace gtsam\n+_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+Base class for conditional densities.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:276\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const FactorGraphType &newFactors, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate)\n-update the Bayes tree with a set of new factors, typically derived from\n-measurements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM-inst.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl\n-void updateInternal(const FactorGraphType &newFactors, Cliques *orphans, const\n-Eliminate &function=EliminationTraitsType::DefaultEliminate)\n-updateInternal provides access to list of orphans for drawing purposes\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM-inst.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt\n-static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const\n-KeyVector &constrainLast, bool forceOrder=false)\n-Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n-(see details for note o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-The VariableIndex class computes and stores the block column structure of a\n-factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bC_\bh_\be_\bc_\bk_\bI_\bn_\bv_\ba_\br_\bi_\ba_\bn_\bt_\bs\n+static bool CheckInvariants(const DERIVEDCONDITIONAL &conditional, const VALUES\n+&x)\n+Check invariants of this conditional, given the values x.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_\n+size_t nrFrontals_\n+The first nrFrontal variables are frontal and the rest are parents.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bl_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n+virtual double logNormalizationConstant() const\n+All conditional types need to implement a log normalization constant to make it\n+such that error>=0.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\n+virtual double evaluate(const HybridValues &c) const\n+All conditional types need to implement an evaluate function, that yields a\n+true probability.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &c, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by\n+virtual double logProbability(const HybridValues &c) const\n+All conditional types need to implement a logProbability function, for which\n+exp(logProbability(x)) =...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n+double normalizationConstant() const\n+Non-virtual, exponentiate logNormalizationConstant.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"Conditional\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print with optional formatter\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:30\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bI_\bS_\bA_\bM_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * C\bCo\bon\bnd\bdi\bit\bti\bio\bon\bna\bal\bl-\b-i\bin\bns\bst\bt.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00647.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00647.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.h File Reference\n \n \n \n \n \n \n \n@@ -95,43 +95,56 @@\n
\n \n \n \n
\n \n-
ISAM.h File Reference
\n+Namespaces |\n+Typedefs
\n+
Factor.h File Reference
\n \n
\n \n-

Incremental update functionality (iSAM) for BayesTree. \n+

The base class for all factors. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n \n

\n Classes

class  gtsam::ISAM< BAYESTREE >
 A Bayes tree with an update methods that implements the iSAM algorithm. More...
class  gtsam::Factor
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n

\n+Typedefs

typedef FastVector< FactorIndexgtsam::FactorIndices
 Define collection types:
 
\n+typedef FastSet< FactorIndexgtsam::FactorIndexSet
 
\n

Detailed Description

\n-

Incremental update functionality (iSAM) for BayesTree.

\n-
Author
Michael Kaess
\n+

The base class for all factors.

\n+
Author
Kai Ni
\n+
\n+Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ISAM.h File Reference\n-Incremental update functionality (iSAM) for BayesTree. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+Factor.h File Reference\n+The base class for all factors. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b _\b>\n-\u00a0 A Bayes tree with an update methods that implements the iSAM algorithm.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br< _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+\u00a0 Define collection types:\n+\u00a0\n+ typedef _\bF_\ba_\bs_\bt_\bS_\be_\bt< _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:F\bFa\bac\bct\bto\bor\brI\bIn\bnd\bde\bex\bxS\bSe\bet\bt\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Incremental update functionality (iSAM) for BayesTree.\n+The base class for all factors.\n Author\n- Michael Kaess\n+ Kai Ni\n+ Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bI_\bS_\bA_\bM_\b._\bh\n+ * _\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00647.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00647.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00647 = [\n- [\"gtsam::ISAM< BAYESTREE >\", \"a03640.html\", \"a03640\"]\n+ [\"gtsam::Factor\", \"a03592.html\", \"a03592\"],\n+ [\"FactorIndices\", \"a00647.html#a99e63c90a8ac740d99716e73fe97e054\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00647_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00647_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.h Source File\n \n \n \n \n \n \n \n@@ -98,80 +98,183 @@\n
No Matches
\n \n \n \n \n \n
\n-
ISAM.h
\n+
Factor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18// \\callgraph
\n-
19#pragma once
\n-
20
\n-\n-
22
\n-
23namespace gtsam {
\n-
24
\n-
30template <class BAYESTREE>
\n-
\n-
31class ISAM : public BAYESTREE {
\n-
32 public:
\n-
33 typedef BAYESTREE Base;
\n-
34 typedef typename Base::BayesNetType BayesNetType;
\n-
35 typedef typename Base::FactorGraphType FactorGraphType;
\n-
36 typedef typename Base::Clique Clique;
\n-
37 typedef typename Base::sharedClique sharedClique;
\n-
38 typedef typename Base::Cliques Cliques;
\n-
39
\n-
40 private:
\n-
41 typedef typename Base::Eliminate Eliminate;
\n-
42 typedef typename Base::EliminationTraitsType EliminationTraitsType;
\n-
43
\n-
44 public:
\n-
47
\n-
49 ISAM() {}
\n-
50
\n-
52 explicit ISAM(const Base& bayesTree) : Base(bayesTree) {}
\n-
53
\n-
57
\n-
64 void update(
\n-
65 const FactorGraphType& newFactors,
\n-
66 const Eliminate& function = EliminationTraitsType::DefaultEliminate);
\n-
67
\n-
70 void updateInternal(
\n-
71 const FactorGraphType& newFactors, Cliques* orphans,
\n-
72 const Eliminate& function = EliminationTraitsType::DefaultEliminate);
\n-
73
\n-
75};
\n-
\n-
76
\n-
77} // namespace gtsam
\n-
Included from all GTSAM files.
\n+
20// \\callgraph
\n+
21
\n+
22#pragma once
\n+
23
\n+
24#include <boost/serialization/nvp.hpp>
\n+
25#include <boost/shared_ptr.hpp>
\n+
26
\n+
27#include <gtsam/base/types.h>
\n+\n+
29#include <gtsam/inference/Key.h>
\n+
30
\n+
31namespace gtsam {
\n+
32
\n+\n+
35 typedef FastSet<FactorIndex> FactorIndexSet;
\n+
36
\n+
37 class HybridValues; // forward declaration of a Value type for error.
\n+
38
\n+
\n+
67 class GTSAM_EXPORT Factor
\n+
68 {
\n+
69
\n+
70 private:
\n+
71 // These typedefs are private because they must be overridden in derived classes.
\n+
72 typedef Factor This;
\n+
73 typedef boost::shared_ptr<Factor> shared_ptr;
\n+
74
\n+
75 public:
\n+
77 typedef KeyVector::iterator iterator;
\n+
78
\n+
80 typedef KeyVector::const_iterator const_iterator;
\n+
81
\n+
82 protected:
\n+
83
\n+\n+
86
\n+
89
\n+
91 Factor() {}
\n+
92
\n+
95 template<typename CONTAINER>
\n+
96 explicit Factor(const CONTAINER& keys) : keys_(keys.begin(), keys.end()) {}
\n+
97
\n+
100 template<typename ITERATOR>
\n+
101 Factor(ITERATOR first, ITERATOR last) : keys_(first, last) {}
\n+
102
\n+
105 template<typename CONTAINER>
\n+
\n+
106 static Factor FromKeys(const CONTAINER& keys) {
\n+
107 return Factor(keys.begin(), keys.end()); }
\n+
\n+
108
\n+
111 template<typename ITERATOR>
\n+
\n+
112 static Factor FromIterators(ITERATOR first, ITERATOR last) {
\n+
113 return Factor(first, last); }
\n+
\n+
114
\n+
116
\n+
117 public:
\n+
119 // public since it is required for boost serialization and static methods.
\n+
120 // virtual since it is public.
\n+
121 // http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-dtor-virtual
\n+
122 virtual ~Factor() = default;
\n+
123
\n+
126
\n+
128 bool empty() const { return keys_.empty(); }
\n+
129
\n+
131 Key front() const { return keys_.front(); }
\n+
132
\n+
134 Key back() const { return keys_.back(); }
\n+
135
\n+
137 const_iterator find(Key key) const { return std::find(begin(), end(), key); }
\n+
138
\n+
140 const KeyVector& keys() const { return keys_; }
\n+
141
\n+
143 const_iterator begin() const { return keys_.begin(); }
\n+
144
\n+
146 const_iterator end() const { return keys_.end(); }
\n+
147
\n+
152 virtual double error(const HybridValues& c) const;
\n+
153
\n+
157 size_t size() const { return keys_.size(); }
\n+
158
\n+
160
\n+
163
\n+
165 virtual void print(
\n+
166 const std::string& s = "Factor",
\n+
167 const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n+
168
\n+
170 virtual void printKeys(
\n+
171 const std::string& s = "Factor",
\n+
172 const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n+
173
\n+
175 bool equals(const This& other, double tol = 1e-9) const;
\n+
176
\n+
180
\n+
182 KeyVector& keys() { return keys_; }
\n+
183
\n+
185 iterator begin() { return keys_.begin(); }
\n+
186
\n+
188 iterator end() { return keys_.end(); }
\n+
189
\n+
191
\n+
192 private:
\n+
193
\n+
196
\n+
198 friend class boost::serialization::access;
\n+
199 template<class Archive>
\n+
200 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
201 ar & BOOST_SERIALIZATION_NVP(keys_);
\n+
202 }
\n+
203
\n+
205
\n+
206 };
\n+
\n+
207
\n+
208} // \\namespace gtsam
\n+
Typedefs for easier changing of types.
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A Bayes tree with an update methods that implements the iSAM algorithm.
Definition ISAM.h:31
\n-
void update(const FactorGraphType &newFactors, const Eliminate &function=EliminationTraitsType::DefaultEliminate)
update the Bayes tree with a set of new factors, typically derived from measurements
Definition ISAM-inst.h:62
\n-
ISAM(const Base &bayesTree)
Copy constructor.
Definition ISAM.h:52
\n-
ISAM()
Create an empty Bayes Tree.
Definition ISAM.h:49
\n-
void updateInternal(const FactorGraphType &newFactors, Cliques *orphans, const Eliminate &function=EliminationTraitsType::DefaultEliminate)
updateInternal provides access to list of orphans for drawing purposes
Definition ISAM-inst.h:27
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
FastSet is a thin wrapper around std::set that uses the boost fast_pool_allocator instead of the defa...
Definition FastSet.h:50
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
Definition Factor.h:68
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
const_iterator find(Key key) const
find
Definition Factor.h:137
\n+
const_iterator begin() const
Iterator at beginning of involved variable keys.
Definition Factor.h:143
\n+
Factor()
Default constructor for I/O.
Definition Factor.h:91
\n+
iterator end()
Iterator at end of involved variable keys.
Definition Factor.h:188
\n+
bool empty() const
Whether the factor is empty (involves zero variables).
Definition Factor.h:128
\n+
KeyVector & keys()
Definition Factor.h:182
\n+
static Factor FromIterators(ITERATOR first, ITERATOR last)
Construct factor from iterator keys.
Definition Factor.h:112
\n+
static Factor FromKeys(const CONTAINER &keys)
Construct factor from container of keys.
Definition Factor.h:106
\n+
iterator begin()
Iterator at beginning of involved variable keys.
Definition Factor.h:185
\n+
virtual ~Factor()=default
Default destructor.
\n+
Factor(ITERATOR first, ITERATOR last)
Construct factor from iterator keys.
Definition Factor.h:101
\n+
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n+
const_iterator end() const
Iterator at end of involved variable keys.
Definition Factor.h:146
\n+
Factor(const CONTAINER &keys)
Construct factor from container of keys.
Definition Factor.h:96
\n+
KeyVector::iterator iterator
Iterator over keys.
Definition Factor.h:77
\n+
Key back() const
Last key.
Definition Factor.h:134
\n+
Key front() const
First key.
Definition Factor.h:131
\n+
size_t size() const
Definition Factor.h:157
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,90 +1,260 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM.h\n+Factor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18// \\callgraph\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-30template \n-_\b3_\b1class _\bI_\bS_\bA_\bM : public BAYESTREE {\n-32 public:\n-33 typedef BAYESTREE Base;\n-34 typedef typename Base::BayesNetType BayesNetType;\n-35 typedef typename Base::FactorGraphType FactorGraphType;\n-36 typedef typename Base::Clique Clique;\n-37 typedef typename Base::sharedClique sharedClique;\n-38 typedef typename Base::Cliques Cliques;\n-39\n-40 private:\n-41 typedef typename Base::Eliminate Eliminate;\n-42 typedef typename Base::EliminationTraitsType EliminationTraitsType;\n-43\n-44 public:\n-47\n-_\b4_\b9 _\bI_\bS_\bA_\bM() {}\n-50\n-_\b5_\b2 explicit _\bI_\bS_\bA_\bM(const Base& bayesTree) : Base(bayesTree) {}\n-53\n-57\n-64 void _\bu_\bp_\bd_\ba_\bt_\be(\n-65 const FactorGraphType& newFactors,\n-66 const Eliminate& function = EliminationTraitsType::DefaultEliminate);\n-67\n-70 void _\bu_\bp_\bd_\ba_\bt_\be_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl(\n-71 const FactorGraphType& newFactors, Cliques* orphans,\n-72 const Eliminate& function = EliminationTraitsType::DefaultEliminate);\n-73\n-75};\n-76\n-77} // namespace gtsam\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n+20// \\callgraph\n+21\n+22#pragma once\n+23\n+24#include \n+25#include \n+26\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32\n+_\b3_\b4 typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx_\b> _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n+35 typedef _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\be_\bx_\b> FactorIndexSet;\n+36\n+37 class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs; // forward declaration of a Value type for error.\n+38\n+_\b6_\b7 class GTSAM_EXPORT _\bF_\ba_\bc_\bt_\bo_\br\n+68 {\n+69\n+70 private:\n+71 // These typedefs are private because they must be overridden in derived\n+classes.\n+72 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+73 typedef boost::shared_ptr shared_ptr;\n+74\n+75 public:\n+_\b7_\b7 typedef KeyVector::iterator _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+78\n+_\b8_\b0 typedef KeyVector::const_iterator _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+81\n+82 protected:\n+83\n+_\b8_\b5 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bk_\be_\by_\bs_\b_;\n+86\n+89\n+_\b9_\b1 _\bF_\ba_\bc_\bt_\bo_\br() {}\n+92\n+95 template\n+_\b9_\b6 explicit _\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER& keys) : keys_(keys.begin(), keys.end()) {}\n+97\n+100 template\n+_\b1_\b0_\b1 _\bF_\ba_\bc_\bt_\bo_\br(ITERATOR first, ITERATOR last) : keys_(first, last) {}\n+102\n+105 template\n+_\b1_\b0_\b6 static _\bF_\ba_\bc_\bt_\bo_\br _\bF_\br_\bo_\bm_\bK_\be_\by_\bs(const CONTAINER& keys) {\n+107 return _\bF_\ba_\bc_\bt_\bo_\br(keys.begin(), keys.end()); }\n+108\n+111 template\n+_\b1_\b1_\b2 static _\bF_\ba_\bc_\bt_\bo_\br _\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs(ITERATOR first, ITERATOR last) {\n+113 return _\bF_\ba_\bc_\bt_\bo_\br(first, last); }\n+114\n+116\n+117 public:\n+119 // public since it is required for boost serialization and static methods.\n+120 // virtual since it is public.\n+121 // http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-dtor-\n+virtual\n+_\b1_\b2_\b2 virtual _\b~_\bF_\ba_\bc_\bt_\bo_\br() = default;\n+123\n+126\n+_\b1_\b2_\b8 bool _\be_\bm_\bp_\bt_\by() const { return keys_.empty(); }\n+129\n+_\b1_\b3_\b1 _\bK_\be_\by _\bf_\br_\bo_\bn_\bt() const { return keys_.front(); }\n+132\n+_\b1_\b3_\b4 _\bK_\be_\by _\bb_\ba_\bc_\bk() const { return keys_.back(); }\n+135\n+_\b1_\b3_\b7 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bf_\bi_\bn_\bd(_\bK_\be_\by key) const { return std::find(begin(), end(), key);\n+}\n+138\n+_\b1_\b4_\b0 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs() const { return keys_; }\n+141\n+_\b1_\b4_\b3 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const { return keys_.begin(); }\n+144\n+_\b1_\b4_\b6 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const { return keys_.end(); }\n+147\n+152 virtual double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+153\n+_\b1_\b5_\b7 size_t _\bs_\bi_\bz_\be() const { return keys_.size(); }\n+158\n+160\n+163\n+165 virtual void _\bp_\br_\bi_\bn_\bt(\n+166 const std::string& s = \"Factor\",\n+167 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const;\n+168\n+170 virtual void printKeys(\n+171 const std::string& s = \"Factor\",\n+172 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const;\n+173\n+175 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n+176\n+180\n+_\b1_\b8_\b2 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs() { return keys_; }\n+183\n+_\b1_\b8_\b5 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() { return keys_.begin(); }\n+186\n+_\b1_\b8_\b8 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() { return keys_.end(); }\n+189\n+191\n+192 private:\n+193\n+196\n+_\b1_\b9_\b8 friend class boost::serialization::access;\n+199 template\n+200 void serialize(Archive & ar, const unsigned int /*version*/) {\n+201 ar & BOOST_SERIALIZATION_NVP(keys_);\n+202 }\n+203\n+205\n+206 };\n+207\n+208} // \\namespace gtsam\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bK_\be_\by_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM\n-A Bayes tree with an update methods that implements the iSAM algorithm.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(const FactorGraphType &newFactors, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate)\n-update the Bayes tree with a set of new factors, typically derived from\n-measurements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM-inst.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bI_\bS_\bA_\bM\n-ISAM(const Base &bayesTree)\n-Copy constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bI_\bS_\bA_\bM\n-ISAM()\n-Create an empty Bayes Tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl\n-void updateInternal(const FactorGraphType &newFactors, Cliques *orphans, const\n-Eliminate &function=EliminationTraitsType::DefaultEliminate)\n-updateInternal provides access to list of orphans for drawing purposes\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM-inst.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+FastVector< FactorIndex > FactorIndices\n+Define collection types:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt\n+FastSet is a thin wrapper around std::set that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastSet.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bn_\bd\n+const_iterator find(Key key) const\n+find\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+const_iterator begin() const\n+Iterator at beginning of involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+Factor()\n+Default constructor for I/O.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bn_\bd\n+iterator end()\n+Iterator at end of involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:188\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+Whether the factor is empty (involves zero variables).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+KeyVector & keys()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:182\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs\n+static Factor FromIterators(ITERATOR first, ITERATOR last)\n+Construct factor from iterator keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:112\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs\n+static Factor FromKeys(const CONTAINER &keys)\n+Construct factor from container of keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+iterator begin()\n+Iterator at beginning of involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bF_\ba_\bc_\bt_\bo_\br\n+virtual ~Factor()=default\n+Default destructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+Factor(ITERATOR first, ITERATOR last)\n+Construct factor from iterator keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+KeyVector::const_iterator const_iterator\n+Const iterator over keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bn_\bd\n+const_iterator end() const\n+Iterator at end of involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:146\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+Factor(const CONTAINER &keys)\n+Construct factor from container of keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+KeyVector::iterator iterator\n+Iterator over keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\ba_\bc_\bk\n+Key back() const\n+Last key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\br_\bo_\bn_\bt\n+Key front() const\n+First key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bI_\bS_\bA_\bM_\b._\bh\n+ * _\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00650.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00650.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/inferenceExceptions.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Conditional.h File Reference\n \n \n \n \n \n \n \n@@ -96,43 +96,41 @@\n \n \n \n
\n \n-
inferenceExceptions.h File Reference
\n+
Conditional.h File Reference
\n
\n
\n \n-

Exceptions that may be thrown by inference algorithms. \n+

Base class for conditional densities. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n \n

\n Classes

class  gtsam::InconsistentEliminationRequested
 An inference algorithm was called with inconsistent arguments. More...
class  gtsam::Conditional< FACTOR, DERIVEDCONDITIONAL >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Exceptions that may be thrown by inference algorithms.

\n-
Author
Richard Roberts
\n-
Date
Apr 25, 2013
\n+

Base class for conditional densities.

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,24 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-inferenceExceptions.h File Reference\n-Exceptions that may be thrown by inference algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\n+Conditional.h File Reference\n+Base class for conditional densities. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd\n-\u00a0 An inference algorithm was called with inconsistent arguments. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\b _\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Exceptions that may be thrown by inference algorithms.\n+Base class for conditional densities.\n Author\n- Richard Roberts\n- Date\n- Apr 25, 2013\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+ * _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00650.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00650.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a00650 = [\n- [\"gtsam::InconsistentEliminationRequested\", \"a03636.html\", null]\n+ [\"gtsam::Conditional< FACTOR, DERIVEDCONDITIONAL >\", \"a03572.html\", \"a03572\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00650_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00650_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/inferenceExceptions.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Conditional.h Source File\n \n \n \n \n \n \n \n@@ -98,59 +98,185 @@\n
No Matches
\n \n \n \n \n \n
\n-
inferenceExceptions.h
\n+
Conditional.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-
21#include <boost/lexical_cast.hpp>
\n-
22#include <exception>
\n-
23
\n-
24namespace gtsam {
\n-
25
\n-
\n-
29 class InconsistentEliminationRequested : public std::exception {
\n-
30 public:
\n-\n-
32 ~InconsistentEliminationRequested() noexcept override {}
\n-
33 const char* what() const noexcept override {
\n-
34 return
\n-
35 "An inference algorithm was called with inconsistent arguments. The\\n"
\n-
36 "factor graph, ordering, or variable index were inconsistent with each\\n"
\n-
37 "other, or a full elimination routine was called with an ordering that\\n"
\n-
38 "does not include all of the variables.";
\n-
39 }
\n-
40 };
\n-
\n-
41
\n-
42}
\n-
Included from all GTSAM files.
\n+
18// \\callgraph
\n+
19#pragma once
\n+
20
\n+
21#include <boost/range.hpp>
\n+
22
\n+
23#include <gtsam/inference/Key.h>
\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
27 class HybridValues; // forward declaration.
\n+
28
\n+
62 template<class FACTOR, class DERIVEDCONDITIONAL>
\n+
\n+\n+
64 {
\n+
65 protected:
\n+\n+
68
\n+
69 private:
\n+\n+
72
\n+
73 public:
\n+
75 typedef boost::iterator_range<typename FACTOR::const_iterator> Frontals;
\n+
76
\n+
78 typedef boost::iterator_range<typename FACTOR::const_iterator> Parents;
\n+
79
\n+
80 protected:
\n+
83
\n+\n+
86
\n+\n+
89
\n+
91
\n+
92 public:
\n+
95
\n+
97 void print(const std::string& s = "Conditional", const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n+
98
\n+
100 bool equals(const This& c, double tol = 1e-9) const;
\n+
101
\n+
103
\n+
106
\n+
107 virtual ~Conditional() {}
\n+
108
\n+
110 size_t nrFrontals() const { return nrFrontals_; }
\n+
111
\n+
113 size_t nrParents() const { return asFactor().size() - nrFrontals_; }
\n+
114
\n+
\n+\n+
117 if(nrFrontals_ > 0)
\n+
118 return asFactor().front();
\n+
119 else
\n+
120 throw std::invalid_argument("Requested Conditional::firstFrontalKey from a conditional with zero frontal keys");
\n+
121 }
\n+
\n+
122
\n+
124 Frontals frontals() const { return boost::make_iterator_range(beginFrontals(), endFrontals()); }
\n+
125
\n+
127 Parents parents() const { return boost::make_iterator_range(beginParents(), endParents()); }
\n+
128
\n+
133 virtual double logProbability(const HybridValues& c) const;
\n+
134
\n+
139 virtual double evaluate(const HybridValues& c) const;
\n+
140
\n+
\n+
142 double operator()(const HybridValues& x) const {
\n+
143 return evaluate(x);
\n+
144 }
\n+
\n+
145
\n+
150 virtual double logNormalizationConstant() const;
\n+
151
\n+
153 double normalizationConstant() const;
\n+
154
\n+
158
\n+
160 typename FACTOR::const_iterator beginFrontals() const { return asFactor().begin(); }
\n+
161
\n+
163 typename FACTOR::const_iterator endFrontals() const { return asFactor().begin() + nrFrontals_; }
\n+
164
\n+
166 typename FACTOR::const_iterator beginParents() const { return endFrontals(); }
\n+
167
\n+
169 typename FACTOR::const_iterator endParents() const { return asFactor().end(); }
\n+
170
\n+
172 size_t& nrFrontals() { return nrFrontals_; }
\n+
173
\n+
175 typename FACTOR::iterator beginFrontals() { return asFactor().begin(); }
\n+
176
\n+
178 typename FACTOR::iterator endFrontals() { return asFactor().begin() + nrFrontals_; }
\n+
179
\n+
181 typename FACTOR::iterator beginParents() { return asFactor().begin() + nrFrontals_; }
\n+
182
\n+
184 typename FACTOR::iterator endParents() { return asFactor().end(); }
\n+
185
\n+
199 template <class VALUES>
\n+
200 static bool CheckInvariants(const DERIVEDCONDITIONAL& conditional,
\n+
201 const VALUES& x);
\n+
202
\n+
204
\n+
205 private:
\n+
206
\n+
209
\n+
210 // Cast to factor type (non-const) (casts down to derived conditional type, then up to factor type)
\n+
211 FACTOR& asFactor() { return static_cast<FACTOR&>(static_cast<DERIVEDCONDITIONAL&>(*this)); }
\n+
212
\n+
213 // Cast to derived type (const) (casts down to derived conditional type, then up to factor type)
\n+
214 const FACTOR& asFactor() const { return static_cast<const FACTOR&>(static_cast<const DERIVEDCONDITIONAL&>(*this)); }
\n+
215
\n+\n+
218 template<class ARCHIVE>
\n+
219 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
220 ar & BOOST_SERIALIZATION_NVP(nrFrontals_);
\n+
221 }
\n+
222
\n+
224
\n+
225 };
\n+
\n+
226
\n+
227} // gtsam
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
An inference algorithm was called with inconsistent arguments.
Definition inferenceExceptions.h:29
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
Definition Conditional.h:64
\n+
static bool CheckInvariants(const DERIVEDCONDITIONAL &conditional, const VALUES &x)
Check invariants of this conditional, given the values x.
Definition Conditional-inst.h:77
\n+
size_t nrFrontals_
The first nrFrontal variables are frontal and the rest are parents.
Definition Conditional.h:67
\n+
virtual double logNormalizationConstant() const
All conditional types need to implement a log normalization constant to make it such that error>=0.
Definition Conditional-inst.h:62
\n+
Key firstFrontalKey() const
Convenience function to get the first frontal key.
Definition Conditional.h:116
\n+
FACTOR::const_iterator endFrontals() const
Iterator pointing past the last frontal key.
Definition Conditional.h:163
\n+
FACTOR::iterator endParents()
Mutable iterator pointing past the last parent key.
Definition Conditional.h:184
\n+
FACTOR::iterator endFrontals()
Mutable iterator pointing past the last frontal key.
Definition Conditional.h:178
\n+
virtual double evaluate(const HybridValues &c) const
All conditional types need to implement an evaluate function, that yields a true probability.
Definition Conditional-inst.h:55
\n+
Parents parents() const
return a view of the parent keys
Definition Conditional.h:127
\n+
double operator()(const HybridValues &x) const
Evaluate probability density, sugar.
Definition Conditional.h:142
\n+
boost::iterator_range< typename FACTOR::const_iterator > Parents
View of the separator keys (call parents())
Definition Conditional.h:78
\n+
virtual double logProbability(const HybridValues &c) const
All conditional types need to implement a logProbability function, for which exp(logProbability(x)) =...
Definition Conditional-inst.h:48
\n+
size_t nrFrontals() const
return the number of frontals
Definition Conditional.h:110
\n+
Conditional()
Empty Constructor to make serialization possible.
Definition Conditional.h:85
\n+
Conditional(size_t nrFrontals)
Constructor.
Definition Conditional.h:88
\n+
FACTOR::iterator beginParents()
Mutable iterator pointing to the first parent key.
Definition Conditional.h:181
\n+
size_t & nrFrontals()
Mutable version of nrFrontals.
Definition Conditional.h:172
\n+
FACTOR::iterator beginFrontals()
Mutable iterator pointing to first frontal key.
Definition Conditional.h:175
\n+
boost::iterator_range< typename FACTOR::const_iterator > Frontals
View of the frontal keys (call frontals())
Definition Conditional.h:75
\n+
Frontals frontals() const
return a view of the frontal keys
Definition Conditional.h:124
\n+
friend class boost::serialization::access
Serialization function.
Definition Conditional.h:217
\n+
FACTOR::const_iterator beginFrontals() const
Iterator pointing to first frontal key.
Definition Conditional.h:160
\n+
double normalizationConstant() const
Non-virtual, exponentiate logNormalizationConstant.
Definition Conditional-inst.h:70
\n+
size_t nrParents() const
return the number of parents
Definition Conditional.h:113
\n+
void print(const std::string &s="Conditional", const KeyFormatter &formatter=DefaultKeyFormatter) const
print with optional formatter
Definition Conditional-inst.h:30
\n+
FACTOR::const_iterator endParents() const
Iterator pointing past the last parent key.
Definition Conditional.h:169
\n+
FACTOR::const_iterator beginParents() const
Iterator pointing to the first parent key.
Definition Conditional.h:166
\n+
the error.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,54 +1,285 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-inferenceExceptions.h\n+Conditional.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-21#include \n-22#include \n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-_\b2_\b9 class _\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd : public std::exception {\n-30 public:\n-31 _\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd() noexcept {}\n-32 _\b~_\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd() noexcept override {}\n-33 const char* what() const noexcept override {\n-34 return\n-35 \"An inference algorithm was called with inconsistent arguments. The\\n\"\n-36 \"factor graph, ordering, or variable index were inconsistent with each\\n\"\n-37 \"other, or a full elimination routine was called with an ordering that\\n\"\n-38 \"does not include all of the variables.\";\n-39 }\n-40 };\n-41\n-42}\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n+18// \\callgraph\n+19#pragma once\n+20\n+21#include \n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+27 class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs; // forward declaration.\n+28\n+62 template\n+_\b6_\b3 class _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+64 {\n+65 protected:\n+_\b6_\b7 size_t _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_;\n+68\n+69 private:\n+71 typedef _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b> _\bT_\bh_\bi_\bs;\n+72\n+73 public:\n+_\b7_\b5 typedef boost::iterator_range _\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs;\n+76\n+_\b7_\b8 typedef boost::iterator_range _\bP_\ba_\br_\be_\bn_\bt_\bs;\n+79\n+80 protected:\n+83\n+_\b8_\b5 _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() : _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_(0) {}\n+86\n+_\b8_\b8 _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(size_t _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs) : _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_(_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs) {}\n+89\n+91\n+92 public:\n+95\n+97 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"Conditional\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n+formatter = DefaultKeyFormatter) const;\n+98\n+100 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& c, double tol = 1e-9) const;\n+101\n+103\n+106\n+107 virtual _\b~_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() {}\n+108\n+_\b1_\b1_\b0 size_t _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() const { return _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n+111\n+_\b1_\b1_\b3 size_t _\bn_\br_\bP_\ba_\br_\be_\bn_\bt_\bs() const { return asFactor().size() - _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n+114\n+_\b1_\b1_\b6 _\bK_\be_\by _\bf_\bi_\br_\bs_\bt_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by() const {\n+117 if(_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_ > 0)\n+118 return asFactor().front();\n+119 else\n+120 throw std::invalid_argument(\"Requested Conditional::firstFrontalKey from a\n+conditional with zero frontal keys\");\n+121 }\n+122\n+_\b1_\b2_\b4 _\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs _\bf_\br_\bo_\bn_\bt_\ba_\bl_\bs() const { return boost::make_iterator_range(_\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+(), _\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs()); }\n+125\n+_\b1_\b2_\b7 _\bP_\ba_\br_\be_\bn_\bt_\bs _\bp_\ba_\br_\be_\bn_\bt_\bs() const { return boost::make_iterator_range(_\bb_\be_\bg_\bi_\bn_\bP_\ba_\br_\be_\bn_\bt_\bs(),\n+_\be_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bs()); }\n+128\n+133 virtual double _\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+134\n+139 virtual double _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+140\n+_\b1_\b4_\b2 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n+143 return _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(x);\n+144 }\n+145\n+150 virtual double _\bl_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt() const;\n+151\n+153 double _\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt() const;\n+154\n+158\n+_\b1_\b6_\b0 typename FACTOR::const_iterator _\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() const { return asFactor\n+().begin(); }\n+161\n+_\b1_\b6_\b3 typename FACTOR::const_iterator _\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() const { return asFactor\n+().begin() + _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n+164\n+_\b1_\b6_\b6 typename FACTOR::const_iterator _\bb_\be_\bg_\bi_\bn_\bP_\ba_\br_\be_\bn_\bt_\bs() const { return _\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+(); }\n+167\n+_\b1_\b6_\b9 typename FACTOR::const_iterator _\be_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bs() const { return asFactor().end\n+(); }\n+170\n+_\b1_\b7_\b2 size_t& _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() { return _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n+173\n+_\b1_\b7_\b5 typename FACTOR::iterator _\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() { return asFactor().begin(); }\n+176\n+_\b1_\b7_\b8 typename FACTOR::iterator _\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() { return asFactor().begin() +\n+_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n+179\n+_\b1_\b8_\b1 typename FACTOR::iterator _\bb_\be_\bg_\bi_\bn_\bP_\ba_\br_\be_\bn_\bt_\bs() { return asFactor().begin() +\n+_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n+182\n+_\b1_\b8_\b4 typename FACTOR::iterator _\be_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bs() { return asFactor().end(); }\n+185\n+199 template \n+200 static bool _\bC_\bh_\be_\bc_\bk_\bI_\bn_\bv_\ba_\br_\bi_\ba_\bn_\bt_\bs(const DERIVEDCONDITIONAL& conditional,\n+201 const VALUES& x);\n+202\n+204\n+205 private:\n+206\n+209\n+210 // Cast to factor type (non-const) (casts down to derived conditional type,\n+then up to factor type)\n+211 FACTOR& asFactor() { return static_cast\n+(static_cast(*this)); }\n+212\n+213 // Cast to derived type (const) (casts down to derived conditional type,\n+then up to factor type)\n+214 const FACTOR& asFactor() const { return static_cast\n+(static_cast(*this)); }\n+215\n+_\b2_\b1_\b7 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+218 template\n+219 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+220 ar & BOOST_SERIALIZATION_NVP(_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_);\n+221 }\n+222\n+224\n+225 };\n+226\n+227} // gtsam\n+_\bK_\be_\by_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd\n-An inference algorithm was called with inconsistent arguments.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn inferenceExceptions.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bC_\bh_\be_\bc_\bk_\bI_\bn_\bv_\ba_\br_\bi_\ba_\bn_\bt_\bs\n+static bool CheckInvariants(const DERIVEDCONDITIONAL &conditional, const VALUES\n+&x)\n+Check invariants of this conditional, given the values x.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_\n+size_t nrFrontals_\n+The first nrFrontal variables are frontal and the rest are parents.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bl_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n+virtual double logNormalizationConstant() const\n+All conditional types need to implement a log normalization constant to make it\n+such that error>=0.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bf_\bi_\br_\bs_\bt_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by\n+Key firstFrontalKey() const\n+Convenience function to get the first frontal key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:116\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+FACTOR::const_iterator endFrontals() const\n+Iterator pointing past the last frontal key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bs\n+FACTOR::iterator endParents()\n+Mutable iterator pointing past the last parent key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+FACTOR::iterator endFrontals()\n+Mutable iterator pointing past the last frontal key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:178\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\n+virtual double evaluate(const HybridValues &c) const\n+All conditional types need to implement an evaluate function, that yields a\n+true probability.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bp_\ba_\br_\be_\bn_\bt_\bs\n+Parents parents() const\n+return a view of the parent keys\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+double operator()(const HybridValues &x) const\n+Evaluate probability density, sugar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:142\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bP_\ba_\br_\be_\bn_\bt_\bs\n+boost::iterator_range< typename FACTOR::const_iterator > Parents\n+View of the separator keys (call parents())\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by\n+virtual double logProbability(const HybridValues &c) const\n+All conditional types need to implement a logProbability function, for which\n+exp(logProbability(x)) =...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+size_t nrFrontals() const\n+return the number of frontals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Conditional()\n+Empty Constructor to make serialization possible.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Conditional(size_t nrFrontals)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bP_\ba_\br_\be_\bn_\bt_\bs\n+FACTOR::iterator beginParents()\n+Mutable iterator pointing to the first parent key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:181\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+size_t & nrFrontals()\n+Mutable version of nrFrontals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:172\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+FACTOR::iterator beginFrontals()\n+Mutable iterator pointing to first frontal key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:175\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+boost::iterator_range< typename FACTOR::const_iterator > Frontals\n+View of the frontal keys (call frontals())\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+Frontals frontals() const\n+return a view of the frontal keys\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:124\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:217\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+FACTOR::const_iterator beginFrontals() const\n+Iterator pointing to first frontal key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n+double normalizationConstant() const\n+Non-virtual, exponentiate logNormalizationConstant.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bP_\ba_\br_\be_\bn_\bt_\bs\n+size_t nrParents() const\n+return the number of parents\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"Conditional\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print with optional formatter\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bs\n+FACTOR::const_iterator endParents() const\n+Iterator pointing past the last parent key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:169\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bP_\ba_\br_\be_\bn_\bt_\bs\n+FACTOR::const_iterator beginParents() const\n+Iterator pointing to the first parent key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:166\n+_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+the error.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+ * _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00653.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00653.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminationTree.h File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,45 @@\n \n \n \n \n \n
\n \n-
BayesTree.cpp File Reference
\n+
EliminationTree.h File Reference
\n
\n
\n \n-

Bayes Tree is a tree of cliques of a Bayes Chain. \n-More...

\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::EliminationTree< BAYESNET, GRAPH >
 An elimination tree is a data structure used intermediately during elimination. More...
 
struct  gtsam::EliminationTree< BAYESNET, GRAPH >::Node
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Bayes Tree is a tree of cliques of a Bayes Chain.

\n-
Author
Frank Dellaert
\n-
\n-Michael Kaess
\n-
\n-Viorela Ila
\n+
Author
Frank Dellaert
\n
\n Richard Roberts
\n+
Date
Oct 13, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BayesTree.cpp File Reference\n-Bayes Tree is a tree of cliques of a Bayes Chain. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+EliminationTree.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>\n+\u00a0 An elimination tree is a data structure used intermediately during\n+ elimination. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>_\b:_\b:_\bN_\bo_\bd_\be\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Bayes Tree is a tree of cliques of a Bayes Chain.\n Author\n Frank Dellaert\n- Michael Kaess\n- Viorela Ila\n Richard Roberts\n+ Date\n+ Oct 13, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00656_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00656_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph.h Source File\n \n \n \n \n \n \n \n@@ -98,338 +98,115 @@\n
No Matches
\n \n \n \n \n \n
\n-
graph-inl.h
\n+
graph.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file graph-inl.h
\n-
14 * @brief Graph algorithm using boost library
\n-
15 * @author Kai Ni
\n-
16 */
\n-
17
\n-
18#pragma once
\n-
19
\n-
20#include <stdexcept>
\n-
21#ifdef __GNUC__
\n-
22#pragma GCC diagnostic push
\n-
23#pragma GCC diagnostic ignored "-Wunused-variable"
\n-
24//#pragma GCC diagnostic ignored "-Wunneeded-internal-declaration"
\n-
25#endif
\n-
26#include <boost/graph/breadth_first_search.hpp>
\n-
27#ifdef __GNUC__
\n-
28#pragma GCC diagnostic pop
\n-
29#endif
\n-
30#include <boost/graph/prim_minimum_spanning_tree.hpp>
\n+
19#pragma once
\n+
20
\n+
21#include <map>
\n+
22
\n+
23#define BOOST_NO_HASH // to pacify the warnings about depricated headers in boost.graph
\n+
24
\n+
25#include <boost/graph/graph_traits.hpp>
\n+
26#include <boost/graph/adjacency_list.hpp>
\n+
27#include <boost/shared_ptr.hpp>
\n+\n+
29
\n+
30namespace gtsam {
\n
31
\n-\n+
32 // type definitions :
\n
33
\n-
34namespace gtsam {
\n-
35
\n-
36/* ************************************************************************* */
\n-
37template <class KEY>
\n+
37 template<class KEY>
\n
\n-
38class ordering_key_visitor : public boost::default_bfs_visitor {
\n-
39public:
\n-
40 ordering_key_visitor(std::list<KEY>& ordering_in) : ordering_(ordering_in) {}
\n-
41 template <typename Vertex, typename Graph> void discover_vertex(Vertex v, const Graph& g) const {
\n-
42 KEY key = boost::get(boost::vertex_name, g, v);
\n-
43 ordering_.push_front(key);
\n-
44 }
\n-
45 std::list<KEY>& ordering_;
\n-
46};
\n-
\n-
47
\n-
48/* ************************************************************************* */
\n-
49template<class KEY>
\n-
\n-
50std::list<KEY> predecessorMap2Keys(const PredecessorMap<KEY>& p_map) {
\n+
38 class SDGraph: public boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS,
\n+
39 boost::property<boost::vertex_name_t, KEY>, boost::property<
\n+
40 boost::edge_weight_t, double> > {
\n+
41 public:
\n+
42 typedef typename boost::graph_traits<SDGraph<KEY> >::vertex_descriptor Vertex;
\n+
43 };
\n+
\n+
44
\n+
45 template<class KEY>
\n+
\n+
46 class SGraph : public boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS,
\n+
47 boost::property<boost::vertex_name_t, KEY> > {
\n+
48 public:
\n+
49 typedef typename boost::graph_traits<SGraph<KEY> >::vertex_descriptor Vertex;
\n+
50 };
\n+
\n
51
\n-
52 typedef typename SGraph<KEY>::Vertex SVertex;
\n+
52 //typedef boost::graph_traits<SGraph>::vertex_descriptor SVertex;
\n
53
\n-\n-
55 SVertex root;
\n-
56 std::map<KEY, SVertex> key2vertex;
\n-
57 boost::tie(g, root, key2vertex) = gtsam::predecessorMap2Graph<SGraph<KEY>, SVertex, KEY>(p_map);
\n-
58
\n-
59 // breadth first visit on the graph
\n-
60 std::list<KEY> keys;
\n-\n-
62 boost::breadth_first_search(g, root, boost::visitor(vis));
\n-
63 return keys;
\n-
64}
\n+
57 template<class KEY>
\n+
\n+
58 class PredecessorMap: public std::map<KEY, KEY> {
\n+
59 public:
\n+
\n+
61 inline void insert(const KEY& key, const KEY& parent) {
\n+
62 std::map<KEY, KEY>::insert(std::make_pair(key, parent));
\n+
63 }
\n+
\n+
64 };
\n
\n
65
\n-
66/* ************************************************************************* */
\n-
67template<class G, class F, class KEY>
\n-
\n-
68SDGraph<KEY> toBoostGraph(const G& graph) {
\n-
69 // convert the factor graph to boost graph
\n-\n-
71 typedef typename boost::graph_traits<SDGraph<KEY> >::vertex_descriptor BoostVertex;
\n-
72 std::map<KEY, BoostVertex> key2vertex;
\n-
73 typename G::const_iterator itFactor;
\n-
74
\n-
75 // Loop over the factors
\n-
76 for(itFactor=graph.begin(); itFactor!=graph.end(); itFactor++) {
\n-
77
\n-
78 // Ignore factors that are not binary
\n-
79 if ((*itFactor)->keys().size() != 2)
\n-
80 continue;
\n-
81
\n-
82 // Cast the factor to the user-specified factor type F
\n-
83 boost::shared_ptr<F> factor = boost::dynamic_pointer_cast<F>(*itFactor);
\n-
84 // Ignore factors that are not of type F
\n-
85 if (!factor) continue;
\n-
86
\n-
87 // Retrieve the 2 keys (nodes) the factor (edge) is incident on
\n-
88 KEY key1 = factor->keys()[0];
\n-
89 KEY key2 = factor->keys()[1];
\n-
90
\n-
91 BoostVertex v1, v2;
\n-
92
\n-
93 // If key1 is a new key, add it to the key2vertex map, else get the corresponding vertex id
\n-
94 if (key2vertex.find(key1) == key2vertex.end()) {
\n-
95 v1 = add_vertex(key1, g);
\n-
96 key2vertex.insert(std::pair<KEY,KEY>(key1, v1));
\n-
97 } else
\n-
98 v1 = key2vertex[key1];
\n-
99
\n-
100 // If key2 is a new key, add it to the key2vertex map, else get the corresponding vertex id
\n-
101 if (key2vertex.find(key2) == key2vertex.end()) {
\n-
102 v2 = add_vertex(key2, g);
\n-
103 key2vertex.insert(std::pair<KEY,KEY>(key2, v2));
\n-
104 } else
\n-
105 v2 = key2vertex[key2];
\n-
106
\n-
107 // Add an edge with weight 1.0
\n-
108 boost::property<boost::edge_weight_t, double> edge_property(1.0); // assume constant edge weight here
\n-
109 boost::add_edge(v1, v2, edge_property, g);
\n-
110 }
\n+
69 template<class KEY>
\n+
70 std::list<KEY> predecessorMap2Keys(const PredecessorMap<KEY>& p_map);
\n+
71
\n+
78 template<class G, class F, class KEY> SDGraph<KEY> toBoostGraph(const G& graph);
\n+
79
\n+
85 template<class G, class V, class KEY>
\n+
86 boost::tuple<G, V, std::map<KEY,V> > predecessorMap2Graph(const PredecessorMap<KEY>& p_map);
\n+
87
\n+
91 template<class G, class Factor, class POSE, class KEY>
\n+
92 boost::shared_ptr<Values>
\n+
93 composePoses(const G& graph, const PredecessorMap<KEY>& tree, const POSE& rootPose);
\n+
94
\n+
95
\n+
99 template<class G, class KEY, class FACTOR2>
\n+
100 PredecessorMap<KEY> findMinimumSpanningTree(const G& g) ;
\n+
101
\n+
106 template<class G, class KEY, class FACTOR2>
\n+
107 void split(const G& g, const PredecessorMap<KEY>& tree, G& Ab1, G& Ab2) ;
\n+
108
\n+
109
\n+
110} // namespace gtsam
\n
111
\n-
112 return g;
\n-
113}
\n-
\n-
114
\n-
115/* ************************************************************************* */
\n-
116template<class G, class V, class KEY>
\n-
117boost::tuple<G, V, std::map<KEY,V> >
\n-
\n-\n-
119
\n-
120 G g;
\n-
121 std::map<KEY, V> key2vertex;
\n-
122 V v1, v2, root;
\n-
123 bool foundRoot = false;
\n-
124 for(auto child_parent: p_map) {
\n-
125 KEY child, parent;
\n-
126 std::tie(child,parent) = child_parent;
\n-
127 if (key2vertex.find(child) == key2vertex.end()) {
\n-
128 v1 = add_vertex(child, g);
\n-
129 key2vertex.insert(std::make_pair(child, v1));
\n-
130 } else
\n-
131 v1 = key2vertex[child];
\n-
132
\n-
133 if (key2vertex.find(parent) == key2vertex.end()) {
\n-
134 v2 = add_vertex(parent, g);
\n-
135 key2vertex.insert(std::make_pair(parent, v2));
\n-
136 } else
\n-
137 v2 = key2vertex[parent];
\n-
138
\n-
139 if (child==parent) {
\n-
140 root = v1;
\n-
141 foundRoot = true;
\n-
142 } else
\n-
143 boost::add_edge(v2, v1, g); // edge is from parent to child
\n-
144 }
\n-
145
\n-
146 if (!foundRoot)
\n-
147 throw std::invalid_argument("predecessorMap2Graph: invalid predecessor map!");
\n-
148 else
\n-
149 return boost::tuple<G, V, std::map<KEY, V> >(g, root, key2vertex);
\n-
150}
\n-
\n-
151
\n-
152/* ************************************************************************* */
\n-
153template <class V, class POSE, class KEY>
\n-
\n-
154class compose_key_visitor : public boost::default_bfs_visitor {
\n-
155
\n-
156private:
\n-
157 boost::shared_ptr<Values> config_;
\n-
158
\n-
159public:
\n-
160
\n-
161 compose_key_visitor(boost::shared_ptr<Values> config_in) {config_ = config_in;}
\n-
162
\n-
163 template <typename Edge, typename Graph> void tree_edge(Edge edge, const Graph& g) const {
\n-
164 KEY key_from = boost::get(boost::vertex_name, g, boost::source(edge, g));
\n-
165 KEY key_to = boost::get(boost::vertex_name, g, boost::target(edge, g));
\n-
166 POSE relativePose = boost::get(boost::edge_weight, g, edge);
\n-
167 config_->insert(key_to, config_->at<POSE>(key_from).compose(relativePose));
\n-
168 }
\n-
169
\n-
170};
\n-
\n-
171
\n-
172/* ************************************************************************* */
\n-
173template<class G, class Factor, class POSE, class KEY>
\n-
\n-
174boost::shared_ptr<Values> composePoses(const G& graph, const PredecessorMap<KEY>& tree,
\n-
175 const POSE& rootPose) {
\n-
176
\n-
177 //TODO: change edge_weight_t to edge_pose_t
\n-
178 typedef typename boost::adjacency_list<
\n-
179 boost::vecS, boost::vecS, boost::directedS,
\n-
180 boost::property<boost::vertex_name_t, KEY>,
\n-
181 boost::property<boost::edge_weight_t, POSE> > PoseGraph;
\n-
182 typedef typename boost::graph_traits<PoseGraph>::vertex_descriptor PoseVertex;
\n-
183 typedef typename boost::graph_traits<PoseGraph>::edge_descriptor PoseEdge;
\n-
184
\n-
185 PoseGraph g;
\n-
186 PoseVertex root;
\n-
187 std::map<KEY, PoseVertex> key2vertex;
\n-
188 boost::tie(g, root, key2vertex) =
\n-
189 predecessorMap2Graph<PoseGraph, PoseVertex, KEY>(tree);
\n-
190
\n-
191 // attach the relative poses to the edges
\n-
192 PoseEdge edge12, edge21;
\n-
193 bool found1, found2;
\n-
194 for(typename G::sharedFactor nl_factor: graph) {
\n-
195
\n-
196 if (nl_factor->keys().size() > 2)
\n-
197 throw std::invalid_argument("composePoses: only support factors with at most two keys");
\n-
198
\n-
199 // e.g. in pose2graph, nonlinear factor needs to be converted to pose2factor
\n-
200 boost::shared_ptr<Factor> factor = boost::dynamic_pointer_cast<Factor>(nl_factor);
\n-
201 if (!factor) continue;
\n-
202
\n-
203 KEY key1 = factor->key1();
\n-
204 KEY key2 = factor->key2();
\n-
205
\n-
206 PoseVertex v1 = key2vertex.find(key1)->second;
\n-
207 PoseVertex v2 = key2vertex.find(key2)->second;
\n-
208
\n-
209 POSE l1Xl2 = factor->measured();
\n-
210 boost::tie(edge12, found1) = boost::edge(v1, v2, g);
\n-
211 boost::tie(edge21, found2) = boost::edge(v2, v1, g);
\n-
212 if (found1 && found2) throw std::invalid_argument ("composePoses: invalid spanning tree");
\n-
213 if (!found1 && !found2) continue;
\n-
214 if (found1)
\n-
215 boost::put(boost::edge_weight, g, edge12, l1Xl2);
\n-
216 else if (found2)
\n-
217 boost::put(boost::edge_weight, g, edge21, l1Xl2.inverse());
\n-
218 }
\n-
219
\n-
220 // compose poses
\n-
221 boost::shared_ptr<Values> config(new Values);
\n-
222 KEY rootKey = boost::get(boost::vertex_name, g, root);
\n-
223 config->insert(rootKey, rootPose);
\n-\n-
225 boost::breadth_first_search(g, root, boost::visitor(vis));
\n-
226
\n-
227 return config;
\n-
228}
\n-
\n-
229
\n-
230/* ************************************************************************* */
\n-
231template<class G, class KEY, class FACTOR2>
\n-
\n-\n-
233
\n-
234 // Convert to a graph that boost understands
\n-
235 SDGraph<KEY> g = gtsam::toBoostGraph<G, FACTOR2, KEY>(fg);
\n-
236
\n-
237 // find minimum spanning tree
\n-
238 std::vector<typename SDGraph<KEY>::Vertex> p_map(boost::num_vertices(g));
\n-
239 prim_minimum_spanning_tree(g, &p_map[0]);
\n-
240
\n-
241 // convert edge to string pairs
\n-\n-
243 typename SDGraph<KEY>::vertex_iterator itVertex = boost::vertices(g).first;
\n-
244 for(const typename SDGraph<KEY>::Vertex& vi: p_map){
\n-
245 KEY key = boost::get(boost::vertex_name, g, *itVertex);
\n-
246 KEY parent = boost::get(boost::vertex_name, g, vi);
\n-
247 tree.insert(key, parent);
\n-
248 itVertex++;
\n-
249 }
\n-
250 return tree;
\n-
251}
\n-
\n-
252
\n-
253/* ************************************************************************* */
\n-
254template<class G, class KEY, class FACTOR2>
\n-
\n-
255void split(const G& g, const PredecessorMap<KEY>& tree, G& Ab1, G& Ab2) {
\n-
256
\n-
257 typedef typename G::sharedFactor F ;
\n-
258
\n-
259 for(const F& factor: g)
\n-
260 {
\n-
261 if (factor->keys().size() > 2)
\n-
262 throw(std::invalid_argument("split: only support factors with at most two keys"));
\n-
263
\n-
264 if (factor->keys().size() == 1) {
\n-
265 Ab1.push_back(factor);
\n-
266 continue;
\n-
267 }
\n-
268
\n-
269 boost::shared_ptr<FACTOR2> factor2 = boost::dynamic_pointer_cast<
\n-
270 FACTOR2>(factor);
\n-
271 if (!factor2) continue;
\n-
272
\n-
273 KEY key1 = factor2->key1();
\n-
274 KEY key2 = factor2->key2();
\n-
275 // if the tree contains the key
\n-
276 if ((tree.find(key1) != tree.end() &&
\n-
277 tree.find(key1)->second.compare(key2) == 0) ||
\n-
278 (tree.find(key2) != tree.end() &&
\n-
279 tree.find(key2)->second.compare(key1)== 0) )
\n-
280 Ab1.push_back(factor2);
\n-
281 else
\n-
282 Ab2.push_back(factor2);
\n-
283 }
\n-
284}
\n-
\n-
285
\n-
286}
\n-
Graph algorithm using boost library.
\n+
112#include <gtsam/inference/graph-inl.h>
\n+
A non-templated config holding any types of Manifold-group elements.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
std::list< KEY > predecessorMap2Keys(const PredecessorMap< KEY > &p_map)
Generate a list of keys from a spanning tree represented by its predecessor map.
Definition graph-inl.h:50
\n
void split(const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)
Split the graph into two parts: one corresponds to the given spanning tree, and the other corresponds...
Definition graph-inl.h:255
\n
boost::shared_ptr< Values > composePoses(const G &graph, const PredecessorMap< KEY > &tree, const POSE &rootPose)
Compose the poses by following the chain specified by the spanning tree.
Definition graph-inl.h:174
\n
SDGraph< KEY > toBoostGraph(const G &graph)
Convert the factor graph to an SDGraph G = Graph type F = Factor type Key = Key type.
Definition graph-inl.h:68
\n
PredecessorMap< KEY > findMinimumSpanningTree(const G &fg)
find the minimum spanning tree using boost graph library
Definition graph-inl.h:232
\n
boost::tuple< G, V, std::map< KEY, V > > predecessorMap2Graph(const PredecessorMap< KEY > &p_map)
Build takes a predecessor map, and builds a directed graph corresponding to the tree.
Definition graph-inl.h:118
\n-
Definition graph-inl.h:38
\n-
Definition graph-inl.h:154
\n
SDGraph is undirected graph with variable keys and double edge weights.
Definition graph.h:40
\n
Definition graph.h:47
\n
Map from variable key to parent key.
Definition graph.h:58
\n
void insert(const KEY &key, const KEY &parent)
convenience insert so we can pass ints for TypedSymbol keys
Definition graph.h:61
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,328 +1,100 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-graph-inl.h\n+graph.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file graph-inl.h\n-14 * @brief Graph algorithm using boost library\n-15 * @author Kai Ni\n-16 */\n-17\n-18#pragma once\n-19\n-20#include \n-21#ifdef __GNUC__\n-22#pragma GCC diagnostic push\n-23#pragma GCC diagnostic ignored \"-Wunused-variable\"\n-24//#pragma GCC diagnostic ignored \"-Wunneeded-internal-declaration\"\n-25#endif\n-26#include \n-27#ifdef __GNUC__\n-28#pragma GCC diagnostic pop\n-29#endif\n-30#include \n+19#pragma once\n+20\n+21#include \n+22\n+23#define BOOST_NO_HASH // to pacify the warnings about depricated headers in\n+boost.graph\n+24\n+25#include \n+26#include \n+27#include \n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n 31\n-32#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bg_\br_\ba_\bp_\bh_\b._\bh>\n+32 // type definitions :\n 33\n-34namespace _\bg_\bt_\bs_\ba_\bm {\n-35\n-36/* *************************************************************************\n-*/\n-37template \n-_\b3_\b8class _\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br : public boost::default_bfs_visitor {\n-39public:\n-40 _\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br(std::list& ordering_in) : ordering_(ordering_in)\n-{}\n-41 template void discover_vertex(Vertex v,\n-const Graph& g) const {\n-42 KEY key = boost::get(boost::vertex_name, g, v);\n-43 ordering_.push_front(key);\n-44 }\n-45 std::list& ordering_;\n-46};\n-47\n-48/* *************************************************************************\n-*/\n-49template\n-_\b5_\b0std::list _\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bK_\be_\by_\bs(const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b>& p_map) {\n+37 template\n+_\b3_\b8 class _\bS_\bD_\bG_\br_\ba_\bp_\bh: public boost::adjacency_list, boost::property<\n+40 boost::edge_weight_t, double> > {\n+41 public:\n+42 typedef typename boost::graph_traits >::vertex_descriptor\n+Vertex;\n+43 };\n+44\n+45 template\n+_\b4_\b6 class _\bS_\bG_\br_\ba_\bp_\bh : public boost::adjacency_list > {\n+48 public:\n+49 typedef typename boost::graph_traits >::vertex_descriptor\n+Vertex;\n+50 };\n 51\n-52 typedef typename SGraph::Vertex SVertex;\n+52 //typedef boost::graph_traits::vertex_descriptor SVertex;\n 53\n-54 _\bS_\bG_\br_\ba_\bp_\bh_\b<_\bK_\bE_\bY_\b> g;\n-55 SVertex root;\n-56 std::map key2vertex;\n-57 boost::tie(g, root, key2vertex) = gtsam::predecessorMap2Graph,\n-SVertex, KEY>(p_map);\n-58\n-59 // breadth first visit on the graph\n-60 std::list keys;\n-61 _\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br_\b<_\bK_\bE_\bY_\b> vis(keys);\n-62 boost::breadth_first_search(g, root, boost::visitor(vis));\n-63 return keys;\n-64}\n+57 template\n+_\b5_\b8 class _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp: public std::map {\n+59 public:\n+_\b6_\b1 inline void _\bi_\bn_\bs_\be_\br_\bt(const KEY& key, const KEY& parent) {\n+62 std::map::insert(std::make_pair(key, parent));\n+63 }\n+64 };\n 65\n-66/* *************************************************************************\n-*/\n-67template\n-_\b6_\b8_\bS_\bD_\bG_\br_\ba_\bp_\bh_\b<_\bK_\bE_\bY_\b> _\bt_\bo_\bB_\bo_\bo_\bs_\bt_\bG_\br_\ba_\bp_\bh(const G& graph) {\n-69 // convert the factor graph to boost graph\n-70 _\bS_\bD_\bG_\br_\ba_\bp_\bh_\b<_\bK_\bE_\bY_\b> g;\n-71 typedef typename boost::graph_traits >::vertex_descriptor\n-BoostVertex;\n-72 std::map key2vertex;\n-73 typename G::const_iterator itFactor;\n-74\n-75 // Loop over the factors\n-76 for(itFactor=graph.begin(); itFactor!=graph.end(); itFactor++) {\n-77\n-78 // Ignore factors that are not binary\n-79 if ((*itFactor)->keys().size() != 2)\n-80 continue;\n-81\n-82 // Cast the factor to the user-specified factor type F\n-83 boost::shared_ptr factor = boost::dynamic_pointer_cast(*itFactor);\n-84 // Ignore factors that are not of type F\n-85 if (!factor) continue;\n-86\n-87 // Retrieve the 2 keys (nodes) the factor (edge) is incident on\n-88 KEY key1 = factor->keys()[0];\n-89 KEY key2 = factor->keys()[1];\n-90\n-91 BoostVertex v1, v2;\n-92\n-93 // If key1 is a new key, add it to the key2vertex map, else get the\n-corresponding vertex id\n-94 if (key2vertex.find(key1) == key2vertex.end()) {\n-95 v1 = add_vertex(key1, g);\n-96 key2vertex.insert(std::pair(key1, v1));\n-97 } else\n-98 v1 = key2vertex[key1];\n-99\n-100 // If key2 is a new key, add it to the key2vertex map, else get the\n-corresponding vertex id\n-101 if (key2vertex.find(key2) == key2vertex.end()) {\n-102 v2 = add_vertex(key2, g);\n-103 key2vertex.insert(std::pair(key2, v2));\n-104 } else\n-105 v2 = key2vertex[key2];\n-106\n-107 // Add an edge with weight 1.0\n-108 boost::property edge_property(1.0); // assume\n-constant edge weight here\n-109 boost::add_edge(v1, v2, edge_property, g);\n-110 }\n+69 template\n+70 std::list _\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bK_\be_\by_\bs(const PredecessorMap& p_map);\n+71\n+78 template SDGraph _\bt_\bo_\bB_\bo_\bo_\bs_\bt_\bG_\br_\ba_\bp_\bh(const G&\n+graph);\n+79\n+85 template\n+86 boost::tuple > _\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bG_\br_\ba_\bp_\bh(const\n+PredecessorMap& p_map);\n+87\n+91 template\n+92 boost::shared_ptr\n+93 _\bc_\bo_\bm_\bp_\bo_\bs_\be_\bP_\bo_\bs_\be_\bs(const G& graph, const PredecessorMap& tree, const POSE&\n+rootPose);\n+94\n+95\n+99 template\n+100 PredecessorMap _\bf_\bi_\bn_\bd_\bM_\bi_\bn_\bi_\bm_\bu_\bm_\bS_\bp_\ba_\bn_\bn_\bi_\bn_\bg_\bT_\br_\be_\be(const G& g) ;\n+101\n+106 template\n+107 void _\bs_\bp_\bl_\bi_\bt(const G& g, const PredecessorMap& tree, G& Ab1, G& Ab2) ;\n+108\n+109\n+110} // namespace gtsam\n 111\n-112 return g;\n-113}\n-114\n-115/* *************************************************************************\n-*/\n-116template\n-117boost::tuple >\n-_\b1_\b1_\b8_\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bG_\br_\ba_\bp_\bh(const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b>& p_map) {\n-119\n-120 G g;\n-121 std::map key2vertex;\n-122 V v1, v2, root;\n-123 bool foundRoot = false;\n-124 for(auto child_parent: p_map) {\n-125 KEY child, parent;\n-126 std::tie(child,parent) = child_parent;\n-127 if (key2vertex.find(child) == key2vertex.end()) {\n-128 v1 = add_vertex(child, g);\n-129 key2vertex.insert(std::make_pair(child, v1));\n-130 } else\n-131 v1 = key2vertex[child];\n-132\n-133 if (key2vertex.find(parent) == key2vertex.end()) {\n-134 v2 = add_vertex(parent, g);\n-135 key2vertex.insert(std::make_pair(parent, v2));\n-136 } else\n-137 v2 = key2vertex[parent];\n-138\n-139 if (child==parent) {\n-140 root = v1;\n-141 foundRoot = true;\n-142 } else\n-143 boost::add_edge(v2, v1, g); // edge is from parent to child\n-144 }\n-145\n-146 if (!foundRoot)\n-147 throw std::invalid_argument(\"predecessorMap2Graph: invalid predecessor\n-map!\");\n-148 else\n-149 return boost::tuple >(g, root, key2vertex);\n-150}\n-151\n-152/* *************************************************************************\n-*/\n-153template \n-_\b1_\b5_\b4class _\bc_\bo_\bm_\bp_\bo_\bs_\be_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br : public boost::default_bfs_visitor {\n-155\n-156private:\n-157 boost::shared_ptr config_;\n-158\n-159public:\n-160\n-161 _\bc_\bo_\bm_\bp_\bo_\bs_\be_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br(boost::shared_ptr config_in) {config_ =\n-config_in;}\n-162\n-163 template void tree_edge(Edge edge, const\n-Graph& g) const {\n-164 KEY key_from = boost::get(boost::vertex_name, g, boost::source(edge, g));\n-165 KEY key_to = boost::get(boost::vertex_name, g, boost::target(edge, g));\n-166 POSE relativePose = boost::get(boost::edge_weight, g, edge);\n-167 config_->insert(key_to, config_->at(key_from).compose(relativePose));\n-168 }\n-169\n-170};\n-171\n-172/* *************************************************************************\n-*/\n-173template\n-_\b1_\b7_\b4boost::shared_ptr _\bc_\bo_\bm_\bp_\bo_\bs_\be_\bP_\bo_\bs_\be_\bs(const G& graph, const\n-_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b>& tree,\n-175 const POSE& rootPose) {\n-176\n-177 //TODO: change edge_weight_t to edge_pose_t\n-178 typedef typename boost::adjacency_list<\n-179 boost::vecS, boost::vecS, boost::directedS,\n-180 boost::property,\n-181 boost::property > PoseGraph;\n-182 typedef typename boost::graph_traits::vertex_descriptor\n-PoseVertex;\n-183 typedef typename boost::graph_traits::edge_descriptor PoseEdge;\n-184\n-185 PoseGraph g;\n-186 PoseVertex root;\n-187 std::map key2vertex;\n-188 boost::tie(g, root, key2vertex) =\n-189 predecessorMap2Graph(tree);\n-190\n-191 // attach the relative poses to the edges\n-192 PoseEdge edge12, edge21;\n-193 bool found1, found2;\n-194 for(typename G::sharedFactor nl_factor: graph) {\n-195\n-196 if (nl_factor->keys().size() > 2)\n-197 throw std::invalid_argument(\"composePoses: only support factors with at\n-most two keys\");\n-198\n-199 // e.g. in pose2graph, nonlinear factor needs to be converted to\n-pose2factor\n-200 boost::shared_ptr factor = boost::dynamic_pointer_cast\n-(nl_factor);\n-201 if (!factor) continue;\n-202\n-203 KEY key1 = factor->key1();\n-204 KEY key2 = factor->key2();\n-205\n-206 PoseVertex v1 = key2vertex.find(key1)->second;\n-207 PoseVertex v2 = key2vertex.find(key2)->second;\n-208\n-209 POSE l1Xl2 = factor->measured();\n-210 boost::tie(edge12, found1) = boost::edge(v1, v2, g);\n-211 boost::tie(edge21, found2) = boost::edge(v2, v1, g);\n-212 if (found1 && found2) throw std::invalid_argument (\"composePoses: invalid\n-spanning tree\");\n-213 if (!found1 && !found2) continue;\n-214 if (found1)\n-215 boost::put(boost::edge_weight, g, edge12, l1Xl2);\n-216 else if (found2)\n-217 boost::put(boost::edge_weight, g, edge21, l1Xl2.inverse());\n-218 }\n-219\n-220 // compose poses\n-221 boost::shared_ptr config(new _\bV_\ba_\bl_\bu_\be_\bs);\n-222 KEY rootKey = boost::get(boost::vertex_name, g, root);\n-223 config->insert(rootKey, rootPose);\n-224 _\bc_\bo_\bm_\bp_\bo_\bs_\be_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br_\b<_\bP_\bo_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\b,_\b _\bP_\bO_\bS_\bE_\b,_\b _\bK_\bE_\bY_\b> vis(config);\n-225 boost::breadth_first_search(g, root, boost::visitor(vis));\n-226\n-227 return config;\n-228}\n-229\n-230/* *************************************************************************\n-*/\n-231template\n-_\b2_\b3_\b2_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b> _\bf_\bi_\bn_\bd_\bM_\bi_\bn_\bi_\bm_\bu_\bm_\bS_\bp_\ba_\bn_\bn_\bi_\bn_\bg_\bT_\br_\be_\be(const G& fg) {\n-233\n-234 // Convert to a graph that boost understands\n-235 _\bS_\bD_\bG_\br_\ba_\bp_\bh_\b<_\bK_\bE_\bY_\b> g = gtsam::toBoostGraph(fg);\n-236\n-237 // find minimum spanning tree\n-238 std::vector::Vertex> p_map(boost::num_vertices(g));\n-239 prim_minimum_spanning_tree(g, &p_map[0]);\n-240\n-241 // convert edge to string pairs\n-242 _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b> tree;\n-243 typename _\bS_\bD_\bG_\br_\ba_\bp_\bh_\b<_\bK_\bE_\bY_\b>_\b:_\b:_\bv_\be_\br_\bt_\be_\bx_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br itVertex = boost::vertices(g).first;\n-244 for(const typename SDGraph::Vertex& vi: p_map){\n-245 KEY key = boost::get(boost::vertex_name, g, *itVertex);\n-246 KEY parent = boost::get(boost::vertex_name, g, vi);\n-247 tree._\bi_\bn_\bs_\be_\br_\bt(key, parent);\n-248 itVertex++;\n-249 }\n-250 return tree;\n-251}\n-252\n-253/* *************************************************************************\n-*/\n-254template\n-_\b2_\b5_\b5void _\bs_\bp_\bl_\bi_\bt(const G& g, const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b>& tree, G& Ab1, G& Ab2) {\n-256\n-257 typedef typename G::sharedFactor F ;\n-258\n-259 for(const F& factor: g)\n-260 {\n-261 if (factor->keys().size() > 2)\n-262 throw(std::invalid_argument(\"split: only support factors with at most two\n-keys\"));\n-263\n-264 if (factor->keys().size() == 1) {\n-265 Ab1.push_back(factor);\n-266 continue;\n-267 }\n-268\n-269 boost::shared_ptr factor2 = boost::dynamic_pointer_cast<\n-270 FACTOR2>(factor);\n-271 if (!factor2) continue;\n-272\n-273 KEY key1 = factor2->key1();\n-274 KEY key2 = factor2->key2();\n-275 // if the tree contains the key\n-276 if ((tree.find(key1) != tree.end() &&\n-277 tree.find(key1)->second.compare(key2) == 0) ||\n-278 (tree.find(key2) != tree.end() &&\n-279 tree.find(key2)->second.compare(key1)== 0) )\n-280 Ab1.push_back(factor2);\n-281 else\n-282 Ab2.push_back(factor2);\n-283 }\n-284}\n-285\n-286}\n-_\bg_\br_\ba_\bp_\bh_\b._\bh\n-Graph algorithm using boost library.\n+112#include \n+_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+A non-templated config holding any types of Manifold-group elements.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bK_\be_\by_\bs\n std::list< KEY > predecessorMap2Keys(const PredecessorMap< KEY > &p_map)\n Generate a list of keys from a spanning tree represented by its predecessor\n map.\n@@ -348,30 +120,23 @@\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:232\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bG_\br_\ba_\bp_\bh\n boost::tuple< G, V, std::map< KEY, V > > predecessorMap2Graph(const\n PredecessorMap< KEY > &p_map)\n Build takes a predecessor map, and builds a directed graph corresponding to the\n tree.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bm_\bp_\bo_\bs_\be_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:154\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bD_\bG_\br_\ba_\bp_\bh\n SDGraph is undirected graph with variable keys and double edge weights.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:40\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bG_\br_\ba_\bp_\bh\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:47\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp\n Map from variable key to parent key.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:58\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n void insert(const KEY &key, const KEY &parent)\n convenience insert so we can pass ints for TypedSymbol keys\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * g\bgr\bra\bap\bph\bh-\b-i\bin\bnl\bl.\b.h\bh\n+ * _\bg_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00659.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00659.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree-inst.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,59 @@\n \n \n \n \n \n
\n \n-
BayesTree-inst.h File Reference
\n+Classes |\n+Namespaces
\n+
FactorGraph.h File Reference
\n \n
\n \n-

Bayes Tree is a tree of cliques of a Bayes Chain. \n+

Factor Graph Base Class. \n More...

\n \n

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::CRefCallPushBack< C >
 Helper. More...
 
class  gtsam::RefCallPushBack< C >
 Helper. More...
 
class  gtsam::CRefCallAddCopy< C >
 Helper. More...
 
class  gtsam::FactorGraph< FACTOR >
 A factor graph is a bipartite graph with factor nodes connected to variable nodes. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

\n-template<class CLIQUE >
bool gtsam::check_sharedCliques (const std::pair< Key, typename BayesTree< CLIQUE >::sharedClique > &v1, const std::pair< Key, typename BayesTree< CLIQUE >::sharedClique > &v2)
 
\n

Detailed Description

\n-

Bayes Tree is a tree of cliques of a Bayes Chain.

\n-
Author
Frank Dellaert
\n+

Factor Graph Base Class.

\n+
Author
Carlos Nieto
\n
\n-Michael Kaess
\n+Christian Potthast \n
\n-Viorela Ila
\n+Michael Kaess \n
\n Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,38 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-BayesTree-inst.h File Reference\n-Bayes Tree is a tree of cliques of a Bayes Chain. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+FactorGraph.h File Reference\n+Factor Graph Base Class. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk_\b<_\b _\bC_\b _\b>\n+\u00a0 Helper. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk_\b<_\b _\bC_\b _\b>\n+\u00a0 Helper. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bA_\bd_\bd_\bC_\bo_\bp_\by_\b<_\b _\bC_\b _\b>\n+\u00a0 Helper. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bF_\bA_\bC_\bT_\bO_\bR_\b _\b>\n+\u00a0 A factor graph is a bipartite graph with factor nodes connected to\n+ variable nodes. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bch\bhe\bec\bck\bk_\b_s\bsh\bha\bar\bre\bed\bdC\bCl\bli\biq\bqu\bue\bes\bs (const std::pair< _\bK_\be_\by, typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be<\n- CLIQUE >::sharedClique > &v1, const std::pair< _\bK_\be_\by, typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be<\n- CLIQUE >::sharedClique > &v2)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Bayes Tree is a tree of cliques of a Bayes Chain.\n+Factor Graph Base Class.\n Author\n- Frank Dellaert\n+ Carlos Nieto\n+ Christian Potthast\n Michael Kaess\n- Viorela Ila\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00659_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00659_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -98,680 +98,431 @@\n
No Matches
\n \n \n \n \n \n
\n-
BayesTree-inst.h
\n+
FactorGraph.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n+
21// \\callgraph
\n
22
\n-\n-\n-\n-
26#include <gtsam/base/timing.h>
\n-
27
\n-
28#include <boost/optional.hpp>
\n-
29#include <fstream>
\n-
30
\n-
31namespace gtsam {
\n-
32
\n-
33 /* ************************************************************************* */
\n-
34 template<class CLIQUE>
\n-
\n-\n-\n-
37 for (const sharedClique& root : roots_) getCliqueData(root, &stats);
\n-
38 return stats;
\n-
39 }
\n-
\n-
40
\n-
41 /* ************************************************************************* */
\n-
42 template <class CLIQUE>
\n-
\n-\n-
44 BayesTreeCliqueData* stats) const {
\n-
45 const auto conditional = clique->conditional();
\n-
46 stats->conditionalSizes.push_back(conditional->nrFrontals());
\n-
47 stats->separatorSizes.push_back(conditional->nrParents());
\n-
48 for (sharedClique c : clique->children) {
\n-
49 getCliqueData(c, stats);
\n-
50 }
\n-
51 }
\n-
\n-
52
\n-
53 /* ************************************************************************* */
\n-
54 template<class CLIQUE>
\n-
\n-\n-
56 size_t count = 0;
\n-
57 for(const sharedClique& root: roots_)
\n-
58 count += root->numCachedSeparatorMarginals();
\n-
59 return count;
\n-
60 }
\n-
\n-
61
\n-
62 /* ************************************************************************* */
\n-
63 template <class CLIQUE>
\n-
\n-
64 void BayesTree<CLIQUE>::dot(std::ostream& os,
\n-
65 const KeyFormatter& keyFormatter) const {
\n-
66 if (roots_.empty())
\n-
67 throw std::invalid_argument(
\n-
68 "the root of Bayes tree has not been initialized!");
\n-
69 os << "digraph G{\\n";
\n-
70 for (const sharedClique& root : roots_) dot(os, root, keyFormatter);
\n-
71 os << "}";
\n-
72 std::flush(os);
\n-
73 }
\n-
\n-
74
\n-
75 /* ************************************************************************* */
\n-
76 template <class CLIQUE>
\n-
\n-
77 std::string BayesTree<CLIQUE>::dot(const KeyFormatter& keyFormatter) const {
\n-
78 std::stringstream ss;
\n-
79 dot(ss, keyFormatter);
\n-
80 return ss.str();
\n-
81 }
\n-
\n+
23#pragma once
\n+
24
\n+\n+
26#include <gtsam/inference/Key.h>
\n+\n+
28#include <gtsam/base/Testable.h>
\n+
29
\n+
30#include <Eigen/Core> // for Eigen::aligned_allocator
\n+
31
\n+
32#include <boost/assign/list_inserter.hpp>
\n+
33#include <boost/make_shared.hpp>
\n+
34#include <boost/serialization/nvp.hpp>
\n+
35#include <boost/serialization/vector.hpp>
\n+
36
\n+
37#include <string>
\n+
38#include <type_traits>
\n+
39#include <utility>
\n+
40#include <iosfwd>
\n+
41
\n+
42namespace gtsam {
\n+
44typedef FastVector<FactorIndex> FactorIndices;
\n+
45
\n+
46// Forward declarations
\n+
47template <class CLIQUE>
\n+
48class BayesTree;
\n+
49
\n+
50class HybridValues;
\n+
51
\n+
53template <class C>
\n+
\n+\n+
55 C& obj;
\n+
56
\n+
57 public:
\n+
58 explicit CRefCallPushBack(C& obj) : obj(obj) {}
\n+
59 template <typename A>
\n+
60 void operator()(const A& a) {
\n+
61 obj.push_back(a);
\n+
62 }
\n+
63};
\n+
\n+
64
\n+
66template <class C>
\n+
\n+\n+
68 C& obj;
\n+
69
\n+
70 public:
\n+
71 explicit RefCallPushBack(C& obj) : obj(obj) {}
\n+
72 template <typename A>
\n+
73 void operator()(A& a) {
\n+
74 obj.push_back(a);
\n+
75 }
\n+
76};
\n+
\n+
77
\n+
79template <class C>
\n+
\n+\n+
81 C& obj;
\n
82
\n-
83 /* ************************************************************************* */
\n-
84 template <class CLIQUE>
\n-
\n-
85 void BayesTree<CLIQUE>::saveGraph(const std::string& filename,
\n-
86 const KeyFormatter& keyFormatter) const {
\n-
87 std::ofstream of(filename.c_str());
\n-
88 dot(of, keyFormatter);
\n-
89 of.close();
\n-
90 }
\n-
\n-
91
\n-
92 /* ************************************************************************* */
\n-
93 template <class CLIQUE>
\n-
\n-
94 void BayesTree<CLIQUE>::dot(std::ostream& s, sharedClique clique,
\n-
95 const KeyFormatter& keyFormatter,
\n-
96 int parentnum) const {
\n-
97 static int num = 0;
\n-
98 bool first = true;
\n-
99 std::stringstream out;
\n-
100 out << num;
\n-
101 std::string parent = out.str();
\n-
102 parent += "[label=\\"";
\n-
103
\n-
104 for (Key key : clique->conditional_->frontals()) {
\n-
105 if (!first) parent += ", ";
\n-
106 first = false;
\n-
107 parent += keyFormatter(key);
\n-
108 }
\n-
109
\n-
110 if (clique->parent()) {
\n-
111 parent += " : ";
\n-
\n-
112 s << parentnum << "->" << num << "\\n";
\n-
113 }
\n-
114
\n-
115 first = true;
\n-
116 for (Key parentKey : clique->conditional_->parents()) {
\n-
\n-
117 if (!first) parent += ", ";
\n-
118 first = false;
\n-
119 parent += keyFormatter(parentKey);
\n-
120 }
\n-
121 parent += "\\"];\\n";
\n-
122 s << parent;
\n-
\n-
123 parentnum = num;
\n-
124
\n-
125 for (sharedClique c : clique->children) {
\n-
126 num++;
\n-
\n-
127 dot(s, c, keyFormatter, parentnum);
\n-
128 }
\n-
129 }
\n-
130
\n-
131 /* ************************************************************************* */
\n-
132 template<class CLIQUE>
\n-
\n-
133 size_t BayesTree<CLIQUE>::size() const {
\n-
134 size_t size = 0;
\n-
\n-
135 for(const sharedClique& clique: roots_)
\n-
136 size += clique->treeSize();
\n-
137 return size;
\n-
138 }
\n-
\n-
\n-
139
\n-
140 /* ************************************************************************* */
\n-
141 template<class CLIQUE>
\n-
\n-
142 void BayesTree<CLIQUE>::addClique(const sharedClique& clique, const sharedClique& parent_clique) {
\n-
143 for(Key j: clique->conditional()->frontals())
\n-
144 nodes_[j] = clique;
\n-
145 if (parent_clique != nullptr) {
\n-
146 clique->parent_ = parent_clique;
\n-
147 parent_clique->children.push_back(clique);
\n-
148 } else {
\n-
149 roots_.push_back(clique);
\n-
150 }
\n-
151 }
\n-
\n-
152
\n-
153 /* ************************************************************************* */
\n-
154 namespace {
\n-
155 template <class FACTOR, class CLIQUE>
\n-
156 struct _pushCliqueFunctor {
\n-
157 _pushCliqueFunctor(FactorGraph<FACTOR>* graph_) : graph(graph_) {}
\n-
158 FactorGraph<FACTOR>* graph;
\n-
159 int operator()(const boost::shared_ptr<CLIQUE>& clique, int dummy) {
\n-
160 graph->push_back(clique->conditional_);
\n-
\n-
161 return 0;
\n-
162 }
\n-
163 };
\n-
\n-
164 } // namespace
\n+
83 public:
\n+
84 explicit CRefCallAddCopy(C& obj) : obj(obj) {}
\n+
85 template <typename A>
\n+
86 void operator()(const A& a) {
\n+
87 obj.addCopy(a);
\n+
88 }
\n+
89};
\n+
\n+
90
\n+
96template <class FACTOR>
\n+
\n+\n+
98 public:
\n+
99 typedef FACTOR FactorType;
\n+
100 typedef boost::shared_ptr<FACTOR>
\n+\n+
102 typedef sharedFactor value_type;
\n+
103 typedef typename FastVector<sharedFactor>::iterator iterator;
\n+
104 typedef typename FastVector<sharedFactor>::const_iterator const_iterator;
\n+
105
\n+
106 private:
\n+
107 typedef FactorGraph<FACTOR> This;
\n+
108 typedef boost::shared_ptr<This>
\n+
109 shared_ptr;
\n+
110
\n+
112 template <typename DERIVEDFACTOR>
\n+
113 using IsDerived = typename std::enable_if<
\n+
114 std::is_base_of<FactorType, DERIVEDFACTOR>::value>::type;
\n+
115
\n+
117 template <typename T>
\n+
118 using HasDerivedValueType = typename std::enable_if<
\n+
119 std::is_base_of<FactorType, typename T::value_type>::value>::type;
\n+
120
\n+
122 template <typename T>
\n+
123 using HasDerivedElementType = typename std::enable_if<std::is_base_of<
\n+
124 FactorType, typename T::value_type::element_type>::value>::type;
\n+
125
\n+
126 protected:
\n+
128 GTSAM_CONCEPT_TESTABLE_TYPE(FACTOR)
\n+
129
\n+
130
\n+\n+
132
\n+
\n+
134 bool isEqual(const FactorGraph& other) const {
\n+
135 return factors_ == other.factors_;
\n+
136 }
\n+
\n+
137
\n+
140
\n+\n+
143
\n+
145 template <typename ITERATOR>
\n+
\n+
146 FactorGraph(ITERATOR firstFactor, ITERATOR lastFactor) {
\n+
147 push_back(firstFactor, lastFactor);
\n+
148 }
\n+
\n+
149
\n+
151 template <class CONTAINER>
\n+
\n+
152 explicit FactorGraph(const CONTAINER& factors) {
\n+
153 push_back(factors);
\n+
154 }
\n+
\n+
155
\n+
157
\n+
158 public:
\n+
161
\n+
164 virtual ~FactorGraph() = default;
\n
165
\n-
166 /* ************************************************************************* */
\n-
167 template <class CLIQUE>
\n-
\n-\n-
169 FactorGraph<FactorType>* graph) const {
\n-
170 // Traverse the BayesTree and add all conditionals to this graph
\n+
170 template <class DERIVEDFACTOR, typename = IsDerived<DERIVEDFACTOR>>
\n
\n-
171 int data = 0; // Unused
\n-
172 _pushCliqueFunctor<FactorType, CLIQUE> functor(graph);
\n-
173 treeTraversal::DepthFirstForest(*this, data, functor);
\n-
174 }
\n-
175
\n-
176 /* ************************************************************************* */
\n-
\n-
177 template<class CLIQUE>
\n-
\n-\n-
179 *this = other;
\n-
180 }
\n-
\n-
181
\n-
182 /* ************************************************************************* */
\n-
\n-
183 namespace {
\n-
184 template<typename NODE>
\n-
185 boost::shared_ptr<NODE>
\n-
186 BayesTreeCloneForestVisitorPre(const boost::shared_ptr<NODE>& node, const boost::shared_ptr<NODE>& parentPointer)
\n-
187 {
\n-
188 // Clone the current node and add it to its cloned parent
\n-
\n-
189 boost::shared_ptr<NODE> clone = boost::make_shared<NODE>(*node);
\n-
190 clone->children.clear();
\n-
191 clone->parent_ = parentPointer;
\n+
171 FactorGraph(std::initializer_list<boost::shared_ptr<DERIVEDFACTOR>> sharedFactors)
\n+
172 : factors_(sharedFactors) {}
\n+
\n+
173
\n+
177
\n+
182 void reserve(size_t size) { factors_.reserve(size); }
\n+
183
\n+
185 template <class DERIVEDFACTOR>
\n+
\n+
186 IsDerived<DERIVEDFACTOR> push_back(boost::shared_ptr<DERIVEDFACTOR> factor) {
\n+
187 factors_.push_back(boost::shared_ptr<FACTOR>(factor));
\n+
188 }
\n+
\n+
189
\n+
191 template <class DERIVEDFACTOR, class... Args>
\n
\n-
192 parentPointer->children.push_back(clone);
\n-
193 return clone;
\n-
194 }
\n-
195 }
\n-
\n-\n-
197 /* ************************************************************************* */
\n-
198 template<class CLIQUE>
\n-
\n-\n-
200 this->clear();
\n-
201 boost::shared_ptr<Clique> rootContainer = boost::make_shared<Clique>();
\n-
202 treeTraversal::DepthFirstForest(other, rootContainer, BayesTreeCloneForestVisitorPre<Clique>);
\n-
203 for(const sharedClique& root: rootContainer->children) {
\n-
204 root->parent_ = typename Clique::weak_ptr(); // Reset the parent since it's set to the dummy clique
\n-
205 insertRoot(root);
\n-
206 }
\n-
207 return *this;
\n-\n-
\n-
209
\n-
210 /* ************************************************************************* */
\n-
\n-
211 template<class CLIQUE>
\n-
\n-
212 void BayesTree<CLIQUE>::print(const std::string& s, const KeyFormatter& keyFormatter) const {
\n-
213 std::cout << s << ": cliques: " << size() << ", variables: " << nodes_.size() << std::endl;
\n-
\n-
214 treeTraversal::PrintForest(*this, s, keyFormatter);
\n-
215 }
\n-
216
\n-
217 /* ************************************************************************* */
\n-
218 // binary predicate to test equality of a pair for use in equals
\n-
219 template<class CLIQUE>
\n-
\n-
220 bool check_sharedCliques(
\n-
221 const std::pair<Key, typename BayesTree<CLIQUE>::sharedClique>& v1,
\n-
222 const std::pair<Key, typename BayesTree<CLIQUE>::sharedClique>& v2
\n-
223 ) {
\n-
224 return v1.first == v2.first &&
\n-
225 ((!v1.second && !v2.second) || (v1.second && v2.second && v1.second->equals(*v2.second)));
\n-
\n-\n+
192 IsDerived<DERIVEDFACTOR> emplace_shared(Args&&... args) {
\n+
193 factors_.push_back(boost::allocate_shared<DERIVEDFACTOR>(
\n+
194 Eigen::aligned_allocator<DERIVEDFACTOR>(),
\n+
195 std::forward<Args>(args)...));
\n+
196 }
\n+
\n+
197
\n+
202 template <class DERIVEDFACTOR>
\n+
\n+
203 IsDerived<DERIVEDFACTOR> push_back(const DERIVEDFACTOR& factor) {
\n+
204 factors_.push_back(boost::allocate_shared<DERIVEDFACTOR>(
\n+
205 Eigen::aligned_allocator<DERIVEDFACTOR>(), factor));
\n+
206 }
\n+
\n+
207
\n+
209 template <class DERIVEDFACTOR>
\n+
\n+
210 IsDerived<DERIVEDFACTOR> add(boost::shared_ptr<DERIVEDFACTOR> factor) {
\n+
211 push_back(factor);
\n+
212 }
\n+
\n+
213
\n+
215 template <class DERIVEDFACTOR>
\n+
216 typename std::enable_if<
\n+
217 std::is_base_of<FactorType, DERIVEDFACTOR>::value,
\n+
218 boost::assign::list_inserter<RefCallPushBack<This>>>::type
\n+
\n+
219 operator+=(boost::shared_ptr<DERIVEDFACTOR> factor) {
\n+
220 return boost::assign::make_list_inserter(RefCallPushBack<This>(*this))(
\n+
221 factor);
\n+
222 }
\n+
\n+
223
\n
227
\n-
228 /* ************************************************************************* */
\n-
229 template<class CLIQUE>
\n-
\n-
230 bool BayesTree<CLIQUE>::equals(const BayesTree<CLIQUE>& other, double tol) const {
\n-
231 return size()==other.size() &&
\n-
232 std::equal(nodes_.begin(), nodes_.end(), other.nodes_.begin(), &check_sharedCliques<CLIQUE>);
\n-
233 }
\n-
\n-
234
\n-
\n-
235 /* ************************************************************************* */
\n-
236 template<class CLIQUE>
\n-
237 template<class CONTAINER>
\n-
\n-
238 Key BayesTree<CLIQUE>::findParentClique(const CONTAINER& parents) const {
\n-
239 typename CONTAINER::const_iterator lowestOrderedParent = min_element(parents.begin(), parents.end());
\n-
240 assert(lowestOrderedParent != parents.end());
\n-
\n-
241 return *lowestOrderedParent;
\n-
242 }
\n-
243
\n-
244 /* ************************************************************************* */
\n-
245 template<class CLIQUE>
\n-
\n-\n-
247 // Add each frontal variable of this root node
\n-
248 for(const Key& j: subtree->conditional()->frontals()) {
\n-
249 bool inserted = nodes_.insert(std::make_pair(j, subtree)).second;
\n-
\n-
250 assert(inserted); (void)inserted;
\n-
251 }
\n-
252 // Fill index for each child
\n-
\n-\n-
254 for(const sharedClique& child: subtree->children) {
\n-
255 fillNodesIndex(child); }
\n-\n+
232 template <typename ITERATOR>
\n+
\n+
233 HasDerivedElementType<ITERATOR> push_back(ITERATOR firstFactor,
\n+
234 ITERATOR lastFactor) {
\n+
235 factors_.insert(end(), firstFactor, lastFactor);
\n+
236 }
\n+
\n+
237
\n+
239 template <typename ITERATOR>
\n+
\n+
240 HasDerivedValueType<ITERATOR> push_back(ITERATOR firstFactor,
\n+
241 ITERATOR lastFactor) {
\n+
242 for (ITERATOR f = firstFactor; f != lastFactor; ++f) push_back(*f);
\n+
243 }
\n+
\n+
244
\n+
248
\n+
253 template <typename CONTAINER>
\n+
\n+
254 HasDerivedElementType<CONTAINER> push_back(const CONTAINER& container) {
\n+
255 push_back(container.begin(), container.end());
\n+
256 }
\n+
\n
257
\n-
258 /* ************************************************************************* */
\n-
259 template<class CLIQUE>
\n+
259 template <typename CONTAINER>
\n
\n-\n-
261 roots_.push_back(subtree); // Add to roots
\n-
262 fillNodesIndex(subtree); // Populate nodes index
\n-
263 }
\n-
\n-
264
\n-
265 /* ************************************************************************* */
\n-
266 // First finds clique marginal then marginalizes that
\n-
267 /* ************************************************************************* */
\n-
268 template<class CLIQUE>
\n-
269 typename BayesTree<CLIQUE>::sharedConditional
\n-
\n-
270 BayesTree<CLIQUE>::marginalFactor(Key j, const Eliminate& function) const
\n-
271 {
\n-
272 gttic(BayesTree_marginalFactor);
\n-
273
\n-
274 // get clique containing Key j
\n-
275 sharedClique clique = this->clique(j);
\n-
276
\n-
277 // calculate or retrieve its marginal P(C) = P(F,S)
\n-
278 FactorGraphType cliqueMarginal = clique->marginal2(function);
\n-
279
\n-
280 // Now, marginalize out everything that is not variable j
\n-
281 BayesNetType marginalBN =
\n-
282 *cliqueMarginal.marginalMultifrontalBayesNet(Ordering{j}, function);
\n-
283
\n-
284 // The Bayes net should contain only one conditional for variable j, so return it
\n-
285 return marginalBN.front();
\n-
286 }
\n+
260 HasDerivedValueType<CONTAINER> push_back(const CONTAINER& container) {
\n+
261 push_back(container.begin(), container.end());
\n+
262 }
\n+
\n+
263
\n+
268 template <class FACTOR_OR_CONTAINER>
\n+
\n+
269 void add(const FACTOR_OR_CONTAINER& factorOrContainer) {
\n+
270 push_back(factorOrContainer);
\n+
271 }
\n+
\n+
272
\n+
277 template <class FACTOR_OR_CONTAINER>
\n+
\n+
278 boost::assign::list_inserter<CRefCallPushBack<This>> operator+=(
\n+
279 const FACTOR_OR_CONTAINER& factorOrContainer) {
\n+
280 return boost::assign::make_list_inserter(CRefCallPushBack<This>(*this))(
\n+
281 factorOrContainer);
\n+
282 }
\n
\n+
283
\n
287
\n-
288 /* ************************************************************************* */
\n-
289 // Find two cliques, their joint, then marginalizes
\n-
290 /* ************************************************************************* */
\n-
291 template<class CLIQUE>
\n-
292 typename BayesTree<CLIQUE>::sharedFactorGraph
\n-
\n-
293 BayesTree<CLIQUE>::joint(Key j1, Key j2, const Eliminate& function) const
\n-
294 {
\n-
295 gttic(BayesTree_joint);
\n-
296 return boost::make_shared<FactorGraphType>(*jointBayesNet(j1, j2, function));
\n-
297 }
\n-
\n-
298
\n-
299 /* ************************************************************************* */
\n-
300 template<class CLIQUE>
\n-
301 typename BayesTree<CLIQUE>::sharedBayesNet
\n-
\n-
302 BayesTree<CLIQUE>::jointBayesNet(Key j1, Key j2, const Eliminate& function) const
\n-
303 {
\n-
304 gttic(BayesTree_jointBayesNet);
\n-
305 // get clique C1 and C2
\n-
306 sharedClique C1 = (*this)[j1], C2 = (*this)[j2];
\n+
293 template <class CLIQUE>
\n+
294 typename std::enable_if<
\n+
295 std::is_base_of<This, typename CLIQUE::FactorGraphType>::value>::type
\n+
\n+
296 push_back(const BayesTree<CLIQUE>& bayesTree) {
\n+
297 bayesTree.addFactorsToGraph(this);
\n+
298 }
\n+
\n+
299
\n+
304 template <typename CONTAINER, typename = HasDerivedElementType<CONTAINER>>
\n+
305 FactorIndices add_factors(const CONTAINER& factors,
\n+
306 bool useEmptySlots = false);
\n
307
\n-
308 gttic(Lowest_common_ancestor);
\n-
309 // Find lowest common ancestor clique
\n-
310 sharedClique B; {
\n-
311 // Build two paths to the root
\n-
312 FastList<sharedClique> path1, path2; {
\n-
313 sharedClique p = C1;
\n-
314 while(p) {
\n-
315 path1.push_front(p);
\n-
316 p = p->parent();
\n-
317 }
\n-
318 } {
\n-
319 sharedClique p = C2;
\n-
320 while(p) {
\n-
321 path2.push_front(p);
\n-
322 p = p->parent();
\n-
323 }
\n-
324 }
\n-
325 // Find the path intersection
\n-
326 typename FastList<sharedClique>::const_iterator p1 = path1.begin(), p2 = path2.begin();
\n-
327 if(*p1 == *p2)
\n-
328 B = *p1;
\n-
329 while(p1 != path1.end() && p2 != path2.end() && *p1 == *p2) {
\n-
330 B = *p1;
\n-
331 ++p1;
\n-
332 ++p2;
\n-
333 }
\n-
334 }
\n-
335 gttoc(Lowest_common_ancestor);
\n+
311
\n+
313 virtual void print(const std::string& s = "FactorGraph",
\n+
314 const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n+
315
\n+
317 bool equals(const This& fg, double tol = 1e-9) const;
\n+
319
\n+
320 public:
\n+
323
\n+
326 size_t size() const { return factors_.size(); }
\n+
327
\n+
330 bool empty() const { return factors_.empty(); }
\n+
331
\n+
335 const sharedFactor at(size_t i) const { return factors_.at(i); }
\n
336
\n-
337 // Build joint on all involved variables
\n-
338 FactorGraphType p_BC1C2;
\n-
339
\n-
340 if(B)
\n-
341 {
\n-
342 // Compute marginal on lowest common ancestor clique
\n-
343 gttic(LCA_marginal);
\n-
344 FactorGraphType p_B = B->marginal2(function);
\n-
345 gttoc(LCA_marginal);
\n+
340 sharedFactor& at(size_t i) { return factors_.at(i); }
\n+
341
\n+
345 const sharedFactor operator[](size_t i) const { return at(i); }
\n
346
\n-
347 // Compute shortcuts of the requested cliques given the lowest common ancestor
\n-
348 gttic(Clique_shortcuts);
\n-
349 BayesNetType p_C1_Bred = C1->shortcut(B, function);
\n-
350 BayesNetType p_C2_Bred = C2->shortcut(B, function);
\n-
351 gttoc(Clique_shortcuts);
\n-
352
\n-
353 // Factor the shortcuts to be conditioned on the full root
\n-
354 // Get the set of variables to eliminate, which is C1\\B.
\n-
355 gttic(Full_root_factoring);
\n-
356 boost::shared_ptr<typename EliminationTraitsType::BayesTreeType> p_C1_B; {
\n-
357 KeyVector C1_minus_B; {
\n-
358 KeySet C1_minus_B_set(C1->conditional()->beginParents(), C1->conditional()->endParents());
\n-
359 for(const Key j: *B->conditional()) {
\n-
360 C1_minus_B_set.erase(j); }
\n-
361 C1_minus_B.assign(C1_minus_B_set.begin(), C1_minus_B_set.end());
\n-
362 }
\n-
363 // Factor into C1\\B | B.
\n-
364 sharedFactorGraph temp_remaining;
\n-
365 boost::tie(p_C1_B, temp_remaining) =
\n-
366 FactorGraphType(p_C1_Bred).eliminatePartialMultifrontal(Ordering(C1_minus_B), function);
\n-
367 }
\n-
368 boost::shared_ptr<typename EliminationTraitsType::BayesTreeType> p_C2_B; {
\n-
369 KeyVector C2_minus_B; {
\n-
370 KeySet C2_minus_B_set(C2->conditional()->beginParents(), C2->conditional()->endParents());
\n-
371 for(const Key j: *B->conditional()) {
\n-
372 C2_minus_B_set.erase(j); }
\n-
373 C2_minus_B.assign(C2_minus_B_set.begin(), C2_minus_B_set.end());
\n-
374 }
\n-
375 // Factor into C2\\B | B.
\n-
376 sharedFactorGraph temp_remaining;
\n-
377 boost::tie(p_C2_B, temp_remaining) =
\n-
378 FactorGraphType(p_C2_Bred).eliminatePartialMultifrontal(Ordering(C2_minus_B), function);
\n-
379 }
\n-
380 gttoc(Full_root_factoring);
\n-
381
\n-
382 gttic(Variable_joint);
\n-
383 p_BC1C2 += p_B;
\n-
384 p_BC1C2 += *p_C1_B;
\n-
385 p_BC1C2 += *p_C2_B;
\n-
386 if(C1 != B)
\n-
387 p_BC1C2 += C1->conditional();
\n-
388 if(C2 != B)
\n-
389 p_BC1C2 += C2->conditional();
\n-
390 gttoc(Variable_joint);
\n-
391 }
\n-
392 else
\n-
393 {
\n-
394 // The nodes have no common ancestor, they're in different trees, so they're joint is just the
\n-
395 // product of their marginals.
\n-
396 gttic(Disjoint_marginals);
\n-
397 p_BC1C2 += C1->marginal2(function);
\n-
398 p_BC1C2 += C2->marginal2(function);
\n-
399 gttoc(Disjoint_marginals);
\n-
400 }
\n-
401
\n-
402 // now, marginalize out everything that is not variable j1 or j2
\n-
403 return p_BC1C2.marginalMultifrontalBayesNet(Ordering{j1, j2}, function);
\n-
404 }
\n-
\n-
405
\n-
406 /* ************************************************************************* */
\n-
407 template<class CLIQUE>
\n-
\n-\n-
409 // Remove all nodes and clear the root pointer
\n-
410 nodes_.clear();
\n-
411 roots_.clear();
\n-
412 }
\n-
\n-
413
\n-
414 /* ************************************************************************* */
\n-
415 template<class CLIQUE>
\n-
\n-\n-
417 for(const sharedClique& root: roots_) {
\n-
418 root->deleteCachedShortcuts();
\n-
419 }
\n-
420 }
\n-
\n-
421
\n-
422 /* ************************************************************************* */
\n-
423 template<class CLIQUE>
\n-
\n-\n-
425 {
\n-
426 if (clique->isRoot()) {
\n-
427 typename Roots::iterator root = std::find(roots_.begin(), roots_.end(), clique);
\n-
428 if(root != roots_.end())
\n-
429 roots_.erase(root);
\n-
430 } else { // detach clique from parent
\n-
431 sharedClique parent = clique->parent_.lock();
\n-
432 typename Roots::iterator child = std::find(parent->children.begin(), parent->children.end(), clique);
\n-
433 assert(child != parent->children.end());
\n-
434 parent->children.erase(child);
\n-
435 }
\n-
436
\n-
437 // orphan my children
\n-
438 for(sharedClique child: clique->children)
\n-
439 child->parent_ = typename Clique::weak_ptr();
\n-
440
\n-
441 for(Key j: clique->conditional()->frontals()) {
\n-
442 nodes_.unsafe_erase(j);
\n-
443 }
\n-
444 }
\n-
\n-
\n-
445
\n-
446 /* ************************************************************************* */
\n-
447 template <class CLIQUE>
\n-
\n-
448 void BayesTree<CLIQUE>::removePath(sharedClique clique, BayesNetType* bn,
\n-
449 Cliques* orphans) {
\n-
450 // base case is nullptr, if so we do nothing and return empties above
\n-
451 if (clique) {
\n-
452 // remove the clique from orphans in case it has been added earlier
\n-
453 orphans->remove(clique);
\n-
454
\n-
455 // remove me
\n-
456 this->removeClique(clique);
\n-
457
\n-
458 // remove path above me
\n-
459 this->removePath(typename Clique::shared_ptr(clique->parent_.lock()), bn,
\n-
460 orphans);
\n-
461
\n-
462 // add children to list of orphans (splice also removed them from
\n-
463 // clique->children_)
\n-
464 orphans->insert(orphans->begin(), clique->children.begin(),
\n-
465 clique->children.end());
\n-
466 clique->children.clear();
\n-
467
\n-
468 bn->push_back(clique->conditional_);
\n-
469 }
\n-
470 }
\n-
\n-
471
\n-
472 /* *************************************************************************
\n-
473 */
\n-
474 template <class CLIQUE>
\n-
\n-
475 void BayesTree<CLIQUE>::removeTop(const KeyVector& keys, BayesNetType* bn,
\n-
476 Cliques* orphans) {
\n-
477 gttic(removetop);
\n-
478 // process each key of the new factor
\n-
479 for (const Key& j : keys) {
\n-
480 // get the clique
\n-
481 // TODO(frank): Nodes will be searched again in removeClique
\n-
482 typename Nodes::const_iterator node = nodes_.find(j);
\n-
483 if (node != nodes_.end()) {
\n-
484 // remove path from clique to root
\n-
485 this->removePath(node->second, bn, orphans);
\n-
486 }
\n-
487 }
\n-
488
\n-
489 // Delete cachedShortcuts for each orphan subtree
\n-
490 // TODO(frank): Consider Improving
\n-
491 for (sharedClique& orphan : *orphans) orphan->deleteCachedShortcuts();
\n-
492 }
\n-
\n-
493
\n-
494 /* ************************************************************************* */
\n-
495 template<class CLIQUE>
\n-
\n-\n-
497 const sharedClique& subtree)
\n-
498 {
\n-
499 // Result clique list
\n-
500 Cliques cliques;
\n-
501 cliques.push_back(subtree);
\n-
502
\n-
503 // Remove the first clique from its parents
\n-
504 if(!subtree->isRoot())
\n-
505 subtree->parent()->children.erase(std::find(
\n-
506 subtree->parent()->children.begin(), subtree->parent()->children.end(), subtree));
\n-
507 else
\n-
508 roots_.erase(std::find(roots_.begin(), roots_.end(), subtree));
\n-
509
\n-
510 // Add all subtree cliques and erase the children and parent of each
\n-
511 for(typename Cliques::iterator clique = cliques.begin(); clique != cliques.end(); ++clique)
\n-
512 {
\n-
513 // Add children
\n-
514 for(const sharedClique& child: (*clique)->children) {
\n-
515 cliques.push_back(child); }
\n-
516
\n-
517 // Delete cached shortcuts
\n-
518 (*clique)->deleteCachedShortcutsNonRecursive();
\n-
519
\n-
520 // Remove this node from the nodes index
\n-
521 for(Key j: (*clique)->conditional()->frontals()) {
\n-
522 nodes_.unsafe_erase(j); }
\n-
523
\n-
524 // Erase the parent and children pointers
\n-
525 (*clique)->parent_.reset();
\n-
526 (*clique)->children.clear();
\n-
527 }
\n-
528
\n-
529 return cliques;
\n-
530 }
\n-
\n-
531
\n-
532}
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n+
350 sharedFactor& operator[](size_t i) { return at(i); }
\n+
351
\n+
353 const_iterator begin() const { return factors_.begin(); }
\n+
354
\n+
356 const_iterator end() const { return factors_.end(); }
\n+
357
\n+
359 sharedFactor front() const { return factors_.front(); }
\n+
360
\n+
362 sharedFactor back() const { return factors_.back(); }
\n+
363
\n+
365 double error(const HybridValues &values) const;
\n+
366
\n+
370
\n+
372 iterator begin() { return factors_.begin(); }
\n+
373
\n+
375 iterator end() { return factors_.end(); }
\n+
376
\n+
381 virtual void resize(size_t size) { factors_.resize(size); }
\n+
382
\n+
385 void remove(size_t i) { factors_.at(i).reset(); }
\n+
386
\n+
388 void replace(size_t index, sharedFactor factor) { at(index) = factor; }
\n+
389
\n+
391 iterator erase(iterator item) { return factors_.erase(item); }
\n+
392
\n+
\n+
394 iterator erase(iterator first, iterator last) {
\n+
395 return factors_.erase(first, last);
\n+
396 }
\n
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
\n-
Timing utilities.
\n-\n-
Variable ordering for the elimination algorithm.
\n-
Bayes Tree is a tree of cliques of a Bayes Chain.
\n+
397
\n+
401
\n+
403 void dot(std::ostream& os,
\n+
404 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
405 const DotWriter& writer = DotWriter()) const;
\n+
406
\n+
408 std::string dot(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
409 const DotWriter& writer = DotWriter()) const;
\n+
410
\n+
412 void saveGraph(const std::string& filename,
\n+
413 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
414 const DotWriter& writer = DotWriter()) const;
\n+
415
\n+
419
\n+
421 size_t nrFactors() const;
\n+
422
\n+
425 KeySet keys() const;
\n+
426
\n+
430 KeyVector keyVector() const;
\n+
431
\n+
434 inline bool exists(size_t idx) const { return idx < size() && at(idx); }
\n+
435
\n+
436 private:
\n+\n+
439 template <class ARCHIVE>
\n+
440 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
441 ar& BOOST_SERIALIZATION_NVP(factors_);
\n+
442 }
\n+
443
\n+
445}; // FactorGraph
\n+
\n+
446} // namespace gtsam
\n+
447
\n+\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
Concept check for values that can be used in unit tests.
\n+
Factor Graph Base Class.
\n+
Graphviz formatter.
\n+\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:77
\n-
void PrintForest(const FOREST &forest, std::string str, const KeyFormatter &keyFormatter)
Print a tree, prefixing each line with str, and formatting keys using keyFormatter.
Definition treeTraversal-inst.h:219
\n-
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n \n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
store all the sizes
Definition BayesTree.h:48
\n+
virtual void print(const std::string &s="FactorGraph", const KeyFormatter &formatter=DefaultKeyFormatter) const
Print out graph to std::cout, with optional key formatter.
Definition FactorGraph-inst.h:37
\n+
bool isEqual(const FactorGraph &other) const
Check exact equality of the factor pointers. Useful for derived ==.
Definition FactorGraph.h:134
\n+
KeySet keys() const
Potentially slow function to return all keys involved, sorted, as a set.
Definition FactorGraph-inst.h:85
\n+
bool empty() const
Check if the graph is empty (null factors set by remove() will cause this to return false).
Definition FactorGraph.h:330
\n+
FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)
Add new factors to a factor graph and returns a list of new factor indices, optionally finding and re...
Definition FactorGraph-inst.h:109
\n+
IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition FactorGraph.h:186
\n+
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
Output to graphviz format, stream version.
Definition FactorGraph-inst.h:141
\n+
iterator erase(iterator item)
Erase factor and rearrange other factors to take up the empty space.
Definition FactorGraph.h:391
\n+
void add(const FACTOR_OR_CONTAINER &factorOrContainer)
Add a factor or container of factors, including STL collections, BayesTrees, etc.
Definition FactorGraph.h:269
\n+
iterator erase(iterator first, iterator last)
Erase factors and rearrange other factors to take up the empty space.
Definition FactorGraph.h:394
\n+
sharedFactor back() const
Get the last factor.
Definition FactorGraph.h:362
\n+
FactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects)
Definition FactorGraph.h:152
\n+
void remove(size_t i)
delete factor without re-arranging indexes by inserting a nullptr pointer
Definition FactorGraph.h:385
\n+
KeyVector keyVector() const
Potentially slow function to return all keys involved, sorted, as a vector.
Definition FactorGraph-inst.h:95
\n+
HasDerivedValueType< CONTAINER > push_back(const CONTAINER &container)
Push back non-pointer objects in a container (factors are copied).
Definition FactorGraph.h:260
\n+
FactorGraph()
Default constructor.
Definition FactorGraph.h:142
\n+
IsDerived< DERIVEDFACTOR > emplace_shared(Args &&... args)
Emplace a shared pointer to factor of given type.
Definition FactorGraph.h:192
\n+
sharedFactor & operator[](size_t i)
Get a specific factor by index (this does not check array bounds, as opposed to at() which does).
Definition FactorGraph.h:350
\n+
sharedFactor & at(size_t i)
Get a specific factor by index (this checks array bounds and may throw an exception,...
Definition FactorGraph.h:340
\n+
std::enable_if< std::is_base_of< This, typenameCLIQUE::FactorGraphType >::value >::type push_back(const BayesTree< CLIQUE > &bayesTree)
Push back a BayesTree as a collection of factors.
Definition FactorGraph.h:296
\n+
double error(const HybridValues &values) const
Add error for all factors.
Definition FactorGraph-inst.h:66
\n+
FactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Constructor from iterator over factors (shared_ptr or plain objects)
Definition FactorGraph.h:146
\n+
virtual void resize(size_t size)
Directly resize the number of factors in the graph.
Definition FactorGraph.h:381
\n+
size_t nrFactors() const
return the number of non-null factors
Definition FactorGraph-inst.h:76
\n+
size_t size() const
return the number of factors (including any null factors set by remove() ).
Definition FactorGraph.h:326
\n+
HasDerivedValueType< ITERATOR > push_back(ITERATOR firstFactor, ITERATOR lastFactor)
Push back many factors with an iterator (factors are copied)
Definition FactorGraph.h:240
\n+
sharedFactor front() const
Get the first factor.
Definition FactorGraph.h:359
\n+
const_iterator end() const
Iterator to end of factors.
Definition FactorGraph.h:356
\n+
HasDerivedElementType< CONTAINER > push_back(const CONTAINER &container)
Push back many factors as shared_ptr's in a container (factors are not copied)
Definition FactorGraph.h:254
\n+
FACTOR FactorType
factor type
Definition FactorGraph.h:99
\n+
void replace(size_t index, sharedFactor factor)
replace a factor by index
Definition FactorGraph.h:388
\n+
boost::assign::list_inserter< CRefCallPushBack< This > > operator+=(const FACTOR_OR_CONTAINER &factorOrContainer)
Add a factor or container of factors, including STL collections, BayesTrees, etc.
Definition FactorGraph.h:278
\n+
std::enable_if< std::is_base_of< FactorType, DERIVEDFACTOR >::value, boost::assign::list_inserter< RefCallPushBack< This > > >::type operator+=(boost::shared_ptr< DERIVEDFACTOR > factor)
+= works well with boost::assign list inserter.
Definition FactorGraph.h:219
\n+
iterator begin()
non-const STL-style begin()
Definition FactorGraph.h:372
\n+
const_iterator begin() const
Iterator to beginning of factors.
Definition FactorGraph.h:353
\n+
HasDerivedElementType< ITERATOR > push_back(ITERATOR firstFactor, ITERATOR lastFactor)
Push back many factors with an iterator over shared_ptr (factors are not copied)
Definition FactorGraph.h:233
\n+
IsDerived< DERIVEDFACTOR > add(boost::shared_ptr< DERIVEDFACTOR > factor)
add is a synonym for push_back.
Definition FactorGraph.h:210
\n+
friend class boost::serialization::access
Serialization function.
Definition FactorGraph.h:438
\n+
boost::shared_ptr< FACTOR > sharedFactor
Shared pointer to a factor.
Definition FactorGraph.h:101
\n+
bool exists(size_t idx) const
MATLAB interface utility: Checks whether a factor index idx exists in the graph and is a live pointer...
Definition FactorGraph.h:434
\n+
const sharedFactor operator[](size_t i) const
Get a specific factor by index (this does not check array bounds, as opposed to at() which does).
Definition FactorGraph.h:345
\n+
IsDerived< DERIVEDFACTOR > push_back(const DERIVEDFACTOR &factor)
Add a factor by value, will be copy-constructed (use push_back with a shared_ptr to avoid the copy).
Definition FactorGraph.h:203
\n+
FactorGraph(std::initializer_list< boost::shared_ptr< DERIVEDFACTOR > > sharedFactors)
Constructor that takes an initializer list of shared pointers.
Definition FactorGraph.h:171
\n+
iterator end()
non-const STL-style end()
Definition FactorGraph.h:375
\n+
FastVector< sharedFactor > factors_
concept check, makes sure FACTOR defines print and equals
Definition FactorGraph.h:131
\n+
const sharedFactor at(size_t i) const
Get a specific factor by index (this checks array bounds and may throw an exception,...
Definition FactorGraph.h:335
\n+
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
output to file with graphviz format.
Definition FactorGraph-inst.h:177
\n+
virtual ~FactorGraph()=default
Default destructor Public and virtual so boost serialization can call it.
\n+
void reserve(size_t size)
Reserve space for the specified number of factors if you know in advance how many there will be (work...
Definition FactorGraph.h:182
\n
Bayes tree.
Definition BayesTree.h:67
\n-
Nodes nodes_
Map from indices to Clique.
Definition BayesTree.h:100
\n-
void removeClique(sharedClique clique)
remove a clique: warning, can result in a forest
Definition BayesTree-inst.h:424
\n-
sharedFactorGraph joint(Key j1, Key j2, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
return joint on two variables Limitation: can only calculate joint if cliques are disjoint or one of ...
Definition BayesTree-inst.h:293
\n-
void fillNodesIndex(const sharedClique &subtree)
Fill the nodes index for a subtree.
Definition BayesTree-inst.h:246
\n-
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Output to graphviz format, stream version.
Definition BayesTree-inst.h:64
\n
void addFactorsToGraph(FactorGraph< FactorType > *graph) const
Add all cliques in this BayesTree to the specified factor graph.
Definition BayesTree-inst.h:168
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition BayesTree-inst.h:230
\n-
This & operator=(const This &other)
Assignment operator.
Definition BayesTree-inst.h:199
\n-
boost::shared_ptr< Clique > sharedClique
Shared pointer to a clique.
Definition BayesTree.h:74
\n-
BayesTree()
Create an empty Bayes Tree.
Definition BayesTree.h:109
\n-
void clear()
Remove all nodes.
Definition BayesTree-inst.h:408
\n-
void addClique(const sharedClique &clique, const sharedClique &parent_clique=sharedClique())
add a clique (top down)
Definition BayesTree-inst.h:142
\n-
sharedBayesNet jointBayesNet(Key j1, Key j2, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
return joint on two variables as a BayesNet Limitation: can only calculate joint if cliques are disjo...
Definition BayesTree-inst.h:302
\n-
Key findParentClique(const CONTAINER &parents) const
Find parent clique of a conditional.
Definition BayesTree-inst.h:238
\n-
size_t size() const
number of cliques
Definition BayesTree-inst.h:133
\n-
void deleteCachedShortcuts()
Clear all shortcut caches - use before timing on marginal calculation to avoid residual cache data.
Definition BayesTree-inst.h:416
\n-
void removePath(sharedClique clique, BayesNetType *bn, Cliques *orphans)
Remove path from clique to root and return that path as factors plus a list of orphaned subtree roots...
Definition BayesTree-inst.h:448
\n-
sharedConditional marginalFactor(Key j, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
Return marginal on any variable.
Definition BayesTree-inst.h:270
\n-
size_t numCachedSeparatorMarginals() const
Collect number of cliques with cached separator marginals.
Definition BayesTree-inst.h:55
\n-
BayesTreeCliqueData getCliqueData() const
Gather data on all cliques.
Definition BayesTree-inst.h:35
\n-
Cliques removeSubtree(const sharedClique &subtree)
Remove the requested subtree.
Definition BayesTree-inst.h:496
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition BayesTree-inst.h:212
\n-
void insertRoot(const sharedClique &subtree)
Insert a new subtree with known parent clique.
Definition BayesTree-inst.h:260
\n-
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
output to file with graphviz format.
Definition BayesTree-inst.h:85
\n-
void removeTop(const KeyVector &keys, BayesNetType *bn, Cliques *orphans)
Given a list of indices, turn "contaminated" part of the tree back into a factor graph.
Definition BayesTree-inst.h:475
\n-
Definition Ordering.h:34
\n+
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n+
Helper.
Definition FactorGraph.h:54
\n+
Helper.
Definition FactorGraph.h:67
\n+
Helper.
Definition FactorGraph.h:80
\n+
the error.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,757 +1,591 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BayesTree-inst.h\n+FactorGraph.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n+21// \\callgraph\n 22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n-27\n-28#include \n-29#include \n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32\n-33 /* *************************************************************************\n-*/\n-34 template\n-_\b3_\b5 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba() const {\n-36 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba stats;\n-37 for (const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root : roots_) getCliqueData(root, &stats);\n-38 return stats;\n-39 }\n-40\n-41 /* *************************************************************************\n-*/\n-42 template \n-_\b4_\b3 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be clique,\n-44 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba* stats) const {\n-45 const auto conditional = clique->conditional();\n-46 stats->conditionalSizes.push_back(conditional->nrFrontals());\n-47 stats->separatorSizes.push_back(conditional->nrParents());\n-48 for (_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be c : clique->children) {\n-49 getCliqueData(c, stats);\n-50 }\n-51 }\n-52\n-53 /* *************************************************************************\n-*/\n-54 template\n-_\b5_\b5 size_t _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs() const {\n-56 size_t count = 0;\n-57 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root: roots_)\n-58 count += root->numCachedSeparatorMarginals();\n-59 return count;\n-60 }\n-61\n-62 /* *************************************************************************\n-*/\n-63 template \n-_\b6_\b4 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bd_\bo_\bt(std::ostream& os,\n-65 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const {\n-66 if (roots_.empty())\n-67 throw std::invalid_argument(\n-68 \"the root of Bayes tree has not been initialized!\");\n-69 os << \"digraph G{\\n\";\n-70 for (const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root : roots_) _\bd_\bo_\bt(os, root, keyFormatter);\n-71 os << \"}\";\n-72 std::flush(os);\n-73 }\n-74\n-75 /* *************************************************************************\n-*/\n-76 template \n-_\b7_\b7 std::string _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const {\n-78 std::stringstream ss;\n-79 _\bd_\bo_\bt(ss, keyFormatter);\n-80 return ss.str();\n-81 }\n+23#pragma once\n+24\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+29\n+30#include // for Eigen::aligned_allocator\n+31\n+32#include \n+33#include \n+34#include \n+35#include \n+36\n+37#include \n+38#include \n+39#include \n+40#include \n+41\n+42namespace _\bg_\bt_\bs_\ba_\bm {\n+44typedef FastVector _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n+45\n+46// Forward declarations\n+47template \n+48class BayesTree;\n+49\n+50class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+51\n+53template \n+_\b5_\b4class _\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk {\n+55 C& obj;\n+56\n+57 public:\n+58 explicit _\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk(C& obj) : obj(obj) {}\n+59 template \n+60 void operator()(const A& a) {\n+61 obj.push_back(a);\n+62 }\n+63};\n+64\n+66template \n+_\b6_\b7class _\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk {\n+68 C& obj;\n+69\n+70 public:\n+71 explicit _\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk(C& obj) : obj(obj) {}\n+72 template \n+73 void operator()(A& a) {\n+74 obj.push_back(a);\n+75 }\n+76};\n+77\n+79template \n+_\b8_\b0class _\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bA_\bd_\bd_\bC_\bo_\bp_\by {\n+81 C& obj;\n 82\n-83 /* *************************************************************************\n-*/\n-84 template \n-_\b8_\b5 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n-86 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const {\n-87 std::ofstream of(filename.c_str());\n-88 _\bd_\bo_\bt(of, keyFormatter);\n-89 of.close();\n-90 }\n-91\n-92 /* *************************************************************************\n-*/\n-93 template \n-_\b9_\b4 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bd_\bo_\bt(std::ostream& s, _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be clique,\n-95 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n-96 int parentnum) const {\n-97 static int num = 0;\n-98 bool first = true;\n-99 std::stringstream out;\n-100 out << num;\n-101 std::string parent = out.str();\n-102 parent += \"[label=\\\"\";\n-103\n-104 for (_\bK_\be_\by key : clique->conditional_->frontals()) {\n-105 if (!first) parent += \", \";\n-106 first = false;\n-107 parent += keyFormatter(key);\n-108 }\n-109\n-110 if (clique->parent()) {\n-111 parent += \" : \";\n-_\b1_\b1_\b2 s << parentnum << \"->\" << num << \"\\n\";\n-113 }\n-114\n-115 first = true;\n-116 for (_\bK_\be_\by parentKey : clique->conditional_->parents()) {\n-_\b1_\b1_\b7 if (!first) parent += \", \";\n-118 first = false;\n-119 parent += keyFormatter(parentKey);\n-120 }\n-121 parent += \"\\\"];\\n\";\n-122 s << parent;\n-_\b1_\b2_\b3 parentnum = num;\n-124\n-125 for (_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be c : clique->children) {\n-126 num++;\n-_\b1_\b2_\b7 _\bd_\bo_\bt(s, c, keyFormatter, parentnum);\n-128 }\n-129 }\n+83 public:\n+84 explicit _\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bA_\bd_\bd_\bC_\bo_\bp_\by(C& obj) : obj(obj) {}\n+85 template \n+86 void operator()(const A& a) {\n+87 obj.addCopy(a);\n+88 }\n+89};\n+90\n+96template \n+_\b9_\b7class _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n+98 public:\n+_\b9_\b9 typedef FACTOR _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n+100 typedef boost::shared_ptr\n+_\b1_\b0_\b1 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n+102 typedef _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br value_type;\n+103 typedef typename _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br iterator;\n+104 typedef typename _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br const_iterator;\n+105\n+106 private:\n+107 typedef _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b> _\bT_\bh_\bi_\bs;\n+108 typedef boost::shared_ptr\n+109 shared_ptr;\n+110\n+112 template \n+113 using IsDerived = typename std::enable_if<\n+114 std::is_base_of::value>::type;\n+115\n+117 template \n+118 using HasDerivedValueType = typename std::enable_if<\n+119 std::is_base_of::value>::type;\n+120\n+122 template \n+123 using HasDerivedElementType = typename std::enable_if::value>::type;\n+125\n+126 protected:\n+128 GTSAM_CONCEPT_TESTABLE_TYPE(FACTOR)\n+129\n 130\n-131 /\n-* ************************************************************************* */\n-132 template\n-_\b1_\b3_\b3 size_t _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bs_\bi_\bz_\be() const {\n-134 size_t size = 0;\n-_\b1_\b3_\b5 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& clique: roots_)\n-136 size += clique->treeSize();\n-137 return size;\n-138 }\n-139\n-140 /\n-* ************************************************************************* */\n-141 template\n-_\b1_\b4_\b2 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\ba_\bd_\bd_\bC_\bl_\bi_\bq_\bu_\be(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& clique, const\n-_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& parent_clique) {\n-143 for(_\bK_\be_\by j: clique->conditional()->frontals())\n-144 nodes_[j] = clique;\n-145 if (parent_clique != nullptr) {\n-146 clique->parent_ = parent_clique;\n-147 parent_clique->children.push_back(clique);\n-148 } else {\n-149 roots_.push_back(clique);\n-150 }\n-151 }\n-152\n-153 /\n-* ************************************************************************* */\n-154 namespace {\n-155 template \n-156 struct _pushCliqueFunctor {\n-157 _pushCliqueFunctor(_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>* graph_) : graph(graph_) {}\n-158 FactorGraph* graph;\n-159 int operator()(const boost::shared_ptr& clique, int dummy) {\n-160 graph->push_back(clique->conditional_);\n-_\b1_\b6_\b1 return 0;\n-162 }\n-163 };\n-_\b1_\b6_\b4 } // namespace\n+_\b1_\b3_\b1 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_;\n+132\n+_\b1_\b3_\b4 bool _\bi_\bs_\bE_\bq_\bu_\ba_\bl(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& other) const {\n+135 return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_ == other.factors_;\n+136 }\n+137\n+140\n+_\b1_\b4_\b2 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n+143\n+145 template \n+_\b1_\b4_\b6 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(ITERATOR firstFactor, ITERATOR lastFactor) {\n+147 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(firstFactor, lastFactor);\n+148 }\n+149\n+151 template \n+_\b1_\b5_\b2 explicit _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const CONTAINER& factors) {\n+153 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(factors);\n+154 }\n+155\n+157\n+158 public:\n+161\n+_\b1_\b6_\b4 virtual _\b~_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() = default;\n 165\n-166 /\n-* ************************************************************************* */\n-167 template \n-_\b1_\b6_\b8 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh(\n-169 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be_\b>* graph) const {\n-170 // Traverse the BayesTree and add all conditionals to this graph\n-_\b1_\b7_\b1 int data = 0; // Unused\n-172 _pushCliqueFunctor functor(graph);\n-173 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(*this, data, functor);\n-174 }\n-175\n-176 /\n-* ************************************************************************* */\n-_\b1_\b7_\b7 template\n-_\b1_\b7_\b8 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(const _\bT_\bh_\bi_\bs& other) {\n-179 *this = other;\n-180 }\n-181\n-182 /\n-* ************************************************************************* */\n-_\b1_\b8_\b3 namespace {\n-184 template\n-185 boost::shared_ptr\n-186 BayesTreeCloneForestVisitorPre(const boost::shared_ptr& node, const\n-boost::shared_ptr& parentPointer)\n-187 {\n-188 // Clone the current node and add it to its cloned parent\n-_\b1_\b8_\b9 boost::shared_ptr clone = boost::make_shared(*node);\n-190 clone->children.clear();\n-191 clone->parent_ = parentPointer;\n-_\b1_\b9_\b2 parentPointer->children.push_back(clone);\n-193 return clone;\n-194 }\n-195 }\n-_\b1_\b9_\b6\n-197 /\n-* ************************************************************************* */\n-198 template\n-_\b1_\b9_\b9 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>& _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs& other) {\n-200 this->clear();\n-201 boost::shared_ptr rootContainer = boost::make_shared();\n-202 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(other, rootContainer,\n-BayesTreeCloneForestVisitorPre);\n-203 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root: rootContainer->children) {\n-204 root->parent_ = typename Clique::weak_ptr(); // Reset the parent since it's\n-set to the dummy clique\n-205 insertRoot(root);\n+170 template >\n+_\b1_\b7_\b1 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(std::initializer_list>\n+sharedFactors)\n+172 : _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_(sharedFactors) {}\n+173\n+177\n+_\b1_\b8_\b2 void _\br_\be_\bs_\be_\br_\bv_\be(size_t _\bs_\bi_\bz_\be) { _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.reserve(_\bs_\bi_\bz_\be); }\n+183\n+185 template \n+_\b1_\b8_\b6 IsDerived _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(boost::shared_ptr factor)\n+{\n+187 _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.push_back(boost::shared_ptr(factor));\n+188 }\n+189\n+191 template \n+_\b1_\b9_\b2 IsDerived _\be_\bm_\bp_\bl_\ba_\bc_\be_\b__\bs_\bh_\ba_\br_\be_\bd(Args&&... args) {\n+193 _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.push_back(boost::allocate_shared(\n+194 Eigen::aligned_allocator(),\n+195 std::forward(args)...));\n+196 }\n+197\n+202 template \n+_\b2_\b0_\b3 IsDerived _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const DERIVEDFACTOR& factor) {\n+204 _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.push_back(boost::allocate_shared(\n+205 Eigen::aligned_allocator(), factor));\n 206 }\n-207 return *this;\n-_\b2_\b0_\b8 }\n-209\n-210 /\n-* ************************************************************************* */\n-_\b2_\b1_\b1 template\n-_\b2_\b1_\b2 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n-keyFormatter) const {\n-213 std::cout << s << \": cliques: \" << size() << \", variables: \" << nodes_.size\n-() << std::endl;\n-_\b2_\b1_\b4 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt(*this, s, keyFormatter);\n-215 }\n-216\n-217 /\n-* ************************************************************************* */\n-218 // binary predicate to test equality of a pair for use in equals\n-219 template\n-_\b2_\b2_\b0 bool check_sharedCliques(\n-221 const std::pair<_\bK_\be_\by, typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be>& v1,\n-222 const std::pair<_\bK_\be_\by, typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be>& v2\n-223 ) {\n-224 return v1.first == v2.first &&\n-225 ((!v1.second && !v2.second) || (v1.second && v2.second && v1.second->equals\n-(*v2.second)));\n-_\b2_\b2_\b6 }\n+207\n+209 template \n+_\b2_\b1_\b0 IsDerived _\ba_\bd_\bd(boost::shared_ptr factor) {\n+211 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(factor);\n+212 }\n+213\n+215 template \n+216 typename std::enable_if<\n+217 std::is_base_of::value,\n+218 boost::assign::list_inserter>>::type\n+_\b2_\b1_\b9 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(boost::shared_ptr factor) {\n+220 return boost::assign::make_list_inserter(_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk_\b<_\bT_\bh_\bi_\bs_\b>(*this))(\n+221 factor);\n+222 }\n+223\n 227\n-228 /\n-* ************************************************************************* */\n-229 template\n-_\b2_\b3_\b0 bool _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>& other, double tol)\n-const {\n-231 return size()==other._\bs_\bi_\bz_\be() &&\n-232 std::equal(nodes_.begin(), nodes_.end(), other._\bn_\bo_\bd_\be_\bs_\b_.begin(),\n-&check_sharedCliques);\n-233 }\n-234\n-_\b2_\b3_\b5 /\n-* ************************************************************************* */\n-236 template\n-237 template\n-_\b2_\b3_\b8 _\bK_\be_\by _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bf_\bi_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bC_\bl_\bi_\bq_\bu_\be(const CONTAINER& parents) const {\n-239 typename CONTAINER::const_iterator lowestOrderedParent = min_element\n-(parents.begin(), parents.end());\n-240 assert(lowestOrderedParent != parents.end());\n-_\b2_\b4_\b1 return *lowestOrderedParent;\n-242 }\n-243\n-244 /\n-* ************************************************************************* */\n-245 template\n-_\b2_\b4_\b6 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bf_\bi_\bl_\bl_\bN_\bo_\bd_\be_\bs_\bI_\bn_\bd_\be_\bx(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree) {\n-247 // Add each frontal variable of this root node\n-248 for(const _\bK_\be_\by& j: subtree->conditional()->frontals()) {\n-249 bool inserted = nodes_.insert(std::make_pair(j, subtree)).second;\n-_\b2_\b5_\b0 assert(inserted); (void)inserted;\n-251 }\n-252 // Fill index for each child\n-_\b2_\b5_\b3 typedef typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be;\n-254 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& child: subtree->children) {\n-255 fillNodesIndex(child); }\n-_\b2_\b5_\b6 }\n+232 template \n+_\b2_\b3_\b3 HasDerivedElementType _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(ITERATOR firstFactor,\n+234 ITERATOR lastFactor) {\n+235 _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.insert(_\be_\bn_\bd(), firstFactor, lastFactor);\n+236 }\n+237\n+239 template \n+_\b2_\b4_\b0 HasDerivedValueType _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(ITERATOR firstFactor,\n+241 ITERATOR lastFactor) {\n+242 for (ITERATOR f = firstFactor; f != lastFactor; ++f) _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(*f);\n+243 }\n+244\n+248\n+253 template \n+_\b2_\b5_\b4 HasDerivedElementType _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const CONTAINER& container) {\n+255 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(container.begin(), container.end());\n+256 }\n 257\n-258 /\n-* ************************************************************************* */\n-259 template\n-_\b2_\b6_\b0 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bR_\bo_\bo_\bt(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree) {\n-261 roots_.push_back(subtree); // Add to roots\n-262 fillNodesIndex(subtree); // Populate nodes index\n-263 }\n-264\n-265 /\n-* ************************************************************************* */\n-266 // First finds clique marginal then marginalizes that\n-267 /\n-* ************************************************************************* */\n-268 template\n-269 typename BayesTree::sharedConditional\n-_\b2_\b7_\b0 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j, const Eliminate& function) const\n-271 {\n-272 gttic(BayesTree_marginalFactor);\n-273\n-274 // get clique containing Key j\n-275 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be clique = this->clique(j);\n-276\n-277 // calculate or retrieve its marginal P(C) = P(F,S)\n-278 FactorGraphType cliqueMarginal = clique->marginal2(function);\n-279\n-280 // Now, marginalize out everything that is not variable j\n-281 BayesNetType marginalBN =\n-282 *cliqueMarginal.marginalMultifrontalBayesNet(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg{j}, function);\n+259 template \n+_\b2_\b6_\b0 HasDerivedValueType _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const CONTAINER& container) {\n+261 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(container.begin(), container.end());\n+262 }\n+263\n+268 template \n+_\b2_\b6_\b9 void _\ba_\bd_\bd(const FACTOR_OR_CONTAINER& factorOrContainer) {\n+270 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(factorOrContainer);\n+271 }\n+272\n+277 template \n+_\b2_\b7_\b8 boost::assign::list_inserter> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(\n+279 const FACTOR_OR_CONTAINER& factorOrContainer) {\n+280 return boost::assign::make_list_inserter(_\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk_\b<_\bT_\bh_\bi_\bs_\b>(*this))(\n+281 factorOrContainer);\n+282 }\n 283\n-284 // The Bayes net should contain only one conditional for variable j, so\n-return it\n-285 return marginalBN.front();\n-286 }\n 287\n-288 /\n-* ************************************************************************* */\n-289 // Find two cliques, their joint, then marginalizes\n-290 /\n-* ************************************************************************* */\n-291 template\n-292 typename BayesTree::sharedFactorGraph\n-_\b2_\b9_\b3 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bj_\bo_\bi_\bn_\bt(_\bK_\be_\by j1, _\bK_\be_\by j2, const Eliminate& function) const\n-294 {\n-295 gttic(BayesTree_joint);\n-296 return boost::make_shared(*jointBayesNet(j1, j2,\n-function));\n-297 }\n-298\n-299 /\n-* ************************************************************************* */\n-300 template\n-301 typename BayesTree::sharedBayesNet\n-_\b3_\b0_\b2 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bj_\bo_\bi_\bn_\bt_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(_\bK_\be_\by j1, _\bK_\be_\by j2, const Eliminate& function)\n-const\n-303 {\n-304 gttic(BayesTree_jointBayesNet);\n-305 // get clique C1 and C2\n-306 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be C1 = (*this)[j1], C2 = (*this)[j2];\n+293 template \n+294 typename std::enable_if<\n+295 std::is_base_of::value>::type\n+_\b2_\b9_\b6 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>& bayesTree) {\n+297 bayesTree._\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh(this);\n+298 }\n+299\n+304 template >\n+305 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs _\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs(const CONTAINER& factors,\n+306 bool useEmptySlots = false);\n 307\n-308 gttic(Lowest_common_ancestor);\n-309 // Find lowest common ancestor clique\n-310 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be B; {\n-311 // Build two paths to the root\n-312 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be_\b> path1, path2; {\n-313 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be p = C1;\n-314 while(p) {\n-315 path1.push_front(p);\n-316 p = p->parent();\n-317 }\n-318 } {\n-319 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be p = C2;\n-320 while(p) {\n-321 path2.push_front(p);\n-322 p = p->parent();\n-323 }\n-324 }\n-325 // Find the path intersection\n-326 typename _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be_\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br p1 = path1.begin(), p2 =\n-path2.begin();\n-327 if(*p1 == *p2)\n-328 B = *p1;\n-329 while(p1 != path1.end() && p2 != path2.end() && *p1 == *p2) {\n-330 B = *p1;\n-331 ++p1;\n-332 ++p2;\n-333 }\n-334 }\n-335 gttoc(Lowest_common_ancestor);\n+311\n+313 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"FactorGraph\",\n+314 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const;\n+315\n+317 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& fg, double tol = 1e-9) const;\n+319\n+320 public:\n+323\n+_\b3_\b2_\b6 size_t _\bs_\bi_\bz_\be() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.size(); }\n+327\n+_\b3_\b3_\b0 bool _\be_\bm_\bp_\bt_\by() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.empty(); }\n+331\n+_\b3_\b3_\b5 const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br _\ba_\bt(size_t i) const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.at(i); }\n 336\n-337 // Build joint on all involved variables\n-338 FactorGraphType p_BC1C2;\n-339\n-340 if(B)\n-341 {\n-342 // Compute marginal on lowest common ancestor clique\n-343 gttic(LCA_marginal);\n-344 FactorGraphType p_B = B->marginal2(function);\n-345 gttoc(LCA_marginal);\n+_\b3_\b4_\b0 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& _\ba_\bt(size_t i) { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.at(i); }\n+341\n+_\b3_\b4_\b5 const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](size_t i) const { return _\ba_\bt(i); }\n 346\n-347 // Compute shortcuts of the requested cliques given the lowest common\n-ancestor\n-348 gttic(Clique_shortcuts);\n-349 BayesNetType p_C1_Bred = C1->shortcut(B, function);\n-350 BayesNetType p_C2_Bred = C2->shortcut(B, function);\n-351 gttoc(Clique_shortcuts);\n-352\n-353 // Factor the shortcuts to be conditioned on the full root\n-354 // Get the set of variables to eliminate, which is C1\\B.\n-355 gttic(Full_root_factoring);\n-356 boost::shared_ptr p_C1_B; {\n-357 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br C1_minus_B; {\n-358 _\bK_\be_\by_\bS_\be_\bt C1_minus_B_set(C1->conditional()->beginParents(), C1->conditional()-\n->endParents());\n-359 for(const _\bK_\be_\by j: *B->conditional()) {\n-360 C1_minus_B_set.erase(j); }\n-361 C1_minus_B.assign(C1_minus_B_set.begin(), C1_minus_B_set.end());\n-362 }\n-363 // Factor into C1\\B | B.\n-364 sharedFactorGraph temp_remaining;\n-365 boost::tie(p_C1_B, temp_remaining) =\n-366 FactorGraphType(p_C1_Bred).eliminatePartialMultifrontal(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-(C1_minus_B), function);\n-367 }\n-368 boost::shared_ptr p_C2_B; {\n-369 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br C2_minus_B; {\n-370 _\bK_\be_\by_\bS_\be_\bt C2_minus_B_set(C2->conditional()->beginParents(), C2->conditional()-\n->endParents());\n-371 for(const _\bK_\be_\by j: *B->conditional()) {\n-372 C2_minus_B_set.erase(j); }\n-373 C2_minus_B.assign(C2_minus_B_set.begin(), C2_minus_B_set.end());\n-374 }\n-375 // Factor into C2\\B | B.\n-376 sharedFactorGraph temp_remaining;\n-377 boost::tie(p_C2_B, temp_remaining) =\n-378 FactorGraphType(p_C2_Bred).eliminatePartialMultifrontal(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-(C2_minus_B), function);\n-379 }\n-380 gttoc(Full_root_factoring);\n-381\n-382 gttic(Variable_joint);\n-383 p_BC1C2 += p_B;\n-384 p_BC1C2 += *p_C1_B;\n-385 p_BC1C2 += *p_C2_B;\n-386 if(C1 != B)\n-387 p_BC1C2 += C1->conditional();\n-388 if(C2 != B)\n-389 p_BC1C2 += C2->conditional();\n-390 gttoc(Variable_joint);\n-391 }\n-392 else\n-393 {\n-394 // The nodes have no common ancestor, they're in different trees, so\n-they're joint is just the\n-395 // product of their marginals.\n-396 gttic(Disjoint_marginals);\n-397 p_BC1C2 += C1->marginal2(function);\n-398 p_BC1C2 += C2->marginal2(function);\n-399 gttoc(Disjoint_marginals);\n-400 }\n+_\b3_\b5_\b0 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](size_t i) { return _\ba_\bt(i); }\n+351\n+_\b3_\b5_\b3 const_iterator _\bb_\be_\bg_\bi_\bn() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.begin(); }\n+354\n+_\b3_\b5_\b6 const_iterator _\be_\bn_\bd() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.end(); }\n+357\n+_\b3_\b5_\b9 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br _\bf_\br_\bo_\bn_\bt() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.front(); }\n+360\n+_\b3_\b6_\b2 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br _\bb_\ba_\bc_\bk() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.back(); }\n+363\n+365 double _\be_\br_\br_\bo_\br(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+366\n+370\n+_\b3_\b7_\b2 iterator _\bb_\be_\bg_\bi_\bn() { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.begin(); }\n+373\n+_\b3_\b7_\b5 iterator _\be_\bn_\bd() { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.end(); }\n+376\n+_\b3_\b8_\b1 virtual void _\br_\be_\bs_\bi_\bz_\be(size_t _\bs_\bi_\bz_\be) { _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.resize(_\bs_\bi_\bz_\be); }\n+382\n+_\b3_\b8_\b5 void _\br_\be_\bm_\bo_\bv_\be(size_t i) { _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.at(i).reset(); }\n+386\n+_\b3_\b8_\b8 void _\br_\be_\bp_\bl_\ba_\bc_\be(size_t index, _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br factor) { _\ba_\bt(index) = factor; }\n+389\n+_\b3_\b9_\b1 iterator _\be_\br_\ba_\bs_\be(iterator item) { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.erase(item); }\n+392\n+_\b3_\b9_\b4 iterator _\be_\br_\ba_\bs_\be(iterator first, iterator last) {\n+395 return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.erase(first, last);\n+396 }\n+397\n 401\n-402 // now, marginalize out everything that is not variable j1 or j2\n-403 return p_BC1C2.marginalMultifrontalBayesNet(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg{j1, j2}, function);\n-404 }\n-405\n-406 /\n-* ************************************************************************* */\n-407 template\n-_\b4_\b0_\b8 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bc_\bl_\be_\ba_\br() {\n-409 // Remove all nodes and clear the root pointer\n-410 nodes_.clear();\n-411 roots_.clear();\n-412 }\n-413\n-414 /\n-* ************************************************************************* */\n-415 template\n-_\b4_\b1_\b6 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs() {\n-417 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root: roots_) {\n-418 root->deleteCachedShortcuts();\n-419 }\n-420 }\n-421\n-422 /\n-* ************************************************************************* */\n-423 template\n-_\b4_\b2_\b4 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bC_\bl_\bi_\bq_\bu_\be(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be clique)\n-425 {\n-426 if (clique->isRoot()) {\n-427 typename Roots::iterator root = std::find(roots_.begin(), roots_.end(),\n-clique);\n-428 if(root != roots_.end())\n-429 roots_.erase(root);\n-430 } else { // detach clique from parent\n-431 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be parent = clique->parent_.lock();\n-432 typename Roots::iterator child = std::find(parent->children.begin(),\n-parent->children.end(), clique);\n-433 assert(child != parent->children.end());\n-434 parent->children.erase(child);\n-435 }\n-436\n-437 // orphan my children\n-438 for(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be child: clique->children)\n-439 child->parent_ = typename Clique::weak_ptr();\n-440\n-441 for(_\bK_\be_\by j: clique->conditional()->frontals()) {\n-442 nodes_.unsafe_erase(j);\n-443 }\n-444 }\n-445\n-446 /\n-* ************************************************************************* */\n-447 template \n-_\b4_\b4_\b8 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bP_\ba_\bt_\bh(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be clique, BayesNetType* bn,\n-449 _\bC_\bl_\bi_\bq_\bu_\be_\bs* orphans) {\n-450 // base case is nullptr, if so we do nothing and return empties above\n-451 if (clique) {\n-452 // remove the clique from orphans in case it has been added earlier\n-453 orphans->remove(clique);\n-454\n-455 // remove me\n-456 this->removeClique(clique);\n-457\n-458 // remove path above me\n-459 this->removePath(typename Clique::shared_ptr(clique->parent_.lock()), bn,\n-460 orphans);\n-461\n-462 // add children to list of orphans (splice also removed them from\n-463 // clique->children_)\n-464 orphans->insert(orphans->begin(), clique->children.begin(),\n-465 clique->children.end());\n-466 clique->children.clear();\n-467\n-468 bn->push_back(clique->conditional_);\n-469 }\n-470 }\n-471\n-472 /\n-* *************************************************************************\n-473 */\n-474 template \n-_\b4_\b7_\b5 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bT_\bo_\bp(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys, BayesNetType* bn,\n-476 _\bC_\bl_\bi_\bq_\bu_\be_\bs* orphans) {\n-477 gttic(removetop);\n-478 // process each key of the new factor\n-479 for (const _\bK_\be_\by& j : keys) {\n-480 // get the clique\n-481 // TODO(frank): Nodes will be searched again in removeClique\n-482 typename Nodes::const_iterator node = nodes_.find(j);\n-483 if (node != nodes_.end()) {\n-484 // remove path from clique to root\n-485 this->removePath(node->second, bn, orphans);\n-486 }\n-487 }\n-488\n-489 // Delete cachedShortcuts for each orphan subtree\n-490 // TODO(frank): Consider Improving\n-491 for (_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& orphan : *orphans) orphan->deleteCachedShortcuts();\n-492 }\n-493\n-494 /\n-* ************************************************************************* */\n-495 template\n-_\b4_\b9_\b6 typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be_\bs _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bS_\bu_\bb_\bt_\br_\be_\be(\n-497 const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree)\n-498 {\n-499 // Result clique list\n-500 _\bC_\bl_\bi_\bq_\bu_\be_\bs cliques;\n-501 cliques.push_back(subtree);\n-502\n-503 // Remove the first clique from its parents\n-504 if(!subtree->isRoot())\n-505 subtree->parent()->children.erase(std::find(\n-506 subtree->parent()->children.begin(), subtree->parent()->children.end(),\n-subtree));\n-507 else\n-508 roots_.erase(std::find(roots_.begin(), roots_.end(), subtree));\n-509\n-510 // Add all subtree cliques and erase the children and parent of each\n-511 for(typename Cliques::iterator clique = cliques.begin(); clique !=\n-cliques.end(); ++clique)\n-512 {\n-513 // Add children\n-514 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& child: (*clique)->children) {\n-515 cliques.push_back(child); }\n-516\n-517 // Delete cached shortcuts\n-518 (*clique)->deleteCachedShortcutsNonRecursive();\n-519\n-520 // Remove this node from the nodes index\n-521 for(_\bK_\be_\by j: (*clique)->conditional()->frontals()) {\n-522 nodes_.unsafe_erase(j); }\n-523\n-524 // Erase the parent and children pointers\n-525 (*clique)->parent_.reset();\n-526 (*clique)->children.clear();\n-527 }\n-528\n-529 return cliques;\n-530 }\n-531\n-532}\n-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\n-_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Bayes Tree is a tree of cliques of a Bayes Chain.\n+403 void _\bd_\bo_\bt(std::ostream& os,\n+404 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+405 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n+406\n+408 std::string _\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+409 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n+410\n+412 void _\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n+413 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+414 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n+415\n+419\n+421 size_t _\bn_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs() const;\n+422\n+425 _\bK_\be_\by_\bS_\be_\bt _\bk_\be_\by_\bs() const;\n+426\n+430 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bk_\be_\by_\bV_\be_\bc_\bt_\bo_\br() const;\n+431\n+_\b4_\b3_\b4 inline bool _\be_\bx_\bi_\bs_\bt_\bs(size_t idx) const { return idx < _\bs_\bi_\bz_\be() && _\ba_\bt(idx); }\n+435\n+436 private:\n+_\b4_\b3_\b8 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+439 template \n+440 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+441 ar& BOOST_SERIALIZATION_NVP(_\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_);\n+442 }\n+443\n+445}; // FactorGraph\n+446} // namespace gtsam\n+447\n+448#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+Factor Graph Base Class.\n+_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh\n+Graphviz formatter.\n+_\bK_\be_\by_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+FastVector< FactorIndex > FactorIndices\n+Define collection types:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt\n-void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre,\n-VISITOR_POST &visitorPost)\n-Traverse a forest depth-first with pre-order and post-order visits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt\n-void PrintForest(const FOREST &forest, std::string str, const KeyFormatter\n-&keyFormatter)\n-Print a tree, prefixing each line with str, and formatting keys using\n-keyFormatter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList is a thin wrapper around std::list that uses the boost\n-fast_pool_allocator instead of the de...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n A factor graph is a bipartite graph with factor nodes connected to variable\n nodes.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba\n-store all the sizes\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"FactorGraph\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+Print out graph to std::cout, with optional key formatter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bi_\bs_\bE_\bq_\bu_\ba_\bl\n+bool isEqual(const FactorGraph &other) const\n+Check exact equality of the factor pointers. Useful for derived ==.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bk_\be_\by_\bs\n+KeySet keys() const\n+Potentially slow function to return all keys involved, sorted, as a set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+Check if the graph is empty (null factors set by remove() will cause this to\n+return false).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:330\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs\n+FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)\n+Add new factors to a factor graph and returns a list of new factor indices,\n+optionally finding and re...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)\n+Add a factor directly using a shared_ptr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bd_\bo_\bt\n+void dot(std::ostream &os, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n+Output to graphviz format, stream version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\ba_\bs_\be\n+iterator erase(iterator item)\n+Erase factor and rearrange other factors to take up the empty space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:391\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+void add(const FACTOR_OR_CONTAINER &factorOrContainer)\n+Add a factor or container of factors, including STL collections, BayesTrees,\n+etc.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:269\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\ba_\bs_\be\n+iterator erase(iterator first, iterator last)\n+Erase factors and rearrange other factors to take up the empty space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:394\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bb_\ba_\bc_\bk\n+sharedFactor back() const\n+Get the last factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:362\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+FactorGraph(const CONTAINER &factors)\n+Construct from container of factors (shared_ptr or plain objects)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bm_\bo_\bv_\be\n+void remove(size_t i)\n+delete factor without re-arranging indexes by inserting a nullptr pointer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:385\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bk_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+KeyVector keyVector() const\n+Potentially slow function to return all keys involved, sorted, as a vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+HasDerivedValueType< CONTAINER > push_back(const CONTAINER &container)\n+Push back non-pointer objects in a container (factors are copied).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+FactorGraph()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:142\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bm_\bp_\bl_\ba_\bc_\be_\b__\bs_\bh_\ba_\br_\be_\bd\n+IsDerived< DERIVEDFACTOR > emplace_shared(Args &&... args)\n+Emplace a shared pointer to factor of given type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+sharedFactor & operator[](size_t i)\n+Get a specific factor by index (this does not check array bounds, as opposed to\n+at() which does).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:350\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bt\n+sharedFactor & at(size_t i)\n+Get a specific factor by index (this checks array bounds and may throw an\n+exception,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:340\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+std::enable_if< std::is_base_of< This, typenameCLIQUE::FactorGraphType >::value\n+>::type push_back(const BayesTree< CLIQUE > &bayesTree)\n+Push back a BayesTree as a collection of factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:296\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const HybridValues &values) const\n+Add error for all factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+FactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)\n+Constructor from iterator over factors (shared_ptr or plain objects)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:146\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n+virtual void resize(size_t size)\n+Directly resize the number of factors in the graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:381\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bn_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+size_t nrFactors() const\n+return the number of non-null factors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+return the number of factors (including any null factors set by remove() ).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:326\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+HasDerivedValueType< ITERATOR > push_back(ITERATOR firstFactor, ITERATOR\n+lastFactor)\n+Push back many factors with an iterator (factors are copied)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:240\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bf_\br_\bo_\bn_\bt\n+sharedFactor front() const\n+Get the first factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:359\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bn_\bd\n+const_iterator end() const\n+Iterator to end of factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:356\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+HasDerivedElementType< CONTAINER > push_back(const CONTAINER &container)\n+Push back many factors as shared_ptr's in a container (factors are not copied)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:254\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n+FACTOR FactorType\n+factor type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bp_\bl_\ba_\bc_\be\n+void replace(size_t index, sharedFactor factor)\n+replace a factor by index\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:388\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n+boost::assign::list_inserter< CRefCallPushBack< This > > operator+=(const\n+FACTOR_OR_CONTAINER &factorOrContainer)\n+Add a factor or container of factors, including STL collections, BayesTrees,\n+etc.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:278\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n+std::enable_if< std::is_base_of< FactorType, DERIVEDFACTOR >::value, boost::\n+assign::list_inserter< RefCallPushBack< This > > >::type operator+=(boost::\n+shared_ptr< DERIVEDFACTOR > factor)\n++= works well with boost::assign list inserter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+iterator begin()\n+non-const STL-style begin()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:372\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+const_iterator begin() const\n+Iterator to beginning of factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:353\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+HasDerivedElementType< ITERATOR > push_back(ITERATOR firstFactor, ITERATOR\n+lastFactor)\n+Push back many factors with an iterator over shared_ptr (factors are not\n+copied)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:233\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+IsDerived< DERIVEDFACTOR > add(boost::shared_ptr< DERIVEDFACTOR > factor)\n+add is a synonym for push_back.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:210\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:438\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< FACTOR > sharedFactor\n+Shared pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n+bool exists(size_t idx) const\n+MATLAB interface utility: Checks whether a factor index idx exists in the graph\n+and is a live pointer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:434\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+const sharedFactor operator[](size_t i) const\n+Get a specific factor by index (this does not check array bounds, as opposed to\n+at() which does).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:345\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+IsDerived< DERIVEDFACTOR > push_back(const DERIVEDFACTOR &factor)\n+Add a factor by value, will be copy-constructed (use push_back with a\n+shared_ptr to avoid the copy).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:203\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+FactorGraph(std::initializer_list< boost::shared_ptr< DERIVEDFACTOR > >\n+sharedFactors)\n+Constructor that takes an initializer list of shared pointers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:171\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bn_\bd\n+iterator end()\n+non-const STL-style end()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:375\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_\n+FastVector< sharedFactor > factors_\n+concept check, makes sure FACTOR defines print and equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bt\n+const sharedFactor at(size_t i) const\n+Get a specific factor by index (this checks array bounds and may throw an\n+exception,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:335\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n+void saveGraph(const std::string &filename, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n+output to file with graphviz format.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\b~_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+virtual ~FactorGraph()=default\n+Default destructor Public and virtual so boost serialization can call it.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bs_\be_\br_\bv_\be\n+void reserve(size_t size)\n+Reserve space for the specified number of factors if you know in advance how\n+many there will be (work...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:182\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n Bayes tree.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bn_\bo_\bd_\be_\bs_\b_\n-Nodes nodes_\n-Map from indices to Clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bC_\bl_\bi_\bq_\bu_\be\n-void removeClique(sharedClique clique)\n-remove a clique: warning, can result in a forest\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:424\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bj_\bo_\bi_\bn_\bt\n-sharedFactorGraph joint(Key j1, Key j2, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate) const\n-return joint on two variables Limitation: can only calculate joint if cliques\n-are disjoint or one of ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:293\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bf_\bi_\bl_\bl_\bN_\bo_\bd_\be_\bs_\bI_\bn_\bd_\be_\bx\n-void fillNodesIndex(const sharedClique &subtree)\n-Fill the nodes index for a subtree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:246\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bd_\bo_\bt\n-void dot(std::ostream &os, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-Output to graphviz format, stream version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:64\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh\n void addFactorsToGraph(FactorGraph< FactorType > *graph) const\n Add all cliques in this BayesTree to the specified factor graph.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:168\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:230\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-This & operator=(const This &other)\n-Assignment operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:199\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be\n-boost::shared_ptr< Clique > sharedClique\n-Shared pointer to a clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-BayesTree()\n-Create an empty Bayes Tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bc_\bl_\be_\ba_\br\n-void clear()\n-Remove all nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:408\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bd_\bd_\bC_\bl_\bi_\bq_\bu_\be\n-void addClique(const sharedClique &clique, const sharedClique\n-&parent_clique=sharedClique())\n-add a clique (top down)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:142\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bj_\bo_\bi_\bn_\bt_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-sharedBayesNet jointBayesNet(Key j1, Key j2, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate) const\n-return joint on two variables as a BayesNet Limitation: can only calculate\n-joint if cliques are disjo...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:302\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bf_\bi_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bC_\bl_\bi_\bq_\bu_\be\n-Key findParentClique(const CONTAINER &parents) const\n-Find parent clique of a conditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:238\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-number of cliques\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:133\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs\n-void deleteCachedShortcuts()\n-Clear all shortcut caches - use before timing on marginal calculation to avoid\n-residual cache data.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:416\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bP_\ba_\bt_\bh\n-void removePath(sharedClique clique, BayesNetType *bn, Cliques *orphans)\n-Remove path from clique to root and return that path as factors plus a list of\n-orphaned subtree roots...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:448\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-sharedConditional marginalFactor(Key j, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate) const\n-Return marginal on any variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:270\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n-size_t numCachedSeparatorMarginals() const\n-Collect number of cliques with cached separator marginals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba\n-BayesTreeCliqueData getCliqueData() const\n-Gather data on all cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bS_\bu_\bb_\bt_\br_\be_\be\n-Cliques removeSubtree(const sharedClique &subtree)\n-Remove the requested subtree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:496\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bR_\bo_\bo_\bt\n-void insertRoot(const sharedClique &subtree)\n-Insert a new subtree with known parent clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n-void saveGraph(const std::string &filename, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-output to file with graphviz format.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bT_\bo_\bp\n-void removeTop(const KeyVector &keys, BayesNetType *bn, Cliques *orphans)\n-Given a list of indices, turn \"contaminated\" part of the tree back into a\n-factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:475\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n+DotWriter is a helper class for writing graphviz .dot files.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk\n+Helper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk\n+Helper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bA_\bd_\bd_\bC_\bo_\bp_\by\n+Helper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:80\n+_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+the error.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00662.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00662.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTreeCliqueBase.h File Reference\n \n \n \n \n \n \n \n@@ -95,96 +95,43 @@\n \n \n \n \n
\n \n-
Key.h File Reference
\n+Namespaces
\n+
BayesTreeCliqueBase.h File Reference
\n \n
\n \n+

Base class for cliques of a BayesTree. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::StreamedKey
 To use the key_formatter on Keys, they must be wrapped in a StreamedKey. More...
 
class  gtsam::key_formatter
 Output stream manipulator that will format gtsam::Keys according to the given KeyFormatter, as long as Key values are wrapped in a gtsam::StreamedKey. More...
 
struct  gtsam::traits< Key >
class  gtsam::BayesTreeCliqueBase< DERIVED, FACTORGRAPH >
 This is the base class for BayesTree cliques. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::KeyFormatter = std::function< std::string(Key)>
 Typedef for a function to format a key, i.e. to convert it to a string.
 
\n-using gtsam::KeyVector = FastVector< Key >
 Define collection type once and for all - also used in wrappers.
 
\n-using gtsam::KeyList = FastList< Key >
 
\n-using gtsam::KeySet = FastSet< Key >
 
\n-using gtsam::KeyGroupMap = FastMap< Key, int >
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-string gtsam::_defaultKeyFormatter (Key key)
 
\n-string gtsam::_multirobotKeyFormatter (Key key)
 
\n-void gtsam::PrintKey (Key key, const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter)
 Utility function to print one key with optional prefix.
 
\n-void gtsam::PrintKeyList (const KeyList &keys, const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter)
 Utility function to print sets of keys with optional prefix.
 
\n-void gtsam::PrintKeyVector (const KeyVector &keys, const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter)
 Utility function to print sets of keys with optional prefix.
 
\n-void gtsam::PrintKeySet (const KeySet &keys, const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter)
 Utility function to print sets of keys with optional prefix.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
\n-Alex Cunningham
\n-
Date
Feb 20, 2012
\n-
Author
Richard Roberts
\n-
Date
Feb 20, 2012
\n+

Base class for cliques of a BayesTree.

\n+
Author
Richard Roberts and Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,72 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Key.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+BayesTreeCliqueBase.h File Reference\n+Base class for cliques of a BayesTree. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by\n-\u00a0 To use the _\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br on Keys, they must be wrapped in a\n- _\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n- Output stream manipulator that will format gtsam::Keys according to\n-\u00a0 the given KeyFormatter, as long as Key values are wrapped in a _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n- _\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bK_\be_\by_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b,_\b _\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b _\b>\n+\u00a0 This is the base class for _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be cliques. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byF\bFo\bor\brm\bma\bat\btt\bte\ber\br = std::function< std::string(_\bK_\be_\by)>\n-\u00a0 Typedef for a function to format a key, i.e. to convert it to a string.\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byV\bVe\bec\bct\bto\bor\br = _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br< _\bK_\be_\by >\n-\u00a0 Define collection type once and for all - also used in wrappers.\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byL\bLi\bis\bst\bt = _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt< _\bK_\be_\by >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byS\bSe\bet\bt = _\bF_\ba_\bs_\bt_\bS_\be_\bt< _\bK_\be_\by >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byG\bGr\bro\bou\bup\bpM\bMa\bap\bp = _\bF_\ba_\bs_\bt_\bM_\ba_\bp< _\bK_\be_\by, int >\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:_\b_d\bde\bef\bfa\bau\bul\blt\btK\bKe\bey\byF\bFo\bor\brm\bma\bat\btt\bte\ber\br (_\bK_\be_\by key)\n-\u00a0\n-string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:_\b_m\bmu\bul\blt\bti\bir\bro\bob\bbo\bot\btK\bKe\bey\byF\bFo\bor\brm\bma\bat\btt\bte\ber\br (_\bK_\be_\by key)\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPr\bri\bin\bnt\btK\bKe\bey\by (_\bK_\be_\by key, const std::string &s=\"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n- &keyFormatter=DefaultKeyFormatter)\n-\u00a0 Utility function to print one key with optional prefix.\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPr\bri\bin\bnt\btK\bKe\bey\byL\bLi\bis\bst\bt (const _\bK_\be_\by_\bL_\bi_\bs_\bt &keys, const std::string &s=\"\",\n- const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter=DefaultKeyFormatter)\n-\u00a0 Utility function to print sets of keys with optional prefix.\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPr\bri\bin\bnt\btK\bKe\bey\byV\bVe\bec\bct\bto\bor\br (const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys, const std::string &s=\"\",\n- const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter=DefaultKeyFormatter)\n-\u00a0 Utility function to print sets of keys with optional prefix.\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPr\bri\bin\bnt\btK\bKe\bey\byS\bSe\bet\bt (const _\bK_\be_\by_\bS_\be_\bt &keys, const std::string &s=\"\", const\n- _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter=DefaultKeyFormatter)\n-\u00a0 Utility function to print sets of keys with optional prefix.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Base class for cliques of a BayesTree.\n Author\n- Richard Roberts\n- Alex Cunningham\n- Date\n- Feb 20, 2012\n- Author\n- Richard Roberts\n- Date\n- Feb 20, 2012\n+ Richard Roberts and Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bK_\be_\by_\b._\bh\n+ * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00662.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00662.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,3 @@\n var a00662 = [\n- [\"gtsam::StreamedKey\", \"a03656.html\", null],\n- [\"gtsam::key_formatter\", \"a03660.html\", null],\n- [\"gtsam::traits< Key >\", \"a03664.html\", null],\n- [\"KeyFormatter\", \"a00662.html#ae4b4e8e7f0d745882c6a02b507d5bffe\", null],\n- [\"KeyVector\", \"a00662.html#a1c320e42b033352fbbd8266e3bd5faad\", null],\n- [\"PrintKey\", \"a00662.html#a4f9e295c4f7086ce05cbe37aeeca47fe\", null],\n- [\"PrintKeyList\", \"a00662.html#aab7ddea9b0bc36f296327e0ec08c4ef0\", null],\n- [\"PrintKeySet\", \"a00662.html#aac25d6c8afb07054416ba6727685bf55\", null],\n- [\"PrintKeyVector\", \"a00662.html#a4c14be406d50f65bd404429a7b1d3af0\", null]\n+ [\"gtsam::BayesTreeCliqueBase< DERIVED, FACTORGRAPH >\", \"a03552.html\", \"a03552\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00662_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00662_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTreeCliqueBase.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
Key.h
\n+
BayesTreeCliqueBase.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,132 +114,210 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-
20#include <gtsam/base/FastList.h>
\n-
21#include <gtsam/base/FastMap.h>
\n-
22#include <gtsam/base/FastSet.h>
\n-\n-
24#include <gtsam/base/Testable.h>
\n-
25#include <gtsam/base/types.h>
\n-
26#include <gtsam/dllexport.h>
\n-
27
\n-
28#include <functional>
\n-
29
\n-
30#include <iosfwd>
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
35using KeyFormatter = std::function<std::string(Key)>;
\n-
36
\n-
37// Helper function for DefaultKeyFormatter
\n-
38GTSAM_EXPORT std::string _defaultKeyFormatter(Key key);
\n-
39
\n-
43static const KeyFormatter DefaultKeyFormatter = &_defaultKeyFormatter;
\n-
44
\n-
45// Helper function for Multi-robot Key Formatter
\n-
46GTSAM_EXPORT std::string _multirobotKeyFormatter(gtsam::Key key);
\n-
47
\n-
54static const gtsam::KeyFormatter MultiRobotKeyFormatter =
\n-
55 &_multirobotKeyFormatter;
\n-
56
\n-
\n-\n-
59 const Key &key_;
\n-
60 explicit StreamedKey(const Key &key) : key_(key) {}
\n-
61 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const StreamedKey &);
\n-
62};
\n-
\n-
63
\n-
\n-\n-
73 public:
\n-
74 explicit key_formatter(KeyFormatter v) : formatter_(v) {}
\n-
75 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const key_formatter &);
\n-
76 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const StreamedKey &);
\n-
77
\n-
78 private:
\n-
79 KeyFormatter formatter_;
\n-
80 static void *&property(std::ios_base &s);
\n-
81 static void set_property(std::ios_base &s, const KeyFormatter &f);
\n-
82 static KeyFormatter *get_property(std::ios_base &s);
\n-
83};
\n-
\n-
84
\n-\n-
87
\n-
88// TODO(frank): Nothing fast about these :-(
\n-\n-
90using KeySet = FastSet<Key>;
\n-
91using KeyGroupMap = FastMap<Key, int>;
\n-
92
\n-
94GTSAM_EXPORT void PrintKey(
\n-
95 Key key, const std::string &s = "",
\n-
96 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
\n-
97
\n-
99GTSAM_EXPORT void PrintKeyList(
\n-
100 const KeyList &keys, const std::string &s = "",
\n-
101 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
\n-
102
\n-
104GTSAM_EXPORT void PrintKeyVector(
\n-
105 const KeyVector &keys, const std::string &s = "",
\n-
106 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
\n-
107
\n-
109GTSAM_EXPORT void PrintKeySet(
\n-
110 const KeySet &keys, const std::string &s = "",
\n-
111 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
\n-
112
\n-
113// Define Key to be Testable by specializing gtsam::traits
\n-
114template<typename T> struct traits;
\n-
115
\n-
116template <>
\n-
\n-
117struct traits<Key> {
\n-
118 static void Print(const Key& val, const std::string& str = "") {
\n-
119 PrintKey(val, str);
\n-
120 }
\n-
121 static bool Equals(const Key& val1, const Key& val2, double tol = 1e-8) {
\n-
122 return val1 == val2;
\n-
123 }
\n-
124};
\n-
\n-
125
\n-
126} // namespace gtsam
\n+
20#include <gtsam/inference/Key.h>
\n+\n+
22#include <gtsam/base/types.h>
\n+\n+
24#include <boost/optional.hpp>
\n+
25
\n+
26#include <string>
\n+
27#include <mutex>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n+
31 // Forward declarations
\n+
32 template<class CLIQUE> class BayesTree;
\n+
33 template<class GRAPH> struct EliminationTraits;
\n+
34
\n+
48 template<class DERIVED, class FACTORGRAPH>
\n+
\n+\n+
50 {
\n+
51 private:
\n+\n+
53 typedef DERIVED DerivedType;
\n+
54 typedef EliminationTraits<FACTORGRAPH> EliminationTraitsType;
\n+
55 typedef boost::shared_ptr<This> shared_ptr;
\n+
56 typedef boost::weak_ptr<This> weak_ptr;
\n+
57 typedef boost::shared_ptr<DerivedType> derived_ptr;
\n+
58 typedef boost::weak_ptr<DerivedType> derived_weak_ptr;
\n+
59
\n+
60 public:
\n+
61 typedef FACTORGRAPH FactorGraphType;
\n+
62 typedef typename EliminationTraitsType::BayesNetType BayesNetType;
\n+
63 typedef typename BayesNetType::ConditionalType ConditionalType;
\n+
64 typedef boost::shared_ptr<ConditionalType> sharedConditional;
\n+
65 typedef typename FactorGraphType::FactorType FactorType;
\n+
66 typedef typename FactorGraphType::Eliminate Eliminate;
\n+
67
\n+
68 protected:
\n+
69
\n+
72
\n+
74 BayesTreeCliqueBase() : problemSize_(1) {}
\n+
75
\n+
\n+
78 BayesTreeCliqueBase(const sharedConditional& conditional)
\n+
79 : conditional_(conditional), problemSize_(1) {}
\n+
\n+
80
\n+
\n+\n+
83 : conditional_(c.conditional_),
\n+
84 parent_(c.parent_),
\n+
85 children(c.children),
\n+
86 problemSize_(c.problemSize_),
\n+
87 is_root(c.is_root) {}
\n+
\n+
88
\n+
\n+\n+
91 conditional_ = c.conditional_;
\n+
92 parent_ = c.parent_;
\n+
93 children = c.children;
\n+
94 problemSize_ = c.problemSize_;
\n+
95 is_root = c.is_root;
\n+
96 return *this;
\n+
97 }
\n+
\n+
98
\n+
99 // Virtual destructor.
\n+
100 virtual ~BayesTreeCliqueBase() {}
\n+
101
\n+
103
\n+
105 mutable boost::optional<FactorGraphType> cachedSeparatorMarginal_;
\n+\n+
111
\n+
112 public:
\n+
113 sharedConditional conditional_;
\n+
114 derived_weak_ptr parent_;
\n+\n+
116 int problemSize_;
\n+
117
\n+
118 bool is_root = false;
\n+
119
\n+
123 void setEliminationResult(const typename FactorGraphType::EliminationResult& eliminationResult);
\n+
124
\n
127
\n-
128
\n-
129
\n+
129 bool equals(const DERIVED& other, double tol = 1e-9) const;
\n
130
\n-
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n-
Typedefs for easier changing of types.
\n-
A thin wrapper around std::set that uses boost's fast_pool_allocator.
\n-
Concept check for values that can be used in unit tests.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
132 virtual void print(
\n+
133 const std::string& s = "",
\n+
134 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
135
\n+
139
\n+
141 const sharedConditional& conditional() const { return conditional_; }
\n+
142
\n+
144 inline bool isRoot() const { return parent_.expired(); }
\n+
145
\n+
147 size_t nrChildren() const { return children.size(); }
\n+
148
\n+
150 const derived_ptr operator[](size_t i) const { return children[i]; }
\n+
151
\n+
153 size_t treeSize() const;
\n+
154
\n+
156 size_t numCachedSeparatorMarginals() const;
\n+
157
\n+
159 derived_ptr parent() const { return parent_.lock(); }
\n+
160
\n+
162 int problemSize() const { return problemSize_; }
\n+
163
\n+
167
\n+
169 BayesNetType shortcut(const derived_ptr& root, Eliminate function = EliminationTraitsType::DefaultEliminate) const;
\n+
170
\n+
172 FactorGraphType separatorMarginal(Eliminate function = EliminationTraitsType::DefaultEliminate) const;
\n+
173
\n+
175 FactorGraphType marginal2(Eliminate function = EliminationTraitsType::DefaultEliminate) const;
\n+
176
\n+\n+
182
\n+
183 const boost::optional<FactorGraphType>& cachedSeparatorMarginal() const {
\n+
184 std::lock_guard<std::mutex> marginalLock(cachedSeparatorMarginalMutex_);
\n+\n+
186 }
\n+
187
\n+
188 friend class BayesTree<DerivedType>;
\n+
189
\n+
190 protected:
\n+
191
\n+
193 KeyVector separator_setminus_B(const derived_ptr& B) const;
\n+
194
\n+
198 KeyVector shortcut_indices(const derived_ptr& B, const FactorGraphType& p_Cp_B) const;
\n+
199
\n+
\n+\n+
202 std::lock_guard<std::mutex> marginalLock(cachedSeparatorMarginalMutex_);
\n+
203 cachedSeparatorMarginal_ = boost::none;
\n+
204 }
\n+
\n+
205
\n+
206 private:
\n+
207
\n+\n+
210 template<class ARCHIVE>
\n+
211 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
212 if(!parent_.lock()) {
\n+
213 is_root = true;
\n+
214 }
\n+
215 ar & BOOST_SERIALIZATION_NVP(is_root);
\n+
216 ar & BOOST_SERIALIZATION_NVP(conditional_);
\n+
217 if (!is_root) { // TODO(fan): Workaround for boost/serialization #119
\n+
218 ar & BOOST_SERIALIZATION_NVP(parent_);
\n+
219 }
\n+
220 ar & BOOST_SERIALIZATION_NVP(children);
\n+
221 }
\n+
222
\n+
224
\n+
225 };
\n+
\n+
226
\n+
227}
\n+
Typedefs for easier changing of types.
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
Variable ordering for the elimination algorithm.
\n+\n
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
void PrintKeyVector(const KeyVector &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition Key.cpp:77
\n-
void PrintKey(Key key, const string &s, const KeyFormatter &keyFormatter)
Utility function to print one key with optional prefix.
Definition Key.cpp:40
\n-
void PrintKeyList(const KeyList &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition Key.cpp:72
\n-
void PrintKeySet(const KeySet &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition Key.cpp:82
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-\n-
To use the key_formatter on Keys, they must be wrapped in a StreamedKey.
Definition Key.h:58
\n-
Output stream manipulator that will format gtsam::Keys according to the given KeyFormatter,...
Definition Key.h:72
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n+
This is the base class for BayesTree cliques.
Definition BayesTreeCliqueBase.h:50
\n+
const derived_ptr operator[](size_t i) const
Return the child at index i.
Definition BayesTreeCliqueBase.h:150
\n+
BayesTreeCliqueBase & operator=(const BayesTreeCliqueBase &c)
Shallow copy assignment constructor.
Definition BayesTreeCliqueBase.h:90
\n+
void deleteCachedShortcutsNonRecursive()
Non-recursive delete cached shortcuts and marginals - internal only.
Definition BayesTreeCliqueBase.h:201
\n+
size_t nrChildren() const
Return the number of children.
Definition BayesTreeCliqueBase.h:147
\n+
int problemSize() const
Problem size (used for parallel traversal)
Definition BayesTreeCliqueBase.h:162
\n+
BayesTreeCliqueBase()
Default constructor.
Definition BayesTreeCliqueBase.h:74
\n+
derived_ptr parent() const
return a shared_ptr to the parent clique
Definition BayesTreeCliqueBase.h:159
\n+
size_t treeSize() const
The size of subtree rooted at this clique, i.e., nr of Cliques.
Definition BayesTreeCliqueBase-inst.h:84
\n+
BayesTreeCliqueBase(const sharedConditional &conditional)
Construct from a conditional, leaving parent and child pointers uninitialized.
Definition BayesTreeCliqueBase.h:78
\n+
std::mutex cachedSeparatorMarginalMutex_
This protects Cached seperator marginal P(S) from concurrent read/writes as many the functions which ...
Definition BayesTreeCliqueBase.h:110
\n+
bool isRoot() const
Return true if this clique is the root of a Bayes tree.
Definition BayesTreeCliqueBase.h:144
\n+
BayesTreeCliqueBase(const BayesTreeCliqueBase &c)
Shallow copy constructor.
Definition BayesTreeCliqueBase.h:82
\n+
FactorGraphType marginal2(Eliminate function=EliminationTraitsType::DefaultEliminate) const
return the marginal P(C) of the clique, using marginal caching
Definition BayesTreeCliqueBase-inst.h:195
\n+
FactorGraphType separatorMarginal(Eliminate function=EliminationTraitsType::DefaultEliminate) const
return the marginal P(S) on the separator
Definition BayesTreeCliqueBase-inst.h:147
\n+
BayesNetType shortcut(const derived_ptr &root, Eliminate function=EliminationTraitsType::DefaultEliminate) const
return the conditional P(S|Root) on the separator given the root
Definition BayesTreeCliqueBase-inst.h:113
\n+
void deleteCachedShortcuts()
This deletes the cached shortcuts of all cliques (subtree) below this clique.
Definition BayesTreeCliqueBase-inst.h:207
\n+
KeyVector shortcut_indices(const derived_ptr &B, const FactorGraphType &p_Cp_B) const
Determine variable indices to keep in recursive separator shortcut calculation The factor graph p_Cp_...
Definition BayesTreeCliqueBase-inst.h:57
\n+
const sharedConditional & conditional() const
Access the conditional.
Definition BayesTreeCliqueBase.h:141
\n+
friend class boost::serialization::access
Serialization function.
Definition BayesTreeCliqueBase.h:209
\n+
KeyVector separator_setminus_B(const derived_ptr &B) const
Calculate set for shortcut calculations.
Definition BayesTreeCliqueBase-inst.h:45
\n+
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print this node
Definition BayesTreeCliqueBase-inst.h:76
\n+
size_t numCachedSeparatorMarginals() const
Collect number of cliques with cached separator marginals.
Definition BayesTreeCliqueBase-inst.h:93
\n+
boost::optional< FactorGraphType > cachedSeparatorMarginal_
This stores the Cached separator marginal P(S)
Definition BayesTreeCliqueBase.h:105
\n+
void setEliminationResult(const typename FactorGraphType::EliminationResult &eliminationResult)
Fill the elimination result produced during elimination.
Definition BayesTreeCliqueBase-inst.h:27
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Key.h\n+BayesTreeCliqueBase.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,172 +16,300 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh>\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n 23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-26#include \n-27\n-28#include \n-29\n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-_\b3_\b5using _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br = std::function;\n-36\n-37// Helper function for DefaultKeyFormatter\n-38GTSAM_EXPORT std::string _defaultKeyFormatter(_\bK_\be_\by key);\n-39\n-43static const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br DefaultKeyFormatter = &_defaultKeyFormatter;\n-44\n-45// Helper function for Multi-robot Key Formatter\n-46GTSAM_EXPORT std::string _multirobotKeyFormatter(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by key);\n-47\n-54static const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br MultiRobotKeyFormatter =\n-55 &_multirobotKeyFormatter;\n-56\n-_\b5_\b8struct _\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by {\n-59 const _\bK_\be_\by &key_;\n-60 explicit _\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by(const _\bK_\be_\by &key) : key_(key) {}\n-61 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const\n-_\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by &);\n-62};\n-63\n-_\b7_\b2class _\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br {\n-73 public:\n-74 explicit _\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br(_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br v) : formatter_(v) {}\n-75 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const\n-_\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &);\n-76 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const\n-_\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by &);\n-77\n-78 private:\n-79 _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br formatter_;\n-80 static void *&property(std::ios_base &s);\n-81 static void set_property(std::ios_base &s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &f);\n-82 static _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br *get_property(std::ios_base &s);\n-83};\n-84\n-_\b8_\b6using _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br = _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\be_\by_\b>;\n-87\n-88// TODO(frank): Nothing fast about these :-(\n-89using _\bK_\be_\by_\bL_\bi_\bs_\bt = _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b>;\n-90using _\bK_\be_\by_\bS_\be_\bt = _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\bK_\be_\by_\b>;\n-91using KeyGroupMap = _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bi_\bn_\bt_\b>;\n-92\n-94GTSAM_EXPORT void _\bP_\br_\bi_\bn_\bt_\bK_\be_\by(\n-95 _\bK_\be_\by key, const std::string &s = \"\",\n-96 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter);\n-97\n-99GTSAM_EXPORT void _\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bL_\bi_\bs_\bt(\n-100 const _\bK_\be_\by_\bL_\bi_\bs_\bt &keys, const std::string &s = \"\",\n-101 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter);\n-102\n-104GTSAM_EXPORT void _\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br(\n-105 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys, const std::string &s = \"\",\n-106 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter);\n-107\n-109GTSAM_EXPORT void _\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bS_\be_\bt(\n-110 const _\bK_\be_\by_\bS_\be_\bt &keys, const std::string &s = \"\",\n-111 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter);\n-112\n-113// Define Key to be Testable by specializing gtsam::traits\n-114template struct _\bt_\br_\ba_\bi_\bt_\bs;\n-115\n-116template <>\n-_\b1_\b1_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bK_\be_\by> {\n-118 static void Print(const _\bK_\be_\by& val, const std::string& str = \"\") {\n-119 _\bP_\br_\bi_\bn_\bt_\bK_\be_\by(val, str);\n-120 }\n-121 static bool Equals(const _\bK_\be_\by& val1, const _\bK_\be_\by& val2, double tol = 1e-8) {\n-122 return val1 == val2;\n-123 }\n-124};\n-125\n-126} // namespace gtsam\n+24#include \n+25\n+26#include \n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+31 // Forward declarations\n+32 template class BayesTree;\n+33 template struct EliminationTraits;\n+34\n+48 template\n+_\b4_\b9 class _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+50 {\n+51 private:\n+52 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b,_\b _\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b> This;\n+53 typedef DERIVED DerivedType;\n+54 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b> EliminationTraitsType;\n+55 typedef boost::shared_ptr shared_ptr;\n+56 typedef boost::weak_ptr weak_ptr;\n+57 typedef boost::shared_ptr derived_ptr;\n+58 typedef boost::weak_ptr derived_weak_ptr;\n+59\n+60 public:\n+61 typedef FACTORGRAPH FactorGraphType;\n+62 typedef typename EliminationTraitsType::BayesNetType BayesNetType;\n+63 typedef typename BayesNetType::ConditionalType ConditionalType;\n+64 typedef boost::shared_ptr sharedConditional;\n+65 typedef typename FactorGraphType::FactorType FactorType;\n+66 typedef typename FactorGraphType::Eliminate Eliminate;\n+67\n+68 protected:\n+69\n+72\n+_\b7_\b4 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be() : problemSize_(1) {}\n+75\n+_\b7_\b8 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be(const sharedConditional& _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl)\n+79 : conditional_(_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl), problemSize_(1) {}\n+80\n+_\b8_\b2 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be(const _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be& c)\n+83 : conditional_(c.conditional_),\n+84 parent_(c.parent_),\n+85 children(c.children),\n+86 problemSize_(c.problemSize_),\n+87 is_root(c.is_root) {}\n+88\n+_\b9_\b0 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be& c) {\n+91 conditional_ = c.conditional_;\n+92 parent_ = c.parent_;\n+93 children = c.children;\n+94 problemSize_ = c.problemSize_;\n+95 is_root = c.is_root;\n+96 return *this;\n+97 }\n+98\n+99 // Virtual destructor.\n+100 virtual _\b~_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be() {}\n+101\n+103\n+_\b1_\b0_\b5 mutable boost::optional _\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b_;\n+_\b1_\b1_\b0 mutable std::mutex _\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bt_\be_\bx_\b_;\n+111\n+112 public:\n+113 sharedConditional conditional_;\n+114 derived_weak_ptr parent_;\n+115 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bd_\be_\br_\bi_\bv_\be_\bd_\b__\bp_\bt_\br_\b> children;\n+116 int problemSize_;\n+117\n+118 bool is_root = false;\n+119\n+123 void _\bs_\be_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(const typename FactorGraphType::\n+EliminationResult& eliminationResult);\n+124\n 127\n-128\n-129\n+129 bool _\be_\bq_\bu_\ba_\bl_\bs(const DERIVED& other, double tol = 1e-9) const;\n 130\n-_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n-A thin wrapper around std::list that uses boost's fast_pool_allocator.\n+132 virtual void _\bp_\br_\bi_\bn_\bt(\n+133 const std::string& s = \"\",\n+134 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+135\n+139\n+_\b1_\b4_\b1 const sharedConditional& _\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() const { return conditional_; }\n+142\n+_\b1_\b4_\b4 inline bool _\bi_\bs_\bR_\bo_\bo_\bt() const { return parent_.expired(); }\n+145\n+_\b1_\b4_\b7 size_t _\bn_\br_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn() const { return children.size(); }\n+148\n+_\b1_\b5_\b0 const derived_ptr _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](size_t i) const { return children[i]; }\n+151\n+153 size_t _\bt_\br_\be_\be_\bS_\bi_\bz_\be() const;\n+154\n+156 size_t _\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs() const;\n+157\n+_\b1_\b5_\b9 derived_ptr _\bp_\ba_\br_\be_\bn_\bt() const { return parent_.lock(); }\n+160\n+_\b1_\b6_\b2 int _\bp_\br_\bo_\bb_\bl_\be_\bm_\bS_\bi_\bz_\be() const { return problemSize_; }\n+163\n+167\n+169 BayesNetType _\bs_\bh_\bo_\br_\bt_\bc_\bu_\bt(const derived_ptr& root, Eliminate function =\n+EliminationTraitsType::DefaultEliminate) const;\n+170\n+172 FactorGraphType _\bs_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl(Eliminate function =\n+EliminationTraitsType::DefaultEliminate) const;\n+173\n+175 FactorGraphType _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b2(Eliminate function = EliminationTraitsType::\n+DefaultEliminate) const;\n+176\n+181 void _\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs();\n+182\n+183 const boost::optional& cachedSeparatorMarginal() const {\n+184 std::lock_guard marginalLock(_\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bt_\be_\bx_\b_);\n+185 return _\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b_;\n+186 }\n+187\n+188 friend class BayesTree;\n+189\n+190 protected:\n+191\n+193 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bs_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\b__\bs_\be_\bt_\bm_\bi_\bn_\bu_\bs_\b__\bB(const derived_ptr& B) const;\n+194\n+198 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bs_\bh_\bo_\br_\bt_\bc_\bu_\bt_\b__\bi_\bn_\bd_\bi_\bc_\be_\bs(const derived_ptr& B, const FactorGraphType&\n+p_Cp_B) const;\n+199\n+_\b2_\b0_\b1 void _\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs_\bN_\bo_\bn_\bR_\be_\bc_\bu_\br_\bs_\bi_\bv_\be() {\n+202 std::lock_guard marginalLock(_\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bt_\be_\bx_\b_);\n+203 _\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b_ = boost::none;\n+204 }\n+205\n+206 private:\n+207\n+_\b2_\b0_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+210 template\n+211 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+212 if(!parent_.lock()) {\n+213 is_root = true;\n+214 }\n+215 ar & BOOST_SERIALIZATION_NVP(is_root);\n+216 ar & BOOST_SERIALIZATION_NVP(conditional_);\n+217 if (!is_root) { // TODO(fan): Workaround for boost/serialization #119\n+218 ar & BOOST_SERIALIZATION_NVP(parent_);\n+219 }\n+220 ar & BOOST_SERIALIZATION_NVP(children);\n+221 }\n+222\n+224\n+225 };\n+226\n+227}\n _\bt_\by_\bp_\be_\bs_\b._\bh\n Typedefs for easier changing of types.\n-_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n-A thin wrapper around std::set that uses boost's fast_pool_allocator.\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n A thin wrapper around std::vector that uses a custom allocator.\n-_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n-A thin wrapper around std::map that uses boost's fast_pool_allocator.\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n+_\bK_\be_\by_\b._\bh\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n FastVector\n FastVector is a type alias to a std::vector with a custom memory allocator.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-void PrintKeyVector(const KeyVector &keys, const string &s, const KeyFormatter\n-&keyFormatter)\n-Utility function to print sets of keys with optional prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.cpp:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bK_\be_\by\n-void PrintKey(Key key, const string &s, const KeyFormatter &keyFormatter)\n-Utility function to print one key with optional prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.cpp:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bL_\bi_\bs_\bt\n-void PrintKeyList(const KeyList &keys, const string &s, const KeyFormatter\n-&keyFormatter)\n-Utility function to print sets of keys with optional prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.cpp:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bS_\be_\bt\n-void PrintKeySet(const KeySet &keys, const string &s, const KeyFormatter\n-&keyFormatter)\n-Utility function to print sets of keys with optional prefix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.cpp:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList is a thin wrapper around std::list that uses the boost\n-fast_pool_allocator instead of the de...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by\n-To use the key_formatter on Keys, they must be wrapped in a StreamedKey.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-Output stream manipulator that will format gtsam::Keys according to the given\n-KeyFormatter,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n+Traits class for eliminateable factor graphs, specifies the types that result\n+from elimination,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+This is the base class for BayesTree cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+const derived_ptr operator[](size_t i) const\n+Return the child at index i.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+BayesTreeCliqueBase & operator=(const BayesTreeCliqueBase &c)\n+Shallow copy assignment constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:90\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs_\bN_\bo_\bn_\bR_\be_\bc_\bu_\br_\bs_\bi_\bv_\be\n+void deleteCachedShortcutsNonRecursive()\n+Non-recursive delete cached shortcuts and marginals - internal only.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:201\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bn_\br_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn\n+size_t nrChildren() const\n+Return the number of children.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:147\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bb_\bl_\be_\bm_\bS_\bi_\bz_\be\n+int problemSize() const\n+Problem size (used for parallel traversal)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+BayesTreeCliqueBase()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\ba_\br_\be_\bn_\bt\n+derived_ptr parent() const\n+return a shared_ptr to the parent clique\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bt_\br_\be_\be_\bS_\bi_\bz_\be\n+size_t treeSize() const\n+The size of subtree rooted at this clique, i.e., nr of Cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+BayesTreeCliqueBase(const sharedConditional &conditional)\n+Construct from a conditional, leaving parent and child pointers uninitialized.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bt_\be_\bx_\b_\n+std::mutex cachedSeparatorMarginalMutex_\n+This protects Cached seperator marginal P(S) from concurrent read/writes as\n+many the functions which ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bi_\bs_\bR_\bo_\bo_\bt\n+bool isRoot() const\n+Return true if this clique is the root of a Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:144\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+BayesTreeCliqueBase(const BayesTreeCliqueBase &c)\n+Shallow copy constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b2\n+FactorGraphType marginal2(Eliminate function=EliminationTraitsType::\n+DefaultEliminate) const\n+return the marginal P(C) of the clique, using marginal caching\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bs_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl\n+FactorGraphType separatorMarginal(Eliminate function=EliminationTraitsType::\n+DefaultEliminate) const\n+return the marginal P(S) on the separator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:147\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bs_\bh_\bo_\br_\bt_\bc_\bu_\bt\n+BayesNetType shortcut(const derived_ptr &root, Eliminate\n+function=EliminationTraitsType::DefaultEliminate) const\n+return the conditional P(S|Root) on the separator given the root\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs\n+void deleteCachedShortcuts()\n+This deletes the cached shortcuts of all cliques (subtree) below this clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bs_\bh_\bo_\br_\bt_\bc_\bu_\bt_\b__\bi_\bn_\bd_\bi_\bc_\be_\bs\n+KeyVector shortcut_indices(const derived_ptr &B, const FactorGraphType &p_Cp_B)\n+const\n+Determine variable indices to keep in recursive separator shortcut calculation\n+The factor graph p_Cp_...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+const sharedConditional & conditional() const\n+Access the conditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:209\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bs_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\b__\bs_\be_\bt_\bm_\bi_\bn_\bu_\bs_\b__\bB\n+KeyVector separator_setminus_B(const derived_ptr &B) const\n+Calculate set for shortcut calculations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const\n+print this node\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n+size_t numCachedSeparatorMarginals() const\n+Collect number of cliques with cached separator marginals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bc_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b_\n+boost::optional< FactorGraphType > cachedSeparatorMarginal_\n+This stores the Cached separator marginal P(S)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b:_\b:_\bs_\be_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n+void setEliminationResult(const typename FactorGraphType::EliminationResult\n+&eliminationResult)\n+Fill the elimination result produced during elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase-inst.h:27\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bK_\be_\by_\b._\bh\n+ * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00665.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00665.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/JunctionTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminationTree-inst.h File Reference\n \n \n \n \n \n \n \n@@ -94,49 +94,36 @@\n \n \n \n \n \n
\n \n-
JunctionTree.h File Reference
\n+
EliminationTree-inst.h File Reference
\n
\n
\n \n-

The junction tree. \n-More...

\n-\n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::JunctionTree< BAYESTREE, GRAPH >
 A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree, with the additional property that it represents the clique tree associated with a Bayes Net. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

The junction tree.

\n-
Date
Feb 4, 2010
\n-
Author
Kai Ni
\n-
\n-Frank Dellaert
\n+
Author
Frank Dellaert
\n
\n Richard Roberts
\n+
Date
Oct 13, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-JunctionTree.h File Reference\n-The junction tree. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+EliminationTree-inst.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>\n- A _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be is a cluster tree, a set of variable clusters with\n-\u00a0 factors, arranged in a tree, with the additional property that it\n- represents the clique tree associated with a Bayes Net. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-The junction tree.\n- Date\n- Feb 4, 2010\n Author\n- Kai Ni\n Frank Dellaert\n Richard Roberts\n+ Date\n+ Oct 13, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00665_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00665_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/JunctionTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminationTree-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,79 +98,363 @@\n
No Matches
\n \n \n \n \n \n
\n-
JunctionTree.h
\n+
EliminationTree-inst.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4* Atlanta, Georgia 30332-0415
\n+
5* All Rights Reserved
\n+
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8 * See LICENSE for the license information
\n+
8* See LICENSE for the license information
\n
9
\n-
10 * -------------------------------------------------------------------------- */
\n+
10* -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n+
18#pragma once
\n+
19
\n+
20#include <boost/make_shared.hpp>
\n+
21#include <stack>
\n
22
\n-\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
27 // Forward declarations
\n-
28 template<class BAYESNET, class GRAPH> class EliminationTree;
\n+
23#include <gtsam/base/timing.h>
\n+\n+\n+\n+\n+\n
29
\n-
49 template<class BAYESTREE, class GRAPH>
\n-
\n-
50 class JunctionTree : public EliminatableClusterTree<BAYESTREE, GRAPH> {
\n-
51
\n-
52 public:
\n-
53
\n-\n-
55 typedef boost::shared_ptr<This> shared_ptr;
\n-\n-
57
\n-
58 protected:
\n+
30namespace gtsam {
\n+
31
\n+
32 /* ************************************************************************* */
\n+
33 template<class BAYESNET, class GRAPH>
\n+\n+
35 EliminationTree<BAYESNET,GRAPH>::Node::eliminate(
\n+
36 const boost::shared_ptr<BayesNetType>& output,
\n+
37 const Eliminate& function, const FastVector<sharedFactor>& childrenResults) const
\n+
38 {
\n+
39 // This function eliminates one node (Node::eliminate) - see below eliminate for the whole tree.
\n+
40
\n+
41 assert(childrenResults.size() == children.size());
\n+
42
\n+
43 // Gather factors
\n+
44 FactorGraphType gatheredFactors;
\n+
45 gatheredFactors.reserve(factors.size() + children.size());
\n+
46 gatheredFactors.push_back(factors.begin(), factors.end());
\n+
47 gatheredFactors.push_back(childrenResults.begin(), childrenResults.end());
\n+
48
\n+
49 // Do dense elimination step
\n+
50 KeyVector keyAsVector(1); keyAsVector[0] = key;
\n+
51 auto eliminationResult = function(gatheredFactors, Ordering(keyAsVector));
\n+
52
\n+
53 // Add conditional to BayesNet
\n+
54 output->push_back(eliminationResult.first);
\n+
55
\n+
56 // Return result
\n+
57 return eliminationResult.second;
\n+
58 }
\n
59
\n-
62
\n-
64 template<class ETREE>
\n-
65 static This FromEliminationTree(const ETREE& eliminationTree) { return This(eliminationTree); }
\n-
66
\n-
68 template<class ETREE_BAYESNET, class ETREE_GRAPH>
\n-\n-
70
\n-
72
\n-
73 protected:
\n+
60 /* ************************************************************************* */
\n+
61 template<class BAYESNET, class GRAPH>
\n+
62 void EliminationTree<BAYESNET,GRAPH>::Node::print(
\n+
63 const std::string& str, const KeyFormatter& keyFormatter) const
\n+
64 {
\n+
65 std::cout << str << "(" << keyFormatter(key) << ")\\n";
\n+
66 for(const sharedFactor& factor: factors) {
\n+
67 if(factor)
\n+
68 factor->print(str);
\n+
69 else
\n+
70 std::cout << str << "null factor\\n";
\n+
71 }
\n+
72 }
\n+
73
\n
74
\n-
75 // Private default constructor (used in static construction methods)
\n-
76 JunctionTree() {}
\n-
77
\n-
78 };
\n-
\n-
79
\n-
80}
\n-
Collects factorgraph fragments defined on variable clusters, arranged in a tree.
\n+
75 /* ************************************************************************* */
\n+
76 template<class BAYESNET, class GRAPH>
\n+
\n+\n+
78 const VariableIndex& structure, const Ordering& order)
\n+
79 {
\n+
80 gttic(EliminationTree_Contructor);
\n+
81
\n+
82 // Number of factors and variables - NOTE in the case of partial elimination, n here may
\n+
83 // be fewer variables than are actually present in the graph.
\n+
84 const size_t m = graph.size();
\n+
85 const size_t n = order.size();
\n+
86
\n+
87 static const size_t none = std::numeric_limits<size_t>::max();
\n+
88
\n+
89 // Allocate result parent vector and vector of last factor columns
\n+\n+
91 FastVector<size_t> parents(n, none);
\n+
92 FastVector<size_t> prevCol(m, none);
\n+
93 FastVector<bool> factorUsed(m, false);
\n+
94
\n+
95 try {
\n+
96 // for column j \\in 1 to n do
\n+
97 for (size_t j = 0; j < n; j++)
\n+
98 {
\n+
99 // Retrieve the factors involving this variable and create the current node
\n+
\n+
100 const FactorIndices& factors = structure[order[j]];
\n+
101 const sharedNode node = boost::make_shared<Node>();
\n+
102 node->key = order[j];
\n+
103
\n+
104 // for row i \\in Struct[A*j] do
\n+
105 node->children.reserve(factors.size());
\n+
106 node->factors.reserve(factors.size());
\n+
107 for(const size_t i: factors) {
\n+
\n+
108 // If we already hit a variable in this factor, make the subtree containing the previous
\n+
109 // variable in this factor a child of the current node. This means that the variables
\n+
110 // eliminated earlier in the factor depend on the later variables in the factor. If we
\n+
111 // haven't yet hit a variable in this factor, we add the factor to the current node.
\n+
112 // TODO: Store root shortcuts instead of parents.
\n+
113 if (prevCol[i] != none) {
\n+
114 size_t k = prevCol[i];
\n+
115 // Find root r of the current tree that contains k. Use raw pointers in computing the
\n+
\n+
116 // parents to avoid changing the reference counts while traversing up the tree.
\n+
117 size_t r = k;
\n+
118 while (parents[r] != none)
\n+
119 r = parents[r];
\n+
120 // If the root of the subtree involving this node is actually the current node,
\n+
121 // TODO: what does this mean? forest?
\n+
122 if (r != j) {
\n+
123 // Now that we found the root, hook up parent and child pointers in the nodes.
\n+
124 parents[r] = j;
\n+
125 node->children.push_back(nodes[r]);
\n+
126 }
\n+
127 } else {
\n+
128 // Add the factor to the current node since we are at the first variable in this factor.
\n+
129 node->factors.push_back(graph[i]);
\n+
\n+
130 factorUsed[i] = true;
\n+
131 }
\n+
132 prevCol[i] = j;
\n+
133 }
\n+
134 nodes[j] = node;
\n+
135 }
\n+
136 } catch(std::invalid_argument& e) {
\n+
\n+
137 // If this is thrown from structure[order[j]] above, it means that it was requested to
\n+
138 // eliminate a variable not present in the graph, so throw a more informative error message.
\n+
139 (void)e; // Prevent unused variable warning
\n+
140 throw std::invalid_argument("EliminationTree: given ordering contains variables that are not involved in the factor graph");
\n+
141 } catch(...) {
\n+
\n+
142 throw;
\n+
143 }
\n+
144
\n+
145 // Find roots
\n+
146 assert(parents.empty() || parents.back() == none); // We expect the last-eliminated node to be a root no matter what
\n+
147 for(size_t j = 0; j < n; ++j)
\n+
148 if(parents[j] == none)
\n+
149 roots_.push_back(nodes[j]);
\n+
150
\n+
151 // Gather remaining factors (exclude null factors)
\n+
152 for(size_t i = 0; i < m; ++i)
\n+
153 if(!factorUsed[i] && graph[i])
\n+
154 remainingFactors_.push_back(graph[i]);
\n+
155 }
\n+
156
\n+
\n+
157 /* ************************************************************************* */
\n+
158 template<class BAYESNET, class GRAPH>
\n+
\n+\n+
160 const FactorGraphType& factorGraph, const Ordering& order)
\n+
161 {
\n+
162 gttic(ET_Create2);
\n+
163 // Build variable index first
\n+
164 const VariableIndex variableIndex(factorGraph);
\n+
165 This temp(factorGraph, variableIndex, order);
\n+
166 this->swap(temp); // Swap in the tree, and temp will be deleted
\n+
167 }
\n+
\n+
168
\n+
169 /* ************************************************************************* */
\n+
170 template<class BAYESNET, class GRAPH>
\n+\n+
\n+\n+
173 {
\n+
174 // Start by duplicating the tree.
\n+\n+
176
\n+
177 // Assign the remaining factors - these are pointers to factors in the original factor graph and
\n+
178 // we do not clone them.
\n+
179 remainingFactors_ = other.remainingFactors_;
\n+
180
\n+
181 return *this;
\n+
182 }
\n+
\n+
183
\n+
184 /* ************************************************************************* */
\n+
185 template<class BAYESNET, class GRAPH>
\n+
186 std::pair<boost::shared_ptr<BAYESNET>, boost::shared_ptr<GRAPH> >
\n+
\n+\n+
188 {
\n+
189 gttic(EliminationTree_eliminate);
\n+
190 // Allocate result
\n+
191 auto result = boost::make_shared<BayesNetType>();
\n+
192
\n+
193 // Run tree elimination algorithm
\n+
194 FastVector<sharedFactor> remainingFactors = inference::EliminateTree(result, *this, function);
\n+
195
\n+
196 // Add remaining factors that were not involved with eliminated variables
\n+
197 auto allRemainingFactors = boost::make_shared<FactorGraphType>();
\n+
198 allRemainingFactors->push_back(remainingFactors_.begin(), remainingFactors_.end());
\n+
199 allRemainingFactors->push_back(remainingFactors.begin(), remainingFactors.end());
\n+
200
\n+
201 // Return result
\n+
202 return std::make_pair(result, allRemainingFactors);
\n+
203 }
\n+
\n+
204
\n+
205 /* ************************************************************************* */
\n+
206 template<class BAYESNET, class GRAPH>
\n+
\n+
207 void EliminationTree<BAYESNET,GRAPH>::print(const std::string& name, const KeyFormatter& formatter) const
\n+
208 {
\n+
209 treeTraversal::PrintForest(*this, name, formatter);
\n+
210 }
\n+
\n+
211
\n+
212 /* ************************************************************************* */
\n+
213 template<class BAYESNET, class GRAPH>
\n+
\n+
214 bool EliminationTree<BAYESNET,GRAPH>::equals(const This& expected, double tol) const
\n+
215 {
\n+
216 // Depth-first-traversal stacks
\n+
217 std::stack<sharedNode, FastVector<sharedNode> > stack1, stack2;
\n+
218
\n+
219 // Add roots in sorted order
\n+
220 {
\n+\n+
222 for(const sharedNode& root: this->roots_) { keys.insert(std::make_pair(root->key, root)); }
\n+
223 typedef typename FastMap<Key,sharedNode>::value_type Key_Node;
\n+
224 for(const Key_Node& key_node: keys) { stack1.push(key_node.second); }
\n+
225 }
\n+
226 {
\n+\n+
228 for(const sharedNode& root: expected.roots_) { keys.insert(std::make_pair(root->key, root)); }
\n+
229 typedef typename FastMap<Key,sharedNode>::value_type Key_Node;
\n+
230 for(const Key_Node& key_node: keys) { stack2.push(key_node.second); }
\n+
231 }
\n+
232
\n+
233 // Traverse, adding children in sorted order
\n+
234 while(!stack1.empty() && !stack2.empty()) {
\n+
235 // Pop nodes
\n+
236 sharedNode node1 = stack1.top();
\n+
237 stack1.pop();
\n+
238 sharedNode node2 = stack2.top();
\n+
239 stack2.pop();
\n+
240
\n+
241 // Compare nodes
\n+
242 if(node1->key != node2->key)
\n+
243 return false;
\n+
244 if(node1->factors.size() != node2->factors.size()) {
\n+
245 return false;
\n+
246 } else {
\n+
247 for(typename Node::Factors::const_iterator it1 = node1->factors.begin(), it2 = node2->factors.begin();
\n+
248 it1 != node1->factors.end(); ++it1, ++it2) // Only check it1 == end because we already returned false for different counts
\n+
249 {
\n+
250 if(*it1 && *it2) {
\n+
251 if(!(*it1)->equals(**it2, tol))
\n+
252 return false;
\n+
253 } else if((*it1 && !*it2) || (*it2 && !*it1)) {
\n+
254 return false;
\n+
255 }
\n+
256 }
\n+
257 }
\n+
258
\n+
259 // Add children in sorted order
\n+
260 {
\n+\n+
262 for(const sharedNode& node: node1->children) { keys.insert(std::make_pair(node->key, node)); }
\n+
263 typedef typename FastMap<Key,sharedNode>::value_type Key_Node;
\n+
264 for(const Key_Node& key_node: keys) { stack1.push(key_node.second); }
\n+
265 }
\n+
266 {
\n+\n+
268 for(const sharedNode& node: node2->children) { keys.insert(std::make_pair(node->key, node)); }
\n+
269 typedef typename FastMap<Key,sharedNode>::value_type Key_Node;
\n+
270 for(const Key_Node& key_node: keys) { stack2.push(key_node.second); }
\n+
271 }
\n+
272 }
\n+
273
\n+
274 // If either stack is not empty, the number of nodes differed
\n+
275 if(!stack1.empty() || !stack2.empty())
\n+
276 return false;
\n+
277
\n+
278 return true;
\n+
279 }
\n+
\n+
280
\n+
281 /* ************************************************************************* */
\n+
282 template<class BAYESNET, class GRAPH>
\n+
\n+\n+
284 roots_.swap(other.roots_);
\n+
285 remainingFactors_.swap(other.remainingFactors_);
\n+
286 }
\n+
\n+
\n+
287
\n+
288
\n+
289}
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+\n+
Timing utilities.
\n+
Variable ordering for the elimination algorithm.
\n+
Contains generic inference algorithms that convert between templated graphical models,...
\n+\n+\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A cluster-tree that eliminates to a Bayes tree.
Definition ClusterTree.h:184
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const FOREST &forest)
Clone a tree, copy-constructing new nodes (calling boost::make_shared) and setting up child pointers ...
Definition treeTraversal-inst.h:189
\n+
void PrintForest(const FOREST &forest, std::string str, const KeyFormatter &keyFormatter)
Print a tree, prefixing each line with str, and formatting keys using keyFormatter.
Definition treeTraversal-inst.h:219
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n-
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n-
static This FromEliminationTree(const ETREE &eliminationTree)
Build the junction tree from an elimination tree.
Definition JunctionTree.h:65
\n-
JunctionTree< BAYESTREE, GRAPH > This
This class.
Definition JunctionTree.h:54
\n-
EliminatableClusterTree< BAYESTREE, GRAPH > Base
Our base class.
Definition JunctionTree.h:56
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition JunctionTree.h:55
\n+
bool equals(const This &other, double tol=1e-9) const
Test whether the tree is equal to another.
Definition EliminationTree-inst.h:214
\n+
void print(const std::string &name="EliminationTree: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
Print the tree to cout.
Definition EliminationTree-inst.h:207
\n+
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminate(Eliminate function) const
Eliminate the factors to a Bayes net and remaining factor graph.
Definition EliminationTree-inst.h:187
\n+
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition EliminationTree-inst.h:172
\n+
FastVector< sharedNode > roots_
concept check
Definition EliminationTree.h:86
\n+
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition EliminationTree.h:60
\n+
GRAPH FactorGraphType
The factor graph type.
Definition EliminationTree.h:58
\n+
void swap(This &other)
Swap the data of this tree with another one, this operation is very fast.
Definition EliminationTree-inst.h:283
\n+
EliminationTree()
Protected default constructor.
Definition EliminationTree.h:161
\n+
boost::shared_ptr< Node > sharedNode
Shared pointer to Node.
Definition EliminationTree.h:80
\n+
const FastVector< sharedFactor > & remainingFactors() const
Return the remaining factors that are not pulled into elimination.
Definition EliminationTree.h:154
\n+
Key key
key associated with root
Definition EliminationTree.h:70
\n+
Children children
sub-trees
Definition EliminationTree.h:72
\n+
Factors factors
factors associated with root
Definition EliminationTree.h:71
\n+
Definition Ordering.h:34
\n+
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,94 +1,449 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-JunctionTree.h\n+EliminationTree-inst.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4* Atlanta, Georgia 30332-0415\n+5* All Rights Reserved\n+6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8 * See LICENSE for the license information\n+8* See LICENSE for the license information\n 9\n-10 * -------------------------------------------------------------------------\n+10* -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n+18#pragma once\n+19\n+20#include \n+21#include \n 22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-27 // Forward declarations\n-28 template class EliminationTree;\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n 29\n-49 template\n-_\b5_\b0 class _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be : public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be {\n-51\n-52 public:\n-53\n-_\b5_\b4 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b> _\bT_\bh_\bi_\bs;\n-_\b5_\b5 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-_\b5_\b6 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b> _\bB_\ba_\bs_\be;\n-57\n-58 protected:\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+32 /* *************************************************************************\n+*/\n+33 template\n+34 typename _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+35 EliminationTree::Node::eliminate(\n+36 const boost::shared_ptr& output,\n+37 const Eliminate& function, const FastVector& childrenResults)\n+const\n+38 {\n+39 // This function eliminates one node (Node::eliminate) - see below eliminate\n+for the whole tree.\n+40\n+41 assert(childrenResults.size() == _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn.size());\n+42\n+43 // Gather factors\n+44 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be gatheredFactors;\n+45 gatheredFactors.reserve(_\bf_\ba_\bc_\bt_\bo_\br_\bs.size() + _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn.size());\n+46 gatheredFactors.push_back(_\bf_\ba_\bc_\bt_\bo_\br_\bs.begin(), _\bf_\ba_\bc_\bt_\bo_\br_\bs.end());\n+47 gatheredFactors.push_back(childrenResults.begin(), childrenResults.end());\n+48\n+49 // Do dense elimination step\n+50 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keyAsVector(1); keyAsVector[0] = _\bk_\be_\by;\n+51 auto eliminationResult = function(gatheredFactors, Ordering(keyAsVector));\n+52\n+53 // Add conditional to BayesNet\n+54 output->push_back(eliminationResult.first);\n+55\n+56 // Return result\n+57 return eliminationResult.second;\n+58 }\n 59\n-62\n-64 template\n-_\b6_\b5 static _\bT_\bh_\bi_\bs _\bF_\br_\bo_\bm_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const ETREE& eliminationTree) { return _\bT_\bh_\bi_\bs\n-(eliminationTree); }\n-66\n-68 template\n-69 _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bE_\bT_\bR_\bE_\bE_\b__\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\b _\bE_\bT_\bR_\bE_\bE_\b__\bG_\bR_\bA_\bP_\bH_\b>&\n-eliminationTree);\n-70\n-72\n-73 protected:\n+60 /* *************************************************************************\n+*/\n+61 template\n+62 void EliminationTree::Node::print(\n+63 const std::string& str, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const\n+64 {\n+65 std::cout << str << \"(\" << keyFormatter(key) << \")\\n\";\n+66 for(const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor: factors) {\n+67 if(factor)\n+68 factor->print(str);\n+69 else\n+70 std::cout << str << \"null factor\\n\";\n+71 }\n+72 }\n+73\n 74\n-75 // Private default constructor (used in static construction methods)\n-76 _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be() {}\n-77\n-78 };\n-79\n-80}\n-_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh\n-Collects factorgraph fragments defined on variable clusters, arranged in a\n+75 /* *************************************************************************\n+*/\n+76 template\n+_\b7_\b7 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be&\n+graph,\n+78 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order)\n+79 {\n+80 gttic(EliminationTree_Contructor);\n+81\n+82 // Number of factors and variables - NOTE in the case of partial\n+elimination, n here may\n+83 // be fewer variables than are actually present in the graph.\n+84 const size_t m = graph.size();\n+85 const size_t n = order.size();\n+86\n+87 static const size_t none = std::numeric_limits::max();\n+88\n+89 // Allocate result parent vector and vector of last factor columns\n+90 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> nodes(n);\n+91 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b> parents(n, none);\n+92 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b> prevCol(m, none);\n+93 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bo_\bo_\bl_\b> factorUsed(m, false);\n+94\n+95 try {\n+96 // for column j \\in 1 to n do\n+97 for (size_t j = 0; j < n; j++)\n+98 {\n+99 // Retrieve the factors involving this variable and create the current node\n+_\b1_\b0_\b0 const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& factors = structure[order[j]];\n+101 const _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be node = boost::make_shared();\n+102 node->key = order[j];\n+103\n+104 // for row i \\in Struct[A*j] do\n+105 node->children.reserve(factors.size());\n+106 node->factors.reserve(factors.size());\n+107 for(const size_t i: factors) {\n+_\b1_\b0_\b8 // If we already hit a variable in this factor, make the subtree containing\n+the previous\n+109 // variable in this factor a child of the current node. This means that the\n+variables\n+110 // eliminated earlier in the factor depend on the later variables in the\n+factor. If we\n+111 // haven't yet hit a variable in this factor, we add the factor to the\n+current node.\n+112 // TODO: Store root shortcuts instead of parents.\n+113 if (prevCol[i] != none) {\n+114 size_t k = prevCol[i];\n+115 // Find root r of the current tree that contains k. Use raw pointers in\n+computing the\n+_\b1_\b1_\b6 // parents to avoid changing the reference counts while traversing up the\n tree.\n+117 size_t r = k;\n+118 while (parents[r] != none)\n+119 r = parents[r];\n+120 // If the root of the subtree involving this node is actually the current\n+node,\n+121 // TODO: what does this mean? forest?\n+122 if (r != j) {\n+123 // Now that we found the root, hook up parent and child pointers in the\n+nodes.\n+124 parents[r] = j;\n+125 node->children.push_back(nodes[r]);\n+126 }\n+127 } else {\n+128 // Add the factor to the current node since we are at the first variable in\n+this factor.\n+129 node->factors.push_back(graph[i]);\n+_\b1_\b3_\b0 factorUsed[i] = true;\n+131 }\n+132 prevCol[i] = j;\n+133 }\n+134 nodes[j] = node;\n+135 }\n+136 } catch(std::invalid_argument& e) {\n+_\b1_\b3_\b7 // If this is thrown from structure[order[j]] above, it means that it was\n+requested to\n+138 // eliminate a variable not present in the graph, so throw a more\n+informative error message.\n+139 (void)e; // Prevent unused variable warning\n+140 throw std::invalid_argument(\"EliminationTree: given ordering contains\n+variables that are not involved in the factor graph\");\n+141 } catch(...) {\n+_\b1_\b4_\b2 throw;\n+143 }\n+144\n+145 // Find roots\n+146 assert(parents.empty() || parents.back() == none); // We expect the last-\n+eliminated node to be a root no matter what\n+147 for(size_t j = 0; j < n; ++j)\n+148 if(parents[j] == none)\n+149 _\br_\bo_\bo_\bt_\bs_\b_.push_back(nodes[j]);\n+150\n+151 // Gather remaining factors (exclude null factors)\n+152 for(size_t i = 0; i < m; ++i)\n+153 if(!factorUsed[i] && graph[i])\n+154 remainingFactors_.push_back(graph[i]);\n+155 }\n+156\n+_\b1_\b5_\b7 /\n+* ************************************************************************* */\n+158 template\n+_\b1_\b5_\b9 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(\n+160 const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factorGraph, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order)\n+161 {\n+162 gttic(ET_Create2);\n+163 // Build variable index first\n+164 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex(factorGraph);\n+165 _\bT_\bh_\bi_\bs temp(factorGraph, variableIndex, order);\n+166 this->_\bs_\bw_\ba_\bp(temp); // Swap in the tree, and temp will be deleted\n+167 }\n+168\n+169 /\n+* ************************************************************************* */\n+170 template\n+171 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>&\n+_\b1_\b7_\b2 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>& other)\n+173 {\n+174 // Start by duplicating the tree.\n+175 _\br_\bo_\bo_\bt_\bs_\b_ = _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt(other);\n+176\n+177 // Assign the remaining factors - these are pointers to factors in the\n+original factor graph and\n+178 // we do not clone them.\n+179 remainingFactors_ = other.remainingFactors_;\n+180\n+181 return *this;\n+182 }\n+183\n+184 /\n+* ************************************************************************* */\n+185 template\n+186 std::pair, boost::shared_ptr >\n+_\b1_\b8_\b7 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(Eliminate function) const\n+188 {\n+189 gttic(EliminationTree_eliminate);\n+190 // Allocate result\n+191 auto result = boost::make_shared();\n+192\n+193 // Run tree elimination algorithm\n+194 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b> _\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs = inference::EliminateTree\n+(result, *this, function);\n+195\n+196 // Add remaining factors that were not involved with eliminated variables\n+197 auto allRemainingFactors = boost::make_shared();\n+198 allRemainingFactors->push_back(remainingFactors_.begin(),\n+remainingFactors_.end());\n+199 allRemainingFactors->push_back(_\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs.begin(),\n+_\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs.end());\n+200\n+201 // Return result\n+202 return std::make_pair(result, allRemainingFactors);\n+203 }\n+204\n+205 /\n+* ************************************************************************* */\n+206 template\n+_\b2_\b0_\b7 void _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& name, const\n+_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter) const\n+208 {\n+209 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt(*this, name, formatter);\n+210 }\n+211\n+212 /\n+* ************************************************************************* */\n+213 template\n+_\b2_\b1_\b4 bool _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& expected, double\n+tol) const\n+215 {\n+216 // Depth-first-traversal stacks\n+217 std::stack > stack1, stack2;\n+218\n+219 // Add roots in sorted order\n+220 {\n+221 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> keys;\n+222 for(const _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be& root: this->_\br_\bo_\bo_\bt_\bs_\b_) { keys.insert(std::make_pair\n+(root->key, root)); }\n+223 typedef typename _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be Key_Node;\n+224 for(const Key_Node& key_node: keys) { stack1.push(key_node.second); }\n+225 }\n+226 {\n+227 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> keys;\n+228 for(const _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be& root: expected._\br_\bo_\bo_\bt_\bs_\b_) { keys.insert(std::make_pair\n+(root->key, root)); }\n+229 typedef typename _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be Key_Node;\n+230 for(const Key_Node& key_node: keys) { stack2.push(key_node.second); }\n+231 }\n+232\n+233 // Traverse, adding children in sorted order\n+234 while(!stack1.empty() && !stack2.empty()) {\n+235 // Pop nodes\n+236 _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be node1 = stack1.top();\n+237 stack1.pop();\n+238 _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be node2 = stack2.top();\n+239 stack2.pop();\n+240\n+241 // Compare nodes\n+242 if(node1->key != node2->key)\n+243 return false;\n+244 if(node1->factors.size() != node2->factors.size()) {\n+245 return false;\n+246 } else {\n+247 for(typename Node::Factors::const_iterator it1 = node1->factors.begin(),\n+it2 = node2->factors.begin();\n+248 it1 != node1->factors.end(); ++it1, ++it2) // Only check it1 == end because\n+we already returned false for different counts\n+249 {\n+250 if(*it1 && *it2) {\n+251 if(!(*it1)->equals(**it2, tol))\n+252 return false;\n+253 } else if((*it1 && !*it2) || (*it2 && !*it1)) {\n+254 return false;\n+255 }\n+256 }\n+257 }\n+258\n+259 // Add children in sorted order\n+260 {\n+261 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> keys;\n+262 for(const _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be& node: node1->children) { keys.insert(std::make_pair\n+(node->key, node)); }\n+263 typedef typename _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be Key_Node;\n+264 for(const Key_Node& key_node: keys) { stack1.push(key_node.second); }\n+265 }\n+266 {\n+267 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> keys;\n+268 for(const _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be& node: node2->children) { keys.insert(std::make_pair\n+(node->key, node)); }\n+269 typedef typename _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be Key_Node;\n+270 for(const Key_Node& key_node: keys) { stack2.push(key_node.second); }\n+271 }\n+272 }\n+273\n+274 // If either stack is not empty, the number of nodes differed\n+275 if(!stack1.empty() || !stack2.empty())\n+276 return false;\n+277\n+278 return true;\n+279 }\n+280\n+281 /\n+* ************************************************************************* */\n+282 template\n+_\b2_\b8_\b3 void _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bs_\bw_\ba_\bp(_\bT_\bh_\bi_\bs& other) {\n+284 _\br_\bo_\bo_\bt_\bs_\b_.swap(other._\br_\bo_\bo_\bt_\bs_\b_);\n+285 remainingFactors_.swap(other.remainingFactors_);\n+286 }\n+287\n+288\n+289}\n+_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n+_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+Contains generic inference algorithms that convert between templated graphical\n+models,...\n+_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n-A cluster-tree that eliminates to a Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+FastVector< FactorIndex > FactorIndices\n+Define collection types:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt\n+FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const\n+FOREST &forest)\n+Clone a tree, copy-constructing new nodes (calling boost::make_shared) and\n+setting up child pointers ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt\n+void PrintForest(const FOREST &forest, std::string str, const KeyFormatter\n+&keyFormatter)\n+Print a tree, prefixing each line with str, and formatting keys using\n+keyFormatter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n An elimination tree is a data structure used intermediately during elimination.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-A JunctionTree is a cluster tree, a set of variable clusters with factors,\n-arranged in a tree,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bF_\br_\bo_\bm_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-static This FromEliminationTree(const ETREE &eliminationTree)\n-Build the junction tree from an elimination tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-JunctionTree< BAYESTREE, GRAPH > This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n-EliminatableClusterTree< BAYESTREE, GRAPH > Base\n-Our base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+Test whether the tree is equal to another.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:214\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &name=\"EliminationTree: \", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+Print the tree to cout.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr<\n+FactorGraphType > > eliminate(Eliminate function) const\n+Eliminate the factors to a Bayes net and remaining factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:187\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+This & operator=(const This &other)\n+Assignment operator - makes a deep copy of the tree structure, but only\n+pointers to factors are copie...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:172\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs_\b_\n+FastVector< sharedNode > roots_\n+concept check\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< FactorType > sharedFactor\n+Shared pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n+GRAPH FactorGraphType\n+The factor graph type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bw_\ba_\bp\n+void swap(This &other)\n+Swap the data of this tree with another one, this operation is very fast.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:283\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+EliminationTree()\n+Protected default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:161\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b,_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be\n+boost::shared_ptr< Node > sharedNode\n+Shared pointer to Node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+const FastVector< sharedFactor > & remainingFactors() const\n+Return the remaining factors that are not pulled into elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bk_\be_\by\n+Key key\n+key associated with root\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n+Children children\n+sub-trees\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs\n+Factors factors\n+factors associated with root\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+The VariableIndex class computes and stores the block column structure of a\n+factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00671.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00671.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableSlots.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Symbol.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,48 +94,41 @@\n \n \n \n \n \n
\n \n-
VariableSlots.h File Reference
\n+Namespaces |\n+Functions
\n+
Symbol.cpp File Reference
\n \n
\n-\n-

VariableSlots describes the structure of a combined factor in terms of where each block comes from in the source factors. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::VariableSlots
 A combined factor is assembled as one block of rows for each component factor. More...
 
struct  gtsam::traits< VariableSlots >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Functions

\n+GTSAM_EXPORT std::ostream & gtsam::operator<< (std::ostream &os, const Symbol &symbol)
 
\n

Detailed Description

\n-

VariableSlots describes the structure of a combined factor in terms of where each block comes from in the source factors.

\n-
Author
Richard Roberts
\n-
Date
Oct 4, 2010
\n+
Date
June 9, 2012
\n+
Author
: Frank Dellaert
\n+
\n+: Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-VariableSlots.h File Reference\n-VariableSlots describes the structure of a combined factor in terms of where\n-each block comes from in the source factors. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs\n-\u00a0 A combined factor is assembled as one block of rows for each component\n- factor. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Symbol.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+GTSAM_EXPORT std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bS_\by_\bm_\bb_\bo_\bl\n+ &_\bs_\by_\bm_\bb_\bo_\bl)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-VariableSlots describes the structure of a combined factor in terms of where\n-each block comes from in the source factors.\n- Author\n- Richard Roberts\n Date\n- Oct 4, 2010\n+ June 9, 2012\n+ Author\n+ : Frank Dellaert\n+ : Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00674.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00674.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex.h File Reference\n \n \n \n \n \n \n \n@@ -96,49 +96,39 @@\n \n \n \n
\n \n-
Ordering.h File Reference
\n+
MetisIndex.h File Reference
\n
\n
\n \n-

Variable ordering for the elimination algorithm. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::Ordering
 
struct  gtsam::traits< Ordering >
 traits More...
class  gtsam::MetisIndex
 The MetisIndex class converts a factor graph into the Compressed Sparse Row format for use in METIS algorithms. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Variable ordering for the elimination algorithm.

\n-
Author
Richard Roberts
\n-
\n-Andrew Melim
\n-
\n-Frank Dellaert
\n-
Date
Sep 2, 2010
\n+
Author
Andrew Melim
\n+
Date
Oct. 10, 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,26 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Ordering.h File Reference\n-Variable ordering for the elimination algorithm. _\bM_\bo_\br_\be_\b._\b._\b.\n+MetisIndex.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx\n+\u00a0 The _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx class converts a factor graph into the Compressed Sparse\n+ Row format for use in METIS algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Variable ordering for the elimination algorithm.\n Author\n- Richard Roberts\n Andrew Melim\n- Frank Dellaert\n Date\n- Sep 2, 2010\n+ Oct. 10, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+ * _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00674.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00674.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00674 = [\n- [\"gtsam::Ordering\", \"a03680.html\", \"a03680\"],\n- [\"gtsam::traits< Ordering >\", \"a03684.html\", null]\n+ [\"gtsam::MetisIndex\", \"a03676.html\", \"a03676\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00674_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00674_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex.h Source File\n \n \n \n \n \n \n \n@@ -98,255 +98,113 @@\n
No Matches
\n \n \n \n \n \n
\n-
Ordering.h
\n+
MetisIndex.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n-
11
\n-
21#pragma once
\n-
22
\n-
23#include <gtsam/inference/Key.h>
\n-\n-\n-
26#include <gtsam/base/FastSet.h>
\n-
27
\n-
28#include <boost/assign/list_inserter.hpp>
\n-
29#include <algorithm>
\n-
30#include <vector>
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
\n-
34class Ordering: public KeyVector {
\n-
35protected:
\n-
36 typedef KeyVector Base;
\n-
37
\n-
38public:
\n-
39
\n-
\n-\n-
42 COLAMD, METIS, NATURAL, CUSTOM
\n-
43 };
\n-
\n-
44
\n-
45 typedef Ordering This;
\n-
46 typedef boost::shared_ptr<This> shared_ptr;
\n-
47
\n-
49 GTSAM_EXPORT
\n-
\n-\n-
51 }
\n-
\n-
52
\n-
53 using KeyVector::KeyVector; // Inherit the KeyVector's constructors
\n-
54
\n-
56 template<typename KEYS>
\n-
\n-
57 explicit Ordering(const KEYS& keys) :
\n-
58 Base(keys.begin(), keys.end()) {
\n-
59 }
\n-
\n-
60
\n-
\n-
63 boost::assign::list_inserter<boost::assign_detail::call_push_back<This> > operator+=(
\n-
64 Key key) {
\n-
65 return boost::assign::make_list_inserter(
\n-
66 boost::assign_detail::call_push_back<This>(*this))(key);
\n-
67 }
\n-
\n-
68
\n-\n+
9 * -------------------------------------------------------------------------- */
\n+
10
\n+
17#pragma once
\n+
18
\n+
19
\n+
20#include <gtsam/inference/Key.h>
\n+\n+
22#include <gtsam/base/types.h>
\n+
23#include <gtsam/base/timing.h>
\n+
24
\n+
25// Boost bimap generates many ugly warnings in CLANG
\n+
26#ifdef __clang__
\n+
27# pragma clang diagnostic push
\n+
28# pragma clang diagnostic ignored "-Wredeclared-class-member"
\n+
29#endif
\n+
30#include <boost/bimap.hpp>
\n+
31#ifdef __clang__
\n+
32# pragma clang diagnostic pop
\n+
33#endif
\n+
34
\n+
35#include <vector>
\n+
36
\n+
37namespace gtsam {
\n+
\n+
45class GTSAM_EXPORT MetisIndex {
\n+
46public:
\n+
47 typedef boost::shared_ptr<MetisIndex> shared_ptr;
\n+
48 typedef boost::bimap<Key, int32_t> bm_type;
\n+
49
\n+
50private:
\n+
51 std::vector<int32_t> xadj_; // Index of node's adjacency list in adj
\n+
52 std::vector<int32_t> adj_; // Stores ajacency lists of all nodes, appended into a single vector
\n+
53 boost::bimap<Key, int32_t> intKeyBMap_; // Stores Key <-> integer value relationship
\n+
54 size_t nKeys_;
\n+
55
\n+
56public:
\n+
59
\n+
\n+\n+
62 nKeys_(0) {
\n+
63 }
\n+
\n+
64
\n+
65 template<class FACTORGRAPH>
\n+
66 MetisIndex(const FACTORGRAPH& factorGraph) :
\n+
67 nKeys_(0) {
\n+
68 augment(factorGraph);
\n+
69 }
\n+
70
\n+
71 ~MetisIndex() {
\n+
72 }
\n
76
\n-
78 bool contains(const Key& key) const;
\n-
79
\n-\n-
87
\n-
90
\n-
94 template<class FACTOR_GRAPH>
\n-
\n-
95 static Ordering Colamd(const FACTOR_GRAPH& graph) {
\n-
96 if (graph.empty())
\n-
97 return Ordering();
\n-
98 else
\n-
99 return Colamd(VariableIndex(graph));
\n-
100 }
\n-
\n-
101
\n-
103 static GTSAM_EXPORT Ordering Colamd(const VariableIndex& variableIndex);
\n-
104
\n-
113 template<class FACTOR_GRAPH>
\n-
\n-
114 static Ordering ColamdConstrainedLast(const FACTOR_GRAPH& graph,
\n-
115 const KeyVector& constrainLast, bool forceOrder = false) {
\n-
116 if (graph.empty())
\n-
117 return Ordering();
\n-
118 else
\n-
119 return ColamdConstrainedLast(VariableIndex(graph), constrainLast, forceOrder);
\n-
120 }
\n-
\n-
121
\n-
128 static GTSAM_EXPORT Ordering ColamdConstrainedLast(
\n-
129 const VariableIndex& variableIndex, const KeyVector& constrainLast,
\n-
130 bool forceOrder = false);
\n-
131
\n-
140 template<class FACTOR_GRAPH>
\n-
\n-
141 static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH& graph,
\n-
142 const KeyVector& constrainFirst, bool forceOrder = false) {
\n-
143 if (graph.empty())
\n-
144 return Ordering();
\n-
145 else
\n-
146 return ColamdConstrainedFirst(VariableIndex(graph), constrainFirst, forceOrder);
\n-
147 }
\n-
\n-
148
\n-
156 static GTSAM_EXPORT Ordering ColamdConstrainedFirst(
\n-
157 const VariableIndex& variableIndex,
\n-
158 const KeyVector& constrainFirst, bool forceOrder = false);
\n-
159
\n-
169 template<class FACTOR_GRAPH>
\n-
\n-
170 static Ordering ColamdConstrained(const FACTOR_GRAPH& graph,
\n-
171 const FastMap<Key, int>& groups) {
\n-
172 if (graph.empty())
\n-
173 return Ordering();
\n-
174 else
\n-
175 return ColamdConstrained(VariableIndex(graph), groups);
\n-
176 }
\n-
\n-
177
\n-
185 static GTSAM_EXPORT Ordering ColamdConstrained(
\n-
186 const VariableIndex& variableIndex, const FastMap<Key, int>& groups);
\n-
187
\n-
189 template<class FACTOR_GRAPH>
\n-
\n-
190 static Ordering Natural(const FACTOR_GRAPH &fg) {
\n-
191 KeySet src = fg.keys();
\n-
192 KeyVector keys(src.begin(), src.end());
\n-
193 std::stable_sort(keys.begin(), keys.end());
\n-
194 return Ordering(keys.begin(), keys.end());
\n-
195 }
\n-
\n-
196
\n-
198 template<class FACTOR_GRAPH>
\n-
199 static GTSAM_EXPORT void CSRFormat(std::vector<int>& xadj,
\n-
200 std::vector<int>& adj, const FACTOR_GRAPH& graph);
\n-
201
\n-
203 static GTSAM_EXPORT Ordering Metis(const MetisIndex& met);
\n-
204
\n-
205 template<class FACTOR_GRAPH>
\n-
206 static Ordering Metis(const FACTOR_GRAPH& graph) {
\n-
207 if (graph.empty())
\n-
208 return Ordering();
\n-
209 else
\n-
210 return Metis(MetisIndex(graph));
\n-
211 }
\n-
212
\n-
214
\n-
217
\n-
218 template<class FACTOR_GRAPH>
\n-
219 static Ordering Create(OrderingType orderingType,
\n-
220 const FACTOR_GRAPH& graph) {
\n-
221 if (graph.empty())
\n-
222 return Ordering();
\n-
223
\n-
224 switch (orderingType) {
\n-
225 case COLAMD:
\n-
226 return Colamd(graph);
\n-
227 case METIS:
\n-
228 return Metis(graph);
\n-
229 case NATURAL:
\n-
230 return Natural(graph);
\n-
231 case CUSTOM:
\n-
232 throw std::runtime_error(
\n-
233 "Ordering::Create error: called with CUSTOM ordering type.");
\n-
234 default:
\n-
235 throw std::runtime_error(
\n-
236 "Ordering::Create error: called with unknown ordering type.");
\n-
237 }
\n-
238 }
\n-
239
\n-
241
\n-
244
\n-
245 GTSAM_EXPORT
\n-
246 void print(const std::string& str = "", const KeyFormatter& keyFormatter =
\n-
247 DefaultKeyFormatter) const;
\n-
248
\n-
249 GTSAM_EXPORT
\n-
250 bool equals(const Ordering& other, double tol = 1e-9) const;
\n-
251
\n-
253
\n-
254private:
\n-
256 static GTSAM_EXPORT Ordering ColamdConstrained(
\n-
257 const VariableIndex& variableIndex, std::vector<int>& cmember);
\n-
258
\n-\n-
261 template<class ARCHIVE>
\n-
262 void serialize(ARCHIVE & ar, const unsigned int version) {
\n-
263 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
264 }
\n-
265};
\n-
\n-
266
\n-
\n-
268template<> struct traits<Ordering> : public Testable<Ordering> {
\n-
269};
\n-
\n-
270
\n-
271}
\n-
272
\n-
A thin wrapper around std::set that uses boost's fast_pool_allocator.
\n-\n-\n-\n+
81 template<class FACTORGRAPH>
\n+
82 void augment(const FACTORGRAPH& factors);
\n+
83
\n+
84 const std::vector<int32_t>& xadj() const {
\n+
85 return xadj_;
\n+
86 }
\n+
87 const std::vector<int32_t>& adj() const {
\n+
88 return adj_;
\n+
89 }
\n+
90 size_t nValues() const {
\n+
91 return nKeys_;
\n+
92 }
\n+
93 Key intToKey(int32_t value) const {
\n+
94 assert(value >= 0);
\n+
95 return intKeyBMap_.right.find(value)->second;
\n+
96 }
\n+
97
\n+
99};
\n+
\n+
100
\n+
101} // \\ namesace gtsam
\n+
102
\n+\n+
Typedefs for easier changing of types.
\n+
Timing utilities.
\n+\n+\n+
Factor Graph Base Class.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
The MetisIndex class converts a factor graph into the Compressed Sparse Row format for use in METIS a...
Definition MetisIndex.h:45
\n-
Definition Ordering.h:34
\n-
static Ordering Natural(const FACTOR_GRAPH &fg)
Return a natural Ordering. Typically used by iterative solvers.
Definition Ordering.h:190
\n-
static Ordering ColamdConstrained(const FACTOR_GRAPH &graph, const FastMap< Key, int > &groups)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:170
\n-
Ordering(const KEYS &keys)
Create from a container.
Definition Ordering.h:57
\n-
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:95
\n-
OrderingType
Type of ordering to use.
Definition Ordering.h:41
\n-
static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const KeyVector &constrainLast, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:114
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition Ordering.h:46
\n-
boost::assign::list_inserter< boost::assign_detail::call_push_back< This > > operator+=(Key key)
Add new variables to the ordering as ordering += key1, key2, ... Equivalent to calling push_back.
Definition Ordering.h:63
\n-
static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const KeyVector &constrainFirst, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:141
\n-
GTSAM_EXPORT Ordering()
Create an empty ordering.
Definition Ordering.h:50
\n-
static GTSAM_EXPORT Ordering Metis(const MetisIndex &met)
Compute an ordering determined by METIS from a VariableIndex.
Definition Ordering.cpp:212
\n-
FastMap< Key, size_t > invert() const
Invert (not reverse) the ordering - returns a map from key to order position.
Definition Ordering.cpp:36
\n-
friend class boost::serialization::access
Serialization function.
Definition Ordering.h:260
\n-
Ordering This
Typedef to this class.
Definition Ordering.h:45
\n-
bool contains(const Key &key) const
Check if key exists in ordering.
Definition Ordering.cpp:293
\n-
static GTSAM_EXPORT void CSRFormat(std::vector< int > &xadj, std::vector< int > &adj, const FACTOR_GRAPH &graph)
METIS Formatting function.
\n-
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n+
MetisIndex()
Default constructor, creates empty MetisIndex.
Definition MetisIndex.h:61
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,312 +1,117 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Ordering.h\n+MetisIndex.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n-9\n-10 * -------------------------------------------------------------------------\n+9 * -------------------------------------------------------------------------\n - */\n-11\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh>\n-27\n-28#include \n-29#include \n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-_\b3_\b4class _\bO_\br_\bd_\be_\br_\bi_\bn_\bg: public _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br {\n-35protected:\n-36 typedef _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br Base;\n-37\n-38public:\n-39\n-_\b4_\b1 enum _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be {\n-42 COLAMD, METIS, NATURAL, CUSTOM\n-43 };\n-44\n-_\b4_\b5 typedef _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bT_\bh_\bi_\bs;\n-_\b4_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-47\n-49 GTSAM_EXPORT\n-_\b5_\b0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg() {\n-51 }\n-52\n-53 using KeyVector::KeyVector; // Inherit the KeyVector's constructors\n-54\n-56 template\n-_\b5_\b7 explicit _\bO_\br_\bd_\be_\br_\bi_\bn_\bg(const KEYS& keys) :\n-58 Base(keys.begin(), keys.end()) {\n-59 }\n-60\n-_\b6_\b3 boost::assign::list_inserter >\n-_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(\n-64 _\bK_\be_\by key) {\n-65 return boost::assign::make_list_inserter(\n-66 boost::assign_detail::call_push_back(*this))(key);\n-67 }\n-68\n-75 _\bT_\bh_\bi_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys);\n+10\n+17#pragma once\n+18\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n+24\n+25// Boost bimap generates many ugly warnings in CLANG\n+26#ifdef __clang__\n+27# pragma clang diagnostic push\n+28# pragma clang diagnostic ignored \"-Wredeclared-class-member\"\n+29#endif\n+30#include \n+31#ifdef __clang__\n+32# pragma clang diagnostic pop\n+33#endif\n+34\n+35#include \n+36\n+37namespace _\bg_\bt_\bs_\ba_\bm {\n+_\b4_\b5class GTSAM_EXPORT _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx {\n+46public:\n+47 typedef boost::shared_ptr shared_ptr;\n+48 typedef boost::bimap bm_type;\n+49\n+50private:\n+51 std::vector xadj_; // Index of node's adjacency list in adj\n+52 std::vector adj_; // Stores ajacency lists of all nodes, appended\n+into a single vector\n+53 boost::bimap intKeyBMap_; // Stores Key <-> integer value\n+relationship\n+54 size_t nKeys_;\n+55\n+56public:\n+59\n+_\b6_\b1 _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx() :\n+62 nKeys_(0) {\n+63 }\n+64\n+65 template\n+66 _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx(const FACTORGRAPH& factorGraph) :\n+67 nKeys_(0) {\n+68 augment(factorGraph);\n+69 }\n+70\n+71 ~MetisIndex() {\n+72 }\n 76\n-78 bool _\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs(const _\bK_\be_\by& key) const;\n-79\n-86 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bs_\bi_\bz_\be_\b__\bt_\b> _\bi_\bn_\bv_\be_\br_\bt() const;\n-87\n-90\n-94 template\n-_\b9_\b5 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd(const FACTOR_GRAPH& graph) {\n-96 if (graph.empty())\n-97 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n-98 else\n-99 return _\bC_\bo_\bl_\ba_\bm_\bd(_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx(graph));\n-100 }\n-101\n-103 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd(const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& variableIndex);\n-104\n-113 template\n-_\b1_\b1_\b4 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(const FACTOR_GRAPH& graph,\n-115 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& constrainLast, bool forceOrder = false) {\n-116 if (graph.empty())\n-117 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n-118 else\n-119 return _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx(graph), constrainLast,\n-forceOrder);\n-120 }\n-121\n-128 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(\n-129 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& variableIndex, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& constrainLast,\n-130 bool forceOrder = false);\n-131\n-140 template\n-_\b1_\b4_\b1 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt(const FACTOR_GRAPH& graph,\n-142 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& constrainFirst, bool forceOrder = false) {\n-143 if (graph.empty())\n-144 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n-145 else\n-146 return _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt(_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx(graph), constrainFirst,\n-forceOrder);\n-147 }\n-148\n-156 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt(\n-157 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& variableIndex,\n-158 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& constrainFirst, bool forceOrder = false);\n-159\n-169 template\n-_\b1_\b7_\b0 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(const FACTOR_GRAPH& graph,\n-171 const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bi_\bn_\bt_\b>& groups) {\n-172 if (graph.empty())\n-173 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n-174 else\n-175 return _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx(graph), groups);\n-176 }\n-177\n-185 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(\n-186 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& variableIndex, const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bi_\bn_\bt_\b>& groups);\n-187\n-189 template\n-_\b1_\b9_\b0 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bN_\ba_\bt_\bu_\br_\ba_\bl(const FACTOR_GRAPH &fg) {\n-191 _\bK_\be_\by_\bS_\be_\bt src = fg.keys();\n-192 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keys(src.begin(), src.end());\n-193 std::stable_sort(keys.begin(), keys.end());\n-194 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg(keys.begin(), keys.end());\n-195 }\n-196\n-198 template\n-_\b1_\b9_\b9 static GTSAM_EXPORT void _\bC_\bS_\bR_\bF_\bo_\br_\bm_\ba_\bt(std::vector& xadj,\n-200 std::vector& adj, const FACTOR_GRAPH& graph);\n-201\n-203 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bM_\be_\bt_\bi_\bs(const _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx& met);\n-204\n-205 template\n-206 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bM_\be_\bt_\bi_\bs(const FACTOR_GRAPH& graph) {\n-207 if (graph.empty())\n-208 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n-209 else\n-210 return _\bM_\be_\bt_\bi_\bs(_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx(graph));\n-211 }\n-212\n-214\n-217\n-218 template\n-219 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg Create(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType,\n-220 const FACTOR_GRAPH& graph) {\n-221 if (graph.empty())\n-222 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg();\n-223\n-224 switch (orderingType) {\n-225 case COLAMD:\n-226 return _\bC_\bo_\bl_\ba_\bm_\bd(graph);\n-227 case METIS:\n-228 return _\bM_\be_\bt_\bi_\bs(graph);\n-229 case NATURAL:\n-230 return _\bN_\ba_\bt_\bu_\br_\ba_\bl(graph);\n-231 case CUSTOM:\n-232 throw std::runtime_error(\n-233 \"Ordering::Create error: called with CUSTOM ordering type.\");\n-234 default:\n-235 throw std::runtime_error(\n-236 \"Ordering::Create error: called with unknown ordering type.\");\n-237 }\n-238 }\n-239\n-241\n-244\n-245 GTSAM_EXPORT\n-246 void print(const std::string& str = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-247 DefaultKeyFormatter) const;\n-248\n-249 GTSAM_EXPORT\n-250 bool equals(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& other, double tol = 1e-9) const;\n-251\n-253\n-254private:\n-256 static GTSAM_EXPORT _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(\n-257 const VariableIndex& variableIndex, std::vector& cmember);\n-258\n-_\b2_\b6_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-261 template\n-262 void serialize(ARCHIVE & ar, const unsigned int version) {\n-263 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n-264 }\n-265};\n-266\n-_\b2_\b6_\b8template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bO_\br_\bd_\be_\br_\bi_\bn_\bg> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-269};\n-270\n-271}\n-272\n-_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n-A thin wrapper around std::set that uses boost's fast_pool_allocator.\n-_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b._\bh\n-_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n+81 template\n+82 void augment(const FACTORGRAPH& factors);\n+83\n+84 const std::vector& xadj() const {\n+85 return xadj_;\n+86 }\n+87 const std::vector& adj() const {\n+88 return adj_;\n+89 }\n+90 size_t nValues() const {\n+91 return nKeys_;\n+92 }\n+93 _\bK_\be_\by intToKey(int32_t value) const {\n+94 assert(value >= 0);\n+95 return intKeyBMap_.right.find(value)->second;\n+96 }\n+97\n+99};\n+100\n+101} // \\ namesace gtsam\n+102\n+103#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh>\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n+_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\n+_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n _\bK_\be_\by_\b._\bh\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx\n The MetisIndex class converts a factor graph into the Compressed Sparse Row\n format for use in METIS a...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MetisIndex.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bN_\ba_\bt_\bu_\br_\ba_\bl\n-static Ordering Natural(const FACTOR_GRAPH &fg)\n-Return a natural Ordering. Typically used by iterative solvers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:190\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n-static Ordering ColamdConstrained(const FACTOR_GRAPH &graph, const FastMap<\n-Key, int > &groups)\n-Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n-(see details for note o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:170\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-Ordering(const KEYS &keys)\n-Create from a container.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd\n-static Ordering Colamd(const FACTOR_GRAPH &graph)\n-Compute a fill-reducing ordering using COLAMD from a factor graph (see details\n-for note on performanc...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be\n-OrderingType\n-Type of ordering to use.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt\n-static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const\n-KeyVector &constrainLast, bool forceOrder=false)\n-Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n-(see details for note o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n-boost::assign::list_inserter< boost::assign_detail::call_push_back< This > >\n-operator+=(Key key)\n-Add new variables to the ordering as ordering += key1, key2, ... Equivalent to\n-calling push_back.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt\n-static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const\n-KeyVector &constrainFirst, bool forceOrder=false)\n-Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n-(see details for note o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-GTSAM_EXPORT Ordering()\n-Create an empty ordering.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bM_\be_\bt_\bi_\bs\n-static GTSAM_EXPORT Ordering Metis(const MetisIndex &met)\n-Compute an ordering determined by METIS from a VariableIndex.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.cpp:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bi_\bn_\bv_\be_\br_\bt\n-FastMap< Key, size_t > invert() const\n-Invert (not reverse) the ordering - returns a map from key to order position.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.cpp:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bT_\bh_\bi_\bs\n-Ordering This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bc_\bo_\bn_\bt_\ba_\bi_\bn_\bs\n-bool contains(const Key &key) const\n-Check if key exists in ordering.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.cpp:293\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bS_\bR_\bF_\bo_\br_\bm_\ba_\bt\n-static GTSAM_EXPORT void CSRFormat(std::vector< int > &xadj, std::vector< int >\n-&adj, const FACTOR_GRAPH &graph)\n-METIS Formatting function.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-The VariableIndex class computes and stores the block column structure of a\n-factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx\n+MetisIndex()\n+Default constructor, creates empty MetisIndex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MetisIndex.h:61\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+ * _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00677_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00677_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Conditional-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/JunctionTree.h Source File\n \n \n \n \n \n \n \n@@ -98,143 +98,79 @@\n
No Matches
\n \n \n \n \n \n
\n-
Conditional-inst.h
\n+
JunctionTree.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18// \\callgraph
\n-
19#pragma once
\n-
20
\n-\n+
21#pragma once
\n
22
\n-
23#include <cmath>
\n-
24#include <iostream>
\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
28/* ************************************************************************* */
\n-
29template <class FACTOR, class DERIVEDCONDITIONAL>
\n-
\n-\n-
31 const std::string& s, const KeyFormatter& formatter) const {
\n-
32 std::cout << s << " P(";
\n-
33 for (Key key : frontals()) std::cout << " " << formatter(key);
\n-
34 if (nrParents() > 0) std::cout << " |";
\n-
35 for (Key parent : parents()) std::cout << " " << formatter(parent);
\n-
36 std::cout << ")" << std::endl;
\n-
37}
\n-
\n-
38
\n-
39/* ************************************************************************* */
\n-
40template <class FACTOR, class DERIVEDCONDITIONAL>
\n-
\n-\n-
42 double tol) const {
\n-
43 return nrFrontals_ == c.nrFrontals_;
\n-
44}
\n-
\n-
45
\n-
46/* ************************************************************************* */
\n-
47template <class FACTOR, class DERIVEDCONDITIONAL>
\n-
\n-\n-
49 const HybridValues& c) const {
\n-
50 throw std::runtime_error("Conditional::logProbability is not implemented");
\n-
51}
\n-
\n-
52
\n-
53/* ************************************************************************* */
\n-
54template <class FACTOR, class DERIVEDCONDITIONAL>
\n-
\n-\n-
56 const HybridValues& c) const {
\n-
57 throw std::runtime_error("Conditional::evaluate is not implemented");
\n-
58}
\n-
\n+\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
27 // Forward declarations
\n+
28 template<class BAYESNET, class GRAPH> class EliminationTree;
\n+
29
\n+
49 template<class BAYESTREE, class GRAPH>
\n+
\n+
50 class JunctionTree : public EliminatableClusterTree<BAYESTREE, GRAPH> {
\n+
51
\n+
52 public:
\n+
53
\n+\n+
55 typedef boost::shared_ptr<This> shared_ptr;
\n+\n+
57
\n+
58 protected:
\n
59
\n-
60/* ************************************************************************* */
\n-
61template <class FACTOR, class DERIVEDCONDITIONAL>
\n-
\n-\n-
63 const {
\n-
64 throw std::runtime_error(
\n-
65 "Conditional::logNormalizationConstant is not implemented");
\n-
66}
\n-
\n-
67
\n-
68/* ************************************************************************* */
\n-
69template <class FACTOR, class DERIVEDCONDITIONAL>
\n-
\n-\n-
71 return std::exp(logNormalizationConstant());
\n-
72}
\n-
\n-
73
\n-
74/* ************************************************************************* */
\n-
75template <class FACTOR, class DERIVEDCONDITIONAL>
\n-
76template <class VALUES>
\n-
\n-\n-
78 const DERIVEDCONDITIONAL& conditional, const VALUES& values) {
\n-
79 const double prob_or_density = conditional.evaluate(values);
\n-
80 if (prob_or_density < 0.0) return false; // prob_or_density is negative.
\n-
81 if (std::abs(prob_or_density - conditional(values)) > 1e-9)
\n-
82 return false; // operator and evaluate differ
\n-
83 const double logProb = conditional.logProbability(values);
\n-
84 if (std::abs(prob_or_density - std::exp(logProb)) > 1e-9)
\n-
85 return false; // logProb is not consistent with prob_or_density
\n-
86 if (std::abs(conditional.logNormalizationConstant() -
\n-
87 std::log(conditional.normalizationConstant())) > 1e-9)
\n-
88 return false; // log normalization constant is not consistent with
\n-
89 // normalization constant
\n-
90 const double error = conditional.error(values);
\n-
91 if (error < 0.0) return false; // prob_or_density is negative.
\n-
92 const double expected = conditional.logNormalizationConstant() - error;
\n-
93 if (std::abs(logProb - expected) > 1e-9)
\n-
94 return false; // logProb is not consistent with error
\n-
95 return true;
\n-
96}
\n-
\n-
\n-\n-
98} // namespace gtsam
\n-
\n-
Base class for conditional densities.
\n+
62
\n+
64 template<class ETREE>
\n+
65 static This FromEliminationTree(const ETREE& eliminationTree) { return This(eliminationTree); }
\n+
66
\n+
68 template<class ETREE_BAYESNET, class ETREE_GRAPH>
\n+\n+
70
\n+
72
\n+
73 protected:
\n+
74
\n+
75 // Private default constructor (used in static construction methods)
\n+
76 JunctionTree() {}
\n+
77
\n+
78 };
\n+
\n+
79
\n+
80}
\n+
Collects factorgraph fragments defined on variable clusters, arranged in a tree.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Conditional.h:64
\n-
static bool CheckInvariants(const DERIVEDCONDITIONAL &conditional, const VALUES &x)
Check invariants of this conditional, given the values x.
Definition Conditional-inst.h:77
\n-
size_t nrFrontals_
The first nrFrontal variables are frontal and the rest are parents.
Definition Conditional.h:67
\n-
virtual double logNormalizationConstant() const
All conditional types need to implement a log normalization constant to make it such that error>=0.
Definition Conditional-inst.h:62
\n-
virtual double evaluate(const HybridValues &c) const
All conditional types need to implement an evaluate function, that yields a true probability.
Definition Conditional-inst.h:55
\n-
bool equals(const This &c, double tol=1e-9) const
check equality
Definition Conditional-inst.h:41
\n-
virtual double logProbability(const HybridValues &c) const
All conditional types need to implement a logProbability function, for which exp(logProbability(x)) =...
Definition Conditional-inst.h:48
\n-
double normalizationConstant() const
Non-virtual, exponentiate logNormalizationConstant.
Definition Conditional-inst.h:70
\n-
void print(const std::string &s="Conditional", const KeyFormatter &formatter=DefaultKeyFormatter) const
print with optional formatter
Definition Conditional-inst.h:30
\n+
A cluster-tree that eliminates to a Bayes tree.
Definition ClusterTree.h:184
\n+
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n+
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n+
static This FromEliminationTree(const ETREE &eliminationTree)
Build the junction tree from an elimination tree.
Definition JunctionTree.h:65
\n+
JunctionTree< BAYESTREE, GRAPH > This
This class.
Definition JunctionTree.h:54
\n+
EliminatableClusterTree< BAYESTREE, GRAPH > Base
Our base class.
Definition JunctionTree.h:56
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition JunctionTree.h:55
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,167 +1,94 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Conditional-inst.h\n+JunctionTree.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18// \\callgraph\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+21#pragma once\n 22\n-23#include \n-24#include \n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-28/* *************************************************************************\n-*/\n-29template \n-_\b3_\b0void _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(\n-31 const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter) const {\n-32 std::cout << s << \" P(\";\n-33 for (_\bK_\be_\by key : frontals()) std::cout << \" \" << formatter(key);\n-34 if (nrParents() > 0) std::cout << \" |\";\n-35 for (_\bK_\be_\by parent : parents()) std::cout << \" \" << formatter(parent);\n-36 std::cout << \")\" << std::endl;\n-37}\n-38\n-39/* *************************************************************************\n-*/\n-40template \n-_\b4_\b1bool _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& c,\n-42 double tol) const {\n-43 return nrFrontals_ == c._\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_;\n-44}\n-45\n-46/* *************************************************************************\n-*/\n-47template \n-_\b4_\b8double _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(\n-49 const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const {\n-50 throw std::runtime_error(\"Conditional::logProbability is not implemented\");\n-51}\n-52\n-53/* *************************************************************************\n-*/\n-54template \n-_\b5_\b5double _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(\n-56 const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const {\n-57 throw std::runtime_error(\"Conditional::evaluate is not implemented\");\n-58}\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+27 // Forward declarations\n+28 template class EliminationTree;\n+29\n+49 template\n+_\b5_\b0 class _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be : public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be {\n+51\n+52 public:\n+53\n+_\b5_\b4 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b> _\bT_\bh_\bi_\bs;\n+_\b5_\b5 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b5_\b6 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b> _\bB_\ba_\bs_\be;\n+57\n+58 protected:\n 59\n-60/* *************************************************************************\n-*/\n-61template \n-_\b6_\b2double _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bl_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt()\n-63 const {\n-64 throw std::runtime_error(\n-65 \"Conditional::logNormalizationConstant is not implemented\");\n-66}\n-67\n-68/* *************************************************************************\n-*/\n-69template \n-_\b7_\b0double _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt() const\n-{\n-71 return std::exp(logNormalizationConstant());\n-72}\n-73\n-74/* *************************************************************************\n-*/\n-75template \n-76template \n-_\b7_\b7bool _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bC_\bh_\be_\bc_\bk_\bI_\bn_\bv_\ba_\br_\bi_\ba_\bn_\bt_\bs(\n-78 const DERIVEDCONDITIONAL& conditional, const VALUES& values) {\n-79 const double prob_or_density = conditional.evaluate(values);\n-80 if (prob_or_density < 0.0) return false; // prob_or_density is negative.\n-81 if (std::abs(prob_or_density - conditional(values)) > 1e-9)\n-82 return false; // operator and evaluate differ\n-83 const double logProb = conditional.logProbability(values);\n-84 if (std::abs(prob_or_density - std::exp(logProb)) > 1e-9)\n-85 return false; // logProb is not consistent with prob_or_density\n-86 if (std::abs(conditional.logNormalizationConstant() -\n-87 std::log(conditional.normalizationConstant())) > 1e-9)\n-88 return false; // log normalization constant is not consistent with\n-89 // normalization constant\n-90 const double error = conditional.error(values);\n-91 if (error < 0.0) return false; // prob_or_density is negative.\n-92 const double expected = conditional.logNormalizationConstant() - error;\n-93 if (std::abs(logProb - expected) > 1e-9)\n-94 return false; // logProb is not consistent with error\n-95 return true;\n-96}\n-_\b9_\b7\n-98} // namespace gtsam\n-_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-Base class for conditional densities.\n+62\n+64 template\n+_\b6_\b5 static _\bT_\bh_\bi_\bs _\bF_\br_\bo_\bm_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const ETREE& eliminationTree) { return _\bT_\bh_\bi_\bs\n+(eliminationTree); }\n+66\n+68 template\n+69 _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bE_\bT_\bR_\bE_\bE_\b__\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\b _\bE_\bT_\bR_\bE_\bE_\b__\bG_\bR_\bA_\bP_\bH_\b>&\n+eliminationTree);\n+70\n+72\n+73 protected:\n+74\n+75 // Private default constructor (used in static construction methods)\n+76 _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be() {}\n+77\n+78 };\n+79\n+80}\n+_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh\n+Collects factorgraph fragments defined on variable clusters, arranged in a\n+tree.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bC_\bh_\be_\bc_\bk_\bI_\bn_\bv_\ba_\br_\bi_\ba_\bn_\bt_\bs\n-static bool CheckInvariants(const DERIVEDCONDITIONAL &conditional, const VALUES\n-&x)\n-Check invariants of this conditional, given the values x.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_\n-size_t nrFrontals_\n-The first nrFrontal variables are frontal and the rest are parents.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bl_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n-virtual double logNormalizationConstant() const\n-All conditional types need to implement a log normalization constant to make it\n-such that error>=0.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\n-virtual double evaluate(const HybridValues &c) const\n-All conditional types need to implement an evaluate function, that yields a\n-true probability.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &c, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by\n-virtual double logProbability(const HybridValues &c) const\n-All conditional types need to implement a logProbability function, for which\n-exp(logProbability(x)) =...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n-double normalizationConstant() const\n-Non-virtual, exponentiate logNormalizationConstant.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"Conditional\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print with optional formatter\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n+A cluster-tree that eliminates to a Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+An elimination tree is a data structure used intermediately during elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+A JunctionTree is a cluster tree, a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bF_\br_\bo_\bm_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+static This FromEliminationTree(const ETREE &eliminationTree)\n+Build the junction tree from an elimination tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+JunctionTree< BAYESTREE, GRAPH > This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n+EliminatableClusterTree< BAYESTREE, GRAPH > Base\n+Our base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Shared pointer to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:55\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * C\bCo\bon\bnd\bdi\bit\bti\bio\bon\bna\bal\bl-\b-i\bin\bns\bst\bt.\b.h\bh\n+ * _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00683_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00683_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,243 +98,338 @@\n
No Matches
\n \n \n \n \n \n
\n-
FactorGraph-inst.h
\n+
graph-inl.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
22#pragma once
\n-
23
\n-\n-
25
\n-
26#include <stdio.h>
\n-
27#include <algorithm>
\n-
28#include <iostream> // for cout :-(
\n-
29#include <fstream>
\n-
30#include <sstream>
\n-
31#include <string>
\n-
32
\n-
33namespace gtsam {
\n-
34
\n-
35/* ************************************************************************* */
\n-
36template <class FACTOR>
\n-
\n-
37void FactorGraph<FACTOR>::print(const std::string& s,
\n-
38 const KeyFormatter& formatter) const {
\n-
39 std::cout << (s.empty() ? "" : s + " ") << std::endl;
\n-
40 std::cout << "size: " << size() << std::endl;
\n-
41 for (size_t i = 0; i < factors_.size(); i++) {
\n-
42 std::stringstream ss;
\n-
43 ss << "factor " << i << ": ";
\n-
44 if (factors_[i]) factors_[i]->print(ss.str(), formatter);
\n-
45 }
\n-
46}
\n+
12/*
\n+
13 * @file graph-inl.h
\n+
14 * @brief Graph algorithm using boost library
\n+
15 * @author Kai Ni
\n+
16 */
\n+
17
\n+
18#pragma once
\n+
19
\n+
20#include <stdexcept>
\n+
21#ifdef __GNUC__
\n+
22#pragma GCC diagnostic push
\n+
23#pragma GCC diagnostic ignored "-Wunused-variable"
\n+
24//#pragma GCC diagnostic ignored "-Wunneeded-internal-declaration"
\n+
25#endif
\n+
26#include <boost/graph/breadth_first_search.hpp>
\n+
27#ifdef __GNUC__
\n+
28#pragma GCC diagnostic pop
\n+
29#endif
\n+
30#include <boost/graph/prim_minimum_spanning_tree.hpp>
\n+
31
\n+\n+
33
\n+
34namespace gtsam {
\n+
35
\n+
36/* ************************************************************************* */
\n+
37template <class KEY>
\n+
\n+
38class ordering_key_visitor : public boost::default_bfs_visitor {
\n+
39public:
\n+
40 ordering_key_visitor(std::list<KEY>& ordering_in) : ordering_(ordering_in) {}
\n+
41 template <typename Vertex, typename Graph> void discover_vertex(Vertex v, const Graph& g) const {
\n+
42 KEY key = boost::get(boost::vertex_name, g, v);
\n+
43 ordering_.push_front(key);
\n+
44 }
\n+
45 std::list<KEY>& ordering_;
\n+
46};
\n
\n
47
\n
48/* ************************************************************************* */
\n-
49template <class FACTOR>
\n+
49template<class KEY>
\n
\n-
50bool FactorGraph<FACTOR>::equals(const This& fg, double tol) const {
\n-
51 // check whether the two factor graphs have the same number of factors.
\n-
52 if (factors_.size() != fg.size()) return false;
\n+
50std::list<KEY> predecessorMap2Keys(const PredecessorMap<KEY>& p_map) {
\n+
51
\n+
52 typedef typename SGraph<KEY>::Vertex SVertex;
\n
53
\n-
54 // check whether the factors are the same, in same order.
\n-
55 for (size_t i = 0; i < factors_.size(); i++) {
\n-
56 sharedFactor f1 = factors_[i], f2 = fg.factors_[i];
\n-
57 if (f1 == nullptr && f2 == nullptr) continue;
\n-
58 if (f1 == nullptr || f2 == nullptr) return false;
\n-
59 if (!f1->equals(*f2, tol)) return false;
\n-
60 }
\n-
61 return true;
\n-
62}
\n-
\n-
63
\n-
64/* ************************************************************************ */
\n-
65template <class FACTOR>
\n-
\n-
66double FactorGraph<FACTOR>::error(const HybridValues &values) const {
\n-
67 double error = 0.0;
\n-
68 for (auto &f : factors_) {
\n-
69 error += f->error(values);
\n-
70 }
\n-
71 return error;
\n-
72}
\n-
\n-
73
\n-
74/* ************************************************************************* */
\n-
75template <class FACTOR>
\n-
\n-\n-
77 size_t size_ = 0;
\n-
78 for (const sharedFactor& factor : factors_)
\n-
79 if (factor) size_++;
\n-
80 return size_;
\n-
81}
\n-
\n-
82
\n-
83/* ************************************************************************* */
\n-
84template <class FACTOR>
\n-
\n-\n-
86 KeySet keys;
\n-
87 for (const sharedFactor& factor : this->factors_) {
\n-
88 if (factor) keys.insert(factor->begin(), factor->end());
\n-
89 }
\n-
90 return keys;
\n-
91}
\n-
\n+\n+
55 SVertex root;
\n+
56 std::map<KEY, SVertex> key2vertex;
\n+
57 boost::tie(g, root, key2vertex) = gtsam::predecessorMap2Graph<SGraph<KEY>, SVertex, KEY>(p_map);
\n+
58
\n+
59 // breadth first visit on the graph
\n+
60 std::list<KEY> keys;
\n+\n+
62 boost::breadth_first_search(g, root, boost::visitor(vis));
\n+
63 return keys;
\n+
64}
\n+
\n+
65
\n+
66/* ************************************************************************* */
\n+
67template<class G, class F, class KEY>
\n+
\n+
68SDGraph<KEY> toBoostGraph(const G& graph) {
\n+
69 // convert the factor graph to boost graph
\n+\n+
71 typedef typename boost::graph_traits<SDGraph<KEY> >::vertex_descriptor BoostVertex;
\n+
72 std::map<KEY, BoostVertex> key2vertex;
\n+
73 typename G::const_iterator itFactor;
\n+
74
\n+
75 // Loop over the factors
\n+
76 for(itFactor=graph.begin(); itFactor!=graph.end(); itFactor++) {
\n+
77
\n+
78 // Ignore factors that are not binary
\n+
79 if ((*itFactor)->keys().size() != 2)
\n+
80 continue;
\n+
81
\n+
82 // Cast the factor to the user-specified factor type F
\n+
83 boost::shared_ptr<F> factor = boost::dynamic_pointer_cast<F>(*itFactor);
\n+
84 // Ignore factors that are not of type F
\n+
85 if (!factor) continue;
\n+
86
\n+
87 // Retrieve the 2 keys (nodes) the factor (edge) is incident on
\n+
88 KEY key1 = factor->keys()[0];
\n+
89 KEY key2 = factor->keys()[1];
\n+
90
\n+
91 BoostVertex v1, v2;
\n
92
\n-
93/* ************************************************************************* */
\n-
94template <class FACTOR>
\n-
\n-\n-
96 KeyVector keys;
\n-
97 keys.reserve(2 * size()); // guess at size
\n-
98 for (const sharedFactor& factor : factors_)
\n-
99 if (factor) keys.insert(keys.end(), factor->begin(), factor->end());
\n-
100 std::sort(keys.begin(), keys.end());
\n-
101 auto last = std::unique(keys.begin(), keys.end());
\n-
102 keys.erase(last, keys.end());
\n-
103 return keys;
\n-
104}
\n-
\n-
105
\n-
106/* ************************************************************************* */
\n-
107template <class FACTOR>
\n-
108template <typename CONTAINER, typename>
\n-
\n-\n-
110 bool useEmptySlots) {
\n-
111 const size_t num_factors = factors.size();
\n-
112 FactorIndices newFactorIndices(num_factors);
\n-
113 if (useEmptySlots) {
\n-
114 size_t i = 0;
\n-
115 for (size_t j = 0; j < num_factors; ++j) {
\n-
116 // Loop to find the next available factor slot
\n-
117 do {
\n-
118 if (i >= size())
\n-
119 // Make room for remaining factors, happens only once.
\n-
120 resize(size() + num_factors - j);
\n-
121 else if (at(i))
\n-
122 ++i; // Move on to the next slot or past end.
\n-
123 else
\n-
124 break; // We found an empty slot, break to fill it.
\n-
125 } while (true);
\n-
126
\n-
127 // Use the current slot, updating graph and newFactorSlots.
\n-
128 at(i) = factors[j];
\n-
129 newFactorIndices[j] = i;
\n-
130 }
\n-
131 } else {
\n-
132 // We're not looking for unused slots, so just add the factors at the end.
\n-
133 for (size_t i = 0; i < num_factors; ++i) newFactorIndices[i] = i + size();
\n-
134 push_back(factors);
\n-
135 }
\n-
136 return newFactorIndices;
\n-
137}
\n-
\n+
93 // If key1 is a new key, add it to the key2vertex map, else get the corresponding vertex id
\n+
94 if (key2vertex.find(key1) == key2vertex.end()) {
\n+
95 v1 = add_vertex(key1, g);
\n+
96 key2vertex.insert(std::pair<KEY,KEY>(key1, v1));
\n+
97 } else
\n+
98 v1 = key2vertex[key1];
\n+
99
\n+
100 // If key2 is a new key, add it to the key2vertex map, else get the corresponding vertex id
\n+
101 if (key2vertex.find(key2) == key2vertex.end()) {
\n+
102 v2 = add_vertex(key2, g);
\n+
103 key2vertex.insert(std::pair<KEY,KEY>(key2, v2));
\n+
104 } else
\n+
105 v2 = key2vertex[key2];
\n+
106
\n+
107 // Add an edge with weight 1.0
\n+
108 boost::property<boost::edge_weight_t, double> edge_property(1.0); // assume constant edge weight here
\n+
109 boost::add_edge(v1, v2, edge_property, g);
\n+
110 }
\n+
111
\n+
112 return g;
\n+
113}
\n+
\n+
114
\n+
115/* ************************************************************************* */
\n+
116template<class G, class V, class KEY>
\n+
117boost::tuple<G, V, std::map<KEY,V> >
\n+
\n+\n+
119
\n+
120 G g;
\n+
121 std::map<KEY, V> key2vertex;
\n+
122 V v1, v2, root;
\n+
123 bool foundRoot = false;
\n+
124 for(auto child_parent: p_map) {
\n+
125 KEY child, parent;
\n+
126 std::tie(child,parent) = child_parent;
\n+
127 if (key2vertex.find(child) == key2vertex.end()) {
\n+
128 v1 = add_vertex(child, g);
\n+
129 key2vertex.insert(std::make_pair(child, v1));
\n+
130 } else
\n+
131 v1 = key2vertex[child];
\n+
132
\n+
133 if (key2vertex.find(parent) == key2vertex.end()) {
\n+
134 v2 = add_vertex(parent, g);
\n+
135 key2vertex.insert(std::make_pair(parent, v2));
\n+
136 } else
\n+
137 v2 = key2vertex[parent];
\n
138
\n-
139/* ************************************************************************* */
\n-
140template <class FACTOR>
\n-
\n-
141void FactorGraph<FACTOR>::dot(std::ostream& os,
\n-
142 const KeyFormatter& keyFormatter,
\n-
143 const DotWriter& writer) const {
\n-
144 writer.graphPreamble(&os);
\n+
139 if (child==parent) {
\n+
140 root = v1;
\n+
141 foundRoot = true;
\n+
142 } else
\n+
143 boost::add_edge(v2, v1, g); // edge is from parent to child
\n+
144 }
\n
145
\n-
146 // Create nodes for each variable in the graph
\n-
147 for (Key key : keys()) {
\n-
148 auto position = writer.variablePos(key);
\n-
149 writer.drawVariable(key, keyFormatter, position, &os);
\n-
150 }
\n-
151 os << "\\n";
\n-
152
\n-
153 // Create factors and variable connections
\n-
154 for (size_t i = 0; i < size(); ++i) {
\n-
155 const auto& factor = at(i);
\n-
156 if (factor) {
\n-
157 const KeyVector& factorKeys = factor->keys();
\n-
158 writer.processFactor(i, factorKeys, keyFormatter, boost::none, &os);
\n-
159 }
\n-
160 }
\n-
161
\n-
162 os << "}\\n";
\n-
163 std::flush(os);
\n-
164}
\n-
\n-
165
\n-
166/* ************************************************************************* */
\n-
167template <class FACTOR>
\n-
\n-
168std::string FactorGraph<FACTOR>::dot(const KeyFormatter& keyFormatter,
\n-
169 const DotWriter& writer) const {
\n-
170 std::stringstream ss;
\n-
171 dot(ss, keyFormatter, writer);
\n-
172 return ss.str();
\n-
173}
\n-
\n-
174
\n-
175/* ************************************************************************* */
\n-
176template <class FACTOR>
\n-
\n-
177void FactorGraph<FACTOR>::saveGraph(const std::string& filename,
\n-
178 const KeyFormatter& keyFormatter,
\n-
179 const DotWriter& writer) const {
\n-
180 std::ofstream of(filename.c_str());
\n-
181 dot(of, keyFormatter, writer);
\n-
182 of.close();
\n-
183}
\n-
\n+
146 if (!foundRoot)
\n+
147 throw std::invalid_argument("predecessorMap2Graph: invalid predecessor map!");
\n+
148 else
\n+
149 return boost::tuple<G, V, std::map<KEY, V> >(g, root, key2vertex);
\n+
150}
\n+
\n+
151
\n+
152/* ************************************************************************* */
\n+
153template <class V, class POSE, class KEY>
\n+
\n+
154class compose_key_visitor : public boost::default_bfs_visitor {
\n+
155
\n+
156private:
\n+
157 boost::shared_ptr<Values> config_;
\n+
158
\n+
159public:
\n+
160
\n+
161 compose_key_visitor(boost::shared_ptr<Values> config_in) {config_ = config_in;}
\n+
162
\n+
163 template <typename Edge, typename Graph> void tree_edge(Edge edge, const Graph& g) const {
\n+
164 KEY key_from = boost::get(boost::vertex_name, g, boost::source(edge, g));
\n+
165 KEY key_to = boost::get(boost::vertex_name, g, boost::target(edge, g));
\n+
166 POSE relativePose = boost::get(boost::edge_weight, g, edge);
\n+
167 config_->insert(key_to, config_->at<POSE>(key_from).compose(relativePose));
\n+
168 }
\n+
169
\n+
170};
\n+
\n+
171
\n+
172/* ************************************************************************* */
\n+
173template<class G, class Factor, class POSE, class KEY>
\n+
\n+
174boost::shared_ptr<Values> composePoses(const G& graph, const PredecessorMap<KEY>& tree,
\n+
175 const POSE& rootPose) {
\n+
176
\n+
177 //TODO: change edge_weight_t to edge_pose_t
\n+
178 typedef typename boost::adjacency_list<
\n+
179 boost::vecS, boost::vecS, boost::directedS,
\n+
180 boost::property<boost::vertex_name_t, KEY>,
\n+
181 boost::property<boost::edge_weight_t, POSE> > PoseGraph;
\n+
182 typedef typename boost::graph_traits<PoseGraph>::vertex_descriptor PoseVertex;
\n+
183 typedef typename boost::graph_traits<PoseGraph>::edge_descriptor PoseEdge;
\n
184
\n-
185} // namespace gtsam
\n-
Factor Graph Base Class.
\n+
185 PoseGraph g;
\n+
186 PoseVertex root;
\n+
187 std::map<KEY, PoseVertex> key2vertex;
\n+
188 boost::tie(g, root, key2vertex) =
\n+
189 predecessorMap2Graph<PoseGraph, PoseVertex, KEY>(tree);
\n+
190
\n+
191 // attach the relative poses to the edges
\n+
192 PoseEdge edge12, edge21;
\n+
193 bool found1, found2;
\n+
194 for(typename G::sharedFactor nl_factor: graph) {
\n+
195
\n+
196 if (nl_factor->keys().size() > 2)
\n+
197 throw std::invalid_argument("composePoses: only support factors with at most two keys");
\n+
198
\n+
199 // e.g. in pose2graph, nonlinear factor needs to be converted to pose2factor
\n+
200 boost::shared_ptr<Factor> factor = boost::dynamic_pointer_cast<Factor>(nl_factor);
\n+
201 if (!factor) continue;
\n+
202
\n+
203 KEY key1 = factor->key1();
\n+
204 KEY key2 = factor->key2();
\n+
205
\n+
206 PoseVertex v1 = key2vertex.find(key1)->second;
\n+
207 PoseVertex v2 = key2vertex.find(key2)->second;
\n+
208
\n+
209 POSE l1Xl2 = factor->measured();
\n+
210 boost::tie(edge12, found1) = boost::edge(v1, v2, g);
\n+
211 boost::tie(edge21, found2) = boost::edge(v2, v1, g);
\n+
212 if (found1 && found2) throw std::invalid_argument ("composePoses: invalid spanning tree");
\n+
213 if (!found1 && !found2) continue;
\n+
214 if (found1)
\n+
215 boost::put(boost::edge_weight, g, edge12, l1Xl2);
\n+
216 else if (found2)
\n+
217 boost::put(boost::edge_weight, g, edge21, l1Xl2.inverse());
\n+
218 }
\n+
219
\n+
220 // compose poses
\n+
221 boost::shared_ptr<Values> config(new Values);
\n+
222 KEY rootKey = boost::get(boost::vertex_name, g, root);
\n+
223 config->insert(rootKey, rootPose);
\n+\n+
225 boost::breadth_first_search(g, root, boost::visitor(vis));
\n+
226
\n+
227 return config;
\n+
228}
\n+
\n+
229
\n+
230/* ************************************************************************* */
\n+
231template<class G, class KEY, class FACTOR2>
\n+
\n+\n+
233
\n+
234 // Convert to a graph that boost understands
\n+
235 SDGraph<KEY> g = gtsam::toBoostGraph<G, FACTOR2, KEY>(fg);
\n+
236
\n+
237 // find minimum spanning tree
\n+
238 std::vector<typename SDGraph<KEY>::Vertex> p_map(boost::num_vertices(g));
\n+
239 prim_minimum_spanning_tree(g, &p_map[0]);
\n+
240
\n+
241 // convert edge to string pairs
\n+\n+
243 typename SDGraph<KEY>::vertex_iterator itVertex = boost::vertices(g).first;
\n+
244 for(const typename SDGraph<KEY>::Vertex& vi: p_map){
\n+
245 KEY key = boost::get(boost::vertex_name, g, *itVertex);
\n+
246 KEY parent = boost::get(boost::vertex_name, g, vi);
\n+
247 tree.insert(key, parent);
\n+
248 itVertex++;
\n+
249 }
\n+
250 return tree;
\n+
251}
\n+
\n+
252
\n+
253/* ************************************************************************* */
\n+
254template<class G, class KEY, class FACTOR2>
\n+
\n+
255void split(const G& g, const PredecessorMap<KEY>& tree, G& Ab1, G& Ab2) {
\n+
256
\n+
257 typedef typename G::sharedFactor F ;
\n+
258
\n+
259 for(const F& factor: g)
\n+
260 {
\n+
261 if (factor->keys().size() > 2)
\n+
262 throw(std::invalid_argument("split: only support factors with at most two keys"));
\n+
263
\n+
264 if (factor->keys().size() == 1) {
\n+
265 Ab1.push_back(factor);
\n+
266 continue;
\n+
267 }
\n+
268
\n+
269 boost::shared_ptr<FACTOR2> factor2 = boost::dynamic_pointer_cast<
\n+
270 FACTOR2>(factor);
\n+
271 if (!factor2) continue;
\n+
272
\n+
273 KEY key1 = factor2->key1();
\n+
274 KEY key2 = factor2->key2();
\n+
275 // if the tree contains the key
\n+
276 if ((tree.find(key1) != tree.end() &&
\n+
277 tree.find(key1)->second.compare(key2) == 0) ||
\n+
278 (tree.find(key2) != tree.end() &&
\n+
279 tree.find(key2)->second.compare(key1)== 0) )
\n+
280 Ab1.push_back(factor2);
\n+
281 else
\n+
282 Ab2.push_back(factor2);
\n+
283 }
\n+
284}
\n+
\n+
285
\n+
286}
\n+
Graph algorithm using boost library.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
virtual void print(const std::string &s="FactorGraph", const KeyFormatter &formatter=DefaultKeyFormatter) const
Print out graph to std::cout, with optional key formatter.
Definition FactorGraph-inst.h:37
\n-
KeySet keys() const
Potentially slow function to return all keys involved, sorted, as a set.
Definition FactorGraph-inst.h:85
\n-
FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)
Add new factors to a factor graph and returns a list of new factor indices, optionally finding and re...
Definition FactorGraph-inst.h:109
\n-
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
Output to graphviz format, stream version.
Definition FactorGraph-inst.h:141
\n-
KeyVector keyVector() const
Potentially slow function to return all keys involved, sorted, as a vector.
Definition FactorGraph-inst.h:95
\n-
double error(const HybridValues &values) const
Add error for all factors.
Definition FactorGraph-inst.h:66
\n-
size_t nrFactors() const
return the number of non-null factors
Definition FactorGraph-inst.h:76
\n-
size_t size() const
return the number of factors (including any null factors set by remove() ).
Definition FactorGraph.h:326
\n-
bool equals(const This &fg, double tol=1e-9) const
Check equality up to tolerance.
Definition FactorGraph-inst.h:50
\n-
boost::shared_ptr< FACTOR > sharedFactor
Shared pointer to a factor.
Definition FactorGraph.h:101
\n-
FastVector< sharedFactor > factors_
concept check, makes sure FACTOR defines print and equals
Definition FactorGraph.h:131
\n-
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
output to file with graphviz format.
Definition FactorGraph-inst.h:177
\n-
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n-
void drawVariable(Key key, const KeyFormatter &keyFormatter, const boost::optional< Vector2 > &position, std::ostream *os) const
Create a variable dot fragment.
Definition DotWriter.cpp:42
\n-
void processFactor(size_t i, const KeyVector &keys, const KeyFormatter &keyFormatter, const boost::optional< Vector2 > &position, std::ostream *os) const
Draw a single factor, specified by its index i and its variable keys.
Definition DotWriter.cpp:96
\n-
boost::optional< Vector2 > variablePos(Key key) const
Return variable position or none.
Definition DotWriter.cpp:79
\n-
void graphPreamble(std::ostream *os) const
Write out preamble for graph, including size.
Definition DotWriter.cpp:30
\n+
std::list< KEY > predecessorMap2Keys(const PredecessorMap< KEY > &p_map)
Generate a list of keys from a spanning tree represented by its predecessor map.
Definition graph-inl.h:50
\n+
void split(const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)
Split the graph into two parts: one corresponds to the given spanning tree, and the other corresponds...
Definition graph-inl.h:255
\n+
boost::shared_ptr< Values > composePoses(const G &graph, const PredecessorMap< KEY > &tree, const POSE &rootPose)
Compose the poses by following the chain specified by the spanning tree.
Definition graph-inl.h:174
\n+
SDGraph< KEY > toBoostGraph(const G &graph)
Convert the factor graph to an SDGraph G = Graph type F = Factor type Key = Key type.
Definition graph-inl.h:68
\n+
PredecessorMap< KEY > findMinimumSpanningTree(const G &fg)
find the minimum spanning tree using boost graph library
Definition graph-inl.h:232
\n+
boost::tuple< G, V, std::map< KEY, V > > predecessorMap2Graph(const PredecessorMap< KEY > &p_map)
Build takes a predecessor map, and builds a directed graph corresponding to the tree.
Definition graph-inl.h:118
\n+
Definition graph-inl.h:38
\n+
Definition graph-inl.h:154
\n+
SDGraph is undirected graph with variable keys and double edge weights.
Definition graph.h:40
\n+
Definition graph.h:47
\n+
Map from variable key to parent key.
Definition graph.h:58
\n+
void insert(const KEY &key, const KEY &parent)
convenience insert so we can pass ints for TypedSymbol keys
Definition graph.h:61
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,305 +1,377 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FactorGraph-inst.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+graph-inl.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-22#pragma once\n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-25\n-26#include \n-27#include \n-28#include // for cout :-(\n-29#include \n-30#include \n-31#include \n-32\n-33namespace _\bg_\bt_\bs_\ba_\bm {\n-34\n-35/* *************************************************************************\n+12/*\n+13 * @file graph-inl.h\n+14 * @brief Graph algorithm using boost library\n+15 * @author Kai Ni\n+16 */\n+17\n+18#pragma once\n+19\n+20#include \n+21#ifdef __GNUC__\n+22#pragma GCC diagnostic push\n+23#pragma GCC diagnostic ignored \"-Wunused-variable\"\n+24//#pragma GCC diagnostic ignored \"-Wunneeded-internal-declaration\"\n+25#endif\n+26#include \n+27#ifdef __GNUC__\n+28#pragma GCC diagnostic pop\n+29#endif\n+30#include \n+31\n+32#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bg_\br_\ba_\bp_\bh_\b._\bh>\n+33\n+34namespace _\bg_\bt_\bs_\ba_\bm {\n+35\n+36/* *************************************************************************\n */\n-36template \n-_\b3_\b7void _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s,\n-38 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter) const {\n-39 std::cout << (s.empty() ? \"\" : s + \" \") << std::endl;\n-40 std::cout << \"size: \" << size() << std::endl;\n-41 for (size_t i = 0; i < factors_.size(); i++) {\n-42 std::stringstream ss;\n-43 ss << \"factor \" << i << \": \";\n-44 if (factors_[i]) factors_[i]->print(ss.str(), formatter);\n-45 }\n-46}\n+37template \n+_\b3_\b8class _\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br : public boost::default_bfs_visitor {\n+39public:\n+40 _\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br(std::list& ordering_in) : ordering_(ordering_in)\n+{}\n+41 template void discover_vertex(Vertex v,\n+const Graph& g) const {\n+42 KEY key = boost::get(boost::vertex_name, g, v);\n+43 ordering_.push_front(key);\n+44 }\n+45 std::list& ordering_;\n+46};\n 47\n 48/* *************************************************************************\n */\n-49template \n-_\b5_\b0bool _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& fg, double tol) const {\n-51 // check whether the two factor graphs have the same number of factors.\n-52 if (factors_.size() != fg._\bs_\bi_\bz_\be()) return false;\n+49template\n+_\b5_\b0std::list _\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bK_\be_\by_\bs(const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b>& p_map) {\n+51\n+52 typedef typename SGraph::Vertex SVertex;\n 53\n-54 // check whether the factors are the same, in same order.\n-55 for (size_t i = 0; i < factors_.size(); i++) {\n-56 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br f1 = factors_[i], f2 = fg._\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_[i];\n-57 if (f1 == nullptr && f2 == nullptr) continue;\n-58 if (f1 == nullptr || f2 == nullptr) return false;\n-59 if (!f1->equals(*f2, tol)) return false;\n-60 }\n-61 return true;\n-62}\n-63\n-64/* ************************************************************************\n+54 _\bS_\bG_\br_\ba_\bp_\bh_\b<_\bK_\bE_\bY_\b> g;\n+55 SVertex root;\n+56 std::map key2vertex;\n+57 boost::tie(g, root, key2vertex) = gtsam::predecessorMap2Graph,\n+SVertex, KEY>(p_map);\n+58\n+59 // breadth first visit on the graph\n+60 std::list keys;\n+61 _\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br_\b<_\bK_\bE_\bY_\b> vis(keys);\n+62 boost::breadth_first_search(g, root, boost::visitor(vis));\n+63 return keys;\n+64}\n+65\n+66/* *************************************************************************\n */\n-65template \n-_\b6_\b6double _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\be_\br_\br_\bo_\br(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const {\n-67 double error = 0.0;\n-68 for (auto &f : factors_) {\n-69 error += f->error(values);\n-70 }\n-71 return error;\n-72}\n-73\n-74/* *************************************************************************\n-*/\n-75template \n-_\b7_\b6size_t _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bn_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs() const {\n-77 size_t size_ = 0;\n-78 for (const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor : factors_)\n-79 if (factor) size_++;\n-80 return size_;\n-81}\n-82\n-83/* *************************************************************************\n-*/\n-84template \n-_\b8_\b5_\bK_\be_\by_\bS_\be_\bt _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bk_\be_\by_\bs() const {\n-86 _\bK_\be_\by_\bS_\be_\bt keys;\n-87 for (const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor : this->factors_) {\n-88 if (factor) keys.insert(factor->begin(), factor->end());\n-89 }\n-90 return keys;\n-91}\n+67template\n+_\b6_\b8_\bS_\bD_\bG_\br_\ba_\bp_\bh_\b<_\bK_\bE_\bY_\b> _\bt_\bo_\bB_\bo_\bo_\bs_\bt_\bG_\br_\ba_\bp_\bh(const G& graph) {\n+69 // convert the factor graph to boost graph\n+70 _\bS_\bD_\bG_\br_\ba_\bp_\bh_\b<_\bK_\bE_\bY_\b> g;\n+71 typedef typename boost::graph_traits >::vertex_descriptor\n+BoostVertex;\n+72 std::map key2vertex;\n+73 typename G::const_iterator itFactor;\n+74\n+75 // Loop over the factors\n+76 for(itFactor=graph.begin(); itFactor!=graph.end(); itFactor++) {\n+77\n+78 // Ignore factors that are not binary\n+79 if ((*itFactor)->keys().size() != 2)\n+80 continue;\n+81\n+82 // Cast the factor to the user-specified factor type F\n+83 boost::shared_ptr factor = boost::dynamic_pointer_cast(*itFactor);\n+84 // Ignore factors that are not of type F\n+85 if (!factor) continue;\n+86\n+87 // Retrieve the 2 keys (nodes) the factor (edge) is incident on\n+88 KEY key1 = factor->keys()[0];\n+89 KEY key2 = factor->keys()[1];\n+90\n+91 BoostVertex v1, v2;\n 92\n-93/* *************************************************************************\n-*/\n-94template \n-_\b9_\b5_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bk_\be_\by_\bV_\be_\bc_\bt_\bo_\br() const {\n-96 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keys;\n-97 keys.reserve(2 * size()); // guess at size\n-98 for (const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor : factors_)\n-99 if (factor) keys.insert(keys.end(), factor->begin(), factor->end());\n-100 std::sort(keys.begin(), keys.end());\n-101 auto last = std::unique(keys.begin(), keys.end());\n-102 keys.erase(last, keys.end());\n-103 return keys;\n-104}\n-105\n-106/* *************************************************************************\n+93 // If key1 is a new key, add it to the key2vertex map, else get the\n+corresponding vertex id\n+94 if (key2vertex.find(key1) == key2vertex.end()) {\n+95 v1 = add_vertex(key1, g);\n+96 key2vertex.insert(std::pair(key1, v1));\n+97 } else\n+98 v1 = key2vertex[key1];\n+99\n+100 // If key2 is a new key, add it to the key2vertex map, else get the\n+corresponding vertex id\n+101 if (key2vertex.find(key2) == key2vertex.end()) {\n+102 v2 = add_vertex(key2, g);\n+103 key2vertex.insert(std::pair(key2, v2));\n+104 } else\n+105 v2 = key2vertex[key2];\n+106\n+107 // Add an edge with weight 1.0\n+108 boost::property edge_property(1.0); // assume\n+constant edge weight here\n+109 boost::add_edge(v1, v2, edge_property, g);\n+110 }\n+111\n+112 return g;\n+113}\n+114\n+115/* *************************************************************************\n */\n-107template \n-108template \n-_\b1_\b0_\b9_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs(const CONTAINER& factors,\n-110 bool useEmptySlots) {\n-111 const size_t num_factors = factors.size();\n-112 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs newFactorIndices(num_factors);\n-113 if (useEmptySlots) {\n-114 size_t i = 0;\n-115 for (size_t j = 0; j < num_factors; ++j) {\n-116 // Loop to find the next available factor slot\n-117 do {\n-118 if (i >= size())\n-119 // Make room for remaining factors, happens only once.\n-120 resize(size() + num_factors - j);\n-121 else if (at(i))\n-122 ++i; // Move on to the next slot or past end.\n-123 else\n-124 break; // We found an empty slot, break to fill it.\n-125 } while (true);\n-126\n-127 // Use the current slot, updating graph and newFactorSlots.\n-128 at(i) = factors[j];\n-129 newFactorIndices[j] = i;\n-130 }\n-131 } else {\n-132 // We're not looking for unused slots, so just add the factors at the end.\n-133 for (size_t i = 0; i < num_factors; ++i) newFactorIndices[i] = i + size();\n-134 push_back(factors);\n-135 }\n-136 return newFactorIndices;\n-137}\n+116template\n+117boost::tuple >\n+_\b1_\b1_\b8_\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bG_\br_\ba_\bp_\bh(const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b>& p_map) {\n+119\n+120 G g;\n+121 std::map key2vertex;\n+122 V v1, v2, root;\n+123 bool foundRoot = false;\n+124 for(auto child_parent: p_map) {\n+125 KEY child, parent;\n+126 std::tie(child,parent) = child_parent;\n+127 if (key2vertex.find(child) == key2vertex.end()) {\n+128 v1 = add_vertex(child, g);\n+129 key2vertex.insert(std::make_pair(child, v1));\n+130 } else\n+131 v1 = key2vertex[child];\n+132\n+133 if (key2vertex.find(parent) == key2vertex.end()) {\n+134 v2 = add_vertex(parent, g);\n+135 key2vertex.insert(std::make_pair(parent, v2));\n+136 } else\n+137 v2 = key2vertex[parent];\n 138\n-139/* *************************************************************************\n-*/\n-140template \n-_\b1_\b4_\b1void _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bd_\bo_\bt(std::ostream& os,\n-142 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n-143 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n-144 writer._\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\ba_\bm_\bb_\bl_\be(&os);\n+139 if (child==parent) {\n+140 root = v1;\n+141 foundRoot = true;\n+142 } else\n+143 boost::add_edge(v2, v1, g); // edge is from parent to child\n+144 }\n 145\n-146 // Create nodes for each variable in the graph\n-147 for (_\bK_\be_\by key : keys()) {\n-148 auto position = writer._\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs(key);\n-149 writer._\bd_\br_\ba_\bw_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be(key, keyFormatter, position, &os);\n-150 }\n-151 os << \"\\n\";\n-152\n-153 // Create factors and variable connections\n-154 for (size_t i = 0; i < size(); ++i) {\n-155 const auto& factor = at(i);\n-156 if (factor) {\n-157 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& factorKeys = factor->keys();\n-158 writer._\bp_\br_\bo_\bc_\be_\bs_\bs_\bF_\ba_\bc_\bt_\bo_\br(i, factorKeys, keyFormatter, boost::none, &os);\n-159 }\n-160 }\n-161\n-162 os << \"}\\n\";\n-163 std::flush(os);\n-164}\n-165\n-166/* *************************************************************************\n+146 if (!foundRoot)\n+147 throw std::invalid_argument(\"predecessorMap2Graph: invalid predecessor\n+map!\");\n+148 else\n+149 return boost::tuple >(g, root, key2vertex);\n+150}\n+151\n+152/* *************************************************************************\n */\n-167template \n-_\b1_\b6_\b8std::string _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n-169 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n-170 std::stringstream ss;\n-171 _\bd_\bo_\bt(ss, keyFormatter, writer);\n-172 return ss.str();\n-173}\n-174\n-175/* *************************************************************************\n+153template \n+_\b1_\b5_\b4class _\bc_\bo_\bm_\bp_\bo_\bs_\be_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br : public boost::default_bfs_visitor {\n+155\n+156private:\n+157 boost::shared_ptr config_;\n+158\n+159public:\n+160\n+161 _\bc_\bo_\bm_\bp_\bo_\bs_\be_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br(boost::shared_ptr config_in) {config_ =\n+config_in;}\n+162\n+163 template void tree_edge(Edge edge, const\n+Graph& g) const {\n+164 KEY key_from = boost::get(boost::vertex_name, g, boost::source(edge, g));\n+165 KEY key_to = boost::get(boost::vertex_name, g, boost::target(edge, g));\n+166 POSE relativePose = boost::get(boost::edge_weight, g, edge);\n+167 config_->insert(key_to, config_->at(key_from).compose(relativePose));\n+168 }\n+169\n+170};\n+171\n+172/* *************************************************************************\n */\n-176template \n-_\b1_\b7_\b7void _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n-178 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n-179 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n-180 std::ofstream of(filename.c_str());\n-181 _\bd_\bo_\bt(of, keyFormatter, writer);\n-182 of.close();\n-183}\n+173template\n+_\b1_\b7_\b4boost::shared_ptr _\bc_\bo_\bm_\bp_\bo_\bs_\be_\bP_\bo_\bs_\be_\bs(const G& graph, const\n+_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b>& tree,\n+175 const POSE& rootPose) {\n+176\n+177 //TODO: change edge_weight_t to edge_pose_t\n+178 typedef typename boost::adjacency_list<\n+179 boost::vecS, boost::vecS, boost::directedS,\n+180 boost::property,\n+181 boost::property > PoseGraph;\n+182 typedef typename boost::graph_traits::vertex_descriptor\n+PoseVertex;\n+183 typedef typename boost::graph_traits::edge_descriptor PoseEdge;\n 184\n-185} // namespace gtsam\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n+185 PoseGraph g;\n+186 PoseVertex root;\n+187 std::map key2vertex;\n+188 boost::tie(g, root, key2vertex) =\n+189 predecessorMap2Graph(tree);\n+190\n+191 // attach the relative poses to the edges\n+192 PoseEdge edge12, edge21;\n+193 bool found1, found2;\n+194 for(typename G::sharedFactor nl_factor: graph) {\n+195\n+196 if (nl_factor->keys().size() > 2)\n+197 throw std::invalid_argument(\"composePoses: only support factors with at\n+most two keys\");\n+198\n+199 // e.g. in pose2graph, nonlinear factor needs to be converted to\n+pose2factor\n+200 boost::shared_ptr factor = boost::dynamic_pointer_cast\n+(nl_factor);\n+201 if (!factor) continue;\n+202\n+203 KEY key1 = factor->key1();\n+204 KEY key2 = factor->key2();\n+205\n+206 PoseVertex v1 = key2vertex.find(key1)->second;\n+207 PoseVertex v2 = key2vertex.find(key2)->second;\n+208\n+209 POSE l1Xl2 = factor->measured();\n+210 boost::tie(edge12, found1) = boost::edge(v1, v2, g);\n+211 boost::tie(edge21, found2) = boost::edge(v2, v1, g);\n+212 if (found1 && found2) throw std::invalid_argument (\"composePoses: invalid\n+spanning tree\");\n+213 if (!found1 && !found2) continue;\n+214 if (found1)\n+215 boost::put(boost::edge_weight, g, edge12, l1Xl2);\n+216 else if (found2)\n+217 boost::put(boost::edge_weight, g, edge21, l1Xl2.inverse());\n+218 }\n+219\n+220 // compose poses\n+221 boost::shared_ptr config(new _\bV_\ba_\bl_\bu_\be_\bs);\n+222 KEY rootKey = boost::get(boost::vertex_name, g, root);\n+223 config->insert(rootKey, rootPose);\n+224 _\bc_\bo_\bm_\bp_\bo_\bs_\be_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br_\b<_\bP_\bo_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\b,_\b _\bP_\bO_\bS_\bE_\b,_\b _\bK_\bE_\bY_\b> vis(config);\n+225 boost::breadth_first_search(g, root, boost::visitor(vis));\n+226\n+227 return config;\n+228}\n+229\n+230/* *************************************************************************\n+*/\n+231template\n+_\b2_\b3_\b2_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b> _\bf_\bi_\bn_\bd_\bM_\bi_\bn_\bi_\bm_\bu_\bm_\bS_\bp_\ba_\bn_\bn_\bi_\bn_\bg_\bT_\br_\be_\be(const G& fg) {\n+233\n+234 // Convert to a graph that boost understands\n+235 _\bS_\bD_\bG_\br_\ba_\bp_\bh_\b<_\bK_\bE_\bY_\b> g = gtsam::toBoostGraph(fg);\n+236\n+237 // find minimum spanning tree\n+238 std::vector::Vertex> p_map(boost::num_vertices(g));\n+239 prim_minimum_spanning_tree(g, &p_map[0]);\n+240\n+241 // convert edge to string pairs\n+242 _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b> tree;\n+243 typename _\bS_\bD_\bG_\br_\ba_\bp_\bh_\b<_\bK_\bE_\bY_\b>_\b:_\b:_\bv_\be_\br_\bt_\be_\bx_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br itVertex = boost::vertices(g).first;\n+244 for(const typename SDGraph::Vertex& vi: p_map){\n+245 KEY key = boost::get(boost::vertex_name, g, *itVertex);\n+246 KEY parent = boost::get(boost::vertex_name, g, vi);\n+247 tree._\bi_\bn_\bs_\be_\br_\bt(key, parent);\n+248 itVertex++;\n+249 }\n+250 return tree;\n+251}\n+252\n+253/* *************************************************************************\n+*/\n+254template\n+_\b2_\b5_\b5void _\bs_\bp_\bl_\bi_\bt(const G& g, const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b>& tree, G& Ab1, G& Ab2) {\n+256\n+257 typedef typename G::sharedFactor F ;\n+258\n+259 for(const F& factor: g)\n+260 {\n+261 if (factor->keys().size() > 2)\n+262 throw(std::invalid_argument(\"split: only support factors with at most two\n+keys\"));\n+263\n+264 if (factor->keys().size() == 1) {\n+265 Ab1.push_back(factor);\n+266 continue;\n+267 }\n+268\n+269 boost::shared_ptr factor2 = boost::dynamic_pointer_cast<\n+270 FACTOR2>(factor);\n+271 if (!factor2) continue;\n+272\n+273 KEY key1 = factor2->key1();\n+274 KEY key2 = factor2->key2();\n+275 // if the tree contains the key\n+276 if ((tree.find(key1) != tree.end() &&\n+277 tree.find(key1)->second.compare(key2) == 0) ||\n+278 (tree.find(key2) != tree.end() &&\n+279 tree.find(key2)->second.compare(key1)== 0) )\n+280 Ab1.push_back(factor2);\n+281 else\n+282 Ab2.push_back(factor2);\n+283 }\n+284}\n+285\n+286}\n+_\bg_\br_\ba_\bp_\bh_\b._\bh\n+Graph algorithm using boost library.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-FastVector< FactorIndex > FactorIndices\n-Define collection types:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"FactorGraph\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-Print out graph to std::cout, with optional key formatter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bk_\be_\by_\bs\n-KeySet keys() const\n-Potentially slow function to return all keys involved, sorted, as a set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs\n-FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)\n-Add new factors to a factor graph and returns a list of new factor indices,\n-optionally finding and re...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bd_\bo_\bt\n-void dot(std::ostream &os, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n-Output to graphviz format, stream version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bk_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-KeyVector keyVector() const\n-Potentially slow function to return all keys involved, sorted, as a vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const HybridValues &values) const\n-Add error for all factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bn_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-size_t nrFactors() const\n-return the number of non-null factors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-return the number of factors (including any null factors set by remove() ).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:326\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &fg, double tol=1e-9) const\n-Check equality up to tolerance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< FACTOR > sharedFactor\n-Shared pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_\n-FastVector< sharedFactor > factors_\n-concept check, makes sure FACTOR defines print and equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n-void saveGraph(const std::string &filename, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n-output to file with graphviz format.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n-DotWriter is a helper class for writing graphviz .dot files.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bd_\br_\ba_\bw_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be\n-void drawVariable(Key key, const KeyFormatter &keyFormatter, const boost::\n-optional< Vector2 > &position, std::ostream *os) const\n-Create a variable dot fragment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bp_\br_\bo_\bc_\be_\bs_\bs_\bF_\ba_\bc_\bt_\bo_\br\n-void processFactor(size_t i, const KeyVector &keys, const KeyFormatter\n-&keyFormatter, const boost::optional< Vector2 > &position, std::ostream *os)\n-const\n-Draw a single factor, specified by its index i and its variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs\n-boost::optional< Vector2 > variablePos(Key key) const\n-Return variable position or none.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\ba_\bm_\bb_\bl_\be\n-void graphPreamble(std::ostream *os) const\n-Write out preamble for graph, including size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bK_\be_\by_\bs\n+std::list< KEY > predecessorMap2Keys(const PredecessorMap< KEY > &p_map)\n+Generate a list of keys from a spanning tree represented by its predecessor\n+map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\bl_\bi_\bt\n+void split(const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)\n+Split the graph into two parts: one corresponds to the given spanning tree, and\n+the other corresponds...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:255\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bm_\bp_\bo_\bs_\be_\bP_\bo_\bs_\be_\bs\n+boost::shared_ptr< Values > composePoses(const G &graph, const PredecessorMap<\n+KEY > &tree, const POSE &rootPose)\n+Compose the poses by following the chain specified by the spanning tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\bo_\bB_\bo_\bo_\bs_\bt_\bG_\br_\ba_\bp_\bh\n+SDGraph< KEY > toBoostGraph(const G &graph)\n+Convert the factor graph to an SDGraph G = Graph type F = Factor type Key = Key\n+type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bi_\bn_\bd_\bM_\bi_\bn_\bi_\bm_\bu_\bm_\bS_\bp_\ba_\bn_\bn_\bi_\bn_\bg_\bT_\br_\be_\be\n+PredecessorMap< KEY > findMinimumSpanningTree(const G &fg)\n+find the minimum spanning tree using boost graph library\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:232\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bG_\br_\ba_\bp_\bh\n+boost::tuple< G, V, std::map< KEY, V > > predecessorMap2Graph(const\n+PredecessorMap< KEY > &p_map)\n+Build takes a predecessor map, and builds a directed graph corresponding to the\n+tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bm_\bp_\bo_\bs_\be_\b__\bk_\be_\by_\b__\bv_\bi_\bs_\bi_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph-inl.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bD_\bG_\br_\ba_\bp_\bh\n+SDGraph is undirected graph with variable keys and double edge weights.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp\n+Map from variable key to parent key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n+void insert(const KEY &key, const KEY &parent)\n+convenience insert so we can pass ints for TypedSymbol keys\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn graph.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * g\bgr\bra\bap\bph\bh-\b-i\bin\bnl\bl.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00686.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00686.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/DotWriter.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree.h File Reference\n \n \n \n \n \n \n \n@@ -96,43 +96,53 @@\n \n \n \n
\n \n-
DotWriter.h File Reference
\n+
ClusterTree.h File Reference
\n
\n
\n \n-

Graphviz formatter. \n+

Collects factorgraph fragments defined on variable clusters, arranged in a tree. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

struct  gtsam::DotWriter
 DotWriter is a helper class for writing graphviz .dot files. More...
class  gtsam::ClusterTree< GRAPH >
 A cluster-tree is associated with a factor graph and is defined as in Koller-Friedman: each node k represents a subset \\( C_k \\sub X \\), and the tree is family preserving, in that each factor \\( f_i \\) is associated with a single cluster and \\( scope(f_i) \\sub C_k \\). More...
 
struct  gtsam::ClusterTree< GRAPH >::Cluster
 A Cluster is just a collection of factors. More...
 
class  gtsam::EliminatableClusterTree< BAYESTREE, GRAPH >
 A cluster-tree that eliminates to a Bayes tree. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Graphviz formatter.

\n-
Author
Frank Dellaert
\n-
Date
December, 2021
\n+

Collects factorgraph fragments defined on variable clusters, arranged in a tree.

\n+
Date
Oct 8, 2013
\n+
Author
Kai Ni
\n+
\n+Richard Roberts
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,41 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DotWriter.h File Reference\n-Graphviz formatter. _\bM_\bo_\br_\be_\b._\b._\b.\n+ClusterTree.h File Reference\n+Collects factorgraph fragments defined on variable clusters, arranged in a\n+tree. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n-\u00a0 _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br is a helper class for writing graphviz .dot files. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>\n+ A cluster-tree is associated with a factor graph and is defined as in\n+ Koller-Friedman: each node k represents a subset \\( C_k \\sub X \\), and\n+\u00a0 the tree is family preserving, in that each factor \\( f_i \\) is\n+ associated with a single cluster and \\( scope(f_i) \\sub C_k \\).\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n+\u00a0 A _\bC_\bl_\bu_\bs_\bt_\be_\br is just a collection of factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>\n+\u00a0 A cluster-tree that eliminates to a Bayes tree. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Graphviz formatter.\n+Collects factorgraph fragments defined on variable clusters, arranged in a\n+tree.\n+ Date\n+ Oct 8, 2013\n Author\n+ Kai Ni\n+ Richard Roberts\n Frank Dellaert\n- Date\n- December, 2021\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh\n+ * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00686_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00686_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/DotWriter.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree.h Source File\n \n \n \n \n \n \n \n@@ -98,108 +98,273 @@\n
No Matches
\n \n \n \n \n \n
\n-
DotWriter.h
\n+
ClusterTree.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2
\n-
3 * GTSAM Copyright 2010-2021, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
7
\n-
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n+Go to the documentation of this file.
1
\n+
10#pragma once
\n
11
\n-
19#pragma once
\n-
20
\n-\n-
22#include <gtsam/base/Vector.h>
\n-
23#include <gtsam/inference/Key.h>
\n-
24
\n-
25#include <iosfwd>
\n-
26#include <map>
\n-
27#include <set>
\n-
28
\n-
29namespace gtsam {
\n+
12#include <gtsam/base/Testable.h>
\n+\n+\n+
15
\n+
16namespace gtsam {
\n+
17
\n+
24template <class GRAPH>
\n+
\n+\n+
26 public:
\n+
27 typedef GRAPH FactorGraphType;
\n+\n+
29 typedef boost::shared_ptr<This> shared_ptr;
\n
30
\n-
\n-
35struct GTSAM_EXPORT DotWriter {
\n-\n-\n-\n-\n-\n+
31 typedef typename GRAPH::FactorType FactorType;
\n+
32 typedef boost::shared_ptr<FactorType> sharedFactor;
\n+
33
\n+
35 // TODO(frank): re-factor JunctionTree so we can make members private
\n+
\n+
36 struct Cluster {
\n+\n+
38 Children children;
\n+
39
\n+
40 typedef Ordering Keys;
\n+\n
42
\n-
47 std::map<Key, Vector2> variablePositions;
\n+\n+
44
\n+
45 int problemSize_;
\n+
46
\n+
47 Cluster() : problemSize_(0) {}
\n
48
\n-
54 std::map<char, double> positionHints;
\n-
55
\n-
57 std::set<Key> boxes;
\n-
58
\n-
63 std::map<size_t, Vector2> factorPositions;
\n-
64
\n-
65 explicit DotWriter(double figureWidthInches = 5,
\n-
66 double figureHeightInches = 5,
\n-
67 bool plotFactorPoints = true,
\n-
68 bool connectKeysToFactor = true, bool binaryEdges = false)
\n-
69 : figureWidthInches(figureWidthInches),
\n-
70 figureHeightInches(figureHeightInches),
\n-
71 plotFactorPoints(plotFactorPoints),
\n-
72 connectKeysToFactor(connectKeysToFactor),
\n-
73 binaryEdges(binaryEdges) {}
\n-
74
\n-
76 void graphPreamble(std::ostream* os) const;
\n-
77
\n-
79 void digraphPreamble(std::ostream* os) const;
\n-
80
\n-
82 void drawVariable(Key key, const KeyFormatter& keyFormatter,
\n-
83 const boost::optional<Vector2>& position,
\n-
84 std::ostream* os) const;
\n-
85
\n-
87 static void DrawFactor(size_t i, const boost::optional<Vector2>& position,
\n-
88 std::ostream* os);
\n-
89
\n-
91 boost::optional<Vector2> variablePos(Key key) const;
\n-
92
\n-
94 void processFactor(size_t i, const KeyVector& keys,
\n-
95 const KeyFormatter& keyFormatter,
\n-
96 const boost::optional<Vector2>& position,
\n-
97 std::ostream* os) const;
\n-
98};
\n-
\n-
99
\n-
100} // namespace gtsam
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
typedef and functions to augment Eigen's VectorXd
\n-\n+
49 virtual ~Cluster() {}
\n+
50
\n+
51 const Cluster& operator[](size_t i) const {
\n+
52 return *(children.at(i));
\n+
53 }
\n+
54
\n+
56 template <class CONTAINER>
\n+
\n+
57 Cluster(Key key, const CONTAINER& factorsToAdd)
\n+
58 : problemSize_(0) {
\n+
59 addFactors(key, factorsToAdd);
\n+
60 }
\n+
\n+
61
\n+
63 template <class CONTAINER>
\n+
\n+
64 void addFactors(Key key, const CONTAINER& factorsToAdd) {
\n+
65 orderedFrontalKeys.push_back(key);
\n+
66 factors.push_back(factorsToAdd);
\n+
67 problemSize_ += factors.size();
\n+
68 }
\n+
\n+
69
\n+
\n+
71 void addChild(const boost::shared_ptr<Cluster>& cluster) {
\n+
72 children.push_back(cluster);
\n+
73 problemSize_ = std::max(problemSize_, cluster->problemSize_);
\n+
74 }
\n+
\n+
75
\n+
76 size_t nrChildren() const {
\n+
77 return children.size();
\n+
78 }
\n+
79
\n+
80 size_t nrFactors() const {
\n+
81 return factors.size();
\n+
82 }
\n+
83
\n+
84 size_t nrFrontals() const {
\n+
85 return orderedFrontalKeys.size();
\n+
86 }
\n+
87
\n+
88 int problemSize() const {
\n+
89 return problemSize_;
\n+
90 }
\n+
91
\n+
93 virtual void print(const std::string& s = "",
\n+
94 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
95
\n+
97 std::vector<size_t> nrFrontalsOfChildren() const;
\n+
98
\n+
100 void merge(const boost::shared_ptr<Cluster>& cluster);
\n+
101
\n+
103 void mergeChildren(const std::vector<bool>& merge);
\n+
104 };
\n+
\n+
105
\n+
106 typedef boost::shared_ptr<Cluster> sharedCluster;
\n+
107
\n+
108 // Define Node=Cluster for compatibility with tree traversal functions
\n+
109 typedef Cluster Node;
\n+
110 typedef sharedCluster sharedNode;
\n+
111
\n+
113 GTSAM_CONCEPT_TESTABLE_TYPE(FactorType)
\n+
114
\n+
115 protected:
\n+\n+
117
\n+
120
\n+
\n+
123 ClusterTree(const This& other) {
\n+
124 *this = other;
\n+
125 }
\n+
\n+
126
\n+
128
\n+
129 public:
\n+
130
\n+\n+
133
\n+
136
\n+
138 void print(const std::string& s = "",
\n+
139 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
140
\n+
144
\n+
145 void addRoot(const boost::shared_ptr<Cluster>& cluster) {
\n+
146 roots_.push_back(cluster);
\n+
147 }
\n+
148
\n+
149 void addChildrenAsRoots(const boost::shared_ptr<Cluster>& cluster) {
\n+
150 for (auto child : cluster->children)
\n+
151 this->addRoot(child);
\n+
152 }
\n+
153
\n+
154 size_t nrRoots() const {
\n+
155 return roots_.size();
\n+
156 }
\n+
157
\n+
\n+\n+
160 return roots_;
\n+
161 }
\n+
\n+
162
\n+
163 const Cluster& operator[](size_t i) const {
\n+
164 return *(roots_.at(i));
\n+
165 }
\n+
166
\n+
168
\n+
169 protected:
\n+
172
\n+
175 This& operator=(const This& other);
\n+
176
\n+
178};
\n+
\n+
179
\n+
183template <class BAYESTREE, class GRAPH>
\n+
\n+\n+
185 public:
\n+
186 typedef BAYESTREE BayesTreeType;
\n+
187 typedef GRAPH FactorGraphType;
\n+\n+
189 typedef boost::shared_ptr<This> shared_ptr;
\n+
190
\n+
191 typedef typename BAYESTREE::ConditionalType ConditionalType;
\n+
192 typedef boost::shared_ptr<ConditionalType>
\n+\n+
194
\n+
195 typedef typename GRAPH::Eliminate Eliminate;
\n+
196 typedef typename GRAPH::FactorType FactorType;
\n+
197 typedef boost::shared_ptr<FactorType> sharedFactor;
\n+
198
\n+
199 protected:
\n+
200 FastVector<sharedFactor> remainingFactors_;
\n+
201
\n+
204
\n+
\n+
207 EliminatableClusterTree(const This& other) : ClusterTree<GRAPH>(other) {
\n+
208 *this = other;
\n+
209 }
\n+
\n+
210
\n+
212
\n+
213 public:
\n+
216
\n+
222 std::pair<boost::shared_ptr<BayesTreeType>, boost::shared_ptr<FactorGraphType> > eliminate(
\n+
223 const Eliminate& function) const;
\n+
224
\n+
226
\n+
229
\n+
\n+\n+
232 return remainingFactors_;
\n+
233 }
\n+
\n+
234
\n+
236
\n+
237 protected:
\n+
240
\n+
243 This& operator=(const This& other);
\n+
244
\n+\n+
247
\n+
249};
\n+
\n+
250}
\n+
251
\n+\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
Concept check for values that can be used in unit tests.
\n+
Variable ordering for the elimination algorithm.
\n+
Collects factorgraph fragments defined on variable clusters, arranged in a tree.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n-
double figureWidthInches
The figure width on paper in inches.
Definition DotWriter.h:36
\n-
bool plotFactorPoints
Plots each factor as a dot between the variables.
Definition DotWriter.h:38
\n-
bool connectKeysToFactor
Draw a line from each key within a factor to the dot of the factor.
Definition DotWriter.h:39
\n-
std::map< Key, Vector2 > variablePositions
Variable positions can be optionally specified and will be included in the dot file with a "!...
Definition DotWriter.h:47
\n-
bool binaryEdges
just use non-dotted edges for binary factors
Definition DotWriter.h:41
\n-
std::map< char, double > positionHints
The position hints allow one to use symbol character and index to specify position.
Definition DotWriter.h:54
\n-
std::set< Key > boxes
A set of keys that will be displayed as a box.
Definition DotWriter.h:57
\n-
std::map< size_t, Vector2 > factorPositions
Factor positions can be optionally specified and will be included in the dot file with a "!...
Definition DotWriter.h:63
\n-
double figureHeightInches
The figure height on paper in inches.
Definition DotWriter.h:37
\n+
A cluster-tree that eliminates to a Bayes tree.
Definition ClusterTree.h:184
\n+
EliminatableClusterTree< BAYESTREE, GRAPH > This
This class.
Definition ClusterTree.h:188
\n+
EliminatableClusterTree()
Default constructor to be used in derived classes.
Definition ClusterTree.h:246
\n+
BAYESTREE::ConditionalType ConditionalType
The type of conditionals.
Definition ClusterTree.h:191
\n+
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition ClusterTree-inst.h:231
\n+
std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr< FactorGraphType > > eliminate(const Eliminate &function) const
Eliminate the factors to a Bayes tree and remaining factor graph.
Definition ClusterTree-inst.h:245
\n+
boost::shared_ptr< ConditionalType > sharedConditional
Shared pointer to a conditional.
Definition ClusterTree.h:193
\n+
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition ClusterTree.h:197
\n+
const FastVector< sharedFactor > & remainingFactors() const
Return the remaining factors that are not pulled into elimination.
Definition ClusterTree.h:231
\n+
EliminatableClusterTree(const This &other)
Copy constructor - makes a deep copy of the tree structure, but only pointers to factors are copied,...
Definition ClusterTree.h:207
\n+
BAYESTREE BayesTreeType
The BayesTree type produced by elimination.
Definition ClusterTree.h:186
\n+
GRAPH::FactorType FactorType
The type of factors.
Definition ClusterTree.h:196
\n+
GRAPH FactorGraphType
The factor graph type.
Definition ClusterTree.h:187
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition ClusterTree.h:189
\n+
GRAPH::Eliminate Eliminate
Typedef for an eliminate subroutine.
Definition ClusterTree.h:195
\n+
A cluster-tree is associated with a factor graph and is defined as in Koller-Friedman: each node k re...
Definition ClusterTree.h:25
\n+
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition ClusterTree-inst.h:104
\n+
ClusterTree< GRAPH > This
This class.
Definition ClusterTree.h:28
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition ClusterTree.h:29
\n+
FastVector< sharedNode > roots_
concept check
Definition ClusterTree.h:116
\n+
GRAPH::FactorType FactorType
The type of factors.
Definition ClusterTree.h:31
\n+
GRAPH FactorGraphType
The factor graph type.
Definition ClusterTree.h:27
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Print the cluster tree.
Definition ClusterTree-inst.h:98
\n+
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition ClusterTree.h:32
\n+
const FastVector< sharedNode > & roots() const
Return the set of roots (one for a tree, multiple for a forest)
Definition ClusterTree.h:159
\n+
ClusterTree(const This &other)
Copy constructor - makes a deep copy of the tree structure, but only pointers to factors are copied,...
Definition ClusterTree.h:123
\n+
ClusterTree()
Default constructor.
Definition ClusterTree.h:132
\n+
boost::shared_ptr< Cluster > sharedCluster
Shared pointer to Cluster.
Definition ClusterTree.h:106
\n+
A Cluster is just a collection of factors.
Definition ClusterTree.h:36
\n+
Cluster(Key key, const CONTAINER &factorsToAdd)
Construct from factors associated with a single key.
Definition ClusterTree.h:57
\n+
Children children
sub-trees
Definition ClusterTree.h:38
\n+
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print this node
Definition ClusterTree-inst.h:26
\n+
Keys orderedFrontalKeys
Frontal keys of this node.
Definition ClusterTree.h:41
\n+
void mergeChildren(const std::vector< bool > &merge)
Merge all children for which bit is set into this node.
Definition ClusterTree-inst.h:56
\n+
void merge(const boost::shared_ptr< Cluster > &cluster)
Merge in given cluster.
Definition ClusterTree-inst.h:44
\n+
std::vector< size_t > nrFrontalsOfChildren() const
Return a vector with nrFrontal keys for each child.
Definition ClusterTree-inst.h:34
\n+
FactorGraphType factors
Factors associated with this node.
Definition ClusterTree.h:43
\n+
void addChild(const boost::shared_ptr< Cluster > &cluster)
Add a child cluster.
Definition ClusterTree.h:71
\n+
void addFactors(Key key, const CONTAINER &factorsToAdd)
Add factors associated with a single key.
Definition ClusterTree.h:64
\n+
Definition Ordering.h:34
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,143 +1,384 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DotWriter.h\n+ClusterTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1/* ---------------------------------------------------------------------------\n--\n-2\n-3 * GTSAM Copyright 2010-2021, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n-7\n-8 * See LICENSE for the license information\n-9\n-10 * -------------------------------------------------------------------------\n-- */\n+1\n+10#pragma once\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-24\n-25#include \n-26#include \n-27#include \n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n+12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+13#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+14#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+15\n+16namespace _\bg_\bt_\bs_\ba_\bm {\n+17\n+24template \n+_\b2_\b5class _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be {\n+26 public:\n+_\b2_\b7 typedef GRAPH _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n+_\b2_\b8 typedef _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b> _\bT_\bh_\bi_\bs;\n+_\b2_\b9 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n 30\n-_\b3_\b5struct GTSAM_EXPORT _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br {\n-_\b3_\b6 double _\bf_\bi_\bg_\bu_\br_\be_\bW_\bi_\bd_\bt_\bh_\bI_\bn_\bc_\bh_\be_\bs;\n-_\b3_\b7 double _\bf_\bi_\bg_\bu_\br_\be_\bH_\be_\bi_\bg_\bh_\bt_\bI_\bn_\bc_\bh_\be_\bs;\n-_\b3_\b8 bool _\bp_\bl_\bo_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\bo_\bi_\bn_\bt_\bs;\n-_\b3_\b9 bool _\bc_\bo_\bn_\bn_\be_\bc_\bt_\bK_\be_\by_\bs_\bT_\bo_\bF_\ba_\bc_\bt_\bo_\br;\n-_\b4_\b1 bool _\bb_\bi_\bn_\ba_\br_\by_\bE_\bd_\bg_\be_\bs;\n+_\b3_\b1 typedef typename GRAPH::FactorType _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n+_\b3_\b2 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n+33\n+35 // TODO(frank): re-factor JunctionTree so we can make members private\n+_\b3_\b6 struct _\bC_\bl_\bu_\bs_\bt_\be_\br {\n+37 typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b<_\bC_\bl_\bu_\bs_\bt_\be_\br_\b> > Children;\n+_\b3_\b8 Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n+39\n+40 typedef _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bK_\be_\by_\bs;\n+_\b4_\b1 _\bK_\be_\by_\bs _\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs;\n 42\n-_\b4_\b7 std::map _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bs;\n+_\b4_\b3 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be _\bf_\ba_\bc_\bt_\bo_\br_\bs;\n+44\n+45 int problemSize_;\n+46\n+47 _\bC_\bl_\bu_\bs_\bt_\be_\br() : problemSize_(0) {}\n 48\n-_\b5_\b4 std::map _\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bH_\bi_\bn_\bt_\bs;\n-55\n-_\b5_\b7 std::set _\bb_\bo_\bx_\be_\bs;\n-58\n-_\b6_\b3 std::map _\bf_\ba_\bc_\bt_\bo_\br_\bP_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bs;\n-64\n-65 explicit _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br(double figureWidthInches = 5,\n-66 double figureHeightInches = 5,\n-67 bool plotFactorPoints = true,\n-68 bool connectKeysToFactor = true, bool binaryEdges = false)\n-69 : figureWidthInches(figureWidthInches),\n-70 figureHeightInches(figureHeightInches),\n-71 plotFactorPoints(plotFactorPoints),\n-72 connectKeysToFactor(connectKeysToFactor),\n-73 binaryEdges(binaryEdges) {}\n-74\n-76 void graphPreamble(std::ostream* os) const;\n-77\n-79 void digraphPreamble(std::ostream* os) const;\n-80\n-82 void drawVariable(_\bK_\be_\by key, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n-83 const boost::optional& position,\n-84 std::ostream* os) const;\n-85\n-87 static void DrawFactor(size_t i, const boost::optional& position,\n-88 std::ostream* os);\n-89\n-91 boost::optional variablePos(_\bK_\be_\by key) const;\n-92\n-94 void processFactor(size_t i, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys,\n-95 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n-96 const boost::optional& position,\n-97 std::ostream* os) const;\n-98};\n-99\n-100} // namespace gtsam\n+49 virtual _\b~_\bC_\bl_\bu_\bs_\bt_\be_\br() {}\n+50\n+51 const Cluster& operator[](size_t i) const {\n+52 return *(_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn.at(i));\n+53 }\n+54\n+56 template \n+_\b5_\b7 _\bC_\bl_\bu_\bs_\bt_\be_\br(_\bK_\be_\by key, const CONTAINER& factorsToAdd)\n+58 : problemSize_(0) {\n+59 _\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs(key, factorsToAdd);\n+60 }\n+61\n+63 template \n+_\b6_\b4 void _\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs(_\bK_\be_\by key, const CONTAINER& factorsToAdd) {\n+65 _\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs.push_back(key);\n+66 _\bf_\ba_\bc_\bt_\bo_\br_\bs.push_back(factorsToAdd);\n+67 problemSize_ += _\bf_\ba_\bc_\bt_\bo_\br_\bs.size();\n+68 }\n+69\n+_\b7_\b1 void _\ba_\bd_\bd_\bC_\bh_\bi_\bl_\bd(const boost::shared_ptr& cluster) {\n+72 _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn.push_back(cluster);\n+73 problemSize_ = std::max(problemSize_, cluster->problemSize_);\n+74 }\n+75\n+76 size_t nrChildren() const {\n+77 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn.size();\n+78 }\n+79\n+80 size_t nrFactors() const {\n+81 return _\bf_\ba_\bc_\bt_\bo_\br_\bs.size();\n+82 }\n+83\n+84 size_t nrFrontals() const {\n+85 return _\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs.size();\n+86 }\n+87\n+88 int problemSize() const {\n+89 return problemSize_;\n+90 }\n+91\n+93 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+94 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+95\n+97 std::vector _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bO_\bf_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn() const;\n+98\n+100 void _\bm_\be_\br_\bg_\be(const boost::shared_ptr& cluster);\n+101\n+103 void _\bm_\be_\br_\bg_\be_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn(const std::vector& _\bm_\be_\br_\bg_\be);\n+104 };\n+105\n+_\b1_\b0_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bu_\bs_\bt_\be_\br;\n+107\n+108 // Define Node=Cluster for compatibility with tree traversal functions\n+109 typedef _\bC_\bl_\bu_\bs_\bt_\be_\br _\bN_\bo_\bd_\be;\n+110 typedef _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bu_\bs_\bt_\be_\br sharedNode;\n+111\n+113 GTSAM_CONCEPT_TESTABLE_TYPE(_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be)\n+114\n+115 protected:\n+_\b1_\b1_\b6 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> _\br_\bo_\bo_\bt_\bs_\b_;\n+117\n+120\n+_\b1_\b2_\b3 _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be(const _\bT_\bh_\bi_\bs& other) {\n+124 *this = other;\n+125 }\n+126\n+128\n+129 public:\n+130\n+_\b1_\b3_\b2 _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be() {}\n+133\n+136\n+138 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+139 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+140\n+144\n+145 void addRoot(const boost::shared_ptr& cluster) {\n+146 _\br_\bo_\bo_\bt_\bs_\b_.push_back(cluster);\n+147 }\n+148\n+149 void addChildrenAsRoots(const boost::shared_ptr& cluster) {\n+150 for (auto child : cluster->children)\n+151 this->addRoot(child);\n+152 }\n+153\n+154 size_t nrRoots() const {\n+155 return _\br_\bo_\bo_\bt_\bs_\b_.size();\n+156 }\n+157\n+_\b1_\b5_\b9 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>& _\br_\bo_\bo_\bt_\bs() const {\n+160 return _\br_\bo_\bo_\bt_\bs_\b_;\n+161 }\n+162\n+163 const Cluster& operator[](size_t i) const {\n+164 return *(_\br_\bo_\bo_\bt_\bs_\b_.at(i));\n+165 }\n+166\n+168\n+169 protected:\n+172\n+175 _\bT_\bh_\bi_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs& other);\n+176\n+178};\n+179\n+183template \n+_\b1_\b8_\b4class _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be : public _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be {\n+185 public:\n+_\b1_\b8_\b6 typedef BAYESTREE _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+_\b1_\b8_\b7 typedef GRAPH _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n+_\b1_\b8_\b8 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b> _\bT_\bh_\bi_\bs;\n+_\b1_\b8_\b9 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+190\n+_\b1_\b9_\b1 typedef typename BAYESTREE::ConditionalType _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+192 typedef boost::shared_ptr\n+_\b1_\b9_\b3 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+194\n+_\b1_\b9_\b5 typedef typename GRAPH::Eliminate _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be;\n+_\b1_\b9_\b6 typedef typename GRAPH::FactorType _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n+_\b1_\b9_\b7 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n+198\n+199 protected:\n+200 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b> remainingFactors_;\n+201\n+204\n+_\b2_\b0_\b7 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be(const _\bT_\bh_\bi_\bs& other) : _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be(other) {\n+208 *this = other;\n+209 }\n+210\n+212\n+213 public:\n+216\n+222 std::pair, boost::\n+shared_ptr > _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(\n+223 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function) const;\n+224\n+226\n+229\n+_\b2_\b3_\b1 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>& _\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs() const {\n+232 return remainingFactors_;\n+233 }\n+234\n+236\n+237 protected:\n+240\n+243 _\bT_\bh_\bi_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs& other);\n+244\n+_\b2_\b4_\b6 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be() {}\n+247\n+249};\n+250}\n+251\n+252#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n A thin wrapper around std::vector that uses a custom allocator.\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n-_\bK_\be_\by_\b._\bh\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n+_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+Collects factorgraph fragments defined on variable clusters, arranged in a\n+tree.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n-DotWriter is a helper class for writing graphviz .dot files.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bf_\bi_\bg_\bu_\br_\be_\bW_\bi_\bd_\bt_\bh_\bI_\bn_\bc_\bh_\be_\bs\n-double figureWidthInches\n-The figure width on paper in inches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bp_\bl_\bo_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\bo_\bi_\bn_\bt_\bs\n-bool plotFactorPoints\n-Plots each factor as a dot between the variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bc_\bo_\bn_\bn_\be_\bc_\bt_\bK_\be_\by_\bs_\bT_\bo_\bF_\ba_\bc_\bt_\bo_\br\n-bool connectKeysToFactor\n-Draw a line from each key within a factor to the dot of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bs\n-std::map< Key, Vector2 > variablePositions\n-Variable positions can be optionally specified and will be included in the dot\n-file with a \"!...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bb_\bi_\bn_\ba_\br_\by_\bE_\bd_\bg_\be_\bs\n-bool binaryEdges\n-just use non-dotted edges for binary factors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bH_\bi_\bn_\bt_\bs\n-std::map< char, double > positionHints\n-The position hints allow one to use symbol character and index to specify\n-position.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bb_\bo_\bx_\be_\bs\n-std::set< Key > boxes\n-A set of keys that will be displayed as a box.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bP_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bs\n-std::map< size_t, Vector2 > factorPositions\n-Factor positions can be optionally specified and will be included in the dot\n-file with a \"!...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bf_\bi_\bg_\bu_\br_\be_\bH_\be_\bi_\bg_\bh_\bt_\bI_\bn_\bc_\bh_\be_\bs\n-double figureHeightInches\n-The figure height on paper in inches.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n+A cluster-tree that eliminates to a Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+EliminatableClusterTree< BAYESTREE, GRAPH > This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:188\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n+EliminatableClusterTree()\n+Default constructor to be used in derived classes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:246\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n+BAYESTREE::ConditionalType ConditionalType\n+The type of conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:191\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+This & operator=(const This &other)\n+Assignment operator - makes a deep copy of the tree structure, but only\n+pointers to factors are copie...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:231\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr<\n+FactorGraphType > > eliminate(const Eliminate &function) const\n+Eliminate the factors to a Bayes tree and remaining factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:245\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+boost::shared_ptr< ConditionalType > sharedConditional\n+Shared pointer to a conditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:193\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< FactorType > sharedFactor\n+Shared pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:197\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+const FastVector< sharedFactor > & remainingFactors() const\n+Return the remaining factors that are not pulled into elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:231\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n+EliminatableClusterTree(const This &other)\n+Copy constructor - makes a deep copy of the tree structure, but only pointers\n+to factors are copied,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+BAYESTREE BayesTreeType\n+The BayesTree type produced by elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n+GRAPH::FactorType FactorType\n+The type of factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:196\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n+GRAPH FactorGraphType\n+The factor graph type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:187\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Shared pointer to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+GRAPH::Eliminate Eliminate\n+Typedef for an eliminate subroutine.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n+A cluster-tree is associated with a factor graph and is defined as in Koller-\n+Friedman: each node k re...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:25\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+This & operator=(const This &other)\n+Assignment operator - makes a deep copy of the tree structure, but only\n+pointers to factors are copie...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+ClusterTree< GRAPH > This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Shared pointer to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs_\b_\n+FastVector< sharedNode > roots_\n+concept check\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:116\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n+GRAPH::FactorType FactorType\n+The type of factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n+GRAPH FactorGraphType\n+The factor graph type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const\n+Print the cluster tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< FactorType > sharedFactor\n+Shared pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs\n+const FastVector< sharedNode > & roots() const\n+Return the set of roots (one for a tree, multiple for a forest)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n+ClusterTree(const This &other)\n+Copy constructor - makes a deep copy of the tree structure, but only pointers\n+to factors are copied,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n+ClusterTree()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bu_\bs_\bt_\be_\br\n+boost::shared_ptr< Cluster > sharedCluster\n+Shared pointer to Cluster.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n+A Cluster is just a collection of factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n+Cluster(Key key, const CONTAINER &factorsToAdd)\n+Construct from factors associated with a single key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n+Children children\n+sub-trees\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const\n+print this node\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs\n+Keys orderedFrontalKeys\n+Frontal keys of this node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn\n+void mergeChildren(const std::vector< bool > &merge)\n+Merge all children for which bit is set into this node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be\n+void merge(const boost::shared_ptr< Cluster > &cluster)\n+Merge in given cluster.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bO_\bf_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn\n+std::vector< size_t > nrFrontalsOfChildren() const\n+Return a vector with nrFrontal keys for each child.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs\n+FactorGraphType factors\n+Factors associated with this node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\ba_\bd_\bd_\bC_\bh_\bi_\bl_\bd\n+void addChild(const boost::shared_ptr< Cluster > &cluster)\n+Add a child cluster.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+void addFactors(Key key, const CONTAINER &factorsToAdd)\n+Add factors associated with a single key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh\n+ * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00689.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00689.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesNet.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,46 +94,34 @@\n \n \n \n \n \n
\n \n-
BayesNet.h File Reference
\n+
Ordering.cpp File Reference
\n
\n
\n-\n-

Bayes network. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::BayesNet< CONDITIONAL >
 A BayesNet is a tree of conditionals, stored in elimination order. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Bayes network.

\n-
Author
Frank Dellaert
\n+
Author
Richard Roberts
\n
\n-Richard Roberts
\n+Andrew Melim
\n+
Date
Sep 2, 2010
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BayesNet.h File Reference\n-Bayes network. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\b _\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b _\b>\n-\u00a0 A _\bB_\ba_\by_\be_\bs_\bN_\be_\bt is a tree of conditionals, stored in elimination order.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Ordering.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Bayes network.\n Author\n- Frank Dellaert\n Richard Roberts\n+ Andrew Melim\n+ Date\n+ Sep 2, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+ * _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00692.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00692.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableSlots.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM-inst.h File Reference\n \n \n \n \n \n \n \n@@ -95,31 +95,36 @@\n \n \n \n \n
\n \n-
VariableSlots.cpp File Reference
\n+
ISAM-inst.h File Reference
\n
\n
\n+\n+

Incremental update functionality (iSAM) for BayesTree. \n+More...

\n+\n+

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
Oct 5, 2010
\n+

Incremental update functionality (iSAM) for BayesTree.

\n+
Author
Michael Kaess
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-VariableSlots.cpp File Reference\n+ISAM-inst.h File Reference\n+Incremental update functionality (iSAM) for BayesTree. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Incremental update functionality (iSAM) for BayesTree.\n Author\n- Richard Roberts\n- Date\n- Oct 5, 2010\n+ Michael Kaess\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b._\bc_\bp_\bp\n+ * _\bI_\bS_\bA_\bM_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00695_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00695_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminateableFactorGraph-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,295 +98,483 @@\n
No Matches
\n \n \n \n \n \n
\n-
BayesTree.h
\n+
EliminateableFactorGraph-inst.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18// \\callgraph
\n-
19
\n-
20#pragma once
\n-
21
\n-
22#include <boost/shared_ptr.hpp>
\n-
23
\n-
24#include <gtsam/inference/Key.h>
\n-
25#include <gtsam/base/FastList.h>
\n-
26#include <gtsam/base/ConcurrentMap.h>
\n-\n-
28
\n-
29#include <string>
\n-
30
\n-
31namespace gtsam {
\n-
32
\n-
33 // Forward declarations
\n-
34 template<class FACTOR> class FactorGraph;
\n-
35 template<class BAYESTREE, class GRAPH> class EliminatableClusterTree;
\n-
36
\n-
37 /* ************************************************************************* */
\n-
\n-
39 struct GTSAM_EXPORT BayesTreeCliqueStats {
\n-
40 double avgConditionalSize;
\n-
41 std::size_t maxConditionalSize;
\n-
42 double avgSeparatorSize;
\n-
43 std::size_t maxSeparatorSize;
\n-
44 void print(const std::string& s = "") const ;
\n-
45 };
\n-
\n-
46
\n-
\n-
48 struct GTSAM_EXPORT BayesTreeCliqueData {
\n-
49 FastVector<std::size_t> conditionalSizes;
\n-
50 FastVector<std::size_t> separatorSizes;
\n-
51 BayesTreeCliqueStats getStats() const;
\n-
52 };
\n-
\n-
53
\n-
54 /* ************************************************************************* */
\n-
65 template<class CLIQUE>
\n-
\n-\n-
67 {
\n-
68 protected:
\n-
69 typedef BayesTree<CLIQUE> This;
\n-
70 typedef boost::shared_ptr<This> shared_ptr;
\n-
71
\n-
72 public:
\n-
73 typedef CLIQUE Clique;
\n-
74 typedef boost::shared_ptr<Clique> sharedClique;
\n-
75 typedef Clique Node;
\n-\n-
77 typedef typename CLIQUE::ConditionalType ConditionalType;
\n-
78 typedef boost::shared_ptr<ConditionalType> sharedConditional;
\n-
79 typedef typename CLIQUE::BayesNetType BayesNetType;
\n-
80 typedef boost::shared_ptr<BayesNetType> sharedBayesNet;
\n-
81 typedef typename CLIQUE::FactorType FactorType;
\n-
82 typedef boost::shared_ptr<FactorType> sharedFactor;
\n-
83 typedef typename CLIQUE::FactorGraphType FactorGraphType;
\n-
84 typedef boost::shared_ptr<FactorGraphType> sharedFactorGraph;
\n-
85 typedef typename FactorGraphType::Eliminate Eliminate;
\n-
86 typedef typename CLIQUE::EliminationTraitsType EliminationTraitsType;
\n-
87
\n-\n-
90
\n-\n-
93
\n-\n-
96
\n-
97 protected:
\n-
98
\n-\n-
101
\n-\n-
104
\n-
107
\n-\n-
110
\n-
112 BayesTree(const This& other);
\n-
113
\n-
115
\n-
117 This& operator=(const This& other);
\n-
118
\n-
121
\n-
123 bool equals(const This& other, double tol = 1e-9) const;
\n-
124
\n-
125 public:
\n-
127 void print(const std::string& s = "",
\n-
128 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
130
\n-
133
\n-
135 size_t size() const;
\n-
136
\n-
\n-
138 inline bool empty() const {
\n-
139 return nodes_.empty();
\n-
140 }
\n-
\n-
141
\n-
143 const Nodes& nodes() const { return nodes_; }
\n-
144
\n-
146 sharedClique operator[](Key j) const { return nodes_.at(j); }
\n-
147
\n-
149 const Roots& roots() const { return roots_; }
\n+
19#pragma once
\n+
20
\n+\n+\n+
23#include <boost/tuple/tuple.hpp>
\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
27 /* ************************************************************************* */
\n+
28 template<class FACTORGRAPH>
\n+
29 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>
\n+
\n+\n+
31 OptionalOrderingType orderingType, const Eliminate& function,
\n+
32 OptionalVariableIndex variableIndex) const {
\n+
33 if(!variableIndex) {
\n+
34 // If no VariableIndex provided, compute one and call this function again IMPORTANT: we check
\n+
35 // for no variable index first so that it's always computed if we need to call COLAMD because
\n+
36 // no Ordering is provided. When removing optional from VariableIndex, create VariableIndex
\n+
37 // before creating ordering.
\n+
38 VariableIndex computedVariableIndex(asDerived());
\n+
39 return eliminateSequential(orderingType, function, computedVariableIndex);
\n+
40 }
\n+
41 else {
\n+
42 // Compute an ordering and call this function again. We are guaranteed to have a
\n+
43 // VariableIndex already here because we computed one if needed in the previous 'if' block.
\n+
44 if (orderingType == Ordering::METIS) {
\n+
45 Ordering computedOrdering = Ordering::Metis(asDerived());
\n+
46 return eliminateSequential(computedOrdering, function, variableIndex);
\n+
47 } else if (orderingType == Ordering::COLAMD) {
\n+
48 Ordering computedOrdering = Ordering::Colamd(*variableIndex);
\n+
49 return eliminateSequential(computedOrdering, function, variableIndex);
\n+
50 } else if (orderingType == Ordering::NATURAL) {
\n+
51 Ordering computedOrdering = Ordering::Natural(asDerived());
\n+
52 return eliminateSequential(computedOrdering, function, variableIndex);
\n+
53 } else {
\n+
54 Ordering computedOrdering = EliminationTraitsType::DefaultOrderingFunc(
\n+
55 asDerived(), variableIndex);
\n+
56 return eliminateSequential(computedOrdering, function, variableIndex);
\n+
57 }
\n+
58 }
\n+
59 }
\n+
\n+
60
\n+
61 /* ************************************************************************* */
\n+
62 template<class FACTORGRAPH>
\n+
63 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>
\n+
\n+\n+
65 const Ordering& ordering, const Eliminate& function,
\n+
66 OptionalVariableIndex variableIndex) const
\n+
67 {
\n+
68 if(!variableIndex) {
\n+
69 // If no VariableIndex provided, compute one and call this function again
\n+
70 VariableIndex computedVariableIndex(asDerived());
\n+
71 return eliminateSequential(ordering, function, computedVariableIndex);
\n+
72 } else {
\n+
73 gttic(eliminateSequential);
\n+
74 // Do elimination
\n+
75 EliminationTreeType etree(asDerived(), *variableIndex, ordering);
\n+
76 boost::shared_ptr<BayesNetType> bayesNet;
\n+
77 boost::shared_ptr<FactorGraphType> factorGraph;
\n+
78 boost::tie(bayesNet,factorGraph) = etree.eliminate(function);
\n+
79 // If any factors are remaining, the ordering was incomplete
\n+
80 if(!factorGraph->empty())
\n+\n+
82 // Return the Bayes net
\n+
83 return bayesNet;
\n+
84 }
\n+
85 }
\n+
\n+
86
\n+
87 /* ************************************************************************* */
\n+
88 template <class FACTORGRAPH>
\n+
89 boost::shared_ptr<
\n+\n+
\n+\n+
92 OptionalOrderingType orderingType, const Eliminate& function,
\n+
93 OptionalVariableIndex variableIndex) const {
\n+
94 if (!variableIndex) {
\n+
95 // If no VariableIndex provided, compute one and call this function again
\n+
96 // IMPORTANT: we check for no variable index first so that it's always
\n+
97 // computed if we need to call COLAMD because no Ordering is provided.
\n+
98 // When removing optional from VariableIndex, create VariableIndex before
\n+
99 // creating ordering.
\n+
100 VariableIndex computedVariableIndex(asDerived());
\n+
101 return eliminateMultifrontal(orderingType, function,
\n+
102 computedVariableIndex);
\n+
103 } else {
\n+
104 // Compute an ordering and call this function again. We are guaranteed to
\n+
105 // have a VariableIndex already here because we computed one if needed in
\n+
106 // the previous 'if' block.
\n+
107 if (orderingType == Ordering::METIS) {
\n+
108 Ordering computedOrdering = Ordering::Metis(asDerived());
\n+
109 return eliminateMultifrontal(computedOrdering, function, variableIndex);
\n+
110 } else if (orderingType == Ordering::COLAMD) {
\n+
111 Ordering computedOrdering = Ordering::Colamd(*variableIndex);
\n+
112 return eliminateMultifrontal(computedOrdering, function, variableIndex);
\n+
113 } else if (orderingType == Ordering::NATURAL) {
\n+
114 Ordering computedOrdering = Ordering::Natural(asDerived());
\n+
115 return eliminateMultifrontal(computedOrdering, function, variableIndex);
\n+
116 } else {
\n+
\n+
117 Ordering computedOrdering = EliminationTraitsType::DefaultOrderingFunc(
\n+
118 asDerived(), variableIndex);
\n+
119 return eliminateMultifrontal(computedOrdering, function, variableIndex);
\n+
120 }
\n+
121 }
\n+
122 }
\n+
123
\n+
124 /* ************************************************************************* */
\n+
125 template<class FACTORGRAPH>
\n+
126 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>
\n+
\n+\n+
128 const Ordering& ordering, const Eliminate& function,
\n+
129 OptionalVariableIndex variableIndex) const
\n+
130 {
\n+
131 if(!variableIndex) {
\n+
132 // If no VariableIndex provided, compute one and call this function again
\n+
133 VariableIndex computedVariableIndex(asDerived());
\n+
134 return eliminateMultifrontal(ordering, function, computedVariableIndex);
\n+
135 } else {
\n+
\n+
136 gttic(eliminateMultifrontal);
\n+
137 // Do elimination with given ordering
\n+
138 EliminationTreeType etree(asDerived(), *variableIndex, ordering);
\n+
139 JunctionTreeType junctionTree(etree);
\n+
140 boost::shared_ptr<BayesTreeType> bayesTree;
\n+
141 boost::shared_ptr<FactorGraphType> factorGraph;
\n+
142 boost::tie(bayesTree,factorGraph) = junctionTree.eliminate(function);
\n+
143 // If any factors are remaining, the ordering was incomplete
\n+
144 if(!factorGraph->empty())
\n+\n+
146 // Return the Bayes tree
\n+
147 return bayesTree;
\n+
148 }
\n+
149 }
\n
150
\n-
\n-
152 const sharedClique& clique(Key j) const {
\n-
153 typename Nodes::const_iterator c = nodes_.find(j);
\n-
154 if(c == nodes_.end())
\n-
155 throw std::out_of_range("Requested the BayesTree clique for a key that is not in the BayesTree");
\n-
156 else
\n-
157 return c->second;
\n-
158 }
\n-
\n-
159
\n-\n-
162
\n-
164 size_t numCachedSeparatorMarginals() const;
\n-
165
\n-
171 sharedConditional marginalFactor(Key j, const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
\n-
172
\n-
177 sharedFactorGraph joint(Key j1, Key j2, const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
\n-
178
\n-
183 sharedBayesNet jointBayesNet(Key j1, Key j2, const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
\n-
184
\n-
187
\n-
189 void dot(std::ostream& os, const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
190
\n-
192 std::string dot(
\n-
193 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
194
\n-
196 void saveGraph(const std::string& filename,
\n-
197 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
198
\n-
202
\n-
207 template<class CONTAINER>
\n-
208 Key findParentClique(const CONTAINER& parents) const;
\n-
209
\n-
211 void clear();
\n-
212
\n-\n-
215
\n-
220 void removePath(sharedClique clique, BayesNetType* bn, Cliques* orphans);
\n-
221
\n-
226 void removeTop(const KeyVector& keys, BayesNetType* bn, Cliques* orphans);
\n-
227
\n-
230 Cliques removeSubtree(const sharedClique& subtree);
\n-
231
\n-
235 void insertRoot(const sharedClique& subtree);
\n-
236
\n-
238 void addClique(const sharedClique& clique, const sharedClique& parent_clique = sharedClique());
\n-
239
\n-\n-
242
\n-
243 protected:
\n-
244
\n-
246 void dot(std::ostream &s, sharedClique clique, const KeyFormatter& keyFormatter,
\n-
247 int parentnum = 0) const;
\n+
151 /* ************************************************************************* */
\n+
152 template<class FACTORGRAPH>
\n+
153 std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>, boost::shared_ptr<FACTORGRAPH> >
\n+
\n+\n+
155 const Ordering& ordering, const Eliminate& function, OptionalVariableIndex variableIndex) const
\n+
156 {
\n+
\n+
157 if(variableIndex) {
\n+
158 gttic(eliminatePartialSequential);
\n+
159 // Do elimination
\n+
160 EliminationTreeType etree(asDerived(), *variableIndex, ordering);
\n+
161 return etree.eliminate(function);
\n+
162 } else {
\n+
163 // If no variable index is provided, compute one and call this function again
\n+
164 VariableIndex computedVariableIndex(asDerived());
\n+
165 return eliminatePartialSequential(ordering, function, computedVariableIndex);
\n+
166 }
\n+
167 }
\n+
168
\n+
169 /* ************************************************************************* */
\n+
170 template<class FACTORGRAPH>
\n+
\n+
171 std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>, boost::shared_ptr<FACTORGRAPH> >
\n+
\n+\n+
173 const KeyVector& variables, const Eliminate& function, OptionalVariableIndex variableIndex) const
\n+
174 {
\n+
175 if(variableIndex) {
\n+
176 gttic(eliminatePartialSequential);
\n+
177 // Compute full ordering
\n+
178 Ordering fullOrdering = Ordering::ColamdConstrainedFirst(*variableIndex, variables);
\n+
179
\n+
180 // Split off the part of the ordering for the variables being eliminated
\n+
\n+
181 Ordering ordering(fullOrdering.begin(), fullOrdering.begin() + variables.size());
\n+
182 return eliminatePartialSequential(ordering, function, variableIndex);
\n+
183 } else {
\n+
184 // If no variable index is provided, compute one and call this function again
\n+
185 VariableIndex computedVariableIndex(asDerived());
\n+
186 return eliminatePartialSequential(variables, function, computedVariableIndex);
\n+
187 }
\n+
188 }
\n+
189
\n+
190 /* ************************************************************************* */
\n+
\n+
191 template<class FACTORGRAPH>
\n+
192 std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>, boost::shared_ptr<FACTORGRAPH> >
\n+
\n+\n+
194 const Ordering& ordering, const Eliminate& function, OptionalVariableIndex variableIndex) const
\n+
195 {
\n+
196 if(variableIndex) {
\n+
197 gttic(eliminatePartialMultifrontal);
\n+
198 // Do elimination
\n+
199 EliminationTreeType etree(asDerived(), *variableIndex, ordering);
\n+
200 JunctionTreeType junctionTree(etree);
\n+
\n+
201 return junctionTree.eliminate(function);
\n+
202 } else {
\n+
203 // If no variable index is provided, compute one and call this function again
\n+
204 VariableIndex computedVariableIndex(asDerived());
\n+
205 return eliminatePartialMultifrontal(ordering, function, computedVariableIndex);
\n+
206 }
\n+
207 }
\n+
\n+
\n+
208
\n+
209 /* ************************************************************************* */
\n+
210 template<class FACTORGRAPH>
\n+
\n+
211 std::pair<boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>, boost::shared_ptr<FACTORGRAPH> >
\n+
\n+\n+
213 const KeyVector& variables, const Eliminate& function, OptionalVariableIndex variableIndex) const
\n+
214 {
\n+
215 if(variableIndex) {
\n+
216 gttic(eliminatePartialMultifrontal);
\n+
217 // Compute full ordering
\n+
218 Ordering fullOrdering = Ordering::ColamdConstrainedFirst(*variableIndex, variables);
\n+
219
\n+
220 // Split off the part of the ordering for the variables being eliminated
\n+
221 Ordering ordering(fullOrdering.begin(), fullOrdering.begin() + variables.size());
\n+
222 return eliminatePartialMultifrontal(ordering, function, variableIndex);
\n+
223 } else {
\n+
224 // If no variable index is provided, compute one and call this function again
\n+
\n+
225 VariableIndex computedVariableIndex(asDerived());
\n+
226 return eliminatePartialMultifrontal(variables, function, computedVariableIndex);
\n+
227 }
\n+
228 }
\n+
229
\n+
230 /* ************************************************************************* */
\n+
231 template<class FACTORGRAPH>
\n+
232 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>
\n+
\n+\n+
234 boost::variant<const Ordering&, const KeyVector&> variables,
\n+
235 const Eliminate& function, OptionalVariableIndex variableIndex) const
\n+
236 {
\n+
237 if(!variableIndex) {
\n+
238 // If no variable index is provided, compute one and call this function again
\n+
239 VariableIndex index(asDerived());
\n+
\n+
240 return marginalMultifrontalBayesNet(variables, function, index);
\n+
241 } else {
\n+
242 // No ordering was provided for the marginalized variables, so order them using constrained
\n+
243 // COLAMD.
\n+
244 bool unmarginalizedAreOrdered = (boost::get<const Ordering&>(&variables) != 0);
\n+
245 const KeyVector* variablesOrOrdering =
\n+
246 unmarginalizedAreOrdered ?
\n+
247 boost::get<const Ordering&>(&variables) : boost::get<const KeyVector&>(&variables);
\n
248
\n-\n+
249 Ordering totalOrdering =
\n+
250 Ordering::ColamdConstrainedLast(*variableIndex, *variablesOrOrdering, unmarginalizedAreOrdered);
\n
251
\n-\n-
254
\n-
256 void fillNodesIndex(const sharedClique& subtree);
\n-
257
\n-
258 // Friend JunctionTree because it directly fills roots and nodes index.
\n-
259 template<class BAYESTREE, class GRAPH> friend class EliminatableClusterTree;
\n-
260
\n-
261 private:
\n-\n-
264 template<class ARCHIVE>
\n-
265 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
266 ar & BOOST_SERIALIZATION_NVP(nodes_);
\n-
267 ar & BOOST_SERIALIZATION_NVP(roots_);
\n-
268 }
\n-
269
\n-
271
\n-
272 }; // BayesTree
\n-
\n-
273
\n-
274 /* ************************************************************************* */
\n-
275 template <class CLIQUE, typename = void>
\n-
\n-
276 class BayesTreeOrphanWrapper : public CLIQUE::ConditionalType {
\n-
277 public:
\n-
278 typedef CLIQUE CliqueType;
\n-
279 typedef typename CLIQUE::ConditionalType Base;
\n-
280
\n-
281 boost::shared_ptr<CliqueType> clique;
\n+
252 // Split up ordering
\n+
253 const size_t nVars = variablesOrOrdering->size();
\n+
254 Ordering marginalizationOrdering(totalOrdering.begin(), totalOrdering.end() - nVars);
\n+
\n+
255 Ordering marginalVarsOrdering(totalOrdering.end() - nVars, totalOrdering.end());
\n+
256
\n+
257 // Call this function again with the computed orderings
\n+
258 return marginalMultifrontalBayesNet(marginalVarsOrdering, marginalizationOrdering, function, *variableIndex);
\n+
259 }
\n+
260 }
\n+
261
\n+
262 /* ************************************************************************* */
\n+
263 template<class FACTORGRAPH>
\n+
264 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesNetType>
\n+
\n+\n+
266 boost::variant<const Ordering&, const KeyVector&> variables,
\n+
267 const Ordering& marginalizedVariableOrdering,
\n+
268 const Eliminate& function, OptionalVariableIndex variableIndex) const
\n+
269 {
\n+
\n+
270 if(!variableIndex) {
\n+
271 // If no variable index is provided, compute one and call this function again
\n+
272 VariableIndex index(asDerived());
\n+
273 return marginalMultifrontalBayesNet(variables, marginalizedVariableOrdering, function, index);
\n+
274 } else {
\n+
275 gttic(marginalMultifrontalBayesNet);
\n+
276 // An ordering was provided for the marginalized variables, so we can first eliminate them
\n+
\n+
277 // in the order requested.
\n+
278 boost::shared_ptr<BayesTreeType> bayesTree;
\n+
279 boost::shared_ptr<FactorGraphType> factorGraph;
\n+
280 boost::tie(bayesTree,factorGraph) =
\n+
281 eliminatePartialMultifrontal(marginalizedVariableOrdering, function, *variableIndex);
\n
282
\n-
\n-
293 BayesTreeOrphanWrapper(const boost::shared_ptr<CliqueType>& clique)
\n-
294 : clique(clique) {
\n-
295 this->keys_.assign(clique->conditional()->beginParents(),
\n-
296 clique->conditional()->endParents());
\n-
297 }
\n-
\n-
298
\n-
299 void print(
\n-
300 const std::string& s = "",
\n-
301 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n-
302 clique->print(s + "stored clique", formatter);
\n-
303 }
\n-
304 };
\n-
\n-
305
\n-
306}
\n-
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
283 if(const Ordering* varsAsOrdering = boost::get<const Ordering&>(&variables))
\n+
284 {
\n+
285 // An ordering was also provided for the unmarginalized variables, so we can also
\n+
286 // eliminate them in the order requested.
\n+
287 return factorGraph->eliminateSequential(*varsAsOrdering, function);
\n+
288 }
\n+
289 else
\n+
290 {
\n+
291 // No ordering was provided for the unmarginalized variables, so order them with COLAMD.
\n+
292 return factorGraph->eliminateSequential(Ordering::COLAMD, function);
\n+
293 }
\n+
294 }
\n+
295 }
\n+
296
\n+
297 /* ************************************************************************* */
\n+
298 template<class FACTORGRAPH>
\n+
299 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>
\n+
\n+\n+
301 boost::variant<const Ordering&, const KeyVector&> variables,
\n+
302 const Eliminate& function, OptionalVariableIndex variableIndex) const
\n+
303 {
\n+
304 if(!variableIndex) {
\n+
305 // If no variable index is provided, compute one and call this function again
\n+
306 VariableIndex computedVariableIndex(asDerived());
\n+
307 return marginalMultifrontalBayesTree(variables, function, computedVariableIndex);
\n+
308 } else {
\n+
309 // No ordering was provided for the marginalized variables, so order them using constrained
\n+
310 // COLAMD.
\n+
311 bool unmarginalizedAreOrdered = (boost::get<const Ordering&>(&variables) != 0);
\n+
312 const KeyVector* variablesOrOrdering =
\n+
313 unmarginalizedAreOrdered ?
\n+
314 boost::get<const Ordering&>(&variables) : boost::get<const KeyVector&>(&variables);
\n+
315
\n+
316 Ordering totalOrdering =
\n+
317 Ordering::ColamdConstrainedLast(*variableIndex, *variablesOrOrdering, unmarginalizedAreOrdered);
\n+
318
\n+
319 // Split up ordering
\n+
320 const size_t nVars = variablesOrOrdering->size();
\n+
321 Ordering marginalizationOrdering(totalOrdering.begin(), totalOrdering.end() - nVars);
\n+
322 Ordering marginalVarsOrdering(totalOrdering.end() - nVars, totalOrdering.end());
\n+
323
\n+
324 // Call this function again with the computed orderings
\n+
325 return marginalMultifrontalBayesTree(marginalVarsOrdering, marginalizationOrdering, function, *variableIndex);
\n+
326 }
\n+
327 }
\n+
\n+
328
\n+
329 /* ************************************************************************* */
\n+
330 template<class FACTORGRAPH>
\n+
331 boost::shared_ptr<typename EliminateableFactorGraph<FACTORGRAPH>::BayesTreeType>
\n+
\n+\n+
333 boost::variant<const Ordering&, const KeyVector&> variables,
\n+
334 const Ordering& marginalizedVariableOrdering,
\n+
335 const Eliminate& function, OptionalVariableIndex variableIndex) const
\n+
336 {
\n+
337 if(!variableIndex) {
\n+
338 // If no variable index is provided, compute one and call this function again
\n+
339 VariableIndex computedVariableIndex(asDerived());
\n+
340 return marginalMultifrontalBayesTree(variables, marginalizedVariableOrdering, function, computedVariableIndex);
\n+
341 } else {
\n+
342 gttic(marginalMultifrontalBayesTree);
\n+
343 // An ordering was provided for the marginalized variables, so we can first eliminate them
\n+
344 // in the order requested.
\n+
345 boost::shared_ptr<BayesTreeType> bayesTree;
\n+
346 boost::shared_ptr<FactorGraphType> factorGraph;
\n+
347 boost::tie(bayesTree,factorGraph) =
\n+
348 eliminatePartialMultifrontal(marginalizedVariableOrdering, function, *variableIndex);
\n+
349
\n+
350 if(const Ordering* varsAsOrdering = boost::get<const Ordering&>(&variables))
\n+
351 {
\n+
352 // An ordering was also provided for the unmarginalized variables, so we can also
\n+
353 // eliminate them in the order requested.
\n+
354 return factorGraph->eliminateMultifrontal(*varsAsOrdering, function);
\n+
355 }
\n+
356 else
\n+
357 {
\n+
358 // No ordering was provided for the unmarginalized variables, so order them with COLAMD.
\n+
359 return factorGraph->eliminateMultifrontal(Ordering::COLAMD, function);
\n+
360 }
\n+
361 }
\n+
362 }
\n+
\n+
363
\n+
364 /* ************************************************************************* */
\n+
365 template<class FACTORGRAPH>
\n+
366 boost::shared_ptr<FACTORGRAPH>
\n+
\n+\n+
368 const KeyVector& variables,
\n+
369 const Eliminate& function, OptionalVariableIndex variableIndex) const
\n+
370 {
\n+
371 if(variableIndex)
\n+
372 {
\n+
373 // Compute a total ordering for all variables
\n+
374 Ordering totalOrdering = Ordering::ColamdConstrainedLast(*variableIndex, variables);
\n+
375
\n+
376 // Split out the part for the marginalized variables
\n+
377 Ordering marginalizationOrdering(totalOrdering.begin(), totalOrdering.end() - variables.size());
\n+
378
\n+
379 // Eliminate and return the remaining factor graph
\n+
380 return eliminatePartialMultifrontal(marginalizationOrdering, function, *variableIndex).second;
\n+
381 }
\n+
382 else
\n+
383 {
\n+
384 // If no variable index is provided, compute one and call this function again
\n+
385 VariableIndex computedVariableIndex(asDerived());
\n+
386 return marginal(variables, function, computedVariableIndex);
\n+
387 }
\n+
388 }
\n+
\n+
\n+
389
\n+
390
\n+
391}
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
Variable elimination algorithms for factor graphs.
\n+
Exceptions that may be thrown by inference algorithms.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition ConcurrentMap.h:68
\n-
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
A cluster-tree that eliminates to a Bayes tree.
Definition ClusterTree.h:184
\n-
clique statistics
Definition BayesTree.h:39
\n-
store all the sizes
Definition BayesTree.h:48
\n-
Bayes tree.
Definition BayesTree.h:67
\n-
Nodes nodes_
Map from indices to Clique.
Definition BayesTree.h:100
\n-
void removeClique(sharedClique clique)
remove a clique: warning, can result in a forest
Definition BayesTree-inst.h:424
\n-
sharedFactorGraph joint(Key j1, Key j2, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
return joint on two variables Limitation: can only calculate joint if cliques are disjoint or one of ...
Definition BayesTree-inst.h:293
\n-
void fillNodesIndex(const sharedClique &subtree)
Fill the nodes index for a subtree.
Definition BayesTree-inst.h:246
\n-
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Output to graphviz format, stream version.
Definition BayesTree-inst.h:64
\n-
void addFactorsToGraph(FactorGraph< FactorType > *graph) const
Add all cliques in this BayesTree to the specified factor graph.
Definition BayesTree-inst.h:168
\n-
sharedClique operator[](Key j) const
Access node by variable.
Definition BayesTree.h:146
\n-
This & operator=(const This &other)
Assignment operator.
Definition BayesTree-inst.h:199
\n-
boost::shared_ptr< Clique > sharedClique
Shared pointer to a clique.
Definition BayesTree.h:74
\n-
BayesTree()
Create an empty Bayes Tree.
Definition BayesTree.h:109
\n-
Clique Node
Synonym for Clique (TODO: remove)
Definition BayesTree.h:75
\n-
void clear()
Remove all nodes.
Definition BayesTree-inst.h:408
\n-
Roots roots_
Root cliques.
Definition BayesTree.h:103
\n-
void addClique(const sharedClique &clique, const sharedClique &parent_clique=sharedClique())
add a clique (top down)
Definition BayesTree-inst.h:142
\n-
sharedBayesNet jointBayesNet(Key j1, Key j2, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
return joint on two variables as a BayesNet Limitation: can only calculate joint if cliques are disjo...
Definition BayesTree-inst.h:302
\n-
sharedClique sharedNode
Synonym for sharedClique (TODO: remove)
Definition BayesTree.h:76
\n-
Key findParentClique(const CONTAINER &parents) const
Find parent clique of a conditional.
Definition BayesTree-inst.h:238
\n-
size_t size() const
number of cliques
Definition BayesTree-inst.h:133
\n-
void deleteCachedShortcuts()
Clear all shortcut caches - use before timing on marginal calculation to avoid residual cache data.
Definition BayesTree-inst.h:416
\n-
void removePath(sharedClique clique, BayesNetType *bn, Cliques *orphans)
Remove path from clique to root and return that path as factors plus a list of orphaned subtree roots...
Definition BayesTree-inst.h:448
\n-
const Nodes & nodes() const
Return nodes.
Definition BayesTree.h:143
\n-
FastList< sharedClique > Cliques
A convenience class for a list of shared cliques.
Definition BayesTree.h:89
\n-
CLIQUE Clique
The clique type, normally BayesTreeClique.
Definition BayesTree.h:73
\n-
sharedConditional marginalFactor(Key j, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
Return marginal on any variable.
Definition BayesTree-inst.h:270
\n-
const Roots & roots() const
return root cliques
Definition BayesTree.h:149
\n-
const sharedClique & clique(Key j) const
alternate syntax for matlab: find the clique that contains the variable with Key j
Definition BayesTree.h:152
\n-
ConcurrentMap< Key, sharedClique > Nodes
Map from keys to Clique.
Definition BayesTree.h:92
\n-
friend class boost::serialization::access
Serialization function.
Definition BayesTree.h:263
\n-
size_t numCachedSeparatorMarginals() const
Collect number of cliques with cached separator marginals.
Definition BayesTree-inst.h:55
\n-
BayesTreeCliqueData getCliqueData() const
Gather data on all cliques.
Definition BayesTree-inst.h:35
\n-
Cliques removeSubtree(const sharedClique &subtree)
Remove the requested subtree.
Definition BayesTree-inst.h:496
\n-
bool empty() const
Check if there are any cliques in the tree.
Definition BayesTree.h:138
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition BayesTree-inst.h:212
\n-
void insertRoot(const sharedClique &subtree)
Insert a new subtree with known parent clique.
Definition BayesTree-inst.h:260
\n-
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
output to file with graphviz format.
Definition BayesTree-inst.h:85
\n-
void removeTop(const KeyVector &keys, BayesNetType *bn, Cliques *orphans)
Given a list of indices, turn "contaminated" part of the tree back into a factor graph.
Definition BayesTree-inst.h:475
\n-
FastVector< sharedClique > Roots
Root cliques.
Definition BayesTree.h:95
\n-
Definition BayesTree.h:276
\n-
BayesTreeOrphanWrapper(const boost::shared_ptr< CliqueType > &clique)
Construct a new Bayes Tree Orphan Wrapper object.
Definition BayesTree.h:293
\n+
boost::shared_ptr< BayesTreeType > marginalMultifrontalBayesTree(boost::variant< const Ordering &, const KeyVector & > variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal of the requested variables and return the result as a Bayes tree.
Definition EliminateableFactorGraph-inst.h:300
\n+
EliminationTraitsType::JunctionTreeType JunctionTreeType
Junction tree type that can do multifrontal elimination of this graph.
Definition EliminateableFactorGraph.h:82
\n+
boost::shared_ptr< FactorGraphType > marginal(const KeyVector &variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal factor graph of the requested variables.
Definition EliminateableFactorGraph-inst.h:367
\n+
boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant< const Ordering &, const KeyVector & > variables, const Ordering &marginalizedVariableOrdering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal of the requested variables and return the result as a Bayes net.
Definition EliminateableFactorGraph-inst.h:265
\n+
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition EliminateableFactorGraph.h:89
\n+
EliminationTraitsType::BayesTreeType BayesTreeType
Bayes tree type produced by multifrontal elimination.
Definition EliminateableFactorGraph.h:79
\n+
boost::shared_ptr< BayesNetType > eliminateSequential(OptionalOrderingType orderingType=boost::none, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do sequential elimination of all variables to produce a Bayes net.
Definition EliminateableFactorGraph-inst.h:30
\n+
boost::shared_ptr< BayesTreeType > eliminateMultifrontal(OptionalOrderingType orderingType=boost::none, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do multifrontal elimination of all variables to produce a Bayes tree.
Definition EliminateableFactorGraph-inst.h:91
\n+
EliminationTraitsType::EliminationTreeType EliminationTreeType
Elimination tree type that can do sequential elimination of this graph.
Definition EliminateableFactorGraph.h:76
\n+
boost::optional< const VariableIndex & > OptionalVariableIndex
Typedef for an optional variable index as an argument to elimination functions.
Definition EliminateableFactorGraph.h:92
\n+
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do sequential elimination of some variables, in ordering provided, to produce a Bayes net and a remai...
Definition EliminateableFactorGraph-inst.h:154
\n+
boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant< const Ordering &, const KeyVector & > variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal of the requested variables and return the result as a Bayes net.
Definition EliminateableFactorGraph-inst.h:233
\n+
std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr< FactorGraphType > > eliminatePartialMultifrontal(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do multifrontal elimination of some variables, in ordering provided, to produce a Bayes tree and a re...
Definition EliminateableFactorGraph-inst.h:193
\n+
boost::optional< Ordering::OrderingType > OptionalOrderingType
Typedef for an optional ordering type.
Definition EliminateableFactorGraph.h:95
\n+
An inference algorithm was called with inconsistent arguments.
Definition inferenceExceptions.h:29
\n+
Definition Ordering.h:34
\n+
static Ordering Natural(const FACTOR_GRAPH &fg)
Return a natural Ordering. Typically used by iterative solvers.
Definition Ordering.h:190
\n+
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:95
\n+
static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const KeyVector &constrainLast, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:114
\n+
static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const KeyVector &constrainFirst, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:141
\n+
static GTSAM_EXPORT Ordering Metis(const MetisIndex &met)
Compute an ordering determined by METIS from a VariableIndex.
Definition Ordering.cpp:212
\n+
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,451 +1,609 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BayesTree.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+EliminateableFactorGraph-inst.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18// \\callgraph\n-19\n-20#pragma once\n-21\n-22#include \n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n-26#include \n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-28\n-29#include \n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32\n-33 // Forward declarations\n-34 template class FactorGraph;\n-35 template class EliminatableClusterTree;\n-36\n-37 /* *************************************************************************\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh>\n+23#include \n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+27 /* *************************************************************************\n */\n-_\b3_\b9 struct GTSAM_EXPORT _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bS_\bt_\ba_\bt_\bs {\n-40 double avgConditionalSize;\n-41 std::size_t maxConditionalSize;\n-42 double avgSeparatorSize;\n-43 std::size_t maxSeparatorSize;\n-44 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const ;\n-45 };\n-46\n-_\b4_\b8 struct GTSAM_EXPORT _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba {\n-49 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\b> conditionalSizes;\n-50 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bs_\bi_\bz_\be_\b__\bt_\b> separatorSizes;\n-51 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bS_\bt_\ba_\bt_\bs getStats() const;\n-52 };\n-53\n-54 /* *************************************************************************\n+28 template\n+29 boost::shared_ptr::\n+BayesNetType>\n+_\b3_\b0 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n+31 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n+32 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const {\n+33 if(!variableIndex) {\n+34 // If no VariableIndex provided, compute one and call this function again\n+IMPORTANT: we check\n+35 // for no variable index first so that it's always computed if we need to\n+call COLAMD because\n+36 // no Ordering is provided. When removing optional from VariableIndex,\n+create VariableIndex\n+37 // before creating ordering.\n+38 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+39 return eliminateSequential(orderingType, function, computedVariableIndex);\n+40 }\n+41 else {\n+42 // Compute an ordering and call this function again. We are guaranteed to\n+have a\n+43 // VariableIndex already here because we computed one if needed in the\n+previous 'if' block.\n+44 if (orderingType == Ordering::METIS) {\n+45 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bM_\be_\bt_\bi_\bs(asDerived());\n+46 return eliminateSequential(computedOrdering, function, variableIndex);\n+47 } else if (orderingType == Ordering::COLAMD) {\n+48 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd(*variableIndex);\n+49 return eliminateSequential(computedOrdering, function, variableIndex);\n+50 } else if (orderingType == Ordering::NATURAL) {\n+51 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bN_\ba_\bt_\bu_\br_\ba_\bl(asDerived());\n+52 return eliminateSequential(computedOrdering, function, variableIndex);\n+53 } else {\n+54 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = EliminationTraitsType::DefaultOrderingFunc(\n+55 asDerived(), variableIndex);\n+56 return eliminateSequential(computedOrdering, function, variableIndex);\n+57 }\n+58 }\n+59 }\n+60\n+61 /* *************************************************************************\n */\n-65 template\n-_\b6_\b6 class _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+62 template\n+63 boost::shared_ptr::\n+BayesNetType>\n+_\b6_\b4 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n+65 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n+66 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n 67 {\n-68 protected:\n-69 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b> _\bT_\bh_\bi_\bs;\n-70 typedef boost::shared_ptr shared_ptr;\n-71\n-72 public:\n-_\b7_\b3 typedef CLIQUE _\bC_\bl_\bi_\bq_\bu_\be;\n-_\b7_\b4 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be;\n-_\b7_\b5 typedef _\bC_\bl_\bi_\bq_\bu_\be _\bN_\bo_\bd_\be;\n-_\b7_\b6 typedef _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be;\n-77 typedef typename CLIQUE::ConditionalType ConditionalType;\n-78 typedef boost::shared_ptr sharedConditional;\n-79 typedef typename CLIQUE::BayesNetType BayesNetType;\n-80 typedef boost::shared_ptr sharedBayesNet;\n-81 typedef typename CLIQUE::FactorType FactorType;\n-82 typedef boost::shared_ptr sharedFactor;\n-83 typedef typename CLIQUE::FactorGraphType FactorGraphType;\n-84 typedef boost::shared_ptr sharedFactorGraph;\n-85 typedef typename FactorGraphType::Eliminate Eliminate;\n-86 typedef typename CLIQUE::EliminationTraitsType EliminationTraitsType;\n-87\n-_\b8_\b9 typedef _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bC_\bl_\bi_\bq_\bu_\be_\bs;\n-90\n-_\b9_\b2 typedef _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bN_\bo_\bd_\be_\bs;\n-93\n-_\b9_\b5 typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bR_\bo_\bo_\bt_\bs;\n-96\n-97 protected:\n-98\n-_\b1_\b0_\b0 _\bN_\bo_\bd_\be_\bs _\bn_\bo_\bd_\be_\bs_\b_;\n-101\n-_\b1_\b0_\b3 _\bR_\bo_\bo_\bt_\bs _\br_\bo_\bo_\bt_\bs_\b_;\n-104\n-107\n-_\b1_\b0_\b9 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() {}\n-110\n-112 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(const This& other);\n-113\n-115\n-117 This& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const This& other);\n-118\n-121\n-123 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n-124\n-125 public:\n-127 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-128 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n-130\n-133\n-135 size_t _\bs_\bi_\bz_\be() const;\n-136\n-_\b1_\b3_\b8 inline bool _\be_\bm_\bp_\bt_\by() const {\n-139 return _\bn_\bo_\bd_\be_\bs_\b_.empty();\n-140 }\n-141\n-_\b1_\b4_\b3 const _\bN_\bo_\bd_\be_\bs& _\bn_\bo_\bd_\be_\bs() const { return _\bn_\bo_\bd_\be_\bs_\b_; }\n-144\n-_\b1_\b4_\b6 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bK_\be_\by j) const { return _\bn_\bo_\bd_\be_\bs_\b_.at(j); }\n-147\n-_\b1_\b4_\b9 const _\bR_\bo_\bo_\bt_\bs& _\br_\bo_\bo_\bt_\bs() const { return _\br_\bo_\bo_\bt_\bs_\b_; }\n+68 if(!variableIndex) {\n+69 // If no VariableIndex provided, compute one and call this function again\n+70 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+71 return eliminateSequential(ordering, function, computedVariableIndex);\n+72 } else {\n+73 gttic(eliminateSequential);\n+74 // Do elimination\n+75 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be etree(asDerived(), *variableIndex, ordering);\n+76 boost::shared_ptr bayesNet;\n+77 boost::shared_ptr factorGraph;\n+78 boost::tie(bayesNet,factorGraph) = etree.eliminate(function);\n+79 // If any factors are remaining, the ordering was incomplete\n+80 if(!factorGraph->empty())\n+81 throw _\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd();\n+82 // Return the Bayes net\n+83 return bayesNet;\n+84 }\n+85 }\n+86\n+87 /* *************************************************************************\n+*/\n+88 template \n+89 boost::shared_ptr<\n+90 typename _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be>\n+_\b9_\b1 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n+92 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n+93 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const {\n+94 if (!variableIndex) {\n+95 // If no VariableIndex provided, compute one and call this function again\n+96 // IMPORTANT: we check for no variable index first so that it's always\n+97 // computed if we need to call COLAMD because no Ordering is provided.\n+98 // When removing optional from VariableIndex, create VariableIndex before\n+99 // creating ordering.\n+100 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+101 return eliminateMultifrontal(orderingType, function,\n+102 computedVariableIndex);\n+103 } else {\n+104 // Compute an ordering and call this function again. We are guaranteed to\n+105 // have a VariableIndex already here because we computed one if needed in\n+106 // the previous 'if' block.\n+107 if (orderingType == Ordering::METIS) {\n+108 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bM_\be_\bt_\bi_\bs(asDerived());\n+109 return eliminateMultifrontal(computedOrdering, function, variableIndex);\n+110 } else if (orderingType == Ordering::COLAMD) {\n+111 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd(*variableIndex);\n+112 return eliminateMultifrontal(computedOrdering, function, variableIndex);\n+113 } else if (orderingType == Ordering::NATURAL) {\n+114 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bN_\ba_\bt_\bu_\br_\ba_\bl(asDerived());\n+115 return eliminateMultifrontal(computedOrdering, function, variableIndex);\n+116 } else {\n+_\b1_\b1_\b7 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg computedOrdering = EliminationTraitsType::DefaultOrderingFunc(\n+118 asDerived(), variableIndex);\n+119 return eliminateMultifrontal(computedOrdering, function, variableIndex);\n+120 }\n+121 }\n+122 }\n+123\n+124 /\n+* ************************************************************************* */\n+125 template\n+126 boost::shared_ptr::\n+BayesTreeType>\n+_\b1_\b2_\b7 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n+128 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n+129 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n+130 {\n+131 if(!variableIndex) {\n+132 // If no VariableIndex provided, compute one and call this function again\n+133 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+134 return eliminateMultifrontal(ordering, function, computedVariableIndex);\n+135 } else {\n+_\b1_\b3_\b6 gttic(eliminateMultifrontal);\n+137 // Do elimination with given ordering\n+138 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be etree(asDerived(), *variableIndex, ordering);\n+139 _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be junctionTree(etree);\n+140 boost::shared_ptr bayesTree;\n+141 boost::shared_ptr factorGraph;\n+142 boost::tie(bayesTree,factorGraph) = junctionTree.eliminate(function);\n+143 // If any factors are remaining, the ordering was incomplete\n+144 if(!factorGraph->empty())\n+145 throw _\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd();\n+146 // Return the Bayes tree\n+147 return bayesTree;\n+148 }\n+149 }\n 150\n-_\b1_\b5_\b2 const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& _\bc_\bl_\bi_\bq_\bu_\be(_\bK_\be_\by j) const {\n-153 typename Nodes::const_iterator c = _\bn_\bo_\bd_\be_\bs_\b_.find(j);\n-154 if(c == _\bn_\bo_\bd_\be_\bs_\b_.end())\n-155 throw std::out_of_range(\"Requested the BayesTree clique for a key that is\n-not in the BayesTree\");\n-156 else\n-157 return c->second;\n-158 }\n-159\n-161 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba _\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba() const;\n-162\n-164 size_t _\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs() const;\n-165\n-171 sharedConditional _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j, const Eliminate& function =\n-EliminationTraitsType::DefaultEliminate) const;\n-172\n-177 sharedFactorGraph _\bj_\bo_\bi_\bn_\bt(_\bK_\be_\by j1, _\bK_\be_\by j2, const Eliminate& function =\n-EliminationTraitsType::DefaultEliminate) const;\n-178\n-183 sharedBayesNet _\bj_\bo_\bi_\bn_\bt_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(_\bK_\be_\by j1, _\bK_\be_\by j2, const Eliminate& function =\n-EliminationTraitsType::DefaultEliminate) const;\n-184\n-187\n-189 void _\bd_\bo_\bt(std::ostream& os, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-DefaultKeyFormatter) const;\n-190\n-192 std::string _\bd_\bo_\bt(\n-193 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n-194\n-196 void _\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n-197 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n-198\n-202\n-207 template\n-208 _\bK_\be_\by _\bf_\bi_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bC_\bl_\bi_\bq_\bu_\be(const CONTAINER& parents) const;\n-209\n-211 void _\bc_\bl_\be_\ba_\br();\n-212\n-214 void _\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs();\n-215\n-220 void _\br_\be_\bm_\bo_\bv_\be_\bP_\ba_\bt_\bh(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bc_\bl_\bi_\bq_\bu_\be, BayesNetType* bn, _\bC_\bl_\bi_\bq_\bu_\be_\bs* orphans);\n-221\n-226 void _\br_\be_\bm_\bo_\bv_\be_\bT_\bo_\bp(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys, BayesNetType* bn, _\bC_\bl_\bi_\bq_\bu_\be_\bs* orphans);\n-227\n-230 _\bC_\bl_\bi_\bq_\bu_\be_\bs _\br_\be_\bm_\bo_\bv_\be_\bS_\bu_\bb_\bt_\br_\be_\be(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree);\n-231\n-235 void _\bi_\bn_\bs_\be_\br_\bt_\bR_\bo_\bo_\bt(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree);\n-236\n-238 void _\ba_\bd_\bd_\bC_\bl_\bi_\bq_\bu_\be(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& _\bc_\bl_\bi_\bq_\bu_\be, const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be&\n-parent_clique = _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be());\n-239\n-241 void _\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh(_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be_\b>* graph) const;\n-242\n-243 protected:\n-244\n-246 void _\bd_\bo_\bt(std::ostream &s, _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bc_\bl_\bi_\bq_\bu_\be, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n-keyFormatter,\n-247 int parentnum = 0) const;\n+151 /\n+* ************************************************************************* */\n+152 template\n+153 std::pair::BayesNetType>, boost::\n+shared_ptr >\n+_\b1_\b5_\b4 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n+155 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+variableIndex) const\n+156 {\n+_\b1_\b5_\b7 if(variableIndex) {\n+158 gttic(eliminatePartialSequential);\n+159 // Do elimination\n+160 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be etree(asDerived(), *variableIndex, ordering);\n+161 return etree.eliminate(function);\n+162 } else {\n+163 // If no variable index is provided, compute one and call this function\n+again\n+164 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+165 return eliminatePartialSequential(ordering, function,\n+computedVariableIndex);\n+166 }\n+167 }\n+168\n+169 /\n+* ************************************************************************* */\n+170 template\n+_\b1_\b7_\b1 std::pair::BayesNetType>, boost::\n+shared_ptr >\n+_\b1_\b7_\b2 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n+173 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n+_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n+174 {\n+175 if(variableIndex) {\n+176 gttic(eliminatePartialSequential);\n+177 // Compute full ordering\n+178 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg fullOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt(*variableIndex,\n+variables);\n+179\n+180 // Split off the part of the ordering for the variables being eliminated\n+_\b1_\b8_\b1 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg ordering(fullOrdering.begin(), fullOrdering.begin() +\n+variables.size());\n+182 return eliminatePartialSequential(ordering, function, variableIndex);\n+183 } else {\n+184 // If no variable index is provided, compute one and call this function\n+again\n+185 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+186 return eliminatePartialSequential(variables, function,\n+computedVariableIndex);\n+187 }\n+188 }\n+189\n+190 /\n+* ************************************************************************* */\n+_\b1_\b9_\b1 template\n+192 std::pair::BayesTreeType>, boost::\n+shared_ptr >\n+_\b1_\b9_\b3 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n+194 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+variableIndex) const\n+195 {\n+196 if(variableIndex) {\n+197 gttic(eliminatePartialMultifrontal);\n+198 // Do elimination\n+199 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be etree(asDerived(), *variableIndex, ordering);\n+200 _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be junctionTree(etree);\n+_\b2_\b0_\b1 return junctionTree.eliminate(function);\n+202 } else {\n+203 // If no variable index is provided, compute one and call this function\n+again\n+204 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+205 return eliminatePartialMultifrontal(ordering, function,\n+computedVariableIndex);\n+206 }\n+207 }\n+208\n+209 /\n+* ************************************************************************* */\n+210 template\n+_\b2_\b1_\b1 std::pair::BayesTreeType>, boost::\n+shared_ptr >\n+_\b2_\b1_\b2 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n+213 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables, const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n+_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n+214 {\n+215 if(variableIndex) {\n+216 gttic(eliminatePartialMultifrontal);\n+217 // Compute full ordering\n+218 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg fullOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt(*variableIndex,\n+variables);\n+219\n+220 // Split off the part of the ordering for the variables being eliminated\n+221 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg ordering(fullOrdering.begin(), fullOrdering.begin() +\n+variables.size());\n+222 return eliminatePartialMultifrontal(ordering, function, variableIndex);\n+223 } else {\n+224 // If no variable index is provided, compute one and call this function\n+again\n+_\b2_\b2_\b5 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+226 return eliminatePartialMultifrontal(variables, function,\n+computedVariableIndex);\n+227 }\n+228 }\n+229\n+230 /\n+* ************************************************************************* */\n+231 template\n+232 boost::shared_ptr::\n+BayesNetType>\n+_\b2_\b3_\b3 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n+234 boost::variant variables,\n+235 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n+236 {\n+237 if(!variableIndex) {\n+238 // If no variable index is provided, compute one and call this function\n+again\n+239 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx index(asDerived());\n+_\b2_\b4_\b0 return _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(variables, function, index);\n+241 } else {\n+242 // No ordering was provided for the marginalized variables, so order them\n+using constrained\n+243 // COLAMD.\n+244 bool unmarginalizedAreOrdered = (boost::get(&variables) !=\n+0);\n+245 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br* variablesOrOrdering =\n+246 unmarginalizedAreOrdered ?\n+247 boost::get(&variables) : boost::get\n+(&variables);\n 248\n-250 void _\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bc_\bl_\bi_\bq_\bu_\be, _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba* stats) const;\n+249 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg totalOrdering =\n+250 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(*variableIndex, *variablesOrOrdering,\n+unmarginalizedAreOrdered);\n 251\n-253 void _\br_\be_\bm_\bo_\bv_\be_\bC_\bl_\bi_\bq_\bu_\be(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bc_\bl_\bi_\bq_\bu_\be);\n-254\n-256 void _\bf_\bi_\bl_\bl_\bN_\bo_\bd_\be_\bs_\bI_\bn_\bd_\be_\bx(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree);\n-257\n-258 // Friend JunctionTree because it directly fills roots and nodes index.\n-259 template friend class\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be;\n-260\n-261 private:\n-_\b2_\b6_\b3 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-264 template\n-265 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-266 ar & BOOST_SERIALIZATION_NVP(_\bn_\bo_\bd_\be_\bs_\b_);\n-267 ar & BOOST_SERIALIZATION_NVP(_\br_\bo_\bo_\bt_\bs_\b_);\n-268 }\n-269\n-271\n-272 }; // BayesTree\n-273\n-274 /\n+252 // Split up ordering\n+253 const size_t nVars = variablesOrOrdering->size();\n+254 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg marginalizationOrdering(totalOrdering.begin(), totalOrdering.end()\n+- nVars);\n+_\b2_\b5_\b5 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg marginalVarsOrdering(totalOrdering.end() - nVars,\n+totalOrdering.end());\n+256\n+257 // Call this function again with the computed orderings\n+258 return marginalMultifrontalBayesNet(marginalVarsOrdering,\n+marginalizationOrdering, function, *variableIndex);\n+259 }\n+260 }\n+261\n+262 /\n * ************************************************************************* */\n-275 template \n-_\b2_\b7_\b6 class _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br : public CLIQUE::ConditionalType {\n-277 public:\n-278 typedef CLIQUE CliqueType;\n-279 typedef typename CLIQUE::ConditionalType Base;\n-280\n-281 boost::shared_ptr clique;\n+263 template\n+264 boost::shared_ptr::\n+BayesNetType>\n+_\b2_\b6_\b5 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n+266 boost::variant variables,\n+267 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& marginalizedVariableOrdering,\n+268 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n+269 {\n+_\b2_\b7_\b0 if(!variableIndex) {\n+271 // If no variable index is provided, compute one and call this function\n+again\n+272 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx index(asDerived());\n+273 return marginalMultifrontalBayesNet(variables,\n+marginalizedVariableOrdering, function, index);\n+274 } else {\n+275 gttic(marginalMultifrontalBayesNet);\n+276 // An ordering was provided for the marginalized variables, so we can first\n+eliminate them\n+_\b2_\b7_\b7 // in the order requested.\n+278 boost::shared_ptr bayesTree;\n+279 boost::shared_ptr factorGraph;\n+280 boost::tie(bayesTree,factorGraph) =\n+281 eliminatePartialMultifrontal(marginalizedVariableOrdering, function,\n+*variableIndex);\n 282\n-_\b2_\b9_\b3 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br(const boost::shared_ptr& clique)\n-294 : clique(clique) {\n-295 this->keys_.assign(clique->conditional()->beginParents(),\n-296 clique->conditional()->endParents());\n-297 }\n-298\n-299 void print(\n-300 const std::string& s = \"\",\n-301 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n-302 clique->print(s + \"stored clique\", formatter);\n-303 }\n-304 };\n-305\n-306}\n-_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n-A thin wrapper around std::list that uses boost's fast_pool_allocator.\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bK_\be_\by_\b._\bh\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+283 if(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg* varsAsOrdering = boost::get\n+(&variables))\n+284 {\n+285 // An ordering was also provided for the unmarginalized variables, so we\n+can also\n+286 // eliminate them in the order requested.\n+287 return factorGraph->eliminateSequential(*varsAsOrdering, function);\n+288 }\n+289 else\n+290 {\n+291 // No ordering was provided for the unmarginalized variables, so order them\n+with COLAMD.\n+292 return factorGraph->eliminateSequential(Ordering::COLAMD, function);\n+293 }\n+294 }\n+295 }\n+296\n+297 /\n+* ************************************************************************* */\n+298 template\n+299 boost::shared_ptr::\n+BayesTreeType>\n+_\b3_\b0_\b0 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(\n+301 boost::variant variables,\n+302 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n+303 {\n+304 if(!variableIndex) {\n+305 // If no variable index is provided, compute one and call this function\n+again\n+306 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+307 return marginalMultifrontalBayesTree(variables, function,\n+computedVariableIndex);\n+308 } else {\n+309 // No ordering was provided for the marginalized variables, so order them\n+using constrained\n+310 // COLAMD.\n+311 bool unmarginalizedAreOrdered = (boost::get(&variables) !=\n+0);\n+312 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br* variablesOrOrdering =\n+313 unmarginalizedAreOrdered ?\n+314 boost::get(&variables) : boost::get\n+(&variables);\n+315\n+316 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg totalOrdering =\n+317 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(*variableIndex, *variablesOrOrdering,\n+unmarginalizedAreOrdered);\n+318\n+319 // Split up ordering\n+320 const size_t nVars = variablesOrOrdering->size();\n+321 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg marginalizationOrdering(totalOrdering.begin(), totalOrdering.end()\n+- nVars);\n+322 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg marginalVarsOrdering(totalOrdering.end() - nVars,\n+totalOrdering.end());\n+323\n+324 // Call this function again with the computed orderings\n+325 return marginalMultifrontalBayesTree(marginalVarsOrdering,\n+marginalizationOrdering, function, *variableIndex);\n+326 }\n+327 }\n+328\n+329 /\n+* ************************************************************************* */\n+330 template\n+331 boost::shared_ptr::\n+BayesTreeType>\n+_\b3_\b3_\b2 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(\n+333 boost::variant variables,\n+334 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& marginalizedVariableOrdering,\n+335 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n+336 {\n+337 if(!variableIndex) {\n+338 // If no variable index is provided, compute one and call this function\n+again\n+339 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+340 return marginalMultifrontalBayesTree(variables,\n+marginalizedVariableOrdering, function, computedVariableIndex);\n+341 } else {\n+342 gttic(marginalMultifrontalBayesTree);\n+343 // An ordering was provided for the marginalized variables, so we can first\n+eliminate them\n+344 // in the order requested.\n+345 boost::shared_ptr bayesTree;\n+346 boost::shared_ptr factorGraph;\n+347 boost::tie(bayesTree,factorGraph) =\n+348 eliminatePartialMultifrontal(marginalizedVariableOrdering, function,\n+*variableIndex);\n+349\n+350 if(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg* varsAsOrdering = boost::get\n+(&variables))\n+351 {\n+352 // An ordering was also provided for the unmarginalized variables, so we\n+can also\n+353 // eliminate them in the order requested.\n+354 return factorGraph->eliminateMultifrontal(*varsAsOrdering, function);\n+355 }\n+356 else\n+357 {\n+358 // No ordering was provided for the unmarginalized variables, so order them\n+with COLAMD.\n+359 return factorGraph->eliminateMultifrontal(Ordering::COLAMD, function);\n+360 }\n+361 }\n+362 }\n+363\n+364 /\n+* ************************************************************************* */\n+365 template\n+366 boost::shared_ptr\n+_\b3_\b6_\b7 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\bG_\bR_\bA_\bP_\bH_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl(\n+368 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables,\n+369 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex) const\n+370 {\n+371 if(variableIndex)\n+372 {\n+373 // Compute a total ordering for all variables\n+374 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg totalOrdering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(*variableIndex,\n+variables);\n+375\n+376 // Split out the part for the marginalized variables\n+377 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg marginalizationOrdering(totalOrdering.begin(), totalOrdering.end()\n+- variables.size());\n+378\n+379 // Eliminate and return the remaining factor graph\n+380 return eliminatePartialMultifrontal(marginalizationOrdering, function,\n+*variableIndex).second;\n+381 }\n+382 else\n+383 {\n+384 // If no variable index is provided, compute one and call this function\n+again\n+385 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx computedVariableIndex(asDerived());\n+386 return marginal(variables, function, computedVariableIndex);\n+387 }\n+388 }\n+389\n+390\n+391}\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Variable elimination algorithms for factor graphs.\n+_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+Exceptions that may be thrown by inference algorithms.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList is a thin wrapper around std::list that uses the boost\n-fast_pool_allocator instead of the de...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n-A cluster-tree that eliminates to a Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bS_\bt_\ba_\bt_\bs\n-clique statistics\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba\n-store all the sizes\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+boost::shared_ptr< BayesTreeType > marginalMultifrontalBayesTree(boost::\n+variant< const Ordering &, const KeyVector & > variables, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex\n+variableIndex=boost::none) const\n+Compute the marginal of the requested variables and return the result as a\n Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bn_\bo_\bd_\be_\bs_\b_\n-Nodes nodes_\n-Map from indices to Clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bC_\bl_\bi_\bq_\bu_\be\n-void removeClique(sharedClique clique)\n-remove a clique: warning, can result in a forest\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:424\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bj_\bo_\bi_\bn_\bt\n-sharedFactorGraph joint(Key j1, Key j2, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate) const\n-return joint on two variables Limitation: can only calculate joint if cliques\n-are disjoint or one of ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:293\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bf_\bi_\bl_\bl_\bN_\bo_\bd_\be_\bs_\bI_\bn_\bd_\be_\bx\n-void fillNodesIndex(const sharedClique &subtree)\n-Fill the nodes index for a subtree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:246\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bd_\bo_\bt\n-void dot(std::ostream &os, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-Output to graphviz format, stream version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh\n-void addFactorsToGraph(FactorGraph< FactorType > *graph) const\n-Add all cliques in this BayesTree to the specified factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:168\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-sharedClique operator[](Key j) const\n-Access node by variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:146\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-This & operator=(const This &other)\n-Assignment operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:199\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be\n-boost::shared_ptr< Clique > sharedClique\n-Shared pointer to a clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-BayesTree()\n-Create an empty Bayes Tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be\n-Clique Node\n-Synonym for Clique (TODO: remove)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bc_\bl_\be_\ba_\br\n-void clear()\n-Remove all nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:408\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs_\b_\n-Roots roots_\n-Root cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bd_\bd_\bC_\bl_\bi_\bq_\bu_\be\n-void addClique(const sharedClique &clique, const sharedClique\n-&parent_clique=sharedClique())\n-add a clique (top down)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:142\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bj_\bo_\bi_\bn_\bt_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-sharedBayesNet jointBayesNet(Key j1, Key j2, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate) const\n-return joint on two variables as a BayesNet Limitation: can only calculate\n-joint if cliques are disjo...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:302\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be\n-sharedClique sharedNode\n-Synonym for sharedClique (TODO: remove)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bf_\bi_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bC_\bl_\bi_\bq_\bu_\be\n-Key findParentClique(const CONTAINER &parents) const\n-Find parent clique of a conditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:238\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-number of cliques\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:133\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs\n-void deleteCachedShortcuts()\n-Clear all shortcut caches - use before timing on marginal calculation to avoid\n-residual cache data.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:416\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bP_\ba_\bt_\bh\n-void removePath(sharedClique clique, BayesNetType *bn, Cliques *orphans)\n-Remove path from clique to root and return that path as factors plus a list of\n-orphaned subtree roots...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:448\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bn_\bo_\bd_\be_\bs\n-const Nodes & nodes() const\n-Return nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:143\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be_\bs\n-FastList< sharedClique > Cliques\n-A convenience class for a list of shared cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be\n-CLIQUE Clique\n-The clique type, normally BayesTreeClique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-sharedConditional marginalFactor(Key j, const Eliminate\n-&function=EliminationTraitsType::DefaultEliminate) const\n-Return marginal on any variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:270\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs\n-const Roots & roots() const\n-return root cliques\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:149\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bc_\bl_\bi_\bq_\bu_\be\n-const sharedClique & clique(Key j) const\n-alternate syntax for matlab: find the clique that contains the variable with\n-Key j\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\bs\n-ConcurrentMap< Key, sharedClique > Nodes\n-Map from keys to Clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:263\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n-size_t numCachedSeparatorMarginals() const\n-Collect number of cliques with cached separator marginals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba\n-BayesTreeCliqueData getCliqueData() const\n-Gather data on all cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bS_\bu_\bb_\bt_\br_\be_\be\n-Cliques removeSubtree(const sharedClique &subtree)\n-Remove the requested subtree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:496\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty() const\n-Check if there are any cliques in the tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bR_\bo_\bo_\bt\n-void insertRoot(const sharedClique &subtree)\n-Insert a new subtree with known parent clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n-void saveGraph(const std::string &filename, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-output to file with graphviz format.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bT_\bo_\bp\n-void removeTop(const KeyVector &keys, BayesNetType *bn, Cliques *orphans)\n-Given a list of indices, turn \"contaminated\" part of the tree back into a\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:300\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+EliminationTraitsType::JunctionTreeType JunctionTreeType\n+Junction tree type that can do multifrontal elimination of this graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl\n+boost::shared_ptr< FactorGraphType > marginal(const KeyVector &variables, const\n+Eliminate &function=EliminationTraitsType::DefaultEliminate,\n+OptionalVariableIndex variableIndex=boost::none) const\n+Compute the marginal factor graph of the requested variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:367\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant<\n+const Ordering &, const KeyVector & > variables, const Ordering\n+&marginalizedVariableOrdering, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex\n+variableIndex=boost::none) const\n+Compute the marginal of the requested variables and return the result as a\n+Bayes net.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:265\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+std::function< EliminationResult(const FactorGraphType &, const Ordering &)>\n+Eliminate\n+The function type that does a single dense elimination step on a subgraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+EliminationTraitsType::BayesTreeType BayesTreeType\n+Bayes tree type produced by multifrontal elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl\n+boost::shared_ptr< BayesNetType > eliminateSequential(OptionalOrderingType\n+orderingType=boost::none, const Eliminate &function=EliminationTraitsType::\n+DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const\n+Do sequential elimination of all variables to produce a Bayes net.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl\n+boost::shared_ptr< BayesTreeType > eliminateMultifrontal(OptionalOrderingType\n+orderingType=boost::none, const Eliminate &function=EliminationTraitsType::\n+DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const\n+Do multifrontal elimination of all variables to produce a Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+EliminationTraitsType::EliminationTreeType EliminationTreeType\n+Elimination tree type that can do sequential elimination of this graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+boost::optional< const VariableIndex & > OptionalVariableIndex\n+Typedef for an optional variable index as an argument to elimination functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl\n+std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr<\n+FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const\n+Eliminate &function=EliminationTraitsType::DefaultEliminate,\n+OptionalVariableIndex variableIndex=boost::none) const\n+Do sequential elimination of some variables, in ordering provided, to produce a\n+Bayes net and a remai...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant<\n+const Ordering &, const KeyVector & > variables, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex\n+variableIndex=boost::none) const\n+Compute the marginal of the requested variables and return the result as a\n+Bayes net.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:233\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl\n+std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr<\n+FactorGraphType > > eliminatePartialMultifrontal(const Ordering &ordering,\n+const Eliminate &function=EliminationTraitsType::DefaultEliminate,\n+OptionalVariableIndex variableIndex=boost::none) const\n+Do multifrontal elimination of some variables, in ordering provided, to produce\n+a Bayes tree and a re...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:193\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be\n+boost::optional< Ordering::OrderingType > OptionalOrderingType\n+Typedef for an optional ordering type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bc_\bo_\bn_\bs_\bi_\bs_\bt_\be_\bn_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bq_\bu_\be_\bs_\bt_\be_\bd\n+An inference algorithm was called with inconsistent arguments.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn inferenceExceptions.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bN_\ba_\bt_\bu_\br_\ba_\bl\n+static Ordering Natural(const FACTOR_GRAPH &fg)\n+Return a natural Ordering. Typically used by iterative solvers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:190\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd\n+static Ordering Colamd(const FACTOR_GRAPH &graph)\n+Compute a fill-reducing ordering using COLAMD from a factor graph (see details\n+for note on performanc...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt\n+static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const\n+KeyVector &constrainLast, bool forceOrder=false)\n+Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n+(see details for note o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bF_\bi_\br_\bs_\bt\n+static Ordering ColamdConstrainedFirst(const FACTOR_GRAPH &graph, const\n+KeyVector &constrainFirst, bool forceOrder=false)\n+Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n+(see details for note o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bM_\be_\bt_\bi_\bs\n+static GTSAM_EXPORT Ordering Metis(const MetisIndex &met)\n+Compute an ordering determined by METIS from a VariableIndex.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.cpp:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+The VariableIndex class computes and stores the block column structure of a\n factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:475\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bR_\bo_\bo_\bt_\bs\n-FastVector< sharedClique > Roots\n-Root cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:276\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n-BayesTreeOrphanWrapper(const boost::shared_ptr< CliqueType > &clique)\n-Construct a new Bayes Tree Orphan Wrapper object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:293\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+ * E\bEl\bli\bim\bmi\bin\bna\bat\bte\bea\bab\bbl\ble\beF\bFa\bac\bct\bto\bor\brG\bGr\bra\bap\bph\bh-\b-i\bin\bns\bst\bt.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00698_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00698_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesNet-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,151 +98,680 @@\n
No Matches
\n \n \n \n \n \n
\n-
BayesNet-inst.h
\n+
BayesTree-inst.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4* Atlanta, Georgia 30332-0415
\n-
5* All Rights Reserved
\n-
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8* See LICENSE for the license information
\n+
8 * See LICENSE for the license information
\n
9
\n-
10* -------------------------------------------------------------------------- */
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-
23
\n-
24#include <boost/range/adaptor/reversed.hpp>
\n-
25#include <fstream>
\n-
26#include <string>
\n+
21#pragma once
\n+
22
\n+\n+\n+\n+
26#include <gtsam/base/timing.h>
\n
27
\n-
28namespace gtsam {
\n-
29
\n-
30/* ************************************************************************* */
\n-
31template <class CONDITIONAL>
\n-
\n-
32void BayesNet<CONDITIONAL>::print(const std::string& s,
\n-
33 const KeyFormatter& formatter) const {
\n-
34 std::cout << (s.empty() ? "" : s + " ") << std::endl;
\n-
35 std::cout << "size: " << this->size() << std::endl;
\n-
36 for (size_t i = 0; i < this->size(); i++) {
\n-
37 const auto& conditional = this->at(i);
\n-
38 std::stringstream ss;
\n-
39 ss << "conditional " << i << ": ";
\n-
40 if (conditional) conditional->print(ss.str(), formatter);
\n-
41 }
\n-
42}
\n-
\n-
43
\n-
44/* ************************************************************************* */
\n-
45template <class CONDITIONAL>
\n-
\n-
46void BayesNet<CONDITIONAL>::dot(std::ostream& os,
\n-
47 const KeyFormatter& keyFormatter,
\n-
48 const DotWriter& writer) const {
\n-
49 writer.digraphPreamble(&os);
\n-
50
\n-
51 // Create nodes for each variable in the graph
\n-
52 for (Key key : this->keys()) {
\n-
53 auto position = writer.variablePos(key);
\n-
54 writer.drawVariable(key, keyFormatter, position, &os);
\n-
55 }
\n-
56 os << "\\n";
\n-
57
\n-
58 // Reverse order as typically Bayes nets stored in reverse topological sort.
\n-
59 for (auto conditional : boost::adaptors::reverse(*this)) {
\n-
60 auto frontals = conditional->frontals();
\n-
61 const Key me = frontals.front();
\n-
62 auto parents = conditional->parents();
\n-
63 for (const Key& p : parents) {
\n-
64 os << " var" << p << "->var" << me << "\\n";
\n-
65 }
\n-
66 }
\n-
67
\n-
68 os << "}";
\n-
69 std::flush(os);
\n-\n-
\n-
71
\n-
72/* ************************************************************************* */
\n-
73template <class CONDITIONAL>
\n-
\n-
74std::string BayesNet<CONDITIONAL>::dot(const KeyFormatter& keyFormatter,
\n-
75 const DotWriter& writer) const {
\n-
76 std::stringstream ss;
\n-
77 dot(ss, keyFormatter, writer);
\n-
78 return ss.str();
\n-\n-
\n-
80
\n-
81/* ************************************************************************* */
\n-
82template <class CONDITIONAL>
\n-
\n-
83void BayesNet<CONDITIONAL>::saveGraph(const std::string& filename,
\n-
\n-
84 const KeyFormatter& keyFormatter,
\n-
85 const DotWriter& writer) const {
\n-
86 std::ofstream of(filename.c_str());
\n-
87 dot(of, keyFormatter, writer);
\n-
\n-
88 of.close();
\n-
89}
\n-
\n-
90
\n-
91/* ************************************************************************* */
\n-
92template <class CONDITIONAL>
\n-\n-
94 double sum = 0.;
\n-
95 for (const auto& gc : *this) {
\n-
96 if (gc) sum += gc->logProbability(x);
\n-
97 }
\n-
98 return sum;
\n-
99}
\n-
100
\n-
101/* ************************************************************************* */
\n-
102template <class CONDITIONAL>
\n-
103double BayesNet<CONDITIONAL>::evaluate(const HybridValues& x) const {
\n-
104 return exp(-logProbability(x));
\n-
105}
\n-
106
\n-
107/* ************************************************************************* */
\n-
108
\n-
109} // namespace gtsam
\n+
28#include <boost/optional.hpp>
\n+
29#include <fstream>
\n+
30
\n+
31namespace gtsam {
\n+
32
\n+
33 /* ************************************************************************* */
\n+
34 template<class CLIQUE>
\n+
\n+\n+\n+
37 for (const sharedClique& root : roots_) getCliqueData(root, &stats);
\n+
38 return stats;
\n+
39 }
\n+
\n+
40
\n+
41 /* ************************************************************************* */
\n+
42 template <class CLIQUE>
\n+
\n+\n+
44 BayesTreeCliqueData* stats) const {
\n+
45 const auto conditional = clique->conditional();
\n+
46 stats->conditionalSizes.push_back(conditional->nrFrontals());
\n+
47 stats->separatorSizes.push_back(conditional->nrParents());
\n+
48 for (sharedClique c : clique->children) {
\n+
49 getCliqueData(c, stats);
\n+
50 }
\n+
51 }
\n+
\n+
52
\n+
53 /* ************************************************************************* */
\n+
54 template<class CLIQUE>
\n+
\n+\n+
56 size_t count = 0;
\n+
57 for(const sharedClique& root: roots_)
\n+
58 count += root->numCachedSeparatorMarginals();
\n+
59 return count;
\n+
60 }
\n+
\n+
61
\n+
62 /* ************************************************************************* */
\n+
63 template <class CLIQUE>
\n+
\n+
64 void BayesTree<CLIQUE>::dot(std::ostream& os,
\n+
65 const KeyFormatter& keyFormatter) const {
\n+
66 if (roots_.empty())
\n+
67 throw std::invalid_argument(
\n+
68 "the root of Bayes tree has not been initialized!");
\n+
69 os << "digraph G{\\n";
\n+
70 for (const sharedClique& root : roots_) dot(os, root, keyFormatter);
\n+
71 os << "}";
\n+
72 std::flush(os);
\n+
73 }
\n+
\n+
74
\n+
75 /* ************************************************************************* */
\n+
76 template <class CLIQUE>
\n+
\n+
77 std::string BayesTree<CLIQUE>::dot(const KeyFormatter& keyFormatter) const {
\n+
78 std::stringstream ss;
\n+
79 dot(ss, keyFormatter);
\n+
80 return ss.str();
\n+
81 }
\n+
\n+
82
\n+
83 /* ************************************************************************* */
\n+
84 template <class CLIQUE>
\n+
\n+
85 void BayesTree<CLIQUE>::saveGraph(const std::string& filename,
\n+
86 const KeyFormatter& keyFormatter) const {
\n+
87 std::ofstream of(filename.c_str());
\n+
88 dot(of, keyFormatter);
\n+
89 of.close();
\n+
90 }
\n+
\n+
91
\n+
92 /* ************************************************************************* */
\n+
93 template <class CLIQUE>
\n+
\n+
94 void BayesTree<CLIQUE>::dot(std::ostream& s, sharedClique clique,
\n+
95 const KeyFormatter& keyFormatter,
\n+
96 int parentnum) const {
\n+
97 static int num = 0;
\n+
98 bool first = true;
\n+
99 std::stringstream out;
\n+
100 out << num;
\n+
101 std::string parent = out.str();
\n+
102 parent += "[label=\\"";
\n+
103
\n+
104 for (Key key : clique->conditional_->frontals()) {
\n+
105 if (!first) parent += ", ";
\n+
106 first = false;
\n+
107 parent += keyFormatter(key);
\n+
108 }
\n+
109
\n+
110 if (clique->parent()) {
\n+
111 parent += " : ";
\n+
\n+
112 s << parentnum << "->" << num << "\\n";
\n+
113 }
\n+
114
\n+
115 first = true;
\n+
116 for (Key parentKey : clique->conditional_->parents()) {
\n+
\n+
117 if (!first) parent += ", ";
\n+
118 first = false;
\n+
119 parent += keyFormatter(parentKey);
\n+
120 }
\n+
121 parent += "\\"];\\n";
\n+
122 s << parent;
\n+
\n+
123 parentnum = num;
\n+
124
\n+
125 for (sharedClique c : clique->children) {
\n+
126 num++;
\n+
\n+
127 dot(s, c, keyFormatter, parentnum);
\n+
128 }
\n+
129 }
\n+
130
\n+
131 /* ************************************************************************* */
\n+
132 template<class CLIQUE>
\n+
\n+
133 size_t BayesTree<CLIQUE>::size() const {
\n+
134 size_t size = 0;
\n+
\n+
135 for(const sharedClique& clique: roots_)
\n+
136 size += clique->treeSize();
\n+
137 return size;
\n+
138 }
\n+
\n+
\n+
139
\n+
140 /* ************************************************************************* */
\n+
141 template<class CLIQUE>
\n+
\n+
142 void BayesTree<CLIQUE>::addClique(const sharedClique& clique, const sharedClique& parent_clique) {
\n+
143 for(Key j: clique->conditional()->frontals())
\n+
144 nodes_[j] = clique;
\n+
145 if (parent_clique != nullptr) {
\n+
146 clique->parent_ = parent_clique;
\n+
147 parent_clique->children.push_back(clique);
\n+
148 } else {
\n+
149 roots_.push_back(clique);
\n+
150 }
\n+
151 }
\n+
\n+
152
\n+
153 /* ************************************************************************* */
\n+
154 namespace {
\n+
155 template <class FACTOR, class CLIQUE>
\n+
156 struct _pushCliqueFunctor {
\n+
157 _pushCliqueFunctor(FactorGraph<FACTOR>* graph_) : graph(graph_) {}
\n+
158 FactorGraph<FACTOR>* graph;
\n+
159 int operator()(const boost::shared_ptr<CLIQUE>& clique, int dummy) {
\n+
160 graph->push_back(clique->conditional_);
\n+
\n+
161 return 0;
\n+
162 }
\n+
163 };
\n+
\n+
164 } // namespace
\n+
165
\n+
166 /* ************************************************************************* */
\n+
167 template <class CLIQUE>
\n+
\n+\n+
169 FactorGraph<FactorType>* graph) const {
\n+
170 // Traverse the BayesTree and add all conditionals to this graph
\n+
\n+
171 int data = 0; // Unused
\n+
172 _pushCliqueFunctor<FactorType, CLIQUE> functor(graph);
\n+
173 treeTraversal::DepthFirstForest(*this, data, functor);
\n+
174 }
\n+
175
\n+
176 /* ************************************************************************* */
\n+
\n+
177 template<class CLIQUE>
\n+
\n+\n+
179 *this = other;
\n+
180 }
\n+
\n+
181
\n+
182 /* ************************************************************************* */
\n+
\n+
183 namespace {
\n+
184 template<typename NODE>
\n+
185 boost::shared_ptr<NODE>
\n+
186 BayesTreeCloneForestVisitorPre(const boost::shared_ptr<NODE>& node, const boost::shared_ptr<NODE>& parentPointer)
\n+
187 {
\n+
188 // Clone the current node and add it to its cloned parent
\n+
\n+
189 boost::shared_ptr<NODE> clone = boost::make_shared<NODE>(*node);
\n+
190 clone->children.clear();
\n+
191 clone->parent_ = parentPointer;
\n+
\n+
192 parentPointer->children.push_back(clone);
\n+
193 return clone;
\n+
194 }
\n+
195 }
\n+
\n+\n+
197 /* ************************************************************************* */
\n+
198 template<class CLIQUE>
\n+
\n+\n+
200 this->clear();
\n+
201 boost::shared_ptr<Clique> rootContainer = boost::make_shared<Clique>();
\n+
202 treeTraversal::DepthFirstForest(other, rootContainer, BayesTreeCloneForestVisitorPre<Clique>);
\n+
203 for(const sharedClique& root: rootContainer->children) {
\n+
204 root->parent_ = typename Clique::weak_ptr(); // Reset the parent since it's set to the dummy clique
\n+
205 insertRoot(root);
\n+
206 }
\n+
207 return *this;
\n+\n+
\n+
209
\n+
210 /* ************************************************************************* */
\n+
\n+
211 template<class CLIQUE>
\n+
\n+
212 void BayesTree<CLIQUE>::print(const std::string& s, const KeyFormatter& keyFormatter) const {
\n+
213 std::cout << s << ": cliques: " << size() << ", variables: " << nodes_.size() << std::endl;
\n+
\n+
214 treeTraversal::PrintForest(*this, s, keyFormatter);
\n+
215 }
\n+
216
\n+
217 /* ************************************************************************* */
\n+
218 // binary predicate to test equality of a pair for use in equals
\n+
219 template<class CLIQUE>
\n+
\n+
220 bool check_sharedCliques(
\n+
221 const std::pair<Key, typename BayesTree<CLIQUE>::sharedClique>& v1,
\n+
222 const std::pair<Key, typename BayesTree<CLIQUE>::sharedClique>& v2
\n+
223 ) {
\n+
224 return v1.first == v2.first &&
\n+
225 ((!v1.second && !v2.second) || (v1.second && v2.second && v1.second->equals(*v2.second)));
\n+
\n+\n+
227
\n+
228 /* ************************************************************************* */
\n+
229 template<class CLIQUE>
\n+
\n+
230 bool BayesTree<CLIQUE>::equals(const BayesTree<CLIQUE>& other, double tol) const {
\n+
231 return size()==other.size() &&
\n+
232 std::equal(nodes_.begin(), nodes_.end(), other.nodes_.begin(), &check_sharedCliques<CLIQUE>);
\n+
233 }
\n+
\n+
234
\n+
\n+
235 /* ************************************************************************* */
\n+
236 template<class CLIQUE>
\n+
237 template<class CONTAINER>
\n+
\n+
238 Key BayesTree<CLIQUE>::findParentClique(const CONTAINER& parents) const {
\n+
239 typename CONTAINER::const_iterator lowestOrderedParent = min_element(parents.begin(), parents.end());
\n+
240 assert(lowestOrderedParent != parents.end());
\n+
\n+
241 return *lowestOrderedParent;
\n+
242 }
\n+
243
\n+
244 /* ************************************************************************* */
\n+
245 template<class CLIQUE>
\n+
\n+\n+
247 // Add each frontal variable of this root node
\n+
248 for(const Key& j: subtree->conditional()->frontals()) {
\n+
249 bool inserted = nodes_.insert(std::make_pair(j, subtree)).second;
\n+
\n+
250 assert(inserted); (void)inserted;
\n+
251 }
\n+
252 // Fill index for each child
\n+
\n+\n+
254 for(const sharedClique& child: subtree->children) {
\n+
255 fillNodesIndex(child); }
\n+\n+
257
\n+
258 /* ************************************************************************* */
\n+
259 template<class CLIQUE>
\n+
\n+\n+
261 roots_.push_back(subtree); // Add to roots
\n+
262 fillNodesIndex(subtree); // Populate nodes index
\n+
263 }
\n+
\n+
264
\n+
265 /* ************************************************************************* */
\n+
266 // First finds clique marginal then marginalizes that
\n+
267 /* ************************************************************************* */
\n+
268 template<class CLIQUE>
\n+
269 typename BayesTree<CLIQUE>::sharedConditional
\n+
\n+
270 BayesTree<CLIQUE>::marginalFactor(Key j, const Eliminate& function) const
\n+
271 {
\n+
272 gttic(BayesTree_marginalFactor);
\n+
273
\n+
274 // get clique containing Key j
\n+
275 sharedClique clique = this->clique(j);
\n+
276
\n+
277 // calculate or retrieve its marginal P(C) = P(F,S)
\n+
278 FactorGraphType cliqueMarginal = clique->marginal2(function);
\n+
279
\n+
280 // Now, marginalize out everything that is not variable j
\n+
281 BayesNetType marginalBN =
\n+
282 *cliqueMarginal.marginalMultifrontalBayesNet(Ordering{j}, function);
\n+
283
\n+
284 // The Bayes net should contain only one conditional for variable j, so return it
\n+
285 return marginalBN.front();
\n+
286 }
\n+
\n+
287
\n+
288 /* ************************************************************************* */
\n+
289 // Find two cliques, their joint, then marginalizes
\n+
290 /* ************************************************************************* */
\n+
291 template<class CLIQUE>
\n+
292 typename BayesTree<CLIQUE>::sharedFactorGraph
\n+
\n+
293 BayesTree<CLIQUE>::joint(Key j1, Key j2, const Eliminate& function) const
\n+
294 {
\n+
295 gttic(BayesTree_joint);
\n+
296 return boost::make_shared<FactorGraphType>(*jointBayesNet(j1, j2, function));
\n+
297 }
\n+
\n+
298
\n+
299 /* ************************************************************************* */
\n+
300 template<class CLIQUE>
\n+
301 typename BayesTree<CLIQUE>::sharedBayesNet
\n+
\n+
302 BayesTree<CLIQUE>::jointBayesNet(Key j1, Key j2, const Eliminate& function) const
\n+
303 {
\n+
304 gttic(BayesTree_jointBayesNet);
\n+
305 // get clique C1 and C2
\n+
306 sharedClique C1 = (*this)[j1], C2 = (*this)[j2];
\n+
307
\n+
308 gttic(Lowest_common_ancestor);
\n+
309 // Find lowest common ancestor clique
\n+
310 sharedClique B; {
\n+
311 // Build two paths to the root
\n+
312 FastList<sharedClique> path1, path2; {
\n+
313 sharedClique p = C1;
\n+
314 while(p) {
\n+
315 path1.push_front(p);
\n+
316 p = p->parent();
\n+
317 }
\n+
318 } {
\n+
319 sharedClique p = C2;
\n+
320 while(p) {
\n+
321 path2.push_front(p);
\n+
322 p = p->parent();
\n+
323 }
\n+
324 }
\n+
325 // Find the path intersection
\n+
326 typename FastList<sharedClique>::const_iterator p1 = path1.begin(), p2 = path2.begin();
\n+
327 if(*p1 == *p2)
\n+
328 B = *p1;
\n+
329 while(p1 != path1.end() && p2 != path2.end() && *p1 == *p2) {
\n+
330 B = *p1;
\n+
331 ++p1;
\n+
332 ++p2;
\n+
333 }
\n+
334 }
\n+
335 gttoc(Lowest_common_ancestor);
\n+
336
\n+
337 // Build joint on all involved variables
\n+
338 FactorGraphType p_BC1C2;
\n+
339
\n+
340 if(B)
\n+
341 {
\n+
342 // Compute marginal on lowest common ancestor clique
\n+
343 gttic(LCA_marginal);
\n+
344 FactorGraphType p_B = B->marginal2(function);
\n+
345 gttoc(LCA_marginal);
\n+
346
\n+
347 // Compute shortcuts of the requested cliques given the lowest common ancestor
\n+
348 gttic(Clique_shortcuts);
\n+
349 BayesNetType p_C1_Bred = C1->shortcut(B, function);
\n+
350 BayesNetType p_C2_Bred = C2->shortcut(B, function);
\n+
351 gttoc(Clique_shortcuts);
\n+
352
\n+
353 // Factor the shortcuts to be conditioned on the full root
\n+
354 // Get the set of variables to eliminate, which is C1\\B.
\n+
355 gttic(Full_root_factoring);
\n+
356 boost::shared_ptr<typename EliminationTraitsType::BayesTreeType> p_C1_B; {
\n+
357 KeyVector C1_minus_B; {
\n+
358 KeySet C1_minus_B_set(C1->conditional()->beginParents(), C1->conditional()->endParents());
\n+
359 for(const Key j: *B->conditional()) {
\n+
360 C1_minus_B_set.erase(j); }
\n+
361 C1_minus_B.assign(C1_minus_B_set.begin(), C1_minus_B_set.end());
\n+
362 }
\n+
363 // Factor into C1\\B | B.
\n+
364 sharedFactorGraph temp_remaining;
\n+
365 boost::tie(p_C1_B, temp_remaining) =
\n+
366 FactorGraphType(p_C1_Bred).eliminatePartialMultifrontal(Ordering(C1_minus_B), function);
\n+
367 }
\n+
368 boost::shared_ptr<typename EliminationTraitsType::BayesTreeType> p_C2_B; {
\n+
369 KeyVector C2_minus_B; {
\n+
370 KeySet C2_minus_B_set(C2->conditional()->beginParents(), C2->conditional()->endParents());
\n+
371 for(const Key j: *B->conditional()) {
\n+
372 C2_minus_B_set.erase(j); }
\n+
373 C2_minus_B.assign(C2_minus_B_set.begin(), C2_minus_B_set.end());
\n+
374 }
\n+
375 // Factor into C2\\B | B.
\n+
376 sharedFactorGraph temp_remaining;
\n+
377 boost::tie(p_C2_B, temp_remaining) =
\n+
378 FactorGraphType(p_C2_Bred).eliminatePartialMultifrontal(Ordering(C2_minus_B), function);
\n+
379 }
\n+
380 gttoc(Full_root_factoring);
\n+
381
\n+
382 gttic(Variable_joint);
\n+
383 p_BC1C2 += p_B;
\n+
384 p_BC1C2 += *p_C1_B;
\n+
385 p_BC1C2 += *p_C2_B;
\n+
386 if(C1 != B)
\n+
387 p_BC1C2 += C1->conditional();
\n+
388 if(C2 != B)
\n+
389 p_BC1C2 += C2->conditional();
\n+
390 gttoc(Variable_joint);
\n+
391 }
\n+
392 else
\n+
393 {
\n+
394 // The nodes have no common ancestor, they're in different trees, so they're joint is just the
\n+
395 // product of their marginals.
\n+
396 gttic(Disjoint_marginals);
\n+
397 p_BC1C2 += C1->marginal2(function);
\n+
398 p_BC1C2 += C2->marginal2(function);
\n+
399 gttoc(Disjoint_marginals);
\n+
400 }
\n+
401
\n+
402 // now, marginalize out everything that is not variable j1 or j2
\n+
403 return p_BC1C2.marginalMultifrontalBayesNet(Ordering{j1, j2}, function);
\n+
404 }
\n+
\n+
405
\n+
406 /* ************************************************************************* */
\n+
407 template<class CLIQUE>
\n+
\n+\n+
409 // Remove all nodes and clear the root pointer
\n+
410 nodes_.clear();
\n+
411 roots_.clear();
\n+
412 }
\n+
\n+
413
\n+
414 /* ************************************************************************* */
\n+
415 template<class CLIQUE>
\n+
\n+\n+
417 for(const sharedClique& root: roots_) {
\n+
418 root->deleteCachedShortcuts();
\n+
419 }
\n+
420 }
\n+
\n+
421
\n+
422 /* ************************************************************************* */
\n+
423 template<class CLIQUE>
\n+
\n+\n+
425 {
\n+
426 if (clique->isRoot()) {
\n+
427 typename Roots::iterator root = std::find(roots_.begin(), roots_.end(), clique);
\n+
428 if(root != roots_.end())
\n+
429 roots_.erase(root);
\n+
430 } else { // detach clique from parent
\n+
431 sharedClique parent = clique->parent_.lock();
\n+
432 typename Roots::iterator child = std::find(parent->children.begin(), parent->children.end(), clique);
\n+
433 assert(child != parent->children.end());
\n+
434 parent->children.erase(child);
\n+
435 }
\n+
436
\n+
437 // orphan my children
\n+
438 for(sharedClique child: clique->children)
\n+
439 child->parent_ = typename Clique::weak_ptr();
\n+
440
\n+
441 for(Key j: clique->conditional()->frontals()) {
\n+
442 nodes_.unsafe_erase(j);
\n+
443 }
\n+
444 }
\n+
\n+
\n+
445
\n+
446 /* ************************************************************************* */
\n+
447 template <class CLIQUE>
\n+
\n+
448 void BayesTree<CLIQUE>::removePath(sharedClique clique, BayesNetType* bn,
\n+
449 Cliques* orphans) {
\n+
450 // base case is nullptr, if so we do nothing and return empties above
\n+
451 if (clique) {
\n+
452 // remove the clique from orphans in case it has been added earlier
\n+
453 orphans->remove(clique);
\n+
454
\n+
455 // remove me
\n+
456 this->removeClique(clique);
\n+
457
\n+
458 // remove path above me
\n+
459 this->removePath(typename Clique::shared_ptr(clique->parent_.lock()), bn,
\n+
460 orphans);
\n+
461
\n+
462 // add children to list of orphans (splice also removed them from
\n+
463 // clique->children_)
\n+
464 orphans->insert(orphans->begin(), clique->children.begin(),
\n+
465 clique->children.end());
\n+
466 clique->children.clear();
\n+
467
\n+
468 bn->push_back(clique->conditional_);
\n+
469 }
\n+
470 }
\n+
\n+
471
\n+
472 /* *************************************************************************
\n+
473 */
\n+
474 template <class CLIQUE>
\n+
\n+
475 void BayesTree<CLIQUE>::removeTop(const KeyVector& keys, BayesNetType* bn,
\n+
476 Cliques* orphans) {
\n+
477 gttic(removetop);
\n+
478 // process each key of the new factor
\n+
479 for (const Key& j : keys) {
\n+
480 // get the clique
\n+
481 // TODO(frank): Nodes will be searched again in removeClique
\n+
482 typename Nodes::const_iterator node = nodes_.find(j);
\n+
483 if (node != nodes_.end()) {
\n+
484 // remove path from clique to root
\n+
485 this->removePath(node->second, bn, orphans);
\n+
486 }
\n+
487 }
\n+
488
\n+
489 // Delete cachedShortcuts for each orphan subtree
\n+
490 // TODO(frank): Consider Improving
\n+
491 for (sharedClique& orphan : *orphans) orphan->deleteCachedShortcuts();
\n+
492 }
\n+
\n+
493
\n+
494 /* ************************************************************************* */
\n+
495 template<class CLIQUE>
\n+
\n+\n+
497 const sharedClique& subtree)
\n+
498 {
\n+
499 // Result clique list
\n+
500 Cliques cliques;
\n+
501 cliques.push_back(subtree);
\n+
502
\n+
503 // Remove the first clique from its parents
\n+
504 if(!subtree->isRoot())
\n+
505 subtree->parent()->children.erase(std::find(
\n+
506 subtree->parent()->children.begin(), subtree->parent()->children.end(), subtree));
\n+
507 else
\n+
508 roots_.erase(std::find(roots_.begin(), roots_.end(), subtree));
\n+
509
\n+
510 // Add all subtree cliques and erase the children and parent of each
\n+
511 for(typename Cliques::iterator clique = cliques.begin(); clique != cliques.end(); ++clique)
\n+
512 {
\n+
513 // Add children
\n+
514 for(const sharedClique& child: (*clique)->children) {
\n+
515 cliques.push_back(child); }
\n+
516
\n+
517 // Delete cached shortcuts
\n+
518 (*clique)->deleteCachedShortcutsNonRecursive();
\n+
519
\n+
520 // Remove this node from the nodes index
\n+
521 for(Key j: (*clique)->conditional()->frontals()) {
\n+
522 nodes_.unsafe_erase(j); }
\n+
523
\n+
524 // Erase the parent and children pointers
\n+
525 (*clique)->parent_.reset();
\n+
526 (*clique)->children.clear();
\n+
527 }
\n+
528
\n+
529 return cliques;
\n+
530 }
\n+
\n+
531
\n+
532}
\n
\n
\n-
Factor Graph Base Class.
\n-
Bayes network.
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+\n+
Timing utilities.
\n+
Variable ordering for the elimination algorithm.
\n+
Bayes Tree is a tree of cliques of a Bayes Chain.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n-
void print(const std::string &s="BayesNet", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print out graph
Definition BayesNet-inst.h:32
\n-
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
Output to graphviz format, stream version.
Definition BayesNet-inst.h:46
\n-
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
output to file with graphviz format.
Definition BayesNet-inst.h:83
\n-
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n-
void drawVariable(Key key, const KeyFormatter &keyFormatter, const boost::optional< Vector2 > &position, std::ostream *os) const
Create a variable dot fragment.
Definition DotWriter.cpp:42
\n-
void digraphPreamble(std::ostream *os) const
Write out preamble for digraph, including size.
Definition DotWriter.cpp:36
\n-
boost::optional< Vector2 > variablePos(Key key) const
Return variable position or none.
Definition DotWriter.cpp:79
\n-
the error.
\n+
void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:77
\n+
void PrintForest(const FOREST &forest, std::string str, const KeyFormatter &keyFormatter)
Print a tree, prefixing each line with str, and formatting keys using keyFormatter.
Definition treeTraversal-inst.h:219
\n+
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n+\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
store all the sizes
Definition BayesTree.h:48
\n+
Bayes tree.
Definition BayesTree.h:67
\n+
Nodes nodes_
Map from indices to Clique.
Definition BayesTree.h:100
\n+
void removeClique(sharedClique clique)
remove a clique: warning, can result in a forest
Definition BayesTree-inst.h:424
\n+
sharedFactorGraph joint(Key j1, Key j2, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
return joint on two variables Limitation: can only calculate joint if cliques are disjoint or one of ...
Definition BayesTree-inst.h:293
\n+
void fillNodesIndex(const sharedClique &subtree)
Fill the nodes index for a subtree.
Definition BayesTree-inst.h:246
\n+
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Output to graphviz format, stream version.
Definition BayesTree-inst.h:64
\n+
void addFactorsToGraph(FactorGraph< FactorType > *graph) const
Add all cliques in this BayesTree to the specified factor graph.
Definition BayesTree-inst.h:168
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition BayesTree-inst.h:230
\n+
This & operator=(const This &other)
Assignment operator.
Definition BayesTree-inst.h:199
\n+
boost::shared_ptr< Clique > sharedClique
Shared pointer to a clique.
Definition BayesTree.h:74
\n+
BayesTree()
Create an empty Bayes Tree.
Definition BayesTree.h:109
\n+
void clear()
Remove all nodes.
Definition BayesTree-inst.h:408
\n+
void addClique(const sharedClique &clique, const sharedClique &parent_clique=sharedClique())
add a clique (top down)
Definition BayesTree-inst.h:142
\n+
sharedBayesNet jointBayesNet(Key j1, Key j2, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
return joint on two variables as a BayesNet Limitation: can only calculate joint if cliques are disjo...
Definition BayesTree-inst.h:302
\n+
Key findParentClique(const CONTAINER &parents) const
Find parent clique of a conditional.
Definition BayesTree-inst.h:238
\n+
size_t size() const
number of cliques
Definition BayesTree-inst.h:133
\n+
void deleteCachedShortcuts()
Clear all shortcut caches - use before timing on marginal calculation to avoid residual cache data.
Definition BayesTree-inst.h:416
\n+
void removePath(sharedClique clique, BayesNetType *bn, Cliques *orphans)
Remove path from clique to root and return that path as factors plus a list of orphaned subtree roots...
Definition BayesTree-inst.h:448
\n+
sharedConditional marginalFactor(Key j, const Eliminate &function=EliminationTraitsType::DefaultEliminate) const
Return marginal on any variable.
Definition BayesTree-inst.h:270
\n+
size_t numCachedSeparatorMarginals() const
Collect number of cliques with cached separator marginals.
Definition BayesTree-inst.h:55
\n+
BayesTreeCliqueData getCliqueData() const
Gather data on all cliques.
Definition BayesTree-inst.h:35
\n+
Cliques removeSubtree(const sharedClique &subtree)
Remove the requested subtree.
Definition BayesTree-inst.h:496
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition BayesTree-inst.h:212
\n+
void insertRoot(const sharedClique &subtree)
Insert a new subtree with known parent clique.
Definition BayesTree-inst.h:260
\n+
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
output to file with graphviz format.
Definition BayesTree-inst.h:85
\n+
void removeTop(const KeyVector &keys, BayesNetType *bn, Cliques *orphans)
Given a list of indices, turn "contaminated" part of the tree back into a factor graph.
Definition BayesTree-inst.h:475
\n+
Definition Ordering.h:34
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,179 +1,757 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BayesNet-inst.h\n+BayesTree-inst.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4* Atlanta, Georgia 30332-0415\n-5* All Rights Reserved\n-6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8* See LICENSE for the license information\n+8 * See LICENSE for the license information\n 9\n-10* -------------------------------------------------------------------------\n+10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n-23\n-24#include \n-25#include \n-26#include \n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n 27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-30/* *************************************************************************\n-*/\n-31template \n-_\b3_\b2void _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s,\n-33 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter) const {\n-34 std::cout << (s.empty() ? \"\" : s + \" \") << std::endl;\n-35 std::cout << \"size: \" << this->size() << std::endl;\n-36 for (size_t i = 0; i < this->size(); i++) {\n-37 const auto& conditional = this->at(i);\n-38 std::stringstream ss;\n-39 ss << \"conditional \" << i << \": \";\n-40 if (conditional) conditional->print(ss.str(), formatter);\n-41 }\n-42}\n-43\n-44/* *************************************************************************\n-*/\n-45template \n-_\b4_\b6void _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bd_\bo_\bt(std::ostream& os,\n-47 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n-48 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n-49 writer._\bd_\bi_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\ba_\bm_\bb_\bl_\be(&os);\n-50\n-51 // Create nodes for each variable in the graph\n-52 for (_\bK_\be_\by key : this->keys()) {\n-53 auto position = writer._\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs(key);\n-54 writer._\bd_\br_\ba_\bw_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be(key, keyFormatter, position, &os);\n-55 }\n-56 os << \"\\n\";\n-57\n-58 // Reverse order as typically Bayes nets stored in reverse topological sort.\n-59 for (auto conditional : boost::adaptors::reverse(*this)) {\n-60 auto frontals = conditional->frontals();\n-61 const _\bK_\be_\by me = frontals.front();\n-62 auto parents = conditional->parents();\n-63 for (const _\bK_\be_\by& p : parents) {\n-64 os << \" var\" << p << \"->var\" << me << \"\\n\";\n-65 }\n-66 }\n-67\n-68 os << \"}\";\n-69 std::flush(os);\n-_\b7_\b0}\n-71\n-72/* *************************************************************************\n-*/\n-73template \n-_\b7_\b4std::string _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n-75 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n-76 std::stringstream ss;\n-77 _\bd_\bo_\bt(ss, keyFormatter, writer);\n-78 return ss.str();\n-_\b7_\b9}\n-80\n-81/* *************************************************************************\n-*/\n-82template \n-_\b8_\b3void _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n-_\b8_\b4 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n-85 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n-86 std::ofstream of(filename.c_str());\n-87 _\bd_\bo_\bt(of, keyFormatter, writer);\n-_\b8_\b8 of.close();\n-89}\n-90\n-91/* *************************************************************************\n-*/\n-92template \n-93double _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>_\b:_\b:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n-94 double sum = 0.;\n-95 for (const auto& gc : *this) {\n-96 if (gc) sum += gc->logProbability(x);\n-97 }\n-98 return sum;\n-99}\n-100\n-101/* *************************************************************************\n-*/\n-102template \n-103double BayesNet::evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n-104 return exp(-logProbability(x));\n-105}\n-106\n-107/* *************************************************************************\n-*/\n-108\n-109} // namespace gtsam\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh\n-Factor Graph Base Class.\n-_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-Bayes network.\n+28#include \n+29#include \n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32\n+33 /* *************************************************************************\n+*/\n+34 template\n+_\b3_\b5 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba() const {\n+36 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba stats;\n+37 for (const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root : roots_) getCliqueData(root, &stats);\n+38 return stats;\n+39 }\n+40\n+41 /* *************************************************************************\n+*/\n+42 template \n+_\b4_\b3 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be clique,\n+44 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba* stats) const {\n+45 const auto conditional = clique->conditional();\n+46 stats->conditionalSizes.push_back(conditional->nrFrontals());\n+47 stats->separatorSizes.push_back(conditional->nrParents());\n+48 for (_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be c : clique->children) {\n+49 getCliqueData(c, stats);\n+50 }\n+51 }\n+52\n+53 /* *************************************************************************\n+*/\n+54 template\n+_\b5_\b5 size_t _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs() const {\n+56 size_t count = 0;\n+57 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root: roots_)\n+58 count += root->numCachedSeparatorMarginals();\n+59 return count;\n+60 }\n+61\n+62 /* *************************************************************************\n+*/\n+63 template \n+_\b6_\b4 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bd_\bo_\bt(std::ostream& os,\n+65 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const {\n+66 if (roots_.empty())\n+67 throw std::invalid_argument(\n+68 \"the root of Bayes tree has not been initialized!\");\n+69 os << \"digraph G{\\n\";\n+70 for (const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root : roots_) _\bd_\bo_\bt(os, root, keyFormatter);\n+71 os << \"}\";\n+72 std::flush(os);\n+73 }\n+74\n+75 /* *************************************************************************\n+*/\n+76 template \n+_\b7_\b7 std::string _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const {\n+78 std::stringstream ss;\n+79 _\bd_\bo_\bt(ss, keyFormatter);\n+80 return ss.str();\n+81 }\n+82\n+83 /* *************************************************************************\n+*/\n+84 template \n+_\b8_\b5 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n+86 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const {\n+87 std::ofstream of(filename.c_str());\n+88 _\bd_\bo_\bt(of, keyFormatter);\n+89 of.close();\n+90 }\n+91\n+92 /* *************************************************************************\n+*/\n+93 template \n+_\b9_\b4 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bd_\bo_\bt(std::ostream& s, _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be clique,\n+95 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n+96 int parentnum) const {\n+97 static int num = 0;\n+98 bool first = true;\n+99 std::stringstream out;\n+100 out << num;\n+101 std::string parent = out.str();\n+102 parent += \"[label=\\\"\";\n+103\n+104 for (_\bK_\be_\by key : clique->conditional_->frontals()) {\n+105 if (!first) parent += \", \";\n+106 first = false;\n+107 parent += keyFormatter(key);\n+108 }\n+109\n+110 if (clique->parent()) {\n+111 parent += \" : \";\n+_\b1_\b1_\b2 s << parentnum << \"->\" << num << \"\\n\";\n+113 }\n+114\n+115 first = true;\n+116 for (_\bK_\be_\by parentKey : clique->conditional_->parents()) {\n+_\b1_\b1_\b7 if (!first) parent += \", \";\n+118 first = false;\n+119 parent += keyFormatter(parentKey);\n+120 }\n+121 parent += \"\\\"];\\n\";\n+122 s << parent;\n+_\b1_\b2_\b3 parentnum = num;\n+124\n+125 for (_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be c : clique->children) {\n+126 num++;\n+_\b1_\b2_\b7 _\bd_\bo_\bt(s, c, keyFormatter, parentnum);\n+128 }\n+129 }\n+130\n+131 /\n+* ************************************************************************* */\n+132 template\n+_\b1_\b3_\b3 size_t _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bs_\bi_\bz_\be() const {\n+134 size_t size = 0;\n+_\b1_\b3_\b5 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& clique: roots_)\n+136 size += clique->treeSize();\n+137 return size;\n+138 }\n+139\n+140 /\n+* ************************************************************************* */\n+141 template\n+_\b1_\b4_\b2 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\ba_\bd_\bd_\bC_\bl_\bi_\bq_\bu_\be(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& clique, const\n+_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& parent_clique) {\n+143 for(_\bK_\be_\by j: clique->conditional()->frontals())\n+144 nodes_[j] = clique;\n+145 if (parent_clique != nullptr) {\n+146 clique->parent_ = parent_clique;\n+147 parent_clique->children.push_back(clique);\n+148 } else {\n+149 roots_.push_back(clique);\n+150 }\n+151 }\n+152\n+153 /\n+* ************************************************************************* */\n+154 namespace {\n+155 template \n+156 struct _pushCliqueFunctor {\n+157 _pushCliqueFunctor(_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>* graph_) : graph(graph_) {}\n+158 FactorGraph* graph;\n+159 int operator()(const boost::shared_ptr& clique, int dummy) {\n+160 graph->push_back(clique->conditional_);\n+_\b1_\b6_\b1 return 0;\n+162 }\n+163 };\n+_\b1_\b6_\b4 } // namespace\n+165\n+166 /\n+* ************************************************************************* */\n+167 template \n+_\b1_\b6_\b8 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh(\n+169 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be_\b>* graph) const {\n+170 // Traverse the BayesTree and add all conditionals to this graph\n+_\b1_\b7_\b1 int data = 0; // Unused\n+172 _pushCliqueFunctor functor(graph);\n+173 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(*this, data, functor);\n+174 }\n+175\n+176 /\n+* ************************************************************************* */\n+_\b1_\b7_\b7 template\n+_\b1_\b7_\b8 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(const _\bT_\bh_\bi_\bs& other) {\n+179 *this = other;\n+180 }\n+181\n+182 /\n+* ************************************************************************* */\n+_\b1_\b8_\b3 namespace {\n+184 template\n+185 boost::shared_ptr\n+186 BayesTreeCloneForestVisitorPre(const boost::shared_ptr& node, const\n+boost::shared_ptr& parentPointer)\n+187 {\n+188 // Clone the current node and add it to its cloned parent\n+_\b1_\b8_\b9 boost::shared_ptr clone = boost::make_shared(*node);\n+190 clone->children.clear();\n+191 clone->parent_ = parentPointer;\n+_\b1_\b9_\b2 parentPointer->children.push_back(clone);\n+193 return clone;\n+194 }\n+195 }\n+_\b1_\b9_\b6\n+197 /\n+* ************************************************************************* */\n+198 template\n+_\b1_\b9_\b9 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>& _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs& other) {\n+200 this->clear();\n+201 boost::shared_ptr rootContainer = boost::make_shared();\n+202 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(other, rootContainer,\n+BayesTreeCloneForestVisitorPre);\n+203 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root: rootContainer->children) {\n+204 root->parent_ = typename Clique::weak_ptr(); // Reset the parent since it's\n+set to the dummy clique\n+205 insertRoot(root);\n+206 }\n+207 return *this;\n+_\b2_\b0_\b8 }\n+209\n+210 /\n+* ************************************************************************* */\n+_\b2_\b1_\b1 template\n+_\b2_\b1_\b2 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n+keyFormatter) const {\n+213 std::cout << s << \": cliques: \" << size() << \", variables: \" << nodes_.size\n+() << std::endl;\n+_\b2_\b1_\b4 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt(*this, s, keyFormatter);\n+215 }\n+216\n+217 /\n+* ************************************************************************* */\n+218 // binary predicate to test equality of a pair for use in equals\n+219 template\n+_\b2_\b2_\b0 bool check_sharedCliques(\n+221 const std::pair<_\bK_\be_\by, typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be>& v1,\n+222 const std::pair<_\bK_\be_\by, typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be>& v2\n+223 ) {\n+224 return v1.first == v2.first &&\n+225 ((!v1.second && !v2.second) || (v1.second && v2.second && v1.second->equals\n+(*v2.second)));\n+_\b2_\b2_\b6 }\n+227\n+228 /\n+* ************************************************************************* */\n+229 template\n+_\b2_\b3_\b0 bool _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>& other, double tol)\n+const {\n+231 return size()==other._\bs_\bi_\bz_\be() &&\n+232 std::equal(nodes_.begin(), nodes_.end(), other._\bn_\bo_\bd_\be_\bs_\b_.begin(),\n+&check_sharedCliques);\n+233 }\n+234\n+_\b2_\b3_\b5 /\n+* ************************************************************************* */\n+236 template\n+237 template\n+_\b2_\b3_\b8 _\bK_\be_\by _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bf_\bi_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bC_\bl_\bi_\bq_\bu_\be(const CONTAINER& parents) const {\n+239 typename CONTAINER::const_iterator lowestOrderedParent = min_element\n+(parents.begin(), parents.end());\n+240 assert(lowestOrderedParent != parents.end());\n+_\b2_\b4_\b1 return *lowestOrderedParent;\n+242 }\n+243\n+244 /\n+* ************************************************************************* */\n+245 template\n+_\b2_\b4_\b6 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bf_\bi_\bl_\bl_\bN_\bo_\bd_\be_\bs_\bI_\bn_\bd_\be_\bx(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree) {\n+247 // Add each frontal variable of this root node\n+248 for(const _\bK_\be_\by& j: subtree->conditional()->frontals()) {\n+249 bool inserted = nodes_.insert(std::make_pair(j, subtree)).second;\n+_\b2_\b5_\b0 assert(inserted); (void)inserted;\n+251 }\n+252 // Fill index for each child\n+_\b2_\b5_\b3 typedef typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be;\n+254 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& child: subtree->children) {\n+255 fillNodesIndex(child); }\n+_\b2_\b5_\b6 }\n+257\n+258 /\n+* ************************************************************************* */\n+259 template\n+_\b2_\b6_\b0 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bR_\bo_\bo_\bt(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree) {\n+261 roots_.push_back(subtree); // Add to roots\n+262 fillNodesIndex(subtree); // Populate nodes index\n+263 }\n+264\n+265 /\n+* ************************************************************************* */\n+266 // First finds clique marginal then marginalizes that\n+267 /\n+* ************************************************************************* */\n+268 template\n+269 typename BayesTree::sharedConditional\n+_\b2_\b7_\b0 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j, const Eliminate& function) const\n+271 {\n+272 gttic(BayesTree_marginalFactor);\n+273\n+274 // get clique containing Key j\n+275 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be clique = this->clique(j);\n+276\n+277 // calculate or retrieve its marginal P(C) = P(F,S)\n+278 FactorGraphType cliqueMarginal = clique->marginal2(function);\n+279\n+280 // Now, marginalize out everything that is not variable j\n+281 BayesNetType marginalBN =\n+282 *cliqueMarginal.marginalMultifrontalBayesNet(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg{j}, function);\n+283\n+284 // The Bayes net should contain only one conditional for variable j, so\n+return it\n+285 return marginalBN.front();\n+286 }\n+287\n+288 /\n+* ************************************************************************* */\n+289 // Find two cliques, their joint, then marginalizes\n+290 /\n+* ************************************************************************* */\n+291 template\n+292 typename BayesTree::sharedFactorGraph\n+_\b2_\b9_\b3 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bj_\bo_\bi_\bn_\bt(_\bK_\be_\by j1, _\bK_\be_\by j2, const Eliminate& function) const\n+294 {\n+295 gttic(BayesTree_joint);\n+296 return boost::make_shared(*jointBayesNet(j1, j2,\n+function));\n+297 }\n+298\n+299 /\n+* ************************************************************************* */\n+300 template\n+301 typename BayesTree::sharedBayesNet\n+_\b3_\b0_\b2 _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bj_\bo_\bi_\bn_\bt_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(_\bK_\be_\by j1, _\bK_\be_\by j2, const Eliminate& function)\n+const\n+303 {\n+304 gttic(BayesTree_jointBayesNet);\n+305 // get clique C1 and C2\n+306 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be C1 = (*this)[j1], C2 = (*this)[j2];\n+307\n+308 gttic(Lowest_common_ancestor);\n+309 // Find lowest common ancestor clique\n+310 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be B; {\n+311 // Build two paths to the root\n+312 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be_\b> path1, path2; {\n+313 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be p = C1;\n+314 while(p) {\n+315 path1.push_front(p);\n+316 p = p->parent();\n+317 }\n+318 } {\n+319 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be p = C2;\n+320 while(p) {\n+321 path2.push_front(p);\n+322 p = p->parent();\n+323 }\n+324 }\n+325 // Find the path intersection\n+326 typename _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be_\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br p1 = path1.begin(), p2 =\n+path2.begin();\n+327 if(*p1 == *p2)\n+328 B = *p1;\n+329 while(p1 != path1.end() && p2 != path2.end() && *p1 == *p2) {\n+330 B = *p1;\n+331 ++p1;\n+332 ++p2;\n+333 }\n+334 }\n+335 gttoc(Lowest_common_ancestor);\n+336\n+337 // Build joint on all involved variables\n+338 FactorGraphType p_BC1C2;\n+339\n+340 if(B)\n+341 {\n+342 // Compute marginal on lowest common ancestor clique\n+343 gttic(LCA_marginal);\n+344 FactorGraphType p_B = B->marginal2(function);\n+345 gttoc(LCA_marginal);\n+346\n+347 // Compute shortcuts of the requested cliques given the lowest common\n+ancestor\n+348 gttic(Clique_shortcuts);\n+349 BayesNetType p_C1_Bred = C1->shortcut(B, function);\n+350 BayesNetType p_C2_Bred = C2->shortcut(B, function);\n+351 gttoc(Clique_shortcuts);\n+352\n+353 // Factor the shortcuts to be conditioned on the full root\n+354 // Get the set of variables to eliminate, which is C1\\B.\n+355 gttic(Full_root_factoring);\n+356 boost::shared_ptr p_C1_B; {\n+357 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br C1_minus_B; {\n+358 _\bK_\be_\by_\bS_\be_\bt C1_minus_B_set(C1->conditional()->beginParents(), C1->conditional()-\n+>endParents());\n+359 for(const _\bK_\be_\by j: *B->conditional()) {\n+360 C1_minus_B_set.erase(j); }\n+361 C1_minus_B.assign(C1_minus_B_set.begin(), C1_minus_B_set.end());\n+362 }\n+363 // Factor into C1\\B | B.\n+364 sharedFactorGraph temp_remaining;\n+365 boost::tie(p_C1_B, temp_remaining) =\n+366 FactorGraphType(p_C1_Bred).eliminatePartialMultifrontal(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+(C1_minus_B), function);\n+367 }\n+368 boost::shared_ptr p_C2_B; {\n+369 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br C2_minus_B; {\n+370 _\bK_\be_\by_\bS_\be_\bt C2_minus_B_set(C2->conditional()->beginParents(), C2->conditional()-\n+>endParents());\n+371 for(const _\bK_\be_\by j: *B->conditional()) {\n+372 C2_minus_B_set.erase(j); }\n+373 C2_minus_B.assign(C2_minus_B_set.begin(), C2_minus_B_set.end());\n+374 }\n+375 // Factor into C2\\B | B.\n+376 sharedFactorGraph temp_remaining;\n+377 boost::tie(p_C2_B, temp_remaining) =\n+378 FactorGraphType(p_C2_Bred).eliminatePartialMultifrontal(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+(C2_minus_B), function);\n+379 }\n+380 gttoc(Full_root_factoring);\n+381\n+382 gttic(Variable_joint);\n+383 p_BC1C2 += p_B;\n+384 p_BC1C2 += *p_C1_B;\n+385 p_BC1C2 += *p_C2_B;\n+386 if(C1 != B)\n+387 p_BC1C2 += C1->conditional();\n+388 if(C2 != B)\n+389 p_BC1C2 += C2->conditional();\n+390 gttoc(Variable_joint);\n+391 }\n+392 else\n+393 {\n+394 // The nodes have no common ancestor, they're in different trees, so\n+they're joint is just the\n+395 // product of their marginals.\n+396 gttic(Disjoint_marginals);\n+397 p_BC1C2 += C1->marginal2(function);\n+398 p_BC1C2 += C2->marginal2(function);\n+399 gttoc(Disjoint_marginals);\n+400 }\n+401\n+402 // now, marginalize out everything that is not variable j1 or j2\n+403 return p_BC1C2.marginalMultifrontalBayesNet(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg{j1, j2}, function);\n+404 }\n+405\n+406 /\n+* ************************************************************************* */\n+407 template\n+_\b4_\b0_\b8 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bc_\bl_\be_\ba_\br() {\n+409 // Remove all nodes and clear the root pointer\n+410 nodes_.clear();\n+411 roots_.clear();\n+412 }\n+413\n+414 /\n+* ************************************************************************* */\n+415 template\n+_\b4_\b1_\b6 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs() {\n+417 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root: roots_) {\n+418 root->deleteCachedShortcuts();\n+419 }\n+420 }\n+421\n+422 /\n+* ************************************************************************* */\n+423 template\n+_\b4_\b2_\b4 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bC_\bl_\bi_\bq_\bu_\be(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be clique)\n+425 {\n+426 if (clique->isRoot()) {\n+427 typename Roots::iterator root = std::find(roots_.begin(), roots_.end(),\n+clique);\n+428 if(root != roots_.end())\n+429 roots_.erase(root);\n+430 } else { // detach clique from parent\n+431 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be parent = clique->parent_.lock();\n+432 typename Roots::iterator child = std::find(parent->children.begin(),\n+parent->children.end(), clique);\n+433 assert(child != parent->children.end());\n+434 parent->children.erase(child);\n+435 }\n+436\n+437 // orphan my children\n+438 for(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be child: clique->children)\n+439 child->parent_ = typename Clique::weak_ptr();\n+440\n+441 for(_\bK_\be_\by j: clique->conditional()->frontals()) {\n+442 nodes_.unsafe_erase(j);\n+443 }\n+444 }\n+445\n+446 /\n+* ************************************************************************* */\n+447 template \n+_\b4_\b4_\b8 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bP_\ba_\bt_\bh(_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be clique, BayesNetType* bn,\n+449 _\bC_\bl_\bi_\bq_\bu_\be_\bs* orphans) {\n+450 // base case is nullptr, if so we do nothing and return empties above\n+451 if (clique) {\n+452 // remove the clique from orphans in case it has been added earlier\n+453 orphans->remove(clique);\n+454\n+455 // remove me\n+456 this->removeClique(clique);\n+457\n+458 // remove path above me\n+459 this->removePath(typename Clique::shared_ptr(clique->parent_.lock()), bn,\n+460 orphans);\n+461\n+462 // add children to list of orphans (splice also removed them from\n+463 // clique->children_)\n+464 orphans->insert(orphans->begin(), clique->children.begin(),\n+465 clique->children.end());\n+466 clique->children.clear();\n+467\n+468 bn->push_back(clique->conditional_);\n+469 }\n+470 }\n+471\n+472 /\n+* *************************************************************************\n+473 */\n+474 template \n+_\b4_\b7_\b5 void _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bT_\bo_\bp(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys, BayesNetType* bn,\n+476 _\bC_\bl_\bi_\bq_\bu_\be_\bs* orphans) {\n+477 gttic(removetop);\n+478 // process each key of the new factor\n+479 for (const _\bK_\be_\by& j : keys) {\n+480 // get the clique\n+481 // TODO(frank): Nodes will be searched again in removeClique\n+482 typename Nodes::const_iterator node = nodes_.find(j);\n+483 if (node != nodes_.end()) {\n+484 // remove path from clique to root\n+485 this->removePath(node->second, bn, orphans);\n+486 }\n+487 }\n+488\n+489 // Delete cachedShortcuts for each orphan subtree\n+490 // TODO(frank): Consider Improving\n+491 for (_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& orphan : *orphans) orphan->deleteCachedShortcuts();\n+492 }\n+493\n+494 /\n+* ************************************************************************* */\n+495 template\n+_\b4_\b9_\b6 typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be_\bs _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bS_\bu_\bb_\bt_\br_\be_\be(\n+497 const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& subtree)\n+498 {\n+499 // Result clique list\n+500 _\bC_\bl_\bi_\bq_\bu_\be_\bs cliques;\n+501 cliques.push_back(subtree);\n+502\n+503 // Remove the first clique from its parents\n+504 if(!subtree->isRoot())\n+505 subtree->parent()->children.erase(std::find(\n+506 subtree->parent()->children.begin(), subtree->parent()->children.end(),\n+subtree));\n+507 else\n+508 roots_.erase(std::find(roots_.begin(), roots_.end(), subtree));\n+509\n+510 // Add all subtree cliques and erase the children and parent of each\n+511 for(typename Cliques::iterator clique = cliques.begin(); clique !=\n+cliques.end(); ++clique)\n+512 {\n+513 // Add children\n+514 for(const _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& child: (*clique)->children) {\n+515 cliques.push_back(child); }\n+516\n+517 // Delete cached shortcuts\n+518 (*clique)->deleteCachedShortcutsNonRecursive();\n+519\n+520 // Remove this node from the nodes index\n+521 for(_\bK_\be_\by j: (*clique)->conditional()->frontals()) {\n+522 nodes_.unsafe_erase(j); }\n+523\n+524 // Erase the parent and children pointers\n+525 (*clique)->parent_.reset();\n+526 (*clique)->children.clear();\n+527 }\n+528\n+529 return cliques;\n+530 }\n+531\n+532}\n+_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Bayes Tree is a tree of cliques of a Bayes Chain.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n double dot(const V1 &a, const V2 &b)\n Dot product.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-A BayesNet is a tree of conditionals, stored in elimination order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"BayesNet\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const override\n-print out graph\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bd_\bo_\bt\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt\n+void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre,\n+VISITOR_POST &visitorPost)\n+Traverse a forest depth-first with pre-order and post-order visits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt\n+void PrintForest(const FOREST &forest, std::string str, const KeyFormatter\n+&keyFormatter)\n+Print a tree, prefixing each line with str, and formatting keys using\n+keyFormatter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList is a thin wrapper around std::list that uses the boost\n+fast_pool_allocator instead of the de...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba\n+store all the sizes\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bn_\bo_\bd_\be_\bs_\b_\n+Nodes nodes_\n+Map from indices to Clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bC_\bl_\bi_\bq_\bu_\be\n+void removeClique(sharedClique clique)\n+remove a clique: warning, can result in a forest\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:424\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bj_\bo_\bi_\bn_\bt\n+sharedFactorGraph joint(Key j1, Key j2, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate) const\n+return joint on two variables Limitation: can only calculate joint if cliques\n+are disjoint or one of ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:293\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bf_\bi_\bl_\bl_\bN_\bo_\bd_\be_\bs_\bI_\bn_\bd_\be_\bx\n+void fillNodesIndex(const sharedClique &subtree)\n+Fill the nodes index for a subtree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:246\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bd_\bo_\bt\n void dot(std::ostream &os, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n+&keyFormatter=DefaultKeyFormatter) const\n Output to graphviz format, stream version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh\n+void addFactorsToGraph(FactorGraph< FactorType > *graph) const\n+Add all cliques in this BayesTree to the specified factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:168\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:230\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+This & operator=(const This &other)\n+Assignment operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:199\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be\n+boost::shared_ptr< Clique > sharedClique\n+Shared pointer to a clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+BayesTree()\n+Create an empty Bayes Tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bc_\bl_\be_\ba_\br\n+void clear()\n+Remove all nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:408\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bd_\bd_\bC_\bl_\bi_\bq_\bu_\be\n+void addClique(const sharedClique &clique, const sharedClique\n+&parent_clique=sharedClique())\n+add a clique (top down)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:142\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bj_\bo_\bi_\bn_\bt_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+sharedBayesNet jointBayesNet(Key j1, Key j2, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate) const\n+return joint on two variables as a BayesNet Limitation: can only calculate\n+joint if cliques are disjo...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:302\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bf_\bi_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bC_\bl_\bi_\bq_\bu_\be\n+Key findParentClique(const CONTAINER &parents) const\n+Find parent clique of a conditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:238\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+number of cliques\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:133\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bd_\be_\bl_\be_\bt_\be_\bC_\ba_\bc_\bh_\be_\bd_\bS_\bh_\bo_\br_\bt_\bc_\bu_\bt_\bs\n+void deleteCachedShortcuts()\n+Clear all shortcut caches - use before timing on marginal calculation to avoid\n+residual cache data.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:416\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bP_\ba_\bt_\bh\n+void removePath(sharedClique clique, BayesNetType *bn, Cliques *orphans)\n+Remove path from clique to root and return that path as factors plus a list of\n+orphaned subtree roots...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:448\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+sharedConditional marginalFactor(Key j, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate) const\n+Return marginal on any variable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:270\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bn_\bu_\bm_\bC_\ba_\bc_\bh_\be_\bd_\bS_\be_\bp_\ba_\br_\ba_\bt_\bo_\br_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n+size_t numCachedSeparatorMarginals() const\n+Collect number of cliques with cached separator marginals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bg_\be_\bt_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba\n+BayesTreeCliqueData getCliqueData() const\n+Gather data on all cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bS_\bu_\bb_\bt_\br_\be_\be\n+Cliques removeSubtree(const sharedClique &subtree)\n+Remove the requested subtree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:496\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bR_\bo_\bo_\bt\n+void insertRoot(const sharedClique &subtree)\n+Insert a new subtree with known parent clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n void saveGraph(const std::string &filename, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n+&keyFormatter=DefaultKeyFormatter) const\n output to file with graphviz format.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n-DotWriter is a helper class for writing graphviz .dot files.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bd_\br_\ba_\bw_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be\n-void drawVariable(Key key, const KeyFormatter &keyFormatter, const boost::\n-optional< Vector2 > &position, std::ostream *os) const\n-Create a variable dot fragment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bd_\bi_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\ba_\bm_\bb_\bl_\be\n-void digraphPreamble(std::ostream *os) const\n-Write out preamble for digraph, including size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs\n-boost::optional< Vector2 > variablePos(Key key) const\n-Return variable position or none.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:79\n-_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-the error.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bT_\bo_\bp\n+void removeTop(const KeyVector &keys, BayesNetType *bn, Cliques *orphans)\n+Given a list of indices, turn \"contaminated\" part of the tree back into a\n+factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:475\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * B\bBa\bay\bye\bes\bsN\bNe\bet\bt-\b-i\bin\bns\bst\bt.\b.h\bh\n+ * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00701_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00701_source.html", "unified_diff": "@@ -114,18 +114,18 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
21#pragma once
\n
22
\n-\n-\n-\n-\n+\n+\n+\n+\n
27
\n
28namespace gtsam {
\n
29
\n
30template<class BAYESTREE, class GRAPH, class ETREE_NODE>
\n
\n \n \n@@ -255,18 +255,18 @@\n
152 Base::remainingFactors_ = eliminationTree.remainingFactors();
\n
153}
\n
\n
\n
154
\n
155} // namespace gtsam
\n
\n-
Collects factorgraph fragments defined on variable clusters, arranged in a tree.
\n-
The junction tree.
\n-\n-\n+
Collects factorgraph fragments defined on variable clusters, arranged in a tree.
\n+
The junction tree.
\n+\n+\n
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:77
\n
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n
A Cluster is just a collection of factors.
Definition ClusterTree.h:36
\n
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n
const FastVector< sharedFactor > & remainingFactors() const
Return the remaining factors that are not pulled into elimination.
Definition EliminationTree.h:154
\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -160,16 +160,16 @@\n 154\n 155} // namespace gtsam\n _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n Collects factorgraph fragments defined on variable clusters, arranged in a\n tree.\n _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n The junction tree.\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n FastVector\n FastVector is a type alias to a std::vector with a custom memory allocator.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00704.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00704.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/VectorValues.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Sampler.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,47 +94,37 @@\n \n \n \n \n \n
\n \n-
VectorValues.h File Reference
\n+
Sampler.cpp File Reference
\n
\n
\n \n-

Factor Graph Values. \n+

sampling from a diagonal NoiseModel \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::VectorValues
 VectorValues represents a collection of vector-valued variables associated each with a unique integer index. More...
 
struct  gtsam::traits< VectorValues >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Factor Graph Values.

\n-
Author
Richard Roberts
\n+

sampling from a diagonal NoiseModel

\n+
Author
Frank Dellaert
\n+
\n+Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-VectorValues.h File Reference\n-Factor Graph _\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-\u00a0 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs represents a collection of vector-valued variables\n- associated each with a unique integer index. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Sampler.cpp File Reference\n+sampling from a diagonal NoiseModel _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor Graph _\bV_\ba_\bl_\bu_\be_\bs.\n+sampling from a diagonal NoiseModel\n Author\n- Richard Roberts\n+ Frank Dellaert\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+ * _\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00707.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00707.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianConditional.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Sampler.h File Reference\n \n \n \n \n \n \n \n@@ -94,35 +94,46 @@\n \n \n \n \n \n
\n \n-
GaussianConditional.cpp File Reference
\n+
Sampler.h File Reference
\n
\n
\n \n-

Conditional Gaussian Base class. \n+

sampling from a NoiseModel \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Sampler
 Sampling structure that keeps internal random number generators for diagonal distributions specified by NoiseModel. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Conditional Gaussian Base class.

\n-
Author
Christian Potthast, Frank Dellaert
\n+

sampling from a NoiseModel

\n+
Author
Frank Dellaert
\n+
\n+Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianConditional.cpp File Reference\n-Conditional Gaussian Base class. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Sampler.h File Reference\n+sampling from a NoiseModel _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br\n+\u00a0 Sampling structure that keeps internal random number generators for\n+ diagonal distributions specified by NoiseModel. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Conditional Gaussian Base class.\n+sampling from a NoiseModel\n Author\n- Christian Potthast, Frank Dellaert\n+ Frank Dellaert\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bc_\bp_\bp\n+ * _\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00710.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00710.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/RegularHessianFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphSolver.h File Reference\n \n \n \n \n \n \n \n@@ -96,44 +96,47 @@\n \n \n \n
\n \n-
RegularHessianFactor.h File Reference
\n+
SubgraphSolver.h File Reference
\n
\n
\n \n-

HessianFactor class with constant sized blocks. \n+

Subgraph Solver from IROS 2010. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n \n-\n+\n+\n \n

\n Classes

class  gtsam::RegularHessianFactor< D >
struct  gtsam::SubgraphSolverParameters
 
struct  gtsam::traits< RegularHessianFactor< D > >
class  gtsam::SubgraphSolver
 This class implements the linear SPCG solver presented in Dellaert et al in IROS'10. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

HessianFactor class with constant sized blocks.

\n-
Author
Sungtae An
\n-
Date
March 2014
\n+

Subgraph Solver from IROS 2010.

\n+
Date
2010
\n+
Author
Frank Dellaert
\n+
\n+Yong Dian Jian
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-RegularHessianFactor.h File Reference\n-HessianFactor class with constant sized blocks. _\bM_\bo_\br_\be_\b._\b._\b.\n+SubgraphSolver.h File Reference\n+Subgraph Solver from IROS 2010. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bD_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bD_\b _\b>_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br\n+\u00a0 This class implements the linear SPCG solver presented in Dellaert et\n+ al in IROS'10. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-HessianFactor class with constant sized blocks.\n- Author\n- Sungtae An\n+Subgraph Solver from IROS 2010.\n Date\n- March 2014\n+ 2010\n+ Author\n+ Frank Dellaert\n+ Yong Dian Jian\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00710.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00710.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00710 = [\n- [\"gtsam::RegularHessianFactor< D >\", \"a04008.html\", \"a04008\"],\n- [\"gtsam::traits< RegularHessianFactor< D > >\", \"a04012.html\", null]\n+ [\"gtsam::SubgraphSolverParameters\", \"a04056.html\", null],\n+ [\"gtsam::SubgraphSolver\", \"a04060.html\", \"a04060\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00710_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00710_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/RegularHessianFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphSolver.h Source File\n \n \n \n \n \n \n \n@@ -98,274 +98,114 @@\n
No Matches
\n \n \n \n \n \n
\n-
RegularHessianFactor.h
\n+
SubgraphSolver.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-
23#include <vector>
\n+
20#pragma once
\n+
21
\n+\n+\n
24
\n-
25namespace gtsam {
\n-
26
\n-
27template<size_t D>
\n-
\n-\n+
25#include <map>
\n+
26#include <utility> // pair
\n+
27
\n+
28namespace gtsam {
\n
29
\n-
30public:
\n-
31
\n-
32 typedef Eigen::Matrix<double, D, 1> VectorD;
\n-
33 typedef Eigen::Matrix<double, D, D> MatrixD;
\n+
30// Forward declarations
\n+
31class GaussianFactorGraph;
\n+
32class GaussianBayesNet;
\n+
33class SubgraphPreconditioner;
\n
34
\n-
\n-\n-
40 const std::vector<Matrix>& Gs, const std::vector<Vector>& gs, double f) :
\n-
41 HessianFactor(js, Gs, gs, f) {
\n-
42 checkInvariants();
\n+
\n+
35struct GTSAM_EXPORT SubgraphSolverParameters
\n+\n+
37 SubgraphBuilderParameters builderParams;
\n+\n+
39 : builderParams(p) {}
\n+
40 void print() const { Base::print(); }
\n+
41 void print(std::ostream &os) const override {
\n+
42 Base::print(os);
\n
43 }
\n+
44};
\n
\n-
44
\n-
\n-
49 RegularHessianFactor(Key j1, Key j2, const MatrixD& G11, const MatrixD& G12,
\n-
50 const VectorD& g1, const MatrixD& G22, const VectorD& g2, double f) :
\n-
51 HessianFactor(j1, j2, G11, G12, g1, G22, g2, f) {
\n-
52 }
\n-
\n-
53
\n-
\n-\n-
59 const MatrixD& G11, const MatrixD& G12, const MatrixD& G13, const VectorD& g1,
\n-
60 const MatrixD& G22, const MatrixD& G23, const VectorD& g2,
\n-
61 const MatrixD& G33, const VectorD& g3, double f) :
\n-
62 HessianFactor(j1, j2, j3, G11, G12, G13, g1, G22, G23, g2, G33, g3, f) {
\n-
63 }
\n-
\n-
64
\n-
67 template<typename KEYS>
\n-
\n-\n-\n-\n-
71 checkInvariants();
\n-
72 }
\n-
\n-
73
\n-\n-
77
\n-
\n-\n-
80 const Scatter& scatter)
\n-
81 : HessianFactor(factors, scatter) {
\n-
82 checkInvariants();
\n-
83 }
\n-
\n-
84
\n-
\n-\n-
87 : HessianFactor(factors) {
\n-
88 checkInvariants();
\n-
89 }
\n-
\n-
90
\n-
91private:
\n-
92
\n-
94 void checkInvariants() {
\n-
95 if (info_.cols() != 1 + (info_.nBlocks()-1) * (DenseIndex)D)
\n-
96 throw std::invalid_argument(
\n-
97 "RegularHessianFactor constructor was given non-regular factors");
\n-
98 }
\n-
99
\n-
100 // Use Eigen magic to access raw memory
\n-
101 typedef Eigen::Map<VectorD> DMap;
\n-
102 typedef Eigen::Map<const VectorD> ConstDMap;
\n-
103
\n-
104 // Scratch space for multiplyHessianAdd
\n-
105 // According to link below this is thread-safe.
\n-
106 // http://stackoverflow.com/questions/11160964/multiple-copies-of-the-same-object-c-thread-safe
\n-
107 mutable std::vector<VectorD> y_;
\n-
108
\n-
109public:
\n+
45
\n+
\n+
76class GTSAM_EXPORT SubgraphSolver : public IterativeSolver {
\n+
77 public:
\n+\n+
79
\n+
80 protected:
\n+
81 Parameters parameters_;
\n+
82 boost::shared_ptr<SubgraphPreconditioner> pc_;
\n+
83
\n+
84 public:
\n+
87
\n+
93 SubgraphSolver(const GaussianFactorGraph &A, const Parameters &parameters,
\n+
94 const Ordering &ordering);
\n+
95
\n+\n+
103 const Parameters &parameters, const Ordering &ordering);
\n+\n+
109 const Parameters &parameters);
\n
110
\n-
\n-
112 void multiplyHessianAdd(double alpha, const VectorValues& x,
\n-
113 VectorValues& y) const override {
\n-\n-
115 }
\n-
\n-
116
\n-
\n-
118 void multiplyHessianAdd(double alpha, const double* x,
\n-
119 double* yvalues) const {
\n-
120 // Create a vector of temporary y_ values, corresponding to rows i
\n-
121 y_.resize(size());
\n-
122 for(VectorD & yi: y_)
\n-
123 yi.setZero();
\n-
124
\n-
125 // Accessing the VectorValues one by one is expensive
\n-
126 // So we will loop over columns to access x only once per column
\n-
127 // And fill the above temporary y_ values, to be added into yvalues after
\n-
128 VectorD xj(D);
\n-
129 for (DenseIndex j = 0; j < (DenseIndex) size(); ++j) {
\n-
130 Key key = keys_[j];
\n-
131 const double* xj = x + key * D;
\n-
132 DenseIndex i = 0;
\n-
133 for (; i < j; ++i)
\n-
134 y_[i] += info_.aboveDiagonalBlock(i, j) * ConstDMap(xj);
\n-
135 // blocks on the diagonal are only half
\n-
136 y_[i] += info_.diagonalBlock(j) * ConstDMap(xj);
\n-
137 // for below diagonal, we take transpose block from upper triangular part
\n-
138 for (i = j + 1; i < (DenseIndex) size(); ++i)
\n-
139 y_[i] += info_.aboveDiagonalBlock(j, i).transpose() * ConstDMap(xj);
\n-
140 }
\n-
141
\n-
142 // copy to yvalues
\n-
143 for (DenseIndex i = 0; i < (DenseIndex) size(); ++i) {
\n-
144 Key key = keys_[i];
\n-
145 DMap(yvalues + key * D) += alpha * y_[i];
\n-
146 }
\n-
147 }
\n-
\n-
148
\n-
\n-
150 void multiplyHessianAdd(double alpha, const double* x, double* yvalues,
\n-
151 std::vector<size_t> offsets) const {
\n-
152
\n-
153 // Create a vector of temporary y_ values, corresponding to rows i
\n-
154 y_.resize(size());
\n-
155 for(VectorD & yi: y_)
\n-
156 yi.setZero();
\n-
157
\n-
158 // Accessing the VectorValues one by one is expensive
\n-
159 // So we will loop over columns to access x only once per column
\n-
160 // And fill the above temporary y_ values, to be added into yvalues after
\n-
161 for (DenseIndex j = 0; j < (DenseIndex) size(); ++j) {
\n-
162 DenseIndex i = 0;
\n-
163 for (; i < j; ++i)
\n-
164 y_[i] += info_.aboveDiagonalBlock(i, j)
\n-
165 * ConstDMap(x + offsets[keys_[j]],
\n-
166 offsets[keys_[j] + 1] - offsets[keys_[j]]);
\n-
167 // blocks on the diagonal are only half
\n-
168 y_[i] += info_.diagonalBlock(j)
\n-
169 * ConstDMap(x + offsets[keys_[j]],
\n-
170 offsets[keys_[j] + 1] - offsets[keys_[j]]);
\n-
171 // for below diagonal, we take transpose block from upper triangular part
\n-
172 for (i = j + 1; i < (DenseIndex) size(); ++i)
\n-
173 y_[i] += info_.aboveDiagonalBlock(j, i).transpose()
\n-
174 * ConstDMap(x + offsets[keys_[j]],
\n-
175 offsets[keys_[j] + 1] - offsets[keys_[j]]);
\n-
176 }
\n-
177
\n-
178 // copy to yvalues
\n-
179 for (DenseIndex i = 0; i < (DenseIndex) size(); ++i)
\n-
180 DMap(yvalues + offsets[keys_[i]],
\n-
181 offsets[keys_[i] + 1] - offsets[keys_[i]]) += alpha * y_[i];
\n-
182 }
\n-
\n-
183
\n-
\n-
185 void hessianDiagonal(double* d) const override {
\n-
186
\n-
187 // Loop over all variables in the factor
\n-
188 for (DenseIndex pos = 0; pos < (DenseIndex) size(); ++pos) {
\n-
189 Key j = keys_[pos];
\n-
190 // Get the diagonal block, and insert its diagonal
\n-
191 DMap(d + D * j) += info_.diagonal(pos);
\n-
192 }
\n-
193 }
\n-
\n-
194
\n-
\n-
196 void gradientAtZero(double* d) const override {
\n-
197
\n-
198 // Loop over all variables in the factor
\n-
199 for (DenseIndex pos = 0; pos < (DenseIndex) size(); ++pos) {
\n-
200 Key j = keys_[pos];
\n-
201 // Get the diagonal block, and insert its diagonal
\n-
202 DMap(d + D * j) -= info_.aboveDiagonalBlock(pos, size());;
\n-
203 }
\n-
204 }
\n-
\n-
205
\n-
206 /* ************************************************************************* */
\n-
207
\n-
208};
\n-
\n-
209// end class RegularHessianFactor
\n-
210
\n-
211// traits
\n-
\n-
212template<size_t D> struct traits<RegularHessianFactor<D> > : public Testable<
\n-
213 RegularHessianFactor<D> > {
\n-
214};
\n-
\n-
215
\n-
216}
\n-
217
\n-
JacobianFactor class with fixed sized blcoks.
\n-
Contains the HessianFactor class, a general quadratic factor.
\n+
112 ~SubgraphSolver() override {}
\n+
113
\n+
117
\n+
119 VectorValues optimize() const;
\n+
120
\n+\n+
123 const KeyInfo &keyInfo,
\n+
124 const std::map<Key, Vector> &lambda,
\n+
125 const VectorValues &initial) override;
\n+
126
\n+
130
\n+
132 std::pair<GaussianFactorGraph, GaussianFactorGraph> splitGraph(
\n+
133 const GaussianFactorGraph &gfg);
\n+
134
\n+
136};
\n+
\n+
137
\n+
138} // namespace gtsam
\n+\n+
Implementation of Conjugate Gradient solver for a linear system.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
Vector diagonal(DenseIndex J) const
Get the diagonal of the J'th diagonal block.
Definition SymmetricBlockMatrix.h:145
\n-
DenseIndex cols() const
Column size.
Definition SymmetricBlockMatrix.h:117
\n-
constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const
Get block above the diagonal (I, J).
Definition SymmetricBlockMatrix.h:150
\n-
Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)
Return the J'th diagonal block as a self adjoint view.
Definition SymmetricBlockMatrix.h:135
\n-
DenseIndex nBlocks() const
Block count.
Definition SymmetricBlockMatrix.h:120
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
size_t size() const
Definition Factor.h:157
\n+
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Definition Ordering.h:34
\n+
parameters for the conjugate gradient method
Definition ConjugateGradientSolver.h:29
\n+
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
\n
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
A Gaussian factor using the canonical parameters (information form)
Definition HessianFactor.h:101
\n-
Matrix augmentedInformation() const override
Return the augmented information matrix represented by this GaussianFactor.
Definition HessianFactor.cpp:282
\n-
SymmetricBlockMatrix info_
The full augmented information matrix, s.t. the quadratic error is 0.5*[x -1]'H[x -1].
Definition HessianFactor.h:104
\n-
void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const override
y += alpha * A'*A*x
Definition HessianFactor.cpp:391
\n-
Definition RegularHessianFactor.h:28
\n-
RegularHessianFactor(const GaussianFactorGraph &factors)
Construct from a GaussianFactorGraph.
Definition RegularHessianFactor.h:86
\n-
void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const override
y += alpha * A'*A*x
Definition RegularHessianFactor.h:112
\n-
RegularHessianFactor(Key j1, Key j2, Key j3, const MatrixD &G11, const MatrixD &G12, const MatrixD &G13, const VectorD &g1, const MatrixD &G22, const MatrixD &G23, const VectorD &g2, const MatrixD &G33, const VectorD &g3, double f)
Construct a ternary factor.
Definition RegularHessianFactor.h:58
\n-
void multiplyHessianAdd(double alpha, const double *x, double *yvalues, std::vector< size_t > offsets) const
Raw memory version, with offsets TODO document reasoning.
Definition RegularHessianFactor.h:150
\n-
void multiplyHessianAdd(double alpha, const double *x, double *yvalues) const
y += alpha * A'*A*x
Definition RegularHessianFactor.h:118
\n-
void hessianDiagonal(double *d) const override
Return the diagonal of the Hessian for this factor (raw memory version)
Definition RegularHessianFactor.h:185
\n-
RegularHessianFactor(const KEYS &keys, const SymmetricBlockMatrix &augmentedInformation)
Constructor with an arbitrary number of keys and with the augmented information matrix specified as a...
Definition RegularHessianFactor.h:68
\n-
void gradientAtZero(double *d) const override
Add gradient at zero to d TODO: is it really the goal to add ??
Definition RegularHessianFactor.h:196
\n-
RegularHessianFactor(const GaussianFactorGraph &factors, const Scatter &scatter)
Construct from a GaussianFactorGraph.
Definition RegularHessianFactor.h:79
\n-
RegularHessianFactor(const KeyVector &js, const std::vector< Matrix > &Gs, const std::vector< Vector > &gs, double f)
Construct an n-way factor.
Definition RegularHessianFactor.h:39
\n-
RegularHessianFactor(Key j1, Key j2, const MatrixD &G11, const MatrixD &G12, const VectorD &g1, const MatrixD &G22, const VectorD &g2, double f)
Construct a binary factor.
Definition RegularHessianFactor.h:49
\n-
RegularHessianFactor(const RegularJacobianFactor< D > &jf)
Construct from RegularJacobianFactor.
Definition RegularHessianFactor.h:75
\n-
JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator.
Definition RegularJacobianFactor.h:32
\n-
Scatter is an intermediate data structure used when building a HessianFactor incrementally,...
Definition Scatter.h:49
\n+
Base class for Iterative Solvers like SubgraphSolver.
Definition IterativeSolver.h:86
\n+
Handy data structure for iterative solvers.
Definition IterativeSolver.h:126
\n+
Definition SubgraphBuilder.h:96
\n+
Definition SubgraphSolver.h:36
\n+
This class implements the linear SPCG solver presented in Dellaert et al in IROS'10.
Definition SubgraphSolver.h:76
\n+
~SubgraphSolver() override
Destructor.
Definition SubgraphSolver.h:112
\n+
boost::shared_ptr< SubgraphPreconditioner > pc_
preconditioner object
Definition SubgraphSolver.h:82
\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,356 +1,139 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-RegularHessianFactor.h\n+SubgraphSolver.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include \n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh>\n 24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-27template\n-_\b2_\b8class _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n+25#include \n+26#include // pair\n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n 29\n-30public:\n-31\n-32 typedef Eigen::Matrix VectorD;\n-33 typedef Eigen::Matrix MatrixD;\n+30// Forward declarations\n+31class GaussianFactorGraph;\n+32class GaussianBayesNet;\n+33class SubgraphPreconditioner;\n 34\n-_\b3_\b9 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& js,\n-40 const std::vector& Gs, const std::vector& gs, double f) :\n-41 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(js, Gs, gs, f) {\n-42 checkInvariants();\n+_\b3_\b5struct GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+36 : public _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n+37 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs builderParams;\n+38 explicit _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs(const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p =\n+_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs())\n+39 : builderParams(p) {}\n+40 void _\bp_\br_\bi_\bn_\bt() const { Base::print(); }\n+41 void _\bp_\br_\bi_\bn_\bt(std::ostream &os) const override {\n+42 Base::print(os);\n 43 }\n-44\n-_\b4_\b9 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, const MatrixD& G11, const MatrixD& G12,\n-50 const VectorD& g1, const MatrixD& G22, const VectorD& g2, double f) :\n-51 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(j1, j2, G11, G12, g1, G22, g2, f) {\n-52 }\n-53\n-_\b5_\b8 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, _\bK_\be_\by j3,\n-59 const MatrixD& G11, const MatrixD& G12, const MatrixD& G13, const VectorD&\n-g1,\n-60 const MatrixD& G22, const MatrixD& G23, const VectorD& g2,\n-61 const MatrixD& G33, const VectorD& g3, double f) :\n-62 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(j1, j2, j3, G11, G12, G13, g1, G22, G23, g2, G33, g3, f) {\n-63 }\n-64\n-67 template\n-_\b6_\b8 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const KEYS& _\bk_\be_\by_\bs,\n-69 const _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn) :\n-70 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bk_\be_\by_\bs, _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn) {\n-71 checkInvariants();\n-72 }\n-73\n-_\b7_\b5 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bD_\b>& jf)\n-76 : _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(jf) {}\n-77\n-_\b7_\b9 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factors,\n-80 const _\bS_\bc_\ba_\bt_\bt_\be_\br& scatter)\n-81 : _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(factors, scatter) {\n-82 checkInvariants();\n-83 }\n-84\n-_\b8_\b6 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factors)\n-87 : _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(factors) {\n-88 checkInvariants();\n-89 }\n-90\n-91private:\n-92\n-94 void checkInvariants() {\n-95 if (_\bi_\bn_\bf_\bo_\b_._\bc_\bo_\bl_\bs() != 1 + (_\bi_\bn_\bf_\bo_\b_._\bn_\bB_\bl_\bo_\bc_\bk_\bs()-1) * (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)D)\n-96 throw std::invalid_argument(\n-97 \"RegularHessianFactor constructor was given non-regular factors\");\n-98 }\n-99\n-100 // Use Eigen magic to access raw memory\n-101 typedef Eigen::Map DMap;\n-102 typedef Eigen::Map ConstDMap;\n-103\n-104 // Scratch space for multiplyHessianAdd\n-105 // According to link below this is thread-safe.\n-106 // http://stackoverflow.com/questions/11160964/multiple-copies-of-the-same-\n-object-c-thread-safe\n-107 mutable std::vector y_;\n-108\n-109public:\n+44};\n+45\n+_\b7_\b6class GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br : public _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br {\n+77 public:\n+78 typedef _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs;\n+79\n+80 protected:\n+81 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs parameters_;\n+_\b8_\b2 boost::shared_ptr _\bp_\bc_\b_;\n+83\n+84 public:\n+87\n+93 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &A, const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters,\n+94 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering);\n+95\n+102 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &Ab1, const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+&Ab2,\n+103 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering);\n+108 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt &Rc1, const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &Ab2,\n+109 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters);\n 110\n-_\b1_\b1_\b2 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n-113 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const override {\n-114 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(alpha, x, y);\n-115 }\n-116\n-_\b1_\b1_\b8 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const double* x,\n-119 double* yvalues) const {\n-120 // Create a vector of temporary y_ values, corresponding to rows i\n-121 y_.resize(_\bs_\bi_\bz_\be());\n-122 for(VectorD & yi: y_)\n-123 yi.setZero();\n-124\n-125 // Accessing the VectorValues one by one is expensive\n-126 // So we will loop over columns to access x only once per column\n-127 // And fill the above temporary y_ values, to be added into yvalues after\n-128 VectorD xj(D);\n-129 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j = 0; j < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++j) {\n-130 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[j];\n-131 const double* xj = x + key * D;\n-132 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i = 0;\n-133 for (; i < j; ++i)\n-134 y_[i] += _\bi_\bn_\bf_\bo_\b_._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i, j) * ConstDMap(xj);\n-135 // blocks on the diagonal are only half\n-136 y_[i] += _\bi_\bn_\bf_\bo_\b_._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(j) * ConstDMap(xj);\n-137 // for below diagonal, we take transpose block from upper triangular part\n-138 for (i = j + 1; i < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++i)\n-139 y_[i] += _\bi_\bn_\bf_\bo_\b_._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(j, i).transpose() * ConstDMap(xj);\n-140 }\n-141\n-142 // copy to yvalues\n-143 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i = 0; i < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++i) {\n-144 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[i];\n-145 DMap(yvalues + key * D) += alpha * y_[i];\n-146 }\n-147 }\n-148\n-_\b1_\b5_\b0 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const double* x, double* yvalues,\n-151 std::vector offsets) const {\n-152\n-153 // Create a vector of temporary y_ values, corresponding to rows i\n-154 y_.resize(_\bs_\bi_\bz_\be());\n-155 for(VectorD & yi: y_)\n-156 yi.setZero();\n-157\n-158 // Accessing the VectorValues one by one is expensive\n-159 // So we will loop over columns to access x only once per column\n-160 // And fill the above temporary y_ values, to be added into yvalues after\n-161 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j = 0; j < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++j) {\n-162 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i = 0;\n-163 for (; i < j; ++i)\n-164 y_[i] += _\bi_\bn_\bf_\bo_\b_._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i, j)\n-165 * ConstDMap(x + offsets[_\bk_\be_\by_\bs_\b_[j]],\n-166 offsets[_\bk_\be_\by_\bs_\b_[j] + 1] - offsets[_\bk_\be_\by_\bs_\b_[j]]);\n-167 // blocks on the diagonal are only half\n-168 y_[i] += _\bi_\bn_\bf_\bo_\b_._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(j)\n-169 * ConstDMap(x + offsets[_\bk_\be_\by_\bs_\b_[j]],\n-170 offsets[_\bk_\be_\by_\bs_\b_[j] + 1] - offsets[_\bk_\be_\by_\bs_\b_[j]]);\n-171 // for below diagonal, we take transpose block from upper triangular part\n-172 for (i = j + 1; i < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++i)\n-173 y_[i] += _\bi_\bn_\bf_\bo_\b_._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(j, i).transpose()\n-174 * ConstDMap(x + offsets[_\bk_\be_\by_\bs_\b_[j]],\n-175 offsets[_\bk_\be_\by_\bs_\b_[j] + 1] - offsets[_\bk_\be_\by_\bs_\b_[j]]);\n-176 }\n-177\n-178 // copy to yvalues\n-179 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i = 0; i < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++i)\n-180 DMap(yvalues + offsets[_\bk_\be_\by_\bs_\b_[i]],\n-181 offsets[_\bk_\be_\by_\bs_\b_[i] + 1] - offsets[_\bk_\be_\by_\bs_\b_[i]]) += alpha * y_[i];\n-182 }\n-183\n-_\b1_\b8_\b5 void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(double* d) const override {\n-186\n-187 // Loop over all variables in the factor\n-188 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx pos = 0; pos < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++pos) {\n-189 _\bK_\be_\by j = _\bk_\be_\by_\bs_\b_[pos];\n-190 // Get the diagonal block, and insert its diagonal\n-191 DMap(d + D * j) += _\bi_\bn_\bf_\bo_\b_._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl(pos);\n-192 }\n-193 }\n-194\n-_\b1_\b9_\b6 void _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo(double* d) const override {\n-197\n-198 // Loop over all variables in the factor\n-199 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx pos = 0; pos < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++pos) {\n-200 _\bK_\be_\by j = _\bk_\be_\by_\bs_\b_[pos];\n-201 // Get the diagonal block, and insert its diagonal\n-202 DMap(d + D * j) -= _\bi_\bn_\bf_\bo_\b_._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(pos, _\bs_\bi_\bz_\be());;\n-203 }\n-204 }\n-205\n-206 /\n-* ************************************************************************* */\n-207\n-208};\n-209// end class RegularHessianFactor\n-210\n-211// traits\n-_\b2_\b1_\b2template struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n-213 RegularHessianFactor > {\n-214};\n-215\n-216}\n-217\n-_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-JacobianFactor class with fixed sized blcoks.\n-_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Contains the HessianFactor class, a general quadratic factor.\n+_\b1_\b1_\b2 _\b~_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br() override {}\n+113\n+117\n+119 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n+120\n+122 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n+123 const _\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo,\n+124 const std::map &lambda,\n+125 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &initial) override;\n+126\n+130\n+132 std::pair splitGraph(\n+133 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg);\n+134\n+136};\n+137\n+138} // namespace gtsam\n+_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh\n+_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+Implementation of Conjugate Gradient solver for a linear system.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-Vector diagonal(DenseIndex J) const\n-Get the diagonal of the J'th diagonal block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:145\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n-DenseIndex cols() const\n-Column size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const\n-Get block above the diagonal (I, J).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)\n-Return the J'th diagonal block as a self adjoint view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bB_\bl_\bo_\bc_\bk_\bs\n-DenseIndex nBlocks() const\n-Block count.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n+Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n+landmarkKey)\n+Optimize for triangulation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+parameters for the conjugate gradient method\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor using the canonical parameters (information form)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-Matrix augmentedInformation() const override\n-Return the augmented information matrix represented by this GaussianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:282\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bf_\bo_\b_\n-SymmetricBlockMatrix info_\n-The full augmented information matrix, s.t. the quadratic error is 0.5*[x -1]'H\n-[x -1].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n-void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y)\n-const override\n-y += alpha * A'*A*x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:391\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-RegularHessianFactor(const GaussianFactorGraph &factors)\n-Construct from a GaussianFactorGraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n-void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y)\n-const override\n-y += alpha * A'*A*x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-RegularHessianFactor(Key j1, Key j2, Key j3, const MatrixD &G11, const MatrixD\n-&G12, const MatrixD &G13, const VectorD &g1, const MatrixD &G22, const MatrixD\n-&G23, const VectorD &g2, const MatrixD &G33, const VectorD &g3, double f)\n-Construct a ternary factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n-void multiplyHessianAdd(double alpha, const double *x, double *yvalues, std::\n-vector< size_t > offsets) const\n-Raw memory version, with offsets TODO document reasoning.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n-void multiplyHessianAdd(double alpha, const double *x, double *yvalues) const\n-y += alpha * A'*A*x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-void hessianDiagonal(double *d) const override\n-Return the diagonal of the Hessian for this factor (raw memory version)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-RegularHessianFactor(const KEYS &keys, const SymmetricBlockMatrix\n-&augmentedInformation)\n-Constructor with an arbitrary number of keys and with the augmented information\n-matrix specified as a...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n-void gradientAtZero(double *d) const override\n-Add gradient at zero to d TODO: is it really the goal to add ??\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:196\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-RegularHessianFactor(const GaussianFactorGraph &factors, const Scatter\n-&scatter)\n-Construct from a GaussianFactorGraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-RegularHessianFactor(const KeyVector &js, const std::vector< Matrix > &Gs,\n-const std::vector< Vector > &gs, double f)\n-Construct an n-way factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-RegularHessianFactor(Key j1, Key j2, const MatrixD &G11, const MatrixD &G12,\n-const VectorD &g1, const MatrixD &G22, const VectorD &g2, double f)\n-Construct a binary factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-RegularHessianFactor(const RegularJacobianFactor< D > &jf)\n-Construct from RegularJacobianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularHessianFactor.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-JacobianFactor with constant sized blocks Provides raw memory access versions\n-of linear operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n-Scatter is an intermediate data structure used when building a HessianFactor\n-incrementally,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br\n+Base class for Iterative Solvers like SubgraphSolver.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo\n+Handy data structure for iterative solvers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphSolver.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br\n+This class implements the linear SPCG solver presented in Dellaert et al in\n+IROS'10.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphSolver.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b:_\b:_\b~_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br\n+~SubgraphSolver() override\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphSolver.h:112\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b:_\b:_\bp_\bc_\b_\n+boost::shared_ptr< SubgraphPreconditioner > pc_\n+preconditioner object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphSolver.h:82\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n VectorValues represents a collection of vector-valued variables associated each\n with a unique integer...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00716.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00716.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianEliminationTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,42 +94,62 @@\n \n \n \n \n \n
\n \n-
GaussianEliminationTree.h File Reference
\n+Namespaces |\n+Functions
\n+
iterative.cpp File Reference
\n \n
\n \n-

Go to the source code of this file.

\n+

Iterative methods, implementation. \n+More...

\n \n-\n-\n-\n-

\n-Classes

class  gtsam::GaussianEliminationTree
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+Vector gtsam::steepestDescent (const System &Ab, const Vector &x, const ConjugateGradientParameters &parameters)
 
\n+Vector gtsam::conjugateGradientDescent (const System &Ab, const Vector &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), System version.
 
Vector gtsam::steepestDescent (const Matrix &A, const Vector &b, const Vector &x, const ConjugateGradientParameters &parameters)
 convenience calls using matrices, will create System class internally:
 
\n+Vector gtsam::conjugateGradientDescent (const Matrix &A, const Vector &b, const Vector &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), Matrix version.
 
\n+VectorValues gtsam::steepestDescent (const GaussianFactorGraph &fg, const VectorValues &x, const ConjugateGradientParameters &parameters)
 Method of steepest gradients, Gaussian Factor Graph version.
 
\n+VectorValues gtsam::conjugateGradientDescent (const GaussianFactorGraph &fg, const VectorValues &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), Gaussian Factor Graph version.
 
\n

Detailed Description

\n-
Date
Mar 29, 2013
\n-
Author
Frank Dellaert
\n-
\n-Richard Roberts
\n+

Iterative methods, implementation.

\n+
Author
Frank Dellaert
\n+
Date
Dec 28, 2009
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,50 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianEliminationTree.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+iterative.cpp File Reference\n+Iterative methods, implementation. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bte\bee\bep\bpe\bes\bst\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bS_\by_\bs_\bt_\be_\bm &Ab, const Vector &x, const\n+ _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n+\u00a0\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bS_\by_\bs_\bt_\be_\bm &Ab, const Vector\n+ &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n+\u00a0 Method of conjugate gradients (CG), _\bS_\by_\bs_\bt_\be_\bm version.\n+\u00a0\n+ Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\be_\be_\bp_\be_\bs_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt (const Matrix &A, const Vector &b, const\n+ Vector &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n+\u00a0 convenience calls using matrices, will create _\bS_\by_\bs_\bt_\be_\bm class\n+ internally:\n+\u00a0\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const Matrix &A, const Vector\n+ &b, const Vector &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+ ¶meters)\n+\u00a0 Method of conjugate gradients (CG), Matrix version.\n+\u00a0\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bte\bee\bep\bpe\bes\bst\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg, const\n+ _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n+\u00a0 Method of steepest gradients, Gaussian _\bF_\ba_\bc_\bt_\bo_\br Graph version.\n+\u00a0\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg,\n+ const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+ ¶meters)\n+\u00a0 Method of conjugate gradients (CG), Gaussian _\bF_\ba_\bc_\bt_\bo_\br Graph\n+ version.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Mar 29, 2013\n+Iterative methods, implementation.\n Author\n Frank Dellaert\n- Richard Roberts\n+ Date\n+ Dec 28, 2009\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00716.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00716.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,7 @@\n var a00716 = [\n- [\"gtsam::GaussianEliminationTree\", \"a03776.html\", \"a03776\"]\n+ [\"conjugateGradientDescent\", \"a00716.html#aa84114ad1593684ad739088a2898afdb\", null],\n+ [\"conjugateGradientDescent\", \"a00716.html#af55440f741d8b2f706101f7a79ba7111\", null],\n+ [\"conjugateGradientDescent\", \"a00716.html#ad2b587fde5d35a27d6c88feb4432e785\", null],\n+ [\"steepestDescent\", \"a00716.html#a81b7af7638d28555c3f404318cc67b22\", null],\n+ [\"steepestDescent\", \"a00716.html#aed4b2ca704ddd6530ea70122f883ac88\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00719.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00719.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/linearExceptions.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/JacobianFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,52 +95,54 @@\n \n \n \n \n
\n \n-
linearExceptions.h File Reference
\n+Namespaces |\n+Functions
\n+
JacobianFactor.h File Reference
\n \n
\n \n-

Exceptions that may be thrown by linear solver components. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n+\n+\n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::IndeterminantLinearSystemException
 Thrown when a linear system is ill-posed. More...
 
class  gtsam::InvalidNoiseModel
 An exception indicating that the noise model dimension passed into a JacobianFactor has a different dimensionality than the factor. More...
class  gtsam::JacobianFactor
 A Gaussian factor in the squared-error form. More...
 
class  gtsam::InvalidMatrixBlock
 An exception indicating that a matrix block passed into a JacobianFactor has a different dimensionality than the factor. More...
 
class  gtsam::InvalidDenseElimination
struct  gtsam::traits< JacobianFactor >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Functions

std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptrgtsam::EliminateQR (const GaussianFactorGraph &factors, const Ordering &keys)
 Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that handles constraints (zero sigmas).
 
\n

Detailed Description

\n-

Exceptions that may be thrown by linear solver components.

\n-
Author
Richard Roberts
\n-
Date
Aug 17, 2012
\n+
Author
Richard Roberts
\n+
\n+Christian Potthast
\n+
\n+Frank Dellaert
\n+
Date
Dec 8, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +1,39 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-linearExceptions.h File Reference\n-Exceptions that may be thrown by linear solver components. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+JacobianFactor.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-\u00a0 Thrown when a linear system is ill-posed. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 A Gaussian factor in the squared-error form. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-\u00a0 An exception indicating that the noise model dimension passed into a\n- _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br has a different dimensionality than the factor. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk\n-\u00a0 An exception indicating that a matrix block passed into a\n- _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br has a different dimensionality than the factor. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ std::pair< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR (const\n+_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n+ >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n+ Multiply all factors and eliminate the\n+\u00a0 given keys from the resulting factor\n+ using a QR variant that handles\n+ constraints (zero sigmas).\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Exceptions that may be thrown by linear solver components.\n Author\n Richard Roberts\n+ Christian Potthast\n+ Frank Dellaert\n Date\n- Aug 17, 2012\n+ Dec 8, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+ * _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00719.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00719.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,5 @@\n var a00719 = [\n- [\"gtsam::IndeterminantLinearSystemException\", \"a03864.html\", null],\n- [\"gtsam::InvalidNoiseModel\", \"a03868.html\", \"a03868\"],\n- [\"gtsam::InvalidMatrixBlock\", \"a03872.html\", \"a03872\"],\n- [\"gtsam::InvalidDenseElimination\", \"a03876.html\", null]\n+ [\"gtsam::JacobianFactor\", \"a03844.html\", \"a03844\"],\n+ [\"gtsam::traits< JacobianFactor >\", \"a03848.html\", null],\n+ [\"EliminateQR\", \"a00719.html#ab56c4bfa363f8c23c48eb078e9c84a9c\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00719_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00719_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/linearExceptions.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/JacobianFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,109 +98,360 @@\n
No Matches
\n \n \n \n \n \n
\n-
linearExceptions.h
\n+
JacobianFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-
21#include <gtsam/base/types.h>
\n-
22
\n-
23namespace gtsam {
\n-
24
\n-
\n-
94 class GTSAM_EXPORT IndeterminantLinearSystemException : public ThreadsafeException<IndeterminantLinearSystemException> {
\n-
95 Key j_;
\n-
96 public:
\n-
97 IndeterminantLinearSystemException(Key j) noexcept : j_(j) {}
\n-
98 ~IndeterminantLinearSystemException() noexcept override {}
\n-
99 Key nearbyVariable() const { return j_; }
\n-
100 const char* what() const noexcept override;
\n-
101 };
\n-
\n+
19#pragma once
\n+
20
\n+\n+\n+\n+\n+\n+
26
\n+
27#include <boost/make_shared.hpp>
\n+
28#include <boost/serialization/version.hpp>
\n+
29#include <boost/serialization/split_member.hpp>
\n+
30
\n+
31namespace gtsam {
\n+
32
\n+
33 // Forward declarations
\n+
34 class HessianFactor;
\n+
35 class VariableSlots;
\n+
36 class GaussianFactorGraph;
\n+\n+
38 class HessianFactor;
\n+
39 class VectorValues;
\n+
40 class Ordering;
\n+
41 class JacobianFactor;
\n+
42
\n+
48 GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<JacobianFactor> >
\n+
49 EliminateQR(const GaussianFactorGraph& factors, const Ordering& keys);
\n+
50
\n+
\n+
90 class GTSAM_EXPORT JacobianFactor : public GaussianFactor
\n+
91 {
\n+
92 public:
\n+
93
\n+\n+\n+
96 typedef boost::shared_ptr<This> shared_ptr;
\n+
97
\n+
98 typedef VerticalBlockMatrix::Block ABlock;
\n+
99 typedef VerticalBlockMatrix::constBlock constABlock;
\n+
100 typedef ABlock::ColXpr BVector;
\n+
101 typedef constABlock::ConstColXpr constBVector;
\n
102
\n-
103 /* ************************************************************************* */
\n-
\n-
106 class GTSAM_EXPORT InvalidNoiseModel : public ThreadsafeException<InvalidNoiseModel> {
\n-
107 public:
\n-\n-\n-
110
\n-
111 InvalidNoiseModel(DenseIndex factorDims, DenseIndex noiseModelDims) :
\n-
112 factorDims(factorDims), noiseModelDims(noiseModelDims) {}
\n-
113 ~InvalidNoiseModel() noexcept override {}
\n-
114
\n-
115 const char* what() const noexcept override;
\n-
116
\n-
117 private:
\n-
118 mutable std::string description_;
\n-
119 };
\n-
\n-
120
\n-
121 /* ************************************************************************* */
\n-
\n-\n-
125 public:
\n-\n-\n+
103 protected:
\n+
104
\n+
105 VerticalBlockMatrix Ab_; // the block view of the full matrix
\n+
106 noiseModel::Diagonal::shared_ptr model_; // Gaussian noise model with diagonal covariance matrix
\n+
107
\n+
108 public:
\n+
109
\n+
111 explicit JacobianFactor(const GaussianFactor& gf);
\n+
112
\n+
114 JacobianFactor(const JacobianFactor& jf) : Base(jf), Ab_(jf.Ab_), model_(jf.model_) {}
\n+
115
\n+
117 explicit JacobianFactor(const HessianFactor& hf);
\n+
118
\n+\n+
121
\n+
123 explicit JacobianFactor(const Vector& b_in);
\n+
124
\n+
126 JacobianFactor(Key i1, const Matrix& A1,
\n+
127 const Vector& b, const SharedDiagonal& model = SharedDiagonal());
\n
128
\n-
129 InvalidMatrixBlock(DenseIndex factorRows, DenseIndex blockRows) :
\n-
130 factorRows(factorRows), blockRows(blockRows) {}
\n-
131 ~InvalidMatrixBlock() noexcept override {}
\n-
132
\n-
133 const char* what() const noexcept override;
\n-
134
\n-
135 private:
\n-
136 mutable std::string description_;
\n-
137 };
\n-
\n+
130 JacobianFactor(Key i1, const Matrix& A1,
\n+
131 Key i2, const Matrix& A2,
\n+
132 const Vector& b, const SharedDiagonal& model = SharedDiagonal());
\n+
133
\n+
135 JacobianFactor(Key i1, const Matrix& A1, Key i2,
\n+
136 const Matrix& A2, Key i3, const Matrix& A3,
\n+
137 const Vector& b, const SharedDiagonal& model = SharedDiagonal());
\n
138
\n-
139 /* ************************************************************************* */
\n-
\n-\n-
141 public:
\n-\n-
143 };
\n-
\n+
142 template<typename TERMS>
\n+
143 JacobianFactor(const TERMS& terms, const Vector& b, const SharedDiagonal& model = SharedDiagonal());
\n
144
\n-
145 }
\n-
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
\n-
Typedefs for easier changing of types.
\n+
149 template<typename KEYS>
\n+\n+
151 const KEYS& keys, const VerticalBlockMatrix& augmentedMatrix, const SharedDiagonal& sigmas = SharedDiagonal());
\n+
152
\n+
157 explicit JacobianFactor(
\n+
158 const GaussianFactorGraph& graph);
\n+
159
\n+
164 explicit JacobianFactor(
\n+
165 const GaussianFactorGraph& graph,
\n+
166 const VariableSlots& p_variableSlots);
\n+
167
\n+
172 explicit JacobianFactor(
\n+
173 const GaussianFactorGraph& graph,
\n+
174 const Ordering& ordering);
\n+
175
\n+
180 explicit JacobianFactor(
\n+
181 const GaussianFactorGraph& graph,
\n+
182 const Ordering& ordering,
\n+
183 const VariableSlots& p_variableSlots);
\n+
184
\n+
186 ~JacobianFactor() override {}
\n+
187
\n+
\n+\n+
190 return boost::static_pointer_cast<GaussianFactor>(
\n+
191 boost::make_shared<JacobianFactor>(*this));
\n+
192 }
\n+
\n+
193
\n+
194 // Implementing Testable interface
\n+
195 void print(const std::string& s = "",
\n+
196 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n+
197 bool equals(const GaussianFactor& lf, double tol = 1e-9) const override;
\n+
198
\n+
199 Vector unweighted_error(const VectorValues& c) const;
\n+
200 Vector error_vector(const VectorValues& c) const;
\n+
203 using GaussianFactor::error;
\n+
204
\n+
206 double error(const VectorValues& c) const override;
\n+
207
\n+
216 Matrix augmentedInformation() const override;
\n+
217
\n+
221 Matrix information() const override;
\n+
222
\n+
224 using Base::hessianDiagonal;
\n+
225
\n+
227 void hessianDiagonalAdd(VectorValues& d) const override;
\n+
228
\n+
230 void hessianDiagonal(double* d) const override;
\n+
231
\n+
233 std::map<Key,Matrix> hessianBlockDiagonal() const override;
\n+
234
\n+
238 std::pair<Matrix, Vector> jacobian() const override;
\n+
239
\n+
243 std::pair<Matrix, Vector> jacobianUnweighted() const;
\n+
244
\n+
248 Matrix augmentedJacobian() const override;
\n+
249
\n+
253 Matrix augmentedJacobianUnweighted() const;
\n+
254
\n+
256 const VerticalBlockMatrix& matrixObject() const { return Ab_; }
\n+
257
\n+\n+
260
\n+
266 GaussianFactor::shared_ptr negate() const override;
\n+
267
\n+
\n+
269 bool isConstrained() const {
\n+
270 return model_ && model_->isConstrained();
\n+
271 }
\n+
\n+
272
\n+
\n+
276 DenseIndex getDim(const_iterator variable) const override {
\n+
277 return Ab_(variable - begin()).cols();
\n+
278 }
\n+
\n+
279
\n+
283 size_t rows() const { return Ab_.rows(); }
\n+
284
\n+
288 size_t cols() const { return Ab_.cols(); }
\n+
289
\n+
291 const SharedDiagonal& get_model() const { return model_; }
\n+
292
\n+
294 SharedDiagonal& get_model() { return model_; }
\n+
295
\n+
297 const constBVector getb() const { return Ab_(size()).col(0); }
\n+
298
\n+
300 constABlock getA(const_iterator variable) const { return Ab_(variable - begin()); }
\n+
301
\n+
303 constABlock getA() const { return Ab_.range(0, size()); }
\n+
304
\n+
306 BVector getb() { return Ab_(size()).col(0); }
\n+
307
\n+
309 ABlock getA(iterator variable) { return Ab_(variable - begin()); }
\n+
310
\n+
312 ABlock getA() { return Ab_.range(0, size()); }
\n+
313
\n+
319 void updateHessian(const KeyVector& keys, SymmetricBlockMatrix* info) const override;
\n+
320
\n+
322 Vector operator*(const VectorValues& x) const;
\n+
323
\n+
326 void transposeMultiplyAdd(double alpha, const Vector& e,
\n+
327 VectorValues& x) const;
\n+
328
\n+
330 void multiplyHessianAdd(double alpha, const VectorValues& x,
\n+
331 VectorValues& y) const override;
\n+
332
\n+
341 void multiplyHessianAdd(double alpha, const double* x, double* y,
\n+
342 const std::vector<size_t>& accumulatedDims) const;
\n+
343
\n+
345 VectorValues gradientAtZero() const override;
\n+
346
\n+
348 void gradientAtZero(double* d) const override;
\n+
349
\n+
351 Vector gradient(Key key, const VectorValues& x) const override;
\n+
352
\n+
354 JacobianFactor whiten() const;
\n+
355
\n+
357 std::pair<boost::shared_ptr<GaussianConditional>, shared_ptr>
\n+
358 eliminate(const Ordering& keys);
\n+
359
\n+
361 void setModel(bool anyConstrained, const Vector& sigmas);
\n+
362
\n+
374 friend GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, shared_ptr>
\n+
375 EliminateQR(const GaussianFactorGraph& factors, const Ordering& keys);
\n+
376
\n+
384 boost::shared_ptr<GaussianConditional> splitConditional(size_t nrFrontals);
\n+
385
\n+
386 protected:
\n+
387
\n+
389 template<typename TERMS>
\n+
390 void fillTerms(const TERMS& terms, const Vector& b, const SharedDiagonal& noiseModel);
\n+
391
\n+
392 private:
\n+
393
\n+
398 void JacobianFactorHelper(
\n+
399 const GaussianFactorGraph& graph,
\n+\n+
401
\n+
408 template<class KEYS, class DIMENSIONS>
\n+
409 JacobianFactor(const KEYS& keys, const DIMENSIONS& dims, DenseIndex m,
\n+
410 const SharedDiagonal& model = SharedDiagonal()) :
\n+
411 Base(keys), Ab_(dims.begin(), dims.end(), m, true), model_(model) {
\n+
412 }
\n+
413
\n+
414 // be very selective on who can access these private methods:
\n+
415 template<typename T> friend class ExpressionFactor;
\n+
416
\n+
418 friend class boost::serialization::access;
\n+
419 template<class ARCHIVE>
\n+
420 void save(ARCHIVE & ar, const unsigned int version) const {
\n+
421 // TODO(fan): This is a hack for Boost < 1.66
\n+
422 // We really need to introduce proper versioning in the archives
\n+
423 // As otherwise this will not read objects serialized by older
\n+
424 // versions of GTSAM
\n+
425 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
426 ar << BOOST_SERIALIZATION_NVP(Ab_);
\n+
427 bool model_null = false;
\n+
428 if(model_.get() == nullptr) {
\n+
429 model_null = true;
\n+
430 ar << boost::serialization::make_nvp("model_null", model_null);
\n+
431 } else {
\n+
432 ar << boost::serialization::make_nvp("model_null", model_null);
\n+
433 ar << BOOST_SERIALIZATION_NVP(model_);
\n+
434 }
\n+
435 }
\n+
436
\n+
437 template<class ARCHIVE>
\n+
438 void load(ARCHIVE & ar, const unsigned int version) {
\n+
439 // invoke serialization of the base class
\n+
440 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
441 ar >> BOOST_SERIALIZATION_NVP(Ab_);
\n+
442 if (version < 1) {
\n+
443 ar >> BOOST_SERIALIZATION_NVP(model_);
\n+
444 } else {
\n+
445 bool model_null;
\n+
446 ar >> BOOST_SERIALIZATION_NVP(model_null);
\n+
447 if (!model_null) {
\n+
448 ar >> BOOST_SERIALIZATION_NVP(model_);
\n+
449 }
\n+
450 }
\n+
451 }
\n+
452
\n+
453 BOOST_SERIALIZATION_SPLIT_MEMBER()
\n+
454 }; // JacobianFactor
\n+
\n+
456template<>
\n+
\n+
457struct traits<JacobianFactor> : public Testable<JacobianFactor> {
\n+
458};
\n+
\n+
459
\n+
460} // \\ namespace gtsam
\n+
461
\n+
462BOOST_CLASS_VERSION(gtsam::JacobianFactor, 1)
\n+
463
\n+
464#include <gtsam/linear/JacobianFactor-inl.h>
\n+
465
\n+
466
\n+
A matrix with column blocks of pre-defined sizes.
\n+
VariableSlots describes the structure of a combined factor in terms of where each block comes from in...
\n+
A factor with a quadratic error function - a Gaussian.
\n+\n+
Included from all GTSAM files.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition Matrix.cpp:167
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n+
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that h...
Definition JacobianFactor.cpp:789
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
Definition ThreadsafeException.h:42
\n-
Thrown when a linear system is ill-posed.
Definition linearExceptions.h:94
\n-
An exception indicating that the noise model dimension passed into a JacobianFactor has a different d...
Definition linearExceptions.h:106
\n-
const DenseIndex factorDims
The dimensionality of the factor.
Definition linearExceptions.h:108
\n-
const DenseIndex noiseModelDims
The dimensionality of the noise model.
Definition linearExceptions.h:109
\n-
An exception indicating that a matrix block passed into a JacobianFactor has a different dimensionali...
Definition linearExceptions.h:124
\n-
const DenseIndex factorRows
The dimensionality of the factor.
Definition linearExceptions.h:126
\n-
const DenseIndex blockRows
The dimensionality of the noise model.
Definition linearExceptions.h:127
\n-
Definition linearExceptions.h:140
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n+
Block range(DenseIndex startBlock, DenseIndex endBlock)
access ranges of blocks at a time
Definition VerticalBlockMatrix.h:130
\n+
DenseIndex rows() const
Row size.
Definition VerticalBlockMatrix.h:115
\n+
DenseIndex cols() const
Column size.
Definition VerticalBlockMatrix.h:118
\n+
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n+
KeyVector::iterator iterator
Iterator over keys.
Definition Factor.h:77
\n+
Definition Ordering.h:34
\n+
A combined factor is assembled as one block of rows for each component factor.
Definition VariableSlots.h:52
\n+
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
A Gaussian factor using the canonical parameters (information form)
Definition HessianFactor.h:101
\n+
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n+
const constBVector getb() const
Get a view of the r.h.s.
Definition JacobianFactor.h:297
\n+
BVector getb()
Get a view of the r.h.s.
Definition JacobianFactor.h:306
\n+
const SharedDiagonal & get_model() const
get a copy of model
Definition JacobianFactor.h:291
\n+
JacobianFactor(const JacobianFactor &jf)
Copy constructor.
Definition JacobianFactor.h:114
\n+
JacobianFactor This
Typedef to this class.
Definition JacobianFactor.h:94
\n+
bool isConstrained() const
is noise model constrained ?
Definition JacobianFactor.h:269
\n+
constABlock getA() const
Get a view of the A matrix, not weighted by noise.
Definition JacobianFactor.h:303
\n+
GaussianFactor::shared_ptr clone() const override
Clone this JacobianFactor.
Definition JacobianFactor.h:189
\n+
ABlock getA(iterator variable)
Get a view of the A matrix for the variable pointed to by the given key iterator (non-const version)
Definition JacobianFactor.h:309
\n+
SharedDiagonal & get_model()
get a copy of model (non-const version)
Definition JacobianFactor.h:294
\n+
DenseIndex getDim(const_iterator variable) const override
Return the dimension of the variable pointed to by the given key iterator todo: Remove this in favor ...
Definition JacobianFactor.h:276
\n+
VerticalBlockMatrix & matrixObject()
Mutable access to the full augmented Jacobian matrix of this factor as a VerticalBlockMatrix object.
Definition JacobianFactor.h:259
\n+
ABlock getA()
Get a view of the A matrix.
Definition JacobianFactor.h:312
\n+
GaussianFactor Base
Typedef to base class.
Definition JacobianFactor.h:95
\n+
~JacobianFactor() override
Virtual destructor.
Definition JacobianFactor.h:186
\n+
const VerticalBlockMatrix & matrixObject() const
Return the full augmented Jacobian matrix of this factor as a VerticalBlockMatrix object.
Definition JacobianFactor.h:256
\n+
size_t rows() const
return the number of rows in the corresponding linear system
Definition JacobianFactor.h:283
\n+
size_t cols() const
return the number of columns in the corresponding linear system
Definition JacobianFactor.h:288
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition JacobianFactor.h:96
\n+
constABlock getA(const_iterator variable) const
Get a view of the A matrix for the variable pointed to by the given key iterator.
Definition JacobianFactor.h:300
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
In Gaussian factors, the error function returns either the negative log-likelihood,...
\n+
is the normalization constant.
\n+
The Factor::error simply extracts the.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,134 +1,502 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-linearExceptions.h\n+JacobianFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-_\b9_\b4 class GTSAM_EXPORT _\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn : public\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn {\n-95 _\bK_\be_\by j_;\n-96 public:\n-97 _\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(_\bK_\be_\by j) noexcept : j_(j) {}\n-98 _\b~_\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() noexcept override {}\n-99 _\bK_\be_\by nearbyVariable() const { return j_; }\n-100 const char* what() const noexcept override;\n-101 };\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b._\bh>\n+26\n+27#include \n+28#include \n+29#include \n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32\n+33 // Forward declarations\n+34 class HessianFactor;\n+35 class VariableSlots;\n+36 class GaussianFactorGraph;\n+37 class _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+38 class HessianFactor;\n+39 class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+40 class Ordering;\n+41 class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br;\n+42\n+48 GTSAM_EXPORT std::pair, boost::\n+shared_ptr >\n+49 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR(const GaussianFactorGraph& factors, const Ordering& keys);\n+50\n+_\b9_\b0 class GTSAM_EXPORT _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+91 {\n+92 public:\n+93\n+_\b9_\b4 typedef _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+_\b9_\b5 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n+_\b9_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+97\n+98 typedef VerticalBlockMatrix::Block ABlock;\n+99 typedef VerticalBlockMatrix::constBlock constABlock;\n+100 typedef ABlock::ColXpr BVector;\n+101 typedef constABlock::ConstColXpr constBVector;\n 102\n-103 /\n-* ************************************************************************* */\n-_\b1_\b0_\b6 class GTSAM_EXPORT _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl : public\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn {\n-107 public:\n-_\b1_\b0_\b8 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bf_\ba_\bc_\bt_\bo_\br_\bD_\bi_\bm_\bs;\n-_\b1_\b0_\b9 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bD_\bi_\bm_\bs;\n-110\n-111 _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx factorDims, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx noiseModelDims) :\n-112 factorDims(factorDims), noiseModelDims(noiseModelDims) {}\n-113 _\b~_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl() noexcept override {}\n-114\n-115 const char* what() const noexcept override;\n-116\n-117 private:\n-118 mutable std::string description_;\n-119 };\n-120\n-121 /\n-* ************************************************************************* */\n-_\b1_\b2_\b4 class GTSAM_EXPORT _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk : public\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk> {\n-125 public:\n-_\b1_\b2_\b6 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bf_\ba_\bc_\bt_\bo_\br_\bR_\bo_\bw_\bs;\n-_\b1_\b2_\b7 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bb_\bl_\bo_\bc_\bk_\bR_\bo_\bw_\bs;\n+103 protected:\n+104\n+105 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx Ab_; // the block view of the full matrix\n+106 noiseModel::Diagonal::shared_ptr model_; // Gaussian noise model with\n+diagonal covariance matrix\n+107\n+108 public:\n+109\n+111 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& gf);\n+112\n+_\b1_\b1_\b4 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& jf) : _\bB_\ba_\bs_\be(jf), Ab_(jf.Ab_), model_\n+(jf.model_) {}\n+115\n+117 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& hf);\n+118\n+120 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br();\n+121\n+123 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const Vector& b_in);\n+124\n+126 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by i1, const Matrix& A1,\n+127 const Vector& b, const SharedDiagonal& model = SharedDiagonal());\n 128\n-129 _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx factorRows, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockRows) :\n-130 factorRows(factorRows), blockRows(blockRows) {}\n-131 _\b~_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk() noexcept override {}\n-132\n-133 const char* what() const noexcept override;\n-134\n-135 private:\n-136 mutable std::string description_;\n-137 };\n+130 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by i1, const Matrix& A1,\n+131 _\bK_\be_\by i2, const Matrix& A2,\n+132 const Vector& b, const SharedDiagonal& model = SharedDiagonal());\n+133\n+135 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by i1, const Matrix& A1, _\bK_\be_\by i2,\n+136 const Matrix& A2, _\bK_\be_\by i3, const Matrix& A3,\n+137 const Vector& b, const SharedDiagonal& model = SharedDiagonal());\n 138\n-139 /\n-* ************************************************************************* */\n-_\b1_\b4_\b0 class _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn : public\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn> {\n-141 public:\n-142 _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn(const char *message) :\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b<_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\b>(message) {}\n-143 };\n+142 template\n+143 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const TERMS& terms, const Vector& b, const SharedDiagonal&\n+model = SharedDiagonal());\n 144\n-145 }\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n-Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n+149 template\n+150 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n+151 const KEYS& keys, const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& augmentedMatrix, const\n+SharedDiagonal& sigmas = SharedDiagonal());\n+152\n+157 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n+158 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph);\n+159\n+164 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n+165 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n+166 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs& p_variableSlots);\n+167\n+172 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n+173 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n+174 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering);\n+175\n+180 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n+181 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n+182 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+183 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs& p_variableSlots);\n+184\n+_\b1_\b8_\b6 _\b~_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+187\n+_\b1_\b8_\b9 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const override {\n+190 return boost::static_pointer_cast(\n+191 boost::make_shared(*this));\n+192 }\n+193\n+194 // Implementing Testable interface\n+195 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+196 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n+197 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& lf, double tol = 1e-9) const override;\n+198\n+199 Vector unweighted_error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+200 Vector error_vector(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+203 using GaussianFactor::error;\n+204\n+206 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n+207\n+216 Matrix augmentedInformation() const override;\n+217\n+221 Matrix information() const override;\n+222\n+224 using Base::hessianDiagonal;\n+225\n+227 void hessianDiagonalAdd(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& d) const override;\n+228\n+230 void hessianDiagonal(double* d) const override;\n+231\n+233 std::map hessianBlockDiagonal() const override;\n+234\n+238 std::pair jacobian() const override;\n+239\n+243 std::pair jacobianUnweighted() const;\n+244\n+248 Matrix augmentedJacobian() const override;\n+249\n+253 Matrix augmentedJacobianUnweighted() const;\n+254\n+_\b2_\b5_\b6 const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& _\bm_\ba_\bt_\br_\bi_\bx_\bO_\bb_\bj_\be_\bc_\bt() const { return Ab_; }\n+257\n+_\b2_\b5_\b9 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& _\bm_\ba_\bt_\br_\bi_\bx_\bO_\bb_\bj_\be_\bc_\bt() { return Ab_; }\n+260\n+266 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br negate() const override;\n+267\n+_\b2_\b6_\b9 bool _\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd() const {\n+270 return model_ && model_->isConstrained();\n+271 }\n+272\n+_\b2_\b7_\b6 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bD_\bi_\bm(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) const override {\n+277 return Ab_(variable - begin())._\bc_\bo_\bl_\bs();\n+278 }\n+279\n+_\b2_\b8_\b3 size_t _\br_\bo_\bw_\bs() const { return Ab_._\br_\bo_\bw_\bs(); }\n+284\n+_\b2_\b8_\b8 size_t _\bc_\bo_\bl_\bs() const { return Ab_._\bc_\bo_\bl_\bs(); }\n+289\n+_\b2_\b9_\b1 const SharedDiagonal& _\bg_\be_\bt_\b__\bm_\bo_\bd_\be_\bl() const { return model_; }\n+292\n+_\b2_\b9_\b4 SharedDiagonal& _\bg_\be_\bt_\b__\bm_\bo_\bd_\be_\bl() { return model_; }\n+295\n+_\b2_\b9_\b7 const constBVector _\bg_\be_\bt_\bb() const { return Ab_(size()).col(0); }\n+298\n+_\b3_\b0_\b0 constABlock _\bg_\be_\bt_\bA(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) const { return Ab_(variable -\n+begin()); }\n+301\n+_\b3_\b0_\b3 constABlock _\bg_\be_\bt_\bA() const { return Ab_._\br_\ba_\bn_\bg_\be(0, size()); }\n+304\n+_\b3_\b0_\b6 BVector _\bg_\be_\bt_\bb() { return Ab_(size()).col(0); }\n+307\n+_\b3_\b0_\b9 ABlock _\bg_\be_\bt_\bA(_\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) { return Ab_(variable - begin()); }\n+310\n+_\b3_\b1_\b2 ABlock _\bg_\be_\bt_\bA() { return Ab_._\br_\ba_\bn_\bg_\be(0, size()); }\n+313\n+319 void updateHessian(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys, _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx* info) const\n+override;\n+320\n+322 Vector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+323\n+326 void transposeMultiplyAdd(double alpha, const Vector& e,\n+327 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+328\n+330 void multiplyHessianAdd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n+331 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const override;\n+332\n+341 void multiplyHessianAdd(double alpha, const double* x, double* y,\n+342 const std::vector& accumulatedDims) const;\n+343\n+345 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const override;\n+346\n+348 void gradientAtZero(double* d) const override;\n+349\n+351 Vector gradient(_\bK_\be_\by key, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n+352\n+354 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br whiten() const;\n+355\n+357 std::pair, shared_ptr>\n+358 eliminate(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys);\n+359\n+361 void setModel(bool anyConstrained, const Vector& sigmas);\n+362\n+374 friend GTSAM_EXPORT std::pair,\n+shared_ptr>\n+375 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys);\n+376\n+384 boost::shared_ptr splitConditional(size_t nrFrontals);\n+385\n+386 protected:\n+387\n+389 template\n+390 void fillTerms(const TERMS& terms, const Vector& b, const SharedDiagonal&\n+noiseModel);\n+391\n+392 private:\n+393\n+398 void JacobianFactorHelper(\n+399 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n+400 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b>& orderedSlots);\n+401\n+408 template\n+409 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const KEYS& keys, const DIMENSIONS& dims, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx m,\n+410 const SharedDiagonal& model = SharedDiagonal()) :\n+411 Base(keys), Ab_(dims.begin(), dims.end(), m, true), model_(model) {\n+412 }\n+413\n+414 // be very selective on who can access these private methods:\n+415 template friend class ExpressionFactor;\n+416\n+_\b4_\b1_\b8 friend class boost::serialization::access;\n+419 template\n+420 void _\bs_\ba_\bv_\be(ARCHIVE & ar, const unsigned int version) const {\n+421 // TODO(fan): This is a hack for Boost < 1.66\n+422 // We really need to introduce proper versioning in the archives\n+423 // As otherwise this will not read objects serialized by older\n+424 // versions of GTSAM\n+425 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+426 ar << BOOST_SERIALIZATION_NVP(Ab_);\n+427 bool model_null = false;\n+428 if(model_.get() == nullptr) {\n+429 model_null = true;\n+430 ar << boost::serialization::make_nvp(\"model_null\", model_null);\n+431 } else {\n+432 ar << boost::serialization::make_nvp(\"model_null\", model_null);\n+433 ar << BOOST_SERIALIZATION_NVP(model_);\n+434 }\n+435 }\n+436\n+437 template\n+438 void load(ARCHIVE & ar, const unsigned int version) {\n+439 // invoke serialization of the base class\n+440 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n+441 ar >> BOOST_SERIALIZATION_NVP(Ab_);\n+442 if (version < 1) {\n+443 ar >> BOOST_SERIALIZATION_NVP(model_);\n+444 } else {\n+445 bool model_null;\n+446 ar >> BOOST_SERIALIZATION_NVP(model_null);\n+447 if (!model_null) {\n+448 ar >> BOOST_SERIALIZATION_NVP(model_);\n+449 }\n+450 }\n+451 }\n+452\n+453 BOOST_SERIALIZATION_SPLIT_MEMBER()\n+454 }; // JacobianFactor\n+456template<>\n+_\b4_\b5_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+458};\n+459\n+460} // \\ namespace gtsam\n+461\n+462BOOST_CLASS_VERSION(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br, 1)\n+463\n+464#include \n+465\n+466\n+_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+A matrix with column blocks of pre-defined sizes.\n+_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b._\bh\n+VariableSlots describes the structure of a combined factor in terms of where\n+each block comes from in...\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+A factor with a quadratic error function - a Gaussian.\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n ptrdiff_t DenseIndex\n The index type for Eigen objects.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\ba_\bv_\be\n+void save(const Matrix &A, const string &s, const string &filename)\n+save a matrix to file, which can be loaded by matlab\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point2 operator*(double s, const Point2 &p)\n+multiply with scalar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR\n+std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr >\n+EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)\n+Multiply all factors and eliminate the given keys from the resulting factor\n+using a QR variant that h...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:789\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-Thrown when a linear system is ill-posed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-An exception indicating that the noise model dimension passed into a\n-JacobianFactor has a different d...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bD_\bi_\bm_\bs\n-const DenseIndex factorDims\n-The dimensionality of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bD_\bi_\bm_\bs\n-const DenseIndex noiseModelDims\n-The dimensionality of the noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk\n-An exception indicating that a matrix block passed into a JacobianFactor has a\n-different dimensionali...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:124\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bR_\bo_\bw_\bs\n-const DenseIndex factorRows\n-The dimensionality of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bR_\bo_\bw_\bs\n-const DenseIndex blockRows\n-The dimensionality of the noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:127\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of vertical blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\ba_\bn_\bg_\be\n+Block range(DenseIndex startBlock, DenseIndex endBlock)\n+access ranges of blocks at a time\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n+DenseIndex rows() const\n+Row size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n+DenseIndex cols() const\n+Column size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+KeyVector::const_iterator const_iterator\n+Const iterator over keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+KeyVector::iterator iterator\n+Iterator over keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs\n+A combined factor is assembled as one block of rows for each component factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableSlots.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+An abstract virtual base class for JacobianFactor and HessianFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor using the canonical parameters (information form)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor in the squared-error form.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bb\n+const constBVector getb() const\n+Get a view of the r.h.s.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:297\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bb\n+BVector getb()\n+Get a view of the r.h.s.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:306\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\b__\bm_\bo_\bd_\be_\bl\n+const SharedDiagonal & get_model() const\n+get a copy of model\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:291\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+JacobianFactor(const JacobianFactor &jf)\n+Copy constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+JacobianFactor This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n+bool isConstrained() const\n+is noise model constrained ?\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:269\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bA\n+constABlock getA() const\n+Get a view of the A matrix, not weighted by noise.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:303\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+GaussianFactor::shared_ptr clone() const override\n+Clone this JacobianFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bA\n+ABlock getA(iterator variable)\n+Get a view of the A matrix for the variable pointed to by the given key\n+iterator (non-const version)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:309\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\b__\bm_\bo_\bd_\be_\bl\n+SharedDiagonal & get_model()\n+get a copy of model (non-const version)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:294\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n+DenseIndex getDim(const_iterator variable) const override\n+Return the dimension of the variable pointed to by the given key iterator todo:\n+Remove this in favor ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:276\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\bO_\bb_\bj_\be_\bc_\bt\n+VerticalBlockMatrix & matrixObject()\n+Mutable access to the full augmented Jacobian matrix of this factor as a\n+VerticalBlockMatrix object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:259\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bA\n+ABlock getA()\n+Get a view of the A matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:312\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n+GaussianFactor Base\n+Typedef to base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+~JacobianFactor() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\bO_\bb_\bj_\be_\bc_\bt\n+const VerticalBlockMatrix & matrixObject() const\n+Return the full augmented Jacobian matrix of this factor as a\n+VerticalBlockMatrix object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:256\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\br_\bo_\bw_\bs\n+size_t rows() const\n+return the number of rows in the corresponding linear system\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:283\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bl_\bs\n+size_t cols() const\n+return the number of columns in the corresponding linear system\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:288\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bA\n+constABlock getA(const_iterator variable) const\n+Get a view of the A matrix for the variable pointed to by the given key\n+iterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:300\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+In Gaussian factors, the error function returns either the negative log-\n+likelihood,...\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+is the normalization constant.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+ * _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00722.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00722.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/VectorValues.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/BinaryJacobianFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,50 +94,47 @@\n \n \n \n \n \n
\n \n-
VectorValues.cpp File Reference
\n+Classes |\n+Namespaces
\n+
BinaryJacobianFactor.h File Reference
\n \n
\n \n-

Implementations for VectorValues. \n+

A binary JacobianFactor specialization that uses fixed matrix math for speed. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::BinaryJacobianFactor< M, N1, N2 >
 A binary JacobianFactor specialization that uses fixed matrix math for speed. More...
 
struct  gtsam::traits< BinaryJacobianFactor< M, N1, N2 > >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-GTSAM_EXPORT ostream & gtsam::operator<< (ostream &os, const VectorValues &v)
 
\n-bool gtsam::internal::structureCompareOp (const boost::tuple< VectorValues::value_type, VectorValues::value_type > &vv)
 
\n-VectorValues gtsam::operator* (const double a, const VectorValues &v)
 
\n

Detailed Description

\n-

Implementations for VectorValues.

\n-
Author
Richard Roberts
\n-
\n-Alex Cunningham
\n+

A binary JacobianFactor specialization that uses fixed matrix math for speed.

\n+
Date
June 2015
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-VectorValues.cpp File Reference\n-Implementations for _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+BinaryJacobianFactor.h File Reference\n+A binary _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br specialization that uses fixed matrix math for speed.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bM_\b,_\b _\bN_\b1_\b,_\b _\bN_\b2_\b _\b>\n+\u00a0 A binary _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br specialization that uses fixed matrix math for\n+ speed. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bM_\b,_\b _\bN_\b1_\b,_\b _\bN_\b2_\b _\b>_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-GTSAM_EXPORT ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &v)\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:s\bst\btr\bru\buc\bct\btu\bur\bre\beC\bCo\bom\bmp\bpa\bar\bre\beO\bOp\bp (const boost::\n- tuple< _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:\n- _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be > &vv)\n-\u00a0\n- _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br*\b* (const double a, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n- &v)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implementations for _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs.\n+A binary _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br specialization that uses fixed matrix math for speed.\n+ Date\n+ June 2015\n Author\n- Richard Roberts\n- Alex Cunningham\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bc_\bp_\bp\n+ * _\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00725.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00725.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SparseEigen.h File Reference\n \n \n \n \n \n \n \n@@ -94,47 +94,62 @@\n \n \n \n \n \n
\n \n-
GaussianFactor.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
SparseEigen.h File Reference
\n \n
\n \n-

A factor with a quadratic error function - a Gaussian. \n+

Utilities for creating Eigen sparse matrices (gtsam::SparseEigen) \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::GaussianFactor
 An abstract virtual base class for JacobianFactor and HessianFactor. More...
 
struct  gtsam::traits< GaussianFactor >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+

\n+Typedefs

typedef Eigen::SparseMatrix< double, Eigen::ColMajor, int > gtsam::SparseEigen
 Eigen-format sparse matrix.
 
\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+SparseEigen gtsam::sparseJacobianEigen (const GaussianFactorGraph &gfg, const Ordering &ordering)
 Constructs an Eigen-format SparseMatrix of a GaussianFactorGraph.
 
\n+SparseEigen gtsam::sparseJacobianEigen (const GaussianFactorGraph &gfg)
 
\n

Detailed Description

\n-

A factor with a quadratic error function - a Gaussian.

\n-

GaussianFactor

Author
Richard Roberts, Christian Potthast
\n+

Utilities for creating Eigen sparse matrices (gtsam::SparseEigen)

\n+
Date
Aug 2019
\n+
Author
Mandy Xie
\n+
\n+Fan Jiang
\n+
\n+Gerry Chen
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,38 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianFactor.h File Reference\n-A factor with a quadratic error function - a Gaussian. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SparseEigen.h File Reference\n+Utilities for creating Eigen sparse matrices (_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn) _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 An abstract virtual base class for _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br and _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef Eigen::SparseMatrix< double, Eigen::\n+ ColMajor, int >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn\n+\u00a0 Eigen-format sparse matrix.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsp\bpa\bar\brs\bse\beJ\bJa\bac\bco\bob\bbi\bia\ban\bnE\bEi\big\bge\ben\bn (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg, const\n+ _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering)\n+\u00a0 Constructs an Eigen-format SparseMatrix of a _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n+\u00a0\n+_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsp\bpa\bar\brs\bse\beJ\bJa\bac\bco\bob\bbi\bia\ban\bnE\bEi\big\bge\ben\bn (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A factor with a quadratic error function - a Gaussian.\n-GaussianFactor\n+Utilities for creating Eigen sparse matrices (_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn)\n+ Date\n+ Aug 2019\n Author\n- Richard Roberts, Christian Potthast\n+ Mandy Xie\n+ Fan Jiang\n+ Gerry Chen\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00725.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00725.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a00725 = [\n- [\"gtsam::GaussianFactor\", \"a03780.html\", \"a03780\"],\n- [\"gtsam::traits< GaussianFactor >\", \"a03784.html\", null]\n+ [\"SparseEigen\", \"a00725.html#a52b9b28b076a8ae17d6d3d72ee1229c3\", null],\n+ [\"sparseJacobianEigen\", \"a00725.html#aa9013a9053629f0c00b97726d9d8e19e\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00725_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00725_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SparseEigen.h Source File\n \n \n \n \n \n \n \n@@ -98,170 +98,79 @@\n
No Matches
\n \n \n \n \n \n
\n-
GaussianFactor.h
\n+
SparseEigen.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19// \\callgraph
\n-
20
\n-
21#pragma once
\n-
22
\n-\n-
24#include <gtsam/base/Matrix.h>
\n-
25#include <gtsam/base/Testable.h>
\n-
26
\n-
27namespace gtsam {
\n+
24#pragma once
\n+
25
\n+\n+\n
28
\n-
29 // Forward declarations
\n-
30 class VectorValues;
\n-
31 class Scatter;
\n-
32 class SymmetricBlockMatrix;
\n-
33
\n-
\n-
38 class GTSAM_EXPORT GaussianFactor : public Factor
\n-
39 {
\n-
40 public:
\n-\n-
42 typedef boost::shared_ptr<This> shared_ptr;
\n-
43 typedef Factor Base;
\n-
44
\n-\n-
47
\n-
50 template<typename CONTAINER>
\n-
51 GaussianFactor(const CONTAINER& keys) : Base(keys) {}
\n-
52
\n-
54 virtual ~GaussianFactor() {}
\n-
55
\n-
56 // Implementing Testable interface
\n+
29#include <Eigen/Sparse>
\n+
30
\n+
31namespace gtsam {
\n+
32
\n+
35typedef Eigen::SparseMatrix<double, Eigen::ColMajor, int> SparseEigen;
\n+
36
\n+
\n+\n+
39 const GaussianFactorGraph &gfg, const Ordering &ordering) {
\n+
40 gttic_(SparseEigen_sparseJacobianEigen);
\n+
41 // intermediate `entries` vector is kind of unavoidable due to how expensive
\n+
42 // factor->rows() is, which prevents us from populating SparseEigen directly.
\n+
43 size_t nrows, ncols;
\n+
44 auto entries = gfg.sparseJacobian(ordering, nrows, ncols);
\n+
45 // declare sparse matrix
\n+
46 SparseEigen Ab(nrows, ncols);
\n+
47 // See Eigen::set_from_triplets. This is about 5% faster.
\n+
48 // pass 1: count the nnz per inner-vector
\n+
49 std::vector<int> nnz(ncols, 0);
\n+
50 for (const auto &entry : entries) nnz[std::get<1>(entry)]++;
\n+
51 Ab.reserve(nnz);
\n+
52 // pass 2: insert the elements
\n+
53 for (const auto &entry : entries)
\n+
54 Ab.insert(std::get<0>(entry), std::get<1>(entry)) = std::get<2>(entry);
\n+
55 return Ab;
\n+
56}
\n+
\n
57
\n-
59 void print(
\n-
60 const std::string& s = "",
\n-
61 const KeyFormatter& formatter = DefaultKeyFormatter) const override = 0;
\n+
58SparseEigen sparseJacobianEigen(const GaussianFactorGraph &gfg) {
\n+
59 gttic_(SparseEigen_sparseJacobianEigen_defaultOrdering);
\n+
60 return sparseJacobianEigen(gfg, Ordering(gfg.keys()));
\n+
61}
\n
62
\n-
64 virtual bool equals(const GaussianFactor& lf, double tol = 1e-9) const = 0;
\n-
65
\n-
73 virtual double error(const VectorValues& c) const;
\n-
74
\n-
79 double error(const HybridValues& c) const override;
\n-
80
\n-
82 virtual DenseIndex getDim(const_iterator variable) const = 0;
\n-
83
\n-
91 virtual Matrix augmentedJacobian() const = 0;
\n-
92
\n-
100 virtual std::pair<Matrix,Vector> jacobian() const = 0;
\n-
101
\n-
110 virtual Matrix augmentedInformation() const = 0;
\n-
111
\n-
115 virtual Matrix information() const = 0;
\n-
116
\n-
118 VectorValues hessianDiagonal() const;
\n-
119
\n-
121 virtual void hessianDiagonalAdd(VectorValues& d) const = 0;
\n-
122
\n-
124 virtual void hessianDiagonal(double* d) const = 0;
\n-
125
\n-
127 virtual std::map<Key,Matrix> hessianBlockDiagonal() const = 0;
\n-
128
\n-\n-
131
\n-\n-
138
\n-
144 virtual void updateHessian(const KeyVector& keys,
\n-
145 SymmetricBlockMatrix* info) const = 0;
\n-
146
\n-
148 virtual void multiplyHessianAdd(double alpha, const VectorValues& x, VectorValues& y) const = 0;
\n-
149
\n-
151 virtual VectorValues gradientAtZero() const = 0;
\n-
152
\n-
154 virtual void gradientAtZero(double* d) const = 0;
\n-
155
\n-
157 virtual Vector gradient(Key key, const VectorValues& x) const = 0;
\n-
158
\n-
159 // Determine position of a given key
\n-
160 template <typename CONTAINER>
\n-
161 static DenseIndex Slot(const CONTAINER& keys, Key key) {
\n-
162 return std::find(keys.begin(), keys.end(), key) - keys.begin();
\n-
163 }
\n-
164
\n-
165 private:
\n-
167 friend class boost::serialization::access;
\n-
168 template<class ARCHIVE>
\n-
169 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
170 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
171 }
\n-
172
\n-
173 }; // GaussianFactor
\n-
\n-
174
\n-
176template<>
\n-
\n-
177struct traits<GaussianFactor> : public Testable<GaussianFactor> {
\n-
178};
\n-
\n-
179
\n-
180} // \\ namespace gtsam
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Concept check for values that can be used in unit tests.
\n-
The base class for all factors.
\n+
63} // namespace gtsam
\n+
Linear Factor Graph where all factors are Gaussians.
\n+
Factor Graph Values.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Factor.h:68
\n-
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n-
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n-
virtual DenseIndex getDim(const_iterator variable) const =0
Return the dimension of the variable pointed to by the given key iterator.
\n-
virtual std::map< Key, Matrix > hessianBlockDiagonal() const =0
Return the block diagonal of the Hessian for this factor.
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n-
virtual std::pair< Matrix, Vector > jacobian() const =0
Return the dense Jacobian and right-hand-side , with the noise models baked into A and b.
\n-
virtual Vector gradient(Key key, const VectorValues &x) const =0
Gradient wrt a key at any values.
\n-
virtual GaussianFactor::shared_ptr clone() const =0
Clone a factor (make a deep copy)
\n-
virtual Matrix information() const =0
Return the non-augmented information matrix represented by this GaussianFactor.
\n-
Factor Base
Our base class.
Definition GaussianFactor.h:43
\n-
virtual ~GaussianFactor()
Destructor.
Definition GaussianFactor.h:54
\n-
virtual VectorValues gradientAtZero() const =0
A'*b for Jacobian, eta for Hessian.
\n-
GaussianFactor(const CONTAINER &keys)
Construct from container of keys.
Definition GaussianFactor.h:51
\n-
virtual void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const =0
y += alpha * A'*A*x
\n-
virtual bool equals(const GaussianFactor &lf, double tol=1e-9) const =0
Equals for testable.
\n-
virtual Matrix augmentedInformation() const =0
Return the augmented information matrix represented by this GaussianFactor.
\n-
virtual Matrix augmentedJacobian() const =0
Return a dense Jacobian matrix, augmented with b with the noise models baked into A and b.
\n-
GaussianFactor()
Default constructor creates empty factor.
Definition GaussianFactor.h:46
\n-
virtual GaussianFactor::shared_ptr negate() const =0
Construct the corresponding anti-factor to negate information stored stored in this factor.
\n-
virtual void hessianDiagonal(double *d) const =0
Raw memory access version of hessianDiagonal.
\n-
GaussianFactor This
This class.
Definition GaussianFactor.h:41
\n-
virtual void updateHessian(const KeyVector &keys, SymmetricBlockMatrix *info) const =0
Update an information matrix by adding the information corresponding to this factor (used internally ...
\n-
void print(const std::string &s="", const KeyFormatter &formatter=DefaultKeyFormatter) const override=0
print
\n-
virtual void hessianDiagonalAdd(VectorValues &d) const =0
Add the current diagonal to a VectorValues instance.
\n-
virtual void gradientAtZero(double *d) const =0
Raw memory access version of gradientAtZero.
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
The Factor::error simply extracts the.
\n+
Eigen::SparseMatrix< double, Eigen::ColMajor, int > SparseEigen
Eigen-format sparse matrix.
Definition SparseEigen.h:35
\n+
SparseEigen sparseJacobianEigen(const GaussianFactorGraph &gfg, const Ordering &ordering)
Constructs an Eigen-format SparseMatrix of a GaussianFactorGraph.
Definition SparseEigen.h:38
\n+
Definition Ordering.h:34
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
std::vector< std::tuple< int, int, double > > sparseJacobian(const Ordering &ordering, size_t &nrows, size_t &ncols) const
Returns a sparse augmented Jacbian matrix as a vector of i, j, and s, where i(k) and j(k) are the bas...
Definition GaussianFactorGraph.cpp:119
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,255 +1,89 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianFactor.h\n+SparseEigen.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19// \\callgraph\n-20\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n+24#pragma once\n+25\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n 28\n-29 // Forward declarations\n-30 class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n-31 class Scatter;\n-32 class SymmetricBlockMatrix;\n-33\n-_\b3_\b8 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bF_\ba_\bc_\bt_\bo_\br\n-39 {\n-40 public:\n-_\b4_\b1 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-_\b4_\b2 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-_\b4_\b3 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-44\n-_\b4_\b6 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-47\n-50 template\n-_\b5_\b1 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER& keys) : _\bB_\ba_\bs_\be(keys) {}\n-52\n-_\b5_\b4 virtual _\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-55\n-56 // Implementing Testable interface\n+29#include \n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32\n+_\b3_\b5typedef Eigen::SparseMatrix _\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn;\n+36\n+_\b3_\b8_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn _\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bE_\bi_\bg_\be_\bn(\n+39 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering) {\n+40 gttic_(SparseEigen_sparseJacobianEigen);\n+41 // intermediate `entries` vector is kind of unavoidable due to how expensive\n+42 // factor->rows() is, which prevents us from populating SparseEigen\n+directly.\n+43 size_t nrows, ncols;\n+44 auto entries = gfg._\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(ordering, nrows, ncols);\n+45 // declare sparse matrix\n+46 _\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn Ab(nrows, ncols);\n+47 // See Eigen::set_from_triplets. This is about 5% faster.\n+48 // pass 1: count the nnz per inner-vector\n+49 std::vector nnz(ncols, 0);\n+50 for (const auto &entry : entries) nnz[std::get<1>(entry)]++;\n+51 Ab.reserve(nnz);\n+52 // pass 2: insert the elements\n+53 for (const auto &entry : entries)\n+54 Ab.insert(std::get<0>(entry), std::get<1>(entry)) = std::get<2>(entry);\n+55 return Ab;\n+56}\n 57\n-_\b5_\b9 void _\bp_\br_\bi_\bn_\bt(\n-60 const std::string& s = \"\",\n-61 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override = 0;\n+58_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn _\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bE_\bi_\bg_\be_\bn(const GaussianFactorGraph &gfg) {\n+59 gttic_(SparseEigen_sparseJacobianEigen_defaultOrdering);\n+60 return _\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bE_\bi_\bg_\be_\bn(gfg, Ordering(gfg.keys()));\n+61}\n 62\n-_\b6_\b4 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& lf, double tol = 1e-9) const = 0;\n-65\n-73 virtual double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-74\n-79 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n-80\n-_\b8_\b2 virtual _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bD_\bi_\bm(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) const = 0;\n-83\n-_\b9_\b1 virtual Matrix _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() const = 0;\n-92\n-_\b1_\b0_\b0 virtual std::pair _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn() const = 0;\n-101\n-_\b1_\b1_\b0 virtual Matrix _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn() const = 0;\n-111\n-_\b1_\b1_\b5 virtual Matrix _\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn() const = 0;\n-116\n-118 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs hessianDiagonal() const;\n-119\n-_\b1_\b2_\b1 virtual void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bA_\bd_\bd(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& d) const = 0;\n-122\n-_\b1_\b2_\b4 virtual void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(double* d) const = 0;\n-125\n-_\b1_\b2_\b7 virtual std::map _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bB_\bl_\bo_\bc_\bk_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl() const = 0;\n-128\n-_\b1_\b3_\b0 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const = 0;\n-131\n-_\b1_\b3_\b7 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bn_\be_\bg_\ba_\bt_\be() const = 0;\n-138\n-_\b1_\b4_\b4 virtual void _\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys,\n-145 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx* info) const = 0;\n-146\n-_\b1_\b4_\b8 virtual void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const = 0;\n-149\n-_\b1_\b5_\b1 virtual _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo() const = 0;\n-152\n-_\b1_\b5_\b4 virtual void _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo(double* d) const = 0;\n-155\n-_\b1_\b5_\b7 virtual Vector _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt(_\bK_\be_\by key, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const = 0;\n-158\n-159 // Determine position of a given key\n-160 template \n-161 static _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx Slot(const CONTAINER& keys, _\bK_\be_\by key) {\n-162 return std::find(keys.begin(), keys.end(), key) - keys.begin();\n-163 }\n-164\n-165 private:\n-_\b1_\b6_\b7 friend class boost::serialization::access;\n-168 template\n-169 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-170 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-171 }\n-172\n-173 }; // GaussianFactor\n-174\n-176template<>\n-_\b1_\b7_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-178};\n-179\n-180} // \\ namespace gtsam\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-The base class for all factors.\n+63} // namespace gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::const_iterator const_iterator\n-Const iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-An abstract virtual base class for JacobianFactor and HessianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n-virtual DenseIndex getDim(const_iterator variable) const =0\n-Return the dimension of the variable pointed to by the given key iterator.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bB_\bl_\bo_\bc_\bk_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-virtual std::map< Key, Matrix > hessianBlockDiagonal() const =0\n-Return the block diagonal of the Hessian for this factor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-virtual std::pair< Matrix, Vector > jacobian() const =0\n-Return the dense Jacobian and right-hand-side , with the noise models baked\n-into A and b.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt\n-virtual Vector gradient(Key key, const VectorValues &x) const =0\n-Gradient wrt a key at any values.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual GaussianFactor::shared_ptr clone() const =0\n-Clone a factor (make a deep copy)\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-virtual Matrix information() const =0\n-Return the non-augmented information matrix represented by this GaussianFactor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-Factor Base\n-Our base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-virtual ~GaussianFactor()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n-virtual VectorValues gradientAtZero() const =0\n-A'*b for Jacobian, eta for Hessian.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-GaussianFactor(const CONTAINER &keys)\n-Construct from container of keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n-virtual void multiplyHessianAdd(double alpha, const VectorValues &x,\n-VectorValues &y) const =0\n-y += alpha * A'*A*x\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-virtual bool equals(const GaussianFactor &lf, double tol=1e-9) const =0\n-Equals for testable.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-virtual Matrix augmentedInformation() const =0\n-Return the augmented information matrix represented by this GaussianFactor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-virtual Matrix augmentedJacobian() const =0\n-Return a dense Jacobian matrix, augmented with b with the noise models baked\n-into A and b.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-GaussianFactor()\n-Default constructor creates empty factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be\n-virtual GaussianFactor::shared_ptr negate() const =0\n-Construct the corresponding anti-factor to negate information stored stored in\n-this factor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-virtual void hessianDiagonal(double *d) const =0\n-Raw memory access version of hessianDiagonal.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-GaussianFactor This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn\n-virtual void updateHessian(const KeyVector &keys, SymmetricBlockMatrix *info)\n-const =0\n-Update an information matrix by adding the information corresponding to this\n-factor (used internally ...\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const override=0\n-print\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bA_\bd_\bd\n-virtual void hessianDiagonalAdd(VectorValues &d) const =0\n-Add the current diagonal to a VectorValues instance.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n-virtual void gradientAtZero(double *d) const =0\n-Raw memory access version of gradientAtZero.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn\n+Eigen::SparseMatrix< double, Eigen::ColMajor, int > SparseEigen\n+Eigen-format sparse matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SparseEigen.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bE_\bi_\bg_\be_\bn\n+SparseEigen sparseJacobianEigen(const GaussianFactorGraph &gfg, const Ordering\n+&ordering)\n+Constructs an Eigen-format SparseMatrix of a GaussianFactorGraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SparseEigen.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+std::vector< std::tuple< int, int, double > > sparseJacobian(const Ordering\n+&ordering, size_t &nrows, size_t &ncols) const\n+Returns a sparse augmented Jacbian matrix as a vector of i, j, and s, where i\n+(k) and j(k) are the bas...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.cpp:119\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00731.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00731.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,52 +94,47 @@\n \n \n \n \n \n
\n \n-
NoiseModel.cpp File Reference
\n+Classes |\n+Namespaces
\n+
GaussianFactor.h File Reference
\n \n
\n+\n+

A factor with a quadratic error function - a Gaussian. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::GaussianFactor
 An abstract virtual base class for JacobianFactor and HessianFactor. More...
 
struct  gtsam::traits< GaussianFactor >
 traits More...
 
\n \n \n \n \n-\n-\n-\n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
namespace  gtsam::noiseModel
 All noise models live in the noiseModel namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-template<class MATRIX >
void gtsam::noiseModel::updateAb (MATRIX &Ab, int j, const Vector &a, const Vector &rd)
 
\n-boost::optional< Vector > gtsam::noiseModel::checkIfDiagonal (const Matrix &M)
 
\n-template<typename VECTOR >
boost::optional< size_t > gtsam::noiseModel::check_if_constraint (VECTOR a, const Vector &invsigmas, size_t m)
 
\n

Detailed Description

\n-
Date
Jan 13, 2010
\n-
Author
Richard Roberts
\n-
\n-Frank Dellaert
\n+

A factor with a quadratic error function - a Gaussian.

\n+

GaussianFactor

Author
Richard Roberts, Christian Potthast
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-NoiseModel.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GaussianFactor.h File Reference\n+A factor with a quadratic error function - a Gaussian. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 An abstract virtual base class for _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br and _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-\u00a0 All noise models live in the _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl namespace.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\boi\bis\bse\beM\bMo\bod\bde\bel\bl:\b::\b:u\bup\bpd\bda\bat\bte\beA\bAb\bb (MATRIX &Ab, int j,\n- const Vector &a, const Vector &rd)\n-\u00a0\n-boost::optional< Vector >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\boi\bis\bse\beM\bMo\bod\bde\bel\bl:\b::\b:c\bch\bhe\bec\bck\bkI\bIf\bfD\bDi\bia\bag\bgo\bon\bna\bal\bl (const Matrix &M)\n-\u00a0\n-template\n-boost::optional< size_t >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\boi\bis\bse\beM\bMo\bod\bde\bel\bl:\b::\b:c\bch\bhe\bec\bck\bk_\b_i\bif\bf_\b_c\bco\bon\bns\bst\btr\bra\bai\bin\bnt\bt (VECTOR a,\n- const Vector &invsigmas, size_t m)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Jan 13, 2010\n+A factor with a quadratic error function - a Gaussian.\n+GaussianFactor\n Author\n- Richard Roberts\n- Frank Dellaert\n+ Richard Roberts, Christian Potthast\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bc_\bp_\bp\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00734.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00734.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/ConjugateGradientSolver.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,55 +94,35 @@\n \n \n \n \n \n
\n \n-
ConjugateGradientSolver.h File Reference
\n+Namespaces
\n+
GaussianFactor.cpp File Reference
\n \n
\n \n-

Implementation of Conjugate Gradient solver for a linear system. \n+

A factor with a quadratic error function - a Gaussian. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::ConjugateGradientParameters
 parameters for the conjugate gradient method More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

\n-template<class S , class V >
gtsam::preconditionedConjugateGradient (const S &system, const V &initial, const ConjugateGradientParameters &parameters)
 
\n

Detailed Description

\n-

Implementation of Conjugate Gradient solver for a linear system.

\n-
Author
Yong-Dian Jian
\n-
\n-Sungtae An
\n-
Date
Nov 6, 2014
\n+

A factor with a quadratic error function - a Gaussian.

\n+

GaussianFactor

Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-ConjugateGradientSolver.h File Reference\n-Implementation of Conjugate Gradient solver for a linear system. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-\u00a0 parameters for the conjugate gradient method _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GaussianFactor.cpp File Reference\n+A factor with a quadratic error function - a Gaussian. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-V\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\bed\bdC\bCo\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\bt (const S &system, const V &initial,\n- const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implementation of Conjugate Gradient solver for a linear system.\n+A factor with a quadratic error function - a Gaussian.\n+GaussianFactor\n Author\n- Yong-Dian Jian\n- Sungtae An\n- Date\n- Nov 6, 2014\n+ Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00737.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00737.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative-inl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianConditional.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,52 +94,35 @@\n \n \n \n \n \n
\n \n-
iterative-inl.h File Reference
\n+Namespaces
\n+
GaussianConditional.cpp File Reference
\n \n
\n \n-

Iterative methods, template implementation. \n+

Conditional Gaussian Base class. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-

\n-Classes

struct  gtsam::CGState< S, V, E >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n

\n-Functions

template<class S , class V , class E >
gtsam::conjugateGradients (const S &Ab, V x, const ConjugateGradientParameters &parameters, bool steepest=false)
 Method of conjugate gradients (CG) template \"System\" class S needs gradient(S,v), e=S*v, v=S^e \"Vector\" class V needs dot(v,v), -v, v+v, s*v \"Vector\" class E needs dot(v,v)
 
\n

Detailed Description

\n-

Iterative methods, template implementation.

\n-
Author
Frank Dellaert
\n-
Date
Dec 28, 2009
\n+

Conditional Gaussian Base class.

\n+
Author
Christian Potthast, Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-iterative-inl.h File Reference\n-Iterative methods, template implementation. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bG_\bS_\bt_\ba_\bt_\be_\b<_\b _\bS_\b,_\b _\bV_\b,_\b _\bE_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GaussianConditional.cpp File Reference\n+Conditional Gaussian Base class. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-V\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bs (const S &Ab, V x, const\n- _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters, bool steepest=false)\n- Method of conjugate gradients (CG) template \"System\" class S needs gradient\n-\u00a0 (S,v), e=S*v, v=S^e \"Vector\" class V needs dot(v,v), -v, v+v, s*v \"Vector\"\n- class E needs dot(v,v)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Iterative methods, template implementation.\n+Conditional Gaussian Base class.\n Author\n- Frank Dellaert\n- Date\n- Dec 28, 2009\n+ Christian Potthast, Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00743.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00743.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/linearExceptions.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/RegularJacobianFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,45 @@\n \n \n \n \n \n
\n \n-
linearExceptions.cpp File Reference
\n+
RegularJacobianFactor.h File Reference
\n
\n
\n \n-

Exceptions that may be thrown by linear solver components. \n+

JacobianFactor class with fixed sized blcoks. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::RegularJacobianFactor< D >
 JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Exceptions that may be thrown by linear solver components.

\n-
Author
Richard Roberts
\n-
Date
Aug 17, 2012
\n+

JacobianFactor class with fixed sized blcoks.

\n+
Author
Sungtae An
\n+
Date
Nov 11, 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-linearExceptions.cpp File Reference\n-Exceptions that may be thrown by linear solver components. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+RegularJacobianFactor.h File Reference\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br class with fixed sized blcoks. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bD_\b _\b>\n+\u00a0 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br with constant sized blocks Provides raw memory access\n+ versions of linear operator. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Exceptions that may be thrown by linear solver components.\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br class with fixed sized blcoks.\n Author\n- Richard Roberts\n+ Sungtae An\n Date\n- Aug 17, 2012\n+ Nov 11, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bc_\bp_\bp\n+ * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00746.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00746.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianEliminationTree.h File Reference\n \n \n \n \n \n \n \n@@ -96,50 +96,40 @@\n \n \n \n
\n \n-
GaussianBayesTree.h File Reference
\n+
GaussianEliminationTree.h File Reference
\n
\n
\n \n-

Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n-\n-\n-\n+\n \n

\n Classes

class  gtsam::GaussianBayesTreeClique
 A clique in a GaussianBayesTree. More...
 
class  gtsam::GaussianBayesTree
 A Bayes tree representing a Gaussian density. More...
 
struct  gtsam::traits< GaussianBayesTree >
 traits More...
class  gtsam::GaussianEliminationTree
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.

\n-

GaussianBayesTree

Author
Frank Dellaert
\n+
Date
Mar 29, 2013
\n+
Author
Frank Dellaert
\n
\n Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianBayesTree.h File Reference\n-Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n+GaussianEliminationTree.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-\u00a0 A clique in a _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-\u00a0 A Bayes tree representing a Gaussian density. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n-GaussianBayesTree\n+ Date\n+ Mar 29, 2013\n Author\n Frank Dellaert\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00746.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00746.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a00746 = [\n- [\"gtsam::GaussianBayesTreeClique\", \"a03752.html\", null],\n- [\"gtsam::GaussianBayesTree\", \"a03756.html\", \"a03756\"],\n- [\"gtsam::traits< GaussianBayesTree >\", \"a03760.html\", null]\n+ [\"gtsam::GaussianEliminationTree\", \"a03776.html\", \"a03776\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00746_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00746_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianEliminationTree.h Source File\n \n \n \n \n \n \n \n@@ -98,120 +98,78 @@\n
No Matches
\n \n \n \n \n \n
\n-
GaussianBayesTree.h
\n+
GaussianEliminationTree.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-\n-\n-\n+
19#pragma once
\n+
20
\n+\n+\n+\n+
24
\n+
25namespace gtsam {
\n
26
\n-
27namespace gtsam {
\n-
28
\n-
29 // Forward declarations
\n-\n-
31 class VectorValues;
\n-
32
\n-
33 /* ************************************************************************* */
\n-
\n-
35 class GTSAM_EXPORT GaussianBayesTreeClique :
\n-
36 public BayesTreeCliqueBase<GaussianBayesTreeClique, GaussianFactorGraph>
\n-
37 {
\n-
38 public:
\n-\n-\n-
41 typedef boost::shared_ptr<This> shared_ptr;
\n-
42 typedef boost::weak_ptr<This> weak_ptr;
\n-\n-
44 virtual ~GaussianBayesTreeClique() {}
\n-
45 GaussianBayesTreeClique(const boost::shared_ptr<GaussianConditional>& conditional) : Base(conditional) {}
\n-
46 };
\n-
\n-
47
\n-
48 /* ************************************************************************* */
\n-
\n-
50 class GTSAM_EXPORT GaussianBayesTree :
\n-
51 public BayesTree<GaussianBayesTreeClique>
\n-
52 {
\n-
53 private:
\n-\n-
55
\n-
56 public:
\n-
57 typedef GaussianBayesTree This;
\n-
58 typedef boost::shared_ptr<This> shared_ptr;
\n-
59
\n-\n+
\n+
27 class GTSAM_EXPORT GaussianEliminationTree :
\n+
28 public EliminationTree<GaussianBayesNet, GaussianFactorGraph>
\n+
29 {
\n+
30 public:
\n+\n+\n+
33 typedef boost::shared_ptr<This> shared_ptr;
\n+
34
\n+\n+
44 const VariableIndex& structure, const Ordering& order);
\n+
45
\n+\n+
52 const Ordering& order);
\n+
53
\n+
55 bool equals(const This& other, double tol = 1e-9) const;
\n+
56
\n+
57 private:
\n+
58
\n+
59 friend class ::EliminationTreeTester;
\n+
60
\n+
61 };
\n+
\n
62
\n-
64 bool equals(const This& other, double tol = 1e-9) const;
\n-
65
\n-
67 VectorValues optimize() const;
\n-
68
\n-
94 VectorValues optimizeGradientSearch() const;
\n-
95
\n-
101 VectorValues gradient(const VectorValues& x0) const;
\n-
102
\n-
108 VectorValues gradientAtZero() const;
\n-
109
\n-
111 double error(const VectorValues& x) const;
\n-
112
\n-
118 double determinant() const;
\n-
119
\n-
125 double logDeterminant() const;
\n-
126
\n-
129 Matrix marginalCovariance(Key key) const;
\n-
130 };
\n-
\n-
131
\n-
133 template<>
\n-
\n-
134 struct traits<GaussianBayesTree> : public Testable<GaussianBayesTree> {
\n-
135 };
\n-
\n-
136
\n-
137} //\\ namespace gtsam
\n-
Base class for cliques of a BayesTree.
\n-
Bayes Tree is a tree of cliques of a Bayes Chain.
\n-
Chordal Bayes Net, the result of eliminating a factor graph.
\n-
Linear Factor Graph where all factors are Gaussians.
\n+
63}
\n+\n+
Chordal Bayes Net, the result of eliminating a factor graph.
\n+
Linear Factor Graph where all factors are Gaussians.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Bayes tree.
Definition BayesTree.h:67
\n-
This is the base class for BayesTree cliques.
Definition BayesTreeCliqueBase.h:50
\n-
A clique in a GaussianBayesTree.
Definition GaussianBayesTree.h:37
\n-
A Bayes tree representing a Gaussian density.
Definition GaussianBayesTree.h:52
\n-
GaussianBayesTree()
Default constructor, creates an empty Bayes tree.
Definition GaussianBayesTree.h:61
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
is the normalization constant.
\n-
The Factor::error simply extracts the.
\n+
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n+
Definition Ordering.h:34
\n+
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n+
Definition GaussianEliminationTree.h:29
\n+
GaussianEliminationTree This
This class.
Definition GaussianEliminationTree.h:32
\n+
EliminationTree< GaussianBayesNet, GaussianFactorGraph > Base
Base class.
Definition GaussianEliminationTree.h:31
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition GaussianEliminationTree.h:33
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,146 +1,92 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianBayesTree.h\n+GaussianEliminationTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh>\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n 26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n-28\n-29 // Forward declarations\n-30 class _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-31 class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n-32\n-33 /* *************************************************************************\n-*/\n-_\b3_\b5 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be :\n-36 public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-37 {\n-38 public:\n-39 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be _\bT_\bh_\bi_\bs;\n-40 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>\n-_\bB_\ba_\bs_\be;\n-41 typedef boost::shared_ptr shared_ptr;\n-42 typedef boost::weak_ptr weak_ptr;\n-43 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n-44 virtual _\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n-45 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be(const boost::shared_ptr&\n-conditional) : _\bB_\ba_\bs_\be(conditional) {}\n-46 };\n-47\n-48 /* *************************************************************************\n-*/\n-_\b5_\b0 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be :\n-51 public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-52 {\n-53 private:\n-54 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bB_\ba_\bs_\be;\n-55\n-56 public:\n-57 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-58 typedef boost::shared_ptr shared_ptr;\n-59\n-_\b6_\b1 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() {}\n+_\b2_\b7 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n+28 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+29 {\n+30 public:\n+_\b3_\b1 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n+_\b3_\b2 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+_\b3_\b3 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+34\n+43 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n+44 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+45\n+51 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n+52 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+53\n+55 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n+56\n+57 private:\n+58\n+59 friend class ::EliminationTreeTester;\n+60\n+61 };\n 62\n-64 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n-65\n-67 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n-68\n-94 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimizeGradientSearch() const;\n-95\n-101 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradient(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x0) const;\n-102\n-108 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const;\n-109\n-111 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-112\n-118 double determinant() const;\n-119\n-125 double logDeterminant() const;\n-126\n-129 Matrix marginalCovariance(_\bK_\be_\by key) const;\n-130 };\n-131\n-133 template<>\n-_\b1_\b3_\b4 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-135 };\n-136\n-137} //\\ namespace gtsam\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n-Base class for cliques of a BayesTree.\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Bayes Tree is a tree of cliques of a Bayes Chain.\n+63}\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n Chordal Bayes Net, the result of eliminating a factor graph.\n _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Linear Factor Graph where all factors are Gaussians.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n-Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n-landmarkKey)\n-Optimize for triangulation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-This is the base class for BayesTree cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-A clique in a GaussianBayesTree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-A Bayes tree representing a Gaussian density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-GaussianBayesTree()\n-Default constructor, creates an empty Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-is the normalization constant.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+An elimination tree is a data structure used intermediately during elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+The VariableIndex class computes and stores the block column structure of a\n+factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+GaussianEliminationTree This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n+EliminationTree< GaussianBayesNet, GaussianFactorGraph > Base\n+Base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Shared pointer to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00749.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00749.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Errors.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphBuilder.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,87 +94,52 @@\n \n \n \n \n \n
\n \n-
Errors.h File Reference
\n+
SubgraphBuilder.cpp File Reference
\n
\n
\n-\n-

vector of errors \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

struct  gtsam::traits< Errors >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::Errors = FastList< Vector >
 Errors is a vector of errors.
 
\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 Functions

\n-Errors gtsam::createErrors (const VectorValues &V)
 Break V into pieces according to its start indices.
 
\n-void gtsam::print (const Errors &e, const std::string &s="Errors")
 Print an Errors instance.
 
\n-bool gtsam::equality (const Errors &actual, const Errors &expected, double tol)
 
\n-Errors gtsam::operator+ (const Errors &a, const Errors &b)
 Addition.
 
\n-Errors gtsam::operator- (const Errors &a, const Errors &b)
 Subtraction.
 
\n-Errors gtsam::operator- (const Errors &a)
 Negation.
 
\n-double gtsam::dot (const Errors &a, const Errors &b)
 Dot product.
 
\n-void gtsam::axpy (double alpha, const Errors &x, Errors &y)
 BLAS level 2 style AXPY, y := alpha*x + y
 
\n+ostream & gtsam::operator<< (ostream &os, const Subgraph::Edge &edge)
 
\n+ostream & gtsam::operator<< (ostream &os, const Subgraph &subgraph)
 
\n+ostream & gtsam::operator<< (ostream &os, const SubgraphBuilderParameters &p)
 
\n+GaussianFactorGraph gtsam::buildFactorSubgraph (const GaussianFactorGraph &gfg, const Subgraph &subgraph, const bool clone)
 Select the factors in a factor graph according to the subgraph.
 
std::pair< GaussianFactorGraph, GaussianFactorGraphgtsam::splitFactorGraph (const GaussianFactorGraph &factorGraph, const Subgraph &subgraph)
 Split the graph into a subgraph and the remaining edges.
 
\n

Detailed Description

\n-

vector of errors

\n-
Author
Frank Dellaert
\n+
Date
Dec 31, 2009
\n+
Author
Frank Dellaert, Yong-Dian Jian
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,54 +1,42 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Errors.h File Reference\n-vector of errors _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bE_\br_\br_\bo_\br_\bs_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SubgraphBuilder.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:E\bEr\brr\bro\bor\brs\bs = _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt< Vector >\n-\u00a0 Errors is a vector of errors.\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bcr\bre\bea\bat\bte\beE\bEr\brr\bro\bor\brs\bs (const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &V)\n-\u00a0 Break V into pieces according to its start indices.\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const _\bE_\br_\br_\bo_\br_\bs &e, const std::string &s=\"Errors\")\n-\u00a0 Print an Errors instance.\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bli\bit\bty\by (const _\bE_\br_\br_\bo_\br_\bs &actual, const _\bE_\br_\br_\bo_\br_\bs &expected, double\n- tol)\n-\u00a0\n-_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br+\b+ (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n-\u00a0 Addition.\n-\u00a0\n-_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br-\b- (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n-\u00a0 Subtraction.\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const\n+ _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bd_\bg_\be &edge)\n \u00a0\n-_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br-\b- (const _\bE_\br_\br_\bo_\br_\bs &a)\n-\u00a0 Negation.\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh\n+ &subgraph)\n \u00a0\n-double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdo\bot\bt (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n-\u00a0 Dot product.\n+ ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const\n+ _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p)\n \u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bax\bxp\bpy\by (double alpha, const _\bE_\br_\br_\bo_\br_\bs &x, _\bE_\br_\br_\bo_\br_\bs &y)\n-\u00a0 BLAS level 2 style AXPY, y := alpha*x + y\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:b\bbu\bui\bil\bld\bdF\bFa\bac\bct\bto\bor\brS\bSu\bub\bbg\bgr\bra\bap\bph\bh (const\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg, const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh\n+ &subgraph, const bool clone)\n+\u00a0 Select the factors in a factor graph according\n+ to the subgraph.\n+\u00a0\n+std::pair< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\bl_\bi_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh (const\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh >\u00a0 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factorGraph, const\n+ _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh &subgraph)\n+\u00a0 Split the graph into a subgraph and the\n+ remaining edges.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-vector of errors\n+ Date\n+ Dec 31, 2009\n Author\n- Frank Dellaert\n+ Frank Dellaert, Yong-Dian Jian\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\br_\br_\bo_\br_\bs_\b._\bh\n+ * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00749.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00749.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,4 @@\n var a00749 = [\n- [\"gtsam::traits< Errors >\", \"a03736.html\", null],\n- [\"Errors\", \"a00749.html#a74eb09e3192f06bae9de746aa981624a\", null],\n- [\"axpy\", \"a00749.html#a5644e12e89afaac433f5d61c3d8e9003\", null],\n- [\"createErrors\", \"a00749.html#aa84fa88db91d429bec261c655fc54bd6\", null],\n- [\"dot\", \"a00749.html#a106ec458ddb425604809da93346af55d\", null],\n- [\"operator+\", \"a00749.html#a552de56fca49d1b4942dd9b8e8357b0a\", null],\n- [\"operator-\", \"a00749.html#aa91c0485819ec2bfd249a922c81e3eb4\", null],\n- [\"operator-\", \"a00749.html#af2dc48a6a2e9abf4d0636578847a6b5a\", null],\n- [\"print\", \"a00749.html#a6abcac97e441f1454790ff53caa1b229\", null]\n+ [\"buildFactorSubgraph\", \"a00749.html#a0ec82adc6e13261cf4a012b65b301256\", null],\n+ [\"splitFactorGraph\", \"a00749.html#a2c7eca9f27b43b52756c1afd85478dd8\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00752.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00752.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphPreconditioner.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesTree.h File Reference\n \n \n \n \n \n \n \n@@ -96,41 +96,50 @@\n \n \n \n
\n \n-
SubgraphPreconditioner.h File Reference
\n+
GaussianBayesTree.h File Reference
\n
\n
\n \n+

Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n+\n+\n+\n+\n+\n \n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::SubgraphPreconditionerParameters
class  gtsam::GaussianBayesTreeClique
 A clique in a GaussianBayesTree. More...
 
class  gtsam::GaussianBayesTree
 A Bayes tree representing a Gaussian density. More...
 
class  gtsam::SubgraphPreconditioner
 Subgraph conditioner class, as explained in the RSS 2010 submission. More...
struct  gtsam::traits< GaussianBayesTree >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Dec 31, 2009
\n-
Author
Frank Dellaert, Yong-Dian Jian
\n+

Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.

\n+

GaussianBayesTree

Author
Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SubgraphPreconditioner.h File Reference\n+GaussianBayesTree.h File Reference\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n+\u00a0 A clique in a _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br\n-\u00a0 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh conditioner class, as explained in the RSS 2010 submission.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+\u00a0 A Bayes tree representing a Gaussian density. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Dec 31, 2009\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n+GaussianBayesTree\n Author\n- Frank Dellaert, Yong-Dian Jian\n+ Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00752.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00752.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,5 @@\n var a00752 = [\n- [\"gtsam::SubgraphPreconditionerParameters\", \"a04048.html\", null],\n- [\"gtsam::SubgraphPreconditioner\", \"a04052.html\", \"a04052\"]\n+ [\"gtsam::GaussianBayesTreeClique\", \"a03752.html\", null],\n+ [\"gtsam::GaussianBayesTree\", \"a03756.html\", \"a03756\"],\n+ [\"gtsam::traits< GaussianBayesTree >\", \"a03760.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00752_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00752_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphPreconditioner.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesTree.h Source File\n \n \n \n \n \n \n \n@@ -98,158 +98,120 @@\n
No Matches
\n \n \n \n \n \n
\n-
SubgraphPreconditioner.h
\n+
GaussianBayesTree.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-
21#include <gtsam/linear/Errors.h>
\n-\n-\n-\n-
25#include <gtsam/linear/Preconditioner.h>
\n-\n-
27#include <gtsam/dllexport.h>
\n+
20#pragma once
\n+
21
\n+\n+\n+\n+\n+
26
\n+
27namespace gtsam {
\n
28
\n-
29#include <boost/shared_ptr.hpp>
\n-
30
\n-
31#include <map>
\n+
29 // Forward declarations
\n+\n+
31 class VectorValues;
\n
32
\n-
33namespace gtsam {
\n-
34
\n-
35 // Forward declarations
\n-
36 class GaussianBayesNet;
\n-
37 class GaussianFactorGraph;
\n-
38 class VectorValues;
\n-
39
\n-
\n-\n-
41 typedef boost::shared_ptr<SubgraphPreconditionerParameters> shared_ptr;
\n-\n-
43 : builderParams(p) {}
\n-
44 SubgraphBuilderParameters builderParams;
\n-
45 };
\n-
\n-
46
\n-
\n-
54 class GTSAM_EXPORT SubgraphPreconditioner : public Preconditioner {
\n+
33 /* ************************************************************************* */
\n+
\n+
35 class GTSAM_EXPORT GaussianBayesTreeClique :
\n+
36 public BayesTreeCliqueBase<GaussianBayesTreeClique, GaussianFactorGraph>
\n+
37 {
\n+
38 public:
\n+\n+\n+
41 typedef boost::shared_ptr<This> shared_ptr;
\n+
42 typedef boost::weak_ptr<This> weak_ptr;
\n+\n+
44 virtual ~GaussianBayesTreeClique() {}
\n+
45 GaussianBayesTreeClique(const boost::shared_ptr<GaussianConditional>& conditional) : Base(conditional) {}
\n+
46 };
\n+
\n+
47
\n+
48 /* ************************************************************************* */
\n+
\n+
50 class GTSAM_EXPORT GaussianBayesTree :
\n+
51 public BayesTree<GaussianBayesTreeClique>
\n+
52 {
\n+
53 private:
\n+\n
55
\n
56 public:
\n-
57 typedef boost::shared_ptr<SubgraphPreconditioner> shared_ptr;
\n-
58
\n-
59 private:
\n-\n-\n-
62 VectorValues xbar_;
\n-
63 Errors b2bar_;
\n-
64
\n-
65 KeyInfo keyInfo_;
\n-\n-
67
\n-
68 public:
\n-
69
\n-\n-
71
\n-\n-\n-
80
\n-
81 ~SubgraphPreconditioner() override {}
\n-
82
\n-
84 void print(const std::string& s = "SubgraphPreconditioner") const;
\n-
85
\n-
87 const GaussianFactorGraph& Ab2() const { return Ab2_; }
\n-
88
\n-
90 const GaussianBayesNet& Rc1() const { return Rc1_; }
\n-
91
\n-
93 const Errors b2bar() const { return b2bar_; }
\n-
94
\n-
100 /* x = xbar + inv(R1)*y */
\n-
101 VectorValues x(const VectorValues& y) const;
\n+
57 typedef GaussianBayesTree This;
\n+
58 typedef boost::shared_ptr<This> shared_ptr;
\n+
59
\n+\n+
62
\n+
64 bool equals(const This& other, double tol = 1e-9) const;
\n+
65
\n+
67 VectorValues optimize() const;
\n+
68
\n+
94 VectorValues optimizeGradientSearch() const;
\n+
95
\n+
101 VectorValues gradient(const VectorValues& x0) const;
\n
102
\n-
103 /* A zero VectorValues with the structure of xbar */
\n-
104 VectorValues zero() const {
\n-
105 return VectorValues::Zero(xbar_);
\n-
106 }
\n-
107
\n-
113 void transposeMultiplyAdd2(double alpha, Errors::const_iterator begin,
\n-
114 Errors::const_iterator end, VectorValues& y) const;
\n-
115
\n-
116 /* error, given y */
\n-
117 double error(const VectorValues& y) const;
\n-
118
\n-
120 VectorValues gradient(const VectorValues& y) const;
\n-
121
\n-
123 Errors operator*(const VectorValues& y) const;
\n-
124
\n-
126 void multiplyInPlace(const VectorValues& y, Errors& e) const;
\n-
127
\n-
129 VectorValues operator^(const Errors& e) const;
\n-
130
\n-
135 void transposeMultiplyAdd(double alpha, const Errors& e, VectorValues& y) const;
\n+
108 VectorValues gradientAtZero() const;
\n+
109
\n+
111 double error(const VectorValues& x) const;
\n+
112
\n+
118 double determinant() const;
\n+
119
\n+
125 double logDeterminant() const;
\n+
126
\n+
129 Matrix marginalCovariance(Key key) const;
\n+
130 };
\n+
\n+
131
\n+
133 template<>
\n+
\n+
134 struct traits<GaussianBayesTree> : public Testable<GaussianBayesTree> {
\n+
135 };
\n+
\n
136
\n-
137 /*****************************************************************************/
\n-
138 /* implement virtual functions of Preconditioner */
\n-
139
\n-
141 void solve(const Vector& y, Vector &x) const override;
\n-
142
\n-
144 void transposeSolve(const Vector& y, Vector& x) const override;
\n-
145
\n-
147 void build(
\n-
148 const GaussianFactorGraph &gfg,
\n-
149 const KeyInfo &info,
\n-
150 const std::map<Key,Vector> &lambda
\n-
151 ) override;
\n-
152 /*****************************************************************************/
\n-
153 };
\n-
\n-
154
\n-
155} // namespace gtsam
\n-
Factor Graph Values.
\n-
vector of errors
\n-
Some support classes for iterative solvers.
\n-\n-
Chordal Bayes Net, the result of eliminating a factor graph.
\n-
Linear Factor Graph where all factors are Gaussians.
\n+
137} //\\ namespace gtsam
\n+
Bayes Tree is a tree of cliques of a Bayes Chain.
\n+
Base class for cliques of a BayesTree.
\n+
Chordal Bayes Net, the result of eliminating a factor graph.
\n+
Linear Factor Graph where all factors are Gaussians.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-\n-
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
Handy data structure for iterative solvers.
Definition IterativeSolver.h:126
\n-
Definition Preconditioner.h:24
\n-
Definition Preconditioner.h:64
\n-
Definition SubgraphBuilder.h:96
\n-
Definition SubgraphPreconditioner.h:40
\n-
Subgraph conditioner class, as explained in the RSS 2010 submission.
Definition SubgraphPreconditioner.h:54
\n-
const GaussianFactorGraph & Ab2() const
Access Ab2.
Definition SubgraphPreconditioner.h:87
\n-
const Errors b2bar() const
Access b2bar.
Definition SubgraphPreconditioner.h:93
\n-
const GaussianBayesNet & Rc1() const
Access Rc1.
Definition SubgraphPreconditioner.h:90
\n+
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
Bayes tree.
Definition BayesTree.h:67
\n+
This is the base class for BayesTree cliques.
Definition BayesTreeCliqueBase.h:50
\n+
A clique in a GaussianBayesTree.
Definition GaussianBayesTree.h:37
\n+
A Bayes tree representing a Gaussian density.
Definition GaussianBayesTree.h:52
\n+
GaussianBayesTree()
Default constructor, creates an empty Bayes tree.
Definition GaussianBayesTree.h:61
\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
is the normalization constant.
\n
The Factor::error simply extracts the.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,189 +1,146 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SubgraphPreconditioner.h\n+GaussianBayesTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\br_\br_\bo_\br_\bs_\b._\bh>\n+20#pragma once\n+21\n 22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n 23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n-25#include \n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-27#include \n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh>\n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n 28\n-29#include \n-30\n-31#include \n+29 // Forward declarations\n+30 class _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+31 class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n 32\n-33namespace _\bg_\bt_\bs_\ba_\bm {\n-34\n-35 // Forward declarations\n-36 class GaussianBayesNet;\n-37 class GaussianFactorGraph;\n-38 class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n-39\n-_\b4_\b0 struct GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs : public\n-_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n-41 typedef boost::shared_ptr shared_ptr;\n-42 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs(const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p =\n-_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs())\n-43 : builderParams(p) {}\n-44 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs builderParams;\n-45 };\n-46\n-_\b5_\b4 class GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br : public _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br {\n+33 /* *************************************************************************\n+*/\n+_\b3_\b5 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be :\n+36 public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+37 {\n+38 public:\n+39 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be _\bT_\bh_\bi_\bs;\n+40 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>\n+_\bB_\ba_\bs_\be;\n+41 typedef boost::shared_ptr shared_ptr;\n+42 typedef boost::weak_ptr weak_ptr;\n+43 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n+44 virtual _\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n+45 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be(const boost::shared_ptr&\n+conditional) : _\bB_\ba_\bs_\be(conditional) {}\n+46 };\n+47\n+48 /* *************************************************************************\n+*/\n+_\b5_\b0 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be :\n+51 public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+52 {\n+53 private:\n+54 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bB_\ba_\bs_\be;\n 55\n 56 public:\n-57 typedef boost::shared_ptr shared_ptr;\n-58\n-59 private:\n-60 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh Ab2_;\n-61 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt Rc1_;\n-62 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs xbar_;\n-63 _\bE_\br_\br_\bo_\br_\bs b2bar_;\n-64\n-65 _\bK_\be_\by_\bI_\bn_\bf_\bo keyInfo_;\n-66 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs parameters_;\n-67\n-68 public:\n-69\n-70 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br(const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p =\n-_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs());\n-71\n-78 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& Ab2, const\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& Rc1, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& xbar,\n-79 const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p = _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-());\n-80\n-81 _\b~_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br() override {}\n-82\n-84 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"SubgraphPreconditioner\") const;\n-85\n-_\b8_\b7 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bA_\bb_\b2() const { return Ab2_; }\n-88\n-_\b9_\b0 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& _\bR_\bc_\b1() const { return Rc1_; }\n-91\n-_\b9_\b3 const _\bE_\br_\br_\bo_\br_\bs _\bb_\b2_\bb_\ba_\br() const { return b2bar_; }\n-94\n-100 /* x = xbar + inv(R1)*y */\n-101 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs x(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n+57 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+58 typedef boost::shared_ptr shared_ptr;\n+59\n+_\b6_\b1 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() {}\n+62\n+64 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n+65\n+67 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n+68\n+94 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimizeGradientSearch() const;\n+95\n+101 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradient(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x0) const;\n 102\n-103 /* A zero VectorValues with the structure of xbar */\n-104 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs zero() const {\n-105 return VectorValues::Zero(xbar_);\n-106 }\n-107\n-113 void transposeMultiplyAdd2(double alpha, Errors::const_iterator begin,\n-114 Errors::const_iterator end, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n-115\n-116 /* error, given y */\n-117 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n-118\n-120 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradient(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n-121\n-123 Errors operator*(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n-124\n-126 void multiplyInPlace(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y, Errors& e) const;\n-127\n-129 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs operator^(const Errors& e) const;\n-130\n-135 void transposeMultiplyAdd(double alpha, const Errors& e, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y)\n-const;\n+108 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const;\n+109\n+111 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+112\n+118 double determinant() const;\n+119\n+125 double logDeterminant() const;\n+126\n+129 Matrix marginalCovariance(_\bK_\be_\by key) const;\n+130 };\n+131\n+133 template<>\n+_\b1_\b3_\b4 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+135 };\n 136\n-137 /\n-*****************************************************************************/\n-138 /* implement virtual functions of Preconditioner */\n-139\n-141 void solve(const Vector& y, Vector &x) const override;\n-142\n-144 void transposeSolve(const Vector& y, Vector& x) const override;\n-145\n-147 void build(\n-148 const GaussianFactorGraph &gfg,\n-149 const KeyInfo &info,\n-150 const std::map &lambda\n-151 ) override;\n-152 /\n-*****************************************************************************/\n-153 };\n-154\n-155} // namespace gtsam\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bE_\br_\br_\bo_\br_\bs_\b._\bh\n-vector of errors\n-_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n-Some support classes for iterative solvers.\n-_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh\n+137} //\\ namespace gtsam\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Bayes Tree is a tree of cliques of a Bayes Chain.\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n+Base class for cliques of a BayesTree.\n _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n Chordal Bayes Net, the result of eliminating a factor graph.\n _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Linear Factor Graph where all factors are Gaussians.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\b _\bV_\be_\bc_\bt_\bo_\br_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo\n-Handy data structure for iterative solvers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:24\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphPreconditioner.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br\n-Subgraph conditioner class, as explained in the RSS 2010 submission.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphPreconditioner.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bA_\bb_\b2\n-const GaussianFactorGraph & Ab2() const\n-Access Ab2.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphPreconditioner.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bb_\b2_\bb_\ba_\br\n-const Errors b2bar() const\n-Access b2bar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphPreconditioner.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bR_\bc_\b1\n-const GaussianBayesNet & Rc1() const\n-Access Rc1.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphPreconditioner.h:90\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n+Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n+landmarkKey)\n+Optimize for triangulation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+This is the base class for BayesTree cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n+A clique in a GaussianBayesTree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+A Bayes tree representing a Gaussian density.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+GaussianBayesTree()\n+Default constructor, creates an empty Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:61\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n VectorValues represents a collection of vector-valued variables associated each\n with a unique integer...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+is the normalization constant.\n _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00755.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00755.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesNet.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PowerMethod.h File Reference\n \n \n \n \n \n \n \n@@ -94,35 +94,45 @@\n \n \n \n \n \n
\n \n-
GaussianBayesNet.cpp File Reference
\n+
PowerMethod.h File Reference
\n
\n
\n \n-

Chordal Bayes Net, the result of eliminating a factor graph. \n+

Power method for fast eigenvalue and eigenvector computation. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::PowerMethod< Operator >
 Compute maximum Eigenpair with power method. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Chordal Bayes Net, the result of eliminating a factor graph.

\n-
Author
Frank Dellaert, Varun Agrawal
\n+

Power method for fast eigenvalue and eigenvector computation.

\n+
Date
Sept 2020
\n+
Author
Jing Wu
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianBayesNet.cpp File Reference\n-Chordal Bayes Net, the result of eliminating a factor graph. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+PowerMethod.h File Reference\n+Power method for fast eigenvalue and eigenvector computation. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b<_\b _\bO_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b>\n+\u00a0 Compute maximum Eigenpair with power method. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Chordal Bayes Net, the result of eliminating a factor graph.\n+Power method for fast eigenvalue and eigenvector computation.\n+ Date\n+ Sept 2020\n Author\n- Frank Dellaert, Varun Agrawal\n+ Jing Wu\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bc_\bp_\bp\n+ * _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00758.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00758.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Sampler.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianDensity.h File Reference\n \n \n \n \n \n \n \n@@ -96,44 +96,43 @@\n \n \n \n
\n \n-
Sampler.h File Reference
\n+
GaussianDensity.h File Reference
\n
\n
\n \n-

sampling from a NoiseModel \n+

A Gaussian Density. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::Sampler
 Sampling structure that keeps internal random number generators for diagonal distributions specified by NoiseModel. More...
class  gtsam::GaussianDensity
 A GaussianDensity is a GaussianConditional without parents. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

sampling from a NoiseModel

\n-
Author
Frank Dellaert
\n-
\n-Alex Cunningham
\n+

A Gaussian Density.

\n+
Author
Frank Dellaert
\n+
Date
Jan 21, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Sampler.h File Reference\n-sampling from a NoiseModel _\bM_\bo_\br_\be_\b._\b._\b.\n+GaussianDensity.h File Reference\n+A Gaussian Density. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br\n-\u00a0 Sampling structure that keeps internal random number generators for\n- diagonal distributions specified by NoiseModel. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by\n+\u00a0 A _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by is a _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl without parents. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-sampling from a NoiseModel\n+A Gaussian Density.\n Author\n Frank Dellaert\n- Alex Cunningham\n+ Date\n+ Jan 21, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00758_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00758_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Sampler.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianDensity.h Source File\n \n \n \n \n \n \n \n@@ -98,79 +98,92 @@\n
No Matches
\n \n \n \n \n \n
\n-
Sampler.h
\n+
GaussianDensity.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-
22
\n-
23#include <random>
\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
\n-
31class GTSAM_EXPORT Sampler {
\n-
32 protected:
\n-
34 noiseModel::Diagonal::shared_ptr model_;
\n+
19// \\callgraph
\n+
20#pragma once
\n+
21
\n+\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
\n+
32 class GTSAM_EXPORT GaussianDensity : public GaussianConditional {
\n+
33
\n+
34 public:
\n
35
\n-
37 mutable std::mt19937_64 generator_;
\n-
38
\n-
39 public:
\n-
40 typedef boost::shared_ptr<Sampler> shared_ptr;
\n-
41
\n-
44
\n-
51 explicit Sampler(const noiseModel::Diagonal::shared_ptr& model,
\n-
52 uint_fast64_t seed = 42u);
\n+
36 typedef boost::shared_ptr<GaussianDensity> shared_ptr;
\n+
37
\n+
\n+\n+\n+
41 }
\n+
\n+
42
\n+
\n+\n+
45 GaussianConditional(conditional) {
\n+
46 if(conditional.nrParents() != 0)
\n+
47 throw std::invalid_argument("GaussianDensity can only be created from a conditional with no parents");
\n+
48 }
\n+
\n+
49
\n+
\n+
51 GaussianDensity(Key key, const Vector& d, const Matrix& R, const SharedDiagonal& noiseModel = SharedDiagonal()) :
\n+
52 GaussianConditional(key, d, R, noiseModel) {}
\n+
\n
53
\n-
60 explicit Sampler(const Vector& sigmas, uint_fast64_t seed = 42u);
\n+
55 static GaussianDensity FromMeanAndStddev(Key key, const Vector& mean,
\n+
56 double sigma);
\n+
57
\n+
59 void print(const std::string& = "GaussianDensity",
\n+
60 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n
61
\n-
65
\n-
66 size_t dim() const { return model_->dim(); }
\n+
63 Vector mean() const;
\n+
64
\n+
66 Matrix covariance() const;
\n
67
\n-
68 Vector sigmas() const { return model_->sigmas(); }
\n-
69
\n-
70 const noiseModel::Diagonal::shared_ptr& model() const { return model_; }
\n-
71
\n-
75
\n-
77 Vector sample() const;
\n-
78
\n-
80 static Vector sampleDiagonal(const Vector& sigmas, std::mt19937_64* rng);
\n-
82
\n-
83 protected:
\n-
85 Vector sampleDiagonal(const Vector& sigmas) const;
\n-
86};
\n-
\n-
87
\n-
88} // namespace gtsam
\n-\n+
68 };
\n+
\n+
69 // GaussianDensity
\n+
70
\n+
71}// gtsam
\n+
Conditional Gaussian Base class.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Sampling structure that keeps internal random number generators for diagonal distributions specified ...
Definition Sampler.h:31
\n-
noiseModel::Diagonal::shared_ptr model_
noiseModel created at generation
Definition Sampler.h:34
\n-
std::mt19937_64 generator_
generator
Definition Sampler.h:37
\n+
Point3 mean(const CONTAINER &points)
mean
Definition Point3.h:68
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
size_t nrParents() const
return the number of parents
Definition Conditional.h:113
\n+
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n+
A GaussianDensity is a GaussianConditional without parents.
Definition GaussianDensity.h:32
\n+
GaussianDensity(Key key, const Vector &d, const Matrix &R, const SharedDiagonal &noiseModel=SharedDiagonal())
constructor using d, R
Definition GaussianDensity.h:51
\n+
GaussianDensity()
default constructor needed for serialization
Definition GaussianDensity.h:39
\n+
GaussianDensity(const GaussianConditional &conditional)
Copy constructor from GaussianConditional.
Definition GaussianDensity.h:44
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,80 +1,110 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Sampler.h\n+GaussianDensity.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n-22\n-23#include \n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-_\b3_\b1class GTSAM_EXPORT _\bS_\ba_\bm_\bp_\bl_\be_\br {\n-32 protected:\n-_\b3_\b4 noiseModel::Diagonal::shared_ptr _\bm_\bo_\bd_\be_\bl_\b_;\n+19// \\callgraph\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+_\b3_\b2 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by : public _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n+33\n+34 public:\n 35\n-_\b3_\b7 mutable std::mt19937_64 _\bg_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\b_;\n-38\n-39 public:\n-40 typedef boost::shared_ptr shared_ptr;\n-41\n-44\n-51 explicit _\bS_\ba_\bm_\bp_\bl_\be_\br(const noiseModel::Diagonal::shared_ptr& model,\n-52 uint_fast64_t seed = 42u);\n+36 typedef boost::shared_ptr shared_ptr;\n+37\n+_\b3_\b9 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by() :\n+40 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() {\n+41 }\n+42\n+_\b4_\b4 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl& conditional) :\n+45 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(conditional) {\n+46 if(conditional._\bn_\br_\bP_\ba_\br_\be_\bn_\bt_\bs() != 0)\n+47 throw std::invalid_argument(\"GaussianDensity can only be created from a\n+conditional with no parents\");\n+48 }\n+49\n+_\b5_\b1 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by(_\bK_\be_\by key, const Vector& d, const Matrix& R, const\n+SharedDiagonal& noiseModel = SharedDiagonal()) :\n+52 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(key, d, R, noiseModel) {}\n 53\n-60 explicit _\bS_\ba_\bm_\bp_\bl_\be_\br(const Vector& sigmas, uint_fast64_t seed = 42u);\n+55 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by FromMeanAndStddev(_\bK_\be_\by key, const Vector& mean,\n+56 double sigma);\n+57\n+59 void _\bp_\br_\bi_\bn_\bt(const std::string& = \"GaussianDensity\",\n+60 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n 61\n-65\n-66 size_t dim() const { return model_->dim(); }\n+63 Vector _\bm_\be_\ba_\bn() const;\n+64\n+66 Matrix covariance() const;\n 67\n-68 Vector sigmas() const { return model_->sigmas(); }\n-69\n-70 const noiseModel::Diagonal::shared_ptr& model() const { return model_; }\n-71\n-75\n-77 Vector sample() const;\n-78\n-80 static Vector sampleDiagonal(const Vector& sigmas, std::mt19937_64* rng);\n-82\n-83 protected:\n-85 Vector sampleDiagonal(const Vector& sigmas) const;\n-86};\n-87\n-88} // namespace gtsam\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+68 };\n+69 // GaussianDensity\n+70\n+71}// gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+Conditional Gaussian Base class.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br\n-Sampling structure that keeps internal random number generators for diagonal\n-distributions specified ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Sampler.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br_\b:_\b:_\bm_\bo_\bd_\be_\bl_\b_\n-noiseModel::Diagonal::shared_ptr model_\n-noiseModel created at generation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Sampler.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\b_\n-std::mt19937_64 generator_\n-generator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Sampler.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\be_\ba_\bn\n+Point3 mean(const CONTAINER &points)\n+mean\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bP_\ba_\br_\be_\bn_\bt_\bs\n+size_t nrParents() const\n+return the number of parents\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+A GaussianConditional functions as the node in a Bayes network.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by\n+A GaussianDensity is a GaussianConditional without parents.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianDensity.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by\n+GaussianDensity(Key key, const Vector &d, const Matrix &R, const SharedDiagonal\n+&noiseModel=SharedDiagonal())\n+constructor using d, R\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianDensity.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by\n+GaussianDensity()\n+default constructor needed for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianDensity.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by\n+GaussianDensity(const GaussianConditional &conditional)\n+Copy constructor from GaussianConditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianDensity.h:44\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00761.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00761.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianDensity.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative-inl.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,52 @@\n \n \n \n \n \n
\n \n-
GaussianDensity.cpp File Reference
\n+Classes |\n+Namespaces |\n+Functions
\n+
iterative-inl.h File Reference
\n \n
\n \n-

A Gaussian Density. \n+

Iterative methods, template implementation. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+

\n+Classes

struct  gtsam::CGState< S, V, E >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n

\n+Functions

template<class S , class V , class E >
gtsam::conjugateGradients (const S &Ab, V x, const ConjugateGradientParameters &parameters, bool steepest=false)
 Method of conjugate gradients (CG) template \"System\" class S needs gradient(S,v), e=S*v, v=S^e \"Vector\" class V needs dot(v,v), -v, v+v, s*v \"Vector\" class E needs dot(v,v)
 
\n

Detailed Description

\n-

A Gaussian Density.

\n+

Iterative methods, template implementation.

\n
Author
Frank Dellaert
\n-
Date
Jan 21, 2012
\n+
Date
Dec 28, 2009
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,34 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianDensity.cpp File Reference\n-A Gaussian Density. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+iterative-inl.h File Reference\n+Iterative methods, template implementation. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bG_\bS_\bt_\ba_\bt_\be_\b<_\b _\bS_\b,_\b _\bV_\b,_\b _\bE_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+V\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bs (const S &Ab, V x, const\n+ _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters, bool steepest=false)\n+ Method of conjugate gradients (CG) template \"System\" class S needs gradient\n+\u00a0 (S,v), e=S*v, v=S^e \"Vector\" class V needs dot(v,v), -v, v+v, s*v \"Vector\"\n+ class E needs dot(v,v)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A Gaussian Density.\n+Iterative methods, template implementation.\n Author\n Frank Dellaert\n Date\n- Jan 21, 2012\n+ Dec 28, 2009\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bc_\bp_\bp\n+ * _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00764.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00764.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesNet.h File Reference\n \n \n \n \n \n \n \n@@ -94,34 +94,47 @@\n \n \n \n \n \n
\n \n-
Scatter.cpp File Reference
\n+
GaussianBayesNet.h File Reference
\n
\n
\n+\n+

Chordal Bayes Net, the result of eliminating a factor graph. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::GaussianBayesNet
 GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals. More...
 
struct  gtsam::traits< GaussianBayesNet >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
\n-Frank Dellaert
\n-
Date
June 2015
\n+

Chordal Bayes Net, the result of eliminating a factor graph.

\n+

GaussianBayesNet

Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Scatter.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GaussianBayesNet.h File Reference\n+Chordal Bayes Net, the result of eliminating a factor graph. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+\u00a0 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt is a Bayes net made from linear-Gaussian\n+ conditionals. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Chordal Bayes Net, the result of eliminating a factor graph.\n+GaussianBayesNet\n Author\n- Richard Roberts\n Frank Dellaert\n- Date\n- June 2015\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bc_\bp_\bp\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00767.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00767.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/IterativeSolver.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/HessianFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,54 +94,49 @@\n \n \n \n \n \n
\n \n-
IterativeSolver.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
HessianFactor.cpp File Reference
\n \n
\n-\n-

Some support classes for iterative solvers. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::IterativeOptimizationParameters
 parameters for iterative linear solvers More...
 
class  gtsam::IterativeSolver
 Base class for Iterative Solvers like SubgraphSolver. More...
 
struct  gtsam::KeyInfoEntry
 Handy data structure for iterative solvers key to (index, dimension, start) More...
 
class  gtsam::KeyInfo
 Handy data structure for iterative solvers. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Typedefs

\n+using gtsam::Dims = std::vector< Key >
 
\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< HessianFactor > > gtsam::EliminateCholesky (const GaussianFactorGraph &factors, const Ordering &keys)
 Densely partially eliminate with Cholesky factorization.
 
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< GaussianFactor > > gtsam::EliminatePreferCholesky (const GaussianFactorGraph &factors, const Ordering &keys)
 Densely partially eliminate with Cholesky factorization.
 
\n

Detailed Description

\n-

Some support classes for iterative solvers.

\n-
Date
2010
\n-
Author
Yong-Dian Jian
\n+
Author
Richard Roberts
\n+
Date
Dec 8, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +1,36 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-IterativeSolver.h File Reference\n-Some support classes for iterative solvers. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-\u00a0 parameters for iterative linear solvers _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br\n-\u00a0 Base class for Iterative Solvers like _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo_\bE_\bn_\bt_\br_\by\n-\u00a0 Handy data structure for iterative solvers key to (index, dimension,\n- start) _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo\n-\u00a0 Handy data structure for iterative solvers. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+HessianFactor.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDi\bim\bms\bs = std::vector< _\bK_\be_\by >\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by (const\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n+ shared_ptr< _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n+\u00a0 Densely partially eliminate with Cholesky\n+ factorization.\n+\u00a0\n+ std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by (const\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n+shared_ptr< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n+\u00a0 Densely partially eliminate with Cholesky\n+ factorization.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Some support classes for iterative solvers.\n- Date\n- 2010\n Author\n- Yong-Dian Jian\n+ Richard Roberts\n+ Date\n+ Dec 8, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+ * _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00767.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00767.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,4 @@\n var a00767 = [\n- [\"gtsam::IterativeOptimizationParameters\", \"a03828.html\", null],\n- [\"gtsam::IterativeSolver\", \"a03832.html\", null],\n- [\"gtsam::KeyInfoEntry\", \"a03836.html\", null],\n- [\"gtsam::KeyInfo\", \"a03840.html\", \"a03840\"]\n+ [\"EliminateCholesky\", \"a00767.html#ga37760d3ca31c6d8d60a3a2a17babc3a4\", null],\n+ [\"EliminatePreferCholesky\", \"a00767.html#gadbb147d2a9039f67ad3b8b5515d2e5cc\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00770.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00770.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphBuilder.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/linearExceptions.h File Reference\n \n \n \n \n \n \n \n@@ -95,56 +95,52 @@\n \n \n \n \n
\n \n-
SubgraphBuilder.h File Reference
\n+Namespaces
\n+
linearExceptions.h File Reference
\n \n
\n \n+

Exceptions that may be thrown by linear solver components. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n+\n+\n \n-\n+\n+\n \n-\n+\n+\n \n-\n+\n \n

\n Classes

class  gtsam::Subgraph
class  gtsam::IndeterminantLinearSystemException
 Thrown when a linear system is ill-posed. More...
 
struct  gtsam::Subgraph::Edge
class  gtsam::InvalidNoiseModel
 An exception indicating that the noise model dimension passed into a JacobianFactor has a different dimensionality than the factor. More...
 
struct  gtsam::SubgraphBuilderParameters
class  gtsam::InvalidMatrixBlock
 An exception indicating that a matrix block passed into a JacobianFactor has a different dimensionality than the factor. More...
 
class  gtsam::SubgraphBuilder
class  gtsam::InvalidDenseElimination
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-GaussianFactorGraph gtsam::buildFactorSubgraph (const GaussianFactorGraph &gfg, const Subgraph &subgraph, const bool clone)
 Select the factors in a factor graph according to the subgraph.
 
std::pair< GaussianFactorGraph, GaussianFactorGraphgtsam::splitFactorGraph (const GaussianFactorGraph &factorGraph, const Subgraph &subgraph)
 Split the graph into a subgraph and the remaining edges.
 
\n

Detailed Description

\n-
Date
Dec 31, 2009
\n-
Author
Frank Dellaert, Yong-Dian Jian
\n+

Exceptions that may be thrown by linear solver components.

\n+
Author
Richard Roberts
\n+
Date
Aug 17, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,43 +1,37 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SubgraphBuilder.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+linearExceptions.h File Reference\n+Exceptions that may be thrown by linear solver components. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+\u00a0 Thrown when a linear system is ill-posed. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bd_\bg_\be\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+\u00a0 An exception indicating that the noise model dimension passed into a\n+ _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br has a different dimensionality than the factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk\n+\u00a0 An exception indicating that a matrix block passed into a\n+ _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br has a different dimensionality than the factor. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:b\bbu\bui\bil\bld\bdF\bFa\bac\bct\bto\bor\brS\bSu\bub\bbg\bgr\bra\bap\bph\bh (const\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg, const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh\n- &subgraph, const bool clone)\n-\u00a0 Select the factors in a factor graph according\n- to the subgraph.\n-\u00a0\n-std::pair< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\bl_\bi_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh (const\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh >\u00a0 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factorGraph, const\n- _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh &subgraph)\n-\u00a0 Split the graph into a subgraph and the\n- remaining edges.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Dec 31, 2009\n+Exceptions that may be thrown by linear solver components.\n Author\n- Frank Dellaert, Yong-Dian Jian\n+ Richard Roberts\n+ Date\n+ Aug 17, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00770.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00770.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,8 +1,6 @@\n var a00770 = [\n- [\"gtsam::Subgraph\", \"a04032.html\", \"a04032\"],\n- [\"gtsam::Subgraph::Edge\", \"a04036.html\", null],\n- [\"gtsam::SubgraphBuilderParameters\", \"a04040.html\", \"a04040\"],\n- [\"gtsam::SubgraphBuilder\", \"a04044.html\", null],\n- [\"buildFactorSubgraph\", \"a00770.html#a0ec82adc6e13261cf4a012b65b301256\", null],\n- [\"splitFactorGraph\", \"a00770.html#a2c7eca9f27b43b52756c1afd85478dd8\", null]\n+ [\"gtsam::IndeterminantLinearSystemException\", \"a03864.html\", null],\n+ [\"gtsam::InvalidNoiseModel\", \"a03868.html\", \"a03868\"],\n+ [\"gtsam::InvalidMatrixBlock\", \"a03872.html\", \"a03872\"],\n+ [\"gtsam::InvalidDenseElimination\", \"a03876.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00770_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00770_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphBuilder.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/linearExceptions.h Source File\n \n \n \n \n \n \n \n@@ -98,216 +98,109 @@\n
No Matches
\n \n \n \n \n \n
\n-
SubgraphBuilder.h
\n+
linearExceptions.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-
20#include <gtsam/base/FastMap.h>
\n-
21#include <gtsam/base/types.h>
\n-
22#include <gtsam/dllexport.h>
\n-
23
\n-
24#include <boost/serialization/version.hpp>
\n-
25#include <boost/serialization/nvp.hpp>
\n-
26#include <boost/shared_ptr.hpp>
\n-
27
\n-
28#include <vector>
\n-
29
\n-
30namespace boost {
\n-
31namespace serialization {
\n-
32class access;
\n-
33} /* namespace serialization */
\n-
34} /* namespace boost */
\n-
35
\n-
36namespace gtsam {
\n-
37
\n-
38// Forward declarations
\n-
39class GaussianFactorGraph;
\n-
40struct PreconditionerParameters;
\n-
41
\n-
42/**************************************************************************/
\n-
\n-
43class GTSAM_EXPORT Subgraph {
\n-
44 public:
\n-
\n-
45 struct GTSAM_EXPORT Edge {
\n-
46 size_t index; /* edge id */
\n-
47 double weight; /* edge weight */
\n-
48 inline bool isUnitWeight() const { return (weight == 1.0); }
\n-
49 friend std::ostream &operator<<(std::ostream &os, const Edge &edge);
\n-
50
\n-
51 private:
\n-
52 friend class boost::serialization::access;
\n-
53 template <class Archive>
\n-
54 void serialize(Archive &ar, const unsigned int /*version*/) {
\n-
55 ar &BOOST_SERIALIZATION_NVP(index);
\n-
56 ar &BOOST_SERIALIZATION_NVP(weight);
\n-
57 }
\n-
58 };
\n-
\n-
59
\n-
60 typedef std::vector<Edge> Edges;
\n-
61 typedef std::vector<size_t> EdgeIndices;
\n-
62 typedef Edges::iterator iterator;
\n-
63 typedef Edges::const_iterator const_iterator;
\n-
64
\n-
65 protected:
\n-
66 Edges edges_; /* index to the factors */
\n-
67
\n-
68 public:
\n-
69 Subgraph() {}
\n-
70 Subgraph(const Subgraph &subgraph) : edges_(subgraph.edges()) {}
\n-
71 Subgraph(const Edges &edges) : edges_(edges) {}
\n-
72 Subgraph(const std::vector<size_t> &indices);
\n-
73
\n-
74 inline const Edges &edges() const { return edges_; }
\n-
75 inline size_t size() const { return edges_.size(); }
\n-
76 EdgeIndices edgeIndices() const;
\n-
77
\n-
78 iterator begin() { return edges_.begin(); }
\n-
79 const_iterator begin() const { return edges_.begin(); }
\n-
80 iterator end() { return edges_.end(); }
\n-
81 const_iterator end() const { return edges_.end(); }
\n-
82
\n-
83 void save(const std::string &fn) const;
\n-
84 static Subgraph load(const std::string &fn);
\n-
85 friend std::ostream &operator<<(std::ostream &os, const Subgraph &subgraph);
\n-
86
\n-
87 private:
\n-
88 friend class boost::serialization::access;
\n-
89 template <class Archive>
\n-
90 void serialize(Archive &ar, const unsigned int /*version*/) {
\n-
91 ar &BOOST_SERIALIZATION_NVP(edges_);
\n-
92 }
\n-
93};
\n-
\n-
94
\n-
95/****************************************************************************/
\n-
\n-
96struct GTSAM_EXPORT SubgraphBuilderParameters {
\n-
97 typedef boost::shared_ptr<SubgraphBuilderParameters> shared_ptr;
\n-
98
\n-
99 enum Skeleton {
\n-
100 /* augmented tree */
\n-
101 NATURALCHAIN = 0, /* natural ordering of the graph */
\n-
102 BFS, /* breadth-first search tree */
\n-
103 KRUSKAL, /* maximum weighted spanning tree */
\n-
104 } skeletonType;
\n-
105
\n-
106 enum SkeletonWeight { /* how to weigh the graph edges */
\n-
107 EQUAL = 0, /* every block edge has equal weight */
\n-
108 RHS_2NORM, /* use the 2-norm of the rhs */
\n-
109 LHS_FNORM, /* use the frobenius norm of the lhs */
\n-
110 RANDOM, /* bounded random edge weight */
\n-
111 } skeletonWeight;
\n-
112
\n-
113 enum AugmentationWeight { /* how to weigh the graph edges */
\n-
114 SKELETON = 0, /* use the same weights in building
\n-
115 the skeleton */
\n-
116 // STRETCH, /* stretch in the
\n-
117 // laplacian sense */ GENERALIZED_STRETCH /*
\n-
118 // the generalized stretch defined in
\n-
119 // jian2013iros */
\n-
120 } augmentationWeight;
\n-
121
\n-\n-
124
\n-\n-
126 : skeletonType(KRUSKAL),
\n-
127 skeletonWeight(RANDOM),
\n-
128 augmentationWeight(SKELETON),
\n-
129 augmentationFactor(1.0) {}
\n-
130 virtual ~SubgraphBuilderParameters() {}
\n-
131
\n-
132 /* for serialization */
\n-
133 void print() const;
\n-
134 virtual void print(std::ostream &os) const;
\n-
135 friend std::ostream &operator<<(std::ostream &os,
\n-
136 const PreconditionerParameters &p);
\n-
137
\n-
138 static Skeleton skeletonTranslator(const std::string &s);
\n-
139 static std::string skeletonTranslator(Skeleton s);
\n-
140 static SkeletonWeight skeletonWeightTranslator(const std::string &s);
\n-
141 static std::string skeletonWeightTranslator(SkeletonWeight w);
\n-
142 static AugmentationWeight augmentationWeightTranslator(const std::string &s);
\n-
143 static std::string augmentationWeightTranslator(AugmentationWeight w);
\n-
144};
\n-
\n-
145
\n-
146/*****************************************************************************/
\n-
\n-
147class GTSAM_EXPORT SubgraphBuilder {
\n-
148 public:
\n-
149 typedef SubgraphBuilder Base;
\n-
150 typedef std::vector<double> Weights;
\n-
151
\n-\n-\n-
154 : parameters_(p) {}
\n-
155 virtual ~SubgraphBuilder() {}
\n-
156 virtual Subgraph operator()(const GaussianFactorGraph &jfg) const;
\n-
157
\n-
158 private:
\n-
159 std::vector<size_t> buildTree(const GaussianFactorGraph &gfg,
\n-
160 const FastMap<Key, size_t> &ordering,
\n-
161 const std::vector<double> &weights) const;
\n-
162 std::vector<size_t> unary(const GaussianFactorGraph &gfg) const;
\n-
163 std::vector<size_t> natural_chain(const GaussianFactorGraph &gfg) const;
\n-
164 std::vector<size_t> bfs(const GaussianFactorGraph &gfg) const;
\n-
165 std::vector<size_t> kruskal(const GaussianFactorGraph &gfg,
\n-
166 const FastMap<Key, size_t> &ordering,
\n-
167 const std::vector<double> &weights) const;
\n-
168 std::vector<size_t> sample(const std::vector<double> &weights,
\n-
169 const size_t t) const;
\n-
170 Weights weights(const GaussianFactorGraph &gfg) const;
\n-
171 SubgraphBuilderParameters parameters_;
\n-
172};
\n-
\n-
173
\n-\n-
176 const Subgraph &subgraph,
\n-
177 const bool clone);
\n-
178
\n-
181std::pair<GaussianFactorGraph, GaussianFactorGraph> splitFactorGraph(
\n-
182 const GaussianFactorGraph &factorGraph, const Subgraph &subgraph);
\n-
183
\n-
184} // namespace gtsam
\n-
Typedefs for easier changing of types.
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+\n+
21#include <gtsam/base/types.h>
\n+
22
\n+
23namespace gtsam {
\n+
24
\n+
\n+
94 class GTSAM_EXPORT IndeterminantLinearSystemException : public ThreadsafeException<IndeterminantLinearSystemException> {
\n+
95 Key j_;
\n+
96 public:
\n+
97 IndeterminantLinearSystemException(Key j) noexcept : j_(j) {}
\n+
98 ~IndeterminantLinearSystemException() noexcept override {}
\n+
99 Key nearbyVariable() const { return j_; }
\n+
100 const char* what() const noexcept override;
\n+
101 };
\n+
\n+
102
\n+
103 /* ************************************************************************* */
\n+
\n+
106 class GTSAM_EXPORT InvalidNoiseModel : public ThreadsafeException<InvalidNoiseModel> {
\n+
107 public:
\n+\n+\n+
110
\n+
111 InvalidNoiseModel(DenseIndex factorDims, DenseIndex noiseModelDims) :
\n+
112 factorDims(factorDims), noiseModelDims(noiseModelDims) {}
\n+
113 ~InvalidNoiseModel() noexcept override {}
\n+
114
\n+
115 const char* what() const noexcept override;
\n+
116
\n+
117 private:
\n+
118 mutable std::string description_;
\n+
119 };
\n+
\n+
120
\n+
121 /* ************************************************************************* */
\n+
\n+\n+
125 public:
\n+\n+\n+
128
\n+
129 InvalidMatrixBlock(DenseIndex factorRows, DenseIndex blockRows) :
\n+
130 factorRows(factorRows), blockRows(blockRows) {}
\n+
131 ~InvalidMatrixBlock() noexcept override {}
\n+
132
\n+
133 const char* what() const noexcept override;
\n+
134
\n+
135 private:
\n+
136 mutable std::string description_;
\n+
137 };
\n+
\n+
138
\n+
139 /* ************************************************************************* */
\n+
\n+\n+
141 public:
\n+\n+
143 };
\n+
\n+
144
\n+
145 }
\n+
Typedefs for easier changing of types.
\n+
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
GaussianFactorGraph buildFactorSubgraph(const GaussianFactorGraph &gfg, const Subgraph &subgraph, const bool clone)
Select the factors in a factor graph according to the subgraph.
Definition SubgraphBuilder.cpp:447
\n-
std::pair< GaussianFactorGraph, GaussianFactorGraph > splitFactorGraph(const GaussianFactorGraph &factorGraph, const Subgraph &subgraph)
Split the graph into a subgraph and the remaining edges.
Definition SubgraphBuilder.cpp:460
\n-
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition Matrix.cpp:167
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
Definition SubgraphBuilder.h:43
\n-
Definition SubgraphBuilder.h:45
\n-
Definition SubgraphBuilder.h:96
\n-
double augmentationFactor
factor multiplied with n, yields number of extra edges.
Definition SubgraphBuilder.h:123
\n-
Definition SubgraphBuilder.h:147
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
Definition ThreadsafeException.h:42
\n+
Thrown when a linear system is ill-posed.
Definition linearExceptions.h:94
\n+
An exception indicating that the noise model dimension passed into a JacobianFactor has a different d...
Definition linearExceptions.h:106
\n+
const DenseIndex factorDims
The dimensionality of the factor.
Definition linearExceptions.h:108
\n+
const DenseIndex noiseModelDims
The dimensionality of the noise model.
Definition linearExceptions.h:109
\n+
An exception indicating that a matrix block passed into a JacobianFactor has a different dimensionali...
Definition linearExceptions.h:124
\n+
const DenseIndex factorRows
The dimensionality of the factor.
Definition linearExceptions.h:126
\n+
const DenseIndex blockRows
The dimensionality of the noise model.
Definition linearExceptions.h:127
\n+
Definition linearExceptions.h:140
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,230 +1,134 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SubgraphBuilder.h\n+linearExceptions.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh>\n 21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-22#include \n-23\n-24#include \n-25#include \n-26#include \n-27\n-28#include \n-29\n-30namespace boost {\n-31namespace serialization {\n-32class access;\n-33} /* namespace serialization */\n-34} /* namespace boost */\n-35\n-36namespace _\bg_\bt_\bs_\ba_\bm {\n-37\n-38// Forward declarations\n-39class GaussianFactorGraph;\n-40struct PreconditionerParameters;\n-41\n-42/**************************************************************************/\n-_\b4_\b3class GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh {\n-44 public:\n-_\b4_\b5 struct GTSAM_EXPORT _\bE_\bd_\bg_\be {\n-46 size_t index; /* edge id */\n-47 double weight; /* edge weight */\n-48 inline bool isUnitWeight() const { return (weight == 1.0); }\n-49 friend std::ostream &operator<<(std::ostream &os, const _\bE_\bd_\bg_\be &edge);\n-50\n-51 private:\n-52 friend class boost::serialization::access;\n-53 template \n-54 void serialize(Archive &ar, const unsigned int /*version*/) {\n-55 ar &BOOST_SERIALIZATION_NVP(index);\n-56 ar &BOOST_SERIALIZATION_NVP(weight);\n-57 }\n-58 };\n-59\n-60 typedef std::vector Edges;\n-61 typedef std::vector EdgeIndices;\n-62 typedef Edges::iterator iterator;\n-63 typedef Edges::const_iterator const_iterator;\n-64\n-65 protected:\n-66 Edges edges_; /* index to the factors */\n-67\n-68 public:\n-69 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh() {}\n-70 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh(const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh &subgraph) : edges_(subgraph.edges()) {}\n-71 Subgraph(const Edges &edges) : edges_(edges) {}\n-72 Subgraph(const std::vector &indices);\n-73\n-74 inline const Edges &edges() const { return edges_; }\n-75 inline size_t size() const { return edges_.size(); }\n-76 EdgeIndices edgeIndices() const;\n-77\n-78 iterator begin() { return edges_.begin(); }\n-79 const_iterator begin() const { return edges_.begin(); }\n-80 iterator end() { return edges_.end(); }\n-81 const_iterator end() const { return edges_.end(); }\n-82\n-83 void _\bs_\ba_\bv_\be(const std::string &fn) const;\n-84 static Subgraph load(const std::string &fn);\n-85 friend std::ostream &operator<<(std::ostream &os, const Subgraph &subgraph);\n-86\n-87 private:\n-88 friend class boost::serialization::access;\n-89 template \n-90 void serialize(Archive &ar, const unsigned int /*version*/) {\n-91 ar &BOOST_SERIALIZATION_NVP(edges_);\n-92 }\n-93};\n-94\n-95/\n-****************************************************************************/\n-_\b9_\b6struct GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n-97 typedef boost::shared_ptr shared_ptr;\n-98\n-99 enum Skeleton {\n-100 /* augmented tree */\n-101 NATURALCHAIN = 0, /* natural ordering of the graph */\n-102 BFS, /* breadth-first search tree */\n-103 KRUSKAL, /* maximum weighted spanning tree */\n-104 } skeletonType;\n-105\n-106 enum SkeletonWeight { /* how to weigh the graph edges */\n-107 EQUAL = 0, /* every block edge has equal weight */\n-108 RHS_2NORM, /* use the 2-norm of the rhs */\n-109 LHS_FNORM, /* use the frobenius norm of the lhs */\n-110 RANDOM, /* bounded random edge weight */\n-111 } skeletonWeight;\n-112\n-113 enum AugmentationWeight { /* how to weigh the graph edges */\n-114 SKELETON = 0, /* use the same weights in building\n-115 the skeleton */\n-116 // STRETCH, /* stretch in the\n-117 // laplacian sense */ GENERALIZED_STRETCH /*\n-118 // the generalized stretch defined in\n-119 // jian2013iros */\n-120 } augmentationWeight;\n-121\n-_\b1_\b2_\b3 double _\ba_\bu_\bg_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br;\n-124\n-125 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs()\n-126 : skeletonType(KRUSKAL),\n-127 skeletonWeight(RANDOM),\n-128 augmentationWeight(SKELETON),\n-129 augmentationFactor(1.0) {}\n-130 virtual _\b~_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs() {}\n-131\n-132 /* for serialization */\n-133 void print() const;\n-134 virtual void print(std::ostream &os) const;\n-135 friend std::ostream &operator<<(std::ostream &os,\n-136 const PreconditionerParameters &p);\n-137\n-138 static Skeleton skeletonTranslator(const std::string &s);\n-139 static std::string skeletonTranslator(Skeleton s);\n-140 static SkeletonWeight skeletonWeightTranslator(const std::string &s);\n-141 static std::string skeletonWeightTranslator(SkeletonWeight w);\n-142 static AugmentationWeight augmentationWeightTranslator(const std::string\n-&s);\n-143 static std::string augmentationWeightTranslator(AugmentationWeight w);\n-144};\n-145\n-146/\n-*****************************************************************************/\n-_\b1_\b4_\b7class GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br {\n-148 public:\n-149 typedef _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br _\bB_\ba_\bs_\be;\n-150 typedef std::vector Weights;\n-151\n-152 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br(\n-153 const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p = _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs())\n-154 : parameters_(p) {}\n-155 virtual _\b~_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br() {}\n-156 virtual _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh operator()(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &jfg) const;\n-157\n-158 private:\n-159 std::vector buildTree(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-160 const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bs_\bi_\bz_\be_\b__\bt_\b> &ordering,\n-161 const std::vector &weights) const;\n-162 std::vector unary(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg) const;\n-163 std::vector natural_chain(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg) const;\n-164 std::vector bfs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg) const;\n-165 std::vector kruskal(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-166 const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bs_\bi_\bz_\be_\b__\bt_\b> &ordering,\n-167 const std::vector &weights) const;\n-168 std::vector sample(const std::vector &weights,\n-169 const size_t t) const;\n-170 Weights weights(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg) const;\n-171 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs parameters_;\n-172};\n-173\n-175_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bb_\bu_\bi_\bl_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-176 const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh &subgraph,\n-177 const bool clone);\n-178\n-181std::pair _\bs_\bp_\bl_\bi_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(\n-182 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factorGraph, const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh &subgraph);\n-183\n-184} // namespace gtsam\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+_\b9_\b4 class GTSAM_EXPORT _\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn : public\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn {\n+95 _\bK_\be_\by j_;\n+96 public:\n+97 _\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(_\bK_\be_\by j) noexcept : j_(j) {}\n+98 _\b~_\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() noexcept override {}\n+99 _\bK_\be_\by nearbyVariable() const { return j_; }\n+100 const char* what() const noexcept override;\n+101 };\n+102\n+103 /\n+* ************************************************************************* */\n+_\b1_\b0_\b6 class GTSAM_EXPORT _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl : public\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn {\n+107 public:\n+_\b1_\b0_\b8 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bf_\ba_\bc_\bt_\bo_\br_\bD_\bi_\bm_\bs;\n+_\b1_\b0_\b9 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bD_\bi_\bm_\bs;\n+110\n+111 _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx factorDims, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx noiseModelDims) :\n+112 factorDims(factorDims), noiseModelDims(noiseModelDims) {}\n+113 _\b~_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl() noexcept override {}\n+114\n+115 const char* what() const noexcept override;\n+116\n+117 private:\n+118 mutable std::string description_;\n+119 };\n+120\n+121 /\n+* ************************************************************************* */\n+_\b1_\b2_\b4 class GTSAM_EXPORT _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk : public\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk> {\n+125 public:\n+_\b1_\b2_\b6 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bf_\ba_\bc_\bt_\bo_\br_\bR_\bo_\bw_\bs;\n+_\b1_\b2_\b7 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bb_\bl_\bo_\bc_\bk_\bR_\bo_\bw_\bs;\n+128\n+129 _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx factorRows, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx blockRows) :\n+130 factorRows(factorRows), blockRows(blockRows) {}\n+131 _\b~_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk() noexcept override {}\n+132\n+133 const char* what() const noexcept override;\n+134\n+135 private:\n+136 mutable std::string description_;\n+137 };\n+138\n+139 /\n+* ************************************************************************* */\n+_\b1_\b4_\b0 class _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn : public\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn<_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn> {\n+141 public:\n+142 _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn(const char *message) :\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b<_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\b>(message) {}\n+143 };\n+144\n+145 }\n _\bt_\by_\bp_\be_\bs_\b._\bh\n Typedefs for easier changing of types.\n-_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n-A thin wrapper around std::map that uses boost's fast_pool_allocator.\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n+Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh\n-GaussianFactorGraph buildFactorSubgraph(const GaussianFactorGraph &gfg, const\n-Subgraph &subgraph, const bool clone)\n-Select the factors in a factor graph according to the subgraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.cpp:447\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\bl_\bi_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-std::pair< GaussianFactorGraph, GaussianFactorGraph > splitFactorGraph(const\n-GaussianFactorGraph &factorGraph, const Subgraph &subgraph)\n-Split the graph into a subgraph and the remaining edges.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.cpp:460\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\ba_\bv_\be\n-void save(const Matrix &A, const string &s, const string &filename)\n-save a matrix to file, which can be loaded by matlab\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bd_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-double augmentationFactor\n-factor multiplied with n, yields number of extra edges.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.h:147\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+Thrown when a linear system is ill-posed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+An exception indicating that the noise model dimension passed into a\n+JacobianFactor has a different d...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bD_\bi_\bm_\bs\n+const DenseIndex factorDims\n+The dimensionality of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bD_\bi_\bm_\bs\n+const DenseIndex noiseModelDims\n+The dimensionality of the noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk\n+An exception indicating that a matrix block passed into a JacobianFactor has a\n+different dimensionali...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:124\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bR_\bo_\bw_\bs\n+const DenseIndex factorRows\n+The dimensionality of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bR_\bo_\bw_\bs\n+const DenseIndex blockRows\n+The dimensionality of the noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bD_\be_\bn_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:140\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00773.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00773.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/RegularJacobianFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,52 @@\n \n \n \n \n \n
\n \n-
RegularJacobianFactor.h File Reference
\n+Namespaces |\n+Functions
\n+
NoiseModel.cpp File Reference
\n \n
\n-\n-

JacobianFactor class with fixed sized blcoks. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::RegularJacobianFactor< D >
 JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator. More...
 
\n \n \n \n \n+\n+\n+\n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
namespace  gtsam::noiseModel
 All noise models live in the noiseModel namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+template<class MATRIX >
void gtsam::noiseModel::updateAb (MATRIX &Ab, int j, const Vector &a, const Vector &rd)
 
\n+boost::optional< Vector > gtsam::noiseModel::checkIfDiagonal (const Matrix &M)
 
\n+template<typename VECTOR >
boost::optional< size_t > gtsam::noiseModel::check_if_constraint (VECTOR a, const Vector &invsigmas, size_t m)
 
\n

Detailed Description

\n-

JacobianFactor class with fixed sized blcoks.

\n-
Author
Sungtae An
\n-
Date
Nov 11, 2014
\n+
Date
Jan 13, 2010
\n+
Author
Richard Roberts
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-RegularJacobianFactor.h File Reference\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br class with fixed sized blcoks. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bD_\b _\b>\n-\u00a0 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br with constant sized blocks Provides raw memory access\n- versions of linear operator. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+NoiseModel.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+\u00a0 All noise models live in the _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl namespace.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\boi\bis\bse\beM\bMo\bod\bde\bel\bl:\b::\b:u\bup\bpd\bda\bat\bte\beA\bAb\bb (MATRIX &Ab, int j,\n+ const Vector &a, const Vector &rd)\n+\u00a0\n+boost::optional< Vector >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\boi\bis\bse\beM\bMo\bod\bde\bel\bl:\b::\b:c\bch\bhe\bec\bck\bkI\bIf\bfD\bDi\bia\bag\bgo\bon\bna\bal\bl (const Matrix &M)\n+\u00a0\n+template\n+boost::optional< size_t >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\boi\bis\bse\beM\bMo\bod\bde\bel\bl:\b::\b:c\bch\bhe\bec\bck\bk_\b_i\bif\bf_\b_c\bco\bon\bns\bst\btr\bra\bai\bin\bnt\bt (VECTOR a,\n+ const Vector &invsigmas, size_t m)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br class with fixed sized blcoks.\n- Author\n- Sungtae An\n Date\n- Nov 11, 2014\n+ Jan 13, 2010\n+ Author\n+ Richard Roberts\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00779.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00779.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianConditional.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.h File Reference\n \n \n \n \n \n \n \n@@ -96,45 +96,48 @@\n \n \n \n
\n \n-
GaussianConditional.h File Reference
\n+
Scatter.h File Reference
\n
\n
\n \n-

Conditional Gaussian Base class. \n+

Maps global variable indices to slot indices. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::GaussianConditional
 A GaussianConditional functions as the node in a Bayes network. More...
struct  gtsam::SlotEntry
 One SlotEntry stores the slot index for a variable, as well its dim. More...
 
struct  gtsam::traits< GaussianConditional >
 traits More...
class  gtsam::Scatter
 Scatter is an intermediate data structure used when building a HessianFactor incrementally, to get the keys in the right order. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Conditional Gaussian Base class.

\n-
Author
Christian Potthast
\n+

Maps global variable indices to slot indices.

\n+
Author
Richard Roberts
\n+
\n+Frank Dellaert
\n+
Date
June 2015
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,34 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianConditional.h File Reference\n-Conditional Gaussian Base class. _\bM_\bo_\br_\be_\b._\b._\b.\n+Scatter.h File Reference\n+Maps global variable indices to slot indices. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-\u00a0 A _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl functions as the node in a Bayes network.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by\n+\u00a0 One _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by stores the slot index for a variable, as well its dim.\n _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n+ _\bS_\bc_\ba_\bt_\bt_\be_\br is an intermediate data structure used when building a\n+\u00a0 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br incrementally, to get the keys in the right order.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Conditional Gaussian Base class.\n+Maps global variable indices to slot indices.\n Author\n- Christian Potthast\n+ Richard Roberts\n+ Frank Dellaert\n+ Date\n+ June 2015\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+ * _\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00779.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00779.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a00779 = [\n- [\"gtsam::traits< GaussianConditional >\", \"a03768.html\", null]\n+ [\"gtsam::SlotEntry\", \"a04024.html\", null],\n+ [\"gtsam::Scatter\", \"a04028.html\", \"a04028\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00779_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00779_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianConditional.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.h Source File\n \n \n \n \n \n \n \n@@ -98,224 +98,84 @@\n
No Matches
\n \n \n \n \n \n
\n-
GaussianConditional.h
\n+
Scatter.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18// \\callgraph
\n-
19
\n
20#pragma once
\n
21
\n-
22#include <boost/utility.hpp>
\n-
23
\n-\n-\n-\n-
27#include <gtsam/inference/Conditional-inst.h>
\n-\n-
29
\n-
30#include <random> // for std::mt19937_64
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
\n-
40 class GTSAM_EXPORT GaussianConditional :
\n-
41 public JacobianFactor,
\n-
42 public Conditional<JacobianFactor, GaussianConditional>
\n-
43 {
\n-
44 public:
\n-\n-
46 typedef boost::shared_ptr<This> shared_ptr;
\n-\n-\n-
49
\n-
52
\n-\n-
55
\n-
57 GaussianConditional(Key key, const Vector& d, const Matrix& R,
\n-
58 const SharedDiagonal& sigmas = SharedDiagonal());
\n+
22#include <gtsam/inference/Key.h>
\n+
23#include <gtsam/base/FastMap.h>
\n+
24#include <gtsam/dllexport.h>
\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
28class GaussianFactorGraph;
\n+
29class Ordering;
\n+
30
\n+
\n+
32struct GTSAM_EXPORT SlotEntry {
\n+
33 Key key;
\n+
34 size_t dimension;
\n+
35 SlotEntry(Key _key, size_t _dimension) : key(_key), dimension(_dimension) {}
\n+
36 std::string toString() const;
\n+
37 friend bool operator<(const SlotEntry& p, const SlotEntry& q) {
\n+
38 return p.key < q.key;
\n+
39 }
\n+
40 static bool Zero(const SlotEntry& p) { return p.dimension==0;}
\n+
41};
\n+
\n+
42
\n+
\n+
49class Scatter : public FastVector<SlotEntry> {
\n+
50 public:
\n+
52 GTSAM_EXPORT Scatter() {}
\n+
53
\n+
55 GTSAM_EXPORT explicit Scatter(const GaussianFactorGraph& gfg);
\n+
56
\n+
58 GTSAM_EXPORT explicit Scatter(const GaussianFactorGraph& gfg, const Ordering& ordering);
\n
59
\n-
61 GaussianConditional(Key key, const Vector& d, const Matrix& R, Key parent1,
\n-
62 const Matrix& S,
\n-
63 const SharedDiagonal& sigmas = SharedDiagonal());
\n-
64
\n-
66 GaussianConditional(Key key, const Vector& d, const Matrix& R, Key parent1,
\n-
67 const Matrix& S, Key parent2, const Matrix& T,
\n-
68 const SharedDiagonal& sigmas = SharedDiagonal());
\n-
69
\n-
73 template<typename TERMS>
\n-
74 GaussianConditional(const TERMS& terms,
\n-
75 size_t nrFrontals, const Vector& d,
\n-
76 const SharedDiagonal& sigmas = SharedDiagonal());
\n-
77
\n-
82 template<typename KEYS>
\n-\n-
84 const KEYS& keys, size_t nrFrontals, const VerticalBlockMatrix& augmentedMatrix,
\n-
85 const SharedDiagonal& sigmas = SharedDiagonal());
\n-
86
\n-
88 static GaussianConditional FromMeanAndStddev(Key key, const Vector& mu,
\n-
89 double sigma);
\n-
90
\n-
92 static GaussianConditional FromMeanAndStddev(Key key, const Matrix& A,
\n-
93 Key parent, const Vector& b,
\n-
94 double sigma);
\n-
95
\n-
98 static GaussianConditional FromMeanAndStddev(Key key, //
\n-
99 const Matrix& A1, Key parent1,
\n-
100 const Matrix& A2, Key parent2,
\n-
101 const Vector& b, double sigma);
\n-
102
\n-
104 template<typename... Args>
\n-
\n-
105 static shared_ptr sharedMeanAndStddev(Args&&... args) {
\n-
106 return boost::make_shared<This>(FromMeanAndStddev(std::forward<Args>(args)...));
\n-
107 }
\n-
\n-
108
\n-
116 template<typename ITERATOR>
\n-
117 static shared_ptr Combine(ITERATOR firstConditional, ITERATOR lastConditional);
\n-
118
\n-
122
\n-
124 void print(
\n-
125 const std::string& = "GaussianConditional",
\n-
126 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n-
127
\n-
129 bool equals(const GaussianFactor&cg, double tol = 1e-9) const override;
\n-
130
\n-
134
\n-
139 double logNormalizationConstant() const override;
\n-
140
\n-
148 double logProbability(const VectorValues& x) const;
\n-
149
\n-
155 double evaluate(const VectorValues& x) const;
\n-
156
\n-
\n-
158 double operator()(const VectorValues& x) const {
\n-
159 return evaluate(x);
\n-
160 }
\n-
\n-
161
\n-
175 VectorValues solve(const VectorValues& parents) const;
\n-
176
\n-
177 VectorValues solveOtherRHS(const VectorValues& parents, const VectorValues& rhs) const;
\n-
178
\n-
180 void solveTransposeInPlace(VectorValues& gy) const;
\n-
181
\n-\n-
184 const VectorValues& frontalValues) const;
\n-
185
\n-
187 JacobianFactor::shared_ptr likelihood(const Vector& frontal) const;
\n-
188
\n-
195 VectorValues sample(std::mt19937_64* rng) const;
\n-
196
\n-
204 VectorValues sample(const VectorValues& parentsValues,
\n-
205 std::mt19937_64* rng) const;
\n-
206
\n-
208 VectorValues sample() const;
\n-
209
\n-
211 VectorValues sample(const VectorValues& parentsValues) const;
\n-
212
\n-
216
\n-
218 constABlock R() const { return Ab_.range(0, nrFrontals()); }
\n-
219
\n-
221 constABlock S() const { return Ab_.range(nrFrontals(), size()); }
\n-
222
\n-
224 constABlock S(const_iterator it) const { return BaseFactor::getA(it); }
\n-
225
\n-
227 const constBVector d() const { return BaseFactor::getb(); }
\n-
228
\n-
240 inline double determinant() const { return exp(logDeterminant()); }
\n-
241
\n-
253 double logDeterminant() const;
\n-
254
\n-
258
\n-
263 double logProbability(const HybridValues& x) const override;
\n-
264
\n-
269 double evaluate(const HybridValues& x) const override;
\n-
270
\n-
271 using Conditional::operator(); // Expose evaluate(const HybridValues&) method..
\n-
272 using JacobianFactor::error; // Expose error(const HybridValues&) method..
\n-
273
\n-
275
\n-
276
\n-
277#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
280
\n-
282 void GTSAM_DEPRECATED scaleFrontalsBySigma(VectorValues& gy) const;
\n-
284#endif
\n-
285
\n-
286 private:
\n-
288 friend class boost::serialization::access;
\n-
289 template<class Archive>
\n-
290 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
291 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
\n-
292 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
\n-
293 }
\n-
294 }; // GaussianConditional
\n-
\n-
295
\n-
297template<>
\n-
298struct traits<GaussianConditional> : public Testable<GaussianConditional> {};
\n-
299
\n-
300} // \\ namespace gtsam
\n-
301
\n-\n-
303
\n-
Base class for conditional densities.
\n-
Factor Graph Values.
\n-\n-
Conditional Gaussian Base class.
\n-
Included from all GTSAM files.
\n+
61 GTSAM_EXPORT void add(Key key, size_t dim);
\n+
62
\n+
63 private:
\n+
65 iterator find(Key key);
\n+
66};
\n+
\n+
67
\n+
68} // \\ namespace gtsam
\n+
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Conditional.h:64
\n-
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n-
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n-
GaussianConditional This
Typedef to this class.
Definition GaussianConditional.h:45
\n-
constABlock S(const_iterator it) const
Get a view of the S matrix for the variable pointed to by the given key iterator.
Definition GaussianConditional.h:224
\n-
constABlock R() const
Return a view of the upper-triangular R block of the conditional.
Definition GaussianConditional.h:218
\n-
JacobianFactor BaseFactor
Typedef to our factor base class.
Definition GaussianConditional.h:47
\n-
GaussianConditional()
default constructor needed for serialization
Definition GaussianConditional.h:54
\n-
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition GaussianConditional.h:48
\n-
static shared_ptr Combine(ITERATOR firstConditional, ITERATOR lastConditional)
Combine several GaussianConditional into a single dense GC.
\n-
double determinant() const
Compute the determinant of the R matrix.
Definition GaussianConditional.h:240
\n-
double operator()(const VectorValues &x) const
Evaluate probability density, sugar.
Definition GaussianConditional.h:158
\n-
static shared_ptr sharedMeanAndStddev(Args &&... args)
Create shared pointer by forwarding arguments to fromMeanAndStddev.
Definition GaussianConditional.h:105
\n-
constABlock S() const
Get a view of the parent blocks.
Definition GaussianConditional.h:221
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianConditional.h:46
\n-
const constBVector d() const
Get a view of the r.h.s.
Definition GaussianConditional.h:227
\n-
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n-
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition JacobianFactor.h:96
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
Definition Ordering.h:34
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
One SlotEntry stores the slot index for a variable, as well its dim.
Definition Scatter.h:32
\n+
Scatter is an intermediate data structure used when building a HessianFactor incrementally,...
Definition Scatter.h:49
\n+
GTSAM_EXPORT void add(Key key, size_t dim)
Add a key/dim pair.
Definition Scatter.cpp:76
\n+
GTSAM_EXPORT Scatter()
Default Constructor.
Definition Scatter.h:52
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,298 +1,97 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianConditional.h\n+Scatter.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18// \\callgraph\n-19\n 20#pragma once\n 21\n-22#include \n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-27#include \n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-29\n-30#include // for std::mt19937_64\n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-_\b4_\b0 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl :\n-41 public _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br,\n-42 public _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-43 {\n-44 public:\n-_\b4_\b5 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bT_\bh_\bi_\bs;\n-_\b4_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-_\b4_\b7 typedef _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br;\n-_\b4_\b8 typedef _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bT_\bh_\bi_\bs_\b> _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-49\n-52\n-_\b5_\b4 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() {}\n-55\n-57 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by key, const Vector& d, const Matrix& R,\n-58 const SharedDiagonal& sigmas = SharedDiagonal());\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n+24#include \n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28class GaussianFactorGraph;\n+29class Ordering;\n+30\n+_\b3_\b2struct GTSAM_EXPORT _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by {\n+33 _\bK_\be_\by key;\n+34 size_t dimension;\n+35 _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by(_\bK_\be_\by _key, size_t _dimension) : key(_key), dimension(_dimension) {}\n+36 std::string toString() const;\n+37 friend bool operator<(const _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by& p, const _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by& q) {\n+38 return p.key < q.key;\n+39 }\n+40 static bool Zero(const _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by& p) { return p.dimension==0;}\n+41};\n+42\n+_\b4_\b9class _\bS_\bc_\ba_\bt_\bt_\be_\br : public _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br {\n+50 public:\n+_\b5_\b2 GTSAM_EXPORT _\bS_\bc_\ba_\bt_\bt_\be_\br() {}\n+53\n+55 GTSAM_EXPORT explicit _\bS_\bc_\ba_\bt_\bt_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& gfg);\n+56\n+58 GTSAM_EXPORT explicit _\bS_\bc_\ba_\bt_\bt_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& gfg, const\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering);\n 59\n-61 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by key, const Vector& d, const Matrix& R, _\bK_\be_\by parent1,\n-62 const Matrix& S,\n-63 const SharedDiagonal& sigmas = SharedDiagonal());\n-64\n-66 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by key, const Vector& d, const Matrix& R, _\bK_\be_\by parent1,\n-67 const Matrix& S, _\bK_\be_\by parent2, const Matrix& T,\n-68 const SharedDiagonal& sigmas = SharedDiagonal());\n-69\n-73 template\n-74 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const TERMS& terms,\n-75 size_t nrFrontals, const Vector& d,\n-76 const SharedDiagonal& sigmas = SharedDiagonal());\n-77\n-82 template\n-83 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(\n-84 const KEYS& keys, size_t nrFrontals, const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n-augmentedMatrix,\n-85 const SharedDiagonal& sigmas = SharedDiagonal());\n-86\n-88 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl FromMeanAndStddev(_\bK_\be_\by key, const Vector& mu,\n-89 double sigma);\n-90\n-92 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl FromMeanAndStddev(_\bK_\be_\by key, const Matrix& A,\n-93 _\bK_\be_\by parent, const Vector& b,\n-94 double sigma);\n-95\n-98 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl FromMeanAndStddev(_\bK_\be_\by key, //\n-99 const Matrix& A1, _\bK_\be_\by parent1,\n-100 const Matrix& A2, _\bK_\be_\by parent2,\n-101 const Vector& b, double sigma);\n-102\n-104 template\n-_\b1_\b0_\b5 static _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bs_\bh_\ba_\br_\be_\bd_\bM_\be_\ba_\bn_\bA_\bn_\bd_\bS_\bt_\bd_\bd_\be_\bv(Args&&... args) {\n-106 return boost::make_shared(FromMeanAndStddev(std::forward\n-(args)...));\n-107 }\n-108\n-116 template\n-_\b1_\b1_\b7 static _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bC_\bo_\bm_\bb_\bi_\bn_\be(ITERATOR firstConditional, ITERATOR\n-lastConditional);\n-118\n-122\n-124 void _\bp_\br_\bi_\bn_\bt(\n-125 const std::string& = \"GaussianConditional\",\n-126 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n-127\n-129 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br&cg, double tol = 1e-9) const override;\n-130\n-134\n-139 double logNormalizationConstant() const override;\n-140\n-148 double logProbability(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-149\n-155 double evaluate(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-156\n-_\b1_\b5_\b8 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n-159 return evaluate(x);\n-160 }\n-161\n-175 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs solve(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& parents) const;\n-176\n-177 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs solveOtherRHS(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& parents, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs&\n-rhs) const;\n-178\n-180 void solveTransposeInPlace(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gy) const;\n-181\n-183 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br likelihood(\n-184 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& frontalValues) const;\n-185\n-187 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br likelihood(const Vector& frontal) const;\n-188\n-195 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(std::mt19937_64* rng) const;\n-196\n-204 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& parentsValues,\n-205 std::mt19937_64* rng) const;\n-206\n-208 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample() const;\n-209\n-211 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& parentsValues) const;\n-212\n-216\n-_\b2_\b1_\b8 constABlock _\bR() const { return Ab_.range(0, nrFrontals()); }\n-219\n-_\b2_\b2_\b1 constABlock _\bS() const { return Ab_.range(nrFrontals(), size()); }\n-222\n-_\b2_\b2_\b4 constABlock _\bS(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br it) const { return BaseFactor::getA(it); }\n-225\n-_\b2_\b2_\b7 const constBVector _\bd() const { return BaseFactor::getb(); }\n-228\n-_\b2_\b4_\b0 inline double _\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt() const { return exp(logDeterminant()); }\n-241\n-253 double logDeterminant() const;\n-254\n-258\n-263 double logProbability(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n-264\n-269 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n-270\n-271 using Conditional::operator(); // Expose evaluate(const HybridValues&)\n-method..\n-272 using JacobianFactor::error; // Expose error(const HybridValues&) method..\n-273\n-275\n-276\n-277#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-280\n-282 void GTSAM_DEPRECATED scaleFrontalsBySigma(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gy) const;\n-284#endif\n-285\n-286 private:\n-_\b2_\b8_\b8 friend class boost::serialization::access;\n-289 template\n-290 void serialize(Archive & ar, const unsigned int /*version*/) {\n-291 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br);\n-292 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl);\n-293 }\n-294 }; // GaussianConditional\n-295\n-297template<>\n-_\b2_\b9_\b8struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-{};\n-299\n-300} // \\ namespace gtsam\n-301\n-302#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b-_\bi_\bn_\bl_\b._\bh>\n-303\n-_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-Base class for conditional densities.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b-_\bi_\bn_\bl_\b._\bh\n-Conditional Gaussian Base class.\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n+61 GTSAM_EXPORT void _\ba_\bd_\bd(_\bK_\be_\by key, size_t dim);\n+62\n+63 private:\n+65 iterator find(_\bK_\be_\by key);\n+66};\n+67\n+68} // \\ namespace gtsam\n+_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n+A thin wrapper around std::map that uses boost's fast_pool_allocator.\n+_\bK_\be_\by_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of vertical blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::const_iterator const_iterator\n-Const iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-A GaussianConditional functions as the node in a Bayes network.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bT_\bh_\bi_\bs\n-GaussianConditional This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS\n-constABlock S(const_iterator it) const\n-Get a view of the S matrix for the variable pointed to by the given key\n-iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:224\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bR\n-constABlock R() const\n-Return a view of the upper-triangular R block of the conditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:218\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-JacobianFactor BaseFactor\n-Typedef to our factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-GaussianConditional()\n-default constructor needed for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Conditional< BaseFactor, This > BaseConditional\n-Typedef to our conditional base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be\n-static shared_ptr Combine(ITERATOR firstConditional, ITERATOR lastConditional)\n-Combine several GaussianConditional into a single dense GC.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt\n-double determinant() const\n-Compute the determinant of the R matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:240\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-double operator()(const VectorValues &x) const\n-Evaluate probability density, sugar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:158\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bM_\be_\ba_\bn_\bA_\bn_\bd_\bS_\bt_\bd_\bd_\be_\bv\n-static shared_ptr sharedMeanAndStddev(Args &&... args)\n-Create shared pointer by forwarding arguments to fromMeanAndStddev.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS\n-constABlock S() const\n-Get a view of the parent blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:221\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bd\n-const constBVector d() const\n-Get a view of the r.h.s.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:227\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-An abstract virtual base class for JacobianFactor and HessianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor in the squared-error form.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by\n+One SlotEntry stores the slot index for a variable, as well its dim.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n+Scatter is an intermediate data structure used when building a HessianFactor\n+incrementally,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br_\b:_\b:_\ba_\bd_\bd\n+GTSAM_EXPORT void add(Key key, size_t dim)\n+Add a key/dim pair.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.cpp:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n+GTSAM_EXPORT Scatter()\n+Default Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:52\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+ * _\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00782.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00782.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Sampler.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/HessianFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,37 +94,58 @@\n \n \n \n \n \n
\n \n-
Sampler.cpp File Reference
\n+Classes |\n+Namespaces |\n+Functions
\n+
HessianFactor.h File Reference
\n \n
\n \n-

sampling from a diagonal NoiseModel \n+

Contains the HessianFactor class, a general quadratic factor. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::HessianFactor
 A Gaussian factor using the canonical parameters (information form) More...
 
struct  gtsam::traits< HessianFactor >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< HessianFactor > > gtsam::EliminateCholesky (const GaussianFactorGraph &factors, const Ordering &keys)
 Densely partially eliminate with Cholesky factorization.
 
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< GaussianFactor > > gtsam::EliminatePreferCholesky (const GaussianFactorGraph &factors, const Ordering &keys)
 Densely partially eliminate with Cholesky factorization.
 
\n

Detailed Description

\n-

sampling from a diagonal NoiseModel

\n-
Author
Frank Dellaert
\n-
\n-Alex Cunningham
\n+

Contains the HessianFactor class, a general quadratic factor.

\n+
Author
Richard Roberts
\n+
Date
Dec 8, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,44 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Sampler.cpp File Reference\n-sampling from a diagonal NoiseModel _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+HessianFactor.h File Reference\n+Contains the HessianFactor class, a general quadratic factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 A Gaussian factor using the canonical parameters (information form)\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by (const\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n+ shared_ptr< _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n+\u00a0 Densely partially eliminate with Cholesky\n+ factorization.\n+\u00a0\n+ std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by (const\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n+shared_ptr< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n+\u00a0 Densely partially eliminate with Cholesky\n+ factorization.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-sampling from a diagonal NoiseModel\n+Contains the HessianFactor class, a general quadratic factor.\n Author\n- Frank Dellaert\n- Alex Cunningham\n+ Richard Roberts\n+ Date\n+ Dec 8, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bc_\bp_\bp\n+ * _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00785.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00785.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/BinaryJacobianFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/VectorValues.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,47 +94,50 @@\n \n \n \n \n \n
\n \n-
BinaryJacobianFactor.h File Reference
\n+Namespaces |\n+Functions
\n+
VectorValues.cpp File Reference
\n \n
\n \n-

A binary JacobianFactor specialization that uses fixed matrix math for speed. \n+

Implementations for VectorValues. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-

\n-Classes

struct  gtsam::BinaryJacobianFactor< M, N1, N2 >
 A binary JacobianFactor specialization that uses fixed matrix math for speed. More...
 
struct  gtsam::traits< BinaryJacobianFactor< M, N1, N2 > >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+GTSAM_EXPORT ostream & gtsam::operator<< (ostream &os, const VectorValues &v)
 
\n+bool gtsam::internal::structureCompareOp (const boost::tuple< VectorValues::value_type, VectorValues::value_type > &vv)
 
\n+VectorValues gtsam::operator* (const double a, const VectorValues &v)
 
\n

Detailed Description

\n-

A binary JacobianFactor specialization that uses fixed matrix math for speed.

\n-
Date
June 2015
\n-
Author
Frank Dellaert
\n+

Implementations for VectorValues.

\n+
Author
Richard Roberts
\n+
\n+Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BinaryJacobianFactor.h File Reference\n-A binary _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br specialization that uses fixed matrix math for speed.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bM_\b,_\b _\bN_\b1_\b,_\b _\bN_\b2_\b _\b>\n-\u00a0 A binary _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br specialization that uses fixed matrix math for\n- speed. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bM_\b,_\b _\bN_\b1_\b,_\b _\bN_\b2_\b _\b>_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+VectorValues.cpp File Reference\n+Implementations for _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+GTSAM_EXPORT ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &v)\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:s\bst\btr\bru\buc\bct\btu\bur\bre\beC\bCo\bom\bmp\bpa\bar\bre\beO\bOp\bp (const boost::\n+ tuple< _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:\n+ _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be > &vv)\n+\u00a0\n+ _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br*\b* (const double a, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+ &v)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A binary _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br specialization that uses fixed matrix math for speed.\n- Date\n- June 2015\n+Implementations for _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs.\n Author\n- Frank Dellaert\n+ Richard Roberts\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00788.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00788.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/HessianFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Errors.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,48 +95,71 @@\n \n \n \n \n
\n \n-
HessianFactor.cpp File Reference
\n+
Errors.cpp File Reference
\n
\n
\n+\n+

Factor Graph Values. \n+More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::Dims = std::vector< Key >
 
\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 Functions

std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< HessianFactor > > gtsam::EliminateCholesky (const GaussianFactorGraph &factors, const Ordering &keys)
 Densely partially eliminate with Cholesky factorization.
 
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< GaussianFactor > > gtsam::EliminatePreferCholesky (const GaussianFactorGraph &factors, const Ordering &keys)
 Densely partially eliminate with Cholesky factorization.
 
\n+Errors gtsam::createErrors (const VectorValues &V)
 Break V into pieces according to its start indices.
 
\n+void gtsam::print (const Errors &e, const std::string &s="Errors")
 Print an Errors instance.
 
\n+bool gtsam::equality (const Errors &actual, const Errors &expected, double tol)
 
\n+Errors gtsam::operator+ (const Errors &a, const Errors &b)
 Addition.
 
\n+Errors gtsam::operator- (const Errors &a, const Errors &b)
 Subtraction.
 
\n+Errors gtsam::operator- (const Errors &a)
 Negation.
 
\n+double gtsam::dot (const Errors &a, const Errors &b)
 Dot product.
 
\n+void gtsam::axpy (double alpha, const Errors &x, Errors &y)
 BLAS level 2 style AXPY, y := alpha*x + y
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
Dec 8, 2010
\n+

Factor Graph Values.

\n+

Errors

Author
Carlos Nieto
\n+
\n+Christian Potthast
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,36 +1,47 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-HessianFactor.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Errors.cpp File Reference\n+Factor Graph _\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDi\bim\bms\bs = std::vector< _\bK_\be_\by >\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by (const\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n- shared_ptr< _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n-\u00a0 Densely partially eliminate with Cholesky\n- factorization.\n-\u00a0\n- std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by (const\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n-shared_ptr< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n-\u00a0 Densely partially eliminate with Cholesky\n- factorization.\n+_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bcr\bre\bea\bat\bte\beE\bEr\brr\bro\bor\brs\bs (const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &V)\n+\u00a0 Break V into pieces according to its start indices.\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const _\bE_\br_\br_\bo_\br_\bs &e, const std::string &s=\"Errors\")\n+\u00a0 Print an Errors instance.\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bli\bit\bty\by (const _\bE_\br_\br_\bo_\br_\bs &actual, const _\bE_\br_\br_\bo_\br_\bs &expected, double\n+ tol)\n+\u00a0\n+_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br+\b+ (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n+\u00a0 Addition.\n+\u00a0\n+_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br-\b- (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n+\u00a0 Subtraction.\n+\u00a0\n+_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br-\b- (const _\bE_\br_\br_\bo_\br_\bs &a)\n+\u00a0 Negation.\n+\u00a0\n+double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdo\bot\bt (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n+\u00a0 Dot product.\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bax\bxp\bpy\by (double alpha, const _\bE_\br_\br_\bo_\br_\bs &x, _\bE_\br_\br_\bo_\br_\bs &y)\n+\u00a0 BLAS level 2 style AXPY, y := alpha*x + y\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Factor Graph _\bV_\ba_\bl_\bu_\be_\bs.\n+Errors\n Author\n- Richard Roberts\n- Date\n- Dec 8, 2010\n+ Carlos Nieto\n+ Christian Potthast\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bE_\br_\br_\bo_\br_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00788.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00788.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,9 @@\n var a00788 = [\n- [\"EliminateCholesky\", \"a00788.html#ga37760d3ca31c6d8d60a3a2a17babc3a4\", null],\n- [\"EliminatePreferCholesky\", \"a00788.html#gadbb147d2a9039f67ad3b8b5515d2e5cc\", null]\n+ [\"axpy\", \"a00788.html#a5644e12e89afaac433f5d61c3d8e9003\", null],\n+ [\"createErrors\", \"a00788.html#aa84fa88db91d429bec261c655fc54bd6\", null],\n+ [\"dot\", \"a00788.html#a106ec458ddb425604809da93346af55d\", null],\n+ [\"operator+\", \"a00788.html#a552de56fca49d1b4942dd9b8e8357b0a\", null],\n+ [\"operator-\", \"a00788.html#aa91c0485819ec2bfd249a922c81e3eb4\", null],\n+ [\"operator-\", \"a00788.html#af2dc48a6a2e9abf4d0636578847a6b5a\", null],\n+ [\"print\", \"a00788.html#a6abcac97e441f1454790ff53caa1b229\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00791.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00791.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/KalmanFilter.h File Reference\n \n \n \n \n \n \n \n@@ -95,49 +95,53 @@\n \n \n \n \n
\n \n-
Scatter.h File Reference
\n+Namespaces |\n+Macros
\n+
KalmanFilter.h File Reference
\n \n
\n \n-

Maps global variable indices to slot indices. \n+

Simple linear Kalman filter. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::SlotEntry
 One SlotEntry stores the slot index for a variable, as well its dim. More...
 
class  gtsam::Scatter
 Scatter is an intermediate data structure used when building a HessianFactor incrementally, to get the keys in the right order. More...
class  gtsam::KalmanFilter
 Kalman Filter class. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Macros

\n+#define KALMANFILTER_DEFAULT_FACTORIZATION   QR
 
\n

Detailed Description

\n-

Maps global variable indices to slot indices.

\n-
Author
Richard Roberts
\n+

Simple linear Kalman filter.

\n+

Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.

Date
Sep 3, 2011
\n+
Author
Stephen Williams
\n
\n Frank Dellaert
\n-
Date
June 2015
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Scatter.h File Reference\n-Maps global variable indices to slot indices. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n+KalmanFilter.h File Reference\n+Simple linear Kalman filter. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by\n-\u00a0 One _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by stores the slot index for a variable, as well its dim.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n- _\bS_\bc_\ba_\bt_\bt_\be_\br is an intermediate data structure used when building a\n-\u00a0 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br incrementally, to get the keys in the right order.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br\n+\u00a0 Kalman Filter class. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 K\bKA\bAL\bLM\bMA\bAN\bNF\bFI\bIL\bLT\bTE\bER\bR_\b_D\bDE\bEF\bFA\bAU\bUL\bLT\bT_\b_F\bFA\bAC\bCT\bTO\bOR\bRI\bIZ\bZA\bAT\bTI\bIO\bON\bN\u00a0\u00a0\u00a0QR\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Maps global variable indices to slot indices.\n+Simple linear Kalman filter.\n+Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.\n+ Date\n+ Sep 3, 2011\n Author\n- Richard Roberts\n+ Stephen Williams\n Frank Dellaert\n- Date\n- June 2015\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\n+ * _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00791.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00791.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00791 = [\n- [\"gtsam::SlotEntry\", \"a04024.html\", null],\n- [\"gtsam::Scatter\", \"a04028.html\", \"a04028\"]\n+ [\"gtsam::KalmanFilter\", \"a03852.html\", \"a03852\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00791_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00791_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/KalmanFilter.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
Scatter.h
\n+
KalmanFilter.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,68 +114,119 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
20#pragma once
\n
21
\n-
22#include <gtsam/inference/Key.h>
\n-
23#include <gtsam/base/FastMap.h>
\n-
24#include <gtsam/dllexport.h>
\n+\n+\n+\n
25
\n-
26namespace gtsam {
\n-
27
\n-
28class GaussianFactorGraph;
\n-
29class Ordering;
\n-
30
\n-
\n-
32struct GTSAM_EXPORT SlotEntry {
\n-
33 Key key;
\n-
34 size_t dimension;
\n-
35 SlotEntry(Key _key, size_t _dimension) : key(_key), dimension(_dimension) {}
\n-
36 std::string toString() const;
\n-
37 friend bool operator<(const SlotEntry& p, const SlotEntry& q) {
\n-
38 return p.key < q.key;
\n-
39 }
\n-
40 static bool Zero(const SlotEntry& p) { return p.dimension==0;}
\n-
41};
\n-
\n+
26#ifndef KALMANFILTER_DEFAULT_FACTORIZATION
\n+
27#define KALMANFILTER_DEFAULT_FACTORIZATION QR
\n+
28#endif
\n+
29
\n+
30namespace gtsam {
\n+
31
\n+
\n+
41class GTSAM_EXPORT KalmanFilter {
\n
42
\n+
43public:
\n+
44
\n
\n-
49class Scatter : public FastVector<SlotEntry> {
\n-
50 public:
\n-
52 GTSAM_EXPORT Scatter() {}
\n-
53
\n-
55 GTSAM_EXPORT explicit Scatter(const GaussianFactorGraph& gfg);
\n-
56
\n-
58 GTSAM_EXPORT explicit Scatter(const GaussianFactorGraph& gfg, const Ordering& ordering);
\n+\n+
50 QR, CHOLESKY
\n+
51 };
\n+
\n+
52
\n+
56 typedef GaussianDensity::shared_ptr State;
\n+
57
\n+
58private:
\n
59
\n-
61 GTSAM_EXPORT void add(Key key, size_t dim);
\n-
62
\n-
63 private:
\n-
65 iterator find(Key key);
\n-
66};
\n-
\n-
67
\n-
68} // \\ namespace gtsam
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n-\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
60 const size_t n_;
\n+
61 const Matrix I_;
\n+
62 const GaussianFactorGraph::Eliminate function_;
\n+
64 State solve(const GaussianFactorGraph& factorGraph) const;
\n+
65 State fuse(const State& p, GaussianFactor::shared_ptr newFactor) const;
\n+
66
\n+
67public:
\n+
68
\n+
69 // Constructor
\n+
70 KalmanFilter(size_t n, Factorization method =
\n+
71 KALMANFILTER_DEFAULT_FACTORIZATION) :
\n+
72 n_(n), I_(Matrix::Identity(n_, n_)), function_(
\n+
73 method == QR ? GaussianFactorGraph::Eliminate(EliminateQR) :
\n+\n+
75 }
\n+
76
\n+
83 State init(const Vector& x0, const SharedDiagonal& P0) const;
\n+
84
\n+
86 State init(const Vector& x0, const Matrix& P0) const;
\n+
87
\n+
89 void print(const std::string& s = "") const;
\n+
90
\n+
\n+
92 static Key step(const State& p) {
\n+
93 return p->firstFrontalKey();
\n+
94 }
\n+
\n+
95
\n+
104 State predict(const State& p, const Matrix& F, const Matrix& B,
\n+
105 const Vector& u, const SharedDiagonal& modelQ) const;
\n+
106
\n+
107 /*
\n+
108 * Version of predict with full covariance
\n+
109 * Q is normally derived as G*w*G^T where w models uncertainty of some
\n+
110 * physical property, such as velocity or acceleration, and G is derived from physics.
\n+
111 * This version allows more realistic models than a diagonal covariance matrix.
\n+
112 */
\n+
113 State predictQ(const State& p, const Matrix& F, const Matrix& B,
\n+
114 const Vector& u, const Matrix& Q) const;
\n+
115
\n+
124 State predict2(const State& p, const Matrix& A0, const Matrix& A1,
\n+
125 const Vector& b, const SharedDiagonal& model) const;
\n+
126
\n+
135 State update(const State& p, const Matrix& H, const Vector& z,
\n+
136 const SharedDiagonal& model) const;
\n+
137
\n+
138 /*
\n+
139 * Version of update with full covariance
\n+
140 * Q is normally derived as G*w*G^T where w models uncertainty of some
\n+
141 * physical property, such as velocity or acceleration, and G is derived from physics.
\n+
142 * This version allows more realistic models than a diagonal covariance matrix.
\n+
143 */
\n+
144 State updateQ(const State& p, const Matrix& H, const Vector& z,
\n+
145 const Matrix& Q) const;
\n+
146};
\n+
\n+
147
\n+
148} // \\namespace gtsam
\n+
149
\n+
150/* ************************************************************************* */
\n+
151
\n+
A Gaussian Density.
\n+
Linear Factor Graph where all factors are Gaussians.
\n+\n+
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< HessianFactor > > EliminateCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with Cholesky factorization.
Definition HessianFactor.cpp:525
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that h...
Definition JacobianFactor.cpp:789
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
Definition Ordering.h:34
\n+
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition EliminateableFactorGraph.h:89
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
One SlotEntry stores the slot index for a variable, as well its dim.
Definition Scatter.h:32
\n-
Scatter is an intermediate data structure used when building a HessianFactor incrementally,...
Definition Scatter.h:49
\n-
GTSAM_EXPORT void add(Key key, size_t dim)
Add a key/dim pair.
Definition Scatter.cpp:76
\n-
GTSAM_EXPORT Scatter()
Default Constructor.
Definition Scatter.h:52
\n+
Kalman Filter class.
Definition KalmanFilter.h:41
\n+
Factorization
This Kalman filter is a Square-root Information filter The type below allows you to specify the facto...
Definition KalmanFilter.h:49
\n+
static Key step(const State &p)
Return step index k, starts at 0, incremented at each predict.
Definition KalmanFilter.h:92
\n+
GaussianDensity::shared_ptr State
The Kalman filter state is simply a GaussianDensity.
Definition KalmanFilter.h:56
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Scatter.h\n+KalmanFilter.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,82 +16,152 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 20#pragma once\n 21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n-24#include \n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n 25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-28class GaussianFactorGraph;\n-29class Ordering;\n-30\n-_\b3_\b2struct GTSAM_EXPORT _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by {\n-33 _\bK_\be_\by key;\n-34 size_t dimension;\n-35 _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by(_\bK_\be_\by _key, size_t _dimension) : key(_key), dimension(_dimension) {}\n-36 std::string toString() const;\n-37 friend bool operator<(const _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by& p, const _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by& q) {\n-38 return p.key < q.key;\n-39 }\n-40 static bool Zero(const _\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by& p) { return p.dimension==0;}\n-41};\n+26#ifndef KALMANFILTER_DEFAULT_FACTORIZATION\n+27#define KALMANFILTER_DEFAULT_FACTORIZATION QR\n+28#endif\n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+_\b4_\b1class GTSAM_EXPORT _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br {\n 42\n-_\b4_\b9class _\bS_\bc_\ba_\bt_\bt_\be_\br : public _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br {\n-50 public:\n-_\b5_\b2 GTSAM_EXPORT _\bS_\bc_\ba_\bt_\bt_\be_\br() {}\n-53\n-55 GTSAM_EXPORT explicit _\bS_\bc_\ba_\bt_\bt_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& gfg);\n-56\n-58 GTSAM_EXPORT explicit _\bS_\bc_\ba_\bt_\bt_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& gfg, const\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering);\n+43public:\n+44\n+_\b4_\b9 enum _\bF_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn {\n+50 QR, CHOLESKY\n+51 };\n+52\n+_\b5_\b6 typedef GaussianDensity::shared_ptr _\bS_\bt_\ba_\bt_\be;\n+57\n+58private:\n 59\n-61 GTSAM_EXPORT void _\ba_\bd_\bd(_\bK_\be_\by key, size_t dim);\n-62\n-63 private:\n-65 iterator find(_\bK_\be_\by key);\n-66};\n-67\n-68} // \\ namespace gtsam\n-_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n-A thin wrapper around std::map that uses boost's fast_pool_allocator.\n-_\bK_\be_\by_\b._\bh\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+60 const size_t n_;\n+61 const Matrix I_;\n+62 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be function_;\n+64 _\bS_\bt_\ba_\bt_\be solve(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph) const;\n+65 _\bS_\bt_\ba_\bt_\be fuse(const _\bS_\bt_\ba_\bt_\be& p, _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br newFactor) const;\n+66\n+67public:\n+68\n+69 // Constructor\n+70 _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br(size_t n, _\bF_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn method =\n+71 KALMANFILTER_DEFAULT_FACTORIZATION) :\n+72 n_(n), I_(Matrix::Identity(n_, n_)), function_(\n+73 method == QR ? _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh::Eliminate(_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR) :\n+74 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh::Eliminate(_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by)) {\n+75 }\n+76\n+83 State init(const Vector& x0, const SharedDiagonal& P0) const;\n+84\n+86 State init(const Vector& x0, const Matrix& P0) const;\n+87\n+89 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n+90\n+_\b9_\b2 static _\bK_\be_\by _\bs_\bt_\be_\bp(const _\bS_\bt_\ba_\bt_\be& p) {\n+93 return p->firstFrontalKey();\n+94 }\n+95\n+104 State predict(const State& p, const Matrix& F, const Matrix& B,\n+105 const Vector& u, const SharedDiagonal& modelQ) const;\n+106\n+107 /*\n+108 * Version of predict with full covariance\n+109 * Q is normally derived as G*w*G^T where w models uncertainty of some\n+110 * physical property, such as velocity or acceleration, and G is derived\n+from physics.\n+111 * This version allows more realistic models than a diagonal covariance\n+matrix.\n+112 */\n+113 State predictQ(const State& p, const Matrix& F, const Matrix& B,\n+114 const Vector& u, const Matrix& Q) const;\n+115\n+124 State predict2(const State& p, const Matrix& A0, const Matrix& A1,\n+125 const Vector& b, const SharedDiagonal& model) const;\n+126\n+135 State update(const State& p, const Matrix& H, const Vector& z,\n+136 const SharedDiagonal& model) const;\n+137\n+138 /*\n+139 * Version of update with full covariance\n+140 * Q is normally derived as G*w*G^T where w models uncertainty of some\n+141 * physical property, such as velocity or acceleration, and G is derived\n+from physics.\n+142 * This version allows more realistic models than a diagonal covariance\n+matrix.\n+143 */\n+144 State updateQ(const State& p, const Matrix& H, const Vector& z,\n+145 const Matrix& Q) const;\n+146};\n+147\n+148} // \\namespace gtsam\n+149\n+150/* *************************************************************************\n+*/\n+151\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bh\n+A Gaussian Density.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by\n+std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr<\n+HessianFactor > > EliminateCholesky(const GaussianFactorGraph &factors, const\n+Ordering &keys)\n+Densely partially eliminate with Cholesky factorization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:525\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR\n+std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr >\n+EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)\n+Multiply all factors and eliminate the given keys from the resulting factor\n+using a QR variant that h...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:789\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+std::function< EliminationResult(const FactorGraphType &, const Ordering &)>\n+Eliminate\n+The function type that does a single dense elimination step on a subgraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bl_\bo_\bt_\bE_\bn_\bt_\br_\by\n-One SlotEntry stores the slot index for a variable, as well its dim.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n-Scatter is an intermediate data structure used when building a HessianFactor\n-incrementally,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br_\b:_\b:_\ba_\bd_\bd\n-GTSAM_EXPORT void add(Key key, size_t dim)\n-Add a key/dim pair.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.cpp:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n-GTSAM_EXPORT Scatter()\n-Default Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br\n+Kalman Filter class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KalmanFilter.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+Factorization\n+This Kalman filter is a Square-root Information filter The type below allows\n+you to specify the facto...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KalmanFilter.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bs_\bt_\be_\bp\n+static Key step(const State &p)\n+Return step index k, starts at 0, incremented at each predict.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KalmanFilter.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bS_\bt_\ba_\bt_\be\n+GaussianDensity::shared_ptr State\n+The Kalman filter state is simply a GaussianDensity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KalmanFilter.h:56\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\n+ * _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00800.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00800.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesTree-inl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -96,49 +96,42 @@\n \n \n \n
\n \n-
GaussianBayesTree-inl.h File Reference
\n+
GaussianBayesTree.cpp File Reference
\n
\n
\n \n

Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. \n More...

\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n-\n-\n+\n+\n

\n Functions

\n-template<class BAYESTREE >
void gtsam::internal::optimizeInPlace (const typename BAYESTREE::sharedClique &clique, VectorValues &result)
 
\n-template<class BAYESTREE >
double gtsam::internal::logDeterminant (const typename BAYESTREE::sharedClique &clique)
 
\n+LogDeterminantData & gtsam::internal::logDeterminant (const GaussianBayesTreeClique::shared_ptr &clique, LogDeterminantData &parentSum)
 
\n

Detailed Description

\n

Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.

\n

GaussianBayesTree

Author
Frank Dellaert
\n
\n Richard Roberts
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-GaussianBayesTree-inl.h File Reference\n+GaussianBayesTree.cpp File Reference\n Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:o\bop\bpt\bti\bim\bmi\biz\bze\beI\bIn\bnP\bPl\bla\bac\bce\be (const typename BAYESTREE::\n- sharedClique &clique, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &result)\n-\u00a0\n-template\n-double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:l\blo\bog\bgD\bDe\bet\bte\ber\brm\bmi\bin\bna\ban\bnt\bt (const typename BAYESTREE::sharedClique\n- &clique)\n+LogDeterminantData &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:l\blo\bog\bgD\bDe\bet\bte\ber\brm\bmi\bin\bna\ban\bnt\bt (const\n+ GaussianBayesTreeClique::shared_ptr &clique,\n+ LogDeterminantData &parentSum)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n GaussianBayesTree\n Author\n Frank Dellaert\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00806.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00806.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphSolver.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,49 +94,34 @@\n \n \n \n \n \n
\n \n-
SubgraphSolver.h File Reference
\n+
Scatter.cpp File Reference
\n
\n
\n-\n-

Subgraph Solver from IROS 2010. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-

\n-Classes

struct  gtsam::SubgraphSolverParameters
 
class  gtsam::SubgraphSolver
 This class implements the linear SPCG solver presented in Dellaert et al in IROS'10. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Subgraph Solver from IROS 2010.

\n-
Date
2010
\n-
Author
Frank Dellaert
\n+
Author
Richard Roberts
\n
\n-Yong Dian Jian
\n+Frank Dellaert
\n+
Date
June 2015
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SubgraphSolver.h File Reference\n-Subgraph Solver from IROS 2010. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br\n-\u00a0 This class implements the linear SPCG solver presented in Dellaert et\n- al in IROS'10. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Scatter.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Subgraph Solver from IROS 2010.\n- Date\n- 2010\n Author\n+ Richard Roberts\n Frank Dellaert\n- Yong Dian Jian\n+ Date\n+ June 2015\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+ * _\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00812.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00812.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/KalmanFilter.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative.h File Reference\n \n \n \n \n \n \n \n@@ -96,52 +96,74 @@\n \n \n \n
\n \n-
KalmanFilter.h File Reference
\n+Functions
\n+
iterative.h File Reference
\n \n
\n \n-

Simple linear Kalman filter. \n+

Iterative methods, implementation. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::KalmanFilter
 Kalman Filter class. More...
class  gtsam::System
 Helper class encapsulating the combined system |Ax-b_|^2 Needed to run Conjugate Gradients on matrices. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-Macros

\n-#define KALMANFILTER_DEFAULT_FACTORIZATION   QR
 

\n+Functions

template<class S , class V , class E >
gtsam::conjugateGradients (const S &Ab, V x, const ConjugateGradientParameters &parameters, bool steepest=false)
 Method of conjugate gradients (CG) template \"System\" class S needs gradient(S,v), e=S*v, v=S^e \"Vector\" class V needs dot(v,v), -v, v+v, s*v \"Vector\" class E needs dot(v,v)
 
\n+GTSAM_EXPORT Vector gtsam::steepestDescent (const System &Ab, const Vector &x, const IterativeOptimizationParameters &parameters)
 Method of steepest gradients, System version.
 
\n+Vector gtsam::conjugateGradientDescent (const System &Ab, const Vector &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), System version.
 
Vector gtsam::steepestDescent (const Matrix &A, const Vector &b, const Vector &x, const ConjugateGradientParameters &parameters)
 convenience calls using matrices, will create System class internally:
 
\n+Vector gtsam::conjugateGradientDescent (const Matrix &A, const Vector &b, const Vector &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), Matrix version.
 
\n+VectorValues gtsam::steepestDescent (const GaussianFactorGraph &fg, const VectorValues &x, const ConjugateGradientParameters &parameters)
 Method of steepest gradients, Gaussian Factor Graph version.
 
\n+VectorValues gtsam::conjugateGradientDescent (const GaussianFactorGraph &fg, const VectorValues &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), Gaussian Factor Graph version.
 
\n

Detailed Description

\n-

Simple linear Kalman filter.

\n-

Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.

Date
Sep 3, 2011
\n-
Author
Stephen Williams
\n-
\n-Frank Dellaert
\n+

Iterative methods, implementation.

\n+
Author
Frank Dellaert
\n+
Date
Dec 28, 2009
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,68 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n-KalmanFilter.h File Reference\n-Simple linear Kalman filter. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+iterative.h File Reference\n+Iterative methods, implementation. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br\n-\u00a0 Kalman Filter class. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm\n+\u00a0 Helper class encapsulating the combined system |Ax-b_|^2 Needed to run\n+ Conjugate Gradients on matrices. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 K\bKA\bAL\bLM\bMA\bAN\bNF\bFI\bIL\bLT\bTE\bER\bR_\b_D\bDE\bEF\bFA\bAU\bUL\bLT\bT_\b_F\bFA\bAC\bCT\bTO\bOR\bRI\bIZ\bZA\bAT\bTI\bIO\bON\bN\u00a0\u00a0\u00a0QR\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ V\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bs (const S &Ab, V x, const\n+ _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters, bool\n+ steepest=false)\n+ Method of conjugate gradients (CG) template \"System\" class\n+\u00a0 S needs gradient(S,v), e=S*v, v=S^e \"Vector\" class V needs\n+ dot(v,v), -v, v+v, s*v \"Vector\" class E needs dot(v,v)\n+\u00a0\n+GTSAM_EXPORT Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bte\bee\bep\bpe\bes\bst\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bS_\by_\bs_\bt_\be_\bm &Ab, const Vector &x,\n+ const _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n+\u00a0 Method of steepest gradients, _\bS_\by_\bs_\bt_\be_\bm version.\n+\u00a0\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bS_\by_\bs_\bt_\be_\bm &Ab, const\n+ Vector &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n+\u00a0 Method of conjugate gradients (CG), _\bS_\by_\bs_\bt_\be_\bm version.\n+\u00a0\n+ Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\be_\be_\bp_\be_\bs_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt (const Matrix &A, const Vector &b,\n+ const Vector &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+ ¶meters)\n+\u00a0 convenience calls using matrices, will create _\bS_\by_\bs_\bt_\be_\bm class\n+ internally:\n+\u00a0\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const Matrix &A, const\n+ Vector &b, const Vector &x, const\n+ _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n+\u00a0 Method of conjugate gradients (CG), Matrix version.\n+\u00a0\n+ _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bte\bee\bep\bpe\bes\bst\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg,\n+ const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+ ¶meters)\n+\u00a0 Method of steepest gradients, Gaussian _\bF_\ba_\bc_\bt_\bo_\br Graph\n+ version.\n+\u00a0\n+ _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+ &fg, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &x, const\n+ _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n+\u00a0 Method of conjugate gradients (CG), Gaussian _\bF_\ba_\bc_\bt_\bo_\br Graph\n+ version.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Simple linear Kalman filter.\n-Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.\n- Date\n- Sep 3, 2011\n+Iterative methods, implementation.\n Author\n- Stephen Williams\n Frank Dellaert\n+ Date\n+ Dec 28, 2009\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh\n+ * _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00812.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00812.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,10 @@\n var a00812 = [\n- [\"gtsam::KalmanFilter\", \"a03852.html\", \"a03852\"]\n+ [\"gtsam::System\", \"a03824.html\", \"a03824\"],\n+ [\"conjugateGradientDescent\", \"a00812.html#aa84114ad1593684ad739088a2898afdb\", null],\n+ [\"conjugateGradientDescent\", \"a00812.html#af55440f741d8b2f706101f7a79ba7111\", null],\n+ [\"conjugateGradientDescent\", \"a00812.html#ad2b587fde5d35a27d6c88feb4432e785\", null],\n+ [\"conjugateGradients\", \"a00812.html#a6516ea957c3a22ddf429cefef1fe9486\", null],\n+ [\"steepestDescent\", \"a00812.html#a81b7af7638d28555c3f404318cc67b22\", null],\n+ [\"steepestDescent\", \"a00812.html#aed4b2ca704ddd6530ea70122f883ac88\", null],\n+ [\"steepestDescent\", \"a00812.html#a37ca85391e3bc671c71b68bc324296f0\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00812_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00812_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/KalmanFilter.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative.h Source File\n \n \n \n \n \n \n \n@@ -98,135 +98,152 @@\n
No Matches
\n \n \n \n \n \n
\n-
KalmanFilter.h
\n+
iterative.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-\n-\n-
25
\n-
26#ifndef KALMANFILTER_DEFAULT_FACTORIZATION
\n-
27#define KALMANFILTER_DEFAULT_FACTORIZATION QR
\n-
28#endif
\n-
29
\n-
30namespace gtsam {
\n-
31
\n-
\n-
41class GTSAM_EXPORT KalmanFilter {
\n-
42
\n-
43public:
\n-
44
\n-
\n-\n-
50 QR, CHOLESKY
\n-
51 };
\n-
\n-
52
\n-
56 typedef GaussianDensity::shared_ptr State;
\n-
57
\n-
58private:
\n-
59
\n-
60 const size_t n_;
\n-
61 const Matrix I_;
\n-
62 const GaussianFactorGraph::Eliminate function_;
\n-
64 State solve(const GaussianFactorGraph& factorGraph) const;
\n-
65 State fuse(const State& p, GaussianFactor::shared_ptr newFactor) const;
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/base/Matrix.h>
\n+\n+\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
36 template<class S, class V, class E>
\n+
37 V conjugateGradients(const S& Ab, V x,
\n+
38 const ConjugateGradientParameters &parameters, bool steepest = false);
\n+
39
\n+
\n+
44 class GTSAM_EXPORT System {
\n+
45
\n+
46 private:
\n+
47 const Matrix& A_;
\n+
48 const Vector& b_;
\n+
49
\n+
50 public:
\n+
51
\n+
52 System(const Matrix& A, const Vector& b) :
\n+
53 A_(A), b_(b) {
\n+
54 }
\n+
55
\n+
57 const Matrix& A() const { return A_; }
\n+
58
\n+
60 const Vector& b() const { return b_; }
\n+
61
\n+
\n+
63 Vector operator^(const Vector& e) const {
\n+
64 return A_ ^ e;
\n+
65 }
\n+
\n
66
\n-
67public:
\n-
68
\n-
69 // Constructor
\n-
70 KalmanFilter(size_t n, Factorization method =
\n-
71 KALMANFILTER_DEFAULT_FACTORIZATION) :
\n-
72 n_(n), I_(Matrix::Identity(n_, n_)), function_(
\n-
73 method == QR ? GaussianFactorGraph::Eliminate(EliminateQR) :
\n-\n-
75 }
\n-
76
\n-
83 State init(const Vector& x0, const SharedDiagonal& P0) const;
\n-
84
\n-
86 State init(const Vector& x0, const Matrix& P0) const;
\n-
87
\n-
89 void print(const std::string& s = "") const;
\n-
90
\n-
\n-
92 static Key step(const State& p) {
\n-
93 return p->firstFrontalKey();
\n-
94 }
\n-
\n-
95
\n-
104 State predict(const State& p, const Matrix& F, const Matrix& B,
\n-
105 const Vector& u, const SharedDiagonal& modelQ) const;
\n-
106
\n-
107 /*
\n-
108 * Version of predict with full covariance
\n-
109 * Q is normally derived as G*w*G^T where w models uncertainty of some
\n-
110 * physical property, such as velocity or acceleration, and G is derived from physics.
\n-
111 * This version allows more realistic models than a diagonal covariance matrix.
\n-
112 */
\n-
113 State predictQ(const State& p, const Matrix& F, const Matrix& B,
\n-
114 const Vector& u, const Matrix& Q) const;
\n-
115
\n-
124 State predict2(const State& p, const Matrix& A0, const Matrix& A1,
\n-
125 const Vector& b, const SharedDiagonal& model) const;
\n-
126
\n-
135 State update(const State& p, const Matrix& H, const Vector& z,
\n-
136 const SharedDiagonal& model) const;
\n-
137
\n-
138 /*
\n-
139 * Version of update with full covariance
\n-
140 * Q is normally derived as G*w*G^T where w models uncertainty of some
\n-
141 * physical property, such as velocity or acceleration, and G is derived from physics.
\n-
142 * This version allows more realistic models than a diagonal covariance matrix.
\n-
143 */
\n-
144 State updateQ(const State& p, const Matrix& H, const Vector& z,
\n-
145 const Matrix& Q) const;
\n-
146};
\n+
70 void print (const std::string& s = "System") const;
\n+
71
\n+
\n+
73 Vector gradient(const Vector& x) const {
\n+
74 return A() ^ (A() * x - b());
\n+
75 }
\n
\n+
76
\n+
\n+
78 Vector operator*(const Vector& x) const {
\n+
79 return A() * x;
\n+
80 }
\n+
\n+
81
\n+
\n+
83 void multiplyInPlace(const Vector& x, Vector& e) const {
\n+
84 e = A() * x;
\n+
85 }
\n+
\n+
86
\n+
\n+
88 void transposeMultiplyAdd(double alpha, const Vector& e, Vector& x) const {
\n+
89 x += alpha * A().transpose() * e;
\n+
90 }
\n+
\n+
91 };
\n+
\n+
92
\n+
96 GTSAM_EXPORT Vector steepestDescent(
\n+
97 const System& Ab,
\n+
98 const Vector& x,
\n+
99 const IterativeOptimizationParameters & parameters);
\n+
100
\n+
104 GTSAM_EXPORT Vector conjugateGradientDescent(
\n+
105 const System& Ab,
\n+
106 const Vector& x,
\n+
107 const ConjugateGradientParameters & parameters);
\n+
108
\n+
114 GTSAM_EXPORT Vector steepestDescent(
\n+
115 const Matrix& A,
\n+
116 const Vector& b,
\n+
117 const Vector& x,
\n+
118 const ConjugateGradientParameters & parameters);
\n+
119
\n+
123 GTSAM_EXPORT Vector conjugateGradientDescent(
\n+
124 const Matrix& A,
\n+
125 const Vector& b,
\n+
126 const Vector& x,
\n+
127 const ConjugateGradientParameters & parameters);
\n+
128
\n+
132 GTSAM_EXPORT VectorValues steepestDescent(
\n+
133 const GaussianFactorGraph& fg,
\n+
134 const VectorValues& x,
\n+
135 const ConjugateGradientParameters & parameters);
\n+
136
\n+\n+
141 const GaussianFactorGraph& fg,
\n+
142 const VectorValues& x,
\n+
143 const ConjugateGradientParameters & parameters);
\n+
144
\n+
145
\n+
146} // namespace gtsam
\n
147
\n-
148} // \\namespace gtsam
\n+\n
149
\n-
150/* ************************************************************************* */
\n-
151
\n-
A Gaussian Density.
\n-
Linear Factor Graph where all factors are Gaussians.
\n-\n-
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< HessianFactor > > EliminateCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with Cholesky factorization.
Definition HessianFactor.cpp:525
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Iterative methods, template implementation.
\n+
Implementation of Conjugate Gradient solver for a linear system.
\n+
Factor Graph Values.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that h...
Definition JacobianFactor.cpp:789
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition EliminateableFactorGraph.h:89
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n+
V conjugateGradients(const S &Ab, V x, const ConjugateGradientParameters &parameters, bool steepest)
Method of conjugate gradients (CG) template "System" class S needs gradient(S,v), e=S*v,...
Definition iterative-inl.h:125
\n+
Vector conjugateGradientDescent(const System &Ab, const Vector &x, const ConjugateGradientParameters &parameters)
Method of conjugate gradients (CG), System version.
Definition iterative.cpp:45
\n+
parameters for the conjugate gradient method
Definition ConjugateGradientSolver.h:29
\n
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
Kalman Filter class.
Definition KalmanFilter.h:41
\n-
Factorization
This Kalman filter is a Square-root Information filter The type below allows you to specify the facto...
Definition KalmanFilter.h:49
\n-
static Key step(const State &p)
Return step index k, starts at 0, incremented at each predict.
Definition KalmanFilter.h:92
\n-
GaussianDensity::shared_ptr State
The Kalman filter state is simply a GaussianDensity.
Definition KalmanFilter.h:56
\n+
Helper class encapsulating the combined system |Ax-b_|^2 Needed to run Conjugate Gradients on matrice...
Definition iterative.h:44
\n+
Vector operator*(const Vector &x) const
Apply operator A.
Definition iterative.h:78
\n+
const Matrix & A() const
Access A matrix.
Definition iterative.h:57
\n+
void multiplyInPlace(const Vector &x, Vector &e) const
Apply operator A in place.
Definition iterative.h:83
\n+
const Vector & b() const
Access b vector.
Definition iterative.h:60
\n+
Vector gradient(const Vector &x) const
gradient of objective function 0.5*|Ax-b_|^2 at x = A_'*(Ax-b_)
Definition iterative.h:73
\n+
void transposeMultiplyAdd(double alpha, const Vector &e, Vector &x) const
x += alpha* A'*e
Definition iterative.h:88
\n+
Vector operator^(const Vector &e) const
Apply operator A'*e.
Definition iterative.h:63
\n+
parameters for iterative linear solvers
Definition IterativeSolver.h:44
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,167 +1,183 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-KalmanFilter.h\n+iterative.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n-25\n-26#ifndef KALMANFILTER_DEFAULT_FACTORIZATION\n-27#define KALMANFILTER_DEFAULT_FACTORIZATION QR\n-28#endif\n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-_\b4_\b1class GTSAM_EXPORT _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br {\n-42\n-43public:\n-44\n-_\b4_\b9 enum _\bF_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn {\n-50 QR, CHOLESKY\n-51 };\n-52\n-_\b5_\b6 typedef GaussianDensity::shared_ptr _\bS_\bt_\ba_\bt_\be;\n-57\n-58private:\n-59\n-60 const size_t n_;\n-61 const Matrix I_;\n-62 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be function_;\n-64 _\bS_\bt_\ba_\bt_\be solve(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph) const;\n-65 _\bS_\bt_\ba_\bt_\be fuse(const _\bS_\bt_\ba_\bt_\be& p, _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br newFactor) const;\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+36 template\n+37 V _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bs(const S& Ab, V x,\n+38 const ConjugateGradientParameters ¶meters, bool steepest = false);\n+39\n+_\b4_\b4 class GTSAM_EXPORT _\bS_\by_\bs_\bt_\be_\bm {\n+45\n+46 private:\n+47 const Matrix& A_;\n+48 const Vector& b_;\n+49\n+50 public:\n+51\n+52 _\bS_\by_\bs_\bt_\be_\bm(const Matrix& A, const Vector& b) :\n+53 A_(A), b_(b) {\n+54 }\n+55\n+_\b5_\b7 const Matrix& _\bA() const { return A_; }\n+58\n+_\b6_\b0 const Vector& _\bb() const { return b_; }\n+61\n+_\b6_\b3 Vector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b^(const Vector& e) const {\n+64 return A_ ^ e;\n+65 }\n 66\n-67public:\n-68\n-69 // Constructor\n-70 _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br(size_t n, _\bF_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn method =\n-71 KALMANFILTER_DEFAULT_FACTORIZATION) :\n-72 n_(n), I_(Matrix::Identity(n_, n_)), function_(\n-73 method == QR ? _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh::Eliminate(_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR) :\n-74 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh::Eliminate(_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by)) {\n+70 void _\bp_\br_\bi_\bn_\bt (const std::string& s = \"System\") const;\n+71\n+_\b7_\b3 Vector _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt(const Vector& x) const {\n+74 return A() ^ (A() * x - b());\n 75 }\n 76\n-83 State init(const Vector& x0, const SharedDiagonal& P0) const;\n-84\n-86 State init(const Vector& x0, const Matrix& P0) const;\n-87\n-89 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n-90\n-_\b9_\b2 static _\bK_\be_\by _\bs_\bt_\be_\bp(const _\bS_\bt_\ba_\bt_\be& p) {\n-93 return p->firstFrontalKey();\n-94 }\n-95\n-104 State predict(const State& p, const Matrix& F, const Matrix& B,\n-105 const Vector& u, const SharedDiagonal& modelQ) const;\n-106\n-107 /*\n-108 * Version of predict with full covariance\n-109 * Q is normally derived as G*w*G^T where w models uncertainty of some\n-110 * physical property, such as velocity or acceleration, and G is derived\n-from physics.\n-111 * This version allows more realistic models than a diagonal covariance\n-matrix.\n-112 */\n-113 State predictQ(const State& p, const Matrix& F, const Matrix& B,\n-114 const Vector& u, const Matrix& Q) const;\n-115\n-124 State predict2(const State& p, const Matrix& A0, const Matrix& A1,\n-125 const Vector& b, const SharedDiagonal& model) const;\n-126\n-135 State update(const State& p, const Matrix& H, const Vector& z,\n-136 const SharedDiagonal& model) const;\n-137\n-138 /*\n-139 * Version of update with full covariance\n-140 * Q is normally derived as G*w*G^T where w models uncertainty of some\n-141 * physical property, such as velocity or acceleration, and G is derived\n-from physics.\n-142 * This version allows more realistic models than a diagonal covariance\n-matrix.\n-143 */\n-144 State updateQ(const State& p, const Matrix& H, const Vector& z,\n-145 const Matrix& Q) const;\n-146};\n+_\b7_\b8 Vector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const Vector& x) const {\n+79 return A() * x;\n+80 }\n+81\n+_\b8_\b3 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bI_\bn_\bP_\bl_\ba_\bc_\be(const Vector& x, Vector& e) const {\n+84 e = A() * x;\n+85 }\n+86\n+_\b8_\b8 void _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bA_\bd_\bd(double alpha, const Vector& e, Vector& x) const {\n+89 x += alpha * A().transpose() * e;\n+90 }\n+91 };\n+92\n+_\b9_\b6 GTSAM_EXPORT Vector steepestDescent(\n+97 const _\bS_\by_\bs_\bt_\be_\bm& Ab,\n+98 const Vector& x,\n+99 const _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n+100\n+104 GTSAM_EXPORT Vector _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt(\n+105 const _\bS_\by_\bs_\bt_\be_\bm& Ab,\n+106 const Vector& x,\n+107 const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n+108\n+114 GTSAM_EXPORT Vector steepestDescent(\n+115 const Matrix& A,\n+116 const Vector& b,\n+117 const Vector& x,\n+118 const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n+119\n+123 GTSAM_EXPORT Vector _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt(\n+124 const Matrix& A,\n+125 const Vector& b,\n+126 const Vector& x,\n+127 const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n+128\n+132 GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs steepestDescent(\n+133 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& fg,\n+134 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n+135 const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n+136\n+140 GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt(\n+141 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& fg,\n+142 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n+143 const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n+144\n+145\n+146} // namespace gtsam\n 147\n-148} // \\namespace gtsam\n+148#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b-_\bi_\bn_\bl_\b._\bh>\n 149\n-150/* *************************************************************************\n-*/\n-151\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bh\n-A Gaussian Density.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by\n-std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr<\n-HessianFactor > > EliminateCholesky(const GaussianFactorGraph &factors, const\n-Ordering &keys)\n-Densely partially eliminate with Cholesky factorization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:525\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b-_\bi_\bn_\bl_\b._\bh\n+Iterative methods, template implementation.\n+_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+Implementation of Conjugate Gradient solver for a linear system.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR\n-std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr >\n-EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)\n-Multiply all factors and eliminate the given keys from the resulting factor\n-using a QR variant that h...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:789\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-std::function< EliminationResult(const FactorGraphType &, const Ordering &)>\n-Eliminate\n-The function type that does a single dense elimination step on a subgraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bs\n+V conjugateGradients(const S &Ab, V x, const ConjugateGradientParameters\n+¶meters, bool steepest)\n+Method of conjugate gradients (CG) template \"System\" class S needs gradient\n+(S,v), e=S*v,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:125\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt\n+Vector conjugateGradientDescent(const System &Ab, const Vector &x, const\n+ConjugateGradientParameters ¶meters)\n+Method of conjugate gradients (CG), System version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.cpp:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+parameters for the conjugate gradient method\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:29\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br\n-Kalman Filter class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KalmanFilter.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-Factorization\n-This Kalman filter is a Square-root Information filter The type below allows\n-you to specify the facto...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KalmanFilter.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bs_\bt_\be_\bp\n-static Key step(const State &p)\n-Return step index k, starts at 0, incremented at each predict.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KalmanFilter.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bS_\bt_\ba_\bt_\be\n-GaussianDensity::shared_ptr State\n-The Kalman filter state is simply a GaussianDensity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KalmanFilter.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm\n+Helper class encapsulating the combined system |Ax-b_|^2 Needed to run\n+Conjugate Gradients on matrice...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Vector operator*(const Vector &x) const\n+Apply operator A.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bA\n+const Matrix & A() const\n+Access A matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+void multiplyInPlace(const Vector &x, Vector &e) const\n+Apply operator A in place.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bb\n+const Vector & b() const\n+Access b vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt\n+Vector gradient(const Vector &x) const\n+gradient of objective function 0.5*|Ax-b_|^2 at x = A_'*(Ax-b_)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bA_\bd_\bd\n+void transposeMultiplyAdd(double alpha, const Vector &e, Vector &x) const\n+x += alpha* A'*e\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b^\n+Vector operator^(const Vector &e) const\n+Apply operator A'*e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+parameters for iterative linear solvers\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh\n+ * _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00818_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00818_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/linearAlgorithms-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.h Source File\n \n \n \n \n \n \n \n@@ -98,196 +98,157 @@\n
No Matches
\n \n \n \n \n \n
\n-
linearAlgorithms-inst.h
\n+
PCGSolver.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n+
12/*
\n+
13 * @file PCGSolver.h
\n+
14 * @brief Preconditioned Conjugate Gradient Solver for linear systems
\n+
15 * @date Jan 31, 2012
\n+
16 * @author Yong-Dian Jian
\n+
17 * @author Sungtae An
\n+
18 */
\n
19
\n-\n-\n-\n-
23
\n-
24#include <boost/optional.hpp>
\n-
25#include <boost/shared_ptr.hpp>
\n+
20#pragma once
\n+
21
\n+\n+
23#include <string>
\n+
24
\n+
25namespace gtsam {
\n
26
\n-
27namespace gtsam
\n-
28{
\n-
29 namespace internal
\n-
30 {
\n-
31 namespace linearAlgorithms
\n-
32 {
\n-
33 /* ************************************************************************* */
\n-
\n-
34 struct OptimizeData {
\n-
35 boost::optional<OptimizeData&> parentData;
\n-\n-
37 //VectorValues ancestorResults;
\n-
38 //VectorValues results;
\n-
39 };
\n-
\n+
27class GaussianFactorGraph;
\n+
28class KeyInfo;
\n+
29class Preconditioner;
\n+
30class VectorValues;
\n+
31struct PreconditionerParameters;
\n+
32
\n+
\n+\n+
37public:
\n+\n+
39 typedef boost::shared_ptr<PCGSolverParameters> shared_ptr;
\n
40
\n-
41 /* ************************************************************************* */
\n-
48 template<class CLIQUE>
\n-
\n-\n-
50 {
\n-
51 VectorValues collectedResult;
\n-
52
\n-
53 OptimizeData operator()(
\n-
54 const boost::shared_ptr<CLIQUE>& clique,
\n-
55 OptimizeData& parentData)
\n-
56 {
\n-
57 OptimizeData myData;
\n-
58 myData.parentData = parentData;
\n-
59 // Take any ancestor results we'll need
\n-
60 for(Key parent: clique->conditional_->parents())
\n-
61 myData.cliqueResults.emplace(parent, myData.parentData->cliqueResults.at(parent));
\n-
62
\n-
63 // Solve and store in our results
\n-
64 {
\n-
65 GaussianConditional& c = *clique->conditional();
\n-
66 // Solve matrix
\n-
67 Vector xS;
\n-
68 {
\n-
69 // Count dimensions of vector
\n-
70 DenseIndex dim = 0;
\n-\n-
72 parentPointers.reserve(clique->conditional()->nrParents());
\n-
73 for(Key parent: clique->conditional()->parents()) {
\n-
74 parentPointers.push_back(myData.cliqueResults.at(parent));
\n-
75 dim += parentPointers.back()->second.size();
\n-
76 }
\n+\n+
42 }
\n+
43
\n+
44 void print(std::ostream &os) const override;
\n+
45
\n+
46 /* interface to preconditioner parameters */
\n+
47 inline const PreconditionerParameters& preconditioner() const {
\n+
48 return *preconditioner_;
\n+
49 }
\n+
50
\n+
51 // needed for python wrapper
\n+
52 void print(const std::string &s) const;
\n+
53
\n+
54 boost::shared_ptr<PreconditionerParameters> preconditioner_;
\n+
55
\n+
56 void setPreconditionerParams(const boost::shared_ptr<PreconditionerParameters> preconditioner);
\n+
57};
\n+
\n+
58
\n+
\n+
62class GTSAM_EXPORT PCGSolver: public IterativeSolver {
\n+
63public:
\n+
64 typedef IterativeSolver Base;
\n+
65 typedef boost::shared_ptr<PCGSolver> shared_ptr;
\n+
66
\n+
67protected:
\n+
68
\n+
69 PCGSolverParameters parameters_;
\n+
70 boost::shared_ptr<Preconditioner> preconditioner_;
\n+
71
\n+
72public:
\n+
73 /* Interface to initialize a solver without a problem */
\n+\n+
75 ~PCGSolver() override {
\n+
76 }
\n
77
\n-
78 // Fill parent vector
\n-
79 xS.resize(dim);
\n-
80 DenseIndex vectorPos = 0;
\n-
81 for(const VectorValues::const_iterator& parentPointer: parentPointers) {
\n-
82 const Vector& parentVector = parentPointer->second;
\n-
83 xS.block(vectorPos,0,parentVector.size(),1) = parentVector.block(0,0,parentVector.size(),1);
\n-
84 vectorPos += parentVector.size();
\n-
85 }
\n-
86 }
\n-
87
\n-
88 // NOTE(gareth): We can no longer write: xS = b - S * xS
\n-
89 // This is because Eigen (as of 3.3) no longer evaluates S * xS into
\n-
90 // a temporary, and the operation trashes valus in xS.
\n-
91 // See: http://eigen.tuxfamily.org/index.php?title=3.3
\n-
92 const Vector rhs = c.getb() - c.S() * xS;
\n-
93
\n-
94 // TODO(gareth): Inline instantiation of Eigen::Solve and check flag
\n-
95 const Vector solution = c.R().triangularView<Eigen::Upper>().solve(rhs);
\n-
96
\n-
97 // Check for indeterminant solution
\n-
98 if(solution.hasNaN()) throw IndeterminantLinearSystemException(c.keys().front());
\n-
99
\n-
100 // Insert solution into a VectorValues
\n-
101 DenseIndex vectorPosition = 0;
\n-
102 for(GaussianConditional::const_iterator frontal = c.beginFrontals(); frontal != c.endFrontals(); ++frontal) {
\n-
103 auto result = collectedResult.emplace(*frontal, solution.segment(vectorPosition, c.getDim(frontal)));
\n-
104 if(!result.second)
\n-
105 throw std::runtime_error(
\n-
106 "Internal error while optimizing clique. Trying to insert key '" + DefaultKeyFormatter(*frontal)
\n-
107 + "' that exists.");
\n+
78 using IterativeSolver::optimize;
\n+
79
\n+\n+
81 const KeyInfo &keyInfo, const std::map<Key, Vector> &lambda,
\n+
82 const VectorValues &initial) override;
\n+
83
\n+
84};
\n+
\n+
85
\n+
\n+
89class GTSAM_EXPORT GaussianFactorGraphSystem {
\n+
90public:
\n+
91
\n+\n+
93 const Preconditioner &preconditioner, const KeyInfo &info,
\n+
94 const std::map<Key, Vector> &lambda);
\n+
95
\n+
96 const GaussianFactorGraph &gfg_;
\n+
97 const Preconditioner &preconditioner_;
\n+
98 const KeyInfo &keyInfo_;
\n+
99 const std::map<Key, Vector> &lambda_;
\n+
100
\n+
101 void residual(const Vector &x, Vector &r) const;
\n+
102 void multiply(const Vector &x, Vector& y) const;
\n+
103 void leftPrecondition(const Vector &x, Vector &y) const;
\n+
104 void rightPrecondition(const Vector &x, Vector &y) const;
\n+
105 void scal(const double alpha, Vector &x) const;
\n+
106 double dot(const Vector &x, const Vector &y) const;
\n+
107 void axpy(const double alpha, const Vector &x, Vector &y) const;
\n
108
\n-
109 VectorValues::const_iterator r = result.first;
\n-
110 myData.cliqueResults.emplace(r->first, r);
\n-
111 vectorPosition += c.getDim(frontal);
\n-
112 }
\n-
113 }
\n-
114 return myData;
\n-
115 }
\n-
116 };
\n-
\n-
117
\n-
118 /* ************************************************************************* */
\n-
119 //OptimizeData OptimizePreVisitor(const GaussianBayesTreeClique::shared_ptr& clique, OptimizeData& parentData)
\n-
120 //{
\n-
121 // // Create data - holds a pointer to our parent, a copy of parent solution, and our results
\n-
122 // OptimizeData myData;
\n-
123 // myData.parentData = parentData;
\n-
124 // // Take any ancestor results we'll need
\n-
125 // for(Key parent: clique->conditional_->parents())
\n-
126 // myData.ancestorResults.insert(parent, myData.parentData->ancestorResults[parent]);
\n-
127 // // Solve and store in our results
\n-
128 // myData.results.insert(clique->conditional()->solve(myData.ancestorResults));
\n-
129 // myData.ancestorResults.insert(myData.results);
\n-
130 // return myData;
\n-
131 //}
\n-
132
\n-
133 /* ************************************************************************* */
\n-
134 //void OptimizePostVisitor(const GaussianBayesTreeClique::shared_ptr& clique, OptimizeData& myData)
\n-
135 //{
\n-
136 // // Conglomerate our results to the parent
\n-
137 // myData.parentData->results.insert(myData.results);
\n-
138 //}
\n-
139
\n-
140 /* ************************************************************************* */
\n-
141 template<class BAYESTREE>
\n-
142 VectorValues optimizeBayesTree(const BAYESTREE& bayesTree)
\n-
143 {
\n-
144 gttic(linear_optimizeBayesTree);
\n-
145 //internal::OptimizeData rootData; // Will hold final solution
\n-
146 //treeTraversal::DepthFirstForest(*this, rootData, internal::OptimizePreVisitor, internal::OptimizePostVisitor);
\n-
147 //return rootData.results;
\n-
148 OptimizeData rootData;
\n-\n-
150 treeTraversal::no_op postVisitor;
\n-
151 TbbOpenMPMixedScope threadLimiter; // Limits OpenMP threads since we're mixing TBB and OpenMP
\n-
152 treeTraversal::DepthFirstForestParallel(bayesTree, rootData, preVisitor, postVisitor);
\n-
153 return preVisitor.collectedResult;
\n-
154 }
\n-
155 }
\n-
156 }
\n-
157}
\n-\n-
Factor Graph Values.
\n-
Conditional Gaussian Base class.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
109 void getb(Vector &b) const;
\n+
110};
\n+
\n+
111
\n+
114
\n+
116VectorValues buildVectorValues(const Vector &v, const Ordering &ordering,
\n+
117 const std::map<Key, size_t> & dimensions);
\n+
118
\n+
120VectorValues buildVectorValues(const Vector &v, const KeyInfo &keyInfo);
\n+
121
\n+
123
\n+
124}
\n+
125
\n+
Implementation of Conjugate Gradient solver for a linear system.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:154
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-
An object whose scope defines a block where TBB and OpenMP parallelism are mixed.
Definition types.h:192
\n-
FACTOR::const_iterator endFrontals() const
Iterator pointing past the last frontal key.
Definition Conditional.h:163
\n-
FACTOR::const_iterator beginFrontals() const
Iterator pointing to first frontal key.
Definition Conditional.h:160
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n-
Key back() const
Last key.
Definition Factor.h:134
\n-
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n-
constABlock R() const
Return a view of the upper-triangular R block of the conditional.
Definition GaussianConditional.h:218
\n-
constABlock S() const
Get a view of the parent blocks.
Definition GaussianConditional.h:221
\n-
const constBVector getb() const
Get a view of the r.h.s.
Definition JacobianFactor.h:297
\n-
DenseIndex getDim(const_iterator variable) const override
Return the dimension of the variable pointed to by the given key iterator todo: Remove this in favor ...
Definition JacobianFactor.h:276
\n-
Definition linearAlgorithms-inst.h:34
\n-
Pre-order visitor for back-substitution in a Bayes tree.
Definition linearAlgorithms-inst.h:50
\n-
Thrown when a linear system is ill-posed.
Definition linearExceptions.h:94
\n+
VectorValues buildVectorValues(const Vector &v, const Ordering &ordering, const map< Key, size_t > &dimensions)
Create VectorValues from a Vector.
Definition PCGSolver.cpp:151
\n+
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
void axpy(double alpha, const Errors &x, Errors &y)
BLAS level 2 style AXPY, y := alpha*x + y
Definition Errors.cpp:111
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n+
Definition Ordering.h:34
\n+
parameters for the conjugate gradient method
Definition ConjugateGradientSolver.h:29
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
Base class for Iterative Solvers like SubgraphSolver.
Definition IterativeSolver.h:86
\n+
Handy data structure for iterative solvers.
Definition IterativeSolver.h:126
\n+
Parameters for PCG.
Definition PCGSolver.h:36
\n+
A virtual base class for the preconditioned conjugate gradient solver.
Definition PCGSolver.h:62
\n+
System class needed for calling preconditionedConjugateGradient.
Definition PCGSolver.h:89
\n+
Definition Preconditioner.h:24
\n+
Definition Preconditioner.h:64
\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
Values::const_iterator const_iterator
Const iterator over vector values.
Definition VectorValues.h:82
\n-
std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)
Emplace a vector value with key j.
Definition VectorValues.h:185
\n+
The Factor::error simply extracts the.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,271 +1,184 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-linearAlgorithms-inst.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+PCGSolver.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n+12/*\n+13 * @file PCGSolver.h\n+14 * @brief Preconditioned Conjugate Gradient Solver for linear systems\n+15 * @date Jan 31, 2012\n+16 * @author Yong-Dian Jian\n+17 * @author Sungtae An\n+18 */\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n-23\n-24#include \n-25#include \n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n+23#include \n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n 26\n-27namespace _\bg_\bt_\bs_\ba_\bm\n-28{\n-29 namespace internal\n-30 {\n-31 namespace linearAlgorithms\n-32 {\n-33 /* *************************************************************************\n-*/\n-_\b3_\b4 struct _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba {\n-35 boost::optional parentData;\n-36 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b> cliqueResults;\n-37 //VectorValues ancestorResults;\n-38 //VectorValues results;\n-39 };\n+27class GaussianFactorGraph;\n+28class KeyInfo;\n+29class Preconditioner;\n+30class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+31struct PreconditionerParameters;\n+32\n+_\b3_\b6struct GTSAM_EXPORT _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs: public _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n+37public:\n+38 typedef _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs _\bB_\ba_\bs_\be;\n+39 typedef boost::shared_ptr shared_ptr;\n 40\n-41 /* *************************************************************************\n-*/\n-48 template\n-_\b4_\b9 struct _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bC_\bl_\bi_\bq_\bu_\be\n-50 {\n-51 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs collectedResult;\n-52\n-53 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba operator()(\n-54 const boost::shared_ptr& clique,\n-55 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba& parentData)\n-56 {\n-57 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba myData;\n-58 myData.parentData = parentData;\n-59 // Take any ancestor results we'll need\n-60 for(_\bK_\be_\by parent: clique->conditional_->parents())\n-61 myData.cliqueResults.emplace(parent, myData.parentData->cliqueResults.at\n-(parent));\n-62\n-63 // Solve and store in our results\n-64 {\n-65 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl& c = *clique->conditional();\n-66 // Solve matrix\n-67 Vector xS;\n-68 {\n-69 // Count dimensions of vector\n-70 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx dim = 0;\n-71 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b> parentPointers;\n-72 parentPointers.reserve(clique->conditional()->nrParents());\n-73 for(_\bK_\be_\by parent: clique->conditional()->parents()) {\n-74 parentPointers.push_back(myData.cliqueResults.at(parent));\n-75 dim += parentPointers._\bb_\ba_\bc_\bk()->second.size();\n+41 _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs() {\n+42 }\n+43\n+44 void _\bp_\br_\bi_\bn_\bt(std::ostream &os) const override;\n+45\n+46 /* interface to preconditioner parameters */\n+47 inline const _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs& preconditioner() const {\n+48 return *preconditioner_;\n+49 }\n+50\n+51 // needed for python wrapper\n+52 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const;\n+53\n+54 boost::shared_ptr preconditioner_;\n+55\n+56 void setPreconditionerParams(const boost::\n+shared_ptr preconditioner);\n+57};\n+58\n+_\b6_\b2class GTSAM_EXPORT _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br: public _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br {\n+63public:\n+64 typedef _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br _\bB_\ba_\bs_\be;\n+65 typedef boost::shared_ptr shared_ptr;\n+66\n+67protected:\n+68\n+69 _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs parameters_;\n+70 boost::shared_ptr preconditioner_;\n+71\n+72public:\n+73 /* Interface to initialize a solver without a problem */\n+74 _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br(const _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p);\n+75 _\b~_\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br() override {\n 76 }\n 77\n-78 // Fill parent vector\n-79 xS.resize(dim);\n-80 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx vectorPos = 0;\n-81 for(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br& parentPointer: parentPointers) {\n-82 const Vector& parentVector = parentPointer->second;\n-83 xS.block(vectorPos,0,parentVector.size(),1) = parentVector.block\n-(0,0,parentVector.size(),1);\n-84 vectorPos += parentVector.size();\n-85 }\n-86 }\n-87\n-88 // NOTE(gareth): We can no longer write: xS = b - S * xS\n-89 // This is because Eigen (as of 3.3) no longer evaluates S * xS into\n-90 // a temporary, and the operation trashes valus in xS.\n-91 // See: http://eigen.tuxfamily.org/index.php?title=3.3\n-92 const Vector rhs = c._\bg_\be_\bt_\bb() - c._\bS() * xS;\n-93\n-94 // TODO(gareth): Inline instantiation of Eigen::Solve and check flag\n-95 const Vector solution = c._\bR().triangularView().solve(rhs);\n-96\n-97 // Check for indeterminant solution\n-98 if(solution.hasNaN()) throw _\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(c._\bk_\be_\by_\bs\n-().front());\n-99\n-100 // Insert solution into a VectorValues\n-101 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx vectorPosition = 0;\n-102 for(_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br frontal = c._\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs();\n-frontal != c._\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs(); ++frontal) {\n-103 auto result = collectedResult._\be_\bm_\bp_\bl_\ba_\bc_\be(*frontal, solution.segment\n-(vectorPosition, c._\bg_\be_\bt_\bD_\bi_\bm(frontal)));\n-104 if(!result.second)\n-105 throw std::runtime_error(\n-106 \"Internal error while optimizing clique. Trying to insert key '\" +\n-DefaultKeyFormatter(*frontal)\n-107 + \"' that exists.\");\n+78 using IterativeSolver::optimize;\n+79\n+80 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n+81 const _\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo, const std::map &lambda,\n+82 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &initial) override;\n+83\n+84};\n+85\n+_\b8_\b9class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bS_\by_\bs_\bt_\be_\bm {\n+90public:\n+91\n+92 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bS_\by_\bs_\bt_\be_\bm(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n+93 const _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br &preconditioner, const _\bK_\be_\by_\bI_\bn_\bf_\bo &info,\n+94 const std::map &lambda);\n+95\n+96 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg_;\n+97 const _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br &preconditioner_;\n+98 const _\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo_;\n+99 const std::map &lambda_;\n+100\n+101 void residual(const Vector &x, Vector &r) const;\n+102 void multiply(const Vector &x, Vector& y) const;\n+103 void leftPrecondition(const Vector &x, Vector &y) const;\n+104 void rightPrecondition(const Vector &x, Vector &y) const;\n+105 void scal(const double alpha, Vector &x) const;\n+106 double _\bd_\bo_\bt(const Vector &x, const Vector &y) const;\n+107 void _\ba_\bx_\bp_\by(const double alpha, const Vector &x, Vector &y) const;\n 108\n-109 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br r = result.first;\n-110 myData.cliqueResults.emplace(r->first, r);\n-111 vectorPosition += c._\bg_\be_\bt_\bD_\bi_\bm(frontal);\n-112 }\n-113 }\n-114 return myData;\n-115 }\n-116 };\n-117\n-118 /\n-* ************************************************************************* */\n-119 //OptimizeData OptimizePreVisitor(const GaussianBayesTreeClique::\n-shared_ptr& clique, OptimizeData& parentData)\n-120 //{\n-121 // // Create data - holds a pointer to our parent, a copy of parent\n-solution, and our results\n-122 // OptimizeData myData;\n-123 // myData.parentData = parentData;\n-124 // // Take any ancestor results we'll need\n-125 // for(Key parent: clique->conditional_->parents())\n-126 // myData.ancestorResults.insert(parent, myData.parentData->ancestorResults\n-[parent]);\n-127 // // Solve and store in our results\n-128 // myData.results.insert(clique->conditional()->solve\n-(myData.ancestorResults));\n-129 // myData.ancestorResults.insert(myData.results);\n-130 // return myData;\n-131 //}\n-132\n-133 /\n-* ************************************************************************* */\n-134 //void OptimizePostVisitor(const GaussianBayesTreeClique::shared_ptr&\n-clique, OptimizeData& myData)\n-135 //{\n-136 // // Conglomerate our results to the parent\n-137 // myData.parentData->results.insert(myData.results);\n-138 //}\n-139\n-140 /\n-* ************************************************************************* */\n-141 template\n-142 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimizeBayesTree(const BAYESTREE& bayesTree)\n-143 {\n-144 gttic(linear_optimizeBayesTree);\n-145 //internal::OptimizeData rootData; // Will hold final solution\n-146 //treeTraversal::DepthFirstForest(*this, rootData, internal::\n-OptimizePreVisitor, internal::OptimizePostVisitor);\n-147 //return rootData.results;\n-148 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba rootData;\n-149 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bC_\bl_\bi_\bq_\bu_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be_\b> preVisitor;\n-150 treeTraversal::no_op postVisitor;\n-151 _\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be threadLimiter; // Limits OpenMP threads since we're\n-mixing TBB and OpenMP\n-152 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl(bayesTree, rootData, preVisitor,\n-postVisitor);\n-153 return preVisitor.collectedResult;\n-154 }\n-155 }\n-156 }\n-157}\n-_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-Conditional Gaussian Base class.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+109 void getb(Vector &b) const;\n+110};\n+111\n+114\n+116_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bb_\bu_\bi_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const Vector &v, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering,\n+117 const std::map & dimensions);\n+118\n+120_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bb_\bu_\bi_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const Vector &v, const _\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo);\n+121\n+123\n+124}\n+125\n+_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+Implementation of Conjugate Gradient solver for a linear system.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl\n-void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE\n-&visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)\n-Traverse a forest depth-first with pre-order and post-order visits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be\n-An object whose scope defines a block where TBB and OpenMP parallelism are\n-mixed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-FACTOR::const_iterator endFrontals() const\n-Iterator pointing past the last frontal key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-FACTOR::const_iterator beginFrontals() const\n-Iterator pointing to first frontal key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::const_iterator const_iterator\n-Const iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\ba_\bc_\bk\n-Key back() const\n-Last key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-A GaussianConditional functions as the node in a Bayes network.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bR\n-constABlock R() const\n-Return a view of the upper-triangular R block of the conditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:218\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS\n-constABlock S() const\n-Get a view of the parent blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:221\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bb\n-const constBVector getb() const\n-Get a view of the r.h.s.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:297\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n-DenseIndex getDim(const_iterator variable) const override\n-Return the dimension of the variable pointed to by the given key iterator todo:\n-Remove this in favor ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:276\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearAlgorithms-inst.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bC_\bl_\bi_\bq_\bu_\be\n-Pre-order visitor for back-substitution in a Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearAlgorithms-inst.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-Thrown when a linear system is ill-posed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues buildVectorValues(const Vector &v, const Ordering &ordering, const\n+map< Key, size_t > &dimensions)\n+Create VectorValues from a Vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PCGSolver.cpp:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n+Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n+landmarkKey)\n+Optimize for triangulation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bx_\bp_\by\n+void axpy(double alpha, const Errors &x, Errors &y)\n+BLAS level 2 style AXPY, y := alpha*x + y\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+parameters for the conjugate gradient method\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br\n+Base class for Iterative Solvers like SubgraphSolver.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo\n+Handy data structure for iterative solvers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+Parameters for PCG.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PCGSolver.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br\n+A virtual base class for the preconditioned conjugate gradient solver.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PCGSolver.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bS_\by_\bs_\bt_\be_\bm\n+System class needed for calling preconditionedConjugateGradient.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PCGSolver.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:24\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:64\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n VectorValues represents a collection of vector-valued variables associated each\n with a unique integer...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Values::const_iterator const_iterator\n-Const iterator over vector values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bm_\bp_\bl_\ba_\bc_\be\n-std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)\n-Emplace a vector value with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:185\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * P\bPC\bCG\bGS\bSo\bol\blv\bve\ber\br.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00824.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00824.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SparseEigen.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesTree-inl.h File Reference\n \n \n \n \n \n \n \n@@ -95,61 +95,50 @@\n \n \n \n \n
\n \n-
SparseEigen.h File Reference
\n+
GaussianBayesTree-inl.h File Reference
\n
\n
\n \n-

Utilities for creating Eigen sparse matrices (gtsam::SparseEigen) \n+

Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. \n More...

\n \n

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-

\n-Typedefs

typedef Eigen::SparseMatrix< double, Eigen::ColMajor, int > gtsam::SparseEigen
 Eigen-format sparse matrix.
 
\n \n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n

\n Functions

\n-SparseEigen gtsam::sparseJacobianEigen (const GaussianFactorGraph &gfg, const Ordering &ordering)
 Constructs an Eigen-format SparseMatrix of a GaussianFactorGraph.
 
\n-SparseEigen gtsam::sparseJacobianEigen (const GaussianFactorGraph &gfg)
 
\n+template<class BAYESTREE >
void gtsam::internal::optimizeInPlace (const typename BAYESTREE::sharedClique &clique, VectorValues &result)
 
\n+template<class BAYESTREE >
double gtsam::internal::logDeterminant (const typename BAYESTREE::sharedClique &clique)
 
\n

Detailed Description

\n-

Utilities for creating Eigen sparse matrices (gtsam::SparseEigen)

\n-
Date
Aug 2019
\n-
Author
Mandy Xie
\n-
\n-Fan Jiang
\n-
\n-Gerry Chen
\n+

Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.

\n+

GaussianBayesTree

Author
Frank Dellaert
\n
\n-Frank Dellaert
\n+Richard Roberts
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,38 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SparseEigen.h File Reference\n-Utilities for creating Eigen sparse matrices (_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn) _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+GaussianBayesTree-inl.h File Reference\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef Eigen::SparseMatrix< double, Eigen::\n- ColMajor, int >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn\n-\u00a0 Eigen-format sparse matrix.\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsp\bpa\bar\brs\bse\beJ\bJa\bac\bco\bob\bbi\bia\ban\bnE\bEi\big\bge\ben\bn (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg, const\n- _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering)\n-\u00a0 Constructs an Eigen-format SparseMatrix of a _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:o\bop\bpt\bti\bim\bmi\biz\bze\beI\bIn\bnP\bPl\bla\bac\bce\be (const typename BAYESTREE::\n+ sharedClique &clique, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &result)\n \u00a0\n-_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsp\bpa\bar\brs\bse\beJ\bJa\bac\bco\bob\bbi\bia\ban\bnE\bEi\big\bge\ben\bn (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg)\n+template\n+double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:l\blo\bog\bgD\bDe\bet\bte\ber\brm\bmi\bin\bna\ban\bnt\bt (const typename BAYESTREE::sharedClique\n+ &clique)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Utilities for creating Eigen sparse matrices (_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn)\n- Date\n- Aug 2019\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n+GaussianBayesTree\n Author\n- Mandy Xie\n- Fan Jiang\n- Gerry Chen\n Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00824_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00824_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SparseEigen.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesTree-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,79 +98,73 @@\n
No Matches
\n \n \n \n \n \n
\n-
SparseEigen.h
\n+
GaussianBayesTree-inl.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
24#pragma once
\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/linear/GaussianBayesTree.h> // Only to help Eclipse
\n+
23
\n+
24#include <stdarg.h>
\n
25
\n-\n-\n-
28
\n-
29#include <Eigen/Sparse>
\n-
30
\n-
31namespace gtsam {
\n-
32
\n-
35typedef Eigen::SparseMatrix<double, Eigen::ColMajor, int> SparseEigen;
\n-
36
\n-
\n-\n-
39 const GaussianFactorGraph &gfg, const Ordering &ordering) {
\n-
40 gttic_(SparseEigen_sparseJacobianEigen);
\n-
41 // intermediate `entries` vector is kind of unavoidable due to how expensive
\n-
42 // factor->rows() is, which prevents us from populating SparseEigen directly.
\n-
43 size_t nrows, ncols;
\n-
44 auto entries = gfg.sparseJacobian(ordering, nrows, ncols);
\n-
45 // declare sparse matrix
\n-
46 SparseEigen Ab(nrows, ncols);
\n-
47 // See Eigen::set_from_triplets. This is about 5% faster.
\n-
48 // pass 1: count the nnz per inner-vector
\n-
49 std::vector<int> nnz(ncols, 0);
\n-
50 for (const auto &entry : entries) nnz[std::get<1>(entry)]++;
\n-
51 Ab.reserve(nnz);
\n-
52 // pass 2: insert the elements
\n-
53 for (const auto &entry : entries)
\n-
54 Ab.insert(std::get<0>(entry), std::get<1>(entry)) = std::get<2>(entry);
\n-
55 return Ab;
\n-
56}
\n-
\n-
57
\n-
58SparseEigen sparseJacobianEigen(const GaussianFactorGraph &gfg) {
\n-
59 gttic_(SparseEigen_sparseJacobianEigen_defaultOrdering);
\n-
60 return sparseJacobianEigen(gfg, Ordering(gfg.keys()));
\n-
61}
\n-
62
\n-
63} // namespace gtsam
\n-
Factor Graph Values.
\n-
Linear Factor Graph where all factors are Gaussians.
\n+
26namespace gtsam {
\n+
27
\n+
28/* ************************************************************************* */
\n+
29namespace internal {
\n+
30template<class BAYESTREE>
\n+
31void optimizeInPlace(const typename BAYESTREE::sharedClique& clique, VectorValues& result) {
\n+
32 // parents are assumed to already be solved and available in result
\n+
33 clique->conditional()->solveInPlace(result);
\n+
34
\n+
35 // starting from the root, call optimize on each conditional
\n+
36 for(const typename BAYESTREE::sharedClique& child: clique->children_)
\n+
37 optimizeInPlace<BAYESTREE>(child, result);
\n+
38}
\n+
39
\n+
40/* ************************************************************************* */
\n+
41template<class BAYESTREE>
\n+
42double logDeterminant(const typename BAYESTREE::sharedClique& clique) {
\n+
43 double result = 0.0;
\n+
44
\n+
45 // this clique
\n+
46 result += clique->conditional()->logDeterminant();
\n+
47
\n+
48 // sum of children
\n+
49 for(const typename BAYESTREE::sharedClique& child: clique->children_)
\n+
50 result += logDeterminant<BAYESTREE>(child);
\n+
51
\n+
52 return result;
\n+
53}
\n+
54
\n+
55/* ************************************************************************* */
\n+
56} // \\namespace internal
\n+
57} // \\namespace gtsam
\n+
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Eigen::SparseMatrix< double, Eigen::ColMajor, int > SparseEigen
Eigen-format sparse matrix.
Definition SparseEigen.h:35
\n-
SparseEigen sparseJacobianEigen(const GaussianFactorGraph &gfg, const Ordering &ordering)
Constructs an Eigen-format SparseMatrix of a GaussianFactorGraph.
Definition SparseEigen.h:38
\n-
Definition Ordering.h:34
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
std::vector< std::tuple< int, int, double > > sparseJacobian(const Ordering &ordering, size_t &nrows, size_t &ncols) const
Returns a sparse augmented Jacbian matrix as a vector of i, j, and s, where i(k) and j(k) are the bas...
Definition GaussianFactorGraph.cpp:119
\n+
The Factor::error simply extracts the.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,89 +1,73 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SparseEigen.h\n+GaussianBayesTree-inl.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-24#pragma once\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh> // Only to help Eclipse\n+23\n+24#include \n 25\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-28\n-29#include \n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32\n-_\b3_\b5typedef Eigen::SparseMatrix _\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn;\n-36\n-_\b3_\b8_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn _\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bE_\bi_\bg_\be_\bn(\n-39 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering) {\n-40 gttic_(SparseEigen_sparseJacobianEigen);\n-41 // intermediate `entries` vector is kind of unavoidable due to how expensive\n-42 // factor->rows() is, which prevents us from populating SparseEigen\n-directly.\n-43 size_t nrows, ncols;\n-44 auto entries = gfg._\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(ordering, nrows, ncols);\n-45 // declare sparse matrix\n-46 _\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn Ab(nrows, ncols);\n-47 // See Eigen::set_from_triplets. This is about 5% faster.\n-48 // pass 1: count the nnz per inner-vector\n-49 std::vector nnz(ncols, 0);\n-50 for (const auto &entry : entries) nnz[std::get<1>(entry)]++;\n-51 Ab.reserve(nnz);\n-52 // pass 2: insert the elements\n-53 for (const auto &entry : entries)\n-54 Ab.insert(std::get<0>(entry), std::get<1>(entry)) = std::get<2>(entry);\n-55 return Ab;\n-56}\n-57\n-58_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn _\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bE_\bi_\bg_\be_\bn(const GaussianFactorGraph &gfg) {\n-59 gttic_(SparseEigen_sparseJacobianEigen_defaultOrdering);\n-60 return _\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bE_\bi_\bg_\be_\bn(gfg, Ordering(gfg.keys()));\n-61}\n-62\n-63} // namespace gtsam\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28/* *************************************************************************\n+*/\n+29namespace internal {\n+30template\n+31void optimizeInPlace(const typename BAYESTREE::sharedClique& clique,\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& result) {\n+32 // parents are assumed to already be solved and available in result\n+33 clique->conditional()->solveInPlace(result);\n+34\n+35 // starting from the root, call optimize on each conditional\n+36 for(const typename BAYESTREE::sharedClique& child: clique->children_)\n+37 optimizeInPlace(child, result);\n+38}\n+39\n+40/* *************************************************************************\n+*/\n+41template\n+42double logDeterminant(const typename BAYESTREE::sharedClique& clique) {\n+43 double result = 0.0;\n+44\n+45 // this clique\n+46 result += clique->conditional()->logDeterminant();\n+47\n+48 // sum of children\n+49 for(const typename BAYESTREE::sharedClique& child: clique->children_)\n+50 result += logDeterminant(child);\n+51\n+52 return result;\n+53}\n+54\n+55/* *************************************************************************\n+*/\n+56} // \\namespace internal\n+57} // \\namespace gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn\n-Eigen::SparseMatrix< double, Eigen::ColMajor, int > SparseEigen\n-Eigen-format sparse matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SparseEigen.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bE_\bi_\bg_\be_\bn\n-SparseEigen sparseJacobianEigen(const GaussianFactorGraph &gfg, const Ordering\n-&ordering)\n-Constructs an Eigen-format SparseMatrix of a GaussianFactorGraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SparseEigen.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bp_\ba_\br_\bs_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-std::vector< std::tuple< int, int, double > > sparseJacobian(const Ordering\n-&ordering, size_t &nrows, size_t &ncols) const\n-Returns a sparse augmented Jacbian matrix as a vector of i, j, and s, where i\n-(k) and j(k) are the bas...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.cpp:119\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bp_\ba_\br_\bs_\be_\bE_\bi_\bg_\be_\bn_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00827.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00827.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/HessianFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h File Reference\n \n \n \n \n \n \n \n@@ -96,56 +96,99 @@\n \n \n \n
\n \n-
HessianFactor.h File Reference
\n+
NoiseModel.h File Reference
\n
\n
\n \n-

Contains the HessianFactor class, a general quadratic factor. \n-More...

\n-\n

Go to the source code of this file.

\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 Classes

class  gtsam::HessianFactor
 A Gaussian factor using the canonical parameters (information form) More...
class  gtsam::noiseModel::Base
 noiseModel::Base is the abstract base class for all noise models. More...
 
class  gtsam::noiseModel::Gaussian
 Gaussian implements the mathematical model |R*x|^2 = |y|^2 with R'*R=inv(Sigma) where y = whiten(x) = R*x x = unwhiten(x) = inv(R)*y as indeed |y|^2 = y'*y = x'*R'*R*x Various derived classes are available that are more efficient. More...
 
class  gtsam::noiseModel::Diagonal
 A diagonal noise model implements a diagonal covariance matrix, with the elements of the diagonal specified in a Vector. More...
 
class  gtsam::noiseModel::Constrained
 A Constrained constrained model is a specialization of Diagonal which allows some or all of the sigmas to be zero, forcing the error to be zero there. More...
 
class  gtsam::noiseModel::Isotropic
 An isotropic noise model corresponds to a scaled diagonal covariance To construct, use one of the static methods. More...
 
class  gtsam::noiseModel::Unit
 Unit: i.i.d. More...
 
class  gtsam::noiseModel::Robust
 Base class for robust error models The robust M-estimators above simply tell us how to re-weight the residual, and are isotropic kernels, in that they do not allow for correlated noise. More...
 
struct  gtsam::traits< HessianFactor >
 traits More...
struct  gtsam::traits< noiseModel::Gaussian >
 traits More...
 
struct  gtsam::traits< noiseModel::Diagonal >
 
struct  gtsam::traits< noiseModel::Constrained >
 
struct  gtsam::traits< noiseModel::Isotropic >
 
struct  gtsam::traits< noiseModel::Unit >
 
\n \n \n \n \n+\n+\n+\n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
namespace  gtsam::noiseModel
 All noise models live in the noiseModel namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Typedefs

typedef noiseModel::Base::shared_ptr gtsam::SharedNoiseModel
 Aliases.
 
\n+typedef noiseModel::Gaussian::shared_ptr gtsam::SharedGaussian
 
\n+typedef noiseModel::Diagonal::shared_ptr gtsam::SharedDiagonal
 
\n+typedef noiseModel::Constrained::shared_ptr gtsam::SharedConstrained
 
\n+typedef noiseModel::Isotropic::shared_ptr gtsam::SharedIsotropic
 
\n \n-\n-\n-\n-\n-\n-\n+\n+\n

\n Functions

std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< HessianFactor > > gtsam::EliminateCholesky (const GaussianFactorGraph &factors, const Ordering &keys)
 Densely partially eliminate with Cholesky factorization.
 
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< GaussianFactor > > gtsam::EliminatePreferCholesky (const GaussianFactorGraph &factors, const Ordering &keys)
 Densely partially eliminate with Cholesky factorization.
 
\n+boost::optional< Vector > gtsam::noiseModel::checkIfDiagonal (const Matrix &M)
 
\n

Detailed Description

\n-

Contains the HessianFactor class, a general quadratic factor.

\n-
Author
Richard Roberts
\n-
Date
Dec 8, 2010
\n+
Date
Jan 13, 2010
\n+
Author
Richard Roberts
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,44 +1,83 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-HessianFactor.h File Reference\n-Contains the HessianFactor class, a general quadratic factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+NoiseModel.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 A Gaussian factor using the canonical parameters (information form)\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be\n+\u00a0 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be is the abstract base class for all noise models.\n _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn implements the mathematical model |R*x|^2 = |y|^2 with\n+\u00a0 R'*R=inv(Sigma) where y = whiten(x) = R*x x = unwhiten(x) = inv(R)*y\n+ as indeed |y|^2 = y'*y = x'*R'*R*x Various derived classes are\n+ available that are more efficient. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+\u00a0 A diagonal noise model implements a diagonal covariance matrix, with\n+ the elements of the diagonal specified in a Vector. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n+ A _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd constrained model is a specialization of _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl which\n+\u00a0 allows some or all of the sigmas to be zero, forcing the error to be\n+ zero there. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc\n+\u00a0 An isotropic noise model corresponds to a scaled diagonal covariance\n+ To construct, use one of the static methods. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt\n+\u00a0 _\bU_\bn_\bi_\bt: i.i.d. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt\n+ _\bB_\ba_\bs_\be class for robust error models The robust M-estimators above\n+\u00a0 simply tell us how to re-weight the residual, and are isotropic\n+ kernels, in that they do not allow for correlated noise. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b _\b>\n \u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+\u00a0 All noise models live in the _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl namespace.\n+\u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+ typedef noiseModel::Base::shared_ptr\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+\u00a0 Aliases.\n+\u00a0\n+ typedef noiseModel::Gaussian::shared_ptr\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bha\bar\bre\bed\bdG\bGa\bau\bus\bss\bsi\bia\ban\bn\n+\u00a0\n+ typedef noiseModel::Diagonal::shared_ptr\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bha\bar\bre\bed\bdD\bDi\bia\bag\bgo\bon\bna\bal\bl\n+\u00a0\n+typedef noiseModel::Constrained::shared_ptr\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bha\bar\bre\bed\bdC\bCo\bon\bns\bst\btr\bra\bai\bin\bne\bed\bd\n+\u00a0\n+ typedef noiseModel::Isotropic::shared_ptr\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bha\bar\bre\bed\bdI\bIs\bso\bot\btr\bro\bop\bpi\bic\bc\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by (const\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n- shared_ptr< _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n-\u00a0 Densely partially eliminate with Cholesky\n- factorization.\n-\u00a0\n- std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by (const\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n-shared_ptr< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n-\u00a0 Densely partially eliminate with Cholesky\n- factorization.\n+boost::optional< Vector >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\boi\bis\bse\beM\bMo\bod\bde\bel\bl:\b::\b:c\bch\bhe\bec\bck\bkI\bIf\bfD\bDi\bia\bag\bgo\bon\bna\bal\bl (const Matrix &M)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Contains the HessianFactor class, a general quadratic factor.\n+ Date\n+ Jan 13, 2010\n Author\n Richard Roberts\n- Date\n- Dec 8, 2010\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00827.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00827.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,15 @@\n var a00827 = [\n- [\"gtsam::HessianFactor\", \"a03812.html\", \"a03812\"],\n- [\"gtsam::traits< HessianFactor >\", \"a03816.html\", null],\n- [\"EliminateCholesky\", \"a00827.html#ga37760d3ca31c6d8d60a3a2a17babc3a4\", null],\n- [\"EliminatePreferCholesky\", \"a00827.html#gadbb147d2a9039f67ad3b8b5515d2e5cc\", null]\n+ [\"gtsam::noiseModel::Base\", \"a03920.html\", \"a03920\"],\n+ [\"gtsam::noiseModel::Gaussian\", \"a03924.html\", \"a03924\"],\n+ [\"gtsam::noiseModel::Diagonal\", \"a03928.html\", \"a03928\"],\n+ [\"gtsam::noiseModel::Constrained\", \"a03932.html\", \"a03932\"],\n+ [\"gtsam::noiseModel::Isotropic\", \"a03936.html\", \"a03936\"],\n+ [\"gtsam::noiseModel::Unit\", \"a03940.html\", \"a03940\"],\n+ [\"gtsam::noiseModel::Robust\", \"a03944.html\", \"a03944\"],\n+ [\"gtsam::traits< noiseModel::Gaussian >\", \"a03948.html\", null],\n+ [\"gtsam::traits< noiseModel::Diagonal >\", \"a03952.html\", null],\n+ [\"gtsam::traits< noiseModel::Constrained >\", \"a03956.html\", null],\n+ [\"gtsam::traits< noiseModel::Isotropic >\", \"a03960.html\", null],\n+ [\"gtsam::traits< noiseModel::Unit >\", \"a03964.html\", null],\n+ [\"SharedNoiseModel\", \"a00827.html#ab6e5a4884342656e0837ef07008ec03f\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00827_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00827_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/HessianFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
HessianFactor.h
\n+
NoiseModel.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,267 +114,615 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-\n-\n+
21#include <gtsam/base/Testable.h>
\n+
22#include <gtsam/base/Matrix.h>
\n+
23#include <gtsam/dllexport.h>
\n+
24#include <gtsam/linear/LossFunctions.h>
\n
25
\n-
26#include <boost/make_shared.hpp>
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
30 // Forward declarations
\n-
31 class Ordering;
\n-
32 class JacobianFactor;
\n-
33 class HessianFactor;
\n-\n-
35 class GaussianBayesNet;
\n-
36 class GaussianFactorGraph;
\n-
37
\n-
\n-
101 class GTSAM_EXPORT HessianFactor : public GaussianFactor {
\n-
102 protected:
\n-
103
\n-\n+
26#include <boost/serialization/nvp.hpp>
\n+
27#include <boost/serialization/extended_type_info.hpp>
\n+
28#include <boost/serialization/singleton.hpp>
\n+
29#include <boost/serialization/shared_ptr.hpp>
\n+
30#include <boost/serialization/optional.hpp>
\n+
31
\n+
32namespace gtsam {
\n+
33
\n+
35 namespace noiseModel {
\n+
36
\n+
37 // Forward declaration
\n+
38 class Gaussian;
\n+
39 class Diagonal;
\n+
40 class Constrained;
\n+
41 class Isotropic;
\n+
42 class Unit;
\n+
43 class RobustModel;
\n+
44
\n+
45 //---------------------------------------------------------------------------------------
\n+
46
\n+
\n+
53 class GTSAM_EXPORT Base {
\n+
54
\n+
55 public:
\n+
56 typedef boost::shared_ptr<Base> shared_ptr;
\n+
57
\n+
58 protected:
\n+
59
\n+
60 size_t dim_;
\n+
61
\n+
62 public:
\n+
63
\n+
65 Base(size_t dim = 1):dim_(dim) {}
\n+
66 virtual ~Base() {}
\n+
67
\n+
69 virtual bool isConstrained() const { return false; } // default false
\n+
70
\n+
72 virtual bool isUnit() const { return false; } // default false
\n+
73
\n+
75 inline size_t dim() const { return dim_;}
\n+
76
\n+
77 virtual void print(const std::string& name = "") const = 0;
\n+
78
\n+
79 virtual bool equals(const Base& expected, double tol=1e-9) const = 0;
\n+
80
\n+
82 virtual Vector sigmas() const;
\n+
83
\n+
85 virtual Vector whiten(const Vector& v) const = 0;
\n+
86
\n+
88 virtual Matrix Whiten(const Matrix& H) const = 0;
\n+
89
\n+
91 virtual Vector unwhiten(const Vector& v) const = 0;
\n+
92
\n+
94 virtual double squaredMahalanobisDistance(const Vector& v) const;
\n+
95
\n+
\n+
97 virtual double mahalanobisDistance(const Vector& v) const {
\n+
98 return std::sqrt(squaredMahalanobisDistance(v));
\n+
99 }
\n+
\n+
100
\n+
\n+
102 virtual double loss(const double squared_distance) const {
\n+
103 return 0.5 * squared_distance;
\n+
104 }
\n+
\n
105
\n-
106 public:
\n-
107
\n-\n-\n-
110 typedef boost::shared_ptr<This> shared_ptr;
\n-
111 typedef SymmetricBlockMatrix::Block Block;
\n-
112 typedef SymmetricBlockMatrix::constBlock constBlock;
\n-
113
\n-
114
\n-\n-
117
\n-
123 HessianFactor(Key j, const Matrix& G, const Vector& g, double f);
\n-
124
\n-
128 HessianFactor(Key j, const Vector& mu, const Matrix& Sigma);
\n-
129
\n-
145 HessianFactor(Key j1, Key j2,
\n-
146 const Matrix& G11, const Matrix& G12, const Vector& g1,
\n-
147 const Matrix& G22, const Vector& g2, double f);
\n-
148
\n-
153 HessianFactor(Key j1, Key j2, Key j3,
\n-
154 const Matrix& G11, const Matrix& G12, const Matrix& G13, const Vector& g1,
\n-
155 const Matrix& G22, const Matrix& G23, const Vector& g2,
\n-
156 const Matrix& G33, const Vector& g3, double f);
\n-
157
\n-
162 HessianFactor(const KeyVector& js, const std::vector<Matrix>& Gs,
\n-
163 const std::vector<Vector>& gs, double f);
\n-
164
\n-
167 template<typename KEYS>
\n-
168 HessianFactor(const KEYS& keys, const SymmetricBlockMatrix& augmentedInformation);
\n-
169
\n-
171 explicit HessianFactor(const JacobianFactor& cg);
\n-
172
\n-
175 explicit HessianFactor(const GaussianFactor& factor);
\n-
176
\n-
178 explicit HessianFactor(const GaussianFactorGraph& factors,
\n-
179 const Scatter& scatter);
\n+
106 virtual void WhitenSystem(std::vector<Matrix>& A, Vector& b) const = 0;
\n+
107 virtual void WhitenSystem(Matrix& A, Vector& b) const = 0;
\n+
108 virtual void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const = 0;
\n+
109 virtual void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const = 0;
\n+
110
\n+
\n+
112 virtual void whitenInPlace(Vector& v) const {
\n+
113 v = whiten(v);
\n+
114 }
\n+
\n+
115
\n+
\n+
117 virtual void unwhitenInPlace(Vector& v) const {
\n+
118 v = unwhiten(v);
\n+
119 }
\n+
\n+
120
\n+
\n+
122 virtual void whitenInPlace(Eigen::Block<Vector>& v) const {
\n+
123 v = whiten(v);
\n+
124 }
\n+
\n+
125
\n+
\n+
127 virtual void unwhitenInPlace(Eigen::Block<Vector>& v) const {
\n+
128 v = unwhiten(v);
\n+
129 }
\n+
\n+
130
\n+
\n+
132 virtual Vector unweightedWhiten(const Vector& v) const {
\n+
133 return whiten(v);
\n+
134 }
\n+
\n+
135
\n+
137 virtual double weight(const Vector& v) const { return 1.0; }
\n+
138
\n+
139 private:
\n+
141 friend class boost::serialization::access;
\n+
142 template<class ARCHIVE>
\n+
143 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
144 ar & BOOST_SERIALIZATION_NVP(dim_);
\n+
145 }
\n+
146 };
\n+
\n+
147
\n+
148 //---------------------------------------------------------------------------------------
\n+
149
\n+
\n+
162 class GTSAM_EXPORT Gaussian: public Base {
\n+
163
\n+
164 protected:
\n+
165
\n+
167 boost::optional<Matrix> sqrt_information_;
\n+
168
\n+
169 private:
\n+
170
\n+
174 const Matrix& thisR() const {
\n+
175 // should never happen
\n+
176 if (!sqrt_information_) throw std::runtime_error("Gaussian: has no R matrix");
\n+
177 return *sqrt_information_;
\n+
178 }
\n+
179
\n
180
\n-
\n-
182 explicit HessianFactor(const GaussianFactorGraph& factors)
\n-
183 : HessianFactor(factors, Scatter(factors)) {}
\n-
\n+
181 public:
\n+
182
\n+
183 typedef boost::shared_ptr<Gaussian> shared_ptr;
\n
184
\n-
186 ~HessianFactor() override {}
\n-
187
\n-
\n-\n-
190 return boost::make_shared<HessianFactor>(*this); }
\n+
\n+
186 Gaussian(size_t dim = 1,
\n+
187 const boost::optional<Matrix>& sqrt_information = boost::none)
\n+
188 : Base(dim), sqrt_information_(sqrt_information) {}
\n
\n+
189
\n+
190 ~Gaussian() override {}
\n
191
\n-
193 void print(const std::string& s = "",
\n-
194 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n-
195
\n-
197 bool equals(const GaussianFactor& lf, double tol = 1e-9) const override;
\n+
197 static shared_ptr SqrtInformation(const Matrix& R, bool smart = true);
\n
198
\n-
200 using GaussianFactor::error;
\n-
201
\n-
206 double error(const VectorValues& c) const override;
\n-
207
\n-
\n-
213 DenseIndex getDim(const_iterator variable) const override {
\n-
214 return info_.getDim(std::distance(begin(), variable));
\n-
215 }
\n-
\n-
216
\n-
218 size_t rows() const { return info_.rows(); }
\n-
219
\n-
225 GaussianFactor::shared_ptr negate() const override;
\n-
226
\n-
\n-
230 double constantTerm() const {
\n-
231 const auto view = info_.diagonalBlock(size());
\n-
232 return view(0, 0);
\n-
233 }
\n-
\n+
204 static shared_ptr Information(const Matrix& M, bool smart = true);
\n+
205
\n+
211 static shared_ptr Covariance(const Matrix& covariance, bool smart = true);
\n+
212
\n+
213 void print(const std::string& name) const override;
\n+
214 bool equals(const Base& expected, double tol=1e-9) const override;
\n+
215 Vector sigmas() const override;
\n+
216 Vector whiten(const Vector& v) const override;
\n+
217 Vector unwhiten(const Vector& v) const override;
\n+
218
\n+
223 Matrix Whiten(const Matrix& H) const override;
\n+
224
\n+
228 virtual void WhitenInPlace(Matrix& H) const;
\n+
229
\n+
233 virtual void WhitenInPlace(Eigen::Block<Matrix> H) const;
\n
234
\n-
238 double& constantTerm() { return info_.diagonalBlock(size())(0, 0); }
\n-
239
\n-
\n-
244 SymmetricBlockMatrix::constBlock linearTerm(const_iterator j) const {
\n-
245 assert(!empty());
\n-
246 return info_.aboveDiagonalBlock(j - begin(), size());
\n-
247 }
\n-
\n-
248
\n-
\n-
251 SymmetricBlockMatrix::constBlock linearTerm() const {
\n-
252 assert(!empty());
\n-
253 // get the last column (except the bottom right block)
\n-
254 return info_.aboveDiagonalRange(0, size(), size(), size() + 1);
\n-
255 }
\n-
\n+
238 void WhitenSystem(std::vector<Matrix>& A, Vector& b) const override;
\n+
239 void WhitenSystem(Matrix& A, Vector& b) const override;
\n+
240 void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const override;
\n+
241 void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const override;
\n+
242
\n+
252 virtual boost::shared_ptr<Diagonal> QR(Matrix& Ab) const;
\n+
253
\n+
255 virtual Matrix R() const { return thisR();}
\n
256
\n-
\n-
259 SymmetricBlockMatrix::Block linearTerm() {
\n-
260 assert(!empty());
\n-
261 return info_.aboveDiagonalRange(0, size(), size(), size() + 1);
\n-
262 }
\n-
\n-
263
\n-
265 const SymmetricBlockMatrix& info() const { return info_; }
\n-
266
\n-
269 SymmetricBlockMatrix& info() { return info_; }
\n-
270
\n-
286 Matrix augmentedInformation() const override;
\n-
287
\n-
289 Eigen::SelfAdjointView<SymmetricBlockMatrix::constBlock, Eigen::Upper> informationView() const;
\n+
258 virtual Matrix information() const;
\n+
259
\n+
261 virtual Matrix covariance() const;
\n+
262
\n+
263 private:
\n+
265 friend class boost::serialization::access;
\n+
266 template<class ARCHIVE>
\n+
267 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
268 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
269 ar & BOOST_SERIALIZATION_NVP(sqrt_information_);
\n+
270 }
\n+
271
\n+
272 }; // Gaussian
\n+
\n+
273
\n+
274 //---------------------------------------------------------------------------------------
\n+
275
\n+
\n+
281 class GTSAM_EXPORT Diagonal : public Gaussian {
\n+
282 protected:
\n+
283
\n+
289 Vector sigmas_, invsigmas_, precisions_;
\n
290
\n-
294 Matrix information() const override;
\n+
291 protected:
\n+
292
\n+
294 Diagonal(const Vector& sigmas);
\n
295
\n-
297 void hessianDiagonalAdd(VectorValues& d) const override;
\n-
298
\n-
300 using Base::hessianDiagonal;
\n+
296 public:
\n+
298 Diagonal();
\n+
299
\n+
300 typedef boost::shared_ptr<Diagonal> shared_ptr;
\n
301
\n-
303 void hessianDiagonal(double* d) const override;
\n-
304
\n-
306 std::map<Key,Matrix> hessianBlockDiagonal() const override;
\n-
307
\n-
309 std::pair<Matrix, Vector> jacobian() const override;
\n-
310
\n-
316 Matrix augmentedJacobian() const override;
\n+
302 ~Diagonal() override {}
\n+
303
\n+
308 static shared_ptr Sigmas(const Vector& sigmas, bool smart = true);
\n+
309
\n+
316 static shared_ptr Variances(const Vector& variances, bool smart = true);
\n
317
\n-
323 void updateHessian(const KeyVector& keys, SymmetricBlockMatrix* info) const override;
\n-
324
\n-
\n-
328 void updateHessian(HessianFactor* other) const {
\n-
329 assert(other);
\n-
330 updateHessian(other->keys_, &other->info_);
\n-
331 }
\n-
\n-
332
\n-
334 void multiplyHessianAdd(double alpha, const VectorValues& x, VectorValues& y) const override;
\n-
335
\n-
337 VectorValues gradientAtZero() const override;
\n-
338
\n-
340 void gradientAtZero(double* d) const override;
\n-
341
\n-
346 Vector gradient(Key key, const VectorValues& x) const override;
\n-
347
\n-
352 boost::shared_ptr<GaussianConditional> eliminateCholesky(const Ordering& keys);
\n-
353
\n-
355 VectorValues solve();
\n-
356
\n-
357 private:
\n-
359 void Allocate(const Scatter& scatter);
\n-
360
\n-
362 HessianFactor(const Scatter& scatter);
\n-
363
\n-
364 friend class NonlinearFactorGraph;
\n-
365 friend class NonlinearClusterTree;
\n+
322 static shared_ptr Precisions(const Vector& precisions, bool smart = true);
\n+
323
\n+
324 void print(const std::string& name) const override;
\n+
325 Vector sigmas() const override { return sigmas_; }
\n+
326 Vector whiten(const Vector& v) const override;
\n+
327 Vector unwhiten(const Vector& v) const override;
\n+
328 Matrix Whiten(const Matrix& H) const override;
\n+
329 void WhitenInPlace(Matrix& H) const override;
\n+
330 void WhitenInPlace(Eigen::Block<Matrix> H) const override;
\n+
331
\n+
335 inline double sigma(size_t i) const { return sigmas_(i); }
\n+
336
\n+
340 inline const Vector& invsigmas() const { return invsigmas_; }
\n+
341 inline double invsigma(size_t i) const {return invsigmas_(i);}
\n+
342
\n+
346 inline const Vector& precisions() const { return precisions_; }
\n+
347 inline double precision(size_t i) const {return precisions_(i);}
\n+
348
\n+
\n+
352 Matrix R() const override {
\n+
353 return invsigmas().asDiagonal();
\n+
354 }
\n+
\n+
355
\n+
356 private:
\n+
358 friend class boost::serialization::access;
\n+
359 template<class ARCHIVE>
\n+
360 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
361 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Gaussian);
\n+
362 ar & BOOST_SERIALIZATION_NVP(sigmas_);
\n+
363 ar & BOOST_SERIALIZATION_NVP(invsigmas_);
\n+
364 }
\n+
365 }; // Diagonal
\n+
\n
366
\n-
368 friend class boost::serialization::access;
\n-
369 template<class ARCHIVE>
\n-
370 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
371 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(GaussianFactor);
\n-
372 ar & BOOST_SERIALIZATION_NVP(info_);
\n-
373 }
\n-
374 };
\n-
\n-
375
\n-
392GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<HessianFactor> >
\n-
393 EliminateCholesky(const GaussianFactorGraph& factors, const Ordering& keys);
\n-
394
\n-
410GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<GaussianFactor> >
\n-
411 EliminatePreferCholesky(const GaussianFactorGraph& factors, const Ordering& keys);
\n-
412
\n-
414template<>
\n-
415struct traits<HessianFactor> : public Testable<HessianFactor> {};
\n+
367 //---------------------------------------------------------------------------------------
\n+
368
\n+
\n+
381 class GTSAM_EXPORT Constrained : public Diagonal {
\n+
382 protected:
\n+
383
\n+
384 // Sigmas are contained in the base class
\n+
385 Vector mu_;
\n+
386
\n+
392 Constrained(const Vector& mu, const Vector& sigmas);
\n+
393
\n+
394 public:
\n+
395
\n+
396 typedef boost::shared_ptr<Constrained> shared_ptr;
\n+
397
\n+
404 Constrained(const Vector& sigmas = Z_1x1);
\n+
405
\n+
406 ~Constrained() override {}
\n+
407
\n+
409 bool isConstrained() const override { return true; }
\n+
410
\n+
412 bool constrained(size_t i) const;
\n+
413
\n+
415 const Vector& mu() const { return mu_; }
\n
416
\n-
417} // \\ namespace gtsam
\n-
418
\n-
419
\n-\n-
Access to matrices via blocks of pre-defined sizes.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
Contains the HessianFactor class, a general quadratic factor.
\n-
A factor with a quadratic error function - a Gaussian.
\n-
Maps global variable indices to slot indices.
\n-
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< HessianFactor > > EliminateCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with Cholesky factorization.
Definition HessianFactor.cpp:525
\n-
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with Cholesky factorization.
Definition HessianFactor.cpp:548
\n+
421 static shared_ptr MixedSigmas(const Vector& mu, const Vector& sigmas);
\n+
422
\n+
427 static shared_ptr MixedSigmas(const Vector& sigmas);
\n+
428
\n+
433 static shared_ptr MixedSigmas(double m, const Vector& sigmas);
\n+
434
\n+
439 static shared_ptr MixedVariances(const Vector& mu, const Vector& variances);
\n+
440 static shared_ptr MixedVariances(const Vector& variances);
\n+
441
\n+
446 static shared_ptr MixedPrecisions(const Vector& mu, const Vector& precisions);
\n+
447 static shared_ptr MixedPrecisions(const Vector& precisions);
\n+
448
\n+
454 double squaredMahalanobisDistance(const Vector& v) const override;
\n+
455
\n+
\n+
457 static shared_ptr All(size_t dim) {
\n+
458 return shared_ptr(new Constrained(Vector::Constant(dim, 1000.0), Vector::Constant(dim,0)));
\n+
459 }
\n+
\n+
460
\n+
\n+
462 static shared_ptr All(size_t dim, const Vector& mu) {
\n+
463 return shared_ptr(new Constrained(mu, Vector::Constant(dim,0)));
\n+
464 }
\n+
\n+
465
\n+
\n+
467 static shared_ptr All(size_t dim, double mu) {
\n+
468 return shared_ptr(new Constrained(Vector::Constant(dim, mu), Vector::Constant(dim,0)));
\n+
469 }
\n+
\n+
470
\n+
471 void print(const std::string& name) const override;
\n+
472
\n+
474 Vector whiten(const Vector& v) const override;
\n+
475
\n+
478 Matrix Whiten(const Matrix& H) const override;
\n+
479 void WhitenInPlace(Matrix& H) const override;
\n+
480 void WhitenInPlace(Eigen::Block<Matrix> H) const override;
\n+
481
\n+
491 Diagonal::shared_ptr QR(Matrix& Ab) const override;
\n+
492
\n+
497 shared_ptr unit() const;
\n+
498
\n+
499 private:
\n+
501 friend class boost::serialization::access;
\n+
502 template<class ARCHIVE>
\n+
503 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
504 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Diagonal);
\n+
505 ar & BOOST_SERIALIZATION_NVP(mu_);
\n+
506 }
\n+
507
\n+
508 }; // Constrained
\n+
\n+
509
\n+
510 //---------------------------------------------------------------------------------------
\n+
511
\n+
\n+
516 class GTSAM_EXPORT Isotropic : public Diagonal {
\n+
517 protected:
\n+
518 double sigma_, invsigma_;
\n+
519
\n+
\n+
521 Isotropic(size_t dim, double sigma) :
\n+
522 Diagonal(Vector::Constant(dim, sigma)),sigma_(sigma),invsigma_(1.0/sigma) {}
\n+
\n+
523
\n+
524 public:
\n+
525
\n+
526 /* dummy constructor to allow for serialization */
\n+
527 Isotropic() : Diagonal(Vector1::Constant(1.0)),sigma_(1.0),invsigma_(1.0) {}
\n+
528
\n+
529 ~Isotropic() override {}
\n+
530
\n+
531 typedef boost::shared_ptr<Isotropic> shared_ptr;
\n+
532
\n+
536 static shared_ptr Sigma(size_t dim, double sigma, bool smart = true);
\n+
537
\n+
544 static shared_ptr Variance(size_t dim, double variance, bool smart = true);
\n+
545
\n+
\n+
549 static shared_ptr Precision(size_t dim, double precision, bool smart = true) {
\n+
550 return Variance(dim, 1.0/precision, smart);
\n+
551 }
\n+
\n+
552
\n+
553 void print(const std::string& name) const override;
\n+
554 double squaredMahalanobisDistance(const Vector& v) const override;
\n+
555 Vector whiten(const Vector& v) const override;
\n+
556 Vector unwhiten(const Vector& v) const override;
\n+
557 Matrix Whiten(const Matrix& H) const override;
\n+
558 void WhitenInPlace(Matrix& H) const override;
\n+
559 void whitenInPlace(Vector& v) const override;
\n+
560 void WhitenInPlace(Eigen::Block<Matrix> H) const override;
\n+
561
\n+
565 inline double sigma() const { return sigma_; }
\n+
566
\n+
567 private:
\n+
569 friend class boost::serialization::access;
\n+
570 template<class ARCHIVE>
\n+
571 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
572 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Diagonal);
\n+
573 ar & BOOST_SERIALIZATION_NVP(sigma_);
\n+
574 ar & BOOST_SERIALIZATION_NVP(invsigma_);
\n+
575 }
\n+
576
\n+
577 };
\n+
\n+
578
\n+
579 //---------------------------------------------------------------------------------------
\n+
580
\n+
\n+
584 class GTSAM_EXPORT Unit : public Isotropic {
\n+
585 public:
\n+
586
\n+
587 typedef boost::shared_ptr<Unit> shared_ptr;
\n+
588
\n+
590 Unit(size_t dim=1): Isotropic(dim,1.0) {}
\n+
591
\n+
592 ~Unit() override {}
\n+
593
\n+
\n+
597 static shared_ptr Create(size_t dim) {
\n+
598 return shared_ptr(new Unit(dim));
\n+
599 }
\n+
\n+
600
\n+
602 bool isUnit() const override { return true; }
\n+
603
\n+
604 void print(const std::string& name) const override;
\n+
605 double squaredMahalanobisDistance(const Vector& v) const override;
\n+
606 Vector whiten(const Vector& v) const override { return v; }
\n+
607 Vector unwhiten(const Vector& v) const override { return v; }
\n+
608 Matrix Whiten(const Matrix& H) const override { return H; }
\n+
609 void WhitenInPlace(Matrix& /*H*/) const override {}
\n+
610 void WhitenInPlace(Eigen::Block<Matrix> /*H*/) const override {}
\n+
611 void whitenInPlace(Vector& /*v*/) const override {}
\n+
612 void unwhitenInPlace(Vector& /*v*/) const override {}
\n+
613 void whitenInPlace(Eigen::Block<Vector>& /*v*/) const override {}
\n+
614 void unwhitenInPlace(Eigen::Block<Vector>& /*v*/) const override {}
\n+
615
\n+
616 private:
\n+
618 friend class boost::serialization::access;
\n+
619 template<class ARCHIVE>
\n+
620 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
621 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Isotropic);
\n+
622 }
\n+
623 };
\n+
\n+
624
\n+
\n+
642 class GTSAM_EXPORT Robust : public Base {
\n+
643 public:
\n+
644 typedef boost::shared_ptr<Robust> shared_ptr;
\n+
645
\n+
646 protected:
\n+\n+\n+
649
\n+
650 const RobustModel::shared_ptr robust_;
\n+
651 const NoiseModel::shared_ptr noise_;
\n+
652
\n+
653 public:
\n+
654
\n+
656 Robust() {};
\n+
657
\n+
\n+
659 Robust(const RobustModel::shared_ptr robust, const NoiseModel::shared_ptr noise)
\n+
660 : Base(noise->dim()), robust_(robust), noise_(noise) {}
\n+
\n+
661
\n+
663 ~Robust() override {}
\n+
664
\n+
665 void print(const std::string& name) const override;
\n+
666 bool equals(const Base& expected, double tol=1e-9) const override;
\n+
667
\n+
669 const RobustModel::shared_ptr& robust() const { return robust_; }
\n+
670
\n+
672 const NoiseModel::shared_ptr& noise() const { return noise_; }
\n+
673
\n+
674 // Functions below are dummy but necessary for the noiseModel::Base
\n+
\n+
675 inline Vector whiten(const Vector& v) const override
\n+
676 { Vector r = v; this->WhitenSystem(r); return r; }
\n+
\n+
\n+
677 inline Matrix Whiten(const Matrix& A) const override
\n+
678 { Vector b; Matrix B=A; this->WhitenSystem(B,b); return B; }
\n+
\n+
\n+
679 inline Vector unwhiten(const Vector& /*v*/) const override
\n+
680 { throw std::invalid_argument("unwhiten is not currently supported for robust noise models."); }
\n+
\n+
\n+
682 double loss(const double squared_distance) const override {
\n+
683 return robust_->loss(std::sqrt(squared_distance));
\n+
684 }
\n+
\n+
685
\n+
686 // NOTE: This is special because in whiten the base version will do the reweighting
\n+
687 // which is incorrect!
\n+
\n+
688 double squaredMahalanobisDistance(const Vector& v) const override {
\n+
689 return noise_->squaredMahalanobisDistance(v);
\n+
690 }
\n+
\n+
691
\n+
692 // These are really robust iterated re-weighting support functions
\n+
693 virtual void WhitenSystem(Vector& b) const;
\n+
694 void WhitenSystem(std::vector<Matrix>& A, Vector& b) const override;
\n+
695 void WhitenSystem(Matrix& A, Vector& b) const override;
\n+
696 void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const override;
\n+
697 void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const override;
\n+
698
\n+
699 Vector unweightedWhiten(const Vector& v) const override;
\n+
700 double weight(const Vector& v) const override;
\n+
701
\n+
702 static shared_ptr Create(
\n+
703 const RobustModel::shared_ptr &robust, const NoiseModel::shared_ptr noise);
\n+
704
\n+
705 private:
\n+
707 friend class boost::serialization::access;
\n+
708 template<class ARCHIVE>
\n+
709 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
710 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
711 ar & boost::serialization::make_nvp("robust_", const_cast<RobustModel::shared_ptr&>(robust_));
\n+
712 ar & boost::serialization::make_nvp("noise_", const_cast<NoiseModel::shared_ptr&>(noise_));
\n+
713 }
\n+
714 };
\n+
\n+
715
\n+
716 // Helper function
\n+
717 GTSAM_EXPORT boost::optional<Vector> checkIfDiagonal(const Matrix& M);
\n+
718
\n+
719 } // namespace noiseModel
\n+
720
\n+
724 typedef noiseModel::Base::shared_ptr SharedNoiseModel;
\n+
725 typedef noiseModel::Gaussian::shared_ptr SharedGaussian;
\n+
726 typedef noiseModel::Diagonal::shared_ptr SharedDiagonal;
\n+
727 typedef noiseModel::Constrained::shared_ptr SharedConstrained;
\n+
728 typedef noiseModel::Isotropic::shared_ptr SharedIsotropic;
\n+
729
\n+
731 template<> struct traits<noiseModel::Gaussian> : public Testable<noiseModel::Gaussian> {};
\n+
732 template<> struct traits<noiseModel::Diagonal> : public Testable<noiseModel::Diagonal> {};
\n+
733 template<> struct traits<noiseModel::Constrained> : public Testable<noiseModel::Constrained> {};
\n+
734 template<> struct traits<noiseModel::Isotropic> : public Testable<noiseModel::Isotropic> {};
\n+
735 template<> struct traits<noiseModel::Unit> : public Testable<noiseModel::Unit> {};
\n+
736
\n+
737} //\\ namespace gtsam
\n+
738
\n+
739
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Concept check for values that can be used in unit tests.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
DenseIndex getDim(DenseIndex block) const
Number of dimensions for variable on this diagonal block.
Definition SymmetricBlockMatrix.h:123
\n-
constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const
Get block above the diagonal (I, J).
Definition SymmetricBlockMatrix.h:150
\n-
DenseIndex rows() const
Row size.
Definition SymmetricBlockMatrix.h:114
\n-
constBlock aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock, DenseIndex j_startBlock, DenseIndex j_endBlock) const
Get a range [i,j) from the matrix. Indices are in block units.
Definition SymmetricBlockMatrix.h:170
\n-
Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)
Return the J'th diagonal block as a self adjoint view.
Definition SymmetricBlockMatrix.h:135
\n
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n-
Definition Ordering.h:34
\n-
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
A Gaussian factor using the canonical parameters (information form)
Definition HessianFactor.h:101
\n-
HessianFactor This
Typedef to this class.
Definition HessianFactor.h:109
\n-
void updateHessian(HessianFactor *other) const
Update another Hessian factor.
Definition HessianFactor.h:328
\n-
boost::shared_ptr< This > shared_ptr
A shared_ptr to this class.
Definition HessianFactor.h:110
\n-
GaussianFactor::shared_ptr clone() const override
Clone this HessianFactor.
Definition HessianFactor.h:189
\n-
const SymmetricBlockMatrix & info() const
Return underlying information matrix.
Definition HessianFactor.h:265
\n-
SymmetricBlockMatrix::Block linearTerm()
Return the complete linear term as described above.
Definition HessianFactor.h:259
\n-
double constantTerm() const
Return the constant term as described above.
Definition HessianFactor.h:230
\n-
SymmetricBlockMatrix::constBlock linearTerm() const
Return the complete linear term as described above.
Definition HessianFactor.h:251
\n-
~HessianFactor() override
Destructor.
Definition HessianFactor.h:186
\n-
HessianFactor(const GaussianFactorGraph &factors)
Combine a set of factors into a single dense HessianFactor.
Definition HessianFactor.h:182
\n-
DenseIndex getDim(const_iterator variable) const override
Return the dimension of the variable pointed to by the given key iterator todo: Remove this in favor ...
Definition HessianFactor.h:213
\n-
SymmetricBlockMatrix::constBlock linearTerm(const_iterator j) const
Return the part of linear term as described above corresponding to the requested variable.
Definition HessianFactor.h:244
\n-
SymmetricBlockMatrix info_
The full augmented information matrix, s.t. the quadratic error is 0.5*[x -1]'H[x -1].
Definition HessianFactor.h:104
\n-
GaussianFactor Base
Typedef to base class.
Definition HessianFactor.h:108
\n-
size_t rows() const
Return the number of columns and rows of the Hessian matrix, including the information vector.
Definition HessianFactor.h:218
\n-
SymmetricBlockMatrix::constBlock constBlock
A block from the Hessian matrix (const version)
Definition HessianFactor.h:112
\n-
SymmetricBlockMatrix & info()
Return non-const information matrix.
Definition HessianFactor.h:269
\n-
SymmetricBlockMatrix::Block Block
A block from the Hessian matrix.
Definition HessianFactor.h:111
\n-
double & constantTerm()
Return the constant term as described above.
Definition HessianFactor.h:238
\n-
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n-
Scatter is an intermediate data structure used when building a HessianFactor incrementally,...
Definition Scatter.h:49
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
Definition NonlinearFactorGraph.h:55
\n-
In Gaussian factors, the error function returns either the negative log-likelihood,...
\n-
is the normalization constant.
\n+
Pure virtual class for all robust error function classes.
Definition LossFunctions.h:63
\n+
noiseModel::Base is the abstract base class for all noise models.
Definition NoiseModel.h:53
\n+
virtual bool isConstrained() const
true if a constrained noise model, saves slow/clumsy dynamic casting
Definition NoiseModel.h:69
\n+
virtual void whitenInPlace(Vector &v) const
in-place whiten, override if can be done more efficiently
Definition NoiseModel.h:112
\n+
size_t dim() const
Dimensionality.
Definition NoiseModel.h:75
\n+
virtual void unwhitenInPlace(Eigen::Block< Vector > &v) const
in-place unwhiten, override if can be done more efficiently
Definition NoiseModel.h:127
\n+
virtual void whitenInPlace(Eigen::Block< Vector > &v) const
in-place whiten, override if can be done more efficiently
Definition NoiseModel.h:122
\n+
virtual Vector whiten(const Vector &v) const =0
Whiten an error vector.
\n+
virtual double mahalanobisDistance(const Vector &v) const
Mahalanobis distance.
Definition NoiseModel.h:97
\n+
virtual bool isUnit() const
true if a unit noise model, saves slow/clumsy dynamic casting
Definition NoiseModel.h:72
\n+
virtual double weight(const Vector &v) const
get the weight from the effective loss function on residual vector v
Definition NoiseModel.h:137
\n+
virtual Vector unweightedWhiten(const Vector &v) const
Useful function for robust noise models to get the unweighted but whitened error.
Definition NoiseModel.h:132
\n+
virtual Vector unwhiten(const Vector &v) const =0
Unwhiten an error vector.
\n+
virtual double loss(const double squared_distance) const
loss function, input is Mahalanobis distance
Definition NoiseModel.h:102
\n+
virtual void unwhitenInPlace(Vector &v) const
in-place unwhiten, override if can be done more efficiently
Definition NoiseModel.h:117
\n+
virtual Matrix Whiten(const Matrix &H) const =0
Whiten a matrix.
\n+
Base(size_t dim=1)
primary constructor
Definition NoiseModel.h:65
\n+
Gaussian implements the mathematical model |R*x|^2 = |y|^2 with R'*R=inv(Sigma) where y = whiten(x) =...
Definition NoiseModel.h:162
\n+
virtual Matrix R() const
Return R itself, but note that Whiten(H) is cheaper than R*H.
Definition NoiseModel.h:255
\n+
Gaussian(size_t dim=1, const boost::optional< Matrix > &sqrt_information=boost::none)
constructor takes square root information matrix
Definition NoiseModel.h:186
\n+
boost::optional< Matrix > sqrt_information_
Matrix square root of information matrix (R)
Definition NoiseModel.h:167
\n+
A diagonal noise model implements a diagonal covariance matrix, with the elements of the diagonal spe...
Definition NoiseModel.h:281
\n+
Matrix R() const override
Return R itself, but note that Whiten(H) is cheaper than R*H.
Definition NoiseModel.h:352
\n+
Vector sigmas_
Standard deviations (sigmas), their inverse and inverse square (weights/precisions) These are all com...
Definition NoiseModel.h:289
\n+
double sigma(size_t i) const
Return standard deviations (sqrt of diagonal)
Definition NoiseModel.h:335
\n+
const Vector & invsigmas() const
Return sqrt precisions.
Definition NoiseModel.h:340
\n+
Vector sigmas() const override
Calculate standard deviations.
Definition NoiseModel.h:325
\n+
const Vector & precisions() const
Return precisions.
Definition NoiseModel.h:346
\n+
A Constrained constrained model is a specialization of Diagonal which allows some or all of the sigma...
Definition NoiseModel.h:381
\n+
bool isConstrained() const override
true if a constrained noise mode, saves slow/clumsy dynamic casting
Definition NoiseModel.h:409
\n+
static shared_ptr All(size_t dim, const Vector &mu)
Fully constrained variations.
Definition NoiseModel.h:462
\n+
static shared_ptr All(size_t dim, double mu)
Fully constrained variations with a mu parameter.
Definition NoiseModel.h:467
\n+
static shared_ptr All(size_t dim)
Fully constrained variations.
Definition NoiseModel.h:457
\n+
const Vector & mu() const
Access mu as a vector.
Definition NoiseModel.h:415
\n+
Vector mu_
Penalty function weight - needs to be large enough to dominate soft constraints.
Definition NoiseModel.h:385
\n+
An isotropic noise model corresponds to a scaled diagonal covariance To construct,...
Definition NoiseModel.h:516
\n+
double sigma() const
Return standard deviation.
Definition NoiseModel.h:565
\n+
static shared_ptr Precision(size_t dim, double precision, bool smart=true)
An isotropic noise model created by specifying a precision.
Definition NoiseModel.h:549
\n+
Isotropic(size_t dim, double sigma)
protected constructor takes sigma
Definition NoiseModel.h:521
\n+
Unit: i.i.d.
Definition NoiseModel.h:584
\n+
void WhitenInPlace(Eigen::Block< Matrix >) const override
In-place version.
Definition NoiseModel.h:610
\n+
Vector unwhiten(const Vector &v) const override
Unwhiten an error vector.
Definition NoiseModel.h:607
\n+
void whitenInPlace(Eigen::Block< Vector > &) const override
in-place whiten, override if can be done more efficiently
Definition NoiseModel.h:613
\n+
bool isUnit() const override
true if a unit noise model, saves slow/clumsy dynamic casting
Definition NoiseModel.h:602
\n+
Unit(size_t dim=1)
constructor for serialization
Definition NoiseModel.h:590
\n+
Vector whiten(const Vector &v) const override
Whiten an error vector.
Definition NoiseModel.h:606
\n+
static shared_ptr Create(size_t dim)
Create a unit covariance noise model.
Definition NoiseModel.h:597
\n+
void unwhitenInPlace(Vector &) const override
in-place unwhiten, override if can be done more efficiently
Definition NoiseModel.h:612
\n+
void unwhitenInPlace(Eigen::Block< Vector > &) const override
in-place unwhiten, override if can be done more efficiently
Definition NoiseModel.h:614
\n+
void whitenInPlace(Vector &) const override
in-place whiten, override if can be done more efficiently
Definition NoiseModel.h:611
\n+
void WhitenInPlace(Matrix &) const override
In-place version.
Definition NoiseModel.h:609
\n+
Matrix Whiten(const Matrix &H) const override
Whiten a matrix.
Definition NoiseModel.h:608
\n+
Base class for robust error models The robust M-estimators above simply tell us how to re-weight the ...
Definition NoiseModel.h:642
\n+
const RobustModel::shared_ptr & robust() const
Return the contained robust error function.
Definition NoiseModel.h:669
\n+
Robust()
Default Constructor for serialization.
Definition NoiseModel.h:656
\n+
Robust(const RobustModel::shared_ptr robust, const NoiseModel::shared_ptr noise)
Constructor.
Definition NoiseModel.h:659
\n+
double squaredMahalanobisDistance(const Vector &v) const override
Squared Mahalanobis distance v'*R'*R*v = <R*v,R*v>
Definition NoiseModel.h:688
\n+
const NoiseModel::shared_ptr noise_
noise model used
Definition NoiseModel.h:651
\n+
double loss(const double squared_distance) const override
Compute loss from the m-estimator using the Mahalanobis distance.
Definition NoiseModel.h:682
\n+
Vector unwhiten(const Vector &) const override
Unwhiten an error vector.
Definition NoiseModel.h:679
\n+
Matrix Whiten(const Matrix &A) const override
Whiten a matrix.
Definition NoiseModel.h:677
\n+
const RobustModel::shared_ptr robust_
robust error function used
Definition NoiseModel.h:650
\n+
~Robust() override
Destructor.
Definition NoiseModel.h:663
\n+
const NoiseModel::shared_ptr & noise() const
Return the contained noise model.
Definition NoiseModel.h:672
\n+
Vector whiten(const Vector &v) const override
Whiten an error vector.
Definition NoiseModel.h:675
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HessianFactor.h\n+NoiseModel.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,398 +16,790 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+23#include \n+24#include \n 25\n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-30 // Forward declarations\n-31 class Ordering;\n-32 class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br;\n-33 class HessianFactor;\n-34 class _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-35 class GaussianBayesNet;\n-36 class GaussianFactorGraph;\n-37\n-_\b1_\b0_\b1 class GTSAM_EXPORT _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n-102 protected:\n-103\n-_\b1_\b0_\b4 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bi_\bn_\bf_\bo_\b_;\n+26#include \n+27#include \n+28#include \n+29#include \n+30#include \n+31\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+35 namespace noiseModel {\n+36\n+37 // Forward declaration\n+38 class Gaussian;\n+39 class Diagonal;\n+40 class Constrained;\n+41 class Isotropic;\n+42 class Unit;\n+43 class RobustModel;\n+44\n+45 //--------------------------------------------------------------------------\n+-------------\n+46\n+_\b5_\b3 class GTSAM_EXPORT _\bB_\ba_\bs_\be {\n+54\n+55 public:\n+56 typedef boost::shared_ptr shared_ptr;\n+57\n+58 protected:\n+59\n+60 size_t dim_;\n+61\n+62 public:\n+63\n+_\b6_\b5 _\bB_\ba_\bs_\be(size_t dim = 1):dim_(dim) {}\n+66 virtual _\b~_\bB_\ba_\bs_\be() {}\n+67\n+_\b6_\b9 virtual bool _\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd() const { return false; } // default false\n+70\n+_\b7_\b2 virtual bool _\bi_\bs_\bU_\bn_\bi_\bt() const { return false; } // default false\n+73\n+_\b7_\b5 inline size_t _\bd_\bi_\bm() const { return dim_;}\n+76\n+77 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& name = \"\") const = 0;\n+78\n+79 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be& expected, double tol=1e-9) const = 0;\n+80\n+82 virtual Vector sigmas() const;\n+83\n+_\b8_\b5 virtual Vector _\bw_\bh_\bi_\bt_\be_\bn(const Vector& v) const = 0;\n+86\n+_\b8_\b8 virtual Matrix _\bW_\bh_\bi_\bt_\be_\bn(const Matrix& H) const = 0;\n+89\n+_\b9_\b1 virtual Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn(const Vector& v) const = 0;\n+92\n+94 virtual double squaredMahalanobisDistance(const Vector& v) const;\n+95\n+_\b9_\b7 virtual double _\bm_\ba_\bh_\ba_\bl_\ba_\bn_\bo_\bb_\bi_\bs_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be(const Vector& v) const {\n+98 return std::sqrt(squaredMahalanobisDistance(v));\n+99 }\n+100\n+_\b1_\b0_\b2 virtual double _\bl_\bo_\bs_\bs(const double squared_distance) const {\n+103 return 0.5 * squared_distance;\n+104 }\n 105\n-106 public:\n-107\n-_\b1_\b0_\b8 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-_\b1_\b0_\b9 typedef _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-_\b1_\b1_\b0 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-_\b1_\b1_\b1 typedef SymmetricBlockMatrix::Block _\bB_\bl_\bo_\bc_\bk;\n-_\b1_\b1_\b2 typedef SymmetricBlockMatrix::constBlock _\bc_\bo_\bn_\bs_\bt_\bB_\bl_\bo_\bc_\bk;\n-113\n-114\n-116 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br();\n-117\n-123 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j, const Matrix& G, const Vector& g, double f);\n-124\n-128 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j, const Vector& mu, const Matrix& Sigma);\n-129\n-145 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2,\n-146 const Matrix& G11, const Matrix& G12, const Vector& g1,\n-147 const Matrix& G22, const Vector& g2, double f);\n-148\n-153 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, _\bK_\be_\by j3,\n-154 const Matrix& G11, const Matrix& G12, const Matrix& G13, const Vector& g1,\n-155 const Matrix& G22, const Matrix& G23, const Vector& g2,\n-156 const Matrix& G33, const Vector& g3, double f);\n-157\n-162 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& js, const std::vector& Gs,\n-163 const std::vector& gs, double f);\n-164\n-167 template\n-168 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const KEYS& keys, const _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n-augmentedInformation);\n-169\n-171 explicit _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& cg);\n-172\n-175 explicit _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& factor);\n-176\n-178 explicit _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factors,\n-179 const _\bS_\bc_\ba_\bt_\bt_\be_\br& scatter);\n+106 virtual void WhitenSystem(std::vector& A, Vector& b) const = 0;\n+107 virtual void WhitenSystem(Matrix& A, Vector& b) const = 0;\n+108 virtual void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const = 0;\n+109 virtual void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b)\n+const = 0;\n+110\n+_\b1_\b1_\b2 virtual void _\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Vector& v) const {\n+113 v = whiten(v);\n+114 }\n+115\n+_\b1_\b1_\b7 virtual void _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Vector& v) const {\n+118 v = unwhiten(v);\n+119 }\n+120\n+_\b1_\b2_\b2 virtual void _\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Eigen::Block& v) const {\n+123 v = whiten(v);\n+124 }\n+125\n+_\b1_\b2_\b7 virtual void _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Eigen::Block& v) const {\n+128 v = unwhiten(v);\n+129 }\n+130\n+_\b1_\b3_\b2 virtual Vector _\bu_\bn_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\bW_\bh_\bi_\bt_\be_\bn(const Vector& v) const {\n+133 return whiten(v);\n+134 }\n+135\n+_\b1_\b3_\b7 virtual double _\bw_\be_\bi_\bg_\bh_\bt(const Vector& v) const { return 1.0; }\n+138\n+139 private:\n+_\b1_\b4_\b1 friend class boost::serialization::access;\n+142 template\n+143 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+144 ar & BOOST_SERIALIZATION_NVP(dim_);\n+145 }\n+146 };\n+147\n+148 //-------------------------------------------------------------------------\n+--------------\n+149\n+_\b1_\b6_\b2 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn: public _\bB_\ba_\bs_\be {\n+163\n+164 protected:\n+165\n+_\b1_\b6_\b7 boost::optional _\bs_\bq_\br_\bt_\b__\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_;\n+168\n+169 private:\n+170\n+174 const Matrix& thisR() const {\n+175 // should never happen\n+176 if (!sqrt_information_) throw std::runtime_error(\"Gaussian: has no R\n+matrix\");\n+177 return *sqrt_information_;\n+178 }\n+179\n 180\n-_\b1_\b8_\b2 explicit _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factors)\n-183 : _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(factors, _\bS_\bc_\ba_\bt_\bt_\be_\br(factors)) {}\n+181 public:\n+182\n+183 typedef boost::shared_ptr shared_ptr;\n 184\n-_\b1_\b8_\b6 _\b~_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-187\n-_\b1_\b8_\b9 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const override {\n-190 return boost::make_shared(*this); }\n+_\b1_\b8_\b6 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn(size_t dim = 1,\n+187 const boost::optional& sqrt_information = boost::none)\n+188 : _\bB_\ba_\bs_\be(dim), sqrt_information_(sqrt_information) {}\n+189\n+190 _\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn() override {}\n 191\n-193 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-194 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n-195\n-197 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& lf, double tol = 1e-9) const override;\n+197 static shared_ptr SqrtInformation(const Matrix& R, bool smart = true);\n 198\n-200 using GaussianFactor::error;\n-201\n-206 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n-207\n-_\b2_\b1_\b3 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bD_\bi_\bm(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) const override {\n-214 return info_._\bg_\be_\bt_\bD_\bi_\bm(std::distance(begin(), variable));\n-215 }\n-216\n-_\b2_\b1_\b8 size_t _\br_\bo_\bw_\bs() const { return info_._\br_\bo_\bw_\bs(); }\n-219\n-225 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br negate() const override;\n-226\n-_\b2_\b3_\b0 double _\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\be_\br_\bm() const {\n-231 const auto view = info_._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(size());\n-232 return view(0, 0);\n-233 }\n+204 static shared_ptr Information(const Matrix& M, bool smart = true);\n+205\n+211 static shared_ptr Covariance(const Matrix& covariance, bool smart = true);\n+212\n+213 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n+214 bool _\be_\bq_\bu_\ba_\bl_\bs(const Base& expected, double tol=1e-9) const override;\n+215 Vector sigmas() const override;\n+216 Vector whiten(const Vector& v) const override;\n+217 Vector unwhiten(const Vector& v) const override;\n+218\n+223 Matrix Whiten(const Matrix& H) const override;\n+224\n+228 virtual void WhitenInPlace(Matrix& H) const;\n+229\n+233 virtual void WhitenInPlace(Eigen::Block H) const;\n 234\n-_\b2_\b3_\b8 double& _\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\be_\br_\bm() { return info_._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(size())(0, 0); }\n-239\n-_\b2_\b4_\b4 SymmetricBlockMatrix::constBlock _\bl_\bi_\bn_\be_\ba_\br_\bT_\be_\br_\bm(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br j) const {\n-245 assert(!empty());\n-246 return info_._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(j - begin(), size());\n-247 }\n-248\n-_\b2_\b5_\b1 SymmetricBlockMatrix::constBlock _\bl_\bi_\bn_\be_\ba_\br_\bT_\be_\br_\bm() const {\n-252 assert(!empty());\n-253 // get the last column (except the bottom right block)\n-254 return info_._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be(0, size(), size(), size() + 1);\n-255 }\n+238 void WhitenSystem(std::vector& A, Vector& b) const override;\n+239 void WhitenSystem(Matrix& A, Vector& b) const override;\n+240 void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const override;\n+241 void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const\n+override;\n+242\n+252 virtual boost::shared_ptr QR(Matrix& Ab) const;\n+253\n+_\b2_\b5_\b5 virtual Matrix _\bR() const { return thisR();}\n 256\n-_\b2_\b5_\b9 SymmetricBlockMatrix::Block _\bl_\bi_\bn_\be_\ba_\br_\bT_\be_\br_\bm() {\n-260 assert(!empty());\n-261 return info_._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be(0, size(), size(), size() + 1);\n-262 }\n-263\n-_\b2_\b6_\b5 const _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& _\bi_\bn_\bf_\bo() const { return info_; }\n-266\n-_\b2_\b6_\b9 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& _\bi_\bn_\bf_\bo() { return info_; }\n-270\n-286 Matrix augmentedInformation() const override;\n-287\n-289 Eigen::SelfAdjointView\n-informationView() const;\n+258 virtual Matrix information() const;\n+259\n+261 virtual Matrix covariance() const;\n+262\n+263 private:\n+_\b2_\b6_\b5 friend class boost::serialization::access;\n+266 template\n+267 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+268 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+269 ar & BOOST_SERIALIZATION_NVP(sqrt_information_);\n+270 }\n+271\n+272 }; // Gaussian\n+273\n+274 //-------------------------------------------------------------------------\n+--------------\n+275\n+_\b2_\b8_\b1 class GTSAM_EXPORT _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl : public _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn {\n+282 protected:\n+283\n+_\b2_\b8_\b9 Vector _\bs_\bi_\bg_\bm_\ba_\bs_\b_, invsigmas_, precisions_;\n 290\n-294 Matrix information() const override;\n+291 protected:\n+292\n+294 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(const Vector& sigmas);\n 295\n-297 void hessianDiagonalAdd(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& d) const override;\n-298\n-300 using Base::hessianDiagonal;\n+296 public:\n+298 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl();\n+299\n+300 typedef boost::shared_ptr shared_ptr;\n 301\n-303 void hessianDiagonal(double* d) const override;\n-304\n-306 std::map hessianBlockDiagonal() const override;\n-307\n-309 std::pair jacobian() const override;\n-310\n-316 Matrix augmentedJacobian() const override;\n+302 _\b~_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl() override {}\n+303\n+308 static shared_ptr Sigmas(const Vector& sigmas, bool smart = true);\n+309\n+316 static shared_ptr Variances(const Vector& variances, bool smart = true);\n 317\n-323 void updateHessian(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys, _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx* info) const\n-override;\n-324\n-_\b3_\b2_\b8 void _\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn(_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br* other) const {\n-329 assert(other);\n-330 updateHessian(other->_\bk_\be_\by_\bs_\b_, &other->_\bi_\bn_\bf_\bo_\b_);\n-331 }\n-332\n-334 void multiplyHessianAdd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs&\n-y) const override;\n-335\n-337 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const override;\n-338\n-340 void gradientAtZero(double* d) const override;\n-341\n-346 Vector gradient(_\bK_\be_\by key, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n-347\n-352 boost::shared_ptr eliminateCholesky(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg&\n-keys);\n-353\n-355 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs solve();\n-356\n-357 private:\n-359 void Allocate(const _\bS_\bc_\ba_\bt_\bt_\be_\br& scatter);\n-360\n-362 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bc_\ba_\bt_\bt_\be_\br& scatter);\n-363\n-364 friend class _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n-365 friend class NonlinearClusterTree;\n+322 static shared_ptr Precisions(const Vector& precisions, bool smart = true);\n+323\n+324 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n+_\b3_\b2_\b5 Vector _\bs_\bi_\bg_\bm_\ba_\bs() const override { return sigmas_; }\n+326 Vector whiten(const Vector& v) const override;\n+327 Vector unwhiten(const Vector& v) const override;\n+328 Matrix Whiten(const Matrix& H) const override;\n+329 void WhitenInPlace(Matrix& H) const override;\n+330 void WhitenInPlace(Eigen::Block H) const override;\n+331\n+_\b3_\b3_\b5 inline double _\bs_\bi_\bg_\bm_\ba(size_t i) const { return sigmas_(i); }\n+336\n+_\b3_\b4_\b0 inline const Vector& _\bi_\bn_\bv_\bs_\bi_\bg_\bm_\ba_\bs() const { return invsigmas_; }\n+341 inline double invsigma(size_t i) const {return invsigmas_(i);}\n+342\n+_\b3_\b4_\b6 inline const Vector& _\bp_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bs() const { return precisions_; }\n+347 inline double precision(size_t i) const {return precisions_(i);}\n+348\n+_\b3_\b5_\b2 Matrix _\bR() const override {\n+353 return invsigmas().asDiagonal();\n+354 }\n+355\n+356 private:\n+_\b3_\b5_\b8 friend class boost::serialization::access;\n+359 template\n+360 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+361 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn);\n+362 ar & BOOST_SERIALIZATION_NVP(sigmas_);\n+363 ar & BOOST_SERIALIZATION_NVP(invsigmas_);\n+364 }\n+365 }; // Diagonal\n 366\n-_\b3_\b6_\b8 friend class boost::serialization::access;\n-369 template\n-370 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-371 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br);\n-372 ar & BOOST_SERIALIZATION_NVP(info_);\n-373 }\n-374 };\n-375\n-392GTSAM_EXPORT std::pair, boost::\n-shared_ptr >\n-393 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by(const GaussianFactorGraph& factors, const Ordering&\n-keys);\n-394\n-410GTSAM_EXPORT std::pair, boost::\n-shared_ptr >\n-411 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by(const GaussianFactorGraph& factors, const Ordering&\n-keys);\n-412\n-414template<>\n-_\b4_\b1_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+367 //-------------------------------------------------------------------------\n+--------------\n+368\n+_\b3_\b8_\b1 class GTSAM_EXPORT _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd : public _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl {\n+382 protected:\n+383\n+384 // Sigmas are contained in the base class\n+_\b3_\b8_\b5 Vector _\bm_\bu_\b_;\n+386\n+392 _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(const Vector& mu, const Vector& sigmas);\n+393\n+394 public:\n+395\n+396 typedef boost::shared_ptr shared_ptr;\n+397\n+404 _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(const Vector& sigmas = Z_1x1);\n+405\n+406 _\b~_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd() override {}\n+407\n+_\b4_\b0_\b9 bool _\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd() const override { return true; }\n+410\n+412 bool constrained(size_t i) const;\n+413\n+_\b4_\b1_\b5 const Vector& _\bm_\bu() const { return mu_; }\n 416\n-417} // \\ namespace gtsam\n-418\n-419\n-420#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bl_\b._\bh>\n-_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-Access to matrices via blocks of pre-defined sizes.\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bl_\b._\bh\n-Contains the HessianFactor class, a general quadratic factor.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-A factor with a quadratic error function - a Gaussian.\n-_\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\n-Maps global variable indices to slot indices.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by\n-std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr<\n-HessianFactor > > EliminateCholesky(const GaussianFactorGraph &factors, const\n-Ordering &keys)\n-Densely partially eliminate with Cholesky factorization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:525\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by\n-std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr<\n-GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors,\n-const Ordering &keys)\n-Densely partially eliminate with Cholesky factorization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:548\n+421 static shared_ptr MixedSigmas(const Vector& mu, const Vector& sigmas);\n+422\n+427 static shared_ptr MixedSigmas(const Vector& sigmas);\n+428\n+433 static shared_ptr MixedSigmas(double m, const Vector& sigmas);\n+434\n+439 static shared_ptr MixedVariances(const Vector& mu, const Vector&\n+variances);\n+440 static shared_ptr MixedVariances(const Vector& variances);\n+441\n+446 static shared_ptr MixedPrecisions(const Vector& mu, const Vector&\n+precisions);\n+447 static shared_ptr MixedPrecisions(const Vector& precisions);\n+448\n+454 double squaredMahalanobisDistance(const Vector& v) const override;\n+455\n+_\b4_\b5_\b7 static shared_ptr _\bA_\bl_\bl(size_t dim) {\n+458 return shared_ptr(new _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(Vector::Constant(dim, 1000.0), Vector::\n+Constant(dim,0)));\n+459 }\n+460\n+_\b4_\b6_\b2 static shared_ptr _\bA_\bl_\bl(size_t dim, const Vector& mu) {\n+463 return shared_ptr(new _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(mu, Vector::Constant(dim,0)));\n+464 }\n+465\n+_\b4_\b6_\b7 static shared_ptr _\bA_\bl_\bl(size_t dim, double mu) {\n+468 return shared_ptr(new _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(Vector::Constant(dim, mu), Vector::\n+Constant(dim,0)));\n+469 }\n+470\n+471 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n+472\n+474 Vector whiten(const Vector& v) const override;\n+475\n+478 Matrix Whiten(const Matrix& H) const override;\n+479 void WhitenInPlace(Matrix& H) const override;\n+480 void WhitenInPlace(Eigen::Block H) const override;\n+481\n+491 Diagonal::shared_ptr QR(Matrix& Ab) const override;\n+492\n+497 shared_ptr unit() const;\n+498\n+499 private:\n+_\b5_\b0_\b1 friend class boost::serialization::access;\n+502 template\n+503 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+504 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl);\n+505 ar & BOOST_SERIALIZATION_NVP(mu_);\n+506 }\n+507\n+508 }; // Constrained\n+509\n+510 //-------------------------------------------------------------------------\n+--------------\n+511\n+_\b5_\b1_\b6 class GTSAM_EXPORT _\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc : public _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl {\n+517 protected:\n+518 double sigma_, invsigma_;\n+519\n+_\b5_\b2_\b1 _\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc(size_t dim, double sigma) :\n+522 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(Vector::Constant(dim, sigma)),sigma_(sigma),invsigma_(1.0/sigma)\n+{}\n+523\n+524 public:\n+525\n+526 /* dummy constructor to allow for serialization */\n+527 _\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc() : _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(Vector1::Constant(1.0)),sigma_(1.0),invsigma_(1.0)\n+{}\n+528\n+529 ~Isotropic() override {}\n+530\n+531 typedef boost::shared_ptr shared_ptr;\n+532\n+536 static shared_ptr Sigma(size_t dim, double sigma, bool smart = true);\n+537\n+544 static shared_ptr Variance(size_t dim, double variance, bool smart = true);\n+545\n+_\b5_\b4_\b9 static shared_ptr _\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn(size_t dim, double precision, bool smart =\n+true) {\n+550 return Variance(dim, 1.0/precision, smart);\n+551 }\n+552\n+553 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n+554 double squaredMahalanobisDistance(const Vector& v) const override;\n+555 Vector whiten(const Vector& v) const override;\n+556 Vector unwhiten(const Vector& v) const override;\n+557 Matrix Whiten(const Matrix& H) const override;\n+558 void WhitenInPlace(Matrix& H) const override;\n+559 void whitenInPlace(Vector& v) const override;\n+560 void WhitenInPlace(Eigen::Block H) const override;\n+561\n+_\b5_\b6_\b5 inline double _\bs_\bi_\bg_\bm_\ba() const { return sigma_; }\n+566\n+567 private:\n+_\b5_\b6_\b9 friend class boost::serialization::access;\n+570 template\n+571 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+572 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl);\n+573 ar & BOOST_SERIALIZATION_NVP(sigma_);\n+574 ar & BOOST_SERIALIZATION_NVP(invsigma_);\n+575 }\n+576\n+577 };\n+578\n+579 //-------------------------------------------------------------------------\n+--------------\n+580\n+_\b5_\b8_\b4 class GTSAM_EXPORT _\bU_\bn_\bi_\bt : public _\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc {\n+585 public:\n+586\n+587 typedef boost::shared_ptr shared_ptr;\n+588\n+_\b5_\b9_\b0 _\bU_\bn_\bi_\bt(size_t dim=1): _\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc(dim,1.0) {}\n+591\n+592 _\b~_\bU_\bn_\bi_\bt() override {}\n+593\n+_\b5_\b9_\b7 static shared_ptr _\bC_\br_\be_\ba_\bt_\be(size_t dim) {\n+598 return shared_ptr(new _\bU_\bn_\bi_\bt(dim));\n+599 }\n+600\n+_\b6_\b0_\b2 bool _\bi_\bs_\bU_\bn_\bi_\bt() const override { return true; }\n+603\n+604 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n+605 double squaredMahalanobisDistance(const Vector& v) const override;\n+_\b6_\b0_\b6 Vector _\bw_\bh_\bi_\bt_\be_\bn(const Vector& v) const override { return v; }\n+_\b6_\b0_\b7 Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn(const Vector& v) const override { return v; }\n+_\b6_\b0_\b8 Matrix _\bW_\bh_\bi_\bt_\be_\bn(const Matrix& H) const override { return H; }\n+_\b6_\b0_\b9 void _\bW_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Matrix& /*H*/) const override {}\n+_\b6_\b1_\b0 void _\bW_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Eigen::Block /*H*/) const override {}\n+_\b6_\b1_\b1 void _\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Vector& /*v*/) const override {}\n+_\b6_\b1_\b2 void _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Vector& /*v*/) const override {}\n+_\b6_\b1_\b3 void _\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Eigen::Block& /*v*/) const override {}\n+_\b6_\b1_\b4 void _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Eigen::Block& /*v*/) const override {}\n+615\n+616 private:\n+_\b6_\b1_\b8 friend class boost::serialization::access;\n+619 template\n+620 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+621 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc);\n+622 }\n+623 };\n+624\n+_\b6_\b4_\b2 class GTSAM_EXPORT _\bR_\bo_\bb_\bu_\bs_\bt : public _\bB_\ba_\bs_\be {\n+643 public:\n+644 typedef boost::shared_ptr shared_ptr;\n+645\n+646 protected:\n+647 typedef _\bm_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be _\bR_\bo_\bb_\bu_\bs_\bt_\bM_\bo_\bd_\be_\bl;\n+648 typedef _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl;\n+649\n+_\b6_\b5_\b0 const RobustModel::shared_ptr _\br_\bo_\bb_\bu_\bs_\bt_\b_;\n+_\b6_\b5_\b1 const NoiseModel::shared_ptr _\bn_\bo_\bi_\bs_\be_\b_;\n+652\n+653 public:\n+654\n+_\b6_\b5_\b6 _\bR_\bo_\bb_\bu_\bs_\bt() {};\n+657\n+_\b6_\b5_\b9 _\bR_\bo_\bb_\bu_\bs_\bt(const RobustModel::shared_ptr robust, const NoiseModel::shared_ptr\n+noise)\n+660 : _\bB_\ba_\bs_\be(noise->dim()), robust_(robust), noise_(noise) {}\n+661\n+_\b6_\b6_\b3 _\b~_\bR_\bo_\bb_\bu_\bs_\bt() override {}\n+664\n+665 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n+666 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be& expected, double tol=1e-9) const override;\n+667\n+_\b6_\b6_\b9 const RobustModel::shared_ptr& _\br_\bo_\bb_\bu_\bs_\bt() const { return robust_; }\n+670\n+_\b6_\b7_\b2 const NoiseModel::shared_ptr& _\bn_\bo_\bi_\bs_\be() const { return noise_; }\n+673\n+674 // Functions below are dummy but necessary for the noiseModel::Base\n+_\b6_\b7_\b5 inline Vector _\bw_\bh_\bi_\bt_\be_\bn(const Vector& v) const override\n+676 { Vector r = v; this->WhitenSystem(r); return r; }\n+_\b6_\b7_\b7 inline Matrix _\bW_\bh_\bi_\bt_\be_\bn(const Matrix& A) const override\n+678 { Vector b; Matrix B=A; this->WhitenSystem(B,b); return B; }\n+_\b6_\b7_\b9 inline Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn(const Vector& /*v*/) const override\n+680 { throw std::invalid_argument(\"unwhiten is not currently supported for\n+robust noise models.\"); }\n+_\b6_\b8_\b2 double _\bl_\bo_\bs_\bs(const double squared_distance) const override {\n+683 return robust_->loss(std::sqrt(squared_distance));\n+684 }\n+685\n+686 // NOTE: This is special because in whiten the base version will do the\n+reweighting\n+687 // which is incorrect!\n+_\b6_\b8_\b8 double _\bs_\bq_\bu_\ba_\br_\be_\bd_\bM_\ba_\bh_\ba_\bl_\ba_\bn_\bo_\bb_\bi_\bs_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be(const Vector& v) const override {\n+689 return noise_->squaredMahalanobisDistance(v);\n+690 }\n+691\n+692 // These are really robust iterated re-weighting support functions\n+693 virtual void WhitenSystem(Vector& b) const;\n+694 void WhitenSystem(std::vector& A, Vector& b) const override;\n+695 void WhitenSystem(Matrix& A, Vector& b) const override;\n+696 void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const override;\n+697 void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const\n+override;\n+698\n+699 Vector unweightedWhiten(const Vector& v) const override;\n+700 double weight(const Vector& v) const override;\n+701\n+702 static shared_ptr Create(\n+703 const RobustModel::shared_ptr &robust, const NoiseModel::shared_ptr noise);\n+704\n+705 private:\n+_\b7_\b0_\b7 friend class boost::serialization::access;\n+708 template\n+709 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+710 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+711 ar & boost::serialization::make_nvp(\"robust_\", const_cast(robust_));\n+712 ar & boost::serialization::make_nvp(\"noise_\", const_cast(noise_));\n+713 }\n+714 };\n+715\n+716 // Helper function\n+717 GTSAM_EXPORT boost::optional checkIfDiagonal(const Matrix& M);\n+718\n+719 } // namespace noiseModel\n+720\n+_\b7_\b2_\b4 typedef noiseModel::Base::shared_ptr _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl;\n+725 typedef noiseModel::Gaussian::shared_ptr SharedGaussian;\n+726 typedef noiseModel::Diagonal::shared_ptr SharedDiagonal;\n+727 typedef noiseModel::Constrained::shared_ptr SharedConstrained;\n+728 typedef noiseModel::Isotropic::shared_ptr SharedIsotropic;\n+729\n+_\b7_\b3_\b1 template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+_\b7_\b3_\b2 template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+_\b7_\b3_\b3 template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+_\b7_\b3_\b4 template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+_\b7_\b3_\b5 template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+736\n+737} //\\ namespace gtsam\n+738\n+739\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n-DenseIndex getDim(DenseIndex block) const\n-Number of dimensions for variable on this diagonal block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const\n-Get block above the diagonal (I, J).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-DenseIndex rows() const\n-Row size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bR_\ba_\bn_\bg_\be\n-constBlock aboveDiagonalRange(DenseIndex i_startBlock, DenseIndex i_endBlock,\n-DenseIndex j_startBlock, DenseIndex j_endBlock) const\n-Get a range [i,j) from the matrix. Indices are in block units.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:170\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n-Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)\n-Return the J'th diagonal block as a self adjoint view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:135\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::const_iterator const_iterator\n-Const iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-An abstract virtual base class for JacobianFactor and HessianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor using the canonical parameters (information form)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-HessianFactor This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn\n-void updateHessian(HessianFactor *other) const\n-Update another Hessian factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:328\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-A shared_ptr to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-GaussianFactor::shared_ptr clone() const override\n-Clone this HessianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bf_\bo\n-const SymmetricBlockMatrix & info() const\n-Return underlying information matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:265\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bT_\be_\br_\bm\n-SymmetricBlockMatrix::Block linearTerm()\n-Return the complete linear term as described above.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:259\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\be_\br_\bm\n-double constantTerm() const\n-Return the constant term as described above.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:230\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bT_\be_\br_\bm\n-SymmetricBlockMatrix::constBlock linearTerm() const\n-Return the complete linear term as described above.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:251\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-~HessianFactor() override\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bm_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n+Pure virtual class for all robust error function classes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be\n+noiseModel::Base is the abstract base class for all noise models.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n+virtual bool isConstrained() const\n+true if a constrained noise model, saves slow/clumsy dynamic casting\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+virtual void whitenInPlace(Vector &v) const\n+in-place whiten, override if can be done more efficiently\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:112\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+Dimensionality.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+virtual void unwhitenInPlace(Eigen::Block< Vector > &v) const\n+in-place unwhiten, override if can be done more efficiently\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+virtual void whitenInPlace(Eigen::Block< Vector > &v) const\n+in-place whiten, override if can be done more efficiently\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:122\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn\n+virtual Vector whiten(const Vector &v) const =0\n+Whiten an error vector.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bm_\ba_\bh_\ba_\bl_\ba_\bn_\bo_\bb_\bi_\bs_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be\n+virtual double mahalanobisDistance(const Vector &v) const\n+Mahalanobis distance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bi_\bs_\bU_\bn_\bi_\bt\n+virtual bool isUnit() const\n+true if a unit noise model, saves slow/clumsy dynamic casting\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt\n+virtual double weight(const Vector &v) const\n+get the weight from the effective loss function on residual vector v\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\bW_\bh_\bi_\bt_\be_\bn\n+virtual Vector unweightedWhiten(const Vector &v) const\n+Useful function for robust noise models to get the unweighted but whitened\n+error.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn\n+virtual Vector unwhiten(const Vector &v) const =0\n+Unwhiten an error vector.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bl_\bo_\bs_\bs\n+virtual double loss(const double squared_distance) const\n+loss function, input is Mahalanobis distance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+virtual void unwhitenInPlace(Vector &v) const\n+in-place unwhiten, override if can be done more efficiently\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bn\n+virtual Matrix Whiten(const Matrix &H) const =0\n+Whiten a matrix.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\be\n+Base(size_t dim=1)\n+primary constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn\n+Gaussian implements the mathematical model |R*x|^2 = |y|^2 with R'*R=inv(Sigma)\n+where y = whiten(x) =...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bR\n+virtual Matrix R() const\n+Return R itself, but note that Whiten(H) is cheaper than R*H.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:255\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn\n+Gaussian(size_t dim=1, const boost::optional< Matrix >\n+&sqrt_information=boost::none)\n+constructor takes square root information matrix\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bs_\bq_\br_\bt_\b__\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_\n+boost::optional< Matrix > sqrt_information_\n+Matrix square root of information matrix (R)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+A diagonal noise model implements a diagonal covariance matrix, with the\n+elements of the diagonal spe...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:281\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bR\n+Matrix R() const override\n+Return R itself, but note that Whiten(H) is cheaper than R*H.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:352\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bi_\bg_\bm_\ba_\bs_\b_\n+Vector sigmas_\n+Standard deviations (sigmas), their inverse and inverse square (weights/\n+precisions) These are all com...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:289\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bi_\bg_\bm_\ba\n+double sigma(size_t i) const\n+Return standard deviations (sqrt of diagonal)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:335\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bi_\bn_\bv_\bs_\bi_\bg_\bm_\ba_\bs\n+const Vector & invsigmas() const\n+Return sqrt precisions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:340\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bi_\bg_\bm_\ba_\bs\n+Vector sigmas() const override\n+Calculate standard deviations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:325\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bp_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bs\n+const Vector & precisions() const\n+Return precisions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:346\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n+A Constrained constrained model is a specialization of Diagonal which allows\n+some or all of the sigma...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:381\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n+bool isConstrained() const override\n+true if a constrained noise mode, saves slow/clumsy dynamic casting\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:409\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bA_\bl_\bl\n+static shared_ptr All(size_t dim, const Vector &mu)\n+Fully constrained variations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:462\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bA_\bl_\bl\n+static shared_ptr All(size_t dim, double mu)\n+Fully constrained variations with a mu parameter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:467\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bA_\bl_\bl\n+static shared_ptr All(size_t dim)\n+Fully constrained variations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:457\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bm_\bu\n+const Vector & mu() const\n+Access mu as a vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:415\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bm_\bu_\b_\n+Vector mu_\n+Penalty function weight - needs to be large enough to dominate soft\n+constraints.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:385\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc\n+An isotropic noise model corresponds to a scaled diagonal covariance To\n+construct,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:516\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bs_\bi_\bg_\bm_\ba\n+double sigma() const\n+Return standard deviation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:565\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn\n+static shared_ptr Precision(size_t dim, double precision, bool smart=true)\n+An isotropic noise model created by specifying a precision.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:549\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc\n+Isotropic(size_t dim, double sigma)\n+protected constructor takes sigma\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:521\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt\n+Unit: i.i.d.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:584\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+void WhitenInPlace(Eigen::Block< Matrix >) const override\n+In-place version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:610\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn\n+Vector unwhiten(const Vector &v) const override\n+Unwhiten an error vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:607\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+void whitenInPlace(Eigen::Block< Vector > &) const override\n+in-place whiten, override if can be done more efficiently\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:613\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bi_\bs_\bU_\bn_\bi_\bt\n+bool isUnit() const override\n+true if a unit noise model, saves slow/clumsy dynamic casting\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:602\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bU_\bn_\bi_\bt\n+Unit(size_t dim=1)\n+constructor for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:590\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn\n+Vector whiten(const Vector &v) const override\n+Whiten an error vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:606\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static shared_ptr Create(size_t dim)\n+Create a unit covariance noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:597\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+void unwhitenInPlace(Vector &) const override\n+in-place unwhiten, override if can be done more efficiently\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:612\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+void unwhitenInPlace(Eigen::Block< Vector > &) const override\n+in-place unwhiten, override if can be done more efficiently\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:614\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+void whitenInPlace(Vector &) const override\n+in-place whiten, override if can be done more efficiently\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:611\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n+void WhitenInPlace(Matrix &) const override\n+In-place version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:609\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bn\n+Matrix Whiten(const Matrix &H) const override\n+Whiten a matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:608\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt\n+Base class for robust error models The robust M-estimators above simply tell us\n+how to re-weight the ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:642\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\br_\bo_\bb_\bu_\bs_\bt\n+const RobustModel::shared_ptr & robust() const\n+Return the contained robust error function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:669\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt\n+Robust()\n+Default Constructor for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:656\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt\n+Robust(const RobustModel::shared_ptr robust, const NoiseModel::shared_ptr\n+noise)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:659\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bs_\bq_\bu_\ba_\br_\be_\bd_\bM_\ba_\bh_\ba_\bl_\ba_\bn_\bo_\bb_\bi_\bs_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be\n+double squaredMahalanobisDistance(const Vector &v) const override\n+Squared Mahalanobis distance v'*R'*R*v = \n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:688\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bn_\bo_\bi_\bs_\be_\b_\n+const NoiseModel::shared_ptr noise_\n+noise model used\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:651\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bl_\bo_\bs_\bs\n+double loss(const double squared_distance) const override\n+Compute loss from the m-estimator using the Mahalanobis distance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:682\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn\n+Vector unwhiten(const Vector &) const override\n+Unwhiten an error vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:679\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bn\n+Matrix Whiten(const Matrix &A) const override\n+Whiten a matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:677\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\br_\bo_\bb_\bu_\bs_\bt_\b_\n+const RobustModel::shared_ptr robust_\n+robust error function used\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:650\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\b~_\bR_\bo_\bb_\bu_\bs_\bt\n+~Robust() override\n Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-HessianFactor(const GaussianFactorGraph &factors)\n-Combine a set of factors into a single dense HessianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:182\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n-DenseIndex getDim(const_iterator variable) const override\n-Return the dimension of the variable pointed to by the given key iterator todo:\n-Remove this in favor ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:213\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bT_\be_\br_\bm\n-SymmetricBlockMatrix::constBlock linearTerm(const_iterator j) const\n-Return the part of linear term as described above corresponding to the\n-requested variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:244\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bf_\bo_\b_\n-SymmetricBlockMatrix info_\n-The full augmented information matrix, s.t. the quadratic error is 0.5*[x -1]'H\n-[x -1].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-GaussianFactor Base\n-Typedef to base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\br_\bo_\bw_\bs\n-size_t rows() const\n-Return the number of columns and rows of the Hessian matrix, including the\n-information vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:218\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\bB_\bl_\bo_\bc_\bk\n-SymmetricBlockMatrix::constBlock constBlock\n-A block from the Hessian matrix (const version)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bf_\bo\n-SymmetricBlockMatrix & info()\n-Return non-const information matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:269\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\bl_\bo_\bc_\bk\n-SymmetricBlockMatrix::Block Block\n-A block from the Hessian matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\be_\br_\bm\n-double & constantTerm()\n-Return the constant term as described above.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:238\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor in the squared-error form.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n-Scatter is an intermediate data structure used when building a HessianFactor\n-incrementally,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-In Gaussian factors, the error function returns either the negative log-\n-likelihood,...\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-is the normalization constant.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:663\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bn_\bo_\bi_\bs_\be\n+const NoiseModel::shared_ptr & noise() const\n+Return the contained noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:672\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn\n+Vector whiten(const Vector &v) const override\n+Whiten an error vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:675\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00830.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00830.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphBuilder.h File Reference\n \n \n \n \n \n \n \n@@ -94,44 +94,57 @@\n \n \n \n \n \n
\n \n-
GaussianBayesTree.cpp File Reference
\n+
SubgraphBuilder.h File Reference
\n
\n
\n \n-

Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. \n-More...

\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Subgraph
 
struct  gtsam::Subgraph::Edge
 
struct  gtsam::SubgraphBuilderParameters
 
class  gtsam::SubgraphBuilder
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n+\n+\n+\n+\n+\n+\n

\n Functions

\n-LogDeterminantData & gtsam::internal::logDeterminant (const GaussianBayesTreeClique::shared_ptr &clique, LogDeterminantData &parentSum)
 
\n+GaussianFactorGraph gtsam::buildFactorSubgraph (const GaussianFactorGraph &gfg, const Subgraph &subgraph, const bool clone)
 Select the factors in a factor graph according to the subgraph.
 
std::pair< GaussianFactorGraph, GaussianFactorGraphgtsam::splitFactorGraph (const GaussianFactorGraph &factorGraph, const Subgraph &subgraph)
 Split the graph into a subgraph and the remaining edges.
 
\n

Detailed Description

\n-

Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.

\n-

GaussianBayesTree

Author
Frank Dellaert
\n-
\n-Richard Roberts
\n+
Date
Dec 31, 2009
\n+
Author
Frank Dellaert, Yong-Dian Jian
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,43 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-GaussianBayesTree.cpp File Reference\n-Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SubgraphBuilder.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bd_\bg_\be\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-LogDeterminantData &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:l\blo\bog\bgD\bDe\bet\bte\ber\brm\bmi\bin\bna\ban\bnt\bt (const\n- GaussianBayesTreeClique::shared_ptr &clique,\n- LogDeterminantData &parentSum)\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:b\bbu\bui\bil\bld\bdF\bFa\bac\bct\bto\bor\brS\bSu\bub\bbg\bgr\bra\bap\bph\bh (const\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg, const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh\n+ &subgraph, const bool clone)\n+\u00a0 Select the factors in a factor graph according\n+ to the subgraph.\n+\u00a0\n+std::pair< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\bl_\bi_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh (const\n+ _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh >\u00a0 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factorGraph, const\n+ _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh &subgraph)\n+\u00a0 Split the graph into a subgraph and the\n+ remaining edges.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n-GaussianBayesTree\n+ Date\n+ Dec 31, 2009\n Author\n- Frank Dellaert\n- Richard Roberts\n+ Frank Dellaert, Yong-Dian Jian\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00833_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00833_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Preconditioner.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/linearAlgorithms-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,212 +98,196 @@\n
No Matches
\n \n \n \n \n \n
\n-
Preconditioner.h
\n+
linearAlgorithms-inst.h
\n
\n
\n-
1/*
\n-
2 * Preconditioner.h
\n-
3 *
\n-
4 * Created on: Jun 2, 2014
\n-
5 * Author: Yong-Dian Jian
\n-
6 * Author: Sungtae An
\n-
7 */
\n-
8
\n-
9#pragma once
\n-
10
\n-
11#include <gtsam/base/Vector.h>
\n-
12#include <boost/shared_ptr.hpp>
\n-
13#include <iosfwd>
\n-
14#include <map>
\n-
15#include <string>
\n-
16
\n-
17namespace gtsam {
\n-
18
\n-
19class GaussianFactorGraph;
\n-
20class KeyInfo;
\n-
21class VectorValues;
\n-
22
\n-
23/* parameters for the preconditioner */
\n-
\n-
24struct GTSAM_EXPORT PreconditionerParameters {
\n-
25
\n-
26 typedef boost::shared_ptr<PreconditionerParameters> shared_ptr;
\n-
27
\n-
28 enum Kernel { /* Preconditioner Kernel */
\n-
29 GTSAM = 0,
\n-
30 CHOLMOD /* experimental */
\n-
31 } kernel_ ;
\n-
32
\n-
33 enum Verbosity {
\n-
34 SILENT = 0,
\n-
35 COMPLEXITY = 1,
\n-
36 ERROR = 2
\n-
37 } verbosity_ ;
\n-
38
\n-
39 PreconditionerParameters(): kernel_(GTSAM), verbosity_(SILENT) {}
\n-
40 PreconditionerParameters(const PreconditionerParameters &p) : kernel_(p.kernel_), verbosity_(p.verbosity_) {}
\n-
41 virtual ~PreconditionerParameters() {}
\n-
42
\n-
43 /* general interface */
\n-
44 inline Kernel kernel() const { return kernel_; }
\n-
45 inline Verbosity verbosity() const { return verbosity_; }
\n-
46
\n-
47 void print() const;
\n-
48
\n-
49 virtual void print(std::ostream &os) const;
\n-
50
\n-
51 static Kernel kernelTranslator(const std::string &s);
\n-
52 static Verbosity verbosityTranslator(const std::string &s);
\n-
53 static std::string kernelTranslator(Kernel k);
\n-
54 static std::string verbosityTranslator(Verbosity v);
\n-
55
\n-
56 /* for serialization */
\n-
57 friend std::ostream& operator<<(std::ostream &os, const PreconditionerParameters &p);
\n-
58 };
\n-
\n-
59
\n-
60/* PCG aims to solve the problem: A x = b by reparametrizing it as
\n-
61 * L^{-1} A L^{-T} y = L^{-1} b or M^{-1} A x = M^{-1} b,
\n-
62 * where A \\approx L L^{T}, or A \\approx M
\n-
63 * The goal of this class is to provide a general interface to all preconditioners */
\n-
\n-
64class GTSAM_EXPORT Preconditioner {
\n-
65public:
\n-
66 typedef boost::shared_ptr<Preconditioner> shared_ptr;
\n-
67 typedef std::vector<size_t> Dimensions;
\n-
68
\n-
69 /* Generic Constructor and Destructor */
\n-\n-
71 virtual ~Preconditioner() {}
\n-
72
\n-
73 /*
\n-
74 * Abstract interface for raw vectors. VectorValues is a speed bottleneck
\n-
75 * and Yong-Dian has profiled preconditioners (outside GTSAM) with the the
\n-
76 * three methods below. In GTSAM, unfortunately, we are still using the
\n-
77 * VectorValues methods called in iterative-inl.h
\n-
78 */
\n-
79
\n-
81 virtual void solve(const Vector& y, Vector &x) const = 0;
\n-
82
\n-
84 virtual void transposeSolve(const Vector& y, Vector& x) const = 0;
\n-
85
\n-
87 virtual void build(
\n-
88 const GaussianFactorGraph &gfg,
\n-
89 const KeyInfo &info,
\n-
90 const std::map<Key,Vector> &lambda
\n-
91 ) = 0;
\n-
92};
\n-
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n+
11
\n+
18#pragma once
\n+
19
\n+\n+\n+\n+
23
\n+
24#include <boost/optional.hpp>
\n+
25#include <boost/shared_ptr.hpp>
\n+
26
\n+
27namespace gtsam
\n+
28{
\n+
29 namespace internal
\n+
30 {
\n+
31 namespace linearAlgorithms
\n+
32 {
\n+
33 /* ************************************************************************* */
\n+
\n+
34 struct OptimizeData {
\n+
35 boost::optional<OptimizeData&> parentData;
\n+\n+
37 //VectorValues ancestorResults;
\n+
38 //VectorValues results;
\n+
39 };
\n+
\n+
40
\n+
41 /* ************************************************************************* */
\n+
48 template<class CLIQUE>
\n+
\n+\n+
50 {
\n+
51 VectorValues collectedResult;
\n+
52
\n+
53 OptimizeData operator()(
\n+
54 const boost::shared_ptr<CLIQUE>& clique,
\n+
55 OptimizeData& parentData)
\n+
56 {
\n+
57 OptimizeData myData;
\n+
58 myData.parentData = parentData;
\n+
59 // Take any ancestor results we'll need
\n+
60 for(Key parent: clique->conditional_->parents())
\n+
61 myData.cliqueResults.emplace(parent, myData.parentData->cliqueResults.at(parent));
\n+
62
\n+
63 // Solve and store in our results
\n+
64 {
\n+
65 GaussianConditional& c = *clique->conditional();
\n+
66 // Solve matrix
\n+
67 Vector xS;
\n+
68 {
\n+
69 // Count dimensions of vector
\n+
70 DenseIndex dim = 0;
\n+\n+
72 parentPointers.reserve(clique->conditional()->nrParents());
\n+
73 for(Key parent: clique->conditional()->parents()) {
\n+
74 parentPointers.push_back(myData.cliqueResults.at(parent));
\n+
75 dim += parentPointers.back()->second.size();
\n+
76 }
\n+
77
\n+
78 // Fill parent vector
\n+
79 xS.resize(dim);
\n+
80 DenseIndex vectorPos = 0;
\n+
81 for(const VectorValues::const_iterator& parentPointer: parentPointers) {
\n+
82 const Vector& parentVector = parentPointer->second;
\n+
83 xS.block(vectorPos,0,parentVector.size(),1) = parentVector.block(0,0,parentVector.size(),1);
\n+
84 vectorPos += parentVector.size();
\n+
85 }
\n+
86 }
\n+
87
\n+
88 // NOTE(gareth): We can no longer write: xS = b - S * xS
\n+
89 // This is because Eigen (as of 3.3) no longer evaluates S * xS into
\n+
90 // a temporary, and the operation trashes valus in xS.
\n+
91 // See: http://eigen.tuxfamily.org/index.php?title=3.3
\n+
92 const Vector rhs = c.getb() - c.S() * xS;
\n
93
\n-
94/*******************************************************************************************/
\n-
\n-\n-\n-
97 typedef boost::shared_ptr<DummyPreconditionerParameters> shared_ptr;
\n-\n-\n-
100};
\n-
\n-
101
\n-
102/*******************************************************************************************/
\n-
\n-
103class GTSAM_EXPORT DummyPreconditioner : public Preconditioner {
\n-
104public:
\n-
105 typedef Preconditioner Base;
\n-
106 typedef boost::shared_ptr<DummyPreconditioner> shared_ptr;
\n-
107
\n-
108public:
\n-
109
\n-\n-
111 ~DummyPreconditioner() override {}
\n-
112
\n-
113 /* Computation Interfaces for raw vector */
\n-
114 void solve(const Vector& y, Vector &x) const override { x = y; }
\n-
115 void transposeSolve(const Vector& y, Vector& x) const override { x = y; }
\n-
\n-
116 void build(
\n-
117 const GaussianFactorGraph &gfg,
\n-
118 const KeyInfo &info,
\n-
119 const std::map<Key,Vector> &lambda
\n-
120 ) override {}
\n-
\n-
121};
\n-
\n-
122
\n-
123/*******************************************************************************************/
\n-\n-
129
\n-
130/*******************************************************************************************/
\n-
\n-
131class GTSAM_EXPORT BlockJacobiPreconditioner : public Preconditioner {
\n-
132public:
\n-
133 typedef Preconditioner Base;
\n-\n-
135 ~BlockJacobiPreconditioner() override ;
\n-
136
\n-
137 /* Computation Interfaces for raw vector */
\n-
138 void solve(const Vector& y, Vector &x) const override;
\n-
139 void transposeSolve(const Vector& y, Vector& x) const override;
\n-
140 void build(
\n-
141 const GaussianFactorGraph &gfg,
\n-
142 const KeyInfo &info,
\n-
143 const std::map<Key,Vector> &lambda
\n-
144 ) override;
\n-
145
\n-
146protected:
\n-
147
\n-
148 void clean() ;
\n-
149
\n-
150 std::vector<size_t> dims_;
\n-
151 double *buffer_;
\n-
152 size_t bufferSize_;
\n-
153 size_t nnz_;
\n-
154};
\n-
\n-
155
\n-
156/*********************************************************************************************/
\n-
157/* factory method to create preconditioners */
\n-
158boost::shared_ptr<Preconditioner> createPreconditioner(const boost::shared_ptr<PreconditionerParameters> parameters);
\n-
159
\n-
160}
\n-
161
\n-
162
\n-
typedef and functions to augment Eigen's VectorXd
\n+
94 // TODO(gareth): Inline instantiation of Eigen::Solve and check flag
\n+
95 const Vector solution = c.R().triangularView<Eigen::Upper>().solve(rhs);
\n+
96
\n+
97 // Check for indeterminant solution
\n+
98 if(solution.hasNaN()) throw IndeterminantLinearSystemException(c.keys().front());
\n+
99
\n+
100 // Insert solution into a VectorValues
\n+
101 DenseIndex vectorPosition = 0;
\n+
102 for(GaussianConditional::const_iterator frontal = c.beginFrontals(); frontal != c.endFrontals(); ++frontal) {
\n+
103 auto result = collectedResult.emplace(*frontal, solution.segment(vectorPosition, c.getDim(frontal)));
\n+
104 if(!result.second)
\n+
105 throw std::runtime_error(
\n+
106 "Internal error while optimizing clique. Trying to insert key '" + DefaultKeyFormatter(*frontal)
\n+
107 + "' that exists.");
\n+
108
\n+
109 VectorValues::const_iterator r = result.first;
\n+
110 myData.cliqueResults.emplace(r->first, r);
\n+
111 vectorPosition += c.getDim(frontal);
\n+
112 }
\n+
113 }
\n+
114 return myData;
\n+
115 }
\n+
116 };
\n+
\n+
117
\n+
118 /* ************************************************************************* */
\n+
119 //OptimizeData OptimizePreVisitor(const GaussianBayesTreeClique::shared_ptr& clique, OptimizeData& parentData)
\n+
120 //{
\n+
121 // // Create data - holds a pointer to our parent, a copy of parent solution, and our results
\n+
122 // OptimizeData myData;
\n+
123 // myData.parentData = parentData;
\n+
124 // // Take any ancestor results we'll need
\n+
125 // for(Key parent: clique->conditional_->parents())
\n+
126 // myData.ancestorResults.insert(parent, myData.parentData->ancestorResults[parent]);
\n+
127 // // Solve and store in our results
\n+
128 // myData.results.insert(clique->conditional()->solve(myData.ancestorResults));
\n+
129 // myData.ancestorResults.insert(myData.results);
\n+
130 // return myData;
\n+
131 //}
\n+
132
\n+
133 /* ************************************************************************* */
\n+
134 //void OptimizePostVisitor(const GaussianBayesTreeClique::shared_ptr& clique, OptimizeData& myData)
\n+
135 //{
\n+
136 // // Conglomerate our results to the parent
\n+
137 // myData.parentData->results.insert(myData.results);
\n+
138 //}
\n+
139
\n+
140 /* ************************************************************************* */
\n+
141 template<class BAYESTREE>
\n+
142 VectorValues optimizeBayesTree(const BAYESTREE& bayesTree)
\n+
143 {
\n+
144 gttic(linear_optimizeBayesTree);
\n+
145 //internal::OptimizeData rootData; // Will hold final solution
\n+
146 //treeTraversal::DepthFirstForest(*this, rootData, internal::OptimizePreVisitor, internal::OptimizePostVisitor);
\n+
147 //return rootData.results;
\n+
148 OptimizeData rootData;
\n+\n+
150 treeTraversal::no_op postVisitor;
\n+
151 TbbOpenMPMixedScope threadLimiter; // Limits OpenMP threads since we're mixing TBB and OpenMP
\n+
152 treeTraversal::DepthFirstForestParallel(bayesTree, rootData, preVisitor, postVisitor);
\n+
153 return preVisitor.collectedResult;
\n+
154 }
\n+
155 }
\n+
156 }
\n+
157}
\n+\n+
Conditional Gaussian Base class.
\n+
Factor Graph Values.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
Handy data structure for iterative solvers.
Definition IterativeSolver.h:126
\n-
Definition Preconditioner.h:24
\n-
Definition Preconditioner.h:64
\n-
virtual void solve(const Vector &y, Vector &x) const =0
implement x = L^{-1} y
\n-
virtual void build(const GaussianFactorGraph &gfg, const KeyInfo &info, const std::map< Key, Vector > &lambda)=0
build/factorize the preconditioner
\n-
virtual void transposeSolve(const Vector &y, Vector &x) const =0
implement x = L^{-T} y
\n-
Definition Preconditioner.h:95
\n-
Definition Preconditioner.h:103
\n-
void build(const GaussianFactorGraph &gfg, const KeyInfo &info, const std::map< Key, Vector > &lambda) override
build/factorize the preconditioner
Definition Preconditioner.h:116
\n-
void solve(const Vector &y, Vector &x) const override
implement x = L^{-1} y
Definition Preconditioner.h:114
\n-
void transposeSolve(const Vector &y, Vector &x) const override
implement x = L^{-T} y
Definition Preconditioner.h:115
\n-
Definition Preconditioner.h:124
\n-
Definition Preconditioner.h:131
\n-
The Factor::error simply extracts the.
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:154
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+
An object whose scope defines a block where TBB and OpenMP parallelism are mixed.
Definition types.h:192
\n+
FACTOR::const_iterator endFrontals() const
Iterator pointing past the last frontal key.
Definition Conditional.h:163
\n+
FACTOR::const_iterator beginFrontals() const
Iterator pointing to first frontal key.
Definition Conditional.h:160
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n+
Key back() const
Last key.
Definition Factor.h:134
\n+
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n+
constABlock R() const
Return a view of the upper-triangular R block of the conditional.
Definition GaussianConditional.h:218
\n+
constABlock S() const
Get a view of the parent blocks.
Definition GaussianConditional.h:221
\n+
const constBVector getb() const
Get a view of the r.h.s.
Definition JacobianFactor.h:297
\n+
DenseIndex getDim(const_iterator variable) const override
Return the dimension of the variable pointed to by the given key iterator todo: Remove this in favor ...
Definition JacobianFactor.h:276
\n+
Definition linearAlgorithms-inst.h:34
\n+
Pre-order visitor for back-substitution in a Bayes tree.
Definition linearAlgorithms-inst.h:50
\n+
Thrown when a linear system is ill-posed.
Definition linearExceptions.h:94
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
Values::const_iterator const_iterator
Const iterator over vector values.
Definition VectorValues.h:82
\n+
std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)
Emplace a vector value with key j.
Definition VectorValues.h:185
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,232 +1,271 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Preconditioner.h\n-1/*\n-2 * Preconditioner.h\n-3 *\n-4 * Created on: Jun 2, 2014\n-5 * Author: Yong-Dian Jian\n-6 * Author: Sungtae An\n-7 */\n-8\n-9#pragma once\n-10\n-11#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-12#include \n-13#include \n-14#include \n-15#include \n-16\n-17namespace _\bg_\bt_\bs_\ba_\bm {\n-18\n-19class GaussianFactorGraph;\n-20class KeyInfo;\n-21class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n-22\n-23/* parameters for the preconditioner */\n-_\b2_\b4struct GTSAM_EXPORT _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n-25\n-26 typedef boost::shared_ptr shared_ptr;\n-27\n-28 enum Kernel { /* Preconditioner Kernel */\n-29 GTSAM = 0,\n-30 CHOLMOD /* experimental */\n-31 } kernel_ ;\n-32\n-33 enum Verbosity {\n-34 SILENT = 0,\n-35 COMPLEXITY = 1,\n-36 ERROR = 2\n-37 } verbosity_ ;\n-38\n-39 _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs(): kernel_(GTSAM), verbosity_(SILENT) {}\n-40 _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs(const _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p) : kernel_\n-(p.kernel_), verbosity_(p.verbosity_) {}\n-41 virtual _\b~_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs() {}\n-42\n-43 /* general interface */\n-44 inline Kernel kernel() const { return kernel_; }\n-45 inline Verbosity verbosity() const { return verbosity_; }\n-46\n-47 void _\bp_\br_\bi_\bn_\bt() const;\n-48\n-49 virtual void _\bp_\br_\bi_\bn_\bt(std::ostream &os) const;\n-50\n-51 static Kernel kernelTranslator(const std::string &s);\n-52 static Verbosity verbosityTranslator(const std::string &s);\n-53 static std::string kernelTranslator(Kernel k);\n-54 static std::string verbosityTranslator(Verbosity v);\n-55\n-56 /* for serialization */\n-57 friend std::ostream& operator<<(std::ostream &os, const\n-_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p);\n-58 };\n-59\n-60/* PCG aims to solve the problem: A x = b by reparametrizing it as\n-61 * L^{-1} A L^{-T} y = L^{-1} b or M^{-1} A x = M^{-1} b,\n-62 * where A \\approx L L^{T}, or A \\approx M\n-63 * The goal of this class is to provide a general interface to all\n-preconditioners */\n-_\b6_\b4class GTSAM_EXPORT _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br {\n-65public:\n-66 typedef boost::shared_ptr shared_ptr;\n-67 typedef std::vector Dimensions;\n-68\n-69 /* Generic Constructor and Destructor */\n-70 _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br() {}\n-71 virtual _\b~_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br() {}\n-72\n-73 /*\n-74 * Abstract interface for raw vectors. VectorValues is a speed bottleneck\n-75 * and Yong-Dian has profiled preconditioners (outside GTSAM) with the the\n-76 * three methods below. In GTSAM, unfortunately, we are still using the\n-77 * VectorValues methods called in iterative-inl.h\n-78 */\n-79\n-_\b8_\b1 virtual void _\bs_\bo_\bl_\bv_\be(const Vector& y, Vector &x) const = 0;\n-82\n-_\b8_\b4 virtual void _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bS_\bo_\bl_\bv_\be(const Vector& y, Vector& x) const = 0;\n-85\n-_\b8_\b7 virtual void _\bb_\bu_\bi_\bl_\bd(\n-88 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-89 const _\bK_\be_\by_\bI_\bn_\bf_\bo &info,\n-90 const std::map &lambda\n-91 ) = 0;\n-92};\n+linearAlgorithms-inst.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+7\n+8 * See LICENSE for the license information\n+9\n+10 * -------------------------------------------------------------------------\n+- */\n+11\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n+23\n+24#include \n+25#include \n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm\n+28{\n+29 namespace internal\n+30 {\n+31 namespace linearAlgorithms\n+32 {\n+33 /* *************************************************************************\n+*/\n+_\b3_\b4 struct _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba {\n+35 boost::optional parentData;\n+36 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b> cliqueResults;\n+37 //VectorValues ancestorResults;\n+38 //VectorValues results;\n+39 };\n+40\n+41 /* *************************************************************************\n+*/\n+48 template\n+_\b4_\b9 struct _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bC_\bl_\bi_\bq_\bu_\be\n+50 {\n+51 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs collectedResult;\n+52\n+53 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba operator()(\n+54 const boost::shared_ptr& clique,\n+55 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba& parentData)\n+56 {\n+57 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba myData;\n+58 myData.parentData = parentData;\n+59 // Take any ancestor results we'll need\n+60 for(_\bK_\be_\by parent: clique->conditional_->parents())\n+61 myData.cliqueResults.emplace(parent, myData.parentData->cliqueResults.at\n+(parent));\n+62\n+63 // Solve and store in our results\n+64 {\n+65 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl& c = *clique->conditional();\n+66 // Solve matrix\n+67 Vector xS;\n+68 {\n+69 // Count dimensions of vector\n+70 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx dim = 0;\n+71 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b> parentPointers;\n+72 parentPointers.reserve(clique->conditional()->nrParents());\n+73 for(_\bK_\be_\by parent: clique->conditional()->parents()) {\n+74 parentPointers.push_back(myData.cliqueResults.at(parent));\n+75 dim += parentPointers._\bb_\ba_\bc_\bk()->second.size();\n+76 }\n+77\n+78 // Fill parent vector\n+79 xS.resize(dim);\n+80 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx vectorPos = 0;\n+81 for(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br& parentPointer: parentPointers) {\n+82 const Vector& parentVector = parentPointer->second;\n+83 xS.block(vectorPos,0,parentVector.size(),1) = parentVector.block\n+(0,0,parentVector.size(),1);\n+84 vectorPos += parentVector.size();\n+85 }\n+86 }\n+87\n+88 // NOTE(gareth): We can no longer write: xS = b - S * xS\n+89 // This is because Eigen (as of 3.3) no longer evaluates S * xS into\n+90 // a temporary, and the operation trashes valus in xS.\n+91 // See: http://eigen.tuxfamily.org/index.php?title=3.3\n+92 const Vector rhs = c._\bg_\be_\bt_\bb() - c._\bS() * xS;\n 93\n-94/\n-*******************************************************************************************/\n-_\b9_\b5struct GTSAM_EXPORT _\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs : public\n-_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n-96 typedef _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs _\bB_\ba_\bs_\be;\n-97 typedef boost::shared_ptr shared_ptr;\n-98 _\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs() : _\bB_\ba_\bs_\be() {}\n-99 _\b~_\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs() override {}\n-100};\n-101\n-102/\n-*******************************************************************************************/\n-_\b1_\b0_\b3class GTSAM_EXPORT _\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br : public _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br {\n-104public:\n-105 typedef _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br _\bB_\ba_\bs_\be;\n-106 typedef boost::shared_ptr shared_ptr;\n-107\n-108public:\n-109\n-110 _\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br() : _\bB_\ba_\bs_\be() {}\n-111 _\b~_\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br() override {}\n-112\n-113 /* Computation Interfaces for raw vector */\n-_\b1_\b1_\b4 void _\bs_\bo_\bl_\bv_\be(const Vector& y, Vector &x) const override { x = y; }\n-_\b1_\b1_\b5 void _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bS_\bo_\bl_\bv_\be(const Vector& y, Vector& x) const override { x = y; }\n-_\b1_\b1_\b6 void _\bb_\bu_\bi_\bl_\bd(\n-117 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-118 const _\bK_\be_\by_\bI_\bn_\bf_\bo &info,\n-119 const std::map &lambda\n-120 ) override {}\n-121};\n-122\n-123/\n-*******************************************************************************************/\n-_\b1_\b2_\b4struct GTSAM_EXPORT _\bB_\bl_\bo_\bc_\bk_\bJ_\ba_\bc_\bo_\bb_\bi_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs : public\n-_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n-125 typedef _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs _\bB_\ba_\bs_\be;\n-126 _\bB_\bl_\bo_\bc_\bk_\bJ_\ba_\bc_\bo_\bb_\bi_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs() : _\bB_\ba_\bs_\be() {}\n-127 _\b~_\bB_\bl_\bo_\bc_\bk_\bJ_\ba_\bc_\bo_\bb_\bi_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs() override {}\n-128};\n-129\n-130/\n-*******************************************************************************************/\n-_\b1_\b3_\b1class GTSAM_EXPORT _\bB_\bl_\bo_\bc_\bk_\bJ_\ba_\bc_\bo_\bb_\bi_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br : public _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br {\n-132public:\n-133 typedef _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br _\bB_\ba_\bs_\be;\n-134 _\bB_\bl_\bo_\bc_\bk_\bJ_\ba_\bc_\bo_\bb_\bi_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br() ;\n-135 _\b~_\bB_\bl_\bo_\bc_\bk_\bJ_\ba_\bc_\bo_\bb_\bi_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br() override ;\n-136\n-137 /* Computation Interfaces for raw vector */\n-138 void solve(const Vector& y, Vector &x) const override;\n-139 void transposeSolve(const Vector& y, Vector& x) const override;\n-140 void build(\n-141 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-142 const _\bK_\be_\by_\bI_\bn_\bf_\bo &info,\n-143 const std::map &lambda\n-144 ) override;\n-145\n-146protected:\n-147\n-148 void clean() ;\n-149\n-150 std::vector dims_;\n-151 double *buffer_;\n-152 size_t bufferSize_;\n-153 size_t nnz_;\n-154};\n-155\n-156/\n-*********************************************************************************************/\n-157/* factory method to create preconditioners */\n-158boost::shared_ptr createPreconditioner(const boost::\n-shared_ptr parameters);\n-159\n-160}\n-161\n-162\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n+94 // TODO(gareth): Inline instantiation of Eigen::Solve and check flag\n+95 const Vector solution = c._\bR().triangularView().solve(rhs);\n+96\n+97 // Check for indeterminant solution\n+98 if(solution.hasNaN()) throw _\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(c._\bk_\be_\by_\bs\n+().front());\n+99\n+100 // Insert solution into a VectorValues\n+101 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx vectorPosition = 0;\n+102 for(_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br frontal = c._\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs();\n+frontal != c._\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs(); ++frontal) {\n+103 auto result = collectedResult._\be_\bm_\bp_\bl_\ba_\bc_\be(*frontal, solution.segment\n+(vectorPosition, c._\bg_\be_\bt_\bD_\bi_\bm(frontal)));\n+104 if(!result.second)\n+105 throw std::runtime_error(\n+106 \"Internal error while optimizing clique. Trying to insert key '\" +\n+DefaultKeyFormatter(*frontal)\n+107 + \"' that exists.\");\n+108\n+109 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br r = result.first;\n+110 myData.cliqueResults.emplace(r->first, r);\n+111 vectorPosition += c._\bg_\be_\bt_\bD_\bi_\bm(frontal);\n+112 }\n+113 }\n+114 return myData;\n+115 }\n+116 };\n+117\n+118 /\n+* ************************************************************************* */\n+119 //OptimizeData OptimizePreVisitor(const GaussianBayesTreeClique::\n+shared_ptr& clique, OptimizeData& parentData)\n+120 //{\n+121 // // Create data - holds a pointer to our parent, a copy of parent\n+solution, and our results\n+122 // OptimizeData myData;\n+123 // myData.parentData = parentData;\n+124 // // Take any ancestor results we'll need\n+125 // for(Key parent: clique->conditional_->parents())\n+126 // myData.ancestorResults.insert(parent, myData.parentData->ancestorResults\n+[parent]);\n+127 // // Solve and store in our results\n+128 // myData.results.insert(clique->conditional()->solve\n+(myData.ancestorResults));\n+129 // myData.ancestorResults.insert(myData.results);\n+130 // return myData;\n+131 //}\n+132\n+133 /\n+* ************************************************************************* */\n+134 //void OptimizePostVisitor(const GaussianBayesTreeClique::shared_ptr&\n+clique, OptimizeData& myData)\n+135 //{\n+136 // // Conglomerate our results to the parent\n+137 // myData.parentData->results.insert(myData.results);\n+138 //}\n+139\n+140 /\n+* ************************************************************************* */\n+141 template\n+142 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimizeBayesTree(const BAYESTREE& bayesTree)\n+143 {\n+144 gttic(linear_optimizeBayesTree);\n+145 //internal::OptimizeData rootData; // Will hold final solution\n+146 //treeTraversal::DepthFirstForest(*this, rootData, internal::\n+OptimizePreVisitor, internal::OptimizePostVisitor);\n+147 //return rootData.results;\n+148 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba rootData;\n+149 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bC_\bl_\bi_\bq_\bu_\be_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be_\b> preVisitor;\n+150 treeTraversal::no_op postVisitor;\n+151 _\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be threadLimiter; // Limits OpenMP threads since we're\n+mixing TBB and OpenMP\n+152 _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl(bayesTree, rootData, preVisitor,\n+postVisitor);\n+153 return preVisitor.collectedResult;\n+154 }\n+155 }\n+156 }\n+157}\n+_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+Conditional Gaussian Base class.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo\n-Handy data structure for iterative solvers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:24\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bs_\bo_\bl_\bv_\be\n-virtual void solve(const Vector &y, Vector &x) const =0\n-implement x = L^{-1} y\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bb_\bu_\bi_\bl_\bd\n-virtual void build(const GaussianFactorGraph &gfg, const KeyInfo &info, const\n-std::map< Key, Vector > &lambda)=0\n-build/factorize the preconditioner\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bS_\bo_\bl_\bv_\be\n-virtual void transposeSolve(const Vector &y, Vector &x) const =0\n-implement x = L^{-T} y\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bb_\bu_\bi_\bl_\bd\n-void build(const GaussianFactorGraph &gfg, const KeyInfo &info, const std::map<\n-Key, Vector > &lambda) override\n-build/factorize the preconditioner\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:116\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bs_\bo_\bl_\bv_\be\n-void solve(const Vector &y, Vector &x) const override\n-implement x = L^{-1} y\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bu_\bm_\bm_\by_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bS_\bo_\bl_\bv_\be\n-void transposeSolve(const Vector &y, Vector &x) const override\n-implement x = L^{-T} y\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\bJ_\ba_\bc_\bo_\bb_\bi_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:124\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bl_\bo_\bc_\bk_\bJ_\ba_\bc_\bo_\bb_\bi_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:131\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl\n+void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE\n+&visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)\n+Traverse a forest depth-first with pre-order and post-order visits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be\n+An object whose scope defines a block where TBB and OpenMP parallelism are\n+mixed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+FACTOR::const_iterator endFrontals() const\n+Iterator pointing past the last frontal key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n+FACTOR::const_iterator beginFrontals() const\n+Iterator pointing to first frontal key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+KeyVector::const_iterator const_iterator\n+Const iterator over keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\ba_\bc_\bk\n+Key back() const\n+Last key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+A GaussianConditional functions as the node in a Bayes network.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bR\n+constABlock R() const\n+Return a view of the upper-triangular R block of the conditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:218\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS\n+constABlock S() const\n+Get a view of the parent blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:221\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bb\n+const constBVector getb() const\n+Get a view of the r.h.s.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:297\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n+DenseIndex getDim(const_iterator variable) const override\n+Return the dimension of the variable pointed to by the given key iterator todo:\n+Remove this in favor ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:276\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearAlgorithms-inst.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bC_\bl_\bi_\bq_\bu_\be\n+Pre-order visitor for back-substitution in a Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearAlgorithms-inst.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt_\bL_\bi_\bn_\be_\ba_\br_\bS_\by_\bs_\bt_\be_\bm_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+Thrown when a linear system is ill-posed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+Values::const_iterator const_iterator\n+Const iterator over vector values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bm_\bp_\bl_\ba_\bc_\be\n+std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)\n+Emplace a vector value with key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:185\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * P\bPr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\ber\br.\b.h\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00836.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00836.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianDensity.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphPreconditioner.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,32 @@\n \n \n \n \n \n
\n \n-
GaussianDensity.h File Reference
\n+
SubgraphPreconditioner.cpp File Reference
\n
\n
\n-\n-

A Gaussian Density. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::GaussianDensity
 A GaussianDensity is a GaussianConditional without parents. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A Gaussian Density.

\n-
Author
Frank Dellaert
\n-
Date
Jan 21, 2012
\n+
Date
Dec 31, 2009
\n+
Author
Frank Dellaert, Yong-Dian Jian
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianDensity.h File Reference\n-A Gaussian Density. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by\n-\u00a0 A _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by is a _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl without parents. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SubgraphPreconditioner.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A Gaussian Density.\n- Author\n- Frank Dellaert\n Date\n- Jan 21, 2012\n+ Dec 31, 2009\n+ Author\n+ Frank Dellaert, Yong-Dian Jian\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bh\n+ * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00839.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00839.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianConditional-inl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/KalmanFilter.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,36 +95,38 @@\n \n \n \n \n
\n \n-
GaussianConditional-inl.h File Reference
\n+
KalmanFilter.cpp File Reference
\n
\n
\n \n-

Conditional Gaussian Base class. \n+

Simple linear Kalman filter. \n More...

\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Conditional Gaussian Base class.

\n-
Author
Christian Potthast
\n+

Simple linear Kalman filter.

\n+

Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.

\n+
Date
Sep 3, 2011
\n+
Author
Stephen Williams
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,24 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianConditional-inl.h File Reference\n-Conditional Gaussian Base class. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+KalmanFilter.cpp File Reference\n+Simple linear Kalman filter. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Conditional Gaussian Base class.\n+Simple linear Kalman filter.\n+Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.\n+ Date\n+ Sep 3, 2011\n Author\n- Christian Potthast\n+ Stephen Williams\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00842_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00842_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphPreconditioner.h Source File\n \n \n \n \n \n \n \n@@ -98,157 +98,158 @@\n
No Matches
\n \n \n \n \n \n
\n-
PCGSolver.h
\n+
SubgraphPreconditioner.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file PCGSolver.h
\n-
14 * @brief Preconditioned Conjugate Gradient Solver for linear systems
\n-
15 * @date Jan 31, 2012
\n-
16 * @author Yong-Dian Jian
\n-
17 * @author Sungtae An
\n-
18 */
\n+
18#pragma once
\n
19
\n-
20#pragma once
\n-
21
\n-\n-
23#include <string>
\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
27class GaussianFactorGraph;
\n-
28class KeyInfo;
\n-
29class Preconditioner;
\n-
30class VectorValues;
\n-
31struct PreconditionerParameters;
\n+\n+
21#include <gtsam/linear/Errors.h>
\n+\n+\n+\n+
25#include <gtsam/linear/Preconditioner.h>
\n+\n+
27#include <gtsam/dllexport.h>
\n+
28
\n+
29#include <boost/shared_ptr.hpp>
\n+
30
\n+
31#include <map>
\n
32
\n-
\n-\n-
37public:
\n-\n-
39 typedef boost::shared_ptr<PCGSolverParameters> shared_ptr;
\n-
40
\n-\n-
42 }
\n-
43
\n-
44 void print(std::ostream &os) const override;
\n-
45
\n-
46 /* interface to preconditioner parameters */
\n-
47 inline const PreconditionerParameters& preconditioner() const {
\n-
48 return *preconditioner_;
\n-
49 }
\n-
50
\n-
51 // needed for python wrapper
\n-
52 void print(const std::string &s) const;
\n-
53
\n-
54 boost::shared_ptr<PreconditionerParameters> preconditioner_;
\n+
33namespace gtsam {
\n+
34
\n+
35 // Forward declarations
\n+
36 class GaussianBayesNet;
\n+
37 class GaussianFactorGraph;
\n+
38 class VectorValues;
\n+
39
\n+
\n+\n+
41 typedef boost::shared_ptr<SubgraphPreconditionerParameters> shared_ptr;
\n+\n+
43 : builderParams(p) {}
\n+
44 SubgraphBuilderParameters builderParams;
\n+
45 };
\n+
\n+
46
\n+
\n+
54 class GTSAM_EXPORT SubgraphPreconditioner : public Preconditioner {
\n
55
\n-
56 void setPreconditionerParams(const boost::shared_ptr<PreconditionerParameters> preconditioner);
\n-
57};
\n-
\n+
56 public:
\n+
57 typedef boost::shared_ptr<SubgraphPreconditioner> shared_ptr;
\n
58
\n-
\n-
62class GTSAM_EXPORT PCGSolver: public IterativeSolver {
\n-
63public:
\n-
64 typedef IterativeSolver Base;
\n-
65 typedef boost::shared_ptr<PCGSolver> shared_ptr;
\n-
66
\n-
67protected:
\n-
68
\n-
69 PCGSolverParameters parameters_;
\n-
70 boost::shared_ptr<Preconditioner> preconditioner_;
\n+
59 private:
\n+\n+\n+
62 VectorValues xbar_;
\n+
63 Errors b2bar_;
\n+
64
\n+
65 KeyInfo keyInfo_;
\n+\n+
67
\n+
68 public:
\n+
69
\n+\n
71
\n-
72public:
\n-
73 /* Interface to initialize a solver without a problem */
\n-\n-
75 ~PCGSolver() override {
\n-
76 }
\n-
77
\n-
78 using IterativeSolver::optimize;
\n-
79
\n-\n-
81 const KeyInfo &keyInfo, const std::map<Key, Vector> &lambda,
\n-
82 const VectorValues &initial) override;
\n-
83
\n-
84};
\n-
\n+\n+\n+
80
\n+
81 ~SubgraphPreconditioner() override {}
\n+
82
\n+
84 void print(const std::string& s = "SubgraphPreconditioner") const;
\n
85
\n-
\n-
89class GTSAM_EXPORT GaussianFactorGraphSystem {
\n-
90public:
\n+
87 const GaussianFactorGraph& Ab2() const { return Ab2_; }
\n+
88
\n+
90 const GaussianBayesNet& Rc1() const { return Rc1_; }
\n
91
\n-\n-
93 const Preconditioner &preconditioner, const KeyInfo &info,
\n-
94 const std::map<Key, Vector> &lambda);
\n-
95
\n-
96 const GaussianFactorGraph &gfg_;
\n-
97 const Preconditioner &preconditioner_;
\n-
98 const KeyInfo &keyInfo_;
\n-
99 const std::map<Key, Vector> &lambda_;
\n-
100
\n-
101 void residual(const Vector &x, Vector &r) const;
\n-
102 void multiply(const Vector &x, Vector& y) const;
\n-
103 void leftPrecondition(const Vector &x, Vector &y) const;
\n-
104 void rightPrecondition(const Vector &x, Vector &y) const;
\n-
105 void scal(const double alpha, Vector &x) const;
\n-
106 double dot(const Vector &x, const Vector &y) const;
\n-
107 void axpy(const double alpha, const Vector &x, Vector &y) const;
\n-
108
\n-
109 void getb(Vector &b) const;
\n-
110};
\n-
\n-
111
\n-
114
\n-
116VectorValues buildVectorValues(const Vector &v, const Ordering &ordering,
\n-
117 const std::map<Key, size_t> & dimensions);
\n+
93 const Errors b2bar() const { return b2bar_; }
\n+
94
\n+
100 /* x = xbar + inv(R1)*y */
\n+
101 VectorValues x(const VectorValues& y) const;
\n+
102
\n+
103 /* A zero VectorValues with the structure of xbar */
\n+
104 VectorValues zero() const {
\n+
105 return VectorValues::Zero(xbar_);
\n+
106 }
\n+
107
\n+
113 void transposeMultiplyAdd2(double alpha, Errors::const_iterator begin,
\n+
114 Errors::const_iterator end, VectorValues& y) const;
\n+
115
\n+
116 /* error, given y */
\n+
117 double error(const VectorValues& y) const;
\n
118
\n-
120VectorValues buildVectorValues(const Vector &v, const KeyInfo &keyInfo);
\n+
120 VectorValues gradient(const VectorValues& y) const;
\n
121
\n-
123
\n-
124}
\n-
125
\n-
Implementation of Conjugate Gradient solver for a linear system.
\n+
123 Errors operator*(const VectorValues& y) const;
\n+
124
\n+
126 void multiplyInPlace(const VectorValues& y, Errors& e) const;
\n+
127
\n+
129 VectorValues operator^(const Errors& e) const;
\n+
130
\n+
135 void transposeMultiplyAdd(double alpha, const Errors& e, VectorValues& y) const;
\n+
136
\n+
137 /*****************************************************************************/
\n+
138 /* implement virtual functions of Preconditioner */
\n+
139
\n+
141 void solve(const Vector& y, Vector &x) const override;
\n+
142
\n+
144 void transposeSolve(const Vector& y, Vector& x) const override;
\n+
145
\n+
147 void build(
\n+
148 const GaussianFactorGraph &gfg,
\n+
149 const KeyInfo &info,
\n+
150 const std::map<Key,Vector> &lambda
\n+
151 ) override;
\n+
152 /*****************************************************************************/
\n+
153 };
\n+
\n+
154
\n+
155} // namespace gtsam
\n+
Chordal Bayes Net, the result of eliminating a factor graph.
\n+
Linear Factor Graph where all factors are Gaussians.
\n+\n+
Some support classes for iterative solvers.
\n+
Factor Graph Values.
\n+
vector of errors
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
VectorValues buildVectorValues(const Vector &v, const Ordering &ordering, const map< Key, size_t > &dimensions)
Create VectorValues from a Vector.
Definition PCGSolver.cpp:151
\n-
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
void axpy(double alpha, const Errors &x, Errors &y)
BLAS level 2 style AXPY, y := alpha*x + y
Definition Errors.cpp:111
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
Definition Ordering.h:34
\n-
parameters for the conjugate gradient method
Definition ConjugateGradientSolver.h:29
\n+\n+
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
\n
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
Base class for Iterative Solvers like SubgraphSolver.
Definition IterativeSolver.h:86
\n
Handy data structure for iterative solvers.
Definition IterativeSolver.h:126
\n-
Parameters for PCG.
Definition PCGSolver.h:36
\n-
A virtual base class for the preconditioned conjugate gradient solver.
Definition PCGSolver.h:62
\n-
System class needed for calling preconditionedConjugateGradient.
Definition PCGSolver.h:89
\n
Definition Preconditioner.h:24
\n
Definition Preconditioner.h:64
\n+
Definition SubgraphBuilder.h:96
\n+
Definition SubgraphPreconditioner.h:40
\n+
Subgraph conditioner class, as explained in the RSS 2010 submission.
Definition SubgraphPreconditioner.h:54
\n+
const GaussianFactorGraph & Ab2() const
Access Ab2.
Definition SubgraphPreconditioner.h:87
\n+
const Errors b2bar() const
Access b2bar.
Definition SubgraphPreconditioner.h:93
\n+
const GaussianBayesNet & Rc1() const
Access Rc1.
Definition SubgraphPreconditioner.h:90
\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n
The Factor::error simply extracts the.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,184 +1,189 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PCGSolver.h\n+SubgraphPreconditioner.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file PCGSolver.h\n-14 * @brief Preconditioned Conjugate Gradient Solver for linear systems\n-15 * @date Jan 31, 2012\n-16 * @author Yong-Dian Jian\n-17 * @author Sungtae An\n-18 */\n+18#pragma once\n 19\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n-23#include \n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-27class GaussianFactorGraph;\n-28class KeyInfo;\n-29class Preconditioner;\n-30class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n-31struct PreconditionerParameters;\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\br_\br_\bo_\br_\bs_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n+25#include \n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+27#include \n+28\n+29#include \n+30\n+31#include \n 32\n-_\b3_\b6struct GTSAM_EXPORT _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs: public _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n-37public:\n-38 typedef _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs _\bB_\ba_\bs_\be;\n-39 typedef boost::shared_ptr shared_ptr;\n-40\n-41 _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs() {\n-42 }\n-43\n-44 void _\bp_\br_\bi_\bn_\bt(std::ostream &os) const override;\n-45\n-46 /* interface to preconditioner parameters */\n-47 inline const _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs& preconditioner() const {\n-48 return *preconditioner_;\n-49 }\n-50\n-51 // needed for python wrapper\n-52 void _\bp_\br_\bi_\bn_\bt(const std::string &s) const;\n-53\n-54 boost::shared_ptr preconditioner_;\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n+34\n+35 // Forward declarations\n+36 class GaussianBayesNet;\n+37 class GaussianFactorGraph;\n+38 class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+39\n+_\b4_\b0 struct GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs : public\n+_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n+41 typedef boost::shared_ptr shared_ptr;\n+42 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs(const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p =\n+_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs())\n+43 : builderParams(p) {}\n+44 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs builderParams;\n+45 };\n+46\n+_\b5_\b4 class GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br : public _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br {\n 55\n-56 void setPreconditionerParams(const boost::\n-shared_ptr preconditioner);\n-57};\n+56 public:\n+57 typedef boost::shared_ptr shared_ptr;\n 58\n-_\b6_\b2class GTSAM_EXPORT _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br: public _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br {\n-63public:\n-64 typedef _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br _\bB_\ba_\bs_\be;\n-65 typedef boost::shared_ptr shared_ptr;\n-66\n-67protected:\n-68\n-69 _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs parameters_;\n-70 boost::shared_ptr preconditioner_;\n+59 private:\n+60 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh Ab2_;\n+61 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt Rc1_;\n+62 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs xbar_;\n+63 _\bE_\br_\br_\bo_\br_\bs b2bar_;\n+64\n+65 _\bK_\be_\by_\bI_\bn_\bf_\bo keyInfo_;\n+66 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs parameters_;\n+67\n+68 public:\n+69\n+70 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br(const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p =\n+_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs());\n 71\n-72public:\n-73 /* Interface to initialize a solver without a problem */\n-74 _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br(const _\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p);\n-75 _\b~_\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br() override {\n-76 }\n-77\n-78 using IterativeSolver::optimize;\n-79\n-80 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-81 const _\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo, const std::map &lambda,\n-82 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &initial) override;\n-83\n-84};\n+78 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& Ab2, const\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& Rc1, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& xbar,\n+79 const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p = _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+());\n+80\n+81 _\b~_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br() override {}\n+82\n+84 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"SubgraphPreconditioner\") const;\n 85\n-_\b8_\b9class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bS_\by_\bs_\bt_\be_\bm {\n-90public:\n+_\b8_\b7 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bA_\bb_\b2() const { return Ab2_; }\n+88\n+_\b9_\b0 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& _\bR_\bc_\b1() const { return Rc1_; }\n 91\n-92 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bS_\by_\bs_\bt_\be_\bm(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-93 const _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br &preconditioner, const _\bK_\be_\by_\bI_\bn_\bf_\bo &info,\n-94 const std::map &lambda);\n-95\n-96 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg_;\n-97 const _\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br &preconditioner_;\n-98 const _\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo_;\n-99 const std::map &lambda_;\n-100\n-101 void residual(const Vector &x, Vector &r) const;\n-102 void multiply(const Vector &x, Vector& y) const;\n-103 void leftPrecondition(const Vector &x, Vector &y) const;\n-104 void rightPrecondition(const Vector &x, Vector &y) const;\n-105 void scal(const double alpha, Vector &x) const;\n-106 double _\bd_\bo_\bt(const Vector &x, const Vector &y) const;\n-107 void _\ba_\bx_\bp_\by(const double alpha, const Vector &x, Vector &y) const;\n-108\n-109 void getb(Vector &b) const;\n-110};\n-111\n-114\n-116_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bb_\bu_\bi_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const Vector &v, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering,\n-117 const std::map & dimensions);\n+_\b9_\b3 const _\bE_\br_\br_\bo_\br_\bs _\bb_\b2_\bb_\ba_\br() const { return b2bar_; }\n+94\n+100 /* x = xbar + inv(R1)*y */\n+101 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs x(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n+102\n+103 /* A zero VectorValues with the structure of xbar */\n+104 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs zero() const {\n+105 return VectorValues::Zero(xbar_);\n+106 }\n+107\n+113 void transposeMultiplyAdd2(double alpha, Errors::const_iterator begin,\n+114 Errors::const_iterator end, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n+115\n+116 /* error, given y */\n+117 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n 118\n-120_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bb_\bu_\bi_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const Vector &v, const _\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo);\n+120 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradient(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n 121\n-123\n-124}\n-125\n-_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n-Implementation of Conjugate Gradient solver for a linear system.\n+123 Errors operator*(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n+124\n+126 void multiplyInPlace(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y, Errors& e) const;\n+127\n+129 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs operator^(const Errors& e) const;\n+130\n+135 void transposeMultiplyAdd(double alpha, const Errors& e, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y)\n+const;\n+136\n+137 /\n+*****************************************************************************/\n+138 /* implement virtual functions of Preconditioner */\n+139\n+141 void solve(const Vector& y, Vector &x) const override;\n+142\n+144 void transposeSolve(const Vector& y, Vector& x) const override;\n+145\n+147 void build(\n+148 const GaussianFactorGraph &gfg,\n+149 const KeyInfo &info,\n+150 const std::map &lambda\n+151 ) override;\n+152 /\n+*****************************************************************************/\n+153 };\n+154\n+155} // namespace gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+Chordal Bayes Net, the result of eliminating a factor graph.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh\n+_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+Some support classes for iterative solvers.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n+_\bE_\br_\br_\bo_\br_\bs_\b._\bh\n+vector of errors\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues buildVectorValues(const Vector &v, const Ordering &ordering, const\n-map< Key, size_t > &dimensions)\n-Create VectorValues from a Vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PCGSolver.cpp:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n-Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n-landmarkKey)\n-Optimize for triangulation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bx_\bp_\by\n-void axpy(double alpha, const Errors &x, Errors &y)\n-BLAS level 2 style AXPY, y := alpha*x + y\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-parameters for the conjugate gradient method\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\b _\bV_\be_\bc_\bt_\bo_\br_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br\n-Base class for Iterative Solvers like SubgraphSolver.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo\n Handy data structure for iterative solvers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-Parameters for PCG.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PCGSolver.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bC_\bG_\bS_\bo_\bl_\bv_\be_\br\n-A virtual base class for the preconditioned conjugate gradient solver.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PCGSolver.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bS_\by_\bs_\bt_\be_\bm\n-System class needed for calling preconditionedConjugateGradient.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PCGSolver.h:89\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:24\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Preconditioner.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphPreconditioner.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br\n+Subgraph conditioner class, as explained in the RSS 2010 submission.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphPreconditioner.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bA_\bb_\b2\n+const GaussianFactorGraph & Ab2() const\n+Access Ab2.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphPreconditioner.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bb_\b2_\bb_\ba_\br\n+const Errors b2bar() const\n+Access b2bar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphPreconditioner.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b:_\b:_\bR_\bc_\b1\n+const GaussianBayesNet & Rc1() const\n+Access Rc1.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphPreconditioner.h:90\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n VectorValues represents a collection of vector-valued variables associated each\n with a unique integer...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * P\bPC\bCG\bGS\bSo\bol\blv\bve\ber\br.\b.h\bh\n+ * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00845.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00845.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianConditional-inl.h File Reference\n \n \n \n \n \n \n \n@@ -95,34 +95,36 @@\n \n \n \n \n
\n \n-
GaussianFactor.cpp File Reference
\n+
GaussianConditional-inl.h File Reference
\n
\n
\n \n-

A factor with a quadratic error function - a Gaussian. \n+

Conditional Gaussian Base class. \n More...

\n+\n+

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A factor with a quadratic error function - a Gaussian.

\n-

GaussianFactor

Author
Fan Jiang
\n+

Conditional Gaussian Base class.

\n+
Author
Christian Potthast
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianFactor.cpp File Reference\n-A factor with a quadratic error function - a Gaussian. _\bM_\bo_\br_\be_\b._\b._\b.\n+GaussianConditional-inl.h File Reference\n+Conditional Gaussian Base class. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A factor with a quadratic error function - a Gaussian.\n-GaussianFactor\n+Conditional Gaussian Base class.\n Author\n- Fan Jiang\n+ Christian Potthast\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00851.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00851.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianJunctionTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphSolver.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,43 +94,38 @@\n \n \n \n \n \n
\n \n-
GaussianJunctionTree.h File Reference
\n+
SubgraphSolver.cpp File Reference
\n
\n
\n \n-

Go to the source code of this file.

\n+

Subgraph Solver from IROS 2010. \n+More...

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::GaussianJunctionTree
 A junction tree specialized to Gaussian factors, i.e., it is a cluster tree with Gaussian factors stored in each cluster. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Mar 29, 2013
\n+

Subgraph Solver from IROS 2010.

\n+
Date
2010
\n
Author
Frank Dellaert
\n
\n-Richard Roberts
\n+Yong Dian Jian \n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianJunctionTree.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-\u00a0 A junction tree specialized to Gaussian factors, i.e., it is a cluster\n- tree with Gaussian factors stored in each cluster. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SubgraphSolver.cpp File Reference\n+Subgraph Solver from IROS 2010. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Subgraph Solver from IROS 2010.\n Date\n- Mar 29, 2013\n+ 2010\n Author\n Frank Dellaert\n- Richard Roberts\n+ Yong Dian Jian\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00857.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00857.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianEliminationTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/IterativeSolver.h File Reference\n \n \n \n \n \n \n \n@@ -94,34 +94,54 @@\n \n \n \n \n \n
\n \n-
GaussianEliminationTree.cpp File Reference
\n+
IterativeSolver.h File Reference
\n
\n
\n+\n+

Some support classes for iterative solvers. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::IterativeOptimizationParameters
 parameters for iterative linear solvers More...
 
class  gtsam::IterativeSolver
 Base class for Iterative Solvers like SubgraphSolver. More...
 
struct  gtsam::KeyInfoEntry
 Handy data structure for iterative solvers key to (index, dimension, start) More...
 
class  gtsam::KeyInfo
 Handy data structure for iterative solvers. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Mar 29, 2013
\n-
Author
Frank Dellaert
\n-
\n-Richard Roberts
\n+

Some support classes for iterative solvers.

\n+
Date
2010
\n+
Author
Yong-Dian Jian
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,37 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianEliminationTree.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+IterativeSolver.h File Reference\n+Some support classes for iterative solvers. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+\u00a0 parameters for iterative linear solvers _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br\n+\u00a0 Base class for Iterative Solvers like _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo_\bE_\bn_\bt_\br_\by\n+\u00a0 Handy data structure for iterative solvers key to (index, dimension,\n+ start) _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo\n+\u00a0 Handy data structure for iterative solvers. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Some support classes for iterative solvers.\n Date\n- Mar 29, 2013\n+ 2010\n Author\n- Frank Dellaert\n- Richard Roberts\n+ Yong-Dian Jian\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00866.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00866.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianJunctionTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/RegularHessianFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,34 +94,46 @@\n \n \n \n \n \n
\n \n-
GaussianJunctionTree.cpp File Reference
\n+
RegularHessianFactor.h File Reference
\n
\n
\n+\n+

HessianFactor class with constant sized blocks. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::RegularHessianFactor< D >
 
struct  gtsam::traits< RegularHessianFactor< D > >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Mar 29, 2013
\n-
Author
Frank Dellaert
\n-
\n-Richard Roberts
\n+

HessianFactor class with constant sized blocks.

\n+
Author
Sungtae An
\n+
Date
March 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianJunctionTree.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+RegularHessianFactor.h File Reference\n+HessianFactor class with constant sized blocks. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bD_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bD_\b _\b>_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Mar 29, 2013\n+HessianFactor class with constant sized blocks.\n Author\n- Frank Dellaert\n- Richard Roberts\n+ Sungtae An\n+ Date\n+ March 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00872.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00872.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactorGraph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianConditional.h File Reference\n \n \n \n \n \n \n \n@@ -95,63 +95,46 @@\n \n \n \n \n
\n \n-
GaussianFactorGraph.h File Reference
\n+Namespaces
\n+
GaussianConditional.h File Reference
\n \n
\n \n-

Linear Factor Graph where all factors are Gaussians. \n+

Conditional Gaussian Base class. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::EliminationTraits< GaussianFactorGraph >
class  gtsam::GaussianConditional
 A GaussianConditional functions as the node in a Bayes network. More...
 
class  gtsam::GaussianFactorGraph
 A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e. More...
 
struct  gtsam::traits< GaussianFactorGraph >
 traits More...
struct  gtsam::traits< GaussianConditional >
 traits More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

bool gtsam::hasConstraints (const GaussianFactorGraph &factors)
 Evaluates whether linear factors have any constrained noise models.
 
\n

Detailed Description

\n-

Linear Factor Graph where all factors are Gaussians.

\n-
Author
Kai Ni
\n-
\n-Christian Potthast
\n-
\n-Alireza Fathi
\n-
\n-Richard Roberts
\n-
\n-Frank Dellaert
\n+

Conditional Gaussian Base class.

\n+
Author
Christian Potthast
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-GaussianFactorGraph.h File Reference\n-Linear Factor Graph where all factors are Gaussians. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GaussianConditional.h File Reference\n+Conditional Gaussian Base class. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+\u00a0 A _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl functions as the node in a Bayes network.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-\u00a0 A Linear _\bF_\ba_\bc_\bt_\bo_\br Graph is a factor graph where all factors are\n- Gaussian, i.e. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b _\b>\n \u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\ba_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\bs (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors)\n-\u00a0 Evaluates whether linear factors have any constrained noise models.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Linear Factor Graph where all factors are Gaussians.\n+Conditional Gaussian Base class.\n Author\n- Kai Ni\n Christian Potthast\n- Alireza Fathi\n- Richard Roberts\n- Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00872.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00872.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,3 @@\n var a00872 = [\n- [\"gtsam::EliminationTraits< GaussianFactorGraph >\", \"a03788.html\", \"a03788\"],\n- [\"gtsam::GaussianFactorGraph\", \"a03792.html\", \"a03792\"],\n- [\"gtsam::traits< GaussianFactorGraph >\", \"a03796.html\", null],\n- [\"hasConstraints\", \"a00872.html#a35c269c3243cab16a7475239a9c91021\", null]\n+ [\"gtsam::traits< GaussianConditional >\", \"a03768.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00872_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00872_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianConditional.h Source File\n \n \n \n \n \n \n \n@@ -98,338 +98,224 @@\n
No Matches
\n \n \n \n \n \n
\n-
GaussianFactorGraph.h
\n+
GaussianConditional.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
22#pragma once
\n+
18// \\callgraph
\n+
19
\n+
20#pragma once
\n+
21
\n+
22#include <boost/utility.hpp>
\n
23
\n-\n-\n-
26#include <gtsam/linear/Errors.h> // Included here instead of fw-declared so we can use Errors::iterator
\n-\n-\n-\n-\n+\n+\n+\n+
27#include <gtsam/inference/Conditional-inst.h>
\n+\n+
29
\n+
30#include <random> // for std::mt19937_64
\n
31
\n
32namespace gtsam {
\n
33
\n-
34 // Forward declarations
\n-
35 class GaussianFactorGraph;
\n-
36 class GaussianFactor;
\n-\n-
38 class GaussianBayesNet;
\n-
39 class GaussianEliminationTree;
\n-
40 class GaussianBayesTree;
\n-
41 class GaussianJunctionTree;
\n-
42
\n-
43 /* ************************************************************************* */
\n-
\n-\n-
45 {
\n-\n-\n-\n-\n-\n-\n-\n-
54 static std::pair<boost::shared_ptr<ConditionalType>, boost::shared_ptr<FactorType> >
\n-
\n-
55 DefaultEliminate(const FactorGraphType& factors, const Ordering& keys) {
\n-
56 return EliminatePreferCholesky(factors, keys); }
\n-
\n-
\n-\n-
59 const FactorGraphType& graph,
\n-
60 boost::optional<const VariableIndex&> variableIndex) {
\n-
61 return Ordering::Colamd(*variableIndex);
\n-
62 }
\n-
\n-
63 };
\n-
\n+
\n+
40 class GTSAM_EXPORT GaussianConditional :
\n+
41 public JacobianFactor,
\n+
42 public Conditional<JacobianFactor, GaussianConditional>
\n+
43 {
\n+
44 public:
\n+\n+
46 typedef boost::shared_ptr<This> shared_ptr;
\n+\n+\n+
49
\n+
52
\n+\n+
55
\n+
57 GaussianConditional(Key key, const Vector& d, const Matrix& R,
\n+
58 const SharedDiagonal& sigmas = SharedDiagonal());
\n+
59
\n+
61 GaussianConditional(Key key, const Vector& d, const Matrix& R, Key parent1,
\n+
62 const Matrix& S,
\n+
63 const SharedDiagonal& sigmas = SharedDiagonal());
\n
64
\n-
65 /* ************************************************************************* */
\n-
\n-
72 class GTSAM_EXPORT GaussianFactorGraph :
\n-
73 public FactorGraph<GaussianFactor>,
\n-
74 public EliminateableFactorGraph<GaussianFactorGraph>
\n-
75 {
\n-
76 public:
\n+
66 GaussianConditional(Key key, const Vector& d, const Matrix& R, Key parent1,
\n+
67 const Matrix& S, Key parent2, const Matrix& T,
\n+
68 const SharedDiagonal& sigmas = SharedDiagonal());
\n+
69
\n+
73 template<typename TERMS>
\n+
74 GaussianConditional(const TERMS& terms,
\n+
75 size_t nrFrontals, const Vector& d,
\n+
76 const SharedDiagonal& sigmas = SharedDiagonal());
\n
77
\n-\n-\n-\n-
81 typedef boost::shared_ptr<This> shared_ptr;
\n-
82
\n-
85
\n-\n-
88
\n-
94 GaussianFactorGraph(std::initializer_list<sharedFactor> factors) : Base(factors) {}
\n-
95
\n-
96
\n-
98 template<typename ITERATOR>
\n-
99 GaussianFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor) : Base(firstFactor, lastFactor) {}
\n-
100
\n-
102 template<class CONTAINER>
\n-
103 explicit GaussianFactorGraph(const CONTAINER& factors) : Base(factors) {}
\n-
104
\n-
106 template<class DERIVEDFACTOR>
\n-\n-
108
\n-\n-
111
\n-
115
\n-
116 bool equals(const This& fg, double tol = 1e-9) const;
\n-
117
\n-
119
\n-
\n-
121 friend bool operator==(const GaussianFactorGraph& lhs,
\n-
122 const GaussianFactorGraph& rhs) {
\n-
123 return lhs.isEqual(rhs);
\n-
124 }
\n-
\n-
125
\n-
127 void add(const GaussianFactor& factor) { push_back(factor.clone()); }
\n-
128
\n-
130 void add(const sharedFactor& factor) { push_back(factor); }
\n-
131
\n-
\n-
133 void add(const Vector& b) {
\n-
134 add(JacobianFactor(b)); }
\n-
\n-
135
\n-
\n-
137 void add(Key key1, const Matrix& A1,
\n-
138 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {
\n-
139 add(JacobianFactor(key1,A1,b,model)); }
\n+
82 template<typename KEYS>
\n+\n+
84 const KEYS& keys, size_t nrFrontals, const VerticalBlockMatrix& augmentedMatrix,
\n+
85 const SharedDiagonal& sigmas = SharedDiagonal());
\n+
86
\n+
88 static GaussianConditional FromMeanAndStddev(Key key, const Vector& mu,
\n+
89 double sigma);
\n+
90
\n+
92 static GaussianConditional FromMeanAndStddev(Key key, const Matrix& A,
\n+
93 Key parent, const Vector& b,
\n+
94 double sigma);
\n+
95
\n+
98 static GaussianConditional FromMeanAndStddev(Key key, //
\n+
99 const Matrix& A1, Key parent1,
\n+
100 const Matrix& A2, Key parent2,
\n+
101 const Vector& b, double sigma);
\n+
102
\n+
104 template<typename... Args>
\n+
\n+
105 static shared_ptr sharedMeanAndStddev(Args&&... args) {
\n+
106 return boost::make_shared<This>(FromMeanAndStddev(std::forward<Args>(args)...));
\n+
107 }
\n
\n+
108
\n+
116 template<typename ITERATOR>
\n+
117 static shared_ptr Combine(ITERATOR firstConditional, ITERATOR lastConditional);
\n+
118
\n+
122
\n+
124 void print(
\n+
125 const std::string& = "GaussianConditional",
\n+
126 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n+
127
\n+
129 bool equals(const GaussianFactor&cg, double tol = 1e-9) const override;
\n+
130
\n+
134
\n+
139 double logNormalizationConstant() const override;
\n
140
\n-
\n-
142 void add(Key key1, const Matrix& A1,
\n-
143 Key key2, const Matrix& A2,
\n-
144 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {
\n-
145 add(JacobianFactor(key1,A1,key2,A2,b,model)); }
\n-
\n-
146
\n-
\n-
148 void add(Key key1, const Matrix& A1,
\n-
149 Key key2, const Matrix& A2,
\n-
150 Key key3, const Matrix& A3,
\n-
151 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {
\n-
152 add(JacobianFactor(key1,A1,key2,A2,key3,A3,b,model)); }
\n-
\n-
153
\n-
155 template<class TERMS>
\n-
\n-
156 void add(const TERMS& terms, const Vector &b, const SharedDiagonal& model = SharedDiagonal()) {
\n-
157 add(JacobianFactor(terms,b,model)); }
\n-
\n-
158
\n-
163 typedef KeySet Keys;
\n-
164 Keys keys() const;
\n-
165
\n-
166 /* return a map of (Key, dimension) */
\n-
167 std::map<Key, size_t> getKeyDimMap() const;
\n-
168
\n-
170 double error(const VectorValues& x) const;
\n-
171
\n-
173 double probPrime(const VectorValues& c) const;
\n-
174
\n-
180 virtual GaussianFactorGraph clone() const;
\n+
148 double logProbability(const VectorValues& x) const;
\n+
149
\n+
155 double evaluate(const VectorValues& x) const;
\n+
156
\n+
\n+
158 double operator()(const VectorValues& x) const {
\n+
159 return evaluate(x);
\n+
160 }
\n+
\n+
161
\n+
175 VectorValues solve(const VectorValues& parents) const;
\n+
176
\n+
177 VectorValues solveOtherRHS(const VectorValues& parents, const VectorValues& rhs) const;
\n+
178
\n+
180 void solveTransposeInPlace(VectorValues& gy) const;
\n
181
\n-
186 virtual GaussianFactorGraph::shared_ptr cloneToPtr() const;
\n-
187
\n-
194 GaussianFactorGraph negate() const;
\n-
195
\n-
198
\n-
209 std::vector<std::tuple<int, int, double> > sparseJacobian(
\n-
210 const Ordering& ordering, size_t& nrows, size_t& ncols) const;
\n-
211
\n-
213 std::vector<std::tuple<int, int, double> > sparseJacobian() const;
\n-
214
\n-
221 Matrix sparseJacobian_() const;
\n+\n+
184 const VectorValues& frontalValues) const;
\n+
185
\n+
187 JacobianFactor::shared_ptr likelihood(const Vector& frontal) const;
\n+
188
\n+
195 VectorValues sample(std::mt19937_64* rng) const;
\n+
196
\n+
204 VectorValues sample(const VectorValues& parentsValues,
\n+
205 std::mt19937_64* rng) const;
\n+
206
\n+
208 VectorValues sample() const;
\n+
209
\n+
211 VectorValues sample(const VectorValues& parentsValues) const;
\n+
212
\n+
216
\n+
218 constABlock R() const { return Ab_.range(0, nrFrontals()); }
\n+
219
\n+
221 constABlock S() const { return Ab_.range(nrFrontals(), size()); }
\n
222
\n-
230 Matrix augmentedJacobian(const Ordering& ordering) const;
\n-
231
\n-
239 Matrix augmentedJacobian() const;
\n-
240
\n-
248 std::pair<Matrix,Vector> jacobian(const Ordering& ordering) const;
\n-
249
\n-
257 std::pair<Matrix,Vector> jacobian() const;
\n+
224 constABlock S(const_iterator it) const { return BaseFactor::getA(it); }
\n+
225
\n+
227 const constBVector d() const { return BaseFactor::getb(); }
\n+
228
\n+
240 inline double determinant() const { return exp(logDeterminant()); }
\n+
241
\n+
253 double logDeterminant() const;
\n+
254
\n
258
\n-
270 Matrix augmentedHessian(const Ordering& ordering) const;
\n-
271
\n-
283 Matrix augmentedHessian() const;
\n-
284
\n-
291 std::pair<Matrix,Vector> hessian(const Ordering& ordering) const;
\n-
292
\n-
299 std::pair<Matrix,Vector> hessian() const;
\n-
300
\n-
302 virtual VectorValues hessianDiagonal() const;
\n+
263 double logProbability(const HybridValues& x) const override;
\n+
264
\n+
269 double evaluate(const HybridValues& x) const override;
\n+
270
\n+
271 using Conditional::operator(); // Expose evaluate(const HybridValues&) method..
\n+
272 using JacobianFactor::error; // Expose error(const HybridValues&) method..
\n+
273
\n+
275
\n+
276
\n+
277#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
280
\n+
282 void GTSAM_DEPRECATED scaleFrontalsBySigma(VectorValues& gy) const;
\n+
284#endif
\n+
285
\n+
286 private:
\n+
288 friend class boost::serialization::access;
\n+
289 template<class Archive>
\n+
290 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
291 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
\n+
292 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
\n+
293 }
\n+
294 }; // GaussianConditional
\n+
\n+
295
\n+
297template<>
\n+
298struct traits<GaussianConditional> : public Testable<GaussianConditional> {};
\n+
299
\n+
300} // \\ namespace gtsam
\n+
301
\n+\n
303
\n-
305 virtual std::map<Key,Matrix> hessianBlockDiagonal() const;
\n-
306
\n-\n-
312 const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
\n-
313
\n-\n-
319 const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
\n-
320
\n-
324 VectorValues optimizeDensely() const;
\n-
325
\n-
335 VectorValues gradient(const VectorValues& x0) const;
\n-
336
\n-
344 virtual VectorValues gradientAtZero() const;
\n-
345
\n-
370 VectorValues optimizeGradientSearch() const;
\n-
371
\n-
373 VectorValues transposeMultiply(const Errors& e) const;
\n-
374
\n-
376 void transposeMultiplyAdd(double alpha, const Errors& e, VectorValues& x) const;
\n-
377
\n-
379 Errors gaussianErrors(const VectorValues& x) const;
\n-
380
\n-
382 Errors operator*(const VectorValues& x) const;
\n-
383
\n-
385 void multiplyHessianAdd(double alpha, const VectorValues& x,
\n-
386 VectorValues& y) const;
\n-
387
\n-
389 void multiplyInPlace(const VectorValues& x, Errors& e) const;
\n-
390
\n-
392 void multiplyInPlace(const VectorValues& x, const Errors::iterator& e) const;
\n-
393
\n-
394 void printErrors(
\n-
395 const VectorValues& x,
\n-
396 const std::string& str = "GaussianFactorGraph: ",
\n-
397 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
398 const std::function<bool(const Factor* /*factor*/,
\n-
399 double /*whitenedError*/, size_t /*index*/)>&
\n-
400 printCondition =
\n-
401 [](const Factor*, double, size_t) { return true; }) const;
\n-
403
\n-
404 private:
\n-
406 friend class boost::serialization::access;
\n-
407 template<class ARCHIVE>
\n-
408 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
409 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
410 }
\n-
411
\n-
412 public:
\n-
413
\n-
414#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
416 VectorValues GTSAM_DEPRECATED
\n-
417 optimize(boost::none_t, const Eliminate& function =
\n-
418 EliminationTraitsType::DefaultEliminate) const {
\n-
419 return optimize(function);
\n-
420 }
\n-
421#endif
\n-
422
\n-
423 };
\n-
\n-
424
\n-
429 GTSAM_EXPORT bool hasConstraints(const GaussianFactorGraph& factors);
\n-
430
\n-
431 /****** Linear Algebra Operations ******/
\n-
432
\n-
434 //GTSAM_EXPORT void residual(const GaussianFactorGraph& fg, const VectorValues &x, VectorValues &r);
\n-
435 //GTSAM_EXPORT void multiply(const GaussianFactorGraph& fg, const VectorValues &x, VectorValues &r);
\n-
436
\n-
438template<>
\n-
\n-
439struct traits<GaussianFactorGraph> : public Testable<GaussianFactorGraph> {
\n-
440};
\n-
\n-
441
\n-
442} // \\ namespace gtsam
\n-
Factor Graph Base Class.
\n-
Variable elimination algorithms for factor graphs.
\n-
Factor Graph Values.
\n-
A factor with a quadratic error function - a Gaussian.
\n-
vector of errors
\n-\n-
Contains the HessianFactor class, a general quadratic factor.
\n-
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with Cholesky factorization.
Definition HessianFactor.cpp:548
\n+
Base class for conditional densities.
\n+\n+
Conditional Gaussian Base class.
\n+
Factor Graph Values.
\n+
Included from all GTSAM files.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
bool hasConstraints(const GaussianFactorGraph &factors)
Evaluates whether linear factors have any constrained noise models.
Definition GaussianFactorGraph.cpp:442
\n-
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n-
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-\n-\n
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
bool isEqual(const FactorGraph &other) const
Check exact equality of the factor pointers. Useful for derived ==.
Definition FactorGraph.h:134
\n-
boost::shared_ptr< GaussianFactor > sharedFactor
Shared pointer to a factor.
Definition FactorGraph.h:101
\n-
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n-
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:57
\n-
Definition Factor.h:68
\n-
Definition Ordering.h:34
\n-
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:95
\n-
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
\n-
A Bayes tree representing a Gaussian density.
Definition GaussianBayesTree.h:52
\n+
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
Definition Conditional.h:64
\n+
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n-
Definition GaussianEliminationTree.h:29
\n+
GaussianConditional This
Typedef to this class.
Definition GaussianConditional.h:45
\n+
constABlock S(const_iterator it) const
Get a view of the S matrix for the variable pointed to by the given key iterator.
Definition GaussianConditional.h:224
\n+
constABlock R() const
Return a view of the upper-triangular R block of the conditional.
Definition GaussianConditional.h:218
\n+
JacobianFactor BaseFactor
Typedef to our factor base class.
Definition GaussianConditional.h:47
\n+
GaussianConditional()
default constructor needed for serialization
Definition GaussianConditional.h:54
\n+
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition GaussianConditional.h:48
\n+
static shared_ptr Combine(ITERATOR firstConditional, ITERATOR lastConditional)
Combine several GaussianConditional into a single dense GC.
\n+
double determinant() const
Compute the determinant of the R matrix.
Definition GaussianConditional.h:240
\n+
double operator()(const VectorValues &x) const
Evaluate probability density, sugar.
Definition GaussianConditional.h:158
\n+
static shared_ptr sharedMeanAndStddev(Args &&... args)
Create shared pointer by forwarding arguments to fromMeanAndStddev.
Definition GaussianConditional.h:105
\n+
constABlock S() const
Get a view of the parent blocks.
Definition GaussianConditional.h:221
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianConditional.h:46
\n+
const constBVector d() const
Get a view of the r.h.s.
Definition GaussianConditional.h:227
\n
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n-
virtual GaussianFactor::shared_ptr clone() const =0
Clone a factor (make a deep copy)
\n-
static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::optional< const VariableIndex & > variableIndex)
The default ordering generation function.
Definition GaussianFactorGraph.h:58
\n-
GaussianBayesTree BayesTreeType
Type of Bayes tree.
Definition GaussianFactorGraph.h:51
\n-
GaussianConditional ConditionalType
Type of conditionals from elimination.
Definition GaussianFactorGraph.h:48
\n-
GaussianFactor FactorType
Type of factors in factor graph.
Definition GaussianFactorGraph.h:46
\n-
GaussianEliminationTree EliminationTreeType
Type of elimination tree.
Definition GaussianFactorGraph.h:50
\n-
GaussianFactorGraph FactorGraphType
Type of the factor graph (e.g. GaussianFactorGraph)
Definition GaussianFactorGraph.h:47
\n-
GaussianBayesNet BayesNetType
Type of Bayes net from sequential elimination.
Definition GaussianFactorGraph.h:49
\n-
GaussianJunctionTree JunctionTreeType
Type of Junction tree.
Definition GaussianFactorGraph.h:52
\n-
static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering &keys)
The default dense elimination function.
Definition GaussianFactorGraph.h:55
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
EliminateableFactorGraph< This > BaseEliminateable
Typedef to base elimination class.
Definition GaussianFactorGraph.h:80
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n-
void add(const TERMS &terms, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add an n-ary factor.
Definition GaussianFactorGraph.h:156
\n-
GaussianFactorGraph(std::initializer_list< sharedFactor > factors)
Construct from an initializer lists of GaussianFactor shared pointers.
Definition GaussianFactorGraph.h:94
\n-
GaussianFactorGraph()
Default constructor.
Definition GaussianFactorGraph.h:87
\n-
void add(const GaussianFactor &factor)
Add a factor by value - makes a copy.
Definition GaussianFactorGraph.h:127
\n-
void add(Key key1, const Matrix &A1, Key key2, const Matrix &A2, Key key3, const Matrix &A3, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add a ternary factor.
Definition GaussianFactorGraph.h:148
\n-
void add(const sharedFactor &factor)
Add a factor by pointer - stores pointer without copying the factor.
Definition GaussianFactorGraph.h:130
\n-
friend bool operator==(const GaussianFactorGraph &lhs, const GaussianFactorGraph &rhs)
Check exact equality.
Definition GaussianFactorGraph.h:121
\n-
GaussianFactorGraph This
Typedef to this class.
Definition GaussianFactorGraph.h:78
\n-
KeySet Keys
Return the set of variables involved in the factors (computes a set union).
Definition GaussianFactorGraph.h:163
\n-
void add(const Vector &b)
Add a null factor.
Definition GaussianFactorGraph.h:133
\n-
void add(Key key1, const Matrix &A1, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add a unary factor.
Definition GaussianFactorGraph.h:137
\n-
virtual ~GaussianFactorGraph()
Virtual destructor.
Definition GaussianFactorGraph.h:110
\n-
void add(Key key1, const Matrix &A1, Key key2, const Matrix &A2, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add a binary factor.
Definition GaussianFactorGraph.h:142
\n-
GaussianFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Construct from iterator over factors.
Definition GaussianFactorGraph.h:99
\n-
FactorGraph< GaussianFactor > Base
Typedef to base factor graph type.
Definition GaussianFactorGraph.h:79
\n-
GaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition GaussianFactorGraph.h:107
\n-
GaussianFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects)
Definition GaussianFactorGraph.h:103
\n-
A junction tree specialized to Gaussian factors, i.e., it is a cluster tree with Gaussian factors sto...
Definition GaussianJunctionTree.h:39
\n
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition JacobianFactor.h:96
\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
is the normalization constant.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,493 +1,298 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianFactorGraph.h\n+GaussianConditional.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-22#pragma once\n+18// \\callgraph\n+19\n+20#pragma once\n+21\n+22#include \n 23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\br_\br_\bo_\br_\bs_\b._\bh> // Included here instead of fw-declared so\n-we can use Errors::iterator\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+27#include \n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+29\n+30#include // for std::mt19937_64\n 31\n 32namespace _\bg_\bt_\bs_\ba_\bm {\n 33\n-34 // Forward declarations\n-35 class GaussianFactorGraph;\n-36 class GaussianFactor;\n-37 class _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-38 class GaussianBayesNet;\n-39 class GaussianEliminationTree;\n-40 class GaussianBayesTree;\n-41 class GaussianJunctionTree;\n-42\n-43 /* *************************************************************************\n-*/\n-_\b4_\b4 template<> struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh>\n-45 {\n-_\b4_\b6 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n-_\b4_\b7 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n-_\b4_\b8 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-_\b4_\b9 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n-_\b5_\b0 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-_\b5_\b1 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-_\b5_\b2 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-54 static std::pair, boost::\n-shared_ptr >\n-_\b5_\b5 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) {\n-56 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by(factors, keys); }\n-_\b5_\b8 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc(\n-59 const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& graph,\n-60 boost::optional variableIndex) {\n-61 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd(*variableIndex);\n-62 }\n-63 };\n+_\b4_\b0 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl :\n+41 public _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br,\n+42 public _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+43 {\n+44 public:\n+_\b4_\b5 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bT_\bh_\bi_\bs;\n+_\b4_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b4_\b7 typedef _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br;\n+_\b4_\b8 typedef _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bT_\bh_\bi_\bs_\b> _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+49\n+52\n+_\b5_\b4 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() {}\n+55\n+57 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by key, const Vector& d, const Matrix& R,\n+58 const SharedDiagonal& sigmas = SharedDiagonal());\n+59\n+61 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by key, const Vector& d, const Matrix& R, _\bK_\be_\by parent1,\n+62 const Matrix& S,\n+63 const SharedDiagonal& sigmas = SharedDiagonal());\n 64\n-65 /* *************************************************************************\n-*/\n-_\b7_\b2 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh :\n-73 public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh,\n-74 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-75 {\n-76 public:\n+66 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by key, const Vector& d, const Matrix& R, _\bK_\be_\by parent1,\n+67 const Matrix& S, _\bK_\be_\by parent2, const Matrix& T,\n+68 const SharedDiagonal& sigmas = SharedDiagonal());\n+69\n+73 template\n+74 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(const TERMS& terms,\n+75 size_t nrFrontals, const Vector& d,\n+76 const SharedDiagonal& sigmas = SharedDiagonal());\n 77\n-_\b7_\b8 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bT_\bh_\bi_\bs;\n-_\b7_\b9 typedef _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b> _\bB_\ba_\bs_\be;\n-_\b8_\b0 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bT_\bh_\bi_\bs_\b> _\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be;\n-_\b8_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-82\n-85\n-_\b8_\b7 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n-88\n-_\b9_\b4 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(std::initializer_list factors) : _\bB_\ba_\bs_\be\n-(factors) {}\n+82 template\n+83 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(\n+84 const KEYS& keys, size_t nrFrontals, const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n+augmentedMatrix,\n+85 const SharedDiagonal& sigmas = SharedDiagonal());\n+86\n+88 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl FromMeanAndStddev(_\bK_\be_\by key, const Vector& mu,\n+89 double sigma);\n+90\n+92 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl FromMeanAndStddev(_\bK_\be_\by key, const Matrix& A,\n+93 _\bK_\be_\by parent, const Vector& b,\n+94 double sigma);\n 95\n-96\n-98 template\n-_\b9_\b9 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(ITERATOR firstFactor, ITERATOR lastFactor) : _\bB_\ba_\bs_\be\n-(firstFactor, lastFactor) {}\n-100\n-102 template\n-_\b1_\b0_\b3 explicit _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const CONTAINER& factors) : _\bB_\ba_\bs_\be(factors) {}\n-104\n-106 template\n-_\b1_\b0_\b7 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph) : _\bB_\ba_\bs_\be(graph)\n-{}\n+98 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl FromMeanAndStddev(_\bK_\be_\by key, //\n+99 const Matrix& A1, _\bK_\be_\by parent1,\n+100 const Matrix& A2, _\bK_\be_\by parent2,\n+101 const Vector& b, double sigma);\n+102\n+104 template\n+_\b1_\b0_\b5 static _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bs_\bh_\ba_\br_\be_\bd_\bM_\be_\ba_\bn_\bA_\bn_\bd_\bS_\bt_\bd_\bd_\be_\bv(Args&&... args) {\n+106 return boost::make_shared(FromMeanAndStddev(std::forward\n+(args)...));\n+107 }\n 108\n-_\b1_\b1_\b0 virtual _\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n-111\n-115\n-116 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& fg, double tol = 1e-9) const;\n-117\n-119\n-_\b1_\b2_\b1 friend bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& lhs,\n-122 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& rhs) {\n-123 return lhs._\bi_\bs_\bE_\bq_\bu_\ba_\bl(rhs);\n-124 }\n-125\n-_\b1_\b2_\b7 void _\ba_\bd_\bd(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& factor) { push_back(factor._\bc_\bl_\bo_\bn_\be()); }\n-128\n-_\b1_\b3_\b0 void _\ba_\bd_\bd(const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor) { push_back(factor); }\n-131\n-_\b1_\b3_\b3 void _\ba_\bd_\bd(const Vector& b) {\n-134 add(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(b)); }\n-135\n-_\b1_\b3_\b7 void _\ba_\bd_\bd(_\bK_\be_\by key1, const Matrix& A1,\n-138 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {\n-139 add(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(key1,A1,b,model)); }\n+116 template\n+_\b1_\b1_\b7 static _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bC_\bo_\bm_\bb_\bi_\bn_\be(ITERATOR firstConditional, ITERATOR\n+lastConditional);\n+118\n+122\n+124 void _\bp_\br_\bi_\bn_\bt(\n+125 const std::string& = \"GaussianConditional\",\n+126 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n+127\n+129 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br&cg, double tol = 1e-9) const override;\n+130\n+134\n+139 double logNormalizationConstant() const override;\n 140\n-_\b1_\b4_\b2 void _\ba_\bd_\bd(_\bK_\be_\by key1, const Matrix& A1,\n-143 _\bK_\be_\by key2, const Matrix& A2,\n-144 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {\n-145 add(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(key1,A1,key2,A2,b,model)); }\n-146\n-_\b1_\b4_\b8 void _\ba_\bd_\bd(_\bK_\be_\by key1, const Matrix& A1,\n-149 _\bK_\be_\by key2, const Matrix& A2,\n-150 _\bK_\be_\by key3, const Matrix& A3,\n-151 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {\n-152 add(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(key1,A1,key2,A2,key3,A3,b,model)); }\n-153\n-155 template\n-_\b1_\b5_\b6 void _\ba_\bd_\bd(const TERMS& terms, const Vector &b, const SharedDiagonal& model =\n-SharedDiagonal()) {\n-157 add(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(terms,b,model)); }\n-158\n-_\b1_\b6_\b3 typedef _\bK_\be_\by_\bS_\be_\bt _\bK_\be_\by_\bs;\n-164 _\bK_\be_\by_\bs keys() const;\n-165\n-166 /* return a map of (Key, dimension) */\n-167 std::map getKeyDimMap() const;\n-168\n-170 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-171\n-173 double probPrime(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-174\n-180 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh clone() const;\n+148 double logProbability(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+149\n+155 double evaluate(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+156\n+_\b1_\b5_\b8 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n+159 return evaluate(x);\n+160 }\n+161\n+175 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs solve(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& parents) const;\n+176\n+177 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs solveOtherRHS(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& parents, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs&\n+rhs) const;\n+178\n+180 void solveTransposeInPlace(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gy) const;\n 181\n-186 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br cloneToPtr() const;\n-187\n-194 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh negate() const;\n-195\n-198\n-209 std::vector > sparseJacobian(\n-210 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, size_t& nrows, size_t& ncols) const;\n-211\n-213 std::vector > sparseJacobian() const;\n-214\n-221 Matrix sparseJacobian_() const;\n+183 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br likelihood(\n+184 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& frontalValues) const;\n+185\n+187 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br likelihood(const Vector& frontal) const;\n+188\n+195 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(std::mt19937_64* rng) const;\n+196\n+204 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& parentsValues,\n+205 std::mt19937_64* rng) const;\n+206\n+208 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample() const;\n+209\n+211 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& parentsValues) const;\n+212\n+216\n+_\b2_\b1_\b8 constABlock _\bR() const { return Ab_.range(0, nrFrontals()); }\n+219\n+_\b2_\b2_\b1 constABlock _\bS() const { return Ab_.range(nrFrontals(), size()); }\n 222\n-230 Matrix augmentedJacobian(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n-231\n-239 Matrix augmentedJacobian() const;\n-240\n-248 std::pair jacobian(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n-249\n-257 std::pair jacobian() const;\n+_\b2_\b2_\b4 constABlock _\bS(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br it) const { return BaseFactor::getA(it); }\n+225\n+_\b2_\b2_\b7 const constBVector _\bd() const { return BaseFactor::getb(); }\n+228\n+_\b2_\b4_\b0 inline double _\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt() const { return exp(logDeterminant()); }\n+241\n+253 double logDeterminant() const;\n+254\n 258\n-270 Matrix augmentedHessian(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n-271\n-283 Matrix augmentedHessian() const;\n-284\n-291 std::pair hessian(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n-292\n-299 std::pair hessian() const;\n-300\n-302 virtual _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs hessianDiagonal() const;\n+263 double logProbability(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n+264\n+269 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n+270\n+271 using Conditional::operator(); // Expose evaluate(const HybridValues&)\n+method..\n+272 using JacobianFactor::error; // Expose error(const HybridValues&) method..\n+273\n+275\n+276\n+277#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+280\n+282 void GTSAM_DEPRECATED scaleFrontalsBySigma(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gy) const;\n+284#endif\n+285\n+286 private:\n+_\b2_\b8_\b8 friend class boost::serialization::access;\n+289 template\n+290 void serialize(Archive & ar, const unsigned int /*version*/) {\n+291 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br);\n+292 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl);\n+293 }\n+294 }; // GaussianConditional\n+295\n+297template<>\n+_\b2_\b9_\b8struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+{};\n+299\n+300} // \\ namespace gtsam\n+301\n+302#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b-_\bi_\bn_\bl_\b._\bh>\n 303\n-305 virtual std::map hessianBlockDiagonal() const;\n-306\n-311 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(\n-312 const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;\n-313\n-318 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg&,\n-319 const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;\n-320\n-324 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimizeDensely() const;\n-325\n-335 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradient(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x0) const;\n-336\n-344 virtual _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const;\n-345\n-370 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimizeGradientSearch() const;\n-371\n-373 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs transposeMultiply(const _\bE_\br_\br_\bo_\br_\bs& e) const;\n-374\n-376 void transposeMultiplyAdd(double alpha, const _\bE_\br_\br_\bo_\br_\bs& e, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x)\n-const;\n-377\n-379 _\bE_\br_\br_\bo_\br_\bs gaussianErrors(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-380\n-382 _\bE_\br_\br_\bo_\br_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-383\n-385 void multiplyHessianAdd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n-386 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n-387\n-389 void multiplyInPlace(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x, _\bE_\br_\br_\bo_\br_\bs& e) const;\n-390\n-392 void multiplyInPlace(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x, const Errors::iterator& e)\n-const;\n-393\n-394 void printErrors(\n-395 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n-396 const std::string& str = \"GaussianFactorGraph: \",\n-397 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-398 const std::function&\n-400 printCondition =\n-401 [](const _\bF_\ba_\bc_\bt_\bo_\br*, double, size_t) { return true; }) const;\n-403\n-404 private:\n-_\b4_\b0_\b6 friend class boost::serialization::access;\n-407 template\n-408 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-409 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-410 }\n-411\n-412 public:\n-413\n-414#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-416 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs GTSAM_DEPRECATED\n-417 _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(boost::none_t, const Eliminate& function =\n-418 EliminationTraitsType::DefaultEliminate) const {\n-419 return _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(function);\n-420 }\n-421#endif\n-422\n-423 };\n-424\n-429 GTSAM_EXPORT bool _\bh_\ba_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\bs(const GaussianFactorGraph& factors);\n-430\n-431 /****** Linear Algebra Operations ******/\n-432\n-434 //GTSAM_EXPORT void residual(const GaussianFactorGraph& fg, const\n-VectorValues &x, VectorValues &r);\n-435 //GTSAM_EXPORT void multiply(const GaussianFactorGraph& fg, const\n-VectorValues &x, VectorValues &r);\n-436\n-438template<>\n-_\b4_\b3_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-440};\n-441\n-442} // \\ namespace gtsam\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Variable elimination algorithms for factor graphs.\n+_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+Base class for conditional densities.\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b-_\bi_\bn_\bl_\b._\bh\n+Conditional Gaussian Base class.\n _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n Factor Graph Values.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-A factor with a quadratic error function - a Gaussian.\n-_\bE_\br_\br_\bo_\br_\bs_\b._\bh\n-vector of errors\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Contains the HessianFactor class, a general quadratic factor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by\n-std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr<\n-GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors,\n-const Ordering &keys)\n-Densely partially eliminate with Cholesky factorization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:548\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\ba_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\bs\n-bool hasConstraints(const GaussianFactorGraph &factors)\n-Evaluates whether linear factors have any constrained noise models.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.cpp:442\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n-Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n-landmarkKey)\n-Optimize for triangulation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Point2 operator*(double s, const Point2 &p)\n-multiply with scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\b _\bV_\be_\bc_\bt_\bo_\br_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bi_\bs_\bE_\bq_\bu_\ba_\bl\n-bool isEqual(const FactorGraph &other) const\n-Check exact equality of the factor pointers. Useful for derived ==.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< GaussianFactor > sharedFactor\n-Shared pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n-Traits class for eliminateable factor graphs, specifies the types that result\n-from elimination,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-EliminateableFactorGraph is a base class for factor graphs that contains\n-elimination algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd\n-static Ordering Colamd(const FACTOR_GRAPH &graph)\n-Compute a fill-reducing ordering using COLAMD from a factor graph (see details\n-for note on performanc...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-A Bayes tree representing a Gaussian density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of vertical blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+KeyVector::const_iterator const_iterator\n+Const iterator over keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n A GaussianConditional functions as the node in a Bayes network.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bT_\bh_\bi_\bs\n+GaussianConditional This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS\n+constABlock S(const_iterator it) const\n+Get a view of the S matrix for the variable pointed to by the given key\n+iterator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:224\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bR\n+constABlock R() const\n+Return a view of the upper-triangular R block of the conditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:218\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+JacobianFactor BaseFactor\n+Typedef to our factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+GaussianConditional()\n+default constructor needed for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Conditional< BaseFactor, This > BaseConditional\n+Typedef to our conditional base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be\n+static shared_ptr Combine(ITERATOR firstConditional, ITERATOR lastConditional)\n+Combine several GaussianConditional into a single dense GC.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bd_\be_\bt_\be_\br_\bm_\bi_\bn_\ba_\bn_\bt\n+double determinant() const\n+Compute the determinant of the R matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:240\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+double operator()(const VectorValues &x) const\n+Evaluate probability density, sugar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:158\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bM_\be_\ba_\bn_\bA_\bn_\bd_\bS_\bt_\bd_\bd_\be_\bv\n+static shared_ptr sharedMeanAndStddev(Args &&... args)\n+Create shared pointer by forwarding arguments to fromMeanAndStddev.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS\n+constABlock S() const\n+Get a view of the parent blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:221\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bd\n+const constBVector d() const\n+Get a view of the r.h.s.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:227\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n An abstract virtual base class for JacobianFactor and HessianFactor.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual GaussianFactor::shared_ptr clone() const =0\n-Clone a factor (make a deep copy)\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc\n-static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::\n-optional< const VariableIndex & > variableIndex)\n-The default ordering generation function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-GaussianBayesTree BayesTreeType\n-Type of Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n-GaussianConditional ConditionalType\n-Type of conditionals from elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n-GaussianFactor FactorType\n-Type of factors in factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-GaussianEliminationTree EliminationTreeType\n-Type of elimination tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n-GaussianFactorGraph FactorGraphType\n-Type of the factor graph (e.g. GaussianFactorGraph)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n-GaussianBayesNet BayesNetType\n-Type of Bayes net from sequential elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-GaussianJunctionTree JunctionTreeType\n-Type of Junction tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr<\n-FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering\n-&keys)\n-The default dense elimination function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be\n-EliminateableFactorGraph< This > BaseEliminateable\n-Typedef to base elimination class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-void add(const TERMS &terms, const Vector &b, const SharedDiagonal\n-&model=SharedDiagonal())\n-Add an n-ary factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-GaussianFactorGraph(std::initializer_list< sharedFactor > factors)\n-Construct from an initializer lists of GaussianFactor shared pointers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-GaussianFactorGraph()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-void add(const GaussianFactor &factor)\n-Add a factor by value - makes a copy.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:127\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-void add(Key key1, const Matrix &A1, Key key2, const Matrix &A2, Key key3,\n-const Matrix &A3, const Vector &b, const SharedDiagonal &model=SharedDiagonal\n-())\n-Add a ternary factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:148\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-void add(const sharedFactor &factor)\n-Add a factor by pointer - stores pointer without copying the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-friend bool operator==(const GaussianFactorGraph &lhs, const\n-GaussianFactorGraph &rhs)\n-Check exact equality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:121\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bT_\bh_\bi_\bs\n-GaussianFactorGraph This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bK_\be_\by_\bs\n-KeySet Keys\n-Return the set of variables involved in the factors (computes a set union).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-void add(const Vector &b)\n-Add a null factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:133\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-void add(Key key1, const Matrix &A1, const Vector &b, const SharedDiagonal\n-&model=SharedDiagonal())\n-Add a unary factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-virtual ~GaussianFactorGraph()\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-void add(Key key1, const Matrix &A1, Key key2, const Matrix &A2, const Vector\n-&b, const SharedDiagonal &model=SharedDiagonal())\n-Add a binary factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:142\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-GaussianFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)\n-Construct from iterator over factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be\n-FactorGraph< GaussianFactor > Base\n-Typedef to base factor graph type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-GaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n-Implicit copy/downcast constructor to override explicit template container\n-constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-GaussianFactorGraph(const CONTAINER &factors)\n-Construct from container of factors (shared_ptr or plain objects)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-A junction tree specialized to Gaussian factors, i.e., it is a cluster tree\n-with Gaussian factors sto...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianJunctionTree.h:39\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n A Gaussian factor in the squared-error form.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:96\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n VectorValues represents a collection of vector-valued variables associated each\n with a unique integer...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-is the normalization constant.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00875.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00875.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianJunctionTree.h File Reference\n \n \n \n \n \n \n \n@@ -95,100 +95,42 @@\n \n \n \n \n
\n \n-
NoiseModel.h File Reference
\n+Namespaces
\n+
GaussianJunctionTree.h File Reference
\n \n
\n \n

Go to the source code of this file.

\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 Classes

class  gtsam::noiseModel::Base
 noiseModel::Base is the abstract base class for all noise models. More...
 
class  gtsam::noiseModel::Gaussian
 Gaussian implements the mathematical model |R*x|^2 = |y|^2 with R'*R=inv(Sigma) where y = whiten(x) = R*x x = unwhiten(x) = inv(R)*y as indeed |y|^2 = y'*y = x'*R'*R*x Various derived classes are available that are more efficient. More...
 
class  gtsam::noiseModel::Diagonal
 A diagonal noise model implements a diagonal covariance matrix, with the elements of the diagonal specified in a Vector. More...
 
class  gtsam::noiseModel::Constrained
 A Constrained constrained model is a specialization of Diagonal which allows some or all of the sigmas to be zero, forcing the error to be zero there. More...
 
class  gtsam::noiseModel::Isotropic
 An isotropic noise model corresponds to a scaled diagonal covariance To construct, use one of the static methods. More...
 
class  gtsam::noiseModel::Unit
 Unit: i.i.d. More...
 
class  gtsam::noiseModel::Robust
 Base class for robust error models The robust M-estimators above simply tell us how to re-weight the residual, and are isotropic kernels, in that they do not allow for correlated noise. More...
 
struct  gtsam::traits< noiseModel::Gaussian >
 traits More...
 
struct  gtsam::traits< noiseModel::Diagonal >
 
struct  gtsam::traits< noiseModel::Constrained >
 
struct  gtsam::traits< noiseModel::Isotropic >
 
struct  gtsam::traits< noiseModel::Unit >
class  gtsam::GaussianJunctionTree
 A junction tree specialized to Gaussian factors, i.e., it is a cluster tree with Gaussian factors stored in each cluster. More...
 
\n \n \n \n \n-\n-\n-\n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
namespace  gtsam::noiseModel
 All noise models live in the noiseModel namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Typedefs

typedef noiseModel::Base::shared_ptr gtsam::SharedNoiseModel
 Aliases.
 
\n-typedef noiseModel::Gaussian::shared_ptr gtsam::SharedGaussian
 
\n-typedef noiseModel::Diagonal::shared_ptr gtsam::SharedDiagonal
 
\n-typedef noiseModel::Constrained::shared_ptr gtsam::SharedConstrained
 
\n-typedef noiseModel::Isotropic::shared_ptr gtsam::SharedIsotropic
 
\n-\n-\n-\n

\n-Functions

\n-boost::optional< Vector > gtsam::noiseModel::checkIfDiagonal (const Matrix &M)
 
\n

Detailed Description

\n-
Date
Jan 13, 2010
\n-
Author
Richard Roberts
\n+
Date
Mar 29, 2013
\n+
Author
Frank Dellaert
\n
\n-Frank Dellaert
\n+Richard Roberts
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,83 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-NoiseModel.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GaussianJunctionTree.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be\n-\u00a0 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be is the abstract base class for all noise models.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn implements the mathematical model |R*x|^2 = |y|^2 with\n-\u00a0 R'*R=inv(Sigma) where y = whiten(x) = R*x x = unwhiten(x) = inv(R)*y\n- as indeed |y|^2 = y'*y = x'*R'*R*x Various derived classes are\n- available that are more efficient. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-\u00a0 A diagonal noise model implements a diagonal covariance matrix, with\n- the elements of the diagonal specified in a Vector. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n- A _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd constrained model is a specialization of _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl which\n-\u00a0 allows some or all of the sigmas to be zero, forcing the error to be\n- zero there. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc\n-\u00a0 An isotropic noise model corresponds to a scaled diagonal covariance\n- To construct, use one of the static methods. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt\n-\u00a0 _\bU_\bn_\bi_\bt: i.i.d. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt\n- _\bB_\ba_\bs_\be class for robust error models The robust M-estimators above\n-\u00a0 simply tell us how to re-weight the residual, and are isotropic\n- kernels, in that they do not allow for correlated noise. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+\u00a0 A junction tree specialized to Gaussian factors, i.e., it is a cluster\n+ tree with Gaussian factors stored in each cluster. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-\u00a0 All noise models live in the _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl namespace.\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n- typedef noiseModel::Base::shared_ptr\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-\u00a0 Aliases.\n-\u00a0\n- typedef noiseModel::Gaussian::shared_ptr\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bha\bar\bre\bed\bdG\bGa\bau\bus\bss\bsi\bia\ban\bn\n-\u00a0\n- typedef noiseModel::Diagonal::shared_ptr\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bha\bar\bre\bed\bdD\bDi\bia\bag\bgo\bon\bna\bal\bl\n-\u00a0\n-typedef noiseModel::Constrained::shared_ptr\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bha\bar\bre\bed\bdC\bCo\bon\bns\bst\btr\bra\bai\bin\bne\bed\bd\n-\u00a0\n- typedef noiseModel::Isotropic::shared_ptr\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bha\bar\bre\bed\bdI\bIs\bso\bot\btr\bro\bop\bpi\bic\bc\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-boost::optional< Vector >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\boi\bis\bse\beM\bMo\bod\bde\bel\bl:\b::\b:c\bch\bhe\bec\bck\bkI\bIf\bfD\bDi\bia\bag\bgo\bon\bna\bal\bl (const Matrix &M)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Jan 13, 2010\n+ Mar 29, 2013\n Author\n- Richard Roberts\n Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00875_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00875_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianJunctionTree.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
NoiseModel.h
\n+
GaussianJunctionTree.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,615 +114,50 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/base/Testable.h>
\n-
22#include <gtsam/base/Matrix.h>
\n-
23#include <gtsam/dllexport.h>
\n-
24#include <gtsam/linear/LossFunctions.h>
\n-
25
\n-
26#include <boost/serialization/nvp.hpp>
\n-
27#include <boost/serialization/extended_type_info.hpp>
\n-
28#include <boost/serialization/singleton.hpp>
\n-
29#include <boost/serialization/shared_ptr.hpp>
\n-
30#include <boost/serialization/optional.hpp>
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
35 namespace noiseModel {
\n-
36
\n-
37 // Forward declaration
\n-
38 class Gaussian;
\n-
39 class Diagonal;
\n-
40 class Constrained;
\n-
41 class Isotropic;
\n-
42 class Unit;
\n-
43 class RobustModel;
\n+\n+\n+\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
27 // Forward declarations
\n+
28 class GaussianEliminationTree;
\n+
29
\n+
\n+
38 class GTSAM_EXPORT GaussianJunctionTree :
\n+
39 public JunctionTree<GaussianBayesTree, GaussianFactorGraph> {
\n+
40 public:
\n+\n+\n+
43 typedef boost::shared_ptr<This> shared_ptr;
\n
44
\n-
45 //---------------------------------------------------------------------------------------
\n-
46
\n-
\n-
53 class GTSAM_EXPORT Base {
\n-
54
\n-
55 public:
\n-
56 typedef boost::shared_ptr<Base> shared_ptr;
\n-
57
\n-
58 protected:
\n-
59
\n-
60 size_t dim_;
\n-
61
\n-
62 public:
\n-
63
\n-
65 Base(size_t dim = 1):dim_(dim) {}
\n-
66 virtual ~Base() {}
\n-
67
\n-
69 virtual bool isConstrained() const { return false; } // default false
\n-
70
\n-
72 virtual bool isUnit() const { return false; } // default false
\n-
73
\n-
75 inline size_t dim() const { return dim_;}
\n-
76
\n-
77 virtual void print(const std::string& name = "") const = 0;
\n-
78
\n-
79 virtual bool equals(const Base& expected, double tol=1e-9) const = 0;
\n-
80
\n-
82 virtual Vector sigmas() const;
\n-
83
\n-
85 virtual Vector whiten(const Vector& v) const = 0;
\n-
86
\n-
88 virtual Matrix Whiten(const Matrix& H) const = 0;
\n-
89
\n-
91 virtual Vector unwhiten(const Vector& v) const = 0;
\n-
92
\n-
94 virtual double squaredMahalanobisDistance(const Vector& v) const;
\n-
95
\n-
\n-
97 virtual double mahalanobisDistance(const Vector& v) const {
\n-
98 return std::sqrt(squaredMahalanobisDistance(v));
\n-
99 }
\n+
53 GaussianJunctionTree(const GaussianEliminationTree& eliminationTree);
\n+
54 };
\n
\n-
100
\n-
\n-
102 virtual double loss(const double squared_distance) const {
\n-
103 return 0.5 * squared_distance;
\n-
104 }
\n-
\n-
105
\n-
106 virtual void WhitenSystem(std::vector<Matrix>& A, Vector& b) const = 0;
\n-
107 virtual void WhitenSystem(Matrix& A, Vector& b) const = 0;
\n-
108 virtual void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const = 0;
\n-
109 virtual void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const = 0;
\n-
110
\n-
\n-
112 virtual void whitenInPlace(Vector& v) const {
\n-
113 v = whiten(v);
\n-
114 }
\n-
\n-
115
\n-
\n-
117 virtual void unwhitenInPlace(Vector& v) const {
\n-
118 v = unwhiten(v);
\n-
119 }
\n-
\n-
120
\n-
\n-
122 virtual void whitenInPlace(Eigen::Block<Vector>& v) const {
\n-
123 v = whiten(v);
\n-
124 }
\n-
\n-
125
\n-
\n-
127 virtual void unwhitenInPlace(Eigen::Block<Vector>& v) const {
\n-
128 v = unwhiten(v);
\n-
129 }
\n-
\n-
130
\n-
\n-
132 virtual Vector unweightedWhiten(const Vector& v) const {
\n-
133 return whiten(v);
\n-
134 }
\n-
\n-
135
\n-
137 virtual double weight(const Vector& v) const { return 1.0; }
\n-
138
\n-
139 private:
\n-
141 friend class boost::serialization::access;
\n-
142 template<class ARCHIVE>
\n-
143 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
144 ar & BOOST_SERIALIZATION_NVP(dim_);
\n-
145 }
\n-
146 };
\n-
\n-
147
\n-
148 //---------------------------------------------------------------------------------------
\n-
149
\n-
\n-
162 class GTSAM_EXPORT Gaussian: public Base {
\n-
163
\n-
164 protected:
\n-
165
\n-
167 boost::optional<Matrix> sqrt_information_;
\n-
168
\n-
169 private:
\n-
170
\n-
174 const Matrix& thisR() const {
\n-
175 // should never happen
\n-
176 if (!sqrt_information_) throw std::runtime_error("Gaussian: has no R matrix");
\n-
177 return *sqrt_information_;
\n-
178 }
\n-
179
\n-
180
\n-
181 public:
\n-
182
\n-
183 typedef boost::shared_ptr<Gaussian> shared_ptr;
\n-
184
\n-
\n-
186 Gaussian(size_t dim = 1,
\n-
187 const boost::optional<Matrix>& sqrt_information = boost::none)
\n-
188 : Base(dim), sqrt_information_(sqrt_information) {}
\n-
\n-
189
\n-
190 ~Gaussian() override {}
\n-
191
\n-
197 static shared_ptr SqrtInformation(const Matrix& R, bool smart = true);
\n-
198
\n-
204 static shared_ptr Information(const Matrix& M, bool smart = true);
\n-
205
\n-
211 static shared_ptr Covariance(const Matrix& covariance, bool smart = true);
\n-
212
\n-
213 void print(const std::string& name) const override;
\n-
214 bool equals(const Base& expected, double tol=1e-9) const override;
\n-
215 Vector sigmas() const override;
\n-
216 Vector whiten(const Vector& v) const override;
\n-
217 Vector unwhiten(const Vector& v) const override;
\n-
218
\n-
223 Matrix Whiten(const Matrix& H) const override;
\n-
224
\n-
228 virtual void WhitenInPlace(Matrix& H) const;
\n-
229
\n-
233 virtual void WhitenInPlace(Eigen::Block<Matrix> H) const;
\n-
234
\n-
238 void WhitenSystem(std::vector<Matrix>& A, Vector& b) const override;
\n-
239 void WhitenSystem(Matrix& A, Vector& b) const override;
\n-
240 void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const override;
\n-
241 void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const override;
\n-
242
\n-
252 virtual boost::shared_ptr<Diagonal> QR(Matrix& Ab) const;
\n-
253
\n-
255 virtual Matrix R() const { return thisR();}
\n-
256
\n-
258 virtual Matrix information() const;
\n-
259
\n-
261 virtual Matrix covariance() const;
\n-
262
\n-
263 private:
\n-
265 friend class boost::serialization::access;
\n-
266 template<class ARCHIVE>
\n-
267 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
268 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
269 ar & BOOST_SERIALIZATION_NVP(sqrt_information_);
\n-
270 }
\n-
271
\n-
272 }; // Gaussian
\n-
\n-
273
\n-
274 //---------------------------------------------------------------------------------------
\n-
275
\n-
\n-
281 class GTSAM_EXPORT Diagonal : public Gaussian {
\n-
282 protected:
\n-
283
\n-
289 Vector sigmas_, invsigmas_, precisions_;
\n-
290
\n-
291 protected:
\n-
292
\n-
294 Diagonal(const Vector& sigmas);
\n-
295
\n-
296 public:
\n-
298 Diagonal();
\n-
299
\n-
300 typedef boost::shared_ptr<Diagonal> shared_ptr;
\n-
301
\n-
302 ~Diagonal() override {}
\n-
303
\n-
308 static shared_ptr Sigmas(const Vector& sigmas, bool smart = true);
\n-
309
\n-
316 static shared_ptr Variances(const Vector& variances, bool smart = true);
\n-
317
\n-
322 static shared_ptr Precisions(const Vector& precisions, bool smart = true);
\n-
323
\n-
324 void print(const std::string& name) const override;
\n-
325 Vector sigmas() const override { return sigmas_; }
\n-
326 Vector whiten(const Vector& v) const override;
\n-
327 Vector unwhiten(const Vector& v) const override;
\n-
328 Matrix Whiten(const Matrix& H) const override;
\n-
329 void WhitenInPlace(Matrix& H) const override;
\n-
330 void WhitenInPlace(Eigen::Block<Matrix> H) const override;
\n-
331
\n-
335 inline double sigma(size_t i) const { return sigmas_(i); }
\n-
336
\n-
340 inline const Vector& invsigmas() const { return invsigmas_; }
\n-
341 inline double invsigma(size_t i) const {return invsigmas_(i);}
\n-
342
\n-
346 inline const Vector& precisions() const { return precisions_; }
\n-
347 inline double precision(size_t i) const {return precisions_(i);}
\n-
348
\n-
\n-
352 Matrix R() const override {
\n-
353 return invsigmas().asDiagonal();
\n-
354 }
\n-
\n-
355
\n-
356 private:
\n-
358 friend class boost::serialization::access;
\n-
359 template<class ARCHIVE>
\n-
360 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
361 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Gaussian);
\n-
362 ar & BOOST_SERIALIZATION_NVP(sigmas_);
\n-
363 ar & BOOST_SERIALIZATION_NVP(invsigmas_);
\n-
364 }
\n-
365 }; // Diagonal
\n-
\n-
366
\n-
367 //---------------------------------------------------------------------------------------
\n-
368
\n-
\n-
381 class GTSAM_EXPORT Constrained : public Diagonal {
\n-
382 protected:
\n-
383
\n-
384 // Sigmas are contained in the base class
\n-
385 Vector mu_;
\n-
386
\n-
392 Constrained(const Vector& mu, const Vector& sigmas);
\n-
393
\n-
394 public:
\n-
395
\n-
396 typedef boost::shared_ptr<Constrained> shared_ptr;
\n-
397
\n-
404 Constrained(const Vector& sigmas = Z_1x1);
\n-
405
\n-
406 ~Constrained() override {}
\n-
407
\n-
409 bool isConstrained() const override { return true; }
\n-
410
\n-
412 bool constrained(size_t i) const;
\n-
413
\n-
415 const Vector& mu() const { return mu_; }
\n-
416
\n-
421 static shared_ptr MixedSigmas(const Vector& mu, const Vector& sigmas);
\n-
422
\n-
427 static shared_ptr MixedSigmas(const Vector& sigmas);
\n-
428
\n-
433 static shared_ptr MixedSigmas(double m, const Vector& sigmas);
\n-
434
\n-
439 static shared_ptr MixedVariances(const Vector& mu, const Vector& variances);
\n-
440 static shared_ptr MixedVariances(const Vector& variances);
\n-
441
\n-
446 static shared_ptr MixedPrecisions(const Vector& mu, const Vector& precisions);
\n-
447 static shared_ptr MixedPrecisions(const Vector& precisions);
\n-
448
\n-
454 double squaredMahalanobisDistance(const Vector& v) const override;
\n-
455
\n-
\n-
457 static shared_ptr All(size_t dim) {
\n-
458 return shared_ptr(new Constrained(Vector::Constant(dim, 1000.0), Vector::Constant(dim,0)));
\n-
459 }
\n-
\n-
460
\n-
\n-
462 static shared_ptr All(size_t dim, const Vector& mu) {
\n-
463 return shared_ptr(new Constrained(mu, Vector::Constant(dim,0)));
\n-
464 }
\n-
\n-
465
\n-
\n-
467 static shared_ptr All(size_t dim, double mu) {
\n-
468 return shared_ptr(new Constrained(Vector::Constant(dim, mu), Vector::Constant(dim,0)));
\n-
469 }
\n-
\n-
470
\n-
471 void print(const std::string& name) const override;
\n-
472
\n-
474 Vector whiten(const Vector& v) const override;
\n-
475
\n-
478 Matrix Whiten(const Matrix& H) const override;
\n-
479 void WhitenInPlace(Matrix& H) const override;
\n-
480 void WhitenInPlace(Eigen::Block<Matrix> H) const override;
\n-
481
\n-
491 Diagonal::shared_ptr QR(Matrix& Ab) const override;
\n-
492
\n-
497 shared_ptr unit() const;
\n-
498
\n-
499 private:
\n-
501 friend class boost::serialization::access;
\n-
502 template<class ARCHIVE>
\n-
503 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
504 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Diagonal);
\n-
505 ar & BOOST_SERIALIZATION_NVP(mu_);
\n-
506 }
\n-
507
\n-
508 }; // Constrained
\n-
\n-
509
\n-
510 //---------------------------------------------------------------------------------------
\n-
511
\n-
\n-
516 class GTSAM_EXPORT Isotropic : public Diagonal {
\n-
517 protected:
\n-
518 double sigma_, invsigma_;
\n-
519
\n-
\n-
521 Isotropic(size_t dim, double sigma) :
\n-
522 Diagonal(Vector::Constant(dim, sigma)),sigma_(sigma),invsigma_(1.0/sigma) {}
\n-
\n-
523
\n-
524 public:
\n-
525
\n-
526 /* dummy constructor to allow for serialization */
\n-
527 Isotropic() : Diagonal(Vector1::Constant(1.0)),sigma_(1.0),invsigma_(1.0) {}
\n-
528
\n-
529 ~Isotropic() override {}
\n-
530
\n-
531 typedef boost::shared_ptr<Isotropic> shared_ptr;
\n-
532
\n-
536 static shared_ptr Sigma(size_t dim, double sigma, bool smart = true);
\n-
537
\n-
544 static shared_ptr Variance(size_t dim, double variance, bool smart = true);
\n-
545
\n-
\n-
549 static shared_ptr Precision(size_t dim, double precision, bool smart = true) {
\n-
550 return Variance(dim, 1.0/precision, smart);
\n-
551 }
\n-
\n-
552
\n-
553 void print(const std::string& name) const override;
\n-
554 double squaredMahalanobisDistance(const Vector& v) const override;
\n-
555 Vector whiten(const Vector& v) const override;
\n-
556 Vector unwhiten(const Vector& v) const override;
\n-
557 Matrix Whiten(const Matrix& H) const override;
\n-
558 void WhitenInPlace(Matrix& H) const override;
\n-
559 void whitenInPlace(Vector& v) const override;
\n-
560 void WhitenInPlace(Eigen::Block<Matrix> H) const override;
\n-
561
\n-
565 inline double sigma() const { return sigma_; }
\n-
566
\n-
567 private:
\n-
569 friend class boost::serialization::access;
\n-
570 template<class ARCHIVE>
\n-
571 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
572 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Diagonal);
\n-
573 ar & BOOST_SERIALIZATION_NVP(sigma_);
\n-
574 ar & BOOST_SERIALIZATION_NVP(invsigma_);
\n-
575 }
\n-
576
\n-
577 };
\n-
\n-
578
\n-
579 //---------------------------------------------------------------------------------------
\n-
580
\n-
\n-
584 class GTSAM_EXPORT Unit : public Isotropic {
\n-
585 public:
\n-
586
\n-
587 typedef boost::shared_ptr<Unit> shared_ptr;
\n-
588
\n-
590 Unit(size_t dim=1): Isotropic(dim,1.0) {}
\n-
591
\n-
592 ~Unit() override {}
\n-
593
\n-
\n-
597 static shared_ptr Create(size_t dim) {
\n-
598 return shared_ptr(new Unit(dim));
\n-
599 }
\n-
\n-
600
\n-
602 bool isUnit() const override { return true; }
\n-
603
\n-
604 void print(const std::string& name) const override;
\n-
605 double squaredMahalanobisDistance(const Vector& v) const override;
\n-
606 Vector whiten(const Vector& v) const override { return v; }
\n-
607 Vector unwhiten(const Vector& v) const override { return v; }
\n-
608 Matrix Whiten(const Matrix& H) const override { return H; }
\n-
609 void WhitenInPlace(Matrix& /*H*/) const override {}
\n-
610 void WhitenInPlace(Eigen::Block<Matrix> /*H*/) const override {}
\n-
611 void whitenInPlace(Vector& /*v*/) const override {}
\n-
612 void unwhitenInPlace(Vector& /*v*/) const override {}
\n-
613 void whitenInPlace(Eigen::Block<Vector>& /*v*/) const override {}
\n-
614 void unwhitenInPlace(Eigen::Block<Vector>& /*v*/) const override {}
\n-
615
\n-
616 private:
\n-
618 friend class boost::serialization::access;
\n-
619 template<class ARCHIVE>
\n-
620 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
621 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Isotropic);
\n-
622 }
\n-
623 };
\n-
\n-
624
\n-
\n-
642 class GTSAM_EXPORT Robust : public Base {
\n-
643 public:
\n-
644 typedef boost::shared_ptr<Robust> shared_ptr;
\n-
645
\n-
646 protected:
\n-\n-\n-
649
\n-
650 const RobustModel::shared_ptr robust_;
\n-
651 const NoiseModel::shared_ptr noise_;
\n-
652
\n-
653 public:
\n-
654
\n-
656 Robust() {};
\n-
657
\n-
\n-
659 Robust(const RobustModel::shared_ptr robust, const NoiseModel::shared_ptr noise)
\n-
660 : Base(noise->dim()), robust_(robust), noise_(noise) {}
\n-
\n-
661
\n-
663 ~Robust() override {}
\n-
664
\n-
665 void print(const std::string& name) const override;
\n-
666 bool equals(const Base& expected, double tol=1e-9) const override;
\n-
667
\n-
669 const RobustModel::shared_ptr& robust() const { return robust_; }
\n-
670
\n-
672 const NoiseModel::shared_ptr& noise() const { return noise_; }
\n-
673
\n-
674 // Functions below are dummy but necessary for the noiseModel::Base
\n-
\n-
675 inline Vector whiten(const Vector& v) const override
\n-
676 { Vector r = v; this->WhitenSystem(r); return r; }
\n-
\n-
\n-
677 inline Matrix Whiten(const Matrix& A) const override
\n-
678 { Vector b; Matrix B=A; this->WhitenSystem(B,b); return B; }
\n-
\n-
\n-
679 inline Vector unwhiten(const Vector& /*v*/) const override
\n-
680 { throw std::invalid_argument("unwhiten is not currently supported for robust noise models."); }
\n-
\n-
\n-
682 double loss(const double squared_distance) const override {
\n-
683 return robust_->loss(std::sqrt(squared_distance));
\n-
684 }
\n-
\n-
685
\n-
686 // NOTE: This is special because in whiten the base version will do the reweighting
\n-
687 // which is incorrect!
\n-
\n-
688 double squaredMahalanobisDistance(const Vector& v) const override {
\n-
689 return noise_->squaredMahalanobisDistance(v);
\n-
690 }
\n-
\n-
691
\n-
692 // These are really robust iterated re-weighting support functions
\n-
693 virtual void WhitenSystem(Vector& b) const;
\n-
694 void WhitenSystem(std::vector<Matrix>& A, Vector& b) const override;
\n-
695 void WhitenSystem(Matrix& A, Vector& b) const override;
\n-
696 void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const override;
\n-
697 void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const override;
\n-
698
\n-
699 Vector unweightedWhiten(const Vector& v) const override;
\n-
700 double weight(const Vector& v) const override;
\n-
701
\n-
702 static shared_ptr Create(
\n-
703 const RobustModel::shared_ptr &robust, const NoiseModel::shared_ptr noise);
\n-
704
\n-
705 private:
\n-
707 friend class boost::serialization::access;
\n-
708 template<class ARCHIVE>
\n-
709 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
710 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
711 ar & boost::serialization::make_nvp("robust_", const_cast<RobustModel::shared_ptr&>(robust_));
\n-
712 ar & boost::serialization::make_nvp("noise_", const_cast<NoiseModel::shared_ptr&>(noise_));
\n-
713 }
\n-
714 };
\n-
\n-
715
\n-
716 // Helper function
\n-
717 GTSAM_EXPORT boost::optional<Vector> checkIfDiagonal(const Matrix& M);
\n-
718
\n-
719 } // namespace noiseModel
\n-
720
\n-
724 typedef noiseModel::Base::shared_ptr SharedNoiseModel;
\n-
725 typedef noiseModel::Gaussian::shared_ptr SharedGaussian;
\n-
726 typedef noiseModel::Diagonal::shared_ptr SharedDiagonal;
\n-
727 typedef noiseModel::Constrained::shared_ptr SharedConstrained;
\n-
728 typedef noiseModel::Isotropic::shared_ptr SharedIsotropic;
\n-
729
\n-
731 template<> struct traits<noiseModel::Gaussian> : public Testable<noiseModel::Gaussian> {};
\n-
732 template<> struct traits<noiseModel::Diagonal> : public Testable<noiseModel::Diagonal> {};
\n-
733 template<> struct traits<noiseModel::Constrained> : public Testable<noiseModel::Constrained> {};
\n-
734 template<> struct traits<noiseModel::Isotropic> : public Testable<noiseModel::Isotropic> {};
\n-
735 template<> struct traits<noiseModel::Unit> : public Testable<noiseModel::Unit> {};
\n-
736
\n-
737} //\\ namespace gtsam
\n-
738
\n-
739
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Concept check for values that can be used in unit tests.
\n+
55
\n+
56}
\n+
The junction tree.
\n+
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n+
Linear Factor Graph where all factors are Gaussians.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Pure virtual class for all robust error function classes.
Definition LossFunctions.h:63
\n-
noiseModel::Base is the abstract base class for all noise models.
Definition NoiseModel.h:53
\n-
virtual bool isConstrained() const
true if a constrained noise model, saves slow/clumsy dynamic casting
Definition NoiseModel.h:69
\n-
virtual void whitenInPlace(Vector &v) const
in-place whiten, override if can be done more efficiently
Definition NoiseModel.h:112
\n-
size_t dim() const
Dimensionality.
Definition NoiseModel.h:75
\n-
virtual void unwhitenInPlace(Eigen::Block< Vector > &v) const
in-place unwhiten, override if can be done more efficiently
Definition NoiseModel.h:127
\n-
virtual void whitenInPlace(Eigen::Block< Vector > &v) const
in-place whiten, override if can be done more efficiently
Definition NoiseModel.h:122
\n-
virtual Vector whiten(const Vector &v) const =0
Whiten an error vector.
\n-
virtual double mahalanobisDistance(const Vector &v) const
Mahalanobis distance.
Definition NoiseModel.h:97
\n-
virtual bool isUnit() const
true if a unit noise model, saves slow/clumsy dynamic casting
Definition NoiseModel.h:72
\n-
virtual double weight(const Vector &v) const
get the weight from the effective loss function on residual vector v
Definition NoiseModel.h:137
\n-
virtual Vector unweightedWhiten(const Vector &v) const
Useful function for robust noise models to get the unweighted but whitened error.
Definition NoiseModel.h:132
\n-
virtual Vector unwhiten(const Vector &v) const =0
Unwhiten an error vector.
\n-
virtual double loss(const double squared_distance) const
loss function, input is Mahalanobis distance
Definition NoiseModel.h:102
\n-
virtual void unwhitenInPlace(Vector &v) const
in-place unwhiten, override if can be done more efficiently
Definition NoiseModel.h:117
\n-
virtual Matrix Whiten(const Matrix &H) const =0
Whiten a matrix.
\n-
Base(size_t dim=1)
primary constructor
Definition NoiseModel.h:65
\n-
Gaussian implements the mathematical model |R*x|^2 = |y|^2 with R'*R=inv(Sigma) where y = whiten(x) =...
Definition NoiseModel.h:162
\n-
virtual Matrix R() const
Return R itself, but note that Whiten(H) is cheaper than R*H.
Definition NoiseModel.h:255
\n-
Gaussian(size_t dim=1, const boost::optional< Matrix > &sqrt_information=boost::none)
constructor takes square root information matrix
Definition NoiseModel.h:186
\n-
boost::optional< Matrix > sqrt_information_
Matrix square root of information matrix (R)
Definition NoiseModel.h:167
\n-
A diagonal noise model implements a diagonal covariance matrix, with the elements of the diagonal spe...
Definition NoiseModel.h:281
\n-
Matrix R() const override
Return R itself, but note that Whiten(H) is cheaper than R*H.
Definition NoiseModel.h:352
\n-
Vector sigmas_
Standard deviations (sigmas), their inverse and inverse square (weights/precisions) These are all com...
Definition NoiseModel.h:289
\n-
double sigma(size_t i) const
Return standard deviations (sqrt of diagonal)
Definition NoiseModel.h:335
\n-
const Vector & invsigmas() const
Return sqrt precisions.
Definition NoiseModel.h:340
\n-
Vector sigmas() const override
Calculate standard deviations.
Definition NoiseModel.h:325
\n-
const Vector & precisions() const
Return precisions.
Definition NoiseModel.h:346
\n-
A Constrained constrained model is a specialization of Diagonal which allows some or all of the sigma...
Definition NoiseModel.h:381
\n-
bool isConstrained() const override
true if a constrained noise mode, saves slow/clumsy dynamic casting
Definition NoiseModel.h:409
\n-
static shared_ptr All(size_t dim, const Vector &mu)
Fully constrained variations.
Definition NoiseModel.h:462
\n-
static shared_ptr All(size_t dim, double mu)
Fully constrained variations with a mu parameter.
Definition NoiseModel.h:467
\n-
static shared_ptr All(size_t dim)
Fully constrained variations.
Definition NoiseModel.h:457
\n-
const Vector & mu() const
Access mu as a vector.
Definition NoiseModel.h:415
\n-
Vector mu_
Penalty function weight - needs to be large enough to dominate soft constraints.
Definition NoiseModel.h:385
\n-
An isotropic noise model corresponds to a scaled diagonal covariance To construct,...
Definition NoiseModel.h:516
\n-
double sigma() const
Return standard deviation.
Definition NoiseModel.h:565
\n-
static shared_ptr Precision(size_t dim, double precision, bool smart=true)
An isotropic noise model created by specifying a precision.
Definition NoiseModel.h:549
\n-
Isotropic(size_t dim, double sigma)
protected constructor takes sigma
Definition NoiseModel.h:521
\n-
Unit: i.i.d.
Definition NoiseModel.h:584
\n-
void WhitenInPlace(Eigen::Block< Matrix >) const override
In-place version.
Definition NoiseModel.h:610
\n-
Vector unwhiten(const Vector &v) const override
Unwhiten an error vector.
Definition NoiseModel.h:607
\n-
void whitenInPlace(Eigen::Block< Vector > &) const override
in-place whiten, override if can be done more efficiently
Definition NoiseModel.h:613
\n-
bool isUnit() const override
true if a unit noise model, saves slow/clumsy dynamic casting
Definition NoiseModel.h:602
\n-
Unit(size_t dim=1)
constructor for serialization
Definition NoiseModel.h:590
\n-
Vector whiten(const Vector &v) const override
Whiten an error vector.
Definition NoiseModel.h:606
\n-
static shared_ptr Create(size_t dim)
Create a unit covariance noise model.
Definition NoiseModel.h:597
\n-
void unwhitenInPlace(Vector &) const override
in-place unwhiten, override if can be done more efficiently
Definition NoiseModel.h:612
\n-
void unwhitenInPlace(Eigen::Block< Vector > &) const override
in-place unwhiten, override if can be done more efficiently
Definition NoiseModel.h:614
\n-
void whitenInPlace(Vector &) const override
in-place whiten, override if can be done more efficiently
Definition NoiseModel.h:611
\n-
void WhitenInPlace(Matrix &) const override
In-place version.
Definition NoiseModel.h:609
\n-
Matrix Whiten(const Matrix &H) const override
Whiten a matrix.
Definition NoiseModel.h:608
\n-
Base class for robust error models The robust M-estimators above simply tell us how to re-weight the ...
Definition NoiseModel.h:642
\n-
const RobustModel::shared_ptr & robust() const
Return the contained robust error function.
Definition NoiseModel.h:669
\n-
Robust()
Default Constructor for serialization.
Definition NoiseModel.h:656
\n-
Robust(const RobustModel::shared_ptr robust, const NoiseModel::shared_ptr noise)
Constructor.
Definition NoiseModel.h:659
\n-
double squaredMahalanobisDistance(const Vector &v) const override
Squared Mahalanobis distance v'*R'*R*v = <R*v,R*v>
Definition NoiseModel.h:688
\n-
const NoiseModel::shared_ptr noise_
noise model used
Definition NoiseModel.h:651
\n-
double loss(const double squared_distance) const override
Compute loss from the m-estimator using the Mahalanobis distance.
Definition NoiseModel.h:682
\n-
Vector unwhiten(const Vector &) const override
Unwhiten an error vector.
Definition NoiseModel.h:679
\n-
Matrix Whiten(const Matrix &A) const override
Whiten a matrix.
Definition NoiseModel.h:677
\n-
const RobustModel::shared_ptr robust_
robust error function used
Definition NoiseModel.h:650
\n-
~Robust() override
Destructor.
Definition NoiseModel.h:663
\n-
const NoiseModel::shared_ptr & noise() const
Return the contained noise model.
Definition NoiseModel.h:672
\n-
Vector whiten(const Vector &v) const override
Whiten an error vector.
Definition NoiseModel.h:675
\n+
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n+
Definition GaussianEliminationTree.h:29
\n+
A junction tree specialized to Gaussian factors, i.e., it is a cluster tree with Gaussian factors sto...
Definition GaussianJunctionTree.h:39
\n+
GaussianJunctionTree This
This class.
Definition GaussianJunctionTree.h:42
\n+
JunctionTree< GaussianBayesTree, GaussianFactorGraph > Base
Base class.
Definition GaussianJunctionTree.h:41
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition GaussianJunctionTree.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NoiseModel.h\n+GaussianJunctionTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,790 +16,62 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-23#include \n-24#include \n-25\n-26#include \n-27#include \n-28#include \n-29#include \n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-35 namespace noiseModel {\n-36\n-37 // Forward declaration\n-38 class Gaussian;\n-39 class Diagonal;\n-40 class Constrained;\n-41 class Isotropic;\n-42 class Unit;\n-43 class RobustModel;\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+27 // Forward declarations\n+28 class GaussianEliminationTree;\n+29\n+_\b3_\b8 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n+39 public _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n+40 public:\n+_\b4_\b1 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n+_\b4_\b2 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+_\b4_\b3 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n 44\n-45 //--------------------------------------------------------------------------\n--------------\n-46\n-_\b5_\b3 class GTSAM_EXPORT _\bB_\ba_\bs_\be {\n-54\n-55 public:\n-56 typedef boost::shared_ptr shared_ptr;\n-57\n-58 protected:\n-59\n-60 size_t dim_;\n-61\n-62 public:\n-63\n-_\b6_\b5 _\bB_\ba_\bs_\be(size_t dim = 1):dim_(dim) {}\n-66 virtual _\b~_\bB_\ba_\bs_\be() {}\n-67\n-_\b6_\b9 virtual bool _\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd() const { return false; } // default false\n-70\n-_\b7_\b2 virtual bool _\bi_\bs_\bU_\bn_\bi_\bt() const { return false; } // default false\n-73\n-_\b7_\b5 inline size_t _\bd_\bi_\bm() const { return dim_;}\n-76\n-77 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& name = \"\") const = 0;\n-78\n-79 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be& expected, double tol=1e-9) const = 0;\n-80\n-82 virtual Vector sigmas() const;\n-83\n-_\b8_\b5 virtual Vector _\bw_\bh_\bi_\bt_\be_\bn(const Vector& v) const = 0;\n-86\n-_\b8_\b8 virtual Matrix _\bW_\bh_\bi_\bt_\be_\bn(const Matrix& H) const = 0;\n-89\n-_\b9_\b1 virtual Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn(const Vector& v) const = 0;\n-92\n-94 virtual double squaredMahalanobisDistance(const Vector& v) const;\n-95\n-_\b9_\b7 virtual double _\bm_\ba_\bh_\ba_\bl_\ba_\bn_\bo_\bb_\bi_\bs_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be(const Vector& v) const {\n-98 return std::sqrt(squaredMahalanobisDistance(v));\n-99 }\n-100\n-_\b1_\b0_\b2 virtual double _\bl_\bo_\bs_\bs(const double squared_distance) const {\n-103 return 0.5 * squared_distance;\n-104 }\n-105\n-106 virtual void WhitenSystem(std::vector& A, Vector& b) const = 0;\n-107 virtual void WhitenSystem(Matrix& A, Vector& b) const = 0;\n-108 virtual void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const = 0;\n-109 virtual void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b)\n-const = 0;\n-110\n-_\b1_\b1_\b2 virtual void _\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Vector& v) const {\n-113 v = whiten(v);\n-114 }\n-115\n-_\b1_\b1_\b7 virtual void _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Vector& v) const {\n-118 v = unwhiten(v);\n-119 }\n-120\n-_\b1_\b2_\b2 virtual void _\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Eigen::Block& v) const {\n-123 v = whiten(v);\n-124 }\n-125\n-_\b1_\b2_\b7 virtual void _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Eigen::Block& v) const {\n-128 v = unwhiten(v);\n-129 }\n-130\n-_\b1_\b3_\b2 virtual Vector _\bu_\bn_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\bW_\bh_\bi_\bt_\be_\bn(const Vector& v) const {\n-133 return whiten(v);\n-134 }\n-135\n-_\b1_\b3_\b7 virtual double _\bw_\be_\bi_\bg_\bh_\bt(const Vector& v) const { return 1.0; }\n-138\n-139 private:\n-_\b1_\b4_\b1 friend class boost::serialization::access;\n-142 template\n-143 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-144 ar & BOOST_SERIALIZATION_NVP(dim_);\n-145 }\n-146 };\n-147\n-148 //-------------------------------------------------------------------------\n---------------\n-149\n-_\b1_\b6_\b2 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn: public _\bB_\ba_\bs_\be {\n-163\n-164 protected:\n-165\n-_\b1_\b6_\b7 boost::optional _\bs_\bq_\br_\bt_\b__\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_;\n-168\n-169 private:\n-170\n-174 const Matrix& thisR() const {\n-175 // should never happen\n-176 if (!sqrt_information_) throw std::runtime_error(\"Gaussian: has no R\n-matrix\");\n-177 return *sqrt_information_;\n-178 }\n-179\n-180\n-181 public:\n-182\n-183 typedef boost::shared_ptr shared_ptr;\n-184\n-_\b1_\b8_\b6 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn(size_t dim = 1,\n-187 const boost::optional& sqrt_information = boost::none)\n-188 : _\bB_\ba_\bs_\be(dim), sqrt_information_(sqrt_information) {}\n-189\n-190 _\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn() override {}\n-191\n-197 static shared_ptr SqrtInformation(const Matrix& R, bool smart = true);\n-198\n-204 static shared_ptr Information(const Matrix& M, bool smart = true);\n-205\n-211 static shared_ptr Covariance(const Matrix& covariance, bool smart = true);\n-212\n-213 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n-214 bool _\be_\bq_\bu_\ba_\bl_\bs(const Base& expected, double tol=1e-9) const override;\n-215 Vector sigmas() const override;\n-216 Vector whiten(const Vector& v) const override;\n-217 Vector unwhiten(const Vector& v) const override;\n-218\n-223 Matrix Whiten(const Matrix& H) const override;\n-224\n-228 virtual void WhitenInPlace(Matrix& H) const;\n-229\n-233 virtual void WhitenInPlace(Eigen::Block H) const;\n-234\n-238 void WhitenSystem(std::vector& A, Vector& b) const override;\n-239 void WhitenSystem(Matrix& A, Vector& b) const override;\n-240 void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const override;\n-241 void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const\n-override;\n-242\n-252 virtual boost::shared_ptr QR(Matrix& Ab) const;\n-253\n-_\b2_\b5_\b5 virtual Matrix _\bR() const { return thisR();}\n-256\n-258 virtual Matrix information() const;\n-259\n-261 virtual Matrix covariance() const;\n-262\n-263 private:\n-_\b2_\b6_\b5 friend class boost::serialization::access;\n-266 template\n-267 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-268 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-269 ar & BOOST_SERIALIZATION_NVP(sqrt_information_);\n-270 }\n-271\n-272 }; // Gaussian\n-273\n-274 //-------------------------------------------------------------------------\n---------------\n-275\n-_\b2_\b8_\b1 class GTSAM_EXPORT _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl : public _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn {\n-282 protected:\n-283\n-_\b2_\b8_\b9 Vector _\bs_\bi_\bg_\bm_\ba_\bs_\b_, invsigmas_, precisions_;\n-290\n-291 protected:\n-292\n-294 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(const Vector& sigmas);\n-295\n-296 public:\n-298 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl();\n-299\n-300 typedef boost::shared_ptr shared_ptr;\n-301\n-302 _\b~_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl() override {}\n-303\n-308 static shared_ptr Sigmas(const Vector& sigmas, bool smart = true);\n-309\n-316 static shared_ptr Variances(const Vector& variances, bool smart = true);\n-317\n-322 static shared_ptr Precisions(const Vector& precisions, bool smart = true);\n-323\n-324 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n-_\b3_\b2_\b5 Vector _\bs_\bi_\bg_\bm_\ba_\bs() const override { return sigmas_; }\n-326 Vector whiten(const Vector& v) const override;\n-327 Vector unwhiten(const Vector& v) const override;\n-328 Matrix Whiten(const Matrix& H) const override;\n-329 void WhitenInPlace(Matrix& H) const override;\n-330 void WhitenInPlace(Eigen::Block H) const override;\n-331\n-_\b3_\b3_\b5 inline double _\bs_\bi_\bg_\bm_\ba(size_t i) const { return sigmas_(i); }\n-336\n-_\b3_\b4_\b0 inline const Vector& _\bi_\bn_\bv_\bs_\bi_\bg_\bm_\ba_\bs() const { return invsigmas_; }\n-341 inline double invsigma(size_t i) const {return invsigmas_(i);}\n-342\n-_\b3_\b4_\b6 inline const Vector& _\bp_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bs() const { return precisions_; }\n-347 inline double precision(size_t i) const {return precisions_(i);}\n-348\n-_\b3_\b5_\b2 Matrix _\bR() const override {\n-353 return invsigmas().asDiagonal();\n-354 }\n-355\n-356 private:\n-_\b3_\b5_\b8 friend class boost::serialization::access;\n-359 template\n-360 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-361 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn);\n-362 ar & BOOST_SERIALIZATION_NVP(sigmas_);\n-363 ar & BOOST_SERIALIZATION_NVP(invsigmas_);\n-364 }\n-365 }; // Diagonal\n-366\n-367 //-------------------------------------------------------------------------\n---------------\n-368\n-_\b3_\b8_\b1 class GTSAM_EXPORT _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd : public _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl {\n-382 protected:\n-383\n-384 // Sigmas are contained in the base class\n-_\b3_\b8_\b5 Vector _\bm_\bu_\b_;\n-386\n-392 _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(const Vector& mu, const Vector& sigmas);\n-393\n-394 public:\n-395\n-396 typedef boost::shared_ptr shared_ptr;\n-397\n-404 _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(const Vector& sigmas = Z_1x1);\n-405\n-406 _\b~_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd() override {}\n-407\n-_\b4_\b0_\b9 bool _\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd() const override { return true; }\n-410\n-412 bool constrained(size_t i) const;\n-413\n-_\b4_\b1_\b5 const Vector& _\bm_\bu() const { return mu_; }\n-416\n-421 static shared_ptr MixedSigmas(const Vector& mu, const Vector& sigmas);\n-422\n-427 static shared_ptr MixedSigmas(const Vector& sigmas);\n-428\n-433 static shared_ptr MixedSigmas(double m, const Vector& sigmas);\n-434\n-439 static shared_ptr MixedVariances(const Vector& mu, const Vector&\n-variances);\n-440 static shared_ptr MixedVariances(const Vector& variances);\n-441\n-446 static shared_ptr MixedPrecisions(const Vector& mu, const Vector&\n-precisions);\n-447 static shared_ptr MixedPrecisions(const Vector& precisions);\n-448\n-454 double squaredMahalanobisDistance(const Vector& v) const override;\n-455\n-_\b4_\b5_\b7 static shared_ptr _\bA_\bl_\bl(size_t dim) {\n-458 return shared_ptr(new _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(Vector::Constant(dim, 1000.0), Vector::\n-Constant(dim,0)));\n-459 }\n-460\n-_\b4_\b6_\b2 static shared_ptr _\bA_\bl_\bl(size_t dim, const Vector& mu) {\n-463 return shared_ptr(new _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(mu, Vector::Constant(dim,0)));\n-464 }\n-465\n-_\b4_\b6_\b7 static shared_ptr _\bA_\bl_\bl(size_t dim, double mu) {\n-468 return shared_ptr(new _\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd(Vector::Constant(dim, mu), Vector::\n-Constant(dim,0)));\n-469 }\n-470\n-471 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n-472\n-474 Vector whiten(const Vector& v) const override;\n-475\n-478 Matrix Whiten(const Matrix& H) const override;\n-479 void WhitenInPlace(Matrix& H) const override;\n-480 void WhitenInPlace(Eigen::Block H) const override;\n-481\n-491 Diagonal::shared_ptr QR(Matrix& Ab) const override;\n-492\n-497 shared_ptr unit() const;\n-498\n-499 private:\n-_\b5_\b0_\b1 friend class boost::serialization::access;\n-502 template\n-503 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-504 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl);\n-505 ar & BOOST_SERIALIZATION_NVP(mu_);\n-506 }\n-507\n-508 }; // Constrained\n-509\n-510 //-------------------------------------------------------------------------\n---------------\n-511\n-_\b5_\b1_\b6 class GTSAM_EXPORT _\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc : public _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl {\n-517 protected:\n-518 double sigma_, invsigma_;\n-519\n-_\b5_\b2_\b1 _\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc(size_t dim, double sigma) :\n-522 _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(Vector::Constant(dim, sigma)),sigma_(sigma),invsigma_(1.0/sigma)\n-{}\n-523\n-524 public:\n-525\n-526 /* dummy constructor to allow for serialization */\n-527 _\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc() : _\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(Vector1::Constant(1.0)),sigma_(1.0),invsigma_(1.0)\n-{}\n-528\n-529 ~Isotropic() override {}\n-530\n-531 typedef boost::shared_ptr shared_ptr;\n-532\n-536 static shared_ptr Sigma(size_t dim, double sigma, bool smart = true);\n-537\n-544 static shared_ptr Variance(size_t dim, double variance, bool smart = true);\n-545\n-_\b5_\b4_\b9 static shared_ptr _\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn(size_t dim, double precision, bool smart =\n-true) {\n-550 return Variance(dim, 1.0/precision, smart);\n-551 }\n-552\n-553 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n-554 double squaredMahalanobisDistance(const Vector& v) const override;\n-555 Vector whiten(const Vector& v) const override;\n-556 Vector unwhiten(const Vector& v) const override;\n-557 Matrix Whiten(const Matrix& H) const override;\n-558 void WhitenInPlace(Matrix& H) const override;\n-559 void whitenInPlace(Vector& v) const override;\n-560 void WhitenInPlace(Eigen::Block H) const override;\n-561\n-_\b5_\b6_\b5 inline double _\bs_\bi_\bg_\bm_\ba() const { return sigma_; }\n-566\n-567 private:\n-_\b5_\b6_\b9 friend class boost::serialization::access;\n-570 template\n-571 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-572 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl);\n-573 ar & BOOST_SERIALIZATION_NVP(sigma_);\n-574 ar & BOOST_SERIALIZATION_NVP(invsigma_);\n-575 }\n-576\n-577 };\n-578\n-579 //-------------------------------------------------------------------------\n---------------\n-580\n-_\b5_\b8_\b4 class GTSAM_EXPORT _\bU_\bn_\bi_\bt : public _\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc {\n-585 public:\n-586\n-587 typedef boost::shared_ptr shared_ptr;\n-588\n-_\b5_\b9_\b0 _\bU_\bn_\bi_\bt(size_t dim=1): _\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc(dim,1.0) {}\n-591\n-592 _\b~_\bU_\bn_\bi_\bt() override {}\n-593\n-_\b5_\b9_\b7 static shared_ptr _\bC_\br_\be_\ba_\bt_\be(size_t dim) {\n-598 return shared_ptr(new _\bU_\bn_\bi_\bt(dim));\n-599 }\n-600\n-_\b6_\b0_\b2 bool _\bi_\bs_\bU_\bn_\bi_\bt() const override { return true; }\n-603\n-604 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n-605 double squaredMahalanobisDistance(const Vector& v) const override;\n-_\b6_\b0_\b6 Vector _\bw_\bh_\bi_\bt_\be_\bn(const Vector& v) const override { return v; }\n-_\b6_\b0_\b7 Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn(const Vector& v) const override { return v; }\n-_\b6_\b0_\b8 Matrix _\bW_\bh_\bi_\bt_\be_\bn(const Matrix& H) const override { return H; }\n-_\b6_\b0_\b9 void _\bW_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Matrix& /*H*/) const override {}\n-_\b6_\b1_\b0 void _\bW_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Eigen::Block /*H*/) const override {}\n-_\b6_\b1_\b1 void _\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Vector& /*v*/) const override {}\n-_\b6_\b1_\b2 void _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Vector& /*v*/) const override {}\n-_\b6_\b1_\b3 void _\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Eigen::Block& /*v*/) const override {}\n-_\b6_\b1_\b4 void _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be(Eigen::Block& /*v*/) const override {}\n-615\n-616 private:\n-_\b6_\b1_\b8 friend class boost::serialization::access;\n-619 template\n-620 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-621 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc);\n-622 }\n-623 };\n-624\n-_\b6_\b4_\b2 class GTSAM_EXPORT _\bR_\bo_\bb_\bu_\bs_\bt : public _\bB_\ba_\bs_\be {\n-643 public:\n-644 typedef boost::shared_ptr shared_ptr;\n-645\n-646 protected:\n-647 typedef _\bm_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be _\bR_\bo_\bb_\bu_\bs_\bt_\bM_\bo_\bd_\be_\bl;\n-648 typedef _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl;\n-649\n-_\b6_\b5_\b0 const RobustModel::shared_ptr _\br_\bo_\bb_\bu_\bs_\bt_\b_;\n-_\b6_\b5_\b1 const NoiseModel::shared_ptr _\bn_\bo_\bi_\bs_\be_\b_;\n-652\n-653 public:\n-654\n-_\b6_\b5_\b6 _\bR_\bo_\bb_\bu_\bs_\bt() {};\n-657\n-_\b6_\b5_\b9 _\bR_\bo_\bb_\bu_\bs_\bt(const RobustModel::shared_ptr robust, const NoiseModel::shared_ptr\n-noise)\n-660 : _\bB_\ba_\bs_\be(noise->dim()), robust_(robust), noise_(noise) {}\n-661\n-_\b6_\b6_\b3 _\b~_\bR_\bo_\bb_\bu_\bs_\bt() override {}\n-664\n-665 void _\bp_\br_\bi_\bn_\bt(const std::string& name) const override;\n-666 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be& expected, double tol=1e-9) const override;\n-667\n-_\b6_\b6_\b9 const RobustModel::shared_ptr& _\br_\bo_\bb_\bu_\bs_\bt() const { return robust_; }\n-670\n-_\b6_\b7_\b2 const NoiseModel::shared_ptr& _\bn_\bo_\bi_\bs_\be() const { return noise_; }\n-673\n-674 // Functions below are dummy but necessary for the noiseModel::Base\n-_\b6_\b7_\b5 inline Vector _\bw_\bh_\bi_\bt_\be_\bn(const Vector& v) const override\n-676 { Vector r = v; this->WhitenSystem(r); return r; }\n-_\b6_\b7_\b7 inline Matrix _\bW_\bh_\bi_\bt_\be_\bn(const Matrix& A) const override\n-678 { Vector b; Matrix B=A; this->WhitenSystem(B,b); return B; }\n-_\b6_\b7_\b9 inline Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn(const Vector& /*v*/) const override\n-680 { throw std::invalid_argument(\"unwhiten is not currently supported for\n-robust noise models.\"); }\n-_\b6_\b8_\b2 double _\bl_\bo_\bs_\bs(const double squared_distance) const override {\n-683 return robust_->loss(std::sqrt(squared_distance));\n-684 }\n-685\n-686 // NOTE: This is special because in whiten the base version will do the\n-reweighting\n-687 // which is incorrect!\n-_\b6_\b8_\b8 double _\bs_\bq_\bu_\ba_\br_\be_\bd_\bM_\ba_\bh_\ba_\bl_\ba_\bn_\bo_\bb_\bi_\bs_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be(const Vector& v) const override {\n-689 return noise_->squaredMahalanobisDistance(v);\n-690 }\n-691\n-692 // These are really robust iterated re-weighting support functions\n-693 virtual void WhitenSystem(Vector& b) const;\n-694 void WhitenSystem(std::vector& A, Vector& b) const override;\n-695 void WhitenSystem(Matrix& A, Vector& b) const override;\n-696 void WhitenSystem(Matrix& A1, Matrix& A2, Vector& b) const override;\n-697 void WhitenSystem(Matrix& A1, Matrix& A2, Matrix& A3, Vector& b) const\n-override;\n-698\n-699 Vector unweightedWhiten(const Vector& v) const override;\n-700 double weight(const Vector& v) const override;\n-701\n-702 static shared_ptr Create(\n-703 const RobustModel::shared_ptr &robust, const NoiseModel::shared_ptr noise);\n-704\n-705 private:\n-_\b7_\b0_\b7 friend class boost::serialization::access;\n-708 template\n-709 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-710 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-711 ar & boost::serialization::make_nvp(\"robust_\", const_cast(robust_));\n-712 ar & boost::serialization::make_nvp(\"noise_\", const_cast(noise_));\n-713 }\n-714 };\n-715\n-716 // Helper function\n-717 GTSAM_EXPORT boost::optional checkIfDiagonal(const Matrix& M);\n-718\n-719 } // namespace noiseModel\n-720\n-_\b7_\b2_\b4 typedef noiseModel::Base::shared_ptr _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl;\n-725 typedef noiseModel::Gaussian::shared_ptr SharedGaussian;\n-726 typedef noiseModel::Diagonal::shared_ptr SharedDiagonal;\n-727 typedef noiseModel::Constrained::shared_ptr SharedConstrained;\n-728 typedef noiseModel::Isotropic::shared_ptr SharedIsotropic;\n-729\n-_\b7_\b3_\b1 template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-_\b7_\b3_\b2 template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-_\b7_\b3_\b3 template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-_\b7_\b3_\b4 template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-_\b7_\b3_\b5 template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-736\n-737} //\\ namespace gtsam\n-738\n-739\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n+53 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be& eliminationTree);\n+54 };\n+55\n+56}\n+_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+The junction tree.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bm_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-Pure virtual class for all robust error function classes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LossFunctions.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be\n-noiseModel::Base is the abstract base class for all noise models.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n-virtual bool isConstrained() const\n-true if a constrained noise model, saves slow/clumsy dynamic casting\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-virtual void whitenInPlace(Vector &v) const\n-in-place whiten, override if can be done more efficiently\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-Dimensionality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-virtual void unwhitenInPlace(Eigen::Block< Vector > &v) const\n-in-place unwhiten, override if can be done more efficiently\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:127\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-virtual void whitenInPlace(Eigen::Block< Vector > &v) const\n-in-place whiten, override if can be done more efficiently\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:122\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn\n-virtual Vector whiten(const Vector &v) const =0\n-Whiten an error vector.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bm_\ba_\bh_\ba_\bl_\ba_\bn_\bo_\bb_\bi_\bs_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be\n-virtual double mahalanobisDistance(const Vector &v) const\n-Mahalanobis distance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bi_\bs_\bU_\bn_\bi_\bt\n-virtual bool isUnit() const\n-true if a unit noise model, saves slow/clumsy dynamic casting\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt\n-virtual double weight(const Vector &v) const\n-get the weight from the effective loss function on residual vector v\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\bW_\bh_\bi_\bt_\be_\bn\n-virtual Vector unweightedWhiten(const Vector &v) const\n-Useful function for robust noise models to get the unweighted but whitened\n-error.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:132\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn\n-virtual Vector unwhiten(const Vector &v) const =0\n-Unwhiten an error vector.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bl_\bo_\bs_\bs\n-virtual double loss(const double squared_distance) const\n-loss function, input is Mahalanobis distance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-virtual void unwhitenInPlace(Vector &v) const\n-in-place unwhiten, override if can be done more efficiently\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bn\n-virtual Matrix Whiten(const Matrix &H) const =0\n-Whiten a matrix.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bs_\be\n-Base(size_t dim=1)\n-primary constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn\n-Gaussian implements the mathematical model |R*x|^2 = |y|^2 with R'*R=inv(Sigma)\n-where y = whiten(x) =...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:162\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bR\n-virtual Matrix R() const\n-Return R itself, but note that Whiten(H) is cheaper than R*H.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:255\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn\n-Gaussian(size_t dim=1, const boost::optional< Matrix >\n-&sqrt_information=boost::none)\n-constructor takes square root information matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bs_\bq_\br_\bt_\b__\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn_\b_\n-boost::optional< Matrix > sqrt_information_\n-Matrix square root of information matrix (R)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-A diagonal noise model implements a diagonal covariance matrix, with the\n-elements of the diagonal spe...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:281\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bR\n-Matrix R() const override\n-Return R itself, but note that Whiten(H) is cheaper than R*H.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:352\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bi_\bg_\bm_\ba_\bs_\b_\n-Vector sigmas_\n-Standard deviations (sigmas), their inverse and inverse square (weights/\n-precisions) These are all com...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:289\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bi_\bg_\bm_\ba\n-double sigma(size_t i) const\n-Return standard deviations (sqrt of diagonal)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:335\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bi_\bn_\bv_\bs_\bi_\bg_\bm_\ba_\bs\n-const Vector & invsigmas() const\n-Return sqrt precisions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:340\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bi_\bg_\bm_\ba_\bs\n-Vector sigmas() const override\n-Calculate standard deviations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:325\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\b:_\b:_\bp_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bs\n-const Vector & precisions() const\n-Return precisions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:346\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n-A Constrained constrained model is a specialization of Diagonal which allows\n-some or all of the sigma...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:381\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n-bool isConstrained() const override\n-true if a constrained noise mode, saves slow/clumsy dynamic casting\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:409\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bA_\bl_\bl\n-static shared_ptr All(size_t dim, const Vector &mu)\n-Fully constrained variations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:462\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bA_\bl_\bl\n-static shared_ptr All(size_t dim, double mu)\n-Fully constrained variations with a mu parameter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:467\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bA_\bl_\bl\n-static shared_ptr All(size_t dim)\n-Fully constrained variations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:457\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bm_\bu\n-const Vector & mu() const\n-Access mu as a vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:415\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bm_\bu_\b_\n-Vector mu_\n-Penalty function weight - needs to be large enough to dominate soft\n-constraints.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:385\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc\n-An isotropic noise model corresponds to a scaled diagonal covariance To\n-construct,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:516\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bs_\bi_\bg_\bm_\ba\n-double sigma() const\n-Return standard deviation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:565\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bP_\br_\be_\bc_\bi_\bs_\bi_\bo_\bn\n-static shared_ptr Precision(size_t dim, double precision, bool smart=true)\n-An isotropic noise model created by specifying a precision.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:549\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc\n-Isotropic(size_t dim, double sigma)\n-protected constructor takes sigma\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:521\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt\n-Unit: i.i.d.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:584\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-void WhitenInPlace(Eigen::Block< Matrix >) const override\n-In-place version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:610\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn\n-Vector unwhiten(const Vector &v) const override\n-Unwhiten an error vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:607\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-void whitenInPlace(Eigen::Block< Vector > &) const override\n-in-place whiten, override if can be done more efficiently\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:613\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bi_\bs_\bU_\bn_\bi_\bt\n-bool isUnit() const override\n-true if a unit noise model, saves slow/clumsy dynamic casting\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:602\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bU_\bn_\bi_\bt\n-Unit(size_t dim=1)\n-constructor for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:590\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn\n-Vector whiten(const Vector &v) const override\n-Whiten an error vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:606\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static shared_ptr Create(size_t dim)\n-Create a unit covariance noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:597\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-void unwhitenInPlace(Vector &) const override\n-in-place unwhiten, override if can be done more efficiently\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:612\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-void unwhitenInPlace(Eigen::Block< Vector > &) const override\n-in-place unwhiten, override if can be done more efficiently\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:614\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-void whitenInPlace(Vector &) const override\n-in-place whiten, override if can be done more efficiently\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:611\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bn_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-void WhitenInPlace(Matrix &) const override\n-In-place version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:609\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bn\n-Matrix Whiten(const Matrix &H) const override\n-Whiten a matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:608\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt\n-Base class for robust error models The robust M-estimators above simply tell us\n-how to re-weight the ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:642\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\br_\bo_\bb_\bu_\bs_\bt\n-const RobustModel::shared_ptr & robust() const\n-Return the contained robust error function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:669\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt\n-Robust()\n-Default Constructor for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:656\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt\n-Robust(const RobustModel::shared_ptr robust, const NoiseModel::shared_ptr\n-noise)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:659\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bs_\bq_\bu_\ba_\br_\be_\bd_\bM_\ba_\bh_\ba_\bl_\ba_\bn_\bo_\bb_\bi_\bs_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be\n-double squaredMahalanobisDistance(const Vector &v) const override\n-Squared Mahalanobis distance v'*R'*R*v = \n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:688\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bn_\bo_\bi_\bs_\be_\b_\n-const NoiseModel::shared_ptr noise_\n-noise model used\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:651\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bl_\bo_\bs_\bs\n-double loss(const double squared_distance) const override\n-Compute loss from the m-estimator using the Mahalanobis distance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:682\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn\n-Vector unwhiten(const Vector &) const override\n-Unwhiten an error vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:679\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bn\n-Matrix Whiten(const Matrix &A) const override\n-Whiten a matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:677\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\br_\bo_\bb_\bu_\bs_\bt_\b_\n-const RobustModel::shared_ptr robust_\n-robust error function used\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:650\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\b~_\bR_\bo_\bb_\bu_\bs_\bt\n-~Robust() override\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:663\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bn_\bo_\bi_\bs_\be\n-const NoiseModel::shared_ptr & noise() const\n-Return the contained noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:672\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn\n-Vector whiten(const Vector &v) const override\n-Whiten an error vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:675\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+A JunctionTree is a cluster tree, a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+A junction tree specialized to Gaussian factors, i.e., it is a cluster tree\n+with Gaussian factors sto...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianJunctionTree.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+GaussianJunctionTree This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianJunctionTree.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n+JunctionTree< GaussianBayesTree, GaussianFactorGraph > Base\n+Base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianJunctionTree.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Shared pointer to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianJunctionTree.h:43\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00878.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00878.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianEliminationTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,62 +94,34 @@\n \n \n \n \n \n
\n \n-
iterative.cpp File Reference
\n+Namespaces
\n+
GaussianEliminationTree.cpp File Reference
\n \n
\n-\n-

Iterative methods, implementation. \n-More...

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-Vector gtsam::steepestDescent (const System &Ab, const Vector &x, const ConjugateGradientParameters &parameters)
 
\n-Vector gtsam::conjugateGradientDescent (const System &Ab, const Vector &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), System version.
 
Vector gtsam::steepestDescent (const Matrix &A, const Vector &b, const Vector &x, const ConjugateGradientParameters &parameters)
 convenience calls using matrices, will create System class internally:
 
\n-Vector gtsam::conjugateGradientDescent (const Matrix &A, const Vector &b, const Vector &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), Matrix version.
 
\n-VectorValues gtsam::steepestDescent (const GaussianFactorGraph &fg, const VectorValues &x, const ConjugateGradientParameters &parameters)
 Method of steepest gradients, Gaussian Factor Graph version.
 
\n-VectorValues gtsam::conjugateGradientDescent (const GaussianFactorGraph &fg, const VectorValues &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), Gaussian Factor Graph version.
 
\n

Detailed Description

\n-

Iterative methods, implementation.

\n-
Author
Frank Dellaert
\n-
Date
Dec 28, 2009
\n+
Date
Mar 29, 2013
\n+
Author
Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,50 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-iterative.cpp File Reference\n-Iterative methods, implementation. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GaussianEliminationTree.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bte\bee\bep\bpe\bes\bst\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bS_\by_\bs_\bt_\be_\bm &Ab, const Vector &x, const\n- _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bS_\by_\bs_\bt_\be_\bm &Ab, const Vector\n- &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n-\u00a0 Method of conjugate gradients (CG), _\bS_\by_\bs_\bt_\be_\bm version.\n-\u00a0\n- Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\be_\be_\bp_\be_\bs_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt (const Matrix &A, const Vector &b, const\n- Vector &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n-\u00a0 convenience calls using matrices, will create _\bS_\by_\bs_\bt_\be_\bm class\n- internally:\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const Matrix &A, const Vector\n- &b, const Vector &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n- ¶meters)\n-\u00a0 Method of conjugate gradients (CG), Matrix version.\n-\u00a0\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bte\bee\bep\bpe\bes\bst\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg, const\n- _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n-\u00a0 Method of steepest gradients, Gaussian _\bF_\ba_\bc_\bt_\bo_\br Graph version.\n-\u00a0\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg,\n- const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n- ¶meters)\n-\u00a0 Method of conjugate gradients (CG), Gaussian _\bF_\ba_\bc_\bt_\bo_\br Graph\n- version.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Iterative methods, implementation.\n+ Date\n+ Mar 29, 2013\n Author\n Frank Dellaert\n- Date\n- Dec 28, 2009\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b._\bc_\bp_\bp\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00881_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00881_source.html", "unified_diff": "@@ -114,17 +114,17 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-
23#include <gtsam/base/Testable.h>
\n+\n+\n+
23#include <gtsam/base/Testable.h>
\n
24
\n
25namespace gtsam {
\n
26
\n
\n
27 class GTSAM_EXPORT GaussianISAM : public ISAM<GaussianBayesTree>
\n
28 {
\n
29 public:
\n@@ -141,17 +141,17 @@\n
45 };
\n
\n
46
\n
48 template <>
\n
49 struct traits<GaussianISAM> : public Testable<GaussianISAM> {};
\n
50
\n
51}
\n-
Concept check for values that can be used in unit tests.
\n-
Incremental update functionality (iSAM) for BayesTree.
\n-
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n+
Concept check for values that can be used in unit tests.
\n+
Incremental update functionality (iSAM) for BayesTree.
\n+
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
A Bayes tree with an update methods that implements the iSAM algorithm.
Definition ISAM.h:31
\n
A Bayes tree representing a Gaussian density.
Definition GaussianBayesTree.h:52
\n
Definition GaussianISAM.h:28
\n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00884.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00884.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphSolver.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/ConjugateGradientSolver.h File Reference\n \n \n \n \n \n \n \n@@ -94,38 +94,55 @@\n \n \n \n \n \n
\n \n-
SubgraphSolver.cpp File Reference
\n+Classes |\n+Namespaces |\n+Functions
\n+
ConjugateGradientSolver.h File Reference
\n \n
\n \n-

Subgraph Solver from IROS 2010. \n+

Implementation of Conjugate Gradient solver for a linear system. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::ConjugateGradientParameters
 parameters for the conjugate gradient method More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Functions

\n+template<class S , class V >
gtsam::preconditionedConjugateGradient (const S &system, const V &initial, const ConjugateGradientParameters &parameters)
 
\n

Detailed Description

\n-

Subgraph Solver from IROS 2010.

\n-
Date
2010
\n-
Author
Frank Dellaert
\n+

Implementation of Conjugate Gradient solver for a linear system.

\n+
Author
Yong-Dian Jian
\n
\n-Yong Dian Jian
\n+Sungtae An
\n+
Date
Nov 6, 2014
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SubgraphSolver.cpp File Reference\n-Subgraph Solver from IROS 2010. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ConjugateGradientSolver.h File Reference\n+Implementation of Conjugate Gradient solver for a linear system. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+\u00a0 parameters for the conjugate gradient method _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+V\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\bed\bdC\bCo\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\bt (const S &system, const V &initial,\n+ const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Subgraph Solver from IROS 2010.\n- Date\n- 2010\n+Implementation of Conjugate Gradient solver for a linear system.\n Author\n- Frank Dellaert\n- Yong Dian Jian\n+ Yong-Dian Jian\n+ Sungtae An\n+ Date\n+ Nov 6, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b._\bc_\bp_\bp\n+ * _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00887.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00887.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactorGraph.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,76 +94,55 @@\n \n \n \n \n \n
\n \n-
iterative.h File Reference
\n+
GaussianFactorGraph.cpp File Reference
\n
\n
\n \n-

Iterative methods, implementation. \n+

Linear Factor Graph where all factors are Gaussians. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::System
 Helper class encapsulating the combined system |Ax-b_|^2 Needed to run Conjugate Gradients on matrices. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Typedefs

\n+using gtsam::SparseTriplets = std::vector< std::tuple< int, int, double > >
 
\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 Functions

template<class S , class V , class E >
gtsam::conjugateGradients (const S &Ab, V x, const ConjugateGradientParameters &parameters, bool steepest=false)
 Method of conjugate gradients (CG) template \"System\" class S needs gradient(S,v), e=S*v, v=S^e \"Vector\" class V needs dot(v,v), -v, v+v, s*v \"Vector\" class E needs dot(v,v)
 
\n-GTSAM_EXPORT Vector gtsam::steepestDescent (const System &Ab, const Vector &x, const IterativeOptimizationParameters &parameters)
 Method of steepest gradients, System version.
 
\n-Vector gtsam::conjugateGradientDescent (const System &Ab, const Vector &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), System version.
 
Vector gtsam::steepestDescent (const Matrix &A, const Vector &b, const Vector &x, const ConjugateGradientParameters &parameters)
 convenience calls using matrices, will create System class internally:
 
\n-Vector gtsam::conjugateGradientDescent (const Matrix &A, const Vector &b, const Vector &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), Matrix version.
 
\n-VectorValues gtsam::steepestDescent (const GaussianFactorGraph &fg, const VectorValues &x, const ConjugateGradientParameters &parameters)
 Method of steepest gradients, Gaussian Factor Graph version.
 
\n-VectorValues gtsam::conjugateGradientDescent (const GaussianFactorGraph &fg, const VectorValues &x, const ConjugateGradientParameters &parameters)
 Method of conjugate gradients (CG), Gaussian Factor Graph version.
 
bool gtsam::hasConstraints (const GaussianFactorGraph &factors)
 Evaluates whether linear factors have any constrained noise models.
 
\n

Detailed Description

\n-

Iterative methods, implementation.

\n-
Author
Frank Dellaert
\n-
Date
Dec 28, 2009
\n+

Linear Factor Graph where all factors are Gaussians.

\n+
Author
Kai Ni
\n+
\n+Christian Potthast
\n+
\n+Richard Roberts
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,68 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-iterative.h File Reference\n-Iterative methods, implementation. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm\n-\u00a0 Helper class encapsulating the combined system |Ax-b_|^2 Needed to run\n- Conjugate Gradients on matrices. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+GaussianFactorGraph.cpp File Reference\n+Linear Factor Graph where all factors are Gaussians. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- V\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bs (const S &Ab, V x, const\n- _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters, bool\n- steepest=false)\n- Method of conjugate gradients (CG) template \"System\" class\n-\u00a0 S needs gradient(S,v), e=S*v, v=S^e \"Vector\" class V needs\n- dot(v,v), -v, v+v, s*v \"Vector\" class E needs dot(v,v)\n-\u00a0\n-GTSAM_EXPORT Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bte\bee\bep\bpe\bes\bst\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bS_\by_\bs_\bt_\be_\bm &Ab, const Vector &x,\n- const _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n-\u00a0 Method of steepest gradients, _\bS_\by_\bs_\bt_\be_\bm version.\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bS_\by_\bs_\bt_\be_\bm &Ab, const\n- Vector &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n-\u00a0 Method of conjugate gradients (CG), _\bS_\by_\bs_\bt_\be_\bm version.\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSp\bpa\bar\brs\bse\beT\bTr\bri\bip\bpl\ble\bet\bts\bs = std::vector< std::tuple< int, int, double > >\n \u00a0\n- Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\be_\be_\bp_\be_\bs_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt (const Matrix &A, const Vector &b,\n- const Vector &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n- ¶meters)\n-\u00a0 convenience calls using matrices, will create _\bS_\by_\bs_\bt_\be_\bm class\n- internally:\n-\u00a0\n- Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const Matrix &A, const\n- Vector &b, const Vector &x, const\n- _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n-\u00a0 Method of conjugate gradients (CG), Matrix version.\n-\u00a0\n- _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bst\bte\bee\bep\bpe\bes\bst\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &fg,\n- const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &x, const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n- ¶meters)\n-\u00a0 Method of steepest gradients, Gaussian _\bF_\ba_\bc_\bt_\bo_\br Graph\n- version.\n-\u00a0\n- _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnj\bju\bug\bga\bat\bte\beG\bGr\bra\bad\bdi\bie\ben\bnt\btD\bDe\bes\bsc\bce\ben\bnt\bt (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n- &fg, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &x, const\n- _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters)\n-\u00a0 Method of conjugate gradients (CG), Gaussian _\bF_\ba_\bc_\bt_\bo_\br Graph\n- version.\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\ba_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\bs (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors)\n+\u00a0 Evaluates whether linear factors have any constrained noise models.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Iterative methods, implementation.\n+Linear Factor Graph where all factors are Gaussians.\n Author\n+ Kai Ni\n+ Christian Potthast\n+ Richard Roberts\n Frank Dellaert\n- Date\n- Dec 28, 2009\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00887.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00887.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,10 +1,3 @@\n var a00887 = [\n- [\"gtsam::System\", \"a03824.html\", \"a03824\"],\n- [\"conjugateGradientDescent\", \"a00887.html#aa84114ad1593684ad739088a2898afdb\", null],\n- [\"conjugateGradientDescent\", \"a00887.html#af55440f741d8b2f706101f7a79ba7111\", null],\n- [\"conjugateGradientDescent\", \"a00887.html#ad2b587fde5d35a27d6c88feb4432e785\", null],\n- [\"conjugateGradients\", \"a00887.html#a6516ea957c3a22ddf429cefef1fe9486\", null],\n- [\"steepestDescent\", \"a00887.html#a81b7af7638d28555c3f404318cc67b22\", null],\n- [\"steepestDescent\", \"a00887.html#aed4b2ca704ddd6530ea70122f883ac88\", null],\n- [\"steepestDescent\", \"a00887.html#a37ca85391e3bc671c71b68bc324296f0\", null]\n+ [\"hasConstraints\", \"a00887.html#a35c269c3243cab16a7475239a9c91021\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00890.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00890.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/AcceleratedPowerMethod.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/HessianFactor-inl.h File Reference\n \n \n \n \n \n \n \n@@ -94,52 +94,38 @@\n \n \n \n \n \n
\n \n-
AcceleratedPowerMethod.h File Reference
\n+Namespaces
\n+
HessianFactor-inl.h File Reference
\n \n
\n \n-

accelerated power method for fast eigenvalue and eigenvector computation \n+

Contains the HessianFactor class, a general quadratic factor. \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::AcceleratedPowerMethod< Operator >
 Compute maximum Eigenpair with accelerated power method. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Typedefs

\n-using gtsam::Sparse = Eigen::SparseMatrix< double >
 
\n

Detailed Description

\n-

accelerated power method for fast eigenvalue and eigenvector computation

\n-
Date
Sept 2020
\n-
Author
Jing Wu
\n+

Contains the HessianFactor class, a general quadratic factor.

\n+
Author
Richard Roberts
\n+
Date
Dec 8, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-AcceleratedPowerMethod.h File Reference\n-accelerated power method for fast eigenvalue and eigenvector computation\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+HessianFactor-inl.h File Reference\n+Contains the HessianFactor class, a general quadratic factor. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b<_\b _\bO_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b>\n-\u00a0 Compute maximum Eigenpair with accelerated power method. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSp\bpa\bar\brs\bse\be = Eigen::SparseMatrix< double >\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-accelerated power method for fast eigenvalue and eigenvector computation\n- Date\n- Sept 2020\n+Contains the HessianFactor class, a general quadratic factor.\n Author\n- Jing Wu\n+ Richard Roberts\n+ Date\n+ Dec 8, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n+ * _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00890_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00890_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/AcceleratedPowerMethod.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/HessianFactor-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,166 +98,65 @@\n
No Matches
\n \n \n \n \n \n
\n-
AcceleratedPowerMethod.h
\n+
HessianFactor-inl.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-
23
\n-
24namespace gtsam {
\n-
25
\n-
26using Sparse = Eigen::SparseMatrix<double>;
\n-
27
\n-
50template <class Operator>
\n-
\n-
51class AcceleratedPowerMethod : public PowerMethod<Operator> {
\n-
52
\n-
53 double beta_ = 0; // a Polyak momentum term
\n-
54
\n-
55 Vector previousVector_; // store previous vector
\n-
56
\n-
57 public:
\n-
\n-\n-
63 const Operator &A, const boost::optional<Vector> initial = boost::none,
\n-
64 double initialBeta = 0.0)
\n-
65 : PowerMethod<Operator>(A, initial) {
\n-
66 // initialize Ritz eigen vector and previous vector
\n-
67 this->ritzVector_ = initial ? initial.get() : Vector::Random(this->dim_);
\n-
68 this->ritzVector_.normalize();
\n-
69 previousVector_ = Vector::Zero(this->dim_);
\n-
70
\n-
71 // initialize beta_
\n-
72 beta_ = initialBeta;
\n-
73 }
\n+
19#pragma once
\n+
20
\n+
21namespace gtsam {
\n+
22
\n+
23 /* ************************************************************************* */
\n+
24 template<typename KEYS>
\n+
\n+
25 HessianFactor::HessianFactor(const KEYS& keys, const SymmetricBlockMatrix& augmentedInformation) :
\n+
26 GaussianFactor(keys), info_(augmentedInformation)
\n+
27 {
\n+
28 // Check number of variables
\n+
29 if((DenseIndex)Base::keys_.size() != augmentedInformation.nBlocks() - 1)
\n+
30 throw std::invalid_argument(
\n+
31 "Error in HessianFactor constructor input. Number of provided keys plus\\n"
\n+
32 "one for the information vector must equal the number of provided matrix blocks. ");
\n+
33
\n+
34 // Check RHS dimension
\n+
35 if(augmentedInformation.getDim(augmentedInformation.nBlocks() - 1) != 1)
\n+
36 throw std::invalid_argument(
\n+
37 "Error in HessianFactor constructor input. The last provided matrix block\\n"
\n+
38 "must be the information vector, but the last provided block had more than one column.");
\n+
39 }
\n
\n-
74
\n-
\n-
80 Vector acceleratedPowerIteration (const Vector &x1, const Vector &x0,
\n-
81 const double beta) const {
\n-
82 Vector y = this->A_ * x1 - beta * x0;
\n-
83 y.normalize();
\n-
84 return y;
\n-
85 }
\n-
\n-
86
\n-
\n-
92 Vector acceleratedPowerIteration () const {
\n-
93 Vector y = acceleratedPowerIteration(this->ritzVector_, previousVector_, beta_);
\n-
94 return y;
\n-
95 }
\n-
\n-
96
\n-
\n-
101 double estimateBeta(const size_t T = 10) const {
\n-
102 // set initial estimation of maxBeta
\n-
103 Vector initVector = this->ritzVector_;
\n-
104 const double up = initVector.dot( this->A_ * initVector );
\n-
105 const double down = initVector.dot(initVector);
\n-
106 const double mu = up / down;
\n-
107 double maxBeta = mu * mu / 4;
\n-
108 size_t maxIndex;
\n-
109 std::vector<double> betas;
\n-
110
\n-
111 Matrix R = Matrix::Zero(this->dim_, 10);
\n-
112 // run T times of iteration to find the beta that has the largest Rayleigh quotient
\n-
113 for (size_t t = 0; t < T; t++) {
\n-
114 // after each t iteration, reset the betas with the current maxBeta
\n-
115 betas = {2 / 3 * maxBeta, 0.99 * maxBeta, maxBeta, 1.01 * maxBeta,
\n-
116 1.5 * maxBeta};
\n-
117 // iterate through every beta value
\n-
118 for (size_t k = 0; k < betas.size(); ++k) {
\n-
119 // initialize x0 and x00 in each iteration of each beta
\n-
120 Vector x0 = initVector;
\n-
121 Vector x00 = Vector::Zero(this->dim_);
\n-
122 // run 10 steps of accelerated power iteration with this beta
\n-
123 for (size_t j = 1; j < 10; j++) {
\n-
124 if (j < 2) {
\n-
125 R.col(0) = acceleratedPowerIteration(x0, x00, betas[k]);
\n-
126 R.col(1) = acceleratedPowerIteration(R.col(0), x0, betas[k]);
\n-
127 } else {
\n-
128 R.col(j) = acceleratedPowerIteration(R.col(j - 1), R.col(j - 2),
\n-
129 betas[k]);
\n-
130 }
\n-
131 }
\n-
132 // compute the Rayleigh quotient for the randomly sampled vector after
\n-
133 // 10 steps of power accelerated iteration
\n-
134 const Vector x = R.col(9);
\n-
135 const double up = x.dot(this->A_ * x);
\n-
136 const double down = x.dot(x);
\n-
137 const double mu = up / down;
\n-
138 // store the momentum with largest Rayleigh quotient and its according index of beta_
\n-
139 if (mu * mu / 4 > maxBeta) {
\n-
140 // save the max beta index
\n-
141 maxIndex = k;
\n-
142 maxBeta = mu * mu / 4;
\n-
143 }
\n-
144 }
\n-
145 }
\n-
146 // set beta_ to momentum with largest Rayleigh quotient
\n-
147 return betas[maxIndex];
\n-
148 }
\n-
\n-
149
\n-
\n-
156 bool compute(size_t maxIterations, double tol) {
\n-
157 // Starting
\n-
158 bool isConverged = false;
\n-
159
\n-
160 for (size_t i = 0; i < maxIterations && !isConverged; i++) {
\n-
161 ++(this->nrIterations_);
\n-
162 Vector tmp = this->ritzVector_;
\n-
163 // update the ritzVector after accelerated power iteration
\n-
164 this->ritzVector_ = acceleratedPowerIteration();
\n-
165 // update the previousVector with ritzVector
\n-
166 previousVector_ = tmp;
\n-
167 // update the ritzValue
\n-
168 this->ritzValue_ = this->ritzVector_.dot(this->A_ * this->ritzVector_);
\n-
169 isConverged = this->converged(tol);
\n-
170 }
\n-
171
\n-
172 return isConverged;
\n-
173 }
\n-
\n-
174};
\n-
\n-
175
\n-
176} // namespace gtsam
\n-
Power method for fast eigenvalue and eigenvector computation.
\n+
40
\n+
41}
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Compute maximum Eigenpair with accelerated power method.
Definition AcceleratedPowerMethod.h:51
\n-
Vector acceleratedPowerIteration(const Vector &x1, const Vector &x0, const double beta) const
Run accelerated power iteration to get ritzVector with beta and previous two ritzVector x0 and x00,...
Definition AcceleratedPowerMethod.h:80
\n-
AcceleratedPowerMethod(const Operator &A, const boost::optional< Vector > initial=boost::none, double initialBeta=0.0)
Constructor from aim matrix A (given as Matrix or Sparse), optional intial vector as ritzVector.
Definition AcceleratedPowerMethod.h:62
\n-
double estimateBeta(const size_t T=10) const
Tuning the momentum beta using the Best Heavy Ball algorithm in Ref(3), T is the iteration time to fi...
Definition AcceleratedPowerMethod.h:101
\n-
Vector acceleratedPowerIteration() const
Run accelerated power iteration to get ritzVector with beta and previous two ritzVector x0 and x00,...
Definition AcceleratedPowerMethod.h:92
\n-
bool compute(size_t maxIterations, double tol)
Start the accelerated iteration, after performing the accelerated iteration, calculate the ritz error...
Definition AcceleratedPowerMethod.h:156
\n-
Compute maximum Eigenpair with power method.
Definition PowerMethod.h:57
\n-
const Operator & A_
Const reference to an externally-held matrix whose minimum-eigenvalue we want to compute.
Definition PowerMethod.h:63
\n-
bool converged(double tol) const
After Perform power iteration on a single Ritz value, check if the Ritz residual for the current Ritz...
Definition PowerMethod.h:112
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
size_t size() const
Definition Factor.h:157
\n+
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n+
Matrix augmentedInformation() const override
Return the augmented information matrix represented by this GaussianFactor.
Definition HessianFactor.cpp:282
\n+
HessianFactor()
default constructor for I/O
Definition HessianFactor.cpp:77
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,186 +1,80 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-AcceleratedPowerMethod.h\n+HessianFactor-inl.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-26using Sparse = Eigen::SparseMatrix;\n-27\n-50template \n-_\b5_\b1class _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd : public _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd {\n-52\n-53 double beta_ = 0; // a Polyak momentum term\n-54\n-55 Vector previousVector_; // store previous vector\n-56\n-57 public:\n-_\b6_\b2 explicit _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd(\n-63 const Operator &A, const boost::optional initial = boost::none,\n-64 double initialBeta = 0.0)\n-65 : _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd(A, initial) {\n-66 // initialize Ritz eigen vector and previous vector\n-67 this->ritzVector_ = initial ? initial.get() : Vector::Random(this->dim_);\n-68 this->ritzVector_.normalize();\n-69 previousVector_ = Vector::Zero(this->dim_);\n-70\n-71 // initialize beta_\n-72 beta_ = initialBeta;\n-73 }\n-74\n-_\b8_\b0 Vector _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn (const Vector &x1, const Vector &x0,\n-81 const double beta) const {\n-82 Vector y = this->_\bA_\b_ * x1 - beta * x0;\n-83 y.normalize();\n-84 return y;\n-85 }\n-86\n-_\b9_\b2 Vector _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn () const {\n-93 Vector y = _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(this->ritzVector_, previousVector_,\n-beta_);\n-94 return y;\n-95 }\n-96\n-_\b1_\b0_\b1 double _\be_\bs_\bt_\bi_\bm_\ba_\bt_\be_\bB_\be_\bt_\ba(const size_t T = 10) const {\n-102 // set initial estimation of maxBeta\n-103 Vector initVector = this->ritzVector_;\n-104 const double up = initVector.dot( this->_\bA_\b_ * initVector );\n-105 const double down = initVector.dot(initVector);\n-106 const double mu = up / down;\n-107 double maxBeta = mu * mu / 4;\n-108 size_t maxIndex;\n-109 std::vector betas;\n-110\n-111 Matrix R = Matrix::Zero(this->dim_, 10);\n-112 // run T times of iteration to find the beta that has the largest Rayleigh\n-quotient\n-113 for (size_t t = 0; t < T; t++) {\n-114 // after each t iteration, reset the betas with the current maxBeta\n-115 betas = {2 / 3 * maxBeta, 0.99 * maxBeta, maxBeta, 1.01 * maxBeta,\n-116 1.5 * maxBeta};\n-117 // iterate through every beta value\n-118 for (size_t k = 0; k < betas.size(); ++k) {\n-119 // initialize x0 and x00 in each iteration of each beta\n-120 Vector x0 = initVector;\n-121 Vector x00 = Vector::Zero(this->dim_);\n-122 // run 10 steps of accelerated power iteration with this beta\n-123 for (size_t j = 1; j < 10; j++) {\n-124 if (j < 2) {\n-125 R.col(0) = _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(x0, x00, betas[k]);\n-126 R.col(1) = _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(R.col(0), x0, betas[k]);\n-127 } else {\n-128 R.col(j) = _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(R.col(j - 1), R.col(j - 2),\n-129 betas[k]);\n-130 }\n-131 }\n-132 // compute the Rayleigh quotient for the randomly sampled vector after\n-133 // 10 steps of power accelerated iteration\n-134 const Vector x = R.col(9);\n-135 const double up = x.dot(this->_\bA_\b_ * x);\n-136 const double down = x.dot(x);\n-137 const double mu = up / down;\n-138 // store the momentum with largest Rayleigh quotient and its according\n-index of beta_\n-139 if (mu * mu / 4 > maxBeta) {\n-140 // save the max beta index\n-141 maxIndex = k;\n-142 maxBeta = mu * mu / 4;\n-143 }\n-144 }\n-145 }\n-146 // set beta_ to momentum with largest Rayleigh quotient\n-147 return betas[maxIndex];\n-148 }\n-149\n-_\b1_\b5_\b6 bool _\bc_\bo_\bm_\bp_\bu_\bt_\be(size_t maxIterations, double tol) {\n-157 // Starting\n-158 bool isConverged = false;\n-159\n-160 for (size_t i = 0; i < maxIterations && !isConverged; i++) {\n-161 ++(this->nrIterations_);\n-162 Vector tmp = this->ritzVector_;\n-163 // update the ritzVector after accelerated power iteration\n-164 this->ritzVector_ = _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn();\n-165 // update the previousVector with ritzVector\n-166 previousVector_ = tmp;\n-167 // update the ritzValue\n-168 this->ritzValue_ = this->ritzVector_.dot(this->_\bA_\b_ * this->ritzVector_);\n-169 isConverged = this->_\bc_\bo_\bn_\bv_\be_\br_\bg_\be_\bd(tol);\n-170 }\n-171\n-172 return isConverged;\n-173 }\n-174};\n-175\n-176} // namespace gtsam\n-_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n-Power method for fast eigenvalue and eigenvector computation.\n+19#pragma once\n+20\n+21namespace _\bg_\bt_\bs_\ba_\bm {\n+22\n+23 /* *************************************************************************\n+*/\n+24 template\n+_\b2_\b5 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const KEYS& keys, const _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n+augmentedInformation) :\n+26 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(keys), info_(augmentedInformation)\n+27 {\n+28 // Check number of variables\n+29 if((_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)_\bB_\ba_\bs_\be_\b:_\b:_\bk_\be_\by_\bs_\b_._\bs_\bi_\bz_\be() != _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn.nBlocks() - 1)\n+30 throw std::invalid_argument(\n+31 \"Error in HessianFactor constructor input. Number of provided keys plus\\n\"\n+32 \"one for the information vector must equal the number of provided matrix\n+blocks. \");\n+33\n+34 // Check RHS dimension\n+35 if(_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn.getDim(_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn.nBlocks() - 1) != 1)\n+36 throw std::invalid_argument(\n+37 \"Error in HessianFactor constructor input. The last provided matrix block\\n\"\n+38 \"must be the information vector, but the last provided block had more than\n+one column.\");\n+39 }\n+40\n+41}\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd\n-Compute maximum Eigenpair with accelerated power method.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn\n-Vector acceleratedPowerIteration(const Vector &x1, const Vector &x0, const\n-double beta) const\n-Run accelerated power iteration to get ritzVector with beta and previous two\n-ritzVector x0 and x00,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd\n-AcceleratedPowerMethod(const Operator &A, const boost::optional< Vector >\n-initial=boost::none, double initialBeta=0.0)\n-Constructor from aim matrix A (given as Matrix or Sparse), optional intial\n-vector as ritzVector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\be_\bs_\bt_\bi_\bm_\ba_\bt_\be_\bB_\be_\bt_\ba\n-double estimateBeta(const size_t T=10) const\n-Tuning the momentum beta using the Best Heavy Ball algorithm in Ref(3), T is\n-the iteration time to fi...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn\n-Vector acceleratedPowerIteration() const\n-Run accelerated power iteration to get ritzVector with beta and previous two\n-ritzVector x0 and x00,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be\n-bool compute(size_t maxIterations, double tol)\n-Start the accelerated iteration, after performing the accelerated iteration,\n-calculate the ritz error...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd\n-Compute maximum Eigenpair with power method.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bA_\b_\n-const Operator & A_\n-Const reference to an externally-held matrix whose minimum-eigenvalue we want\n-to compute.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bg_\be_\bd\n-bool converged(double tol) const\n-After Perform power iteration on a single Ritz value, check if the Ritz\n-residual for the current Ritz...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:112\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+An abstract virtual base class for JacobianFactor and HessianFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+Matrix augmentedInformation() const override\n+Return the augmented information matrix represented by this GaussianFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:282\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+HessianFactor()\n+default constructor for I/O\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:77\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n+ * _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00893.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00893.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphBuilder.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/VectorValues.h File Reference\n \n \n \n \n \n \n \n@@ -94,52 +94,47 @@\n \n \n \n \n \n
\n \n-
SubgraphBuilder.cpp File Reference
\n+Classes |\n+Namespaces
\n+
VectorValues.h File Reference
\n \n
\n+\n+

Factor Graph Values. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::VectorValues
 VectorValues represents a collection of vector-valued variables associated each with a unique integer index. More...
 
struct  gtsam::traits< VectorValues >
 traits More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-ostream & gtsam::operator<< (ostream &os, const Subgraph::Edge &edge)
 
\n-ostream & gtsam::operator<< (ostream &os, const Subgraph &subgraph)
 
\n-ostream & gtsam::operator<< (ostream &os, const SubgraphBuilderParameters &p)
 
\n-GaussianFactorGraph gtsam::buildFactorSubgraph (const GaussianFactorGraph &gfg, const Subgraph &subgraph, const bool clone)
 Select the factors in a factor graph according to the subgraph.
 
std::pair< GaussianFactorGraph, GaussianFactorGraphgtsam::splitFactorGraph (const GaussianFactorGraph &factorGraph, const Subgraph &subgraph)
 Split the graph into a subgraph and the remaining edges.
 
\n

Detailed Description

\n-
Date
Dec 31, 2009
\n-
Author
Frank Dellaert, Yong-Dian Jian
\n+

Factor Graph Values.

\n+
Author
Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,42 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SubgraphBuilder.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+VectorValues.h File Reference\n+Factor Graph _\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+\u00a0 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs represents a collection of vector-valued variables\n+ associated each with a unique integer index. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const\n- _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bd_\bg_\be &edge)\n-\u00a0\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh\n- &subgraph)\n-\u00a0\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const\n- _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p)\n-\u00a0\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:b\bbu\bui\bil\bld\bdF\bFa\bac\bct\bto\bor\brS\bSu\bub\bbg\bgr\bra\bap\bph\bh (const\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg, const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh\n- &subgraph, const bool clone)\n-\u00a0 Select the factors in a factor graph according\n- to the subgraph.\n-\u00a0\n-std::pair< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bp_\bl_\bi_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh (const\n- _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh >\u00a0 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factorGraph, const\n- _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh &subgraph)\n-\u00a0 Split the graph into a subgraph and the\n- remaining edges.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Dec 31, 2009\n+Factor Graph _\bV_\ba_\bl_\bu_\be_\bs.\n Author\n- Frank Dellaert, Yong-Dian Jian\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bc_\bp_\bp\n+ * _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00893.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00893.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00893 = [\n- [\"buildFactorSubgraph\", \"a00893.html#a0ec82adc6e13261cf4a012b65b301256\", null],\n- [\"splitFactorGraph\", \"a00893.html#a2c7eca9f27b43b52756c1afd85478dd8\", null]\n+ [\"gtsam::traits< VectorValues >\", \"a04068.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00896.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00896.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactorGraph.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Errors.h File Reference\n \n \n \n \n \n \n \n@@ -94,55 +94,87 @@\n \n \n \n \n \n
\n \n-
GaussianFactorGraph.cpp File Reference
\n+
Errors.h File Reference
\n
\n
\n \n-

Linear Factor Graph where all factors are Gaussians. \n+

vector of errors \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::traits< Errors >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n+\n+\n+\n

\n Typedefs

\n-using gtsam::SparseTriplets = std::vector< std::tuple< int, int, double > >
 
\n+using gtsam::Errors = FastList< Vector >
 Errors is a vector of errors.
 
\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 Functions

bool gtsam::hasConstraints (const GaussianFactorGraph &factors)
 Evaluates whether linear factors have any constrained noise models.
 
\n+Errors gtsam::createErrors (const VectorValues &V)
 Break V into pieces according to its start indices.
 
\n+void gtsam::print (const Errors &e, const std::string &s="Errors")
 Print an Errors instance.
 
\n+bool gtsam::equality (const Errors &actual, const Errors &expected, double tol)
 
\n+Errors gtsam::operator+ (const Errors &a, const Errors &b)
 Addition.
 
\n+Errors gtsam::operator- (const Errors &a, const Errors &b)
 Subtraction.
 
\n+Errors gtsam::operator- (const Errors &a)
 Negation.
 
\n+double gtsam::dot (const Errors &a, const Errors &b)
 Dot product.
 
\n+void gtsam::axpy (double alpha, const Errors &x, Errors &y)
 BLAS level 2 style AXPY, y := alpha*x + y
 
\n

Detailed Description

\n-

Linear Factor Graph where all factors are Gaussians.

\n-
Author
Kai Ni
\n-
\n-Christian Potthast
\n-
\n-Richard Roberts
\n-
\n-Frank Dellaert
\n+

vector of errors

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,54 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-GaussianFactorGraph.cpp File Reference\n-Linear Factor Graph where all factors are Gaussians. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Errors.h File Reference\n+vector of errors _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bE_\br_\br_\bo_\br_\bs_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSp\bpa\bar\brs\bse\beT\bTr\bri\bip\bpl\ble\bet\bts\bs = std::vector< std::tuple< int, int, double > >\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:E\bEr\brr\bro\bor\brs\bs = _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt< Vector >\n+\u00a0 Errors is a vector of errors.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\ba_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\bs (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors)\n-\u00a0 Evaluates whether linear factors have any constrained noise models.\n+_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bcr\bre\bea\bat\bte\beE\bEr\brr\bro\bor\brs\bs (const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &V)\n+\u00a0 Break V into pieces according to its start indices.\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const _\bE_\br_\br_\bo_\br_\bs &e, const std::string &s=\"Errors\")\n+\u00a0 Print an Errors instance.\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bli\bit\bty\by (const _\bE_\br_\br_\bo_\br_\bs &actual, const _\bE_\br_\br_\bo_\br_\bs &expected, double\n+ tol)\n+\u00a0\n+_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br+\b+ (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n+\u00a0 Addition.\n+\u00a0\n+_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br-\b- (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n+\u00a0 Subtraction.\n+\u00a0\n+_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br-\b- (const _\bE_\br_\br_\bo_\br_\bs &a)\n+\u00a0 Negation.\n+\u00a0\n+double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdo\bot\bt (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n+\u00a0 Dot product.\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bax\bxp\bpy\by (double alpha, const _\bE_\br_\br_\bo_\br_\bs &x, _\bE_\br_\br_\bo_\br_\bs &y)\n+\u00a0 BLAS level 2 style AXPY, y := alpha*x + y\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Linear Factor Graph where all factors are Gaussians.\n+vector of errors\n Author\n- Kai Ni\n- Christian Potthast\n- Richard Roberts\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n+ * _\bE_\br_\br_\bo_\br_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00896.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00896.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,11 @@\n var a00896 = [\n- [\"hasConstraints\", \"a00896.html#a35c269c3243cab16a7475239a9c91021\", null]\n+ [\"gtsam::traits< Errors >\", \"a03736.html\", null],\n+ [\"Errors\", \"a00896.html#a74eb09e3192f06bae9de746aa981624a\", null],\n+ [\"axpy\", \"a00896.html#a5644e12e89afaac433f5d61c3d8e9003\", null],\n+ [\"createErrors\", \"a00896.html#aa84fa88db91d429bec261c655fc54bd6\", null],\n+ [\"dot\", \"a00896.html#a106ec458ddb425604809da93346af55d\", null],\n+ [\"operator+\", \"a00896.html#a552de56fca49d1b4942dd9b8e8357b0a\", null],\n+ [\"operator-\", \"a00896.html#aa91c0485819ec2bfd249a922c81e3eb4\", null],\n+ [\"operator-\", \"a00896.html#af2dc48a6a2e9abf4d0636578847a6b5a\", null],\n+ [\"print\", \"a00896.html#a6abcac97e441f1454790ff53caa1b229\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00899.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00899.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/JacobianFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/linearExceptions.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,53 +94,36 @@\n \n \n \n \n \n
\n \n-
JacobianFactor.cpp File Reference
\n+Namespaces
\n+
linearExceptions.cpp File Reference
\n \n
\n+\n+

Exceptions that may be thrown by linear solver components. \n+More...

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-

\n-Typedefs

\n-using gtsam::Pairs = std::vector< std::pair< Key, Matrix > >
 
\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-FastVector< VariableSlots::const_iterator > gtsam::orderedSlotsHelper (const Ordering &ordering, const VariableSlots &variableSlots)
 
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptrgtsam::EliminateQR (const GaussianFactorGraph &factors, const Ordering &keys)
 Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that handles constraints (zero sigmas).
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
\n-Christian Potthast
\n-
\n-Frank Dellaert
\n-
Date
Dec 8, 2010
\n+

Exceptions that may be thrown by linear solver components.

\n+
Author
Richard Roberts
\n+
Date
Aug 17, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,38 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-JacobianFactor.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+linearExceptions.cpp File Reference\n+Exceptions that may be thrown by linear solver components. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPa\bai\bir\brs\bs = std::vector< std::pair< _\bK_\be_\by, Matrix > >\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br< VariableSlots:: g\bgt\bts\bsa\bam\bm:\b::\b:o\bor\brd\bde\ber\bre\bed\bdS\bSl\blo\bot\bts\bsH\bHe\bel\blp\bpe\ber\br (const\n- const_iterator >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering, const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs\n- &variableSlots)\n-\u00a0\n- std::pair< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR (const\n-_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n- >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n- Multiply all factors and eliminate the\n-\u00a0 given keys from the resulting factor\n- using a QR variant that handles\n- constraints (zero sigmas).\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Exceptions that may be thrown by linear solver components.\n Author\n Richard Roberts\n- Christian Potthast\n- Frank Dellaert\n Date\n- Dec 8, 2010\n+ Aug 17, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00902.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00902.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AttitudeFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/TangentPreintegration.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,57 +94,64 @@\n \n \n \n \n \n
\n \n-
AttitudeFactor.h File Reference
\n+Namespaces |\n+Macros
\n+
TangentPreintegration.cpp File Reference
\n \n
\n-\n-

Header file for Attitude factor. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::AttitudeFactor
 Base class for prior on attitude Example: More...
 
class  gtsam::Rot3AttitudeFactor
 Version of AttitudeFactor for Rot3. More...
 
struct  gtsam::traits< Rot3AttitudeFactor >
 traits More...
 
class  gtsam::Pose3AttitudeFactor
 Version of AttitudeFactor for Pose3. More...
 
struct  gtsam::traits< Pose3AttitudeFactor >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Macros

\n+#define D_R_R(H)   (H)->block<3,3>(0,0)
 
\n+#define D_R_t(H)   (H)->block<3,3>(0,3)
 
\n+#define D_R_v(H)   (H)->block<3,3>(0,6)
 
\n+#define D_t_R(H)   (H)->block<3,3>(3,0)
 
\n+#define D_t_t(H)   (H)->block<3,3>(3,3)
 
\n+#define D_t_v(H)   (H)->block<3,3>(3,6)
 
\n+#define D_v_R(H)   (H)->block<3,3>(6,0)
 
\n+#define D_v_t(H)   (H)->block<3,3>(6,3)
 
\n+#define D_v_v(H)   (H)->block<3,3>(6,6)
 
\n

Detailed Description

\n-

Header file for Attitude factor.

\n-
Author
Frank Dellaert
\n-
Date
January 28, 2014
\n+
Author
Frank Dellaert
\n+
\n+Adam Bry
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,38 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-AttitudeFactor.h File Reference\n-Header file for Attitude factor. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Base class for prior on attitude Example: _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Version of _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br for _\bR_\bo_\bt_\b3. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n+TangentPreintegration.cpp File Reference\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n+\u00a0 Global functions in a separate testing namespace.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 D\bD_\b_R\bR_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,0)\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Version of _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br for _\bP_\bo_\bs_\be_\b3. _\bM_\bo_\br_\be_\b._\b._\b.\n+#define\u00a0 D\bD_\b_R\bR_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,3)\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+#define\u00a0 D\bD_\b_R\bR_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,6)\n \u00a0\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n-\u00a0 Global functions in a separate testing namespace.\n+#define\u00a0 D\bD_\b_t\bt_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,0)\n+\u00a0\n+#define\u00a0 D\bD_\b_t\bt_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,3)\n+\u00a0\n+#define\u00a0 D\bD_\b_t\bt_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,6)\n+\u00a0\n+#define\u00a0 D\bD_\b_v\bv_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,0)\n+\u00a0\n+#define\u00a0 D\bD_\b_v\bv_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,3)\n+\u00a0\n+#define\u00a0 D\bD_\b_v\bv_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,6)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Header file for Attitude factor.\n Author\n Frank Dellaert\n- Date\n- January 28, 2014\n+ Adam Bry\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00908.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00908.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ConstantVelocityFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,42 +96,46 @@\n \n \n \n
\n \n-
ConstantVelocityFactor.h File Reference
\n+
GPSFactor.h File Reference
\n
\n
\n \n-

Maintain a constant velocity motion model between two NavStates. \n+

Header file for GPS factor. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::ConstantVelocityFactor
 Binary factor for applying a constant velocity model to a moving body represented as a NavState. More...
class  gtsam::GPSFactor
 Prior on position in a Cartesian frame. More...
 
class  gtsam::GPSFactor2
 Version of GPSFactor for NavState. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Maintain a constant velocity motion model between two NavStates.

\n-
Author
Asa Hammond
\n+

Header file for GPS factor.

\n+
Author
Frank Dellaert
\n+
Date
January 22, 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ConstantVelocityFactor.h File Reference\n-Maintain a constant velocity motion model between two NavStates. _\bM_\bo_\br_\be_\b._\b._\b.\n+GPSFactor.h File Reference\n+Header file for GPS factor. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Binary factor for applying a constant velocity model to a moving body\n- represented as a _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Prior on position in a Cartesian frame. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+\u00a0 Version of _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br for _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Maintain a constant velocity motion model between two NavStates.\n+Header file for GPS factor.\n Author\n- Asa Hammond\n+ Frank Dellaert\n+ Date\n+ January 22, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00908_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00908_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ConstantVelocityFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
ConstantVelocityFactor.h
\n+
GPSFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,71 +114,170 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n-\n-
22
\n-
23namespace gtsam {
\n-
24
\n-
\n-
29class ConstantVelocityFactor : public NoiseModelFactorN<NavState, NavState> {
\n-
30 double dt_;
\n-
31
\n-
32 public:
\n-\n-
34
\n-
35 public:
\n-
36 ConstantVelocityFactor(Key i, Key j, double dt, const SharedNoiseModel &model)
\n-
37 : NoiseModelFactorN<NavState, NavState>(model, i, j), dt_(dt) {}
\n-
38 ~ConstantVelocityFactor() override{};
\n-
39
\n-
\n-
50 gtsam::Vector evaluateError(const NavState &x1, const NavState &x2,
\n-
51 boost::optional<gtsam::Matrix &> H1 = boost::none,
\n-
52 boost::optional<gtsam::Matrix &> H2 = boost::none) const override {
\n-
53 // only used to use update() below
\n-
54 static const Vector3 b_accel{0.0, 0.0, 0.0};
\n-
55 static const Vector3 b_omega{0.0, 0.0, 0.0};
\n-
56
\n-
57 Matrix99 predicted_H_x1;
\n-
58 NavState predicted = x1.update(b_accel, b_omega, dt_, H1 ? &predicted_H_x1 : nullptr, {}, {});
\n-
59
\n-
60 Matrix99 error_H_predicted;
\n-
61 Vector9 error = predicted.localCoordinates(x2, H1 ? &error_H_predicted : nullptr, H2);
\n-
62
\n-
63 if (H1) {
\n-
64 *H1 = error_H_predicted * predicted_H_x1;
\n-
65 }
\n-
66 return error;
\n-
67 }
\n-
\n-
68};
\n-
\n-
69
\n-
70} // namespace gtsam
\n-
Navigation state composing of attitude, position, and velocity.
\n-
Non-linear factor base classes.
\n+\n+\n+\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
\n+
35class GTSAM_EXPORT GPSFactor: public NoiseModelFactorN<Pose3> {
\n+
36
\n+
37private:
\n+
38
\n+\n+
40
\n+
41 Point3 nT_;
\n+
42
\n+
43public:
\n+
44
\n+
46 typedef boost::shared_ptr<GPSFactor> shared_ptr;
\n+
47
\n+
49 typedef GPSFactor This;
\n+
50
\n+
52 GPSFactor(): nT_(0, 0, 0) {}
\n+
53
\n+
54 ~GPSFactor() override {}
\n+
55
\n+
\n+
63 GPSFactor(Key key, const Point3& gpsIn, const SharedNoiseModel& model) :
\n+
64 Base(model, key), nT_(gpsIn) {
\n+
65 }
\n+
\n+
66
\n+
\n+
68 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
69 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
70 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
71 }
\n+
\n+
72
\n+
74 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
75 DefaultKeyFormatter) const override;
\n+
76
\n+
78 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n+
79
\n+
81 Vector evaluateError(const Pose3& p,
\n+
82 boost::optional<Matrix&> H = boost::none) const override;
\n+
83
\n+
84 inline const Point3 & measurementIn() const {
\n+
85 return nT_;
\n+
86 }
\n+
87
\n+
93 static std::pair<Pose3, Vector3> EstimateState(double t1, const Point3& NED1,
\n+
94 double t2, const Point3& NED2, double timestamp);
\n+
95
\n+
96private:
\n+
97
\n+
99 friend class boost::serialization::access;
\n+
100 template<class ARCHIVE>
\n+
101 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
102 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
103 ar
\n+
104 & boost::serialization::make_nvp("NoiseModelFactor1",
\n+
105 boost::serialization::base_object<Base>(*this));
\n+
106 ar & BOOST_SERIALIZATION_NVP(nT_);
\n+
107 }
\n+
108};
\n+
\n+
109
\n+
\n+
114class GTSAM_EXPORT GPSFactor2: public NoiseModelFactorN<NavState> {
\n+
115
\n+
116private:
\n+
117
\n+\n+
119
\n+
120 Point3 nT_;
\n+
121
\n+
122public:
\n+
123
\n+
125 typedef boost::shared_ptr<GPSFactor2> shared_ptr;
\n+
126
\n+\n+
129
\n+
131 GPSFactor2():nT_(0, 0, 0) {}
\n+
132
\n+
133 ~GPSFactor2() override {}
\n+
134
\n+
\n+
136 GPSFactor2(Key key, const Point3& gpsIn, const SharedNoiseModel& model) :
\n+
137 Base(model, key), nT_(gpsIn) {
\n+
138 }
\n+
\n+
139
\n+
\n+
141 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
142 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
143 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
144 }
\n+
\n+
145
\n+
147 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
148 DefaultKeyFormatter) const override;
\n+
149
\n+
151 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n+
152
\n+
154 Vector evaluateError(const NavState& p,
\n+
155 boost::optional<Matrix&> H = boost::none) const override;
\n+
156
\n+
157 inline const Point3 & measurementIn() const {
\n+
158 return nT_;
\n+
159 }
\n+
160
\n+
161private:
\n+
162
\n+
164 friend class boost::serialization::access;
\n+
165 template<class ARCHIVE>
\n+
166 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
167 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
168 ar
\n+
169 & boost::serialization::make_nvp("NoiseModelFactor1",
\n+
170 boost::serialization::base_object<Base>(*this));
\n+
171 ar & BOOST_SERIALIZATION_NVP(nT_);
\n+
172 }
\n+
173};
\n+
\n+
174
\n+
175}
\n+
3D Pose
\n+
Navigation state composing of attitude, position, and velocity.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
Binary factor for applying a constant velocity model to a moving body represented as a NavState.
Definition ConstantVelocityFactor.h:29
\n-
gtsam::Vector evaluateError(const NavState &x1, const NavState &x2, boost::optional< gtsam::Matrix & > H1=boost::none, boost::optional< gtsam::Matrix & > H2=boost::none) const override
Caclulate error: (x2 - x1.update(dt))) where X1 and X1 are NavStates and dt is the time difference in...
Definition ConstantVelocityFactor.h:50
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Prior on position in a Cartesian frame.
Definition GPSFactor.h:35
\n+
GPSFactor This
Typedef to this class.
Definition GPSFactor.h:49
\n+
GPSFactor()
default constructor - only use for serialization
Definition GPSFactor.h:52
\n+
GPSFactor(Key key, const Point3 &gpsIn, const SharedNoiseModel &model)
Constructor from a measurement in a Cartesian frame.
Definition GPSFactor.h:63
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition GPSFactor.h:68
\n+
boost::shared_ptr< GPSFactor > shared_ptr
shorthand for a smart pointer to a factor
Definition GPSFactor.h:46
\n+
Version of GPSFactor for NavState.
Definition GPSFactor.h:114
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition GPSFactor.h:141
\n+
GPSFactor2 This
Typedef to this class.
Definition GPSFactor.h:128
\n+
GPSFactor2(Key key, const Point3 &gpsIn, const SharedNoiseModel &model)
Constructor from a measurement in a Cartesian frame.
Definition GPSFactor.h:136
\n+
boost::shared_ptr< GPSFactor2 > shared_ptr
shorthand for a smart pointer to a factor
Definition GPSFactor.h:125
\n+
GPSFactor2()
default constructor - only use for serialization
Definition GPSFactor.h:131
\n
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n-
Vector9 localCoordinates(const NavState &g, OptionalJacobian< 9, 9 > H1=boost::none, OptionalJacobian< 9, 9 > H2=boost::none) const
localCoordinates with optional derivatives
Definition NavState.cpp:135
\n-
NavState update(const Vector3 &b_acceleration, const Vector3 &b_omega, const double dt, OptionalJacobian< 9, 9 > F, OptionalJacobian< 9, 3 > G1, OptionalJacobian< 9, 3 > G2) const
Integrate forward in time given angular velocity and acceleration in body frame Uses second order int...
Definition NavState.cpp:171
\n-
double error(const Values &c) const override
Calculate the error of the factor.
Definition NonlinearFactor.cpp:138
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ConstantVelocityFactor.h\n+GPSFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,101 +16,221 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-_\b2_\b9class _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-30 double dt_;\n-31\n-32 public:\n-33 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b,_\b _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b>;\n-34\n-35 public:\n-36 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by i, _\bK_\be_\by j, double dt, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-&model)\n-37 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b,_\b _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b>(model, i, j), dt_(dt) {}\n-38 _\b~_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br() override{};\n-39\n-_\b5_\b0 gtsam::Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be &x1, const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be &x2,\n-51 boost::optional H1 = boost::none,\n-52 boost::optional H2 = boost::none) const override {\n-53 // only used to use update() below\n-54 static const Vector3 b_accel{0.0, 0.0, 0.0};\n-55 static const Vector3 b_omega{0.0, 0.0, 0.0};\n-56\n-57 Matrix99 predicted_H_x1;\n-58 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be predicted = x1._\bu_\bp_\bd_\ba_\bt_\be(b_accel, b_omega, dt_, H1 ? &predicted_H_x1 :\n-nullptr, {}, {});\n-59\n-60 Matrix99 error_H_predicted;\n-61 Vector9 _\be_\br_\br_\bo_\br = predicted._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(x2, H1 ? &error_H_predicted :\n-nullptr, H2);\n-62\n-63 if (H1) {\n-64 *H1 = error_H_predicted * predicted_H_x1;\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+_\b3_\b5class GTSAM_EXPORT _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+36\n+37private:\n+38\n+39 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b> _\bB_\ba_\bs_\be;\n+40\n+41 _\bP_\bo_\bi_\bn_\bt_\b3 nT_;\n+42\n+43public:\n+44\n+_\b4_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+47\n+_\b4_\b9 typedef _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+50\n+_\b5_\b2 _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br(): nT_(0, 0, 0) {}\n+53\n+54 _\b~_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+55\n+_\b6_\b3 _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, const _\bP_\bo_\bi_\bn_\bt_\b3& gpsIn, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n+64 _\bB_\ba_\bs_\be(model, key), nT_(gpsIn) {\n 65 }\n-66 return _\be_\br_\br_\bo_\br;\n-67 }\n-68};\n-69\n-70} // namespace gtsam\n+66\n+_\b6_\b8 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+69 return boost::static_pointer_cast(\n+70 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+71 }\n+72\n+74 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+75 DefaultKeyFormatter) const override;\n+76\n+78 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n+override;\n+79\n+81 Vector evaluateError(const _\bP_\bo_\bs_\be_\b3& p,\n+82 boost::optional H = boost::none) const override;\n+83\n+84 inline const _\bP_\bo_\bi_\bn_\bt_\b3 & measurementIn() const {\n+85 return nT_;\n+86 }\n+87\n+93 static std::pair EstimateState(double t1, const Point3&\n+NED1,\n+94 double t2, const Point3& NED2, double timestamp);\n+95\n+96private:\n+97\n+_\b9_\b9 friend class boost::serialization::access;\n+100 template\n+101 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+102 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n+compatibility\n+103 ar\n+104 & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n+105 boost::serialization::base_object(*this));\n+106 ar & BOOST_SERIALIZATION_NVP(nT_);\n+107 }\n+108};\n+109\n+_\b1_\b1_\b4class GTSAM_EXPORT _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+115\n+116private:\n+117\n+118 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b> _\bB_\ba_\bs_\be;\n+119\n+120 _\bP_\bo_\bi_\bn_\bt_\b3 nT_;\n+121\n+122public:\n+123\n+_\b1_\b2_\b5 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+126\n+_\b1_\b2_\b8 typedef _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2 _\bT_\bh_\bi_\bs;\n+129\n+_\b1_\b3_\b1 _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2():nT_(0, 0, 0) {}\n+132\n+133 _\b~_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2() override {}\n+134\n+_\b1_\b3_\b6 _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2(_\bK_\be_\by key, const _\bP_\bo_\bi_\bn_\bt_\b3& gpsIn, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n+137 _\bB_\ba_\bs_\be(model, key), nT_(gpsIn) {\n+138 }\n+139\n+_\b1_\b4_\b1 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+142 return boost::static_pointer_cast(\n+143 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+144 }\n+145\n+147 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+148 DefaultKeyFormatter) const override;\n+149\n+151 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n+override;\n+152\n+154 Vector evaluateError(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& p,\n+155 boost::optional H = boost::none) const override;\n+156\n+157 inline const _\bP_\bo_\bi_\bn_\bt_\b3 & measurementIn() const {\n+158 return nT_;\n+159 }\n+160\n+161private:\n+162\n+_\b1_\b6_\b4 friend class boost::serialization::access;\n+165 template\n+166 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+167 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n+compatibility\n+168 ar\n+169 & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n+170 boost::serialization::base_object(*this));\n+171 ar & BOOST_SERIALIZATION_NVP(nT_);\n+172 }\n+173};\n+174\n+175}\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n Navigation state composing of attitude, position, and velocity.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n Aliases.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br\n-Binary factor for applying a constant velocity model to a moving body\n-represented as a NavState.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConstantVelocityFactor.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-gtsam::Vector evaluateError(const NavState &x1, const NavState &x2, boost::\n-optional< gtsam::Matrix & > H1=boost::none, boost::optional< gtsam::Matrix & >\n-H2=boost::none) const override\n-Caclulate error: (x2 - x1.update(dt))) where X1 and X1 are NavStates and dt is\n-the time difference in...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConstantVelocityFactor.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br\n+Prior on position in a Cartesian frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+GPSFactor This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br\n+GPSFactor()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br\n+GPSFactor(Key key, const Point3 &gpsIn, const SharedNoiseModel &model)\n+Constructor from a measurement in a Cartesian frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< GPSFactor > shared_ptr\n+shorthand for a smart pointer to a factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+Version of GPSFactor for NavState.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bT_\bh_\bi_\bs\n+GPSFactor2 This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+GPSFactor2(Key key, const Point3 &gpsIn, const SharedNoiseModel &model)\n+Constructor from a measurement in a Cartesian frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< GPSFactor2 > shared_ptr\n+shorthand for a smart pointer to a factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:125\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+GPSFactor2()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:131\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n not make sense to make...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-Vector9 localCoordinates(const NavState &g, OptionalJacobian< 9, 9 > H1=boost::\n-none, OptionalJacobian< 9, 9 > H2=boost::none) const\n-localCoordinates with optional derivatives\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.cpp:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-NavState update(const Vector3 &b_acceleration, const Vector3 &b_omega, const\n-double dt, OptionalJacobian< 9, 9 > F, OptionalJacobian< 9, 3 > G1,\n-OptionalJacobian< 9, 3 > G2) const\n-Integrate forward in time given angular velocity and acceleration in body frame\n-Uses second order int...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.cpp:171\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &c) const override\n-Calculate the error of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n A convenient base class for creating your own NoiseModelFactor with n\n variables.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00914.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00914.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationBase.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/Scenario.h File Reference\n \n \n \n \n \n \n \n@@ -96,62 +96,48 @@\n \n \n \n
\n \n-
PreintegrationBase.h File Reference
\n+
Scenario.h File Reference
\n
\n
\n \n+

Simple class to test navigation scenarios. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::PreintegrationBase
 PreintegrationBase is the base class for PreintegratedMeasurements (in ImuFactor) and CombinedPreintegratedMeasurements (in CombinedImuFactor). More...
class  gtsam::Scenario
 Simple trajectory simulator. More...
 
class  gtsam::ConstantTwistScenario
 Scenario with constant twist 3D trajectory. More...
 
class  gtsam::AcceleratingScenario
 Accelerating from an arbitrary initial state, with optional rotation. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Luca Carlone
\n-
\n-Stephen Williams
\n-
\n-Richard Roberts
\n-
\n-Vadim Indelman
\n-
\n-David Jensen
\n-
\n-Frank Dellaert
\n-
\n-Varun Agrawal
\n-
\n-Luca Carlone
\n-
\n-Stephen Williams
\n-
\n-Richard Roberts
\n-
\n-Vadim Indelman
\n-
\n-David Jensen
\n-
\n-Frank Dellaert
\n+

Simple class to test navigation scenarios.

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-PreintegrationBase.h File Reference\n+Scenario.h File Reference\n+Simple class to test navigation scenarios. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n- _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be is the base class for PreintegratedMeasurements (in\n-\u00a0 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br) and CombinedPreintegratedMeasurements (in\n- _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br). _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n+\u00a0 Simple trajectory simulator. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n+\u00a0 _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo with constant twist 3D trajectory. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n+\u00a0 Accelerating from an arbitrary initial state, with optional rotation.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Simple class to test navigation scenarios.\n Author\n- Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n- Frank Dellaert\n- Varun Agrawal\n- Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b._\bh\n+ * _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00914.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00914.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a00914 = [\n- [\"gtsam::PreintegrationBase\", \"a04216.html\", \"a04216\"]\n+ [\"gtsam::Scenario\", \"a04224.html\", \"a04224\"],\n+ [\"gtsam::ConstantTwistScenario\", \"a04228.html\", \"a04228\"],\n+ [\"gtsam::AcceleratingScenario\", \"a04232.html\", \"a04232\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00914_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00914_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationBase.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/Scenario.h Source File\n \n \n \n \n \n \n \n@@ -98,175 +98,152 @@\n
No Matches
\n \n \n \n \n \n
\n-
PreintegrationBase.h
\n+
Scenario.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
22#pragma once
\n+
18#pragma once
\n+\n+\n+
21
\n+
22namespace gtsam {
\n
23
\n-\n-\n-\n-\n-
28
\n-
29#include <iosfwd>
\n-
30#include <string>
\n-
31#include <utility>
\n-
32
\n-
33namespace gtsam {
\n-
34
\n-
\n-
41class GTSAM_EXPORT PreintegrationBase {
\n-
42 public:
\n-\n-\n-
45
\n-
46 protected:
\n-
47 boost::shared_ptr<Params> p_;
\n-
48
\n-\n-
51
\n-
53 double deltaTij_;
\n-
54
\n-\n-
57
\n-\n-
60
\n+
\n+
25class Scenario {
\n+
26 public:
\n+
28 virtual ~Scenario() {}
\n+
29
\n+
30 // Quantities a Scenario needs to specify:
\n+
31
\n+
32 virtual Pose3 pose(double t) const = 0;
\n+
33 virtual Vector3 omega_b(double t) const = 0;
\n+
34 virtual Vector3 velocity_n(double t) const = 0;
\n+
35 virtual Vector3 acceleration_n(double t) const = 0;
\n+
36
\n+
37 // Derived quantities:
\n+
38
\n+
39 Rot3 rotation(double t) const { return pose(t).rotation(); }
\n+
40 NavState navState(double t) const { return NavState(pose(t), velocity_n(t)); }
\n+
41
\n+
42 Vector3 velocity_b(double t) const {
\n+
43 const Rot3 nRb = rotation(t);
\n+
44 return nRb.transpose() * velocity_n(t);
\n+
45 }
\n+
46
\n+
47 Vector3 acceleration_b(double t) const {
\n+
48 const Rot3 nRb = rotation(t);
\n+
49 return nRb.transpose() * acceleration_n(t);
\n+
50 }
\n+
51};
\n+
\n+
52
\n+
\n+\n
61 public:
\n-
64
\n-
70 PreintegrationBase(const boost::shared_ptr<Params>& p,
\n-\n-
72
\n-
74
\n-
78 virtual void resetIntegration() = 0;
\n-
79
\n-
83 void resetIntegrationAndSetBias(const Bias& biasHat);
\n-
84
\n-
\n-
86 bool matchesParamsWith(const PreintegrationBase& other) const {
\n-
87 return p_.get() == other.p_.get();
\n-
88 }
\n-
\n-
89
\n-
\n-
91 const boost::shared_ptr<Params>& params() const {
\n-
92 return p_;
\n-
93 }
\n-
\n-
94
\n-
\n-
96 Params& p() const {
\n-
97 return *p_;
\n-
98 }
\n-
\n-
99
\n-
101
\n-
104 const imuBias::ConstantBias& biasHat() const { return biasHat_; }
\n-
105 double deltaTij() const { return deltaTij_; }
\n-
106
\n-
107 virtual Vector3 deltaPij() const = 0;
\n-
108 virtual Vector3 deltaVij() const = 0;
\n-
109 virtual Rot3 deltaRij() const = 0;
\n-
110 virtual NavState deltaXij() const = 0;
\n-
111
\n-
112 // Exposed for MATLAB
\n-
113 Vector6 biasHatVector() const { return biasHat_.vector(); }
\n-
115
\n-
118 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const PreintegrationBase& pim);
\n-
119 virtual void print(const std::string& s="") const;
\n-
121
\n-
124
\n-
130 std::pair<Vector3, Vector3> correctMeasurementsBySensorPose(
\n-
131 const Vector3& unbiasedAcc, const Vector3& unbiasedOmega,
\n-
132 OptionalJacobian<3, 3> correctedAcc_H_unbiasedAcc = boost::none,
\n-
133 OptionalJacobian<3, 3> correctedAcc_H_unbiasedOmega = boost::none,
\n-
134 OptionalJacobian<3, 3> correctedOmega_H_unbiasedOmega = boost::none) const;
\n-
135
\n-
141 virtual void update(const Vector3& measuredAcc, const Vector3& measuredOmega,
\n-
142 const double dt, Matrix9* A, Matrix93* B, Matrix93* C) = 0;
\n-
143
\n-
145 virtual void integrateMeasurement(const Vector3& measuredAcc,
\n-
146 const Vector3& measuredOmega, const double dt);
\n-
147
\n-
150 virtual Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,
\n-
151 OptionalJacobian<9, 6> H = boost::none) const = 0;
\n-
152
\n-
154 NavState predict(const NavState& state_i, const imuBias::ConstantBias& bias_i,
\n-
155 OptionalJacobian<9, 9> H1 = boost::none,
\n-
156 OptionalJacobian<9, 6> H2 = boost::none) const;
\n-
157
\n-
159 Vector9 computeError(const NavState& state_i, const NavState& state_j,
\n-
160 const imuBias::ConstantBias& bias_i,
\n-\n-
162 OptionalJacobian<9, 6> H3) const;
\n-
163
\n-
168 Vector9 computeErrorAndJacobians(const Pose3& pose_i, const Vector3& vel_i,
\n-
169 const Pose3& pose_j, const Vector3& vel_j,
\n-\n-
171 boost::none, OptionalJacobian<9, 3> H2 = boost::none,
\n-\n-
173 boost::none, OptionalJacobian<9, 6> H5 = boost::none) const;
\n-
174
\n-
175 private:
\n-
177 friend class boost::serialization::access;
\n-
178 template<class ARCHIVE>
\n-
179 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
180 ar & BOOST_SERIALIZATION_NVP(p_);
\n-
181 ar & BOOST_SERIALIZATION_NVP(biasHat_);
\n-
182 ar & BOOST_SERIALIZATION_NVP(deltaTij_);
\n-
183 }
\n-
184
\n-
185 public:
\n-\n-
187};
\n-
\n-
188
\n-
189}
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-\n-\n-
Navigation state composing of attitude, position, and velocity.
\n-\n+
\n+
63 ConstantTwistScenario(const Vector3& w, const Vector3& v,
\n+
64 const Pose3& nTb0 = Pose3())
\n+
65 : twist_((Vector6() << w, v).finished()), a_b_(w.cross(v)), nTb0_(nTb0) {}
\n+
\n+
66
\n+
\n+
67 Pose3 pose(double t) const override {
\n+
68 return nTb0_ * Pose3::Expmap(twist_ * t);
\n+
69 }
\n+
\n+
70 Vector3 omega_b(double t) const override { return twist_.head<3>(); }
\n+
\n+
71 Vector3 velocity_n(double t) const override {
\n+
72 return rotation(t).matrix() * twist_.tail<3>();
\n+
73 }
\n+
\n+
74 Vector3 acceleration_n(double t) const override { return rotation(t) * a_b_; }
\n+
75
\n+
76 private:
\n+
77 const Vector6 twist_;
\n+
78 const Vector3 a_b_; // constant centripetal acceleration in body = w_b * v_b
\n+
79 const Pose3 nTb0_;
\n+
80};
\n+
\n+
81
\n+
\n+\n+
84 public:
\n+
\n+
87 AcceleratingScenario(const Rot3& nRb, const Point3& p0, const Vector3& v0,
\n+
88 const Vector3& a_n,
\n+
89 const Vector3& omega_b = Vector3::Zero())
\n+
90 : nRb_(nRb), p0_(p0), v0_(v0), a_n_(a_n), omega_b_(omega_b) {}
\n+
\n+
91
\n+
\n+
92 Pose3 pose(double t) const override {
\n+
93 return Pose3(nRb_.expmap(omega_b_ * t), p0_ + v0_ * t + a_n_ * t * t / 2.0);
\n+
94 }
\n+
\n+
95 Vector3 omega_b(double t) const override { return omega_b_; }
\n+
96 Vector3 velocity_n(double t) const override { return v0_ + a_n_ * t; }
\n+
97 Vector3 acceleration_n(double t) const override { return a_n_; }
\n+
98
\n+
99 private:
\n+
100 const Rot3 nRb_;
\n+
101 const Vector3 p0_, v0_, a_n_, omega_b_;
\n+
102};
\n+
\n+
103
\n+
104} // namespace gtsam
\n+\n+
Navigation state composing of attitude, position, and velocity.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
Point3 cross(const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H1, OptionalJacobian< 3, 3 > H2)
cross product
Definition Point3.cpp:64
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
Class expmap(const TangentVector &v) const
expmap as required by manifold concept Applies exponential map to v and composes with *this
Definition Lie.h:78
\n
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Definition ImuBias.h:30
\n-
Vector6 vector() const
return the accelerometer and gyro biases in a single vector
Definition ImuBias.h:57
\n+
static Pose3 Expmap(const Vector6 &xi, OptionalJacobian< 6, 6 > Hxi=boost::none)
Exponential map at identity - create a rotation from canonical coordinates .
Definition Pose3.cpp:169
\n+
const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get rotation
Definition Pose3.cpp:315
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
Matrix3 matrix() const
return 3*3 rotation matrix
Definition Rot3M.cpp:219
\n
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n-
PreintegrationBase is the base class for PreintegratedMeasurements (in ImuFactor) and CombinedPreinte...
Definition PreintegrationBase.h:41
\n-
double deltaTij_
Time interval from i to j.
Definition PreintegrationBase.h:53
\n-
virtual ~PreintegrationBase()
Virtual destructor for serialization.
Definition PreintegrationBase.h:59
\n-
bool matchesParamsWith(const PreintegrationBase &other) const
check parameters equality: checks whether shared pointer points to same Params object.
Definition PreintegrationBase.h:86
\n-
virtual Vector9 biasCorrectedDelta(const imuBias::ConstantBias &bias_i, OptionalJacobian< 9, 6 > H=boost::none) const =0
Given the estimate of the bias, return a NavState tangent vector summarizing the preintegrated IMU me...
\n-
Params & p() const
const reference to params
Definition PreintegrationBase.h:96
\n-
Bias biasHat_
Acceleration and gyro bias used for preintegration.
Definition PreintegrationBase.h:50
\n-
PreintegrationBase()
Default constructor for serialization.
Definition PreintegrationBase.h:56
\n-
const boost::shared_ptr< Params > & params() const
shared pointer to params
Definition PreintegrationBase.h:91
\n-
virtual void update(const Vector3 &measuredAcc, const Vector3 &measuredOmega, const double dt, Matrix9 *A, Matrix93 *B, Matrix93 *C)=0
Update preintegrated measurements and get derivatives It takes measured quantities in the j frame Mod...
\n-
Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the c...
Definition PreintegrationParams.h:26
\n+
Simple trajectory simulator.
Definition Scenario.h:25
\n+
virtual Pose3 pose(double t) const =0
pose at time t
\n+
virtual Vector3 acceleration_n(double t) const =0
acceleration in nav frame
\n+
virtual Vector3 velocity_n(double t) const =0
velocity at time t, in nav frame
\n+
virtual ~Scenario()
virtual destructor
Definition Scenario.h:28
\n+
virtual Vector3 omega_b(double t) const =0
angular velocity in body frame
\n+
Scenario with constant twist 3D trajectory.
Definition Scenario.h:60
\n+
ConstantTwistScenario(const Vector3 &w, const Vector3 &v, const Pose3 &nTb0=Pose3())
Construct scenario with constant twist [w,v].
Definition Scenario.h:63
\n+
Vector3 acceleration_n(double t) const override
acceleration in nav frame
Definition Scenario.h:74
\n+
Vector3 omega_b(double t) const override
angular velocity in body frame
Definition Scenario.h:70
\n+
Pose3 pose(double t) const override
pose at time t
Definition Scenario.h:67
\n+
Vector3 velocity_n(double t) const override
velocity at time t, in nav frame
Definition Scenario.h:71
\n+
Accelerating from an arbitrary initial state, with optional rotation.
Definition Scenario.h:83
\n+
Pose3 pose(double t) const override
pose at time t
Definition Scenario.h:92
\n+
Vector3 omega_b(double t) const override
angular velocity in body frame
Definition Scenario.h:95
\n+
AcceleratingScenario(const Rot3 &nRb, const Point3 &p0, const Vector3 &v0, const Vector3 &a_n, const Vector3 &omega_b=Vector3::Zero())
Construct scenario with constant acceleration in navigation frame and optional angular velocity in bo...
Definition Scenario.h:87
\n+
Vector3 acceleration_n(double t) const override
acceleration in nav frame
Definition Scenario.h:97
\n+
Vector3 velocity_n(double t) const override
velocity at time t, in nav frame
Definition Scenario.h:96
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,219 +1,213 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PreintegrationBase.h\n+Scenario.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-22#pragma once\n+18#pragma once\n+19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n+21\n+22namespace _\bg_\bt_\bs_\ba_\bm {\n 23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n-28\n-29#include \n-30#include \n-31#include \n-32\n-33namespace _\bg_\bt_\bs_\ba_\bm {\n-34\n-_\b4_\b1class GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be {\n-42 public:\n-43 typedef _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bB_\bi_\ba_\bs;\n-44 typedef _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs _\bP_\ba_\br_\ba_\bm_\bs;\n-45\n-46 protected:\n-47 boost::shared_ptr p_;\n-48\n-_\b5_\b0 _\bB_\bi_\ba_\bs _\bb_\bi_\ba_\bs_\bH_\ba_\bt_\b_;\n-51\n-_\b5_\b3 double _\bd_\be_\bl_\bt_\ba_\bT_\bi_\bj_\b_;\n-54\n-_\b5_\b6 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be() {}\n-57\n-_\b5_\b9 virtual _\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be() {}\n-60\n+_\b2_\b5class _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo {\n+26 public:\n+_\b2_\b8 virtual _\b~_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo() {}\n+29\n+30 // Quantities a Scenario needs to specify:\n+31\n+_\b3_\b2 virtual _\bP_\bo_\bs_\be_\b3 _\bp_\bo_\bs_\be(double t) const = 0;\n+_\b3_\b3 virtual Vector3 _\bo_\bm_\be_\bg_\ba_\b__\bb(double t) const = 0;\n+_\b3_\b4 virtual Vector3 _\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn(double t) const = 0;\n+_\b3_\b5 virtual Vector3 _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn(double t) const = 0;\n+36\n+37 // Derived quantities:\n+38\n+39 _\bR_\bo_\bt_\b3 rotation(double t) const { return _\bp_\bo_\bs_\be(t)._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn(); }\n+40 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be navState(double t) const { return _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be(_\bp_\bo_\bs_\be(t), _\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn(t));\n+}\n+41\n+42 Vector3 velocity_b(double t) const {\n+43 const Rot3 nRb = rotation(t);\n+44 return nRb.transpose() * _\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn(t);\n+45 }\n+46\n+47 Vector3 acceleration_b(double t) const {\n+48 const Rot3 nRb = rotation(t);\n+49 return nRb.transpose() * _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn(t);\n+50 }\n+51};\n+52\n+_\b6_\b0class _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo : public _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo {\n 61 public:\n-64\n-70 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be(const boost::shared_ptr& p,\n-71 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& biasHat = _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs());\n-72\n-74\n-78 virtual void resetIntegration() = 0;\n-79\n-83 void resetIntegrationAndSetBias(const Bias& biasHat);\n-84\n-_\b8_\b6 bool _\bm_\ba_\bt_\bc_\bh_\be_\bs_\bP_\ba_\br_\ba_\bm_\bs_\bW_\bi_\bt_\bh(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be& other) const {\n-87 return p_.get() == other.p_.get();\n-88 }\n-89\n-_\b9_\b1 const boost::shared_ptr& _\bp_\ba_\br_\ba_\bm_\bs() const {\n-92 return p_;\n-93 }\n-94\n-_\b9_\b6 _\bP_\ba_\br_\ba_\bm_\bs& _\bp() const {\n-97 return *p_;\n-98 }\n-99\n-101\n-104 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& biasHat() const { return biasHat_; }\n-105 double deltaTij() const { return deltaTij_; }\n-106\n-107 virtual Vector3 deltaPij() const = 0;\n-108 virtual Vector3 deltaVij() const = 0;\n-109 virtual Rot3 deltaRij() const = 0;\n-110 virtual NavState deltaXij() const = 0;\n-111\n-112 // Exposed for MATLAB\n-113 Vector6 biasHatVector() const { return biasHat_._\bv_\be_\bc_\bt_\bo_\br(); }\n-115\n-118 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const\n-PreintegrationBase& pim);\n-119 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\") const;\n-121\n-124\n-130 std::pair correctMeasurementsBySensorPose(\n-131 const Vector3& unbiasedAcc, const Vector3& unbiasedOmega,\n-132 OptionalJacobian<3, 3> correctedAcc_H_unbiasedAcc = boost::none,\n-133 OptionalJacobian<3, 3> correctedAcc_H_unbiasedOmega = boost::none,\n-134 OptionalJacobian<3, 3> correctedOmega_H_unbiasedOmega = boost::none) const;\n-135\n-_\b1_\b4_\b1 virtual void _\bu_\bp_\bd_\ba_\bt_\be(const Vector3& measuredAcc, const Vector3&\n-measuredOmega,\n-142 const double dt, Matrix9* A, Matrix93* B, Matrix93* C) = 0;\n-143\n-145 virtual void integrateMeasurement(const Vector3& measuredAcc,\n-146 const Vector3& measuredOmega, const double dt);\n-147\n-_\b1_\b5_\b0 virtual Vector9 _\bb_\bi_\ba_\bs_\bC_\bo_\br_\br_\be_\bc_\bt_\be_\bd_\bD_\be_\bl_\bt_\ba(const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i,\n-151 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H = boost::none) const = 0;\n-152\n-154 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be predict(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state_i, const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs&\n-bias_i,\n-155 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b9_\b> H1 = boost::none,\n-156 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H2 = boost::none) const;\n-157\n-159 Vector9 computeError(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state_i, const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state_j,\n-160 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i,\n-161 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b9_\b> H1, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b9_\b> H2,\n-162 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H3) const;\n-163\n-168 Vector9 computeErrorAndJacobians(const _\bP_\bo_\bs_\be_\b3& pose_i, const Vector3& vel_i,\n-169 const _\bP_\bo_\bs_\be_\b3& pose_j, const Vector3& vel_j,\n-170 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H1 =\n-171 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H2 = boost::none,\n-172 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H3 = boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H4 =\n-173 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H5 = boost::none) const;\n-174\n-175 private:\n-_\b1_\b7_\b7 friend class boost::serialization::access;\n-178 template\n-179 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-180 ar & BOOST_SERIALIZATION_NVP(p_);\n-181 ar & BOOST_SERIALIZATION_NVP(biasHat_);\n-182 ar & BOOST_SERIALIZATION_NVP(deltaTij_);\n-183 }\n-184\n-185 public:\n-186 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-187};\n-188\n-189}\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\b6_\b3 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo(const Vector3& w, const Vector3& v,\n+64 const _\bP_\bo_\bs_\be_\b3& nTb0 = _\bP_\bo_\bs_\be_\b3())\n+65 : twist_((Vector6() << w, v).finished()), a_b_(w._\bc_\br_\bo_\bs_\bs(v)), nTb0_(nTb0) {}\n+66\n+_\b6_\b7 _\bP_\bo_\bs_\be_\b3 _\bp_\bo_\bs_\be(double t) const override {\n+68 return nTb0_ * _\bP_\bo_\bs_\be_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(twist_ * t);\n+69 }\n+_\b7_\b0 Vector3 _\bo_\bm_\be_\bg_\ba_\b__\bb(double t) const override { return twist_.head<3>(); }\n+_\b7_\b1 Vector3 _\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn(double t) const override {\n+72 return rotation(t)._\bm_\ba_\bt_\br_\bi_\bx() * twist_.tail<3>();\n+73 }\n+_\b7_\b4 Vector3 _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn(double t) const override { return rotation(t) * a_b_;\n+}\n+75\n+76 private:\n+77 const Vector6 twist_;\n+78 const Vector3 a_b_; // constant centripetal acceleration in body = w_b * v_b\n+79 const _\bP_\bo_\bs_\be_\b3 nTb0_;\n+80};\n+81\n+_\b8_\b3class _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo : public _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo {\n+84 public:\n+_\b8_\b7 _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo(const _\bR_\bo_\bt_\b3& nRb, const _\bP_\bo_\bi_\bn_\bt_\b3& p0, const Vector3& v0,\n+88 const Vector3& a_n,\n+89 const Vector3& _\bo_\bm_\be_\bg_\ba_\b__\bb = Vector3::Zero())\n+90 : nRb_(nRb), p0_(p0), v0_(v0), a_n_(a_n), omega_b_(_\bo_\bm_\be_\bg_\ba_\b__\bb) {}\n+91\n+_\b9_\b2 _\bP_\bo_\bs_\be_\b3 _\bp_\bo_\bs_\be(double t) const override {\n+93 return _\bP_\bo_\bs_\be_\b3(nRb_._\be_\bx_\bp_\bm_\ba_\bp(omega_b_ * t), p0_ + v0_ * t + a_n_ * t * t / 2.0);\n+94 }\n+_\b9_\b5 Vector3 _\bo_\bm_\be_\bg_\ba_\b__\bb(double t) const override { return omega_b_; }\n+_\b9_\b6 Vector3 _\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn(double t) const override { return v0_ + a_n_ * t; }\n+_\b9_\b7 Vector3 _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn(double t) const override { return a_n_; }\n+98\n+99 private:\n+100 const _\bR_\bo_\bt_\b3 nRb_;\n+101 const Vector3 p0_, v0_, a_n_, omega_b_;\n+102};\n+103\n+104} // namespace gtsam\n _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n-_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n Navigation state composing of attitude, position, and velocity.\n-_\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\bo_\bs_\bs\n+Point3 cross(const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H1,\n+OptionalJacobian< 3, 3 > H2)\n+cross product\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\be_\bx_\bp_\bm_\ba_\bp\n+Class expmap(const TangentVector &v) const\n+expmap as required by manifold concept Applies exponential map to v and\n+composes with *this\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:78\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n A 3D pose (R,t) : (Rot3,Point3)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-Vector6 vector() const\n-return the accelerometer and gyro biases in a single vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n+static Pose3 Expmap(const Vector6 &xi, OptionalJacobian< 6, 6 > Hxi=boost::\n+none)\n+Exponential map at identity - create a rotation from canonical coordinates .\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:169\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n+get rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:315\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+Matrix3 matrix() const\n+return 3*3 rotation matrix\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:219\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n not make sense to make...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-PreintegrationBase is the base class for PreintegratedMeasurements (in\n-ImuFactor) and CombinedPreinte...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bT_\bi_\bj_\b_\n-double deltaTij_\n-Time interval from i to j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-virtual ~PreintegrationBase()\n-Virtual destructor for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bm_\ba_\bt_\bc_\bh_\be_\bs_\bP_\ba_\br_\ba_\bm_\bs_\bW_\bi_\bt_\bh\n-bool matchesParamsWith(const PreintegrationBase &other) const\n-check parameters equality: checks whether shared pointer points to same Params\n-object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bb_\bi_\ba_\bs_\bC_\bo_\br_\br_\be_\bc_\bt_\be_\bd_\bD_\be_\bl_\bt_\ba\n-virtual Vector9 biasCorrectedDelta(const imuBias::ConstantBias &bias_i,\n-OptionalJacobian< 9, 6 > H=boost::none) const =0\n-Given the estimate of the bias, return a NavState tangent vector summarizing\n-the preintegrated IMU me...\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bp\n-Params & p() const\n-const reference to params\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bb_\bi_\ba_\bs_\bH_\ba_\bt_\b_\n-Bias biasHat_\n-Acceleration and gyro bias used for preintegration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n-PreintegrationBase()\n-Default constructor for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs\n-const boost::shared_ptr< Params > & params() const\n-shared pointer to params\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-virtual void update(const Vector3 &measuredAcc, const Vector3 &measuredOmega,\n-const double dt, Matrix9 *A, Matrix93 *B, Matrix93 *C)=0\n-Update preintegrated measurements and get derivatives It takes measured\n-quantities in the j frame Mod...\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for pre-integration: Usage: Create just a single Params and pass a\n-shared pointer to the c...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n+Simple trajectory simulator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:25\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bp_\bo_\bs_\be\n+virtual Pose3 pose(double t) const =0\n+pose at time t\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn\n+virtual Vector3 acceleration_n(double t) const =0\n+acceleration in nav frame\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn\n+virtual Vector3 velocity_n(double t) const =0\n+velocity at time t, in nav frame\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\b~_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n+virtual ~Scenario()\n+virtual destructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bo_\bm_\be_\bg_\ba_\b__\bb\n+virtual Vector3 omega_b(double t) const =0\n+angular velocity in body frame\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n+Scenario with constant twist 3D trajectory.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n+ConstantTwistScenario(const Vector3 &w, const Vector3 &v, const Pose3\n+&nTb0=Pose3())\n+Construct scenario with constant twist [w,v].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn\n+Vector3 acceleration_n(double t) const override\n+acceleration in nav frame\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bo_\bm_\be_\bg_\ba_\b__\bb\n+Vector3 omega_b(double t) const override\n+angular velocity in body frame\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bp_\bo_\bs_\be\n+Pose3 pose(double t) const override\n+pose at time t\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn\n+Vector3 velocity_n(double t) const override\n+velocity at time t, in nav frame\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n+Accelerating from an arbitrary initial state, with optional rotation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bp_\bo_\bs_\be\n+Pose3 pose(double t) const override\n+pose at time t\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bo_\bm_\be_\bg_\ba_\b__\bb\n+Vector3 omega_b(double t) const override\n+angular velocity in body frame\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n+AcceleratingScenario(const Rot3 &nRb, const Point3 &p0, const Vector3 &v0,\n+const Vector3 &a_n, const Vector3 &omega_b=Vector3::Zero())\n+Construct scenario with constant acceleration in navigation frame and optional\n+angular velocity in bo...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn\n+Vector3 acceleration_n(double t) const override\n+acceleration in nav frame\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn\n+Vector3 velocity_n(double t) const override\n+velocity at time t, in nav frame\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:96\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b._\bh\n+ * _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00917.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00917.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationBase.h File Reference\n \n \n \n \n \n \n \n@@ -96,52 +96,62 @@\n \n \n \n
\n \n-
MagFactor.h File Reference
\n+
PreintegrationBase.h File Reference
\n
\n
\n \n-

Factors involving magnetometers. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::MagFactor
 Factor to estimate rotation given magnetometer reading This version uses model measured bM = scale * bRn * direction + bias and assumes scale, direction, and the bias are given. More...
 
class  gtsam::MagFactor1
 Factor to estimate rotation given magnetometer reading This version uses model measured bM = scale * bRn * direction + bias and assumes scale, direction, and the bias are given. More...
 
class  gtsam::MagFactor2
 Factor to calibrate local Earth magnetic field as well as magnetometer bias This version uses model measured bM = bRn * nM + bias and optimizes for both nM and the bias, where nM is in units defined by magnetometer. More...
 
class  gtsam::MagFactor3
 Factor to calibrate local Earth magnetic field as well as magnetometer bias This version uses model measured bM = scale * bRn * direction + bias and optimizes for both scale, direction, and the bias. More...
class  gtsam::PreintegrationBase
 PreintegrationBase is the base class for PreintegratedMeasurements (in ImuFactor) and CombinedPreintegratedMeasurements (in CombinedImuFactor). More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Factors involving magnetometers.

\n-
Author
Frank Dellaert
\n-
Date
January 29, 2014
\n+
Author
Luca Carlone
\n+
\n+Stephen Williams
\n+
\n+Richard Roberts
\n+
\n+Vadim Indelman
\n+
\n+David Jensen
\n+
\n+Frank Dellaert
\n+
\n+Varun Agrawal
\n+
\n+Luca Carlone
\n+
\n+Stephen Williams
\n+
\n+Richard Roberts
\n+
\n+Vadim Indelman
\n+
\n+David Jensen
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,45 +1,37 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-MagFactor.h File Reference\n-Factors involving magnetometers. _\bM_\bo_\br_\be_\b._\b._\b.\n+PreintegrationBase.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br\n- _\bF_\ba_\bc_\bt_\bo_\br to estimate rotation given magnetometer reading This version\n-\u00a0 uses model measured bM = scale * bRn * direction + bias and assumes\n- scale, direction, and the bias are given. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1\n- _\bF_\ba_\bc_\bt_\bo_\br to estimate rotation given magnetometer reading This version\n-\u00a0 uses model measured bM = scale * bRn * direction + bias and assumes\n- scale, direction, and the bias are given. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2\n- _\bF_\ba_\bc_\bt_\bo_\br to calibrate local Earth magnetic field as well as magnetometer\n-\u00a0 bias This version uses model measured bM = bRn * nM + bias and\n- optimizes for both nM and the bias, where nM is in units defined by\n- magnetometer. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3\n- _\bF_\ba_\bc_\bt_\bo_\br to calibrate local Earth magnetic field as well as magnetometer\n-\u00a0 bias This version uses model measured bM = scale * bRn * direction +\n- bias and optimizes for both scale, direction, and the bias. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+ _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be is the base class for PreintegratedMeasurements (in\n+\u00a0 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br) and CombinedPreintegratedMeasurements (in\n+ _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br). _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factors involving magnetometers.\n Author\n+ Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n+ Frank Dellaert\n+ Varun Agrawal\n+ Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n Frank Dellaert\n- Date\n- January 29, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00917.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00917.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,3 @@\n var a00917 = [\n- [\"gtsam::MagFactor\", \"a04172.html\", \"a04172\"],\n- [\"gtsam::MagFactor1\", \"a04176.html\", \"a04176\"],\n- [\"gtsam::MagFactor2\", \"a04180.html\", \"a04180\"],\n- [\"gtsam::MagFactor3\", \"a04184.html\", \"a04184\"]\n+ [\"gtsam::PreintegrationBase\", \"a04216.html\", \"a04216\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00917_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00917_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationBase.h Source File\n \n \n \n \n \n \n \n@@ -98,241 +98,175 @@\n
No Matches
\n \n \n \n \n \n
\n-
MagFactor.h
\n+
PreintegrationBase.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-
22#include <gtsam/geometry/Rot2.h>
\n-
23#include <gtsam/geometry/Rot3.h>
\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
\n-
33class MagFactor: public NoiseModelFactorN<Rot2> {
\n+
22#pragma once
\n+
23
\n+\n+\n+\n+\n+
28
\n+
29#include <iosfwd>
\n+
30#include <string>
\n+
31#include <utility>
\n+
32
\n+
33namespace gtsam {
\n
34
\n-
35 const Point3 measured_;
\n-
36 const Point3 nM_;
\n-
37 const Point3 bias_;
\n-
38
\n-
39public:
\n-
40
\n-
\n-
50 MagFactor(Key key, const Point3& measured, double scale,
\n-
51 const Unit3& direction, const Point3& bias,
\n-
52 const SharedNoiseModel& model) :
\n-
53 NoiseModelFactorN<Rot2>(model, key), //
\n-
54 measured_(measured), nM_(scale * direction), bias_(bias) {
\n-
55 }
\n-
\n-
56
\n-
\n-
58 NonlinearFactor::shared_ptr clone() const override {
\n-
59 return boost::static_pointer_cast<NonlinearFactor>(
\n-
60 NonlinearFactor::shared_ptr(new MagFactor(*this)));
\n-
61 }
\n-
\n-
62
\n-
63 static Point3 unrotate(const Rot2& R, const Point3& p,
\n-
64 boost::optional<Matrix&> HR = boost::none) {
\n-
65 Point3 q = Rot3::Yaw(R.theta()).unrotate(p, HR, boost::none);
\n-
66 if (HR) {
\n-
67 // assign to temporary first to avoid error in Win-Debug mode
\n-
68 Matrix H = HR->col(2);
\n-
69 *HR = H;
\n-
70 }
\n-
71 return q;
\n-
72 }
\n-
73
\n-
\n-
77 Vector evaluateError(const Rot2& nRb,
\n-
78 boost::optional<Matrix&> H = boost::none) const override {
\n-
79 // measured bM = nRb\ufffd * nM + b
\n-
80 Point3 hx = unrotate(nRb, nM_, H) + bias_;
\n-
81 return (hx - measured_);
\n-
82 }
\n-
\n-
83};
\n-
\n+
\n+
41class GTSAM_EXPORT PreintegrationBase {
\n+
42 public:
\n+\n+\n+
45
\n+
46 protected:
\n+
47 boost::shared_ptr<Params> p_;
\n+
48
\n+\n+
51
\n+
53 double deltaTij_;
\n+
54
\n+\n+
57
\n+\n+
60
\n+
61 public:
\n+
64
\n+
70 PreintegrationBase(const boost::shared_ptr<Params>& p,
\n+\n+
72
\n+
74
\n+
78 virtual void resetIntegration() = 0;
\n+
79
\n+
83 void resetIntegrationAndSetBias(const Bias& biasHat);
\n
84
\n-
\n-
90class MagFactor1: public NoiseModelFactorN<Rot3> {
\n-
91
\n-
92 const Point3 measured_;
\n-
93 const Point3 nM_;
\n-
94 const Point3 bias_;
\n-
95
\n-
96public:
\n-
97
\n-
\n-
99 MagFactor1(Key key, const Point3& measured, double scale,
\n-
100 const Unit3& direction, const Point3& bias,
\n-
101 const SharedNoiseModel& model) :
\n-
102 NoiseModelFactorN<Rot3>(model, key), //
\n-
103 measured_(measured), nM_(scale * direction), bias_(bias) {
\n-
104 }
\n-
\n-
105
\n-
\n-
107 NonlinearFactor::shared_ptr clone() const override {
\n-
108 return boost::static_pointer_cast<NonlinearFactor>(
\n-
109 NonlinearFactor::shared_ptr(new MagFactor1(*this)));
\n-
110 }
\n-
\n+
\n+
86 bool matchesParamsWith(const PreintegrationBase& other) const {
\n+
87 return p_.get() == other.p_.get();
\n+
88 }
\n+
\n+
89
\n+
\n+
91 const boost::shared_ptr<Params>& params() const {
\n+
92 return p_;
\n+
93 }
\n+
\n+
94
\n+
\n+
96 Params& p() const {
\n+
97 return *p_;
\n+
98 }
\n+
\n+
99
\n+
101
\n+
104 const imuBias::ConstantBias& biasHat() const { return biasHat_; }
\n+
105 double deltaTij() const { return deltaTij_; }
\n+
106
\n+
107 virtual Vector3 deltaPij() const = 0;
\n+
108 virtual Vector3 deltaVij() const = 0;
\n+
109 virtual Rot3 deltaRij() const = 0;
\n+
110 virtual NavState deltaXij() const = 0;
\n
111
\n-
\n-
115 Vector evaluateError(const Rot3& nRb,
\n-
116 boost::optional<Matrix&> H = boost::none) const override {
\n-
117 // measured bM = nRb\ufffd * nM + b
\n-
118 Point3 hx = nRb.unrotate(nM_, H, boost::none) + bias_;
\n-
119 return (hx - measured_);
\n-
120 }
\n-
\n-
121};
\n-
\n-
122
\n-
\n-
128class MagFactor2: public NoiseModelFactorN<Point3, Point3> {
\n-
129
\n-
130 const Point3 measured_;
\n-
131 const Rot3 bRn_;
\n-
132
\n-
133public:
\n-
134
\n-
\n-
136 MagFactor2(Key key1, Key key2, const Point3& measured, const Rot3& nRb,
\n-
137 const SharedNoiseModel& model) :
\n-
138 NoiseModelFactorN<Point3, Point3>(model, key1, key2), //
\n-
139 measured_(measured), bRn_(nRb.inverse()) {
\n-
140 }
\n-
\n-
141
\n-
\n-
143 NonlinearFactor::shared_ptr clone() const override {
\n-
144 return boost::static_pointer_cast<NonlinearFactor>(
\n-
145 NonlinearFactor::shared_ptr(new MagFactor2(*this)));
\n-
146 }
\n-
\n+
112 // Exposed for MATLAB
\n+
113 Vector6 biasHatVector() const { return biasHat_.vector(); }
\n+
115
\n+
118 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const PreintegrationBase& pim);
\n+
119 virtual void print(const std::string& s="") const;
\n+
121
\n+
124
\n+
130 std::pair<Vector3, Vector3> correctMeasurementsBySensorPose(
\n+
131 const Vector3& unbiasedAcc, const Vector3& unbiasedOmega,
\n+
132 OptionalJacobian<3, 3> correctedAcc_H_unbiasedAcc = boost::none,
\n+
133 OptionalJacobian<3, 3> correctedAcc_H_unbiasedOmega = boost::none,
\n+
134 OptionalJacobian<3, 3> correctedOmega_H_unbiasedOmega = boost::none) const;
\n+
135
\n+
141 virtual void update(const Vector3& measuredAcc, const Vector3& measuredOmega,
\n+
142 const double dt, Matrix9* A, Matrix93* B, Matrix93* C) = 0;
\n+
143
\n+
145 virtual void integrateMeasurement(const Vector3& measuredAcc,
\n+
146 const Vector3& measuredOmega, const double dt);
\n
147
\n-
\n-
153 Vector evaluateError(const Point3& nM, const Point3& bias,
\n-
154 boost::optional<Matrix&> H1 = boost::none, boost::optional<Matrix&> H2 =
\n-
155 boost::none) const override {
\n-
156 // measured bM = nRb\ufffd * nM + b, where b is unknown bias
\n-
157 Point3 hx = bRn_.rotate(nM, boost::none, H1) + bias;
\n-
158 if (H2)
\n-
159 *H2 = I_3x3;
\n-
160 return (hx - measured_);
\n-
161 }
\n-
\n-
162};
\n-
\n+
150 virtual Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,
\n+
151 OptionalJacobian<9, 6> H = boost::none) const = 0;
\n+
152
\n+
154 NavState predict(const NavState& state_i, const imuBias::ConstantBias& bias_i,
\n+
155 OptionalJacobian<9, 9> H1 = boost::none,
\n+
156 OptionalJacobian<9, 6> H2 = boost::none) const;
\n+
157
\n+
159 Vector9 computeError(const NavState& state_i, const NavState& state_j,
\n+
160 const imuBias::ConstantBias& bias_i,
\n+\n+
162 OptionalJacobian<9, 6> H3) const;
\n
163
\n-
\n-
169class MagFactor3: public NoiseModelFactorN<double, Unit3, Point3> {
\n-
170
\n-
171 const Point3 measured_;
\n-
172 const Rot3 bRn_;
\n-
173
\n-
174public:
\n-
175
\n-
\n-
177 MagFactor3(Key key1, Key key2, Key key3, const Point3& measured,
\n-
178 const Rot3& nRb, const SharedNoiseModel& model) :
\n-
179 NoiseModelFactorN<double, Unit3, Point3>(model, key1, key2, key3), //
\n-
180 measured_(measured), bRn_(nRb.inverse()) {
\n-
181 }
\n-
\n-
182
\n-
\n-
184 NonlinearFactor::shared_ptr clone() const override {
\n-
185 return boost::static_pointer_cast<NonlinearFactor>(
\n-
186 NonlinearFactor::shared_ptr(new MagFactor3(*this)));
\n-
187 }
\n+
168 Vector9 computeErrorAndJacobians(const Pose3& pose_i, const Vector3& vel_i,
\n+
169 const Pose3& pose_j, const Vector3& vel_j,
\n+\n+
171 boost::none, OptionalJacobian<9, 3> H2 = boost::none,
\n+\n+
173 boost::none, OptionalJacobian<9, 6> H5 = boost::none) const;
\n+
174
\n+
175 private:
\n+
177 friend class boost::serialization::access;
\n+
178 template<class ARCHIVE>
\n+
179 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
180 ar & BOOST_SERIALIZATION_NVP(p_);
\n+
181 ar & BOOST_SERIALIZATION_NVP(biasHat_);
\n+
182 ar & BOOST_SERIALIZATION_NVP(deltaTij_);
\n+
183 }
\n+
184
\n+
185 public:
\n+\n+
187};
\n
\n
188
\n-
\n-
194 Vector evaluateError(const double& scale, const Unit3& direction,
\n-
195 const Point3& bias, boost::optional<Matrix&> H1 = boost::none,
\n-
196 boost::optional<Matrix&> H2 = boost::none, boost::optional<Matrix&> H3 =
\n-
197 boost::none) const override {
\n-
198 // measured bM = nRb\ufffd * nM + b, where b is unknown bias
\n-
199 Unit3 rotated = bRn_.rotate(direction, boost::none, H2);
\n-
200 Point3 hx = scale * rotated.point3() + bias;
\n-
201 if (H1)
\n-
202 *H1 = rotated.point3();
\n-
203 if (H2) // H2 is 2*2, but we need 3*2
\n-
204 {
\n-
205 Matrix H;
\n-
206 rotated.point3(H);
\n-
207 *H2 = scale * H * (*H2);
\n-
208 }
\n-
209 if (H3)
\n-
210 *H3 = I_3x3;
\n-
211 return (hx - measured_);
\n-
212 }
\n-
\n-
213};
\n-
\n-
214
\n-
215}
\n-
216
\n-
3D rotation represented as a rotation matrix or quaternion
\n-
2D rotation
\n-
Non-linear factor base classes.
\n+
189}
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+\n+
Navigation state composing of attitude, position, and velocity.
\n+\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.
Definition Rot2.h:36
\n-
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
Point3 unrotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
rotate point from world to rotated frame
Definition Rot3.cpp:136
\n-
static Rot3 Yaw(double t)
Positive yaw is to right (as in aircraft heading). See ypr.
Definition Rot3.h:174
\n-
Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
rotate point from rotated coordinate frame to world
Definition Rot3M.cpp:149
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n-
Point3 point3(OptionalJacobian< 3, 2 > H=boost::none) const
Return unit-norm Point3.
Definition Unit3.cpp:144
\n-
Factor to estimate rotation given magnetometer reading This version uses model measured bM = scale * ...
Definition MagFactor.h:33
\n-
NonlinearFactor::shared_ptr clone() const override
Definition MagFactor.h:58
\n-
MagFactor(Key key, const Point3 &measured, double scale, const Unit3 &direction, const Point3 &bias, const SharedNoiseModel &model)
Constructor of factor that estimates nav to body rotation bRn.
Definition MagFactor.h:50
\n-
Vector evaluateError(const Rot2 &nRb, boost::optional< Matrix & > H=boost::none) const override
vector of errors
Definition MagFactor.h:77
\n-
Factor to estimate rotation given magnetometer reading This version uses model measured bM = scale * ...
Definition MagFactor.h:90
\n-
MagFactor1(Key key, const Point3 &measured, double scale, const Unit3 &direction, const Point3 &bias, const SharedNoiseModel &model)
Constructor.
Definition MagFactor.h:99
\n-
NonlinearFactor::shared_ptr clone() const override
Definition MagFactor.h:107
\n-
Vector evaluateError(const Rot3 &nRb, boost::optional< Matrix & > H=boost::none) const override
vector of errors
Definition MagFactor.h:115
\n-
Factor to calibrate local Earth magnetic field as well as magnetometer bias This version uses model m...
Definition MagFactor.h:128
\n-
NonlinearFactor::shared_ptr clone() const override
Definition MagFactor.h:143
\n-
MagFactor2(Key key1, Key key2, const Point3 &measured, const Rot3 &nRb, const SharedNoiseModel &model)
Constructor.
Definition MagFactor.h:136
\n-
Vector evaluateError(const Point3 &nM, const Point3 &bias, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
vector of errors
Definition MagFactor.h:153
\n-
Factor to calibrate local Earth magnetic field as well as magnetometer bias This version uses model m...
Definition MagFactor.h:169
\n-
Vector evaluateError(const double &scale, const Unit3 &direction, const Point3 &bias, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none, boost::optional< Matrix & > H3=boost::none) const override
vector of errors
Definition MagFactor.h:194
\n-
MagFactor3(Key key1, Key key2, Key key3, const Point3 &measured, const Rot3 &nRb, const SharedNoiseModel &model)
Constructor.
Definition MagFactor.h:177
\n-
NonlinearFactor::shared_ptr clone() const override
Definition MagFactor.h:184
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Definition ImuBias.h:30
\n+
Vector6 vector() const
return the accelerometer and gyro biases in a single vector
Definition ImuBias.h:57
\n+
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n+
PreintegrationBase is the base class for PreintegratedMeasurements (in ImuFactor) and CombinedPreinte...
Definition PreintegrationBase.h:41
\n+
double deltaTij_
Time interval from i to j.
Definition PreintegrationBase.h:53
\n+
virtual ~PreintegrationBase()
Virtual destructor for serialization.
Definition PreintegrationBase.h:59
\n+
bool matchesParamsWith(const PreintegrationBase &other) const
check parameters equality: checks whether shared pointer points to same Params object.
Definition PreintegrationBase.h:86
\n+
virtual Vector9 biasCorrectedDelta(const imuBias::ConstantBias &bias_i, OptionalJacobian< 9, 6 > H=boost::none) const =0
Given the estimate of the bias, return a NavState tangent vector summarizing the preintegrated IMU me...
\n+
Params & p() const
const reference to params
Definition PreintegrationBase.h:96
\n+
Bias biasHat_
Acceleration and gyro bias used for preintegration.
Definition PreintegrationBase.h:50
\n+
PreintegrationBase()
Default constructor for serialization.
Definition PreintegrationBase.h:56
\n+
const boost::shared_ptr< Params > & params() const
shared pointer to params
Definition PreintegrationBase.h:91
\n+
virtual void update(const Vector3 &measuredAcc, const Vector3 &measuredOmega, const double dt, Matrix9 *A, Matrix93 *B, Matrix93 *C)=0
Update preintegrated measurements and get derivatives It takes measured quantities in the j frame Mod...
\n+
Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the c...
Definition PreintegrationParams.h:26
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,297 +1,219 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MagFactor.h\n+PreintegrationBase.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-_\b3_\b3class _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+22#pragma once\n+23\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n+28\n+29#include \n+30#include \n+31#include \n+32\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n 34\n-35 const _\bP_\bo_\bi_\bn_\bt_\b3 measured_;\n-36 const _\bP_\bo_\bi_\bn_\bt_\b3 nM_;\n-37 const _\bP_\bo_\bi_\bn_\bt_\b3 bias_;\n-38\n-39public:\n-40\n-_\b5_\b0 _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const _\bP_\bo_\bi_\bn_\bt_\b3& measured, double scale,\n-51 const _\bU_\bn_\bi_\bt_\b3& direction, const _\bP_\bo_\bi_\bn_\bt_\b3& bias,\n-52 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n-53 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN<_\bR_\bo_\bt_\b2>(model, _\bk_\be_\by), //\n-54 measured_(measured), nM_(scale * direction), bias_(bias) {\n-55 }\n-56\n-_\b5_\b8 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-59 return boost::static_pointer_cast(\n-60 NonlinearFactor::shared_ptr(new _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br(*this)));\n-61 }\n-62\n-63 static _\bP_\bo_\bi_\bn_\bt_\b3 unrotate(const _\bR_\bo_\bt_\b2& R, const _\bP_\bo_\bi_\bn_\bt_\b3& p,\n-64 boost::optional HR = boost::none) {\n-65 _\bP_\bo_\bi_\bn_\bt_\b3 q = _\bR_\bo_\bt_\b3_\b:_\b:_\bY_\ba_\bw(R.theta())._\bu_\bn_\br_\bo_\bt_\ba_\bt_\be(p, HR, boost::none);\n-66 if (HR) {\n-67 // assign to temporary first to avoid error in Win-Debug mode\n-68 Matrix H = HR->col(2);\n-69 *HR = H;\n-70 }\n-71 return q;\n-72 }\n-73\n-_\b7_\b7 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b2& nRb,\n-78 boost::optional H = boost::none) const override {\n-79 // measured bM = nRb\u00ef\u00bf\u00bd * nM + b\n-80 _\bP_\bo_\bi_\bn_\bt_\b3 hx = unrotate(nRb, nM_, H) + bias_;\n-81 return (hx - measured_);\n-82 }\n-83};\n+_\b4_\b1class GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be {\n+42 public:\n+43 typedef _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bB_\bi_\ba_\bs;\n+44 typedef _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs _\bP_\ba_\br_\ba_\bm_\bs;\n+45\n+46 protected:\n+47 boost::shared_ptr p_;\n+48\n+_\b5_\b0 _\bB_\bi_\ba_\bs _\bb_\bi_\ba_\bs_\bH_\ba_\bt_\b_;\n+51\n+_\b5_\b3 double _\bd_\be_\bl_\bt_\ba_\bT_\bi_\bj_\b_;\n+54\n+_\b5_\b6 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be() {}\n+57\n+_\b5_\b9 virtual _\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be() {}\n+60\n+61 public:\n+64\n+70 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be(const boost::shared_ptr& p,\n+71 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& biasHat = _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs());\n+72\n+74\n+78 virtual void resetIntegration() = 0;\n+79\n+83 void resetIntegrationAndSetBias(const Bias& biasHat);\n 84\n-_\b9_\b0class _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-91\n-92 const _\bP_\bo_\bi_\bn_\bt_\b3 measured_;\n-93 const _\bP_\bo_\bi_\bn_\bt_\b3 nM_;\n-94 const _\bP_\bo_\bi_\bn_\bt_\b3 bias_;\n-95\n-96public:\n-97\n-_\b9_\b9 _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1(_\bK_\be_\by _\bk_\be_\by, const _\bP_\bo_\bi_\bn_\bt_\b3& measured, double scale,\n-100 const _\bU_\bn_\bi_\bt_\b3& direction, const _\bP_\bo_\bi_\bn_\bt_\b3& bias,\n-101 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n-102 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN<_\bR_\bo_\bt_\b3>(model, _\bk_\be_\by), //\n-103 measured_(measured), nM_(scale * direction), bias_(bias) {\n-104 }\n-105\n-_\b1_\b0_\b7 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-108 return boost::static_pointer_cast(\n-109 NonlinearFactor::shared_ptr(new _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1(*this)));\n-110 }\n+_\b8_\b6 bool _\bm_\ba_\bt_\bc_\bh_\be_\bs_\bP_\ba_\br_\ba_\bm_\bs_\bW_\bi_\bt_\bh(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be& other) const {\n+87 return p_.get() == other.p_.get();\n+88 }\n+89\n+_\b9_\b1 const boost::shared_ptr& _\bp_\ba_\br_\ba_\bm_\bs() const {\n+92 return p_;\n+93 }\n+94\n+_\b9_\b6 _\bP_\ba_\br_\ba_\bm_\bs& _\bp() const {\n+97 return *p_;\n+98 }\n+99\n+101\n+104 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& biasHat() const { return biasHat_; }\n+105 double deltaTij() const { return deltaTij_; }\n+106\n+107 virtual Vector3 deltaPij() const = 0;\n+108 virtual Vector3 deltaVij() const = 0;\n+109 virtual Rot3 deltaRij() const = 0;\n+110 virtual NavState deltaXij() const = 0;\n 111\n-_\b1_\b1_\b5 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b3& nRb,\n-116 boost::optional H = boost::none) const override {\n-117 // measured bM = nRb\u00ef\u00bf\u00bd * nM + b\n-118 _\bP_\bo_\bi_\bn_\bt_\b3 hx = nRb._\bu_\bn_\br_\bo_\bt_\ba_\bt_\be(nM_, H, boost::none) + bias_;\n-119 return (hx - measured_);\n-120 }\n-121};\n-122\n-_\b1_\b2_\b8class _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-129\n-130 const _\bP_\bo_\bi_\bn_\bt_\b3 measured_;\n-131 const _\bR_\bo_\bt_\b3 bRn_;\n-132\n-133public:\n-134\n-_\b1_\b3_\b6 _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2(_\bK_\be_\by key1, _\bK_\be_\by key2, const _\bP_\bo_\bi_\bn_\bt_\b3& measured, const _\bR_\bo_\bt_\b3& nRb,\n-137 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n-138 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN<_\bP_\bo_\bi_\bn_\bt_\b3, _\bP_\bo_\bi_\bn_\bt_\b3>(model, key1, key2), //\n-139 measured_(measured), bRn_(nRb.inverse()) {\n-140 }\n-141\n-_\b1_\b4_\b3 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-144 return boost::static_pointer_cast(\n-145 NonlinearFactor::shared_ptr(new _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2(*this)));\n-146 }\n+112 // Exposed for MATLAB\n+113 Vector6 biasHatVector() const { return biasHat_._\bv_\be_\bc_\bt_\bo_\br(); }\n+115\n+118 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const\n+PreintegrationBase& pim);\n+119 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\") const;\n+121\n+124\n+130 std::pair correctMeasurementsBySensorPose(\n+131 const Vector3& unbiasedAcc, const Vector3& unbiasedOmega,\n+132 OptionalJacobian<3, 3> correctedAcc_H_unbiasedAcc = boost::none,\n+133 OptionalJacobian<3, 3> correctedAcc_H_unbiasedOmega = boost::none,\n+134 OptionalJacobian<3, 3> correctedOmega_H_unbiasedOmega = boost::none) const;\n+135\n+_\b1_\b4_\b1 virtual void _\bu_\bp_\bd_\ba_\bt_\be(const Vector3& measuredAcc, const Vector3&\n+measuredOmega,\n+142 const double dt, Matrix9* A, Matrix93* B, Matrix93* C) = 0;\n+143\n+145 virtual void integrateMeasurement(const Vector3& measuredAcc,\n+146 const Vector3& measuredOmega, const double dt);\n 147\n-_\b1_\b5_\b3 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b3& nM, const _\bP_\bo_\bi_\bn_\bt_\b3& bias,\n-154 boost::optional H1 = boost::none, boost::optional H2 =\n-155 boost::none) const override {\n-156 // measured bM = nRb\u00ef\u00bf\u00bd * nM + b, where b is unknown bias\n-157 _\bP_\bo_\bi_\bn_\bt_\b3 hx = bRn_._\br_\bo_\bt_\ba_\bt_\be(nM, boost::none, H1) + bias;\n-158 if (H2)\n-159 *H2 = I_3x3;\n-160 return (hx - measured_);\n-161 }\n-162};\n+_\b1_\b5_\b0 virtual Vector9 _\bb_\bi_\ba_\bs_\bC_\bo_\br_\br_\be_\bc_\bt_\be_\bd_\bD_\be_\bl_\bt_\ba(const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i,\n+151 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H = boost::none) const = 0;\n+152\n+154 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be predict(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state_i, const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs&\n+bias_i,\n+155 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b9_\b> H1 = boost::none,\n+156 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H2 = boost::none) const;\n+157\n+159 Vector9 computeError(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state_i, const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state_j,\n+160 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i,\n+161 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b9_\b> H1, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b9_\b> H2,\n+162 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H3) const;\n 163\n-_\b1_\b6_\b9class _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-170\n-171 const _\bP_\bo_\bi_\bn_\bt_\b3 measured_;\n-172 const _\bR_\bo_\bt_\b3 bRn_;\n-173\n-174public:\n-175\n-_\b1_\b7_\b7 _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3(_\bK_\be_\by key1, _\bK_\be_\by key2, _\bK_\be_\by key3, const _\bP_\bo_\bi_\bn_\bt_\b3& measured,\n-178 const _\bR_\bo_\bt_\b3& nRb, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n-179 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(model, key1, key2, key3), //\n-180 measured_(measured), bRn_(nRb.inverse()) {\n-181 }\n-182\n-_\b1_\b8_\b4 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-185 return boost::static_pointer_cast(\n-186 NonlinearFactor::shared_ptr(new _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3(*this)));\n-187 }\n+168 Vector9 computeErrorAndJacobians(const _\bP_\bo_\bs_\be_\b3& pose_i, const Vector3& vel_i,\n+169 const _\bP_\bo_\bs_\be_\b3& pose_j, const Vector3& vel_j,\n+170 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H1 =\n+171 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H2 = boost::none,\n+172 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H3 = boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H4 =\n+173 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H5 = boost::none) const;\n+174\n+175 private:\n+_\b1_\b7_\b7 friend class boost::serialization::access;\n+178 template\n+179 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+180 ar & BOOST_SERIALIZATION_NVP(p_);\n+181 ar & BOOST_SERIALIZATION_NVP(biasHat_);\n+182 ar & BOOST_SERIALIZATION_NVP(deltaTij_);\n+183 }\n+184\n+185 public:\n+186 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+187};\n 188\n-_\b1_\b9_\b4 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const double& scale, const _\bU_\bn_\bi_\bt_\b3& direction,\n-195 const _\bP_\bo_\bi_\bn_\bt_\b3& bias, boost::optional H1 = boost::none,\n-196 boost::optional H2 = boost::none, boost::optional H3 =\n-197 boost::none) const override {\n-198 // measured bM = nRb\u00ef\u00bf\u00bd * nM + b, where b is unknown bias\n-199 _\bU_\bn_\bi_\bt_\b3 rotated = bRn_._\br_\bo_\bt_\ba_\bt_\be(direction, boost::none, H2);\n-200 _\bP_\bo_\bi_\bn_\bt_\b3 hx = scale * rotated._\bp_\bo_\bi_\bn_\bt_\b3() + bias;\n-201 if (H1)\n-202 *H1 = rotated._\bp_\bo_\bi_\bn_\bt_\b3();\n-203 if (H2) // H2 is 2*2, but we need 3*2\n-204 {\n-205 Matrix H;\n-206 rotated._\bp_\bo_\bi_\bn_\bt_\b3(H);\n-207 *H2 = scale * H * (*H2);\n-208 }\n-209 if (H3)\n-210 *H3 = I_3x3;\n-211 return (hx - measured_);\n-212 }\n-213};\n-214\n-215}\n-216\n-_\bR_\bo_\bt_\b3_\b._\bh\n-3D rotation represented as a rotation matrix or quaternion\n-_\bR_\bo_\bt_\b2_\b._\bh\n-2D rotation\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+189}\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n+Navigation state composing of attitude, position, and velocity.\n+_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+_\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2\n-Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n-symbol GTSAM_USE_QUATERNIO...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bu_\bn_\br_\bo_\bt_\ba_\bt_\be\n-Point3 unrotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none,\n-OptionalJacobian< 3, 3 > H2=boost::none) const\n-rotate point from world to rotated frame\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.cpp:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bY_\ba_\bw\n-static Rot3 Yaw(double t)\n-Positive yaw is to right (as in aircraft heading). See ypr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\be\n-Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none,\n-OptionalJacobian< 3, 3 > H2=boost::none) const\n-rotate point from rotated coordinate frame to world\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:149\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\b3\n-Point3 point3(OptionalJacobian< 3, 2 > H=boost::none) const\n-Return unit-norm Point3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:144\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br\n-Factor to estimate rotation given magnetometer reading This version uses model\n-measured bM = scale * ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br\n-MagFactor(Key key, const Point3 &measured, double scale, const Unit3\n-&direction, const Point3 &bias, const SharedNoiseModel &model)\n-Constructor of factor that estimates nav to body rotation bRn.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Rot2 &nRb, boost::optional< Matrix & > H=boost::\n-none) const override\n-vector of errors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1\n-Factor to estimate rotation given magnetometer reading This version uses model\n-measured bM = scale * ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:90\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1\n-MagFactor1(Key key, const Point3 &measured, double scale, const Unit3\n-&direction, const Point3 &bias, const SharedNoiseModel &model)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Rot3 &nRb, boost::optional< Matrix & > H=boost::\n-none) const override\n-vector of errors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-Factor to calibrate local Earth magnetic field as well as magnetometer bias\n-This version uses model m...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:143\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-MagFactor2(Key key1, Key key2, const Point3 &measured, const Rot3 &nRb, const\n-SharedNoiseModel &model)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Point3 &nM, const Point3 &bias, boost::optional<\n-Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const\n-override\n-vector of errors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:153\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3\n-Factor to calibrate local Earth magnetic field as well as magnetometer bias\n-This version uses model m...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:169\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const double &scale, const Unit3 &direction, const Point3\n-&bias, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & >\n-H2=boost::none, boost::optional< Matrix & > H3=boost::none) const override\n-vector of errors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:194\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3\n-MagFactor3(Key key1, Key key2, Key key3, const Point3 &measured, const Rot3\n-&nRb, const SharedNoiseModel &model)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bR_\bo_\bt_\b2_\b _\b>_\b:_\b:_\bk_\be_\by\n-Key key() const\n-Returns a key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+Vector6 vector() const\n+return the accelerometer and gyro biases in a single vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n+Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n+not make sense to make...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+PreintegrationBase is the base class for PreintegratedMeasurements (in\n+ImuFactor) and CombinedPreinte...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bT_\bi_\bj_\b_\n+double deltaTij_\n+Time interval from i to j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+virtual ~PreintegrationBase()\n+Virtual destructor for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bm_\ba_\bt_\bc_\bh_\be_\bs_\bP_\ba_\br_\ba_\bm_\bs_\bW_\bi_\bt_\bh\n+bool matchesParamsWith(const PreintegrationBase &other) const\n+check parameters equality: checks whether shared pointer points to same Params\n+object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bb_\bi_\ba_\bs_\bC_\bo_\br_\br_\be_\bc_\bt_\be_\bd_\bD_\be_\bl_\bt_\ba\n+virtual Vector9 biasCorrectedDelta(const imuBias::ConstantBias &bias_i,\n+OptionalJacobian< 9, 6 > H=boost::none) const =0\n+Given the estimate of the bias, return a NavState tangent vector summarizing\n+the preintegrated IMU me...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bp\n+Params & p() const\n+const reference to params\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bb_\bi_\ba_\bs_\bH_\ba_\bt_\b_\n+Bias biasHat_\n+Acceleration and gyro bias used for preintegration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be\n+PreintegrationBase()\n+Default constructor for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs\n+const boost::shared_ptr< Params > & params() const\n+shared pointer to params\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationBase.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+virtual void update(const Vector3 &measuredAcc, const Vector3 &measuredOmega,\n+const double dt, Matrix9 *A, Matrix93 *B, Matrix93 *C)=0\n+Update preintegrated measurements and get derivatives It takes measured\n+quantities in the j frame Mod...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for pre-integration: Usage: Create just a single Params and pass a\n+shared pointer to the c...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:26\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bB_\ba_\bs_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00920_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00920_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagPoseFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,186 +98,167 @@\n
No Matches
\n \n \n \n \n \n
\n-
GPSFactor.h
\n+
MagPoseFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-\n-\n-
23
\n-
24namespace gtsam {
\n-
25
\n-
\n-
35class GTSAM_EXPORT GPSFactor: public NoiseModelFactorN<Pose3> {
\n-
36
\n-
37private:
\n-
38
\n-\n-
40
\n-
41 Point3 nT_;
\n-
42
\n-
43public:
\n-
44
\n-
46 typedef boost::shared_ptr<GPSFactor> shared_ptr;
\n-
47
\n-
49 typedef GPSFactor This;
\n+
12#pragma once
\n+
13
\n+\n+\n+
16
\n+
17namespace gtsam {
\n+
18
\n+
27template <class POSE>
\n+
\n+
28class MagPoseFactor: public NoiseModelFactorN<POSE> {
\n+
29 private:
\n+
30 using This = MagPoseFactor<POSE>;
\n+\n+
32 using Point = typename POSE::Translation;
\n+
33 using Rot = typename POSE::Rotation;
\n+
34
\n+
35 const Point measured_;
\n+
36 const Point nM_;
\n+
37 const Point bias_;
\n+
38 boost::optional<POSE> body_P_sensor_;
\n+
39
\n+
40 static const int MeasDim = Point::RowsAtCompileTime;
\n+
41 static const int PoseDim = traits<POSE>::dimension;
\n+
42 static const int RotDim = traits<Rot>::dimension;
\n+
43
\n+
45 using shared_ptr = boost::shared_ptr<MagPoseFactor<POSE>>;
\n+
46
\n+
48 GTSAM_CONCEPT_TESTABLE_TYPE(POSE)
\n+
49 GTSAM_CONCEPT_POSE_TYPE(POSE)
\n
50
\n-
52 GPSFactor(): nT_(0, 0, 0) {}
\n+
51 public:
\n+
52 ~MagPoseFactor() override {}
\n
53
\n-
54 ~GPSFactor() override {}
\n-
55
\n-
\n-
63 GPSFactor(Key key, const Point3& gpsIn, const SharedNoiseModel& model) :
\n-
64 Base(model, key), nT_(gpsIn) {
\n-
65 }
\n-
\n-
66
\n-
\n-
68 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
69 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
70 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
71 }
\n-
\n-
72
\n-
74 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
75 DefaultKeyFormatter) const override;
\n-
76
\n-
78 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n+\n+
56
\n+
\n+\n+
68 const Point& measured,
\n+
69 double scale,
\n+
70 const Point& direction,
\n+
71 const Point& bias,
\n+
72 const SharedNoiseModel& model,
\n+
73 const boost::optional<POSE>& body_P_sensor)
\n+
74 : Base(model, pose_key),
\n+
75 measured_(body_P_sensor ? body_P_sensor->rotation() * measured : measured),
\n+
76 nM_(scale * direction.normalized()),
\n+
77 bias_(body_P_sensor ? body_P_sensor->rotation() * bias : bias),
\n+
78 body_P_sensor_(body_P_sensor) {}
\n+
\n
79
\n-
81 Vector evaluateError(const Pose3& p,
\n-
82 boost::optional<Matrix&> H = boost::none) const override;
\n-
83
\n-
84 inline const Point3 & measurementIn() const {
\n-
85 return nT_;
\n-
86 }
\n+
\n+
81 NonlinearFactor::shared_ptr clone() const override {
\n+
82 return boost::static_pointer_cast<NonlinearFactor>(
\n+
83 NonlinearFactor::shared_ptr(new This(*this)));
\n+
84 }
\n+
\n+
85
\n
87
\n-
93 static std::pair<Pose3, Vector3> EstimateState(double t1, const Point3& NED1,
\n-
94 double t2, const Point3& NED2, double timestamp);
\n+
88 // Print out the factor.
\n+
\n+
89 void print(const std::string& s = "", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
90 Base::print(s, keyFormatter);
\n+
91 gtsam::print(Vector(nM_), "local field (nM): ");
\n+
92 gtsam::print(Vector(measured_), "measured field (bM): ");
\n+
93 gtsam::print(Vector(bias_), "magnetometer bias: ");
\n+
94 }
\n+
\n
95
\n-
96private:
\n-
97
\n-
99 friend class boost::serialization::access;
\n-
100 template<class ARCHIVE>
\n-
101 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
102 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
103 ar
\n-
104 & boost::serialization::make_nvp("NoiseModelFactor1",
\n-
105 boost::serialization::base_object<Base>(*this));
\n-
106 ar & BOOST_SERIALIZATION_NVP(nT_);
\n-
107 }
\n-
108};
\n-
\n-
109
\n-
\n-
114class GTSAM_EXPORT GPSFactor2: public NoiseModelFactorN<NavState> {
\n-
115
\n-
116private:
\n-
117
\n-\n-
119
\n-
120 Point3 nT_;
\n-
121
\n-
122public:
\n+
\n+
97 bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
\n+
98 const This *e = dynamic_cast<const This*> (&expected);
\n+
99 return e != nullptr && Base::equals(*e, tol) &&
\n+
100 gtsam::equal_with_abs_tol(this->measured_, e->measured_, tol) &&
\n+
101 gtsam::equal_with_abs_tol(this->nM_, e->nM_, tol) &&
\n+
102 gtsam::equal_with_abs_tol(this->bias_, e->bias_, tol);
\n+
103 }
\n+
\n+
104
\n+
106
\n+
\n+
111 Vector evaluateError(const POSE& nPb, boost::optional<Matrix&> H = boost::none) const override {
\n+
112 // Predict the measured magnetic field h(x) in the *body* frame.
\n+
113 // If body_P_sensor was given, bias_ will have been rotated into the body frame.
\n+
114 Matrix H_rot = Matrix::Zero(MeasDim, RotDim);
\n+
115 const Point hx = nPb.rotation().unrotate(nM_, H_rot, boost::none) + bias_;
\n+
116
\n+
117 if (H) {
\n+
118 // Fill in the relevant part of the Jacobian (just rotation columns).
\n+
119 *H = Matrix::Zero(MeasDim, PoseDim);
\n+
120 const size_t rot_col0 = nPb.rotationInterval().first;
\n+
121 (*H).block(0, rot_col0, MeasDim, RotDim) = H_rot;
\n+
122 }
\n
123
\n-
125 typedef boost::shared_ptr<GPSFactor2> shared_ptr;
\n+
124 return (hx - measured_);
\n+
125 }
\n+
\n
126
\n-\n-
129
\n-
131 GPSFactor2():nT_(0, 0, 0) {}
\n-
132
\n-
133 ~GPSFactor2() override {}
\n-
134
\n-
\n-
136 GPSFactor2(Key key, const Point3& gpsIn, const SharedNoiseModel& model) :
\n-
137 Base(model, key), nT_(gpsIn) {
\n-
138 }
\n-
\n-
139
\n-
\n-
141 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
142 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
143 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
144 }
\n-
\n-
145
\n-
147 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
148 DefaultKeyFormatter) const override;
\n-
149
\n-
151 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n-
152
\n-
154 Vector evaluateError(const NavState& p,
\n-
155 boost::optional<Matrix&> H = boost::none) const override;
\n-
156
\n-
157 inline const Point3 & measurementIn() const {
\n-
158 return nT_;
\n-
159 }
\n-
160
\n-
161private:
\n-
162
\n-
164 friend class boost::serialization::access;
\n-
165 template<class ARCHIVE>
\n-
166 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
167 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
168 ar
\n-
169 & boost::serialization::make_nvp("NoiseModelFactor1",
\n-
170 boost::serialization::base_object<Base>(*this));
\n-
171 ar & BOOST_SERIALIZATION_NVP(nT_);
\n-
172 }
\n-
173};
\n-
\n-
174
\n-
175}
\n-
3D Pose
\n-
Navigation state composing of attitude, position, and velocity.
\n-
Non-linear factor base classes.
\n+
127 private:
\n+\n+
130 template<class ARCHIVE>
\n+
131 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
132 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
133 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n+
134 boost::serialization::base_object<Base>(*this));
\n+
135 ar & BOOST_SERIALIZATION_NVP(measured_);
\n+
136 ar & BOOST_SERIALIZATION_NVP(nM_);
\n+
137 ar & BOOST_SERIALIZATION_NVP(bias_);
\n+
138 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);
\n+
139 }
\n+
140}; // \\class MagPoseFactor
\n+
\n+
141
\n+
142}
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Prior on position in a Cartesian frame.
Definition GPSFactor.h:35
\n-
GPSFactor This
Typedef to this class.
Definition GPSFactor.h:49
\n-
GPSFactor()
default constructor - only use for serialization
Definition GPSFactor.h:52
\n-
GPSFactor(Key key, const Point3 &gpsIn, const SharedNoiseModel &model)
Constructor from a measurement in a Cartesian frame.
Definition GPSFactor.h:63
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition GPSFactor.h:68
\n-
boost::shared_ptr< GPSFactor > shared_ptr
shorthand for a smart pointer to a factor
Definition GPSFactor.h:46
\n-
Version of GPSFactor for NavState.
Definition GPSFactor.h:114
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition GPSFactor.h:141
\n-
GPSFactor2 This
Typedef to this class.
Definition GPSFactor.h:128
\n-
GPSFactor2(Key key, const Point3 &gpsIn, const SharedNoiseModel &model)
Constructor from a measurement in a Cartesian frame.
Definition GPSFactor.h:136
\n-
boost::shared_ptr< GPSFactor2 > shared_ptr
shorthand for a smart pointer to a factor
Definition GPSFactor.h:125
\n-
GPSFactor2()
default constructor - only use for serialization
Definition GPSFactor.h:131
\n-
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n+
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
Factor to estimate rotation of a Pose2 or Pose3 given a magnetometer reading.
Definition MagPoseFactor.h:28
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Implement functions needed for Testable.
Definition MagPoseFactor.h:89
\n+
~MagPoseFactor() override
Concept check by type.
Definition MagPoseFactor.h:52
\n+
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
Equals function.
Definition MagPoseFactor.h:97
\n+
NonlinearFactor::shared_ptr clone() const override
Definition MagPoseFactor.h:81
\n+
friend class boost::serialization::access
Serialization function.
Definition MagPoseFactor.h:129
\n+
MagPoseFactor(Key pose_key, const Point &measured, double scale, const Point &direction, const Point &bias, const SharedNoiseModel &model, const boost::optional< POSE > &body_P_sensor)
Construct the factor.
Definition MagPoseFactor.h:67
\n+
Vector evaluateError(const POSE &nPb, boost::optional< Matrix & > H=boost::none) const override
Implement functions needed to derive from Factor.
Definition MagPoseFactor.h:111
\n+
MagPoseFactor()
Default constructor - only use for serialization.
Definition MagPoseFactor.h:55
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Concept-checking macros for geometric objects Each macro instantiates a concept check structure,...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,236 +1,216 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GPSFactor.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+MagPoseFactor.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-_\b3_\b5class GTSAM_EXPORT _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-36\n-37private:\n-38\n-39 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b> _\bB_\ba_\bs_\be;\n-40\n-41 _\bP_\bo_\bi_\bn_\bt_\b3 nT_;\n-42\n-43public:\n-44\n-_\b4_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-47\n-_\b4_\b9 typedef _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+12#pragma once\n+13\n+14#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh>\n+15#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+16\n+17namespace _\bg_\bt_\bs_\ba_\bm {\n+18\n+27template \n+_\b2_\b8class _\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+29 private:\n+30 using This = _\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bP_\bO_\bS_\bE_\b>;\n+31 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bS_\bE_\b>;\n+32 using Point = typename POSE::Translation;\n+33 using Rot = typename POSE::Rotation;\n+34\n+35 const Point measured_;\n+36 const Point nM_;\n+37 const Point bias_;\n+38 boost::optional body_P_sensor_;\n+39\n+40 static const int MeasDim = Point::RowsAtCompileTime;\n+41 static const int PoseDim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bO_\bS_\bE_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+42 static const int RotDim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bo_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+43\n+45 using shared_ptr = boost::shared_ptr>;\n+46\n+48 GTSAM_CONCEPT_TESTABLE_TYPE(POSE)\n+49 GTSAM_CONCEPT_POSE_TYPE(POSE)\n 50\n-_\b5_\b2 _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br(): nT_(0, 0, 0) {}\n+51 public:\n+_\b5_\b2 _\b~_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() override {}\n 53\n-54 _\b~_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-55\n-_\b6_\b3 _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, const _\bP_\bo_\bi_\bn_\bt_\b3& gpsIn, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n-64 _\bB_\ba_\bs_\be(model, key), nT_(gpsIn) {\n-65 }\n-66\n-_\b6_\b8 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-69 return boost::static_pointer_cast(\n-70 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n-71 }\n-72\n-74 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-75 DefaultKeyFormatter) const override;\n-76\n-78 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n-override;\n+_\b5_\b5 _\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+56\n+_\b6_\b7 _\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by pose_key,\n+68 const Point& measured,\n+69 double scale,\n+70 const Point& direction,\n+71 const Point& bias,\n+72 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n+73 const boost::optional& body_P_sensor)\n+74 : _\bB_\ba_\bs_\be(model, pose_key),\n+75 measured_(body_P_sensor ? body_P_sensor->rotation() * measured : measured),\n+76 nM_(scale * direction.normalized()),\n+77 bias_(body_P_sensor ? body_P_sensor->rotation() * bias : bias),\n+78 body_P_sensor_(body_P_sensor) {}\n 79\n-81 Vector evaluateError(const _\bP_\bo_\bs_\be_\b3& p,\n-82 boost::optional H = boost::none) const override;\n-83\n-84 inline const _\bP_\bo_\bi_\bn_\bt_\b3 & measurementIn() const {\n-85 return nT_;\n-86 }\n+_\b8_\b1 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+82 return boost::static_pointer_cast(\n+83 NonlinearFactor::shared_ptr(new This(*this)));\n+84 }\n+85\n 87\n-93 static std::pair EstimateState(double t1, const Point3&\n-NED1,\n-94 double t2, const Point3& NED2, double timestamp);\n+88 // Print out the factor.\n+_\b8_\b9 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter) const override {\n+90 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n+91 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Vector(nM_), \"local field (nM): \");\n+92 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Vector(measured_), \"measured field (bM): \");\n+93 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Vector(bias_), \"magnetometer bias: \");\n+94 }\n 95\n-96private:\n-97\n-_\b9_\b9 friend class boost::serialization::access;\n-100 template\n-101 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-102 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n-compatibility\n-103 ar\n-104 & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n-105 boost::serialization::base_object(*this));\n-106 ar & BOOST_SERIALIZATION_NVP(nT_);\n-107 }\n-108};\n-109\n-_\b1_\b1_\b4class GTSAM_EXPORT _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-115\n-116private:\n-117\n-118 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b> _\bB_\ba_\bs_\be;\n-119\n-120 _\bP_\bo_\bi_\bn_\bt_\b3 nT_;\n-121\n-122public:\n+_\b9_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol=1e-9) const override\n+{\n+98 const This *e = dynamic_cast (&expected);\n+99 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) &&\n+100 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(this->measured_, e->measured_, tol) &&\n+101 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(this->nM_, e->nM_, tol) &&\n+102 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(this->bias_, e->bias_, tol);\n+103 }\n+104\n+106\n+_\b1_\b1_\b1 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const POSE& nPb, boost::optional H = boost::\n+none) const override {\n+112 // Predict the measured magnetic field h(x) in the *body* frame.\n+113 // If body_P_sensor was given, bias_ will have been rotated into the body\n+frame.\n+114 Matrix H_rot = Matrix::Zero(MeasDim, RotDim);\n+115 const Point hx = nPb.rotation().unrotate(nM_, H_rot, boost::none) + bias_;\n+116\n+117 if (H) {\n+118 // Fill in the relevant part of the Jacobian (just rotation columns).\n+119 *H = Matrix::Zero(MeasDim, PoseDim);\n+120 const size_t rot_col0 = nPb.rotationInterval().first;\n+121 (*H).block(0, rot_col0, MeasDim, RotDim) = H_rot;\n+122 }\n 123\n-_\b1_\b2_\b5 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+124 return (hx - measured_);\n+125 }\n 126\n-_\b1_\b2_\b8 typedef _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2 _\bT_\bh_\bi_\bs;\n-129\n-_\b1_\b3_\b1 _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2():nT_(0, 0, 0) {}\n-132\n-133 _\b~_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2() override {}\n-134\n-_\b1_\b3_\b6 _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2(_\bK_\be_\by key, const _\bP_\bo_\bi_\bn_\bt_\b3& gpsIn, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n-137 _\bB_\ba_\bs_\be(model, key), nT_(gpsIn) {\n-138 }\n-139\n-_\b1_\b4_\b1 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-142 return boost::static_pointer_cast(\n-143 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n-144 }\n-145\n-147 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-148 DefaultKeyFormatter) const override;\n-149\n-151 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n-override;\n-152\n-154 Vector evaluateError(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& p,\n-155 boost::optional H = boost::none) const override;\n-156\n-157 inline const _\bP_\bo_\bi_\bn_\bt_\b3 & measurementIn() const {\n-158 return nT_;\n-159 }\n-160\n-161private:\n-162\n-_\b1_\b6_\b4 friend class boost::serialization::access;\n-165 template\n-166 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-167 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n+127 private:\n+_\b1_\b2_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+130 template\n+131 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+132 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n compatibility\n-168 ar\n-169 & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n-170 boost::serialization::base_object(*this));\n-171 ar & BOOST_SERIALIZATION_NVP(nT_);\n-172 }\n-173};\n-174\n-175}\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n-_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n-Navigation state composing of attitude, position, and velocity.\n+133 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n+134 boost::serialization::base_object(*this));\n+135 ar & BOOST_SERIALIZATION_NVP(measured_);\n+136 ar & BOOST_SERIALIZATION_NVP(nM_);\n+137 ar & BOOST_SERIALIZATION_NVP(bias_);\n+138 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);\n+139 }\n+140}; // \\class MagPoseFactor\n+141\n+142}\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n Aliases.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br\n-Prior on position in a Cartesian frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-GPSFactor This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br\n-GPSFactor()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br\n-GPSFactor(Key key, const Point3 &gpsIn, const SharedNoiseModel &model)\n-Constructor from a measurement in a Cartesian frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< GPSFactor > shared_ptr\n-shorthand for a smart pointer to a factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-Version of GPSFactor for NavState.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bT_\bh_\bi_\bs\n-GPSFactor2 This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-GPSFactor2(Key key, const Point3 &gpsIn, const SharedNoiseModel &model)\n-Constructor from a measurement in a Cartesian frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< GPSFactor2 > shared_ptr\n-shorthand for a smart pointer to a factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:125\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-GPSFactor2()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GPSFactor.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n-Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n-not make sense to make...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n+bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n+DenseBase< MATRIX > &B, double tol=1e-9)\n+equals with a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Factor to estimate rotation of a Pose2 or Pose3 given a magnetometer reading.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+Implement functions needed for Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+~MagPoseFactor() override\n+Concept check by type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n+Equals function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:129\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+MagPoseFactor(Key pose_key, const Point &measured, double scale, const Point\n+&direction, const Point &bias, const SharedNoiseModel &model, const boost::\n+optional< POSE > &body_P_sensor)\n+Construct the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const POSE &nPb, boost::optional< Matrix & > H=boost::\n+none) const override\n+Implement functions needed to derive from Factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+MagPoseFactor()\n+Default constructor - only use for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:55\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n A convenient base class for creating your own NoiseModelFactor with n\n variables.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh\n+Concept-checking macros for geometric objects Each macro instantiates a concept\n+check structure,...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * M\bMa\bag\bgP\bPo\bos\bse\beF\bFa\bac\bct\bto\bor\br.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00938.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00938.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ScenarioRunner.h File Reference\n \n \n \n \n \n \n \n@@ -96,60 +96,43 @@\n \n \n \n
\n \n-
ImuFactor.h File Reference
\n+
ScenarioRunner.h File Reference
\n
\n
\n \n+

Simple class to test navigation scenarios. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n \n-\n+\n \n

\n Classes

class  gtsam::PreintegratedImuMeasurements
 PreintegratedImuMeasurements accumulates (integrates) the IMU measurements (rotation rates and accelerations) and the corresponding covariance matrix. More...
 
class  gtsam::ImuFactor
 ImuFactor is a 5-ways factor involving previous state (pose and velocity of the vehicle at previous time step), current state (pose and velocity at current time step), and the bias estimate. More...
 
class  gtsam::ImuFactor2
 ImuFactor2 is a ternary factor that uses NavStates rather than Pose/Velocity. More...
 
struct  gtsam::traits< PreintegratedImuMeasurements >
 
struct  gtsam::traits< ImuFactor >
class  gtsam::ScenarioRunner
 
struct  gtsam::traits< ImuFactor2 >
class  gtsam::CombinedScenarioRunner
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Luca Carlone
\n-
\n-Stephen Williams
\n-
\n-Richard Roberts
\n-
\n-Vadim Indelman
\n-
\n-David Jensen
\n-
\n-Frank Dellaert
\n+

Simple class to test navigation scenarios.

\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,45 +1,26 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ImuFactor.h File Reference\n+ScenarioRunner.h File Reference\n+Simple class to test navigation scenarios. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n- _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs accumulates (integrates) the IMU\n-\u00a0 measurements (rotation rates and accelerations) and the corresponding\n- covariance matrix. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n- _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br is a 5-ways factor involving previous state (pose and\n-\u00a0 velocity of the vehicle at previous time step), current state (pose\n- and velocity at current time step), and the bias estimate. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-\u00a0 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2 is a ternary factor that uses NavStates rather than Pose/\n- Velocity. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Simple class to test navigation scenarios.\n Author\n- Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00938.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00938.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,4 @@\n var a00938 = [\n- [\"gtsam::traits< PreintegratedImuMeasurements >\", \"a04160.html\", null],\n- [\"gtsam::traits< ImuFactor >\", \"a04164.html\", null],\n- [\"gtsam::traits< ImuFactor2 >\", \"a04168.html\", null]\n+ [\"gtsam::ScenarioRunner\", \"a04236.html\", \"a04236\"],\n+ [\"gtsam::CombinedScenarioRunner\", \"a04240.html\", \"a04240\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00938_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00938_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ScenarioRunner.h Source File\n \n \n \n \n \n \n \n@@ -98,298 +98,177 @@\n
No Matches
\n \n \n \n \n \n
\n-
ImuFactor.h
\n+
ScenarioRunner.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
22#pragma once
\n+
18#pragma once
\n+\n+\n+\n+\n
23
\n-
24/* GTSAM includes */
\n-\n-\n-\n-
28#include <gtsam/base/debug.h>
\n-
29
\n-
30namespace gtsam {
\n-
31
\n-
32#ifdef GTSAM_TANGENT_PREINTEGRATION
\n-
33typedef TangentPreintegration PreintegrationType;
\n-
34#else
\n-
35typedef ManifoldPreintegration PreintegrationType;
\n-
36#endif
\n-
37
\n-
38/*
\n-
39 * If you are using the factor, please cite:
\n-
40 * L. Carlone, Z. Kira, C. Beall, V. Indelman, F. Dellaert, "Eliminating
\n-
41 * conditionally independent sets in factor graphs: a unifying perspective based
\n-
42 * on smart factors", Int. Conf. on Robotics and Automation (ICRA), 2014.
\n-
43 *
\n-
44 * C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, "IMU Preintegration on
\n-
45 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation",
\n-
46 * Robotics: Science and Systems (RSS), 2015.
\n-
47 *
\n-
48 * REFERENCES:
\n-
49 * [1] G.S. Chirikjian, "Stochastic Models, Information Theory, and Lie Groups",
\n-
50 * Volume 2, 2008.
\n-
51 * [2] T. Lupton and S.Sukkarieh, "Visual-Inertial-Aided Navigation for
\n-
52 * High-Dynamic Motion in Built Environments Without Initial Conditions",
\n-
53 * TRO, 28(1):61-76, 2012.
\n-
54 * [3] L. Carlone, S. Williams, R. Roberts, "Preintegrated IMU factor:
\n-
55 * Computation of the Jacobian Matrices", Tech. Report, 2013.
\n-
56 * Available in this repo as "PreintegratedIMUJacobians.pdf".
\n-
57 * [4] C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, "IMU Preintegration on
\n-
58 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation",
\n-
59 * Robotics: Science and Systems (RSS), 2015.
\n-
60 */
\n-
61
\n-
\n-\n-
73
\n-
74 friend class ImuFactor;
\n-
75 friend class ImuFactor2;
\n-
76
\n-
77protected:
\n-
78
\n-\n-
81
\n-
82public:
\n-
83
\n-
\n-\n-
86 preintMeasCov_.setZero();
\n-
87 }
\n-
\n-
88
\n-
\n-
94 PreintegratedImuMeasurements(const boost::shared_ptr<PreintegrationParams>& p,
\n-\n-
96 PreintegrationType(p, biasHat) {
\n-
97 preintMeasCov_.setZero();
\n-
98 }
\n-
\n-
99
\n-
\n-
105 PreintegratedImuMeasurements(const PreintegrationType& base, const Matrix9& preintMeasCov)
\n-
106 : PreintegrationType(base),
\n-
107 preintMeasCov_(preintMeasCov) {
\n-
108 }
\n+
24namespace gtsam {
\n+
25
\n+
26// Convert covariance to diagonal noise model, if possible, otherwise throw
\n+
27static noiseModel::Diagonal::shared_ptr Diagonal(const Matrix& covariance) {
\n+
28 bool smart = true;
\n+
29 auto model = noiseModel::Gaussian::Covariance(covariance, smart);
\n+
30 auto diagonal = boost::dynamic_pointer_cast<noiseModel::Diagonal>(model);
\n+
31 if (!diagonal)
\n+
32 throw std::invalid_argument("ScenarioRunner::Diagonal: not a diagonal");
\n+
33 return diagonal;
\n+
34}
\n+
35
\n+
36/*
\n+
37 * Simple class to test navigation scenarios.
\n+
38 * Takes a trajectory scenario as input, and can generate IMU measurements
\n+
39 */
\n+
\n+
40class GTSAM_EXPORT ScenarioRunner {
\n+
41 public:
\n+\n+
43 typedef boost::shared_ptr<PreintegrationParams> SharedParams;
\n+
44
\n+
45 private:
\n+
46 const Scenario& scenario_;
\n+
47 const SharedParams p_;
\n+
48 const double imuSampleTime_, sqrt_dt_;
\n+
49 const Bias estimatedBias_;
\n+
50
\n+
51 // Create two samplers for acceleration and omega noise
\n+
52 Sampler gyroSampler_, accSampler_;
\n+
53
\n+
54 public:
\n+
55 ScenarioRunner(const Scenario& scenario, const SharedParams& p,
\n+
56 double imuSampleTime = 1.0 / 100.0, const Bias& bias = Bias())
\n+
57 : scenario_(scenario),
\n+
58 p_(p),
\n+
59 imuSampleTime_(imuSampleTime),
\n+
60 sqrt_dt_(std::sqrt(imuSampleTime)),
\n+
61 estimatedBias_(bias),
\n+
62 // NOTE(duy): random seeds that work well:
\n+
63 gyroSampler_(Diagonal(p->gyroscopeCovariance), 10),
\n+
64 accSampler_(Diagonal(p->accelerometerCovariance), 29284) {}
\n+
65
\n+
66 // NOTE(frank): hardcoded for now with Z up (gravity points in negative Z)
\n+
67 // also, uses g=10 for easy debugging
\n+
68 const Vector3& gravity_n() const { return p_->n_gravity; }
\n+
69
\n+
70 const Scenario& scenario() const { return scenario_; }
\n+
71
\n+
72 // A gyro simply measures angular velocity in body frame
\n+
73 Vector3 actualAngularVelocity(double t) const { return scenario_.omega_b(t); }
\n+
74
\n+
75 // An accelerometer measures acceleration in body, but not gravity
\n+
76 Vector3 actualSpecificForce(double t) const {
\n+
77 Rot3 bRn(scenario_.rotation(t).transpose());
\n+
78 return scenario_.acceleration_b(t) - bRn * gravity_n();
\n+
79 }
\n+
80
\n+
81 // versions corrupted by bias and noise
\n+
82 Vector3 measuredAngularVelocity(double t) const {
\n+
83 return actualAngularVelocity(t) + estimatedBias_.gyroscope() +
\n+
84 gyroSampler_.sample() / sqrt_dt_;
\n+
85 }
\n+
86 Vector3 measuredSpecificForce(double t) const {
\n+
87 return actualSpecificForce(t) + estimatedBias_.accelerometer() +
\n+
88 accSampler_.sample() / sqrt_dt_;
\n+
89 }
\n+
90
\n+
91 const double& imuSampleTime() const { return imuSampleTime_; }
\n+
92
\n+
94 PreintegratedImuMeasurements integrate(double T,
\n+
95 const Bias& estimatedBias = Bias(),
\n+
96 bool corrupted = false) const;
\n+
97
\n+
99 NavState predict(const PreintegratedImuMeasurements& pim,
\n+
100 const Bias& estimatedBias = Bias()) const;
\n+
101
\n+
103 Matrix9 estimateCovariance(double T, size_t N = 1000,
\n+
104 const Bias& estimatedBias = Bias()) const;
\n+
105
\n+
107 Matrix6 estimateNoiseCovariance(size_t N = 1000) const;
\n+
108};
\n
\n
109
\n-
\n-\n-
112 }
\n-
\n-
113
\n-
115 void print(const std::string& s = "Preintegrated Measurements:") const override;
\n-
116
\n-
118 bool equals(const PreintegratedImuMeasurements& expected, double tol = 1e-9) const;
\n-
119
\n-
121 void resetIntegration() override;
\n-
122
\n-
133 void integrateMeasurement(const Vector3& measuredAcc,
\n-
134 const Vector3& measuredOmega, const double dt) override;
\n+
110/*
\n+
111 * Simple class to test navigation scenarios with CombinedImuMeasurements.
\n+
112 * Takes a trajectory scenario as input, and can generate IMU measurements
\n+
113 */
\n+
\n+
114class GTSAM_EXPORT CombinedScenarioRunner : public ScenarioRunner {
\n+
115 public:
\n+
116 typedef boost::shared_ptr<PreintegrationCombinedParams> SharedParams;
\n+
117
\n+
118 private:
\n+
119 const SharedParams p_;
\n+
120 const Bias estimatedBias_;
\n+
121
\n+
122 public:
\n+
123 CombinedScenarioRunner(const Scenario& scenario, const SharedParams& p,
\n+
124 double imuSampleTime = 1.0 / 100.0,
\n+
125 const Bias& bias = Bias())
\n+
126 : ScenarioRunner(scenario, static_cast<ScenarioRunner::SharedParams>(p),
\n+
127 imuSampleTime, bias),
\n+
128 p_(p),
\n+
129 estimatedBias_(bias) {}
\n+
130
\n+\n+
133 double T, const Bias& estimatedBias = Bias(),
\n+
134 bool corrupted = false) const;
\n
135
\n-
137 void integrateMeasurements(const Matrix& measuredAccs, const Matrix& measuredOmegas,
\n-
138 const Matrix& dts);
\n+\n+
138 const Bias& estimatedBias = Bias()) const;
\n
139
\n-
141 Matrix preintMeasCov() const { return preintMeasCov_; }
\n-
142
\n-
143#ifdef GTSAM_TANGENT_PREINTEGRATION
\n-
145 void mergeWith(const PreintegratedImuMeasurements& pim, Matrix9* H1, Matrix9* H2);
\n-
146#endif
\n-
147
\n-
148 private:
\n-
150 friend class boost::serialization::access;
\n-
151 template<class ARCHIVE>
\n-
152 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
153 namespace bs = ::boost::serialization;
\n-
154 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegrationType);
\n-
155 ar & BOOST_SERIALIZATION_NVP(preintMeasCov_);
\n-
156 }
\n-
157};
\n-
\n-
158
\n-
\n-
171class GTSAM_EXPORT ImuFactor: public NoiseModelFactorN<Pose3, Vector3, Pose3, Vector3,
\n-
172 imuBias::ConstantBias> {
\n-
173private:
\n-
174
\n-
175 typedef ImuFactor This;
\n-
176 typedef NoiseModelFactorN<Pose3, Vector3, Pose3, Vector3,
\n-\n-
178
\n-\n-
180
\n-
181public:
\n-
182
\n-
184#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5
\n-
185 typedef typename boost::shared_ptr<ImuFactor> shared_ptr;
\n-
186#else
\n-
187 typedef boost::shared_ptr<ImuFactor> shared_ptr;
\n-
188#endif
\n-
189
\n-\n-
192
\n-
203 ImuFactor(Key pose_i, Key vel_i, Key pose_j, Key vel_j, Key bias,
\n-
204 const PreintegratedImuMeasurements& preintegratedMeasurements);
\n-
205
\n-
206 ~ImuFactor() override {
\n-
207 }
\n-
208
\n-
210 gtsam::NonlinearFactor::shared_ptr clone() const override;
\n-
211
\n-
214 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const ImuFactor&);
\n-
215 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
216 DefaultKeyFormatter) const override;
\n-
217 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n-
219
\n-
\n-\n-
223 return _PIM_;
\n-
224 }
\n-
\n-
225
\n-
229 Vector evaluateError(const Pose3& pose_i, const Vector3& vel_i,
\n-
230 const Pose3& pose_j, const Vector3& vel_j,
\n-
231 const imuBias::ConstantBias& bias_i, boost::optional<Matrix&> H1 =
\n-
232 boost::none, boost::optional<Matrix&> H2 = boost::none,
\n-
233 boost::optional<Matrix&> H3 = boost::none, boost::optional<Matrix&> H4 =
\n-
234 boost::none, boost::optional<Matrix&> H5 = boost::none) const override;
\n-
235
\n-
236#ifdef GTSAM_TANGENT_PREINTEGRATION
\n-
238 static PreintegratedImuMeasurements Merge(
\n-
239 const PreintegratedImuMeasurements& pim01,
\n-
240 const PreintegratedImuMeasurements& pim12);
\n-
241
\n-
243 static shared_ptr Merge(const shared_ptr& f01, const shared_ptr& f12);
\n-
244#endif
\n-
245
\n-
246 private:
\n-
248 friend class boost::serialization::access;
\n-
249 template<class ARCHIVE>
\n-
250 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
251 // NoiseModelFactor5 instead of NoiseModelFactorN for backward compatibility
\n-
252 ar & boost::serialization::make_nvp("NoiseModelFactor5",
\n-
253 boost::serialization::base_object<Base>(*this));
\n-
254 ar & BOOST_SERIALIZATION_NVP(_PIM_);
\n-
255 }
\n-
256};
\n-
\n-
257// class ImuFactor
\n-
258
\n-
\n-
263class GTSAM_EXPORT ImuFactor2 : public NoiseModelFactorN<NavState, NavState, imuBias::ConstantBias> {
\n-
264private:
\n-
265
\n-
266 typedef ImuFactor2 This;
\n-\n-
268
\n-\n-
270
\n-
271public:
\n-
272
\n-\n-
275
\n-
282 ImuFactor2(Key state_i, Key state_j, Key bias,
\n-
283 const PreintegratedImuMeasurements& preintegratedMeasurements);
\n-
284
\n-
285 ~ImuFactor2() override {
\n-
286 }
\n-
287
\n-
289 gtsam::NonlinearFactor::shared_ptr clone() const override;
\n-
290
\n-
293 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const ImuFactor2&);
\n-
294 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
295 DefaultKeyFormatter) const override;
\n-
296 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n-
298
\n-
\n-\n-
302 return _PIM_;
\n-
303 }
\n-
\n-
304
\n-
308 Vector evaluateError(const NavState& state_i, const NavState& state_j,
\n-
309 const imuBias::ConstantBias& bias_i, //
\n-
310 boost::optional<Matrix&> H1 = boost::none,
\n-
311 boost::optional<Matrix&> H2 = boost::none,
\n-
312 boost::optional<Matrix&> H3 = boost::none) const override;
\n-
313
\n-
314private:
\n-
315
\n-
317 friend class boost::serialization::access;
\n-
318 template<class ARCHIVE>
\n-
319 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
320 // NoiseModelFactor3 instead of NoiseModelFactorN for backward compatibility
\n-
321 ar & boost::serialization::make_nvp("NoiseModelFactor3",
\n-
322 boost::serialization::base_object<Base>(*this));
\n-
323 ar & BOOST_SERIALIZATION_NVP(_PIM_);
\n-
324 }
\n-
325};
\n-
\n-
326// class ImuFactor2
\n-
327
\n-
328template <>
\n-
329struct traits<PreintegratedImuMeasurements> : public Testable<PreintegratedImuMeasurements> {};
\n-
330
\n-
331template <>
\n-
332struct traits<ImuFactor> : public Testable<ImuFactor> {};
\n-
333
\n-
334template <>
\n-
335struct traits<ImuFactor2> : public Testable<ImuFactor2> {};
\n-
336
\n-
337}
\n-
Global debugging flags.
\n-\n-\n-
Non-linear factor base classes.
\n+
141 Eigen::Matrix<double, 15, 15> estimateCovariance(
\n+
142 double T, size_t N = 1000, const Bias& estimatedBias = Bias()) const;
\n+
143};
\n+
\n+
144
\n+
145} // namespace gtsam
\n+
sampling from a NoiseModel
\n+
Simple class to test navigation scenarios.
\n+\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
Matrix3 transpose() const
Return 3*3 transpose (inverse) rotation matrix.
Definition Rot3M.cpp:144
\n+
static shared_ptr Covariance(const Matrix &covariance, bool smart=true)
A Gaussian noise model created by specifying a covariance matrix.
Definition NoiseModel.cpp:117
\n+
Sampling structure that keeps internal random number generators for diagonal distributions specified ...
Definition Sampler.h:31
\n+
Vector sample() const
sample from distribution
Definition Sampler.cpp:59
\n+
PreintegratedCombinedMeasurements integrates the IMU measurements (rotation rates and accelerations) ...
Definition CombinedImuFactor.h:129
\n
Definition ImuBias.h:30
\n+
const Vector3 & gyroscope() const
get gyroscope bias
Definition ImuBias.h:69
\n+
const Vector3 & accelerometer() const
get accelerometer bias
Definition ImuBias.h:64
\n
PreintegratedImuMeasurements accumulates (integrates) the IMU measurements (rotation rates and accele...
Definition ImuFactor.h:72
\n-
~PreintegratedImuMeasurements() override
Virtual destructor.
Definition ImuFactor.h:111
\n-
PreintegratedImuMeasurements(const boost::shared_ptr< PreintegrationParams > &p, const imuBias::ConstantBias &biasHat=imuBias::ConstantBias())
Constructor, initializes the class with no measurements.
Definition ImuFactor.h:94
\n-
PreintegratedImuMeasurements(const PreintegrationType &base, const Matrix9 &preintMeasCov)
Construct preintegrated directly from members: base class and preintMeasCov.
Definition ImuFactor.h:105
\n-
PreintegratedImuMeasurements()
Default constructor for serialization and wrappers.
Definition ImuFactor.h:85
\n-
Matrix preintMeasCov() const
Return pre-integrated measurement covariance.
Definition ImuFactor.h:141
\n-
Matrix9 preintMeasCov_
COVARIANCE OF: [PreintROTATION PreintPOSITION PreintVELOCITY].
Definition ImuFactor.h:79
\n-
ImuFactor is a 5-ways factor involving previous state (pose and velocity of the vehicle at previous t...
Definition ImuFactor.h:172
\n-
const PreintegratedImuMeasurements & preintegratedMeasurements() const
Access the preintegrated measurements.
Definition ImuFactor.h:222
\n-
ImuFactor()
Default constructor - only use for serialization.
Definition ImuFactor.h:191
\n-
boost::shared_ptr< ImuFactor > shared_ptr
Shorthand for a smart pointer to a factor.
Definition ImuFactor.h:187
\n-
ImuFactor2 is a ternary factor that uses NavStates rather than Pose/Velocity.
Definition ImuFactor.h:263
\n-
ImuFactor2()
Default constructor - only use for serialization.
Definition ImuFactor.h:274
\n-
const PreintegratedImuMeasurements & preintegratedMeasurements() const
Access the preintegrated measurements.
Definition ImuFactor.h:301
\n-
IMU pre-integration on NavSatet manifold.
Definition ManifoldPreintegration.h:33
\n
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Simple trajectory simulator.
Definition Scenario.h:25
\n+
virtual Vector3 omega_b(double t) const =0
angular velocity in body frame
\n+
Definition ScenarioRunner.h:40
\n+
Definition ScenarioRunner.h:114
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,361 +1,207 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ImuFactor.h\n+ScenarioRunner.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-22#pragma once\n+18#pragma once\n+19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh>\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b._\bh>\n 23\n-24/* GTSAM includes */\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bd_\be_\bb_\bu_\bg_\b._\bh>\n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-32#ifdef GTSAM_TANGENT_PREINTEGRATION\n-33typedef TangentPreintegration PreintegrationType;\n-34#else\n-35typedef ManifoldPreintegration PreintegrationType;\n-36#endif\n-37\n-38/*\n-39 * If you are using the factor, please cite:\n-40 * L. Carlone, Z. Kira, C. Beall, V. Indelman, F. Dellaert, \"Eliminating\n-41 * conditionally independent sets in factor graphs: a unifying perspective\n-based\n-42 * on smart factors\", Int. Conf. on Robotics and Automation (ICRA), 2014.\n-43 *\n-44 * C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, \"IMU Preintegration on\n-45 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation\",\n-46 * Robotics: Science and Systems (RSS), 2015.\n-47 *\n-48 * REFERENCES:\n-49 * [1] G.S. Chirikjian, \"Stochastic Models, Information Theory, and Lie\n-Groups\",\n-50 * Volume 2, 2008.\n-51 * [2] T. Lupton and S.Sukkarieh, \"Visual-Inertial-Aided Navigation for\n-52 * High-Dynamic Motion in Built Environments Without Initial Conditions\",\n-53 * TRO, 28(1):61-76, 2012.\n-54 * [3] L. Carlone, S. Williams, R. Roberts, \"Preintegrated IMU factor:\n-55 * Computation of the Jacobian Matrices\", Tech. Report, 2013.\n-56 * Available in this repo as \"PreintegratedIMUJacobians.pdf\".\n-57 * [4] C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, \"IMU\n-Preintegration on\n-58 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation\",\n-59 * Robotics: Science and Systems (RSS), 2015.\n-60 */\n-61\n-_\b7_\b2class GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs: public _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be {\n-73\n-74 friend class _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br;\n-75 friend class _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2;\n-76\n-77protected:\n-78\n-_\b7_\b9 Matrix9 _\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv_\b_;\n-81\n-82public:\n-83\n-_\b8_\b5 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() {\n-86 preintMeasCov_.setZero();\n-87 }\n-88\n-_\b9_\b4 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const boost::shared_ptr&\n-p,\n-95 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& biasHat = _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs()) :\n-96 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be(p, biasHat) {\n-97 preintMeasCov_.setZero();\n-98 }\n-99\n-_\b1_\b0_\b5 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be& base, const Matrix9&\n-preintMeasCov)\n-106 : _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be(base),\n-107 preintMeasCov_(preintMeasCov) {\n-108 }\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+26// Convert covariance to diagonal noise model, if possible, otherwise throw\n+27static noiseModel::Diagonal::shared_ptr Diagonal(const Matrix& covariance) {\n+28 bool smart = true;\n+29 auto model = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be(covariance, smart);\n+30 auto diagonal = boost::dynamic_pointer_cast(model);\n+31 if (!diagonal)\n+32 throw std::invalid_argument(\"ScenarioRunner::Diagonal: not a diagonal\");\n+33 return diagonal;\n+34}\n+35\n+36/*\n+37 * Simple class to test navigation scenarios.\n+38 * Takes a trajectory scenario as input, and can generate IMU measurements\n+39 */\n+_\b4_\b0class GTSAM_EXPORT _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br {\n+41 public:\n+42 typedef _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bB_\bi_\ba_\bs;\n+43 typedef boost::shared_ptr SharedParams;\n+44\n+45 private:\n+46 const _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo& scenario_;\n+47 const SharedParams p_;\n+48 const double imuSampleTime_, sqrt_dt_;\n+49 const _\bB_\bi_\ba_\bs estimatedBias_;\n+50\n+51 // Create two samplers for acceleration and omega noise\n+52 _\bS_\ba_\bm_\bp_\bl_\be_\br gyroSampler_, accSampler_;\n+53\n+54 public:\n+55 _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br(const _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo& scenario, const SharedParams& p,\n+56 double imuSampleTime = 1.0 / 100.0, const _\bB_\bi_\ba_\bs& bias = _\bB_\bi_\ba_\bs())\n+57 : scenario_(scenario),\n+58 p_(p),\n+59 imuSampleTime_(imuSampleTime),\n+60 sqrt_dt_(std::sqrt(imuSampleTime)),\n+61 estimatedBias_(bias),\n+62 // NOTE(duy): random seeds that work well:\n+63 gyroSampler_(Diagonal(p->gyroscopeCovariance), 10),\n+64 accSampler_(Diagonal(p->accelerometerCovariance), 29284) {}\n+65\n+66 // NOTE(frank): hardcoded for now with Z up (gravity points in negative Z)\n+67 // also, uses g=10 for easy debugging\n+68 const Vector3& gravity_n() const { return p_->n_gravity; }\n+69\n+70 const _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo& scenario() const { return scenario_; }\n+71\n+72 // A gyro simply measures angular velocity in body frame\n+73 Vector3 actualAngularVelocity(double t) const { return scenario_._\bo_\bm_\be_\bg_\ba_\b__\bb(t);\n+}\n+74\n+75 // An accelerometer measures acceleration in body, but not gravity\n+76 Vector3 actualSpecificForce(double t) const {\n+77 _\bR_\bo_\bt_\b3 bRn(scenario_.rotation(t)._\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be());\n+78 return scenario_.acceleration_b(t) - bRn * gravity_n();\n+79 }\n+80\n+81 // versions corrupted by bias and noise\n+82 Vector3 measuredAngularVelocity(double t) const {\n+83 return actualAngularVelocity(t) + estimatedBias_._\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be() +\n+84 gyroSampler_._\bs_\ba_\bm_\bp_\bl_\be() / sqrt_dt_;\n+85 }\n+86 Vector3 measuredSpecificForce(double t) const {\n+87 return actualSpecificForce(t) + estimatedBias_._\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br() +\n+88 accSampler_._\bs_\ba_\bm_\bp_\bl_\be() / sqrt_dt_;\n+89 }\n+90\n+91 const double& imuSampleTime() const { return imuSampleTime_; }\n+92\n+94 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs integrate(double T,\n+95 const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs(),\n+96 bool corrupted = false) const;\n+97\n+99 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be predict(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim,\n+100 const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs()) const;\n+101\n+103 Matrix9 estimateCovariance(double T, size_t N = 1000,\n+104 const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs()) const;\n+105\n+107 Matrix6 estimateNoiseCovariance(size_t N = 1000) const;\n+108};\n 109\n-_\b1_\b1_\b1 _\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() override {\n-112 }\n-113\n-115 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"Preintegrated Measurements:\") const\n-override;\n-116\n-118 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& expected, double tol = 1e-\n-9) const;\n-119\n-121 void resetIntegration() override;\n-122\n-133 void integrateMeasurement(const Vector3& measuredAcc,\n-134 const Vector3& measuredOmega, const double dt) override;\n+110/*\n+111 * Simple class to test navigation scenarios with CombinedImuMeasurements.\n+112 * Takes a trajectory scenario as input, and can generate IMU measurements\n+113 */\n+_\b1_\b1_\b4class GTSAM_EXPORT _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br : public _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br {\n+115 public:\n+116 typedef boost::shared_ptr SharedParams;\n+117\n+118 private:\n+119 const SharedParams p_;\n+120 const _\bB_\bi_\ba_\bs estimatedBias_;\n+121\n+122 public:\n+123 _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br(const _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo& scenario, const SharedParams& p,\n+124 double imuSampleTime = 1.0 / 100.0,\n+125 const _\bB_\bi_\ba_\bs& bias = _\bB_\bi_\ba_\bs())\n+126 : _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br(scenario, static_cast(p),\n+127 imuSampleTime, bias),\n+128 p_(p),\n+129 estimatedBias_(bias) {}\n+130\n+132 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs integrate(\n+133 double T, const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs(),\n+134 bool corrupted = false) const;\n 135\n-137 void integrateMeasurements(const Matrix& measuredAccs, const Matrix&\n-measuredOmegas,\n-138 const Matrix& dts);\n+137 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be predict(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim,\n+138 const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs()) const;\n 139\n-_\b1_\b4_\b1 Matrix _\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv() const { return preintMeasCov_; }\n-142\n-143#ifdef GTSAM_TANGENT_PREINTEGRATION\n-145 void mergeWith(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim, Matrix9* H1,\n-Matrix9* H2);\n-146#endif\n-147\n-148 private:\n-_\b1_\b5_\b0 friend class boost::serialization::access;\n-151 template\n-152 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-153 namespace bs = ::boost::serialization;\n-154 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be);\n-155 ar & BOOST_SERIALIZATION_NVP(preintMeasCov_);\n-156 }\n-157};\n-158\n-_\b1_\b7_\b1class GTSAM_EXPORT _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-173private:\n-174\n-175 typedef _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-176 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN<_\bP_\bo_\bs_\be_\b3, Vector3, _\bP_\bo_\bs_\be_\b3, Vector3,\n-177 _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs> _\bB_\ba_\bs_\be;\n-178\n-179 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs _PIM_;\n-180\n-181public:\n-182\n-184#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5\n-185 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-186#else\n-_\b1_\b8_\b7 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-188#endif\n-189\n-_\b1_\b9_\b1 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br() {}\n-192\n-203 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by pose_i, _\bK_\be_\by vel_i, _\bK_\be_\by pose_j, _\bK_\be_\by vel_j, _\bK_\be_\by bias,\n-204 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& preintegratedMeasurements);\n-205\n-206 _\b~_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br() override {\n-207 }\n-208\n-210 gtsam::NonlinearFactor::shared_ptr clone() const override;\n-211\n-214 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const\n-ImuFactor&);\n-215 void print(const std::string& s = \"\", const KeyFormatter& keyFormatter =\n-216 DefaultKeyFormatter) const override;\n-217 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const\n-override;\n-219\n-_\b2_\b2_\b2 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const {\n-223 return _PIM_;\n-224 }\n-225\n-229 Vector evaluateError(const _\bP_\bo_\bs_\be_\b3& pose_i, const Vector3& vel_i,\n-230 const _\bP_\bo_\bs_\be_\b3& pose_j, const Vector3& vel_j,\n-231 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i, boost::optional H1 =\n-232 boost::none, boost::optional H2 = boost::none,\n-233 boost::optional H3 = boost::none, boost::optional H4 =\n-234 boost::none, boost::optional H5 = boost::none) const override;\n-235\n-236#ifdef GTSAM_TANGENT_PREINTEGRATION\n-238 static _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs Merge(\n-239 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim01,\n-240 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim12);\n-241\n-243 static shared_ptr Merge(const shared_ptr& f01, const shared_ptr& f12);\n-244#endif\n-245\n-246 private:\n-_\b2_\b4_\b8 friend class boost::serialization::access;\n-249 template\n-250 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-251 // NoiseModelFactor5 instead of NoiseModelFactorN for backward\n-compatibility\n-252 ar & boost::serialization::make_nvp(\"NoiseModelFactor5\",\n-253 boost::serialization::base_object(*this));\n-254 ar & BOOST_SERIALIZATION_NVP(_PIM_);\n-255 }\n-256};\n-257// class ImuFactor\n-258\n-_\b2_\b6_\b3class GTSAM_EXPORT _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2 : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-264private:\n-265\n-266 typedef _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2 _\bT_\bh_\bi_\bs;\n-267 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b,_\b _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b,_\b _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b> _\bB_\ba_\bs_\be;\n-268\n-269 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs _PIM_;\n-270\n-271public:\n-272\n-_\b2_\b7_\b4 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2() {}\n-275\n-282 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2(_\bK_\be_\by state_i, _\bK_\be_\by state_j, _\bK_\be_\by bias,\n-283 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& preintegratedMeasurements);\n-284\n-285 _\b~_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2() override {\n-286 }\n-287\n-289 gtsam::NonlinearFactor::shared_ptr clone() const override;\n-290\n-293 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const\n-ImuFactor2&);\n-294 void print(const std::string& s = \"\", const KeyFormatter& keyFormatter =\n-295 DefaultKeyFormatter) const override;\n-296 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const\n-override;\n-298\n-_\b3_\b0_\b1 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const {\n-302 return _PIM_;\n-303 }\n-304\n-308 Vector evaluateError(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state_i, const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state_j,\n-309 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i, //\n-310 boost::optional H1 = boost::none,\n-311 boost::optional H2 = boost::none,\n-312 boost::optional H3 = boost::none) const override;\n-313\n-314private:\n-315\n-_\b3_\b1_\b7 friend class boost::serialization::access;\n-318 template\n-319 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-320 // NoiseModelFactor3 instead of NoiseModelFactorN for backward\n-compatibility\n-321 ar & boost::serialization::make_nvp(\"NoiseModelFactor3\",\n-322 boost::serialization::base_object(*this));\n-323 ar & BOOST_SERIALIZATION_NVP(_PIM_);\n-324 }\n-325};\n-326// class ImuFactor2\n-327\n-328template <>\n-_\b3_\b2_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs> : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-330\n-331template <>\n-_\b3_\b3_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-333\n-334template <>\n-_\b3_\b3_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-336\n-337}\n-_\bd_\be_\bb_\bu_\bg_\b._\bh\n-Global debugging flags.\n-_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+141 Eigen::Matrix estimateCovariance(\n+142 double T, size_t N = 1000, const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs()) const;\n+143};\n+144\n+145} // namespace gtsam\n+_\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh\n+sampling from a NoiseModel\n+_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b._\bh\n+Simple class to test navigation scenarios.\n+_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be\n+Matrix3 transpose() const\n+Return 3*3 transpose (inverse) rotation matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:144\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n+static shared_ptr Covariance(const Matrix &covariance, bool smart=true)\n+A Gaussian noise model created by specifying a covariance matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.cpp:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br\n+Sampling structure that keeps internal random number generators for diagonal\n+distributions specified ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Sampler.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br_\b:_\b:_\bs_\ba_\bm_\bp_\bl_\be\n+Vector sample() const\n+sample from distribution\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Sampler.cpp:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedCombinedMeasurements integrates the IMU measurements (rotation\n+rates and accelerations) ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:129\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be\n+const Vector3 & gyroscope() const\n+get gyroscope bias\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br\n+const Vector3 & accelerometer() const\n+get accelerometer bias\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:64\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n PreintegratedImuMeasurements accumulates (integrates) the IMU measurements\n (rotation rates and accele...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-~PreintegratedImuMeasurements() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedImuMeasurements(const boost::shared_ptr< PreintegrationParams >\n-&p, const imuBias::ConstantBias &biasHat=imuBias::ConstantBias())\n-Constructor, initializes the class with no measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedImuMeasurements(const PreintegrationType &base, const Matrix9\n-&preintMeasCov)\n-Construct preintegrated directly from members: base class and preintMeasCov.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedImuMeasurements()\n-Default constructor for serialization and wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv\n-Matrix preintMeasCov() const\n-Return pre-integrated measurement covariance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv_\b_\n-Matrix9 preintMeasCov_\n-COVARIANCE OF: [PreintROTATION PreintPOSITION PreintVELOCITY].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n-ImuFactor is a 5-ways factor involving previous state (pose and velocity of the\n-vehicle at previous t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:172\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-const PreintegratedImuMeasurements & preintegratedMeasurements() const\n-Access the preintegrated measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:222\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n-ImuFactor()\n-Default constructor - only use for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:191\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< ImuFactor > shared_ptr\n-Shorthand for a smart pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:187\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-ImuFactor2 is a ternary factor that uses NavStates rather than Pose/Velocity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:263\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-ImuFactor2()\n-Default constructor - only use for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:274\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-const PreintegratedImuMeasurements & preintegratedMeasurements() const\n-Access the preintegrated measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:301\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n-IMU pre-integration on NavSatet manifold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:33\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n not make sense to make...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n+Simple trajectory simulator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:25\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bo_\bm_\be_\bg_\ba_\b__\bb\n+virtual Vector3 omega_b(double t) const =0\n+angular velocity in body frame\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ScenarioRunner.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ScenarioRunner.h:114\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00941.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00941.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/TangentPreintegration.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/BarometricFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,42 +94,36 @@\n \n \n \n \n \n
\n \n-
TangentPreintegration.h File Reference
\n+
BarometricFactor.cpp File Reference
\n
\n
\n \n-

Go to the source code of this file.

\n+

Implementation file for Barometric factor. \n+More...

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::TangentPreintegration
 Integrate on the 9D tangent space of the NavState manifold. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Frank Dellaert
\n-
\n-Adam Bry
\n+

Implementation file for Barometric factor.

\n+
Author
Peter Milani
\n+
Date
December 16, 2021
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-TangentPreintegration.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n-\u00a0 Integrate on the 9D tangent space of the _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be manifold. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+BarometricFactor.cpp File Reference\n+Implementation file for Barometric factor. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Implementation file for Barometric factor.\n Author\n- Frank Dellaert\n- Adam Bry\n+ Peter Milani\n+ Date\n+ December 16, 2021\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00944.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00944.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/NavState.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AttitudeFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,54 +95,56 @@\n \n \n \n \n
\n \n-
NavState.h File Reference
\n+Namespaces
\n+
AttitudeFactor.h File Reference
\n \n
\n \n-

Navigation state composing of attitude, position, and velocity. \n+

Header file for Attitude factor. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::NavState
 Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make this a Lie group, but it is a 9D manifold. More...
class  gtsam::AttitudeFactor
 Base class for prior on attitude Example: More...
 
struct  gtsam::traits< NavState >
class  gtsam::Rot3AttitudeFactor
 Version of AttitudeFactor for Rot3. More...
 
struct  gtsam::traits< Rot3AttitudeFactor >
 traits More...
 
class  gtsam::Pose3AttitudeFactor
 Version of AttitudeFactor for Pose3. More...
 
struct  gtsam::traits< Pose3AttitudeFactor >
 traits More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Typedefs

\n-typedef Vector3 gtsam::Velocity3
 Velocity is currently typedef'd to Vector3.
 
\n

Detailed Description

\n-

Navigation state composing of attitude, position, and velocity.

\n+

Header file for Attitude factor.

\n
Author
Frank Dellaert
\n-
Date
July 2015
\n+
Date
January 28, 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,39 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-NavState.h File Reference\n-Navigation state composing of attitude, position, and velocity. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+AttitudeFactor.h File Reference\n+Header file for Attitude factor. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n- Navigation state: Pose (rotation, translation) + velocity NOTE(frank):\n-\u00a0 it does not make sense to make this a Lie group, but it is a 9D\n- manifold. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Base class for prior on attitude Example: _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Version of _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br for _\bR_\bo_\bt_\b3. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Version of _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br for _\bP_\bo_\bs_\be_\b3. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef Vector3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bel\blo\boc\bci\bit\bty\by3\b3\n-\u00a0 Velocity is currently typedef'd to Vector3.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Navigation state composing of attitude, position, and velocity.\n+Header file for Attitude factor.\n Author\n Frank Dellaert\n Date\n- July 2015\n+ January 28, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n+ * _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00944.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00944.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,4 @@\n var a00944 = [\n- [\"gtsam::NavState\", \"a04196.html\", \"a04196\"],\n- [\"gtsam::traits< NavState >\", \"a04200.html\", null],\n- [\"Velocity3\", \"a00944.html#ad6ba0a40d5dd8936f4ca53f7bb3ef53b\", null]\n+ [\"gtsam::traits< Rot3AttitudeFactor >\", \"a04088.html\", null],\n+ [\"gtsam::traits< Pose3AttitudeFactor >\", \"a04096.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00944_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00944_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/NavState.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AttitudeFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,217 +98,254 @@\n
No Matches
\n \n \n \n \n \n
\n-
NavState.h
\n+
AttitudeFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-
22#include <gtsam/base/Vector.h>
\n-
23#include <gtsam/base/Manifold.h>
\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
28typedef Vector3 Velocity3;
\n-
29
\n+
18#pragma once
\n+
19
\n+\n+\n+
22#include <gtsam/geometry/Unit3.h>
\n+
23
\n+
24namespace gtsam {
\n+
25
\n
\n-
34class GTSAM_EXPORT NavState {
\n-
35private:
\n-
36
\n-
37 // TODO(frank):
\n-
38 // - should we rename t_ to p_? if not, we should rename dP do dT
\n-
39 Rot3 R_;
\n-
40 Point3 t_;
\n-
41 Velocity3 v_;
\n-
42
\n-
43public:
\n-
44
\n-
45 enum {
\n-
46 dimension = 9
\n-
47 };
\n-
48
\n-
49 typedef std::pair<Point3, Velocity3> PositionAndVelocity;
\n-
50
\n-
53
\n-
\n-\n-
56 t_(0, 0, 0), v_(Vector3::Zero()) {
\n-
57 }
\n-
\n-
\n-
59 NavState(const Rot3& R, const Point3& t, const Velocity3& v) :
\n-
60 R_(R), t_(t), v_(v) {
\n+\n+
35
\n+
36protected:
\n+
37
\n+
38 Unit3 nZ_, bRef_;
\n+
39
\n+
40public:
\n+
41
\n+
\n+\n+
44 }
\n+
\n+
45
\n+
\n+
51 AttitudeFactor(const Unit3& nZ, const Unit3& bRef = Unit3(0, 0, 1)) :
\n+
52 nZ_(nZ), bRef_(bRef) {
\n+
53 }
\n+
\n+
54
\n+
56 Vector attitudeError(const Rot3& p,
\n+
57 OptionalJacobian<2,3> H = boost::none) const;
\n+
58
\n+
59 const Unit3& nZ() const {
\n+
60 return nZ_;
\n
61 }
\n+
62 const Unit3& bRef() const {
\n+
63 return bRef_;
\n+
64 }
\n+
65
\n+\n+
68 template<class ARCHIVE>
\n+
69 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
70 ar & boost::serialization::make_nvp("nZ_", nZ_);
\n+
71 ar & boost::serialization::make_nvp("bRef_", bRef_);
\n+
72 }
\n+
73};
\n+
\n+
74
\n+
\n+
79class GTSAM_EXPORT Rot3AttitudeFactor: public NoiseModelFactorN<Rot3>, public AttitudeFactor {
\n+
80
\n+\n+
82
\n+
83public:
\n+
84
\n+
86 typedef boost::shared_ptr<Rot3AttitudeFactor> shared_ptr;
\n+
87
\n+\n+
90
\n+
\n+\n+
93 }
\n+
\n+
94
\n+
95 ~Rot3AttitudeFactor() override {
\n+
96 }
\n+
97
\n+
\n+
105 Rot3AttitudeFactor(Key key, const Unit3& nZ, const SharedNoiseModel& model,
\n+
106 const Unit3& bRef = Unit3(0, 0, 1)) :
\n+
107 Base(model, key), AttitudeFactor(nZ, bRef) {
\n+
108 }
\n+
\n+
109
\n+
\n+
111 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
112 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
113 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
114 }
\n+
\n+
115
\n+
117 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
118 DefaultKeyFormatter) const override;
\n+
119
\n+
121 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n+
122
\n+
\n+
124 Vector evaluateError(const Rot3& nRb, //
\n+
125 boost::optional<Matrix&> H = boost::none) const override {
\n+
126 return attitudeError(nRb, H);
\n+
127 }
\n
\n-
\n-
63 NavState(const Pose3& pose, const Velocity3& v) :
\n-
64 R_(pose.rotation()), t_(pose.translation()), v_(v) {
\n-
65 }
\n-
\n-
\n-
67 NavState(const Matrix3& R, const Vector6& tv) :
\n-
68 R_(R), t_(tv.head<3>()), v_(tv.tail<3>()) {
\n-
69 }
\n-
\n-
71 static NavState Create(const Rot3& R, const Point3& t, const Velocity3& v,
\n-\n-\n-
75 static NavState FromPoseVelocity(const Pose3& pose, const Vector3& vel,
\n-\n-
77
\n-
81
\n-
82 const Rot3& attitude(OptionalJacobian<3, 9> H = boost::none) const;
\n-
83 const Point3& position(OptionalJacobian<3, 9> H = boost::none) const;
\n-
84 const Velocity3& velocity(OptionalJacobian<3, 9> H = boost::none) const;
\n-
85
\n-
86 const Pose3 pose() const {
\n-
87 return Pose3(attitude(), position());
\n-
88 }
\n-
89
\n-
93
\n-
\n-
95 Matrix3 R() const {
\n-
96 return R_.matrix();
\n-
97 }
\n-
\n-
\n-
99 Quaternion quaternion() const {
\n-
100 return R_.toQuaternion();
\n-
101 }
\n-
\n-
\n-
103 Vector3 t() const {
\n-
104 return t_;
\n-
105 }
\n-
\n-
\n-
107 const Vector3& v() const {
\n-
108 return v_;
\n-
109 }
\n-
\n-
110 // Return velocity in body frame
\n-
111 Velocity3 bodyVelocity(OptionalJacobian<3, 9> H = boost::none) const;
\n-
112
\n-
116 Matrix7 matrix() const;
\n-
117
\n-
121
\n-
123 GTSAM_EXPORT
\n-
124 friend std::ostream &operator<<(std::ostream &os, const NavState& state);
\n-
125
\n-
127 void print(const std::string& s = "") const;
\n
128
\n-
130 bool equals(const NavState& other, double tol = 1e-8) const;
\n-
131
\n-
135
\n-
136 // Tangent space sugar.
\n-
137 // TODO(frank): move to private navstate namespace in cpp
\n-
138 static Eigen::Block<Vector9, 3, 1> dR(Vector9& v) {
\n-
139 return v.segment<3>(0);
\n+
129private:
\n+
130
\n+
132 friend class boost::serialization::access;
\n+
133 template<class ARCHIVE>
\n+
134 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
135 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
136 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n+
137 boost::serialization::base_object<Base>(*this));
\n+
138 ar & boost::serialization::make_nvp("AttitudeFactor",
\n+
139 boost::serialization::base_object<AttitudeFactor>(*this));
\n
140 }
\n-
141 static Eigen::Block<Vector9, 3, 1> dP(Vector9& v) {
\n-
142 return v.segment<3>(3);
\n-
143 }
\n-
144 static Eigen::Block<Vector9, 3, 1> dV(Vector9& v) {
\n-
145 return v.segment<3>(6);
\n-
146 }
\n-
147 static Eigen::Block<const Vector9, 3, 1> dR(const Vector9& v) {
\n-
148 return v.segment<3>(0);
\n-
149 }
\n-
150 static Eigen::Block<const Vector9, 3, 1> dP(const Vector9& v) {
\n-
151 return v.segment<3>(3);
\n-
152 }
\n-
153 static Eigen::Block<const Vector9, 3, 1> dV(const Vector9& v) {
\n-
154 return v.segment<3>(6);
\n-
155 }
\n-
156
\n-
158 NavState retract(const Vector9& v, //
\n-
159 OptionalJacobian<9, 9> H1 = boost::none, OptionalJacobian<9, 9> H2 =
\n-
160 boost::none) const;
\n-
161
\n-
163 Vector9 localCoordinates(const NavState& g, //
\n-
164 OptionalJacobian<9, 9> H1 = boost::none, OptionalJacobian<9, 9> H2 =
\n-
165 boost::none) const;
\n-
166
\n-
170
\n-
173 NavState update(const Vector3& b_acceleration, const Vector3& b_omega,
\n-
174 const double dt, OptionalJacobian<9, 9> F, OptionalJacobian<9, 3> G1,
\n-
175 OptionalJacobian<9, 3> G2) const;
\n-
176
\n-
178 Vector9 coriolis(double dt, const Vector3& omega, bool secondOrder = false,
\n-
179 OptionalJacobian<9, 9> H = boost::none) const;
\n-
180
\n-
183 Vector9 correctPIM(const Vector9& pim, double dt, const Vector3& n_gravity,
\n-
184 const boost::optional<Vector3>& omegaCoriolis, bool use2ndOrderCoriolis =
\n-
185 false, OptionalJacobian<9, 9> H1 = boost::none,
\n-
186 OptionalJacobian<9, 9> H2 = boost::none) const;
\n-
187
\n-
189
\n-
190private:
\n-
193 friend class boost::serialization::access;
\n-
194 template<class ARCHIVE>
\n-
195 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
196 ar & BOOST_SERIALIZATION_NVP(R_);
\n-
197 ar & BOOST_SERIALIZATION_NVP(t_);
\n-
198 ar & BOOST_SERIALIZATION_NVP(v_);
\n-
199 }
\n-
201};
\n-
\n-
202
\n-
203// Specialize NavState traits to use a Retract/Local that agrees with IMUFactors
\n-
204template<>
\n-
\n-
205struct traits<NavState> : internal::Manifold<NavState> {
\n-
206};
\n-
\n-
207
\n-
208} // namespace gtsam
\n-
Base class and basic functions for Manifold types.
\n-
typedef and functions to augment Eigen's VectorXd
\n-
3D Pose
\n+
141
\n+
142public:
\n+\n+
144};
\n+
\n+
145
\n+
147template<> struct traits<Rot3AttitudeFactor> : public Testable<Rot3AttitudeFactor> {};
\n+
148
\n+
\n+
153class GTSAM_EXPORT Pose3AttitudeFactor: public NoiseModelFactorN<Pose3>,
\n+
154 public AttitudeFactor {
\n+
155
\n+\n+
157
\n+
158public:
\n+
159
\n+
161 typedef boost::shared_ptr<Pose3AttitudeFactor> shared_ptr;
\n+
162
\n+\n+
165
\n+
\n+\n+
168 }
\n+
\n+
169
\n+
170 ~Pose3AttitudeFactor() override {
\n+
171 }
\n+
172
\n+
\n+
180 Pose3AttitudeFactor(Key key, const Unit3& nZ, const SharedNoiseModel& model,
\n+
181 const Unit3& bRef = Unit3(0, 0, 1)) :
\n+
182 Base(model, key), AttitudeFactor(nZ, bRef) {
\n+
183 }
\n+
\n+
184
\n+
\n+
186 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
187 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
188 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
189 }
\n+
\n+
190
\n+
192 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
193 DefaultKeyFormatter) const override;
\n+
194
\n+
196 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n+
197
\n+
\n+
199 Vector evaluateError(const Pose3& nTb, //
\n+
200 boost::optional<Matrix&> H = boost::none) const override {
\n+
201 Vector e = attitudeError(nTb.rotation(), H);
\n+
202 if (H) {
\n+
203 Matrix H23 = *H;
\n+
204 *H = Matrix::Zero(2,6);
\n+
205 H->block<2,3>(0,0) = H23;
\n+
206 }
\n+
207 return e;
\n+
208 }
\n+
\n+
209
\n+
210private:
\n+
211
\n+
213 friend class boost::serialization::access;
\n+
214 template<class ARCHIVE>
\n+
215 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
216 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
217 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n+
218 boost::serialization::base_object<Base>(*this));
\n+
219 ar & boost::serialization::make_nvp("AttitudeFactor",
\n+
220 boost::serialization::base_object<AttitudeFactor>(*this));
\n+
221 }
\n+
222
\n+
223public:
\n+\n+
225};
\n+
\n+
226
\n+
228template<> struct traits<Pose3AttitudeFactor> : public Testable<Pose3AttitudeFactor> {};
\n+
229
\n+
230}
\n+
231
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
3D Pose
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n-
Vector3 Velocity3
Velocity is currently typedef'd to Vector3.
Definition NavState.h:28
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get rotation
Definition Pose3.cpp:315
\n
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
gtsam::Quaternion toQuaternion() const
Compute the quaternion representation of this rotation.
Definition Rot3M.cpp:233
\n-
Matrix3 matrix() const
return 3*3 rotation matrix
Definition Rot3M.cpp:219
\n-
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n-
NavState()
Default constructor.
Definition NavState.h:55
\n-
NavState(const Matrix3 &R, const Vector6 &tv)
Construct from SO(3) and R^6.
Definition NavState.h:67
\n-
NavState(const Rot3 &R, const Point3 &t, const Velocity3 &v)
Construct from attitude, position, velocity.
Definition NavState.h:59
\n-
Matrix3 R() const
Return rotation matrix. Induces computation in quaternion mode.
Definition NavState.h:95
\n-
NavState(const Pose3 &pose, const Velocity3 &v)
Construct from pose and velocity.
Definition NavState.h:63
\n-
const Vector3 & v() const
Return velocity as Vector3. Computation-free.
Definition NavState.h:107
\n-
Vector3 t() const
Return position as Vector3.
Definition NavState.h:103
\n-
Quaternion quaternion() const
Return quaternion. Induces computation in matrix mode.
Definition NavState.h:99
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
Base class for prior on attitude Example:
Definition AttitudeFactor.h:34
\n+
Vector attitudeError(const Rot3 &p, OptionalJacobian< 2, 3 > H=boost::none) const
vector of errors
Definition AttitudeFactor.cpp:26
\n+
Unit3 bRef_
Position measurement in.
Definition AttitudeFactor.h:38
\n+
AttitudeFactor(const Unit3 &nZ, const Unit3 &bRef=Unit3(0, 0, 1))
Constructor.
Definition AttitudeFactor.h:51
\n+
friend class boost::serialization::access
Serialization function.
Definition AttitudeFactor.h:67
\n+
AttitudeFactor()
default constructor - only use for serialization
Definition AttitudeFactor.h:43
\n+
Version of AttitudeFactor for Rot3.
Definition AttitudeFactor.h:79
\n+
Vector evaluateError(const Rot3 &nRb, boost::optional< Matrix & > H=boost::none) const override
vector of errors
Definition AttitudeFactor.h:124
\n+
Rot3AttitudeFactor()
default constructor - only use for serialization
Definition AttitudeFactor.h:92
\n+
boost::shared_ptr< Rot3AttitudeFactor > shared_ptr
shorthand for a smart pointer to a factor
Definition AttitudeFactor.h:86
\n+
Rot3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model, const Unit3 &bRef=Unit3(0, 0, 1))
Constructor.
Definition AttitudeFactor.h:105
\n+
Rot3AttitudeFactor This
Typedef to this class.
Definition AttitudeFactor.h:89
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition AttitudeFactor.h:111
\n+
Version of AttitudeFactor for Pose3.
Definition AttitudeFactor.h:154
\n+
Vector evaluateError(const Pose3 &nTb, boost::optional< Matrix & > H=boost::none) const override
vector of errors
Definition AttitudeFactor.h:199
\n+
boost::shared_ptr< Pose3AttitudeFactor > shared_ptr
shorthand for a smart pointer to a factor
Definition AttitudeFactor.h:161
\n+
Pose3AttitudeFactor This
Typedef to this class.
Definition AttitudeFactor.h:164
\n+
Pose3AttitudeFactor()
default constructor - only use for serialization
Definition AttitudeFactor.h:167
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition AttitudeFactor.h:186
\n+
Pose3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model, const Unit3 &bRef=Unit3(0, 0, 1))
Constructor.
Definition AttitudeFactor.h:180
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,253 +1,332 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NavState.h\n+AttitudeFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n 21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-_\b2_\b8typedef Vector3 _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3;\n-29\n-_\b3_\b4class GTSAM_EXPORT _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be {\n-35private:\n-36\n-37 // TODO(frank):\n-38 // - should we rename t_ to p_? if not, we should rename dP do dT\n-39 _\bR_\bo_\bt_\b3 R_;\n-40 _\bP_\bo_\bi_\bn_\bt_\b3 t_;\n-41 _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3 v_;\n-42\n-43public:\n-44\n-45 enum {\n-46 dimension = 9\n-47 };\n-48\n-49 typedef std::pair PositionAndVelocity;\n-50\n-53\n-_\b5_\b5 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be() :\n-56 t_(0, 0, 0), v_(Vector3::Zero()) {\n-57 }\n-_\b5_\b9 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be(const _\bR_\bo_\bt_\b3& R, const _\bP_\bo_\bi_\bn_\bt_\b3& t, const _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3& v) :\n-60 R_(R), t_(t), v_(v) {\n+22#include \n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+_\b3_\b4class _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br {\n+35\n+36protected:\n+37\n+_\b3_\b8 _\bU_\bn_\bi_\bt_\b3 nZ_, _\bb_\bR_\be_\bf_\b_;\n+39\n+40public:\n+41\n+_\b4_\b3 _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br() {\n+44 }\n+45\n+_\b5_\b1 _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bU_\bn_\bi_\bt_\b3& nZ, const _\bU_\bn_\bi_\bt_\b3& bRef = _\bU_\bn_\bi_\bt_\b3(0, 0, 1)) :\n+52 nZ_(nZ), _\bb_\bR_\be_\bf_\b_(bRef) {\n+53 }\n+54\n+56 Vector _\ba_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b3& p,\n+57 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b3_\b> H = boost::none) const;\n+58\n+59 const _\bU_\bn_\bi_\bt_\b3& nZ() const {\n+60 return nZ_;\n 61 }\n-_\b6_\b3 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be(const _\bP_\bo_\bs_\be_\b3& pose, const _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3& v) :\n-64 R_(pose.rotation()), t_(pose.translation()), v_(v) {\n-65 }\n-_\b6_\b7 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be(const Matrix3& R, const Vector6& tv) :\n-68 R_(R), t_(tv.head<3>()), v_(tv.tail<3>()) {\n-69 }\n-71 static _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be Create(const _\bR_\bo_\bt_\b3& R, const _\bP_\bo_\bi_\bn_\bt_\b3& t, const _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3& v,\n-72 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H1, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H2,\n-73 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H3);\n-75 static _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be FromPoseVelocity(const _\bP_\bo_\bs_\be_\b3& pose, const Vector3& vel,\n-76 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H1, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H2);\n-77\n-81\n-82 const _\bR_\bo_\bt_\b3& attitude(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b9_\b> H = boost::none) const;\n-83 const _\bP_\bo_\bi_\bn_\bt_\b3& position(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b9_\b> H = boost::none) const;\n-84 const _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3& velocity(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b9_\b> H = boost::none) const;\n-85\n-86 const _\bP_\bo_\bs_\be_\b3 pose() const {\n-87 return _\bP_\bo_\bs_\be_\b3(attitude(), position());\n-88 }\n-89\n-93\n-_\b9_\b5 Matrix3 _\bR() const {\n-96 return R_._\bm_\ba_\bt_\br_\bi_\bx();\n-97 }\n-_\b9_\b9 Quaternion _\bq_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn() const {\n-100 return R_._\bt_\bo_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn();\n-101 }\n-_\b1_\b0_\b3 Vector3 _\bt() const {\n-104 return t_;\n-105 }\n-_\b1_\b0_\b7 const Vector3& _\bv() const {\n-108 return v_;\n-109 }\n-110 // Return velocity in body frame\n-111 _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3 bodyVelocity(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b9_\b> H = boost::none) const;\n-112\n-116 Matrix7 matrix() const;\n-117\n-121\n-123 GTSAM_EXPORT\n-124 friend std::ostream &operator<<(std::ostream &os, const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state);\n-125\n-127 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n+62 const Unit3& bRef() const {\n+63 return _\bb_\bR_\be_\bf_\b_;\n+64 }\n+65\n+_\b6_\b7 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+68 template\n+69 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+70 ar & boost::serialization::make_nvp(\"nZ_\", nZ_);\n+71 ar & boost::serialization::make_nvp(\"bRef_\", _\bb_\bR_\be_\bf_\b_);\n+72 }\n+73};\n+74\n+_\b7_\b9class GTSAM_EXPORT _\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN, public\n+_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br {\n+80\n+81 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bR_\bo_\bt_\b3_\b> _\bB_\ba_\bs_\be;\n+82\n+83public:\n+84\n+_\b8_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+87\n+_\b8_\b9 typedef _\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+90\n+_\b9_\b2 _\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br() {\n+93 }\n+94\n+95 _\b~_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br() override {\n+96 }\n+97\n+_\b1_\b0_\b5 _\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, const _\bU_\bn_\bi_\bt_\b3& nZ, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n+106 const _\bU_\bn_\bi_\bt_\b3& bRef = _\bU_\bn_\bi_\bt_\b3(0, 0, 1)) :\n+107 _\bB_\ba_\bs_\be(model, key), _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br(nZ, bRef) {\n+108 }\n+109\n+_\b1_\b1_\b1 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+112 return boost::static_pointer_cast(\n+113 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+114 }\n+115\n+117 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+118 DefaultKeyFormatter) const override;\n+119\n+121 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n+override;\n+122\n+_\b1_\b2_\b4 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b3& nRb, //\n+125 boost::optional H = boost::none) const override {\n+126 return attitudeError(nRb, H);\n+127 }\n 128\n-130 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& other, double tol = 1e-8) const;\n-131\n-135\n-136 // Tangent space sugar.\n-137 // TODO(frank): move to private navstate namespace in cpp\n-138 static Eigen::Block dR(Vector9& v) {\n-139 return v.segment<3>(0);\n+129private:\n+130\n+_\b1_\b3_\b2 friend class boost::serialization::access;\n+133 template\n+134 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+135 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n+compatibility\n+136 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n+137 boost::serialization::base_object(*this));\n+138 ar & boost::serialization::make_nvp(\"AttitudeFactor\",\n+139 boost::serialization::base_object(*this));\n 140 }\n-141 static Eigen::Block dP(Vector9& v) {\n-142 return v.segment<3>(3);\n-143 }\n-144 static Eigen::Block dV(Vector9& v) {\n-145 return v.segment<3>(6);\n-146 }\n-147 static Eigen::Block dR(const Vector9& v) {\n-148 return v.segment<3>(0);\n-149 }\n-150 static Eigen::Block dP(const Vector9& v) {\n-151 return v.segment<3>(3);\n-152 }\n-153 static Eigen::Block dV(const Vector9& v) {\n-154 return v.segment<3>(6);\n-155 }\n-156\n-158 NavState retract(const Vector9& v, //\n-159 OptionalJacobian<9, 9> H1 = boost::none, OptionalJacobian<9, 9> H2 =\n-160 boost::none) const;\n-161\n-163 Vector9 localCoordinates(const NavState& g, //\n-164 OptionalJacobian<9, 9> H1 = boost::none, OptionalJacobian<9, 9> H2 =\n-165 boost::none) const;\n-166\n-170\n-173 NavState update(const Vector3& b_acceleration, const Vector3& b_omega,\n-174 const double dt, OptionalJacobian<9, 9> F, OptionalJacobian<9, 3> G1,\n-175 OptionalJacobian<9, 3> G2) const;\n-176\n-178 Vector9 coriolis(double dt, const Vector3& omega, bool secondOrder = false,\n-179 OptionalJacobian<9, 9> H = boost::none) const;\n-180\n-183 Vector9 correctPIM(const Vector9& pim, double dt, const Vector3& n_gravity,\n-184 const boost::optional& omegaCoriolis, bool use2ndOrderCoriolis =\n-185 false, OptionalJacobian<9, 9> H1 = boost::none,\n-186 OptionalJacobian<9, 9> H2 = boost::none) const;\n-187\n-189\n-190private:\n-_\b1_\b9_\b3 friend class boost::serialization::access;\n-194 template\n-195 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-196 ar & BOOST_SERIALIZATION_NVP(R_);\n-197 ar & BOOST_SERIALIZATION_NVP(t_);\n-198 ar & BOOST_SERIALIZATION_NVP(v_);\n-199 }\n-201};\n-202\n-203// Specialize NavState traits to use a Retract/Local that agrees with\n-IMUFactors\n-204template<>\n-_\b2_\b0_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be> : _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {\n-206};\n-207\n-208} // namespace gtsam\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n+141\n+142public:\n+143 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+144};\n+145\n+_\b1_\b4_\b7template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br> : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+148\n+_\b1_\b5_\b3class GTSAM_EXPORT _\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN,\n+154 public _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br {\n+155\n+156 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b> _\bB_\ba_\bs_\be;\n+157\n+158public:\n+159\n+_\b1_\b6_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+162\n+_\b1_\b6_\b4 typedef _\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+165\n+_\b1_\b6_\b7 _\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br() {\n+168 }\n+169\n+170 _\b~_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br() override {\n+171 }\n+172\n+_\b1_\b8_\b0 _\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, const _\bU_\bn_\bi_\bt_\b3& nZ, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n+model,\n+181 const _\bU_\bn_\bi_\bt_\b3& bRef = _\bU_\bn_\bi_\bt_\b3(0, 0, 1)) :\n+182 _\bB_\ba_\bs_\be(model, key), _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br(nZ, bRef) {\n+183 }\n+184\n+_\b1_\b8_\b6 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+187 return boost::static_pointer_cast(\n+188 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+189 }\n+190\n+192 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+193 DefaultKeyFormatter) const override;\n+194\n+196 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n+override;\n+197\n+_\b1_\b9_\b9 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bs_\be_\b3& nTb, //\n+200 boost::optional H = boost::none) const override {\n+201 Vector e = attitudeError(nTb._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn(), H);\n+202 if (H) {\n+203 Matrix H23 = *H;\n+204 *H = Matrix::Zero(2,6);\n+205 H->block<2,3>(0,0) = H23;\n+206 }\n+207 return e;\n+208 }\n+209\n+210private:\n+211\n+_\b2_\b1_\b3 friend class boost::serialization::access;\n+214 template\n+215 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+216 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n+compatibility\n+217 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n+218 boost::serialization::base_object(*this));\n+219 ar & boost::serialization::make_nvp(\"AttitudeFactor\",\n+220 boost::serialization::base_object(*this));\n+221 }\n+222\n+223public:\n+224 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+225};\n+226\n+_\b2_\b2_\b8template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br> : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+229\n+230}\n+231\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n _\bP_\bo_\bs_\be_\b3_\b._\bh\n 3D Pose\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3\n-Vector3 Velocity3\n-Velocity is currently typedef'd to Vector3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-Both ManifoldTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n A 3D pose (R,t) : (Rot3,Point3)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n+get rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:315\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n symbol GTSAM_USE_QUATERNIO...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bt_\bo_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn\n-gtsam::Quaternion toQuaternion() const\n-Compute the quaternion representation of this rotation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:233\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-Matrix3 matrix() const\n-return 3*3 rotation matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n-Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n-not make sense to make...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n-NavState()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n-NavState(const Matrix3 &R, const Vector6 &tv)\n-Construct from SO(3) and R^6.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n-NavState(const Rot3 &R, const Point3 &t, const Velocity3 &v)\n-Construct from attitude, position, velocity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bR\n-Matrix3 R() const\n-Return rotation matrix. Induces computation in quaternion mode.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n-NavState(const Pose3 &pose, const Velocity3 &v)\n-Construct from pose and velocity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bv\n-const Vector3 & v() const\n-Return velocity as Vector3. Computation-free.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bt\n-Vector3 t() const\n-Return position as Vector3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bq_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn\n-Quaternion quaternion() const\n-Return quaternion. Induces computation in matrix mode.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Base class for prior on attitude Example:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bE_\br_\br_\bo_\br\n+Vector attitudeError(const Rot3 &p, OptionalJacobian< 2, 3 > H=boost::none)\n+const\n+vector of errors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.cpp:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\bR_\be_\bf_\b_\n+Unit3 bRef_\n+Position measurement in.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+AttitudeFactor(const Unit3 &nZ, const Unit3 &bRef=Unit3(0, 0, 1))\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+AttitudeFactor()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Version of AttitudeFactor for Rot3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Rot3 &nRb, boost::optional< Matrix & > H=boost::\n+none) const override\n+vector of errors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:124\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Rot3AttitudeFactor()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< Rot3AttitudeFactor > shared_ptr\n+shorthand for a smart pointer to a factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Rot3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model,\n+const Unit3 &bRef=Unit3(0, 0, 1))\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+Rot3AttitudeFactor This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Version of AttitudeFactor for Pose3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Pose3 &nTb, boost::optional< Matrix & > H=boost::\n+none) const override\n+vector of errors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:199\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< Pose3AttitudeFactor > shared_ptr\n+shorthand for a smart pointer to a factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:161\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+Pose3AttitudeFactor This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Pose3AttitudeFactor()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Pose3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model,\n+const Unit3 &bRef=Unit3(0, 0, 1))\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n+ * _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00947.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00947.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/BarometricFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ManifoldPreintegration.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,41 @@\n \n \n \n \n \n
\n \n-
BarometricFactor.h File Reference
\n+
ManifoldPreintegration.cpp File Reference
\n
\n
\n-\n-

Header file for Barometric factor. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::BarometricFactor
 Prior on height in a cartesian frame. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Header file for Barometric factor.

\n-
Author
Peter Milani
\n-
Date
December 16, 2021
\n+
Author
Luca Carlone
\n+
\n+Stephen Williams
\n+
\n+Richard Roberts
\n+
\n+Vadim Indelman
\n+
\n+David Jensen
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BarometricFactor.h File Reference\n-Header file for Barometric factor. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Prior on height in a cartesian frame. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ManifoldPreintegration.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Header file for Barometric factor.\n Author\n- Peter Milani\n- Date\n- December 16, 2021\n+ Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00950.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00950.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/CombinedImuFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,47 +94,87 @@\n \n \n \n \n \n
\n \n-
AHRSFactor.h File Reference
\n+Namespaces |\n+Macros |\n+Functions
\n+
CombinedImuFactor.cpp File Reference
\n \n
\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::PreintegratedAhrsMeasurements
 PreintegratedAHRSMeasurements accumulates (integrates) the Gyroscope measurements (rotation rates) and the corresponding covariance matrix. More...
 
class  gtsam::AHRSFactor
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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+Macros

\n+#define D_R_R(H)   (H)->block<3,3>(0,0)
 
\n+#define D_R_t(H)   (H)->block<3,3>(0,3)
 
\n+#define D_R_v(H)   (H)->block<3,3>(0,6)
 
\n+#define D_t_R(H)   (H)->block<3,3>(3,0)
 
\n+#define D_t_t(H)   (H)->block<3,3>(3,3)
 
\n+#define D_t_v(H)   (H)->block<3,3>(3,6)
 
\n+#define D_v_R(H)   (H)->block<3,3>(6,0)
 
\n+#define D_v_t(H)   (H)->block<3,3>(6,3)
 
\n+#define D_v_v(H)   (H)->block<3,3>(6,6)
 
\n+#define D_a_a(H)   (H)->block<3,3>(9,9)
 
\n+#define D_g_g(H)   (H)->block<3,3>(12,12)
 
\n+\n+\n+\n

\n+Functions

\n+std::ostream & gtsam::operator<< (std::ostream &os, const CombinedImuFactor &f)
 
\n

Detailed Description

\n-
Author
Krunal Chande
\n+
Author
Luca Carlone
\n+
\n+Stephen Williams
\n+
\n+Richard Roberts
\n+
\n+Vadim Indelman
\n+
\n+David Jensen
\n
\n-Luca Carlone
\n+Frank Dellaert \n
\n-Frank Dellaert
\n-
Date
July 2014
\n+Varun Agrawal
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,51 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-AHRSFactor.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n- PreintegratedAHRSMeasurements accumulates (integrates) the Gyroscope\n-\u00a0 measurements (rotation rates) and the corresponding covariance matrix.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+CombinedImuFactor.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 D\bD_\b_R\bR_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,0)\n+\u00a0\n+#define\u00a0 D\bD_\b_R\bR_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,3)\n+\u00a0\n+#define\u00a0 D\bD_\b_R\bR_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,6)\n+\u00a0\n+#define\u00a0 D\bD_\b_t\bt_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,0)\n+\u00a0\n+#define\u00a0 D\bD_\b_t\bt_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,3)\n+\u00a0\n+#define\u00a0 D\bD_\b_t\bt_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,6)\n+\u00a0\n+#define\u00a0 D\bD_\b_v\bv_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,0)\n+\u00a0\n+#define\u00a0 D\bD_\b_v\bv_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,3)\n+\u00a0\n+#define\u00a0 D\bD_\b_v\bv_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,6)\n+\u00a0\n+#define\u00a0 D\bD_\b_a\ba_\b_a\ba(H)\u00a0\u00a0\u00a0(H)->block<3,3>(9,9)\n+\u00a0\n+#define\u00a0 D\bD_\b_g\bg_\b_g\bg(H)\u00a0\u00a0\u00a0(H)->block<3,3>(12,12)\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n+ &f)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n- Krunal Chande\n Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n Frank Dellaert\n- Date\n- July 2014\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00956_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00956_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagPoseFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ConstantVelocityFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,167 +98,87 @@\n
No Matches
\n \n \n \n \n \n
\n-
MagPoseFactor.h
\n+
ConstantVelocityFactor.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12#pragma once
\n-
13
\n-\n-\n-
16
\n-
17namespace gtsam {
\n-
18
\n-
27template <class POSE>
\n-
\n-
28class MagPoseFactor: public NoiseModelFactorN<POSE> {
\n-
29 private:
\n-
30 using This = MagPoseFactor<POSE>;
\n-\n-
32 using Point = typename POSE::Translation;
\n-
33 using Rot = typename POSE::Rotation;
\n+
18#pragma once
\n+
19
\n+\n+\n+
22
\n+
23namespace gtsam {
\n+
24
\n+
\n+
29class ConstantVelocityFactor : public NoiseModelFactorN<NavState, NavState> {
\n+
30 double dt_;
\n+
31
\n+
32 public:
\n+\n
34
\n-
35 const Point measured_;
\n-
36 const Point nM_;
\n-
37 const Point bias_;
\n-
38 boost::optional<POSE> body_P_sensor_;
\n+
35 public:
\n+
36 ConstantVelocityFactor(Key i, Key j, double dt, const SharedNoiseModel &model)
\n+
37 : NoiseModelFactorN<NavState, NavState>(model, i, j), dt_(dt) {}
\n+
38 ~ConstantVelocityFactor() override{};
\n
39
\n-
40 static const int MeasDim = Point::RowsAtCompileTime;
\n-
41 static const int PoseDim = traits<POSE>::dimension;
\n-
42 static const int RotDim = traits<Rot>::dimension;
\n-
43
\n-
45 using shared_ptr = boost::shared_ptr<MagPoseFactor<POSE>>;
\n-
46
\n-
48 GTSAM_CONCEPT_TESTABLE_TYPE(POSE)
\n-
49 GTSAM_CONCEPT_POSE_TYPE(POSE)
\n-
50
\n-
51 public:
\n-
52 ~MagPoseFactor() override {}
\n-
53
\n-\n+
\n+
50 gtsam::Vector evaluateError(const NavState &x1, const NavState &x2,
\n+
51 boost::optional<gtsam::Matrix &> H1 = boost::none,
\n+
52 boost::optional<gtsam::Matrix &> H2 = boost::none) const override {
\n+
53 // only used to use update() below
\n+
54 static const Vector3 b_accel{0.0, 0.0, 0.0};
\n+
55 static const Vector3 b_omega{0.0, 0.0, 0.0};
\n
56
\n-
\n-\n-
68 const Point& measured,
\n-
69 double scale,
\n-
70 const Point& direction,
\n-
71 const Point& bias,
\n-
72 const SharedNoiseModel& model,
\n-
73 const boost::optional<POSE>& body_P_sensor)
\n-
74 : Base(model, pose_key),
\n-
75 measured_(body_P_sensor ? body_P_sensor->rotation() * measured : measured),
\n-
76 nM_(scale * direction.normalized()),
\n-
77 bias_(body_P_sensor ? body_P_sensor->rotation() * bias : bias),
\n-
78 body_P_sensor_(body_P_sensor) {}
\n-
\n-
79
\n-
\n-
81 NonlinearFactor::shared_ptr clone() const override {
\n-
82 return boost::static_pointer_cast<NonlinearFactor>(
\n-
83 NonlinearFactor::shared_ptr(new This(*this)));
\n-
84 }
\n-
\n-
85
\n-
87
\n-
88 // Print out the factor.
\n-
\n-
89 void print(const std::string& s = "", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
90 Base::print(s, keyFormatter);
\n-
91 gtsam::print(Vector(nM_), "local field (nM): ");
\n-
92 gtsam::print(Vector(measured_), "measured field (bM): ");
\n-
93 gtsam::print(Vector(bias_), "magnetometer bias: ");
\n-
94 }
\n-
\n-
95
\n-
\n-
97 bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
\n-
98 const This *e = dynamic_cast<const This*> (&expected);
\n-
99 return e != nullptr && Base::equals(*e, tol) &&
\n-
100 gtsam::equal_with_abs_tol(this->measured_, e->measured_, tol) &&
\n-
101 gtsam::equal_with_abs_tol(this->nM_, e->nM_, tol) &&
\n-
102 gtsam::equal_with_abs_tol(this->bias_, e->bias_, tol);
\n-
103 }
\n-
\n-
104
\n-
106
\n-
\n-
111 Vector evaluateError(const POSE& nPb, boost::optional<Matrix&> H = boost::none) const override {
\n-
112 // Predict the measured magnetic field h(x) in the *body* frame.
\n-
113 // If body_P_sensor was given, bias_ will have been rotated into the body frame.
\n-
114 Matrix H_rot = Matrix::Zero(MeasDim, RotDim);
\n-
115 const Point hx = nPb.rotation().unrotate(nM_, H_rot, boost::none) + bias_;
\n-
116
\n-
117 if (H) {
\n-
118 // Fill in the relevant part of the Jacobian (just rotation columns).
\n-
119 *H = Matrix::Zero(MeasDim, PoseDim);
\n-
120 const size_t rot_col0 = nPb.rotationInterval().first;
\n-
121 (*H).block(0, rot_col0, MeasDim, RotDim) = H_rot;
\n-
122 }
\n-
123
\n-
124 return (hx - measured_);
\n-
125 }
\n-
\n-
126
\n-
127 private:
\n-\n-
130 template<class ARCHIVE>
\n-
131 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
132 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
133 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n-
134 boost::serialization::base_object<Base>(*this));
\n-
135 ar & BOOST_SERIALIZATION_NVP(measured_);
\n-
136 ar & BOOST_SERIALIZATION_NVP(nM_);
\n-
137 ar & BOOST_SERIALIZATION_NVP(bias_);
\n-
138 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);
\n-
139 }
\n-
140}; // \\class MagPoseFactor
\n-
\n-
141
\n-
142}
\n-
Non-linear factor base classes.
\n+
57 Matrix99 predicted_H_x1;
\n+
58 NavState predicted = x1.update(b_accel, b_omega, dt_, H1 ? &predicted_H_x1 : nullptr, {}, {});
\n+
59
\n+
60 Matrix99 error_H_predicted;
\n+
61 Vector9 error = predicted.localCoordinates(x2, H1 ? &error_H_predicted : nullptr, H2);
\n+
62
\n+
63 if (H1) {
\n+
64 *H1 = error_H_predicted * predicted_H_x1;
\n+
65 }
\n+
66 return error;
\n+
67 }
\n+
\n+
68};
\n+
\n+
69
\n+
70} // namespace gtsam
\n+
Navigation state composing of attitude, position, and velocity.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n-
Factor to estimate rotation of a Pose2 or Pose3 given a magnetometer reading.
Definition MagPoseFactor.h:28
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Implement functions needed for Testable.
Definition MagPoseFactor.h:89
\n-
~MagPoseFactor() override
Concept check by type.
Definition MagPoseFactor.h:52
\n-
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
Equals function.
Definition MagPoseFactor.h:97
\n-
NonlinearFactor::shared_ptr clone() const override
Definition MagPoseFactor.h:81
\n-
friend class boost::serialization::access
Serialization function.
Definition MagPoseFactor.h:129
\n-
MagPoseFactor(Key pose_key, const Point &measured, double scale, const Point &direction, const Point &bias, const SharedNoiseModel &model, const boost::optional< POSE > &body_P_sensor)
Construct the factor.
Definition MagPoseFactor.h:67
\n-
Vector evaluateError(const POSE &nPb, boost::optional< Matrix & > H=boost::none) const override
Implement functions needed to derive from Factor.
Definition MagPoseFactor.h:111
\n-
MagPoseFactor()
Default constructor - only use for serialization.
Definition MagPoseFactor.h:55
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
Binary factor for applying a constant velocity model to a moving body represented as a NavState.
Definition ConstantVelocityFactor.h:29
\n+
gtsam::Vector evaluateError(const NavState &x1, const NavState &x2, boost::optional< gtsam::Matrix & > H1=boost::none, boost::optional< gtsam::Matrix & > H2=boost::none) const override
Caclulate error: (x2 - x1.update(dt))) where X1 and X1 are NavStates and dt is the time difference in...
Definition ConstantVelocityFactor.h:50
\n+
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n+
Vector9 localCoordinates(const NavState &g, OptionalJacobian< 9, 9 > H1=boost::none, OptionalJacobian< 9, 9 > H2=boost::none) const
localCoordinates with optional derivatives
Definition NavState.cpp:135
\n+
NavState update(const Vector3 &b_acceleration, const Vector3 &b_omega, const double dt, OptionalJacobian< 9, 9 > F, OptionalJacobian< 9, 3 > G1, OptionalJacobian< 9, 3 > G2) const
Integrate forward in time given angular velocity and acceleration in body frame Uses second order int...
Definition NavState.cpp:171
\n+
double error(const Values &c) const override
Calculate the error of the factor.
Definition NonlinearFactor.cpp:138
\n
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Concept-checking macros for geometric objects Each macro instantiates a concept check structure,...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,216 +1,116 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MagPoseFactor.h\n+ConstantVelocityFactor.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12#pragma once\n-13\n-14#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh>\n-15#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-16\n-17namespace _\bg_\bt_\bs_\ba_\bm {\n-18\n-27template \n-_\b2_\b8class _\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-29 private:\n-30 using This = _\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bP_\bO_\bS_\bE_\b>;\n-31 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bS_\bE_\b>;\n-32 using Point = typename POSE::Translation;\n-33 using Rot = typename POSE::Rotation;\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+_\b2_\b9class _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+30 double dt_;\n+31\n+32 public:\n+33 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b,_\b _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b>;\n 34\n-35 const Point measured_;\n-36 const Point nM_;\n-37 const Point bias_;\n-38 boost::optional body_P_sensor_;\n+35 public:\n+36 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by i, _\bK_\be_\by j, double dt, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+&model)\n+37 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b,_\b _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b>(model, i, j), dt_(dt) {}\n+38 _\b~_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br() override{};\n 39\n-40 static const int MeasDim = Point::RowsAtCompileTime;\n-41 static const int PoseDim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bO_\bS_\bE_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-42 static const int RotDim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bo_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-43\n-45 using shared_ptr = boost::shared_ptr>;\n-46\n-48 GTSAM_CONCEPT_TESTABLE_TYPE(POSE)\n-49 GTSAM_CONCEPT_POSE_TYPE(POSE)\n-50\n-51 public:\n-_\b5_\b2 _\b~_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-53\n-_\b5_\b5 _\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+_\b5_\b0 gtsam::Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be &x1, const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be &x2,\n+51 boost::optional H1 = boost::none,\n+52 boost::optional H2 = boost::none) const override {\n+53 // only used to use update() below\n+54 static const Vector3 b_accel{0.0, 0.0, 0.0};\n+55 static const Vector3 b_omega{0.0, 0.0, 0.0};\n 56\n-_\b6_\b7 _\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by pose_key,\n-68 const Point& measured,\n-69 double scale,\n-70 const Point& direction,\n-71 const Point& bias,\n-72 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n-73 const boost::optional& body_P_sensor)\n-74 : _\bB_\ba_\bs_\be(model, pose_key),\n-75 measured_(body_P_sensor ? body_P_sensor->rotation() * measured : measured),\n-76 nM_(scale * direction.normalized()),\n-77 bias_(body_P_sensor ? body_P_sensor->rotation() * bias : bias),\n-78 body_P_sensor_(body_P_sensor) {}\n-79\n-_\b8_\b1 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-82 return boost::static_pointer_cast(\n-83 NonlinearFactor::shared_ptr(new This(*this)));\n-84 }\n-85\n-87\n-88 // Print out the factor.\n-_\b8_\b9 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-DefaultKeyFormatter) const override {\n-90 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n-91 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Vector(nM_), \"local field (nM): \");\n-92 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Vector(measured_), \"measured field (bM): \");\n-93 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt(Vector(bias_), \"magnetometer bias: \");\n-94 }\n-95\n-_\b9_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol=1e-9) const override\n-{\n-98 const This *e = dynamic_cast (&expected);\n-99 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) &&\n-100 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(this->measured_, e->measured_, tol) &&\n-101 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(this->nM_, e->nM_, tol) &&\n-102 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(this->bias_, e->bias_, tol);\n-103 }\n-104\n-106\n-_\b1_\b1_\b1 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const POSE& nPb, boost::optional H = boost::\n-none) const override {\n-112 // Predict the measured magnetic field h(x) in the *body* frame.\n-113 // If body_P_sensor was given, bias_ will have been rotated into the body\n-frame.\n-114 Matrix H_rot = Matrix::Zero(MeasDim, RotDim);\n-115 const Point hx = nPb.rotation().unrotate(nM_, H_rot, boost::none) + bias_;\n-116\n-117 if (H) {\n-118 // Fill in the relevant part of the Jacobian (just rotation columns).\n-119 *H = Matrix::Zero(MeasDim, PoseDim);\n-120 const size_t rot_col0 = nPb.rotationInterval().first;\n-121 (*H).block(0, rot_col0, MeasDim, RotDim) = H_rot;\n-122 }\n-123\n-124 return (hx - measured_);\n-125 }\n-126\n-127 private:\n-_\b1_\b2_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-130 template\n-131 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-132 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n-compatibility\n-133 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n-134 boost::serialization::base_object(*this));\n-135 ar & BOOST_SERIALIZATION_NVP(measured_);\n-136 ar & BOOST_SERIALIZATION_NVP(nM_);\n-137 ar & BOOST_SERIALIZATION_NVP(bias_);\n-138 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);\n-139 }\n-140}; // \\class MagPoseFactor\n-141\n-142}\n+57 Matrix99 predicted_H_x1;\n+58 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be predicted = x1._\bu_\bp_\bd_\ba_\bt_\be(b_accel, b_omega, dt_, H1 ? &predicted_H_x1 :\n+nullptr, {}, {});\n+59\n+60 Matrix99 error_H_predicted;\n+61 Vector9 _\be_\br_\br_\bo_\br = predicted._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(x2, H1 ? &error_H_predicted :\n+nullptr, H2);\n+62\n+63 if (H1) {\n+64 *H1 = error_H_predicted * predicted_H_x1;\n+65 }\n+66 return _\be_\br_\br_\bo_\br;\n+67 }\n+68};\n+69\n+70} // namespace gtsam\n+_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n+Navigation state composing of attitude, position, and velocity.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n Aliases.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n-bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n-DenseBase< MATRIX > &B, double tol=1e-9)\n-equals with a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Factor to estimate rotation of a Pose2 or Pose3 given a magnetometer reading.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-Implement functions needed for Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-~MagPoseFactor() override\n-Concept check by type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n-Equals function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-MagPoseFactor(Key pose_key, const Point &measured, double scale, const Point\n-&direction, const Point &bias, const SharedNoiseModel &model, const boost::\n-optional< POSE > &body_P_sensor)\n-Construct the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const POSE &nPb, boost::optional< Matrix & > H=boost::\n-none) const override\n-Implement functions needed to derive from Factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bg_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-MagPoseFactor()\n-Default constructor - only use for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagPoseFactor.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br\n+Binary factor for applying a constant velocity model to a moving body\n+represented as a NavState.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConstantVelocityFactor.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+gtsam::Vector evaluateError(const NavState &x1, const NavState &x2, boost::\n+optional< gtsam::Matrix & > H1=boost::none, boost::optional< gtsam::Matrix & >\n+H2=boost::none) const override\n+Caclulate error: (x2 - x1.update(dt))) where X1 and X1 are NavStates and dt is\n+the time difference in...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConstantVelocityFactor.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n+Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n+not make sense to make...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+Vector9 localCoordinates(const NavState &g, OptionalJacobian< 9, 9 > H1=boost::\n+none, OptionalJacobian< 9, 9 > H2=boost::none) const\n+localCoordinates with optional derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.cpp:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+NavState update(const Vector3 &b_acceleration, const Vector3 &b_omega, const\n+double dt, OptionalJacobian< 9, 9 > F, OptionalJacobian< 9, 3 > G1,\n+OptionalJacobian< 9, 3 > G2) const\n+Integrate forward in time given angular velocity and acceleration in body frame\n+Uses second order int...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.cpp:171\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &c) const override\n+Calculate the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:138\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n A convenient base class for creating your own NoiseModelFactor with n\n variables.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh\n-Concept-checking macros for geometric objects Each macro instantiates a concept\n-check structure,...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * M\bMa\bag\bgP\bPo\bos\bse\beF\bFa\bac\bct\bto\bor\br.\b.h\bh\n+ * _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00959.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00959.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/TangentPreintegration.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,63 +95,50 @@\n \n \n \n \n
\n \n-
TangentPreintegration.cpp File Reference
\n+Functions
\n+
ImuFactor.cpp File Reference
\n \n
\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-Macros

\n-#define D_R_R(H)   (H)->block<3,3>(0,0)
 
\n-#define D_R_t(H)   (H)->block<3,3>(0,3)
 
\n-#define D_R_v(H)   (H)->block<3,3>(0,6)
 
\n-#define D_t_R(H)   (H)->block<3,3>(3,0)
 
\n-#define D_t_t(H)   (H)->block<3,3>(3,3)
 
\n-#define D_t_v(H)   (H)->block<3,3>(3,6)
 
\n-#define D_v_R(H)   (H)->block<3,3>(6,0)
 
\n-#define D_v_t(H)   (H)->block<3,3>(6,3)
 
\n-#define D_v_v(H)   (H)->block<3,3>(6,6)
 

\n+Functions

\n+std::ostream & gtsam::operator<< (std::ostream &os, const ImuFactor &f)
 
\n+std::ostream & gtsam::operator<< (std::ostream &os, const ImuFactor2 &f)
 
\n

Detailed Description

\n-
Author
Frank Dellaert
\n+
Author
Luca Carlone
\n
\n-Adam Bry
\n+Stephen Williams \n+
\n+Richard Roberts
\n+
\n+Vadim Indelman
\n+
\n+David Jensen
\n+
\n+Frank Dellaert
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,38 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n-TangentPreintegration.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ImuFactor.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 D\bD_\b_R\bR_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,0)\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br &f)\n \u00a0\n-#define\u00a0 D\bD_\b_R\bR_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,3)\n-\u00a0\n-#define\u00a0 D\bD_\b_R\bR_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,6)\n-\u00a0\n-#define\u00a0 D\bD_\b_t\bt_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,0)\n-\u00a0\n-#define\u00a0 D\bD_\b_t\bt_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,3)\n-\u00a0\n-#define\u00a0 D\bD_\b_t\bt_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,6)\n-\u00a0\n-#define\u00a0 D\bD_\b_v\bv_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,0)\n-\u00a0\n-#define\u00a0 D\bD_\b_v\bv_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,3)\n-\u00a0\n-#define\u00a0 D\bD_\b_v\bv_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,6)\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2 &f)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n+ Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n Frank Dellaert\n- Adam Bry\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bp_\bp\n+ * _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00965.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00965.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationParams.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,52 @@\n \n \n \n \n \n
\n \n-
AHRSFactor.cpp File Reference
\n+
PreintegrationParams.h File Reference
\n
\n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::PreintegrationParams
 Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the constructor. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Krunal Chande
\n+
Author
Luca Carlone
\n+
\n+Stephen Williams
\n+
\n+Richard Roberts
\n+
\n+Vadim Indelman
\n+
\n+David Jensen
\n
\n-Luca Carlone
\n+Frank Dellaert\n
\n Frank Dellaert
\n-
Date
July 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-AHRSFactor.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+PreintegrationParams.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+\u00a0 Parameters for pre-integration: Usage: Create just a single Params and\n+ pass a shared pointer to the constructor. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n- Krunal Chande\n Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n+ Frank Dellaert\n Frank Dellaert\n- Date\n- July 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00968.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00968.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,43 @@\n \n \n \n \n \n
\n \n-
ImuBias.h File Reference
\n+Namespaces |\n+Functions
\n+
ImuBias.cpp File Reference
\n \n
\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::imuBias::ConstantBias
 
struct  gtsam::traits< imuBias::ConstantBias >
 
\n \n \n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
namespace  gtsam::imuBias
 All bias models live in the imuBias namespace.
 
\n+\n+\n+\n+\n

\n+Functions

\n+std::ostream & gtsam::imuBias::operator<< (std::ostream &os, const ConstantBias &bias)
 ostream operator
 
\n

Detailed Description

\n
Date
Feb 2, 2012
\n
Author
Vadim Indelman, Stephen Williams
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ImuBias.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ImuBias.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs\n \u00a0 All bias models live in the _\bi_\bm_\bu_\bB_\bi_\ba_\bs namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bim\bmu\buB\bBi\bia\bas\bs:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const\n+ _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs &bias)\n+\u00a0 ostream operator\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n Feb 2, 2012\n Author\n Vadim Indelman, Stephen Williams\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bh\n+ * _\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00968.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00968.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a00968 = [\n- [\"gtsam::imuBias::ConstantBias\", \"a04140.html\", \"a04140\"],\n- [\"gtsam::traits< imuBias::ConstantBias >\", \"a04144.html\", null]\n+ [\"operator<<\", \"a00968.html#ae7a6582902c6daf9f20f2f7e466c60d8\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00971.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00971.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/Scenario.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegratedRotation.h File Reference\n \n \n \n \n \n \n \n@@ -96,48 +96,53 @@\n \n \n \n
\n \n-
Scenario.h File Reference
\n+
PreintegratedRotation.h File Reference
\n
\n
\n \n-

Simple class to test navigation scenarios. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n-\n-\n+\n \n

\n Classes

class  gtsam::Scenario
 Simple trajectory simulator. More...
struct  gtsam::PreintegratedRotationParams
 Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the constructor. More...
 
class  gtsam::ConstantTwistScenario
 Scenario with constant twist 3D trajectory. More...
class  gtsam::PreintegratedRotation
 PreintegratedRotation is the base class for all PreintegratedMeasurements classes (in AHRSFactor, ImuFactor, and CombinedImuFactor). More...
 
class  gtsam::AcceleratingScenario
 Accelerating from an arbitrary initial state, with optional rotation. More...
struct  gtsam::traits< PreintegratedRotation >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Simple class to test navigation scenarios.

\n-
Author
Frank Dellaert
\n+
Author
Luca Carlone
\n+
\n+Stephen Williams
\n+
\n+Richard Roberts
\n+
\n+Vadim Indelman
\n+
\n+David Jensen
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,36 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Scenario.h File Reference\n-Simple class to test navigation scenarios. _\bM_\bo_\br_\be_\b._\b._\b.\n+PreintegratedRotation.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n-\u00a0 Simple trajectory simulator. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+\u00a0 Parameters for pre-integration: Usage: Create just a single Params and\n+ pass a shared pointer to the constructor. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n-\u00a0 _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo with constant twist 3D trajectory. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+ _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn is the base class for all\n+\u00a0 PreintegratedMeasurements classes (in _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br, _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br, and\n+ _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br). _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n-\u00a0 Accelerating from an arbitrary initial state, with optional rotation.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Simple class to test navigation scenarios.\n Author\n+ Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b._\bh\n+ * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00971.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00971.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,5 @@\n var a00971 = [\n- [\"gtsam::Scenario\", \"a04224.html\", \"a04224\"],\n- [\"gtsam::ConstantTwistScenario\", \"a04228.html\", \"a04228\"],\n- [\"gtsam::AcceleratingScenario\", \"a04232.html\", \"a04232\"]\n+ [\"gtsam::PreintegratedRotationParams\", \"a04204.html\", \"a04204\"],\n+ [\"gtsam::PreintegratedRotation\", \"a04208.html\", \"a04208\"],\n+ [\"gtsam::traits< PreintegratedRotation >\", \"a04212.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00971_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00971_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/Scenario.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegratedRotation.h Source File\n \n \n \n \n \n \n \n@@ -98,152 +98,203 @@\n
No Matches
\n \n \n \n \n \n
\n-
Scenario.h
\n+
PreintegratedRotation.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-\n-\n-
21
\n-
22namespace gtsam {
\n+
22#pragma once
\n
23
\n-
\n-
25class Scenario {
\n-
26 public:
\n-
28 virtual ~Scenario() {}
\n-
29
\n-
30 // Quantities a Scenario needs to specify:
\n-
31
\n-
32 virtual Pose3 pose(double t) const = 0;
\n-
33 virtual Vector3 omega_b(double t) const = 0;
\n-
34 virtual Vector3 velocity_n(double t) const = 0;
\n-
35 virtual Vector3 acceleration_n(double t) const = 0;
\n-
36
\n-
37 // Derived quantities:
\n-
38
\n-
39 Rot3 rotation(double t) const { return pose(t).rotation(); }
\n-
40 NavState navState(double t) const { return NavState(pose(t), velocity_n(t)); }
\n-
41
\n-
42 Vector3 velocity_b(double t) const {
\n-
43 const Rot3 nRb = rotation(t);
\n-
44 return nRb.transpose() * velocity_n(t);
\n+\n+
25#include <gtsam/base/Matrix.h>
\n+
26
\n+
27namespace gtsam {
\n+
28
\n+
\n+
31struct GTSAM_EXPORT PreintegratedRotationParams {
\n+\n+
35 boost::optional<Vector3> omegaCoriolis;
\n+
36 boost::optional<Pose3> body_P_sensor;
\n+
37
\n+
38 PreintegratedRotationParams() : gyroscopeCovariance(I_3x3) {}
\n+
39
\n+
40 PreintegratedRotationParams(const Matrix3& gyroscope_covariance,
\n+
41 boost::optional<Vector3> omega_coriolis)
\n+
42 : gyroscopeCovariance(gyroscope_covariance) {
\n+
43 if (omega_coriolis)
\n+
44 omegaCoriolis.reset(omega_coriolis.get());
\n
45 }
\n
46
\n-
47 Vector3 acceleration_b(double t) const {
\n-
48 const Rot3 nRb = rotation(t);
\n-
49 return nRb.transpose() * acceleration_n(t);
\n-
50 }
\n-
51};
\n-
\n-
52
\n-
\n-\n-
61 public:
\n-
\n-
63 ConstantTwistScenario(const Vector3& w, const Vector3& v,
\n-
64 const Pose3& nTb0 = Pose3())
\n-
65 : twist_((Vector6() << w, v).finished()), a_b_(w.cross(v)), nTb0_(nTb0) {}
\n-
\n-
66
\n-
\n-
67 Pose3 pose(double t) const override {
\n-
68 return nTb0_ * Pose3::Expmap(twist_ * t);
\n-
69 }
\n-
\n-
70 Vector3 omega_b(double t) const override { return twist_.head<3>(); }
\n-
\n-
71 Vector3 velocity_n(double t) const override {
\n-
72 return rotation(t).matrix() * twist_.tail<3>();
\n-
73 }
\n-
\n-
74 Vector3 acceleration_n(double t) const override { return rotation(t) * a_b_; }
\n-
75
\n-
76 private:
\n-
77 const Vector6 twist_;
\n-
78 const Vector3 a_b_; // constant centripetal acceleration in body = w_b * v_b
\n-
79 const Pose3 nTb0_;
\n-
80};
\n-
\n-
81
\n-
\n-\n-
84 public:
\n-
\n-
87 AcceleratingScenario(const Rot3& nRb, const Point3& p0, const Vector3& v0,
\n-
88 const Vector3& a_n,
\n-
89 const Vector3& omega_b = Vector3::Zero())
\n-
90 : nRb_(nRb), p0_(p0), v0_(v0), a_n_(a_n), omega_b_(omega_b) {}
\n-
\n-
91
\n-
\n-
92 Pose3 pose(double t) const override {
\n-
93 return Pose3(nRb_.expmap(omega_b_ * t), p0_ + v0_ * t + a_n_ * t * t / 2.0);
\n-
94 }
\n-
\n-
95 Vector3 omega_b(double t) const override { return omega_b_; }
\n-
96 Vector3 velocity_n(double t) const override { return v0_ + a_n_ * t; }
\n-
97 Vector3 acceleration_n(double t) const override { return a_n_; }
\n-
98
\n-
99 private:
\n-
100 const Rot3 nRb_;
\n-
101 const Vector3 p0_, v0_, a_n_, omega_b_;
\n-
102};
\n-
\n+
47 virtual ~PreintegratedRotationParams() {}
\n+
48
\n+
49 virtual void print(const std::string& s) const;
\n+
50 virtual bool equals(const PreintegratedRotationParams& other, double tol=1e-9) const;
\n+
51
\n+
52 void setGyroscopeCovariance(const Matrix3& cov) { gyroscopeCovariance = cov; }
\n+
53 void setOmegaCoriolis(const Vector3& omega) { omegaCoriolis.reset(omega); }
\n+
54 void setBodyPSensor(const Pose3& pose) { body_P_sensor.reset(pose); }
\n+
55
\n+
56 const Matrix3& getGyroscopeCovariance() const { return gyroscopeCovariance; }
\n+
57 boost::optional<Vector3> getOmegaCoriolis() const { return omegaCoriolis; }
\n+
58 boost::optional<Pose3> getBodyPSensor() const { return body_P_sensor; }
\n+
59
\n+
60 private:
\n+
62 friend class boost::serialization::access;
\n+
63 template<class ARCHIVE>
\n+
64 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
65 namespace bs = ::boost::serialization;
\n+
66 ar & BOOST_SERIALIZATION_NVP(gyroscopeCovariance);
\n+
67 ar & BOOST_SERIALIZATION_NVP(body_P_sensor);
\n+
68
\n+
69 // Provide support for Eigen::Matrix in boost::optional
\n+
70 bool omegaCoriolisFlag = omegaCoriolis.is_initialized();
\n+
71 ar & boost::serialization::make_nvp("omegaCoriolisFlag", omegaCoriolisFlag);
\n+
72 if (omegaCoriolisFlag) {
\n+
73 ar & BOOST_SERIALIZATION_NVP(*omegaCoriolis);
\n+
74 }
\n+
75 }
\n+
76
\n+
77#ifdef GTSAM_USE_QUATERNIONS
\n+
78 // Align if we are using Quaternions
\n+
79public:
\n+\n+
81#endif
\n+
82};
\n+
\n+
83
\n+
\n+
89class GTSAM_EXPORT PreintegratedRotation {
\n+
90 public:
\n+\n+
92
\n+
93 protected:
\n+
95 boost::shared_ptr<Params> p_;
\n+
96
\n+
97 double deltaTij_;
\n+\n+\n+
100
\n+\n
103
\n-
104} // namespace gtsam
\n-\n-
Navigation state composing of attitude, position, and velocity.
\n+
104 public:
\n+
107
\n+
\n+
109 explicit PreintegratedRotation(const boost::shared_ptr<Params>& p) : p_(p) {
\n+
110 resetIntegration();
\n+
111 }
\n+
\n+
112
\n+
\n+
114 PreintegratedRotation(const boost::shared_ptr<Params>& p,
\n+
115 double deltaTij, const Rot3& deltaRij,
\n+
116 const Matrix3& delRdelBiasOmega)
\n+
117 : p_(p), deltaTij_(deltaTij), deltaRij_(deltaRij), delRdelBiasOmega_(delRdelBiasOmega) {}
\n+
\n+
118
\n+
120
\n+
123
\n+
125 void resetIntegration();
\n+
126
\n+
\n+
128 bool matchesParamsWith(const PreintegratedRotation& other) const {
\n+
129 return p_ == other.p_;
\n+
130 }
\n+
\n+
132
\n+
135 const boost::shared_ptr<Params>& params() const {
\n+
136 return p_;
\n+
137 }
\n+
138 const double& deltaTij() const {
\n+
139 return deltaTij_;
\n+
140 }
\n+
141 const Rot3& deltaRij() const {
\n+
142 return deltaRij_;
\n+
143 }
\n+
144 const Matrix3& delRdelBiasOmega() const {
\n+
145 return delRdelBiasOmega_;
\n+
146 }
\n+
148
\n+
151 void print(const std::string& s) const;
\n+
152 bool equals(const PreintegratedRotation& other, double tol) const;
\n+
154
\n+
157
\n+
161 Rot3 incrementalRotation(const Vector3& measuredOmega, const Vector3& biasHat, double deltaT,
\n+
162 OptionalJacobian<3, 3> D_incrR_integratedOmega) const;
\n+
163
\n+
166 void integrateMeasurement(const Vector3& measuredOmega, const Vector3& biasHat, double deltaT,
\n+
167 OptionalJacobian<3, 3> D_incrR_integratedOmega = boost::none,
\n+
168 OptionalJacobian<3, 3> F = boost::none);
\n+
169
\n+
171 Rot3 biascorrectedDeltaRij(const Vector3& biasOmegaIncr,
\n+
172 OptionalJacobian<3, 3> H = boost::none) const;
\n+
173
\n+
175 Vector3 integrateCoriolis(const Rot3& rot_i) const;
\n+
176
\n+
178
\n+
179 private:
\n+
181 friend class boost::serialization::access;
\n+
182 template <class ARCHIVE>
\n+
183 void serialize(ARCHIVE& ar, const unsigned int /*version*/) { // NOLINT
\n+
184 ar& BOOST_SERIALIZATION_NVP(p_);
\n+
185 ar& BOOST_SERIALIZATION_NVP(deltaTij_);
\n+
186 ar& BOOST_SERIALIZATION_NVP(deltaRij_);
\n+
187 ar& BOOST_SERIALIZATION_NVP(delRdelBiasOmega_);
\n+
188 }
\n+
189
\n+
190#ifdef GTSAM_USE_QUATERNIONS
\n+
191 // Align if we are using Quaternions
\n+
192 public:
\n+\n+
194#endif
\n+
195};
\n+
\n+
196
\n+
197template <>
\n+
198struct traits<PreintegratedRotation> : public Testable<PreintegratedRotation> {};
\n+
199
\n+
200}
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
3D Pose
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Point3 cross(const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H1, OptionalJacobian< 3, 3 > H2)
cross product
Definition Point3.cpp:64
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n-
Class expmap(const TangentVector &v) const
expmap as required by manifold concept Applies exponential map to v and composes with *this
Definition Lie.h:78
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
static Pose3 Expmap(const Vector6 &xi, OptionalJacobian< 6, 6 > Hxi=boost::none)
Exponential map at identity - create a rotation from canonical coordinates .
Definition Pose3.cpp:169
\n-
const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get rotation
Definition Pose3.cpp:315
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
Matrix3 matrix() const
return 3*3 rotation matrix
Definition Rot3M.cpp:219
\n-
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n-
Simple trajectory simulator.
Definition Scenario.h:25
\n-
virtual Pose3 pose(double t) const =0
pose at time t
\n-
virtual Vector3 acceleration_n(double t) const =0
acceleration in nav frame
\n-
virtual Vector3 velocity_n(double t) const =0
velocity at time t, in nav frame
\n-
virtual ~Scenario()
virtual destructor
Definition Scenario.h:28
\n-
virtual Vector3 omega_b(double t) const =0
angular velocity in body frame
\n-
Scenario with constant twist 3D trajectory.
Definition Scenario.h:60
\n-
ConstantTwistScenario(const Vector3 &w, const Vector3 &v, const Pose3 &nTb0=Pose3())
Construct scenario with constant twist [w,v].
Definition Scenario.h:63
\n-
Vector3 acceleration_n(double t) const override
acceleration in nav frame
Definition Scenario.h:74
\n-
Vector3 omega_b(double t) const override
angular velocity in body frame
Definition Scenario.h:70
\n-
Pose3 pose(double t) const override
pose at time t
Definition Scenario.h:67
\n-
Vector3 velocity_n(double t) const override
velocity at time t, in nav frame
Definition Scenario.h:71
\n-
Accelerating from an arbitrary initial state, with optional rotation.
Definition Scenario.h:83
\n-
Pose3 pose(double t) const override
pose at time t
Definition Scenario.h:92
\n-
Vector3 omega_b(double t) const override
angular velocity in body frame
Definition Scenario.h:95
\n-
AcceleratingScenario(const Rot3 &nRb, const Point3 &p0, const Vector3 &v0, const Vector3 &a_n, const Vector3 &omega_b=Vector3::Zero())
Construct scenario with constant acceleration in navigation frame and optional angular velocity in bo...
Definition Scenario.h:87
\n-
Vector3 acceleration_n(double t) const override
acceleration in nav frame
Definition Scenario.h:97
\n-
Vector3 velocity_n(double t) const override
velocity at time t, in nav frame
Definition Scenario.h:96
\n+
Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the c...
Definition PreintegratedRotation.h:31
\n+
boost::optional< Pose3 > body_P_sensor
The pose of the sensor in the body frame.
Definition PreintegratedRotation.h:36
\n+
boost::optional< Vector3 > omegaCoriolis
Coriolis constant.
Definition PreintegratedRotation.h:35
\n+
Matrix3 gyroscopeCovariance
Continuous-time "Covariance" of gyroscope measurements The units for stddev are \u03c3 = rad/s/\u221aHz.
Definition PreintegratedRotation.h:34
\n+
PreintegratedRotation is the base class for all PreintegratedMeasurements classes (in AHRSFactor,...
Definition PreintegratedRotation.h:89
\n+
Matrix3 delRdelBiasOmega_
Jacobian of preintegrated rotation w.r.t. angular rate bias.
Definition PreintegratedRotation.h:99
\n+
boost::shared_ptr< Params > p_
Parameters.
Definition PreintegratedRotation.h:95
\n+
PreintegratedRotation(const boost::shared_ptr< Params > &p, double deltaTij, const Rot3 &deltaRij, const Matrix3 &delRdelBiasOmega)
Explicit initialization of all class members.
Definition PreintegratedRotation.h:114
\n+
PreintegratedRotation(const boost::shared_ptr< Params > &p)
Default constructor, resets integration to zero.
Definition PreintegratedRotation.h:109
\n+
double deltaTij_
Time interval from i to j.
Definition PreintegratedRotation.h:97
\n+
bool matchesParamsWith(const PreintegratedRotation &other) const
check parameters equality: checks whether shared pointer points to same Params object.
Definition PreintegratedRotation.h:128
\n+
PreintegratedRotation()
Default constructor for serialization.
Definition PreintegratedRotation.h:102
\n+
Rot3 deltaRij_
Preintegrated relative orientation (in frame i)
Definition PreintegratedRotation.h:98
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,213 +1,253 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Scenario.h\n+PreintegratedRotation.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n-21\n-22namespace _\bg_\bt_\bs_\ba_\bm {\n+22#pragma once\n 23\n-_\b2_\b5class _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo {\n-26 public:\n-_\b2_\b8 virtual _\b~_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo() {}\n-29\n-30 // Quantities a Scenario needs to specify:\n-31\n-_\b3_\b2 virtual _\bP_\bo_\bs_\be_\b3 _\bp_\bo_\bs_\be(double t) const = 0;\n-_\b3_\b3 virtual Vector3 _\bo_\bm_\be_\bg_\ba_\b__\bb(double t) const = 0;\n-_\b3_\b4 virtual Vector3 _\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn(double t) const = 0;\n-_\b3_\b5 virtual Vector3 _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn(double t) const = 0;\n-36\n-37 // Derived quantities:\n-38\n-39 _\bR_\bo_\bt_\b3 rotation(double t) const { return _\bp_\bo_\bs_\be(t)._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn(); }\n-40 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be navState(double t) const { return _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be(_\bp_\bo_\bs_\be(t), _\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn(t));\n-}\n-41\n-42 Vector3 velocity_b(double t) const {\n-43 const Rot3 nRb = rotation(t);\n-44 return nRb.transpose() * _\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn(t);\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n+28\n+_\b3_\b1struct GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs {\n+_\b3_\b4 Matrix3 _\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be;\n+_\b3_\b5 boost::optional _\bo_\bm_\be_\bg_\ba_\bC_\bo_\br_\bi_\bo_\bl_\bi_\bs;\n+_\b3_\b6 boost::optional _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br;\n+37\n+38 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs() : gyroscopeCovariance(I_3x3) {}\n+39\n+40 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs(const Matrix3& gyroscope_covariance,\n+41 boost::optional omega_coriolis)\n+42 : gyroscopeCovariance(gyroscope_covariance) {\n+43 if (omega_coriolis)\n+44 omegaCoriolis.reset(omega_coriolis.get());\n 45 }\n 46\n-47 Vector3 acceleration_b(double t) const {\n-48 const Rot3 nRb = rotation(t);\n-49 return nRb.transpose() * _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn(t);\n-50 }\n-51};\n-52\n-_\b6_\b0class _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo : public _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo {\n-61 public:\n-_\b6_\b3 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo(const Vector3& w, const Vector3& v,\n-64 const _\bP_\bo_\bs_\be_\b3& nTb0 = _\bP_\bo_\bs_\be_\b3())\n-65 : twist_((Vector6() << w, v).finished()), a_b_(w._\bc_\br_\bo_\bs_\bs(v)), nTb0_(nTb0) {}\n-66\n-_\b6_\b7 _\bP_\bo_\bs_\be_\b3 _\bp_\bo_\bs_\be(double t) const override {\n-68 return nTb0_ * _\bP_\bo_\bs_\be_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(twist_ * t);\n-69 }\n-_\b7_\b0 Vector3 _\bo_\bm_\be_\bg_\ba_\b__\bb(double t) const override { return twist_.head<3>(); }\n-_\b7_\b1 Vector3 _\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn(double t) const override {\n-72 return rotation(t)._\bm_\ba_\bt_\br_\bi_\bx() * twist_.tail<3>();\n-73 }\n-_\b7_\b4 Vector3 _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn(double t) const override { return rotation(t) * a_b_;\n+47 virtual ~PreintegratedRotationParams() {}\n+48\n+49 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s) const;\n+50 virtual bool equals(const PreintegratedRotationParams& other, double tol=1e-\n+9) const;\n+51\n+52 void setGyroscopeCovariance(const Matrix3& cov) { gyroscopeCovariance = cov;\n+}\n+53 void setOmegaCoriolis(const Vector3& omega) { omegaCoriolis.reset(omega); }\n+54 void setBodyPSensor(const Pose3& pose) { body_P_sensor.reset(pose); }\n+55\n+56 const Matrix3& getGyroscopeCovariance() const { return gyroscopeCovariance;\n }\n-75\n-76 private:\n-77 const Vector6 twist_;\n-78 const Vector3 a_b_; // constant centripetal acceleration in body = w_b * v_b\n-79 const _\bP_\bo_\bs_\be_\b3 nTb0_;\n-80};\n-81\n-_\b8_\b3class _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo : public _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo {\n-84 public:\n-_\b8_\b7 _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo(const _\bR_\bo_\bt_\b3& nRb, const _\bP_\bo_\bi_\bn_\bt_\b3& p0, const Vector3& v0,\n-88 const Vector3& a_n,\n-89 const Vector3& _\bo_\bm_\be_\bg_\ba_\b__\bb = Vector3::Zero())\n-90 : nRb_(nRb), p0_(p0), v0_(v0), a_n_(a_n), omega_b_(_\bo_\bm_\be_\bg_\ba_\b__\bb) {}\n-91\n-_\b9_\b2 _\bP_\bo_\bs_\be_\b3 _\bp_\bo_\bs_\be(double t) const override {\n-93 return _\bP_\bo_\bs_\be_\b3(nRb_._\be_\bx_\bp_\bm_\ba_\bp(omega_b_ * t), p0_ + v0_ * t + a_n_ * t * t / 2.0);\n-94 }\n-_\b9_\b5 Vector3 _\bo_\bm_\be_\bg_\ba_\b__\bb(double t) const override { return omega_b_; }\n-_\b9_\b6 Vector3 _\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn(double t) const override { return v0_ + a_n_ * t; }\n-_\b9_\b7 Vector3 _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn(double t) const override { return a_n_; }\n-98\n-99 private:\n-100 const _\bR_\bo_\bt_\b3 nRb_;\n-101 const Vector3 p0_, v0_, a_n_, omega_b_;\n-102};\n+57 boost::optional getOmegaCoriolis() const { return omegaCoriolis; }\n+58 boost::optional getBodyPSensor() const { return body_P_sensor; }\n+59\n+60 private:\n+_\b6_\b2 friend class boost::serialization::access;\n+63 template\n+64 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+65 namespace bs = ::boost::serialization;\n+66 ar & BOOST_SERIALIZATION_NVP(gyroscopeCovariance);\n+67 ar & BOOST_SERIALIZATION_NVP(body_P_sensor);\n+68\n+69 // Provide support for Eigen::Matrix in boost::optional\n+70 bool omegaCoriolisFlag = omegaCoriolis.is_initialized();\n+71 ar & boost::serialization::make_nvp(\"omegaCoriolisFlag\", omegaCoriolisFlag);\n+72 if (omegaCoriolisFlag) {\n+73 ar & BOOST_SERIALIZATION_NVP(*omegaCoriolis);\n+74 }\n+75 }\n+76\n+77#ifdef GTSAM_USE_QUATERNIONS\n+78 // Align if we are using Quaternions\n+79public:\n+80 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+81#endif\n+82};\n+83\n+_\b8_\b9class GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn {\n+90 public:\n+91 typedef _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs _\bP_\ba_\br_\ba_\bm_\bs;\n+92\n+93 protected:\n+_\b9_\b5 boost::shared_ptr _\bp_\b_;\n+96\n+_\b9_\b7 double _\bd_\be_\bl_\bt_\ba_\bT_\bi_\bj_\b_;\n+_\b9_\b8 _\bR_\bo_\bt_\b3 _\bd_\be_\bl_\bt_\ba_\bR_\bi_\bj_\b_;\n+_\b9_\b9 Matrix3 _\bd_\be_\bl_\bR_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_;\n+100\n+_\b1_\b0_\b2 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn() {}\n 103\n-104} // namespace gtsam\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n-_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n-Navigation state composing of attitude, position, and velocity.\n+104 public:\n+107\n+_\b1_\b0_\b9 explicit _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn(const boost::shared_ptr& p) : p_(p)\n+{\n+110 resetIntegration();\n+111 }\n+112\n+_\b1_\b1_\b4 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn(const boost::shared_ptr& p,\n+115 double deltaTij, const _\bR_\bo_\bt_\b3& deltaRij,\n+116 const Matrix3& delRdelBiasOmega)\n+117 : p_(p), deltaTij_(deltaTij), deltaRij_(deltaRij), delRdelBiasOmega_\n+(delRdelBiasOmega) {}\n+118\n+120\n+123\n+125 void resetIntegration();\n+126\n+_\b1_\b2_\b8 bool _\bm_\ba_\bt_\bc_\bh_\be_\bs_\bP_\ba_\br_\ba_\bm_\bs_\bW_\bi_\bt_\bh(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn& other) const {\n+129 return p_ == other._\bp_\b_;\n+130 }\n+132\n+135 const boost::shared_ptr& params() const {\n+136 return p_;\n+137 }\n+138 const double& deltaTij() const {\n+139 return deltaTij_;\n+140 }\n+141 const Rot3& deltaRij() const {\n+142 return deltaRij_;\n+143 }\n+144 const Matrix3& delRdelBiasOmega() const {\n+145 return delRdelBiasOmega_;\n+146 }\n+148\n+151 void _\bp_\br_\bi_\bn_\bt(const std::string& s) const;\n+152 bool equals(const PreintegratedRotation& other, double tol) const;\n+154\n+157\n+161 Rot3 incrementalRotation(const Vector3& measuredOmega, const Vector3&\n+biasHat, double deltaT,\n+162 OptionalJacobian<3, 3> D_incrR_integratedOmega) const;\n+163\n+166 void integrateMeasurement(const Vector3& measuredOmega, const Vector3&\n+biasHat, double deltaT,\n+167 OptionalJacobian<3, 3> D_incrR_integratedOmega = boost::none,\n+168 OptionalJacobian<3, 3> F = boost::none);\n+169\n+171 Rot3 biascorrectedDeltaRij(const Vector3& biasOmegaIncr,\n+172 OptionalJacobian<3, 3> H = boost::none) const;\n+173\n+175 Vector3 integrateCoriolis(const Rot3& rot_i) const;\n+176\n+178\n+179 private:\n+_\b1_\b8_\b1 friend class boost::serialization::access;\n+182 template \n+183 void serialize(ARCHIVE& ar, const unsigned int /*version*/) { // NOLINT\n+184 ar& BOOST_SERIALIZATION_NVP(p_);\n+185 ar& BOOST_SERIALIZATION_NVP(deltaTij_);\n+186 ar& BOOST_SERIALIZATION_NVP(deltaRij_);\n+187 ar& BOOST_SERIALIZATION_NVP(delRdelBiasOmega_);\n+188 }\n+189\n+190#ifdef GTSAM_USE_QUATERNIONS\n+191 // Align if we are using Quaternions\n+192 public:\n+193 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+194#endif\n+195};\n+196\n+197template <>\n+_\b1_\b9_\b8struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn> : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+199\n+200}\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\bo_\bs_\bs\n-Point3 cross(const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H1,\n-OptionalJacobian< 3, 3 > H2)\n-cross product\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\be_\bx_\bp_\bm_\ba_\bp\n-Class expmap(const TangentVector &v) const\n-expmap as required by manifold concept Applies exponential map to v and\n-composes with *this\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n-static Pose3 Expmap(const Vector6 &xi, OptionalJacobian< 6, 6 > Hxi=boost::\n-none)\n-Exponential map at identity - create a rotation from canonical coordinates .\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:169\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n-get rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:315\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n symbol GTSAM_USE_QUATERNIO...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-Matrix3 matrix() const\n-return 3*3 rotation matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n-Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n-not make sense to make...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n-Simple trajectory simulator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:25\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bp_\bo_\bs_\be\n-virtual Pose3 pose(double t) const =0\n-pose at time t\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn\n-virtual Vector3 acceleration_n(double t) const =0\n-acceleration in nav frame\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn\n-virtual Vector3 velocity_n(double t) const =0\n-velocity at time t, in nav frame\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\b~_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n-virtual ~Scenario()\n-virtual destructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bo_\bm_\be_\bg_\ba_\b__\bb\n-virtual Vector3 omega_b(double t) const =0\n-angular velocity in body frame\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n-Scenario with constant twist 3D trajectory.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n-ConstantTwistScenario(const Vector3 &w, const Vector3 &v, const Pose3\n-&nTb0=Pose3())\n-Construct scenario with constant twist [w,v].\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn\n-Vector3 acceleration_n(double t) const override\n-acceleration in nav frame\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bo_\bm_\be_\bg_\ba_\b__\bb\n-Vector3 omega_b(double t) const override\n-angular velocity in body frame\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bp_\bo_\bs_\be\n-Pose3 pose(double t) const override\n-pose at time t\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bT_\bw_\bi_\bs_\bt_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn\n-Vector3 velocity_n(double t) const override\n-velocity at time t, in nav frame\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n-Accelerating from an arbitrary initial state, with optional rotation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bp_\bo_\bs_\be\n-Pose3 pose(double t) const override\n-pose at time t\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bo_\bm_\be_\bg_\ba_\b__\bb\n-Vector3 omega_b(double t) const override\n-angular velocity in body frame\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n-AcceleratingScenario(const Rot3 &nRb, const Point3 &p0, const Vector3 &v0,\n-const Vector3 &a_n, const Vector3 &omega_b=Vector3::Zero())\n-Construct scenario with constant acceleration in navigation frame and optional\n-angular velocity in bo...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bo_\bn_\b__\bn\n-Vector3 acceleration_n(double t) const override\n-acceleration in nav frame\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\bi_\bn_\bg_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bv_\be_\bl_\bo_\bc_\bi_\bt_\by_\b__\bn\n-Vector3 velocity_n(double t) const override\n-velocity at time t, in nav frame\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for pre-integration: Usage: Create just a single Params and pass a\n+shared pointer to the c...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br\n+boost::optional< Pose3 > body_P_sensor\n+The pose of the sensor in the body frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bo_\bm_\be_\bg_\ba_\bC_\bo_\br_\bi_\bo_\bl_\bi_\bs\n+boost::optional< Vector3 > omegaCoriolis\n+Coriolis constant.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n+Matrix3 gyroscopeCovariance\n+Continuous-time \"Covariance\" of gyroscope measurements The units for stddev are\n+\u00cf\u0083 = rad/s/\u00e2\u0088\u009aHz.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+PreintegratedRotation is the base class for all PreintegratedMeasurements\n+classes (in AHRSFactor,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\bl_\bR_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_\n+Matrix3 delRdelBiasOmega_\n+Jacobian of preintegrated rotation w.r.t. angular rate bias.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bp_\b_\n+boost::shared_ptr< Params > p_\n+Parameters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+PreintegratedRotation(const boost::shared_ptr< Params > &p, double deltaTij,\n+const Rot3 &deltaRij, const Matrix3 &delRdelBiasOmega)\n+Explicit initialization of all class members.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+PreintegratedRotation(const boost::shared_ptr< Params > &p)\n+Default constructor, resets integration to zero.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bT_\bi_\bj_\b_\n+double deltaTij_\n+Time interval from i to j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bm_\ba_\bt_\bc_\bh_\be_\bs_\bP_\ba_\br_\ba_\bm_\bs_\bW_\bi_\bt_\bh\n+bool matchesParamsWith(const PreintegratedRotation &other) const\n+check parameters equality: checks whether shared pointer points to same Params\n+object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+PreintegratedRotation()\n+Default constructor for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bR_\bi_\bj_\b_\n+Rot3 deltaRij_\n+Preintegrated relative orientation (in frame i)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:98\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b._\bh\n+ * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00974.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00974.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/BarometricFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,45 @@\n \n \n \n \n \n
\n \n-
BarometricFactor.cpp File Reference
\n+
ImuBias.h File Reference
\n
\n
\n \n-

Implementation file for Barometric factor. \n-More...

\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::imuBias::ConstantBias
 
struct  gtsam::traits< imuBias::ConstantBias >
 
\n \n \n \n \n+\n+\n+\n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
namespace  gtsam::imuBias
 All bias models live in the imuBias namespace.
 
\n

Detailed Description

\n-

Implementation file for Barometric factor.

\n-
Author
Peter Milani
\n-
Date
December 16, 2021
\n+
Date
Feb 2, 2012
\n+
Author
Vadim Indelman, Stephen Williams
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BarometricFactor.cpp File Reference\n-Implementation file for Barometric factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ImuBias.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs\n+\u00a0 All bias models live in the _\bi_\bm_\bu_\bB_\bi_\ba_\bs namespace.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implementation file for Barometric factor.\n- Author\n- Peter Milani\n Date\n- December 16, 2021\n+ Feb 2, 2012\n+ Author\n+ Vadim Indelman, Stephen Williams\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00977.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00977.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ManifoldPreintegration.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,19 +94,40 @@\n \n \n \n \n \n
\n \n-
ManifoldPreintegration.cpp File Reference
\n+
ImuFactor.h File Reference
\n
\n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::PreintegratedImuMeasurements
 PreintegratedImuMeasurements accumulates (integrates) the IMU measurements (rotation rates and accelerations) and the corresponding covariance matrix. More...
 
class  gtsam::ImuFactor
 ImuFactor is a 5-ways factor involving previous state (pose and velocity of the vehicle at previous time step), current state (pose and velocity at current time step), and the bias estimate. More...
 
class  gtsam::ImuFactor2
 ImuFactor2 is a ternary factor that uses NavStates rather than Pose/Velocity. More...
 
struct  gtsam::traits< PreintegratedImuMeasurements >
 
struct  gtsam::traits< ImuFactor >
 
struct  gtsam::traits< ImuFactor2 >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n@@ -122,13 +143,13 @@\n
\n Frank Dellaert
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,45 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ManifoldPreintegration.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ImuFactor.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+ _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs accumulates (integrates) the IMU\n+\u00a0 measurements (rotation rates and accelerations) and the corresponding\n+ covariance matrix. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n+ _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br is a 5-ways factor involving previous state (pose and\n+\u00a0 velocity of the vehicle at previous time step), current state (pose\n+ and velocity at current time step), and the bias estimate. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+\u00a0 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2 is a ternary factor that uses NavStates rather than Pose/\n+ Velocity. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n Luca Carlone\n Stephen Williams\n Richard Roberts\n Vadim Indelman\n David Jensen\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bp_\bp\n+ * _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00986.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00986.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegratedRotation.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,53 +96,45 @@\n \n \n \n
\n \n-
PreintegratedRotation.h File Reference
\n+
AHRSFactor.h File Reference
\n
\n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n-\n-\n+\n \n

\n Classes

struct  gtsam::PreintegratedRotationParams
 Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the constructor. More...
class  gtsam::PreintegratedAhrsMeasurements
 PreintegratedAHRSMeasurements accumulates (integrates) the Gyroscope measurements (rotation rates) and the corresponding covariance matrix. More...
 
class  gtsam::PreintegratedRotation
 PreintegratedRotation is the base class for all PreintegratedMeasurements classes (in AHRSFactor, ImuFactor, and CombinedImuFactor). More...
 
struct  gtsam::traits< PreintegratedRotation >
class  gtsam::AHRSFactor
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Luca Carlone
\n-
\n-Stephen Williams
\n-
\n-Richard Roberts
\n-
\n-Vadim Indelman
\n+
Author
Krunal Chande
\n
\n-David Jensen
\n+Luca Carlone \n
\n Frank Dellaert
\n+
Date
July 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,36 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-PreintegratedRotation.h File Reference\n+AHRSFactor.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-\u00a0 Parameters for pre-integration: Usage: Create just a single Params and\n- pass a shared pointer to the constructor. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+ PreintegratedAHRSMeasurements accumulates (integrates) the Gyroscope\n+\u00a0 measurements (rotation rates) and the corresponding covariance matrix.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n- _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn is the base class for all\n-\u00a0 PreintegratedMeasurements classes (in _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br, _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br, and\n- _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br). _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n+ Krunal Chande\n Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n Frank Dellaert\n+ Date\n+ July 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00986.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00986.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,4 @@\n var a00986 = [\n- [\"gtsam::PreintegratedRotationParams\", \"a04204.html\", \"a04204\"],\n- [\"gtsam::PreintegratedRotation\", \"a04208.html\", \"a04208\"],\n- [\"gtsam::traits< PreintegratedRotation >\", \"a04212.html\", null]\n+ [\"gtsam::PreintegratedAhrsMeasurements\", \"a04072.html\", \"a04072\"],\n+ [\"gtsam::AHRSFactor\", \"a04076.html\", \"a04076\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00986_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00986_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegratedRotation.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,203 +98,217 @@\n
No Matches
\n \n \n \n \n \n
\n-
PreintegratedRotation.h
\n+
AHRSFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
22#pragma once
\n-
23
\n-\n-
25#include <gtsam/base/Matrix.h>
\n+
20#pragma once
\n+
21
\n+
22/* GTSAM includes */
\n+\n+\n+\n
26
\n
27namespace gtsam {
\n
28
\n-
\n-
31struct GTSAM_EXPORT PreintegratedRotationParams {
\n-\n-
35 boost::optional<Vector3> omegaCoriolis;
\n-
36 boost::optional<Pose3> body_P_sensor;
\n+
\n+\n+
35
\n+
36 protected:
\n
37
\n-
38 PreintegratedRotationParams() : gyroscopeCovariance(I_3x3) {}
\n-
39
\n-
40 PreintegratedRotationParams(const Matrix3& gyroscope_covariance,
\n-
41 boost::optional<Vector3> omega_coriolis)
\n-
42 : gyroscopeCovariance(gyroscope_covariance) {
\n-
43 if (omega_coriolis)
\n-
44 omegaCoriolis.reset(omega_coriolis.get());
\n-
45 }
\n-
46
\n-
47 virtual ~PreintegratedRotationParams() {}
\n-
48
\n-
49 virtual void print(const std::string& s) const;
\n-
50 virtual bool equals(const PreintegratedRotationParams& other, double tol=1e-9) const;
\n-
51
\n-
52 void setGyroscopeCovariance(const Matrix3& cov) { gyroscopeCovariance = cov; }
\n-
53 void setOmegaCoriolis(const Vector3& omega) { omegaCoriolis.reset(omega); }
\n-
54 void setBodyPSensor(const Pose3& pose) { body_P_sensor.reset(pose); }
\n-
55
\n-
56 const Matrix3& getGyroscopeCovariance() const { return gyroscopeCovariance; }
\n-
57 boost::optional<Vector3> getOmegaCoriolis() const { return omegaCoriolis; }
\n-
58 boost::optional<Pose3> getBodyPSensor() const { return body_P_sensor; }
\n-
59
\n-
60 private:
\n-
62 friend class boost::serialization::access;
\n-
63 template<class ARCHIVE>
\n-
64 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
65 namespace bs = ::boost::serialization;
\n-
66 ar & BOOST_SERIALIZATION_NVP(gyroscopeCovariance);
\n-
67 ar & BOOST_SERIALIZATION_NVP(body_P_sensor);
\n-
68
\n-
69 // Provide support for Eigen::Matrix in boost::optional
\n-
70 bool omegaCoriolisFlag = omegaCoriolis.is_initialized();
\n-
71 ar & boost::serialization::make_nvp("omegaCoriolisFlag", omegaCoriolisFlag);
\n-
72 if (omegaCoriolisFlag) {
\n-
73 ar & BOOST_SERIALIZATION_NVP(*omegaCoriolis);
\n-
74 }
\n-
75 }
\n-
76
\n-
77#ifdef GTSAM_USE_QUATERNIONS
\n-
78 // Align if we are using Quaternions
\n-
79public:
\n-\n-
81#endif
\n-
82};
\n-
\n-
83
\n-
\n-
89class GTSAM_EXPORT PreintegratedRotation {
\n-
90 public:
\n-\n-
92
\n-
93 protected:
\n-
95 boost::shared_ptr<Params> p_;
\n-
96
\n-
97 double deltaTij_;
\n-\n-\n-
100
\n-\n-
103
\n-
104 public:
\n-
107
\n-
\n-
109 explicit PreintegratedRotation(const boost::shared_ptr<Params>& p) : p_(p) {
\n-
110 resetIntegration();
\n-
111 }
\n-
\n-
112
\n-
\n-
114 PreintegratedRotation(const boost::shared_ptr<Params>& p,
\n-
115 double deltaTij, const Rot3& deltaRij,
\n-
116 const Matrix3& delRdelBiasOmega)
\n-
117 : p_(p), deltaTij_(deltaTij), deltaRij_(deltaRij), delRdelBiasOmega_(delRdelBiasOmega) {}
\n+
38 Vector3 biasHat_;
\n+\n+
40
\n+
41 friend class AHRSFactor;
\n+
42
\n+
43 public:
\n+
44
\n+\n+
47
\n+
\n+
52 PreintegratedAhrsMeasurements(const boost::shared_ptr<Params>& p,
\n+
53 const Vector3& biasHat) :
\n+
54 PreintegratedRotation(p), biasHat_(biasHat) {
\n+
55 resetIntegration();
\n+
56 }
\n+
\n+
57
\n+
\n+\n+
68 const boost::shared_ptr<Params>& p,
\n+
69 const Vector3& bias_hat,
\n+
70 double deltaTij,
\n+
71 const Rot3& deltaRij,
\n+
72 const Matrix3& delRdelBiasOmega,
\n+
73 const Matrix3& preint_meas_cov) :
\n+
74 PreintegratedRotation(p, deltaTij, deltaRij, delRdelBiasOmega),
\n+
75 biasHat_(bias_hat),
\n+
76 preintMeasCov_(preint_meas_cov) {}
\n+
\n+
77
\n+
78 Params& p() const { return *boost::static_pointer_cast<Params>(p_);}
\n+
79 const Vector3& biasHat() const { return biasHat_; }
\n+
80 const Matrix3& preintMeasCov() const { return preintMeasCov_; }
\n+
81
\n+
83 void print(const std::string& s = "Preintegrated Measurements: ") const;
\n+
84
\n+
86 bool equals(const PreintegratedAhrsMeasurements&, double tol = 1e-9) const;
\n+
87
\n+
89 void resetIntegration();
\n+
90
\n+
100 void integrateMeasurement(const Vector3& measuredOmega, double deltaT);
\n+
101
\n+
104 Vector3 predict(const Vector3& bias, OptionalJacobian<3,3> H = boost::none) const;
\n+
105
\n+
106 // This function is only used for test purposes
\n+
107 // (compare numerical derivatives wrt analytic ones)
\n+
108 static Vector DeltaAngles(const Vector& msr_gyro_t, const double msr_dt,
\n+
109 const Vector3& delta_angles);
\n+
110
\n+
\n+
112 PreintegratedAhrsMeasurements(const Vector3& biasHat,
\n+
113 const Matrix3& measuredOmegaCovariance)
\n+
114 : PreintegratedRotation(boost::make_shared<Params>()), biasHat_(biasHat) {
\n+
115 p_->gyroscopeCovariance = measuredOmegaCovariance;
\n+
116 resetIntegration();
\n+
117 }
\n
\n
118
\n+
119private:
\n
120
\n-
123
\n-
125 void resetIntegration();
\n-
126
\n-
\n-
128 bool matchesParamsWith(const PreintegratedRotation& other) const {
\n-
129 return p_ == other.p_;
\n-
130 }
\n-
\n+
122 friend class boost::serialization::access;
\n+
123 template<class ARCHIVE>
\n+
124 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
125 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegratedRotation);
\n+
126 ar & BOOST_SERIALIZATION_NVP(p_);
\n+
127 ar & BOOST_SERIALIZATION_NVP(biasHat_);
\n+
128 }
\n+
129};
\n+
\n+
130
\n+
\n+
131class GTSAM_EXPORT AHRSFactor: public NoiseModelFactorN<Rot3, Rot3, Vector3> {
\n
132
\n-
135 const boost::shared_ptr<Params>& params() const {
\n-
136 return p_;
\n-
137 }
\n-
138 const double& deltaTij() const {
\n-
139 return deltaTij_;
\n-
140 }
\n-
141 const Rot3& deltaRij() const {
\n-
142 return deltaRij_;
\n-
143 }
\n-
144 const Matrix3& delRdelBiasOmega() const {
\n-
145 return delRdelBiasOmega_;
\n-
146 }
\n-
148
\n-
151 void print(const std::string& s) const;
\n-
152 bool equals(const PreintegratedRotation& other, double tol) const;
\n-
154
\n-
157
\n-
161 Rot3 incrementalRotation(const Vector3& measuredOmega, const Vector3& biasHat, double deltaT,
\n-
162 OptionalJacobian<3, 3> D_incrR_integratedOmega) const;
\n-
163
\n-
166 void integrateMeasurement(const Vector3& measuredOmega, const Vector3& biasHat, double deltaT,
\n-
167 OptionalJacobian<3, 3> D_incrR_integratedOmega = boost::none,
\n-
168 OptionalJacobian<3, 3> F = boost::none);
\n+
133 typedef AHRSFactor This;
\n+\n+
135
\n+\n+
137
\n+
139 AHRSFactor() {}
\n+
140
\n+
141public:
\n+
142
\n+
144#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5
\n+
145 typedef typename boost::shared_ptr<AHRSFactor> shared_ptr;
\n+
146#else
\n+
147 typedef boost::shared_ptr<AHRSFactor> shared_ptr;
\n+
148#endif
\n+
149
\n+
157 AHRSFactor(Key rot_i, Key rot_j, Key bias,
\n+
158 const PreintegratedAhrsMeasurements& preintegratedMeasurements);
\n+
159
\n+
160 ~AHRSFactor() override {
\n+
161 }
\n+
162
\n+
164 gtsam::NonlinearFactor::shared_ptr clone() const override;
\n+
165
\n+
167 void print(const std::string& s, const KeyFormatter& keyFormatter =
\n+
168 DefaultKeyFormatter) const override;
\n
169
\n-
171 Rot3 biascorrectedDeltaRij(const Vector3& biasOmegaIncr,
\n-
172 OptionalJacobian<3, 3> H = boost::none) const;
\n-
173
\n-
175 Vector3 integrateCoriolis(const Rot3& rot_i) const;
\n-
176
\n-
178
\n-
179 private:
\n-
181 friend class boost::serialization::access;
\n-
182 template <class ARCHIVE>
\n-
183 void serialize(ARCHIVE& ar, const unsigned int /*version*/) { // NOLINT
\n-
184 ar& BOOST_SERIALIZATION_NVP(p_);
\n-
185 ar& BOOST_SERIALIZATION_NVP(deltaTij_);
\n-
186 ar& BOOST_SERIALIZATION_NVP(deltaRij_);
\n-
187 ar& BOOST_SERIALIZATION_NVP(delRdelBiasOmega_);
\n-
188 }
\n-
189
\n-
190#ifdef GTSAM_USE_QUATERNIONS
\n-
191 // Align if we are using Quaternions
\n-
192 public:
\n-\n-
194#endif
\n-
195};
\n-
\n+
171 bool equals(const NonlinearFactor&, double tol = 1e-9) const override;
\n+
172
\n+
\n+\n+
175 return _PIM_;
\n+
176 }
\n+
\n+
177
\n+
181 Vector evaluateError(const Rot3& rot_i, const Rot3& rot_j,
\n+
182 const Vector3& bias, boost::optional<Matrix&> H1 = boost::none,
\n+
183 boost::optional<Matrix&> H2 = boost::none, boost::optional<Matrix&> H3 =
\n+
184 boost::none) const override;
\n+
185
\n+
188 static Rot3 Predict(const Rot3& rot_i, const Vector3& bias,
\n+\n+
190
\n+
192 AHRSFactor(Key rot_i, Key rot_j, Key bias,
\n+\n+
194 const Vector3& omegaCoriolis,
\n+
195 const boost::optional<Pose3>& body_P_sensor = boost::none);
\n
196
\n-
197template <>
\n-
198struct traits<PreintegratedRotation> : public Testable<PreintegratedRotation> {};
\n-
199
\n-
200}
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
3D Pose
\n+
198 static Rot3 predict(
\n+
199 const Rot3& rot_i, const Vector3& bias,
\n+
200 const PreintegratedAhrsMeasurements& pim, const Vector3& omegaCoriolis,
\n+
201 const boost::optional<Pose3>& body_P_sensor = boost::none);
\n+
202
\n+
203#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
205 typedef PreintegratedAhrsMeasurements PreintegratedMeasurements;
\n+
206
\n+
207#endif
\n+
208
\n+
209private:
\n+
210
\n+
212 friend class boost::serialization::access;
\n+
213 template<class ARCHIVE>
\n+
214 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
215 // NoiseModelFactor3 instead of NoiseModelFactorN for backward compatibility
\n+
216 ar
\n+
217 & boost::serialization::make_nvp("NoiseModelFactor3",
\n+
218 boost::serialization::base_object<Base>(*this));
\n+
219 ar & BOOST_SERIALIZATION_NVP(_PIM_);
\n+
220 }
\n+
221
\n+
222};
\n+
\n+
223// AHRSFactor
\n+
224
\n+
225} //namespace gtsam
\n+
3D Pose
\n+\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > make_shared(Args &&... args)
Add our own make_shared as a layer of wrapping on boost::make_shared This solves the problem with the...
Definition make_shared.h:57
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
PreintegratedAHRSMeasurements accumulates (integrates) the Gyroscope measurements (rotation rates) an...
Definition AHRSFactor.h:34
\n+
Vector3 biasHat_
Angular rate bias values used during preintegration.
Definition AHRSFactor.h:38
\n+
PreintegratedAhrsMeasurements(const Vector3 &biasHat, const Matrix3 &measuredOmegaCovariance)
Definition AHRSFactor.h:112
\n+
PreintegratedAhrsMeasurements(const boost::shared_ptr< Params > &p, const Vector3 &biasHat)
Default constructor, initialize with no measurements.
Definition AHRSFactor.h:52
\n+
Matrix3 preintMeasCov_
Covariance matrix of the preintegrated measurements (first-order propagation from measurementCovarian...
Definition AHRSFactor.h:39
\n+
PreintegratedAhrsMeasurements(const boost::shared_ptr< Params > &p, const Vector3 &bias_hat, double deltaTij, const Rot3 &deltaRij, const Matrix3 &delRdelBiasOmega, const Matrix3 &preint_meas_cov)
Non-Default constructor, initialize with measurements.
Definition AHRSFactor.h:67
\n+
PreintegratedAhrsMeasurements()
Default constructor, only for serialization and wrappers.
Definition AHRSFactor.h:46
\n+
Definition AHRSFactor.h:131
\n+
const PreintegratedAhrsMeasurements & preintegratedMeasurements() const
Access the preintegrated measurements.
Definition AHRSFactor.h:174
\n+
boost::shared_ptr< AHRSFactor > shared_ptr
Shorthand for a smart pointer to a factor.
Definition AHRSFactor.h:147
\n
Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the c...
Definition PreintegratedRotation.h:31
\n-
boost::optional< Pose3 > body_P_sensor
The pose of the sensor in the body frame.
Definition PreintegratedRotation.h:36
\n-
boost::optional< Vector3 > omegaCoriolis
Coriolis constant.
Definition PreintegratedRotation.h:35
\n-
Matrix3 gyroscopeCovariance
Continuous-time "Covariance" of gyroscope measurements The units for stddev are \u03c3 = rad/s/\u221aHz.
Definition PreintegratedRotation.h:34
\n
PreintegratedRotation is the base class for all PreintegratedMeasurements classes (in AHRSFactor,...
Definition PreintegratedRotation.h:89
\n-
Matrix3 delRdelBiasOmega_
Jacobian of preintegrated rotation w.r.t. angular rate bias.
Definition PreintegratedRotation.h:99
\n-
boost::shared_ptr< Params > p_
Parameters.
Definition PreintegratedRotation.h:95
\n-
PreintegratedRotation(const boost::shared_ptr< Params > &p, double deltaTij, const Rot3 &deltaRij, const Matrix3 &delRdelBiasOmega)
Explicit initialization of all class members.
Definition PreintegratedRotation.h:114
\n-
PreintegratedRotation(const boost::shared_ptr< Params > &p)
Default constructor, resets integration to zero.
Definition PreintegratedRotation.h:109
\n-
double deltaTij_
Time interval from i to j.
Definition PreintegratedRotation.h:97
\n-
bool matchesParamsWith(const PreintegratedRotation &other) const
check parameters equality: checks whether shared pointer points to same Params object.
Definition PreintegratedRotation.h:128
\n-
PreintegratedRotation()
Default constructor for serialization.
Definition PreintegratedRotation.h:102
\n-
Rot3 deltaRij_
Preintegrated relative orientation (in frame i)
Definition PreintegratedRotation.h:98
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,253 +1,267 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PreintegratedRotation.h\n+AHRSFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-22#pragma once\n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+20#pragma once\n+21\n+22/* GTSAM includes */\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n 26\n 27namespace _\bg_\bt_\bs_\ba_\bm {\n 28\n-_\b3_\b1struct GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs {\n-_\b3_\b4 Matrix3 _\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be;\n-_\b3_\b5 boost::optional _\bo_\bm_\be_\bg_\ba_\bC_\bo_\br_\bi_\bo_\bl_\bi_\bs;\n-_\b3_\b6 boost::optional _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br;\n+_\b3_\b4class GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs : public\n+_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn {\n+35\n+36 protected:\n 37\n-38 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs() : gyroscopeCovariance(I_3x3) {}\n-39\n-40 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs(const Matrix3& gyroscope_covariance,\n-41 boost::optional omega_coriolis)\n-42 : gyroscopeCovariance(gyroscope_covariance) {\n-43 if (omega_coriolis)\n-44 omegaCoriolis.reset(omega_coriolis.get());\n-45 }\n-46\n-47 virtual ~PreintegratedRotationParams() {}\n-48\n-49 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s) const;\n-50 virtual bool equals(const PreintegratedRotationParams& other, double tol=1e-\n-9) const;\n-51\n-52 void setGyroscopeCovariance(const Matrix3& cov) { gyroscopeCovariance = cov;\n-}\n-53 void setOmegaCoriolis(const Vector3& omega) { omegaCoriolis.reset(omega); }\n-54 void setBodyPSensor(const Pose3& pose) { body_P_sensor.reset(pose); }\n-55\n-56 const Matrix3& getGyroscopeCovariance() const { return gyroscopeCovariance;\n-}\n-57 boost::optional getOmegaCoriolis() const { return omegaCoriolis; }\n-58 boost::optional getBodyPSensor() const { return body_P_sensor; }\n-59\n-60 private:\n-_\b6_\b2 friend class boost::serialization::access;\n-63 template\n-64 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-65 namespace bs = ::boost::serialization;\n-66 ar & BOOST_SERIALIZATION_NVP(gyroscopeCovariance);\n-67 ar & BOOST_SERIALIZATION_NVP(body_P_sensor);\n-68\n-69 // Provide support for Eigen::Matrix in boost::optional\n-70 bool omegaCoriolisFlag = omegaCoriolis.is_initialized();\n-71 ar & boost::serialization::make_nvp(\"omegaCoriolisFlag\", omegaCoriolisFlag);\n-72 if (omegaCoriolisFlag) {\n-73 ar & BOOST_SERIALIZATION_NVP(*omegaCoriolis);\n-74 }\n-75 }\n-76\n-77#ifdef GTSAM_USE_QUATERNIONS\n-78 // Align if we are using Quaternions\n-79public:\n-80 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-81#endif\n-82};\n-83\n-_\b8_\b9class GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn {\n-90 public:\n-91 typedef _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs _\bP_\ba_\br_\ba_\bm_\bs;\n-92\n-93 protected:\n-_\b9_\b5 boost::shared_ptr _\bp_\b_;\n-96\n-_\b9_\b7 double _\bd_\be_\bl_\bt_\ba_\bT_\bi_\bj_\b_;\n-_\b9_\b8 _\bR_\bo_\bt_\b3 _\bd_\be_\bl_\bt_\ba_\bR_\bi_\bj_\b_;\n-_\b9_\b9 Matrix3 _\bd_\be_\bl_\bR_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_;\n-100\n-_\b1_\b0_\b2 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn() {}\n-103\n-104 public:\n-107\n-_\b1_\b0_\b9 explicit _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn(const boost::shared_ptr& p) : p_(p)\n-{\n-110 resetIntegration();\n-111 }\n-112\n-_\b1_\b1_\b4 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn(const boost::shared_ptr& p,\n-115 double deltaTij, const _\bR_\bo_\bt_\b3& deltaRij,\n-116 const Matrix3& delRdelBiasOmega)\n-117 : p_(p), deltaTij_(deltaTij), deltaRij_(deltaRij), delRdelBiasOmega_\n-(delRdelBiasOmega) {}\n+_\b3_\b8 Vector3 _\bb_\bi_\ba_\bs_\bH_\ba_\bt_\b_;\n+_\b3_\b9 Matrix3 _\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv_\b_;\n+40\n+41 friend class _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br;\n+42\n+43 public:\n+44\n+_\b4_\b6 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() {}\n+47\n+_\b5_\b2 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const boost::shared_ptr& p,\n+53 const Vector3& biasHat) :\n+54 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn(p), biasHat_(biasHat) {\n+55 resetIntegration();\n+56 }\n+57\n+_\b6_\b7 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n+68 const boost::shared_ptr& p,\n+69 const Vector3& bias_hat,\n+70 double deltaTij,\n+71 const _\bR_\bo_\bt_\b3& deltaRij,\n+72 const Matrix3& delRdelBiasOmega,\n+73 const Matrix3& preint_meas_cov) :\n+74 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn(p, deltaTij, deltaRij, delRdelBiasOmega),\n+75 biasHat_(bias_hat),\n+76 preintMeasCov_(preint_meas_cov) {}\n+77\n+78 Params& p() const { return *boost::static_pointer_cast(p_);}\n+79 const Vector3& biasHat() const { return biasHat_; }\n+80 const Matrix3& preintMeasCov() const { return preintMeasCov_; }\n+81\n+83 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"Preintegrated Measurements: \") const;\n+84\n+86 bool equals(const PreintegratedAhrsMeasurements&, double tol = 1e-9) const;\n+87\n+89 void resetIntegration();\n+90\n+100 void integrateMeasurement(const Vector3& measuredOmega, double deltaT);\n+101\n+104 Vector3 predict(const Vector3& bias, OptionalJacobian<3,3> H = boost::none)\n+const;\n+105\n+106 // This function is only used for test purposes\n+107 // (compare numerical derivatives wrt analytic ones)\n+108 static Vector DeltaAngles(const Vector& msr_gyro_t, const double msr_dt,\n+109 const Vector3& delta_angles);\n+110\n+_\b1_\b1_\b2 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const Vector3& biasHat,\n+113 const Matrix3& measuredOmegaCovariance)\n+114 : _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn(boost::_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd<_\bP_\ba_\br_\ba_\bm_\bs>()), biasHat_(biasHat) {\n+115 p_->gyroscopeCovariance = measuredOmegaCovariance;\n+116 resetIntegration();\n+117 }\n 118\n+119private:\n 120\n-123\n-125 void resetIntegration();\n-126\n-_\b1_\b2_\b8 bool _\bm_\ba_\bt_\bc_\bh_\be_\bs_\bP_\ba_\br_\ba_\bm_\bs_\bW_\bi_\bt_\bh(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn& other) const {\n-129 return p_ == other._\bp_\b_;\n-130 }\n+_\b1_\b2_\b2 friend class boost::serialization::access;\n+123 template\n+124 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+125 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn);\n+126 ar & BOOST_SERIALIZATION_NVP(p_);\n+127 ar & BOOST_SERIALIZATION_NVP(biasHat_);\n+128 }\n+129};\n+130\n+_\b1_\b3_\b1class GTSAM_EXPORT _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+{\n 132\n-135 const boost::shared_ptr& params() const {\n-136 return p_;\n-137 }\n-138 const double& deltaTij() const {\n-139 return deltaTij_;\n-140 }\n-141 const Rot3& deltaRij() const {\n-142 return deltaRij_;\n-143 }\n-144 const Matrix3& delRdelBiasOmega() const {\n-145 return delRdelBiasOmega_;\n-146 }\n-148\n-151 void _\bp_\br_\bi_\bn_\bt(const std::string& s) const;\n-152 bool equals(const PreintegratedRotation& other, double tol) const;\n-154\n-157\n-161 Rot3 incrementalRotation(const Vector3& measuredOmega, const Vector3&\n-biasHat, double deltaT,\n-162 OptionalJacobian<3, 3> D_incrR_integratedOmega) const;\n-163\n-166 void integrateMeasurement(const Vector3& measuredOmega, const Vector3&\n-biasHat, double deltaT,\n-167 OptionalJacobian<3, 3> D_incrR_integratedOmega = boost::none,\n-168 OptionalJacobian<3, 3> F = boost::none);\n+133 typedef _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+134 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bR_\bo_\bt_\b3_\b,_\b _\bR_\bo_\bt_\b3_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b3_\b> _\bB_\ba_\bs_\be;\n+135\n+136 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs _PIM_;\n+137\n+139 _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br() {}\n+140\n+141public:\n+142\n+144#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5\n+145 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+146#else\n+_\b1_\b4_\b7 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+148#endif\n+149\n+157 _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by rot_i, _\bK_\be_\by rot_j, _\bK_\be_\by bias,\n+158 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& preintegratedMeasurements);\n+159\n+160 _\b~_\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br() override {\n+161 }\n+162\n+164 gtsam::NonlinearFactor::shared_ptr clone() const override;\n+165\n+167 void _\bp_\br_\bi_\bn_\bt(const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+168 DefaultKeyFormatter) const override;\n 169\n-171 Rot3 biascorrectedDeltaRij(const Vector3& biasOmegaIncr,\n-172 OptionalJacobian<3, 3> H = boost::none) const;\n-173\n-175 Vector3 integrateCoriolis(const Rot3& rot_i) const;\n-176\n-178\n-179 private:\n-_\b1_\b8_\b1 friend class boost::serialization::access;\n-182 template \n-183 void serialize(ARCHIVE& ar, const unsigned int /*version*/) { // NOLINT\n-184 ar& BOOST_SERIALIZATION_NVP(p_);\n-185 ar& BOOST_SERIALIZATION_NVP(deltaTij_);\n-186 ar& BOOST_SERIALIZATION_NVP(deltaRij_);\n-187 ar& BOOST_SERIALIZATION_NVP(delRdelBiasOmega_);\n-188 }\n-189\n-190#ifdef GTSAM_USE_QUATERNIONS\n-191 // Align if we are using Quaternions\n-192 public:\n-193 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-194#endif\n-195};\n+171 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br&, double tol = 1e-9) const override;\n+172\n+_\b1_\b7_\b4 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const {\n+175 return _PIM_;\n+176 }\n+177\n+181 Vector evaluateError(const _\bR_\bo_\bt_\b3& rot_i, const _\bR_\bo_\bt_\b3& rot_j,\n+182 const Vector3& bias, boost::optional H1 = boost::none,\n+183 boost::optional H2 = boost::none, boost::optional H3 =\n+184 boost::none) const override;\n+185\n+188 static _\bR_\bo_\bt_\b3 Predict(const _\bR_\bo_\bt_\b3& rot_i, const Vector3& bias,\n+189 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim);\n+190\n+192 _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by rot_i, _\bK_\be_\by rot_j, _\bK_\be_\by bias,\n+193 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim,\n+194 const Vector3& omegaCoriolis,\n+195 const boost::optional& body_P_sensor = boost::none);\n 196\n-197template <>\n-_\b1_\b9_\b8struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn> : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-199\n-200}\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+198 static _\bR_\bo_\bt_\b3 predict(\n+199 const _\bR_\bo_\bt_\b3& rot_i, const Vector3& bias,\n+200 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim, const Vector3& omegaCoriolis,\n+201 const boost::optional& body_P_sensor = boost::none);\n+202\n+203#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+205 typedef _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs PreintegratedMeasurements;\n+206\n+207#endif\n+208\n+209private:\n+210\n+_\b2_\b1_\b2 friend class boost::serialization::access;\n+213 template\n+214 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+215 // NoiseModelFactor3 instead of NoiseModelFactorN for backward\n+compatibility\n+216 ar\n+217 & boost::serialization::make_nvp(\"NoiseModelFactor3\",\n+218 boost::serialization::base_object(*this));\n+219 ar & BOOST_SERIALIZATION_NVP(_PIM_);\n+220 }\n+221\n+222};\n+223// AHRSFactor\n+224\n+225} //namespace gtsam\n _\bP_\bo_\bs_\be_\b3_\b._\bh\n 3D Pose\n+_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd\n+gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::\n+shared_ptr< T > > make_shared(Args &&... args)\n+Add our own make_shared as a layer of wrapping on boost::make_shared This\n+solves the problem with the...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn make_shared.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n symbol GTSAM_USE_QUATERNIO...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedAHRSMeasurements accumulates (integrates) the Gyroscope\n+measurements (rotation rates) an...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bb_\bi_\ba_\bs_\bH_\ba_\bt_\b_\n+Vector3 biasHat_\n+Angular rate bias values used during preintegration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedAhrsMeasurements(const Vector3 &biasHat, const Matrix3\n+&measuredOmegaCovariance)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:112\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedAhrsMeasurements(const boost::shared_ptr< Params > &p, const\n+Vector3 &biasHat)\n+Default constructor, initialize with no measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv_\b_\n+Matrix3 preintMeasCov_\n+Covariance matrix of the preintegrated measurements (first-order propagation\n+from measurementCovarian...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedAhrsMeasurements(const boost::shared_ptr< Params > &p, const\n+Vector3 &bias_hat, double deltaTij, const Rot3 &deltaRij, const Matrix3\n+&delRdelBiasOmega, const Matrix3 &preint_meas_cov)\n+Non-Default constructor, initialize with measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedAhrsMeasurements()\n+Default constructor, only for serialization and wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+const PreintegratedAhrsMeasurements & preintegratedMeasurements() const\n+Access the preintegrated measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< AHRSFactor > shared_ptr\n+Shorthand for a smart pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:147\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n Parameters for pre-integration: Usage: Create just a single Params and pass a\n shared pointer to the c...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br\n-boost::optional< Pose3 > body_P_sensor\n-The pose of the sensor in the body frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bo_\bm_\be_\bg_\ba_\bC_\bo_\br_\bi_\bo_\bl_\bi_\bs\n-boost::optional< Vector3 > omegaCoriolis\n-Coriolis constant.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n-Matrix3 gyroscopeCovariance\n-Continuous-time \"Covariance\" of gyroscope measurements The units for stddev are\n-\u00cf\u0083 = rad/s/\u00e2\u0088\u009aHz.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:34\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n PreintegratedRotation is the base class for all PreintegratedMeasurements\n classes (in AHRSFactor,...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\bl_\bR_\bd_\be_\bl_\bB_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\b_\n-Matrix3 delRdelBiasOmega_\n-Jacobian of preintegrated rotation w.r.t. angular rate bias.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bp_\b_\n-boost::shared_ptr< Params > p_\n-Parameters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-PreintegratedRotation(const boost::shared_ptr< Params > &p, double deltaTij,\n-const Rot3 &deltaRij, const Matrix3 &delRdelBiasOmega)\n-Explicit initialization of all class members.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-PreintegratedRotation(const boost::shared_ptr< Params > &p)\n-Default constructor, resets integration to zero.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bT_\bi_\bj_\b_\n-double deltaTij_\n-Time interval from i to j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bm_\ba_\bt_\bc_\bh_\be_\bs_\bP_\ba_\br_\ba_\bm_\bs_\bW_\bi_\bt_\bh\n-bool matchesParamsWith(const PreintegratedRotation &other) const\n-check parameters equality: checks whether shared pointer points to same Params\n-object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-PreintegratedRotation()\n-Default constructor for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bR_\bi_\bj_\b_\n-Rot3 deltaRij_\n-Preintegrated relative orientation (in frame i)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00989.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00989.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegratedRotation.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,43 +94,41 @@\n \n \n \n \n \n
\n \n-
ImuBias.cpp File Reference
\n+Namespaces
\n+
PreintegratedRotation.cpp File Reference
\n \n
\n \n \n \n \n \n-\n-\n-\n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
namespace  gtsam::imuBias
 All bias models live in the imuBias namespace.
 
\n-\n-\n-\n-\n

\n-Functions

\n-std::ostream & gtsam::imuBias::operator<< (std::ostream &os, const ConstantBias &bias)
 ostream operator
 
\n

Detailed Description

\n-
Date
Feb 2, 2012
\n-
Author
Vadim Indelman, Stephen Williams
\n+
Author
Luca Carlone
\n+
\n+Stephen Williams
\n+
\n+Richard Roberts
\n+
\n+Vadim Indelman
\n+
\n+David Jensen
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-ImuBias.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+PreintegratedRotation.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs\n-\u00a0 All bias models live in the _\bi_\bm_\bu_\bB_\bi_\ba_\bs namespace.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bim\bmu\buB\bBi\bia\bas\bs:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const\n- _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs &bias)\n-\u00a0 ostream operator\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Feb 2, 2012\n Author\n- Vadim Indelman, Stephen Williams\n+ Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bc_\bp_\bp\n+ * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00992.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00992.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/BarometricFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,45 @@\n \n \n \n \n \n
\n \n-
ImuFactor.cpp File Reference
\n+Classes |\n+Namespaces
\n+
BarometricFactor.h File Reference
\n \n
\n+\n+

Header file for Barometric factor. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::BarometricFactor
 Prior on height in a cartesian frame. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n

\n-Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const ImuFactor &f)
 
\n-std::ostream & gtsam::operator<< (std::ostream &os, const ImuFactor2 &f)
 
\n

Detailed Description

\n-
Author
Luca Carlone
\n-
\n-Stephen Williams
\n-
\n-Richard Roberts
\n-
\n-Vadim Indelman
\n-
\n-David Jensen
\n-
\n-Frank Dellaert
\n+

Header file for Barometric factor.

\n+
Author
Peter Milani
\n+
Date
December 16, 2021
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-ImuFactor.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+BarometricFactor.h File Reference\n+Header file for Barometric factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Prior on height in a cartesian frame. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br &f)\n-\u00a0\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2 &f)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Header file for Barometric factor.\n Author\n- Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n- Frank Dellaert\n+ Peter Milani\n+ Date\n+ December 16, 2021\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00995.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00995.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ScenarioRunner.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,43 +96,52 @@\n \n \n \n
\n \n-
ScenarioRunner.h File Reference
\n+
MagFactor.h File Reference
\n
\n
\n \n-

Simple class to test navigation scenarios. \n+

Factors involving magnetometers. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n \n-\n+\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::ScenarioRunner
class  gtsam::MagFactor
 Factor to estimate rotation given magnetometer reading This version uses model measured bM = scale * bRn * direction + bias and assumes scale, direction, and the bias are given. More...
 
class  gtsam::CombinedScenarioRunner
class  gtsam::MagFactor1
 Factor to estimate rotation given magnetometer reading This version uses model measured bM = scale * bRn * direction + bias and assumes scale, direction, and the bias are given. More...
 
class  gtsam::MagFactor2
 Factor to calibrate local Earth magnetic field as well as magnetometer bias This version uses model measured bM = bRn * nM + bias and optimizes for both nM and the bias, where nM is in units defined by magnetometer. More...
 
class  gtsam::MagFactor3
 Factor to calibrate local Earth magnetic field as well as magnetometer bias This version uses model measured bM = scale * bRn * direction + bias and optimizes for both scale, direction, and the bias. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Simple class to test navigation scenarios.

\n+

Factors involving magnetometers.

\n
Author
Frank Dellaert
\n+
Date
January 29, 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,45 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ScenarioRunner.h File Reference\n-Simple class to test navigation scenarios. _\bM_\bo_\br_\be_\b._\b._\b.\n+MagFactor.h File Reference\n+Factors involving magnetometers. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br\n+ _\bF_\ba_\bc_\bt_\bo_\br to estimate rotation given magnetometer reading This version\n+\u00a0 uses model measured bM = scale * bRn * direction + bias and assumes\n+ scale, direction, and the bias are given. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1\n+ _\bF_\ba_\bc_\bt_\bo_\br to estimate rotation given magnetometer reading This version\n+\u00a0 uses model measured bM = scale * bRn * direction + bias and assumes\n+ scale, direction, and the bias are given. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+ _\bF_\ba_\bc_\bt_\bo_\br to calibrate local Earth magnetic field as well as magnetometer\n+\u00a0 bias This version uses model measured bM = bRn * nM + bias and\n+ optimizes for both nM and the bias, where nM is in units defined by\n+ magnetometer. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3\n+ _\bF_\ba_\bc_\bt_\bo_\br to calibrate local Earth magnetic field as well as magnetometer\n+\u00a0 bias This version uses model measured bM = scale * bRn * direction +\n+ bias and optimizes for both scale, direction, and the bias. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Simple class to test navigation scenarios.\n+Factors involving magnetometers.\n Author\n Frank Dellaert\n+ Date\n+ January 29, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br_\b._\bh\n+ * _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00995.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00995.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,6 @@\n var a00995 = [\n- [\"gtsam::ScenarioRunner\", \"a04236.html\", \"a04236\"],\n- [\"gtsam::CombinedScenarioRunner\", \"a04240.html\", \"a04240\"]\n+ [\"gtsam::MagFactor\", \"a04172.html\", \"a04172\"],\n+ [\"gtsam::MagFactor1\", \"a04176.html\", \"a04176\"],\n+ [\"gtsam::MagFactor2\", \"a04180.html\", \"a04180\"],\n+ [\"gtsam::MagFactor3\", \"a04184.html\", \"a04184\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00995_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00995_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ScenarioRunner.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,177 +98,241 @@\n
No Matches
\n \n \n \n \n \n
\n-
ScenarioRunner.h
\n+
MagFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-\n-\n-\n-\n-
23
\n-
24namespace gtsam {
\n-
25
\n-
26// Convert covariance to diagonal noise model, if possible, otherwise throw
\n-
27static noiseModel::Diagonal::shared_ptr Diagonal(const Matrix& covariance) {
\n-
28 bool smart = true;
\n-
29 auto model = noiseModel::Gaussian::Covariance(covariance, smart);
\n-
30 auto diagonal = boost::dynamic_pointer_cast<noiseModel::Diagonal>(model);
\n-
31 if (!diagonal)
\n-
32 throw std::invalid_argument("ScenarioRunner::Diagonal: not a diagonal");
\n-
33 return diagonal;
\n-
34}
\n-
35
\n-
36/*
\n-
37 * Simple class to test navigation scenarios.
\n-
38 * Takes a trajectory scenario as input, and can generate IMU measurements
\n-
39 */
\n-
\n-
40class GTSAM_EXPORT ScenarioRunner {
\n-
41 public:
\n-\n-
43 typedef boost::shared_ptr<PreintegrationParams> SharedParams;
\n-
44
\n-
45 private:
\n-
46 const Scenario& scenario_;
\n-
47 const SharedParams p_;
\n-
48 const double imuSampleTime_, sqrt_dt_;
\n-
49 const Bias estimatedBias_;
\n-
50
\n-
51 // Create two samplers for acceleration and omega noise
\n-
52 Sampler gyroSampler_, accSampler_;
\n-
53
\n-
54 public:
\n-
55 ScenarioRunner(const Scenario& scenario, const SharedParams& p,
\n-
56 double imuSampleTime = 1.0 / 100.0, const Bias& bias = Bias())
\n-
57 : scenario_(scenario),
\n-
58 p_(p),
\n-
59 imuSampleTime_(imuSampleTime),
\n-
60 sqrt_dt_(std::sqrt(imuSampleTime)),
\n-
61 estimatedBias_(bias),
\n-
62 // NOTE(duy): random seeds that work well:
\n-
63 gyroSampler_(Diagonal(p->gyroscopeCovariance), 10),
\n-
64 accSampler_(Diagonal(p->accelerometerCovariance), 29284) {}
\n-
65
\n-
66 // NOTE(frank): hardcoded for now with Z up (gravity points in negative Z)
\n-
67 // also, uses g=10 for easy debugging
\n-
68 const Vector3& gravity_n() const { return p_->n_gravity; }
\n-
69
\n-
70 const Scenario& scenario() const { return scenario_; }
\n-
71
\n-
72 // A gyro simply measures angular velocity in body frame
\n-
73 Vector3 actualAngularVelocity(double t) const { return scenario_.omega_b(t); }
\n-
74
\n-
75 // An accelerometer measures acceleration in body, but not gravity
\n-
76 Vector3 actualSpecificForce(double t) const {
\n-
77 Rot3 bRn(scenario_.rotation(t).transpose());
\n-
78 return scenario_.acceleration_b(t) - bRn * gravity_n();
\n-
79 }
\n-
80
\n-
81 // versions corrupted by bias and noise
\n-
82 Vector3 measuredAngularVelocity(double t) const {
\n-
83 return actualAngularVelocity(t) + estimatedBias_.gyroscope() +
\n-
84 gyroSampler_.sample() / sqrt_dt_;
\n-
85 }
\n-
86 Vector3 measuredSpecificForce(double t) const {
\n-
87 return actualSpecificForce(t) + estimatedBias_.accelerometer() +
\n-
88 accSampler_.sample() / sqrt_dt_;
\n-
89 }
\n-
90
\n-
91 const double& imuSampleTime() const { return imuSampleTime_; }
\n-
92
\n-
94 PreintegratedImuMeasurements integrate(double T,
\n-
95 const Bias& estimatedBias = Bias(),
\n-
96 bool corrupted = false) const;
\n+
19#pragma once
\n+
20
\n+\n+
22#include <gtsam/geometry/Rot2.h>
\n+
23#include <gtsam/geometry/Rot3.h>
\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
\n+
33class MagFactor: public NoiseModelFactorN<Rot2> {
\n+
34
\n+
35 const Point3 measured_;
\n+
36 const Point3 nM_;
\n+
37 const Point3 bias_;
\n+
38
\n+
39public:
\n+
40
\n+
\n+
50 MagFactor(Key key, const Point3& measured, double scale,
\n+
51 const Unit3& direction, const Point3& bias,
\n+
52 const SharedNoiseModel& model) :
\n+
53 NoiseModelFactorN<Rot2>(model, key), //
\n+
54 measured_(measured), nM_(scale * direction), bias_(bias) {
\n+
55 }
\n+
\n+
56
\n+
\n+
58 NonlinearFactor::shared_ptr clone() const override {
\n+
59 return boost::static_pointer_cast<NonlinearFactor>(
\n+
60 NonlinearFactor::shared_ptr(new MagFactor(*this)));
\n+
61 }
\n+
\n+
62
\n+
63 static Point3 unrotate(const Rot2& R, const Point3& p,
\n+
64 boost::optional<Matrix&> HR = boost::none) {
\n+
65 Point3 q = Rot3::Yaw(R.theta()).unrotate(p, HR, boost::none);
\n+
66 if (HR) {
\n+
67 // assign to temporary first to avoid error in Win-Debug mode
\n+
68 Matrix H = HR->col(2);
\n+
69 *HR = H;
\n+
70 }
\n+
71 return q;
\n+
72 }
\n+
73
\n+
\n+
77 Vector evaluateError(const Rot2& nRb,
\n+
78 boost::optional<Matrix&> H = boost::none) const override {
\n+
79 // measured bM = nRb\ufffd * nM + b
\n+
80 Point3 hx = unrotate(nRb, nM_, H) + bias_;
\n+
81 return (hx - measured_);
\n+
82 }
\n+
\n+
83};
\n+
\n+
84
\n+
\n+
90class MagFactor1: public NoiseModelFactorN<Rot3> {
\n+
91
\n+
92 const Point3 measured_;
\n+
93 const Point3 nM_;
\n+
94 const Point3 bias_;
\n+
95
\n+
96public:
\n
97
\n-
99 NavState predict(const PreintegratedImuMeasurements& pim,
\n-
100 const Bias& estimatedBias = Bias()) const;
\n-
101
\n-
103 Matrix9 estimateCovariance(double T, size_t N = 1000,
\n-
104 const Bias& estimatedBias = Bias()) const;
\n+
\n+
99 MagFactor1(Key key, const Point3& measured, double scale,
\n+
100 const Unit3& direction, const Point3& bias,
\n+
101 const SharedNoiseModel& model) :
\n+
102 NoiseModelFactorN<Rot3>(model, key), //
\n+
103 measured_(measured), nM_(scale * direction), bias_(bias) {
\n+
104 }
\n+
\n
105
\n-
107 Matrix6 estimateNoiseCovariance(size_t N = 1000) const;
\n-
108};
\n+
\n+
107 NonlinearFactor::shared_ptr clone() const override {
\n+
108 return boost::static_pointer_cast<NonlinearFactor>(
\n+
109 NonlinearFactor::shared_ptr(new MagFactor1(*this)));
\n+
110 }
\n+
\n+
111
\n+
\n+
115 Vector evaluateError(const Rot3& nRb,
\n+
116 boost::optional<Matrix&> H = boost::none) const override {
\n+
117 // measured bM = nRb\ufffd * nM + b
\n+
118 Point3 hx = nRb.unrotate(nM_, H, boost::none) + bias_;
\n+
119 return (hx - measured_);
\n+
120 }
\n+
\n+
121};
\n+
\n+
122
\n+
\n+
128class MagFactor2: public NoiseModelFactorN<Point3, Point3> {
\n+
129
\n+
130 const Point3 measured_;
\n+
131 const Rot3 bRn_;
\n+
132
\n+
133public:
\n+
134
\n+
\n+
136 MagFactor2(Key key1, Key key2, const Point3& measured, const Rot3& nRb,
\n+
137 const SharedNoiseModel& model) :
\n+
138 NoiseModelFactorN<Point3, Point3>(model, key1, key2), //
\n+
139 measured_(measured), bRn_(nRb.inverse()) {
\n+
140 }
\n+
\n+
141
\n+
\n+
143 NonlinearFactor::shared_ptr clone() const override {
\n+
144 return boost::static_pointer_cast<NonlinearFactor>(
\n+
145 NonlinearFactor::shared_ptr(new MagFactor2(*this)));
\n+
146 }
\n+
\n+
147
\n+
\n+
153 Vector evaluateError(const Point3& nM, const Point3& bias,
\n+
154 boost::optional<Matrix&> H1 = boost::none, boost::optional<Matrix&> H2 =
\n+
155 boost::none) const override {
\n+
156 // measured bM = nRb\ufffd * nM + b, where b is unknown bias
\n+
157 Point3 hx = bRn_.rotate(nM, boost::none, H1) + bias;
\n+
158 if (H2)
\n+
159 *H2 = I_3x3;
\n+
160 return (hx - measured_);
\n+
161 }
\n+
\n+
162};
\n+
\n+
163
\n+
\n+
169class MagFactor3: public NoiseModelFactorN<double, Unit3, Point3> {
\n+
170
\n+
171 const Point3 measured_;
\n+
172 const Rot3 bRn_;
\n+
173
\n+
174public:
\n+
175
\n+
\n+
177 MagFactor3(Key key1, Key key2, Key key3, const Point3& measured,
\n+
178 const Rot3& nRb, const SharedNoiseModel& model) :
\n+
179 NoiseModelFactorN<double, Unit3, Point3>(model, key1, key2, key3), //
\n+
180 measured_(measured), bRn_(nRb.inverse()) {
\n+
181 }
\n+
\n+
182
\n+
\n+
184 NonlinearFactor::shared_ptr clone() const override {
\n+
185 return boost::static_pointer_cast<NonlinearFactor>(
\n+
186 NonlinearFactor::shared_ptr(new MagFactor3(*this)));
\n+
187 }
\n+
\n+
188
\n+
\n+
194 Vector evaluateError(const double& scale, const Unit3& direction,
\n+
195 const Point3& bias, boost::optional<Matrix&> H1 = boost::none,
\n+
196 boost::optional<Matrix&> H2 = boost::none, boost::optional<Matrix&> H3 =
\n+
197 boost::none) const override {
\n+
198 // measured bM = nRb\ufffd * nM + b, where b is unknown bias
\n+
199 Unit3 rotated = bRn_.rotate(direction, boost::none, H2);
\n+
200 Point3 hx = scale * rotated.point3() + bias;
\n+
201 if (H1)
\n+
202 *H1 = rotated.point3();
\n+
203 if (H2) // H2 is 2*2, but we need 3*2
\n+
204 {
\n+
205 Matrix H;
\n+
206 rotated.point3(H);
\n+
207 *H2 = scale * H * (*H2);
\n+
208 }
\n+
209 if (H3)
\n+
210 *H3 = I_3x3;
\n+
211 return (hx - measured_);
\n+
212 }
\n+
\n+
213};
\n
\n-
109
\n-
110/*
\n-
111 * Simple class to test navigation scenarios with CombinedImuMeasurements.
\n-
112 * Takes a trajectory scenario as input, and can generate IMU measurements
\n-
113 */
\n-
\n-
114class GTSAM_EXPORT CombinedScenarioRunner : public ScenarioRunner {
\n-
115 public:
\n-
116 typedef boost::shared_ptr<PreintegrationCombinedParams> SharedParams;
\n-
117
\n-
118 private:
\n-
119 const SharedParams p_;
\n-
120 const Bias estimatedBias_;
\n-
121
\n-
122 public:
\n-
123 CombinedScenarioRunner(const Scenario& scenario, const SharedParams& p,
\n-
124 double imuSampleTime = 1.0 / 100.0,
\n-
125 const Bias& bias = Bias())
\n-
126 : ScenarioRunner(scenario, static_cast<ScenarioRunner::SharedParams>(p),
\n-
127 imuSampleTime, bias),
\n-
128 p_(p),
\n-
129 estimatedBias_(bias) {}
\n-
130
\n-\n-
133 double T, const Bias& estimatedBias = Bias(),
\n-
134 bool corrupted = false) const;
\n-
135
\n-\n-
138 const Bias& estimatedBias = Bias()) const;
\n-
139
\n-
141 Eigen::Matrix<double, 15, 15> estimateCovariance(
\n-
142 double T, size_t N = 1000, const Bias& estimatedBias = Bias()) const;
\n-
143};
\n-
\n-
144
\n-
145} // namespace gtsam
\n-
sampling from a NoiseModel
\n-\n-\n-
Simple class to test navigation scenarios.
\n+
214
\n+
215}
\n+
216
\n+
3D rotation represented as a rotation matrix or quaternion
\n+
2D rotation
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.
Definition Rot2.h:36
\n
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
Matrix3 transpose() const
Return 3*3 transpose (inverse) rotation matrix.
Definition Rot3M.cpp:144
\n-
static shared_ptr Covariance(const Matrix &covariance, bool smart=true)
A Gaussian noise model created by specifying a covariance matrix.
Definition NoiseModel.cpp:117
\n-
Sampling structure that keeps internal random number generators for diagonal distributions specified ...
Definition Sampler.h:31
\n-
Vector sample() const
sample from distribution
Definition Sampler.cpp:59
\n-
PreintegratedCombinedMeasurements integrates the IMU measurements (rotation rates and accelerations) ...
Definition CombinedImuFactor.h:129
\n-
Definition ImuBias.h:30
\n-
const Vector3 & gyroscope() const
get gyroscope bias
Definition ImuBias.h:69
\n-
const Vector3 & accelerometer() const
get accelerometer bias
Definition ImuBias.h:64
\n-
PreintegratedImuMeasurements accumulates (integrates) the IMU measurements (rotation rates and accele...
Definition ImuFactor.h:72
\n-
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n-
Simple trajectory simulator.
Definition Scenario.h:25
\n-
virtual Vector3 omega_b(double t) const =0
angular velocity in body frame
\n-
Definition ScenarioRunner.h:40
\n-
Definition ScenarioRunner.h:114
\n+
Point3 unrotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
rotate point from world to rotated frame
Definition Rot3.cpp:136
\n+
static Rot3 Yaw(double t)
Positive yaw is to right (as in aircraft heading). See ypr.
Definition Rot3.h:174
\n+
Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
rotate point from rotated coordinate frame to world
Definition Rot3M.cpp:149
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
Point3 point3(OptionalJacobian< 3, 2 > H=boost::none) const
Return unit-norm Point3.
Definition Unit3.cpp:144
\n+
Factor to estimate rotation given magnetometer reading This version uses model measured bM = scale * ...
Definition MagFactor.h:33
\n+
NonlinearFactor::shared_ptr clone() const override
Definition MagFactor.h:58
\n+
MagFactor(Key key, const Point3 &measured, double scale, const Unit3 &direction, const Point3 &bias, const SharedNoiseModel &model)
Constructor of factor that estimates nav to body rotation bRn.
Definition MagFactor.h:50
\n+
Vector evaluateError(const Rot2 &nRb, boost::optional< Matrix & > H=boost::none) const override
vector of errors
Definition MagFactor.h:77
\n+
Factor to estimate rotation given magnetometer reading This version uses model measured bM = scale * ...
Definition MagFactor.h:90
\n+
MagFactor1(Key key, const Point3 &measured, double scale, const Unit3 &direction, const Point3 &bias, const SharedNoiseModel &model)
Constructor.
Definition MagFactor.h:99
\n+
NonlinearFactor::shared_ptr clone() const override
Definition MagFactor.h:107
\n+
Vector evaluateError(const Rot3 &nRb, boost::optional< Matrix & > H=boost::none) const override
vector of errors
Definition MagFactor.h:115
\n+
Factor to calibrate local Earth magnetic field as well as magnetometer bias This version uses model m...
Definition MagFactor.h:128
\n+
NonlinearFactor::shared_ptr clone() const override
Definition MagFactor.h:143
\n+
MagFactor2(Key key1, Key key2, const Point3 &measured, const Rot3 &nRb, const SharedNoiseModel &model)
Constructor.
Definition MagFactor.h:136
\n+
Vector evaluateError(const Point3 &nM, const Point3 &bias, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
vector of errors
Definition MagFactor.h:153
\n+
Factor to calibrate local Earth magnetic field as well as magnetometer bias This version uses model m...
Definition MagFactor.h:169
\n+
Vector evaluateError(const double &scale, const Unit3 &direction, const Point3 &bias, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none, boost::optional< Matrix & > H3=boost::none) const override
vector of errors
Definition MagFactor.h:194
\n+
MagFactor3(Key key1, Key key2, Key key3, const Point3 &measured, const Rot3 &nRb, const SharedNoiseModel &model)
Constructor.
Definition MagFactor.h:177
\n+
NonlinearFactor::shared_ptr clone() const override
Definition MagFactor.h:184
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-us-ascii\n+utf-8\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,207 +1,297 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ScenarioRunner.h\n+MagFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh>\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-26// Convert covariance to diagonal noise model, if possible, otherwise throw\n-27static noiseModel::Diagonal::shared_ptr Diagonal(const Matrix& covariance) {\n-28 bool smart = true;\n-29 auto model = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be(covariance, smart);\n-30 auto diagonal = boost::dynamic_pointer_cast(model);\n-31 if (!diagonal)\n-32 throw std::invalid_argument(\"ScenarioRunner::Diagonal: not a diagonal\");\n-33 return diagonal;\n-34}\n-35\n-36/*\n-37 * Simple class to test navigation scenarios.\n-38 * Takes a trajectory scenario as input, and can generate IMU measurements\n-39 */\n-_\b4_\b0class GTSAM_EXPORT _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br {\n-41 public:\n-42 typedef _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bB_\bi_\ba_\bs;\n-43 typedef boost::shared_ptr SharedParams;\n-44\n-45 private:\n-46 const _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo& scenario_;\n-47 const SharedParams p_;\n-48 const double imuSampleTime_, sqrt_dt_;\n-49 const _\bB_\bi_\ba_\bs estimatedBias_;\n-50\n-51 // Create two samplers for acceleration and omega noise\n-52 _\bS_\ba_\bm_\bp_\bl_\be_\br gyroSampler_, accSampler_;\n-53\n-54 public:\n-55 _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br(const _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo& scenario, const SharedParams& p,\n-56 double imuSampleTime = 1.0 / 100.0, const _\bB_\bi_\ba_\bs& bias = _\bB_\bi_\ba_\bs())\n-57 : scenario_(scenario),\n-58 p_(p),\n-59 imuSampleTime_(imuSampleTime),\n-60 sqrt_dt_(std::sqrt(imuSampleTime)),\n-61 estimatedBias_(bias),\n-62 // NOTE(duy): random seeds that work well:\n-63 gyroSampler_(Diagonal(p->gyroscopeCovariance), 10),\n-64 accSampler_(Diagonal(p->accelerometerCovariance), 29284) {}\n-65\n-66 // NOTE(frank): hardcoded for now with Z up (gravity points in negative Z)\n-67 // also, uses g=10 for easy debugging\n-68 const Vector3& gravity_n() const { return p_->n_gravity; }\n-69\n-70 const _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo& scenario() const { return scenario_; }\n-71\n-72 // A gyro simply measures angular velocity in body frame\n-73 Vector3 actualAngularVelocity(double t) const { return scenario_._\bo_\bm_\be_\bg_\ba_\b__\bb(t);\n-}\n-74\n-75 // An accelerometer measures acceleration in body, but not gravity\n-76 Vector3 actualSpecificForce(double t) const {\n-77 _\bR_\bo_\bt_\b3 bRn(scenario_.rotation(t)._\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be());\n-78 return scenario_.acceleration_b(t) - bRn * gravity_n();\n-79 }\n-80\n-81 // versions corrupted by bias and noise\n-82 Vector3 measuredAngularVelocity(double t) const {\n-83 return actualAngularVelocity(t) + estimatedBias_._\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be() +\n-84 gyroSampler_._\bs_\ba_\bm_\bp_\bl_\be() / sqrt_dt_;\n-85 }\n-86 Vector3 measuredSpecificForce(double t) const {\n-87 return actualSpecificForce(t) + estimatedBias_._\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br() +\n-88 accSampler_._\bs_\ba_\bm_\bp_\bl_\be() / sqrt_dt_;\n-89 }\n-90\n-91 const double& imuSampleTime() const { return imuSampleTime_; }\n-92\n-94 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs integrate(double T,\n-95 const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs(),\n-96 bool corrupted = false) const;\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+_\b3_\b3class _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+34\n+35 const _\bP_\bo_\bi_\bn_\bt_\b3 measured_;\n+36 const _\bP_\bo_\bi_\bn_\bt_\b3 nM_;\n+37 const _\bP_\bo_\bi_\bn_\bt_\b3 bias_;\n+38\n+39public:\n+40\n+_\b5_\b0 _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const _\bP_\bo_\bi_\bn_\bt_\b3& measured, double scale,\n+51 const _\bU_\bn_\bi_\bt_\b3& direction, const _\bP_\bo_\bi_\bn_\bt_\b3& bias,\n+52 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n+53 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN<_\bR_\bo_\bt_\b2>(model, _\bk_\be_\by), //\n+54 measured_(measured), nM_(scale * direction), bias_(bias) {\n+55 }\n+56\n+_\b5_\b8 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+59 return boost::static_pointer_cast(\n+60 NonlinearFactor::shared_ptr(new _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br(*this)));\n+61 }\n+62\n+63 static _\bP_\bo_\bi_\bn_\bt_\b3 unrotate(const _\bR_\bo_\bt_\b2& R, const _\bP_\bo_\bi_\bn_\bt_\b3& p,\n+64 boost::optional HR = boost::none) {\n+65 _\bP_\bo_\bi_\bn_\bt_\b3 q = _\bR_\bo_\bt_\b3_\b:_\b:_\bY_\ba_\bw(R.theta())._\bu_\bn_\br_\bo_\bt_\ba_\bt_\be(p, HR, boost::none);\n+66 if (HR) {\n+67 // assign to temporary first to avoid error in Win-Debug mode\n+68 Matrix H = HR->col(2);\n+69 *HR = H;\n+70 }\n+71 return q;\n+72 }\n+73\n+_\b7_\b7 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b2& nRb,\n+78 boost::optional H = boost::none) const override {\n+79 // measured bM = nRb\u00ef\u00bf\u00bd * nM + b\n+80 _\bP_\bo_\bi_\bn_\bt_\b3 hx = unrotate(nRb, nM_, H) + bias_;\n+81 return (hx - measured_);\n+82 }\n+83};\n+84\n+_\b9_\b0class _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+91\n+92 const _\bP_\bo_\bi_\bn_\bt_\b3 measured_;\n+93 const _\bP_\bo_\bi_\bn_\bt_\b3 nM_;\n+94 const _\bP_\bo_\bi_\bn_\bt_\b3 bias_;\n+95\n+96public:\n 97\n-99 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be predict(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim,\n-100 const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs()) const;\n-101\n-103 Matrix9 estimateCovariance(double T, size_t N = 1000,\n-104 const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs()) const;\n+_\b9_\b9 _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1(_\bK_\be_\by _\bk_\be_\by, const _\bP_\bo_\bi_\bn_\bt_\b3& measured, double scale,\n+100 const _\bU_\bn_\bi_\bt_\b3& direction, const _\bP_\bo_\bi_\bn_\bt_\b3& bias,\n+101 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n+102 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN<_\bR_\bo_\bt_\b3>(model, _\bk_\be_\by), //\n+103 measured_(measured), nM_(scale * direction), bias_(bias) {\n+104 }\n 105\n-107 Matrix6 estimateNoiseCovariance(size_t N = 1000) const;\n-108};\n-109\n-110/*\n-111 * Simple class to test navigation scenarios with CombinedImuMeasurements.\n-112 * Takes a trajectory scenario as input, and can generate IMU measurements\n-113 */\n-_\b1_\b1_\b4class GTSAM_EXPORT _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br : public _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br {\n-115 public:\n-116 typedef boost::shared_ptr SharedParams;\n-117\n-118 private:\n-119 const SharedParams p_;\n-120 const _\bB_\bi_\ba_\bs estimatedBias_;\n-121\n-122 public:\n-123 _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br(const _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo& scenario, const SharedParams& p,\n-124 double imuSampleTime = 1.0 / 100.0,\n-125 const _\bB_\bi_\ba_\bs& bias = _\bB_\bi_\ba_\bs())\n-126 : _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br(scenario, static_cast(p),\n-127 imuSampleTime, bias),\n-128 p_(p),\n-129 estimatedBias_(bias) {}\n-130\n-132 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs integrate(\n-133 double T, const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs(),\n-134 bool corrupted = false) const;\n-135\n-137 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be predict(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim,\n-138 const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs()) const;\n-139\n-141 Eigen::Matrix estimateCovariance(\n-142 double T, size_t N = 1000, const _\bB_\bi_\ba_\bs& estimatedBias = _\bB_\bi_\ba_\bs()) const;\n-143};\n-144\n-145} // namespace gtsam\n-_\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh\n-sampling from a NoiseModel\n-_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b._\bh\n-Simple class to test navigation scenarios.\n+_\b1_\b0_\b7 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+108 return boost::static_pointer_cast(\n+109 NonlinearFactor::shared_ptr(new _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1(*this)));\n+110 }\n+111\n+_\b1_\b1_\b5 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b3& nRb,\n+116 boost::optional H = boost::none) const override {\n+117 // measured bM = nRb\u00ef\u00bf\u00bd * nM + b\n+118 _\bP_\bo_\bi_\bn_\bt_\b3 hx = nRb._\bu_\bn_\br_\bo_\bt_\ba_\bt_\be(nM_, H, boost::none) + bias_;\n+119 return (hx - measured_);\n+120 }\n+121};\n+122\n+_\b1_\b2_\b8class _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+129\n+130 const _\bP_\bo_\bi_\bn_\bt_\b3 measured_;\n+131 const _\bR_\bo_\bt_\b3 bRn_;\n+132\n+133public:\n+134\n+_\b1_\b3_\b6 _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2(_\bK_\be_\by key1, _\bK_\be_\by key2, const _\bP_\bo_\bi_\bn_\bt_\b3& measured, const _\bR_\bo_\bt_\b3& nRb,\n+137 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n+138 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN<_\bP_\bo_\bi_\bn_\bt_\b3, _\bP_\bo_\bi_\bn_\bt_\b3>(model, key1, key2), //\n+139 measured_(measured), bRn_(nRb.inverse()) {\n+140 }\n+141\n+_\b1_\b4_\b3 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+144 return boost::static_pointer_cast(\n+145 NonlinearFactor::shared_ptr(new _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2(*this)));\n+146 }\n+147\n+_\b1_\b5_\b3 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b3& nM, const _\bP_\bo_\bi_\bn_\bt_\b3& bias,\n+154 boost::optional H1 = boost::none, boost::optional H2 =\n+155 boost::none) const override {\n+156 // measured bM = nRb\u00ef\u00bf\u00bd * nM + b, where b is unknown bias\n+157 _\bP_\bo_\bi_\bn_\bt_\b3 hx = bRn_._\br_\bo_\bt_\ba_\bt_\be(nM, boost::none, H1) + bias;\n+158 if (H2)\n+159 *H2 = I_3x3;\n+160 return (hx - measured_);\n+161 }\n+162};\n+163\n+_\b1_\b6_\b9class _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+170\n+171 const _\bP_\bo_\bi_\bn_\bt_\b3 measured_;\n+172 const _\bR_\bo_\bt_\b3 bRn_;\n+173\n+174public:\n+175\n+_\b1_\b7_\b7 _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3(_\bK_\be_\by key1, _\bK_\be_\by key2, _\bK_\be_\by key3, const _\bP_\bo_\bi_\bn_\bt_\b3& measured,\n+178 const _\bR_\bo_\bt_\b3& nRb, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n+179 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(model, key1, key2, key3), //\n+180 measured_(measured), bRn_(nRb.inverse()) {\n+181 }\n+182\n+_\b1_\b8_\b4 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+185 return boost::static_pointer_cast(\n+186 NonlinearFactor::shared_ptr(new _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3(*this)));\n+187 }\n+188\n+_\b1_\b9_\b4 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const double& scale, const _\bU_\bn_\bi_\bt_\b3& direction,\n+195 const _\bP_\bo_\bi_\bn_\bt_\b3& bias, boost::optional H1 = boost::none,\n+196 boost::optional H2 = boost::none, boost::optional H3 =\n+197 boost::none) const override {\n+198 // measured bM = nRb\u00ef\u00bf\u00bd * nM + b, where b is unknown bias\n+199 _\bU_\bn_\bi_\bt_\b3 rotated = bRn_._\br_\bo_\bt_\ba_\bt_\be(direction, boost::none, H2);\n+200 _\bP_\bo_\bi_\bn_\bt_\b3 hx = scale * rotated._\bp_\bo_\bi_\bn_\bt_\b3() + bias;\n+201 if (H1)\n+202 *H1 = rotated._\bp_\bo_\bi_\bn_\bt_\b3();\n+203 if (H2) // H2 is 2*2, but we need 3*2\n+204 {\n+205 Matrix H;\n+206 rotated._\bp_\bo_\bi_\bn_\bt_\b3(H);\n+207 *H2 = scale * H * (*H2);\n+208 }\n+209 if (H3)\n+210 *H3 = I_3x3;\n+211 return (hx - measured_);\n+212 }\n+213};\n+214\n+215}\n+216\n+_\bR_\bo_\bt_\b3_\b._\bh\n+3D rotation represented as a rotation matrix or quaternion\n+_\bR_\bo_\bt_\b2_\b._\bh\n+2D rotation\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2\n+Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n symbol GTSAM_USE_QUATERNIO...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be\n-Matrix3 transpose() const\n-Return 3*3 transpose (inverse) rotation matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:144\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n-static shared_ptr Covariance(const Matrix &covariance, bool smart=true)\n-A Gaussian noise model created by specifying a covariance matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.cpp:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br\n-Sampling structure that keeps internal random number generators for diagonal\n-distributions specified ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Sampler.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br_\b:_\b:_\bs_\ba_\bm_\bp_\bl_\be\n-Vector sample() const\n-sample from distribution\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Sampler.cpp:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedCombinedMeasurements integrates the IMU measurements (rotation\n-rates and accelerations) ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be\n-const Vector3 & gyroscope() const\n-get gyroscope bias\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br\n-const Vector3 & accelerometer() const\n-get accelerometer bias\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedImuMeasurements accumulates (integrates) the IMU measurements\n-(rotation rates and accele...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n-Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n-not make sense to make...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo\n-Simple trajectory simulator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scenario.h:25\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\b:_\b:_\bo_\bm_\be_\bg_\ba_\b__\bb\n-virtual Vector3 omega_b(double t) const =0\n-angular velocity in body frame\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ScenarioRunner.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ScenarioRunner.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bu_\bn_\br_\bo_\bt_\ba_\bt_\be\n+Point3 unrotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none,\n+OptionalJacobian< 3, 3 > H2=boost::none) const\n+rotate point from world to rotated frame\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.cpp:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bY_\ba_\bw\n+static Rot3 Yaw(double t)\n+Positive yaw is to right (as in aircraft heading). See ypr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\be\n+Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none,\n+OptionalJacobian< 3, 3 > H2=boost::none) const\n+rotate point from rotated coordinate frame to world\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:149\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\b3\n+Point3 point3(OptionalJacobian< 3, 2 > H=boost::none) const\n+Return unit-norm Point3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:144\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br\n+Factor to estimate rotation given magnetometer reading This version uses model\n+measured bM = scale * ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br\n+MagFactor(Key key, const Point3 &measured, double scale, const Unit3\n+&direction, const Point3 &bias, const SharedNoiseModel &model)\n+Constructor of factor that estimates nav to body rotation bRn.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Rot2 &nRb, boost::optional< Matrix & > H=boost::\n+none) const override\n+vector of errors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1\n+Factor to estimate rotation given magnetometer reading This version uses model\n+measured bM = scale * ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:90\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1\n+MagFactor1(Key key, const Point3 &measured, double scale, const Unit3\n+&direction, const Point3 &bias, const SharedNoiseModel &model)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b1_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Rot3 &nRb, boost::optional< Matrix & > H=boost::\n+none) const override\n+vector of errors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+Factor to calibrate local Earth magnetic field as well as magnetometer bias\n+This version uses model m...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+MagFactor2(Key key1, Key key2, const Point3 &measured, const Rot3 &nRb, const\n+SharedNoiseModel &model)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Point3 &nM, const Point3 &bias, boost::optional<\n+Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const\n+override\n+vector of errors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3\n+Factor to calibrate local Earth magnetic field as well as magnetometer bias\n+This version uses model m...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:169\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const double &scale, const Unit3 &direction, const Point3\n+&bias, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & >\n+H2=boost::none, boost::optional< Matrix & > H3=boost::none) const override\n+vector of errors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:194\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3\n+MagFactor3(Key key1, Key key2, Key key3, const Point3 &measured, const Rot3\n+&nRb, const SharedNoiseModel &model)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b3_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MagFactor.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bR_\bo_\bt_\b2_\b _\b>_\b:_\b:_\bk_\be_\by\n+Key key() const\n+Returns a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bS_\bc_\be_\bn_\ba_\br_\bi_\bo_\bR_\bu_\bn_\bn_\be_\br_\b._\bh\n+ * _\bM_\ba_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00998.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00998.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ManifoldPreintegration.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,50 +94,36 @@\n \n \n \n \n \n
\n \n-
ManifoldPreintegration.h File Reference
\n+
AHRSFactor.cpp File Reference
\n
\n
\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::ManifoldPreintegration
 IMU pre-integration on NavSatet manifold. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Luca Carlone
\n-
\n-Stephen Williams
\n-
\n-Richard Roberts
\n-
\n-Vadim Indelman
\n+
Author
Krunal Chande
\n
\n-David Jensen
\n+Luca Carlone \n
\n Frank Dellaert
\n+
Date
July 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ManifoldPreintegration.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n-\u00a0 IMU pre-integration on NavSatet manifold. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+AHRSFactor.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n+ Krunal Chande\n Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n Frank Dellaert\n+ Date\n+ July 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01001.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01001.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GaussNewtonOptimizer.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/nonlinearExceptions.h File Reference\n \n \n \n \n \n \n \n@@ -96,42 +96,43 @@\n \n \n \n
\n \n-
GaussNewtonOptimizer.h File Reference
\n+
nonlinearExceptions.h File Reference
\n
\n
\n \n+

Exceptions that may be thrown by nonlinear optimization components. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::GaussNewtonParams
 Parameters for Gauss-Newton optimization, inherits from NonlinearOptimizationParams. More...
 
class  gtsam::GaussNewtonOptimizer
 This class performs Gauss-Newton nonlinear optimization. More...
class  gtsam::MarginalizeNonleafException
 Thrown when requesting to marginalize out variables from ISAM2 that are not leaves. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
Feb 26, 2012
\n+

Exceptions that may be thrown by nonlinear optimization components.

\n+
Author
Richard Roberts
\n+
Date
Aug 17, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussNewtonOptimizer.h File Reference\n+nonlinearExceptions.h File Reference\n+Exceptions that may be thrown by nonlinear optimization components. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-\u00a0 Parameters for Gauss-Newton optimization, inherits from\n- NonlinearOptimizationParams. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-\u00a0 This class performs Gauss-Newton nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bi_\bz_\be_\bN_\bo_\bn_\bl_\be_\ba_\bf_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+\u00a0 Thrown when requesting to marginalize out variables from _\bI_\bS_\bA_\bM_\b2 that are\n+ not leaves. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Exceptions that may be thrown by nonlinear optimization components.\n Author\n Richard Roberts\n Date\n- Feb 26, 2012\n+ Aug 17, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01001.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01001.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a01001 = [\n- [\"gtsam::GaussNewtonParams\", \"a04352.html\", null],\n- [\"gtsam::GaussNewtonOptimizer\", \"a04356.html\", \"a04356\"]\n+ [\"gtsam::MarginalizeNonleafException\", \"a04492.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01001_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01001_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GaussNewtonOptimizer.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/nonlinearExceptions.h Source File\n \n \n \n \n \n \n \n@@ -98,91 +98,69 @@\n
No Matches
\n \n \n \n \n \n
\n-
GaussNewtonOptimizer.h
\n+
nonlinearExceptions.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n+
18#pragma once
\n+
19
\n+
20#include <boost/lexical_cast.hpp>
\n+
21#include <exception>
\n
22
\n-
23namespace gtsam {
\n+
23#include <gtsam/inference/Key.h>
\n
24
\n-
25class GaussNewtonOptimizer;
\n+
25namespace gtsam {
\n
26
\n-
\n-
30class GTSAM_EXPORT GaussNewtonParams : public NonlinearOptimizerParams {
\n-
31public:
\n-\n-
33};
\n-
\n-
34
\n-
\n-
38class GTSAM_EXPORT GaussNewtonOptimizer : public NonlinearOptimizer {
\n-
39
\n-
40protected:
\n-
41 GaussNewtonParams params_;
\n-
42
\n-
43public:
\n-
46
\n-
55 GaussNewtonOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n-
56 const GaussNewtonParams& params = GaussNewtonParams());
\n-
57
\n-
65 GaussNewtonOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n-
66 const Ordering& ordering);
\n-
68
\n-
71
\n-\n-
74
\n-
79 GaussianFactorGraph::shared_ptr iterate() override;
\n-
80
\n-
82 const GaussNewtonParams& params() const { return params_; }
\n-
83
\n-
85
\n-
86protected:
\n-
88 const NonlinearOptimizerParams& _params() const override { return params_; }
\n-
89
\n-
91 GaussNewtonParams ensureHasOrdering(GaussNewtonParams params, const NonlinearFactorGraph& graph) const;
\n-
92
\n-
93};
\n-
\n-
94
\n-
95}
\n-
Base class and parameters for nonlinear optimization algorithms.
\n+
\n+
33 class MarginalizeNonleafException : public std::exception {
\n+
34 Key key_;
\n+
35 KeyFormatter formatter_;
\n+
36 mutable std::string what_;
\n+
37 public:
\n+
38 MarginalizeNonleafException(Key key, KeyFormatter formatter = DefaultKeyFormatter) noexcept :
\n+
39 key_(key), formatter_(formatter) {}
\n+
40 virtual ~MarginalizeNonleafException() noexcept {}
\n+
41 Key key() const { return key_; }
\n+
42 const char* what() const noexcept override {
\n+
43 if(what_.empty())
\n+
44 what_ =
\n+
45"\\nRequested to marginalize out variable " + formatter_(key_) + ", but this variable\\n\\
\n+
46is not a leaf. To make the variables you would like to marginalize be leaves,\\n\\
\n+
47their ordering should be constrained using the constrainedKeys argument to\\n\\
\n+
48ISAM2::update().\\n";
\n+
49 return what_.c_str();
\n+
50 }
\n+
51 };
\n+
\n+
52
\n+
53}
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Definition Ordering.h:34
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n-
Parameters for Gauss-Newton optimization, inherits from NonlinearOptimizationParams.
Definition GaussNewtonOptimizer.h:30
\n-
This class performs Gauss-Newton nonlinear optimization.
Definition GaussNewtonOptimizer.h:38
\n-
const GaussNewtonParams & params() const
Read-only access the parameters.
Definition GaussNewtonOptimizer.h:82
\n-
~GaussNewtonOptimizer() override
Virtual destructor.
Definition GaussNewtonOptimizer.h:73
\n-
const NonlinearOptimizerParams & _params() const override
Access the parameters (base class version)
Definition GaussNewtonOptimizer.h:88
\n-
Definition NonlinearFactorGraph.h:55
\n-
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition NonlinearOptimizer.h:75
\n-
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
Thrown when requesting to marginalize out variables from ISAM2 that are not leaves.
Definition nonlinearExceptions.h:33
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,111 +1,73 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussNewtonOptimizer.h\n+nonlinearExceptions.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n+18#pragma once\n+19\n+20#include \n+21#include \n 22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n 24\n-25class GaussNewtonOptimizer;\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n 26\n-_\b3_\b0class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs {\n-31public:\n-32 using _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bT_\by_\bp_\be = _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br;\n-33};\n-34\n-_\b3_\b8class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n-39\n-40protected:\n-41 _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs params_;\n-42\n-43public:\n-46\n-55 _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n-initialValues,\n-56 const _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& params = _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs());\n-57\n-65 _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n-initialValues,\n-66 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering);\n-68\n-71\n-_\b7_\b3 _\b~_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br() override {}\n-74\n-79 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br iterate() override;\n-80\n-_\b8_\b2 const _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& _\bp_\ba_\br_\ba_\bm_\bs() const { return params_; }\n-83\n-85\n-86protected:\n-_\b8_\b8 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& _\b__\bp_\ba_\br_\ba_\bm_\bs() const override { return params_; }\n-89\n-91 _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs ensureHasOrdering(_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs params, const\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph) const;\n-92\n-93};\n-94\n-95}\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n-Base class and parameters for nonlinear optimization algorithms.\n+_\b3_\b3 class _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bi_\bz_\be_\bN_\bo_\bn_\bl_\be_\ba_\bf_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn : public std::exception {\n+34 _\bK_\be_\by key_;\n+35 _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br formatter_;\n+36 mutable std::string what_;\n+37 public:\n+38 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bi_\bz_\be_\bN_\bo_\bn_\bl_\be_\ba_\bf_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(_\bK_\be_\by key, _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br formatter =\n+DefaultKeyFormatter) noexcept :\n+39 key_(key), formatter_(formatter) {}\n+40 virtual _\b~_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bi_\bz_\be_\bN_\bo_\bn_\bl_\be_\ba_\bf_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() noexcept {}\n+41 _\bK_\be_\by key() const { return key_; }\n+42 const char* what() const noexcept override {\n+43 if(what_.empty())\n+44 what_ =\n+45\"\\nRequested to marginalize out variable \" + formatter_(key_) + \", but this\n+variable\\n\\\n+46is not a leaf. To make the variables you would like to marginalize be\n+leaves,\\n\\\n+47their ordering should be constrained using the constrainedKeys argument to\\n\\\n+48ISAM2::update().\\n\";\n+49 return what_.c_str();\n+50 }\n+51 };\n+52\n+53}\n+_\bK_\be_\by_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for Gauss-Newton optimization, inherits from\n-NonlinearOptimizationParams.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussNewtonOptimizer.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-This class performs Gauss-Newton nonlinear optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussNewtonOptimizer.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs\n-const GaussNewtonParams & params() const\n-Read-only access the parameters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussNewtonOptimizer.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b~_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-~GaussNewtonOptimizer() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussNewtonOptimizer.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b__\bp_\ba_\br_\ba_\bm_\bs\n-const NonlinearOptimizerParams & _params() const override\n-Access the parameters (base class version)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussNewtonOptimizer.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-This is the abstract interface for classes that can optimize for the maximum-\n-likelihood estimate of a...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n-The common parameters for Nonlinear optimizers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bi_\bz_\be_\bN_\bo_\bn_\bl_\be_\ba_\bf_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+Thrown when requesting to marginalize out variables from ISAM2 that are not\n+leaves.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nonlinearExceptions.h:33\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01004.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01004.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtOptimizer.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Result.h File Reference\n \n \n \n \n \n \n \n@@ -94,40 +94,50 @@\n \n \n \n \n \n
\n \n-
LevenbergMarquardtOptimizer.cpp File Reference
\n+
ISAM2Result.h File Reference
\n
\n
\n \n-

A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme. \n+

Class that stores detailed iSAM2 result. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::ISAM2Result
 This struct is returned from ISAM2::update() and contains information about the update that is useful for determining whether the solution is converging, and about how much work was required for the update. More...
 
struct  gtsam::ISAM2Result::DetailedResults
 A struct holding detailed results, which must be enabled with ISAM2Params::enableDetailedResults. More...
 
struct  gtsam::ISAM2Result::DetailedResults::VariableStatus
 The status of a single variable, this struct is stored in DetailedResults::variableStatus. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.

\n-
Author
Richard Roberts
\n-
\n-Frank Dellaert
\n-
\n-Luca Carlone
\n-
Date
Feb 26, 2012
\n+

Class that stores detailed iSAM2 result.

\n+
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,36 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-LevenbergMarquardtOptimizer.cpp File Reference\n-A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ISAM2Result.h File Reference\n+Class that stores detailed iSAM2 result. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt\n+ This struct is returned from _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\b(_\b) and contains information\n+\u00a0 about the update that is useful for determining whether the solution\n+ is converging, and about how much work was required for the update.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs\n+\u00a0 A struct holding detailed results, which must be enabled with\n+ _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs\n+\u00a0 The status of a single variable, this struct is stored in\n+ _\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n+Class that stores detailed iSAM2 result.\n Author\n- Richard Roberts\n- Frank Dellaert\n- Luca Carlone\n- Date\n- Feb 26, 2012\n+ Michael Kaess, Richard Roberts, Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\n+ * _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01007_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01007_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearEquality.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.h Source File\n \n \n \n \n \n \n \n@@ -98,402 +98,254 @@\n
No Matches
\n \n \n \n \n \n
\n-
NonlinearEquality.h
\n+
ISAM2.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file NonlinearEquality.h
\n-
14 * @brief Factor to handle enforced equality between factors
\n-
15 * @author Alex Cunningham
\n-
16 */
\n-
17
\n-
18#pragma once
\n-
19
\n-\n-
21#include <gtsam/base/Testable.h>
\n-
22#include <gtsam/base/Manifold.h>
\n-
23
\n-
24#include <boost/bind/bind.hpp>
\n-
25
\n-
26#include <limits>
\n-
27#include <iostream>
\n-
28#include <cmath>
\n+
19// \\callgraph
\n+
20
\n+
21#pragma once
\n+
22
\n+\n+\n+\n+\n+\n+\n
29
\n-
30namespace gtsam {
\n+
30#include <vector>
\n
31
\n-
44template<class VALUE>
\n+
32namespace gtsam {
\n+
33
\n
\n-\n-
46
\n-
47public:
\n-
48 typedef VALUE T;
\n+
45class GTSAM_EXPORT ISAM2 : public BayesTree<ISAM2Clique> {
\n+
46 protected:
\n+\n
49
\n-
50private:
\n-
51
\n-
52 // feasible value
\n-
53 T feasible_;
\n-
54
\n-
55 // error handling flag
\n-
56 bool allow_error_;
\n-
57
\n-
58 // error gain in allow error case
\n-
59 double error_gain_;
\n-
60
\n-
61 // typedef to this class
\n-
62 using This = NonlinearEquality<VALUE>;
\n-
63
\n-
64 // typedef to base class
\n-\n-
66
\n-
67public:
\n-
68
\n-
70 using CompareFunction = std::function<bool(const T&, const T&)>;
\n-
71 CompareFunction compare_;
\n-
72
\n-
\n-\n-
75 }
\n-
\n-
76
\n-
77 ~NonlinearEquality() override {
\n-
78 }
\n-
79
\n+\n+
53
\n+\n+
62
\n+
63 mutable VectorValues deltaNewton_; // Only used when using Dogleg - stores
\n+
64 // the Gauss-Newton update
\n+
65 mutable VectorValues RgProd_; // Only used when using Dogleg - stores R*g and
\n+
66 // is updated incrementally
\n+
67
\n+
76 mutable KeySet deltaReplacedMask_; // TODO(dellaert): Make sure accessed in
\n+
77 // the right way
\n+
78
\n+\n
82
\n-
\n-
86 NonlinearEquality(Key j, const T& feasible,
\n-
87 const CompareFunction &_compare = std::bind(traits<T>::Equals,
\n-
88 std::placeholders::_1, std::placeholders::_2, 1e-9)) :
\n-
89 Base(noiseModel::Constrained::All(traits<T>::GetDimension(feasible)),
\n-
90 j), feasible_(feasible), allow_error_(false), error_gain_(0.0), //
\n-
91 compare_(_compare) {
\n-
92 }
\n-
\n-
93
\n-
\n-
97 NonlinearEquality(Key j, const T& feasible, double error_gain,
\n-
98 const CompareFunction &_compare = std::bind(traits<T>::Equals,
\n-
99 std::placeholders::_1, std::placeholders::_2, 1e-9)) :
\n-
100 Base(noiseModel::Constrained::All(traits<T>::GetDimension(feasible)),
\n-
101 j), feasible_(feasible), allow_error_(true), error_gain_(error_gain), //
\n-
102 compare_(_compare) {
\n-
103 }
\n-
\n-
104
\n+\n+
85
\n+\n+
88
\n+
90 mutable boost::optional<double> doglegDelta_;
\n+
91
\n+\n+
95
\n+\n+
98
\n+
99 public:
\n+
100 using This = ISAM2;
\n+\n+\n+\n+
104 using Cliques = Base::Cliques;
\n+
105
\n+
107 explicit ISAM2(const ISAM2Params& params);
\n
108
\n-
\n-
109 void print(const std::string& s = "",
\n-
110 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
111 std::cout << (s.empty() ? s : s + " ") << "Constraint: on ["
\n-
112 << keyFormatter(this->key()) << "]\\n";
\n-
113 traits<VALUE>::Print(feasible_, "Feasible Point:\\n");
\n-
114 std::cout << "Variable Dimension: " << traits<T>::GetDimension(feasible_)
\n-
115 << std::endl;
\n-
116 }
\n-
\n-
117
\n-
\n-
119 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override {
\n-
120 const This* e = dynamic_cast<const This*>(&f);
\n-
121 return e && Base::equals(f) && traits<T>::Equals(feasible_,e->feasible_, tol)
\n-
122 && std::abs(error_gain_ - e->error_gain_) < tol;
\n-
123 }
\n-
\n-
124
\n-
128
\n-
\n-
130 double error(const Values& c) const override {
\n-
131 const T& xj = c.at<T>(this->key());
\n-
132 Vector e = this->unwhitenedError(c);
\n-
133 if (allow_error_ || !compare_(xj, feasible_)) {
\n-
134 return error_gain_ * dot(e, e);
\n-
135 } else {
\n-
136 return 0.0;
\n-
137 }
\n-
138 }
\n-
\n-
139
\n-
\n-
141 Vector evaluateError(const T& xj,
\n-
142 boost::optional<Matrix&> H = boost::none) const override {
\n-
143 const size_t nj = traits<T>::GetDimension(feasible_);
\n-
144 if (allow_error_) {
\n-
145 if (H)
\n-
146 *H = Matrix::Identity(nj,nj); // FIXME: this is not the right linearization for nonlinear compare
\n-
147 return traits<T>::Local(xj,feasible_);
\n-
148 } else if (compare_(feasible_, xj)) {
\n-
149 if (H)
\n-
150 *H = Matrix::Identity(nj,nj);
\n-
151 return Vector::Zero(nj); // set error to zero if equal
\n-
152 } else {
\n-
153 if (H)
\n-
154 throw std::invalid_argument(
\n-
155 "Linearization point not feasible for "
\n-
156 + DefaultKeyFormatter(this->key()) + "!");
\n-
157 return Vector::Constant(nj, std::numeric_limits<double>::infinity()); // set error to infinity if not equal
\n-
158 }
\n-
159 }
\n-
\n-
160
\n-
\n-
162 GaussianFactor::shared_ptr linearize(const Values& x) const override {
\n-
163 const T& xj = x.at<T>(this->key());
\n-
164 Matrix A;
\n-
165 Vector b = evaluateError(xj, A);
\n-
166 SharedDiagonal model = noiseModel::Constrained::All(b.size());
\n-\n-
168 new JacobianFactor(this->key(), A, b, model));
\n-
169 }
\n-
\n-
170
\n-
\n-
172 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
173 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
174 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
175 }
\n-
\n-
176
\n-
178
\n-\n-
180
\n-
181private:
\n-
182
\n-\n-
185 template<class ARCHIVE>
\n-
186 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
187 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
188 ar
\n-
189 & boost::serialization::make_nvp("NoiseModelFactor1",
\n-
190 boost::serialization::base_object<Base>(*this));
\n-
191 ar & BOOST_SERIALIZATION_NVP(feasible_);
\n-
192 ar & BOOST_SERIALIZATION_NVP(allow_error_);
\n-
193 ar & BOOST_SERIALIZATION_NVP(error_gain_);
\n-
194 }
\n-
195
\n-
196};
\n-
\n-
197// \\class NonlinearEquality
\n-
198
\n-
199template <typename VALUE>
\n-
200struct traits<NonlinearEquality<VALUE>> : Testable<NonlinearEquality<VALUE>> {};
\n-
201
\n-
202/* ************************************************************************* */
\n-
206template<class VALUE>
\n-
\n-\n-
208
\n-
209public:
\n-
210 typedef VALUE X;
\n-
211
\n-
212protected:
\n-\n-
214 typedef NonlinearEquality1<VALUE> This;
\n-
215
\n-
\n-\n-
218 }
\n-
\n-
219
\n-
220 X value_;
\n-
221
\n-
222 GTSAM_CONCEPT_MANIFOLD_TYPE(X)
\n-
223 GTSAM_CONCEPT_TESTABLE_TYPE(X)
\n-
224
\n-
225public:
\n-
226
\n-
227 typedef boost::shared_ptr<NonlinearEquality1<VALUE> > shared_ptr;
\n-
228
\n-
\n-
235 NonlinearEquality1(const X& value, Key key, double mu = 1000.0)
\n-
236 : Base(noiseModel::Constrained::All(traits<X>::GetDimension(value),
\n-
237 std::abs(mu)),
\n-
238 key),
\n-
239 value_(value) {}
\n-
\n-
240
\n-
241 ~NonlinearEquality1() override {
\n-
242 }
\n-
243
\n-
\n-
245 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
246 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
247 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
248 }
\n+
111 ISAM2();
\n+
112
\n+
114 virtual ~ISAM2() {}
\n+
115
\n+
117 virtual bool equals(const ISAM2& other, double tol = 1e-9) const;
\n+
118
\n+
151 virtual ISAM2Result update(
\n+
152 const NonlinearFactorGraph& newFactors = NonlinearFactorGraph(),
\n+
153 const Values& newTheta = Values(),
\n+
154 const FactorIndices& removeFactorIndices = FactorIndices(),
\n+
155 const boost::optional<FastMap<Key, int> >& constrainedKeys = boost::none,
\n+
156 const boost::optional<FastList<Key> >& noRelinKeys = boost::none,
\n+
157 const boost::optional<FastList<Key> >& extraReelimKeys = boost::none,
\n+
158 bool force_relinearize = false);
\n+
159
\n+
178 virtual ISAM2Result update(const NonlinearFactorGraph& newFactors,
\n+
179 const Values& newTheta,
\n+
180 const ISAM2UpdateParams& updateParams);
\n+
181
\n+
199 void marginalizeLeaves(
\n+
200 const FastList<Key>& leafKeys,
\n+
201 boost::optional<FactorIndices&> marginalFactorsIndices = boost::none,
\n+
202 boost::optional<FactorIndices&> deletedFactorsIndices = boost::none);
\n+
203
\n+
205 const Values& getLinearizationPoint() const { return theta_; }
\n+
206
\n+
208 bool valueExists(Key key) const { return theta_.exists(key); }
\n+
209
\n+
215 Values calculateEstimate() const;
\n+
216
\n+
223 template <class VALUE>
\n+
\n+
224 VALUE calculateEstimate(Key key) const {
\n+
225 const Vector& delta = getDelta()[key];
\n+
226 return traits<VALUE>::Retract(theta_.at<VALUE>(key), delta);
\n+
227 }
\n
\n+
228
\n+
237 const Value& calculateEstimate(Key key) const;
\n+
238
\n+
240 Matrix marginalCovariance(Key key) const;
\n+
241
\n+
244
\n+
248 Values calculateBestEstimate() const;
\n
249
\n-
\n-
251 Vector evaluateError(const X& x1,
\n-
252 boost::optional<Matrix&> H = boost::none) const override {
\n-
253 if (H)
\n-
254 (*H) = Matrix::Identity(traits<X>::GetDimension(x1),traits<X>::GetDimension(x1));
\n-
255 // manifold equivalent of h(x)-z -> log(z,h(x))
\n-
256 return traits<X>::Local(value_,x1);
\n-
257 }
\n-
\n-
258
\n-
\n-
260 void print(const std::string& s = "",
\n-
261 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
262 std::cout << s << ": NonlinearEquality1(" << keyFormatter(this->key())
\n-
263 << ")," << "\\n";
\n-
264 this->noiseModel_->print();
\n-
265 traits<X>::Print(value_, "Value");
\n-
266 }
\n-
\n-
267
\n-\n-
269
\n-
270private:
\n+
251 const VectorValues& getDelta() const;
\n+
252
\n+
254 double error(const VectorValues& x) const;
\n+
255
\n+
\n+\n+
258 return nonlinearFactors_;
\n+
259 }
\n+
\n+
260
\n+
262 const VariableIndex& getVariableIndex() const { return variableIndex_; }
\n+
263
\n+
265 const KeySet& getFixedVariables() const { return fixedVariables_; }
\n+
266
\n+
267 const ISAM2Params& params() const { return params_; }
\n+
268
\n+
270 void printStats() const { getCliqueData().getStats().print(); }
\n
271
\n-\n-
274 template<class ARCHIVE>
\n-
275 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
276 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
277 ar
\n-
278 & boost::serialization::make_nvp("NoiseModelFactor1",
\n-
279 boost::serialization::base_object<Base>(*this));
\n-
280 ar & BOOST_SERIALIZATION_NVP(value_);
\n-
281 }
\n-
282};
\n-
\n-
283// \\NonlinearEquality1
\n-
284
\n-
285template <typename VALUE>
\n-
\n-\n-
287 : Testable<NonlinearEquality1<VALUE> > {};
\n-
\n-
288
\n-
289/* ************************************************************************* */
\n-
294template <class T>
\n-
\n-\n-
296 protected:
\n-\n-
298 using This = NonlinearEquality2<T>;
\n-
299
\n-
300 GTSAM_CONCEPT_MANIFOLD_TYPE(T)
\n-
301
\n-
302
\n-\n-
304
\n-
305 public:
\n-
306 typedef boost::shared_ptr<NonlinearEquality2<T>> shared_ptr;
\n-
307
\n-
\n-
314 NonlinearEquality2(Key key1, Key key2, double mu = 1e4)
\n-
315 : Base(noiseModel::Constrained::All(traits<T>::dimension, std::abs(mu)),
\n-
316 key1, key2) {}
\n-
\n-
317 ~NonlinearEquality2() override {}
\n-
318
\n-
\n-
320 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
321 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
322 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
323 }
\n-
\n-
324
\n-
\n-\n-
327 const T& x1, const T& x2, boost::optional<Matrix&> H1 = boost::none,
\n-
328 boost::optional<Matrix&> H2 = boost::none) const override {
\n-
329 static const size_t p = traits<T>::dimension;
\n-
330 if (H1) *H1 = -Matrix::Identity(p, p);
\n-
331 if (H2) *H2 = Matrix::Identity(p, p);
\n-
332 return traits<T>::Local(x1, x2);
\n-
333 }
\n-
\n-
334
\n-\n-
336
\n-
337 private:
\n-\n-
340 template <class ARCHIVE>
\n-
341 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
342 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n-
343 ar& boost::serialization::make_nvp(
\n-
344 "NoiseModelFactor2", boost::serialization::base_object<Base>(*this));
\n-
345 }
\n-
346};
\n-
\n-
347// \\NonlinearEquality2
\n+
279 VectorValues gradientAtZero() const;
\n+
280
\n+
282
\n+
283 protected:
\n+
285 void recalculate(const ISAM2UpdateParams& updateParams,
\n+
286 const KeySet& relinKeys, ISAM2Result* result);
\n+
287
\n+
288 // Do a batch step - reorder and relinearize all variables
\n+
289 void recalculateBatch(const ISAM2UpdateParams& updateParams,
\n+
290 KeySet* affectedKeysSet, ISAM2Result* result);
\n+
291
\n+
292 // retrieve all factors that ONLY contain the affected variables
\n+
293 // (note that the remaining stuff is summarized in the cached factors)
\n+
294 GaussianFactorGraph relinearizeAffectedFactors(
\n+
295 const ISAM2UpdateParams& updateParams, const FastList<Key>& affectedKeys,
\n+
296 const KeySet& relinKeys);
\n+
297
\n+
309 void recalculateIncremental(const ISAM2UpdateParams& updateParams,
\n+
310 const KeySet& relinKeys,
\n+
311 const FastList<Key>& affectedKeys,
\n+
312 KeySet* affectedKeysSet, Cliques* orphans,
\n+
313 ISAM2Result* result);
\n+
314
\n+
320 void addVariables(const Values& newTheta,
\n+
321 ISAM2Result::DetailedResults* detail = 0);
\n+
322
\n+
326 void removeVariables(const KeySet& unusedKeys);
\n+
327
\n+
328 void updateDelta(bool forceFullSolve = false) const;
\n+
329
\n+
330 private:
\n+
332 friend class boost::serialization::access;
\n+
333 template<class ARCHIVE>
\n+
334 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
335 ar & boost::serialization::base_object<BayesTree<ISAM2Clique> >(*this);
\n+
336 ar & BOOST_SERIALIZATION_NVP(theta_);
\n+
337 ar & BOOST_SERIALIZATION_NVP(variableIndex_);
\n+
338 ar & BOOST_SERIALIZATION_NVP(delta_);
\n+
339 ar & BOOST_SERIALIZATION_NVP(deltaNewton_);
\n+
340 ar & BOOST_SERIALIZATION_NVP(RgProd_);
\n+
341 ar & BOOST_SERIALIZATION_NVP(deltaReplacedMask_);
\n+
342 ar & BOOST_SERIALIZATION_NVP(nonlinearFactors_);
\n+
343 ar & BOOST_SERIALIZATION_NVP(linearFactors_);
\n+
344 ar & BOOST_SERIALIZATION_NVP(doglegDelta_);
\n+
345 ar & BOOST_SERIALIZATION_NVP(fixedVariables_);
\n+
346 ar & BOOST_SERIALIZATION_NVP(update_count_);
\n+
347 }
\n
348
\n-
349template <typename VALUE>
\n-
\n-
350struct traits<NonlinearEquality2<VALUE>> : Testable<NonlinearEquality2<VALUE>> {
\n-
351};
\n-
\n-
352
\n-
353}// namespace gtsam
\n-
Base class and basic functions for Manifold types.
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Concept check for values that can be used in unit tests.
\n-
Non-linear factor base classes.
\n+
349}; // ISAM2
\n+
\n+
350
\n+
352template <>
\n+
353struct traits<ISAM2> : public Testable<ISAM2> {};
\n+
354
\n+
355} // namespace gtsam
\n+
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n+
Class that stores detailed iSAM2 result.
\n+
Parameters for iSAM 2.
\n+
Specialized iSAM2 Clique.
\n+
Class that stores extra params for ISAM2::update()
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n+
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+\n+
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n-
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n-
static shared_ptr All(size_t dim)
Fully constrained variations.
Definition NoiseModel.h:457
\n-
An equality factor that forces either one variable to a constant, or a set of variables to be equal t...
Definition NonlinearEquality.h:45
\n-
double error(const Values &c) const override
Actual error function calculation.
Definition NonlinearEquality.h:130
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Print.
Definition NonlinearEquality.h:109
\n-
std::function< bool(const T &, const T &)> CompareFunction
Function that compares two values.
Definition NonlinearEquality.h:70
\n-
NonlinearEquality()
Default constructor - only for serialization.
Definition NonlinearEquality.h:74
\n-
bool equals(const NonlinearFactor &f, double tol=1e-9) const override
Check if two factors are equal.
Definition NonlinearEquality.h:119
\n-
NonlinearEquality(Key j, const T &feasible, double error_gain, const CompareFunction &_compare=std::bind(traits< T >::Equals, std::placeholders::_1, std::placeholders::_2, 1e-9))
Constructor - allows inexact evaluation.
Definition NonlinearEquality.h:97
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition NonlinearEquality.h:172
\n-
Vector evaluateError(const T &xj, boost::optional< Matrix & > H=boost::none) const override
Error function.
Definition NonlinearEquality.h:141
\n-
friend class boost::serialization::access
Serialization function.
Definition NonlinearEquality.h:184
\n-
NonlinearEquality(Key j, const T &feasible, const CompareFunction &_compare=std::bind(traits< T >::Equals, std::placeholders::_1, std::placeholders::_2, 1e-9))
Constructor - forces exact evaluation.
Definition NonlinearEquality.h:86
\n-
GaussianFactor::shared_ptr linearize(const Values &x) const override
Linearize is over-written, because base linearization tries to whiten.
Definition NonlinearEquality.h:162
\n-
Simple unary equality constraint - fixes a value for a variable.
Definition NonlinearEquality.h:207
\n-
Vector evaluateError(const X &x1, boost::optional< Matrix & > H=boost::none) const override
g(x) with optional derivative
Definition NonlinearEquality.h:251
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition NonlinearEquality.h:245
\n-
boost::shared_ptr< NonlinearEquality1< VALUE > > shared_ptr
fixed value for variable
Definition NonlinearEquality.h:227
\n-
NonlinearEquality1(const X &value, Key key, double mu=1000.0)
Constructor.
Definition NonlinearEquality.h:235
\n-
NonlinearEquality1()
Default constructor to allow for serialization.
Definition NonlinearEquality.h:217
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Print.
Definition NonlinearEquality.h:260
\n-
friend class boost::serialization::access
Serialization function.
Definition NonlinearEquality.h:273
\n-
Simple binary equality constraint - this constraint forces two variables to be the same.
Definition NonlinearEquality.h:295
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition NonlinearEquality.h:320
\n-
Vector evaluateError(const T &x1, const T &x2, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
g(x) with optional derivative2
Definition NonlinearEquality.h:326
\n-
NonlinearEquality2(Key key1, Key key2, double mu=1e4)
Constructor.
Definition NonlinearEquality.h:314
\n-
friend class boost::serialization::access
Serialization function.
Definition NonlinearEquality.h:339
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix > & > H=boost::none) const override
This implements the unwhitenedError virtual function by calling the n-key specific version of evaluat...
Definition NonlinearFactor.h:542
\n-
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n+
Bayes tree.
Definition BayesTree.h:67
\n+
boost::shared_ptr< Clique > sharedClique
Shared pointer to a clique.
Definition BayesTree.h:74
\n+
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
Implementation of the full ISAM2 algorithm for incremental nonlinear optimization.
Definition ISAM2.h:45
\n+
KeySet fixedVariables_
Set of variables that are involved with linear factors from marginalized variables and thus cannot ha...
Definition ISAM2.h:94
\n+
KeySet deltaReplacedMask_
A cumulative mask for the variables that were replaced and have not yet been updated in the linear so...
Definition ISAM2.h:76
\n+
int update_count_
Counter incremented every update(), used to determine periodic relinearization.
Definition ISAM2.h:96
\n+
VALUE calculateEstimate(Key key) const
Compute an estimate for a single variable using its incomplete linear delta computed during the last ...
Definition ISAM2.h:224
\n+
virtual ~ISAM2()
default virtual destructor
Definition ISAM2.h:114
\n+
const KeySet & getFixedVariables() const
Access the nonlinear variable index.
Definition ISAM2.h:265
\n+
Base::Cliques Cliques
List of Cliques.
Definition ISAM2.h:104
\n+
void printStats() const
prints out clique statistics
Definition ISAM2.h:270
\n+
NonlinearFactorGraph nonlinearFactors_
All original nonlinear factors are stored here to use during relinearization.
Definition ISAM2.h:81
\n+
const VariableIndex & getVariableIndex() const
Access the nonlinear variable index.
Definition ISAM2.h:262
\n+
Base::sharedClique sharedClique
Shared pointer to a clique.
Definition ISAM2.h:103
\n+
VectorValues delta_
The linear delta from the last linear solution, an update to the estimate in theta.
Definition ISAM2.h:61
\n+
VariableIndex variableIndex_
VariableIndex lets us look up factors by involved variable and keeps track of dimensions.
Definition ISAM2.h:52
\n+
const Values & getLinearizationPoint() const
Access the current linearization point.
Definition ISAM2.h:205
\n+
Values theta_
The current linearization point.
Definition ISAM2.h:48
\n+
ISAM2Params params_
The current parameters.
Definition ISAM2.h:87
\n+
boost::optional< double > doglegDelta_
The current Dogleg Delta (trust region radius)
Definition ISAM2.h:90
\n+
GaussianFactorGraph linearFactors_
The current linear factors, which are only updated as needed.
Definition ISAM2.h:84
\n+
const NonlinearFactorGraph & getFactorsUnsafe() const
Access the set of nonlinear factors.
Definition ISAM2.h:257
\n+
bool valueExists(Key key) const
Check whether variable with given key exists in linearization point.
Definition ISAM2.h:208
\n+
Specialized Clique structure for ISAM2, incorporating caching and gradient contribution TODO: more do...
Definition ISAM2Clique.h:37
\n+
Definition ISAM2Params.h:135
\n+
This struct is returned from ISAM2::update() and contains information about the update that is useful...
Definition ISAM2Result.h:41
\n+
A struct holding detailed results, which must be enabled with ISAM2Params::enableDetailedResults.
Definition ISAM2Result.h:117
\n+
This struct is used by ISAM2::update() to pass additional parameters to give the user a fine-grained ...
Definition ISAM2UpdateParams.h:32
\n+
Definition NonlinearFactorGraph.h:55
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n+
bool exists(Key j) const
Check if a value exists with key j.
Definition Values.cpp:94
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,494 +1,373 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearEquality.h\n+ISAM2.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file NonlinearEquality.h\n-14 * @brief Factor to handle enforced equality between factors\n-15 * @author Alex Cunningham\n-16 */\n-17\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-23\n-24#include \n-25\n-26#include \n-27#include \n-28#include \n+19// \\callgraph\n+20\n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n 29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n+30#include \n 31\n-44template\n-_\b4_\b5class _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-46\n-47public:\n-48 typedef VALUE T;\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+_\b4_\b5class GTSAM_EXPORT _\bI_\bS_\bA_\bM_\b2 : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be {\n+46 protected:\n+_\b4_\b8 _\bV_\ba_\bl_\bu_\be_\bs _\bt_\bh_\be_\bt_\ba_\b_;\n 49\n-50private:\n-51\n-52 // feasible value\n-53 T feasible_;\n-54\n-55 // error handling flag\n-56 bool allow_error_;\n-57\n-58 // error gain in allow error case\n-59 double error_gain_;\n-60\n-61 // typedef to this class\n-62 using This = _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b<_\bV_\bA_\bL_\bU_\bE_\b>;\n-63\n-64 // typedef to base class\n-65 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b>;\n-66\n-67public:\n-68\n-_\b7_\b0 using _\bC_\bo_\bm_\bp_\ba_\br_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn = std::function;\n-71 _\bC_\bo_\bm_\bp_\ba_\br_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn compare_;\n-72\n-_\b7_\b4 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by() {\n-75 }\n-76\n-77 _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by() override {\n-78 }\n-79\n+_\b5_\b2 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b_;\n+53\n+_\b6_\b1 mutable _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bd_\be_\bl_\bt_\ba_\b_;\n+62\n+63 mutable _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs deltaNewton_; // Only used when using Dogleg - stores\n+64 // the Gauss-Newton update\n+65 mutable _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs RgProd_; // Only used when using Dogleg - stores R*g\n+and\n+66 // is updated incrementally\n+67\n+_\b7_\b6 mutable _\bK_\be_\by_\bS_\be_\bt _\bd_\be_\bl_\bt_\ba_\bR_\be_\bp_\bl_\ba_\bc_\be_\bd_\bM_\ba_\bs_\bk_\b_; // TODO(dellaert): Make sure accessed in\n+77 // the right way\n+78\n+_\b8_\b1 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b_;\n 82\n-_\b8_\b6 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by(_\bK_\be_\by j, const T& feasible,\n-87 const _\bC_\bo_\bm_\bp_\ba_\br_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn &_compare = std::bind(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs,\n-88 std::placeholders::_1, std::placeholders::_2, 1e-9)) :\n-89 _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(_\bt_\br_\ba_\bi_\bt_\bs::GetDimension(feasible)),\n-90 j), feasible_(feasible), allow_error_(false), error_gain_(0.0), //\n-91 compare_(_compare) {\n-92 }\n-93\n-_\b9_\b7 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by(_\bK_\be_\by j, const T& feasible, double error_gain,\n-98 const _\bC_\bo_\bm_\bp_\ba_\br_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn &_compare = std::bind(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs,\n-99 std::placeholders::_1, std::placeholders::_2, 1e-9)) :\n-100 _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(_\bt_\br_\ba_\bi_\bt_\bs::GetDimension(feasible)),\n-101 j), feasible_(feasible), allow_error_(true), error_gain_(error_gain), //\n-102 compare_(_compare) {\n-103 }\n-104\n+_\b8_\b4 mutable _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b_;\n+85\n+_\b8_\b7 _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs _\bp_\ba_\br_\ba_\bm_\bs_\b_;\n+88\n+_\b9_\b0 mutable boost::optional _\bd_\bo_\bg_\bl_\be_\bg_\bD_\be_\bl_\bt_\ba_\b_;\n+91\n+_\b9_\b4 _\bK_\be_\by_\bS_\be_\bt _\bf_\bi_\bx_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\b_;\n+95\n+_\b9_\b6 int _\bu_\bp_\bd_\ba_\bt_\be_\b__\bc_\bo_\bu_\bn_\bt_\b_;\n+98\n+99 public:\n+_\b1_\b0_\b0 using _\bT_\bh_\bi_\bs = _\bI_\bS_\bA_\bM_\b2;\n+_\b1_\b0_\b1 using _\bB_\ba_\bs_\be = _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b>;\n+_\b1_\b0_\b2 using _\bC_\bl_\bi_\bq_\bu_\be = _\bB_\ba_\bs_\be_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be;\n+_\b1_\b0_\b3 using _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be = _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be;\n+_\b1_\b0_\b4 using _\bC_\bl_\bi_\bq_\bu_\be_\bs = Base::Cliques;\n+105\n+107 explicit _\bI_\bS_\bA_\bM_\b2(const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs& params);\n 108\n-_\b1_\b0_\b9 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-110 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n-111 std::cout << (s.empty() ? s : s + \" \") << \"Constraint: on [\"\n-112 << keyFormatter(this->_\bk_\be_\by()) << \"]\\n\";\n-113 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(feasible_, \"Feasible Point:\\n\");\n-114 std::cout << \"Variable Dimension: \" << _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(feasible_)\n-115 << std::endl;\n-116 }\n-117\n-_\b1_\b1_\b9 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& f, double tol = 1e-9) const override {\n-120 const This* e = dynamic_cast(&f);\n-121 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(f) && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(feasible_,e->feasible_,\n-tol)\n-122 && std::abs(error_gain_ - e->error_gain_) < tol;\n-123 }\n-124\n-128\n-_\b1_\b3_\b0 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override {\n-131 const T& xj = c._\ba_\bt(this->_\bk_\be_\by());\n-132 Vector e = this->_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(c);\n-133 if (allow_error_ || !compare_(xj, feasible_)) {\n-134 return error_gain_ * _\bd_\bo_\bt(e, e);\n-135 } else {\n-136 return 0.0;\n-137 }\n-138 }\n-139\n-_\b1_\b4_\b1 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const T& xj,\n-142 boost::optional H = boost::none) const override {\n-143 const size_t nj = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(feasible_);\n-144 if (allow_error_) {\n-145 if (H)\n-146 *H = Matrix::Identity(nj,nj); // FIXME: this is not the right linearization\n-for nonlinear compare\n-147 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(xj,feasible_);\n-148 } else if (compare_(feasible_, xj)) {\n-149 if (H)\n-150 *H = Matrix::Identity(nj,nj);\n-151 return Vector::Zero(nj); // set error to zero if equal\n-152 } else {\n-153 if (H)\n-154 throw std::invalid_argument(\n-155 \"Linearization point not feasible for \"\n-156 + DefaultKeyFormatter(this->_\bk_\be_\by()) + \"!\");\n-157 return Vector::Constant(nj, std::numeric_limits::infinity()); /\n-/ set error to infinity if not equal\n-158 }\n-159 }\n-160\n-_\b1_\b6_\b2 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& x) const override {\n-163 const T& xj = x._\ba_\bt(this->_\bk_\be_\by());\n-164 Matrix A;\n-165 Vector b = _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(xj, A);\n-166 SharedDiagonal model = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bA_\bl_\bl(b.size());\n-167 return _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br(\n-168 new _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(this->_\bk_\be_\by(), A, b, model));\n-169 }\n-170\n-_\b1_\b7_\b2 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-173 return boost::static_pointer_cast(\n-174 gtsam::NonlinearFactor::shared_ptr(new This(*this)));\n-175 }\n-176\n-178\n-179 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-180\n-181private:\n-182\n-_\b1_\b8_\b4 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-185 template\n-186 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-187 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n-compatibility\n-188 ar\n-189 & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n-190 boost::serialization::base_object(*this));\n-191 ar & BOOST_SERIALIZATION_NVP(feasible_);\n-192 ar & BOOST_SERIALIZATION_NVP(allow_error_);\n-193 ar & BOOST_SERIALIZATION_NVP(error_gain_);\n-194 }\n-195\n-196};\n-197// \\class NonlinearEquality\n-198\n-199template \n-_\b2_\b0_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by> : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be>\n-{};\n-201\n-202/* *************************************************************************\n-*/\n-206template\n-_\b2_\b0_\b7class _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-208\n-209public:\n-210 typedef VALUE X;\n-211\n-212protected:\n-213 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b> _\bB_\ba_\bs_\be;\n-214 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b<_\bV_\bA_\bL_\bU_\bE_\b> This;\n-215\n-_\b2_\b1_\b7 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1() {\n-218 }\n-219\n-220 X value_;\n-221\n-222 GTSAM_CONCEPT_MANIFOLD_TYPE(X)\n-223 GTSAM_CONCEPT_TESTABLE_TYPE(X)\n-224\n-225public:\n-226\n-_\b2_\b2_\b7 typedef boost::shared_ptr > _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+111 _\bI_\bS_\bA_\bM_\b2();\n+112\n+_\b1_\b1_\b4 virtual _\b~_\bI_\bS_\bA_\bM_\b2() {}\n+115\n+117 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bI_\bS_\bA_\bM_\b2& other, double tol = 1e-9) const;\n+118\n+151 virtual _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt update(\n+152 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors = _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(),\n+153 const _\bV_\ba_\bl_\bu_\be_\bs& newTheta = _\bV_\ba_\bl_\bu_\be_\bs(),\n+154 const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& removeFactorIndices = _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs(),\n+155 const boost::optional<_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bi_\bn_\bt_\b> >& constrainedKeys = boost::none,\n+156 const boost::optional<_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b> >& noRelinKeys = boost::none,\n+157 const boost::optional<_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b> >& extraReelimKeys = boost::none,\n+158 bool force_relinearize = false);\n+159\n+178 virtual _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt update(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n+179 const _\bV_\ba_\bl_\bu_\be_\bs& newTheta,\n+180 const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams);\n+181\n+199 void marginalizeLeaves(\n+200 const _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b>& leafKeys,\n+201 boost::optional marginalFactorsIndices = boost::none,\n+202 boost::optional deletedFactorsIndices = boost::none);\n+203\n+_\b2_\b0_\b5 const _\bV_\ba_\bl_\bu_\be_\bs& _\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt() const { return theta_; }\n+206\n+_\b2_\b0_\b8 bool _\bv_\ba_\bl_\bu_\be_\bE_\bx_\bi_\bs_\bt_\bs(_\bK_\be_\by key) const { return theta_._\be_\bx_\bi_\bs_\bt_\bs(key); }\n+209\n+215 _\bV_\ba_\bl_\bu_\be_\bs calculateEstimate() const;\n+216\n+223 template \n+_\b2_\b2_\b4 VALUE _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be(_\bK_\be_\by key) const {\n+225 const Vector& delta = getDelta()[key];\n+226 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(theta_._\ba_\bt(key), delta);\n+227 }\n 228\n-_\b2_\b3_\b5 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1(const X& value, _\bK_\be_\by _\bk_\be_\by, double mu = 1000.0)\n-236 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(_\bt_\br_\ba_\bi_\bt_\bs::GetDimension(value),\n-237 std::abs(mu)),\n-238 _\bk_\be_\by),\n-239 value_(value) {}\n-240\n-241 _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1() override {\n-242 }\n-243\n-_\b2_\b4_\b5 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-246 return boost::static_pointer_cast(\n-247 gtsam::NonlinearFactor::shared_ptr(new This(*this)));\n-248 }\n+237 const _\bV_\ba_\bl_\bu_\be& calculateEstimate(_\bK_\be_\by key) const;\n+238\n+240 Matrix marginalCovariance(_\bK_\be_\by key) const;\n+241\n+244\n+248 _\bV_\ba_\bl_\bu_\be_\bs calculateBestEstimate() const;\n 249\n-_\b2_\b5_\b1 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const X& x1,\n-252 boost::optional H = boost::none) const override {\n-253 if (H)\n-254 (*H) = Matrix::Identity(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(x1),_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-(x1));\n-255 // manifold equivalent of h(x)-z -> log(z,h(x))\n-256 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(value_,x1);\n-257 }\n-258\n-_\b2_\b6_\b0 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-261 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n-262 std::cout << s << \": NonlinearEquality1(\" << keyFormatter(this->_\bk_\be_\by())\n-263 << \"),\" << \"\\n\";\n-264 this->noiseModel_->print();\n-265 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(value_, \"Value\");\n-266 }\n-267\n-268 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-269\n-270private:\n+251 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& getDelta() const;\n+252\n+254 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+255\n+_\b2_\b5_\b7 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be() const {\n+258 return nonlinearFactors_;\n+259 }\n+260\n+_\b2_\b6_\b2 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& _\bg_\be_\bt_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx() const { return variableIndex_; }\n+263\n+_\b2_\b6_\b5 const _\bK_\be_\by_\bS_\be_\bt& _\bg_\be_\bt_\bF_\bi_\bx_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs() const { return fixedVariables_; }\n+266\n+267 const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs& params() const { return params_; }\n+268\n+_\b2_\b7_\b0 void _\bp_\br_\bi_\bn_\bt_\bS_\bt_\ba_\bt_\bs() const { getCliqueData().getStats().print(); }\n 271\n-_\b2_\b7_\b3 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-274 template\n-275 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-276 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n-compatibility\n-277 ar\n-278 & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n-279 boost::serialization::base_object(*this));\n-280 ar & BOOST_SERIALIZATION_NVP(value_);\n-281 }\n-282};\n-283// \\NonlinearEquality1\n-284\n-285template \n-_\b2_\b8_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1 >\n-287 : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n-288\n-289/* *************************************************************************\n-*/\n-294template \n-_\b2_\b9_\b5class _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2 : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-296 protected:\n-297 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bT_\b,_\b _\bT_\b>;\n-298 using This = _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2_\b<_\bT_\b>;\n-299\n-300 GTSAM_CONCEPT_MANIFOLD_TYPE(T)\n-301\n-302\n-_\b3_\b0_\b3 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2() {}\n-304\n-305 public:\n-306 typedef boost::shared_ptr> shared_ptr;\n-307\n-_\b3_\b1_\b4 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2(_\bK_\be_\by key1, _\bK_\be_\by key2, double mu = 1e4)\n-315 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(_\bt_\br_\ba_\bi_\bt_\bs::dimension, std::abs(mu)),\n-316 key1, key2) {}\n-317 _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2() override {}\n-318\n-_\b3_\b2_\b0 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-321 return boost::static_pointer_cast(\n-322 gtsam::NonlinearFactor::shared_ptr(new This(*this)));\n-323 }\n-324\n-_\b3_\b2_\b6 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(\n-327 const T& x1, const T& x2, boost::optional H1 = boost::none,\n-328 boost::optional H2 = boost::none) const override {\n-329 static const size_t p = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-330 if (H1) *H1 = -Matrix::Identity(p, p);\n-331 if (H2) *H2 = Matrix::Identity(p, p);\n-332 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(x1, x2);\n-333 }\n-334\n-335 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-336\n-337 private:\n-_\b3_\b3_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-340 template \n-341 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-342 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n-compatibility\n-343 ar& boost::serialization::make_nvp(\n-344 \"NoiseModelFactor2\", boost::serialization::base_object(*this));\n-345 }\n-346};\n-347// \\NonlinearEquality2\n+279 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const;\n+280\n+282\n+283 protected:\n+285 void recalculate(const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams,\n+286 const _\bK_\be_\by_\bS_\be_\bt& relinKeys, _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt* result);\n+287\n+288 // Do a batch step - reorder and relinearize all variables\n+289 void recalculateBatch(const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams,\n+290 _\bK_\be_\by_\bS_\be_\bt* affectedKeysSet, _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt* result);\n+291\n+292 // retrieve all factors that ONLY contain the affected variables\n+293 // (note that the remaining stuff is summarized in the cached factors)\n+294 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh relinearizeAffectedFactors(\n+295 const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams, const _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b>& affectedKeys,\n+296 const _\bK_\be_\by_\bS_\be_\bt& relinKeys);\n+297\n+309 void recalculateIncremental(const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams,\n+310 const _\bK_\be_\by_\bS_\be_\bt& relinKeys,\n+311 const _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b>& affectedKeys,\n+312 _\bK_\be_\by_\bS_\be_\bt* affectedKeysSet, Cliques* orphans,\n+313 _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt* result);\n+314\n+320 void addVariables(const _\bV_\ba_\bl_\bu_\be_\bs& newTheta,\n+321 _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs* detail = 0);\n+322\n+326 void removeVariables(const _\bK_\be_\by_\bS_\be_\bt& unusedKeys);\n+327\n+328 void updateDelta(bool forceFullSolve = false) const;\n+329\n+330 private:\n+_\b3_\b3_\b2 friend class boost::serialization::access;\n+333 template\n+334 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+335 ar & boost::serialization::base_object >(*this);\n+336 ar & BOOST_SERIALIZATION_NVP(theta_);\n+337 ar & BOOST_SERIALIZATION_NVP(variableIndex_);\n+338 ar & BOOST_SERIALIZATION_NVP(delta_);\n+339 ar & BOOST_SERIALIZATION_NVP(deltaNewton_);\n+340 ar & BOOST_SERIALIZATION_NVP(RgProd_);\n+341 ar & BOOST_SERIALIZATION_NVP(deltaReplacedMask_);\n+342 ar & BOOST_SERIALIZATION_NVP(nonlinearFactors_);\n+343 ar & BOOST_SERIALIZATION_NVP(linearFactors_);\n+344 ar & BOOST_SERIALIZATION_NVP(doglegDelta_);\n+345 ar & BOOST_SERIALIZATION_NVP(fixedVariables_);\n+346 ar & BOOST_SERIALIZATION_NVP(update_count_);\n+347 }\n 348\n-349template \n-_\b3_\b5_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2> :\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {\n-351};\n-352\n-353}// namespace gtsam\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+349}; // ISAM2\n+350\n+352template <>\n+_\b3_\b5_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bI_\bS_\bA_\bM_\b2> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+354\n+355} // namespace gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n+_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh\n+Class that stores detailed iSAM2 result.\n+_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+Parameters for iSAM 2.\n+_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b._\bh\n+Specialized iSAM2 Clique.\n+_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+Class that stores extra params for ISAM2::update()\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+FastVector< FactorIndex > FactorIndices\n+Define collection types:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList is a thin wrapper around std::list that uses the boost\n+fast_pool_allocator instead of the de...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor in the squared-error form.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bA_\bl_\bl\n-static shared_ptr All(size_t dim)\n-Fully constrained variations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:457\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by\n-An equality factor that forces either one variable to a constant, or a set of\n-variables to be equal t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &c) const override\n-Actual error function calculation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-Print.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bC_\bo_\bm_\bp_\ba_\br_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n-std::function< bool(const T &, const T &)> CompareFunction\n-Function that compares two values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by\n-NonlinearEquality()\n-Default constructor - only for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &f, double tol=1e-9) const override\n-Check if two factors are equal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:119\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by\n-NonlinearEquality(Key j, const T &feasible, double error_gain, const\n-CompareFunction &_compare=std::bind(traits< T >::Equals, std::placeholders::_1,\n-std::placeholders::_2, 1e-9))\n-Constructor - allows inexact evaluation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:172\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const T &xj, boost::optional< Matrix & > H=boost::none)\n-const override\n-Error function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by\n-NonlinearEquality(Key j, const T &feasible, const CompareFunction\n-&_compare=std::bind(traits< T >::Equals, std::placeholders::_1, std::\n-placeholders::_2, 1e-9))\n-Constructor - forces exact evaluation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-GaussianFactor::shared_ptr linearize(const Values &x) const override\n-Linearize is over-written, because base linearization tries to whiten.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:162\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1\n-Simple unary equality constraint - fixes a value for a variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const X &x1, boost::optional< Matrix & > H=boost::none)\n-const override\n-g(x) with optional derivative\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:251\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:245\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< NonlinearEquality1< VALUE > > shared_ptr\n-fixed value for variable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:227\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1\n-NonlinearEquality1(const X &value, Key key, double mu=1000.0)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:235\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1\n-NonlinearEquality1()\n-Default constructor to allow for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:217\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-Print.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:273\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2\n-Simple binary equality constraint - this constraint forces two variables to be\n-the same.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:295\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:320\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const T &x1, const T &x2, boost::optional< Matrix & >\n-H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override\n-g(x) with optional derivative2\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:326\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2\n-NonlinearEquality2(Key key1, Key key2, double mu=1e4)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:314\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:339\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-const SharedNoiseModel & noiseModel() const\n-access to the noise model\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n-Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix >\n-& > H=boost::none) const override\n-This implements the unwhitenedError virtual function by calling the n-key\n-specific version of evaluat...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:542\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>_\b:_\b:_\bk_\be_\by\n-Key key() const\n-Returns a key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n+This is the base class for any type to be stored in Values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\b _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be\n+boost::shared_ptr< Clique > sharedClique\n+Shared pointer to a clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+The VariableIndex class computes and stores the block column structure of a\n+factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2\n+Implementation of the full ISAM2 algorithm for incremental nonlinear\n+optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bf_\bi_\bx_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\b_\n+KeySet fixedVariables_\n+Set of variables that are involved with linear factors from marginalized\n+variables and thus cannot ha...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bR_\be_\bp_\bl_\ba_\bc_\be_\bd_\bM_\ba_\bs_\bk_\b_\n+KeySet deltaReplacedMask_\n+A cumulative mask for the variables that were replaced and have not yet been\n+updated in the linear so...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\b__\bc_\bo_\bu_\bn_\bt_\b_\n+int update_count_\n+Counter incremented every update(), used to determine periodic relinearization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be\n+VALUE calculateEstimate(Key key) const\n+Compute an estimate for a single variable using its incomplete linear delta\n+computed during the last ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:224\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\b~_\bI_\bS_\bA_\bM_\b2\n+virtual ~ISAM2()\n+default virtual destructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bg_\be_\bt_\bF_\bi_\bx_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+const KeySet & getFixedVariables() const\n+Access the nonlinear variable index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:265\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be_\bs\n+Base::Cliques Cliques\n+List of Cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt_\bS_\bt_\ba_\bt_\bs\n+void printStats() const\n+prints out clique statistics\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:270\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b_\n+NonlinearFactorGraph nonlinearFactors_\n+All original nonlinear factors are stored here to use during relinearization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bg_\be_\bt_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+const VariableIndex & getVariableIndex() const\n+Access the nonlinear variable index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:262\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be\n+Base::sharedClique sharedClique\n+Shared pointer to a clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bd_\be_\bl_\bt_\ba_\b_\n+VectorValues delta_\n+The linear delta from the last linear solution, an update to the estimate in\n+theta.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b_\n+VariableIndex variableIndex_\n+VariableIndex lets us look up factors by involved variable and keeps track of\n+dimensions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt\n+const Values & getLinearizationPoint() const\n+Access the current linearization point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:205\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bt_\bh_\be_\bt_\ba_\b_\n+Values theta_\n+The current linearization point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs_\b_\n+ISAM2Params params_\n+The current parameters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bd_\bo_\bg_\bl_\be_\bg_\bD_\be_\bl_\bt_\ba_\b_\n+boost::optional< double > doglegDelta_\n+The current Dogleg Delta (trust region radius)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:90\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b_\n+GaussianFactorGraph linearFactors_\n+The current linear factors, which are only updated as needed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be\n+const NonlinearFactorGraph & getFactorsUnsafe() const\n+Access the set of nonlinear factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:257\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bv_\ba_\bl_\bu_\be_\bE_\bx_\bi_\bs_\bt_\bs\n+bool valueExists(Key key) const\n+Check whether variable with given key exists in linearization point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:208\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n+Specialized Clique structure for ISAM2, incorporating caching and gradient\n+contribution TODO: more do...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt\n+This struct is returned from ISAM2::update() and contains information about the\n+update that is useful...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs\n+A struct holding detailed results, which must be enabled with ISAM2Params::\n+enableDetailedResults.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs\n+This struct is used by ISAM2::update() to pass additional parameters to give\n+the user a fine-grained ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n const ValueType at(Key j) const\n Retrieve a variable by key j.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n+bool exists(Key j) const\n+Check if a value exists with key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:94\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * N\bNo\bon\bnl\bli\bin\bne\bea\bar\brE\bEq\bqu\bua\bal\bli\bit\bty\by.\b.h\bh\n+ * _\bI_\bS_\bA_\bM_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01010.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01010.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExpressionFactorGraph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,44 @@\n \n \n \n \n \n
\n \n-
ExpressionFactorGraph.h File Reference
\n+Namespaces |\n+Functions
\n+
ISAM2-impl.cpp File Reference
\n \n
\n \n-

Factor graph that supports adding ExpressionFactors directly. \n+

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::ExpressionFactorGraph
 Factor graph that supports adding ExpressionFactors directly. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Functions

\n+void gtsam::internal::updateRgProd (const ISAM2::sharedClique &clique, const KeySet &replacedKeys, const VectorValues &grad, VectorValues *RgProd, size_t *varsUpdated)
 
\n

Detailed Description

\n-

Factor graph that supports adding ExpressionFactors directly.

\n-
Author
Frank Dellaert
\n-
Date
December 2014
\n+

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.

\n+
Author
Michael Kaess
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ExpressionFactorGraph.h File Reference\n-Factor graph that supports adding ExpressionFactors directly. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-\u00a0 _\bF_\ba_\bc_\bt_\bo_\br graph that supports adding ExpressionFactors directly. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ISAM2-impl.cpp File Reference\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:u\bup\bpd\bda\bat\bte\beR\bRg\bgP\bPr\bro\bod\bd (const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be &clique, const\n+ _\bK_\be_\by_\bS_\be_\bt &replacedKeys, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &grad, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs *RgProd,\n+ size_t *varsUpdated)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor graph that supports adding ExpressionFactors directly.\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization.\n Author\n- Frank Dellaert\n- Date\n- December 2014\n+ Michael Kaess\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bI_\bS_\bA_\bM_\b2_\b-_\bi_\bm_\bp_\bl_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01013.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01013.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/FunctorizedFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtParams.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,62 +94,40 @@\n \n \n \n \n \n
\n \n-
FunctorizedFactor.h File Reference
\n+Namespaces
\n+
LevenbergMarquardtParams.cpp File Reference
\n \n
\n \n-

Go to the source code of this file.

\n+

Parameters for Levenberg-Marquardt trust-region scheme. \n+More...

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::FunctorizedFactor< R, T >
 Factor which evaluates provided unary functor and uses the result to compute error with respect to the provided measurement. More...
 
struct  gtsam::traits< FunctorizedFactor< R, T > >
 traits More...
 
class  gtsam::FunctorizedFactor2< R, T1, T2 >
 Factor which evaluates provided binary functor and uses the result to compute error with respect to the provided measurement. More...
 
struct  gtsam::traits< FunctorizedFactor2< R, T1, T2 > >
 traits More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

template<typename T , typename R , typename FUNC >
FunctorizedFactor< R, T > gtsam::MakeFunctorizedFactor (Key key, const R &z, const SharedNoiseModel &model, const FUNC func)
 Helper function to create a functorized factor.
 
template<typename T1 , typename T2 , typename R , typename FUNC >
FunctorizedFactor2< R, T1, T2 > gtsam::MakeFunctorizedFactor2 (Key key1, Key key2, const R &z, const SharedNoiseModel &model, const FUNC func)
 Helper function to create a functorized factor.
 
\n

Detailed Description

\n-
Date
May 31, 2020
\n-
Author
Varun Agrawal
\n+

Parameters for Levenberg-Marquardt trust-region scheme.

\n+
Author
Richard Roberts
\n+
\n+Frank Dellaert
\n+
\n+Luca Carlone
\n+
Date
Feb 26, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,51 +1,24 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-FunctorizedFactor.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bR_\b,_\b _\bT_\b _\b>\n-\u00a0 _\bF_\ba_\bc_\bt_\bo_\br which evaluates provided unary functor and uses the result to\n- compute error with respect to the provided measurement. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bR_\b,_\b _\bT_\b _\b>_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\b _\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b _\b>\n-\u00a0 _\bF_\ba_\bc_\bt_\bo_\br which evaluates provided binary functor and uses the result to\n- compute error with respect to the provided measurement. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\b _\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b _\b>_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+LevenbergMarquardtParams.cpp File Reference\n+Parameters for Levenberg-Marquardt trust-region scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br< R, T >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br (_\bK_\be_\by key, const R\n- &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const FUNC\n- func)\n-\u00a0 Helper function to create a functorized\n- factor.\n-\u00a0\n-template\n-_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2< R, T1, T2 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2 (_\bK_\be_\by key1, _\bK_\be_\by\n- key2, const R &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n- &model, const FUNC func)\n-\u00a0 Helper function to create a functorized\n- factor.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- May 31, 2020\n+Parameters for Levenberg-Marquardt trust-region scheme.\n Author\n- Varun Agrawal\n+ Richard Roberts\n+ Frank Dellaert\n+ Luca Carlone\n+ Date\n+ Feb 26, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01016.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01016.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression-inl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GaussNewtonOptimizer.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,60 +94,32 @@\n \n \n \n \n \n
\n \n-
Expression-inl.h File Reference
\n+Namespaces
\n+
GaussNewtonOptimizer.cpp File Reference
\n \n
\n-\n-

Internals for Expression.h, not for general consumption. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-

\n-Classes

struct  gtsam::internal::apply_compose< T >
 
struct  gtsam::internal::apply_compose< double >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

template<typename T >
Expression< T > gtsam::operator* (const Expression< T > &expression1, const Expression< T > &expression2)
 Construct a product expression, assumes T::compose(T) -> T.
 
template<typename T >
std::vector< Expression< T > > gtsam::createUnknowns (size_t n, char c, size_t start)
 Construct an array of leaves.
 
\n

Detailed Description

\n-

Internals for Expression.h, not for general consumption.

\n-
Date
September 18, 2014
\n-
Author
Frank Dellaert
\n-
\n-Paul Furgale
\n+
Author
Richard Roberts
\n+
Date
Feb 26, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,42 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Expression-inl.h File Reference\n-Internals for _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh, not for general consumption. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\ba_\bp_\bp_\bl_\by_\b__\bc_\bo_\bm_\bp_\bo_\bs_\be_\b<_\b _\bT_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\ba_\bp_\bp_\bl_\by_\b__\bc_\bo_\bm_\bp_\bo_\bs_\be_\b<_\b _\bd_\bo_\bu_\bb_\bl_\be_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GaussNewtonOptimizer.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b* (const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\n- &expression1, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\n- &expression2)\n-\u00a0 Construct a product expression, assumes T::\n- compose(T) -> T.\n-\u00a0\n-template\n-std::vector< _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs (size_t n, char c, size_t\n- start)\n-\u00a0 Construct an array of leaves.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Internals for _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh, not for general consumption.\n- Date\n- September 18, 2014\n Author\n- Frank Dellaert\n- Paul Furgale\n+ Richard Roberts\n+ Date\n+ Feb 26, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01019.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01019.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtParams.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExpressionFactorGraph.h File Reference\n \n \n \n \n \n \n \n@@ -96,47 +96,43 @@\n \n \n \n
\n \n-
LevenbergMarquardtParams.h File Reference
\n+
ExpressionFactorGraph.h File Reference
\n
\n
\n \n-

Parameters for Levenberg-Marquardt trust-region scheme. \n+

Factor graph that supports adding ExpressionFactors directly. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::LevenbergMarquardtParams
 Parameters for Levenberg-Marquardt optimization. More...
class  gtsam::ExpressionFactorGraph
 Factor graph that supports adding ExpressionFactors directly. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Parameters for Levenberg-Marquardt trust-region scheme.

\n-
Author
Richard Roberts
\n-
\n-Frank Dellaert
\n-
\n-Luca Carlone
\n-
Date
Feb 26, 2012
\n+

Factor graph that supports adding ExpressionFactors directly.

\n+
Author
Frank Dellaert
\n+
Date
December 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-LevenbergMarquardtParams.h File Reference\n-Parameters for Levenberg-Marquardt trust-region scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n+ExpressionFactorGraph.h File Reference\n+Factor graph that supports adding ExpressionFactors directly. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs\n-\u00a0 Parameters for Levenberg-Marquardt optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+\u00a0 _\bF_\ba_\bc_\bt_\bo_\br graph that supports adding ExpressionFactors directly. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Parameters for Levenberg-Marquardt trust-region scheme.\n+Factor graph that supports adding ExpressionFactors directly.\n Author\n- Richard Roberts\n Frank Dellaert\n- Luca Carlone\n Date\n- Feb 26, 2012\n+ December 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01019.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01019.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01019 = [\n- [\"gtsam::LevenbergMarquardtParams\", \"a04440.html\", \"a04440\"]\n+ [\"gtsam::ExpressionFactorGraph\", \"a04328.html\", \"a04328\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01019_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01019_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtParams.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExpressionFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -98,188 +98,67 @@\n
No Matches
\n \n \n \n \n \n
\n-
LevenbergMarquardtParams.h
\n+
ExpressionFactorGraph.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n-
22
\n-\n-\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/nonlinear/ExpressionFactor.h>
\n+\n+
23
\n+
24namespace gtsam {
\n
25
\n-
26namespace gtsam {
\n-
27
\n-
28class LevenbergMarquardtOptimizer;
\n-
29
\n-
\n-\n-
36
\n-
37public:
\n-
\n-\n-
40 SILENT = 0, SUMMARY, TERMINATION, LAMBDA, TRYLAMBDA, TRYCONFIG, DAMPED, TRYDELTA
\n-
41 };
\n+
\n+\n+
30
\n+
31public:
\n+
32
\n+
35
\n+
42 template<typename T>
\n+
\n+
43 void addExpressionFactor(const Expression<T>& h, const T& z,
\n+
44 const SharedNoiseModel& R) {
\n+
45 using F = ExpressionFactor<T>;
\n+
46 push_back(boost::allocate_shared<F>(Eigen::aligned_allocator<F>(), R, z, h));
\n+
47 }
\n
\n-
42
\n-
43 static VerbosityLM verbosityLMTranslator(const std::string &s);
\n-
44 static std::string verbosityLMTranslator(VerbosityLM value);
\n-
45 using OptimizerType = LevenbergMarquardtOptimizer;
\n-
46
\n-
47public:
\n
48
\n-\n-
50 double lambdaFactor;
\n-\n-\n-\n-\n-
55 std::string logFile;
\n-\n-\n-
58 double minDiagonal;
\n-
59 double maxDiagonal;
\n-
60
\n-\n-
62 : verbosityLM(SILENT),
\n-
63 diagonalDamping(false),
\n-
64 minDiagonal(1e-6),
\n-
65 maxDiagonal(1e32) {
\n-
66 SetLegacyDefaults(this);
\n-
67 }
\n-
68
\n-
69 static void SetLegacyDefaults(LevenbergMarquardtParams* p) {
\n-
70 // Relevant NonlinearOptimizerParams:
\n-
71 p->maxIterations = 100;
\n-
72 p->relativeErrorTol = 1e-5;
\n-
73 p->absoluteErrorTol = 1e-5;
\n-
74 // LM-specific:
\n-
75 p->lambdaInitial = 1e-5;
\n-
76 p->lambdaFactor = 10.0;
\n-
77 p->lambdaUpperBound = 1e5;
\n-
78 p->lambdaLowerBound = 0.0;
\n-
79 p->minModelFidelity = 1e-3;
\n-
80 p->diagonalDamping = false;
\n-
81 p->useFixedLambdaFactor = true;
\n-
82 }
\n-
83
\n-
84 // these do seem to work better for SFM
\n-
85 static void SetCeresDefaults(LevenbergMarquardtParams* p) {
\n-
86 // Relevant NonlinearOptimizerParams:
\n-
87 p->maxIterations = 50;
\n-
88 p->absoluteErrorTol = 0; // No corresponding option in CERES
\n-
89 p->relativeErrorTol = 1e-6; // This is function_tolerance
\n-
90 // LM-specific:
\n-
91 p->lambdaUpperBound = 1e32;
\n-
92 p->lambdaLowerBound = 1e-16;
\n-
93 p->lambdaInitial = 1e-04;
\n-
94 p->lambdaFactor = 2.0;
\n-
95 p->minModelFidelity = 1e-3; // options.min_relative_decrease in CERES
\n-
96 p->diagonalDamping = true;
\n-
97 p->useFixedLambdaFactor = false; // This is important
\n-
98 }
\n-
99
\n-
100 static LevenbergMarquardtParams LegacyDefaults() {
\n-
101 LevenbergMarquardtParams p;
\n-
102 SetLegacyDefaults(&p);
\n-
103 return p;
\n-
104 }
\n-
105
\n-
106 static LevenbergMarquardtParams CeresDefaults() {
\n-
107 LevenbergMarquardtParams p;
\n-
108 SetCeresDefaults(&p);
\n-
109 return p;
\n-
110 }
\n-
111
\n-
112 static LevenbergMarquardtParams EnsureHasOrdering(LevenbergMarquardtParams params,
\n-
113 const NonlinearFactorGraph& graph) {
\n-
114 if (!params.ordering)
\n-
115 params.ordering = Ordering::Create(params.orderingType, graph);
\n-
116 return params;
\n-
117 }
\n-
118
\n-
119 static LevenbergMarquardtParams ReplaceOrdering(LevenbergMarquardtParams params,
\n-
120 const Ordering& ordering) {
\n-
121 params.ordering = ordering;
\n-
122 return params;
\n-
123 }
\n-
124
\n-
125 ~LevenbergMarquardtParams() override {}
\n-
126 void print(const std::string& str = "") const override;
\n-
127
\n-
130 bool getDiagonalDamping() const { return diagonalDamping; }
\n-
131 double getlambdaFactor() const { return lambdaFactor; }
\n-
132 double getlambdaInitial() const { return lambdaInitial; }
\n-
133 double getlambdaLowerBound() const { return lambdaLowerBound; }
\n-
134 double getlambdaUpperBound() const { return lambdaUpperBound; }
\n-
135 bool getUseFixedLambdaFactor() { return useFixedLambdaFactor; }
\n-
136 std::string getLogFile() const { return logFile; }
\n-
137 std::string getVerbosityLM() const { return verbosityLMTranslator(verbosityLM);}
\n-
138
\n-
139 void setDiagonalDamping(bool flag) { diagonalDamping = flag; }
\n-
140 void setlambdaFactor(double value) { lambdaFactor = value; }
\n-
141 void setlambdaInitial(double value) { lambdaInitial = value; }
\n-
142 void setlambdaLowerBound(double value) { lambdaLowerBound = value; }
\n-
143 void setlambdaUpperBound(double value) { lambdaUpperBound = value; }
\n-
144 void setUseFixedLambdaFactor(bool flag) { useFixedLambdaFactor = flag;}
\n-
145 void setLogFile(const std::string& s) { logFile = s; }
\n-
146 void setVerbosityLM(const std::string& s) { verbosityLM = verbosityLMTranslator(s);}
\n-
147 // @}
\n-
150
\n-
\n-
152 boost::shared_ptr<NonlinearOptimizerParams> clone() const {
\n-
153 return boost::shared_ptr<NonlinearOptimizerParams>(new LevenbergMarquardtParams(*this));
\n-
154 }
\n+
50};
\n
\n-
155
\n-
157};
\n-
\n-
158
\n-
159}
\n-
Parameters for nonlinear optimization.
\n-
Factor Graph consisting of non-linear factors.
\n+
51
\n+
52}
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
This class performs Levenberg-Marquardt nonlinear optimization.
Definition LevenbergMarquardtOptimizer.h:35
\n-
Parameters for Levenberg-Marquardt optimization.
Definition LevenbergMarquardtParams.h:35
\n-
double lambdaFactor
The amount by which to multiply or divide lambda when adjusting lambda (default: 10....
Definition LevenbergMarquardtParams.h:50
\n-
double minDiagonal
when using diagonal damping saturates the minimum diagonal entries (default: 1e-6)
Definition LevenbergMarquardtParams.h:58
\n-
double lambdaUpperBound
The maximum lambda to try before assuming the optimization has failed (default: 1e5)
Definition LevenbergMarquardtParams.h:51
\n-
double lambdaInitial
The initial Levenberg-Marquardt damping term (default: 1e-5)
Definition LevenbergMarquardtParams.h:49
\n-
double maxDiagonal
when using diagonal damping saturates the maximum diagonal entries (default: 1e32)
Definition LevenbergMarquardtParams.h:59
\n-
double minModelFidelity
Lower bound for the modelFidelity to accept the result of an LM iteration.
Definition LevenbergMarquardtParams.h:54
\n-
double lambdaLowerBound
The minimum lambda used in LM (default: 0)
Definition LevenbergMarquardtParams.h:52
\n-
boost::shared_ptr< NonlinearOptimizerParams > clone() const
Definition LevenbergMarquardtParams.h:152
\n-
bool diagonalDamping
if true, use diagonal of Hessian
Definition LevenbergMarquardtParams.h:56
\n-
bool useFixedLambdaFactor
if true applies constant increase (or decrease) to lambda according to lambdaFactor
Definition LevenbergMarquardtParams.h:57
\n-
std::string logFile
an optional CSV log file, with [iteration, time, error, lambda]
Definition LevenbergMarquardtParams.h:55
\n-
VerbosityLM
See LevenbergMarquardtParams::verbosityLM.
Definition LevenbergMarquardtParams.h:39
\n-
VerbosityLM verbosityLM
The verbosity level for Levenberg-Marquardt (default: SILENT), see also NonlinearOptimizerParams::ver...
Definition LevenbergMarquardtParams.h:53
\n-
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n-
double absoluteErrorTol
The maximum absolute error decrease to stop iterating (default 1e-5)
Definition NonlinearOptimizerParams.h:43
\n-
size_t maxIterations
The maximum iterations to stop iterating (default 100)
Definition NonlinearOptimizerParams.h:41
\n-
double relativeErrorTol
The maximum relative error decrease to stop iterating (default 1e-5)
Definition NonlinearOptimizerParams.h:42
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition FactorGraph.h:186
\n+
Factor that supports arbitrary expressions via AD.
Definition ExpressionFactor.h:44
\n+
Expression class that supports automatic differentiation.
Definition Expression.h:48
\n+
Factor graph that supports adding ExpressionFactors directly.
Definition ExpressionFactorGraph.h:29
\n+
void addExpressionFactor(const Expression< T > &h, const T &z, const SharedNoiseModel &R)
Directly add ExpressionFactor that implements |h(x)-z|^2_R.
Definition ExpressionFactorGraph.h:43
\n+
Definition NonlinearFactorGraph.h:55
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,247 +1,76 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-LevenbergMarquardtParams.h\n+ExpressionFactorGraph.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+19#pragma once\n+20\n+21#include \n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n 25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-28class LevenbergMarquardtOptimizer;\n-29\n-_\b3_\b5class GTSAM_EXPORT _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n-{\n-36\n-37public:\n-_\b3_\b9 enum _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bL_\bM {\n-40 SILENT = 0, SUMMARY, TERMINATION, LAMBDA, TRYLAMBDA, TRYCONFIG, DAMPED,\n-TRYDELTA\n-41 };\n-42\n-43 static VerbosityLM verbosityLMTranslator(const std::string &s);\n-44 static std::string verbosityLMTranslator(VerbosityLM value);\n-45 using OptimizerType = _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br;\n-46\n-47public:\n+_\b2_\b9class _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n+30\n+31public:\n+32\n+35\n+42 template\n+_\b4_\b3 void _\ba_\bd_\bd_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& h, const T& z,\n+44 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& R) {\n+45 using F = _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bT_\b>;\n+46 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(boost::allocate_shared(Eigen::aligned_allocator(), R, z,\n+h));\n+47 }\n 48\n-_\b4_\b9 double _\bl_\ba_\bm_\bb_\bd_\ba_\bI_\bn_\bi_\bt_\bi_\ba_\bl;\n-_\b5_\b0 double _\bl_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br;\n-_\b5_\b1 double _\bl_\ba_\bm_\bb_\bd_\ba_\bU_\bp_\bp_\be_\br_\bB_\bo_\bu_\bn_\bd;\n-_\b5_\b2 double _\bl_\ba_\bm_\bb_\bd_\ba_\bL_\bo_\bw_\be_\br_\bB_\bo_\bu_\bn_\bd;\n-_\b5_\b3 _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bL_\bM _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bL_\bM;\n-_\b5_\b4 double _\bm_\bi_\bn_\bM_\bo_\bd_\be_\bl_\bF_\bi_\bd_\be_\bl_\bi_\bt_\by;\n-_\b5_\b5 std::string _\bl_\bo_\bg_\bF_\bi_\bl_\be;\n-_\b5_\b6 bool _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bD_\ba_\bm_\bp_\bi_\bn_\bg;\n-_\b5_\b7 bool _\bu_\bs_\be_\bF_\bi_\bx_\be_\bd_\bL_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br;\n-_\b5_\b8 double _\bm_\bi_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl;\n-_\b5_\b9 double _\bm_\ba_\bx_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl;\n-60\n-61 _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs()\n-62 : verbosityLM(SILENT),\n-63 diagonalDamping(false),\n-64 minDiagonal(1e-6),\n-65 maxDiagonal(1e32) {\n-66 SetLegacyDefaults(this);\n-67 }\n-68\n-69 static void SetLegacyDefaults(_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs* p) {\n-70 // Relevant NonlinearOptimizerParams:\n-71 p->_\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs = 100;\n-72 p->_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl = 1e-5;\n-73 p->_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl = 1e-5;\n-74 // LM-specific:\n-75 p->_\bl_\ba_\bm_\bb_\bd_\ba_\bI_\bn_\bi_\bt_\bi_\ba_\bl = 1e-5;\n-76 p->_\bl_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br = 10.0;\n-77 p->_\bl_\ba_\bm_\bb_\bd_\ba_\bU_\bp_\bp_\be_\br_\bB_\bo_\bu_\bn_\bd = 1e5;\n-78 p->_\bl_\ba_\bm_\bb_\bd_\ba_\bL_\bo_\bw_\be_\br_\bB_\bo_\bu_\bn_\bd = 0.0;\n-79 p->_\bm_\bi_\bn_\bM_\bo_\bd_\be_\bl_\bF_\bi_\bd_\be_\bl_\bi_\bt_\by = 1e-3;\n-80 p->_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bD_\ba_\bm_\bp_\bi_\bn_\bg = false;\n-81 p->_\bu_\bs_\be_\bF_\bi_\bx_\be_\bd_\bL_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br = true;\n-82 }\n-83\n-84 // these do seem to work better for SFM\n-85 static void SetCeresDefaults(LevenbergMarquardtParams* p) {\n-86 // Relevant NonlinearOptimizerParams:\n-87 p->maxIterations = 50;\n-88 p->absoluteErrorTol = 0; // No corresponding option in CERES\n-89 p->relativeErrorTol = 1e-6; // This is function_tolerance\n-90 // LM-specific:\n-91 p->lambdaUpperBound = 1e32;\n-92 p->lambdaLowerBound = 1e-16;\n-93 p->lambdaInitial = 1e-04;\n-94 p->lambdaFactor = 2.0;\n-95 p->minModelFidelity = 1e-3; // options.min_relative_decrease in CERES\n-96 p->diagonalDamping = true;\n-97 p->useFixedLambdaFactor = false; // This is important\n-98 }\n-99\n-100 static LevenbergMarquardtParams LegacyDefaults() {\n-101 LevenbergMarquardtParams p;\n-102 SetLegacyDefaults(&p);\n-103 return p;\n-104 }\n-105\n-106 static LevenbergMarquardtParams CeresDefaults() {\n-107 LevenbergMarquardtParams p;\n-108 SetCeresDefaults(&p);\n-109 return p;\n-110 }\n-111\n-112 static LevenbergMarquardtParams EnsureHasOrdering(LevenbergMarquardtParams\n-params,\n-113 const NonlinearFactorGraph& graph) {\n-114 if (!params.ordering)\n-115 params.ordering = Ordering::Create(params.orderingType, graph);\n-116 return params;\n-117 }\n-118\n-119 static LevenbergMarquardtParams ReplaceOrdering(LevenbergMarquardtParams\n-params,\n-120 const Ordering& ordering) {\n-121 params.ordering = ordering;\n-122 return params;\n-123 }\n-124\n-125 ~LevenbergMarquardtParams() override {}\n-126 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const override;\n-127\n-130 bool getDiagonalDamping() const { return diagonalDamping; }\n-131 double getlambdaFactor() const { return lambdaFactor; }\n-132 double getlambdaInitial() const { return lambdaInitial; }\n-133 double getlambdaLowerBound() const { return lambdaLowerBound; }\n-134 double getlambdaUpperBound() const { return lambdaUpperBound; }\n-135 bool getUseFixedLambdaFactor() { return useFixedLambdaFactor; }\n-136 std::string getLogFile() const { return logFile; }\n-137 std::string getVerbosityLM() const { return verbosityLMTranslator\n-(verbosityLM);}\n-138\n-139 void setDiagonalDamping(bool flag) { diagonalDamping = flag; }\n-140 void setlambdaFactor(double value) { lambdaFactor = value; }\n-141 void setlambdaInitial(double value) { lambdaInitial = value; }\n-142 void setlambdaLowerBound(double value) { lambdaLowerBound = value; }\n-143 void setlambdaUpperBound(double value) { lambdaUpperBound = value; }\n-144 void setUseFixedLambdaFactor(bool flag) { useFixedLambdaFactor = flag;}\n-145 void setLogFile(const std::string& s) { logFile = s; }\n-146 void setVerbosityLM(const std::string& s) { verbosityLM =\n-verbosityLMTranslator(s);}\n-147 // @}\n-150\n-_\b1_\b5_\b2 boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n-153 return boost::shared_ptr(new\n-_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs(*this));\n-154 }\n-155\n-157};\n-158\n-159}\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n-Parameters for nonlinear optimization.\n+50};\n+51\n+52}\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-This class performs Levenberg-Marquardt nonlinear optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for Levenberg-Marquardt optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br\n-double lambdaFactor\n-The amount by which to multiply or divide lambda when adjusting lambda\n-(default: 10....\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\bi_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-double minDiagonal\n-when using diagonal damping saturates the minimum diagonal entries (default:\n-1e-6)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\ba_\bm_\bb_\bd_\ba_\bU_\bp_\bp_\be_\br_\bB_\bo_\bu_\bn_\bd\n-double lambdaUpperBound\n-The maximum lambda to try before assuming the optimization has failed (default:\n-1e5)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\ba_\bm_\bb_\bd_\ba_\bI_\bn_\bi_\bt_\bi_\ba_\bl\n-double lambdaInitial\n-The initial Levenberg-Marquardt damping term (default: 1e-5)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\ba_\bx_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-double maxDiagonal\n-when using diagonal damping saturates the maximum diagonal entries (default:\n-1e32)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\bi_\bn_\bM_\bo_\bd_\be_\bl_\bF_\bi_\bd_\be_\bl_\bi_\bt_\by\n-double minModelFidelity\n-Lower bound for the modelFidelity to accept the result of an LM iteration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\ba_\bm_\bb_\bd_\ba_\bL_\bo_\bw_\be_\br_\bB_\bo_\bu_\bn_\bd\n-double lambdaLowerBound\n-The minimum lambda used in LM (default: 0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-boost::shared_ptr< NonlinearOptimizerParams > clone() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bD_\ba_\bm_\bp_\bi_\bn_\bg\n-bool diagonalDamping\n-if true, use diagonal of Hessian\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bu_\bs_\be_\bF_\bi_\bx_\be_\bd_\bL_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br\n-bool useFixedLambdaFactor\n-if true applies constant increase (or decrease) to lambda according to\n-lambdaFactor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\bo_\bg_\bF_\bi_\bl_\be\n-std::string logFile\n-an optional CSV log file, with [iteration, time, error, lambda]\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bL_\bM\n-VerbosityLM\n-See LevenbergMarquardtParams::verbosityLM.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bL_\bM\n-VerbosityLM verbosityLM\n-The verbosity level for Levenberg-Marquardt (default: SILENT), see also\n-NonlinearOptimizerParams::ver...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n-The common parameters for Nonlinear optimizers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl\n-double absoluteErrorTol\n-The maximum absolute error decrease to stop iterating (default 1e-5)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n-size_t maxIterations\n-The maximum iterations to stop iterating (default 100)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl\n-double relativeErrorTol\n-The maximum relative error decrease to stop iterating (default 1e-5)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)\n+Add a factor directly using a shared_ptr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+Factor that supports arbitrary expressions via AD.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+Expression class that supports automatic differentiation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+Factor graph that supports adding ExpressionFactors directly.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactorGraph.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+void addExpressionFactor(const Expression< T > &h, const T &z, const\n+SharedNoiseModel &R)\n+Directly add ExpressionFactor that implements |h(x)-z|^2_R.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactorGraph.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01025_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01025_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GncParams.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,213 +98,469 @@\n
No Matches
\n
\n \n \n \n \n
\n-
GncParams.h
\n+
NonlinearFactor.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
27#pragma once
\n-
28
\n-\n-\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
34/* ************************************************************************* */
\n-
\n-\n-
37 GM /*Geman McClure*/,
\n-
38 TLS /*Truncated least squares*/
\n-
39};
\n-
\n-
40
\n-
41template<class BaseOptimizerParameters>
\n+
20// \\callgraph
\n+
21
\n+
22#pragma once
\n+
23
\n+\n+\n+\n+\n+\n+
29#include <gtsam/base/utilities.h> // boost::index_sequence
\n+
30
\n+
31#include <boost/serialization/base_object.hpp>
\n+
32
\n+
33namespace gtsam {
\n+
34
\n+
35/* ************************************************************************* */
\n+
36
\n
\n-
42class GncParams {
\n-
43 public:
\n-
45 typedef typename BaseOptimizerParameters::OptimizerType OptimizerType;
\n-
46
\n-
\n-
48 enum Verbosity {
\n-
49 SILENT = 0,
\n-
50 SUMMARY,
\n-
51 MU,
\n-
52 WEIGHTS,
\n-
53 VALUES
\n-
54 };
\n-
\n-
55
\n-
\n-
57 GncParams(const BaseOptimizerParameters& baseOptimizerParams)
\n-\n-
59 }
\n-
\n-
60
\n-
\n-\n-\n-
64 }
\n-
\n-
65
\n-
67 BaseOptimizerParameters baseOptimizerParams;
\n-\n-
70 size_t maxIterations = 100;
\n-
71 double muStep = 1.4;
\n-
72 double relativeCostTol = 1e-5;
\n-
73 double weightsTol = 1e-4;
\n-\n-
75
\n-
76 //TODO(Varun) replace IndexVector with vector<size_t> once pybind11/stl.h is globally enabled.
\n-\n-\n-
82 IndexVector knownOutliers = IndexVector();
\n-
83
\n-
\n-
85 void setLossType(const GncLossType type) {
\n-
86 lossType = type;
\n-
87 }
\n-
\n-
88
\n-
\n-
90 void setMaxIterations(const size_t maxIter) {
\n-
91 std::cout
\n-
92 << "setMaxIterations: changing the max nr of iters might lead to less accurate solutions and is not recommended! "
\n-
93 << std::endl;
\n-
94 maxIterations = maxIter;
\n-
95 }
\n-
\n-
96
\n-
\n-
98 void setMuStep(const double step) {
\n-
99 muStep = step;
\n-
100 }
\n-
\n-
101
\n-
\n-
103 void setRelativeCostTol(double value) {
\n-
104 relativeCostTol = value;
\n-
105 }
\n-
\n-
106
\n-
\n-
108 void setWeightsTol(double value) {
\n-
109 weightsTol = value;
\n-
110 }
\n-
\n-
111
\n-
\n-
113 void setVerbosityGNC(const Verbosity value) {
\n-
114 verbosity = value;
\n-
115 }
\n-
\n-
116
\n-
\n-
123 void setKnownInliers(const IndexVector& knownIn) {
\n-
124 for (size_t i = 0; i < knownIn.size(); i++){
\n-
125 knownInliers.push_back(knownIn[i]);
\n-
126 }
\n-
127 std::sort(knownInliers.begin(), knownInliers.end());
\n-
128 }
\n-
\n-
129
\n-
\n-
134 void setKnownOutliers(const IndexVector& knownOut) {
\n-
135 for (size_t i = 0; i < knownOut.size(); i++){
\n-
136 knownOutliers.push_back(knownOut[i]);
\n-
137 }
\n-
138 std::sort(knownOutliers.begin(), knownOutliers.end());
\n-
139 }
\n-
\n-
140
\n-
\n-
142 bool equals(const GncParams& other, double tol = 1e-9) const {
\n-
143 return baseOptimizerParams.equals(other.baseOptimizerParams)
\n-
144 && lossType == other.lossType && maxIterations == other.maxIterations
\n-
145 && std::fabs(muStep - other.muStep) <= tol
\n-
146 && verbosity == other.verbosity && knownInliers == other.knownInliers
\n-
147 && knownOutliers == other.knownOutliers;
\n-
148 }
\n-
\n-
149
\n-
\n-
151 void print(const std::string& str) const {
\n-
152 std::cout << str << "\\n";
\n-
153 switch (lossType) {
\n-
154 case GM:
\n-
155 std::cout << "lossType: Geman McClure" << "\\n";
\n-
156 break;
\n-
157 case TLS:
\n-
158 std::cout << "lossType: Truncated Least-squares" << "\\n";
\n-
159 break;
\n-
160 default:
\n-
161 throw std::runtime_error("GncParams::print: unknown loss type.");
\n-
162 }
\n-
163 std::cout << "maxIterations: " << maxIterations << "\\n";
\n-
164 std::cout << "muStep: " << muStep << "\\n";
\n-
165 std::cout << "relativeCostTol: " << relativeCostTol << "\\n";
\n-
166 std::cout << "weightsTol: " << weightsTol << "\\n";
\n-
167 std::cout << "verbosity: " << verbosity << "\\n";
\n-
168 for (size_t i = 0; i < knownInliers.size(); i++)
\n-
169 std::cout << "knownInliers: " << knownInliers[i] << "\\n";
\n-
170 for (size_t i = 0; i < knownOutliers.size(); i++)
\n-
171 std::cout << "knownOutliers: " << knownOutliers[i] << "\\n";
\n-
172 baseOptimizerParams.print("Base optimizer params: ");
\n-
173 }
\n-
\n-
174};
\n-
\n+
42class GTSAM_EXPORT NonlinearFactor: public Factor {
\n+
43
\n+
44protected:
\n+
45
\n+
46 // Some handy typedefs
\n+
47 typedef Factor Base;
\n+
48 typedef NonlinearFactor This;
\n+
49
\n+
50public:
\n+
51
\n+
52 typedef boost::shared_ptr<This> shared_ptr;
\n+
53
\n+
56
\n+\n+
59
\n+
63 template<typename CONTAINER>
\n+
\n+
64 NonlinearFactor(const CONTAINER& keys) :
\n+
65 Base(keys) {}
\n+
\n+
66
\n+
70
\n+
72 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
73 DefaultKeyFormatter) const override;
\n+
74
\n+
76 virtual bool equals(const NonlinearFactor& f, double tol = 1e-9) const;
\n+
77
\n+
81
\n+
83 virtual ~NonlinearFactor() {}
\n+
84
\n+
97 virtual double error(const Values& c) const;
\n+
98
\n+
103 double error(const HybridValues& c) const override;
\n+
104
\n+
106 virtual size_t dim() const = 0;
\n+
107
\n+
118 virtual bool active(const Values& /*c*/) const { return true; }
\n+
119
\n+
121 virtual boost::shared_ptr<GaussianFactor>
\n+
122 linearize(const Values& c) const = 0;
\n+
123
\n+
\n+
130 virtual shared_ptr clone() const {
\n+
131 // TODO: choose better exception to throw here
\n+
132 throw std::runtime_error("NonlinearFactor::clone(): Attempting to clone factor with no clone() implemented!");
\n+
133 return shared_ptr();
\n+
134 }
\n+
\n+
135
\n+
141 virtual shared_ptr rekey(const std::map<Key,Key>& rekey_mapping) const;
\n+
142
\n+
147 virtual shared_ptr rekey(const KeyVector& new_keys) const;
\n+
148
\n+
\n+
153 virtual bool sendable() const {
\n+
154 return true;
\n+
155 }
\n+
\n+
156
\n+
157}; // \\class NonlinearFactor
\n+
\n+
158
\n+
\n+
160template<> struct traits<NonlinearFactor> : public Testable<NonlinearFactor> {
\n+
161};
\n+
\n+
162
\n+
163/* ************************************************************************* */
\n+
\n+
174class GTSAM_EXPORT NoiseModelFactor: public NonlinearFactor {
\n
175
\n-
176}
\n-\n-
A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
176protected:
\n+
177
\n+
178 // handy typedefs
\n+
179 typedef NonlinearFactor Base;
\n+
180 typedef NoiseModelFactor This;
\n+
181
\n+
182 SharedNoiseModel noiseModel_;
\n+
184public:
\n+
185
\n+
186 typedef boost::shared_ptr<This> shared_ptr;
\n+
187
\n+\n+
190
\n+
192 ~NoiseModelFactor() override {}
\n+
193
\n+
197 template<typename CONTAINER>
\n+
\n+
198 NoiseModelFactor(const SharedNoiseModel& noiseModel, const CONTAINER& keys) :
\n+
199 Base(keys), noiseModel_(noiseModel) {}
\n+
\n+
200
\n+
201protected:
\n+
202
\n+
206 NoiseModelFactor(const SharedNoiseModel& noiseModel) : noiseModel_(noiseModel) {}
\n+
207
\n+
208public:
\n+
209
\n+
211 void print(const std::string& s = "",
\n+
212 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n+
213
\n+
215 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override;
\n+
216
\n+
\n+
218 size_t dim() const override {
\n+
219 return noiseModel_->dim();
\n+
220 }
\n+
\n+
221
\n+
\n+\n+
224 return noiseModel_;
\n+
225 }
\n+
\n+
226
\n+
233 virtual Vector unwhitenedError(const Values& x,
\n+
234 boost::optional<std::vector<Matrix>&> H = boost::none) const = 0;
\n+
235
\n+
240 Vector whitenedError(const Values& c) const;
\n+
241
\n+
245 Vector unweightedWhitenedError(const Values& c) const;
\n+
246
\n+
250 double weight(const Values& c) const;
\n+
251
\n+
258 double error(const Values& c) const override;
\n+
259
\n+
265 boost::shared_ptr<GaussianFactor> linearize(const Values& x) const override;
\n+
266
\n+
271 shared_ptr cloneWithNewNoiseModel(const SharedNoiseModel newNoise) const;
\n+
272
\n+
273 private:
\n+
275 friend class boost::serialization::access;
\n+
276 template<class ARCHIVE>
\n+
277 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
278 ar & boost::serialization::make_nvp("NonlinearFactor",
\n+
279 boost::serialization::base_object<Base>(*this));
\n+
280 ar & BOOST_SERIALIZATION_NVP(noiseModel_);
\n+
281 }
\n+
282
\n+
283}; // \\class NoiseModelFactor
\n+
\n+
284
\n+
285/* ************************************************************************* */
\n+
286namespace detail {
\n+
299template <typename, typename...>
\n+
300struct NoiseModelFactorAliases {};
\n+
301template <typename T1>
\n+
302struct NoiseModelFactorAliases<T1> {
\n+
303 using X = T1;
\n+
304 using X1 = T1;
\n+
305};
\n+
306template <typename T1, typename T2>
\n+
307struct NoiseModelFactorAliases<T1, T2> {
\n+
308 using X1 = T1;
\n+
309 using X2 = T2;
\n+
310};
\n+
311template <typename T1, typename T2, typename T3>
\n+
312struct NoiseModelFactorAliases<T1, T2, T3> {
\n+
313 using X1 = T1;
\n+
314 using X2 = T2;
\n+
315 using X3 = T3;
\n+
316};
\n+
317template <typename T1, typename T2, typename T3, typename T4>
\n+
318struct NoiseModelFactorAliases<T1, T2, T3, T4> {
\n+
319 using X1 = T1;
\n+
320 using X2 = T2;
\n+
321 using X3 = T3;
\n+
322 using X4 = T4;
\n+
323};
\n+
324template <typename T1, typename T2, typename T3, typename T4, typename T5>
\n+
325struct NoiseModelFactorAliases<T1, T2, T3, T4, T5> {
\n+
326 using X1 = T1;
\n+
327 using X2 = T2;
\n+
328 using X3 = T3;
\n+
329 using X4 = T4;
\n+
330 using X5 = T5;
\n+
331};
\n+
332template <typename T1, typename T2, typename T3, typename T4, typename T5,
\n+
333 typename T6, typename... TExtra>
\n+
334struct NoiseModelFactorAliases<T1, T2, T3, T4, T5, T6, TExtra...> {
\n+
335 using X1 = T1;
\n+
336 using X2 = T2;
\n+
337 using X3 = T3;
\n+
338 using X4 = T4;
\n+
339 using X5 = T5;
\n+
340 using X6 = T6;
\n+
341};
\n+
342} // namespace detail
\n+
343
\n+
344/* ************************************************************************* */
\n+
397template <class... ValueTypes>
\n+
\n+\n+
399 : public NoiseModelFactor,
\n+
400 public detail::NoiseModelFactorAliases<ValueTypes...> {
\n+
401 public:
\n+
403 enum { N = sizeof...(ValueTypes) };
\n+
404
\n+
405 protected:
\n+
406 using Base = NoiseModelFactor;
\n+
407 using This = NoiseModelFactorN<ValueTypes...>;
\n+
408
\n+
411
\n+
412 template <typename From, typename To>
\n+
413 using IsConvertible =
\n+
414 typename std::enable_if<std::is_convertible<From, To>::value, void>::type;
\n+
415
\n+
416 template <int I>
\n+
417 using IndexIsValid = typename std::enable_if<(I >= 1) && (I <= N),
\n+
418 void>::type; // 1-indexed!
\n+
419
\n+
420 template <typename Container>
\n+
421 using ContainerElementType =
\n+
422 typename std::decay<decltype(*std::declval<Container>().begin())>::type;
\n+
423 template <typename Container>
\n+
424 using IsContainerOfKeys = IsConvertible<ContainerElementType<Container>, Key>;
\n+
425
\n+
427
\n+
428 /* Like std::void_t, except produces `boost::optional<Matrix&>` instead of
\n+
429 * `void`. Used to expand fixed-type parameter-packs with same length as
\n+
430 * ValueTypes. */
\n+
431 template <typename T>
\n+
432 using OptionalMatrix = boost::optional<Matrix&>;
\n+
433
\n+
434 /* Like std::void_t, except produces `Key` instead of `void`. Used to expand
\n+
435 * fixed-type parameter-packs with same length as ValueTypes. */
\n+
436 template <typename T>
\n+
437 using KeyType = Key;
\n+
438
\n+
439 public:
\n+
459 template <int I, typename = IndexIsValid<I>>
\n+
460 using ValueType =
\n+
461 typename std::tuple_element<I - 1, std::tuple<ValueTypes...>>::type;
\n+
462
\n+
463 public:
\n+
464
\n+
467
\n+\n+
470
\n+
\n+\n+
479 KeyType<ValueTypes>... keys)
\n+
480 : Base(noiseModel, std::array<Key, N>{keys...}) {}
\n+
\n+
481
\n+
489 template <typename CONTAINER = std::initializer_list<Key>,
\n+
490 typename = IsContainerOfKeys<CONTAINER>>
\n+
\n+\n+
492 : Base(noiseModel, keys) {
\n+
493 if (keys.size() != N) {
\n+
494 throw std::invalid_argument(
\n+
495 "NoiseModelFactorN: wrong number of keys given");
\n+
496 }
\n+
497 }
\n+
\n+
498
\n+
500
\n+
501 ~NoiseModelFactorN() override {}
\n+
502
\n+
517 template <int I = 1>
\n+
\n+
518 inline Key key() const {
\n+
519 static_assert(I <= N, "Index out of bounds");
\n+
520 return keys_[I - 1];
\n+
521 }
\n+
\n+
522
\n+
525
\n+
\n+\n+
543 const Values& x,
\n+
544 boost::optional<std::vector<Matrix>&> H = boost::none) const override {
\n+
545 return unwhitenedError(boost::mp11::index_sequence_for<ValueTypes...>{}, x,
\n+
546 H);
\n+
547 }
\n+
\n+
548
\n+
552
\n+
575 virtual Vector evaluateError(const ValueTypes&... x,
\n+
576 OptionalMatrix<ValueTypes>... H) const = 0;
\n+
577
\n+
579
\n+
582
\n+
\n+
589 inline Vector evaluateError(const ValueTypes&... x) const {
\n+
590 return evaluateError(x..., OptionalMatrix<ValueTypes>()...);
\n+
591 }
\n+
\n+
592
\n+
597 template <typename... OptionalJacArgs,
\n+
598 typename = IndexIsValid<sizeof...(OptionalJacArgs) + 1>>
\n+
\n+
599 inline Vector evaluateError(const ValueTypes&... x,
\n+
600 OptionalJacArgs&&... H) const {
\n+
601 return evaluateError(x..., std::forward<OptionalJacArgs>(H)...,
\n+
602 boost::none);
\n+
603 }
\n+
\n+
604
\n+
606
\n+
607 private:
\n+
614 template <std::size_t... Indices>
\n+
615 inline Vector unwhitenedError(
\n+
616 boost::mp11::index_sequence<Indices...>, //
\n+
617 const Values& x,
\n+
618 boost::optional<std::vector<Matrix>&> H = boost::none) const {
\n+
619 if (this->active(x)) {
\n+
620 if (H) {
\n+
621 return evaluateError(x.at<ValueTypes>(keys_[Indices])...,
\n+
622 (*H)[Indices]...);
\n+
623 } else {
\n+
624 return evaluateError(x.at<ValueTypes>(keys_[Indices])...);
\n+
625 }
\n+
626 } else {
\n+
627 return Vector::Zero(this->dim());
\n+
628 }
\n+
629 }
\n+
630
\n+\n+
633 template <class ARCHIVE>
\n+
634 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
635 ar& boost::serialization::make_nvp(
\n+
636 "NoiseModelFactor", boost::serialization::base_object<Base>(*this));
\n+
637 }
\n+
638
\n+
639 public:
\n+
642
\n+
643 inline Key key1() const {
\n+
644 return key<1>();
\n+
645 }
\n+
646 template <int I = 2>
\n+
647 inline Key key2() const {
\n+
648 static_assert(I <= N, "Index out of bounds");
\n+
649 return key<2>();
\n+
650 }
\n+
651 template <int I = 3>
\n+
652 inline Key key3() const {
\n+
653 static_assert(I <= N, "Index out of bounds");
\n+
654 return key<3>();
\n+
655 }
\n+
656 template <int I = 4>
\n+
657 inline Key key4() const {
\n+
658 static_assert(I <= N, "Index out of bounds");
\n+
659 return key<4>();
\n+
660 }
\n+
661 template <int I = 5>
\n+
662 inline Key key5() const {
\n+
663 static_assert(I <= N, "Index out of bounds");
\n+
664 return key<5>();
\n+
665 }
\n+
666 template <int I = 6>
\n+
667 inline Key key6() const {
\n+
668 static_assert(I <= N, "Index out of bounds");
\n+
669 return key<6>();
\n+
670 }
\n+
671
\n+
673
\n+
674}; // \\class NoiseModelFactorN
\n+
\n+
675
\n+
676#define NoiseModelFactor1 NoiseModelFactorN
\n+
677#define NoiseModelFactor2 NoiseModelFactorN
\n+
678#define NoiseModelFactor3 NoiseModelFactorN
\n+
679#define NoiseModelFactor4 NoiseModelFactorN
\n+
680#define NoiseModelFactor5 NoiseModelFactorN
\n+
681#define NoiseModelFactor6 NoiseModelFactorN
\n+
682
\n+
683} // namespace gtsam
\n+
Special class for optional Jacobian arguments.
\n+
The base class for all factors.
\n+\n+\n+
A non-templated config holding any types of Manifold-group elements.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
GncLossType
Choice of robust loss function for GNC.
Definition GncParams.h:36
\n-
Definition GncParams.h:42
\n-
BaseOptimizerParameters baseOptimizerParams
GNC parameters.
Definition GncParams.h:67
\n-
IndexVector knownInliers
Slots in the factor graph corresponding to measurements that we know are outliers.
Definition GncParams.h:80
\n-
GncParams()
Default constructor.
Definition GncParams.h:62
\n-
BaseOptimizerParameters::OptimizerType OptimizerType
For each parameter, specify the corresponding optimizer: e.g., GaussNewtonParams -> GaussNewtonOptimi...
Definition GncParams.h:45
\n-
void setKnownInliers(const IndexVector &knownIn)
(Optional) Provide a vector of measurements that must be considered inliers.
Definition GncParams.h:123
\n-
void print(const std::string &str) const
Print.
Definition GncParams.h:151
\n-
FastVector< uint64_t > IndexVector
Slots in the factor graph corresponding to measurements that we know are inliers.
Definition GncParams.h:79
\n-
GncParams(const BaseOptimizerParameters &baseOptimizerParams)
Constructor.
Definition GncParams.h:57
\n-
double muStep
Multiplicative factor to reduce/increase the mu in gnc.
Definition GncParams.h:71
\n-
double weightsTol
If the weights are within weightsTol from being binary, stop iterating (only for TLS)
Definition GncParams.h:73
\n-
void setKnownOutliers(const IndexVector &knownOut)
(Optional) Provide a vector of measurements that must be considered outliers.
Definition GncParams.h:134
\n-
Verbosity verbosity
Verbosity level.
Definition GncParams.h:74
\n-
bool equals(const GncParams &other, double tol=1e-9) const
Equals.
Definition GncParams.h:142
\n-
void setRelativeCostTol(double value)
Set the maximum relative difference in mu values to stop iterating.
Definition GncParams.h:103
\n-
GncLossType lossType
any other specific GNC parameters:
Definition GncParams.h:69
\n-
size_t maxIterations
Maximum number of iterations.
Definition GncParams.h:70
\n-
void setLossType(const GncLossType type)
Set the robust loss function to be used in GNC (chosen among the ones in GncLossType).
Definition GncParams.h:85
\n-
void setMuStep(const double step)
Set the graduated non-convexity step: at each GNC iteration, mu is updated as mu <- mu * muStep.
Definition GncParams.h:98
\n-
double relativeCostTol
If relative cost change is below this threshold, stop iterating.
Definition GncParams.h:72
\n-
void setVerbosityGNC(const Verbosity value)
Set the verbosity level.
Definition GncParams.h:113
\n-
void setMaxIterations(const size_t maxIter)
Set the maximum number of iterations in GNC (changing the max nr of iters might lead to less accurate...
Definition GncParams.h:90
\n-
Verbosity
Verbosity levels.
Definition GncParams.h:48
\n-
void setWeightsTol(double value)
Set the maximum difference between the weights and their rounding in {0,1} to stop iterating.
Definition GncParams.h:108
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
Definition Factor.h:68
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
const_iterator begin() const
Iterator at beginning of involved variable keys.
Definition Factor.h:143
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
virtual boost::shared_ptr< GaussianFactor > linearize(const Values &c) const =0
linearize to a GaussianFactor
\n+
virtual size_t dim() const =0
get the dimension of the factor (number of rows on linearization)
\n+
NonlinearFactor()
Default constructor for I/O only.
Definition NonlinearFactor.h:58
\n+
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n+
NonlinearFactor(const CONTAINER &keys)
Constructor from a collection of the keys involved in this factor.
Definition NonlinearFactor.h:64
\n+
virtual bool sendable() const
Should the factor be evaluated in the same thread as the caller This is to enable factors that has sh...
Definition NonlinearFactor.h:153
\n+
virtual shared_ptr clone() const
Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
Definition NonlinearFactor.h:130
\n+
virtual ~NonlinearFactor()
Destructor.
Definition NonlinearFactor.h:83
\n+
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n+
NoiseModelFactor(const SharedNoiseModel &noiseModel, const CONTAINER &keys)
Constructor.
Definition NonlinearFactor.h:198
\n+
~NoiseModelFactor() override
Destructor.
Definition NonlinearFactor.h:192
\n+
NoiseModelFactor(const SharedNoiseModel &noiseModel)
Constructor - only for subclasses, as this does not set keys.
Definition NonlinearFactor.h:206
\n+
boost::shared_ptr< This > shared_ptr
Noise model.
Definition NonlinearFactor.h:186
\n+
size_t dim() const override
get the dimension of the factor (number of rows on linearization)
Definition NonlinearFactor.h:218
\n+
NoiseModelFactor()
Default constructor for I/O only.
Definition NonlinearFactor.h:189
\n+
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n+
virtual Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix > & > H=boost::none) const =0
Error function without the NoiseModel, .
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Vector evaluateError(const ValueTypes &... x) const
No-Jacobians requested function overload.
Definition NonlinearFactor.h:589
\n+
NoiseModelFactorN(const SharedNoiseModel &noiseModel, CONTAINER keys)
Constructor.
Definition NonlinearFactor.h:491
\n+
NoiseModelFactorN(const SharedNoiseModel &noiseModel, KeyType< ValueTypes >... keys)
Constructor.
Definition NonlinearFactor.h:478
\n+
Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix > & > H=boost::none) const override
This implements the unwhitenedError virtual function by calling the n-key specific version of evaluat...
Definition NonlinearFactor.h:542
\n+
NoiseModelFactorN()
Default Constructor for I/O.
Definition NonlinearFactor.h:469
\n+
virtual Vector evaluateError(const ValueTypes &... x, OptionalMatrix< ValueTypes >... H) const =0
Override evaluateError to finish implementing an n-way factor.
\n+
typename std::tuple_element< I - 1, std::tuple< ValueTypes... > >::type ValueType
The type of the I'th template param can be obtained as ValueType.
Definition NonlinearFactor.h:461
\n+
friend class boost::serialization::access
Serialization function.
Definition NonlinearFactor.h:632
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
Vector evaluateError(const ValueTypes &... x, OptionalJacArgs &&... H) const
Some (but not all) optional Jacobians are omitted (function overload)
Definition NonlinearFactor.h:599
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,265 +1,574 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GncParams.h\n+NonlinearFactor.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-27#pragma once\n-28\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n-30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-34/* *************************************************************************\n+20// \\callgraph\n+21\n+22#pragma once\n+23\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n+29#include // boost::index_sequence\n+30\n+31#include \n+32\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n+34\n+35/* *************************************************************************\n */\n-_\b3_\b6enum _\bG_\bn_\bc_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be {\n-37 GM /*Geman McClure*/,\n-38 TLS /*Truncated least squares*/\n-39};\n-40\n-41template\n-_\b4_\b2class _\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs {\n-43 public:\n-_\b4_\b5 typedef typename BaseOptimizerParameters::OptimizerType _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bT_\by_\bp_\be;\n-46\n-_\b4_\b8 enum _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by {\n-49 SILENT = 0,\n-50 SUMMARY,\n-51 MU,\n-52 WEIGHTS,\n-53 VALUES\n-54 };\n-55\n-_\b5_\b7 _\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs(const BaseOptimizerParameters& _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs)\n-58 : _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs(_\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs) {\n-59 }\n-60\n-_\b6_\b2 _\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs()\n-63 : _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs() {\n-64 }\n-65\n-_\b6_\b7 BaseOptimizerParameters _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs;\n-_\b6_\b9 _\bG_\bn_\bc_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be _\bl_\bo_\bs_\bs_\bT_\by_\bp_\be = TLS;\n-_\b7_\b0 size_t _\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs = 100;\n-_\b7_\b1 double _\bm_\bu_\bS_\bt_\be_\bp = 1.4;\n-_\b7_\b2 double _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl = 1e-5;\n-_\b7_\b3 double _\bw_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl = 1e-4;\n-_\b7_\b4 _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by = SILENT;\n-75\n-76 //TODO(Varun) replace IndexVector with vector once pybind11/stl.h is\n-globally enabled.\n-_\b7_\b8 using _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br = _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bu_\bi_\bn_\bt_\b6_\b4_\b__\bt_\b>;\n-_\b8_\b0 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs = _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br();\n-82 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br knownOutliers = _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br();\n-83\n-_\b8_\b5 void _\bs_\be_\bt_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be(const _\bG_\bn_\bc_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be type) {\n-86 _\bl_\bo_\bs_\bs_\bT_\by_\bp_\be = type;\n-87 }\n-88\n-_\b9_\b0 void _\bs_\be_\bt_\bM_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs(const size_t maxIter) {\n-91 std::cout\n-92 << \"setMaxIterations: changing the max nr of iters might lead to less\n-accurate solutions and is not recommended! \"\n-93 << std::endl;\n-94 _\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs = maxIter;\n-95 }\n-96\n-_\b9_\b8 void _\bs_\be_\bt_\bM_\bu_\bS_\bt_\be_\bp(const double step) {\n-99 _\bm_\bu_\bS_\bt_\be_\bp = step;\n-100 }\n-101\n-_\b1_\b0_\b3 void _\bs_\be_\bt_\bR_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl(double value) {\n-104 _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl = value;\n-105 }\n-106\n-_\b1_\b0_\b8 void _\bs_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl(double value) {\n-109 _\bw_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl = value;\n-110 }\n-111\n-_\b1_\b1_\b3 void _\bs_\be_\bt_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bG_\bN_\bC(const _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by value) {\n-114 _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by = value;\n-115 }\n-116\n-_\b1_\b2_\b3 void _\bs_\be_\bt_\bK_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs(const _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br& knownIn) {\n-124 for (size_t i = 0; i < knownIn.size(); i++){\n-125 _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs.push_back(knownIn[i]);\n-126 }\n-127 std::sort(_\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs.begin(), _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs.end());\n-128 }\n-129\n-_\b1_\b3_\b4 void _\bs_\be_\bt_\bK_\bn_\bo_\bw_\bn_\bO_\bu_\bt_\bl_\bi_\be_\br_\bs(const _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br& knownOut) {\n-135 for (size_t i = 0; i < knownOut.size(); i++){\n-136 knownOutliers.push_back(knownOut[i]);\n-137 }\n-138 std::sort(knownOutliers.begin(), knownOutliers.end());\n-139 }\n-140\n-_\b1_\b4_\b2 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs& other, double tol = 1e-9) const {\n-143 return _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs.equals(other._\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs)\n-144 && _\bl_\bo_\bs_\bs_\bT_\by_\bp_\be == other._\bl_\bo_\bs_\bs_\bT_\by_\bp_\be && _\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs == other._\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n-145 && std::fabs(_\bm_\bu_\bS_\bt_\be_\bp - other._\bm_\bu_\bS_\bt_\be_\bp) <= tol\n-146 && _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by == other._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by && _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs == other._\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs\n-147 && knownOutliers == other.knownOutliers;\n-148 }\n-149\n-_\b1_\b5_\b1 void _\bp_\br_\bi_\bn_\bt(const std::string& str) const {\n-152 std::cout << str << \"\\n\";\n-153 switch (_\bl_\bo_\bs_\bs_\bT_\by_\bp_\be) {\n-154 case GM:\n-155 std::cout << \"lossType: Geman McClure\" << \"\\n\";\n-156 break;\n-157 case TLS:\n-158 std::cout << \"lossType: Truncated Least-squares\" << \"\\n\";\n-159 break;\n-160 default:\n-161 throw std::runtime_error(\"GncParams::print: unknown loss type.\");\n-162 }\n-163 std::cout << \"maxIterations: \" << _\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs << \"\\n\";\n-164 std::cout << \"muStep: \" << _\bm_\bu_\bS_\bt_\be_\bp << \"\\n\";\n-165 std::cout << \"relativeCostTol: \" << _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl << \"\\n\";\n-166 std::cout << \"weightsTol: \" << _\bw_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl << \"\\n\";\n-167 std::cout << \"verbosity: \" << _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by << \"\\n\";\n-168 for (size_t i = 0; i < _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs.size(); i++)\n-169 std::cout << \"knownInliers: \" << _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs[i] << \"\\n\";\n-170 for (size_t i = 0; i < knownOutliers.size(); i++)\n-171 std::cout << \"knownOutliers: \" << knownOutliers[i] << \"\\n\";\n-172 _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs.print(\"Base optimizer params: \");\n-173 }\n-174};\n+36\n+_\b4_\b2class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br: public _\bF_\ba_\bc_\bt_\bo_\br {\n+43\n+44protected:\n+45\n+46 // Some handy typedefs\n+47 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n+48 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+49\n+50public:\n+51\n+52 typedef boost::shared_ptr shared_ptr;\n+53\n+56\n+_\b5_\b8 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br() {}\n+59\n+63 template\n+_\b6_\b4 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER& keys) :\n+65 _\bB_\ba_\bs_\be(keys) {}\n+66\n+70\n+72 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+73 DefaultKeyFormatter) const override;\n+74\n+76 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& f, double tol = 1e-9) const;\n+77\n+81\n+_\b8_\b3 virtual _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br() {}\n+84\n+97 virtual double error(const _\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+98\n+103 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n+104\n+_\b1_\b0_\b6 virtual size_t _\bd_\bi_\bm() const = 0;\n+107\n+_\b1_\b1_\b8 virtual bool _\ba_\bc_\bt_\bi_\bv_\be(const _\bV_\ba_\bl_\bu_\be_\bs& /*c*/) const { return true; }\n+119\n+121 virtual boost::shared_ptr\n+_\b1_\b2_\b2 _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& c) const = 0;\n+123\n+_\b1_\b3_\b0 virtual shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n+131 // TODO: choose better exception to throw here\n+132 throw std::runtime_error(\"NonlinearFactor::clone(): Attempting to clone\n+factor with no clone() implemented!\");\n+133 return shared_ptr();\n+134 }\n+135\n+141 virtual shared_ptr rekey(const std::map& rekey_mapping) const;\n+142\n+147 virtual shared_ptr rekey(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& new_keys) const;\n+148\n+_\b1_\b5_\b3 virtual bool _\bs_\be_\bn_\bd_\ba_\bb_\bl_\be() const {\n+154 return true;\n+155 }\n+156\n+157}; // \\class NonlinearFactor\n+158\n+_\b1_\b6_\b0template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+{\n+161};\n+162\n+163/* *************************************************************************\n+*/\n+_\b1_\b7_\b4class GTSAM_EXPORT _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n 175\n-176}\n-_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n-_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n-A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+176protected:\n+177\n+178 // handy typedefs\n+179 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n+180 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+181\n+182 _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl noiseModel_;\n+184public:\n+185\n+_\b1_\b8_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+187\n+_\b1_\b8_\b9 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br() {}\n+190\n+_\b1_\b9_\b2 _\b~_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+193\n+197 template\n+_\b1_\b9_\b8 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& noiseModel, const CONTAINER& keys)\n+:\n+199 _\bB_\ba_\bs_\be(keys), noiseModel_(noiseModel) {}\n+200\n+201protected:\n+202\n+_\b2_\b0_\b6 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& noiseModel) : noiseModel_\n+(noiseModel) {}\n+207\n+208public:\n+209\n+211 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+212 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n+213\n+215 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& f, double tol = 1e-9) const override;\n+216\n+_\b2_\b1_\b8 size_t _\bd_\bi_\bm() const override {\n+219 return noiseModel_->dim();\n+220 }\n+221\n+_\b2_\b2_\b3 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl() const {\n+224 return noiseModel_;\n+225 }\n+226\n+_\b2_\b3_\b3 virtual Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& x,\n+234 boost::optional&> H = boost::none) const = 0;\n+235\n+240 Vector whitenedError(const _\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+241\n+245 Vector unweightedWhitenedError(const _\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+246\n+250 double weight(const _\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+251\n+258 double error(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n+259\n+265 boost::shared_ptr linearize(const _\bV_\ba_\bl_\bu_\be_\bs& x) const\n+override;\n+266\n+271 _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br cloneWithNewNoiseModel(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl newNoise) const;\n+272\n+273 private:\n+_\b2_\b7_\b5 friend class boost::serialization::access;\n+276 template\n+277 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+278 ar & boost::serialization::make_nvp(\"NonlinearFactor\",\n+279 boost::serialization::base_object(*this));\n+280 ar & BOOST_SERIALIZATION_NVP(noiseModel_);\n+281 }\n+282\n+283}; // \\class NoiseModelFactor\n+284\n+285/* *************************************************************************\n+*/\n+286namespace detail {\n+299template \n+300struct NoiseModelFactorAliases {};\n+301template \n+302struct NoiseModelFactorAliases {\n+303 using X = T1;\n+304 using X1 = T1;\n+305};\n+306template \n+307struct NoiseModelFactorAliases {\n+308 using X1 = T1;\n+309 using X2 = T2;\n+310};\n+311template \n+312struct NoiseModelFactorAliases {\n+313 using X1 = T1;\n+314 using X2 = T2;\n+315 using X3 = T3;\n+316};\n+317template \n+318struct NoiseModelFactorAliases {\n+319 using X1 = T1;\n+320 using X2 = T2;\n+321 using X3 = T3;\n+322 using X4 = T4;\n+323};\n+324template \n+325struct NoiseModelFactorAliases {\n+326 using X1 = T1;\n+327 using X2 = T2;\n+328 using X3 = T3;\n+329 using X4 = T4;\n+330 using X5 = T5;\n+331};\n+332template \n+334struct NoiseModelFactorAliases {\n+335 using X1 = T1;\n+336 using X2 = T2;\n+337 using X3 = T3;\n+338 using X4 = T4;\n+339 using X5 = T5;\n+340 using X6 = T6;\n+341};\n+342} // namespace detail\n+343\n+344/* *************************************************************************\n+*/\n+397template \n+_\b3_\b9_\b8class _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+399 : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br,\n+400 public detail::NoiseModelFactorAliases {\n+401 public:\n+403 enum { N = sizeof...(ValueTypes) };\n+404\n+405 protected:\n+406 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br;\n+407 using This = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN;\n+408\n+411\n+412 template \n+413 using IsConvertible =\n+414 typename std::enable_if::value, void>::type;\n+415\n+416 template \n+417 using IndexIsValid = typename std::enable_if<(I >= 1) && (I <= N),\n+418 void>::type; // 1-indexed!\n+419\n+420 template \n+421 using ContainerElementType =\n+422 typename std::decay()._\bb_\be_\bg_\bi_\bn())>::type;\n+423 template \n+424 using IsContainerOfKeys = IsConvertible,\n+_\bK_\be_\by>;\n+425\n+427\n+428 /* Like std::void_t, except produces `boost::optional` instead of\n+429 * `void`. Used to expand fixed-type parameter-packs with same length as\n+430 * ValueTypes. */\n+431 template \n+432 using OptionalMatrix = boost::optional;\n+433\n+434 /* Like std::void_t, except produces `Key` instead of `void`. Used to\n+expand\n+435 * fixed-type parameter-packs with same length as ValueTypes. */\n+436 template \n+437 using KeyType = _\bK_\be_\by;\n+438\n+439 public:\n+459 template >\n+_\b4_\b6_\b0 using _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be =\n+461 typename std::tuple_element>::type;\n+462\n+463 public:\n+464\n+467\n+_\b4_\b6_\b9 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN() {}\n+470\n+_\b4_\b7_\b8 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl,\n+479 KeyType... _\bk_\be_\by_\bs)\n+480 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, std::array<_\bK_\be_\by, N>{_\bk_\be_\by_\bs...}) {}\n+481\n+489 template ,\n+490 typename = IsContainerOfKeys>\n+_\b4_\b9_\b1 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, CONTAINER _\bk_\be_\by_\bs)\n+492 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, _\bk_\be_\by_\bs) {\n+493 if (_\bk_\be_\by_\bs.size() != N) {\n+494 throw std::invalid_argument(\n+495 \"NoiseModelFactorN: wrong number of keys given\");\n+496 }\n+497 }\n+498\n+500\n+501 _\b~_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN() override {}\n+502\n+517 template \n+_\b5_\b1_\b8 inline _\bK_\be_\by _\bk_\be_\by() const {\n+519 static_assert(I <= N, \"Index out of bounds\");\n+520 return _\bk_\be_\by_\bs_\b_[I - 1];\n+521 }\n+522\n+525\n+_\b5_\b4_\b2 Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(\n+543 const _\bV_\ba_\bl_\bu_\be_\bs& x,\n+544 boost::optional&> H = boost::none) const override {\n+545 return _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(boost::mp11::index_sequence_for{}, x,\n+546 H);\n+547 }\n+548\n+552\n+_\b5_\b7_\b5 virtual Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const ValueTypes&... x,\n+576 OptionalMatrix... H) const = 0;\n+577\n+579\n+582\n+_\b5_\b8_\b9 inline Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const ValueTypes&... x) const {\n+590 return _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(x..., OptionalMatrix()...);\n+591 }\n+592\n+597 template >\n+_\b5_\b9_\b9 inline Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const ValueTypes&... x,\n+600 OptionalJacArgs&&... H) const {\n+601 return _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(x..., std::forward(H)...,\n+602 boost::none);\n+603 }\n+604\n+606\n+607 private:\n+614 template \n+615 inline Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(\n+616 boost::mp11::index_sequence, //\n+617 const _\bV_\ba_\bl_\bu_\be_\bs& x,\n+618 boost::optional&> H = boost::none) const {\n+619 if (this->_\ba_\bc_\bt_\bi_\bv_\be(x)) {\n+620 if (H) {\n+621 return _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(x._\ba_\bt(_\bk_\be_\by_\bs_\b_[Indices])...,\n+622 (*H)[Indices]...);\n+623 } else {\n+624 return _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(x._\ba_\bt(_\bk_\be_\by_\bs_\b_[Indices])...);\n+625 }\n+626 } else {\n+627 return Vector::Zero(this->_\bd_\bi_\bm());\n+628 }\n+629 }\n+630\n+_\b6_\b3_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+633 template \n+634 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+635 ar& boost::serialization::make_nvp(\n+636 \"NoiseModelFactor\", boost::serialization::base_object(*this));\n+637 }\n+638\n+639 public:\n+642\n+643 inline _\bK_\be_\by key1() const {\n+644 return key<1>();\n+645 }\n+646 template \n+647 inline _\bK_\be_\by key2() const {\n+648 static_assert(I <= N, \"Index out of bounds\");\n+649 return key<2>();\n+650 }\n+651 template \n+652 inline _\bK_\be_\by key3() const {\n+653 static_assert(I <= N, \"Index out of bounds\");\n+654 return key<3>();\n+655 }\n+656 template \n+657 inline _\bK_\be_\by key4() const {\n+658 static_assert(I <= N, \"Index out of bounds\");\n+659 return key<4>();\n+660 }\n+661 template \n+662 inline _\bK_\be_\by key5() const {\n+663 static_assert(I <= N, \"Index out of bounds\");\n+664 return key<5>();\n+665 }\n+666 template \n+667 inline _\bK_\be_\by key6() const {\n+668 static_assert(I <= N, \"Index out of bounds\");\n+669 return key<6>();\n+670 }\n+671\n+673\n+674}; // \\class NoiseModelFactorN\n+675\n+676#define NoiseModelFactor1 NoiseModelFactorN\n+677#define NoiseModelFactor2 NoiseModelFactorN\n+678#define NoiseModelFactor3 NoiseModelFactorN\n+679#define NoiseModelFactor4 NoiseModelFactorN\n+680#define NoiseModelFactor5 NoiseModelFactorN\n+681#define NoiseModelFactor6 NoiseModelFactorN\n+682\n+683} // namespace gtsam\n+_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n+Special class for optional Jacobian arguments.\n+_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+The base class for all factors.\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+A non-templated config holding any types of Manifold-group elements.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be\n-GncLossType\n-Choice of robust loss function for GNC.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n-BaseOptimizerParameters baseOptimizerParams\n-GNC parameters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs\n-IndexVector knownInliers\n-Slots in the factor graph corresponding to measurements that we know are\n-outliers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs\n-GncParams()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bT_\by_\bp_\be\n-BaseOptimizerParameters::OptimizerType OptimizerType\n-For each parameter, specify the corresponding optimizer: e.g.,\n-GaussNewtonParams -> GaussNewtonOptimi...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bK_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs\n-void setKnownInliers(const IndexVector &knownIn)\n-(Optional) Provide a vector of measurements that must be considered inliers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &str) const\n-Print.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< uint64_t > IndexVector\n-Slots in the factor graph corresponding to measurements that we know are\n-inliers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs\n-GncParams(const BaseOptimizerParameters &baseOptimizerParams)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+const_iterator begin() const\n+Iterator at beginning of involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+virtual boost::shared_ptr< GaussianFactor > linearize(const Values &c) const =0\n+linearize to a GaussianFactor\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n+virtual size_t dim() const =0\n+get the dimension of the factor (number of rows on linearization)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+NonlinearFactor()\n+Default constructor for I/O only.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n+virtual bool active(const Values &) const\n+Checks whether a factor should be used based on a set of values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+NonlinearFactor(const CONTAINER &keys)\n+Constructor from a collection of the keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\be_\bn_\bd_\ba_\bb_\bl_\be\n+virtual bool sendable() const\n+Should the factor be evaluated in the same thread as the caller This is to\n+enable factors that has sh...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual shared_ptr clone() const\n+Creates a shared_ptr clone of the factor - needs to be specialized to allow for\n+subclasses.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+virtual ~NonlinearFactor()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n+density Templated on...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+NoiseModelFactor(const SharedNoiseModel &noiseModel, const CONTAINER &keys)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:198\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+~NoiseModelFactor() override\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+NoiseModelFactor(const SharedNoiseModel &noiseModel)\n+Constructor - only for subclasses, as this does not set keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:206\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+get the dimension of the factor (number of rows on linearization)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:218\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+NoiseModelFactor()\n+Default constructor for I/O only.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+const SharedNoiseModel & noiseModel() const\n+access to the noise model\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n+virtual Vector unwhitenedError(const Values &x, boost::optional< std::vector<\n+Matrix > & > H=boost::none) const =0\n+Error function without the NoiseModel, .\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const ValueTypes &... x) const\n+No-Jacobians requested function overload.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:589\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+NoiseModelFactorN(const SharedNoiseModel &noiseModel, CONTAINER keys)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:491\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+NoiseModelFactorN(const SharedNoiseModel &noiseModel, KeyType< ValueTypes >...\n+keys)\n Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\bu_\bS_\bt_\be_\bp\n-double muStep\n-Multiplicative factor to reduce/increase the mu in gnc.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl\n-double weightsTol\n-If the weights are within weightsTol from being binary, stop iterating (only\n-for TLS)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bK_\bn_\bo_\bw_\bn_\bO_\bu_\bt_\bl_\bi_\be_\br_\bs\n-void setKnownOutliers(const IndexVector &knownOut)\n-(Optional) Provide a vector of measurements that must be considered outliers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n-Verbosity verbosity\n-Verbosity level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const GncParams &other, double tol=1e-9) const\n-Equals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:142\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bR_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl\n-void setRelativeCostTol(double value)\n-Set the maximum relative difference in mu values to stop iterating.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\bo_\bs_\bs_\bT_\by_\bp_\be\n-GncLossType lossType\n-any other specific GNC parameters:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n-size_t maxIterations\n-Maximum number of iterations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be\n-void setLossType(const GncLossType type)\n-Set the robust loss function to be used in GNC (chosen among the ones in\n-GncLossType).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bM_\bu_\bS_\bt_\be_\bp\n-void setMuStep(const double step)\n-Set the graduated non-convexity step: at each GNC iteration, mu is updated as\n-mu <- mu * muStep.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl\n-double relativeCostTol\n-If relative cost change is below this threshold, stop iterating.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bG_\bN_\bC\n-void setVerbosityGNC(const Verbosity value)\n-Set the verbosity level.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bM_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n-void setMaxIterations(const size_t maxIter)\n-Set the maximum number of iterations in GNC (changing the max nr of iters might\n-lead to less accurate...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:90\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n-Verbosity\n-Verbosity levels.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl\n-void setWeightsTol(double value)\n-Set the maximum difference between the weights and their rounding in {0,1} to\n-stop iterating.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:108\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:478\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n+Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix >\n+& > H=boost::none) const override\n+This implements the unwhitenedError virtual function by calling the n-key\n+specific version of evaluat...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:542\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+NoiseModelFactorN()\n+Default Constructor for I/O.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:469\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+virtual Vector evaluateError(const ValueTypes &... x, OptionalMatrix<\n+ValueTypes >... H) const =0\n+Override evaluateError to finish implementing an n-way factor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be\n+typename std::tuple_element< I - 1, std::tuple< ValueTypes... > >::type\n+ValueType\n+The type of the I'th template param can be obtained as ValueType.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:461\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:632\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bk_\be_\by\n+Key key() const\n+Returns a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const ValueTypes &... x, OptionalJacArgs &&... H) const\n+Some (but not all) optional Jacobians are omitted (function overload)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:599\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+const ValueType at(Key j) const\n+Retrieve a variable by key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * G\bGn\bnc\bcP\bPa\bar\bra\bam\bms\bs.\b.h\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01028.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01028.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtOptimizer.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,90 +94,40 @@\n \n \n \n \n \n
\n \n-
Expression.h File Reference
\n+Namespaces
\n+
LevenbergMarquardtOptimizer.cpp File Reference
\n \n
\n \n-

Expressions for Block Automatic Differentiation. \n+

A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::Expression< T >
 Expression class that supports automatic differentiation. More...
 
struct  gtsam::Expression< T >::UnaryFunction< A1 >
 
struct  gtsam::Expression< T >::BinaryFunction< A1, A2 >
 
struct  gtsam::Expression< T >::TernaryFunction< A1, A2, A3 >
 
class  gtsam::ScalarMultiplyExpression< T >
 A ScalarMultiplyExpression is a specialization of Expression that multiplies with a scalar It optimizes the Jacobian calculation for this specific case. More...
 
class  gtsam::BinarySumExpression< T >
 A BinarySumExpression is a specialization of Expression that adds two expressions together It optimizes the Jacobian calculation for this specific case. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-Functions

template<typename T , typename A >
Expression< T > gtsam::linearExpression (const std::function< T(A)> &f, const Expression< A > &expression, const Eigen::Matrix< double, traits< T >::dimension, traits< A >::dimension > &dTdA)
 Create an expression out of a linear function f:T->A with (constant) Jacobian dTdA TODO(frank): create a more efficient version like ScalarMultiplyExpression.
 
\n-template<typename T >
ScalarMultiplyExpression< T > gtsam::operator* (double s, const Expression< T > &e)
 Construct an expression that executes the scalar multiplication with an input expression The type T must be a vector space Example: Expression<Point2> a(0), b = 12 * a;.
 
\n-template<typename T >
BinarySumExpression< T > gtsam::operator+ (const Expression< T > &e1, const Expression< T > &e2)
 Construct an expression that sums two input expressions of the same type T The type T must be a vector space Example: Expression<Point2> a(0), b(1), c = a + b;.
 
\n-template<typename T >
BinarySumExpression< T > gtsam::operator- (const Expression< T > &e1, const Expression< T > &e2)
 Construct an expression that subtracts one expression from another.
 
template<typename T >
Expression< T > gtsam::operator* (const Expression< T > &expression1, const Expression< T > &expression2)
 Construct a product expression, assumes T::compose(T) -> T.
 
template<typename T >
std::vector< Expression< T > > gtsam::createUnknowns (size_t n, char c, size_t start)
 Construct an array of leaves.
 
\n

Detailed Description

\n-

Expressions for Block Automatic Differentiation.

\n-
Date
September 18, 2014
\n-
Author
Frank Dellaert
\n+

A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.

\n+
Author
Richard Roberts
\n+
\n+Frank Dellaert
\n
\n-Paul Furgale
\n+Luca Carlone
\n+
Date
Feb 26, 2012
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,89 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Expression.h File Reference\n-Expressions for Block Automatic Differentiation. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>\n-\u00a0 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn class that supports automatic differentiation. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>_\b:_\b:_\bU_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bA_\b1_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>_\b:_\b:_\bT_\be_\br_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b,_\b _\bA_\b3_\b _\b>\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>\n- A _\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn is a specialization of _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn that\n-\u00a0 multiplies with a scalar It optimizes the Jacobian calculation for\n- this specific case. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>\n- A _\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn is a specialization of _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn that adds two\n-\u00a0 expressions together It optimizes the Jacobian calculation for this\n- specific case. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+LevenbergMarquardtOptimizer.cpp File Reference\n+A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn (const std::function< T\n- (A)> &f, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< A > &expression,\n- const Eigen::Matrix< double, _\bt_\br_\ba_\bi_\bt_\bs< T >::\n- dimension, _\bt_\br_\ba_\bi_\bt_\bs< A >::dimension > &dTdA)\n- Create an expression out of a linear function\n-\u00a0 f:T->A with (constant) Jacobian dTdA TODO\n- (frank): create a more efficient version like\n- _\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn.\n-\u00a0\n-template\n- _\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br*\b* (double s, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T\n- > &e)\n- Construct an expression that executes the\n-\u00a0 scalar multiplication with an input expression\n- The type T must be a vector space Example:\n- Expression a(0), b = 12 * a;.\n-\u00a0\n-template\n- _\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br+\b+ (const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > &e1,\n- const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > &e2)\n- Construct an expression that sums two input\n-\u00a0 expressions of the same type T The type T must\n- be a vector space Example: Expression a\n- (0), b(1), c = a + b;.\n-\u00a0\n-template\n- _\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br-\b- (const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > &e1,\n- const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > &e2)\n-\u00a0 Construct an expression that subtracts one\n- expression from another.\n-\u00a0\n-template\n- _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b* (const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\n- &expression1, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\n- &expression2)\n-\u00a0 Construct a product expression, assumes T::\n- compose(T) -> T.\n-\u00a0\n-template\n-std::vector< _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs (size_t n, char c, size_t\n- start)\n-\u00a0 Construct an array of leaves.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Expressions for Block Automatic Differentiation.\n- Date\n- September 18, 2014\n+A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n Author\n+ Richard Roberts\n Frank Dellaert\n- Paul Furgale\n+ Luca Carlone\n+ Date\n+ Feb 26, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh\n+ * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01031.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01031.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GraphvizFormatting.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GaussNewtonOptimizer.h File Reference\n \n \n \n \n \n \n \n@@ -96,43 +96,42 @@\n \n \n \n
\n \n-
GraphvizFormatting.h File Reference
\n+
GaussNewtonOptimizer.h File Reference
\n
\n
\n \n-

Graphviz formatter for NonlinearFactorGraph. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

struct  gtsam::GraphvizFormatting
 Formatting options and functions for saving a NonlinearFactorGraph instance in GraphViz format. More...
class  gtsam::GaussNewtonParams
 Parameters for Gauss-Newton optimization, inherits from NonlinearOptimizationParams. More...
 
class  gtsam::GaussNewtonOptimizer
 This class performs Gauss-Newton nonlinear optimization. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Graphviz formatter for NonlinearFactorGraph.

\n-
Author
Frank Dellaert
\n-
Date
December, 2021
\n+
Author
Richard Roberts
\n+
Date
Feb 26, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GraphvizFormatting.h File Reference\n-Graphviz formatter for NonlinearFactorGraph. _\bM_\bo_\br_\be_\b._\b._\b.\n+GaussNewtonOptimizer.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg\n-\u00a0 Formatting options and functions for saving a _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n- instance in GraphViz format. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+\u00a0 Parameters for Gauss-Newton optimization, inherits from\n+ NonlinearOptimizationParams. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+\u00a0 This class performs Gauss-Newton nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Graphviz formatter for NonlinearFactorGraph.\n Author\n- Frank Dellaert\n+ Richard Roberts\n Date\n- December, 2021\n+ Feb 26, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01031.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01031.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a01031 = [\n- [\"gtsam::GraphvizFormatting\", \"a04368.html\", \"a04368\"]\n+ [\"gtsam::GaussNewtonParams\", \"a04352.html\", null],\n+ [\"gtsam::GaussNewtonOptimizer\", \"a04356.html\", \"a04356\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01031_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01031_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GraphvizFormatting.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GaussNewtonOptimizer.h Source File\n \n \n \n \n \n \n \n@@ -98,86 +98,91 @@\n
No Matches
\n \n \n \n \n \n
\n-
GraphvizFormatting.h
\n+
GaussNewtonOptimizer.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2021, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n+\n
22
\n
23namespace gtsam {
\n
24
\n-
25class Values;
\n-
26class Value;
\n-
27
\n-
\n-
32struct GTSAM_EXPORT GraphvizFormatting : public DotWriter {
\n-
34 enum Axis { X, Y, Z, NEGX, NEGY, NEGZ };
\n-
35
\n-\n-\n-
40 double scale;
\n-\n-
43
\n-
\n-\n-
47 : paperHorizontalAxis(Y),
\n-
48 paperVerticalAxis(X),
\n-
49 scale(1),
\n-
50 mergeSimilarFactors(false) {}
\n-
\n-
51
\n-
52 // Find bounds
\n-
53 Vector2 findBounds(const Values& values, const KeySet& keys) const;
\n-
54
\n-
56 boost::optional<Vector2> extractPosition(const Value& value) const;
\n+
25class GaussNewtonOptimizer;
\n+
26
\n+
\n+
30class GTSAM_EXPORT GaussNewtonParams : public NonlinearOptimizerParams {
\n+
31public:
\n+\n+
33};
\n+
\n+
34
\n+
\n+
38class GTSAM_EXPORT GaussNewtonOptimizer : public NonlinearOptimizer {
\n+
39
\n+
40protected:
\n+
41 GaussNewtonParams params_;
\n+
42
\n+
43public:
\n+
46
\n+
55 GaussNewtonOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n+
56 const GaussNewtonParams& params = GaussNewtonParams());
\n
57
\n-
59 boost::optional<Vector2> variablePos(const Values& values, const Vector2& min,
\n-
60 Key key) const;
\n-
61
\n-
63 boost::optional<Vector2> factorPos(const Vector2& min, size_t i) const;
\n-
64};
\n-
\n-
65
\n-
66} // namespace gtsam
\n-
Graphviz formatter.
\n+
65 GaussNewtonOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n+
66 const Ordering& ordering);
\n+
68
\n+
71
\n+\n+
74
\n+
79 GaussianFactorGraph::shared_ptr iterate() override;
\n+
80
\n+
82 const GaussNewtonParams& params() const { return params_; }
\n+
83
\n+
85
\n+
86protected:
\n+
88 const NonlinearOptimizerParams& _params() const override { return params_; }
\n+
89
\n+
91 GaussNewtonParams ensureHasOrdering(GaussNewtonParams params, const NonlinearFactorGraph& graph) const;
\n+
92
\n+
93};
\n+
\n+
94
\n+
95}
\n+
Base class and parameters for nonlinear optimization algorithms.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-\n-
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n-
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n-
Formatting options and functions for saving a NonlinearFactorGraph instance in GraphViz format.
Definition GraphvizFormatting.h:32
\n-
Axis
World axes to be assigned to paper axes.
Definition GraphvizFormatting.h:34
\n-
Axis paperVerticalAxis
The world axis assigned to the vertical paper axis.
Definition GraphvizFormatting.h:38
\n-
GraphvizFormatting()
Default constructor sets up robot coordinates.
Definition GraphvizFormatting.h:46
\n-
bool mergeSimilarFactors
Merge multiple factors that have the same connectivity.
Definition GraphvizFormatting.h:41
\n-
double scale
Scale all positions to reduce / increase density.
Definition GraphvizFormatting.h:40
\n-
Axis paperHorizontalAxis
The world axis assigned to the horizontal paper axis.
Definition GraphvizFormatting.h:36
\n+
Definition Ordering.h:34
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n+
Parameters for Gauss-Newton optimization, inherits from NonlinearOptimizationParams.
Definition GaussNewtonOptimizer.h:30
\n+
This class performs Gauss-Newton nonlinear optimization.
Definition GaussNewtonOptimizer.h:38
\n+
const GaussNewtonParams & params() const
Read-only access the parameters.
Definition GaussNewtonOptimizer.h:82
\n+
~GaussNewtonOptimizer() override
Virtual destructor.
Definition GaussNewtonOptimizer.h:73
\n+
const NonlinearOptimizerParams & _params() const override
Access the parameters (base class version)
Definition GaussNewtonOptimizer.h:88
\n+
Definition NonlinearFactorGraph.h:55
\n+
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition NonlinearOptimizer.h:75
\n+
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,110 +1,111 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GraphvizFormatting.h\n+GaussNewtonOptimizer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2021, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n 22\n 23namespace _\bg_\bt_\bs_\ba_\bm {\n 24\n-25class _\bV_\ba_\bl_\bu_\be_\bs;\n-26class Value;\n-27\n-_\b3_\b2struct GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg : public _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br {\n-_\b3_\b4 enum _\bA_\bx_\bi_\bs { X, Y, Z, NEGX, NEGY, NEGZ };\n-35\n-_\b3_\b6 _\bA_\bx_\bi_\bs _\bp_\ba_\bp_\be_\br_\bH_\bo_\br_\bi_\bz_\bo_\bn_\bt_\ba_\bl_\bA_\bx_\bi_\bs;\n-_\b3_\b8 _\bA_\bx_\bi_\bs _\bp_\ba_\bp_\be_\br_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bA_\bx_\bi_\bs;\n-_\b4_\b0 double _\bs_\bc_\ba_\bl_\be;\n-_\b4_\b1 bool _\bm_\be_\br_\bg_\be_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs;\n-43\n-_\b4_\b6 _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg()\n-47 : paperHorizontalAxis(Y),\n-48 paperVerticalAxis(X),\n-49 scale(1),\n-50 mergeSimilarFactors(false) {}\n-51\n-52 // Find bounds\n-53 Vector2 findBounds(const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bK_\be_\by_\bS_\be_\bt& keys) const;\n-54\n-56 boost::optional extractPosition(const _\bV_\ba_\bl_\bu_\be& value) const;\n+25class GaussNewtonOptimizer;\n+26\n+_\b3_\b0class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs {\n+31public:\n+32 using _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bT_\by_\bp_\be = _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br;\n+33};\n+34\n+_\b3_\b8class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n+39\n+40protected:\n+41 _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs params_;\n+42\n+43public:\n+46\n+55 _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n+initialValues,\n+56 const _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& params = _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs());\n 57\n-59 boost::optional variablePos(const _\bV_\ba_\bl_\bu_\be_\bs& values, const Vector2&\n-min,\n-60 _\bK_\be_\by key) const;\n-61\n-63 boost::optional factorPos(const Vector2& min, size_t i) const;\n-64};\n-65\n-66} // namespace gtsam\n-_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh\n-Graphviz formatter.\n+65 _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n+initialValues,\n+66 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering);\n+68\n+71\n+_\b7_\b3 _\b~_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br() override {}\n+74\n+79 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br iterate() override;\n+80\n+_\b8_\b2 const _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& _\bp_\ba_\br_\ba_\bm_\bs() const { return params_; }\n+83\n+85\n+86protected:\n+_\b8_\b8 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& _\b__\bp_\ba_\br_\ba_\bm_\bs() const override { return params_; }\n+89\n+91 _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs ensureHasOrdering(_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs params, const\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph) const;\n+92\n+93};\n+94\n+95}\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+Base class and parameters for nonlinear optimization algorithms.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-This is the base class for any type to be stored in Values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n-DotWriter is a helper class for writing graphviz .dot files.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg\n-Formatting options and functions for saving a NonlinearFactorGraph instance in\n-GraphViz format.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bA_\bx_\bi_\bs\n-Axis\n-World axes to be assigned to paper axes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bp_\ba_\bp_\be_\br_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bA_\bx_\bi_\bs\n-Axis paperVerticalAxis\n-The world axis assigned to the vertical paper axis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg\n-GraphvizFormatting()\n-Default constructor sets up robot coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bm_\be_\br_\bg_\be_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-bool mergeSimilarFactors\n-Merge multiple factors that have the same connectivity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bs_\bc_\ba_\bl_\be\n-double scale\n-Scale all positions to reduce / increase density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bp_\ba_\bp_\be_\br_\bH_\bo_\br_\bi_\bz_\bo_\bn_\bt_\ba_\bl_\bA_\bx_\bi_\bs\n-Axis paperHorizontalAxis\n-The world axis assigned to the horizontal paper axis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for Gauss-Newton optimization, inherits from\n+NonlinearOptimizationParams.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussNewtonOptimizer.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+This class performs Gauss-Newton nonlinear optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussNewtonOptimizer.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs\n+const GaussNewtonParams & params() const\n+Read-only access the parameters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussNewtonOptimizer.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b~_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+~GaussNewtonOptimizer() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussNewtonOptimizer.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b__\bp_\ba_\br_\ba_\bm_\bs\n+const NonlinearOptimizerParams & _params() const override\n+Access the parameters (base class version)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussNewtonOptimizer.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+This is the abstract interface for classes that can optimize for the maximum-\n+likelihood estimate of a...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+The common parameters for Nonlinear optimizers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01034.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01034.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizer.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearConjugateGradientOptimizer.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,47 +94,36 @@\n \n \n \n \n \n
\n \n-
NonlinearOptimizer.cpp File Reference
\n+Namespaces
\n+
NonlinearConjugateGradientOptimizer.cpp File Reference
\n \n
\n \n-

Convergence functions not dependent on graph types. \n+

Simple non-linear optimizer that solves using non-preconditioned CG. \n More...

\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-bool gtsam::checkConvergence (double relativeErrorTreshold, double absoluteErrorTreshold, double errorThreshold, double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity=NonlinearOptimizerParams::SILENT)
 Check whether the relative error decrease is less than relativeErrorTreshold, the absolute error decrease is less than absoluteErrorTreshold, or the error itself is less than errorThreshold.
 
\n-GTSAM_EXPORT bool gtsam::checkConvergence (const NonlinearOptimizerParams &params, double currentError, double newError)
 
\n

Detailed Description

\n-

Convergence functions not dependent on graph types.

\n-
Author
Frank Dellaert
\n-
Date
Jul 17, 2010
\n+

Simple non-linear optimizer that solves using non-preconditioned CG.

\n+
Author
Yong-Dian Jian
\n+
Date
Jun 11, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-NonlinearOptimizer.cpp File Reference\n-Convergence functions not dependent on graph types. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+NonlinearConjugateGradientOptimizer.cpp File Reference\n+Simple non-linear optimizer that solves using n\bno\bon\bn-\b-p\bpr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\bed\bd CG. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bch\bhe\bec\bck\bkC\bCo\bon\bnv\bve\ber\brg\bge\ben\bnc\bce\be (double relativeErrorTreshold,\n- double absoluteErrorTreshold, double errorThreshold, double\n- currentError, double newError, _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:\n- _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by verbosity=NonlinearOptimizerParams::SILENT)\n- Check whether the relative error decrease is less than\n-\u00a0 relativeErrorTreshold, the absolute error decrease is less\n- than absoluteErrorTreshold, o\bor\br the error itself is less than\n- errorThreshold.\n-\u00a0\n-GTSAM_EXPORT bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bch\bhe\bec\bck\bkC\bCo\bon\bnv\bve\ber\brg\bge\ben\bnc\bce\be (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n- ¶ms, double currentError, double newError)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Convergence functions not dependent on graph types.\n+Simple non-linear optimizer that solves using n\bno\bon\bn-\b-p\bpr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\bed\bd CG.\n Author\n- Frank Dellaert\n+ Yong-Dian Jian\n Date\n- Jul 17, 2010\n+ Jun 11, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01037.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01037.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/WhiteNoiseFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.h File Reference\n \n \n \n \n \n \n \n@@ -96,53 +96,57 @@\n \n \n \n
\n \n-
WhiteNoiseFactor.h File Reference
\n+Typedefs
\n+
ISAM2Params.h File Reference
\n \n
\n \n-

Binary white noise factor. \n+

Parameters for iSAM 2. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::WhiteNoiseFactor
 Binary factor to estimate parameters of zero-mean Gaussian white noise. More...
struct  gtsam::ISAM2GaussNewtonParams
 Parameters for ISAM2 using Gauss-Newton optimization. More...
 
struct  gtsam::ISAM2DoglegParams
 Parameters for ISAM2 using Dogleg optimization. More...
 
struct  gtsam::ISAM2Params
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n

\n-Variables

\n-const double gtsam::logSqrt2PI = log(std::sqrt(2.0 * M_PI))
 constant needed below
 

\n+Typedefs

typedef FastMap< char, Vector > gtsam::ISAM2ThresholdMap
 Parameters for the ISAM2 algorithm.
 
\n+typedef ISAM2ThresholdMap::value_type gtsam::ISAM2ThresholdMapValue
 
\n

Detailed Description

\n-

Binary white noise factor.

\n-
Author
Chris Beall
\n-
\n-Frank Dellaert
\n-
Date
September 2011
\n+

Parameters for iSAM 2.

\n+
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,36 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-WhiteNoiseFactor.h File Reference\n-Binary white noise factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+ISAM2Params.h File Reference\n+Parameters for iSAM 2. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Binary factor to estimate parameters of zero-mean Gaussian white noise.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+\u00a0 Parameters for _\bI_\bS_\bA_\bM_\b2 using Gauss-Newton optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs\n+\u00a0 Parameters for _\bI_\bS_\bA_\bM_\b2 using Dogleg optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n-const double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\blo\bog\bgS\bSq\bqr\brt\bt2\b2P\bPI\bI = log(std::sqrt(2.0 * M_PI))\n-\u00a0 constant needed below\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+ typedef _\bF_\ba_\bs_\bt_\bM_\ba_\bp< char, Vector >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bM_\ba_\bp\n+\u00a0 Parameters for the _\bI_\bS_\bA_\bM_\b2 algorithm.\n+\u00a0\n+typedef ISAM2ThresholdMap::value_type\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIS\bSA\bAM\bM2\b2T\bTh\bhr\bre\bes\bsh\bho\bol\bld\bdM\bMa\bap\bpV\bVa\bal\blu\bue\be\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Binary white noise factor.\n+Parameters for iSAM 2.\n Author\n- Chris Beall\n- Frank Dellaert\n- Date\n- September 2011\n+ Michael Kaess, Richard Roberts, Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01037.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01037.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a01037 = [\n- [\"gtsam::WhiteNoiseFactor\", \"a04652.html\", \"a04652\"],\n- [\"logSqrt2PI\", \"a01037.html#ad5602eb85d05df6cba60e47eebbd3636\", null]\n+ [\"gtsam::ISAM2Params\", \"a04416.html\", \"a04416\"],\n+ [\"ISAM2ThresholdMap\", \"a01037.html#ga238e84a1d4a91f43465b12592a8bf8e4\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01037_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01037_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/WhiteNoiseFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.h Source File\n \n \n \n \n \n \n \n@@ -98,169 +98,307 @@\n
No Matches
\n \n \n \n \n \n
\n-
WhiteNoiseFactor.h
\n+
ISAM2Params.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n+
18// \\callgraph
\n+
19
\n
20#pragma once
\n
21
\n-\n-\n-
24#include <cmath>
\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
28 const double logSqrt2PI = log(std::sqrt(2.0 * M_PI));
\n-
29
\n-
\n-\n-
42
\n-
43 private:
\n-
44
\n-
45 double z_;
\n-
46
\n-
47 Key meanKey_;
\n-
48 Key precisionKey_;
\n-
49
\n-
50 typedef NonlinearFactor Base;
\n-
51
\n-
52 public:
\n-
53
\n-
\n-
61 static double f(double z, double u, double p) {
\n-
62 return logSqrt2PI - 0.5 * log(p) + 0.5 * (z - u) * (z - u) * p;
\n-
63 }
\n-
\n-
64
\n-
\n-
75 static HessianFactor::shared_ptr linearize(double z, double u, double p,
\n-
76 Key j1, Key j2) {
\n-
77 double e = u - z, e2 = e * e;
\n-
78 double c = 2 * logSqrt2PI - log(p) + e2 * p;
\n-
79 Vector g1 = (Vector(1) << -e * p).finished();
\n-
80 Vector g2 = (Vector(1) << 0.5 / p - 0.5 * e2).finished();
\n-
81 Matrix G11 = (Matrix(1, 1) << p).finished();
\n-
82 Matrix G12 = (Matrix(1, 1) << e).finished();
\n-
83 Matrix G22 = (Matrix(1, 1) << 0.5 / (p * p)).finished();
\n-\n-
85 new HessianFactor(j1, j2, G11, G12, g1, G22, g2, c));
\n-
86 }
\n-
\n-
87
\n-
90
\n-
\n-
96 WhiteNoiseFactor(double z, Key meanKey, Key precisionKey) :
\n-
97 Base(), z_(z), meanKey_(meanKey), precisionKey_(precisionKey) {
\n-
98 }
\n-
\n-
99
\n+\n+\n+
24#include <boost/variant.hpp>
\n+
25#include <string>
\n+
26
\n+
27namespace gtsam {
\n+
28
\n+
\n+
35struct GTSAM_EXPORT ISAM2GaussNewtonParams {
\n+
36 double
\n+\n+
39
\n+
\n+\n+
42 double _wildfireThreshold =
\n+
43 0.001
\n+
45 )
\n+
46 : wildfireThreshold(_wildfireThreshold) {}
\n+
\n+
47
\n+
48 void print(const std::string str = "") const {
\n+
49 using std::cout;
\n+
50 cout << str << "type: ISAM2GaussNewtonParams\\n";
\n+
51 cout << str << "wildfireThreshold: " << wildfireThreshold << "\\n";
\n+
52 cout.flush();
\n+
53 }
\n+
54
\n+
55 double getWildfireThreshold() const { return wildfireThreshold; }
\n+
56 void setWildfireThreshold(double wildfireThreshold) {
\n+
57 this->wildfireThreshold = wildfireThreshold;
\n+
58 }
\n+
59};
\n+
\n+
60
\n+
\n+
67struct GTSAM_EXPORT ISAM2DoglegParams {
\n+
68 double initialDelta;
\n+
69 double
\n+\n+\n+\n+
75 bool
\n+\n+
77
\n+
\n+\n+
80 double _initialDelta = 1.0,
\n+
81 double _wildfireThreshold =
\n+
82 1e-5,
\n+\n+\n+
85 SEARCH_EACH_ITERATION,
\n+
86 bool _verbose = false
\n+
87 )
\n+
88 : initialDelta(_initialDelta),
\n+
89 wildfireThreshold(_wildfireThreshold),
\n+
90 adaptationMode(_adaptationMode),
\n+
91 verbose(_verbose) {}
\n+
\n+
92
\n+
93 void print(const std::string str = "") const {
\n+
94 using std::cout;
\n+
95 cout << str << "type: ISAM2DoglegParams\\n";
\n+
96 cout << str << "initialDelta: " << initialDelta << "\\n";
\n+
97 cout << str << "wildfireThreshold: " << wildfireThreshold << "\\n";
\n+
98 cout << str
\n+
99 << "adaptationMode: " << adaptationModeTranslator(adaptationMode)
\n+
100 << "\\n";
\n+
101 cout.flush();
\n+
102 }
\n
103
\n-
\n-
105 ~WhiteNoiseFactor() override {
\n-
106 }
\n-
\n-
107
\n-
111
\n-
\n-
113 void print(const std::string& p = "WhiteNoiseFactor",
\n-
114 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
115 Base::print(p, keyFormatter);
\n-
116 std::cout << p + ".z: " << z_ << std::endl;
\n-
117 }
\n-
\n-
118
\n-
122
\n-
\n-
124 size_t dim() const override {
\n-
125 return 2;
\n-
126 }
\n+
104 double getInitialDelta() const { return initialDelta; }
\n+
105 double getWildfireThreshold() const { return wildfireThreshold; }
\n+
106 std::string getAdaptationMode() const {
\n+
107 return adaptationModeTranslator(adaptationMode);
\n+
108 }
\n+
109 bool isVerbose() const { return verbose; }
\n+
110 void setInitialDelta(double initialDelta) {
\n+
111 this->initialDelta = initialDelta;
\n+
112 }
\n+
113 void setWildfireThreshold(double wildfireThreshold) {
\n+
114 this->wildfireThreshold = wildfireThreshold;
\n+
115 }
\n+
116 void setAdaptationMode(const std::string& adaptationMode) {
\n+
117 this->adaptationMode = adaptationModeTranslator(adaptationMode);
\n+
118 }
\n+
119 void setVerbose(bool verbose) { this->verbose = verbose; }
\n+
120
\n+
121 std::string adaptationModeTranslator(
\n+
122 const DoglegOptimizerImpl::TrustRegionAdaptationMode& adaptationMode)
\n+
123 const;
\n+
124 DoglegOptimizerImpl::TrustRegionAdaptationMode adaptationModeTranslator(
\n+
125 const std::string& adaptationMode) const;
\n+
126};
\n
\n
127
\n-
\n-
129 double error(const Values& x) const override {
\n-
130 return f(z_, x.at<double>(meanKey_), x.at<double>(precisionKey_));
\n-
131 }
\n-
\n-
132
\n-
\n-
140 virtual Vector unwhitenedError(const Values& x) const {
\n-
141 return (Vector(1) << std::sqrt(2 * error(x))).finished();
\n-
142 }
\n-
\n+\n+
134typedef ISAM2ThresholdMap::value_type ISAM2ThresholdMapValue;
\n+
\n+
135struct GTSAM_EXPORT ISAM2Params {
\n+
136 typedef boost::variant<ISAM2GaussNewtonParams, ISAM2DoglegParams>
\n+\n+
139 typedef boost::variant<double, FastMap<char, Vector> >
\n+\n
143
\n-
148// virtual IndexFactor::shared_ptr symbolic(const Ordering& ordering) const {
\n-
149// const Key j1 = ordering[meanKey_], j2 = ordering[precisionKey_];
\n-
150// return IndexFactor::shared_ptr(new IndexFactor(j1, j2));
\n-
151// }
\n-
152
\n-
156
\n-
\n-
158 boost::shared_ptr<GaussianFactor> linearize(const Values& x) const override {
\n-
159 double u = x.at<double>(meanKey_);
\n-
160 double p = x.at<double>(precisionKey_);
\n-
161 Key j1 = meanKey_;
\n-
162 Key j2 = precisionKey_;
\n-
163 return linearize(z_, u, p, j1, j2);
\n-
164 }
\n-
\n-
165
\n-
166 // TODO: Frank commented this out for now, can it go?
\n-
167 // /// @return a deep copy of this factor
\n-
168 // gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
169 // return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
170 // gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n-
171
\n+\n+
151
\n+\n+
169
\n+\n
173
\n-
174 };
\n-
\n-
175// WhiteNoiseFactor
\n+\n
176
\n-
177}// namespace gtsam
\n-
178
\n-
Contains the HessianFactor class, a general quadratic factor.
\n-
Non-linear factor base classes.
\n+\n+
180
\n+
181 enum Factorization { CHOLESKY, QR };
\n+
193 Factorization factorization;
\n+
194
\n+\n+
201
\n+\n+\n+
205
\n+\n+
209
\n+\n+
219
\n+\n+
225
\n+
\n+\n+
231 RelinearizationThreshold _relinearizeThreshold = 0.1,
\n+
232 int _relinearizeSkip = 10, bool _enableRelinearization = true,
\n+
233 bool _evaluateNonlinearError = false,
\n+
234 Factorization _factorization = ISAM2Params::CHOLESKY,
\n+
235 bool _cacheLinearizedFactors = true,
\n+
236 const KeyFormatter& _keyFormatter =
\n+
237 DefaultKeyFormatter,
\n+
238 bool _enableDetailedResults = false)
\n+
239 : optimizationParams(_optimizationParams),
\n+
240 relinearizeThreshold(_relinearizeThreshold),
\n+
241 relinearizeSkip(_relinearizeSkip),
\n+
242 enableRelinearization(_enableRelinearization),
\n+
243 evaluateNonlinearError(_evaluateNonlinearError),
\n+
244 factorization(_factorization),
\n+
245 cacheLinearizedFactors(_cacheLinearizedFactors),
\n+
246 keyFormatter(_keyFormatter),
\n+
247 enableDetailedResults(_enableDetailedResults),
\n+
248 enablePartialRelinearizationCheck(false),
\n+
249 findUnusedFactorSlots(false) {}
\n+
\n+
250
\n+
\n+
252 void print(const std::string& str = "") const {
\n+
253 using std::cout;
\n+
254 cout << str << "\\n";
\n+
255
\n+
256 static const std::string kStr("optimizationParams: ");
\n+
257 if (optimizationParams.type() == typeid(ISAM2GaussNewtonParams))
\n+
258 boost::get<ISAM2GaussNewtonParams>(optimizationParams).print();
\n+
259 else if (optimizationParams.type() == typeid(ISAM2DoglegParams))
\n+
260 boost::get<ISAM2DoglegParams>(optimizationParams).print(kStr);
\n+
261 else
\n+
262 cout << kStr << "{unknown type}\\n";
\n+
263
\n+
264 cout << "relinearizeThreshold: ";
\n+
265 if (relinearizeThreshold.type() == typeid(double)) {
\n+
266 cout << boost::get<double>(relinearizeThreshold) << "\\n";
\n+
267 } else {
\n+
268 cout << "{mapped}\\n";
\n+
269 for (const ISAM2ThresholdMapValue& value :
\n+
270 boost::get<ISAM2ThresholdMap>(relinearizeThreshold)) {
\n+
271 cout << " '" << value.first
\n+
272 << "' -> [" << value.second.transpose() << " ]\\n";
\n+
273 }
\n+
274 }
\n+
275
\n+
276 cout << "relinearizeSkip: " << relinearizeSkip << "\\n";
\n+
277 cout << "enableRelinearization: " << enableRelinearization
\n+
278 << "\\n";
\n+
279 cout << "evaluateNonlinearError: " << evaluateNonlinearError
\n+
280 << "\\n";
\n+
281 cout << "factorization: "
\n+
282 << factorizationTranslator(factorization) << "\\n";
\n+
283 cout << "cacheLinearizedFactors: " << cacheLinearizedFactors
\n+
284 << "\\n";
\n+
285 cout << "enableDetailedResults: " << enableDetailedResults
\n+
286 << "\\n";
\n+
287 cout << "enablePartialRelinearizationCheck: "
\n+
288 << enablePartialRelinearizationCheck << "\\n";
\n+
289 cout << "findUnusedFactorSlots: " << findUnusedFactorSlots
\n+
290 << "\\n";
\n+
291 cout.flush();
\n+
292 }
\n+
\n+
293
\n+
296
\n+
297 OptimizationParams getOptimizationParams() const {
\n+
298 return this->optimizationParams;
\n+
299 }
\n+
300 RelinearizationThreshold getRelinearizeThreshold() const {
\n+
301 return relinearizeThreshold;
\n+
302 }
\n+
303 std::string getFactorization() const {
\n+
304 return factorizationTranslator(factorization);
\n+
305 }
\n+
306 KeyFormatter getKeyFormatter() const { return keyFormatter; }
\n+
307
\n+
308 void setOptimizationParams(OptimizationParams optimizationParams) {
\n+
309 this->optimizationParams = optimizationParams;
\n+
310 }
\n+
311 void setRelinearizeThreshold(RelinearizationThreshold relinearizeThreshold) {
\n+
312 this->relinearizeThreshold = relinearizeThreshold;
\n+
313 }
\n+
314 void setFactorization(const std::string& factorization) {
\n+
315 this->factorization = factorizationTranslator(factorization);
\n+
316 }
\n+
317 void setKeyFormatter(KeyFormatter keyFormatter) {
\n+
318 this->keyFormatter = keyFormatter;
\n+
319 }
\n+
320
\n+
321 GaussianFactorGraph::Eliminate getEliminationFunction() const {
\n+
322 return factorization == CHOLESKY
\n+
323 ? (GaussianFactorGraph::Eliminate)EliminatePreferCholesky
\n+
324 : (GaussianFactorGraph::Eliminate)EliminateQR;
\n+
325 }
\n+
326
\n+
328
\n+
331
\n+
332 static Factorization factorizationTranslator(const std::string& str);
\n+
333 static std::string factorizationTranslator(const Factorization& value);
\n+
334
\n+
336};
\n+
\n+
337
\n+
338} // namespace gtsam
\n+
Linear Factor Graph where all factors are Gaussians.
\n+
Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)
\n+
FastMap< char, Vector > ISAM2ThresholdMap
Parameters for the ISAM2 algorithm.
Definition ISAM2Params.h:133
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
const double logSqrt2PI
constant needed below
Definition WhiteNoiseFactor.h:28
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that h...
Definition JacobianFactor.cpp:789
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A Gaussian factor using the canonical parameters (information form)
Definition HessianFactor.h:101
\n-
boost::shared_ptr< This > shared_ptr
A shared_ptr to this class.
Definition HessianFactor.h:110
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition NonlinearFactor.cpp:37
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n-
Binary factor to estimate parameters of zero-mean Gaussian white noise.
Definition WhiteNoiseFactor.h:41
\n-
boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override
linearize returns a Hessianfactor that is an approximation of error(p)
Definition WhiteNoiseFactor.h:158
\n-
~WhiteNoiseFactor() override
Destructor.
Definition WhiteNoiseFactor.h:105
\n-
static HessianFactor::shared_ptr linearize(double z, double u, double p, Key j1, Key j2)
linearize returns a Hessianfactor that approximates error Hessian is
Definition WhiteNoiseFactor.h:75
\n-
void print(const std::string &p="WhiteNoiseFactor", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Print.
Definition WhiteNoiseFactor.h:113
\n-
WhiteNoiseFactor(double z, Key meanKey, Key precisionKey)
Construct from measurement.
Definition WhiteNoiseFactor.h:96
\n-
virtual Vector unwhitenedError(const Values &x) const
Vector of errors "unwhitened" does not make sense for this factor What is meant typically is only "e"...
Definition WhiteNoiseFactor.h:140
\n-
static double f(double z, double u, double p)
negative log likelihood as a function of mean and precision
Definition WhiteNoiseFactor.h:61
\n-
double error(const Values &x) const override
Calculate the error of the factor, typically equal to log-likelihood.
Definition WhiteNoiseFactor.h:129
\n-
size_t dim() const override
get the dimension of the factor (number of rows on linearization)
Definition WhiteNoiseFactor.h:124
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+
This class contains the implementation of the Dogleg algorithm.
Definition DoglegOptimizerImpl.h:32
\n+
TrustRegionAdaptationMode
Specifies how the trust region is adapted at each Dogleg iteration.
Definition DoglegOptimizerImpl.h:53
\n+
Parameters for ISAM2 using Gauss-Newton optimization.
Definition ISAM2Params.h:35
\n+
double wildfireThreshold
Continue updating the linear delta only when changes are above this threshold (default: 0....
Definition ISAM2Params.h:37
\n+
ISAM2GaussNewtonParams(double _wildfireThreshold=0.001)
Specify parameters as constructor arguments.
Definition ISAM2Params.h:41
\n+
Parameters for ISAM2 using Dogleg optimization.
Definition ISAM2Params.h:67
\n+
DoglegOptimizerImpl::TrustRegionAdaptationMode adaptationMode
See description in DoglegOptimizerImpl::TrustRegionAdaptationMode.
Definition ISAM2Params.h:73
\n+
bool verbose
Whether Dogleg prints iteration and convergence information.
Definition ISAM2Params.h:76
\n+
ISAM2DoglegParams(double _initialDelta=1.0, double _wildfireThreshold=1e-5, DoglegOptimizerImpl::TrustRegionAdaptationMode _adaptationMode=DoglegOptimizerImpl::SEARCH_EACH_ITERATION, bool _verbose=false)
Specify parameters as constructor arguments.
Definition ISAM2Params.h:79
\n+
double initialDelta
The initial trust region radius for Dogleg.
Definition ISAM2Params.h:68
\n+
double wildfireThreshold
Continue updating the linear delta only when changes are above this threshold (default: 1e-5)
Definition ISAM2Params.h:70
\n+
Definition ISAM2Params.h:135
\n+
bool enablePartialRelinearizationCheck
Check variables for relinearization in tree-order, stopping the check once a variable does not need t...
Definition ISAM2Params.h:218
\n+
OptimizationParams optimizationParams
Optimization parameters, this both selects the nonlinear optimization method and specifies its parame...
Definition ISAM2Params.h:150
\n+
void print(const std::string &str="") const
print iSAM2 parameters
Definition ISAM2Params.h:252
\n+
bool enableRelinearization
Controls whether ISAM2 will ever relinearize any variables (default: true)
Definition ISAM2Params.h:174
\n+
bool cacheLinearizedFactors
Whether to cache linear factors (default: true).
Definition ISAM2Params.h:200
\n+
bool evaluateNonlinearError
Whether to evaluate the nonlinear error before and after the update, to return in ISAM2Result from up...
Definition ISAM2Params.h:177
\n+
bool enableDetailedResults
Whether to compute and return ISAM2Result::detailedResults, this can increase running time (default: ...
Definition ISAM2Params.h:206
\n+
boost::variant< ISAM2GaussNewtonParams, ISAM2DoglegParams > OptimizationParams
Either ISAM2GaussNewtonParams or ISAM2DoglegParams.
Definition ISAM2Params.h:137
\n+
bool findUnusedFactorSlots
When you will be removing many factors, e.g.
Definition ISAM2Params.h:224
\n+
boost::variant< double, FastMap< char, Vector > > RelinearizationThreshold
Either a constant relinearization threshold or a per-variable-type set of thresholds.
Definition ISAM2Params.h:140
\n+
int relinearizeSkip
Only relinearize any variables every relinearizeSkip calls to ISAM2::update (default: 10)
Definition ISAM2Params.h:170
\n+
Factorization factorization
Specifies whether to use QR or CHOESKY numerical factorization (default: CHOLESKY).
Definition ISAM2Params.h:193
\n+
KeyFormatter keyFormatter
A KeyFormatter for when keys are printed during debugging (default: DefaultKeyFormatter)
Definition ISAM2Params.h:203
\n+
RelinearizationThreshold relinearizeThreshold
Only relinearize variables whose linear delta magnitude is greater than this threshold (default: 0....
Definition ISAM2Params.h:168
\n+
ISAM2Params(OptimizationParams _optimizationParams=ISAM2GaussNewtonParams(), RelinearizationThreshold _relinearizeThreshold=0.1, int _relinearizeSkip=10, bool _enableRelinearization=true, bool _evaluateNonlinearError=false, Factorization _factorization=ISAM2Params::CHOLESKY, bool _cacheLinearizedFactors=true, const KeyFormatter &_keyFormatter=DefaultKeyFormatter, bool _enableDetailedResults=false)
Specify parameters as constructor arguments See the documentation of member variables above.
Definition ISAM2Params.h:230
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,204 +1,405 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-WhiteNoiseFactor.h\n+ISAM2Params.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n+18// \\callgraph\n+19\n 20#pragma once\n 21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-24#include \n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-_\b2_\b8 const double _\bl_\bo_\bg_\bS_\bq_\br_\bt_\b2_\bP_\bI = log(std::sqrt(2.0 * M_PI));\n-29\n-_\b4_\b1 class _\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n-42\n-43 private:\n-44\n-45 double z_;\n-46\n-47 _\bK_\be_\by meanKey_;\n-48 _\bK_\be_\by precisionKey_;\n-49\n-50 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-51\n-52 public:\n-53\n-_\b6_\b1 static double _\bf(double z, double u, double p) {\n-62 return _\bl_\bo_\bg_\bS_\bq_\br_\bt_\b2_\bP_\bI - 0.5 * log(p) + 0.5 * (z - u) * (z - u) * p;\n-63 }\n-64\n-_\b7_\b5 static _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(double z, double u, double p,\n-76 _\bK_\be_\by j1, _\bK_\be_\by j2) {\n-77 double e = u - z, e2 = e * e;\n-78 double c = 2 * _\bl_\bo_\bg_\bS_\bq_\br_\bt_\b2_\bP_\bI - log(p) + e2 * p;\n-79 Vector g1 = (Vector(1) << -e * p).finished();\n-80 Vector g2 = (Vector(1) << 0.5 / p - 0.5 * e2).finished();\n-81 Matrix G11 = (Matrix(1, 1) << p).finished();\n-82 Matrix G12 = (Matrix(1, 1) << e).finished();\n-83 Matrix G22 = (Matrix(1, 1) << 0.5 / (p * p)).finished();\n-84 return _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br(\n-85 new _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(j1, j2, G11, G12, g1, G22, g2, c));\n-86 }\n-87\n-90\n-_\b9_\b6 _\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(double z, _\bK_\be_\by meanKey, _\bK_\be_\by precisionKey) :\n-97 _\bB_\ba_\bs_\be(), z_(z), meanKey_(meanKey), precisionKey_(precisionKey) {\n-98 }\n-99\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh>\n+24#include \n+25#include \n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n+28\n+_\b3_\b5struct GTSAM_EXPORT _\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs {\n+36 double\n+_\b3_\b7 _\bw_\bi_\bl_\bd_\bf_\bi_\br_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n+39\n+_\b4_\b1 _\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs(\n+42 double _wildfireThreshold =\n+43 0.001\n+45 )\n+46 : wildfireThreshold(_wildfireThreshold) {}\n+47\n+48 void _\bp_\br_\bi_\bn_\bt(const std::string str = \"\") const {\n+49 using std::cout;\n+50 cout << str << \"type: ISAM2GaussNewtonParams\\n\";\n+51 cout << str << \"wildfireThreshold: \" << wildfireThreshold << \"\\n\";\n+52 cout.flush();\n+53 }\n+54\n+55 double getWildfireThreshold() const { return wildfireThreshold; }\n+56 void setWildfireThreshold(double wildfireThreshold) {\n+57 this->wildfireThreshold = wildfireThreshold;\n+58 }\n+59};\n+60\n+_\b6_\b7struct GTSAM_EXPORT _\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs {\n+_\b6_\b8 double _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bD_\be_\bl_\bt_\ba;\n+69 double\n+_\b7_\b0 _\bw_\bi_\bl_\bd_\bf_\bi_\br_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n+72 _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n+_\b7_\b3 _\ba_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be;\n+75 bool\n+_\b7_\b6 _\bv_\be_\br_\bb_\bo_\bs_\be;\n+77\n+_\b7_\b9 _\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs(\n+80 double _initialDelta = 1.0,\n+81 double _wildfireThreshold =\n+82 1e-5,\n+83 _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be _adaptationMode =\n+84 _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl::\n+85 SEARCH_EACH_ITERATION,\n+86 bool _verbose = false\n+87 )\n+88 : initialDelta(_initialDelta),\n+89 wildfireThreshold(_wildfireThreshold),\n+90 adaptationMode(_adaptationMode),\n+91 verbose(_verbose) {}\n+92\n+93 void _\bp_\br_\bi_\bn_\bt(const std::string str = \"\") const {\n+94 using std::cout;\n+95 cout << str << \"type: ISAM2DoglegParams\\n\";\n+96 cout << str << \"initialDelta: \" << initialDelta << \"\\n\";\n+97 cout << str << \"wildfireThreshold: \" << wildfireThreshold << \"\\n\";\n+98 cout << str\n+99 << \"adaptationMode: \" << adaptationModeTranslator(adaptationMode)\n+100 << \"\\n\";\n+101 cout.flush();\n+102 }\n 103\n-_\b1_\b0_\b5 _\b~_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() override {\n-106 }\n-107\n-111\n-_\b1_\b1_\b3 void _\bp_\br_\bi_\bn_\bt(const std::string& p = \"WhiteNoiseFactor\",\n-114 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n-115 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(p, keyFormatter);\n-116 std::cout << p + \".z: \" << z_ << std::endl;\n-117 }\n-118\n-122\n-_\b1_\b2_\b4 size_t _\bd_\bi_\bm() const override {\n-125 return 2;\n-126 }\n+104 double getInitialDelta() const { return initialDelta; }\n+105 double getWildfireThreshold() const { return wildfireThreshold; }\n+106 std::string getAdaptationMode() const {\n+107 return adaptationModeTranslator(adaptationMode);\n+108 }\n+109 bool isVerbose() const { return verbose; }\n+110 void setInitialDelta(double initialDelta) {\n+111 this->initialDelta = initialDelta;\n+112 }\n+113 void setWildfireThreshold(double wildfireThreshold) {\n+114 this->wildfireThreshold = wildfireThreshold;\n+115 }\n+116 void setAdaptationMode(const std::string& adaptationMode) {\n+117 this->adaptationMode = adaptationModeTranslator(adaptationMode);\n+118 }\n+119 void setVerbose(bool verbose) { this->verbose = verbose; }\n+120\n+121 std::string adaptationModeTranslator(\n+122 const DoglegOptimizerImpl::TrustRegionAdaptationMode& adaptationMode)\n+123 const;\n+124 DoglegOptimizerImpl::TrustRegionAdaptationMode adaptationModeTranslator(\n+125 const std::string& adaptationMode) const;\n+126};\n 127\n-_\b1_\b2_\b9 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& x) const override {\n-130 return _\bf(z_, x._\ba_\bt(meanKey_), x._\ba_\bt(precisionKey_));\n-131 }\n-132\n-_\b1_\b4_\b0 virtual Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& x) const {\n-141 return (Vector(1) << std::sqrt(2 * _\be_\br_\br_\bo_\br(x))).finished();\n-142 }\n+_\b1_\b3_\b3typedef _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b> _\bI_\bS_\bA_\bM_\b2_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bM_\ba_\bp;\n+134typedef ISAM2ThresholdMap::value_type ISAM2ThresholdMapValue;\n+_\b1_\b3_\b5struct GTSAM_EXPORT _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs {\n+136 typedef boost::variant\n+_\b1_\b3_\b7 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs;\n+139 typedef boost::variant >\n+_\b1_\b4_\b0 _\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n 143\n-148// virtual IndexFactor::shared_ptr symbolic(const Ordering& ordering) const\n-{\n-149// const Key j1 = ordering[meanKey_], j2 = ordering[precisionKey_];\n-150// return IndexFactor::shared_ptr(new IndexFactor(j1, j2));\n-151// }\n-152\n-156\n-_\b1_\b5_\b8 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& x) const override\n-{\n-159 double u = x._\ba_\bt(meanKey_);\n-160 double p = x._\ba_\bt(precisionKey_);\n-161 _\bK_\be_\by j1 = meanKey_;\n-162 _\bK_\be_\by j2 = precisionKey_;\n-163 return _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(z_, u, p, j1, j2);\n-164 }\n-165\n-166 // TODO: Frank commented this out for now, can it go?\n-167 // /// @return a deep copy of this factor\n-168 // gtsam::NonlinearFactor::shared_ptr clone() const override {\n-169 // return boost::static_pointer_cast(\n-170 // gtsam::NonlinearFactor::shared_ptr(new This(*this))); }\n-171\n+_\b1_\b5_\b0 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs;\n+151\n+_\b1_\b6_\b8 _\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd _\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n+169\n+_\b1_\b7_\b0 int _\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bS_\bk_\bi_\bp;\n 173\n-174 };\n-175// WhiteNoiseFactor\n+_\b1_\b7_\b4 bool _\be_\bn_\ba_\bb_\bl_\be_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn;\n 176\n-177}// namespace gtsam\n-178\n-_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Contains the HessianFactor class, a general quadratic factor.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+_\b1_\b7_\b7 bool _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\br_\br_\bo_\br;\n+180\n+181 enum Factorization { CHOLESKY, QR };\n+_\b1_\b9_\b3 Factorization _\bf_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn;\n+194\n+_\b2_\b0_\b0 bool _\bc_\ba_\bc_\bh_\be_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs;\n+201\n+202 _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+_\b2_\b0_\b3 _\bk_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br;\n+205\n+_\b2_\b0_\b6 bool _\be_\bn_\ba_\bb_\bl_\be_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs;\n+209\n+_\b2_\b1_\b8 bool _\be_\bn_\ba_\bb_\bl_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bc_\bk;\n+219\n+_\b2_\b2_\b4 bool _\bf_\bi_\bn_\bd_\bU_\bn_\bu_\bs_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bl_\bo_\bt_\bs;\n+225\n+_\b2_\b3_\b0 _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs(_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs _optimizationParams = _\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+(),\n+231 _\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd _relinearizeThreshold = 0.1,\n+232 int _relinearizeSkip = 10, bool _enableRelinearization = true,\n+233 bool _evaluateNonlinearError = false,\n+234 Factorization _factorization = ISAM2Params::CHOLESKY,\n+235 bool _cacheLinearizedFactors = true,\n+236 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& _keyFormatter =\n+237 DefaultKeyFormatter,\n+238 bool _enableDetailedResults = false)\n+239 : optimizationParams(_optimizationParams),\n+240 relinearizeThreshold(_relinearizeThreshold),\n+241 relinearizeSkip(_relinearizeSkip),\n+242 enableRelinearization(_enableRelinearization),\n+243 evaluateNonlinearError(_evaluateNonlinearError),\n+244 factorization(_factorization),\n+245 cacheLinearizedFactors(_cacheLinearizedFactors),\n+246 keyFormatter(_keyFormatter),\n+247 enableDetailedResults(_enableDetailedResults),\n+248 enablePartialRelinearizationCheck(false),\n+249 findUnusedFactorSlots(false) {}\n+250\n+_\b2_\b5_\b2 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const {\n+253 using std::cout;\n+254 cout << str << \"\\n\";\n+255\n+256 static const std::string kStr(\"optimizationParams: \");\n+257 if (optimizationParams.type() == typeid(_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs))\n+258 boost::get(optimizationParams).print();\n+259 else if (optimizationParams.type() == typeid(_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs))\n+260 boost::get(optimizationParams).print(kStr);\n+261 else\n+262 cout << kStr << \"{unknown type}\\n\";\n+263\n+264 cout << \"relinearizeThreshold: \";\n+265 if (relinearizeThreshold.type() == typeid(double)) {\n+266 cout << boost::get(relinearizeThreshold) << \"\\n\";\n+267 } else {\n+268 cout << \"{mapped}\\n\";\n+269 for (const ISAM2ThresholdMapValue& value :\n+270 boost::get(relinearizeThreshold)) {\n+271 cout << \" '\" << value.first\n+272 << \"' -> [\" << value.second.transpose() << \" ]\\n\";\n+273 }\n+274 }\n+275\n+276 cout << \"relinearizeSkip: \" << relinearizeSkip << \"\\n\";\n+277 cout << \"enableRelinearization: \" << enableRelinearization\n+278 << \"\\n\";\n+279 cout << \"evaluateNonlinearError: \" << evaluateNonlinearError\n+280 << \"\\n\";\n+281 cout << \"factorization: \"\n+282 << factorizationTranslator(factorization) << \"\\n\";\n+283 cout << \"cacheLinearizedFactors: \" << cacheLinearizedFactors\n+284 << \"\\n\";\n+285 cout << \"enableDetailedResults: \" << enableDetailedResults\n+286 << \"\\n\";\n+287 cout << \"enablePartialRelinearizationCheck: \"\n+288 << enablePartialRelinearizationCheck << \"\\n\";\n+289 cout << \"findUnusedFactorSlots: \" << findUnusedFactorSlots\n+290 << \"\\n\";\n+291 cout.flush();\n+292 }\n+293\n+296\n+297 OptimizationParams getOptimizationParams() const {\n+298 return this->optimizationParams;\n+299 }\n+300 RelinearizationThreshold getRelinearizeThreshold() const {\n+301 return relinearizeThreshold;\n+302 }\n+303 std::string getFactorization() const {\n+304 return factorizationTranslator(factorization);\n+305 }\n+306 _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br getKeyFormatter() const { return keyFormatter; }\n+307\n+308 void setOptimizationParams(OptimizationParams optimizationParams) {\n+309 this->optimizationParams = optimizationParams;\n+310 }\n+311 void setRelinearizeThreshold(RelinearizationThreshold relinearizeThreshold)\n+{\n+312 this->relinearizeThreshold = relinearizeThreshold;\n+313 }\n+314 void setFactorization(const std::string& factorization) {\n+315 this->factorization = factorizationTranslator(factorization);\n+316 }\n+317 void setKeyFormatter(KeyFormatter keyFormatter) {\n+318 this->keyFormatter = keyFormatter;\n+319 }\n+320\n+321 GaussianFactorGraph::Eliminate getEliminationFunction() const {\n+322 return factorization == CHOLESKY\n+323 ? (GaussianFactorGraph::Eliminate)EliminatePreferCholesky\n+324 : (GaussianFactorGraph::Eliminate)_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR;\n+325 }\n+326\n+328\n+331\n+332 static Factorization factorizationTranslator(const std::string& str);\n+333 static std::string factorizationTranslator(const Factorization& value);\n+334\n+336};\n+337\n+338} // namespace gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh\n+Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail\n+implementation)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bM_\ba_\bp\n+FastMap< char, Vector > ISAM2ThresholdMap\n+Parameters for the ISAM2 algorithm.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:133\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\bg_\bS_\bq_\br_\bt_\b2_\bP_\bI\n-const double logSqrt2PI\n-constant needed below\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR\n+std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr >\n+EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)\n+Multiply all factors and eliminate the given keys from the resulting factor\n+using a QR variant that h...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:789\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor using the canonical parameters (information form)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-A shared_ptr to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-const ValueType at(Key j) const\n-Retrieve a variable by key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Binary factor to estimate parameters of zero-mean Gaussian white noise.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override\n-linearize returns a Hessianfactor that is an approximation of error(p)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:158\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-~WhiteNoiseFactor() override\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-static HessianFactor::shared_ptr linearize(double z, double u, double p, Key\n-j1, Key j2)\n-linearize returns a Hessianfactor that approximates error Hessian is\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &p=\"WhiteNoiseFactor\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-Print.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-WhiteNoiseFactor(double z, Key meanKey, Key precisionKey)\n-Construct from measurement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n-virtual Vector unwhitenedError(const Values &x) const\n-Vector of errors \"unwhitened\" does not make sense for this factor What is meant\n-typically is only \"e\"...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf\n-static double f(double z, double u, double p)\n-negative log likelihood as a function of mean and precision\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &x) const override\n-Calculate the error of the factor, typically equal to log-likelihood.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-get the dimension of the factor (number of rows on linearization)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:124\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl\n+This class contains the implementation of the Dogleg algorithm.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n+TrustRegionAdaptationMode\n+Specifies how the trust region is adapted at each Dogleg iteration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for ISAM2 using Gauss-Newton optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bw_\bi_\bl_\bd_\bf_\bi_\br_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+double wildfireThreshold\n+Continue updating the linear delta only when changes are above this threshold\n+(default: 0....\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+ISAM2GaussNewtonParams(double _wildfireThreshold=0.001)\n+Specify parameters as constructor arguments.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for ISAM2 using Dogleg optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\ba_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n+DoglegOptimizerImpl::TrustRegionAdaptationMode adaptationMode\n+See description in DoglegOptimizerImpl::TrustRegionAdaptationMode.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be\n+bool verbose\n+Whether Dogleg prints iteration and convergence information.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs\n+ISAM2DoglegParams(double _initialDelta=1.0, double _wildfireThreshold=1e-5,\n+DoglegOptimizerImpl::TrustRegionAdaptationMode\n+_adaptationMode=DoglegOptimizerImpl::SEARCH_EACH_ITERATION, bool\n+_verbose=false)\n+Specify parameters as constructor arguments.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bD_\be_\bl_\bt_\ba\n+double initialDelta\n+The initial trust region radius for Dogleg.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bw_\bi_\bl_\bd_\bf_\bi_\br_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+double wildfireThreshold\n+Continue updating the linear delta only when changes are above this threshold\n+(default: 1e-5)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bc_\bk\n+bool enablePartialRelinearizationCheck\n+Check variables for relinearization in tree-order, stopping the check once a\n+variable does not need t...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:218\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+OptimizationParams optimizationParams\n+Optimization parameters, this both selects the nonlinear optimization method\n+and specifies its parame...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &str=\"\") const\n+print iSAM2 parameters\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:252\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+bool enableRelinearization\n+Controls whether ISAM2 will ever relinearize any variables (default: true)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bc_\ba_\bc_\bh_\be_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+bool cacheLinearizedFactors\n+Whether to cache linear factors (default: true).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:200\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\br_\br_\bo_\br\n+bool evaluateNonlinearError\n+Whether to evaluate the nonlinear error before and after the update, to return\n+in ISAM2Result from up...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs\n+bool enableDetailedResults\n+Whether to compute and return ISAM2Result::detailedResults, this can increase\n+running time (default: ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:206\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+boost::variant< ISAM2GaussNewtonParams, ISAM2DoglegParams > OptimizationParams\n+Either ISAM2GaussNewtonParams or ISAM2DoglegParams.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bf_\bi_\bn_\bd_\bU_\bn_\bu_\bs_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bl_\bo_\bt_\bs\n+bool findUnusedFactorSlots\n+When you will be removing many factors, e.g.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:224\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+boost::variant< double, FastMap< char, Vector > > RelinearizationThreshold\n+Either a constant relinearization threshold or a per-variable-type set of\n+thresholds.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bS_\bk_\bi_\bp\n+int relinearizeSkip\n+Only relinearize any variables every relinearizeSkip calls to ISAM2::update\n+(default: 10)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:170\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+Factorization factorization\n+Specifies whether to use QR or CHOESKY numerical factorization (default:\n+CHOLESKY).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:193\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bk_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+KeyFormatter keyFormatter\n+A KeyFormatter for when keys are printed during debugging (default:\n+DefaultKeyFormatter)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:203\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+RelinearizationThreshold relinearizeThreshold\n+Only relinearize variables whose linear delta magnitude is greater than this\n+threshold (default: 0....\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:168\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs\n+ISAM2Params(OptimizationParams _optimizationParams=ISAM2GaussNewtonParams(),\n+RelinearizationThreshold _relinearizeThreshold=0.1, int _relinearizeSkip=10,\n+bool _enableRelinearization=true, bool _evaluateNonlinearError=false,\n+Factorization _factorization=ISAM2Params::CHOLESKY, bool\n+_cacheLinearizedFactors=true, const KeyFormatter\n+&_keyFormatter=DefaultKeyFormatter, bool _enableDetailedResults=false)\n+Specify parameters as constructor arguments See the documentation of member\n+variables above.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:230\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01040_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01040_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,307 +98,474 @@\n
No Matches
\n \n \n \n \n \n
\n-
ISAM2Params.h
\n+
Values-inl.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18// \\callgraph
\n-
19
\n-
20#pragma once
\n-
21
\n-\n-\n-
24#include <boost/variant.hpp>
\n-
25#include <string>
\n+
25#pragma once
\n
26
\n-
27namespace gtsam {
\n-
28
\n-
\n-
35struct GTSAM_EXPORT ISAM2GaussNewtonParams {
\n-
36 double
\n-\n+
27#include <utility>
\n+
28#include <boost/bind/bind.hpp>
\n+\n+
30
\n+
31namespace gtsam {
\n+
32
\n+
33
\n+
34 /* ************************************************************************* */
\n+
35 template<class ValueType>
\n+
\n+\n+
37 const Key key;
\n+
38 ValueType& value;
\n
39
\n-
\n-\n-
42 double _wildfireThreshold =
\n-
43 0.001
\n-
45 )
\n-
46 : wildfireThreshold(_wildfireThreshold) {}
\n-
\n-
47
\n-
48 void print(const std::string str = "") const {
\n-
49 using std::cout;
\n-
50 cout << str << "type: ISAM2GaussNewtonParams\\n";
\n-
51 cout << str << "wildfireThreshold: " << wildfireThreshold << "\\n";
\n-
52 cout.flush();
\n-
53 }
\n-
54
\n-
55 double getWildfireThreshold() const { return wildfireThreshold; }
\n-
56 void setWildfireThreshold(double wildfireThreshold) {
\n-
57 this->wildfireThreshold = wildfireThreshold;
\n-
58 }
\n-
59};
\n-
\n-
60
\n-
\n-
67struct GTSAM_EXPORT ISAM2DoglegParams {
\n-
68 double initialDelta;
\n-
69 double
\n-\n-\n-\n-
75 bool
\n-\n-
77
\n-
\n-\n-
80 double _initialDelta = 1.0,
\n-
81 double _wildfireThreshold =
\n-
82 1e-5,
\n-\n-\n-
85 SEARCH_EACH_ITERATION,
\n-
86 bool _verbose = false
\n-
87 )
\n-
88 : initialDelta(_initialDelta),
\n-
89 wildfireThreshold(_wildfireThreshold),
\n-
90 adaptationMode(_adaptationMode),
\n-
91 verbose(_verbose) {}
\n-
\n-
92
\n-
93 void print(const std::string str = "") const {
\n-
94 using std::cout;
\n-
95 cout << str << "type: ISAM2DoglegParams\\n";
\n-
96 cout << str << "initialDelta: " << initialDelta << "\\n";
\n-
97 cout << str << "wildfireThreshold: " << wildfireThreshold << "\\n";
\n-
98 cout << str
\n-
99 << "adaptationMode: " << adaptationModeTranslator(adaptationMode)
\n-
100 << "\\n";
\n-
101 cout.flush();
\n-
102 }
\n-
103
\n-
104 double getInitialDelta() const { return initialDelta; }
\n-
105 double getWildfireThreshold() const { return wildfireThreshold; }
\n-
106 std::string getAdaptationMode() const {
\n-
107 return adaptationModeTranslator(adaptationMode);
\n-
108 }
\n-
109 bool isVerbose() const { return verbose; }
\n-
110 void setInitialDelta(double initialDelta) {
\n-
111 this->initialDelta = initialDelta;
\n-
112 }
\n-
113 void setWildfireThreshold(double wildfireThreshold) {
\n-
114 this->wildfireThreshold = wildfireThreshold;
\n-
115 }
\n-
116 void setAdaptationMode(const std::string& adaptationMode) {
\n-
117 this->adaptationMode = adaptationModeTranslator(adaptationMode);
\n-
118 }
\n-
119 void setVerbose(bool verbose) { this->verbose = verbose; }
\n-
120
\n-
121 std::string adaptationModeTranslator(
\n-
122 const DoglegOptimizerImpl::TrustRegionAdaptationMode& adaptationMode)
\n-
123 const;
\n-
124 DoglegOptimizerImpl::TrustRegionAdaptationMode adaptationModeTranslator(
\n-
125 const std::string& adaptationMode) const;
\n-
126};
\n+
40 _ValuesKeyValuePair(Key _key, ValueType& _value) : key(_key), value(_value) {}
\n+
41 };
\n
\n+
42
\n+
43 /* ************************************************************************* */
\n+
44 template<class ValueType>
\n+
\n+\n+
46 const Key key;
\n+
47 const ValueType& value;
\n+
48
\n+
49 _ValuesConstKeyValuePair(Key _key, const ValueType& _value) :
\n+
50 key(_key), value(_value) {
\n+
51 }
\n+\n+
53 key(rhs.key), value(rhs.value) {
\n+
54 }
\n+
55 };
\n+
\n+
56
\n+
57 /* ************************************************************************* */
\n+
58
\n+
59 // Cast helpers for making _Values[Const]KeyValuePair's from Values::[Const]KeyValuePair
\n+
60 // need to use a struct here for later partial specialization
\n+
61 template<class ValueType, class CastedKeyValuePairType, class KeyValuePairType>
\n+
\n+\n+
63 static CastedKeyValuePairType cast(KeyValuePairType key_value) {
\n+
64 // Static cast because we already checked the type during filtering
\n+
65 return CastedKeyValuePairType(key_value.key,
\n+
66 const_cast<GenericValue<ValueType>&>(static_cast<const GenericValue<
\n+
67 ValueType>&>(key_value.value)).value());
\n+
68 }
\n+
69 };
\n+
\n+
70 // partial specialized version for ValueType == Value
\n+
71 template<class CastedKeyValuePairType, class KeyValuePairType>
\n+
\n+
72 struct ValuesCastHelper<Value, CastedKeyValuePairType, KeyValuePairType> {
\n+
73 static CastedKeyValuePairType cast(KeyValuePairType key_value) {
\n+
74 // Static cast because we already checked the type during filtering
\n+
75 // in this case the casted and keyvalue pair are essentially the same type
\n+
76 // (key, Value&) so perhaps this could be done with just a cast of the key_value?
\n+
77 return CastedKeyValuePairType(key_value.key, key_value.value);
\n+
78 }
\n+
79 };
\n+
\n+
80 // partial specialized version for ValueType == Value
\n+
81 template<class CastedKeyValuePairType, class KeyValuePairType>
\n+
\n+
82 struct ValuesCastHelper<const Value, CastedKeyValuePairType, KeyValuePairType> {
\n+
83 static CastedKeyValuePairType cast(KeyValuePairType key_value) {
\n+
84 // Static cast because we already checked the type during filtering
\n+
85 // in this case the casted and keyvalue pair are essentially the same type
\n+
86 // (key, Value&) so perhaps this could be done with just a cast of the key_value?
\n+
87 return CastedKeyValuePairType(key_value.key, key_value.value);
\n+
88 }
\n+
89 };
\n+
\n+
90
\n+
91/* ************************************************************************* */
\n+
92 template <class ValueType>
\n+
93 std::map<Key, ValueType>
\n+
\n+
94 Values::extract(const std::function<bool(Key)>& filterFcn) const {
\n+
95 std::map<Key, ValueType> result;
\n+
96 for (const auto& key_value : values_) {
\n+
97 // Check if key matches
\n+
98 if (filterFcn(key_value.first)) {
\n+
99 // Check if type matches (typically does as symbols matched with types)
\n+
100 if (auto t =
\n+
101 dynamic_cast<const GenericValue<ValueType>*>(key_value.second))
\n+
102 result[key_value.first] = t->value();
\n+
103 }
\n+
104 }
\n+
105 return result;
\n+
106 }
\n+
\n+
107
\n+
108/* ************************************************************************* */
\n+
109#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
110#include <boost/bind/bind.hpp>
\n+
111
\n+
112 template<class ValueType>
\n+
113 class Values::Filtered {
\n+
114 public:
\n+
116 typedef _ValuesKeyValuePair<ValueType> KeyValuePair;
\n+
117 typedef _ValuesConstKeyValuePair<ValueType> ConstKeyValuePair;
\n+
118 typedef KeyValuePair value_type;
\n+
119
\n+
120 typedef
\n+
121 boost::transform_iterator<
\n+
122 KeyValuePair(*)(Values::KeyValuePair),
\n+
123 boost::filter_iterator<
\n+
124 std::function<bool(const Values::ConstKeyValuePair&)>,
\n+
125 Values::iterator> >
\n+
126 iterator;
\n
127
\n-\n-
134typedef ISAM2ThresholdMap::value_type ISAM2ThresholdMapValue;
\n-
\n-
135struct GTSAM_EXPORT ISAM2Params {
\n-
136 typedef boost::variant<ISAM2GaussNewtonParams, ISAM2DoglegParams>
\n-\n-
139 typedef boost::variant<double, FastMap<char, Vector> >
\n-\n-
143
\n-\n-
151
\n-\n-
169
\n-\n-
173
\n-\n-
176
\n-\n-
180
\n-
181 enum Factorization { CHOLESKY, QR };
\n-
193 Factorization factorization;
\n+
128 typedef iterator const_iterator;
\n+
129
\n+
130 typedef
\n+
131 boost::transform_iterator<
\n+
132 ConstKeyValuePair(*)(Values::ConstKeyValuePair),
\n+
133 boost::filter_iterator<
\n+
134 std::function<bool(const Values::ConstKeyValuePair&)>,
\n+
135 Values::const_iterator> >
\n+
136 const_const_iterator;
\n+
137
\n+
138 iterator begin() { return begin_; }
\n+
139 iterator end() { return end_; }
\n+
140 const_iterator begin() const { return begin_; }
\n+
141 const_iterator end() const { return end_; }
\n+
142 const_const_iterator beginConst() const { return constBegin_; }
\n+
143 const_const_iterator endConst() const { return constEnd_; }
\n+
144
\n+
146 size_t size() const {
\n+
147 size_t i = 0;
\n+
148 for (const_const_iterator it = beginConst(); it != endConst(); ++it)
\n+
149 ++i;
\n+
150 return i;
\n+
151 }
\n+
152
\n+
153 private:
\n+
154 Filtered(
\n+
155 const std::function<bool(const Values::ConstKeyValuePair&)>& filter,
\n+
156 Values& values) :
\n+
157 begin_(
\n+
158 boost::make_transform_iterator(
\n+
159 boost::make_filter_iterator(filter, values.begin(), values.end()),
\n+
160 &ValuesCastHelper<ValueType, KeyValuePair, Values::KeyValuePair>::cast)), end_(
\n+
161 boost::make_transform_iterator(
\n+
162 boost::make_filter_iterator(filter, values.end(), values.end()),
\n+
163 &ValuesCastHelper<ValueType, KeyValuePair, Values::KeyValuePair>::cast)), constBegin_(
\n+
164 boost::make_transform_iterator(
\n+
165 boost::make_filter_iterator(filter,
\n+
166 values._begin(),
\n+
167 values._end()),
\n+
168 &ValuesCastHelper<ValueType, ConstKeyValuePair,
\n+
169 Values::ConstKeyValuePair>::cast)), constEnd_(
\n+
170 boost::make_transform_iterator(
\n+
171 boost::make_filter_iterator(filter,
\n+
172 values._end(),
\n+
173 values._end()),
\n+
174 &ValuesCastHelper<ValueType, ConstKeyValuePair,
\n+
175 Values::ConstKeyValuePair>::cast)) {
\n+
176 }
\n+
177
\n+
178 friend class Values;
\n+
179 iterator begin_;
\n+
180 iterator end_;
\n+
181 const_const_iterator constBegin_;
\n+
182 const_const_iterator constEnd_;
\n+
183 };
\n+
184
\n+
185 template<class ValueType>
\n+
186 class Values::ConstFiltered {
\n+
187 public:
\n+
189 typedef _ValuesConstKeyValuePair<ValueType> KeyValuePair;
\n+
190 typedef KeyValuePair value_type;
\n+
191
\n+
192 typedef typename Filtered<ValueType>::const_const_iterator iterator;
\n+
193 typedef typename Filtered<ValueType>::const_const_iterator const_iterator;
\n
194
\n-\n-
201
\n-\n-\n-
205
\n-\n-
209
\n-\n+
196 ConstFiltered(const Filtered<ValueType>& rhs) :
\n+
197 begin_(rhs.beginConst()),
\n+
198 end_(rhs.endConst()) {}
\n+
199
\n+
200 iterator begin() { return begin_; }
\n+
201 iterator end() { return end_; }
\n+
202 const_iterator begin() const { return begin_; }
\n+
203 const_iterator end() const { return end_; }
\n+
204
\n+
206 size_t size() const {
\n+
207 size_t i = 0;
\n+
208 for (const_iterator it = begin(); it != end(); ++it)
\n+
209 ++i;
\n+
210 return i;
\n+
211 }
\n+
212
\n+
213 FastList<Key> keys() const {
\n+
214 FastList<Key> result;
\n+
215 for(const_iterator it = begin(); it != end(); ++it)
\n+
216 result.push_back(it->key);
\n+
217 return result;
\n+
218 }
\n
219
\n-\n-
225
\n-
\n-\n-
231 RelinearizationThreshold _relinearizeThreshold = 0.1,
\n-
232 int _relinearizeSkip = 10, bool _enableRelinearization = true,
\n-
233 bool _evaluateNonlinearError = false,
\n-
234 Factorization _factorization = ISAM2Params::CHOLESKY,
\n-
235 bool _cacheLinearizedFactors = true,
\n-
236 const KeyFormatter& _keyFormatter =
\n-
237 DefaultKeyFormatter,
\n-
238 bool _enableDetailedResults = false)
\n-
239 : optimizationParams(_optimizationParams),
\n-
240 relinearizeThreshold(_relinearizeThreshold),
\n-
241 relinearizeSkip(_relinearizeSkip),
\n-
242 enableRelinearization(_enableRelinearization),
\n-
243 evaluateNonlinearError(_evaluateNonlinearError),
\n-
244 factorization(_factorization),
\n-
245 cacheLinearizedFactors(_cacheLinearizedFactors),
\n-
246 keyFormatter(_keyFormatter),
\n-
247 enableDetailedResults(_enableDetailedResults),
\n-
248 enablePartialRelinearizationCheck(false),
\n-
249 findUnusedFactorSlots(false) {}
\n-
\n+
220 private:
\n+
221 friend class Values;
\n+
222 const_iterator begin_;
\n+
223 const_iterator end_;
\n+
224 ConstFiltered(
\n+
225 const std::function<bool(const Values::ConstKeyValuePair&)>& filter,
\n+
226 const Values& values) {
\n+
227 // We remove the const from values to create a non-const Filtered
\n+
228 // view, then pull the const_iterators out of it.
\n+
229 const Filtered<ValueType> filtered(filter, const_cast<Values&>(values));
\n+
230 begin_ = filtered.beginConst();
\n+
231 end_ = filtered.endConst();
\n+
232 }
\n+
233 };
\n+
234
\n+
235 template<class ValueType>
\n+
236 Values::Values(const Values::Filtered<ValueType>& view) {
\n+
237 for(const auto key_value: view) {
\n+
238 Key key = key_value.key;
\n+
239 insert(key, static_cast<const ValueType&>(key_value.value));
\n+
240 }
\n+
241 }
\n+
242
\n+
243 template<class ValueType>
\n+
244 Values::Values(const Values::ConstFiltered<ValueType>& view) {
\n+
245 for(const auto key_value: view) {
\n+
246 Key key = key_value.key;
\n+
247 insert(key, static_cast<const ValueType&>(key_value.value));
\n+
248 }
\n+
249 }
\n
250
\n-
\n-
252 void print(const std::string& str = "") const {
\n-
253 using std::cout;
\n-
254 cout << str << "\\n";
\n+
251 Values::Filtered<Value>
\n+
252 inline Values::filter(const std::function<bool(Key)>& filterFcn) {
\n+
253 return filter<Value>(filterFcn);
\n+
254 }
\n
255
\n-
256 static const std::string kStr("optimizationParams: ");
\n-
257 if (optimizationParams.type() == typeid(ISAM2GaussNewtonParams))
\n-
258 boost::get<ISAM2GaussNewtonParams>(optimizationParams).print();
\n-
259 else if (optimizationParams.type() == typeid(ISAM2DoglegParams))
\n-
260 boost::get<ISAM2DoglegParams>(optimizationParams).print(kStr);
\n-
261 else
\n-
262 cout << kStr << "{unknown type}\\n";
\n-
263
\n-
264 cout << "relinearizeThreshold: ";
\n-
265 if (relinearizeThreshold.type() == typeid(double)) {
\n-
266 cout << boost::get<double>(relinearizeThreshold) << "\\n";
\n-
267 } else {
\n-
268 cout << "{mapped}\\n";
\n-
269 for (const ISAM2ThresholdMapValue& value :
\n-
270 boost::get<ISAM2ThresholdMap>(relinearizeThreshold)) {
\n-
271 cout << " '" << value.first
\n-
272 << "' -> [" << value.second.transpose() << " ]\\n";
\n-
273 }
\n-
274 }
\n+
256 template<class ValueType>
\n+
257 Values::Filtered<ValueType>
\n+
258 Values::filter(const std::function<bool(Key)>& filterFcn) {
\n+
259 return Filtered<ValueType>(std::bind(&filterHelper<ValueType>, filterFcn,
\n+
260 std::placeholders::_1), *this);
\n+
261 }
\n+
262
\n+
263 Values::ConstFiltered<Value>
\n+
264 inline Values::filter(const std::function<bool(Key)>& filterFcn) const {
\n+
265 return filter<Value>(filterFcn);
\n+
266 }
\n+
267
\n+
268 template<class ValueType>
\n+
269 Values::ConstFiltered<ValueType>
\n+
270 Values::filter(const std::function<bool(Key)>& filterFcn) const {
\n+
271 return ConstFiltered<ValueType>(std::bind(&filterHelper<ValueType>,
\n+
272 filterFcn, std::placeholders::_1), *this);
\n+
273 }
\n+
274#endif
\n
275
\n-
276 cout << "relinearizeSkip: " << relinearizeSkip << "\\n";
\n-
277 cout << "enableRelinearization: " << enableRelinearization
\n-
278 << "\\n";
\n-
279 cout << "evaluateNonlinearError: " << evaluateNonlinearError
\n-
280 << "\\n";
\n-
281 cout << "factorization: "
\n-
282 << factorizationTranslator(factorization) << "\\n";
\n-
283 cout << "cacheLinearizedFactors: " << cacheLinearizedFactors
\n-
284 << "\\n";
\n-
285 cout << "enableDetailedResults: " << enableDetailedResults
\n-
286 << "\\n";
\n-
287 cout << "enablePartialRelinearizationCheck: "
\n-
288 << enablePartialRelinearizationCheck << "\\n";
\n-
289 cout << "findUnusedFactorSlots: " << findUnusedFactorSlots
\n-
290 << "\\n";
\n-
291 cout.flush();
\n-
292 }
\n-
\n-
293
\n-
296
\n-
297 OptimizationParams getOptimizationParams() const {
\n-
298 return this->optimizationParams;
\n-
299 }
\n-
300 RelinearizationThreshold getRelinearizeThreshold() const {
\n-
301 return relinearizeThreshold;
\n-
302 }
\n-
303 std::string getFactorization() const {
\n-
304 return factorizationTranslator(factorization);
\n-
305 }
\n-
306 KeyFormatter getKeyFormatter() const { return keyFormatter; }
\n-
307
\n-
308 void setOptimizationParams(OptimizationParams optimizationParams) {
\n-
309 this->optimizationParams = optimizationParams;
\n-
310 }
\n-
311 void setRelinearizeThreshold(RelinearizationThreshold relinearizeThreshold) {
\n-
312 this->relinearizeThreshold = relinearizeThreshold;
\n-
313 }
\n-
314 void setFactorization(const std::string& factorization) {
\n-
315 this->factorization = factorizationTranslator(factorization);
\n-
316 }
\n-
317 void setKeyFormatter(KeyFormatter keyFormatter) {
\n-
318 this->keyFormatter = keyFormatter;
\n-
319 }
\n+
276 /* ************************************************************************* */
\n+
277 template<>
\n+
278 inline bool Values::filterHelper<Value>(const std::function<bool(Key)> filter,
\n+
279 const ConstKeyValuePair& key_value) {
\n+
280 // Filter and check the type
\n+
281 return filter(key_value.key);
\n+
282 }
\n+
283
\n+
284 /* ************************************************************************* */
\n+
285
\n+
286 namespace internal {
\n+
287
\n+
288 // Check the type and throw exception if incorrect
\n+
289 // Generic version, partially specialized below for various Eigen Matrix types
\n+
290 template <typename ValueType>
\n+
\n+
291 struct handle {
\n+
292 ValueType operator()(Key j, const Value* const pointer) {
\n+
293 auto ptr = dynamic_cast<const GenericValue<ValueType>*>(pointer);
\n+
294 if (ptr) {
\n+
295 // value returns a const ValueType&, and the return makes a copy !!!!!
\n+
296 return ptr->value();
\n+
297 } else {
\n+
298 throw ValuesIncorrectType(j, typeid(*pointer), typeid(ValueType));
\n+
299 }
\n+
300 }
\n+
301 };
\n+
\n+
302
\n+
303 template <typename MatrixType, bool isDynamic>
\n+\n+
305
\n+
306 // Handle dynamic matrices
\n+
307 template <int M, int N>
\n+
\n+
308 struct handle_matrix<Eigen::Matrix<double, M, N>, true> {
\n+
309 inline Eigen::Matrix<double, M, N> operator()(Key j, const Value* const pointer) {
\n+
310 auto ptr = dynamic_cast<const GenericValue<Eigen::Matrix<double, M, N>>*>(pointer);
\n+
311 if (ptr) {
\n+
312 // value returns a const Matrix&, and the return makes a copy !!!!!
\n+
313 return ptr->value();
\n+
314 } else {
\n+
315 // If a fixed matrix was stored, we end up here as well.
\n+
316 throw ValuesIncorrectType(j, typeid(*pointer), typeid(Eigen::Matrix<double, M, N>));
\n+
317 }
\n+
318 }
\n+
319 };
\n+
\n
320
\n-
321 GaussianFactorGraph::Eliminate getEliminationFunction() const {
\n-
322 return factorization == CHOLESKY
\n-
323 ? (GaussianFactorGraph::Eliminate)EliminatePreferCholesky
\n-
324 : (GaussianFactorGraph::Eliminate)EliminateQR;
\n-
325 }
\n-
326
\n-
328
\n-
331
\n-
332 static Factorization factorizationTranslator(const std::string& str);
\n-
333 static std::string factorizationTranslator(const Factorization& value);
\n-
334
\n-
336};
\n-
\n-
337
\n-
338} // namespace gtsam
\n-
Linear Factor Graph where all factors are Gaussians.
\n-
Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)
\n-
FastMap< char, Vector > ISAM2ThresholdMap
Parameters for the ISAM2 algorithm.
Definition ISAM2Params.h:133
\n+
321 // Handle fixed matrices
\n+
322 template <int M, int N>
\n+
\n+
323 struct handle_matrix<Eigen::Matrix<double, M, N>, false> {
\n+
324 inline Eigen::Matrix<double, M, N> operator()(Key j, const Value* const pointer) {
\n+
325 auto ptr = dynamic_cast<const GenericValue<Eigen::Matrix<double, M, N>>*>(pointer);
\n+
326 if (ptr) {
\n+
327 // value returns a const MatrixMN&, and the return makes a copy !!!!!
\n+
328 return ptr->value();
\n+
329 } else {
\n+
330 Matrix A;
\n+
331 // Check if a dynamic matrix was stored
\n+
332 auto ptr = dynamic_cast<const GenericValue<Eigen::MatrixXd>*>(pointer);
\n+
333 if (ptr) {
\n+
334 A = ptr->value();
\n+
335 } else {
\n+
336 // Or a dynamic vector
\n+
337 A = handle_matrix<Eigen::VectorXd, true>()(j, pointer); // will throw if not....
\n+
338 }
\n+
339 // Yes: check size, and throw if not a match
\n+
340 if (A.rows() != M || A.cols() != N)
\n+
341 throw NoMatchFoundForFixed(M, N, A.rows(), A.cols());
\n+
342 else
\n+
343 return A; // copy but not malloc
\n+
344 }
\n+
345 }
\n+
346 };
\n+
\n+
347
\n+
348 // Handle matrices
\n+
349 template <int M, int N>
\n+
\n+
350 struct handle<Eigen::Matrix<double, M, N>> {
\n+
351 Eigen::Matrix<double, M, N> operator()(Key j, const Value* const pointer) {
\n+\n+
353 (M == Eigen::Dynamic || N == Eigen::Dynamic)>()(j, pointer);
\n+
354 }
\n+
355 };
\n+
\n+
356
\n+
357 } // internal
\n+
358
\n+
359 /* ************************************************************************* */
\n+
360 template <typename ValueType>
\n+
\n+
361 const ValueType Values::at(Key j) const {
\n+
362 // Find the item
\n+
363 KeyValueMap::const_iterator item = values_.find(j);
\n+
364
\n+
365 // Throw exception if it does not exist
\n+
366 if (item == values_.end()) throw ValuesKeyDoesNotExist("at", j);
\n+
367
\n+
368 // Check the type and throw exception if incorrect
\n+
369 // h() split in two lines to avoid internal compiler error (MSVC2017)
\n+\n+
371 return h(j, item->second);
\n+
372 }
\n+
\n+
373
\n+
374 /* ************************************************************************* */
\n+
375 template<typename ValueType>
\n+
\n+
376 boost::optional<const ValueType&> Values::exists(Key j) const {
\n+
377 // Find the item
\n+
378 KeyValueMap::const_iterator item = values_.find(j);
\n+
379
\n+
380 if(item != values_.end()) {
\n+
381 // dynamic cast the type and throw exception if incorrect
\n+
382 auto ptr = dynamic_cast<const GenericValue<ValueType>*>(item->second);
\n+
383 if (ptr) {
\n+
384 return ptr->value();
\n+
385 } else {
\n+
386 // NOTE(abe): clang warns about potential side effects if done in typeid
\n+
387 const Value* value = item->second;
\n+
388 throw ValuesIncorrectType(j, typeid(*value), typeid(ValueType));
\n+
389 }
\n+
390 } else {
\n+
391 return boost::none;
\n+
392 }
\n+
393 }
\n+
\n+
394
\n+
395 /* ************************************************************************* */
\n+
396
\n+
397 // insert a templated value
\n+
398 template<typename ValueType>
\n+
\n+
399 void Values::insert(Key j, const ValueType& val) {
\n+
400 insert(j, static_cast<const Value&>(GenericValue<ValueType>(val)));
\n+
401 }
\n+
\n+
402
\n+
403 // update with templated value
\n+
404 template <typename ValueType>
\n+
405 void Values::update(Key j, const ValueType& val) {
\n+
406 update(j, static_cast<const Value&>(GenericValue<ValueType>(val)));
\n+
407 }
\n+
408
\n+
409 // insert_or_assign with templated value
\n+
410 template <typename ValueType>
\n+
\n+
411 void Values::insert_or_assign(Key j, const ValueType& val) {
\n+
412 insert_or_assign(j, static_cast<const Value&>(GenericValue<ValueType>(val)));
\n+
413 }
\n+
\n+
414
\n+
415}
\n+
A non-templated config holding any types of Manifold-group elements.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that h...
Definition JacobianFactor.cpp:789
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-
This class contains the implementation of the Dogleg algorithm.
Definition DoglegOptimizerImpl.h:32
\n-
TrustRegionAdaptationMode
Specifies how the trust region is adapted at each Dogleg iteration.
Definition DoglegOptimizerImpl.h:53
\n-
Parameters for ISAM2 using Gauss-Newton optimization.
Definition ISAM2Params.h:35
\n-
double wildfireThreshold
Continue updating the linear delta only when changes are above this threshold (default: 0....
Definition ISAM2Params.h:37
\n-
ISAM2GaussNewtonParams(double _wildfireThreshold=0.001)
Specify parameters as constructor arguments.
Definition ISAM2Params.h:41
\n-
Parameters for ISAM2 using Dogleg optimization.
Definition ISAM2Params.h:67
\n-
DoglegOptimizerImpl::TrustRegionAdaptationMode adaptationMode
See description in DoglegOptimizerImpl::TrustRegionAdaptationMode.
Definition ISAM2Params.h:73
\n-
bool verbose
Whether Dogleg prints iteration and convergence information.
Definition ISAM2Params.h:76
\n-
ISAM2DoglegParams(double _initialDelta=1.0, double _wildfireThreshold=1e-5, DoglegOptimizerImpl::TrustRegionAdaptationMode _adaptationMode=DoglegOptimizerImpl::SEARCH_EACH_ITERATION, bool _verbose=false)
Specify parameters as constructor arguments.
Definition ISAM2Params.h:79
\n-
double initialDelta
The initial trust region radius for Dogleg.
Definition ISAM2Params.h:68
\n-
double wildfireThreshold
Continue updating the linear delta only when changes are above this threshold (default: 1e-5)
Definition ISAM2Params.h:70
\n-
Definition ISAM2Params.h:135
\n-
bool enablePartialRelinearizationCheck
Check variables for relinearization in tree-order, stopping the check once a variable does not need t...
Definition ISAM2Params.h:218
\n-
OptimizationParams optimizationParams
Optimization parameters, this both selects the nonlinear optimization method and specifies its parame...
Definition ISAM2Params.h:150
\n-
void print(const std::string &str="") const
print iSAM2 parameters
Definition ISAM2Params.h:252
\n-
bool enableRelinearization
Controls whether ISAM2 will ever relinearize any variables (default: true)
Definition ISAM2Params.h:174
\n-
bool cacheLinearizedFactors
Whether to cache linear factors (default: true).
Definition ISAM2Params.h:200
\n-
bool evaluateNonlinearError
Whether to evaluate the nonlinear error before and after the update, to return in ISAM2Result from up...
Definition ISAM2Params.h:177
\n-
bool enableDetailedResults
Whether to compute and return ISAM2Result::detailedResults, this can increase running time (default: ...
Definition ISAM2Params.h:206
\n-
boost::variant< ISAM2GaussNewtonParams, ISAM2DoglegParams > OptimizationParams
Either ISAM2GaussNewtonParams or ISAM2DoglegParams.
Definition ISAM2Params.h:137
\n-
bool findUnusedFactorSlots
When you will be removing many factors, e.g.
Definition ISAM2Params.h:224
\n-
boost::variant< double, FastMap< char, Vector > > RelinearizationThreshold
Either a constant relinearization threshold or a per-variable-type set of thresholds.
Definition ISAM2Params.h:140
\n-
int relinearizeSkip
Only relinearize any variables every relinearizeSkip calls to ISAM2::update (default: 10)
Definition ISAM2Params.h:170
\n-
Factorization factorization
Specifies whether to use QR or CHOESKY numerical factorization (default: CHOLESKY).
Definition ISAM2Params.h:193
\n-
KeyFormatter keyFormatter
A KeyFormatter for when keys are printed during debugging (default: DefaultKeyFormatter)
Definition ISAM2Params.h:203
\n-
RelinearizationThreshold relinearizeThreshold
Only relinearize variables whose linear delta magnitude is greater than this threshold (default: 0....
Definition ISAM2Params.h:168
\n-
ISAM2Params(OptimizationParams _optimizationParams=ISAM2GaussNewtonParams(), RelinearizationThreshold _relinearizeThreshold=0.1, int _relinearizeSkip=10, bool _enableRelinearization=true, bool _evaluateNonlinearError=false, Factorization _factorization=ISAM2Params::CHOLESKY, bool _cacheLinearizedFactors=true, const KeyFormatter &_keyFormatter=DefaultKeyFormatter, bool _enableDetailedResults=false)
Specify parameters as constructor arguments See the documentation of member variables above.
Definition ISAM2Params.h:230
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
Wraps any type T so it can play as a Value.
Definition GenericValue.h:47
\n+
const T & value() const
Return a constant value.
Definition GenericValue.h:67
\n+
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n+
Definition Values-inl.h:36
\n+
const Key key
The key.
Definition Values-inl.h:37
\n+
ValueType & value
The value.
Definition Values-inl.h:38
\n+
Definition Values-inl.h:45
\n+
const Key key
The key.
Definition Values-inl.h:46
\n+
const ValueType & value
The value.
Definition Values-inl.h:47
\n+
Definition Values-inl.h:62
\n+
Definition Values-inl.h:291
\n+
Definition Values-inl.h:304
\n+
void update(Key j, const Value &val)
single element change of existing element
Definition Values.cpp:180
\n+
std::map< Key, ValueType > extract(const std::function< bool(Key)> &filterFcn=&_truePredicate< Key >) const
Extract a subset of values of the given type ValueType.
Definition Values-inl.h:94
\n+
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n+
void insert(Key j, const Value &val)
Add a variable with the given j, throws KeyAlreadyExists<J> if j is already present.
Definition Values.cpp:157
\n+
void insert_or_assign(Key j, const Value &val)
If key j exists, update value, else perform an insert.
Definition Values.cpp:203
\n+
Values()=default
Default constructor creates an empty Values class.
\n+
bool exists(Key j) const
Check if a value exists with key j.
Definition Values.cpp:94
\n+
A key-value pair, which you get by dereferencing iterators.
Definition Values.h:93
\n+
A key-value pair, which you get by dereferencing iterators.
Definition Values.h:101
\n+
Definition Values.h:475
\n+
Definition Values.h:498
\n+
Definition Values.h:542
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,405 +1,525 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM2Params.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+Values-inl.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18// \\callgraph\n-19\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh>\n-24#include \n-25#include \n+25#pragma once\n 26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n-28\n-_\b3_\b5struct GTSAM_EXPORT _\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs {\n-36 double\n-_\b3_\b7 _\bw_\bi_\bl_\bd_\bf_\bi_\br_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n+27#include \n+28#include \n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32\n+33\n+34 /* *************************************************************************\n+*/\n+35 template\n+_\b3_\b6 struct _\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br {\n+_\b3_\b7 const _\bK_\be_\by _\bk_\be_\by;\n+_\b3_\b8 ValueType& _\bv_\ba_\bl_\bu_\be;\n 39\n-_\b4_\b1 _\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs(\n-42 double _wildfireThreshold =\n-43 0.001\n-45 )\n-46 : wildfireThreshold(_wildfireThreshold) {}\n-47\n-48 void _\bp_\br_\bi_\bn_\bt(const std::string str = \"\") const {\n-49 using std::cout;\n-50 cout << str << \"type: ISAM2GaussNewtonParams\\n\";\n-51 cout << str << \"wildfireThreshold: \" << wildfireThreshold << \"\\n\";\n-52 cout.flush();\n-53 }\n-54\n-55 double getWildfireThreshold() const { return wildfireThreshold; }\n-56 void setWildfireThreshold(double wildfireThreshold) {\n-57 this->wildfireThreshold = wildfireThreshold;\n-58 }\n-59};\n-60\n-_\b6_\b7struct GTSAM_EXPORT _\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs {\n-_\b6_\b8 double _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bD_\be_\bl_\bt_\ba;\n-69 double\n-_\b7_\b0 _\bw_\bi_\bl_\bd_\bf_\bi_\br_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n-72 _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n-_\b7_\b3 _\ba_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be;\n-75 bool\n-_\b7_\b6 _\bv_\be_\br_\bb_\bo_\bs_\be;\n-77\n-_\b7_\b9 _\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs(\n-80 double _initialDelta = 1.0,\n-81 double _wildfireThreshold =\n-82 1e-5,\n-83 _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be _adaptationMode =\n-84 _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl::\n-85 SEARCH_EACH_ITERATION,\n-86 bool _verbose = false\n-87 )\n-88 : initialDelta(_initialDelta),\n-89 wildfireThreshold(_wildfireThreshold),\n-90 adaptationMode(_adaptationMode),\n-91 verbose(_verbose) {}\n-92\n-93 void _\bp_\br_\bi_\bn_\bt(const std::string str = \"\") const {\n-94 using std::cout;\n-95 cout << str << \"type: ISAM2DoglegParams\\n\";\n-96 cout << str << \"initialDelta: \" << initialDelta << \"\\n\";\n-97 cout << str << \"wildfireThreshold: \" << wildfireThreshold << \"\\n\";\n-98 cout << str\n-99 << \"adaptationMode: \" << adaptationModeTranslator(adaptationMode)\n-100 << \"\\n\";\n-101 cout.flush();\n-102 }\n-103\n-104 double getInitialDelta() const { return initialDelta; }\n-105 double getWildfireThreshold() const { return wildfireThreshold; }\n-106 std::string getAdaptationMode() const {\n-107 return adaptationModeTranslator(adaptationMode);\n-108 }\n-109 bool isVerbose() const { return verbose; }\n-110 void setInitialDelta(double initialDelta) {\n-111 this->initialDelta = initialDelta;\n-112 }\n-113 void setWildfireThreshold(double wildfireThreshold) {\n-114 this->wildfireThreshold = wildfireThreshold;\n-115 }\n-116 void setAdaptationMode(const std::string& adaptationMode) {\n-117 this->adaptationMode = adaptationModeTranslator(adaptationMode);\n-118 }\n-119 void setVerbose(bool verbose) { this->verbose = verbose; }\n-120\n-121 std::string adaptationModeTranslator(\n-122 const DoglegOptimizerImpl::TrustRegionAdaptationMode& adaptationMode)\n-123 const;\n-124 DoglegOptimizerImpl::TrustRegionAdaptationMode adaptationModeTranslator(\n-125 const std::string& adaptationMode) const;\n-126};\n+40 _\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br(_\bK_\be_\by _key, ValueType& _value) : _\bk_\be_\by(_key), _\bv_\ba_\bl_\bu_\be(_value)\n+{}\n+41 };\n+42\n+43 /* *************************************************************************\n+*/\n+44 template\n+_\b4_\b5 struct _\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br {\n+_\b4_\b6 const _\bK_\be_\by _\bk_\be_\by;\n+_\b4_\b7 const ValueType& _\bv_\ba_\bl_\bu_\be;\n+48\n+49 _\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br(_\bK_\be_\by _key, const ValueType& _value) :\n+50 _\bk_\be_\by(_key), _\bv_\ba_\bl_\bu_\be(_value) {\n+51 }\n+52 _\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br(const _\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>& rhs) :\n+53 _\bk_\be_\by(rhs._\bk_\be_\by), _\bv_\ba_\bl_\bu_\be(rhs._\bv_\ba_\bl_\bu_\be) {\n+54 }\n+55 };\n+56\n+57 /* *************************************************************************\n+*/\n+58\n+59 // Cast helpers for making _Values[Const]KeyValuePair's from Values::\n+[Const]KeyValuePair\n+60 // need to use a struct here for later partial specialization\n+61 template\n+_\b6_\b2 struct _\bV_\ba_\bl_\bu_\be_\bs_\bC_\ba_\bs_\bt_\bH_\be_\bl_\bp_\be_\br {\n+63 static CastedKeyValuePairType cast(KeyValuePairType key_value) {\n+64 // Static cast because we already checked the type during filtering\n+65 return CastedKeyValuePairType(key_value.key,\n+66 const_cast<_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>&>(static_cast&>(key_value.value))._\bv_\ba_\bl_\bu_\be());\n+68 }\n+69 };\n+70 // partial specialized version for ValueType == Value\n+71 template\n+_\b7_\b2 struct _\bV_\ba_\bl_\bu_\be_\bs_\bC_\ba_\bs_\bt_\bH_\be_\bl_\bp_\be_\br<_\bV_\ba_\bl_\bu_\be, CastedKeyValuePairType, KeyValuePairType> {\n+73 static CastedKeyValuePairType cast(KeyValuePairType key_value) {\n+74 // Static cast because we already checked the type during filtering\n+75 // in this case the casted and keyvalue pair are essentially the same type\n+76 // (key, Value&) so perhaps this could be done with just a cast of the\n+key_value?\n+77 return CastedKeyValuePairType(key_value.key, key_value.value);\n+78 }\n+79 };\n+80 // partial specialized version for ValueType == Value\n+81 template\n+_\b8_\b2 struct _\bV_\ba_\bl_\bu_\be_\bs_\bC_\ba_\bs_\bt_\bH_\be_\bl_\bp_\be_\br {\n+83 static CastedKeyValuePairType cast(KeyValuePairType key_value) {\n+84 // Static cast because we already checked the type during filtering\n+85 // in this case the casted and keyvalue pair are essentially the same type\n+86 // (key, Value&) so perhaps this could be done with just a cast of the\n+key_value?\n+87 return CastedKeyValuePairType(key_value.key, key_value.value);\n+88 }\n+89 };\n+90\n+91/* *************************************************************************\n+*/\n+92 template \n+93 std::map\n+_\b9_\b4 _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bt_\br_\ba_\bc_\bt(const std::function& filterFcn) const {\n+95 std::map result;\n+96 for (const auto& key_value : values_) {\n+97 // Check if key matches\n+98 if (filterFcn(key_value.first)) {\n+99 // Check if type matches (typically does as symbols matched with types)\n+100 if (auto t =\n+101 dynamic_cast*>(key_value.second))\n+102 result[key_value.first] = t->value();\n+103 }\n+104 }\n+105 return result;\n+106 }\n+107\n+108/* *************************************************************************\n+*/\n+109#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+110#include \n+111\n+112 template\n+113 class Values::Filtered {\n+114 public:\n+116 typedef _\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b> KeyValuePair;\n+117 typedef _\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b> ConstKeyValuePair;\n+118 typedef KeyValuePair value_type;\n+119\n+120 typedef\n+121 boost::transform_iterator<\n+122 KeyValuePair(*)(_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br),\n+123 boost::filter_iterator<\n+124 std::function,\n+125 Values::iterator> >\n+126 iterator;\n 127\n-_\b1_\b3_\b3typedef _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b> _\bI_\bS_\bA_\bM_\b2_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bM_\ba_\bp;\n-134typedef ISAM2ThresholdMap::value_type ISAM2ThresholdMapValue;\n-_\b1_\b3_\b5struct GTSAM_EXPORT _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs {\n-136 typedef boost::variant\n-_\b1_\b3_\b7 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs;\n-139 typedef boost::variant >\n-_\b1_\b4_\b0 _\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n-143\n-_\b1_\b5_\b0 _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs;\n-151\n-_\b1_\b6_\b8 _\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd _\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n-169\n-_\b1_\b7_\b0 int _\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bS_\bk_\bi_\bp;\n-173\n-_\b1_\b7_\b4 bool _\be_\bn_\ba_\bb_\bl_\be_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn;\n-176\n-_\b1_\b7_\b7 bool _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\br_\br_\bo_\br;\n-180\n-181 enum Factorization { CHOLESKY, QR };\n-_\b1_\b9_\b3 Factorization _\bf_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn;\n+128 typedef iterator const_iterator;\n+129\n+130 typedef\n+131 boost::transform_iterator<\n+132 ConstKeyValuePair(*)(_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br),\n+133 boost::filter_iterator<\n+134 std::function,\n+135 Values::const_iterator> >\n+136 const_const_iterator;\n+137\n+138 iterator begin() { return begin_; }\n+139 iterator end() { return end_; }\n+140 const_iterator begin() const { return begin_; }\n+141 const_iterator end() const { return end_; }\n+142 const_const_iterator beginConst() const { return constBegin_; }\n+143 const_const_iterator endConst() const { return constEnd_; }\n+144\n+146 size_t size() const {\n+147 size_t i = 0;\n+148 for (const_const_iterator it = beginConst(); it != endConst(); ++it)\n+149 ++i;\n+150 return i;\n+151 }\n+152\n+153 private:\n+154 Filtered(\n+155 const std::function& filter,\n+156 _\bV_\ba_\bl_\bu_\be_\bs& values) :\n+157 begin_(\n+158 boost::make_transform_iterator(\n+159 boost::make_filter_iterator(filter, values.begin(), values.end()),\n+160 &ValuesCastHelper::cast)),\n+end_(\n+161 boost::make_transform_iterator(\n+162 boost::make_filter_iterator(filter, values.end(), values.end()),\n+163 &ValuesCastHelper::cast)),\n+constBegin_(\n+164 boost::make_transform_iterator(\n+165 boost::make_filter_iterator(filter,\n+166 values._begin(),\n+167 values._end()),\n+168 &ValuesCastHelper::cast)), constEnd_(\n+170 boost::make_transform_iterator(\n+171 boost::make_filter_iterator(filter,\n+172 values._end(),\n+173 values._end()),\n+174 &ValuesCastHelper::cast)) {\n+176 }\n+177\n+178 friend class _\bV_\ba_\bl_\bu_\be_\bs;\n+179 iterator begin_;\n+180 iterator end_;\n+181 const_const_iterator constBegin_;\n+182 const_const_iterator constEnd_;\n+183 };\n+184\n+185 template\n+186 class Values::ConstFiltered {\n+187 public:\n+189 typedef _ValuesConstKeyValuePair KeyValuePair;\n+190 typedef KeyValuePair value_type;\n+191\n+192 typedef typename Filtered::const_const_iterator iterator;\n+193 typedef typename Filtered::const_const_iterator const_iterator;\n 194\n-_\b2_\b0_\b0 bool _\bc_\ba_\bc_\bh_\be_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs;\n-201\n-202 _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-_\b2_\b0_\b3 _\bk_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br;\n-205\n-_\b2_\b0_\b6 bool _\be_\bn_\ba_\bb_\bl_\be_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs;\n-209\n-_\b2_\b1_\b8 bool _\be_\bn_\ba_\bb_\bl_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bc_\bk;\n+196 ConstFiltered(const Filtered& rhs) :\n+197 begin_(rhs.beginConst()),\n+198 end_(rhs.endConst()) {}\n+199\n+200 iterator begin() { return begin_; }\n+201 iterator end() { return end_; }\n+202 const_iterator begin() const { return begin_; }\n+203 const_iterator end() const { return end_; }\n+204\n+206 size_t size() const {\n+207 size_t i = 0;\n+208 for (const_iterator it = begin(); it != end(); ++it)\n+209 ++i;\n+210 return i;\n+211 }\n+212\n+213 FastList keys() const {\n+214 FastList result;\n+215 for(const_iterator it = begin(); it != end(); ++it)\n+216 result.push_back(it->key);\n+217 return result;\n+218 }\n 219\n-_\b2_\b2_\b4 bool _\bf_\bi_\bn_\bd_\bU_\bn_\bu_\bs_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bl_\bo_\bt_\bs;\n-225\n-_\b2_\b3_\b0 _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs(_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs _optimizationParams = _\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-(),\n-231 _\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd _relinearizeThreshold = 0.1,\n-232 int _relinearizeSkip = 10, bool _enableRelinearization = true,\n-233 bool _evaluateNonlinearError = false,\n-234 Factorization _factorization = ISAM2Params::CHOLESKY,\n-235 bool _cacheLinearizedFactors = true,\n-236 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& _keyFormatter =\n-237 DefaultKeyFormatter,\n-238 bool _enableDetailedResults = false)\n-239 : optimizationParams(_optimizationParams),\n-240 relinearizeThreshold(_relinearizeThreshold),\n-241 relinearizeSkip(_relinearizeSkip),\n-242 enableRelinearization(_enableRelinearization),\n-243 evaluateNonlinearError(_evaluateNonlinearError),\n-244 factorization(_factorization),\n-245 cacheLinearizedFactors(_cacheLinearizedFactors),\n-246 keyFormatter(_keyFormatter),\n-247 enableDetailedResults(_enableDetailedResults),\n-248 enablePartialRelinearizationCheck(false),\n-249 findUnusedFactorSlots(false) {}\n+220 private:\n+221 friend class _\bV_\ba_\bl_\bu_\be_\bs;\n+222 const_iterator begin_;\n+223 const_iterator end_;\n+224 ConstFiltered(\n+225 const std::function& filter,\n+226 const _\bV_\ba_\bl_\bu_\be_\bs& values) {\n+227 // We remove the const from values to create a non-const Filtered\n+228 // view, then pull the const_iterators out of it.\n+229 const Filtered filtered(filter, const_cast<_\bV_\ba_\bl_\bu_\be_\bs&>(values));\n+230 begin_ = filtered.beginConst();\n+231 end_ = filtered.endConst();\n+232 }\n+233 };\n+234\n+235 template\n+236 _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs(const Values::Filtered& view) {\n+237 for(const auto key_value: view) {\n+238 _\bK_\be_\by key = key_value.key;\n+239 _\bi_\bn_\bs_\be_\br_\bt(key, static_cast(key_value.value));\n+240 }\n+241 }\n+242\n+243 template\n+244 _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs(const Values::ConstFiltered& view) {\n+245 for(const auto key_value: view) {\n+246 _\bK_\be_\by key = key_value.key;\n+247 _\bi_\bn_\bs_\be_\br_\bt(key, static_cast(key_value.value));\n+248 }\n+249 }\n 250\n-_\b2_\b5_\b2 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const {\n-253 using std::cout;\n-254 cout << str << \"\\n\";\n+251 Values::Filtered\n+252 inline Values::filter(const std::function& filterFcn) {\n+253 return filter(filterFcn);\n+254 }\n 255\n-256 static const std::string kStr(\"optimizationParams: \");\n-257 if (optimizationParams.type() == typeid(_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs))\n-258 boost::get(optimizationParams).print();\n-259 else if (optimizationParams.type() == typeid(_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs))\n-260 boost::get(optimizationParams).print(kStr);\n-261 else\n-262 cout << kStr << \"{unknown type}\\n\";\n-263\n-264 cout << \"relinearizeThreshold: \";\n-265 if (relinearizeThreshold.type() == typeid(double)) {\n-266 cout << boost::get(relinearizeThreshold) << \"\\n\";\n-267 } else {\n-268 cout << \"{mapped}\\n\";\n-269 for (const ISAM2ThresholdMapValue& value :\n-270 boost::get(relinearizeThreshold)) {\n-271 cout << \" '\" << value.first\n-272 << \"' -> [\" << value.second.transpose() << \" ]\\n\";\n+256 template\n+257 Values::Filtered\n+258 Values::filter(const std::function& filterFcn) {\n+259 return Filtered(std::bind(&filterHelper, filterFcn,\n+260 std::placeholders::_1), *this);\n+261 }\n+262\n+263 Values::ConstFiltered\n+264 inline Values::filter(const std::function& filterFcn) const {\n+265 return filter(filterFcn);\n+266 }\n+267\n+268 template\n+269 Values::ConstFiltered\n+270 Values::filter(const std::function& filterFcn) const {\n+271 return ConstFiltered(std::bind(&filterHelper,\n+272 filterFcn, std::placeholders::_1), *this);\n 273 }\n-274 }\n+274#endif\n 275\n-276 cout << \"relinearizeSkip: \" << relinearizeSkip << \"\\n\";\n-277 cout << \"enableRelinearization: \" << enableRelinearization\n-278 << \"\\n\";\n-279 cout << \"evaluateNonlinearError: \" << evaluateNonlinearError\n-280 << \"\\n\";\n-281 cout << \"factorization: \"\n-282 << factorizationTranslator(factorization) << \"\\n\";\n-283 cout << \"cacheLinearizedFactors: \" << cacheLinearizedFactors\n-284 << \"\\n\";\n-285 cout << \"enableDetailedResults: \" << enableDetailedResults\n-286 << \"\\n\";\n-287 cout << \"enablePartialRelinearizationCheck: \"\n-288 << enablePartialRelinearizationCheck << \"\\n\";\n-289 cout << \"findUnusedFactorSlots: \" << findUnusedFactorSlots\n-290 << \"\\n\";\n-291 cout.flush();\n-292 }\n-293\n-296\n-297 OptimizationParams getOptimizationParams() const {\n-298 return this->optimizationParams;\n+276 /\n+* ************************************************************************* */\n+277 template<>\n+278 inline bool Values::filterHelper(const std::function\n+filter,\n+279 const ConstKeyValuePair& key_value) {\n+280 // Filter and check the type\n+281 return filter(key_value.key);\n+282 }\n+283\n+284 /\n+* ************************************************************************* */\n+285\n+286 namespace internal {\n+287\n+288 // Check the type and throw exception if incorrect\n+289 // Generic version, partially specialized below for various Eigen Matrix\n+types\n+290 template \n+_\b2_\b9_\b1 struct _\bh_\ba_\bn_\bd_\bl_\be {\n+292 ValueType operator()(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be* const pointer) {\n+293 auto ptr = dynamic_cast*>(pointer);\n+294 if (ptr) {\n+295 // value returns a const ValueType&, and the return makes a copy !!!!!\n+296 return ptr->_\bv_\ba_\bl_\bu_\be();\n+297 } else {\n+298 throw _\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be(j, typeid(*pointer), typeid(ValueType));\n 299 }\n-300 RelinearizationThreshold getRelinearizeThreshold() const {\n-301 return relinearizeThreshold;\n-302 }\n-303 std::string getFactorization() const {\n-304 return factorizationTranslator(factorization);\n-305 }\n-306 _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br getKeyFormatter() const { return keyFormatter; }\n-307\n-308 void setOptimizationParams(OptimizationParams optimizationParams) {\n-309 this->optimizationParams = optimizationParams;\n-310 }\n-311 void setRelinearizeThreshold(RelinearizationThreshold relinearizeThreshold)\n-{\n-312 this->relinearizeThreshold = relinearizeThreshold;\n-313 }\n-314 void setFactorization(const std::string& factorization) {\n-315 this->factorization = factorizationTranslator(factorization);\n-316 }\n-317 void setKeyFormatter(KeyFormatter keyFormatter) {\n-318 this->keyFormatter = keyFormatter;\n-319 }\n+300 }\n+301 };\n+302\n+303 template \n+_\b3_\b0_\b4 struct _\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx;\n+305\n+306 // Handle dynamic matrices\n+307 template \n+_\b3_\b0_\b8 struct _\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx, true> {\n+309 inline Eigen::Matrix operator()(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be* const\n+pointer) {\n+310 auto ptr = dynamic_cast>*>\n+(pointer);\n+311 if (ptr) {\n+312 // value returns a const Matrix&, and the return makes a copy !!!!!\n+313 return ptr->_\bv_\ba_\bl_\bu_\be();\n+314 } else {\n+315 // If a fixed matrix was stored, we end up here as well.\n+316 throw _\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be(j, typeid(*pointer), typeid(Eigen::Matrix));\n+317 }\n+318 }\n+319 };\n 320\n-321 GaussianFactorGraph::Eliminate getEliminationFunction() const {\n-322 return factorization == CHOLESKY\n-323 ? (GaussianFactorGraph::Eliminate)EliminatePreferCholesky\n-324 : (GaussianFactorGraph::Eliminate)_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR;\n-325 }\n-326\n-328\n-331\n-332 static Factorization factorizationTranslator(const std::string& str);\n-333 static std::string factorizationTranslator(const Factorization& value);\n-334\n-336};\n-337\n-338} // namespace gtsam\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n-_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh\n-Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail\n-implementation)\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bM_\ba_\bp\n-FastMap< char, Vector > ISAM2ThresholdMap\n-Parameters for the ISAM2 algorithm.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:133\n+321 // Handle fixed matrices\n+322 template \n+_\b3_\b2_\b3 struct _\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx, false> {\n+324 inline Eigen::Matrix operator()(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be* const\n+pointer) {\n+325 auto ptr = dynamic_cast>*>\n+(pointer);\n+326 if (ptr) {\n+327 // value returns a const MatrixMN&, and the return makes a copy !!!!!\n+328 return ptr->_\bv_\ba_\bl_\bu_\be();\n+329 } else {\n+330 Matrix A;\n+331 // Check if a dynamic matrix was stored\n+332 auto ptr = dynamic_cast*>(pointer);\n+333 if (ptr) {\n+334 A = ptr->value();\n+335 } else {\n+336 // Or a dynamic vector\n+337 A = _\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx_\b<_\bE_\bi_\bg_\be_\bn_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bX_\bd_\b,_\b _\bt_\br_\bu_\be_\b>()(j, pointer); // will throw if\n+not....\n+338 }\n+339 // Yes: check size, and throw if not a match\n+340 if (A.rows() != M || A.cols() != N)\n+341 throw _\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd(M, N, A.rows(), A.cols());\n+342 else\n+343 return A; // copy but not malloc\n+344 }\n+345 }\n+346 };\n+347\n+348 // Handle matrices\n+349 template \n+_\b3_\b5_\b0 struct _\bh_\ba_\bn_\bd_\bl_\be> {\n+351 Eigen::Matrix operator()(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be* const pointer) {\n+352 return _\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx_\b<_\bE_\bi_\bg_\be_\bn_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bM_\b,_\b _\bN_\b>,\n+353 (M == Eigen::Dynamic || N == Eigen::Dynamic)>()(j, pointer);\n+354 }\n+355 };\n+356\n+357 } // internal\n+358\n+359 /\n+* ************************************************************************* */\n+360 template \n+_\b3_\b6_\b1 const ValueType _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt(_\bK_\be_\by j) const {\n+362 // Find the item\n+363 KeyValueMap::const_iterator item = values_.find(j);\n+364\n+365 // Throw exception if it does not exist\n+366 if (item == values_.end()) throw _\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt(\"at\", j);\n+367\n+368 // Check the type and throw exception if incorrect\n+369 // h() split in two lines to avoid internal compiler error (MSVC2017)\n+370 auto h = _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bh_\ba_\bn_\bd_\bl_\be_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>();\n+371 return h(j, item->second);\n+372 }\n+373\n+374 /\n+* ************************************************************************* */\n+375 template\n+_\b3_\b7_\b6 boost::optional _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs(_\bK_\be_\by j) const {\n+377 // Find the item\n+378 KeyValueMap::const_iterator item = values_.find(j);\n+379\n+380 if(item != values_.end()) {\n+381 // dynamic cast the type and throw exception if incorrect\n+382 auto ptr = dynamic_cast*>(item->second);\n+383 if (ptr) {\n+384 return ptr->_\bv_\ba_\bl_\bu_\be();\n+385 } else {\n+386 // NOTE(abe): clang warns about potential side effects if done in typeid\n+387 const _\bV_\ba_\bl_\bu_\be* value = item->second;\n+388 throw _\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be(j, typeid(*value), typeid(ValueType));\n+389 }\n+390 } else {\n+391 return boost::none;\n+392 }\n+393 }\n+394\n+395 /\n+* ************************************************************************* */\n+396\n+397 // insert a templated value\n+398 template\n+_\b3_\b9_\b9 void _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt(_\bK_\be_\by j, const ValueType& val) {\n+400 _\bi_\bn_\bs_\be_\br_\bt(j, static_cast(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>(val)));\n+401 }\n+402\n+403 // update with templated value\n+404 template \n+405 void _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be(_\bK_\be_\by j, const ValueType& val) {\n+406 _\bu_\bp_\bd_\ba_\bt_\be(j, static_cast(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>(val)));\n+407 }\n+408\n+409 // insert_or_assign with templated value\n+410 template \n+_\b4_\b1_\b1 void _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn(_\bK_\be_\by j, const ValueType& val) {\n+412 _\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn(j, static_cast(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>\n+(val)));\n+413 }\n+414\n+415}\n+_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+A non-templated config holding any types of Manifold-group elements.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR\n-std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr >\n-EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)\n-Multiply all factors and eliminate the given keys from the resulting factor\n-using a QR variant that h...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:789\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl\n-This class contains the implementation of the Dogleg algorithm.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n-TrustRegionAdaptationMode\n-Specifies how the trust region is adapted at each Dogleg iteration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for ISAM2 using Gauss-Newton optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bw_\bi_\bl_\bd_\bf_\bi_\br_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-double wildfireThreshold\n-Continue updating the linear delta only when changes are above this threshold\n-(default: 0....\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-ISAM2GaussNewtonParams(double _wildfireThreshold=0.001)\n-Specify parameters as constructor arguments.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for ISAM2 using Dogleg optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\ba_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n-DoglegOptimizerImpl::TrustRegionAdaptationMode adaptationMode\n-See description in DoglegOptimizerImpl::TrustRegionAdaptationMode.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be\n-bool verbose\n-Whether Dogleg prints iteration and convergence information.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs\n-ISAM2DoglegParams(double _initialDelta=1.0, double _wildfireThreshold=1e-5,\n-DoglegOptimizerImpl::TrustRegionAdaptationMode\n-_adaptationMode=DoglegOptimizerImpl::SEARCH_EACH_ITERATION, bool\n-_verbose=false)\n-Specify parameters as constructor arguments.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bD_\be_\bl_\bt_\ba\n-double initialDelta\n-The initial trust region radius for Dogleg.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bw_\bi_\bl_\bd_\bf_\bi_\br_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-double wildfireThreshold\n-Continue updating the linear delta only when changes are above this threshold\n-(default: 1e-5)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bh_\be_\bc_\bk\n-bool enablePartialRelinearizationCheck\n-Check variables for relinearization in tree-order, stopping the check once a\n-variable does not need t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:218\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-OptimizationParams optimizationParams\n-Optimization parameters, this both selects the nonlinear optimization method\n-and specifies its parame...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &str=\"\") const\n-print iSAM2 parameters\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:252\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-bool enableRelinearization\n-Controls whether ISAM2 will ever relinearize any variables (default: true)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bc_\ba_\bc_\bh_\be_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-bool cacheLinearizedFactors\n-Whether to cache linear factors (default: true).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:200\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\br_\br_\bo_\br\n-bool evaluateNonlinearError\n-Whether to evaluate the nonlinear error before and after the update, to return\n-in ISAM2Result from up...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs\n-bool enableDetailedResults\n-Whether to compute and return ISAM2Result::detailedResults, this can increase\n-running time (default: ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:206\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-boost::variant< ISAM2GaussNewtonParams, ISAM2DoglegParams > OptimizationParams\n-Either ISAM2GaussNewtonParams or ISAM2DoglegParams.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bf_\bi_\bn_\bd_\bU_\bn_\bu_\bs_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bl_\bo_\bt_\bs\n-bool findUnusedFactorSlots\n-When you will be removing many factors, e.g.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:224\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-boost::variant< double, FastMap< char, Vector > > RelinearizationThreshold\n-Either a constant relinearization threshold or a per-variable-type set of\n-thresholds.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bS_\bk_\bi_\bp\n-int relinearizeSkip\n-Only relinearize any variables every relinearizeSkip calls to ISAM2::update\n-(default: 10)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:170\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-Factorization factorization\n-Specifies whether to use QR or CHOESKY numerical factorization (default:\n-CHOLESKY).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:193\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bk_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-KeyFormatter keyFormatter\n-A KeyFormatter for when keys are printed during debugging (default:\n-DefaultKeyFormatter)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:203\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-RelinearizationThreshold relinearizeThreshold\n-Only relinearize variables whose linear delta magnitude is greater than this\n-threshold (default: 0....\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:168\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs\n-ISAM2Params(OptimizationParams _optimizationParams=ISAM2GaussNewtonParams(),\n-RelinearizationThreshold _relinearizeThreshold=0.1, int _relinearizeSkip=10,\n-bool _enableRelinearization=true, bool _evaluateNonlinearError=false,\n-Factorization _factorization=ISAM2Params::CHOLESKY, bool\n-_cacheLinearizedFactors=true, const KeyFormatter\n-&_keyFormatter=DefaultKeyFormatter, bool _enableDetailedResults=false)\n-Specify parameters as constructor arguments See the documentation of member\n-variables above.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:230\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n+Wraps any type T so it can play as a Value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+const T & value() const\n+Return a constant value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n+This is the base class for any type to be stored in Values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bk_\be_\by\n+const Key key\n+The key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+ValueType & value\n+The value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bk_\be_\by\n+const Key key\n+The key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+const ValueType & value\n+The value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bC_\ba_\bs_\bt_\bH_\be_\bl_\bp_\be_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bh_\ba_\bn_\bd_\bl_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:291\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:304\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(Key j, const Value &val)\n+single element change of existing element\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bt_\br_\ba_\bc_\bt\n+std::map< Key, ValueType > extract(const std::function< bool(Key)>\n+&filterFcn=&_truePredicate< Key >) const\n+Extract a subset of values of the given type ValueType.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+const ValueType at(Key j) const\n+Retrieve a variable by key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n+void insert(Key j, const Value &val)\n+Add a variable with the given j, throws KeyAlreadyExists if j is already\n+present.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn\n+void insert_or_assign(Key j, const Value &val)\n+If key j exists, update value, else perform an insert.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:203\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+Values()=default\n+Default constructor creates an empty Values class.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n+bool exists(Key j) const\n+Check if a value exists with key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+A key-value pair, which you get by dereferencing iterators.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+A key-value pair, which you get by dereferencing iterators.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:475\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:498\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:542\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * V\bVa\bal\blu\bue\bes\bs-\b-i\bin\bnl\bl.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01043.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01043.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtOptimizer.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizer.h File Reference\n \n \n \n \n \n \n \n@@ -96,47 +96,42 @@\n
\n \n \n
\n \n-
LevenbergMarquardtOptimizer.h File Reference
\n+
DoglegOptimizer.h File Reference
\n
\n
\n \n-

A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::LevenbergMarquardtOptimizer
 This class performs Levenberg-Marquardt nonlinear optimization. More...
class  gtsam::DoglegParams
 Parameters for Levenberg-Marquardt optimization. More...
 
class  gtsam::DoglegOptimizer
 This class performs Dogleg nonlinear optimization. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.

\n-
Author
Richard Roberts
\n-
\n-Frank Dellaert
\n-
\n-Luca Carlone
\n+
Author
Richard Roberts
\n
Date
Feb 26, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-LevenbergMarquardtOptimizer.h File Reference\n-A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+DoglegOptimizer.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-\u00a0 This class performs Levenberg-Marquardt nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs\n+\u00a0 Parameters for Levenberg-Marquardt optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+\u00a0 This class performs Dogleg nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n Author\n Richard Roberts\n- Frank Dellaert\n- Luca Carlone\n Date\n Feb 26, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01043.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01043.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a01043 = [\n- [\"gtsam::LevenbergMarquardtOptimizer\", \"a04436.html\", \"a04436\"]\n+ [\"gtsam::DoglegParams\", \"a04256.html\", \"a04256\"],\n+ [\"gtsam::DoglegOptimizer\", \"a04260.html\", \"a04260\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01043_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01043_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtOptimizer.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizer.h Source File\n \n \n \n \n \n \n \n@@ -98,131 +98,127 @@\n
No Matches
\n \n \n \n \n \n
\n-
LevenbergMarquardtOptimizer.h
\n+
DoglegOptimizer.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n+
19#pragma once
\n+
20
\n+\n
22
\n-\n-\n-\n-
26#include <boost/date_time/posix_time/posix_time.hpp>
\n-
27
\n-
28class NonlinearOptimizerMoreOptimizationTest;
\n-
29
\n-
30namespace gtsam {
\n-
31
\n+
23namespace gtsam {
\n+
24
\n+
25class DoglegOptimizer;
\n+
26
\n+
\n+
32class GTSAM_EXPORT DoglegParams : public NonlinearOptimizerParams {
\n+
33public:
\n
\n-\n-
36
\n-
37protected:
\n-\n-
39 boost::posix_time::ptime startTime_;
\n-
40
\n-
41 void initTime();
\n+\n+
36 SILENT,
\n+
37 VERBOSE
\n+
38 };
\n+
\n+
39
\n+
40 double deltaInitial;
\n+\n
42
\n-
43public:
\n-
44 typedef boost::shared_ptr<LevenbergMarquardtOptimizer> shared_ptr;
\n+
43 DoglegParams() :
\n+
44 deltaInitial(1.0), verbosityDL(SILENT) {}
\n
45
\n-
48
\n-
57 LevenbergMarquardtOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n-\n+
46 ~DoglegParams() override {}
\n+
47
\n+
48 void print(const std::string& str = "") const override {
\n+
49 NonlinearOptimizerParams::print(str);
\n+
50 std::cout << " deltaInitial: " << deltaInitial << "\\n";
\n+
51 std::cout.flush();
\n+
52 }
\n+
53
\n+
54 double getDeltaInitial() const { return deltaInitial; }
\n+
55 std::string getVerbosityDL() const { return verbosityDLTranslator(verbosityDL); }
\n+
56
\n+
57 void setDeltaInitial(double deltaInitial) { this->deltaInitial = deltaInitial; }
\n+
58 void setVerbosityDL(const std::string& verbosityDL) { this->verbosityDL = verbosityDLTranslator(verbosityDL); }
\n
59
\n-
67 LevenbergMarquardtOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n-
68 const Ordering& ordering,
\n-\n-
70
\n-
\n-\n-
73 }
\n-
\n-
74
\n-
76
\n-
79
\n-
81 double lambda() const;
\n-
82
\n-
84 int getInnerIterations() const;
\n-
85
\n-
\n-
87 void print(const std::string& str = "") const {
\n-
88 std::cout << str << "LevenbergMarquardtOptimizer" << std::endl;
\n-
89 this->params_.print(" parameters:\\n");
\n-
90 }
\n-
\n-
91
\n-
93
\n-
96
\n-
101 GaussianFactorGraph::shared_ptr iterate() override;
\n-
102
\n-
\n-\n-
105 return params_;
\n-
106 }
\n-
\n+
60private:
\n+
61 VerbosityDL verbosityDLTranslator(const std::string& verbosityDL) const;
\n+
62 std::string verbosityDLTranslator(VerbosityDL verbosityDL) const;
\n+
63};
\n+
\n+
64
\n+
\n+
68class GTSAM_EXPORT DoglegOptimizer : public NonlinearOptimizer {
\n+
69
\n+
70protected:
\n+
71 DoglegParams params_;
\n+
72
\n+
73public:
\n+
74 typedef boost::shared_ptr<DoglegOptimizer> shared_ptr;
\n+
75
\n+
78
\n+
87 DoglegOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n+
88 const DoglegParams& params = DoglegParams());
\n+
89
\n+
97 DoglegOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n+
98 const Ordering& ordering);
\n+
99
\n+
101
\n+
104
\n+
106 ~DoglegOptimizer() override {}
\n
107
\n-
108 void writeLogFile(double currentError);
\n-
109
\n-
111 virtual GaussianFactorGraph::shared_ptr linearize() const;
\n-
112
\n-
114 GaussianFactorGraph buildDampedSystem(const GaussianFactorGraph& linear,
\n-
115 const VectorValues& sqrtHessianDiagonal) const;
\n+
112 GaussianFactorGraph::shared_ptr iterate() override;
\n+
113
\n+
115 const DoglegParams& params() const { return params_; }
\n
116
\n-
118 bool tryLambda(const GaussianFactorGraph& linear, const VectorValues& sqrtHessianDiagonal);
\n+
118 double getDelta() const;
\n
119
\n
121
\n
122protected:
\n-
123
\n-
\n-
125 const NonlinearOptimizerParams& _params() const override {
\n-
126 return params_;
\n-
127 }
\n-
\n+
124 const NonlinearOptimizerParams& _params() const override { return params_; }
\n+
125
\n+
127 DoglegParams ensureHasOrdering(DoglegParams params, const NonlinearFactorGraph& graph) const;
\n
128};
\n
\n
129
\n
130}
\n-
Factor Graph Values.
\n-
Parameters for Levenberg-Marquardt trust-region scheme.
\n-
Base class and parameters for nonlinear optimization algorithms.
\n+
Base class and parameters for nonlinear optimization algorithms.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Definition Ordering.h:34
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
This class performs Levenberg-Marquardt nonlinear optimization.
Definition LevenbergMarquardtOptimizer.h:35
\n-
~LevenbergMarquardtOptimizer() override
Virtual destructor.
Definition LevenbergMarquardtOptimizer.h:72
\n-
const LevenbergMarquardtParams & params() const
Read-only access the parameters.
Definition LevenbergMarquardtOptimizer.h:104
\n-
const NonlinearOptimizerParams & _params() const override
Access the parameters (base class version)
Definition LevenbergMarquardtOptimizer.h:125
\n-
const LevenbergMarquardtParams params_
LM parameters.
Definition LevenbergMarquardtOptimizer.h:38
\n-
void print(const std::string &str="") const
print
Definition LevenbergMarquardtOptimizer.h:87
\n-
Parameters for Levenberg-Marquardt optimization.
Definition LevenbergMarquardtParams.h:35
\n+
Parameters for Levenberg-Marquardt optimization.
Definition DoglegOptimizer.h:32
\n+
VerbosityDL
See DoglegParams::dlVerbosity.
Definition DoglegOptimizer.h:35
\n+
VerbosityDL verbosityDL
The verbosity level for Dogleg (default: SILENT), see also NonlinearOptimizerParams::verbosity.
Definition DoglegOptimizer.h:41
\n+
double deltaInitial
The initial trust region radius (default: 10.0)
Definition DoglegOptimizer.h:40
\n+
This class performs Dogleg nonlinear optimization.
Definition DoglegOptimizer.h:68
\n+
~DoglegOptimizer() override
Virtual destructor.
Definition DoglegOptimizer.h:106
\n+
const NonlinearOptimizerParams & _params() const override
Access the parameters (base class version)
Definition DoglegOptimizer.h:124
\n+
const DoglegParams & params() const
Read-only access the parameters.
Definition DoglegOptimizer.h:115
\n
Definition NonlinearFactorGraph.h:55
\n
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition NonlinearOptimizer.h:75
\n
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,157 +1,158 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-LevenbergMarquardtOptimizer.h\n+DoglegOptimizer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n 22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-26#include \n-27\n-28class NonlinearOptimizerMoreOptimizationTest;\n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-_\b3_\b5class GTSAM_EXPORT _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n-36\n-37protected:\n-_\b3_\b8 const _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs _\bp_\ba_\br_\ba_\bm_\bs_\b_;\n-39 boost::posix_time::ptime startTime_;\n-40\n-41 void initTime();\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+25class DoglegOptimizer;\n+26\n+_\b3_\b2class GTSAM_EXPORT _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs {\n+33public:\n+_\b3_\b5 enum _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bD_\bL {\n+36 SILENT,\n+37 VERBOSE\n+38 };\n+39\n+_\b4_\b0 double _\bd_\be_\bl_\bt_\ba_\bI_\bn_\bi_\bt_\bi_\ba_\bl;\n+_\b4_\b1 _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bD_\bL _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bD_\bL;\n 42\n-43public:\n-44 typedef boost::shared_ptr shared_ptr;\n+43 _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs() :\n+44 deltaInitial(1.0), verbosityDL(SILENT) {}\n 45\n-48\n-57 _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n-initialValues,\n-58 const _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs& params = _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs());\n+46 _\b~_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs() override {}\n+47\n+48 void print(const std::string& str = \"\") const override {\n+49 NonlinearOptimizerParams::print(str);\n+50 std::cout << \" deltaInitial: \" << deltaInitial << \"\\n\";\n+51 std::cout.flush();\n+52 }\n+53\n+54 double getDeltaInitial() const { return deltaInitial; }\n+55 std::string getVerbosityDL() const { return verbosityDLTranslator\n+(verbosityDL); }\n+56\n+57 void setDeltaInitial(double deltaInitial) { this->deltaInitial =\n+deltaInitial; }\n+58 void setVerbosityDL(const std::string& verbosityDL) { this->verbosityDL =\n+verbosityDLTranslator(verbosityDL); }\n 59\n-67 _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n+60private:\n+61 VerbosityDL verbosityDLTranslator(const std::string& verbosityDL) const;\n+62 std::string verbosityDLTranslator(VerbosityDL verbosityDL) const;\n+63};\n+64\n+_\b6_\b8class GTSAM_EXPORT _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n+69\n+70protected:\n+71 _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs params_;\n+72\n+73public:\n+74 typedef boost::shared_ptr shared_ptr;\n+75\n+78\n+87 _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n+initialValues,\n+88 const _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs& params = _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs());\n+89\n+97 _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n initialValues,\n-68 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-69 const _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs& params = _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs());\n-70\n-_\b7_\b2 _\b~_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br() override {\n-73 }\n-74\n-76\n-79\n-81 double lambda() const;\n-82\n-84 int getInnerIterations() const;\n-85\n-_\b8_\b7 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const {\n-88 std::cout << str << \"LevenbergMarquardtOptimizer\" << std::endl;\n-89 this->params_.print(\" parameters:\\n\");\n-90 }\n-91\n-93\n-96\n-101 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br iterate() override;\n-102\n-_\b1_\b0_\b4 const _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs& _\bp_\ba_\br_\ba_\bm_\bs() const {\n-105 return params_;\n-106 }\n+98 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering);\n+99\n+101\n+104\n+_\b1_\b0_\b6 _\b~_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br() override {}\n 107\n-108 void writeLogFile(double currentError);\n-109\n-111 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br linearize() const;\n-112\n-114 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh buildDampedSystem(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& linear,\n-115 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& sqrtHessianDiagonal) const;\n+112 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br iterate() override;\n+113\n+_\b1_\b1_\b5 const _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs& _\bp_\ba_\br_\ba_\bm_\bs() const { return params_; }\n 116\n-118 bool tryLambda(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& linear, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs&\n-sqrtHessianDiagonal);\n+118 double getDelta() const;\n 119\n 121\n 122protected:\n-123\n-_\b1_\b2_\b5 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& _\b__\bp_\ba_\br_\ba_\bm_\bs() const override {\n-126 return params_;\n-127 }\n+_\b1_\b2_\b4 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& _\b__\bp_\ba_\br_\ba_\bm_\bs() const override { return params_;\n+}\n+125\n+127 _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs ensureHasOrdering(_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs params, const\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph) const;\n 128};\n 129\n 130}\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n-Parameters for Levenberg-Marquardt trust-region scheme.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n Base class and parameters for nonlinear optimization algorithms.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n boost::shared_ptr< This > shared_ptr\n shared_ptr to this class\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-This class performs Levenberg-Marquardt nonlinear optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b~_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-~LevenbergMarquardtOptimizer() override\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for Levenberg-Marquardt optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bD_\bL\n+VerbosityDL\n+See DoglegParams::dlVerbosity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bD_\bL\n+VerbosityDL verbosityDL\n+The verbosity level for Dogleg (default: SILENT), see also\n+NonlinearOptimizerParams::verbosity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bI_\bn_\bi_\bt_\bi_\ba_\bl\n+double deltaInitial\n+The initial trust region radius (default: 10.0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+This class performs Dogleg nonlinear optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b~_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+~DoglegOptimizer() override\n Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs\n-const LevenbergMarquardtParams & params() const\n-Read-only access the parameters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b__\bp_\ba_\br_\ba_\bm_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b__\bp_\ba_\br_\ba_\bm_\bs\n const NonlinearOptimizerParams & _params() const override\n Access the parameters (base class version)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:125\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs_\b_\n-const LevenbergMarquardtParams params_\n-LM parameters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &str=\"\") const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for Levenberg-Marquardt optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:35\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:124\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs\n+const DoglegParams & params() const\n+Read-only access the parameters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:115\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n This is the abstract interface for classes that can optimize for the maximum-\n likelihood estimate of a...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:75\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n The common parameters for Nonlinear optimizers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01049.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01049.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizerParams.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Clique.h File Reference\n \n \n \n \n \n \n \n@@ -94,42 +94,54 @@\n \n \n \n \n \n
\n \n-
NonlinearOptimizerParams.cpp File Reference
\n+Classes |\n+Namespaces |\n+Functions
\n+
ISAM2Clique.h File Reference
\n \n
\n \n-

Parameters for nonlinear optimization. \n+

Specialized iSAM2 Clique. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::ISAM2Clique
 Specialized Clique structure for ISAM2, incorporating caching and gradient contribution TODO: more documentation. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n

\n+Functions

size_t gtsam::optimizeWildfire (const ISAM2Clique::shared_ptr &root, double threshold, const KeySet &replaced, VectorValues *delta)
 Optimize the BayesTree, starting from the root.
 
\n+size_t gtsam::optimizeWildfireNonRecursive (const ISAM2Clique::shared_ptr &root, double threshold, const KeySet &keys, VectorValues *delta)
 
\n

Detailed Description

\n-

Parameters for nonlinear optimization.

\n-
Date
Jul 24, 2012
\n-
Author
Yong-Dian Jian
\n-
\n-Richard Roberts
\n-
\n-Frank Dellaert
\n-
\n-Andrew Melim
\n+

Specialized iSAM2 Clique.

\n+
Author
Michael Kaess, Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,34 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-NonlinearOptimizerParams.cpp File Reference\n-Parameters for nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ISAM2Clique.h File Reference\n+Specialized iSAM2 Clique. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n+\u00a0 Specialized Clique structure for _\bI_\bS_\bA_\bM_\b2, incorporating caching and\n+ gradient contribution TODO: more documentation. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+size_t\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bW_\bi_\bl_\bd_\bf_\bi_\br_\be (const ISAM2Clique::shared_ptr &root, double\n+ threshold, const _\bK_\be_\by_\bS_\be_\bt &replaced, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs *delta)\n+\u00a0 Optimize the _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be, starting from the root.\n+\u00a0\n+size_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpt\bti\bim\bmi\biz\bze\beW\bWi\bil\bld\bdf\bfi\bir\bre\beN\bNo\bon\bnR\bRe\bec\bcu\bur\brs\bsi\biv\bve\be (const ISAM2Clique::shared_ptr\n+ &root, double threshold, const _\bK_\be_\by_\bS_\be_\bt &keys, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs *delta)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Parameters for nonlinear optimization.\n- Date\n- Jul 24, 2012\n+Specialized iSAM2 Clique.\n Author\n- Yong-Dian Jian\n- Richard Roberts\n- Frank Dellaert\n- Andrew Melim\n+ Michael Kaess, Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bc_\bp_\bp\n+ * _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01052.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01052.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GncOptimizer.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearConjugateGradientOptimizer.h File Reference\n \n \n \n \n \n \n \n@@ -95,49 +95,57 @@\n \n \n \n \n
\n \n-
GncOptimizer.h File Reference
\n+Namespaces |\n+Functions
\n+
NonlinearConjugateGradientOptimizer.h File Reference
\n \n
\n \n-

The GncOptimizer class. \n+

Simple non-linear optimizer that solves using non-preconditioned CG. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n \n

\n Classes

class  gtsam::GncOptimizer< GncParameters >
class  gtsam::NonlinearConjugateGradientOptimizer
 An implementation of the nonlinear CG method using the template below. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+template<class S , class V , class W >
double gtsam::lineSearch (const S &system, const V currentValues, const W &gradient)
 Implement the golden-section line search algorithm.
 
template<class S , class V >
boost::tuple< V, int > gtsam::nonlinearConjugateGradient (const S &system, const V &initial, const NonlinearOptimizerParams &params, const bool singleIteration, const bool gradientDescent=false)
 Implement the nonlinear conjugate gradient method using the Polak-Ribiere formula suggested in http://en.wikipedia.org/wiki/Nonlinear_conjugate_gradient_method.
 
\n

Detailed Description

\n-

The GncOptimizer class.

\n-
Author
Jingnan Shi
\n-
\n-Luca Carlone
\n-
\n-Frank Dellaert
\n-

Implementation of the paper: Yang, Antonante, Tzoumas, Carlone, \"Graduated Non-Convexity for Robust Spatial Perception:\n-From Non-Minimal Solvers to Global Outlier Rejection\", ICRA/RAL, 2020. (arxiv version: https://arxiv.org/pdf/1909.08605.pdf)

\n-

See also: Antonante, Tzoumas, Yang, Carlone, \"Outlier-Robust Estimation: Hardness, Minimally-Tuned Algorithms, and Applications\", arxiv: https://arxiv.org/pdf/2007.15109.pdf, 2020.

\n+

Simple non-linear optimizer that solves using non-preconditioned CG.

\n+
Author
Yong-Dian Jian
\n+
Date
June 11, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,44 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GncOptimizer.h File Reference\n-The GncOptimizer class. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+NonlinearConjugateGradientOptimizer.h File Reference\n+Simple non-linear optimizer that solves using n\bno\bon\bn-\b-p\bpr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\bed\bd CG. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b<_\b _\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+\u00a0 An implementation of the nonlinear CG method using the template below.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bli\bin\bne\beS\bSe\bea\bar\brc\bch\bh (const S &system, const V\n+ currentValues, const W &gradient)\n+\u00a0 Implement the golden-section line search algorithm.\n+\u00a0\n+template\n+boost::tuple< V, int >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt (const S &system,\n+ const V &initial, const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+ ¶ms, const bool singleIteration, const bool\n+ gradientDescent=false)\n+ Implement the nonlinear conjugate gradient method using\n+\u00a0 the Polak-Ribiere formula suggested in _\bh_\bt_\bt_\bp_\b:_\b/_\b/\n+ _\be_\bn_\b._\bw_\bi_\bk_\bi_\bp_\be_\bd_\bi_\ba_\b._\bo_\br_\bg_\b/_\bw_\bi_\bk_\bi_\b/\n+ _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b__\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b__\bm_\be_\bt_\bh_\bo_\bd.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-The GncOptimizer class.\n+Simple non-linear optimizer that solves using n\bno\bon\bn-\b-p\bpr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\bed\bd CG.\n Author\n- Jingnan Shi\n- Luca Carlone\n- Frank Dellaert\n-Implementation of the paper: Yang, Antonante, Tzoumas, Carlone, \"Graduated Non-\n-Convexity for Robust Spatial Perception: From Non-Minimal Solvers to Global\n-Outlier Rejection\", ICRA/RAL, 2020. (arxiv version: _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\ba_\br_\bx_\bi_\bv_\b._\bo_\br_\bg_\b/_\bp_\bd_\bf_\b/\n-_\b1_\b9_\b0_\b9_\b._\b0_\b8_\b6_\b0_\b5_\b._\bp_\bd_\bf)\n-See also: Antonante, Tzoumas, Yang, Carlone, \"Outlier-Robust Estimation:\n-Hardness, Minimally-Tuned Algorithms, and Applications\", arxiv: _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/\n-_\ba_\br_\bx_\bi_\bv_\b._\bo_\br_\bg_\b/_\bp_\bd_\bf_\b/_\b2_\b0_\b0_\b7_\b._\b1_\b5_\b1_\b0_\b9_\b._\bp_\bd_\bf, 2020.\n+ Yong-Dian Jian\n+ Date\n+ June 11, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01052.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01052.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a01052 = [\n- [\"gtsam::GncOptimizer< GncParameters >\", \"a04360.html\", \"a04360\"]\n+ [\"gtsam::NonlinearConjugateGradientOptimizer\", \"a04460.html\", \"a04460\"],\n+ [\"lineSearch\", \"a01052.html#a0ceb9e5a5e864b96c529db67f55a873b\", null],\n+ [\"nonlinearConjugateGradient\", \"a01052.html#afc19854e0bfc1acadb00ff00a043cc17\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01052_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01052_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GncOptimizer.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearConjugateGradientOptimizer.h Source File\n \n \n \n \n \n \n \n@@ -98,516 +98,247 @@\n
No Matches
\n \n \n \n \n \n
\n-
GncOptimizer.h
\n+
NonlinearConjugateGradientOptimizer.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
27#pragma once
\n-
28
\n-
29#include <gtsam/nonlinear/GncParams.h>
\n-\n-
31#include <boost/math/distributions/chi_squared.hpp>
\n-
32
\n-
33namespace gtsam {
\n-
34/*
\n-
35 * Quantile of chi-squared distribution with given degrees of freedom at probability alpha.
\n-
36 * Equivalent to chi2inv in Matlab.
\n-
37 */
\n-
38static double Chi2inv(const double alpha, const size_t dofs) {
\n-
39 boost::math::chi_squared_distribution<double> chi2(dofs);
\n-
40 return boost::math::quantile(chi2, alpha);
\n-
41}
\n-
42
\n-
43/* ************************************************************************* */
\n-
44template<class GncParameters>
\n-
\n-\n-
46 public:
\n-
48 typedef typename GncParameters::OptimizerType BaseOptimizer;
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/base/Manifold.h>
\n+\n+
23#include <boost/tuple/tuple.hpp>
\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
\n+\n+
29
\n+
30 /* a class for the nonlinearConjugateGradient template */
\n+
31 class System {
\n+
32 public:
\n+
33 typedef Values State;
\n+
34 typedef VectorValues Gradient;
\n+\n+
36
\n+
37 protected:
\n+
38 const NonlinearFactorGraph &graph_;
\n+
39
\n+
40 public:
\n+
41 System(const NonlinearFactorGraph &graph) :
\n+
42 graph_(graph) {
\n+
43 }
\n+
44 double error(const State &state) const;
\n+
45 Gradient gradient(const State &state) const;
\n+
46 State advance(const State &current, const double alpha,
\n+
47 const Gradient &g) const;
\n+
48 };
\n
49
\n-
50 private:
\n-\n-
52 Values state_;
\n-
53 GncParameters params_;
\n-
54 Vector weights_;
\n-
55 Vector barcSq_;
\n-
56
\n-
57 public:
\n-
\n-
59 GncOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n-
60 const GncParameters& params = GncParameters())
\n-
61 : state_(initialValues),
\n-
62 params_(params) {
\n-
63
\n-
64 // make sure all noiseModels are Gaussian or convert to Gaussian
\n-
65 nfg_.resize(graph.size());
\n-
66 for (size_t i = 0; i < graph.size(); i++) {
\n-
67 if (graph[i]) {
\n-
68 NoiseModelFactor::shared_ptr factor = boost::dynamic_pointer_cast<
\n-
69 NoiseModelFactor>(graph[i]);
\n-
70 auto robust = boost::dynamic_pointer_cast<
\n-
71 noiseModel::Robust>(factor->noiseModel());
\n-
72 // if the factor has a robust loss, we remove the robust loss
\n-
73 nfg_[i] = robust ? factor-> cloneWithNewNoiseModel(robust->noise()) : factor;
\n-
74 }
\n-
75 }
\n-
76
\n-
77 // check that known inliers and outliers make sense:
\n-
78 std::vector<size_t> inconsistentlySpecifiedWeights; // measurements the user has incorrectly specified
\n-
79 // to be BOTH known inliers and known outliers
\n-
80 std::set_intersection(params.knownInliers.begin(),params.knownInliers.end(),
\n-
81 params.knownOutliers.begin(),params.knownOutliers.end(),
\n-
82 std::inserter(inconsistentlySpecifiedWeights, inconsistentlySpecifiedWeights.begin()));
\n-
83 if(inconsistentlySpecifiedWeights.size() > 0){ // if we have inconsistently specified weights, we throw an exception
\n-
84 params.print("params\\n");
\n-
85 throw std::runtime_error("GncOptimizer::constructor: the user has selected one or more measurements"
\n-
86 " to be BOTH a known inlier and a known outlier.");
\n-
87 }
\n-
88 // check that known inliers are in the graph
\n-
89 for (size_t i = 0; i < params.knownInliers.size(); i++){
\n-
90 if( params.knownInliers[i] > nfg_.size()-1 ){ // outside graph
\n-
91 throw std::runtime_error("GncOptimizer::constructor: the user has selected one or more measurements"
\n-
92 "that are not in the factor graph to be known inliers.");
\n-
93 }
\n-
94 }
\n-
95 // check that known outliers are in the graph
\n-
96 for (size_t i = 0; i < params.knownOutliers.size(); i++){
\n-
97 if( params.knownOutliers[i] > nfg_.size()-1 ){ // outside graph
\n-
98 throw std::runtime_error("GncOptimizer::constructor: the user has selected one or more measurements"
\n-
99 "that are not in the factor graph to be known outliers.");
\n-
100 }
\n-
101 }
\n-
102 // initialize weights (if we don't have prior knowledge of inliers/outliers
\n-
103 // the weights are all initialized to 1.
\n-
104 weights_ = initializeWeightsFromKnownInliersAndOutliers();
\n-
105
\n-
106 // set default barcSq_ (inlier threshold)
\n-
107 double alpha = 0.99; // with this (default) probability, inlier residuals are smaller than barcSq_
\n-\n-
109 }
\n-
\n-
110
\n-
\n-
117 void setInlierCostThresholds(const double inth) {
\n-
118 barcSq_ = inth * Vector::Ones(nfg_.size());
\n-
119 }
\n-
\n-
120
\n-
\n-
125 void setInlierCostThresholds(const Vector& inthVec) {
\n-
126 barcSq_ = inthVec;
\n-
127 }
\n-
\n-
128
\n-
\n-
132 void setInlierCostThresholdsAtProbability(const double alpha) {
\n-
133 barcSq_ = Vector::Ones(nfg_.size()); // initialize
\n-
134 for (size_t k = 0; k < nfg_.size(); k++) {
\n-
135 if (nfg_[k]) {
\n-
136 barcSq_[k] = 0.5 * Chi2inv(alpha, nfg_[k]->dim()); // 0.5 derives from the error definition in gtsam
\n-
137 }
\n-
138 }
\n-
139 }
\n-
\n-
140
\n-
\n-
144 void setWeights(const Vector w) {
\n-
145 if (size_t(w.size()) != nfg_.size()) {
\n-
146 throw std::runtime_error(
\n-
147 "GncOptimizer::setWeights: the number of specified weights"
\n-
148 " does not match the size of the factor graph.");
\n-
149 }
\n-
150 weights_ = w;
\n-
151 }
\n-
\n-
152
\n-
154 const NonlinearFactorGraph& getFactors() const { return nfg_; }
\n+
50public:
\n+
51
\n+\n+\n+
54 typedef boost::shared_ptr<NonlinearConjugateGradientOptimizer> shared_ptr;
\n+
55
\n+
56protected:
\n+
57 Parameters params_;
\n+
58
\n+
59 const NonlinearOptimizerParams& _params() const override {
\n+
60 return params_;
\n+
61 }
\n+
62
\n+
63public:
\n+
64
\n+\n+
67 const Values& initialValues, const Parameters& params = Parameters());
\n+
68
\n+
\n+\n+
71 }
\n+
\n+
72
\n+
77 GaussianFactorGraph::shared_ptr iterate() override;
\n+
78
\n+
83 const Values& optimize() override;
\n+
84};
\n+
\n+
85
\n+
87template<class S, class V, class W>
\n+
\n+
88double lineSearch(const S &system, const V currentValues, const W &gradient) {
\n+
89
\n+
90 /* normalize it such that it becomes a unit vector */
\n+
91 const double g = gradient.norm();
\n+
92
\n+
93 // perform the golden section search algorithm to decide the the optimal step size
\n+
94 // detail refer to http://en.wikipedia.org/wiki/Golden_section_search
\n+
95 const double phi = 0.5 * (1.0 + std::sqrt(5.0)), resphi = 2.0 - phi, tau =
\n+
96 1e-5;
\n+
97 double minStep = -1.0 / g, maxStep = 0, newStep = minStep
\n+
98 + (maxStep - minStep) / (phi + 1.0);
\n+
99
\n+
100 V newValues = system.advance(currentValues, newStep, gradient);
\n+
101 double newError = system.error(newValues);
\n+
102
\n+
103 while (true) {
\n+
104 const bool flag = (maxStep - newStep > newStep - minStep) ? true : false;
\n+
105 const double testStep =
\n+
106 flag ? newStep + resphi * (maxStep - newStep) :
\n+
107 newStep - resphi * (newStep - minStep);
\n+
108
\n+
109 if ((maxStep - minStep)
\n+
110 < tau * (std::abs(testStep) + std::abs(newStep))) {
\n+
111 return 0.5 * (minStep + maxStep);
\n+
112 }
\n+
113
\n+
114 const V testValues = system.advance(currentValues, testStep, gradient);
\n+
115 const double testError = system.error(testValues);
\n+
116
\n+
117 // update the working range
\n+
118 if (testError >= newError) {
\n+
119 if (flag)
\n+
120 maxStep = testStep;
\n+
121 else
\n+
122 minStep = testStep;
\n+
123 } else {
\n+
124 if (flag) {
\n+
125 minStep = newStep;
\n+
126 newStep = testStep;
\n+
127 newError = testError;
\n+
128 } else {
\n+
129 maxStep = newStep;
\n+
130 newStep = testStep;
\n+
131 newError = testError;
\n+
132 }
\n+
133 }
\n+
134 }
\n+
135 return 0.0;
\n+
136}
\n+
\n+
137
\n+
147template<class S, class V>
\n+
\n+
148boost::tuple<V, int> nonlinearConjugateGradient(const S &system,
\n+
149 const V &initial, const NonlinearOptimizerParams &params,
\n+
150 const bool singleIteration, const bool gradientDescent = false) {
\n+
151
\n+
152 // GTSAM_CONCEPT_MANIFOLD_TYPE(V)
\n+
153
\n+
154 size_t iteration = 0;
\n
155
\n-
157 const Values& getState() const { return state_; }
\n-
158
\n-
160 const GncParameters& getParams() const { return params_;}
\n-
161
\n-
163 const Vector& getWeights() const { return weights_;}
\n-
164
\n-
166 const Vector& getInlierCostThresholds() const {return barcSq_;}
\n-
167
\n-
\n-
169 bool equals(const GncOptimizer& other, double tol = 1e-9) const {
\n-
170 return nfg_.equals(other.getFactors())
\n-
171 && equal(weights_, other.getWeights())
\n-
172 && params_.equals(other.getParams())
\n-
173 && equal(barcSq_, other.getInlierCostThresholds());
\n-
174 }
\n-
\n-
175
\n-
176 Vector initializeWeightsFromKnownInliersAndOutliers() const{
\n-
177 Vector weights = Vector::Ones(nfg_.size());
\n-
178 for (size_t i = 0; i < params_.knownOutliers.size(); i++){
\n-
179 weights[ params_.knownOutliers[i] ] = 0.0; // known to be outliers
\n-
180 }
\n-
181 return weights;
\n-
182 }
\n-
183
\n-
\n-\n-
186 NonlinearFactorGraph graph_initial = this->makeWeightedGraph(weights_);
\n-
187 BaseOptimizer baseOptimizer(
\n-
188 graph_initial, state_, params_.baseOptimizerParams);
\n-
189 Values result = baseOptimizer.optimize();
\n-
190 double mu = initializeMu();
\n-
191 double prev_cost = graph_initial.error(result);
\n-
192 double cost = 0.0; // this will be updated in the main loop
\n-
193
\n-
194 // handle the degenerate case that corresponds to small
\n-
195 // maximum residual errors at initialization
\n-
196 // For GM: if residual error is small, mu -> 0
\n-
197 // For TLS: if residual error is small, mu -> -1
\n-
198 int nrUnknownInOrOut = nfg_.size() - ( params_.knownInliers.size() + params_.knownOutliers.size() );
\n-
199 // ^^ number of measurements that are not known to be inliers or outliers (GNC will need to figure them out)
\n-
200 if (mu <= 0 || nrUnknownInOrOut == 0) { // no need to even call GNC in this case
\n-
201 if (mu <= 0 && params_.verbosity >= GncParameters::Verbosity::SUMMARY) {
\n-
202 std::cout << "GNC Optimizer stopped because maximum residual at "
\n-
203 "initialization is small."
\n-
204 << std::endl;
\n-
205 }
\n-
206 if (nrUnknownInOrOut==0 && params_.verbosity >= GncParameters::Verbosity::SUMMARY) {
\n-
207 std::cout << "GNC Optimizer stopped because all measurements are already known to be inliers or outliers"
\n-
208 << std::endl;
\n-
209 }
\n-
210 if (params_.verbosity >= GncParameters::Verbosity::MU) {
\n-
211 std::cout << "mu: " << mu << std::endl;
\n-
212 }
\n-
213 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {
\n-
214 result.print("result\\n");
\n-
215 }
\n-
216 return result;
\n-
217 }
\n-
218
\n-
219 size_t iter;
\n-
220 for (iter = 0; iter < params_.maxIterations; iter++) {
\n-
221
\n-
222 // display info
\n-
223 if (params_.verbosity >= GncParameters::Verbosity::MU) {
\n-
224 std::cout << "iter: " << iter << std::endl;
\n-
225 std::cout << "mu: " << mu << std::endl;
\n-
226 }
\n-
227 if (params_.verbosity >= GncParameters::Verbosity::WEIGHTS) {
\n-
228 std::cout << "weights: " << weights_ << std::endl;
\n-
229 }
\n-
230 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {
\n-
231 result.print("result\\n");
\n-
232 }
\n-
233 // weights update
\n-
234 weights_ = calculateWeights(result, mu);
\n-
235
\n-
236 // variable/values update
\n-
237 NonlinearFactorGraph graph_iter = this->makeWeightedGraph(weights_);
\n-
238 BaseOptimizer baseOptimizer_iter(
\n-
239 graph_iter, state_, params_.baseOptimizerParams);
\n-
240 result = baseOptimizer_iter.optimize();
\n-
241
\n-
242 // stopping condition
\n-
243 cost = graph_iter.error(result);
\n-
244 if (checkConvergence(mu, weights_, cost, prev_cost)) {
\n-
245 break;
\n-
246 }
\n-
247
\n-
248 // update mu
\n-
249 mu = updateMu(mu);
\n-
250
\n-
251 // get ready for next iteration
\n-
252 prev_cost = cost;
\n-
253
\n-
254 // display info
\n-
255 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {
\n-
256 std::cout << "previous cost: " << prev_cost << std::endl;
\n-
257 std::cout << "current cost: " << cost << std::endl;
\n-
258 }
\n-
259 }
\n-
260 // display info
\n-
261 if (params_.verbosity >= GncParameters::Verbosity::SUMMARY) {
\n-
262 std::cout << "final iterations: " << iter << std::endl;
\n-
263 std::cout << "final mu: " << mu << std::endl;
\n-
264 std::cout << "previous cost: " << prev_cost << std::endl;
\n-
265 std::cout << "current cost: " << cost << std::endl;
\n-
266 }
\n-
267 if (params_.verbosity >= GncParameters::Verbosity::WEIGHTS) {
\n-
268 std::cout << "final weights: " << weights_ << std::endl;
\n-
269 }
\n-
270 return result;
\n-
271 }
\n-
\n-
272
\n-
\n-
274 double initializeMu() const {
\n-
275
\n-
276 double mu_init = 0.0;
\n-
277 // initialize mu to the value specified in Remark 5 in GNC paper.
\n-
278 switch (params_.lossType) {
\n-
279 case GncLossType::GM:
\n-
280 /* surrogate cost is convex for large mu. initialize as in remark 5 in GNC paper.
\n-
281 Since barcSq_ can be different for each factor, we compute the max of the quantity in remark 5 in GNC paper
\n-
282 */
\n-
283 for (size_t k = 0; k < nfg_.size(); k++) {
\n-
284 if (nfg_[k]) {
\n-
285 mu_init = std::max(mu_init, 2 * nfg_[k]->error(state_) / barcSq_[k]);
\n-
286 }
\n-
287 }
\n-
288 return mu_init; // initial mu
\n-
289 case GncLossType::TLS:
\n-
290 /* surrogate cost is convex for mu close to zero. initialize as in remark 5 in GNC paper.
\n-
291 degenerate case: 2 * rmax_sq - params_.barcSq < 0 (handled in the main loop)
\n-
292 according to remark mu = params_.barcSq / (2 * rmax_sq - params_.barcSq) = params_.barcSq/ excessResidual
\n-
293 however, if the denominator is 0 or negative, we return mu = -1 which leads to termination of the main GNC loop.
\n-
294 Since barcSq_ can be different for each factor, we look for the minimimum (positive) quantity in remark 5 in GNC paper
\n-
295 */
\n-
296 mu_init = std::numeric_limits<double>::infinity();
\n-
297 for (size_t k = 0; k < nfg_.size(); k++) {
\n-
298 if (nfg_[k]) {
\n-
299 double rk = nfg_[k]->error(state_);
\n-
300 mu_init = (2 * rk - barcSq_[k]) > 0 ? // if positive, update mu, otherwise keep same
\n-
301 std::min(mu_init, barcSq_[k] / (2 * rk - barcSq_[k]) ) : mu_init;
\n-
302 }
\n-
303 }
\n-
304 if (mu_init >= 0 && mu_init < 1e-6){
\n-
305 mu_init = 1e-6; // if mu ~ 0 (but positive), that means we have measurements with large errors,
\n-
306 // i.e., rk > barcSq_[k] and rk very large, hence we threshold to 1e-6 to avoid mu = 0
\n-
307 }
\n-
308
\n-
309 return mu_init > 0 && !std::isinf(mu_init) ? mu_init : -1; // if mu <= 0 or mu = inf, return -1,
\n-
310 // which leads to termination of the main gnc loop. In this case, all residuals are already below the threshold
\n-
311 // and there is no need to robustify (TLS = least squares)
\n-
312 default:
\n-
313 throw std::runtime_error(
\n-
314 "GncOptimizer::initializeMu: called with unknown loss type.");
\n-
315 }
\n-
316 }
\n-
\n-
317
\n-
\n-
319 double updateMu(const double mu) const {
\n-
320 switch (params_.lossType) {
\n-
321 case GncLossType::GM:
\n-
322 // reduce mu, but saturate at 1 (original cost is recovered for mu -> 1)
\n-
323 return std::max(1.0, mu / params_.muStep);
\n-
324 case GncLossType::TLS:
\n-
325 // increases mu at each iteration (original cost is recovered for mu -> inf)
\n-
326 return mu * params_.muStep;
\n-
327 default:
\n-
328 throw std::runtime_error(
\n-
329 "GncOptimizer::updateMu: called with unknown loss type.");
\n-
330 }
\n-
331 }
\n-
\n-
332
\n-
\n-
334 bool checkMuConvergence(const double mu) const {
\n-
335 bool muConverged = false;
\n-
336 switch (params_.lossType) {
\n-
337 case GncLossType::GM:
\n-
338 muConverged = std::fabs(mu - 1.0) < 1e-9; // mu=1 recovers the original GM function
\n-
339 break;
\n-
340 case GncLossType::TLS:
\n-
341 muConverged = false; // for TLS there is no stopping condition on mu (it must tend to infinity)
\n-
342 break;
\n-
343 default:
\n-
344 throw std::runtime_error(
\n-
345 "GncOptimizer::checkMuConvergence: called with unknown loss type.");
\n-
346 }
\n-
347 if (muConverged && params_.verbosity >= GncParameters::Verbosity::SUMMARY)
\n-
348 std::cout << "muConverged = true " << std::endl;
\n-
349 return muConverged;
\n-
350 }
\n-
\n-
351
\n-
\n-
353 bool checkCostConvergence(const double cost, const double prev_cost) const {
\n-
354 bool costConverged = std::fabs(cost - prev_cost) / std::max(prev_cost, 1e-7)
\n-
355 < params_.relativeCostTol;
\n-
356 if (costConverged && params_.verbosity >= GncParameters::Verbosity::SUMMARY){
\n-
357 std::cout << "checkCostConvergence = true (prev. cost = " << prev_cost
\n-
358 << ", curr. cost = " << cost << ")" << std::endl;
\n-
359 }
\n-
360 return costConverged;
\n-
361 }
\n-
\n-
362
\n-
\n-
364 bool checkWeightsConvergence(const Vector& weights) const {
\n-
365 bool weightsConverged = false;
\n-
366 switch (params_.lossType) {
\n-
367 case GncLossType::GM:
\n-
368 weightsConverged = false; // for GM, there is no clear binary convergence for the weights
\n-
369 break;
\n-
370 case GncLossType::TLS:
\n-
371 weightsConverged = true;
\n-
372 for (int i = 0; i < weights.size(); i++) {
\n-
373 if (std::fabs(weights[i] - std::round(weights[i]))
\n-
374 > params_.weightsTol) {
\n-
375 weightsConverged = false;
\n-
376 break;
\n-
377 }
\n-
378 }
\n-
379 break;
\n-
380 default:
\n-
381 throw std::runtime_error(
\n-
382 "GncOptimizer::checkWeightsConvergence: called with unknown loss type.");
\n-
383 }
\n-
384 if (weightsConverged
\n-
385 && params_.verbosity >= GncParameters::Verbosity::SUMMARY)
\n-
386 std::cout << "weightsConverged = true " << std::endl;
\n-
387 return weightsConverged;
\n-
388 }
\n-
\n-
389
\n-
\n-
391 bool checkConvergence(const double mu, const Vector& weights,
\n-
392 const double cost, const double prev_cost) const {
\n-
393 return checkCostConvergence(cost, prev_cost)
\n-\n-
395 }
\n-
\n-
396
\n-
\n-
398 NonlinearFactorGraph makeWeightedGraph(const Vector& weights) const {
\n-
399 // make sure all noiseModels are Gaussian or convert to Gaussian
\n-
400 NonlinearFactorGraph newGraph;
\n-
401 newGraph.resize(nfg_.size());
\n-
402 for (size_t i = 0; i < nfg_.size(); i++) {
\n-
403 if (nfg_[i]) {
\n-
404 auto factor = boost::dynamic_pointer_cast<
\n-
405 NoiseModelFactor>(nfg_[i]);
\n-
406 auto noiseModel =
\n-
407 boost::dynamic_pointer_cast<noiseModel::Gaussian>(
\n-
408 factor->noiseModel());
\n-
409 if (noiseModel) {
\n-
410 Matrix newInfo = weights[i] * noiseModel->information();
\n-
411 auto newNoiseModel = noiseModel::Gaussian::Information(newInfo);
\n-
412 newGraph[i] = factor->cloneWithNewNoiseModel(newNoiseModel);
\n-
413 } else {
\n-
414 throw std::runtime_error(
\n-
415 "GncOptimizer::makeWeightedGraph: unexpected non-Gaussian noise model.");
\n-
416 }
\n-
417 }
\n-
418 }
\n-
419 return newGraph;
\n-
420 }
\n-
\n-
421
\n-
\n-
423 Vector calculateWeights(const Values& currentEstimate, const double mu) {
\n-
424 Vector weights = initializeWeightsFromKnownInliersAndOutliers();
\n-
425
\n-
426 // do not update the weights that the user has decided are known inliers
\n-
427 std::vector<size_t> allWeights;
\n-
428 for (size_t k = 0; k < nfg_.size(); k++) {
\n-
429 allWeights.push_back(k);
\n-
430 }
\n-
431 std::vector<size_t> knownWeights;
\n-
432 std::set_union(params_.knownInliers.begin(), params_.knownInliers.end(),
\n-
433 params_.knownOutliers.begin(), params_.knownOutliers.end(),
\n-
434 std::inserter(knownWeights, knownWeights.begin()));
\n-
435
\n-
436 std::vector<size_t> unknownWeights;
\n-
437 std::set_difference(allWeights.begin(), allWeights.end(),
\n-
438 knownWeights.begin(), knownWeights.end(),
\n-
439 std::inserter(unknownWeights, unknownWeights.begin()));
\n-
440
\n-
441 // update weights of known inlier/outlier measurements
\n-
442 switch (params_.lossType) {
\n-
443 case GncLossType::GM: { // use eq (12) in GNC paper
\n-
444 for (size_t k : unknownWeights) {
\n-
445 if (nfg_[k]) {
\n-
446 double u2_k = nfg_[k]->error(currentEstimate); // squared (and whitened) residual
\n-
447 weights[k] = std::pow(
\n-
448 (mu * barcSq_[k]) / (u2_k + mu * barcSq_[k]), 2);
\n-
449 }
\n-
450 }
\n-
451 return weights;
\n-
452 }
\n-
453 case GncLossType::TLS: { // use eq (14) in GNC paper
\n-
454 for (size_t k : unknownWeights) {
\n-
455 if (nfg_[k]) {
\n-
456 double u2_k = nfg_[k]->error(currentEstimate); // squared (and whitened) residual
\n-
457 double upperbound = (mu + 1) / mu * barcSq_[k];
\n-
458 double lowerbound = mu / (mu + 1) * barcSq_[k];
\n-
459 weights[k] = std::sqrt(barcSq_[k] * mu * (mu + 1) / u2_k) - mu;
\n-
460 if (u2_k >= upperbound || weights[k] < 0) {
\n-
461 weights[k] = 0;
\n-
462 } else if (u2_k <= lowerbound || weights[k] > 1) {
\n-
463 weights[k] = 1;
\n-
464 }
\n-
465 }
\n-
466 }
\n-
467 return weights;
\n-
468 }
\n-
469 default:
\n-
470 throw std::runtime_error(
\n-
471 "GncOptimizer::calculateWeights: called with unknown loss type.");
\n-
472 }
\n-
473 }
\n-
\n-
474};
\n-
\n-
475
\n-
476}
\n-
Factor Graph consisting of non-linear factors.
\n+
156 // check if we're already close enough
\n+
157 double currentError = system.error(initial);
\n+
158 if (currentError <= params.errorTol) {
\n+
159 if (params.verbosity >= NonlinearOptimizerParams::ERROR) {
\n+
160 std::cout << "Exiting, as error = " << currentError << " < "
\n+
161 << params.errorTol << std::endl;
\n+
162 }
\n+
163 return boost::tie(initial, iteration);
\n+
164 }
\n+
165
\n+
166 V currentValues = initial;
\n+
167 typename S::Gradient currentGradient = system.gradient(currentValues),
\n+
168 prevGradient, direction = currentGradient;
\n+
169
\n+
170 /* do one step of gradient descent */
\n+
171 V prevValues = currentValues;
\n+
172 double prevError = currentError;
\n+
173 double alpha = lineSearch(system, currentValues, direction);
\n+
174 currentValues = system.advance(prevValues, alpha, direction);
\n+
175 currentError = system.error(currentValues);
\n+
176
\n+
177 // Maybe show output
\n+
178 if (params.verbosity >= NonlinearOptimizerParams::ERROR)
\n+
179 std::cout << "Initial error: " << currentError << std::endl;
\n+
180
\n+
181 // Iterative loop
\n+
182 do {
\n+
183 if (gradientDescent == true) {
\n+
184 direction = system.gradient(currentValues);
\n+
185 } else {
\n+
186 prevGradient = currentGradient;
\n+
187 currentGradient = system.gradient(currentValues);
\n+
188 // Polak-Ribiere: beta = g'*(g_n-g_n-1)/g_n-1'*g_n-1
\n+
189 const double beta = std::max(0.0,
\n+
190 currentGradient.dot(currentGradient - prevGradient)
\n+
191 / prevGradient.dot(prevGradient));
\n+
192 direction = currentGradient + (beta * direction);
\n+
193 }
\n+
194
\n+
195 alpha = lineSearch(system, currentValues, direction);
\n+
196
\n+
197 prevValues = currentValues;
\n+
198 prevError = currentError;
\n+
199
\n+
200 currentValues = system.advance(prevValues, alpha, direction);
\n+
201 currentError = system.error(currentValues);
\n+
202
\n+
203 // User hook:
\n+
204 if (params.iterationHook)
\n+
205 params.iterationHook(iteration, prevError, currentError);
\n+
206
\n+
207 // Maybe show output
\n+
208 if (params.verbosity >= NonlinearOptimizerParams::ERROR)
\n+
209 std::cout << "iteration: " << iteration << ", currentError: " << currentError << std::endl;
\n+
210 } while (++iteration < params.maxIterations && !singleIteration
\n+\n+
212 params.errorTol, prevError, currentError, params.verbosity));
\n+
213
\n+
214 // Printing if verbose
\n+
215 if (params.verbosity >= NonlinearOptimizerParams::ERROR
\n+
216 && iteration >= params.maxIterations)
\n+
217 std::cout
\n+
218 << "nonlinearConjugateGradient: Terminating because reached maximum iterations"
\n+
219 << std::endl;
\n+
220
\n+
221 return boost::tie(currentValues, iteration);
\n+
222}
\n+
\n+
223
\n+
224} // \\ namespace gtsam
\n+
225
\n+
Base class and basic functions for Manifold types.
\n+
Base class and parameters for nonlinear optimization algorithms.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
bool equal(const T &obj1, const T &obj2, double tol)
Call equal on the object.
Definition Testable.h:84
\n-
virtual void resize(size_t size)
Directly resize the number of factors in the graph.
Definition FactorGraph.h:381
\n-
size_t size() const
return the number of factors (including any null factors set by remove() ).
Definition FactorGraph.h:326
\n-
static shared_ptr Information(const Matrix &M, bool smart=true)
A Gaussian noise model created by specifying an information matrix.
Definition NoiseModel.cpp:100
\n-
Base class for robust error models The robust M-estimators above simply tell us how to re-weight the ...
Definition NoiseModel.h:642
\n-
Definition GncOptimizer.h:45
\n-
bool checkWeightsConvergence(const Vector &weights) const
Check convergence of weights to binary values.
Definition GncOptimizer.h:364
\n-
void setWeights(const Vector w)
Set weights for each factor.
Definition GncOptimizer.h:144
\n-
bool checkMuConvergence(const double mu) const
Check if we have reached the value of mu for which the surrogate loss matches the original loss.
Definition GncOptimizer.h:334
\n-
GncParameters::OptimizerType BaseOptimizer
For each parameter, specify the corresponding optimizer: e.g., GaussNewtonParams -> GaussNewtonOptimi...
Definition GncOptimizer.h:48
\n-
Values optimize()
Compute optimal solution using graduated non-convexity.
Definition GncOptimizer.h:185
\n-
const Vector & getInlierCostThresholds() const
Get the inlier threshold.
Definition GncOptimizer.h:166
\n-
bool checkCostConvergence(const double cost, const double prev_cost) const
Check convergence of relative cost differences.
Definition GncOptimizer.h:353
\n-
const Values & getState() const
Access a copy of the internal values.
Definition GncOptimizer.h:157
\n-
void setInlierCostThresholds(const Vector &inthVec)
Set the maximum weighted residual error for an inlier (one for each factor).
Definition GncOptimizer.h:125
\n-
Vector calculateWeights(const Values &currentEstimate, const double mu)
Calculate gnc weights.
Definition GncOptimizer.h:423
\n-
double initializeMu() const
Initialize the gnc parameter mu such that loss is approximately convex (remark 5 in GNC paper).
Definition GncOptimizer.h:274
\n-
double updateMu(const double mu) const
Update the gnc parameter mu to gradually increase nonconvexity.
Definition GncOptimizer.h:319
\n-
bool equals(const GncOptimizer &other, double tol=1e-9) const
Equals.
Definition GncOptimizer.h:169
\n-
bool checkConvergence(const double mu, const Vector &weights, const double cost, const double prev_cost) const
Check for convergence between consecutive GNC iterations.
Definition GncOptimizer.h:391
\n-
void setInlierCostThresholds(const double inth)
Set the maximum weighted residual error for an inlier (same for all factors).
Definition GncOptimizer.h:117
\n-
void setInlierCostThresholdsAtProbability(const double alpha)
Set the maximum weighted residual error threshold by specifying the probability alpha that the inlier...
Definition GncOptimizer.h:132
\n-
NonlinearFactorGraph makeWeightedGraph(const Vector &weights) const
Create a graph where each factor is weighted by the gnc weights.
Definition GncOptimizer.h:398
\n-
const NonlinearFactorGraph & getFactors() const
Access a copy of the internal factor graph.
Definition GncOptimizer.h:154
\n-
const Vector & getWeights() const
Access a copy of the GNC weights.
Definition GncOptimizer.h:163
\n-
const GncParameters & getParams() const
Access a copy of the parameters.
Definition GncOptimizer.h:160
\n-
GncOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues, const GncParameters &params=GncParameters())
Constructor.
Definition GncOptimizer.h:59
\n-
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n-
boost::shared_ptr< This > shared_ptr
Noise model.
Definition NonlinearFactor.h:186
\n+
double lineSearch(const S &system, const V currentValues, const W &gradient)
Implement the golden-section line search algorithm.
Definition NonlinearConjugateGradientOptimizer.h:88
\n+
bool checkConvergence(double relativeErrorTreshold, double absoluteErrorTreshold, double errorThreshold, double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity)
Check whether the relative error decrease is less than relativeErrorTreshold, the absolute error decr...
Definition NonlinearOptimizer.cpp:185
\n+
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n+
boost::tuple< V, int > nonlinearConjugateGradient(const S &system, const V &initial, const NonlinearOptimizerParams &params, const bool singleIteration, const bool gradientDescent=false)
Implement the nonlinear conjugate gradient method using the Polak-Ribiere formula suggested in http:/...
Definition NonlinearConjugateGradientOptimizer.h:148
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
An implementation of the nonlinear CG method using the template below.
Definition NonlinearConjugateGradientOptimizer.h:28
\n+
~NonlinearConjugateGradientOptimizer() override
Destructor.
Definition NonlinearConjugateGradientOptimizer.h:70
\n
Definition NonlinearFactorGraph.h:55
\n-
bool equals(const NonlinearFactorGraph &other, double tol=1e-9) const
Test equality.
Definition NonlinearFactorGraph.cpp:97
\n-
double error(const Values &values) const
unnormalized error, in the most common case
Definition NonlinearFactorGraph.cpp:170
\n+
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition NonlinearOptimizer.h:75
\n+
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n+
double absoluteErrorTol
The maximum absolute error decrease to stop iterating (default 1e-5)
Definition NonlinearOptimizerParams.h:43
\n+
IterationHook iterationHook
Optional user-provided iteration hook to be called after each optimization iteration (Default: none).
Definition NonlinearOptimizerParams.h:94
\n+
size_t maxIterations
The maximum iterations to stop iterating (default 100)
Definition NonlinearOptimizerParams.h:41
\n+
Verbosity verbosity
The printing verbosity during optimization (default SILENT)
Definition NonlinearOptimizerParams.h:45
\n+
double relativeErrorTol
The maximum relative error decrease to stop iterating (default 1e-5)
Definition NonlinearOptimizerParams.h:42
\n+
double errorTol
The maximum total error to stop iterating (default 0.0)
Definition NonlinearOptimizerParams.h:44
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,616 +1,298 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GncOptimizer.h\n+NonlinearConjugateGradientOptimizer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-27#pragma once\n-28\n-29#include \n-30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-31#include \n-32\n-33namespace _\bg_\bt_\bs_\ba_\bm {\n-34/*\n-35 * Quantile of chi-squared distribution with given degrees of freedom at\n-probability alpha.\n-36 * Equivalent to chi2inv in Matlab.\n-37 */\n-38static double Chi2inv(const double alpha, const size_t dofs) {\n-39 boost::math::chi_squared_distribution chi2(dofs);\n-40 return boost::math::quantile(chi2, alpha);\n-41}\n-42\n-43/* *************************************************************************\n-*/\n-44template\n-_\b4_\b5class _\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n-46 public:\n-_\b4_\b8 typedef typename GncParameters::OptimizerType _\bB_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br;\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n+23#include \n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+_\b2_\b8class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br : public\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n+29\n+30 /* a class for the nonlinearConjugateGradient template */\n+31 class System {\n+32 public:\n+33 typedef _\bV_\ba_\bl_\bu_\be_\bs State;\n+34 typedef _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs Gradient;\n+35 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs;\n+36\n+37 protected:\n+38 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph_;\n+39\n+40 public:\n+41 System(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph) :\n+42 graph_(graph) {\n+43 }\n+44 double error(const State &state) const;\n+45 Gradient gradient(const State &state) const;\n+46 State advance(const State ¤t, const double alpha,\n+47 const Gradient &g) const;\n+48 };\n 49\n-50 private:\n-51 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh nfg_;\n-52 _\bV_\ba_\bl_\bu_\be_\bs state_;\n-53 GncParameters params_;\n-54 Vector weights_;\n-55 Vector barcSq_;\n-56\n-57 public:\n-_\b5_\b9 _\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs& initialValues,\n-60 const GncParameters& params = GncParameters())\n-61 : state_(initialValues),\n-62 params_(params) {\n-63\n-64 // make sure all noiseModels are Gaussian or convert to Gaussian\n-65 nfg_._\br_\be_\bs_\bi_\bz_\be(graph.size());\n-66 for (size_t i = 0; i < graph.size(); i++) {\n-67 if (graph[i]) {\n-68 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br factor = boost::dynamic_pointer_cast<\n-69 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br>(graph[i]);\n-70 auto robust = boost::dynamic_pointer_cast<\n-71 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt>(factor->noiseModel());\n-72 // if the factor has a robust loss, we remove the robust loss\n-73 nfg_[i] = robust ? factor-> cloneWithNewNoiseModel(robust->noise()) :\n-factor;\n-74 }\n-75 }\n-76\n-77 // check that known inliers and outliers make sense:\n-78 std::vector inconsistentlySpecifiedWeights; // measurements the user\n-has incorrectly specified\n-79 // to be BOTH known inliers and known outliers\n-80 std::set_intersection(params.knownInliers.begin(),params.knownInliers.end(),\n-81 params.knownOutliers.begin(),params.knownOutliers.end(),\n-82 std::inserter(inconsistentlySpecifiedWeights,\n-inconsistentlySpecifiedWeights.begin()));\n-83 if(inconsistentlySpecifiedWeights.size() > 0){ // if we have inconsistently\n-specified weights, we throw an exception\n-84 params.print(\"params\\n\");\n-85 throw std::runtime_error(\"GncOptimizer::constructor: the user has selected\n-one or more measurements\"\n-86 \" to be BOTH a known inlier and a known outlier.\");\n-87 }\n-88 // check that known inliers are in the graph\n-89 for (size_t i = 0; i < params.knownInliers.size(); i++){\n-90 if( params.knownInliers[i] > nfg_._\bs_\bi_\bz_\be()-1 ){ // outside graph\n-91 throw std::runtime_error(\"GncOptimizer::constructor: the user has selected\n-one or more measurements\"\n-92 \"that are not in the factor graph to be known inliers.\");\n-93 }\n-94 }\n-95 // check that known outliers are in the graph\n-96 for (size_t i = 0; i < params.knownOutliers.size(); i++){\n-97 if( params.knownOutliers[i] > nfg_._\bs_\bi_\bz_\be()-1 ){ // outside graph\n-98 throw std::runtime_error(\"GncOptimizer::constructor: the user has selected\n-one or more measurements\"\n-99 \"that are not in the factor graph to be known outliers.\");\n-100 }\n-101 }\n-102 // initialize weights (if we don't have prior knowledge of inliers/outliers\n-103 // the weights are all initialized to 1.\n-104 weights_ = initializeWeightsFromKnownInliersAndOutliers();\n-105\n-106 // set default barcSq_ (inlier threshold)\n-107 double alpha = 0.99; // with this (default) probability, inlier residuals\n-are smaller than barcSq_\n-108 _\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs_\bA_\bt_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(alpha);\n-109 }\n-110\n-_\b1_\b1_\b7 void _\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs(const double inth) {\n-118 barcSq_ = inth * Vector::Ones(nfg_._\bs_\bi_\bz_\be());\n-119 }\n-120\n-_\b1_\b2_\b5 void _\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs(const Vector& inthVec) {\n-126 barcSq_ = inthVec;\n-127 }\n-128\n-_\b1_\b3_\b2 void _\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs_\bA_\bt_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(const double alpha) {\n-133 barcSq_ = Vector::Ones(nfg_._\bs_\bi_\bz_\be()); // initialize\n-134 for (size_t k = 0; k < nfg_._\bs_\bi_\bz_\be(); k++) {\n-135 if (nfg_[k]) {\n-136 barcSq_[k] = 0.5 * Chi2inv(alpha, nfg_[k]->dim()); // 0.5 derives from the\n-error definition in gtsam\n-137 }\n-138 }\n-139 }\n-140\n-_\b1_\b4_\b4 void _\bs_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs(const Vector w) {\n-145 if (size_t(w.size()) != nfg_._\bs_\bi_\bz_\be()) {\n-146 throw std::runtime_error(\n-147 \"GncOptimizer::setWeights: the number of specified weights\"\n-148 \" does not match the size of the factor graph.\");\n-149 }\n-150 weights_ = w;\n-151 }\n-152\n-_\b1_\b5_\b4 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs() const { return nfg_; }\n-155\n-_\b1_\b5_\b7 const _\bV_\ba_\bl_\bu_\be_\bs& _\bg_\be_\bt_\bS_\bt_\ba_\bt_\be() const { return state_; }\n-158\n-_\b1_\b6_\b0 const GncParameters& _\bg_\be_\bt_\bP_\ba_\br_\ba_\bm_\bs() const { return params_;}\n-161\n-_\b1_\b6_\b3 const Vector& _\bg_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs() const { return weights_;}\n-164\n-_\b1_\b6_\b6 const Vector& _\bg_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs() const {return barcSq_;}\n-167\n-_\b1_\b6_\b9 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br& other, double tol = 1e-9) const {\n-170 return nfg_._\be_\bq_\bu_\ba_\bl_\bs(other._\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs())\n-171 && _\be_\bq_\bu_\ba_\bl(weights_, other._\bg_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs())\n-172 && params_.equals(other._\bg_\be_\bt_\bP_\ba_\br_\ba_\bm_\bs())\n-173 && _\be_\bq_\bu_\ba_\bl(barcSq_, other._\bg_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs());\n-174 }\n-175\n-176 Vector initializeWeightsFromKnownInliersAndOutliers() const{\n-177 Vector weights = Vector::Ones(nfg_._\bs_\bi_\bz_\be());\n-178 for (size_t i = 0; i < params_.knownOutliers.size(); i++){\n-179 weights[ params_.knownOutliers[i] ] = 0.0; // known to be outliers\n-180 }\n-181 return weights;\n-182 }\n-183\n-_\b1_\b8_\b5 _\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() {\n-186 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph_initial = this->_\bm_\ba_\bk_\be_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bG_\br_\ba_\bp_\bh(weights_);\n-187 _\bB_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br baseOptimizer(\n-188 graph_initial, state_, params_.baseOptimizerParams);\n-189 _\bV_\ba_\bl_\bu_\be_\bs result = baseOptimizer.optimize();\n-190 double mu = _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bM_\bu();\n-191 double prev_cost = graph_initial._\be_\br_\br_\bo_\br(result);\n-192 double cost = 0.0; // this will be updated in the main loop\n-193\n-194 // handle the degenerate case that corresponds to small\n-195 // maximum residual errors at initialization\n-196 // For GM: if residual error is small, mu -> 0\n-197 // For TLS: if residual error is small, mu -> -1\n-198 int nrUnknownInOrOut = nfg_._\bs_\bi_\bz_\be() - ( params_.knownInliers.size() +\n-params_.knownOutliers.size() );\n-199 // ^^ number of measurements that are not known to be inliers or outliers\n-(GNC will need to figure them out)\n-200 if (mu <= 0 || nrUnknownInOrOut == 0) { // no need to even call GNC in this\n-case\n-201 if (mu <= 0 && params_.verbosity >= GncParameters::Verbosity::SUMMARY) {\n-202 std::cout << \"GNC Optimizer stopped because maximum residual at \"\n-203 \"initialization is small.\"\n-204 << std::endl;\n-205 }\n-206 if (nrUnknownInOrOut==0 && params_.verbosity >= GncParameters::Verbosity::\n-SUMMARY) {\n-207 std::cout << \"GNC Optimizer stopped because all measurements are already\n-known to be inliers or outliers\"\n-208 << std::endl;\n-209 }\n-210 if (params_.verbosity >= GncParameters::Verbosity::MU) {\n-211 std::cout << \"mu: \" << mu << std::endl;\n-212 }\n-213 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {\n-214 result.print(\"result\\n\");\n-215 }\n-216 return result;\n-217 }\n-218\n-219 size_t iter;\n-220 for (iter = 0; iter < params_.maxIterations; iter++) {\n-221\n-222 // display info\n-223 if (params_.verbosity >= GncParameters::Verbosity::MU) {\n-224 std::cout << \"iter: \" << iter << std::endl;\n-225 std::cout << \"mu: \" << mu << std::endl;\n-226 }\n-227 if (params_.verbosity >= GncParameters::Verbosity::WEIGHTS) {\n-228 std::cout << \"weights: \" << weights_ << std::endl;\n-229 }\n-230 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {\n-231 result.print(\"result\\n\");\n-232 }\n-233 // weights update\n-234 weights_ = _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(result, mu);\n-235\n-236 // variable/values update\n-237 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph_iter = this->_\bm_\ba_\bk_\be_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bG_\br_\ba_\bp_\bh(weights_);\n-238 _\bB_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br baseOptimizer_iter(\n-239 graph_iter, state_, params_.baseOptimizerParams);\n-240 result = baseOptimizer_iter.optimize();\n-241\n-242 // stopping condition\n-243 cost = graph_iter._\be_\br_\br_\bo_\br(result);\n-244 if (_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(mu, weights_, cost, prev_cost)) {\n-245 break;\n-246 }\n-247\n-248 // update mu\n-249 mu = _\bu_\bp_\bd_\ba_\bt_\be_\bM_\bu(mu);\n-250\n-251 // get ready for next iteration\n-252 prev_cost = cost;\n-253\n-254 // display info\n-255 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {\n-256 std::cout << \"previous cost: \" << prev_cost << std::endl;\n-257 std::cout << \"current cost: \" << cost << std::endl;\n-258 }\n-259 }\n-260 // display info\n-261 if (params_.verbosity >= GncParameters::Verbosity::SUMMARY) {\n-262 std::cout << \"final iterations: \" << iter << std::endl;\n-263 std::cout << \"final mu: \" << mu << std::endl;\n-264 std::cout << \"previous cost: \" << prev_cost << std::endl;\n-265 std::cout << \"current cost: \" << cost << std::endl;\n-266 }\n-267 if (params_.verbosity >= GncParameters::Verbosity::WEIGHTS) {\n-268 std::cout << \"final weights: \" << weights_ << std::endl;\n-269 }\n-270 return result;\n-271 }\n-272\n-_\b2_\b7_\b4 double _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bM_\bu() const {\n-275\n-276 double mu_init = 0.0;\n-277 // initialize mu to the value specified in Remark 5 in GNC paper.\n-278 switch (params_.lossType) {\n-279 case GncLossType::GM:\n-280 /* surrogate cost is convex for large mu. initialize as in remark 5 in GNC\n-paper.\n-281 Since barcSq_ can be different for each factor, we compute the max of the\n-quantity in remark 5 in GNC paper\n-282 */\n-283 for (size_t k = 0; k < nfg_._\bs_\bi_\bz_\be(); k++) {\n-284 if (nfg_[k]) {\n-285 mu_init = std::max(mu_init, 2 * nfg_[k]->error(state_) / barcSq_[k]);\n-286 }\n-287 }\n-288 return mu_init; // initial mu\n-289 case GncLossType::TLS:\n-290 /* surrogate cost is convex for mu close to zero. initialize as in remark 5\n-in GNC paper.\n-291 degenerate case: 2 * rmax_sq - params_.barcSq < 0 (handled in the main\n-loop)\n-292 according to remark mu = params_.barcSq / (2 * rmax_sq - params_.barcSq) =\n-params_.barcSq/ excessResidual\n-293 however, if the denominator is 0 or negative, we return mu = -1 which leads\n-to termination of the main GNC loop.\n-294 Since barcSq_ can be different for each factor, we look for the minimimum\n-(positive) quantity in remark 5 in GNC paper\n-295 */\n-296 mu_init = std::numeric_limits::infinity();\n-297 for (size_t k = 0; k < nfg_._\bs_\bi_\bz_\be(); k++) {\n-298 if (nfg_[k]) {\n-299 double rk = nfg_[k]->_\be_\br_\br_\bo_\br(state_);\n-300 mu_init = (2 * rk - barcSq_[k]) > 0 ? // if positive, update mu, otherwise\n-keep same\n-301 std::min(mu_init, barcSq_[k] / (2 * rk - barcSq_[k]) ) : mu_init;\n-302 }\n-303 }\n-304 if (mu_init >= 0 && mu_init < 1e-6){\n-305 mu_init = 1e-6; // if mu ~ 0 (but positive), that means we have\n-measurements with large errors,\n-306 // i.e., rk > barcSq_[k] and rk very large, hence we threshold to 1e-6 to\n-avoid mu = 0\n-307 }\n-308\n-309 return mu_init > 0 && !std::isinf(mu_init) ? mu_init : -1; // if mu <= 0 or\n-mu = inf, return -1,\n-310 // which leads to termination of the main gnc loop. In this case, all\n-residuals are already below the threshold\n-311 // and there is no need to robustify (TLS = least squares)\n-312 default:\n-313 throw std::runtime_error(\n-314 \"GncOptimizer::initializeMu: called with unknown loss type.\");\n-315 }\n-316 }\n-317\n-_\b3_\b1_\b9 double _\bu_\bp_\bd_\ba_\bt_\be_\bM_\bu(const double mu) const {\n-320 switch (params_.lossType) {\n-321 case GncLossType::GM:\n-322 // reduce mu, but saturate at 1 (original cost is recovered for mu -> 1)\n-323 return std::max(1.0, mu / params_.muStep);\n-324 case GncLossType::TLS:\n-325 // increases mu at each iteration (original cost is recovered for mu -\n-> inf)\n-326 return mu * params_.muStep;\n-327 default:\n-328 throw std::runtime_error(\n-329 \"GncOptimizer::updateMu: called with unknown loss type.\");\n-330 }\n-331 }\n-332\n-_\b3_\b3_\b4 bool _\bc_\bh_\be_\bc_\bk_\bM_\bu_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(const double mu) const {\n-335 bool muConverged = false;\n-336 switch (params_.lossType) {\n-337 case GncLossType::GM:\n-338 muConverged = std::fabs(mu - 1.0) < 1e-9; // mu=1 recovers the original GM\n-function\n-339 break;\n-340 case GncLossType::TLS:\n-341 muConverged = false; // for TLS there is no stopping condition on mu (it\n-must tend to infinity)\n-342 break;\n-343 default:\n-344 throw std::runtime_error(\n-345 \"GncOptimizer::checkMuConvergence: called with unknown loss type.\");\n-346 }\n-347 if (muConverged && params_.verbosity >= GncParameters::Verbosity::SUMMARY)\n-348 std::cout << \"muConverged = true \" << std::endl;\n-349 return muConverged;\n-350 }\n-351\n-_\b3_\b5_\b3 bool _\bc_\bh_\be_\bc_\bk_\bC_\bo_\bs_\bt_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(const double cost, const double prev_cost) const\n+50public:\n+51\n+52 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br _\bB_\ba_\bs_\be;\n+53 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs;\n+54 typedef boost::shared_ptr shared_ptr;\n+55\n+56protected:\n+57 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs params_;\n+58\n+59 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& _params() const override {\n+60 return params_;\n+61 }\n+62\n+63public:\n+64\n+66 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n+67 const _\bV_\ba_\bl_\bu_\be_\bs& initialValues, const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs& params = _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs());\n+68\n+_\b7_\b0 _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br() override {\n+71 }\n+72\n+77 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br iterate() override;\n+78\n+83 const _\bV_\ba_\bl_\bu_\be_\bs& _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() override;\n+84};\n+85\n+87template\n+_\b8_\b8double _\bl_\bi_\bn_\be_\bS_\be_\ba_\br_\bc_\bh(const S &system, const V currentValues, const W &gradient)\n {\n-354 bool costConverged = std::fabs(cost - prev_cost) / std::max(prev_cost, 1e-\n-7)\n-355 < params_.relativeCostTol;\n-356 if (costConverged && params_.verbosity >= GncParameters::Verbosity::\n-SUMMARY){\n-357 std::cout << \"checkCostConvergence = true (prev. cost = \" << prev_cost\n-358 << \", curr. cost = \" << cost << \")\" << std::endl;\n-359 }\n-360 return costConverged;\n-361 }\n-362\n-_\b3_\b6_\b4 bool _\bc_\bh_\be_\bc_\bk_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(const Vector& weights) const {\n-365 bool weightsConverged = false;\n-366 switch (params_.lossType) {\n-367 case GncLossType::GM:\n-368 weightsConverged = false; // for GM, there is no clear binary convergence\n-for the weights\n-369 break;\n-370 case GncLossType::TLS:\n-371 weightsConverged = true;\n-372 for (int i = 0; i < weights.size(); i++) {\n-373 if (std::fabs(weights[i] - std::round(weights[i]))\n-374 > params_.weightsTol) {\n-375 weightsConverged = false;\n-376 break;\n-377 }\n-378 }\n-379 break;\n-380 default:\n-381 throw std::runtime_error(\n-382 \"GncOptimizer::checkWeightsConvergence: called with unknown loss type.\");\n-383 }\n-384 if (weightsConverged\n-385 && params_.verbosity >= GncParameters::Verbosity::SUMMARY)\n-386 std::cout << \"weightsConverged = true \" << std::endl;\n-387 return weightsConverged;\n-388 }\n-389\n-_\b3_\b9_\b1 bool _\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(const double mu, const Vector& weights,\n-392 const double cost, const double prev_cost) const {\n-393 return _\bc_\bh_\be_\bc_\bk_\bC_\bo_\bs_\bt_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(cost, prev_cost)\n-394 || _\bc_\bh_\be_\bc_\bk_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(weights) || _\bc_\bh_\be_\bc_\bk_\bM_\bu_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(mu);\n-395 }\n-396\n-_\b3_\b9_\b8 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bm_\ba_\bk_\be_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bG_\br_\ba_\bp_\bh(const Vector& weights) const {\n-399 // make sure all noiseModels are Gaussian or convert to Gaussian\n-400 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh newGraph;\n-401 newGraph._\br_\be_\bs_\bi_\bz_\be(nfg_._\bs_\bi_\bz_\be());\n-402 for (size_t i = 0; i < nfg_._\bs_\bi_\bz_\be(); i++) {\n-403 if (nfg_[i]) {\n-404 auto factor = boost::dynamic_pointer_cast<\n-405 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br>(nfg_[i]);\n-406 auto noiseModel =\n-407 boost::dynamic_pointer_cast(\n-408 factor->noiseModel());\n-409 if (noiseModel) {\n-410 Matrix newInfo = weights[i] * noiseModel->information();\n-411 auto newNoiseModel = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn(newInfo);\n-412 newGraph[i] = factor->cloneWithNewNoiseModel(newNoiseModel);\n-413 } else {\n-414 throw std::runtime_error(\n-415 \"GncOptimizer::makeWeightedGraph: unexpected non-Gaussian noise model.\");\n-416 }\n-417 }\n-418 }\n-419 return newGraph;\n-420 }\n-421\n-_\b4_\b2_\b3 Vector _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& currentEstimate, const double mu) {\n-424 Vector weights = initializeWeightsFromKnownInliersAndOutliers();\n-425\n-426 // do not update the weights that the user has decided are known inliers\n-427 std::vector allWeights;\n-428 for (size_t k = 0; k < nfg_._\bs_\bi_\bz_\be(); k++) {\n-429 allWeights.push_back(k);\n-430 }\n-431 std::vector knownWeights;\n-432 std::set_union(params_.knownInliers.begin(), params_.knownInliers.end(),\n-433 params_.knownOutliers.begin(), params_.knownOutliers.end(),\n-434 std::inserter(knownWeights, knownWeights.begin()));\n-435\n-436 std::vector unknownWeights;\n-437 std::set_difference(allWeights.begin(), allWeights.end(),\n-438 knownWeights.begin(), knownWeights.end(),\n-439 std::inserter(unknownWeights, unknownWeights.begin()));\n-440\n-441 // update weights of known inlier/outlier measurements\n-442 switch (params_.lossType) {\n-443 case GncLossType::GM: { // use eq (12) in GNC paper\n-444 for (size_t k : unknownWeights) {\n-445 if (nfg_[k]) {\n-446 double u2_k = nfg_[k]->_\be_\br_\br_\bo_\br(currentEstimate); // squared (and whitened)\n-residual\n-447 weights[k] = std::pow(\n-448 (mu * barcSq_[k]) / (u2_k + mu * barcSq_[k]), 2);\n-449 }\n-450 }\n-451 return weights;\n-452 }\n-453 case GncLossType::TLS: { // use eq (14) in GNC paper\n-454 for (size_t k : unknownWeights) {\n-455 if (nfg_[k]) {\n-456 double u2_k = nfg_[k]->_\be_\br_\br_\bo_\br(currentEstimate); // squared (and whitened)\n-residual\n-457 double upperbound = (mu + 1) / mu * barcSq_[k];\n-458 double lowerbound = mu / (mu + 1) * barcSq_[k];\n-459 weights[k] = std::sqrt(barcSq_[k] * mu * (mu + 1) / u2_k) - mu;\n-460 if (u2_k >= upperbound || weights[k] < 0) {\n-461 weights[k] = 0;\n-462 } else if (u2_k <= lowerbound || weights[k] > 1) {\n-463 weights[k] = 1;\n-464 }\n-465 }\n-466 }\n-467 return weights;\n-468 }\n-469 default:\n-470 throw std::runtime_error(\n-471 \"GncOptimizer::calculateWeights: called with unknown loss type.\");\n-472 }\n-473 }\n-474};\n-475\n-476}\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n+89\n+90 /* normalize it such that it becomes a unit vector */\n+91 const double g = gradient.norm();\n+92\n+93 // perform the golden section search algorithm to decide the the optimal\n+step size\n+94 // detail refer to http://en.wikipedia.org/wiki/Golden_section_search\n+95 const double phi = 0.5 * (1.0 + std::sqrt(5.0)), resphi = 2.0 - phi, tau =\n+96 1e-5;\n+97 double minStep = -1.0 / g, maxStep = 0, newStep = minStep\n+98 + (maxStep - minStep) / (phi + 1.0);\n+99\n+100 V newValues = system.advance(currentValues, newStep, gradient);\n+101 double newError = system.error(newValues);\n+102\n+103 while (true) {\n+104 const bool flag = (maxStep - newStep > newStep - minStep) ? true : false;\n+105 const double testStep =\n+106 flag ? newStep + resphi * (maxStep - newStep) :\n+107 newStep - resphi * (newStep - minStep);\n+108\n+109 if ((maxStep - minStep)\n+110 < tau * (std::abs(testStep) + std::abs(newStep))) {\n+111 return 0.5 * (minStep + maxStep);\n+112 }\n+113\n+114 const V testValues = system.advance(currentValues, testStep, gradient);\n+115 const double testError = system.error(testValues);\n+116\n+117 // update the working range\n+118 if (testError >= newError) {\n+119 if (flag)\n+120 maxStep = testStep;\n+121 else\n+122 minStep = testStep;\n+123 } else {\n+124 if (flag) {\n+125 minStep = newStep;\n+126 newStep = testStep;\n+127 newError = testError;\n+128 } else {\n+129 maxStep = newStep;\n+130 newStep = testStep;\n+131 newError = testError;\n+132 }\n+133 }\n+134 }\n+135 return 0.0;\n+136}\n+137\n+147template\n+_\b1_\b4_\b8boost::tuple _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt(const S &system,\n+149 const V &initial, const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs ¶ms,\n+150 const bool singleIteration, const bool gradientDescent = false) {\n+151\n+152 // GTSAM_CONCEPT_MANIFOLD_TYPE(V)\n+153\n+154 size_t iteration = 0;\n+155\n+156 // check if we're already close enough\n+157 double currentError = system.error(initial);\n+158 if (currentError <= params._\be_\br_\br_\bo_\br_\bT_\bo_\bl) {\n+159 if (params._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by >= NonlinearOptimizerParams::ERROR) {\n+160 std::cout << \"Exiting, as error = \" << currentError << \" < \"\n+161 << params._\be_\br_\br_\bo_\br_\bT_\bo_\bl << std::endl;\n+162 }\n+163 return boost::tie(initial, iteration);\n+164 }\n+165\n+166 V currentValues = initial;\n+167 typename S::Gradient currentGradient = system.gradient(currentValues),\n+168 prevGradient, direction = currentGradient;\n+169\n+170 /* do one step of gradient descent */\n+171 V prevValues = currentValues;\n+172 double prevError = currentError;\n+173 double alpha = _\bl_\bi_\bn_\be_\bS_\be_\ba_\br_\bc_\bh(system, currentValues, direction);\n+174 currentValues = system.advance(prevValues, alpha, direction);\n+175 currentError = system.error(currentValues);\n+176\n+177 // Maybe show output\n+178 if (params._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by >= NonlinearOptimizerParams::ERROR)\n+179 std::cout << \"Initial error: \" << currentError << std::endl;\n+180\n+181 // Iterative loop\n+182 do {\n+183 if (gradientDescent == true) {\n+184 direction = system.gradient(currentValues);\n+185 } else {\n+186 prevGradient = currentGradient;\n+187 currentGradient = system.gradient(currentValues);\n+188 // Polak-Ribiere: beta = g'*(g_n-g_n-1)/g_n-1'*g_n-1\n+189 const double beta = std::max(0.0,\n+190 currentGradient.dot(currentGradient - prevGradient)\n+191 / prevGradient.dot(prevGradient));\n+192 direction = currentGradient + (beta * direction);\n+193 }\n+194\n+195 alpha = _\bl_\bi_\bn_\be_\bS_\be_\ba_\br_\bc_\bh(system, currentValues, direction);\n+196\n+197 prevValues = currentValues;\n+198 prevError = currentError;\n+199\n+200 currentValues = system.advance(prevValues, alpha, direction);\n+201 currentError = system.error(currentValues);\n+202\n+203 // User hook:\n+204 if (params._\bi_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk)\n+205 params._\bi_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk(iteration, prevError, currentError);\n+206\n+207 // Maybe show output\n+208 if (params._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by >= NonlinearOptimizerParams::ERROR)\n+209 std::cout << \"iteration: \" << iteration << \", currentError: \" <<\n+currentError << std::endl;\n+210 } while (++iteration < params._\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs && !singleIteration\n+211 && !_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(params._\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl, params._\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl,\n+212 params._\be_\br_\br_\bo_\br_\bT_\bo_\bl, prevError, currentError, params._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by));\n+213\n+214 // Printing if verbose\n+215 if (params._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by >= NonlinearOptimizerParams::ERROR\n+216 && iteration >= params._\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs)\n+217 std::cout\n+218 << \"nonlinearConjugateGradient: Terminating because reached maximum\n+iterations\"\n+219 << std::endl;\n+220\n+221 return boost::tie(currentValues, iteration);\n+222}\n+223\n+224} // \\ namespace gtsam\n+225\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+Base class and parameters for nonlinear optimization algorithms.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl\n-bool equal(const T &obj1, const T &obj2, double tol)\n-Call equal on the object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n-virtual void resize(size_t size)\n-Directly resize the number of factors in the graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:381\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-return the number of factors (including any null factors set by remove() ).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:326\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-static shared_ptr Information(const Matrix &M, bool smart=true)\n-A Gaussian noise model created by specifying an information matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.cpp:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt\n-Base class for robust error models The robust M-estimators above simply tell us\n-how to re-weight the ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:642\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n-bool checkWeightsConvergence(const Vector &weights) const\n-Check convergence of weights to binary values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:364\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-void setWeights(const Vector w)\n-Set weights for each factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:144\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bM_\bu_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n-bool checkMuConvergence(const double mu) const\n-Check if we have reached the value of mu for which the surrogate loss matches\n-the original loss.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:334\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bB_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-GncParameters::OptimizerType BaseOptimizer\n-For each parameter, specify the corresponding optimizer: e.g.,\n-GaussNewtonParams -> GaussNewtonOptimi...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n-Values optimize()\n-Compute optimal solution using graduated non-convexity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs\n-const Vector & getInlierCostThresholds() const\n-Get the inlier threshold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:166\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bs_\bt_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n-bool checkCostConvergence(const double cost, const double prev_cost) const\n-Check convergence of relative cost differences.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:353\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\be_\bt_\bS_\bt_\ba_\bt_\be\n-const Values & getState() const\n-Access a copy of the internal values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs\n-void setInlierCostThresholds(const Vector &inthVec)\n-Set the maximum weighted residual error for an inlier (one for each factor).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:125\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-Vector calculateWeights(const Values ¤tEstimate, const double mu)\n-Calculate gnc weights.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:423\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bM_\bu\n-double initializeMu() const\n-Initialize the gnc parameter mu such that loss is approximately convex (remark\n-5 in GNC paper).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:274\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bM_\bu\n-double updateMu(const double mu) const\n-Update the gnc parameter mu to gradually increase nonconvexity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:319\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const GncOptimizer &other, double tol=1e-9) const\n-Equals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:169\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n-bool checkConvergence(const double mu, const Vector &weights, const double\n-cost, const double prev_cost) const\n-Check for convergence between consecutive GNC iterations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:391\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs\n-void setInlierCostThresholds(const double inth)\n-Set the maximum weighted residual error for an inlier (same for all factors).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs_\bA_\bt_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by\n-void setInlierCostThresholdsAtProbability(const double alpha)\n-Set the maximum weighted residual error threshold by specifying the probability\n-alpha that the inlier...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:132\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bm_\ba_\bk_\be_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bG_\br_\ba_\bp_\bh\n-NonlinearFactorGraph makeWeightedGraph(const Vector &weights) const\n-Create a graph where each factor is weighted by the gnc weights.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:398\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-const NonlinearFactorGraph & getFactors() const\n-Access a copy of the internal factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs\n-const Vector & getWeights() const\n-Access a copy of the GNC weights.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\be_\bt_\bP_\ba_\br_\ba_\bm_\bs\n-const GncParameters & getParams() const\n-Access a copy of the parameters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-GncOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues,\n-const GncParameters ¶ms=GncParameters())\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n-density Templated on...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\bS_\be_\ba_\br_\bc_\bh\n+double lineSearch(const S &system, const V currentValues, const W &gradient)\n+Implement the golden-section line search algorithm.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearConjugateGradientOptimizer.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n+bool checkConvergence(double relativeErrorTreshold, double\n+absoluteErrorTreshold, double errorThreshold, double currentError, double\n+newError, NonlinearOptimizerParams::Verbosity verbosity)\n+Check whether the relative error decrease is less than relativeErrorTreshold,\n+the absolute error decr...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.cpp:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n+Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n+landmarkKey)\n+Optimize for triangulation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt\n+boost::tuple< V, int > nonlinearConjugateGradient(const S &system, const V\n+&initial, const NonlinearOptimizerParams ¶ms, const bool singleIteration,\n+const bool gradientDescent=false)\n+Implement the nonlinear conjugate gradient method using the Polak-Ribiere\n+formula suggested in http:/...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearConjugateGradientOptimizer.h:148\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n boost::shared_ptr< This > shared_ptr\n-Noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:186\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+An implementation of the nonlinear CG method using the template below.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearConjugateGradientOptimizer.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:\n+_\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+~NonlinearConjugateGradientOptimizer() override\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearConjugateGradientOptimizer.h:70\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactorGraph &other, double tol=1e-9) const\n-Test equality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.cpp:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &values) const\n-unnormalized error, in the most common case\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.cpp:170\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+This is the abstract interface for classes that can optimize for the maximum-\n+likelihood estimate of a...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+The common parameters for Nonlinear optimizers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl\n+double absoluteErrorTol\n+The maximum absolute error decrease to stop iterating (default 1e-5)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk\n+IterationHook iterationHook\n+Optional user-provided iteration hook to be called after each optimization\n+iteration (Default: none).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n+size_t maxIterations\n+The maximum iterations to stop iterating (default 100)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n+Verbosity verbosity\n+The printing verbosity during optimization (default SILENT)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl\n+double relativeErrorTol\n+The maximum relative error decrease to stop iterating (default 1e-5)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\br_\br_\bo_\br_\bT_\bo_\bl\n+double errorTol\n+The maximum total error to stop iterating (default 0.0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:44\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01055.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01055.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Clique.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/CustomFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,45 +94,53 @@\n \n \n \n \n \n
\n \n-
ISAM2Clique.cpp File Reference
\n+Typedefs
\n+
CustomFactor.h File Reference
\n \n
\n \n-

Specialized iSAM2 Clique. \n+

Class to enable arbitrary factors with runtime swappable error function. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+

\n+Classes

class  gtsam::CustomFactor
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n

\n-Functions

size_t gtsam::optimizeWildfire (const ISAM2Clique::shared_ptr &root, double threshold, const KeySet &replaced, VectorValues *delta)
 Optimize the BayesTree, starting from the root.
 
\n-size_t gtsam::optimizeWildfireNonRecursive (const ISAM2Clique::shared_ptr &root, double threshold, const KeySet &keys, VectorValues *delta)
 

\n+Typedefs

\n+using gtsam::JacobianVector = std::vector< Matrix >
 
\n+using gtsam::CustomErrorFunction = std::function< Vector(const CustomFactor &, const Values &, const JacobianVector *)>
 
\n

Detailed Description

\n-

Specialized iSAM2 Clique.

\n-
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n+

Class to enable arbitrary factors with runtime swappable error function.

\n+
Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-ISAM2Clique.cpp File Reference\n-Specialized iSAM2 Clique. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+CustomFactor.h File Reference\n+Class to enable arbitrary factors with runtime swappable error function.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-size_t\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bW_\bi_\bl_\bd_\bf_\bi_\br_\be (const ISAM2Clique::shared_ptr &root, double\n- threshold, const _\bK_\be_\by_\bS_\be_\bt &replaced, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs *delta)\n-\u00a0 Optimize the _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be, starting from the root.\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:J\bJa\bac\bco\bob\bbi\bia\ban\bnV\bVe\bec\bct\bto\bor\br = std::vector< Matrix >\n \u00a0\n-size_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpt\bti\bim\bmi\biz\bze\beW\bWi\bil\bld\bdf\bfi\bir\bre\beN\bNo\bon\bnR\bRe\bec\bcu\bur\brs\bsi\biv\bve\be (const ISAM2Clique::shared_ptr\n- &root, double threshold, const _\bK_\be_\by_\bS_\be_\bt &keys, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs *delta)\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCu\bus\bst\bto\bom\bmE\bEr\brr\bro\bor\brF\bFu\bun\bnc\bct\bti\bio\bon\bn = std::function< Vector(const _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br &,\n+ const _\bV_\ba_\bl_\bu_\be_\bs &, const JacobianVector *)>\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Specialized iSAM2 Clique.\n+Class to enable arbitrary factors with runtime swappable error function.\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert\n+ Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b._\bc_\bp_\bp\n+ * _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01055.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01055.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01055 = [\n- [\"optimizeWildfire\", \"a01055.html#a2b0857edd76f8d63eeee0ce9944e28d4\", null]\n+ [\"gtsam::CustomFactor\", \"a04248.html\", \"a04248\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01058.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01058.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/CustomFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h File Reference\n \n \n \n \n \n \n \n@@ -95,52 +95,53 @@\n \n \n \n \n
\n \n-
CustomFactor.h File Reference
\n+Namespaces
\n+
ISAM2-impl.h File Reference
\n \n
\n \n-

Class to enable arbitrary factors with runtime swappable error function. \n+

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::CustomFactor
class  gtsam::ISAM2BayesTree
 
class  gtsam::ISAM2JunctionTree
 
struct  gtsam::DeltaImpl
 
struct  gtsam::DeltaImpl::PartialSolveResult
 
struct  gtsam::DeltaImpl::ReorderingMode
 
struct  gtsam::UpdateImpl
 Implementation functions for update method All of the methods below have clear inputs and outputs, even if not functional: iSAM2 is inherintly imperative. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n

\n-Typedefs

\n-using gtsam::JacobianVector = std::vector< Matrix >
 
\n-using gtsam::CustomErrorFunction = std::function< Vector(const CustomFactor &, const Values &, const JacobianVector *)>
 
\n

Detailed Description

\n-

Class to enable arbitrary factors with runtime swappable error function.

\n-
Author
Fan Jiang
\n+

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.

\n+
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,39 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-CustomFactor.h File Reference\n-Class to enable arbitrary factors with runtime swappable error function.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ISAM2-impl.h File Reference\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl_\b:_\b:_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\bo_\bl_\bv_\be_\bR_\be_\bs_\bu_\bl_\bt\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl_\b:_\b:_\bR_\be_\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\bM_\bo_\bd_\be\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl\n+ Implementation functions for update method All of the methods below\n+\u00a0 have clear inputs and outputs, even if not functional: iSAM2 is\n+ inherintly imperative. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:J\bJa\bac\bco\bob\bbi\bia\ban\bnV\bVe\bec\bct\bto\bor\br = std::vector< Matrix >\n-\u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCu\bus\bst\bto\bom\bmE\bEr\brr\bro\bor\brF\bFu\bun\bnc\bct\bti\bio\bon\bn = std::function< Vector(const _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br &,\n- const _\bV_\ba_\bl_\bu_\be_\bs &, const JacobianVector *)>\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Class to enable arbitrary factors with runtime swappable error function.\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization.\n Author\n- Fan Jiang\n+ Michael Kaess, Richard Roberts, Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bI_\bS_\bA_\bM_\b2_\b-_\bi_\bm_\bp_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01058.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01058.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,8 @@\n var a01058 = [\n- [\"gtsam::CustomFactor\", \"a04248.html\", \"a04248\"]\n+ [\"gtsam::ISAM2BayesTree\", \"a04372.html\", null],\n+ [\"gtsam::ISAM2JunctionTree\", \"a04376.html\", null],\n+ [\"gtsam::DeltaImpl\", \"a04380.html\", \"a04380\"],\n+ [\"gtsam::DeltaImpl::PartialSolveResult\", \"a04384.html\", null],\n+ [\"gtsam::DeltaImpl::ReorderingMode\", \"a04388.html\", null],\n+ [\"gtsam::UpdateImpl\", \"a04392.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01058_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01058_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/CustomFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h Source File\n \n \n \n \n \n \n \n@@ -98,116 +98,566 @@\n
No Matches
\n \n \n \n \n \n
\n-
CustomFactor.h
\n+
ISAM2-impl.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-
21
\n-
22namespace gtsam {
\n+
19#pragma once
\n+
20
\n+\n+\n
23
\n-
24using JacobianVector = std::vector<Matrix>;
\n-
25
\n-
26class CustomFactor;
\n-
27
\n-
28/*
\n-
29 * NOTE
\n-
30 * ==========
\n-
31 * pybind11 will invoke a copy if this is `JacobianVector &`, and modifications in Python will not be reflected.
\n-
32 *
\n-
33 * This is safe because this is passing a const pointer, and pybind11 will maintain the `std::vector` memory layout.
\n-
34 * Thus the pointer will never be invalidated.
\n-
35 */
\n-
36using CustomErrorFunction = std::function<Vector(const CustomFactor &, const Values &, const JacobianVector *)>;
\n+
24#include <gtsam/base/debug.h>
\n+
25#include <gtsam/inference/JunctionTree-inst.h> // We need the inst file because we'll make a special JT templated on ISAM2
\n+\n+\n+\n+\n+
30
\n+
31#include <boost/range/adaptors.hpp>
\n+
32#include <boost/range/algorithm/copy.hpp>
\n+
33namespace br {
\n+
34using namespace boost::range;
\n+
35using namespace boost::adaptors;
\n+
36} // namespace br
\n
37
\n-
\n-\n-
46protected:
\n-
47 CustomErrorFunction error_function_;
\n-
48
\n-
49protected:
\n-
50
\n-
51 using Base = NoiseModelFactor;
\n-
52 using This = CustomFactor;
\n+
38#include <algorithm>
\n+
39#include <limits>
\n+
40#include <string>
\n+
41#include <utility>
\n+
42
\n+
43namespace gtsam {
\n+
44
\n+
45/* ************************************************************************* */
\n+
46// Special BayesTree class that uses ISAM2 cliques - this is the result of
\n+
47// reeliminating ISAM2 subtrees.
\n+
\n+\n+
49 public:
\n+
50 typedef ISAM2::Base Base;
\n+
51 typedef ISAM2BayesTree This;
\n+
52 typedef boost::shared_ptr<This> shared_ptr;
\n
53
\n-
54public:
\n-
55
\n-
59 CustomFactor() = default;
\n-
60
\n-
\n-
67 CustomFactor(const SharedNoiseModel &noiseModel, const KeyVector &keys, const CustomErrorFunction &errorFunction) :
\n-\n-
69 this->error_function_ = errorFunction;
\n-
70 }
\n-
\n-
71
\n-
72 ~CustomFactor() override = default;
\n-
73
\n-
78 Vector unwhitenedError(const Values &x, boost::optional<std::vector<Matrix> &> H = boost::none) const override;
\n-
79
\n-
81 void print(const std::string &s,
\n-
82 const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override;
\n+\n+
55};
\n+
\n+
56
\n+
57/* ************************************************************************* */
\n+
58// Special JunctionTree class that produces ISAM2 BayesTree cliques, used for
\n+
59// reeliminating ISAM2 subtrees.
\n+
\n+\n+
61 : public JunctionTree<ISAM2BayesTree, GaussianFactorGraph> {
\n+
62 public:
\n+\n+
64 typedef ISAM2JunctionTree This;
\n+
65 typedef boost::shared_ptr<This> shared_ptr;
\n+
66
\n+
67 explicit ISAM2JunctionTree(const GaussianEliminationTree& eliminationTree)
\n+
68 : Base(eliminationTree) {}
\n+
69};
\n+
\n+
70
\n+
71/* ************************************************************************* */
\n+
\n+
72struct GTSAM_EXPORT DeltaImpl {
\n+
\n+
73 struct GTSAM_EXPORT PartialSolveResult {
\n+
74 ISAM2::sharedClique bayesTree;
\n+
75 };
\n+
\n+
76
\n+
\n+
77 struct GTSAM_EXPORT ReorderingMode {
\n+
78 size_t nFullSystemVars;
\n+
79 enum { /*AS_ADDED,*/ COLAMD } algorithm;
\n+
80 enum { NO_CONSTRAINT, CONSTRAIN_LAST } constrain;
\n+
81 boost::optional<FastMap<Key, int> > constrainedKeys;
\n+
82 };
\n+
\n
83
\n-
\n-
87 bool sendable() const override {
\n-
88 return false;
\n-
89 }
\n-
\n-
90
\n-
91private:
\n-
92
\n-\n-
95 template<class ARCHIVE>
\n-
96 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n-
97 ar & boost::serialization::make_nvp("CustomFactor",
\n-
98 boost::serialization::base_object<Base>(*this));
\n-
99 }
\n-
100};
\n-
\n-
101
\n-
102}
\n-
Non-linear factor base classes.
\n+
87 static size_t UpdateGaussNewtonDelta(const ISAM2::Roots& roots,
\n+
88 const KeySet& replacedKeys,
\n+
89 double wildfireThreshold,
\n+
90 VectorValues* delta);
\n+
91
\n+
96 static size_t UpdateRgProd(const ISAM2::Roots& roots,
\n+
97 const KeySet& replacedKeys,
\n+
98 const VectorValues& gradAtZero,
\n+
99 VectorValues* RgProd);
\n+
100
\n+
104 static VectorValues ComputeGradientSearch(const VectorValues& gradAtZero,
\n+
105 const VectorValues& RgProd);
\n+
106};
\n+
\n+
107
\n+
108/* ************************************************************************* */
\n+
\n+
114struct GTSAM_EXPORT UpdateImpl {
\n+
115 const ISAM2Params& params_;
\n+
116 const ISAM2UpdateParams& updateParams_;
\n+
117 UpdateImpl(const ISAM2Params& params, const ISAM2UpdateParams& updateParams)
\n+
118 : params_(params), updateParams_(updateParams) {}
\n+
119
\n+
120 // Provide some debugging information at the start of update
\n+
121 static void LogStartingUpdate(const NonlinearFactorGraph& newFactors,
\n+
122 const ISAM2& isam2) {
\n+
123 gttic(pushBackFactors);
\n+
124 const bool debug = ISDEBUG("ISAM2 update");
\n+
125 const bool verbose = ISDEBUG("ISAM2 update verbose");
\n+
126
\n+
127 if (verbose) {
\n+
128 std::cout << "ISAM2::update\\n";
\n+
129 isam2.print("ISAM2: ");
\n+
130 }
\n+
131
\n+
132 if (debug || verbose) {
\n+
133 newFactors.print("The new factors are: ");
\n+
134 }
\n+
135 }
\n+
136
\n+
137 // Check relinearization if we're at the nth step, or we are using a looser
\n+
138 // loop relinerization threshold.
\n+
139 bool relinarizationNeeded(size_t update_count) const {
\n+
140 return updateParams_.force_relinearize ||
\n+
141 (params_.enableRelinearization &&
\n+
142 update_count % params_.relinearizeSkip == 0);
\n+
143 }
\n+
144
\n+
145 // Add any new factors \\Factors:=\\Factors\\cup\\Factors'.
\n+
146 void pushBackFactors(const NonlinearFactorGraph& newFactors,
\n+
147 NonlinearFactorGraph* nonlinearFactors,
\n+
148 GaussianFactorGraph* linearFactors,
\n+
149 VariableIndex* variableIndex,
\n+
150 FactorIndices* newFactorsIndices,
\n+
151 KeySet* keysWithRemovedFactors) const {
\n+
152 gttic(pushBackFactors);
\n+
153
\n+
154 // Perform the first part of the bookkeeping updates for adding new factors.
\n+
155 // Adds them to the complete list of nonlinear factors, and populates the
\n+
156 // list of new factor indices, both optionally finding and reusing empty
\n+
157 // factor slots.
\n+
158 *newFactorsIndices = nonlinearFactors->add_factors(
\n+
159 newFactors, params_.findUnusedFactorSlots);
\n+
160
\n+
161 // Remove the removed factors
\n+
162 NonlinearFactorGraph removedFactors;
\n+
163 removedFactors.reserve(updateParams_.removeFactorIndices.size());
\n+
164 for (const auto index : updateParams_.removeFactorIndices) {
\n+
165 removedFactors.push_back(nonlinearFactors->at(index));
\n+
166 nonlinearFactors->remove(index);
\n+
167 if (params_.cacheLinearizedFactors) linearFactors->remove(index);
\n+
168 }
\n+
169
\n+
170 // Remove removed factors from the variable index so we do not attempt to
\n+
171 // relinearize them
\n+
172 variableIndex->remove(updateParams_.removeFactorIndices.begin(),
\n+
173 updateParams_.removeFactorIndices.end(),
\n+
174 removedFactors);
\n+
175 *keysWithRemovedFactors = removedFactors.keys();
\n+
176 }
\n+
177
\n+
178 // Get keys from removed factors and new factors, and compute unused keys,
\n+
179 // i.e., keys that are empty now and do not appear in the new factors.
\n+
180 void computeUnusedKeys(const NonlinearFactorGraph& newFactors,
\n+
181 const VariableIndex& variableIndex,
\n+
182 const KeySet& keysWithRemovedFactors,
\n+
183 KeySet* unusedKeys) const {
\n+
184 gttic(computeUnusedKeys);
\n+
185 KeySet removedAndEmpty;
\n+
186 for (Key key : keysWithRemovedFactors) {
\n+
187 if (variableIndex.empty(key))
\n+
188 removedAndEmpty.insert(removedAndEmpty.end(), key);
\n+
189 }
\n+
190 KeySet newFactorSymbKeys = newFactors.keys();
\n+
191 std::set_difference(removedAndEmpty.begin(), removedAndEmpty.end(),
\n+
192 newFactorSymbKeys.begin(), newFactorSymbKeys.end(),
\n+
193 std::inserter(*unusedKeys, unusedKeys->end()));
\n+
194 }
\n+
195
\n+
196 // Calculate nonlinear error
\n+
197 void error(const NonlinearFactorGraph& nonlinearFactors,
\n+
198 const Values& estimate, boost::optional<double>* result) const {
\n+
199 gttic(error);
\n+
200 result->reset(nonlinearFactors.error(estimate));
\n+
201 }
\n+
202
\n+
203 // Mark linear update
\n+
204 void gatherInvolvedKeys(const NonlinearFactorGraph& newFactors,
\n+
205 const NonlinearFactorGraph& nonlinearFactors,
\n+
206 const KeySet& keysWithRemovedFactors,
\n+
207 KeySet* markedKeys) const {
\n+
208 gttic(gatherInvolvedKeys);
\n+
209 *markedKeys = newFactors.keys(); // Get keys from new factors
\n+
210 // Also mark keys involved in removed factors
\n+
211 markedKeys->insert(keysWithRemovedFactors.begin(),
\n+
212 keysWithRemovedFactors.end());
\n+
213
\n+
214 // Also mark any provided extra re-eliminate keys
\n+
215 if (updateParams_.extraReelimKeys) {
\n+
216 for (Key key : *updateParams_.extraReelimKeys) {
\n+
217 markedKeys->insert(key);
\n+
218 }
\n+
219 }
\n+
220
\n+
221 // Also, keys that were not observed in existing factors, but whose affected
\n+
222 // keys have been extended now (e.g. smart factors)
\n+
223 if (updateParams_.newAffectedKeys) {
\n+
224 for (const auto& factorAddedKeys : *updateParams_.newAffectedKeys) {
\n+
225 const auto factorIdx = factorAddedKeys.first;
\n+
226 const auto& affectedKeys = nonlinearFactors.at(factorIdx)->keys();
\n+
227 markedKeys->insert(affectedKeys.begin(), affectedKeys.end());
\n+
228 }
\n+
229 }
\n+
230 }
\n+
231
\n+
232 // Update detail, unused, and observed keys from markedKeys
\n+
233 void updateKeys(const KeySet& markedKeys, ISAM2Result* result) const {
\n+
234 gttic(updateKeys);
\n+
235 // Observed keys for detailed results
\n+
236 if (result->detail && params_.enableDetailedResults) {
\n+
237 for (Key key : markedKeys) {
\n+
238 result->detail->variableStatus[key].isObserved = true;
\n+
239 }
\n+
240 }
\n+
241
\n+
242 for (Key index : markedKeys) {
\n+
243 // Only add if not unused
\n+
244 if (result->unusedKeys.find(index) == result->unusedKeys.end())
\n+
245 // Make a copy of these, as we'll soon add to them
\n+
246 result->observedKeys.push_back(index);
\n+
247 }
\n+
248 }
\n+
249
\n+
250 static void CheckRelinearizationRecursiveMap(
\n+
251 const FastMap<char, Vector>& thresholds, const VectorValues& delta,
\n+
252 const ISAM2::sharedClique& clique, KeySet* relinKeys) {
\n+
253 // Check the current clique for relinearization
\n+
254 bool relinearize = false;
\n+
255 for (Key var : *clique->conditional()) {
\n+
256 // Find the threshold for this variable type
\n+
257 const Vector& threshold = thresholds.find(Symbol(var).chr())->second;
\n+
258
\n+
259 const Vector& deltaVar = delta[var];
\n+
260
\n+
261 // Verify the threshold vector matches the actual variable size
\n+
262 if (threshold.rows() != deltaVar.rows())
\n+
263 throw std::invalid_argument(
\n+
264 "Relinearization threshold vector dimensionality for '" +
\n+
265 std::string(1, Symbol(var).chr()) +
\n+
266 "' passed into iSAM2 parameters does not match actual variable "
\n+
267 "dimensionality.");
\n+
268
\n+
269 // Check for relinearization
\n+
270 if ((deltaVar.array().abs() > threshold.array()).any()) {
\n+
271 relinKeys->insert(var);
\n+
272 relinearize = true;
\n+
273 }
\n+
274 }
\n+
275
\n+
276 // If this node was relinearized, also check its children
\n+
277 if (relinearize) {
\n+
278 for (const ISAM2::sharedClique& child : clique->children) {
\n+
279 CheckRelinearizationRecursiveMap(thresholds, delta, child, relinKeys);
\n+
280 }
\n+
281 }
\n+
282 }
\n+
283
\n+
284 static void CheckRelinearizationRecursiveDouble(
\n+
285 double threshold, const VectorValues& delta,
\n+
286 const ISAM2::sharedClique& clique, KeySet* relinKeys) {
\n+
287 // Check the current clique for relinearization
\n+
288 bool relinearize = false;
\n+
289 for (Key var : *clique->conditional()) {
\n+
290 double maxDelta = delta[var].lpNorm<Eigen::Infinity>();
\n+
291 if (maxDelta >= threshold) {
\n+
292 relinKeys->insert(var);
\n+
293 relinearize = true;
\n+
294 }
\n+
295 }
\n+
296
\n+
297 // If this node was relinearized, also check its children
\n+
298 if (relinearize) {
\n+
299 for (const ISAM2::sharedClique& child : clique->children) {
\n+
300 CheckRelinearizationRecursiveDouble(threshold, delta, child, relinKeys);
\n+
301 }
\n+
302 }
\n+
303 }
\n+
304
\n+
\n+\n+
319 const ISAM2::Roots& roots, const VectorValues& delta,
\n+
320 const ISAM2Params::RelinearizationThreshold& relinearizeThreshold) {
\n+
321 KeySet relinKeys;
\n+
322 for (const ISAM2::sharedClique& root : roots) {
\n+
323 if (relinearizeThreshold.type() == typeid(double))
\n+
324 CheckRelinearizationRecursiveDouble(
\n+
325 boost::get<double>(relinearizeThreshold), delta, root, &relinKeys);
\n+
326 else if (relinearizeThreshold.type() == typeid(FastMap<char, Vector>))
\n+
327 CheckRelinearizationRecursiveMap(
\n+
328 boost::get<FastMap<char, Vector> >(relinearizeThreshold), delta,
\n+
329 root, &relinKeys);
\n+
330 }
\n+
331 return relinKeys;
\n+
332 }
\n+
\n+
333
\n+
\n+\n+
346 const VectorValues& delta,
\n+
347 const ISAM2Params::RelinearizationThreshold& relinearizeThreshold) {
\n+
348 KeySet relinKeys;
\n+
349
\n+
350 if (const double* threshold = boost::get<double>(&relinearizeThreshold)) {
\n+
351 for (const VectorValues::KeyValuePair& key_delta : delta) {
\n+
352 double maxDelta = key_delta.second.lpNorm<Eigen::Infinity>();
\n+
353 if (maxDelta >= *threshold) relinKeys.insert(key_delta.first);
\n+
354 }
\n+
355 } else if (const FastMap<char, Vector>* thresholds =
\n+
356 boost::get<FastMap<char, Vector> >(&relinearizeThreshold)) {
\n+
357 for (const VectorValues::KeyValuePair& key_delta : delta) {
\n+
358 const Vector& threshold =
\n+
359 thresholds->find(Symbol(key_delta.first).chr())->second;
\n+
360 if (threshold.rows() != key_delta.second.rows())
\n+
361 throw std::invalid_argument(
\n+
362 "Relinearization threshold vector dimensionality for '" +
\n+
363 std::string(1, Symbol(key_delta.first).chr()) +
\n+
364 "' passed into iSAM2 parameters does not match actual variable "
\n+
365 "dimensionality.");
\n+
366 if ((key_delta.second.array().abs() > threshold.array()).any())
\n+
367 relinKeys.insert(key_delta.first);
\n+
368 }
\n+
369 }
\n+
370
\n+
371 return relinKeys;
\n+
372 }
\n+
\n+
373
\n+
374 // Mark keys in \\Delta above threshold \\beta:
\n+
375 KeySet gatherRelinearizeKeys(const ISAM2::Roots& roots,
\n+
376 const VectorValues& delta,
\n+
377 const KeySet& fixedVariables,
\n+
378 KeySet* markedKeys) const {
\n+
379 gttic(gatherRelinearizeKeys);
\n+
380 // J=\\{\\Delta_{j}\\in\\Delta|\\Delta_{j}\\geq\\beta\\}.
\n+
381 KeySet relinKeys =
\n+
382 params_.enablePartialRelinearizationCheck
\n+
383 ? CheckRelinearizationPartial(roots, delta,
\n+
384 params_.relinearizeThreshold)
\n+
385 : CheckRelinearizationFull(delta, params_.relinearizeThreshold);
\n+
386 if (updateParams_.forceFullSolve)
\n+
387 relinKeys = CheckRelinearizationFull(delta, 0.0); // for debugging
\n+
388
\n+
389 // Remove from relinKeys any keys whose linearization points are fixed
\n+
390 for (Key key : fixedVariables) {
\n+
391 relinKeys.erase(key);
\n+
392 }
\n+
393 if (updateParams_.noRelinKeys) {
\n+
394 for (Key key : *updateParams_.noRelinKeys) {
\n+
395 relinKeys.erase(key);
\n+
396 }
\n+
397 }
\n+
398
\n+
399 // Add the variables being relinearized to the marked keys
\n+
400 markedKeys->insert(relinKeys.begin(), relinKeys.end());
\n+
401 return relinKeys;
\n+
402 }
\n+
403
\n+
404 // Record relinerization threshold keys in detailed results
\n+
405 void recordRelinearizeDetail(const KeySet& relinKeys,
\n+
406 ISAM2Result::DetailedResults* detail) const {
\n+
407 if (detail && params_.enableDetailedResults) {
\n+
408 for (Key key : relinKeys) {
\n+
409 detail->variableStatus[key].isAboveRelinThreshold = true;
\n+
410 detail->variableStatus[key].isRelinearized = true;
\n+
411 }
\n+
412 }
\n+
413 }
\n+
414
\n+
415 // Mark all cliques that involve marked variables \\Theta_{J} and all
\n+
416 // their ancestors.
\n+
417 void findFluid(const ISAM2::Roots& roots, const KeySet& relinKeys,
\n+
418 KeySet* markedKeys,
\n+
419 ISAM2Result::DetailedResults* detail) const {
\n+
420 gttic(findFluid);
\n+
421 for (const auto& root : roots)
\n+
422 // add other cliques that have the marked ones in the separator
\n+
423 root->findAll(relinKeys, markedKeys);
\n+
424
\n+
425 // Relinearization-involved keys for detailed results
\n+
426 if (detail && params_.enableDetailedResults) {
\n+
427 KeySet involvedRelinKeys;
\n+
428 for (const auto& root : roots)
\n+
429 root->findAll(relinKeys, &involvedRelinKeys);
\n+
430 for (Key key : involvedRelinKeys) {
\n+
431 if (!detail->variableStatus[key].isAboveRelinThreshold) {
\n+
432 detail->variableStatus[key].isRelinearizeInvolved = true;
\n+
433 detail->variableStatus[key].isRelinearized = true;
\n+
434 }
\n+
435 }
\n+
436 }
\n+
437 }
\n+
438
\n+
439 // Linearize new factors
\n+
440 void linearizeNewFactors(const NonlinearFactorGraph& newFactors,
\n+
441 const Values& theta, size_t numNonlinearFactors,
\n+
442 const FactorIndices& newFactorsIndices,
\n+
443 GaussianFactorGraph* linearFactors) const {
\n+
444 gttic(linearizeNewFactors);
\n+
445 auto linearized = newFactors.linearize(theta);
\n+
446 if (params_.findUnusedFactorSlots) {
\n+
447 linearFactors->resize(numNonlinearFactors);
\n+
448 for (size_t i = 0; i < newFactors.size(); ++i)
\n+
449 (*linearFactors)[newFactorsIndices[i]] = (*linearized)[i];
\n+
450 } else {
\n+
451 linearFactors->push_back(*linearized);
\n+
452 }
\n+
453 assert(linearFactors->size() == numNonlinearFactors);
\n+
454 }
\n+
455
\n+
456 void augmentVariableIndex(const NonlinearFactorGraph& newFactors,
\n+
457 const FactorIndices& newFactorsIndices,
\n+
458 VariableIndex* variableIndex) const {
\n+
459 gttic(augmentVariableIndex);
\n+
460 // Augment the variable index with the new factors
\n+
461 if (params_.findUnusedFactorSlots)
\n+
462 variableIndex->augment(newFactors, newFactorsIndices);
\n+
463 else
\n+
464 variableIndex->augment(newFactors);
\n+
465
\n+
466 // Augment it with existing factors which now affect to more variables:
\n+
467 if (updateParams_.newAffectedKeys) {
\n+
468 for (const auto& factorAddedKeys : *updateParams_.newAffectedKeys) {
\n+
469 const auto factorIdx = factorAddedKeys.first;
\n+
470 variableIndex->augmentExistingFactor(factorIdx, factorAddedKeys.second);
\n+
471 }
\n+
472 }
\n+
473 }
\n+
474
\n+
475 static void LogRecalculateKeys(const ISAM2Result& result) {
\n+
476 const bool debug = ISDEBUG("ISAM2 recalculate");
\n+
477
\n+
478 if (debug) {
\n+
479 std::cout << "markedKeys: ";
\n+
480 for (const Key key : result.markedKeys) {
\n+
481 std::cout << key << " ";
\n+
482 }
\n+
483 std::cout << std::endl;
\n+
484 std::cout << "observedKeys: ";
\n+
485 for (const Key key : result.observedKeys) {
\n+
486 std::cout << key << " ";
\n+
487 }
\n+
488 std::cout << std::endl;
\n+
489 }
\n+
490 }
\n+
491
\n+
492 static FactorIndexSet GetAffectedFactors(const KeyList& keys,
\n+
493 const VariableIndex& variableIndex) {
\n+
494 gttic(GetAffectedFactors);
\n+
495 FactorIndexSet indices;
\n+
496 for (const Key key : keys) {
\n+
497 const FactorIndices& factors(variableIndex[key]);
\n+
498 indices.insert(factors.begin(), factors.end());
\n+
499 }
\n+
500 return indices;
\n+
501 }
\n+
502
\n+
503 // find intermediate (linearized) factors from cache that are passed into
\n+
504 // the affected area
\n+
505 static GaussianFactorGraph GetCachedBoundaryFactors(
\n+
506 const ISAM2::Cliques& orphans) {
\n+
507 GaussianFactorGraph cachedBoundary;
\n+
508
\n+
509 for (const auto& orphan : orphans) {
\n+
510 // retrieve the cached factor and add to boundary
\n+
511 cachedBoundary.push_back(orphan->cachedFactor());
\n+
512 }
\n+
513
\n+
514 return cachedBoundary;
\n+
515 }
\n+
516};
\n+
\n+
517
\n+
518} // namespace gtsam
\n+
Global debugging flags.
\n+\n+
The junction tree, template bodies.
\n+\n+
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n+
Class that stores detailed iSAM2 result.
\n+
Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
Definition CustomFactor.h:45
\n-
Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix > & > H=boost::none) const override
Calls the errorFunction closure, which is a std::function object One can check if a derivative is nee...
Definition CustomFactor.cpp:25
\n-
CustomFactor(const SharedNoiseModel &noiseModel, const KeyVector &keys, const CustomErrorFunction &errorFunction)
Constructor.
Definition CustomFactor.h:67
\n-
CustomFactor()=default
Default Constructor for I/O.
\n-
friend class boost::serialization::access
Serialization function.
Definition CustomFactor.h:94
\n-
bool sendable() const override
Mark not sendable.
Definition CustomFactor.h:87
\n-
void print(const std::string &s, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition CustomFactor.cpp:59
\n-
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n-
NoiseModelFactor()
Default constructor for I/O only.
Definition NonlinearFactor.h:189
\n-
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n+
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+\n+
KeySet keys() const
Potentially slow function to return all keys involved, sorted, as a set.
Definition FactorGraph-inst.h:85
\n+
FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)
Add new factors to a factor graph and returns a list of new factor indices, optionally finding and re...
Definition FactorGraph-inst.h:109
\n+
IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition FactorGraph.h:186
\n+
void remove(size_t i)
delete factor without re-arranging indexes by inserting a nullptr pointer
Definition FactorGraph.h:385
\n+
const sharedFactor at(size_t i) const
Get a specific factor by index (this checks array bounds and may throw an exception,...
Definition FactorGraph.h:335
\n+
void reserve(size_t size)
Reserve space for the specified number of factors if you know in advance how many there will be (work...
Definition FactorGraph.h:182
\n+\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition BayesTree-inst.h:212
\n+
FastVector< sharedClique > Roots
Root cliques.
Definition BayesTree.h:95
\n+
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n+
Character and index key used to refer to variables.
Definition Symbol.h:35
\n+
unsigned char chr() const
Retrieve key character.
Definition Symbol.h:73
\n+
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n+
void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG &factors)
Remove entries corresponding to the specified factors.
Definition VariableIndex-inl.h:54
\n+
bool empty(Key variable) const
Return true if no factors associated with a variable.
Definition VariableIndex.h:98
\n+
Definition GaussianEliminationTree.h:29
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
Definition ISAM2-impl.h:48
\n+
Definition ISAM2-impl.h:61
\n+
Definition ISAM2-impl.h:72
\n+
Definition ISAM2-impl.h:73
\n+
Definition ISAM2-impl.h:77
\n+
Implementation functions for update method All of the methods below have clear inputs and outputs,...
Definition ISAM2-impl.h:114
\n+
static KeySet CheckRelinearizationFull(const VectorValues &delta, const ISAM2Params::RelinearizationThreshold &relinearizeThreshold)
Find the set of variables to be relinearized according to relinearizeThreshold.
Definition ISAM2-impl.h:345
\n+
static KeySet CheckRelinearizationPartial(const ISAM2::Roots &roots, const VectorValues &delta, const ISAM2Params::RelinearizationThreshold &relinearizeThreshold)
Find the set of variables to be relinearized according to relinearizeThreshold.
Definition ISAM2-impl.h:318
\n+
Implementation of the full ISAM2 algorithm for incremental nonlinear optimization.
Definition ISAM2.h:45
\n+
Base::sharedClique sharedClique
Shared pointer to a clique.
Definition ISAM2.h:103
\n+
Definition ISAM2Params.h:135
\n+
boost::variant< double, FastMap< char, Vector > > RelinearizationThreshold
Either a constant relinearization threshold or a per-variable-type set of thresholds.
Definition ISAM2Params.h:140
\n+
This struct is returned from ISAM2::update() and contains information about the update that is useful...
Definition ISAM2Result.h:41
\n+
This struct is used by ISAM2::update() to pass additional parameters to give the user a fine-grained ...
Definition ISAM2UpdateParams.h:32
\n+
bool force_relinearize
Relinearize any variables whose delta magnitude is sufficiently large (Params::relinearizeThreshold),...
Definition ISAM2UpdateParams.h:54
\n+
FactorIndices removeFactorIndices
Indices of factors to remove from system (default: empty)
Definition ISAM2UpdateParams.h:36
\n+
bool forceFullSolve
By default, iSAM2 uses a wildfire update scheme that stops updating when the deltas become too small ...
Definition ISAM2UpdateParams.h:71
\n+
boost::optional< FastList< Key > > extraReelimKeys
An optional set of nonlinear keys that iSAM2 will re-eliminate, regardless of the size of the linear ...
Definition ISAM2UpdateParams.h:49
\n+
boost::optional< FastList< Key > > noRelinKeys
An optional set of nonlinear keys that iSAM2 will hold at a constant linearization point,...
Definition ISAM2UpdateParams.h:44
\n+
boost::optional< FastMap< FactorIndex, KeySet > > newAffectedKeys
An optional set of new Keys that are now affected by factors, indexed by factor indices (as returned ...
Definition ISAM2UpdateParams.h:66
\n+
Definition NonlinearFactorGraph.h:55
\n+
void print(const std::string &str="NonlinearFactorGraph: ", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition NonlinearFactorGraph.cpp:55
\n+
double error(const Values &values) const
unnormalized error, in the most common case
Definition NonlinearFactorGraph.cpp:170
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
A key-value pair, which you get by dereferencing iterators.
Definition Values.h:93
\n
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,157 +1,689 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-CustomFactor.h\n+ISAM2-impl.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-21\n-22namespace _\bg_\bt_\bs_\ba_\bm {\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh>\n 23\n-24using JacobianVector = std::vector;\n-25\n-26class CustomFactor;\n-27\n-28/*\n-29 * NOTE\n-30 * ==========\n-31 * pybind11 will invoke a copy if this is `JacobianVector &`, and\n-modifications in Python will not be reflected.\n-32 *\n-33 * This is safe because this is passing a const pointer, and pybind11 will\n-maintain the `std::vector` memory layout.\n-34 * Thus the pointer will never be invalidated.\n-35 */\n-36using CustomErrorFunction = std::function;\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bd_\be_\bb_\bu_\bg_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh> // We need the inst file\n+because we'll make a special JT templated on ISAM2\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+30\n+31#include \n+32#include \n+33namespace br {\n+34using namespace boost::range;\n+35using namespace boost::adaptors;\n+36} // namespace br\n 37\n-_\b4_\b5class _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br {\n-46protected:\n-47 CustomErrorFunction error_function_;\n-48\n-49protected:\n-50\n-51 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br;\n-52 using _\bT_\bh_\bi_\bs = _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br;\n+38#include \n+39#include \n+40#include \n+41#include \n+42\n+43namespace _\bg_\bt_\bs_\ba_\bm {\n+44\n+45/* *************************************************************************\n+*/\n+46// Special BayesTree class that uses ISAM2 cliques - this is the result of\n+47// reeliminating ISAM2 subtrees.\n+_\b4_\b8class _\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be : public _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bB_\ba_\bs_\be {\n+49 public:\n+50 typedef _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bB_\ba_\bs_\be _\bB_\ba_\bs_\be;\n+51 typedef _\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+52 typedef boost::shared_ptr shared_ptr;\n 53\n-54public:\n-55\n-_\b5_\b9 _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br() = default;\n-60\n-_\b6_\b7 _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &_\bk_\be_\by_\bs,\n-const CustomErrorFunction &errorFunction) :\n-68 _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, _\bk_\be_\by_\bs) {\n-69 this->error_function_ = errorFunction;\n-70 }\n-71\n-72 _\b~_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br() override = default;\n-73\n-78 Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs &x, boost::optional\n-&> H = boost::none) const override;\n-79\n-81 void _\bp_\br_\bi_\bn_\bt(const std::string &s,\n-82 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter) const override;\n+54 _\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() {}\n+55};\n+56\n+57/* *************************************************************************\n+*/\n+58// Special JunctionTree class that produces ISAM2 BayesTree cliques, used for\n+59// reeliminating ISAM2 subtrees.\n+_\b6_\b0class _\bI_\bS_\bA_\bM_\b2_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+61 : public _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n+62 public:\n+63 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n+64 typedef _\bI_\bS_\bA_\bM_\b2_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+65 typedef boost::shared_ptr shared_ptr;\n+66\n+67 explicit _\bI_\bS_\bA_\bM_\b2_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be& eliminationTree)\n+68 : _\bB_\ba_\bs_\be(eliminationTree) {}\n+69};\n+70\n+71/* *************************************************************************\n+*/\n+_\b7_\b2struct GTSAM_EXPORT _\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl {\n+_\b7_\b3 struct GTSAM_EXPORT _\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\bo_\bl_\bv_\be_\bR_\be_\bs_\bu_\bl_\bt {\n+74 _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be bayesTree;\n+75 };\n+76\n+_\b7_\b7 struct GTSAM_EXPORT _\bR_\be_\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\bM_\bo_\bd_\be {\n+78 size_t nFullSystemVars;\n+79 enum { /*AS_ADDED,*/ COLAMD } algorithm;\n+80 enum { NO_CONSTRAINT, CONSTRAIN_LAST } constrain;\n+81 boost::optional > constrainedKeys;\n+82 };\n 83\n-_\b8_\b7 bool _\bs_\be_\bn_\bd_\ba_\bb_\bl_\be() const override {\n-88 return false;\n-89 }\n-90\n-91private:\n-92\n-_\b9_\b4 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-95 template\n-96 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-97 ar & boost::serialization::make_nvp(\"CustomFactor\",\n-98 boost::serialization::base_object(*this));\n-99 }\n-100};\n-101\n-102}\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+87 static size_t UpdateGaussNewtonDelta(const ISAM2::Roots& roots,\n+88 const _\bK_\be_\by_\bS_\be_\bt& replacedKeys,\n+89 double wildfireThreshold,\n+90 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta);\n+91\n+96 static size_t UpdateRgProd(const ISAM2::Roots& roots,\n+97 const _\bK_\be_\by_\bS_\be_\bt& replacedKeys,\n+98 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gradAtZero,\n+99 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* RgProd);\n+100\n+104 static _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs ComputeGradientSearch(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gradAtZero,\n+105 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& RgProd);\n+106};\n+107\n+108/* *************************************************************************\n+*/\n+_\b1_\b1_\b4struct GTSAM_EXPORT _\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl {\n+115 const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs& params_;\n+116 const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams_;\n+117 _\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl(const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs& params, const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs&\n+updateParams)\n+118 : params_(params), updateParams_(updateParams) {}\n+119\n+120 // Provide some debugging information at the start of update\n+121 static void LogStartingUpdate(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n+122 const _\bI_\bS_\bA_\bM_\b2& isam2) {\n+123 gttic(pushBackFactors);\n+124 const bool debug = ISDEBUG(\"ISAM2 update\");\n+125 const bool verbose = ISDEBUG(\"ISAM2 update verbose\");\n+126\n+127 if (verbose) {\n+128 std::cout << \"ISAM2::update\\n\";\n+129 isam2._\bp_\br_\bi_\bn_\bt(\"ISAM2: \");\n+130 }\n+131\n+132 if (debug || verbose) {\n+133 newFactors._\bp_\br_\bi_\bn_\bt(\"The new factors are: \");\n+134 }\n+135 }\n+136\n+137 // Check relinearization if we're at the nth step, or we are using a looser\n+138 // loop relinerization threshold.\n+139 bool relinarizationNeeded(size_t update_count) const {\n+140 return updateParams_._\bf_\bo_\br_\bc_\be_\b__\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be ||\n+141 (params_.enableRelinearization &&\n+142 update_count % params_.relinearizeSkip == 0);\n+143 }\n+144\n+145 // Add any new factors \\Factors:=\\Factors\\cup\\Factors'.\n+146 void pushBackFactors(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n+147 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh* nonlinearFactors,\n+148 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh* linearFactors,\n+149 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx* variableIndex,\n+150 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs* newFactorsIndices,\n+151 _\bK_\be_\by_\bS_\be_\bt* keysWithRemovedFactors) const {\n+152 gttic(pushBackFactors);\n+153\n+154 // Perform the first part of the bookkeeping updates for adding new\n+factors.\n+155 // Adds them to the complete list of nonlinear factors, and populates the\n+156 // list of new factor indices, both optionally finding and reusing empty\n+157 // factor slots.\n+158 *newFactorsIndices = nonlinearFactors->_\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs(\n+159 newFactors, params_.findUnusedFactorSlots);\n+160\n+161 // Remove the removed factors\n+162 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh removedFactors;\n+163 removedFactors._\br_\be_\bs_\be_\br_\bv_\be(updateParams_._\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs.size());\n+164 for (const auto index : updateParams_._\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs) {\n+165 removedFactors._\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(nonlinearFactors->_\ba_\bt(index));\n+166 nonlinearFactors->_\br_\be_\bm_\bo_\bv_\be(index);\n+167 if (params_.cacheLinearizedFactors) linearFactors->_\br_\be_\bm_\bo_\bv_\be(index);\n+168 }\n+169\n+170 // Remove removed factors from the variable index so we do not attempt to\n+171 // relinearize them\n+172 variableIndex->_\br_\be_\bm_\bo_\bv_\be(updateParams_._\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs.begin(),\n+173 updateParams_._\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs.end(),\n+174 removedFactors);\n+175 *keysWithRemovedFactors = removedFactors._\bk_\be_\by_\bs();\n+176 }\n+177\n+178 // Get keys from removed factors and new factors, and compute unused keys,\n+179 // i.e., keys that are empty now and do not appear in the new factors.\n+180 void computeUnusedKeys(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n+181 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& variableIndex,\n+182 const _\bK_\be_\by_\bS_\be_\bt& keysWithRemovedFactors,\n+183 _\bK_\be_\by_\bS_\be_\bt* unusedKeys) const {\n+184 gttic(computeUnusedKeys);\n+185 _\bK_\be_\by_\bS_\be_\bt removedAndEmpty;\n+186 for (_\bK_\be_\by key : keysWithRemovedFactors) {\n+187 if (variableIndex._\be_\bm_\bp_\bt_\by(key))\n+188 removedAndEmpty.insert(removedAndEmpty.end(), key);\n+189 }\n+190 _\bK_\be_\by_\bS_\be_\bt newFactorSymbKeys = newFactors._\bk_\be_\by_\bs();\n+191 std::set_difference(removedAndEmpty.begin(), removedAndEmpty.end(),\n+192 newFactorSymbKeys.begin(), newFactorSymbKeys.end(),\n+193 std::inserter(*unusedKeys, unusedKeys->end()));\n+194 }\n+195\n+196 // Calculate nonlinear error\n+197 void error(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& nonlinearFactors,\n+198 const _\bV_\ba_\bl_\bu_\be_\bs& estimate, boost::optional* result) const {\n+199 gttic(error);\n+200 result->reset(nonlinearFactors._\be_\br_\br_\bo_\br(estimate));\n+201 }\n+202\n+203 // Mark linear update\n+204 void gatherInvolvedKeys(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n+205 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& nonlinearFactors,\n+206 const _\bK_\be_\by_\bS_\be_\bt& keysWithRemovedFactors,\n+207 _\bK_\be_\by_\bS_\be_\bt* markedKeys) const {\n+208 gttic(gatherInvolvedKeys);\n+209 *markedKeys = newFactors._\bk_\be_\by_\bs(); // Get keys from new factors\n+210 // Also mark keys involved in removed factors\n+211 markedKeys->insert(keysWithRemovedFactors.begin(),\n+212 keysWithRemovedFactors.end());\n+213\n+214 // Also mark any provided extra re-eliminate keys\n+215 if (updateParams_._\be_\bx_\bt_\br_\ba_\bR_\be_\be_\bl_\bi_\bm_\bK_\be_\by_\bs) {\n+216 for (_\bK_\be_\by key : *updateParams_._\be_\bx_\bt_\br_\ba_\bR_\be_\be_\bl_\bi_\bm_\bK_\be_\by_\bs) {\n+217 markedKeys->insert(key);\n+218 }\n+219 }\n+220\n+221 // Also, keys that were not observed in existing factors, but whose\n+affected\n+222 // keys have been extended now (e.g. smart factors)\n+223 if (updateParams_._\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs) {\n+224 for (const auto& factorAddedKeys : *updateParams_._\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs) {\n+225 const auto factorIdx = factorAddedKeys.first;\n+226 const auto& affectedKeys = nonlinearFactors._\ba_\bt(factorIdx)->keys();\n+227 markedKeys->insert(affectedKeys.begin(), affectedKeys.end());\n+228 }\n+229 }\n+230 }\n+231\n+232 // Update detail, unused, and observed keys from markedKeys\n+233 void updateKeys(const _\bK_\be_\by_\bS_\be_\bt& markedKeys, _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt* result) const {\n+234 gttic(updateKeys);\n+235 // Observed keys for detailed results\n+236 if (result->detail && params_.enableDetailedResults) {\n+237 for (_\bK_\be_\by key : markedKeys) {\n+238 result->detail->variableStatus[key].isObserved = true;\n+239 }\n+240 }\n+241\n+242 for (_\bK_\be_\by index : markedKeys) {\n+243 // Only add if not unused\n+244 if (result->unusedKeys.find(index) == result->unusedKeys.end())\n+245 // Make a copy of these, as we'll soon add to them\n+246 result->observedKeys.push_back(index);\n+247 }\n+248 }\n+249\n+250 static void CheckRelinearizationRecursiveMap(\n+251 const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b>& thresholds, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta,\n+252 const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& clique, _\bK_\be_\by_\bS_\be_\bt* relinKeys) {\n+253 // Check the current clique for relinearization\n+254 bool relinearize = false;\n+255 for (_\bK_\be_\by var : *clique->conditional()) {\n+256 // Find the threshold for this variable type\n+257 const Vector& threshold = thresholds.find(_\bS_\by_\bm_\bb_\bo_\bl(var)._\bc_\bh_\br())->second;\n+258\n+259 const Vector& deltaVar = delta[var];\n+260\n+261 // Verify the threshold vector matches the actual variable size\n+262 if (threshold.rows() != deltaVar.rows())\n+263 throw std::invalid_argument(\n+264 \"Relinearization threshold vector dimensionality for '\" +\n+265 std::string(1, _\bS_\by_\bm_\bb_\bo_\bl(var).chr()) +\n+266 \"' passed into iSAM2 parameters does not match actual variable \"\n+267 \"dimensionality.\");\n+268\n+269 // Check for relinearization\n+270 if ((deltaVar.array().abs() > threshold.array()).any()) {\n+271 relinKeys->insert(var);\n+272 relinearize = true;\n+273 }\n+274 }\n+275\n+276 // If this node was relinearized, also check its children\n+277 if (relinearize) {\n+278 for (const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& child : clique->children) {\n+279 CheckRelinearizationRecursiveMap(thresholds, delta, child, relinKeys);\n+280 }\n+281 }\n+282 }\n+283\n+284 static void CheckRelinearizationRecursiveDouble(\n+285 double threshold, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta,\n+286 const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& clique, _\bK_\be_\by_\bS_\be_\bt* relinKeys) {\n+287 // Check the current clique for relinearization\n+288 bool relinearize = false;\n+289 for (_\bK_\be_\by var : *clique->conditional()) {\n+290 double maxDelta = delta[var].lpNorm();\n+291 if (maxDelta >= threshold) {\n+292 relinKeys->insert(var);\n+293 relinearize = true;\n+294 }\n+295 }\n+296\n+297 // If this node was relinearized, also check its children\n+298 if (relinearize) {\n+299 for (const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& child : clique->children) {\n+300 CheckRelinearizationRecursiveDouble(threshold, delta, child, relinKeys);\n+301 }\n+302 }\n+303 }\n+304\n+_\b3_\b1_\b8 static _\bK_\be_\by_\bS_\be_\bt _\bC_\bh_\be_\bc_\bk_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\bt_\bi_\ba_\bl(\n+319 const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bR_\bo_\bo_\bt_\bs& roots, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta,\n+320 const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd& relinearizeThreshold) {\n+321 _\bK_\be_\by_\bS_\be_\bt relinKeys;\n+322 for (const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root : roots) {\n+323 if (relinearizeThreshold.type() == typeid(double))\n+324 CheckRelinearizationRecursiveDouble(\n+325 boost::get(relinearizeThreshold), delta, root, &relinKeys);\n+326 else if (relinearizeThreshold.type() == typeid(_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b>))\n+327 CheckRelinearizationRecursiveMap(\n+328 boost::get<_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b> >(relinearizeThreshold), delta,\n+329 root, &relinKeys);\n+330 }\n+331 return relinKeys;\n+332 }\n+333\n+_\b3_\b4_\b5 static _\bK_\be_\by_\bS_\be_\bt _\bC_\bh_\be_\bc_\bk_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bl_\bl(\n+346 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta,\n+347 const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd& relinearizeThreshold) {\n+348 _\bK_\be_\by_\bS_\be_\bt relinKeys;\n+349\n+350 if (const double* threshold = boost::get(&relinearizeThreshold)) {\n+351 for (const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br& key_delta : delta) {\n+352 double maxDelta = key_delta.second.lpNorm();\n+353 if (maxDelta >= *threshold) relinKeys.insert(key_delta.first);\n+354 }\n+355 } else if (const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b>* thresholds =\n+356 boost::get<_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b> >(&relinearizeThreshold)) {\n+357 for (const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br& key_delta : delta) {\n+358 const Vector& threshold =\n+359 thresholds->find(_\bS_\by_\bm_\bb_\bo_\bl(key_delta.first)._\bc_\bh_\br())->second;\n+360 if (threshold.rows() != key_delta.second.rows())\n+361 throw std::invalid_argument(\n+362 \"Relinearization threshold vector dimensionality for '\" +\n+363 std::string(1, _\bS_\by_\bm_\bb_\bo_\bl(key_delta.first)._\bc_\bh_\br()) +\n+364 \"' passed into iSAM2 parameters does not match actual variable \"\n+365 \"dimensionality.\");\n+366 if ((key_delta.second.array().abs() > threshold.array()).any())\n+367 relinKeys.insert(key_delta.first);\n+368 }\n+369 }\n+370\n+371 return relinKeys;\n+372 }\n+373\n+374 // Mark keys in \\Delta above threshold \\beta:\n+375 _\bK_\be_\by_\bS_\be_\bt gatherRelinearizeKeys(const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bR_\bo_\bo_\bt_\bs& roots,\n+376 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta,\n+377 const _\bK_\be_\by_\bS_\be_\bt& fixedVariables,\n+378 _\bK_\be_\by_\bS_\be_\bt* markedKeys) const {\n+379 gttic(gatherRelinearizeKeys);\n+380 // J=\\{\\Delta_{j}\\in\\Delta|\\Delta_{j}\\geq\\beta\\}.\n+381 _\bK_\be_\by_\bS_\be_\bt relinKeys =\n+382 params_.enablePartialRelinearizationCheck\n+383 ? CheckRelinearizationPartial(roots, delta,\n+384 params_.relinearizeThreshold)\n+385 : CheckRelinearizationFull(delta, params_.relinearizeThreshold);\n+386 if (updateParams_._\bf_\bo_\br_\bc_\be_\bF_\bu_\bl_\bl_\bS_\bo_\bl_\bv_\be)\n+387 relinKeys = CheckRelinearizationFull(delta, 0.0); // for debugging\n+388\n+389 // Remove from relinKeys any keys whose linearization points are fixed\n+390 for (_\bK_\be_\by key : fixedVariables) {\n+391 relinKeys.erase(key);\n+392 }\n+393 if (updateParams_._\bn_\bo_\bR_\be_\bl_\bi_\bn_\bK_\be_\by_\bs) {\n+394 for (Key key : *updateParams_.noRelinKeys) {\n+395 relinKeys.erase(key);\n+396 }\n+397 }\n+398\n+399 // Add the variables being relinearized to the marked keys\n+400 markedKeys->insert(relinKeys.begin(), relinKeys.end());\n+401 return relinKeys;\n+402 }\n+403\n+404 // Record relinerization threshold keys in detailed results\n+405 void recordRelinearizeDetail(const KeySet& relinKeys,\n+406 ISAM2Result::DetailedResults* detail) const {\n+407 if (detail && params_.enableDetailedResults) {\n+408 for (Key key : relinKeys) {\n+409 detail->variableStatus[key].isAboveRelinThreshold = true;\n+410 detail->variableStatus[key].isRelinearized = true;\n+411 }\n+412 }\n+413 }\n+414\n+415 // Mark all cliques that involve marked variables \\Theta_{J} and all\n+416 // their ancestors.\n+417 void findFluid(const ISAM2::Roots& roots, const KeySet& relinKeys,\n+418 KeySet* markedKeys,\n+419 ISAM2Result::DetailedResults* detail) const {\n+420 gttic(findFluid);\n+421 for (const auto& root : roots)\n+422 // add other cliques that have the marked ones in the separator\n+423 root->findAll(relinKeys, markedKeys);\n+424\n+425 // Relinearization-involved keys for detailed results\n+426 if (detail && params_.enableDetailedResults) {\n+427 KeySet involvedRelinKeys;\n+428 for (const auto& root : roots)\n+429 root->findAll(relinKeys, &involvedRelinKeys);\n+430 for (Key key : involvedRelinKeys) {\n+431 if (!detail->variableStatus[key].isAboveRelinThreshold) {\n+432 detail->variableStatus[key].isRelinearizeInvolved = true;\n+433 detail->variableStatus[key].isRelinearized = true;\n+434 }\n+435 }\n+436 }\n+437 }\n+438\n+439 // Linearize new factors\n+440 void linearizeNewFactors(const NonlinearFactorGraph& newFactors,\n+441 const _\bV_\ba_\bl_\bu_\be_\bs& theta, size_t numNonlinearFactors,\n+442 const FactorIndices& newFactorsIndices,\n+443 GaussianFactorGraph* linearFactors) const {\n+444 gttic(linearizeNewFactors);\n+445 auto linearized = newFactors.linearize(theta);\n+446 if (params_.findUnusedFactorSlots) {\n+447 linearFactors->resize(numNonlinearFactors);\n+448 for (size_t i = 0; i < newFactors.size(); ++i)\n+449 (*linearFactors)[newFactorsIndices[i]] = (*linearized)[i];\n+450 } else {\n+451 linearFactors->push_back(*linearized);\n+452 }\n+453 assert(linearFactors->size() == numNonlinearFactors);\n+454 }\n+455\n+456 void augmentVariableIndex(const NonlinearFactorGraph& newFactors,\n+457 const FactorIndices& newFactorsIndices,\n+458 VariableIndex* variableIndex) const {\n+459 gttic(augmentVariableIndex);\n+460 // Augment the variable index with the new factors\n+461 if (params_.findUnusedFactorSlots)\n+462 variableIndex->augment(newFactors, newFactorsIndices);\n+463 else\n+464 variableIndex->augment(newFactors);\n+465\n+466 // Augment it with existing factors which now affect to more variables:\n+467 if (updateParams_._\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs) {\n+468 for (const auto& factorAddedKeys : *updateParams_.newAffectedKeys) {\n+469 const auto factorIdx = factorAddedKeys.first;\n+470 variableIndex->augmentExistingFactor(factorIdx, factorAddedKeys.second);\n+471 }\n+472 }\n+473 }\n+474\n+475 static void LogRecalculateKeys(const ISAM2Result& result) {\n+476 const bool debug = ISDEBUG(\"ISAM2 recalculate\");\n+477\n+478 if (debug) {\n+479 std::cout << \"markedKeys: \";\n+480 for (const Key key : result.markedKeys) {\n+481 std::cout << key << \" \";\n+482 }\n+483 std::cout << std::endl;\n+484 std::cout << \"observedKeys: \";\n+485 for (const Key key : result.observedKeys) {\n+486 std::cout << key << \" \";\n+487 }\n+488 std::cout << std::endl;\n+489 }\n+490 }\n+491\n+492 static FactorIndexSet GetAffectedFactors(const KeyList& keys,\n+493 const VariableIndex& variableIndex) {\n+494 gttic(GetAffectedFactors);\n+495 FactorIndexSet indices;\n+496 for (const Key key : keys) {\n+497 const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& factors(variableIndex[key]);\n+498 indices.insert(factors.begin(), factors.end());\n+499 }\n+500 return indices;\n+501 }\n+502\n+503 // find intermediate (linearized) factors from cache that are passed into\n+504 // the affected area\n+505 static GaussianFactorGraph GetCachedBoundaryFactors(\n+506 const ISAM2::Cliques& orphans) {\n+507 GaussianFactorGraph cachedBoundary;\n+508\n+509 for (const auto& orphan : orphans) {\n+510 // retrieve the cached factor and add to boundary\n+511 cachedBoundary.push_back(orphan->cachedFactor());\n+512 }\n+513\n+514 return cachedBoundary;\n+515 }\n+516};\n+517\n+518} // namespace gtsam\n+_\bd_\be_\bb_\bu_\bg_\b._\bh\n+Global debugging flags.\n+_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n+_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+The junction tree, template bodies.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n+_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh\n+Class that stores detailed iSAM2 result.\n+_\bI_\bS_\bA_\bM_\b2_\b._\bh\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n-Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix >\n-& > H=boost::none) const override\n-Calls the errorFunction closure, which is a std::function object One can check\n-if a derivative is nee...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.cpp:25\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br\n-CustomFactor(const SharedNoiseModel &noiseModel, const KeyVector &keys, const\n-CustomErrorFunction &errorFunction)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br\n-CustomFactor()=default\n-Default Constructor for I/O.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\be_\bn_\bd_\ba_\bb_\bl_\be\n-bool sendable() const override\n-Mark not sendable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s, const KeyFormatter\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+FastVector< FactorIndex > FactorIndices\n+Define collection types:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bk_\be_\by_\bs\n+KeySet keys() const\n+Potentially slow function to return all keys involved, sorted, as a set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs\n+FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)\n+Add new factors to a factor graph and returns a list of new factor indices,\n+optionally finding and re...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)\n+Add a factor directly using a shared_ptr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bm_\bo_\bv_\be\n+void remove(size_t i)\n+delete factor without re-arranging indexes by inserting a nullptr pointer\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:385\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bt\n+const sharedFactor at(size_t i) const\n+Get a specific factor by index (this checks array bounds and may throw an\n+exception,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:335\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bs_\be_\br_\bv_\be\n+void reserve(size_t size)\n+Reserve space for the specified number of factors if you know in advance how\n+many there will be (work...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:182\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\b _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\b _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>_\b:_\b:_\bR_\bo_\bo_\bt_\bs\n+FastVector< sharedClique > Roots\n+Root cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+A JunctionTree is a cluster tree, a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl\n+Character and index key used to refer to variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Symbol.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\b:_\b:_\bc_\bh_\br\n+unsigned char chr() const\n+Retrieve key character.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Symbol.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+The VariableIndex class computes and stores the block column structure of a\n+factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\br_\be_\bm_\bo_\bv_\be\n+void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG &factors)\n+Remove entries corresponding to the specified factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex-inl.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty(Key variable) const\n+Return true if no factors associated with a variable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl_\b:_\b:_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\bo_\bl_\bv_\be_\bR_\be_\bs_\bu_\bl_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl_\b:_\b:_\bR_\be_\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\bM_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl\n+Implementation functions for update method All of the methods below have clear\n+inputs and outputs,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl_\b:_\b:_\bC_\bh_\be_\bc_\bk_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bl_\bl\n+static KeySet CheckRelinearizationFull(const VectorValues &delta, const\n+ISAM2Params::RelinearizationThreshold &relinearizeThreshold)\n+Find the set of variables to be relinearized according to relinearizeThreshold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:345\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl_\b:_\b:_\bC_\bh_\be_\bc_\bk_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\bt_\bi_\ba_\bl\n+static KeySet CheckRelinearizationPartial(const ISAM2::Roots &roots, const\n+VectorValues &delta, const ISAM2Params::RelinearizationThreshold\n+&relinearizeThreshold)\n+Find the set of variables to be relinearized according to relinearizeThreshold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:318\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2\n+Implementation of the full ISAM2 algorithm for incremental nonlinear\n+optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be\n+Base::sharedClique sharedClique\n+Shared pointer to a clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+boost::variant< double, FastMap< char, Vector > > RelinearizationThreshold\n+Either a constant relinearization threshold or a per-variable-type set of\n+thresholds.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt\n+This struct is returned from ISAM2::update() and contains information about the\n+update that is useful...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs\n+This struct is used by ISAM2::update() to pass additional parameters to give\n+the user a fine-grained ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bf_\bo_\br_\bc_\be_\b__\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+bool force_relinearize\n+Relinearize any variables whose delta magnitude is sufficiently large (Params::\n+relinearizeThreshold),...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+FactorIndices removeFactorIndices\n+Indices of factors to remove from system (default: empty)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bf_\bo_\br_\bc_\be_\bF_\bu_\bl_\bl_\bS_\bo_\bl_\bv_\be\n+bool forceFullSolve\n+By default, iSAM2 uses a wildfire update scheme that stops updating when the\n+deltas become too small ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bx_\bt_\br_\ba_\bR_\be_\be_\bl_\bi_\bm_\bK_\be_\by_\bs\n+boost::optional< FastList< Key > > extraReelimKeys\n+An optional set of nonlinear keys that iSAM2 will re-eliminate, regardless of\n+the size of the linear ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bn_\bo_\bR_\be_\bl_\bi_\bn_\bK_\be_\by_\bs\n+boost::optional< FastList< Key > > noRelinKeys\n+An optional set of nonlinear keys that iSAM2 will hold at a constant\n+linearization point,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs\n+boost::optional< FastMap< FactorIndex, KeySet > > newAffectedKeys\n+An optional set of new Keys that are now affected by factors, indexed by factor\n+indices (as returned ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &str=\"NonlinearFactorGraph: \", const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.cpp:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n-density Templated on...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-NoiseModelFactor()\n-Default constructor for I/O only.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-const SharedNoiseModel & noiseModel() const\n-access to the noise model\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.cpp:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &values) const\n+unnormalized error, in the most common case\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.cpp:170\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+A key-value pair, which you get by dereferencing iterators.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:93\n _\bV_\ba_\bl_\bu_\be_\bs\n In nonlinear factors, the error function returns the negative log-likelihood as\n a non-linear function...\n+_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bI_\bS_\bA_\bM_\b2_\b-_\bi_\bm_\bp_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01061_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01061_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearISAM.h Source File\n \n \n \n \n \n \n \n@@ -98,474 +98,118 @@\n
No Matches
\n \n \n \n \n \n
\n-
Values-inl.h
\n+
NonlinearISAM.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
25#pragma once
\n-
26
\n-
27#include <utility>
\n-
28#include <boost/bind/bind.hpp>
\n-\n-
30
\n-
31namespace gtsam {
\n+
18#pragma once
\n+
19
\n+\n+\n+
22
\n+
23namespace gtsam {
\n+
\n+
27class GTSAM_EXPORT NonlinearISAM {
\n+
28protected:
\n+
29
\n+\n
32
\n-
33
\n-
34 /* ************************************************************************* */
\n-
35 template<class ValueType>
\n-
\n-\n-
37 const Key key;
\n-
38 ValueType& value;
\n-
39
\n-
40 _ValuesKeyValuePair(Key _key, ValueType& _value) : key(_key), value(_value) {}
\n-
41 };
\n-
\n+\n+
35
\n+\n+
38
\n+\n+
41 int reorderCounter_;
\n
42
\n-
43 /* ************************************************************************* */
\n-
44 template<class ValueType>
\n-
\n-\n-
46 const Key key;
\n-
47 const ValueType& value;
\n-
48
\n-
49 _ValuesConstKeyValuePair(Key _key, const ValueType& _value) :
\n-
50 key(_key), value(_value) {
\n-
51 }
\n-\n-
53 key(rhs.key), value(rhs.value) {
\n-
54 }
\n-
55 };
\n-
\n-
56
\n-
57 /* ************************************************************************* */
\n-
58
\n-
59 // Cast helpers for making _Values[Const]KeyValuePair's from Values::[Const]KeyValuePair
\n-
60 // need to use a struct here for later partial specialization
\n-
61 template<class ValueType, class CastedKeyValuePairType, class KeyValuePairType>
\n-
\n-\n-
63 static CastedKeyValuePairType cast(KeyValuePairType key_value) {
\n-
64 // Static cast because we already checked the type during filtering
\n-
65 return CastedKeyValuePairType(key_value.key,
\n-
66 const_cast<GenericValue<ValueType>&>(static_cast<const GenericValue<
\n-
67 ValueType>&>(key_value.value)).value());
\n-
68 }
\n-
69 };
\n-
\n-
70 // partial specialized version for ValueType == Value
\n-
71 template<class CastedKeyValuePairType, class KeyValuePairType>
\n-
\n-
72 struct ValuesCastHelper<Value, CastedKeyValuePairType, KeyValuePairType> {
\n-
73 static CastedKeyValuePairType cast(KeyValuePairType key_value) {
\n-
74 // Static cast because we already checked the type during filtering
\n-
75 // in this case the casted and keyvalue pair are essentially the same type
\n-
76 // (key, Value&) so perhaps this could be done with just a cast of the key_value?
\n-
77 return CastedKeyValuePairType(key_value.key, key_value.value);
\n-
78 }
\n-
79 };
\n-
\n-
80 // partial specialized version for ValueType == Value
\n-
81 template<class CastedKeyValuePairType, class KeyValuePairType>
\n-
\n-
82 struct ValuesCastHelper<const Value, CastedKeyValuePairType, KeyValuePairType> {
\n-
83 static CastedKeyValuePairType cast(KeyValuePairType key_value) {
\n-
84 // Static cast because we already checked the type during filtering
\n-
85 // in this case the casted and keyvalue pair are essentially the same type
\n-
86 // (key, Value&) so perhaps this could be done with just a cast of the key_value?
\n-
87 return CastedKeyValuePairType(key_value.key, key_value.value);
\n-
88 }
\n-
89 };
\n-
\n-
90
\n-
91/* ************************************************************************* */
\n-
92 template <class ValueType>
\n-
93 std::map<Key, ValueType>
\n-
\n-
94 Values::extract(const std::function<bool(Key)>& filterFcn) const {
\n-
95 std::map<Key, ValueType> result;
\n-
96 for (const auto& key_value : values_) {
\n-
97 // Check if key matches
\n-
98 if (filterFcn(key_value.first)) {
\n-
99 // Check if type matches (typically does as symbols matched with types)
\n-
100 if (auto t =
\n-
101 dynamic_cast<const GenericValue<ValueType>*>(key_value.second))
\n-
102 result[key_value.first] = t->value();
\n-
103 }
\n-
104 }
\n-
105 return result;
\n-
106 }
\n-
\n+\n+
45
\n+
46public:
\n+
47
\n+
50
\n+
\n+
58 NonlinearISAM(int reorderInterval = 1,
\n+
59 const GaussianFactorGraph::Eliminate& eliminationFunction = GaussianFactorGraph::EliminationTraitsType::DefaultEliminate) :
\n+
60 reorderInterval_(reorderInterval), reorderCounter_(0), eliminationFunction_(eliminationFunction) {}
\n+
\n+
61
\n+
65
\n+
67 Values estimate() const;
\n+
68
\n+
70 Matrix marginalCovariance(Key key) const;
\n+
71
\n+
72 // access
\n+
73
\n+
75 const GaussianISAM& bayesTree() const { return isam_; }
\n+
76
\n+
78 const Values& getLinearizationPoint() const { return linPoint_; }
\n+
79
\n+
81 const NonlinearFactorGraph& getFactorsUnsafe() const { return factors_; }
\n+
82
\n+
84 int reorderInterval() const { return reorderInterval_; }
\n+
\n+
85 int reorderCounter() const { return reorderCounter_; }
\n+
86
\n+
88 void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
89
\n+
91 void printStats() const;
\n+
92
\n+
94 void saveGraph(const std::string& s, const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
95
\n+
99
\n+
101 void update(const NonlinearFactorGraph& newFactors, const Values& initialValues);
\n+
102
\n+
104 void reorder_relinearize();
\n+
105
\n
107
\n-
108/* ************************************************************************* */
\n-
109#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
110#include <boost/bind/bind.hpp>
\n-
111
\n-
112 template<class ValueType>
\n-
113 class Values::Filtered {
\n-
114 public:
\n-
116 typedef _ValuesKeyValuePair<ValueType> KeyValuePair;
\n-
117 typedef _ValuesConstKeyValuePair<ValueType> ConstKeyValuePair;
\n-
118 typedef KeyValuePair value_type;
\n-
119
\n-
120 typedef
\n-
121 boost::transform_iterator<
\n-
122 KeyValuePair(*)(Values::KeyValuePair),
\n-
123 boost::filter_iterator<
\n-
124 std::function<bool(const Values::ConstKeyValuePair&)>,
\n-
125 Values::iterator> >
\n-
126 iterator;
\n-
127
\n-
128 typedef iterator const_iterator;
\n-
129
\n-
130 typedef
\n-
131 boost::transform_iterator<
\n-
132 ConstKeyValuePair(*)(Values::ConstKeyValuePair),
\n-
133 boost::filter_iterator<
\n-
134 std::function<bool(const Values::ConstKeyValuePair&)>,
\n-
135 Values::const_iterator> >
\n-
136 const_const_iterator;
\n-
137
\n-
138 iterator begin() { return begin_; }
\n-
139 iterator end() { return end_; }
\n-
140 const_iterator begin() const { return begin_; }
\n-
141 const_iterator end() const { return end_; }
\n-
142 const_const_iterator beginConst() const { return constBegin_; }
\n-
143 const_const_iterator endConst() const { return constEnd_; }
\n-
144
\n-
146 size_t size() const {
\n-
147 size_t i = 0;
\n-
148 for (const_const_iterator it = beginConst(); it != endConst(); ++it)
\n-
149 ++i;
\n-
150 return i;
\n-
151 }
\n-
152
\n-
153 private:
\n-
154 Filtered(
\n-
155 const std::function<bool(const Values::ConstKeyValuePair&)>& filter,
\n-
156 Values& values) :
\n-
157 begin_(
\n-
158 boost::make_transform_iterator(
\n-
159 boost::make_filter_iterator(filter, values.begin(), values.end()),
\n-
160 &ValuesCastHelper<ValueType, KeyValuePair, Values::KeyValuePair>::cast)), end_(
\n-
161 boost::make_transform_iterator(
\n-
162 boost::make_filter_iterator(filter, values.end(), values.end()),
\n-
163 &ValuesCastHelper<ValueType, KeyValuePair, Values::KeyValuePair>::cast)), constBegin_(
\n-
164 boost::make_transform_iterator(
\n-
165 boost::make_filter_iterator(filter,
\n-
166 values._begin(),
\n-
167 values._end()),
\n-
168 &ValuesCastHelper<ValueType, ConstKeyValuePair,
\n-
169 Values::ConstKeyValuePair>::cast)), constEnd_(
\n-
170 boost::make_transform_iterator(
\n-
171 boost::make_filter_iterator(filter,
\n-
172 values._end(),
\n-
173 values._end()),
\n-
174 &ValuesCastHelper<ValueType, ConstKeyValuePair,
\n-
175 Values::ConstKeyValuePair>::cast)) {
\n-
176 }
\n-
177
\n-
178 friend class Values;
\n-
179 iterator begin_;
\n-
180 iterator end_;
\n-
181 const_const_iterator constBegin_;
\n-
182 const_const_iterator constEnd_;
\n-
183 };
\n-
184
\n-
185 template<class ValueType>
\n-
186 class Values::ConstFiltered {
\n-
187 public:
\n-
189 typedef _ValuesConstKeyValuePair<ValueType> KeyValuePair;
\n-
190 typedef KeyValuePair value_type;
\n-
191
\n-
192 typedef typename Filtered<ValueType>::const_const_iterator iterator;
\n-
193 typedef typename Filtered<ValueType>::const_const_iterator const_iterator;
\n-
194
\n-
196 ConstFiltered(const Filtered<ValueType>& rhs) :
\n-
197 begin_(rhs.beginConst()),
\n-
198 end_(rhs.endConst()) {}
\n-
199
\n-
200 iterator begin() { return begin_; }
\n-
201 iterator end() { return end_; }
\n-
202 const_iterator begin() const { return begin_; }
\n-
203 const_iterator end() const { return end_; }
\n-
204
\n-
206 size_t size() const {
\n-
207 size_t i = 0;
\n-
208 for (const_iterator it = begin(); it != end(); ++it)
\n-
209 ++i;
\n-
210 return i;
\n-
211 }
\n-
212
\n-
213 FastList<Key> keys() const {
\n-
214 FastList<Key> result;
\n-
215 for(const_iterator it = begin(); it != end(); ++it)
\n-
216 result.push_back(it->key);
\n-
217 return result;
\n-
218 }
\n-
219
\n-
220 private:
\n-
221 friend class Values;
\n-
222 const_iterator begin_;
\n-
223 const_iterator end_;
\n-
224 ConstFiltered(
\n-
225 const std::function<bool(const Values::ConstKeyValuePair&)>& filter,
\n-
226 const Values& values) {
\n-
227 // We remove the const from values to create a non-const Filtered
\n-
228 // view, then pull the const_iterators out of it.
\n-
229 const Filtered<ValueType> filtered(filter, const_cast<Values&>(values));
\n-
230 begin_ = filtered.beginConst();
\n-
231 end_ = filtered.endConst();
\n-
232 }
\n-
233 };
\n-
234
\n-
235 template<class ValueType>
\n-
236 Values::Values(const Values::Filtered<ValueType>& view) {
\n-
237 for(const auto key_value: view) {
\n-
238 Key key = key_value.key;
\n-
239 insert(key, static_cast<const ValueType&>(key_value.value));
\n-
240 }
\n-
241 }
\n-
242
\n-
243 template<class ValueType>
\n-
244 Values::Values(const Values::ConstFiltered<ValueType>& view) {
\n-
245 for(const auto key_value: view) {
\n-
246 Key key = key_value.key;
\n-
247 insert(key, static_cast<const ValueType&>(key_value.value));
\n-
248 }
\n-
249 }
\n-
250
\n-
251 Values::Filtered<Value>
\n-
252 inline Values::filter(const std::function<bool(Key)>& filterFcn) {
\n-
253 return filter<Value>(filterFcn);
\n-
254 }
\n-
255
\n-
256 template<class ValueType>
\n-
257 Values::Filtered<ValueType>
\n-
258 Values::filter(const std::function<bool(Key)>& filterFcn) {
\n-
259 return Filtered<ValueType>(std::bind(&filterHelper<ValueType>, filterFcn,
\n-
260 std::placeholders::_1), *this);
\n-
261 }
\n-
262
\n-
263 Values::ConstFiltered<Value>
\n-
264 inline Values::filter(const std::function<bool(Key)>& filterFcn) const {
\n-
265 return filter<Value>(filterFcn);
\n-
266 }
\n-
267
\n-
268 template<class ValueType>
\n-
269 Values::ConstFiltered<ValueType>
\n-
270 Values::filter(const std::function<bool(Key)>& filterFcn) const {
\n-
271 return ConstFiltered<ValueType>(std::bind(&filterHelper<ValueType>,
\n-
272 filterFcn, std::placeholders::_1), *this);
\n-
273 }
\n-
274#endif
\n-
275
\n-
276 /* ************************************************************************* */
\n-
277 template<>
\n-
278 inline bool Values::filterHelper<Value>(const std::function<bool(Key)> filter,
\n-
279 const ConstKeyValuePair& key_value) {
\n-
280 // Filter and check the type
\n-
281 return filter(key_value.key);
\n-
282 }
\n-
283
\n-
284 /* ************************************************************************* */
\n-
285
\n-
286 namespace internal {
\n-
287
\n-
288 // Check the type and throw exception if incorrect
\n-
289 // Generic version, partially specialized below for various Eigen Matrix types
\n-
290 template <typename ValueType>
\n-
\n-
291 struct handle {
\n-
292 ValueType operator()(Key j, const Value* const pointer) {
\n-
293 auto ptr = dynamic_cast<const GenericValue<ValueType>*>(pointer);
\n-
294 if (ptr) {
\n-
295 // value returns a const ValueType&, and the return makes a copy !!!!!
\n-
296 return ptr->value();
\n-
297 } else {
\n-
298 throw ValuesIncorrectType(j, typeid(*pointer), typeid(ValueType));
\n-
299 }
\n-
300 }
\n-
301 };
\n-
\n-
302
\n-
303 template <typename MatrixType, bool isDynamic>
\n-\n-
305
\n-
306 // Handle dynamic matrices
\n-
307 template <int M, int N>
\n-
\n-
308 struct handle_matrix<Eigen::Matrix<double, M, N>, true> {
\n-
309 inline Eigen::Matrix<double, M, N> operator()(Key j, const Value* const pointer) {
\n-
310 auto ptr = dynamic_cast<const GenericValue<Eigen::Matrix<double, M, N>>*>(pointer);
\n-
311 if (ptr) {
\n-
312 // value returns a const Matrix&, and the return makes a copy !!!!!
\n-
313 return ptr->value();
\n-
314 } else {
\n-
315 // If a fixed matrix was stored, we end up here as well.
\n-
316 throw ValuesIncorrectType(j, typeid(*pointer), typeid(Eigen::Matrix<double, M, N>));
\n-
317 }
\n-
318 }
\n-
319 };
\n-
\n-
320
\n-
321 // Handle fixed matrices
\n-
322 template <int M, int N>
\n-
\n-
323 struct handle_matrix<Eigen::Matrix<double, M, N>, false> {
\n-
324 inline Eigen::Matrix<double, M, N> operator()(Key j, const Value* const pointer) {
\n-
325 auto ptr = dynamic_cast<const GenericValue<Eigen::Matrix<double, M, N>>*>(pointer);
\n-
326 if (ptr) {
\n-
327 // value returns a const MatrixMN&, and the return makes a copy !!!!!
\n-
328 return ptr->value();
\n-
329 } else {
\n-
330 Matrix A;
\n-
331 // Check if a dynamic matrix was stored
\n-
332 auto ptr = dynamic_cast<const GenericValue<Eigen::MatrixXd>*>(pointer);
\n-
333 if (ptr) {
\n-
334 A = ptr->value();
\n-
335 } else {
\n-
336 // Or a dynamic vector
\n-
337 A = handle_matrix<Eigen::VectorXd, true>()(j, pointer); // will throw if not....
\n-
338 }
\n-
339 // Yes: check size, and throw if not a match
\n-
340 if (A.rows() != M || A.cols() != N)
\n-
341 throw NoMatchFoundForFixed(M, N, A.rows(), A.cols());
\n-
342 else
\n-
343 return A; // copy but not malloc
\n-
344 }
\n-
345 }
\n-
346 };
\n-
\n-
347
\n-
348 // Handle matrices
\n-
349 template <int M, int N>
\n-
\n-
350 struct handle<Eigen::Matrix<double, M, N>> {
\n-
351 Eigen::Matrix<double, M, N> operator()(Key j, const Value* const pointer) {
\n-\n-
353 (M == Eigen::Dynamic || N == Eigen::Dynamic)>()(j, pointer);
\n-
354 }
\n-
355 };
\n-
\n-
356
\n-
357 } // internal
\n-
358
\n-
359 /* ************************************************************************* */
\n-
360 template <typename ValueType>
\n-
\n-
361 const ValueType Values::at(Key j) const {
\n-
362 // Find the item
\n-
363 KeyValueMap::const_iterator item = values_.find(j);
\n-
364
\n-
365 // Throw exception if it does not exist
\n-
366 if (item == values_.end()) throw ValuesKeyDoesNotExist("at", j);
\n-
367
\n-
368 // Check the type and throw exception if incorrect
\n-
369 // h() split in two lines to avoid internal compiler error (MSVC2017)
\n-\n-
371 return h(j, item->second);
\n-
372 }
\n-
\n-
373
\n-
374 /* ************************************************************************* */
\n-
375 template<typename ValueType>
\n-
\n-
376 boost::optional<const ValueType&> Values::exists(Key j) const {
\n-
377 // Find the item
\n-
378 KeyValueMap::const_iterator item = values_.find(j);
\n-
379
\n-
380 if(item != values_.end()) {
\n-
381 // dynamic cast the type and throw exception if incorrect
\n-
382 auto ptr = dynamic_cast<const GenericValue<ValueType>*>(item->second);
\n-
383 if (ptr) {
\n-
384 return ptr->value();
\n-
385 } else {
\n-
386 // NOTE(abe): clang warns about potential side effects if done in typeid
\n-
387 const Value* value = item->second;
\n-
388 throw ValuesIncorrectType(j, typeid(*value), typeid(ValueType));
\n-
389 }
\n-
390 } else {
\n-
391 return boost::none;
\n-
392 }
\n-
393 }
\n-
\n-
394
\n-
395 /* ************************************************************************* */
\n-
396
\n-
397 // insert a templated value
\n-
398 template<typename ValueType>
\n-
\n-
399 void Values::insert(Key j, const ValueType& val) {
\n-
400 insert(j, static_cast<const Value&>(GenericValue<ValueType>(val)));
\n-
401 }
\n-
\n-
402
\n-
403 // update with templated value
\n-
404 template <typename ValueType>
\n-
405 void Values::update(Key j, const ValueType& val) {
\n-
406 update(j, static_cast<const Value&>(GenericValue<ValueType>(val)));
\n-
407 }
\n-
408
\n-
409 // insert_or_assign with templated value
\n-
410 template <typename ValueType>
\n-
\n-
411 void Values::insert_or_assign(Key j, const ValueType& val) {
\n-
412 insert_or_assign(j, static_cast<const Value&>(GenericValue<ValueType>(val)));
\n-
413 }
\n-
\n-
414
\n-
415}
\n-
A non-templated config holding any types of Manifold-group elements.
\n+
108};
\n+
109
\n+
110} // \\namespace gtsam
\n+
\n+
\n+\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
Wraps any type T so it can play as a Value.
Definition GenericValue.h:47
\n-
const T & value() const
Return a constant value.
Definition GenericValue.h:67
\n-
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n-
Definition Values-inl.h:36
\n-
const Key key
The key.
Definition Values-inl.h:37
\n-
ValueType & value
The value.
Definition Values-inl.h:38
\n-
Definition Values-inl.h:45
\n-
const Key key
The key.
Definition Values-inl.h:46
\n-
const ValueType & value
The value.
Definition Values-inl.h:47
\n-
Definition Values-inl.h:62
\n-
Definition Values-inl.h:291
\n-
Definition Values-inl.h:304
\n-
void update(Key j, const Value &val)
single element change of existing element
Definition Values.cpp:180
\n-
std::map< Key, ValueType > extract(const std::function< bool(Key)> &filterFcn=&_truePredicate< Key >) const
Extract a subset of values of the given type ValueType.
Definition Values-inl.h:94
\n-
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n-
void insert(Key j, const Value &val)
Add a variable with the given j, throws KeyAlreadyExists<J> if j is already present.
Definition Values.cpp:157
\n-
void insert_or_assign(Key j, const Value &val)
If key j exists, update value, else perform an insert.
Definition Values.cpp:203
\n-
Values()=default
Default constructor creates an empty Values class.
\n-
bool exists(Key j) const
Check if a value exists with key j.
Definition Values.cpp:94
\n-
A key-value pair, which you get by dereferencing iterators.
Definition Values.h:93
\n-
A key-value pair, which you get by dereferencing iterators.
Definition Values.h:101
\n-
Definition Values.h:475
\n-
Definition Values.h:498
\n-
Definition Values.h:542
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition EliminateableFactorGraph.h:89
\n+
Definition GaussianISAM.h:28
\n+
Definition NonlinearFactorGraph.h:55
\n+
Wrapper class to manage ISAM in a nonlinear context.
Definition NonlinearISAM.h:27
\n+
GaussianFactorGraph::Eliminate eliminationFunction_
The elimination function.
Definition NonlinearISAM.h:44
\n+
NonlinearFactorGraph factors_
The original factors, used when relinearizing.
Definition NonlinearISAM.h:37
\n+
const GaussianISAM & bayesTree() const
access the underlying bayes tree
Definition NonlinearISAM.h:75
\n+
int reorderInterval() const
get counters
Definition NonlinearISAM.h:84
\n+
NonlinearISAM(int reorderInterval=1, const GaussianFactorGraph::Eliminate &eliminationFunction=GaussianFactorGraph::EliminationTraitsType::DefaultEliminate)
Periodically reorder and relinearize.
Definition NonlinearISAM.h:58
\n+
int reorderCounter() const
TODO: comment.
Definition NonlinearISAM.h:85
\n+
const NonlinearFactorGraph & getFactorsUnsafe() const
get underlying nonlinear graph
Definition NonlinearISAM.h:81
\n+
int reorderInterval_
The reordering interval and counter.
Definition NonlinearISAM.h:40
\n+
Values linPoint_
The current linearization point.
Definition NonlinearISAM.h:34
\n+
gtsam::GaussianISAM isam_
The internal iSAM object.
Definition NonlinearISAM.h:31
\n+
const Values & getLinearizationPoint() const
Return the current linearization point.
Definition NonlinearISAM.h:78
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,525 +1,166 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Values-inl.h\n+NonlinearISAM.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-25#pragma once\n-26\n-27#include \n-28#include \n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+_\b2_\b7class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM {\n+28protected:\n+29\n+_\b3_\b1 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM _\bi_\bs_\ba_\bm_\b_;\n 32\n-33\n-34 /* *************************************************************************\n-*/\n-35 template\n-_\b3_\b6 struct _\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br {\n-_\b3_\b7 const _\bK_\be_\by _\bk_\be_\by;\n-_\b3_\b8 ValueType& _\bv_\ba_\bl_\bu_\be;\n-39\n-40 _\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br(_\bK_\be_\by _key, ValueType& _value) : _\bk_\be_\by(_key), _\bv_\ba_\bl_\bu_\be(_value)\n-{}\n-41 };\n+_\b3_\b4 _\bV_\ba_\bl_\bu_\be_\bs _\bl_\bi_\bn_\bP_\bo_\bi_\bn_\bt_\b_;\n+35\n+_\b3_\b7 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_;\n+38\n+_\b4_\b0 int _\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\b_;\n+41 int reorderCounter_;\n 42\n-43 /* *************************************************************************\n-*/\n-44 template\n-_\b4_\b5 struct _\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br {\n-_\b4_\b6 const _\bK_\be_\by _\bk_\be_\by;\n-_\b4_\b7 const ValueType& _\bv_\ba_\bl_\bu_\be;\n-48\n-49 _\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br(_\bK_\be_\by _key, const ValueType& _value) :\n-50 _\bk_\be_\by(_key), _\bv_\ba_\bl_\bu_\be(_value) {\n-51 }\n-52 _\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br(const _\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>& rhs) :\n-53 _\bk_\be_\by(rhs._\bk_\be_\by), _\bv_\ba_\bl_\bu_\be(rhs._\bv_\ba_\bl_\bu_\be) {\n-54 }\n-55 };\n-56\n-57 /* *************************************************************************\n-*/\n-58\n-59 // Cast helpers for making _Values[Const]KeyValuePair's from Values::\n-[Const]KeyValuePair\n-60 // need to use a struct here for later partial specialization\n-61 template\n-_\b6_\b2 struct _\bV_\ba_\bl_\bu_\be_\bs_\bC_\ba_\bs_\bt_\bH_\be_\bl_\bp_\be_\br {\n-63 static CastedKeyValuePairType cast(KeyValuePairType key_value) {\n-64 // Static cast because we already checked the type during filtering\n-65 return CastedKeyValuePairType(key_value.key,\n-66 const_cast<_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>&>(static_cast&>(key_value.value))._\bv_\ba_\bl_\bu_\be());\n-68 }\n-69 };\n-70 // partial specialized version for ValueType == Value\n-71 template\n-_\b7_\b2 struct _\bV_\ba_\bl_\bu_\be_\bs_\bC_\ba_\bs_\bt_\bH_\be_\bl_\bp_\be_\br<_\bV_\ba_\bl_\bu_\be, CastedKeyValuePairType, KeyValuePairType> {\n-73 static CastedKeyValuePairType cast(KeyValuePairType key_value) {\n-74 // Static cast because we already checked the type during filtering\n-75 // in this case the casted and keyvalue pair are essentially the same type\n-76 // (key, Value&) so perhaps this could be done with just a cast of the\n-key_value?\n-77 return CastedKeyValuePairType(key_value.key, key_value.value);\n-78 }\n-79 };\n-80 // partial specialized version for ValueType == Value\n-81 template\n-_\b8_\b2 struct _\bV_\ba_\bl_\bu_\be_\bs_\bC_\ba_\bs_\bt_\bH_\be_\bl_\bp_\be_\br {\n-83 static CastedKeyValuePairType cast(KeyValuePairType key_value) {\n-84 // Static cast because we already checked the type during filtering\n-85 // in this case the casted and keyvalue pair are essentially the same type\n-86 // (key, Value&) so perhaps this could be done with just a cast of the\n-key_value?\n-87 return CastedKeyValuePairType(key_value.key, key_value.value);\n-88 }\n-89 };\n-90\n-91/* *************************************************************************\n-*/\n-92 template \n-93 std::map\n-_\b9_\b4 _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bt_\br_\ba_\bc_\bt(const std::function& filterFcn) const {\n-95 std::map result;\n-96 for (const auto& key_value : values_) {\n-97 // Check if key matches\n-98 if (filterFcn(key_value.first)) {\n-99 // Check if type matches (typically does as symbols matched with types)\n-100 if (auto t =\n-101 dynamic_cast*>(key_value.second))\n-102 result[key_value.first] = t->value();\n-103 }\n-104 }\n-105 return result;\n-106 }\n+_\b4_\b4 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_;\n+45\n+46public:\n+47\n+50\n+_\b5_\b8 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM(int reorderInterval = 1,\n+59 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& eliminationFunction =\n+GaussianFactorGraph::EliminationTraitsType::DefaultEliminate) :\n+60 reorderInterval_(reorderInterval), reorderCounter_(0), eliminationFunction_\n+(eliminationFunction) {}\n+61\n+65\n+67 _\bV_\ba_\bl_\bu_\be_\bs estimate() const;\n+68\n+70 Matrix marginalCovariance(_\bK_\be_\by key) const;\n+71\n+72 // access\n+73\n+_\b7_\b5 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM& _\bb_\ba_\by_\be_\bs_\bT_\br_\be_\be() const { return isam_; }\n+76\n+_\b7_\b8 const _\bV_\ba_\bl_\bu_\be_\bs& _\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt() const { return linPoint_; }\n+79\n+_\b8_\b1 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be() const { return factors_; }\n+82\n+_\b8_\b4 int _\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() const { return reorderInterval_; }\n+_\b8_\b5 int _\br_\be_\bo_\br_\bd_\be_\br_\bC_\bo_\bu_\bn_\bt_\be_\br() const { return reorderCounter_; }\n+86\n+88 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter) const;\n+89\n+91 void printStats() const;\n+92\n+94 void saveGraph(const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter) const;\n+95\n+99\n+101 void update(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors, const _\bV_\ba_\bl_\bu_\be_\bs&\n+initialValues);\n+102\n+104 void reorder_relinearize();\n+105\n 107\n-108/* *************************************************************************\n-*/\n-109#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-110#include \n-111\n-112 template\n-113 class Values::Filtered {\n-114 public:\n-116 typedef _\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b> KeyValuePair;\n-117 typedef _\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b> ConstKeyValuePair;\n-118 typedef KeyValuePair value_type;\n-119\n-120 typedef\n-121 boost::transform_iterator<\n-122 KeyValuePair(*)(_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br),\n-123 boost::filter_iterator<\n-124 std::function,\n-125 Values::iterator> >\n-126 iterator;\n-127\n-128 typedef iterator const_iterator;\n-129\n-130 typedef\n-131 boost::transform_iterator<\n-132 ConstKeyValuePair(*)(_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br),\n-133 boost::filter_iterator<\n-134 std::function,\n-135 Values::const_iterator> >\n-136 const_const_iterator;\n-137\n-138 iterator begin() { return begin_; }\n-139 iterator end() { return end_; }\n-140 const_iterator begin() const { return begin_; }\n-141 const_iterator end() const { return end_; }\n-142 const_const_iterator beginConst() const { return constBegin_; }\n-143 const_const_iterator endConst() const { return constEnd_; }\n-144\n-146 size_t size() const {\n-147 size_t i = 0;\n-148 for (const_const_iterator it = beginConst(); it != endConst(); ++it)\n-149 ++i;\n-150 return i;\n-151 }\n-152\n-153 private:\n-154 Filtered(\n-155 const std::function& filter,\n-156 _\bV_\ba_\bl_\bu_\be_\bs& values) :\n-157 begin_(\n-158 boost::make_transform_iterator(\n-159 boost::make_filter_iterator(filter, values.begin(), values.end()),\n-160 &ValuesCastHelper::cast)),\n-end_(\n-161 boost::make_transform_iterator(\n-162 boost::make_filter_iterator(filter, values.end(), values.end()),\n-163 &ValuesCastHelper::cast)),\n-constBegin_(\n-164 boost::make_transform_iterator(\n-165 boost::make_filter_iterator(filter,\n-166 values._begin(),\n-167 values._end()),\n-168 &ValuesCastHelper::cast)), constEnd_(\n-170 boost::make_transform_iterator(\n-171 boost::make_filter_iterator(filter,\n-172 values._end(),\n-173 values._end()),\n-174 &ValuesCastHelper::cast)) {\n-176 }\n-177\n-178 friend class _\bV_\ba_\bl_\bu_\be_\bs;\n-179 iterator begin_;\n-180 iterator end_;\n-181 const_const_iterator constBegin_;\n-182 const_const_iterator constEnd_;\n-183 };\n-184\n-185 template\n-186 class Values::ConstFiltered {\n-187 public:\n-189 typedef _ValuesConstKeyValuePair KeyValuePair;\n-190 typedef KeyValuePair value_type;\n-191\n-192 typedef typename Filtered::const_const_iterator iterator;\n-193 typedef typename Filtered::const_const_iterator const_iterator;\n-194\n-196 ConstFiltered(const Filtered& rhs) :\n-197 begin_(rhs.beginConst()),\n-198 end_(rhs.endConst()) {}\n-199\n-200 iterator begin() { return begin_; }\n-201 iterator end() { return end_; }\n-202 const_iterator begin() const { return begin_; }\n-203 const_iterator end() const { return end_; }\n-204\n-206 size_t size() const {\n-207 size_t i = 0;\n-208 for (const_iterator it = begin(); it != end(); ++it)\n-209 ++i;\n-210 return i;\n-211 }\n-212\n-213 FastList keys() const {\n-214 FastList result;\n-215 for(const_iterator it = begin(); it != end(); ++it)\n-216 result.push_back(it->key);\n-217 return result;\n-218 }\n-219\n-220 private:\n-221 friend class _\bV_\ba_\bl_\bu_\be_\bs;\n-222 const_iterator begin_;\n-223 const_iterator end_;\n-224 ConstFiltered(\n-225 const std::function& filter,\n-226 const _\bV_\ba_\bl_\bu_\be_\bs& values) {\n-227 // We remove the const from values to create a non-const Filtered\n-228 // view, then pull the const_iterators out of it.\n-229 const Filtered filtered(filter, const_cast<_\bV_\ba_\bl_\bu_\be_\bs&>(values));\n-230 begin_ = filtered.beginConst();\n-231 end_ = filtered.endConst();\n-232 }\n-233 };\n-234\n-235 template\n-236 _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs(const Values::Filtered& view) {\n-237 for(const auto key_value: view) {\n-238 _\bK_\be_\by key = key_value.key;\n-239 _\bi_\bn_\bs_\be_\br_\bt(key, static_cast(key_value.value));\n-240 }\n-241 }\n-242\n-243 template\n-244 _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs(const Values::ConstFiltered& view) {\n-245 for(const auto key_value: view) {\n-246 _\bK_\be_\by key = key_value.key;\n-247 _\bi_\bn_\bs_\be_\br_\bt(key, static_cast(key_value.value));\n-248 }\n-249 }\n-250\n-251 Values::Filtered\n-252 inline Values::filter(const std::function& filterFcn) {\n-253 return filter(filterFcn);\n-254 }\n-255\n-256 template\n-257 Values::Filtered\n-258 Values::filter(const std::function& filterFcn) {\n-259 return Filtered(std::bind(&filterHelper, filterFcn,\n-260 std::placeholders::_1), *this);\n-261 }\n-262\n-263 Values::ConstFiltered\n-264 inline Values::filter(const std::function& filterFcn) const {\n-265 return filter(filterFcn);\n-266 }\n-267\n-268 template\n-269 Values::ConstFiltered\n-270 Values::filter(const std::function& filterFcn) const {\n-271 return ConstFiltered(std::bind(&filterHelper,\n-272 filterFcn, std::placeholders::_1), *this);\n-273 }\n-274#endif\n-275\n-276 /\n-* ************************************************************************* */\n-277 template<>\n-278 inline bool Values::filterHelper(const std::function\n-filter,\n-279 const ConstKeyValuePair& key_value) {\n-280 // Filter and check the type\n-281 return filter(key_value.key);\n-282 }\n-283\n-284 /\n-* ************************************************************************* */\n-285\n-286 namespace internal {\n-287\n-288 // Check the type and throw exception if incorrect\n-289 // Generic version, partially specialized below for various Eigen Matrix\n-types\n-290 template \n-_\b2_\b9_\b1 struct _\bh_\ba_\bn_\bd_\bl_\be {\n-292 ValueType operator()(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be* const pointer) {\n-293 auto ptr = dynamic_cast*>(pointer);\n-294 if (ptr) {\n-295 // value returns a const ValueType&, and the return makes a copy !!!!!\n-296 return ptr->_\bv_\ba_\bl_\bu_\be();\n-297 } else {\n-298 throw _\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be(j, typeid(*pointer), typeid(ValueType));\n-299 }\n-300 }\n-301 };\n-302\n-303 template \n-_\b3_\b0_\b4 struct _\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx;\n-305\n-306 // Handle dynamic matrices\n-307 template \n-_\b3_\b0_\b8 struct _\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx, true> {\n-309 inline Eigen::Matrix operator()(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be* const\n-pointer) {\n-310 auto ptr = dynamic_cast>*>\n-(pointer);\n-311 if (ptr) {\n-312 // value returns a const Matrix&, and the return makes a copy !!!!!\n-313 return ptr->_\bv_\ba_\bl_\bu_\be();\n-314 } else {\n-315 // If a fixed matrix was stored, we end up here as well.\n-316 throw _\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be(j, typeid(*pointer), typeid(Eigen::Matrix));\n-317 }\n-318 }\n-319 };\n-320\n-321 // Handle fixed matrices\n-322 template \n-_\b3_\b2_\b3 struct _\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx, false> {\n-324 inline Eigen::Matrix operator()(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be* const\n-pointer) {\n-325 auto ptr = dynamic_cast>*>\n-(pointer);\n-326 if (ptr) {\n-327 // value returns a const MatrixMN&, and the return makes a copy !!!!!\n-328 return ptr->_\bv_\ba_\bl_\bu_\be();\n-329 } else {\n-330 Matrix A;\n-331 // Check if a dynamic matrix was stored\n-332 auto ptr = dynamic_cast*>(pointer);\n-333 if (ptr) {\n-334 A = ptr->value();\n-335 } else {\n-336 // Or a dynamic vector\n-337 A = _\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx_\b<_\bE_\bi_\bg_\be_\bn_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bX_\bd_\b,_\b _\bt_\br_\bu_\be_\b>()(j, pointer); // will throw if\n-not....\n-338 }\n-339 // Yes: check size, and throw if not a match\n-340 if (A.rows() != M || A.cols() != N)\n-341 throw _\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd(M, N, A.rows(), A.cols());\n-342 else\n-343 return A; // copy but not malloc\n-344 }\n-345 }\n-346 };\n-347\n-348 // Handle matrices\n-349 template \n-_\b3_\b5_\b0 struct _\bh_\ba_\bn_\bd_\bl_\be> {\n-351 Eigen::Matrix operator()(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be* const pointer) {\n-352 return _\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx_\b<_\bE_\bi_\bg_\be_\bn_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bM_\b,_\b _\bN_\b>,\n-353 (M == Eigen::Dynamic || N == Eigen::Dynamic)>()(j, pointer);\n-354 }\n-355 };\n-356\n-357 } // internal\n-358\n-359 /\n-* ************************************************************************* */\n-360 template \n-_\b3_\b6_\b1 const ValueType _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt(_\bK_\be_\by j) const {\n-362 // Find the item\n-363 KeyValueMap::const_iterator item = values_.find(j);\n-364\n-365 // Throw exception if it does not exist\n-366 if (item == values_.end()) throw _\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt(\"at\", j);\n-367\n-368 // Check the type and throw exception if incorrect\n-369 // h() split in two lines to avoid internal compiler error (MSVC2017)\n-370 auto h = _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bh_\ba_\bn_\bd_\bl_\be_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>();\n-371 return h(j, item->second);\n-372 }\n-373\n-374 /\n-* ************************************************************************* */\n-375 template\n-_\b3_\b7_\b6 boost::optional _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs(_\bK_\be_\by j) const {\n-377 // Find the item\n-378 KeyValueMap::const_iterator item = values_.find(j);\n-379\n-380 if(item != values_.end()) {\n-381 // dynamic cast the type and throw exception if incorrect\n-382 auto ptr = dynamic_cast*>(item->second);\n-383 if (ptr) {\n-384 return ptr->_\bv_\ba_\bl_\bu_\be();\n-385 } else {\n-386 // NOTE(abe): clang warns about potential side effects if done in typeid\n-387 const _\bV_\ba_\bl_\bu_\be* value = item->second;\n-388 throw _\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be(j, typeid(*value), typeid(ValueType));\n-389 }\n-390 } else {\n-391 return boost::none;\n-392 }\n-393 }\n-394\n-395 /\n-* ************************************************************************* */\n-396\n-397 // insert a templated value\n-398 template\n-_\b3_\b9_\b9 void _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt(_\bK_\be_\by j, const ValueType& val) {\n-400 _\bi_\bn_\bs_\be_\br_\bt(j, static_cast(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>(val)));\n-401 }\n-402\n-403 // update with templated value\n-404 template \n-405 void _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be(_\bK_\be_\by j, const ValueType& val) {\n-406 _\bu_\bp_\bd_\ba_\bt_\be(j, static_cast(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>(val)));\n-407 }\n-408\n-409 // insert_or_assign with templated value\n-410 template \n-_\b4_\b1_\b1 void _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn(_\bK_\be_\by j, const ValueType& val) {\n-412 _\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn(j, static_cast(_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b<_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\b>\n-(val)));\n-413 }\n-414\n-415}\n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\n+108};\n+109\n+110} // \\namespace gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n-Wraps any type T so it can play as a Value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-const T & value() const\n-Return a constant value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-This is the base class for any type to be stored in Values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bk_\be_\by\n-const Key key\n-The key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-ValueType & value\n-The value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bk_\be_\by\n-const Key key\n-The key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\b__\bV_\ba_\bl_\bu_\be_\bs_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-const ValueType & value\n-The value.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bC_\ba_\bs_\bt_\bH_\be_\bl_\bp_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bh_\ba_\bn_\bd_\bl_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:291\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bh_\ba_\bn_\bd_\bl_\be_\b__\bm_\ba_\bt_\br_\bi_\bx\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:304\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(Key j, const Value &val)\n-single element change of existing element\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:180\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bt_\br_\ba_\bc_\bt\n-std::map< Key, ValueType > extract(const std::function< bool(Key)>\n-&filterFcn=&_truePredicate< Key >) const\n-Extract a subset of values of the given type ValueType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-const ValueType at(Key j) const\n-Retrieve a variable by key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-void insert(Key j, const Value &val)\n-Add a variable with the given j, throws KeyAlreadyExists if j is already\n-present.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn\n-void insert_or_assign(Key j, const Value &val)\n-If key j exists, update value, else perform an insert.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:203\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-Values()=default\n-Default constructor creates an empty Values class.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(Key j) const\n-Check if a value exists with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n-A key-value pair, which you get by dereferencing iterators.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n-A key-value pair, which you get by dereferencing iterators.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:475\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:498\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:542\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+std::function< EliminationResult(const FactorGraphType &, const Ordering &)>\n+Eliminate\n+The function type that does a single dense elimination step on a subgraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianISAM.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n+Wrapper class to manage ISAM in a nonlinear context.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_\n+GaussianFactorGraph::Eliminate eliminationFunction_\n+The elimination function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_\n+NonlinearFactorGraph factors_\n+The original factors, used when relinearizing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bb_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+const GaussianISAM & bayesTree() const\n+access the underlying bayes tree\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n+int reorderInterval() const\n+get counters\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n+NonlinearISAM(int reorderInterval=1, const GaussianFactorGraph::Eliminate\n+&eliminationFunction=GaussianFactorGraph::EliminationTraitsType::\n+DefaultEliminate)\n+Periodically reorder and relinearize.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bC_\bo_\bu_\bn_\bt_\be_\br\n+int reorderCounter() const\n+TODO: comment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be\n+const NonlinearFactorGraph & getFactorsUnsafe() const\n+get underlying nonlinear graph\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\b_\n+int reorderInterval_\n+The reordering interval and counter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bl_\bi_\bn_\bP_\bo_\bi_\bn_\bt_\b_\n+Values linPoint_\n+The current linearization point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bi_\bs_\ba_\bm_\b_\n+gtsam::GaussianISAM isam_\n+The internal iSAM object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt\n+const Values & getLinearizationPoint() const\n+Return the current linearization point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * V\bVa\bal\blu\bue\bes\bs-\b-i\bin\bnl\bl.\b.h\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01064.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01064.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExtendedKalmanFilter.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/FunctorizedFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,45 +95,61 @@\n \n \n \n \n
\n \n-
ExtendedKalmanFilter.h File Reference
\n+Namespaces |\n+Functions
\n+
FunctorizedFactor.h File Reference
\n \n
\n \n-

Class to perform generic Kalman Filtering using nonlinear factor graphs. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::ExtendedKalmanFilter< VALUE >
 This is a generic Extended Kalman Filter class implemented using nonlinear factors. More...
class  gtsam::FunctorizedFactor< R, T >
 Factor which evaluates provided unary functor and uses the result to compute error with respect to the provided measurement. More...
 
struct  gtsam::traits< FunctorizedFactor< R, T > >
 traits More...
 
class  gtsam::FunctorizedFactor2< R, T1, T2 >
 Factor which evaluates provided binary functor and uses the result to compute error with respect to the provided measurement. More...
 
struct  gtsam::traits< FunctorizedFactor2< R, T1, T2 > >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

template<typename T , typename R , typename FUNC >
FunctorizedFactor< R, T > gtsam::MakeFunctorizedFactor (Key key, const R &z, const SharedNoiseModel &model, const FUNC func)
 Helper function to create a functorized factor.
 
template<typename T1 , typename T2 , typename R , typename FUNC >
FunctorizedFactor2< R, T1, T2 > gtsam::MakeFunctorizedFactor2 (Key key1, Key key2, const R &z, const SharedNoiseModel &model, const FUNC func)
 Helper function to create a functorized factor.
 
\n

Detailed Description

\n-

Class to perform generic Kalman Filtering using nonlinear factor graphs.

\n-
Author
Stephen Williams
\n-
\n-Chris Beall
\n+
Date
May 31, 2020
\n+
Author
Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,51 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ExtendedKalmanFilter.h File Reference\n-Class to perform generic Kalman Filtering using nonlinear factor graphs.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+FunctorizedFactor.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n-\u00a0 This is a generic Extended Kalman Filter class implemented using\n- nonlinear factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bR_\b,_\b _\bT_\b _\b>\n+\u00a0 _\bF_\ba_\bc_\bt_\bo_\br which evaluates provided unary functor and uses the result to\n+ compute error with respect to the provided measurement. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bR_\b,_\b _\bT_\b _\b>_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\b _\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b _\b>\n+\u00a0 _\bF_\ba_\bc_\bt_\bo_\br which evaluates provided binary functor and uses the result to\n+ compute error with respect to the provided measurement. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\b _\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b _\b>_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br< R, T >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br (_\bK_\be_\by key, const R\n+ &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const FUNC\n+ func)\n+\u00a0 Helper function to create a functorized\n+ factor.\n+\u00a0\n+template\n+_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2< R, T1, T2 >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2 (_\bK_\be_\by key1, _\bK_\be_\by\n+ key2, const R &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+ &model, const FUNC func)\n+\u00a0 Helper function to create a functorized\n+ factor.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Class to perform generic Kalman Filtering using nonlinear factor graphs.\n+ Date\n+ May 31, 2020\n Author\n- Stephen Williams\n- Chris Beall\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh\n+ * _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01064.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01064.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,8 @@\n var a01064 = [\n- [\"gtsam::ExtendedKalmanFilter< VALUE >\", \"a04332.html\", \"a04332\"]\n+ [\"gtsam::FunctorizedFactor< R, T >\", \"a04336.html\", \"a04336\"],\n+ [\"gtsam::traits< FunctorizedFactor< R, T > >\", \"a04340.html\", null],\n+ [\"gtsam::FunctorizedFactor2< R, T1, T2 >\", \"a04344.html\", \"a04344\"],\n+ [\"gtsam::traits< FunctorizedFactor2< R, T1, T2 > >\", \"a04348.html\", null],\n+ [\"MakeFunctorizedFactor\", \"a01064.html#a9d2a0b16c9f78f20fc78fa39c7426242\", null],\n+ [\"MakeFunctorizedFactor2\", \"a01064.html#a313f0e290f370cff0b7e25024d1b8c6d\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01064_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01064_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExtendedKalmanFilter.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/FunctorizedFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,110 +98,250 @@\n
No Matches
\n \n \n \n \n \n
\n-
ExtendedKalmanFilter.h
\n+
FunctorizedFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19// \\callgraph
\n-
20#pragma once
\n-
21
\n-\n-\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Testable.h>
\n+\n+
22
\n+
23#include <cmath>
\n
24
\n
25namespace gtsam {
\n
26
\n-
44template <class VALUE>
\n-
\n-\n-
46 // Check that VALUE type is a testable Manifold
\n-
47 BOOST_CONCEPT_ASSERT((IsTestable<VALUE>));
\n-
48 BOOST_CONCEPT_ASSERT((IsManifold<VALUE>));
\n-
49
\n-
50 public:
\n-
51 typedef boost::shared_ptr<ExtendedKalmanFilter<VALUE> > shared_ptr;
\n-
52 typedef VALUE T;
\n-
53
\n-
54#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
55 //@deprecated: any NoiseModelFactor will do, as long as they have the right keys
\n-
56 typedef NoiseModelFactorN<VALUE, VALUE> MotionFactor;
\n-
57 typedef NoiseModelFactorN<VALUE> MeasurementFactor;
\n-
58#endif
\n-
59
\n-
60 protected:
\n-
61 T x_; // linearization point
\n-
62 JacobianFactor::shared_ptr priorFactor_; // Gaussian density on x_
\n-
63
\n-
64 static T solve_(const GaussianFactorGraph& linearFactorGraph, const Values& linearizationPoints,
\n-
65 Key x, JacobianFactor::shared_ptr* newPrior);
\n+
58template <typename R, typename T>
\n+
\n+\n+
60 private:
\n+\n+
62
\n+
63 R measured_;
\n+
64 SharedNoiseModel noiseModel_;
\n+
65 std::function<R(T, boost::optional<Matrix &>)> func_;
\n
66
\n
67 public:
\n+\n
70
\n-
71 ExtendedKalmanFilter(Key key_initial, T x_initial, noiseModel::Gaussian::shared_ptr P_initial);
\n-
72
\n-
76
\n
\n-
78 void print(const std::string& s = "") const {
\n-
79 std::cout << s << "\\n";
\n-
80 x_.print(s + "x");
\n-
81 priorFactor_->print(s + "density");
\n-
82 }
\n+
78 FunctorizedFactor(Key key, const R &z, const SharedNoiseModel &model,
\n+
79 const std::function<R(T, boost::optional<Matrix &>)> func)
\n+
80 : Base(model, key), measured_(z), noiseModel_(model), func_(func) {}
\n
\n+
81
\n+
82 ~FunctorizedFactor() override {}
\n
83
\n-
87
\n-
93 T predict(const NoiseModelFactor& motionFactor);
\n-
94
\n-
99 T update(const NoiseModelFactor& measurementFactor);
\n-
100
\n-
\n-\n-
103 return priorFactor_;
\n-
104 }
\n-
\n-
105
\n-
107};
\n-
\n-
108
\n-
109} // namespace
\n-
110
\n-\n-
Class to perform generic Kalman Filtering using nonlinear factor graphs.
\n-
Non-linear factor base classes.
\n-
Factor Graph consisting of non-linear factors.
\n+
\n+
85 NonlinearFactor::shared_ptr clone() const override {
\n+
86 return boost::static_pointer_cast<NonlinearFactor>(
\n+
87 NonlinearFactor::shared_ptr(new FunctorizedFactor<R, T>(*this)));
\n+
88 }
\n+
\n+
89
\n+
90 Vector evaluateError(const T &params, boost::optional<Matrix &> H =
\n+
91 boost::none) const override {
\n+
92 R x = func_(params, H);
\n+
93 Vector error = traits<R>::Local(measured_, x);
\n+
94 return error;
\n+
95 }
\n+
96
\n+
\n+
99 void print(
\n+
100 const std::string &s = "",
\n+
101 const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override {
\n+
102 Base::print(s, keyFormatter);
\n+
103 std::cout << s << (s != "" ? " " : "") << "FunctorizedFactor("
\n+
104 << keyFormatter(this->key1()) << ")" << std::endl;
\n+
105 traits<R>::Print(measured_, " measurement: ");
\n+
106 std::cout << " noise model sigmas: " << noiseModel_->sigmas().transpose()
\n+
107 << std::endl;
\n+
108 }
\n+
\n+
109
\n+
\n+
110 bool equals(const NonlinearFactor &other, double tol = 1e-9) const override {
\n+
111 const FunctorizedFactor<R, T> *e =
\n+
112 dynamic_cast<const FunctorizedFactor<R, T> *>(&other);
\n+
113 return e != nullptr && Base::equals(other, tol) &&
\n+
114 traits<R>::Equals(this->measured_, e->measured_, tol);
\n+
115 }
\n+
\n+
117
\n+
118 private:
\n+\n+
121 template <class ARCHIVE>
\n+
122 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n+
123 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
124 ar &boost::serialization::make_nvp(
\n+
125 "NoiseModelFactor1", boost::serialization::base_object<Base>(*this));
\n+
126 ar &BOOST_SERIALIZATION_NVP(measured_);
\n+
127 ar &BOOST_SERIALIZATION_NVP(func_);
\n+
128 }
\n+
129};
\n+
\n+
130
\n+
132template <typename R, typename T>
\n+
\n+\n+
134 : public Testable<FunctorizedFactor<R, T>> {};
\n+
\n+
135
\n+
142template <typename T, typename R, typename FUNC>
\n+
\n+\n+
144 const SharedNoiseModel &model,
\n+
145 const FUNC func) {
\n+
146 return FunctorizedFactor<R, T>(key, z, model, func);
\n+
147}
\n+
\n+
148
\n+
158template <typename R, typename T1, typename T2>
\n+
\n+
159class FunctorizedFactor2 : public NoiseModelFactorN<T1, T2> {
\n+
160 private:
\n+\n+
162
\n+
163 R measured_;
\n+
164 SharedNoiseModel noiseModel_;
\n+
165 using FunctionType = std::function<R(T1, T2, boost::optional<Matrix &>,
\n+
166 boost::optional<Matrix &>)>;
\n+
167 FunctionType func_;
\n+
168
\n+
169 public:
\n+\n+
172
\n+
\n+
180 FunctorizedFactor2(Key key1, Key key2, const R &z,
\n+
181 const SharedNoiseModel &model, const FunctionType func)
\n+
182 : Base(model, key1, key2),
\n+
183 measured_(z),
\n+
184 noiseModel_(model),
\n+
185 func_(func) {}
\n+
\n+
186
\n+
187 ~FunctorizedFactor2() override {}
\n+
188
\n+
\n+
190 NonlinearFactor::shared_ptr clone() const override {
\n+
191 return boost::static_pointer_cast<NonlinearFactor>(
\n+
192 NonlinearFactor::shared_ptr(new FunctorizedFactor2<R, T1, T2>(*this)));
\n+
193 }
\n+
\n+
194
\n+
195 Vector evaluateError(
\n+
196 const T1 &params1, const T2 &params2,
\n+
197 boost::optional<Matrix &> H1 = boost::none,
\n+
198 boost::optional<Matrix &> H2 = boost::none) const override {
\n+
199 R x = func_(params1, params2, H1, H2);
\n+
200 Vector error = traits<R>::Local(measured_, x);
\n+
201 return error;
\n+
202 }
\n+
203
\n+
\n+
206 void print(
\n+
207 const std::string &s = "",
\n+
208 const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override {
\n+
209 Base::print(s, keyFormatter);
\n+
210 std::cout << s << (s != "" ? " " : "") << "FunctorizedFactor2("
\n+
211 << keyFormatter(this->key1()) << ", "
\n+
212 << keyFormatter(this->key2()) << ")" << std::endl;
\n+
213 traits<R>::Print(measured_, " measurement: ");
\n+
214 std::cout << " noise model sigmas: " << noiseModel_->sigmas().transpose()
\n+
215 << std::endl;
\n+
216 }
\n+
\n+
217
\n+
\n+
218 bool equals(const NonlinearFactor &other, double tol = 1e-9) const override {
\n+\n+
220 dynamic_cast<const FunctorizedFactor2<R, T1, T2> *>(&other);
\n+
221 return e && Base::equals(other, tol) &&
\n+
222 traits<R>::Equals(this->measured_, e->measured_, tol);
\n+
223 }
\n+
\n+
225
\n+
226 private:
\n+\n+
229 template <class ARCHIVE>
\n+
230 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n+
231 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n+
232 ar &boost::serialization::make_nvp(
\n+
233 "NoiseModelFactor2", boost::serialization::base_object<Base>(*this));
\n+
234 ar &BOOST_SERIALIZATION_NVP(measured_);
\n+
235 ar &BOOST_SERIALIZATION_NVP(func_);
\n+
236 }
\n+
237};
\n+
\n+
238
\n+
240template <typename R, typename T1, typename T2>
\n+
\n+
241struct traits<FunctorizedFactor2<R, T1, T2>>
\n+
242 : public Testable<FunctorizedFactor2<R, T1, T2>> {};
\n+
\n+
243
\n+
250template <typename T1, typename T2, typename R, typename FUNC>
\n+
\n+\n+
252 Key key1, Key key2, const R &z, const SharedNoiseModel &model,
\n+
253 const FUNC func) {
\n+
254 return FunctorizedFactor2<R, T1, T2>(key1, key2, z, model, func);
\n+
255}
\n+
\n+
256
\n+
257} // namespace gtsam
\n+
Concept check for values that can be used in unit tests.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
FunctorizedFactor2< R, T1, T2 > MakeFunctorizedFactor2(Key key1, Key key2, const R &z, const SharedNoiseModel &model, const FUNC func)
Helper function to create a functorized factor.
Definition FunctorizedFactor.h:251
\n+
FunctorizedFactor< R, T > MakeFunctorizedFactor(Key key, const R &z, const SharedNoiseModel &model, const FUNC func)
Helper function to create a functorized factor.
Definition FunctorizedFactor.h:143
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition JacobianFactor.h:96
\n-
This is a generic Extended Kalman Filter class implemented using nonlinear factors.
Definition ExtendedKalmanFilter.h:45
\n-
T update(const NoiseModelFactor &measurementFactor)
Calculate posterior density P(x_) ~ L(z|x) P(x) The likelihood L(z|x) should be given as a unary fact...
Definition ExtendedKalmanFilter-inl.h:105
\n-
const JacobianFactor::shared_ptr Density() const
Return current predictive (if called after predict)/posterior (if called after update)
Definition ExtendedKalmanFilter.h:102
\n-
T predict(const NoiseModelFactor &motionFactor)
Calculate predictive density The motion model should be given as a factor with key1 for and key2 fo...
Definition ExtendedKalmanFilter-inl.h:80
\n-
void print(const std::string &s="") const
print
Definition ExtendedKalmanFilter.h:78
\n-
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
Factor which evaluates provided unary functor and uses the result to compute error with respect to th...
Definition FunctorizedFactor.h:59
\n+
FunctorizedFactor(Key key, const R &z, const SharedNoiseModel &model, const std::function< R(T, boost::optional< Matrix & >)> func)
Construct with given x and the parameters of the basis.
Definition FunctorizedFactor.h:78
\n+
bool equals(const NonlinearFactor &other, double tol=1e-9) const override
Check if two factors are equal.
Definition FunctorizedFactor.h:110
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition FunctorizedFactor.h:99
\n+
FunctorizedFactor()
default constructor - only use for serialization
Definition FunctorizedFactor.h:69
\n+
friend class boost::serialization::access
Serialization function.
Definition FunctorizedFactor.h:120
\n+
NonlinearFactor::shared_ptr clone() const override
Definition FunctorizedFactor.h:85
\n+
Factor which evaluates provided binary functor and uses the result to compute error with respect to t...
Definition FunctorizedFactor.h:159
\n+
FunctorizedFactor2()
default constructor - only use for serialization
Definition FunctorizedFactor.h:171
\n+
NonlinearFactor::shared_ptr clone() const override
Definition FunctorizedFactor.h:190
\n+
FunctorizedFactor2(Key key1, Key key2, const R &z, const SharedNoiseModel &model, const FunctionType func)
Construct with given x and the parameters of the basis.
Definition FunctorizedFactor.h:180
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition FunctorizedFactor.h:206
\n+
bool equals(const NonlinearFactor &other, double tol=1e-9) const override
Check if two factors are equal.
Definition FunctorizedFactor.h:218
\n+
friend class boost::serialization::access
Serialization function.
Definition FunctorizedFactor.h:228
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
double error(const Values &c) const override
Calculate the error of the factor.
Definition NonlinearFactor.cpp:138
\n
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,141 +1,306 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ExtendedKalmanFilter.h\n+FunctorizedFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19// \\callgraph\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22\n+23#include \n 24\n 25namespace _\bg_\bt_\bs_\ba_\bm {\n 26\n-44template \n-_\b4_\b5class _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br {\n-46 // Check that VALUE type is a testable Manifold\n-47 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bV_\bA_\bL_\bU_\bE_\b>));\n-48 BOOST_CONCEPT_ASSERT((IsManifold));\n-49\n-50 public:\n-51 typedef boost::shared_ptr > shared_ptr;\n-52 typedef VALUE T;\n-53\n-54#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-55 //@deprecated: any NoiseModelFactor will do, as long as they have the right\n-keys\n-56 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b> MotionFactor;\n-57 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b> MeasurementFactor;\n-58#endif\n-59\n-60 protected:\n-61 T x_; // linearization point\n-62 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br priorFactor_; // Gaussian density on x_\n-63\n-64 static T solve_(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& linearFactorGraph, const _\bV_\ba_\bl_\bu_\be_\bs&\n-linearizationPoints,\n-65 _\bK_\be_\by x, _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br* newPrior);\n+58template \n+_\b5_\b9class _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+60 private:\n+61 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bT_\b>;\n+62\n+63 R measured_;\n+64 _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl noiseModel_;\n+65 std::function)> func_;\n 66\n 67 public:\n+_\b6_\b9 _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br() {}\n 70\n-71 _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br(_\bK_\be_\by key_initial, T x_initial, noiseModel::Gaussian::\n-shared_ptr P_initial);\n-72\n-76\n-_\b7_\b8 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const {\n-79 std::cout << s << \"\\n\";\n-80 x_.print(s + \"x\");\n-81 priorFactor_->print(s + \"density\");\n-82 }\n+_\b7_\b8 _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const R &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n+79 const std::function)> func)\n+80 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by), measured_(z), noiseModel_(model), func_(func) {}\n+81\n+82 _\b~_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br() override {}\n 83\n-87\n-93 T _\bp_\br_\be_\bd_\bi_\bc_\bt(const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& motionFactor);\n-94\n-99 T _\bu_\bp_\bd_\ba_\bt_\be(const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& measurementFactor);\n-100\n-_\b1_\b0_\b2 const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bD_\be_\bn_\bs_\bi_\bt_\by() const {\n-103 return priorFactor_;\n-104 }\n-105\n-107};\n-108\n-109} // namespace\n-110\n-111#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b-_\bi_\bn_\bl_\b._\bh>\n-_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b-_\bi_\bn_\bl_\b._\bh\n-Class to perform generic Kalman Filtering using nonlinear factor graphs.\n+_\b8_\b5 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+86 return boost::static_pointer_cast(\n+87 NonlinearFactor::shared_ptr(new _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bR_\b,_\b _\bT_\b>(*this)));\n+88 }\n+89\n+90 Vector evaluateError(const T ¶ms, boost::optional H =\n+91 boost::none) const override {\n+92 R x = func_(params, H);\n+93 Vector _\be_\br_\br_\bo_\br = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured_, x);\n+94 return _\be_\br_\br_\bo_\br;\n+95 }\n+96\n+_\b9_\b9 void _\bp_\br_\bi_\bn_\bt(\n+100 const std::string &s = \"\",\n+101 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter) const override {\n+102 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n+103 std::cout << s << (s != \"\" ? \" \" : \"\") << \"FunctorizedFactor(\"\n+104 << keyFormatter(this->key1()) << \")\" << std::endl;\n+105 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(measured_, \" measurement: \");\n+106 std::cout << \" noise model sigmas: \" << noiseModel_->sigmas().transpose()\n+107 << std::endl;\n+108 }\n+109\n+_\b1_\b1_\b0 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br &other, double tol = 1e-9) const override\n+{\n+111 const _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bR_\b,_\b _\bT_\b> *e =\n+112 dynamic_cast *>(&other);\n+113 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(other, tol) &&\n+114 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_, e->measured_, tol);\n+115 }\n+117\n+118 private:\n+_\b1_\b2_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+121 template \n+122 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+123 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n+compatibility\n+124 ar &boost::serialization::make_nvp(\n+125 \"NoiseModelFactor1\", boost::serialization::base_object(*this));\n+126 ar &BOOST_SERIALIZATION_NVP(measured_);\n+127 ar &BOOST_SERIALIZATION_NVP(func_);\n+128 }\n+129};\n+130\n+132template \n+_\b1_\b3_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br>\n+134 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n+135\n+142template \n+_\b1_\b4_\b3_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bR_\b,_\b _\bT_\b> _\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, const R &z,\n+144 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n+145 const FUNC func) {\n+146 return _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bR_\b,_\b _\bT_\b>(key, z, model, func);\n+147}\n+148\n+158template \n+_\b1_\b5_\b9class _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2 : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+160 private:\n+161 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bT_\b1_\b,_\b _\bT_\b2_\b>;\n+162\n+163 R measured_;\n+164 _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl noiseModel_;\n+165 using FunctionType = std::function,\n+166 boost::optional)>;\n+167 FunctionType func_;\n+168\n+169 public:\n+_\b1_\b7_\b1 _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2() {}\n+172\n+_\b1_\b8_\b0 _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2(_\bK_\be_\by key1, _\bK_\be_\by key2, const R &z,\n+181 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const FunctionType func)\n+182 : _\bB_\ba_\bs_\be(model, key1, key2),\n+183 measured_(z),\n+184 noiseModel_(model),\n+185 func_(func) {}\n+186\n+187 _\b~_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2() override {}\n+188\n+_\b1_\b9_\b0 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+191 return boost::static_pointer_cast(\n+192 NonlinearFactor::shared_ptr(new _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b>(*this)));\n+193 }\n+194\n+195 Vector evaluateError(\n+196 const T1 ¶ms1, const T2 ¶ms2,\n+197 boost::optional H1 = boost::none,\n+198 boost::optional H2 = boost::none) const override {\n+199 R x = func_(params1, params2, H1, H2);\n+200 Vector _\be_\br_\br_\bo_\br = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured_, x);\n+201 return _\be_\br_\br_\bo_\br;\n+202 }\n+203\n+_\b2_\b0_\b6 void _\bp_\br_\bi_\bn_\bt(\n+207 const std::string &s = \"\",\n+208 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter) const override {\n+209 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n+210 std::cout << s << (s != \"\" ? \" \" : \"\") << \"FunctorizedFactor2(\"\n+211 << keyFormatter(this->key1()) << \", \"\n+212 << keyFormatter(this->key2()) << \")\" << std::endl;\n+213 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(measured_, \" measurement: \");\n+214 std::cout << \" noise model sigmas: \" << noiseModel_->sigmas().transpose()\n+215 << std::endl;\n+216 }\n+217\n+_\b2_\b1_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br &other, double tol = 1e-9) const override\n+{\n+219 const _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b> *e =\n+220 dynamic_cast *>(&other);\n+221 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(other, tol) &&\n+222 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_, e->measured_, tol);\n+223 }\n+225\n+226 private:\n+_\b2_\b2_\b8 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+229 template \n+230 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+231 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n+compatibility\n+232 ar &boost::serialization::make_nvp(\n+233 \"NoiseModelFactor2\", boost::serialization::base_object(*this));\n+234 ar &BOOST_SERIALIZATION_NVP(measured_);\n+235 ar &BOOST_SERIALIZATION_NVP(func_);\n+236 }\n+237};\n+238\n+240template \n+_\b2_\b4_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2>\n+242 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n+243\n+250template \n+_\b2_\b5_\b1_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b> _\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2(\n+252 _\bK_\be_\by key1, _\bK_\be_\by key2, const R &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n+253 const FUNC func) {\n+254 return _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b>(key1, key2, z, model, func);\n+255}\n+256\n+257} // namespace gtsam\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+FunctorizedFactor2< R, T1, T2 > MakeFunctorizedFactor2(Key key1, Key key2,\n+const R &z, const SharedNoiseModel &model, const FUNC func)\n+Helper function to create a functorized factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:251\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+FunctorizedFactor< R, T > MakeFunctorizedFactor(Key key, const R &z, const\n+SharedNoiseModel &model, const FUNC func)\n+Helper function to create a functorized factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A testable concept check that should be placed in applicable unit tests and in\n-generic algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br\n-This is a generic Extended Kalman Filter class implemented using nonlinear\n-factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-T update(const NoiseModelFactor &measurementFactor)\n-Calculate posterior density P(x_) ~ L(z|x) P(x) The likelihood L(z|x) should be\n-given as a unary fact...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter-inl.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bD_\be_\bn_\bs_\bi_\bt_\by\n-const JacobianFactor::shared_ptr Density() const\n-Return current predictive (if called after predict)/posterior (if called after\n-update)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bp_\br_\be_\bd_\bi_\bc_\bt\n-T predict(const NoiseModelFactor &motionFactor)\n-Calculate predictive density The motion model should be given as a factor with\n-key1 for and key2 fo...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter-inl.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\") const\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n-density Templated on...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+Factor which evaluates provided unary functor and uses the result to compute\n+error with respect to th...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+FunctorizedFactor(Key key, const R &z, const SharedNoiseModel &model, const\n+std::function< R(T, boost::optional< Matrix & >)> func)\n+Construct with given x and the parameters of the basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &other, double tol=1e-9) const override\n+Check if two factors are equal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+FunctorizedFactor()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+Factor which evaluates provided binary functor and uses the result to compute\n+error with respect to t...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+FunctorizedFactor2()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:171\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:190\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+FunctorizedFactor2(Key key1, Key key2, const R &z, const SharedNoiseModel\n+&model, const FunctionType func)\n+Construct with given x and the parameters of the basis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:206\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &other, double tol=1e-9) const override\n+Check if two factors are equal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:218\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:228\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &c) const override\n+Calculate the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:138\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n A convenient base class for creating your own NoiseModelFactor with n\n variables.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bT_\b _\b>_\b:_\b:_\bk_\be_\by\n+Key key() const\n+Returns a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh\n+ * _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01067.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01067.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2UpdateParams.h File Reference\n \n \n \n \n \n \n \n@@ -96,52 +96,42 @@\n \n \n \n
\n \n-
ISAM2-impl.h File Reference
\n+
ISAM2UpdateParams.h File Reference
\n
\n
\n \n-

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \n+

Class that stores extra params for ISAM2::update() \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::ISAM2BayesTree
 
class  gtsam::ISAM2JunctionTree
 
struct  gtsam::DeltaImpl
 
struct  gtsam::DeltaImpl::PartialSolveResult
 
struct  gtsam::DeltaImpl::ReorderingMode
 
struct  gtsam::UpdateImpl
 Implementation functions for update method All of the methods below have clear inputs and outputs, even if not functional: iSAM2 is inherintly imperative. More...
struct  gtsam::ISAM2UpdateParams
 This struct is used by ISAM2::update() to pass additional parameters to give the user a fine-grained control on how factors and relinearized, etc. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.

\n-
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n+

Class that stores extra params for ISAM2::update()

\n+
Author
Michael Kaess, Richard Roberts, Frank Dellaert, Jose Luis Blanco
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ISAM2-impl.h File Reference\n-Incremental update functionality (ISAM2) for BayesTree, with fluid\n-relinearization. _\bM_\bo_\br_\be_\b._\b._\b.\n+ISAM2UpdateParams.h File Reference\n+Class that stores extra params for ISAM2::update() _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl_\b:_\b:_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\bo_\bl_\bv_\be_\bR_\be_\bs_\bu_\bl_\bt\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl_\b:_\b:_\bR_\be_\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\bM_\bo_\bd_\be\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl\n- Implementation functions for update method All of the methods below\n-\u00a0 have clear inputs and outputs, even if not functional: iSAM2 is\n- inherintly imperative. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs\n+ This struct is used by _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\b(_\b) to pass additional parameters\n+\u00a0 to give the user a fine-grained control on how factors and\n+ relinearized, etc. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Incremental update functionality (ISAM2) for BayesTree, with fluid\n-relinearization.\n+Class that stores extra params for ISAM2::update()\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert\n+ Michael Kaess, Richard Roberts, Frank Dellaert, Jose Luis Blanco\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\b-_\bi_\bm_\bp_\bl_\b._\bh\n+ * _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01067_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01067_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2UpdateParams.h Source File\n \n \n \n \n \n \n \n@@ -98,566 +98,75 @@\n
No Matches
\n \n \n \n \n \n
\n-
ISAM2-impl.h
\n+
ISAM2UpdateParams.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
7
\n-
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n-
11
\n-
19#pragma once
\n-
20
\n-\n-\n-
23
\n-
24#include <gtsam/base/debug.h>
\n-
25#include <gtsam/inference/JunctionTree-inst.h> // We need the inst file because we'll make a special JT templated on ISAM2
\n-\n-\n-\n-\n-
30
\n-
31#include <boost/range/adaptors.hpp>
\n-
32#include <boost/range/algorithm/copy.hpp>
\n-
33namespace br {
\n-
34using namespace boost::range;
\n-
35using namespace boost::adaptors;
\n-
36} // namespace br
\n+
2 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * Atlanta, Georgia 30332-0415
\n+
4 * All Rights Reserved
\n+
5 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
6 * See LICENSE for the license information
\n+
7 * -------------------------------------------------------------------------- */
\n+
8
\n+
15// \\callgraph
\n+
16
\n+
17#pragma once
\n+
18
\n+
19#include <gtsam/base/FastList.h>
\n+
20#include <gtsam/dllexport.h> // GTSAM_EXPORT
\n+
21#include <gtsam/inference/Key.h> // Key, KeySet
\n+
22#include <gtsam/nonlinear/ISAM2Result.h> //FactorIndices
\n+
23#include <boost/optional.hpp>
\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
\n+\n+
33 ISAM2UpdateParams() = default;
\n+
34
\n+\n
37
\n-
38#include <algorithm>
\n-
39#include <limits>
\n-
40#include <string>
\n-
41#include <utility>
\n-
42
\n-
43namespace gtsam {
\n-
44
\n-
45/* ************************************************************************* */
\n-
46// Special BayesTree class that uses ISAM2 cliques - this is the result of
\n-
47// reeliminating ISAM2 subtrees.
\n-
\n-\n-
49 public:
\n-
50 typedef ISAM2::Base Base;
\n-
51 typedef ISAM2BayesTree This;
\n-
52 typedef boost::shared_ptr<This> shared_ptr;
\n-
53
\n-\n-
55};
\n-
\n-
56
\n-
57/* ************************************************************************* */
\n-
58// Special JunctionTree class that produces ISAM2 BayesTree cliques, used for
\n-
59// reeliminating ISAM2 subtrees.
\n-
\n-\n-
61 : public JunctionTree<ISAM2BayesTree, GaussianFactorGraph> {
\n-
62 public:
\n-\n-
64 typedef ISAM2JunctionTree This;
\n-
65 typedef boost::shared_ptr<This> shared_ptr;
\n-
66
\n-
67 explicit ISAM2JunctionTree(const GaussianEliminationTree& eliminationTree)
\n-
68 : Base(eliminationTree) {}
\n-
69};
\n-
\n-
70
\n-
71/* ************************************************************************* */
\n-
\n-
72struct GTSAM_EXPORT DeltaImpl {
\n-
\n-
73 struct GTSAM_EXPORT PartialSolveResult {
\n-
74 ISAM2::sharedClique bayesTree;
\n-
75 };
\n-
\n-
76
\n-
\n-
77 struct GTSAM_EXPORT ReorderingMode {
\n-
78 size_t nFullSystemVars;
\n-
79 enum { /*AS_ADDED,*/ COLAMD } algorithm;
\n-
80 enum { NO_CONSTRAINT, CONSTRAIN_LAST } constrain;
\n-
81 boost::optional<FastMap<Key, int> > constrainedKeys;
\n-
82 };
\n-
\n-
83
\n-
87 static size_t UpdateGaussNewtonDelta(const ISAM2::Roots& roots,
\n-
88 const KeySet& replacedKeys,
\n-
89 double wildfireThreshold,
\n-
90 VectorValues* delta);
\n-
91
\n-
96 static size_t UpdateRgProd(const ISAM2::Roots& roots,
\n-
97 const KeySet& replacedKeys,
\n-
98 const VectorValues& gradAtZero,
\n-
99 VectorValues* RgProd);
\n-
100
\n-
104 static VectorValues ComputeGradientSearch(const VectorValues& gradAtZero,
\n-
105 const VectorValues& RgProd);
\n-
106};
\n-
\n-
107
\n-
108/* ************************************************************************* */
\n-
\n-
114struct GTSAM_EXPORT UpdateImpl {
\n-
115 const ISAM2Params& params_;
\n-
116 const ISAM2UpdateParams& updateParams_;
\n-
117 UpdateImpl(const ISAM2Params& params, const ISAM2UpdateParams& updateParams)
\n-
118 : params_(params), updateParams_(updateParams) {}
\n-
119
\n-
120 // Provide some debugging information at the start of update
\n-
121 static void LogStartingUpdate(const NonlinearFactorGraph& newFactors,
\n-
122 const ISAM2& isam2) {
\n-
123 gttic(pushBackFactors);
\n-
124 const bool debug = ISDEBUG("ISAM2 update");
\n-
125 const bool verbose = ISDEBUG("ISAM2 update verbose");
\n-
126
\n-
127 if (verbose) {
\n-
128 std::cout << "ISAM2::update\\n";
\n-
129 isam2.print("ISAM2: ");
\n-
130 }
\n-
131
\n-
132 if (debug || verbose) {
\n-
133 newFactors.print("The new factors are: ");
\n-
134 }
\n-
135 }
\n-
136
\n-
137 // Check relinearization if we're at the nth step, or we are using a looser
\n-
138 // loop relinerization threshold.
\n-
139 bool relinarizationNeeded(size_t update_count) const {
\n-
140 return updateParams_.force_relinearize ||
\n-
141 (params_.enableRelinearization &&
\n-
142 update_count % params_.relinearizeSkip == 0);
\n-
143 }
\n-
144
\n-
145 // Add any new factors \\Factors:=\\Factors\\cup\\Factors'.
\n-
146 void pushBackFactors(const NonlinearFactorGraph& newFactors,
\n-
147 NonlinearFactorGraph* nonlinearFactors,
\n-
148 GaussianFactorGraph* linearFactors,
\n-
149 VariableIndex* variableIndex,
\n-
150 FactorIndices* newFactorsIndices,
\n-
151 KeySet* keysWithRemovedFactors) const {
\n-
152 gttic(pushBackFactors);
\n-
153
\n-
154 // Perform the first part of the bookkeeping updates for adding new factors.
\n-
155 // Adds them to the complete list of nonlinear factors, and populates the
\n-
156 // list of new factor indices, both optionally finding and reusing empty
\n-
157 // factor slots.
\n-
158 *newFactorsIndices = nonlinearFactors->add_factors(
\n-
159 newFactors, params_.findUnusedFactorSlots);
\n-
160
\n-
161 // Remove the removed factors
\n-
162 NonlinearFactorGraph removedFactors;
\n-
163 removedFactors.reserve(updateParams_.removeFactorIndices.size());
\n-
164 for (const auto index : updateParams_.removeFactorIndices) {
\n-
165 removedFactors.push_back(nonlinearFactors->at(index));
\n-
166 nonlinearFactors->remove(index);
\n-
167 if (params_.cacheLinearizedFactors) linearFactors->remove(index);
\n-
168 }
\n-
169
\n-
170 // Remove removed factors from the variable index so we do not attempt to
\n-
171 // relinearize them
\n-
172 variableIndex->remove(updateParams_.removeFactorIndices.begin(),
\n-
173 updateParams_.removeFactorIndices.end(),
\n-
174 removedFactors);
\n-
175 *keysWithRemovedFactors = removedFactors.keys();
\n-
176 }
\n-
177
\n-
178 // Get keys from removed factors and new factors, and compute unused keys,
\n-
179 // i.e., keys that are empty now and do not appear in the new factors.
\n-
180 void computeUnusedKeys(const NonlinearFactorGraph& newFactors,
\n-
181 const VariableIndex& variableIndex,
\n-
182 const KeySet& keysWithRemovedFactors,
\n-
183 KeySet* unusedKeys) const {
\n-
184 gttic(computeUnusedKeys);
\n-
185 KeySet removedAndEmpty;
\n-
186 for (Key key : keysWithRemovedFactors) {
\n-
187 if (variableIndex.empty(key))
\n-
188 removedAndEmpty.insert(removedAndEmpty.end(), key);
\n-
189 }
\n-
190 KeySet newFactorSymbKeys = newFactors.keys();
\n-
191 std::set_difference(removedAndEmpty.begin(), removedAndEmpty.end(),
\n-
192 newFactorSymbKeys.begin(), newFactorSymbKeys.end(),
\n-
193 std::inserter(*unusedKeys, unusedKeys->end()));
\n-
194 }
\n-
195
\n-
196 // Calculate nonlinear error
\n-
197 void error(const NonlinearFactorGraph& nonlinearFactors,
\n-
198 const Values& estimate, boost::optional<double>* result) const {
\n-
199 gttic(error);
\n-
200 result->reset(nonlinearFactors.error(estimate));
\n-
201 }
\n-
202
\n-
203 // Mark linear update
\n-
204 void gatherInvolvedKeys(const NonlinearFactorGraph& newFactors,
\n-
205 const NonlinearFactorGraph& nonlinearFactors,
\n-
206 const KeySet& keysWithRemovedFactors,
\n-
207 KeySet* markedKeys) const {
\n-
208 gttic(gatherInvolvedKeys);
\n-
209 *markedKeys = newFactors.keys(); // Get keys from new factors
\n-
210 // Also mark keys involved in removed factors
\n-
211 markedKeys->insert(keysWithRemovedFactors.begin(),
\n-
212 keysWithRemovedFactors.end());
\n-
213
\n-
214 // Also mark any provided extra re-eliminate keys
\n-
215 if (updateParams_.extraReelimKeys) {
\n-
216 for (Key key : *updateParams_.extraReelimKeys) {
\n-
217 markedKeys->insert(key);
\n-
218 }
\n-
219 }
\n-
220
\n-
221 // Also, keys that were not observed in existing factors, but whose affected
\n-
222 // keys have been extended now (e.g. smart factors)
\n-
223 if (updateParams_.newAffectedKeys) {
\n-
224 for (const auto& factorAddedKeys : *updateParams_.newAffectedKeys) {
\n-
225 const auto factorIdx = factorAddedKeys.first;
\n-
226 const auto& affectedKeys = nonlinearFactors.at(factorIdx)->keys();
\n-
227 markedKeys->insert(affectedKeys.begin(), affectedKeys.end());
\n-
228 }
\n-
229 }
\n-
230 }
\n-
231
\n-
232 // Update detail, unused, and observed keys from markedKeys
\n-
233 void updateKeys(const KeySet& markedKeys, ISAM2Result* result) const {
\n-
234 gttic(updateKeys);
\n-
235 // Observed keys for detailed results
\n-
236 if (result->detail && params_.enableDetailedResults) {
\n-
237 for (Key key : markedKeys) {
\n-
238 result->detail->variableStatus[key].isObserved = true;
\n-
239 }
\n-
240 }
\n-
241
\n-
242 for (Key index : markedKeys) {
\n-
243 // Only add if not unused
\n-
244 if (result->unusedKeys.find(index) == result->unusedKeys.end())
\n-
245 // Make a copy of these, as we'll soon add to them
\n-
246 result->observedKeys.push_back(index);
\n-
247 }
\n-
248 }
\n-
249
\n-
250 static void CheckRelinearizationRecursiveMap(
\n-
251 const FastMap<char, Vector>& thresholds, const VectorValues& delta,
\n-
252 const ISAM2::sharedClique& clique, KeySet* relinKeys) {
\n-
253 // Check the current clique for relinearization
\n-
254 bool relinearize = false;
\n-
255 for (Key var : *clique->conditional()) {
\n-
256 // Find the threshold for this variable type
\n-
257 const Vector& threshold = thresholds.find(Symbol(var).chr())->second;
\n-
258
\n-
259 const Vector& deltaVar = delta[var];
\n-
260
\n-
261 // Verify the threshold vector matches the actual variable size
\n-
262 if (threshold.rows() != deltaVar.rows())
\n-
263 throw std::invalid_argument(
\n-
264 "Relinearization threshold vector dimensionality for '" +
\n-
265 std::string(1, Symbol(var).chr()) +
\n-
266 "' passed into iSAM2 parameters does not match actual variable "
\n-
267 "dimensionality.");
\n-
268
\n-
269 // Check for relinearization
\n-
270 if ((deltaVar.array().abs() > threshold.array()).any()) {
\n-
271 relinKeys->insert(var);
\n-
272 relinearize = true;
\n-
273 }
\n-
274 }
\n-
275
\n-
276 // If this node was relinearized, also check its children
\n-
277 if (relinearize) {
\n-
278 for (const ISAM2::sharedClique& child : clique->children) {
\n-
279 CheckRelinearizationRecursiveMap(thresholds, delta, child, relinKeys);
\n-
280 }
\n-
281 }
\n-
282 }
\n-
283
\n-
284 static void CheckRelinearizationRecursiveDouble(
\n-
285 double threshold, const VectorValues& delta,
\n-
286 const ISAM2::sharedClique& clique, KeySet* relinKeys) {
\n-
287 // Check the current clique for relinearization
\n-
288 bool relinearize = false;
\n-
289 for (Key var : *clique->conditional()) {
\n-
290 double maxDelta = delta[var].lpNorm<Eigen::Infinity>();
\n-
291 if (maxDelta >= threshold) {
\n-
292 relinKeys->insert(var);
\n-
293 relinearize = true;
\n-
294 }
\n-
295 }
\n-
296
\n-
297 // If this node was relinearized, also check its children
\n-
298 if (relinearize) {
\n-
299 for (const ISAM2::sharedClique& child : clique->children) {
\n-
300 CheckRelinearizationRecursiveDouble(threshold, delta, child, relinKeys);
\n-
301 }
\n-
302 }
\n-
303 }
\n-
304
\n-
\n-\n-
319 const ISAM2::Roots& roots, const VectorValues& delta,
\n-
320 const ISAM2Params::RelinearizationThreshold& relinearizeThreshold) {
\n-
321 KeySet relinKeys;
\n-
322 for (const ISAM2::sharedClique& root : roots) {
\n-
323 if (relinearizeThreshold.type() == typeid(double))
\n-
324 CheckRelinearizationRecursiveDouble(
\n-
325 boost::get<double>(relinearizeThreshold), delta, root, &relinKeys);
\n-
326 else if (relinearizeThreshold.type() == typeid(FastMap<char, Vector>))
\n-
327 CheckRelinearizationRecursiveMap(
\n-
328 boost::get<FastMap<char, Vector> >(relinearizeThreshold), delta,
\n-
329 root, &relinKeys);
\n-
330 }
\n-
331 return relinKeys;
\n-
332 }
\n-
\n-
333
\n-
\n-\n-
346 const VectorValues& delta,
\n-
347 const ISAM2Params::RelinearizationThreshold& relinearizeThreshold) {
\n-
348 KeySet relinKeys;
\n-
349
\n-
350 if (const double* threshold = boost::get<double>(&relinearizeThreshold)) {
\n-
351 for (const VectorValues::KeyValuePair& key_delta : delta) {
\n-
352 double maxDelta = key_delta.second.lpNorm<Eigen::Infinity>();
\n-
353 if (maxDelta >= *threshold) relinKeys.insert(key_delta.first);
\n-
354 }
\n-
355 } else if (const FastMap<char, Vector>* thresholds =
\n-
356 boost::get<FastMap<char, Vector> >(&relinearizeThreshold)) {
\n-
357 for (const VectorValues::KeyValuePair& key_delta : delta) {
\n-
358 const Vector& threshold =
\n-
359 thresholds->find(Symbol(key_delta.first).chr())->second;
\n-
360 if (threshold.rows() != key_delta.second.rows())
\n-
361 throw std::invalid_argument(
\n-
362 "Relinearization threshold vector dimensionality for '" +
\n-
363 std::string(1, Symbol(key_delta.first).chr()) +
\n-
364 "' passed into iSAM2 parameters does not match actual variable "
\n-
365 "dimensionality.");
\n-
366 if ((key_delta.second.array().abs() > threshold.array()).any())
\n-
367 relinKeys.insert(key_delta.first);
\n-
368 }
\n-
369 }
\n-
370
\n-
371 return relinKeys;
\n-
372 }
\n-
\n-
373
\n-
374 // Mark keys in \\Delta above threshold \\beta:
\n-
375 KeySet gatherRelinearizeKeys(const ISAM2::Roots& roots,
\n-
376 const VectorValues& delta,
\n-
377 const KeySet& fixedVariables,
\n-
378 KeySet* markedKeys) const {
\n-
379 gttic(gatherRelinearizeKeys);
\n-
380 // J=\\{\\Delta_{j}\\in\\Delta|\\Delta_{j}\\geq\\beta\\}.
\n-
381 KeySet relinKeys =
\n-
382 params_.enablePartialRelinearizationCheck
\n-
383 ? CheckRelinearizationPartial(roots, delta,
\n-
384 params_.relinearizeThreshold)
\n-
385 : CheckRelinearizationFull(delta, params_.relinearizeThreshold);
\n-
386 if (updateParams_.forceFullSolve)
\n-
387 relinKeys = CheckRelinearizationFull(delta, 0.0); // for debugging
\n-
388
\n-
389 // Remove from relinKeys any keys whose linearization points are fixed
\n-
390 for (Key key : fixedVariables) {
\n-
391 relinKeys.erase(key);
\n-
392 }
\n-
393 if (updateParams_.noRelinKeys) {
\n-
394 for (Key key : *updateParams_.noRelinKeys) {
\n-
395 relinKeys.erase(key);
\n-
396 }
\n-
397 }
\n-
398
\n-
399 // Add the variables being relinearized to the marked keys
\n-
400 markedKeys->insert(relinKeys.begin(), relinKeys.end());
\n-
401 return relinKeys;
\n-
402 }
\n-
403
\n-
404 // Record relinerization threshold keys in detailed results
\n-
405 void recordRelinearizeDetail(const KeySet& relinKeys,
\n-
406 ISAM2Result::DetailedResults* detail) const {
\n-
407 if (detail && params_.enableDetailedResults) {
\n-
408 for (Key key : relinKeys) {
\n-
409 detail->variableStatus[key].isAboveRelinThreshold = true;
\n-
410 detail->variableStatus[key].isRelinearized = true;
\n-
411 }
\n-
412 }
\n-
413 }
\n-
414
\n-
415 // Mark all cliques that involve marked variables \\Theta_{J} and all
\n-
416 // their ancestors.
\n-
417 void findFluid(const ISAM2::Roots& roots, const KeySet& relinKeys,
\n-
418 KeySet* markedKeys,
\n-
419 ISAM2Result::DetailedResults* detail) const {
\n-
420 gttic(findFluid);
\n-
421 for (const auto& root : roots)
\n-
422 // add other cliques that have the marked ones in the separator
\n-
423 root->findAll(relinKeys, markedKeys);
\n-
424
\n-
425 // Relinearization-involved keys for detailed results
\n-
426 if (detail && params_.enableDetailedResults) {
\n-
427 KeySet involvedRelinKeys;
\n-
428 for (const auto& root : roots)
\n-
429 root->findAll(relinKeys, &involvedRelinKeys);
\n-
430 for (Key key : involvedRelinKeys) {
\n-
431 if (!detail->variableStatus[key].isAboveRelinThreshold) {
\n-
432 detail->variableStatus[key].isRelinearizeInvolved = true;
\n-
433 detail->variableStatus[key].isRelinearized = true;
\n-
434 }
\n-
435 }
\n-
436 }
\n-
437 }
\n-
438
\n-
439 // Linearize new factors
\n-
440 void linearizeNewFactors(const NonlinearFactorGraph& newFactors,
\n-
441 const Values& theta, size_t numNonlinearFactors,
\n-
442 const FactorIndices& newFactorsIndices,
\n-
443 GaussianFactorGraph* linearFactors) const {
\n-
444 gttic(linearizeNewFactors);
\n-
445 auto linearized = newFactors.linearize(theta);
\n-
446 if (params_.findUnusedFactorSlots) {
\n-
447 linearFactors->resize(numNonlinearFactors);
\n-
448 for (size_t i = 0; i < newFactors.size(); ++i)
\n-
449 (*linearFactors)[newFactorsIndices[i]] = (*linearized)[i];
\n-
450 } else {
\n-
451 linearFactors->push_back(*linearized);
\n-
452 }
\n-
453 assert(linearFactors->size() == numNonlinearFactors);
\n-
454 }
\n-
455
\n-
456 void augmentVariableIndex(const NonlinearFactorGraph& newFactors,
\n-
457 const FactorIndices& newFactorsIndices,
\n-
458 VariableIndex* variableIndex) const {
\n-
459 gttic(augmentVariableIndex);
\n-
460 // Augment the variable index with the new factors
\n-
461 if (params_.findUnusedFactorSlots)
\n-
462 variableIndex->augment(newFactors, newFactorsIndices);
\n-
463 else
\n-
464 variableIndex->augment(newFactors);
\n-
465
\n-
466 // Augment it with existing factors which now affect to more variables:
\n-
467 if (updateParams_.newAffectedKeys) {
\n-
468 for (const auto& factorAddedKeys : *updateParams_.newAffectedKeys) {
\n-
469 const auto factorIdx = factorAddedKeys.first;
\n-
470 variableIndex->augmentExistingFactor(factorIdx, factorAddedKeys.second);
\n-
471 }
\n-
472 }
\n-
473 }
\n-
474
\n-
475 static void LogRecalculateKeys(const ISAM2Result& result) {
\n-
476 const bool debug = ISDEBUG("ISAM2 recalculate");
\n-
477
\n-
478 if (debug) {
\n-
479 std::cout << "markedKeys: ";
\n-
480 for (const Key key : result.markedKeys) {
\n-
481 std::cout << key << " ";
\n-
482 }
\n-
483 std::cout << std::endl;
\n-
484 std::cout << "observedKeys: ";
\n-
485 for (const Key key : result.observedKeys) {
\n-
486 std::cout << key << " ";
\n-
487 }
\n-
488 std::cout << std::endl;
\n-
489 }
\n-
490 }
\n-
491
\n-
492 static FactorIndexSet GetAffectedFactors(const KeyList& keys,
\n-
493 const VariableIndex& variableIndex) {
\n-
494 gttic(GetAffectedFactors);
\n-
495 FactorIndexSet indices;
\n-
496 for (const Key key : keys) {
\n-
497 const FactorIndices& factors(variableIndex[key]);
\n-
498 indices.insert(factors.begin(), factors.end());
\n-
499 }
\n-
500 return indices;
\n-
501 }
\n-
502
\n-
503 // find intermediate (linearized) factors from cache that are passed into
\n-
504 // the affected area
\n-
505 static GaussianFactorGraph GetCachedBoundaryFactors(
\n-
506 const ISAM2::Cliques& orphans) {
\n-
507 GaussianFactorGraph cachedBoundary;
\n-
508
\n-
509 for (const auto& orphan : orphans) {
\n-
510 // retrieve the cached factor and add to boundary
\n-
511 cachedBoundary.push_back(orphan->cachedFactor());
\n-
512 }
\n-
513
\n-
514 return cachedBoundary;
\n-
515 }
\n-
516};
\n-
\n-
517
\n-
518} // namespace gtsam
\n-
Global debugging flags.
\n-\n-
The junction tree, template bodies.
\n-\n-
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n-
Class that stores detailed iSAM2 result.
\n-
Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.
\n+
40 boost::optional<FastMap<Key, int>> constrainedKeys{boost::none};
\n+
41
\n+
44 boost::optional<FastList<Key>> noRelinKeys{boost::none};
\n+
45
\n+
49 boost::optional<FastList<Key>> extraReelimKeys{boost::none};
\n+
50
\n+
54 bool force_relinearize{false};
\n+
55
\n+
66 boost::optional<FastMap<FactorIndex, KeySet>> newAffectedKeys{boost::none};
\n+
67
\n+
71 bool forceFullSolve{false};
\n+
72};
\n+
\n+
73
\n+
74} // namespace gtsam
\n+
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n+\n+
Class that stores detailed iSAM2 result.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-\n-
KeySet keys() const
Potentially slow function to return all keys involved, sorted, as a set.
Definition FactorGraph-inst.h:85
\n-
FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)
Add new factors to a factor graph and returns a list of new factor indices, optionally finding and re...
Definition FactorGraph-inst.h:109
\n-
IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition FactorGraph.h:186
\n-
void remove(size_t i)
delete factor without re-arranging indexes by inserting a nullptr pointer
Definition FactorGraph.h:385
\n-
const sharedFactor at(size_t i) const
Get a specific factor by index (this checks array bounds and may throw an exception,...
Definition FactorGraph.h:335
\n-
void reserve(size_t size)
Reserve space for the specified number of factors if you know in advance how many there will be (work...
Definition FactorGraph.h:182
\n-\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print
Definition BayesTree-inst.h:212
\n-
FastVector< sharedClique > Roots
Root cliques.
Definition BayesTree.h:95
\n-
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n-
Character and index key used to refer to variables.
Definition Symbol.h:35
\n-
unsigned char chr() const
Retrieve key character.
Definition Symbol.h:73
\n-
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n-
void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG &factors)
Remove entries corresponding to the specified factors.
Definition VariableIndex-inl.h:54
\n-
bool empty(Key variable) const
Return true if no factors associated with a variable.
Definition VariableIndex.h:98
\n-
Definition GaussianEliminationTree.h:29
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
Definition ISAM2-impl.h:48
\n-
Definition ISAM2-impl.h:61
\n-
Definition ISAM2-impl.h:72
\n-
Definition ISAM2-impl.h:73
\n-
Definition ISAM2-impl.h:77
\n-
Implementation functions for update method All of the methods below have clear inputs and outputs,...
Definition ISAM2-impl.h:114
\n-
static KeySet CheckRelinearizationFull(const VectorValues &delta, const ISAM2Params::RelinearizationThreshold &relinearizeThreshold)
Find the set of variables to be relinearized according to relinearizeThreshold.
Definition ISAM2-impl.h:345
\n-
static KeySet CheckRelinearizationPartial(const ISAM2::Roots &roots, const VectorValues &delta, const ISAM2Params::RelinearizationThreshold &relinearizeThreshold)
Find the set of variables to be relinearized according to relinearizeThreshold.
Definition ISAM2-impl.h:318
\n-
Implementation of the full ISAM2 algorithm for incremental nonlinear optimization.
Definition ISAM2.h:45
\n-
Base::sharedClique sharedClique
Shared pointer to a clique.
Definition ISAM2.h:103
\n-
Definition ISAM2Params.h:135
\n-
boost::variant< double, FastMap< char, Vector > > RelinearizationThreshold
Either a constant relinearization threshold or a per-variable-type set of thresholds.
Definition ISAM2Params.h:140
\n-
This struct is returned from ISAM2::update() and contains information about the update that is useful...
Definition ISAM2Result.h:41
\n
This struct is used by ISAM2::update() to pass additional parameters to give the user a fine-grained ...
Definition ISAM2UpdateParams.h:32
\n+
boost::optional< FastMap< Key, int > > constrainedKeys
An optional map of keys to group labels, such that a variable can be constrained to a particular grou...
Definition ISAM2UpdateParams.h:40
\n
bool force_relinearize
Relinearize any variables whose delta magnitude is sufficiently large (Params::relinearizeThreshold),...
Definition ISAM2UpdateParams.h:54
\n
FactorIndices removeFactorIndices
Indices of factors to remove from system (default: empty)
Definition ISAM2UpdateParams.h:36
\n
bool forceFullSolve
By default, iSAM2 uses a wildfire update scheme that stops updating when the deltas become too small ...
Definition ISAM2UpdateParams.h:71
\n
boost::optional< FastList< Key > > extraReelimKeys
An optional set of nonlinear keys that iSAM2 will re-eliminate, regardless of the size of the linear ...
Definition ISAM2UpdateParams.h:49
\n
boost::optional< FastList< Key > > noRelinKeys
An optional set of nonlinear keys that iSAM2 will hold at a constant linearization point,...
Definition ISAM2UpdateParams.h:44
\n
boost::optional< FastMap< FactorIndex, KeySet > > newAffectedKeys
An optional set of new Keys that are now affected by factors, indexed by factor indices (as returned ...
Definition ISAM2UpdateParams.h:66
\n-
Definition NonlinearFactorGraph.h:55
\n-
void print(const std::string &str="NonlinearFactorGraph: ", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition NonlinearFactorGraph.cpp:55
\n-
double error(const Values &values) const
unnormalized error, in the most common case
Definition NonlinearFactorGraph.cpp:170
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
A key-value pair, which you get by dereferencing iterators.
Definition Values.h:93
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n-\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,642 +1,76 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM2-impl.h\n+ISAM2UpdateParams.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n-2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n-7\n-8 * See LICENSE for the license information\n-9\n-10 * -------------------------------------------------------------------------\n+2 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * Atlanta, Georgia 30332-0415\n+4 * All Rights Reserved\n+5 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+6 * See LICENSE for the license information\n+7 * -------------------------------------------------------------------------\n - */\n-11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh>\n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bd_\be_\bb_\bu_\bg_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh> // We need the inst file\n-because we'll make a special JT templated on ISAM2\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n-30\n-31#include \n-32#include \n-33namespace br {\n-34using namespace boost::range;\n-35using namespace boost::adaptors;\n-36} // namespace br\n+8\n+15// \\callgraph\n+16\n+17#pragma once\n+18\n+19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n+20#include // GTSAM_EXPORT\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh> // Key, KeySet\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh> //FactorIndices\n+23#include \n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+_\b3_\b2struct _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs {\n+33 _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs() = default;\n+34\n+_\b3_\b6 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs _\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n 37\n-38#include \n-39#include \n-40#include \n-41#include \n-42\n-43namespace _\bg_\bt_\bs_\ba_\bm {\n-44\n-45/* *************************************************************************\n-*/\n-46// Special BayesTree class that uses ISAM2 cliques - this is the result of\n-47// reeliminating ISAM2 subtrees.\n-_\b4_\b8class _\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be : public _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bB_\ba_\bs_\be {\n-49 public:\n-50 typedef _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bB_\ba_\bs_\be _\bB_\ba_\bs_\be;\n-51 typedef _\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-52 typedef boost::shared_ptr shared_ptr;\n-53\n-54 _\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() {}\n-55};\n-56\n-57/* *************************************************************************\n-*/\n-58// Special JunctionTree class that produces ISAM2 BayesTree cliques, used for\n-59// reeliminating ISAM2 subtrees.\n-_\b6_\b0class _\bI_\bS_\bA_\bM_\b2_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-61 : public _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n-62 public:\n-63 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n-64 typedef _\bI_\bS_\bA_\bM_\b2_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-65 typedef boost::shared_ptr shared_ptr;\n-66\n-67 explicit _\bI_\bS_\bA_\bM_\b2_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be& eliminationTree)\n-68 : _\bB_\ba_\bs_\be(eliminationTree) {}\n-69};\n-70\n-71/* *************************************************************************\n-*/\n-_\b7_\b2struct GTSAM_EXPORT _\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl {\n-_\b7_\b3 struct GTSAM_EXPORT _\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\bo_\bl_\bv_\be_\bR_\be_\bs_\bu_\bl_\bt {\n-74 _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be bayesTree;\n-75 };\n-76\n-_\b7_\b7 struct GTSAM_EXPORT _\bR_\be_\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\bM_\bo_\bd_\be {\n-78 size_t nFullSystemVars;\n-79 enum { /*AS_ADDED,*/ COLAMD } algorithm;\n-80 enum { NO_CONSTRAINT, CONSTRAIN_LAST } constrain;\n-81 boost::optional > constrainedKeys;\n-82 };\n-83\n-87 static size_t UpdateGaussNewtonDelta(const ISAM2::Roots& roots,\n-88 const _\bK_\be_\by_\bS_\be_\bt& replacedKeys,\n-89 double wildfireThreshold,\n-90 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta);\n-91\n-96 static size_t UpdateRgProd(const ISAM2::Roots& roots,\n-97 const _\bK_\be_\by_\bS_\be_\bt& replacedKeys,\n-98 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gradAtZero,\n-99 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* RgProd);\n-100\n-104 static _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs ComputeGradientSearch(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gradAtZero,\n-105 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& RgProd);\n-106};\n-107\n-108/* *************************************************************************\n-*/\n-_\b1_\b1_\b4struct GTSAM_EXPORT _\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl {\n-115 const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs& params_;\n-116 const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams_;\n-117 _\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl(const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs& params, const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs&\n-updateParams)\n-118 : params_(params), updateParams_(updateParams) {}\n-119\n-120 // Provide some debugging information at the start of update\n-121 static void LogStartingUpdate(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n-122 const _\bI_\bS_\bA_\bM_\b2& isam2) {\n-123 gttic(pushBackFactors);\n-124 const bool debug = ISDEBUG(\"ISAM2 update\");\n-125 const bool verbose = ISDEBUG(\"ISAM2 update verbose\");\n-126\n-127 if (verbose) {\n-128 std::cout << \"ISAM2::update\\n\";\n-129 isam2._\bp_\br_\bi_\bn_\bt(\"ISAM2: \");\n-130 }\n-131\n-132 if (debug || verbose) {\n-133 newFactors._\bp_\br_\bi_\bn_\bt(\"The new factors are: \");\n-134 }\n-135 }\n-136\n-137 // Check relinearization if we're at the nth step, or we are using a looser\n-138 // loop relinerization threshold.\n-139 bool relinarizationNeeded(size_t update_count) const {\n-140 return updateParams_._\bf_\bo_\br_\bc_\be_\b__\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be ||\n-141 (params_.enableRelinearization &&\n-142 update_count % params_.relinearizeSkip == 0);\n-143 }\n-144\n-145 // Add any new factors \\Factors:=\\Factors\\cup\\Factors'.\n-146 void pushBackFactors(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n-147 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh* nonlinearFactors,\n-148 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh* linearFactors,\n-149 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx* variableIndex,\n-150 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs* newFactorsIndices,\n-151 _\bK_\be_\by_\bS_\be_\bt* keysWithRemovedFactors) const {\n-152 gttic(pushBackFactors);\n-153\n-154 // Perform the first part of the bookkeeping updates for adding new\n-factors.\n-155 // Adds them to the complete list of nonlinear factors, and populates the\n-156 // list of new factor indices, both optionally finding and reusing empty\n-157 // factor slots.\n-158 *newFactorsIndices = nonlinearFactors->_\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs(\n-159 newFactors, params_.findUnusedFactorSlots);\n-160\n-161 // Remove the removed factors\n-162 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh removedFactors;\n-163 removedFactors._\br_\be_\bs_\be_\br_\bv_\be(updateParams_._\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs.size());\n-164 for (const auto index : updateParams_._\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs) {\n-165 removedFactors._\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(nonlinearFactors->_\ba_\bt(index));\n-166 nonlinearFactors->_\br_\be_\bm_\bo_\bv_\be(index);\n-167 if (params_.cacheLinearizedFactors) linearFactors->_\br_\be_\bm_\bo_\bv_\be(index);\n-168 }\n-169\n-170 // Remove removed factors from the variable index so we do not attempt to\n-171 // relinearize them\n-172 variableIndex->_\br_\be_\bm_\bo_\bv_\be(updateParams_._\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs.begin(),\n-173 updateParams_._\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs.end(),\n-174 removedFactors);\n-175 *keysWithRemovedFactors = removedFactors._\bk_\be_\by_\bs();\n-176 }\n-177\n-178 // Get keys from removed factors and new factors, and compute unused keys,\n-179 // i.e., keys that are empty now and do not appear in the new factors.\n-180 void computeUnusedKeys(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n-181 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& variableIndex,\n-182 const _\bK_\be_\by_\bS_\be_\bt& keysWithRemovedFactors,\n-183 _\bK_\be_\by_\bS_\be_\bt* unusedKeys) const {\n-184 gttic(computeUnusedKeys);\n-185 _\bK_\be_\by_\bS_\be_\bt removedAndEmpty;\n-186 for (_\bK_\be_\by key : keysWithRemovedFactors) {\n-187 if (variableIndex._\be_\bm_\bp_\bt_\by(key))\n-188 removedAndEmpty.insert(removedAndEmpty.end(), key);\n-189 }\n-190 _\bK_\be_\by_\bS_\be_\bt newFactorSymbKeys = newFactors._\bk_\be_\by_\bs();\n-191 std::set_difference(removedAndEmpty.begin(), removedAndEmpty.end(),\n-192 newFactorSymbKeys.begin(), newFactorSymbKeys.end(),\n-193 std::inserter(*unusedKeys, unusedKeys->end()));\n-194 }\n-195\n-196 // Calculate nonlinear error\n-197 void error(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& nonlinearFactors,\n-198 const _\bV_\ba_\bl_\bu_\be_\bs& estimate, boost::optional* result) const {\n-199 gttic(error);\n-200 result->reset(nonlinearFactors._\be_\br_\br_\bo_\br(estimate));\n-201 }\n-202\n-203 // Mark linear update\n-204 void gatherInvolvedKeys(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n-205 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& nonlinearFactors,\n-206 const _\bK_\be_\by_\bS_\be_\bt& keysWithRemovedFactors,\n-207 _\bK_\be_\by_\bS_\be_\bt* markedKeys) const {\n-208 gttic(gatherInvolvedKeys);\n-209 *markedKeys = newFactors._\bk_\be_\by_\bs(); // Get keys from new factors\n-210 // Also mark keys involved in removed factors\n-211 markedKeys->insert(keysWithRemovedFactors.begin(),\n-212 keysWithRemovedFactors.end());\n-213\n-214 // Also mark any provided extra re-eliminate keys\n-215 if (updateParams_._\be_\bx_\bt_\br_\ba_\bR_\be_\be_\bl_\bi_\bm_\bK_\be_\by_\bs) {\n-216 for (_\bK_\be_\by key : *updateParams_._\be_\bx_\bt_\br_\ba_\bR_\be_\be_\bl_\bi_\bm_\bK_\be_\by_\bs) {\n-217 markedKeys->insert(key);\n-218 }\n-219 }\n-220\n-221 // Also, keys that were not observed in existing factors, but whose\n-affected\n-222 // keys have been extended now (e.g. smart factors)\n-223 if (updateParams_._\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs) {\n-224 for (const auto& factorAddedKeys : *updateParams_._\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs) {\n-225 const auto factorIdx = factorAddedKeys.first;\n-226 const auto& affectedKeys = nonlinearFactors._\ba_\bt(factorIdx)->keys();\n-227 markedKeys->insert(affectedKeys.begin(), affectedKeys.end());\n-228 }\n-229 }\n-230 }\n-231\n-232 // Update detail, unused, and observed keys from markedKeys\n-233 void updateKeys(const _\bK_\be_\by_\bS_\be_\bt& markedKeys, _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt* result) const {\n-234 gttic(updateKeys);\n-235 // Observed keys for detailed results\n-236 if (result->detail && params_.enableDetailedResults) {\n-237 for (_\bK_\be_\by key : markedKeys) {\n-238 result->detail->variableStatus[key].isObserved = true;\n-239 }\n-240 }\n-241\n-242 for (_\bK_\be_\by index : markedKeys) {\n-243 // Only add if not unused\n-244 if (result->unusedKeys.find(index) == result->unusedKeys.end())\n-245 // Make a copy of these, as we'll soon add to them\n-246 result->observedKeys.push_back(index);\n-247 }\n-248 }\n-249\n-250 static void CheckRelinearizationRecursiveMap(\n-251 const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b>& thresholds, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta,\n-252 const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& clique, _\bK_\be_\by_\bS_\be_\bt* relinKeys) {\n-253 // Check the current clique for relinearization\n-254 bool relinearize = false;\n-255 for (_\bK_\be_\by var : *clique->conditional()) {\n-256 // Find the threshold for this variable type\n-257 const Vector& threshold = thresholds.find(_\bS_\by_\bm_\bb_\bo_\bl(var)._\bc_\bh_\br())->second;\n-258\n-259 const Vector& deltaVar = delta[var];\n-260\n-261 // Verify the threshold vector matches the actual variable size\n-262 if (threshold.rows() != deltaVar.rows())\n-263 throw std::invalid_argument(\n-264 \"Relinearization threshold vector dimensionality for '\" +\n-265 std::string(1, _\bS_\by_\bm_\bb_\bo_\bl(var).chr()) +\n-266 \"' passed into iSAM2 parameters does not match actual variable \"\n-267 \"dimensionality.\");\n-268\n-269 // Check for relinearization\n-270 if ((deltaVar.array().abs() > threshold.array()).any()) {\n-271 relinKeys->insert(var);\n-272 relinearize = true;\n-273 }\n-274 }\n-275\n-276 // If this node was relinearized, also check its children\n-277 if (relinearize) {\n-278 for (const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& child : clique->children) {\n-279 CheckRelinearizationRecursiveMap(thresholds, delta, child, relinKeys);\n-280 }\n-281 }\n-282 }\n-283\n-284 static void CheckRelinearizationRecursiveDouble(\n-285 double threshold, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta,\n-286 const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& clique, _\bK_\be_\by_\bS_\be_\bt* relinKeys) {\n-287 // Check the current clique for relinearization\n-288 bool relinearize = false;\n-289 for (_\bK_\be_\by var : *clique->conditional()) {\n-290 double maxDelta = delta[var].lpNorm();\n-291 if (maxDelta >= threshold) {\n-292 relinKeys->insert(var);\n-293 relinearize = true;\n-294 }\n-295 }\n-296\n-297 // If this node was relinearized, also check its children\n-298 if (relinearize) {\n-299 for (const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& child : clique->children) {\n-300 CheckRelinearizationRecursiveDouble(threshold, delta, child, relinKeys);\n-301 }\n-302 }\n-303 }\n-304\n-_\b3_\b1_\b8 static _\bK_\be_\by_\bS_\be_\bt _\bC_\bh_\be_\bc_\bk_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\bt_\bi_\ba_\bl(\n-319 const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bR_\bo_\bo_\bt_\bs& roots, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta,\n-320 const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd& relinearizeThreshold) {\n-321 _\bK_\be_\by_\bS_\be_\bt relinKeys;\n-322 for (const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be& root : roots) {\n-323 if (relinearizeThreshold.type() == typeid(double))\n-324 CheckRelinearizationRecursiveDouble(\n-325 boost::get(relinearizeThreshold), delta, root, &relinKeys);\n-326 else if (relinearizeThreshold.type() == typeid(_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b>))\n-327 CheckRelinearizationRecursiveMap(\n-328 boost::get<_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b> >(relinearizeThreshold), delta,\n-329 root, &relinKeys);\n-330 }\n-331 return relinKeys;\n-332 }\n-333\n-_\b3_\b4_\b5 static _\bK_\be_\by_\bS_\be_\bt _\bC_\bh_\be_\bc_\bk_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bl_\bl(\n-346 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta,\n-347 const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd& relinearizeThreshold) {\n-348 _\bK_\be_\by_\bS_\be_\bt relinKeys;\n-349\n-350 if (const double* threshold = boost::get(&relinearizeThreshold)) {\n-351 for (const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br& key_delta : delta) {\n-352 double maxDelta = key_delta.second.lpNorm();\n-353 if (maxDelta >= *threshold) relinKeys.insert(key_delta.first);\n-354 }\n-355 } else if (const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b>* thresholds =\n-356 boost::get<_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bc_\bh_\ba_\br_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b> >(&relinearizeThreshold)) {\n-357 for (const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br& key_delta : delta) {\n-358 const Vector& threshold =\n-359 thresholds->find(_\bS_\by_\bm_\bb_\bo_\bl(key_delta.first)._\bc_\bh_\br())->second;\n-360 if (threshold.rows() != key_delta.second.rows())\n-361 throw std::invalid_argument(\n-362 \"Relinearization threshold vector dimensionality for '\" +\n-363 std::string(1, _\bS_\by_\bm_\bb_\bo_\bl(key_delta.first)._\bc_\bh_\br()) +\n-364 \"' passed into iSAM2 parameters does not match actual variable \"\n-365 \"dimensionality.\");\n-366 if ((key_delta.second.array().abs() > threshold.array()).any())\n-367 relinKeys.insert(key_delta.first);\n-368 }\n-369 }\n-370\n-371 return relinKeys;\n-372 }\n-373\n-374 // Mark keys in \\Delta above threshold \\beta:\n-375 _\bK_\be_\by_\bS_\be_\bt gatherRelinearizeKeys(const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bR_\bo_\bo_\bt_\bs& roots,\n-376 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta,\n-377 const _\bK_\be_\by_\bS_\be_\bt& fixedVariables,\n-378 _\bK_\be_\by_\bS_\be_\bt* markedKeys) const {\n-379 gttic(gatherRelinearizeKeys);\n-380 // J=\\{\\Delta_{j}\\in\\Delta|\\Delta_{j}\\geq\\beta\\}.\n-381 _\bK_\be_\by_\bS_\be_\bt relinKeys =\n-382 params_.enablePartialRelinearizationCheck\n-383 ? CheckRelinearizationPartial(roots, delta,\n-384 params_.relinearizeThreshold)\n-385 : CheckRelinearizationFull(delta, params_.relinearizeThreshold);\n-386 if (updateParams_._\bf_\bo_\br_\bc_\be_\bF_\bu_\bl_\bl_\bS_\bo_\bl_\bv_\be)\n-387 relinKeys = CheckRelinearizationFull(delta, 0.0); // for debugging\n-388\n-389 // Remove from relinKeys any keys whose linearization points are fixed\n-390 for (_\bK_\be_\by key : fixedVariables) {\n-391 relinKeys.erase(key);\n-392 }\n-393 if (updateParams_._\bn_\bo_\bR_\be_\bl_\bi_\bn_\bK_\be_\by_\bs) {\n-394 for (Key key : *updateParams_.noRelinKeys) {\n-395 relinKeys.erase(key);\n-396 }\n-397 }\n-398\n-399 // Add the variables being relinearized to the marked keys\n-400 markedKeys->insert(relinKeys.begin(), relinKeys.end());\n-401 return relinKeys;\n-402 }\n-403\n-404 // Record relinerization threshold keys in detailed results\n-405 void recordRelinearizeDetail(const KeySet& relinKeys,\n-406 ISAM2Result::DetailedResults* detail) const {\n-407 if (detail && params_.enableDetailedResults) {\n-408 for (Key key : relinKeys) {\n-409 detail->variableStatus[key].isAboveRelinThreshold = true;\n-410 detail->variableStatus[key].isRelinearized = true;\n-411 }\n-412 }\n-413 }\n-414\n-415 // Mark all cliques that involve marked variables \\Theta_{J} and all\n-416 // their ancestors.\n-417 void findFluid(const ISAM2::Roots& roots, const KeySet& relinKeys,\n-418 KeySet* markedKeys,\n-419 ISAM2Result::DetailedResults* detail) const {\n-420 gttic(findFluid);\n-421 for (const auto& root : roots)\n-422 // add other cliques that have the marked ones in the separator\n-423 root->findAll(relinKeys, markedKeys);\n-424\n-425 // Relinearization-involved keys for detailed results\n-426 if (detail && params_.enableDetailedResults) {\n-427 KeySet involvedRelinKeys;\n-428 for (const auto& root : roots)\n-429 root->findAll(relinKeys, &involvedRelinKeys);\n-430 for (Key key : involvedRelinKeys) {\n-431 if (!detail->variableStatus[key].isAboveRelinThreshold) {\n-432 detail->variableStatus[key].isRelinearizeInvolved = true;\n-433 detail->variableStatus[key].isRelinearized = true;\n-434 }\n-435 }\n-436 }\n-437 }\n-438\n-439 // Linearize new factors\n-440 void linearizeNewFactors(const NonlinearFactorGraph& newFactors,\n-441 const _\bV_\ba_\bl_\bu_\be_\bs& theta, size_t numNonlinearFactors,\n-442 const FactorIndices& newFactorsIndices,\n-443 GaussianFactorGraph* linearFactors) const {\n-444 gttic(linearizeNewFactors);\n-445 auto linearized = newFactors.linearize(theta);\n-446 if (params_.findUnusedFactorSlots) {\n-447 linearFactors->resize(numNonlinearFactors);\n-448 for (size_t i = 0; i < newFactors.size(); ++i)\n-449 (*linearFactors)[newFactorsIndices[i]] = (*linearized)[i];\n-450 } else {\n-451 linearFactors->push_back(*linearized);\n-452 }\n-453 assert(linearFactors->size() == numNonlinearFactors);\n-454 }\n-455\n-456 void augmentVariableIndex(const NonlinearFactorGraph& newFactors,\n-457 const FactorIndices& newFactorsIndices,\n-458 VariableIndex* variableIndex) const {\n-459 gttic(augmentVariableIndex);\n-460 // Augment the variable index with the new factors\n-461 if (params_.findUnusedFactorSlots)\n-462 variableIndex->augment(newFactors, newFactorsIndices);\n-463 else\n-464 variableIndex->augment(newFactors);\n-465\n-466 // Augment it with existing factors which now affect to more variables:\n-467 if (updateParams_._\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs) {\n-468 for (const auto& factorAddedKeys : *updateParams_.newAffectedKeys) {\n-469 const auto factorIdx = factorAddedKeys.first;\n-470 variableIndex->augmentExistingFactor(factorIdx, factorAddedKeys.second);\n-471 }\n-472 }\n-473 }\n-474\n-475 static void LogRecalculateKeys(const ISAM2Result& result) {\n-476 const bool debug = ISDEBUG(\"ISAM2 recalculate\");\n-477\n-478 if (debug) {\n-479 std::cout << \"markedKeys: \";\n-480 for (const Key key : result.markedKeys) {\n-481 std::cout << key << \" \";\n-482 }\n-483 std::cout << std::endl;\n-484 std::cout << \"observedKeys: \";\n-485 for (const Key key : result.observedKeys) {\n-486 std::cout << key << \" \";\n-487 }\n-488 std::cout << std::endl;\n-489 }\n-490 }\n-491\n-492 static FactorIndexSet GetAffectedFactors(const KeyList& keys,\n-493 const VariableIndex& variableIndex) {\n-494 gttic(GetAffectedFactors);\n-495 FactorIndexSet indices;\n-496 for (const Key key : keys) {\n-497 const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& factors(variableIndex[key]);\n-498 indices.insert(factors.begin(), factors.end());\n-499 }\n-500 return indices;\n-501 }\n-502\n-503 // find intermediate (linearized) factors from cache that are passed into\n-504 // the affected area\n-505 static GaussianFactorGraph GetCachedBoundaryFactors(\n-506 const ISAM2::Cliques& orphans) {\n-507 GaussianFactorGraph cachedBoundary;\n-508\n-509 for (const auto& orphan : orphans) {\n-510 // retrieve the cached factor and add to boundary\n-511 cachedBoundary.push_back(orphan->cachedFactor());\n-512 }\n-513\n-514 return cachedBoundary;\n-515 }\n-516};\n-517\n-518} // namespace gtsam\n-_\bd_\be_\bb_\bu_\bg_\b._\bh\n-Global debugging flags.\n-_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n-_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n-The junction tree, template bodies.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n+_\b4_\b0 boost::optional> _\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bK_\be_\by_\bs{boost::none};\n+41\n+_\b4_\b4 boost::optional> _\bn_\bo_\bR_\be_\bl_\bi_\bn_\bK_\be_\by_\bs{boost::none};\n+45\n+_\b4_\b9 boost::optional> _\be_\bx_\bt_\br_\ba_\bR_\be_\be_\bl_\bi_\bm_\bK_\be_\by_\bs{boost::none};\n+50\n+_\b5_\b4 bool _\bf_\bo_\br_\bc_\be_\b__\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be{false};\n+55\n+_\b6_\b6 boost::optional> _\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs{boost::none};\n+67\n+_\b7_\b1 bool _\bf_\bo_\br_\bc_\be_\bF_\bu_\bl_\bl_\bS_\bo_\bl_\bv_\be{false};\n+72};\n+73\n+74} // namespace gtsam\n+_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+A thin wrapper around std::list that uses boost's fast_pool_allocator.\n+_\bK_\be_\by_\b._\bh\n _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh\n Class that stores detailed iSAM2 result.\n-_\bI_\bS_\bA_\bM_\b2_\b._\bh\n-Incremental update functionality (ISAM2) for BayesTree, with fluid\n-relinearization.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n FastVector< FactorIndex > FactorIndices\n Define collection types:\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bk_\be_\by_\bs\n-KeySet keys() const\n-Potentially slow function to return all keys involved, sorted, as a set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs\n-FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)\n-Add new factors to a factor graph and returns a list of new factor indices,\n-optionally finding and re...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)\n-Add a factor directly using a shared_ptr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bm_\bo_\bv_\be\n-void remove(size_t i)\n-delete factor without re-arranging indexes by inserting a nullptr pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:385\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bt\n-const sharedFactor at(size_t i) const\n-Get a specific factor by index (this checks array bounds and may throw an\n-exception,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:335\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bs_\be_\br_\bv_\be\n-void reserve(size_t size)\n-Reserve space for the specified number of factors if you know in advance how\n-many there will be (work...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:182\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\b _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\b _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>_\b:_\b:_\bR_\bo_\bo_\bt_\bs\n-FastVector< sharedClique > Roots\n-Root cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-A JunctionTree is a cluster tree, a set of variable clusters with factors,\n-arranged in a tree,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl\n-Character and index key used to refer to variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Symbol.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\b:_\b:_\bc_\bh_\br\n-unsigned char chr() const\n-Retrieve key character.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Symbol.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-The VariableIndex class computes and stores the block column structure of a\n-factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\br_\be_\bm_\bo_\bv_\be\n-void remove(ITERATOR firstFactor, ITERATOR lastFactor, const FG &factors)\n-Remove entries corresponding to the specified factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex-inl.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty(Key variable) const\n-Return true if no factors associated with a variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl_\b:_\b:_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\bo_\bl_\bv_\be_\bR_\be_\bs_\bu_\bl_\bt\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bl_\bt_\ba_\bI_\bm_\bp_\bl_\b:_\b:_\bR_\be_\bo_\br_\bd_\be_\br_\bi_\bn_\bg_\bM_\bo_\bd_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl\n-Implementation functions for update method All of the methods below have clear\n-inputs and outputs,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl_\b:_\b:_\bC_\bh_\be_\bc_\bk_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bl_\bl\n-static KeySet CheckRelinearizationFull(const VectorValues &delta, const\n-ISAM2Params::RelinearizationThreshold &relinearizeThreshold)\n-Find the set of variables to be relinearized according to relinearizeThreshold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:345\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bI_\bm_\bp_\bl_\b:_\b:_\bC_\bh_\be_\bc_\bk_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\bt_\bi_\ba_\bl\n-static KeySet CheckRelinearizationPartial(const ISAM2::Roots &roots, const\n-VectorValues &delta, const ISAM2Params::RelinearizationThreshold\n-&relinearizeThreshold)\n-Find the set of variables to be relinearized according to relinearizeThreshold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2-impl.h:318\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2\n-Implementation of the full ISAM2 algorithm for incremental nonlinear\n-optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be\n-Base::sharedClique sharedClique\n-Shared pointer to a clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-boost::variant< double, FastMap< char, Vector > > RelinearizationThreshold\n-Either a constant relinearization threshold or a per-variable-type set of\n-thresholds.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt\n-This struct is returned from ISAM2::update() and contains information about the\n-update that is useful...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs\n This struct is used by ISAM2::update() to pass additional parameters to give\n the user a fine-grained ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bK_\be_\by_\bs\n+boost::optional< FastMap< Key, int > > constrainedKeys\n+An optional map of keys to group labels, such that a variable can be\n+constrained to a particular grou...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:40\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bf_\bo_\br_\bc_\be_\b__\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n bool force_relinearize\n Relinearize any variables whose delta magnitude is sufficiently large (Params::\n relinearizeThreshold),...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:54\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n FactorIndices removeFactorIndices\n@@ -658,32 +92,11 @@\n linearization point,...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:44\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs\n boost::optional< FastMap< FactorIndex, KeySet > > newAffectedKeys\n An optional set of new Keys that are now affected by factors, indexed by factor\n indices (as returned ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &str=\"NonlinearFactorGraph: \", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.cpp:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &values) const\n-unnormalized error, in the most common case\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.cpp:170\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n-A key-value pair, which you get by dereferencing iterators.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:93\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n-_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\b-_\bi_\bm_\bp_\bl_\b._\bh\n+ * _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01070.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01070.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/nonlinearExceptions.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExtendedKalmanFilter.h File Reference\n \n \n \n \n \n \n \n@@ -96,43 +96,44 @@\n \n \n \n
\n \n-
nonlinearExceptions.h File Reference
\n+
ExtendedKalmanFilter.h File Reference
\n
\n
\n \n-

Exceptions that may be thrown by nonlinear optimization components. \n+

Class to perform generic Kalman Filtering using nonlinear factor graphs. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::MarginalizeNonleafException
 Thrown when requesting to marginalize out variables from ISAM2 that are not leaves. More...
class  gtsam::ExtendedKalmanFilter< VALUE >
 This is a generic Extended Kalman Filter class implemented using nonlinear factors. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Exceptions that may be thrown by nonlinear optimization components.

\n-
Author
Richard Roberts
\n-
Date
Aug 17, 2012
\n+

Class to perform generic Kalman Filtering using nonlinear factor graphs.

\n+
Author
Stephen Williams
\n+
\n+Chris Beall
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-nonlinearExceptions.h File Reference\n-Exceptions that may be thrown by nonlinear optimization components. _\bM_\bo_\br_\be_\b._\b._\b.\n+ExtendedKalmanFilter.h File Reference\n+Class to perform generic Kalman Filtering using nonlinear factor graphs.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bi_\bz_\be_\bN_\bo_\bn_\bl_\be_\ba_\bf_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-\u00a0 Thrown when requesting to marginalize out variables from _\bI_\bS_\bA_\bM_\b2 that are\n- not leaves. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n+\u00a0 This is a generic Extended Kalman Filter class implemented using\n+ nonlinear factors. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Exceptions that may be thrown by nonlinear optimization components.\n+Class to perform generic Kalman Filtering using nonlinear factor graphs.\n Author\n- Richard Roberts\n- Date\n- Aug 17, 2012\n+ Stephen Williams\n+ Chris Beall\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+ * _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01070.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01070.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01070 = [\n- [\"gtsam::MarginalizeNonleafException\", \"a04492.html\", null]\n+ [\"gtsam::ExtendedKalmanFilter< VALUE >\", \"a04332.html\", \"a04332\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01070_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01070_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/nonlinearExceptions.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExtendedKalmanFilter.h Source File\n \n \n \n \n \n \n \n@@ -98,69 +98,110 @@\n
No Matches
\n \n \n \n \n \n
\n-
nonlinearExceptions.h
\n+
ExtendedKalmanFilter.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <boost/lexical_cast.hpp>
\n-
21#include <exception>
\n-
22
\n-
23#include <gtsam/inference/Key.h>
\n+
19// \\callgraph
\n+
20#pragma once
\n+
21
\n+\n+\n
24
\n
25namespace gtsam {
\n
26
\n-
\n-
33 class MarginalizeNonleafException : public std::exception {
\n-
34 Key key_;
\n-
35 KeyFormatter formatter_;
\n-
36 mutable std::string what_;
\n-
37 public:
\n-
38 MarginalizeNonleafException(Key key, KeyFormatter formatter = DefaultKeyFormatter) noexcept :
\n-
39 key_(key), formatter_(formatter) {}
\n-
40 virtual ~MarginalizeNonleafException() noexcept {}
\n-
41 Key key() const { return key_; }
\n-
42 const char* what() const noexcept override {
\n-
43 if(what_.empty())
\n-
44 what_ =
\n-
45"\\nRequested to marginalize out variable " + formatter_(key_) + ", but this variable\\n\\
\n-
46is not a leaf. To make the variables you would like to marginalize be leaves,\\n\\
\n-
47their ordering should be constrained using the constrainedKeys argument to\\n\\
\n-
48ISAM2::update().\\n";
\n-
49 return what_.c_str();
\n-
50 }
\n-
51 };
\n-
\n-
52
\n-
53}
\n-\n+
44template <class VALUE>
\n+
\n+\n+
46 // Check that VALUE type is a testable Manifold
\n+
47 BOOST_CONCEPT_ASSERT((IsTestable<VALUE>));
\n+
48 BOOST_CONCEPT_ASSERT((IsManifold<VALUE>));
\n+
49
\n+
50 public:
\n+
51 typedef boost::shared_ptr<ExtendedKalmanFilter<VALUE> > shared_ptr;
\n+
52 typedef VALUE T;
\n+
53
\n+
54#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
55 //@deprecated: any NoiseModelFactor will do, as long as they have the right keys
\n+
56 typedef NoiseModelFactorN<VALUE, VALUE> MotionFactor;
\n+
57 typedef NoiseModelFactorN<VALUE> MeasurementFactor;
\n+
58#endif
\n+
59
\n+
60 protected:
\n+
61 T x_; // linearization point
\n+
62 JacobianFactor::shared_ptr priorFactor_; // Gaussian density on x_
\n+
63
\n+
64 static T solve_(const GaussianFactorGraph& linearFactorGraph, const Values& linearizationPoints,
\n+
65 Key x, JacobianFactor::shared_ptr* newPrior);
\n+
66
\n+
67 public:
\n+
70
\n+
71 ExtendedKalmanFilter(Key key_initial, T x_initial, noiseModel::Gaussian::shared_ptr P_initial);
\n+
72
\n+
76
\n+
\n+
78 void print(const std::string& s = "") const {
\n+
79 std::cout << s << "\\n";
\n+
80 x_.print(s + "x");
\n+
81 priorFactor_->print(s + "density");
\n+
82 }
\n+
\n+
83
\n+
87
\n+
93 T predict(const NoiseModelFactor& motionFactor);
\n+
94
\n+
99 T update(const NoiseModelFactor& measurementFactor);
\n+
100
\n+
\n+\n+
103 return priorFactor_;
\n+
104 }
\n+
\n+
105
\n+
107};
\n+
\n+
108
\n+
109} // namespace
\n+
110
\n+\n+
Non-linear factor base classes.
\n+
Factor Graph consisting of non-linear factors.
\n+
Class to perform generic Kalman Filtering using nonlinear factor graphs.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
Thrown when requesting to marginalize out variables from ISAM2 that are not leaves.
Definition nonlinearExceptions.h:33
\n+
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition JacobianFactor.h:96
\n+
This is a generic Extended Kalman Filter class implemented using nonlinear factors.
Definition ExtendedKalmanFilter.h:45
\n+
T update(const NoiseModelFactor &measurementFactor)
Calculate posterior density P(x_) ~ L(z|x) P(x) The likelihood L(z|x) should be given as a unary fact...
Definition ExtendedKalmanFilter-inl.h:105
\n+
const JacobianFactor::shared_ptr Density() const
Return current predictive (if called after predict)/posterior (if called after update)
Definition ExtendedKalmanFilter.h:102
\n+
T predict(const NoiseModelFactor &motionFactor)
Calculate predictive density The motion model should be given as a factor with key1 for and key2 fo...
Definition ExtendedKalmanFilter-inl.h:80
\n+
void print(const std::string &s="") const
print
Definition ExtendedKalmanFilter.h:78
\n+
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,73 +1,141 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-nonlinearExceptions.h\n+ExtendedKalmanFilter.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include \n-21#include \n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+19// \\callgraph\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n 24\n 25namespace _\bg_\bt_\bs_\ba_\bm {\n 26\n-_\b3_\b3 class _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bi_\bz_\be_\bN_\bo_\bn_\bl_\be_\ba_\bf_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn : public std::exception {\n-34 _\bK_\be_\by key_;\n-35 _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br formatter_;\n-36 mutable std::string what_;\n-37 public:\n-38 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bi_\bz_\be_\bN_\bo_\bn_\bl_\be_\ba_\bf_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(_\bK_\be_\by key, _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br formatter =\n-DefaultKeyFormatter) noexcept :\n-39 key_(key), formatter_(formatter) {}\n-40 virtual _\b~_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bi_\bz_\be_\bN_\bo_\bn_\bl_\be_\ba_\bf_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn() noexcept {}\n-41 _\bK_\be_\by key() const { return key_; }\n-42 const char* what() const noexcept override {\n-43 if(what_.empty())\n-44 what_ =\n-45\"\\nRequested to marginalize out variable \" + formatter_(key_) + \", but this\n-variable\\n\\\n-46is not a leaf. To make the variables you would like to marginalize be\n-leaves,\\n\\\n-47their ordering should be constrained using the constrainedKeys argument to\\n\\\n-48ISAM2::update().\\n\";\n-49 return what_.c_str();\n-50 }\n-51 };\n-52\n-53}\n-_\bK_\be_\by_\b._\bh\n+44template \n+_\b4_\b5class _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br {\n+46 // Check that VALUE type is a testable Manifold\n+47 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bV_\bA_\bL_\bU_\bE_\b>));\n+48 BOOST_CONCEPT_ASSERT((IsManifold));\n+49\n+50 public:\n+51 typedef boost::shared_ptr > shared_ptr;\n+52 typedef VALUE T;\n+53\n+54#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+55 //@deprecated: any NoiseModelFactor will do, as long as they have the right\n+keys\n+56 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b> MotionFactor;\n+57 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b> MeasurementFactor;\n+58#endif\n+59\n+60 protected:\n+61 T x_; // linearization point\n+62 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br priorFactor_; // Gaussian density on x_\n+63\n+64 static T solve_(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& linearFactorGraph, const _\bV_\ba_\bl_\bu_\be_\bs&\n+linearizationPoints,\n+65 _\bK_\be_\by x, _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br* newPrior);\n+66\n+67 public:\n+70\n+71 _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br(_\bK_\be_\by key_initial, T x_initial, noiseModel::Gaussian::\n+shared_ptr P_initial);\n+72\n+76\n+_\b7_\b8 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const {\n+79 std::cout << s << \"\\n\";\n+80 x_.print(s + \"x\");\n+81 priorFactor_->print(s + \"density\");\n+82 }\n+83\n+87\n+93 T _\bp_\br_\be_\bd_\bi_\bc_\bt(const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& motionFactor);\n+94\n+99 T _\bu_\bp_\bd_\ba_\bt_\be(const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& measurementFactor);\n+100\n+_\b1_\b0_\b2 const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bD_\be_\bn_\bs_\bi_\bt_\by() const {\n+103 return priorFactor_;\n+104 }\n+105\n+107};\n+108\n+109} // namespace\n+110\n+111#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b-_\bi_\bn_\bl_\b._\bh>\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n+_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b-_\bi_\bn_\bl_\b._\bh\n+Class to perform generic Kalman Filtering using nonlinear factor graphs.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bi_\bz_\be_\bN_\bo_\bn_\bl_\be_\ba_\bf_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-Thrown when requesting to marginalize out variables from ISAM2 that are not\n-leaves.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn nonlinearExceptions.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A testable concept check that should be placed in applicable unit tests and in\n+generic algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br\n+This is a generic Extended Kalman Filter class implemented using nonlinear\n+factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+T update(const NoiseModelFactor &measurementFactor)\n+Calculate posterior density P(x_) ~ L(z|x) P(x) The likelihood L(z|x) should be\n+given as a unary fact...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter-inl.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bD_\be_\bn_\bs_\bi_\bt_\by\n+const JacobianFactor::shared_ptr Density() const\n+Return current predictive (if called after predict)/posterior (if called after\n+update)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bp_\br_\be_\bd_\bi_\bc_\bt\n+T predict(const NoiseModelFactor &motionFactor)\n+Calculate predictive density The motion model should be given as a factor with\n+key1 for and key2 fo...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter-inl.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\") const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n+density Templated on...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+ * _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01073.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01073.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizerImpl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizerParams.h File Reference\n \n \n \n \n \n \n \n@@ -95,45 +95,57 @@\n \n \n \n \n
\n \n-
DoglegOptimizerImpl.h File Reference
\n+Namespaces |\n+Typedefs
\n+
NonlinearOptimizerParams.h File Reference
\n \n
\n \n-

Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation) \n+

Parameters for nonlinear optimization. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::DoglegOptimizerImpl
 This class contains the implementation of the Dogleg algorithm. More...
 
struct  gtsam::DoglegOptimizerImpl::IterationResult
class  gtsam::NonlinearOptimizerParams
 The common parameters for Nonlinear optimizers. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Typedefs

\n+typedef NonlinearOptimizerParams gtsam::SuccessiveLinearizationParams
 
\n

Detailed Description

\n-

Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)

\n-
Author
Richard Roberts
\n+

Parameters for nonlinear optimization.

\n+
Author
Yong-Dian Jian
\n+
\n+Richard Roberts
\n+
\n+Frank Dellaert
\n+
\n+Andrew Melim
\n+
Date
Apr 1, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DoglegOptimizerImpl.h File Reference\n-Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail\n-implementation) _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+NonlinearOptimizerParams.h File Reference\n+Parameters for nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl\n-\u00a0 This class contains the implementation of the Dogleg algorithm.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+\u00a0 The common parameters for Nonlinear optimizers. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSu\buc\bcc\bce\bes\bss\bsi\biv\bve\beL\bLi\bin\bne\bea\bar\bri\biz\bza\bat\bti\bio\bon\bnP\bPa\bar\bra\bam\bms\bs\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail\n-implementation)\n+Parameters for nonlinear optimization.\n Author\n+ Yong-Dian Jian\n Richard Roberts\n+ Frank Dellaert\n+ Andrew Melim\n+ Date\n+ Apr 1, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01073.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01073.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a01073 = [\n- [\"gtsam::DoglegOptimizerImpl\", \"a04264.html\", \"a04264\"],\n- [\"gtsam::DoglegOptimizerImpl::IterationResult\", \"a04268.html\", null]\n+ [\"gtsam::NonlinearOptimizerParams\", \"a04556.html\", \"a04556\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01073_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01073_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizerImpl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizerParams.h Source File\n \n \n \n \n \n \n \n@@ -98,203 +98,196 @@\n
No Matches
\n \n \n \n \n \n
\n-
DoglegOptimizerImpl.h
\n+
NonlinearOptimizerParams.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
17#pragma once
\n-
18
\n-
19#include <iomanip>
\n-
20
\n-\n-\n+
22#pragma once
\n
23
\n-
24namespace gtsam {
\n-
25
\n-
\n-
32struct GTSAM_EXPORT DoglegOptimizerImpl {
\n-
33
\n+\n+\n+
26#include <boost/optional.hpp>
\n+
27#include <string>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n
\n-
34 struct GTSAM_EXPORT IterationResult {
\n-
35 double delta;
\n-
36 VectorValues dx_d;
\n-
37 double f_error;
\n-
38 };
\n-
\n-
39
\n-
\n-\n-
54 SEARCH_EACH_ITERATION,
\n-
55 SEARCH_REDUCE_ONLY,
\n-
56 ONE_STEP_PER_ITERATION
\n-
57 };
\n-
\n-
58
\n-
94 template<class M, class F, class VALUES>
\n-
95 static IterationResult Iterate(
\n-
96 double delta, TrustRegionAdaptationMode mode, const VectorValues& dx_u, const VectorValues& dx_n,
\n-
97 const M& Rd, const F& f, const VALUES& x0, const double f_error, const bool verbose=false);
\n-
98
\n-
121 static VectorValues ComputeDoglegPoint(double delta, const VectorValues& dx_u, const VectorValues& dx_n, const bool verbose=false);
\n-
122
\n-
132 static VectorValues ComputeBlend(double delta, const VectorValues& x_u, const VectorValues& x_n, const bool verbose=false);
\n-
133};
\n-
\n-
134
\n-
135
\n-
136/* ************************************************************************* */
\n-
137template<class M, class F, class VALUES>
\n-
\n-\n-
139 double delta, TrustRegionAdaptationMode mode, const VectorValues& dx_u, const VectorValues& dx_n,
\n-
140 const M& Rd, const F& f, const VALUES& x0, const double f_error, const bool verbose)
\n-
141{
\n-
142 gttic(M_error);
\n-
143 const double M_error = Rd.error(VectorValues::Zero(dx_u));
\n-
144 gttoc(M_error);
\n-
145
\n-
146 // Result to return
\n-
147 IterationResult result;
\n-
148
\n-
149 bool stay = true;
\n-
150 enum { NONE, INCREASED_DELTA, DECREASED_DELTA } lastAction = NONE; // Used to prevent alternating between increasing and decreasing in one iteration
\n-
151 while(stay) {
\n-
152 gttic(Dog_leg_point);
\n-
153 // Compute dog leg point
\n-
154 result.dx_d = ComputeDoglegPoint(delta, dx_u, dx_n, verbose);
\n-
155 gttoc(Dog_leg_point);
\n-
156
\n-
157 if(verbose) std::cout << "delta = " << delta << ", dx_d_norm = " << result.dx_d.norm() << std::endl;
\n-
158
\n-
159 gttic(retract);
\n-
160 // Compute expmapped solution
\n-
161 const VALUES x_d(x0.retract(result.dx_d));
\n-
162 gttoc(retract);
\n-
163
\n-
164 gttic(decrease_in_f);
\n-
165 // Compute decrease in f
\n-
166 result.f_error = f.error(x_d);
\n-
167 gttoc(decrease_in_f);
\n+
34class GTSAM_EXPORT NonlinearOptimizerParams {
\n+
35public:
\n+
\n+
37 enum Verbosity {
\n+
38 SILENT, TERMINATION, ERROR, VALUES, DELTA, LINEAR
\n+
39 };
\n+
\n+
40
\n+
41 size_t maxIterations = 100;
\n+
42 double relativeErrorTol = 1e-5;
\n+
43 double absoluteErrorTol = 1e-5;
\n+
44 double errorTol = 0.0;
\n+
45 Verbosity verbosity = SILENT;
\n+
46 Ordering::OrderingType orderingType = Ordering::COLAMD;
\n+
47
\n+
48 size_t getMaxIterations() const { return maxIterations; }
\n+
49 double getRelativeErrorTol() const { return relativeErrorTol; }
\n+
50 double getAbsoluteErrorTol() const { return absoluteErrorTol; }
\n+
51 double getErrorTol() const { return errorTol; }
\n+
52 std::string getVerbosity() const { return verbosityTranslator(verbosity); }
\n+
53
\n+
54 void setMaxIterations(int value) { maxIterations = value; }
\n+
55 void setRelativeErrorTol(double value) { relativeErrorTol = value; }
\n+
56 void setAbsoluteErrorTol(double value) { absoluteErrorTol = value; }
\n+
57 void setErrorTol(double value) { errorTol = value; }
\n+
58 void setVerbosity(const std::string& src) {
\n+
59 verbosity = verbosityTranslator(src);
\n+
60 }
\n+
61
\n+
62 static Verbosity verbosityTranslator(const std::string &s) ;
\n+
63 static std::string verbosityTranslator(Verbosity value) ;
\n+
64
\n+
67 using IterationHook = std::function<
\n+
68 void(size_t /*iteration*/, double/*errorBefore*/, double/*errorAfter*/)>;
\n+
69
\n+\n+
95
\n+
\n+\n+
98 MULTIFRONTAL_CHOLESKY,
\n+
99 MULTIFRONTAL_QR,
\n+
100 SEQUENTIAL_CHOLESKY,
\n+
101 SEQUENTIAL_QR,
\n+
102 Iterative, /* Experimental Flag */
\n+
103 CHOLMOD, /* Experimental Flag */
\n+
104 };
\n+
\n+
105
\n+
106 LinearSolverType linearSolverType = MULTIFRONTAL_CHOLESKY;
\n+
107 boost::optional<Ordering> ordering;
\n+
108 IterativeOptimizationParameters::shared_ptr iterativeParams;
\n+
109
\n+
110 NonlinearOptimizerParams() = default;
\n+
111 virtual ~NonlinearOptimizerParams() {
\n+
112 }
\n+
113
\n+
114 virtual void print(const std::string& str = "") const;
\n+
115
\n+
116 bool equals(const NonlinearOptimizerParams& other, double tol = 1e-9) const {
\n+
117 return maxIterations == other.getMaxIterations()
\n+
118 && std::abs(relativeErrorTol - other.getRelativeErrorTol()) <= tol
\n+
119 && std::abs(absoluteErrorTol - other.getAbsoluteErrorTol()) <= tol
\n+
120 && std::abs(errorTol - other.getErrorTol()) <= tol
\n+
121 && verbosityTranslator(verbosity) == other.getVerbosity();
\n+
122 // && orderingType.equals(other.getOrderingType()_;
\n+
123 // && linearSolverType == other.getLinearSolverType();
\n+
124 // TODO: check ordering, iterativeParams, and iterationsHook
\n+
125 }
\n+
126
\n+
127 inline bool isMultifrontal() const {
\n+
128 return (linearSolverType == MULTIFRONTAL_CHOLESKY)
\n+
129 || (linearSolverType == MULTIFRONTAL_QR);
\n+
130 }
\n+
131
\n+
132 inline bool isSequential() const {
\n+
133 return (linearSolverType == SEQUENTIAL_CHOLESKY)
\n+
134 || (linearSolverType == SEQUENTIAL_QR);
\n+
135 }
\n+
136
\n+
137 inline bool isCholmod() const {
\n+
138 return (linearSolverType == CHOLMOD);
\n+
139 }
\n+
140
\n+
141 inline bool isIterative() const {
\n+
142 return (linearSolverType == Iterative);
\n+
143 }
\n+
144
\n+
145 GaussianFactorGraph::Eliminate getEliminationFunction() const {
\n+
146 switch (linearSolverType) {
\n+
147 case MULTIFRONTAL_CHOLESKY:
\n+
148 case SEQUENTIAL_CHOLESKY:
\n+\n+
150
\n+
151 case MULTIFRONTAL_QR:
\n+
152 case SEQUENTIAL_QR:
\n+
153 return EliminateQR;
\n+
154
\n+
155 default:
\n+
156 throw std::runtime_error(
\n+
157 "Nonlinear optimization parameter \\"factorization\\" is invalid");
\n+
158 }
\n+
159 }
\n+
160
\n+
161 std::string getLinearSolverType() const {
\n+
162 return linearSolverTranslator(linearSolverType);
\n+
163 }
\n+
164
\n+
165 void setLinearSolverType(const std::string& solver) {
\n+
166 linearSolverType = linearSolverTranslator(solver);
\n+
167 }
\n
168
\n-
169 gttic(new_M_error);
\n-
170 // Compute decrease in M
\n-
171 const double new_M_error = Rd.error(result.dx_d);
\n-
172 gttoc(new_M_error);
\n-
173
\n-
174 if(verbose) std::cout << std::setprecision(15) << "f error: " << f_error << " -> " << result.f_error << std::endl;
\n-
175 if(verbose) std::cout << std::setprecision(15) << "M error: " << M_error << " -> " << new_M_error << std::endl;
\n-
176
\n-
177 gttic(adjust_delta);
\n-
178 // Compute gain ratio. Here we take advantage of the invariant that the
\n-
179 // Bayes' net error at zero is equal to the nonlinear error
\n-
180 const double rho = std::abs(f_error - result.f_error) < 1e-15 || std::abs(M_error - new_M_error) < 1e-15 ?
\n-
181 0.5 :
\n-
182 (f_error - result.f_error) / (M_error - new_M_error);
\n-
183
\n-
184 if(verbose) std::cout << std::setprecision(15) << "rho = " << rho << std::endl;
\n-
185
\n-
186 if(rho >= 0.75) {
\n-
187 // M agrees very well with f, so try to increase lambda
\n-
188 const double dx_d_norm = result.dx_d.norm();
\n-
189 const double newDelta = std::max(delta, 3.0 * dx_d_norm); // Compute new delta
\n-
190
\n-
191 if(mode == ONE_STEP_PER_ITERATION || mode == SEARCH_REDUCE_ONLY)
\n-
192 stay = false; // If not searching, just return with the new delta
\n-
193 else if(mode == SEARCH_EACH_ITERATION) {
\n-
194 if(std::abs(newDelta - delta) < 1e-15 || lastAction == DECREASED_DELTA)
\n-
195 stay = false; // Searching, but Newton's solution is within trust region so keep the same trust region
\n-
196 else {
\n-
197 stay = true; // Searching and increased delta, so try again to increase delta
\n-
198 lastAction = INCREASED_DELTA;
\n-
199 }
\n-
200 } else {
\n-
201 assert(false); }
\n-
202
\n-
203 delta = newDelta; // Update delta from new delta
\n-
204
\n-
205 } else if(0.75 > rho && rho >= 0.25) {
\n-
206 // M agrees so-so with f, keep the same delta
\n-
207 stay = false;
\n-
208
\n-
209 } else if(0.25 > rho && rho >= 0.0) {
\n-
210 // M does not agree well with f, decrease delta until it does
\n-
211 double newDelta;
\n-
212 bool hitMinimumDelta;
\n-
213 if(delta > 1e-5) {
\n-
214 newDelta = 0.5 * delta;
\n-
215 hitMinimumDelta = false;
\n-
216 } else {
\n-
217 newDelta = delta;
\n-
218 hitMinimumDelta = true;
\n-
219 }
\n-
220 if(mode == ONE_STEP_PER_ITERATION || /* mode == SEARCH_EACH_ITERATION && */ lastAction == INCREASED_DELTA || hitMinimumDelta)
\n-
221 stay = false; // If not searching, just return with the new smaller delta
\n-
222 else if(mode == SEARCH_EACH_ITERATION || mode == SEARCH_REDUCE_ONLY) {
\n-
223 stay = true;
\n-
224 lastAction = DECREASED_DELTA;
\n-
225 } else {
\n-
226 assert(false); }
\n-
227
\n-
228 delta = newDelta; // Update delta from new delta
\n-
229
\n-
230 } else {
\n-
231 // f actually increased, so keep decreasing delta until f does not decrease.
\n-
232 // NOTE: NaN and Inf solutions also will fall into this case, so that we
\n-
233 // decrease delta if the solution becomes undetermined.
\n-
234 assert(0.0 > rho);
\n-
235 if(delta > 1e-5) {
\n-
236 delta *= 0.5;
\n-
237 stay = true;
\n-
238 lastAction = DECREASED_DELTA;
\n-
239 } else {
\n-
240 if(verbose) std::cout << "Warning: Dog leg stopping because cannot decrease error with minimum delta" << std::endl;
\n-
241 result.dx_d.setZero(); // Set delta to zero - don't allow error to increase
\n-
242 result.f_error = f_error;
\n-
243 stay = false;
\n-
244 }
\n-
245 }
\n-
246 gttoc(adjust_delta);
\n-
247 }
\n-
248
\n-
249 // dx_d and f_error have already been filled in during the loop
\n-
250 result.delta = delta;
\n-
251 return result;
\n-
252}
\n-
\n-
253
\n-
254}
\n-
Variable ordering for the elimination algorithm.
\n-
Factor Graph Values.
\n+
169 void setIterativeParams(const boost::shared_ptr<IterativeOptimizationParameters> params);
\n+
170
\n+
171 void setOrdering(const Ordering& ordering) {
\n+
172 this->ordering = ordering;
\n+
173 this->orderingType = Ordering::CUSTOM;
\n+
174 }
\n+
175
\n+
176 std::string getOrderingType() const {
\n+
177 return orderingTypeTranslator(orderingType);
\n+
178 }
\n+
179
\n+
180 // Note that if you want to use a custom ordering, you must set the ordering directly, this will switch to custom type
\n+
181 void setOrderingType(const std::string& ordering){
\n+
182 orderingType = orderingTypeTranslator(ordering);
\n+
183 }
\n+
184
\n+
185private:
\n+
186 std::string linearSolverTranslator(LinearSolverType linearSolverType) const;
\n+
187 LinearSolverType linearSolverTranslator(const std::string& linearSolverType) const;
\n+
188 std::string orderingTypeTranslator(Ordering::OrderingType type) const;
\n+
189 Ordering::OrderingType orderingTypeTranslator(const std::string& type) const;
\n+
190};
\n+
\n+
191
\n+
192// For backward compatibility:
\n+
193typedef NonlinearOptimizerParams SuccessiveLinearizationParams;
\n+
194
\n+
195} /* namespace gtsam */
\n+
Subgraph Solver from IROS 2010.
\n+
Linear Factor Graph where all factors are Gaussians.
\n+
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with Cholesky factorization.
Definition HessianFactor.cpp:548
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
static VectorValues Zero(const VectorValues &other)
Create a VectorValues with the same structure as other, but filled with zeros.
Definition VectorValues.cpp:78
\n-
This class contains the implementation of the Dogleg algorithm.
Definition DoglegOptimizerImpl.h:32
\n-
TrustRegionAdaptationMode
Specifies how the trust region is adapted at each Dogleg iteration.
Definition DoglegOptimizerImpl.h:53
\n-
static IterationResult Iterate(double delta, TrustRegionAdaptationMode mode, const VectorValues &dx_u, const VectorValues &dx_n, const M &Rd, const F &f, const VALUES &x0, const double f_error, const bool verbose=false)
Compute the update point for one iteration of the Dogleg algorithm, given an initial trust region rad...
Definition DoglegOptimizerImpl.h:138
\n-
static VectorValues ComputeDoglegPoint(double delta, const VectorValues &dx_u, const VectorValues &dx_n, const bool verbose=false)
Compute the dogleg point given a trust region radius .
Definition DoglegOptimizerImpl.cpp:25
\n-
Definition DoglegOptimizerImpl.h:34
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that h...
Definition JacobianFactor.cpp:789
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
OrderingType
Type of ordering to use.
Definition Ordering.h:41
\n+
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n+
IterationHook iterationHook
Optional user-provided iteration hook to be called after each optimization iteration (Default: none).
Definition NonlinearOptimizerParams.h:94
\n+
IterativeOptimizationParameters::shared_ptr iterativeParams
The container for iterativeOptimization parameters. used in CG Solvers.
Definition NonlinearOptimizerParams.h:108
\n+
Verbosity
See NonlinearOptimizerParams::verbosity.
Definition NonlinearOptimizerParams.h:37
\n+
LinearSolverType
See NonlinearOptimizerParams::linearSolverType.
Definition NonlinearOptimizerParams.h:97
\n+
std::function< void(size_t, double, double)> IterationHook
Type for an optional user-provided hook to be called after each internal optimizer iteration.
Definition NonlinearOptimizerParams.h:68
\n+
boost::optional< Ordering > ordering
The optional variable elimination ordering, or empty to use COLAMD (default: empty)
Definition NonlinearOptimizerParams.h:107
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,232 +1,233 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DoglegOptimizerImpl.h\n+NonlinearOptimizerParams.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-17#pragma once\n-18\n-19#include \n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+22#pragma once\n 23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-_\b3_\b2struct GTSAM_EXPORT _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl {\n-33\n-_\b3_\b4 struct GTSAM_EXPORT _\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt {\n-35 double delta;\n-36 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs dx_d;\n-37 double f_error;\n-38 };\n-39\n-_\b5_\b3 enum _\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be {\n-54 SEARCH_EACH_ITERATION,\n-55 SEARCH_REDUCE_ONLY,\n-56 ONE_STEP_PER_ITERATION\n-57 };\n-58\n-94 template\n-95 static IterationResult Iterate(\n-96 double delta, TrustRegionAdaptationMode mode, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& dx_u,\n-const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& dx_n,\n-97 const M& Rd, const F& f, const VALUES& x0, const double f_error, const bool\n-verbose=false);\n-98\n-121 static _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs ComputeDoglegPoint(double delta, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs&\n-dx_u, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& dx_n, const bool verbose=false);\n-122\n-132 static _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs ComputeBlend(double delta, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x_u,\n-const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x_n, const bool verbose=false);\n-133};\n-134\n-135\n-136/* *************************************************************************\n-*/\n-137template\n-_\b1_\b3_\b8typename _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\be(\n-139 double delta, _\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be mode, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& dx_u,\n-const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& dx_n,\n-140 const M& Rd, const F& f, const VALUES& x0, const double f_error, const bool\n-verbose)\n-141{\n-142 gttic(M_error);\n-143 const double M_error = Rd.error(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bZ_\be_\br_\bo(dx_u));\n-144 gttoc(M_error);\n-145\n-146 // Result to return\n-147 _\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt result;\n-148\n-149 bool stay = true;\n-150 enum { NONE, INCREASED_DELTA, DECREASED_DELTA } lastAction = NONE; // Used\n-to prevent alternating between increasing and decreasing in one iteration\n-151 while(stay) {\n-152 gttic(Dog_leg_point);\n-153 // Compute dog leg point\n-154 result.dx_d = _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bg_\bl_\be_\bg_\bP_\bo_\bi_\bn_\bt(delta, dx_u, dx_n, verbose);\n-155 gttoc(Dog_leg_point);\n-156\n-157 if(verbose) std::cout << \"delta = \" << delta << \", dx_d_norm = \" <<\n-result.dx_d.norm() << std::endl;\n-158\n-159 gttic(retract);\n-160 // Compute expmapped solution\n-161 const VALUES x_d(x0.retract(result.dx_d));\n-162 gttoc(retract);\n-163\n-164 gttic(decrease_in_f);\n-165 // Compute decrease in f\n-166 result.f_error = f.error(x_d);\n-167 gttoc(decrease_in_f);\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n+26#include \n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+_\b3_\b4class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs {\n+35public:\n+_\b3_\b7 enum _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by {\n+38 SILENT, TERMINATION, ERROR, VALUES, DELTA, LINEAR\n+39 };\n+40\n+_\b4_\b1 size_t maxIterations = 100;\n+_\b4_\b2 double relativeErrorTol = 1e-5;\n+_\b4_\b3 double absoluteErrorTol = 1e-5;\n+_\b4_\b4 double errorTol = 0.0;\n+_\b4_\b5 _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by verbosity = SILENT;\n+_\b4_\b6 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType = Ordering::COLAMD;\n+47\n+48 size_t getMaxIterations() const { return maxIterations; }\n+49 double getRelativeErrorTol() const { return relativeErrorTol; }\n+50 double getAbsoluteErrorTol() const { return absoluteErrorTol; }\n+51 double getErrorTol() const { return errorTol; }\n+52 std::string getVerbosity() const { return verbosityTranslator(verbosity); }\n+53\n+54 void setMaxIterations(int value) { maxIterations = value; }\n+55 void setRelativeErrorTol(double value) { relativeErrorTol = value; }\n+56 void setAbsoluteErrorTol(double value) { absoluteErrorTol = value; }\n+57 void setErrorTol(double value) { errorTol = value; }\n+58 void setVerbosity(const std::string& src) {\n+59 verbosity = verbosityTranslator(src);\n+60 }\n+61\n+62 static Verbosity verbosityTranslator(const std::string &s) ;\n+63 static std::string verbosityTranslator(Verbosity value) ;\n+64\n+_\b6_\b7 using _\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk = std::function<\n+68 void(size_t /*iteration*/, double/*errorBefore*/, double/*errorAfter*/)>;\n+69\n+_\b9_\b4 _\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk _\bi_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk;\n+95\n+_\b9_\b7 enum _\bL_\bi_\bn_\be_\ba_\br_\bS_\bo_\bl_\bv_\be_\br_\bT_\by_\bp_\be {\n+98 MULTIFRONTAL_CHOLESKY,\n+99 MULTIFRONTAL_QR,\n+100 SEQUENTIAL_CHOLESKY,\n+101 SEQUENTIAL_QR,\n+102 Iterative, /* Experimental Flag */\n+103 CHOLMOD, /* Experimental Flag */\n+104 };\n+105\n+_\b1_\b0_\b6 _\bL_\bi_\bn_\be_\ba_\br_\bS_\bo_\bl_\bv_\be_\br_\bT_\by_\bp_\be linearSolverType = MULTIFRONTAL_CHOLESKY;\n+_\b1_\b0_\b7 boost::optional _\bo_\br_\bd_\be_\br_\bi_\bn_\bg;\n+_\b1_\b0_\b8 IterativeOptimizationParameters::shared_ptr _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bP_\ba_\br_\ba_\bm_\bs;\n+109\n+110 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs() = default;\n+111 virtual _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs() {\n+112 }\n+113\n+114 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const;\n+115\n+116 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& other, double tol = 1e-9) const\n+{\n+117 return maxIterations == other.getMaxIterations()\n+118 && std::abs(relativeErrorTol - other.getRelativeErrorTol()) <= tol\n+119 && std::abs(absoluteErrorTol - other.getAbsoluteErrorTol()) <= tol\n+120 && std::abs(errorTol - other.getErrorTol()) <= tol\n+121 && verbosityTranslator(verbosity) == other.getVerbosity();\n+122 // && orderingType.equals(other.getOrderingType()_;\n+123 // && linearSolverType == other.getLinearSolverType();\n+124 // TODO: check ordering, iterativeParams, and iterationsHook\n+125 }\n+126\n+127 inline bool isMultifrontal() const {\n+128 return (linearSolverType == MULTIFRONTAL_CHOLESKY)\n+129 || (linearSolverType == MULTIFRONTAL_QR);\n+130 }\n+131\n+132 inline bool isSequential() const {\n+133 return (linearSolverType == SEQUENTIAL_CHOLESKY)\n+134 || (linearSolverType == SEQUENTIAL_QR);\n+135 }\n+136\n+137 inline bool isCholmod() const {\n+138 return (linearSolverType == CHOLMOD);\n+139 }\n+140\n+141 inline bool isIterative() const {\n+142 return (linearSolverType == Iterative);\n+143 }\n+144\n+145 GaussianFactorGraph::Eliminate getEliminationFunction() const {\n+146 switch (linearSolverType) {\n+147 case MULTIFRONTAL_CHOLESKY:\n+148 case SEQUENTIAL_CHOLESKY:\n+149 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by;\n+150\n+151 case MULTIFRONTAL_QR:\n+152 case SEQUENTIAL_QR:\n+153 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR;\n+154\n+155 default:\n+156 throw std::runtime_error(\n+157 \"Nonlinear optimization parameter \\\"factorization\\\" is invalid\");\n+158 }\n+159 }\n+160\n+161 std::string getLinearSolverType() const {\n+162 return linearSolverTranslator(linearSolverType);\n+163 }\n+164\n+165 void setLinearSolverType(const std::string& solver) {\n+166 linearSolverType = linearSolverTranslator(solver);\n+167 }\n 168\n-169 gttic(new_M_error);\n-170 // Compute decrease in M\n-171 const double new_M_error = Rd.error(result.dx_d);\n-172 gttoc(new_M_error);\n-173\n-174 if(verbose) std::cout << std::setprecision(15) << \"f error: \" << f_error <<\n-\" -> \" << result.f_error << std::endl;\n-175 if(verbose) std::cout << std::setprecision(15) << \"M error: \" << M_error <<\n-\" -> \" << new_M_error << std::endl;\n-176\n-177 gttic(adjust_delta);\n-178 // Compute gain ratio. Here we take advantage of the invariant that the\n-179 // Bayes' net error at zero is equal to the nonlinear error\n-180 const double rho = std::abs(f_error - result.f_error) < 1e-15 || std::abs\n-(M_error - new_M_error) < 1e-15 ?\n-181 0.5 :\n-182 (f_error - result.f_error) / (M_error - new_M_error);\n-183\n-184 if(verbose) std::cout << std::setprecision(15) << \"rho = \" << rho << std::\n-endl;\n-185\n-186 if(rho >= 0.75) {\n-187 // M agrees very well with f, so try to increase lambda\n-188 const double dx_d_norm = result.dx_d.norm();\n-189 const double newDelta = std::max(delta, 3.0 * dx_d_norm); // Compute new\n-delta\n-190\n-191 if(mode == ONE_STEP_PER_ITERATION || mode == SEARCH_REDUCE_ONLY)\n-192 stay = false; // If not searching, just return with the new delta\n-193 else if(mode == SEARCH_EACH_ITERATION) {\n-194 if(std::abs(newDelta - delta) < 1e-15 || lastAction == DECREASED_DELTA)\n-195 stay = false; // Searching, but Newton's solution is within trust region so\n-keep the same trust region\n-196 else {\n-197 stay = true; // Searching and increased delta, so try again to increase\n-delta\n-198 lastAction = INCREASED_DELTA;\n-199 }\n-200 } else {\n-201 assert(false); }\n-202\n-203 delta = newDelta; // Update delta from new delta\n-204\n-205 } else if(0.75 > rho && rho >= 0.25) {\n-206 // M agrees so-so with f, keep the same delta\n-207 stay = false;\n-208\n-209 } else if(0.25 > rho && rho >= 0.0) {\n-210 // M does not agree well with f, decrease delta until it does\n-211 double newDelta;\n-212 bool hitMinimumDelta;\n-213 if(delta > 1e-5) {\n-214 newDelta = 0.5 * delta;\n-215 hitMinimumDelta = false;\n-216 } else {\n-217 newDelta = delta;\n-218 hitMinimumDelta = true;\n-219 }\n-220 if(mode == ONE_STEP_PER_ITERATION || /* mode == SEARCH_EACH_ITERATION && */\n-lastAction == INCREASED_DELTA || hitMinimumDelta)\n-221 stay = false; // If not searching, just return with the new smaller delta\n-222 else if(mode == SEARCH_EACH_ITERATION || mode == SEARCH_REDUCE_ONLY) {\n-223 stay = true;\n-224 lastAction = DECREASED_DELTA;\n-225 } else {\n-226 assert(false); }\n-227\n-228 delta = newDelta; // Update delta from new delta\n-229\n-230 } else {\n-231 // f actually increased, so keep decreasing delta until f does not\n-decrease.\n-232 // NOTE: NaN and Inf solutions also will fall into this case, so that we\n-233 // decrease delta if the solution becomes undetermined.\n-234 assert(0.0 > rho);\n-235 if(delta > 1e-5) {\n-236 delta *= 0.5;\n-237 stay = true;\n-238 lastAction = DECREASED_DELTA;\n-239 } else {\n-240 if(verbose) std::cout << \"Warning: Dog leg stopping because cannot decrease\n-error with minimum delta\" << std::endl;\n-241 result.dx_d.setZero(); // Set delta to zero - don't allow error to increase\n-242 result.f_error = f_error;\n-243 stay = false;\n-244 }\n-245 }\n-246 gttoc(adjust_delta);\n-247 }\n-248\n-249 // dx_d and f_error have already been filled in during the loop\n-250 result.delta = delta;\n-251 return result;\n-252}\n-253\n-254}\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n+169 void setIterativeParams(const boost::\n+shared_ptr params);\n+170\n+171 void setOrdering(const Ordering& ordering) {\n+172 this->ordering = ordering;\n+173 this->orderingType = Ordering::CUSTOM;\n+174 }\n+175\n+176 std::string getOrderingType() const {\n+177 return orderingTypeTranslator(orderingType);\n+178 }\n+179\n+180 // Note that if you want to use a custom ordering, you must set the\n+ordering directly, this will switch to custom type\n+181 void setOrderingType(const std::string& ordering){\n+182 orderingType = orderingTypeTranslator(ordering);\n+183 }\n+184\n+185private:\n+186 std::string linearSolverTranslator(LinearSolverType linearSolverType)\n+const;\n+187 LinearSolverType linearSolverTranslator(const std::string&\n+linearSolverType) const;\n+188 std::string orderingTypeTranslator(Ordering::OrderingType type) const;\n+189 Ordering::OrderingType orderingTypeTranslator(const std::string& type)\n+const;\n+190};\n+191\n+192// For backward compatibility:\n+193typedef NonlinearOptimizerParams SuccessiveLinearizationParams;\n+194\n+195} /* namespace gtsam */\n+_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+Subgraph Solver from IROS 2010.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by\n+std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr<\n+GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors,\n+const Ordering &keys)\n+Densely partially eliminate with Cholesky factorization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:548\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bZ_\be_\br_\bo\n-static VectorValues Zero(const VectorValues &other)\n-Create a VectorValues with the same structure as other, but filled with zeros.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.cpp:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl\n-This class contains the implementation of the Dogleg algorithm.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n-TrustRegionAdaptationMode\n-Specifies how the trust region is adapted at each Dogleg iteration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\be\n-static IterationResult Iterate(double delta, TrustRegionAdaptationMode mode,\n-const VectorValues &dx_u, const VectorValues &dx_n, const M &Rd, const F &f,\n-const VALUES &x0, const double f_error, const bool verbose=false)\n-Compute the update point for one iteration of the Dogleg algorithm, given an\n-initial trust region rad...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bg_\bl_\be_\bg_\bP_\bo_\bi_\bn_\bt\n-static VectorValues ComputeDoglegPoint(double delta, const VectorValues &dx_u,\n-const VectorValues &dx_n, const bool verbose=false)\n-Compute the dogleg point given a trust region radius .\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.cpp:25\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR\n+std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr >\n+EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)\n+Multiply all factors and eliminate the given keys from the resulting factor\n+using a QR variant that h...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:789\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be\n+OrderingType\n+Type of ordering to use.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+The common parameters for Nonlinear optimizers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk\n+IterationHook iterationHook\n+Optional user-provided iteration hook to be called after each optimization\n+iteration (Default: none).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bP_\ba_\br_\ba_\bm_\bs\n+IterativeOptimizationParameters::shared_ptr iterativeParams\n+The container for iterativeOptimization parameters. used in CG Solvers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n+Verbosity\n+See NonlinearOptimizerParams::verbosity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bS_\bo_\bl_\bv_\be_\br_\bT_\by_\bp_\be\n+LinearSolverType\n+See NonlinearOptimizerParams::linearSolverType.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk\n+std::function< void(size_t, double, double)> IterationHook\n+Type for an optional user-provided hook to be called after each internal\n+optimizer iteration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bo_\br_\bd_\be_\br_\bi_\bn_\bg\n+boost::optional< Ordering > ordering\n+The optional variable elimination ordering, or empty to use COLAMD (default:\n+empty)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:107\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01076.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01076.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizerParams.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/CustomFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,58 +94,35 @@\n \n \n \n \n \n
\n \n-
NonlinearOptimizerParams.h File Reference
\n+Namespaces
\n+
CustomFactor.cpp File Reference
\n \n
\n \n-

Parameters for nonlinear optimization. \n+

Class to enable arbitrary factors with runtime swappable error function. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::NonlinearOptimizerParams
 The common parameters for Nonlinear optimizers. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Typedefs

\n-typedef NonlinearOptimizerParams gtsam::SuccessiveLinearizationParams
 
\n

Detailed Description

\n-

Parameters for nonlinear optimization.

\n-
Author
Yong-Dian Jian
\n-
\n-Richard Roberts
\n-
\n-Frank Dellaert
\n-
\n-Andrew Melim
\n-
Date
Apr 1, 2012
\n+

Class to enable arbitrary factors with runtime swappable error function.

\n+
Author
Fan Jiang
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-NonlinearOptimizerParams.h File Reference\n-Parameters for nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n-\u00a0 The common parameters for Nonlinear optimizers. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+CustomFactor.cpp File Reference\n+Class to enable arbitrary factors with runtime swappable error function.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSu\buc\bcc\bce\bes\bss\bsi\biv\bve\beL\bLi\bin\bne\bea\bar\bri\biz\bza\bat\bti\bio\bon\bnP\bPa\bar\bra\bam\bms\bs\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Parameters for nonlinear optimization.\n+Class to enable arbitrary factors with runtime swappable error function.\n Author\n- Yong-Dian Jian\n- Richard Roberts\n- Frank Dellaert\n- Andrew Melim\n- Date\n- Apr 1, 2012\n+ Fan Jiang\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01079.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01079.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,31 +95,36 @@\n \n \n \n \n
\n \n-
Marginals.cpp File Reference
\n+
NonlinearFactor.cpp File Reference
\n
\n
\n+\n+

Nonlinear Factor base classes. \n+More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
May 14, 2012
\n+

Nonlinear Factor base classes.

\n+
Author
Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Marginals.cpp File Reference\n+NonlinearFactor.cpp File Reference\n+Nonlinear Factor base classes. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Nonlinear Factor base classes.\n Author\n+ Frank Dellaert\n Richard Roberts\n- Date\n- May 14, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b._\bc_\bp_\bp\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01082.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01082.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizer.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LinearContainerFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,39 +94,32 @@\n \n \n \n \n \n
\n \n-
DoglegOptimizer.cpp File Reference
\n+Namespaces
\n+
LinearContainerFactor.cpp File Reference
\n \n
\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Typedefs

\n-typedef internal::DoglegState gtsam::State
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
Feb 26, 2012
\n+
Date
Jul 6, 2012
\n+
Author
Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-DoglegOptimizer.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+LinearContainerFactor.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef internal::DoglegState\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSt\bta\bat\bte\be\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Author\n- Richard Roberts\n Date\n- Feb 26, 2012\n+ Jul 6, 2012\n+ Author\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\n+ * _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01085.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01085.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizer.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactorGraph.h File Reference\n \n \n \n \n \n \n \n@@ -96,42 +96,48 @@\n \n \n \n
\n \n-
DoglegOptimizer.h File Reference
\n+
NonlinearFactorGraph.h File Reference
\n
\n
\n \n+

Factor Graph consisting of non-linear factors. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n+\n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::DoglegParams
 Parameters for Levenberg-Marquardt optimization. More...
class  gtsam::NonlinearFactorGraph
 
class  gtsam::DoglegOptimizer
 This class performs Dogleg nonlinear optimization. More...
struct  gtsam::traits< NonlinearFactorGraph >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
Feb 26, 2012
\n+

Factor Graph consisting of non-linear factors.

\n+
Author
Frank Dellaert
\n+
\n+Carlos Nieto
\n+
\n+Christian Potthast
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-DoglegOptimizer.h File Reference\n+NonlinearFactorGraph.h File Reference\n+Factor Graph consisting of non-linear factors. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs\n-\u00a0 Parameters for Levenberg-Marquardt optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n \u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-\u00a0 This class performs Dogleg nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Factor Graph consisting of non-linear factors.\n Author\n- Richard Roberts\n- Date\n- Feb 26, 2012\n+ Frank Dellaert\n+ Carlos Nieto\n+ Christian Potthast\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01085.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01085.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a01085 = [\n- [\"gtsam::DoglegParams\", \"a04256.html\", \"a04256\"],\n- [\"gtsam::DoglegOptimizer\", \"a04260.html\", \"a04260\"]\n+ [\"gtsam::NonlinearFactorGraph\", \"a04540.html\", \"a04540\"],\n+ [\"gtsam::traits< NonlinearFactorGraph >\", \"a04544.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01085_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01085_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizer.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -98,127 +98,245 @@\n
No Matches
\n \n \n \n \n \n
\n-
DoglegOptimizer.h
\n+
NonlinearFactorGraph.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-
22
\n-
23namespace gtsam {
\n-
24
\n-
25class DoglegOptimizer;
\n-
26
\n-
\n-
32class GTSAM_EXPORT DoglegParams : public NonlinearOptimizerParams {
\n-
33public:
\n-
\n-\n-
36 SILENT,
\n-
37 VERBOSE
\n-
38 };
\n-
\n-
39
\n-
40 double deltaInitial;
\n-\n-
42
\n-
43 DoglegParams() :
\n-
44 deltaInitial(1.0), verbosityDL(SILENT) {}
\n-
45
\n-
46 ~DoglegParams() override {}
\n-
47
\n-
48 void print(const std::string& str = "") const override {
\n-
49 NonlinearOptimizerParams::print(str);
\n-
50 std::cout << " deltaInitial: " << deltaInitial << "\\n";
\n-
51 std::cout.flush();
\n-
52 }
\n-
53
\n-
54 double getDeltaInitial() const { return deltaInitial; }
\n-
55 std::string getVerbosityDL() const { return verbosityDLTranslator(verbosityDL); }
\n+
20// \\callgraph
\n+
21
\n+
22#pragma once
\n+
23
\n+\n+\n+\n+\n+\n+
29
\n+
30#include <boost/shared_ptr.hpp>
\n+
31#include <functional>
\n+
32
\n+
33namespace gtsam {
\n+
34
\n+
35 // Forward declarations
\n+
36 class Values;
\n+
37 class Ordering;
\n+
38 class GaussianFactorGraph;
\n+
39 class SymbolicFactorGraph;
\n+
40 template<typename T>
\n+
41 class Expression;
\n+
42 template<typename T>
\n+
43 class ExpressionFactor;
\n+
44
\n+
\n+
55 class GTSAM_EXPORT NonlinearFactorGraph: public FactorGraph<NonlinearFactor> {
\n
56
\n-
57 void setDeltaInitial(double deltaInitial) { this->deltaInitial = deltaInitial; }
\n-
58 void setVerbosityDL(const std::string& verbosityDL) { this->verbosityDL = verbosityDLTranslator(verbosityDL); }
\n-
59
\n-
60private:
\n-
61 VerbosityDL verbosityDLTranslator(const std::string& verbosityDL) const;
\n-
62 std::string verbosityDLTranslator(VerbosityDL verbosityDL) const;
\n-
63};
\n-
\n-
64
\n-
\n-
68class GTSAM_EXPORT DoglegOptimizer : public NonlinearOptimizer {
\n-
69
\n-
70protected:
\n-
71 DoglegParams params_;
\n+
57 public:
\n+
58
\n+\n+\n+
61 typedef boost::shared_ptr<This> shared_ptr;
\n+
62
\n+
65
\n+\n+
68
\n+
70 template<typename ITERATOR>
\n+
71 NonlinearFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor) : Base(firstFactor, lastFactor) {}
\n
72
\n-
73public:
\n-
74 typedef boost::shared_ptr<DoglegOptimizer> shared_ptr;
\n-
75
\n-
78
\n-
87 DoglegOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n-
88 const DoglegParams& params = DoglegParams());
\n-
89
\n-
97 DoglegOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n-
98 const Ordering& ordering);
\n-
99
\n+
74 template<class CONTAINER>
\n+
75 explicit NonlinearFactorGraph(const CONTAINER& factors) : Base(factors) {}
\n+
76
\n+
78 template<class DERIVEDFACTOR>
\n+\n+
80
\n+\n+
83
\n+
87
\n+
89 void print(
\n+
90 const std::string& str = "NonlinearFactorGraph: ",
\n+
91 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n+
92
\n+
94 void printErrors(const Values& values, const std::string& str = "NonlinearFactorGraph: ",
\n+
95 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
96 const std::function<bool(const Factor* /*factor*/, double /*whitenedError*/, size_t /*index*/)>&
\n+
97 printCondition = [](const Factor *,double, size_t) {return true;}) const;
\n+
98
\n+
100 bool equals(const NonlinearFactorGraph& other, double tol = 1e-9) const;
\n
101
\n-
104
\n-
106 ~DoglegOptimizer() override {}
\n-
107
\n-
112 GaussianFactorGraph::shared_ptr iterate() override;
\n-
113
\n-
115 const DoglegParams& params() const { return params_; }
\n+
105
\n+
107 double error(const Values& values) const;
\n+
108
\n+
110 double probPrime(const Values& values) const;
\n+
111
\n+
115 boost::shared_ptr<SymbolicFactorGraph> symbolic() const;
\n
116
\n-
118 double getDelta() const;
\n-
119
\n+
120 Ordering orderingCOLAMD() const;
\n
121
\n-
122protected:
\n-
124 const NonlinearOptimizerParams& _params() const override { return params_; }
\n-
125
\n-
127 DoglegParams ensureHasOrdering(DoglegParams params, const NonlinearFactorGraph& graph) const;
\n-
128};
\n-
\n-
129
\n-
130}
\n-
Base class and parameters for nonlinear optimization algorithms.
\n+
130 Ordering orderingCOLAMDConstrained(const FastMap<Key, int>& constraints) const;
\n+
131
\n+
133 boost::shared_ptr<GaussianFactorGraph> linearize(const Values& linearizationPoint) const;
\n+
134
\n+
136 typedef std::function<void(const boost::shared_ptr<HessianFactor>& hessianFactor)> Dampen;
\n+
137
\n+
145 boost::shared_ptr<HessianFactor> linearizeToHessianFactor(
\n+
146 const Values& values, const Dampen& dampen = nullptr) const;
\n+
147
\n+
156 boost::shared_ptr<HessianFactor> linearizeToHessianFactor(
\n+
157 const Values& values, const Ordering& ordering, const Dampen& dampen = nullptr) const;
\n+
158
\n+
161 Values updateCholesky(const Values& values,
\n+
162 const Dampen& dampen = nullptr) const;
\n+
163
\n+
166 Values updateCholesky(const Values& values, const Ordering& ordering,
\n+
167 const Dampen& dampen = nullptr) const;
\n+
168
\n+
170 NonlinearFactorGraph clone() const;
\n+
171
\n+
181 NonlinearFactorGraph rekey(const std::map<Key,Key>& rekey_mapping) const;
\n+
182
\n+
189 template<typename T>
\n+
\n+
190 void addExpressionFactor(const SharedNoiseModel& R, const T& z,
\n+
191 const Expression<T>& h) {
\n+
192 push_back(boost::make_shared<ExpressionFactor<T> >(R, z, h));
\n+
193 }
\n+
\n+
194
\n+
201 template<typename T>
\n+
\n+
202 void addPrior(Key key, const T& prior,
\n+
203 const SharedNoiseModel& model = nullptr) {
\n+
204 emplace_shared<PriorFactor<T>>(key, prior, model);
\n+
205 }
\n+
\n+
206
\n+
217 template<typename T>
\n+
\n+
218 void addPrior(Key key, const T& prior, const Matrix& covariance) {
\n+
219 emplace_shared<PriorFactor<T>>(key, prior, covariance);
\n+
220 }
\n+
\n+
221
\n+
225
\n+
226 using FactorGraph::dot;
\n+
227 using FactorGraph::saveGraph;
\n+
228
\n+
230 void dot(std::ostream& os, const Values& values,
\n+
231 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
232 const GraphvizFormatting& writer = GraphvizFormatting()) const;
\n+
233
\n+
235 std::string dot(
\n+
236 const Values& values,
\n+
237 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
238 const GraphvizFormatting& writer = GraphvizFormatting()) const;
\n+
239
\n+
241 void saveGraph(
\n+
242 const std::string& filename, const Values& values,
\n+
243 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
244 const GraphvizFormatting& writer = GraphvizFormatting()) const;
\n+
246
\n+
247 private:
\n+
248
\n+
253 boost::shared_ptr<HessianFactor> linearizeToHessianFactor(
\n+
254 const Values& values, const Scatter& scatter, const Dampen& dampen = nullptr) const;
\n+
255
\n+
257 friend class boost::serialization::access;
\n+
258 template<class ARCHIVE>
\n+
259 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
260 ar & boost::serialization::make_nvp("NonlinearFactorGraph",
\n+
261 boost::serialization::base_object<Base>(*this));
\n+
262 }
\n+
263
\n+
264 public:
\n+
265
\n+
266#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
269
\n+
270 boost::shared_ptr<HessianFactor> GTSAM_DEPRECATED linearizeToHessianFactor(
\n+
271 const Values& values, boost::none_t, const Dampen& dampen = nullptr) const
\n+
272 {return linearizeToHessianFactor(values, dampen);}
\n+
273
\n+
275 Values GTSAM_DEPRECATED updateCholesky(const Values& values, boost::none_t,
\n+
276 const Dampen& dampen = nullptr) const
\n+
277 {return updateCholesky(values, dampen);}
\n+
278
\n+
280 void GTSAM_DEPRECATED saveGraph(
\n+
281 std::ostream& os, const Values& values = Values(),
\n+
282 const GraphvizFormatting& graphvizFormatting = GraphvizFormatting(),
\n+
283 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {
\n+
284 dot(os, values, keyFormatter, graphvizFormatting);
\n+
285 }
\n+
287 void GTSAM_DEPRECATED
\n+
288 saveGraph(const std::string& filename, const Values& values,
\n+
289 const GraphvizFormatting& graphvizFormatting,
\n+
290 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {
\n+
291 saveGraph(filename, values, keyFormatter, graphvizFormatting);
\n+
292 }
\n+
294#endif
\n+
295
\n+
296 };
\n+
\n+
297
\n+
299template<>
\n+
\n+
300struct traits<NonlinearFactorGraph> : public Testable<NonlinearFactorGraph> {
\n+
301};
\n+
\n+
302
\n+
303} //\\ namespace gtsam
\n+
304
\n+
2D Point
\n+
Factor Graph Base Class.
\n+
Non-linear factor base classes.
\n+
Graphviz formatter for NonlinearFactorGraph.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
Definition Factor.h:68
\n
Definition Ordering.h:34
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n-
Parameters for Levenberg-Marquardt optimization.
Definition DoglegOptimizer.h:32
\n-
VerbosityDL
See DoglegParams::dlVerbosity.
Definition DoglegOptimizer.h:35
\n-
VerbosityDL verbosityDL
The verbosity level for Dogleg (default: SILENT), see also NonlinearOptimizerParams::verbosity.
Definition DoglegOptimizer.h:41
\n-
double deltaInitial
The initial trust region radius (default: 10.0)
Definition DoglegOptimizer.h:40
\n-
This class performs Dogleg nonlinear optimization.
Definition DoglegOptimizer.h:68
\n-
~DoglegOptimizer() override
Virtual destructor.
Definition DoglegOptimizer.h:106
\n-
const NonlinearOptimizerParams & _params() const override
Access the parameters (base class version)
Definition DoglegOptimizer.h:124
\n-
const DoglegParams & params() const
Read-only access the parameters.
Definition DoglegOptimizer.h:115
\n+
Scatter is an intermediate data structure used when building a HessianFactor incrementally,...
Definition Scatter.h:49
\n+
Factor that supports arbitrary expressions via AD.
Definition ExpressionFactor.h:44
\n+
Expression class that supports automatic differentiation.
Definition Expression.h:48
\n+
Formatting options and functions for saving a NonlinearFactorGraph instance in GraphViz format.
Definition GraphvizFormatting.h:32
\n
Definition NonlinearFactorGraph.h:55
\n-
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition NonlinearOptimizer.h:75
\n-
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n+
NonlinearFactorGraph()
Default constructor.
Definition NonlinearFactorGraph.h:67
\n+
void addPrior(Key key, const T &prior, const SharedNoiseModel &model=nullptr)
Convenience method which adds a PriorFactor to the factor graph.
Definition NonlinearFactorGraph.h:202
\n+
NonlinearFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects)
Definition NonlinearFactorGraph.h:75
\n+
void addExpressionFactor(const SharedNoiseModel &R, const T &z, const Expression< T > &h)
Directly add ExpressionFactor that implements |h(x)-z|^2_R.
Definition NonlinearFactorGraph.h:190
\n+
void addPrior(Key key, const T &prior, const Matrix &covariance)
Convenience method which adds a PriorFactor to the factor graph.
Definition NonlinearFactorGraph.h:218
\n+
NonlinearFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Construct from iterator over factors.
Definition NonlinearFactorGraph.h:71
\n+
std::function< void(const boost::shared_ptr< HessianFactor > &hessianFactor)> Dampen
typdef for dampen functions used below
Definition NonlinearFactorGraph.h:136
\n+
NonlinearFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition NonlinearFactorGraph.h:79
\n+
virtual ~NonlinearFactorGraph()
Destructor.
Definition NonlinearFactorGraph.h:82
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,158 +1,314 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DoglegOptimizer.h\n+NonlinearFactorGraph.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-25class DoglegOptimizer;\n-26\n-_\b3_\b2class GTSAM_EXPORT _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs {\n-33public:\n-_\b3_\b5 enum _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bD_\bL {\n-36 SILENT,\n-37 VERBOSE\n-38 };\n-39\n-_\b4_\b0 double _\bd_\be_\bl_\bt_\ba_\bI_\bn_\bi_\bt_\bi_\ba_\bl;\n-_\b4_\b1 _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bD_\bL _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bD_\bL;\n-42\n-43 _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs() :\n-44 deltaInitial(1.0), verbosityDL(SILENT) {}\n-45\n-46 _\b~_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs() override {}\n-47\n-48 void print(const std::string& str = \"\") const override {\n-49 NonlinearOptimizerParams::print(str);\n-50 std::cout << \" deltaInitial: \" << deltaInitial << \"\\n\";\n-51 std::cout.flush();\n-52 }\n-53\n-54 double getDeltaInitial() const { return deltaInitial; }\n-55 std::string getVerbosityDL() const { return verbosityDLTranslator\n-(verbosityDL); }\n+20// \\callgraph\n+21\n+22#pragma once\n+23\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bP_\br_\bi_\bo_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+29\n+30#include \n+31#include \n+32\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n+34\n+35 // Forward declarations\n+36 class _\bV_\ba_\bl_\bu_\be_\bs;\n+37 class Ordering;\n+38 class GaussianFactorGraph;\n+39 class SymbolicFactorGraph;\n+40 template\n+41 class Expression;\n+42 template\n+43 class ExpressionFactor;\n+44\n+_\b5_\b5 class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh: public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+{\n 56\n-57 void setDeltaInitial(double deltaInitial) { this->deltaInitial =\n-deltaInitial; }\n-58 void setVerbosityDL(const std::string& verbosityDL) { this->verbosityDL =\n-verbosityDLTranslator(verbosityDL); }\n-59\n-60private:\n-61 VerbosityDL verbosityDLTranslator(const std::string& verbosityDL) const;\n-62 std::string verbosityDLTranslator(VerbosityDL verbosityDL) const;\n-63};\n-64\n-_\b6_\b8class GTSAM_EXPORT _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n-69\n-70protected:\n-71 _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs params_;\n+57 public:\n+58\n+59 typedef _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b> _\bB_\ba_\bs_\be;\n+60 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bT_\bh_\bi_\bs;\n+61 typedef boost::shared_ptr shared_ptr;\n+62\n+65\n+_\b6_\b7 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n+68\n+70 template\n+_\b7_\b1 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(ITERATOR firstFactor, ITERATOR lastFactor) : _\bB_\ba_\bs_\be\n+(firstFactor, lastFactor) {}\n 72\n-73public:\n-74 typedef boost::shared_ptr shared_ptr;\n-75\n-78\n-87 _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n-initialValues,\n-88 const _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs& params = _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs());\n-89\n-97 _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n-initialValues,\n-98 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering);\n-99\n+74 template\n+_\b7_\b5 explicit _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const CONTAINER& factors) : _\bB_\ba_\bs_\be(factors) {}\n+76\n+78 template\n+_\b7_\b9 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph) : _\bB_\ba_\bs_\be(graph)\n+{}\n+80\n+_\b8_\b2 virtual _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n+83\n+87\n+89 void _\bp_\br_\bi_\bn_\bt(\n+90 const std::string& str = \"NonlinearFactorGraph: \",\n+91 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n+92\n+94 void printErrors(const _\bV_\ba_\bl_\bu_\be_\bs& values, const std::string& str =\n+\"NonlinearFactorGraph: \",\n+95 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+96 const std::function&\n+97 printCondition = [](const _\bF_\ba_\bc_\bt_\bo_\br *,double, size_t) {return true;}) const;\n+98\n+100 bool equals(const NonlinearFactorGraph& other, double tol = 1e-9) const;\n 101\n-104\n-_\b1_\b0_\b6 _\b~_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br() override {}\n-107\n-112 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br iterate() override;\n-113\n-_\b1_\b1_\b5 const _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs& _\bp_\ba_\br_\ba_\bm_\bs() const { return params_; }\n+105\n+107 double error(const _\bV_\ba_\bl_\bu_\be_\bs& values) const;\n+108\n+110 double probPrime(const _\bV_\ba_\bl_\bu_\be_\bs& values) const;\n+111\n+115 boost::shared_ptr symbolic() const;\n 116\n-118 double getDelta() const;\n-119\n+120 Ordering orderingCOLAMD() const;\n 121\n-122protected:\n-_\b1_\b2_\b4 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& _\b__\bp_\ba_\br_\ba_\bm_\bs() const override { return params_;\n-}\n-125\n-127 _\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs ensureHasOrdering(_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs params, const\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph) const;\n-128};\n-129\n-130}\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n-Base class and parameters for nonlinear optimization algorithms.\n+130 Ordering orderingCOLAMDConstrained(const FastMap& constraints)\n+const;\n+131\n+133 boost::shared_ptr linearize(const _\bV_\ba_\bl_\bu_\be_\bs&\n+linearizationPoint) const;\n+134\n+_\b1_\b3_\b6 typedef std::function&\n+hessianFactor)> _\bD_\ba_\bm_\bp_\be_\bn;\n+137\n+145 boost::shared_ptr linearizeToHessianFactor(\n+146 const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bD_\ba_\bm_\bp_\be_\bn& dampen = nullptr) const;\n+147\n+156 boost::shared_ptr linearizeToHessianFactor(\n+157 const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, const _\bD_\ba_\bm_\bp_\be_\bn& dampen =\n+nullptr) const;\n+158\n+161 _\bV_\ba_\bl_\bu_\be_\bs updateCholesky(const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+162 const _\bD_\ba_\bm_\bp_\be_\bn& dampen = nullptr) const;\n+163\n+166 _\bV_\ba_\bl_\bu_\be_\bs updateCholesky(const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+167 const _\bD_\ba_\bm_\bp_\be_\bn& dampen = nullptr) const;\n+168\n+170 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh clone() const;\n+171\n+181 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh rekey(const std::map& rekey_mapping) const;\n+182\n+189 template\n+_\b1_\b9_\b0 void _\ba_\bd_\bd_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& R, const T& z,\n+191 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& h) {\n+192 push_back(boost::make_shared<_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bT_\b> >(R, z, h));\n+193 }\n+194\n+201 template\n+_\b2_\b0_\b2 void _\ba_\bd_\bd_\bP_\br_\bi_\bo_\br(_\bK_\be_\by key, const T& prior,\n+203 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr) {\n+204 emplace_shared>(key, prior, model);\n+205 }\n+206\n+217 template\n+_\b2_\b1_\b8 void _\ba_\bd_\bd_\bP_\br_\bi_\bo_\br(_\bK_\be_\by key, const T& prior, const Matrix& covariance) {\n+219 emplace_shared>(key, prior, covariance);\n+220 }\n+221\n+225\n+226 using FactorGraph::dot;\n+227 using FactorGraph::saveGraph;\n+228\n+230 void _\bd_\bo_\bt(std::ostream& os, const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+231 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+232 const _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg& writer = _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg()) const;\n+233\n+235 std::string _\bd_\bo_\bt(\n+236 const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+237 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+238 const _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg& writer = _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg()) const;\n+239\n+241 void saveGraph(\n+242 const std::string& filename, const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+243 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+244 const _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg& writer = _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg()) const;\n+246\n+247 private:\n+248\n+253 boost::shared_ptr linearizeToHessianFactor(\n+254 const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bS_\bc_\ba_\bt_\bt_\be_\br& scatter, const Dampen& dampen =\n+nullptr) const;\n+255\n+_\b2_\b5_\b7 friend class boost::serialization::access;\n+258 template\n+259 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+260 ar & boost::serialization::make_nvp(\"NonlinearFactorGraph\",\n+261 boost::serialization::base_object(*this));\n+262 }\n+263\n+264 public:\n+265\n+266#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+269\n+270 boost::shared_ptr GTSAM_DEPRECATED linearizeToHessianFactor(\n+271 const _\bV_\ba_\bl_\bu_\be_\bs& values, boost::none_t, const Dampen& dampen = nullptr) const\n+272 {return linearizeToHessianFactor(values, dampen);}\n+273\n+275 _\bV_\ba_\bl_\bu_\be_\bs GTSAM_DEPRECATED updateCholesky(const _\bV_\ba_\bl_\bu_\be_\bs& values, boost::none_t,\n+276 const Dampen& dampen = nullptr) const\n+277 {return updateCholesky(values, dampen);}\n+278\n+280 void GTSAM_DEPRECATED saveGraph(\n+281 std::ostream& os, const _\bV_\ba_\bl_\bu_\be_\bs& values = _\bV_\ba_\bl_\bu_\be_\bs(),\n+282 const GraphvizFormatting& graphvizFormatting = GraphvizFormatting(),\n+283 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {\n+284 _\bd_\bo_\bt(os, values, keyFormatter, graphvizFormatting);\n+285 }\n+287 void GTSAM_DEPRECATED\n+288 saveGraph(const std::string& filename, const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+289 const GraphvizFormatting& graphvizFormatting,\n+290 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {\n+291 saveGraph(filename, values, keyFormatter, graphvizFormatting);\n+292 }\n+294#endif\n+295\n+296 };\n+297\n+299template<>\n+_\b3_\b0_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+{\n+301};\n+302\n+303} //\\ namespace gtsam\n+304\n+_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+2D Point\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n+_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b._\bh\n+Graphviz formatter for NonlinearFactorGraph.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for Levenberg-Marquardt optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bD_\bL\n-VerbosityDL\n-See DoglegParams::dlVerbosity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bD_\bL\n-VerbosityDL verbosityDL\n-The verbosity level for Dogleg (default: SILENT), see also\n-NonlinearOptimizerParams::verbosity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bI_\bn_\bi_\bt_\bi_\ba_\bl\n-double deltaInitial\n-The initial trust region radius (default: 10.0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-This class performs Dogleg nonlinear optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b~_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-~DoglegOptimizer() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b__\bp_\ba_\br_\ba_\bm_\bs\n-const NonlinearOptimizerParams & _params() const override\n-Access the parameters (base class version)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:124\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs\n-const DoglegParams & params() const\n-Read-only access the parameters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizer.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n+Scatter is an intermediate data structure used when building a HessianFactor\n+incrementally,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+Factor that supports arbitrary expressions via AD.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+Expression class that supports automatic differentiation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg\n+Formatting options and functions for saving a NonlinearFactorGraph instance in\n+GraphViz format.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:32\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-This is the abstract interface for classes that can optimize for the maximum-\n-likelihood estimate of a...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n-The common parameters for Nonlinear optimizers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+NonlinearFactorGraph()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\bP_\br_\bi_\bo_\br\n+void addPrior(Key key, const T &prior, const SharedNoiseModel &model=nullptr)\n+Convenience method which adds a PriorFactor to the factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:202\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+NonlinearFactorGraph(const CONTAINER &factors)\n+Construct from container of factors (shared_ptr or plain objects)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+void addExpressionFactor(const SharedNoiseModel &R, const T &z, const\n+Expression< T > &h)\n+Directly add ExpressionFactor that implements |h(x)-z|^2_R.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:190\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\bP_\br_\bi_\bo_\br\n+void addPrior(Key key, const T &prior, const Matrix &covariance)\n+Convenience method which adds a PriorFactor to the factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:218\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+NonlinearFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)\n+Construct from iterator over factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bD_\ba_\bm_\bp_\be_\bn\n+std::function< void(const boost::shared_ptr< HessianFactor > &hessianFactor)>\n+Dampen\n+typdef for dampen functions used below\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+NonlinearFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n+Implicit copy/downcast constructor to override explicit template container\n+constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+virtual ~NonlinearFactorGraph()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:82\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n+_\bP_\br_\bi_\bo_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01091.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01091.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExtendedKalmanFilter-inl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/factorTesting.h File Reference\n \n \n \n \n \n \n \n@@ -94,39 +94,109 @@\n \n \n \n \n \n
\n \n-
ExtendedKalmanFilter-inl.h File Reference
\n+Namespaces |\n+Macros |\n+Functions
\n+
factorTesting.h File Reference
\n \n
\n \n-

Class to perform generic Kalman Filtering using nonlinear factor graphs. \n+

Evaluate derivatives of a nonlinear factor numerically. \n More...

\n \n

Go to the source code of this file.

\n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+

\n+Macros

#define EXPECT_CORRECT_FACTOR_JACOBIANS(factor, values, numerical_derivative_step, tolerance)    { EXPECT(gtsam::internal::testFactorJacobians(name_, factor, values, numerical_derivative_step, tolerance)); }
 Check the Jacobians produced by a factor against finite differences.
 
\n+\n+\n+\n+\n+\n+\n

\n+Functions

JacobianFactor gtsam::linearizeNumerically (const NoiseModelFactor &factor, const Values &values, double delta=1e-5)
 Linearize a nonlinear factor using numerical differentiation The benefit of this method is that it does not need to know what types are involved to evaluate the factor.
 
\n+bool gtsam::internal::testFactorJacobians (const std::string &name_, const NoiseModelFactor &factor, const gtsam::Values &values, double delta, double tolerance)
 
\n

Detailed Description

\n-

Class to perform generic Kalman Filtering using nonlinear factor graphs.

\n-
Author
Stephen Williams
\n+

Evaluate derivatives of a nonlinear factor numerically.

\n+
Date
September 18, 2014
\n+
Author
Frank Dellaert
\n
\n-Chris Beall
\n-
\n+Paul Furgale \n+

Macro Definition Documentation

\n+\n+

◆ EXPECT_CORRECT_FACTOR_JACOBIANS

\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+
#define EXPECT_CORRECT_FACTOR_JACOBIANS( factor,
 values,
 numerical_derivative_step,
 tolerance 
)    { EXPECT(gtsam::internal::testFactorJacobians(name_, factor, values, numerical_derivative_step, tolerance)); }
\n+
\n+\n+

Check the Jacobians produced by a factor against finite differences.

\n+
Parameters
\n+ \n+ \n+ \n+ \n+ \n+
factorThe factor to test.
valuesValues filled in for testing the Jacobians.
numerical_derivative_stepThe step to use when computing the numerical derivative Jacobians
toleranceThe numerical tolerance to use when comparing Jacobians.
\n+
\n+
\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,60 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ExtendedKalmanFilter-inl.h File Reference\n-Class to perform generic Kalman Filtering using nonlinear factor graphs.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+factorTesting.h File Reference\n+Evaluate derivatives of a nonlinear factor numerically. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bE_\bX_\bP_\bE_\bC_\bT_\b__\bC_\bO_\bR_\bR_\bE_\bC_\bT_\b__\bF_\bA_\bC_\bT_\bO_\bR_\b__\bJ_\bA_\bC_\bO_\bB_\bI_\bA_\bN_\bS(factor, values,\n+ numerical_derivative_step, tolerance)\u00a0\u00a0\u00a0 { EXPECT(gtsam::internal::\n+ testFactorJacobians(name_, factor, values, numerical_derivative_step,\n+ tolerance)); }\n+\u00a0 Check the Jacobians produced by a factor against finite differences.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bN_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bl_\by (const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br &factor,\n+ const _\bV_\ba_\bl_\bu_\be_\bs &values, double delta=1e-5)\n+ Linearize a nonlinear factor using numerical differentiation\n+\u00a0 The benefit of this method is that it does not need to know\n+ what types are involved to evaluate the factor.\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:t\bte\bes\bst\btF\bFa\bac\bct\bto\bor\brJ\bJa\bac\bco\bob\bbi\bia\ban\bns\bs (const std::string &name_,\n+ const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br &factor, const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs &values,\n+ double delta, double tolerance)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Class to perform generic Kalman Filtering using nonlinear factor graphs.\n+Evaluate derivatives of a nonlinear factor numerically.\n+ Date\n+ September 18, 2014\n Author\n- Stephen Williams\n- Chris Beall\n+ Frank Dellaert\n+ Paul Furgale\n+*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0E\bEX\bXP\bPE\bEC\bCT\bT_\b_C\bCO\bOR\bRR\bRE\bEC\bCT\bT_\b_F\bFA\bAC\bCT\bTO\bOR\bR_\b_J\bJA\bAC\bCO\bOB\bBI\bIA\bAN\bNS\bS *\b**\b**\b**\b**\b*\n+#define EXPECT_CORRECT_FACTOR_JACOBIANS ( \u00a0 factor,\n+ \u00a0 values,\n+ \u00a0 numerical_derivative_step,\n+ \u00a0 tolerance\u00a0\n+ \u00a0\u00a0\u00a0 { EXPECT(gtsam::internal::\n+ ) testFactorJacobians(name_, factor,\n+ values, numerical_derivative_step,\n+ tolerance)); }\n+Check the Jacobians produced by a factor against finite differences.\n+ Parameters\n+ factor The factor to test.\n+ values _\bV_\ba_\bl_\bu_\be_\bs filled in for testing the Jacobians.\n+ numerical_derivative_step The step to use when computing the numerical\n+ derivative Jacobians\n+ tolerance The numerical tolerance to use when comparing\n+ Jacobians.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bf_\ba_\bc_\bt_\bo_\br_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01091_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01091_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExtendedKalmanFilter-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/factorTesting.h Source File\n \n \n \n \n \n \n \n@@ -98,164 +98,136 @@\n
No Matches
\n \n \n \n \n \n
\n-
ExtendedKalmanFilter-inl.h
\n+
factorTesting.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
28 /* ************************************************************************* */
\n-
29 template<class VALUE>
\n-
30 typename ExtendedKalmanFilter<VALUE>::T ExtendedKalmanFilter<VALUE>::solve_(
\n-
31 const GaussianFactorGraph& linearFactorGraph,
\n-
32 const Values& linearizationPoint, Key lastKey,
\n-\n-
34 {
\n-
35 // Compute the marginal on the last key
\n-
36 // Solve the linear factor graph, converting it into a linear Bayes Network
\n-
37 // P(x0,x1) = P(x0|x1)*P(x1)
\n-
38 Ordering lastKeyAsOrdering;
\n-
39 lastKeyAsOrdering += lastKey;
\n-
40 const GaussianConditional::shared_ptr marginal =
\n-
41 linearFactorGraph.marginalMultifrontalBayesNet(lastKeyAsOrdering)->front();
\n-
42
\n-
43 // Extract the current estimate of x1,P1
\n-
44 VectorValues result = marginal->solve(VectorValues());
\n-
45 const T& current = linearizationPoint.at<T>(lastKey);
\n-
46 T x = traits<T>::Retract(current, result[lastKey]);
\n-
47
\n-
48 // Create a Jacobian Factor from the root node of the produced Bayes Net.
\n-
49 // This will act as a prior for the next iteration.
\n-
50 // The linearization point of this prior must be moved to the new estimate of x,
\n-
51 // and the key/index needs to be reset to 0, the first key in the next iteration.
\n-
52 assert(marginal->nrFrontals() == 1);
\n-
53 assert(marginal->nrParents() == 0);
\n-
54 *newPrior = boost::make_shared<JacobianFactor>(
\n-
55 marginal->keys().front(),
\n-
56 marginal->getA(marginal->begin()),
\n-
57 marginal->getb() - marginal->getA(marginal->begin()) * result[lastKey],
\n-
58 marginal->get_model());
\n-
59
\n-
60 return x;
\n-
61 }
\n-
62
\n-
63 /* ************************************************************************* */
\n-
64 template <class VALUE>
\n-
65 ExtendedKalmanFilter<VALUE>::ExtendedKalmanFilter(
\n-
66 Key key_initial, T x_initial, noiseModel::Gaussian::shared_ptr P_initial)
\n-
67 : x_(x_initial) // Set the initial linearization point
\n-
68 {
\n-
69 // Create a Jacobian Prior Factor directly P_initial.
\n-
70 // Since x0 is set to the provided mean, the b vector in the prior will be zero
\n-
71 // TODO(Frank): is there a reason why noiseModel is not simply P_initial?
\n-
72 int n = traits<T>::GetDimension(x_initial);
\n-
73 priorFactor_ = JacobianFactor::shared_ptr(
\n-
74 new JacobianFactor(key_initial, P_initial->R(), Vector::Zero(n),
\n-
75 noiseModel::Unit::Create(n)));
\n-
76 }
\n-
77
\n-
78 /* ************************************************************************* */
\n-
79 template<class VALUE>
\n-
\n-
80 typename ExtendedKalmanFilter<VALUE>::T ExtendedKalmanFilter<VALUE>::predict(
\n-
81 const NoiseModelFactor& motionFactor) {
\n-
82 const auto keys = motionFactor.keys();
\n+
20#pragma once
\n+
21
\n+\n+\n+
24#include <string>
\n+
25#include <vector>
\n+
26
\n+
27namespace gtsam {
\n+
28
\n+
\n+\n+
40 const Values& values,
\n+
41 double delta = 1e-5) {
\n+
42 // We will fill a vector of key/Jacobians pairs (a map would sort)
\n+
43 std::vector<std::pair<Key, Matrix> > jacobians;
\n+
44
\n+
45 // Get size
\n+
46 const Vector e = factor.whitenedError(values);
\n+
47 const size_t rows = e.size();
\n+
48
\n+
49 // Loop over all variables
\n+
50 const double one_over_2delta = 1.0 / (2.0 * delta);
\n+
51 for (Key key : factor) {
\n+
52 // Compute central differences using the values struct.
\n+
53 VectorValues dX = values.zeroVectors();
\n+
54 const size_t cols = dX.dim(key);
\n+
55 Matrix J = Matrix::Zero(rows, cols);
\n+
56 for (size_t col = 0; col < cols; ++col) {
\n+
57 Vector dx = Vector::Zero(cols);
\n+
58 dx(col) = delta;
\n+
59 dX[key] = dx;
\n+
60 Values eval_values = values.retract(dX);
\n+
61 const Vector left = factor.whitenedError(eval_values);
\n+
62 dx(col) = -delta;
\n+
63 dX[key] = dx;
\n+
64 eval_values = values.retract(dX);
\n+
65 const Vector right = factor.whitenedError(eval_values);
\n+
66 J.col(col) = (left - right) * one_over_2delta;
\n+
67 }
\n+
68 jacobians.emplace_back(key, J);
\n+
69 }
\n+
70
\n+
71 // Next step...return JacobianFactor
\n+
72 return JacobianFactor(jacobians, -e);
\n+
73}
\n+
\n+
74
\n+
75namespace internal {
\n+
76// CPPUnitLite-style test for linearization of a factor
\n+
77inline bool testFactorJacobians(const std::string& name_,
\n+
78 const NoiseModelFactor& factor,
\n+
79 const gtsam::Values& values, double delta,
\n+
80 double tolerance) {
\n+
81 // Create expected value by numerical differentiation
\n+
82 JacobianFactor expected = linearizeNumerically(factor, values, delta);
\n
83
\n-
84 // Create a Gaussian Factor Graph
\n-
85 GaussianFactorGraph linearFactorGraph;
\n-
86
\n-
87 // Add in previous posterior as prior on the first state
\n-
88 linearFactorGraph.push_back(priorFactor_);
\n-
89
\n-
90 // Linearize motion model and add it to the Kalman Filter graph
\n-
91 Values linearizationPoint;
\n-
92 linearizationPoint.insert(keys[0], x_);
\n-
93 linearizationPoint.insert(keys[1], x_); // TODO should this really be x_ ?
\n-
94 linearFactorGraph.push_back(motionFactor.linearize(linearizationPoint));
\n-
95
\n-
96 // Solve the factor graph and update the current state estimate
\n-
97 // and the posterior for the next iteration.
\n-
98 x_ = solve_(linearFactorGraph, linearizationPoint, keys[1], &priorFactor_);
\n-
99
\n-
100 return x_;
\n-
101 }
\n-
\n-
102
\n-
103 /* ************************************************************************* */
\n-
104 template<class VALUE>
\n-
\n-
105 typename ExtendedKalmanFilter<VALUE>::T ExtendedKalmanFilter<VALUE>::update(
\n-
106 const NoiseModelFactor& measurementFactor) {
\n-
107 const auto keys = measurementFactor.keys();
\n+
84 // Create actual value by linearize
\n+
85 auto actual =
\n+
86 boost::dynamic_pointer_cast<JacobianFactor>(factor.linearize(values));
\n+
87 if (!actual) return false;
\n+
88
\n+
89 // Check cast result and then equality
\n+
90 bool equal = assert_equal(expected, *actual, tolerance);
\n+
91
\n+
92 // if not equal, test individual jacobians:
\n+
93 if (!equal) {
\n+
94 for (size_t i = 0; i < actual->size(); i++) {
\n+
95 bool i_good =
\n+
96 assert_equal((Matrix)(expected.getA(expected.begin() + i)),
\n+
97 (Matrix)(actual->getA(actual->begin() + i)), tolerance);
\n+
98 if (!i_good) {
\n+
99 std::cout << "Mismatch in Jacobian " << i + 1
\n+
100 << " (base 1), as shown above" << std::endl;
\n+
101 }
\n+
102 }
\n+
103 }
\n+
104
\n+
105 return equal;
\n+
106}
\n+
107} // namespace internal
\n
108
\n-
109 // Create a Gaussian Factor Graph
\n-
110 GaussianFactorGraph linearFactorGraph;
\n-
111
\n-
112 // Add in the prior on the first state
\n-
113 linearFactorGraph.push_back(priorFactor_);
\n-
114
\n-
115 // Linearize measurement factor and add it to the Kalman Filter graph
\n-
116 Values linearizationPoint;
\n-
117 linearizationPoint.insert(keys[0], x_);
\n-
118 linearFactorGraph.push_back(measurementFactor.linearize(linearizationPoint));
\n-
119
\n-
120 // Solve the factor graph and update the current state estimate
\n-
121 // and the prior factor for the next iteration
\n-
122 x_ = solve_(linearFactorGraph, linearizationPoint, keys[0], &priorFactor_);
\n-
123
\n-
124 return x_;
\n-
125 }
\n-
\n-
126
\n-
127} // namespace gtsam
\n-
Chordal Bayes Net, the result of eliminating a factor graph.
\n-
Linear Factor Graph where all factors are Gaussians.
\n-
Class to perform generic Kalman Filtering using nonlinear factor graphs.
\n-
Non-linear factor base classes.
\n+
\n+
114#define EXPECT_CORRECT_FACTOR_JACOBIANS(factor, values, numerical_derivative_step, tolerance) \\
\n+
115 { EXPECT(gtsam::internal::testFactorJacobians(name_, factor, values, numerical_derivative_step, tolerance)); }
\n+
\n+
116
\n+
117} // namespace gtsam
\n+
Some functions to compute numerical derivatives.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n+
JacobianFactor linearizeNumerically(const NoiseModelFactor &factor, const Values &values, double delta=1e-5)
Linearize a nonlinear factor using numerical differentiation The benefit of this method is that it do...
Definition factorTesting.h:39
\n+
bool equal(const T &obj1, const T &obj2, double tol)
Call equal on the object.
Definition Testable.h:84
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition FactorGraph.h:186
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianConditional.h:46
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition JacobianFactor.h:96
\n-
This is a generic Extended Kalman Filter class implemented using nonlinear factors.
Definition ExtendedKalmanFilter.h:45
\n+
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
size_t dim(Key j) const
Return the dimension of variable j.
Definition VectorValues.h:130
\n
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n-
boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override
Linearize a non-linearFactorN to get a GaussianFactor, Hence .
Definition NonlinearFactor.cpp:152
\n+
Vector whitenedError(const Values &c) const
Vector of errors, whitened This is the raw error, i.e., i.e.
Definition NonlinearFactor.cpp:109
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
void insert(Key j, const Value &val)
Add a variable with the given j, throws KeyAlreadyExists<J> if j is already present.
Definition Values.cpp:157
\n+
Values retract(const VectorValues &delta) const
Add a delta config to current config and returns a new config.
Definition Values.cpp:99
\n+
VectorValues zeroVectors() const
Return a VectorValues of zero vectors for each variable in this Values.
Definition Values.cpp:272
\n
In Gaussian factors, the error function returns either the negative log-likelihood,...
\n-
The Factor::error simply extracts the.
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+
noise model to the factor, and calculates the error by asking the user to implement the method
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,205 +1,170 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ExtendedKalmanFilter-inl.h\n+factorTesting.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh>\n+20#pragma once\n+21\n 22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-28 /* *************************************************************************\n-*/\n-29 template\n-30 typename ExtendedKalmanFilter::T ExtendedKalmanFilter::solve_(\n-31 const GaussianFactorGraph& linearFactorGraph,\n-32 const _\bV_\ba_\bl_\bu_\be_\bs& linearizationPoint, _\bK_\be_\by lastKey,\n-33 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br* newPrior)\n-34 {\n-35 // Compute the marginal on the last key\n-36 // Solve the linear factor graph, converting it into a linear Bayes Network\n-37 // P(x0,x1) = P(x0|x1)*P(x1)\n-38 Ordering lastKeyAsOrdering;\n-39 lastKeyAsOrdering += lastKey;\n-40 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br marginal =\n-41 linearFactorGraph.marginalMultifrontalBayesNet(lastKeyAsOrdering)->front();\n-42\n-43 // Extract the current estimate of x1,P1\n-44 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs result = marginal->solve(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs());\n-45 const T& current = linearizationPoint.at(lastKey);\n-46 T x = traits::Retract(current, result[lastKey]);\n-47\n-48 // Create a Jacobian Factor from the root node of the produced Bayes Net.\n-49 // This will act as a prior for the next iteration.\n-50 // The linearization point of this prior must be moved to the new estimate\n-of x,\n-51 // and the key/index needs to be reset to 0, the first key in the next\n-iteration.\n-52 assert(marginal->nrFrontals() == 1);\n-53 assert(marginal->nrParents() == 0);\n-54 *newPrior = boost::make_shared(\n-55 marginal->keys().front(),\n-56 marginal->getA(marginal->begin()),\n-57 marginal->getb() - marginal->getA(marginal->begin()) * result[lastKey],\n-58 marginal->get_model());\n-59\n-60 return x;\n-61 }\n-62\n-63 /* *************************************************************************\n-*/\n-64 template \n-65 ExtendedKalmanFilter::ExtendedKalmanFilter(\n-66 _\bK_\be_\by key_initial, T x_initial, noiseModel::Gaussian::shared_ptr P_initial)\n-67 : x_(x_initial) // Set the initial linearization point\n-68 {\n-69 // Create a Jacobian Prior Factor directly P_initial.\n-70 // Since x0 is set to the provided mean, the b vector in the prior will be\n-zero\n-71 // TODO(Frank): is there a reason why noiseModel is not simply P_initial?\n-72 int n = traits::GetDimension(x_initial);\n-73 priorFactor_ = JacobianFactor::shared_ptr(\n-74 new _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(key_initial, P_initial->R(), Vector::Zero(n),\n-75 noiseModel::Unit::Create(n)));\n-76 }\n-77\n-78 /* *************************************************************************\n-*/\n-79 template\n-_\b8_\b0 typename ExtendedKalmanFilter::T _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bp_\br_\be_\bd_\bi_\bc_\bt\n-(\n-81 const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& motionFactor) {\n-82 const auto keys = motionFactor._\bk_\be_\by_\bs();\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh>\n+24#include \n+25#include \n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n+28\n+_\b3_\b9inline _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bN_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bl_\by(const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& factor,\n+40 const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+41 double delta = 1e-5) {\n+42 // We will fill a vector of key/Jacobians pairs (a map would sort)\n+43 std::vector > jacobians;\n+44\n+45 // Get size\n+46 const Vector e = factor._\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(values);\n+47 const size_t rows = e.size();\n+48\n+49 // Loop over all variables\n+50 const double one_over_2delta = 1.0 / (2.0 * delta);\n+51 for (_\bK_\be_\by key : factor) {\n+52 // Compute central differences using the values struct.\n+53 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs dX = values._\bz_\be_\br_\bo_\bV_\be_\bc_\bt_\bo_\br_\bs();\n+54 const size_t cols = dX._\bd_\bi_\bm(key);\n+55 Matrix J = Matrix::Zero(rows, cols);\n+56 for (size_t col = 0; col < cols; ++col) {\n+57 Vector dx = Vector::Zero(cols);\n+58 dx(col) = delta;\n+59 dX[key] = dx;\n+60 _\bV_\ba_\bl_\bu_\be_\bs eval_values = values._\br_\be_\bt_\br_\ba_\bc_\bt(dX);\n+61 const Vector left = factor._\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(eval_values);\n+62 dx(col) = -delta;\n+63 dX[key] = dx;\n+64 eval_values = values._\br_\be_\bt_\br_\ba_\bc_\bt(dX);\n+65 const Vector right = factor._\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(eval_values);\n+66 J.col(col) = (left - right) * one_over_2delta;\n+67 }\n+68 jacobians.emplace_back(key, J);\n+69 }\n+70\n+71 // Next step...return JacobianFactor\n+72 return _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(jacobians, -e);\n+73}\n+74\n+75namespace internal {\n+76// CPPUnitLite-style test for linearization of a factor\n+77inline bool testFactorJacobians(const std::string& name_,\n+78 const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& factor,\n+79 const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs& values, double delta,\n+80 double tolerance) {\n+81 // Create expected value by numerical differentiation\n+82 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br expected = _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bN_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bl_\by(factor, values, delta);\n 83\n-84 // Create a Gaussian Factor Graph\n-85 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh linearFactorGraph;\n-86\n-87 // Add in previous posterior as prior on the first state\n-88 linearFactorGraph._\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(priorFactor_);\n-89\n-90 // Linearize motion model and add it to the Kalman Filter graph\n-91 _\bV_\ba_\bl_\bu_\be_\bs linearizationPoint;\n-92 linearizationPoint._\bi_\bn_\bs_\be_\br_\bt(keys[0], x_);\n-93 linearizationPoint._\bi_\bn_\bs_\be_\br_\bt(keys[1], x_); // TODO should this really be x_ ?\n-94 linearFactorGraph._\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(motionFactor._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(linearizationPoint));\n-95\n-96 // Solve the factor graph and update the current state estimate\n-97 // and the posterior for the next iteration.\n-98 x_ = solve_(linearFactorGraph, linearizationPoint, keys[1], &priorFactor_);\n-99\n-100 return x_;\n+84 // Create actual value by linearize\n+85 auto actual =\n+86 boost::dynamic_pointer_cast(factor.linearize(values));\n+87 if (!actual) return false;\n+88\n+89 // Check cast result and then equality\n+90 bool _\be_\bq_\bu_\ba_\bl = _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(expected, *actual, tolerance);\n+91\n+92 // if not equal, test individual jacobians:\n+93 if (!_\be_\bq_\bu_\ba_\bl) {\n+94 for (size_t i = 0; i < actual->size(); i++) {\n+95 bool i_good =\n+96 _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl((Matrix)(expected.getA(expected.begin() + i)),\n+97 (Matrix)(actual->getA(actual->begin() + i)), tolerance);\n+98 if (!i_good) {\n+99 std::cout << \"Mismatch in Jacobian \" << i + 1\n+100 << \" (base 1), as shown above\" << std::endl;\n 101 }\n-102\n-103 /\n-* ************************************************************************* */\n-104 template\n-_\b1_\b0_\b5 typename ExtendedKalmanFilter::T _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-(\n-106 const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& measurementFactor) {\n-107 const auto keys = measurementFactor._\bk_\be_\by_\bs();\n+102 }\n+103 }\n+104\n+105 return _\be_\bq_\bu_\ba_\bl;\n+106}\n+107} // namespace internal\n 108\n-109 // Create a Gaussian Factor Graph\n-110 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh linearFactorGraph;\n-111\n-112 // Add in the prior on the first state\n-113 linearFactorGraph._\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(priorFactor_);\n-114\n-115 // Linearize measurement factor and add it to the Kalman Filter graph\n-116 _\bV_\ba_\bl_\bu_\be_\bs linearizationPoint;\n-117 linearizationPoint._\bi_\bn_\bs_\be_\br_\bt(keys[0], x_);\n-118 linearFactorGraph._\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(measurementFactor._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-(linearizationPoint));\n-119\n-120 // Solve the factor graph and update the current state estimate\n-121 // and the prior factor for the next iteration\n-122 x_ = solve_(linearFactorGraph, linearizationPoint, keys[0], &priorFactor_);\n-123\n-124 return x_;\n-125 }\n-126\n-127} // namespace gtsam\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-Chordal Bayes Net, the result of eliminating a factor graph.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n-_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh\n-Class to perform generic Kalman Filtering using nonlinear factor graphs.\n+_\b1_\b1_\b4#define EXPECT_CORRECT_FACTOR_JACOBIANS(factor, values,\n+numerical_derivative_step, tolerance) \\\n+115 { EXPECT(gtsam::internal::testFactorJacobians(name_, factor, values,\n+numerical_derivative_step, tolerance)); }\n+116\n+117} // namespace gtsam\n+_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh\n+Some functions to compute numerical derivatives.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n+bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n+equals with an tolerance, prints out message if unequal\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bN_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bl_\by\n+JacobianFactor linearizeNumerically(const NoiseModelFactor &factor, const\n+Values &values, double delta=1e-5)\n+Linearize a nonlinear factor using numerical differentiation The benefit of\n+this method is that it do...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn factorTesting.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl\n+bool equal(const T &obj1, const T &obj2, double tol)\n+Call equal on the object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:84\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)\n-Add a factor directly using a shared_ptr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br\n-This is a generic Extended Kalman Filter class implemented using nonlinear\n-factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor in the squared-error form.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bd_\bi_\bm\n+size_t dim(Key j) const\n+Return the dimension of variable j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:130\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n density Templated on...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override\n-Linearize a non-linearFactorN to get a GaussianFactor, Hence .\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n+Vector whitenedError(const Values &c) const\n+Vector of errors, whitened This is the raw error, i.e., i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:109\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-void insert(Key j, const Value &val)\n-Add a variable with the given j, throws KeyAlreadyExists if j is already\n-present.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+Values retract(const VectorValues &delta) const\n+Add a delta config to current config and returns a new config.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bz_\be_\br_\bo_\bV_\be_\bc_\bt_\bo_\br_\bs\n+VectorValues zeroVectors() const\n+Return a VectorValues of zero vectors for each variable in this Values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:272\n _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n In Gaussian factors, the error function returns either the negative log-\n likelihood,...\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+noise model to the factor, and calculates the error by asking the user to\n+implement the method\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bf_\ba_\bc_\bt_\bo_\br_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01097.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01097.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h File Reference\n \n \n \n \n \n \n \n@@ -96,77 +96,88 @@\n \n \n \n
\n \n-
NonlinearFactor.h File Reference
\n+Functions
\n+
Expression.h File Reference
\n \n
\n \n-

Non-linear factor base classes. \n+

Expressions for Block Automatic Differentiation. \n More...

\n \n

Go to the source code of this file.

\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 Classes

class  gtsam::NonlinearFactor
 Nonlinear factor base class. More...
class  gtsam::Expression< T >
 Expression class that supports automatic differentiation. More...
 
struct  gtsam::traits< NonlinearFactor >
 traits More...
struct  gtsam::Expression< T >::UnaryFunction< A1 >
 
class  gtsam::NoiseModelFactor
 A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density \\( P(z|x) \\propto exp -0.5*|z-h(x)|^2_C \\) Templated on the parameter type X and the values structure Values There is no return type specified for h(x). More...
struct  gtsam::Expression< T >::BinaryFunction< A1, A2 >
 
class  gtsam::NoiseModelFactorN< ValueTypes >
 A convenient base class for creating your own NoiseModelFactor with n variables. More...
struct  gtsam::Expression< T >::TernaryFunction< A1, A2, A3 >
 
class  gtsam::ScalarMultiplyExpression< T >
 A ScalarMultiplyExpression is a specialization of Expression that multiplies with a scalar It optimizes the Jacobian calculation for this specific case. More...
 
class  gtsam::BinarySumExpression< T >
 A BinarySumExpression is a specialization of Expression that adds two expressions together It optimizes the Jacobian calculation for this specific case. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-Macros

\n-#define NoiseModelFactor1   NoiseModelFactorN
 
\n-#define NoiseModelFactor2   NoiseModelFactorN
 
\n-#define NoiseModelFactor3   NoiseModelFactorN
 
\n-#define NoiseModelFactor4   NoiseModelFactorN
 
\n-#define NoiseModelFactor5   NoiseModelFactorN
 
\n-#define NoiseModelFactor6   NoiseModelFactorN
 

\n+Functions

template<typename T , typename A >
Expression< T > gtsam::linearExpression (const std::function< T(A)> &f, const Expression< A > &expression, const Eigen::Matrix< double, traits< T >::dimension, traits< A >::dimension > &dTdA)
 Create an expression out of a linear function f:T->A with (constant) Jacobian dTdA TODO(frank): create a more efficient version like ScalarMultiplyExpression.
 
\n+template<typename T >
ScalarMultiplyExpression< T > gtsam::operator* (double s, const Expression< T > &e)
 Construct an expression that executes the scalar multiplication with an input expression The type T must be a vector space Example: Expression<Point2> a(0), b = 12 * a;.
 
\n+template<typename T >
BinarySumExpression< T > gtsam::operator+ (const Expression< T > &e1, const Expression< T > &e2)
 Construct an expression that sums two input expressions of the same type T The type T must be a vector space Example: Expression<Point2> a(0), b(1), c = a + b;.
 
\n+template<typename T >
BinarySumExpression< T > gtsam::operator- (const Expression< T > &e1, const Expression< T > &e2)
 Construct an expression that subtracts one expression from another.
 
template<typename T >
Expression< T > gtsam::operator* (const Expression< T > &expression1, const Expression< T > &expression2)
 Construct a product expression, assumes T::compose(T) -> T.
 
template<typename T >
std::vector< Expression< T > > gtsam::createUnknowns (size_t n, char c, size_t start)
 Construct an array of leaves.
 
\n

Detailed Description

\n-

Non-linear factor base classes.

\n+

Expressions for Block Automatic Differentiation.

\n+
Date
September 18, 2014
\n
Author
Frank Dellaert
\n
\n-Richard Roberts
\n-
\n-Gerry Chen
\n+Paul Furgale \n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,53 +1,89 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n-NonlinearFactor.h File Reference\n-Non-linear factor base classes. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Expression.h File Reference\n+Expressions for Block Automatic Differentiation. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Nonlinear factor base class. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>\n+\u00a0 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn class that supports automatic differentiation. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>_\b:_\b:_\bU_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bA_\b1_\b _\b>\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n- A nonlinear sum-of-squares factor with a zero-mean noise model\n-\u00a0 implementing the density \\( P(z|x) \\propto exp -0.5*|z-h(x)|^2_C \\)\n- Templated on the parameter type X and the values structure _\bV_\ba_\bl_\bu_\be_\bs\n- There is no return type specified for h(x). _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\bs_\b _\b>\n-\u00a0 A convenient base class for creating your own _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br with n\n- variables. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b _\b>\n \u00a0\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n-\u00a0 Global functions in a separate testing namespace.\n-\u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br1\b1\u00a0\u00a0\u00a0NoiseModelFactorN\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>_\b:_\b:_\bT_\be_\br_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b,_\b _\bA_\b3_\b _\b>\n \u00a0\n-#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br2\b2\u00a0\u00a0\u00a0NoiseModelFactorN\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>\n+ A _\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn is a specialization of _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn that\n+\u00a0 multiplies with a scalar It optimizes the Jacobian calculation for\n+ this specific case. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br3\b3\u00a0\u00a0\u00a0NoiseModelFactorN\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\b _\bT_\b _\b>\n+ A _\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn is a specialization of _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn that adds two\n+\u00a0 expressions together It optimizes the Jacobian calculation for this\n+ specific case. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br4\b4\u00a0\u00a0\u00a0NoiseModelFactorN\n-\u00a0\n-#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br5\b5\u00a0\u00a0\u00a0NoiseModelFactorN\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n+\u00a0 Global functions in a separate testing namespace.\n \u00a0\n-#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br6\b6\u00a0\u00a0\u00a0NoiseModelFactorN\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn (const std::function< T\n+ (A)> &f, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< A > &expression,\n+ const Eigen::Matrix< double, _\bt_\br_\ba_\bi_\bt_\bs< T >::\n+ dimension, _\bt_\br_\ba_\bi_\bt_\bs< A >::dimension > &dTdA)\n+ Create an expression out of a linear function\n+\u00a0 f:T->A with (constant) Jacobian dTdA TODO\n+ (frank): create a more efficient version like\n+ _\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn.\n+\u00a0\n+template\n+ _\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br*\b* (double s, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T\n+ > &e)\n+ Construct an expression that executes the\n+\u00a0 scalar multiplication with an input expression\n+ The type T must be a vector space Example:\n+ Expression a(0), b = 12 * a;.\n+\u00a0\n+template\n+ _\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br+\b+ (const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > &e1,\n+ const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > &e2)\n+ Construct an expression that sums two input\n+\u00a0 expressions of the same type T The type T must\n+ be a vector space Example: Expression a\n+ (0), b(1), c = a + b;.\n+\u00a0\n+template\n+ _\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br-\b- (const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > &e1,\n+ const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > &e2)\n+\u00a0 Construct an expression that subtracts one\n+ expression from another.\n+\u00a0\n+template\n+ _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b* (const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\n+ &expression1, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\n+ &expression2)\n+\u00a0 Construct a product expression, assumes T::\n+ compose(T) -> T.\n+\u00a0\n+template\n+std::vector< _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs (size_t n, char c, size_t\n+ start)\n+\u00a0 Construct an array of leaves.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Non-linear factor base classes.\n+Expressions for Block Automatic Differentiation.\n+ Date\n+ September 18, 2014\n Author\n Frank Dellaert\n- Richard Roberts\n- Gerry Chen\n+ Paul Furgale\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01097.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01097.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,14 @@\n var a01097 = [\n- [\"gtsam::NonlinearFactor\", \"a04496.html\", \"a04496\"],\n- [\"gtsam::traits< NonlinearFactor >\", \"a04500.html\", null],\n- [\"gtsam::NoiseModelFactor\", \"a04504.html\", \"a04504\"],\n- [\"gtsam::NoiseModelFactorN< ValueTypes >\", \"a04536.html\", \"a04536\"]\n+ [\"gtsam::Expression< T >\", \"a04292.html\", \"a04292\"],\n+ [\"gtsam::Expression< T >::UnaryFunction< A1 >\", \"a04296.html\", null],\n+ [\"gtsam::Expression< T >::BinaryFunction< A1, A2 >\", \"a04300.html\", null],\n+ [\"gtsam::Expression< T >::TernaryFunction< A1, A2, A3 >\", \"a04304.html\", null],\n+ [\"gtsam::ScalarMultiplyExpression< T >\", \"a04308.html\", null],\n+ [\"gtsam::BinarySumExpression< T >\", \"a04312.html\", null],\n+ [\"createUnknowns\", \"a01097.html#a51881c20dd5ecdd129cb993ea8374846\", null],\n+ [\"linearExpression\", \"a01097.html#a794029fe8dfc03f67a8cb64ad05d47c9\", null],\n+ [\"operator*\", \"a01097.html#a3db519caa1b7e43412c9a7e13acf8329\", null],\n+ [\"operator*\", \"a01097.html#a405f3793afc2cc3173c3fbdecadb162a\", null],\n+ [\"operator+\", \"a01097.html#a589e3ff8cd71e5a17ee1dcfae8b2df26\", null],\n+ [\"operator-\", \"a01097.html#a9512eb02324210895442f2bf8268902d\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01097_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01097_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h Source File\n \n \n \n \n \n \n \n@@ -98,469 +98,310 @@\n
No Matches
\n \n \n \n \n \n
\n-
NonlinearFactor.h
\n+
Expression.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20// \\callgraph
\n+
20#pragma once
\n
21
\n-
22#pragma once
\n-
23
\n-\n-\n-\n-\n-\n-
29#include <gtsam/base/utilities.h> // boost::index_sequence
\n-
30
\n-
31#include <boost/serialization/base_object.hpp>
\n+
22#include <gtsam/nonlinear/internal/JacobianMap.h>
\n+\n+\n+
25#include <gtsam/base/VectorSpace.h>
\n+
26
\n+
27#include <boost/make_shared.hpp>
\n+
28#include <map>
\n+
29
\n+
30// Forward declare tests
\n+
31class ExpressionFactorShallowTest;
\n
32
\n
33namespace gtsam {
\n
34
\n-
35/* ************************************************************************* */
\n-
36
\n-
\n-
42class GTSAM_EXPORT NonlinearFactor: public Factor {
\n+
35// Forward declares
\n+
36class Values;
\n+
37template<typename T> class ExpressionFactor;
\n+
38
\n+
39namespace internal {
\n+
40template<typename T> class ExecutionTrace;
\n+
41template<typename T> class ExpressionNode;
\n+
42}
\n
43
\n-
44protected:
\n-
45
\n-
46 // Some handy typedefs
\n-
47 typedef Factor Base;
\n-
48 typedef NonlinearFactor This;
\n+
47template<typename T>
\n+
\n+\n
49
\n
50public:
\n
51
\n-
52 typedef boost::shared_ptr<This> shared_ptr;
\n-
53
\n+\n+
54
\n+
55protected:
\n
56
\n-\n+
57 // Paul's trick shared pointer, polymorphic root of entire expression tree
\n+
58 boost::shared_ptr<internal::ExpressionNode<T> > root_;
\n
59
\n-
63 template<typename CONTAINER>
\n-
\n-
64 NonlinearFactor(const CONTAINER& keys) :
\n-
65 Base(keys) {}
\n-
\n-
66
\n-
70
\n-
72 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
73 DefaultKeyFormatter) const override;
\n+
61 Expression(const boost::shared_ptr<internal::ExpressionNode<T> >& root) : root_(root) {}
\n+
62
\n+
63public:
\n+
64
\n+
65 // Expressions wrap trees of functions that can evaluate their own derivatives.
\n+
66 // The meta-functions below are useful to specify the type of those functions.
\n+
67 // Example, a function taking a camera and a 3D point and yielding a 2D point:
\n+
68 // Expression<Point2>::BinaryFunction<PinholeCamera<Cal3_S2>,Point3>::type
\n+
69 template<class A1>
\n+
\n+\n+
71 typedef std::function<
\n+
72 T(const A1&, typename MakeOptionalJacobian<T, A1>::type)> type;
\n+
73 };
\n+
\n
74
\n-
76 virtual bool equals(const NonlinearFactor& f, double tol = 1e-9) const;
\n-
77
\n+
75 template<class A1, class A2>
\n+
\n+\n+
77 typedef std::function<
\n+
78 T(const A1&, const A2&, typename MakeOptionalJacobian<T, A1>::type,
\n+
79 typename MakeOptionalJacobian<T, A2>::type)> type;
\n+
80 };
\n+
\n
81
\n-
83 virtual ~NonlinearFactor() {}
\n-
84
\n-
97 virtual double error(const Values& c) const;
\n-
98
\n-
103 double error(const HybridValues& c) const override;
\n-
104
\n-
106 virtual size_t dim() const = 0;
\n+
82 template<class A1, class A2, class A3>
\n+
\n+\n+
84 typedef std::function<
\n+
85 T(const A1&, const A2&, const A3&,
\n+
86 typename MakeOptionalJacobian<T, A1>::type,
\n+
87 typename MakeOptionalJacobian<T, A2>::type,
\n+
88 typename MakeOptionalJacobian<T, A3>::type)> type;
\n+
89 };
\n+
\n+
90
\n+
92 Expression(const T& value);
\n+
93
\n+
95 Expression(const Key& key);
\n+
96
\n+
98 Expression(const Symbol& symbol);
\n+
99
\n+
101 Expression(unsigned char c, std::uint64_t j);
\n+
102
\n+
104 template<typename A>
\n+
105 Expression(typename UnaryFunction<A>::type function,
\n+
106 const Expression<A>& expression);
\n
107
\n-
118 virtual bool active(const Values& /*c*/) const { return true; }
\n-
119
\n-
121 virtual boost::shared_ptr<GaussianFactor>
\n-
122 linearize(const Values& c) const = 0;
\n+
109 template<typename A1, typename A2>
\n+
110 Expression(typename BinaryFunction<A1, A2>::type function,
\n+
111 const Expression<A1>& expression1, const Expression<A2>& expression2);
\n+
112
\n+
114 template<typename A1, typename A2, typename A3>
\n+
115 Expression(typename TernaryFunction<A1, A2, A3>::type function,
\n+
116 const Expression<A1>& expression1, const Expression<A2>& expression2,
\n+
117 const Expression<A3>& expression3);
\n+
118
\n+
120 template<typename A>
\n+
121 Expression(const Expression<A>& expression,
\n+
122 T (A::*method)(typename MakeOptionalJacobian<T, A>::type) const);
\n
123
\n-
\n-
130 virtual shared_ptr clone() const {
\n-
131 // TODO: choose better exception to throw here
\n-
132 throw std::runtime_error("NonlinearFactor::clone(): Attempting to clone factor with no clone() implemented!");
\n-
133 return shared_ptr();
\n-
134 }
\n-
\n-
135
\n-
141 virtual shared_ptr rekey(const std::map<Key,Key>& rekey_mapping) const;
\n-
142
\n-
147 virtual shared_ptr rekey(const KeyVector& new_keys) const;
\n-
148
\n-
\n-
153 virtual bool sendable() const {
\n-
154 return true;
\n-
155 }
\n-
\n-
156
\n-
157}; // \\class NonlinearFactor
\n-
\n-
158
\n-
\n-
160template<> struct traits<NonlinearFactor> : public Testable<NonlinearFactor> {
\n-
161};
\n-
\n-
162
\n-
163/* ************************************************************************* */
\n-
\n-
174class GTSAM_EXPORT NoiseModelFactor: public NonlinearFactor {
\n+
125 template<typename A1, typename A2>
\n+
126 Expression(const Expression<A1>& expression1,
\n+
127 T (A1::*method)(const A2&, typename MakeOptionalJacobian<T, A1>::type,
\n+
128 typename MakeOptionalJacobian<T, A2>::type) const,
\n+
129 const Expression<A2>& expression2);
\n+
130
\n+
132 template<typename A1, typename A2, typename A3>
\n+
133 Expression(const Expression<A1>& expression1,
\n+
134 T (A1::*method)(const A2&, const A3&,
\n+
135 typename MakeOptionalJacobian<T, A1>::type,
\n+
136 typename MakeOptionalJacobian<T, A2>::type,
\n+
137 typename MakeOptionalJacobian<T, A3>::type) const,
\n+
138 const Expression<A2>& expression2, const Expression<A3>& expression3);
\n+
139
\n+
\n+
141 virtual ~Expression() {
\n+
142 }
\n+
\n+
143
\n+
145 std::set<Key> keys() const;
\n+
146
\n+
148 void dims(std::map<Key, int>& map) const;
\n+
149
\n+
151 void print(const std::string& s) const;
\n+
152
\n+
158 T value(const Values& values, boost::optional<std::vector<Matrix>&> H =
\n+
159 boost::none) const;
\n+
160
\n+
\n+
166 virtual boost::shared_ptr<Expression> clone() const {
\n+
167 return boost::make_shared<Expression>(*this);
\n+
168 }
\n+
\n+
169
\n+
171 const boost::shared_ptr<internal::ExpressionNode<T> >& root() const;
\n+
172
\n+
174 size_t traceSize() const;
\n
175
\n-
176protected:
\n-
177
\n-
178 // handy typedefs
\n-
179 typedef NonlinearFactor Base;
\n-
180 typedef NoiseModelFactor This;
\n-
181
\n-
182 SharedNoiseModel noiseModel_;
\n-
184public:
\n-
185
\n-
186 typedef boost::shared_ptr<This> shared_ptr;
\n+\n+
178
\n+
179protected:
\n+
180
\n+\n+
183
\n+
185 typedef std::pair<KeyVector, FastVector<int> > KeysAndDims;
\n+
186 KeysAndDims keysAndDims() const;
\n
187
\n-\n-
190
\n-
192 ~NoiseModelFactor() override {}
\n-
193
\n-
197 template<typename CONTAINER>
\n-
\n-
198 NoiseModelFactor(const SharedNoiseModel& noiseModel, const CONTAINER& keys) :
\n-
199 Base(keys), noiseModel_(noiseModel) {}
\n-
\n-
200
\n-
201protected:
\n-
202
\n-
206 NoiseModelFactor(const SharedNoiseModel& noiseModel) : noiseModel_(noiseModel) {}
\n+
189 T valueAndDerivatives(const Values& values, const KeyVector& keys,
\n+
190 const FastVector<int>& dims, std::vector<Matrix>& H) const;
\n+
191
\n+
193 T traceExecution(const Values& values, internal::ExecutionTrace<T>& trace,
\n+
194 void* traceStorage) const;
\n+
195
\n+
197 T valueAndJacobianMap(const Values& values,
\n+
198 internal::JacobianMap& jacobians) const;
\n+
199
\n+
200 // be very selective on who can access these private methods:
\n+
201 friend class ExpressionFactor<T> ;
\n+
202 friend class internal::ExpressionNode<T>;
\n+
203
\n+
204 // and add tests
\n+
205 friend class ::ExpressionFactorShallowTest;
\n+
206};
\n+
\n
207
\n-
208public:
\n-
209
\n-
211 void print(const std::string& s = "",
\n-
212 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n-
213
\n-
215 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override;
\n+
212template <typename T>
\n+
\n+\n+
214 // Check that T is a vector space
\n+
215 BOOST_CONCEPT_ASSERT((gtsam::IsVectorSpace<T>));
\n
216
\n-
\n-
218 size_t dim() const override {
\n-
219 return noiseModel_->dim();
\n-
220 }
\n-
\n-
221
\n-
\n-\n-
224 return noiseModel_;
\n-
225 }
\n-
\n-
226
\n-
233 virtual Vector unwhitenedError(const Values& x,
\n-
234 boost::optional<std::vector<Matrix>&> H = boost::none) const = 0;
\n-
235
\n-
240 Vector whitenedError(const Values& c) const;
\n-
241
\n-
245 Vector unweightedWhitenedError(const Values& c) const;
\n-
246
\n-
250 double weight(const Values& c) const;
\n-
251
\n-
258 double error(const Values& c) const override;
\n-
259
\n-
265 boost::shared_ptr<GaussianFactor> linearize(const Values& x) const override;
\n-
266
\n-
271 shared_ptr cloneWithNewNoiseModel(const SharedNoiseModel newNoise) const;
\n-
272
\n-
273 private:
\n-
275 friend class boost::serialization::access;
\n-
276 template<class ARCHIVE>
\n-
277 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
278 ar & boost::serialization::make_nvp("NonlinearFactor",
\n-
279 boost::serialization::base_object<Base>(*this));
\n-
280 ar & BOOST_SERIALIZATION_NVP(noiseModel_);
\n-
281 }
\n-
282
\n-
283}; // \\class NoiseModelFactor
\n+
217 public:
\n+
218 explicit ScalarMultiplyExpression(double s, const Expression<T>& e);
\n+
219};
\n+
\n+
220
\n+
225template <typename T>
\n+
\n+\n+
227 // Check that T is a vector space
\n+
228 BOOST_CONCEPT_ASSERT((gtsam::IsVectorSpace<T>));
\n+
229
\n+
230 public:
\n+
231 explicit BinarySumExpression(const Expression<T>& e1, const Expression<T>& e2);
\n+
232};
\n+
\n+
233
\n+
234
\n+
240template <typename T, typename A>
\n+
\n+\n+
242 const std::function<T(A)>& f, const Expression<A>& expression,
\n+
243 const Eigen::Matrix<double, traits<T>::dimension, traits<A>::dimension>& dTdA) {
\n+
244 // Use lambda to endow f with a linear Jacobian
\n+
245 typename Expression<T>::template UnaryFunction<A>::type g =
\n+
246 [=](const A& value, typename MakeOptionalJacobian<T, A>::type H) {
\n+
247 if (H)
\n+
248 *H << dTdA;
\n+
249 return f(value);
\n+
250 };
\n+
251 return Expression<T>(g, expression);
\n+
252}
\n+
\n+
253
\n+
260template <typename T>
\n+
\n+\n+
262 return ScalarMultiplyExpression<T>(s, e);
\n+
263}
\n+
\n+
264
\n+
271template <typename T>
\n+
\n+\n+
273 return BinarySumExpression<T>(e1, e2);
\n+
274}
\n+
\n+
275
\n+
277template <typename T>
\n+
\n+\n+
279 // TODO(frank, abe): Implement an actual negate operator instead of multiplying by -1
\n+
280 return e1 + (-1.0) * e2;
\n+
281}
\n
\n-
284
\n-
285/* ************************************************************************* */
\n-
286namespace detail {
\n-
299template <typename, typename...>
\n-
300struct NoiseModelFactorAliases {};
\n-
301template <typename T1>
\n-
302struct NoiseModelFactorAliases<T1> {
\n-
303 using X = T1;
\n-
304 using X1 = T1;
\n-
305};
\n-
306template <typename T1, typename T2>
\n-
307struct NoiseModelFactorAliases<T1, T2> {
\n-
308 using X1 = T1;
\n-
309 using X2 = T2;
\n-
310};
\n-
311template <typename T1, typename T2, typename T3>
\n-
312struct NoiseModelFactorAliases<T1, T2, T3> {
\n-
313 using X1 = T1;
\n-
314 using X2 = T2;
\n-
315 using X3 = T3;
\n-
316};
\n-
317template <typename T1, typename T2, typename T3, typename T4>
\n-
318struct NoiseModelFactorAliases<T1, T2, T3, T4> {
\n-
319 using X1 = T1;
\n-
320 using X2 = T2;
\n-
321 using X3 = T3;
\n-
322 using X4 = T4;
\n-
323};
\n-
324template <typename T1, typename T2, typename T3, typename T4, typename T5>
\n-
325struct NoiseModelFactorAliases<T1, T2, T3, T4, T5> {
\n-
326 using X1 = T1;
\n-
327 using X2 = T2;
\n-
328 using X3 = T3;
\n-
329 using X4 = T4;
\n-
330 using X5 = T5;
\n-
331};
\n-
332template <typename T1, typename T2, typename T3, typename T4, typename T5,
\n-
333 typename T6, typename... TExtra>
\n-
334struct NoiseModelFactorAliases<T1, T2, T3, T4, T5, T6, TExtra...> {
\n-
335 using X1 = T1;
\n-
336 using X2 = T2;
\n-
337 using X3 = T3;
\n-
338 using X4 = T4;
\n-
339 using X5 = T5;
\n-
340 using X6 = T6;
\n-
341};
\n-
342} // namespace detail
\n-
343
\n-
344/* ************************************************************************* */
\n-
397template <class... ValueTypes>
\n-
\n-\n-
399 : public NoiseModelFactor,
\n-
400 public detail::NoiseModelFactorAliases<ValueTypes...> {
\n-
401 public:
\n-
403 enum { N = sizeof...(ValueTypes) };
\n-
404
\n-
405 protected:
\n-
406 using Base = NoiseModelFactor;
\n-
407 using This = NoiseModelFactorN<ValueTypes...>;
\n-
408
\n-
411
\n-
412 template <typename From, typename To>
\n-
413 using IsConvertible =
\n-
414 typename std::enable_if<std::is_convertible<From, To>::value, void>::type;
\n-
415
\n-
416 template <int I>
\n-
417 using IndexIsValid = typename std::enable_if<(I >= 1) && (I <= N),
\n-
418 void>::type; // 1-indexed!
\n-
419
\n-
420 template <typename Container>
\n-
421 using ContainerElementType =
\n-
422 typename std::decay<decltype(*std::declval<Container>().begin())>::type;
\n-
423 template <typename Container>
\n-
424 using IsContainerOfKeys = IsConvertible<ContainerElementType<Container>, Key>;
\n-
425
\n-
427
\n-
428 /* Like std::void_t, except produces `boost::optional<Matrix&>` instead of
\n-
429 * `void`. Used to expand fixed-type parameter-packs with same length as
\n-
430 * ValueTypes. */
\n-
431 template <typename T>
\n-
432 using OptionalMatrix = boost::optional<Matrix&>;
\n-
433
\n-
434 /* Like std::void_t, except produces `Key` instead of `void`. Used to expand
\n-
435 * fixed-type parameter-packs with same length as ValueTypes. */
\n-
436 template <typename T>
\n-
437 using KeyType = Key;
\n-
438
\n-
439 public:
\n-
459 template <int I, typename = IndexIsValid<I>>
\n-
460 using ValueType =
\n-
461 typename std::tuple_element<I - 1, std::tuple<ValueTypes...>>::type;
\n-
462
\n-
463 public:
\n-
464
\n-
467
\n-\n-
470
\n-
\n-\n-
479 KeyType<ValueTypes>... keys)
\n-
480 : Base(noiseModel, std::array<Key, N>{keys...}) {}
\n-
\n-
481
\n-
489 template <typename CONTAINER = std::initializer_list<Key>,
\n-
490 typename = IsContainerOfKeys<CONTAINER>>
\n-
\n-\n-
492 : Base(noiseModel, keys) {
\n-
493 if (keys.size() != N) {
\n-
494 throw std::invalid_argument(
\n-
495 "NoiseModelFactorN: wrong number of keys given");
\n-
496 }
\n-
497 }
\n-
\n-
498
\n-
500
\n-
501 ~NoiseModelFactorN() override {}
\n-
502
\n-
517 template <int I = 1>
\n-
\n-
518 inline Key key() const {
\n-
519 static_assert(I <= N, "Index out of bounds");
\n-
520 return keys_[I - 1];
\n-
521 }
\n-
\n-
522
\n-
525
\n-
\n-\n-
543 const Values& x,
\n-
544 boost::optional<std::vector<Matrix>&> H = boost::none) const override {
\n-
545 return unwhitenedError(boost::mp11::index_sequence_for<ValueTypes...>{}, x,
\n-
546 H);
\n-
547 }
\n-
\n-
548
\n-
552
\n-
575 virtual Vector evaluateError(const ValueTypes&... x,
\n-
576 OptionalMatrix<ValueTypes>... H) const = 0;
\n-
577
\n-
579
\n-
582
\n-
\n-
589 inline Vector evaluateError(const ValueTypes&... x) const {
\n-
590 return evaluateError(x..., OptionalMatrix<ValueTypes>()...);
\n-
591 }
\n-
\n-
592
\n-
597 template <typename... OptionalJacArgs,
\n-
598 typename = IndexIsValid<sizeof...(OptionalJacArgs) + 1>>
\n-
\n-
599 inline Vector evaluateError(const ValueTypes&... x,
\n-
600 OptionalJacArgs&&... H) const {
\n-
601 return evaluateError(x..., std::forward<OptionalJacArgs>(H)...,
\n-
602 boost::none);
\n-
603 }
\n-
\n-
604
\n-
606
\n-
607 private:
\n-
614 template <std::size_t... Indices>
\n-
615 inline Vector unwhitenedError(
\n-
616 boost::mp11::index_sequence<Indices...>, //
\n-
617 const Values& x,
\n-
618 boost::optional<std::vector<Matrix>&> H = boost::none) const {
\n-
619 if (this->active(x)) {
\n-
620 if (H) {
\n-
621 return evaluateError(x.at<ValueTypes>(keys_[Indices])...,
\n-
622 (*H)[Indices]...);
\n-
623 } else {
\n-
624 return evaluateError(x.at<ValueTypes>(keys_[Indices])...);
\n-
625 }
\n-
626 } else {
\n-
627 return Vector::Zero(this->dim());
\n-
628 }
\n-
629 }
\n-
630
\n-\n-
633 template <class ARCHIVE>
\n-
634 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
635 ar& boost::serialization::make_nvp(
\n-
636 "NoiseModelFactor", boost::serialization::base_object<Base>(*this));
\n-
637 }
\n-
638
\n-
639 public:
\n-
642
\n-
643 inline Key key1() const {
\n-
644 return key<1>();
\n-
645 }
\n-
646 template <int I = 2>
\n-
647 inline Key key2() const {
\n-
648 static_assert(I <= N, "Index out of bounds");
\n-
649 return key<2>();
\n-
650 }
\n-
651 template <int I = 3>
\n-
652 inline Key key3() const {
\n-
653 static_assert(I <= N, "Index out of bounds");
\n-
654 return key<3>();
\n-
655 }
\n-
656 template <int I = 4>
\n-
657 inline Key key4() const {
\n-
658 static_assert(I <= N, "Index out of bounds");
\n-
659 return key<4>();
\n-
660 }
\n-
661 template <int I = 5>
\n-
662 inline Key key5() const {
\n-
663 static_assert(I <= N, "Index out of bounds");
\n-
664 return key<5>();
\n-
665 }
\n-
666 template <int I = 6>
\n-
667 inline Key key6() const {
\n-
668 static_assert(I <= N, "Index out of bounds");
\n-
669 return key<6>();
\n-
670 }
\n-
671
\n-
673
\n-
674}; // \\class NoiseModelFactorN
\n-
\n-
675
\n-
676#define NoiseModelFactor1 NoiseModelFactorN
\n-
677#define NoiseModelFactor2 NoiseModelFactorN
\n-
678#define NoiseModelFactor3 NoiseModelFactorN
\n-
679#define NoiseModelFactor4 NoiseModelFactorN
\n-
680#define NoiseModelFactor5 NoiseModelFactorN
\n-
681#define NoiseModelFactor6 NoiseModelFactorN
\n-
682
\n-
683} // namespace gtsam
\n-
Special class for optional Jacobian arguments.
\n-
The base class for all factors.
\n-\n-\n-
A non-templated config holding any types of Manifold-group elements.
\n+
282
\n+
288template<typename T>
\n+
289Expression<T> operator*(const Expression<T>& e1, const Expression<T>& e2);
\n+
290
\n+
296template<typename T>
\n+
297std::vector<Expression<T> > createUnknowns(size_t n, char c, size_t start = 0);
\n+
298
\n+
299} // namespace gtsam
\n+
300
\n+\n+
302
\n+
Special class for optional Jacobian arguments.
\n+
Internals for Expression.h, not for general consumption.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
Key symbol(unsigned char c, std::uint64_t j)
Create a symbol key from a character and index, i.e.
Definition Symbol.h:135
\n+
std::vector< Expression< T > > createUnknowns(size_t n, char c, size_t start)
Construct an array of leaves.
Definition Expression-inl.h:284
\n+
Errors operator+(const Errors &a, const Errors &b)
Addition.
Definition Errors.cpp:60
\n+
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n+
Expression< T > linearExpression(const std::function< T(A)> &f, const Expression< A > &expression, const Eigen::Matrix< double, traits< T >::dimension, traits< A >::dimension > &dTdA)
Create an expression out of a linear function f:T->A with (constant) Jacobian dTdA TODO(frank): creat...
Definition Expression.h:241
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
Errors operator-(const Errors &a, const Errors &b)
Subtraction.
Definition Errors.cpp:75
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Factor.h:68
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
const_iterator begin() const
Iterator at beginning of involved variable keys.
Definition Factor.h:143
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
virtual boost::shared_ptr< GaussianFactor > linearize(const Values &c) const =0
linearize to a GaussianFactor
\n-
virtual size_t dim() const =0
get the dimension of the factor (number of rows on linearization)
\n-
NonlinearFactor()
Default constructor for I/O only.
Definition NonlinearFactor.h:58
\n-
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n-
NonlinearFactor(const CONTAINER &keys)
Constructor from a collection of the keys involved in this factor.
Definition NonlinearFactor.h:64
\n-
virtual bool sendable() const
Should the factor be evaluated in the same thread as the caller This is to enable factors that has sh...
Definition NonlinearFactor.h:153
\n-
virtual shared_ptr clone() const
Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
Definition NonlinearFactor.h:130
\n-
virtual ~NonlinearFactor()
Destructor.
Definition NonlinearFactor.h:83
\n-
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n-
NoiseModelFactor(const SharedNoiseModel &noiseModel, const CONTAINER &keys)
Constructor.
Definition NonlinearFactor.h:198
\n-
~NoiseModelFactor() override
Destructor.
Definition NonlinearFactor.h:192
\n-
NoiseModelFactor(const SharedNoiseModel &noiseModel)
Constructor - only for subclasses, as this does not set keys.
Definition NonlinearFactor.h:206
\n-
boost::shared_ptr< This > shared_ptr
Noise model.
Definition NonlinearFactor.h:186
\n-
size_t dim() const override
get the dimension of the factor (number of rows on linearization)
Definition NonlinearFactor.h:218
\n-
NoiseModelFactor()
Default constructor for I/O only.
Definition NonlinearFactor.h:189
\n-
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n-
virtual Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix > & > H=boost::none) const =0
Error function without the NoiseModel, .
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Vector evaluateError(const ValueTypes &... x) const
No-Jacobians requested function overload.
Definition NonlinearFactor.h:589
\n-
NoiseModelFactorN(const SharedNoiseModel &noiseModel, CONTAINER keys)
Constructor.
Definition NonlinearFactor.h:491
\n-
NoiseModelFactorN(const SharedNoiseModel &noiseModel, KeyType< ValueTypes >... keys)
Constructor.
Definition NonlinearFactor.h:478
\n-
Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix > & > H=boost::none) const override
This implements the unwhitenedError virtual function by calling the n-key specific version of evaluat...
Definition NonlinearFactor.h:542
\n-
NoiseModelFactorN()
Default Constructor for I/O.
Definition NonlinearFactor.h:469
\n-
virtual Vector evaluateError(const ValueTypes &... x, OptionalMatrix< ValueTypes >... H) const =0
Override evaluateError to finish implementing an n-way factor.
\n-
typename std::tuple_element< I - 1, std::tuple< ValueTypes... > >::type ValueType
The type of the I'th template param can be obtained as ValueType.
Definition NonlinearFactor.h:461
\n-
friend class boost::serialization::access
Serialization function.
Definition NonlinearFactor.h:632
\n-
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n-
Vector evaluateError(const ValueTypes &... x, OptionalJacArgs &&... H) const
Some (but not all) optional Jacobians are omitted (function overload)
Definition NonlinearFactor.h:599
\n+
: meta-function to generate JacobianTA optional reference Used mainly by Expressions
Definition OptionalJacobian.h:261
\n+
Vector Space concept.
Definition VectorSpace.h:470
\n+
Character and index key used to refer to variables.
Definition Symbol.h:35
\n+
Factor that supports arbitrary expressions via AD.
Definition ExpressionFactor.h:44
\n+
Definition Expression.h:40
\n+
Definition Expression.h:41
\n+
Expression class that supports automatic differentiation.
Definition Expression.h:48
\n+
const boost::shared_ptr< internal::ExpressionNode< T > > & root() const
Return root.
Definition Expression-inl.h:162
\n+
Expression< T > type
Define type so we can apply it as a meta-function.
Definition Expression.h:53
\n+
Expression()
Default constructor, for serialization.
Definition Expression.h:182
\n+
virtual ~Expression()
Destructor.
Definition Expression.h:141
\n+
virtual boost::shared_ptr< Expression > clone() const
Definition Expression.h:166
\n+
Expression(const boost::shared_ptr< internal::ExpressionNode< T > > &root)
Construct with a custom root.
Definition Expression.h:61
\n+
std::set< Key > keys() const
Return keys that play in this expression.
Definition Expression-inl.h:132
\n+
std::pair< KeyVector, FastVector< int > > KeysAndDims
Keys and dimensions in same order.
Definition Expression.h:185
\n+
void dims(std::map< Key, int > &map) const
Return dimensions for each argument, as a map.
Definition Expression-inl.h:137
\n+
void print(const std::string &s) const
Print.
Definition Expression-inl.h:142
\n+
T valueAndJacobianMap(const Values &values, internal::JacobianMap &jacobians) const
brief Return value and derivatives, reverse AD version
Definition Expression-inl.h:205
\n+
T valueAndDerivatives(const Values &values, const KeyVector &keys, const FastVector< int > &dims, std::vector< Matrix > &H) const
private version that takes keys and dimensions, returns derivatives
Definition Expression-inl.h:174
\n+
T value(const Values &values, boost::optional< std::vector< Matrix > & > H=boost::none) const
Return value and optional derivatives, reverse AD version Notes: this is not terribly efficient,...
Definition Expression-inl.h:147
\n+
Expression< T > & operator+=(const Expression< T > &e)
Add another expression to this expression.
Definition Expression-inl.h:302
\n+
size_t traceSize() const
Return size needed for memory buffer in traceExecution.
Definition Expression-inl.h:167
\n+
T traceExecution(const Values &values, internal::ExecutionTrace< T > &trace, void *traceStorage) const
trace execution, very unsafe
Definition Expression-inl.h:198
\n+
Definition Expression.h:70
\n+
Definition Expression.h:76
\n+
Definition Expression.h:83
\n+
A ScalarMultiplyExpression is a specialization of Expression that multiplies with a scalar It optimiz...
Definition Expression.h:213
\n+
A BinarySumExpression is a specialization of Expression that adds two expressions together It optimiz...
Definition Expression.h:226
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,574 +1,404 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearFactor.h\n+Expression.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20// \\callgraph\n+20#pragma once\n 21\n-22#pragma once\n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n-29#include // boost::index_sequence\n-30\n-31#include \n+22#include \n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n+25#include \n+26\n+27#include \n+28#include \n+29\n+30// Forward declare tests\n+31class ExpressionFactorShallowTest;\n 32\n 33namespace _\bg_\bt_\bs_\ba_\bm {\n 34\n-35/* *************************************************************************\n-*/\n-36\n-_\b4_\b2class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br: public _\bF_\ba_\bc_\bt_\bo_\br {\n+35// Forward declares\n+36class _\bV_\ba_\bl_\bu_\be_\bs;\n+37template class ExpressionFactor;\n+38\n+39namespace internal {\n+_\b4_\b0template class _\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bc_\be;\n+_\b4_\b1template class _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bN_\bo_\bd_\be;\n+42}\n 43\n-44protected:\n-45\n-46 // Some handy typedefs\n-47 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-48 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+47template\n+_\b4_\b8class _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn {\n 49\n 50public:\n 51\n-52 typedef boost::shared_ptr shared_ptr;\n-53\n+_\b5_\b3 typedef _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\bt_\by_\bp_\be;\n+54\n+55protected:\n 56\n-_\b5_\b8 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br() {}\n+57 // Paul's trick shared pointer, polymorphic root of entire expression tree\n+58 boost::shared_ptr > root_;\n 59\n-63 template\n-_\b6_\b4 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER& keys) :\n-65 _\bB_\ba_\bs_\be(keys) {}\n-66\n-70\n-72 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-73 DefaultKeyFormatter) const override;\n+_\b6_\b1 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const boost::shared_ptr<_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bN_\bo_\bd_\be_\b<_\bT_\b> >& _\br_\bo_\bo_\bt) :\n+root_(_\br_\bo_\bo_\bt) {}\n+62\n+63public:\n+64\n+65 // Expressions wrap trees of functions that can evaluate their own\n+derivatives.\n+66 // The meta-functions below are useful to specify the type of those\n+functions.\n+67 // Example, a function taking a camera and a 3D point and yielding a 2D\n+point:\n+68 // Expression::BinaryFunction,Point3>::type\n+69 template\n+_\b7_\b0 struct _\bU_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn {\n+71 typedef std::function<\n+72 T(const A1&, typename MakeOptionalJacobian::type)> type;\n+73 };\n 74\n-76 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& f, double tol = 1e-9) const;\n-77\n+75 template\n+_\b7_\b6 struct _\bB_\bi_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn {\n+77 typedef std::function<\n+78 T(const A1&, const A2&, typename MakeOptionalJacobian::type,\n+79 typename MakeOptionalJacobian::type)> type;\n+80 };\n 81\n-_\b8_\b3 virtual _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br() {}\n-84\n-97 virtual double error(const _\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-98\n-103 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n-104\n-_\b1_\b0_\b6 virtual size_t _\bd_\bi_\bm() const = 0;\n+82 template\n+_\b8_\b3 struct _\bT_\be_\br_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn {\n+84 typedef std::function<\n+85 T(const A1&, const A2&, const A3&,\n+86 typename MakeOptionalJacobian::type,\n+87 typename MakeOptionalJacobian::type,\n+88 typename MakeOptionalJacobian::type)> type;\n+89 };\n+90\n+92 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const T& _\bv_\ba_\bl_\bu_\be);\n+93\n+95 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bK_\be_\by& key);\n+96\n+98 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bS_\by_\bm_\bb_\bo_\bl& _\bs_\by_\bm_\bb_\bo_\bl);\n+99\n+101 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(unsigned char c, std::uint64_t j);\n+102\n+104 template\n+105 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(typename UnaryFunction::type function,\n+106 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b>& expression);\n 107\n-_\b1_\b1_\b8 virtual bool _\ba_\bc_\bt_\bi_\bv_\be(const _\bV_\ba_\bl_\bu_\be_\bs& /*c*/) const { return true; }\n-119\n-121 virtual boost::shared_ptr\n-_\b1_\b2_\b2 _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& c) const = 0;\n+109 template\n+110 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(typename BinaryFunction::type function,\n+111 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b1_\b>& expression1, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b2_\b>& expression2);\n+112\n+114 template\n+115 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(typename TernaryFunction::type function,\n+116 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b1_\b>& expression1, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b2_\b>& expression2,\n+117 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b3_\b>& expression3);\n+118\n+120 template\n+121 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b>& expression,\n+122 T (A::*method)(typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be) const);\n 123\n-_\b1_\b3_\b0 virtual shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n-131 // TODO: choose better exception to throw here\n-132 throw std::runtime_error(\"NonlinearFactor::clone(): Attempting to clone\n-factor with no clone() implemented!\");\n-133 return shared_ptr();\n-134 }\n-135\n-141 virtual shared_ptr rekey(const std::map& rekey_mapping) const;\n-142\n-147 virtual shared_ptr rekey(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& new_keys) const;\n-148\n-_\b1_\b5_\b3 virtual bool _\bs_\be_\bn_\bd_\ba_\bb_\bl_\be() const {\n-154 return true;\n-155 }\n-156\n-157}; // \\class NonlinearFactor\n-158\n-_\b1_\b6_\b0template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-{\n-161};\n-162\n-163/* *************************************************************************\n-*/\n-_\b1_\b7_\b4class GTSAM_EXPORT _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n+125 template\n+126 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b1_\b>& expression1,\n+127 T (A1::*method)(const A2&, typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be,\n+128 typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be) const,\n+129 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn& expression2);\n+130\n+132 template\n+133 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b1_\b>& expression1,\n+134 T (A1::*method)(const A2&, const A3&,\n+135 typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be,\n+136 typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be,\n+137 typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be) const,\n+138 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn& expression2, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn& expression3);\n+139\n+_\b1_\b4_\b1 virtual _\b~_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn() {\n+142 }\n+143\n+145 std::set _\bk_\be_\by_\bs() const;\n+146\n+148 void _\bd_\bi_\bm_\bs(std::map& map) const;\n+149\n+151 void _\bp_\br_\bi_\bn_\bt(const std::string& s) const;\n+152\n+158 T _\bv_\ba_\bl_\bu_\be(const _\bV_\ba_\bl_\bu_\be_\bs& values, boost::optional&> H =\n+159 boost::none) const;\n+160\n+_\b1_\b6_\b6 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n+167 return boost::make_shared(*this);\n+168 }\n+169\n+171 const boost::shared_ptr >& _\br_\bo_\bo_\bt() const;\n+172\n+174 size_t _\bt_\br_\ba_\bc_\be_\bS_\bi_\bz_\be() const;\n 175\n-176protected:\n-177\n-178 // handy typedefs\n-179 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-180 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-181\n-182 _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl noiseModel_;\n-184public:\n-185\n-_\b1_\b8_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+177 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& e);\n+178\n+179protected:\n+180\n+_\b1_\b8_\b2 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn() {}\n+183\n+_\b1_\b8_\b5 typedef std::pair > _\bK_\be_\by_\bs_\bA_\bn_\bd_\bD_\bi_\bm_\bs;\n+186 _\bK_\be_\by_\bs_\bA_\bn_\bd_\bD_\bi_\bm_\bs keysAndDims() const;\n 187\n-_\b1_\b8_\b9 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br() {}\n-190\n-_\b1_\b9_\b2 _\b~_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-193\n-197 template\n-_\b1_\b9_\b8 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& noiseModel, const CONTAINER& keys)\n-:\n-199 _\bB_\ba_\bs_\be(keys), noiseModel_(noiseModel) {}\n-200\n-201protected:\n-202\n-_\b2_\b0_\b6 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& noiseModel) : noiseModel_\n-(noiseModel) {}\n+189 T _\bv_\ba_\bl_\bu_\be_\bA_\bn_\bd_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n+190 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bi_\bn_\bt_\b>& _\bd_\bi_\bm_\bs, std::vector& H) const;\n+191\n+193 T _\bt_\br_\ba_\bc_\be_\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn(const _\bV_\ba_\bl_\bu_\be_\bs& values, _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bc_\be_\b<_\bT_\b>& trace,\n+194 void* traceStorage) const;\n+195\n+197 T _\bv_\ba_\bl_\bu_\be_\bA_\bn_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bM_\ba_\bp(const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+198 internal::JacobianMap& jacobians) const;\n+199\n+200 // be very selective on who can access these private methods:\n+201 friend class _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br ;\n+202 friend class _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bN_\bo_\bd_\be;\n+203\n+204 // and add tests\n+205 friend class ::ExpressionFactorShallowTest;\n+206};\n 207\n-208public:\n-209\n-211 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-212 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n-213\n-215 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& f, double tol = 1e-9) const override;\n+212template \n+_\b2_\b1_\b3class _\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn : public _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn {\n+214 // Check that T is a vector space\n+215 BOOST_CONCEPT_ASSERT((_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\b<_\bT_\b>));\n 216\n-_\b2_\b1_\b8 size_t _\bd_\bi_\bm() const override {\n-219 return noiseModel_->dim();\n-220 }\n-221\n-_\b2_\b2_\b3 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl() const {\n-224 return noiseModel_;\n-225 }\n-226\n-_\b2_\b3_\b3 virtual Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& x,\n-234 boost::optional&> H = boost::none) const = 0;\n-235\n-240 Vector whitenedError(const _\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-241\n-245 Vector unweightedWhitenedError(const _\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-246\n-250 double weight(const _\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-251\n-258 double error(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n-259\n-265 boost::shared_ptr linearize(const _\bV_\ba_\bl_\bu_\be_\bs& x) const\n-override;\n-266\n-271 _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br cloneWithNewNoiseModel(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl newNoise) const;\n-272\n-273 private:\n-_\b2_\b7_\b5 friend class boost::serialization::access;\n-276 template\n-277 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-278 ar & boost::serialization::make_nvp(\"NonlinearFactor\",\n-279 boost::serialization::base_object(*this));\n-280 ar & BOOST_SERIALIZATION_NVP(noiseModel_);\n-281 }\n+217 public:\n+218 explicit _\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(double s, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& e);\n+219};\n+220\n+225template \n+_\b2_\b2_\b6class _\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn : public _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn {\n+227 // Check that T is a vector space\n+228 BOOST_CONCEPT_ASSERT((_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be_\b<_\bT_\b>));\n+229\n+230 public:\n+231 explicit _\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& e1, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>&\n+e2);\n+232};\n+233\n+234\n+240template \n+_\b2_\b4_\b1_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(\n+242 const std::function& f, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b>& expression,\n+243 const Eigen::Matrix_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>&\n+dTdA) {\n+244 // Use lambda to endow f with a linear Jacobian\n+245 typename _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bt_\be_\bm_\bp_\bl_\ba_\bt_\be UnaryFunction::type g =\n+246 [=](const A& value, typename MakeOptionalJacobian::type H) {\n+247 if (H)\n+248 *H << dTdA;\n+249 return f(value);\n+250 };\n+251 return _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>(g, expression);\n+252}\n+253\n+260template \n+_\b2_\b6_\b1_\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(double s, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& e) {\n+262 return _\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>(s, e);\n+263}\n+264\n+271template \n+_\b2_\b7_\b2_\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& e1, const\n+_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& e2) {\n+273 return _\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>(e1, e2);\n+274}\n+275\n+277template \n+_\b2_\b7_\b8_\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& e1, const\n+_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& e2) {\n+279 // TODO(frank, abe): Implement an actual negate operator instead of\n+multiplying by -1\n+280 return e1 + (-1.0) * e2;\n+281}\n 282\n-283}; // \\class NoiseModelFactor\n-284\n-285/* *************************************************************************\n-*/\n-286namespace detail {\n-299template \n-300struct NoiseModelFactorAliases {};\n-301template \n-302struct NoiseModelFactorAliases {\n-303 using X = T1;\n-304 using X1 = T1;\n-305};\n-306template \n-307struct NoiseModelFactorAliases {\n-308 using X1 = T1;\n-309 using X2 = T2;\n-310};\n-311template \n-312struct NoiseModelFactorAliases {\n-313 using X1 = T1;\n-314 using X2 = T2;\n-315 using X3 = T3;\n-316};\n-317template \n-318struct NoiseModelFactorAliases {\n-319 using X1 = T1;\n-320 using X2 = T2;\n-321 using X3 = T3;\n-322 using X4 = T4;\n-323};\n-324template \n-325struct NoiseModelFactorAliases {\n-326 using X1 = T1;\n-327 using X2 = T2;\n-328 using X3 = T3;\n-329 using X4 = T4;\n-330 using X5 = T5;\n-331};\n-332template \n-334struct NoiseModelFactorAliases {\n-335 using X1 = T1;\n-336 using X2 = T2;\n-337 using X3 = T3;\n-338 using X4 = T4;\n-339 using X5 = T5;\n-340 using X6 = T6;\n-341};\n-342} // namespace detail\n-343\n-344/* *************************************************************************\n-*/\n-397template \n-_\b3_\b9_\b8class _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-399 : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br,\n-400 public detail::NoiseModelFactorAliases {\n-401 public:\n-403 enum { N = sizeof...(ValueTypes) };\n-404\n-405 protected:\n-406 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br;\n-407 using This = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN;\n-408\n-411\n-412 template \n-413 using IsConvertible =\n-414 typename std::enable_if::value, void>::type;\n-415\n-416 template \n-417 using IndexIsValid = typename std::enable_if<(I >= 1) && (I <= N),\n-418 void>::type; // 1-indexed!\n-419\n-420 template \n-421 using ContainerElementType =\n-422 typename std::decay()._\bb_\be_\bg_\bi_\bn())>::type;\n-423 template \n-424 using IsContainerOfKeys = IsConvertible,\n-_\bK_\be_\by>;\n-425\n-427\n-428 /* Like std::void_t, except produces `boost::optional` instead of\n-429 * `void`. Used to expand fixed-type parameter-packs with same length as\n-430 * ValueTypes. */\n-431 template \n-432 using OptionalMatrix = boost::optional;\n-433\n-434 /* Like std::void_t, except produces `Key` instead of `void`. Used to\n-expand\n-435 * fixed-type parameter-packs with same length as ValueTypes. */\n-436 template \n-437 using KeyType = _\bK_\be_\by;\n-438\n-439 public:\n-459 template >\n-_\b4_\b6_\b0 using _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be =\n-461 typename std::tuple_element>::type;\n-462\n-463 public:\n-464\n-467\n-_\b4_\b6_\b9 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN() {}\n-470\n-_\b4_\b7_\b8 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl,\n-479 KeyType... _\bk_\be_\by_\bs)\n-480 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, std::array<_\bK_\be_\by, N>{_\bk_\be_\by_\bs...}) {}\n-481\n-489 template ,\n-490 typename = IsContainerOfKeys>\n-_\b4_\b9_\b1 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, CONTAINER _\bk_\be_\by_\bs)\n-492 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, _\bk_\be_\by_\bs) {\n-493 if (_\bk_\be_\by_\bs.size() != N) {\n-494 throw std::invalid_argument(\n-495 \"NoiseModelFactorN: wrong number of keys given\");\n-496 }\n-497 }\n-498\n-500\n-501 _\b~_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN() override {}\n-502\n-517 template \n-_\b5_\b1_\b8 inline _\bK_\be_\by _\bk_\be_\by() const {\n-519 static_assert(I <= N, \"Index out of bounds\");\n-520 return _\bk_\be_\by_\bs_\b_[I - 1];\n-521 }\n-522\n-525\n-_\b5_\b4_\b2 Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(\n-543 const _\bV_\ba_\bl_\bu_\be_\bs& x,\n-544 boost::optional&> H = boost::none) const override {\n-545 return _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(boost::mp11::index_sequence_for{}, x,\n-546 H);\n-547 }\n-548\n-552\n-_\b5_\b7_\b5 virtual Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const ValueTypes&... x,\n-576 OptionalMatrix... H) const = 0;\n-577\n-579\n-582\n-_\b5_\b8_\b9 inline Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const ValueTypes&... x) const {\n-590 return _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(x..., OptionalMatrix()...);\n-591 }\n-592\n-597 template >\n-_\b5_\b9_\b9 inline Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const ValueTypes&... x,\n-600 OptionalJacArgs&&... H) const {\n-601 return _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(x..., std::forward(H)...,\n-602 boost::none);\n-603 }\n-604\n-606\n-607 private:\n-614 template \n-615 inline Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(\n-616 boost::mp11::index_sequence, //\n-617 const _\bV_\ba_\bl_\bu_\be_\bs& x,\n-618 boost::optional&> H = boost::none) const {\n-619 if (this->_\ba_\bc_\bt_\bi_\bv_\be(x)) {\n-620 if (H) {\n-621 return _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(x._\ba_\bt(_\bk_\be_\by_\bs_\b_[Indices])...,\n-622 (*H)[Indices]...);\n-623 } else {\n-624 return _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(x._\ba_\bt(_\bk_\be_\by_\bs_\b_[Indices])...);\n-625 }\n-626 } else {\n-627 return Vector::Zero(this->_\bd_\bi_\bm());\n-628 }\n-629 }\n-630\n-_\b6_\b3_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-633 template \n-634 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-635 ar& boost::serialization::make_nvp(\n-636 \"NoiseModelFactor\", boost::serialization::base_object(*this));\n-637 }\n-638\n-639 public:\n-642\n-643 inline _\bK_\be_\by key1() const {\n-644 return key<1>();\n-645 }\n-646 template \n-647 inline _\bK_\be_\by key2() const {\n-648 static_assert(I <= N, \"Index out of bounds\");\n-649 return key<2>();\n-650 }\n-651 template \n-652 inline _\bK_\be_\by key3() const {\n-653 static_assert(I <= N, \"Index out of bounds\");\n-654 return key<3>();\n-655 }\n-656 template \n-657 inline _\bK_\be_\by key4() const {\n-658 static_assert(I <= N, \"Index out of bounds\");\n-659 return key<4>();\n-660 }\n-661 template \n-662 inline _\bK_\be_\by key5() const {\n-663 static_assert(I <= N, \"Index out of bounds\");\n-664 return key<5>();\n-665 }\n-666 template \n-667 inline _\bK_\be_\by key6() const {\n-668 static_assert(I <= N, \"Index out of bounds\");\n-669 return key<6>();\n-670 }\n-671\n-673\n-674}; // \\class NoiseModelFactorN\n-675\n-676#define NoiseModelFactor1 NoiseModelFactorN\n-677#define NoiseModelFactor2 NoiseModelFactorN\n-678#define NoiseModelFactor3 NoiseModelFactorN\n-679#define NoiseModelFactor4 NoiseModelFactorN\n-680#define NoiseModelFactor5 NoiseModelFactorN\n-681#define NoiseModelFactor6 NoiseModelFactorN\n-682\n-683} // namespace gtsam\n+288template\n+289Expression _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const Expression& e1, const Expression& e2);\n+290\n+296template\n+297std::vector > _\bc_\br_\be_\ba_\bt_\be_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs(size_t n, char c, size_t start =\n+0);\n+298\n+299} // namespace gtsam\n+300\n+301#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b-_\bi_\bn_\bl_\b._\bh>\n+302\n _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n Special class for optional Jacobian arguments.\n-_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-The base class for all factors.\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\n+_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b-_\bi_\bn_\bl_\b._\bh\n+Internals for Expression.h, not for general consumption.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\by_\bm_\bb_\bo_\bl\n+Key symbol(unsigned char c, std::uint64_t j)\n+Create a symbol key from a character and index, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Symbol.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs\n+std::vector< Expression< T > > createUnknowns(size_t n, char c, size_t start)\n+Construct an array of leaves.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:284\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+Errors operator+(const Errors &a, const Errors &b)\n+Addition.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point2 operator*(double s, const Point2 &p)\n+multiply with scalar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+Expression< T > linearExpression(const std::function< T(A)> &f, const\n+Expression< A > &expression, const Eigen::Matrix< double, traits< T >::\n+dimension, traits< A >::dimension > &dTdA)\n+Create an expression out of a linear function f:T->A with (constant) Jacobian\n+dTdA TODO(frank): creat...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:241\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+Errors operator-(const Errors &a, const Errors &b)\n+Subtraction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:75\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-Iterator at beginning of involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:143\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-virtual boost::shared_ptr< GaussianFactor > linearize(const Values &c) const =0\n-linearize to a GaussianFactor\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n-virtual size_t dim() const =0\n-get the dimension of the factor (number of rows on linearization)\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-NonlinearFactor()\n-Default constructor for I/O only.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n-virtual bool active(const Values &) const\n-Checks whether a factor should be used based on a set of values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-NonlinearFactor(const CONTAINER &keys)\n-Constructor from a collection of the keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\be_\bn_\bd_\ba_\bb_\bl_\be\n-virtual bool sendable() const\n-Should the factor be evaluated in the same thread as the caller This is to\n-enable factors that has sh...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:153\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual shared_ptr clone() const\n-Creates a shared_ptr clone of the factor - needs to be specialized to allow for\n-subclasses.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-virtual ~NonlinearFactor()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n-density Templated on...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-NoiseModelFactor(const SharedNoiseModel &noiseModel, const CONTAINER &keys)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:198\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-~NoiseModelFactor() override\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+: meta-function to generate JacobianTA optional reference Used mainly by\n+Expressions\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:261\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be\n+Vector Space concept.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:470\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl\n+Character and index key used to refer to variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Symbol.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+Factor that supports arbitrary expressions via AD.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bc_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+Expression class that supports automatic differentiation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\br_\bo_\bo_\bt\n+const boost::shared_ptr< internal::ExpressionNode< T > > & root() const\n+Return root.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bt_\by_\bp_\be\n+Expression< T > type\n+Define type so we can apply it as a meta-function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+Expression()\n+Default constructor, for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:182\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\b~_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+virtual ~Expression()\n Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-NoiseModelFactor(const SharedNoiseModel &noiseModel)\n-Constructor - only for subclasses, as this does not set keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:206\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-Noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-get the dimension of the factor (number of rows on linearization)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:218\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-NoiseModelFactor()\n-Default constructor for I/O only.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-const SharedNoiseModel & noiseModel() const\n-access to the noise model\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n-virtual Vector unwhitenedError(const Values &x, boost::optional< std::vector<\n-Matrix > & > H=boost::none) const =0\n-Error function without the NoiseModel, .\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const ValueTypes &... x) const\n-No-Jacobians requested function overload.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:589\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-NoiseModelFactorN(const SharedNoiseModel &noiseModel, CONTAINER keys)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:491\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-NoiseModelFactorN(const SharedNoiseModel &noiseModel, KeyType< ValueTypes >...\n-keys)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:478\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n-Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix >\n-& > H=boost::none) const override\n-This implements the unwhitenedError virtual function by calling the n-key\n-specific version of evaluat...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:542\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-NoiseModelFactorN()\n-Default Constructor for I/O.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:469\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-virtual Vector evaluateError(const ValueTypes &... x, OptionalMatrix<\n-ValueTypes >... H) const =0\n-Override evaluateError to finish implementing an n-way factor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be\n-typename std::tuple_element< I - 1, std::tuple< ValueTypes... > >::type\n-ValueType\n-The type of the I'th template param can be obtained as ValueType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:461\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:632\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bk_\be_\by\n-Key key() const\n-Returns a key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const ValueTypes &... x, OptionalJacArgs &&... H) const\n-Some (but not all) optional Jacobians are omitted (function overload)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:599\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual boost::shared_ptr< Expression > clone() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:166\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+Expression(const boost::shared_ptr< internal::ExpressionNode< T > > &root)\n+Construct with a custom root.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bk_\be_\by_\bs\n+std::set< Key > keys() const\n+Return keys that play in this expression.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bK_\be_\by_\bs_\bA_\bn_\bd_\bD_\bi_\bm_\bs\n+std::pair< KeyVector, FastVector< int > > KeysAndDims\n+Keys and dimensions in same order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bd_\bi_\bm_\bs\n+void dims(std::map< Key, int > &map) const\n+Return dimensions for each argument, as a map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s) const\n+Print.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:142\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bv_\ba_\bl_\bu_\be_\bA_\bn_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bM_\ba_\bp\n+T valueAndJacobianMap(const Values &values, internal::JacobianMap &jacobians)\n+const\n+brief Return value and derivatives, reverse AD version\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:205\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bv_\ba_\bl_\bu_\be_\bA_\bn_\bd_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs\n+T valueAndDerivatives(const Values &values, const KeyVector &keys, const\n+FastVector< int > &dims, std::vector< Matrix > &H) const\n+private version that takes keys and dimensions, returns derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+T value(const Values &values, boost::optional< std::vector< Matrix > & >\n+H=boost::none) const\n+Return value and optional derivatives, reverse AD version Notes: this is not\n+terribly efficient,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:147\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n+Expression< T > & operator+=(const Expression< T > &e)\n+Add another expression to this expression.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:302\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bt_\br_\ba_\bc_\be_\bS_\bi_\bz_\be\n+size_t traceSize() const\n+Return size needed for memory buffer in traceExecution.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bt_\br_\ba_\bc_\be_\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn\n+T traceExecution(const Values &values, internal::ExecutionTrace< T > &trace,\n+void *traceStorage) const\n+trace execution, very unsafe\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:198\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bU_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bT_\be_\br_\bn_\ba_\br_\by_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bl_\ba_\br_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+A ScalarMultiplyExpression is a specialization of Expression that multiplies\n+with a scalar It optimiz...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:213\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bS_\bu_\bm_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+A BinarySumExpression is a specialization of Expression that adds two\n+expressions together It optimiz...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:226\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-const ValueType at(Key j) const\n-Retrieve a variable by key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n+_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01100.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01100.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtParams.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/expressionTesting.h File Reference\n \n \n \n \n \n \n \n@@ -94,40 +94,107 @@\n \n \n \n \n \n \n+
expressionTesting.h File Reference
\n \n
\n \n-

Parameters for Levenberg-Marquardt trust-region scheme. \n+

Test harness methods for expressions. \n More...

\n+\n+

Go to the source code of this file.

\n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+

\n+Macros

#define EXPECT_CORRECT_EXPRESSION_JACOBIANS(expression, values, numerical_derivative_step, tolerance)    { EXPECT(gtsam::internal::testExpressionJacobians(name_, expression, values, numerical_derivative_step, tolerance)); }
 Check the Jacobians produced by an expression against finite differences.
 
\n+\n+\n+\n+\n

\n+Functions

\n+template<typename T >
bool gtsam::internal::testExpressionJacobians (const std::string &name_, const gtsam::Expression< T > &expression, const gtsam::Values &values, double nd_step, double tolerance)
 
\n

Detailed Description

\n-

Parameters for Levenberg-Marquardt trust-region scheme.

\n-
Author
Richard Roberts
\n-
\n-Frank Dellaert
\n+

Test harness methods for expressions.

\n+
Date
September 18, 2014
\n+
Author
Frank Dellaert
\n
\n-Luca Carlone
\n-
Date
Feb 26, 2012
\n-
\n+Paul Furgale \n+

Macro Definition Documentation

\n+\n+

◆ EXPECT_CORRECT_EXPRESSION_JACOBIANS

\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+
#define EXPECT_CORRECT_EXPRESSION_JACOBIANS( expression,
 values,
 numerical_derivative_step,
 tolerance 
)    { EXPECT(gtsam::internal::testExpressionJacobians(name_, expression, values, numerical_derivative_step, tolerance)); }
\n+
\n+\n+

Check the Jacobians produced by an expression against finite differences.

\n+
Parameters
\n+ \n+ \n+ \n+ \n+ \n+
expressionThe expression to test.
valuesValues filled in for testing the Jacobians.
numerical_derivative_stepThe step to use when computing the finite difference Jacobians
toleranceThe numerical tolerance to use when comparing Jacobians.
\n+
\n+
\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,58 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-LevenbergMarquardtParams.cpp File Reference\n-Parameters for Levenberg-Marquardt trust-region scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+expressionTesting.h File Reference\n+Test harness methods for expressions. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 _\bE_\bX_\bP_\bE_\bC_\bT_\b__\bC_\bO_\bR_\bR_\bE_\bC_\bT_\b__\bE_\bX_\bP_\bR_\bE_\bS_\bS_\bI_\bO_\bN_\b__\bJ_\bA_\bC_\bO_\bB_\bI_\bA_\bN_\bS(expression, values,\n+ numerical_derivative_step, tolerance)\u00a0\u00a0\u00a0 { EXPECT(gtsam::internal::\n+ testExpressionJacobians(name_, expression, values,\n+ numerical_derivative_step, tolerance)); }\n+\u00a0 Check the Jacobians produced by an expression against finite\n+ differences.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:t\bte\bes\bst\btE\bEx\bxp\bpr\bre\bes\bss\bsi\bio\bon\bnJ\bJa\bac\bco\bob\bbi\bia\ban\bns\bs (const std::string &name_, const\n+ _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > &expression, const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs &values, double\n+ nd_step, double tolerance)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Parameters for Levenberg-Marquardt trust-region scheme.\n+Test harness methods for expressions.\n+ Date\n+ September 18, 2014\n Author\n- Richard Roberts\n Frank Dellaert\n- Luca Carlone\n- Date\n- Feb 26, 2012\n+ Paul Furgale\n+*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0E\bEX\bXP\bPE\bEC\bCT\bT_\b_C\bCO\bOR\bRR\bRE\bEC\bCT\bT_\b_E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bN_\b_J\bJA\bAC\bCO\bOB\bBI\bIA\bAN\bNS\bS *\b**\b**\b**\b**\b*\n+#define ( \u00a0 expression,\n+EXPECT_CORRECT_EXPRESSION_JACOBIANS\n+ \u00a0 values,\n+ \u00a0 numerical_derivative_step,\n+ \u00a0 tolerance\u00a0\n+ \u00a0\u00a0\u00a0 { EXPECT(gtsam::internal::\n+ testExpressionJacobians(name_,\n+ ) expression, values,\n+ numerical_derivative_step, tolerance));\n+ }\n+Check the Jacobians produced by an expression against finite differences.\n+ Parameters\n+ expression The expression to test.\n+ values _\bV_\ba_\bl_\bu_\be_\bs filled in for testing the Jacobians.\n+ numerical_derivative_step The step to use when computing the finite\n+ difference Jacobians\n+ tolerance The numerical tolerance to use when comparing\n+ Jacobians.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bc_\bp_\bp\n+ * _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01103.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01103.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LinearContainerFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GncOptimizer.h File Reference\n \n \n \n \n \n \n \n@@ -96,45 +96,48 @@\n \n \n \n
\n \n-
LinearContainerFactor.h File Reference
\n+
GncOptimizer.h File Reference
\n
\n
\n \n-

Wrap Jacobian and Hessian linear factors to allow simple injection into a nonlinear graph. \n+

The GncOptimizer class. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n+\n \n

\n Classes

class  gtsam::LinearContainerFactor
 Dummy version of a generic linear factor to be injected into a nonlinear factor graph. More...
 
struct  gtsam::traits< LinearContainerFactor >
class  gtsam::GncOptimizer< GncParameters >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Wrap Jacobian and Hessian linear factors to allow simple injection into a nonlinear graph.

\n-
Date
Jul 6, 2012
\n-
Author
Alex Cunningham
\n+

The GncOptimizer class.

\n+
Author
Jingnan Shi
\n+
\n+Luca Carlone
\n+
\n+Frank Dellaert
\n+

Implementation of the paper: Yang, Antonante, Tzoumas, Carlone, \"Graduated Non-Convexity for Robust Spatial Perception:\n+From Non-Minimal Solvers to Global Outlier Rejection\", ICRA/RAL, 2020. (arxiv version: https://arxiv.org/pdf/1909.08605.pdf)

\n+

See also: Antonante, Tzoumas, Yang, Carlone, \"Outlier-Robust Estimation: Hardness, Minimally-Tuned Algorithms, and Applications\", arxiv: https://arxiv.org/pdf/2007.15109.pdf, 2020.

\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-LinearContainerFactor.h File Reference\n-Wrap Jacobian and Hessian linear factors to allow simple injection into a\n-nonlinear graph. _\bM_\bo_\br_\be_\b._\b._\b.\n+GncOptimizer.h File Reference\n+The GncOptimizer class. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Dummy version of a generic linear factor to be injected into a\n- nonlinear factor graph. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b<_\b _\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Wrap Jacobian and Hessian linear factors to allow simple injection into a\n-nonlinear graph.\n- Date\n- Jul 6, 2012\n+The GncOptimizer class.\n Author\n- Alex Cunningham\n+ Jingnan Shi\n+ Luca Carlone\n+ Frank Dellaert\n+Implementation of the paper: Yang, Antonante, Tzoumas, Carlone, \"Graduated Non-\n+Convexity for Robust Spatial Perception: From Non-Minimal Solvers to Global\n+Outlier Rejection\", ICRA/RAL, 2020. (arxiv version: _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\ba_\br_\bx_\bi_\bv_\b._\bo_\br_\bg_\b/_\bp_\bd_\bf_\b/\n+_\b1_\b9_\b0_\b9_\b._\b0_\b8_\b6_\b0_\b5_\b._\bp_\bd_\bf)\n+See also: Antonante, Tzoumas, Yang, Carlone, \"Outlier-Robust Estimation:\n+Hardness, Minimally-Tuned Algorithms, and Applications\", arxiv: _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/\n+_\ba_\br_\bx_\bi_\bv_\b._\bo_\br_\bg_\b/_\bp_\bd_\bf_\b/_\b2_\b0_\b0_\b7_\b._\b1_\b5_\b1_\b0_\b9_\b._\bp_\bd_\bf, 2020.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01103.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01103.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a01103 = [\n- [\"gtsam::LinearContainerFactor\", \"a04444.html\", \"a04444\"],\n- [\"gtsam::traits< LinearContainerFactor >\", \"a04448.html\", null]\n+ [\"gtsam::GncOptimizer< GncParameters >\", \"a04360.html\", \"a04360\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01103_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01103_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LinearContainerFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GncOptimizer.h Source File\n \n \n \n \n \n \n \n@@ -98,143 +98,516 @@\n
No Matches
\n \n \n \n \n \n
\n-
LinearContainerFactor.h
\n+
GncOptimizer.h
\n
\n
\n-Go to the documentation of this file.
1
\n-
10#pragma once
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-\n-
13
\n-
14namespace gtsam {
\n-
15
\n-
16 // Forward declarations
\n-
17 class JacobianFactor;
\n-
18 class HessianFactor;
\n-
19
\n-
\n-
26class GTSAM_EXPORT LinearContainerFactor : public NonlinearFactor {
\n-
27protected:
\n+
27#pragma once
\n
28
\n-\n-
30 boost::optional<Values> linearizationPoint_;
\n-
31
\n-
33 LinearContainerFactor(const GaussianFactor::shared_ptr& factor, const boost::optional<Values>& linearizationPoint);
\n-
34
\n-
35 // Some handy typedefs
\n-
36 typedef NonlinearFactor Base;
\n-\n-
38
\n-
39public:
\n-
40
\n-
41 typedef boost::shared_ptr<This> shared_ptr;
\n+
29#include <gtsam/nonlinear/GncParams.h>
\n+\n+
31#include <boost/math/distributions/chi_squared.hpp>
\n+
32
\n+
33namespace gtsam {
\n+
34/*
\n+
35 * Quantile of chi-squared distribution with given degrees of freedom at probability alpha.
\n+
36 * Equivalent to chi2inv in Matlab.
\n+
37 */
\n+
38static double Chi2inv(const double alpha, const size_t dofs) {
\n+
39 boost::math::chi_squared_distribution<double> chi2(dofs);
\n+
40 return boost::math::quantile(chi2, alpha);
\n+
41}
\n
42
\n-\n-
45
\n-
47 LinearContainerFactor(const JacobianFactor& factor, const Values& linearizationPoint = Values());
\n-
48
\n-
50 LinearContainerFactor(const HessianFactor& factor, const Values& linearizationPoint = Values());
\n-
51
\n-
53 LinearContainerFactor(const GaussianFactor::shared_ptr& factor, const Values& linearizationPoint = Values());
\n-
54
\n-
55 // Access
\n+
43/* ************************************************************************* */
\n+
44template<class GncParameters>
\n+
\n+\n+
46 public:
\n+
48 typedef typename GncParameters::OptimizerType BaseOptimizer;
\n+
49
\n+
50 private:
\n+\n+
52 Values state_;
\n+
53 GncParameters params_;
\n+
54 Vector weights_;
\n+
55 Vector barcSq_;
\n
56
\n-
57 const GaussianFactor::shared_ptr& factor() const { return factor_; }
\n-
58
\n-
59 // Testable
\n-
60
\n-
62 void print(const std::string& s = "", const KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const override;
\n+
57 public:
\n+
\n+
59 GncOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n+
60 const GncParameters& params = GncParameters())
\n+
61 : state_(initialValues),
\n+
62 params_(params) {
\n
63
\n-
65 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override;
\n-
66
\n-
67 // NonlinearFactor
\n-
68
\n-
77 double error(const Values& c) const override;
\n-
78
\n-
80 size_t dim() const override;
\n-
81
\n-
83 const boost::optional<Values>& linearizationPoint() const { return linearizationPoint_; }
\n-
84
\n-
101 GaussianFactor::shared_ptr linearize(const Values& c) const override;
\n-
102
\n-
106 GaussianFactor::shared_ptr negateToGaussian() const;
\n-
107
\n-
111 NonlinearFactor::shared_ptr negateToNonlinear() const;
\n-
112
\n-
\n-
119 NonlinearFactor::shared_ptr clone() const override {
\n-
120 return NonlinearFactor::shared_ptr(new LinearContainerFactor(factor_,linearizationPoint_));
\n-
121 }
\n-
\n-
122
\n-
128 NonlinearFactor::shared_ptr rekey(
\n-
129 const std::map<Key, Key>& rekey_mapping) const override;
\n-
130
\n-
135 NonlinearFactor::shared_ptr rekey(const KeyVector& new_keys) const override;
\n-
136
\n-
138 inline bool hasLinearizationPoint() const { return linearizationPoint_.is_initialized(); }
\n-
139
\n-
143 bool isJacobian() const;
\n-
144 bool isHessian() const;
\n-
145
\n-
147 boost::shared_ptr<JacobianFactor> toJacobian() const;
\n-
148
\n-
150 boost::shared_ptr<HessianFactor> toHessian() const;
\n-
151
\n-
156 static NonlinearFactorGraph ConvertLinearGraph(const GaussianFactorGraph& linear_graph,
\n-
157 const Values& linearizationPoint = Values());
\n+
64 // make sure all noiseModels are Gaussian or convert to Gaussian
\n+
65 nfg_.resize(graph.size());
\n+
66 for (size_t i = 0; i < graph.size(); i++) {
\n+
67 if (graph[i]) {
\n+
68 NoiseModelFactor::shared_ptr factor = boost::dynamic_pointer_cast<
\n+
69 NoiseModelFactor>(graph[i]);
\n+
70 auto robust = boost::dynamic_pointer_cast<
\n+
71 noiseModel::Robust>(factor->noiseModel());
\n+
72 // if the factor has a robust loss, we remove the robust loss
\n+
73 nfg_[i] = robust ? factor-> cloneWithNewNoiseModel(robust->noise()) : factor;
\n+
74 }
\n+
75 }
\n+
76
\n+
77 // check that known inliers and outliers make sense:
\n+
78 std::vector<size_t> inconsistentlySpecifiedWeights; // measurements the user has incorrectly specified
\n+
79 // to be BOTH known inliers and known outliers
\n+
80 std::set_intersection(params.knownInliers.begin(),params.knownInliers.end(),
\n+
81 params.knownOutliers.begin(),params.knownOutliers.end(),
\n+
82 std::inserter(inconsistentlySpecifiedWeights, inconsistentlySpecifiedWeights.begin()));
\n+
83 if(inconsistentlySpecifiedWeights.size() > 0){ // if we have inconsistently specified weights, we throw an exception
\n+
84 params.print("params\\n");
\n+
85 throw std::runtime_error("GncOptimizer::constructor: the user has selected one or more measurements"
\n+
86 " to be BOTH a known inlier and a known outlier.");
\n+
87 }
\n+
88 // check that known inliers are in the graph
\n+
89 for (size_t i = 0; i < params.knownInliers.size(); i++){
\n+
90 if( params.knownInliers[i] > nfg_.size()-1 ){ // outside graph
\n+
91 throw std::runtime_error("GncOptimizer::constructor: the user has selected one or more measurements"
\n+
92 "that are not in the factor graph to be known inliers.");
\n+
93 }
\n+
94 }
\n+
95 // check that known outliers are in the graph
\n+
96 for (size_t i = 0; i < params.knownOutliers.size(); i++){
\n+
97 if( params.knownOutliers[i] > nfg_.size()-1 ){ // outside graph
\n+
98 throw std::runtime_error("GncOptimizer::constructor: the user has selected one or more measurements"
\n+
99 "that are not in the factor graph to be known outliers.");
\n+
100 }
\n+
101 }
\n+
102 // initialize weights (if we don't have prior knowledge of inliers/outliers
\n+
103 // the weights are all initialized to 1.
\n+
104 weights_ = initializeWeightsFromKnownInliersAndOutliers();
\n+
105
\n+
106 // set default barcSq_ (inlier threshold)
\n+
107 double alpha = 0.99; // with this (default) probability, inlier residuals are smaller than barcSq_
\n+\n+
109 }
\n+
\n+
110
\n+
\n+
117 void setInlierCostThresholds(const double inth) {
\n+
118 barcSq_ = inth * Vector::Ones(nfg_.size());
\n+
119 }
\n+
\n+
120
\n+
\n+
125 void setInlierCostThresholds(const Vector& inthVec) {
\n+
126 barcSq_ = inthVec;
\n+
127 }
\n+
\n+
128
\n+
\n+
132 void setInlierCostThresholdsAtProbability(const double alpha) {
\n+
133 barcSq_ = Vector::Ones(nfg_.size()); // initialize
\n+
134 for (size_t k = 0; k < nfg_.size(); k++) {
\n+
135 if (nfg_[k]) {
\n+
136 barcSq_[k] = 0.5 * Chi2inv(alpha, nfg_[k]->dim()); // 0.5 derives from the error definition in gtsam
\n+
137 }
\n+
138 }
\n+
139 }
\n+
\n+
140
\n+
\n+
144 void setWeights(const Vector w) {
\n+
145 if (size_t(w.size()) != nfg_.size()) {
\n+
146 throw std::runtime_error(
\n+
147 "GncOptimizer::setWeights: the number of specified weights"
\n+
148 " does not match the size of the factor graph.");
\n+
149 }
\n+
150 weights_ = w;
\n+
151 }
\n+
\n+
152
\n+
154 const NonlinearFactorGraph& getFactors() const { return nfg_; }
\n+
155
\n+
157 const Values& getState() const { return state_; }
\n
158
\n-
159 protected:
\n-
160 void initializeLinearizationPoint(const Values& linearizationPoint);
\n+
160 const GncParameters& getParams() const { return params_;}
\n
161
\n-
162 private:
\n-
164 friend class boost::serialization::access;
\n-
165 template<class ARCHIVE>
\n-
166 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
167 ar & boost::serialization::make_nvp("NonlinearFactor",
\n-
168 boost::serialization::base_object<Base>(*this));
\n-
169 ar & BOOST_SERIALIZATION_NVP(factor_);
\n-
170 ar & BOOST_SERIALIZATION_NVP(linearizationPoint_);
\n-
171 }
\n-
172
\n-
173}; // \\class LinearContainerFactor
\n-
\n-
174
\n-
175template<> struct traits<LinearContainerFactor> : public Testable<LinearContainerFactor> {};
\n-
176
\n-
177} // \\namespace gtsam
\n-
178
\n-
Factor Graph consisting of non-linear factors.
\n+
163 const Vector& getWeights() const { return weights_;}
\n+
164
\n+
166 const Vector& getInlierCostThresholds() const {return barcSq_;}
\n+
167
\n+
\n+
169 bool equals(const GncOptimizer& other, double tol = 1e-9) const {
\n+
170 return nfg_.equals(other.getFactors())
\n+
171 && equal(weights_, other.getWeights())
\n+
172 && params_.equals(other.getParams())
\n+
173 && equal(barcSq_, other.getInlierCostThresholds());
\n+
174 }
\n+
\n+
175
\n+
176 Vector initializeWeightsFromKnownInliersAndOutliers() const{
\n+
177 Vector weights = Vector::Ones(nfg_.size());
\n+
178 for (size_t i = 0; i < params_.knownOutliers.size(); i++){
\n+
179 weights[ params_.knownOutliers[i] ] = 0.0; // known to be outliers
\n+
180 }
\n+
181 return weights;
\n+
182 }
\n+
183
\n+
\n+\n+
186 NonlinearFactorGraph graph_initial = this->makeWeightedGraph(weights_);
\n+
187 BaseOptimizer baseOptimizer(
\n+
188 graph_initial, state_, params_.baseOptimizerParams);
\n+
189 Values result = baseOptimizer.optimize();
\n+
190 double mu = initializeMu();
\n+
191 double prev_cost = graph_initial.error(result);
\n+
192 double cost = 0.0; // this will be updated in the main loop
\n+
193
\n+
194 // handle the degenerate case that corresponds to small
\n+
195 // maximum residual errors at initialization
\n+
196 // For GM: if residual error is small, mu -> 0
\n+
197 // For TLS: if residual error is small, mu -> -1
\n+
198 int nrUnknownInOrOut = nfg_.size() - ( params_.knownInliers.size() + params_.knownOutliers.size() );
\n+
199 // ^^ number of measurements that are not known to be inliers or outliers (GNC will need to figure them out)
\n+
200 if (mu <= 0 || nrUnknownInOrOut == 0) { // no need to even call GNC in this case
\n+
201 if (mu <= 0 && params_.verbosity >= GncParameters::Verbosity::SUMMARY) {
\n+
202 std::cout << "GNC Optimizer stopped because maximum residual at "
\n+
203 "initialization is small."
\n+
204 << std::endl;
\n+
205 }
\n+
206 if (nrUnknownInOrOut==0 && params_.verbosity >= GncParameters::Verbosity::SUMMARY) {
\n+
207 std::cout << "GNC Optimizer stopped because all measurements are already known to be inliers or outliers"
\n+
208 << std::endl;
\n+
209 }
\n+
210 if (params_.verbosity >= GncParameters::Verbosity::MU) {
\n+
211 std::cout << "mu: " << mu << std::endl;
\n+
212 }
\n+
213 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {
\n+
214 result.print("result\\n");
\n+
215 }
\n+
216 return result;
\n+
217 }
\n+
218
\n+
219 size_t iter;
\n+
220 for (iter = 0; iter < params_.maxIterations; iter++) {
\n+
221
\n+
222 // display info
\n+
223 if (params_.verbosity >= GncParameters::Verbosity::MU) {
\n+
224 std::cout << "iter: " << iter << std::endl;
\n+
225 std::cout << "mu: " << mu << std::endl;
\n+
226 }
\n+
227 if (params_.verbosity >= GncParameters::Verbosity::WEIGHTS) {
\n+
228 std::cout << "weights: " << weights_ << std::endl;
\n+
229 }
\n+
230 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {
\n+
231 result.print("result\\n");
\n+
232 }
\n+
233 // weights update
\n+
234 weights_ = calculateWeights(result, mu);
\n+
235
\n+
236 // variable/values update
\n+
237 NonlinearFactorGraph graph_iter = this->makeWeightedGraph(weights_);
\n+
238 BaseOptimizer baseOptimizer_iter(
\n+
239 graph_iter, state_, params_.baseOptimizerParams);
\n+
240 result = baseOptimizer_iter.optimize();
\n+
241
\n+
242 // stopping condition
\n+
243 cost = graph_iter.error(result);
\n+
244 if (checkConvergence(mu, weights_, cost, prev_cost)) {
\n+
245 break;
\n+
246 }
\n+
247
\n+
248 // update mu
\n+
249 mu = updateMu(mu);
\n+
250
\n+
251 // get ready for next iteration
\n+
252 prev_cost = cost;
\n+
253
\n+
254 // display info
\n+
255 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {
\n+
256 std::cout << "previous cost: " << prev_cost << std::endl;
\n+
257 std::cout << "current cost: " << cost << std::endl;
\n+
258 }
\n+
259 }
\n+
260 // display info
\n+
261 if (params_.verbosity >= GncParameters::Verbosity::SUMMARY) {
\n+
262 std::cout << "final iterations: " << iter << std::endl;
\n+
263 std::cout << "final mu: " << mu << std::endl;
\n+
264 std::cout << "previous cost: " << prev_cost << std::endl;
\n+
265 std::cout << "current cost: " << cost << std::endl;
\n+
266 }
\n+
267 if (params_.verbosity >= GncParameters::Verbosity::WEIGHTS) {
\n+
268 std::cout << "final weights: " << weights_ << std::endl;
\n+
269 }
\n+
270 return result;
\n+
271 }
\n+
\n+
272
\n+
\n+
274 double initializeMu() const {
\n+
275
\n+
276 double mu_init = 0.0;
\n+
277 // initialize mu to the value specified in Remark 5 in GNC paper.
\n+
278 switch (params_.lossType) {
\n+
279 case GncLossType::GM:
\n+
280 /* surrogate cost is convex for large mu. initialize as in remark 5 in GNC paper.
\n+
281 Since barcSq_ can be different for each factor, we compute the max of the quantity in remark 5 in GNC paper
\n+
282 */
\n+
283 for (size_t k = 0; k < nfg_.size(); k++) {
\n+
284 if (nfg_[k]) {
\n+
285 mu_init = std::max(mu_init, 2 * nfg_[k]->error(state_) / barcSq_[k]);
\n+
286 }
\n+
287 }
\n+
288 return mu_init; // initial mu
\n+
289 case GncLossType::TLS:
\n+
290 /* surrogate cost is convex for mu close to zero. initialize as in remark 5 in GNC paper.
\n+
291 degenerate case: 2 * rmax_sq - params_.barcSq < 0 (handled in the main loop)
\n+
292 according to remark mu = params_.barcSq / (2 * rmax_sq - params_.barcSq) = params_.barcSq/ excessResidual
\n+
293 however, if the denominator is 0 or negative, we return mu = -1 which leads to termination of the main GNC loop.
\n+
294 Since barcSq_ can be different for each factor, we look for the minimimum (positive) quantity in remark 5 in GNC paper
\n+
295 */
\n+
296 mu_init = std::numeric_limits<double>::infinity();
\n+
297 for (size_t k = 0; k < nfg_.size(); k++) {
\n+
298 if (nfg_[k]) {
\n+
299 double rk = nfg_[k]->error(state_);
\n+
300 mu_init = (2 * rk - barcSq_[k]) > 0 ? // if positive, update mu, otherwise keep same
\n+
301 std::min(mu_init, barcSq_[k] / (2 * rk - barcSq_[k]) ) : mu_init;
\n+
302 }
\n+
303 }
\n+
304 if (mu_init >= 0 && mu_init < 1e-6){
\n+
305 mu_init = 1e-6; // if mu ~ 0 (but positive), that means we have measurements with large errors,
\n+
306 // i.e., rk > barcSq_[k] and rk very large, hence we threshold to 1e-6 to avoid mu = 0
\n+
307 }
\n+
308
\n+
309 return mu_init > 0 && !std::isinf(mu_init) ? mu_init : -1; // if mu <= 0 or mu = inf, return -1,
\n+
310 // which leads to termination of the main gnc loop. In this case, all residuals are already below the threshold
\n+
311 // and there is no need to robustify (TLS = least squares)
\n+
312 default:
\n+
313 throw std::runtime_error(
\n+
314 "GncOptimizer::initializeMu: called with unknown loss type.");
\n+
315 }
\n+
316 }
\n+
\n+
317
\n+
\n+
319 double updateMu(const double mu) const {
\n+
320 switch (params_.lossType) {
\n+
321 case GncLossType::GM:
\n+
322 // reduce mu, but saturate at 1 (original cost is recovered for mu -> 1)
\n+
323 return std::max(1.0, mu / params_.muStep);
\n+
324 case GncLossType::TLS:
\n+
325 // increases mu at each iteration (original cost is recovered for mu -> inf)
\n+
326 return mu * params_.muStep;
\n+
327 default:
\n+
328 throw std::runtime_error(
\n+
329 "GncOptimizer::updateMu: called with unknown loss type.");
\n+
330 }
\n+
331 }
\n+
\n+
332
\n+
\n+
334 bool checkMuConvergence(const double mu) const {
\n+
335 bool muConverged = false;
\n+
336 switch (params_.lossType) {
\n+
337 case GncLossType::GM:
\n+
338 muConverged = std::fabs(mu - 1.0) < 1e-9; // mu=1 recovers the original GM function
\n+
339 break;
\n+
340 case GncLossType::TLS:
\n+
341 muConverged = false; // for TLS there is no stopping condition on mu (it must tend to infinity)
\n+
342 break;
\n+
343 default:
\n+
344 throw std::runtime_error(
\n+
345 "GncOptimizer::checkMuConvergence: called with unknown loss type.");
\n+
346 }
\n+
347 if (muConverged && params_.verbosity >= GncParameters::Verbosity::SUMMARY)
\n+
348 std::cout << "muConverged = true " << std::endl;
\n+
349 return muConverged;
\n+
350 }
\n+
\n+
351
\n+
\n+
353 bool checkCostConvergence(const double cost, const double prev_cost) const {
\n+
354 bool costConverged = std::fabs(cost - prev_cost) / std::max(prev_cost, 1e-7)
\n+
355 < params_.relativeCostTol;
\n+
356 if (costConverged && params_.verbosity >= GncParameters::Verbosity::SUMMARY){
\n+
357 std::cout << "checkCostConvergence = true (prev. cost = " << prev_cost
\n+
358 << ", curr. cost = " << cost << ")" << std::endl;
\n+
359 }
\n+
360 return costConverged;
\n+
361 }
\n+
\n+
362
\n+
\n+
364 bool checkWeightsConvergence(const Vector& weights) const {
\n+
365 bool weightsConverged = false;
\n+
366 switch (params_.lossType) {
\n+
367 case GncLossType::GM:
\n+
368 weightsConverged = false; // for GM, there is no clear binary convergence for the weights
\n+
369 break;
\n+
370 case GncLossType::TLS:
\n+
371 weightsConverged = true;
\n+
372 for (int i = 0; i < weights.size(); i++) {
\n+
373 if (std::fabs(weights[i] - std::round(weights[i]))
\n+
374 > params_.weightsTol) {
\n+
375 weightsConverged = false;
\n+
376 break;
\n+
377 }
\n+
378 }
\n+
379 break;
\n+
380 default:
\n+
381 throw std::runtime_error(
\n+
382 "GncOptimizer::checkWeightsConvergence: called with unknown loss type.");
\n+
383 }
\n+
384 if (weightsConverged
\n+
385 && params_.verbosity >= GncParameters::Verbosity::SUMMARY)
\n+
386 std::cout << "weightsConverged = true " << std::endl;
\n+
387 return weightsConverged;
\n+
388 }
\n+
\n+
389
\n+
\n+
391 bool checkConvergence(const double mu, const Vector& weights,
\n+
392 const double cost, const double prev_cost) const {
\n+
393 return checkCostConvergence(cost, prev_cost)
\n+\n+
395 }
\n+
\n+
396
\n+
\n+
398 NonlinearFactorGraph makeWeightedGraph(const Vector& weights) const {
\n+
399 // make sure all noiseModels are Gaussian or convert to Gaussian
\n+
400 NonlinearFactorGraph newGraph;
\n+
401 newGraph.resize(nfg_.size());
\n+
402 for (size_t i = 0; i < nfg_.size(); i++) {
\n+
403 if (nfg_[i]) {
\n+
404 auto factor = boost::dynamic_pointer_cast<
\n+
405 NoiseModelFactor>(nfg_[i]);
\n+
406 auto noiseModel =
\n+
407 boost::dynamic_pointer_cast<noiseModel::Gaussian>(
\n+
408 factor->noiseModel());
\n+
409 if (noiseModel) {
\n+
410 Matrix newInfo = weights[i] * noiseModel->information();
\n+
411 auto newNoiseModel = noiseModel::Gaussian::Information(newInfo);
\n+
412 newGraph[i] = factor->cloneWithNewNoiseModel(newNoiseModel);
\n+
413 } else {
\n+
414 throw std::runtime_error(
\n+
415 "GncOptimizer::makeWeightedGraph: unexpected non-Gaussian noise model.");
\n+
416 }
\n+
417 }
\n+
418 }
\n+
419 return newGraph;
\n+
420 }
\n+
\n+
421
\n+
\n+
423 Vector calculateWeights(const Values& currentEstimate, const double mu) {
\n+
424 Vector weights = initializeWeightsFromKnownInliersAndOutliers();
\n+
425
\n+
426 // do not update the weights that the user has decided are known inliers
\n+
427 std::vector<size_t> allWeights;
\n+
428 for (size_t k = 0; k < nfg_.size(); k++) {
\n+
429 allWeights.push_back(k);
\n+
430 }
\n+
431 std::vector<size_t> knownWeights;
\n+
432 std::set_union(params_.knownInliers.begin(), params_.knownInliers.end(),
\n+
433 params_.knownOutliers.begin(), params_.knownOutliers.end(),
\n+
434 std::inserter(knownWeights, knownWeights.begin()));
\n+
435
\n+
436 std::vector<size_t> unknownWeights;
\n+
437 std::set_difference(allWeights.begin(), allWeights.end(),
\n+
438 knownWeights.begin(), knownWeights.end(),
\n+
439 std::inserter(unknownWeights, unknownWeights.begin()));
\n+
440
\n+
441 // update weights of known inlier/outlier measurements
\n+
442 switch (params_.lossType) {
\n+
443 case GncLossType::GM: { // use eq (12) in GNC paper
\n+
444 for (size_t k : unknownWeights) {
\n+
445 if (nfg_[k]) {
\n+
446 double u2_k = nfg_[k]->error(currentEstimate); // squared (and whitened) residual
\n+
447 weights[k] = std::pow(
\n+
448 (mu * barcSq_[k]) / (u2_k + mu * barcSq_[k]), 2);
\n+
449 }
\n+
450 }
\n+
451 return weights;
\n+
452 }
\n+
453 case GncLossType::TLS: { // use eq (14) in GNC paper
\n+
454 for (size_t k : unknownWeights) {
\n+
455 if (nfg_[k]) {
\n+
456 double u2_k = nfg_[k]->error(currentEstimate); // squared (and whitened) residual
\n+
457 double upperbound = (mu + 1) / mu * barcSq_[k];
\n+
458 double lowerbound = mu / (mu + 1) * barcSq_[k];
\n+
459 weights[k] = std::sqrt(barcSq_[k] * mu * (mu + 1) / u2_k) - mu;
\n+
460 if (u2_k >= upperbound || weights[k] < 0) {
\n+
461 weights[k] = 0;
\n+
462 } else if (u2_k <= lowerbound || weights[k] > 1) {
\n+
463 weights[k] = 1;
\n+
464 }
\n+
465 }
\n+
466 }
\n+
467 return weights;
\n+
468 }
\n+
469 default:
\n+
470 throw std::runtime_error(
\n+
471 "GncOptimizer::calculateWeights: called with unknown loss type.");
\n+
472 }
\n+
473 }
\n+
\n+
474};
\n+
\n+
475
\n+
476}
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
A Gaussian factor using the canonical parameters (information form)
Definition HessianFactor.h:101
\n-
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n-
Dummy version of a generic linear factor to be injected into a nonlinear factor graph.
Definition LinearContainerFactor.h:26
\n-
NonlinearFactor::shared_ptr clone() const override
Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
Definition LinearContainerFactor.h:119
\n-
LinearContainerFactor()
Default constructor - necessary for serialization.
Definition LinearContainerFactor.h:44
\n-
const boost::optional< Values > & linearizationPoint() const
Extract the linearization point used in recalculating error.
Definition LinearContainerFactor.h:83
\n-
bool hasLinearizationPoint() const
Casting syntactic sugar.
Definition LinearContainerFactor.h:138
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
bool equal(const T &obj1, const T &obj2, double tol)
Call equal on the object.
Definition Testable.h:84
\n+
virtual void resize(size_t size)
Directly resize the number of factors in the graph.
Definition FactorGraph.h:381
\n+
size_t size() const
return the number of factors (including any null factors set by remove() ).
Definition FactorGraph.h:326
\n+
static shared_ptr Information(const Matrix &M, bool smart=true)
A Gaussian noise model created by specifying an information matrix.
Definition NoiseModel.cpp:100
\n+
Base class for robust error models The robust M-estimators above simply tell us how to re-weight the ...
Definition NoiseModel.h:642
\n+
Definition GncOptimizer.h:45
\n+
bool checkWeightsConvergence(const Vector &weights) const
Check convergence of weights to binary values.
Definition GncOptimizer.h:364
\n+
void setWeights(const Vector w)
Set weights for each factor.
Definition GncOptimizer.h:144
\n+
bool checkMuConvergence(const double mu) const
Check if we have reached the value of mu for which the surrogate loss matches the original loss.
Definition GncOptimizer.h:334
\n+
GncParameters::OptimizerType BaseOptimizer
For each parameter, specify the corresponding optimizer: e.g., GaussNewtonParams -> GaussNewtonOptimi...
Definition GncOptimizer.h:48
\n+
Values optimize()
Compute optimal solution using graduated non-convexity.
Definition GncOptimizer.h:185
\n+
const Vector & getInlierCostThresholds() const
Get the inlier threshold.
Definition GncOptimizer.h:166
\n+
bool checkCostConvergence(const double cost, const double prev_cost) const
Check convergence of relative cost differences.
Definition GncOptimizer.h:353
\n+
const Values & getState() const
Access a copy of the internal values.
Definition GncOptimizer.h:157
\n+
void setInlierCostThresholds(const Vector &inthVec)
Set the maximum weighted residual error for an inlier (one for each factor).
Definition GncOptimizer.h:125
\n+
Vector calculateWeights(const Values &currentEstimate, const double mu)
Calculate gnc weights.
Definition GncOptimizer.h:423
\n+
double initializeMu() const
Initialize the gnc parameter mu such that loss is approximately convex (remark 5 in GNC paper).
Definition GncOptimizer.h:274
\n+
double updateMu(const double mu) const
Update the gnc parameter mu to gradually increase nonconvexity.
Definition GncOptimizer.h:319
\n+
bool equals(const GncOptimizer &other, double tol=1e-9) const
Equals.
Definition GncOptimizer.h:169
\n+
bool checkConvergence(const double mu, const Vector &weights, const double cost, const double prev_cost) const
Check for convergence between consecutive GNC iterations.
Definition GncOptimizer.h:391
\n+
void setInlierCostThresholds(const double inth)
Set the maximum weighted residual error for an inlier (same for all factors).
Definition GncOptimizer.h:117
\n+
void setInlierCostThresholdsAtProbability(const double alpha)
Set the maximum weighted residual error threshold by specifying the probability alpha that the inlier...
Definition GncOptimizer.h:132
\n+
NonlinearFactorGraph makeWeightedGraph(const Vector &weights) const
Create a graph where each factor is weighted by the gnc weights.
Definition GncOptimizer.h:398
\n+
const NonlinearFactorGraph & getFactors() const
Access a copy of the internal factor graph.
Definition GncOptimizer.h:154
\n+
const Vector & getWeights() const
Access a copy of the GNC weights.
Definition GncOptimizer.h:163
\n+
const GncParameters & getParams() const
Access a copy of the parameters.
Definition GncOptimizer.h:160
\n+
GncOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues, const GncParameters &params=GncParameters())
Constructor.
Definition GncOptimizer.h:59
\n+
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n+
boost::shared_ptr< This > shared_ptr
Noise model.
Definition NonlinearFactor.h:186
\n
Definition NonlinearFactorGraph.h:55
\n+
bool equals(const NonlinearFactorGraph &other, double tol=1e-9) const
Test equality.
Definition NonlinearFactorGraph.cpp:97
\n+
double error(const Values &values) const
unnormalized error, in the most common case
Definition NonlinearFactorGraph.cpp:170
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
In Gaussian factors, the error function returns either the negative log-likelihood,...
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,185 +1,616 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-LinearContainerFactor.h\n+GncOptimizer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1\n-10#pragma once\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+7\n+8 * See LICENSE for the license information\n+9\n+10 * -------------------------------------------------------------------------\n+- */\n 11\n-12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-13\n-14namespace _\bg_\bt_\bs_\ba_\bm {\n-15\n-16 // Forward declarations\n-17 class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br;\n-18 class HessianFactor;\n-19\n-_\b2_\b6class GTSAM_EXPORT _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n-27protected:\n+27#pragma once\n 28\n-29 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br factor_;\n-30 boost::optional linearizationPoint_;\n-31\n-33 _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br& factor, const\n-boost::optional& linearizationPoint);\n-34\n-35 // Some handy typedefs\n-36 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-37 typedef _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-38\n-39public:\n-40\n-41 typedef boost::shared_ptr shared_ptr;\n+29#include \n+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+31#include \n+32\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n+34/*\n+35 * Quantile of chi-squared distribution with given degrees of freedom at\n+probability alpha.\n+36 * Equivalent to chi2inv in Matlab.\n+37 */\n+38static double Chi2inv(const double alpha, const size_t dofs) {\n+39 boost::math::chi_squared_distribution chi2(dofs);\n+40 return boost::math::quantile(chi2, alpha);\n+41}\n 42\n-_\b4_\b4 _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br() {}\n-45\n-47 _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& factor, const _\bV_\ba_\bl_\bu_\be_\bs&\n-linearizationPoint = _\bV_\ba_\bl_\bu_\be_\bs());\n-48\n-50 _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& factor, const _\bV_\ba_\bl_\bu_\be_\bs&\n-linearizationPoint = _\bV_\ba_\bl_\bu_\be_\bs());\n-51\n-53 _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br& factor, const\n-_\bV_\ba_\bl_\bu_\be_\bs& linearizationPoint = _\bV_\ba_\bl_\bu_\be_\bs());\n-54\n-55 // Access\n+43/* *************************************************************************\n+*/\n+44template\n+_\b4_\b5class _\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n+46 public:\n+_\b4_\b8 typedef typename GncParameters::OptimizerType _\bB_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br;\n+49\n+50 private:\n+51 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh nfg_;\n+52 _\bV_\ba_\bl_\bu_\be_\bs state_;\n+53 GncParameters params_;\n+54 Vector weights_;\n+55 Vector barcSq_;\n 56\n-57 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br& factor() const { return factor_; }\n-58\n-59 // Testable\n-60\n-62 void print(const std::string& s = \"\", const KeyFormatter& keyFormatter =\n-gtsam::DefaultKeyFormatter) const override;\n+57 public:\n+_\b5_\b9 _\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs& initialValues,\n+60 const GncParameters& params = GncParameters())\n+61 : state_(initialValues),\n+62 params_(params) {\n 63\n-65 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override;\n-66\n-67 // NonlinearFactor\n-68\n-77 double error(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n-78\n-80 size_t dim() const override;\n-81\n-_\b8_\b3 const boost::optional& _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt() const { return\n-linearizationPoint_; }\n-84\n-101 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br linearize(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n-102\n-106 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br negateToGaussian() const;\n-107\n-111 NonlinearFactor::shared_ptr negateToNonlinear() const;\n-112\n-_\b1_\b1_\b9 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-120 return NonlinearFactor::shared_ptr(new _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br\n-(factor_,linearizationPoint_));\n-121 }\n-122\n-128 NonlinearFactor::shared_ptr rekey(\n-129 const std::map& rekey_mapping) const override;\n-130\n-135 NonlinearFactor::shared_ptr rekey(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& new_keys) const\n-override;\n-136\n-_\b1_\b3_\b8 inline bool _\bh_\ba_\bs_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt() const { return\n-linearizationPoint_.is_initialized(); }\n-139\n-143 bool isJacobian() const;\n-144 bool isHessian() const;\n-145\n-147 boost::shared_ptr toJacobian() const;\n-148\n-150 boost::shared_ptr toHessian() const;\n-151\n-156 static _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh ConvertLinearGraph(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh&\n-linear_graph,\n-157 const _\bV_\ba_\bl_\bu_\be_\bs& linearizationPoint = _\bV_\ba_\bl_\bu_\be_\bs());\n+64 // make sure all noiseModels are Gaussian or convert to Gaussian\n+65 nfg_._\br_\be_\bs_\bi_\bz_\be(graph.size());\n+66 for (size_t i = 0; i < graph.size(); i++) {\n+67 if (graph[i]) {\n+68 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br factor = boost::dynamic_pointer_cast<\n+69 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br>(graph[i]);\n+70 auto robust = boost::dynamic_pointer_cast<\n+71 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt>(factor->noiseModel());\n+72 // if the factor has a robust loss, we remove the robust loss\n+73 nfg_[i] = robust ? factor-> cloneWithNewNoiseModel(robust->noise()) :\n+factor;\n+74 }\n+75 }\n+76\n+77 // check that known inliers and outliers make sense:\n+78 std::vector inconsistentlySpecifiedWeights; // measurements the user\n+has incorrectly specified\n+79 // to be BOTH known inliers and known outliers\n+80 std::set_intersection(params.knownInliers.begin(),params.knownInliers.end(),\n+81 params.knownOutliers.begin(),params.knownOutliers.end(),\n+82 std::inserter(inconsistentlySpecifiedWeights,\n+inconsistentlySpecifiedWeights.begin()));\n+83 if(inconsistentlySpecifiedWeights.size() > 0){ // if we have inconsistently\n+specified weights, we throw an exception\n+84 params.print(\"params\\n\");\n+85 throw std::runtime_error(\"GncOptimizer::constructor: the user has selected\n+one or more measurements\"\n+86 \" to be BOTH a known inlier and a known outlier.\");\n+87 }\n+88 // check that known inliers are in the graph\n+89 for (size_t i = 0; i < params.knownInliers.size(); i++){\n+90 if( params.knownInliers[i] > nfg_._\bs_\bi_\bz_\be()-1 ){ // outside graph\n+91 throw std::runtime_error(\"GncOptimizer::constructor: the user has selected\n+one or more measurements\"\n+92 \"that are not in the factor graph to be known inliers.\");\n+93 }\n+94 }\n+95 // check that known outliers are in the graph\n+96 for (size_t i = 0; i < params.knownOutliers.size(); i++){\n+97 if( params.knownOutliers[i] > nfg_._\bs_\bi_\bz_\be()-1 ){ // outside graph\n+98 throw std::runtime_error(\"GncOptimizer::constructor: the user has selected\n+one or more measurements\"\n+99 \"that are not in the factor graph to be known outliers.\");\n+100 }\n+101 }\n+102 // initialize weights (if we don't have prior knowledge of inliers/outliers\n+103 // the weights are all initialized to 1.\n+104 weights_ = initializeWeightsFromKnownInliersAndOutliers();\n+105\n+106 // set default barcSq_ (inlier threshold)\n+107 double alpha = 0.99; // with this (default) probability, inlier residuals\n+are smaller than barcSq_\n+108 _\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs_\bA_\bt_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(alpha);\n+109 }\n+110\n+_\b1_\b1_\b7 void _\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs(const double inth) {\n+118 barcSq_ = inth * Vector::Ones(nfg_._\bs_\bi_\bz_\be());\n+119 }\n+120\n+_\b1_\b2_\b5 void _\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs(const Vector& inthVec) {\n+126 barcSq_ = inthVec;\n+127 }\n+128\n+_\b1_\b3_\b2 void _\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs_\bA_\bt_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(const double alpha) {\n+133 barcSq_ = Vector::Ones(nfg_._\bs_\bi_\bz_\be()); // initialize\n+134 for (size_t k = 0; k < nfg_._\bs_\bi_\bz_\be(); k++) {\n+135 if (nfg_[k]) {\n+136 barcSq_[k] = 0.5 * Chi2inv(alpha, nfg_[k]->dim()); // 0.5 derives from the\n+error definition in gtsam\n+137 }\n+138 }\n+139 }\n+140\n+_\b1_\b4_\b4 void _\bs_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs(const Vector w) {\n+145 if (size_t(w.size()) != nfg_._\bs_\bi_\bz_\be()) {\n+146 throw std::runtime_error(\n+147 \"GncOptimizer::setWeights: the number of specified weights\"\n+148 \" does not match the size of the factor graph.\");\n+149 }\n+150 weights_ = w;\n+151 }\n+152\n+_\b1_\b5_\b4 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs() const { return nfg_; }\n+155\n+_\b1_\b5_\b7 const _\bV_\ba_\bl_\bu_\be_\bs& _\bg_\be_\bt_\bS_\bt_\ba_\bt_\be() const { return state_; }\n 158\n-159 protected:\n-160 void initializeLinearizationPoint(const _\bV_\ba_\bl_\bu_\be_\bs& linearizationPoint);\n+_\b1_\b6_\b0 const GncParameters& _\bg_\be_\bt_\bP_\ba_\br_\ba_\bm_\bs() const { return params_;}\n 161\n-162 private:\n-_\b1_\b6_\b4 friend class boost::serialization::access;\n-165 template\n-166 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-167 ar & boost::serialization::make_nvp(\"NonlinearFactor\",\n-168 boost::serialization::base_object(*this));\n-169 ar & BOOST_SERIALIZATION_NVP(factor_);\n-170 ar & BOOST_SERIALIZATION_NVP(linearizationPoint_);\n-171 }\n-172\n-173}; // \\class LinearContainerFactor\n-174\n-_\b1_\b7_\b5template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br> : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-176\n-177} // \\namespace gtsam\n-178\n+_\b1_\b6_\b3 const Vector& _\bg_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs() const { return weights_;}\n+164\n+_\b1_\b6_\b6 const Vector& _\bg_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs() const {return barcSq_;}\n+167\n+_\b1_\b6_\b9 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br& other, double tol = 1e-9) const {\n+170 return nfg_._\be_\bq_\bu_\ba_\bl_\bs(other._\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs())\n+171 && _\be_\bq_\bu_\ba_\bl(weights_, other._\bg_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs())\n+172 && params_.equals(other._\bg_\be_\bt_\bP_\ba_\br_\ba_\bm_\bs())\n+173 && _\be_\bq_\bu_\ba_\bl(barcSq_, other._\bg_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs());\n+174 }\n+175\n+176 Vector initializeWeightsFromKnownInliersAndOutliers() const{\n+177 Vector weights = Vector::Ones(nfg_._\bs_\bi_\bz_\be());\n+178 for (size_t i = 0; i < params_.knownOutliers.size(); i++){\n+179 weights[ params_.knownOutliers[i] ] = 0.0; // known to be outliers\n+180 }\n+181 return weights;\n+182 }\n+183\n+_\b1_\b8_\b5 _\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() {\n+186 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph_initial = this->_\bm_\ba_\bk_\be_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bG_\br_\ba_\bp_\bh(weights_);\n+187 _\bB_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br baseOptimizer(\n+188 graph_initial, state_, params_.baseOptimizerParams);\n+189 _\bV_\ba_\bl_\bu_\be_\bs result = baseOptimizer.optimize();\n+190 double mu = _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bM_\bu();\n+191 double prev_cost = graph_initial._\be_\br_\br_\bo_\br(result);\n+192 double cost = 0.0; // this will be updated in the main loop\n+193\n+194 // handle the degenerate case that corresponds to small\n+195 // maximum residual errors at initialization\n+196 // For GM: if residual error is small, mu -> 0\n+197 // For TLS: if residual error is small, mu -> -1\n+198 int nrUnknownInOrOut = nfg_._\bs_\bi_\bz_\be() - ( params_.knownInliers.size() +\n+params_.knownOutliers.size() );\n+199 // ^^ number of measurements that are not known to be inliers or outliers\n+(GNC will need to figure them out)\n+200 if (mu <= 0 || nrUnknownInOrOut == 0) { // no need to even call GNC in this\n+case\n+201 if (mu <= 0 && params_.verbosity >= GncParameters::Verbosity::SUMMARY) {\n+202 std::cout << \"GNC Optimizer stopped because maximum residual at \"\n+203 \"initialization is small.\"\n+204 << std::endl;\n+205 }\n+206 if (nrUnknownInOrOut==0 && params_.verbosity >= GncParameters::Verbosity::\n+SUMMARY) {\n+207 std::cout << \"GNC Optimizer stopped because all measurements are already\n+known to be inliers or outliers\"\n+208 << std::endl;\n+209 }\n+210 if (params_.verbosity >= GncParameters::Verbosity::MU) {\n+211 std::cout << \"mu: \" << mu << std::endl;\n+212 }\n+213 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {\n+214 result.print(\"result\\n\");\n+215 }\n+216 return result;\n+217 }\n+218\n+219 size_t iter;\n+220 for (iter = 0; iter < params_.maxIterations; iter++) {\n+221\n+222 // display info\n+223 if (params_.verbosity >= GncParameters::Verbosity::MU) {\n+224 std::cout << \"iter: \" << iter << std::endl;\n+225 std::cout << \"mu: \" << mu << std::endl;\n+226 }\n+227 if (params_.verbosity >= GncParameters::Verbosity::WEIGHTS) {\n+228 std::cout << \"weights: \" << weights_ << std::endl;\n+229 }\n+230 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {\n+231 result.print(\"result\\n\");\n+232 }\n+233 // weights update\n+234 weights_ = _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(result, mu);\n+235\n+236 // variable/values update\n+237 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph_iter = this->_\bm_\ba_\bk_\be_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bG_\br_\ba_\bp_\bh(weights_);\n+238 _\bB_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br baseOptimizer_iter(\n+239 graph_iter, state_, params_.baseOptimizerParams);\n+240 result = baseOptimizer_iter.optimize();\n+241\n+242 // stopping condition\n+243 cost = graph_iter._\be_\br_\br_\bo_\br(result);\n+244 if (_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(mu, weights_, cost, prev_cost)) {\n+245 break;\n+246 }\n+247\n+248 // update mu\n+249 mu = _\bu_\bp_\bd_\ba_\bt_\be_\bM_\bu(mu);\n+250\n+251 // get ready for next iteration\n+252 prev_cost = cost;\n+253\n+254 // display info\n+255 if (params_.verbosity >= GncParameters::Verbosity::VALUES) {\n+256 std::cout << \"previous cost: \" << prev_cost << std::endl;\n+257 std::cout << \"current cost: \" << cost << std::endl;\n+258 }\n+259 }\n+260 // display info\n+261 if (params_.verbosity >= GncParameters::Verbosity::SUMMARY) {\n+262 std::cout << \"final iterations: \" << iter << std::endl;\n+263 std::cout << \"final mu: \" << mu << std::endl;\n+264 std::cout << \"previous cost: \" << prev_cost << std::endl;\n+265 std::cout << \"current cost: \" << cost << std::endl;\n+266 }\n+267 if (params_.verbosity >= GncParameters::Verbosity::WEIGHTS) {\n+268 std::cout << \"final weights: \" << weights_ << std::endl;\n+269 }\n+270 return result;\n+271 }\n+272\n+_\b2_\b7_\b4 double _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bM_\bu() const {\n+275\n+276 double mu_init = 0.0;\n+277 // initialize mu to the value specified in Remark 5 in GNC paper.\n+278 switch (params_.lossType) {\n+279 case GncLossType::GM:\n+280 /* surrogate cost is convex for large mu. initialize as in remark 5 in GNC\n+paper.\n+281 Since barcSq_ can be different for each factor, we compute the max of the\n+quantity in remark 5 in GNC paper\n+282 */\n+283 for (size_t k = 0; k < nfg_._\bs_\bi_\bz_\be(); k++) {\n+284 if (nfg_[k]) {\n+285 mu_init = std::max(mu_init, 2 * nfg_[k]->error(state_) / barcSq_[k]);\n+286 }\n+287 }\n+288 return mu_init; // initial mu\n+289 case GncLossType::TLS:\n+290 /* surrogate cost is convex for mu close to zero. initialize as in remark 5\n+in GNC paper.\n+291 degenerate case: 2 * rmax_sq - params_.barcSq < 0 (handled in the main\n+loop)\n+292 according to remark mu = params_.barcSq / (2 * rmax_sq - params_.barcSq) =\n+params_.barcSq/ excessResidual\n+293 however, if the denominator is 0 or negative, we return mu = -1 which leads\n+to termination of the main GNC loop.\n+294 Since barcSq_ can be different for each factor, we look for the minimimum\n+(positive) quantity in remark 5 in GNC paper\n+295 */\n+296 mu_init = std::numeric_limits::infinity();\n+297 for (size_t k = 0; k < nfg_._\bs_\bi_\bz_\be(); k++) {\n+298 if (nfg_[k]) {\n+299 double rk = nfg_[k]->_\be_\br_\br_\bo_\br(state_);\n+300 mu_init = (2 * rk - barcSq_[k]) > 0 ? // if positive, update mu, otherwise\n+keep same\n+301 std::min(mu_init, barcSq_[k] / (2 * rk - barcSq_[k]) ) : mu_init;\n+302 }\n+303 }\n+304 if (mu_init >= 0 && mu_init < 1e-6){\n+305 mu_init = 1e-6; // if mu ~ 0 (but positive), that means we have\n+measurements with large errors,\n+306 // i.e., rk > barcSq_[k] and rk very large, hence we threshold to 1e-6 to\n+avoid mu = 0\n+307 }\n+308\n+309 return mu_init > 0 && !std::isinf(mu_init) ? mu_init : -1; // if mu <= 0 or\n+mu = inf, return -1,\n+310 // which leads to termination of the main gnc loop. In this case, all\n+residuals are already below the threshold\n+311 // and there is no need to robustify (TLS = least squares)\n+312 default:\n+313 throw std::runtime_error(\n+314 \"GncOptimizer::initializeMu: called with unknown loss type.\");\n+315 }\n+316 }\n+317\n+_\b3_\b1_\b9 double _\bu_\bp_\bd_\ba_\bt_\be_\bM_\bu(const double mu) const {\n+320 switch (params_.lossType) {\n+321 case GncLossType::GM:\n+322 // reduce mu, but saturate at 1 (original cost is recovered for mu -> 1)\n+323 return std::max(1.0, mu / params_.muStep);\n+324 case GncLossType::TLS:\n+325 // increases mu at each iteration (original cost is recovered for mu -\n+> inf)\n+326 return mu * params_.muStep;\n+327 default:\n+328 throw std::runtime_error(\n+329 \"GncOptimizer::updateMu: called with unknown loss type.\");\n+330 }\n+331 }\n+332\n+_\b3_\b3_\b4 bool _\bc_\bh_\be_\bc_\bk_\bM_\bu_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(const double mu) const {\n+335 bool muConverged = false;\n+336 switch (params_.lossType) {\n+337 case GncLossType::GM:\n+338 muConverged = std::fabs(mu - 1.0) < 1e-9; // mu=1 recovers the original GM\n+function\n+339 break;\n+340 case GncLossType::TLS:\n+341 muConverged = false; // for TLS there is no stopping condition on mu (it\n+must tend to infinity)\n+342 break;\n+343 default:\n+344 throw std::runtime_error(\n+345 \"GncOptimizer::checkMuConvergence: called with unknown loss type.\");\n+346 }\n+347 if (muConverged && params_.verbosity >= GncParameters::Verbosity::SUMMARY)\n+348 std::cout << \"muConverged = true \" << std::endl;\n+349 return muConverged;\n+350 }\n+351\n+_\b3_\b5_\b3 bool _\bc_\bh_\be_\bc_\bk_\bC_\bo_\bs_\bt_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(const double cost, const double prev_cost) const\n+{\n+354 bool costConverged = std::fabs(cost - prev_cost) / std::max(prev_cost, 1e-\n+7)\n+355 < params_.relativeCostTol;\n+356 if (costConverged && params_.verbosity >= GncParameters::Verbosity::\n+SUMMARY){\n+357 std::cout << \"checkCostConvergence = true (prev. cost = \" << prev_cost\n+358 << \", curr. cost = \" << cost << \")\" << std::endl;\n+359 }\n+360 return costConverged;\n+361 }\n+362\n+_\b3_\b6_\b4 bool _\bc_\bh_\be_\bc_\bk_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(const Vector& weights) const {\n+365 bool weightsConverged = false;\n+366 switch (params_.lossType) {\n+367 case GncLossType::GM:\n+368 weightsConverged = false; // for GM, there is no clear binary convergence\n+for the weights\n+369 break;\n+370 case GncLossType::TLS:\n+371 weightsConverged = true;\n+372 for (int i = 0; i < weights.size(); i++) {\n+373 if (std::fabs(weights[i] - std::round(weights[i]))\n+374 > params_.weightsTol) {\n+375 weightsConverged = false;\n+376 break;\n+377 }\n+378 }\n+379 break;\n+380 default:\n+381 throw std::runtime_error(\n+382 \"GncOptimizer::checkWeightsConvergence: called with unknown loss type.\");\n+383 }\n+384 if (weightsConverged\n+385 && params_.verbosity >= GncParameters::Verbosity::SUMMARY)\n+386 std::cout << \"weightsConverged = true \" << std::endl;\n+387 return weightsConverged;\n+388 }\n+389\n+_\b3_\b9_\b1 bool _\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(const double mu, const Vector& weights,\n+392 const double cost, const double prev_cost) const {\n+393 return _\bc_\bh_\be_\bc_\bk_\bC_\bo_\bs_\bt_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(cost, prev_cost)\n+394 || _\bc_\bh_\be_\bc_\bk_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(weights) || _\bc_\bh_\be_\bc_\bk_\bM_\bu_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(mu);\n+395 }\n+396\n+_\b3_\b9_\b8 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bm_\ba_\bk_\be_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bG_\br_\ba_\bp_\bh(const Vector& weights) const {\n+399 // make sure all noiseModels are Gaussian or convert to Gaussian\n+400 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh newGraph;\n+401 newGraph._\br_\be_\bs_\bi_\bz_\be(nfg_._\bs_\bi_\bz_\be());\n+402 for (size_t i = 0; i < nfg_._\bs_\bi_\bz_\be(); i++) {\n+403 if (nfg_[i]) {\n+404 auto factor = boost::dynamic_pointer_cast<\n+405 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br>(nfg_[i]);\n+406 auto noiseModel =\n+407 boost::dynamic_pointer_cast(\n+408 factor->noiseModel());\n+409 if (noiseModel) {\n+410 Matrix newInfo = weights[i] * noiseModel->information();\n+411 auto newNoiseModel = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn(newInfo);\n+412 newGraph[i] = factor->cloneWithNewNoiseModel(newNoiseModel);\n+413 } else {\n+414 throw std::runtime_error(\n+415 \"GncOptimizer::makeWeightedGraph: unexpected non-Gaussian noise model.\");\n+416 }\n+417 }\n+418 }\n+419 return newGraph;\n+420 }\n+421\n+_\b4_\b2_\b3 Vector _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& currentEstimate, const double mu) {\n+424 Vector weights = initializeWeightsFromKnownInliersAndOutliers();\n+425\n+426 // do not update the weights that the user has decided are known inliers\n+427 std::vector allWeights;\n+428 for (size_t k = 0; k < nfg_._\bs_\bi_\bz_\be(); k++) {\n+429 allWeights.push_back(k);\n+430 }\n+431 std::vector knownWeights;\n+432 std::set_union(params_.knownInliers.begin(), params_.knownInliers.end(),\n+433 params_.knownOutliers.begin(), params_.knownOutliers.end(),\n+434 std::inserter(knownWeights, knownWeights.begin()));\n+435\n+436 std::vector unknownWeights;\n+437 std::set_difference(allWeights.begin(), allWeights.end(),\n+438 knownWeights.begin(), knownWeights.end(),\n+439 std::inserter(unknownWeights, unknownWeights.begin()));\n+440\n+441 // update weights of known inlier/outlier measurements\n+442 switch (params_.lossType) {\n+443 case GncLossType::GM: { // use eq (12) in GNC paper\n+444 for (size_t k : unknownWeights) {\n+445 if (nfg_[k]) {\n+446 double u2_k = nfg_[k]->_\be_\br_\br_\bo_\br(currentEstimate); // squared (and whitened)\n+residual\n+447 weights[k] = std::pow(\n+448 (mu * barcSq_[k]) / (u2_k + mu * barcSq_[k]), 2);\n+449 }\n+450 }\n+451 return weights;\n+452 }\n+453 case GncLossType::TLS: { // use eq (14) in GNC paper\n+454 for (size_t k : unknownWeights) {\n+455 if (nfg_[k]) {\n+456 double u2_k = nfg_[k]->_\be_\br_\br_\bo_\br(currentEstimate); // squared (and whitened)\n+residual\n+457 double upperbound = (mu + 1) / mu * barcSq_[k];\n+458 double lowerbound = mu / (mu + 1) * barcSq_[k];\n+459 weights[k] = std::sqrt(barcSq_[k] * mu * (mu + 1) / u2_k) - mu;\n+460 if (u2_k >= upperbound || weights[k] < 0) {\n+461 weights[k] = 0;\n+462 } else if (u2_k <= lowerbound || weights[k] > 1) {\n+463 weights[k] = 1;\n+464 }\n+465 }\n+466 }\n+467 return weights;\n+468 }\n+469 default:\n+470 throw std::runtime_error(\n+471 \"GncOptimizer::calculateWeights: called with unknown loss type.\");\n+472 }\n+473 }\n+474};\n+475\n+476}\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl\n+bool equal(const T &obj1, const T &obj2, double tol)\n+Call equal on the object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n+virtual void resize(size_t size)\n+Directly resize the number of factors in the graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:381\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+return the number of factors (including any null factors set by remove() ).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:326\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\b:_\b:_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+static shared_ptr Information(const Matrix &M, bool smart=true)\n+A Gaussian noise model created by specifying an information matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.cpp:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bR_\bo_\bb_\bu_\bs_\bt\n+Base class for robust error models The robust M-estimators above simply tell us\n+how to re-weight the ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:642\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n+bool checkWeightsConvergence(const Vector &weights) const\n+Check convergence of weights to binary values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:364\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+void setWeights(const Vector w)\n+Set weights for each factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:144\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bM_\bu_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n+bool checkMuConvergence(const double mu) const\n+Check if we have reached the value of mu for which the surrogate loss matches\n+the original loss.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:334\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bB_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+GncParameters::OptimizerType BaseOptimizer\n+For each parameter, specify the corresponding optimizer: e.g.,\n+GaussNewtonParams -> GaussNewtonOptimi...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n+Values optimize()\n+Compute optimal solution using graduated non-convexity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs\n+const Vector & getInlierCostThresholds() const\n+Get the inlier threshold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:166\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bs_\bt_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n+bool checkCostConvergence(const double cost, const double prev_cost) const\n+Check convergence of relative cost differences.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:353\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\be_\bt_\bS_\bt_\ba_\bt_\be\n+const Values & getState() const\n+Access a copy of the internal values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs\n+void setInlierCostThresholds(const Vector &inthVec)\n+Set the maximum weighted residual error for an inlier (one for each factor).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:125\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+Vector calculateWeights(const Values ¤tEstimate, const double mu)\n+Calculate gnc weights.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:423\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bM_\bu\n+double initializeMu() const\n+Initialize the gnc parameter mu such that loss is approximately convex (remark\n+5 in GNC paper).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:274\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bM_\bu\n+double updateMu(const double mu) const\n+Update the gnc parameter mu to gradually increase nonconvexity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:319\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const GncOptimizer &other, double tol=1e-9) const\n+Equals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:169\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n+bool checkConvergence(const double mu, const Vector &weights, const double\n+cost, const double prev_cost) const\n+Check for convergence between consecutive GNC iterations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:391\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs\n+void setInlierCostThresholds(const double inth)\n+Set the maximum weighted residual error for an inlier (same for all factors).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\be_\bt_\bI_\bn_\bl_\bi_\be_\br_\bC_\bo_\bs_\bt_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bs_\bA_\bt_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by\n+void setInlierCostThresholdsAtProbability(const double alpha)\n+Set the maximum weighted residual error threshold by specifying the probability\n+alpha that the inlier...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bm_\ba_\bk_\be_\bW_\be_\bi_\bg_\bh_\bt_\be_\bd_\bG_\br_\ba_\bp_\bh\n+NonlinearFactorGraph makeWeightedGraph(const Vector &weights) const\n+Create a graph where each factor is weighted by the gnc weights.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:398\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+const NonlinearFactorGraph & getFactors() const\n+Access a copy of the internal factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs\n+const Vector & getWeights() const\n+Access a copy of the GNC weights.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\be_\bt_\bP_\ba_\br_\ba_\bm_\bs\n+const GncParameters & getParams() const\n+Access a copy of the parameters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+GncOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues,\n+const GncParameters ¶ms=GncParameters())\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncOptimizer.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n+density Templated on...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor using the canonical parameters (information form)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor in the squared-error form.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Dummy version of a generic linear factor to be injected into a nonlinear factor\n-graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LinearContainerFactor.h:26\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-NonlinearFactor::shared_ptr clone() const override\n-Creates a shared_ptr clone of the factor - needs to be specialized to allow for\n-subclasses.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LinearContainerFactor.h:119\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br\n-LinearContainerFactor()\n-Default constructor - necessary for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LinearContainerFactor.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt\n-const boost::optional< Values > & linearizationPoint() const\n-Extract the linearization point used in recalculating error.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LinearContainerFactor.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\ba_\bs_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt\n-bool hasLinearizationPoint() const\n-Casting syntactic sugar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LinearContainerFactor.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+Noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:186\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactorGraph &other, double tol=1e-9) const\n+Test equality.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.cpp:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &values) const\n+unnormalized error, in the most common case\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.cpp:170\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-In Gaussian factors, the error function returns either the negative log-\n-likelihood,...\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bG_\bn_\bc_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01106.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01106.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GraphvizFormatting.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,35 +95,34 @@\n \n \n \n \n
\n \n-
GraphvizFormatting.cpp File Reference
\n+
ISAM2.cpp File Reference
\n
\n
\n \n-

Graphviz formatter for NonlinearFactorGraph. \n+

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \n More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Graphviz formatter for NonlinearFactorGraph.

\n-
Author
Frank Dellaert
\n-
Date
December, 2021
\n+

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.

\n+
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GraphvizFormatting.cpp File Reference\n-Graphviz formatter for NonlinearFactorGraph. _\bM_\bo_\br_\be_\b._\b._\b.\n+ISAM2.cpp File Reference\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Graphviz formatter for NonlinearFactorGraph.\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization.\n Author\n- Frank Dellaert\n- Date\n- December, 2021\n+ Michael Kaess, Richard Roberts, Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b._\bc_\bp_\bp\n+ * _\bI_\bS_\bA_\bM_\b2_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01109.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01109.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GaussNewtonOptimizer.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Clique.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,32 +94,45 @@\n \n \n \n \n \n
\n \n-
GaussNewtonOptimizer.cpp File Reference
\n+Namespaces |\n+Functions
\n+
ISAM2Clique.cpp File Reference
\n \n
\n+\n+

Specialized iSAM2 Clique. \n+More...

\n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n

\n+Functions

size_t gtsam::optimizeWildfire (const ISAM2Clique::shared_ptr &root, double threshold, const KeySet &replaced, VectorValues *delta)
 Optimize the BayesTree, starting from the root.
 
\n+size_t gtsam::optimizeWildfireNonRecursive (const ISAM2Clique::shared_ptr &root, double threshold, const KeySet &keys, VectorValues *delta)
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
Feb 26, 2012
\n+

Specialized iSAM2 Clique.

\n+
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussNewtonOptimizer.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+ISAM2Clique.cpp File Reference\n+Specialized iSAM2 Clique. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+size_t\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bW_\bi_\bl_\bd_\bf_\bi_\br_\be (const ISAM2Clique::shared_ptr &root, double\n+ threshold, const _\bK_\be_\by_\bS_\be_\bt &replaced, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs *delta)\n+\u00a0 Optimize the _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be, starting from the root.\n+\u00a0\n+size_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpt\bti\bim\bmi\biz\bze\beW\bWi\bil\bld\bdf\bfi\bir\bre\beN\bNo\bon\bnR\bRe\bec\bcu\bur\brs\bsi\biv\bve\be (const ISAM2Clique::shared_ptr\n+ &root, double threshold, const _\bK_\be_\by_\bS_\be_\bt &keys, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs *delta)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Specialized iSAM2 Clique.\n Author\n- Richard Roberts\n- Date\n- Feb 26, 2012\n+ Michael Kaess, Richard Roberts, Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\n+ * _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01115.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01115.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactorGraph.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GraphvizFormatting.h File Reference\n \n \n \n \n \n \n \n@@ -94,39 +94,45 @@\n \n \n \n \n \n
\n \n-
NonlinearFactorGraph.cpp File Reference
\n+
GraphvizFormatting.h File Reference
\n
\n
\n \n-

Factor Graph Consisting of non-linear factors. \n+

Graphviz formatter for NonlinearFactorGraph. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

struct  gtsam::GraphvizFormatting
 Formatting options and functions for saving a NonlinearFactorGraph instance in GraphViz format. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Factor Graph Consisting of non-linear factors.

\n-
Author
Frank Dellaert
\n-
\n-Carlos Nieto
\n-
\n-Christian Potthast
\n+

Graphviz formatter for NonlinearFactorGraph.

\n+
Author
Frank Dellaert
\n+
Date
December, 2021
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-NonlinearFactorGraph.cpp File Reference\n-Factor Graph Consisting of non-linear factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+GraphvizFormatting.h File Reference\n+Graphviz formatter for NonlinearFactorGraph. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg\n+\u00a0 Formatting options and functions for saving a _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+ instance in GraphViz format. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor Graph Consisting of non-linear factors.\n+Graphviz formatter for NonlinearFactorGraph.\n Author\n Frank Dellaert\n- Carlos Nieto\n- Christian Potthast\n+ Date\n+ December, 2021\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n+ * _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01118.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01118.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/CustomFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/WhiteNoiseFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,35 +94,55 @@\n \n \n \n \n \n
\n \n-
CustomFactor.cpp File Reference
\n+Classes |\n+Namespaces |\n+Variables
\n+
WhiteNoiseFactor.h File Reference
\n \n
\n \n-

Class to enable arbitrary factors with runtime swappable error function. \n+

Binary white noise factor. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::WhiteNoiseFactor
 Binary factor to estimate parameters of zero-mean Gaussian white noise. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Variables

\n+const double gtsam::logSqrt2PI = log(std::sqrt(2.0 * M_PI))
 constant needed below
 
\n

Detailed Description

\n-

Class to enable arbitrary factors with runtime swappable error function.

\n-
Author
Fan Jiang
\n+

Binary white noise factor.

\n+
Author
Chris Beall
\n+
\n+Frank Dellaert
\n+
Date
September 2011
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-CustomFactor.cpp File Reference\n-Class to enable arbitrary factors with runtime swappable error function.\n-_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+WhiteNoiseFactor.h File Reference\n+Binary white noise factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Binary factor to estimate parameters of zero-mean Gaussian white noise.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n+const double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\blo\bog\bgS\bSq\bqr\brt\bt2\b2P\bPI\bI = log(std::sqrt(2.0 * M_PI))\n+\u00a0 constant needed below\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Class to enable arbitrary factors with runtime swappable error function.\n+Binary white noise factor.\n Author\n- Fan Jiang\n+ Chris Beall\n+ Frank Dellaert\n+ Date\n+ September 2011\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01121.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01121.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/factorTesting.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizer.h File Reference\n \n \n \n \n \n \n \n@@ -94,109 +94,56 @@\n \n \n \n \n \n
\n \n-
factorTesting.h File Reference
\n+
NonlinearOptimizer.h File Reference
\n
\n
\n \n-

Evaluate derivatives of a nonlinear factor numerically. \n+

Base class and parameters for nonlinear optimization algorithms. \n More...

\n \n

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::NonlinearOptimizer
 This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a NonlinearFactorGraph. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-

\n-Macros

#define EXPECT_CORRECT_FACTOR_JACOBIANS(factor, values, numerical_derivative_step, tolerance)    { EXPECT(gtsam::internal::testFactorJacobians(name_, factor, values, numerical_derivative_step, tolerance)); }
 Check the Jacobians produced by a factor against finite differences.
 
\n \n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n

\n Functions

JacobianFactor gtsam::linearizeNumerically (const NoiseModelFactor &factor, const Values &values, double delta=1e-5)
 Linearize a nonlinear factor using numerical differentiation The benefit of this method is that it does not need to know what types are involved to evaluate the factor.
 
\n-bool gtsam::internal::testFactorJacobians (const std::string &name_, const NoiseModelFactor &factor, const gtsam::Values &values, double delta, double tolerance)
 
\n+bool gtsam::checkConvergence (double relativeErrorTreshold, double absoluteErrorTreshold, double errorThreshold, double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity=NonlinearOptimizerParams::SILENT)
 Check whether the relative error decrease is less than relativeErrorTreshold, the absolute error decrease is less than absoluteErrorTreshold, or the error itself is less than errorThreshold.
 
\n+GTSAM_EXPORT bool gtsam::checkConvergence (const NonlinearOptimizerParams &params, double currentError, double newError)
 
\n

Detailed Description

\n-

Evaluate derivatives of a nonlinear factor numerically.

\n-
Date
September 18, 2014
\n-
Author
Frank Dellaert
\n-
\n-Paul Furgale
\n-

Macro Definition Documentation

\n-\n-

◆ EXPECT_CORRECT_FACTOR_JACOBIANS

\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-
#define EXPECT_CORRECT_FACTOR_JACOBIANS( factor,
 values,
 numerical_derivative_step,
 tolerance 
)    { EXPECT(gtsam::internal::testFactorJacobians(name_, factor, values, numerical_derivative_step, tolerance)); }
\n-
\n-\n-

Check the Jacobians produced by a factor against finite differences.

\n-
Parameters
\n- \n- \n- \n- \n- \n-
factorThe factor to test.
valuesValues filled in for testing the Jacobians.
numerical_derivative_stepThe step to use when computing the numerical derivative Jacobians
toleranceThe numerical tolerance to use when comparing Jacobians.
\n-
\n-
\n-\n-
\n-
\n-
\n+

Base class and parameters for nonlinear optimization algorithms.

\n+
Author
Richard Roberts
\n+
Date
Sep 7, 2009
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,60 +1,41 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-factorTesting.h File Reference\n-Evaluate derivatives of a nonlinear factor numerically. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+NonlinearOptimizer.h File Reference\n+Base class and parameters for nonlinear optimization algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+\u00a0 This is the abstract interface for classes that can optimize for the\n+ maximum-likelihood estimate of a _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bE_\bX_\bP_\bE_\bC_\bT_\b__\bC_\bO_\bR_\bR_\bE_\bC_\bT_\b__\bF_\bA_\bC_\bT_\bO_\bR_\b__\bJ_\bA_\bC_\bO_\bB_\bI_\bA_\bN_\bS(factor, values,\n- numerical_derivative_step, tolerance)\u00a0\u00a0\u00a0 { EXPECT(gtsam::internal::\n- testFactorJacobians(name_, factor, values, numerical_derivative_step,\n- tolerance)); }\n-\u00a0 Check the Jacobians produced by a factor against finite differences.\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bN_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bl_\by (const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br &factor,\n- const _\bV_\ba_\bl_\bu_\be_\bs &values, double delta=1e-5)\n- Linearize a nonlinear factor using numerical differentiation\n-\u00a0 The benefit of this method is that it does not need to know\n- what types are involved to evaluate the factor.\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bch\bhe\bec\bck\bkC\bCo\bon\bnv\bve\ber\brg\bge\ben\bnc\bce\be (double relativeErrorTreshold,\n+ double absoluteErrorTreshold, double errorThreshold, double\n+ currentError, double newError, _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:\n+ _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by verbosity=NonlinearOptimizerParams::SILENT)\n+ Check whether the relative error decrease is less than\n+\u00a0 relativeErrorTreshold, the absolute error decrease is less\n+ than absoluteErrorTreshold, o\bor\br the error itself is less than\n+ errorThreshold.\n \u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:t\bte\bes\bst\btF\bFa\bac\bct\bto\bor\brJ\bJa\bac\bco\bob\bbi\bia\ban\bns\bs (const std::string &name_,\n- const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br &factor, const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs &values,\n- double delta, double tolerance)\n+GTSAM_EXPORT bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bch\bhe\bec\bck\bkC\bCo\bon\bnv\bve\ber\brg\bge\ben\bnc\bce\be (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+ ¶ms, double currentError, double newError)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Evaluate derivatives of a nonlinear factor numerically.\n- Date\n- September 18, 2014\n+Base class and parameters for nonlinear optimization algorithms.\n Author\n- Frank Dellaert\n- Paul Furgale\n-*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0E\bEX\bXP\bPE\bEC\bCT\bT_\b_C\bCO\bOR\bRR\bRE\bEC\bCT\bT_\b_F\bFA\bAC\bCT\bTO\bOR\bR_\b_J\bJA\bAC\bCO\bOB\bBI\bIA\bAN\bNS\bS *\b**\b**\b**\b**\b*\n-#define EXPECT_CORRECT_FACTOR_JACOBIANS ( \u00a0 factor,\n- \u00a0 values,\n- \u00a0 numerical_derivative_step,\n- \u00a0 tolerance\u00a0\n- \u00a0\u00a0\u00a0 { EXPECT(gtsam::internal::\n- ) testFactorJacobians(name_, factor,\n- values, numerical_derivative_step,\n- tolerance)); }\n-Check the Jacobians produced by a factor against finite differences.\n- Parameters\n- factor The factor to test.\n- values _\bV_\ba_\bl_\bu_\be_\bs filled in for testing the Jacobians.\n- numerical_derivative_step The step to use when computing the numerical\n- derivative Jacobians\n- tolerance The numerical tolerance to use when comparing\n- Jacobians.\n+ Richard Roberts\n+ Date\n+ Sep 7, 2009\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bf_\ba_\bc_\bt_\bo_\br_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01121.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01121.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a01121 = [\n- [\"EXPECT_CORRECT_FACTOR_JACOBIANS\", \"a01121.html#a8ec37fe83eda47404b8588e1f012df21\", null],\n- [\"linearizeNumerically\", \"a01121.html#a9753b4e62378151d30bf8af5e2fc1602\", null]\n+ [\"gtsam::NonlinearOptimizer\", \"a04552.html\", \"a04552\"],\n+ [\"checkConvergence\", \"a01121.html#a3382482454c164c6f5817dcbe6f932b3\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01121_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01121_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/factorTesting.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizer.h Source File\n \n \n \n \n \n \n \n@@ -98,136 +98,111 @@\n
No Matches
\n \n \n \n \n \n
\n-
factorTesting.h
\n+
NonlinearOptimizer.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-\n-
24#include <string>
\n-
25#include <vector>
\n-
26
\n-
27namespace gtsam {
\n-
28
\n-
\n-\n-
40 const Values& values,
\n-
41 double delta = 1e-5) {
\n-
42 // We will fill a vector of key/Jacobians pairs (a map would sort)
\n-
43 std::vector<std::pair<Key, Matrix> > jacobians;
\n-
44
\n-
45 // Get size
\n-
46 const Vector e = factor.whitenedError(values);
\n-
47 const size_t rows = e.size();
\n-
48
\n-
49 // Loop over all variables
\n-
50 const double one_over_2delta = 1.0 / (2.0 * delta);
\n-
51 for (Key key : factor) {
\n-
52 // Compute central differences using the values struct.
\n-
53 VectorValues dX = values.zeroVectors();
\n-
54 const size_t cols = dX.dim(key);
\n-
55 Matrix J = Matrix::Zero(rows, cols);
\n-
56 for (size_t col = 0; col < cols; ++col) {
\n-
57 Vector dx = Vector::Zero(cols);
\n-
58 dx(col) = delta;
\n-
59 dX[key] = dx;
\n-
60 Values eval_values = values.retract(dX);
\n-
61 const Vector left = factor.whitenedError(eval_values);
\n-
62 dx(col) = -delta;
\n-
63 dX[key] = dx;
\n-
64 eval_values = values.retract(dX);
\n-
65 const Vector right = factor.whitenedError(eval_values);
\n-
66 J.col(col) = (left - right) * one_over_2delta;
\n-
67 }
\n-
68 jacobians.emplace_back(key, J);
\n-
69 }
\n-
70
\n-
71 // Next step...return JacobianFactor
\n-
72 return JacobianFactor(jacobians, -e);
\n-
73}
\n-
\n-
74
\n-
75namespace internal {
\n-
76// CPPUnitLite-style test for linearization of a factor
\n-
77inline bool testFactorJacobians(const std::string& name_,
\n-
78 const NoiseModelFactor& factor,
\n-
79 const gtsam::Values& values, double delta,
\n-
80 double tolerance) {
\n-
81 // Create expected value by numerical differentiation
\n-
82 JacobianFactor expected = linearizeNumerically(factor, values, delta);
\n-
83
\n-
84 // Create actual value by linearize
\n-
85 auto actual =
\n-
86 boost::dynamic_pointer_cast<JacobianFactor>(factor.linearize(values));
\n-
87 if (!actual) return false;
\n+
19#pragma once
\n+
20
\n+\n+\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
26namespace internal { struct NonlinearOptimizerState; }
\n+
27
\n+
\n+
75class GTSAM_EXPORT NonlinearOptimizer {
\n+
76
\n+
77protected:
\n+\n+
79
\n+
80 std::unique_ptr<internal::NonlinearOptimizerState> state_;
\n+
81
\n+
82public:
\n+
84 using shared_ptr = boost::shared_ptr<const NonlinearOptimizer>;
\n+
85
\n
88
\n-
89 // Check cast result and then equality
\n-
90 bool equal = assert_equal(expected, *actual, tolerance);
\n-
91
\n-
92 // if not equal, test individual jacobians:
\n-
93 if (!equal) {
\n-
94 for (size_t i = 0; i < actual->size(); i++) {
\n-
95 bool i_good =
\n-
96 assert_equal((Matrix)(expected.getA(expected.begin() + i)),
\n-
97 (Matrix)(actual->getA(actual->begin() + i)), tolerance);
\n-
98 if (!i_good) {
\n-
99 std::cout << "Mismatch in Jacobian " << i + 1
\n-
100 << " (base 1), as shown above" << std::endl;
\n-
101 }
\n-
102 }
\n-
103 }
\n-
104
\n-
105 return equal;
\n-
106}
\n-
107} // namespace internal
\n-
108
\n-
\n-
114#define EXPECT_CORRECT_FACTOR_JACOBIANS(factor, values, numerical_derivative_step, tolerance) \\
\n-
115 { EXPECT(gtsam::internal::testFactorJacobians(name_, factor, values, numerical_derivative_step, tolerance)); }
\n-
\n+
98 virtual const Values& optimize() { defaultOptimize(); return values(); }
\n+
99
\n+
106 const Values& optimizeSafely();
\n+
107
\n+
109 double error() const;
\n+
110
\n+
112 size_t iterations() const;
\n+
113
\n+
115 const Values &values() const;
\n
116
\n-
117} // namespace gtsam
\n-
Some functions to compute numerical derivatives.
\n-
Non-linear factor base classes.
\n+
118 const NonlinearFactorGraph &graph() const { return graph_; }
\n+
119
\n+
121
\n+
124
\n+
126 virtual ~NonlinearOptimizer();
\n+
127
\n+
129 virtual VectorValues solve(const GaussianFactorGraph &gfg,
\n+
130 const NonlinearOptimizerParams& params) const;
\n+
131
\n+\n+
137
\n+
139
\n+
140protected:
\n+
144 void defaultOptimize();
\n+
145
\n+
146 virtual const NonlinearOptimizerParams& _params() const = 0;
\n+
147
\n+\n+
150 std::unique_ptr<internal::NonlinearOptimizerState> state);
\n+
151};
\n+
\n+
152
\n+
157GTSAM_EXPORT bool checkConvergence(double relativeErrorTreshold,
\n+
158 double absoluteErrorTreshold, double errorThreshold,
\n+
159 double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity = NonlinearOptimizerParams::SILENT);
\n+
160
\n+
161GTSAM_EXPORT bool checkConvergence(const NonlinearOptimizerParams& params, double currentError,
\n+
162 double newError);
\n+
163
\n+
164} // gtsam
\n+
Parameters for nonlinear optimization.
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n-
JacobianFactor linearizeNumerically(const NoiseModelFactor &factor, const Values &values, double delta=1e-5)
Linearize a nonlinear factor using numerical differentiation The benefit of this method is that it do...
Definition factorTesting.h:39
\n-
bool equal(const T &obj1, const T &obj2, double tol)
Call equal on the object.
Definition Testable.h:84
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n+
bool checkConvergence(double relativeErrorTreshold, double absoluteErrorTreshold, double errorThreshold, double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity)
Check whether the relative error decrease is less than relativeErrorTreshold, the absolute error decr...
Definition NonlinearOptimizer.cpp:185
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
size_t dim(Key j) const
Return the dimension of variable j.
Definition VectorValues.h:130
\n-
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n-
Vector whitenedError(const Values &c) const
Vector of errors, whitened This is the raw error, i.e., i.e.
Definition NonlinearFactor.cpp:109
\n+
Definition NonlinearFactorGraph.h:55
\n+
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition NonlinearOptimizer.h:75
\n+
const NonlinearFactorGraph & graph() const
return the graph with nonlinear factors
Definition NonlinearOptimizer.h:118
\n+
NonlinearFactorGraph graph_
The graph with nonlinear factors.
Definition NonlinearOptimizer.h:78
\n+
virtual const Values & optimize()
Optimize for the maximum-likelihood estimate, returning a the optimized variable assignments.
Definition NonlinearOptimizer.h:98
\n+
std::unique_ptr< internal::NonlinearOptimizerState > state_
PIMPL'd state.
Definition NonlinearOptimizer.h:80
\n+
boost::shared_ptr< const NonlinearOptimizer > shared_ptr
A shared pointer to this class.
Definition NonlinearOptimizer.h:84
\n+
virtual GaussianFactorGraph::shared_ptr iterate()=0
Perform a single iteration, returning GaussianFactorGraph corresponding to the linearized factor grap...
\n+
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n+
Verbosity
See NonlinearOptimizerParams::verbosity.
Definition NonlinearOptimizerParams.h:37
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
Values retract(const VectorValues &delta) const
Add a delta config to current config and returns a new config.
Definition Values.cpp:99
\n-
VectorValues zeroVectors() const
Return a VectorValues of zero vectors for each variable in this Values.
Definition Values.cpp:272
\n-
In Gaussian factors, the error function returns either the negative log-likelihood,...
\n-
noise model to the factor, and calculates the error by asking the user to implement the method
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,170 +1,151 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-factorTesting.h\n+NonlinearOptimizer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh>\n-24#include \n-25#include \n-26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n-28\n-_\b3_\b9inline _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bN_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bl_\by(const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& factor,\n-40 const _\bV_\ba_\bl_\bu_\be_\bs& values,\n-41 double delta = 1e-5) {\n-42 // We will fill a vector of key/Jacobians pairs (a map would sort)\n-43 std::vector > jacobians;\n-44\n-45 // Get size\n-46 const Vector e = factor._\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(values);\n-47 const size_t rows = e.size();\n-48\n-49 // Loop over all variables\n-50 const double one_over_2delta = 1.0 / (2.0 * delta);\n-51 for (_\bK_\be_\by key : factor) {\n-52 // Compute central differences using the values struct.\n-53 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs dX = values._\bz_\be_\br_\bo_\bV_\be_\bc_\bt_\bo_\br_\bs();\n-54 const size_t cols = dX._\bd_\bi_\bm(key);\n-55 Matrix J = Matrix::Zero(rows, cols);\n-56 for (size_t col = 0; col < cols; ++col) {\n-57 Vector dx = Vector::Zero(cols);\n-58 dx(col) = delta;\n-59 dX[key] = dx;\n-60 _\bV_\ba_\bl_\bu_\be_\bs eval_values = values._\br_\be_\bt_\br_\ba_\bc_\bt(dX);\n-61 const Vector left = factor._\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(eval_values);\n-62 dx(col) = -delta;\n-63 dX[key] = dx;\n-64 eval_values = values._\br_\be_\bt_\br_\ba_\bc_\bt(dX);\n-65 const Vector right = factor._\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(eval_values);\n-66 J.col(col) = (left - right) * one_over_2delta;\n-67 }\n-68 jacobians.emplace_back(key, J);\n-69 }\n-70\n-71 // Next step...return JacobianFactor\n-72 return _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(jacobians, -e);\n-73}\n-74\n-75namespace internal {\n-76// CPPUnitLite-style test for linearization of a factor\n-77inline bool testFactorJacobians(const std::string& name_,\n-78 const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& factor,\n-79 const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs& values, double delta,\n-80 double tolerance) {\n-81 // Create expected value by numerical differentiation\n-82 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br expected = _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bN_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bl_\by(factor, values, delta);\n-83\n-84 // Create actual value by linearize\n-85 auto actual =\n-86 boost::dynamic_pointer_cast(factor.linearize(values));\n-87 if (!actual) return false;\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+26namespace internal { struct NonlinearOptimizerState; }\n+27\n+_\b7_\b5class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n+76\n+77protected:\n+_\b7_\b8 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bg_\br_\ba_\bp_\bh_\b_;\n+79\n+_\b8_\b0 std::unique_ptr _\bs_\bt_\ba_\bt_\be_\b_;\n+81\n+82public:\n+_\b8_\b4 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n+85\n 88\n-89 // Check cast result and then equality\n-90 bool _\be_\bq_\bu_\ba_\bl = _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(expected, *actual, tolerance);\n-91\n-92 // if not equal, test individual jacobians:\n-93 if (!_\be_\bq_\bu_\ba_\bl) {\n-94 for (size_t i = 0; i < actual->size(); i++) {\n-95 bool i_good =\n-96 _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl((Matrix)(expected.getA(expected.begin() + i)),\n-97 (Matrix)(actual->getA(actual->begin() + i)), tolerance);\n-98 if (!i_good) {\n-99 std::cout << \"Mismatch in Jacobian \" << i + 1\n-100 << \" (base 1), as shown above\" << std::endl;\n-101 }\n-102 }\n-103 }\n-104\n-105 return _\be_\bq_\bu_\ba_\bl;\n-106}\n-107} // namespace internal\n-108\n-_\b1_\b1_\b4#define EXPECT_CORRECT_FACTOR_JACOBIANS(factor, values,\n-numerical_derivative_step, tolerance) \\\n-115 { EXPECT(gtsam::internal::testFactorJacobians(name_, factor, values,\n-numerical_derivative_step, tolerance)); }\n+_\b9_\b8 virtual const _\bV_\ba_\bl_\bu_\be_\bs& _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() { defaultOptimize(); return values(); }\n+99\n+106 const _\bV_\ba_\bl_\bu_\be_\bs& optimizeSafely();\n+107\n+109 double error() const;\n+110\n+112 size_t iterations() const;\n+113\n+115 const _\bV_\ba_\bl_\bu_\be_\bs &values() const;\n 116\n-117} // namespace gtsam\n-_\bn_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\b._\bh\n-Some functions to compute numerical derivatives.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+_\b1_\b1_\b8 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &_\bg_\br_\ba_\bp_\bh() const { return graph_; }\n+119\n+121\n+124\n+126 virtual _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br();\n+127\n+129 virtual _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs solve(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n+130 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& params) const;\n+131\n+_\b1_\b3_\b6 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bi_\bt_\be_\br_\ba_\bt_\be() = 0;\n+137\n+139\n+140protected:\n+144 void defaultOptimize();\n+145\n+146 virtual const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& _params() const = 0;\n+147\n+149 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n+150 std::unique_ptr state);\n+151};\n+152\n+157GTSAM_EXPORT bool _\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(double relativeErrorTreshold,\n+158 double absoluteErrorTreshold, double errorThreshold,\n+159 double currentError, double newError, _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n+verbosity = NonlinearOptimizerParams::SILENT);\n+160\n+161GTSAM_EXPORT bool _\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& params,\n+double currentError,\n+162 double newError);\n+163\n+164} // gtsam\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+Parameters for nonlinear optimization.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n-bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n-equals with an tolerance, prints out message if unequal\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bN_\bu_\bm_\be_\br_\bi_\bc_\ba_\bl_\bl_\by\n-JacobianFactor linearizeNumerically(const NoiseModelFactor &factor, const\n-Values &values, double delta=1e-5)\n-Linearize a nonlinear factor using numerical differentiation The benefit of\n-this method is that it do...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn factorTesting.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl\n-bool equal(const T &obj1, const T &obj2, double tol)\n-Call equal on the object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor in the squared-error form.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n+bool checkConvergence(double relativeErrorTreshold, double\n+absoluteErrorTreshold, double errorThreshold, double currentError, double\n+newError, NonlinearOptimizerParams::Verbosity verbosity)\n+Check whether the relative error decrease is less than relativeErrorTreshold,\n+the absolute error decr...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.cpp:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n VectorValues represents a collection of vector-valued variables associated each\n with a unique integer...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bd_\bi_\bm\n-size_t dim(Key j) const\n-Return the dimension of variable j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n-density Templated on...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n-Vector whitenedError(const Values &c) const\n-Vector of errors, whitened This is the raw error, i.e., i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+This is the abstract interface for classes that can optimize for the maximum-\n+likelihood estimate of a...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\br_\ba_\bp_\bh\n+const NonlinearFactorGraph & graph() const\n+return the graph with nonlinear factors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\br_\ba_\bp_\bh_\b_\n+NonlinearFactorGraph graph_\n+The graph with nonlinear factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n+virtual const Values & optimize()\n+Optimize for the maximum-likelihood estimate, returning a the optimized\n+variable assignments.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\bt_\ba_\bt_\be_\b_\n+std::unique_ptr< internal::NonlinearOptimizerState > state_\n+PIMPL'd state.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< const NonlinearOptimizer > shared_ptr\n+A shared pointer to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\be\n+virtual GaussianFactorGraph::shared_ptr iterate()=0\n+Perform a single iteration, returning GaussianFactorGraph corresponding to the\n+linearized factor grap...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+The common parameters for Nonlinear optimizers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n+Verbosity\n+See NonlinearOptimizerParams::verbosity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:37\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-Values retract(const VectorValues &delta) const\n-Add a delta config to current config and returns a new config.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bz_\be_\br_\bo_\bV_\be_\bc_\bt_\bo_\br_\bs\n-VectorValues zeroVectors() const\n-Return a VectorValues of zero vectors for each variable in this Values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:272\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-In Gaussian factors, the error function returns either the negative log-\n-likelihood,...\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-noise model to the factor, and calculates the error by asking the user to\n-implement the method\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bf_\ba_\bc_\bt_\bo_\br_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01124.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01124.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearConjugateGradientOptimizer.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,58 +94,35 @@\n \n \n \n \n \n
\n \n-
NonlinearConjugateGradientOptimizer.h File Reference
\n+Namespaces
\n+
ISAM2Params.cpp File Reference
\n \n
\n \n-

Simple non-linear optimizer that solves using non-preconditioned CG. \n+

Parameters for iSAM 2. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::NonlinearConjugateGradientOptimizer
 An implementation of the nonlinear CG method using the template below. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-template<class S , class V , class W >
double gtsam::lineSearch (const S &system, const V currentValues, const W &gradient)
 Implement the golden-section line search algorithm.
 
template<class S , class V >
boost::tuple< V, int > gtsam::nonlinearConjugateGradient (const S &system, const V &initial, const NonlinearOptimizerParams &params, const bool singleIteration, const bool gradientDescent=false)
 Implement the nonlinear conjugate gradient method using the Polak-Ribiere formula suggested in http://en.wikipedia.org/wiki/Nonlinear_conjugate_gradient_method.
 
\n

Detailed Description

\n-

Simple non-linear optimizer that solves using non-preconditioned CG.

\n-
Author
Yong-Dian Jian
\n-
Date
June 11, 2012
\n+

Parameters for iSAM 2.

\n+
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,44 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-NonlinearConjugateGradientOptimizer.h File Reference\n-Simple non-linear optimizer that solves using n\bno\bon\bn-\b-p\bpr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\bed\bd CG. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-\u00a0 An implementation of the nonlinear CG method using the template below.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ISAM2Params.cpp File Reference\n+Parameters for iSAM 2. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bli\bin\bne\beS\bSe\bea\bar\brc\bch\bh (const S &system, const V\n- currentValues, const W &gradient)\n-\u00a0 Implement the golden-section line search algorithm.\n-\u00a0\n-template\n-boost::tuple< V, int >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt (const S &system,\n- const V &initial, const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n- ¶ms, const bool singleIteration, const bool\n- gradientDescent=false)\n- Implement the nonlinear conjugate gradient method using\n-\u00a0 the Polak-Ribiere formula suggested in _\bh_\bt_\bt_\bp_\b:_\b/_\b/\n- _\be_\bn_\b._\bw_\bi_\bk_\bi_\bp_\be_\bd_\bi_\ba_\b._\bo_\br_\bg_\b/_\bw_\bi_\bk_\bi_\b/\n- _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b__\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\b__\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\b__\bm_\be_\bt_\bh_\bo_\bd.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Simple non-linear optimizer that solves using n\bno\bon\bn-\b-p\bpr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\bed\bd CG.\n+Parameters for iSAM 2.\n Author\n- Yong-Dian Jian\n- Date\n- June 11, 2012\n+ Michael Kaess, Richard Roberts, Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01127.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01127.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Result.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h File Reference\n \n \n \n \n \n \n \n@@ -96,48 +96,66 @@\n \n \n \n
\n \n-
ISAM2Result.h File Reference
\n+
Values.h File Reference
\n
\n
\n \n-

Class that stores detailed iSAM2 result. \n+

A non-templated config holding any types of Manifold-group elements. \n More...

\n \n

Go to the source code of this file.

\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 Classes

struct  gtsam::ISAM2Result
 This struct is returned from ISAM2::update() and contains information about the update that is useful for determining whether the solution is converging, and about how much work was required for the update. More...
class  gtsam::ValueCloneAllocator
 
struct  gtsam::ISAM2Result::DetailedResults
 A struct holding detailed results, which must be enabled with ISAM2Params::enableDetailedResults. More...
class  gtsam::Values
 A non-templated config holding any types of Manifold-group elements. More...
 
struct  gtsam::ISAM2Result::DetailedResults::VariableStatus
 The status of a single variable, this struct is stored in DetailedResults::variableStatus. More...
struct  gtsam::Values::KeyValuePair
 A key-value pair, which you get by dereferencing iterators. More...
 
struct  gtsam::Values::ConstKeyValuePair
 A key-value pair, which you get by dereferencing iterators. More...
 
struct  gtsam::Values::deref_iterator
 
class  gtsam::ValuesKeyAlreadyExists
 
class  gtsam::ValuesKeyDoesNotExist
 
class  gtsam::ValuesIncorrectType
 
class  gtsam::DynamicValuesMismatched
 
class  gtsam::NoMatchFoundForFixed
 
struct  gtsam::traits< Values >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Class that stores detailed iSAM2 result.

\n-
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n+

A non-templated config holding any types of Manifold-group elements.

\n+
Author
Richard Roberts
\n+

Detailed story: A values structure is a map from keys to values. It is used to specify the value of a bunch of variables in a factor graph. A Values is a values structure which can hold variables that are elements on manifolds, not just vectors. It then, as a whole, implements a aggregate type which is also a manifold element, and hence supports operations dim, retract, and localCoordinates.

\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,36 +1,55 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ISAM2Result.h File Reference\n-Class that stores detailed iSAM2 result. _\bM_\bo_\br_\be_\b._\b._\b.\n+Values.h File Reference\n+A non-templated config holding any types of Manifold-group elements. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt\n- This struct is returned from _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\b(_\b) and contains information\n-\u00a0 about the update that is useful for determining whether the solution\n- is converging, and about how much work was required for the update.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bC_\bl_\bo_\bn_\be_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+\u00a0 A non-templated config holding any types of Manifold-group elements.\n _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs\n-\u00a0 A struct holding detailed results, which must be enabled with\n- _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs\n-\u00a0 The status of a single variable, this struct is stored in\n- _\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+\u00a0 A key-value pair, which you get by dereferencing iterators. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+\u00a0 A key-value pair, which you get by dereferencing iterators. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\ba_\bl_\bu_\be_\bs_\bM_\bi_\bs_\bm_\ba_\bt_\bc_\bh_\be_\bd\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bV_\ba_\bl_\bu_\be_\bs_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Class that stores detailed iSAM2 result.\n+A non-templated config holding any types of Manifold-group elements.\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert\n+ Richard Roberts\n+Detailed story: A values structure is a map from keys to values. It is used to\n+specify the value of a bunch of variables in a factor graph. A _\bV_\ba_\bl_\bu_\be_\bs is a\n+values structure which can hold variables that are elements on manifolds, not\n+just vectors. It then, as a whole, implements a aggregate type which is also a\n+manifold element, and hence supports operations dim, retract, and\n+localCoordinates.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh\n+ * _\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01127.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01127.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,13 @@\n var a01127 = [\n- [\"gtsam::ISAM2Result::DetailedResults\", \"a04424.html\", \"a04424\"],\n- [\"gtsam::ISAM2Result::DetailedResults::VariableStatus\", \"a04428.html\", \"a04428\"]\n+ [\"gtsam::ValueCloneAllocator\", \"a04608.html\", null],\n+ [\"gtsam::Values\", \"a04612.html\", \"a04612\"],\n+ [\"gtsam::Values::KeyValuePair\", \"a04616.html\", \"a04616\"],\n+ [\"gtsam::Values::ConstKeyValuePair\", \"a04620.html\", \"a04620\"],\n+ [\"gtsam::Values::deref_iterator\", \"a04624.html\", null],\n+ [\"gtsam::ValuesKeyAlreadyExists\", \"a04628.html\", \"a04628\"],\n+ [\"gtsam::ValuesKeyDoesNotExist\", \"a04632.html\", \"a04632\"],\n+ [\"gtsam::ValuesIncorrectType\", \"a04636.html\", \"a04636\"],\n+ [\"gtsam::DynamicValuesMismatched\", \"a04640.html\", null],\n+ [\"gtsam::NoMatchFoundForFixed\", \"a04644.html\", null],\n+ [\"gtsam::traits< Values >\", \"a04648.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01127_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01127_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Result.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h Source File\n \n \n \n \n \n \n \n@@ -98,161 +98,513 @@\n
No Matches
\n \n \n \n \n \n
\n-
ISAM2Result.h
\n+
Values.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18// \\callgraph
\n-
19
\n-
20#pragma once
\n-
21
\n-
22#include <string>
\n-
23#include <vector>
\n-
24
\n-\n-\n-\n-\n-
29
\n-
30#include <boost/variant.hpp>
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
\n-\n-
54 boost::optional<double> errorBefore;
\n+
25#pragma once
\n+
26
\n+\n+
28#include <gtsam/base/GenericValue.h>
\n+
29#include <gtsam/base/VectorSpace.h>
\n+
30#include <gtsam/inference/Key.h>
\n+
31#include <boost/ptr_container/serialize_ptr_map.hpp>
\n+
32#include <boost/shared_ptr.hpp>
\n+
33#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
34#include <boost/iterator/transform_iterator.hpp>
\n+
35#include <boost/iterator/filter_iterator.hpp>
\n+
36#endif
\n+
37
\n+
38#include <string>
\n+
39#include <utility>
\n+
40
\n+
41namespace gtsam {
\n+
42
\n+
43 // Forward declarations / utilities
\n+
44 class VectorValues;
\n+
45 class ValueAutomaticCasting;
\n+
46 template<typename T> static bool _truePredicate(const T&) { return true; }
\n+
47
\n+
48 /* ************************************************************************* */
\n+
\n+
49 class GTSAM_EXPORT ValueCloneAllocator {
\n+
50 public:
\n+
51 static Value* allocate_clone(const Value& a) { return a.clone_(); }
\n+
52 static void deallocate_clone(const Value* a) { a->deallocate_(); }
\n+\n+
54 };
\n+
\n
55
\n-
66 boost::optional<double> errorAfter;
\n-
67
\n-\n-
77
\n-\n+
\n+
65 class GTSAM_EXPORT Values {
\n+
66
\n+
67 private:
\n+
68 // Internally we store a boost ptr_map, with a ValueCloneAllocator (defined
\n+
69 // below) to clone and deallocate the Value objects, and our compile-flag-
\n+
70 // dependent FastDefaultAllocator to allocate map nodes. In this way, the
\n+
71 // user defines the allocation details (i.e. optimize for memory pool/arenas
\n+
72 // concurrency).
\n+
73 typedef internal::FastDefaultAllocator<typename std::pair<const Key, void*>>::type KeyValuePtrPairAllocator;
\n+
74 typedef boost::ptr_map<
\n+
75 Key,
\n+
76 Value,
\n+
77 std::less<Key>,
\n+\n+
79 KeyValuePtrPairAllocator > KeyValueMap;
\n+
80
\n+
81 // The member to store the values, see just above
\n+
82 KeyValueMap values_;
\n+
83
\n+
84 public:
\n
85
\n-\n-
89
\n-
91 size_t cliques;
\n-
92
\n-\n-
98
\n-\n-
103
\n-\n-
106
\n-\n-
109
\n-\n-
112
\n-
\n-\n-
\n-\n-\n-\n-\n-
133 bool isRelinearized;
\n-\n-
138 bool isNew;
\n-\n-\n-
141 : isReeliminated(false),
\n-\n-\n-
144 isRelinearized(false),
\n-
145 isObserved(false),
\n-
146 isNew(false),
\n-
147 inRootClique(false) {}
\n-
148 };
\n-
\n-
149
\n-
150 using StatusMap = FastMap<Key, VariableStatus>;
\n-
151
\n-\n-
154 };
\n-
\n-
155
\n-
158 boost::optional<DetailedResults> detail;
\n-
159
\n-
160 explicit ISAM2Result(bool enableDetailedResults = false) {
\n-
161 if (enableDetailedResults) detail.reset(DetailedResults());
\n-
162 }
\n-
163
\n-
165 DetailedResults* details() { return detail.get_ptr(); }
\n-
166
\n-
\n-
168 void print(const std::string str = "") const {
\n-
169 using std::cout;
\n-
170 cout << str << " Reelimintated: " << variablesReeliminated
\n-
171 << " Relinearized: " << variablesRelinearized
\n-
172 << " Cliques: " << cliques << std::endl;
\n-
173 }
\n-
\n-
174
\n-\n-
177 size_t getVariablesReeliminated() const { return variablesReeliminated; }
\n-
178 FactorIndices getNewFactorsIndices() const { return newFactorsIndices; }
\n-
179 size_t getCliques() const { return cliques; }
\n-
180 double getErrorBefore() const { return errorBefore ? *errorBefore : std::nan(""); }
\n-
181 double getErrorAfter() const { return errorAfter ? *errorAfter : std::nan(""); }
\n-
182};
\n-
\n-
183
\n-
184} // namespace gtsam
\n-
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n-
Parameters for iSAM 2.
\n-
Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)
\n-
Factor Graph consisting of non-linear factors.
\n+
87 typedef boost::shared_ptr<Values> shared_ptr;
\n+
88
\n+
90 typedef boost::shared_ptr<const Values> const_shared_ptr;
\n+
91
\n+
\n+
93 struct GTSAM_EXPORT KeyValuePair {
\n+
94 const Key key;
\n+\n+
96
\n+
97 KeyValuePair(Key _key, Value& _value) : key(_key), value(_value) {}
\n+
98 };
\n+
\n+
99
\n+
\n+
101 struct GTSAM_EXPORT ConstKeyValuePair {
\n+
102 const Key key;
\n+
103 const Value& value;
\n+
104
\n+
105 ConstKeyValuePair(Key _key, const Value& _value) : key(_key), value(_value) {}
\n+
106 ConstKeyValuePair(const KeyValuePair& kv) : key(kv.key), value(kv.value) {}
\n+
107 };
\n+
\n+
108
\n+
109 typedef KeyValuePair value_type;
\n+
110
\n+
113
\n+
115 Values() = default;
\n+
116
\n+
118 Values(const Values& other);
\n+
119
\n+
121 Values(Values&& other);
\n+
122
\n+
128 Values(std::initializer_list<ConstKeyValuePair> init);
\n+
129
\n+
131 Values(const Values& other, const VectorValues& delta);
\n+
132
\n+
136
\n+
138 void print(const std::string& str = "", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
139
\n+
141 bool equals(const Values& other, double tol=1e-9) const;
\n+
142
\n+
146
\n+
155 template <typename ValueType>
\n+
156 const ValueType at(Key j) const;
\n+
157
\n+
159 double atDouble(size_t key) const { return at<double>(key);}
\n+
160
\n+
166 const Value& at(Key j) const;
\n+
167
\n+
171 bool exists(Key j) const;
\n+
172
\n+
177 template<typename ValueType>
\n+
178 boost::optional<const ValueType&> exists(Key j) const;
\n+
179
\n+
181 size_t size() const { return values_.size(); }
\n+
182
\n+
184 bool empty() const { return values_.empty(); }
\n+
185
\n+
189
\n+
\n+\n+
191 using const_iterator_type = typename KeyValueMap::const_iterator;
\n+
192 const_iterator_type it_;
\n+
193 deref_iterator(const_iterator_type it) : it_(it) {}
\n+
194 ConstKeyValuePair operator*() const { return {it_->first, *(it_->second)}; }
\n+
195 boost::shared_ptr<ConstKeyValuePair> operator->() {
\n+
196 return boost::make_shared<ConstKeyValuePair>(it_->first, *(it_->second));
\n+
197 }
\n+
198 bool operator==(const deref_iterator& other) const {
\n+
199 return it_ == other.it_;
\n+
200 }
\n+
201 bool operator!=(const deref_iterator& other) const { return it_ != other.it_; }
\n+
202 deref_iterator& operator++() {
\n+
203 ++it_;
\n+
204 return *this;
\n+
205 }
\n+
206 };
\n+
\n+
207
\n+
208 deref_iterator begin() const { return deref_iterator(values_.begin()); }
\n+
209 deref_iterator end() const { return deref_iterator(values_.end()); }
\n+
210
\n+
213 deref_iterator find(Key j) const { return deref_iterator(values_.find(j)); }
\n+
214
\n+
216 deref_iterator lower_bound(Key j) const { return deref_iterator(values_.lower_bound(j)); }
\n+
217
\n+
219 deref_iterator upper_bound(Key j) const { return deref_iterator(values_.upper_bound(j)); }
\n+
220
\n+
224
\n+
226 Values retract(const VectorValues& delta) const;
\n+
227
\n+
232 void retractMasked(const VectorValues& delta, const KeySet& mask);
\n+
233
\n+
235 VectorValues localCoordinates(const Values& cp) const;
\n+
236
\n+
238
\n+
240 void insert(Key j, const Value& val);
\n+
241
\n+
243 void insert(const Values& values);
\n+
244
\n+
248 template <typename ValueType>
\n+
249 void insert(Key j, const ValueType& val);
\n+
250
\n+
252 void insertDouble(Key j, double c) { insert<double>(j,c); }
\n+
253
\n+
255 void update(Key j, const Value& val);
\n+
256
\n+
261 template <typename T>
\n+
262 void update(Key j, const T& val);
\n+
263
\n+
265 void update(const Values& values);
\n+
266
\n+
268 void insert_or_assign(Key j, const Value& val);
\n+
269
\n+
274 void insert_or_assign(const Values& values);
\n+
275
\n+
277 template <typename ValueType>
\n+
278 void insert_or_assign(Key j, const ValueType& val);
\n+
279
\n+
281 void erase(Key j);
\n+
282
\n+
287 KeyVector keys() const;
\n+
288
\n+
292 KeySet keySet() const;
\n+
293
\n+
295 Values& operator=(const Values& rhs);
\n+
296
\n+
298 void swap(Values& other) { values_.swap(other.values_); }
\n+
299
\n+
301 void clear() { values_.clear(); }
\n+
302
\n+
304 size_t dim() const;
\n+
305
\n+
307 std::map<Key,size_t> dims() const;
\n+
308
\n+
310 VectorValues zeroVectors() const;
\n+
311
\n+
312 // Count values of given type \\c ValueType
\n+
313 template<class ValueType>
\n+
314 size_t count() const {
\n+
315 size_t i = 0;
\n+
316 for (const auto key_value : values_) {
\n+
317 if (dynamic_cast<const GenericValue<ValueType>*>(key_value.second))
\n+
318 ++i;
\n+
319 }
\n+
320 return i;
\n+
321 }
\n+
322
\n+
342 template <class ValueType>
\n+
343 std::map<Key, ValueType> // , std::less<Key>, Eigen::aligned_allocator<ValueType>
\n+
344 extract(const std::function<bool(Key)>& filterFcn = &_truePredicate<Key>) const;
\n+
345
\n+
346#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
347 // Types obtained by iterating
\n+
348 typedef KeyValueMap::const_iterator::value_type ConstKeyValuePtrPair;
\n+
349 typedef KeyValueMap::iterator::value_type KeyValuePtrPair;
\n+
350
\n+
352 typedef boost::transform_iterator<
\n+
353 std::function<KeyValuePair(const KeyValuePtrPair&)>, KeyValueMap::iterator> iterator;
\n+
354
\n+
356 typedef boost::transform_iterator<
\n+
357 std::function<ConstKeyValuePair(const ConstKeyValuePtrPair&)>, KeyValueMap::const_iterator> const_iterator;
\n+
358
\n+
360 typedef boost::transform_iterator<
\n+
361 std::function<KeyValuePair(const KeyValuePtrPair&)>, KeyValueMap::reverse_iterator> reverse_iterator;
\n+
362
\n+
364 typedef boost::transform_iterator<
\n+
365 std::function<ConstKeyValuePair(const ConstKeyValuePtrPair&)>, KeyValueMap::const_reverse_iterator> const_reverse_iterator;
\n+
366
\n+
371 std::pair<iterator, bool> tryInsert(Key j, const Value& value);
\n+
372
\n+
373 static ConstKeyValuePair make_const_deref_pair(const KeyValueMap::const_iterator::value_type& key_value) {
\n+
374 return ConstKeyValuePair(key_value.first, *key_value.second); }
\n+
375
\n+
376 static KeyValuePair make_deref_pair(const KeyValueMap::iterator::value_type& key_value) {
\n+
377 return KeyValuePair(key_value.first, *key_value.second); }
\n+
378
\n+
379 const_iterator _begin() const { return boost::make_transform_iterator(values_.begin(), &make_const_deref_pair); }
\n+
380 const_iterator _end() const { return boost::make_transform_iterator(values_.end(), &make_const_deref_pair); }
\n+
381 iterator begin() { return boost::make_transform_iterator(values_.begin(), &make_deref_pair); }
\n+
382 iterator end() { return boost::make_transform_iterator(values_.end(), &make_deref_pair); }
\n+
383 const_reverse_iterator rbegin() const { return boost::make_transform_iterator(values_.rbegin(), &make_const_deref_pair); }
\n+
384 const_reverse_iterator rend() const { return boost::make_transform_iterator(values_.rend(), &make_const_deref_pair); }
\n+
385 reverse_iterator rbegin() { return boost::make_transform_iterator(values_.rbegin(), &make_deref_pair); }
\n+
386 reverse_iterator rend() { return boost::make_transform_iterator(values_.rend(), &make_deref_pair); }
\n+
387
\n+
390 iterator find(Key j) { return boost::make_transform_iterator(values_.find(j), &make_deref_pair); }
\n+
391
\n+
393 iterator lower_bound(Key j) { return boost::make_transform_iterator(values_.lower_bound(j), &make_deref_pair); }
\n+
394
\n+
396 iterator upper_bound(Key j) { return boost::make_transform_iterator(values_.upper_bound(j), &make_deref_pair); }
\n+
397
\n+
399 template <class ValueType = Value>
\n+
400 class Filtered;
\n+
401
\n+
403 template <class ValueType = Value>
\n+
404 class ConstFiltered;
\n+
405
\n+
407 template <class ValueType>
\n+
408 Values(const Filtered<ValueType>& view);
\n+
409
\n+
411 template <class ValueType>
\n+
412 Values(const ConstFiltered<ValueType>& view);
\n+
413
\n+
415 Filtered<Value> GTSAM_DEPRECATED
\n+
416 filter(const std::function<bool(Key)>& filterFcn);
\n+
417
\n+
419 template <class ValueType>
\n+
420 Filtered<ValueType> GTSAM_DEPRECATED
\n+
421 filter(const std::function<bool(Key)>& filterFcn = &_truePredicate<Key>);
\n+
422
\n+
424 ConstFiltered<Value> GTSAM_DEPRECATED
\n+
425 filter(const std::function<bool(Key)>& filterFcn) const;
\n+
426
\n+
428 template <class ValueType>
\n+
429 ConstFiltered<ValueType> GTSAM_DEPRECATED filter(
\n+
430 const std::function<bool(Key)>& filterFcn = &_truePredicate<Key>) const;
\n+
431#endif
\n+
432
\n+
433 private:
\n+
434 // Filters based on ValueType (if not Value) and also based on the user-
\n+
435 // supplied \\c filter function.
\n+
436 template<class ValueType>
\n+
437 static bool filterHelper(const std::function<bool(Key)> filter, const ConstKeyValuePair& key_value) {
\n+
438 BOOST_STATIC_ASSERT((!boost::is_same<ValueType, Value>::value));
\n+
439 // Filter and check the type
\n+
440 return filter(key_value.key) && (dynamic_cast<const GenericValue<ValueType>*>(&key_value.value));
\n+
441 }
\n+
442
\n+
444 friend class boost::serialization::access;
\n+
445 template<class ARCHIVE>
\n+
446 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
447 ar & BOOST_SERIALIZATION_NVP(values_);
\n+
448 }
\n+
449
\n+
450 };
\n+
\n+
451
\n+
452 /* ************************************************************************* */
\n+
\n+
453 class ValuesKeyAlreadyExists : public std::exception {
\n+
454 protected:
\n+
455 const Key key_;
\n+
456
\n+
457 private:
\n+
458 mutable std::string message_;
\n+
459
\n+
460 public:
\n+
\n+\n+
463 key_(key) {}
\n+
\n+
464
\n+
465 ~ValuesKeyAlreadyExists() noexcept override {}
\n+
466
\n+
468 Key key() const noexcept { return key_; }
\n+
469
\n+
471 GTSAM_EXPORT const char* what() const noexcept override;
\n+
472 };
\n+
\n+
473
\n+
474 /* ************************************************************************* */
\n+
\n+
475 class ValuesKeyDoesNotExist : public std::exception {
\n+
476 protected:
\n+
477 const char* operation_;
\n+
478 const Key key_;
\n+
479
\n+
480 private:
\n+
481 mutable std::string message_;
\n+
482
\n+
483 public:
\n+
\n+
485 ValuesKeyDoesNotExist(const char* operation, Key key) noexcept :
\n+
486 operation_(operation), key_(key) {}
\n+
\n+
487
\n+
488 ~ValuesKeyDoesNotExist() noexcept override {}
\n+
489
\n+
491 Key key() const noexcept { return key_; }
\n+
492
\n+
494 GTSAM_EXPORT const char* what() const noexcept override;
\n+
495 };
\n+
\n+
496
\n+
497 /* ************************************************************************* */
\n+
\n+
498 class ValuesIncorrectType : public std::exception {
\n+
499 protected:
\n+
500 const Key key_;
\n+
501 const std::type_info& storedTypeId_;
\n+
502 const std::type_info& requestedTypeId_;
\n+
503
\n+
504 private:
\n+
505 mutable std::string message_;
\n+
506
\n+
507 public:
\n+
\n+\n+
510 const std::type_info& storedTypeId, const std::type_info& requestedTypeId) noexcept :
\n+
511 key_(key), storedTypeId_(storedTypeId), requestedTypeId_(requestedTypeId) {}
\n+
\n+
512
\n+
513 ~ValuesIncorrectType() noexcept override {}
\n+
514
\n+
516 Key key() const noexcept { return key_; }
\n+
517
\n+
519 const std::type_info& storedTypeId() const { return storedTypeId_; }
\n+
520
\n+
522 const std::type_info& requestedTypeId() const { return requestedTypeId_; }
\n+
523
\n+
525 GTSAM_EXPORT const char* what() const noexcept override;
\n+
526 };
\n+
\n+
527
\n+
528 /* ************************************************************************* */
\n+
\n+
529 class DynamicValuesMismatched : public std::exception {
\n+
530
\n+
531 public:
\n+
532 DynamicValuesMismatched() noexcept {}
\n+
533
\n+
534 ~DynamicValuesMismatched() noexcept override {}
\n+
535
\n+
536 const char* what() const noexcept override {
\n+
537 return "The Values 'this' and the argument passed to Values::localCoordinates have mismatched keys and values";
\n+
538 }
\n+
539 };
\n+
\n+
540
\n+
541 /* ************************************************************************* */
\n+
\n+
542 class NoMatchFoundForFixed: public std::exception {
\n+
543
\n+
544 protected:
\n+
545 const size_t M1_, N1_;
\n+
546 const size_t M2_, N2_;
\n+
547
\n+
548 private:
\n+
549 mutable std::string message_;
\n+
550
\n+
551 public:
\n+
552 NoMatchFoundForFixed(size_t M1, size_t N1, size_t M2, size_t N2) noexcept :
\n+
553 M1_(M1), N1_(N1), M2_(M2), N2_(N2) {
\n+
554 }
\n+
555
\n+
556 ~NoMatchFoundForFixed() noexcept override {
\n+
557 }
\n+
558
\n+
559 GTSAM_EXPORT const char* what() const noexcept override;
\n+
560 };
\n+
\n+
561
\n+
562 /* ************************************************************************* */
\n+
564 template<>
\n+
\n+
565 struct traits<Values> : public Testable<Values> {
\n+
566 };
\n+
\n+
567
\n+
568} //\\ namespace gtsam
\n+
569
\n+
570
\n+
571#include <gtsam/nonlinear/Values-inl.h>
\n+
An easy way to control which allocator is used for Fast* collections.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n+
bool operator!=(const Matrix &A, const Matrix &B)
inequality
Definition Matrix.h:107
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition Matrix.h:100
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Default allocator for list, map, and set types.
Definition FastDefaultAllocator.h:50
\n \n-
This struct is returned from ISAM2::update() and contains information about the update that is useful...
Definition ISAM2Result.h:41
\n-
size_t variablesRelinearized
The number of variables that were relinearized because their linear deltas exceeded the reslinearizat...
Definition ISAM2Result.h:76
\n-
size_t getVariablesRelinearized() const
Getters and Setters.
Definition ISAM2Result.h:176
\n-
size_t factorsRecalculated
The number of factors that were included in reelimination of the Bayes' tree.
Definition ISAM2Result.h:88
\n-
DetailedResults * details()
Return pointer to detail, 0 if no detail requested.
Definition ISAM2Result.h:165
\n-
boost::optional< double > errorBefore
The nonlinear error of all of the factors, including new factors and variables added during the curre...
Definition ISAM2Result.h:54
\n-
void print(const std::string str="") const
Print results.
Definition ISAM2Result.h:168
\n-
boost::optional< DetailedResults > detail
Detailed results, if enabled by ISAM2Params::enableDetailedResults.
Definition ISAM2Result.h:158
\n-
size_t cliques
The number of cliques in the Bayes' Tree.
Definition ISAM2Result.h:91
\n-
KeySet keysWithRemovedFactors
Keys of variables that had factors removed.
Definition ISAM2Result.h:108
\n-
size_t variablesReeliminated
The number of variables that were reeliminated as parts of the Bayes' Tree were recalculated,...
Definition ISAM2Result.h:84
\n-
KeySet unusedKeys
Unused keys, and indices for unused keys, i.e., keys that are empty now and do not appear in the new ...
Definition ISAM2Result.h:102
\n-
KeyVector observedKeys
keys for variables that were observed, i.e., not unused.
Definition ISAM2Result.h:105
\n-
KeySet markedKeys
All keys that were marked during the update process.
Definition ISAM2Result.h:111
\n-
FactorIndices newFactorsIndices
The indices of the newly-added factors, in 1-to-1 correspondence with the factors passed as newFactor...
Definition ISAM2Result.h:97
\n-
boost::optional< double > errorAfter
The nonlinear error of all of the factors computed after the current update, meaning that variables a...
Definition ISAM2Result.h:66
\n-
A struct holding detailed results, which must be enabled with ISAM2Params::enableDetailedResults.
Definition ISAM2Result.h:117
\n-
StatusMap variableStatus
The status of each variable during this update, see VariableStatus.
Definition ISAM2Result.h:153
\n-
The status of a single variable, this struct is stored in DetailedResults::variableStatus.
Definition ISAM2Result.h:120
\n-
bool isRelinearizeInvolved
Whether the variable was below the relinearization threshold but was relinearized by being involved i...
Definition ISAM2Result.h:128
\n-
bool isObserved
Whether the variable was relinearized, either by being above the relinearization threshold or by invo...
Definition ISAM2Result.h:136
\n-
bool isNew
Whether the variable itself was just added.
Definition ISAM2Result.h:138
\n-
bool isAboveRelinThreshold
Whether the variable was just relinearized due to being above the relinearization threshold.
Definition ISAM2Result.h:125
\n-
bool isReeliminated
Whether the variable was just reeliminated, due to being relinearized, observed, new,...
Definition ISAM2Result.h:124
\n-
bool inRootClique
Whether the variable is in the root clique.
Definition ISAM2Result.h:139
\n+
Wraps any type T so it can play as a Value.
Definition GenericValue.h:47
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n+
virtual void deallocate_() const =0
Deallocate a raw pointer of this value.
\n+
virtual Value * clone_() const =0
Clone this value in a special memory pool, must be deleted with Value::deallocate_,...
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
Definition Values.h:49
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
void update(Key j, const T &val)
Templated version to update a variable with the given j, throws KeyDoesNotExist<J> if j is not presen...
\n+
bool empty() const
whether the config is empty
Definition Values.h:184
\n+
deref_iterator upper_bound(Key j) const
Find the lowest-ordered element greater than the specified key.
Definition Values.h:219
\n+
boost::shared_ptr< Values > shared_ptr
A shared_ptr to this class.
Definition Values.h:87
\n+
void clear()
Remove all variables from the config.
Definition Values.h:301
\n+
void swap(Values &other)
Swap the contents of two Values without copying data.
Definition Values.h:298
\n+
void insertDouble(Key j, double c)
version for double
Definition Values.h:252
\n+
size_t size() const
The number of variables in this config.
Definition Values.h:181
\n+
deref_iterator find(Key j) const
Find an element by key, returning an iterator, or end() if the key was not found.
Definition Values.h:213
\n+
boost::shared_ptr< const Values > const_shared_ptr
A const shared_ptr to this class.
Definition Values.h:90
\n+
Values()=default
Default constructor creates an empty Values class.
\n+
deref_iterator lower_bound(Key j) const
Find the element greater than or equal to the specified key.
Definition Values.h:216
\n+
double atDouble(size_t key) const
version for double
Definition Values.h:159
\n+
A key-value pair, which you get by dereferencing iterators.
Definition Values.h:93
\n+
Value & value
The value.
Definition Values.h:95
\n+
const Key key
The key.
Definition Values.h:94
\n+
A key-value pair, which you get by dereferencing iterators.
Definition Values.h:101
\n+
const Key key
The key.
Definition Values.h:102
\n+
const Value & value
The value.
Definition Values.h:103
\n+
Definition Values.h:190
\n+
Definition Values.h:453
\n+
const Key key_
The key that already existed.
Definition Values.h:455
\n+
GTSAM_EXPORT const char * what() const noexcept override
The message to be displayed to the user.
Definition Values.cpp:280
\n+
ValuesKeyAlreadyExists(Key key) noexcept
Construct with the key-value pair attempted to be added.
Definition Values.h:462
\n+
Key key() const noexcept
The duplicate key that was attempted to be added.
Definition Values.h:468
\n+
Definition Values.h:475
\n+
ValuesKeyDoesNotExist(const char *operation, Key key) noexcept
Construct with the key that does not exist in the values.
Definition Values.h:485
\n+
const Key key_
The key that does not exist.
Definition Values.h:478
\n+
Key key() const noexcept
The key that was attempted to be accessed that does not exist.
Definition Values.h:491
\n+
const char * operation_
The operation that attempted to access the key.
Definition Values.h:477
\n+
Definition Values.h:498
\n+
const std::type_info & storedTypeId() const
The typeid of the value stores in the Values.
Definition Values.h:519
\n+
Key key() const noexcept
The key that was attempted to be accessed that does not exist.
Definition Values.h:516
\n+
const Key key_
The key requested.
Definition Values.h:500
\n+
ValuesIncorrectType(Key key, const std::type_info &storedTypeId, const std::type_info &requestedTypeId) noexcept
Construct with the key that does not exist in the values.
Definition Values.h:509
\n+
const std::type_info & requestedTypeId() const
The requested typeid.
Definition Values.h:522
\n+
Definition Values.h:529
\n+
Definition Values.h:542
\n+
The Factor::error simply extracts the.
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,248 +1,668 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM2Result.h\n+Values.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18// \\callgraph\n-19\n-20#pragma once\n-21\n-22#include \n-23#include \n-24\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-29\n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-_\b4_\b1struct _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt {\n-_\b5_\b4 boost::optional _\be_\br_\br_\bo_\br_\bB_\be_\bf_\bo_\br_\be;\n+25#pragma once\n+26\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh>\n+28#include \n+29#include \n+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+31#include \n+32#include \n+33#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+34#include \n+35#include \n+36#endif\n+37\n+38#include \n+39#include \n+40\n+41namespace _\bg_\bt_\bs_\ba_\bm {\n+42\n+43 // Forward declarations / utilities\n+44 class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+45 class ValueAutomaticCasting;\n+46 template static bool _truePredicate(const T&) { return true; }\n+47\n+48 /* *************************************************************************\n+*/\n+_\b4_\b9 class GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bC_\bl_\bo_\bn_\be_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br {\n+50 public:\n+51 static _\bV_\ba_\bl_\bu_\be* allocate_clone(const _\bV_\ba_\bl_\bu_\be& a) { return a._\bc_\bl_\bo_\bn_\be_\b_(); }\n+52 static void deallocate_clone(const _\bV_\ba_\bl_\bu_\be* a) { a->_\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be_\b_(); }\n+53 _\bV_\ba_\bl_\bu_\be_\bC_\bl_\bo_\bn_\be_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br() {}\n+54 };\n 55\n-_\b6_\b6 boost::optional _\be_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br;\n-67\n-_\b7_\b6 size_t _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd;\n-77\n-_\b8_\b4 size_t _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd;\n+_\b6_\b5 class GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bs {\n+66\n+67 private:\n+68 // Internally we store a boost ptr_map, with a ValueCloneAllocator (defined\n+69 // below) to clone and deallocate the Value objects, and our compile-flag-\n+70 // dependent FastDefaultAllocator to allocate map nodes. In this way, the\n+71 // user defines the allocation details (i.e. optimize for memory pool/arenas\n+72 // concurrency).\n+73 typedef _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bs_\bt_\bd_\b:_\b:_\bp_\ba_\bi_\br_\b<_\bc_\bo_\bn_\bs_\bt_\b _\bK_\be_\by_\b,\n+_\bv_\bo_\bi_\bd_\b*_\b>>::type KeyValuePtrPairAllocator;\n+74 typedef boost::ptr_map<\n+75 _\bK_\be_\by,\n+76 _\bV_\ba_\bl_\bu_\be,\n+77 std::less,\n+78 _\bV_\ba_\bl_\bu_\be_\bC_\bl_\bo_\bn_\be_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br,\n+79 KeyValuePtrPairAllocator > KeyValueMap;\n+80\n+81 // The member to store the values, see just above\n+82 KeyValueMap values_;\n+83\n+84 public:\n 85\n-_\b8_\b8 size_t _\bf_\ba_\bc_\bt_\bo_\br_\bs_\bR_\be_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bd;\n-89\n-_\b9_\b1 size_t _\bc_\bl_\bi_\bq_\bu_\be_\bs;\n-92\n-_\b9_\b7 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs _\bn_\be_\bw_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n-98\n-_\b1_\b0_\b2 _\bK_\be_\by_\bS_\be_\bt _\bu_\bn_\bu_\bs_\be_\bd_\bK_\be_\by_\bs;\n-103\n-_\b1_\b0_\b5 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bo_\bb_\bs_\be_\br_\bv_\be_\bd_\bK_\be_\by_\bs;\n-106\n-_\b1_\b0_\b8 _\bK_\be_\by_\bS_\be_\bt _\bk_\be_\by_\bs_\bW_\bi_\bt_\bh_\bR_\be_\bm_\bo_\bv_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs;\n-109\n-_\b1_\b1_\b1 _\bK_\be_\by_\bS_\be_\bt _\bm_\ba_\br_\bk_\be_\bd_\bK_\be_\by_\bs;\n-112\n-_\b1_\b1_\b7 struct _\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs {\n-_\b1_\b2_\b0 struct _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs {\n-_\b1_\b2_\b4 bool _\bi_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd;\n-_\b1_\b2_\b5 bool _\bi_\bs_\bA_\bb_\bo_\bv_\be_\bR_\be_\bl_\bi_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n-_\b1_\b2_\b8 bool _\bi_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bI_\bn_\bv_\bo_\bl_\bv_\be_\bd;\n-133 bool isRelinearized;\n-_\b1_\b3_\b6 bool _\bi_\bs_\bO_\bb_\bs_\be_\br_\bv_\be_\bd;\n-_\b1_\b3_\b8 bool _\bi_\bs_\bN_\be_\bw;\n-_\b1_\b3_\b9 bool _\bi_\bn_\bR_\bo_\bo_\bt_\bC_\bl_\bi_\bq_\bu_\be;\n-140 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs()\n-141 : _\bi_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd(false),\n-142 _\bi_\bs_\bA_\bb_\bo_\bv_\be_\bR_\be_\bl_\bi_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd(false),\n-143 _\bi_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bI_\bn_\bv_\bo_\bl_\bv_\be_\bd(false),\n-144 isRelinearized(false),\n-145 _\bi_\bs_\bO_\bb_\bs_\be_\br_\bv_\be_\bd(false),\n-146 _\bi_\bs_\bN_\be_\bw(false),\n-147 _\bi_\bn_\bR_\bo_\bo_\bt_\bC_\bl_\bi_\bq_\bu_\be(false) {}\n-148 };\n-149\n-150 using StatusMap = _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b>;\n-151\n-_\b1_\b5_\b3 _\bS_\bt_\ba_\bt_\bu_\bs_\bM_\ba_\bp _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs;\n-154 };\n-155\n-_\b1_\b5_\b8 boost::optional _\bd_\be_\bt_\ba_\bi_\bl;\n-159\n-160 explicit _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt(bool enableDetailedResults = false) {\n-161 if (enableDetailedResults) _\bd_\be_\bt_\ba_\bi_\bl.reset(_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs());\n-162 }\n-163\n-_\b1_\b6_\b5 _\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs* _\bd_\be_\bt_\ba_\bi_\bl_\bs() { return _\bd_\be_\bt_\ba_\bi_\bl.get_ptr(); }\n-166\n-_\b1_\b6_\b8 void _\bp_\br_\bi_\bn_\bt(const std::string str = \"\") const {\n-169 using std::cout;\n-170 cout << str << \" Reelimintated: \" << _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd\n-171 << \" Relinearized: \" << _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd\n-172 << \" Cliques: \" << _\bc_\bl_\bi_\bq_\bu_\be_\bs << std::endl;\n-173 }\n-174\n-_\b1_\b7_\b6 size_t _\bg_\be_\bt_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd() const { return _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd; }\n-177 size_t getVariablesReeliminated() const { return _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd; }\n-178 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs getNewFactorsIndices() const { return _\bn_\be_\bw_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bI_\bn_\bd_\bi_\bc_\be_\bs; }\n-179 size_t getCliques() const { return _\bc_\bl_\bi_\bq_\bu_\be_\bs; }\n-180 double getErrorBefore() const { return _\be_\br_\br_\bo_\br_\bB_\be_\bf_\bo_\br_\be ? *_\be_\br_\br_\bo_\br_\bB_\be_\bf_\bo_\br_\be : std::\n-nan(\"\"); }\n-181 double getErrorAfter() const { return _\be_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br ? *_\be_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br : std::nan\n-(\"\"); }\n-182};\n-183\n-184} // namespace gtsam\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n-_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n-Parameters for iSAM 2.\n-_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh\n-Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail\n-implementation)\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n+_\b8_\b7 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+88\n+_\b9_\b0 typedef boost::shared_ptr _\bc_\bo_\bn_\bs_\bt_\b__\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+91\n+_\b9_\b3 struct GTSAM_EXPORT _\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br {\n+_\b9_\b4 const _\bK_\be_\by _\bk_\be_\by;\n+_\b9_\b5 _\bV_\ba_\bl_\bu_\be& _\bv_\ba_\bl_\bu_\be;\n+96\n+97 _\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br(_\bK_\be_\by _key, _\bV_\ba_\bl_\bu_\be& _value) : key(_key), value(_value) {}\n+98 };\n+99\n+_\b1_\b0_\b1 struct GTSAM_EXPORT _\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br {\n+_\b1_\b0_\b2 const _\bK_\be_\by _\bk_\be_\by;\n+_\b1_\b0_\b3 const _\bV_\ba_\bl_\bu_\be& _\bv_\ba_\bl_\bu_\be;\n+104\n+105 _\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br(_\bK_\be_\by _key, const _\bV_\ba_\bl_\bu_\be& _value) : key(_key), value(_value)\n+{}\n+106 _\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br(const _\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br& kv) : key(kv.key), value(kv.value) {}\n+107 };\n+108\n+109 typedef KeyValuePair value_type;\n+110\n+113\n+_\b1_\b1_\b5 _\bV_\ba_\bl_\bu_\be_\bs() = default;\n+116\n+118 _\bV_\ba_\bl_\bu_\be_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& other);\n+119\n+121 _\bV_\ba_\bl_\bu_\be_\bs(_\bV_\ba_\bl_\bu_\be_\bs&& other);\n+122\n+128 _\bV_\ba_\bl_\bu_\be_\bs(std::initializer_list init);\n+129\n+131 _\bV_\ba_\bl_\bu_\be_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& other, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta);\n+132\n+136\n+138 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter) const;\n+139\n+141 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& other, double tol=1e-9) const;\n+142\n+146\n+155 template \n+156 const ValueType at(_\bK_\be_\by j) const;\n+157\n+_\b1_\b5_\b9 double _\ba_\bt_\bD_\bo_\bu_\bb_\bl_\be(size_t key) const { return at(key);}\n+160\n+166 const _\bV_\ba_\bl_\bu_\be& at(_\bK_\be_\by j) const;\n+167\n+171 bool exists(_\bK_\be_\by j) const;\n+172\n+177 template\n+178 boost::optional exists(_\bK_\be_\by j) const;\n+179\n+_\b1_\b8_\b1 size_t _\bs_\bi_\bz_\be() const { return values_.size(); }\n+182\n+_\b1_\b8_\b4 bool _\be_\bm_\bp_\bt_\by() const { return values_.empty(); }\n+185\n+189\n+_\b1_\b9_\b0 struct _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br {\n+191 using const_iterator_type = typename KeyValueMap::const_iterator;\n+192 const_iterator_type it_;\n+193 _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(const_iterator_type it) : it_(it) {}\n+194 _\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*() const { return {it_->first, *(it_->second)};\n+}\n+195 boost::shared_ptr operator->() {\n+196 return boost::make_shared(it_->first, *(it_->second));\n+197 }\n+198 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br& other) const {\n+199 return it_ == other.it_;\n+200 }\n+201 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br& other) const { return it_ !=\n+other.it_; }\n+202 _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br& operator++() {\n+203 ++it_;\n+204 return *this;\n+205 }\n+206 };\n+207\n+208 _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br begin() const { return _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(values_.begin()); }\n+209 deref_iterator end() const { return deref_iterator(values_.end()); }\n+210\n+_\b2_\b1_\b3 _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bf_\bi_\bn_\bd(_\bK_\be_\by j) const { return _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br(values_.find(j));\n+}\n+214\n+_\b2_\b1_\b6 _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bl_\bo_\bw_\be_\br_\b__\bb_\bo_\bu_\bn_\bd(_\bK_\be_\by j) const { return _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+(values_.lower_bound(j)); }\n+217\n+_\b2_\b1_\b9 _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bu_\bp_\bp_\be_\br_\b__\bb_\bo_\bu_\bn_\bd(_\bK_\be_\by j) const { return _\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+(values_.upper_bound(j)); }\n+220\n+224\n+226 _\bV_\ba_\bl_\bu_\be_\bs retract(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta) const;\n+227\n+232 void retractMasked(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta, const _\bK_\be_\by_\bS_\be_\bt& mask);\n+233\n+235 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs localCoordinates(const _\bV_\ba_\bl_\bu_\be_\bs& cp) const;\n+236\n+238\n+240 void insert(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be& val);\n+241\n+243 void insert(const _\bV_\ba_\bl_\bu_\be_\bs& values);\n+244\n+248 template \n+249 void insert(_\bK_\be_\by j, const ValueType& val);\n+250\n+_\b2_\b5_\b2 void _\bi_\bn_\bs_\be_\br_\bt_\bD_\bo_\bu_\bb_\bl_\be(_\bK_\be_\by j, double c) { insert(j,c); }\n+253\n+255 void update(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be& val);\n+256\n+261 template \n+_\b2_\b6_\b2 void _\bu_\bp_\bd_\ba_\bt_\be(_\bK_\be_\by j, const T& val);\n+263\n+265 void update(const _\bV_\ba_\bl_\bu_\be_\bs& values);\n+266\n+268 void insert_or_assign(_\bK_\be_\by j, const _\bV_\ba_\bl_\bu_\be& val);\n+269\n+274 void insert_or_assign(const _\bV_\ba_\bl_\bu_\be_\bs& values);\n+275\n+277 template \n+278 void insert_or_assign(_\bK_\be_\by j, const ValueType& val);\n+279\n+281 void erase(_\bK_\be_\by j);\n+282\n+287 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keys() const;\n+288\n+292 _\bK_\be_\by_\bS_\be_\bt keySet() const;\n+293\n+295 _\bV_\ba_\bl_\bu_\be_\bs& operator=(const _\bV_\ba_\bl_\bu_\be_\bs& rhs);\n+296\n+_\b2_\b9_\b8 void _\bs_\bw_\ba_\bp(_\bV_\ba_\bl_\bu_\be_\bs& other) { values_.swap(other.values_); }\n+299\n+_\b3_\b0_\b1 void _\bc_\bl_\be_\ba_\br() { values_.clear(); }\n+302\n+304 size_t dim() const;\n+305\n+307 std::map dims() const;\n+308\n+310 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs zeroVectors() const;\n+311\n+312 // Count values of given type \\c ValueType\n+313 template\n+314 size_t count() const {\n+315 size_t i = 0;\n+316 for (const auto key_value : values_) {\n+317 if (dynamic_cast*>(key_value.second))\n+318 ++i;\n+319 }\n+320 return i;\n+321 }\n+322\n+342 template \n+343 std::map // , std::less, Eigen::\n+aligned_allocator\n+344 extract(const std::function& filterFcn = &_truePredicate)\n+const;\n+345\n+346#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+347 // Types obtained by iterating\n+348 typedef KeyValueMap::const_iterator::value_type ConstKeyValuePtrPair;\n+349 typedef KeyValueMap::iterator::value_type KeyValuePtrPair;\n+350\n+352 typedef boost::transform_iterator<\n+353 std::function, KeyValueMap::iterator>\n+iterator;\n+354\n+356 typedef boost::transform_iterator<\n+357 std::function,\n+KeyValueMap::const_iterator> const_iterator;\n+358\n+360 typedef boost::transform_iterator<\n+361 std::function, KeyValueMap::\n+reverse_iterator> reverse_iterator;\n+362\n+364 typedef boost::transform_iterator<\n+365 std::function,\n+KeyValueMap::const_reverse_iterator> const_reverse_iterator;\n+366\n+371 std::pair tryInsert(Key j, const Value& value);\n+372\n+373 static ConstKeyValuePair make_const_deref_pair(const KeyValueMap::\n+const_iterator::value_type& key_value) {\n+374 return ConstKeyValuePair(key_value.first, *key_value.second); }\n+375\n+376 static KeyValuePair make_deref_pair(const KeyValueMap::iterator::\n+value_type& key_value) {\n+377 return KeyValuePair(key_value.first, *key_value.second); }\n+378\n+379 const_iterator _begin() const { return boost::make_transform_iterator\n+(values_.begin(), &make_const_deref_pair); }\n+380 const_iterator _end() const { return boost::make_transform_iterator\n+(values_.end(), &make_const_deref_pair); }\n+381 iterator begin() { return boost::make_transform_iterator(values_.begin(),\n+&make_deref_pair); }\n+382 iterator end() { return boost::make_transform_iterator(values_.end(),\n+&make_deref_pair); }\n+383 const_reverse_iterator rbegin() const { return boost::\n+make_transform_iterator(values_.rbegin(), &make_const_deref_pair); }\n+384 const_reverse_iterator rend() const { return boost::make_transform_iterator\n+(values_.rend(), &make_const_deref_pair); }\n+385 reverse_iterator rbegin() { return boost::make_transform_iterator\n+(values_.rbegin(), &make_deref_pair); }\n+386 reverse_iterator rend() { return boost::make_transform_iterator\n+(values_.rend(), &make_deref_pair); }\n+387\n+390 iterator find(Key j) { return boost::make_transform_iterator(values_.find\n+(j), &make_deref_pair); }\n+391\n+393 iterator lower_bound(Key j) { return boost::make_transform_iterator\n+(values_.lower_bound(j), &make_deref_pair); }\n+394\n+396 iterator upper_bound(Key j) { return boost::make_transform_iterator\n+(values_.upper_bound(j), &make_deref_pair); }\n+397\n+399 template \n+400 class Filtered;\n+401\n+403 template \n+404 class ConstFiltered;\n+405\n+407 template \n+408 _\bV_\ba_\bl_\bu_\be_\bs(const Filtered& view);\n+409\n+411 template \n+412 _\bV_\ba_\bl_\bu_\be_\bs(const ConstFiltered& view);\n+413\n+415 Filtered GTSAM_DEPRECATED\n+416 filter(const std::function& filterFcn);\n+417\n+419 template \n+420 Filtered GTSAM_DEPRECATED\n+421 filter(const std::function& filterFcn = &_truePredicate);\n+422\n+424 ConstFiltered GTSAM_DEPRECATED\n+425 filter(const std::function& filterFcn) const;\n+426\n+428 template \n+429 ConstFiltered GTSAM_DEPRECATED filter(\n+430 const std::function& filterFcn = &_truePredicate) const;\n+431#endif\n+432\n+433 private:\n+434 // Filters based on ValueType (if not Value) and also based on the user-\n+435 // supplied \\c filter function.\n+436 template\n+437 static bool filterHelper(const std::function filter, const\n+ConstKeyValuePair& key_value) {\n+438 BOOST_STATIC_ASSERT((!boost::is_same::value));\n+439 // Filter and check the type\n+440 return filter(key_value.key) && (dynamic_cast*>(&key_value.value));\n+441 }\n+442\n+_\b4_\b4_\b4 friend class boost::serialization::access;\n+445 template\n+446 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+447 ar & BOOST_SERIALIZATION_NVP(values_);\n+448 }\n+449\n+450 };\n+451\n+452 /\n+* ************************************************************************* */\n+_\b4_\b5_\b3 class _\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs : public std::exception {\n+454 protected:\n+_\b4_\b5_\b5 const _\bK_\be_\by _\bk_\be_\by_\b_;\n+456\n+457 private:\n+458 mutable std::string message_;\n+459\n+460 public:\n+_\b4_\b6_\b2 _\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs(_\bK_\be_\by _\bk_\be_\by) noexcept :\n+463 _\bk_\be_\by_\b_(_\bk_\be_\by) {}\n+464\n+465 _\b~_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs() noexcept override {}\n+466\n+_\b4_\b6_\b8 _\bK_\be_\by _\bk_\be_\by() const noexcept { return _\bk_\be_\by_\b_; }\n+469\n+471 GTSAM_EXPORT const char* _\bw_\bh_\ba_\bt() const noexcept override;\n+472 };\n+473\n+474 /\n+* ************************************************************************* */\n+_\b4_\b7_\b5 class _\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt : public std::exception {\n+476 protected:\n+_\b4_\b7_\b7 const char* _\bo_\bp_\be_\br_\ba_\bt_\bi_\bo_\bn_\b_;\n+_\b4_\b7_\b8 const _\bK_\be_\by _\bk_\be_\by_\b_;\n+479\n+480 private:\n+481 mutable std::string message_;\n+482\n+483 public:\n+_\b4_\b8_\b5 _\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt(const char* operation, _\bK_\be_\by _\bk_\be_\by) noexcept :\n+486 operation_(operation), _\bk_\be_\by_\b_(_\bk_\be_\by) {}\n+487\n+488 _\b~_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt() noexcept override {}\n+489\n+_\b4_\b9_\b1 _\bK_\be_\by _\bk_\be_\by() const noexcept { return _\bk_\be_\by_\b_; }\n+492\n+494 GTSAM_EXPORT const char* _\bw_\bh_\ba_\bt() const noexcept override;\n+495 };\n+496\n+497 /\n+* ************************************************************************* */\n+_\b4_\b9_\b8 class _\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be : public std::exception {\n+499 protected:\n+_\b5_\b0_\b0 const _\bK_\be_\by _\bk_\be_\by_\b_;\n+501 const std::type_info& storedTypeId_;\n+502 const std::type_info& requestedTypeId_;\n+503\n+504 private:\n+505 mutable std::string message_;\n+506\n+507 public:\n+_\b5_\b0_\b9 _\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be(_\bK_\be_\by _\bk_\be_\by,\n+510 const std::type_info& storedTypeId, const std::type_info& requestedTypeId)\n+noexcept :\n+511 _\bk_\be_\by_\b_(_\bk_\be_\by), storedTypeId_(storedTypeId), requestedTypeId_(requestedTypeId)\n+{}\n+512\n+513 _\b~_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be() noexcept override {}\n+514\n+_\b5_\b1_\b6 _\bK_\be_\by _\bk_\be_\by() const noexcept { return _\bk_\be_\by_\b_; }\n+517\n+_\b5_\b1_\b9 const std::type_info& _\bs_\bt_\bo_\br_\be_\bd_\bT_\by_\bp_\be_\bI_\bd() const { return storedTypeId_; }\n+520\n+_\b5_\b2_\b2 const std::type_info& _\br_\be_\bq_\bu_\be_\bs_\bt_\be_\bd_\bT_\by_\bp_\be_\bI_\bd() const { return requestedTypeId_; }\n+523\n+525 GTSAM_EXPORT const char* _\bw_\bh_\ba_\bt() const noexcept override;\n+526 };\n+527\n+528 /\n+* ************************************************************************* */\n+_\b5_\b2_\b9 class _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\ba_\bl_\bu_\be_\bs_\bM_\bi_\bs_\bm_\ba_\bt_\bc_\bh_\be_\bd : public std::exception {\n+530\n+531 public:\n+532 _\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\ba_\bl_\bu_\be_\bs_\bM_\bi_\bs_\bm_\ba_\bt_\bc_\bh_\be_\bd() noexcept {}\n+533\n+534 _\b~_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\ba_\bl_\bu_\be_\bs_\bM_\bi_\bs_\bm_\ba_\bt_\bc_\bh_\be_\bd() noexcept override {}\n+535\n+536 const char* _\bw_\bh_\ba_\bt() const noexcept override {\n+537 return \"The Values 'this' and the argument passed to Values::\n+localCoordinates have mismatched keys and values\";\n+538 }\n+539 };\n+540\n+541 /\n+* ************************************************************************* */\n+_\b5_\b4_\b2 class _\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd: public std::exception {\n+543\n+544 protected:\n+545 const size_t M1_, N1_;\n+546 const size_t M2_, N2_;\n+547\n+548 private:\n+549 mutable std::string message_;\n+550\n+551 public:\n+552 _\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd(size_t M1, size_t N1, size_t M2, size_t N2) noexcept :\n+553 M1_(M1), N1_(N1), M2_(M2), N2_(N2) {\n+554 }\n+555\n+556 _\b~_\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd() noexcept override {\n+557 }\n+558\n+559 GTSAM_EXPORT const char* what() const noexcept override;\n+560 };\n+561\n+562 /\n+* ************************************************************************* */\n+564 template<>\n+_\b5_\b6_\b5 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bV_\ba_\bl_\bu_\be_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+566 };\n+567\n+568} //\\ namespace gtsam\n+569\n+570\n+571#include \n+_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n+An easy way to control which allocator is used for Fast* collections.\n+_\bK_\be_\by_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-FastVector< FactorIndex > FactorIndices\n-Define collection types:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point2 operator*(double s, const Point2 &p)\n+multiply with scalar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n+bool operator!=(const Matrix &A, const Matrix &B)\n+inequality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+bool operator==(const Matrix &A, const Matrix &B)\n+equality is just equal_with_abs_tol 1e-9\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n+Default allocator for list, map, and set types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastDefaultAllocator.h:50\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt\n-This struct is returned from ISAM2::update() and contains information about the\n-update that is useful...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd\n-size_t variablesRelinearized\n-The number of variables that were relinearized because their linear deltas\n-exceeded the reslinearizat...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bg_\be_\bt_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd\n-size_t getVariablesRelinearized() const\n-Getters and Setters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:176\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs_\bR_\be_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bd\n-size_t factorsRecalculated\n-The number of factors that were included in reelimination of the Bayes' tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bd_\be_\bt_\ba_\bi_\bl_\bs\n-DetailedResults * details()\n-Return pointer to detail, 0 if no detail requested.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:165\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\be_\br_\br_\bo_\br_\bB_\be_\bf_\bo_\br_\be\n-boost::optional< double > errorBefore\n-The nonlinear error of all of the factors, including new factors and variables\n-added during the curre...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string str=\"\") const\n-Print results.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:168\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bd_\be_\bt_\ba_\bi_\bl\n-boost::optional< DetailedResults > detail\n-Detailed results, if enabled by ISAM2Params::enableDetailedResults.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:158\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bc_\bl_\bi_\bq_\bu_\be_\bs\n-size_t cliques\n-The number of cliques in the Bayes' Tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bk_\be_\by_\bs_\bW_\bi_\bt_\bh_\bR_\be_\bm_\bo_\bv_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-KeySet keysWithRemovedFactors\n-Keys of variables that had factors removed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd\n-size_t variablesReeliminated\n-The number of variables that were reeliminated as parts of the Bayes' Tree were\n-recalculated,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bu_\bn_\bu_\bs_\be_\bd_\bK_\be_\by_\bs\n-KeySet unusedKeys\n-Unused keys, and indices for unused keys, i.e., keys that are empty now and do\n-not appear in the new ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bo_\bb_\bs_\be_\br_\bv_\be_\bd_\bK_\be_\by_\bs\n-KeyVector observedKeys\n-keys for variables that were observed, i.e., not unused.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bm_\ba_\br_\bk_\be_\bd_\bK_\be_\by_\bs\n-KeySet markedKeys\n-All keys that were marked during the update process.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bn_\be_\bw_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-FactorIndices newFactorsIndices\n-The indices of the newly-added factors, in 1-to-1 correspondence with the\n-factors passed as newFactor...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\be_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br\n-boost::optional< double > errorAfter\n-The nonlinear error of all of the factors computed after the current update,\n-meaning that variables a...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs\n-A struct holding detailed results, which must be enabled with ISAM2Params::\n-enableDetailedResults.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs\n-StatusMap variableStatus\n-The status of each variable during this update, see VariableStatus.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:153\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs\n-The status of a single variable, this struct is stored in DetailedResults::\n-variableStatus.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bI_\bn_\bv_\bo_\bl_\bv_\be_\bd\n-bool isRelinearizeInvolved\n-Whether the variable was below the relinearization threshold but was\n-relinearized by being involved i...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bs_\bO_\bb_\bs_\be_\br_\bv_\be_\bd\n-bool isObserved\n-Whether the variable was relinearized, either by being above the\n-relinearization threshold or by invo...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bs_\bN_\be_\bw\n-bool isNew\n-Whether the variable itself was just added.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bs_\bA_\bb_\bo_\bv_\be_\bR_\be_\bl_\bi_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-bool isAboveRelinThreshold\n-Whether the variable was just relinearized due to being above the\n-relinearization threshold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:125\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd\n-bool isReeliminated\n-Whether the variable was just reeliminated, due to being relinearized,\n-observed, new,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:124\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bn_\bR_\bo_\bo_\bt_\bC_\bl_\bi_\bq_\bu_\be\n-bool inRootClique\n-Whether the variable is in the root clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:139\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bV_\ba_\bl_\bu_\be\n+Wraps any type T so it can play as a Value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GenericValue.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n+This is the base class for any type to be stored in Values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bd_\be_\ba_\bl_\bl_\bo_\bc_\ba_\bt_\be_\b_\n+virtual void deallocate_() const =0\n+Deallocate a raw pointer of this value.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be_\b_\n+virtual Value * clone_() const =0\n+Clone this value in a special memory pool, must be deleted with Value::\n+deallocate_,...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bC_\bl_\bo_\bn_\be_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(Key j, const T &val)\n+Templated version to update a variable with the given j, throws\n+KeyDoesNotExist if j is not presen...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+whether the config is empty\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bu_\bp_\bp_\be_\br_\b__\bb_\bo_\bu_\bn_\bd\n+deref_iterator upper_bound(Key j) const\n+Find the lowest-ordered element greater than the specified key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< Values > shared_ptr\n+A shared_ptr to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bl_\be_\ba_\br\n+void clear()\n+Remove all variables from the config.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:301\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bs_\bw_\ba_\bp\n+void swap(Values &other)\n+Swap the contents of two Values without copying data.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:298\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\bD_\bo_\bu_\bb_\bl_\be\n+void insertDouble(Key j, double c)\n+version for double\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:252\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+The number of variables in this config.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:181\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bf_\bi_\bn_\bd\n+deref_iterator find(Key j) const\n+Find an element by key, returning an iterator, or end() if the key was not\n+found.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:213\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< const Values > const_shared_ptr\n+A const shared_ptr to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:90\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+Values()=default\n+Default constructor creates an empty Values class.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bl_\bo_\bw_\be_\br_\b__\bb_\bo_\bu_\bn_\bd\n+deref_iterator lower_bound(Key j) const\n+Find the element greater than or equal to the specified key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:216\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt_\bD_\bo_\bu_\bb_\bl_\be\n+double atDouble(size_t key) const\n+version for double\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+A key-value pair, which you get by dereferencing iterators.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+Value & value\n+The value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bk_\be_\by\n+const Key key\n+The key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+A key-value pair, which you get by dereferencing iterators.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bk_\be_\by\n+const Key key\n+The key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+const Value & value\n+The value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:190\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:453\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs_\b:_\b:_\bk_\be_\by_\b_\n+const Key key_\n+The key that already existed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:455\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs_\b:_\b:_\bw_\bh_\ba_\bt\n+GTSAM_EXPORT const char * what() const noexcept override\n+The message to be displayed to the user.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:280\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs\n+ValuesKeyAlreadyExists(Key key) noexcept\n+Construct with the key-value pair attempted to be added.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:462\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs_\b:_\b:_\bk_\be_\by\n+Key key() const noexcept\n+The duplicate key that was attempted to be added.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:468\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:475\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt\n+ValuesKeyDoesNotExist(const char *operation, Key key) noexcept\n+Construct with the key that does not exist in the values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:485\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt_\b:_\b:_\bk_\be_\by_\b_\n+const Key key_\n+The key that does not exist.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:478\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt_\b:_\b:_\bk_\be_\by\n+Key key() const noexcept\n+The key that was attempted to be accessed that does not exist.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:491\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bi_\bo_\bn_\b_\n+const char * operation_\n+The operation that attempted to access the key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:477\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:498\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be_\b:_\b:_\bs_\bt_\bo_\br_\be_\bd_\bT_\by_\bp_\be_\bI_\bd\n+const std::type_info & storedTypeId() const\n+The typeid of the value stores in the Values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:519\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be_\b:_\b:_\bk_\be_\by\n+Key key() const noexcept\n+The key that was attempted to be accessed that does not exist.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:516\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be_\b:_\b:_\bk_\be_\by_\b_\n+const Key key_\n+The key requested.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:500\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be\n+ValuesIncorrectType(Key key, const std::type_info &storedTypeId, const std::\n+type_info &requestedTypeId) noexcept\n+Construct with the key that does not exist in the values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:509\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be_\b:_\b:_\br_\be_\bq_\bu_\be_\bs_\bt_\be_\bd_\bT_\by_\bp_\be_\bI_\bd\n+const std::type_info & requestedTypeId() const\n+The requested typeid.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:522\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\ba_\bl_\bu_\be_\bs_\bM_\bi_\bs_\bm_\ba_\bt_\bc_\bh_\be_\bd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:529\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:542\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh\n+ * _\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01130.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01130.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizerParams.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,68 +94,42 @@\n \n \n \n \n \n
\n \n-
Values.h File Reference
\n+
NonlinearOptimizerParams.cpp File Reference
\n
\n
\n \n-

A non-templated config holding any types of Manifold-group elements. \n+

Parameters for nonlinear optimization. \n More...

\n-\n-

Go to the source code of this file.

\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-Classes

class  gtsam::ValueCloneAllocator
 
class  gtsam::Values
 A non-templated config holding any types of Manifold-group elements. More...
 
struct  gtsam::Values::KeyValuePair
 A key-value pair, which you get by dereferencing iterators. More...
 
struct  gtsam::Values::ConstKeyValuePair
 A key-value pair, which you get by dereferencing iterators. More...
 
struct  gtsam::Values::deref_iterator
 
class  gtsam::ValuesKeyAlreadyExists
 
class  gtsam::ValuesKeyDoesNotExist
 
class  gtsam::ValuesIncorrectType
 
class  gtsam::DynamicValuesMismatched
 
class  gtsam::NoMatchFoundForFixed
 
struct  gtsam::traits< Values >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A non-templated config holding any types of Manifold-group elements.

\n-
Author
Richard Roberts
\n-

Detailed story: A values structure is a map from keys to values. It is used to specify the value of a bunch of variables in a factor graph. A Values is a values structure which can hold variables that are elements on manifolds, not just vectors. It then, as a whole, implements a aggregate type which is also a manifold element, and hence supports operations dim, retract, and localCoordinates.

\n+

Parameters for nonlinear optimization.

\n+
Date
Jul 24, 2012
\n+
Author
Yong-Dian Jian
\n+
\n+Richard Roberts
\n+
\n+Frank Dellaert
\n+
\n+Andrew Melim
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,55 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Values.h File Reference\n-A non-templated config holding any types of Manifold-group elements. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bC_\bl_\bo_\bn_\be_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-\u00a0 A non-templated config holding any types of Manifold-group elements.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n-\u00a0 A key-value pair, which you get by dereferencing iterators. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n-\u00a0 A key-value pair, which you get by dereferencing iterators. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bd_\be_\br_\be_\bf_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bA_\bl_\br_\be_\ba_\bd_\by_\bE_\bx_\bi_\bs_\bt_\bs\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bK_\be_\by_\bD_\bo_\be_\bs_\bN_\bo_\bt_\bE_\bx_\bi_\bs_\bt\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\bI_\bn_\bc_\bo_\br_\br_\be_\bc_\bt_\bT_\by_\bp_\be\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\bV_\ba_\bl_\bu_\be_\bs_\bM_\bi_\bs_\bm_\ba_\bt_\bc_\bh_\be_\bd\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bM_\ba_\bt_\bc_\bh_\bF_\bo_\bu_\bn_\bd_\bF_\bo_\br_\bF_\bi_\bx_\be_\bd\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bV_\ba_\bl_\bu_\be_\bs_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+NonlinearOptimizerParams.cpp File Reference\n+Parameters for nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A non-templated config holding any types of Manifold-group elements.\n+Parameters for nonlinear optimization.\n+ Date\n+ Jul 24, 2012\n Author\n+ Yong-Dian Jian\n Richard Roberts\n-Detailed story: A values structure is a map from keys to values. It is used to\n-specify the value of a bunch of variables in a factor graph. A _\bV_\ba_\bl_\bu_\be_\bs is a\n-values structure which can hold variables that are elements on manifolds, not\n-just vectors. It then, as a whole, implements a aggregate type which is also a\n-manifold element, and hence supports operations dim, retract, and\n-localCoordinates.\n+ Frank Dellaert\n+ Andrew Melim\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01133.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01133.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearConjugateGradientOptimizer.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizer.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,39 @@\n \n \n \n \n \n
\n \n-
NonlinearConjugateGradientOptimizer.cpp File Reference
\n+Namespaces |\n+Typedefs
\n+
DoglegOptimizer.cpp File Reference
\n \n
\n-\n-

Simple non-linear optimizer that solves using non-preconditioned CG. \n-More...

\n \n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Typedefs

\n+typedef internal::DoglegState gtsam::State
 
\n

Detailed Description

\n-

Simple non-linear optimizer that solves using non-preconditioned CG.

\n-
Author
Yong-Dian Jian
\n-
Date
Jun 11, 2012
\n+
Author
Richard Roberts
\n+
Date
Feb 26, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-NonlinearConjugateGradientOptimizer.cpp File Reference\n-Simple non-linear optimizer that solves using n\bno\bon\bn-\b-p\bpr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\bed\bd CG. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+DoglegOptimizer.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef internal::DoglegState\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSt\bta\bat\bte\be\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Simple non-linear optimizer that solves using n\bno\bon\bn-\b-p\bpr\bre\bec\bco\bon\bnd\bdi\bit\bti\bio\bon\bne\bed\bd CG.\n Author\n- Yong-Dian Jian\n+ Richard Roberts\n Date\n- Jun 11, 2012\n+ Feb 26, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\n+ * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01142.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01142.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/expressionTesting.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.h File Reference\n \n \n \n \n \n \n \n@@ -94,107 +94,48 @@\n \n \n \n \n \n
\n \n-
expressionTesting.h File Reference
\n+Classes |\n+Namespaces
\n+
Marginals.h File Reference
\n \n
\n \n-

Test harness methods for expressions. \n+

A class for computing marginals in a NonlinearFactorGraph. \n More...

\n \n

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::Marginals
 A class for computing Gaussian marginals of variables in a NonlinearFactorGraph. More...
 
class  gtsam::JointMarginal
 A class to store and access a joint marginal, returned from Marginals::jointMarginalCovariance and Marginals::jointMarginalInformation. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-

\n-Macros

#define EXPECT_CORRECT_EXPRESSION_JACOBIANS(expression, values, numerical_derivative_step, tolerance)    { EXPECT(gtsam::internal::testExpressionJacobians(name_, expression, values, numerical_derivative_step, tolerance)); }
 Check the Jacobians produced by an expression against finite differences.
 
\n-\n-\n-\n-\n

\n-Functions

\n-template<typename T >
bool gtsam::internal::testExpressionJacobians (const std::string &name_, const gtsam::Expression< T > &expression, const gtsam::Values &values, double nd_step, double tolerance)
 
\n

Detailed Description

\n-

Test harness methods for expressions.

\n-
Date
September 18, 2014
\n-
Author
Frank Dellaert
\n-
\n-Paul Furgale
\n-

Macro Definition Documentation

\n-\n-

◆ EXPECT_CORRECT_EXPRESSION_JACOBIANS

\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-
#define EXPECT_CORRECT_EXPRESSION_JACOBIANS( expression,
 values,
 numerical_derivative_step,
 tolerance 
)    { EXPECT(gtsam::internal::testExpressionJacobians(name_, expression, values, numerical_derivative_step, tolerance)); }
\n-
\n-\n-

Check the Jacobians produced by an expression against finite differences.

\n-
Parameters
\n- \n- \n- \n- \n- \n-
expressionThe expression to test.
valuesValues filled in for testing the Jacobians.
numerical_derivative_stepThe step to use when computing the finite difference Jacobians
toleranceThe numerical tolerance to use when comparing Jacobians.
\n-
\n-
\n-\n-
\n-
\n-
\n+

A class for computing marginals in a NonlinearFactorGraph.

\n+
Author
Richard Roberts
\n+
Date
May 14, 2012
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,58 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-expressionTesting.h File Reference\n-Test harness methods for expressions. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Marginals.h File Reference\n+A class for computing marginals in a NonlinearFactorGraph. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n+\u00a0 A class for computing Gaussian marginals of variables in a\n+ _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl\n+ A class to store and access a joint marginal, returned from _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:\n+\u00a0 _\bj_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be and _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bE_\bX_\bP_\bE_\bC_\bT_\b__\bC_\bO_\bR_\bR_\bE_\bC_\bT_\b__\bE_\bX_\bP_\bR_\bE_\bS_\bS_\bI_\bO_\bN_\b__\bJ_\bA_\bC_\bO_\bB_\bI_\bA_\bN_\bS(expression, values,\n- numerical_derivative_step, tolerance)\u00a0\u00a0\u00a0 { EXPECT(gtsam::internal::\n- testExpressionJacobians(name_, expression, values,\n- numerical_derivative_step, tolerance)); }\n-\u00a0 Check the Jacobians produced by an expression against finite\n- differences.\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:t\bte\bes\bst\btE\bEx\bxp\bpr\bre\bes\bss\bsi\bio\bon\bnJ\bJa\bac\bco\bob\bbi\bia\ban\bns\bs (const std::string &name_, const\n- _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > &expression, const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs &values, double\n- nd_step, double tolerance)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Test harness methods for expressions.\n- Date\n- September 18, 2014\n+A class for computing marginals in a NonlinearFactorGraph.\n Author\n- Frank Dellaert\n- Paul Furgale\n-*\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0E\bEX\bXP\bPE\bEC\bCT\bT_\b_C\bCO\bOR\bRR\bRE\bEC\bCT\bT_\b_E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bN_\b_J\bJA\bAC\bCO\bOB\bBI\bIA\bAN\bNS\bS *\b**\b**\b**\b**\b*\n-#define ( \u00a0 expression,\n-EXPECT_CORRECT_EXPRESSION_JACOBIANS\n- \u00a0 values,\n- \u00a0 numerical_derivative_step,\n- \u00a0 tolerance\u00a0\n- \u00a0\u00a0\u00a0 { EXPECT(gtsam::internal::\n- testExpressionJacobians(name_,\n- ) expression, values,\n- numerical_derivative_step, tolerance));\n- }\n-Check the Jacobians produced by an expression against finite differences.\n- Parameters\n- expression The expression to test.\n- values _\bV_\ba_\bl_\bu_\be_\bs filled in for testing the Jacobians.\n- numerical_derivative_step The step to use when computing the finite\n- difference Jacobians\n- tolerance The numerical tolerance to use when comparing\n- Jacobians.\n+ Richard Roberts\n+ Date\n+ May 14, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh\n+ * _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01142.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01142.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a01142 = [\n- [\"EXPECT_CORRECT_EXPRESSION_JACOBIANS\", \"a01142.html#a701d0cd12b81a725f7f9cd2432fe9e2a\", null]\n+ [\"gtsam::Marginals\", \"a04452.html\", \"a04452\"],\n+ [\"gtsam::JointMarginal\", \"a04456.html\", \"a04456\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01142_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01142_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/expressionTesting.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.h Source File\n \n \n \n \n \n \n \n@@ -98,66 +98,188 @@\n
No Matches
\n \n \n \n \n \n
\n-
expressionTesting.h
\n+
Marginals.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <gtsam/nonlinear/ExpressionFactor.h>
\n-\n-
24#include <gtsam/base/Testable.h>
\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
28namespace internal {
\n-
29// CPPUnitLite-style test for linearization of an ExpressionFactor
\n-
30template<typename T>
\n-
31bool testExpressionJacobians(const std::string& name_,
\n-
32 const gtsam::Expression<T>& expression, const gtsam::Values& values,
\n-
33 double nd_step, double tolerance) {
\n-
34 // Create factor
\n-
35 size_t size = traits<T>::dimension;
\n-
36 ExpressionFactor<T> f(noiseModel::Unit::Create(size),
\n-
37 expression.value(values), expression);
\n-
38 return testFactorJacobians(name_, f, values, nd_step, tolerance);
\n-
39}
\n-
40} // namespace internal
\n-
41} // namespace gtsam
\n-
42
\n-
\n-
48#define EXPECT_CORRECT_EXPRESSION_JACOBIANS(expression, values, numerical_derivative_step, tolerance) \\
\n-
49 { EXPECT(gtsam::internal::testExpressionJacobians(name_, expression, values, numerical_derivative_step, tolerance)); }
\n+
19#pragma once
\n+
20
\n+\n+\n+\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
27class JointMarginal;
\n+
28
\n+
\n+
32class GTSAM_EXPORT Marginals {
\n+
33
\n+
34public:
\n+
35
\n+
\n+\n+
38 CHOLESKY,
\n+
39 QR
\n+
40 };
\n
\n-
Concept check for values that can be used in unit tests.
\n-
Evaluate derivatives of a nonlinear factor numerically.
\n+
41
\n+
42protected:
\n+
43
\n+\n+
45 Values values_;
\n+
46 Factorization factorization_;
\n+
47 GaussianBayesTree bayesTree_;
\n+
48
\n+
49public:
\n+
50
\n+\n+
53
\n+
59 Marginals(const NonlinearFactorGraph& graph, const Values& solution, Factorization factorization = CHOLESKY);
\n+
60
\n+
67 Marginals(const NonlinearFactorGraph& graph, const Values& solution, const Ordering& ordering,
\n+
68 Factorization factorization = CHOLESKY);
\n+
69
\n+
75 Marginals(const GaussianFactorGraph& graph, const Values& solution, Factorization factorization = CHOLESKY);
\n+
76
\n+
83 Marginals(const GaussianFactorGraph& graph, const Values& solution, const Ordering& ordering,
\n+
84 Factorization factorization = CHOLESKY);
\n+
85
\n+
92 Marginals(const GaussianFactorGraph& graph, const VectorValues& solution, Factorization factorization = CHOLESKY);
\n+
93
\n+
100 Marginals(const GaussianFactorGraph& graph, const VectorValues& solution, const Ordering& ordering,
\n+
101 Factorization factorization = CHOLESKY);
\n+
102
\n+
104 void print(const std::string& str = "Marginals: ", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
105
\n+
107 GaussianFactor::shared_ptr marginalFactor(Key variable) const;
\n+
108
\n+
111 Matrix marginalInformation(Key variable) const;
\n+
112
\n+
114 Matrix marginalCovariance(Key variable) const;
\n+
115
\n+
117 JointMarginal jointMarginalCovariance(const KeyVector& variables) const;
\n+
118
\n+
120 JointMarginal jointMarginalInformation(const KeyVector& variables) const;
\n+
121
\n+
123 VectorValues optimize() const;
\n+
124
\n+
125protected:
\n+
126
\n+
128 void computeBayesTree();
\n+
129
\n+
131 void computeBayesTree(const Ordering& ordering);
\n+
132
\n+
133public:
\n+
134#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
136 GTSAM_DEPRECATED Marginals(const NonlinearFactorGraph& graph, const Values& solution, Factorization factorization,
\n+
137 const Ordering& ordering) : Marginals(graph, solution, ordering, factorization) {}
\n+
138
\n+
140 GTSAM_DEPRECATED Marginals(const GaussianFactorGraph& graph, const Values& solution, Factorization factorization,
\n+
141 const Ordering& ordering) : Marginals(graph, solution, ordering, factorization) {}
\n+
142
\n+
144 GTSAM_DEPRECATED Marginals(const GaussianFactorGraph& graph, const VectorValues& solution, Factorization factorization,
\n+
145 const Ordering& ordering) : Marginals(graph, solution, ordering, factorization) {}
\n+
146#endif
\n+
147
\n+
148};
\n+
\n+
149
\n+
\n+
153class GTSAM_EXPORT JointMarginal {
\n+
154
\n+
155protected:
\n+
156 SymmetricBlockMatrix blockMatrix_;
\n+
157 KeyVector keys_;
\n+
158 FastMap<Key, size_t> indices_;
\n+
159
\n+
160public:
\n+\n+
163
\n+
\n+
177 Matrix operator()(Key iVariable, Key jVariable) const {
\n+
178 const auto indexI = indices_.at(iVariable);
\n+
179 const auto indexJ = indices_.at(jVariable);
\n+
180 return blockMatrix_.block(indexI, indexJ);
\n+
181 }
\n+
\n+
182
\n+
\n+
184 Matrix at(Key iVariable, Key jVariable) const {
\n+
185 return (*this)(iVariable, jVariable);
\n+
186 }
\n+
\n+
187
\n+
\n+
189 Matrix fullMatrix() const {
\n+
190 return blockMatrix_.selfadjointView();
\n+
191 }
\n+
\n+
192
\n+
194 void print(const std::string& s = "", const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n+
195
\n+
196protected:
\n+
197 JointMarginal(const Matrix& fullMatrix, const std::vector<size_t>& dims, const KeyVector& keys) :
\n+
198 blockMatrix_(dims, fullMatrix), keys_(keys), indices_(Ordering(keys).invert()) {}
\n+
199
\n+
200 friend class Marginals;
\n+
201
\n+
202};
\n+
\n+
203
\n+
204} /* namespace gtsam */
\n+
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n+
Factor Graph consisting of non-linear factors.
\n+
A non-templated config holding any types of Manifold-group elements.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
static shared_ptr Create(size_t dim)
Create a unit covariance noise model.
Definition NoiseModel.h:597
\n-
Expression class that supports automatic differentiation.
Definition Expression.h:48
\n-
T value(const Values &values, boost::optional< std::vector< Matrix > & > H=boost::none) const
Return value and optional derivatives, reverse AD version Notes: this is not terribly efficient,...
Definition Expression-inl.h:147
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n+
Matrix block(DenseIndex I, DenseIndex J) const
Get a copy of a block (anywhere in the matrix).
Definition SymmetricBlockMatrix.cpp:60
\n+
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j).
Definition SymmetricBlockMatrix.h:156
\n+
Definition Ordering.h:34
\n+
A Bayes tree representing a Gaussian density.
Definition GaussianBayesTree.h:52
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
A class for computing Gaussian marginals of variables in a NonlinearFactorGraph.
Definition Marginals.h:32
\n+
Factorization
The linear factorization mode - either CHOLESKY (faster and suitable for most problems) or QR (slower...
Definition Marginals.h:37
\n+
Marginals()
Default constructor only for wrappers.
Definition Marginals.h:52
\n+
A class to store and access a joint marginal, returned from Marginals::jointMarginalCovariance and Ma...
Definition Marginals.h:153
\n+
Matrix at(Key iVariable, Key jVariable) const
Synonym for operator()
Definition Marginals.h:184
\n+
Matrix fullMatrix() const
The full, dense covariance/information matrix of the joint marginal.
Definition Marginals.h:189
\n+
Matrix operator()(Key iVariable, Key jVariable) const
Access a block, corresponding to a pair of variables, of the joint marginal.
Definition Marginals.h:177
\n+
JointMarginal()
Default constructor only for wrappers.
Definition Marginals.h:162
\n+
Definition NonlinearFactorGraph.h:55
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
The Factor::error simply extracts the.
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,74 +1,260 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-expressionTesting.h\n+Marginals.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include \n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bf_\ba_\bc_\bt_\bo_\br_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-28namespace internal {\n-29// CPPUnitLite-style test for linearization of an ExpressionFactor\n-30template\n-31bool testExpressionJacobians(const std::string& name_,\n-32 const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& expression, const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs& values,\n-33 double nd_step, double tolerance) {\n-34 // Create factor\n-35 size_t size = traits::dimension;\n-36 ExpressionFactor f(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(size),\n-37 expression._\bv_\ba_\bl_\bu_\be(values), expression);\n-38 return testFactorJacobians(name_, f, values, nd_step, tolerance);\n-39}\n-40} // namespace internal\n-41} // namespace gtsam\n-42\n-_\b4_\b8#define EXPECT_CORRECT_EXPRESSION_JACOBIANS(expression, values,\n-numerical_derivative_step, tolerance) \\\n-49 { EXPECT(gtsam::internal::testExpressionJacobians(name_, expression, values,\n-numerical_derivative_step, tolerance)); }\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bf_\ba_\bc_\bt_\bo_\br_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh\n-Evaluate derivatives of a nonlinear factor numerically.\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+27class JointMarginal;\n+28\n+_\b3_\b2class GTSAM_EXPORT _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs {\n+33\n+34public:\n+35\n+_\b3_\b7 enum _\bF_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn {\n+38 CHOLESKY,\n+39 QR\n+40 };\n+41\n+42protected:\n+43\n+44 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph_;\n+45 _\bV_\ba_\bl_\bu_\be_\bs values_;\n+46 Factorization factorization_;\n+47 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be bayesTree_;\n+48\n+49public:\n+50\n+_\b5_\b2 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(){}\n+53\n+59 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs& solution,\n+Factorization factorization = CHOLESKY);\n+60\n+67 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs& solution, const\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+68 Factorization factorization = CHOLESKY);\n+69\n+75 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs& solution,\n+Factorization factorization = CHOLESKY);\n+76\n+83 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs& solution, const\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+84 Factorization factorization = CHOLESKY);\n+85\n+92 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& solution,\n+Factorization factorization = CHOLESKY);\n+93\n+100 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& solution,\n+const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+101 Factorization factorization = CHOLESKY);\n+102\n+104 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"Marginals: \", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n+keyFormatter = DefaultKeyFormatter) const;\n+105\n+107 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br marginalFactor(_\bK_\be_\by variable) const;\n+108\n+111 Matrix marginalInformation(_\bK_\be_\by variable) const;\n+112\n+114 Matrix marginalCovariance(_\bK_\be_\by variable) const;\n+115\n+117 _\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl jointMarginalCovariance(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables) const;\n+118\n+120 _\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl jointMarginalInformation(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables) const;\n+121\n+123 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n+124\n+125protected:\n+126\n+128 void computeBayesTree();\n+129\n+131 void computeBayesTree(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering);\n+132\n+133public:\n+134#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+136 GTSAM_DEPRECATED _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n+solution, Factorization factorization,\n+137 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) : _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(graph, solution, ordering,\n+factorization) {}\n+138\n+140 GTSAM_DEPRECATED Marginals(const GaussianFactorGraph& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n+solution, Factorization factorization,\n+141 const Ordering& ordering) : Marginals(graph, solution, ordering,\n+factorization) {}\n+142\n+144 GTSAM_DEPRECATED Marginals(const GaussianFactorGraph& graph, const\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& solution, Factorization factorization,\n+145 const Ordering& ordering) : Marginals(graph, solution, ordering,\n+factorization) {}\n+146#endif\n+147\n+148};\n+149\n+_\b1_\b5_\b3class GTSAM_EXPORT _\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl {\n+154\n+155protected:\n+156 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx blockMatrix_;\n+157 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keys_;\n+158 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bs_\bi_\bz_\be_\b__\bt_\b> indices_;\n+159\n+160public:\n+_\b1_\b6_\b2 _\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl() {}\n+163\n+_\b1_\b7_\b7 Matrix _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bK_\be_\by iVariable, _\bK_\be_\by jVariable) const {\n+178 const auto indexI = indices_.at(iVariable);\n+179 const auto indexJ = indices_.at(jVariable);\n+180 return blockMatrix_._\bb_\bl_\bo_\bc_\bk(indexI, indexJ);\n+181 }\n+182\n+_\b1_\b8_\b4 Matrix _\ba_\bt(_\bK_\be_\by iVariable, _\bK_\be_\by jVariable) const {\n+185 return (*this)(iVariable, jVariable);\n+186 }\n+187\n+_\b1_\b8_\b9 Matrix _\bf_\bu_\bl_\bl_\bM_\ba_\bt_\br_\bi_\bx() const {\n+190 return blockMatrix_._\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw();\n+191 }\n+192\n+194 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter =\n+DefaultKeyFormatter) const;\n+195\n+196protected:\n+197 _\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl(const Matrix& fullMatrix, const std::vector& dims,\n+const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys) :\n+198 blockMatrix_(dims, fullMatrix), keys_(keys), indices_(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg(keys).invert\n+()) {}\n+199\n+200 friend class Marginals;\n+201\n+202};\n+203\n+204} /* namespace gtsam */\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n+_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+A non-templated config holding any types of Manifold-group elements.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static shared_ptr Create(size_t dim)\n-Create a unit covariance noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:597\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n-Expression class that supports automatic differentiation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-T value(const Values &values, boost::optional< std::vector< Matrix > & >\n-H=boost::none) const\n-Return value and optional derivatives, reverse AD version Notes: this is not\n-terribly efficient,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:147\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n+Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n+landmarkKey)\n+Optimize for triangulation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk\n+Matrix block(DenseIndex I, DenseIndex J) const\n+Get a copy of a block (anywhere in the matrix).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.cpp:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n+Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex\n+I, DenseIndex J) const\n+Return the square sub-matrix that contains blocks(i:j, i:j).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+A Bayes tree representing a Gaussian density.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n+A class for computing Gaussian marginals of variables in a\n+NonlinearFactorGraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n+Factorization\n+The linear factorization mode - either CHOLESKY (faster and suitable for most\n+problems) or QR (slower...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n+Marginals()\n+Default constructor only for wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl\n+A class to store and access a joint marginal, returned from Marginals::\n+jointMarginalCovariance and Ma...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b:_\b:_\ba_\bt\n+Matrix at(Key iVariable, Key jVariable) const\n+Synonym for operator()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b:_\b:_\bf_\bu_\bl_\bl_\bM_\ba_\bt_\br_\bi_\bx\n+Matrix fullMatrix() const\n+The full, dense covariance/information matrix of the joint marginal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+Matrix operator()(Key iVariable, Key jVariable) const\n+Access a block, corresponding to a pair of variables, of the joint marginal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl\n+JointMarginal()\n+Default constructor only for wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh\n+ * _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01145.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01145.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LinearContainerFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtParams.h File Reference\n \n \n \n \n \n \n \n@@ -94,32 +94,49 @@\n \n \n \n \n \n
\n \n-
LinearContainerFactor.cpp File Reference
\n+
LevenbergMarquardtParams.h File Reference
\n
\n
\n+\n+

Parameters for Levenberg-Marquardt trust-region scheme. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::LevenbergMarquardtParams
 Parameters for Levenberg-Marquardt optimization. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Jul 6, 2012
\n-
Author
Alex Cunningham
\n+

Parameters for Levenberg-Marquardt trust-region scheme.

\n+
Author
Richard Roberts
\n+
\n+Frank Dellaert
\n+
\n+Luca Carlone
\n+
Date
Feb 26, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-LinearContainerFactor.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+LevenbergMarquardtParams.h File Reference\n+Parameters for Levenberg-Marquardt trust-region scheme. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs\n+\u00a0 Parameters for Levenberg-Marquardt optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Jul 6, 2012\n+Parameters for Levenberg-Marquardt trust-region scheme.\n Author\n- Alex Cunningham\n+ Richard Roberts\n+ Frank Dellaert\n+ Luca Carlone\n+ Date\n+ Feb 26, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01148.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01148.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExtendedKalmanFilter-inl.h File Reference\n \n \n \n \n \n \n \n@@ -95,36 +95,38 @@\n \n \n \n \n
\n \n-
NonlinearFactor.cpp File Reference
\n+
ExtendedKalmanFilter-inl.h File Reference
\n
\n
\n \n-

Nonlinear Factor base classes. \n+

Class to perform generic Kalman Filtering using nonlinear factor graphs. \n More...

\n+\n+

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Nonlinear Factor base classes.

\n-
Author
Frank Dellaert
\n+

Class to perform generic Kalman Filtering using nonlinear factor graphs.

\n+
Author
Stephen Williams
\n
\n-Richard Roberts
\n+Chris Beall
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-NonlinearFactor.cpp File Reference\n-Nonlinear Factor base classes. _\bM_\bo_\br_\be_\b._\b._\b.\n+ExtendedKalmanFilter-inl.h File Reference\n+Class to perform generic Kalman Filtering using nonlinear factor graphs.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Nonlinear Factor base classes.\n+Class to perform generic Kalman Filtering using nonlinear factor graphs.\n Author\n- Frank Dellaert\n- Richard Roberts\n+ Stephen Williams\n+ Chris Beall\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01151_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01151_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExpressionFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression-inl.h Source File\n \n \n \n \n \n \n \n@@ -98,371 +98,419 @@\n
No Matches
\n \n \n \n \n \n
\n-
ExpressionFactor.h
\n+
Expression-inl.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
20#pragma once
\n
21
\n-
22#include <array>
\n-
23#include <gtsam/config.h>
\n-
24#include <gtsam/base/Testable.h>
\n-\n-\n-
27#include <numeric>
\n+
22// The MSVC compiler workaround for the unsupported variable length array
\n+
23// utilizes the std::unique_ptr<> custom deleter.
\n+
24// See Expression<T>::valueAndJacobianMap() below.
\n+
25#ifdef _MSC_VER
\n+
26#include <memory>
\n+
27#endif
\n
28
\n-
29namespace gtsam {
\n+
29#include <gtsam/nonlinear/internal/ExpressionNode.h>
\n
30
\n+
31#include <boost/bind/bind.hpp>
\n+
32#include <boost/tuple/tuple.hpp>
\n+
33#include <boost/range/adaptor/map.hpp>
\n+
34#include <boost/range/algorithm.hpp>
\n+
35
\n+
36namespace gtsam {
\n+
37
\n+
38template<typename T>
\n+
\n+\n+
40 root_(new internal::ConstantExpression<T>(value)) {
\n+
41}
\n+
\n+
42
\n
43template<typename T>
\n-
\n-\n-
45 BOOST_CONCEPT_ASSERT((IsTestable<T>));
\n-
46
\n-
47protected:
\n-
48
\n-\n-
50 static const int Dim = traits<T>::dimension;
\n-
51
\n-\n-\n-\n-
55
\n-
56
\n-
57 public:
\n-
58 typedef boost::shared_ptr<ExpressionFactor<T> > shared_ptr;
\n-
59
\n-
\n-\n-
68 const T& measurement, const Expression<T>& expression)
\n-
69 : NoiseModelFactor(noiseModel), measured_(measurement) {
\n-\n-
71 }
\n+
\n+\n+
45 root_(new internal::LeafExpression<T>(key)) {
\n+
46}
\n+
\n+
47
\n+
48template<typename T>
\n+
\n+\n+
50 root_(new internal::LeafExpression<T>(symbol)) {
\n+
51}
\n+
\n+
52
\n+
53template<typename T>
\n+
\n+
54Expression<T>::Expression(unsigned char c, std::uint64_t j) :
\n+
55 root_(new internal::LeafExpression<T>(Symbol(c, j))) {
\n+
56}
\n+
\n+
57
\n+
59template<typename T>
\n+
60template<typename A>
\n+
\n+
61Expression<T>::Expression(typename UnaryFunction<A>::type function,
\n+
62 const Expression<A>& expression) :
\n+
63 root_(new internal::UnaryExpression<T, A>(function, expression)) {
\n+
64}
\n+
\n+
65
\n+
67template<typename T>
\n+
68template<typename A1, typename A2>
\n+
\n+
69Expression<T>::Expression(typename BinaryFunction<A1, A2>::type function,
\n+
70 const Expression<A1>& expression1, const Expression<A2>& expression2) :
\n+
71 root_(
\n+
72 new internal::BinaryExpression<T, A1, A2>(function, expression1,
\n+
73 expression2)) {
\n+
74}
\n
\n-
72
\n-
74 ~ExpressionFactor() override {}
\n
75
\n-
77 const T& measured() const { return measured_; }
\n-
78
\n-
\n-
80 void print(const std::string& s = "",
\n-
81 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
82 NoiseModelFactor::print(s, keyFormatter);
\n-
83 traits<T>::Print(measured_, "ExpressionFactor with measurement: ");
\n-
84 }
\n-
\n-
85
\n-
\n-
87 bool equals(const NonlinearFactor& f, double tol) const override {
\n-
88 const ExpressionFactor* p = dynamic_cast<const ExpressionFactor*>(&f);
\n-
89 return p && NoiseModelFactor::equals(f, tol) &&
\n-\n-
91 dims_ == p->dims_;
\n-
92 }
\n-
\n-
93
\n-
\n-
99 Vector unwhitenedError(const Values& x,
\n-
100 boost::optional<std::vector<Matrix>&> H = boost::none) const override {
\n-
101 if (H) {
\n-
102 const T value = expression_.valueAndDerivatives(x, keys_, dims_, *H);
\n-
103 // NOTE(hayk): Doing the reverse, AKA Local(measured_, value) is not correct here
\n-
104 // because it would use the tangent space of the measurement instead of the value.
\n-
105 return -traits<T>::Local(value, measured_);
\n-
106 } else {
\n-
107 const T value = expression_.value(x);
\n-
108 return -traits<T>::Local(value, measured_);
\n-
109 }
\n-
110 }
\n-
\n-
111
\n-
\n-
112 boost::shared_ptr<GaussianFactor> linearize(const Values& x) const override {
\n-
113 // Only linearize if the factor is active
\n-
114 if (!active(x))
\n-
115 return boost::shared_ptr<JacobianFactor>();
\n-
116
\n-
117 // In case noise model is constrained, we need to provide a noise model
\n-
118 SharedDiagonal noiseModel;
\n-
119 if (noiseModel_ && noiseModel_->isConstrained()) {
\n-
120 noiseModel = boost::static_pointer_cast<noiseModel::Constrained>(
\n-
121 noiseModel_)->unit();
\n-
122 }
\n-
123
\n-
124 // Create a writeable JacobianFactor in advance
\n-
125 boost::shared_ptr<JacobianFactor> factor(
\n-\n-
127
\n-
128 // Wrap keys and VerticalBlockMatrix into structure passed to expression_
\n-
129 VerticalBlockMatrix& Ab = factor->matrixObject();
\n-
130 internal::JacobianMap jacobianMap(keys_, Ab);
\n-
131
\n-
132 // Zero out Jacobian so we can simply add to it
\n-
133 Ab.matrix().setZero();
\n-
134
\n-
135 // Get value and Jacobians, writing directly into JacobianFactor
\n-
136 T value = expression_.valueAndJacobianMap(x, jacobianMap); // <<< Reverse AD happens here !
\n-
137
\n-
138 // Evaluate error and set RHS vector b
\n-
139 Ab(size()).col(0) = traits<T>::Local(value, measured_);
\n-
140
\n-
141 // Whiten the corresponding system, Ab already contains RHS
\n-
142 if (noiseModel_) {
\n-
143 Vector b = Ab(size()).col(0); // need b to be valid for Robust noise models
\n-
144 noiseModel_->WhitenSystem(Ab.matrix(), b);
\n-
145 }
\n-
146
\n-
147 return factor;
\n-
148 }
\n+
77template<typename T>
\n+
78template<typename A1, typename A2, typename A3>
\n+
\n+
79Expression<T>::Expression(typename TernaryFunction<A1, A2, A3>::type function,
\n+
80 const Expression<A1>& expression1, const Expression<A2>& expression2,
\n+
81 const Expression<A3>& expression3) :
\n+
82 root_(
\n+
83 new internal::TernaryExpression<T, A1, A2, A3>(function, expression1,
\n+
84 expression2, expression3)) {
\n+
85}
\n+
\n+
86
\n+
88template<typename T>
\n+
89template<typename A>
\n+
\n+\n+
91 T (A::*method)(typename MakeOptionalJacobian<T, A>::type) const) :
\n+
\n+
92 root_(
\n+
93 new internal::UnaryExpression<T, A>(std::bind(method,
\n+
94 std::placeholders::_1, std::placeholders::_2),
\n+
\n+
95 expression)) {
\n+
96}
\n+
97
\n+
99template<typename T>
\n+
100template<typename A1, typename A2>
\n+
\n+\n+
102 T (A1::*method)(const A2&, typename MakeOptionalJacobian<T, A1>::type,
\n+
103 typename MakeOptionalJacobian<T, A2>::type) const,
\n+
104 const Expression<A2>& expression2) :
\n+
\n+
105 root_(
\n+
106 new internal::BinaryExpression<T, A1, A2>(
\n+
107 std::bind(method, std::placeholders::_1,
\n+
108 std::placeholders::_2, std::placeholders::_3,
\n+
109 std::placeholders::_4),
\n+
\n+
110 expression1, expression2)) {
\n+
111}
\n+
112
\n+
114template<typename T>
\n+
\n+
115template<typename A1, typename A2, typename A3>
\n+
\n+\n+
117 T (A1::*method)(const A2&, const A3&,
\n+
118 typename MakeOptionalJacobian<T, A1>::type,
\n+
119 typename MakeOptionalJacobian<T, A2>::type,
\n+
120 typename MakeOptionalJacobian<T, A3>::type) const,
\n+
\n+
121 const Expression<A2>& expression2, const Expression<A3>& expression3) :
\n+
122 root_(
\n+
123 new internal::TernaryExpression<T, A1, A2, A3>(
\n+
124 std::bind(method, std::placeholders::_1,
\n+
125 std::placeholders::_2, std::placeholders::_3,
\n+
\n+
126 std::placeholders::_4, std::placeholders::_5,
\n+
127 std::placeholders::_6),
\n+
128 expression1, expression2, expression3)) {
\n+
129}
\n+
130
\n+
131template<typename T>
\n+
\n+
132std::set<Key> Expression<T>::keys() const {
\n+
\n+
133 return root_->keys();
\n+
134}
\n+
135
\n+
136template<typename T>
\n+
\n+
137void Expression<T>::dims(std::map<Key, int>& map) const {
\n+
138 root_->dims(map);
\n+
139}
\n
\n+
140
\n+
141template<typename T>
\n+
\n+
142void Expression<T>::print(const std::string& s) const {
\n+
143 root_->print(s);
\n+
144}
\n+
\n+
\n+\n+
146template<typename T>
\n+
\n+\n+
\n+
148 boost::optional<std::vector<Matrix>&> H) const {
\n
149
\n+
150 if (H) {
\n
\n-
151 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
152 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
153 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
154 }
\n-
\n-
155
\n-
156protected:
\n-\n-
159
\n-
\n-
161 ExpressionFactor(const SharedNoiseModel& noiseModel, const T& measurement)
\n-
162 : NoiseModelFactor(noiseModel), measured_(measurement) {
\n-
163 // Not properly initialized yet, need to call initialize
\n-
164 }
\n+
151 // Call private version that returns derivatives in H
\n+
152 KeyVector keys;
\n+
153 FastVector<int> dims;
\n+
154 boost::tie(keys, dims) = keysAndDims();
\n+
155 return valueAndDerivatives(values, keys, dims, *H);
\n+
156 } else
\n+
157 // no derivatives needed, just return value
\n+
\n+
158 return root_->value(values);
\n+
159}
\n+
\n+
160
\n+
161template<typename T>
\n+
\n+
162const boost::shared_ptr<internal::ExpressionNode<T> >& Expression<T>::root() const {
\n+
163 return root_;
\n+
164}
\n
\n
165
\n+
166template<typename T>
\n
\n-\n-
168 if (!noiseModel_)
\n-
169 throw std::invalid_argument("ExpressionFactor: no NoiseModel.");
\n-
170 if (noiseModel_->dim() != Dim)
\n-
171 throw std::invalid_argument(
\n-
172 "ExpressionFactor was created with a NoiseModel of incorrect dimension.");
\n-\n-
174
\n-
175 // Get keys and dimensions for Jacobian matrices
\n-
176 // An Expression is assumed unmutable, so we do this now
\n-
177 if (keys_.empty()) {
\n-
178 // This is the case when called in ExpressionFactor Constructor.
\n-
179 // We then take the keys from the expression in sorted order.
\n-
180 boost::tie(keys_, dims_) = expression_.keysAndDims();
\n-
181 } else {
\n-
182 // This happens with classes derived from BinaryExpressionFactor etc.
\n-
183 // In that case, the keys_ are already defined and we just need to grab
\n-
184 // the dimensions in the correct order.
\n-
185 std::map<Key, int> keyedDims;
\n-
186 expression_.dims(keyedDims);
\n-
187 for (Key key : keys_) dims_.push_back(keyedDims[key]);
\n-
188 }
\n-
189 }
\n-
\n-
190
\n+\n+
168 return root_->traceSize();
\n+
169}
\n+
\n+
170
\n+
\n+
171// Private methods:
\n+
172
\n+
173template<typename T>
\n+
\n+\n+
175 const KeyVector& keys, const FastVector<int>& dims,
\n+
176 std::vector<Matrix>& H) const {
\n+
\n+\n+
178 // H should be pre-allocated
\n+
179 assert(H.size()==keys.size());
\n+
180
\n+
181 // Pre-allocate and zero VerticalBlockMatrix
\n+
182 static const int Dim = traits<T>::dimension;
\n+
183 VerticalBlockMatrix Ab(dims, Dim);
\n+
184 Ab.matrix().setZero();
\n+
185 internal::JacobianMap jacobianMap(keys, Ab);
\n+
186
\n+
187 // Call unsafe version
\n+
188 T result = valueAndJacobianMap(values, jacobianMap);
\n+
\n+\n+
190 // Copy blocks into the vector of jacobians passed in
\n+
191 for (DenseIndex i = 0; i < static_cast<DenseIndex>(keys.size()); i++)
\n+
192 H[i] = Ab(i);
\n
\n-
193 virtual Expression<T> expression() const {
\n-
194 throw std::runtime_error("ExpressionFactor::expression not provided: cannot deserialize.");
\n-
195 }
\n-
\n+\n+
194 return result;
\n+
195}
\n
196
\n-
197private:
\n-
199 template <class Archive>
\n-
200 void save(Archive& ar, const unsigned int /*version*/) const {
\n-
201 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(NoiseModelFactor);
\n-
202 ar << boost::serialization::make_nvp("measured_", this->measured_);
\n-
203 }
\n-
204
\n-
207 template <class Archive>
\n-
208 void load(Archive& ar, const unsigned int /*version*/) {
\n-
209 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(NoiseModelFactor);
\n-
210 ar >> boost::serialization::make_nvp("measured_", this->measured_);
\n-
211 this->initialize(expression());
\n-
212 }
\n+
\n+
197template<typename T>
\n+
\n+\n+
199 internal::ExecutionTrace<T>& trace, void* traceStorage) const {
\n+
200 return root_->traceExecution(values, trace,
\n+
201 static_cast<internal::ExecutionTraceStorage*>(traceStorage));
\n+
202}
\n+
\n+
203
\n+
204template<typename T>
\n+
\n+\n+
206 internal::JacobianMap& jacobians) const {
\n+
207 // The following piece of code is absolutely crucial for performance.
\n+
208 // We allocate a block of memory on the stack, which can be done at runtime
\n+
209 // with modern C++ compilers. The traceExecution then fills this memory
\n+
210 // with an execution trace, made up entirely of "Record" structs, see
\n+
211 // the FunctionalNode class in expression-inl.h
\n+
212 size_t size = traceSize();
\n
213
\n-
214 // Indicate that we implement save/load separately, and be friendly to boost
\n-
215 BOOST_SERIALIZATION_SPLIT_MEMBER()
\n-
216
\n-
217 friend class boost::serialization::access;
\n-
218
\n-
219 // Alignment, see https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html
\n-
220 enum { NeedsToAlign = (sizeof(T) % 16) == 0 };
\n-
221 public:
\n-\n-
223};
\n-
\n-
224// ExpressionFactor
\n+
214 // Windows does not support variable length arrays, so memory must be dynamically
\n+
215 // allocated on Visual Studio. For more information see the issue below
\n+
216 // https://bitbucket.org/gtborg/gtsam/issue/178/vlas-unsupported-in-visual-studio
\n+
217#ifdef _MSC_VER
\n+
218 std::unique_ptr<void, void(*)(void*)> traceStorageDeleter(
\n+
219 _aligned_malloc(size, internal::TraceAlignment),
\n+
220 [](void *ptr){ _aligned_free(ptr); });
\n+
221 auto traceStorage = static_cast<internal::ExecutionTraceStorage*>(traceStorageDeleter.get());
\n+
222#else
\n+
223 internal::ExecutionTraceStorage traceStorage[size];
\n+
224#endif
\n
225
\n-
227template <typename T>
\n-
228struct traits<ExpressionFactor<T> > : public Testable<ExpressionFactor<T> > {};
\n+\n+
227 T value(this->traceExecution(values, trace, traceStorage));
\n+
228 trace.startReverseAD1(jacobians);
\n
229
\n-
241template <typename T, typename... Args>
\n-
\n-\n-
243public:
\n-
244 static const std::size_t NARY_EXPRESSION_SIZE = sizeof...(Args);
\n-
245 using ArrayNKeys = std::array<Key, NARY_EXPRESSION_SIZE>;
\n-
246
\n-
248 ~ExpressionFactorN() override = default;
\n-
249
\n-
250 // Don't provide backward compatible evaluateVector(), due to its problematic
\n-
251 // variable length of optional Jacobian arguments. Vector evaluateError(const
\n-
252 // Args... args,...);
\n-
253
\n-
\n-
256 virtual Expression<T> expression(const ArrayNKeys &keys) const {
\n-
257 throw std::runtime_error(
\n-
258 "ExpressionFactorN::expression not provided: cannot deserialize.");
\n-
259 }
\n-
\n-
260
\n-
261protected:
\n-
263 ExpressionFactorN() = default;
\n-
264
\n-
\n-
266 ExpressionFactorN(const ArrayNKeys &keys, const SharedNoiseModel &noiseModel,
\n-
267 const T &measurement)
\n-
268 : ExpressionFactor<T>(noiseModel, measurement) {
\n-
269 for (const auto &key : keys)
\n-
270 Factor::keys_.push_back(key);
\n-
271 }
\n-
\n-
272
\n-
273private:
\n-
275 Expression<T> expression() const override {
\n-
276 ArrayNKeys keys;
\n-
277 int idx = 0;
\n-
278 for (const auto &key : Factor::keys_)
\n-
279 keys[idx++] = key;
\n-
280 return expression(keys);
\n-
281 }
\n-
282
\n-
283 friend class boost::serialization::access;
\n-
284 template <class ARCHIVE>
\n-
285 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n-
286 ar &boost::serialization::make_nvp(
\n-
287 "ExpressionFactorN",
\n-
288 boost::serialization::base_object<ExpressionFactor<T>>(*this));
\n-
289 }
\n-
290};
\n-
\n-
292template <typename T, typename... Args>
\n-
\n-
293struct traits<ExpressionFactorN<T, Args...>>
\n-
294 : public Testable<ExpressionFactorN<T, Args...>> {};
\n+
230 return value;
\n+
231}
\n
\n-
295// ExpressionFactorN
\n+
\n+
232
\n+
233template<typename T>
\n+\n+
235 std::map<Key, int> map;
\n+
236 dims(map);
\n+
237 size_t n = map.size();
\n+
238 KeysAndDims pair = std::make_pair(KeyVector(n), FastVector<int>(n));
\n+
239 boost::copy(map | boost::adaptors::map_keys, pair.first.begin());
\n+
240 boost::copy(map | boost::adaptors::map_values, pair.second.begin());
\n+
241 return pair;
\n+
242}
\n+
243
\n+
244namespace internal {
\n+
245// http://stackoverflow.com/questions/16260445/boost-bind-to-operator
\n+
246template<class T>
\n+
\n+\n+
248 typedef T result_type;
\n+
249 static const int Dim = traits<T>::dimension;
\n+
250 T operator()(const T& x, const T& y, OptionalJacobian<Dim, Dim> H1 =
\n+
251 boost::none, OptionalJacobian<Dim, Dim> H2 = boost::none) const {
\n+
252 return x.compose(y, H1, H2);
\n+
253 }
\n+
254};
\n+
\n+
255
\n+
256template <>
\n+
\n+
257struct apply_compose<double> {
\n+
258 double operator()(const double& x, const double& y,
\n+
259 OptionalJacobian<1, 1> H1 = boost::none,
\n+
260 OptionalJacobian<1, 1> H2 = boost::none) const {
\n+
261 if (H1) H1->setConstant(y);
\n+
262 if (H2) H2->setConstant(x);
\n+
263 return x * y;
\n+
264 }
\n+
265};
\n+
\n+
266
\n+
267}
\n+
268
\n+
269// Global methods:
\n+
270
\n+
272template<typename T>
\n+
\n+\n+
274 const Expression<T>& expression2) {
\n+
275 return Expression<T>(
\n+
276 std::bind(internal::apply_compose<T>(), std::placeholders::_1,
\n+
277 std::placeholders::_2, std::placeholders::_3,
\n+
278 std::placeholders::_4),
\n+
279 expression1, expression2);
\n+
280}
\n+
\n+
281
\n+
283template<typename T>
\n+
\n+
284std::vector<Expression<T> > createUnknowns(size_t n, char c, size_t start) {
\n+
285 std::vector<Expression<T> > unknowns;
\n+
286 unknowns.reserve(n);
\n+
287 for (size_t i = start; i < start + n; i++)
\n+
288 unknowns.push_back(Expression<T>(c, i));
\n+
289 return unknowns;
\n+
290}
\n+
\n+
291
\n+
292template <typename T>
\n+
293ScalarMultiplyExpression<T>::ScalarMultiplyExpression(double s, const Expression<T>& e)
\n+
294 : Expression<T>(boost::make_shared<internal::ScalarMultiplyNode<T>>(s, e)) {}
\n+
295
\n
296
\n-
297
\n-
298#if defined(GTSAM_ALLOW_DEPRECATED_SINCE_V42)
\n-
307template <typename T, typename A1, typename A2>
\n-
308class GTSAM_DEPRECATED ExpressionFactor2 : public ExpressionFactorN<T, A1, A2> {
\n-
309public:
\n-
311 ~ExpressionFactor2() override {}
\n-
312
\n-
314 Vector evaluateError(const A1 &a1, const A2 &a2,
\n-
315 boost::optional<Matrix &> H1 = boost::none,
\n-
316 boost::optional<Matrix &> H2 = boost::none) const {
\n-
317 Values values;
\n-
318 values.insert(this->keys_[0], a1);
\n-
319 values.insert(this->keys_[1], a2);
\n-
320 std::vector<Matrix> H(2);
\n-
321 Vector error = ExpressionFactor<T>::unwhitenedError(values, H);
\n-
322 if (H1) (*H1) = H[0];
\n-
323 if (H2) (*H2) = H[1];
\n-
324 return error;
\n-
325 }
\n-
326
\n-
329 virtual Expression<T> expression(Key key1, Key key2) const {
\n-
330 throw std::runtime_error(
\n-
331 "ExpressionFactor2::expression not provided: cannot deserialize.");
\n-
332 }
\n-
333 Expression<T>
\n-
334 expression(const typename ExpressionFactorN<T, A1, A2>::ArrayNKeys &keys)
\n-
335 const override {
\n-
336 return expression(keys[0], keys[1]);
\n-
337 }
\n-
338
\n-
339protected:
\n-
341 ExpressionFactor2() {}
\n-
342
\n-
344 ExpressionFactor2(Key key1, Key key2, const SharedNoiseModel &noiseModel,
\n-
345 const T &measurement)
\n-
346 : ExpressionFactorN<T, A1, A2>({key1, key2}, noiseModel, measurement) {}
\n-
347};
\n-
348// ExpressionFactor2
\n-
349#endif
\n-
350
\n-
351} // namespace gtsam
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n-
Concept check for values that can be used in unit tests.
\n-
Expressions for Block Automatic Differentiation.
\n-
Non-linear factor base classes.
\n+
297template <typename T>
\n+
298BinarySumExpression<T>::BinarySumExpression(const Expression<T>& e1, const Expression<T>& e2)
\n+
299 : Expression<T>(boost::make_shared<internal::BinarySumNode<T>>(e1, e2)) {}
\n+
300
\n+
301template <typename T>
\n+
\n+\n+
303 root_ = boost::make_shared<internal::BinarySumNode<T>>(*this, e);
\n+
304 return *this;
\n+
305}
\n+
\n+
306
\n+
307} // namespace gtsam
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n+
\n
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
Key symbol(unsigned char c, std::uint64_t j)
Create a symbol key from a character and index, i.e.
Definition Symbol.h:135
\n+
std::vector< Expression< T > > createUnknowns(size_t n, char c, size_t start)
Construct an array of leaves.
Definition Expression-inl.h:284
\n+
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n+
gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > make_shared(Args &&... args)
Add our own make_shared as a layer of wrapping on boost::make_shared This solves the problem with the...
Definition make_shared.h:57
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
: meta-function to generate JacobianTA optional reference Used mainly by Expressions
Definition OptionalJacobian.h:261
\n
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n-
const Matrix & matrix() const
Access to full matrix (including any portions excluded by rowStart(), rowEnd(), and firstBlock())
Definition VerticalBlockMatrix.h:188
\n-
Definition Factor.h:68
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
size_t size() const
Definition Factor.h:157
\n-
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n-
Factor that supports arbitrary expressions via AD.
Definition ExpressionFactor.h:44
\n-
Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix > & > H=boost::none) const override
Error function without the NoiseModel, .
Definition ExpressionFactor.h:99
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print relies on Testable traits being defined for T
Definition ExpressionFactor.h:80
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition ExpressionFactor.h:151
\n-
virtual Expression< T > expression() const
Recreate expression from keys_ and measured_, used in load below.
Definition ExpressionFactor.h:193
\n-
Expression< T > expression_
the expression that is AD enabled
Definition ExpressionFactor.h:53
\n-
T measured_
the measurement to be compared with the expression
Definition ExpressionFactor.h:52
\n-
FastVector< int > dims_
dimensions of the Jacobian matrices
Definition ExpressionFactor.h:54
\n-
const T & measured() const
return the measurement
Definition ExpressionFactor.h:77
\n-
boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override
linearize to a GaussianFactor
Definition ExpressionFactor.h:112
\n-
~ExpressionFactor() override
Destructor.
Definition ExpressionFactor.h:74
\n-
bool equals(const NonlinearFactor &f, double tol) const override
equals relies on Testable traits being defined for T
Definition ExpressionFactor.h:87
\n-
ExpressionFactor(const SharedNoiseModel &noiseModel, const T &measurement)
Default constructor, for serialization.
Definition ExpressionFactor.h:161
\n-
ExpressionFactor(const SharedNoiseModel &noiseModel, const T &measurement, const Expression< T > &expression)
Constructor: creates a factor from a measurement and measurement function.
Definition ExpressionFactor.h:67
\n-
void initialize(const Expression< T > &expression)
Initialize with constructor arguments.
Definition ExpressionFactor.h:167
\n+
Character and index key used to refer to variables.
Definition Symbol.h:35
\n+
Definition Expression-inl.h:247
\n+
Definition Expression.h:40
\n
Expression class that supports automatic differentiation.
Definition Expression.h:48
\n-
N-ary variadic template for ExpressionFactor meant as a base class for N-ary factors.
Definition ExpressionFactor.h:242
\n-
virtual Expression< T > expression(const ArrayNKeys &keys) const
Recreate expression from given keys_ and measured_, used in load Needed to deserialize a derived fact...
Definition ExpressionFactor.h:256
\n-
~ExpressionFactorN() override=default
Destructor.
\n-
ExpressionFactorN()=default
Default constructor, for serialization.
\n-
ExpressionFactorN(const ArrayNKeys &keys, const SharedNoiseModel &noiseModel, const T &measurement)
Constructor takes care of keys, but still need to call initialize.
Definition ExpressionFactor.h:266
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n-
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Print.
Definition NonlinearFactor.cpp:74
\n-
bool equals(const NonlinearFactor &f, double tol=1e-9) const override
Check if two factors are equal.
Definition NonlinearFactor.cpp:82
\n-
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n+
Expression()
Default constructor, for serialization.
Definition Expression.h:182
\n+
std::set< Key > keys() const
Return keys that play in this expression.
Definition Expression-inl.h:132
\n+
std::pair< KeyVector, FastVector< int > > KeysAndDims
Keys and dimensions in same order.
Definition Expression.h:185
\n+
void dims(std::map< Key, int > &map) const
Return dimensions for each argument, as a map.
Definition Expression-inl.h:137
\n+
void print(const std::string &s) const
Print.
Definition Expression-inl.h:142
\n+
size_t traceSize() const
Return size needed for memory buffer in traceExecution.
Definition Expression-inl.h:167
\n+
T traceExecution(const Values &values, internal::ExecutionTrace< T > &trace, void *traceStorage) const
trace execution, very unsafe
Definition Expression-inl.h:198
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n-
noise model to the factor, and calculates the error by asking the user to implement the method
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,14 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ExpressionFactor.h\n+Expression-inl.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n@@ -15,466 +16,393 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 20#pragma once\n 21\n-22#include \n-23#include \n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-27#include \n+22// The MSVC compiler workaround for the unsupported variable length array\n+23// utilizes the std::unique_ptr<> custom deleter.\n+24// See Expression::valueAndJacobianMap() below.\n+25#ifdef _MSC_VER\n+26#include \n+27#endif\n 28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n+29#include \n 30\n+31#include \n+32#include \n+33#include \n+34#include \n+35\n+36namespace _\bg_\bt_\bs_\ba_\bm {\n+37\n+38template\n+_\b3_\b9_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const T& value) :\n+40 root_(new internal::ConstantExpression(value)) {\n+41}\n+42\n 43template\n-_\b4_\b4class _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br {\n-45 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bT_\b>));\n-46\n-47protected:\n-48\n-49 typedef _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bT_\b> _\bT_\bh_\bi_\bs;\n-50 static const int Dim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-51\n-_\b5_\b2 T _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-_\b5_\b3 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_;\n-_\b5_\b4 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bi_\bn_\bt_\b> _\bd_\bi_\bm_\bs_\b_;\n-55\n-56\n-57 public:\n-58 typedef boost::shared_ptr > shared_ptr;\n-59\n-_\b6_\b7 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, //\n-68 const T& measurement, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn)\n-69 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(measurement) {\n-70 _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be(_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn);\n-71 }\n-72\n-_\b7_\b4 _\b~_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+_\b4_\b4_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bK_\be_\by& key) :\n+45 root_(new internal::LeafExpression(key)) {\n+46}\n+47\n+48template\n+_\b4_\b9_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bS_\by_\bm_\bb_\bo_\bl& _\bs_\by_\bm_\bb_\bo_\bl) :\n+50 root_(new internal::LeafExpression(_\bs_\by_\bm_\bb_\bo_\bl)) {\n+51}\n+52\n+53template\n+_\b5_\b4_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(unsigned char c, std::uint64_t j) :\n+55 root_(new internal::LeafExpression(_\bS_\by_\bm_\bb_\bo_\bl(c, j))) {\n+56}\n+57\n+59template\n+60template\n+_\b6_\b1_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(typename UnaryFunction::type function,\n+62 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b>& expression) :\n+63 root_(new internal::UnaryExpression(function, expression)) {\n+64}\n+65\n+67template\n+68template\n+_\b6_\b9_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(typename BinaryFunction::type function,\n+70 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b1_\b>& expression1, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b2_\b>& expression2) :\n+71 root_(\n+72 new internal::BinaryExpression(function, expression1,\n+73 expression2)) {\n+74}\n 75\n-_\b7_\b7 const T& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const { return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_; }\n-78\n-_\b8_\b0 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-81 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n-82 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n-83 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, \"ExpressionFactor with measurement: \");\n-84 }\n-85\n-_\b8_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& f, double tol) const override {\n-88 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br* p = dynamic_cast(&f);\n-89 return p && _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(f, tol) &&\n-90 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, p->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, tol) &&\n-91 _\bd_\bi_\bm_\bs_\b_ == p->_\bd_\bi_\bm_\bs_\b_;\n-92 }\n-93\n-_\b9_\b9 Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& x,\n-100 boost::optional&> H = boost::none) const override {\n-101 if (H) {\n-102 const T value = _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_.valueAndDerivatives(x, _\bk_\be_\by_\bs_\b_, _\bd_\bi_\bm_\bs_\b_, *H);\n-103 // NOTE(hayk): Doing the reverse, AKA Local(measured_, value) is not\n-correct here\n-104 // because it would use the tangent space of the measurement instead of the\n-value.\n-105 return -_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(value, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-106 } else {\n-107 const T value = _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_.value(x);\n-108 return -_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(value, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-109 }\n-110 }\n-111\n-_\b1_\b1_\b2 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& x) const override\n-{\n-113 // Only linearize if the factor is active\n-114 if (!_\ba_\bc_\bt_\bi_\bv_\be(x))\n-115 return boost::shared_ptr();\n-116\n-117 // In case noise model is constrained, we need to provide a noise model\n-118 SharedDiagonal _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl;\n-119 if (noiseModel_ && noiseModel_->isConstrained()) {\n-120 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl = boost::static_pointer_cast(\n-121 noiseModel_)->unit();\n-122 }\n-123\n-124 // Create a writeable JacobianFactor in advance\n-125 boost::shared_ptr factor(\n-126 new _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bk_\be_\by_\bs_\b_, _\bd_\bi_\bm_\bs_\b_, Dim, _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl));\n-127\n-128 // Wrap keys and VerticalBlockMatrix into structure passed to expression_\n-129 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& Ab = factor->matrixObject();\n-130 internal::JacobianMap jacobianMap(_\bk_\be_\by_\bs_\b_, Ab);\n-131\n-132 // Zero out Jacobian so we can simply add to it\n-133 Ab._\bm_\ba_\bt_\br_\bi_\bx().setZero();\n-134\n-135 // Get value and Jacobians, writing directly into JacobianFactor\n-136 T value = _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_.valueAndJacobianMap(x, jacobianMap); // <<< Reverse\n-AD happens here !\n-137\n-138 // Evaluate error and set RHS vector b\n-139 Ab(_\bs_\bi_\bz_\be()).col(0) = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(value, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+77template\n+78template\n+_\b7_\b9_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(typename TernaryFunction::type\n+function,\n+80 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b1_\b>& expression1, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b2_\b>& expression2,\n+81 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b3_\b>& expression3) :\n+82 root_(\n+83 new internal::TernaryExpression(function, expression1,\n+84 expression2, expression3)) {\n+85}\n+86\n+88template\n+89template\n+_\b9_\b0_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b>& expression,\n+91 T (A::*method)(typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be) const) :\n+_\b9_\b2 root_(\n+93 new internal::UnaryExpression(std::bind(method,\n+94 std::placeholders::_1, std::placeholders::_2),\n+_\b9_\b5 expression)) {\n+96}\n+97\n+99template\n+100template\n+_\b1_\b0_\b1_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b1_\b>& expression1,\n+102 T (A1::*method)(const A2&, typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be,\n+103 typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be) const,\n+104 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn& expression2) :\n+_\b1_\b0_\b5 root_(\n+106 new internal::BinaryExpression(\n+107 std::bind(method, std::placeholders::_1,\n+108 std::placeholders::_2, std::placeholders::_3,\n+109 std::placeholders::_4),\n+_\b1_\b1_\b0 expression1, expression2)) {\n+111}\n+112\n+114template\n+_\b1_\b1_\b5template\n+_\b1_\b1_\b6_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bA_\b1_\b>& expression1,\n+117 T (A1::*method)(const A2&, const A3&,\n+118 typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be,\n+119 typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be,\n+120 typename _\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn::_\bt_\by_\bp_\be) const,\n+_\b1_\b2_\b1 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn& expression2, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn& expression3) :\n+122 root_(\n+123 new internal::TernaryExpression(\n+124 std::bind(method, std::placeholders::_1,\n+125 std::placeholders::_2, std::placeholders::_3,\n+_\b1_\b2_\b6 std::placeholders::_4, std::placeholders::_5,\n+127 std::placeholders::_6),\n+128 expression1, expression2, expression3)) {\n+129}\n+130\n+131template\n+_\b1_\b3_\b2std::set _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bk_\be_\by_\bs() const {\n+_\b1_\b3_\b3 return root_->_\bk_\be_\by_\bs();\n+134}\n+135\n+136template\n+_\b1_\b3_\b7void _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\bs(std::map& map) const {\n+138 root_->_\bd_\bi_\bm_\bs(map);\n+139}\n 140\n-141 // Whiten the corresponding system, Ab already contains RHS\n-142 if (noiseModel_) {\n-143 Vector b = Ab(_\bs_\bi_\bz_\be()).col(0); // need b to be valid for Robust noise models\n-144 noiseModel_->WhitenSystem(Ab._\bm_\ba_\bt_\br_\bi_\bx(), b);\n-145 }\n-146\n-147 return factor;\n-148 }\n+141template\n+_\b1_\b4_\b2void _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s) const {\n+143 root_->_\bp_\br_\bi_\bn_\bt(s);\n+144}\n+_\b1_\b4_\b5\n+146template\n+_\b1_\b4_\b7T _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be(const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+_\b1_\b4_\b8 boost::optional&> H) const {\n 149\n-_\b1_\b5_\b1 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-152 return boost::static_pointer_cast(\n-153 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n-154 }\n-155\n-156protected:\n-157 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-159\n-_\b1_\b6_\b1 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, const T& measurement)\n-162 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(measurement) {\n-163 // Not properly initialized yet, need to call initialize\n-164 }\n+150 if (H) {\n+_\b1_\b5_\b1 // Call private version that returns derivatives in H\n+152 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keys;\n+153 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bi_\bn_\bt_\b> dims;\n+154 boost::tie(keys, dims) = keysAndDims();\n+155 return valueAndDerivatives(values, keys, dims, *H);\n+156 } else\n+157 // no derivatives needed, just return value\n+_\b1_\b5_\b8 return root_->value(values);\n+159}\n+160\n+161template\n+_\b1_\b6_\b2const boost::shared_ptr >& _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\br_\bo_\bo_\bt()\n+const {\n+163 return root_;\n+164}\n 165\n-_\b1_\b6_\b7 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn) {\n-168 if (!noiseModel_)\n-169 throw std::invalid_argument(\"ExpressionFactor: no NoiseModel.\");\n-170 if (noiseModel_->dim() != Dim)\n-171 throw std::invalid_argument(\n-172 \"ExpressionFactor was created with a NoiseModel of incorrect dimension.\");\n-173 _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_ = _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn;\n-174\n-175 // Get keys and dimensions for Jacobian matrices\n-176 // An Expression is assumed unmutable, so we do this now\n-177 if (_\bk_\be_\by_\bs_\b_.empty()) {\n-178 // This is the case when called in ExpressionFactor Constructor.\n-179 // We then take the keys from the expression in sorted order.\n-180 boost::tie(_\bk_\be_\by_\bs_\b_, _\bd_\bi_\bm_\bs_\b_) = _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_.keysAndDims();\n-181 } else {\n-182 // This happens with classes derived from BinaryExpressionFactor etc.\n-183 // In that case, the keys_ are already defined and we just need to grab\n-184 // the dimensions in the correct order.\n-185 std::map keyedDims;\n-186 _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_.dims(keyedDims);\n-187 for (_\bK_\be_\by key : _\bk_\be_\by_\bs_\b_) _\bd_\bi_\bm_\bs_\b_.push_back(keyedDims[key]);\n-188 }\n-189 }\n-190\n-_\b1_\b9_\b3 virtual _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn() const {\n-194 throw std::runtime_error(\"ExpressionFactor::expression not provided: cannot\n-deserialize.\");\n-195 }\n+166template\n+_\b1_\b6_\b7size_t _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bt_\br_\ba_\bc_\be_\bS_\bi_\bz_\be() const {\n+168 return root_->_\bt_\br_\ba_\bc_\be_\bS_\bi_\bz_\be();\n+169}\n+170\n+_\b1_\b7_\b1// Private methods:\n+172\n+173template\n+_\b1_\b7_\b4T _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\bA_\bn_\bd_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+175 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys, const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bi_\bn_\bt_\b>& dims,\n+176 std::vector& H) const {\n+_\b1_\b7_\b7\n+178 // H should be pre-allocated\n+179 assert(H.size()==keys.size());\n+180\n+181 // Pre-allocate and zero VerticalBlockMatrix\n+182 static const int Dim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+183 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx Ab(dims, Dim);\n+184 Ab.matrix().setZero();\n+185 internal::JacobianMap jacobianMap(keys, Ab);\n+186\n+187 // Call unsafe version\n+188 T result = valueAndJacobianMap(values, jacobianMap);\n+_\b1_\b8_\b9\n+190 // Copy blocks into the vector of jacobians passed in\n+191 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i = 0; i < static_cast(keys.size()); i++)\n+192 H[i] = Ab(i);\n+_\b1_\b9_\b3\n+194 return result;\n+195}\n 196\n-197private:\n-199 template \n-200 void save(Archive& ar, const unsigned int /*version*/) const {\n-201 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br);\n-202 ar << boost::serialization::make_nvp(\"measured_\", this->measured_);\n-203 }\n-204\n-207 template \n-208 void load(Archive& ar, const unsigned int /*version*/) {\n-209 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br);\n-210 ar >> boost::serialization::make_nvp(\"measured_\", this->measured_);\n-211 this->initialize(_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn());\n-212 }\n+_\b1_\b9_\b7template\n+_\b1_\b9_\b8T _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bt_\br_\ba_\bc_\be_\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn(const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+199 _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bc_\be_\b<_\bT_\b>& trace, void* traceStorage) const {\n+200 return root_->_\bt_\br_\ba_\bc_\be_\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn(values, trace,\n+201 static_cast(traceStorage));\n+202}\n+203\n+204template\n+_\b2_\b0_\b5T _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be_\bA_\bn_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bM_\ba_\bp(const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+206 internal::JacobianMap& jacobians) const {\n+207 // The following piece of code is absolutely crucial for performance.\n+208 // We allocate a block of memory on the stack, which can be done at runtime\n+209 // with modern C++ compilers. The traceExecution then fills this memory\n+210 // with an execution trace, made up entirely of \"Record\" structs, see\n+211 // the FunctionalNode class in expression-inl.h\n+212 size_t size = traceSize();\n 213\n-214 // Indicate that we implement save/load separately, and be friendly to\n-boost\n-215 BOOST_SERIALIZATION_SPLIT_MEMBER()\n-216\n-217 friend class boost::serialization::access;\n-218\n-219 // Alignment, see https://eigen.tuxfamily.org/dox/\n-group__TopicStructHavingEigenMembers.html\n-220 enum { NeedsToAlign = (sizeof(T) % 16) == 0 };\n-221 public:\n-222 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(NeedsToAlign)\n-223};\n-224// ExpressionFactor\n+214 // Windows does not support variable length arrays, so memory must be\n+dynamically\n+215 // allocated on Visual Studio. For more information see the issue below\n+216 // https://bitbucket.org/gtborg/gtsam/issue/178/vlas-unsupported-in-visual-\n+studio\n+217#ifdef _MSC_VER\n+218 std::unique_ptr traceStorageDeleter(\n+219 _aligned_malloc(size, internal::TraceAlignment),\n+220 [](void *ptr){ _aligned_free(ptr); });\n+221 auto traceStorage = static_cast\n+(traceStorageDeleter.get());\n+222#else\n+223 internal::ExecutionTraceStorage traceStorage[size];\n+224#endif\n 225\n-227template \n-_\b2_\b2_\b8struct _\bt_\br_\ba_\bi_\bt_\bs<_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be >\n-{};\n+226 _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bc_\be_\b<_\bT_\b> trace;\n+227 T value(this->traceExecution(values, trace, traceStorage));\n+228 trace.startReverseAD1(jacobians);\n 229\n-241template \n-_\b2_\b4_\b2class _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN : public _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n-243public:\n-244 static const std::size_t NARY_EXPRESSION_SIZE = sizeof...(Args);\n-245 using ArrayNKeys = std::array;\n-246\n-_\b2_\b4_\b8 _\b~_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN() override = default;\n-249\n-250 // Don't provide backward compatible evaluateVector(), due to its\n-problematic\n-251 // variable length of optional Jacobian arguments. Vector evaluateError\n-(const\n-252 // Args... args,...);\n-253\n-_\b2_\b5_\b6 virtual _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const ArrayNKeys &_\bk_\be_\by_\bs) const {\n-257 throw std::runtime_error(\n-258 \"ExpressionFactorN::expression not provided: cannot deserialize.\");\n-259 }\n-260\n-261protected:\n-_\b2_\b6_\b3 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN() = default;\n-264\n-_\b2_\b6_\b6 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN(const ArrayNKeys &_\bk_\be_\by_\bs, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-&noiseModel,\n-267 const T &measurement)\n-268 : _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(noiseModel, measurement) {\n-269 for (const auto &key : _\bk_\be_\by_\bs)\n-270 _\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_.push_back(key);\n-271 }\n-272\n-273private:\n-275 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> expression() const override {\n-276 ArrayNKeys _\bk_\be_\by_\bs;\n-277 int idx = 0;\n-278 for (const auto &key : _\bF_\ba_\bc_\bt_\bo_\br::_\bk_\be_\by_\bs_\b_)\n-279 _\bk_\be_\by_\bs[idx++] = key;\n-280 return expression(_\bk_\be_\by_\bs);\n-281 }\n-282\n-283 friend class boost::serialization::access;\n-284 template \n-285 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-286 ar &boost::serialization::make_nvp(\n-287 \"ExpressionFactorN\",\n-288 boost::serialization::base_object>(*this));\n-289 }\n-290};\n-292template \n-_\b2_\b9_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN>\n-294 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n-295// ExpressionFactorN\n+230 return value;\n+231}\n+232\n+233template\n+234typename _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bK_\be_\by_\bs_\bA_\bn_\bd_\bD_\bi_\bm_\bs _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bk_\be_\by_\bs_\bA_\bn_\bd_\bD_\bi_\bm_\bs() const {\n+235 std::map map;\n+236 dims(map);\n+237 size_t n = map.size();\n+238 KeysAndDims pair = std::make_pair(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br(n), _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bi_\bn_\bt_\b>(n));\n+239 boost::copy(map | boost::adaptors::map_keys, pair.first.begin());\n+240 boost::copy(map | boost::adaptors::map_values, pair.second.begin());\n+241 return pair;\n+242}\n+243\n+244namespace internal {\n+245// http://stackoverflow.com/questions/16260445/boost-bind-to-operator\n+246template\n+_\b2_\b4_\b7struct _\ba_\bp_\bp_\bl_\by_\b__\bc_\bo_\bm_\bp_\bo_\bs_\be {\n+248 typedef T result_type;\n+249 static const int Dim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+250 T operator()(const T& x, const T& y, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bD_\bi_\bm_\b,_\b _\bD_\bi_\bm_\b> H1 =\n+251 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bD_\bi_\bm_\b,_\b _\bD_\bi_\bm_\b> H2 = boost::none) const {\n+252 return x.compose(y, H1, H2);\n+253 }\n+254};\n+255\n+256template <>\n+_\b2_\b5_\b7struct _\ba_\bp_\bp_\bl_\by_\b__\bc_\bo_\bm_\bp_\bo_\bs_\be {\n+258 double operator()(const double& x, const double& y,\n+259 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b1_\b> H1 = boost::none,\n+260 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b1_\b> H2 = boost::none) const {\n+261 if (H1) H1->setConstant(y);\n+262 if (H2) H2->setConstant(x);\n+263 return x * y;\n+264 }\n+265};\n+266\n+267}\n+268\n+269// Global methods:\n+270\n+272template\n+_\b2_\b7_\b3_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& expression1,\n+274 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& expression2) {\n+275 return _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>(\n+276 std::bind(_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\ba_\bp_\bp_\bl_\by_\b__\bc_\bo_\bm_\bp_\bo_\bs_\be_\b<_\bT_\b>(), std::placeholders::_1,\n+277 std::placeholders::_2, std::placeholders::_3,\n+278 std::placeholders::_4),\n+279 expression1, expression2);\n+280}\n+281\n+283template\n+_\b2_\b8_\b4std::vector > _\bc_\br_\be_\ba_\bt_\be_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs(size_t n, char c, size_t start) {\n+285 std::vector > unknowns;\n+286 unknowns.reserve(n);\n+287 for (size_t i = start; i < start + n; i++)\n+288 unknowns.push_back(_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>(c, i));\n+289 return unknowns;\n+290}\n+291\n+292template \n+293ScalarMultiplyExpression::ScalarMultiplyExpression(double s, const\n+Expression& e)\n+294 : Expression(boost::make_shared>(s, e))\n+{}\n+295\n 296\n-297\n-298#if defined(GTSAM_ALLOW_DEPRECATED_SINCE_V42)\n-307template \n-308class GTSAM_DEPRECATED ExpressionFactor2 : public _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-309public:\n-311 ~ExpressionFactor2() override {}\n-312\n-314 Vector evaluateError(const A1 &a1, const A2 &a2,\n-315 boost::optional H1 = boost::none,\n-316 boost::optional H2 = boost::none) const {\n-317 _\bV_\ba_\bl_\bu_\be_\bs values;\n-318 values.insert(this->keys_[0], a1);\n-319 values.insert(this->keys_[1], a2);\n-320 std::vector H(2);\n-321 Vector error = ExpressionFactor::unwhitenedError(values, H);\n-322 if (H1) (*H1) = H[0];\n-323 if (H2) (*H2) = H[1];\n-324 return error;\n-325 }\n-326\n-329 virtual Expression expression(Key key1, Key key2) const {\n-330 throw std::runtime_error(\n-331 \"ExpressionFactor2::expression not provided: cannot deserialize.\");\n-332 }\n-333 Expression\n-334 expression(const typename ExpressionFactorN::ArrayNKeys &keys)\n-335 const override {\n-336 return expression(keys[0], keys[1]);\n-337 }\n-338\n-339protected:\n-341 ExpressionFactor2() {}\n-342\n-344 ExpressionFactor2(Key key1, Key key2, const SharedNoiseModel &noiseModel,\n-345 const T &measurement)\n-346 : ExpressionFactorN({key1, key2}, noiseModel, measurement) {}\n-347};\n-348// ExpressionFactor2\n-349#endif\n-350\n-351} // namespace gtsam\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:317\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh\n-Expressions for Block Automatic Differentiation.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+297template \n+298BinarySumExpression::BinarySumExpression(const Expression& e1, const\n+Expression& e2)\n+299 : Expression(boost::_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd>(e1, e2)) {}\n+300\n+301template \n+_\b3_\b0_\b2_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& e) {\n+303 root_ = boost::make_shared>(*this, e);\n+304 return *this;\n+305}\n+306\n+307} // namespace gtsam\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n FastVector\n FastVector is a type alias to a std::vector with a custom memory allocator.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\by_\bm_\bb_\bo_\bl\n+Key symbol(unsigned char c, std::uint64_t j)\n+Create a symbol key from a character and index, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Symbol.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs\n+std::vector< Expression< T > > createUnknowns(size_t n, char c, size_t start)\n+Construct an array of leaves.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:284\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point2 operator*(double s, const Point2 &p)\n+multiply with scalar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd\n+gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::\n+shared_ptr< T > > make_shared(Args &&... args)\n+Add our own make_shared as a layer of wrapping on boost::make_shared This\n+solves the problem with the...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn make_shared.h:57\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A testable concept check that should be placed in applicable unit tests and in\n-generic algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+: meta-function to generate JacobianTA optional reference Used mainly by\n+Expressions\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:261\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n This class stores a dense matrix and allows it to be accessed as a collection\n of vertical blocks.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-const Matrix & matrix() const\n-Access to full matrix (including any portions excluded by rowStart(), rowEnd(),\n-and firstBlock())\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:188\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor in the squared-error form.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-Factor that supports arbitrary expressions via AD.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n-Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix >\n-& > H=boost::none) const override\n-Error function without the NoiseModel, .\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print relies on Testable traits being defined for T\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n-virtual Expression< T > expression() const\n-Recreate expression from keys_ and measured_, used in load below.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:193\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_\n-Expression< T > expression_\n-the expression that is AD enabled\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n-T measured_\n-the measurement to be compared with the expression\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm_\bs_\b_\n-FastVector< int > dims_\n-dimensions of the Jacobian matrices\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const T & measured() const\n-return the measurement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override\n-linearize to a GaussianFactor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-~ExpressionFactor() override\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &f, double tol) const override\n-equals relies on Testable traits being defined for T\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-ExpressionFactor(const SharedNoiseModel &noiseModel, const T &measurement)\n-Default constructor, for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-ExpressionFactor(const SharedNoiseModel &noiseModel, const T &measurement,\n-const Expression< T > &expression)\n-Constructor: creates a factor from a measurement and measurement function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be\n-void initialize(const Expression< T > &expression)\n-Initialize with constructor arguments.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl\n+Character and index key used to refer to variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Symbol.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\ba_\bp_\bp_\bl_\by_\b__\bc_\bo_\bm_\bp_\bo_\bs_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:247\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bc_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:40\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n Expression class that supports automatic differentiation.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-N-ary variadic template for ExpressionFactor meant as a base class for N-ary\n-factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:242\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n-virtual Expression< T > expression(const ArrayNKeys &keys) const\n-Recreate expression from given keys_ and measured_, used in load Needed to\n-deserialize a derived fact...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:256\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\b~_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-~ExpressionFactorN() override=default\n-Destructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-ExpressionFactorN()=default\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+Expression()\n Default constructor, for serialization.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-ExpressionFactorN(const ArrayNKeys &keys, const SharedNoiseModel &noiseModel,\n-const T &measurement)\n-Constructor takes care of keys, but still need to call initialize.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:266\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n-virtual bool active(const Values &) const\n-Checks whether a factor should be used based on a set of values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n-density Templated on...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:182\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bk_\be_\by_\bs\n+std::set< Key > keys() const\n+Return keys that play in this expression.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bK_\be_\by_\bs_\bA_\bn_\bd_\bD_\bi_\bm_\bs\n+std::pair< KeyVector, FastVector< int > > KeysAndDims\n+Keys and dimensions in same order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bd_\bi_\bm_\bs\n+void dims(std::map< Key, int > &map) const\n+Return dimensions for each argument, as a map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s) const\n Print.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &f, double tol=1e-9) const override\n-Check if two factors are equal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-const SharedNoiseModel & noiseModel() const\n-access to the noise model\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:142\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bt_\br_\ba_\bc_\be_\bS_\bi_\bz_\be\n+size_t traceSize() const\n+Return size needed for memory buffer in traceExecution.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bt_\br_\ba_\bc_\be_\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn\n+T traceExecution(const Values &values, internal::ExecutionTrace< T > &trace,\n+void *traceStorage) const\n+trace execution, very unsafe\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:198\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n-noise model to the factor, and calculates the error by asking the user to\n-implement the method\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * E\bEx\bxp\bpr\bre\bes\bss\bsi\bio\bon\bnF\bFa\bac\bct\bto\bor\br.\b.h\bh\n+ * _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01154.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01154.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactorGraph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LinearContainerFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,48 +96,45 @@\n
\n \n \n
\n \n-
NonlinearFactorGraph.h File Reference
\n+
LinearContainerFactor.h File Reference
\n
\n
\n \n-

Factor Graph consisting of non-linear factors. \n+

Wrap Jacobian and Hessian linear factors to allow simple injection into a nonlinear graph. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n \n-\n-\n+\n \n

\n Classes

class  gtsam::NonlinearFactorGraph
class  gtsam::LinearContainerFactor
 Dummy version of a generic linear factor to be injected into a nonlinear factor graph. More...
 
struct  gtsam::traits< NonlinearFactorGraph >
 traits More...
struct  gtsam::traits< LinearContainerFactor >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Factor Graph consisting of non-linear factors.

\n-
Author
Frank Dellaert
\n-
\n-Carlos Nieto
\n-
\n-Christian Potthast
\n+

Wrap Jacobian and Hessian linear factors to allow simple injection into a nonlinear graph.

\n+
Date
Jul 6, 2012
\n+
Author
Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-NonlinearFactorGraph.h File Reference\n-Factor Graph consisting of non-linear factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+LinearContainerFactor.h File Reference\n+Wrap Jacobian and Hessian linear factors to allow simple injection into a\n+nonlinear graph. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Dummy version of a generic linear factor to be injected into a\n+ nonlinear factor graph. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor Graph consisting of non-linear factors.\n+Wrap Jacobian and Hessian linear factors to allow simple injection into a\n+nonlinear graph.\n+ Date\n+ Jul 6, 2012\n Author\n- Frank Dellaert\n- Carlos Nieto\n- Christian Potthast\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01154.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01154.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a01154 = [\n- [\"gtsam::NonlinearFactorGraph\", \"a04540.html\", \"a04540\"],\n- [\"gtsam::traits< NonlinearFactorGraph >\", \"a04544.html\", null]\n+ [\"gtsam::LinearContainerFactor\", \"a04444.html\", \"a04444\"],\n+ [\"gtsam::traits< LinearContainerFactor >\", \"a04448.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01154_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01154_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LinearContainerFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,245 +98,143 @@\n
No Matches
\n \n \n \n \n \n
\n-
NonlinearFactorGraph.h
\n+
LinearContainerFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
7
\n-
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n+Go to the documentation of this file.
1
\n+
10#pragma once
\n
11
\n-
20// \\callgraph
\n-
21
\n-
22#pragma once
\n-
23
\n-\n-\n-\n-\n-\n-
29
\n-
30#include <boost/shared_ptr.hpp>
\n-
31#include <functional>
\n-
32
\n-
33namespace gtsam {
\n+\n+
13
\n+
14namespace gtsam {
\n+
15
\n+
16 // Forward declarations
\n+
17 class JacobianFactor;
\n+
18 class HessianFactor;
\n+
19
\n+
\n+
26class GTSAM_EXPORT LinearContainerFactor : public NonlinearFactor {
\n+
27protected:
\n+
28
\n+\n+
30 boost::optional<Values> linearizationPoint_;
\n+
31
\n+
33 LinearContainerFactor(const GaussianFactor::shared_ptr& factor, const boost::optional<Values>& linearizationPoint);
\n
34
\n-
35 // Forward declarations
\n-
36 class Values;
\n-
37 class Ordering;
\n-
38 class GaussianFactorGraph;
\n-
39 class SymbolicFactorGraph;
\n-
40 template<typename T>
\n-
41 class Expression;
\n-
42 template<typename T>
\n-
43 class ExpressionFactor;
\n-
44
\n-
\n-
55 class GTSAM_EXPORT NonlinearFactorGraph: public FactorGraph<NonlinearFactor> {
\n+
35 // Some handy typedefs
\n+
36 typedef NonlinearFactor Base;
\n+\n+
38
\n+
39public:
\n+
40
\n+
41 typedef boost::shared_ptr<This> shared_ptr;
\n+
42
\n+\n+
45
\n+
47 LinearContainerFactor(const JacobianFactor& factor, const Values& linearizationPoint = Values());
\n+
48
\n+
50 LinearContainerFactor(const HessianFactor& factor, const Values& linearizationPoint = Values());
\n+
51
\n+
53 LinearContainerFactor(const GaussianFactor::shared_ptr& factor, const Values& linearizationPoint = Values());
\n+
54
\n+
55 // Access
\n
56
\n-
57 public:
\n+
57 const GaussianFactor::shared_ptr& factor() const { return factor_; }
\n
58
\n-\n-\n-
61 typedef boost::shared_ptr<This> shared_ptr;
\n-
62
\n-
65
\n-\n+
59 // Testable
\n+
60
\n+
62 void print(const std::string& s = "", const KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const override;
\n+
63
\n+
65 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override;
\n+
66
\n+
67 // NonlinearFactor
\n
68
\n-
70 template<typename ITERATOR>
\n-
71 NonlinearFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor) : Base(firstFactor, lastFactor) {}
\n-
72
\n-
74 template<class CONTAINER>
\n-
75 explicit NonlinearFactorGraph(const CONTAINER& factors) : Base(factors) {}
\n-
76
\n-
78 template<class DERIVEDFACTOR>
\n-\n-
80
\n-\n-
83
\n-
87
\n-
89 void print(
\n-
90 const std::string& str = "NonlinearFactorGraph: ",
\n-
91 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n-
92
\n-
94 void printErrors(const Values& values, const std::string& str = "NonlinearFactorGraph: ",
\n-
95 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
96 const std::function<bool(const Factor* /*factor*/, double /*whitenedError*/, size_t /*index*/)>&
\n-
97 printCondition = [](const Factor *,double, size_t) {return true;}) const;
\n-
98
\n-
100 bool equals(const NonlinearFactorGraph& other, double tol = 1e-9) const;
\n-
101
\n-
105
\n-
107 double error(const Values& values) const;
\n-
108
\n-
110 double probPrime(const Values& values) const;
\n-
111
\n-
115 boost::shared_ptr<SymbolicFactorGraph> symbolic() const;
\n-
116
\n-
120 Ordering orderingCOLAMD() const;
\n-
121
\n-
130 Ordering orderingCOLAMDConstrained(const FastMap<Key, int>& constraints) const;
\n-
131
\n-
133 boost::shared_ptr<GaussianFactorGraph> linearize(const Values& linearizationPoint) const;
\n-
134
\n-
136 typedef std::function<void(const boost::shared_ptr<HessianFactor>& hessianFactor)> Dampen;
\n-
137
\n-
145 boost::shared_ptr<HessianFactor> linearizeToHessianFactor(
\n-
146 const Values& values, const Dampen& dampen = nullptr) const;
\n-
147
\n-
156 boost::shared_ptr<HessianFactor> linearizeToHessianFactor(
\n-
157 const Values& values, const Ordering& ordering, const Dampen& dampen = nullptr) const;
\n+
77 double error(const Values& c) const override;
\n+
78
\n+
80 size_t dim() const override;
\n+
81
\n+
83 const boost::optional<Values>& linearizationPoint() const { return linearizationPoint_; }
\n+
84
\n+
101 GaussianFactor::shared_ptr linearize(const Values& c) const override;
\n+
102
\n+
106 GaussianFactor::shared_ptr negateToGaussian() const;
\n+
107
\n+
111 NonlinearFactor::shared_ptr negateToNonlinear() const;
\n+
112
\n+
\n+
119 NonlinearFactor::shared_ptr clone() const override {
\n+
120 return NonlinearFactor::shared_ptr(new LinearContainerFactor(factor_,linearizationPoint_));
\n+
121 }
\n+
\n+
122
\n+
128 NonlinearFactor::shared_ptr rekey(
\n+
129 const std::map<Key, Key>& rekey_mapping) const override;
\n+
130
\n+
135 NonlinearFactor::shared_ptr rekey(const KeyVector& new_keys) const override;
\n+
136
\n+
138 inline bool hasLinearizationPoint() const { return linearizationPoint_.is_initialized(); }
\n+
139
\n+
143 bool isJacobian() const;
\n+
144 bool isHessian() const;
\n+
145
\n+
147 boost::shared_ptr<JacobianFactor> toJacobian() const;
\n+
148
\n+
150 boost::shared_ptr<HessianFactor> toHessian() const;
\n+
151
\n+
156 static NonlinearFactorGraph ConvertLinearGraph(const GaussianFactorGraph& linear_graph,
\n+
157 const Values& linearizationPoint = Values());
\n
158
\n-
161 Values updateCholesky(const Values& values,
\n-
162 const Dampen& dampen = nullptr) const;
\n-
163
\n-
166 Values updateCholesky(const Values& values, const Ordering& ordering,
\n-
167 const Dampen& dampen = nullptr) const;
\n-
168
\n-
170 NonlinearFactorGraph clone() const;
\n-
171
\n-
181 NonlinearFactorGraph rekey(const std::map<Key,Key>& rekey_mapping) const;
\n-
182
\n-
189 template<typename T>
\n-
\n-
190 void addExpressionFactor(const SharedNoiseModel& R, const T& z,
\n-
191 const Expression<T>& h) {
\n-
192 push_back(boost::make_shared<ExpressionFactor<T> >(R, z, h));
\n-
193 }
\n-
\n-
194
\n-
201 template<typename T>
\n-
\n-
202 void addPrior(Key key, const T& prior,
\n-
203 const SharedNoiseModel& model = nullptr) {
\n-
204 emplace_shared<PriorFactor<T>>(key, prior, model);
\n-
205 }
\n-
\n-
206
\n-
217 template<typename T>
\n-
\n-
218 void addPrior(Key key, const T& prior, const Matrix& covariance) {
\n-
219 emplace_shared<PriorFactor<T>>(key, prior, covariance);
\n-
220 }
\n-
\n-
221
\n-
225
\n-
226 using FactorGraph::dot;
\n-
227 using FactorGraph::saveGraph;
\n-
228
\n-
230 void dot(std::ostream& os, const Values& values,
\n-
231 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
232 const GraphvizFormatting& writer = GraphvizFormatting()) const;
\n-
233
\n-
235 std::string dot(
\n-
236 const Values& values,
\n-
237 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
238 const GraphvizFormatting& writer = GraphvizFormatting()) const;
\n-
239
\n-
241 void saveGraph(
\n-
242 const std::string& filename, const Values& values,
\n-
243 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
244 const GraphvizFormatting& writer = GraphvizFormatting()) const;
\n-
246
\n-
247 private:
\n-
248
\n-
253 boost::shared_ptr<HessianFactor> linearizeToHessianFactor(
\n-
254 const Values& values, const Scatter& scatter, const Dampen& dampen = nullptr) const;
\n-
255
\n-
257 friend class boost::serialization::access;
\n-
258 template<class ARCHIVE>
\n-
259 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
260 ar & boost::serialization::make_nvp("NonlinearFactorGraph",
\n-
261 boost::serialization::base_object<Base>(*this));
\n-
262 }
\n-
263
\n-
264 public:
\n-
265
\n-
266#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
269
\n-
270 boost::shared_ptr<HessianFactor> GTSAM_DEPRECATED linearizeToHessianFactor(
\n-
271 const Values& values, boost::none_t, const Dampen& dampen = nullptr) const
\n-
272 {return linearizeToHessianFactor(values, dampen);}
\n-
273
\n-
275 Values GTSAM_DEPRECATED updateCholesky(const Values& values, boost::none_t,
\n-
276 const Dampen& dampen = nullptr) const
\n-
277 {return updateCholesky(values, dampen);}
\n-
278
\n-
280 void GTSAM_DEPRECATED saveGraph(
\n-
281 std::ostream& os, const Values& values = Values(),
\n-
282 const GraphvizFormatting& graphvizFormatting = GraphvizFormatting(),
\n-
283 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {
\n-
284 dot(os, values, keyFormatter, graphvizFormatting);
\n-
285 }
\n-
287 void GTSAM_DEPRECATED
\n-
288 saveGraph(const std::string& filename, const Values& values,
\n-
289 const GraphvizFormatting& graphvizFormatting,
\n-
290 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {
\n-
291 saveGraph(filename, values, keyFormatter, graphvizFormatting);
\n-
292 }
\n-
294#endif
\n-
295
\n-
296 };
\n-
\n-
297
\n-
299template<>
\n-
\n-
300struct traits<NonlinearFactorGraph> : public Testable<NonlinearFactorGraph> {
\n-
301};
\n-
\n-
302
\n-
303} //\\ namespace gtsam
\n-
304
\n-
2D Point
\n-
Factor Graph Base Class.
\n-
Graphviz formatter for NonlinearFactorGraph.
\n-
Non-linear factor base classes.
\n+
159 protected:
\n+
160 void initializeLinearizationPoint(const Values& linearizationPoint);
\n+
161
\n+
162 private:
\n+
164 friend class boost::serialization::access;
\n+
165 template<class ARCHIVE>
\n+
166 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
167 ar & boost::serialization::make_nvp("NonlinearFactor",
\n+
168 boost::serialization::base_object<Base>(*this));
\n+
169 ar & BOOST_SERIALIZATION_NVP(factor_);
\n+
170 ar & BOOST_SERIALIZATION_NVP(linearizationPoint_);
\n+
171 }
\n+
172
\n+
173}; // \\class LinearContainerFactor
\n+
\n+
174
\n+
175template<> struct traits<LinearContainerFactor> : public Testable<LinearContainerFactor> {};
\n+
176
\n+
177} // \\namespace gtsam
\n+
178
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
Definition Factor.h:68
\n-
Definition Ordering.h:34
\n-
Scatter is an intermediate data structure used when building a HessianFactor incrementally,...
Definition Scatter.h:49
\n-
Factor that supports arbitrary expressions via AD.
Definition ExpressionFactor.h:44
\n-
Expression class that supports automatic differentiation.
Definition Expression.h:48
\n-
Formatting options and functions for saving a NonlinearFactorGraph instance in GraphViz format.
Definition GraphvizFormatting.h:32
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
A Gaussian factor using the canonical parameters (information form)
Definition HessianFactor.h:101
\n+
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n+
Dummy version of a generic linear factor to be injected into a nonlinear factor graph.
Definition LinearContainerFactor.h:26
\n+
NonlinearFactor::shared_ptr clone() const override
Creates a shared_ptr clone of the factor - needs to be specialized to allow for subclasses.
Definition LinearContainerFactor.h:119
\n+
LinearContainerFactor()
Default constructor - necessary for serialization.
Definition LinearContainerFactor.h:44
\n+
const boost::optional< Values > & linearizationPoint() const
Extract the linearization point used in recalculating error.
Definition LinearContainerFactor.h:83
\n+
bool hasLinearizationPoint() const
Casting syntactic sugar.
Definition LinearContainerFactor.h:138
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n
Definition NonlinearFactorGraph.h:55
\n-
NonlinearFactorGraph()
Default constructor.
Definition NonlinearFactorGraph.h:67
\n-
void addPrior(Key key, const T &prior, const SharedNoiseModel &model=nullptr)
Convenience method which adds a PriorFactor to the factor graph.
Definition NonlinearFactorGraph.h:202
\n-
NonlinearFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects)
Definition NonlinearFactorGraph.h:75
\n-
void addExpressionFactor(const SharedNoiseModel &R, const T &z, const Expression< T > &h)
Directly add ExpressionFactor that implements |h(x)-z|^2_R.
Definition NonlinearFactorGraph.h:190
\n-
void addPrior(Key key, const T &prior, const Matrix &covariance)
Convenience method which adds a PriorFactor to the factor graph.
Definition NonlinearFactorGraph.h:218
\n-
NonlinearFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Construct from iterator over factors.
Definition NonlinearFactorGraph.h:71
\n-
std::function< void(const boost::shared_ptr< HessianFactor > &hessianFactor)> Dampen
typdef for dampen functions used below
Definition NonlinearFactorGraph.h:136
\n-
NonlinearFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition NonlinearFactorGraph.h:79
\n-
virtual ~NonlinearFactorGraph()
Destructor.
Definition NonlinearFactorGraph.h:82
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
In Gaussian factors, the error function returns either the negative log-likelihood,...
\n
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n-\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,314 +1,185 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearFactorGraph.h\n+LinearContainerFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1/* ---------------------------------------------------------------------------\n--\n-2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n-7\n-8 * See LICENSE for the license information\n-9\n-10 * -------------------------------------------------------------------------\n-- */\n+1\n+10#pragma once\n 11\n-20// \\callgraph\n-21\n-22#pragma once\n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bP_\br_\bi_\bo_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-29\n-30#include \n-31#include \n-32\n-33namespace _\bg_\bt_\bs_\ba_\bm {\n+12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+13\n+14namespace _\bg_\bt_\bs_\ba_\bm {\n+15\n+16 // Forward declarations\n+17 class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br;\n+18 class HessianFactor;\n+19\n+_\b2_\b6class GTSAM_EXPORT _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n+27protected:\n+28\n+29 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br factor_;\n+30 boost::optional linearizationPoint_;\n+31\n+33 _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br& factor, const\n+boost::optional& linearizationPoint);\n 34\n-35 // Forward declarations\n-36 class _\bV_\ba_\bl_\bu_\be_\bs;\n-37 class Ordering;\n-38 class GaussianFactorGraph;\n-39 class SymbolicFactorGraph;\n-40 template\n-41 class Expression;\n-42 template\n-43 class ExpressionFactor;\n-44\n-_\b5_\b5 class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh: public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-{\n+35 // Some handy typedefs\n+36 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n+37 typedef _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+38\n+39public:\n+40\n+41 typedef boost::shared_ptr shared_ptr;\n+42\n+_\b4_\b4 _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br() {}\n+45\n+47 _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& factor, const _\bV_\ba_\bl_\bu_\be_\bs&\n+linearizationPoint = _\bV_\ba_\bl_\bu_\be_\bs());\n+48\n+50 _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& factor, const _\bV_\ba_\bl_\bu_\be_\bs&\n+linearizationPoint = _\bV_\ba_\bl_\bu_\be_\bs());\n+51\n+53 _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br& factor, const\n+_\bV_\ba_\bl_\bu_\be_\bs& linearizationPoint = _\bV_\ba_\bl_\bu_\be_\bs());\n+54\n+55 // Access\n 56\n-57 public:\n+57 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br& factor() const { return factor_; }\n 58\n-59 typedef _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b> _\bB_\ba_\bs_\be;\n-60 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bT_\bh_\bi_\bs;\n-61 typedef boost::shared_ptr shared_ptr;\n-62\n-65\n-_\b6_\b7 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n+59 // Testable\n+60\n+62 void print(const std::string& s = \"\", const KeyFormatter& keyFormatter =\n+gtsam::DefaultKeyFormatter) const override;\n+63\n+65 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override;\n+66\n+67 // NonlinearFactor\n 68\n-70 template\n-_\b7_\b1 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(ITERATOR firstFactor, ITERATOR lastFactor) : _\bB_\ba_\bs_\be\n-(firstFactor, lastFactor) {}\n-72\n-74 template\n-_\b7_\b5 explicit _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const CONTAINER& factors) : _\bB_\ba_\bs_\be(factors) {}\n-76\n-78 template\n-_\b7_\b9 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph) : _\bB_\ba_\bs_\be(graph)\n-{}\n-80\n-_\b8_\b2 virtual _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n-83\n-87\n-89 void _\bp_\br_\bi_\bn_\bt(\n-90 const std::string& str = \"NonlinearFactorGraph: \",\n-91 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n-92\n-94 void printErrors(const _\bV_\ba_\bl_\bu_\be_\bs& values, const std::string& str =\n-\"NonlinearFactorGraph: \",\n-95 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-96 const std::function&\n-97 printCondition = [](const _\bF_\ba_\bc_\bt_\bo_\br *,double, size_t) {return true;}) const;\n-98\n-100 bool equals(const NonlinearFactorGraph& other, double tol = 1e-9) const;\n-101\n-105\n-107 double error(const _\bV_\ba_\bl_\bu_\be_\bs& values) const;\n-108\n-110 double probPrime(const _\bV_\ba_\bl_\bu_\be_\bs& values) const;\n-111\n-115 boost::shared_ptr symbolic() const;\n-116\n-120 Ordering orderingCOLAMD() const;\n-121\n-130 Ordering orderingCOLAMDConstrained(const FastMap& constraints)\n-const;\n-131\n-133 boost::shared_ptr linearize(const _\bV_\ba_\bl_\bu_\be_\bs&\n-linearizationPoint) const;\n-134\n-_\b1_\b3_\b6 typedef std::function&\n-hessianFactor)> _\bD_\ba_\bm_\bp_\be_\bn;\n-137\n-145 boost::shared_ptr linearizeToHessianFactor(\n-146 const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bD_\ba_\bm_\bp_\be_\bn& dampen = nullptr) const;\n-147\n-156 boost::shared_ptr linearizeToHessianFactor(\n-157 const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, const _\bD_\ba_\bm_\bp_\be_\bn& dampen =\n-nullptr) const;\n+77 double error(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n+78\n+80 size_t dim() const override;\n+81\n+_\b8_\b3 const boost::optional& _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt() const { return\n+linearizationPoint_; }\n+84\n+101 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br linearize(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n+102\n+106 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br negateToGaussian() const;\n+107\n+111 NonlinearFactor::shared_ptr negateToNonlinear() const;\n+112\n+_\b1_\b1_\b9 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+120 return NonlinearFactor::shared_ptr(new _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br\n+(factor_,linearizationPoint_));\n+121 }\n+122\n+128 NonlinearFactor::shared_ptr rekey(\n+129 const std::map& rekey_mapping) const override;\n+130\n+135 NonlinearFactor::shared_ptr rekey(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& new_keys) const\n+override;\n+136\n+_\b1_\b3_\b8 inline bool _\bh_\ba_\bs_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt() const { return\n+linearizationPoint_.is_initialized(); }\n+139\n+143 bool isJacobian() const;\n+144 bool isHessian() const;\n+145\n+147 boost::shared_ptr toJacobian() const;\n+148\n+150 boost::shared_ptr toHessian() const;\n+151\n+156 static _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh ConvertLinearGraph(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh&\n+linear_graph,\n+157 const _\bV_\ba_\bl_\bu_\be_\bs& linearizationPoint = _\bV_\ba_\bl_\bu_\be_\bs());\n 158\n-161 _\bV_\ba_\bl_\bu_\be_\bs updateCholesky(const _\bV_\ba_\bl_\bu_\be_\bs& values,\n-162 const _\bD_\ba_\bm_\bp_\be_\bn& dampen = nullptr) const;\n-163\n-166 _\bV_\ba_\bl_\bu_\be_\bs updateCholesky(const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-167 const _\bD_\ba_\bm_\bp_\be_\bn& dampen = nullptr) const;\n-168\n-170 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh clone() const;\n-171\n-181 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh rekey(const std::map& rekey_mapping) const;\n-182\n-189 template\n-_\b1_\b9_\b0 void _\ba_\bd_\bd_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& R, const T& z,\n-191 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& h) {\n-192 push_back(boost::make_shared<_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bT_\b> >(R, z, h));\n-193 }\n-194\n-201 template\n-_\b2_\b0_\b2 void _\ba_\bd_\bd_\bP_\br_\bi_\bo_\br(_\bK_\be_\by key, const T& prior,\n-203 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr) {\n-204 emplace_shared>(key, prior, model);\n-205 }\n-206\n-217 template\n-_\b2_\b1_\b8 void _\ba_\bd_\bd_\bP_\br_\bi_\bo_\br(_\bK_\be_\by key, const T& prior, const Matrix& covariance) {\n-219 emplace_shared>(key, prior, covariance);\n-220 }\n-221\n-225\n-226 using FactorGraph::dot;\n-227 using FactorGraph::saveGraph;\n-228\n-230 void _\bd_\bo_\bt(std::ostream& os, const _\bV_\ba_\bl_\bu_\be_\bs& values,\n-231 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-232 const _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg& writer = _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg()) const;\n-233\n-235 std::string _\bd_\bo_\bt(\n-236 const _\bV_\ba_\bl_\bu_\be_\bs& values,\n-237 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-238 const _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg& writer = _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg()) const;\n-239\n-241 void saveGraph(\n-242 const std::string& filename, const _\bV_\ba_\bl_\bu_\be_\bs& values,\n-243 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-244 const _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg& writer = _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg()) const;\n-246\n-247 private:\n-248\n-253 boost::shared_ptr linearizeToHessianFactor(\n-254 const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bS_\bc_\ba_\bt_\bt_\be_\br& scatter, const Dampen& dampen =\n-nullptr) const;\n-255\n-_\b2_\b5_\b7 friend class boost::serialization::access;\n-258 template\n-259 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-260 ar & boost::serialization::make_nvp(\"NonlinearFactorGraph\",\n-261 boost::serialization::base_object(*this));\n-262 }\n-263\n-264 public:\n-265\n-266#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-269\n-270 boost::shared_ptr GTSAM_DEPRECATED linearizeToHessianFactor(\n-271 const _\bV_\ba_\bl_\bu_\be_\bs& values, boost::none_t, const Dampen& dampen = nullptr) const\n-272 {return linearizeToHessianFactor(values, dampen);}\n-273\n-275 _\bV_\ba_\bl_\bu_\be_\bs GTSAM_DEPRECATED updateCholesky(const _\bV_\ba_\bl_\bu_\be_\bs& values, boost::none_t,\n-276 const Dampen& dampen = nullptr) const\n-277 {return updateCholesky(values, dampen);}\n-278\n-280 void GTSAM_DEPRECATED saveGraph(\n-281 std::ostream& os, const _\bV_\ba_\bl_\bu_\be_\bs& values = _\bV_\ba_\bl_\bu_\be_\bs(),\n-282 const GraphvizFormatting& graphvizFormatting = GraphvizFormatting(),\n-283 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {\n-284 _\bd_\bo_\bt(os, values, keyFormatter, graphvizFormatting);\n-285 }\n-287 void GTSAM_DEPRECATED\n-288 saveGraph(const std::string& filename, const _\bV_\ba_\bl_\bu_\be_\bs& values,\n-289 const GraphvizFormatting& graphvizFormatting,\n-290 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const {\n-291 saveGraph(filename, values, keyFormatter, graphvizFormatting);\n-292 }\n-294#endif\n-295\n-296 };\n-297\n-299template<>\n-_\b3_\b0_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-{\n-301};\n-302\n-303} //\\ namespace gtsam\n-304\n-_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-2D Point\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n-_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b._\bh\n-Graphviz formatter for NonlinearFactorGraph.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+159 protected:\n+160 void initializeLinearizationPoint(const _\bV_\ba_\bl_\bu_\be_\bs& linearizationPoint);\n+161\n+162 private:\n+_\b1_\b6_\b4 friend class boost::serialization::access;\n+165 template\n+166 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+167 ar & boost::serialization::make_nvp(\"NonlinearFactor\",\n+168 boost::serialization::base_object(*this));\n+169 ar & BOOST_SERIALIZATION_NVP(factor_);\n+170 ar & BOOST_SERIALIZATION_NVP(linearizationPoint_);\n+171 }\n+172\n+173}; // \\class LinearContainerFactor\n+174\n+_\b1_\b7_\b5template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br> : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+176\n+177} // \\namespace gtsam\n+178\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n-Scatter is an intermediate data structure used when building a HessianFactor\n-incrementally,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-Factor that supports arbitrary expressions via AD.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n-Expression class that supports automatic differentiation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg\n-Formatting options and functions for saving a NonlinearFactorGraph instance in\n-GraphViz format.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor using the canonical parameters (information form)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor in the squared-error form.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Dummy version of a generic linear factor to be injected into a nonlinear factor\n+graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LinearContainerFactor.h:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+NonlinearFactor::shared_ptr clone() const override\n+Creates a shared_ptr clone of the factor - needs to be specialized to allow for\n+subclasses.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LinearContainerFactor.h:119\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br\n+LinearContainerFactor()\n+Default constructor - necessary for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LinearContainerFactor.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt\n+const boost::optional< Values > & linearizationPoint() const\n+Extract the linearization point used in recalculating error.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LinearContainerFactor.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\ba_\bs_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt\n+bool hasLinearizationPoint() const\n+Casting syntactic sugar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LinearContainerFactor.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-NonlinearFactorGraph()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\bP_\br_\bi_\bo_\br\n-void addPrior(Key key, const T &prior, const SharedNoiseModel &model=nullptr)\n-Convenience method which adds a PriorFactor to the factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:202\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-NonlinearFactorGraph(const CONTAINER &factors)\n-Construct from container of factors (shared_ptr or plain objects)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-void addExpressionFactor(const SharedNoiseModel &R, const T &z, const\n-Expression< T > &h)\n-Directly add ExpressionFactor that implements |h(x)-z|^2_R.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:190\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\bP_\br_\bi_\bo_\br\n-void addPrior(Key key, const T &prior, const Matrix &covariance)\n-Convenience method which adds a PriorFactor to the factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:218\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-NonlinearFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)\n-Construct from iterator over factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bD_\ba_\bm_\bp_\be_\bn\n-std::function< void(const boost::shared_ptr< HessianFactor > &hessianFactor)>\n-Dampen\n-typdef for dampen functions used below\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-NonlinearFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n-Implicit copy/downcast constructor to override explicit template container\n-constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-virtual ~NonlinearFactorGraph()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:82\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+In Gaussian factors, the error function returns either the negative log-\n+likelihood,...\n _\bV_\ba_\bl_\bu_\be_\bs\n In nonlinear factors, the error function returns the negative log-likelihood as\n a non-linear function...\n-_\bP_\br_\bi_\bo_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bL_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01160.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01160.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Clique.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizerImpl.h File Reference\n \n \n \n \n \n \n \n@@ -95,53 +95,45 @@\n \n \n \n \n
\n \n-
ISAM2Clique.h File Reference
\n+Namespaces
\n+
DoglegOptimizerImpl.h File Reference
\n \n
\n \n-

Specialized iSAM2 Clique. \n+

Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation) \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::ISAM2Clique
 Specialized Clique structure for ISAM2, incorporating caching and gradient contribution TODO: more documentation. More...
struct  gtsam::DoglegOptimizerImpl
 This class contains the implementation of the Dogleg algorithm. More...
 
struct  gtsam::DoglegOptimizerImpl::IterationResult
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n

\n-Functions

size_t gtsam::optimizeWildfire (const ISAM2Clique::shared_ptr &root, double threshold, const KeySet &replaced, VectorValues *delta)
 Optimize the BayesTree, starting from the root.
 
\n-size_t gtsam::optimizeWildfireNonRecursive (const ISAM2Clique::shared_ptr &root, double threshold, const KeySet &keys, VectorValues *delta)
 
\n

Detailed Description

\n-

Specialized iSAM2 Clique.

\n-
Author
Michael Kaess, Richard Roberts
\n+

Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)

\n+
Author
Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-ISAM2Clique.h File Reference\n-Specialized iSAM2 Clique. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+DoglegOptimizerImpl.h File Reference\n+Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail\n+implementation) _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n-\u00a0 Specialized Clique structure for _\bI_\bS_\bA_\bM_\b2, incorporating caching and\n- gradient contribution TODO: more documentation. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl\n+\u00a0 This class contains the implementation of the Dogleg algorithm.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-size_t\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bW_\bi_\bl_\bd_\bf_\bi_\br_\be (const ISAM2Clique::shared_ptr &root, double\n- threshold, const _\bK_\be_\by_\bS_\be_\bt &replaced, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs *delta)\n-\u00a0 Optimize the _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be, starting from the root.\n-\u00a0\n-size_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpt\bti\bim\bmi\biz\bze\beW\bWi\bil\bld\bdf\bfi\bir\bre\beN\bNo\bon\bnR\bRe\bec\bcu\bur\brs\bsi\biv\bve\be (const ISAM2Clique::shared_ptr\n- &root, double threshold, const _\bK_\be_\by_\bS_\be_\bt &keys, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs *delta)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Specialized iSAM2 Clique.\n+Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail\n+implementation)\n Author\n- Michael Kaess, Richard Roberts\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b._\bh\n+ * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01160.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01160.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var a01160 = [\n- [\"gtsam::ISAM2Clique\", \"a04404.html\", \"a04404\"],\n- [\"optimizeWildfire\", \"a01160.html#a2b0857edd76f8d63eeee0ce9944e28d4\", null]\n+ [\"gtsam::DoglegOptimizerImpl\", \"a04264.html\", \"a04264\"],\n+ [\"gtsam::DoglegOptimizerImpl::IterationResult\", \"a04268.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01160_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01160_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Clique.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizerImpl.h Source File\n \n \n \n \n \n \n \n@@ -98,166 +98,203 @@\n
No Matches
\n \n \n \n \n \n
\n-
ISAM2Clique.h
\n+
DoglegOptimizerImpl.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18// \\callgraph
\n-
19
\n-
20#pragma once
\n-
21
\n-\n-
23#include <gtsam/inference/Key.h>
\n-\n-\n-\n-
27#include <string>
\n-
28
\n-
29namespace gtsam {
\n-
30
\n-
\n-
36class GTSAM_EXPORT ISAM2Clique
\n-
37 : public BayesTreeCliqueBase<ISAM2Clique, GaussianFactorGraph> {
\n-
38 public:
\n-
39 typedef ISAM2Clique This;
\n-\n-
41 typedef boost::shared_ptr<This> shared_ptr;
\n-
42 typedef boost::weak_ptr<This> weak_ptr;
\n-\n-
44 typedef ConditionalType::shared_ptr sharedConditional;
\n-
45
\n-
46 Base::FactorType::shared_ptr cachedFactor_;
\n-
47 Vector gradientContribution_;
\n-
48#ifdef USE_BROKEN_FAST_BACKSUBSTITUTE
\n-
49 mutable FastMap<Key, VectorValues::iterator> solnPointers_;
\n-
50#endif
\n-
51
\n-
53 ISAM2Clique() : Base() {}
\n-
54 virtual ~ISAM2Clique() = default;
\n-
55
\n-
\n-\n-
59 : Base(other),
\n-
60 cachedFactor_(other.cachedFactor_),
\n-
61 gradientContribution_(other.gradientContribution_) {}
\n-
\n-
62
\n-
\n-\n-
66 Base::operator=(other);
\n-
67 cachedFactor_ = other.cachedFactor_;
\n-
68 gradientContribution_ = other.gradientContribution_;
\n-
69 return *this;
\n-
70 }
\n-
\n-
71
\n-
73 void setEliminationResult(
\n-
74 const FactorGraphType::EliminationResult& eliminationResult);
\n-
75
\n-
77 Base::FactorType::shared_ptr& cachedFactor() { return cachedFactor_; }
\n-
78
\n-
80 const Vector& gradientContribution() const { return gradientContribution_; }
\n-
81
\n-
83 void addGradientAtZero(VectorValues* g) const;
\n-
84
\n-
85 bool equals(const This& other, double tol = 1e-9) const;
\n-
86
\n-
88 void print(const std::string& s = "",
\n-
89 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n-
90
\n-
91 void optimizeWildfire(const KeySet& replaced, double threshold,
\n-
92 KeySet* changed, VectorValues* delta,
\n-
93 size_t* count) const;
\n-
94
\n-
95 bool optimizeWildfireNode(const KeySet& replaced, double threshold,
\n-
96 KeySet* changed, VectorValues* delta,
\n-
97 size_t* count) const;
\n+
17#pragma once
\n+
18
\n+
19#include <iomanip>
\n+
20
\n+\n+\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
\n+
32struct GTSAM_EXPORT DoglegOptimizerImpl {
\n+
33
\n+
\n+
34 struct GTSAM_EXPORT IterationResult {
\n+
35 double delta;
\n+
36 VectorValues dx_d;
\n+
37 double f_error;
\n+
38 };
\n+
\n+
39
\n+
\n+\n+
54 SEARCH_EACH_ITERATION,
\n+
55 SEARCH_REDUCE_ONLY,
\n+
56 ONE_STEP_PER_ITERATION
\n+
57 };
\n+
\n+
58
\n+
94 template<class M, class F, class VALUES>
\n+
95 static IterationResult Iterate(
\n+
96 double delta, TrustRegionAdaptationMode mode, const VectorValues& dx_u, const VectorValues& dx_n,
\n+
97 const M& Rd, const F& f, const VALUES& x0, const double f_error, const bool verbose=false);
\n
98
\n-
103 void nnz_internal(size_t* result) const;
\n-
104 size_t calculate_nnz() const;
\n-
105
\n-
121 void findAll(const KeySet& markedMask, KeySet* keys) const;
\n+
121 static VectorValues ComputeDoglegPoint(double delta, const VectorValues& dx_u, const VectorValues& dx_n, const bool verbose=false);
\n
122
\n-
123 private:
\n-
128 bool isDirty(const KeySet& replaced, const KeySet& changed) const;
\n-
129
\n-
134 void fastBackSubstitute(VectorValues* delta) const;
\n+
132 static VectorValues ComputeBlend(double delta, const VectorValues& x_u, const VectorValues& x_n, const bool verbose=false);
\n+
133};
\n+
\n+
134
\n
135
\n-
136 /*
\n-
137 * Check whether the values changed above a threshold, or always true if the
\n-
138 * clique was replaced.
\n-
139 */
\n-
140 bool valuesChanged(const KeySet& replaced, const Vector& originalValues,
\n-
141 const VectorValues& delta, double threshold) const;
\n-
142
\n-
144 void markFrontalsAsChanged(KeySet* changed) const;
\n+
136/* ************************************************************************* */
\n+
137template<class M, class F, class VALUES>
\n+
\n+\n+
139 double delta, TrustRegionAdaptationMode mode, const VectorValues& dx_u, const VectorValues& dx_n,
\n+
140 const M& Rd, const F& f, const VALUES& x0, const double f_error, const bool verbose)
\n+
141{
\n+
142 gttic(M_error);
\n+
143 const double M_error = Rd.error(VectorValues::Zero(dx_u));
\n+
144 gttoc(M_error);
\n
145
\n-
147 void restoreFromOriginals(const Vector& originalValues,
\n-
148 VectorValues* delta) const;
\n-
149
\n-
151 friend class boost::serialization::access;
\n-
152 template <class ARCHIVE>
\n-
153 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
154 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
155 ar& BOOST_SERIALIZATION_NVP(cachedFactor_);
\n-
156 ar& BOOST_SERIALIZATION_NVP(gradientContribution_);
\n-
157 }
\n-
158}; // \\struct ISAM2Clique
\n-
\n-
159
\n-
171size_t optimizeWildfire(const ISAM2Clique::shared_ptr& root, double threshold,
\n-
172 const KeySet& replaced, VectorValues* delta);
\n+
146 // Result to return
\n+
147 IterationResult result;
\n+
148
\n+
149 bool stay = true;
\n+
150 enum { NONE, INCREASED_DELTA, DECREASED_DELTA } lastAction = NONE; // Used to prevent alternating between increasing and decreasing in one iteration
\n+
151 while(stay) {
\n+
152 gttic(Dog_leg_point);
\n+
153 // Compute dog leg point
\n+
154 result.dx_d = ComputeDoglegPoint(delta, dx_u, dx_n, verbose);
\n+
155 gttoc(Dog_leg_point);
\n+
156
\n+
157 if(verbose) std::cout << "delta = " << delta << ", dx_d_norm = " << result.dx_d.norm() << std::endl;
\n+
158
\n+
159 gttic(retract);
\n+
160 // Compute expmapped solution
\n+
161 const VALUES x_d(x0.retract(result.dx_d));
\n+
162 gttoc(retract);
\n+
163
\n+
164 gttic(decrease_in_f);
\n+
165 // Compute decrease in f
\n+
166 result.f_error = f.error(x_d);
\n+
167 gttoc(decrease_in_f);
\n+
168
\n+
169 gttic(new_M_error);
\n+
170 // Compute decrease in M
\n+
171 const double new_M_error = Rd.error(result.dx_d);
\n+
172 gttoc(new_M_error);
\n
173
\n-
174size_t optimizeWildfireNonRecursive(const ISAM2Clique::shared_ptr& root,
\n-
175 double threshold, const KeySet& replaced,
\n-
176 VectorValues* delta);
\n-
177
\n-
178} // namespace gtsam
\n-
Base class for cliques of a BayesTree.
\n-\n-
Conditional Gaussian Base class.
\n-
Chordal Bayes Net, the result of eliminating a factor graph.
\n-
Linear Factor Graph where all factors are Gaussians.
\n+
174 if(verbose) std::cout << std::setprecision(15) << "f error: " << f_error << " -> " << result.f_error << std::endl;
\n+
175 if(verbose) std::cout << std::setprecision(15) << "M error: " << M_error << " -> " << new_M_error << std::endl;
\n+
176
\n+
177 gttic(adjust_delta);
\n+
178 // Compute gain ratio. Here we take advantage of the invariant that the
\n+
179 // Bayes' net error at zero is equal to the nonlinear error
\n+
180 const double rho = std::abs(f_error - result.f_error) < 1e-15 || std::abs(M_error - new_M_error) < 1e-15 ?
\n+
181 0.5 :
\n+
182 (f_error - result.f_error) / (M_error - new_M_error);
\n+
183
\n+
184 if(verbose) std::cout << std::setprecision(15) << "rho = " << rho << std::endl;
\n+
185
\n+
186 if(rho >= 0.75) {
\n+
187 // M agrees very well with f, so try to increase lambda
\n+
188 const double dx_d_norm = result.dx_d.norm();
\n+
189 const double newDelta = std::max(delta, 3.0 * dx_d_norm); // Compute new delta
\n+
190
\n+
191 if(mode == ONE_STEP_PER_ITERATION || mode == SEARCH_REDUCE_ONLY)
\n+
192 stay = false; // If not searching, just return with the new delta
\n+
193 else if(mode == SEARCH_EACH_ITERATION) {
\n+
194 if(std::abs(newDelta - delta) < 1e-15 || lastAction == DECREASED_DELTA)
\n+
195 stay = false; // Searching, but Newton's solution is within trust region so keep the same trust region
\n+
196 else {
\n+
197 stay = true; // Searching and increased delta, so try again to increase delta
\n+
198 lastAction = INCREASED_DELTA;
\n+
199 }
\n+
200 } else {
\n+
201 assert(false); }
\n+
202
\n+
203 delta = newDelta; // Update delta from new delta
\n+
204
\n+
205 } else if(0.75 > rho && rho >= 0.25) {
\n+
206 // M agrees so-so with f, keep the same delta
\n+
207 stay = false;
\n+
208
\n+
209 } else if(0.25 > rho && rho >= 0.0) {
\n+
210 // M does not agree well with f, decrease delta until it does
\n+
211 double newDelta;
\n+
212 bool hitMinimumDelta;
\n+
213 if(delta > 1e-5) {
\n+
214 newDelta = 0.5 * delta;
\n+
215 hitMinimumDelta = false;
\n+
216 } else {
\n+
217 newDelta = delta;
\n+
218 hitMinimumDelta = true;
\n+
219 }
\n+
220 if(mode == ONE_STEP_PER_ITERATION || /* mode == SEARCH_EACH_ITERATION && */ lastAction == INCREASED_DELTA || hitMinimumDelta)
\n+
221 stay = false; // If not searching, just return with the new smaller delta
\n+
222 else if(mode == SEARCH_EACH_ITERATION || mode == SEARCH_REDUCE_ONLY) {
\n+
223 stay = true;
\n+
224 lastAction = DECREASED_DELTA;
\n+
225 } else {
\n+
226 assert(false); }
\n+
227
\n+
228 delta = newDelta; // Update delta from new delta
\n+
229
\n+
230 } else {
\n+
231 // f actually increased, so keep decreasing delta until f does not decrease.
\n+
232 // NOTE: NaN and Inf solutions also will fall into this case, so that we
\n+
233 // decrease delta if the solution becomes undetermined.
\n+
234 assert(0.0 > rho);
\n+
235 if(delta > 1e-5) {
\n+
236 delta *= 0.5;
\n+
237 stay = true;
\n+
238 lastAction = DECREASED_DELTA;
\n+
239 } else {
\n+
240 if(verbose) std::cout << "Warning: Dog leg stopping because cannot decrease error with minimum delta" << std::endl;
\n+
241 result.dx_d.setZero(); // Set delta to zero - don't allow error to increase
\n+
242 result.f_error = f_error;
\n+
243 stay = false;
\n+
244 }
\n+
245 }
\n+
246 gttoc(adjust_delta);
\n+
247 }
\n+
248
\n+
249 // dx_d and f_error have already been filled in during the loop
\n+
250 result.delta = delta;
\n+
251 return result;
\n+
252}
\n+
\n+
253
\n+
254}
\n+
Variable ordering for the elimination algorithm.
\n+
Factor Graph Values.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
size_t optimizeWildfire(const ISAM2Clique::shared_ptr &root, double threshold, const KeySet &keys, VectorValues *delta)
Optimize the BayesTree, starting from the root.
Definition ISAM2Clique.cpp:226
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
This is the base class for BayesTree cliques.
Definition BayesTreeCliqueBase.h:50
\n-
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianConditional.h:46
\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
Specialized Clique structure for ISAM2, incorporating caching and gradient contribution TODO: more do...
Definition ISAM2Clique.h:37
\n-
const Vector & gradientContribution() const
Access the gradient contribution.
Definition ISAM2Clique.h:80
\n-
ISAM2Clique(const ISAM2Clique &other)
Copy constructor, does not copy solution pointers as these are invalid in different trees.
Definition ISAM2Clique.h:58
\n-
ISAM2Clique & operator=(const ISAM2Clique &other)
Assignment operator, does not copy solution pointers as these are invalid in different trees.
Definition ISAM2Clique.h:65
\n-
Base::FactorType::shared_ptr & cachedFactor()
Access the cached factor.
Definition ISAM2Clique.h:77
\n-
ISAM2Clique()
Default constructor.
Definition ISAM2Clique.h:53
\n-
The Factor::error simply extracts the.
\n+
static VectorValues Zero(const VectorValues &other)
Create a VectorValues with the same structure as other, but filled with zeros.
Definition VectorValues.cpp:78
\n+
This class contains the implementation of the Dogleg algorithm.
Definition DoglegOptimizerImpl.h:32
\n+
TrustRegionAdaptationMode
Specifies how the trust region is adapted at each Dogleg iteration.
Definition DoglegOptimizerImpl.h:53
\n+
static IterationResult Iterate(double delta, TrustRegionAdaptationMode mode, const VectorValues &dx_u, const VectorValues &dx_n, const M &Rd, const F &f, const VALUES &x0, const double f_error, const bool verbose=false)
Compute the update point for one iteration of the Dogleg algorithm, given an initial trust region rad...
Definition DoglegOptimizerImpl.h:138
\n+
static VectorValues ComputeDoglegPoint(double delta, const VectorValues &dx_u, const VectorValues &dx_n, const bool verbose=false)
Compute the dogleg point given a trust region radius .
Definition DoglegOptimizerImpl.cpp:25
\n+
Definition DoglegOptimizerImpl.h:34
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,205 +1,232 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM2Clique.h\n+DoglegOptimizerImpl.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18// \\callgraph\n-19\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-27#include \n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-_\b3_\b6class GTSAM_EXPORT _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n-37 : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be {\n-38 public:\n-39 typedef _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be _\bT_\bh_\bi_\bs;\n-40 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bT_\bh_\bi_\bs_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> Base;\n-41 typedef boost::shared_ptr shared_ptr;\n-42 typedef boost::weak_ptr weak_ptr;\n-43 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-44 typedef _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br sharedConditional;\n-45\n-46 Base::FactorType::shared_ptr cachedFactor_;\n-47 Vector gradientContribution_;\n-48#ifdef USE_BROKEN_FAST_BACKSUBSTITUTE\n-49 mutable _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b> solnPointers_;\n-50#endif\n-51\n-_\b5_\b3 _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be() : Base() {}\n-54 virtual _\b~_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be() = default;\n-55\n-_\b5_\b8 _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be(const _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be& other)\n-59 : Base(other),\n-60 cachedFactor_(other.cachedFactor_),\n-61 gradientContribution_(other.gradientContribution_) {}\n-62\n-_\b6_\b5 _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be& other) {\n-66 Base::operator=(other);\n-67 cachedFactor_ = other.cachedFactor_;\n-68 gradientContribution_ = other.gradientContribution_;\n-69 return *this;\n-70 }\n-71\n-73 void setEliminationResult(\n-74 const FactorGraphType::EliminationResult& eliminationResult);\n-75\n-_\b7_\b7 Base::FactorType::shared_ptr& _\bc_\ba_\bc_\bh_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br() { return cachedFactor_; }\n-78\n-_\b8_\b0 const Vector& _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bC_\bo_\bn_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn() const { return gradientContribution_; }\n-81\n-83 void addGradientAtZero(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* g) const;\n-84\n-85 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n-86\n-88 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-89 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n-90\n-91 void _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bW_\bi_\bl_\bd_\bf_\bi_\br_\be(const _\bK_\be_\by_\bS_\be_\bt& replaced, double threshold,\n-92 _\bK_\be_\by_\bS_\be_\bt* changed, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta,\n-93 size_t* count) const;\n-94\n-95 bool optimizeWildfireNode(const _\bK_\be_\by_\bS_\be_\bt& replaced, double threshold,\n-96 _\bK_\be_\by_\bS_\be_\bt* changed, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta,\n-97 size_t* count) const;\n+17#pragma once\n+18\n+19#include \n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+_\b3_\b2struct GTSAM_EXPORT _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl {\n+33\n+_\b3_\b4 struct GTSAM_EXPORT _\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt {\n+35 double delta;\n+36 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs dx_d;\n+37 double f_error;\n+38 };\n+39\n+_\b5_\b3 enum _\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be {\n+54 SEARCH_EACH_ITERATION,\n+55 SEARCH_REDUCE_ONLY,\n+56 ONE_STEP_PER_ITERATION\n+57 };\n+58\n+94 template\n+95 static IterationResult Iterate(\n+96 double delta, TrustRegionAdaptationMode mode, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& dx_u,\n+const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& dx_n,\n+97 const M& Rd, const F& f, const VALUES& x0, const double f_error, const bool\n+verbose=false);\n 98\n-103 void nnz_internal(size_t* result) const;\n-104 size_t calculate_nnz() const;\n-105\n-121 void findAll(const _\bK_\be_\by_\bS_\be_\bt& markedMask, _\bK_\be_\by_\bS_\be_\bt* keys) const;\n+121 static _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs ComputeDoglegPoint(double delta, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs&\n+dx_u, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& dx_n, const bool verbose=false);\n 122\n-123 private:\n-128 bool isDirty(const _\bK_\be_\by_\bS_\be_\bt& replaced, const _\bK_\be_\by_\bS_\be_\bt& changed) const;\n-129\n-134 void fastBackSubstitute(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta) const;\n+132 static _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs ComputeBlend(double delta, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x_u,\n+const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x_n, const bool verbose=false);\n+133};\n+134\n 135\n-136 /*\n-137 * Check whether the values changed above a threshold, or always true if the\n-138 * clique was replaced.\n-139 */\n-140 bool valuesChanged(const _\bK_\be_\by_\bS_\be_\bt& replaced, const Vector& originalValues,\n-141 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta, double threshold) const;\n-142\n-144 void markFrontalsAsChanged(_\bK_\be_\by_\bS_\be_\bt* changed) const;\n+136/* *************************************************************************\n+*/\n+137template\n+_\b1_\b3_\b8typename _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\be(\n+139 double delta, _\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be mode, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& dx_u,\n+const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& dx_n,\n+140 const M& Rd, const F& f, const VALUES& x0, const double f_error, const bool\n+verbose)\n+141{\n+142 gttic(M_error);\n+143 const double M_error = Rd.error(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bZ_\be_\br_\bo(dx_u));\n+144 gttoc(M_error);\n 145\n-147 void restoreFromOriginals(const Vector& originalValues,\n-148 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta) const;\n-149\n-_\b1_\b5_\b1 friend class boost::serialization::access;\n-152 template \n-153 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-154 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n-155 ar& BOOST_SERIALIZATION_NVP(cachedFactor_);\n-156 ar& BOOST_SERIALIZATION_NVP(gradientContribution_);\n-157 }\n-158}; // \\struct ISAM2Clique\n-159\n-171size_t _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bW_\bi_\bl_\bd_\bf_\bi_\br_\be(const ISAM2Clique::shared_ptr& root, double\n-threshold,\n-172 const KeySet& replaced, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta);\n+146 // Result to return\n+147 _\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt result;\n+148\n+149 bool stay = true;\n+150 enum { NONE, INCREASED_DELTA, DECREASED_DELTA } lastAction = NONE; // Used\n+to prevent alternating between increasing and decreasing in one iteration\n+151 while(stay) {\n+152 gttic(Dog_leg_point);\n+153 // Compute dog leg point\n+154 result.dx_d = _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bg_\bl_\be_\bg_\bP_\bo_\bi_\bn_\bt(delta, dx_u, dx_n, verbose);\n+155 gttoc(Dog_leg_point);\n+156\n+157 if(verbose) std::cout << \"delta = \" << delta << \", dx_d_norm = \" <<\n+result.dx_d.norm() << std::endl;\n+158\n+159 gttic(retract);\n+160 // Compute expmapped solution\n+161 const VALUES x_d(x0.retract(result.dx_d));\n+162 gttoc(retract);\n+163\n+164 gttic(decrease_in_f);\n+165 // Compute decrease in f\n+166 result.f_error = f.error(x_d);\n+167 gttoc(decrease_in_f);\n+168\n+169 gttic(new_M_error);\n+170 // Compute decrease in M\n+171 const double new_M_error = Rd.error(result.dx_d);\n+172 gttoc(new_M_error);\n 173\n-174size_t optimizeWildfireNonRecursive(const ISAM2Clique::shared_ptr& root,\n-175 double threshold, const KeySet& replaced,\n-176 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta);\n-177\n-178} // namespace gtsam\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n-Base class for cliques of a BayesTree.\n-_\bK_\be_\by_\b._\bh\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-Conditional Gaussian Base class.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-Chordal Bayes Net, the result of eliminating a factor graph.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n+174 if(verbose) std::cout << std::setprecision(15) << \"f error: \" << f_error <<\n+\" -> \" << result.f_error << std::endl;\n+175 if(verbose) std::cout << std::setprecision(15) << \"M error: \" << M_error <<\n+\" -> \" << new_M_error << std::endl;\n+176\n+177 gttic(adjust_delta);\n+178 // Compute gain ratio. Here we take advantage of the invariant that the\n+179 // Bayes' net error at zero is equal to the nonlinear error\n+180 const double rho = std::abs(f_error - result.f_error) < 1e-15 || std::abs\n+(M_error - new_M_error) < 1e-15 ?\n+181 0.5 :\n+182 (f_error - result.f_error) / (M_error - new_M_error);\n+183\n+184 if(verbose) std::cout << std::setprecision(15) << \"rho = \" << rho << std::\n+endl;\n+185\n+186 if(rho >= 0.75) {\n+187 // M agrees very well with f, so try to increase lambda\n+188 const double dx_d_norm = result.dx_d.norm();\n+189 const double newDelta = std::max(delta, 3.0 * dx_d_norm); // Compute new\n+delta\n+190\n+191 if(mode == ONE_STEP_PER_ITERATION || mode == SEARCH_REDUCE_ONLY)\n+192 stay = false; // If not searching, just return with the new delta\n+193 else if(mode == SEARCH_EACH_ITERATION) {\n+194 if(std::abs(newDelta - delta) < 1e-15 || lastAction == DECREASED_DELTA)\n+195 stay = false; // Searching, but Newton's solution is within trust region so\n+keep the same trust region\n+196 else {\n+197 stay = true; // Searching and increased delta, so try again to increase\n+delta\n+198 lastAction = INCREASED_DELTA;\n+199 }\n+200 } else {\n+201 assert(false); }\n+202\n+203 delta = newDelta; // Update delta from new delta\n+204\n+205 } else if(0.75 > rho && rho >= 0.25) {\n+206 // M agrees so-so with f, keep the same delta\n+207 stay = false;\n+208\n+209 } else if(0.25 > rho && rho >= 0.0) {\n+210 // M does not agree well with f, decrease delta until it does\n+211 double newDelta;\n+212 bool hitMinimumDelta;\n+213 if(delta > 1e-5) {\n+214 newDelta = 0.5 * delta;\n+215 hitMinimumDelta = false;\n+216 } else {\n+217 newDelta = delta;\n+218 hitMinimumDelta = true;\n+219 }\n+220 if(mode == ONE_STEP_PER_ITERATION || /* mode == SEARCH_EACH_ITERATION && */\n+lastAction == INCREASED_DELTA || hitMinimumDelta)\n+221 stay = false; // If not searching, just return with the new smaller delta\n+222 else if(mode == SEARCH_EACH_ITERATION || mode == SEARCH_REDUCE_ONLY) {\n+223 stay = true;\n+224 lastAction = DECREASED_DELTA;\n+225 } else {\n+226 assert(false); }\n+227\n+228 delta = newDelta; // Update delta from new delta\n+229\n+230 } else {\n+231 // f actually increased, so keep decreasing delta until f does not\n+decrease.\n+232 // NOTE: NaN and Inf solutions also will fall into this case, so that we\n+233 // decrease delta if the solution becomes undetermined.\n+234 assert(0.0 > rho);\n+235 if(delta > 1e-5) {\n+236 delta *= 0.5;\n+237 stay = true;\n+238 lastAction = DECREASED_DELTA;\n+239 } else {\n+240 if(verbose) std::cout << \"Warning: Dog leg stopping because cannot decrease\n+error with minimum delta\" << std::endl;\n+241 result.dx_d.setZero(); // Set delta to zero - don't allow error to increase\n+242 result.f_error = f_error;\n+243 stay = false;\n+244 }\n+245 }\n+246 gttoc(adjust_delta);\n+247 }\n+248\n+249 // dx_d and f_error have already been filled in during the loop\n+250 result.delta = delta;\n+251 return result;\n+252}\n+253\n+254}\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bW_\bi_\bl_\bd_\bf_\bi_\br_\be\n-size_t optimizeWildfire(const ISAM2Clique::shared_ptr &root, double threshold,\n-const KeySet &keys, VectorValues *delta)\n-Optimize the BayesTree, starting from the root.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.cpp:226\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-This is the base class for BayesTree cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-A GaussianConditional functions as the node in a Bayes network.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:46\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n VectorValues represents a collection of vector-valued variables associated each\n with a unique integer...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n-Specialized Clique structure for ISAM2, incorporating caching and gradient\n-contribution TODO: more do...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bC_\bo_\bn_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n-const Vector & gradientContribution() const\n-Access the gradient contribution.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n-ISAM2Clique(const ISAM2Clique &other)\n-Copy constructor, does not copy solution pointers as these are invalid in\n-different trees.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-ISAM2Clique & operator=(const ISAM2Clique &other)\n-Assignment operator, does not copy solution pointers as these are invalid in\n-different trees.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bc_\ba_\bc_\bh_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-Base::FactorType::shared_ptr & cachedFactor()\n-Access the cached factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n-ISAM2Clique()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:53\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bZ_\be_\br_\bo\n+static VectorValues Zero(const VectorValues &other)\n+Create a VectorValues with the same structure as other, but filled with zeros.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.cpp:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl\n+This class contains the implementation of the Dogleg algorithm.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bT_\br_\bu_\bs_\bt_\bR_\be_\bg_\bi_\bo_\bn_\bA_\bd_\ba_\bp_\bt_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n+TrustRegionAdaptationMode\n+Specifies how the trust region is adapted at each Dogleg iteration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\be\n+static IterationResult Iterate(double delta, TrustRegionAdaptationMode mode,\n+const VectorValues &dx_u, const VectorValues &dx_n, const M &Rd, const F &f,\n+const VALUES &x0, const double f_error, const bool verbose=false)\n+Compute the update point for one iteration of the Dogleg algorithm, given an\n+initial trust region rad...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bD_\bo_\bg_\bl_\be_\bg_\bP_\bo_\bi_\bn_\bt\n+static VectorValues ComputeDoglegPoint(double delta, const VectorValues &dx_u,\n+const VectorValues &dx_n, const bool verbose=false)\n+Compute the dogleg point given a trust region radius .\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.cpp:25\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DoglegOptimizerImpl.h:34\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b._\bh\n+ * _\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01163.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01163.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizer.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,47 +94,47 @@\n \n \n \n \n \n
\n \n-
ISAM2.h File Reference
\n+Namespaces |\n+Functions
\n+
NonlinearOptimizer.cpp File Reference
\n \n
\n \n-

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \n+

Convergence functions not dependent on graph types. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::ISAM2
 Implementation of the full ISAM2 algorithm for incremental nonlinear optimization. More...
 
struct  gtsam::traits< ISAM2 >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+bool gtsam::checkConvergence (double relativeErrorTreshold, double absoluteErrorTreshold, double errorThreshold, double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity=NonlinearOptimizerParams::SILENT)
 Check whether the relative error decrease is less than relativeErrorTreshold, the absolute error decrease is less than absoluteErrorTreshold, or the error itself is less than errorThreshold.
 
\n+GTSAM_EXPORT bool gtsam::checkConvergence (const NonlinearOptimizerParams &params, double currentError, double newError)
 
\n

Detailed Description

\n-

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.

\n-
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n+

Convergence functions not dependent on graph types.

\n+
Author
Frank Dellaert
\n+
Date
Jul 17, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ISAM2.h File Reference\n-Incremental update functionality (ISAM2) for BayesTree, with fluid\n-relinearization. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2\n-\u00a0 Implementation of the full _\bI_\bS_\bA_\bM_\b2 algorithm for incremental nonlinear\n- optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bI_\bS_\bA_\bM_\b2_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+NonlinearOptimizer.cpp File Reference\n+Convergence functions not dependent on graph types. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bch\bhe\bec\bck\bkC\bCo\bon\bnv\bve\ber\brg\bge\ben\bnc\bce\be (double relativeErrorTreshold,\n+ double absoluteErrorTreshold, double errorThreshold, double\n+ currentError, double newError, _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:\n+ _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by verbosity=NonlinearOptimizerParams::SILENT)\n+ Check whether the relative error decrease is less than\n+\u00a0 relativeErrorTreshold, the absolute error decrease is less\n+ than absoluteErrorTreshold, o\bor\br the error itself is less than\n+ errorThreshold.\n+\u00a0\n+GTSAM_EXPORT bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bch\bhe\bec\bck\bkC\bCo\bon\bnv\bve\ber\brg\bge\ben\bnc\bce\be (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+ ¶ms, double currentError, double newError)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Incremental update functionality (ISAM2) for BayesTree, with fluid\n-relinearization.\n+Convergence functions not dependent on graph types.\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert\n+ Frank Dellaert\n+ Date\n+ Jul 17, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\b._\bh\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01163.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01163.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01163 = [\n- [\"gtsam::traits< ISAM2 >\", \"a04400.html\", null]\n+ [\"checkConvergence\", \"a01163.html#a3382482454c164c6f5817dcbe6f932b3\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01166.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01166.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearISAM.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,41 +94,32 @@\n \n \n \n \n \n
\n \n-
NonlinearISAM.h File Reference
\n+
Marginals.cpp File Reference
\n
\n
\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::NonlinearISAM
 Wrapper class to manage ISAM in a nonlinear context. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Jan 19, 2010
\n-
Author
Viorela Ila and Richard Roberts
\n+
Author
Richard Roberts
\n+
Date
May 14, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-NonlinearISAM.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n-\u00a0 Wrapper class to manage _\bI_\bS_\bA_\bM in a nonlinear context. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+Marginals.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Jan 19, 2010\n Author\n- Viorela Ila and Richard Roberts\n+ Richard Roberts\n+ Date\n+ May 14, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b._\bh\n+ * _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01172.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01172.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtOptimizer.h File Reference\n \n \n \n \n \n \n \n@@ -94,35 +94,49 @@\n \n \n \n \n \n
\n \n-
ISAM2Params.cpp File Reference
\n+
LevenbergMarquardtOptimizer.h File Reference
\n
\n
\n \n-

Parameters for iSAM 2. \n+

A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::LevenbergMarquardtOptimizer
 This class performs Levenberg-Marquardt nonlinear optimization. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Parameters for iSAM 2.

\n-
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n+

A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.

\n+
Author
Richard Roberts
\n+
\n+Frank Dellaert
\n+
\n+Luca Carlone
\n+
Date
Feb 26, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ISAM2Params.cpp File Reference\n-Parameters for iSAM 2. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+LevenbergMarquardtOptimizer.h File Reference\n+A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n+_\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+\u00a0 This class performs Levenberg-Marquardt nonlinear optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Parameters for iSAM 2.\n+A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert\n+ Richard Roberts\n+ Frank Dellaert\n+ Luca Carlone\n+ Date\n+ Feb 26, 2012\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bc_\bp_\bp\n+ * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01184.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01184.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/BinaryMeasurement.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.h File Reference\n \n \n \n \n \n \n \n@@ -95,43 +95,51 @@\n \n \n \n \n
\n \n-
BinaryMeasurement.h File Reference
\n+Namespaces |\n+Typedefs
\n+
MFAS.h File Reference
\n \n
\n \n-

Binary measurement represents a measurement between two keys in a graph. A binary measurement is similar to a BetweenFactor, except that it does not contain an error function. It is a measurement (along with a noise model) from one key to another. Note that the direction is important. A measurement from key1 to key2 is not the same as the same measurement from key2 to key1. \n+

MFAS class to solve Minimum Feedback Arc Set graph problem. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n+\n+\n \n

\n Classes

class  gtsam::BinaryMeasurement< T >
class  gtsam::MFAS
 The MFAS class to solve a Minimum feedback arc set (MFAS) problem. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Typedefs

\n+typedef std::map< std::pair< Key, Key >, double > gtsam::KeyPairDoubleMap
 
\n

Detailed Description

\n-

Binary measurement represents a measurement between two keys in a graph. A binary measurement is similar to a BetweenFactor, except that it does not contain an error function. It is a measurement (along with a noise model) from one key to another. Note that the direction is important. A measurement from key1 to key2 is not the same as the same measurement from key2 to key1.

\n+

MFAS class to solve Minimum Feedback Arc Set graph problem.

\n
Author
Akshay Krishnan
\n-
Date
July 2020
\n+
Date
September 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BinaryMeasurement.h File Reference\n-Binary measurement represents a measurement between two keys in a graph. A\n-binary measurement is similar to a BetweenFactor, except that it does not\n-contain an error function. It is a measurement (along with a noise model) from\n-one key to another. Note that the direction is important. A measurement from\n-key1 to key2 is not the same as the same measurement from key2 to key1. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+MFAS.h File Reference\n+MFAS class to solve Minimum Feedback Arc Set graph problem. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\b _\bT_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bF_\bA_\bS\n+\u00a0 The _\bM_\bF_\bA_\bS class to solve a Minimum feedback arc set (_\bM_\bF_\bA_\bS) problem.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef std::map< std::pair< _\bK_\be_\by, _\bK_\be_\by >, double >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byP\bPa\bai\bir\brD\bDo\bou\bub\bbl\ble\beM\bMa\bap\bp\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Binary measurement represents a measurement between two keys in a graph. A\n-binary measurement is similar to a BetweenFactor, except that it does not\n-contain an error function. It is a measurement (along with a noise model) from\n-one key to another. Note that the direction is important. A measurement from\n-key1 to key2 is not the same as the same measurement from key2 to key1.\n+MFAS class to solve Minimum Feedback Arc Set graph problem.\n Author\n Akshay Krishnan\n Date\n- July 2020\n+ September 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n+ * _\bM_\bF_\bA_\bS_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01184_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01184_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/BinaryMeasurement.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
BinaryMeasurement.h
\n+
MFAS.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,95 +114,66 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
12#pragma once
\n
13
\n-
26#include <gtsam/base/Testable.h>
\n-\n-
28#include <gtsam/inference/Key.h>
\n-\n+
21#include <gtsam/geometry/Unit3.h>
\n+
22#include <gtsam/inference/Key.h>
\n+\n+
24
\n+
25#include <memory>
\n+
26#include <unordered_map>
\n+
27#include <vector>
\n+
28
\n+
29namespace gtsam {
\n
30
\n-
31#include <iostream>
\n-
32#include <vector>
\n-
33
\n-
34namespace gtsam {
\n-
35
\n-
\n-
36template <class T> class BinaryMeasurement : public Factor {
\n-
37 // Check that T type is testable
\n-
38 BOOST_CONCEPT_ASSERT((IsTestable<T>));
\n-
39
\n-
40public:
\n-
41 // shorthand for a smart pointer to a measurement
\n-
42 using shared_ptr = typename boost::shared_ptr<BinaryMeasurement>;
\n-
43
\n-
44private:
\n-
45 T measured_;
\n-
46 SharedNoiseModel noiseModel_;
\n-
47
\n-
48 public:
\n-
49 BinaryMeasurement(Key key1, Key key2, const T &measured,
\n-
50 const SharedNoiseModel &model = nullptr)
\n-
51 : Factor(std::vector<Key>({key1, key2})),
\n-
52 measured_(measured),
\n-
53 noiseModel_(model) {}
\n-
54
\n-
56 virtual ~BinaryMeasurement() {}
\n+
\n+
51class GTSAM_EXPORT MFAS {
\n+
52 public:
\n+
53 // used to represent edges between two nodes in the graph. When used in
\n+
54 // translation averaging for global SfM
\n+
55 using KeyPair = std::pair<Key, Key>;
\n+
56 using TranslationEdges = std::vector<BinaryMeasurement<Unit3>>;
\n
57
\n-
60
\n-
61 Key key1() const { return keys_[0]; }
\n-
62 Key key2() const { return keys_[1]; }
\n-
63 const T &measured() const { return measured_; }
\n-
64 const SharedNoiseModel &noiseModel() const { return noiseModel_; }
\n-
65
\n-
69
\n-
\n-
70 void print(const std::string &s, const KeyFormatter &keyFormatter =
\n-
71 DefaultKeyFormatter) const override {
\n-
72 std::cout << s << "BinaryMeasurement(" << keyFormatter(this->key1()) << ","
\n-
73 << keyFormatter(this->key2()) << ")\\n";
\n-
74 traits<T>::Print(measured_, " measured: ");
\n-
75 this->noiseModel_->print(" noise model: ");
\n-
76 }
\n-
\n-
77
\n-
78 bool equals(const BinaryMeasurement &expected, double tol = 1e-9) const {
\n-
79 const BinaryMeasurement<T> *e =
\n-
80 dynamic_cast<const BinaryMeasurement<T> *>(&expected);
\n-
81 return e != nullptr && Factor::equals(*e) &&
\n-
82 traits<T>::Equals(this->measured_, e->measured_, tol) &&
\n-
83 noiseModel_->equals(*expected.noiseModel());
\n-
84 }
\n-
86};
\n-
\n-
87} // namespace gtsam
\n-
Concept check for values that can be used in unit tests.
\n-
The base class for all factors.
\n-\n-\n+
58 private:
\n+
59 // edges with a direction such that all weights are positive
\n+
60 // i.e, edges that originally had negative weights are flipped
\n+
61 std::map<KeyPair, double> edgeWeights_;
\n+
62
\n+
63 public:
\n+
\n+
69 MFAS(const std::map<KeyPair, double> &edgeWeights)
\n+
70 : edgeWeights_(edgeWeights) {}
\n+
\n+
71
\n+
80 MFAS(const TranslationEdges &relativeTranslations,
\n+
81 const Unit3 &projectionDirection);
\n+
82
\n+
87 KeyVector computeOrdering() const;
\n+
88
\n+
96 std::map<KeyPair, double> computeOutlierWeights() const;
\n+
97};
\n+
\n+
98
\n+
99typedef std::map<std::pair<Key, Key>, double> KeyPairDoubleMap;
\n+
100
\n+
101} // namespace gtsam
\n+\n+
Binary measurement represents a measurement between two keys in a graph. A binary measurement is simi...
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
Definition Factor.h:68
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
Factor()
Default constructor for I/O.
Definition Factor.h:91
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n-
Definition BinaryMeasurement.h:36
\n-
void print(const std::string &s, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition BinaryMeasurement.h:70
\n-
virtual ~BinaryMeasurement()
Destructor.
Definition BinaryMeasurement.h:56
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
The MFAS class to solve a Minimum feedback arc set (MFAS) problem.
Definition MFAS.h:51
\n+
MFAS(const std::map< KeyPair, double > &edgeWeights)
Construct from the weighted directed edges between the nodes.
Definition MFAS.h:69
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BinaryMeasurement.h\n+MFAS.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,123 +16,69 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 12#pragma once\n 13\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n+21#include \n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh>\n+24\n+25#include \n+26#include \n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n 30\n-31#include \n-32#include \n-33\n-34namespace _\bg_\bt_\bs_\ba_\bm {\n-35\n-_\b3_\b6template class _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt : public _\bF_\ba_\bc_\bt_\bo_\br {\n-37 // Check that T type is testable\n-38 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bT_\b>));\n-39\n-40public:\n-41 // shorthand for a smart pointer to a measurement\n-42 using shared_ptr = typename boost::shared_ptr;\n-43\n-44private:\n-45 T measured_;\n-46 _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl noiseModel_;\n-47\n-48 public:\n-49 _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt(_\bK_\be_\by key1, _\bK_\be_\by key2, const T &measured,\n-50 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model = nullptr)\n-51 : _\bF_\ba_\bc_\bt_\bo_\br(std::vector({key1, key2})),\n-52 measured_(measured),\n-53 noiseModel_(model) {}\n-54\n-_\b5_\b6 virtual _\b~_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt() {}\n+_\b5_\b1class GTSAM_EXPORT _\bM_\bF_\bA_\bS {\n+52 public:\n+53 // used to represent edges between two nodes in the graph. When used in\n+54 // translation averaging for global SfM\n+55 using KeyPair = std::pair;\n+56 using TranslationEdges = std::vector>;\n 57\n-60\n-61 _\bK_\be_\by key1() const { return _\bk_\be_\by_\bs_\b_[0]; }\n-62 _\bK_\be_\by key2() const { return _\bk_\be_\by_\bs_\b_[1]; }\n-63 const T &measured() const { return measured_; }\n-64 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &noiseModel() const { return noiseModel_; }\n-65\n-69\n-_\b7_\b0 void _\bp_\br_\bi_\bn_\bt(const std::string &s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter =\n-71 DefaultKeyFormatter) const override {\n-72 std::cout << s << \"BinaryMeasurement(\" << keyFormatter(this->key1()) << \",\"\n-73 << keyFormatter(this->key2()) << \")\\n\";\n-74 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(measured_, \" measured: \");\n-75 this->noiseModel_->print(\" noise model: \");\n-76 }\n-77\n-78 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt &expected, double tol = 1e-9) const {\n-79 const _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bT_\b> *e =\n-80 dynamic_cast *>(&expected);\n-81 return e != nullptr && _\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e) &&\n-82 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_, e->measured_, tol) &&\n-83 noiseModel_->equals(*expected.noiseModel());\n-84 }\n-86};\n-87} // namespace gtsam\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-The base class for all factors.\n+58 private:\n+59 // edges with a direction such that all weights are positive\n+60 // i.e, edges that originally had negative weights are flipped\n+61 std::map edgeWeights_;\n+62\n+63 public:\n+_\b6_\b9 _\bM_\bF_\bA_\bS(const std::map &edgeWeights)\n+70 : edgeWeights_(edgeWeights) {}\n+71\n+80 _\bM_\bF_\bA_\bS(const TranslationEdges &relativeTranslations,\n+81 const _\bU_\bn_\bi_\bt_\b3 &projectionDirection);\n+82\n+87 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br computeOrdering() const;\n+88\n+96 std::map computeOutlierWeights() const;\n+97};\n+98\n+99typedef std::map, double> KeyPairDoubleMap;\n+100\n+101} // namespace gtsam\n _\bK_\be_\by_\b._\bh\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n+Binary measurement represents a measurement between two keys in a graph. A\n+binary measurement is simi...\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A testable concept check that should be placed in applicable unit tests and in\n-generic algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-Factor()\n-Default constructor for I/O.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryMeasurement.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryMeasurement.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b:_\b:_\b~_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-virtual ~BinaryMeasurement()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryMeasurement.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bF_\bA_\bS\n+The MFAS class to solve a Minimum feedback arc set (MFAS) problem.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MFAS.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bF_\bA_\bS_\b:_\b:_\bM_\bF_\bA_\bS\n+MFAS(const std::map< KeyPair, double > &edgeWeights)\n+Construct from the weighted directed edges between the nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MFAS.h:69\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n+ * _\bM_\bF_\bA_\bS_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01187.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01187.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanAveraging.h File Reference\n \n \n \n \n \n \n \n@@ -97,52 +97,59 @@\n \n \n
\n \n-
ShonanFactor.h File Reference
\n+
ShonanAveraging.h File Reference
\n
\n
\n \n-

Main factor type in Shonan averaging, on SO(n) pairs. \n+

Shonan Averaging algorithm. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::ShonanFactor< d >
 ShonanFactor is a BetweenFactor that moves in SO(p), but will land on the SO(d) sub-manifold of SO(p) at the global minimum. More...
struct  gtsam::ShonanAveragingParameters< d >
 Parameters governing optimization etc. More...
 
class  gtsam::ShonanAveraging< d >
 Class that implements Shonan Averaging from our ECCV'20 paper. More...
 
class  gtsam::ShonanAveraging2
 
class  gtsam::ShonanAveraging3
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n+\n+\n+\n+\n

\n Typedefs

\n-using gtsam::ShonanFactor2 = ShonanFactor< 2 >
 
\n-using gtsam::ShonanFactor3 = ShonanFactor< 3 >
 
\n+using gtsam::ShonanAveragingParameters2 = ShonanAveragingParameters< 2 >
 
\n+using gtsam::ShonanAveragingParameters3 = ShonanAveragingParameters< 3 >
 
\n

Detailed Description

\n-

Main factor type in Shonan averaging, on SO(n) pairs.

\n-
Date
March 2019
\n-
Author
Frank Dellaert
\n+

Shonan Averaging algorithm.

\n+
Date
March 2019 - August 2020
\n+
Author
Frank Dellaert, David Rosen, and Jing Wu
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,39 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-ShonanFactor.h File Reference\n-Main factor type in Shonan averaging, on SO(n) pairs. _\bM_\bo_\br_\be_\b._\b._\b.\n+ShonanAveraging.h File Reference\n+Shonan Averaging algorithm. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bd_\b _\b>\n-\u00a0 _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br is a _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br that moves in SO(p), but will land on\n- the SO(d) sub-manifold of SO(p) at the global minimum. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b<_\b _\bd_\b _\b>\n+\u00a0 Parameters governing optimization etc. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b<_\b _\bd_\b _\b>\n+\u00a0 Class that implements Shonan Averaging from our ECCV'20 paper. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bho\bon\bna\ban\bnF\bFa\bac\bct\bto\bor\br2\b2 = _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br< 2 >\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bho\bon\bna\ban\bnA\bAv\bve\ber\bra\bag\bgi\bin\bng\bgP\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs2\b2 = _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs< 2 >\n \u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bho\bon\bna\ban\bnF\bFa\bac\bct\bto\bor\br3\b3 = _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br< 3 >\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bho\bon\bna\ban\bnA\bAv\bve\ber\bra\bag\bgi\bin\bng\bgP\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs3\b3 = _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs< 3 >\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Main factor type in Shonan averaging, on SO(n) pairs.\n+Shonan Averaging algorithm.\n Date\n- March 2019\n+ March 2019 - August 2020\n Author\n- Frank Dellaert\n+ Frank Dellaert, David Rosen, and Jing Wu\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01187.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01187.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a01187 = [\n- [\"gtsam::ShonanFactor< d >\", \"a04744.html\", \"a04744\"]\n+ [\"gtsam::ShonanAveragingParameters< d >\", \"a04728.html\", \"a04728\"],\n+ [\"gtsam::ShonanAveraging< d >\", \"a04732.html\", \"a04732\"],\n+ [\"gtsam::ShonanAveraging2\", \"a04736.html\", null],\n+ [\"gtsam::ShonanAveraging3\", \"a04740.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01187_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01187_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanAveraging.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
ShonanFactor.h
\n+
ShonanAveraging.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,83 +114,374 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/geometry/Rot2.h>
\n-
22#include <gtsam/geometry/Rot3.h>
\n-
23#include <gtsam/geometry/SOn.h>
\n-\n-
25
\n-
26#include <type_traits>
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
35template <size_t d>
\n-
\n-
36class GTSAM_EXPORT ShonanFactor : public NoiseModelFactorN<SOn, SOn> {
\n-
37 Matrix M_;
\n-
38 size_t p_, pp_;
\n-
39 boost::shared_ptr<Matrix> G_;
\n-
40
\n-
41 // Select Rot2 or Rot3 interface based template parameter d
\n-
42 using Rot = typename std::conditional<d == 2, Rot2, Rot3>::type;
\n+
21#include <gtsam/base/Matrix.h>
\n+
22#include <gtsam/base/Vector.h>
\n+
23#include <gtsam/dllexport.h>
\n+
24#include <gtsam/geometry/Rot2.h>
\n+
25#include <gtsam/geometry/Rot3.h>
\n+\n+\n+\n+\n+\n+
31#include <gtsam/slam/dataset.h>
\n+
32
\n+
33#include <Eigen/Sparse>
\n+
34#include <map>
\n+
35#include <string>
\n+
36#include <type_traits>
\n+
37#include <utility>
\n+
38#include <vector>
\n+
39
\n+
40namespace gtsam {
\n+
41class NonlinearFactorGraph;
\n+
42class LevenbergMarquardtOptimizer;
\n
43
\n-
44public:
\n-
47
\n-
51 ShonanFactor(Key j1, Key j2, const Rot &R12, size_t p,
\n-
52 const SharedNoiseModel &model = nullptr,
\n-
53 const boost::shared_ptr<Matrix> &G = nullptr);
\n-
54
\n-
58
\n-
60 void
\n-
61 print(const std::string &s,
\n-
62 const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override;
\n-
63
\n-
65 bool equals(const NonlinearFactor &expected,
\n-
66 double tol = 1e-9) const override;
\n-
67
\n+
45template <size_t d>
\n+
\n+
46struct GTSAM_EXPORT ShonanAveragingParameters {
\n+
47 // Select Rot2 or Rot3 interface based template parameter d
\n+
48 using Rot = typename std::conditional<d == 2, Rot2, Rot3>::type;
\n+
49 using Anchor = std::pair<size_t, Rot>;
\n+
50
\n+
51 // Parameters themselves:
\n+\n+\n+
54 Anchor anchor;
\n+
55 double alpha;
\n+
56 double beta;
\n+
57 double gamma;
\n+\n+\n+
62
\n+\n+
64 LevenbergMarquardtParams::CeresDefaults(),
\n+
65 const std::string &method = "JACOBI",
\n+
66 double optimalityThreshold = -1e-4,
\n+
67 double alpha = 0.0, double beta = 1.0,
\n+
68 double gamma = 0.0);
\n+
69
\n+
70 LevenbergMarquardtParams getLMParams() const { return lm; }
\n
71
\n-
74 Vector
\n-
75 evaluateError(const SOn &Q1, const SOn &Q2,
\n-
76 boost::optional<Matrix &> H1 = boost::none,
\n-
77 boost::optional<Matrix &> H2 = boost::none) const override;
\n-
79
\n-
80private:
\n-
82 void fillJacobians(const Matrix &M1, const Matrix &M2,
\n-
83 boost::optional<Matrix &> H1,
\n-
84 boost::optional<Matrix &> H2) const;
\n-
85};
\n-
\n+
72 void setOptimalityThreshold(double value) { optimalityThreshold = value; }
\n+
73 double getOptimalityThreshold() const { return optimalityThreshold; }
\n+
74
\n+
75 void setAnchor(size_t index, const Rot &value) { anchor = {index, value}; }
\n+
76 std::pair<size_t, Rot> getAnchor() const { return anchor; }
\n+
77
\n+
78 void setAnchorWeight(double value) { alpha = value; }
\n+
79 double getAnchorWeight() const { return alpha; }
\n+
80
\n+
81 void setKarcherWeight(double value) { beta = value; }
\n+
82 double getKarcherWeight() const { return beta; }
\n+
83
\n+
84 void setGaugesWeight(double value) { gamma = value; }
\n+
85 double getGaugesWeight() const { return gamma; }
\n
86
\n-
87// Explicit instantiation for d=2 and d=3 in .cpp file:
\n-
88using ShonanFactor2 = ShonanFactor<2>;
\n-
89using ShonanFactor3 = ShonanFactor<3>;
\n-
90
\n-
91} // namespace gtsam
\n-
3D rotation represented as a rotation matrix or quaternion
\n-
N*N matrix representation of SO(N).
\n-
2D rotation
\n-
Non-linear factor base classes.
\n+
87 void setUseHuber(bool value) { useHuber = value; }
\n+
88 bool getUseHuber() const { return useHuber; }
\n+
89
\n+
90 void setCertifyOptimality(bool value) { certifyOptimality = value; }
\n+
91 bool getCertifyOptimality() const { return certifyOptimality; }
\n+
92
\n+
\n+
94 void print(const std::string &s = "") const {
\n+
95 std::cout << (s.empty() ? s : s + " ");
\n+
96 std::cout << " ShonanAveragingParameters: " << std::endl;
\n+
97 std::cout << " alpha: " << alpha << std::endl;
\n+
98 std::cout << " beta: " << beta << std::endl;
\n+
99 std::cout << " gamma: " << gamma << std::endl;
\n+
100 std::cout << " useHuber: " << useHuber << std::endl;
\n+
101 }
\n+
\n+
102};
\n+
\n+
103
\n+
104using ShonanAveragingParameters2 = ShonanAveragingParameters<2>;
\n+
105using ShonanAveragingParameters3 = ShonanAveragingParameters<3>;
\n+
106
\n+
122template <size_t d>
\n+
\n+
123class GTSAM_EXPORT ShonanAveraging {
\n+
124 public:
\n+
125 using Sparse = Eigen::SparseMatrix<double>;
\n+
126
\n+
127 // Define the Parameters type and use its typedef of the rotation type:
\n+\n+
129 using Rot = typename Parameters::Rot;
\n+
130
\n+
131 // We store SO(d) BetweenFactors to get noise model
\n+
132 using Measurements = std::vector<BinaryMeasurement<Rot>>;
\n+
133
\n+
134 private:
\n+
135 Parameters parameters_;
\n+
136 Measurements measurements_;
\n+
137 size_t nrUnknowns_;
\n+
138 Sparse D_; // Sparse (diagonal) degree matrix
\n+
139 Sparse Q_; // Sparse measurement matrix, == \\tilde{R} in Eriksson18cvpr
\n+
140 Sparse L_; // connection Laplacian L = D - Q, needed for optimality check
\n+
141
\n+
146 Sparse buildQ() const;
\n+
147
\n+
149 Sparse buildD() const;
\n+
150
\n+
151 public:
\n+
154
\n+
157 ShonanAveraging(const Measurements &measurements,
\n+
158 const Parameters &parameters = Parameters());
\n+
159
\n+
163
\n+
165 size_t nrUnknowns() const { return nrUnknowns_; }
\n+
166
\n+
168 size_t numberMeasurements() const { return measurements_.size(); }
\n+
169
\n+
\n+
171 const BinaryMeasurement<Rot> &measurement(size_t k) const {
\n+
172 return measurements_[k];
\n+
173 }
\n+
\n+
174
\n+
\n+
181 Measurements makeNoiseModelRobust(const Measurements &measurements,
\n+
182 double k = 1.345) const {
\n+
183 Measurements robustMeasurements;
\n+
184 for (auto &measurement : measurements) {
\n+
185 auto model = measurement.noiseModel();
\n+
186 const auto &robust =
\n+
187 boost::dynamic_pointer_cast<noiseModel::Robust>(model);
\n+
188
\n+
189 SharedNoiseModel robust_model;
\n+
190 // Check if the noise model is already robust
\n+
191 if (robust) {
\n+
192 robust_model = model;
\n+
193 } else {
\n+
194 // make robust
\n+
195 robust_model = noiseModel::Robust::Create(
\n+
196 noiseModel::mEstimator::Huber::Create(k), model);
\n+
197 }
\n+
198 BinaryMeasurement<Rot> meas(measurement.key1(), measurement.key2(),
\n+
199 measurement.measured(), robust_model);
\n+
200 robustMeasurements.push_back(meas);
\n+
201 }
\n+
202 return robustMeasurements;
\n+
203 }
\n+
\n+
204
\n+
206 const Rot &measured(size_t k) const { return measurements_[k].measured(); }
\n+
207
\n+
209 const KeyVector &keys(size_t k) const { return measurements_[k].keys(); }
\n+
210
\n+
214
\n+
215 Sparse D() const { return D_; }
\n+
\n+
216 Matrix denseD() const { return Matrix(D_); }
\n+
\n+
217 Sparse Q() const { return Q_; }
\n+
\n+
218 Matrix denseQ() const { return Matrix(Q_); }
\n+
\n+
219 Sparse L() const { return L_; }
\n+
\n+
220 Matrix denseL() const { return Matrix(L_); }
\n+
221
\n+
223 Sparse computeLambda(const Matrix &S) const;
\n+
224
\n+
\n+
226 Matrix computeLambda_(const Values &values) const {
\n+
227 return Matrix(computeLambda(values));
\n+
228 }
\n+
\n+
229
\n+
\n+
231 Matrix computeLambda_(const Matrix &S) const {
\n+
232 return Matrix(computeLambda(S));
\n+
233 }
\n+
\n+
234
\n+
236 Sparse computeA(const Values &values) const;
\n+
237
\n+
239 Sparse computeA(const Matrix &S) const;
\n+
240
\n+
\n+
242 Matrix computeA_(const Values &values) const {
\n+
243 return Matrix(computeA(values));
\n+
244 }
\n+
\n+
245
\n+
247 static Matrix StiefelElementMatrix(const Values &values);
\n+
248
\n+
253 double computeMinEigenValue(const Values &values,
\n+
254 Vector *minEigenVector = nullptr) const;
\n+
255
\n+
260 double computeMinEigenValueAP(const Values &values,
\n+
261 Vector *minEigenVector = nullptr) const;
\n+
262
\n+
264 Values roundSolutionS(const Matrix &S) const;
\n+
265
\n+
267 static VectorValues TangentVectorValues(size_t p, const Vector &v);
\n+
268
\n+
270 Matrix riemannianGradient(size_t p, const Values &values) const;
\n+
271
\n+
276 static Values LiftwithDescent(size_t p, const Values &values,
\n+
277 const Vector &minEigenVector);
\n+
278
\n+
286 Values initializeWithDescent(
\n+
287 size_t p, const Values &values, const Vector &minEigenVector,
\n+
288 double minEigenValue, double gradienTolerance = 1e-2,
\n+
289 double preconditionedGradNormTolerance = 1e-4) const;
\n+
293
\n+
298 NonlinearFactorGraph buildGraphAt(size_t p) const;
\n+
299
\n+
305 Values initializeRandomlyAt(size_t p, std::mt19937 &rng) const;
\n+
306
\n+
308 Values initializeRandomlyAt(size_t p) const;
\n+
309
\n+
314 double costAt(size_t p, const Values &values) const;
\n+
315
\n+
321 Sparse computeLambda(const Values &values) const;
\n+
322
\n+
328 std::pair<double, Vector> computeMinEigenVector(const Values &values) const;
\n+
329
\n+
334 bool checkOptimality(const Values &values) const;
\n+
335
\n+
342 boost::shared_ptr<LevenbergMarquardtOptimizer> createOptimizerAt(
\n+
343 size_t p, const Values &initial) const;
\n+
344
\n+
351 Values tryOptimizingAt(size_t p, const Values &initial) const;
\n+
352
\n+
357 Values projectFrom(size_t p, const Values &values) const;
\n+
358
\n+
363 Values roundSolution(const Values &values) const;
\n+
364
\n+
366 template <class T>
\n+
\n+
367 static Values LiftTo(size_t p, const Values &values) {
\n+
368 Values result;
\n+
369 for (const auto it : values.extract<T>()) {
\n+
370 result.insert(it.first, SOn::Lift(p, it.second.matrix()));
\n+
371 }
\n+
372 return result;
\n+
373 }
\n+
\n+
374
\n+
378
\n+
383 double cost(const Values &values) const;
\n+
384
\n+
392 Values initializeRandomly(std::mt19937 &rng) const;
\n+
393
\n+
395 Values initializeRandomly() const;
\n+
396
\n+
404 std::pair<Values, double> run(const Values &initialEstimate, size_t pMin = d,
\n+
405 size_t pMax = 10) const;
\n+
407
\n+
417 template <typename T>
\n+
\n+
418 inline std::vector<BinaryMeasurement<T>> maybeRobust(
\n+
419 const std::vector<BinaryMeasurement<T>> &measurements,
\n+
420 bool useRobustModel = false) const {
\n+
421 return useRobustModel ? makeNoiseModelRobust(measurements) : measurements;
\n+
422 }
\n+
\n+
423};
\n+
424
\n+
425// Subclasses for d=2 and d=3 that explicitly instantiate, as well as provide a
\n+
426// convenience interface with file access.
\n+
427
\n+
\n+
428class GTSAM_EXPORT ShonanAveraging2 : public ShonanAveraging<2> {
\n+
429 public:
\n+
430 ShonanAveraging2(const Measurements &measurements,
\n+
431 const Parameters &parameters = Parameters());
\n+
432 explicit ShonanAveraging2(std::string g2oFile,
\n+
433 const Parameters &parameters = Parameters());
\n+
434 ShonanAveraging2(const BetweenFactorPose2s &factors,
\n+
435 const Parameters &parameters = Parameters());
\n+
436};
\n+
\n+
437
\n+
\n+
438class GTSAM_EXPORT ShonanAveraging3 : public ShonanAveraging<3> {
\n+
439 public:
\n+
440 ShonanAveraging3(const Measurements &measurements,
\n+
441 const Parameters &parameters = Parameters());
\n+
442 explicit ShonanAveraging3(std::string g2oFile,
\n+
443 const Parameters &parameters = Parameters());
\n+
444
\n+
445 // TODO(frank): Deprecate after we land pybind wrapper
\n+
446 ShonanAveraging3(const BetweenFactorPose3s &factors,
\n+
447 const Parameters &parameters = Parameters());
\n+
448};
\n+
\n+
449} // namespace gtsam
\n+
\n+
\n+
\n+
\n+
\n+
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
typedef and functions to augment Eigen's VectorXd
\n+
3D rotation represented as a rotation matrix or quaternion
\n+
2D rotation
\n+
Power method for fast eigenvalue and eigenvector computation.
\n+
accelerated power method for fast eigenvalue and eigenvector computation
\n+
Factor Graph Values.
\n+
Parameters for Levenberg-Marquardt trust-region scheme.
\n+
Binary measurement represents a measurement between two keys in a graph. A binary measurement is simi...
\n+
utility functions for loading datasets
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
Manifold of special orthogonal rotation matrices SO<N>.
Definition SOn.h:52
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
ShonanFactor is a BetweenFactor that moves in SO(p), but will land on the SO(d) sub-manifold of SO(p)...
Definition ShonanFactor.h:36
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
Parameters for Levenberg-Marquardt optimization.
Definition LevenbergMarquardtParams.h:35
\n+
Definition NonlinearFactorGraph.h:55
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
std::map< Key, ValueType > extract(const std::function< bool(Key)> &filterFcn=&_truePredicate< Key >) const
Extract a subset of values of the given type ValueType.
Definition Values-inl.h:94
\n+
Definition BinaryMeasurement.h:36
\n+
Parameters governing optimization etc.
Definition ShonanAveraging.h:46
\n+
double alpha
weight of anchor-based prior (default 0)
Definition ShonanAveraging.h:55
\n+
void print(const std::string &s="") const
Print the parameters and flags used for rotation averaging.
Definition ShonanAveraging.h:94
\n+
LevenbergMarquardtParams lm
LM parameters.
Definition ShonanAveraging.h:52
\n+
bool useHuber
if enabled, the Huber loss is used (default false)
Definition ShonanAveraging.h:59
\n+
double optimalityThreshold
threshold used in checkOptimality
Definition ShonanAveraging.h:53
\n+
double beta
weight of Karcher-based prior (default 1)
Definition ShonanAveraging.h:56
\n+
double gamma
weight of gauge-fixing factors (default 0)
Definition ShonanAveraging.h:57
\n+
Anchor anchor
pose to use as anchor if not Karcher
Definition ShonanAveraging.h:54
\n+
bool certifyOptimality
if enabled solution optimality is certified (default true)
Definition ShonanAveraging.h:61
\n+
Class that implements Shonan Averaging from our ECCV'20 paper.
Definition ShonanAveraging.h:123
\n+
Sparse D() const
Sparse version of D.
Definition ShonanAveraging.h:215
\n+
const BinaryMeasurement< Rot > & measurement(size_t k) const
k^th binary measurement
Definition ShonanAveraging.h:171
\n+
Measurements makeNoiseModelRobust(const Measurements &measurements, double k=1.345) const
Update factors to use robust Huber loss.
Definition ShonanAveraging.h:181
\n+
Values roundSolutionS(const Matrix &S) const
Project pxdN Stiefel manifold matrix S to Rot3^N.
\n+
std::vector< BinaryMeasurement< T > > maybeRobust(const std::vector< BinaryMeasurement< T > > &measurements, bool useRobustModel=false) const
Helper function to convert measurements to robust noise model if flag is set.
Definition ShonanAveraging.h:418
\n+
Sparse L() const
Sparse version of L.
Definition ShonanAveraging.h:219
\n+
const Rot & measured(size_t k) const
k^th measurement, as a Rot.
Definition ShonanAveraging.h:206
\n+
Sparse Q() const
Sparse version of Q.
Definition ShonanAveraging.h:217
\n+
Matrix denseD() const
Dense version of D.
Definition ShonanAveraging.h:216
\n+
size_t nrUnknowns() const
Return number of unknowns.
Definition ShonanAveraging.h:165
\n+
Values projectFrom(size_t p, const Values &values) const
Project from SO(p) to Rot2 or Rot3 Values should be of type SO(p)
\n+
size_t numberMeasurements() const
Return number of measurements.
Definition ShonanAveraging.h:168
\n+
Matrix denseL() const
Dense version of L.
Definition ShonanAveraging.h:220
\n+
Matrix computeLambda_(const Matrix &S) const
Dense versions of computeLambda for wrapper/testing.
Definition ShonanAveraging.h:231
\n+
Matrix denseQ() const
Dense version of Q.
Definition ShonanAveraging.h:218
\n+
const KeyVector & keys(size_t k) const
Keys for k^th measurement, as a vector of Key values.
Definition ShonanAveraging.h:209
\n+
Matrix computeLambda_(const Values &values) const
Dense versions of computeLambda for wrapper/testing.
Definition ShonanAveraging.h:226
\n+
Matrix computeA_(const Values &values) const
Dense version of computeA for wrapper/testing.
Definition ShonanAveraging.h:242
\n+
static Values LiftTo(size_t p, const Values &values)
Lift Values of type T to SO(p)
Definition ShonanAveraging.h:367
\n+
Definition ShonanAveraging.h:428
\n+
Definition ShonanAveraging.h:438
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ShonanFactor.h\n+ShonanAveraging.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,104 +16,458 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\bn_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-25\n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-35template \n-_\b3_\b6class GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-37 Matrix M_;\n-38 size_t p_, pp_;\n-39 boost::shared_ptr G_;\n-40\n-41 // Select Rot2 or Rot3 interface based template parameter d\n-42 using Rot = typename std::conditional::type;\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+23#include \n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh>\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh>\n+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh>\n+31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh>\n+32\n+33#include \n+34#include \n+35#include \n+36#include \n+37#include \n+38#include \n+39\n+40namespace _\bg_\bt_\bs_\ba_\bm {\n+41class NonlinearFactorGraph;\n+42class LevenbergMarquardtOptimizer;\n 43\n-44public:\n-47\n-51 _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, const Rot &R12, size_t p,\n-52 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model = nullptr,\n-53 const boost::shared_ptr &G = nullptr);\n-54\n-58\n-60 void\n-61 _\bp_\br_\bi_\bn_\bt(const std::string &s,\n-62 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter) const override;\n-63\n-65 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br &expected,\n-66 double tol = 1e-9) const override;\n-67\n+45template \n+_\b4_\b6struct GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n+47 // Select Rot2 or Rot3 interface based template parameter d\n+48 using Rot = typename std::conditional::type;\n+49 using Anchor = std::pair;\n+50\n+51 // Parameters themselves:\n+_\b5_\b2 _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs _\bl_\bm;\n+_\b5_\b3 double _\bo_\bp_\bt_\bi_\bm_\ba_\bl_\bi_\bt_\by_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n+_\b5_\b4 Anchor _\ba_\bn_\bc_\bh_\bo_\br;\n+_\b5_\b5 double _\ba_\bl_\bp_\bh_\ba;\n+_\b5_\b6 double _\bb_\be_\bt_\ba;\n+_\b5_\b7 double _\bg_\ba_\bm_\bm_\ba;\n+_\b5_\b9 bool _\bu_\bs_\be_\bH_\bu_\bb_\be_\br;\n+_\b6_\b1 bool _\bc_\be_\br_\bt_\bi_\bf_\by_\bO_\bp_\bt_\bi_\bm_\ba_\bl_\bi_\bt_\by;\n+62\n+63 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs(const _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs &lm =\n+64 LevenbergMarquardtParams::CeresDefaults(),\n+65 const std::string &method = \"JACOBI\",\n+66 double optimalityThreshold = -1e-4,\n+67 double alpha = 0.0, double beta = 1.0,\n+68 double gamma = 0.0);\n+69\n+70 _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs getLMParams() const { return lm; }\n 71\n-74 Vector\n-75 evaluateError(const _\bS_\bO_\bn &Q1, const _\bS_\bO_\bn &Q2,\n-76 boost::optional H1 = boost::none,\n-77 boost::optional H2 = boost::none) const override;\n-79\n-80private:\n-82 void fillJacobians(const Matrix &M1, const Matrix &M2,\n-83 boost::optional H1,\n-84 boost::optional H2) const;\n-85};\n+72 void setOptimalityThreshold(double value) { optimalityThreshold = value; }\n+73 double getOptimalityThreshold() const { return optimalityThreshold; }\n+74\n+75 void setAnchor(size_t index, const Rot &value) { anchor = {index, value}; }\n+76 std::pair getAnchor() const { return anchor; }\n+77\n+78 void setAnchorWeight(double value) { alpha = value; }\n+79 double getAnchorWeight() const { return alpha; }\n+80\n+81 void setKarcherWeight(double value) { beta = value; }\n+82 double getKarcherWeight() const { return beta; }\n+83\n+84 void setGaugesWeight(double value) { gamma = value; }\n+85 double getGaugesWeight() const { return gamma; }\n 86\n-87// Explicit instantiation for d=2 and d=3 in .cpp file:\n-88using ShonanFactor2 = _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b2_\b>;\n-89using ShonanFactor3 = _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b3_\b>;\n-90\n-91} // namespace gtsam\n+87 void setUseHuber(bool value) { useHuber = value; }\n+88 bool getUseHuber() const { return useHuber; }\n+89\n+90 void setCertifyOptimality(bool value) { certifyOptimality = value; }\n+91 bool getCertifyOptimality() const { return certifyOptimality; }\n+92\n+_\b9_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string &s = \"\") const {\n+95 std::cout << (s.empty() ? s : s + \" \");\n+96 std::cout << \" ShonanAveragingParameters: \" << std::endl;\n+97 std::cout << \" alpha: \" << alpha << std::endl;\n+98 std::cout << \" beta: \" << beta << std::endl;\n+99 std::cout << \" gamma: \" << gamma << std::endl;\n+100 std::cout << \" useHuber: \" << useHuber << std::endl;\n+101 }\n+102};\n+103\n+104using ShonanAveragingParameters2 = ShonanAveragingParameters<2>;\n+105using ShonanAveragingParameters3 = ShonanAveragingParameters<3>;\n+106\n+122template \n+_\b1_\b2_\b3class GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg {\n+124 public:\n+125 using Sparse = Eigen::SparseMatrix;\n+126\n+127 // Define the Parameters type and use its typedef of the rotation type:\n+128 using _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs = _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b<_\bd_\b>;\n+129 using Rot = typename Parameters::Rot;\n+130\n+131 // We store SO(d) BetweenFactors to get noise model\n+132 using Measurements = std::vector>;\n+133\n+134 private:\n+135 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs parameters_;\n+136 Measurements measurements_;\n+137 size_t nrUnknowns_;\n+138 Sparse D_; // Sparse (diagonal) degree matrix\n+139 Sparse Q_; // Sparse measurement matrix, == \\tilde{R} in Eriksson18cvpr\n+140 Sparse L_; // connection Laplacian L = D - Q, needed for optimality check\n+141\n+146 Sparse buildQ() const;\n+147\n+149 Sparse buildD() const;\n+150\n+151 public:\n+154\n+157 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg(const Measurements &measurements,\n+158 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters = _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs());\n+159\n+163\n+_\b1_\b6_\b5 size_t _\bn_\br_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs() const { return nrUnknowns_; }\n+166\n+_\b1_\b6_\b8 size_t _\bn_\bu_\bm_\bb_\be_\br_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const { return measurements_.size(); }\n+169\n+_\b1_\b7_\b1 const _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bR_\bo_\bt_\b> &_\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt(size_t k) const {\n+172 return measurements_[k];\n+173 }\n+174\n+_\b1_\b8_\b1 Measurements _\bm_\ba_\bk_\be_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bR_\bo_\bb_\bu_\bs_\bt(const Measurements &measurements,\n+182 double k = 1.345) const {\n+183 Measurements robustMeasurements;\n+184 for (auto &measurement : measurements) {\n+185 auto model = measurement.noiseModel();\n+186 const auto &robust =\n+187 boost::dynamic_pointer_cast(model);\n+188\n+189 _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl robust_model;\n+190 // Check if the noise model is already robust\n+191 if (robust) {\n+192 robust_model = model;\n+193 } else {\n+194 // make robust\n+195 robust_model = noiseModel::Robust::Create(\n+196 noiseModel::mEstimator::Huber::Create(k), model);\n+197 }\n+198 _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bR_\bo_\bt_\b> meas(measurement.key1(), measurement.key2(),\n+199 measurement.measured(), robust_model);\n+200 robustMeasurements.push_back(meas);\n+201 }\n+202 return robustMeasurements;\n+203 }\n+204\n+_\b2_\b0_\b6 const Rot &_\bm_\be_\ba_\bs_\bu_\br_\be_\bd(size_t k) const { return measurements_[k].measured(); }\n+207\n+_\b2_\b0_\b9 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &_\bk_\be_\by_\bs(size_t k) const { return measurements_[k].keys(); }\n+210\n+214\n+_\b2_\b1_\b5 Sparse _\bD() const { return D_; }\n+_\b2_\b1_\b6 Matrix _\bd_\be_\bn_\bs_\be_\bD() const { return Matrix(D_); }\n+_\b2_\b1_\b7 Sparse _\bQ() const { return Q_; }\n+_\b2_\b1_\b8 Matrix _\bd_\be_\bn_\bs_\be_\bQ() const { return Matrix(Q_); }\n+_\b2_\b1_\b9 Sparse _\bL() const { return L_; }\n+_\b2_\b2_\b0 Matrix _\bd_\be_\bn_\bs_\be_\bL() const { return Matrix(L_); }\n+221\n+223 Sparse computeLambda(const Matrix &S) const;\n+224\n+_\b2_\b2_\b6 Matrix _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bL_\ba_\bm_\bb_\bd_\ba_\b_(const _\bV_\ba_\bl_\bu_\be_\bs &values) const {\n+227 return Matrix(computeLambda(values));\n+228 }\n+229\n+_\b2_\b3_\b1 Matrix _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bL_\ba_\bm_\bb_\bd_\ba_\b_(const Matrix &S) const {\n+232 return Matrix(computeLambda(S));\n+233 }\n+234\n+236 Sparse computeA(const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+237\n+239 Sparse computeA(const Matrix &S) const;\n+240\n+_\b2_\b4_\b2 Matrix _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bA_\b_(const _\bV_\ba_\bl_\bu_\be_\bs &values) const {\n+243 return Matrix(computeA(values));\n+244 }\n+245\n+247 static Matrix StiefelElementMatrix(const _\bV_\ba_\bl_\bu_\be_\bs &values);\n+248\n+253 double computeMinEigenValue(const _\bV_\ba_\bl_\bu_\be_\bs &values,\n+254 Vector *minEigenVector = nullptr) const;\n+255\n+260 double computeMinEigenValueAP(const _\bV_\ba_\bl_\bu_\be_\bs &values,\n+261 Vector *minEigenVector = nullptr) const;\n+262\n+_\b2_\b6_\b4 _\bV_\ba_\bl_\bu_\be_\bs _\br_\bo_\bu_\bn_\bd_\bS_\bo_\bl_\bu_\bt_\bi_\bo_\bn_\bS(const Matrix &S) const;\n+265\n+267 static _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs TangentVectorValues(size_t p, const Vector &v);\n+268\n+270 Matrix riemannianGradient(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+271\n+276 static _\bV_\ba_\bl_\bu_\be_\bs LiftwithDescent(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values,\n+277 const Vector &minEigenVector);\n+278\n+286 _\bV_\ba_\bl_\bu_\be_\bs initializeWithDescent(\n+287 size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values, const Vector &minEigenVector,\n+288 double minEigenValue, double gradienTolerance = 1e-2,\n+289 double preconditionedGradNormTolerance = 1e-4) const;\n+293\n+298 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh buildGraphAt(size_t p) const;\n+299\n+305 _\bV_\ba_\bl_\bu_\be_\bs initializeRandomlyAt(size_t p, std::mt19937 &rng) const;\n+306\n+308 _\bV_\ba_\bl_\bu_\be_\bs initializeRandomlyAt(size_t p) const;\n+309\n+314 double costAt(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+315\n+321 Sparse computeLambda(const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+322\n+328 std::pair computeMinEigenVector(const _\bV_\ba_\bl_\bu_\be_\bs &values)\n+const;\n+329\n+334 bool checkOptimality(const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+335\n+342 boost::shared_ptr createOptimizerAt(\n+343 size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &initial) const;\n+344\n+351 _\bV_\ba_\bl_\bu_\be_\bs tryOptimizingAt(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &initial) const;\n+352\n+_\b3_\b5_\b7 _\bV_\ba_\bl_\bu_\be_\bs _\bp_\br_\bo_\bj_\be_\bc_\bt_\bF_\br_\bo_\bm(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+358\n+363 _\bV_\ba_\bl_\bu_\be_\bs roundSolution(const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+364\n+366 template \n+_\b3_\b6_\b7 static _\bV_\ba_\bl_\bu_\be_\bs _\bL_\bi_\bf_\bt_\bT_\bo(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values) {\n+368 _\bV_\ba_\bl_\bu_\be_\bs result;\n+369 for (const auto it : values._\be_\bx_\bt_\br_\ba_\bc_\bt()) {\n+370 result.insert(it.first, SOn::Lift(p, it.second.matrix()));\n+371 }\n+372 return result;\n+373 }\n+374\n+378\n+383 double cost(const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n+384\n+392 _\bV_\ba_\bl_\bu_\be_\bs initializeRandomly(std::mt19937 &rng) const;\n+393\n+395 _\bV_\ba_\bl_\bu_\be_\bs initializeRandomly() const;\n+396\n+404 std::pair run(const _\bV_\ba_\bl_\bu_\be_\bs &initialEstimate, size_t pMin =\n+d,\n+405 size_t pMax = 10) const;\n+407\n+417 template \n+_\b4_\b1_\b8 inline std::vector> _\bm_\ba_\by_\bb_\be_\bR_\bo_\bb_\bu_\bs_\bt(\n+419 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bT_\b>> &measurements,\n+420 bool useRobustModel = false) const {\n+421 return useRobustModel ? makeNoiseModelRobust(measurements) : measurements;\n+422 }\n+423};\n+424\n+425// Subclasses for d=2 and d=3 that explicitly instantiate, as well as\n+provide a\n+426// convenience interface with file access.\n+427\n+_\b4_\b2_\b8class GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2 : public _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg<2> {\n+429 public:\n+430 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2(const Measurements &measurements,\n+431 const Parameters ¶meters = Parameters());\n+432 explicit _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2(std::string g2oFile,\n+433 const Parameters ¶meters = Parameters());\n+434 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2(const BetweenFactorPose2s &factors,\n+435 const Parameters ¶meters = Parameters());\n+436};\n+437\n+_\b4_\b3_\b8class GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3 : public _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg<3> {\n+439 public:\n+440 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3(const Measurements &measurements,\n+441 const Parameters ¶meters = Parameters());\n+442 explicit _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3(std::string g2oFile,\n+443 const Parameters ¶meters = Parameters());\n+444\n+445 // TODO(frank): Deprecate after we land pybind wrapper\n+446 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3(const BetweenFactorPose3s &factors,\n+447 const Parameters ¶meters = Parameters());\n+448};\n+449} // namespace gtsam\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n _\bR_\bo_\bt_\b3_\b._\bh\n 3D rotation represented as a rotation matrix or quaternion\n-_\bS_\bO_\bn_\b._\bh\n-N*N matrix representation of SO(N).\n _\bR_\bo_\bt_\b2_\b._\bh\n 2D rotation\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n+Power method for fast eigenvalue and eigenvector computation.\n+_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n+accelerated power method for fast eigenvalue and eigenvector computation\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n+_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+Parameters for Levenberg-Marquardt trust-region scheme.\n+_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n+Binary measurement represents a measurement between two keys in a graph. A\n+binary measurement is simi...\n+_\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh\n+utility functions for loading datasets\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n Aliases.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO\n-Manifold of special orthogonal rotation matrices SO.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-ShonanFactor is a BetweenFactor that moves in SO(p), but will land on the SO(d)\n-sub-manifold of SO(p)...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanFactor.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for Levenberg-Marquardt optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bt_\br_\ba_\bc_\bt\n+std::map< Key, ValueType > extract(const std::function< bool(Key)>\n+&filterFcn=&_truePredicate< Key >) const\n+Extract a subset of values of the given type ValueType.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryMeasurement.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+Parameters governing optimization etc.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\ba_\bl_\bp_\bh_\ba\n+double alpha\n+weight of anchor-based prior (default 0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\") const\n+Print the parameters and flags used for rotation averaging.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bl_\bm\n+LevenbergMarquardtParams lm\n+LM parameters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bu_\bs_\be_\bH_\bu_\bb_\be_\br\n+bool useHuber\n+if enabled, the Huber loss is used (default false)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\ba_\bl_\bi_\bt_\by_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+double optimalityThreshold\n+threshold used in checkOptimality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bb_\be_\bt_\ba\n+double beta\n+weight of Karcher-based prior (default 1)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bg_\ba_\bm_\bm_\ba\n+double gamma\n+weight of gauge-fixing factors (default 0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\ba_\bn_\bc_\bh_\bo_\br\n+Anchor anchor\n+pose to use as anchor if not Karcher\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bc_\be_\br_\bt_\bi_\bf_\by_\bO_\bp_\bt_\bi_\bm_\ba_\bl_\bi_\bt_\by\n+bool certifyOptimality\n+if enabled solution optimality is certified (default true)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg\n+Class that implements Shonan Averaging from our ECCV'20 paper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bD\n+Sparse D() const\n+Sparse version of D.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:215\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+const BinaryMeasurement< Rot > & measurement(size_t k) const\n+k^th binary measurement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:171\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bR_\bo_\bb_\bu_\bs_\bt\n+Measurements makeNoiseModelRobust(const Measurements &measurements, double\n+k=1.345) const\n+Update factors to use robust Huber loss.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:181\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\br_\bo_\bu_\bn_\bd_\bS_\bo_\bl_\bu_\bt_\bi_\bo_\bn_\bS\n+Values roundSolutionS(const Matrix &S) const\n+Project pxdN Stiefel manifold matrix S to Rot3^N.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bm_\ba_\by_\bb_\be_\bR_\bo_\bb_\bu_\bs_\bt\n+std::vector< BinaryMeasurement< T > > maybeRobust(const std::vector<\n+BinaryMeasurement< T > > &measurements, bool useRobustModel=false) const\n+Helper function to convert measurements to robust noise model if flag is set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:418\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bL\n+Sparse L() const\n+Sparse version of L.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const Rot & measured(size_t k) const\n+k^th measurement, as a Rot.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:206\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bQ\n+Sparse Q() const\n+Sparse version of Q.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:217\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bd_\be_\bn_\bs_\be_\bD\n+Matrix denseD() const\n+Dense version of D.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:216\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bn_\br_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs\n+size_t nrUnknowns() const\n+Return number of unknowns.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:165\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bF_\br_\bo_\bm\n+Values projectFrom(size_t p, const Values &values) const\n+Project from SO(p) to Rot2 or Rot3 Values should be of type SO(p)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bn_\bu_\bm_\bb_\be_\br_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+size_t numberMeasurements() const\n+Return number of measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:168\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bd_\be_\bn_\bs_\be_\bL\n+Matrix denseL() const\n+Dense version of L.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:220\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bL_\ba_\bm_\bb_\bd_\ba_\b_\n+Matrix computeLambda_(const Matrix &S) const\n+Dense versions of computeLambda for wrapper/testing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:231\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bd_\be_\bn_\bs_\be_\bQ\n+Matrix denseQ() const\n+Dense version of Q.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:218\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys(size_t k) const\n+Keys for k^th measurement, as a vector of Key values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:209\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bL_\ba_\bm_\bb_\bd_\ba_\b_\n+Matrix computeLambda_(const Values &values) const\n+Dense versions of computeLambda for wrapper/testing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:226\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bA_\b_\n+Matrix computeA_(const Values &values) const\n+Dense version of computeA for wrapper/testing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:242\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bL_\bi_\bf_\bt_\bT_\bo\n+static Values LiftTo(size_t p, const Values &values)\n+Lift Values of type T to SO(p)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:367\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:428\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:438\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01193.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01193.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/TranslationFactor.h File Reference\n \n \n \n \n \n \n \n@@ -95,51 +95,44 @@\n \n \n \n \n
\n \n-
MFAS.h File Reference
\n+Namespaces
\n+
TranslationFactor.h File Reference
\n \n
\n \n-

MFAS class to solve Minimum Feedback Arc Set graph problem. \n+

Binary factor for a relative translation direction measurement. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::MFAS
 The MFAS class to solve a Minimum feedback arc set (MFAS) problem. More...
class  gtsam::TranslationFactor
 Binary factor for a relative translation direction measurement w_aZb. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Typedefs

\n-typedef std::map< std::pair< Key, Key >, double > gtsam::KeyPairDoubleMap
 
\n

Detailed Description

\n-

MFAS class to solve Minimum Feedback Arc Set graph problem.

\n-
Author
Akshay Krishnan
\n-
Date
September 2020
\n+

Binary factor for a relative translation direction measurement.

\n+
Author
Frank Dellaert
\n+
Date
March 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-MFAS.h File Reference\n-MFAS class to solve Minimum Feedback Arc Set graph problem. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+TranslationFactor.h File Reference\n+Binary factor for a relative translation direction measurement. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bF_\bA_\bS\n-\u00a0 The _\bM_\bF_\bA_\bS class to solve a Minimum feedback arc set (_\bM_\bF_\bA_\bS) problem.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Binary factor for a relative translation direction measurement w_aZb.\n _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef std::map< std::pair< _\bK_\be_\by, _\bK_\be_\by >, double >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byP\bPa\bai\bir\brD\bDo\bou\bub\bbl\ble\beM\bMa\bap\bp\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-MFAS class to solve Minimum Feedback Arc Set graph problem.\n+Binary factor for a relative translation direction measurement.\n Author\n- Akshay Krishnan\n+ Frank Dellaert\n Date\n- September 2020\n+ March 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bM_\bF_\bA_\bS_\b._\bh\n+ * _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01193_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01193_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/TranslationFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
MFAS.h
\n+
TranslationFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,66 +114,75 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
12#pragma once
\n
13
\n-
21#include <gtsam/geometry/Unit3.h>
\n-
22#include <gtsam/inference/Key.h>
\n-\n-
24
\n-
25#include <memory>
\n-
26#include <unordered_map>
\n-
27#include <vector>
\n-
28
\n-
29namespace gtsam {
\n-
30
\n-
\n-
51class GTSAM_EXPORT MFAS {
\n-
52 public:
\n-
53 // used to represent edges between two nodes in the graph. When used in
\n-
54 // translation averaging for global SfM
\n-
55 using KeyPair = std::pair<Key, Key>;
\n-
56 using TranslationEdges = std::vector<BinaryMeasurement<Unit3>>;
\n-
57
\n-
58 private:
\n-
59 // edges with a direction such that all weights are positive
\n-
60 // i.e, edges that originally had negative weights are flipped
\n-
61 std::map<KeyPair, double> edgeWeights_;
\n-
62
\n-
63 public:
\n-
\n-
69 MFAS(const std::map<KeyPair, double> &edgeWeights)
\n-
70 : edgeWeights_(edgeWeights) {}
\n-
\n-
71
\n-
80 MFAS(const TranslationEdges &relativeTranslations,
\n-
81 const Unit3 &projectionDirection);
\n-
82
\n-
87 KeyVector computeOrdering() const;
\n-
88
\n-
96 std::map<KeyPair, double> computeOutlierWeights() const;
\n-
97};
\n-
\n-
98
\n-
99typedef std::map<std::pair<Key, Key>, double> KeyPairDoubleMap;
\n-
100
\n-
101} // namespace gtsam
\n-\n-
Binary measurement represents a measurement between two keys in a graph. A binary measurement is simi...
\n+\n+
22#include <gtsam/geometry/Unit3.h>
\n+\n+\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
\n+
42class TranslationFactor : public NoiseModelFactorN<Point3, Point3> {
\n+
43 private:
\n+\n+
45 Point3 measured_w_aZb_;
\n+
46
\n+
47 public:
\n+\n+
50
\n+
51 TranslationFactor(Key a, Key b, const Unit3& w_aZb,
\n+
52 const SharedNoiseModel& noiseModel)
\n+
53 : Base(noiseModel, a, b), measured_w_aZb_(w_aZb.point3()) {}
\n+
54
\n+
\n+\n+
67 const Point3& Ta, const Point3& Tb,
\n+
68 boost::optional<Matrix&> H1 = boost::none,
\n+
69 boost::optional<Matrix&> H2 = boost::none) const override {
\n+
70 const Point3 dir = Tb - Ta;
\n+
71 Matrix33 H_predicted_dir;
\n+
72 const Point3 predicted = normalize(dir, H1 || H2 ? &H_predicted_dir : nullptr);
\n+
73 if (H1) *H1 = -H_predicted_dir;
\n+
74 if (H2) *H2 = H_predicted_dir;
\n+
75 return predicted - measured_w_aZb_;
\n+
76 }
\n+
\n+
77
\n+
78 private:
\n+
79 friend class boost::serialization::access;
\n+
80 template <class ARCHIVE>
\n+
81 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
82 ar& boost::serialization::make_nvp(
\n+
83 "Base", boost::serialization::base_object<Base>(*this));
\n+
84 }
\n+
85}; // \\ TranslationFactor
\n+
\n+
86} // namespace gtsam
\n+
3D Point
\n+\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)
normalize, with optional Jacobian
Definition Point3.cpp:52
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n-
The MFAS class to solve a Minimum feedback arc set (MFAS) problem.
Definition MFAS.h:51
\n-
MFAS(const std::map< KeyPair, double > &edgeWeights)
Construct from the weighted directed edges between the nodes.
Definition MFAS.h:69
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Binary factor for a relative translation direction measurement w_aZb.
Definition TranslationFactor.h:42
\n+
TranslationFactor()
default constructor
Definition TranslationFactor.h:49
\n+
Vector evaluateError(const Point3 &Ta, const Point3 &Tb, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
Caclulate error: (norm(Tb - Ta) - measurement) where Tb and Ta are Point3 translations and measuremen...
Definition TranslationFactor.h:66
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MFAS.h\n+TranslationFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,69 +16,98 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 12#pragma once\n 13\n-21#include \n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh>\n-24\n-25#include \n-26#include \n-27#include \n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-_\b5_\b1class GTSAM_EXPORT _\bM_\bF_\bA_\bS {\n-52 public:\n-53 // used to represent edges between two nodes in the graph. When used in\n-54 // translation averaging for global SfM\n-55 using KeyPair = std::pair;\n-56 using TranslationEdges = std::vector>;\n-57\n-58 private:\n-59 // edges with a direction such that all weights are positive\n-60 // i.e, edges that originally had negative weights are flipped\n-61 std::map edgeWeights_;\n-62\n-63 public:\n-_\b6_\b9 _\bM_\bF_\bA_\bS(const std::map &edgeWeights)\n-70 : edgeWeights_(edgeWeights) {}\n-71\n-80 _\bM_\bF_\bA_\bS(const TranslationEdges &relativeTranslations,\n-81 const _\bU_\bn_\bi_\bt_\b3 &projectionDirection);\n-82\n-87 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br computeOrdering() const;\n-88\n-96 std::map computeOutlierWeights() const;\n-97};\n-98\n-99typedef std::map, double> KeyPairDoubleMap;\n-100\n-101} // namespace gtsam\n-_\bK_\be_\by_\b._\bh\n-_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n-Binary measurement represents a measurement between two keys in a graph. A\n-binary measurement is simi...\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n+22#include \n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+_\b4_\b2class _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+43 private:\n+44 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bi_\bn_\bt_\b3_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b> _\bB_\ba_\bs_\be;\n+45 _\bP_\bo_\bi_\bn_\bt_\b3 measured_w_aZb_;\n+46\n+47 public:\n+_\b4_\b9 _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+50\n+51 _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by a, _\bK_\be_\by b, const _\bU_\bn_\bi_\bt_\b3& w_aZb,\n+52 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& noiseModel)\n+53 : Base(noiseModel, a, b), measured_w_aZb_(w_aZb.point3()) {}\n+54\n+_\b6_\b6 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(\n+67 const _\bP_\bo_\bi_\bn_\bt_\b3& Ta, const _\bP_\bo_\bi_\bn_\bt_\b3& Tb,\n+68 boost::optional H1 = boost::none,\n+69 boost::optional H2 = boost::none) const override {\n+70 const _\bP_\bo_\bi_\bn_\bt_\b3 dir = Tb - Ta;\n+71 Matrix33 H_predicted_dir;\n+72 const _\bP_\bo_\bi_\bn_\bt_\b3 predicted = _\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be(dir, H1 || H2 ? &H_predicted_dir :\n+nullptr);\n+73 if (H1) *H1 = -H_predicted_dir;\n+74 if (H2) *H2 = H_predicted_dir;\n+75 return predicted - measured_w_aZb_;\n+76 }\n+77\n+78 private:\n+79 friend class boost::serialization::access;\n+80 template \n+81 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+82 ar& boost::serialization::make_nvp(\n+83 \"Base\", boost::serialization::base_object(*this));\n+84 }\n+85}; // \\ TranslationFactor\n+86} // namespace gtsam\n+_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+3D Point\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be\n+Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)\n+normalize, with optional Jacobian\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n Represents a 3D point on a unit sphere.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bF_\bA_\bS\n-The MFAS class to solve a Minimum feedback arc set (MFAS) problem.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MFAS.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bF_\bA_\bS_\b:_\b:_\bM_\bF_\bA_\bS\n-MFAS(const std::map< KeyPair, double > &edgeWeights)\n-Construct from the weighted directed edges between the nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MFAS.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+Binary factor for a relative translation direction measurement w_aZb.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+TranslationFactor()\n+default constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationFactor.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Point3 &Ta, const Point3 &Tb, boost::optional<\n+Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const\n+override\n+Caclulate error: (norm(Tb - Ta) - measurement) where Tb and Ta are Point3\n+translations and measuremen...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationFactor.h:66\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bM_\bF_\bA_\bS_\b._\bh\n+ * _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01196.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01196.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanAveraging.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/DsfTrackGenerator.h File Reference\n \n \n \n \n \n \n \n@@ -96,60 +96,107 @@\n \n \n \n
\n \n-
ShonanAveraging.h File Reference
\n+Typedefs |\n+Functions
\n+
DsfTrackGenerator.h File Reference
\n \n
\n \n-

Shonan Averaging algorithm. \n+

Identifies connected components in the keypoint matches graph. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n \n

\n Classes

struct  gtsam::ShonanAveragingParameters< d >
 Parameters governing optimization etc. More...
 
class  gtsam::ShonanAveraging< d >
 Class that implements Shonan Averaging from our ECCV'20 paper. More...
 
class  gtsam::ShonanAveraging2
 
class  gtsam::ShonanAveraging3
struct  gtsam::gtsfm::Keypoints
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+

\n Typedefs

\n-using gtsam::ShonanAveragingParameters2 = ShonanAveragingParameters< 2 >
 
\n-using gtsam::ShonanAveragingParameters3 = ShonanAveragingParameters< 3 >
 
\n+typedef Eigen::MatrixX2i gtsam::gtsfm::CorrespondenceIndices
 
\n+using gtsam::gtsfm::KeypointsVector = std::vector< Keypoints >
 
\n+using gtsam::gtsfm::MatchIndicesMap = std::map< IndexPair, CorrespondenceIndices >
 
\n+\n+\n+\n+\n

\n+Functions

std::vector< SfmTrack2dgtsam::gtsfm::tracksFromPairwiseMatches (const MatchIndicesMap &matches, const KeypointsVector &keypoints, bool verbose)
 Creates a list of tracks from 2d point correspondences.
 
\n

Detailed Description

\n-

Shonan Averaging algorithm.

\n-
Date
March 2019 - August 2020
\n-
Author
Frank Dellaert, David Rosen, and Jing Wu
\n-
\n+

Identifies connected components in the keypoint matches graph.

\n+
Date
July 2022
\n+
Author
John Lambert
\n+

Function Documentation

\n+\n+

◆ tracksFromPairwiseMatches()

\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+
std::vector< SfmTrack2d > gtsam::gtsfm::tracksFromPairwiseMatches (const MatchIndicesMap & matches,
const KeypointsVector & keypoints,
bool verbose 
)
\n+
\n+\n+

Creates a list of tracks from 2d point correspondences.

\n+

Creates a disjoint-set forest (DSF) and 2d tracks from pairwise matches. We create a singleton for union-find set elements from camera index of a detection and the index of that detection in that camera's keypoint list, i.e. (i,k).

\n+
Parameters
\n+ \n+ \n+ \n+
Mapfrom (i1,i2) image pair indices to (K,2) matrix, for K correspondence indices, from each image.
Length-Nlist of keypoints, for N images/cameras.
\n+
\n+
\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,57 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-ShonanAveraging.h File Reference\n-Shonan Averaging algorithm. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+DsfTrackGenerator.h File Reference\n+Identifies connected components in the keypoint matches graph. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b<_\b _\bd_\b _\b>\n-\u00a0 Parameters governing optimization etc. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b<_\b _\bd_\b _\b>\n-\u00a0 Class that implements Shonan Averaging from our ECCV'20 paper. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\bf_\bm_\b:_\b:_\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bho\bon\bna\ban\bnA\bAv\bve\ber\bra\bag\bgi\bin\bng\bgP\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs2\b2 = _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs< 2 >\n+typedef Eigen::MatrixX2i\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgt\bts\bsf\bfm\bm:\b::\b:C\bCo\bor\brr\bre\bes\bsp\bpo\bon\bnd\bde\ben\bnc\bce\beI\bIn\bnd\bdi\bic\bce\bes\bs\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgt\bts\bsf\bfm\bm:\b::\b:K\bKe\bey\byp\bpo\boi\bin\bnt\bts\bsV\bVe\bec\bct\bto\bor\br = std::vector<\n+ _\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs >\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgt\bts\bsf\bfm\bm:\b::\b:M\bMa\bat\btc\bch\bhI\bIn\bnd\bdi\bic\bce\bes\bsM\bMa\bap\bp = std::map< _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br,\n+ CorrespondenceIndices >\n \u00a0\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bho\bon\bna\ban\bnA\bAv\bve\ber\bra\bag\bgi\bin\bng\bgP\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs3\b3 = _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs< 3 >\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::vector< _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\bf_\bm_\b:_\b:_\bt_\br_\ba_\bc_\bk_\bs_\bF_\br_\bo_\bm_\bP_\ba_\bi_\br_\bw_\bi_\bs_\be_\bM_\ba_\bt_\bc_\bh_\be_\bs (const\n+ MatchIndicesMap &matches, const KeypointsVector\n+ &keypoints, bool verbose)\n+\u00a0 Creates a list of tracks from 2d point\n+ correspondences.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Shonan Averaging algorithm.\n+Identifies connected components in the keypoint matches graph.\n Date\n- March 2019 - August 2020\n+ July 2022\n Author\n- Frank Dellaert, David Rosen, and Jing Wu\n+ John Lambert\n+*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0t\btr\bra\bac\bck\bks\bsF\bFr\bro\bom\bmP\bPa\bai\bir\brw\bwi\bis\bse\beM\bMa\bat\btc\bch\bhe\bes\bs(\b()\b) *\b**\b**\b**\b**\b*\n+std::vector< SfmTrack2d > gtsam::gtsfm:: ( const MatchIndicesMap &\u00a0 m\bma\bat\btc\bch\bhe\bes\bs,\n+tracksFromPairwiseMatches\n+ const KeypointsVector &\u00a0 k\bke\bey\byp\bpo\boi\bin\bnt\bts\bs,\n+ bool\u00a0 v\bve\ber\brb\bbo\bos\bse\be\u00a0\n+ )\n+Creates a list of tracks from 2d point correspondences.\n+Creates a disjoint-set forest (DSF) and 2d tracks from pairwise matches. We\n+create a singleton for union-find set elements from camera index of a detection\n+and the index of that detection in that camera's keypoint list, i.e. (i,k).\n+ Parameters\n+ Map from (i1,i2) image pair indices to (K,2) matrix, for K\n+ correspondence indices, from each image.\n+ Length-N list of keypoints, for N images/cameras.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b._\bh\n+ * _\bD_\bs_\bf_\bT_\br_\ba_\bc_\bk_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01196.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01196.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,4 @@\n var a01196 = [\n- [\"gtsam::ShonanAveragingParameters< d >\", \"a04728.html\", \"a04728\"],\n- [\"gtsam::ShonanAveraging< d >\", \"a04732.html\", \"a04732\"],\n- [\"gtsam::ShonanAveraging2\", \"a04736.html\", null],\n- [\"gtsam::ShonanAveraging3\", \"a04740.html\", null]\n+ [\"gtsam::gtsfm::Keypoints\", \"a04692.html\", \"a04692\"],\n+ [\"tracksFromPairwiseMatches\", \"a01196.html#ac50218675ff25e1e9202d335ecfa6b3a\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01196_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01196_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanAveraging.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/DsfTrackGenerator.h Source File\n \n \n \n \n \n \n \n@@ -98,390 +98,87 @@\n
No Matches
\n \n \n \n \n \n
\n-
ShonanAveraging.h
\n+
DsfTrackGenerator.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n-
20
\n-
21#include <gtsam/base/Matrix.h>
\n-
22#include <gtsam/base/Vector.h>
\n-
23#include <gtsam/dllexport.h>
\n-
24#include <gtsam/geometry/Rot2.h>
\n-
25#include <gtsam/geometry/Rot3.h>
\n-\n-\n-\n-\n-\n-
31#include <gtsam/slam/dataset.h>
\n+
20#include <gtsam/base/DSFMap.h>
\n+
21#include <gtsam/sfm/SfmTrack.h>
\n+
22
\n+
23#include <boost/optional.hpp>
\n+
24
\n+
25#include <Eigen/Core>
\n+
26#include <map>
\n+
27#include <vector>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n+
31namespace gtsfm {
\n
32
\n-
33#include <Eigen/Sparse>
\n-
34#include <map>
\n-
35#include <string>
\n-
36#include <type_traits>
\n-
37#include <utility>
\n-
38#include <vector>
\n-
39
\n-
40namespace gtsam {
\n-
41class NonlinearFactorGraph;
\n-
42class LevenbergMarquardtOptimizer;
\n-
43
\n-
45template <size_t d>
\n-
\n-
46struct GTSAM_EXPORT ShonanAveragingParameters {
\n-
47 // Select Rot2 or Rot3 interface based template parameter d
\n-
48 using Rot = typename std::conditional<d == 2, Rot2, Rot3>::type;
\n-
49 using Anchor = std::pair<size_t, Rot>;
\n-
50
\n-
51 // Parameters themselves:
\n-\n-\n-
54 Anchor anchor;
\n-
55 double alpha;
\n-
56 double beta;
\n-
57 double gamma;
\n-\n-\n-
62
\n-\n-
64 LevenbergMarquardtParams::CeresDefaults(),
\n-
65 const std::string &method = "JACOBI",
\n-
66 double optimalityThreshold = -1e-4,
\n-
67 double alpha = 0.0, double beta = 1.0,
\n-
68 double gamma = 0.0);
\n-
69
\n-
70 LevenbergMarquardtParams getLMParams() const { return lm; }
\n-
71
\n-
72 void setOptimalityThreshold(double value) { optimalityThreshold = value; }
\n-
73 double getOptimalityThreshold() const { return optimalityThreshold; }
\n-
74
\n-
75 void setAnchor(size_t index, const Rot &value) { anchor = {index, value}; }
\n-
76 std::pair<size_t, Rot> getAnchor() const { return anchor; }
\n-
77
\n-
78 void setAnchorWeight(double value) { alpha = value; }
\n-
79 double getAnchorWeight() const { return alpha; }
\n-
80
\n-
81 void setKarcherWeight(double value) { beta = value; }
\n-
82 double getKarcherWeight() const { return beta; }
\n-
83
\n-
84 void setGaugesWeight(double value) { gamma = value; }
\n-
85 double getGaugesWeight() const { return gamma; }
\n-
86
\n-
87 void setUseHuber(bool value) { useHuber = value; }
\n-
88 bool getUseHuber() const { return useHuber; }
\n-
89
\n-
90 void setCertifyOptimality(bool value) { certifyOptimality = value; }
\n-
91 bool getCertifyOptimality() const { return certifyOptimality; }
\n-
92
\n-
\n-
94 void print(const std::string &s = "") const {
\n-
95 std::cout << (s.empty() ? s : s + " ");
\n-
96 std::cout << " ShonanAveragingParameters: " << std::endl;
\n-
97 std::cout << " alpha: " << alpha << std::endl;
\n-
98 std::cout << " beta: " << beta << std::endl;
\n-
99 std::cout << " gamma: " << gamma << std::endl;
\n-
100 std::cout << " useHuber: " << useHuber << std::endl;
\n-
101 }
\n-
\n-
102};
\n-
\n-
103
\n-
104using ShonanAveragingParameters2 = ShonanAveragingParameters<2>;
\n-
105using ShonanAveragingParameters3 = ShonanAveragingParameters<3>;
\n-
106
\n-
122template <size_t d>
\n-
\n-
123class GTSAM_EXPORT ShonanAveraging {
\n-
124 public:
\n-
125 using Sparse = Eigen::SparseMatrix<double>;
\n-
126
\n-
127 // Define the Parameters type and use its typedef of the rotation type:
\n-\n-
129 using Rot = typename Parameters::Rot;
\n-
130
\n-
131 // We store SO(d) BetweenFactors to get noise model
\n-
132 using Measurements = std::vector<BinaryMeasurement<Rot>>;
\n-
133
\n-
134 private:
\n-
135 Parameters parameters_;
\n-
136 Measurements measurements_;
\n-
137 size_t nrUnknowns_;
\n-
138 Sparse D_; // Sparse (diagonal) degree matrix
\n-
139 Sparse Q_; // Sparse measurement matrix, == \\tilde{R} in Eriksson18cvpr
\n-
140 Sparse L_; // connection Laplacian L = D - Q, needed for optimality check
\n-
141
\n-
146 Sparse buildQ() const;
\n-
147
\n-
149 Sparse buildD() const;
\n-
150
\n-
151 public:
\n-
154
\n-
157 ShonanAveraging(const Measurements &measurements,
\n-
158 const Parameters &parameters = Parameters());
\n-
159
\n-
163
\n-
165 size_t nrUnknowns() const { return nrUnknowns_; }
\n-
166
\n-
168 size_t numberMeasurements() const { return measurements_.size(); }
\n-
169
\n-
\n-
171 const BinaryMeasurement<Rot> &measurement(size_t k) const {
\n-
172 return measurements_[k];
\n-
173 }
\n-
\n-
174
\n-
\n-
181 Measurements makeNoiseModelRobust(const Measurements &measurements,
\n-
182 double k = 1.345) const {
\n-
183 Measurements robustMeasurements;
\n-
184 for (auto &measurement : measurements) {
\n-
185 auto model = measurement.noiseModel();
\n-
186 const auto &robust =
\n-
187 boost::dynamic_pointer_cast<noiseModel::Robust>(model);
\n-
188
\n-
189 SharedNoiseModel robust_model;
\n-
190 // Check if the noise model is already robust
\n-
191 if (robust) {
\n-
192 robust_model = model;
\n-
193 } else {
\n-
194 // make robust
\n-
195 robust_model = noiseModel::Robust::Create(
\n-
196 noiseModel::mEstimator::Huber::Create(k), model);
\n-
197 }
\n-
198 BinaryMeasurement<Rot> meas(measurement.key1(), measurement.key2(),
\n-
199 measurement.measured(), robust_model);
\n-
200 robustMeasurements.push_back(meas);
\n-
201 }
\n-
202 return robustMeasurements;
\n-
203 }
\n-
\n-
204
\n-
206 const Rot &measured(size_t k) const { return measurements_[k].measured(); }
\n-
207
\n-
209 const KeyVector &keys(size_t k) const { return measurements_[k].keys(); }
\n-
210
\n-
214
\n-
215 Sparse D() const { return D_; }
\n-
\n-
216 Matrix denseD() const { return Matrix(D_); }
\n-
\n-
217 Sparse Q() const { return Q_; }
\n-
\n-
218 Matrix denseQ() const { return Matrix(Q_); }
\n-
\n-
219 Sparse L() const { return L_; }
\n-
\n-
220 Matrix denseL() const { return Matrix(L_); }
\n-
221
\n-
223 Sparse computeLambda(const Matrix &S) const;
\n-
224
\n-
\n-
226 Matrix computeLambda_(const Values &values) const {
\n-
227 return Matrix(computeLambda(values));
\n-
228 }
\n-
\n-
229
\n-
\n-
231 Matrix computeLambda_(const Matrix &S) const {
\n-
232 return Matrix(computeLambda(S));
\n-
233 }
\n-
\n-
234
\n-
236 Sparse computeA(const Values &values) const;
\n-
237
\n-
239 Sparse computeA(const Matrix &S) const;
\n-
240
\n-
\n-
242 Matrix computeA_(const Values &values) const {
\n-
243 return Matrix(computeA(values));
\n-
244 }
\n-
\n-
245
\n-
247 static Matrix StiefelElementMatrix(const Values &values);
\n-
248
\n-
253 double computeMinEigenValue(const Values &values,
\n-
254 Vector *minEigenVector = nullptr) const;
\n-
255
\n-
260 double computeMinEigenValueAP(const Values &values,
\n-
261 Vector *minEigenVector = nullptr) const;
\n-
262
\n-
264 Values roundSolutionS(const Matrix &S) const;
\n-
265
\n-
267 static VectorValues TangentVectorValues(size_t p, const Vector &v);
\n-
268
\n-
270 Matrix riemannianGradient(size_t p, const Values &values) const;
\n-
271
\n-
276 static Values LiftwithDescent(size_t p, const Values &values,
\n-
277 const Vector &minEigenVector);
\n-
278
\n-
286 Values initializeWithDescent(
\n-
287 size_t p, const Values &values, const Vector &minEigenVector,
\n-
288 double minEigenValue, double gradienTolerance = 1e-2,
\n-
289 double preconditionedGradNormTolerance = 1e-4) const;
\n-
293
\n-
298 NonlinearFactorGraph buildGraphAt(size_t p) const;
\n-
299
\n-
305 Values initializeRandomlyAt(size_t p, std::mt19937 &rng) const;
\n-
306
\n-
308 Values initializeRandomlyAt(size_t p) const;
\n-
309
\n-
314 double costAt(size_t p, const Values &values) const;
\n-
315
\n-
321 Sparse computeLambda(const Values &values) const;
\n-
322
\n-
328 std::pair<double, Vector> computeMinEigenVector(const Values &values) const;
\n-
329
\n-
334 bool checkOptimality(const Values &values) const;
\n-
335
\n-
342 boost::shared_ptr<LevenbergMarquardtOptimizer> createOptimizerAt(
\n-
343 size_t p, const Values &initial) const;
\n-
344
\n-
351 Values tryOptimizingAt(size_t p, const Values &initial) const;
\n-
352
\n-
357 Values projectFrom(size_t p, const Values &values) const;
\n-
358
\n-
363 Values roundSolution(const Values &values) const;
\n-
364
\n-
366 template <class T>
\n-
\n-
367 static Values LiftTo(size_t p, const Values &values) {
\n-
368 Values result;
\n-
369 for (const auto it : values.extract<T>()) {
\n-
370 result.insert(it.first, SOn::Lift(p, it.second.matrix()));
\n-
371 }
\n-
372 return result;
\n-
373 }
\n-
\n-
374
\n-
378
\n-
383 double cost(const Values &values) const;
\n-
384
\n-
392 Values initializeRandomly(std::mt19937 &rng) const;
\n-
393
\n-
395 Values initializeRandomly() const;
\n-
396
\n-
404 std::pair<Values, double> run(const Values &initialEstimate, size_t pMin = d,
\n-
405 size_t pMax = 10) const;
\n-
407
\n-
417 template <typename T>
\n-
\n-
418 inline std::vector<BinaryMeasurement<T>> maybeRobust(
\n-
419 const std::vector<BinaryMeasurement<T>> &measurements,
\n-
420 bool useRobustModel = false) const {
\n-
421 return useRobustModel ? makeNoiseModelRobust(measurements) : measurements;
\n-
422 }
\n-
\n-
423};
\n-
424
\n-
425// Subclasses for d=2 and d=3 that explicitly instantiate, as well as provide a
\n-
426// convenience interface with file access.
\n-
427
\n-
\n-
428class GTSAM_EXPORT ShonanAveraging2 : public ShonanAveraging<2> {
\n-
429 public:
\n-
430 ShonanAveraging2(const Measurements &measurements,
\n-
431 const Parameters &parameters = Parameters());
\n-
432 explicit ShonanAveraging2(std::string g2oFile,
\n-
433 const Parameters &parameters = Parameters());
\n-
434 ShonanAveraging2(const BetweenFactorPose2s &factors,
\n-
435 const Parameters &parameters = Parameters());
\n-
436};
\n-
\n-
437
\n-
\n-
438class GTSAM_EXPORT ShonanAveraging3 : public ShonanAveraging<3> {
\n-
439 public:
\n-
440 ShonanAveraging3(const Measurements &measurements,
\n-
441 const Parameters &parameters = Parameters());
\n-
442 explicit ShonanAveraging3(std::string g2oFile,
\n-
443 const Parameters &parameters = Parameters());
\n-
444
\n-
445 // TODO(frank): Deprecate after we land pybind wrapper
\n-
446 ShonanAveraging3(const BetweenFactorPose3s &factors,
\n-
447 const Parameters &parameters = Parameters());
\n-
448};
\n-
\n-
449} // namespace gtsam
\n-
\n-
\n-
\n-
\n-
\n-
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
typedef and functions to augment Eigen's VectorXd
\n-
3D rotation represented as a rotation matrix or quaternion
\n-
2D rotation
\n-
Factor Graph Values.
\n-
Power method for fast eigenvalue and eigenvector computation.
\n-
accelerated power method for fast eigenvalue and eigenvector computation
\n-
Parameters for Levenberg-Marquardt trust-region scheme.
\n-
Binary measurement represents a measurement between two keys in a graph. A binary measurement is simi...
\n-
utility functions for loading datasets
\n+
33typedef Eigen::MatrixX2i CorrespondenceIndices; // N x 2 array
\n+
34
\n+
35// Output of detections in an image.
\n+
36// Coordinate system convention:
\n+
37// 1. The x coordinate denotes the horizontal direction (+ve direction towards
\n+
38// the right).
\n+
39// 2. The y coordinate denotes the vertical direction (+ve direction downwards).
\n+
40// 3. Origin is at the top left corner of the image.
\n+
\n+
41struct Keypoints {
\n+
42 // The (x, y) coordinates of the features, of shape Nx2.
\n+
43 Eigen::MatrixX2d coordinates;
\n+
44
\n+
45 // Optional scale of the detections, of shape N.
\n+
46 // Note: gtsam::Vector is typedef'd for Eigen::VectorXd.
\n+
47 boost::optional<gtsam::Vector> scales;
\n+
48
\n+
50 boost::optional<gtsam::Vector> responses;
\n+
51
\n+
52 Keypoints(const Eigen::MatrixX2d& coordinates)
\n+
53 : coordinates(coordinates){}; // boost::none
\n+
54};
\n+
\n+
55
\n+
56using KeypointsVector = std::vector<Keypoints>;
\n+
57// Mapping from each image pair to (N,2) array representing indices of matching
\n+
58// keypoints.
\n+
59using MatchIndicesMap = std::map<IndexPair, CorrespondenceIndices>;
\n+
60
\n+
73std::vector<SfmTrack2d> tracksFromPairwiseMatches(
\n+
74 const MatchIndicesMap& matches, const KeypointsVector& keypoints,
\n+
75 bool verbose = false);
\n+
76
\n+
77} // namespace gtsfm
\n+
78
\n+
79} // namespace gtsam
\n+
Allow for arbitrary type in DSF.
\n+
A simple data structure for a track in Structure from Motion.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
Parameters for Levenberg-Marquardt optimization.
Definition LevenbergMarquardtParams.h:35
\n-
Definition NonlinearFactorGraph.h:55
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
std::map< Key, ValueType > extract(const std::function< bool(Key)> &filterFcn=&_truePredicate< Key >) const
Extract a subset of values of the given type ValueType.
Definition Values-inl.h:94
\n-
Definition BinaryMeasurement.h:36
\n-
Parameters governing optimization etc.
Definition ShonanAveraging.h:46
\n-
double alpha
weight of anchor-based prior (default 0)
Definition ShonanAveraging.h:55
\n-
void print(const std::string &s="") const
Print the parameters and flags used for rotation averaging.
Definition ShonanAveraging.h:94
\n-
LevenbergMarquardtParams lm
LM parameters.
Definition ShonanAveraging.h:52
\n-
bool useHuber
if enabled, the Huber loss is used (default false)
Definition ShonanAveraging.h:59
\n-
double optimalityThreshold
threshold used in checkOptimality
Definition ShonanAveraging.h:53
\n-
double beta
weight of Karcher-based prior (default 1)
Definition ShonanAveraging.h:56
\n-
double gamma
weight of gauge-fixing factors (default 0)
Definition ShonanAveraging.h:57
\n-
Anchor anchor
pose to use as anchor if not Karcher
Definition ShonanAveraging.h:54
\n-
bool certifyOptimality
if enabled solution optimality is certified (default true)
Definition ShonanAveraging.h:61
\n-
Class that implements Shonan Averaging from our ECCV'20 paper.
Definition ShonanAveraging.h:123
\n-
Sparse D() const
Sparse version of D.
Definition ShonanAveraging.h:215
\n-
const BinaryMeasurement< Rot > & measurement(size_t k) const
k^th binary measurement
Definition ShonanAveraging.h:171
\n-
Measurements makeNoiseModelRobust(const Measurements &measurements, double k=1.345) const
Update factors to use robust Huber loss.
Definition ShonanAveraging.h:181
\n-
Values roundSolutionS(const Matrix &S) const
Project pxdN Stiefel manifold matrix S to Rot3^N.
\n-
std::vector< BinaryMeasurement< T > > maybeRobust(const std::vector< BinaryMeasurement< T > > &measurements, bool useRobustModel=false) const
Helper function to convert measurements to robust noise model if flag is set.
Definition ShonanAveraging.h:418
\n-
Sparse L() const
Sparse version of L.
Definition ShonanAveraging.h:219
\n-
const Rot & measured(size_t k) const
k^th measurement, as a Rot.
Definition ShonanAveraging.h:206
\n-
Sparse Q() const
Sparse version of Q.
Definition ShonanAveraging.h:217
\n-
Matrix denseD() const
Dense version of D.
Definition ShonanAveraging.h:216
\n-
size_t nrUnknowns() const
Return number of unknowns.
Definition ShonanAveraging.h:165
\n-
Values projectFrom(size_t p, const Values &values) const
Project from SO(p) to Rot2 or Rot3 Values should be of type SO(p)
\n-
size_t numberMeasurements() const
Return number of measurements.
Definition ShonanAveraging.h:168
\n-
Matrix denseL() const
Dense version of L.
Definition ShonanAveraging.h:220
\n-
Matrix computeLambda_(const Matrix &S) const
Dense versions of computeLambda for wrapper/testing.
Definition ShonanAveraging.h:231
\n-
Matrix denseQ() const
Dense version of Q.
Definition ShonanAveraging.h:218
\n-
const KeyVector & keys(size_t k) const
Keys for k^th measurement, as a vector of Key values.
Definition ShonanAveraging.h:209
\n-
Matrix computeLambda_(const Values &values) const
Dense versions of computeLambda for wrapper/testing.
Definition ShonanAveraging.h:226
\n-
Matrix computeA_(const Values &values) const
Dense version of computeA for wrapper/testing.
Definition ShonanAveraging.h:242
\n-
static Values LiftTo(size_t p, const Values &values)
Lift Values of type T to SO(p)
Definition ShonanAveraging.h:367
\n-
Definition ShonanAveraging.h:428
\n-
Definition ShonanAveraging.h:438
\n+
Definition DsfTrackGenerator.h:41
\n+
boost::optional< gtsam::Vector > responses
Optional confidences/responses for each detection, of shape N.
Definition DsfTrackGenerator.h:50
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,473 +1,88 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ShonanAveraging.h\n+DsfTrackGenerator.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-23#include \n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh>\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh>\n-30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh>\n-31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh>\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bD_\bS_\bF_\bM_\ba_\bp_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh>\n+22\n+23#include \n+24\n+25#include \n+26#include \n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+31namespace gtsfm {\n 32\n-33#include \n-34#include \n-35#include \n-36#include \n-37#include \n-38#include \n-39\n-40namespace _\bg_\bt_\bs_\ba_\bm {\n-41class NonlinearFactorGraph;\n-42class LevenbergMarquardtOptimizer;\n-43\n-45template \n-_\b4_\b6struct GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n-47 // Select Rot2 or Rot3 interface based template parameter d\n-48 using Rot = typename std::conditional::type;\n-49 using Anchor = std::pair;\n-50\n-51 // Parameters themselves:\n-_\b5_\b2 _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs _\bl_\bm;\n-_\b5_\b3 double _\bo_\bp_\bt_\bi_\bm_\ba_\bl_\bi_\bt_\by_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n-_\b5_\b4 Anchor _\ba_\bn_\bc_\bh_\bo_\br;\n-_\b5_\b5 double _\ba_\bl_\bp_\bh_\ba;\n-_\b5_\b6 double _\bb_\be_\bt_\ba;\n-_\b5_\b7 double _\bg_\ba_\bm_\bm_\ba;\n-_\b5_\b9 bool _\bu_\bs_\be_\bH_\bu_\bb_\be_\br;\n-_\b6_\b1 bool _\bc_\be_\br_\bt_\bi_\bf_\by_\bO_\bp_\bt_\bi_\bm_\ba_\bl_\bi_\bt_\by;\n-62\n-63 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs(const _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs &lm =\n-64 LevenbergMarquardtParams::CeresDefaults(),\n-65 const std::string &method = \"JACOBI\",\n-66 double optimalityThreshold = -1e-4,\n-67 double alpha = 0.0, double beta = 1.0,\n-68 double gamma = 0.0);\n-69\n-70 _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs getLMParams() const { return lm; }\n-71\n-72 void setOptimalityThreshold(double value) { optimalityThreshold = value; }\n-73 double getOptimalityThreshold() const { return optimalityThreshold; }\n-74\n-75 void setAnchor(size_t index, const Rot &value) { anchor = {index, value}; }\n-76 std::pair getAnchor() const { return anchor; }\n-77\n-78 void setAnchorWeight(double value) { alpha = value; }\n-79 double getAnchorWeight() const { return alpha; }\n-80\n-81 void setKarcherWeight(double value) { beta = value; }\n-82 double getKarcherWeight() const { return beta; }\n-83\n-84 void setGaugesWeight(double value) { gamma = value; }\n-85 double getGaugesWeight() const { return gamma; }\n-86\n-87 void setUseHuber(bool value) { useHuber = value; }\n-88 bool getUseHuber() const { return useHuber; }\n-89\n-90 void setCertifyOptimality(bool value) { certifyOptimality = value; }\n-91 bool getCertifyOptimality() const { return certifyOptimality; }\n-92\n-_\b9_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string &s = \"\") const {\n-95 std::cout << (s.empty() ? s : s + \" \");\n-96 std::cout << \" ShonanAveragingParameters: \" << std::endl;\n-97 std::cout << \" alpha: \" << alpha << std::endl;\n-98 std::cout << \" beta: \" << beta << std::endl;\n-99 std::cout << \" gamma: \" << gamma << std::endl;\n-100 std::cout << \" useHuber: \" << useHuber << std::endl;\n-101 }\n-102};\n-103\n-104using ShonanAveragingParameters2 = ShonanAveragingParameters<2>;\n-105using ShonanAveragingParameters3 = ShonanAveragingParameters<3>;\n-106\n-122template \n-_\b1_\b2_\b3class GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg {\n-124 public:\n-125 using Sparse = Eigen::SparseMatrix;\n-126\n-127 // Define the Parameters type and use its typedef of the rotation type:\n-128 using _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs = _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b<_\bd_\b>;\n-129 using Rot = typename Parameters::Rot;\n-130\n-131 // We store SO(d) BetweenFactors to get noise model\n-132 using Measurements = std::vector>;\n-133\n-134 private:\n-135 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs parameters_;\n-136 Measurements measurements_;\n-137 size_t nrUnknowns_;\n-138 Sparse D_; // Sparse (diagonal) degree matrix\n-139 Sparse Q_; // Sparse measurement matrix, == \\tilde{R} in Eriksson18cvpr\n-140 Sparse L_; // connection Laplacian L = D - Q, needed for optimality check\n-141\n-146 Sparse buildQ() const;\n-147\n-149 Sparse buildD() const;\n-150\n-151 public:\n-154\n-157 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg(const Measurements &measurements,\n-158 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters = _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs());\n-159\n-163\n-_\b1_\b6_\b5 size_t _\bn_\br_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs() const { return nrUnknowns_; }\n-166\n-_\b1_\b6_\b8 size_t _\bn_\bu_\bm_\bb_\be_\br_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const { return measurements_.size(); }\n-169\n-_\b1_\b7_\b1 const _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bR_\bo_\bt_\b> &_\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt(size_t k) const {\n-172 return measurements_[k];\n-173 }\n-174\n-_\b1_\b8_\b1 Measurements _\bm_\ba_\bk_\be_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bR_\bo_\bb_\bu_\bs_\bt(const Measurements &measurements,\n-182 double k = 1.345) const {\n-183 Measurements robustMeasurements;\n-184 for (auto &measurement : measurements) {\n-185 auto model = measurement.noiseModel();\n-186 const auto &robust =\n-187 boost::dynamic_pointer_cast(model);\n-188\n-189 _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl robust_model;\n-190 // Check if the noise model is already robust\n-191 if (robust) {\n-192 robust_model = model;\n-193 } else {\n-194 // make robust\n-195 robust_model = noiseModel::Robust::Create(\n-196 noiseModel::mEstimator::Huber::Create(k), model);\n-197 }\n-198 _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bR_\bo_\bt_\b> meas(measurement.key1(), measurement.key2(),\n-199 measurement.measured(), robust_model);\n-200 robustMeasurements.push_back(meas);\n-201 }\n-202 return robustMeasurements;\n-203 }\n-204\n-_\b2_\b0_\b6 const Rot &_\bm_\be_\ba_\bs_\bu_\br_\be_\bd(size_t k) const { return measurements_[k].measured(); }\n-207\n-_\b2_\b0_\b9 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &_\bk_\be_\by_\bs(size_t k) const { return measurements_[k].keys(); }\n-210\n-214\n-_\b2_\b1_\b5 Sparse _\bD() const { return D_; }\n-_\b2_\b1_\b6 Matrix _\bd_\be_\bn_\bs_\be_\bD() const { return Matrix(D_); }\n-_\b2_\b1_\b7 Sparse _\bQ() const { return Q_; }\n-_\b2_\b1_\b8 Matrix _\bd_\be_\bn_\bs_\be_\bQ() const { return Matrix(Q_); }\n-_\b2_\b1_\b9 Sparse _\bL() const { return L_; }\n-_\b2_\b2_\b0 Matrix _\bd_\be_\bn_\bs_\be_\bL() const { return Matrix(L_); }\n-221\n-223 Sparse computeLambda(const Matrix &S) const;\n-224\n-_\b2_\b2_\b6 Matrix _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bL_\ba_\bm_\bb_\bd_\ba_\b_(const _\bV_\ba_\bl_\bu_\be_\bs &values) const {\n-227 return Matrix(computeLambda(values));\n-228 }\n-229\n-_\b2_\b3_\b1 Matrix _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bL_\ba_\bm_\bb_\bd_\ba_\b_(const Matrix &S) const {\n-232 return Matrix(computeLambda(S));\n-233 }\n-234\n-236 Sparse computeA(const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n-237\n-239 Sparse computeA(const Matrix &S) const;\n-240\n-_\b2_\b4_\b2 Matrix _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bA_\b_(const _\bV_\ba_\bl_\bu_\be_\bs &values) const {\n-243 return Matrix(computeA(values));\n-244 }\n-245\n-247 static Matrix StiefelElementMatrix(const _\bV_\ba_\bl_\bu_\be_\bs &values);\n-248\n-253 double computeMinEigenValue(const _\bV_\ba_\bl_\bu_\be_\bs &values,\n-254 Vector *minEigenVector = nullptr) const;\n-255\n-260 double computeMinEigenValueAP(const _\bV_\ba_\bl_\bu_\be_\bs &values,\n-261 Vector *minEigenVector = nullptr) const;\n-262\n-_\b2_\b6_\b4 _\bV_\ba_\bl_\bu_\be_\bs _\br_\bo_\bu_\bn_\bd_\bS_\bo_\bl_\bu_\bt_\bi_\bo_\bn_\bS(const Matrix &S) const;\n-265\n-267 static _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs TangentVectorValues(size_t p, const Vector &v);\n-268\n-270 Matrix riemannianGradient(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n-271\n-276 static _\bV_\ba_\bl_\bu_\be_\bs LiftwithDescent(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values,\n-277 const Vector &minEigenVector);\n-278\n-286 _\bV_\ba_\bl_\bu_\be_\bs initializeWithDescent(\n-287 size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values, const Vector &minEigenVector,\n-288 double minEigenValue, double gradienTolerance = 1e-2,\n-289 double preconditionedGradNormTolerance = 1e-4) const;\n-293\n-298 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh buildGraphAt(size_t p) const;\n-299\n-305 _\bV_\ba_\bl_\bu_\be_\bs initializeRandomlyAt(size_t p, std::mt19937 &rng) const;\n-306\n-308 _\bV_\ba_\bl_\bu_\be_\bs initializeRandomlyAt(size_t p) const;\n-309\n-314 double costAt(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n-315\n-321 Sparse computeLambda(const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n-322\n-328 std::pair computeMinEigenVector(const _\bV_\ba_\bl_\bu_\be_\bs &values)\n-const;\n-329\n-334 bool checkOptimality(const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n-335\n-342 boost::shared_ptr createOptimizerAt(\n-343 size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &initial) const;\n-344\n-351 _\bV_\ba_\bl_\bu_\be_\bs tryOptimizingAt(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &initial) const;\n-352\n-_\b3_\b5_\b7 _\bV_\ba_\bl_\bu_\be_\bs _\bp_\br_\bo_\bj_\be_\bc_\bt_\bF_\br_\bo_\bm(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n-358\n-363 _\bV_\ba_\bl_\bu_\be_\bs roundSolution(const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n-364\n-366 template \n-_\b3_\b6_\b7 static _\bV_\ba_\bl_\bu_\be_\bs _\bL_\bi_\bf_\bt_\bT_\bo(size_t p, const _\bV_\ba_\bl_\bu_\be_\bs &values) {\n-368 _\bV_\ba_\bl_\bu_\be_\bs result;\n-369 for (const auto it : values._\be_\bx_\bt_\br_\ba_\bc_\bt()) {\n-370 result.insert(it.first, SOn::Lift(p, it.second.matrix()));\n-371 }\n-372 return result;\n-373 }\n-374\n-378\n-383 double cost(const _\bV_\ba_\bl_\bu_\be_\bs &values) const;\n-384\n-392 _\bV_\ba_\bl_\bu_\be_\bs initializeRandomly(std::mt19937 &rng) const;\n-393\n-395 _\bV_\ba_\bl_\bu_\be_\bs initializeRandomly() const;\n-396\n-404 std::pair run(const _\bV_\ba_\bl_\bu_\be_\bs &initialEstimate, size_t pMin =\n-d,\n-405 size_t pMax = 10) const;\n-407\n-417 template \n-_\b4_\b1_\b8 inline std::vector> _\bm_\ba_\by_\bb_\be_\bR_\bo_\bb_\bu_\bs_\bt(\n-419 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bT_\b>> &measurements,\n-420 bool useRobustModel = false) const {\n-421 return useRobustModel ? makeNoiseModelRobust(measurements) : measurements;\n-422 }\n-423};\n-424\n-425// Subclasses for d=2 and d=3 that explicitly instantiate, as well as\n-provide a\n-426// convenience interface with file access.\n-427\n-_\b4_\b2_\b8class GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2 : public _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg<2> {\n-429 public:\n-430 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2(const Measurements &measurements,\n-431 const Parameters ¶meters = Parameters());\n-432 explicit _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2(std::string g2oFile,\n-433 const Parameters ¶meters = Parameters());\n-434 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2(const BetweenFactorPose2s &factors,\n-435 const Parameters ¶meters = Parameters());\n-436};\n-437\n-_\b4_\b3_\b8class GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3 : public _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg<3> {\n-439 public:\n-440 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3(const Measurements &measurements,\n-441 const Parameters ¶meters = Parameters());\n-442 explicit _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3(std::string g2oFile,\n-443 const Parameters ¶meters = Parameters());\n-444\n-445 // TODO(frank): Deprecate after we land pybind wrapper\n-446 _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3(const BetweenFactorPose3s &factors,\n-447 const Parameters ¶meters = Parameters());\n-448};\n-449} // namespace gtsam\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n-_\bR_\bo_\bt_\b3_\b._\bh\n-3D rotation represented as a rotation matrix or quaternion\n-_\bR_\bo_\bt_\b2_\b._\bh\n-2D rotation\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n-Power method for fast eigenvalue and eigenvector computation.\n-_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n-accelerated power method for fast eigenvalue and eigenvector computation\n-_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n-Parameters for Levenberg-Marquardt trust-region scheme.\n-_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n-Binary measurement represents a measurement between two keys in a graph. A\n-binary measurement is simi...\n-_\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh\n-utility functions for loading datasets\n+33typedef Eigen::MatrixX2i CorrespondenceIndices; // N x 2 array\n+34\n+35// Output of detections in an image.\n+36// Coordinate system convention:\n+37// 1. The x coordinate denotes the horizontal direction (+ve direction\n+towards\n+38// the right).\n+39// 2. The y coordinate denotes the vertical direction (+ve direction\n+downwards).\n+40// 3. Origin is at the top left corner of the image.\n+_\b4_\b1struct _\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs {\n+42 // The (x, y) coordinates of the features, of shape Nx2.\n+43 Eigen::MatrixX2d coordinates;\n+44\n+45 // Optional scale of the detections, of shape N.\n+46 // Note: gtsam::Vector is typedef'd for Eigen::VectorXd.\n+47 boost::optional scales;\n+48\n+_\b5_\b0 boost::optional _\br_\be_\bs_\bp_\bo_\bn_\bs_\be_\bs;\n+51\n+52 _\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs(const Eigen::MatrixX2d& coordinates)\n+53 : coordinates(coordinates){}; // boost::none\n+54};\n+55\n+56using KeypointsVector = std::vector;\n+57// Mapping from each image pair to (N,2) array representing indices of\n+matching\n+58// keypoints.\n+59using MatchIndicesMap = std::map;\n+60\n+73std::vector tracksFromPairwiseMatches(\n+74 const MatchIndicesMap& matches, const KeypointsVector& keypoints,\n+75 bool verbose = false);\n+76\n+77} // namespace gtsfm\n+78\n+79} // namespace gtsam\n+_\bD_\bS_\bF_\bM_\ba_\bp_\b._\bh\n+Allow for arbitrary type in DSF.\n+_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh\n+A simple data structure for a track in Structure from Motion.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for Levenberg-Marquardt optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bt_\br_\ba_\bc_\bt\n-std::map< Key, ValueType > extract(const std::function< bool(Key)>\n-&filterFcn=&_truePredicate< Key >) const\n-Extract a subset of values of the given type ValueType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryMeasurement.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-Parameters governing optimization etc.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\ba_\bl_\bp_\bh_\ba\n-double alpha\n-weight of anchor-based prior (default 0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\") const\n-Print the parameters and flags used for rotation averaging.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bl_\bm\n-LevenbergMarquardtParams lm\n-LM parameters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bu_\bs_\be_\bH_\bu_\bb_\be_\br\n-bool useHuber\n-if enabled, the Huber loss is used (default false)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\ba_\bl_\bi_\bt_\by_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-double optimalityThreshold\n-threshold used in checkOptimality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bb_\be_\bt_\ba\n-double beta\n-weight of Karcher-based prior (default 1)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bg_\ba_\bm_\bm_\ba\n-double gamma\n-weight of gauge-fixing factors (default 0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\ba_\bn_\bc_\bh_\bo_\br\n-Anchor anchor\n-pose to use as anchor if not Karcher\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bc_\be_\br_\bt_\bi_\bf_\by_\bO_\bp_\bt_\bi_\bm_\ba_\bl_\bi_\bt_\by\n-bool certifyOptimality\n-if enabled solution optimality is certified (default true)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg\n-Class that implements Shonan Averaging from our ECCV'20 paper.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bD\n-Sparse D() const\n-Sparse version of D.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:215\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-const BinaryMeasurement< Rot > & measurement(size_t k) const\n-k^th binary measurement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:171\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bm_\ba_\bk_\be_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bR_\bo_\bb_\bu_\bs_\bt\n-Measurements makeNoiseModelRobust(const Measurements &measurements, double\n-k=1.345) const\n-Update factors to use robust Huber loss.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:181\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\br_\bo_\bu_\bn_\bd_\bS_\bo_\bl_\bu_\bt_\bi_\bo_\bn_\bS\n-Values roundSolutionS(const Matrix &S) const\n-Project pxdN Stiefel manifold matrix S to Rot3^N.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bm_\ba_\by_\bb_\be_\bR_\bo_\bb_\bu_\bs_\bt\n-std::vector< BinaryMeasurement< T > > maybeRobust(const std::vector<\n-BinaryMeasurement< T > > &measurements, bool useRobustModel=false) const\n-Helper function to convert measurements to robust noise model if flag is set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:418\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bL\n-Sparse L() const\n-Sparse version of L.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const Rot & measured(size_t k) const\n-k^th measurement, as a Rot.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:206\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bQ\n-Sparse Q() const\n-Sparse version of Q.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:217\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bd_\be_\bn_\bs_\be_\bD\n-Matrix denseD() const\n-Dense version of D.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:216\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bn_\br_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs\n-size_t nrUnknowns() const\n-Return number of unknowns.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:165\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bF_\br_\bo_\bm\n-Values projectFrom(size_t p, const Values &values) const\n-Project from SO(p) to Rot2 or Rot3 Values should be of type SO(p)\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bn_\bu_\bm_\bb_\be_\br_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-size_t numberMeasurements() const\n-Return number of measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:168\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bd_\be_\bn_\bs_\be_\bL\n-Matrix denseL() const\n-Dense version of L.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:220\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bL_\ba_\bm_\bb_\bd_\ba_\b_\n-Matrix computeLambda_(const Matrix &S) const\n-Dense versions of computeLambda for wrapper/testing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:231\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bd_\be_\bn_\bs_\be_\bQ\n-Matrix denseQ() const\n-Dense version of Q.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:218\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys(size_t k) const\n-Keys for k^th measurement, as a vector of Key values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:209\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bL_\ba_\bm_\bb_\bd_\ba_\b_\n-Matrix computeLambda_(const Values &values) const\n-Dense versions of computeLambda for wrapper/testing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:226\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bA_\b_\n-Matrix computeA_(const Values &values) const\n-Dense version of computeA for wrapper/testing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:242\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b:_\b:_\bL_\bi_\bf_\bt_\bT_\bo\n-static Values LiftTo(size_t p, const Values &values)\n-Lift Values of type T to SO(p)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:367\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b2\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:428\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b3\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanAveraging.h:438\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\bf_\bm_\b:_\b:_\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DsfTrackGenerator.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\bf_\bm_\b:_\b:_\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs_\b:_\b:_\br_\be_\bs_\bp_\bo_\bn_\bs_\be_\bs\n+boost::optional< gtsam::Vector > responses\n+Optional confidences/responses for each detection, of shape N.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DsfTrackGenerator.h:50\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b._\bh\n+ * _\bD_\bs_\bf_\bT_\br_\ba_\bc_\bk_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01199.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01199.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/DsfTrackGenerator.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,84 +94,95 @@\n \n \n \n \n \n
\n \n-
SfmData.h File Reference
\n+
DsfTrackGenerator.cpp File Reference
\n
\n
\n \n-

Data structure for dealing with Structure from Motion data. \n+

Identifies connected components in the keypoint matches graph. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

struct  gtsam::SfmData
 SfmData stores a bunch of SfmTracks. More...
 
struct  gtsam::traits< SfmData >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n+\n+\n

\n Typedefs

\n-typedef PinholeCamera< Cal3Bundlergtsam::SfmCamera
 Define the structure for the camera poses.
 
\n+typedef DSFMap< IndexPairgtsam::gtsfm::DSFMapIndexPair
 
\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 Functions

SfmData gtsam::readBal (const std::string &filename)
 This function parses a \"Bundle Adjustment in the Large\" (BAL) file and returns the data as a SfmData structure.
 
bool gtsam::writeBAL (const std::string &filename, const SfmData &data)
 This function writes a \"Bundle Adjustment in the Large\" (BAL) file from a SfmData structure.
 
bool gtsam::writeBALfromValues (const std::string &filename, const SfmData &data, const Values &values)
 This function writes a \"Bundle Adjustment in the Large\" (BAL) file from a SfmData structure and a value structure (measurements are the same as the SfM input data, while camera poses and values are read from Values)
 
Pose3 gtsam::openGL2gtsam (const Rot3 &R, double tx, double ty, double tz)
 This function converts an openGL camera pose to an GTSAM camera pose.
 
Pose3 gtsam::gtsam2openGL (const Rot3 &R, double tx, double ty, double tz)
 This function converts a GTSAM camera pose to an openGL camera pose.
 
Pose3 gtsam::gtsam2openGL (const Pose3 &PoseGTSAM)
 This function converts a GTSAM camera pose to an openGL camera pose.
 
Values gtsam::initialCamerasEstimate (const SfmData &db)
 This function creates initial values for cameras from db.
 
Values gtsam::initialCamerasAndPointsEstimate (const SfmData &db)
 This function creates initial values for cameras and points from db.
 
std::vector< SfmTrack2dgtsam::gtsfm::tracksFromPairwiseMatches (const MatchIndicesMap &matches, const KeypointsVector &keypoints, bool verbose)
 Creates a list of tracks from 2d point correspondences.
 
\n

Detailed Description

\n-

Data structure for dealing with Structure from Motion data.

\n-
Date
January 2022
\n-
Author
Frank dellaert
\n-
\n+

Identifies connected components in the keypoint matches graph.

\n+
Date
October 2022
\n+
Author
John Lambert
\n+

Function Documentation

\n+\n+

◆ tracksFromPairwiseMatches()

\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+
std::vector< SfmTrack2d > gtsam::gtsfm::tracksFromPairwiseMatches (const MatchIndicesMap & matches,
const KeypointsVector & keypoints,
bool verbose 
)
\n+
\n+\n+

Creates a list of tracks from 2d point correspondences.

\n+

Creates a disjoint-set forest (DSF) and 2d tracks from pairwise matches. We create a singleton for union-find set elements from camera index of a detection and the index of that detection in that camera's keypoint list, i.e. (i,k).

\n+
Parameters
\n+ \n+ \n+ \n+
Mapfrom (i1,i2) image pair indices to (K,2) matrix, for K correspondence indices, from each image.
Length-Nlist of keypoints, for N images/cameras.
\n+
\n+
\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,66 +1,47 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SfmData.h File Reference\n-Data structure for dealing with Structure from Motion data. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba\n-\u00a0 _\bS_\bf_\bm_\bD_\ba_\bt_\ba stores a bunch of SfmTracks. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+DsfTrackGenerator.cpp File Reference\n+Identifies connected components in the keypoint matches graph. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSf\bfm\bmC\bCa\bam\bme\ber\bra\ba\n-\u00a0 Define the structure for the camera\n- poses.\n+typedef _\bD_\bS_\bF_\bM_\ba_\bp< _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgt\bts\bsf\bfm\bm:\b::\b:D\bDS\bSF\bFM\bMa\bap\bpI\bIn\bnd\bde\bex\bxP\bPa\bai\bir\br\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-_\bS_\bf_\bm_\bD_\ba_\bt_\ba\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\be_\ba_\bd_\bB_\ba_\bl (const std::string &filename)\n-\u00a0 This function parses a \"Bundle Adjustment in the Large\" (BAL) file and\n- returns the data as a _\bS_\bf_\bm_\bD_\ba_\bt_\ba structure.\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bB_\bA_\bL (const std::string &filename, const _\bS_\bf_\bm_\bD_\ba_\bt_\ba &data)\n-\u00a0 This function writes a \"Bundle Adjustment in the Large\" (BAL) file\n- from a _\bS_\bf_\bm_\bD_\ba_\bt_\ba structure.\n-\u00a0\n- bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bB_\bA_\bL_\bf_\br_\bo_\bm_\bV_\ba_\bl_\bu_\be_\bs (const std::string &filename, const _\bS_\bf_\bm_\bD_\ba_\bt_\ba\n- &data, const _\bV_\ba_\bl_\bu_\be_\bs &values)\n- This function writes a \"Bundle Adjustment in the Large\" (BAL) file\n-\u00a0 from a _\bS_\bf_\bm_\bD_\ba_\bt_\ba structure and a value structure (measurements are the\n- same as the SfM input data, while camera poses and values are read\n- from _\bV_\ba_\bl_\bu_\be_\bs)\n-\u00a0\n- _\bP_\bo_\bs_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\bn_\bG_\bL_\b2_\bg_\bt_\bs_\ba_\bm (const _\bR_\bo_\bt_\b3 &R, double tx, double ty, double tz)\n-\u00a0 This function converts an openGL camera pose to an GTSAM camera pose.\n-\u00a0\n- _\bP_\bo_\bs_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL (const _\bR_\bo_\bt_\b3 &R, double tx, double ty, double tz)\n-\u00a0 This function converts a GTSAM camera pose to an openGL camera pose.\n-\u00a0\n- _\bP_\bo_\bs_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL (const _\bP_\bo_\bs_\be_\b3 &PoseGTSAM)\n-\u00a0 This function converts a GTSAM camera pose to an openGL camera pose.\n-\u00a0\n- _\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be (const _\bS_\bf_\bm_\bD_\ba_\bt_\ba &db)\n-\u00a0 This function creates initial values for cameras from db.\n-\u00a0\n- _\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bA_\bn_\bd_\bP_\bo_\bi_\bn_\bt_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be (const _\bS_\bf_\bm_\bD_\ba_\bt_\ba &db)\n-\u00a0 This function creates initial values for cameras and points from db.\n+std::vector< _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\bf_\bm_\b:_\b:_\bt_\br_\ba_\bc_\bk_\bs_\bF_\br_\bo_\bm_\bP_\ba_\bi_\br_\bw_\bi_\bs_\be_\bM_\ba_\bt_\bc_\bh_\be_\bs (const\n+ MatchIndicesMap &matches, const KeypointsVector\n+ &keypoints, bool verbose)\n+\u00a0 Creates a list of tracks from 2d point\n+ correspondences.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Data structure for dealing with Structure from Motion data.\n+Identifies connected components in the keypoint matches graph.\n Date\n- January 2022\n+ October 2022\n Author\n- Frank dellaert\n+ John Lambert\n+*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0t\btr\bra\bac\bck\bks\bsF\bFr\bro\bom\bmP\bPa\bai\bir\brw\bwi\bis\bse\beM\bMa\bat\btc\bch\bhe\bes\bs(\b()\b) *\b**\b**\b**\b**\b*\n+std::vector< SfmTrack2d > gtsam::gtsfm:: ( const MatchIndicesMap &\u00a0 m\bma\bat\btc\bch\bhe\bes\bs,\n+tracksFromPairwiseMatches\n+ const KeypointsVector &\u00a0 k\bke\bey\byp\bpo\boi\bin\bnt\bts\bs,\n+ bool\u00a0 v\bve\ber\brb\bbo\bos\bse\be\u00a0\n+ )\n+Creates a list of tracks from 2d point correspondences.\n+Creates a disjoint-set forest (DSF) and 2d tracks from pairwise matches. We\n+create a singleton for union-find set elements from camera index of a detection\n+and the index of that detection in that camera's keypoint list, i.e. (i,k).\n+ Parameters\n+ Map from (i1,i2) image pair indices to (K,2) matrix, for K\n+ correspondence indices, from each image.\n+ Length-N list of keypoints, for N images/cameras.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b._\bh\n+ * _\bD_\bs_\bf_\bT_\br_\ba_\bc_\bk_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01199.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01199.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,12 +1,3 @@\n var a01199 = [\n- [\"gtsam::traits< SfmData >\", \"a04708.html\", null],\n- [\"SfmCamera\", \"a01199.html#acab0207730cf78822bdf274b50739d31\", null],\n- [\"gtsam2openGL\", \"a01199.html#ad632ed56581bf174eef379bbe272a06a\", null],\n- [\"gtsam2openGL\", \"a01199.html#aaff07ef70e6161c4d1d2bd7546ff91e6\", null],\n- [\"initialCamerasAndPointsEstimate\", \"a01199.html#aba34ed4a103d9057536ee5cac27cfdef\", null],\n- [\"initialCamerasEstimate\", \"a01199.html#ad8b55993353cbab0fde06b872783fe92\", null],\n- [\"openGL2gtsam\", \"a01199.html#ade6eca65dc0168a65f641961ca97924c\", null],\n- [\"readBal\", \"a01199.html#a710ec0322f4a2c0883841b58516b7a6a\", null],\n- [\"writeBAL\", \"a01199.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\", null],\n- [\"writeBALfromValues\", \"a01199.html#a4a2433812cf34ee359e3ec99f4f5bcc4\", null]\n+ [\"tracksFromPairwiseMatches\", \"a01199.html#ac50218675ff25e1e9202d335ecfa6b3a\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01202.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01202.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/TranslationFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.h File Reference\n \n \n \n \n \n \n \n@@ -95,44 +95,83 @@\n \n \n \n \n
\n \n-
TranslationFactor.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
SfmData.h File Reference
\n \n
\n \n-

Binary factor for a relative translation direction measurement. \n+

Data structure for dealing with Structure from Motion data. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::TranslationFactor
 Binary factor for a relative translation direction measurement w_aZb. More...
struct  gtsam::SfmData
 SfmData stores a bunch of SfmTracks. More...
 
struct  gtsam::traits< SfmData >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+

\n+Typedefs

\n+typedef PinholeCamera< Cal3Bundlergtsam::SfmCamera
 Define the structure for the camera poses.
 
\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+Functions

SfmData gtsam::readBal (const std::string &filename)
 This function parses a \"Bundle Adjustment in the Large\" (BAL) file and returns the data as a SfmData structure.
 
bool gtsam::writeBAL (const std::string &filename, const SfmData &data)
 This function writes a \"Bundle Adjustment in the Large\" (BAL) file from a SfmData structure.
 
bool gtsam::writeBALfromValues (const std::string &filename, const SfmData &data, const Values &values)
 This function writes a \"Bundle Adjustment in the Large\" (BAL) file from a SfmData structure and a value structure (measurements are the same as the SfM input data, while camera poses and values are read from Values)
 
Pose3 gtsam::openGL2gtsam (const Rot3 &R, double tx, double ty, double tz)
 This function converts an openGL camera pose to an GTSAM camera pose.
 
Pose3 gtsam::gtsam2openGL (const Rot3 &R, double tx, double ty, double tz)
 This function converts a GTSAM camera pose to an openGL camera pose.
 
Pose3 gtsam::gtsam2openGL (const Pose3 &PoseGTSAM)
 This function converts a GTSAM camera pose to an openGL camera pose.
 
Values gtsam::initialCamerasEstimate (const SfmData &db)
 This function creates initial values for cameras from db.
 
Values gtsam::initialCamerasAndPointsEstimate (const SfmData &db)
 This function creates initial values for cameras and points from db.
 
\n

Detailed Description

\n-

Binary factor for a relative translation direction measurement.

\n-
Author
Frank Dellaert
\n-
Date
March 2020
\n+

Data structure for dealing with Structure from Motion data.

\n+
Date
January 2022
\n+
Author
Frank dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,66 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-TranslationFactor.h File Reference\n-Binary factor for a relative translation direction measurement. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SfmData.h File Reference\n+Data structure for dealing with Structure from Motion data. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Binary factor for a relative translation direction measurement w_aZb.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba\n+\u00a0 _\bS_\bf_\bm_\bD_\ba_\bt_\ba stores a bunch of SfmTracks. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba< _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSf\bfm\bmC\bCa\bam\bme\ber\bra\ba\n+\u00a0 Define the structure for the camera\n+ poses.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+_\bS_\bf_\bm_\bD_\ba_\bt_\ba\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\be_\ba_\bd_\bB_\ba_\bl (const std::string &filename)\n+\u00a0 This function parses a \"Bundle Adjustment in the Large\" (BAL) file and\n+ returns the data as a _\bS_\bf_\bm_\bD_\ba_\bt_\ba structure.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bB_\bA_\bL (const std::string &filename, const _\bS_\bf_\bm_\bD_\ba_\bt_\ba &data)\n+\u00a0 This function writes a \"Bundle Adjustment in the Large\" (BAL) file\n+ from a _\bS_\bf_\bm_\bD_\ba_\bt_\ba structure.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bB_\bA_\bL_\bf_\br_\bo_\bm_\bV_\ba_\bl_\bu_\be_\bs (const std::string &filename, const _\bS_\bf_\bm_\bD_\ba_\bt_\ba\n+ &data, const _\bV_\ba_\bl_\bu_\be_\bs &values)\n+ This function writes a \"Bundle Adjustment in the Large\" (BAL) file\n+\u00a0 from a _\bS_\bf_\bm_\bD_\ba_\bt_\ba structure and a value structure (measurements are the\n+ same as the SfM input data, while camera poses and values are read\n+ from _\bV_\ba_\bl_\bu_\be_\bs)\n+\u00a0\n+ _\bP_\bo_\bs_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\bn_\bG_\bL_\b2_\bg_\bt_\bs_\ba_\bm (const _\bR_\bo_\bt_\b3 &R, double tx, double ty, double tz)\n+\u00a0 This function converts an openGL camera pose to an GTSAM camera pose.\n+\u00a0\n+ _\bP_\bo_\bs_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL (const _\bR_\bo_\bt_\b3 &R, double tx, double ty, double tz)\n+\u00a0 This function converts a GTSAM camera pose to an openGL camera pose.\n+\u00a0\n+ _\bP_\bo_\bs_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL (const _\bP_\bo_\bs_\be_\b3 &PoseGTSAM)\n+\u00a0 This function converts a GTSAM camera pose to an openGL camera pose.\n+\u00a0\n+ _\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be (const _\bS_\bf_\bm_\bD_\ba_\bt_\ba &db)\n+\u00a0 This function creates initial values for cameras from db.\n+\u00a0\n+ _\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bA_\bn_\bd_\bP_\bo_\bi_\bn_\bt_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be (const _\bS_\bf_\bm_\bD_\ba_\bt_\ba &db)\n+\u00a0 This function creates initial values for cameras and points from db.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Binary factor for a relative translation direction measurement.\n- Author\n- Frank Dellaert\n+Data structure for dealing with Structure from Motion data.\n Date\n- March 2020\n+ January 2022\n+ Author\n+ Frank dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01202_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01202_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/TranslationFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.h Source File\n \n \n \n \n \n \n \n@@ -98,91 +98,166 @@\n
No Matches
\n \n \n \n \n \n
\n-
TranslationFactor.h
\n+
SfmData.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12#pragma once
\n-
13
\n-\n-
22#include <gtsam/geometry/Unit3.h>
\n-\n-\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
\n-
42class TranslationFactor : public NoiseModelFactorN<Point3, Point3> {
\n-
43 private:
\n-\n-
45 Point3 measured_w_aZb_;
\n+
19#pragma once
\n+
20
\n+\n+\n+\n+\n+
25#include <gtsam/sfm/SfmTrack.h>
\n+
26
\n+
27#include <string>
\n+
28#include <vector>
\n+
29
\n+
30namespace gtsam {
\n+
31
\n+\n+
34
\n+
\n+
39struct GTSAM_EXPORT SfmData {
\n+
40 std::vector<SfmCamera> cameras;
\n+
41
\n+
42 std::vector<SfmTrack> tracks;
\n+
43
\n
46
\n-
47 public:
\n-\n-
50
\n-
51 TranslationFactor(Key a, Key b, const Unit3& w_aZb,
\n-
52 const SharedNoiseModel& noiseModel)
\n-
53 : Base(noiseModel, a, b), measured_w_aZb_(w_aZb.point3()) {}
\n+
53 static SfmData FromBundlerFile(const std::string& filename);
\n
54
\n-
\n-\n-
67 const Point3& Ta, const Point3& Tb,
\n-
68 boost::optional<Matrix&> H1 = boost::none,
\n-
69 boost::optional<Matrix&> H2 = boost::none) const override {
\n-
70 const Point3 dir = Tb - Ta;
\n-
71 Matrix33 H_predicted_dir;
\n-
72 const Point3 predicted = normalize(dir, H1 || H2 ? &H_predicted_dir : nullptr);
\n-
73 if (H1) *H1 = -H_predicted_dir;
\n-
74 if (H2) *H2 = H_predicted_dir;
\n-
75 return predicted - measured_w_aZb_;
\n-
76 }
\n-
\n-
77
\n-
78 private:
\n-
79 friend class boost::serialization::access;
\n-
80 template <class ARCHIVE>
\n-
81 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
82 ar& boost::serialization::make_nvp(
\n-
83 "Base", boost::serialization::base_object<Base>(*this));
\n-
84 }
\n-
85}; // \\ TranslationFactor
\n-
\n-
86} // namespace gtsam
\n-
3D Point
\n-\n-
Non-linear factor base classes.
\n+
61 static SfmData FromBalFile(const std::string& filename);
\n+
62
\n+
66
\n+
68 void addTrack(const SfmTrack& t) { tracks.push_back(t); }
\n+
69
\n+
71 void addCamera(const SfmCamera& cam) { cameras.push_back(cam); }
\n+
72
\n+
74 size_t numberTracks() const { return tracks.size(); }
\n+
75
\n+
77 size_t numberCameras() const { return cameras.size(); }
\n+
78
\n+
80 const SfmTrack& track(size_t idx) const { return tracks[idx]; }
\n+
81
\n+
83 const SfmCamera& camera(size_t idx) const { return cameras[idx]; }
\n+
84
\n+
86 const std::vector<SfmCamera>& cameraList() const { return cameras; }
\n+
87 const std::vector<SfmTrack>& trackList() const { return tracks; }
\n+
88
\n+
95 NonlinearFactorGraph generalSfmFactors(
\n+
96 const SharedNoiseModel& model = noiseModel::Isotropic::Sigma(2,
\n+
97 1.0)) const;
\n+
98
\n+
109 NonlinearFactorGraph sfmFactorGraph(
\n+
110 const SharedNoiseModel& model = noiseModel::Isotropic::Sigma(2, 1.0),
\n+
111 boost::optional<size_t> fixedCamera = 0,
\n+
112 boost::optional<size_t> fixedPoint = 0) const;
\n+
113
\n+
117
\n+
119 void print(const std::string& s = "") const;
\n+
120
\n+
122 bool equals(const SfmData& sfmData, double tol = 1e-9) const;
\n+
123
\n+
125#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
128 void GTSAM_DEPRECATED add_track(const SfmTrack& t) { tracks.push_back(t); }
\n+
129 void GTSAM_DEPRECATED add_camera(const SfmCamera& cam) {
\n+
130 cameras.push_back(cam);
\n+
131 }
\n+
132 size_t GTSAM_DEPRECATED number_tracks() const { return tracks.size(); }
\n+
133 size_t GTSAM_DEPRECATED number_cameras() const { return cameras.size(); }
\n+
135#endif
\n+
138
\n+
140 friend class boost::serialization::access;
\n+
141 template <class Archive>
\n+
142 void serialize(Archive& ar, const unsigned int /*version*/) {
\n+
143 ar& BOOST_SERIALIZATION_NVP(cameras);
\n+
144 ar& BOOST_SERIALIZATION_NVP(tracks);
\n+
145 }
\n+
146
\n+
148};
\n+
\n+
149
\n+
151template <>
\n+
152struct traits<SfmData> : public Testable<SfmData> {};
\n+
153
\n+
154#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
155GTSAM_EXPORT bool GTSAM_DEPRECATED readBundler(const std::string& filename,
\n+
156 SfmData& data);
\n+
157GTSAM_EXPORT bool GTSAM_DEPRECATED readBAL(const std::string& filename,
\n+
158 SfmData& data);
\n+
159#endif
\n+
160
\n+
167GTSAM_EXPORT SfmData readBal(const std::string& filename);
\n+
168
\n+
176GTSAM_EXPORT bool writeBAL(const std::string& filename, const SfmData& data);
\n+
177
\n+
190GTSAM_EXPORT bool writeBALfromValues(const std::string& filename,
\n+
191 const SfmData& data, const Values& values);
\n+
192
\n+
201GTSAM_EXPORT Pose3 openGL2gtsam(const Rot3& R, double tx, double ty, double tz);
\n+
202
\n+
211GTSAM_EXPORT Pose3 gtsam2openGL(const Rot3& R, double tx, double ty, double tz);
\n+
212
\n+
218GTSAM_EXPORT Pose3 gtsam2openGL(const Pose3& PoseGTSAM);
\n+
219
\n+
228GTSAM_EXPORT Values initialCamerasEstimate(const SfmData& db);
\n+
229
\n+
238GTSAM_EXPORT Values initialCamerasAndPointsEstimate(const SfmData& db);
\n+
239
\n+
240} // namespace gtsam
\n+
Calibration used by Bundler.
\n+
Base class for all pinhole cameras.
\n+
Factor Graph consisting of non-linear factors.
\n+
A non-templated config holding any types of Manifold-group elements.
\n+
A simple data structure for a track in Structure from Motion.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)
normalize, with optional Jacobian
Definition Point3.cpp:52
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Binary factor for a relative translation direction measurement w_aZb.
Definition TranslationFactor.h:42
\n-
TranslationFactor()
default constructor
Definition TranslationFactor.h:49
\n-
Vector evaluateError(const Point3 &Ta, const Point3 &Tb, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
Caclulate error: (norm(Tb - Ta) - measurement) where Tb and Ta are Point3 translations and measuremen...
Definition TranslationFactor.h:66
\n+
bool writeBAL(const std::string &filename, const SfmData &data)
This function writes a "Bundle Adjustment in the Large" (BAL) file from a SfmData structure.
Definition SfmData.cpp:249
\n+
bool writeBALfromValues(const std::string &filename, const SfmData &data, const Values &values)
This function writes a "Bundle Adjustment in the Large" (BAL) file from a SfmData structure and a val...
Definition SfmData.cpp:349
\n+
SfmData readBal(const std::string &filename)
This function parses a "Bundle Adjustment in the Large" (BAL) file and returns the data as a SfmData ...
Definition SfmData.cpp:344
\n+
Pose3 gtsam2openGL(const Rot3 &R, double tx, double ty, double tz)
This function converts a GTSAM camera pose to an openGL camera pose.
Definition SfmData.cpp:88
\n+
Values initialCamerasAndPointsEstimate(const SfmData &db)
This function creates initial values for cameras and points from db.
Definition SfmData.cpp:449
\n+
PinholeCamera< Cal3Bundler > SfmCamera
Define the structure for the camera poses.
Definition SfmData.h:33
\n+
Values initialCamerasEstimate(const SfmData &db)
This function creates initial values for cameras from db.
Definition SfmData.cpp:441
\n+
Pose3 openGL2gtsam(const Rot3 &R, double tx, double ty, double tz)
This function converts an openGL camera pose to an GTSAM camera pose.
Definition SfmData.cpp:79
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A pinhole camera class that has a Pose3 and a Calibration.
Definition PinholeCamera.h:33
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
SfmData stores a bunch of SfmTracks.
Definition SfmData.h:39
\n+
const std::vector< SfmCamera > & cameraList() const
Getters.
Definition SfmData.h:86
\n+
void addCamera(const SfmCamera &cam)
Add a camera to SfmData.
Definition SfmData.h:71
\n+
size_t numberCameras() const
The number of cameras.
Definition SfmData.h:77
\n+
size_t numberTracks() const
The number of reconstructed 3D points.
Definition SfmData.h:74
\n+
const SfmTrack & track(size_t idx) const
The track formed by series of landmark measurements.
Definition SfmData.h:80
\n+
void addTrack(const SfmTrack &t)
Add a track to SfmData.
Definition SfmData.h:68
\n+
const SfmCamera & camera(size_t idx) const
The camera pose at frame index idx
Definition SfmData.h:83
\n+
std::vector< SfmCamera > cameras
Set of cameras.
Definition SfmData.h:40
\n+
std::vector< SfmTrack > tracks
Sparse set of points.
Definition SfmData.h:42
\n+
Definition SfmTrack.h:126
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,113 +1,238 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-TranslationFactor.h\n+SfmData.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12#pragma once\n-13\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n-22#include \n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-_\b4_\b2class _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-43 private:\n-44 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bi_\bn_\bt_\b3_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b> _\bB_\ba_\bs_\be;\n-45 _\bP_\bo_\bi_\bn_\bt_\b3 measured_w_aZb_;\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh>\n+26\n+27#include \n+28#include \n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+_\b3_\b3typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b> _\bS_\bf_\bm_\bC_\ba_\bm_\be_\br_\ba;\n+34\n+_\b3_\b9struct GTSAM_EXPORT _\bS_\bf_\bm_\bD_\ba_\bt_\ba {\n+_\b4_\b0 std::vector _\bc_\ba_\bm_\be_\br_\ba_\bs;\n+41\n+_\b4_\b2 std::vector _\bt_\br_\ba_\bc_\bk_\bs;\n+43\n 46\n-47 public:\n-_\b4_\b9 _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-50\n-51 _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by a, _\bK_\be_\by b, const _\bU_\bn_\bi_\bt_\b3& w_aZb,\n-52 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& noiseModel)\n-53 : Base(noiseModel, a, b), measured_w_aZb_(w_aZb.point3()) {}\n+53 static _\bS_\bf_\bm_\bD_\ba_\bt_\ba FromBundlerFile(const std::string& filename);\n 54\n-_\b6_\b6 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(\n-67 const _\bP_\bo_\bi_\bn_\bt_\b3& Ta, const _\bP_\bo_\bi_\bn_\bt_\b3& Tb,\n-68 boost::optional H1 = boost::none,\n-69 boost::optional H2 = boost::none) const override {\n-70 const _\bP_\bo_\bi_\bn_\bt_\b3 dir = Tb - Ta;\n-71 Matrix33 H_predicted_dir;\n-72 const _\bP_\bo_\bi_\bn_\bt_\b3 predicted = _\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be(dir, H1 || H2 ? &H_predicted_dir :\n-nullptr);\n-73 if (H1) *H1 = -H_predicted_dir;\n-74 if (H2) *H2 = H_predicted_dir;\n-75 return predicted - measured_w_aZb_;\n-76 }\n-77\n-78 private:\n-79 friend class boost::serialization::access;\n-80 template \n-81 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-82 ar& boost::serialization::make_nvp(\n-83 \"Base\", boost::serialization::base_object(*this));\n-84 }\n-85}; // \\ TranslationFactor\n-86} // namespace gtsam\n-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+61 static _\bS_\bf_\bm_\bD_\ba_\bt_\ba FromBalFile(const std::string& filename);\n+62\n+66\n+_\b6_\b8 void _\ba_\bd_\bd_\bT_\br_\ba_\bc_\bk(const _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk& t) { tracks.push_back(t); }\n+69\n+_\b7_\b1 void _\ba_\bd_\bd_\bC_\ba_\bm_\be_\br_\ba(const _\bS_\bf_\bm_\bC_\ba_\bm_\be_\br_\ba& cam) { cameras.push_back(cam); }\n+72\n+_\b7_\b4 size_t _\bn_\bu_\bm_\bb_\be_\br_\bT_\br_\ba_\bc_\bk_\bs() const { return tracks.size(); }\n+75\n+_\b7_\b7 size_t _\bn_\bu_\bm_\bb_\be_\br_\bC_\ba_\bm_\be_\br_\ba_\bs() const { return cameras.size(); }\n+78\n+_\b8_\b0 const _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk& _\bt_\br_\ba_\bc_\bk(size_t idx) const { return tracks[idx]; }\n+81\n+_\b8_\b3 const _\bS_\bf_\bm_\bC_\ba_\bm_\be_\br_\ba& _\bc_\ba_\bm_\be_\br_\ba(size_t idx) const { return cameras[idx]; }\n+84\n+_\b8_\b6 const std::vector& _\bc_\ba_\bm_\be_\br_\ba_\bL_\bi_\bs_\bt() const { return cameras; }\n+87 const std::vector& trackList() const { return tracks; }\n+88\n+95 NonlinearFactorGraph generalSfmFactors(\n+96 const SharedNoiseModel& model = noiseModel::Isotropic::Sigma(2,\n+97 1.0)) const;\n+98\n+109 NonlinearFactorGraph sfmFactorGraph(\n+110 const SharedNoiseModel& model = noiseModel::Isotropic::Sigma(2, 1.0),\n+111 boost::optional fixedCamera = 0,\n+112 boost::optional fixedPoint = 0) const;\n+113\n+117\n+119 void print(const std::string& s = \"\") const;\n+120\n+122 bool equals(const SfmData& sfmData, double tol = 1e-9) const;\n+123\n+125#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+128 void GTSAM_DEPRECATED add_track(const SfmTrack& t) { tracks.push_back(t); }\n+129 void GTSAM_DEPRECATED add_camera(const SfmCamera& cam) {\n+130 cameras.push_back(cam);\n+131 }\n+132 size_t GTSAM_DEPRECATED number_tracks() const { return tracks.size(); }\n+133 size_t GTSAM_DEPRECATED number_cameras() const { return cameras.size(); }\n+135#endif\n+138\n+_\b1_\b4_\b0 friend class boost::serialization::access;\n+141 template \n+142 void serialize(Archive& ar, const unsigned int /*version*/) {\n+143 ar& BOOST_SERIALIZATION_NVP(cameras);\n+144 ar& BOOST_SERIALIZATION_NVP(tracks);\n+145 }\n+146\n+148};\n+149\n+151template <>\n+_\b1_\b5_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bf_\bm_\bD_\ba_\bt_\ba> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+153\n+154#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+155GTSAM_EXPORT bool GTSAM_DEPRECATED readBundler(const std::string& filename,\n+156 _\bS_\bf_\bm_\bD_\ba_\bt_\ba& data);\n+157GTSAM_EXPORT bool GTSAM_DEPRECATED readBAL(const std::string& filename,\n+158 _\bS_\bf_\bm_\bD_\ba_\bt_\ba& data);\n+159#endif\n+160\n+167GTSAM_EXPORT _\bS_\bf_\bm_\bD_\ba_\bt_\ba _\br_\be_\ba_\bd_\bB_\ba_\bl(const std::string& filename);\n+168\n+176GTSAM_EXPORT bool _\bw_\br_\bi_\bt_\be_\bB_\bA_\bL(const std::string& filename, const _\bS_\bf_\bm_\bD_\ba_\bt_\ba&\n+data);\n+177\n+190GTSAM_EXPORT bool _\bw_\br_\bi_\bt_\be_\bB_\bA_\bL_\bf_\br_\bo_\bm_\bV_\ba_\bl_\bu_\be_\bs(const std::string& filename,\n+191 const _\bS_\bf_\bm_\bD_\ba_\bt_\ba& data, const _\bV_\ba_\bl_\bu_\be_\bs& values);\n+192\n+201GTSAM_EXPORT _\bP_\bo_\bs_\be_\b3 _\bo_\bp_\be_\bn_\bG_\bL_\b2_\bg_\bt_\bs_\ba_\bm(const _\bR_\bo_\bt_\b3& R, double tx, double ty, double\n+tz);\n+202\n+211GTSAM_EXPORT _\bP_\bo_\bs_\be_\b3 _\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL(const _\bR_\bo_\bt_\b3& R, double tx, double ty, double\n+tz);\n+212\n+218GTSAM_EXPORT _\bP_\bo_\bs_\be_\b3 _\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL(const _\bP_\bo_\bs_\be_\b3& PoseGTSAM);\n+219\n+228GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bs _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be(const _\bS_\bf_\bm_\bD_\ba_\bt_\ba& db);\n+229\n+238GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bs _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bA_\bn_\bd_\bP_\bo_\bi_\bn_\bt_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be(const _\bS_\bf_\bm_\bD_\ba_\bt_\ba& db);\n+239\n+240} // namespace gtsam\n+_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n+Calibration used by Bundler.\n+_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+Base class for all pinhole cameras.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n+_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+A non-templated config holding any types of Manifold-group elements.\n+_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh\n+A simple data structure for a track in Structure from Motion.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be\n-Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)\n-normalize, with optional Jacobian\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-Binary factor for a relative translation direction measurement w_aZb.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-TranslationFactor()\n-default constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationFactor.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Point3 &Ta, const Point3 &Tb, boost::optional<\n-Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const\n-override\n-Caclulate error: (norm(Tb - Ta) - measurement) where Tb and Ta are Point3\n-translations and measuremen...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TranslationFactor.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bB_\bA_\bL\n+bool writeBAL(const std::string &filename, const SfmData &data)\n+This function writes a \"Bundle Adjustment in the Large\" (BAL) file from a\n+SfmData structure.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:249\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bB_\bA_\bL_\bf_\br_\bo_\bm_\bV_\ba_\bl_\bu_\be_\bs\n+bool writeBALfromValues(const std::string &filename, const SfmData &data, const\n+Values &values)\n+This function writes a \"Bundle Adjustment in the Large\" (BAL) file from a\n+SfmData structure and a val...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:349\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\be_\ba_\bd_\bB_\ba_\bl\n+SfmData readBal(const std::string &filename)\n+This function parses a \"Bundle Adjustment in the Large\" (BAL) file and returns\n+the data as a SfmData ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:344\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL\n+Pose3 gtsam2openGL(const Rot3 &R, double tx, double ty, double tz)\n+This function converts a GTSAM camera pose to an openGL camera pose.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bA_\bn_\bd_\bP_\bo_\bi_\bn_\bt_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be\n+Values initialCamerasAndPointsEstimate(const SfmData &db)\n+This function creates initial values for cameras and points from db.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:449\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bC_\ba_\bm_\be_\br_\ba\n+PinholeCamera< Cal3Bundler > SfmCamera\n+Define the structure for the camera poses.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be\n+Values initialCamerasEstimate(const SfmData &db)\n+This function creates initial values for cameras from db.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:441\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\bn_\bG_\bL_\b2_\bg_\bt_\bs_\ba_\bm\n+Pose3 openGL2gtsam(const Rot3 &R, double tx, double ty, double tz)\n+This function converts an openGL camera pose to an GTSAM camera pose.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n+A pinhole camera class that has a Pose3 and a Calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba\n+SfmData stores a bunch of SfmTracks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bL_\bi_\bs_\bt\n+const std::vector< SfmCamera > & cameraList() const\n+Getters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\ba_\bd_\bd_\bC_\ba_\bm_\be_\br_\ba\n+void addCamera(const SfmCamera &cam)\n+Add a camera to SfmData.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bn_\bu_\bm_\bb_\be_\br_\bC_\ba_\bm_\be_\br_\ba_\bs\n+size_t numberCameras() const\n+The number of cameras.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bn_\bu_\bm_\bb_\be_\br_\bT_\br_\ba_\bc_\bk_\bs\n+size_t numberTracks() const\n+The number of reconstructed 3D points.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bt_\br_\ba_\bc_\bk\n+const SfmTrack & track(size_t idx) const\n+The track formed by series of landmark measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\ba_\bd_\bd_\bT_\br_\ba_\bc_\bk\n+void addTrack(const SfmTrack &t)\n+Add a track to SfmData.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba\n+const SfmCamera & camera(size_t idx) const\n+The camera pose at frame index idx\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs\n+std::vector< SfmCamera > cameras\n+Set of cameras.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bt_\br_\ba_\bc_\bk_\bs\n+std::vector< SfmTrack > tracks\n+Sparse set of points.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:126\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01205.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01205.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/TranslationRecovery.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,44 +95,42 @@\n \n \n \n \n
\n \n-
MFAS.cpp File Reference
\n+
TranslationRecovery.cpp File Reference
\n
\n
\n \n-

Source file for the MFAS class. \n+

Source code for recovering translations when rotations are given. \n More...

\n \n \n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n

\n Functions

\n-unordered_map< Key, GraphNode > graphFromEdges (const map< MFAS::KeyPair, double > &edgeWeights)
 
\n-Key selectNextNodeInOrdering (const unordered_map< Key, GraphNode > &graph)
 
\n-double absWeightOfEdge (const Key key1, const Key key2, const map< MFAS::KeyPair, double > &edgeWeights)
 
\n-void removeNodeFromGraph (const Key node, const map< MFAS::KeyPair, double > edgeWeights, unordered_map< Key, GraphNode > &graph)
 
\n+DSFMap< KeygetSameTranslationDSFMap (const std::vector< BinaryMeasurement< Unit3 > > &relativeTranslations)
 
\n+template<typename T >
std::vector< BinaryMeasurement< T > > removeSameTranslationNodes (const std::vector< BinaryMeasurement< T > > &edges, const DSFMap< Key > &sameTranslationDSFMap)
 
\n+Values addSameTranslationNodes (const Values &result, const DSFMap< Key > &sameTranslationDSFMap)
 
\n

Detailed Description

\n-

Source file for the MFAS class.

\n-
Author
Akshay Krishnan
\n-
Date
July 2020
\n+

Source code for recovering translations when rotations are given.

\n+
Author
Frank Dellaert, Akshay Krishnan
\n+
Date
March 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-MFAS.cpp File Reference\n-Source file for the MFAS class. _\bM_\bo_\br_\be_\b._\b._\b.\n+TranslationRecovery.cpp File Reference\n+Source code for recovering translations when rotations are given. _\bM_\bo_\br_\be_\b._\b._\b.\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-unordered_map< _\bK_\be_\by, GraphNode >\u00a0 g\bgr\bra\bap\bph\bhF\bFr\bro\bom\bmE\bEd\bdg\bge\bes\bs (const map< MFAS::KeyPair,\n- double > &edgeWeights)\n+ _\bD_\bS_\bF_\bM_\ba_\bp< _\bK_\be_\by >\u00a0 g\bge\bet\btS\bSa\bam\bme\beT\bTr\bra\ban\bns\bsl\bla\bat\bti\bio\bon\bnD\bDS\bSF\bFM\bMa\bap\bp (const std::\n+ vector< _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< _\bU_\bn_\bi_\bt_\b3 > >\n+ &relativeTranslations)\n \u00a0\n- _\bK_\be_\by\u00a0 s\bse\bel\ble\bec\bct\btN\bNe\bex\bxt\btN\bNo\bod\bde\beI\bIn\bnO\bOr\brd\bde\ber\bri\bin\bng\bg (const unordered_map<\n- _\bK_\be_\by, GraphNode > &graph)\n+template\n+std::vector< _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< T > >\u00a0 r\bre\bem\bmo\bov\bve\beS\bSa\bam\bme\beT\bTr\bra\ban\bns\bsl\bla\bat\bti\bio\bon\bnN\bNo\bod\bde\bes\bs (const std::\n+ vector< _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< T > > &edges,\n+ const _\bD_\bS_\bF_\bM_\ba_\bp< _\bK_\be_\by >\n+ &sameTranslationDSFMap)\n \u00a0\n- double\u00a0 a\bab\bbs\bsW\bWe\bei\big\bgh\bht\btO\bOf\bfE\bEd\bdg\bge\be (const _\bK_\be_\by key1, const _\bK_\be_\by\n- key2, const map< MFAS::KeyPair, double >\n- &edgeWeights)\n-\u00a0\n- void\u00a0 r\bre\bem\bmo\bov\bve\beN\bNo\bod\bde\beF\bFr\bro\bom\bmG\bGr\bra\bap\bph\bh (const _\bK_\be_\by node, const\n- map< MFAS::KeyPair, double > edgeWeights,\n- unordered_map< _\bK_\be_\by, GraphNode > &graph)\n+ _\bV_\ba_\bl_\bu_\be_\bs\u00a0 a\bad\bdd\bdS\bSa\bam\bme\beT\bTr\bra\ban\bns\bsl\bla\bat\bti\bio\bon\bnN\bNo\bod\bde\bes\bs (const _\bV_\ba_\bl_\bu_\be_\bs\n+ &result, const _\bD_\bS_\bF_\bM_\ba_\bp< _\bK_\be_\by >\n+ &sameTranslationDSFMap)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Source file for the MFAS class.\n+Source code for recovering translations when rotations are given.\n Author\n- Akshay Krishnan\n+ Frank Dellaert, Akshay Krishnan\n Date\n- July 2020\n+ March 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bM_\bF_\bA_\bS_\b._\bc_\bp_\bp\n+ * _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01208.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01208.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanAveraging.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,36 +94,55 @@\n \n \n \n \n \n
\n \n-
ShonanAveraging.cpp File Reference
\n+Classes |\n+Namespaces |\n+Typedefs
\n+
ShonanFactor.h File Reference
\n \n
\n \n-

Shonan Averaging algorithm. \n+

Main factor type in Shonan averaging, on SO(n) pairs. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::ShonanFactor< d >
 ShonanFactor is a BetweenFactor that moves in SO(p), but will land on the SO(d) sub-manifold of SO(p) at the global minimum. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n

\n+Typedefs

\n+using gtsam::ShonanFactor2 = ShonanFactor< 2 >
 
\n+using gtsam::ShonanFactor3 = ShonanFactor< 3 >
 
\n

Detailed Description

\n-

Shonan Averaging algorithm.

\n-
Date
March 2019 - August 2020
\n-
Author
Frank Dellaert, David Rosen, and Jing Wu
\n+

Main factor type in Shonan averaging, on SO(n) pairs.

\n+
Date
March 2019
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ShonanAveraging.cpp File Reference\n-Shonan Averaging algorithm. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+ShonanFactor.h File Reference\n+Main factor type in Shonan averaging, on SO(n) pairs. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bd_\b _\b>\n+\u00a0 _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br is a _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br that moves in SO(p), but will land on\n+ the SO(d) sub-manifold of SO(p) at the global minimum. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bho\bon\bna\ban\bnF\bFa\bac\bct\bto\bor\br2\b2 = _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br< 2 >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSh\bho\bon\bna\ban\bnF\bFa\bac\bct\bto\bor\br3\b3 = _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br< 3 >\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Shonan Averaging algorithm.\n+Main factor type in Shonan averaging, on SO(n) pairs.\n Date\n- March 2019 - August 2020\n+ March 2019\n Author\n- Frank Dellaert, David Rosen, and Jing Wu\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b._\bc_\bp_\bp\n+ * _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01211.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01211.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/DsfTrackGenerator.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,94 +95,66 @@\n \n \n \n \n
\n \n-
DsfTrackGenerator.cpp File Reference
\n+
SfmData.cpp File Reference
\n
\n
\n \n-

Identifies connected components in the keypoint matches graph. \n+

Data structure for dealing with Structure from Motion data. \n More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-

\n-Typedefs

\n-typedef DSFMap< IndexPairgtsam::gtsfm::DSFMapIndexPair
 
\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 Functions

std::vector< SfmTrack2dgtsam::gtsfm::tracksFromPairwiseMatches (const MatchIndicesMap &matches, const KeypointsVector &keypoints, bool verbose)
 Creates a list of tracks from 2d point correspondences.
 
\n+Rot3 gtsam::openGLFixedRotation ()
 
Pose3 gtsam::openGL2gtsam (const Rot3 &R, double tx, double ty, double tz)
 This function converts an openGL camera pose to an GTSAM camera pose.
 
Pose3 gtsam::gtsam2openGL (const Rot3 &R, double tx, double ty, double tz)
 This function converts a GTSAM camera pose to an openGL camera pose.
 
Pose3 gtsam::gtsam2openGL (const Pose3 &PoseGTSAM)
 This function converts a GTSAM camera pose to an openGL camera pose.
 
bool gtsam::writeBAL (const std::string &filename, const SfmData &data)
 This function writes a \"Bundle Adjustment in the Large\" (BAL) file from a SfmData structure.
 
SfmData gtsam::readBal (const std::string &filename)
 This function parses a \"Bundle Adjustment in the Large\" (BAL) file and returns the data as a SfmData structure.
 
bool gtsam::writeBALfromValues (const std::string &filename, const SfmData &data, const Values &values)
 This function writes a \"Bundle Adjustment in the Large\" (BAL) file from a SfmData structure and a value structure (measurements are the same as the SfM input data, while camera poses and values are read from Values)
 
Values gtsam::initialCamerasEstimate (const SfmData &db)
 This function creates initial values for cameras from db.
 
Values gtsam::initialCamerasAndPointsEstimate (const SfmData &db)
 This function creates initial values for cameras and points from db.
 
\n

Detailed Description

\n-

Identifies connected components in the keypoint matches graph.

\n-
Date
October 2022
\n-
Author
John Lambert
\n-

Function Documentation

\n-\n-

◆ tracksFromPairwiseMatches()

\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-
std::vector< SfmTrack2d > gtsam::gtsfm::tracksFromPairwiseMatches (const MatchIndicesMap & matches,
const KeypointsVector & keypoints,
bool verbose 
)
\n-
\n-\n-

Creates a list of tracks from 2d point correspondences.

\n-

Creates a disjoint-set forest (DSF) and 2d tracks from pairwise matches. We create a singleton for union-find set elements from camera index of a detection and the index of that detection in that camera's keypoint list, i.e. (i,k).

\n-
Parameters
\n- \n- \n- \n-
Mapfrom (i1,i2) image pair indices to (K,2) matrix, for K correspondence indices, from each image.
Length-Nlist of keypoints, for N images/cameras.
\n-
\n-
\n-\n-
\n-
\n-
\n+

Data structure for dealing with Structure from Motion data.

\n+
Date
January 2022
\n+
Author
Frank dellaert
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,47 +1,55 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DsfTrackGenerator.cpp File Reference\n-Identifies connected components in the keypoint matches graph. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SfmData.cpp File Reference\n+Data structure for dealing with Structure from Motion data. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef _\bD_\bS_\bF_\bM_\ba_\bp< _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgt\bts\bsf\bfm\bm:\b::\b:D\bDS\bSF\bFM\bMa\bap\bpI\bIn\bnd\bde\bex\bxP\bPa\bai\bir\br\n-\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::vector< _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\bf_\bm_\b:_\b:_\bt_\br_\ba_\bc_\bk_\bs_\bF_\br_\bo_\bm_\bP_\ba_\bi_\br_\bw_\bi_\bs_\be_\bM_\ba_\bt_\bc_\bh_\be_\bs (const\n- MatchIndicesMap &matches, const KeypointsVector\n- &keypoints, bool verbose)\n-\u00a0 Creates a list of tracks from 2d point\n- correspondences.\n+ _\bR_\bo_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ben\bnG\bGL\bLF\bFi\bix\bxe\bed\bdR\bRo\bot\bta\bat\bti\bio\bon\bn ()\n+\u00a0\n+ _\bP_\bo_\bs_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\bn_\bG_\bL_\b2_\bg_\bt_\bs_\ba_\bm (const _\bR_\bo_\bt_\b3 &R, double tx, double ty, double tz)\n+\u00a0 This function converts an openGL camera pose to an GTSAM camera pose.\n+\u00a0\n+ _\bP_\bo_\bs_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL (const _\bR_\bo_\bt_\b3 &R, double tx, double ty, double tz)\n+\u00a0 This function converts a GTSAM camera pose to an openGL camera pose.\n+\u00a0\n+ _\bP_\bo_\bs_\be_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL (const _\bP_\bo_\bs_\be_\b3 &PoseGTSAM)\n+\u00a0 This function converts a GTSAM camera pose to an openGL camera pose.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bB_\bA_\bL (const std::string &filename, const _\bS_\bf_\bm_\bD_\ba_\bt_\ba &data)\n+\u00a0 This function writes a \"Bundle Adjustment in the Large\" (BAL) file\n+ from a _\bS_\bf_\bm_\bD_\ba_\bt_\ba structure.\n+\u00a0\n+_\bS_\bf_\bm_\bD_\ba_\bt_\ba\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\be_\ba_\bd_\bB_\ba_\bl (const std::string &filename)\n+\u00a0 This function parses a \"Bundle Adjustment in the Large\" (BAL) file and\n+ returns the data as a _\bS_\bf_\bm_\bD_\ba_\bt_\ba structure.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bB_\bA_\bL_\bf_\br_\bo_\bm_\bV_\ba_\bl_\bu_\be_\bs (const std::string &filename, const _\bS_\bf_\bm_\bD_\ba_\bt_\ba\n+ &data, const _\bV_\ba_\bl_\bu_\be_\bs &values)\n+ This function writes a \"Bundle Adjustment in the Large\" (BAL) file\n+\u00a0 from a _\bS_\bf_\bm_\bD_\ba_\bt_\ba structure and a value structure (measurements are the\n+ same as the SfM input data, while camera poses and values are read\n+ from _\bV_\ba_\bl_\bu_\be_\bs)\n+\u00a0\n+ _\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be (const _\bS_\bf_\bm_\bD_\ba_\bt_\ba &db)\n+\u00a0 This function creates initial values for cameras from db.\n+\u00a0\n+ _\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bA_\bn_\bd_\bP_\bo_\bi_\bn_\bt_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be (const _\bS_\bf_\bm_\bD_\ba_\bt_\ba &db)\n+\u00a0 This function creates initial values for cameras and points from db.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Identifies connected components in the keypoint matches graph.\n+Data structure for dealing with Structure from Motion data.\n Date\n- October 2022\n+ January 2022\n Author\n- John Lambert\n-*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0t\btr\bra\bac\bck\bks\bsF\bFr\bro\bom\bmP\bPa\bai\bir\brw\bwi\bis\bse\beM\bMa\bat\btc\bch\bhe\bes\bs(\b()\b) *\b**\b**\b**\b**\b*\n-std::vector< SfmTrack2d > gtsam::gtsfm:: ( const MatchIndicesMap &\u00a0 m\bma\bat\btc\bch\bhe\bes\bs,\n-tracksFromPairwiseMatches\n- const KeypointsVector &\u00a0 k\bke\bey\byp\bpo\boi\bin\bnt\bts\bs,\n- bool\u00a0 v\bve\ber\brb\bbo\bos\bse\be\u00a0\n- )\n-Creates a list of tracks from 2d point correspondences.\n-Creates a disjoint-set forest (DSF) and 2d tracks from pairwise matches. We\n-create a singleton for union-find set elements from camera index of a detection\n-and the index of that detection in that camera's keypoint list, i.e. (i,k).\n- Parameters\n- Map from (i1,i2) image pair indices to (K,2) matrix, for K\n- correspondence indices, from each image.\n- Length-N list of keypoints, for N images/cameras.\n+ Frank dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bD_\bs_\bf_\bT_\br_\ba_\bc_\bk_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01211.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01211.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,10 @@\n var a01211 = [\n- [\"tracksFromPairwiseMatches\", \"a01211.html#ac50218675ff25e1e9202d335ecfa6b3a\", null]\n+ [\"gtsam2openGL\", \"a01211.html#ad632ed56581bf174eef379bbe272a06a\", null],\n+ [\"gtsam2openGL\", \"a01211.html#aaff07ef70e6161c4d1d2bd7546ff91e6\", null],\n+ [\"initialCamerasAndPointsEstimate\", \"a01211.html#aba34ed4a103d9057536ee5cac27cfdef\", null],\n+ [\"initialCamerasEstimate\", \"a01211.html#ad8b55993353cbab0fde06b872783fe92\", null],\n+ [\"openGL2gtsam\", \"a01211.html#ade6eca65dc0168a65f641961ca97924c\", null],\n+ [\"readBal\", \"a01211.html#a710ec0322f4a2c0883841b58516b7a6a\", null],\n+ [\"writeBAL\", \"a01211.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\", null],\n+ [\"writeBALfromValues\", \"a01211.html#a4a2433812cf34ee359e3ec99f4f5bcc4\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01214.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01214.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanGaugeFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.h File Reference\n \n \n \n \n \n \n \n@@ -95,44 +95,63 @@\n \n \n \n \n
\n \n-
ShonanGaugeFactor.h File Reference
\n+Namespaces |\n+Typedefs
\n+
SfmTrack.h File Reference
\n \n
\n \n-

Factor used in Shonan Averaging to clamp down gauge freedom. \n+

A simple data structure for a track in Structure from Motion. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::ShonanGaugeFactor
 The ShonanGaugeFactor creates a constraint on a single SO(n) to avoid moving in the stabilizer. More...
struct  gtsam::SfmTrack2d
 Track containing 2D measurements associated with a single 3D point. More...
 
struct  gtsam::SfmTrack
 
struct  gtsam::traits< SfmTrack >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Typedefs

\n+typedef std::pair< size_t, Point2gtsam::SfmMeasurement
 A measurement with its camera index.
 
\n+typedef std::pair< size_t, size_t > gtsam::SiftIndex
 Sift index for SfmTrack.
 
\n+using gtsam::SfmTrack2dVector = std::vector< SfmTrack2d >
 
\n

Detailed Description

\n-

Factor used in Shonan Averaging to clamp down gauge freedom.

\n-
Date
March 2019
\n+

A simple data structure for a track in Structure from Motion.

\n+
Date
January 2022
\n
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,42 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ShonanGaugeFactor.h File Reference\n-Factor used in Shonan Averaging to clamp down gauge freedom. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+SfmTrack.h File Reference\n+A simple data structure for a track in Structure from Motion. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 The _\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br creates a constraint on a single SO(n) to avoid\n- moving in the stabilizer. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd\n+\u00a0 Track containing 2D measurements associated with a single 3D point.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef std::pair< size_t, _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSf\bfm\bmM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bt\n+\u00a0 A measurement with its camera index.\n+\u00a0\n+typedef std::pair< size_t, size_t >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSi\bif\bft\btI\bIn\bnd\bde\bex\bx\n+\u00a0 Sift index for _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk.\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSf\bfm\bmT\bTr\bra\bac\bck\bk2\b2d\bdV\bVe\bec\bct\bto\bor\br = std::vector<\n+ _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd >\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor used in Shonan Averaging to clamp down gauge freedom.\n+A simple data structure for a track in Structure from Motion.\n Date\n- March 2019\n+ January 2022\n Author\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01214.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01214.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,7 @@\n var a01214 = [\n- [\"gtsam::ShonanGaugeFactor\", \"a04748.html\", \"a04748\"]\n+ [\"gtsam::SfmTrack2d\", \"a04712.html\", \"a04712\"],\n+ [\"gtsam::SfmTrack\", \"a04716.html\", \"a04716\"],\n+ [\"gtsam::traits< SfmTrack >\", \"a04720.html\", null],\n+ [\"SfmMeasurement\", \"a01214.html#a9ad7940245bbbf4bf25d1dc4690b0108\", null],\n+ [\"SiftIndex\", \"a01214.html#a21a02e01a9608ce6cade24c1366b208c\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01214_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01214_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanGaugeFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.h Source File\n \n \n \n \n \n \n \n@@ -98,111 +98,199 @@\n
No Matches
\n \n \n \n \n \n
\n-
ShonanGaugeFactor.h
\n+
SfmTrack.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/geometry/SOn.h>
\n-\n-\n+\n+\n+\n
24
\n-
25namespace gtsam {
\n-
\n-
45class GTSAM_EXPORT ShonanGaugeFactor : public NonlinearFactor {
\n-
46 // Row dimension, equal to the dimensionality of SO(p-d)
\n-
47 size_t rows_;
\n-
48
\n-
50 boost::shared_ptr<JacobianFactor> whitenedJacobian_;
\n-
51
\n-
52public:
\n-
\n-
58 ShonanGaugeFactor(Key key, size_t p, size_t d = 3,
\n-
59 boost::optional<double> gamma = boost::none)
\n-\n-
61 if (p < d) {
\n-
62 throw std::invalid_argument("ShonanGaugeFactor must have p>=d.");
\n-
63 }
\n-
64 // Calculate dimensions
\n-
65 size_t q = p - d;
\n-
66 size_t P = SOn::Dimension(p); // dimensionality of SO(p)
\n-
67 rows_ = SOn::Dimension(q); // dimensionality of SO(q), the gauge
\n+
25#include <Eigen/Core>
\n+
26#include <string>
\n+
27#include <utility>
\n+
28#include <vector>
\n+
29
\n+
30namespace gtsam {
\n+
31
\n+
33typedef std::pair<size_t, Point2> SfmMeasurement;
\n+
34
\n+
36typedef std::pair<size_t, size_t> SiftIndex;
\n+
37
\n+
\n+
43struct GTSAM_EXPORT SfmTrack2d {
\n+
45 std::vector<SfmMeasurement> measurements;
\n+
46
\n+
48 std::vector<SiftIndex> siftIndices;
\n+
49
\n+
52
\n+
53 // Default constructor.
\n+
54 SfmTrack2d() = default;
\n+
55
\n+
56 // Constructor from measurements.
\n+
57 explicit SfmTrack2d(const std::vector<SfmMeasurement>& measurements)
\n+
58 : measurements(measurements) {}
\n+
59
\n+
63
\n+
\n+
65 void addMeasurement(size_t idx, const gtsam::Point2& m) {
\n+
66 measurements.emplace_back(idx, m);
\n+
67 }
\n+
\n
68
\n-
69 // Create constant Jacobian as a rows_*P matrix: there are rows_ penalized
\n-
70 // dimensions, but it is a bit tricky to find them among the P columns.
\n-
71 // The key is to look at how skew-symmetric matrices are laid out in SOn.h:
\n-
72 // the first tangent dimension will always be included, but beyond that we
\n-
73 // have to be careful. We always need to skip the d top-rows of the skew-
\n-
74 // symmetric matrix as they below to K, part of the Stiefel manifold.
\n-
75 Matrix A(rows_, P);
\n-
76 A.setZero();
\n-
77 double invSigma = gamma ? std::sqrt(*gamma) : 1.0;
\n-
78 size_t i = 0, j = 0, n = p - 1 - d;
\n-
79 while (i < rows_) {
\n-
80 A.block(i, j, n, n) = invSigma * Matrix::Identity(n, n);
\n-
81 i += n;
\n-
82 j += n + d; // skip d columns
\n-
83 n -= 1;
\n-
84 }
\n-
85 // TODO(frank): assign the right one in the right columns
\n-
86 whitenedJacobian_ =
\n-
87 boost::make_shared<JacobianFactor>(key, A, Vector::Zero(rows_));
\n-
88 }
\n-
\n-
89
\n-
91 ~ShonanGaugeFactor() override {}
\n-
92
\n-
94 double error(const Values &c) const override { return 0; }
\n-
95
\n-
97 size_t dim() const override { return rows_; }
\n+
70 size_t numberMeasurements() const { return measurements.size(); }
\n+
71
\n+
\n+
73 const SfmMeasurement& measurement(size_t idx) const {
\n+
74 return measurements[idx];
\n+
75 }
\n+
\n+
76
\n+
78 const SiftIndex& siftIndex(size_t idx) const { return siftIndices[idx]; }
\n+
79
\n+
\n+
84 bool hasUniqueCameras() const {
\n+
85 std::vector<int> track_cam_indices;
\n+
86 for (auto& measurement : measurements) {
\n+
87 track_cam_indices.emplace_back(measurement.first);
\n+
88 }
\n+
89 auto i =
\n+
90 std::adjacent_find(track_cam_indices.begin(), track_cam_indices.end());
\n+
91 bool all_cameras_unique = (i == track_cam_indices.end());
\n+
92 return all_cameras_unique;
\n+
93 }
\n+
\n+
94
\n
98
\n
\n-
100 boost::shared_ptr<GaussianFactor> linearize(const Values &c) const override {
\n-
101 return whitenedJacobian_;
\n-
102 }
\n-
\n-
103};
\n-
\n-
104// \\ShonanGaugeFactor
\n-
105
\n-
106} // namespace gtsam
\n-
N*N matrix representation of SO(N).
\n-\n-
Non-linear factor base classes.
\n+
100 Eigen::MatrixX2d measurementMatrix() const {
\n+
101 Eigen::MatrixX2d m(numberMeasurements(), 2);
\n+
102 for (size_t i = 0; i < numberMeasurements(); i++) {
\n+
103 m.row(i) = measurement(i).second;
\n+
104 }
\n+
105 return m;
\n+
106 }
\n+
\n+
107
\n+
\n+
109 Eigen::VectorXi indexVector() const {
\n+
110 Eigen::VectorXi v(numberMeasurements());
\n+
111 for (size_t i = 0; i < numberMeasurements(); i++) {
\n+
112 v(i) = measurement(i).first;
\n+
113 }
\n+
114 return v;
\n+
115 }
\n+
\n+
116
\n+
118};
\n+
\n+
119
\n+
120using SfmTrack2dVector = std::vector<SfmTrack2d>;
\n+
121
\n+
\n+
126struct GTSAM_EXPORT SfmTrack : SfmTrack2d {
\n+\n+
128 float r, g, b;
\n+
129
\n+
132
\n+
133 explicit SfmTrack(float r = 0, float g = 0, float b = 0)
\n+
134 : p(0, 0, 0), r(r), g(g), b(b) {}
\n+
135
\n+
136 explicit SfmTrack(const gtsam::Point3& pt, float r = 0, float g = 0,
\n+
137 float b = 0)
\n+
138 : p(pt), r(r), g(g), b(b) {}
\n+
139
\n+
143
\n+
145 const Point3& point3() const { return p; }
\n+
146
\n+
148 Point3 rgb() const { return Point3(r, g, b); }
\n+
149
\n+
153
\n+
155 void print(const std::string& s = "") const;
\n+
156
\n+
158 bool equals(const SfmTrack& sfmTrack, double tol = 1e-9) const;
\n+
159
\n+
161#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
164 void GTSAM_DEPRECATED add_measurement(size_t idx, const gtsam::Point2& m) {
\n+
165 measurements.emplace_back(idx, m);
\n+
166 }
\n+
167
\n+
168 size_t GTSAM_DEPRECATED number_measurements() const {
\n+
169 return measurements.size();
\n+
170 }
\n+
172#endif
\n+
175
\n+
177 friend class boost::serialization::access;
\n+
178 template <class ARCHIVE>
\n+
179 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
180 ar& BOOST_SERIALIZATION_NVP(p);
\n+
181 ar& BOOST_SERIALIZATION_NVP(r);
\n+
182 ar& BOOST_SERIALIZATION_NVP(g);
\n+
183 ar& BOOST_SERIALIZATION_NVP(b);
\n+
184 ar& BOOST_SERIALIZATION_NVP(measurements);
\n+
185 ar& BOOST_SERIALIZATION_NVP(siftIndices);
\n+
186 }
\n+
188};
\n+
\n+
189
\n+
190template <typename T>
\n+
191struct traits;
\n+
192
\n+
193template <>
\n+
194struct traits<SfmTrack> : public Testable<SfmTrack> {};
\n+
195
\n+
196} // namespace gtsam
\n+
Convenience functions for serializing data structures via boost.serialization.
\n+
3D Point
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
The ShonanGaugeFactor creates a constraint on a single SO(n) to avoid moving in the stabilizer.
Definition ShonanGaugeFactor.h:45
\n-
double error(const Values &c) const override
Calculate the error of the factor: always zero.
Definition ShonanGaugeFactor.h:94
\n-
~ShonanGaugeFactor() override
Destructor.
Definition ShonanGaugeFactor.h:91
\n-
boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override
linearize to a GaussianFactor
Definition ShonanGaugeFactor.h:100
\n-
size_t dim() const override
get the dimension of the factor (number of rows on linearization)
Definition ShonanGaugeFactor.h:97
\n-
ShonanGaugeFactor(Key key, size_t p, size_t d=3, boost::optional< double > gamma=boost::none)
Construct from key for an SO(p) matrix, for base dimension d (2 or 3) If parameter gamma is given,...
Definition ShonanGaugeFactor.h:58
\n+
std::pair< size_t, size_t > SiftIndex
Sift index for SfmTrack.
Definition SfmTrack.h:36
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n+
std::pair< size_t, Point2 > SfmMeasurement
A measurement with its camera index.
Definition SfmTrack.h:33
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
Track containing 2D measurements associated with a single 3D point.
Definition SfmTrack.h:43
\n+
void addMeasurement(size_t idx, const gtsam::Point2 &m)
Add measurement (camera_idx, Point2) to track.
Definition SfmTrack.h:65
\n+
const SfmMeasurement & measurement(size_t idx) const
Get the measurement (camera index, Point2) at pose index idx
Definition SfmTrack.h:73
\n+
std::vector< SiftIndex > siftIndices
The feature descriptors (optional)
Definition SfmTrack.h:48
\n+
const SiftIndex & siftIndex(size_t idx) const
Get the SIFT feature index corresponding to the measurement at idx
Definition SfmTrack.h:78
\n+
bool hasUniqueCameras() const
Check that no two measurements are from the same camera.
Definition SfmTrack.h:84
\n+
Eigen::MatrixX2d measurementMatrix() const
Return the measurements as a 2D matrix.
Definition SfmTrack.h:100
\n+
size_t numberMeasurements() const
Total number of measurements in this track.
Definition SfmTrack.h:70
\n+
std::vector< SfmMeasurement > measurements
The 2D image projections (id,(u,v))
Definition SfmTrack.h:45
\n+
Eigen::VectorXi indexVector() const
Return the camera indices of the measurements.
Definition SfmTrack.h:109
\n+
Definition SfmTrack.h:126
\n+
Point3 rgb() const
Get RGB values describing 3d point.
Definition SfmTrack.h:148
\n+
float b
RGB color of the 3D point.
Definition SfmTrack.h:128
\n+
const Point3 & point3() const
Get 3D point.
Definition SfmTrack.h:145
\n+
Point3 p
3D position of the point
Definition SfmTrack.h:127
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,132 +1,248 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ShonanGaugeFactor.h\n+SfmTrack.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\bn_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n 24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-_\b4_\b5class GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n-46 // Row dimension, equal to the dimensionality of SO(p-d)\n-47 size_t rows_;\n-48\n-50 boost::shared_ptr whitenedJacobian_;\n-51\n-52public:\n-_\b5_\b8 _\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, size_t p, size_t d = 3,\n-59 boost::optional gamma = boost::none)\n-60 : _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{key}) {\n-61 if (p < d) {\n-62 throw std::invalid_argument(\"ShonanGaugeFactor must have p>=d.\");\n-63 }\n-64 // Calculate dimensions\n-65 size_t q = p - d;\n-66 size_t P = SOn::Dimension(p); // dimensionality of SO(p)\n-67 rows_ = SOn::Dimension(q); // dimensionality of SO(q), the gauge\n+25#include \n+26#include \n+27#include \n+28#include \n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+_\b3_\b3typedef std::pair _\bS_\bf_\bm_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt;\n+34\n+_\b3_\b6typedef std::pair _\bS_\bi_\bf_\bt_\bI_\bn_\bd_\be_\bx;\n+37\n+_\b4_\b3struct GTSAM_EXPORT _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd {\n+_\b4_\b5 std::vector _\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs;\n+46\n+_\b4_\b8 std::vector _\bs_\bi_\bf_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n+49\n+52\n+53 // Default constructor.\n+54 _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd() = default;\n+55\n+56 // Constructor from measurements.\n+57 explicit _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd(const std::vector& measurements)\n+58 : measurements(measurements) {}\n+59\n+63\n+_\b6_\b5 void _\ba_\bd_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt(size_t idx, const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2& m) {\n+66 measurements.emplace_back(idx, m);\n+67 }\n 68\n-69 // Create constant Jacobian as a rows_*P matrix: there are rows_ penalized\n-70 // dimensions, but it is a bit tricky to find them among the P columns.\n-71 // The key is to look at how skew-symmetric matrices are laid out in SOn.h:\n-72 // the first tangent dimension will always be included, but beyond that we\n-73 // have to be careful. We always need to skip the d top-rows of the skew-\n-74 // symmetric matrix as they below to K, part of the Stiefel manifold.\n-75 Matrix A(rows_, P);\n-76 A.setZero();\n-77 double invSigma = gamma ? std::sqrt(*gamma) : 1.0;\n-78 size_t i = 0, j = 0, n = p - 1 - d;\n-79 while (i < rows_) {\n-80 A.block(i, j, n, n) = invSigma * Matrix::Identity(n, n);\n-81 i += n;\n-82 j += n + d; // skip d columns\n-83 n -= 1;\n-84 }\n-85 // TODO(frank): assign the right one in the right columns\n-86 whitenedJacobian_ =\n-87 boost::make_shared(key, A, Vector::Zero(rows_));\n+_\b7_\b0 size_t _\bn_\bu_\bm_\bb_\be_\br_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const { return measurements.size(); }\n+71\n+_\b7_\b3 const _\bS_\bf_\bm_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt& _\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt(size_t idx) const {\n+74 return measurements[idx];\n+75 }\n+76\n+_\b7_\b8 const _\bS_\bi_\bf_\bt_\bI_\bn_\bd_\be_\bx& _\bs_\bi_\bf_\bt_\bI_\bn_\bd_\be_\bx(size_t idx) const { return siftIndices[idx]; }\n+79\n+_\b8_\b4 bool _\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bC_\ba_\bm_\be_\br_\ba_\bs() const {\n+85 std::vector track_cam_indices;\n+86 for (auto& measurement : measurements) {\n+87 track_cam_indices.emplace_back(measurement.first);\n 88 }\n-89\n-_\b9_\b1 _\b~_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-92\n-_\b9_\b4 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs &c) const override { return 0; }\n-95\n-_\b9_\b7 size_t _\bd_\bi_\bm() const override { return rows_; }\n+89 auto i =\n+90 std::adjacent_find(track_cam_indices.begin(), track_cam_indices.end());\n+91 bool all_cameras_unique = (i == track_cam_indices.end());\n+92 return all_cameras_unique;\n+93 }\n+94\n 98\n-_\b1_\b0_\b0 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs &c) const override\n-{\n-101 return whitenedJacobian_;\n-102 }\n-103};\n-104// \\ShonanGaugeFactor\n-105\n-106} // namespace gtsam\n-_\bS_\bO_\bn_\b._\bh\n-N*N matrix representation of SO(N).\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+_\b1_\b0_\b0 Eigen::MatrixX2d _\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bM_\ba_\bt_\br_\bi_\bx() const {\n+101 Eigen::MatrixX2d m(numberMeasurements(), 2);\n+102 for (size_t i = 0; i < numberMeasurements(); i++) {\n+103 m.row(i) = measurement(i).second;\n+104 }\n+105 return m;\n+106 }\n+107\n+_\b1_\b0_\b9 Eigen::VectorXi _\bi_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br() const {\n+110 Eigen::VectorXi v(numberMeasurements());\n+111 for (size_t i = 0; i < numberMeasurements(); i++) {\n+112 v(i) = measurement(i).first;\n+113 }\n+114 return v;\n+115 }\n+116\n+118};\n+119\n+120using SfmTrack2dVector = std::vector;\n+121\n+_\b1_\b2_\b6struct GTSAM_EXPORT _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk : _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd {\n+_\b1_\b2_\b7 _\bP_\bo_\bi_\bn_\bt_\b3 _\bp;\n+_\b1_\b2_\b8 float r, g, _\bb;\n+129\n+132\n+133 explicit _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk(float r = 0, float g = 0, float b = 0)\n+134 : p(0, 0, 0), r(r), g(g), b(b) {}\n+135\n+136 explicit _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk(const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3& pt, float r = 0, float g = 0,\n+137 float b = 0)\n+138 : p(pt), r(r), g(g), b(b) {}\n+139\n+143\n+_\b1_\b4_\b5 const _\bP_\bo_\bi_\bn_\bt_\b3& _\bp_\bo_\bi_\bn_\bt_\b3() const { return p; }\n+146\n+_\b1_\b4_\b8 _\bP_\bo_\bi_\bn_\bt_\b3 _\br_\bg_\bb() const { return _\bP_\bo_\bi_\bn_\bt_\b3(r, g, b); }\n+149\n+153\n+155 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n+156\n+158 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk& sfmTrack, double tol = 1e-9) const;\n+159\n+161#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+164 void GTSAM_DEPRECATED add_measurement(size_t idx, const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2& m) {\n+165 measurements.emplace_back(idx, m);\n+166 }\n+167\n+168 size_t GTSAM_DEPRECATED number_measurements() const {\n+169 return measurements.size();\n+170 }\n+172#endif\n+175\n+_\b1_\b7_\b7 friend class boost::serialization::access;\n+178 template \n+179 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+180 ar& BOOST_SERIALIZATION_NVP(p);\n+181 ar& BOOST_SERIALIZATION_NVP(r);\n+182 ar& BOOST_SERIALIZATION_NVP(g);\n+183 ar& BOOST_SERIALIZATION_NVP(b);\n+184 ar& BOOST_SERIALIZATION_NVP(measurements);\n+185 ar& BOOST_SERIALIZATION_NVP(siftIndices);\n+186 }\n+188};\n+189\n+190template \n+191struct traits;\n+192\n+193template <>\n+_\b1_\b9_\b4struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+195\n+196} // namespace gtsam\n+_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+Convenience functions for serializing data structures via boost.serialization.\n+_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+3D Point\n+_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br\n-The ShonanGaugeFactor creates a constraint on a single SO(n) to avoid moving in\n-the stabilizer.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &c) const override\n-Calculate the error of the factor: always zero.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br\n-~ShonanGaugeFactor() override\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override\n-linearize to a GaussianFactor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-get the dimension of the factor (number of rows on linearization)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br\n-ShonanGaugeFactor(Key key, size_t p, size_t d=3, boost::optional< double >\n-gamma=boost::none)\n-Construct from key for an SO(p) matrix, for base dimension d (2 or 3) If\n-parameter gamma is given,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bf_\bt_\bI_\bn_\bd_\be_\bx\n+std::pair< size_t, size_t > SiftIndex\n+Sift index for SfmTrack.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+std::pair< size_t, Point2 > SfmMeasurement\n+A measurement with its camera index.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd\n+Track containing 2D measurements associated with a single 3D point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\ba_\bd_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+void addMeasurement(size_t idx, const gtsam::Point2 &m)\n+Add measurement (camera_idx, Point2) to track.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+const SfmMeasurement & measurement(size_t idx) const\n+Get the measurement (camera index, Point2) at pose index idx\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bs_\bi_\bf_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+std::vector< SiftIndex > siftIndices\n+The feature descriptors (optional)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bs_\bi_\bf_\bt_\bI_\bn_\bd_\be_\bx\n+const SiftIndex & siftIndex(size_t idx) const\n+Get the SIFT feature index corresponding to the measurement at idx\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bC_\ba_\bm_\be_\br_\ba_\bs\n+bool hasUniqueCameras() const\n+Check that no two measurements are from the same camera.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bM_\ba_\bt_\br_\bi_\bx\n+Eigen::MatrixX2d measurementMatrix() const\n+Return the measurements as a 2D matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bn_\bu_\bm_\bb_\be_\br_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+size_t numberMeasurements() const\n+Total number of measurements in this track.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+std::vector< SfmMeasurement > measurements\n+The 2D image projections (id,(u,v))\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bi_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+Eigen::VectorXi indexVector() const\n+Return the camera indices of the measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b:_\b:_\br_\bg_\bb\n+Point3 rgb() const\n+Get RGB values describing 3d point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:148\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b:_\b:_\bb\n+float b\n+RGB color of the 3D point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\b3\n+const Point3 & point3() const\n+Get 3D point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:145\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b:_\b:_\bp\n+Point3 p\n+3D position of the point\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:127\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01223_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01223_source.html", "unified_diff": "@@ -113,17 +113,17 @@\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#include <gtsam/geometry/Unit3.h>
\n-\n-\n-\n+\n+\n+\n
23
\n
24#include <map>
\n
25#include <set>
\n
26#include <utility>
\n
27#include <vector>
\n
28
\n
29namespace gtsam {
\n@@ -196,17 +196,17 @@\n
162 const Values &initialValues = Values()) const;
\n
163
\n
173 static TranslationEdges SimulateMeasurements(
\n
174 const Values &poses, const std::vector<KeyPair> &edges);
\n
175};
\n \n
176} // namespace gtsam
\n-
A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.
\n-
A non-templated config holding any types of Manifold-group elements.
\n-
Binary measurement represents a measurement between two keys in a graph. A binary measurement is simi...
\n+
A non-templated config holding any types of Manifold-group elements.
\n+
A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.
\n+
Binary measurement represents a measurement between two keys in a graph. A binary measurement is simi...
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
static shared_ptr Sigma(size_t dim, double sigma, bool smart=true)
An isotropic noise model created by specifying a standard devation sigma.
Definition NoiseModel.cpp:597
\n
Parameters for Levenberg-Marquardt optimization.
Definition LevenbergMarquardtParams.h:35
\n
Definition NonlinearFactorGraph.h:55
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
Definition BinaryMeasurement.h:36
\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -99,18 +99,18 @@\n 161 const std::vector<_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bP_\bo_\bi_\bn_\bt_\b3_\b>> &betweenTranslations = {},\n 162 const _\bV_\ba_\bl_\bu_\be_\bs &initialValues = _\bV_\ba_\bl_\bu_\be_\bs()) const;\n 163\n 173 static TranslationEdges _\bS_\bi_\bm_\bu_\bl_\ba_\bt_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n 174 const _\bV_\ba_\bl_\bu_\be_\bs &poses, const std::vector &edges);\n 175};\n 176} // namespace gtsam\n-_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n-A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n _\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n A non-templated config holding any types of Manifold-group elements.\n+_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n Binary measurement represents a measurement between two keys in a graph. A\n binary measurement is simi...\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01226.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01226.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,64 +94,45 @@\n \n \n \n \n \n
\n \n-
SfmTrack.h File Reference
\n+Functions
\n+
MFAS.cpp File Reference
\n \n
\n \n-

A simple data structure for a track in Structure from Motion. \n+

Source file for the MFAS class. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

struct  gtsam::SfmTrack2d
 Track containing 2D measurements associated with a single 3D point. More...
 
struct  gtsam::SfmTrack
 
struct  gtsam::traits< SfmTrack >
 
\n-\n-\n-\n-\n-

\n-Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n-Typedefs

\n-typedef std::pair< size_t, Point2gtsam::SfmMeasurement
 A measurement with its camera index.
 
\n-typedef std::pair< size_t, size_t > gtsam::SiftIndex
 Sift index for SfmTrack.
 
\n-using gtsam::SfmTrack2dVector = std::vector< SfmTrack2d >
 

\n+Functions

\n+unordered_map< Key, GraphNode > graphFromEdges (const map< MFAS::KeyPair, double > &edgeWeights)
 
\n+Key selectNextNodeInOrdering (const unordered_map< Key, GraphNode > &graph)
 
\n+double absWeightOfEdge (const Key key1, const Key key2, const map< MFAS::KeyPair, double > &edgeWeights)
 
\n+void removeNodeFromGraph (const Key node, const map< MFAS::KeyPair, double > edgeWeights, unordered_map< Key, GraphNode > &graph)
 
\n

Detailed Description

\n-

A simple data structure for a track in Structure from Motion.

\n-
Date
January 2022
\n-
Author
Frank Dellaert
\n+

Source file for the MFAS class.

\n+
Author
Akshay Krishnan
\n+
Date
July 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,42 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-SfmTrack.h File Reference\n-A simple data structure for a track in Structure from Motion. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd\n-\u00a0 Track containing 2D measurements associated with a single 3D point.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b _\b>\n-\u00a0\n-N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n-\u00a0 Global functions in a separate testing namespace.\n-\u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef std::pair< size_t, _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSf\bfm\bmM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bt\n-\u00a0 A measurement with its camera index.\n-\u00a0\n-typedef std::pair< size_t, size_t >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSi\bif\bft\btI\bIn\bnd\bde\bex\bx\n-\u00a0 Sift index for _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk.\n-\u00a0\n- using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSf\bfm\bmT\bTr\bra\bac\bck\bk2\b2d\bdV\bVe\bec\bct\bto\bor\br = std::vector<\n- _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd >\n+_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+MFAS.cpp File Reference\n+Source file for the MFAS class. _\bM_\bo_\br_\be_\b._\b._\b.\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+unordered_map< _\bK_\be_\by, GraphNode >\u00a0 g\bgr\bra\bap\bph\bhF\bFr\bro\bom\bmE\bEd\bdg\bge\bes\bs (const map< MFAS::KeyPair,\n+ double > &edgeWeights)\n+\u00a0\n+ _\bK_\be_\by\u00a0 s\bse\bel\ble\bec\bct\btN\bNe\bex\bxt\btN\bNo\bod\bde\beI\bIn\bnO\bOr\brd\bde\ber\bri\bin\bng\bg (const unordered_map<\n+ _\bK_\be_\by, GraphNode > &graph)\n+\u00a0\n+ double\u00a0 a\bab\bbs\bsW\bWe\bei\big\bgh\bht\btO\bOf\bfE\bEd\bdg\bge\be (const _\bK_\be_\by key1, const _\bK_\be_\by\n+ key2, const map< MFAS::KeyPair, double >\n+ &edgeWeights)\n+\u00a0\n+ void\u00a0 r\bre\bem\bmo\bov\bve\beN\bNo\bod\bde\beF\bFr\bro\bom\bmG\bGr\bra\bap\bph\bh (const _\bK_\be_\by node, const\n+ map< MFAS::KeyPair, double > edgeWeights,\n+ unordered_map< _\bK_\be_\by, GraphNode > &graph)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A simple data structure for a track in Structure from Motion.\n- Date\n- January 2022\n+Source file for the MFAS class.\n Author\n- Frank Dellaert\n+ Akshay Krishnan\n+ Date\n+ July 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh\n+ * _\bM_\bF_\bA_\bS_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01229.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01229.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/TranslationRecovery.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/BinaryMeasurement.h File Reference\n \n \n \n \n \n \n \n@@ -94,43 +94,44 @@\n \n \n \n \n \n
\n \n-
TranslationRecovery.cpp File Reference
\n+Classes |\n+Namespaces
\n+
BinaryMeasurement.h File Reference
\n \n
\n \n-

Source code for recovering translations when rotations are given. \n+

Binary measurement represents a measurement between two keys in a graph. A binary measurement is similar to a BetweenFactor, except that it does not contain an error function. It is a measurement (along with a noise model) from one key to another. Note that the direction is important. A measurement from key1 to key2 is not the same as the same measurement from key2 to key1. \n More...

\n+\n+

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+

\n-Functions

\n-DSFMap< KeygetSameTranslationDSFMap (const std::vector< BinaryMeasurement< Unit3 > > &relativeTranslations)
 
\n-template<typename T >
std::vector< BinaryMeasurement< T > > removeSameTranslationNodes (const std::vector< BinaryMeasurement< T > > &edges, const DSFMap< Key > &sameTranslationDSFMap)
 
\n-Values addSameTranslationNodes (const Values &result, const DSFMap< Key > &sameTranslationDSFMap)
 

\n+Classes

class  gtsam::BinaryMeasurement< T >
 
\n+\n+\n+\n+\n

\n+Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Source code for recovering translations when rotations are given.

\n-
Author
Frank Dellaert, Akshay Krishnan
\n-
Date
March 2020
\n+

Binary measurement represents a measurement between two keys in a graph. A binary measurement is similar to a BetweenFactor, except that it does not contain an error function. It is a measurement (along with a noise model) from one key to another. Note that the direction is important. A measurement from key1 to key2 is not the same as the same measurement from key2 to key1.

\n+
Author
Akshay Krishnan
\n+
Date
July 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,34 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-TranslationRecovery.cpp File Reference\n-Source code for recovering translations when rotations are given. _\bM_\bo_\br_\be_\b._\b._\b.\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- _\bD_\bS_\bF_\bM_\ba_\bp< _\bK_\be_\by >\u00a0 g\bge\bet\btS\bSa\bam\bme\beT\bTr\bra\ban\bns\bsl\bla\bat\bti\bio\bon\bnD\bDS\bSF\bFM\bMa\bap\bp (const std::\n- vector< _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< _\bU_\bn_\bi_\bt_\b3 > >\n- &relativeTranslations)\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+BinaryMeasurement.h File Reference\n+Binary measurement represents a measurement between two keys in a graph. A\n+binary measurement is similar to a BetweenFactor, except that it does not\n+contain an error function. It is a measurement (along with a noise model) from\n+one key to another. Note that the direction is important. A measurement from\n+key1 to key2 is not the same as the same measurement from key2 to key1. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\b _\bT_\b _\b>\n \u00a0\n-template\n-std::vector< _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< T > >\u00a0 r\bre\bem\bmo\bov\bve\beS\bSa\bam\bme\beT\bTr\bra\ban\bns\bsl\bla\bat\bti\bio\bon\bnN\bNo\bod\bde\bes\bs (const std::\n- vector< _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< T > > &edges,\n- const _\bD_\bS_\bF_\bM_\ba_\bp< _\bK_\be_\by >\n- &sameTranslationDSFMap)\n-\u00a0\n- _\bV_\ba_\bl_\bu_\be_\bs\u00a0 a\bad\bdd\bdS\bSa\bam\bme\beT\bTr\bra\ban\bns\bsl\bla\bat\bti\bio\bon\bnN\bNo\bod\bde\bes\bs (const _\bV_\ba_\bl_\bu_\be_\bs\n- &result, const _\bD_\bS_\bF_\bM_\ba_\bp< _\bK_\be_\by >\n- &sameTranslationDSFMap)\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n+\u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Source code for recovering translations when rotations are given.\n+Binary measurement represents a measurement between two keys in a graph. A\n+binary measurement is similar to a BetweenFactor, except that it does not\n+contain an error function. It is a measurement (along with a noise model) from\n+one key to another. Note that the direction is important. A measurement from\n+key1 to key2 is not the same as the same measurement from key2 to key1.\n Author\n- Frank Dellaert, Akshay Krishnan\n+ Akshay Krishnan\n Date\n- March 2020\n+ July 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bc_\bo_\bv_\be_\br_\by_\b._\bc_\bp_\bp\n+ * _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01232.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01232.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/DsfTrackGenerator.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanAveraging.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,109 +94,36 @@\n \n \n \n \n \n
\n \n-
DsfTrackGenerator.h File Reference
\n+Namespaces
\n+
ShonanAveraging.cpp File Reference
\n \n
\n \n-

Identifies connected components in the keypoint matches graph. \n+

Shonan Averaging algorithm. \n More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-

\n-Classes

struct  gtsam::gtsfm::Keypoints
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n-

\n-Typedefs

\n-typedef Eigen::MatrixX2i gtsam::gtsfm::CorrespondenceIndices
 
\n-using gtsam::gtsfm::KeypointsVector = std::vector< Keypoints >
 
\n-using gtsam::gtsfm::MatchIndicesMap = std::map< IndexPair, CorrespondenceIndices >
 
\n-\n-\n-\n-\n

\n-Functions

std::vector< SfmTrack2dgtsam::gtsfm::tracksFromPairwiseMatches (const MatchIndicesMap &matches, const KeypointsVector &keypoints, bool verbose)
 Creates a list of tracks from 2d point correspondences.
 
\n

Detailed Description

\n-

Identifies connected components in the keypoint matches graph.

\n-
Date
July 2022
\n-
Author
John Lambert
\n-

Function Documentation

\n-\n-

◆ tracksFromPairwiseMatches()

\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-
std::vector< SfmTrack2d > gtsam::gtsfm::tracksFromPairwiseMatches (const MatchIndicesMap & matches,
const KeypointsVector & keypoints,
bool verbose 
)
\n-
\n-\n-

Creates a list of tracks from 2d point correspondences.

\n-

Creates a disjoint-set forest (DSF) and 2d tracks from pairwise matches. We create a singleton for union-find set elements from camera index of a detection and the index of that detection in that camera's keypoint list, i.e. (i,k).

\n-
Parameters
\n- \n- \n- \n-
Mapfrom (i1,i2) image pair indices to (K,2) matrix, for K correspondence indices, from each image.
Length-Nlist of keypoints, for N images/cameras.
\n-
\n-
\n-\n-
\n-
\n-
\n+

Shonan Averaging algorithm.

\n+
Date
March 2019 - August 2020
\n+
Author
Frank Dellaert, David Rosen, and Jing Wu
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,57 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DsfTrackGenerator.h File Reference\n-Identifies connected components in the keypoint matches graph. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\bf_\bm_\b:_\b:_\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ShonanAveraging.cpp File Reference\n+Shonan Averaging algorithm. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef Eigen::MatrixX2i\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgt\bts\bsf\bfm\bm:\b::\b:C\bCo\bor\brr\bre\bes\bsp\bpo\bon\bnd\bde\ben\bnc\bce\beI\bIn\bnd\bdi\bic\bce\bes\bs\n-\u00a0\n- using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgt\bts\bsf\bfm\bm:\b::\b:K\bKe\bey\byp\bpo\boi\bin\bnt\bts\bsV\bVe\bec\bct\bto\bor\br = std::vector<\n- _\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs >\n-\u00a0\n- using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgt\bts\bsf\bfm\bm:\b::\b:M\bMa\bat\btc\bch\bhI\bIn\bnd\bdi\bic\bce\bes\bsM\bMa\bap\bp = std::map< _\bI_\bn_\bd_\be_\bx_\bP_\ba_\bi_\br,\n- CorrespondenceIndices >\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::vector< _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\bf_\bm_\b:_\b:_\bt_\br_\ba_\bc_\bk_\bs_\bF_\br_\bo_\bm_\bP_\ba_\bi_\br_\bw_\bi_\bs_\be_\bM_\ba_\bt_\bc_\bh_\be_\bs (const\n- MatchIndicesMap &matches, const KeypointsVector\n- &keypoints, bool verbose)\n-\u00a0 Creates a list of tracks from 2d point\n- correspondences.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Identifies connected components in the keypoint matches graph.\n+Shonan Averaging algorithm.\n Date\n- July 2022\n+ March 2019 - August 2020\n Author\n- John Lambert\n-*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0t\btr\bra\bac\bck\bks\bsF\bFr\bro\bom\bmP\bPa\bai\bir\brw\bwi\bis\bse\beM\bMa\bat\btc\bch\bhe\bes\bs(\b()\b) *\b**\b**\b**\b**\b*\n-std::vector< SfmTrack2d > gtsam::gtsfm:: ( const MatchIndicesMap &\u00a0 m\bma\bat\btc\bch\bhe\bes\bs,\n-tracksFromPairwiseMatches\n- const KeypointsVector &\u00a0 k\bke\bey\byp\bpo\boi\bin\bnt\bts\bs,\n- bool\u00a0 v\bve\ber\brb\bbo\bos\bse\be\u00a0\n- )\n-Creates a list of tracks from 2d point correspondences.\n-Creates a disjoint-set forest (DSF) and 2d tracks from pairwise matches. We\n-create a singleton for union-find set elements from camera index of a detection\n-and the index of that detection in that camera's keypoint list, i.e. (i,k).\n- Parameters\n- Map from (i1,i2) image pair indices to (K,2) matrix, for K\n- correspondence indices, from each image.\n- Length-N list of keypoints, for N images/cameras.\n+ Frank Dellaert, David Rosen, and Jing Wu\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bf_\bm\n- * _\bD_\bs_\bf_\bT_\br_\ba_\bc_\bk_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bh_\bo_\bn_\ba_\bn_\bA_\bv_\be_\br_\ba_\bg_\bi_\bn_\bg_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01241_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01241_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/TriangulationFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartFactorBase.h Source File\n \n \n \n \n \n \n \n@@ -98,245 +98,464 @@\n
No Matches
\n \n \n \n \n \n
\n-
TriangulationFactor.h
\n+
SmartFactorBase.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-\n-
22#include <boost/make_shared.hpp>
\n-
23#include <boost/lexical_cast.hpp>
\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
32template<class CAMERA>
\n-
\n-\n-
34
\n-
35public:
\n+
22#pragma once
\n+
23
\n+
24#include <gtsam/slam/JacobianFactorQ.h>
\n+
25#include <gtsam/slam/JacobianFactorSVD.h>
\n+\n+
27
\n+\n+\n+\n+
31
\n+
32#include <boost/optional.hpp>
\n+
33#include <boost/serialization/optional.hpp>
\n+
34#include <boost/make_shared.hpp>
\n+
35#include <vector>
\n
36
\n-
38 using Camera = CAMERA;
\n-
39
\n-
40protected:
\n-
41
\n-\n-
44
\n-\n-
47
\n-
49 using Measurement = typename CAMERA::Measurement;
\n-
50
\n-
51 // Keep a copy of measurement and calibration for I/O
\n-
52 const CAMERA camera_;
\n-\n-
54
\n-
55 // verbosity handling for Cheirality Exceptions
\n-
56 const bool throwCheirality_;
\n-
57 const bool verboseCheirality_;
\n-
58
\n-
59public:
\n-
60 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n-
61
\n-
63 using shared_ptr = boost::shared_ptr<This>;
\n+
37namespace gtsam {
\n+
38
\n+
49template<class CAMERA>
\n+
\n+\n+
51
\n+
52private:
\n+
53 typedef NonlinearFactor Base;
\n+
54 typedef SmartFactorBase<CAMERA> This;
\n+
55 typedef typename CAMERA::Measurement Z;
\n+
56 typedef typename CAMERA::MeasurementVector ZVector;
\n+
57
\n+
58public:
\n+
59
\n+
60 static const int Dim = traits<CAMERA>::dimension;
\n+
61 static const int ZDim = traits<Z>::dimension;
\n+
62 typedef Eigen::Matrix<double, ZDim, Dim> MatrixZD; // F blocks (derivatives wrpt camera)
\n+
63 typedef std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> > FBlocks; // vector of F blocks
\n
64
\n-
\n-\n-\n-
68 }
\n-
\n-
69
\n-
\n-
79 TriangulationFactor(const CAMERA& camera, const Measurement& measured,
\n-
80 const SharedNoiseModel& model, Key pointKey, bool throwCheirality = false,
\n-
81 bool verboseCheirality = false) :
\n-
82 Base(model, pointKey), camera_(camera), measured_(measured), throwCheirality_(
\n-\n-
84 if (model && model->dim() != traits<Measurement>::dimension)
\n-
85 throw std::invalid_argument(
\n-
86 "TriangulationFactor must be created with "
\n-
87 + boost::lexical_cast<std::string>((int) traits<Measurement>::dimension)
\n-
88 + "-dimensional noise model.");
\n-
89 }
\n-
\n-
90
\n-
\n-\n-
93 }
\n-
\n-
94
\n-
\n-
96 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
97 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
98 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
99 }
\n-
\n-
100
\n-
\n-
106 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
107 DefaultKeyFormatter) const override {
\n-
108 std::cout << s << "TriangulationFactor,";
\n-
109 camera_.print("camera");
\n-\n-
111 Base::print("", keyFormatter);
\n-
112 }
\n-
\n+
65protected:
\n+
72 SharedIsotropic noiseModel_;
\n+
73
\n+
79 ZVector measured_;
\n+
80
\n+
81 boost::optional<Pose3>
\n+\n+
83
\n+
84 // Cache for Fblocks, to avoid a malloc ever time we re-linearize
\n+
85 mutable FBlocks Fs;
\n+
86
\n+
87 public:
\n+\n+
89
\n+
91 typedef boost::shared_ptr<This> shared_ptr;
\n+
92
\n+\n+
95
\n+\n+
98
\n+
\n+
100 SmartFactorBase(const SharedNoiseModel& sharedNoiseModel,
\n+
101 boost::optional<Pose3> body_P_sensor = boost::none,
\n+
102 size_t expectedNumberCameras = 10)
\n+
103 : body_P_sensor_(body_P_sensor), Fs(expectedNumberCameras) {
\n+
104
\n+
105 if (!sharedNoiseModel)
\n+
106 throw std::runtime_error("SmartFactorBase: sharedNoiseModel is required");
\n+
107
\n+
108 SharedIsotropic sharedIsotropic = boost::dynamic_pointer_cast<
\n+
109 noiseModel::Isotropic>(sharedNoiseModel);
\n+
110
\n+
111 if (!sharedIsotropic)
\n+
112 throw std::runtime_error("SmartFactorBase: needs isotropic");
\n
113
\n-
\n-
115 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n-
116 const This *e = dynamic_cast<const This*>(&p);
\n-
117 return e && Base::equals(p, tol) && this->camera_.equals(e->camera_, tol)
\n-
118 && traits<Measurement>::Equals(this->measured_, e->measured_, tol);
\n+
114 noiseModel_ = sharedIsotropic;
\n+
115 }
\n+
\n+
116
\n+
\n+
118 ~SmartFactorBase() override {
\n
119 }
\n
\n
120
\n-
\n-
122 Vector evaluateError(const Point3& point, boost::optional<Matrix&> H2 =
\n-
123 boost::none) const override {
\n-
124 try {
\n-
125 return traits<Measurement>::Local(measured_, camera_.project2(point, boost::none, H2));
\n-
126 } catch (CheiralityException& e) {
\n-
127 if (H2)
\n-
128 *H2 = Matrix::Zero(traits<Measurement>::dimension, 3);
\n-\n-
130 std::cout << e.what() << ": Landmark "
\n-
131 << DefaultKeyFormatter(this->key()) << " moved behind camera"
\n-
132 << std::endl;
\n-\n-
134 throw e;
\n-
135 return camera_.defaultErrorWhenTriangulatingBehindCamera();
\n-
136 }
\n-
137 }
\n-
\n-
138
\n-\n-
141 mutable Matrix A;
\n-
142 mutable Vector b;
\n-
143
\n-
\n-
149 boost::shared_ptr<GaussianFactor> linearize(const Values& x) const override {
\n-
150 // Only linearize if the factor is active
\n-
151 if (!this->active(x))
\n-
152 return boost::shared_ptr<JacobianFactor>();
\n-
153
\n-
154 // Allocate memory for Jacobian factor, do only once
\n-
155 if (Ab.rows() == 0) {
\n-
156 std::vector<size_t> dimensions(1, 3);
\n-\n-\n-\n-
160 }
\n-
161
\n-
162 // Would be even better if we could pass blocks to project
\n-
163 const Point3& point = x.at<Point3>(key());
\n-
164 b = traits<Measurement>::Local(camera_.project2(point, boost::none, A), measured_);
\n-
165 if (noiseModel_)
\n-
166 this->noiseModel_->WhitenSystem(A, b);
\n-
167
\n-
168 Ab(0) = A;
\n-
169 Ab(1) = b;
\n-
170
\n-
171 return boost::make_shared<JacobianFactor>(this->keys_, Ab);
\n-
172 }
\n-
\n-
173
\n-
\n-
175 const Measurement& measured() const {
\n-
176 return measured_;
\n-
177 }
\n-
\n-
178
\n-
\n-
180 inline bool verboseCheirality() const {
\n-
181 return verboseCheirality_;
\n-
182 }
\n-
\n-
183
\n-
\n-
185 inline bool throwCheirality() const {
\n-
186 return throwCheirality_;
\n-
187 }
\n-
\n-
188
\n-
189private:
\n-
190
\n-\n-
193 template<class ARCHIVE>
\n-
194 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
195 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
196 ar & BOOST_SERIALIZATION_NVP(camera_);
\n-
197 ar & BOOST_SERIALIZATION_NVP(measured_);
\n-
198 ar & BOOST_SERIALIZATION_NVP(throwCheirality_);
\n-
199 ar & BOOST_SERIALIZATION_NVP(verboseCheirality_);
\n-
200 }
\n-
201};
\n-
\n-
202} // \\ namespace gtsam
\n-
203
\n-
Calibrated camera for which only pose is unknown.
\n-
Non-linear factor base classes.
\n+
\n+
126 void add(const Z& measured, const Key& key) {
\n+
127 if(std::find(keys_.begin(), keys_.end(), key) != keys_.end()) {
\n+
128 throw std::invalid_argument(
\n+
129 "SmartFactorBase::add: adding duplicate measurement for key.");
\n+
130 }
\n+
131 this->measured_.push_back(measured);
\n+
132 this->keys_.push_back(key);
\n+
133 }
\n+
\n+
134
\n+
\n+
136 void add(const ZVector& measurements, const KeyVector& cameraKeys) {
\n+
137 assert(measurements.size() == cameraKeys.size());
\n+
138 for (size_t i = 0; i < measurements.size(); i++) {
\n+
139 this->add(measurements[i], cameraKeys[i]);
\n+
140 }
\n+
141 }
\n+
\n+
142
\n+
147 template<class SFM_TRACK>
\n+
\n+
148 void add(const SFM_TRACK& trackToAdd) {
\n+
149 for (size_t k = 0; k < trackToAdd.numberMeasurements(); k++) {
\n+
150 this->measured_.push_back(trackToAdd.measurements[k].second);
\n+
151 this->keys_.push_back(trackToAdd.measurements[k].first);
\n+
152 }
\n+
153 }
\n+
\n+
154
\n+
156 size_t dim() const override { return ZDim * this->measured_.size(); }
\n+
157
\n+
159 const ZVector& measured() const { return measured_; }
\n+
160
\n+
\n+
162 virtual Cameras cameras(const Values& values) const {
\n+\n+
164 for(const Key& k: this->keys_)
\n+
165 cameras.push_back(values.at<CAMERA>(k));
\n+
166 return cameras;
\n+
167 }
\n+
\n+
168
\n+
\n+
174 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
175 DefaultKeyFormatter) const override {
\n+
176 std::cout << s << "SmartFactorBase, z = \\n";
\n+
177 for (size_t k = 0; k < measured_.size(); ++k) {
\n+
178 std::cout << "measurement " << k<<", px = \\n" << measured_[k] << "\\n";
\n+
179 noiseModel_->print("noise model = ");
\n+
180 }
\n+\n+
182 body_P_sensor_->print("body_P_sensor_:\\n");
\n+
183 Base::print("", keyFormatter);
\n+
184 }
\n+
\n+
185
\n+
\n+
187 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n+
188 if (const This* e = dynamic_cast<const This*>(&p)) {
\n+
189 // Check that all measurements are the same.
\n+
190 for (size_t i = 0; i < measured_.size(); i++) {
\n+
191 if (!traits<Z>::Equals(this->measured_.at(i), e->measured_.at(i), tol))
\n+
192 return false;
\n+
193 }
\n+
194 // If so, check base class.
\n+
195 return Base::equals(p, tol);
\n+
196 } else {
\n+
197 return false;
\n+
198 }
\n+
199 }
\n+
\n+
200
\n+
203 template <class POINT>
\n+
\n+\n+
205 const Cameras& cameras, const POINT& point,
\n+
206 boost::optional<typename Cameras::FBlocks&> Fs = boost::none, //
\n+
207 boost::optional<Matrix&> E = boost::none) const {
\n+
208 // Reproject, with optional derivatives.
\n+
209 Vector error = cameras.reprojectionError(point, measured_, Fs, E);
\n+
210
\n+
211 // Apply chain rule if body_P_sensor_ is given.
\n+
212 if (body_P_sensor_ && Fs) {
\n+
213 const Pose3 sensor_P_body = body_P_sensor_->inverse();
\n+
214 constexpr int camera_dim = traits<CAMERA>::dimension;
\n+
215 constexpr int pose_dim = traits<Pose3>::dimension;
\n+
216
\n+
217 for (size_t i = 0; i < Fs->size(); i++) {
\n+
218 const Pose3 world_P_body = cameras[i].pose() * sensor_P_body;
\n+
219 Eigen::Matrix<double, camera_dim, camera_dim> J;
\n+
220 J.setZero();
\n+
221 Eigen::Matrix<double, pose_dim, pose_dim> H;
\n+
222 // Call compose to compute Jacobian for camera extrinsics
\n+
223 world_P_body.compose(*body_P_sensor_, H);
\n+
224 // Assign extrinsics part of the Jacobian
\n+
225 J.template block<pose_dim, pose_dim>(0, 0) = H;
\n+
226 Fs->at(i) = Fs->at(i) * J;
\n+
227 }
\n+
228 }
\n+
229
\n+
230 // Correct the Jacobians in case some measurements are missing.
\n+\n+
232
\n+
233 return error;
\n+
234 }
\n+
\n+
235
\n+
\n+\n+
242 const Cameras& cameras, Vector& ue,
\n+
243 boost::optional<typename Cameras::FBlocks&> Fs = boost::none,
\n+
244 boost::optional<Matrix&> E = boost::none) const {}
\n+
\n+
245
\n+
250 template<class POINT>
\n+
\n+
251 Vector whitenedError(const Cameras& cameras, const POINT& point) const {
\n+
252 Vector error = cameras.reprojectionError(point, measured_);
\n+
253 if (noiseModel_)
\n+
254 noiseModel_->whitenInPlace(error);
\n+
255 return error;
\n+
256 }
\n+
\n+
257
\n+
266 template<class POINT>
\n+
\n+\n+
268 const POINT& point) const {
\n+
269 Vector error = whitenedError(cameras, point);
\n+
270 return 0.5 * error.dot(error);
\n+
271 }
\n+
\n+
272
\n+
\n+
274 static Matrix PointCov(const Matrix& E) {
\n+
275 return (E.transpose() * E).inverse();
\n+
276 }
\n+
\n+
277
\n+
284 template<class POINT>
\n+
\n+
285 void computeJacobians(FBlocks& Fs, Matrix& E, Vector& b,
\n+
286 const Cameras& cameras, const POINT& point) const {
\n+
287 // Project into Camera set and calculate derivatives
\n+
288 // As in expressionFactor, RHS vector b = - (h(x_bar) - z) = z-h(x_bar)
\n+
289 // Indeed, nonlinear error |h(x_bar+dx)-z| ~ |h(x_bar) + A*dx - z|
\n+
290 // = |A*dx - (z-h(x_bar))|
\n+
291 b = -unwhitenedError(cameras, point, Fs, E);
\n+
292 }
\n+
\n+
293
\n+
299 template<class POINT>
\n+
\n+
300 void computeJacobiansSVD(FBlocks& Fs, Matrix& Enull,
\n+
301 Vector& b, const Cameras& cameras, const POINT& point) const {
\n+
302
\n+
303 Matrix E;
\n+
304 computeJacobians(Fs, E, b, cameras, point);
\n+
305
\n+
306 static const int N = FixedDimension<POINT>::value; // 2 (Unit3) or 3 (Point3)
\n+
307
\n+
308 // Do SVD on A.
\n+
309 Eigen::JacobiSVD<Matrix> svd(E, Eigen::ComputeFullU);
\n+
310 size_t m = this->keys_.size();
\n+
311 Enull = svd.matrixU().block(0, N, ZDim * m, ZDim * m - N); // last ZDim*m-N columns
\n+
312 }
\n+
\n+
313
\n+
315 // TODO(dellaert): Not used/tested anywhere and not properly whitened.
\n+
\n+
316 boost::shared_ptr<RegularHessianFactor<Dim> > createHessianFactor(
\n+
317 const Cameras& cameras, const Point3& point, const double lambda = 0.0,
\n+
318 bool diagonalDamping = false) const {
\n+
319
\n+
320 Matrix E;
\n+
321 Vector b;
\n+
322 computeJacobians(Fs, E, b, cameras, point);
\n+
323
\n+
324 // build augmented hessian
\n+
325 SymmetricBlockMatrix augmentedHessian = Cameras::SchurComplement(Fs, E, b);
\n+
326
\n+
327 return boost::make_shared<RegularHessianFactor<Dim> >(keys_,
\n+
328 augmentedHessian);
\n+
329 }
\n+
\n+
330
\n+
\n+
336 void updateAugmentedHessian(const Cameras& cameras, const Point3& point,
\n+
337 const double lambda, bool diagonalDamping,
\n+
338 SymmetricBlockMatrix& augmentedHessian,
\n+
339 const KeyVector allKeys) const {
\n+
340 Matrix E;
\n+
341 Vector b;
\n+
342 computeJacobians(Fs, E, b, cameras, point);
\n+
343 Cameras::UpdateSchurComplement(Fs, E, b, allKeys, keys_, augmentedHessian);
\n+
344 }
\n+
\n+
345
\n+
\n+
347 void whitenJacobians(FBlocks& F, Matrix& E, Vector& b) const {
\n+
348 noiseModel_->WhitenSystem(E, b);
\n+
349 // TODO make WhitenInPlace work with any dense matrix type
\n+
350 for (size_t i = 0; i < F.size(); i++)
\n+
351 F[i] = noiseModel_->Whiten(F[i]);
\n+
352 }
\n+
\n+
353
\n+
355 boost::shared_ptr<RegularImplicitSchurFactor<CAMERA> > //
\n+
\n+\n+
357 double lambda = 0.0, bool diagonalDamping = false) const {
\n+
358 Matrix E;
\n+
359 Vector b;
\n+
360 FBlocks F;
\n+
361 computeJacobians(F, E, b, cameras, point);
\n+
362 whitenJacobians(F, E, b);
\n+
363 Matrix P = Cameras::PointCov(E, lambda, diagonalDamping);
\n+
364 return boost::make_shared<RegularImplicitSchurFactor<CAMERA> >(keys_, F, E,
\n+
365 P, b);
\n+
366 }
\n+
\n+
367
\n+
\n+
369 boost::shared_ptr<JacobianFactorQ<Dim, ZDim> > createJacobianQFactor(
\n+
370 const Cameras& cameras, const Point3& point, double lambda = 0.0,
\n+
371 bool diagonalDamping = false) const {
\n+
372 Matrix E;
\n+
373 Vector b;
\n+
374 FBlocks F;
\n+
375 computeJacobians(F, E, b, cameras, point);
\n+
376 const size_t M = b.size();
\n+
377 Matrix P = Cameras::PointCov(E, lambda, diagonalDamping);
\n+
378 SharedIsotropic n = noiseModel::Isotropic::Sigma(M, noiseModel_->sigma());
\n+
379 return boost::make_shared<JacobianFactorQ<Dim, ZDim> >(keys_, F, E, P, b, n);
\n+
380 }
\n+
\n+
381
\n+
\n+
386 boost::shared_ptr<JacobianFactor> createJacobianSVDFactor(
\n+
387 const Cameras& cameras, const Point3& point, double lambda = 0.0) const {
\n+
388 size_t m = this->keys_.size();
\n+
389 FBlocks F;
\n+
390 Vector b;
\n+
391 const size_t M = ZDim * m;
\n+
392 Matrix E0(M, M - 3);
\n+
393 computeJacobiansSVD(F, E0, b, cameras, point);
\n+
394 SharedIsotropic n = noiseModel::Isotropic::Sigma(M - 3,
\n+
395 noiseModel_->sigma());
\n+
396 return boost::make_shared<JacobianFactorSVD<Dim, ZDim> >(keys_, F, E0, b, n);
\n+
397 }
\n+
\n+
398
\n+
\n+
400 static void FillDiagonalF(const FBlocks& Fs, Matrix& F) {
\n+
401 size_t m = Fs.size();
\n+
402 F.resize(ZDim * m, Dim * m);
\n+
403 F.setZero();
\n+
404 for (size_t i = 0; i < m; ++i)
\n+
405 F.block<ZDim, Dim>(ZDim * i, Dim * i) = Fs.at(i);
\n+
406 }
\n+
\n+
407
\n+
408 // Return sensor pose.
\n+
409 Pose3 body_P_sensor() const{
\n+\n+
411 return *body_P_sensor_;
\n+
412 else
\n+
413 return Pose3(); // if unspecified, the transformation is the identity
\n+
414 }
\n+
415
\n+
416private:
\n+
417
\n+\n+
420 template<class ARCHIVE>
\n+
421 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
422 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
423 ar & BOOST_SERIALIZATION_NVP(noiseModel_);
\n+
424 ar & BOOST_SERIALIZATION_NVP(measured_);
\n+
425 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);
\n+
426 }
\n+
427};
\n+
\n+
428// end class SmartFactorBase
\n+
429
\n+
430// Definitions need to avoid link errors (above are only declarations)
\n+
431template<class CAMERA> const int SmartFactorBase<CAMERA>::Dim;
\n+
432template<class CAMERA> const int SmartFactorBase<CAMERA>::ZDim;
\n+
433
\n+
434} // \\ namespace gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Base class to create smart factors on poses or cameras.
\n+
HessianFactor class with constant sized blocks.
\n+
Non-linear factor base classes.
\n+
A subclass of GaussianFactor specialized to structureless SFM.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
void svd(const Matrix &A, Matrix &U, Vector &S, Matrix &V)
SVD computes economy SVD A=U*S*V'.
Definition Matrix.cpp:560
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n-
DenseIndex rows() const
Row size.
Definition VerticalBlockMatrix.h:115
\n-
Definition CalibratedCamera.h:32
\n+
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n+
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n+
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n+
Vector reprojectionError(const POINT &point, const ZVector &measured, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Calculate vector [project2(point)-z] of re-projection errors.
Definition CameraSet.h:136
\n+
static Matrix PointCov(const Matrix &E, const double lambda=0.0, bool diagonalDamping=false)
Computes Point Covariance P, with lambda parameter, dynamic version.
Definition CameraSet.h:331
\n+
static void UpdateSchurComplement(const FBlocks &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &allKeys, const KeyVector &keys, SymmetricBlockMatrix &augmentedHessian)
Applies Schur complement (exploiting block structure) to get a smart factor on cameras,...
Definition CameraSet.h:369
\n+
static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * ...
Definition CameraSet.h:150
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Pose3 inverse() const
inverse transformation with derivatives
Definition Pose3.cpp:49
\n
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
An isotropic noise model corresponds to a scaled diagonal covariance To construct,...
Definition NoiseModel.h:516
\n+
static shared_ptr Sigma(size_t dim, double sigma, bool smart=true)
An isotropic noise model created by specifying a standard devation sigma.
Definition NoiseModel.cpp:597
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
virtual bool equals(const NonlinearFactor &f, double tol=1e-9) const
Check if two factors are equal.
Definition NonlinearFactor.cpp:47
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition NonlinearFactor.cpp:37
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n-
Non-linear factor for a constraint derived from a 2D measurement.
Definition TriangulationFactor.h:33
\n-
VerticalBlockMatrix Ab
thread-safe (?) scratch memory for linearize
Definition TriangulationFactor.h:140
\n-
const bool throwCheirality_
If true, rethrows Cheirality exceptions (default: false)
Definition TriangulationFactor.h:56
\n-
bool throwCheirality() const
return flag for throwing cheirality exceptions
Definition TriangulationFactor.h:185
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition TriangulationFactor.h:106
\n-
Vector evaluateError(const Point3 &point, boost::optional< Matrix & > H2=boost::none) const override
Evaluate error h(x)-z and optionally derivatives.
Definition TriangulationFactor.h:122
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition TriangulationFactor.h:96
\n-
boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override
Linearize to a JacobianFactor, does not support constrained noise model ! Hence .
Definition TriangulationFactor.h:149
\n-
TriangulationFactor(const CAMERA &camera, const Measurement &measured, const SharedNoiseModel &model, Key pointKey, bool throwCheirality=false, bool verboseCheirality=false)
Constructor with exception-handling flags.
Definition TriangulationFactor.h:79
\n-
typename CAMERA::Measurement Measurement
shorthand for measurement type, e.g. Point2 or StereoPoint2
Definition TriangulationFactor.h:49
\n-
const Measurement & measured() const
return the measurement
Definition TriangulationFactor.h:175
\n-
bool verboseCheirality() const
return verbosity
Definition TriangulationFactor.h:180
\n-
CAMERA Camera
CAMERA type.
Definition TriangulationFactor.h:38
\n-
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition TriangulationFactor.h:115
\n-
~TriangulationFactor() override
Virtual destructor.
Definition TriangulationFactor.h:92
\n-
const bool verboseCheirality_
If true, prints text for Cheirality exceptions (default: false)
Definition TriangulationFactor.h:57
\n-
friend class boost::serialization::access
Serialization function.
Definition TriangulationFactor.h:192
\n-
TriangulationFactor()
Default constructor.
Definition TriangulationFactor.h:66
\n-
TriangulationFactor< CAMERA > This
shorthand for this class
Definition TriangulationFactor.h:46
\n-
const Measurement measured_
2D measurement
Definition TriangulationFactor.h:53
\n-
boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor
Definition TriangulationFactor.h:63
\n-
const CAMERA camera_
CAMERA in which this landmark was seen.
Definition TriangulationFactor.h:52
\n+
Base class for smart factors.
Definition SmartFactorBase.h:50
\n+
void computeJacobians(FBlocks &Fs, Matrix &E, Vector &b, const Cameras &cameras, const POINT &point) const
Compute F, E, and b (called below in both vanilla and SVD versions), where F is a vector of derivativ...
Definition SmartFactorBase.h:285
\n+
void add(const Z &measured, const Key &key)
Add a new measurement and pose/camera key.
Definition SmartFactorBase.h:126
\n+
~SmartFactorBase() override
Virtual destructor, subclasses from NonlinearFactor.
Definition SmartFactorBase.h:118
\n+
void updateAugmentedHessian(const Cameras &cameras, const Point3 &point, const double lambda, bool diagonalDamping, SymmetricBlockMatrix &augmentedHessian, const KeyVector allKeys) const
Add the contribution of the smart factor to a pre-allocated Hessian, using sparse linear algebra.
Definition SmartFactorBase.h:336
\n+
boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > > createRegularImplicitSchurFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0, bool diagonalDamping=false) const
Return Jacobians as RegularImplicitSchurFactor with raw access.
Definition SmartFactorBase.h:356
\n+
SharedIsotropic noiseModel_
As of Feb 22, 2015, the noise model is the same for all measurements and is isotropic.
Definition SmartFactorBase.h:72
\n+
static const int Dim
Camera dimension.
Definition SmartFactorBase.h:60
\n+
Vector whitenedError(const Cameras &cameras, const POINT &point) const
Calculate vector of re-projection errors [h(x)-z] = [cameras.project(p) - z], with the noise model ap...
Definition SmartFactorBase.h:251
\n+
virtual Cameras cameras(const Values &values) const
Collect all cameras: important that in key order.
Definition SmartFactorBase.h:162
\n+
static void FillDiagonalF(const FBlocks &Fs, Matrix &F)
Create BIG block-diagonal matrix F from Fblocks.
Definition SmartFactorBase.h:400
\n+
double totalReprojectionError(const Cameras &cameras, const POINT &point) const
Calculate the error of the factor.
Definition SmartFactorBase.h:267
\n+
void add(const ZVector &measurements, const KeyVector &cameraKeys)
Add a bunch of measurements, together with the camera keys.
Definition SmartFactorBase.h:136
\n+
boost::shared_ptr< RegularHessianFactor< Dim > > createHessianFactor(const Cameras &cameras, const Point3 &point, const double lambda=0.0, bool diagonalDamping=false) const
Linearize to a Hessianfactor.
Definition SmartFactorBase.h:316
\n+
void computeJacobiansSVD(FBlocks &Fs, Matrix &Enull, Vector &b, const Cameras &cameras, const POINT &point) const
SVD version that produces smaller Jacobian matrices by doing an SVD decomposition on E,...
Definition SmartFactorBase.h:300
\n+
ZVector measured_
Measurements for each of the m views.
Definition SmartFactorBase.h:79
\n+
GTSAM_MAKE_ALIGNED_OPERATOR_NEW typedef boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor.
Definition SmartFactorBase.h:91
\n+
Vector unwhitenedError(const Cameras &cameras, const POINT &point, boost::optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Compute reprojection errors [h(x)-z] = [cameras.project(p)-z] and derivatives.
Definition SmartFactorBase.h:204
\n+
SmartFactorBase()
Default Constructor, for serialization.
Definition SmartFactorBase.h:97
\n+
void whitenJacobians(FBlocks &F, Matrix &E, Vector &b) const
Whiten the Jacobians computed by computeJacobians using noiseModel_.
Definition SmartFactorBase.h:347
\n+
SmartFactorBase(const SharedNoiseModel &sharedNoiseModel, boost::optional< Pose3 > body_P_sensor=boost::none, size_t expectedNumberCameras=10)
Construct with given noise model and optional arguments.
Definition SmartFactorBase.h:100
\n+
void add(const SFM_TRACK &trackToAdd)
Add an entire SfM_track (collection of cameras observing a single point).
Definition SmartFactorBase.h:148
\n+
const ZVector & measured() const
Return the 2D measurements (ZDim, in general).
Definition SmartFactorBase.h:159
\n+
boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0) const
Return Jacobians as JacobianFactorSVD.
Definition SmartFactorBase.h:386
\n+
size_t dim() const override
Return the dimension (number of rows!) of the factor.
Definition SmartFactorBase.h:156
\n+
boost::shared_ptr< JacobianFactorQ< Dim, ZDim > > createJacobianQFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0, bool diagonalDamping=false) const
Return Jacobians as JacobianFactorQ.
Definition SmartFactorBase.h:369
\n+
friend class boost::serialization::access
Serialization function.
Definition SmartFactorBase.h:419
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartFactorBase.h:174
\n+
boost::optional< Pose3 > body_P_sensor_
Pose of the camera in the body frame.
Definition SmartFactorBase.h:82
\n+
virtual void correctForMissingMeasurements(const Cameras &cameras, Vector &ue, boost::optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
This corrects the Jacobians for the case in which some 2D measurement is missing (nan).
Definition SmartFactorBase.h:241
\n+
static const int ZDim
Measurement dimension.
Definition SmartFactorBase.h:61
\n+
static Matrix PointCov(const Matrix &E)
Computes Point Covariance P from the "point Jacobian" E.
Definition SmartFactorBase.h:274
\n+
CameraSet< CAMERA > Cameras
The CameraSet data structure is used to refer to a set of cameras.
Definition SmartFactorBase.h:94
\n+
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartFactorBase.h:187
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,184 +1,379 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-TriangulationFactor.h\n+SmartFactorBase.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n-22#include \n-23#include \n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-32template\n-_\b3_\b3class _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-34\n-35public:\n+22#pragma once\n+23\n+24#include \n+25#include \n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+27\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh>\n+31\n+32#include \n+33#include \n+34#include \n+35#include \n 36\n-_\b3_\b8 using _\bC_\ba_\bm_\be_\br_\ba = CAMERA;\n-39\n-40protected:\n-41\n-_\b4_\b3 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bi_\bn_\bt_\b3_\b>;\n-44\n-_\b4_\b6 using _\bT_\bh_\bi_\bs = _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>;\n-47\n-_\b4_\b9 using _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt = typename CAMERA::Measurement;\n-50\n-51 // Keep a copy of measurement and calibration for I/O\n-_\b5_\b2 const CAMERA _\bc_\ba_\bm_\be_\br_\ba_\b_;\n-_\b5_\b3 const _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-54\n-55 // verbosity handling for Cheirality Exceptions\n-_\b5_\b6 const bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n-_\b5_\b7 const bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n-58\n-59public:\n-60 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n-61\n-_\b6_\b3 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n+37namespace _\bg_\bt_\bs_\ba_\bm {\n+38\n+49template\n+_\b5_\b0class _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n+51\n+52private:\n+53 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n+54 typedef _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> This;\n+55 typedef typename CAMERA::Measurement Z;\n+56 typedef typename CAMERA::MeasurementVector ZVector;\n+57\n+58public:\n+59\n+_\b6_\b0 static const int _\bD_\bi_\bm = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+_\b6_\b1 static const int _\bZ_\bD_\bi_\bm = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bZ_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+62 typedef Eigen::Matrix MatrixZD; // F blocks (derivatives\n+wrpt camera)\n+63 typedef std::vector > FBlocks;\n+// vector of F blocks\n 64\n-_\b6_\b6 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() :\n-67 _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false) {\n-68 }\n-69\n-_\b7_\b9 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const CAMERA& camera, const _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd,\n-80 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model, _\bK_\be_\by pointKey, bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by = false,\n-81 bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by = false) :\n-82 _\bB_\ba_\bs_\be(model, pointKey), _\bc_\ba_\bm_\be_\br_\ba_\b_(camera), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd),\n-_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(\n-83 _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by) {\n-84 if (model && model->dim() != _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn)\n-85 throw std::invalid_argument(\n-86 \"TriangulationFactor must be created with \"\n-87 + boost::lexical_cast((int) _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn)\n-88 + \"-dimensional noise model.\");\n-89 }\n-90\n-_\b9_\b2 _\b~_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {\n-93 }\n-94\n-_\b9_\b6 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-97 return boost::static_pointer_cast(\n-98 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n-99 }\n-100\n-_\b1_\b0_\b6 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-107 DefaultKeyFormatter) const override {\n-108 std::cout << s << \"TriangulationFactor,\";\n-109 _\bc_\ba_\bm_\be_\br_\ba_\b_.print(\"camera\");\n-110 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, \"z\");\n-111 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n-112 }\n+65protected:\n+_\b7_\b2 SharedIsotropic _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_;\n+73\n+_\b7_\b9 ZVector _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+80\n+81 boost::optional\n+_\b8_\b2 _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_;\n+83\n+84 // Cache for Fblocks, to avoid a malloc ever time we re-linearize\n+85 mutable FBlocks Fs;\n+86\n+87 public:\n+88 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+89\n+_\b9_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+92\n+_\b9_\b4 typedef _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> _\bC_\ba_\bm_\be_\br_\ba_\bs;\n+95\n+_\b9_\b7 _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be() {}\n+98\n+_\b1_\b0_\b0 _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& sharedNoiseModel,\n+101 boost::optional body_P_sensor = boost::none,\n+102 size_t expectedNumberCameras = 10)\n+103 : _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_(body_P_sensor), Fs(expectedNumberCameras) {\n+104\n+105 if (!sharedNoiseModel)\n+106 throw std::runtime_error(\"SmartFactorBase: sharedNoiseModel is required\");\n+107\n+108 SharedIsotropic sharedIsotropic = boost::dynamic_pointer_cast<\n+109 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc>(sharedNoiseModel);\n+110\n+111 if (!sharedIsotropic)\n+112 throw std::runtime_error(\"SmartFactorBase: needs isotropic\");\n 113\n-_\b1_\b1_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n-116 const _\bT_\bh_\bi_\bs *e = dynamic_cast(&p);\n-117 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol) && this->camera_.equals(e->camera_, tol)\n-118 && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_, e->measured_, tol);\n+114 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_ = sharedIsotropic;\n+115 }\n+116\n+_\b1_\b1_\b8 _\b~_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be() override {\n 119 }\n 120\n-_\b1_\b2_\b2 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b3& point, boost::optional H2 =\n-123 boost::none) const override {\n-124 try {\n-125 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, _\bc_\ba_\bm_\be_\br_\ba_\b_.project2(point,\n-boost::none, H2));\n-126 } catch (_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn& e) {\n-127 if (H2)\n-128 *H2 = Matrix::Zero(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, 3);\n-129 if (_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_)\n-130 std::cout << e.what() << \": Landmark \"\n-131 << DefaultKeyFormatter(this->_\bk_\be_\by()) << \" moved behind camera\"\n-132 << std::endl;\n-133 if (_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_)\n-134 throw e;\n-135 return _\bc_\ba_\bm_\be_\br_\ba_\b_.defaultErrorWhenTriangulatingBehindCamera();\n-136 }\n-137 }\n-138\n-_\b1_\b4_\b0 mutable _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bA_\bb;\n-141 mutable Matrix A;\n-142 mutable Vector b;\n-143\n-_\b1_\b4_\b9 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& x) const override\n-{\n-150 // Only linearize if the factor is active\n-151 if (!this->_\ba_\bc_\bt_\bi_\bv_\be(x))\n-152 return boost::shared_ptr();\n-153\n-154 // Allocate memory for Jacobian factor, do only once\n-155 if (_\bA_\bb._\br_\bo_\bw_\bs() == 0) {\n-156 std::vector dimensions(1, 3);\n-157 _\bA_\bb = _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(dimensions, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, true);\n-158 A.resize(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn,3);\n-159 b.resize(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n-160 }\n-161\n-162 // Would be even better if we could pass blocks to project\n-163 const _\bP_\bo_\bi_\bn_\bt_\b3& point = x._\ba_\bt<_\bP_\bo_\bi_\bn_\bt_\b3>(_\bk_\be_\by());\n-164 b = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(_\bc_\ba_\bm_\be_\br_\ba_\b_.project2(point, boost::none, A),\n-_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-165 if (noiseModel_)\n-166 this->noiseModel_->WhitenSystem(A, b);\n-167\n-168 _\bA_\bb(0) = A;\n-169 _\bA_\bb(1) = b;\n-170\n-171 return boost::make_shared(this->_\bk_\be_\by_\bs_\b_, Ab);\n-172 }\n-173\n-_\b1_\b7_\b5 const _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n-176 return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-177 }\n-178\n-_\b1_\b8_\b0 inline bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const {\n-181 return _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n-182 }\n-183\n-_\b1_\b8_\b5 inline bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const {\n-186 return _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n-187 }\n-188\n-189private:\n-190\n-_\b1_\b9_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-193 template\n-194 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-195 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-196 ar & BOOST_SERIALIZATION_NVP(_\bc_\ba_\bm_\be_\br_\ba_\b_);\n-197 ar & BOOST_SERIALIZATION_NVP(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-198 ar & BOOST_SERIALIZATION_NVP(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_);\n-199 ar & BOOST_SERIALIZATION_NVP(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_);\n-200 }\n-201};\n-202} // \\ namespace gtsam\n-203\n-_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n-Calibrated camera for which only pose is unknown.\n+_\b1_\b2_\b6 void _\ba_\bd_\bd(const Z& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bK_\be_\by& key) {\n+127 if(std::find(_\bk_\be_\by_\bs_\b_.begin(), _\bk_\be_\by_\bs_\b_.end(), key) != _\bk_\be_\by_\bs_\b_.end()) {\n+128 throw std::invalid_argument(\n+129 \"SmartFactorBase::add: adding duplicate measurement for key.\");\n+130 }\n+131 this->measured_.push_back(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd);\n+132 this->_\bk_\be_\by_\bs_\b_.push_back(key);\n+133 }\n+134\n+_\b1_\b3_\b6 void _\ba_\bd_\bd(const ZVector& measurements, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& cameraKeys) {\n+137 assert(measurements.size() == cameraKeys.size());\n+138 for (size_t i = 0; i < measurements.size(); i++) {\n+139 this->_\ba_\bd_\bd(measurements[i], cameraKeys[i]);\n+140 }\n+141 }\n+142\n+147 template\n+_\b1_\b4_\b8 void _\ba_\bd_\bd(const SFM_TRACK& trackToAdd) {\n+149 for (size_t k = 0; k < trackToAdd.numberMeasurements(); k++) {\n+150 this->measured_.push_back(trackToAdd.measurements[k].second);\n+151 this->_\bk_\be_\by_\bs_\b_.push_back(trackToAdd.measurements[k].first);\n+152 }\n+153 }\n+154\n+_\b1_\b5_\b6 size_t _\bd_\bi_\bm() const override { return _\bZ_\bD_\bi_\bm * this->measured_.size(); }\n+157\n+_\b1_\b5_\b9 const ZVector& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const { return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_; }\n+160\n+_\b1_\b6_\b2 virtual _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n+163 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs;\n+164 for(const _\bK_\be_\by& k: this->_\bk_\be_\by_\bs_\b_)\n+165 cameras.push_back(values._\ba_\bt(k));\n+166 return _\bc_\ba_\bm_\be_\br_\ba_\bs;\n+167 }\n+168\n+_\b1_\b7_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+175 DefaultKeyFormatter) const override {\n+176 std::cout << s << \"SmartFactorBase, z = \\n\";\n+177 for (size_t k = 0; k < _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.size(); ++k) {\n+178 std::cout << \"measurement \" << k<<\", px = \\n\" << _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_[k] << \"\\n\";\n+179 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->print(\"noise model = \");\n+180 }\n+181 if(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_)\n+182 _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_->print(\"body_P_sensor_:\\n\");\n+183 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n+184 }\n+185\n+_\b1_\b8_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n+188 if (const This* e = dynamic_cast(&p)) {\n+189 // Check that all measurements are the same.\n+190 for (size_t i = 0; i < _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.size(); i++) {\n+191 if (!_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bZ_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_.at(i), e->measured_.at(i), tol))\n+192 return false;\n+193 }\n+194 // If so, check base class.\n+195 return _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol);\n+196 } else {\n+197 return false;\n+198 }\n+199 }\n+200\n+203 template \n+_\b2_\b0_\b4 Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(\n+205 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const POINT& point,\n+206 boost::optional Fs = boost::none, //\n+207 boost::optional E = boost::none) const {\n+208 // Reproject, with optional derivatives.\n+209 Vector error = _\bc_\ba_\bm_\be_\br_\ba_\bs._\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(point, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, Fs, E);\n+210\n+211 // Apply chain rule if body_P_sensor_ is given.\n+212 if (_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_ && Fs) {\n+213 const _\bP_\bo_\bs_\be_\b3 sensor_P_body = _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_->_\bi_\bn_\bv_\be_\br_\bs_\be();\n+214 constexpr int camera_dim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+215 constexpr int pose_dim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bs_\be_\b3_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+216\n+217 for (size_t i = 0; i < Fs->size(); i++) {\n+218 const _\bP_\bo_\bs_\be_\b3 world_P_body = _\bc_\ba_\bm_\be_\br_\ba_\bs[i].pose() * sensor_P_body;\n+219 Eigen::Matrix J;\n+220 J.setZero();\n+221 Eigen::Matrix H;\n+222 // Call compose to compute Jacobian for camera extrinsics\n+223 world_P_body.compose(*_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_, H);\n+224 // Assign extrinsics part of the Jacobian\n+225 J.template block(0, 0) = H;\n+226 Fs->at(i) = Fs->at(i) * J;\n+227 }\n+228 }\n+229\n+230 // Correct the Jacobians in case some measurements are missing.\n+231 _\bc_\bo_\br_\br_\be_\bc_\bt_\bF_\bo_\br_\bM_\bi_\bs_\bs_\bi_\bn_\bg_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(_\bc_\ba_\bm_\be_\br_\ba_\bs, error, Fs, E);\n+232\n+233 return error;\n+234 }\n+235\n+_\b2_\b4_\b1 virtual void _\bc_\bo_\br_\br_\be_\bc_\bt_\bF_\bo_\br_\bM_\bi_\bs_\bs_\bi_\bn_\bg_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n+242 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, Vector& ue,\n+243 boost::optional Fs = boost::none,\n+244 boost::optional E = boost::none) const {}\n+245\n+250 template\n+_\b2_\b5_\b1 Vector _\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const POINT& point) const {\n+252 Vector error = _\bc_\ba_\bm_\be_\br_\ba_\bs._\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(point, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+253 if (_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_)\n+254 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->whitenInPlace(error);\n+255 return error;\n+256 }\n+257\n+266 template\n+_\b2_\b6_\b7 double _\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs,\n+268 const POINT& point) const {\n+269 Vector error = _\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n+270 return 0.5 * error.dot(error);\n+271 }\n+272\n+_\b2_\b7_\b4 static Matrix _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv(const Matrix& E) {\n+275 return (E.transpose() * E).inverse();\n+276 }\n+277\n+284 template\n+_\b2_\b8_\b5 void _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(FBlocks& Fs, Matrix& E, Vector& b,\n+286 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const POINT& point) const {\n+287 // Project into Camera set and calculate derivatives\n+288 // As in expressionFactor, RHS vector b = - (h(x_bar) - z) = z-h(x_bar)\n+289 // Indeed, nonlinear error |h(x_bar+dx)-z| ~ |h(x_bar) + A*dx - z|\n+290 // = |A*dx - (z-h(x_bar))|\n+291 b = -_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, point, Fs, E);\n+292 }\n+293\n+299 template\n+_\b3_\b0_\b0 void _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD(FBlocks& Fs, Matrix& Enull,\n+301 Vector& b, const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const POINT& point) const {\n+302\n+303 Matrix E;\n+304 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n+305\n+306 static const int N = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bP_\bO_\bI_\bN_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be; // 2 (Unit3) or 3\n+(Point3)\n+307\n+308 // Do SVD on A.\n+309 Eigen::JacobiSVD _\bs_\bv_\bd(E, Eigen::ComputeFullU);\n+310 size_t m = this->_\bk_\be_\by_\bs_\b_.size();\n+311 Enull = _\bs_\bv_\bd.matrixU().block(0, N, _\bZ_\bD_\bi_\bm * m, _\bZ_\bD_\bi_\bm * m - N); // last ZDim*m-\n+N columns\n+312 }\n+313\n+315 // TODO(dellaert): Not used/tested anywhere and not properly whitened.\n+_\b3_\b1_\b6 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n+317 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const _\bP_\bo_\bi_\bn_\bt_\b3& point, const double lambda = 0.0,\n+318 bool diagonalDamping = false) const {\n+319\n+320 Matrix E;\n+321 Vector b;\n+322 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n+323\n+324 // build augmented hessian\n+325 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessian = _\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(Fs, E, b);\n+326\n+327 return boost::make_shared >(_\bk_\be_\by_\bs_\b_,\n+328 augmentedHessian);\n+329 }\n+330\n+_\b3_\b3_\b6 void _\bu_\bp_\bd_\ba_\bt_\be_\bA_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bH_\be_\bs_\bs_\bi_\ba_\bn(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const _\bP_\bo_\bi_\bn_\bt_\b3& point,\n+337 const double lambda, bool diagonalDamping,\n+338 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& augmentedHessian,\n+339 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br allKeys) const {\n+340 Matrix E;\n+341 Vector b;\n+342 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n+343 _\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(Fs, E, b, allKeys, _\bk_\be_\by_\bs_\b_, augmentedHessian);\n+344 }\n+345\n+_\b3_\b4_\b7 void _\bw_\bh_\bi_\bt_\be_\bn_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(FBlocks& F, Matrix& E, Vector& b) const {\n+348 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->WhitenSystem(E, b);\n+349 // TODO make WhitenInPlace work with any dense matrix type\n+350 for (size_t i = 0; i < F.size(); i++)\n+351 F[i] = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->Whiten(F[i]);\n+352 }\n+353\n+355 boost::shared_ptr > //\n+_\b3_\b5_\b6 _\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const _\bP_\bo_\bi_\bn_\bt_\b3&\n+point,\n+357 double lambda = 0.0, bool diagonalDamping = false) const {\n+358 Matrix E;\n+359 Vector b;\n+360 FBlocks F;\n+361 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(F, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n+362 _\bw_\bh_\bi_\bt_\be_\bn_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(F, E, b);\n+363 Matrix P = _\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv(E, lambda, diagonalDamping);\n+364 return boost::make_shared >(_\bk_\be_\by_\bs_\b_, F, E,\n+365 P, b);\n+366 }\n+367\n+_\b3_\b6_\b9 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(\n+370 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const _\bP_\bo_\bi_\bn_\bt_\b3& point, double lambda = 0.0,\n+371 bool diagonalDamping = false) const {\n+372 Matrix E;\n+373 Vector b;\n+374 FBlocks F;\n+375 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(F, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n+376 const size_t M = b.size();\n+377 Matrix P = _\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv(E, lambda, diagonalDamping);\n+378 SharedIsotropic n = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bS_\bi_\bg_\bm_\ba(M, _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->sigma());\n+379 return boost::make_shared >(_\bk_\be_\by_\bs_\b_, F, E, P, b,\n+n);\n+380 }\n+381\n+_\b3_\b8_\b6 boost::shared_ptr _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br(\n+387 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const _\bP_\bo_\bi_\bn_\bt_\b3& point, double lambda = 0.0) const {\n+388 size_t m = this->_\bk_\be_\by_\bs_\b_.size();\n+389 FBlocks F;\n+390 Vector b;\n+391 const size_t M = _\bZ_\bD_\bi_\bm * m;\n+392 Matrix E0(M, M - 3);\n+393 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD(F, E0, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n+394 SharedIsotropic n = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bS_\bi_\bg_\bm_\ba(M - 3,\n+395 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->sigma());\n+396 return boost::make_shared >(_\bk_\be_\by_\bs_\b_, F, E0, b,\n+n);\n+397 }\n+398\n+_\b4_\b0_\b0 static void _\bF_\bi_\bl_\bl_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bF(const FBlocks& Fs, Matrix& F) {\n+401 size_t m = Fs.size();\n+402 F.resize(_\bZ_\bD_\bi_\bm * m, _\bD_\bi_\bm * m);\n+403 F.setZero();\n+404 for (size_t i = 0; i < m; ++i)\n+405 F.block<_\bZ_\bD_\bi_\bm, _\bD_\bi_\bm>(_\bZ_\bD_\bi_\bm * i, _\bD_\bi_\bm * i) = Fs.at(i);\n+406 }\n+407\n+408 // Return sensor pose.\n+409 _\bP_\bo_\bs_\be_\b3 body_P_sensor() const{\n+410 if(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_)\n+411 return *_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_;\n+412 else\n+413 return _\bP_\bo_\bs_\be_\b3(); // if unspecified, the transformation is the identity\n+414 }\n+415\n+416private:\n+417\n+_\b4_\b1_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+420 template\n+421 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+422 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+423 ar & BOOST_SERIALIZATION_NVP(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_);\n+424 ar & BOOST_SERIALIZATION_NVP(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+425 ar & BOOST_SERIALIZATION_NVP(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_);\n+426 }\n+427};\n+428// end class SmartFactorBase\n+429\n+430// Definitions need to avoid link errors (above are only declarations)\n+431template const int _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bD_\bi_\bm;\n+432template const int _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bZ_\bD_\bi_\bm;\n+433\n+434} // \\ namespace gtsam\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n+Base class to create smart factors on poses or cameras.\n+_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+HessianFactor class with constant sized blocks.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n+_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+A subclass of GaussianFactor specialized to structureless SFM.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bv_\bd\n+void svd(const Matrix &A, Matrix &U, Vector &S, Matrix &V)\n+SVD computes economy SVD A=U*S*V'.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:560\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n Vector3 Point3\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n typedef Point3 to Vector3...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n@@ -192,147 +387,243 @@\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+Give fixed size dimension of a type, fails at compile time if dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n This class stores a dense matrix and allows it to be accessed as a collection\n-of vertical blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-DenseIndex rows() const\n-Row size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:32\n+of blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n+A set of cameras, all with their own calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n+Vector reprojectionError(const POINT &point, const ZVector &measured, boost::\n+optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::\n+none) const\n+Calculate vector [project2(point)-z] of re-projection errors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv\n+static Matrix PointCov(const Matrix &E, const double lambda=0.0, bool\n+diagonalDamping=false)\n+Computes Point Covariance P, with lambda parameter, dynamic version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:331\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n+static void UpdateSchurComplement(const FBlocks &Fs, const Matrix &E, const\n+Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &allKeys,\n+const KeyVector &keys, SymmetricBlockMatrix &augmentedHessian)\n+Applies Schur complement (exploiting block structure) to get a smart factor on\n+cameras,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:369\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n+static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix<\n+double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND >\n+> > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector\n+&b)\n+Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G =\n+F' * F - F' * E * P * ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n+Pose3 inverse() const\n+inverse transformation with derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:49\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n KeyVector keys_\n The keys involved in this factor.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc\n+An isotropic noise model corresponds to a scaled diagonal covariance To\n+construct,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:516\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bS_\bi_\bg_\bm_\ba\n+static shared_ptr Sigma(size_t dim, double sigma, bool smart=true)\n+An isotropic noise model created by specifying a standard devation sigma.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.cpp:597\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n-virtual bool active(const Values &) const\n-Checks whether a factor should be used based on a set of values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b _\b>_\b:_\b:_\bk_\be_\by\n-Key key() const\n-Returns a key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+virtual bool equals(const NonlinearFactor &f, double tol=1e-9) const\n+Check if two factors are equal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:37\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n const ValueType at(Key j) const\n Retrieve a variable by key j.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-Non-linear factor for a constraint derived from a 2D measurement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bA_\bb\n-VerticalBlockMatrix Ab\n-thread-safe (?) scratch memory for linearize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_\n-const bool throwCheirality_\n-If true, rethrows Cheirality exceptions (default: false)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n-bool throwCheirality() const\n-return flag for throwing cheirality exceptions\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n+Base class for smart factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n+void computeJacobians(FBlocks &Fs, Matrix &E, Vector &b, const Cameras\n+&cameras, const POINT &point) const\n+Compute F, E, and b (called below in both vanilla and SVD versions), where F is\n+a vector of derivativ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:285\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bd_\bd\n+void add(const Z &measured, const Key &key)\n+Add a new measurement and pose/camera key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\b~_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n+~SmartFactorBase() override\n+Virtual destructor, subclasses from NonlinearFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bA_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bH_\be_\bs_\bs_\bi_\ba_\bn\n+void updateAugmentedHessian(const Cameras &cameras, const Point3 &point, const\n+double lambda, bool diagonalDamping, SymmetricBlockMatrix &augmentedHessian,\n+const KeyVector allKeys) const\n+Add the contribution of the smart factor to a pre-allocated Hessian, using\n+sparse linear algebra.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:336\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > >\n+createRegularImplicitSchurFactor(const Cameras &cameras, const Point3 &point,\n+double lambda=0.0, bool diagonalDamping=false) const\n+Return Jacobians as RegularImplicitSchurFactor with raw access.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:356\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_\n+SharedIsotropic noiseModel_\n+As of Feb 22, 2015, the noise model is the same for all measurements and is\n+isotropic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bi_\bm\n+static const int Dim\n+Camera dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n+Vector whitenedError(const Cameras &cameras, const POINT &point) const\n+Calculate vector of re-projection errors [h(x)-z] = [cameras.project(p) - z],\n+with the noise model ap...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:251\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs\n+virtual Cameras cameras(const Values &values) const\n+Collect all cameras: important that in key order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bF_\bi_\bl_\bl_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bF\n+static void FillDiagonalF(const FBlocks &Fs, Matrix &F)\n+Create BIG block-diagonal matrix F from Fblocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n+double totalReprojectionError(const Cameras &cameras, const POINT &point) const\n+Calculate the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:267\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bd_\bd\n+void add(const ZVector &measurements, const KeyVector &cameraKeys)\n+Add a bunch of measurements, together with the camera keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< RegularHessianFactor< Dim > > createHessianFactor(const\n+Cameras &cameras, const Point3 &point, const double lambda=0.0, bool\n+diagonalDamping=false) const\n+Linearize to a Hessianfactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:316\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD\n+void computeJacobiansSVD(FBlocks &Fs, Matrix &Enull, Vector &b, const Cameras\n+&cameras, const POINT &point) const\n+SVD version that produces smaller Jacobian matrices by doing an SVD\n+decomposition on E,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:300\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n+ZVector measured_\n+Measurements for each of the m views.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+GTSAM_MAKE_ALIGNED_OPERATOR_NEW typedef boost::shared_ptr< This > shared_ptr\n+shorthand for a smart pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n+Vector unwhitenedError(const Cameras &cameras, const POINT &point, boost::\n+optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional< Matrix\n+& > E=boost::none) const\n+Compute reprojection errors [h(x)-z] = [cameras.project(p)-z] and derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:204\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n+SmartFactorBase()\n+Default Constructor, for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n+void whitenJacobians(FBlocks &F, Matrix &E, Vector &b) const\n+Whiten the Jacobians computed by computeJacobians using noiseModel_.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:347\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n+SmartFactorBase(const SharedNoiseModel &sharedNoiseModel, boost::optional<\n+Pose3 > body_P_sensor=boost::none, size_t expectedNumberCameras=10)\n+Construct with given noise model and optional arguments.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bd_\bd\n+void add(const SFM_TRACK &trackToAdd)\n+Add an entire SfM_track (collection of cameras observing a single point).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:148\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const ZVector & measured() const\n+Return the 2D measurements (ZDim, in general).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras\n+&cameras, const Point3 &point, double lambda=0.0) const\n+Return Jacobians as JacobianFactorSVD.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:386\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+Return the dimension (number of rows!) of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< JacobianFactorQ< Dim, ZDim > > createJacobianQFactor(const\n+Cameras &cameras, const Point3 &point, double lambda=0.0, bool\n+diagonalDamping=false) const\n+Return Jacobians as JacobianFactorQ.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:369\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:419\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const std::string &s=\"\", const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Point3 &point, boost::optional< Matrix & >\n-H2=boost::none) const override\n-Evaluate error h(x)-z and optionally derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:122\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override\n-Linearize to a JacobianFactor, does not support constrained noise model ! Hence\n-.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:149\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-TriangulationFactor(const CAMERA &camera, const Measurement &measured, const\n-SharedNoiseModel &model, Key pointKey, bool throwCheirality=false, bool\n-verboseCheirality=false)\n-Constructor with exception-handling flags.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-typename CAMERA::Measurement Measurement\n-shorthand for measurement type, e.g. Point2 or StereoPoint2\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const Measurement & measured() const\n-return the measurement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:175\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n-bool verboseCheirality() const\n-return verbosity\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:180\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba\n-CAMERA Camera\n-CAMERA type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_\n+boost::optional< Pose3 > body_P_sensor_\n+Pose of the camera in the body frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\br_\br_\be_\bc_\bt_\bF_\bo_\br_\bM_\bi_\bs_\bs_\bi_\bn_\bg_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+virtual void correctForMissingMeasurements(const Cameras &cameras, Vector &ue,\n+boost::optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional<\n+Matrix & > E=boost::none) const\n+This corrects the Jacobians for the case in which some 2D measurement is\n+missing (nan).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:241\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bZ_\bD_\bi_\bm\n+static const int ZDim\n+Measurement dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv\n+static Matrix PointCov(const Matrix &E)\n+Computes Point Covariance P from the \"point Jacobian\" E.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:274\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bs\n+CameraSet< CAMERA > Cameras\n+The CameraSet data structure is used to refer to a set of cameras.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-~TriangulationFactor() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_\n-const bool verboseCheirality_\n-If true, prints text for Cheirality exceptions (default: false)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-TriangulationFactor()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-TriangulationFactor< CAMERA > This\n-shorthand for this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n-const Measurement measured_\n-2D measurement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shorthand for a smart pointer to a factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\b_\n-const CAMERA camera_\n-CAMERA in which this landmark was seen.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:52\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:187\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * T\bTr\bri\bia\ban\bng\bgu\bul\bla\bat\bti\bio\bon\bnF\bFa\bac\bct\bto\bor\br.\b.h\bh\n+ * _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01244_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01244_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/EssentialMatrixConstraint.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/JacobianFactorQR.h Source File\n \n \n \n \n \n \n \n@@ -98,127 +98,95 @@\n
No Matches
\n
\n \n \n \n \n
\n-
EssentialMatrixConstraint.h
\n+
JacobianFactorQR.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2
\n-
3 * GTSAM Copyright 2010-2014, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
7
\n-
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n-
11
\n-
19#pragma once
\n-
20
\n-\n-
22#include <gtsam/geometry/EssentialMatrix.h>
\n-
23
\n-
24namespace gtsam {
\n+
1/*
\n+
2 * @file JacobianFactorQR.h
\n+
3 * @brief Jacobianfactor that combines and eliminates points
\n+
4 * @date Oct 27, 2013
\n+
5 * @uthor Frank Dellaert
\n+
6 */
\n+
7
\n+
8#pragma once
\n+\n+\n+\n+
12
\n+
13namespace gtsam {
\n+
14
\n+
15class GaussianBayesNet;
\n+
16
\n+
20template<size_t D, size_t ZDim>
\n+
\n+\n+
22
\n+
23 typedef RegularJacobianFactor<D> Base;
\n+
24 typedef Eigen::Matrix<double, ZDim, D> MatrixZD;
\n
25
\n-
\n-
30class GTSAM_EXPORT EssentialMatrixConstraint: public NoiseModelFactorN<Pose3, Pose3> {
\n-
31
\n-
32private:
\n-
33
\n-\n-\n-
36
\n-
37 EssentialMatrix measuredE_;
\n-
39public:
\n-
40
\n-
41 // shorthand for a smart pointer to a factor
\n-
42 typedef boost::shared_ptr<EssentialMatrixConstraint> shared_ptr;
\n-
43
\n-
\n-\n-
46 }
\n-
\n-
47
\n-
\n-\n-
56 const EssentialMatrix& measuredE, const SharedNoiseModel& model) :
\n-
57 Base(model, key1, key2), measuredE_(measuredE) {
\n-
58 }
\n-
\n-
59
\n-\n-
61 }
\n-
62
\n-
\n-
64 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
65 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
66 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
67 }
\n-
\n-
68
\n-
72 void print(const std::string& s = "",
\n-
73 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n-
74
\n-
76 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n-
77
\n-
81 Vector evaluateError(const Pose3& p1, const Pose3& p2,
\n-
82 boost::optional<Matrix&> Hp1 = boost::none, //
\n-
83 boost::optional<Matrix&> Hp2 = boost::none) const override;
\n-
84
\n-
\n-
86 const EssentialMatrix& measured() const {
\n-
87 return measuredE_;
\n-
88 }
\n-
\n-
89
\n-
90private:
\n-
91
\n-
93 friend class boost::serialization::access;
\n-
94 template<class ARCHIVE>
\n-
95 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
96 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n-
97 ar
\n-
98 & boost::serialization::make_nvp("NoiseModelFactor2",
\n-
99 boost::serialization::base_object<Base>(*this));
\n-
100 ar & BOOST_SERIALIZATION_NVP(measuredE_);
\n-
101 }
\n-
102
\n-
103public:
\n-\n-
105};
\n-
\n-
106// \\class EssentialMatrixConstraint
\n-
107
\n-
108}
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Non-linear factor base classes.
\n+
26public:
\n+
27
\n+
\n+\n+
32 const std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> >& FBlocks, const Matrix& E, const Matrix3& P,
\n+
33 const Vector& b, //
\n+
34 const SharedDiagonal& model = SharedDiagonal()) :
\n+
35 Base() {
\n+
36 // Create a number of Jacobian factors in a factor graph
\n+\n+
38 Symbol pointKey('p', 0);
\n+
39 for (size_t k = 0; k < FBlocks.size(); ++k) {
\n+
40 Key key = keys[k];
\n+
41 gfg.add(pointKey, E.block<ZDim, 3>(ZDim * k, 0), key, FBlocks[k],
\n+
42 b.segment < ZDim > (ZDim * k), model);
\n+
43 }
\n+
44 //gfg.print("gfg");
\n+
45
\n+
46 // eliminate the point
\n+
47 boost::shared_ptr<GaussianBayesNet> bn;
\n+\n+
49 KeyVector variables;
\n+
50 variables.push_back(pointKey);
\n+
51 boost::tie(bn, fg) = gfg.eliminatePartialSequential(variables, EliminateQR);
\n+
52 //fg->print("fg");
\n+
53
\n+
54 JacobianFactor::operator=(JacobianFactor(*fg));
\n+
55 }
\n+
\n+
56};
\n+
\n+
57// end class JacobianFactorQR
\n+
58
\n+
59}// end namespace gtsam
\n+
JacobianFactor class with fixed sized blcoks.
\n+
Linear Factor Graph where all factors are Gaussians.
\n+
friend GTSAM_EXPORT std::pair< boost::shared_ptr< GaussianConditional >, shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with QR factorization, this is usually provided as an argument to one of ...
Definition JacobianFactor.cpp:789
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
An essential matrix is like a Pose3, except with translation up to scale It is named after the 3*3 ma...
Definition EssentialMatrix.h:26
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Binary factor between two Pose3 variables induced by an EssentialMatrix measurement.
Definition EssentialMatrixConstraint.h:30
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition EssentialMatrixConstraint.h:64
\n-
const EssentialMatrix & measured() const
return the measured
Definition EssentialMatrixConstraint.h:86
\n-
boost::shared_ptr< EssentialMatrixConstraint > shared_ptr
The measurement is an essential matrix.
Definition EssentialMatrixConstraint.h:42
\n-
EssentialMatrixConstraint()
default constructor - only use for serialization
Definition EssentialMatrixConstraint.h:45
\n-
EssentialMatrixConstraint(Key key1, Key key2, const EssentialMatrix &measuredE, const SharedNoiseModel &model)
Constructor.
Definition EssentialMatrixConstraint.h:55
\n+
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do sequential elimination of some variables, in ordering provided, to produce a Bayes net and a remai...
Definition EliminateableFactorGraph-inst.h:154
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
Character and index key used to refer to variables.
Definition Symbol.h:35
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n+
void add(const GaussianFactor &factor)
Add a factor by value - makes a copy.
Definition GaussianFactorGraph.h:127
\n+
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n+
JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator.
Definition RegularJacobianFactor.h:32
\n+
JacobianFactor for Schur complement that uses Q noise model.
Definition JacobianFactorQR.h:21
\n+
JacobianFactorQR(const KeyVector &keys, const std::vector< MatrixZD, Eigen::aligned_allocator< MatrixZD > > &FBlocks, const Matrix &E, const Matrix3 &P, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Constructor.
Definition JacobianFactorQR.h:31
\n+\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,159 +1,129 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-EssentialMatrixConstraint.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1/* ---------------------------------------------------------------------------\n--\n-2\n-3 * GTSAM Copyright 2010-2014, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+JacobianFactorQR.h\n+1/*\n+2 * @file JacobianFactorQR.h\n+3 * @brief Jacobianfactor that combines and eliminates points\n+4 * @date Oct 27, 2013\n+5 * @uthor Frank Dellaert\n+6 */\n 7\n-8 * See LICENSE for the license information\n-9\n-10 * -------------------------------------------------------------------------\n-- */\n-11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include \n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n+8#pragma once\n+9#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+10#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+11#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n+12\n+13namespace _\bg_\bt_\bs_\ba_\bm {\n+14\n+15class GaussianBayesNet;\n+16\n+20template\n+_\b2_\b1class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\bR: public _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n+22\n+23 typedef _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bD_\b> Base;\n+24 typedef Eigen::Matrix MatrixZD;\n 25\n-_\b3_\b0class GTSAM_EXPORT _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-31\n-32private:\n-33\n-34 typedef _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt _\bT_\bh_\bi_\bs;\n-35 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b,_\b _\bP_\bo_\bs_\be_\b3_\b> _\bB_\ba_\bs_\be;\n-36\n-37 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx measuredE_;\n-39public:\n-40\n-41 // shorthand for a smart pointer to a factor\n-_\b4_\b2 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-43\n-_\b4_\b5 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt() {\n-46 }\n-47\n-_\b5_\b5 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt(_\bK_\be_\by key1, _\bK_\be_\by key2,\n-56 const _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& measuredE, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n-57 _\bB_\ba_\bs_\be(model, key1, key2), measuredE_(measuredE) {\n-58 }\n-59\n-60 _\b~_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt() override {\n-61 }\n-62\n-_\b6_\b4 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-65 return boost::static_pointer_cast(\n-66 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n-67 }\n-68\n-72 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-73 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n-74\n-76 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n-override;\n-77\n-81 Vector evaluateError(const _\bP_\bo_\bs_\be_\b3& p1, const _\bP_\bo_\bs_\be_\b3& p2,\n-82 boost::optional Hp1 = boost::none, //\n-83 boost::optional Hp2 = boost::none) const override;\n-84\n-_\b8_\b6 const _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n-87 return measuredE_;\n-88 }\n-89\n-90private:\n-91\n-_\b9_\b3 friend class boost::serialization::access;\n-94 template\n-95 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-96 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility\n-97 ar\n-98 & boost::serialization::make_nvp(\"NoiseModelFactor2\",\n-99 boost::serialization::base_object(*this));\n-100 ar & BOOST_SERIALIZATION_NVP(measuredE_);\n-101 }\n-102\n-103public:\n-104 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-105};\n-106// \\class EssentialMatrixConstraint\n-107\n-108}\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+26public:\n+27\n+_\b3_\b1 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\bR(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n+32 const std::vector >& FBlocks,\n+const Matrix& E, const Matrix3& P,\n+33 const Vector& b, //\n+34 const SharedDiagonal& model = SharedDiagonal()) :\n+35 Base() {\n+36 // Create a number of Jacobian factors in a factor graph\n+37 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh gfg;\n+38 _\bS_\by_\bm_\bb_\bo_\bl pointKey('p', 0);\n+39 for (size_t k = 0; k < FBlocks.size(); ++k) {\n+40 _\bK_\be_\by key = _\bk_\be_\by_\bs[k];\n+41 gfg._\ba_\bd_\bd(pointKey, E.block(ZDim * k, 0), key, FBlocks[k],\n+42 b.segment < ZDim > (ZDim * k), model);\n+43 }\n+44 //gfg.print(\"gfg\");\n+45\n+46 // eliminate the point\n+47 boost::shared_ptr bn;\n+48 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br fg;\n+49 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br variables;\n+50 variables.push_back(pointKey);\n+51 boost::tie(bn, fg) = gfg._\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(variables, _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR);\n+52 //fg->print(\"fg\");\n+53\n+54 JacobianFactor::operator=(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(*fg));\n+55 }\n+56};\n+57// end class JacobianFactorQR\n+58\n+59}// end namespace gtsam\n+_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+JacobianFactor class with fixed sized blcoks.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR\n+friend GTSAM_EXPORT std::pair< boost::shared_ptr< GaussianConditional >,\n+shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering\n+&keys)\n+Densely partially eliminate with QR factorization, this is usually provided as\n+an argument to one of ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:789\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n-An essential matrix is like a Pose3, except with translation up to scale It is\n-named after the 3*3 ma...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrix.h:26\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n-Binary factor between two Pose3 variables induced by an EssentialMatrix\n-measurement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const EssentialMatrix & measured() const\n-return the measured\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< EssentialMatrixConstraint > shared_ptr\n-The measurement is an essential matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n-EssentialMatrixConstraint()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n-EssentialMatrixConstraint(Key key1, Key key2, const EssentialMatrix &measuredE,\n-const SharedNoiseModel &model)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl\n+std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr<\n+FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const\n+Eliminate &function=EliminationTraitsType::DefaultEliminate,\n+OptionalVariableIndex variableIndex=boost::none) const\n+Do sequential elimination of some variables, in ordering provided, to produce a\n+Bayes net and a remai...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl\n+Character and index key used to refer to variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Symbol.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+void add(const GaussianFactor &factor)\n+Add a factor by value - makes a copy.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor in the squared-error form.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+JacobianFactor with constant sized blocks Provides raw memory access versions\n+of linear operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\bR\n+JacobianFactor for Schur complement that uses Q noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQR.h:21\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\bR_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\bR\n+JacobianFactorQR(const KeyVector &keys, const std::vector< MatrixZD, Eigen::\n+aligned_allocator< MatrixZD > > &FBlocks, const Matrix &E, const Matrix3 &P,\n+const Vector &b, const SharedDiagonal &model=SharedDiagonal())\n Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:55\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQR.h:31\n+_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b._\bh\n+ * J\bJa\bac\bco\bob\bbi\bia\ban\bnF\bFa\bac\bct\bto\bor\brQ\bQR\bR.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01250_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01250_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/StereoFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/RotateFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,218 +98,170 @@\n
No Matches
\n \n \n \n \n \n
\n-
StereoFactor.h
\n+
RotateFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
7
\n-
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n-
11
\n-
19#pragma once
\n-
20
\n-\n-\n-
23
\n-
24namespace gtsam {
\n-
25
\n-
30template<class POSE, class LANDMARK>
\n-
\n-
31class GenericStereoFactor: public NoiseModelFactorN<POSE, LANDMARK> {
\n-
32private:
\n-
33
\n-
34 // Keep a copy of measurement and calibration for I/O
\n-
35 StereoPoint2 measured_;
\n-
36 Cal3_S2Stereo::shared_ptr K_;
\n-
37 boost::optional<POSE> body_P_sensor_;
\n-
38
\n-
39 // verbosity handling for Cheirality Exceptions
\n-
40 bool throwCheirality_;
\n-
41 bool verboseCheirality_;
\n+
1/*
\n+
2 * @file RotateFactor.cpp
\n+
3 * @brief RotateFactor class
\n+
4 * @author Frank Dellaert
\n+
5 * @date December 17, 2013
\n+
6 */
\n+
7
\n+
8#pragma once
\n+
9
\n+\n+
11#include <gtsam/geometry/Rot3.h>
\n+
12
\n+
13namespace gtsam {
\n+
14
\n+
\n+
23class RotateFactor: public NoiseModelFactorN<Rot3> {
\n+
24
\n+
25 Point3 p_, z_;
\n+
26
\n+\n+
28 typedef RotateFactor This;
\n+
29
\n+
30public:
\n+
31
\n+
\n+
33 RotateFactor(Key key, const Rot3& P, const Rot3& Z,
\n+
34 const SharedNoiseModel& model) :
\n+
35 Base(model, key), p_(Rot3::Logmap(P)), z_(Rot3::Logmap(Z)) {
\n+
36 }
\n+
\n+
37
\n+
\n+
39 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
40 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
41 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n+
\n
42
\n-
43public:
\n-
44
\n-
45 // shorthand for base class type
\n-\n-\n-
48 typedef boost::shared_ptr<GenericStereoFactor> shared_ptr;
\n-
49 typedef POSE CamPose;
\n-
50
\n-
\n-
54 GenericStereoFactor() : K_(new Cal3_S2Stereo(444, 555, 666, 777, 888, 1.0)),
\n-
55 throwCheirality_(false), verboseCheirality_(false) {}
\n-
\n-
56
\n-
\n-\n-
67 Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr& K,
\n-
68 boost::optional<POSE> body_P_sensor = boost::none) :
\n-
69 Base(model, poseKey, landmarkKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor),
\n-
70 throwCheirality_(false), verboseCheirality_(false) {}
\n+
\n+
44 void print(const std::string& s = "",
\n+
45 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
46 Base::print(s);
\n+
47 std::cout << "RotateFactor:]\\n";
\n+
48 std::cout << "p: " << p_.transpose() << std::endl;
\n+
49 std::cout << "z: " << z_.transpose() << std::endl;
\n+
50 }
\n+
\n+
51
\n+
\n+
53 Vector evaluateError(const Rot3& R,
\n+
54 boost::optional<Matrix&> H = boost::none) const override {
\n+
55 // predict p_ as q = R*z_, derivative H will be filled if not none
\n+
56 Point3 q = R.rotate(z_,H);
\n+
57 // error is just difference, and note derivative of that wrpt q is I3
\n+
58 return (Vector(3) << q.x()-p_.x(), q.y()-p_.y(), q.z()-p_.z()).finished();
\n+
59 }
\n+
\n+
60
\n+
61};
\n+
\n+
62
\n+
\n+\n+
68
\n+
69 Unit3 i_p_, c_z_;
\n+
70
\n+\n+\n+
73
\n+
74public:
\n+
75
\n+
\n+
77 RotateDirectionsFactor(Key key, const Unit3& i_p, const Unit3& c_z,
\n+
78 const SharedNoiseModel& model) :
\n+
79 Base(model, key), i_p_(i_p), c_z_(c_z) {
\n+
80 }
\n
\n-
71
\n+
81
\n
\n-\n-
84 Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr& K,
\n-\n-
86 boost::optional<POSE> body_P_sensor = boost::none) :
\n-
87 Base(model, poseKey, landmarkKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor),
\n-
88 throwCheirality_(throwCheirality), verboseCheirality_(verboseCheirality) {}
\n+
83 static Rot3 Initialize(const Unit3& i_p, const Unit3& c_z) {
\n+
84 gtsam::Quaternion iRc;
\n+
85 // setFromTwoVectors sets iRc to (a) quaternion which transform c_z into i_p
\n+
86 iRc.setFromTwoVectors(c_z.unitVector(), i_p.unitVector());
\n+
87 return Rot3(iRc);
\n+
88 }
\n
\n
89
\n-\n-
92
\n-
\n-
94 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
95 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
96 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n-
\n-
97
\n-
\n-
103 void print(const std::string& s = "", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
104 Base::print(s, keyFormatter);
\n-
105 measured_.print(s + ".z");
\n-
106 if(this->body_P_sensor_)
\n-
107 this->body_P_sensor_->print(" sensor pose in body frame: ");
\n-
108 }
\n-
\n-
109
\n-
\n-
113 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override {
\n-
114 const GenericStereoFactor* e = dynamic_cast<const GenericStereoFactor*> (&f);
\n-
115 return e
\n-
116 && Base::equals(f)
\n-
117 && measured_.equals(e->measured_, tol)
\n-
118 && ((!body_P_sensor_ && !e->body_P_sensor_) || (body_P_sensor_ && e->body_P_sensor_ && body_P_sensor_->equals(*e->body_P_sensor_)));
\n-
119 }
\n-
\n-
120
\n-
\n-
122 Vector evaluateError(const Pose3& pose, const Point3& point,
\n-
123 boost::optional<Matrix&> H1 = boost::none, boost::optional<Matrix&> H2 = boost::none) const override {
\n-
124 try {
\n-
125 if(body_P_sensor_) {
\n-
126 if(H1) {
\n-
127 gtsam::Matrix H0;
\n-
128 StereoCamera stereoCam(pose.compose(*body_P_sensor_, H0), K_);
\n-
129 StereoPoint2 reprojectionError(stereoCam.project(point, H1, H2) - measured_);
\n-
130 *H1 = *H1 * H0;
\n-
131 return reprojectionError.vector();
\n-
132 } else {
\n-
133 StereoCamera stereoCam(pose.compose(*body_P_sensor_), K_);
\n-
134 return (stereoCam.project(point, H1, H2) - measured_).vector();
\n-
135 }
\n-
136 } else {
\n-
137 StereoCamera stereoCam(pose, K_);
\n-
138 return (stereoCam.project(point, H1, H2) - measured_).vector();
\n-
139 }
\n-
140 } catch(StereoCheiralityException& e) {
\n-
141 if (H1) *H1 = Matrix::Zero(3,6);
\n-
142 if (H2) *H2 = Z_3x3;
\n-
143 if (verboseCheirality_)
\n-
144 std::cout << e.what() << ": Landmark "<< DefaultKeyFormatter(this->key2()) <<
\n-
145 " moved behind camera " << DefaultKeyFormatter(this->key1()) << std::endl;
\n-
146 if (throwCheirality_)
\n-
147 throw StereoCheiralityException(this->key2());
\n-
148 }
\n-
149 return Vector3::Constant(2.0 * K_->fx());
\n-
150 }
\n-
\n-
151
\n-
\n-
153 const StereoPoint2& measured() const {
\n-
154 return measured_;
\n-
155 }
\n-
\n-
156
\n-
\n-
158 inline const Cal3_S2Stereo::shared_ptr calibration() const {
\n-
159 return K_;
\n-
160 }
\n-
\n-
161
\n-
163 inline bool verboseCheirality() const { return verboseCheirality_; }
\n-
164
\n-
166 inline bool throwCheirality() const { return throwCheirality_; }
\n-
167
\n-
168private:
\n-\n-
171 template<class Archive>
\n-
172 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
173 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n-
174 ar & boost::serialization::make_nvp("NoiseModelFactor2",
\n-
175 boost::serialization::base_object<Base>(*this));
\n-
176 ar & BOOST_SERIALIZATION_NVP(measured_);
\n-
177 ar & BOOST_SERIALIZATION_NVP(K_);
\n-
178 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);
\n-
179 ar & BOOST_SERIALIZATION_NVP(throwCheirality_);
\n-
180 ar & BOOST_SERIALIZATION_NVP(verboseCheirality_);
\n-
181 }
\n-
182};
\n-
\n-
183
\n-
185template<class T1, class T2>
\n-
186struct traits<GenericStereoFactor<T1, T2> > : public Testable<GenericStereoFactor<T1, T2> > {};
\n-
187
\n-
188} // \\ namespace gtsam
\n-
A Stereo Camera based on two Simple Cameras.
\n-
Non-linear factor base classes.
\n+
\n+
91 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
92 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
93 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n+
\n+
94
\n+
\n+
96 void print(const std::string& s = "",
\n+
97 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
98 Base::print(s);
\n+
99 std::cout << "RotateDirectionsFactor:" << std::endl;
\n+
100 i_p_.print("p");
\n+
101 c_z_.print("z");
\n+
102 }
\n+
\n+
103
\n+
\n+
105 Vector evaluateError(const Rot3& iRc, boost::optional<Matrix&> H = boost::none) const override {
\n+
106 Unit3 i_q = iRc * c_z_;
\n+
107 Vector error = i_p_.error(i_q, H);
\n+
108 if (H) {
\n+
109 Matrix DR;
\n+
110 iRc.rotate(c_z_, DR);
\n+
111 *H = (*H) * DR;
\n+
112 }
\n+
113 return error;
\n+
114 }
\n+
\n+
115
\n+\n+
117};
\n+
\n+
118} // namespace gtsam
\n+
119
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
3D rotation represented as a rotation matrix or quaternion
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
The most common 5DOF 3D->2D calibration, stereo version.
Definition Cal3_S2Stereo.h:30
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Definition StereoCamera.h:26
\n-
A stereo camera class, parameterize by left camera pose and stereo calibration.
Definition StereoCamera.h:47
\n-
StereoPoint2 project(const Point3 &point) const
Project 3D point to StereoPoint2 (uL,uR,v)
Definition StereoCamera.cpp:32
\n-
A 2D stereo point, v will be same for rectified images.
Definition StereoPoint2.h:32
\n-
Vector3 vector() const
convert to vector
Definition StereoPoint2.h:115
\n-
bool equals(const StereoPoint2 &q, double tol=1e-9) const
equals
Definition StereoPoint2.h:64
\n-
void print(const std::string &s="") const
print
Definition StereoPoint2.cpp:26
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
rotate point from rotated coordinate frame to world
Definition Rot3M.cpp:149
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const
Return unit-norm Vector.
Definition Unit3.cpp:151
\n+
void print(const std::string &s=std::string()) const
The print fuction.
Definition Unit3.cpp:164
\n+
Vector2 error(const Unit3 &q, OptionalJacobian< 2, 2 > H_q=boost::none) const
Signed, vector-valued error between two directions.
Definition Unit3.cpp:199
\n
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
double error(const Values &c) const override
Calculate the error of the factor.
Definition NonlinearFactor.cpp:138
\n
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
A Generic Stereo Factor.
Definition StereoFactor.h:31
\n-
bool throwCheirality() const
return flag for throwing cheirality exceptions
Definition StereoFactor.h:166
\n-
Vector evaluateError(const Pose3 &pose, const Point3 &point, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
h(x)-z
Definition StereoFactor.h:122
\n-
bool equals(const NonlinearFactor &f, double tol=1e-9) const override
equals
Definition StereoFactor.h:113
\n-
const Cal3_S2Stereo::shared_ptr calibration() const
return the calibration object
Definition StereoFactor.h:158
\n-
GenericStereoFactor(const StereoPoint2 &measured, const SharedNoiseModel &model, Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr &K, bool throwCheirality, bool verboseCheirality, boost::optional< POSE > body_P_sensor=boost::none)
Constructor with exception-handling flags.
Definition StereoFactor.h:83
\n-
GenericStereoFactor< POSE, LANDMARK > This
typedef for this class (with templates)
Definition StereoFactor.h:47
\n-
~GenericStereoFactor() override
Virtual destructor.
Definition StereoFactor.h:91
\n-
bool verboseCheirality() const
return verbosity
Definition StereoFactor.h:163
\n-
boost::shared_ptr< GenericStereoFactor > shared_ptr
typedef for shared pointer to this object
Definition StereoFactor.h:48
\n-
const StereoPoint2 & measured() const
return the measured
Definition StereoFactor.h:153
\n-
GenericStereoFactor()
Default constructor.
Definition StereoFactor.h:54
\n-
friend class boost::serialization::access
Serialization function.
Definition StereoFactor.h:170
\n-
GenericStereoFactor(const StereoPoint2 &measured, const SharedNoiseModel &model, Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr &K, boost::optional< POSE > body_P_sensor=boost::none)
Constructor.
Definition StereoFactor.h:66
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition StereoFactor.h:103
\n-
POSE CamPose
typedef for Pose Lie Value type
Definition StereoFactor.h:49
\n-
NoiseModelFactorN< POSE, LANDMARK > Base
typedef for base class
Definition StereoFactor.h:46
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition StereoFactor.h:94
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
Factor on unknown rotation iRC that relates two incremental rotations c1Rc2 = iRc' * i1Ri2 * iRc Whic...
Definition RotateFactor.h:23
\n+
RotateFactor(Key key, const Rot3 &P, const Rot3 &Z, const SharedNoiseModel &model)
Constructor.
Definition RotateFactor.h:33
\n+
Vector evaluateError(const Rot3 &R, boost::optional< Matrix & > H=boost::none) const override
vector of errors returns 2D vector
Definition RotateFactor.h:53
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition RotateFactor.h:44
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition RotateFactor.h:39
\n+
Factor on unknown rotation iRc that relates two directions c Directions provide less constraints than...
Definition RotateFactor.h:67
\n+
Vector evaluateError(const Rot3 &iRc, boost::optional< Matrix & > H=boost::none) const override
vector of errors returns 2D vector
Definition RotateFactor.h:105
\n+
RotateDirectionsFactor(Key key, const Unit3 &i_p, const Unit3 &c_z, const SharedNoiseModel &model)
Constructor.
Definition RotateFactor.h:77
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition RotateFactor.h:96
\n+
static Rot3 Initialize(const Unit3 &i_p, const Unit3 &c_z)
Initialize rotation iRc such that i_p = iRc * c_z.
Definition RotateFactor.h:83
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition RotateFactor.h:91
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,167 +1,118 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-StereoFactor.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1/* ---------------------------------------------------------------------------\n--\n-2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+RotateFactor.h\n+1/*\n+2 * @file RotateFactor.cpp\n+3 * @brief RotateFactor class\n+4 * @author Frank Dellaert\n+5 * @date December 17, 2013\n+6 */\n 7\n-8 * See LICENSE for the license information\n+8#pragma once\n 9\n-10 * -------------------------------------------------------------------------\n-- */\n-11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-30template\n-_\b3_\b1class _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-32private:\n-33\n-34 // Keep a copy of measurement and calibration for I/O\n-35 _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 measured_;\n-36 Cal3_S2Stereo::shared_ptr K_;\n-37 boost::optional body_P_sensor_;\n-38\n-39 // verbosity handling for Cheirality Exceptions\n-40 bool throwCheirality_;\n-41 bool verboseCheirality_;\n+10#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+11#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n+12\n+13namespace _\bg_\bt_\bs_\ba_\bm {\n+14\n+_\b2_\b3class _\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+24\n+25 _\bP_\bo_\bi_\bn_\bt_\b3 p_, z_;\n+26\n+27 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bR_\bo_\bt_\b3_\b> _\bB_\ba_\bs_\be;\n+28 typedef _\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+29\n+30public:\n+31\n+_\b3_\b3 _\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const _\bR_\bo_\bt_\b3& P, const _\bR_\bo_\bt_\b3& Z,\n+34 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n+35 _\bB_\ba_\bs_\be(model, _\bk_\be_\by), p_(_\bR_\bo_\bt_\b3::Logmap(P)), z_(_\bR_\bo_\bt_\b3::Logmap(Z)) {\n+36 }\n+37\n+_\b3_\b9 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+40 return boost::static_pointer_cast(\n+41 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this))); }\n 42\n-43public:\n-44\n-45 // shorthand for base class type\n-_\b4_\b6 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b> _\bB_\ba_\bs_\be;\n-_\b4_\b7 typedef _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b> _\bT_\bh_\bi_\bs;\n-_\b4_\b8 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-_\b4_\b9 typedef POSE _\bC_\ba_\bm_\bP_\bo_\bs_\be;\n-50\n-_\b5_\b4 _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br() : K_(new _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo(444, 555, 666, 777, 888, 1.0)),\n-55 throwCheirality_(false), verboseCheirality_(false) {}\n-56\n-_\b6_\b6 _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n-model,\n-67 _\bK_\be_\by poseKey, _\bK_\be_\by landmarkKey, const Cal3_S2Stereo::shared_ptr& K,\n-68 boost::optional body_P_sensor = boost::none) :\n-69 _\bB_\ba_\bs_\be(model, poseKey, landmarkKey), measured_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd), K_(K),\n-body_P_sensor_(body_P_sensor),\n-70 throwCheirality_(false), verboseCheirality_(false) {}\n-71\n-_\b8_\b3 _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n-model,\n-84 _\bK_\be_\by poseKey, _\bK_\be_\by landmarkKey, const Cal3_S2Stereo::shared_ptr& K,\n-85 bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by, bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by,\n-86 boost::optional body_P_sensor = boost::none) :\n-87 _\bB_\ba_\bs_\be(model, poseKey, landmarkKey), measured_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd), K_(K),\n-body_P_sensor_(body_P_sensor),\n-88 throwCheirality_(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by), verboseCheirality_(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by) {}\n+_\b4_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+45 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+46 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n+47 std::cout << \"RotateFactor:]\\n\";\n+48 std::cout << \"p: \" << p_.transpose() << std::endl;\n+49 std::cout << \"z: \" << z_.transpose() << std::endl;\n+50 }\n+51\n+_\b5_\b3 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b3& R,\n+54 boost::optional H = boost::none) const override {\n+55 // predict p_ as q = R*z_, derivative H will be filled if not none\n+56 _\bP_\bo_\bi_\bn_\bt_\b3 q = R.rotate(z_,H);\n+57 // error is just difference, and note derivative of that wrpt q is I3\n+58 return (Vector(3) << q.x()-p_.x(), q.y()-p_.y(), q.z()-p_.z()).finished();\n+59 }\n+60\n+61};\n+62\n+_\b6_\b7class _\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+68\n+69 _\bU_\bn_\bi_\bt_\b3 i_p_, c_z_;\n+70\n+71 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bR_\bo_\bt_\b3_\b> _\bB_\ba_\bs_\be;\n+72 typedef _\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+73\n+74public:\n+75\n+_\b7_\b7 _\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const _\bU_\bn_\bi_\bt_\b3& i_p, const _\bU_\bn_\bi_\bt_\b3& c_z,\n+78 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n+79 _\bB_\ba_\bs_\be(model, _\bk_\be_\by), i_p_(i_p), c_z_(c_z) {\n+80 }\n+81\n+_\b8_\b3 static _\bR_\bo_\bt_\b3 _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be(const _\bU_\bn_\bi_\bt_\b3& i_p, const _\bU_\bn_\bi_\bt_\b3& c_z) {\n+84 gtsam::Quaternion iRc;\n+85 // setFromTwoVectors sets iRc to (a) quaternion which transform c_z into i_p\n+86 iRc.setFromTwoVectors(c_z._\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br(), i_p._\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br());\n+87 return _\bR_\bo_\bt_\b3(iRc);\n+88 }\n 89\n-_\b9_\b1 _\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-92\n-_\b9_\b4 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-95 return boost::static_pointer_cast(\n-96 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this))); }\n-97\n-_\b1_\b0_\b3 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-DefaultKeyFormatter) const override {\n-104 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n-105 measured_._\bp_\br_\bi_\bn_\bt(s + \".z\");\n-106 if(this->body_P_sensor_)\n-107 this->body_P_sensor_->print(\" sensor pose in body frame: \");\n-108 }\n-109\n-_\b1_\b1_\b3 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& f, double tol = 1e-9) const override {\n-114 const _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br* e = dynamic_cast\n-(&f);\n-115 return e\n-116 && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(f)\n-117 && measured_._\be_\bq_\bu_\ba_\bl_\bs(e->measured_, tol)\n-118 && ((!body_P_sensor_ && !e->body_P_sensor_) || (body_P_sensor_ && e-\n->body_P_sensor_ && body_P_sensor_->equals(*e->body_P_sensor_)));\n-119 }\n-120\n-_\b1_\b2_\b2 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bs_\be_\b3& pose, const _\bP_\bo_\bi_\bn_\bt_\b3& point,\n-123 boost::optional H1 = boost::none, boost::optional H2 =\n-boost::none) const override {\n-124 try {\n-125 if(body_P_sensor_) {\n-126 if(H1) {\n-127 gtsam::Matrix H0;\n-128 _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba stereoCam(pose.compose(*body_P_sensor_, H0), K_);\n-129 _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 reprojectionError(stereoCam._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2) -\n-measured_);\n-130 *H1 = *H1 * H0;\n-131 return reprojectionError._\bv_\be_\bc_\bt_\bo_\br();\n-132 } else {\n-133 _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba stereoCam(pose.compose(*body_P_sensor_), K_);\n-134 return (stereoCam._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2) - measured_).vector();\n-135 }\n-136 } else {\n-137 _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba stereoCam(pose, K_);\n-138 return (stereoCam._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2) - measured_).vector();\n-139 }\n-140 } catch(_\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn& e) {\n-141 if (H1) *H1 = Matrix::Zero(3,6);\n-142 if (H2) *H2 = Z_3x3;\n-143 if (verboseCheirality_)\n-144 std::cout << e.what() << \": Landmark \"<< DefaultKeyFormatter(this->key2())\n-<<\n-145 \" moved behind camera \" << DefaultKeyFormatter(this->key1()) << std::endl;\n-146 if (throwCheirality_)\n-147 throw _\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(this->key2());\n-148 }\n-149 return Vector3::Constant(2.0 * K_->fx());\n-150 }\n-151\n-_\b1_\b5_\b3 const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n-154 return measured_;\n-155 }\n-156\n-_\b1_\b5_\b8 inline const Cal3_S2Stereo::shared_ptr _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n-159 return K_;\n-160 }\n-161\n-_\b1_\b6_\b3 inline bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const { return verboseCheirality_; }\n-164\n-_\b1_\b6_\b6 inline bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const { return throwCheirality_; }\n-167\n-168private:\n-_\b1_\b7_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-171 template\n-172 void serialize(Archive & ar, const unsigned int /*version*/) {\n-173 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n-compatibility\n-174 ar & boost::serialization::make_nvp(\"NoiseModelFactor2\",\n-175 boost::serialization::base_object(*this));\n-176 ar & BOOST_SERIALIZATION_NVP(measured_);\n-177 ar & BOOST_SERIALIZATION_NVP(K_);\n-178 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);\n-179 ar & BOOST_SERIALIZATION_NVP(throwCheirality_);\n-180 ar & BOOST_SERIALIZATION_NVP(verboseCheirality_);\n-181 }\n-182};\n-183\n-185template\n-_\b1_\b8_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br > : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n-187\n-188} // \\ namespace gtsam\n-_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n-A Stereo Camera based on two Simple Cameras.\n+_\b9_\b1 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+92 return boost::static_pointer_cast(\n+93 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this))); }\n+94\n+_\b9_\b6 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+97 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+98 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n+99 std::cout << \"RotateDirectionsFactor:\" << std::endl;\n+100 i_p_._\bp_\br_\bi_\bn_\bt(\"p\");\n+101 c_z_._\bp_\br_\bi_\bn_\bt(\"z\");\n+102 }\n+103\n+_\b1_\b0_\b5 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b3& iRc, boost::optional H = boost::\n+none) const override {\n+106 _\bU_\bn_\bi_\bt_\b3 i_q = iRc * c_z_;\n+107 Vector _\be_\br_\br_\bo_\br = i_p_._\be_\br_\br_\bo_\br(i_q, H);\n+108 if (H) {\n+109 Matrix DR;\n+110 iRc._\br_\bo_\bt_\ba_\bt_\be(c_z_, DR);\n+111 *H = (*H) * DR;\n+112 }\n+113 return _\be_\br_\br_\bo_\br;\n+114 }\n+115\n+116 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+117};\n+118} // namespace gtsam\n+119\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bR_\bo_\bt_\b3_\b._\bh\n+3D rotation represented as a rotation matrix or quaternion\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n Vector3 Point3\n@@ -176,142 +127,100 @@\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n-The most common 5DOF 3D->2D calibration, stereo version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:26\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba\n-A stereo camera class, parameterize by left camera pose and stereo calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n-StereoPoint2 project(const Point3 &point) const\n-Project 3D point to StereoPoint2 (uL,uR,v)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.cpp:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2\n-A 2D stereo point, v will be same for rectified images.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoPoint2.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-Vector3 vector() const\n-convert to vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoPoint2.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const StereoPoint2 &q, double tol=1e-9) const\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoPoint2.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\") const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoPoint2.cpp:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\be\n+Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none,\n+OptionalJacobian< 3, 3 > H2=boost::none) const\n+rotate point from rotated coordinate frame to world\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:149\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br\n+Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const\n+Return unit-norm Vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=std::string()) const\n+The print fuction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\be_\br_\br_\bo_\br\n+Vector2 error(const Unit3 &q, OptionalJacobian< 2, 2 > H_q=boost::none) const\n+Signed, vector-valued error between two directions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:199\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n &formatter=DefaultKeyFormatter) const\n print\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &c) const override\n+Calculate the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:138\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n A convenient base class for creating your own NoiseModelFactor with n\n variables.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br\n-A Generic Stereo Factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n-bool throwCheirality() const\n-return flag for throwing cheirality exceptions\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:166\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Pose3 &pose, const Point3 &point, boost::optional<\n-Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const\n-override\n-h(x)-z\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:122\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &f, double tol=1e-9) const override\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-const Cal3_S2Stereo::shared_ptr calibration() const\n-return the calibration object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:158\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br\n-GenericStereoFactor(const StereoPoint2 &measured, const SharedNoiseModel\n-&model, Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr &K, bool\n-throwCheirality, bool verboseCheirality, boost::optional< POSE >\n-body_P_sensor=boost::none)\n-Constructor with exception-handling flags.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-GenericStereoFactor< POSE, LANDMARK > This\n-typedef for this class (with templates)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br\n-~GenericStereoFactor() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n-bool verboseCheirality() const\n-return verbosity\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< GenericStereoFactor > shared_ptr\n-typedef for shared pointer to this object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const StereoPoint2 & measured() const\n-return the measured\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:153\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br\n-GenericStereoFactor()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:170\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br\n-GenericStereoFactor(const StereoPoint2 &measured, const SharedNoiseModel\n-&model, Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr &K,\n-boost::optional< POSE > body_P_sensor=boost::none)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bR_\bo_\bt_\b3_\b _\b>_\b:_\b:_\bk_\be_\by\n+Key key() const\n+Returns a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Factor on unknown rotation iRC that relates two incremental rotations c1Rc2 =\n+iRc' * i1Ri2 * iRc Whic...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:23\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n+RotateFactor(Key key, const Rot3 &P, const Rot3 &Z, const SharedNoiseModel\n+&model)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Rot3 &R, boost::optional< Matrix & > H=boost::none)\n+const override\n+vector of errors returns 2D vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br\n+Factor on unknown rotation iRc that relates two directions c Directions provide\n+less constraints than...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Rot3 &iRc, boost::optional< Matrix & > H=boost::\n+none) const override\n+vector of errors returns 2D vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br\n+RotateDirectionsFactor(Key key, const Unit3 &i_p, const Unit3 &c_z, const\n+SharedNoiseModel &model)\n Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const std::string &s=\"\", const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\ba_\bm_\bP_\bo_\bs_\be\n-POSE CamPose\n-typedef for Pose Lie Value type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-NoiseModelFactorN< POSE, LANDMARK > Base\n-typedef for base class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be\n+static Rot3 Initialize(const Unit3 &i_p, const Unit3 &c_z)\n+Initialize rotation iRc such that i_p = iRc * c_z.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:94\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:91\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * R\bRo\bot\bta\bat\bte\beF\bFa\bac\bct\bto\bor\br.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01256_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01256_source.html", "unified_diff": "@@ -120,15 +120,15 @@\n
13 * @file ReferenceFrameFactor.h
\n
14 * @brief A constraint for combining graphs by common landmarks and a transform node
\n
15 * @author Alex Cunningham
\n
16 */
\n
17
\n
18#pragma once
\n
19
\n-\n+\n
21
\n
22namespace gtsam {
\n
23
\n
29template<class T, class P>
\n
\n \n
31 const T& trans, const P& global,
\n@@ -213,15 +213,15 @@\n
129};
\n
\n
130
\n
132template<class T1, class T2>
\n
133struct traits<ReferenceFrameFactor<T1, T2> > : public Testable<ReferenceFrameFactor<T1, T2> > {};
\n
134
\n
135} // \\namespace gtsam
\n-
Non-linear factor base classes.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
P transform_point(const T &trans, const P &global, boost::optional< Matrix & > Dtrans, boost::optional< Matrix & > Dglobal)
Transform function that must be specialized specific domains.
Definition ReferenceFrameFactor.h:30
\n
Matrix trans(const Matrix &A)
static transpose function, just calls Eigen transpose member function
Definition Matrix.h:242
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01259_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01259_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/dataset.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/JacobianFactorQ.h Source File\n \n \n \n \n \n \n \n@@ -98,208 +98,119 @@\n
No Matches
\n
\n \n \n \n \n
\n-
dataset.h
\n+
JacobianFactorQ.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n-
22
\n-\n-\n-
25#include <gtsam/sfm/SfmData.h>
\n-\n-\n-\n-\n-\n-\n-\n-\n-
34#include <gtsam/base/Testable.h>
\n-
35#include <gtsam/base/types.h>
\n-
36
\n-
37#include <boost/smart_ptr/shared_ptr.hpp>
\n-
38#include <string>
\n-
39#include <utility> // for pair
\n-
40#include <vector>
\n-
41#include <iosfwd>
\n-
42#include <map>
\n-
43
\n-
44namespace gtsam {
\n-
45
\n-
57GTSAM_EXPORT std::string findExampleDataFile(const std::string& name);
\n-
58
\n-
63GTSAM_EXPORT std::string createRewrittenFileName(const std::string& name);
\n-
64
\n-\n-
73
\n-
\n-\n-
76 KernelFunctionTypeNONE, KernelFunctionTypeHUBER, KernelFunctionTypeTUKEY
\n-
77};
\n-
\n-
78
\n-
85template <typename T>
\n-
86GTSAM_EXPORT std::map<size_t, T> parseVariables(const std::string &filename,
\n-
87 size_t maxIndex = 0);
\n-
88
\n-
95template <typename T>
\n-
96GTSAM_EXPORT std::vector<BinaryMeasurement<T>>
\n-
97parseMeasurements(const std::string &filename,
\n-
98 const noiseModel::Diagonal::shared_ptr &model = nullptr,
\n-
99 size_t maxIndex = 0);
\n-
100
\n-
105template <typename T>
\n-
106GTSAM_EXPORT std::vector<typename BetweenFactor<T>::shared_ptr>
\n-
107parseFactors(const std::string &filename,
\n-
108 const noiseModel::Diagonal::shared_ptr &model = nullptr,
\n-
109 size_t maxIndex = 0);
\n-
110
\n-
112typedef std::pair<size_t, Pose2> IndexedPose;
\n-
113typedef std::pair<size_t, Point2> IndexedLandmark;
\n-
114typedef std::pair<std::pair<size_t, size_t>, Pose2> IndexedEdge;
\n-
115
\n-
121GTSAM_EXPORT boost::optional<IndexedPose> parseVertexPose(std::istream& is,
\n-
122 const std::string& tag);
\n-
123
\n-
129GTSAM_EXPORT boost::optional<IndexedLandmark> parseVertexLandmark(std::istream& is,
\n-
130 const std::string& tag);
\n-
131
\n-
137GTSAM_EXPORT boost::optional<IndexedEdge> parseEdge(std::istream& is,
\n-
138 const std::string& tag);
\n-
139
\n-\n-
144 std::pair<NonlinearFactorGraph::shared_ptr, Values::shared_ptr>;
\n-
145
\n-
153GTSAM_EXPORT GraphAndValues load2D(
\n-
154 std::pair<std::string, SharedNoiseModel> dataset, size_t maxIndex = 0,
\n-
155 bool addNoise = false,
\n-
156 bool smart = true, //
\n-
157 NoiseFormat noiseFormat = NoiseFormatAUTO,
\n-
158 KernelFunctionType kernelFunctionType = KernelFunctionTypeNONE);
\n-
159
\n-
171GTSAM_EXPORT GraphAndValues
\n-
172load2D(const std::string& filename, SharedNoiseModel model = SharedNoiseModel(),
\n-
173 size_t maxIndex = 0, bool addNoise = false, bool smart = true,
\n-
174 NoiseFormat noiseFormat = NoiseFormatAUTO, //
\n-
175 KernelFunctionType kernelFunctionType = KernelFunctionTypeNONE);
\n-
176
\n-
178GTSAM_EXPORT void save2D(const NonlinearFactorGraph& graph,
\n-
179 const Values& config, const noiseModel::Diagonal::shared_ptr model,
\n-
180 const std::string& filename);
\n-
181
\n-
190GTSAM_EXPORT GraphAndValues
\n-
191readG2o(const std::string& g2oFile, const bool is3D = false,
\n-
192 KernelFunctionType kernelFunctionType = KernelFunctionTypeNONE);
\n-
193
\n-
206GTSAM_EXPORT void writeG2o(const NonlinearFactorGraph& graph,
\n-
207 const Values& estimate, const std::string& filename);
\n-
208
\n-
210GTSAM_EXPORT GraphAndValues load3D(const std::string& filename);
\n-
211
\n-
212// Wrapper-friendly versions of parseFactors<Pose2> and parseFactors<Pose2>
\n-
213using BetweenFactorPose2s = std::vector<BetweenFactor<Pose2>::shared_ptr>;
\n-
214GTSAM_EXPORT BetweenFactorPose2s
\n-
215parse2DFactors(const std::string &filename,
\n-
216 const noiseModel::Diagonal::shared_ptr &model = nullptr,
\n-
217 size_t maxIndex = 0);
\n-
218
\n-
219using BetweenFactorPose3s = std::vector<BetweenFactor<Pose3>::shared_ptr>;
\n-
220GTSAM_EXPORT BetweenFactorPose3s
\n-
221parse3DFactors(const std::string &filename,
\n-
222 const noiseModel::Diagonal::shared_ptr &model = nullptr,
\n-
223 size_t maxIndex = 0);
\n-
224
\n-
225using BinaryMeasurementsUnit3 = std::vector<BinaryMeasurement<Unit3>>;
\n-
226using BinaryMeasurementsPoint3 = std::vector<BinaryMeasurement<Point3>>;
\n-
227using BinaryMeasurementsRot3 = std::vector<BinaryMeasurement<Rot3>>;
\n-
228
\n-
229#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
230inline boost::optional<IndexedPose> GTSAM_DEPRECATED
\n-
231parseVertex(std::istream& is, const std::string& tag) {
\n-
232 return parseVertexPose(is, tag);
\n-
233}
\n-
234
\n-
235GTSAM_EXPORT std::map<size_t, Pose3> GTSAM_DEPRECATED
\n-
236parse3DPoses(const std::string& filename, size_t maxIndex = 0);
\n-
237
\n-
238GTSAM_EXPORT std::map<size_t, Point3> GTSAM_DEPRECATED
\n-
239parse3DLandmarks(const std::string& filename, size_t maxIndex = 0);
\n-
240
\n-
241GTSAM_EXPORT GraphAndValues GTSAM_DEPRECATED
\n-
242load2D_robust(const std::string& filename,
\n-
243 const noiseModel::Base::shared_ptr& model, size_t maxIndex = 0);
\n-
244#endif
\n-
245} // namespace gtsam
\n-
Typedefs for easier changing of types.
\n-
Concept check for values that can be used in unit tests.
\n-
Convenience functions for serializing data structures via boost.serialization.
\n-
2D Pose
\n-
3D Pose
\n-
Base class for all pinhole cameras.
\n-
Calibration used by Bundler.
\n-\n-
A non-templated config holding any types of Manifold-group elements.
\n-
Factor Graph consisting of non-linear factors.
\n-
Binary measurement represents a measurement between two keys in a graph. A binary measurement is simi...
\n-
Data structure for dealing with Structure from Motion data.
\n-\n+
12/*
\n+
13 * @file JacobianFactorQ.h
\n+
14 * @date Oct 27, 2013
\n+
15 * @uthor Frank Dellaert
\n+
16 */
\n+
17
\n+
18#pragma once
\n+
19
\n+\n+
21
\n+
22namespace gtsam {
\n+
26template<size_t D, size_t ZDim>
\n+
\n+\n+
28
\n+
29 typedef RegularJacobianFactor<D> Base;
\n+
30 typedef Eigen::Matrix<double, ZDim, D> MatrixZD;
\n+
31 typedef std::pair<Key, Matrix> KeyMatrix;
\n+
32
\n+
33public:
\n+
34
\n+
\n+\n+
37 }
\n+
\n+
38
\n+
\n+\n+
41 const SharedDiagonal& model = SharedDiagonal()) :
\n+
42 Base() {
\n+
43 Matrix zeroMatrix = Matrix::Zero(0, D);
\n+
44 Vector zeroVector = Vector::Zero(0);
\n+
45 std::vector<KeyMatrix> QF;
\n+
46 QF.reserve(keys.size());
\n+
47 for(const Key& key: keys)
\n+
48 QF.push_back(KeyMatrix(key, zeroMatrix));
\n+
49 JacobianFactor::fillTerms(QF, zeroVector, model);
\n+
50 }
\n+
\n+
51
\n+
\n+\n+
54 const std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> >& FBlocks, const Matrix& E, const Matrix3& P,
\n+
55 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) :
\n+
56 Base() {
\n+
57 size_t j = 0, m2 = E.rows(), m = m2 / ZDim;
\n+
58 // Calculate projector Q
\n+
59 Matrix Q = Matrix::Identity(m2,m2) - E * P * E.transpose();
\n+
60 // Calculate pre-computed Jacobian matrices
\n+
61 // TODO: can we do better ?
\n+
62 std::vector<KeyMatrix> QF;
\n+
63 QF.reserve(m);
\n+
64 // Below, we compute each mZDim*D block A_j = Q_j * F_j = (mZDim*ZDim) * (Zdim*D)
\n+
65 for (size_t k = 0; k < FBlocks.size(); ++k) {
\n+
66 Key key = keys[k];
\n+
67 QF.push_back(
\n+
68 KeyMatrix(key, - Q.block(0, ZDim * j++, m2, ZDim) * FBlocks[k]));
\n+
69 }
\n+
70 // Which is then passed to the normal JacobianFactor constructor
\n+
71 JacobianFactor::fillTerms(QF, - Q * b, model);
\n+
72 }
\n+
\n+
73};
\n+
\n+
74// end class JacobianFactorQ
\n+
75
\n+
76// traits
\n+
\n+
77template<size_t D, size_t ZDim> struct traits<JacobianFactorQ<D, ZDim> > : public Testable<
\n+
78 JacobianFactorQ<D, ZDim> > {
\n+
79};
\n+
\n+
80
\n+
81}
\n+
JacobianFactor class with fixed sized blcoks.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
GraphAndValues load2D(const string &filename, SharedNoiseModel model, size_t maxIndex, bool addNoise, bool smart, NoiseFormat noiseFormat, KernelFunctionType kernelFunctionType)
Load TORO/G2O style graph files.
Definition dataset.cpp:502
\n-
GTSAM_EXPORT std::map< size_t, T > parseVariables(const std::string &filename, size_t maxIndex=0)
Parse variables in a line-based text format (like g2o) into a map.
\n-
void writeG2o(const NonlinearFactorGraph &graph, const Values &estimate, const string &filename)
This function writes a g2o file from NonlinearFactorGraph and a Values structure.
Definition dataset.cpp:632
\n-
std::pair< size_t, Pose2 > IndexedPose
Return type for auxiliary functions.
Definition dataset.h:112
\n-
GraphAndValues readG2o(const string &g2oFile, const bool is3D, KernelFunctionType kernelFunctionType)
This function parses a g2o file and stores the measurements into a NonlinearFactorGraph and the initi...
Definition dataset.cpp:617
\n-
GTSAM_EXPORT std::vector< typename BetweenFactor< T >::shared_ptr > parseFactors(const std::string &filename, const noiseModel::Diagonal::shared_ptr &model=nullptr, size_t maxIndex=0)
Parse BetweenFactors in a line-based text format (like g2o) into a vector of shared pointers.
\n-
KernelFunctionType
Robust kernel type to wrap around quadratic noise model.
Definition dataset.h:75
\n-
NoiseFormat
Indicates how noise parameters are stored in file.
Definition dataset.h:66
\n-
@ NoiseFormatGRAPH
default: toro-style order, but covariance matrix !
Definition dataset.h:69
\n-
@ NoiseFormatAUTO
Try to guess covariance matrix layout.
Definition dataset.h:71
\n-
@ NoiseFormatTORO
Information matrix, but inf_ff inf_fs inf_ss inf_rr inf_fr inf_sr.
Definition dataset.h:68
\n-
@ NoiseFormatCOV
Covariance matrix C11, C12, C13, C22, C23, C33.
Definition dataset.h:70
\n-
@ NoiseFormatG2O
Information matrix I11, I12, I13, I22, I23, I33.
Definition dataset.h:67
\n-
boost::optional< IndexedLandmark > parseVertexLandmark(istream &is, const string &tag)
Parse G2O landmark vertex "id x y".
Definition dataset.cpp:187
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
boost::optional< IndexedEdge > parseEdge(istream &is, const string &tag)
Parse TORO/G2O edge "id1 id2 x y yaw".
Definition dataset.cpp:293
\n-
std::pair< NonlinearFactorGraph::shared_ptr, Values::shared_ptr > GraphAndValues
Return type for load functions, which return a graph and initial values.
Definition dataset.h:144
\n-
boost::optional< IndexedPose > parseVertexPose(istream &is, const string &tag)
Parse TORO/G2O vertex "id x y yaw".
Definition dataset.cpp:167
\n-
GraphAndValues load3D(const string &filename)
Load TORO 3D Graph.
Definition dataset.cpp:918
\n-
void save2D(const NonlinearFactorGraph &graph, const Values &config, const noiseModel::Diagonal::shared_ptr model, const string &filename)
save 2d graph
Definition dataset.cpp:584
\n-
string createRewrittenFileName(const string &name)
Creates a temporary file name that needs to be ignored in .gitingnore for checking read-write opratio...
Definition dataset.cpp:99
\n-
string findExampleDataFile(const string &name)
Find the full path to an example dataset distributed with gtsam.
Definition dataset.cpp:62
\n-
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n-
Definition NonlinearFactorGraph.h:55
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal &noiseModel)
Internal function to fill blocks and set dimensions.
Definition JacobianFactor-inl.h:60
\n+
JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator.
Definition RegularJacobianFactor.h:32
\n+
JacobianFactor for Schur complement that uses Q noise model.
Definition JacobianFactorQ.h:27
\n+
JacobianFactorQ()
Default constructor.
Definition JacobianFactorQ.h:36
\n+
JacobianFactorQ(const KeyVector &keys, const std::vector< MatrixZD, Eigen::aligned_allocator< MatrixZD > > &FBlocks, const Matrix &E, const Matrix3 &P, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Constructor.
Definition JacobianFactorQ.h:53
\n+
JacobianFactorQ(const KeyVector &keys, const SharedDiagonal &model=SharedDiagonal())
Empty constructor with keys.
Definition JacobianFactorQ.h:40
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,295 +1,141 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-dataset.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+JacobianFactorQ.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b2_\b._\bh>\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-32#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n-33#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-34#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-35#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-36\n-37#include \n-38#include \n-39#include // for pair\n-40#include \n-41#include \n-42#include \n-43\n-44namespace _\bg_\bt_\bs_\ba_\bm {\n-45\n-57GTSAM_EXPORT std::string _\bf_\bi_\bn_\bd_\bE_\bx_\ba_\bm_\bp_\bl_\be_\bD_\ba_\bt_\ba_\bF_\bi_\bl_\be(const std::string& name);\n-58\n-63GTSAM_EXPORT std::string _\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bw_\br_\bi_\bt_\bt_\be_\bn_\bF_\bi_\bl_\be_\bN_\ba_\bm_\be(const std::string& name);\n-64\n-_\b6_\b6enum _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt {\n-_\b6_\b7 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bG_\b2_\bO,\n-_\b6_\b8 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bT_\bO_\bR_\bO,\n-_\b6_\b9 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bG_\bR_\bA_\bP_\bH,\n-_\b7_\b0 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bC_\bO_\bV,\n-71 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO\n-_\b7_\b2};\n-73\n-_\b7_\b5enum _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be {\n-76 KernelFunctionTypeNONE, KernelFunctionTypeHUBER, KernelFunctionTypeTUKEY\n-77};\n-78\n-85template \n-_\b8_\b6GTSAM_EXPORT std::map _\bp_\ba_\br_\bs_\be_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs(const std::string &filename,\n-87 size_t maxIndex = 0);\n-88\n-95template \n-96GTSAM_EXPORT std::vector>\n-_\b9_\b7parseMeasurements(const std::string &filename,\n-98 const noiseModel::Diagonal::shared_ptr &model = nullptr,\n-99 size_t maxIndex = 0);\n-100\n-105template \n-106GTSAM_EXPORT std::vector::shared_ptr>\n-_\b1_\b0_\b7_\bp_\ba_\br_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\bs(const std::string &filename,\n-108 const noiseModel::Diagonal::shared_ptr &model = nullptr,\n-109 size_t maxIndex = 0);\n-110\n-_\b1_\b1_\b2typedef std::pair _\bI_\bn_\bd_\be_\bx_\be_\bd_\bP_\bo_\bs_\be;\n-113typedef std::pair IndexedLandmark;\n-114typedef std::pair, _\bP_\bo_\bs_\be_\b2> IndexedEdge;\n-115\n-121GTSAM_EXPORT boost::optional _\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bP_\bo_\bs_\be(std::istream& is,\n-122 const std::string& tag);\n-123\n-129GTSAM_EXPORT boost::optional _\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\ba_\bn_\bd_\bm_\ba_\br_\bk(std::\n-istream& is,\n-130 const std::string& tag);\n-131\n-137GTSAM_EXPORT boost::optional _\bp_\ba_\br_\bs_\be_\bE_\bd_\bg_\be(std::istream& is,\n-138 const std::string& tag);\n-139\n-_\b1_\b4_\b3using _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs =\n-144 std::pair;\n-145\n-153GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs _\bl_\bo_\ba_\bd_\b2_\bD(\n-154 std::pair dataset, size_t maxIndex = 0,\n-155 bool addNoise = false,\n-156 bool smart = true, //\n-157 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt noiseFormat = _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO,\n-158 _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be kernelFunctionType = KernelFunctionTypeNONE);\n-159\n-171GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-172_\bl_\bo_\ba_\bd_\b2_\bD(const std::string& filename, _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl model =\n-_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(),\n-173 size_t maxIndex = 0, bool addNoise = false, bool smart = true,\n-174 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt noiseFormat = _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO, //\n-175 _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be kernelFunctionType = KernelFunctionTypeNONE);\n-176\n-178GTSAM_EXPORT void _\bs_\ba_\bv_\be_\b2_\bD(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n-179 const _\bV_\ba_\bl_\bu_\be_\bs& config, const noiseModel::Diagonal::shared_ptr model,\n-180 const std::string& filename);\n-181\n-190GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-191_\br_\be_\ba_\bd_\bG_\b2_\bo(const std::string& g2oFile, const bool is3D = false,\n-192 _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be kernelFunctionType = KernelFunctionTypeNONE);\n-193\n-206GTSAM_EXPORT void _\bw_\br_\bi_\bt_\be_\bG_\b2_\bo(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n-207 const _\bV_\ba_\bl_\bu_\be_\bs& estimate, const std::string& filename);\n-208\n-210GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs _\bl_\bo_\ba_\bd_\b3_\bD(const std::string& filename);\n-211\n-212// Wrapper-friendly versions of parseFactors and parseFactors\n-213using BetweenFactorPose2s = std::vector::shared_ptr>;\n-214GTSAM_EXPORT BetweenFactorPose2s\n-215parse2DFactors(const std::string &filename,\n-216 const noiseModel::Diagonal::shared_ptr &model = nullptr,\n-217 size_t maxIndex = 0);\n-218\n-219using BetweenFactorPose3s = std::vector::shared_ptr>;\n-220GTSAM_EXPORT BetweenFactorPose3s\n-221parse3DFactors(const std::string &filename,\n-222 const noiseModel::Diagonal::shared_ptr &model = nullptr,\n-223 size_t maxIndex = 0);\n-224\n-225using BinaryMeasurementsUnit3 = std::vector>;\n-226using BinaryMeasurementsPoint3 = std::vector>;\n-227using BinaryMeasurementsRot3 = std::vector>;\n-228\n-229#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-230inline boost::optional GTSAM_DEPRECATED\n-231parseVertex(std::istream& is, const std::string& tag) {\n-232 return _\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bP_\bo_\bs_\be(is, tag);\n-233}\n-234\n-235GTSAM_EXPORT std::map GTSAM_DEPRECATED\n-236parse3DPoses(const std::string& filename, size_t maxIndex = 0);\n-237\n-238GTSAM_EXPORT std::map GTSAM_DEPRECATED\n-239parse3DLandmarks(const std::string& filename, size_t maxIndex = 0);\n-240\n-241GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs GTSAM_DEPRECATED\n-242load2D_robust(const std::string& filename,\n-243 const noiseModel::Base::shared_ptr& model, size_t maxIndex = 0);\n-244#endif\n-245} // namespace gtsam\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-Convenience functions for serializing data structures via boost.serialization.\n-_\bP_\bo_\bs_\be_\b2_\b._\bh\n-2D Pose\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n-_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n-Base class for all pinhole cameras.\n-_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n-Calibration used by Bundler.\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n-_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n-Binary measurement represents a measurement between two keys in a graph. A\n-binary measurement is simi...\n-_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b._\bh\n-Data structure for dealing with Structure from Motion data.\n-_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+12/*\n+13 * @file JacobianFactorQ.h\n+14 * @date Oct 27, 2013\n+15 * @uthor Frank Dellaert\n+16 */\n+17\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21\n+22namespace _\bg_\bt_\bs_\ba_\bm {\n+26template\n+_\b2_\b7class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ: public _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n+28\n+29 typedef _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bD_\b> Base;\n+30 typedef Eigen::Matrix MatrixZD;\n+31 typedef std::pair KeyMatrix;\n+32\n+33public:\n+34\n+_\b3_\b6 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ() {\n+37 }\n+38\n+_\b4_\b0 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs, //\n+41 const SharedDiagonal& model = SharedDiagonal()) :\n+42 Base() {\n+43 Matrix zeroMatrix = Matrix::Zero(0, D);\n+44 Vector zeroVector = Vector::Zero(0);\n+45 std::vector QF;\n+46 QF.reserve(_\bk_\be_\by_\bs.size());\n+47 for(const _\bK_\be_\by& key: _\bk_\be_\by_\bs)\n+48 QF.push_back(KeyMatrix(key, zeroMatrix));\n+49 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(QF, zeroVector, model);\n+50 }\n+51\n+_\b5_\b3 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n+54 const std::vector >& FBlocks,\n+const Matrix& E, const Matrix3& P,\n+55 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) :\n+56 Base() {\n+57 size_t j = 0, m2 = E.rows(), m = m2 / ZDim;\n+58 // Calculate projector Q\n+59 Matrix Q = Matrix::Identity(m2,m2) - E * P * E.transpose();\n+60 // Calculate pre-computed Jacobian matrices\n+61 // TODO: can we do better ?\n+62 std::vector QF;\n+63 QF.reserve(m);\n+64 // Below, we compute each mZDim*D block A_j = Q_j * F_j = (mZDim*ZDim) *\n+(Zdim*D)\n+65 for (size_t k = 0; k < FBlocks.size(); ++k) {\n+66 _\bK_\be_\by key = _\bk_\be_\by_\bs[k];\n+67 QF.push_back(\n+68 KeyMatrix(key, - Q.block(0, ZDim * j++, m2, ZDim) * FBlocks[k]));\n+69 }\n+70 // Which is then passed to the normal JacobianFactor constructor\n+71 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(QF, - Q * b, model);\n+72 }\n+73};\n+74// end class JacobianFactorQ\n+75\n+76// traits\n+_\b7_\b7template struct _\bt_\br_\ba_\bi_\bt_\bs<_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ > :\n+public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n+78 JacobianFactorQ > {\n+79};\n+80\n+81}\n+_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+JacobianFactor class with fixed sized blcoks.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\ba_\bd_\b2_\bD\n-GraphAndValues load2D(const string &filename, SharedNoiseModel model, size_t\n-maxIndex, bool addNoise, bool smart, NoiseFormat noiseFormat,\n-KernelFunctionType kernelFunctionType)\n-Load TORO/G2O style graph files.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:502\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-GTSAM_EXPORT std::map< size_t, T > parseVariables(const std::string &filename,\n-size_t maxIndex=0)\n-Parse variables in a line-based text format (like g2o) into a map.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bG_\b2_\bo\n-void writeG2o(const NonlinearFactorGraph &graph, const Values &estimate, const\n-string &filename)\n-This function writes a g2o file from NonlinearFactorGraph and a Values\n-structure.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:632\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bP_\bo_\bs_\be\n-std::pair< size_t, Pose2 > IndexedPose\n-Return type for auxiliary functions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\be_\ba_\bd_\bG_\b2_\bo\n-GraphAndValues readG2o(const string &g2oFile, const bool is3D,\n-KernelFunctionType kernelFunctionType)\n-This function parses a g2o file and stores the measurements into a\n-NonlinearFactorGraph and the initi...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:617\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-GTSAM_EXPORT std::vector< typename BetweenFactor< T >::shared_ptr >\n-parseFactors(const std::string &filename, const noiseModel::Diagonal::\n-shared_ptr &model=nullptr, size_t maxIndex=0)\n-Parse BetweenFactors in a line-based text format (like g2o) into a vector of\n-shared pointers.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be\n-KernelFunctionType\n-Robust kernel type to wrap around quadratic noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt\n-NoiseFormat\n-Indicates how noise parameters are stored in file.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bG_\bR_\bA_\bP_\bH\n-@ NoiseFormatGRAPH\n-default: toro-style order, but covariance matrix !\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO\n-@ NoiseFormatAUTO\n-Try to guess covariance matrix layout.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bT_\bO_\bR_\bO\n-@ NoiseFormatTORO\n-Information matrix, but inf_ff inf_fs inf_ss inf_rr inf_fr inf_sr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bC_\bO_\bV\n-@ NoiseFormatCOV\n-Covariance matrix C11, C12, C13, C22, C23, C33.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bG_\b2_\bO\n-@ NoiseFormatG2O\n-Information matrix I11, I12, I13, I22, I23, I33.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\ba_\bn_\bd_\bm_\ba_\br_\bk\n-boost::optional< IndexedLandmark > parseVertexLandmark(istream &is, const\n-string &tag)\n-Parse G2O landmark vertex \"id x y\".\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:187\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bE_\bd_\bg_\be\n-boost::optional< IndexedEdge > parseEdge(istream &is, const string &tag)\n-Parse TORO/G2O edge \"id1 id2 x y yaw\".\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:293\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-std::pair< NonlinearFactorGraph::shared_ptr, Values::shared_ptr >\n-GraphAndValues\n-Return type for load functions, which return a graph and initial values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:144\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bP_\bo_\bs_\be\n-boost::optional< IndexedPose > parseVertexPose(istream &is, const string &tag)\n-Parse TORO/G2O vertex \"id x y yaw\".\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\ba_\bd_\b3_\bD\n-GraphAndValues load3D(const string &filename)\n-Load TORO 3D Graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:918\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\ba_\bv_\be_\b2_\bD\n-void save2D(const NonlinearFactorGraph &graph, const Values &config, const\n-noiseModel::Diagonal::shared_ptr model, const string &filename)\n-save 2d graph\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:584\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bw_\br_\bi_\bt_\bt_\be_\bn_\bF_\bi_\bl_\be_\bN_\ba_\bm_\be\n-string createRewrittenFileName(const string &name)\n-Creates a temporary file name that needs to be ignored in .gitingnore for\n-checking read-write opratio...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bi_\bn_\bd_\bE_\bx_\ba_\bm_\bp_\bl_\be_\bD_\ba_\bt_\ba_\bF_\bi_\bl_\be\n-string findExampleDataFile(const string &name)\n-Find the full path to an example dataset distributed with gtsam.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-A 2D pose (Point2,Rot2)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs\n+void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal\n+&noiseModel)\n+Internal function to fill blocks and set dimensions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor-inl.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+JacobianFactor with constant sized blocks Provides raw memory access versions\n+of linear operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ\n+JacobianFactor for Schur complement that uses Q noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQ.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ\n+JacobianFactorQ()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQ.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ\n+JacobianFactorQ(const KeyVector &keys, const std::vector< MatrixZD, Eigen::\n+aligned_allocator< MatrixZD > > &FBlocks, const Matrix &E, const Matrix3 &P,\n+const Vector &b, const SharedDiagonal &model=SharedDiagonal())\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQ.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ\n+JacobianFactorQ(const KeyVector &keys, const SharedDiagonal\n+&model=SharedDiagonal())\n+Empty constructor with keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQ.h:40\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh\n+ * J\bJa\bac\bco\bob\bbi\bia\ban\bnF\bFa\bac\bct\bto\bor\brQ\bQ.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01262.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01262.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/lago.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/dataset.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,185 +95,170 @@\n \n \n \n \n
\n \n-
lago.h File Reference
\n+
dataset.cpp File Reference
\n
\n
\n \n-

Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph Optimization). \n+

utility functions for loading datasets \n More...

\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Macros

\n+#define LINESIZE   81920
 
\n \n-\n-\n+\n+\n+\n+\n+\n

\n Typedefs

\n-typedef std::map< Key, double > gtsam::lago::key2doubleMap
 
\n+template<typename T >
using gtsam::Parser = std::function< boost::optional< T >(istream &is, const string &tag)>
 
\n+using gtsam::BearingRange2D = BearingRange< Pose2, Point2 >
 
\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+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n Functions

\n-key2doubleMap gtsam::lago::computeThetasToRoot (const key2doubleMap &deltaThetaMap, const PredecessorMap< Key > &tree)
 Compute the cumulative orientations (without wrapping) for all nodes wrt the root (root has zero orientation).
 
void gtsam::lago::getSymbolicGraph (std::vector< size_t > &spanningTreeIds, std::vector< size_t > &chordsIds, key2doubleMap &deltaThetaMap, const PredecessorMap< Key > &tree, const NonlinearFactorGraph &g)
 Given a factor graph \"g\", and a spanning tree \"tree\", select the nodes belonging to the tree and to g, and stores the factor slots corresponding to edges in the tree and to chordsIds wrt this tree.
 
GaussianFactorGraph gtsam::lago::buildLinearOrientationGraph (const std::vector< size_t > &spanningTreeIds, const std::vector< size_t > &chordsIds, const NonlinearFactorGraph &g, const key2doubleMap &orientationsToRoot, const PredecessorMap< Key > &tree)
 Linear factor graph with regularized orientation measurements.
 
\n-VectorValues gtsam::lago::initializeOrientations (const NonlinearFactorGraph &graph, bool useOdometricPath=true)
 LAGO: Return the orientations of the Pose2 in a generic factor graph.
 
\n-Values gtsam::lago::initialize (const NonlinearFactorGraph &graph, bool useOdometricPath=true)
 Return the values for the Pose2 in a generic factor graph.
 
\n-Values gtsam::lago::initialize (const NonlinearFactorGraph &graph, const Values &initialGuess)
 Only correct the orientation part in initialGuess.
 
string gtsam::findExampleDataFile (const std::string &name)
 Find the full path to an example dataset distributed with gtsam.
 
\n+string gtsam::createRewrittenFileName (const std::string &name)
 Creates a temporary file name that needs to be ignored in .gitingnore for checking read-write oprations.
 
\n+template<typename T >
map< size_t, T > gtsam::parseToMap (const string &filename, Parser< pair< size_t, T > > parse, size_t maxIndex)
 
boost::optional< IndexedPosegtsam::parseVertexPose (std::istream &is, const std::string &tag)
 Parse TORO/G2O vertex \"id x y yaw\".
 
\n+template<>
GTSAM_EXPORT std::map< size_t, Pose2gtsam::parseVariables< Pose2 > (const std::string &filename, size_t maxIndex)
 
boost::optional< IndexedLandmark > gtsam::parseVertexLandmark (std::istream &is, const std::string &tag)
 Parse G2O landmark vertex \"id x y\".
 
\n+template<>
GTSAM_EXPORT std::map< size_t, Point2gtsam::parseVariables< Point2 > (const std::string &filename, size_t maxIndex)
 
boost::optional< IndexedEdge > gtsam::parseEdge (std::istream &is, const std::string &tag)
 Parse TORO/G2O edge \"id1 id2 x y yaw\".
 
\n+boost::shared_ptr< Samplergtsam::createSampler (const SharedNoiseModel &model)
 
\n+template<>
GTSAM_EXPORT std::vector< BinaryMeasurement< Pose2 > > gtsam::parseMeasurements (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model, size_t maxIndex)
 
\n+template<>
GTSAM_EXPORT std::vector< BinaryMeasurement< Rot2 > > gtsam::parseMeasurements (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model, size_t maxIndex)
 
\n+template<>
GTSAM_EXPORT std::vector< BetweenFactor< Pose2 >::shared_ptr > gtsam::parseFactors< Pose2 > (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model, size_t maxIndex)
 
GraphAndValues gtsam::load2D (const std::string &filename, SharedNoiseModel model=SharedNoiseModel(), size_t maxIndex=0, bool addNoise=false, bool smart=true, NoiseFormat noiseFormat=NoiseFormatAUTO, KernelFunctionType kernelFunctionType=KernelFunctionTypeNONE)
 Load TORO/G2O style graph files.
 
GraphAndValues gtsam::load2D (pair< string, SharedNoiseModel > dataset, size_t maxIndex, bool addNoise, bool smart, NoiseFormat noiseFormat, KernelFunctionType kernelFunctionType)
 Load TORO 2D Graph.
 
\n+GraphAndValues gtsam::load2D_robust (const string &filename, const noiseModel::Base::shared_ptr &model, size_t maxIndex)
 
\n+void gtsam::save2D (const NonlinearFactorGraph &graph, const Values &config, const noiseModel::Diagonal::shared_ptr model, const std::string &filename)
 save 2d graph
 
GraphAndValues gtsam::readG2o (const std::string &g2oFile, const bool is3D=false, KernelFunctionType kernelFunctionType=KernelFunctionTypeNONE)
 This function parses a g2o file and stores the measurements into a NonlinearFactorGraph and the initial guess in a Values structure.
 
void gtsam::writeG2o (const NonlinearFactorGraph &graph, const Values &estimate, const std::string &filename)
 This function writes a g2o file from NonlinearFactorGraph and a Values structure.
 
\n+istream & gtsam::operator>> (istream &is, Quaternion &q)
 
\n+istream & gtsam::operator>> (istream &is, Rot3 &R)
 
\n+boost::optional< pair< size_t, Pose3 > > gtsam::parseVertexPose3 (istream &is, const string &tag)
 
\n+template<>
GTSAM_EXPORT std::map< size_t, Pose3gtsam::parseVariables< Pose3 > (const std::string &filename, size_t maxIndex)
 
\n+boost::optional< pair< size_t, Point3 > > gtsam::parseVertexPoint3 (istream &is, const string &tag)
 
\n+template<>
GTSAM_EXPORT std::map< size_t, Point3gtsam::parseVariables< Point3 > (const std::string &filename, size_t maxIndex)
 
\n+istream & gtsam::operator>> (istream &is, Matrix6 &m)
 
\n+template<>
GTSAM_EXPORT std::vector< BinaryMeasurement< Pose3 > > gtsam::parseMeasurements (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model, size_t maxIndex)
 
\n+template<>
GTSAM_EXPORT std::vector< BinaryMeasurement< Rot3 > > gtsam::parseMeasurements (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model, size_t maxIndex)
 
\n+template<>
GTSAM_EXPORT std::vector< BetweenFactor< Pose3 >::shared_ptr > gtsam::parseFactors< Pose3 > (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model, size_t maxIndex)
 
\n+GraphAndValues gtsam::load3D (const std::string &filename)
 Load TORO 3D Graph.
 
\n+BetweenFactorPose2s gtsam::parse2DFactors (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model, size_t maxIndex)
 
\n+BetweenFactorPose3s gtsam::parse3DFactors (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model, size_t maxIndex)
 
\n

Detailed Description

\n-

Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph Optimization).

\n-
Author
Luca Carlone
\n+

utility functions for loading datasets

\n+
Date
Jan 22, 2010
\n+
Author
Kai Ni
\n
\n-Frank Dellaert
\n-
Date
May 14, 2014
\n-

see papers:

\n-

L. Carlone, R. Aragues, J. Castellanos, and B. Bona, A fast and accurate approximation for planar pose graph optimization, IJRR, 2014.

\n-

L. Carlone, R. Aragues, J.A. Castellanos, and B. Bona, A linear approximation for graph-based simultaneous localization and mapping, RSS, 2011.

\n-
Parameters
\n- \n- \n-
graphnonlinear factor graph (can include arbitrary factors but we assume that there is a subgraph involving Pose2 and betweenFactors). Also in the current version we assume that there is an odometric spanning path (x0->x1, x1->x2, etc) and a prior on x0. This assumption can be relaxed by using the extra argument useOdometricPath = false, although this part of code is not stable yet.
\n-
\n-
\n-
Returns
Values: initial guess from LAGO (only pose2 are initialized)
\n-
Author
Luca Carlone
\n+Luca Carlone \n
\n-Frank Dellaert
\n-
Date
May 14, 2014
\n-

Function Documentation

\n-\n-

◆ buildLinearOrientationGraph()

\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-
GTSAM_EXPORT GaussianFactorGraph gtsam::lago::buildLinearOrientationGraph (const vector< size_t > & spanningTreeIds,
const vector< size_t > & chordsIds,
const NonlinearFactorGraphg,
const key2doubleMap & orientationsToRoot,
const PredecessorMap< Key > & tree 
)
\n-
\n-\n-

Linear factor graph with regularized orientation measurements.

\n-

cout << \"REG: key1= \" << DefaultKeyFormatter(key1) << \" key2= \" << DefaultKeyFormatter(key2) << endl;

\n-\n-
\n-
\n-\n-

◆ getSymbolicGraph()

\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-
GTSAM_EXPORT void gtsam::lago::getSymbolicGraph (std::vector< size_t > & spanningTreeIds,
std::vector< size_t > & chordsIds,
key2doubleMap & deltaThetaMap,
const PredecessorMap< Key > & tree,
const NonlinearFactorGraphg 
)
\n-
\n-\n-

Given a factor graph \"g\", and a spanning tree \"tree\", select the nodes belonging to the tree and to g, and stores the factor slots corresponding to edges in the tree and to chordsIds wrt this tree.

\n-

Also it computes deltaThetaMap which is a fast way to encode relative orientations along the tree: for a node key2, s.t. tree[key2]=key1, the value deltaThetaMap[key2] is relative orientation theta[key2]-theta[key1]

\n-\n-
\n-
\n-
\n+Frank Dellaert \n+
\n+Varun Agrawal
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,114 +1,188 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-lago.h File Reference\n-Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph\n-Optimization). _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+dataset.cpp File Reference\n+utility functions for loading datasets _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 L\bLI\bIN\bNE\bES\bSI\bIZ\bZE\bE\u00a0\u00a0\u00a081920\n+\u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef std::map< _\bK_\be_\by, double >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bla\bag\bgo\bo:\b::\b:k\bke\bey\by2\b2d\bdo\bou\bub\bbl\ble\beM\bMa\bap\bp\n+template\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPa\bar\brs\bse\ber\br = std::function< boost::optional< T >(istream &is, const\n+ string &tag)>\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBe\bea\bar\bri\bin\bng\bgR\bRa\ban\bng\bge\be2\b2D\bD = _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be< _\bP_\bo_\bs_\be_\b2, _\bP_\bo_\bi_\bn_\bt_\b2 >\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- key2doubleMap\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bla\bag\bgo\bo:\b::\b:c\bco\bom\bmp\bpu\but\bte\beT\bTh\bhe\bet\bta\bas\bsT\bTo\boR\bRo\boo\bot\bt (const key2doubleMap\n- &deltaThetaMap, const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< _\bK_\be_\by > &tree)\n-\u00a0 Compute the cumulative orientations (without wrapping) for\n- all nodes wrt the root (root has zero orientation).\n-\u00a0\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\ba_\bg_\bo_\b:_\b:_\bg_\be_\bt_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bG_\br_\ba_\bp_\bh (std::vector< size_t >\n- &spanningTreeIds, std::vector< size_t > &chordsIds,\n- key2doubleMap &deltaThetaMap, const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< _\bK_\be_\by >\n- &tree, const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &g)\n- Given a factor graph \"g\", and a spanning tree \"tree\",\n-\u00a0 select the nodes belonging to the tree and to g, and\n- stores the factor slots corresponding to edges in the tree\n- and to chordsIds wrt this tree.\n-\u00a0\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\ba_\bg_\bo_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bL_\bi_\bn_\be_\ba_\br_\bO_\br_\bi_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh (const std::\n- vector< size_t > &spanningTreeIds, const std::vector<\n- size_t > &chordsIds, const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &g, const\n- key2doubleMap &orientationsToRoot, const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp<\n- _\bK_\be_\by > &tree)\n-\u00a0 Linear factor graph with regularized orientation\n- measurements.\n-\u00a0\n- _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bla\bag\bgo\bo:\b::\b:i\bin\bni\bit\bti\bia\bal\bli\biz\bze\beO\bOr\bri\bie\ben\bnt\bta\bat\bti\bio\bon\bns\bs (const\n- _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph, bool useOdometricPath=true)\n-\u00a0 LAGO: Return the orientations of the _\bP_\bo_\bs_\be_\b2 in a generic\n- factor graph.\n-\u00a0\n- _\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bla\bag\bgo\bo:\b::\b:i\bin\bni\bit\bti\bia\bal\bli\biz\bze\be (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n- &graph, bool useOdometricPath=true)\n-\u00a0 Return the values for the _\bP_\bo_\bs_\be_\b2 in a generic factor graph.\n-\u00a0\n- _\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bla\bag\bgo\bo:\b::\b:i\bin\bni\bit\bti\bia\bal\bli\biz\bze\be (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n- &graph, const _\bV_\ba_\bl_\bu_\be_\bs &initialGuess)\n-\u00a0 Only correct the orientation part in initialGuess.\n+ string\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bi_\bn_\bd_\bE_\bx_\ba_\bm_\bp_\bl_\be_\bD_\ba_\bt_\ba_\bF_\bi_\bl_\be (const std::\n+ string &name)\n+\u00a0 Find the full path to an example dataset\n+ distributed with gtsam.\n+\u00a0\n+ string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bcr\bre\bea\bat\bte\beR\bRe\bew\bwr\bri\bit\btt\bte\ben\bnF\bFi\bil\ble\beN\bNa\bam\bme\be (const\n+ std::string &name)\n+ Creates a temporary file name that needs\n+\u00a0 to be ignored in .gitingnore for checking\n+ read-write oprations.\n+\u00a0\n+template\n+ map< size_t, T >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beT\bTo\boM\bMa\bap\bp (const string &filename,\n+ Parser< pair< size_t, T > > parse, size_t\n+ maxIndex)\n+\u00a0\n+ boost::optional< _\bI_\bn_\bd_\be_\bx_\be_\bd_\bP_\bo_\bs_\be >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bP_\bo_\bs_\be (std::istream &is,\n+ const std::string &tag)\n+\u00a0 Parse TORO/G2O vertex \"id x y yaw\".\n+\u00a0\n+ template<>\n+GTSAM_EXPORT std::map< size_t, _\bP_\bo_\bs_\be_\b2 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beV\bVa\bar\bri\bia\bab\bbl\ble\bes\bs<\b< P\bPo\bos\bse\be2\b2 >\b> (const\n+ >\u00a0 std::string &filename, size_t maxIndex)\n+\u00a0\n+ boost::optional< IndexedLandmark >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\ba_\bn_\bd_\bm_\ba_\br_\bk (std::istream\n+ &is, const std::string &tag)\n+\u00a0 Parse G2O landmark vertex \"id x y\".\n+\u00a0\n+ template<>\n+ GTSAM_EXPORT std::map< size_t, g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beV\bVa\bar\bri\bia\bab\bbl\ble\bes\bs<\b< P\bPo\boi\bin\bnt\bt2\b2 >\b> (const\n+ _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 std::string &filename, size_t maxIndex)\n+\u00a0\n+ boost::optional< IndexedEdge >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bE_\bd_\bg_\be (std::istream &is, const\n+ std::string &tag)\n+\u00a0 Parse TORO/G2O edge \"id1 id2 x y yaw\".\n+\u00a0\n+ boost::shared_ptr< _\bS_\ba_\bm_\bp_\bl_\be_\br >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bcr\bre\bea\bat\bte\beS\bSa\bam\bmp\bpl\ble\ber\br (const\n+ _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model)\n+\u00a0\n+ template<>\n+ GTSAM_EXPORT std::vector< g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const std::\n+ _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< _\bP_\bo_\bs_\be_\b2 > >\u00a0 string &filename, const noiseModel::\n+ Diagonal::shared_ptr &model, size_t\n+ maxIndex)\n+\u00a0\n+ template<>\n+ GTSAM_EXPORT std::vector< g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const std::\n+ _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< _\bR_\bo_\bt_\b2 > >\u00a0 string &filename, const noiseModel::\n+ Diagonal::shared_ptr &model, size_t\n+ maxIndex)\n+\u00a0\n+ template<>\n+ GTSAM_EXPORT std::vector< g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beF\bFa\bac\bct\bto\bor\brs\bs<\b< P\bPo\bos\bse\be2\b2 >\b> (const std::\n+ _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br< _\bP_\bo_\bs_\be_\b2 >::shared_ptr string &filename, const noiseModel::\n+ >\u00a0 Diagonal::shared_ptr &model, size_t\n+ maxIndex)\n+\u00a0\n+ _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\ba_\bd_\b2_\bD (const std::string\n+ &filename, _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+ model=_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(), size_t\n+ maxIndex=0, bool addNoise=false, bool\n+ smart=true, _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt\n+ noiseFormat=_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO,\n+ _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be\n+ kernelFunctionType=KernelFunctionTypeNONE)\n+\u00a0 Load TORO/G2O style graph files.\n+\u00a0\n+ _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\ba_\bd_\b2_\bD (pair< string,\n+ _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl > dataset, size_t\n+ maxIndex, bool addNoise, bool smart,\n+ _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt noiseFormat,\n+ _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be kernelFunctionType)\n+\u00a0 Load TORO 2D Graph.\n+\u00a0\n+ _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\blo\boa\bad\bd2\b2D\bD_\b_r\bro\bob\bbu\bus\bst\bt (const string\n+ &filename, const noiseModel::Base::\n+ shared_ptr &model, size_t maxIndex)\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsa\bav\bve\be2\b2D\bD (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+ &graph, const _\bV_\ba_\bl_\bu_\be_\bs &config, const\n+ noiseModel::Diagonal::shared_ptr model,\n+ const std::string &filename)\n+\u00a0 save 2d graph\n+\u00a0\n+ _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\be_\ba_\bd_\bG_\b2_\bo (const std::string\n+ &g2oFile, const bool is3D=false,\n+ _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be\n+ kernelFunctionType=KernelFunctionTypeNONE)\n+ This function parses a g2o file and stores\n+\u00a0 the measurements into a\n+ _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh and the initial guess\n+ in a _\bV_\ba_\bl_\bu_\be_\bs structure.\n+\u00a0\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bG_\b2_\bo (const\n+ _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph, const _\bV_\ba_\bl_\bu_\be_\bs\n+ &estimate, const std::string &filename)\n+ This function writes a g2o file from\n+\u00a0 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh and a _\bV_\ba_\bl_\bu_\be_\bs\n+ structure.\n+\u00a0\n+ istream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br>\b>>\b> (istream &is, Quaternion\n+ &q)\n+\u00a0\n+ istream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br>\b>>\b> (istream &is, _\bR_\bo_\bt_\b3 &R)\n+\u00a0\n+boost::optional< pair< size_t, _\bP_\bo_\bs_\be_\b3 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beV\bVe\ber\brt\bte\bex\bxP\bPo\bos\bse\be3\b3 (istream &is,\n+ > >\u00a0 const string &tag)\n+\u00a0\n+ template<>\n+GTSAM_EXPORT std::map< size_t, _\bP_\bo_\bs_\be_\b3 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beV\bVa\bar\bri\bia\bab\bbl\ble\bes\bs<\b< P\bPo\bos\bse\be3\b3 >\b> (const\n+ >\u00a0 std::string &filename, size_t maxIndex)\n+\u00a0\n+ boost::optional< pair< size_t, g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beV\bVe\ber\brt\bte\bex\bxP\bPo\boi\bin\bnt\bt3\b3 (istream &is,\n+ _\bP_\bo_\bi_\bn_\bt_\b3 > >\u00a0 const string &tag)\n+\u00a0\n+ template<>\n+ GTSAM_EXPORT std::map< size_t, g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beV\bVa\bar\bri\bia\bab\bbl\ble\bes\bs<\b< P\bPo\boi\bin\bnt\bt3\b3 >\b> (const\n+ _\bP_\bo_\bi_\bn_\bt_\b3 >\u00a0 std::string &filename, size_t maxIndex)\n+\u00a0\n+ istream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br>\b>>\b> (istream &is, Matrix6\n+ &m)\n+\u00a0\n+ template<>\n+ GTSAM_EXPORT std::vector< g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const std::\n+ _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< _\bP_\bo_\bs_\be_\b3 > >\u00a0 string &filename, const noiseModel::\n+ Diagonal::shared_ptr &model, size_t\n+ maxIndex)\n+\u00a0\n+ template<>\n+ GTSAM_EXPORT std::vector< g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bs (const std::\n+ _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< _\bR_\bo_\bt_\b3 > >\u00a0 string &filename, const noiseModel::\n+ Diagonal::shared_ptr &model, size_t\n+ maxIndex)\n+\u00a0\n+ template<>\n+ GTSAM_EXPORT std::vector< g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\beF\bFa\bac\bct\bto\bor\brs\bs<\b< P\bPo\bos\bse\be3\b3 >\b> (const std::\n+ _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br< _\bP_\bo_\bs_\be_\b3 >::shared_ptr string &filename, const noiseModel::\n+ >\u00a0 Diagonal::shared_ptr &model, size_t\n+ maxIndex)\n+\u00a0\n+ _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\blo\boa\bad\bd3\b3D\bD (const std::string\n+ &filename)\n+\u00a0 Load TORO 3D Graph.\n+\u00a0\n+ BetweenFactorPose2s\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\be2\b2D\bDF\bFa\bac\bct\bto\bor\brs\bs (const std::string\n+ &filename, const noiseModel::Diagonal::\n+ shared_ptr &model, size_t maxIndex)\n+\u00a0\n+ BetweenFactorPose3s\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\be3\b3D\bDF\bFa\bac\bct\bto\bor\brs\bs (const std::string\n+ &filename, const noiseModel::Diagonal::\n+ shared_ptr &model, size_t maxIndex)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph\n-Optimization).\n- Author\n- Luca Carlone\n- Frank Dellaert\n+utility functions for loading datasets\n Date\n- May 14, 2014\n-see papers:\n-L. Carlone, R. Aragues, J. Castellanos, and B. Bona, A fast and accurate\n-approximation for planar pose graph optimization, IJRR, 2014.\n-L. Carlone, R. Aragues, J.A. Castellanos, and B. Bona, A linear approximation\n-for graph-based simultaneous localization and mapping, RSS, 2011.\n- Parameters\n- nonlinear factor graph (can include arbitrary factors but we assume\n- that there is a subgraph involving Pose2 and betweenFactors). Also\n- in the current version we assume that there is an odometric\n- graph spanning path (x0->x1, x1->x2, etc) and a prior on x0. This\n- assumption can be relaxed by using the extra argument\n- useOdometricPath = false, although this part of code is not stable\n- yet.\n- Returns\n- _\bV_\ba_\bl_\bu_\be_\bs: initial guess from LAGO (only pose2 are initialized)\n+ Jan 22, 2010\n Author\n+ Kai Ni\n Luca Carlone\n Frank Dellaert\n- Date\n- May 14, 2014\n-*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0b\bbu\bui\bil\bld\bdL\bLi\bin\bne\bea\bar\brO\bOr\bri\bie\ben\bnt\bta\bat\bti\bio\bon\bnG\bGr\bra\bap\bph\bh(\b()\b) *\b**\b**\b**\b**\b*\n-GTSAM_EXPORT\n-GaussianFactorGraph gtsam:: ( const vector< size_t > &\u00a0 s\bsp\bpa\ban\bnn\bni\bin\bng\bgT\bTr\bre\bee\beI\bId\bds\bs,\n-lago::\n-buildLinearOrientationGraph\n- const vector< size_t > &\u00a0 c\bch\bho\bor\brd\bds\bsI\bId\bds\bs,\n- const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &\u00a0 g\bg,\n- const key2doubleMap &\u00a0 o\bor\bri\bie\ben\bnt\bta\bat\bti\bio\bon\bns\bsT\bTo\boR\bRo\boo\bot\bt,\n- const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< _\bK_\be_\by > t\btr\bre\bee\be\u00a0\n- &\u00a0\n- )\n-Linear factor graph with regularized orientation measurements.\n-cout << \"REG: key1= \" << DefaultKeyFormatter(key1) << \" key2= \" <<\n-DefaultKeyFormatter(key2) << endl;\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0g\bge\bet\btS\bSy\bym\bmb\bbo\bol\bli\bic\bcG\bGr\bra\bap\bph\bh(\b()\b) *\b**\b**\b**\b**\b*\n-GTSAM_EXPORT void gtsam:: ( std::vector< size_t > &\u00a0 s\bsp\bpa\ban\bnn\bni\bin\bng\bgT\bTr\bre\bee\beI\bId\bds\bs,\n-lago::getSymbolicGraph\n- std::vector< size_t > &\u00a0 c\bch\bho\bor\brd\bds\bsI\bId\bds\bs,\n- key2doubleMap &\u00a0 d\bde\bel\blt\bta\baT\bTh\bhe\bet\bta\baM\bMa\bap\bp,\n- const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< _\bK_\be_\by > &\u00a0 t\btr\bre\bee\be,\n- const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &\u00a0 g\bg\u00a0\n- )\n-Given a factor graph \"g\", and a spanning tree \"tree\", select the nodes\n-belonging to the tree and to g, and stores the factor slots corresponding to\n-edges in the tree and to chordsIds wrt this tree.\n-Also it computes deltaThetaMap which is a fast way to encode relative\n-orientations along the tree: for a node key2, s.t. tree[key2]=key1, the value\n-deltaThetaMap[key2] is relative orientation theta[key2]-theta[key1]\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bl_\ba_\bg_\bo_\b._\bh\n+ * _\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01268_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01268_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/RotateFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/EssentialMatrixFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,170 +98,407 @@\n
No Matches
\n \n \n \n \n \n
\n-
RotateFactor.h
\n+
EssentialMatrixFactor.h
\n
\n
\n-
1/*
\n-
2 * @file RotateFactor.cpp
\n-
3 * @brief RotateFactor class
\n-
4 * @author Frank Dellaert
\n-
5 * @date December 17, 2013
\n-
6 */
\n-
7
\n-
8#pragma once
\n-
9
\n-\n-
11#include <gtsam/geometry/Rot3.h>
\n-
12
\n-
13namespace gtsam {
\n-
14
\n-
\n-
23class RotateFactor: public NoiseModelFactorN<Rot3> {
\n-
24
\n-
25 Point3 p_, z_;
\n+
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010-2014, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n+
11
\n+
12/*
\n+
13 * @file EssentialMatrixFactor.h
\n+
14 * @brief EssentialMatrixFactor class
\n+
15 * @author Frank Dellaert
\n+
16 * @author Ayush Baid
\n+
17 * @author Akshay Krishnan
\n+
18 * @date December 17, 2013
\n+
19 */
\n+
20
\n+
21#pragma once
\n+
22
\n+
23#include <gtsam/geometry/EssentialMatrix.h>
\n+\n+\n
26
\n-\n-
28 typedef RotateFactor This;
\n-
29
\n-
30public:
\n-
31
\n-
\n-
33 RotateFactor(Key key, const Rot3& P, const Rot3& Z,
\n-
34 const SharedNoiseModel& model) :
\n-
35 Base(model, key), p_(Rot3::Logmap(P)), z_(Rot3::Logmap(Z)) {
\n-
36 }
\n-
\n-
37
\n-
\n-
39 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
40 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
41 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n-
\n-
42
\n-
\n-
44 void print(const std::string& s = "",
\n-
45 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
46 Base::print(s);
\n-
47 std::cout << "RotateFactor:]\\n";
\n-
48 std::cout << "p: " << p_.transpose() << std::endl;
\n-
49 std::cout << "z: " << z_.transpose() << std::endl;
\n-
50 }
\n-
\n-
51
\n-
\n-
53 Vector evaluateError(const Rot3& R,
\n-
54 boost::optional<Matrix&> H = boost::none) const override {
\n-
55 // predict p_ as q = R*z_, derivative H will be filled if not none
\n-
56 Point3 q = R.rotate(z_,H);
\n-
57 // error is just difference, and note derivative of that wrpt q is I3
\n-
58 return (Vector(3) << q.x()-p_.x(), q.y()-p_.y(), q.z()-p_.z()).finished();
\n-
59 }
\n-
\n-
60
\n-
61};
\n-
\n-
62
\n-
\n-\n-
68
\n-
69 Unit3 i_p_, c_z_;
\n-
70
\n-\n-\n-
73
\n-
74public:
\n-
75
\n-
\n-
77 RotateDirectionsFactor(Key key, const Unit3& i_p, const Unit3& c_z,
\n-
78 const SharedNoiseModel& model) :
\n-
79 Base(model, key), i_p_(i_p), c_z_(c_z) {
\n-
80 }
\n-
\n-
81
\n-
\n-
83 static Rot3 Initialize(const Unit3& i_p, const Unit3& c_z) {
\n-
84 gtsam::Quaternion iRc;
\n-
85 // setFromTwoVectors sets iRc to (a) quaternion which transform c_z into i_p
\n-
86 iRc.setFromTwoVectors(c_z.unitVector(), i_p.unitVector());
\n-
87 return Rot3(iRc);
\n-
88 }
\n-
\n-
89
\n-
\n-
91 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
92 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
93 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n-
\n-
94
\n-
\n-
96 void print(const std::string& s = "",
\n-
97 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
98 Base::print(s);
\n-
99 std::cout << "RotateDirectionsFactor:" << std::endl;
\n-
100 i_p_.print("p");
\n-
101 c_z_.print("z");
\n-
102 }
\n+
27#include <iostream>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n+
\n+
34class EssentialMatrixFactor : public NoiseModelFactorN<EssentialMatrix> {
\n+
35 Vector3 vA_, vB_;
\n+
36
\n+\n+\n+
39
\n+
40 public:
\n+
\n+
49 EssentialMatrixFactor(Key key, const Point2& pA, const Point2& pB,
\n+
50 const SharedNoiseModel& model)
\n+
51 : Base(model, key) {
\n+\n+\n+
54 }
\n+
\n+
55
\n+
65 template <class CALIBRATION>
\n+
\n+
66 EssentialMatrixFactor(Key key, const Point2& pA, const Point2& pB,
\n+
67 const SharedNoiseModel& model,
\n+
68 boost::shared_ptr<CALIBRATION> K)
\n+
69 : Base(model, key) {
\n+
70 assert(K);
\n+
71 vA_ = EssentialMatrix::Homogeneous(K->calibrate(pA));
\n+
72 vB_ = EssentialMatrix::Homogeneous(K->calibrate(pB));
\n+
73 }
\n+
\n+
74
\n+
\n+
76 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
77 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
78 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
79 }
\n+
\n+
80
\n+
\n+
82 void print(
\n+
83 const std::string& s = "",
\n+
84 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
85 Base::print(s);
\n+
86 std::cout << " EssentialMatrixFactor with measurements\\n ("
\n+
87 << vA_.transpose() << ")' and (" << vB_.transpose() << ")'"
\n+
88 << std::endl;
\n+
89 }
\n+
\n+
90
\n+
\n+\n+
93 const EssentialMatrix& E,
\n+
94 boost::optional<Matrix&> H = boost::none) const override {
\n+
95 Vector error(1);
\n+
96 error << E.error(vA_, vB_, H);
\n+
97 return error;
\n+
98 }
\n+
\n+
99
\n+
100 public:
\n+\n+
102};
\n
\n
103
\n-
\n-
105 Vector evaluateError(const Rot3& iRc, boost::optional<Matrix&> H = boost::none) const override {
\n-
106 Unit3 i_q = iRc * c_z_;
\n-
107 Vector error = i_p_.error(i_q, H);
\n-
108 if (H) {
\n-
109 Matrix DR;
\n-
110 iRc.rotate(c_z_, DR);
\n-
111 *H = (*H) * DR;
\n-
112 }
\n-
113 return error;
\n-
114 }
\n-
\n-
115
\n-\n-
117};
\n-
\n-
118} // namespace gtsam
\n-
119
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
3D rotation represented as a rotation matrix or quaternion
\n-
Non-linear factor base classes.
\n+
\n+\n+
109 : public NoiseModelFactorN<EssentialMatrix, double> {
\n+
110 Point3 dP1_;
\n+
111 Point2 pn_;
\n+
112 double f_;
\n+
113
\n+\n+\n+
116
\n+
117 public:
\n+
\n+
126 EssentialMatrixFactor2(Key key1, Key key2, const Point2& pA, const Point2& pB,
\n+
127 const SharedNoiseModel& model)
\n+
128 : Base(model, key1, key2),
\n+
129 dP1_(EssentialMatrix::Homogeneous(pA)),
\n+
130 pn_(pB) {
\n+
131 f_ = 1.0;
\n+
132 }
\n+
\n+
133
\n+
143 template <class CALIBRATION>
\n+
\n+
144 EssentialMatrixFactor2(Key key1, Key key2, const Point2& pA, const Point2& pB,
\n+
145 const SharedNoiseModel& model,
\n+
146 boost::shared_ptr<CALIBRATION> K)
\n+
147 : Base(model, key1, key2),
\n+
148 dP1_(EssentialMatrix::Homogeneous(K->calibrate(pA))),
\n+
149 pn_(K->calibrate(pB)) {
\n+
150 f_ = 0.5 * (K->fx() + K->fy());
\n+
151 }
\n+
\n+
152
\n+
\n+
154 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
155 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
156 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
157 }
\n+
\n+
158
\n+
\n+
160 void print(
\n+
161 const std::string& s = "",
\n+
162 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
163 Base::print(s);
\n+
164 std::cout << " EssentialMatrixFactor2 with measurements\\n ("
\n+
165 << dP1_.transpose() << ")' and (" << pn_.transpose() << ")'"
\n+
166 << std::endl;
\n+
167 }
\n+
\n+
168
\n+
169 /*
\n+
170 * Vector of errors returns 2D vector
\n+
171 * @param E essential matrix
\n+
172 * @param d inverse depth d
\n+
173 */
\n+
174 Vector evaluateError(
\n+
175 const EssentialMatrix& E, const double& d,
\n+
176 boost::optional<Matrix&> DE = boost::none,
\n+
177 boost::optional<Matrix&> Dd = boost::none) const override {
\n+
178 // We have point x,y in image 1
\n+
179 // Given a depth Z, the corresponding 3D point P1 = Z*(x,y,1) = (x,y,1)/d
\n+
180 // We then convert to second camera by P2 = 1R2'*(P1-1T2)
\n+
181 // The homogeneous coordinates of can be written as
\n+
182 // 2R1*(P1-1T2) == 2R1*d*(P1-1T2) == 2R1*((x,y,1)-d*1T2)
\n+
183 // where we multiplied with d which yields equivalent homogeneous
\n+
184 // coordinates. Note that this is just the homography 2R1 for d==0 The point
\n+
185 // d*P1 = (x,y,1) is computed in constructor as dP1_
\n+
186
\n+
187 // Project to normalized image coordinates, then uncalibrate
\n+
188 Point2 pn(0, 0);
\n+
189 if (!DE && !Dd) {
\n+
190 Point3 _1T2 = E.direction().point3();
\n+
191 Point3 d1T2 = d * _1T2;
\n+
192 Point3 dP2 = E.rotation().unrotate(dP1_ - d1T2); // 2R1*((x,y,1)-d*1T2)
\n+
193 pn = PinholeBase::Project(dP2);
\n+
194
\n+
195 } else {
\n+
196 // Calculate derivatives. TODO if slow: optimize with Mathematica
\n+
197 // 3*2 3*3 3*3
\n+
198 Matrix D_1T2_dir, DdP2_rot, DP2_point;
\n+
199
\n+
200 Point3 _1T2 = E.direction().point3(D_1T2_dir);
\n+
201 Point3 d1T2 = d * _1T2;
\n+
202 Point3 dP2 = E.rotation().unrotate(dP1_ - d1T2, DdP2_rot, DP2_point);
\n+
203
\n+
204 Matrix23 Dpn_dP2;
\n+
205 pn = PinholeBase::Project(dP2, Dpn_dP2);
\n+
206
\n+
207 if (DE) {
\n+
208 Matrix DdP2_E(3, 5);
\n+
209 DdP2_E << DdP2_rot, -DP2_point * d * D_1T2_dir; // (3*3), (3*3) * (3*2)
\n+
210 *DE = f_ * Dpn_dP2 * DdP2_E; // (2*3) * (3*5)
\n+
211 }
\n+
212
\n+
213 if (Dd) // efficient backwards computation:
\n+
214 // (2*3) * (3*3) * (3*1)
\n+
215 *Dd = -f_ * (Dpn_dP2 * (DP2_point * _1T2));
\n+
216 }
\n+
217 Point2 reprojectionError = pn - pn_;
\n+
218 return f_ * reprojectionError;
\n+
219 }
\n+
220
\n+
221 public:
\n+\n+
223};
\n+
\n+
224// EssentialMatrixFactor2
\n+
225
\n+
\n+\n+\n+\n+
234
\n+
235 Rot3 cRb_;
\n+
236
\n+
237 public:
\n+
\n+
247 EssentialMatrixFactor3(Key key1, Key key2, const Point2& pA, const Point2& pB,
\n+
248 const Rot3& cRb, const SharedNoiseModel& model)
\n+
249 : EssentialMatrixFactor2(key1, key2, pA, pB, model), cRb_(cRb) {}
\n+
\n+
250
\n+
260 template <class CALIBRATION>
\n+
\n+
261 EssentialMatrixFactor3(Key key1, Key key2, const Point2& pA, const Point2& pB,
\n+
262 const Rot3& cRb, const SharedNoiseModel& model,
\n+
263 boost::shared_ptr<CALIBRATION> K)
\n+
264 : EssentialMatrixFactor2(key1, key2, pA, pB, model, K), cRb_(cRb) {}
\n+
\n+
265
\n+
\n+
267 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
268 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
269 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
270 }
\n+
\n+
271
\n+
\n+
273 void print(
\n+
274 const std::string& s = "",
\n+
275 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
276 Base::print(s);
\n+
277 std::cout << " EssentialMatrixFactor3 with rotation " << cRb_ << std::endl;
\n+
278 }
\n+
\n+
279
\n+
280 /*
\n+
281 * Vector of errors returns 2D vector
\n+
282 * @param E essential matrix
\n+
283 * @param d inverse depth d
\n+
284 */
\n+
285 Vector evaluateError(
\n+
286 const EssentialMatrix& E, const double& d,
\n+
287 boost::optional<Matrix&> DE = boost::none,
\n+
288 boost::optional<Matrix&> Dd = boost::none) const override {
\n+
289 if (!DE) {
\n+
290 // Convert E from body to camera frame
\n+
291 EssentialMatrix cameraE = cRb_ * E;
\n+
292 // Evaluate error
\n+
293 return Base::evaluateError(cameraE, d, boost::none, Dd);
\n+
294 } else {
\n+
295 // Version with derivatives
\n+
296 Matrix D_e_cameraE, D_cameraE_E; // 2*5, 5*5
\n+
297 EssentialMatrix cameraE = E.rotate(cRb_, D_cameraE_E);
\n+
298 Vector e = Base::evaluateError(cameraE, d, D_e_cameraE, Dd);
\n+
299 *DE = D_e_cameraE * D_cameraE_E; // (2*5) * (5*5)
\n+
300 return e;
\n+
301 }
\n+
302 }
\n+
303
\n+
304 public:
\n+\n+
306};
\n+
\n+
307// EssentialMatrixFactor3
\n+
308
\n+
322template <class CALIBRATION>
\n+
\n+\n+
324 : public NoiseModelFactorN<EssentialMatrix, CALIBRATION> {
\n+
325 private:
\n+
326 Point2 pA_, pB_;
\n+
327
\n+\n+\n+
330
\n+
331 static constexpr int DimK = FixedDimension<CALIBRATION>::value;
\n+
332 typedef Eigen::Matrix<double, 2, DimK> JacobianCalibration;
\n+
333
\n+
334 public:
\n+
\n+
344 EssentialMatrixFactor4(Key keyE, Key keyK, const Point2& pA, const Point2& pB,
\n+
345 const SharedNoiseModel& model)
\n+
346 : Base(model, keyE, keyK), pA_(pA), pB_(pB) {}
\n+
\n+
347
\n+
\n+
349 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
350 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
351 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
352 }
\n+
\n+
353
\n+
\n+
355 void print(
\n+
356 const std::string& s = "",
\n+
357 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
358 Base::print(s);
\n+
359 std::cout << " EssentialMatrixFactor4 with measurements\\n ("
\n+
360 << pA_.transpose() << ")' and (" << pB_.transpose() << ")'"
\n+
361 << std::endl;
\n+
362 }
\n+
\n+
363
\n+
\n+\n+
374 const EssentialMatrix& E, const CALIBRATION& K,
\n+
375 boost::optional<Matrix&> H1 = boost::none,
\n+
376 boost::optional<Matrix&> H2 = boost::none) const override {
\n+
377 // converting from pixel coordinates to normalized coordinates cA and cB
\n+
378 JacobianCalibration cA_H_K; // dcA/dK
\n+
379 JacobianCalibration cB_H_K; // dcB/dK
\n+
380 Point2 cA = K.calibrate(pA_, H2 ? &cA_H_K : 0, boost::none);
\n+
381 Point2 cB = K.calibrate(pB_, H2 ? &cB_H_K : 0, boost::none);
\n+
382
\n+
383 // convert to homogeneous coordinates
\n+
384 Vector3 vA = EssentialMatrix::Homogeneous(cA);
\n+
385 Vector3 vB = EssentialMatrix::Homogeneous(cB);
\n+
386
\n+
387 if (H2) {
\n+
388 // compute the jacobian of error w.r.t K
\n+
389
\n+
390 // error function f = vA.T * E * vB
\n+
391 // H2 = df/dK = vB.T * E.T * dvA/dK + vA.T * E * dvB/dK
\n+
392 // where dvA/dK = dvA/dcA * dcA/dK, dVB/dK = dvB/dcB * dcB/dK
\n+
393 // and dvA/dcA = dvB/dcB = [[1, 0], [0, 1], [0, 0]]
\n+
394 *H2 = vB.transpose() * E.matrix().transpose().leftCols<2>() * cA_H_K +
\n+
395 vA.transpose() * E.matrix().leftCols<2>() * cB_H_K;
\n+
396 }
\n+
397
\n+
398 Vector error(1);
\n+
399 error << E.error(vA, vB, H1);
\n+
400
\n+
401 return error;
\n+
402 }
\n+
\n+
403
\n+
404 public:
\n+\n+
406};
\n+
\n+
407// EssentialMatrixFactor4
\n+
408
\n+
409} // namespace gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Base class for all pinhole cameras.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n+
static Point2 Project(const Point3 &pc, OptionalJacobian< 2, 3 > Dpoint=boost::none)
Project from 3D point in camera coordinates into image Does not throw a CheiralityException,...
Definition CalibratedCamera.cpp:88
\n+
An essential matrix is like a Pose3, except with translation up to scale It is named after the 3*3 ma...
Definition EssentialMatrix.h:26
\n+
static Vector3 Homogeneous(const Point2 &p)
Static function to convert Point2 to homogeneous coordinates.
Definition EssentialMatrix.h:34
\n
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
rotate point from rotated coordinate frame to world
Definition Rot3M.cpp:149
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n-
Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const
Return unit-norm Vector.
Definition Unit3.cpp:151
\n-
void print(const std::string &s=std::string()) const
The print fuction.
Definition Unit3.cpp:164
\n-
Vector2 error(const Unit3 &q, OptionalJacobian< 2, 2 > H_q=boost::none) const
Signed, vector-valued error between two directions.
Definition Unit3.cpp:199
\n
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n
double error(const Values &c) const override
Calculate the error of the factor.
Definition NonlinearFactor.cpp:138
\n
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n-
Factor on unknown rotation iRC that relates two incremental rotations c1Rc2 = iRc' * i1Ri2 * iRc Whic...
Definition RotateFactor.h:23
\n-
RotateFactor(Key key, const Rot3 &P, const Rot3 &Z, const SharedNoiseModel &model)
Constructor.
Definition RotateFactor.h:33
\n-
Vector evaluateError(const Rot3 &R, boost::optional< Matrix & > H=boost::none) const override
vector of errors returns 2D vector
Definition RotateFactor.h:53
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition RotateFactor.h:44
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition RotateFactor.h:39
\n-
Factor on unknown rotation iRc that relates two directions c Directions provide less constraints than...
Definition RotateFactor.h:67
\n-
Vector evaluateError(const Rot3 &iRc, boost::optional< Matrix & > H=boost::none) const override
vector of errors returns 2D vector
Definition RotateFactor.h:105
\n-
RotateDirectionsFactor(Key key, const Unit3 &i_p, const Unit3 &c_z, const SharedNoiseModel &model)
Constructor.
Definition RotateFactor.h:77
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition RotateFactor.h:96
\n-
static Rot3 Initialize(const Unit3 &i_p, const Unit3 &c_z)
Initialize rotation iRc such that i_p = iRc * c_z.
Definition RotateFactor.h:83
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition RotateFactor.h:91
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
Factor that evaluates epipolar error p'Ep for given essential matrix.
Definition EssentialMatrixFactor.h:34
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition EssentialMatrixFactor.h:76
\n+
EssentialMatrixFactor(Key key, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model)
Constructor.
Definition EssentialMatrixFactor.h:49
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition EssentialMatrixFactor.h:82
\n+
EssentialMatrixFactor(Key key, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)
Constructor.
Definition EssentialMatrixFactor.h:66
\n+
Vector evaluateError(const EssentialMatrix &E, boost::optional< Matrix & > H=boost::none) const override
vector of errors returns 1D vector
Definition EssentialMatrixFactor.h:92
\n+
Binary factor that optimizes for E and inverse depth d: assumes measurement in image 2 is perfect,...
Definition EssentialMatrixFactor.h:109
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition EssentialMatrixFactor.h:154
\n+
EssentialMatrixFactor2(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)
Constructor.
Definition EssentialMatrixFactor.h:144
\n+
EssentialMatrixFactor2(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model)
Constructor.
Definition EssentialMatrixFactor.h:126
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition EssentialMatrixFactor.h:160
\n+
Binary factor that optimizes for E and inverse depth d: assumes measurement in image 2 is perfect,...
Definition EssentialMatrixFactor.h:231
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition EssentialMatrixFactor.h:273
\n+
EssentialMatrixFactor3(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const Rot3 &cRb, const SharedNoiseModel &model)
Constructor.
Definition EssentialMatrixFactor.h:247
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition EssentialMatrixFactor.h:267
\n+
EssentialMatrixFactor3(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const Rot3 &cRb, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)
Constructor.
Definition EssentialMatrixFactor.h:261
\n+
Binary factor that optimizes for E and calibration K using the algebraic epipolar error (K^-1 pA)'E (...
Definition EssentialMatrixFactor.h:324
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition EssentialMatrixFactor.h:355
\n+
Vector evaluateError(const EssentialMatrix &E, const CALIBRATION &K, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
Calculate the algebraic epipolar error pA' (K^-1)' E K pB.
Definition EssentialMatrixFactor.h:373
\n+
EssentialMatrixFactor4(Key keyE, Key keyK, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model)
Constructor.
Definition EssentialMatrixFactor.h:344
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition EssentialMatrixFactor.h:349
\n
\n
\n \n
\n
    \n-
  • gtsam
  • slam
  • RotateFactor.h
  • \n+
  • gtsam
  • slam
  • EssentialMatrixFactor.h
  • \n
  • Generated on Tue Jan 9 2024 05:51:35 for gtsam by \"doxygen\"/ 1.9.8
  • \n
\n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,123 +1,342 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-RotateFactor.h\n-1/*\n-2 * @file RotateFactor.cpp\n-3 * @brief RotateFactor class\n-4 * @author Frank Dellaert\n-5 * @date December 17, 2013\n-6 */\n+EssentialMatrixFactor.h\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010-2014, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8#pragma once\n+8 * See LICENSE for the license information\n 9\n-10#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-11#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n-12\n-13namespace _\bg_\bt_\bs_\ba_\bm {\n-14\n-_\b2_\b3class _\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-24\n-25 _\bP_\bo_\bi_\bn_\bt_\b3 p_, z_;\n+10 * -------------------------------------------------------------------------\n+- */\n+11\n+12/*\n+13 * @file EssentialMatrixFactor.h\n+14 * @brief EssentialMatrixFactor class\n+15 * @author Frank Dellaert\n+16 * @author Ayush Baid\n+17 * @author Akshay Krishnan\n+18 * @date December 17, 2013\n+19 */\n+20\n+21#pragma once\n+22\n+23#include \n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n 26\n-27 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bR_\bo_\bt_\b3_\b> _\bB_\ba_\bs_\be;\n-28 typedef _\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-29\n-30public:\n-31\n-_\b3_\b3 _\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const _\bR_\bo_\bt_\b3& P, const _\bR_\bo_\bt_\b3& Z,\n-34 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n-35 _\bB_\ba_\bs_\be(model, _\bk_\be_\by), p_(_\bR_\bo_\bt_\b3::Logmap(P)), z_(_\bR_\bo_\bt_\b3::Logmap(Z)) {\n-36 }\n-37\n-_\b3_\b9 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-40 return boost::static_pointer_cast(\n-41 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this))); }\n-42\n-_\b4_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-45 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n-46 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n-47 std::cout << \"RotateFactor:]\\n\";\n-48 std::cout << \"p: \" << p_.transpose() << std::endl;\n-49 std::cout << \"z: \" << z_.transpose() << std::endl;\n-50 }\n-51\n-_\b5_\b3 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b3& R,\n-54 boost::optional H = boost::none) const override {\n-55 // predict p_ as q = R*z_, derivative H will be filled if not none\n-56 _\bP_\bo_\bi_\bn_\bt_\b3 q = R.rotate(z_,H);\n-57 // error is just difference, and note derivative of that wrpt q is I3\n-58 return (Vector(3) << q.x()-p_.x(), q.y()-p_.y(), q.z()-p_.z()).finished();\n-59 }\n-60\n-61};\n-62\n-_\b6_\b7class _\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-68\n-69 _\bU_\bn_\bi_\bt_\b3 i_p_, c_z_;\n-70\n-71 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bR_\bo_\bt_\b3_\b> _\bB_\ba_\bs_\be;\n-72 typedef _\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-73\n-74public:\n-75\n-_\b7_\b7 _\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const _\bU_\bn_\bi_\bt_\b3& i_p, const _\bU_\bn_\bi_\bt_\b3& c_z,\n-78 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n-79 _\bB_\ba_\bs_\be(model, _\bk_\be_\by), i_p_(i_p), c_z_(c_z) {\n-80 }\n-81\n-_\b8_\b3 static _\bR_\bo_\bt_\b3 _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be(const _\bU_\bn_\bi_\bt_\b3& i_p, const _\bU_\bn_\bi_\bt_\b3& c_z) {\n-84 gtsam::Quaternion iRc;\n-85 // setFromTwoVectors sets iRc to (a) quaternion which transform c_z into i_p\n-86 iRc.setFromTwoVectors(c_z._\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br(), i_p._\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br());\n-87 return _\bR_\bo_\bt_\b3(iRc);\n-88 }\n-89\n-_\b9_\b1 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-92 return boost::static_pointer_cast(\n-93 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this))); }\n-94\n-_\b9_\b6 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-97 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n-98 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n-99 std::cout << \"RotateDirectionsFactor:\" << std::endl;\n-100 i_p_._\bp_\br_\bi_\bn_\bt(\"p\");\n-101 c_z_._\bp_\br_\bi_\bn_\bt(\"z\");\n-102 }\n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+_\b3_\b4class _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+35 Vector3 vA_, vB_;\n+36\n+37 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b> _\bB_\ba_\bs_\be;\n+38 typedef _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+39\n+40 public:\n+_\b4_\b9 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const _\bP_\bo_\bi_\bn_\bt_\b2& pA, const _\bP_\bo_\bi_\bn_\bt_\b2& pB,\n+50 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model)\n+51 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by) {\n+52 vA_ = _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs(pA);\n+53 vB_ = _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs(pB);\n+54 }\n+55\n+65 template \n+_\b6_\b6 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const _\bP_\bo_\bi_\bn_\bt_\b2& pA, const _\bP_\bo_\bi_\bn_\bt_\b2& pB,\n+67 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n+68 boost::shared_ptr K)\n+69 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by) {\n+70 assert(K);\n+71 vA_ = _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs(K->calibrate(pA));\n+72 vB_ = _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs(K->calibrate(pB));\n+73 }\n+74\n+_\b7_\b6 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+77 return boost::static_pointer_cast(\n+78 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+79 }\n+80\n+_\b8_\b2 void _\bp_\br_\bi_\bn_\bt(\n+83 const std::string& s = \"\",\n+84 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+85 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n+86 std::cout << \" EssentialMatrixFactor with measurements\\n (\"\n+87 << vA_.transpose() << \")' and (\" << vB_.transpose() << \")'\"\n+88 << std::endl;\n+89 }\n+90\n+_\b9_\b2 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(\n+93 const _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& E,\n+94 boost::optional H = boost::none) const override {\n+95 Vector _\be_\br_\br_\bo_\br(1);\n+96 _\be_\br_\br_\bo_\br << E.error(vA_, vB_, H);\n+97 return _\be_\br_\br_\bo_\br;\n+98 }\n+99\n+100 public:\n+101 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+102};\n 103\n-_\b1_\b0_\b5 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b3& iRc, boost::optional H = boost::\n-none) const override {\n-106 _\bU_\bn_\bi_\bt_\b3 i_q = iRc * c_z_;\n-107 Vector _\be_\br_\br_\bo_\br = i_p_._\be_\br_\br_\bo_\br(i_q, H);\n-108 if (H) {\n-109 Matrix DR;\n-110 iRc._\br_\bo_\bt_\ba_\bt_\be(c_z_, DR);\n-111 *H = (*H) * DR;\n-112 }\n-113 return _\be_\br_\br_\bo_\br;\n-114 }\n-115\n-116 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-117};\n-118} // namespace gtsam\n-119\n+_\b1_\b0_\b8class _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+109 : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+110 _\bP_\bo_\bi_\bn_\bt_\b3 dP1_;\n+111 _\bP_\bo_\bi_\bn_\bt_\b2 pn_;\n+112 double f_;\n+113\n+114 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b,_\b _\bd_\bo_\bu_\bb_\bl_\be_\b> _\bB_\ba_\bs_\be;\n+115 typedef _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2 _\bT_\bh_\bi_\bs;\n+116\n+117 public:\n+_\b1_\b2_\b6 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2(_\bK_\be_\by key1, _\bK_\be_\by key2, const _\bP_\bo_\bi_\bn_\bt_\b2& pA, const _\bP_\bo_\bi_\bn_\bt_\b2&\n+pB,\n+127 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model)\n+128 : _\bB_\ba_\bs_\be(model, key1, key2),\n+129 dP1_(_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx::Homogeneous(pA)),\n+130 pn_(pB) {\n+131 f_ = 1.0;\n+132 }\n+133\n+143 template \n+_\b1_\b4_\b4 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2(_\bK_\be_\by key1, _\bK_\be_\by key2, const _\bP_\bo_\bi_\bn_\bt_\b2& pA, const _\bP_\bo_\bi_\bn_\bt_\b2&\n+pB,\n+145 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n+146 boost::shared_ptr K)\n+147 : _\bB_\ba_\bs_\be(model, key1, key2),\n+148 dP1_(_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx::Homogeneous(K->calibrate(pA))),\n+149 pn_(K->calibrate(pB)) {\n+150 f_ = 0.5 * (K->fx() + K->fy());\n+151 }\n+152\n+_\b1_\b5_\b4 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+155 return boost::static_pointer_cast(\n+156 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+157 }\n+158\n+_\b1_\b6_\b0 void _\bp_\br_\bi_\bn_\bt(\n+161 const std::string& s = \"\",\n+162 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+163 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n+164 std::cout << \" EssentialMatrixFactor2 with measurements\\n (\"\n+165 << dP1_.transpose() << \")' and (\" << pn_.transpose() << \")'\"\n+166 << std::endl;\n+167 }\n+168\n+169 /*\n+170 * Vector of errors returns 2D vector\n+171 * @param E essential matrix\n+172 * @param d inverse depth d\n+173 */\n+174 Vector evaluateError(\n+175 const _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& E, const double& d,\n+176 boost::optional DE = boost::none,\n+177 boost::optional Dd = boost::none) const override {\n+178 // We have point x,y in image 1\n+179 // Given a depth Z, the corresponding 3D point P1 = Z*(x,y,1) = (x,y,1)/d\n+180 // We then convert to second camera by P2 = 1R2'*(P1-1T2)\n+181 // The homogeneous coordinates of can be written as\n+182 // 2R1*(P1-1T2) == 2R1*d*(P1-1T2) == 2R1*((x,y,1)-d*1T2)\n+183 // where we multiplied with d which yields equivalent homogeneous\n+184 // coordinates. Note that this is just the homography 2R1 for d==0 The\n+point\n+185 // d*P1 = (x,y,1) is computed in constructor as dP1_\n+186\n+187 // Project to normalized image coordinates, then uncalibrate\n+188 _\bP_\bo_\bi_\bn_\bt_\b2 pn(0, 0);\n+189 if (!DE && !Dd) {\n+190 _\bP_\bo_\bi_\bn_\bt_\b3 _1T2 = E.direction().point3();\n+191 _\bP_\bo_\bi_\bn_\bt_\b3 d1T2 = d * _1T2;\n+192 _\bP_\bo_\bi_\bn_\bt_\b3 dP2 = E.rotation().unrotate(dP1_ - d1T2); // 2R1*((x,y,1)-d*1T2)\n+193 pn = _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bP_\br_\bo_\bj_\be_\bc_\bt(dP2);\n+194\n+195 } else {\n+196 // Calculate derivatives. TODO if slow: optimize with Mathematica\n+197 // 3*2 3*3 3*3\n+198 Matrix D_1T2_dir, DdP2_rot, DP2_point;\n+199\n+200 _\bP_\bo_\bi_\bn_\bt_\b3 _1T2 = E.direction().point3(D_1T2_dir);\n+201 _\bP_\bo_\bi_\bn_\bt_\b3 d1T2 = d * _1T2;\n+202 _\bP_\bo_\bi_\bn_\bt_\b3 dP2 = E.rotation().unrotate(dP1_ - d1T2, DdP2_rot, DP2_point);\n+203\n+204 Matrix23 Dpn_dP2;\n+205 pn = _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bP_\br_\bo_\bj_\be_\bc_\bt(dP2, Dpn_dP2);\n+206\n+207 if (DE) {\n+208 Matrix DdP2_E(3, 5);\n+209 DdP2_E << DdP2_rot, -DP2_point * d * D_1T2_dir; // (3*3), (3*3) * (3*2)\n+210 *DE = f_ * Dpn_dP2 * DdP2_E; // (2*3) * (3*5)\n+211 }\n+212\n+213 if (Dd) // efficient backwards computation:\n+214 // (2*3) * (3*3) * (3*1)\n+215 *Dd = -f_ * (Dpn_dP2 * (DP2_point * _1T2));\n+216 }\n+217 _\bP_\bo_\bi_\bn_\bt_\b2 reprojectionError = pn - pn_;\n+218 return f_ * reprojectionError;\n+219 }\n+220\n+221 public:\n+222 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+223};\n+224// EssentialMatrixFactor2\n+225\n+_\b2_\b3_\b1class _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3 : public _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2 {\n+232 typedef _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2 _\bB_\ba_\bs_\be;\n+233 typedef _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3 _\bT_\bh_\bi_\bs;\n+234\n+235 _\bR_\bo_\bt_\b3 cRb_;\n+236\n+237 public:\n+_\b2_\b4_\b7 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3(_\bK_\be_\by key1, _\bK_\be_\by key2, const _\bP_\bo_\bi_\bn_\bt_\b2& pA, const _\bP_\bo_\bi_\bn_\bt_\b2&\n+pB,\n+248 const _\bR_\bo_\bt_\b3& cRb, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model)\n+249 : _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2(key1, key2, pA, pB, model), cRb_(cRb) {}\n+250\n+260 template \n+_\b2_\b6_\b1 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3(_\bK_\be_\by key1, _\bK_\be_\by key2, const _\bP_\bo_\bi_\bn_\bt_\b2& pA, const _\bP_\bo_\bi_\bn_\bt_\b2&\n+pB,\n+262 const _\bR_\bo_\bt_\b3& cRb, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n+263 boost::shared_ptr K)\n+264 : _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2(key1, key2, pA, pB, model, K), cRb_(cRb) {}\n+265\n+_\b2_\b6_\b7 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+268 return boost::static_pointer_cast(\n+269 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+270 }\n+271\n+_\b2_\b7_\b3 void _\bp_\br_\bi_\bn_\bt(\n+274 const std::string& s = \"\",\n+275 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+276 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n+277 std::cout << \" EssentialMatrixFactor3 with rotation \" << cRb_ << std::endl;\n+278 }\n+279\n+280 /*\n+281 * Vector of errors returns 2D vector\n+282 * @param E essential matrix\n+283 * @param d inverse depth d\n+284 */\n+285 Vector evaluateError(\n+286 const _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& E, const double& d,\n+287 boost::optional DE = boost::none,\n+288 boost::optional Dd = boost::none) const override {\n+289 if (!DE) {\n+290 // Convert E from body to camera frame\n+291 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx cameraE = cRb_ * E;\n+292 // Evaluate error\n+293 return Base::evaluateError(cameraE, d, boost::none, Dd);\n+294 } else {\n+295 // Version with derivatives\n+296 Matrix D_e_cameraE, D_cameraE_E; // 2*5, 5*5\n+297 EssentialMatrix cameraE = E.rotate(cRb_, D_cameraE_E);\n+298 Vector e = Base::evaluateError(cameraE, d, D_e_cameraE, Dd);\n+299 *DE = D_e_cameraE * D_cameraE_E; // (2*5) * (5*5)\n+300 return e;\n+301 }\n+302 }\n+303\n+304 public:\n+305 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+306};\n+307// EssentialMatrixFactor3\n+308\n+322template \n+_\b3_\b2_\b3class _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b4\n+324 : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+325 private:\n+326 _\bP_\bo_\bi_\bn_\bt_\b2 pA_, pB_;\n+327\n+328 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b,_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> _\bB_\ba_\bs_\be;\n+329 typedef _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b4 _\bT_\bh_\bi_\bs;\n+330\n+331 static constexpr int DimK = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n+332 typedef Eigen::Matrix JacobianCalibration;\n+333\n+334 public:\n+_\b3_\b4_\b4 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b4(_\bK_\be_\by keyE, _\bK_\be_\by keyK, const _\bP_\bo_\bi_\bn_\bt_\b2& pA, const _\bP_\bo_\bi_\bn_\bt_\b2&\n+pB,\n+345 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model)\n+346 : _\bB_\ba_\bs_\be(model, keyE, keyK), pA_(pA), pB_(pB) {}\n+347\n+_\b3_\b4_\b9 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+350 return boost::static_pointer_cast(\n+351 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+352 }\n+353\n+_\b3_\b5_\b5 void _\bp_\br_\bi_\bn_\bt(\n+356 const std::string& s = \"\",\n+357 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+358 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n+359 std::cout << \" EssentialMatrixFactor4 with measurements\\n (\"\n+360 << pA_.transpose() << \")' and (\" << pB_.transpose() << \")'\"\n+361 << std::endl;\n+362 }\n+363\n+_\b3_\b7_\b3 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(\n+374 const _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& E, const CALIBRATION& K,\n+375 boost::optional H1 = boost::none,\n+376 boost::optional H2 = boost::none) const override {\n+377 // converting from pixel coordinates to normalized coordinates cA and cB\n+378 JacobianCalibration cA_H_K; // dcA/dK\n+379 JacobianCalibration cB_H_K; // dcB/dK\n+380 _\bP_\bo_\bi_\bn_\bt_\b2 cA = K.calibrate(pA_, H2 ? &cA_H_K : 0, boost::none);\n+381 _\bP_\bo_\bi_\bn_\bt_\b2 cB = K.calibrate(pB_, H2 ? &cB_H_K : 0, boost::none);\n+382\n+383 // convert to homogeneous coordinates\n+384 Vector3 vA = _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs(cA);\n+385 Vector3 vB = _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs(cB);\n+386\n+387 if (H2) {\n+388 // compute the jacobian of error w.r.t K\n+389\n+390 // error function f = vA.T * E * vB\n+391 // H2 = df/dK = vB.T * E.T * dvA/dK + vA.T * E * dvB/dK\n+392 // where dvA/dK = dvA/dcA * dcA/dK, dVB/dK = dvB/dcB * dcB/dK\n+393 // and dvA/dcA = dvB/dcB = [[1, 0], [0, 1], [0, 0]]\n+394 *H2 = vB.transpose() * E.matrix().transpose().leftCols<2>() * cA_H_K +\n+395 vA.transpose() * E.matrix().leftCols<2>() * cB_H_K;\n+396 }\n+397\n+398 Vector _\be_\br_\br_\bo_\br(1);\n+399 _\be_\br_\br_\bo_\br << E.error(vA, vB, H1);\n+400\n+401 return _\be_\br_\br_\bo_\br;\n+402 }\n+403\n+404 public:\n+405 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+406};\n+407// EssentialMatrixFactor4\n+408\n+409} // namespace gtsam\n _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n This marks a GTSAM object to require alignment.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bR_\bo_\bt_\b3_\b._\bh\n-3D rotation represented as a rotation matrix or quaternion\n+_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+Base class for all pinhole cameras.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n Vector3 Point3\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n typedef Point3 to Vector3...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n@@ -127,100 +346,143 @@\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+Give fixed size dimension of a type, fails at compile time if dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bP_\br_\bo_\bj_\be_\bc_\bt\n+static Point2 Project(const Point3 &pc, OptionalJacobian< 2, 3 > Dpoint=boost::\n+none)\n+Project from 3D point in camera coordinates into image Does not throw a\n+CheiralityException,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n+An essential matrix is like a Pose3, except with translation up to scale It is\n+named after the 3*3 ma...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrix.h:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bH_\bo_\bm_\bo_\bg_\be_\bn_\be_\bo_\bu_\bs\n+static Vector3 Homogeneous(const Point2 &p)\n+Static function to convert Point2 to homogeneous coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrix.h:34\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n symbol GTSAM_USE_QUATERNIO...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\be\n-Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none,\n-OptionalJacobian< 3, 3 > H2=boost::none) const\n-rotate point from rotated coordinate frame to world\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:149\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br\n-Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const\n-Return unit-norm Vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=std::string()) const\n-The print fuction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\be_\br_\br_\bo_\br\n-Vector2 error(const Unit3 &q, OptionalJacobian< 2, 2 > H_q=boost::none) const\n-Signed, vector-valued error between two directions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:199\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n &formatter=DefaultKeyFormatter) const\n print\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n double error(const Values &c) const override\n Calculate the error of the factor.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:138\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n A convenient base class for creating your own NoiseModelFactor with n\n variables.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bR_\bo_\bt_\b3_\b _\b>_\b:_\b:_\bk_\be_\by\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\b _\b>_\b:_\b:_\bk_\be_\by\n Key key() const\n Returns a key.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Factor on unknown rotation iRC that relates two incremental rotations c1Rc2 =\n-iRc' * i1Ri2 * iRc Whic...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:23\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n-RotateFactor(Key key, const Rot3 &P, const Rot3 &Z, const SharedNoiseModel\n-&model)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Rot3 &R, boost::optional< Matrix & > H=boost::none)\n-const override\n-vector of errors returns 2D vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br\n+Factor that evaluates epipolar error p'Ep for given essential matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br\n+EssentialMatrixFactor(Key key, const Point2 &pA, const Point2 &pB, const\n+SharedNoiseModel &model)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const std::string &s=\"\", const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br\n+EssentialMatrixFactor(Key key, const Point2 &pA, const Point2 &pB, const\n+SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const EssentialMatrix &E, boost::optional< Matrix & >\n+H=boost::none) const override\n+vector of errors returns 1D vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+Binary factor that optimizes for E and inverse depth d: assumes measurement in\n+image 2 is perfect,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br\n-Factor on unknown rotation iRc that relates two directions c Directions provide\n-less constraints than...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Rot3 &iRc, boost::optional< Matrix & > H=boost::\n-none) const override\n-vector of errors returns 2D vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br\n-RotateDirectionsFactor(Key key, const Unit3 &i_p, const Unit3 &c_z, const\n-SharedNoiseModel &model)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+EssentialMatrixFactor2(Key key1, Key key2, const Point2 &pA, const Point2 &pB,\n+const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:144\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+EssentialMatrixFactor2(Key key1, Key key2, const Point2 &pA, const Point2 &pB,\n+const SharedNoiseModel &model)\n Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const std::string &s=\"\", const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be\n-static Rot3 Initialize(const Unit3 &i_p, const Unit3 &c_z)\n-Initialize rotation iRc such that i_p = iRc * c_z.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\be_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3\n+Binary factor that optimizes for E and inverse depth d: assumes measurement in\n+image 2 is perfect,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:231\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:273\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3\n+EssentialMatrixFactor3(Key key1, Key key2, const Point2 &pA, const Point2 &pB,\n+const Rot3 &cRb, const SharedNoiseModel &model)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:247\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:267\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b3\n+EssentialMatrixFactor3(Key key1, Key key2, const Point2 &pA, const Point2 &pB,\n+const Rot3 &cRb, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION\n+> K)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:261\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b4\n+Binary factor that optimizes for E and calibration K using the algebraic\n+epipolar error (K^-1 pA)'E (...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:324\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b4_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:355\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b4_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const EssentialMatrix &E, const CALIBRATION &K, boost::\n+optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::\n+none) const override\n+Calculate the algebraic epipolar error pA' (K^-1)' E K pB.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:373\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b4_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b4\n+EssentialMatrixFactor4(Key keyE, Key keyK, const Point2 &pA, const Point2 &pB,\n+const SharedNoiseModel &model)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:344\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bF_\ba_\bc_\bt_\bo_\br_\b4_\b:_\b:_\bc_\bl_\bo_\bn_\be\n gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RotateFactor.h:91\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixFactor.h:349\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * R\bRo\bot\bta\bat\bte\beF\bFa\bac\bct\bto\bor\br.\b.h\bh\n+ * E\bEs\bss\bse\ben\bnt\bti\bia\bal\blM\bMa\bat\btr\bri\bix\bxF\bFa\bac\bct\bto\bor\br.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01271.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01271.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/PoseTranslationPrior.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,43 +96,49 @@\n
\n \n \n
\n \n-
PoseTranslationPrior.h File Reference
\n+
SmartProjectionFactor.h File Reference
\n
\n
\n \n-

Implements a prior on the translation component of a pose. \n+

Smart factor on cameras (pose + calibration) \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::PoseTranslationPrior< POSE >
 A prior on the translation part of a pose. More...
class  gtsam::SmartProjectionFactor< CAMERA >
 SmartProjectionFactor: triangulates point and keeps an estimate of it around. More...
 
struct  gtsam::traits< SmartProjectionFactor< CAMERA > >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Implements a prior on the translation component of a pose.

\n-
Date
Jun 14, 2012
\n-
Author
Alex Cunningham
\n+

Smart factor on cameras (pose + calibration)

\n+
Author
Luca Carlone
\n+
\n+Zsolt Kira
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-PoseTranslationPrior.h File Reference\n-Implements a prior on the translation component of a pose. _\bM_\bo_\br_\be_\b._\b._\b.\n+SmartProjectionFactor.h File Reference\n+Smart factor on cameras (pose + calibration) _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b<_\b _\bP_\bO_\bS_\bE_\b _\b>\n-\u00a0 A prior on the translation part of a pose. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n+\u00a0 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br: triangulates point and keeps an estimate of it\n+ around. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implements a prior on the translation component of a pose.\n- Date\n- Jun 14, 2012\n+Smart factor on cameras (pose + calibration)\n Author\n- Alex Cunningham\n+ Luca Carlone\n+ Zsolt Kira\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b._\bh\n+ * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01271.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01271.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,4 @@\n var a01271 = [\n- [\"gtsam::PoseTranslationPrior< POSE >\", \"a04892.html\", \"a04892\"]\n+ [\"gtsam::SmartProjectionFactor< CAMERA >\", \"a04936.html\", \"a04936\"],\n+ [\"gtsam::traits< SmartProjectionFactor< CAMERA > >\", \"a04940.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01271_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01271_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/PoseTranslationPrior.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,142 +98,539 @@\n
No Matches
\n \n \n \n \n \n
\n-
PoseTranslationPrior.h
\n+
SmartProjectionFactor.h
\n
\n
\n-Go to the documentation of this file.
1
\n-
10#pragma once
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-\n-\n-
14
\n-
15namespace gtsam {
\n-
16
\n-
20template<class POSE>
\n-
\n-\n-
22public:
\n-
23 typedef PoseTranslationPrior<POSE> This;
\n-\n-
25 typedef POSE Pose;
\n-
26 typedef typename POSE::Translation Translation;
\n-
27 typedef typename POSE::Rotation Rotation;
\n+
20#pragma once
\n+
21
\n+\n+\n+
24
\n+\n+\n+
27#include <gtsam/slam/dataset.h>
\n
28
\n-
29 GTSAM_CONCEPT_POSE_TYPE(Pose)
\n-
30 GTSAM_CONCEPT_GROUP_TYPE(Pose)
\n-
31 GTSAM_CONCEPT_LIE_TYPE(Translation)
\n+
29#include <boost/optional.hpp>
\n+
30#include <boost/make_shared.hpp>
\n+
31#include <vector>
\n
32
\n-
33protected:
\n+
33namespace gtsam {
\n
34
\n-
35 Translation measured_;
\n-
36
\n-
37public:
\n-
38
\n-\n-
41
\n-
\n-
43 PoseTranslationPrior(Key key, const Translation& measured, const noiseModel::Base::shared_ptr& model)
\n-
44 : Base(model, key), measured_(measured) {
\n-
45 }
\n-
\n+
44template<class CAMERA>
\n+
\n+\n
46
\n-
\n-
48 PoseTranslationPrior(Key key, const POSE& pose_z, const noiseModel::Base::shared_ptr& model)
\n-
49 : Base(model, key), measured_(pose_z.translation()) {
\n-
50 }
\n-
\n-
51
\n-
52 ~PoseTranslationPrior() override {}
\n+
47public:
\n+
48
\n+
49private:
\n+\n+\n+
52 typedef SmartProjectionFactor<CAMERA> SmartProjectionCameraFactor;
\n
53
\n-
54 const Translation& measured() const { return measured_; }
\n+
54protected:
\n
55
\n-
\n-
57 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
58 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
59 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n-
\n+\n
60
\n-
\n-
62 Vector evaluateError(const Pose& pose, boost::optional<Matrix&> H = boost::none) const override {
\n-
63 const Translation& newTrans = pose.translation();
\n-
64 const Rotation& R = pose.rotation();
\n-
65 const int tDim = traits<Translation>::GetDimension(newTrans);
\n-
66 const int xDim = traits<Pose>::GetDimension(pose);
\n-
67 if (H) {
\n-
68 *H = Matrix::Zero(tDim, xDim);
\n-
69 std::pair<size_t, size_t> transInterval = POSE::translationInterval();
\n-
70 (*H).middleCols(transInterval.first, tDim) = R.matrix();
\n-
71 }
\n+\n+
64 mutable std::vector<Pose3, Eigen::aligned_allocator<Pose3> >
\n+\n+
67
\n+
68 public:
\n+
69
\n+
71 typedef boost::shared_ptr<This> shared_ptr;
\n
72
\n-
73 return traits<Translation>::Local(measured_, newTrans);
\n-
74 }
\n-
\n-
75
\n-
\n-
77 bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
\n-
78 const This *e = dynamic_cast<const This*> (&expected);
\n-
79 return e != nullptr && Base::equals(*e, tol) && traits<Translation>::Equals(measured_, e->measured_, tol);
\n-
80 }
\n-
\n+
74 typedef CAMERA Camera;
\n+\n+
76
\n+\n
81
\n-
\n-
83 void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
84 Base::print(s + "PoseTranslationPrior", keyFormatter);
\n-
85 traits<Translation>::Print(measured_, "Measured Translation");
\n-
86 }
\n-
\n-
87
\n-
88private:
\n-
89
\n-\n-
92 template<class ARCHIVE>
\n-
93 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
94 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
95 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n-
96 boost::serialization::base_object<Base>(*this));
\n-
97 ar & BOOST_SERIALIZATION_NVP(measured_);
\n-
98 }
\n-
99
\n-
100};
\n-
\n-
101
\n-
102} // \\namespace gtsam
\n-
103
\n-
104
\n-
105
\n-
106
\n-
Non-linear factor base classes.
\n+
\n+\n+
88 const SharedNoiseModel& sharedNoiseModel,
\n+\n+
90 : Base(sharedNoiseModel),
\n+
91 params_(params),
\n+
92 result_(TriangulationResult::Degenerate()) {}
\n+
\n+
93
\n+
\n+\n+
96 }
\n+
\n+
97
\n+
\n+
103 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
104 DefaultKeyFormatter) const override {
\n+
105 std::cout << s << "SmartProjectionFactor\\n";
\n+
106 std::cout << "linearizationMode: " << params_.linearizationMode
\n+
107 << std::endl;
\n+
108 std::cout << "triangulationParameters:\\n" << params_.triangulation
\n+
109 << std::endl;
\n+
110 std::cout << "result:\\n" << result_ << std::endl;
\n+
111 Base::print("", keyFormatter);
\n+
112 }
\n+
\n+
113
\n+
\n+
115 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n+
116 const This *e = dynamic_cast<const This*>(&p);
\n+
117 return e && params_.linearizationMode == e->params_.linearizationMode
\n+
118 && Base::equals(p, tol);
\n+
119 }
\n+
\n+
120
\n+
\n+\n+
129 // Several calls to linearize will be done from the same linearization
\n+
130 // point, hence it is not needed to re-triangulate. Note that this is not
\n+
131 // yet "selecting linearization", that will come later, and we only check if
\n+
132 // the current linearization is the "same" (up to tolerance) w.r.t. the last
\n+
133 // time we triangulated the point.
\n+
134
\n+
135 size_t m = cameras.size();
\n+
136
\n+
137 bool retriangulate = false;
\n+
138
\n+
139 // Definitely true if we do not have a previous linearization point or the
\n+
140 // new linearization point includes more poses.
\n+
141 if (cameraPosesTriangulation_.empty()
\n+
142 || cameras.size() != cameraPosesTriangulation_.size())
\n+
143 retriangulate = true;
\n+
144
\n+
145 // Otherwise, check poses against cache.
\n+
146 if (!retriangulate) {
\n+
147 for (size_t i = 0; i < cameras.size(); i++) {
\n+
148 if (!cameras[i].pose().equals(cameraPosesTriangulation_[i],
\n+
149 params_.retriangulationThreshold)) {
\n+
150 retriangulate = true; // at least two poses are different, hence we retriangulate
\n+
151 break;
\n+
152 }
\n+
153 }
\n+
154 }
\n+
155
\n+
156 // Store the current poses used for triangulation if we will re-triangulate.
\n+
157 if (retriangulate) {
\n+\n+
159 cameraPosesTriangulation_.reserve(m);
\n+
160 for (size_t i = 0; i < m; i++)
\n+
161 // cameraPosesTriangulation_[i] = cameras[i].pose();
\n+
162 cameraPosesTriangulation_.push_back(cameras[i].pose());
\n+
163 }
\n+
164
\n+
165 return retriangulate;
\n+
166 }
\n+
\n+
167
\n+
\n+\n+
175
\n+
176 size_t m = cameras.size();
\n+
177 if (m < 2) // if we have a single pose the corresponding factor is uninformative
\n+
178 return TriangulationResult::Degenerate();
\n+
179
\n+
180 bool retriangulate = decideIfTriangulate(cameras);
\n+
181 if (retriangulate)
\n+\n+
183 params_.triangulation);
\n+
184 return result_;
\n+
185 }
\n+
\n+
186
\n+
\n+\n+
194 triangulateSafe(cameras); // imperative, might reset result_
\n+
195 return bool(result_);
\n+
196 }
\n+
\n+
197
\n+
\n+
199 boost::shared_ptr<RegularHessianFactor<Base::Dim> > createHessianFactor(
\n+
200 const Cameras& cameras, const double lambda = 0.0,
\n+
201 bool diagonalDamping = false) const {
\n+
202 size_t numKeys = this->keys_.size();
\n+
203 // Create structures for Hessian Factors
\n+
204 KeyVector js;
\n+
205 std::vector<Matrix> Gs(numKeys * (numKeys + 1) / 2);
\n+
206 std::vector<Vector> gs(numKeys);
\n+
207
\n+
208 if (this->measured_.size() != cameras.size())
\n+
209 throw std::runtime_error(
\n+
210 "SmartProjectionHessianFactor: this->measured_"
\n+
211 ".size() inconsistent with input");
\n+
212
\n+\n+
214
\n+
215 if (params_.degeneracyMode == ZERO_ON_DEGENERACY && !result_) {
\n+
216 // failed: return"empty" Hessian
\n+
217 for (Matrix& m : Gs) m = Matrix::Zero(Base::Dim, Base::Dim);
\n+
218 for (Vector& v : gs) v = Vector::Zero(Base::Dim);
\n+
219 return boost::make_shared<RegularHessianFactor<Base::Dim> >(this->keys_,
\n+
220 Gs, gs, 0.0);
\n+
221 }
\n+
222
\n+
223 // Jacobian could be 3D Point3 OR 2D Unit3, difference is E.cols().
\n+
224 typename Base::FBlocks Fs;
\n+
225 Matrix E;
\n+
226 Vector b;
\n+\n+
228
\n+
229 // Whiten using noise model
\n+
230 Base::whitenJacobians(Fs, E, b);
\n+
231
\n+
232 // build augmented hessian
\n+
233 SymmetricBlockMatrix augmentedHessian = //
\n+
234 Cameras::SchurComplement(Fs, E, b, lambda, diagonalDamping);
\n+
235
\n+
236 return boost::make_shared<RegularHessianFactor<Base::Dim> >(
\n+
237 this->keys_, augmentedHessian);
\n+
238 }
\n+
\n+
239
\n+
240 // Create RegularImplicitSchurFactor factor.
\n+
241 boost::shared_ptr<RegularImplicitSchurFactor<CAMERA> > createRegularImplicitSchurFactor(
\n+
242 const Cameras& cameras, double lambda) const {
\n+\n+\n+
245 else
\n+
246 // failed: return empty
\n+
247 return boost::shared_ptr<RegularImplicitSchurFactor<CAMERA> >();
\n+
248 }
\n+
249
\n+
\n+
251 boost::shared_ptr<JacobianFactorQ<Base::Dim, 2> > createJacobianQFactor(
\n+
252 const Cameras& cameras, double lambda) const {
\n+\n+\n+
255 else
\n+
256 // failed: return empty
\n+
257 return boost::make_shared<JacobianFactorQ<Base::Dim, 2> >(this->keys_);
\n+
258 }
\n+
\n+
259
\n+
\n+
261 boost::shared_ptr<JacobianFactorQ<Base::Dim, 2> > createJacobianQFactor(
\n+
262 const Values& values, double lambda) const {
\n+
263 return createJacobianQFactor(this->cameras(values), lambda);
\n+
264 }
\n+
\n+
265
\n+
\n+
267 boost::shared_ptr<JacobianFactor> createJacobianSVDFactor(
\n+
268 const Cameras& cameras, double lambda) const {
\n+\n+\n+
271 else
\n+
272 // failed: return empty
\n+
273 return boost::make_shared<JacobianFactorSVD<Base::Dim, 2> >(this->keys_);
\n+
274 }
\n+
\n+
275
\n+
\n+
277 virtual boost::shared_ptr<RegularHessianFactor<Base::Dim> > linearizeToHessian(
\n+
278 const Values& values, double lambda = 0.0) const {
\n+
279 return createHessianFactor(this->cameras(values), lambda);
\n+
280 }
\n+
\n+
281
\n+
\n+
283 virtual boost::shared_ptr<RegularImplicitSchurFactor<CAMERA> > linearizeToImplicit(
\n+
284 const Values& values, double lambda = 0.0) const {
\n+
285 return createRegularImplicitSchurFactor(this->cameras(values), lambda);
\n+
286 }
\n+
\n+
287
\n+
\n+
289 virtual boost::shared_ptr<JacobianFactorQ<Base::Dim, 2> > linearizeToJacobian(
\n+
290 const Values& values, double lambda = 0.0) const {
\n+
291 return createJacobianQFactor(this->cameras(values), lambda);
\n+
292 }
\n+
\n+
293
\n+
\n+
299 boost::shared_ptr<GaussianFactor> linearizeDamped(const Cameras& cameras,
\n+
300 const double lambda = 0.0) const {
\n+
301 // depending on flag set on construction we may linearize to different linear factors
\n+
302 switch (params_.linearizationMode) {
\n+
303 case HESSIAN:
\n+
304 return createHessianFactor(cameras, lambda);
\n+
305 case IMPLICIT_SCHUR:
\n+
306 return createRegularImplicitSchurFactor(cameras, lambda);
\n+
307 case JACOBIAN_SVD:
\n+
308 return createJacobianSVDFactor(cameras, lambda);
\n+
309 case JACOBIAN_Q:
\n+
310 return createJacobianQFactor(cameras, lambda);
\n+
311 default:
\n+
312 throw std::runtime_error("SmartFactorlinearize: unknown mode");
\n+
313 }
\n+
314 }
\n+
\n+
315
\n+
\n+
321 boost::shared_ptr<GaussianFactor> linearizeDamped(const Values& values,
\n+
322 const double lambda = 0.0) const {
\n+
323 // depending on flag set on construction we may linearize to different linear factors
\n+
324 Cameras cameras = this->cameras(values);
\n+
325 return linearizeDamped(cameras, lambda);
\n+
326 }
\n+
\n+
327
\n+
\n+
329 boost::shared_ptr<GaussianFactor> linearize(
\n+
330 const Values& values) const override {
\n+
331 return linearizeDamped(values);
\n+
332 }
\n+
\n+
333
\n+
\n+
338 bool triangulateAndComputeE(Matrix& E, const Cameras& cameras) const {
\n+
339 bool nonDegenerate = triangulateForLinearize(cameras);
\n+
340 if (nonDegenerate)
\n+
341 cameras.project2(*result_, boost::none, E);
\n+
342 return nonDegenerate;
\n+
343 }
\n+
\n+
344
\n+
\n+
349 bool triangulateAndComputeE(Matrix& E, const Values& values) const {
\n+
350 Cameras cameras = this->cameras(values);
\n+\n+
352 }
\n+
\n+
353
\n+
\n+\n+
358 typename Base::FBlocks& Fs, Matrix& E, Vector& b,
\n+
359 const Cameras& cameras) const {
\n+
360
\n+
361 if (!result_) {
\n+
362 // Handle degeneracy
\n+
363 // TODO check flag whether we should do this
\n+
364 Unit3 backProjected = cameras[0].backprojectPointAtInfinity(
\n+
365 this->measured_.at(0));
\n+
366 Base::computeJacobians(Fs, E, b, cameras, backProjected);
\n+
367 } else {
\n+
368 // valid result: just return Base version
\n+\n+
370 }
\n+
371 }
\n+
\n+
372
\n+
\n+\n+
375 typename Base::FBlocks& Fs, Matrix& E, Vector& b,
\n+
376 const Values& values) const {
\n+
377 Cameras cameras = this->cameras(values);
\n+
378 bool nonDegenerate = triangulateForLinearize(cameras);
\n+
379 if (nonDegenerate)
\n+\n+
381 return nonDegenerate;
\n+
382 }
\n+
\n+
383
\n+
\n+\n+
386 typename Base::FBlocks& Fs, Matrix& Enull, Vector& b,
\n+
387 const Values& values) const {
\n+
388 Cameras cameras = this->cameras(values);
\n+
389 bool nonDegenerate = triangulateForLinearize(cameras);
\n+
390 if (nonDegenerate)
\n+\n+
392 return nonDegenerate;
\n+
393 }
\n+
\n+
394
\n+
\n+
396 Vector reprojectionErrorAfterTriangulation(const Values& values) const {
\n+
397 Cameras cameras = this->cameras(values);
\n+
398 bool nonDegenerate = triangulateForLinearize(cameras);
\n+
399 if (nonDegenerate)
\n+\n+
401 else
\n+
402 return Vector::Zero(cameras.size() * 2);
\n+
403 }
\n+
\n+
404
\n+
\n+\n+
412 boost::optional<Point3> externalPoint = boost::none) const {
\n+
413
\n+
414 if (externalPoint)
\n+
415 result_ = TriangulationResult(*externalPoint);
\n+
416 else
\n+\n+
418
\n+
419 if (result_)
\n+
420 // All good, just use version in base class
\n+\n+
422 else if (params_.degeneracyMode == HANDLE_INFINITY) {
\n+
423 // Otherwise, manage the exceptions with rotation-only factors
\n+
424 Unit3 backprojected = cameras.front().backprojectPointAtInfinity(
\n+
425 this->measured_.at(0));
\n+
426 return Base::totalReprojectionError(cameras, backprojected);
\n+
427 } else
\n+
428 // if we don't want to manage the exceptions we discard the factor
\n+
429 return 0.0;
\n+
430 }
\n+
\n+
431
\n+
\n+
433 double error(const Values& values) const override {
\n+
434 if (this->active(values)) {
\n+\n+
436 } else { // else of active flag
\n+
437 return 0.0;
\n+
438 }
\n+
439 }
\n+
\n+
440
\n+
\n+\n+
443 return result_;
\n+
444 }
\n+
\n+
445
\n+
\n+
447 TriangulationResult point(const Values& values) const {
\n+
448 Cameras cameras = this->cameras(values);
\n+
449 return triangulateSafe(cameras);
\n+
450 }
\n+
\n+
451
\n+
453 bool isValid() const { return result_.valid(); }
\n+
454
\n+
456 bool isDegenerate() const { return result_.degenerate(); }
\n+
457
\n+
459 bool isPointBehindCamera() const { return result_.behindCamera(); }
\n+
460
\n+
462 bool isOutlier() const { return result_.outlier(); }
\n+
463
\n+
465 bool isFarPoint() const { return result_.farPoint(); }
\n+
466
\n+
467 private:
\n+
468
\n+\n+
471 template<class ARCHIVE>
\n+
472 void serialize(ARCHIVE & ar, const unsigned int version) {
\n+
473 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
474 ar & BOOST_SERIALIZATION_NVP(params_);
\n+
475 ar & BOOST_SERIALIZATION_NVP(result_);
\n+
476 ar & BOOST_SERIALIZATION_NVP(cameraPosesTriangulation_);
\n+
477 }
\n+
478}
\n+
\n+
479;
\n+
480
\n+
482template<class CAMERA>
\n+
\n+
483struct traits<SmartProjectionFactor<CAMERA> > : public Testable<
\n+
484 SmartProjectionFactor<CAMERA> > {
\n+
485};
\n+
\n+
486
\n+
487} // \\ namespace gtsam
\n+
Functions for triangulation.
\n+
Base class to create smart factors on poses or cameras.
\n+
utility functions for loading datasets
\n+
Collect common parameters for SmartProjection and SmartStereoProjection factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
TriangulationResult triangulateSafe(const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measured, const TriangulationParameters &params)
triangulateSafe: extensive checking of the outcome
Definition triangulation.h:680
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n+
static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * ...
Definition CameraSet.h:150
\n+
ZVector project2(const POINT &point, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Project a point (possibly Unit3 at infinity), with derivatives Note that F is a sparse block-diagonal...
Definition CameraSet.h:108
\n+
TriangulationResult is an optional point, along with the reasons why it is invalid.
Definition triangulation.h:626
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n-
A prior on the translation part of a pose.
Definition PoseTranslationPrior.h:21
\n-
PoseTranslationPrior(Key key, const Translation &measured, const noiseModel::Base::shared_ptr &model)
standard constructor
Definition PoseTranslationPrior.h:43
\n-
PoseTranslationPrior(Key key, const POSE &pose_z, const noiseModel::Base::shared_ptr &model)
Constructor that pulls the translation from an incoming POSE.
Definition PoseTranslationPrior.h:48
\n-
Vector evaluateError(const Pose &pose, boost::optional< Matrix & > H=boost::none) const override
h(x)-z
Definition PoseTranslationPrior.h:62
\n-
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
equals specialized to this factor
Definition PoseTranslationPrior.h:77
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition PoseTranslationPrior.h:57
\n-
friend class boost::serialization::access
Serialization function.
Definition PoseTranslationPrior.h:91
\n-
PoseTranslationPrior()
default constructor - only use for serialization
Definition PoseTranslationPrior.h:40
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print contents
Definition PoseTranslationPrior.h:83
\n-
Concept-checking macros for geometric objects Each macro instantiates a concept check structure,...
\n+
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
Base class for smart factors.
Definition SmartFactorBase.h:50
\n+
void computeJacobians(FBlocks &Fs, Matrix &E, Vector &b, const Cameras &cameras, const POINT &point) const
Compute F, E, and b (called below in both vanilla and SVD versions), where F is a vector of derivativ...
Definition SmartFactorBase.h:285
\n+
boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > > createRegularImplicitSchurFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0, bool diagonalDamping=false) const
Return Jacobians as RegularImplicitSchurFactor with raw access.
Definition SmartFactorBase.h:356
\n+
static const int Dim
Camera dimension.
Definition SmartFactorBase.h:60
\n+
virtual Cameras cameras(const Values &values) const
Collect all cameras: important that in key order.
Definition SmartFactorBase.h:162
\n+
double totalReprojectionError(const Cameras &cameras, const POINT &point) const
Calculate the error of the factor.
Definition SmartFactorBase.h:267
\n+
void computeJacobiansSVD(FBlocks &Fs, Matrix &Enull, Vector &b, const Cameras &cameras, const POINT &point) const
SVD version that produces smaller Jacobian matrices by doing an SVD decomposition on E,...
Definition SmartFactorBase.h:300
\n+
ZVector measured_
Measurements for each of the m views.
Definition SmartFactorBase.h:79
\n+
Vector unwhitenedError(const Cameras &cameras, const POINT &point, boost::optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Compute reprojection errors [h(x)-z] = [cameras.project(p)-z] and derivatives.
Definition SmartFactorBase.h:204
\n+
void whitenJacobians(FBlocks &F, Matrix &E, Vector &b) const
Whiten the Jacobians computed by computeJacobians using noiseModel_.
Definition SmartFactorBase.h:347
\n+
boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0) const
Return Jacobians as JacobianFactorSVD.
Definition SmartFactorBase.h:386
\n+
boost::shared_ptr< JacobianFactorQ< Dim, ZDim > > createJacobianQFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0, bool diagonalDamping=false) const
Return Jacobians as JacobianFactorQ.
Definition SmartFactorBase.h:369
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartFactorBase.h:174
\n+
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartFactorBase.h:187
\n+
Definition SmartFactorParams.h:42
\n+
LinearizationMode linearizationMode
How to linearize the factor.
Definition SmartFactorParams.h:44
\n+
double retriangulationThreshold
threshold to decide whether to re-triangulate
Definition SmartFactorParams.h:50
\n+
DegeneracyMode degeneracyMode
How to linearize the factor.
Definition SmartFactorParams.h:45
\n+
SmartProjectionFactor: triangulates point and keeps an estimate of it around.
Definition SmartProjectionFactor.h:45
\n+
bool decideIfTriangulate(const Cameras &cameras) const
Check if the new linearization point is the same as the one used for previous triangulation.
Definition SmartProjectionFactor.h:128
\n+
boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > > createJacobianQFactor(const Values &values, double lambda) const
Create JacobianFactorQ factor, takes values.
Definition SmartProjectionFactor.h:261
\n+
boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras &cameras, double lambda) const
Different (faster) way to compute a JacobianFactorSVD factor.
Definition SmartProjectionFactor.h:267
\n+
void computeJacobiansWithTriangulatedPoint(typename Base::FBlocks &Fs, Matrix &E, Vector &b, const Cameras &cameras) const
Compute F, E only (called below in both vanilla and SVD versions) Assumes the point has been computed...
Definition SmartProjectionFactor.h:357
\n+
virtual boost::shared_ptr< RegularHessianFactor< Base::Dim > > linearizeToHessian(const Values &values, double lambda=0.0) const
Linearize to a Hessianfactor.
Definition SmartProjectionFactor.h:277
\n+
bool isOutlier() const
return the outlier state
Definition SmartProjectionFactor.h:462
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartProjectionFactor.h:103
\n+
bool triangulateAndComputeE(Matrix &E, const Values &values) const
Triangulate and compute derivative of error with respect to point.
Definition SmartProjectionFactor.h:349
\n+
boost::shared_ptr< GaussianFactor > linearizeDamped(const Cameras &cameras, const double lambda=0.0) const
Linearize to Gaussian Factor.
Definition SmartProjectionFactor.h:299
\n+
bool isFarPoint() const
return the farPoint state
Definition SmartProjectionFactor.h:465
\n+
TriangulationResult result_
result from triangulateSafe
Definition SmartProjectionFactor.h:63
\n+
boost::shared_ptr< RegularHessianFactor< Base::Dim > > createHessianFactor(const Cameras &cameras, const double lambda=0.0, bool diagonalDamping=false) const
Create a Hessianfactor that is an approximation of error(p).
Definition SmartProjectionFactor.h:199
\n+
TriangulationResult triangulateSafe(const Cameras &cameras) const
Call gtsam::triangulateSafe iff we need to re-triangulate.
Definition SmartProjectionFactor.h:174
\n+
~SmartProjectionFactor() override
Virtual destructor.
Definition SmartProjectionFactor.h:95
\n+
double error(const Values &values) const override
Calculate total reprojection error.
Definition SmartProjectionFactor.h:433
\n+
bool isValid() const
Is result valid?
Definition SmartProjectionFactor.h:453
\n+
std::vector< Pose3, Eigen::aligned_allocator< Pose3 > > cameraPosesTriangulation_
current triangulation poses
Definition SmartProjectionFactor.h:65
\n+
bool triangulateAndComputeE(Matrix &E, const Cameras &cameras) const
Triangulate and compute derivative of error with respect to point.
Definition SmartProjectionFactor.h:338
\n+
virtual boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > > linearizeToImplicit(const Values &values, double lambda=0.0) const
Linearize to an Implicit Schur factor.
Definition SmartProjectionFactor.h:283
\n+
double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 > externalPoint=boost::none) const
Calculate the error of the factor.
Definition SmartProjectionFactor.h:411
\n+
virtual boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > > linearizeToJacobian(const Values &values, double lambda=0.0) const
Linearize to a JacobianfactorQ.
Definition SmartProjectionFactor.h:289
\n+
bool isDegenerate() const
return the degenerate state
Definition SmartProjectionFactor.h:456
\n+
bool triangulateAndComputeJacobians(typename Base::FBlocks &Fs, Matrix &E, Vector &b, const Values &values) const
Version that takes values, and creates the point.
Definition SmartProjectionFactor.h:374
\n+
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartProjectionFactor.h:115
\n+
CAMERA Camera
shorthand for a set of cameras
Definition SmartProjectionFactor.h:74
\n+
boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > > createJacobianQFactor(const Cameras &cameras, double lambda) const
Create JacobianFactorQ factor.
Definition SmartProjectionFactor.h:251
\n+
friend class boost::serialization::access
Serialization function.
Definition SmartProjectionFactor.h:470
\n+
TriangulationResult point(const Values &values) const
COMPUTE the landmark.
Definition SmartProjectionFactor.h:447
\n+
SmartProjectionFactor(const SharedNoiseModel &sharedNoiseModel, const SmartProjectionParams &params=SmartProjectionParams())
Constructor.
Definition SmartProjectionFactor.h:87
\n+
bool isPointBehindCamera() const
return the cheirality status flag
Definition SmartProjectionFactor.h:459
\n+
boost::shared_ptr< GaussianFactor > linearize(const Values &values) const override
linearize
Definition SmartProjectionFactor.h:329
\n+
bool triangulateAndComputeJacobiansSVD(typename Base::FBlocks &Fs, Matrix &Enull, Vector &b, const Values &values) const
takes values
Definition SmartProjectionFactor.h:385
\n+
Vector reprojectionErrorAfterTriangulation(const Values &values) const
Calculate vector of re-projection errors, before applying noise model.
Definition SmartProjectionFactor.h:396
\n+
TriangulationResult point() const
return the landmark
Definition SmartProjectionFactor.h:442
\n+
bool triangulateForLinearize(const Cameras &cameras) const
Possibly re-triangulate before calculating Jacobians.
Definition SmartProjectionFactor.h:193
\n+
boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor
Definition SmartProjectionFactor.h:71
\n+
SmartProjectionFactor()
Default constructor, only for serialization.
Definition SmartProjectionFactor.h:80
\n+
boost::shared_ptr< GaussianFactor > linearizeDamped(const Values &values, const double lambda=0.0) const
Linearize to Gaussian Factor.
Definition SmartProjectionFactor.h:321
\n+\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,182 +1,743 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PoseTranslationPrior.h\n+SmartProjectionFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1\n-10#pragma once\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+7\n+8 * See LICENSE for the license information\n+9\n+10 * -------------------------------------------------------------------------\n+- */\n 11\n-12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh>\n-13#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-14\n-15namespace _\bg_\bt_\bs_\ba_\bm {\n-16\n-20template\n-_\b2_\b1class _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-22public:\n-23 typedef _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b<_\bP_\bO_\bS_\bE_\b> This;\n-24 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bS_\bE_\b> _\bB_\ba_\bs_\be;\n-25 typedef POSE Pose;\n-26 typedef typename POSE::Translation Translation;\n-27 typedef typename POSE::Rotation Rotation;\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+24\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh>\n 28\n-29 GTSAM_CONCEPT_POSE_TYPE(Pose)\n-30 GTSAM_CONCEPT_GROUP_TYPE(Pose)\n-31 GTSAM_CONCEPT_LIE_TYPE(Translation)\n+29#include \n+30#include \n+31#include \n 32\n-33protected:\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n 34\n-35 Translation measured_;\n-36\n-37public:\n-38\n-_\b4_\b0 _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br() {}\n-41\n-_\b4_\b3 _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Translation& measured, const\n-noiseModel::Base::shared_ptr& model)\n-44 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by), measured_(measured) {\n-45 }\n+44template\n+_\b4_\b5class _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be {\n 46\n-_\b4_\b8 _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const POSE& pose_z, const noiseModel::Base::\n-shared_ptr& model)\n-49 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by), measured_(pose_z.translation()) {\n-50 }\n-51\n-52 _\b~_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br() override {}\n+47public:\n+48\n+49private:\n+50 typedef _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> _\bB_\ba_\bs_\be;\n+51 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> This;\n+52 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> SmartProjectionCameraFactor;\n 53\n-54 const Translation& measured() const { return measured_; }\n+54protected:\n 55\n-_\b5_\b7 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-58 return boost::static_pointer_cast(\n-59 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }\n+58 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs params_;\n 60\n-_\b6_\b2 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Pose& pose, boost::optional H = boost::\n-none) const override {\n-63 const Translation& newTrans = pose.translation();\n-64 const Rotation& R = pose.rotation();\n-65 const int tDim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(newTrans);\n-66 const int xDim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bs_\be_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(pose);\n-67 if (H) {\n-68 *H = Matrix::Zero(tDim, xDim);\n-69 std::pair transInterval = POSE::translationInterval();\n-70 (*H).middleCols(transInterval.first, tDim) = R.matrix();\n-71 }\n+_\b6_\b3 mutable _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt _\br_\be_\bs_\bu_\bl_\bt_\b_;\n+64 mutable std::vector >\n+_\b6_\b5 _\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_;\n+67\n+68 public:\n+69\n+_\b7_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n 72\n-73 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured_, newTrans);\n-74 }\n-75\n-_\b7_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol=1e-9) const override\n-{\n-78 const This *e = dynamic_cast (&expected);\n-79 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs\n-(measured_, e->measured_, tol);\n-80 }\n+_\b7_\b4 typedef CAMERA _\bC_\ba_\bm_\be_\br_\ba;\n+75 typedef _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> _\bC_\ba_\bm_\be_\br_\ba_\bs;\n+76\n+_\b8_\b0 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n 81\n-_\b8_\b3 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-DefaultKeyFormatter) const override {\n-84 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s + \"PoseTranslationPrior\", keyFormatter);\n-85 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(measured_, \"Measured Translation\");\n-86 }\n-87\n-88private:\n-89\n-_\b9_\b1 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-92 template\n-93 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-94 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility\n-95 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n-96 boost::serialization::base_object(*this));\n-97 ar & BOOST_SERIALIZATION_NVP(measured_);\n-98 }\n-99\n-100};\n-101\n-102} // \\namespace gtsam\n-103\n-104\n-105\n-106\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+_\b8_\b7 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n+88 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& sharedNoiseModel,\n+89 const _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& params = _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs())\n+90 : _\bB_\ba_\bs_\be(sharedNoiseModel),\n+91 params_(params),\n+92 _\br_\be_\bs_\bu_\bl_\bt_\b_(_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt::Degenerate()) {}\n+93\n+_\b9_\b5 _\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {\n+96 }\n+97\n+_\b1_\b0_\b3 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+104 DefaultKeyFormatter) const override {\n+105 std::cout << s << \"SmartProjectionFactor\\n\";\n+106 std::cout << \"linearizationMode: \" << params_._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n+107 << std::endl;\n+108 std::cout << \"triangulationParameters:\\n\" << params_.triangulation\n+109 << std::endl;\n+110 std::cout << \"result:\\n\" << _\br_\be_\bs_\bu_\bl_\bt_\b_ << std::endl;\n+111 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n+112 }\n+113\n+_\b1_\b1_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n+116 const This *e = dynamic_cast(&p);\n+117 return e && params_._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be == e->params_.linearizationMode\n+118 && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol);\n+119 }\n+120\n+_\b1_\b2_\b8 bool _\bd_\be_\bc_\bi_\bd_\be_\bI_\bf_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n+129 // Several calls to linearize will be done from the same linearization\n+130 // point, hence it is not needed to re-triangulate. Note that this is not\n+131 // yet \"selecting linearization\", that will come later, and we only check\n+if\n+132 // the current linearization is the \"same\" (up to tolerance) w.r.t. the\n+last\n+133 // time we triangulated the point.\n+134\n+135 size_t m = _\bc_\ba_\bm_\be_\br_\ba_\bs.size();\n+136\n+137 bool retriangulate = false;\n+138\n+139 // Definitely true if we do not have a previous linearization point or the\n+140 // new linearization point includes more poses.\n+141 if (_\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_.empty()\n+142 || _\bc_\ba_\bm_\be_\br_\ba_\bs.size() != _\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_.size())\n+143 retriangulate = true;\n+144\n+145 // Otherwise, check poses against cache.\n+146 if (!retriangulate) {\n+147 for (size_t i = 0; i < _\bc_\ba_\bm_\be_\br_\ba_\bs.size(); i++) {\n+148 if (!_\bc_\ba_\bm_\be_\br_\ba_\bs[i].pose()._\be_\bq_\bu_\ba_\bl_\bs(_\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_[i],\n+149 params_._\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd)) {\n+150 retriangulate = true; // at least two poses are different, hence we\n+retriangulate\n+151 break;\n+152 }\n+153 }\n+154 }\n+155\n+156 // Store the current poses used for triangulation if we will re-\n+triangulate.\n+157 if (retriangulate) {\n+158 _\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_.clear();\n+159 _\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_.reserve(m);\n+160 for (size_t i = 0; i < m; i++)\n+161 // cameraPosesTriangulation_[i] = cameras[i].pose();\n+162 _\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_.push_back(_\bc_\ba_\bm_\be_\br_\ba_\bs[i].pose());\n+163 }\n+164\n+165 return retriangulate;\n+166 }\n+167\n+_\b1_\b7_\b4 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n+175\n+176 size_t m = _\bc_\ba_\bm_\be_\br_\ba_\bs.size();\n+177 if (m < 2) // if we have a single pose the corresponding factor is\n+uninformative\n+178 return TriangulationResult::Degenerate();\n+179\n+180 bool retriangulate = _\bd_\be_\bc_\bi_\bd_\be_\bI_\bf_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n+181 if (retriangulate)\n+182 _\br_\be_\bs_\bu_\bl_\bt_\b_ = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs, this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_,\n+183 params_.triangulation);\n+184 return _\br_\be_\bs_\bu_\bl_\bt_\b_;\n+185 }\n+186\n+_\b1_\b9_\b3 bool _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n+194 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs); // imperative, might reset result_\n+195 return bool(_\br_\be_\bs_\bu_\bl_\bt_\b_);\n+196 }\n+197\n+_\b1_\b9_\b9 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n+200 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const double lambda = 0.0,\n+201 bool diagonalDamping = false) const {\n+202 size_t numKeys = this->_\bk_\be_\by_\bs_\b_.size();\n+203 // Create structures for Hessian Factors\n+204 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br js;\n+205 std::vector Gs(numKeys * (numKeys + 1) / 2);\n+206 std::vector gs(numKeys);\n+207\n+208 if (this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.size() != cameras.size())\n+209 throw std::runtime_error(\n+210 \"SmartProjectionHessianFactor: this->measured_\"\n+211 \".size() inconsistent with input\");\n+212\n+213 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n+214\n+215 if (params_._\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be == ZERO_ON_DEGENERACY && !_\br_\be_\bs_\bu_\bl_\bt_\b_) {\n+216 // failed: return\"empty\" Hessian\n+217 for (Matrix& m : Gs) m = Matrix::Zero(_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bi_\bm, _\bB_\ba_\bs_\be_\b:_\b:_\bD_\bi_\bm);\n+218 for (Vector& v : gs) v = Vector::Zero(_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bi_\bm);\n+219 return boost::make_shared >(this->_\bk_\be_\by_\bs_\b_,\n+220 Gs, gs, 0.0);\n+221 }\n+222\n+223 // Jacobian could be 3D Point3 OR 2D Unit3, difference is E.cols().\n+224 typename Base::FBlocks Fs;\n+225 Matrix E;\n+226 Vector b;\n+227 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs);\n+228\n+229 // Whiten using noise model\n+230 _\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b);\n+231\n+232 // build augmented hessian\n+233 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessian = //\n+234 _\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(Fs, E, b, lambda, diagonalDamping);\n+235\n+236 return boost::make_shared >(\n+237 this->_\bk_\be_\by_\bs_\b_, augmentedHessian);\n+238 }\n+239\n+240 // Create RegularImplicitSchurFactor factor.\n+241 boost::shared_ptr >\n+createRegularImplicitSchurFactor(\n+242 const Cameras& _\bc_\ba_\bm_\be_\br_\ba_\bs, double lambda) const {\n+243 if (_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs))\n+244 return _\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_, lambda);\n+245 else\n+246 // failed: return empty\n+247 return boost::shared_ptr >();\n+248 }\n+249\n+_\b2_\b5_\b1 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(\n+252 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, double lambda) const {\n+253 if (_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs))\n+254 return _\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_, lambda);\n+255 else\n+256 // failed: return empty\n+257 return boost::make_shared >(this->_\bk_\be_\by_\bs_\b_);\n+258 }\n+259\n+_\b2_\b6_\b1 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(\n+262 const _\bV_\ba_\bl_\bu_\be_\bs& values, double lambda) const {\n+263 return _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values), lambda);\n+264 }\n+265\n+_\b2_\b6_\b7 boost::shared_ptr _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br(\n+268 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, double lambda) const {\n+269 if (_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs))\n+270 return _\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_, lambda);\n+271 else\n+272 // failed: return empty\n+273 return boost::make_shared >(this->_\bk_\be_\by_\bs_\b_);\n+274 }\n+275\n+_\b2_\b7_\b7 virtual boost::shared_ptr >\n+_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bH_\be_\bs_\bs_\bi_\ba_\bn(\n+278 const _\bV_\ba_\bl_\bu_\be_\bs& values, double lambda = 0.0) const {\n+279 return _\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values), lambda);\n+280 }\n+281\n+_\b2_\b8_\b3 virtual boost::shared_ptr >\n+_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt(\n+284 const _\bV_\ba_\bl_\bu_\be_\bs& values, double lambda = 0.0) const {\n+285 return createRegularImplicitSchurFactor(this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values), lambda);\n+286 }\n+287\n+_\b2_\b8_\b9 virtual boost::shared_ptr >\n+_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(\n+290 const _\bV_\ba_\bl_\bu_\be_\bs& values, double lambda = 0.0) const {\n+291 return _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values), lambda);\n+292 }\n+293\n+_\b2_\b9_\b9 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs,\n+300 const double lambda = 0.0) const {\n+301 // depending on flag set on construction we may linearize to different\n+linear factors\n+302 switch (params_._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be) {\n+303 case HESSIAN:\n+304 return _\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, lambda);\n+305 case IMPLICIT_SCHUR:\n+306 return createRegularImplicitSchurFactor(_\bc_\ba_\bm_\be_\br_\ba_\bs, lambda);\n+307 case JACOBIAN_SVD:\n+308 return _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, lambda);\n+309 case JACOBIAN_Q:\n+310 return _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, lambda);\n+311 default:\n+312 throw std::runtime_error(\"SmartFactorlinearize: unknown mode\");\n+313 }\n+314 }\n+315\n+_\b3_\b2_\b1 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(const _\bV_\ba_\bl_\bu_\be_\bs& values,\n+322 const double lambda = 0.0) const {\n+323 // depending on flag set on construction we may linearize to different\n+linear factors\n+324 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n+325 return _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(_\bc_\ba_\bm_\be_\br_\ba_\bs, lambda);\n+326 }\n+327\n+_\b3_\b2_\b9 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(\n+330 const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n+331 return _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(values);\n+332 }\n+333\n+_\b3_\b3_\b8 bool _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE(Matrix& E, const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n+339 bool nonDegenerate = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n+340 if (nonDegenerate)\n+341 _\bc_\ba_\bm_\be_\br_\ba_\bs._\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(*_\br_\be_\bs_\bu_\bl_\bt_\b_, boost::none, E);\n+342 return nonDegenerate;\n+343 }\n+344\n+_\b3_\b4_\b9 bool _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE(Matrix& E, const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n+350 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n+351 return _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE(E, _\bc_\ba_\bm_\be_\br_\ba_\bs);\n+352 }\n+353\n+_\b3_\b5_\b7 void _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt(\n+358 typename Base::FBlocks& Fs, Matrix& E, Vector& b,\n+359 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n+360\n+361 if (!_\br_\be_\bs_\bu_\bl_\bt_\b_) {\n+362 // Handle degeneracy\n+363 // TODO check flag whether we should do this\n+364 _\bU_\bn_\bi_\bt_\b3 backProjected = _\bc_\ba_\bm_\be_\br_\ba_\bs[0].backprojectPointAtInfinity(\n+365 this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.at(0));\n+366 _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, backProjected);\n+367 } else {\n+368 // valid result: just return Base version\n+369 _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_);\n+370 }\n+371 }\n+372\n+_\b3_\b7_\b4 bool _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(\n+375 typename Base::FBlocks& Fs, Matrix& E, Vector& b,\n+376 const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n+377 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n+378 bool nonDegenerate = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n+379 if (nonDegenerate)\n+380 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs);\n+381 return nonDegenerate;\n+382 }\n+383\n+_\b3_\b8_\b5 bool _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD(\n+386 typename Base::FBlocks& Fs, Matrix& Enull, Vector& b,\n+387 const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n+388 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n+389 bool nonDegenerate = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n+390 if (nonDegenerate)\n+391 _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD(Fs, Enull, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_);\n+392 return nonDegenerate;\n+393 }\n+394\n+_\b3_\b9_\b6 Vector _\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn(const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n+397 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n+398 bool nonDegenerate = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n+399 if (nonDegenerate)\n+400 return _\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_);\n+401 else\n+402 return Vector::Zero(_\bc_\ba_\bm_\be_\br_\ba_\bs.size() * 2);\n+403 }\n+404\n+_\b4_\b1_\b1 double _\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs,\n+412 boost::optional externalPoint = boost::none) const {\n+413\n+414 if (externalPoint)\n+415 _\br_\be_\bs_\bu_\bl_\bt_\b_ = _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(*externalPoint);\n+416 else\n+417 _\br_\be_\bs_\bu_\bl_\bt_\b_ = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n+418\n+419 if (_\br_\be_\bs_\bu_\bl_\bt_\b_)\n+420 // All good, just use version in base class\n+421 return _\bB_\ba_\bs_\be_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_);\n+422 else if (params_._\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be == HANDLE_INFINITY) {\n+423 // Otherwise, manage the exceptions with rotation-only factors\n+424 _\bU_\bn_\bi_\bt_\b3 backprojected = _\bc_\ba_\bm_\be_\br_\ba_\bs.front().backprojectPointAtInfinity(\n+425 this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.at(0));\n+426 return _\bB_\ba_\bs_\be_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(cameras, backprojected);\n+427 } else\n+428 // if we don't want to manage the exceptions we discard the factor\n+429 return 0.0;\n+430 }\n+431\n+_\b4_\b3_\b3 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n+434 if (this->_\ba_\bc_\bt_\bi_\bv_\be(values)) {\n+435 return _\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(_\bB_\ba_\bs_\be_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs(values));\n+436 } else { // else of active flag\n+437 return 0.0;\n+438 }\n+439 }\n+440\n+_\b4_\b4_\b2 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt _\bp_\bo_\bi_\bn_\bt() const {\n+443 return _\br_\be_\bs_\bu_\bl_\bt_\b_;\n+444 }\n+445\n+_\b4_\b4_\b7 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt _\bp_\bo_\bi_\bn_\bt(const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n+448 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n+449 return _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n+450 }\n+451\n+_\b4_\b5_\b3 bool _\bi_\bs_\bV_\ba_\bl_\bi_\bd() const { return _\br_\be_\bs_\bu_\bl_\bt_\b_.valid(); }\n+454\n+_\b4_\b5_\b6 bool _\bi_\bs_\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bt_\be() const { return _\br_\be_\bs_\bu_\bl_\bt_\b_.degenerate(); }\n+457\n+_\b4_\b5_\b9 bool _\bi_\bs_\bP_\bo_\bi_\bn_\bt_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba() const { return _\br_\be_\bs_\bu_\bl_\bt_\b_.behindCamera(); }\n+460\n+_\b4_\b6_\b2 bool _\bi_\bs_\bO_\bu_\bt_\bl_\bi_\be_\br() const { return _\br_\be_\bs_\bu_\bl_\bt_\b_.outlier(); }\n+463\n+_\b4_\b6_\b5 bool _\bi_\bs_\bF_\ba_\br_\bP_\bo_\bi_\bn_\bt() const { return _\br_\be_\bs_\bu_\bl_\bt_\b_.farPoint(); }\n+466\n+467 private:\n+468\n+_\b4_\b7_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+471 template\n+472 void serialize(ARCHIVE & ar, const unsigned int version) {\n+473 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+474 ar & BOOST_SERIALIZATION_NVP(params_);\n+475 ar & BOOST_SERIALIZATION_NVP(_\br_\be_\bs_\bu_\bl_\bt_\b_);\n+476 ar & BOOST_SERIALIZATION_NVP(_\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_);\n+477 }\n+478}\n+479;\n+480\n+482template\n+_\b4_\b8_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n+484 SmartProjectionFactor > {\n+485};\n+486\n+487} // \\ namespace gtsam\n+_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+Functions for triangulation.\n+_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b._\bh\n+Base class to create smart factors on poses or cameras.\n+_\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh\n+utility functions for loading datasets\n+_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+Collect common parameters for SmartProjection and SmartStereoProjection\n+factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be\n+TriangulationResult triangulateSafe(const CameraSet< CAMERA > &cameras, const\n+typename CAMERA::MeasurementVector &measured, const TriangulationParameters\n+¶ms)\n+triangulateSafe: extensive checking of the outcome\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:680\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n+A set of cameras, all with their own calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n+static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix<\n+double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND >\n+> > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector\n+&b)\n+Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G =\n+F' * F - F' * E * P * ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n+ZVector project2(const POINT &point, boost::optional< FBlocks & > Fs=boost::\n+none, boost::optional< Matrix & > E=boost::none) const\n+Project a point (possibly Unit3 at infinity), with derivatives Note that F is a\n+sparse block-diagonal...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n+TriangulationResult is an optional point, along with the reasons why it is\n+invalid.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:626\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bP_\bO_\bS_\bE_\b _\b>_\b:_\b:_\bk_\be_\by\n-Key key() const\n-Returns a key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-A prior on the translation part of a pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:21\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-PoseTranslationPrior(Key key, const Translation &measured, const noiseModel::\n-Base::shared_ptr &model)\n-standard constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-PoseTranslationPrior(Key key, const POSE &pose_z, const noiseModel::Base::\n-shared_ptr &model)\n-Constructor that pulls the translation from an incoming POSE.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Pose &pose, boost::optional< Matrix & > H=boost::\n-none) const override\n-h(x)-z\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n-equals specialized to this factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-PoseTranslationPrior()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n+virtual bool active(const Values &) const\n+Checks whether a factor should be used based on a set of values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n+Base class for smart factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n+void computeJacobians(FBlocks &Fs, Matrix &E, Vector &b, const Cameras\n+&cameras, const POINT &point) const\n+Compute F, E, and b (called below in both vanilla and SVD versions), where F is\n+a vector of derivativ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:285\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > >\n+createRegularImplicitSchurFactor(const Cameras &cameras, const Point3 &point,\n+double lambda=0.0, bool diagonalDamping=false) const\n+Return Jacobians as RegularImplicitSchurFactor with raw access.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:356\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bi_\bm\n+static const int Dim\n+Camera dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs\n+virtual Cameras cameras(const Values &values) const\n+Collect all cameras: important that in key order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n+double totalReprojectionError(const Cameras &cameras, const POINT &point) const\n+Calculate the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:267\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD\n+void computeJacobiansSVD(FBlocks &Fs, Matrix &Enull, Vector &b, const Cameras\n+&cameras, const POINT &point) const\n+SVD version that produces smaller Jacobian matrices by doing an SVD\n+decomposition on E,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:300\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n+ZVector measured_\n+Measurements for each of the m views.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n+Vector unwhitenedError(const Cameras &cameras, const POINT &point, boost::\n+optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional< Matrix\n+& > E=boost::none) const\n+Compute reprojection errors [h(x)-z] = [cameras.project(p)-z] and derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:204\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n+void whitenJacobians(FBlocks &F, Matrix &E, Vector &b) const\n+Whiten the Jacobians computed by computeJacobians using noiseModel_.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:347\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras\n+&cameras, const Point3 &point, double lambda=0.0) const\n+Return Jacobians as JacobianFactorSVD.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:386\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< JacobianFactorQ< Dim, ZDim > > createJacobianQFactor(const\n+Cameras &cameras, const Point3 &point, double lambda=0.0, bool\n+diagonalDamping=false) const\n+Return Jacobians as JacobianFactorQ.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:369\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const std::string &s=\"\", const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n-print contents\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:83\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh\n-Concept-checking macros for geometric objects Each macro instantiates a concept\n-check structure,...\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:187\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n+LinearizationMode linearizationMode\n+How to linearize the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+double retriangulationThreshold\n+threshold to decide whether to re-triangulate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be\n+DegeneracyMode degeneracyMode\n+How to linearize the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+SmartProjectionFactor: triangulates point and keeps an estimate of it around.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\be_\bc_\bi_\bd_\be_\bI_\bf_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be\n+bool decideIfTriangulate(const Cameras &cameras) const\n+Check if the new linearization point is the same as the one used for previous\n+triangulation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > > createJacobianQFactor\n+(const Values &values, double lambda) const\n+Create JacobianFactorQ factor, takes values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:261\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras\n+&cameras, double lambda) const\n+Different (faster) way to compute a JacobianFactorSVD factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:267\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt\n+void computeJacobiansWithTriangulatedPoint(typename Base::FBlocks &Fs, Matrix\n+&E, Vector &b, const Cameras &cameras) const\n+Compute F, E only (called below in both vanilla and SVD versions) Assumes the\n+point has been computed...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:357\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bH_\be_\bs_\bs_\bi_\ba_\bn\n+virtual boost::shared_ptr< RegularHessianFactor< Base::Dim > >\n+linearizeToHessian(const Values &values, double lambda=0.0) const\n+Linearize to a Hessianfactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:277\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bO_\bu_\bt_\bl_\bi_\be_\br\n+bool isOutlier() const\n+return the outlier state\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:462\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE\n+bool triangulateAndComputeE(Matrix &E, const Values &values) const\n+Triangulate and compute derivative of error with respect to point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:349\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd\n+boost::shared_ptr< GaussianFactor > linearizeDamped(const Cameras &cameras,\n+const double lambda=0.0) const\n+Linearize to Gaussian Factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:299\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bF_\ba_\br_\bP_\bo_\bi_\bn_\bt\n+bool isFarPoint() const\n+return the farPoint state\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:465\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\br_\be_\bs_\bu_\bl_\bt_\b_\n+TriangulationResult result_\n+result from triangulateSafe\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< RegularHessianFactor< Base::Dim > > createHessianFactor\n+(const Cameras &cameras, const double lambda=0.0, bool diagonalDamping=false)\n+const\n+Create a Hessianfactor that is an approximation of error(p).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:199\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be\n+TriangulationResult triangulateSafe(const Cameras &cameras) const\n+Call gtsam::triangulateSafe iff we need to re-triangulate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+~SmartProjectionFactor() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &values) const override\n+Calculate total reprojection error.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:433\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bV_\ba_\bl_\bi_\bd\n+bool isValid() const\n+Is result valid?\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:453\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_\n+std::vector< Pose3, Eigen::aligned_allocator< Pose3 > >\n+cameraPosesTriangulation_\n+current triangulation poses\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE\n+bool triangulateAndComputeE(Matrix &E, const Cameras &cameras) const\n+Triangulate and compute derivative of error with respect to point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:338\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt\n+virtual boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > >\n+linearizeToImplicit(const Values &values, double lambda=0.0) const\n+Linearize to an Implicit Schur factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:283\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n+double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 >\n+externalPoint=boost::none) const\n+Calculate the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:411\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+virtual boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > >\n+linearizeToJacobian(const Values &values, double lambda=0.0) const\n+Linearize to a JacobianfactorQ.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:289\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bt_\be\n+bool isDegenerate() const\n+return the degenerate state\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:456\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n+bool triangulateAndComputeJacobians(typename Base::FBlocks &Fs, Matrix &E,\n+Vector &b, const Values &values) const\n+Version that takes values, and creates the point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:374\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba\n+CAMERA Camera\n+shorthand for a set of cameras\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > > createJacobianQFactor\n+(const Cameras &cameras, double lambda) const\n+Create JacobianFactorQ factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:251\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:470\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\bo_\bi_\bn_\bt\n+TriangulationResult point(const Values &values) const\n+COMPUTE the landmark.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:447\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+SmartProjectionFactor(const SharedNoiseModel &sharedNoiseModel, const\n+SmartProjectionParams ¶ms=SmartProjectionParams())\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bP_\bo_\bi_\bn_\bt_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba\n+bool isPointBehindCamera() const\n+return the cheirality status flag\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:459\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianFactor > linearize(const Values &values) const\n+override\n+linearize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:329\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD\n+bool triangulateAndComputeJacobiansSVD(typename Base::FBlocks &Fs, Matrix\n+&Enull, Vector &b, const Values &values) const\n+takes values\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:385\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn\n+Vector reprojectionErrorAfterTriangulation(const Values &values) const\n+Calculate vector of re-projection errors, before applying noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:396\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\bo_\bi_\bn_\bt\n+TriangulationResult point() const\n+return the landmark\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:442\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+bool triangulateForLinearize(const Cameras &cameras) const\n+Possibly re-triangulate before calculating Jacobians.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:193\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shorthand for a smart pointer to a factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+SmartProjectionFactor()\n+Default constructor, only for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd\n+boost::shared_ptr< GaussianFactor > linearizeDamped(const Values &values, const\n+double lambda=0.0) const\n+Linearize to Gaussian Factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:321\n+_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b._\bh\n+ * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01274.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01274.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/PoseRotationPrior.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/AntiFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,42 +96,38 @@\n \n \n \n
\n \n-
PoseRotationPrior.h File Reference
\n+
AntiFactor.h File Reference
\n
\n
\n \n-

Implements a prior on the rotation component of a pose. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n+\n+\n \n

\n Classes

class  gtsam::PoseRotationPrior< POSE >
class  gtsam::AntiFactor
 A class for downdating an existing factor from a graph. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Implements a prior on the rotation component of a pose.

\n-
Date
Jun 14, 2012
\n-
Author
Alex Cunningham
\n+
Author
Stephen Williams
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,26 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-PoseRotationPrior.h File Reference\n-Implements a prior on the rotation component of a pose. _\bM_\bo_\br_\be_\b._\b._\b.\n+AntiFactor.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b<_\b _\bP_\bO_\bS_\bE_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 A class for downdating an existing factor from a graph. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Implements a prior on the rotation component of a pose.\n- Date\n- Jun 14, 2012\n Author\n- Alex Cunningham\n+ Stephen Williams\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b._\bh\n+ * _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01274_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01274_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/PoseRotationPrior.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/AntiFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,146 +98,134 @@\n
No Matches
\n \n \n \n \n \n
\n-
PoseRotationPrior.h
\n+
AntiFactor.h
\n
\n
\n-Go to the documentation of this file.
1
\n-
10#pragma once
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-\n-\n-
14
\n-
15
\n-
16namespace gtsam {
\n+
16#pragma once
\n
17
\n-
18template<class POSE>
\n-
\n-\n-
20public:
\n-
21
\n-
22 typedef PoseRotationPrior<POSE> This;
\n-\n-
24 typedef POSE Pose;
\n-
25 typedef typename POSE::Translation Translation;
\n-
26 typedef typename POSE::Rotation Rotation;
\n-
27
\n-
28 GTSAM_CONCEPT_POSE_TYPE(Pose)
\n-
29 GTSAM_CONCEPT_GROUP_TYPE(Pose)
\n-
30 GTSAM_CONCEPT_LIE_TYPE(Rotation)
\n-
31
\n-
32 // Get dimensions of pose and rotation type at compile time
\n-
33 static const int xDim = FixedDimension<POSE>::value;
\n-\n-
35
\n-
36protected:
\n-
37
\n-
38 Rotation measured_;
\n-
39
\n-
40public:
\n-
41
\n-\n-
44
\n-
\n-
46 PoseRotationPrior(Key key, const Rotation& rot_z, const SharedNoiseModel& model)
\n-
47 : Base(model, key), measured_(rot_z) {}
\n-
\n+
18#include <ostream>
\n+
19
\n+\n+\n+
22
\n+
23namespace gtsam {
\n+
24
\n+
\n+\n+
32
\n+
33 private:
\n+
34
\n+
35 typedef AntiFactor This;
\n+
36 typedef NonlinearFactor Base;
\n+
37 typedef NonlinearFactor::shared_ptr sharedFactor;
\n+
38
\n+
39 sharedFactor factor_;
\n+
40
\n+
41 public:
\n+
42
\n+
43 // shorthand for a smart pointer to a factor
\n+
44 typedef boost::shared_ptr<AntiFactor> shared_ptr;
\n+
45
\n+\n
48
\n-
\n-
50 PoseRotationPrior(Key key, const POSE& pose_z, const SharedNoiseModel& model)
\n-
51 : Base(model, key), measured_(pose_z.rotation()) {}
\n-
\n-
52
\n-
53 ~PoseRotationPrior() override {}
\n-
54
\n-
\n-
56 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
57 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
58 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n-
\n-
59
\n-
60 // access
\n-
61 const Rotation& measured() const { return measured_; }
\n-
62
\n-
63 // testable
\n-
64
\n-
\n-
66 bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
\n-
67 const This *e = dynamic_cast<const This*> (&expected);
\n-
68 return e != nullptr && Base::equals(*e, tol) && measured_.equals(e->measured_, tol);
\n-
69 }
\n-
\n-
70
\n-
\n-
72 void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
73 Base::print(s + "PoseRotationPrior", keyFormatter);
\n-
74 measured_.print("Measured Rotation");
\n-
75 }
\n-
\n-
76
\n-
\n-
78 Vector evaluateError(const Pose& pose, boost::optional<Matrix&> H = boost::none) const override {
\n-
79 const Rotation& newR = pose.rotation();
\n-
80 if (H) {
\n-
81 *H = Matrix::Zero(rDim, xDim);
\n-
82 std::pair<size_t, size_t> rotInterval = POSE::rotationInterval();
\n-
83 (*H).middleCols(rotInterval.first, rDim).setIdentity(rDim, rDim);
\n-
84 }
\n-
85
\n-
86 return measured_.localCoordinates(newR);
\n-
87 }
\n-
\n-
88
\n-
89private:
\n+
50 AntiFactor(NonlinearFactor::shared_ptr factor) : Base(factor->keys()), factor_(factor) {}
\n+
51
\n+
52 ~AntiFactor() override {}
\n+
53
\n+
\n+
55 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
56 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
57 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n+
\n+
58
\n+
\n+
62 void print(const std::string& s, const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
63 std::cout << s << "AntiFactor version of:" << std::endl;
\n+
64 factor_->print(s, keyFormatter);
\n+
65 }
\n+
\n+
66
\n+
\n+
68 bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
\n+
69 const This *e = dynamic_cast<const This*> (&expected);
\n+
70 return e != nullptr && Base::equals(*e, tol) && this->factor_->equals(*e->factor_, tol);
\n+
71 }
\n+
\n+
72
\n+
80 double error(const Values& c) const override { return -factor_->error(c); }
\n+
81
\n+
83 size_t dim() const override { return factor_->dim(); }
\n+
84
\n+
89 bool active(const Values& c) const override { return factor_->active(c); }
\n
90
\n-\n-
93 template<class ARCHIVE>
\n-
94 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
95 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
96 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n-
97 boost::serialization::base_object<Base>(*this));
\n-
98 ar & BOOST_SERIALIZATION_NVP(measured_);
\n-
99 }
\n-
100};
\n-
\n+
\n+
97 boost::shared_ptr<GaussianFactor> linearize(const Values& c) const override {
\n+
98
\n+
99 // Generate the linearized factor from the contained nonlinear factor
\n+
100 GaussianFactor::shared_ptr gaussianFactor = factor_->linearize(c);
\n
101
\n-
102} // \\namespace gtsam
\n-
103
\n-
104
\n+
102 // return the negated version of the factor
\n+
103 return gaussianFactor->negate();
\n+
104 }
\n+
\n
105
\n
106
\n-
Non-linear factor base classes.
\n+
107 private:
\n+
108
\n+\n+
111 template<class ARCHIVE>
\n+
112 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
113 ar & boost::serialization::make_nvp("AntiFactor",
\n+
114 boost::serialization::base_object<Base>(*this));
\n+
115 ar & BOOST_SERIALIZATION_NVP(factor_);
\n+
116 }
\n+
117 }; // \\class AntiFactor
\n+
\n+
118
\n+
119}
\n+
A factor with a quadratic error function - a Gaussian.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n-
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n-
Definition PoseRotationPrior.h:19
\n-
PoseRotationPrior(Key key, const Rotation &rot_z, const SharedNoiseModel &model)
standard constructor
Definition PoseRotationPrior.h:46
\n-
PoseRotationPrior(Key key, const POSE &pose_z, const SharedNoiseModel &model)
Constructor that pulls the translation from an incoming POSE.
Definition PoseRotationPrior.h:50
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition PoseRotationPrior.h:56
\n-
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
equals specialized to this factor
Definition PoseRotationPrior.h:66
\n-
PoseRotationPrior()
default constructor - only use for serialization
Definition PoseRotationPrior.h:43
\n-
Vector evaluateError(const Pose &pose, boost::optional< Matrix & > H=boost::none) const override
h(x)-z
Definition PoseRotationPrior.h:78
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print contents
Definition PoseRotationPrior.h:72
\n-
friend class boost::serialization::access
Serialization function.
Definition PoseRotationPrior.h:92
\n-
Concept-checking macros for geometric objects Each macro instantiates a concept check structure,...
\n+
virtual bool equals(const NonlinearFactor &f, double tol=1e-9) const
Check if two factors are equal.
Definition NonlinearFactor.cpp:47
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
A class for downdating an existing factor from a graph.
Definition AntiFactor.h:31
\n+
AntiFactor(NonlinearFactor::shared_ptr factor)
constructor - Creates the equivalent AntiFactor from an existing factor
Definition AntiFactor.h:50
\n+
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
equals
Definition AntiFactor.h:68
\n+
AntiFactor()
default constructor - only use for serialization
Definition AntiFactor.h:47
\n+
boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override
Linearize to a GaussianFactor.
Definition AntiFactor.h:97
\n+
bool active(const Values &c) const override
Checks whether this factor should be used based on a set of values.
Definition AntiFactor.h:89
\n+
size_t dim() const override
get the dimension of the factor (same as the original factor)
Definition AntiFactor.h:83
\n+
void print(const std::string &s, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
implement functions needed for Testable
Definition AntiFactor.h:62
\n+
double error(const Values &c) const override
implement functions needed to derive from Factor
Definition AntiFactor.h:80
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition AntiFactor.h:55
\n+
friend class boost::serialization::access
Serialization function.
Definition AntiFactor.h:110
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,186 +1,173 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PoseRotationPrior.h\n+AntiFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1\n-10#pragma once\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+7\n+8 * See LICENSE for the license information\n+9\n+10 * -------------------------------------------------------------------------\n+- */\n 11\n-12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh>\n-13#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-14\n-15\n-16namespace _\bg_\bt_\bs_\ba_\bm {\n+16#pragma once\n 17\n-18template\n-_\b1_\b9class _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-20public:\n-21\n-22 typedef _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b<_\bP_\bO_\bS_\bE_\b> This;\n-23 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bS_\bE_\b> _\bB_\ba_\bs_\be;\n-24 typedef POSE Pose;\n-25 typedef typename POSE::Translation Translation;\n-26 typedef typename POSE::Rotation Rotation;\n-27\n-28 GTSAM_CONCEPT_POSE_TYPE(Pose)\n-29 GTSAM_CONCEPT_GROUP_TYPE(Pose)\n-30 GTSAM_CONCEPT_LIE_TYPE(Rotation)\n-31\n-32 // Get dimensions of pose and rotation type at compile time\n-33 static const int xDim = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bP_\bO_\bS_\bE_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n-34 static const int rDim = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bP_\bO_\bS_\bE_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n-35\n-36protected:\n-37\n-38 Rotation measured_;\n-39\n-40public:\n-41\n-_\b4_\b3 _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br() {}\n-44\n-_\b4_\b6 _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Rotation& rot_z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n-model)\n-47 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by), measured_(rot_z) {}\n+18#include \n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+_\b3_\b1 class _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n+32\n+33 private:\n+34\n+35 typedef _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+36 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n+37 typedef NonlinearFactor::shared_ptr sharedFactor;\n+38\n+39 sharedFactor factor_;\n+40\n+41 public:\n+42\n+43 // shorthand for a smart pointer to a factor\n+44 typedef boost::shared_ptr shared_ptr;\n+45\n+_\b4_\b7 _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br() {}\n 48\n-_\b5_\b0 _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const POSE& pose_z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n-model)\n-51 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by), measured_(pose_z.rotation()) {}\n-52\n-53 _\b~_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br() override {}\n-54\n-_\b5_\b6 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-57 return boost::static_pointer_cast(\n-58 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }\n-59\n-60 // access\n-61 const Rotation& measured() const { return measured_; }\n-62\n-63 // testable\n-64\n-_\b6_\b6 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol=1e-9) const override\n-{\n-67 const This *e = dynamic_cast (&expected);\n-68 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) && measured_.equals(e-\n->measured_, tol);\n-69 }\n-70\n-_\b7_\b2 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+_\b5_\b0 _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br(NonlinearFactor::shared_ptr factor) : _\bB_\ba_\bs_\be(factor->_\bk_\be_\by_\bs()),\n+factor_(factor) {}\n+51\n+52 _\b~_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+53\n+_\b5_\b5 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+56 return boost::static_pointer_cast(\n+57 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this))); }\n+58\n+_\b6_\b2 void _\bp_\br_\bi_\bn_\bt(const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n DefaultKeyFormatter) const override {\n-73 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s + \"PoseRotationPrior\", keyFormatter);\n-74 measured_.print(\"Measured Rotation\");\n-75 }\n-76\n-_\b7_\b8 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Pose& pose, boost::optional H = boost::\n-none) const override {\n-79 const Rotation& newR = pose.rotation();\n-80 if (H) {\n-81 *H = Matrix::Zero(rDim, xDim);\n-82 std::pair rotInterval = POSE::rotationInterval();\n-83 (*H).middleCols(rotInterval.first, rDim).setIdentity(rDim, rDim);\n-84 }\n-85\n-86 return measured_.localCoordinates(newR);\n-87 }\n-88\n-89private:\n+63 std::cout << s << \"AntiFactor version of:\" << std::endl;\n+64 factor_->print(s, keyFormatter);\n+65 }\n+66\n+_\b6_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol=1e-9) const override\n+{\n+69 const _\bT_\bh_\bi_\bs *e = dynamic_cast (&expected);\n+70 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) && this->factor_->_\be_\bq_\bu_\ba_\bl_\bs(*e-\n+>factor_, tol);\n+71 }\n+72\n+_\b8_\b0 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override { return -factor_->error(c); }\n+81\n+_\b8_\b3 size_t _\bd_\bi_\bm() const override { return factor_->dim(); }\n+84\n+_\b8_\b9 bool _\ba_\bc_\bt_\bi_\bv_\be(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override { return factor_->active(c); }\n 90\n-_\b9_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-93 template\n-94 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-95 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility\n-96 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n-97 boost::serialization::base_object(*this));\n-98 ar & BOOST_SERIALIZATION_NVP(measured_);\n-99 }\n-100};\n+_\b9_\b7 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override\n+{\n+98\n+99 // Generate the linearized factor from the contained nonlinear factor\n+100 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br gaussianFactor = factor_->linearize(c);\n 101\n-102} // \\namespace gtsam\n-103\n-104\n+102 // return the negated version of the factor\n+103 return gaussianFactor->negate();\n+104 }\n 105\n 106\n+107 private:\n+108\n+_\b1_\b1_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+111 template\n+112 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+113 ar & boost::serialization::make_nvp(\"AntiFactor\",\n+114 boost::serialization::base_object(*this));\n+115 ar & BOOST_SERIALIZATION_NVP(factor_);\n+116 }\n+117 }; // \\class AntiFactor\n+118\n+119}\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+A factor with a quadratic error function - a Gaussian.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-Give fixed size dimension of a type, fails at compile time if dynamic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bP_\bO_\bS_\bE_\b _\b>_\b:_\b:_\bk_\be_\by\n-Key key() const\n-Returns a key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:19\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-PoseRotationPrior(Key key, const Rotation &rot_z, const SharedNoiseModel\n-&model)\n-standard constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-PoseRotationPrior(Key key, const POSE &pose_z, const SharedNoiseModel &model)\n-Constructor that pulls the translation from an incoming POSE.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+virtual bool equals(const NonlinearFactor &f, double tol=1e-9) const\n+Check if two factors are equal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br\n+A class for downdating an existing factor from a graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br\n+AntiFactor(NonlinearFactor::shared_ptr factor)\n+constructor - Creates the equivalent AntiFactor from an existing factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n-equals specialized to this factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-PoseRotationPrior()\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br\n+AntiFactor()\n default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Pose &pose, boost::optional< Matrix & > H=boost::\n-none) const override\n-h(x)-z\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override\n+Linearize to a GaussianFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n+bool active(const Values &c) const override\n+Checks whether this factor should be used based on a set of values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+get the dimension of the factor (same as the original factor)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s, const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n-print contents\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+implement functions needed for Testable\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &c) const override\n+implement functions needed to derive from Factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n friend class boost::serialization::access\n Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:92\n-_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh\n-Concept-checking macros for geometric objects Each macro instantiates a concept\n-check structure,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:110\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b._\bh\n+ * _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01277.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01277.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionPoseFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/lago.h File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,186 @@\n \n \n \n \n \n
\n \n-
SmartProjectionPoseFactor.h File Reference
\n+Namespaces |\n+Typedefs |\n+Functions
\n+
lago.h File Reference
\n \n
\n \n-

Smart factor on poses, assuming camera calibration is fixed. \n+

Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph Optimization). \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::SmartProjectionPoseFactor< CALIBRATION >
 If you are using the factor, please cite: L. More...
 
struct  gtsam::traits< SmartProjectionPoseFactor< CALIBRATION > >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+

\n+Typedefs

\n+typedef std::map< Key, double > gtsam::lago::key2doubleMap
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

\n+key2doubleMap gtsam::lago::computeThetasToRoot (const key2doubleMap &deltaThetaMap, const PredecessorMap< Key > &tree)
 Compute the cumulative orientations (without wrapping) for all nodes wrt the root (root has zero orientation).
 
void gtsam::lago::getSymbolicGraph (std::vector< size_t > &spanningTreeIds, std::vector< size_t > &chordsIds, key2doubleMap &deltaThetaMap, const PredecessorMap< Key > &tree, const NonlinearFactorGraph &g)
 Given a factor graph \"g\", and a spanning tree \"tree\", select the nodes belonging to the tree and to g, and stores the factor slots corresponding to edges in the tree and to chordsIds wrt this tree.
 
GaussianFactorGraph gtsam::lago::buildLinearOrientationGraph (const std::vector< size_t > &spanningTreeIds, const std::vector< size_t > &chordsIds, const NonlinearFactorGraph &g, const key2doubleMap &orientationsToRoot, const PredecessorMap< Key > &tree)
 Linear factor graph with regularized orientation measurements.
 
\n+VectorValues gtsam::lago::initializeOrientations (const NonlinearFactorGraph &graph, bool useOdometricPath=true)
 LAGO: Return the orientations of the Pose2 in a generic factor graph.
 
\n+Values gtsam::lago::initialize (const NonlinearFactorGraph &graph, bool useOdometricPath=true)
 Return the values for the Pose2 in a generic factor graph.
 
\n+Values gtsam::lago::initialize (const NonlinearFactorGraph &graph, const Values &initialGuess)
 Only correct the orientation part in initialGuess.
 
\n

Detailed Description

\n-

Smart factor on poses, assuming camera calibration is fixed.

\n+

Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph Optimization).

\n
Author
Luca Carlone
\n
\n-Chris Beall
\n+Frank Dellaert
\n+
Date
May 14, 2014
\n+

see papers:

\n+

L. Carlone, R. Aragues, J. Castellanos, and B. Bona, A fast and accurate approximation for planar pose graph optimization, IJRR, 2014.

\n+

L. Carlone, R. Aragues, J.A. Castellanos, and B. Bona, A linear approximation for graph-based simultaneous localization and mapping, RSS, 2011.

\n+
Parameters
\n+ \n+ \n+
graphnonlinear factor graph (can include arbitrary factors but we assume that there is a subgraph involving Pose2 and betweenFactors). Also in the current version we assume that there is an odometric spanning path (x0->x1, x1->x2, etc) and a prior on x0. This assumption can be relaxed by using the extra argument useOdometricPath = false, although this part of code is not stable yet.
\n+
\n+
\n+
Returns
Values: initial guess from LAGO (only pose2 are initialized)
\n+
Author
Luca Carlone
\n
\n-Zsolt Kira
\n-
\n+Frank Dellaert \n+
Date
May 14, 2014
\n+

Function Documentation

\n+\n+

◆ buildLinearOrientationGraph()

\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+
GTSAM_EXPORT GaussianFactorGraph gtsam::lago::buildLinearOrientationGraph (const vector< size_t > & spanningTreeIds,
const vector< size_t > & chordsIds,
const NonlinearFactorGraphg,
const key2doubleMap & orientationsToRoot,
const PredecessorMap< Key > & tree 
)
\n+
\n+\n+

Linear factor graph with regularized orientation measurements.

\n+

cout << \"REG: key1= \" << DefaultKeyFormatter(key1) << \" key2= \" << DefaultKeyFormatter(key2) << endl;

\n+\n+
\n+
\n+\n+

◆ getSymbolicGraph()

\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+
GTSAM_EXPORT void gtsam::lago::getSymbolicGraph (std::vector< size_t > & spanningTreeIds,
std::vector< size_t > & chordsIds,
key2doubleMap & deltaThetaMap,
const PredecessorMap< Key > & tree,
const NonlinearFactorGraphg 
)
\n+
\n+\n+

Given a factor graph \"g\", and a spanning tree \"tree\", select the nodes belonging to the tree and to g, and stores the factor slots corresponding to edges in the tree and to chordsIds wrt this tree.

\n+

Also it computes deltaThetaMap which is a fast way to encode relative orientations along the tree: for a node key2, s.t. tree[key2]=key1, the value deltaThetaMap[key2] is relative orientation theta[key2]-theta[key1]

\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,114 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SmartProjectionPoseFactor.h File Reference\n-Smart factor on poses, assuming camera calibration is fixed. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+lago.h File Reference\n+Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph\n+Optimization). _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n-\u00a0 If you are using the factor, please cite: L. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef std::map< _\bK_\be_\by, double >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bla\bag\bgo\bo:\b::\b:k\bke\bey\by2\b2d\bdo\bou\bub\bbl\ble\beM\bMa\bap\bp\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ key2doubleMap\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bla\bag\bgo\bo:\b::\b:c\bco\bom\bmp\bpu\but\bte\beT\bTh\bhe\bet\bta\bas\bsT\bTo\boR\bRo\boo\bot\bt (const key2doubleMap\n+ &deltaThetaMap, const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< _\bK_\be_\by > &tree)\n+\u00a0 Compute the cumulative orientations (without wrapping) for\n+ all nodes wrt the root (root has zero orientation).\n+\u00a0\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\ba_\bg_\bo_\b:_\b:_\bg_\be_\bt_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bG_\br_\ba_\bp_\bh (std::vector< size_t >\n+ &spanningTreeIds, std::vector< size_t > &chordsIds,\n+ key2doubleMap &deltaThetaMap, const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< _\bK_\be_\by >\n+ &tree, const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &g)\n+ Given a factor graph \"g\", and a spanning tree \"tree\",\n+\u00a0 select the nodes belonging to the tree and to g, and\n+ stores the factor slots corresponding to edges in the tree\n+ and to chordsIds wrt this tree.\n+\u00a0\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\ba_\bg_\bo_\b:_\b:_\bb_\bu_\bi_\bl_\bd_\bL_\bi_\bn_\be_\ba_\br_\bO_\br_\bi_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\bG_\br_\ba_\bp_\bh (const std::\n+ vector< size_t > &spanningTreeIds, const std::vector<\n+ size_t > &chordsIds, const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &g, const\n+ key2doubleMap &orientationsToRoot, const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp<\n+ _\bK_\be_\by > &tree)\n+\u00a0 Linear factor graph with regularized orientation\n+ measurements.\n+\u00a0\n+ _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bla\bag\bgo\bo:\b::\b:i\bin\bni\bit\bti\bia\bal\bli\biz\bze\beO\bOr\bri\bie\ben\bnt\bta\bat\bti\bio\bon\bns\bs (const\n+ _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph, bool useOdometricPath=true)\n+\u00a0 LAGO: Return the orientations of the _\bP_\bo_\bs_\be_\b2 in a generic\n+ factor graph.\n+\u00a0\n+ _\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bla\bag\bgo\bo:\b::\b:i\bin\bni\bit\bti\bia\bal\bli\biz\bze\be (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+ &graph, bool useOdometricPath=true)\n+\u00a0 Return the values for the _\bP_\bo_\bs_\be_\b2 in a generic factor graph.\n+\u00a0\n+ _\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\bla\bag\bgo\bo:\b::\b:i\bin\bni\bit\bti\bia\bal\bli\biz\bze\be (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+ &graph, const _\bV_\ba_\bl_\bu_\be_\bs &initialGuess)\n+\u00a0 Only correct the orientation part in initialGuess.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Smart factor on poses, assuming camera calibration is fixed.\n+Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph\n+Optimization).\n+ Author\n+ Luca Carlone\n+ Frank Dellaert\n+ Date\n+ May 14, 2014\n+see papers:\n+L. Carlone, R. Aragues, J. Castellanos, and B. Bona, A fast and accurate\n+approximation for planar pose graph optimization, IJRR, 2014.\n+L. Carlone, R. Aragues, J.A. Castellanos, and B. Bona, A linear approximation\n+for graph-based simultaneous localization and mapping, RSS, 2011.\n+ Parameters\n+ nonlinear factor graph (can include arbitrary factors but we assume\n+ that there is a subgraph involving Pose2 and betweenFactors). Also\n+ in the current version we assume that there is an odometric\n+ graph spanning path (x0->x1, x1->x2, etc) and a prior on x0. This\n+ assumption can be relaxed by using the extra argument\n+ useOdometricPath = false, although this part of code is not stable\n+ yet.\n+ Returns\n+ _\bV_\ba_\bl_\bu_\be_\bs: initial guess from LAGO (only pose2 are initialized)\n Author\n Luca Carlone\n- Chris Beall\n- Zsolt Kira\n+ Frank Dellaert\n+ Date\n+ May 14, 2014\n+*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0b\bbu\bui\bil\bld\bdL\bLi\bin\bne\bea\bar\brO\bOr\bri\bie\ben\bnt\bta\bat\bti\bio\bon\bnG\bGr\bra\bap\bph\bh(\b()\b) *\b**\b**\b**\b**\b*\n+GTSAM_EXPORT\n+GaussianFactorGraph gtsam:: ( const vector< size_t > &\u00a0 s\bsp\bpa\ban\bnn\bni\bin\bng\bgT\bTr\bre\bee\beI\bId\bds\bs,\n+lago::\n+buildLinearOrientationGraph\n+ const vector< size_t > &\u00a0 c\bch\bho\bor\brd\bds\bsI\bId\bds\bs,\n+ const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &\u00a0 g\bg,\n+ const key2doubleMap &\u00a0 o\bor\bri\bie\ben\bnt\bta\bat\bti\bio\bon\bns\bsT\bTo\boR\bRo\boo\bot\bt,\n+ const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< _\bK_\be_\by > t\btr\bre\bee\be\u00a0\n+ &\u00a0\n+ )\n+Linear factor graph with regularized orientation measurements.\n+cout << \"REG: key1= \" << DefaultKeyFormatter(key1) << \" key2= \" <<\n+DefaultKeyFormatter(key2) << endl;\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0g\bge\bet\btS\bSy\bym\bmb\bbo\bol\bli\bic\bcG\bGr\bra\bap\bph\bh(\b()\b) *\b**\b**\b**\b**\b*\n+GTSAM_EXPORT void gtsam:: ( std::vector< size_t > &\u00a0 s\bsp\bpa\ban\bnn\bni\bin\bng\bgT\bTr\bre\bee\beI\bId\bds\bs,\n+lago::getSymbolicGraph\n+ std::vector< size_t > &\u00a0 c\bch\bho\bor\brd\bds\bsI\bId\bds\bs,\n+ key2doubleMap &\u00a0 d\bde\bel\blt\bta\baT\bTh\bhe\bet\bta\baM\bMa\bap\bp,\n+ const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< _\bK_\be_\by > &\u00a0 t\btr\bre\bee\be,\n+ const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &\u00a0 g\bg\u00a0\n+ )\n+Given a factor graph \"g\", and a spanning tree \"tree\", select the nodes\n+belonging to the tree and to g, and stores the factor slots corresponding to\n+edges in the tree and to chordsIds wrt this tree.\n+Also it computes deltaThetaMap which is a fast way to encode relative\n+orientations along the tree: for a node key2, s.t. tree[key2]=key1, the value\n+deltaThetaMap[key2] is relative orientation theta[key2]-theta[key1]\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bl_\ba_\bg_\bo_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01277_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01277_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionPoseFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/lago.h Source File\n \n \n \n \n \n \n \n@@ -98,176 +98,75 @@\n
No Matches
\n \n \n \n \n \n
\n-
SmartProjectionPoseFactor.h
\n+
lago.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-
23
\n-
24namespace gtsam {
\n-
44template <class CALIBRATION>
\n-
\n-\n-
46 : public SmartProjectionFactor<PinholePose<CALIBRATION> > {
\n-
47 private:
\n-
48 typedef PinholePose<CALIBRATION> Camera;
\n-\n-\n-
51
\n-
52protected:
\n+
35#pragma once
\n+
36
\n+\n+\n+\n+\n+
41
\n+
42namespace gtsam {
\n+
43namespace lago {
\n+
44
\n+
45typedef std::map<Key, double> key2doubleMap;
\n+
46
\n+
51GTSAM_EXPORT key2doubleMap computeThetasToRoot(
\n+
52 const key2doubleMap& deltaThetaMap, const PredecessorMap<Key>& tree);
\n
53
\n-
54 boost::shared_ptr<CALIBRATION> K_;
\n-
55
\n-
56public:
\n-
57
\n-
59 typedef boost::shared_ptr<This> shared_ptr;
\n-
60
\n-\n-
65
\n-
\n-\n-
73 const SharedNoiseModel& sharedNoiseModel,
\n-
74 const boost::shared_ptr<CALIBRATION> K,
\n-\n-
76 : Base(sharedNoiseModel, params), K_(K) {
\n-
77 }
\n-
\n-
78
\n-
\n-\n-
87 const SharedNoiseModel& sharedNoiseModel,
\n-
88 const boost::shared_ptr<CALIBRATION> K,
\n-
89 const boost::optional<Pose3> body_P_sensor,
\n-\n-
91 : SmartProjectionPoseFactor(sharedNoiseModel, K, params) {
\n-
92 this->body_P_sensor_ = body_P_sensor;
\n-
93 }
\n-
\n-
94
\n-
\n-\n-
97 }
\n-
\n-
98
\n-
\n-
104 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
105 DefaultKeyFormatter) const override {
\n-
106 std::cout << s << "SmartProjectionPoseFactor, z = \\n ";
\n-
107 Base::print("", keyFormatter);
\n-
108 }
\n-
\n-
109
\n-
\n-
111 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n-
112 const This *e = dynamic_cast<const This*>(&p);
\n-
113 return e && Base::equals(p, tol);
\n-
114 }
\n-
\n-
115
\n-
\n-
119 double error(const Values& values) const override {
\n-
120 if (this->active(values)) {
\n-
121 return this->totalReprojectionError(cameras(values));
\n-
122 } else { // else of active flag
\n-
123 return 0.0;
\n-
124 }
\n-
125 }
\n-
\n-
126
\n-
\n-
128 inline const boost::shared_ptr<CALIBRATION> calibration() const {
\n-
129 return K_;
\n-
130 }
\n-
\n-
131
\n-
\n-
138 typename Base::Cameras cameras(const Values& values) const override {
\n-
139 typename Base::Cameras cameras;
\n-
140 for (const Key& k : this->keys_) {
\n-
141 const Pose3 world_P_sensor_k =
\n-
142 Base::body_P_sensor_ ? values.at<Pose3>(k) * *Base::body_P_sensor_
\n-
143 : values.at<Pose3>(k);
\n-
144 cameras.emplace_back(world_P_sensor_k, K_);
\n-
145 }
\n-
146 return cameras;
\n-
147 }
\n-
\n-
148
\n-
149 private:
\n-
150
\n-\n-
153 template<class ARCHIVE>
\n-
154 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
155 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
156 ar & BOOST_SERIALIZATION_NVP(K_);
\n-
157 }
\n-
158};
\n-
\n-
159// end of class declaration
\n-
160
\n-
162template<class CALIBRATION>
\n-
\n-
163struct traits<SmartProjectionPoseFactor<CALIBRATION> > : public Testable<
\n-
164 SmartProjectionPoseFactor<CALIBRATION> > {
\n-
165};
\n-
\n-
166
\n-
167} // \\ namespace gtsam
\n-
Smart factor on cameras (pose + calibration)
\n+
62GTSAM_EXPORT void getSymbolicGraph(
\n+
63/*OUTPUTS*/std::vector<size_t>& spanningTreeIds, std::vector<size_t>& chordsIds,
\n+
64 key2doubleMap& deltaThetaMap,
\n+
65 /*INPUTS*/const PredecessorMap<Key>& tree, const NonlinearFactorGraph& g);
\n+
66
\n+
68GTSAM_EXPORT GaussianFactorGraph buildLinearOrientationGraph(
\n+
69 const std::vector<size_t>& spanningTreeIds,
\n+
70 const std::vector<size_t>& chordsIds, const NonlinearFactorGraph& g,
\n+
71 const key2doubleMap& orientationsToRoot, const PredecessorMap<Key>& tree);
\n+
72
\n+
74GTSAM_EXPORT VectorValues initializeOrientations(
\n+
75 const NonlinearFactorGraph& graph, bool useOdometricPath = true);
\n+
76
\n+
78GTSAM_EXPORT Values initialize(const NonlinearFactorGraph& graph,
\n+
79 bool useOdometricPath = true);
\n+
80
\n+
82GTSAM_EXPORT Values initialize(const NonlinearFactorGraph& graph,
\n+
83 const Values& initialGuess);
\n+
84
\n+
85} // end of namespace lago
\n+
86} // end of namespace gtsam
\n+
Graph algorithm using boost library.
\n+
Linear Factor Graph where all factors are Gaussians.
\n+
Factor Graph Values.
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A pinhole camera class that has a Pose3 and a fixed Calibration.
Definition PinholePose.h:243
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n-
boost::optional< Pose3 > body_P_sensor_
Pose of the camera in the body frame.
Definition SmartFactorBase.h:82
\n-
Definition SmartFactorParams.h:42
\n-
SmartProjectionFactor: triangulates point and keeps an estimate of it around.
Definition SmartProjectionFactor.h:45
\n-
double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 > externalPoint=boost::none) const
Calculate the error of the factor.
Definition SmartProjectionFactor.h:411
\n-
If you are using the factor, please cite: L.
Definition SmartProjectionPoseFactor.h:46
\n-
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartProjectionPoseFactor.h:111
\n-
SmartProjectionPoseFactor(const SharedNoiseModel &sharedNoiseModel, const boost::shared_ptr< CALIBRATION > K, const SmartProjectionParams &params=SmartProjectionParams())
Constructor.
Definition SmartProjectionPoseFactor.h:72
\n-
Base::Cameras cameras(const Values &values) const override
Collect all cameras involved in this factor.
Definition SmartProjectionPoseFactor.h:138
\n-
double error(const Values &values) const override
error calculates the error of the factor.
Definition SmartProjectionPoseFactor.h:119
\n-
boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor
Definition SmartProjectionPoseFactor.h:59
\n-
boost::shared_ptr< CALIBRATION > K_
calibration object (one for all cameras)
Definition SmartProjectionPoseFactor.h:54
\n-
~SmartProjectionPoseFactor() override
Virtual destructor.
Definition SmartProjectionPoseFactor.h:96
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartProjectionPoseFactor.h:104
\n-
const boost::shared_ptr< CALIBRATION > calibration() const
return calibration shared pointers
Definition SmartProjectionPoseFactor.h:128
\n-
SmartProjectionPoseFactor(const SharedNoiseModel &sharedNoiseModel, const boost::shared_ptr< CALIBRATION > K, const boost::optional< Pose3 > body_P_sensor, const SmartProjectionParams &params=SmartProjectionParams())
Constructor.
Definition SmartProjectionPoseFactor.h:86
\n-
friend class boost::serialization::access
Serialization function.
Definition SmartProjectionPoseFactor.h:152
\n-
SmartProjectionPoseFactor()
Default constructor, only for serialization.
Definition SmartProjectionPoseFactor.h:64
\n+
The Factor::error simply extracts the.
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,236 +1,77 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SmartProjectionPoseFactor.h\n+lago.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-44template \n-_\b4_\b5class _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-46 : public _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br > {\n-47 private:\n-48 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> Camera;\n-49 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\ba_\bm_\be_\br_\ba_\b> Base;\n-50 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> This;\n-51\n-52protected:\n+35#pragma once\n+36\n+37#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+38#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+39#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+40#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bg_\br_\ba_\bp_\bh_\b._\bh>\n+41\n+42namespace _\bg_\bt_\bs_\ba_\bm {\n+43namespace lago {\n+44\n+45typedef std::map key2doubleMap;\n+46\n+51GTSAM_EXPORT key2doubleMap computeThetasToRoot(\n+52 const key2doubleMap& deltaThetaMap, const PredecessorMap& tree);\n 53\n-_\b5_\b4 boost::shared_ptr _\bK_\b_;\n-55\n-56public:\n-57\n-_\b5_\b9 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-60\n-_\b6_\b4 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n-65\n-_\b7_\b2 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(\n-73 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& sharedNoiseModel,\n-74 const boost::shared_ptr K,\n-75 const _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& params = _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs())\n-76 : Base(sharedNoiseModel, params), _\bK_\b_(K) {\n-77 }\n-78\n-_\b8_\b6 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(\n-87 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& sharedNoiseModel,\n-88 const boost::shared_ptr K,\n-89 const boost::optional body_P_sensor,\n-90 const _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& params = _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs())\n-91 : _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(sharedNoiseModel, K, params) {\n-92 this->_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_ = body_P_sensor;\n-93 }\n-94\n-_\b9_\b6 _\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() override {\n-97 }\n-98\n-_\b1_\b0_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-105 DefaultKeyFormatter) const override {\n-106 std::cout << s << \"SmartProjectionPoseFactor, z = \\n \";\n-107 Base::print(\"\", keyFormatter);\n-108 }\n-109\n-_\b1_\b1_\b1 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n-112 const This *e = dynamic_cast(&p);\n-113 return e && Base::equals(p, tol);\n-114 }\n-115\n-_\b1_\b1_\b9 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n-120 if (this->_\ba_\bc_\bt_\bi_\bv_\be(values)) {\n-121 return this->_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs(values));\n-122 } else { // else of active flag\n-123 return 0.0;\n-124 }\n-125 }\n-126\n-_\b1_\b2_\b8 inline const boost::shared_ptr _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n-129 return _\bK_\b_;\n-130 }\n-131\n-_\b1_\b3_\b8 typename Base::Cameras _\bc_\ba_\bm_\be_\br_\ba_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n-139 typename Base::Cameras _\bc_\ba_\bm_\be_\br_\ba_\bs;\n-140 for (const _\bK_\be_\by& k : this->_\bk_\be_\by_\bs_\b_) {\n-141 const _\bP_\bo_\bs_\be_\b3 world_P_sensor_k =\n-142 Base::body_P_sensor_ ? values._\ba_\bt<_\bP_\bo_\bs_\be_\b3>(k) * *Base::body_P_sensor_\n-143 : values._\ba_\bt<_\bP_\bo_\bs_\be_\b3>(k);\n-144 _\bc_\ba_\bm_\be_\br_\ba_\bs.emplace_back(world_P_sensor_k, _\bK_\b_);\n-145 }\n-146 return _\bc_\ba_\bm_\be_\br_\ba_\bs;\n-147 }\n-148\n-149 private:\n-150\n-_\b1_\b5_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-153 template\n-154 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-155 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n-156 ar & BOOST_SERIALIZATION_NVP(_\bK_\b_);\n-157 }\n-158};\n-159// end of class declaration\n-160\n-162template\n-_\b1_\b6_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n-164 SmartProjectionPoseFactor > {\n-165};\n-166\n-167} // \\ namespace gtsam\n-_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Smart factor on cameras (pose + calibration)\n+62GTSAM_EXPORT void getSymbolicGraph(\n+63/*OUTPUTS*/std::vector& spanningTreeIds, std::vector&\n+chordsIds,\n+64 key2doubleMap& deltaThetaMap,\n+65 /*INPUTS*/const PredecessorMap& tree, const NonlinearFactorGraph& g);\n+66\n+68GTSAM_EXPORT GaussianFactorGraph buildLinearOrientationGraph(\n+69 const std::vector& spanningTreeIds,\n+70 const std::vector& chordsIds, const NonlinearFactorGraph& g,\n+71 const key2doubleMap& orientationsToRoot, const PredecessorMap& tree);\n+72\n+74GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs initializeOrientations(\n+75 const NonlinearFactorGraph& graph, bool useOdometricPath = true);\n+76\n+78GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bs initialize(const NonlinearFactorGraph& graph,\n+79 bool useOdometricPath = true);\n+80\n+82GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bs initialize(const NonlinearFactorGraph& graph,\n+83 const _\bV_\ba_\bl_\bu_\be_\bs& initialGuess);\n+84\n+85} // end of namespace lago\n+86} // end of namespace gtsam\n+_\bg_\br_\ba_\bp_\bh_\b._\bh\n+Graph algorithm using boost library.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n-A pinhole camera class that has a Pose3 and a fixed Calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:243\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n-virtual bool active(const Values &) const\n-Checks whether a factor should be used based on a set of values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-const ValueType at(Key j) const\n-Retrieve a variable by key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_\n-boost::optional< Pose3 > body_P_sensor_\n-Pose of the camera in the body frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-SmartProjectionFactor: triangulates point and keeps an estimate of it around.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>_\b _\b>_\b:_\b:\n-_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n-double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 >\n-externalPoint=boost::none) const\n-Calculate the error of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:411\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-If you are using the factor, please cite: L.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-SmartProjectionPoseFactor(const SharedNoiseModel &sharedNoiseModel, const\n-boost::shared_ptr< CALIBRATION > K, const SmartProjectionParams\n-¶ms=SmartProjectionParams())\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs\n-Base::Cameras cameras(const Values &values) const override\n-Collect all cameras involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &values) const override\n-error calculates the error of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:119\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shorthand for a smart pointer to a factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bK_\b_\n-boost::shared_ptr< CALIBRATION > K_\n-calibration object (one for all cameras)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-~SmartProjectionPoseFactor() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-const boost::shared_ptr< CALIBRATION > calibration() const\n-return calibration shared pointers\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-SmartProjectionPoseFactor(const SharedNoiseModel &sharedNoiseModel, const\n-boost::shared_ptr< CALIBRATION > K, const boost::optional< Pose3 >\n-body_P_sensor, const SmartProjectionParams ¶ms=SmartProjectionParams())\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-SmartProjectionPoseFactor()\n-Default constructor, only for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:64\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bl_\ba_\bg_\bo_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01280.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01280.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/FrobeniusFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/InitializePose.h File Reference\n \n \n \n \n \n \n \n@@ -94,58 +94,38 @@\n \n \n \n \n \n
\n \n-
FrobeniusFactor.h File Reference
\n+Namespaces
\n+
InitializePose.h File Reference
\n \n
\n \n-

Various factors that minimize some Frobenius norm. \n+

common code between lago.* (2D) and InitializePose3.* (3D) \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::FrobeniusPrior< Rot >
 FrobeniusPrior calculates the Frobenius norm between a given matrix and an element of SO(3) or SO(4). More...
 
class  gtsam::FrobeniusFactor< Rot >
 FrobeniusFactor calculates the Frobenius norm between rotation matrices. More...
 
class  gtsam::FrobeniusBetweenFactor< Rot >
 FrobeniusBetweenFactor is a BetweenFactor that evaluates the Frobenius norm of the rotation error between measured and predicted (rather than the Logmap of the error). More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

SharedNoiseModel gtsam::ConvertNoiseModel (const SharedNoiseModel &model, size_t n, bool defaultToUnit=true)
 When creating (any) FrobeniusFactor we can convert a Rot/Pose BetweenFactor noise model into a n-dimensional isotropic noise model used to weight the Frobenius norm.
 
\n

Detailed Description

\n-

Various factors that minimize some Frobenius norm.

\n-
Date
March 2019
\n+

common code between lago.* (2D) and InitializePose3.* (3D)

\n
Author
Frank Dellaert
\n+
Date
August, 2020
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,44 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-FrobeniusFactor.h File Reference\n-Various factors that minimize some Frobenius norm. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+InitializePose.h File Reference\n+common code between lago.* (2D) and InitializePose3.* (3D) _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br_\b<_\b _\bR_\bo_\bt_\b _\b>\n-\u00a0 _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br calculates the Frobenius norm between a given matrix and\n- an element of SO(3) or SO(4). _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bR_\bo_\bt_\b _\b>\n-\u00a0 _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br calculates the Frobenius norm between rotation\n- matrices. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bR_\bo_\bt_\b _\b>\n- _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br is a _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br that evaluates the Frobenius\n-\u00a0 norm of the rotation error between measured and predicted (rather than\n- the Logmap of the error). _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl (const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n- size_t n, bool defaultToUnit=true)\n- When creating (any) _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br we can convert a Rot/Pose\n-\u00a0 _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br noise model into a n-dimensional isotropic\n- noise model used to weight the Frobenius norm.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Various factors that minimize some Frobenius norm.\n- Date\n- March 2019\n+common code between lago.* (2D) and InitializePose3.* (3D)\n Author\n Frank Dellaert\n+ Date\n+ August, 2020\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01280_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01280_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/FrobeniusFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/InitializePose.h Source File\n \n \n \n \n \n \n \n@@ -98,181 +98,116 @@\n
No Matches
\n \n \n \n \n \n
\n-
FrobeniusFactor.h
\n+
InitializePose.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/geometry/Rot2.h>
\n-
22#include <gtsam/geometry/Rot3.h>
\n-
23#include <gtsam/geometry/SOn.h>
\n-\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
42GTSAM_EXPORT SharedNoiseModel
\n-
43ConvertNoiseModel(const SharedNoiseModel &model, size_t n,
\n-
44 bool defaultToUnit = true);
\n+\n+\n+\n+\n+\n+
26
\n+
27namespace gtsam {
\n+
28namespace initialize {
\n+
29
\n+
30static constexpr Key kAnchorKey = 99999999;
\n+
31
\n+
36template <class Pose>
\n+
37static NonlinearFactorGraph buildPoseGraph(const NonlinearFactorGraph& graph) {
\n+
38 NonlinearFactorGraph poseGraph;
\n+
39
\n+
40 for (const auto& factor : graph) {
\n+
41 // recast to a between on Pose
\n+
42 if (auto between =
\n+
43 boost::dynamic_pointer_cast<BetweenFactor<Pose> >(factor))
\n+
44 poseGraph.add(between);
\n
45
\n-
50template <class Rot>
\n-
\n-
51class FrobeniusPrior : public NoiseModelFactorN<Rot> {
\n-
52 enum { Dim = Rot::VectorN2::RowsAtCompileTime };
\n-
53 using MatrixNN = typename Rot::MatrixNN;
\n-
54 Eigen::Matrix<double, Dim, 1> vecM_;
\n-
55
\n-
56 public:
\n-
57 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n-
58
\n-
\n-
60 FrobeniusPrior(Key j, const MatrixNN& M,
\n-
61 const SharedNoiseModel& model = nullptr)
\n-
62 : NoiseModelFactorN<Rot>(ConvertNoiseModel(model, Dim), j) {
\n-
63 vecM_ << Eigen::Map<const Matrix>(M.data(), Dim, 1);
\n-
64 }
\n-
\n-
65
\n-
\n-
67 Vector evaluateError(const Rot& R,
\n-
68 boost::optional<Matrix&> H = boost::none) const override {
\n-
69 return R.vec(H) - vecM_; // Jacobian is computed only when needed.
\n+
46 // recast PriorFactor<Pose> to BetweenFactor<Pose>
\n+
47 if (auto prior = boost::dynamic_pointer_cast<PriorFactor<Pose> >(factor))
\n+
48 poseGraph.emplace_shared<BetweenFactor<Pose> >(
\n+
49 kAnchorKey, prior->keys()[0], prior->prior(), prior->noiseModel());
\n+
50 }
\n+
51 return poseGraph;
\n+
52}
\n+
53
\n+
57template <class Pose>
\n+
58static Values computePoses(const Values& initialRot,
\n+
59 NonlinearFactorGraph* posegraph,
\n+
60 bool singleIter = true) {
\n+
61 const auto origin = Pose().translation();
\n+
62
\n+
63 // Upgrade rotations to full poses
\n+
64 Values initialPose;
\n+
65 for (const auto& key_rot : initialRot.extract<typename Pose::Rotation>()) {
\n+
66 const Key& key = key_rot.first;
\n+
67 const auto& rot = key_rot.second;
\n+
68 const Pose initializedPose(rot, origin);
\n+
69 initialPose.insert(key, initializedPose);
\n
70 }
\n-
\n-
71};
\n-
\n-
72
\n-
77template <class Rot>
\n-
\n-
78class FrobeniusFactor : public NoiseModelFactorN<Rot, Rot> {
\n-
79 enum { Dim = Rot::VectorN2::RowsAtCompileTime };
\n-
80
\n-
81 public:
\n-
\n-
83 FrobeniusFactor(Key j1, Key j2, const SharedNoiseModel& model = nullptr)
\n-
84 : NoiseModelFactorN<Rot, Rot>(ConvertNoiseModel(model, Dim), j1,
\n-
85 j2) {}
\n-
\n+
71
\n+
72 // add prior on dummy node
\n+
73 auto priorModel = noiseModel::Unit::Create(Pose::dimension);
\n+
74 initialPose.insert(kAnchorKey, Pose());
\n+
75 posegraph->emplace_shared<PriorFactor<Pose> >(kAnchorKey, Pose(), priorModel);
\n+
76
\n+
77 // Create optimizer
\n+
78 GaussNewtonParams params;
\n+
79 if (singleIter) {
\n+
80 params.maxIterations = 1;
\n+
81 } else {
\n+
82 params.setVerbosity("TERMINATION");
\n+
83 }
\n+
84 GaussNewtonOptimizer optimizer(*posegraph, initialPose, params);
\n+
85 const Values GNresult = optimizer.optimize();
\n
86
\n-
\n-
88 Vector evaluateError(const Rot& R1, const Rot& R2,
\n-
89 boost::optional<Matrix&> H1 = boost::none,
\n-
90 boost::optional<Matrix&> H2 = boost::none) const override {
\n-
91 Vector error = R2.vec(H2) - R1.vec(H1);
\n-
92 if (H1) *H1 = -*H1;
\n-
93 return error;
\n-
94 }
\n-
\n-
95};
\n-
\n-
96
\n-
103template <class Rot>
\n-
\n-\n-
105 Rot R12_;
\n-
106 Eigen::Matrix<double, Rot::dimension, Rot::dimension>
\n-
107 R2hat_H_R1_;
\n-
108 enum { Dim = Rot::VectorN2::RowsAtCompileTime };
\n-
109
\n-
110 public:
\n-
111 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n-
112
\n-
115
\n-
\n-
117 FrobeniusBetweenFactor(Key j1, Key j2, const Rot& R12,
\n-
118 const SharedNoiseModel& model = nullptr)
\n-
119 : NoiseModelFactorN<Rot, Rot>(
\n-
120 ConvertNoiseModel(model, Dim), j1, j2),
\n-
121 R12_(R12),
\n-
122 R2hat_H_R1_(R12.inverse().AdjointMap()) {}
\n-
\n-
123
\n-
127
\n-
129 void
\n-
\n-
130 print(const std::string &s,
\n-
131 const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override {
\n-
132 std::cout << s << "FrobeniusBetweenFactor<" << demangle(typeid(Rot).name())
\n-
133 << ">(" << keyFormatter(this->key1()) << ","
\n-
134 << keyFormatter(this->key2()) << ")\\n";
\n-
135 traits<Rot>::Print(R12_, " R12: ");
\n-
136 this->noiseModel_->print(" noise model: ");
\n-
137 }
\n-
\n-
138
\n-
\n-
140 bool equals(const NonlinearFactor &expected,
\n-
141 double tol = 1e-9) const override {
\n-
142 auto e = dynamic_cast<const FrobeniusBetweenFactor *>(&expected);
\n-
143 return e != nullptr && NoiseModelFactorN<Rot, Rot>::equals(*e, tol) &&
\n-
144 traits<Rot>::Equals(this->R12_, e->R12_, tol);
\n-
145 }
\n-
\n-
146
\n-
150
\n-
\n-
152 Vector evaluateError(const Rot& R1, const Rot& R2,
\n-
153 boost::optional<Matrix&> H1 = boost::none,
\n-
154 boost::optional<Matrix&> H2 = boost::none) const override {
\n-
155 const Rot R2hat = R1.compose(R12_);
\n-
156 Eigen::Matrix<double, Dim, Rot::dimension> vec_H_R2hat;
\n-
157 Vector error = R2.vec(H2) - R2hat.vec(H1 ? &vec_H_R2hat : nullptr);
\n-
158 if (H1) *H1 = -vec_H_R2hat * R2hat_H_R1_;
\n-
159 return error;
\n-
160 }
\n-
\n-
162};
\n-
\n-
163
\n-
164} // namespace gtsam
\n-
3D rotation represented as a rotation matrix or quaternion
\n-
N*N matrix representation of SO(N).
\n-
2D rotation
\n-
Non-linear factor base classes.
\n+
87 // put into Values structure
\n+
88 Values estimate;
\n+
89 for (const auto& key_pose : GNresult.extract<Pose>()) {
\n+
90 const Key& key = key_pose.first;
\n+
91 if (key != kAnchorKey) {
\n+
92 const Pose& pose = key_pose.second;
\n+
93 estimate.insert(key, pose);
\n+
94 }
\n+
95 }
\n+
96 return estimate;
\n+
97}
\n+
98} // namespace initialize
\n+
99} // namespace gtsam
\n+\n+
Factor Graph consisting of non-linear factors.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::string demangle(const char *name)
Pretty print Value type name.
Definition types.cpp:37
\n-
SharedNoiseModel ConvertNoiseModel(const SharedNoiseModel &model, size_t d, bool defaultToUnit)
When creating (any) FrobeniusFactor we can convert a Rot/Pose BetweenFactor noise model into a n-dime...
Definition FrobeniusFactor.cpp:27
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
double error(const Values &c) const override
Calculate the error of the factor.
Definition NonlinearFactor.cpp:138
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
FrobeniusPrior calculates the Frobenius norm between a given matrix and an element of SO(3) or SO(4).
Definition FrobeniusFactor.h:51
\n-
EIGEN_MAKE_ALIGNED_OPERATOR_NEW FrobeniusPrior(Key j, const MatrixNN &M, const SharedNoiseModel &model=nullptr)
Constructor.
Definition FrobeniusFactor.h:60
\n-
Vector evaluateError(const Rot &R, boost::optional< Matrix & > H=boost::none) const override
Error is just Frobenius norm between Rot element and vectorized matrix M.
Definition FrobeniusFactor.h:67
\n-
FrobeniusFactor calculates the Frobenius norm between rotation matrices.
Definition FrobeniusFactor.h:78
\n-
Vector evaluateError(const Rot &R1, const Rot &R2, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
Error is just Frobenius norm between rotation matrices.
Definition FrobeniusFactor.h:88
\n-
FrobeniusFactor(Key j1, Key j2, const SharedNoiseModel &model=nullptr)
Constructor.
Definition FrobeniusFactor.h:83
\n-
FrobeniusBetweenFactor is a BetweenFactor that evaluates the Frobenius norm of the rotation error bet...
Definition FrobeniusFactor.h:104
\n-
FrobeniusBetweenFactor(Key j1, Key j2, const Rot &R12, const SharedNoiseModel &model=nullptr)
Construct from two keys and measured rotation.
Definition FrobeniusFactor.h:117
\n-
void print(const std::string &s, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print with optional string
Definition FrobeniusFactor.h:130
\n-
Vector evaluateError(const Rot &R1, const Rot &R2, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
Error is Frobenius norm between R1*R12 and R2.
Definition FrobeniusFactor.h:152
\n-
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
assert equality up to a tolerance
Definition FrobeniusFactor.h:140
\n+
IsDerived< DERIVEDFACTOR > add(boost::shared_ptr< DERIVEDFACTOR > factor)
add is a synonym for push_back.
Definition FactorGraph.h:210
\n+
static shared_ptr Create(size_t dim)
Create a unit covariance noise model.
Definition NoiseModel.h:597
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+\n+\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,226 +1,124 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FrobeniusFactor.h\n+InitializePose.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\bn_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-42GTSAM_EXPORT _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-43_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, size_t n,\n-44 bool defaultToUnit = true);\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bP_\br_\bi_\bo_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n+28namespace initialize {\n+29\n+30static constexpr _\bK_\be_\by kAnchorKey = 99999999;\n+31\n+36template \n+37static NonlinearFactorGraph buildPoseGraph(const NonlinearFactorGraph& graph)\n+{\n+38 NonlinearFactorGraph poseGraph;\n+39\n+40 for (const auto& factor : graph) {\n+41 // recast to a between on Pose\n+42 if (auto between =\n+43 boost::dynamic_pointer_cast >(factor))\n+44 poseGraph._\ba_\bd_\bd(between);\n 45\n-50template \n-_\b5_\b1class _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-52 enum { Dim = Rot::VectorN2::RowsAtCompileTime };\n-53 using MatrixNN = typename Rot::MatrixNN;\n-54 Eigen::Matrix vecM_;\n-55\n-56 public:\n-57 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n-58\n-_\b6_\b0 _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br(_\bK_\be_\by j, const MatrixNN& M,\n-61 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr)\n-62 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(model, Dim), j) {\n-63 vecM_ << Eigen::Map(M.data(), Dim, 1);\n-64 }\n-65\n-_\b6_\b7 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Rot& R,\n-68 boost::optional H = boost::none) const override {\n-69 return R.vec(H) - vecM_; // Jacobian is computed only when needed.\n+46 // recast PriorFactor to BetweenFactor\n+47 if (auto prior = boost::dynamic_pointer_cast >(factor))\n+48 poseGraph.emplace_shared >(\n+49 kAnchorKey, prior->keys()[0], prior->prior(), prior->noiseModel());\n+50 }\n+51 return poseGraph;\n+52}\n+53\n+57template \n+58static _\bV_\ba_\bl_\bu_\be_\bs computePoses(const _\bV_\ba_\bl_\bu_\be_\bs& initialRot,\n+59 NonlinearFactorGraph* posegraph,\n+60 bool singleIter = true) {\n+61 const auto origin = Pose().translation();\n+62\n+63 // Upgrade rotations to full poses\n+64 _\bV_\ba_\bl_\bu_\be_\bs initialPose;\n+65 for (const auto& key_rot : initialRot.extract()) {\n+66 const _\bK_\be_\by& key = key_rot.first;\n+67 const auto& rot = key_rot.second;\n+68 const Pose initializedPose(rot, origin);\n+69 initialPose.insert(key, initializedPose);\n 70 }\n-71};\n-72\n-77template \n-_\b7_\b8class _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-79 enum { Dim = Rot::VectorN2::RowsAtCompileTime };\n-80\n-81 public:\n-_\b8_\b3 _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr)\n-84 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(model, Dim), j1,\n-85 j2) {}\n+71\n+72 // add prior on dummy node\n+73 auto priorModel = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(Pose::dimension);\n+74 initialPose.insert(kAnchorKey, Pose());\n+75 posegraph->emplace_shared >(kAnchorKey, Pose(),\n+priorModel);\n+76\n+77 // Create optimizer\n+78 GaussNewtonParams params;\n+79 if (singleIter) {\n+80 params.maxIterations = 1;\n+81 } else {\n+82 params.setVerbosity(\"TERMINATION\");\n+83 }\n+84 GaussNewtonOptimizer optimizer(*posegraph, initialPose, params);\n+85 const _\bV_\ba_\bl_\bu_\be_\bs GNresult = optimizer.optimize();\n 86\n-_\b8_\b8 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Rot& R1, const Rot& R2,\n-89 boost::optional H1 = boost::none,\n-90 boost::optional H2 = boost::none) const override {\n-91 Vector _\be_\br_\br_\bo_\br = R2.vec(H2) - R1.vec(H1);\n-92 if (H1) *H1 = -*H1;\n-93 return _\be_\br_\br_\bo_\br;\n+87 // put into Values structure\n+88 _\bV_\ba_\bl_\bu_\be_\bs estimate;\n+89 for (const auto& key_pose : GNresult.extract()) {\n+90 const _\bK_\be_\by& key = key_pose.first;\n+91 if (key != kAnchorKey) {\n+92 const Pose& pose = key_pose.second;\n+93 estimate.insert(key, pose);\n 94 }\n-95};\n-96\n-103template \n-_\b1_\b0_\b4class _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-105 Rot R12_;\n-106 Eigen::Matrix\n-107 R2hat_H_R1_;\n-108 enum { Dim = Rot::VectorN2::RowsAtCompileTime };\n-109\n-110 public:\n-111 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n-112\n-115\n-_\b1_\b1_\b7 _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, const Rot& R12,\n-118 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr)\n-119 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(\n-120 _\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(model, Dim), j1, j2),\n-121 R12_(R12),\n-122 R2hat_H_R1_(R12.inverse().AdjointMap()) {}\n-123\n-127\n-129 void\n-_\b1_\b3_\b0 _\bp_\br_\bi_\bn_\bt(const std::string &s,\n-131 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter) const override {\n-132 std::cout << s << \"FrobeniusBetweenFactor<\" << _\bd_\be_\bm_\ba_\bn_\bg_\bl_\be(typeid(Rot).name())\n-133 << \">(\" << keyFormatter(this->key1()) << \",\"\n-134 << keyFormatter(this->key2()) << \")\\n\";\n-135 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bo_\bt_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(R12_, \" R12: \");\n-136 this->noiseModel_->print(\" noise model: \");\n-137 }\n-138\n-_\b1_\b4_\b0 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br &expected,\n-141 double tol = 1e-9) const override {\n-142 auto e = dynamic_cast(&expected);\n-143 return e != nullptr && _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bR_\bo_\bt_\b,_\b _\bR_\bo_\bt_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) &&\n-144 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bo_\bt_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->R12_, e->R12_, tol);\n-145 }\n-146\n-150\n-_\b1_\b5_\b2 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Rot& R1, const Rot& R2,\n-153 boost::optional H1 = boost::none,\n-154 boost::optional H2 = boost::none) const override {\n-155 const Rot R2hat = R1.compose(R12_);\n-156 Eigen::Matrix vec_H_R2hat;\n-157 Vector _\be_\br_\br_\bo_\br = R2.vec(H2) - R2hat.vec(H1 ? &vec_H_R2hat : nullptr);\n-158 if (H1) *H1 = -vec_H_R2hat * R2hat_H_R1_;\n-159 return _\be_\br_\br_\bo_\br;\n-160 }\n-162};\n-163\n-164} // namespace gtsam\n-_\bR_\bo_\bt_\b3_\b._\bh\n-3D rotation represented as a rotation matrix or quaternion\n-_\bS_\bO_\bn_\b._\bh\n-N*N matrix representation of SO(N).\n-_\bR_\bo_\bt_\b2_\b._\bh\n-2D rotation\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+95 }\n+96 return estimate;\n+97}\n+98} // namespace initialize\n+99} // namespace gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n+_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bm_\ba_\bn_\bg_\bl_\be\n-std::string demangle(const char *name)\n-Pretty print Value type name.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.cpp:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-SharedNoiseModel ConvertNoiseModel(const SharedNoiseModel &model, size_t d,\n-bool defaultToUnit)\n-When creating (any) FrobeniusFactor we can convert a Rot/Pose BetweenFactor\n-noise model into a n-dime...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.cpp:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &c) const override\n-Calculate the error of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br\n-FrobeniusPrior calculates the Frobenius norm between a given matrix and an\n-element of SO(3) or SO(4).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br\n-EIGEN_MAKE_ALIGNED_OPERATOR_NEW FrobeniusPrior(Key j, const MatrixNN &M, const\n-SharedNoiseModel &model=nullptr)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Rot &R, boost::optional< Matrix & > H=boost::none)\n-const override\n-Error is just Frobenius norm between Rot element and vectorized matrix M.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br\n-FrobeniusFactor calculates the Frobenius norm between rotation matrices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Rot &R1, const Rot &R2, boost::optional< Matrix & >\n-H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override\n-Error is just Frobenius norm between rotation matrices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br\n-FrobeniusFactor(Key j1, Key j2, const SharedNoiseModel &model=nullptr)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-FrobeniusBetweenFactor is a BetweenFactor that evaluates the Frobenius norm of\n-the rotation error bet...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-FrobeniusBetweenFactor(Key j1, Key j2, const Rot &R12, const SharedNoiseModel\n-&model=nullptr)\n-Construct from two keys and measured rotation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print with optional string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Rot &R1, const Rot &R2, boost::optional< Matrix & >\n-H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override\n-Error is Frobenius norm between R1*R12 and R2.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n-assert equality up to a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+IsDerived< DERIVEDFACTOR > add(boost::shared_ptr< DERIVEDFACTOR > factor)\n+add is a synonym for push_back.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:210\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static shared_ptr Create(size_t dim)\n+Create a unit covariance noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:597\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n+_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n+_\bP_\br_\bi_\bo_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01283.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01283.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/ProjectionFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/dataset.h File Reference\n \n \n \n \n \n \n \n@@ -94,53 +94,153 @@\n \n \n \n \n \n
\n \n-
ProjectionFactor.h File Reference
\n+Namespaces |\n+Typedefs |\n+Enumerations |\n+Functions
\n+
dataset.h File Reference
\n \n
\n \n-

Reprojection of a LANDMARK to a 2D point. \n+

utility functions for loading datasets \n More...

\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::GenericProjectionFactor< POSE, LANDMARK, CALIBRATION >
 Non-linear factor for a constraint derived from a 2D measurement. More...
 
struct  gtsam::traits< GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Typedefs

\n+typedef std::pair< size_t, Pose2gtsam::IndexedPose
 Return type for auxiliary functions.
 
\n+typedef std::pair< size_t, Point2gtsam::IndexedLandmark
 
\n+typedef std::pair< std::pair< size_t, size_t >, Pose2gtsam::IndexedEdge
 
using gtsam::GraphAndValues = std::pair< NonlinearFactorGraph::shared_ptr, Values::shared_ptr >
 Return type for load functions, which return a graph and initial values.
 
\n+using gtsam::BetweenFactorPose2s = std::vector< BetweenFactor< Pose2 >::shared_ptr >
 
\n+using gtsam::BetweenFactorPose3s = std::vector< BetweenFactor< Pose3 >::shared_ptr >
 
\n+using gtsam::BinaryMeasurementsUnit3 = std::vector< BinaryMeasurement< Unit3 > >
 
\n+using gtsam::BinaryMeasurementsPoint3 = std::vector< BinaryMeasurement< Point3 > >
 
\n+using gtsam::BinaryMeasurementsRot3 = std::vector< BinaryMeasurement< Rot3 > >
 
\n+\n+\n+\n+\n+\n+\n+\n+

\n+Enumerations

enum  gtsam::NoiseFormat {
\n+  gtsam::NoiseFormatG2O\n+, gtsam::NoiseFormatTORO\n+, gtsam::NoiseFormatGRAPH\n+, gtsam::NoiseFormatCOV\n+,
\n+  gtsam::NoiseFormatAUTO\n+
\n+ }
 Indicates how noise parameters are stored in file. More...
 
enum  gtsam::KernelFunctionType { KernelFunctionTypeNONE\n+, KernelFunctionTypeHUBER\n+, KernelFunctionTypeTUKEY\n+ }
 Robust kernel type to wrap around quadratic noise model.
 
\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+Functions

string gtsam::findExampleDataFile (const std::string &name)
 Find the full path to an example dataset distributed with gtsam.
 
\n+string gtsam::createRewrittenFileName (const std::string &name)
 Creates a temporary file name that needs to be ignored in .gitingnore for checking read-write oprations.
 
template<typename T >
GTSAM_EXPORT std::map< size_t, T > gtsam::parseVariables (const std::string &filename, size_t maxIndex=0)
 Parse variables in a line-based text format (like g2o) into a map.
 
template<typename T >
GTSAM_EXPORT std::vector< BinaryMeasurement< T > > gtsam::parseMeasurements (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model=nullptr, size_t maxIndex=0)
 Parse binary measurements in a line-based text format (like g2o) into a vector.
 
template<typename T >
GTSAM_EXPORT std::vector< typename BetweenFactor< T >::shared_ptr > gtsam::parseFactors (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model=nullptr, size_t maxIndex=0)
 Parse BetweenFactors in a line-based text format (like g2o) into a vector of shared pointers.
 
boost::optional< IndexedPosegtsam::parseVertexPose (std::istream &is, const std::string &tag)
 Parse TORO/G2O vertex \"id x y yaw\".
 
boost::optional< IndexedLandmark > gtsam::parseVertexLandmark (std::istream &is, const std::string &tag)
 Parse G2O landmark vertex \"id x y\".
 
boost::optional< IndexedEdge > gtsam::parseEdge (std::istream &is, const std::string &tag)
 Parse TORO/G2O edge \"id1 id2 x y yaw\".
 
GTSAM_EXPORT GraphAndValues gtsam::load2D (std::pair< std::string, SharedNoiseModel > dataset, size_t maxIndex=0, bool addNoise=false, bool smart=true, NoiseFormat noiseFormat=NoiseFormatAUTO, KernelFunctionType kernelFunctionType=KernelFunctionTypeNONE)
 Load TORO 2D Graph.
 
GraphAndValues gtsam::load2D (const std::string &filename, SharedNoiseModel model=SharedNoiseModel(), size_t maxIndex=0, bool addNoise=false, bool smart=true, NoiseFormat noiseFormat=NoiseFormatAUTO, KernelFunctionType kernelFunctionType=KernelFunctionTypeNONE)
 Load TORO/G2O style graph files.
 
\n+void gtsam::save2D (const NonlinearFactorGraph &graph, const Values &config, const noiseModel::Diagonal::shared_ptr model, const std::string &filename)
 save 2d graph
 
GraphAndValues gtsam::readG2o (const std::string &g2oFile, const bool is3D=false, KernelFunctionType kernelFunctionType=KernelFunctionTypeNONE)
 This function parses a g2o file and stores the measurements into a NonlinearFactorGraph and the initial guess in a Values structure.
 
void gtsam::writeG2o (const NonlinearFactorGraph &graph, const Values &estimate, const std::string &filename)
 This function writes a g2o file from NonlinearFactorGraph and a Values structure.
 
\n+GraphAndValues gtsam::load3D (const std::string &filename)
 Load TORO 3D Graph.
 
\n+BetweenFactorPose2s gtsam::parse2DFactors (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model, size_t maxIndex)
 
\n+BetweenFactorPose3s gtsam::parse3DFactors (const std::string &filename, const noiseModel::Diagonal::shared_ptr &model, size_t maxIndex)
 
\n

Detailed Description

\n-

Reprojection of a LANDMARK to a 2D point.

\n-
Author
Chris Beall
\n-
\n-Richard Roberts
\n+

utility functions for loading datasets

\n+
Date
Jan 22, 2010
\n+
Author
Ni Kai
\n
\n-Frank Dellaert
\n+Luca Carlone \n
\n-Alex Cunningham
\n+Varun Agrawal
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,164 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ProjectionFactor.h File Reference\n-Reprojection of a LANDMARK to a 2D point. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bE_\bn_\bu_\bm_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+dataset.h File Reference\n+utility functions for loading datasets _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b,_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n-\u00a0 Non-linear factor for a constraint derived from a 2D measurement.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b,_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n- _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+ typedef std::pair< size_t, _\bP_\bo_\bs_\be_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxe\bed\bdP\bPo\bos\bse\be\n+\u00a0 Return type for auxiliary functions.\n+\u00a0\n+ typedef std::pair< size_t, _\bP_\bo_\bi_\bn_\bt_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxe\bed\bdL\bLa\ban\bnd\bdm\bma\bar\brk\bk\n+\u00a0\n+typedef std::pair< std::pair< size_t,\n+ size_t >, _\bP_\bo_\bs_\be_\b2 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIn\bnd\bde\bex\bxe\bed\bdE\bEd\bdg\bge\be\n+\u00a0\n+ using\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs = std::pair<\n+ NonlinearFactorGraph::shared_ptr,\n+ _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br >\n+\u00a0 Return type for load functions, which\n+ return a graph and initial values.\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBe\bet\btw\bwe\bee\ben\bnF\bFa\bac\bct\bto\bor\brP\bPo\bos\bse\be2\b2s\bs = std::vector<\n+ _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br< _\bP_\bo_\bs_\be_\b2 >::shared_ptr >\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBe\bet\btw\bwe\bee\ben\bnF\bFa\bac\bct\bto\bor\brP\bPo\bos\bse\be3\b3s\bs = std::vector<\n+ _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br< _\bP_\bo_\bs_\be_\b3 >::shared_ptr >\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBi\bin\bna\bar\bry\byM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bsU\bUn\bni\bit\bt3\b3 = std::\n+ vector< _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< _\bU_\bn_\bi_\bt_\b3 > >\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBi\bin\bna\bar\bry\byM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bsP\bPo\boi\bin\bnt\bt3\b3 = std::\n+ vector< _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< _\bP_\bo_\bi_\bn_\bt_\b3 > >\n+\u00a0\n+ using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBi\bin\bna\bar\bry\byM\bMe\bea\bas\bsu\bur\bre\bem\bme\ben\bnt\bts\bsR\bRo\bot\bt3\b3 = std::\n+ vector< _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< _\bR_\bo_\bt_\b3 > >\n+\u00a0\n+E\bEn\bnu\bum\bme\ber\bra\bat\bti\bio\bon\bns\bs\n+enum \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt {\n+ \u00a0\u00a0_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bG_\b2_\bO , _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bT_\bO_\bR_\bO , _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n+ _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bG_\bR_\bA_\bP_\bH , _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bC_\bO_\bV ,\n+ \u00a0\u00a0_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO\n+ }\n+\u00a0 Indicates how noise parameters are stored in file. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+enum \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be { K\bKe\ber\brn\bne\bel\blF\bFu\bun\bnc\bct\bti\bio\bon\bnT\bTy\byp\bpe\beN\bNO\bON\bNE\bE ,\n+ K\bKe\ber\brn\bne\bel\blF\bFu\bun\bnc\bct\bti\bio\bon\bnT\bTy\byp\bpe\beH\bHU\bUB\bBE\bER\bR , K\bKe\ber\brn\bne\bel\blF\bFu\bun\bnc\bct\bti\bio\bon\bnT\bTy\byp\bpe\beT\bTU\bUK\bKE\bEY\bY }\n+\u00a0 Robust kernel type to wrap around quadratic noise model.\n+\u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ string\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bi_\bn_\bd_\bE_\bx_\ba_\bm_\bp_\bl_\be_\bD_\ba_\bt_\ba_\bF_\bi_\bl_\be (const std::\n+ string &name)\n+\u00a0 Find the full path to an example dataset\n+ distributed with gtsam.\n+\u00a0\n+ string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bcr\bre\bea\bat\bte\beR\bRe\bew\bwr\bri\bit\btt\bte\ben\bnF\bFi\bil\ble\beN\bNa\bam\bme\be (const std::\n+ string &name)\n+ Creates a temporary file name that needs to\n+\u00a0 be ignored in .gitingnore for checking\n+ read-write oprations.\n+\u00a0\n+template\n+GTSAM_EXPORT std::map< size_t, T >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs (const std::string\n+ &filename, size_t maxIndex=0)\n+\u00a0 Parse variables in a line-based text format\n+ (like g2o) into a map.\n+\u00a0\n+template\n+ GTSAM_EXPORT std::vector< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs (const std::string\n+ _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt< T > >\u00a0 &filename, const noiseModel::Diagonal::\n+ shared_ptr &model=nullptr, size_t\n+ maxIndex=0)\n+\u00a0 Parse binary measurements in a line-based\n+ text format (like g2o) into a vector.\n+\u00a0\n+template\n+ GTSAM_EXPORT std::vector< typename _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\bs (const std::string\n+ _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br< T >::shared_ptr >\u00a0 &filename, const noiseModel::Diagonal::\n+ shared_ptr &model=nullptr, size_t\n+ maxIndex=0)\n+ Parse BetweenFactors in a line-based text\n+\u00a0 format (like g2o) into a vector of shared\n+ pointers.\n+\u00a0\n+ boost::optional< _\bI_\bn_\bd_\be_\bx_\be_\bd_\bP_\bo_\bs_\be >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bP_\bo_\bs_\be (std::istream &is,\n+ const std::string &tag)\n+\u00a0 Parse TORO/G2O vertex \"id x y yaw\".\n+\u00a0\n+boost::optional< IndexedLandmark >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\ba_\bn_\bd_\bm_\ba_\br_\bk (std::istream\n+ &is, const std::string &tag)\n+\u00a0 Parse G2O landmark vertex \"id x y\".\n+\u00a0\n+ boost::optional< IndexedEdge >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bE_\bd_\bg_\be (std::istream &is, const\n+ std::string &tag)\n+\u00a0 Parse TORO/G2O edge \"id1 id2 x y yaw\".\n+\u00a0\n+ GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\ba_\bd_\b2_\bD (std::pair< std::string,\n+ _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl > dataset, size_t\n+ maxIndex=0, bool addNoise=false, bool\n+ smart=true, _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt\n+ noiseFormat=_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO,\n+ _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be\n+ kernelFunctionType=KernelFunctionTypeNONE)\n+\u00a0 Load TORO 2D Graph.\n+\u00a0\n+ _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\ba_\bd_\b2_\bD (const std::string &filename,\n+ _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl model=_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(),\n+ size_t maxIndex=0, bool addNoise=false,\n+ bool smart=true, _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt\n+ noiseFormat=_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO,\n+ _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be\n+ kernelFunctionType=KernelFunctionTypeNONE)\n+\u00a0 Load TORO/G2O style graph files.\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsa\bav\bve\be2\b2D\bD (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+ &graph, const _\bV_\ba_\bl_\bu_\be_\bs &config, const\n+ noiseModel::Diagonal::shared_ptr model,\n+ const std::string &filename)\n+\u00a0 save 2d graph\n+\u00a0\n+ _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\be_\ba_\bd_\bG_\b2_\bo (const std::string &g2oFile,\n+ const bool is3D=false, _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be\n+ kernelFunctionType=KernelFunctionTypeNONE)\n+ This function parses a g2o file and stores\n+\u00a0 the measurements into a\n+ _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh and the initial guess\n+ in a _\bV_\ba_\bl_\bu_\be_\bs structure.\n+\u00a0\n+ void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bG_\b2_\bo (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+ &graph, const _\bV_\ba_\bl_\bu_\be_\bs &estimate, const std::\n+ string &filename)\n+ This function writes a g2o file from\n+\u00a0 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh and a _\bV_\ba_\bl_\bu_\be_\bs\n+ structure.\n+\u00a0\n+ _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:l\blo\boa\bad\bd3\b3D\bD (const std::string &filename)\n+\u00a0 Load TORO 3D Graph.\n+\u00a0\n+ BetweenFactorPose2s\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\be2\b2D\bDF\bFa\bac\bct\bto\bor\brs\bs (const std::string\n+ &filename, const noiseModel::Diagonal::\n+ shared_ptr &model, size_t maxIndex)\n+\u00a0\n+ BetweenFactorPose3s\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpa\bar\brs\bse\be3\b3D\bDF\bFa\bac\bct\bto\bor\brs\bs (const std::string\n+ &filename, const noiseModel::Diagonal::\n+ shared_ptr &model, size_t maxIndex)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Reprojection of a LANDMARK to a 2D point.\n+utility functions for loading datasets\n+ Date\n+ Jan 22, 2010\n Author\n- Chris Beall\n- Richard Roberts\n- Frank Dellaert\n- Alex Cunningham\n+ Ni Kai\n+ Luca Carlone\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01283.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01283.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,30 @@\n var a01283 = [\n- [\"gtsam::traits< GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > >\", \"a04900.html\", null]\n+ [\"GraphAndValues\", \"a01283.html#abcc5d1ec05ddc954d5de28929acabbdf\", null],\n+ [\"IndexedPose\", \"a01283.html#a6ab764d13f9aaeafc2dc60763b05ec0e\", null],\n+ [\"KernelFunctionType\", \"a01283.html#a8be373f34edc0a9d28b1bfab5dd62ba0\", [\n+ [\"KernelFunctionTypeNONE\", \"a01283.html#a8be373f34edc0a9d28b1bfab5dd62ba0a406af886b3b4b113dfe666c8ad95e38b\", null],\n+ [\"KernelFunctionTypeHUBER\", \"a01283.html#a8be373f34edc0a9d28b1bfab5dd62ba0a37cef4c071c8c4f77f31fa617e91da53\", null],\n+ [\"KernelFunctionTypeTUKEY\", \"a01283.html#a8be373f34edc0a9d28b1bfab5dd62ba0aacc5d659fca66977c8fe6f341802fae9\", null]\n+ ]],\n+ [\"NoiseFormat\", \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18\", [\n+ [\"NoiseFormatG2O\", \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18ad0aaa5c51a45cb7c9151aae60a603209\", null],\n+ [\"NoiseFormatTORO\", \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18a3790bc2c6f11cd7da84730b33173de5a\", null],\n+ [\"NoiseFormatGRAPH\", \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18a1f8edeb25c58a249789556c686265a4c\", null],\n+ [\"NoiseFormatCOV\", \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18a5450a16f3522214ccdfa23c461e7d05a\", null],\n+ [\"NoiseFormatAUTO\", \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18a2f9067b8f5bd2d0dd38c49326a4c070e\", null]\n+ ]],\n+ [\"createRewrittenFileName\", \"a01283.html#adbe09e573771fd72b08069353d537725\", null],\n+ [\"findExampleDataFile\", \"a01283.html#aef971b2c69845e4fcce707306703c7b8\", null],\n+ [\"load2D\", \"a01283.html#a635ec096b94adc2b05f081cd07eb2c0f\", null],\n+ [\"load2D\", \"a01283.html#a6f8d49b13ccc0e007a5e7572286d5854\", null],\n+ [\"load3D\", \"a01283.html#ac96511703a91071d7b2033976f9739c3\", null],\n+ [\"parseEdge\", \"a01283.html#abc8bb9db0893652e8b5e7b47782ec990\", null],\n+ [\"parseFactors\", \"a01283.html#a8a2136a163e31faaefe2db498a9b9b43\", null],\n+ [\"parseMeasurements\", \"a01283.html#a6eb4817b97658f00e426b753c52361ed\", null],\n+ [\"parseVariables\", \"a01283.html#a683ab6a83b5b3e508e734a7089986838\", null],\n+ [\"parseVertexLandmark\", \"a01283.html#a961e0398bbfc2504c62fdaad70472418\", null],\n+ [\"parseVertexPose\", \"a01283.html#abfc0157e4790e3b03dc601d3e86c684d\", null],\n+ [\"readG2o\", \"a01283.html#a71d086efc70f4af31d3c3b00dde4f7c0\", null],\n+ [\"save2D\", \"a01283.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\", null],\n+ [\"writeG2o\", \"a01283.html#a68bc584d72da3747666ac134a9490f92\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01283_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01283_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/ProjectionFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/dataset.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
ProjectionFactor.h
\n+
dataset.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,227 +114,192 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
21#pragma once
\n
22
\n-\n-\n-\n-\n-\n-
28#include <boost/optional.hpp>
\n-
29
\n-
30namespace gtsam {
\n-
31
\n-
38 template <class POSE = Pose3, class LANDMARK = Point3,
\n-
39 class CALIBRATION = Cal3_S2>
\n-
\n-
40 class GenericProjectionFactor: public NoiseModelFactorN<POSE, LANDMARK> {
\n-
41 protected:
\n-
42
\n-
43 // Keep a copy of measurement and calibration for I/O
\n-\n-
45 boost::shared_ptr<CALIBRATION> K_;
\n-
46 boost::optional<POSE> body_P_sensor_;
\n-
47
\n-
48 // verbosity handling for Cheirality Exceptions
\n-\n-\n-
51
\n-
52 public:
\n-
53
\n-\n-
56
\n-\n-
59
\n-
61 typedef boost::shared_ptr<This> shared_ptr;
\n-
62
\n-
\n-\n-
65 measured_(0, 0), throwCheirality_(false), verboseCheirality_(false) {
\n-
66 }
\n-
\n-
67
\n-
\n-\n-
79 Key poseKey, Key pointKey, const boost::shared_ptr<CALIBRATION>& K,
\n-
80 boost::optional<POSE> body_P_sensor = boost::none) :
\n-
81 Base(model, poseKey, pointKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor),
\n-
82 throwCheirality_(false), verboseCheirality_(false) {}
\n-
\n-
83
\n-
\n-\n-
97 Key poseKey, Key pointKey, const boost::shared_ptr<CALIBRATION>& K,
\n-\n-
99 boost::optional<POSE> body_P_sensor = boost::none) :
\n-
100 Base(model, poseKey, pointKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor),
\n-\n-
\n-
102
\n-\n-
105
\n-
\n-
107 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
108 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
109 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n-
\n+\n+\n+
25#include <gtsam/sfm/SfmData.h>
\n+\n+\n+\n+\n+\n+\n+\n+\n+
34#include <gtsam/base/Testable.h>
\n+
35#include <gtsam/base/types.h>
\n+
36
\n+
37#include <boost/smart_ptr/shared_ptr.hpp>
\n+
38#include <string>
\n+
39#include <utility> // for pair
\n+
40#include <vector>
\n+
41#include <iosfwd>
\n+
42#include <map>
\n+
43
\n+
44namespace gtsam {
\n+
45
\n+
57GTSAM_EXPORT std::string findExampleDataFile(const std::string& name);
\n+
58
\n+
63GTSAM_EXPORT std::string createRewrittenFileName(const std::string& name);
\n+
64
\n+\n+
73
\n+
\n+\n+
76 KernelFunctionTypeNONE, KernelFunctionTypeHUBER, KernelFunctionTypeTUKEY
\n+
77};
\n+
\n+
78
\n+
85template <typename T>
\n+
86GTSAM_EXPORT std::map<size_t, T> parseVariables(const std::string &filename,
\n+
87 size_t maxIndex = 0);
\n+
88
\n+
95template <typename T>
\n+
96GTSAM_EXPORT std::vector<BinaryMeasurement<T>>
\n+
97parseMeasurements(const std::string &filename,
\n+
98 const noiseModel::Diagonal::shared_ptr &model = nullptr,
\n+
99 size_t maxIndex = 0);
\n+
100
\n+
105template <typename T>
\n+
106GTSAM_EXPORT std::vector<typename BetweenFactor<T>::shared_ptr>
\n+
107parseFactors(const std::string &filename,
\n+
108 const noiseModel::Diagonal::shared_ptr &model = nullptr,
\n+
109 size_t maxIndex = 0);
\n
110
\n-
\n-
116 void print(const std::string& s = "", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
117 std::cout << s << "GenericProjectionFactor, z = ";
\n-\n-
119 if(this->body_P_sensor_)
\n-
120 this->body_P_sensor_->print(" sensor pose in body frame: ");
\n-
121 Base::print("", keyFormatter);
\n-
122 }
\n-
\n+
112typedef std::pair<size_t, Pose2> IndexedPose;
\n+
113typedef std::pair<size_t, Point2> IndexedLandmark;
\n+
114typedef std::pair<std::pair<size_t, size_t>, Pose2> IndexedEdge;
\n+
115
\n+
121GTSAM_EXPORT boost::optional<IndexedPose> parseVertexPose(std::istream& is,
\n+
122 const std::string& tag);
\n
123
\n-
\n-
125 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n-
126 const This *e = dynamic_cast<const This*>(&p);
\n-
127 return e
\n-
128 && Base::equals(p, tol)
\n-
129 && traits<Point2>::Equals(this->measured_, e->measured_, tol)
\n-
130 && this->K_->equals(*e->K_, tol)
\n-
131 && ((!body_P_sensor_ && !e->body_P_sensor_) || (body_P_sensor_ && e->body_P_sensor_ && body_P_sensor_->equals(*e->body_P_sensor_)));
\n-
132 }
\n-
\n-
133
\n-
\n-
135 Vector evaluateError(const Pose3& pose, const Point3& point,
\n-
136 boost::optional<Matrix&> H1 = boost::none, boost::optional<Matrix&> H2 = boost::none) const override {
\n-
137 try {
\n-
138 if(body_P_sensor_) {
\n-
139 if(H1) {
\n-
140 gtsam::Matrix H0;
\n-
141 PinholeCamera<CALIBRATION> camera(pose.compose(*body_P_sensor_, H0), *K_);
\n-
142 Point2 reprojectionError(camera.project(point, H1, H2, boost::none) - measured_);
\n-
143 *H1 = *H1 * H0;
\n-
144 return reprojectionError;
\n-
145 } else {
\n-
146 PinholeCamera<CALIBRATION> camera(pose.compose(*body_P_sensor_), *K_);
\n-
147 return camera.project(point, H1, H2, boost::none) - measured_;
\n-
148 }
\n-
149 } else {
\n-
150 PinholeCamera<CALIBRATION> camera(pose, *K_);
\n-
151 return camera.project(point, H1, H2, boost::none) - measured_;
\n-
152 }
\n-
153 } catch( CheiralityException& e) {
\n-
154 if (H1) *H1 = Matrix::Zero(2,6);
\n-
155 if (H2) *H2 = Matrix::Zero(2,3);
\n-\n-
157 std::cout << e.what() << ": Landmark "<< DefaultKeyFormatter(this->key2()) <<
\n-
158 " moved behind camera " << DefaultKeyFormatter(this->key1()) << std::endl;
\n-\n-
160 throw CheiralityException(this->key2());
\n-
161 }
\n-
162 return Vector2::Constant(2.0 * K_->fx());
\n-
163 }
\n-
\n-
164
\n-
\n-
166 const Point2& measured() const {
\n-
167 return measured_;
\n-
168 }
\n-
\n-
169
\n-
\n-
171 const boost::shared_ptr<CALIBRATION> calibration() const {
\n-
172 return K_;
\n-
173 }
\n-
\n-
174
\n-
\n-
176 const boost::optional<POSE>& body_P_sensor() const {
\n-
177 return body_P_sensor_;
\n-
178 }
\n-
\n-
179
\n-
181 inline bool verboseCheirality() const { return verboseCheirality_; }
\n-
182
\n-
184 inline bool throwCheirality() const { return throwCheirality_; }
\n-
185
\n-
186 private:
\n-
187
\n-\n-
190 template<class ARCHIVE>
\n-
191 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
192 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
193 ar & BOOST_SERIALIZATION_NVP(measured_);
\n-
194 ar & BOOST_SERIALIZATION_NVP(K_);
\n-
195 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);
\n-
196 ar & BOOST_SERIALIZATION_NVP(throwCheirality_);
\n-
197 ar & BOOST_SERIALIZATION_NVP(verboseCheirality_);
\n-
198 }
\n-
199
\n-
200 public:
\n-\n-
202};
\n-
\n-
203
\n-
205 template<class POSE, class LANDMARK, class CALIBRATION>
\n-
\n-
206 struct traits<GenericProjectionFactor<POSE, LANDMARK, CALIBRATION> > :
\n-
207 public Testable<GenericProjectionFactor<POSE, LANDMARK, CALIBRATION> > {
\n-
208 };
\n-
\n-
209
\n-
210} // \\ namespace gtsam
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
The most common 5DOF 3D->2D calibration.
\n-
3D Point
\n-
3D Pose
\n-
Base class for all pinhole cameras.
\n-
Non-linear factor base classes.
\n+
129GTSAM_EXPORT boost::optional<IndexedLandmark> parseVertexLandmark(std::istream& is,
\n+
130 const std::string& tag);
\n+
131
\n+
137GTSAM_EXPORT boost::optional<IndexedEdge> parseEdge(std::istream& is,
\n+
138 const std::string& tag);
\n+
139
\n+\n+
144 std::pair<NonlinearFactorGraph::shared_ptr, Values::shared_ptr>;
\n+
145
\n+
153GTSAM_EXPORT GraphAndValues load2D(
\n+
154 std::pair<std::string, SharedNoiseModel> dataset, size_t maxIndex = 0,
\n+
155 bool addNoise = false,
\n+
156 bool smart = true, //
\n+
157 NoiseFormat noiseFormat = NoiseFormatAUTO,
\n+
158 KernelFunctionType kernelFunctionType = KernelFunctionTypeNONE);
\n+
159
\n+
171GTSAM_EXPORT GraphAndValues
\n+
172load2D(const std::string& filename, SharedNoiseModel model = SharedNoiseModel(),
\n+
173 size_t maxIndex = 0, bool addNoise = false, bool smart = true,
\n+
174 NoiseFormat noiseFormat = NoiseFormatAUTO, //
\n+
175 KernelFunctionType kernelFunctionType = KernelFunctionTypeNONE);
\n+
176
\n+
178GTSAM_EXPORT void save2D(const NonlinearFactorGraph& graph,
\n+
179 const Values& config, const noiseModel::Diagonal::shared_ptr model,
\n+
180 const std::string& filename);
\n+
181
\n+
190GTSAM_EXPORT GraphAndValues
\n+
191readG2o(const std::string& g2oFile, const bool is3D = false,
\n+
192 KernelFunctionType kernelFunctionType = KernelFunctionTypeNONE);
\n+
193
\n+
206GTSAM_EXPORT void writeG2o(const NonlinearFactorGraph& graph,
\n+
207 const Values& estimate, const std::string& filename);
\n+
208
\n+
210GTSAM_EXPORT GraphAndValues load3D(const std::string& filename);
\n+
211
\n+
212// Wrapper-friendly versions of parseFactors<Pose2> and parseFactors<Pose2>
\n+
213using BetweenFactorPose2s = std::vector<BetweenFactor<Pose2>::shared_ptr>;
\n+
214GTSAM_EXPORT BetweenFactorPose2s
\n+
215parse2DFactors(const std::string &filename,
\n+
216 const noiseModel::Diagonal::shared_ptr &model = nullptr,
\n+
217 size_t maxIndex = 0);
\n+
218
\n+
219using BetweenFactorPose3s = std::vector<BetweenFactor<Pose3>::shared_ptr>;
\n+
220GTSAM_EXPORT BetweenFactorPose3s
\n+
221parse3DFactors(const std::string &filename,
\n+
222 const noiseModel::Diagonal::shared_ptr &model = nullptr,
\n+
223 size_t maxIndex = 0);
\n+
224
\n+
225using BinaryMeasurementsUnit3 = std::vector<BinaryMeasurement<Unit3>>;
\n+
226using BinaryMeasurementsPoint3 = std::vector<BinaryMeasurement<Point3>>;
\n+
227using BinaryMeasurementsRot3 = std::vector<BinaryMeasurement<Rot3>>;
\n+
228
\n+
229#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
230inline boost::optional<IndexedPose> GTSAM_DEPRECATED
\n+
231parseVertex(std::istream& is, const std::string& tag) {
\n+
232 return parseVertexPose(is, tag);
\n+
233}
\n+
234
\n+
235GTSAM_EXPORT std::map<size_t, Pose3> GTSAM_DEPRECATED
\n+
236parse3DPoses(const std::string& filename, size_t maxIndex = 0);
\n+
237
\n+
238GTSAM_EXPORT std::map<size_t, Point3> GTSAM_DEPRECATED
\n+
239parse3DLandmarks(const std::string& filename, size_t maxIndex = 0);
\n+
240
\n+
241GTSAM_EXPORT GraphAndValues GTSAM_DEPRECATED
\n+
242load2D_robust(const std::string& filename,
\n+
243 const noiseModel::Base::shared_ptr& model, size_t maxIndex = 0);
\n+
244#endif
\n+
245} // namespace gtsam
\n+
Typedefs for easier changing of types.
\n+
Convenience functions for serializing data structures via boost.serialization.
\n+
Concept check for values that can be used in unit tests.
\n+
3D Pose
\n+
2D Pose
\n+
Calibration used by Bundler.
\n+
Base class for all pinhole cameras.
\n+\n+
Factor Graph consisting of non-linear factors.
\n+
A non-templated config holding any types of Manifold-group elements.
\n+
Data structure for dealing with Structure from Motion data.
\n+
Binary measurement represents a measurement between two keys in a graph. A binary measurement is simi...
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
GraphAndValues load2D(const string &filename, SharedNoiseModel model, size_t maxIndex, bool addNoise, bool smart, NoiseFormat noiseFormat, KernelFunctionType kernelFunctionType)
Load TORO/G2O style graph files.
Definition dataset.cpp:502
\n+
GTSAM_EXPORT std::map< size_t, T > parseVariables(const std::string &filename, size_t maxIndex=0)
Parse variables in a line-based text format (like g2o) into a map.
\n+
void writeG2o(const NonlinearFactorGraph &graph, const Values &estimate, const string &filename)
This function writes a g2o file from NonlinearFactorGraph and a Values structure.
Definition dataset.cpp:632
\n+
std::pair< size_t, Pose2 > IndexedPose
Return type for auxiliary functions.
Definition dataset.h:112
\n+
GraphAndValues readG2o(const string &g2oFile, const bool is3D, KernelFunctionType kernelFunctionType)
This function parses a g2o file and stores the measurements into a NonlinearFactorGraph and the initi...
Definition dataset.cpp:617
\n+
GTSAM_EXPORT std::vector< typename BetweenFactor< T >::shared_ptr > parseFactors(const std::string &filename, const noiseModel::Diagonal::shared_ptr &model=nullptr, size_t maxIndex=0)
Parse BetweenFactors in a line-based text format (like g2o) into a vector of shared pointers.
\n+
KernelFunctionType
Robust kernel type to wrap around quadratic noise model.
Definition dataset.h:75
\n+
NoiseFormat
Indicates how noise parameters are stored in file.
Definition dataset.h:66
\n+
@ NoiseFormatGRAPH
default: toro-style order, but covariance matrix !
Definition dataset.h:69
\n+
@ NoiseFormatAUTO
Try to guess covariance matrix layout.
Definition dataset.h:71
\n+
@ NoiseFormatTORO
Information matrix, but inf_ff inf_fs inf_ss inf_rr inf_fr inf_sr.
Definition dataset.h:68
\n+
@ NoiseFormatCOV
Covariance matrix C11, C12, C13, C22, C23, C33.
Definition dataset.h:70
\n+
@ NoiseFormatG2O
Information matrix I11, I12, I13, I22, I23, I33.
Definition dataset.h:67
\n+
boost::optional< IndexedLandmark > parseVertexLandmark(istream &is, const string &tag)
Parse G2O landmark vertex "id x y".
Definition dataset.cpp:187
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Definition CalibratedCamera.h:32
\n-
A pinhole camera class that has a Pose3 and a Calibration.
Definition PinholeCamera.h:33
\n-
Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const
project a 3D point from world coordinates into the image
Definition PinholePose.h:118
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Non-linear factor for a constraint derived from a 2D measurement.
Definition ProjectionFactor.h:40
\n-
bool verboseCheirality() const
return verbosity
Definition ProjectionFactor.h:181
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition ProjectionFactor.h:116
\n-
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition ProjectionFactor.h:125
\n-
Point2 measured_
2D measurement
Definition ProjectionFactor.h:44
\n-
GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > This
shorthand for this class
Definition ProjectionFactor.h:58
\n-
const Point2 & measured() const
return the measurement
Definition ProjectionFactor.h:166
\n-
boost::optional< POSE > body_P_sensor_
The pose of the sensor in the body frame.
Definition ProjectionFactor.h:46
\n-
boost::shared_ptr< CALIBRATION > K_
shared pointer to calibration object
Definition ProjectionFactor.h:45
\n-
~GenericProjectionFactor() override
Virtual destructor.
Definition ProjectionFactor.h:104
\n-
Vector evaluateError(const Pose3 &pose, const Point3 &point, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
Evaluate error h(x)-z and optionally derivatives.
Definition ProjectionFactor.h:135
\n-
GenericProjectionFactor()
Default constructor.
Definition ProjectionFactor.h:64
\n-
bool throwCheirality_
If true, rethrows Cheirality exceptions (default: false)
Definition ProjectionFactor.h:49
\n-
NoiseModelFactorN< POSE, LANDMARK > Base
shorthand for base class type
Definition ProjectionFactor.h:55
\n-
const boost::optional< POSE > & body_P_sensor() const
return the (optional) sensor pose with respect to the vehicle frame
Definition ProjectionFactor.h:176
\n-
bool throwCheirality() const
return flag for throwing cheirality exceptions
Definition ProjectionFactor.h:184
\n-
GenericProjectionFactor(const Point2 &measured, const SharedNoiseModel &model, Key poseKey, Key pointKey, const boost::shared_ptr< CALIBRATION > &K, bool throwCheirality, bool verboseCheirality, boost::optional< POSE > body_P_sensor=boost::none)
Constructor with exception-handling flags TODO: Mark argument order standard (keys,...
Definition ProjectionFactor.h:96
\n-
friend class boost::serialization::access
Serialization function.
Definition ProjectionFactor.h:189
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition ProjectionFactor.h:107
\n-
boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor
Definition ProjectionFactor.h:61
\n-
bool verboseCheirality_
If true, prints text for Cheirality exceptions (default: false)
Definition ProjectionFactor.h:50
\n-
GenericProjectionFactor(const Point2 &measured, const SharedNoiseModel &model, Key poseKey, Key pointKey, const boost::shared_ptr< CALIBRATION > &K, boost::optional< POSE > body_P_sensor=boost::none)
Constructor TODO: Mark argument order standard (keys, measurement, parameters)
Definition ProjectionFactor.h:78
\n-
const boost::shared_ptr< CALIBRATION > calibration() const
return the calibration object
Definition ProjectionFactor.h:171
\n+
boost::optional< IndexedEdge > parseEdge(istream &is, const string &tag)
Parse TORO/G2O edge "id1 id2 x y yaw".
Definition dataset.cpp:293
\n+
std::pair< NonlinearFactorGraph::shared_ptr, Values::shared_ptr > GraphAndValues
Return type for load functions, which return a graph and initial values.
Definition dataset.h:144
\n+
boost::optional< IndexedPose > parseVertexPose(istream &is, const string &tag)
Parse TORO/G2O vertex "id x y yaw".
Definition dataset.cpp:167
\n+
GraphAndValues load3D(const string &filename)
Load TORO 3D Graph.
Definition dataset.cpp:918
\n+
void save2D(const NonlinearFactorGraph &graph, const Values &config, const noiseModel::Diagonal::shared_ptr model, const string &filename)
save 2d graph
Definition dataset.cpp:584
\n+
string createRewrittenFileName(const string &name)
Creates a temporary file name that needs to be ignored in .gitingnore for checking read-write opratio...
Definition dataset.cpp:99
\n+
string findExampleDataFile(const string &name)
Find the full path to an example dataset distributed with gtsam.
Definition dataset.cpp:62
\n+
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n+
Definition NonlinearFactorGraph.h:55
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ProjectionFactor.h\n+dataset.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,335 +16,280 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 21#pragma once\n 22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh>\n-28#include \n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-38 template \n-_\b4_\b0 class _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-41 protected:\n-42\n-43 // Keep a copy of measurement and calibration for I/O\n-_\b4_\b4 _\bP_\bo_\bi_\bn_\bt_\b2 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-_\b4_\b5 boost::shared_ptr _\bK_\b_;\n-_\b4_\b6 boost::optional _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_;\n-47\n-48 // verbosity handling for Cheirality Exceptions\n-_\b4_\b9 bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n-_\b5_\b0 bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n-51\n-52 public:\n-53\n-_\b5_\b5 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b> _\bB_\ba_\bs_\be;\n-56\n-_\b5_\b8 typedef _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b,_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> _\bT_\bh_\bi_\bs;\n-59\n-_\b6_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-62\n-_\b6_\b4 _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() :\n-65 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(0, 0), _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false) {\n-66 }\n-67\n-_\b7_\b8 _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n-model,\n-79 _\bK_\be_\by poseKey, _\bK_\be_\by pointKey, const boost::shared_ptr& K,\n-80 boost::optional _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br = boost::none) :\n-81 _\bB_\ba_\bs_\be(model, poseKey, pointKey), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd), _\bK_\b_(K), _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_\n-(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br),\n-82 _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false) {}\n-83\n-_\b9_\b6 _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n-model,\n-97 _\bK_\be_\by poseKey, _\bK_\be_\by pointKey, const boost::shared_ptr& K,\n-98 bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by, bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by,\n-99 boost::optional _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br = boost::none) :\n-100 _\bB_\ba_\bs_\be(model, poseKey, pointKey), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd), _\bK_\b_(K), _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_\n-(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br),\n-101 _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by) {}\n-102\n-_\b1_\b0_\b4 _\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-105\n-_\b1_\b0_\b7 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-108 return boost::static_pointer_cast(\n-109 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this))); }\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b2_\b._\bh>\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+32#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n+33#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+34#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+35#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+36\n+37#include \n+38#include \n+39#include // for pair\n+40#include \n+41#include \n+42#include \n+43\n+44namespace _\bg_\bt_\bs_\ba_\bm {\n+45\n+57GTSAM_EXPORT std::string _\bf_\bi_\bn_\bd_\bE_\bx_\ba_\bm_\bp_\bl_\be_\bD_\ba_\bt_\ba_\bF_\bi_\bl_\be(const std::string& name);\n+58\n+63GTSAM_EXPORT std::string _\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bw_\br_\bi_\bt_\bt_\be_\bn_\bF_\bi_\bl_\be_\bN_\ba_\bm_\be(const std::string& name);\n+64\n+_\b6_\b6enum _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt {\n+_\b6_\b7 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bG_\b2_\bO,\n+_\b6_\b8 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bT_\bO_\bR_\bO,\n+_\b6_\b9 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bG_\bR_\bA_\bP_\bH,\n+_\b7_\b0 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bC_\bO_\bV,\n+71 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO\n+_\b7_\b2};\n+73\n+_\b7_\b5enum _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be {\n+76 KernelFunctionTypeNONE, KernelFunctionTypeHUBER, KernelFunctionTypeTUKEY\n+77};\n+78\n+85template \n+_\b8_\b6GTSAM_EXPORT std::map _\bp_\ba_\br_\bs_\be_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs(const std::string &filename,\n+87 size_t maxIndex = 0);\n+88\n+95template \n+96GTSAM_EXPORT std::vector>\n+_\b9_\b7parseMeasurements(const std::string &filename,\n+98 const noiseModel::Diagonal::shared_ptr &model = nullptr,\n+99 size_t maxIndex = 0);\n+100\n+105template \n+106GTSAM_EXPORT std::vector::shared_ptr>\n+_\b1_\b0_\b7_\bp_\ba_\br_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\bs(const std::string &filename,\n+108 const noiseModel::Diagonal::shared_ptr &model = nullptr,\n+109 size_t maxIndex = 0);\n 110\n-_\b1_\b1_\b6 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-DefaultKeyFormatter) const override {\n-117 std::cout << s << \"GenericProjectionFactor, z = \";\n-118 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b2_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-119 if(this->body_P_sensor_)\n-120 this->body_P_sensor_->print(\" sensor pose in body frame: \");\n-121 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n-122 }\n+_\b1_\b1_\b2typedef std::pair _\bI_\bn_\bd_\be_\bx_\be_\bd_\bP_\bo_\bs_\be;\n+113typedef std::pair IndexedLandmark;\n+114typedef std::pair, _\bP_\bo_\bs_\be_\b2> IndexedEdge;\n+115\n+121GTSAM_EXPORT boost::optional _\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bP_\bo_\bs_\be(std::istream& is,\n+122 const std::string& tag);\n 123\n-_\b1_\b2_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n-126 const _\bT_\bh_\bi_\bs *e = dynamic_cast(&p);\n-127 return e\n-128 && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol)\n-129 && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b2_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_, e->measured_, tol)\n-130 && this->K_->equals(*e->K_, tol)\n-131 && ((!_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_ && !e->body_P_sensor_) || (_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_ && e-\n->body_P_sensor_ && _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_->equals(*e->body_P_sensor_)));\n-132 }\n-133\n-_\b1_\b3_\b5 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bs_\be_\b3& pose, const _\bP_\bo_\bi_\bn_\bt_\b3& point,\n-136 boost::optional H1 = boost::none, boost::optional H2 =\n-boost::none) const override {\n-137 try {\n-138 if(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_) {\n-139 if(H1) {\n-140 gtsam::Matrix H0;\n-141 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> camera(pose.compose(*_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_, H0), *_\bK_\b_);\n-142 _\bP_\bo_\bi_\bn_\bt_\b2 reprojectionError(camera._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2, boost::none) -\n-_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-143 *H1 = *H1 * H0;\n-144 return reprojectionError;\n-145 } else {\n-146 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> camera(pose.compose(*_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_), *_\bK_\b_);\n-147 return camera._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2, boost::none) - _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-148 }\n-149 } else {\n-150 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> camera(pose, *_\bK_\b_);\n-151 return camera._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2, boost::none) - _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-152 }\n-153 } catch( _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn& e) {\n-154 if (H1) *H1 = Matrix::Zero(2,6);\n-155 if (H2) *H2 = Matrix::Zero(2,3);\n-156 if (_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_)\n-157 std::cout << e.what() << \": Landmark \"<< DefaultKeyFormatter(this->key2())\n-<<\n-158 \" moved behind camera \" << DefaultKeyFormatter(this->key1()) << std::endl;\n-159 if (_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_)\n-160 throw _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(this->key2());\n-161 }\n-162 return Vector2::Constant(2.0 * _\bK_\b_->fx());\n-163 }\n-164\n-_\b1_\b6_\b6 const _\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n-167 return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-168 }\n-169\n-_\b1_\b7_\b1 const boost::shared_ptr _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n-172 return _\bK_\b_;\n-173 }\n-174\n-_\b1_\b7_\b6 const boost::optional& _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br() const {\n-177 return _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_;\n-178 }\n-179\n-_\b1_\b8_\b1 inline bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const { return _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_; }\n-182\n-_\b1_\b8_\b4 inline bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const { return _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_; }\n-185\n-186 private:\n-187\n-_\b1_\b8_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-190 template\n-191 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-192 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-193 ar & BOOST_SERIALIZATION_NVP(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-194 ar & BOOST_SERIALIZATION_NVP(_\bK_\b_);\n-195 ar & BOOST_SERIALIZATION_NVP(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_);\n-196 ar & BOOST_SERIALIZATION_NVP(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_);\n-197 ar & BOOST_SERIALIZATION_NVP(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_);\n-198 }\n-199\n-200 public:\n-201 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-202};\n-203\n-205 template\n-_\b2_\b0_\b6 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br > :\n-207 public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {\n-208 };\n-209\n-210} // \\ namespace gtsam\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n-The most common 5DOF 3D->2D calibration.\n-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\n+129GTSAM_EXPORT boost::optional _\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\ba_\bn_\bd_\bm_\ba_\br_\bk(std::\n+istream& is,\n+130 const std::string& tag);\n+131\n+137GTSAM_EXPORT boost::optional _\bp_\ba_\br_\bs_\be_\bE_\bd_\bg_\be(std::istream& is,\n+138 const std::string& tag);\n+139\n+_\b1_\b4_\b3using _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs =\n+144 std::pair;\n+145\n+153GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs _\bl_\bo_\ba_\bd_\b2_\bD(\n+154 std::pair dataset, size_t maxIndex = 0,\n+155 bool addNoise = false,\n+156 bool smart = true, //\n+157 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt noiseFormat = _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO,\n+158 _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be kernelFunctionType = KernelFunctionTypeNONE);\n+159\n+171GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+172_\bl_\bo_\ba_\bd_\b2_\bD(const std::string& filename, _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl model =\n+_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(),\n+173 size_t maxIndex = 0, bool addNoise = false, bool smart = true,\n+174 _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt noiseFormat = _\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO, //\n+175 _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be kernelFunctionType = KernelFunctionTypeNONE);\n+176\n+178GTSAM_EXPORT void _\bs_\ba_\bv_\be_\b2_\bD(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n+179 const _\bV_\ba_\bl_\bu_\be_\bs& config, const noiseModel::Diagonal::shared_ptr model,\n+180 const std::string& filename);\n+181\n+190GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+191_\br_\be_\ba_\bd_\bG_\b2_\bo(const std::string& g2oFile, const bool is3D = false,\n+192 _\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be kernelFunctionType = KernelFunctionTypeNONE);\n+193\n+206GTSAM_EXPORT void _\bw_\br_\bi_\bt_\be_\bG_\b2_\bo(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n+207 const _\bV_\ba_\bl_\bu_\be_\bs& estimate, const std::string& filename);\n+208\n+210GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs _\bl_\bo_\ba_\bd_\b3_\bD(const std::string& filename);\n+211\n+212// Wrapper-friendly versions of parseFactors and parseFactors\n+213using BetweenFactorPose2s = std::vector::shared_ptr>;\n+214GTSAM_EXPORT BetweenFactorPose2s\n+215parse2DFactors(const std::string &filename,\n+216 const noiseModel::Diagonal::shared_ptr &model = nullptr,\n+217 size_t maxIndex = 0);\n+218\n+219using BetweenFactorPose3s = std::vector::shared_ptr>;\n+220GTSAM_EXPORT BetweenFactorPose3s\n+221parse3DFactors(const std::string &filename,\n+222 const noiseModel::Diagonal::shared_ptr &model = nullptr,\n+223 size_t maxIndex = 0);\n+224\n+225using BinaryMeasurementsUnit3 = std::vector>;\n+226using BinaryMeasurementsPoint3 = std::vector>;\n+227using BinaryMeasurementsRot3 = std::vector>;\n+228\n+229#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+230inline boost::optional GTSAM_DEPRECATED\n+231parseVertex(std::istream& is, const std::string& tag) {\n+232 return _\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bP_\bo_\bs_\be(is, tag);\n+233}\n+234\n+235GTSAM_EXPORT std::map GTSAM_DEPRECATED\n+236parse3DPoses(const std::string& filename, size_t maxIndex = 0);\n+237\n+238GTSAM_EXPORT std::map GTSAM_DEPRECATED\n+239parse3DLandmarks(const std::string& filename, size_t maxIndex = 0);\n+240\n+241GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs GTSAM_DEPRECATED\n+242load2D_robust(const std::string& filename,\n+243 const noiseModel::Base::shared_ptr& model, size_t maxIndex = 0);\n+244#endif\n+245} // namespace gtsam\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n+_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+Convenience functions for serializing data structures via boost.serialization.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bP_\bo_\bs_\be_\b3_\b._\bh\n 3D Pose\n+_\bP_\bo_\bs_\be_\b2_\b._\bh\n+2D Pose\n+_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n+Calibration used by Bundler.\n _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n Base class for all pinhole cameras.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n+_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+A non-templated config holding any types of Manifold-group elements.\n+_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b._\bh\n+Data structure for dealing with Structure from Motion data.\n+_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n+Binary measurement represents a measurement between two keys in a graph. A\n+binary measurement is simi...\n+_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\ba_\bd_\b2_\bD\n+GraphAndValues load2D(const string &filename, SharedNoiseModel model, size_t\n+maxIndex, bool addNoise, bool smart, NoiseFormat noiseFormat,\n+KernelFunctionType kernelFunctionType)\n+Load TORO/G2O style graph files.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:502\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n+GTSAM_EXPORT std::map< size_t, T > parseVariables(const std::string &filename,\n+size_t maxIndex=0)\n+Parse variables in a line-based text format (like g2o) into a map.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bG_\b2_\bo\n+void writeG2o(const NonlinearFactorGraph &graph, const Values &estimate, const\n+string &filename)\n+This function writes a g2o file from NonlinearFactorGraph and a Values\n+structure.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:632\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bd_\be_\bx_\be_\bd_\bP_\bo_\bs_\be\n+std::pair< size_t, Pose2 > IndexedPose\n+Return type for auxiliary functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:112\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\be_\ba_\bd_\bG_\b2_\bo\n+GraphAndValues readG2o(const string &g2oFile, const bool is3D,\n+KernelFunctionType kernelFunctionType)\n+This function parses a g2o file and stores the measurements into a\n+NonlinearFactorGraph and the initi...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:617\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+GTSAM_EXPORT std::vector< typename BetweenFactor< T >::shared_ptr >\n+parseFactors(const std::string &filename, const noiseModel::Diagonal::\n+shared_ptr &model=nullptr, size_t maxIndex=0)\n+Parse BetweenFactors in a line-based text format (like g2o) into a vector of\n+shared pointers.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\br_\bn_\be_\bl_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be\n+KernelFunctionType\n+Robust kernel type to wrap around quadratic noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt\n+NoiseFormat\n+Indicates how noise parameters are stored in file.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bG_\bR_\bA_\bP_\bH\n+@ NoiseFormatGRAPH\n+default: toro-style order, but covariance matrix !\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bA_\bU_\bT_\bO\n+@ NoiseFormatAUTO\n+Try to guess covariance matrix layout.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bT_\bO_\bR_\bO\n+@ NoiseFormatTORO\n+Information matrix, but inf_ff inf_fs inf_ss inf_rr inf_fr inf_sr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bC_\bO_\bV\n+@ NoiseFormatCOV\n+Covariance matrix C11, C12, C13, C22, C23, C33.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bF_\bo_\br_\bm_\ba_\bt_\bG_\b2_\bO\n+@ NoiseFormatG2O\n+Information matrix I11, I12, I13, I22, I23, I33.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bL_\ba_\bn_\bd_\bm_\ba_\br_\bk\n+boost::optional< IndexedLandmark > parseVertexLandmark(istream &is, const\n+string &tag)\n+Parse G2O landmark vertex \"id x y\".\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:187\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n Aliases.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n-A pinhole camera class that has a Pose3 and a Calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n-Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n-OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK >\n-Dcal=boost::none) const\n-project a 3D point from world coordinates into the image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-Non-linear factor for a constraint derived from a 2D measurement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n-bool verboseCheirality() const\n-return verbosity\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:181\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:116\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:125\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n-Point2 measured_\n-2D measurement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > This\n-shorthand for this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const Point2 & measured() const\n-return the measurement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:166\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_\n-boost::optional< POSE > body_P_sensor_\n-The pose of the sensor in the body frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bK_\b_\n-boost::shared_ptr< CALIBRATION > K_\n-shared pointer to calibration object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-~GenericProjectionFactor() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Pose3 &pose, const Point3 &point, boost::optional<\n-Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const\n-override\n-Evaluate error h(x)-z and optionally derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-GenericProjectionFactor()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_\n-bool throwCheirality_\n-If true, rethrows Cheirality exceptions (default: false)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-NoiseModelFactorN< POSE, LANDMARK > Base\n-shorthand for base class type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br\n-const boost::optional< POSE > & body_P_sensor() const\n-return the (optional) sensor pose with respect to the vehicle frame\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:176\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n-bool throwCheirality() const\n-return flag for throwing cheirality exceptions\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-GenericProjectionFactor(const Point2 &measured, const SharedNoiseModel &model,\n-Key poseKey, Key pointKey, const boost::shared_ptr< CALIBRATION > &K, bool\n-throwCheirality, bool verboseCheirality, boost::optional< POSE >\n-body_P_sensor=boost::none)\n-Constructor with exception-handling flags TODO: Mark argument order standard\n-(keys,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shorthand for a smart pointer to a factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_\n-bool verboseCheirality_\n-If true, prints text for Cheirality exceptions (default: false)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-GenericProjectionFactor(const Point2 &measured, const SharedNoiseModel &model,\n-Key poseKey, Key pointKey, const boost::shared_ptr< CALIBRATION > &K, boost::\n-optional< POSE > body_P_sensor=boost::none)\n-Constructor TODO: Mark argument order standard (keys, measurement, parameters)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-const boost::shared_ptr< CALIBRATION > calibration() const\n-return the calibration object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:171\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bE_\bd_\bg_\be\n+boost::optional< IndexedEdge > parseEdge(istream &is, const string &tag)\n+Parse TORO/G2O edge \"id1 id2 x y yaw\".\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:293\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bA_\bn_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+std::pair< NonlinearFactorGraph::shared_ptr, Values::shared_ptr >\n+GraphAndValues\n+Return type for load functions, which return a graph and initial values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.h:144\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\ba_\br_\bs_\be_\bV_\be_\br_\bt_\be_\bx_\bP_\bo_\bs_\be\n+boost::optional< IndexedPose > parseVertexPose(istream &is, const string &tag)\n+Parse TORO/G2O vertex \"id x y yaw\".\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\ba_\bd_\b3_\bD\n+GraphAndValues load3D(const string &filename)\n+Load TORO 3D Graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:918\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\ba_\bv_\be_\b2_\bD\n+void save2D(const NonlinearFactorGraph &graph, const Values &config, const\n+noiseModel::Diagonal::shared_ptr model, const string &filename)\n+save 2d graph\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:584\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bw_\br_\bi_\bt_\bt_\be_\bn_\bF_\bi_\bl_\be_\bN_\ba_\bm_\be\n+string createRewrittenFileName(const string &name)\n+Creates a temporary file name that needs to be ignored in .gitingnore for\n+checking read-write opratio...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bi_\bn_\bd_\bE_\bx_\ba_\bm_\bp_\bl_\be_\bD_\ba_\bt_\ba_\bF_\bi_\bl_\be\n+string findExampleDataFile(const string &name)\n+Find the full path to an example dataset distributed with gtsam.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn dataset.cpp:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+A 2D pose (Point2,Rot2)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01286_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01286_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/RegularImplicitSchurFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/KarcherMeanFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,587 +98,94 @@\n
No Matches
\n \n \n \n \n \n
\n-
RegularImplicitSchurFactor.h
\n+
KarcherMeanFactor.h
\n
\n
\n-Go to the documentation of this file.
1
\n-
8#pragma once
\n-
9
\n-\n-\n-\n-
13
\n-
14#include <iosfwd>
\n-
15#include <map>
\n-
16#include <string>
\n-
17#include <vector>
\n-
18
\n-
19namespace gtsam {
\n-
20
\n-
38template<class CAMERA>
\n-
\n-\n-
40
\n-
41public:
\n-\n-
43 typedef boost::shared_ptr<This> shared_ptr;
\n-
44
\n-
45protected:
\n-
46
\n-
47 // This factor is closely related to a CameraSet
\n-
48 typedef CameraSet<CAMERA> Set;
\n-
49
\n-
50 typedef typename CAMERA::Measurement Z;
\n-
51 static const int D = traits<CAMERA>::dimension;
\n-
52 static const int ZDim = traits<Z>::dimension;
\n-
53
\n-
54 typedef Eigen::Matrix<double, ZDim, D> MatrixZD;
\n-
55 typedef Eigen::Matrix<double, D, D> MatrixDD;
\n-
56 typedef std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> > FBlocks;
\n-
57
\n-
58 FBlocks FBlocks_;
\n-
59 const Matrix PointCovariance_;
\n-
60 const Matrix E_;
\n-
61 const Vector b_;
\n-
62
\n-
63public:
\n+
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n+
11
\n+
12/*
\n+
13 * @file KarcherMeanFactor.h
\n+
14 * @author Frank Dellaert
\n+
15 * @date March 2019
\n+
16 */
\n+
17
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Matrix.h>
\n+\n+
22
\n+
23#include <map>
\n+
24#include <vector>
\n+
25
\n+
26namespace gtsam {
\n+
32template <class T>
\n+
33T FindKarcherMean(const std::vector<T, Eigen::aligned_allocator<T>> &rotations);
\n+
34
\n+
35template <class T> T FindKarcherMean(std::initializer_list<T> &&rotations);
\n+
36
\n+
\n+
45template <class T> class KarcherMeanFactor : public NonlinearFactor {
\n+
46 // Compile time dimension: can be -1
\n+
47 enum { D = traits<T>::dimension };
\n+
48
\n+
49 // Runtime dimension: always >=0
\n+
50 size_t d_;
\n+
51
\n+
53 boost::shared_ptr<JacobianFactor> whitenedJacobian_;
\n+
54
\n+
55public:
\n+
61 template <typename CONTAINER>
\n+
62 KarcherMeanFactor(const CONTAINER &keys, int d = D,
\n+
63 boost::optional<double> beta = boost::none);
\n
64
\n-\n-
68
\n+
66 ~KarcherMeanFactor() override {}
\n+
67
\n+
69 double error(const Values &c) const override { return 0; }
\n
70
\n-
\n-
80 RegularImplicitSchurFactor(const KeyVector& keys, const FBlocks& Fs,
\n-
81 const Matrix& E, const Matrix& P, const Vector& b)
\n-
82 : GaussianFactor(keys), FBlocks_(Fs), PointCovariance_(P), E_(E), b_(b) {}
\n-
\n-
83
\n-
\n-\n-
86 }
\n-
\n-
87
\n-
88 const FBlocks& Fs() const {
\n-
89 return FBlocks_;
\n-
90 }
\n-
91
\n-
92 const Matrix& E() const {
\n-
93 return E_;
\n-
94 }
\n-
95
\n-
96 const Vector& b() const {
\n-
97 return b_;
\n-
98 }
\n-
99
\n-
100 const Matrix& getPointCovariance() const {
\n-
101 return PointCovariance_;
\n-
102 }
\n-
103
\n-
\n-
105 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
106 DefaultKeyFormatter) const override {
\n-
107 std::cout << " RegularImplicitSchurFactor " << std::endl;
\n-
108 Factor::print(s);
\n-
109 for (size_t pos = 0; pos < size(); ++pos) {
\n-
110 std::cout << "Fblock:\\n" << FBlocks_[pos] << std::endl;
\n-
111 }
\n-
112 std::cout << "PointCovariance:\\n" << PointCovariance_ << std::endl;
\n-
113 std::cout << "E:\\n" << E_ << std::endl;
\n-
114 std::cout << "b:\\n" << b_.transpose() << std::endl;
\n-
115 }
\n-
\n-
116
\n-
\n-
118 bool equals(const GaussianFactor& lf, double tol) const override {
\n-
119 const This* f = dynamic_cast<const This*>(&lf);
\n-
120 if (!f)
\n-
121 return false;
\n-
122 for (size_t k = 0; k < FBlocks_.size(); ++k) {
\n-
123 if (keys_[k] != f->keys_[k])
\n-
124 return false;
\n-
125 if (!equal_with_abs_tol(FBlocks_[k], f->FBlocks_[k], tol))
\n-
126 return false;
\n-
127 }
\n-\n-
129 && equal_with_abs_tol(E_, f->E_, tol)
\n-
130 && equal_with_abs_tol(b_, f->b_, tol);
\n-
131 }
\n-
\n-
132
\n-
\n-
134 DenseIndex getDim(const_iterator variable) const override {
\n-
135 return D;
\n-
136 }
\n-
\n-
137
\n-
\n-\n-
139 SymmetricBlockMatrix* info) const override {
\n-
140 throw std::runtime_error(
\n-
141 "RegularImplicitSchurFactor::updateHessian non implemented");
\n-
142 }
\n-
\n-
\n-
143 Matrix augmentedJacobian() const override {
\n-
144 throw std::runtime_error(
\n-
145 "RegularImplicitSchurFactor::augmentedJacobian non implemented");
\n-
146 return Matrix();
\n-
147 }
\n-
\n-
\n-
148 std::pair<Matrix, Vector> jacobian() const override {
\n-
149 throw std::runtime_error(
\n-
150 "RegularImplicitSchurFactor::jacobian non implemented");
\n-
151 return std::make_pair(Matrix(), Vector());
\n-
152 }
\n-
\n-
153
\n-
\n-
155 Matrix augmentedInformation() const override {
\n-
156 // Do the Schur complement
\n-
157 SymmetricBlockMatrix augmentedHessian =
\n-
158 Set::SchurComplement(FBlocks_, E_, b_);
\n-
159 return augmentedHessian.selfadjointView();
\n-
160 }
\n-
\n-
161
\n-
\n-
163 Matrix information() const override {
\n-
164 Matrix augmented = augmentedInformation();
\n-
165 int m = this->keys_.size();
\n-
166 size_t M = D * m;
\n-
167 return augmented.block(0, 0, M, M);
\n-
168 }
\n-
\n-
169
\n-\n-
172
\n-
\n-
174 void hessianDiagonalAdd(VectorValues &d) const override {
\n-
175 // diag(Hessian) = diag(F' * (I - E * PointCov * E') * F);
\n-
176 for (size_t k = 0; k < size(); ++k) { // for each camera
\n-
177 Key j = keys_[k];
\n-
178
\n-
179 // Calculate Fj'*Ej for the current camera (observing a single point)
\n-
180 // D x 3 = (D x ZDim) * (ZDim x 3)
\n-
181 const MatrixZD& Fj = FBlocks_[k];
\n-
182 Eigen::Matrix<double, D, 3> FtE = Fj.transpose()
\n-
183 * E_.block<ZDim, 3>(ZDim * k, 0);
\n-
184
\n-
185 Eigen::Matrix<double, D, 1> dj;
\n-
186 for (int k = 0; k < D; ++k) { // for each diagonal element of the camera hessian
\n-
187 // Vector column_k_Fj = Fj.col(k);
\n-
188 dj(k) = Fj.col(k).squaredNorm(); // dot(column_k_Fj, column_k_Fj);
\n-
189 // Vector column_k_FtE = FtE.row(k);
\n-
190 // (1 x 1) = (1 x 3) * (3 * 3) * (3 x 1)
\n-
191 dj(k) -= FtE.row(k) * PointCovariance_ * FtE.row(k).transpose();
\n-
192 }
\n-
193
\n-
194 auto result = d.emplace(j, dj);
\n-
195 if(!result.second) {
\n-
196 result.first->second += dj;
\n-
197 }
\n-
198 }
\n-
199 }
\n-
\n-
200
\n-
\n-
205 void hessianDiagonal(double* d) const override {
\n-
206 // diag(Hessian) = diag(F' * (I - E * PointCov * E') * F);
\n-
207 // Use eigen magic to access raw memory
\n-
208 typedef Eigen::Matrix<double, D, 1> DVector;
\n-
209 typedef Eigen::Map<DVector> DMap;
\n-
210
\n-
211 for (size_t pos = 0; pos < size(); ++pos) { // for each camera in the factor
\n-
212 Key j = keys_[pos];
\n-
213
\n-
214 // Calculate Fj'*Ej for the current camera (observing a single point)
\n-
215 // D x 3 = (D x ZDim) * (ZDim x 3)
\n-
216 const MatrixZD& Fj = FBlocks_[pos];
\n-
217 Eigen::Matrix<double, D, 3> FtE = Fj.transpose()
\n-
218 * E_.block<ZDim, 3>(ZDim * pos, 0);
\n-
219
\n-
220 DVector dj;
\n-
221 for (int k = 0; k < D; ++k) { // for each diagonal element of the camera hessian
\n-
222 dj(k) = Fj.col(k).squaredNorm();
\n-
223 // (1 x 1) = (1 x 3) * (3 * 3) * (3 x 1)
\n-
224 dj(k) -= FtE.row(k) * PointCovariance_ * FtE.row(k).transpose();
\n-
225 }
\n-
226 DMap(d + D * j) += dj;
\n-
227 }
\n-
228 }
\n-
\n-
229
\n-
\n-
231 std::map<Key, Matrix> hessianBlockDiagonal() const override {
\n-
232 std::map<Key, Matrix> blocks;
\n-
233 // F'*(I - E*P*E')*F
\n-
234 for (size_t pos = 0; pos < size(); ++pos) {
\n-
235 Key j = keys_[pos];
\n-
236 // F'*F - F'*E*P*E'*F e.g. (9*2)*(2*9) - (9*2)*(2*3)*(3*3)*(3*2)*(2*9)
\n-
237 const MatrixZD& Fj = FBlocks_[pos];
\n-
238 // Eigen::Matrix<double, D, 3> FtE = Fj.transpose()
\n-
239 // * E_.block<ZDim, 3>(ZDim * pos, 0);
\n-
240 // blocks[j] = Fj.transpose() * Fj
\n-
241 // - FtE * PointCovariance_ * FtE.transpose();
\n-
242
\n-
243 const Matrix23& Ej = E_.block<ZDim, 3>(ZDim * pos, 0);
\n-
244 blocks[j] = Fj.transpose()
\n-
245 * (Fj - Ej * PointCovariance_ * Ej.transpose() * Fj);
\n-
246
\n-
247 // F'*(I - E*P*E')*F, TODO: this should work, but it does not :-(
\n-
248 // static const Eigen::Matrix<double, ZDim, ZDim> I2 = eye(ZDim);
\n-
249 // Matrix2 Q = //
\n-
250 // I2 - E_.block<ZDim, 3>(ZDim * pos, 0) * PointCovariance_ * E_.block<ZDim, 3>(ZDim * pos, 0).transpose();
\n-
251 // blocks[j] = Fj.transpose() * Q * Fj;
\n-
252 }
\n-
253 return blocks;
\n-
254 }
\n-
\n-
255
\n-
\n-\n-
257 return boost::make_shared<RegularImplicitSchurFactor<CAMERA> >(keys_,
\n-\n-
259 throw std::runtime_error(
\n-
260 "RegularImplicitSchurFactor::clone non implemented");
\n-
261 }
\n-
\n-
262
\n-
\n-\n-
264 return boost::make_shared<RegularImplicitSchurFactor<CAMERA> >(keys_,
\n-\n-
266 throw std::runtime_error(
\n-
267 "RegularImplicitSchurFactor::negate non implemented");
\n-
268 }
\n-
\n-
269
\n-
270 // Raw Vector version of y += F'*alpha*(I - E*P*E')*F*x, for testing
\n-
271 static
\n-
272 void multiplyHessianAdd(const Matrix& F, const Matrix& E,
\n-
273 const Matrix& PointCovariance, double alpha, const Vector& x, Vector& y) {
\n-
274 Vector e1 = F * x;
\n-
275 Vector d1 = E.transpose() * e1;
\n-
276 Vector d2 = PointCovariance * d1;
\n-
277 Vector e2 = E * d2;
\n-
278 Vector e3 = alpha * (e1 - e2);
\n-
279 y += F.transpose() * e3;
\n-
280 }
\n-
281
\n-
282 typedef std::vector<Vector2, Eigen::aligned_allocator<Vector2>> Error2s;
\n-
283
\n-
\n-
287 void projectError2(const Error2s& e1, Error2s& e2) const {
\n-
288
\n-
289 // d1 = E.transpose() * (e1-ZDim*b) = (3*2m)*2m
\n-
290 Vector3 d1;
\n-
291 d1.setZero();
\n-
292 for (size_t k = 0; k < size(); k++)
\n-
293 d1 += E_.block<ZDim, 3>(ZDim * k, 0).transpose()
\n-
294 * (e1[k] - ZDim * b_.segment<ZDim>(k * ZDim));
\n-
295
\n-
296 // d2 = E.transpose() * e1 = (3*2m)*2m
\n-
297 Vector3 d2 = PointCovariance_ * d1;
\n-
298
\n-
299 // e3 = alpha*(e1 - E*d2) = 1*[2m-(2m*3)*3]
\n-
300 for (size_t k = 0; k < size(); k++)
\n-
301 e2[k] = e1[k] - ZDim * b_.segment<ZDim>(k * ZDim)
\n-
302 - E_.block<ZDim, 3>(ZDim * k, 0) * d2;
\n-
303 }
\n-
\n-
304
\n-
305 /*
\n-
306 * This definition matches the linearized error in the Hessian Factor:
\n-
307 * LinError(x) = x'*H*x - 2*x'*eta + f
\n-
308 * with:
\n-
309 * H = F' * (I-E'*P*E) * F = F' * Q * F
\n-
310 * eta = F' * (I-E'*P*E) * b = F' * Q * b
\n-
311 * f = nonlinear error
\n-
312 * (x'*H*x - 2*x'*eta + f) = x'*F'*Q*F*x - 2*x'*F'*Q *b + f = x'*F'*Q*(F*x - 2*b) + f
\n-
313 */
\n-
314 double error(const VectorValues& x) const override {
\n-
315
\n-
316 // resize does not do malloc if correct size
\n-
317 e1.resize(size());
\n-
318 e2.resize(size());
\n-
319
\n-
320 // e1 = F * x - b = (2m*dm)*dm
\n-
321 for (size_t k = 0; k < size(); ++k)
\n-
322 e1[k] = FBlocks_[k] * x.at(keys_[k]);
\n-
323 projectError2(e1, e2);
\n-
324
\n-
325 double result = 0;
\n-
326 for (size_t k = 0; k < size(); ++k)
\n-
327 result += dot(e1[k], e2[k]);
\n-
328
\n-
329 double f = b_.squaredNorm();
\n-
330 return 0.5 * (result + f);
\n-
331 }
\n-
332
\n-
333 // needed to be GaussianFactor - (I - E*P*E')*(F*x - b)
\n-
334 // This is wrong and does not match the definition in Hessian,
\n-
335 // but it matches the definition of the Jacobian factor (JF)
\n-
336 double errorJF(const VectorValues& x) const {
\n-
337
\n-
338 // resize does not do malloc if correct size
\n-
339 e1.resize(size());
\n-
340 e2.resize(size());
\n-
341
\n-
342 // e1 = F * x - b = (2m*dm)*dm
\n-
343 for (size_t k = 0; k < size(); ++k)
\n-
344 e1[k] = FBlocks_[k] * x.at(keys_[k]) - b_.segment<ZDim>(k * ZDim);
\n-
345 projectError(e1, e2);
\n-
346
\n-
347 double result = 0;
\n-
348 for (size_t k = 0; k < size(); ++k)
\n-
349 result += dot(e2[k], e2[k]);
\n-
350
\n-
351 // std::cout << "implicitFactor::error result " << result << std::endl;
\n-
352 return 0.5 * result;
\n-
353 }
\n-
\n-
357 void projectError(const Error2s& e1, Error2s& e2) const {
\n-
358
\n-
359 // d1 = E.transpose() * e1 = (3*2m)*2m
\n-
360 Vector3 d1;
\n-
361 d1.setZero();
\n-
362 for (size_t k = 0; k < size(); k++)
\n-
363 d1 += E_.block<ZDim, 3>(ZDim * k, 0).transpose() * e1[k];
\n-
364
\n-
365 // d2 = E.transpose() * e1 = (3*2m)*2m
\n-
366 Vector3 d2 = PointCovariance_ * d1;
\n-
367
\n-
368 // e3 = alpha*(e1 - E*d2) = 1*[2m-(2m*3)*3]
\n-
369 for (size_t k = 0; k < size(); k++)
\n-
370 e2[k] = e1[k] - E_.block<ZDim, 3>(ZDim * k, 0) * d2;
\n-
371 }
\n-
\n-
372
\n-
374 mutable Error2s e1, e2;
\n-
375
\n-
\n-
380 void multiplyHessianAdd(double alpha, const double* x, double* y) const {
\n-
381
\n-
382 // Use eigen magic to access raw memory
\n-
383 typedef Eigen::Matrix<double, D, 1> DVector;
\n-
384 typedef Eigen::Map<DVector> DMap;
\n-
385 typedef Eigen::Map<const DVector> ConstDMap;
\n-
386
\n-
387 // resize does not do malloc if correct size
\n-
388 e1.resize(size());
\n-
389 e2.resize(size());
\n-
390
\n-
391 // e1 = F * x = (2m*dm)*dm
\n-
392 for (size_t k = 0; k < size(); ++k) {
\n-
393 Key key = keys_[k];
\n-
394 e1[k] = FBlocks_[k] * ConstDMap(x + D * key);
\n-
395 }
\n-
396
\n-
397 projectError(e1, e2);
\n-
398
\n-
399 // y += F.transpose()*e2 = (2d*2m)*2m
\n-
400 for (size_t k = 0; k < size(); ++k) {
\n-
401 Key key = keys_[k];
\n-
402 DMap(y + D * key) += FBlocks_[k].transpose() * alpha * e2[k];
\n-
403 }
\n-
404 }
\n-
\n-
405
\n-
406 void multiplyHessianAdd(double alpha, const double* x, double* y,
\n-
407 std::vector<size_t> keys) const {
\n-
408 }
\n-
409
\n-
\n-
413 void multiplyHessianAdd(double alpha, const VectorValues& x,
\n-
414 VectorValues& y) const override {
\n-
415
\n-
416 // resize does not do malloc if correct size
\n-
417 e1.resize(size());
\n-
418 e2.resize(size());
\n-
419
\n-
420 // e1 = F * x = (2m*dm)*dm
\n-
421 for (size_t k = 0; k < size(); ++k)
\n-
422 e1[k] = FBlocks_[k] * x.at(keys_[k]);
\n-
423
\n-
424 projectError(e1, e2);
\n-
425
\n-
426 // y += F.transpose()*e2 = (2d*2m)*2m
\n-
427 for (size_t k = 0; k < size(); ++k) {
\n-
428 Key key = keys_[k];
\n-
429 static const Vector empty;
\n-
430 std::pair<VectorValues::iterator, bool> it = y.tryInsert(key, empty);
\n-
431 Vector& yi = it.first->second;
\n-
432 // Create the value as a zero vector if it does not exist.
\n-
433 if (it.second)
\n-
434 yi = Vector::Zero(FBlocks_[k].cols());
\n-
435 yi += FBlocks_[k].transpose() * alpha * e2[k];
\n-
436 }
\n-
437 }
\n-
\n-
438
\n-
\n-
442 void multiplyHessianDummy(double alpha, const VectorValues& x,
\n-
443 VectorValues& y) const {
\n-
444
\n-
445 for (size_t k = 0; k < size(); ++k) {
\n-
446 static const Vector empty;
\n-
447 Key key = keys_[k];
\n-
448 std::pair<VectorValues::iterator, bool> it = y.tryInsert(key, empty);
\n-
449 Vector& yi = it.first->second;
\n-
450 yi = x.at(key);
\n-
451 }
\n-
452 }
\n-
\n-
453
\n-
\n-
457 VectorValues gradientAtZero() const override {
\n-
458 // calculate Q*b
\n-
459 e1.resize(size());
\n-
460 e2.resize(size());
\n-
461 for (size_t k = 0; k < size(); k++)
\n-
462 e1[k] = b_.segment<ZDim>(ZDim * k);
\n-
463 projectError(e1, e2);
\n-
464
\n-
465 // g = F.transpose()*e2
\n-
466 VectorValues g;
\n-
467 for (size_t k = 0; k < size(); ++k) {
\n-
468 Key key = keys_[k];
\n-
469 g.insert(key, -FBlocks_[k].transpose() * e2[k]);
\n-
470 }
\n-
471
\n-
472 // return it
\n-
473 return g;
\n-
474 }
\n-
\n-
475
\n-
\n-
479 void gradientAtZero(double* d) const override {
\n-
480
\n-
481 // Use eigen magic to access raw memory
\n-
482 typedef Eigen::Matrix<double, D, 1> DVector;
\n-
483 typedef Eigen::Map<DVector> DMap;
\n-
484
\n-
485 // calculate Q*b
\n-
486 e1.resize(size());
\n-
487 e2.resize(size());
\n-
488 for (size_t k = 0; k < size(); k++)
\n-
489 e1[k] = b_.segment<ZDim>(ZDim * k);
\n-
490 projectError(e1, e2);
\n-
491
\n-
492 for (size_t k = 0; k < size(); ++k) { // for each camera in the factor
\n-
493 Key j = keys_[k];
\n-
494 DMap(d + D * j) += -FBlocks_[k].transpose() * e2[k];
\n-
495 }
\n-
496 }
\n-
\n-
497
\n-
\n-
499 Vector gradient(Key key, const VectorValues& x) const override {
\n-
500 throw std::runtime_error(
\n-
501 "gradient for RegularImplicitSchurFactor is not implemented yet");
\n-
502 }
\n-
\n-
503
\n-
504};
\n-
\n-
505// end class RegularImplicitSchurFactor
\n-
506
\n-
507template<class CAMERA>
\n-\n-
509
\n-
510template<class CAMERA>
\n-\n-
512
\n-
513// traits
\n-
\n-
514template<class CAMERA> struct traits<RegularImplicitSchurFactor<CAMERA> > : public Testable<
\n-
515 RegularImplicitSchurFactor<CAMERA> > {
\n-
516};
\n-
\n-
517
\n-
518}
\n-
519
\n-
Base class to create smart factors on poses or cameras.
\n-
Factor Graph Values.
\n-\n+
72 size_t dim() const override { return d_; }
\n+
73
\n+
\n+
75 boost::shared_ptr<GaussianFactor> linearize(const Values &c) const override {
\n+
76 return whitenedJacobian_;
\n+
77 }
\n+
\n+
78};
\n+
\n+
79// \\KarcherMeanFactor
\n+
80} // namespace gtsam
\n+
typedef and functions to augment Eigen's MatrixXd
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j).
Definition SymmetricBlockMatrix.h:156
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
bool empty() const
Whether the factor is empty (involves zero variables).
Definition Factor.h:128
\n-
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n-
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n-
size_t size() const
Definition Factor.h:157
\n-
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n-
VectorValues hessianDiagonal() const
Return the diagonal of the Hessian for this factor.
Definition GaussianFactor.cpp:35
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
iterator insert(const std::pair< Key, Vector > &key_value)
Insert a vector value with key j.
Definition VectorValues.cpp:91
\n-
std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)
Emplace a vector value with key j.
Definition VectorValues.h:185
\n-
Vector & at(Key j)
Read/write access to the vector value with key j, throws std::out_of_range if j does not exist,...
Definition VectorValues.h:139
\n-
std::pair< iterator, bool > tryInsert(Key j, const Vector &value)
insert that mimics the STL map insert - if the value already exists, the map is not modified and an i...
Definition VectorValues.h:209
\n-
RegularImplicitSchurFactor.
Definition RegularImplicitSchurFactor.h:39
\n-
const Matrix E_
The 2m*3 E Jacobian with respect to the point.
Definition RegularImplicitSchurFactor.h:60
\n-
void projectError(const Error2s &e1, Error2s &e2) const
Calculate corrected error Q*e = (I - E*P*E')*e.
Definition RegularImplicitSchurFactor.h:357
\n-
GaussianFactor::shared_ptr clone() const override
Clone a factor (make a deep copy)
Definition RegularImplicitSchurFactor.h:256
\n-
void hessianDiagonalAdd(VectorValues &d) const override
Add the diagonal of the Hessian for this factor to existing VectorValues.
Definition RegularImplicitSchurFactor.h:174
\n-
RegularImplicitSchurFactor(const KeyVector &keys, const FBlocks &Fs, const Matrix &E, const Matrix &P, const Vector &b)
Construct from blocks of F, E, inv(E'*E), and RHS vector b.
Definition RegularImplicitSchurFactor.h:80
\n-
RegularImplicitSchurFactor()
Constructor.
Definition RegularImplicitSchurFactor.h:66
\n-
const Vector b_
2m-dimensional RHS vector
Definition RegularImplicitSchurFactor.h:61
\n-
std::pair< Matrix, Vector > jacobian() const override
Return the dense Jacobian and right-hand-side , with the noise models baked into A and b.
Definition RegularImplicitSchurFactor.h:148
\n-
Eigen::Matrix< double, D, D > MatrixDD
camera Hessian
Definition RegularImplicitSchurFactor.h:55
\n-
void gradientAtZero(double *d) const override
Calculate gradient, which is -F'Q*b, see paper - RAW MEMORY ACCESS.
Definition RegularImplicitSchurFactor.h:479
\n-
static const int ZDim
Measurement dimension.
Definition RegularImplicitSchurFactor.h:52
\n-
Matrix information() const override
Compute full information matrix
Definition RegularImplicitSchurFactor.h:163
\n-
~RegularImplicitSchurFactor() override
Destructor.
Definition RegularImplicitSchurFactor.h:85
\n-
void updateHessian(const KeyVector &keys, SymmetricBlockMatrix *info) const override
Update an information matrix by adding the information corresponding to this factor (used internally ...
Definition RegularImplicitSchurFactor.h:138
\n-
FBlocks FBlocks_
All ZDim*D F blocks (one for each camera)
Definition RegularImplicitSchurFactor.h:58
\n-
VectorValues gradientAtZero() const override
Calculate gradient, which is -F'Q*b, see paper.
Definition RegularImplicitSchurFactor.h:457
\n-
Eigen::Matrix< double, ZDim, D > MatrixZD
type of an F block
Definition RegularImplicitSchurFactor.h:54
\n-
const Matrix PointCovariance_
the 3*3 matrix P = inv(E'E) (2*2 if degenerate)
Definition RegularImplicitSchurFactor.h:59
\n-
void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const override
Hessian-vector multiply, i.e.
Definition RegularImplicitSchurFactor.h:413
\n-
std::map< Key, Matrix > hessianBlockDiagonal() const override
Return the block diagonal of the Hessian for this factor.
Definition RegularImplicitSchurFactor.h:231
\n-
Matrix augmentedInformation() const override
Compute full augmented information matrix
Definition RegularImplicitSchurFactor.h:155
\n-
GaussianFactor::shared_ptr negate() const override
Construct the corresponding anti-factor to negate information stored stored in this factor.
Definition RegularImplicitSchurFactor.h:263
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition RegularImplicitSchurFactor.h:43
\n-
Error2s e1
Scratch space for multiplyHessianAdd.
Definition RegularImplicitSchurFactor.h:374
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition RegularImplicitSchurFactor.h:105
\n-
DenseIndex getDim(const_iterator variable) const override
Degrees of freedom of camera.
Definition RegularImplicitSchurFactor.h:134
\n-
bool equals(const GaussianFactor &lf, double tol) const override
equals
Definition RegularImplicitSchurFactor.h:118
\n-
Matrix augmentedJacobian() const override
Return a dense Jacobian matrix, augmented with b with the noise models baked into A and b.
Definition RegularImplicitSchurFactor.h:143
\n-
RegularImplicitSchurFactor This
Typedef to this class.
Definition RegularImplicitSchurFactor.h:42
\n-
static const int D
Camera dimension.
Definition RegularImplicitSchurFactor.h:51
\n-
void projectError2(const Error2s &e1, Error2s &e2) const
Calculate corrected error Q*(e-ZDim*b) = (I - E*P*E')*(e-ZDim*b)
Definition RegularImplicitSchurFactor.h:287
\n-
void multiplyHessianAdd(double alpha, const double *x, double *y) const
double* Hessian-vector multiply, i.e.
Definition RegularImplicitSchurFactor.h:380
\n-
void hessianDiagonal(double *d) const override
add the contribution of this factor to the diagonal of the hessian d(output) = d(input) + deltaHessia...
Definition RegularImplicitSchurFactor.h:205
\n-
void multiplyHessianDummy(double alpha, const VectorValues &x, VectorValues &y) const
Dummy version to measure overhead of key access.
Definition RegularImplicitSchurFactor.h:442
\n-
Vector gradient(Key key, const VectorValues &x) const override
Gradient wrt a key at any values.
Definition RegularImplicitSchurFactor.h:499
\n-
The Factor::error simply extracts the.
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
The KarcherMeanFactor creates a constraint on all SO(n) variables with given keys that the Karcher me...
Definition KarcherMeanFactor.h:45
\n+
double error(const Values &c) const override
Calculate the error of the factor: always zero.
Definition KarcherMeanFactor.h:69
\n+
size_t dim() const override
get the dimension of the factor (number of rows on linearization)
Definition KarcherMeanFactor.h:72
\n+
boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override
linearize to a GaussianFactor
Definition KarcherMeanFactor.h:75
\n+
~KarcherMeanFactor() override
Destructor.
Definition KarcherMeanFactor.h:66
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,729 +1,111 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-RegularImplicitSchurFactor.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1\n-8#pragma once\n+KarcherMeanFactor.h\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+7\n+8 * See LICENSE for the license information\n 9\n-10#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh>\n-11#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-13\n-14#include \n-15#include \n-16#include \n-17#include \n-18\n-19namespace _\bg_\bt_\bs_\ba_\bm {\n-20\n-38template\n-_\b3_\b9class _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br: public _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n-40\n-41public:\n-_\b4_\b2 typedef _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-_\b4_\b3 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-44\n-45protected:\n-46\n-47 // This factor is closely related to a CameraSet\n-48 typedef _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> Set;\n-49\n-50 typedef typename CAMERA::Measurement Z;\n-_\b5_\b1 static const int _\bD = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-_\b5_\b2 static const int _\bZ_\bD_\bi_\bm = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bZ_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-53\n-_\b5_\b4 typedef Eigen::Matrix _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD;\n-_\b5_\b5 typedef Eigen::Matrix _\bM_\ba_\bt_\br_\bi_\bx_\bD_\bD;\n-56 typedef std::vector > FBlocks;\n-57\n-_\b5_\b8 FBlocks _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_;\n-_\b5_\b9 const Matrix _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_;\n-_\b6_\b0 const Matrix _\bE_\b_;\n-_\b6_\b1 const Vector _\bb_\b_;\n-62\n-63public:\n+10 * -------------------------------------------------------------------------\n+- */\n+11\n+12/*\n+13 * @file KarcherMeanFactor.h\n+14 * @author Frank Dellaert\n+15 * @date March 2019\n+16 */\n+17\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22\n+23#include \n+24#include \n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+32template \n+33T FindKarcherMean(const std::vector>\n+&rotations);\n+34\n+35template T FindKarcherMean(std::initializer_list &&rotations);\n+36\n+_\b4_\b5template class _\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n+46 // Compile time dimension: can be -1\n+47 enum { D = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn };\n+48\n+49 // Runtime dimension: always >=0\n+50 size_t d_;\n+51\n+53 boost::shared_ptr whitenedJacobian_;\n+54\n+55public:\n+61 template \n+62 _\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER &_\bk_\be_\by_\bs, int d = D,\n+63 boost::optional beta = boost::none);\n 64\n-_\b6_\b6 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br() {\n-67 }\n-68\n+_\b6_\b6 _\b~_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+67\n+_\b6_\b9 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs &c) const override { return 0; }\n 70\n-_\b8_\b0 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs, const FBlocks& Fs,\n-81 const Matrix& E, const Matrix& P, const Vector& b)\n-82 : _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bk_\be_\by_\bs), _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_(Fs), _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_(P), _\bE_\b_(E), _\bb_\b_(b) {}\n-83\n-_\b8_\b5 _\b~_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br() override {\n-86 }\n-87\n-88 const FBlocks& Fs() const {\n-89 return _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_;\n-90 }\n-91\n-92 const Matrix& E() const {\n-93 return _\bE_\b_;\n-94 }\n-95\n-96 const Vector& b() const {\n-97 return _\bb_\b_;\n-98 }\n-99\n-100 const Matrix& getPointCovariance() const {\n-101 return _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_;\n-102 }\n-103\n-_\b1_\b0_\b5 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-106 DefaultKeyFormatter) const override {\n-107 std::cout << \" RegularImplicitSchurFactor \" << std::endl;\n-108 _\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n-109 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos) {\n-110 std::cout << \"Fblock:\\n\" << _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[pos] << std::endl;\n-111 }\n-112 std::cout << \"PointCovariance:\\n\" << _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ << std::endl;\n-113 std::cout << \"E:\\n\" << _\bE_\b_ << std::endl;\n-114 std::cout << \"b:\\n\" << _\bb_\b_.transpose() << std::endl;\n-115 }\n-116\n-_\b1_\b1_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& lf, double tol) const override {\n-119 const _\bT_\bh_\bi_\bs* f = dynamic_cast(&lf);\n-120 if (!f)\n-121 return false;\n-122 for (size_t k = 0; k < _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_.size(); ++k) {\n-123 if (_\bk_\be_\by_\bs_\b_[k] != f->_\bk_\be_\by_\bs_\b_[k])\n-124 return false;\n-125 if (!_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k], f->_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k], tol))\n-126 return false;\n-127 }\n-128 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_, f->_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_, tol)\n-129 && _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(_\bE_\b_, f->_\bE_\b_, tol)\n-130 && _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(_\bb_\b_, f->_\bb_\b_, tol);\n-131 }\n-132\n-_\b1_\b3_\b4 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bD_\bi_\bm(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) const override {\n-135 return _\bD;\n-136 }\n-137\n-_\b1_\b3_\b8 void _\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n-139 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx* info) const override {\n-140 throw std::runtime_error(\n-141 \"RegularImplicitSchurFactor::updateHessian non implemented\");\n-142 }\n-_\b1_\b4_\b3 Matrix _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() const override {\n-144 throw std::runtime_error(\n-145 \"RegularImplicitSchurFactor::augmentedJacobian non implemented\");\n-146 return Matrix();\n-147 }\n-_\b1_\b4_\b8 std::pair _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn() const override {\n-149 throw std::runtime_error(\n-150 \"RegularImplicitSchurFactor::jacobian non implemented\");\n-151 return std::make_pair(Matrix(), Vector());\n-152 }\n-153\n-_\b1_\b5_\b5 Matrix _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn() const override {\n-156 // Do the Schur complement\n-157 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessian =\n-158 Set::SchurComplement(_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_, _\bE_\b_, _\bb_\b_);\n-159 return augmentedHessian._\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw();\n-160 }\n-161\n-_\b1_\b6_\b3 Matrix _\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn() const override {\n-164 Matrix augmented = _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn();\n-165 int m = this->_\bk_\be_\by_\bs_\b_.size();\n-166 size_t M = _\bD * m;\n-167 return augmented.block(0, 0, M, M);\n-168 }\n-169\n-171 using _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl;\n-172\n-_\b1_\b7_\b4 void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bA_\bd_\bd(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &d) const override {\n-175 // diag(Hessian) = diag(F' * (I - E * PointCov * E') * F);\n-176 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) { // for each camera\n-177 _\bK_\be_\by j = _\bk_\be_\by_\bs_\b_[k];\n-178\n-179 // Calculate Fj'*Ej for the current camera (observing a single point)\n-180 // D x 3 = (D x ZDim) * (ZDim x 3)\n-181 const _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD& Fj = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k];\n-182 Eigen::Matrix FtE = Fj.transpose()\n-183 * _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * k, 0);\n-184\n-185 Eigen::Matrix dj;\n-186 for (int k = 0; k < _\bD; ++k) { // for each diagonal element of the camera\n-hessian\n-187 // Vector column_k_Fj = Fj.col(k);\n-188 dj(k) = Fj.col(k).squaredNorm(); // dot(column_k_Fj, column_k_Fj);\n-189 // Vector column_k_FtE = FtE.row(k);\n-190 // (1 x 1) = (1 x 3) * (3 * 3) * (3 x 1)\n-191 dj(k) -= FtE.row(k) * _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ * FtE.row(k).transpose();\n-192 }\n-193\n-194 auto result = d._\be_\bm_\bp_\bl_\ba_\bc_\be(j, dj);\n-195 if(!result.second) {\n-196 result.first->second += dj;\n-197 }\n-198 }\n-199 }\n-200\n-_\b2_\b0_\b5 void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(double* d) const override {\n-206 // diag(Hessian) = diag(F' * (I - E * PointCov * E') * F);\n-207 // Use eigen magic to access raw memory\n-208 typedef Eigen::Matrix DVector;\n-209 typedef Eigen::Map DMap;\n-210\n-211 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos) { // for each camera in the\n-factor\n-212 _\bK_\be_\by j = _\bk_\be_\by_\bs_\b_[pos];\n-213\n-214 // Calculate Fj'*Ej for the current camera (observing a single point)\n-215 // D x 3 = (D x ZDim) * (ZDim x 3)\n-216 const _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD& Fj = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[pos];\n-217 Eigen::Matrix FtE = Fj.transpose()\n-218 * _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * pos, 0);\n-219\n-220 DVector dj;\n-221 for (int k = 0; k < _\bD; ++k) { // for each diagonal element of the camera\n-hessian\n-222 dj(k) = Fj.col(k).squaredNorm();\n-223 // (1 x 1) = (1 x 3) * (3 * 3) * (3 x 1)\n-224 dj(k) -= FtE.row(k) * _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ * FtE.row(k).transpose();\n-225 }\n-226 DMap(d + _\bD * j) += dj;\n-227 }\n-228 }\n-229\n-_\b2_\b3_\b1 std::map _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bB_\bl_\bo_\bc_\bk_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl() const override {\n-232 std::map blocks;\n-233 // F'*(I - E*P*E')*F\n-234 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos) {\n-235 _\bK_\be_\by j = _\bk_\be_\by_\bs_\b_[pos];\n-236 // F'*F - F'*E*P*E'*F e.g. (9*2)*(2*9) - (9*2)*(2*3)*(3*3)*(3*2)*(2*9)\n-237 const _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD& Fj = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[pos];\n-238 // Eigen::Matrix FtE = Fj.transpose()\n-239 // * E_.block(ZDim * pos, 0);\n-240 // blocks[j] = Fj.transpose() * Fj\n-241 // - FtE * PointCovariance_ * FtE.transpose();\n-242\n-243 const Matrix23& Ej = _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * pos, 0);\n-244 blocks[j] = Fj.transpose()\n-245 * (Fj - Ej * _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ * Ej.transpose() * Fj);\n-246\n-247 // F'*(I - E*P*E')*F, TODO: this should work, but it does not :-(\n-248 // static const Eigen::Matrix I2 = eye(ZDim);\n-249 // Matrix2 Q = //\n-250 // I2 - E_.block(ZDim * pos, 0) * PointCovariance_ *\n-E_.block(ZDim * pos, 0).transpose();\n-251 // blocks[j] = Fj.transpose() * Q * Fj;\n-252 }\n-253 return blocks;\n-254 }\n-255\n-_\b2_\b5_\b6 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const override {\n-257 return boost::make_shared >(_\bk_\be_\by_\bs_\b_,\n-258 _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_, _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_, _\bE_\b_, _\bb_\b_);\n-259 throw std::runtime_error(\n-260 \"RegularImplicitSchurFactor::clone non implemented\");\n-261 }\n-262\n-_\b2_\b6_\b3 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bn_\be_\bg_\ba_\bt_\be() const override {\n-264 return boost::make_shared >(_\bk_\be_\by_\bs_\b_,\n-265 _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_, _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_, _\bE_\b_, _\bb_\b_);\n-266 throw std::runtime_error(\n-267 \"RegularImplicitSchurFactor::negate non implemented\");\n-268 }\n-269\n-270 // Raw Vector version of y += F'*alpha*(I - E*P*E')*F*x, for testing\n-271 static\n-272 void multiplyHessianAdd(const Matrix& F, const Matrix& E,\n-273 const Matrix& PointCovariance, double alpha, const Vector& x, Vector& y) {\n-274 Vector _\be_\b1 = F * x;\n-275 Vector d1 = E.transpose() * _\be_\b1;\n-276 Vector d2 = PointCovariance * d1;\n-277 Vector e2 = E * d2;\n-278 Vector e3 = alpha * (_\be_\b1 - e2);\n-279 y += F.transpose() * e3;\n-280 }\n-281\n-282 typedef std::vector> Error2s;\n-283\n-_\b2_\b8_\b7 void _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br_\b2(const Error2s& _\be_\b1, Error2s& e2) const {\n-288\n-289 // d1 = E.transpose() * (e1-ZDim*b) = (3*2m)*2m\n-290 Vector3 d1;\n-291 d1.setZero();\n-292 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n-293 d1 += _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * k, 0).transpose()\n-294 * (_\be_\b1[k] - _\bZ_\bD_\bi_\bm * _\bb_\b_.segment<_\bZ_\bD_\bi_\bm>(k * _\bZ_\bD_\bi_\bm));\n-295\n-296 // d2 = E.transpose() * e1 = (3*2m)*2m\n-297 Vector3 d2 = _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ * d1;\n-298\n-299 // e3 = alpha*(e1 - E*d2) = 1*[2m-(2m*3)*3]\n-300 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n-301 e2[k] = _\be_\b1[k] - _\bZ_\bD_\bi_\bm * _\bb_\b_.segment<_\bZ_\bD_\bi_\bm>(k * _\bZ_\bD_\bi_\bm)\n-302 - _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * k, 0) * d2;\n-303 }\n-304\n-305 /*\n-306 * This definition matches the linearized error in the Hessian Factor:\n-307 * LinError(x) = x'*H*x - 2*x'*eta + f\n-308 * with:\n-309 * H = F' * (I-E'*P*E) * F = F' * Q * F\n-310 * eta = F' * (I-E'*P*E) * b = F' * Q * b\n-311 * f = nonlinear error\n-312 * (x'*H*x - 2*x'*eta + f) = x'*F'*Q*F*x - 2*x'*F'*Q *b + f = x'*F'*Q*(F*x -\n-2*b) + f\n-313 */\n-314 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const override {\n-315\n-316 // resize does not do malloc if correct size\n-317 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n-318 e2.resize(_\bs_\bi_\bz_\be());\n-319\n-320 // e1 = F * x - b = (2m*dm)*dm\n-321 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k)\n-322 _\be_\b1[k] = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k] * x._\ba_\bt(_\bk_\be_\by_\bs_\b_[k]);\n-323 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br_\b2(_\be_\b1, e2);\n-324\n-325 double result = 0;\n-326 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k)\n-327 result += _\bd_\bo_\bt(_\be_\b1[k], e2[k]);\n-328\n-329 double f = _\bb_\b_.squaredNorm();\n-330 return 0.5 * (result + f);\n-331 }\n-332\n-333 // needed to be GaussianFactor - (I - E*P*E')*(F*x - b)\n-334 // This is wrong and does not match the definition in Hessian,\n-335 // but it matches the definition of the Jacobian factor (JF)\n-336 double errorJF(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n-337\n-338 // resize does not do malloc if correct size\n-339 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n-340 e2.resize(_\bs_\bi_\bz_\be());\n-341\n-342 // e1 = F * x - b = (2m*dm)*dm\n-343 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k)\n-344 _\be_\b1[k] = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k] * x.at(_\bk_\be_\by_\bs_\b_[k]) - _\bb_\b_.segment<_\bZ_\bD_\bi_\bm>(k * _\bZ_\bD_\bi_\bm);\n-345 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(_\be_\b1, e2);\n-346\n-347 double result = 0;\n-348 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k)\n-349 result += _\bd_\bo_\bt(e2[k], e2[k]);\n-350\n-351 // std::cout << \"implicitFactor::error result \" << result << std::endl;\n-352 return 0.5 * result;\n-353 }\n-_\b3_\b5_\b7 void _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(const Error2s& _\be_\b1, Error2s& e2) const {\n-358\n-359 // d1 = E.transpose() * e1 = (3*2m)*2m\n-360 Vector3 d1;\n-361 d1.setZero();\n-362 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n-363 d1 += _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * k, 0).transpose() * _\be_\b1[k];\n-364\n-365 // d2 = E.transpose() * e1 = (3*2m)*2m\n-366 Vector3 d2 = _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ * d1;\n-367\n-368 // e3 = alpha*(e1 - E*d2) = 1*[2m-(2m*3)*3]\n-369 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n-370 e2[k] = _\be_\b1[k] - _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * k, 0) * d2;\n-371 }\n-372\n-_\b3_\b7_\b4 mutable Error2s _\be_\b1, e2;\n-375\n-_\b3_\b8_\b0 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const double* x, double* y) const {\n-381\n-382 // Use eigen magic to access raw memory\n-383 typedef Eigen::Matrix DVector;\n-384 typedef Eigen::Map DMap;\n-385 typedef Eigen::Map ConstDMap;\n-386\n-387 // resize does not do malloc if correct size\n-388 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n-389 e2.resize(_\bs_\bi_\bz_\be());\n-390\n-391 // e1 = F * x = (2m*dm)*dm\n-392 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) {\n-393 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[k];\n-394 _\be_\b1[k] = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k] * ConstDMap(x + _\bD * key);\n-395 }\n-396\n-397 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(_\be_\b1, e2);\n-398\n-399 // y += F.transpose()*e2 = (2d*2m)*2m\n-400 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) {\n-401 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[k];\n-402 DMap(y + _\bD * key) += _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k].transpose() * alpha * e2[k];\n-403 }\n-404 }\n-405\n-406 void multiplyHessianAdd(double alpha, const double* x, double* y,\n-407 std::vector _\bk_\be_\by_\bs) const {\n-408 }\n-409\n-_\b4_\b1_\b3 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n-414 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const override {\n-415\n-416 // resize does not do malloc if correct size\n-417 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n-418 e2.resize(_\bs_\bi_\bz_\be());\n-419\n-420 // e1 = F * x = (2m*dm)*dm\n-421 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k)\n-422 _\be_\b1[k] = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k] * x._\ba_\bt(_\bk_\be_\by_\bs_\b_[k]);\n-423\n-424 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(_\be_\b1, e2);\n-425\n-426 // y += F.transpose()*e2 = (2d*2m)*2m\n-427 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) {\n-428 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[k];\n-429 static const Vector _\be_\bm_\bp_\bt_\by;\n-430 std::pair it = y._\bt_\br_\by_\bI_\bn_\bs_\be_\br_\bt(key, _\be_\bm_\bp_\bt_\by);\n-431 Vector& yi = it.first->second;\n-432 // Create the value as a zero vector if it does not exist.\n-433 if (it.second)\n-434 yi = Vector::Zero(_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k].cols());\n-435 yi += _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k].transpose() * alpha * e2[k];\n-436 }\n-437 }\n-438\n-_\b4_\b4_\b2 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bu_\bm_\bm_\by(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n-443 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const {\n-444\n-445 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) {\n-446 static const Vector _\be_\bm_\bp_\bt_\by;\n-447 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[k];\n-448 std::pair it = y._\bt_\br_\by_\bI_\bn_\bs_\be_\br_\bt(key, _\be_\bm_\bp_\bt_\by);\n-449 Vector& yi = it.first->second;\n-450 yi = x._\ba_\bt(key);\n-451 }\n-452 }\n-453\n-_\b4_\b5_\b7 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo() const override {\n-458 // calculate Q*b\n-459 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n-460 e2.resize(_\bs_\bi_\bz_\be());\n-461 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n-462 _\be_\b1[k] = _\bb_\b_.segment<_\bZ_\bD_\bi_\bm>(_\bZ_\bD_\bi_\bm * k);\n-463 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(_\be_\b1, e2);\n-464\n-465 // g = F.transpose()*e2\n-466 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs g;\n-467 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) {\n-468 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[k];\n-469 g._\bi_\bn_\bs_\be_\br_\bt(key, -_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k].transpose() * e2[k]);\n-470 }\n-471\n-472 // return it\n-473 return g;\n-474 }\n-475\n-_\b4_\b7_\b9 void _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo(double* d) const override {\n-480\n-481 // Use eigen magic to access raw memory\n-482 typedef Eigen::Matrix DVector;\n-483 typedef Eigen::Map DMap;\n-484\n-485 // calculate Q*b\n-486 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n-487 e2.resize(_\bs_\bi_\bz_\be());\n-488 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n-489 _\be_\b1[k] = _\bb_\b_.segment<_\bZ_\bD_\bi_\bm>(_\bZ_\bD_\bi_\bm * k);\n-490 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(_\be_\b1, e2);\n-491\n-492 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) { // for each camera in the factor\n-493 _\bK_\be_\by j = _\bk_\be_\by_\bs_\b_[k];\n-494 DMap(d + _\bD * j) += -_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k].transpose() * e2[k];\n-495 }\n-496 }\n-497\n-_\b4_\b9_\b9 Vector _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt(_\bK_\be_\by key, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const override {\n-500 throw std::runtime_error(\n-501 \"gradient for RegularImplicitSchurFactor is not implemented yet\");\n-502 }\n-503\n-504};\n-505// end class RegularImplicitSchurFactor\n-506\n-507template\n-508const int _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bD;\n-509\n-510template\n-511const int _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bZ_\bD_\bi_\bm;\n-512\n-513// traits\n-_\b5_\b1_\b4template struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br > :\n-public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n-515 RegularImplicitSchurFactor > {\n-516};\n-517\n-518}\n-519\n-_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n-Base class to create smart factors on poses or cameras.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n+_\b7_\b2 size_t _\bd_\bi_\bm() const override { return d_; }\n+73\n+_\b7_\b5 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs &c) const override\n+{\n+76 return whitenedJacobian_;\n+77 }\n+78};\n+79// \\KarcherMeanFactor\n+80} // namespace gtsam\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n-bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n-DenseBase< MATRIX > &B, double tol=1e-9)\n-equals with a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n-Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex\n-I, DenseIndex J) const\n-Return the square sub-matrix that contains blocks(i:j, i:j).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n-A set of cameras, all with their own calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n const KeyVector & keys() const\n Access the factor's involved variable keys.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty() const\n-Whether the factor is empty (involves zero variables).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::const_iterator const_iterator\n-Const iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-An abstract virtual base class for JacobianFactor and HessianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-VectorValues hessianDiagonal() const\n-Return the diagonal of the Hessian for this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.cpp:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-iterator insert(const std::pair< Key, Vector > &key_value)\n-Insert a vector value with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.cpp:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bm_\bp_\bl_\ba_\bc_\be\n-std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)\n-Emplace a vector value with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-Vector & at(Key j)\n-Read/write access to the vector value with key j, throws std::out_of_range if j\n-does not exist,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:139\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bt_\br_\by_\bI_\bn_\bs_\be_\br_\bt\n-std::pair< iterator, bool > tryInsert(Key j, const Vector &value)\n-insert that mimics the STL map insert - if the value already exists, the map is\n-not modified and an i...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:209\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n-RegularImplicitSchurFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\b_\n-const Matrix E_\n-The 2m*3 E Jacobian with respect to the point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br\n-void projectError(const Error2s &e1, Error2s &e2) const\n-Calculate corrected error Q*e = (I - E*P*E')*e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:357\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-GaussianFactor::shared_ptr clone() const override\n-Clone a factor (make a deep copy)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:256\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bA_\bd_\bd\n-void hessianDiagonalAdd(VectorValues &d) const override\n-Add the diagonal of the Hessian for this factor to existing VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n-RegularImplicitSchurFactor(const KeyVector &keys, const FBlocks &Fs, const\n-Matrix &E, const Matrix &P, const Vector &b)\n-Construct from blocks of F, E, inv(E'*E), and RHS vector b.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n-RegularImplicitSchurFactor()\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\b_\n-const Vector b_\n-2m-dimensional RHS vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-std::pair< Matrix, Vector > jacobian() const override\n-Return the dense Jacobian and right-hand-side , with the noise models baked\n-into A and b.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:148\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\bD_\bD\n-Eigen::Matrix< double, D, D > MatrixDD\n-camera Hessian\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n-void gradientAtZero(double *d) const override\n-Calculate gradient, which is -F'Q*b, see paper - RAW MEMORY ACCESS.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:479\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bZ_\bD_\bi_\bm\n-static const int ZDim\n-Measurement dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-Matrix information() const override\n-Compute full information matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n-~RegularImplicitSchurFactor() override\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+The KarcherMeanFactor creates a constraint on all SO(n) variables with given\n+keys that the Karcher me...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &c) const override\n+Calculate the error of the factor: always zero.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+get the dimension of the factor (number of rows on linearization)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override\n+linearize to a GaussianFactor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+~KarcherMeanFactor() override\n Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn\n-void updateHessian(const KeyVector &keys, SymmetricBlockMatrix *info) const\n-override\n-Update an information matrix by adding the information corresponding to this\n-factor (used internally ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_\n-FBlocks FBlocks_\n-All ZDim*D F blocks (one for each camera)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n-VectorValues gradientAtZero() const override\n-Calculate gradient, which is -F'Q*b, see paper.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:457\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD\n-Eigen::Matrix< double, ZDim, D > MatrixZD\n-type of an F block\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_\n-const Matrix PointCovariance_\n-the 3*3 matrix P = inv(E'E) (2*2 if degenerate)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n-void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y)\n-const override\n-Hessian-vector multiply, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:413\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bB_\bl_\bo_\bc_\bk_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-std::map< Key, Matrix > hessianBlockDiagonal() const override\n-Return the block diagonal of the Hessian for this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:231\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-Matrix augmentedInformation() const override\n-Compute full augmented information matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be\n-GaussianFactor::shared_ptr negate() const override\n-Construct the corresponding anti-factor to negate information stored stored in\n-this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:263\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\b1\n-Error2s e1\n-Scratch space for multiplyHessianAdd.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:374\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n-DenseIndex getDim(const_iterator variable) const override\n-Degrees of freedom of camera.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const GaussianFactor &lf, double tol) const override\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-Matrix augmentedJacobian() const override\n-Return a dense Jacobian matrix, augmented with b with the noise models baked\n-into A and b.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:143\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-RegularImplicitSchurFactor This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD\n-static const int D\n-Camera dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br_\b2\n-void projectError2(const Error2s &e1, Error2s &e2) const\n-Calculate corrected error Q*(e-ZDim*b) = (I - E*P*E')*(e-ZDim*b)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:287\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n-void multiplyHessianAdd(double alpha, const double *x, double *y) const\n-double* Hessian-vector multiply, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:380\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-void hessianDiagonal(double *d) const override\n-add the contribution of this factor to the diagonal of the hessian d(output) =\n-d(input) + deltaHessia...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:205\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bu_\bm_\bm_\by\n-void multiplyHessianDummy(double alpha, const VectorValues &x, VectorValues &y)\n-const\n-Dummy version to measure overhead of key access.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:442\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt\n-Vector gradient(Key key, const VectorValues &x) const override\n-Gradient wrt a key at any values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:499\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor.h:66\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * K\bKa\bar\brc\bch\bhe\ber\brM\bMe\bea\ban\bnF\bFa\bac\bct\bto\bor\br.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01289_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01289_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/JacobianFactorQR.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionPoseFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,95 +98,176 @@\n
No Matches
\n \n \n \n \n \n
\n-
JacobianFactorQR.h
\n+
SmartProjectionPoseFactor.h
\n
\n
\n-
1/*
\n-
2 * @file JacobianFactorQR.h
\n-
3 * @brief Jacobianfactor that combines and eliminates points
\n-
4 * @date Oct 27, 2013
\n-
5 * @uthor Frank Dellaert
\n-
6 */
\n-
7
\n-
8#pragma once
\n-\n-\n-\n-
12
\n-
13namespace gtsam {
\n-
14
\n-
15class GaussianBayesNet;
\n-
16
\n-
20template<size_t D, size_t ZDim>
\n-
\n-\n-
22
\n-
23 typedef RegularJacobianFactor<D> Base;
\n-
24 typedef Eigen::Matrix<double, ZDim, D> MatrixZD;
\n-
25
\n-
26public:
\n-
27
\n-
\n-\n-
32 const std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> >& FBlocks, const Matrix& E, const Matrix3& P,
\n-
33 const Vector& b, //
\n-
34 const SharedDiagonal& model = SharedDiagonal()) :
\n-
35 Base() {
\n-
36 // Create a number of Jacobian factors in a factor graph
\n-\n-
38 Symbol pointKey('p', 0);
\n-
39 for (size_t k = 0; k < FBlocks.size(); ++k) {
\n-
40 Key key = keys[k];
\n-
41 gfg.add(pointKey, E.block<ZDim, 3>(ZDim * k, 0), key, FBlocks[k],
\n-
42 b.segment < ZDim > (ZDim * k), model);
\n-
43 }
\n-
44 //gfg.print("gfg");
\n-
45
\n-
46 // eliminate the point
\n-
47 boost::shared_ptr<GaussianBayesNet> bn;
\n-\n-
49 KeyVector variables;
\n-
50 variables.push_back(pointKey);
\n-
51 boost::tie(bn, fg) = gfg.eliminatePartialSequential(variables, EliminateQR);
\n-
52 //fg->print("fg");
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n+
11
\n+
20#pragma once
\n+
21
\n+\n+
23
\n+
24namespace gtsam {
\n+
44template <class CALIBRATION>
\n+
\n+\n+
46 : public SmartProjectionFactor<PinholePose<CALIBRATION> > {
\n+
47 private:
\n+
48 typedef PinholePose<CALIBRATION> Camera;
\n+\n+\n+
51
\n+
52protected:
\n
53
\n-
54 JacobianFactor::operator=(JacobianFactor(*fg));
\n-
55 }
\n+
54 boost::shared_ptr<CALIBRATION> K_;
\n+
55
\n+
56public:
\n+
57
\n+
59 typedef boost::shared_ptr<This> shared_ptr;
\n+
60
\n+\n+
65
\n+
\n+\n+
73 const SharedNoiseModel& sharedNoiseModel,
\n+
74 const boost::shared_ptr<CALIBRATION> K,
\n+\n+
76 : Base(sharedNoiseModel, params), K_(K) {
\n+
77 }
\n
\n-
56};
\n+
78
\n+
\n+\n+
87 const SharedNoiseModel& sharedNoiseModel,
\n+
88 const boost::shared_ptr<CALIBRATION> K,
\n+
89 const boost::optional<Pose3> body_P_sensor,
\n+\n+
91 : SmartProjectionPoseFactor(sharedNoiseModel, K, params) {
\n+
92 this->body_P_sensor_ = body_P_sensor;
\n+
93 }
\n
\n-
57// end class JacobianFactorQR
\n-
58
\n-
59}// end namespace gtsam
\n-
JacobianFactor class with fixed sized blcoks.
\n-
Linear Factor Graph where all factors are Gaussians.
\n-
friend GTSAM_EXPORT std::pair< boost::shared_ptr< GaussianConditional >, shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with QR factorization, this is usually provided as an argument to one of ...
Definition JacobianFactor.cpp:789
\n+
94
\n+
\n+\n+
97 }
\n+
\n+
98
\n+
\n+
104 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
105 DefaultKeyFormatter) const override {
\n+
106 std::cout << s << "SmartProjectionPoseFactor, z = \\n ";
\n+
107 Base::print("", keyFormatter);
\n+
108 }
\n+
\n+
109
\n+
\n+
111 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n+
112 const This *e = dynamic_cast<const This*>(&p);
\n+
113 return e && Base::equals(p, tol);
\n+
114 }
\n+
\n+
115
\n+
\n+
119 double error(const Values& values) const override {
\n+
120 if (this->active(values)) {
\n+
121 return this->totalReprojectionError(cameras(values));
\n+
122 } else { // else of active flag
\n+
123 return 0.0;
\n+
124 }
\n+
125 }
\n+
\n+
126
\n+
\n+
128 inline const boost::shared_ptr<CALIBRATION> calibration() const {
\n+
129 return K_;
\n+
130 }
\n+
\n+
131
\n+
\n+
138 typename Base::Cameras cameras(const Values& values) const override {
\n+
139 typename Base::Cameras cameras;
\n+
140 for (const Key& k : this->keys_) {
\n+
141 const Pose3 world_P_sensor_k =
\n+
142 Base::body_P_sensor_ ? values.at<Pose3>(k) * *Base::body_P_sensor_
\n+
143 : values.at<Pose3>(k);
\n+
144 cameras.emplace_back(world_P_sensor_k, K_);
\n+
145 }
\n+
146 return cameras;
\n+
147 }
\n+
\n+
148
\n+
149 private:
\n+
150
\n+\n+
153 template<class ARCHIVE>
\n+
154 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
155 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
156 ar & BOOST_SERIALIZATION_NVP(K_);
\n+
157 }
\n+
158};
\n+
\n+
159// end of class declaration
\n+
160
\n+
162template<class CALIBRATION>
\n+
\n+
163struct traits<SmartProjectionPoseFactor<CALIBRATION> > : public Testable<
\n+
164 SmartProjectionPoseFactor<CALIBRATION> > {
\n+
165};
\n+
\n+
166
\n+
167} // \\ namespace gtsam
\n+
Smart factor on cameras (pose + calibration)
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do sequential elimination of some variables, in ordering provided, to produce a Bayes net and a remai...
Definition EliminateableFactorGraph-inst.h:154
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
Character and index key used to refer to variables.
Definition Symbol.h:35
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n-
void add(const GaussianFactor &factor)
Add a factor by value - makes a copy.
Definition GaussianFactorGraph.h:127
\n-
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n-
JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator.
Definition RegularJacobianFactor.h:32
\n-
JacobianFactor for Schur complement that uses Q noise model.
Definition JacobianFactorQR.h:21
\n-
JacobianFactorQR(const KeyVector &keys, const std::vector< MatrixZD, Eigen::aligned_allocator< MatrixZD > > &FBlocks, const Matrix &E, const Matrix3 &P, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Constructor.
Definition JacobianFactorQR.h:31
\n-\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A pinhole camera class that has a Pose3 and a fixed Calibration.
Definition PinholePose.h:243
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n+
boost::optional< Pose3 > body_P_sensor_
Pose of the camera in the body frame.
Definition SmartFactorBase.h:82
\n+
Definition SmartFactorParams.h:42
\n+
SmartProjectionFactor: triangulates point and keeps an estimate of it around.
Definition SmartProjectionFactor.h:45
\n+
double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 > externalPoint=boost::none) const
Calculate the error of the factor.
Definition SmartProjectionFactor.h:411
\n+
If you are using the factor, please cite: L.
Definition SmartProjectionPoseFactor.h:46
\n+
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartProjectionPoseFactor.h:111
\n+
SmartProjectionPoseFactor(const SharedNoiseModel &sharedNoiseModel, const boost::shared_ptr< CALIBRATION > K, const SmartProjectionParams &params=SmartProjectionParams())
Constructor.
Definition SmartProjectionPoseFactor.h:72
\n+
Base::Cameras cameras(const Values &values) const override
Collect all cameras involved in this factor.
Definition SmartProjectionPoseFactor.h:138
\n+
double error(const Values &values) const override
error calculates the error of the factor.
Definition SmartProjectionPoseFactor.h:119
\n+
boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor
Definition SmartProjectionPoseFactor.h:59
\n+
boost::shared_ptr< CALIBRATION > K_
calibration object (one for all cameras)
Definition SmartProjectionPoseFactor.h:54
\n+
~SmartProjectionPoseFactor() override
Virtual destructor.
Definition SmartProjectionPoseFactor.h:96
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartProjectionPoseFactor.h:104
\n+
const boost::shared_ptr< CALIBRATION > calibration() const
return calibration shared pointers
Definition SmartProjectionPoseFactor.h:128
\n+
SmartProjectionPoseFactor(const SharedNoiseModel &sharedNoiseModel, const boost::shared_ptr< CALIBRATION > K, const boost::optional< Pose3 > body_P_sensor, const SmartProjectionParams &params=SmartProjectionParams())
Constructor.
Definition SmartProjectionPoseFactor.h:86
\n+
friend class boost::serialization::access
Serialization function.
Definition SmartProjectionPoseFactor.h:152
\n+
SmartProjectionPoseFactor()
Default constructor, only for serialization.
Definition SmartProjectionPoseFactor.h:64
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,129 +1,236 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-JacobianFactorQR.h\n-1/*\n-2 * @file JacobianFactorQR.h\n-3 * @brief Jacobianfactor that combines and eliminates points\n-4 * @date Oct 27, 2013\n-5 * @uthor Frank Dellaert\n-6 */\n+SmartProjectionPoseFactor.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8#pragma once\n-9#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-10#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-11#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n-12\n-13namespace _\bg_\bt_\bs_\ba_\bm {\n-14\n-15class GaussianBayesNet;\n-16\n-20template\n-_\b2_\b1class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\bR: public _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n-22\n-23 typedef _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bD_\b> Base;\n-24 typedef Eigen::Matrix MatrixZD;\n-25\n-26public:\n-27\n-_\b3_\b1 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\bR(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n-32 const std::vector >& FBlocks,\n-const Matrix& E, const Matrix3& P,\n-33 const Vector& b, //\n-34 const SharedDiagonal& model = SharedDiagonal()) :\n-35 Base() {\n-36 // Create a number of Jacobian factors in a factor graph\n-37 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh gfg;\n-38 _\bS_\by_\bm_\bb_\bo_\bl pointKey('p', 0);\n-39 for (size_t k = 0; k < FBlocks.size(); ++k) {\n-40 _\bK_\be_\by key = _\bk_\be_\by_\bs[k];\n-41 gfg._\ba_\bd_\bd(pointKey, E.block(ZDim * k, 0), key, FBlocks[k],\n-42 b.segment < ZDim > (ZDim * k), model);\n-43 }\n-44 //gfg.print(\"gfg\");\n-45\n-46 // eliminate the point\n-47 boost::shared_ptr bn;\n-48 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br fg;\n-49 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br variables;\n-50 variables.push_back(pointKey);\n-51 boost::tie(bn, fg) = gfg._\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(variables, _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR);\n-52 //fg->print(\"fg\");\n+8 * See LICENSE for the license information\n+9\n+10 * -------------------------------------------------------------------------\n+- */\n+11\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+44template \n+_\b4_\b5class _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+46 : public _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br > {\n+47 private:\n+48 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> Camera;\n+49 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\ba_\bm_\be_\br_\ba_\b> Base;\n+50 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> This;\n+51\n+52protected:\n 53\n-54 JacobianFactor::operator=(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(*fg));\n-55 }\n-56};\n-57// end class JacobianFactorQR\n-58\n-59}// end namespace gtsam\n-_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-JacobianFactor class with fixed sized blcoks.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR\n-friend GTSAM_EXPORT std::pair< boost::shared_ptr< GaussianConditional >,\n-shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering\n-&keys)\n-Densely partially eliminate with QR factorization, this is usually provided as\n-an argument to one of ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:789\n+_\b5_\b4 boost::shared_ptr _\bK_\b_;\n+55\n+56public:\n+57\n+_\b5_\b9 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+60\n+_\b6_\b4 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+65\n+_\b7_\b2 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(\n+73 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& sharedNoiseModel,\n+74 const boost::shared_ptr K,\n+75 const _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& params = _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs())\n+76 : Base(sharedNoiseModel, params), _\bK_\b_(K) {\n+77 }\n+78\n+_\b8_\b6 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(\n+87 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& sharedNoiseModel,\n+88 const boost::shared_ptr K,\n+89 const boost::optional body_P_sensor,\n+90 const _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& params = _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs())\n+91 : _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(sharedNoiseModel, K, params) {\n+92 this->_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_ = body_P_sensor;\n+93 }\n+94\n+_\b9_\b6 _\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() override {\n+97 }\n+98\n+_\b1_\b0_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+105 DefaultKeyFormatter) const override {\n+106 std::cout << s << \"SmartProjectionPoseFactor, z = \\n \";\n+107 Base::print(\"\", keyFormatter);\n+108 }\n+109\n+_\b1_\b1_\b1 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n+112 const This *e = dynamic_cast(&p);\n+113 return e && Base::equals(p, tol);\n+114 }\n+115\n+_\b1_\b1_\b9 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n+120 if (this->_\ba_\bc_\bt_\bi_\bv_\be(values)) {\n+121 return this->_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs(values));\n+122 } else { // else of active flag\n+123 return 0.0;\n+124 }\n+125 }\n+126\n+_\b1_\b2_\b8 inline const boost::shared_ptr _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n+129 return _\bK_\b_;\n+130 }\n+131\n+_\b1_\b3_\b8 typename Base::Cameras _\bc_\ba_\bm_\be_\br_\ba_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n+139 typename Base::Cameras _\bc_\ba_\bm_\be_\br_\ba_\bs;\n+140 for (const _\bK_\be_\by& k : this->_\bk_\be_\by_\bs_\b_) {\n+141 const _\bP_\bo_\bs_\be_\b3 world_P_sensor_k =\n+142 Base::body_P_sensor_ ? values._\ba_\bt<_\bP_\bo_\bs_\be_\b3>(k) * *Base::body_P_sensor_\n+143 : values._\ba_\bt<_\bP_\bo_\bs_\be_\b3>(k);\n+144 _\bc_\ba_\bm_\be_\br_\ba_\bs.emplace_back(world_P_sensor_k, _\bK_\b_);\n+145 }\n+146 return _\bc_\ba_\bm_\be_\br_\ba_\bs;\n+147 }\n+148\n+149 private:\n+150\n+_\b1_\b5_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+153 template\n+154 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+155 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n+156 ar & BOOST_SERIALIZATION_NVP(_\bK_\b_);\n+157 }\n+158};\n+159// end of class declaration\n+160\n+162template\n+_\b1_\b6_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n+164 SmartProjectionPoseFactor > {\n+165};\n+166\n+167} // \\ namespace gtsam\n+_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Smart factor on cameras (pose + calibration)\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl\n-std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr<\n-FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const\n-Eliminate &function=EliminationTraitsType::DefaultEliminate,\n-OptionalVariableIndex variableIndex=boost::none) const\n-Do sequential elimination of some variables, in ordering provided, to produce a\n-Bayes net and a remai...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl\n-Character and index key used to refer to variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Symbol.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n+A pinhole camera class that has a Pose3 and a fixed Calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:243\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n+virtual bool active(const Values &) const\n+Checks whether a factor should be used based on a set of values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+const ValueType at(Key j) const\n+Retrieve a variable by key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_\n+boost::optional< Pose3 > body_P_sensor_\n+Pose of the camera in the body frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+SmartProjectionFactor: triangulates point and keeps an estimate of it around.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>_\b _\b>_\b:_\b:\n+_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n+double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 >\n+externalPoint=boost::none) const\n+Calculate the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:411\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+If you are using the factor, please cite: L.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+SmartProjectionPoseFactor(const SharedNoiseModel &sharedNoiseModel, const\n+boost::shared_ptr< CALIBRATION > K, const SmartProjectionParams\n+¶ms=SmartProjectionParams())\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs\n+Base::Cameras cameras(const Values &values) const override\n+Collect all cameras involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &values) const override\n+error calculates the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:119\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-void add(const GaussianFactor &factor)\n-Add a factor by value - makes a copy.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:127\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor in the squared-error form.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-JacobianFactor with constant sized blocks Provides raw memory access versions\n-of linear operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\bR\n-JacobianFactor for Schur complement that uses Q noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQR.h:21\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\bR_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\bR\n-JacobianFactorQR(const KeyVector &keys, const std::vector< MatrixZD, Eigen::\n-aligned_allocator< MatrixZD > > &FBlocks, const Matrix &E, const Matrix3 &P,\n-const Vector &b, const SharedDiagonal &model=SharedDiagonal())\n+shorthand for a smart pointer to a factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bK_\b_\n+boost::shared_ptr< CALIBRATION > K_\n+calibration object (one for all cameras)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+~SmartProjectionPoseFactor() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+const boost::shared_ptr< CALIBRATION > calibration() const\n+return calibration shared pointers\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+SmartProjectionPoseFactor(const SharedNoiseModel &sharedNoiseModel, const\n+boost::shared_ptr< CALIBRATION > K, const boost::optional< Pose3 >\n+body_P_sensor, const SmartProjectionParams ¶ms=SmartProjectionParams())\n Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQR.h:31\n-_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+SmartProjectionPoseFactor()\n+Default constructor, only for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionPoseFactor.h:64\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * J\bJa\bac\bco\bob\bbi\bia\ban\bnF\bFa\bac\bct\bto\bor\brQ\bQR\bR.\b.h\bh\n+ * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01292.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01292.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/GeneralSFMFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionRigFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,50 +96,52 @@\n
\n
\n \n
\n \n-
GeneralSFMFactor.h File Reference
\n+
SmartProjectionRigFactor.h File Reference
\n
\n
\n \n-

a general SFM factor with an unknown calibration \n+

Smart factor on poses, assuming camera calibration is fixed. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::GeneralSFMFactor< CAMERA, LANDMARK >
 Non-linear factor for a constraint derived from a 2D measurement. More...
class  gtsam::SmartProjectionRigFactor< CAMERA >
 If you are using the factor, please cite: L. More...
 
struct  gtsam::traits< GeneralSFMFactor< CAMERA, LANDMARK > >
 
class  gtsam::GeneralSFMFactor2< CALIBRATION >
 Non-linear factor for a constraint derived from a 2D measurement. More...
 
struct  gtsam::traits< GeneralSFMFactor2< CALIBRATION > >
struct  gtsam::traits< SmartProjectionRigFactor< CAMERA > >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

a general SFM factor with an unknown calibration

\n-
Date
Dec 15, 2010
\n-
Author
Kai Ni
\n+

Smart factor on poses, assuming camera calibration is fixed.

\n+

Same as SmartProjectionPoseFactor, except:

    \n+
  • it is templated on CAMERA (i.e., it allows cameras beyond pinhole)
  • \n+
  • it admits a different calibration for each measurement (i.e., it can model a multi-camera rig system)
  • \n+
  • it allows multiple observations from the same pose/key (again, to model a multi-camera system)
    Author
    Luca Carlone
    \n+
    \n+Frank Dellaert
    \n+
  • \n+
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,36 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GeneralSFMFactor.h File Reference\n-a general SFM factor with an unknown calibration _\bM_\bo_\br_\be_\b._\b._\b.\n+SmartProjectionRigFactor.h File Reference\n+Smart factor on poses, assuming camera calibration is fixed. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b _\b>\n-\u00a0 Non-linear factor for a constraint derived from a 2D measurement.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n+\u00a0 If you are using the factor, please cite: L. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b _\b>_\b _\b>\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n-\u00a0 Non-linear factor for a constraint derived from a 2D measurement.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-a general SFM factor with an unknown calibration\n- Date\n- Dec 15, 2010\n- Author\n- Kai Ni\n+Smart factor on poses, assuming camera calibration is fixed.\n+Same as SmartProjectionPoseFactor, except:\n+ * it is templated on CAMERA (i.e., it allows cameras beyond pinhole)\n+ * it admits a different calibration for each measurement (i.e., it can\n+ model a multi-camera rig system)\n+ * it allows multiple observations from the same pose/key (again, to model a\n+ multi-camera system)\n+ Author\n+ Luca Carlone\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01292.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01292.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a01292 = [\n- [\"gtsam::traits< GeneralSFMFactor< CAMERA, LANDMARK > >\", \"a04844.html\", null],\n- [\"gtsam::GeneralSFMFactor2< CALIBRATION >\", \"a04848.html\", \"a04848\"],\n- [\"gtsam::traits< GeneralSFMFactor2< CALIBRATION > >\", \"a04852.html\", null]\n+ [\"gtsam::traits< SmartProjectionRigFactor< CAMERA > >\", \"a04956.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01292_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01292_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/GeneralSFMFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionRigFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,346 +98,366 @@\n
No Matches
\n \n \n \n \n \n
\n-
GeneralSFMFactor.h
\n+
SmartProjectionRigFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n-
22
\n-\n-\n-\n-\n-\n-\n-\n-
30#include <gtsam/base/concepts.h>
\n-
31#include <gtsam/base/Manifold.h>
\n-
32#include <gtsam/base/Matrix.h>
\n-\n-
34#include <gtsam/base/types.h>
\n-
35#include <gtsam/base/Testable.h>
\n-
36#include <gtsam/base/Vector.h>
\n-
37#include <gtsam/base/timing.h>
\n-
38
\n-
39#include <boost/none.hpp>
\n-
40#include <boost/optional/optional.hpp>
\n-
41#include <boost/serialization/nvp.hpp>
\n-
42#include <boost/smart_ptr/shared_ptr.hpp>
\n-
43#include <iostream>
\n-
44#include <string>
\n-
45
\n-
46namespace boost {
\n-
47namespace serialization {
\n-
48class access;
\n-
49} /* namespace serialization */
\n-
50} /* namespace boost */
\n-
51
\n-
52namespace gtsam {
\n-
53
\n-
59template<class CAMERA, class LANDMARK>
\n-
\n-
60class GeneralSFMFactor: public NoiseModelFactorN<CAMERA, LANDMARK> {
\n-
61
\n-
62 GTSAM_CONCEPT_MANIFOLD_TYPE(CAMERA)
\n-
63 GTSAM_CONCEPT_MANIFOLD_TYPE(LANDMARK)
\n-
64
\n-
65 static const int DimC = FixedDimension<CAMERA>::value;
\n-
66 static const int DimL = FixedDimension<LANDMARK>::value;
\n-
67 typedef Eigen::Matrix<double, 2, DimC> JacobianC;
\n-
68 typedef Eigen::Matrix<double, 2, DimL> JacobianL;
\n+
25#pragma once
\n+
26
\n+\n+
28
\n+
29namespace gtsam {
\n+
51template <class CAMERA>
\n+
\n+\n+
53 private:
\n+\n+\n+
56 typedef typename CAMERA::CalibrationType CALIBRATION;
\n+
57 typedef typename CAMERA::Measurement MEASUREMENT;
\n+
58 typedef typename CAMERA::MeasurementVector MEASUREMENTS;
\n+
59
\n+
60 static const int DimPose = 6;
\n+
61 static const int ZDim = 2;
\n+
62
\n+
63 protected:
\n+\n+
66
\n+
68 boost::shared_ptr<typename Base::Cameras> cameraRig_;
\n
69
\n-
70protected:
\n-
71
\n-\n+\n
73
\n-
74public:
\n-
75
\n-\n-\n-
78
\n-
79 // shorthand for a smart pointer to a factor
\n-
80 typedef boost::shared_ptr<This> shared_ptr;
\n-
81
\n-
\n-\n-
90 Key cameraKey, Key landmarkKey)
\n-
91 : Base(model, cameraKey, landmarkKey), measured_(measured) {}
\n-
\n-
92
\n-
93 GeneralSFMFactor() : measured_(0.0, 0.0) {}
\n-
95 GeneralSFMFactor(const Point2& p) : measured_(p) {}
\n-
97 GeneralSFMFactor(double x, double y) : measured_(x, y) {}
\n-\n-
99 ~GeneralSFMFactor() override {}
\n-
100
\n-
102 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
103 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
104 gtsam::NonlinearFactor::shared_ptr(new This(*this)));}
\n-
105
\n-
111 void print(const std::string& s = "SFMFactor", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
112 Base::print(s, keyFormatter);
\n-
113 traits<Point2>::Print(measured_, s + ".z");
\n-
114 }
\n-
115
\n-
119 bool equals(const NonlinearFactor &p, double tol = 1e-9) const override {
\n-
120 const This* e = dynamic_cast<const This*>(&p);
\n-
121 return e && Base::equals(p, tol) && traits<Point2>::Equals(this->measured_, e->measured_, tol);
\n-
122 }
\n-
123
\n-
125 Vector evaluateError(const CAMERA& camera, const LANDMARK& point,
\n-
126 boost::optional<Matrix&> H1=boost::none, boost::optional<Matrix&> H2=boost::none) const override {
\n-
127 try {
\n-
128 return camera.project2(point,H1,H2) - measured_;
\n-
129 }
\n-
130 catch( CheiralityException& e) {
\n-
131 if (H1) *H1 = JacobianC::Zero();
\n-
132 if (H2) *H2 = JacobianL::Zero();
\n-
133 //TODO Print the exception via logging
\n-
134 return Z_2x1;
\n-
135 }
\n-
136 }
\n-
137
\n-
139 boost::shared_ptr<GaussianFactor> linearize(const Values& values) const override {
\n-
140 // Only linearize if the factor is active
\n-
141 if (!this->active(values)) return boost::shared_ptr<JacobianFactor>();
\n-
142
\n-
143 const Key key1 = this->key1(), key2 = this->key2();
\n-
144 JacobianC H1;
\n-
145 JacobianL H2;
\n-
146 Vector2 b;
\n-
147 try {
\n-
148 const CAMERA& camera = values.at<CAMERA>(key1);
\n-
149 const LANDMARK& point = values.at<LANDMARK>(key2);
\n-
150 b = measured() - camera.project2(point, H1, H2);
\n-
151 } catch (CheiralityException& e) {
\n-
152 H1.setZero();
\n-
153 H2.setZero();
\n-
154 b.setZero();
\n-
155 //TODO Print the exception via logging
\n+
74 public:
\n+
75 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n+
76
\n+
77 typedef CAMERA Camera;
\n+\n+
79
\n+
81 typedef boost::shared_ptr<This> shared_ptr;
\n+
82
\n+\n+
85
\n+
\n+\n+
95 const SharedNoiseModel& sharedNoiseModel,
\n+
96 const boost::shared_ptr<Cameras>& cameraRig,
\n+\n+
98 : Base(sharedNoiseModel, params), cameraRig_(cameraRig) {
\n+
99 // throw exception if configuration is not supported by this factor
\n+
100 if (Base::params_.degeneracyMode != gtsam::ZERO_ON_DEGENERACY)
\n+
101 throw std::runtime_error(
\n+
102 "SmartProjectionRigFactor: "
\n+
103 "degeneracyMode must be set to ZERO_ON_DEGENERACY");
\n+
104 if (Base::params_.linearizationMode != gtsam::HESSIAN)
\n+
105 throw std::runtime_error(
\n+
106 "SmartProjectionRigFactor: "
\n+
107 "linearizationMode must be set to HESSIAN");
\n+
108 }
\n+
\n+
109
\n+
111 ~SmartProjectionRigFactor() override = default;
\n+
112
\n+
\n+
123 void add(const MEASUREMENT& measured, const Key& poseKey,
\n+
124 const size_t& cameraId = 0) {
\n+
125 // store measurement and key
\n+
126 this->measured_.push_back(measured);
\n+
127 this->nonUniqueKeys_.push_back(poseKey);
\n+
128
\n+
129 // also store keys in the keys_ vector: these keys are assumed to be
\n+
130 // unique, so we avoid duplicates here
\n+
131 if (std::find(this->keys_.begin(), this->keys_.end(), poseKey) ==
\n+
132 this->keys_.end())
\n+
133 this->keys_.push_back(poseKey); // add only unique keys
\n+
134
\n+
135 // store id of the camera taking the measurement
\n+
136 cameraIds_.push_back(cameraId);
\n+
137 }
\n+
\n+
138
\n+
\n+
149 void add(const MEASUREMENTS& measurements, const KeyVector& poseKeys,
\n+\n+
151 if (poseKeys.size() != measurements.size() ||
\n+
152 (poseKeys.size() != cameraIds.size() && cameraIds.size() != 0)) {
\n+
153 throw std::runtime_error(
\n+
154 "SmartProjectionRigFactor: "
\n+
155 "trying to add inconsistent inputs");
\n
156 }
\n-
157
\n-
158 // Whiten the system if needed
\n-
159 const SharedNoiseModel& noiseModel = this->noiseModel();
\n-
160 if (noiseModel && !noiseModel->isUnit()) {
\n-
161 // TODO: implement WhitenSystem for fixed size matrices and include
\n-
162 // above
\n-
163 H1 = noiseModel->Whiten(H1);
\n-
164 H2 = noiseModel->Whiten(H2);
\n-
165 b = noiseModel->Whiten(b);
\n+
157 if (cameraIds.size() == 0 && cameraRig_->size() > 1) {
\n+
158 throw std::runtime_error(
\n+
159 "SmartProjectionRigFactor: "
\n+
160 "camera rig includes multiple camera "
\n+
161 "but add did not input cameraIds");
\n+
162 }
\n+
163 for (size_t i = 0; i < measurements.size(); i++) {
\n+
164 add(measurements[i], poseKeys[i],
\n+
165 cameraIds.size() == 0 ? 0 : cameraIds[i]);
\n
166 }
\n-
167
\n-
168 // Create new (unit) noiseModel, preserving constraints if applicable
\n-
169 SharedDiagonal model;
\n-
170 if (noiseModel && noiseModel->isConstrained()) {
\n-
171 model = boost::static_pointer_cast<noiseModel::Constrained>(noiseModel)->unit();
\n-
172 }
\n-
173
\n-
174 return boost::make_shared<BinaryJacobianFactor<2, DimC, DimL> >(key1, H1, key2, H2, b, model);
\n-
175 }
\n-
176
\n-
178 inline const Point2 measured() const {
\n-
179 return measured_;
\n-
180 }
\n-
181
\n-
182private:
\n-
184 friend class boost::serialization::access;
\n-
185 template<class Archive>
\n-
186 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
187 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n-
188 ar & boost::serialization::make_nvp("NoiseModelFactor2",
\n-
189 boost::serialization::base_object<Base>(*this));
\n-
190 ar & BOOST_SERIALIZATION_NVP(measured_);
\n-
191 }
\n-
192};
\n-
\n-
193
\n-
194template<class CAMERA, class LANDMARK>
\n-
\n-
195struct traits<GeneralSFMFactor<CAMERA, LANDMARK> > : Testable<
\n-
196 GeneralSFMFactor<CAMERA, LANDMARK> > {
\n-
197};
\n-
\n-
198
\n-
203template<class CALIBRATION>
\n-
\n-
204class GeneralSFMFactor2: public NoiseModelFactorN<Pose3, Point3, CALIBRATION> {
\n+
167 }
\n+
\n+
168
\n+
171 const KeyVector& nonUniqueKeys() const { return nonUniqueKeys_; }
\n+
172
\n+
174 const boost::shared_ptr<Cameras>& cameraRig() const { return cameraRig_; }
\n+
175
\n+
177 const FastVector<size_t>& cameraIds() const { return cameraIds_; }
\n+
178
\n+
\n+
184 void print(
\n+
185 const std::string& s = "",
\n+
186 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
187 std::cout << s << "SmartProjectionRigFactor: \\n ";
\n+
188 for (size_t i = 0; i < nonUniqueKeys_.size(); i++) {
\n+
189 std::cout << "-- Measurement nr " << i << std::endl;
\n+
190 std::cout << "key: " << keyFormatter(nonUniqueKeys_[i]) << std::endl;
\n+
191 std::cout << "cameraId: " << cameraIds_[i] << std::endl;
\n+
192 (*cameraRig_)[cameraIds_[i]].print("camera in rig:\\n");
\n+
193 }
\n+
194 Base::print("", keyFormatter);
\n+
195 }
\n+
\n+
196
\n+
\n+
198 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n+
199 const This* e = dynamic_cast<const This*>(&p);
\n+
200 return e && Base::equals(p, tol) && nonUniqueKeys_ == e->nonUniqueKeys() &&
\n+
201 cameraRig_->equals(*(e->cameraRig())) &&
\n+
202 std::equal(cameraIds_.begin(), cameraIds_.end(),
\n+
203 e->cameraIds().begin());
\n+
204 }
\n+
\n
205
\n-
206 GTSAM_CONCEPT_MANIFOLD_TYPE(CALIBRATION)
\n-
207 static const int DimK = FixedDimension<CALIBRATION>::value;
\n-
208
\n-
209protected:
\n-
210
\n-\n-
212
\n-
213public:
\n-
214
\n-\n-\n-\n-
218
\n-
219 // shorthand for a smart pointer to a factor
\n-
220 typedef boost::shared_ptr<This> shared_ptr;
\n-
221
\n-
\n-
230 GeneralSFMFactor2(const Point2& measured, const SharedNoiseModel& model, Key poseKey, Key landmarkKey, Key calibKey) :
\n-
231 Base(model, poseKey, landmarkKey, calibKey), measured_(measured) {}
\n+
\n+
212 typename Base::Cameras cameras(const Values& values) const override {
\n+
213 typename Base::Cameras cameras;
\n+
214 cameras.reserve(nonUniqueKeys_.size()); // preallocate
\n+
215 for (size_t i = 0; i < nonUniqueKeys_.size(); i++) {
\n+
216 const typename Base::Camera& camera_i = (*cameraRig_)[cameraIds_[i]];
\n+
217 const Pose3 world_P_sensor_i =
\n+
218 values.at<Pose3>(nonUniqueKeys_[i]) // = world_P_body
\n+
219 * camera_i.pose(); // = body_P_cam_i
\n+
220 cameras.emplace_back(world_P_sensor_i,
\n+
221 make_shared<typename CAMERA::CalibrationType>(
\n+
222 camera_i.calibration()));
\n+
223 }
\n+
224 return cameras;
\n+
225 }
\n
\n-\n-
233
\n-
\n-
234 ~GeneralSFMFactor2() override {}
\n-
235
\n-
\n-
237 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
238 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
239 gtsam::NonlinearFactor::shared_ptr(new This(*this)));}
\n-
\n-
240
\n-
\n-
246 void print(const std::string& s = "SFMFactor2", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
247 Base::print(s, keyFormatter);
\n-\n-
249 }
\n-
\n-
250
\n-
\n-
254 bool equals(const NonlinearFactor &p, double tol = 1e-9) const override {
\n-
255 const This* e = dynamic_cast<const This*>(&p);
\n-
256 return e && Base::equals(p, tol) && traits<Point2>::Equals(this->measured_, e->measured_, tol);
\n-
257 }
\n-
\n-
258
\n-
\n-
260 Vector evaluateError(const Pose3& pose3, const Point3& point, const CALIBRATION &calib,
\n-
261 boost::optional<Matrix&> H1=boost::none,
\n-
262 boost::optional<Matrix&> H2=boost::none,
\n-
263 boost::optional<Matrix&> H3=boost::none) const override
\n-
264 {
\n-
265 try {
\n-
266 Camera camera(pose3,calib);
\n-
267 return camera.project(point, H1, H2, H3) - measured_;
\n-
268 }
\n-
269 catch( CheiralityException& e) {
\n-
270 if (H1) *H1 = Matrix::Zero(2, 6);
\n-
271 if (H2) *H2 = Matrix::Zero(2, 3);
\n-
272 if (H3) *H3 = Matrix::Zero(2, DimK);
\n-
273 std::cout << e.what() << ": Landmark "<< DefaultKeyFormatter(this->key2())
\n-
274 << " behind Camera " << DefaultKeyFormatter(this->key1()) << std::endl;
\n-
275 }
\n-
276 return Z_2x1;
\n-
277 }
\n-
\n-
278
\n-
\n-
280 inline const Point2 measured() const {
\n-
281 return measured_;
\n-
282 }
\n-
\n-
283
\n-
284private:
\n-\n-
287 template<class Archive>
\n-
288 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
289 // NoiseModelFactor3 instead of NoiseModelFactorN for backward compatibility
\n-
290 ar & boost::serialization::make_nvp("NoiseModelFactor3",
\n-
291 boost::serialization::base_object<Base>(*this));
\n-
292 ar & BOOST_SERIALIZATION_NVP(measured_);
\n-
293 }
\n-
294};
\n-
295
\n-
296template<class CALIBRATION>
\n-
\n-
297struct traits<GeneralSFMFactor2<CALIBRATION> > : Testable<
\n-
298 GeneralSFMFactor2<CALIBRATION> > {
\n-
299};
\n-
\n-
300
\n-
301} //namespace
\n-
\n-
\n-
Base class and basic functions for Manifold types.
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Access to matrices via blocks of pre-defined sizes.
\n-
Typedefs for easier changing of types.
\n-
Concept check for values that can be used in unit tests.
\n-
typedef and functions to augment Eigen's VectorXd
\n-
Timing utilities.
\n-
3D Point
\n-
3D Pose
\n-
Base class for all pinhole cameras.
\n-
2D Point
\n-
A binary JacobianFactor specialization that uses fixed matrix math for speed.
\n-\n-
Non-linear factor base classes.
\n+
226
\n+
\n+
230 double error(const Values& values) const override {
\n+
231 if (this->active(values)) {
\n+
232 return this->totalReprojectionError(this->cameras(values));
\n+
233 } else { // else of active flag
\n+
234 return 0.0;
\n+
235 }
\n+
236 }
\n+
\n+
237
\n+
\n+
247 void computeJacobiansWithTriangulatedPoint(typename Base::FBlocks& Fs,
\n+
248 Matrix& E, Vector& b,
\n+
249 const Cameras& cameras) const {
\n+
250 if (!this->result_) {
\n+
251 throw("computeJacobiansWithTriangulatedPoint");
\n+
252 } else { // valid result: compute jacobians
\n+
253 b = -cameras.reprojectionError(*this->result_, this->measured_, Fs, E);
\n+
254 for (size_t i = 0; i < Fs.size(); i++) {
\n+
255 const Pose3& body_P_sensor = (*cameraRig_)[cameraIds_[i]].pose();
\n+
256 const Pose3 world_P_body = cameras[i].pose() * body_P_sensor.inverse();
\n+
257 Eigen::Matrix<double, DimPose, DimPose> H;
\n+
258 world_P_body.compose(body_P_sensor, H);
\n+
259 Fs.at(i) = Fs.at(i) * H;
\n+
260 }
\n+
261 }
\n+
262 }
\n+
\n+
263
\n+
\n+
265 boost::shared_ptr<RegularHessianFactor<DimPose> > createHessianFactor(
\n+
266 const Values& values, const double& lambda = 0.0,
\n+
267 bool diagonalDamping = false) const {
\n+
268 // we may have multiple observation sharing the same keys (e.g., 2 cameras
\n+
269 // measuring from the same body pose), hence the number of unique keys may
\n+
270 // be smaller than nrMeasurements
\n+
271 size_t nrUniqueKeys =
\n+
272 this->keys_
\n+
273 .size(); // note: by construction, keys_ only contains unique keys
\n+
274
\n+
275 Cameras cameras = this->cameras(values);
\n+
276
\n+
277 // Create structures for Hessian Factors
\n+
278 std::vector<size_t> js;
\n+
279 std::vector<Matrix> Gs(nrUniqueKeys * (nrUniqueKeys + 1) / 2);
\n+
280 std::vector<Vector> gs(nrUniqueKeys);
\n+
281
\n+
282 if (this->measured_.size() != cameras.size()) // 1 observation per camera
\n+
283 throw std::runtime_error(
\n+
284 "SmartProjectionRigFactor: "
\n+
285 "measured_.size() inconsistent with input");
\n+
286
\n+
287 // triangulate 3D point at given linearization point
\n+
288 this->triangulateSafe(cameras);
\n+
289
\n+
290 if (!this->result_) { // failed: return "empty/zero" Hessian
\n+
291 if (this->params_.degeneracyMode == ZERO_ON_DEGENERACY) {
\n+
292 for (Matrix& m : Gs) m = Matrix::Zero(DimPose, DimPose);
\n+
293 for (Vector& v : gs) v = Vector::Zero(DimPose);
\n+
294 return boost::make_shared<RegularHessianFactor<DimPose> >(this->keys_,
\n+
295 Gs, gs, 0.0);
\n+
296 } else {
\n+
297 throw std::runtime_error(
\n+
298 "SmartProjectionRigFactor: "
\n+
299 "only supported degeneracy mode is ZERO_ON_DEGENERACY");
\n+
300 }
\n+
301 }
\n+
302
\n+
303 // compute Jacobian given triangulated 3D Point
\n+
304 typename Base::FBlocks Fs;
\n+
305 Matrix E;
\n+
306 Vector b;
\n+\n+
308
\n+
309 // Whiten using noise model
\n+
310 this->noiseModel_->WhitenSystem(E, b);
\n+
311 for (size_t i = 0; i < Fs.size(); i++) {
\n+
312 Fs[i] = this->noiseModel_->Whiten(Fs[i]);
\n+
313 }
\n+
314
\n+
315 const Matrix3 P = Base::Cameras::PointCov(E, lambda, diagonalDamping);
\n+
316
\n+
317 // Build augmented Hessian (with last row/column being the information
\n+
318 // vector) Note: we need to get the augumented hessian wrt the unique keys
\n+
319 // in key_
\n+
320 SymmetricBlockMatrix augmentedHessianUniqueKeys =
\n+
321 Base::Cameras::template SchurComplementAndRearrangeBlocks<3, 6, 6>(
\n+
322 Fs, E, P, b, nonUniqueKeys_, this->keys_);
\n+
323
\n+
324 return boost::make_shared<RegularHessianFactor<DimPose> >(
\n+
325 this->keys_, augmentedHessianUniqueKeys);
\n+
326 }
\n+
\n+
327
\n+
\n+
335 boost::shared_ptr<GaussianFactor> linearizeDamped(
\n+
336 const Values& values, const double& lambda = 0.0) const {
\n+
337 // depending on flag set on construction we may linearize to different
\n+
338 // linear factors
\n+
339 switch (this->params_.linearizationMode) {
\n+
340 case HESSIAN:
\n+
341 return this->createHessianFactor(values, lambda);
\n+
342 default:
\n+
343 throw std::runtime_error(
\n+
344 "SmartProjectionRigFactor: unknown linearization mode");
\n+
345 }
\n+
346 }
\n+
\n+
347
\n+
\n+
349 boost::shared_ptr<GaussianFactor> linearize(
\n+
350 const Values& values) const override {
\n+
351 return this->linearizeDamped(values);
\n+
352 }
\n+
\n+
353
\n+
354 private:
\n+\n+
357 template <class ARCHIVE>
\n+
358 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
359 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
360 // ar& BOOST_SERIALIZATION_NVP(nonUniqueKeys_);
\n+
361 // ar& BOOST_SERIALIZATION_NVP(cameraRig_);
\n+
362 // ar& BOOST_SERIALIZATION_NVP(cameraIds_);
\n+
363 }
\n+
364};
\n+
\n+
365// end of class declaration
\n+
366
\n+
368template <class CAMERA>
\n+
\n+\n+
370 : public Testable<SmartProjectionRigFactor<CAMERA> > {};
\n+
\n+
371
\n+
372} // namespace gtsam
\n+
Smart factor on cameras (pose + calibration)
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n+
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Definition CalibratedCamera.h:32
\n-
A pinhole camera class that has a Pose3 and a Calibration.
Definition PinholeCamera.h:33
\n+
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n+
Vector reprojectionError(const POINT &point, const ZVector &measured, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Calculate vector [project2(point)-z] of re-projection errors.
Definition CameraSet.h:136
\n
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
Pose3 inverse() const
inverse transformation with derivatives
Definition Pose3.cpp:49
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n-
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Non-linear factor for a constraint derived from a 2D measurement.
Definition GeneralSFMFactor.h:60
\n-
boost::shared_ptr< GaussianFactor > linearize(const Values &values) const override
Linearize using fixed-size matrices.
Definition GeneralSFMFactor.h:138
\n-
Vector evaluateError(const CAMERA &camera, const LANDMARK &point, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
h(x)-z
Definition GeneralSFMFactor.h:124
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition GeneralSFMFactor.h:101
\n-
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition GeneralSFMFactor.h:118
\n-
const Point2 measured() const
return the measured
Definition GeneralSFMFactor.h:177
\n-
GeneralSFMFactor(const Point2 &measured, const SharedNoiseModel &model, Key cameraKey, Key landmarkKey)
Constructor.
Definition GeneralSFMFactor.h:89
\n-
GeneralSFMFactor()
default constructor
Definition GeneralSFMFactor.h:93
\n-
GeneralSFMFactor< CAMERA, LANDMARK > This
typedef for this object
Definition GeneralSFMFactor.h:76
\n-
~GeneralSFMFactor() override
destructor
Definition GeneralSFMFactor.h:98
\n-
NoiseModelFactorN< CAMERA, LANDMARK > Base
typedef for the base class
Definition GeneralSFMFactor.h:77
\n-
void print(const std::string &s="SFMFactor", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition GeneralSFMFactor.h:110
\n-
friend class boost::serialization::access
Serialization function.
Definition GeneralSFMFactor.h:183
\n-
Point2 measured_
the 2D measurement
Definition GeneralSFMFactor.h:72
\n-
Non-linear factor for a constraint derived from a 2D measurement.
Definition GeneralSFMFactor.h:204
\n-
GeneralSFMFactor2()
default constructor
Definition GeneralSFMFactor.h:232
\n-
~GeneralSFMFactor2() override
destructor
Definition GeneralSFMFactor.h:234
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition GeneralSFMFactor.h:237
\n-
NoiseModelFactorN< Pose3, Point3, CALIBRATION > Base
typedef for the base class
Definition GeneralSFMFactor.h:217
\n-
Vector evaluateError(const Pose3 &pose3, const Point3 &point, const CALIBRATION &calib, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none, boost::optional< Matrix & > H3=boost::none) const override
h(x)-z
Definition GeneralSFMFactor.h:260
\n-
void print(const std::string &s="SFMFactor2", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition GeneralSFMFactor.h:246
\n-
Point2 measured_
the 2D measurement
Definition GeneralSFMFactor.h:211
\n-
const Point2 measured() const
return the measured
Definition GeneralSFMFactor.h:280
\n-
PinholeCamera< CALIBRATION > Camera
typedef for camera type
Definition GeneralSFMFactor.h:216
\n-
GeneralSFMFactor2(const Point2 &measured, const SharedNoiseModel &model, Key poseKey, Key landmarkKey, Key calibKey)
Constructor.
Definition GeneralSFMFactor.h:230
\n-
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition GeneralSFMFactor.h:254
\n-
friend class boost::serialization::access
Serialization function.
Definition GeneralSFMFactor.h:286
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n+
SharedIsotropic noiseModel_
As of Feb 22, 2015, the noise model is the same for all measurements and is isotropic.
Definition SmartFactorBase.h:72
\n+
ZVector measured_
Measurements for each of the m views.
Definition SmartFactorBase.h:79
\n+
const ZVector & measured() const
Return the 2D measurements (ZDim, in general).
Definition SmartFactorBase.h:159
\n+
static Matrix PointCov(const Matrix &E)
Computes Point Covariance P from the "point Jacobian" E.
Definition SmartFactorBase.h:274
\n+
Definition SmartFactorParams.h:42
\n+
LinearizationMode linearizationMode
How to linearize the factor.
Definition SmartFactorParams.h:44
\n+
DegeneracyMode degeneracyMode
How to linearize the factor.
Definition SmartFactorParams.h:45
\n+
SmartProjectionFactor: triangulates point and keeps an estimate of it around.
Definition SmartProjectionFactor.h:45
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartProjectionFactor.h:103
\n+
TriangulationResult result_
result from triangulateSafe
Definition SmartProjectionFactor.h:63
\n+
TriangulationResult triangulateSafe(const Cameras &cameras) const
Call gtsam::triangulateSafe iff we need to re-triangulate.
Definition SmartProjectionFactor.h:174
\n+
double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 > externalPoint=boost::none) const
Calculate the error of the factor.
Definition SmartProjectionFactor.h:411
\n+
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartProjectionFactor.h:115
\n+
CAMERA Camera
shorthand for a set of cameras
Definition SmartProjectionFactor.h:74
\n+
If you are using the factor, please cite: L.
Definition SmartProjectionRigFactor.h:52
\n+
KeyVector nonUniqueKeys_
vector of keys (one for each observation) with potentially repeated keys
Definition SmartProjectionRigFactor.h:65
\n+
FastVector< size_t > cameraIds_
vector of camera Ids (one for each observation, in the same order), identifying which camera took the...
Definition SmartProjectionRigFactor.h:72
\n+
const FastVector< size_t > & cameraIds() const
return the calibration object
Definition SmartProjectionRigFactor.h:177
\n+
boost::shared_ptr< RegularHessianFactor< DimPose > > createHessianFactor(const Values &values, const double &lambda=0.0, bool diagonalDamping=false) const
linearize and return a Hessianfactor that is an approximation of error(p)
Definition SmartProjectionRigFactor.h:265
\n+
void add(const MEASUREMENT &measured, const Key &poseKey, const size_t &cameraId=0)
add a new measurement, corresponding to an observation from pose "poseKey" and taken from the camera ...
Definition SmartProjectionRigFactor.h:123
\n+
boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor
Definition SmartProjectionRigFactor.h:81
\n+
void computeJacobiansWithTriangulatedPoint(typename Base::FBlocks &Fs, Matrix &E, Vector &b, const Cameras &cameras) const
Compute jacobian F, E and error vector at a given linearization point.
Definition SmartProjectionRigFactor.h:247
\n+
void add(const MEASUREMENTS &measurements, const KeyVector &poseKeys, const FastVector< size_t > &cameraIds=FastVector< size_t >())
Variant of the previous "add" function in which we include multiple measurements.
Definition SmartProjectionRigFactor.h:149
\n+
SmartProjectionRigFactor()
Default constructor, only for serialization.
Definition SmartProjectionRigFactor.h:84
\n+
double error(const Values &values) const override
error calculates the error of the factor.
Definition SmartProjectionRigFactor.h:230
\n+
Base::Cameras cameras(const Values &values) const override
Collect all cameras involved in this factor.
Definition SmartProjectionRigFactor.h:212
\n+
~SmartProjectionRigFactor() override=default
Virtual destructor.
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartProjectionRigFactor.h:184
\n+
boost::shared_ptr< GaussianFactor > linearize(const Values &values) const override
linearize
Definition SmartProjectionRigFactor.h:349
\n+
friend class boost::serialization::access
Serialization function.
Definition SmartProjectionRigFactor.h:356
\n+
const KeyVector & nonUniqueKeys() const
return (for each observation) the (possibly non unique) keys involved in the measurements
Definition SmartProjectionRigFactor.h:171
\n+
boost::shared_ptr< typename Base::Cameras > cameraRig_
cameras in the rig (fixed poses wrt body and intrinsics, for each camera)
Definition SmartProjectionRigFactor.h:68
\n+
SmartProjectionRigFactor(const SharedNoiseModel &sharedNoiseModel, const boost::shared_ptr< Cameras > &cameraRig, const SmartProjectionParams &params=SmartProjectionParams())
Constructor.
Definition SmartProjectionRigFactor.h:94
\n+
const boost::shared_ptr< Cameras > & cameraRig() const
return the calibration object
Definition SmartProjectionRigFactor.h:174
\n+
boost::shared_ptr< GaussianFactor > linearizeDamped(const Values &values, const double &lambda=0.0) const
Linearize to Gaussian Factor (possibly adding a damping factor Lambda for LM)
Definition SmartProjectionRigFactor.h:335
\n+
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartProjectionRigFactor.h:198
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,310 +1,294 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GeneralSFMFactor.h\n+SmartProjectionRigFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n-30#include \n-31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-32#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-33#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-34#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-35#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-36#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-37#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n-38\n-39#include \n-40#include \n-41#include \n-42#include \n-43#include \n-44#include \n-45\n-46namespace boost {\n-47namespace serialization {\n-48class access;\n-49} /* namespace serialization */\n-50} /* namespace boost */\n-51\n-52namespace _\bg_\bt_\bs_\ba_\bm {\n-53\n-59template\n-_\b6_\b0class _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-61\n-62 GTSAM_CONCEPT_MANIFOLD_TYPE(CAMERA)\n-63 GTSAM_CONCEPT_MANIFOLD_TYPE(LANDMARK)\n-64\n-65 static const int DimC = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n-66 static const int DimL = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n-67 typedef Eigen::Matrix JacobianC;\n-68 typedef Eigen::Matrix JacobianL;\n+25#pragma once\n+26\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+51template \n+_\b5_\b2class _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br : public _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n+53 private:\n+54 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> _\bB_\ba_\bs_\be;\n+55 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> This;\n+56 typedef typename CAMERA::CalibrationType CALIBRATION;\n+57 typedef typename CAMERA::Measurement MEASUREMENT;\n+58 typedef typename CAMERA::MeasurementVector MEASUREMENTS;\n+59\n+60 static const int DimPose = 6;\n+61 static const int ZDim = 2;\n+62\n+63 protected:\n+_\b6_\b5 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_;\n+66\n+_\b6_\b8 boost::shared_ptr _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_;\n 69\n-70protected:\n-71\n-_\b7_\b2 _\bP_\bo_\bi_\bn_\bt_\b2 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+_\b7_\b2 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b> _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_;\n 73\n-74public:\n-75\n-_\b7_\b6 typedef _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b> _\bT_\bh_\bi_\bs;\n-_\b7_\b7 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b> _\bB_\ba_\bs_\be;\n-78\n-79 // shorthand for a smart pointer to a factor\n-80 typedef boost::shared_ptr shared_ptr;\n-81\n-_\b8_\b9 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n-90 _\bK_\be_\by cameraKey, _\bK_\be_\by landmarkKey)\n-91 : _\bB_\ba_\bs_\be(model, cameraKey, landmarkKey), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd) {}\n-92\n-_\b9_\b3 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br() : _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(0.0, 0.0) {}\n-95 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b2& p) : _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(p) {}\n-97 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br(double x, double y) : _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(x, y) {}\n-_\b9_\b8\n-99 _\b~_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-100\n-102 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-103 return boost::static_pointer_cast(\n-104 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));}\n-105\n-111 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"SFMFactor\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n-keyFormatter = DefaultKeyFormatter) const override {\n-112 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n-113 traits::Print(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, s + \".z\");\n-114 }\n-115\n-119 bool _\be_\bq_\bu_\ba_\bl_\bs(const NonlinearFactor &p, double tol = 1e-9) const override {\n-120 const _\bT_\bh_\bi_\bs* e = dynamic_cast(&p);\n-121 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol) && traits::Equals(this->measured_,\n-e->measured_, tol);\n-122 }\n-123\n-125 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const CAMERA& camera, const LANDMARK& point,\n-126 boost::optional H1=boost::none, boost::optional\n-H2=boost::none) const override {\n-127 try {\n-128 return camera.project2(point,H1,H2) - _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-129 }\n-130 catch( CheiralityException& e) {\n-131 if (H1) *H1 = JacobianC::Zero();\n-132 if (H2) *H2 = JacobianL::Zero();\n-133 //TODO Print the exception via logging\n-134 return Z_2x1;\n-135 }\n-136 }\n-137\n-139 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& values) const\n-override {\n-140 // Only linearize if the factor is active\n-141 if (!this->_\ba_\bc_\bt_\bi_\bv_\be(values)) return boost::shared_ptr();\n-142\n-143 const _\bK_\be_\by key1 = this->key1(), key2 = this->key2();\n-144 JacobianC H1;\n-145 JacobianL H2;\n-146 Vector2 b;\n-147 try {\n-148 const CAMERA& camera = values.at(key1);\n-149 const LANDMARK& point = values.at(key2);\n-150 b = _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() - camera.project2(point, H1, H2);\n-151 } catch (CheiralityException& e) {\n-152 H1.setZero();\n-153 H2.setZero();\n-154 b.setZero();\n-155 //TODO Print the exception via logging\n+74 public:\n+75 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n+76\n+77 typedef CAMERA _\bC_\ba_\bm_\be_\br_\ba;\n+78 typedef _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> _\bC_\ba_\bm_\be_\br_\ba_\bs;\n+79\n+_\b8_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+82\n+_\b8_\b4 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br() {}\n+85\n+_\b9_\b4 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br(\n+95 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& sharedNoiseModel,\n+96 const boost::shared_ptr& _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg,\n+97 const _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& params = _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs())\n+98 : _\bB_\ba_\bs_\be(sharedNoiseModel, params), _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_(_\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg) {\n+99 // throw exception if configuration is not supported by this factor\n+100 if (Base::params_.degeneracyMode != gtsam::ZERO_ON_DEGENERACY)\n+101 throw std::runtime_error(\n+102 \"SmartProjectionRigFactor: \"\n+103 \"degeneracyMode must be set to ZERO_ON_DEGENERACY\");\n+104 if (Base::params_.linearizationMode != gtsam::HESSIAN)\n+105 throw std::runtime_error(\n+106 \"SmartProjectionRigFactor: \"\n+107 \"linearizationMode must be set to HESSIAN\");\n+108 }\n+109\n+_\b1_\b1_\b1 _\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br() override = default;\n+112\n+_\b1_\b2_\b3 void _\ba_\bd_\bd(const MEASUREMENT& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bK_\be_\by& poseKey,\n+124 const size_t& cameraId = 0) {\n+125 // store measurement and key\n+126 this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.push_back(measured);\n+127 this->nonUniqueKeys_.push_back(poseKey);\n+128\n+129 // also store keys in the keys_ vector: these keys are assumed to be\n+130 // unique, so we avoid duplicates here\n+131 if (std::find(this->_\bk_\be_\by_\bs_\b_.begin(), this->keys_.end(), poseKey) ==\n+132 this->keys_.end())\n+133 this->_\bk_\be_\by_\bs_\b_.push_back(poseKey); // add only unique keys\n+134\n+135 // store id of the camera taking the measurement\n+136 _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_.push_back(cameraId);\n+137 }\n+138\n+_\b1_\b4_\b9 void _\ba_\bd_\bd(const MEASUREMENTS& measurements, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& poseKeys,\n+150 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b>& _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs = _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b>()) {\n+151 if (poseKeys.size() != measurements.size() ||\n+152 (poseKeys.size() != _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs.size() && _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs.size() != 0)) {\n+153 throw std::runtime_error(\n+154 \"SmartProjectionRigFactor: \"\n+155 \"trying to add inconsistent inputs\");\n 156 }\n-157\n-158 // Whiten the system if needed\n-159 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl = this->noiseModel();\n-160 if (noiseModel && !noiseModel->isUnit()) {\n-161 // TODO: implement WhitenSystem for fixed size matrices and include\n-162 // above\n-163 H1 = noiseModel->Whiten(H1);\n-164 H2 = noiseModel->Whiten(H2);\n-165 b = noiseModel->Whiten(b);\n+157 if (_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs.size() == 0 && _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_->size() > 1) {\n+158 throw std::runtime_error(\n+159 \"SmartProjectionRigFactor: \"\n+160 \"camera rig includes multiple camera \"\n+161 \"but add did not input cameraIds\");\n+162 }\n+163 for (size_t i = 0; i < measurements.size(); i++) {\n+164 _\ba_\bd_\bd(measurements[i], poseKeys[i],\n+165 _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs.size() == 0 ? 0 : _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs[i]);\n 166 }\n-167\n-168 // Create new (unit) noiseModel, preserving constraints if applicable\n-169 SharedDiagonal model;\n-170 if (noiseModel && noiseModel->isConstrained()) {\n-171 model = boost::static_pointer_cast(noiseModel)-\n->unit();\n-172 }\n-173\n-174 return boost::make_shared >(key1, H1,\n-key2, H2, b, model);\n-175 }\n-176\n-178 inline const _\bP_\bo_\bi_\bn_\bt_\b2 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n-179 return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-180 }\n-181\n-182private:\n-184 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-185 template\n-186 void serialize(Archive & ar, const unsigned int /*version*/) {\n-187 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n-compatibility\n-188 ar & boost::serialization::make_nvp(\"NoiseModelFactor2\",\n-189 boost::serialization::base_object(*this));\n-190 ar & BOOST_SERIALIZATION_NVP(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-191 }\n-192};\n-193\n-194template\n-_\b1_\b9_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br > : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n-196 GeneralSFMFactor > {\n-197};\n-198\n-203template\n-_\b2_\b0_\b4class _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+167 }\n+168\n+_\b1_\b7_\b1 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs() const { return _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_; }\n+172\n+_\b1_\b7_\b4 const boost::shared_ptr& _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg() const { return _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_; }\n+175\n+_\b1_\b7_\b7 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b>& _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs() const { return _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_; }\n+178\n+_\b1_\b8_\b4 void _\bp_\br_\bi_\bn_\bt(\n+185 const std::string& s = \"\",\n+186 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+187 std::cout << s << \"SmartProjectionRigFactor: \\n \";\n+188 for (size_t i = 0; i < _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_.size(); i++) {\n+189 std::cout << \"-- Measurement nr \" << i << std::endl;\n+190 std::cout << \"key: \" << keyFormatter(_\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_[i]) << std::endl;\n+191 std::cout << \"cameraId: \" << _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_[i] << std::endl;\n+192 (*cameraRig_)[_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_[i]].print(\"camera in rig:\\n\");\n+193 }\n+194 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n+195 }\n+196\n+_\b1_\b9_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n+199 const This* e = dynamic_cast(&p);\n+200 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol) && _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_ == e->nonUniqueKeys() &&\n+201 _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_->equals(*(e->cameraRig())) &&\n+202 std::equal(_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_.begin(), _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_.end(),\n+203 e->cameraIds().begin());\n+204 }\n 205\n-206 GTSAM_CONCEPT_MANIFOLD_TYPE(CALIBRATION)\n-207 static const int DimK = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n-208\n-209protected:\n-210\n-_\b2_\b1_\b1 _\bP_\bo_\bi_\bn_\bt_\b2 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-212\n-213public:\n-214\n-215 typedef _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> This;\n-_\b2_\b1_\b6 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> _\bC_\ba_\bm_\be_\br_\ba;\n-_\b2_\b1_\b7 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b,_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> _\bB_\ba_\bs_\be;\n-218\n-219 // shorthand for a smart pointer to a factor\n-220 typedef boost::shared_ptr shared_ptr;\n-221\n-_\b2_\b3_\b0 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2(const _\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n-_\bK_\be_\by poseKey, _\bK_\be_\by landmarkKey, _\bK_\be_\by calibKey) :\n-231 _\bB_\ba_\bs_\be(model, poseKey, landmarkKey, calibKey), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd) {}\n-_\b2_\b3_\b2 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2():_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(0.0,0.0) {}\n-233\n-_\b2_\b3_\b4 _\b~_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2() override {}\n-235\n-_\b2_\b3_\b7 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-238 return boost::static_pointer_cast(\n-239 gtsam::NonlinearFactor::shared_ptr(new This(*this)));}\n-240\n-_\b2_\b4_\b6 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"SFMFactor2\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n-keyFormatter = DefaultKeyFormatter) const override {\n-247 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n-248 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b2_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, s + \".z\");\n-249 }\n-250\n-_\b2_\b5_\b4 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br &p, double tol = 1e-9) const override {\n-255 const This* e = dynamic_cast(&p);\n-256 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol) && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b2_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_,\n-e->measured_, tol);\n-257 }\n-258\n-_\b2_\b6_\b0 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bs_\be_\b3& pose3, const _\bP_\bo_\bi_\bn_\bt_\b3& point, const\n-CALIBRATION &calib,\n-261 boost::optional H1=boost::none,\n-262 boost::optional H2=boost::none,\n-263 boost::optional H3=boost::none) const override\n-264 {\n-265 try {\n-266 _\bC_\ba_\bm_\be_\br_\ba camera(pose3,calib);\n-267 return camera.project(point, H1, H2, H3) - _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-268 }\n-269 catch( _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn& e) {\n-270 if (H1) *H1 = Matrix::Zero(2, 6);\n-271 if (H2) *H2 = Matrix::Zero(2, 3);\n-272 if (H3) *H3 = Matrix::Zero(2, DimK);\n-273 std::cout << e.what() << \": Landmark \"<< DefaultKeyFormatter(this->key2())\n-274 << \" behind Camera \" << DefaultKeyFormatter(this->key1()) << std::endl;\n-275 }\n-276 return Z_2x1;\n-277 }\n-278\n-_\b2_\b8_\b0 inline const _\bP_\bo_\bi_\bn_\bt_\b2 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n-281 return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-282 }\n-283\n-284private:\n-_\b2_\b8_\b6 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-287 template\n-288 void serialize(Archive & ar, const unsigned int /*version*/) {\n-289 // NoiseModelFactor3 instead of NoiseModelFactorN for backward\n-compatibility\n-290 ar & boost::serialization::make_nvp(\"NoiseModelFactor3\",\n-291 boost::serialization::base_object(*this));\n-292 ar & BOOST_SERIALIZATION_NVP(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-293 }\n-294};\n-295\n-296template\n-_\b2_\b9_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2 > : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n-298 GeneralSFMFactor2 > {\n-299};\n-300\n-301} //namespace\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-Access to matrices via blocks of pre-defined sizes.\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\n-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n-_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n-Base class for all pinhole cameras.\n-_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-2D Point\n-_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-A binary JacobianFactor specialization that uses fixed matrix math for speed.\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+_\b2_\b1_\b2 typename _\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n+213 typename _\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs;\n+214 _\bc_\ba_\bm_\be_\br_\ba_\bs.reserve(_\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_.size()); // preallocate\n+215 for (size_t i = 0; i < _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_.size(); i++) {\n+216 const typename _\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba& camera_i = (*cameraRig_)[_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_[i]];\n+217 const _\bP_\bo_\bs_\be_\b3 world_P_sensor_i =\n+218 values._\ba_\bt<_\bP_\bo_\bs_\be_\b3>(_\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_[i]) // = world_P_body\n+219 * camera_i.pose(); // = body_P_cam_i\n+220 _\bc_\ba_\bm_\be_\br_\ba_\bs.emplace_back(world_P_sensor_i,\n+221 make_shared(\n+222 camera_i.calibration()));\n+223 }\n+224 return _\bc_\ba_\bm_\be_\br_\ba_\bs;\n+225 }\n+226\n+_\b2_\b3_\b0 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n+231 if (this->_\ba_\bc_\bt_\bi_\bv_\be(values)) {\n+232 return this->_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values));\n+233 } else { // else of active flag\n+234 return 0.0;\n+235 }\n+236 }\n+237\n+_\b2_\b4_\b7 void _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt(typename Base::FBlocks& Fs,\n+248 Matrix& E, Vector& b,\n+249 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n+250 if (!this->_\br_\be_\bs_\bu_\bl_\bt_\b_) {\n+251 throw(\"computeJacobiansWithTriangulatedPoint\");\n+252 } else { // valid result: compute jacobians\n+253 b = -_\bc_\ba_\bm_\be_\br_\ba_\bs._\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(*this->_\br_\be_\bs_\bu_\bl_\bt_\b_, this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, Fs, E);\n+254 for (size_t i = 0; i < Fs.size(); i++) {\n+255 const _\bP_\bo_\bs_\be_\b3& body_P_sensor = (*cameraRig_)[_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_[i]].pose();\n+256 const _\bP_\bo_\bs_\be_\b3 world_P_body = _\bc_\ba_\bm_\be_\br_\ba_\bs[i].pose() * body_P_sensor._\bi_\bn_\bv_\be_\br_\bs_\be();\n+257 Eigen::Matrix H;\n+258 world_P_body.compose(body_P_sensor, H);\n+259 Fs.at(i) = Fs.at(i) * H;\n+260 }\n+261 }\n+262 }\n+263\n+_\b2_\b6_\b5 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n+266 const _\bV_\ba_\bl_\bu_\be_\bs& values, const double& lambda = 0.0,\n+267 bool diagonalDamping = false) const {\n+268 // we may have multiple observation sharing the same keys (e.g., 2 cameras\n+269 // measuring from the same body pose), hence the number of unique keys may\n+270 // be smaller than nrMeasurements\n+271 size_t nrUniqueKeys =\n+272 this->_\bk_\be_\by_\bs_\b_\n+273 .size(); // note: by construction, keys_ only contains unique keys\n+274\n+275 Cameras _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n+276\n+277 // Create structures for Hessian Factors\n+278 std::vector js;\n+279 std::vector Gs(nrUniqueKeys * (nrUniqueKeys + 1) / 2);\n+280 std::vector gs(nrUniqueKeys);\n+281\n+282 if (this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.size() != cameras.size()) // 1 observation per camera\n+283 throw std::runtime_error(\n+284 \"SmartProjectionRigFactor: \"\n+285 \"measured_.size() inconsistent with input\");\n+286\n+287 // triangulate 3D point at given linearization point\n+288 this->_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(cameras);\n+289\n+290 if (!this->_\br_\be_\bs_\bu_\bl_\bt_\b_) { // failed: return \"empty/zero\" Hessian\n+291 if (this->params_._\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be == ZERO_ON_DEGENERACY) {\n+292 for (Matrix& m : Gs) m = Matrix::Zero(DimPose, DimPose);\n+293 for (Vector& v : gs) v = Vector::Zero(DimPose);\n+294 return boost::make_shared >(this->_\bk_\be_\by_\bs_\b_,\n+295 Gs, gs, 0.0);\n+296 } else {\n+297 throw std::runtime_error(\n+298 \"SmartProjectionRigFactor: \"\n+299 \"only supported degeneracy mode is ZERO_ON_DEGENERACY\");\n+300 }\n+301 }\n+302\n+303 // compute Jacobian given triangulated 3D Point\n+304 typename Base::FBlocks Fs;\n+305 Matrix E;\n+306 Vector b;\n+307 this->_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs);\n+308\n+309 // Whiten using noise model\n+310 this->_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->WhitenSystem(E, b);\n+311 for (size_t i = 0; i < Fs.size(); i++) {\n+312 Fs[i] = this->_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->Whiten(Fs[i]);\n+313 }\n+314\n+315 const Matrix3 P = _\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv(E, lambda, diagonalDamping);\n+316\n+317 // Build augmented Hessian (with last row/column being the information\n+318 // vector) Note: we need to get the augumented hessian wrt the unique keys\n+319 // in key_\n+320 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessianUniqueKeys =\n+321 Base::Cameras::template SchurComplementAndRearrangeBlocks<3, 6, 6>(\n+322 Fs, E, P, b, _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_, this->_\bk_\be_\by_\bs_\b_);\n+323\n+324 return boost::make_shared >(\n+325 this->_\bk_\be_\by_\bs_\b_, augmentedHessianUniqueKeys);\n+326 }\n+327\n+_\b3_\b3_\b5 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(\n+336 const _\bV_\ba_\bl_\bu_\be_\bs& values, const double& lambda = 0.0) const {\n+337 // depending on flag set on construction we may linearize to different\n+338 // linear factors\n+339 switch (this->params_._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be) {\n+340 case HESSIAN:\n+341 return this->_\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(values, lambda);\n+342 default:\n+343 throw std::runtime_error(\n+344 \"SmartProjectionRigFactor: unknown linearization mode\");\n+345 }\n+346 }\n+347\n+_\b3_\b4_\b9 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(\n+350 const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n+351 return this->_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(values);\n+352 }\n+353\n+354 private:\n+_\b3_\b5_\b6 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+357 template \n+358 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+359 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+360 // ar& BOOST_SERIALIZATION_NVP(nonUniqueKeys_);\n+361 // ar& BOOST_SERIALIZATION_NVP(cameraRig_);\n+362 // ar& BOOST_SERIALIZATION_NVP(cameraIds_);\n+363 }\n+364};\n+365// end of class declaration\n+366\n+368template \n+_\b3_\b6_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br >\n+370 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n+371\n+372} // namespace gtsam\n+_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Smart factor on cameras (pose + calibration)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n Aliases.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n@@ -313,165 +297,207 @@\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-Give fixed size dimension of a type, fails at compile time if dynamic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n-A pinhole camera class that has a Pose3 and a Calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n+A set of cameras, all with their own calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n+Vector reprojectionError(const POINT &point, const ZVector &measured, boost::\n+optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::\n+none) const\n+Calculate vector [project2(point)-z] of re-projection errors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:136\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n A 3D pose (R,t) : (Rot3,Point3)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n+Pose3 inverse() const\n+inverse transformation with derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n virtual bool active(const Values &) const\n Checks whether a factor should be used based on a set of values.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-const SharedNoiseModel & noiseModel() const\n-access to the noise model\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br\n-Non-linear factor for a constraint derived from a 2D measurement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianFactor > linearize(const Values &values) const\n-override\n-Linearize using fixed-size matrices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const CAMERA &camera, const LANDMARK &point, boost::\n-optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::\n-none) const override\n-h(x)-z\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:124\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+const ValueType at(Key j) const\n+Retrieve a variable by key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_\n+SharedIsotropic noiseModel_\n+As of Feb 22, 2015, the noise model is the same for all measurements and is\n+isotropic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n+ZVector measured_\n+Measurements for each of the m views.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const ZVector & measured() const\n+Return the 2D measurements (ZDim, in general).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv\n+static Matrix PointCov(const Matrix &E)\n+Computes Point Covariance P from the \"point Jacobian\" E.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:274\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n+LinearizationMode linearizationMode\n+How to linearize the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be\n+DegeneracyMode degeneracyMode\n+How to linearize the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+SmartProjectionFactor: triangulates point and keeps an estimate of it around.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\br_\be_\bs_\bu_\bl_\bt_\b_\n+TriangulationResult result_\n+result from triangulateSafe\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be\n+TriangulationResult triangulateSafe(const Cameras &cameras) const\n+Call gtsam::triangulateSafe iff we need to re-triangulate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n+double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 >\n+externalPoint=boost::none) const\n+Calculate the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:411\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const Point2 measured() const\n-return the measured\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br\n-GeneralSFMFactor(const Point2 &measured, const SharedNoiseModel &model, Key\n-cameraKey, Key landmarkKey)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br\n-GeneralSFMFactor()\n-default constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-GeneralSFMFactor< CAMERA, LANDMARK > This\n-typedef for this object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br\n-~GeneralSFMFactor() override\n-destructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-NoiseModelFactorN< CAMERA, LANDMARK > Base\n-typedef for the base class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"SFMFactor\", const KeyFormatter\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba\n+CAMERA Camera\n+shorthand for a set of cameras\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br\n+If you are using the factor, please cite: L.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_\n+KeyVector nonUniqueKeys_\n+vector of keys (one for each observation) with potentially repeated keys\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_\n+FastVector< size_t > cameraIds_\n+vector of camera Ids (one for each observation, in the same order), identifying\n+which camera took the...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs\n+const FastVector< size_t > & cameraIds() const\n+return the calibration object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< RegularHessianFactor< DimPose > > createHessianFactor(const\n+Values &values, const double &lambda=0.0, bool diagonalDamping=false) const\n+linearize and return a Hessianfactor that is an approximation of error(p)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:265\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bd\n+void add(const MEASUREMENT &measured, const Key &poseKey, const size_t\n+&cameraId=0)\n+add a new measurement, corresponding to an observation from pose \"poseKey\" and\n+taken from the camera ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shorthand for a smart pointer to a factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt\n+void computeJacobiansWithTriangulatedPoint(typename Base::FBlocks &Fs, Matrix\n+&E, Vector &b, const Cameras &cameras) const\n+Compute jacobian F, E and error vector at a given linearization point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:247\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bd\n+void add(const MEASUREMENTS &measurements, const KeyVector &poseKeys, const\n+FastVector< size_t > &cameraIds=FastVector< size_t >())\n+Variant of the previous \"add\" function in which we include multiple\n+measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:149\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br\n+SmartProjectionRigFactor()\n+Default constructor, only for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &values) const override\n+error calculates the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:230\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs\n+Base::Cameras cameras(const Values &values) const override\n+Collect all cameras involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br\n+~SmartProjectionRigFactor() override=default\n+Virtual destructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianFactor > linearize(const Values &values) const\n+override\n+linearize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:349\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n friend class boost::serialization::access\n Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:183\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n-Point2 measured_\n-the 2D measurement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-Non-linear factor for a constraint derived from a 2D measurement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:204\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-GeneralSFMFactor2()\n-default constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:232\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\b~_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-~GeneralSFMFactor2() override\n-destructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:234\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:237\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bB_\ba_\bs_\be\n-NoiseModelFactorN< Pose3, Point3, CALIBRATION > Base\n-typedef for the base class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:217\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Pose3 &pose3, const Point3 &point, const CALIBRATION\n-&calib, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & >\n-H2=boost::none, boost::optional< Matrix & > H3=boost::none) const override\n-h(x)-z\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"SFMFactor2\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:246\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n-Point2 measured_\n-the 2D measurement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:211\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const Point2 measured() const\n-return the measured\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:280\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba\n-PinholeCamera< CALIBRATION > Camera\n-typedef for camera type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:216\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-GeneralSFMFactor2(const Point2 &measured, const SharedNoiseModel &model, Key\n-poseKey, Key landmarkKey, Key calibKey)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:356\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs\n+const KeyVector & nonUniqueKeys() const\n+return (for each observation) the (possibly non unique) keys involved in the\n+measurements\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:171\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_\n+boost::shared_ptr< typename Base::Cameras > cameraRig_\n+cameras in the rig (fixed poses wrt body and intrinsics, for each camera)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br\n+SmartProjectionRigFactor(const SharedNoiseModel &sharedNoiseModel, const\n+boost::shared_ptr< Cameras > &cameraRig, const SmartProjectionParams\n+¶ms=SmartProjectionParams())\n Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:230\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg\n+const boost::shared_ptr< Cameras > & cameraRig() const\n+return the calibration object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd\n+boost::shared_ptr< GaussianFactor > linearizeDamped(const Values &values, const\n+double &lambda=0.0) const\n+Linearize to Gaussian Factor (possibly adding a damping factor Lambda for LM)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:335\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:254\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:286\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:198\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01295_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01295_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/OrientedPlane3Factor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartFactorParams.h Source File\n \n \n \n \n \n \n \n@@ -98,113 +98,157 @@\n
No Matches
\n \n \n \n \n \n
\n-
OrientedPlane3Factor.h
\n+
SmartFactorParams.h
\n
\n
\n-
1/*
\n-
2 * @file OrientedPlane3Factor.cpp
\n-
3 * @brief OrientedPlane3 Factor class
\n-
4 * @author Alex Trevor
\n-
5 * @date December 22, 2013
\n-
6 */
\n-
7
\n-
8#pragma once
\n-
9
\n-
10#include <gtsam/geometry/OrientedPlane3.h>
\n-\n-
12
\n-
13namespace gtsam {
\n-
14
\n-
\n-
18class GTSAM_EXPORT OrientedPlane3Factor: public NoiseModelFactorN<Pose3, OrientedPlane3> {
\n-
19 protected:
\n-
20 OrientedPlane3 measured_p_;
\n-\n-
22
\n-
23 public:
\n-
\n-\n-
26 }
\n-
\n-
27 ~OrientedPlane3Factor() override {}
\n-
28
\n-
\n-
36 OrientedPlane3Factor(const Vector4& z, const SharedGaussian& noiseModel,
\n-
37 Key poseKey, Key landmarkKey)
\n-
38 : Base(noiseModel, poseKey, landmarkKey), measured_p_(z) {}
\n-
\n-
39
\n-
41 void print(const std::string& s = "OrientedPlane3Factor",
\n-
42 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n+
11
\n+
20#pragma once
\n+
21
\n+\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
\n+\n+
31 HESSIAN, IMPLICIT_SCHUR, JACOBIAN_Q, JACOBIAN_SVD
\n+
32};
\n+
\n+
33
\n+
\n+\n+
36 IGNORE_DEGENERACY, ZERO_ON_DEGENERACY, HANDLE_INFINITY
\n+
37};
\n+
\n+
38
\n+
39/*
\n+
40 * Parameters for the smart (stereo) projection factors
\n+
41 */
\n+
\n+\n
43
\n-
45 Vector evaluateError(
\n-
46 const Pose3& pose, const OrientedPlane3& plane,
\n-
47 boost::optional<Matrix&> H1 = boost::none,
\n-
48 boost::optional<Matrix&> H2 = boost::none) const override;
\n-
49};
\n-
\n-
50
\n-
51// TODO: Convert this factor to dimension two, three dimensions is redundant for direction prior
\n-
\n-
52class GTSAM_EXPORT OrientedPlane3DirectionPrior : public NoiseModelFactorN<OrientedPlane3> {
\n-
53 protected:
\n-
54 OrientedPlane3 measured_p_;
\n-\n-
56
\n-
57 public:
\n-\n-\n-
62
\n-
\n-
64 OrientedPlane3DirectionPrior(Key key, const Vector4& z,
\n-
65 const SharedGaussian& noiseModel)
\n-
66 : Base(noiseModel, key), measured_p_(z) {}
\n-
\n+\n+\n+
46
\n+
49 TriangulationParameters triangulation;
\n+\n+
52
\n+\n+\n+
58
\n+
59 // Constructor
\n+\n+
61 DegeneracyMode degMode = IGNORE_DEGENERACY, bool throwCheirality = false,
\n+
62 bool verboseCheirality = false, double retriangulationTh = 1e-5) :
\n+\n+\n+\n+
66 }
\n
67
\n-
69 void print(const std::string& s = "OrientedPlane3DirectionPrior",
\n-
70 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n-
71
\n-
73 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n-
74
\n-
75 Vector evaluateError(const OrientedPlane3& plane,
\n-
76 boost::optional<Matrix&> H = boost::none) const override;
\n-
77};
\n-
\n-
78
\n-
79} // gtsam
\n-
80
\n-
Non-linear factor base classes.
\n+
68 virtual ~SmartProjectionParams() {
\n+
69 }
\n+
70
\n+
71 void print(const std::string& str = "") const {
\n+
72 std::cout << "linearizationMode: " << linearizationMode << "\\n";
\n+
73 std::cout << " degeneracyMode: " << degeneracyMode << "\\n";
\n+
74 std::cout << triangulation << std::endl;
\n+
75 }
\n+
76
\n+
77 // get class variables
\n+
78 LinearizationMode getLinearizationMode() const {
\n+
79 return linearizationMode;
\n+
80 }
\n+
81 DegeneracyMode getDegeneracyMode() const {
\n+
82 return degeneracyMode;
\n+
83 }
\n+
84 TriangulationParameters getTriangulationParameters() const {
\n+
85 return triangulation;
\n+
86 }
\n+
87 bool getVerboseCheirality() const {
\n+
88 return verboseCheirality;
\n+
89 }
\n+
90 bool getThrowCheirality() const {
\n+
91 return throwCheirality;
\n+
92 }
\n+
93 double getRetriangulationThreshold() const {
\n+\n+
95 }
\n+
96 // set class variables
\n+
97 void setLinearizationMode(LinearizationMode linMode) {
\n+
98 linearizationMode = linMode;
\n+
99 }
\n+
100 void setDegeneracyMode(DegeneracyMode degMode) {
\n+
101 degeneracyMode = degMode;
\n+
102 }
\n+
103 void setRetriangulationThreshold(double retriangulationTh) {
\n+
104 retriangulationThreshold = retriangulationTh;
\n+
105 }
\n+
106 void setRankTolerance(double rankTol) {
\n+
107 triangulation.rankTolerance = rankTol;
\n+
108 }
\n+
109 void setEnableEPI(bool enableEPI) {
\n+
110 triangulation.enableEPI = enableEPI;
\n+
111 }
\n+
112 void setLandmarkDistanceThreshold(double landmarkDistanceThreshold) {
\n+
113 triangulation.landmarkDistanceThreshold = landmarkDistanceThreshold;
\n+
114 }
\n+
115 void setDynamicOutlierRejectionThreshold(double dynOutRejectionThreshold) {
\n+
116 triangulation.dynamicOutlierRejectionThreshold = dynOutRejectionThreshold;
\n+
117 }
\n+
118
\n+
119private:
\n+
120
\n+\n+
123 template<class ARCHIVE>
\n+
124 void serialize(ARCHIVE & ar, const unsigned int version) {
\n+
125 ar & BOOST_SERIALIZATION_NVP(linearizationMode);
\n+
126 ar & BOOST_SERIALIZATION_NVP(degeneracyMode);
\n+
127 ar & BOOST_SERIALIZATION_NVP(triangulation);
\n+
128 ar & BOOST_SERIALIZATION_NVP(retriangulationThreshold);
\n+
129 ar & BOOST_SERIALIZATION_NVP(throwCheirality);
\n+
130 ar & BOOST_SERIALIZATION_NVP(verboseCheirality);
\n+
131 }
\n+
132};
\n+
\n+
133
\n+
134} // \\ namespace gtsam
\n+
Functions for triangulation.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
Represents an infinite plane in 3D, which is composed of a planar normal and its perpendicular distan...
Definition OrientedPlane3.h:36
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Factor to measure a planar landmark from a given pose.
Definition OrientedPlane3Factor.h:18
\n-
OrientedPlane3Factor(const Vector4 &z, const SharedGaussian &noiseModel, Key poseKey, Key landmarkKey)
Constructor with measured plane (a,b,c,d) coefficients.
Definition OrientedPlane3Factor.h:36
\n-
OrientedPlane3Factor()
Constructor.
Definition OrientedPlane3Factor.h:25
\n-
Definition OrientedPlane3Factor.h:52
\n-
OrientedPlane3DirectionPrior(Key key, const Vector4 &z, const SharedGaussian &noiseModel)
Constructor with measured plane coefficients (a,b,c,d), noise model, landmark symbol.
Definition OrientedPlane3Factor.h:64
\n-
NoiseModelFactorN< OrientedPlane3 > Base
measured plane parameters
Definition OrientedPlane3Factor.h:55
\n-
OrientedPlane3DirectionPrior()
Constructor.
Definition OrientedPlane3Factor.h:60
\n+
DegeneracyMode
How to manage degeneracy.
Definition SmartFactorParams.h:35
\n+
LinearizationMode
SmartFactorParams: parameters and (linearization/degeneracy) modes for SmartProjection and SmartStere...
Definition SmartFactorParams.h:30
\n+
Definition triangulation.h:556
\n+
double dynamicOutlierRejectionThreshold
If this is nonnegative the we will check if the average reprojection error is smaller than this thres...
Definition triangulation.h:573
\n+
double rankTolerance
threshold to decide whether triangulation is result.degenerate
Definition triangulation.h:558
\n+
double landmarkDistanceThreshold
if the landmark is triangulated at distance larger than this, result is flagged as degenerate.
Definition triangulation.h:566
\n+
bool enableEPI
if set to true, will refine triangulation using LM
Definition triangulation.h:560
\n+
Definition SmartFactorParams.h:42
\n+
bool throwCheirality
If true, re-throws Cheirality exceptions (default: false)
Definition SmartFactorParams.h:55
\n+
LinearizationMode linearizationMode
How to linearize the factor.
Definition SmartFactorParams.h:44
\n+
double retriangulationThreshold
threshold to decide whether to re-triangulate
Definition SmartFactorParams.h:50
\n+
DegeneracyMode degeneracyMode
How to linearize the factor.
Definition SmartFactorParams.h:45
\n+
bool verboseCheirality
If true, prints text for Cheirality exceptions (default: false)
Definition SmartFactorParams.h:56
\n+
friend class boost::serialization::access
Serialization function.
Definition SmartFactorParams.h:122
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,139 +1,188 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-OrientedPlane3Factor.h\n-1/*\n-2 * @file OrientedPlane3Factor.cpp\n-3 * @brief OrientedPlane3 Factor class\n-4 * @author Alex Trevor\n-5 * @date December 22, 2013\n-6 */\n+SmartFactorParams.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8#pragma once\n+8 * See LICENSE for the license information\n 9\n-10#include \n-11#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-12\n-13namespace _\bg_\bt_\bs_\ba_\bm {\n-14\n-_\b1_\b8class GTSAM_EXPORT _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-19 protected:\n-20 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3 measured_p_;\n-21 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b,_\b _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b> _\bB_\ba_\bs_\be;\n-22\n-23 public:\n-_\b2_\b5 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bF_\ba_\bc_\bt_\bo_\br() {\n-26 }\n-27 _\b~_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-28\n-_\b3_\b6 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bF_\ba_\bc_\bt_\bo_\br(const Vector4& z, const SharedGaussian& noiseModel,\n-37 _\bK_\be_\by poseKey, _\bK_\be_\by landmarkKey)\n-38 : _\bB_\ba_\bs_\be(noiseModel, poseKey, landmarkKey), measured_p_(z) {}\n-39\n-41 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"OrientedPlane3Factor\",\n-42 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n+10 * -------------------------------------------------------------------------\n+- */\n+11\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+_\b3_\b0enum _\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be {\n+31 HESSIAN, IMPLICIT_SCHUR, JACOBIAN_Q, JACOBIAN_SVD\n+32};\n+33\n+_\b3_\b5enum _\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be {\n+36 IGNORE_DEGENERACY, ZERO_ON_DEGENERACY, HANDLE_INFINITY\n+37};\n+38\n+39/*\n+40 * Parameters for the smart (stereo) projection factors\n+41 */\n+_\b4_\b2struct _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs {\n 43\n-45 Vector evaluateError(\n-46 const _\bP_\bo_\bs_\be_\b3& pose, const _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3& plane,\n-47 boost::optional H1 = boost::none,\n-48 boost::optional H2 = boost::none) const override;\n-49};\n-50\n-51// TODO: Convert this factor to dimension two, three dimensions is redundant\n-for direction prior\n-_\b5_\b2class GTSAM_EXPORT _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br : public\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-53 protected:\n-54 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3 measured_p_;\n-_\b5_\b5 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b> _\bB_\ba_\bs_\be;\n-56\n-57 public:\n-58 typedef _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br _\bT_\bh_\bi_\bs;\n-_\b6_\b0 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br() {\n-61 }\n-62\n-_\b6_\b4 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br(_\bK_\be_\by key, const Vector4& z,\n-65 const SharedGaussian& noiseModel)\n-66 : _\bB_\ba_\bs_\be(noiseModel, key), measured_p_(z) {}\n+_\b4_\b4 _\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be;\n+_\b4_\b5 _\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be _\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be;\n+46\n+49 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs triangulation;\n+_\b5_\b0 double _\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n+52\n+_\b5_\b5 bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by;\n+_\b5_\b6 bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by;\n+58\n+59 // Constructor\n+60 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs(_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be linMode = HESSIAN,\n+61 _\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be degMode = IGNORE_DEGENERACY, bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by = false,\n+62 bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by = false, double retriangulationTh = 1e-5) :\n+63 _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be(linMode), _\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be(degMode),\n+_\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd(\n+64 retriangulationTh), _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by(\n+65 _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by) {\n+66 }\n 67\n-69 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"OrientedPlane3DirectionPrior\",\n-70 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n-71\n-73 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n-override;\n-74\n-75 Vector evaluateError(const _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3& plane,\n-76 boost::optional H = boost::none) const override;\n-77};\n-78\n-79} // gtsam\n-80\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+68 virtual _\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs() {\n+69 }\n+70\n+71 void print(const std::string& str = \"\") const {\n+72 std::cout << \"linearizationMode: \" << _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be << \"\\n\";\n+73 std::cout << \" degeneracyMode: \" << _\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be << \"\\n\";\n+74 std::cout << triangulation << std::endl;\n+75 }\n+76\n+77 // get class variables\n+78 _\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be getLinearizationMode() const {\n+79 return _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be;\n+80 }\n+81 _\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be getDegeneracyMode() const {\n+82 return _\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be;\n+83 }\n+84 TriangulationParameters getTriangulationParameters() const {\n+85 return triangulation;\n+86 }\n+87 bool getVerboseCheirality() const {\n+88 return _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by;\n+89 }\n+90 bool getThrowCheirality() const {\n+91 return _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by;\n+92 }\n+93 double getRetriangulationThreshold() const {\n+94 return _\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n+95 }\n+96 // set class variables\n+97 void setLinearizationMode(_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be linMode) {\n+98 _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be = linMode;\n+99 }\n+100 void setDegeneracyMode(_\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be degMode) {\n+101 _\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be = degMode;\n+102 }\n+103 void setRetriangulationThreshold(double retriangulationTh) {\n+104 _\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd = retriangulationTh;\n+105 }\n+106 void setRankTolerance(double rankTol) {\n+107 triangulation._\br_\ba_\bn_\bk_\bT_\bo_\bl_\be_\br_\ba_\bn_\bc_\be = rankTol;\n+108 }\n+109 void setEnableEPI(bool enableEPI) {\n+110 triangulation._\be_\bn_\ba_\bb_\bl_\be_\bE_\bP_\bI = enableEPI;\n+111 }\n+112 void setLandmarkDistanceThreshold(double landmarkDistanceThreshold) {\n+113 triangulation._\bl_\ba_\bn_\bd_\bm_\ba_\br_\bk_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd = landmarkDistanceThreshold;\n+114 }\n+115 void setDynamicOutlierRejectionThreshold(double dynOutRejectionThreshold) {\n+116 triangulation._\bd_\by_\bn_\ba_\bm_\bi_\bc_\bO_\bu_\bt_\bl_\bi_\be_\br_\bR_\be_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd = dynOutRejectionThreshold;\n+117 }\n+118\n+119private:\n+120\n+_\b1_\b2_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+123 template\n+124 void serialize(ARCHIVE & ar, const unsigned int version) {\n+125 ar & BOOST_SERIALIZATION_NVP(_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be);\n+126 ar & BOOST_SERIALIZATION_NVP(_\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be);\n+127 ar & BOOST_SERIALIZATION_NVP(triangulation);\n+128 ar & BOOST_SERIALIZATION_NVP(_\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd);\n+129 ar & BOOST_SERIALIZATION_NVP(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by);\n+130 ar & BOOST_SERIALIZATION_NVP(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by);\n+131 }\n+132};\n+133\n+134} // \\ namespace gtsam\n+_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+Functions for triangulation.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n-Represents an infinite plane in 3D, which is composed of a planar normal and\n-its perpendicular distan...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bF_\ba_\bc_\bt_\bo_\br\n-Factor to measure a planar landmark from a given pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3Factor.h:18\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bF_\ba_\bc_\bt_\bo_\br\n-OrientedPlane3Factor(const Vector4 &z, const SharedGaussian &noiseModel, Key\n-poseKey, Key landmarkKey)\n-Constructor with measured plane (a,b,c,d) coefficients.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3Factor.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bF_\ba_\bc_\bt_\bo_\br\n-OrientedPlane3Factor()\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3Factor.h:25\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3Factor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-OrientedPlane3DirectionPrior(Key key, const Vector4 &z, const SharedGaussian\n-&noiseModel)\n-Constructor with measured plane coefficients (a,b,c,d), noise model, landmark\n-symbol.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3Factor.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-NoiseModelFactorN< OrientedPlane3 > Base\n-measured plane parameters\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3Factor.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\bD_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n-OrientedPlane3DirectionPrior()\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3Factor.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be\n+DegeneracyMode\n+How to manage degeneracy.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n+LinearizationMode\n+SmartFactorParams: parameters and (linearization/degeneracy) modes for\n+SmartProjection and SmartStere...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:556\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bd_\by_\bn_\ba_\bm_\bi_\bc_\bO_\bu_\bt_\bl_\bi_\be_\br_\bR_\be_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+double dynamicOutlierRejectionThreshold\n+If this is nonnegative the we will check if the average reprojection error is\n+smaller than this thres...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:573\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\br_\ba_\bn_\bk_\bT_\bo_\bl_\be_\br_\ba_\bn_\bc_\be\n+double rankTolerance\n+threshold to decide whether triangulation is result.degenerate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:558\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bl_\ba_\bn_\bd_\bm_\ba_\br_\bk_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+double landmarkDistanceThreshold\n+if the landmark is triangulated at distance larger than this, result is flagged\n+as degenerate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:566\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bE_\bP_\bI\n+bool enableEPI\n+if set to true, will refine triangulation using LM\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:560\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n+bool throwCheirality\n+If true, re-throws Cheirality exceptions (default: false)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n+LinearizationMode linearizationMode\n+How to linearize the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+double retriangulationThreshold\n+threshold to decide whether to re-triangulate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be\n+DegeneracyMode degeneracyMode\n+How to linearize the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n+bool verboseCheirality\n+If true, prints text for Cheirality exceptions (default: false)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:122\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * O\bOr\bri\bie\ben\bnt\bte\bed\bdP\bPl\bla\ban\bne\be3\b3F\bFa\bac\bct\bto\bor\br.\b.h\bh\n+ * _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01298.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01298.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartFactorParams.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/EssentialMatrixConstraint.h File Reference\n \n \n \n \n \n \n \n@@ -95,63 +95,42 @@\n \n \n \n \n
\n \n-
SmartFactorParams.h File Reference
\n+Namespaces
\n+
EssentialMatrixConstraint.h File Reference
\n \n
\n \n-

Collect common parameters for SmartProjection and SmartStereoProjection factors. \n-More...

\n-\n

Go to the source code of this file.

\n \n \n-\n+\n+\n \n

\n Classes

struct  gtsam::SmartProjectionParams
class  gtsam::EssentialMatrixConstraint
 Binary factor between two Pose3 variables induced by an EssentialMatrix measurement. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n

\n-Enumerations

enum  gtsam::LinearizationMode { HESSIAN\n-, IMPLICIT_SCHUR\n-, JACOBIAN_Q\n-, JACOBIAN_SVD\n- }
 SmartFactorParams: parameters and (linearization/degeneracy) modes for SmartProjection and SmartStereoProjection factors. More...
 
enum  gtsam::DegeneracyMode { IGNORE_DEGENERACY\n-, ZERO_ON_DEGENERACY\n-, HANDLE_INFINITY\n- }
 How to manage degeneracy.
 
\n

Detailed Description

\n-

Collect common parameters for SmartProjection and SmartStereoProjection factors.

\n-
Author
Luca Carlone
\n-
\n-Zsolt Kira
\n+
Author
Frank Dellaert
\n
\n-Frank Dellaert
\n+Pablo Alcantarilla
\n+
Date
Jan 5, 2014
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,38 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bE_\bn_\bu_\bm_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n-SmartFactorParams.h File Reference\n-Collect common parameters for SmartProjection and SmartStereoProjection\n-factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+EssentialMatrixConstraint.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n+\u00a0 Binary factor between two _\bP_\bo_\bs_\be_\b3 variables induced by an _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n+ measurement. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-E\bEn\bnu\bum\bme\ber\bra\bat\bti\bio\bon\bns\bs\n-enum \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be { H\bHE\bES\bSS\bSI\bIA\bAN\bN , I\bIM\bMP\bPL\bLI\bIC\bCI\bIT\bT_\b_S\bSC\bCH\bHU\bUR\bR , J\bJA\bAC\bCO\bOB\bBI\bIA\bAN\bN_\b_Q\bQ ,\n- J\bJA\bAC\bCO\bOB\bBI\bIA\bAN\bN_\b_S\bSV\bVD\bD }\n-\u00a0 SmartFactorParams: parameters and (linearization/degeneracy) modes for\n- SmartProjection and SmartStereoProjection factors. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-enum \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be { I\bIG\bGN\bNO\bOR\bRE\bE_\b_D\bDE\bEG\bGE\bEN\bNE\bER\bRA\bAC\bCY\bY , Z\bZE\bER\bRO\bO_\b_O\bON\bN_\b_D\bDE\bEG\bGE\bEN\bNE\bER\bRA\bAC\bCY\bY ,\n- H\bHA\bAN\bND\bDL\bLE\bE_\b_I\bIN\bNF\bFI\bIN\bNI\bIT\bTY\bY }\n-\u00a0 How to manage degeneracy.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Collect common parameters for SmartProjection and SmartStereoProjection\n-factors.\n Author\n- Luca Carlone\n- Zsolt Kira\n Frank Dellaert\n+ Pablo Alcantarilla\n+ Date\n+ Jan 5, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01298_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01298_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartFactorParams.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/EssentialMatrixConstraint.h Source File\n \n \n \n \n \n \n \n@@ -98,157 +98,127 @@\n
No Matches
\n \n \n \n \n \n
\n-
SmartFactorParams.h
\n+
EssentialMatrixConstraint.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010-2014, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n+
19#pragma once
\n+
20
\n+\n+
22#include <gtsam/geometry/EssentialMatrix.h>
\n
23
\n
24namespace gtsam {
\n
25
\n
\n-\n-
31 HESSIAN, IMPLICIT_SCHUR, JACOBIAN_Q, JACOBIAN_SVD
\n-
32};
\n-
\n+
30class GTSAM_EXPORT EssentialMatrixConstraint: public NoiseModelFactorN<Pose3, Pose3> {
\n+
31
\n+
32private:
\n
33
\n-
\n-\n-
36 IGNORE_DEGENERACY, ZERO_ON_DEGENERACY, HANDLE_INFINITY
\n-
37};
\n-
\n-
38
\n-
39/*
\n-
40 * Parameters for the smart (stereo) projection factors
\n-
41 */
\n-
\n-\n+\n+\n+
36
\n+
37 EssentialMatrix measuredE_;
\n+
39public:
\n+
40
\n+
41 // shorthand for a smart pointer to a factor
\n+
42 typedef boost::shared_ptr<EssentialMatrixConstraint> shared_ptr;
\n
43
\n-\n-\n-
46
\n-
49 TriangulationParameters triangulation;
\n-\n-
52
\n-\n-\n-
58
\n-
59 // Constructor
\n-\n-
61 DegeneracyMode degMode = IGNORE_DEGENERACY, bool throwCheirality = false,
\n-
62 bool verboseCheirality = false, double retriangulationTh = 1e-5) :
\n-\n-\n-\n-
66 }
\n-
67
\n-
68 virtual ~SmartProjectionParams() {
\n-
69 }
\n-
70
\n-
71 void print(const std::string& str = "") const {
\n-
72 std::cout << "linearizationMode: " << linearizationMode << "\\n";
\n-
73 std::cout << " degeneracyMode: " << degeneracyMode << "\\n";
\n-
74 std::cout << triangulation << std::endl;
\n-
75 }
\n-
76
\n-
77 // get class variables
\n-
78 LinearizationMode getLinearizationMode() const {
\n-
79 return linearizationMode;
\n-
80 }
\n-
81 DegeneracyMode getDegeneracyMode() const {
\n-
82 return degeneracyMode;
\n-
83 }
\n-
84 TriangulationParameters getTriangulationParameters() const {
\n-
85 return triangulation;
\n-
86 }
\n-
87 bool getVerboseCheirality() const {
\n-
88 return verboseCheirality;
\n-
89 }
\n-
90 bool getThrowCheirality() const {
\n-
91 return throwCheirality;
\n-
92 }
\n-
93 double getRetriangulationThreshold() const {
\n-\n-
95 }
\n-
96 // set class variables
\n-
97 void setLinearizationMode(LinearizationMode linMode) {
\n-
98 linearizationMode = linMode;
\n-
99 }
\n-
100 void setDegeneracyMode(DegeneracyMode degMode) {
\n-
101 degeneracyMode = degMode;
\n-
102 }
\n-
103 void setRetriangulationThreshold(double retriangulationTh) {
\n-
104 retriangulationThreshold = retriangulationTh;
\n-
105 }
\n-
106 void setRankTolerance(double rankTol) {
\n-
107 triangulation.rankTolerance = rankTol;
\n-
108 }
\n-
109 void setEnableEPI(bool enableEPI) {
\n-
110 triangulation.enableEPI = enableEPI;
\n-
111 }
\n-
112 void setLandmarkDistanceThreshold(double landmarkDistanceThreshold) {
\n-
113 triangulation.landmarkDistanceThreshold = landmarkDistanceThreshold;
\n-
114 }
\n-
115 void setDynamicOutlierRejectionThreshold(double dynOutRejectionThreshold) {
\n-
116 triangulation.dynamicOutlierRejectionThreshold = dynOutRejectionThreshold;
\n-
117 }
\n-
118
\n-
119private:
\n-
120
\n-\n-
123 template<class ARCHIVE>
\n-
124 void serialize(ARCHIVE & ar, const unsigned int version) {
\n-
125 ar & BOOST_SERIALIZATION_NVP(linearizationMode);
\n-
126 ar & BOOST_SERIALIZATION_NVP(degeneracyMode);
\n-
127 ar & BOOST_SERIALIZATION_NVP(triangulation);
\n-
128 ar & BOOST_SERIALIZATION_NVP(retriangulationThreshold);
\n-
129 ar & BOOST_SERIALIZATION_NVP(throwCheirality);
\n-
130 ar & BOOST_SERIALIZATION_NVP(verboseCheirality);
\n-
131 }
\n-
132};
\n-
\n-
133
\n-
134} // \\ namespace gtsam
\n-
Functions for triangulation.
\n+
\n+\n+
46 }
\n+
\n+
47
\n+
\n+\n+
56 const EssentialMatrix& measuredE, const SharedNoiseModel& model) :
\n+
57 Base(model, key1, key2), measuredE_(measuredE) {
\n+
58 }
\n+
\n+
59
\n+\n+
61 }
\n+
62
\n+
\n+
64 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
65 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
66 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
67 }
\n+
\n+
68
\n+
72 void print(const std::string& s = "",
\n+
73 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n+
74
\n+
76 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n+
77
\n+
81 Vector evaluateError(const Pose3& p1, const Pose3& p2,
\n+
82 boost::optional<Matrix&> Hp1 = boost::none, //
\n+
83 boost::optional<Matrix&> Hp2 = boost::none) const override;
\n+
84
\n+
\n+
86 const EssentialMatrix& measured() const {
\n+
87 return measuredE_;
\n+
88 }
\n+
\n+
89
\n+
90private:
\n+
91
\n+
93 friend class boost::serialization::access;
\n+
94 template<class ARCHIVE>
\n+
95 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
96 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n+
97 ar
\n+
98 & boost::serialization::make_nvp("NoiseModelFactor2",
\n+
99 boost::serialization::base_object<Base>(*this));
\n+
100 ar & BOOST_SERIALIZATION_NVP(measuredE_);
\n+
101 }
\n+
102
\n+
103public:
\n+\n+
105};
\n+
\n+
106// \\class EssentialMatrixConstraint
\n+
107
\n+
108}
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
DegeneracyMode
How to manage degeneracy.
Definition SmartFactorParams.h:35
\n-
LinearizationMode
SmartFactorParams: parameters and (linearization/degeneracy) modes for SmartProjection and SmartStere...
Definition SmartFactorParams.h:30
\n-
Definition triangulation.h:556
\n-
double dynamicOutlierRejectionThreshold
If this is nonnegative the we will check if the average reprojection error is smaller than this thres...
Definition triangulation.h:573
\n-
double rankTolerance
threshold to decide whether triangulation is result.degenerate
Definition triangulation.h:558
\n-
double landmarkDistanceThreshold
if the landmark is triangulated at distance larger than this, result is flagged as degenerate.
Definition triangulation.h:566
\n-
bool enableEPI
if set to true, will refine triangulation using LM
Definition triangulation.h:560
\n-
Definition SmartFactorParams.h:42
\n-
bool throwCheirality
If true, re-throws Cheirality exceptions (default: false)
Definition SmartFactorParams.h:55
\n-
LinearizationMode linearizationMode
How to linearize the factor.
Definition SmartFactorParams.h:44
\n-
double retriangulationThreshold
threshold to decide whether to re-triangulate
Definition SmartFactorParams.h:50
\n-
DegeneracyMode degeneracyMode
How to linearize the factor.
Definition SmartFactorParams.h:45
\n-
bool verboseCheirality
If true, prints text for Cheirality exceptions (default: false)
Definition SmartFactorParams.h:56
\n-
friend class boost::serialization::access
Serialization function.
Definition SmartFactorParams.h:122
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
An essential matrix is like a Pose3, except with translation up to scale It is named after the 3*3 ma...
Definition EssentialMatrix.h:26
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Binary factor between two Pose3 variables induced by an EssentialMatrix measurement.
Definition EssentialMatrixConstraint.h:30
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition EssentialMatrixConstraint.h:64
\n+
const EssentialMatrix & measured() const
return the measured
Definition EssentialMatrixConstraint.h:86
\n+
boost::shared_ptr< EssentialMatrixConstraint > shared_ptr
The measurement is an essential matrix.
Definition EssentialMatrixConstraint.h:42
\n+
EssentialMatrixConstraint()
default constructor - only use for serialization
Definition EssentialMatrixConstraint.h:45
\n+
EssentialMatrixConstraint(Key key1, Key key2, const EssentialMatrix &measuredE, const SharedNoiseModel &model)
Constructor.
Definition EssentialMatrixConstraint.h:55
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,188 +1,159 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SmartFactorParams.h\n+EssentialMatrixConstraint.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010-2014, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22#include \n 23\n 24namespace _\bg_\bt_\bs_\ba_\bm {\n 25\n-_\b3_\b0enum _\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be {\n-31 HESSIAN, IMPLICIT_SCHUR, JACOBIAN_Q, JACOBIAN_SVD\n-32};\n+_\b3_\b0class GTSAM_EXPORT _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+31\n+32private:\n 33\n-_\b3_\b5enum _\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be {\n-36 IGNORE_DEGENERACY, ZERO_ON_DEGENERACY, HANDLE_INFINITY\n-37};\n-38\n-39/*\n-40 * Parameters for the smart (stereo) projection factors\n-41 */\n-_\b4_\b2struct _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs {\n+34 typedef _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt _\bT_\bh_\bi_\bs;\n+35 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b,_\b _\bP_\bo_\bs_\be_\b3_\b> _\bB_\ba_\bs_\be;\n+36\n+37 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx measuredE_;\n+39public:\n+40\n+41 // shorthand for a smart pointer to a factor\n+_\b4_\b2 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n 43\n-_\b4_\b4 _\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be;\n-_\b4_\b5 _\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be _\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be;\n-46\n-49 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs triangulation;\n-_\b5_\b0 double _\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n-52\n-_\b5_\b5 bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by;\n-_\b5_\b6 bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by;\n-58\n-59 // Constructor\n-60 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs(_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be linMode = HESSIAN,\n-61 _\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be degMode = IGNORE_DEGENERACY, bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by = false,\n-62 bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by = false, double retriangulationTh = 1e-5) :\n-63 _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be(linMode), _\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be(degMode),\n-_\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd(\n-64 retriangulationTh), _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by(\n-65 _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by) {\n-66 }\n-67\n-68 virtual _\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs() {\n-69 }\n-70\n-71 void print(const std::string& str = \"\") const {\n-72 std::cout << \"linearizationMode: \" << _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be << \"\\n\";\n-73 std::cout << \" degeneracyMode: \" << _\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be << \"\\n\";\n-74 std::cout << triangulation << std::endl;\n-75 }\n-76\n-77 // get class variables\n-78 _\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be getLinearizationMode() const {\n-79 return _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be;\n-80 }\n-81 _\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be getDegeneracyMode() const {\n-82 return _\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be;\n-83 }\n-84 TriangulationParameters getTriangulationParameters() const {\n-85 return triangulation;\n-86 }\n-87 bool getVerboseCheirality() const {\n-88 return _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by;\n-89 }\n-90 bool getThrowCheirality() const {\n-91 return _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by;\n-92 }\n-93 double getRetriangulationThreshold() const {\n-94 return _\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n-95 }\n-96 // set class variables\n-97 void setLinearizationMode(_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be linMode) {\n-98 _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be = linMode;\n-99 }\n-100 void setDegeneracyMode(_\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be degMode) {\n-101 _\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be = degMode;\n-102 }\n-103 void setRetriangulationThreshold(double retriangulationTh) {\n-104 _\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd = retriangulationTh;\n-105 }\n-106 void setRankTolerance(double rankTol) {\n-107 triangulation._\br_\ba_\bn_\bk_\bT_\bo_\bl_\be_\br_\ba_\bn_\bc_\be = rankTol;\n-108 }\n-109 void setEnableEPI(bool enableEPI) {\n-110 triangulation._\be_\bn_\ba_\bb_\bl_\be_\bE_\bP_\bI = enableEPI;\n-111 }\n-112 void setLandmarkDistanceThreshold(double landmarkDistanceThreshold) {\n-113 triangulation._\bl_\ba_\bn_\bd_\bm_\ba_\br_\bk_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd = landmarkDistanceThreshold;\n-114 }\n-115 void setDynamicOutlierRejectionThreshold(double dynOutRejectionThreshold) {\n-116 triangulation._\bd_\by_\bn_\ba_\bm_\bi_\bc_\bO_\bu_\bt_\bl_\bi_\be_\br_\bR_\be_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd = dynOutRejectionThreshold;\n-117 }\n-118\n-119private:\n-120\n-_\b1_\b2_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-123 template\n-124 void serialize(ARCHIVE & ar, const unsigned int version) {\n-125 ar & BOOST_SERIALIZATION_NVP(_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be);\n-126 ar & BOOST_SERIALIZATION_NVP(_\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be);\n-127 ar & BOOST_SERIALIZATION_NVP(triangulation);\n-128 ar & BOOST_SERIALIZATION_NVP(_\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd);\n-129 ar & BOOST_SERIALIZATION_NVP(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by);\n-130 ar & BOOST_SERIALIZATION_NVP(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by);\n-131 }\n-132};\n-133\n-134} // \\ namespace gtsam\n-_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-Functions for triangulation.\n+_\b4_\b5 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt() {\n+46 }\n+47\n+_\b5_\b5 _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt(_\bK_\be_\by key1, _\bK_\be_\by key2,\n+56 const _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& measuredE, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model) :\n+57 _\bB_\ba_\bs_\be(model, key1, key2), measuredE_(measuredE) {\n+58 }\n+59\n+60 _\b~_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt() override {\n+61 }\n+62\n+_\b6_\b4 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+65 return boost::static_pointer_cast(\n+66 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+67 }\n+68\n+72 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+73 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n+74\n+76 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n+override;\n+77\n+81 Vector evaluateError(const _\bP_\bo_\bs_\be_\b3& p1, const _\bP_\bo_\bs_\be_\b3& p2,\n+82 boost::optional Hp1 = boost::none, //\n+83 boost::optional Hp2 = boost::none) const override;\n+84\n+_\b8_\b6 const _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n+87 return measuredE_;\n+88 }\n+89\n+90private:\n+91\n+_\b9_\b3 friend class boost::serialization::access;\n+94 template\n+95 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+96 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility\n+97 ar\n+98 & boost::serialization::make_nvp(\"NoiseModelFactor2\",\n+99 boost::serialization::base_object(*this));\n+100 ar & BOOST_SERIALIZATION_NVP(measuredE_);\n+101 }\n+102\n+103public:\n+104 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+105};\n+106// \\class EssentialMatrixConstraint\n+107\n+108}\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be\n-DegeneracyMode\n-How to manage degeneracy.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n-LinearizationMode\n-SmartFactorParams: parameters and (linearization/degeneracy) modes for\n-SmartProjection and SmartStere...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:556\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bd_\by_\bn_\ba_\bm_\bi_\bc_\bO_\bu_\bt_\bl_\bi_\be_\br_\bR_\be_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-double dynamicOutlierRejectionThreshold\n-If this is nonnegative the we will check if the average reprojection error is\n-smaller than this thres...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:573\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\br_\ba_\bn_\bk_\bT_\bo_\bl_\be_\br_\ba_\bn_\bc_\be\n-double rankTolerance\n-threshold to decide whether triangulation is result.degenerate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:558\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bl_\ba_\bn_\bd_\bm_\ba_\br_\bk_\bD_\bi_\bs_\bt_\ba_\bn_\bc_\be_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-double landmarkDistanceThreshold\n-if the landmark is triangulated at distance larger than this, result is flagged\n-as degenerate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:566\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\be_\bn_\ba_\bb_\bl_\be_\bE_\bP_\bI\n-bool enableEPI\n-if set to true, will refine triangulation using LM\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:560\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n-bool throwCheirality\n-If true, re-throws Cheirality exceptions (default: false)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n-LinearizationMode linearizationMode\n-How to linearize the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-double retriangulationThreshold\n-threshold to decide whether to re-triangulate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be\n-DegeneracyMode degeneracyMode\n-How to linearize the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n-bool verboseCheirality\n-If true, prints text for Cheirality exceptions (default: false)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:122\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n+An essential matrix is like a Pose3, except with translation up to scale It is\n+named after the 3*3 ma...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrix.h:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n+Binary factor between two Pose3 variables induced by an EssentialMatrix\n+measurement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const EssentialMatrix & measured() const\n+return the measured\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< EssentialMatrixConstraint > shared_ptr\n+The measurement is an essential matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n+EssentialMatrixConstraint()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n+EssentialMatrixConstraint(Key key1, Key key2, const EssentialMatrix &measuredE,\n+const SharedNoiseModel &model)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EssentialMatrixConstraint.h:55\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01301.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01301.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/InitializePose.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/PoseTranslationPrior.h File Reference\n \n \n \n \n \n \n \n@@ -94,38 +94,45 @@\n \n \n \n \n \n
\n \n-
InitializePose.h File Reference
\n+
PoseTranslationPrior.h File Reference
\n
\n
\n \n-

common code between lago.* (2D) and InitializePose3.* (3D) \n+

Implements a prior on the translation component of a pose. \n More...

\n \n

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::PoseTranslationPrior< POSE >
 A prior on the translation part of a pose. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

common code between lago.* (2D) and InitializePose3.* (3D)

\n-
Author
Frank Dellaert
\n-
Date
August, 2020
\n+

Implements a prior on the translation component of a pose.

\n+
Date
Jun 14, 2012
\n+
Author
Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-InitializePose.h File Reference\n-common code between lago.* (2D) and InitializePose3.* (3D) _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+PoseTranslationPrior.h File Reference\n+Implements a prior on the translation component of a pose. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b<_\b _\bP_\bO_\bS_\bE_\b _\b>\n+\u00a0 A prior on the translation part of a pose. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-common code between lago.* (2D) and InitializePose3.* (3D)\n- Author\n- Frank Dellaert\n+Implements a prior on the translation component of a pose.\n Date\n- August, 2020\n+ Jun 14, 2012\n+ Author\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b._\bh\n+ * _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01301_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01301_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/InitializePose.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/PoseTranslationPrior.h Source File\n \n \n \n \n \n \n \n@@ -98,116 +98,142 @@\n
No Matches
\n \n \n \n \n \n
\n-
InitializePose.h
\n+
PoseTranslationPrior.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
7
\n-
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n+Go to the documentation of this file.
1
\n+
10#pragma once
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-\n-\n-
26
\n-
27namespace gtsam {
\n-
28namespace initialize {
\n-
29
\n-
30static constexpr Key kAnchorKey = 99999999;
\n-
31
\n-
36template <class Pose>
\n-
37static NonlinearFactorGraph buildPoseGraph(const NonlinearFactorGraph& graph) {
\n-
38 NonlinearFactorGraph poseGraph;
\n-
39
\n-
40 for (const auto& factor : graph) {
\n-
41 // recast to a between on Pose
\n-
42 if (auto between =
\n-
43 boost::dynamic_pointer_cast<BetweenFactor<Pose> >(factor))
\n-
44 poseGraph.add(between);
\n-
45
\n-
46 // recast PriorFactor<Pose> to BetweenFactor<Pose>
\n-
47 if (auto prior = boost::dynamic_pointer_cast<PriorFactor<Pose> >(factor))
\n-
48 poseGraph.emplace_shared<BetweenFactor<Pose> >(
\n-
49 kAnchorKey, prior->keys()[0], prior->prior(), prior->noiseModel());
\n+\n+\n+
14
\n+
15namespace gtsam {
\n+
16
\n+
20template<class POSE>
\n+
\n+\n+
22public:
\n+
23 typedef PoseTranslationPrior<POSE> This;
\n+\n+
25 typedef POSE Pose;
\n+
26 typedef typename POSE::Translation Translation;
\n+
27 typedef typename POSE::Rotation Rotation;
\n+
28
\n+
29 GTSAM_CONCEPT_POSE_TYPE(Pose)
\n+
30 GTSAM_CONCEPT_GROUP_TYPE(Pose)
\n+
31 GTSAM_CONCEPT_LIE_TYPE(Translation)
\n+
32
\n+
33protected:
\n+
34
\n+
35 Translation measured_;
\n+
36
\n+
37public:
\n+
38
\n+\n+
41
\n+
\n+
43 PoseTranslationPrior(Key key, const Translation& measured, const noiseModel::Base::shared_ptr& model)
\n+
44 : Base(model, key), measured_(measured) {
\n+
45 }
\n+
\n+
46
\n+
\n+
48 PoseTranslationPrior(Key key, const POSE& pose_z, const noiseModel::Base::shared_ptr& model)
\n+
49 : Base(model, key), measured_(pose_z.translation()) {
\n
50 }
\n-
51 return poseGraph;
\n-
52}
\n+
\n+
51
\n+
52 ~PoseTranslationPrior() override {}
\n
53
\n-
57template <class Pose>
\n-
58static Values computePoses(const Values& initialRot,
\n-
59 NonlinearFactorGraph* posegraph,
\n-
60 bool singleIter = true) {
\n-
61 const auto origin = Pose().translation();
\n-
62
\n-
63 // Upgrade rotations to full poses
\n-
64 Values initialPose;
\n-
65 for (const auto& key_rot : initialRot.extract<typename Pose::Rotation>()) {
\n-
66 const Key& key = key_rot.first;
\n-
67 const auto& rot = key_rot.second;
\n-
68 const Pose initializedPose(rot, origin);
\n-
69 initialPose.insert(key, initializedPose);
\n-
70 }
\n-
71
\n-
72 // add prior on dummy node
\n-
73 auto priorModel = noiseModel::Unit::Create(Pose::dimension);
\n-
74 initialPose.insert(kAnchorKey, Pose());
\n-
75 posegraph->emplace_shared<PriorFactor<Pose> >(kAnchorKey, Pose(), priorModel);
\n-
76
\n-
77 // Create optimizer
\n-
78 GaussNewtonParams params;
\n-
79 if (singleIter) {
\n-
80 params.maxIterations = 1;
\n-
81 } else {
\n-
82 params.setVerbosity("TERMINATION");
\n-
83 }
\n-
84 GaussNewtonOptimizer optimizer(*posegraph, initialPose, params);
\n-
85 const Values GNresult = optimizer.optimize();
\n-
86
\n-
87 // put into Values structure
\n-
88 Values estimate;
\n-
89 for (const auto& key_pose : GNresult.extract<Pose>()) {
\n-
90 const Key& key = key_pose.first;
\n-
91 if (key != kAnchorKey) {
\n-
92 const Pose& pose = key_pose.second;
\n-
93 estimate.insert(key, pose);
\n-
94 }
\n-
95 }
\n-
96 return estimate;
\n-
97}
\n-
98} // namespace initialize
\n-
99} // namespace gtsam
\n-\n-
Factor Graph consisting of non-linear factors.
\n-\n+
54 const Translation& measured() const { return measured_; }
\n+
55
\n+
\n+
57 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
58 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
59 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n+
\n+
60
\n+
\n+
62 Vector evaluateError(const Pose& pose, boost::optional<Matrix&> H = boost::none) const override {
\n+
63 const Translation& newTrans = pose.translation();
\n+
64 const Rotation& R = pose.rotation();
\n+
65 const int tDim = traits<Translation>::GetDimension(newTrans);
\n+
66 const int xDim = traits<Pose>::GetDimension(pose);
\n+
67 if (H) {
\n+
68 *H = Matrix::Zero(tDim, xDim);
\n+
69 std::pair<size_t, size_t> transInterval = POSE::translationInterval();
\n+
70 (*H).middleCols(transInterval.first, tDim) = R.matrix();
\n+
71 }
\n+
72
\n+
73 return traits<Translation>::Local(measured_, newTrans);
\n+
74 }
\n+
\n+
75
\n+
\n+
77 bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
\n+
78 const This *e = dynamic_cast<const This*> (&expected);
\n+
79 return e != nullptr && Base::equals(*e, tol) && traits<Translation>::Equals(measured_, e->measured_, tol);
\n+
80 }
\n+
\n+
81
\n+
\n+
83 void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
84 Base::print(s + "PoseTranslationPrior", keyFormatter);
\n+
85 traits<Translation>::Print(measured_, "Measured Translation");
\n+
86 }
\n+
\n+
87
\n+
88private:
\n+
89
\n+\n+
92 template<class ARCHIVE>
\n+
93 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
94 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
95 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n+
96 boost::serialization::base_object<Base>(*this));
\n+
97 ar & BOOST_SERIALIZATION_NVP(measured_);
\n+
98 }
\n+
99
\n+
100};
\n+
\n+
101
\n+
102} // \\namespace gtsam
\n+
103
\n+
104
\n+
105
\n+
106
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
IsDerived< DERIVEDFACTOR > add(boost::shared_ptr< DERIVEDFACTOR > factor)
add is a synonym for push_back.
Definition FactorGraph.h:210
\n-
static shared_ptr Create(size_t dim)
Create a unit covariance noise model.
Definition NoiseModel.h:597
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n-\n-\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
A prior on the translation part of a pose.
Definition PoseTranslationPrior.h:21
\n+
PoseTranslationPrior(Key key, const Translation &measured, const noiseModel::Base::shared_ptr &model)
standard constructor
Definition PoseTranslationPrior.h:43
\n+
PoseTranslationPrior(Key key, const POSE &pose_z, const noiseModel::Base::shared_ptr &model)
Constructor that pulls the translation from an incoming POSE.
Definition PoseTranslationPrior.h:48
\n+
Vector evaluateError(const Pose &pose, boost::optional< Matrix & > H=boost::none) const override
h(x)-z
Definition PoseTranslationPrior.h:62
\n+
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
equals specialized to this factor
Definition PoseTranslationPrior.h:77
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition PoseTranslationPrior.h:57
\n+
friend class boost::serialization::access
Serialization function.
Definition PoseTranslationPrior.h:91
\n+
PoseTranslationPrior()
default constructor - only use for serialization
Definition PoseTranslationPrior.h:40
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print contents
Definition PoseTranslationPrior.h:83
\n+
Concept-checking macros for geometric objects Each macro instantiates a concept check structure,...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,124 +1,182 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-InitializePose.h\n+PoseTranslationPrior.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1/* ---------------------------------------------------------------------------\n--\n-2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n-7\n-8 * See LICENSE for the license information\n-9\n-10 * -------------------------------------------------------------------------\n-- */\n+1\n+10#pragma once\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bP_\br_\bi_\bo_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n-28namespace initialize {\n-29\n-30static constexpr _\bK_\be_\by kAnchorKey = 99999999;\n-31\n-36template \n-37static NonlinearFactorGraph buildPoseGraph(const NonlinearFactorGraph& graph)\n-{\n-38 NonlinearFactorGraph poseGraph;\n-39\n-40 for (const auto& factor : graph) {\n-41 // recast to a between on Pose\n-42 if (auto between =\n-43 boost::dynamic_pointer_cast >(factor))\n-44 poseGraph._\ba_\bd_\bd(between);\n-45\n-46 // recast PriorFactor to BetweenFactor\n-47 if (auto prior = boost::dynamic_pointer_cast >(factor))\n-48 poseGraph.emplace_shared >(\n-49 kAnchorKey, prior->keys()[0], prior->prior(), prior->noiseModel());\n+12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh>\n+13#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+14\n+15namespace _\bg_\bt_\bs_\ba_\bm {\n+16\n+20template\n+_\b2_\b1class _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+22public:\n+23 typedef _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b<_\bP_\bO_\bS_\bE_\b> This;\n+24 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bS_\bE_\b> _\bB_\ba_\bs_\be;\n+25 typedef POSE Pose;\n+26 typedef typename POSE::Translation Translation;\n+27 typedef typename POSE::Rotation Rotation;\n+28\n+29 GTSAM_CONCEPT_POSE_TYPE(Pose)\n+30 GTSAM_CONCEPT_GROUP_TYPE(Pose)\n+31 GTSAM_CONCEPT_LIE_TYPE(Translation)\n+32\n+33protected:\n+34\n+35 Translation measured_;\n+36\n+37public:\n+38\n+_\b4_\b0 _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br() {}\n+41\n+_\b4_\b3 _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Translation& measured, const\n+noiseModel::Base::shared_ptr& model)\n+44 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by), measured_(measured) {\n+45 }\n+46\n+_\b4_\b8 _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const POSE& pose_z, const noiseModel::Base::\n+shared_ptr& model)\n+49 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by), measured_(pose_z.translation()) {\n 50 }\n-51 return poseGraph;\n-52}\n+51\n+52 _\b~_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br() override {}\n 53\n-57template \n-58static _\bV_\ba_\bl_\bu_\be_\bs computePoses(const _\bV_\ba_\bl_\bu_\be_\bs& initialRot,\n-59 NonlinearFactorGraph* posegraph,\n-60 bool singleIter = true) {\n-61 const auto origin = Pose().translation();\n-62\n-63 // Upgrade rotations to full poses\n-64 _\bV_\ba_\bl_\bu_\be_\bs initialPose;\n-65 for (const auto& key_rot : initialRot.extract()) {\n-66 const _\bK_\be_\by& key = key_rot.first;\n-67 const auto& rot = key_rot.second;\n-68 const Pose initializedPose(rot, origin);\n-69 initialPose.insert(key, initializedPose);\n-70 }\n-71\n-72 // add prior on dummy node\n-73 auto priorModel = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(Pose::dimension);\n-74 initialPose.insert(kAnchorKey, Pose());\n-75 posegraph->emplace_shared >(kAnchorKey, Pose(),\n-priorModel);\n-76\n-77 // Create optimizer\n-78 GaussNewtonParams params;\n-79 if (singleIter) {\n-80 params.maxIterations = 1;\n-81 } else {\n-82 params.setVerbosity(\"TERMINATION\");\n-83 }\n-84 GaussNewtonOptimizer optimizer(*posegraph, initialPose, params);\n-85 const _\bV_\ba_\bl_\bu_\be_\bs GNresult = optimizer.optimize();\n-86\n-87 // put into Values structure\n-88 _\bV_\ba_\bl_\bu_\be_\bs estimate;\n-89 for (const auto& key_pose : GNresult.extract()) {\n-90 const _\bK_\be_\by& key = key_pose.first;\n-91 if (key != kAnchorKey) {\n-92 const Pose& pose = key_pose.second;\n-93 estimate.insert(key, pose);\n-94 }\n-95 }\n-96 return estimate;\n-97}\n-98} // namespace initialize\n-99} // namespace gtsam\n-_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n-_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+54 const Translation& measured() const { return measured_; }\n+55\n+_\b5_\b7 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+58 return boost::static_pointer_cast(\n+59 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }\n+60\n+_\b6_\b2 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Pose& pose, boost::optional H = boost::\n+none) const override {\n+63 const Translation& newTrans = pose.translation();\n+64 const Rotation& R = pose.rotation();\n+65 const int tDim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(newTrans);\n+66 const int xDim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bs_\be_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(pose);\n+67 if (H) {\n+68 *H = Matrix::Zero(tDim, xDim);\n+69 std::pair transInterval = POSE::translationInterval();\n+70 (*H).middleCols(transInterval.first, tDim) = R.matrix();\n+71 }\n+72\n+73 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured_, newTrans);\n+74 }\n+75\n+_\b7_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol=1e-9) const override\n+{\n+78 const This *e = dynamic_cast (&expected);\n+79 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs\n+(measured_, e->measured_, tol);\n+80 }\n+81\n+_\b8_\b3 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter) const override {\n+84 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s + \"PoseTranslationPrior\", keyFormatter);\n+85 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(measured_, \"Measured Translation\");\n+86 }\n+87\n+88private:\n+89\n+_\b9_\b1 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+92 template\n+93 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+94 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility\n+95 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n+96 boost::serialization::base_object(*this));\n+97 ar & BOOST_SERIALIZATION_NVP(measured_);\n+98 }\n+99\n+100};\n+101\n+102} // \\namespace gtsam\n+103\n+104\n+105\n+106\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-IsDerived< DERIVEDFACTOR > add(boost::shared_ptr< DERIVEDFACTOR > factor)\n-add is a synonym for push_back.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:210\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n-static shared_ptr Create(size_t dim)\n-Create a unit covariance noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:597\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n-_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n-_\bP_\br_\bi_\bo_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bP_\bO_\bS_\bE_\b _\b>_\b:_\b:_\bk_\be_\by\n+Key key() const\n+Returns a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n+A prior on the translation part of a pose.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:21\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n+PoseTranslationPrior(Key key, const Translation &measured, const noiseModel::\n+Base::shared_ptr &model)\n+standard constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n+PoseTranslationPrior(Key key, const POSE &pose_z, const noiseModel::Base::\n+shared_ptr &model)\n+Constructor that pulls the translation from an incoming POSE.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Pose &pose, boost::optional< Matrix & > H=boost::\n+none) const override\n+h(x)-z\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n+equals specialized to this factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n+PoseTranslationPrior()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print contents\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseTranslationPrior.h:83\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh\n+Concept-checking macros for geometric objects Each macro instantiates a concept\n+check structure,...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b._\bh\n+ * _\bP_\bo_\bs_\be_\bT_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01304.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01304.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/InitializePose3.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/InitializePose3.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,56 +94,34 @@\n \n \n \n \n \n
\n \n-
InitializePose3.h File Reference
\n+Namespaces
\n+
InitializePose3.cpp File Reference
\n \n
\n-\n-

Initialize Pose3 in a factor graph. \n-More...

\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-

\n-Classes

struct  gtsam::InitializePose3
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n

\n-Typedefs

\n-typedef std::map< Key, std::vector< size_t > > gtsam::KeyVectorMap
 
\n-typedef std::map< Key, Rot3gtsam::KeyRotMap
 
\n

Detailed Description

\n-

Initialize Pose3 in a factor graph.

\n-
Author
Luca Carlone
\n+
Author
Luca Carlone
\n
\n Frank Dellaert
\n
Date
August, 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-InitializePose3.h File Reference\n-Initialize Pose3 in a factor graph. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+InitializePose3.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef std::map< _\bK_\be_\by, std::vector< size_t > >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byV\bVe\bec\bct\bto\bor\brM\bMa\bap\bp\n-\u00a0\n- typedef std::map< _\bK_\be_\by, _\bR_\bo_\bt_\b3 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byR\bRo\bot\btM\bMa\bap\bp\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Initialize Pose3 in a factor graph.\n Author\n Luca Carlone\n Frank Dellaert\n Date\n August, 2014\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3_\b._\bh\n+ * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01307.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01307.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionRigFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/PoseRotationPrior.h File Reference\n \n \n \n \n \n \n \n@@ -96,52 +96,42 @@\n \n \n \n
\n \n-
SmartProjectionRigFactor.h File Reference
\n+
PoseRotationPrior.h File Reference
\n
\n
\n \n-

Smart factor on poses, assuming camera calibration is fixed. \n+

Implements a prior on the rotation component of a pose. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n+\n \n

\n Classes

class  gtsam::SmartProjectionRigFactor< CAMERA >
 If you are using the factor, please cite: L. More...
 
struct  gtsam::traits< SmartProjectionRigFactor< CAMERA > >
 traits More...
class  gtsam::PoseRotationPrior< POSE >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Smart factor on poses, assuming camera calibration is fixed.

\n-

Same as SmartProjectionPoseFactor, except:

    \n-
  • it is templated on CAMERA (i.e., it allows cameras beyond pinhole)
  • \n-
  • it admits a different calibration for each measurement (i.e., it can model a multi-camera rig system)
  • \n-
  • it allows multiple observations from the same pose/key (again, to model a multi-camera system)
    Author
    Luca Carlone
    \n-
    \n-Frank Dellaert
    \n-
  • \n-
\n+

Implements a prior on the rotation component of a pose.

\n+
Date
Jun 14, 2012
\n+
Author
Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,26 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SmartProjectionRigFactor.h File Reference\n-Smart factor on poses, assuming camera calibration is fixed. _\bM_\bo_\br_\be_\b._\b._\b.\n+PoseRotationPrior.h File Reference\n+Implements a prior on the rotation component of a pose. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n-\u00a0 If you are using the factor, please cite: L. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b<_\b _\bP_\bO_\bS_\bE_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Smart factor on poses, assuming camera calibration is fixed.\n-Same as SmartProjectionPoseFactor, except:\n- * it is templated on CAMERA (i.e., it allows cameras beyond pinhole)\n- * it admits a different calibration for each measurement (i.e., it can\n- model a multi-camera rig system)\n- * it allows multiple observations from the same pose/key (again, to model a\n- multi-camera system)\n- Author\n- Luca Carlone\n- Frank Dellaert\n+Implements a prior on the rotation component of a pose.\n+ Date\n+ Jun 14, 2012\n+ Author\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01307.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01307.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01307 = [\n- [\"gtsam::traits< SmartProjectionRigFactor< CAMERA > >\", \"a04956.html\", null]\n+ [\"gtsam::PoseRotationPrior< POSE >\", \"a04888.html\", \"a04888\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01307_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01307_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionRigFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/PoseRotationPrior.h Source File\n \n \n \n \n \n \n \n@@ -98,366 +98,146 @@\n
No Matches
\n \n \n \n \n \n
\n-
SmartProjectionRigFactor.h
\n+
PoseRotationPrior.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
7
\n-
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n+Go to the documentation of this file.
1
\n+
10#pragma once
\n
11
\n-
25#pragma once
\n-
26
\n-\n-
28
\n-
29namespace gtsam {
\n-
51template <class CAMERA>
\n-
\n-\n-
53 private:
\n-\n-\n-
56 typedef typename CAMERA::CalibrationType CALIBRATION;
\n-
57 typedef typename CAMERA::Measurement MEASUREMENT;
\n-
58 typedef typename CAMERA::MeasurementVector MEASUREMENTS;
\n+\n+\n+
14
\n+
15
\n+
16namespace gtsam {
\n+
17
\n+
18template<class POSE>
\n+
\n+\n+
20public:
\n+
21
\n+
22 typedef PoseRotationPrior<POSE> This;
\n+\n+
24 typedef POSE Pose;
\n+
25 typedef typename POSE::Translation Translation;
\n+
26 typedef typename POSE::Rotation Rotation;
\n+
27
\n+
28 GTSAM_CONCEPT_POSE_TYPE(Pose)
\n+
29 GTSAM_CONCEPT_GROUP_TYPE(Pose)
\n+
30 GTSAM_CONCEPT_LIE_TYPE(Rotation)
\n+
31
\n+
32 // Get dimensions of pose and rotation type at compile time
\n+
33 static const int xDim = FixedDimension<POSE>::value;
\n+\n+
35
\n+
36protected:
\n+
37
\n+
38 Rotation measured_;
\n+
39
\n+
40public:
\n+
41
\n+\n+
44
\n+
\n+
46 PoseRotationPrior(Key key, const Rotation& rot_z, const SharedNoiseModel& model)
\n+
47 : Base(model, key), measured_(rot_z) {}
\n+
\n+
48
\n+
\n+
50 PoseRotationPrior(Key key, const POSE& pose_z, const SharedNoiseModel& model)
\n+
51 : Base(model, key), measured_(pose_z.rotation()) {}
\n+
\n+
52
\n+
53 ~PoseRotationPrior() override {}
\n+
54
\n+
\n+
56 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
57 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
58 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n+
\n
59
\n-
60 static const int DimPose = 6;
\n-
61 static const int ZDim = 2;
\n+
60 // access
\n+
61 const Rotation& measured() const { return measured_; }
\n
62
\n-
63 protected:
\n-\n-
66
\n-
68 boost::shared_ptr<typename Base::Cameras> cameraRig_;
\n-
69
\n-\n-
73
\n-
74 public:
\n-
75 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n+
63 // testable
\n+
64
\n+
\n+
66 bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
\n+
67 const This *e = dynamic_cast<const This*> (&expected);
\n+
68 return e != nullptr && Base::equals(*e, tol) && measured_.equals(e->measured_, tol);
\n+
69 }
\n+
\n+
70
\n+
\n+
72 void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
73 Base::print(s + "PoseRotationPrior", keyFormatter);
\n+
74 measured_.print("Measured Rotation");
\n+
75 }
\n+
\n
76
\n-
77 typedef CAMERA Camera;
\n-\n-
79
\n-
81 typedef boost::shared_ptr<This> shared_ptr;
\n-
82
\n-\n+
\n+
78 Vector evaluateError(const Pose& pose, boost::optional<Matrix&> H = boost::none) const override {
\n+
79 const Rotation& newR = pose.rotation();
\n+
80 if (H) {
\n+
81 *H = Matrix::Zero(rDim, xDim);
\n+
82 std::pair<size_t, size_t> rotInterval = POSE::rotationInterval();
\n+
83 (*H).middleCols(rotInterval.first, rDim).setIdentity(rDim, rDim);
\n+
84 }
\n
85
\n-
\n-\n-
95 const SharedNoiseModel& sharedNoiseModel,
\n-
96 const boost::shared_ptr<Cameras>& cameraRig,
\n-\n-
98 : Base(sharedNoiseModel, params), cameraRig_(cameraRig) {
\n-
99 // throw exception if configuration is not supported by this factor
\n-
100 if (Base::params_.degeneracyMode != gtsam::ZERO_ON_DEGENERACY)
\n-
101 throw std::runtime_error(
\n-
102 "SmartProjectionRigFactor: "
\n-
103 "degeneracyMode must be set to ZERO_ON_DEGENERACY");
\n-
104 if (Base::params_.linearizationMode != gtsam::HESSIAN)
\n-
105 throw std::runtime_error(
\n-
106 "SmartProjectionRigFactor: "
\n-
107 "linearizationMode must be set to HESSIAN");
\n-
108 }
\n-
\n-
109
\n-
111 ~SmartProjectionRigFactor() override = default;
\n-
112
\n-
\n-
123 void add(const MEASUREMENT& measured, const Key& poseKey,
\n-
124 const size_t& cameraId = 0) {
\n-
125 // store measurement and key
\n-
126 this->measured_.push_back(measured);
\n-
127 this->nonUniqueKeys_.push_back(poseKey);
\n-
128
\n-
129 // also store keys in the keys_ vector: these keys are assumed to be
\n-
130 // unique, so we avoid duplicates here
\n-
131 if (std::find(this->keys_.begin(), this->keys_.end(), poseKey) ==
\n-
132 this->keys_.end())
\n-
133 this->keys_.push_back(poseKey); // add only unique keys
\n-
134
\n-
135 // store id of the camera taking the measurement
\n-
136 cameraIds_.push_back(cameraId);
\n-
137 }
\n-
\n-
138
\n-
\n-
149 void add(const MEASUREMENTS& measurements, const KeyVector& poseKeys,
\n-\n-
151 if (poseKeys.size() != measurements.size() ||
\n-
152 (poseKeys.size() != cameraIds.size() && cameraIds.size() != 0)) {
\n-
153 throw std::runtime_error(
\n-
154 "SmartProjectionRigFactor: "
\n-
155 "trying to add inconsistent inputs");
\n-
156 }
\n-
157 if (cameraIds.size() == 0 && cameraRig_->size() > 1) {
\n-
158 throw std::runtime_error(
\n-
159 "SmartProjectionRigFactor: "
\n-
160 "camera rig includes multiple camera "
\n-
161 "but add did not input cameraIds");
\n-
162 }
\n-
163 for (size_t i = 0; i < measurements.size(); i++) {
\n-
164 add(measurements[i], poseKeys[i],
\n-
165 cameraIds.size() == 0 ? 0 : cameraIds[i]);
\n-
166 }
\n-
167 }
\n-
\n-
168
\n-
171 const KeyVector& nonUniqueKeys() const { return nonUniqueKeys_; }
\n-
172
\n-
174 const boost::shared_ptr<Cameras>& cameraRig() const { return cameraRig_; }
\n-
175
\n-
177 const FastVector<size_t>& cameraIds() const { return cameraIds_; }
\n-
178
\n-
\n-
184 void print(
\n-
185 const std::string& s = "",
\n-
186 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
187 std::cout << s << "SmartProjectionRigFactor: \\n ";
\n-
188 for (size_t i = 0; i < nonUniqueKeys_.size(); i++) {
\n-
189 std::cout << "-- Measurement nr " << i << std::endl;
\n-
190 std::cout << "key: " << keyFormatter(nonUniqueKeys_[i]) << std::endl;
\n-
191 std::cout << "cameraId: " << cameraIds_[i] << std::endl;
\n-
192 (*cameraRig_)[cameraIds_[i]].print("camera in rig:\\n");
\n-
193 }
\n-
194 Base::print("", keyFormatter);
\n-
195 }
\n-
\n-
196
\n-
\n-
198 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n-
199 const This* e = dynamic_cast<const This*>(&p);
\n-
200 return e && Base::equals(p, tol) && nonUniqueKeys_ == e->nonUniqueKeys() &&
\n-
201 cameraRig_->equals(*(e->cameraRig())) &&
\n-
202 std::equal(cameraIds_.begin(), cameraIds_.end(),
\n-
203 e->cameraIds().begin());
\n-
204 }
\n-
\n-
205
\n-
\n-
212 typename Base::Cameras cameras(const Values& values) const override {
\n-
213 typename Base::Cameras cameras;
\n-
214 cameras.reserve(nonUniqueKeys_.size()); // preallocate
\n-
215 for (size_t i = 0; i < nonUniqueKeys_.size(); i++) {
\n-
216 const typename Base::Camera& camera_i = (*cameraRig_)[cameraIds_[i]];
\n-
217 const Pose3 world_P_sensor_i =
\n-
218 values.at<Pose3>(nonUniqueKeys_[i]) // = world_P_body
\n-
219 * camera_i.pose(); // = body_P_cam_i
\n-
220 cameras.emplace_back(world_P_sensor_i,
\n-
221 make_shared<typename CAMERA::CalibrationType>(
\n-
222 camera_i.calibration()));
\n-
223 }
\n-
224 return cameras;
\n-
225 }
\n-
\n-
226
\n-
\n-
230 double error(const Values& values) const override {
\n-
231 if (this->active(values)) {
\n-
232 return this->totalReprojectionError(this->cameras(values));
\n-
233 } else { // else of active flag
\n-
234 return 0.0;
\n-
235 }
\n-
236 }
\n-
\n-
237
\n-
\n-
247 void computeJacobiansWithTriangulatedPoint(typename Base::FBlocks& Fs,
\n-
248 Matrix& E, Vector& b,
\n-
249 const Cameras& cameras) const {
\n-
250 if (!this->result_) {
\n-
251 throw("computeJacobiansWithTriangulatedPoint");
\n-
252 } else { // valid result: compute jacobians
\n-
253 b = -cameras.reprojectionError(*this->result_, this->measured_, Fs, E);
\n-
254 for (size_t i = 0; i < Fs.size(); i++) {
\n-
255 const Pose3& body_P_sensor = (*cameraRig_)[cameraIds_[i]].pose();
\n-
256 const Pose3 world_P_body = cameras[i].pose() * body_P_sensor.inverse();
\n-
257 Eigen::Matrix<double, DimPose, DimPose> H;
\n-
258 world_P_body.compose(body_P_sensor, H);
\n-
259 Fs.at(i) = Fs.at(i) * H;
\n-
260 }
\n-
261 }
\n-
262 }
\n-
\n-
263
\n-
\n-
265 boost::shared_ptr<RegularHessianFactor<DimPose> > createHessianFactor(
\n-
266 const Values& values, const double& lambda = 0.0,
\n-
267 bool diagonalDamping = false) const {
\n-
268 // we may have multiple observation sharing the same keys (e.g., 2 cameras
\n-
269 // measuring from the same body pose), hence the number of unique keys may
\n-
270 // be smaller than nrMeasurements
\n-
271 size_t nrUniqueKeys =
\n-
272 this->keys_
\n-
273 .size(); // note: by construction, keys_ only contains unique keys
\n-
274
\n-
275 Cameras cameras = this->cameras(values);
\n-
276
\n-
277 // Create structures for Hessian Factors
\n-
278 std::vector<size_t> js;
\n-
279 std::vector<Matrix> Gs(nrUniqueKeys * (nrUniqueKeys + 1) / 2);
\n-
280 std::vector<Vector> gs(nrUniqueKeys);
\n-
281
\n-
282 if (this->measured_.size() != cameras.size()) // 1 observation per camera
\n-
283 throw std::runtime_error(
\n-
284 "SmartProjectionRigFactor: "
\n-
285 "measured_.size() inconsistent with input");
\n-
286
\n-
287 // triangulate 3D point at given linearization point
\n-
288 this->triangulateSafe(cameras);
\n-
289
\n-
290 if (!this->result_) { // failed: return "empty/zero" Hessian
\n-
291 if (this->params_.degeneracyMode == ZERO_ON_DEGENERACY) {
\n-
292 for (Matrix& m : Gs) m = Matrix::Zero(DimPose, DimPose);
\n-
293 for (Vector& v : gs) v = Vector::Zero(DimPose);
\n-
294 return boost::make_shared<RegularHessianFactor<DimPose> >(this->keys_,
\n-
295 Gs, gs, 0.0);
\n-
296 } else {
\n-
297 throw std::runtime_error(
\n-
298 "SmartProjectionRigFactor: "
\n-
299 "only supported degeneracy mode is ZERO_ON_DEGENERACY");
\n-
300 }
\n-
301 }
\n-
302
\n-
303 // compute Jacobian given triangulated 3D Point
\n-
304 typename Base::FBlocks Fs;
\n-
305 Matrix E;
\n-
306 Vector b;
\n-\n-
308
\n-
309 // Whiten using noise model
\n-
310 this->noiseModel_->WhitenSystem(E, b);
\n-
311 for (size_t i = 0; i < Fs.size(); i++) {
\n-
312 Fs[i] = this->noiseModel_->Whiten(Fs[i]);
\n-
313 }
\n-
314
\n-
315 const Matrix3 P = Base::Cameras::PointCov(E, lambda, diagonalDamping);
\n-
316
\n-
317 // Build augmented Hessian (with last row/column being the information
\n-
318 // vector) Note: we need to get the augumented hessian wrt the unique keys
\n-
319 // in key_
\n-
320 SymmetricBlockMatrix augmentedHessianUniqueKeys =
\n-
321 Base::Cameras::template SchurComplementAndRearrangeBlocks<3, 6, 6>(
\n-
322 Fs, E, P, b, nonUniqueKeys_, this->keys_);
\n-
323
\n-
324 return boost::make_shared<RegularHessianFactor<DimPose> >(
\n-
325 this->keys_, augmentedHessianUniqueKeys);
\n-
326 }
\n-
\n-
327
\n-
\n-
335 boost::shared_ptr<GaussianFactor> linearizeDamped(
\n-
336 const Values& values, const double& lambda = 0.0) const {
\n-
337 // depending on flag set on construction we may linearize to different
\n-
338 // linear factors
\n-
339 switch (this->params_.linearizationMode) {
\n-
340 case HESSIAN:
\n-
341 return this->createHessianFactor(values, lambda);
\n-
342 default:
\n-
343 throw std::runtime_error(
\n-
344 "SmartProjectionRigFactor: unknown linearization mode");
\n-
345 }
\n-
346 }
\n-
\n-
347
\n-
\n-
349 boost::shared_ptr<GaussianFactor> linearize(
\n-
350 const Values& values) const override {
\n-
351 return this->linearizeDamped(values);
\n-
352 }
\n-
\n-
353
\n-
354 private:
\n-\n-
357 template <class ARCHIVE>
\n-
358 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
359 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
360 // ar& BOOST_SERIALIZATION_NVP(nonUniqueKeys_);
\n-
361 // ar& BOOST_SERIALIZATION_NVP(cameraRig_);
\n-
362 // ar& BOOST_SERIALIZATION_NVP(cameraIds_);
\n-
363 }
\n-
364};
\n-
\n-
365// end of class declaration
\n-
366
\n-
368template <class CAMERA>
\n-
\n-\n-
370 : public Testable<SmartProjectionRigFactor<CAMERA> > {};
\n-
\n-
371
\n-
372} // namespace gtsam
\n-
Smart factor on cameras (pose + calibration)
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
86 return measured_.localCoordinates(newR);
\n+
87 }
\n+
\n+
88
\n+
89private:
\n+
90
\n+\n+
93 template<class ARCHIVE>
\n+
94 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
95 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
96 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n+
97 boost::serialization::base_object<Base>(*this));
\n+
98 ar & BOOST_SERIALIZATION_NVP(measured_);
\n+
99 }
\n+
100};
\n+
\n+
101
\n+
102} // \\namespace gtsam
\n+
103
\n+
104
\n+
105
\n+
106
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n-
Vector reprojectionError(const POINT &point, const ZVector &measured, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Calculate vector [project2(point)-z] of re-projection errors.
Definition CameraSet.h:136
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Pose3 inverse() const
inverse transformation with derivatives
Definition Pose3.cpp:49
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n+
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n-
SharedIsotropic noiseModel_
As of Feb 22, 2015, the noise model is the same for all measurements and is isotropic.
Definition SmartFactorBase.h:72
\n-
ZVector measured_
Measurements for each of the m views.
Definition SmartFactorBase.h:79
\n-
const ZVector & measured() const
Return the 2D measurements (ZDim, in general).
Definition SmartFactorBase.h:159
\n-
static Matrix PointCov(const Matrix &E)
Computes Point Covariance P from the "point Jacobian" E.
Definition SmartFactorBase.h:274
\n-
Definition SmartFactorParams.h:42
\n-
LinearizationMode linearizationMode
How to linearize the factor.
Definition SmartFactorParams.h:44
\n-
DegeneracyMode degeneracyMode
How to linearize the factor.
Definition SmartFactorParams.h:45
\n-
SmartProjectionFactor: triangulates point and keeps an estimate of it around.
Definition SmartProjectionFactor.h:45
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartProjectionFactor.h:103
\n-
TriangulationResult result_
result from triangulateSafe
Definition SmartProjectionFactor.h:63
\n-
TriangulationResult triangulateSafe(const Cameras &cameras) const
Call gtsam::triangulateSafe iff we need to re-triangulate.
Definition SmartProjectionFactor.h:174
\n-
double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 > externalPoint=boost::none) const
Calculate the error of the factor.
Definition SmartProjectionFactor.h:411
\n-
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartProjectionFactor.h:115
\n-
CAMERA Camera
shorthand for a set of cameras
Definition SmartProjectionFactor.h:74
\n-
If you are using the factor, please cite: L.
Definition SmartProjectionRigFactor.h:52
\n-
KeyVector nonUniqueKeys_
vector of keys (one for each observation) with potentially repeated keys
Definition SmartProjectionRigFactor.h:65
\n-
FastVector< size_t > cameraIds_
vector of camera Ids (one for each observation, in the same order), identifying which camera took the...
Definition SmartProjectionRigFactor.h:72
\n-
const FastVector< size_t > & cameraIds() const
return the calibration object
Definition SmartProjectionRigFactor.h:177
\n-
boost::shared_ptr< RegularHessianFactor< DimPose > > createHessianFactor(const Values &values, const double &lambda=0.0, bool diagonalDamping=false) const
linearize and return a Hessianfactor that is an approximation of error(p)
Definition SmartProjectionRigFactor.h:265
\n-
void add(const MEASUREMENT &measured, const Key &poseKey, const size_t &cameraId=0)
add a new measurement, corresponding to an observation from pose "poseKey" and taken from the camera ...
Definition SmartProjectionRigFactor.h:123
\n-
boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor
Definition SmartProjectionRigFactor.h:81
\n-
void computeJacobiansWithTriangulatedPoint(typename Base::FBlocks &Fs, Matrix &E, Vector &b, const Cameras &cameras) const
Compute jacobian F, E and error vector at a given linearization point.
Definition SmartProjectionRigFactor.h:247
\n-
void add(const MEASUREMENTS &measurements, const KeyVector &poseKeys, const FastVector< size_t > &cameraIds=FastVector< size_t >())
Variant of the previous "add" function in which we include multiple measurements.
Definition SmartProjectionRigFactor.h:149
\n-
SmartProjectionRigFactor()
Default constructor, only for serialization.
Definition SmartProjectionRigFactor.h:84
\n-
double error(const Values &values) const override
error calculates the error of the factor.
Definition SmartProjectionRigFactor.h:230
\n-
Base::Cameras cameras(const Values &values) const override
Collect all cameras involved in this factor.
Definition SmartProjectionRigFactor.h:212
\n-
~SmartProjectionRigFactor() override=default
Virtual destructor.
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartProjectionRigFactor.h:184
\n-
boost::shared_ptr< GaussianFactor > linearize(const Values &values) const override
linearize
Definition SmartProjectionRigFactor.h:349
\n-
friend class boost::serialization::access
Serialization function.
Definition SmartProjectionRigFactor.h:356
\n-
const KeyVector & nonUniqueKeys() const
return (for each observation) the (possibly non unique) keys involved in the measurements
Definition SmartProjectionRigFactor.h:171
\n-
boost::shared_ptr< typename Base::Cameras > cameraRig_
cameras in the rig (fixed poses wrt body and intrinsics, for each camera)
Definition SmartProjectionRigFactor.h:68
\n-
SmartProjectionRigFactor(const SharedNoiseModel &sharedNoiseModel, const boost::shared_ptr< Cameras > &cameraRig, const SmartProjectionParams &params=SmartProjectionParams())
Constructor.
Definition SmartProjectionRigFactor.h:94
\n-
const boost::shared_ptr< Cameras > & cameraRig() const
return the calibration object
Definition SmartProjectionRigFactor.h:174
\n-
boost::shared_ptr< GaussianFactor > linearizeDamped(const Values &values, const double &lambda=0.0) const
Linearize to Gaussian Factor (possibly adding a damping factor Lambda for LM)
Definition SmartProjectionRigFactor.h:335
\n-
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartProjectionRigFactor.h:198
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
Definition PoseRotationPrior.h:19
\n+
PoseRotationPrior(Key key, const Rotation &rot_z, const SharedNoiseModel &model)
standard constructor
Definition PoseRotationPrior.h:46
\n+
PoseRotationPrior(Key key, const POSE &pose_z, const SharedNoiseModel &model)
Constructor that pulls the translation from an incoming POSE.
Definition PoseRotationPrior.h:50
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition PoseRotationPrior.h:56
\n+
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
equals specialized to this factor
Definition PoseRotationPrior.h:66
\n+
PoseRotationPrior()
default constructor - only use for serialization
Definition PoseRotationPrior.h:43
\n+
Vector evaluateError(const Pose &pose, boost::optional< Matrix & > H=boost::none) const override
h(x)-z
Definition PoseRotationPrior.h:78
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print contents
Definition PoseRotationPrior.h:72
\n+
friend class boost::serialization::access
Serialization function.
Definition PoseRotationPrior.h:92
\n+
Concept-checking macros for geometric objects Each macro instantiates a concept check structure,...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,503 +1,186 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SmartProjectionRigFactor.h\n+PoseRotationPrior.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1/* ---------------------------------------------------------------------------\n--\n-2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n-7\n-8 * See LICENSE for the license information\n-9\n-10 * -------------------------------------------------------------------------\n-- */\n+1\n+10#pragma once\n 11\n-25#pragma once\n-26\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-51template \n-_\b5_\b2class _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br : public _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n-53 private:\n-54 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> _\bB_\ba_\bs_\be;\n-55 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> This;\n-56 typedef typename CAMERA::CalibrationType CALIBRATION;\n-57 typedef typename CAMERA::Measurement MEASUREMENT;\n-58 typedef typename CAMERA::MeasurementVector MEASUREMENTS;\n+12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh>\n+13#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+14\n+15\n+16namespace _\bg_\bt_\bs_\ba_\bm {\n+17\n+18template\n+_\b1_\b9class _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+20public:\n+21\n+22 typedef _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b<_\bP_\bO_\bS_\bE_\b> This;\n+23 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bS_\bE_\b> _\bB_\ba_\bs_\be;\n+24 typedef POSE Pose;\n+25 typedef typename POSE::Translation Translation;\n+26 typedef typename POSE::Rotation Rotation;\n+27\n+28 GTSAM_CONCEPT_POSE_TYPE(Pose)\n+29 GTSAM_CONCEPT_GROUP_TYPE(Pose)\n+30 GTSAM_CONCEPT_LIE_TYPE(Rotation)\n+31\n+32 // Get dimensions of pose and rotation type at compile time\n+33 static const int xDim = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bP_\bO_\bS_\bE_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n+34 static const int rDim = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bP_\bO_\bS_\bE_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n+35\n+36protected:\n+37\n+38 Rotation measured_;\n+39\n+40public:\n+41\n+_\b4_\b3 _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br() {}\n+44\n+_\b4_\b6 _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Rotation& rot_z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n+model)\n+47 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by), measured_(rot_z) {}\n+48\n+_\b5_\b0 _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const POSE& pose_z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n+model)\n+51 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by), measured_(pose_z.rotation()) {}\n+52\n+53 _\b~_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br() override {}\n+54\n+_\b5_\b6 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+57 return boost::static_pointer_cast(\n+58 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }\n 59\n-60 static const int DimPose = 6;\n-61 static const int ZDim = 2;\n+60 // access\n+61 const Rotation& measured() const { return measured_; }\n 62\n-63 protected:\n-_\b6_\b5 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_;\n-66\n-_\b6_\b8 boost::shared_ptr _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_;\n-69\n-_\b7_\b2 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b> _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_;\n-73\n-74 public:\n-75 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n+63 // testable\n+64\n+_\b6_\b6 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol=1e-9) const override\n+{\n+67 const This *e = dynamic_cast (&expected);\n+68 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) && measured_.equals(e-\n+>measured_, tol);\n+69 }\n+70\n+_\b7_\b2 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter) const override {\n+73 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s + \"PoseRotationPrior\", keyFormatter);\n+74 measured_.print(\"Measured Rotation\");\n+75 }\n 76\n-77 typedef CAMERA _\bC_\ba_\bm_\be_\br_\ba;\n-78 typedef _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> _\bC_\ba_\bm_\be_\br_\ba_\bs;\n-79\n-_\b8_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-82\n-_\b8_\b4 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br() {}\n+_\b7_\b8 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Pose& pose, boost::optional H = boost::\n+none) const override {\n+79 const Rotation& newR = pose.rotation();\n+80 if (H) {\n+81 *H = Matrix::Zero(rDim, xDim);\n+82 std::pair rotInterval = POSE::rotationInterval();\n+83 (*H).middleCols(rotInterval.first, rDim).setIdentity(rDim, rDim);\n+84 }\n 85\n-_\b9_\b4 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br(\n-95 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& sharedNoiseModel,\n-96 const boost::shared_ptr& _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg,\n-97 const _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& params = _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs())\n-98 : _\bB_\ba_\bs_\be(sharedNoiseModel, params), _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_(_\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg) {\n-99 // throw exception if configuration is not supported by this factor\n-100 if (Base::params_.degeneracyMode != gtsam::ZERO_ON_DEGENERACY)\n-101 throw std::runtime_error(\n-102 \"SmartProjectionRigFactor: \"\n-103 \"degeneracyMode must be set to ZERO_ON_DEGENERACY\");\n-104 if (Base::params_.linearizationMode != gtsam::HESSIAN)\n-105 throw std::runtime_error(\n-106 \"SmartProjectionRigFactor: \"\n-107 \"linearizationMode must be set to HESSIAN\");\n-108 }\n-109\n-_\b1_\b1_\b1 _\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br() override = default;\n-112\n-_\b1_\b2_\b3 void _\ba_\bd_\bd(const MEASUREMENT& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bK_\be_\by& poseKey,\n-124 const size_t& cameraId = 0) {\n-125 // store measurement and key\n-126 this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.push_back(measured);\n-127 this->nonUniqueKeys_.push_back(poseKey);\n-128\n-129 // also store keys in the keys_ vector: these keys are assumed to be\n-130 // unique, so we avoid duplicates here\n-131 if (std::find(this->_\bk_\be_\by_\bs_\b_.begin(), this->keys_.end(), poseKey) ==\n-132 this->keys_.end())\n-133 this->_\bk_\be_\by_\bs_\b_.push_back(poseKey); // add only unique keys\n-134\n-135 // store id of the camera taking the measurement\n-136 _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_.push_back(cameraId);\n-137 }\n-138\n-_\b1_\b4_\b9 void _\ba_\bd_\bd(const MEASUREMENTS& measurements, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& poseKeys,\n-150 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b>& _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs = _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b>()) {\n-151 if (poseKeys.size() != measurements.size() ||\n-152 (poseKeys.size() != _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs.size() && _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs.size() != 0)) {\n-153 throw std::runtime_error(\n-154 \"SmartProjectionRigFactor: \"\n-155 \"trying to add inconsistent inputs\");\n-156 }\n-157 if (_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs.size() == 0 && _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_->size() > 1) {\n-158 throw std::runtime_error(\n-159 \"SmartProjectionRigFactor: \"\n-160 \"camera rig includes multiple camera \"\n-161 \"but add did not input cameraIds\");\n-162 }\n-163 for (size_t i = 0; i < measurements.size(); i++) {\n-164 _\ba_\bd_\bd(measurements[i], poseKeys[i],\n-165 _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs.size() == 0 ? 0 : _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs[i]);\n-166 }\n-167 }\n-168\n-_\b1_\b7_\b1 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs() const { return _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_; }\n-172\n-_\b1_\b7_\b4 const boost::shared_ptr& _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg() const { return _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_; }\n-175\n-_\b1_\b7_\b7 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b>& _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs() const { return _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_; }\n-178\n-_\b1_\b8_\b4 void _\bp_\br_\bi_\bn_\bt(\n-185 const std::string& s = \"\",\n-186 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n-187 std::cout << s << \"SmartProjectionRigFactor: \\n \";\n-188 for (size_t i = 0; i < _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_.size(); i++) {\n-189 std::cout << \"-- Measurement nr \" << i << std::endl;\n-190 std::cout << \"key: \" << keyFormatter(_\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_[i]) << std::endl;\n-191 std::cout << \"cameraId: \" << _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_[i] << std::endl;\n-192 (*cameraRig_)[_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_[i]].print(\"camera in rig:\\n\");\n-193 }\n-194 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n-195 }\n-196\n-_\b1_\b9_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n-199 const This* e = dynamic_cast(&p);\n-200 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol) && _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_ == e->nonUniqueKeys() &&\n-201 _\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_->equals(*(e->cameraRig())) &&\n-202 std::equal(_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_.begin(), _\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_.end(),\n-203 e->cameraIds().begin());\n-204 }\n-205\n-_\b2_\b1_\b2 typename _\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n-213 typename _\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs;\n-214 _\bc_\ba_\bm_\be_\br_\ba_\bs.reserve(_\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_.size()); // preallocate\n-215 for (size_t i = 0; i < _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_.size(); i++) {\n-216 const typename _\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba& camera_i = (*cameraRig_)[_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_[i]];\n-217 const _\bP_\bo_\bs_\be_\b3 world_P_sensor_i =\n-218 values._\ba_\bt<_\bP_\bo_\bs_\be_\b3>(_\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_[i]) // = world_P_body\n-219 * camera_i.pose(); // = body_P_cam_i\n-220 _\bc_\ba_\bm_\be_\br_\ba_\bs.emplace_back(world_P_sensor_i,\n-221 make_shared(\n-222 camera_i.calibration()));\n-223 }\n-224 return _\bc_\ba_\bm_\be_\br_\ba_\bs;\n-225 }\n-226\n-_\b2_\b3_\b0 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n-231 if (this->_\ba_\bc_\bt_\bi_\bv_\be(values)) {\n-232 return this->_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values));\n-233 } else { // else of active flag\n-234 return 0.0;\n-235 }\n-236 }\n-237\n-_\b2_\b4_\b7 void _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt(typename Base::FBlocks& Fs,\n-248 Matrix& E, Vector& b,\n-249 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n-250 if (!this->_\br_\be_\bs_\bu_\bl_\bt_\b_) {\n-251 throw(\"computeJacobiansWithTriangulatedPoint\");\n-252 } else { // valid result: compute jacobians\n-253 b = -_\bc_\ba_\bm_\be_\br_\ba_\bs._\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(*this->_\br_\be_\bs_\bu_\bl_\bt_\b_, this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, Fs, E);\n-254 for (size_t i = 0; i < Fs.size(); i++) {\n-255 const _\bP_\bo_\bs_\be_\b3& body_P_sensor = (*cameraRig_)[_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_[i]].pose();\n-256 const _\bP_\bo_\bs_\be_\b3 world_P_body = _\bc_\ba_\bm_\be_\br_\ba_\bs[i].pose() * body_P_sensor._\bi_\bn_\bv_\be_\br_\bs_\be();\n-257 Eigen::Matrix H;\n-258 world_P_body.compose(body_P_sensor, H);\n-259 Fs.at(i) = Fs.at(i) * H;\n-260 }\n-261 }\n-262 }\n-263\n-_\b2_\b6_\b5 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n-266 const _\bV_\ba_\bl_\bu_\be_\bs& values, const double& lambda = 0.0,\n-267 bool diagonalDamping = false) const {\n-268 // we may have multiple observation sharing the same keys (e.g., 2 cameras\n-269 // measuring from the same body pose), hence the number of unique keys may\n-270 // be smaller than nrMeasurements\n-271 size_t nrUniqueKeys =\n-272 this->_\bk_\be_\by_\bs_\b_\n-273 .size(); // note: by construction, keys_ only contains unique keys\n-274\n-275 Cameras _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n-276\n-277 // Create structures for Hessian Factors\n-278 std::vector js;\n-279 std::vector Gs(nrUniqueKeys * (nrUniqueKeys + 1) / 2);\n-280 std::vector gs(nrUniqueKeys);\n-281\n-282 if (this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.size() != cameras.size()) // 1 observation per camera\n-283 throw std::runtime_error(\n-284 \"SmartProjectionRigFactor: \"\n-285 \"measured_.size() inconsistent with input\");\n-286\n-287 // triangulate 3D point at given linearization point\n-288 this->_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(cameras);\n-289\n-290 if (!this->_\br_\be_\bs_\bu_\bl_\bt_\b_) { // failed: return \"empty/zero\" Hessian\n-291 if (this->params_._\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be == ZERO_ON_DEGENERACY) {\n-292 for (Matrix& m : Gs) m = Matrix::Zero(DimPose, DimPose);\n-293 for (Vector& v : gs) v = Vector::Zero(DimPose);\n-294 return boost::make_shared >(this->_\bk_\be_\by_\bs_\b_,\n-295 Gs, gs, 0.0);\n-296 } else {\n-297 throw std::runtime_error(\n-298 \"SmartProjectionRigFactor: \"\n-299 \"only supported degeneracy mode is ZERO_ON_DEGENERACY\");\n-300 }\n-301 }\n-302\n-303 // compute Jacobian given triangulated 3D Point\n-304 typename Base::FBlocks Fs;\n-305 Matrix E;\n-306 Vector b;\n-307 this->_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs);\n-308\n-309 // Whiten using noise model\n-310 this->_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->WhitenSystem(E, b);\n-311 for (size_t i = 0; i < Fs.size(); i++) {\n-312 Fs[i] = this->_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->Whiten(Fs[i]);\n-313 }\n-314\n-315 const Matrix3 P = _\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv(E, lambda, diagonalDamping);\n-316\n-317 // Build augmented Hessian (with last row/column being the information\n-318 // vector) Note: we need to get the augumented hessian wrt the unique keys\n-319 // in key_\n-320 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessianUniqueKeys =\n-321 Base::Cameras::template SchurComplementAndRearrangeBlocks<3, 6, 6>(\n-322 Fs, E, P, b, _\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_, this->_\bk_\be_\by_\bs_\b_);\n-323\n-324 return boost::make_shared >(\n-325 this->_\bk_\be_\by_\bs_\b_, augmentedHessianUniqueKeys);\n-326 }\n-327\n-_\b3_\b3_\b5 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(\n-336 const _\bV_\ba_\bl_\bu_\be_\bs& values, const double& lambda = 0.0) const {\n-337 // depending on flag set on construction we may linearize to different\n-338 // linear factors\n-339 switch (this->params_._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be) {\n-340 case HESSIAN:\n-341 return this->_\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(values, lambda);\n-342 default:\n-343 throw std::runtime_error(\n-344 \"SmartProjectionRigFactor: unknown linearization mode\");\n-345 }\n-346 }\n-347\n-_\b3_\b4_\b9 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(\n-350 const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n-351 return this->_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(values);\n-352 }\n-353\n-354 private:\n-_\b3_\b5_\b6 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-357 template \n-358 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-359 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-360 // ar& BOOST_SERIALIZATION_NVP(nonUniqueKeys_);\n-361 // ar& BOOST_SERIALIZATION_NVP(cameraRig_);\n-362 // ar& BOOST_SERIALIZATION_NVP(cameraIds_);\n-363 }\n-364};\n-365// end of class declaration\n-366\n-368template \n-_\b3_\b6_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br >\n-370 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n-371\n-372} // namespace gtsam\n-_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Smart factor on cameras (pose + calibration)\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+86 return measured_.localCoordinates(newR);\n+87 }\n+88\n+89private:\n+90\n+_\b9_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+93 template\n+94 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+95 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility\n+96 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n+97 boost::serialization::base_object(*this));\n+98 ar & BOOST_SERIALIZATION_NVP(measured_);\n+99 }\n+100};\n+101\n+102} // \\namespace gtsam\n+103\n+104\n+105\n+106\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n Aliases.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n-A set of cameras, all with their own calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n-Vector reprojectionError(const POINT &point, const ZVector &measured, boost::\n-optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::\n-none) const\n-Calculate vector [project2(point)-z] of re-projection errors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n-Pose3 inverse() const\n-inverse transformation with derivatives\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+Give fixed size dimension of a type, fails at compile time if dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n-virtual bool active(const Values &) const\n-Checks whether a factor should be used based on a set of values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-const ValueType at(Key j) const\n-Retrieve a variable by key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_\n-SharedIsotropic noiseModel_\n-As of Feb 22, 2015, the noise model is the same for all measurements and is\n-isotropic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n-ZVector measured_\n-Measurements for each of the m views.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const ZVector & measured() const\n-Return the 2D measurements (ZDim, in general).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv\n-static Matrix PointCov(const Matrix &E)\n-Computes Point Covariance P from the \"point Jacobian\" E.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:274\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n-LinearizationMode linearizationMode\n-How to linearize the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be\n-DegeneracyMode degeneracyMode\n-How to linearize the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-SmartProjectionFactor: triangulates point and keeps an estimate of it around.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bP_\bO_\bS_\bE_\b _\b>_\b:_\b:_\bk_\be_\by\n+Key key() const\n+Returns a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:19\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n+PoseRotationPrior(Key key, const Rotation &rot_z, const SharedNoiseModel\n+&model)\n+standard constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n+PoseRotationPrior(Key key, const POSE &pose_z, const SharedNoiseModel &model)\n+Constructor that pulls the translation from an incoming POSE.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n+equals specialized to this factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br\n+PoseRotationPrior()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Pose &pose, boost::optional< Matrix & > H=boost::\n+none) const override\n+h(x)-z\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const std::string &s=\"\", const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\br_\be_\bs_\bu_\bl_\bt_\b_\n-TriangulationResult result_\n-result from triangulateSafe\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be\n-TriangulationResult triangulateSafe(const Cameras &cameras) const\n-Call gtsam::triangulateSafe iff we need to re-triangulate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n-double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 >\n-externalPoint=boost::none) const\n-Calculate the error of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:411\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba\n-CAMERA Camera\n-shorthand for a set of cameras\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br\n-If you are using the factor, please cite: L.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs_\b_\n-KeyVector nonUniqueKeys_\n-vector of keys (one for each observation) with potentially repeated keys\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs_\b_\n-FastVector< size_t > cameraIds_\n-vector of camera Ids (one for each observation, in the same order), identifying\n-which camera took the...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bI_\bd_\bs\n-const FastVector< size_t > & cameraIds() const\n-return the calibration object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< RegularHessianFactor< DimPose > > createHessianFactor(const\n-Values &values, const double &lambda=0.0, bool diagonalDamping=false) const\n-linearize and return a Hessianfactor that is an approximation of error(p)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:265\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bd\n-void add(const MEASUREMENT &measured, const Key &poseKey, const size_t\n-&cameraId=0)\n-add a new measurement, corresponding to an observation from pose \"poseKey\" and\n-taken from the camera ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shorthand for a smart pointer to a factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt\n-void computeJacobiansWithTriangulatedPoint(typename Base::FBlocks &Fs, Matrix\n-&E, Vector &b, const Cameras &cameras) const\n-Compute jacobian F, E and error vector at a given linearization point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:247\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bd_\bd\n-void add(const MEASUREMENTS &measurements, const KeyVector &poseKeys, const\n-FastVector< size_t > &cameraIds=FastVector< size_t >())\n-Variant of the previous \"add\" function in which we include multiple\n-measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:149\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br\n-SmartProjectionRigFactor()\n-Default constructor, only for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &values) const override\n-error calculates the error of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:230\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs\n-Base::Cameras cameras(const Values &values) const override\n-Collect all cameras involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:212\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br\n-~SmartProjectionRigFactor() override=default\n-Virtual destructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianFactor > linearize(const Values &values) const\n-override\n-linearize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:349\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+print contents\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n friend class boost::serialization::access\n Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:356\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bn_\bU_\bn_\bi_\bq_\bu_\be_\bK_\be_\by_\bs\n-const KeyVector & nonUniqueKeys() const\n-return (for each observation) the (possibly non unique) keys involved in the\n-measurements\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:171\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg_\b_\n-boost::shared_ptr< typename Base::Cameras > cameraRig_\n-cameras in the rig (fixed poses wrt body and intrinsics, for each camera)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br\n-SmartProjectionRigFactor(const SharedNoiseModel &sharedNoiseModel, const\n-boost::shared_ptr< Cameras > &cameraRig, const SmartProjectionParams\n-¶ms=SmartProjectionParams())\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bR_\bi_\bg\n-const boost::shared_ptr< Cameras > & cameraRig() const\n-return the calibration object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd\n-boost::shared_ptr< GaussianFactor > linearizeDamped(const Values &values, const\n-double &lambda=0.0) const\n-Linearize to Gaussian Factor (possibly adding a damping factor Lambda for LM)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:335\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionRigFactor.h:198\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PoseRotationPrior.h:92\n+_\bc_\bo_\bn_\bc_\be_\bp_\bt_\bs_\b._\bh\n+Concept-checking macros for geometric objects Each macro instantiates a concept\n+check structure,...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bR_\bi_\bg_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bP_\bo_\bs_\be_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\br_\bi_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01316.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01316.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartFactorBase.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/StereoFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,50 +96,47 @@\n \n \n \n
\n \n-
SmartFactorBase.h File Reference
\n+
StereoFactor.h File Reference
\n
\n
\n \n-

Base class to create smart factors on poses or cameras. \n+

A non-linear factor for stereo measurements. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::SmartFactorBase< CAMERA >
 Base class for smart factors. More...
class  gtsam::GenericStereoFactor< POSE, LANDMARK >
 A Generic Stereo Factor. More...
 
struct  gtsam::traits< GenericStereoFactor< T1, T2 > >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Base class to create smart factors on poses or cameras.

\n-
Author
Luca Carlone
\n-
\n-Antoni Rosinol
\n-
\n-Zsolt Kira
\n-
\n-Frank Dellaert
\n+

A non-linear factor for stereo measurements.

\n+
Author
Alireza Fathi
\n
\n Chris Beall
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SmartFactorBase.h File Reference\n-Base class to create smart factors on poses or cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n+StereoFactor.h File Reference\n+A non-linear factor for stereo measurements. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n-\u00a0 Base class for smart factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b _\b>\n+\u00a0 A Generic Stereo _\bF_\ba_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bT_\b1_\b,_\b _\bT_\b2_\b _\b>_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Base class to create smart factors on poses or cameras.\n+A non-linear factor for stereo measurements.\n Author\n- Luca Carlone\n- Antoni Rosinol\n- Zsolt Kira\n- Frank Dellaert\n+ Alireza Fathi\n Chris Beall\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b._\bh\n+ * _\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01316.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01316.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01316 = [\n- [\"gtsam::SmartFactorBase< CAMERA >\", \"a04928.html\", \"a04928\"]\n+ [\"gtsam::traits< GenericStereoFactor< T1, T2 > >\", \"a04964.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01316_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01316_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartFactorBase.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/StereoFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,464 +98,218 @@\n
No Matches
\n \n \n \n \n \n
\n-
SmartFactorBase.h
\n+
StereoFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
22#pragma once
\n+
19#pragma once
\n+
20
\n+\n+\n
23
\n-
24#include <gtsam/slam/JacobianFactorQ.h>
\n-
25#include <gtsam/slam/JacobianFactorSVD.h>
\n-\n-
27
\n-\n-\n-\n-
31
\n-
32#include <boost/optional.hpp>
\n-
33#include <boost/serialization/optional.hpp>
\n-
34#include <boost/make_shared.hpp>
\n-
35#include <vector>
\n-
36
\n-
37namespace gtsam {
\n+
24namespace gtsam {
\n+
25
\n+
30template<class POSE, class LANDMARK>
\n+
\n+
31class GenericStereoFactor: public NoiseModelFactorN<POSE, LANDMARK> {
\n+
32private:
\n+
33
\n+
34 // Keep a copy of measurement and calibration for I/O
\n+
35 StereoPoint2 measured_;
\n+
36 Cal3_S2Stereo::shared_ptr K_;
\n+
37 boost::optional<POSE> body_P_sensor_;
\n
38
\n-
49template<class CAMERA>
\n-
\n-\n-
51
\n-
52private:
\n-
53 typedef NonlinearFactor Base;
\n-
54 typedef SmartFactorBase<CAMERA> This;
\n-
55 typedef typename CAMERA::Measurement Z;
\n-
56 typedef typename CAMERA::MeasurementVector ZVector;
\n-
57
\n-
58public:
\n-
59
\n-
60 static const int Dim = traits<CAMERA>::dimension;
\n-
61 static const int ZDim = traits<Z>::dimension;
\n-
62 typedef Eigen::Matrix<double, ZDim, Dim> MatrixZD; // F blocks (derivatives wrpt camera)
\n-
63 typedef std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> > FBlocks; // vector of F blocks
\n-
64
\n-
65protected:
\n-
72 SharedIsotropic noiseModel_;
\n-
73
\n-
79 ZVector measured_;
\n-
80
\n-
81 boost::optional<Pose3>
\n-\n-
83
\n-
84 // Cache for Fblocks, to avoid a malloc ever time we re-linearize
\n-
85 mutable FBlocks Fs;
\n-
86
\n-
87 public:
\n-\n+
39 // verbosity handling for Cheirality Exceptions
\n+
40 bool throwCheirality_;
\n+
41 bool verboseCheirality_;
\n+
42
\n+
43public:
\n+
44
\n+
45 // shorthand for base class type
\n+\n+\n+
48 typedef boost::shared_ptr<GenericStereoFactor> shared_ptr;
\n+
49 typedef POSE CamPose;
\n+
50
\n+
\n+
54 GenericStereoFactor() : K_(new Cal3_S2Stereo(444, 555, 666, 777, 888, 1.0)),
\n+
55 throwCheirality_(false), verboseCheirality_(false) {}
\n+
\n+
56
\n+
\n+\n+
67 Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr& K,
\n+
68 boost::optional<POSE> body_P_sensor = boost::none) :
\n+
69 Base(model, poseKey, landmarkKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor),
\n+
70 throwCheirality_(false), verboseCheirality_(false) {}
\n+
\n+
71
\n+
\n+\n+
84 Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr& K,
\n+\n+
86 boost::optional<POSE> body_P_sensor = boost::none) :
\n+
87 Base(model, poseKey, landmarkKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor),
\n+
88 throwCheirality_(throwCheirality), verboseCheirality_(verboseCheirality) {}
\n+
\n
89
\n-
91 typedef boost::shared_ptr<This> shared_ptr;
\n+\n
92
\n-\n-
95
\n-\n-
98
\n-
\n-
100 SmartFactorBase(const SharedNoiseModel& sharedNoiseModel,
\n-
101 boost::optional<Pose3> body_P_sensor = boost::none,
\n-
102 size_t expectedNumberCameras = 10)
\n-
103 : body_P_sensor_(body_P_sensor), Fs(expectedNumberCameras) {
\n-
104
\n-
105 if (!sharedNoiseModel)
\n-
106 throw std::runtime_error("SmartFactorBase: sharedNoiseModel is required");
\n-
107
\n-
108 SharedIsotropic sharedIsotropic = boost::dynamic_pointer_cast<
\n-
109 noiseModel::Isotropic>(sharedNoiseModel);
\n-
110
\n-
111 if (!sharedIsotropic)
\n-
112 throw std::runtime_error("SmartFactorBase: needs isotropic");
\n-
113
\n-
114 noiseModel_ = sharedIsotropic;
\n-
115 }
\n-
\n-
116
\n-
\n-
118 ~SmartFactorBase() override {
\n+
\n+
94 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
95 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
96 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n+
\n+
97
\n+
\n+
103 void print(const std::string& s = "", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
104 Base::print(s, keyFormatter);
\n+
105 measured_.print(s + ".z");
\n+
106 if(this->body_P_sensor_)
\n+
107 this->body_P_sensor_->print(" sensor pose in body frame: ");
\n+
108 }
\n+
\n+
109
\n+
\n+
113 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override {
\n+
114 const GenericStereoFactor* e = dynamic_cast<const GenericStereoFactor*> (&f);
\n+
115 return e
\n+
116 && Base::equals(f)
\n+
117 && measured_.equals(e->measured_, tol)
\n+
118 && ((!body_P_sensor_ && !e->body_P_sensor_) || (body_P_sensor_ && e->body_P_sensor_ && body_P_sensor_->equals(*e->body_P_sensor_)));
\n
119 }
\n
\n
120
\n-
\n-
126 void add(const Z& measured, const Key& key) {
\n-
127 if(std::find(keys_.begin(), keys_.end(), key) != keys_.end()) {
\n-
128 throw std::invalid_argument(
\n-
129 "SmartFactorBase::add: adding duplicate measurement for key.");
\n-
130 }
\n-
131 this->measured_.push_back(measured);
\n-
132 this->keys_.push_back(key);
\n-
133 }
\n-
\n-
134
\n-
\n-
136 void add(const ZVector& measurements, const KeyVector& cameraKeys) {
\n-
137 assert(measurements.size() == cameraKeys.size());
\n-
138 for (size_t i = 0; i < measurements.size(); i++) {
\n-
139 this->add(measurements[i], cameraKeys[i]);
\n-
140 }
\n-
141 }
\n-
\n-
142
\n-
147 template<class SFM_TRACK>
\n-
\n-
148 void add(const SFM_TRACK& trackToAdd) {
\n-
149 for (size_t k = 0; k < trackToAdd.numberMeasurements(); k++) {
\n-
150 this->measured_.push_back(trackToAdd.measurements[k].second);
\n-
151 this->keys_.push_back(trackToAdd.measurements[k].first);
\n-
152 }
\n-
153 }
\n-
\n-
154
\n-
156 size_t dim() const override { return ZDim * this->measured_.size(); }
\n-
157
\n-
159 const ZVector& measured() const { return measured_; }
\n-
160
\n-
\n-
162 virtual Cameras cameras(const Values& values) const {
\n-\n-
164 for(const Key& k: this->keys_)
\n-
165 cameras.push_back(values.at<CAMERA>(k));
\n-
166 return cameras;
\n-
167 }
\n-
\n-
168
\n-
\n-
174 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
175 DefaultKeyFormatter) const override {
\n-
176 std::cout << s << "SmartFactorBase, z = \\n";
\n-
177 for (size_t k = 0; k < measured_.size(); ++k) {
\n-
178 std::cout << "measurement " << k<<", px = \\n" << measured_[k] << "\\n";
\n-
179 noiseModel_->print("noise model = ");
\n-
180 }
\n-\n-
182 body_P_sensor_->print("body_P_sensor_:\\n");
\n-
183 Base::print("", keyFormatter);
\n-
184 }
\n-
\n-
185
\n-
\n-
187 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n-
188 if (const This* e = dynamic_cast<const This*>(&p)) {
\n-
189 // Check that all measurements are the same.
\n-
190 for (size_t i = 0; i < measured_.size(); i++) {
\n-
191 if (!traits<Z>::Equals(this->measured_.at(i), e->measured_.at(i), tol))
\n-
192 return false;
\n-
193 }
\n-
194 // If so, check base class.
\n-
195 return Base::equals(p, tol);
\n-
196 } else {
\n-
197 return false;
\n-
198 }
\n-
199 }
\n-
\n-
200
\n-
203 template <class POINT>
\n-
\n-\n-
205 const Cameras& cameras, const POINT& point,
\n-
206 boost::optional<typename Cameras::FBlocks&> Fs = boost::none, //
\n-
207 boost::optional<Matrix&> E = boost::none) const {
\n-
208 // Reproject, with optional derivatives.
\n-
209 Vector error = cameras.reprojectionError(point, measured_, Fs, E);
\n-
210
\n-
211 // Apply chain rule if body_P_sensor_ is given.
\n-
212 if (body_P_sensor_ && Fs) {
\n-
213 const Pose3 sensor_P_body = body_P_sensor_->inverse();
\n-
214 constexpr int camera_dim = traits<CAMERA>::dimension;
\n-
215 constexpr int pose_dim = traits<Pose3>::dimension;
\n-
216
\n-
217 for (size_t i = 0; i < Fs->size(); i++) {
\n-
218 const Pose3 world_P_body = cameras[i].pose() * sensor_P_body;
\n-
219 Eigen::Matrix<double, camera_dim, camera_dim> J;
\n-
220 J.setZero();
\n-
221 Eigen::Matrix<double, pose_dim, pose_dim> H;
\n-
222 // Call compose to compute Jacobian for camera extrinsics
\n-
223 world_P_body.compose(*body_P_sensor_, H);
\n-
224 // Assign extrinsics part of the Jacobian
\n-
225 J.template block<pose_dim, pose_dim>(0, 0) = H;
\n-
226 Fs->at(i) = Fs->at(i) * J;
\n-
227 }
\n-
228 }
\n-
229
\n-
230 // Correct the Jacobians in case some measurements are missing.
\n-\n-
232
\n-
233 return error;
\n-
234 }
\n-
\n-
235
\n-
\n-\n-
242 const Cameras& cameras, Vector& ue,
\n-
243 boost::optional<typename Cameras::FBlocks&> Fs = boost::none,
\n-
244 boost::optional<Matrix&> E = boost::none) const {}
\n-
\n-
245
\n-
250 template<class POINT>
\n-
\n-
251 Vector whitenedError(const Cameras& cameras, const POINT& point) const {
\n-
252 Vector error = cameras.reprojectionError(point, measured_);
\n-
253 if (noiseModel_)
\n-
254 noiseModel_->whitenInPlace(error);
\n-
255 return error;
\n-
256 }
\n-
\n-
257
\n-
266 template<class POINT>
\n-
\n-\n-
268 const POINT& point) const {
\n-
269 Vector error = whitenedError(cameras, point);
\n-
270 return 0.5 * error.dot(error);
\n-
271 }
\n-
\n-
272
\n-
\n-
274 static Matrix PointCov(const Matrix& E) {
\n-
275 return (E.transpose() * E).inverse();
\n-
276 }
\n-
\n-
277
\n-
284 template<class POINT>
\n-
\n-
285 void computeJacobians(FBlocks& Fs, Matrix& E, Vector& b,
\n-
286 const Cameras& cameras, const POINT& point) const {
\n-
287 // Project into Camera set and calculate derivatives
\n-
288 // As in expressionFactor, RHS vector b = - (h(x_bar) - z) = z-h(x_bar)
\n-
289 // Indeed, nonlinear error |h(x_bar+dx)-z| ~ |h(x_bar) + A*dx - z|
\n-
290 // = |A*dx - (z-h(x_bar))|
\n-
291 b = -unwhitenedError(cameras, point, Fs, E);
\n-
292 }
\n-
\n-
293
\n-
299 template<class POINT>
\n-
\n-
300 void computeJacobiansSVD(FBlocks& Fs, Matrix& Enull,
\n-
301 Vector& b, const Cameras& cameras, const POINT& point) const {
\n-
302
\n-
303 Matrix E;
\n-
304 computeJacobians(Fs, E, b, cameras, point);
\n-
305
\n-
306 static const int N = FixedDimension<POINT>::value; // 2 (Unit3) or 3 (Point3)
\n-
307
\n-
308 // Do SVD on A.
\n-
309 Eigen::JacobiSVD<Matrix> svd(E, Eigen::ComputeFullU);
\n-
310 size_t m = this->keys_.size();
\n-
311 Enull = svd.matrixU().block(0, N, ZDim * m, ZDim * m - N); // last ZDim*m-N columns
\n-
312 }
\n-
\n-
313
\n-
315 // TODO(dellaert): Not used/tested anywhere and not properly whitened.
\n-
\n-
316 boost::shared_ptr<RegularHessianFactor<Dim> > createHessianFactor(
\n-
317 const Cameras& cameras, const Point3& point, const double lambda = 0.0,
\n-
318 bool diagonalDamping = false) const {
\n-
319
\n-
320 Matrix E;
\n-
321 Vector b;
\n-
322 computeJacobians(Fs, E, b, cameras, point);
\n-
323
\n-
324 // build augmented hessian
\n-
325 SymmetricBlockMatrix augmentedHessian = Cameras::SchurComplement(Fs, E, b);
\n-
326
\n-
327 return boost::make_shared<RegularHessianFactor<Dim> >(keys_,
\n-
328 augmentedHessian);
\n-
329 }
\n-
\n-
330
\n-
\n-
336 void updateAugmentedHessian(const Cameras& cameras, const Point3& point,
\n-
337 const double lambda, bool diagonalDamping,
\n-
338 SymmetricBlockMatrix& augmentedHessian,
\n-
339 const KeyVector allKeys) const {
\n-
340 Matrix E;
\n-
341 Vector b;
\n-
342 computeJacobians(Fs, E, b, cameras, point);
\n-
343 Cameras::UpdateSchurComplement(Fs, E, b, allKeys, keys_, augmentedHessian);
\n-
344 }
\n-
\n-
345
\n-
\n-
347 void whitenJacobians(FBlocks& F, Matrix& E, Vector& b) const {
\n-
348 noiseModel_->WhitenSystem(E, b);
\n-
349 // TODO make WhitenInPlace work with any dense matrix type
\n-
350 for (size_t i = 0; i < F.size(); i++)
\n-
351 F[i] = noiseModel_->Whiten(F[i]);
\n-
352 }
\n-
\n-
353
\n-
355 boost::shared_ptr<RegularImplicitSchurFactor<CAMERA> > //
\n-
\n-\n-
357 double lambda = 0.0, bool diagonalDamping = false) const {
\n-
358 Matrix E;
\n-
359 Vector b;
\n-
360 FBlocks F;
\n-
361 computeJacobians(F, E, b, cameras, point);
\n-
362 whitenJacobians(F, E, b);
\n-
363 Matrix P = Cameras::PointCov(E, lambda, diagonalDamping);
\n-
364 return boost::make_shared<RegularImplicitSchurFactor<CAMERA> >(keys_, F, E,
\n-
365 P, b);
\n-
366 }
\n-
\n-
367
\n-
\n-
369 boost::shared_ptr<JacobianFactorQ<Dim, ZDim> > createJacobianQFactor(
\n-
370 const Cameras& cameras, const Point3& point, double lambda = 0.0,
\n-
371 bool diagonalDamping = false) const {
\n-
372 Matrix E;
\n-
373 Vector b;
\n-
374 FBlocks F;
\n-
375 computeJacobians(F, E, b, cameras, point);
\n-
376 const size_t M = b.size();
\n-
377 Matrix P = Cameras::PointCov(E, lambda, diagonalDamping);
\n-
378 SharedIsotropic n = noiseModel::Isotropic::Sigma(M, noiseModel_->sigma());
\n-
379 return boost::make_shared<JacobianFactorQ<Dim, ZDim> >(keys_, F, E, P, b, n);
\n-
380 }
\n-
\n-
381
\n-
\n-
386 boost::shared_ptr<JacobianFactor> createJacobianSVDFactor(
\n-
387 const Cameras& cameras, const Point3& point, double lambda = 0.0) const {
\n-
388 size_t m = this->keys_.size();
\n-
389 FBlocks F;
\n-
390 Vector b;
\n-
391 const size_t M = ZDim * m;
\n-
392 Matrix E0(M, M - 3);
\n-
393 computeJacobiansSVD(F, E0, b, cameras, point);
\n-
394 SharedIsotropic n = noiseModel::Isotropic::Sigma(M - 3,
\n-
395 noiseModel_->sigma());
\n-
396 return boost::make_shared<JacobianFactorSVD<Dim, ZDim> >(keys_, F, E0, b, n);
\n-
397 }
\n-
\n-
398
\n-
\n-
400 static void FillDiagonalF(const FBlocks& Fs, Matrix& F) {
\n-
401 size_t m = Fs.size();
\n-
402 F.resize(ZDim * m, Dim * m);
\n-
403 F.setZero();
\n-
404 for (size_t i = 0; i < m; ++i)
\n-
405 F.block<ZDim, Dim>(ZDim * i, Dim * i) = Fs.at(i);
\n-
406 }
\n-
\n-
407
\n-
408 // Return sensor pose.
\n-
409 Pose3 body_P_sensor() const{
\n-\n-
411 return *body_P_sensor_;
\n-
412 else
\n-
413 return Pose3(); // if unspecified, the transformation is the identity
\n-
414 }
\n-
415
\n-
416private:
\n-
417
\n-\n-
420 template<class ARCHIVE>
\n-
421 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
422 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
423 ar & BOOST_SERIALIZATION_NVP(noiseModel_);
\n-
424 ar & BOOST_SERIALIZATION_NVP(measured_);
\n-
425 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);
\n-
426 }
\n-
427};
\n-
\n-
428// end class SmartFactorBase
\n-
429
\n-
430// Definitions need to avoid link errors (above are only declarations)
\n-
431template<class CAMERA> const int SmartFactorBase<CAMERA>::Dim;
\n-
432template<class CAMERA> const int SmartFactorBase<CAMERA>::ZDim;
\n-
433
\n-
434} // \\ namespace gtsam
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Base class to create smart factors on poses or cameras.
\n-
HessianFactor class with constant sized blocks.
\n-
Non-linear factor base classes.
\n-
A subclass of GaussianFactor specialized to structureless SFM.
\n+
\n+
122 Vector evaluateError(const Pose3& pose, const Point3& point,
\n+
123 boost::optional<Matrix&> H1 = boost::none, boost::optional<Matrix&> H2 = boost::none) const override {
\n+
124 try {
\n+
125 if(body_P_sensor_) {
\n+
126 if(H1) {
\n+
127 gtsam::Matrix H0;
\n+
128 StereoCamera stereoCam(pose.compose(*body_P_sensor_, H0), K_);
\n+
129 StereoPoint2 reprojectionError(stereoCam.project(point, H1, H2) - measured_);
\n+
130 *H1 = *H1 * H0;
\n+
131 return reprojectionError.vector();
\n+
132 } else {
\n+
133 StereoCamera stereoCam(pose.compose(*body_P_sensor_), K_);
\n+
134 return (stereoCam.project(point, H1, H2) - measured_).vector();
\n+
135 }
\n+
136 } else {
\n+
137 StereoCamera stereoCam(pose, K_);
\n+
138 return (stereoCam.project(point, H1, H2) - measured_).vector();
\n+
139 }
\n+
140 } catch(StereoCheiralityException& e) {
\n+
141 if (H1) *H1 = Matrix::Zero(3,6);
\n+
142 if (H2) *H2 = Z_3x3;
\n+
143 if (verboseCheirality_)
\n+
144 std::cout << e.what() << ": Landmark "<< DefaultKeyFormatter(this->key2()) <<
\n+
145 " moved behind camera " << DefaultKeyFormatter(this->key1()) << std::endl;
\n+
146 if (throwCheirality_)
\n+
147 throw StereoCheiralityException(this->key2());
\n+
148 }
\n+
149 return Vector3::Constant(2.0 * K_->fx());
\n+
150 }
\n+
\n+
151
\n+
\n+
153 const StereoPoint2& measured() const {
\n+
154 return measured_;
\n+
155 }
\n+
\n+
156
\n+
\n+
158 inline const Cal3_S2Stereo::shared_ptr calibration() const {
\n+
159 return K_;
\n+
160 }
\n+
\n+
161
\n+
163 inline bool verboseCheirality() const { return verboseCheirality_; }
\n+
164
\n+
166 inline bool throwCheirality() const { return throwCheirality_; }
\n+
167
\n+
168private:
\n+\n+
171 template<class Archive>
\n+
172 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
173 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n+
174 ar & boost::serialization::make_nvp("NoiseModelFactor2",
\n+
175 boost::serialization::base_object<Base>(*this));
\n+
176 ar & BOOST_SERIALIZATION_NVP(measured_);
\n+
177 ar & BOOST_SERIALIZATION_NVP(K_);
\n+
178 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);
\n+
179 ar & BOOST_SERIALIZATION_NVP(throwCheirality_);
\n+
180 ar & BOOST_SERIALIZATION_NVP(verboseCheirality_);
\n+
181 }
\n+
182};
\n+
\n+
183
\n+
185template<class T1, class T2>
\n+
186struct traits<GenericStereoFactor<T1, T2> > : public Testable<GenericStereoFactor<T1, T2> > {};
\n+
187
\n+
188} // \\ namespace gtsam
\n+
A Stereo Camera based on two Simple Cameras.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
void svd(const Matrix &A, Matrix &U, Vector &S, Matrix &V)
SVD computes economy SVD A=U*S*V'.
Definition Matrix.cpp:560
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n-
Vector reprojectionError(const POINT &point, const ZVector &measured, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Calculate vector [project2(point)-z] of re-projection errors.
Definition CameraSet.h:136
\n-
static Matrix PointCov(const Matrix &E, const double lambda=0.0, bool diagonalDamping=false)
Computes Point Covariance P, with lambda parameter, dynamic version.
Definition CameraSet.h:331
\n-
static void UpdateSchurComplement(const FBlocks &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &allKeys, const KeyVector &keys, SymmetricBlockMatrix &augmentedHessian)
Applies Schur complement (exploiting block structure) to get a smart factor on cameras,...
Definition CameraSet.h:369
\n-
static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * ...
Definition CameraSet.h:150
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
The most common 5DOF 3D->2D calibration, stereo version.
Definition Cal3_S2Stereo.h:30
\n
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Pose3 inverse() const
inverse transformation with derivatives
Definition Pose3.cpp:49
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
An isotropic noise model corresponds to a scaled diagonal covariance To construct,...
Definition NoiseModel.h:516
\n-
static shared_ptr Sigma(size_t dim, double sigma, bool smart=true)
An isotropic noise model created by specifying a standard devation sigma.
Definition NoiseModel.cpp:597
\n+
Definition StereoCamera.h:26
\n+
A stereo camera class, parameterize by left camera pose and stereo calibration.
Definition StereoCamera.h:47
\n+
StereoPoint2 project(const Point3 &point) const
Project 3D point to StereoPoint2 (uL,uR,v)
Definition StereoCamera.cpp:32
\n+
A 2D stereo point, v will be same for rectified images.
Definition StereoPoint2.h:32
\n+
Vector3 vector() const
convert to vector
Definition StereoPoint2.h:115
\n+
bool equals(const StereoPoint2 &q, double tol=1e-9) const
equals
Definition StereoPoint2.h:64
\n+
void print(const std::string &s="") const
print
Definition StereoPoint2.cpp:26
\n+
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
virtual bool equals(const NonlinearFactor &f, double tol=1e-9) const
Check if two factors are equal.
Definition NonlinearFactor.cpp:47
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition NonlinearFactor.cpp:37
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n-
Base class for smart factors.
Definition SmartFactorBase.h:50
\n-
void computeJacobians(FBlocks &Fs, Matrix &E, Vector &b, const Cameras &cameras, const POINT &point) const
Compute F, E, and b (called below in both vanilla and SVD versions), where F is a vector of derivativ...
Definition SmartFactorBase.h:285
\n-
void add(const Z &measured, const Key &key)
Add a new measurement and pose/camera key.
Definition SmartFactorBase.h:126
\n-
~SmartFactorBase() override
Virtual destructor, subclasses from NonlinearFactor.
Definition SmartFactorBase.h:118
\n-
void updateAugmentedHessian(const Cameras &cameras, const Point3 &point, const double lambda, bool diagonalDamping, SymmetricBlockMatrix &augmentedHessian, const KeyVector allKeys) const
Add the contribution of the smart factor to a pre-allocated Hessian, using sparse linear algebra.
Definition SmartFactorBase.h:336
\n-
boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > > createRegularImplicitSchurFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0, bool diagonalDamping=false) const
Return Jacobians as RegularImplicitSchurFactor with raw access.
Definition SmartFactorBase.h:356
\n-
SharedIsotropic noiseModel_
As of Feb 22, 2015, the noise model is the same for all measurements and is isotropic.
Definition SmartFactorBase.h:72
\n-
static const int Dim
Camera dimension.
Definition SmartFactorBase.h:60
\n-
Vector whitenedError(const Cameras &cameras, const POINT &point) const
Calculate vector of re-projection errors [h(x)-z] = [cameras.project(p) - z], with the noise model ap...
Definition SmartFactorBase.h:251
\n-
virtual Cameras cameras(const Values &values) const
Collect all cameras: important that in key order.
Definition SmartFactorBase.h:162
\n-
static void FillDiagonalF(const FBlocks &Fs, Matrix &F)
Create BIG block-diagonal matrix F from Fblocks.
Definition SmartFactorBase.h:400
\n-
double totalReprojectionError(const Cameras &cameras, const POINT &point) const
Calculate the error of the factor.
Definition SmartFactorBase.h:267
\n-
void add(const ZVector &measurements, const KeyVector &cameraKeys)
Add a bunch of measurements, together with the camera keys.
Definition SmartFactorBase.h:136
\n-
boost::shared_ptr< RegularHessianFactor< Dim > > createHessianFactor(const Cameras &cameras, const Point3 &point, const double lambda=0.0, bool diagonalDamping=false) const
Linearize to a Hessianfactor.
Definition SmartFactorBase.h:316
\n-
void computeJacobiansSVD(FBlocks &Fs, Matrix &Enull, Vector &b, const Cameras &cameras, const POINT &point) const
SVD version that produces smaller Jacobian matrices by doing an SVD decomposition on E,...
Definition SmartFactorBase.h:300
\n-
ZVector measured_
Measurements for each of the m views.
Definition SmartFactorBase.h:79
\n-
GTSAM_MAKE_ALIGNED_OPERATOR_NEW typedef boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor.
Definition SmartFactorBase.h:91
\n-
Vector unwhitenedError(const Cameras &cameras, const POINT &point, boost::optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Compute reprojection errors [h(x)-z] = [cameras.project(p)-z] and derivatives.
Definition SmartFactorBase.h:204
\n-
SmartFactorBase()
Default Constructor, for serialization.
Definition SmartFactorBase.h:97
\n-
void whitenJacobians(FBlocks &F, Matrix &E, Vector &b) const
Whiten the Jacobians computed by computeJacobians using noiseModel_.
Definition SmartFactorBase.h:347
\n-
SmartFactorBase(const SharedNoiseModel &sharedNoiseModel, boost::optional< Pose3 > body_P_sensor=boost::none, size_t expectedNumberCameras=10)
Construct with given noise model and optional arguments.
Definition SmartFactorBase.h:100
\n-
void add(const SFM_TRACK &trackToAdd)
Add an entire SfM_track (collection of cameras observing a single point).
Definition SmartFactorBase.h:148
\n-
const ZVector & measured() const
Return the 2D measurements (ZDim, in general).
Definition SmartFactorBase.h:159
\n-
boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0) const
Return Jacobians as JacobianFactorSVD.
Definition SmartFactorBase.h:386
\n-
size_t dim() const override
Return the dimension (number of rows!) of the factor.
Definition SmartFactorBase.h:156
\n-
boost::shared_ptr< JacobianFactorQ< Dim, ZDim > > createJacobianQFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0, bool diagonalDamping=false) const
Return Jacobians as JacobianFactorQ.
Definition SmartFactorBase.h:369
\n-
friend class boost::serialization::access
Serialization function.
Definition SmartFactorBase.h:419
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartFactorBase.h:174
\n-
boost::optional< Pose3 > body_P_sensor_
Pose of the camera in the body frame.
Definition SmartFactorBase.h:82
\n-
virtual void correctForMissingMeasurements(const Cameras &cameras, Vector &ue, boost::optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
This corrects the Jacobians for the case in which some 2D measurement is missing (nan).
Definition SmartFactorBase.h:241
\n-
static const int ZDim
Measurement dimension.
Definition SmartFactorBase.h:61
\n-
static Matrix PointCov(const Matrix &E)
Computes Point Covariance P from the "point Jacobian" E.
Definition SmartFactorBase.h:274
\n-
CameraSet< CAMERA > Cameras
The CameraSet data structure is used to refer to a set of cameras.
Definition SmartFactorBase.h:94
\n-
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartFactorBase.h:187
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
A Generic Stereo Factor.
Definition StereoFactor.h:31
\n+
bool throwCheirality() const
return flag for throwing cheirality exceptions
Definition StereoFactor.h:166
\n+
Vector evaluateError(const Pose3 &pose, const Point3 &point, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
h(x)-z
Definition StereoFactor.h:122
\n+
bool equals(const NonlinearFactor &f, double tol=1e-9) const override
equals
Definition StereoFactor.h:113
\n+
const Cal3_S2Stereo::shared_ptr calibration() const
return the calibration object
Definition StereoFactor.h:158
\n+
GenericStereoFactor(const StereoPoint2 &measured, const SharedNoiseModel &model, Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr &K, bool throwCheirality, bool verboseCheirality, boost::optional< POSE > body_P_sensor=boost::none)
Constructor with exception-handling flags.
Definition StereoFactor.h:83
\n+
GenericStereoFactor< POSE, LANDMARK > This
typedef for this class (with templates)
Definition StereoFactor.h:47
\n+
~GenericStereoFactor() override
Virtual destructor.
Definition StereoFactor.h:91
\n+
bool verboseCheirality() const
return verbosity
Definition StereoFactor.h:163
\n+
boost::shared_ptr< GenericStereoFactor > shared_ptr
typedef for shared pointer to this object
Definition StereoFactor.h:48
\n+
const StereoPoint2 & measured() const
return the measured
Definition StereoFactor.h:153
\n+
GenericStereoFactor()
Default constructor.
Definition StereoFactor.h:54
\n+
friend class boost::serialization::access
Serialization function.
Definition StereoFactor.h:170
\n+
GenericStereoFactor(const StereoPoint2 &measured, const SharedNoiseModel &model, Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr &K, boost::optional< POSE > body_P_sensor=boost::none)
Constructor.
Definition StereoFactor.h:66
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition StereoFactor.h:103
\n+
POSE CamPose
typedef for Pose Lie Value type
Definition StereoFactor.h:49
\n+
NoiseModelFactorN< POSE, LANDMARK > Base
typedef for base class
Definition StereoFactor.h:46
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition StereoFactor.h:94
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,379 +1,172 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SmartFactorBase.h\n+StereoFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-22#pragma once\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n 23\n-24#include \n-25#include \n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-27\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh>\n-31\n-32#include \n-33#include \n-34#include \n-35#include \n-36\n-37namespace _\bg_\bt_\bs_\ba_\bm {\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+30template\n+_\b3_\b1class _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+32private:\n+33\n+34 // Keep a copy of measurement and calibration for I/O\n+35 _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 measured_;\n+36 Cal3_S2Stereo::shared_ptr K_;\n+37 boost::optional body_P_sensor_;\n 38\n-49template\n-_\b5_\b0class _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n-51\n-52private:\n-53 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-54 typedef _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> This;\n-55 typedef typename CAMERA::Measurement Z;\n-56 typedef typename CAMERA::MeasurementVector ZVector;\n-57\n-58public:\n-59\n-_\b6_\b0 static const int _\bD_\bi_\bm = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-_\b6_\b1 static const int _\bZ_\bD_\bi_\bm = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bZ_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-62 typedef Eigen::Matrix MatrixZD; // F blocks (derivatives\n-wrpt camera)\n-63 typedef std::vector > FBlocks;\n-// vector of F blocks\n-64\n-65protected:\n-_\b7_\b2 SharedIsotropic _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_;\n-73\n-_\b7_\b9 ZVector _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n-80\n-81 boost::optional\n-_\b8_\b2 _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_;\n-83\n-84 // Cache for Fblocks, to avoid a malloc ever time we re-linearize\n-85 mutable FBlocks Fs;\n-86\n-87 public:\n-88 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+39 // verbosity handling for Cheirality Exceptions\n+40 bool throwCheirality_;\n+41 bool verboseCheirality_;\n+42\n+43public:\n+44\n+45 // shorthand for base class type\n+_\b4_\b6 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b> _\bB_\ba_\bs_\be;\n+_\b4_\b7 typedef _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b> _\bT_\bh_\bi_\bs;\n+_\b4_\b8 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b4_\b9 typedef POSE _\bC_\ba_\bm_\bP_\bo_\bs_\be;\n+50\n+_\b5_\b4 _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br() : K_(new _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo(444, 555, 666, 777, 888, 1.0)),\n+55 throwCheirality_(false), verboseCheirality_(false) {}\n+56\n+_\b6_\b6 _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n+model,\n+67 _\bK_\be_\by poseKey, _\bK_\be_\by landmarkKey, const Cal3_S2Stereo::shared_ptr& K,\n+68 boost::optional body_P_sensor = boost::none) :\n+69 _\bB_\ba_\bs_\be(model, poseKey, landmarkKey), measured_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd), K_(K),\n+body_P_sensor_(body_P_sensor),\n+70 throwCheirality_(false), verboseCheirality_(false) {}\n+71\n+_\b8_\b3 _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n+model,\n+84 _\bK_\be_\by poseKey, _\bK_\be_\by landmarkKey, const Cal3_S2Stereo::shared_ptr& K,\n+85 bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by, bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by,\n+86 boost::optional body_P_sensor = boost::none) :\n+87 _\bB_\ba_\bs_\be(model, poseKey, landmarkKey), measured_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd), K_(K),\n+body_P_sensor_(body_P_sensor),\n+88 throwCheirality_(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by), verboseCheirality_(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by) {}\n 89\n-_\b9_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b9_\b1 _\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br() override {}\n 92\n-_\b9_\b4 typedef _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> _\bC_\ba_\bm_\be_\br_\ba_\bs;\n-95\n-_\b9_\b7 _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be() {}\n-98\n-_\b1_\b0_\b0 _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& sharedNoiseModel,\n-101 boost::optional body_P_sensor = boost::none,\n-102 size_t expectedNumberCameras = 10)\n-103 : _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_(body_P_sensor), Fs(expectedNumberCameras) {\n-104\n-105 if (!sharedNoiseModel)\n-106 throw std::runtime_error(\"SmartFactorBase: sharedNoiseModel is required\");\n-107\n-108 SharedIsotropic sharedIsotropic = boost::dynamic_pointer_cast<\n-109 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc>(sharedNoiseModel);\n-110\n-111 if (!sharedIsotropic)\n-112 throw std::runtime_error(\"SmartFactorBase: needs isotropic\");\n-113\n-114 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_ = sharedIsotropic;\n-115 }\n-116\n-_\b1_\b1_\b8 _\b~_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be() override {\n+_\b9_\b4 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+95 return boost::static_pointer_cast(\n+96 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this))); }\n+97\n+_\b1_\b0_\b3 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter) const override {\n+104 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n+105 measured_._\bp_\br_\bi_\bn_\bt(s + \".z\");\n+106 if(this->body_P_sensor_)\n+107 this->body_P_sensor_->print(\" sensor pose in body frame: \");\n+108 }\n+109\n+_\b1_\b1_\b3 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& f, double tol = 1e-9) const override {\n+114 const _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br* e = dynamic_cast\n+(&f);\n+115 return e\n+116 && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(f)\n+117 && measured_._\be_\bq_\bu_\ba_\bl_\bs(e->measured_, tol)\n+118 && ((!body_P_sensor_ && !e->body_P_sensor_) || (body_P_sensor_ && e-\n+>body_P_sensor_ && body_P_sensor_->equals(*e->body_P_sensor_)));\n 119 }\n 120\n-_\b1_\b2_\b6 void _\ba_\bd_\bd(const Z& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bK_\be_\by& key) {\n-127 if(std::find(_\bk_\be_\by_\bs_\b_.begin(), _\bk_\be_\by_\bs_\b_.end(), key) != _\bk_\be_\by_\bs_\b_.end()) {\n-128 throw std::invalid_argument(\n-129 \"SmartFactorBase::add: adding duplicate measurement for key.\");\n-130 }\n-131 this->measured_.push_back(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd);\n-132 this->_\bk_\be_\by_\bs_\b_.push_back(key);\n-133 }\n-134\n-_\b1_\b3_\b6 void _\ba_\bd_\bd(const ZVector& measurements, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& cameraKeys) {\n-137 assert(measurements.size() == cameraKeys.size());\n-138 for (size_t i = 0; i < measurements.size(); i++) {\n-139 this->_\ba_\bd_\bd(measurements[i], cameraKeys[i]);\n-140 }\n-141 }\n-142\n-147 template\n-_\b1_\b4_\b8 void _\ba_\bd_\bd(const SFM_TRACK& trackToAdd) {\n-149 for (size_t k = 0; k < trackToAdd.numberMeasurements(); k++) {\n-150 this->measured_.push_back(trackToAdd.measurements[k].second);\n-151 this->_\bk_\be_\by_\bs_\b_.push_back(trackToAdd.measurements[k].first);\n-152 }\n-153 }\n-154\n-_\b1_\b5_\b6 size_t _\bd_\bi_\bm() const override { return _\bZ_\bD_\bi_\bm * this->measured_.size(); }\n-157\n-_\b1_\b5_\b9 const ZVector& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const { return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_; }\n-160\n-_\b1_\b6_\b2 virtual _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs(const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n-163 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs;\n-164 for(const _\bK_\be_\by& k: this->_\bk_\be_\by_\bs_\b_)\n-165 cameras.push_back(values._\ba_\bt(k));\n-166 return _\bc_\ba_\bm_\be_\br_\ba_\bs;\n-167 }\n-168\n-_\b1_\b7_\b4 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-175 DefaultKeyFormatter) const override {\n-176 std::cout << s << \"SmartFactorBase, z = \\n\";\n-177 for (size_t k = 0; k < _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.size(); ++k) {\n-178 std::cout << \"measurement \" << k<<\", px = \\n\" << _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_[k] << \"\\n\";\n-179 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->print(\"noise model = \");\n-180 }\n-181 if(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_)\n-182 _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_->print(\"body_P_sensor_:\\n\");\n-183 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n-184 }\n-185\n-_\b1_\b8_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n-188 if (const This* e = dynamic_cast(&p)) {\n-189 // Check that all measurements are the same.\n-190 for (size_t i = 0; i < _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.size(); i++) {\n-191 if (!_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bZ_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_.at(i), e->measured_.at(i), tol))\n-192 return false;\n-193 }\n-194 // If so, check base class.\n-195 return _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol);\n-196 } else {\n-197 return false;\n-198 }\n-199 }\n-200\n-203 template \n-_\b2_\b0_\b4 Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(\n-205 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const POINT& point,\n-206 boost::optional Fs = boost::none, //\n-207 boost::optional E = boost::none) const {\n-208 // Reproject, with optional derivatives.\n-209 Vector error = _\bc_\ba_\bm_\be_\br_\ba_\bs._\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(point, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, Fs, E);\n-210\n-211 // Apply chain rule if body_P_sensor_ is given.\n-212 if (_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_ && Fs) {\n-213 const _\bP_\bo_\bs_\be_\b3 sensor_P_body = _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_->_\bi_\bn_\bv_\be_\br_\bs_\be();\n-214 constexpr int camera_dim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-215 constexpr int pose_dim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bs_\be_\b3_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n-216\n-217 for (size_t i = 0; i < Fs->size(); i++) {\n-218 const _\bP_\bo_\bs_\be_\b3 world_P_body = _\bc_\ba_\bm_\be_\br_\ba_\bs[i].pose() * sensor_P_body;\n-219 Eigen::Matrix J;\n-220 J.setZero();\n-221 Eigen::Matrix H;\n-222 // Call compose to compute Jacobian for camera extrinsics\n-223 world_P_body.compose(*_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_, H);\n-224 // Assign extrinsics part of the Jacobian\n-225 J.template block(0, 0) = H;\n-226 Fs->at(i) = Fs->at(i) * J;\n-227 }\n-228 }\n-229\n-230 // Correct the Jacobians in case some measurements are missing.\n-231 _\bc_\bo_\br_\br_\be_\bc_\bt_\bF_\bo_\br_\bM_\bi_\bs_\bs_\bi_\bn_\bg_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(_\bc_\ba_\bm_\be_\br_\ba_\bs, error, Fs, E);\n-232\n-233 return error;\n-234 }\n-235\n-_\b2_\b4_\b1 virtual void _\bc_\bo_\br_\br_\be_\bc_\bt_\bF_\bo_\br_\bM_\bi_\bs_\bs_\bi_\bn_\bg_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n-242 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, Vector& ue,\n-243 boost::optional Fs = boost::none,\n-244 boost::optional E = boost::none) const {}\n-245\n-250 template\n-_\b2_\b5_\b1 Vector _\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const POINT& point) const {\n-252 Vector error = _\bc_\ba_\bm_\be_\br_\ba_\bs._\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(point, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-253 if (_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_)\n-254 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->whitenInPlace(error);\n-255 return error;\n-256 }\n-257\n-266 template\n-_\b2_\b6_\b7 double _\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs,\n-268 const POINT& point) const {\n-269 Vector error = _\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n-270 return 0.5 * error.dot(error);\n-271 }\n-272\n-_\b2_\b7_\b4 static Matrix _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv(const Matrix& E) {\n-275 return (E.transpose() * E).inverse();\n-276 }\n-277\n-284 template\n-_\b2_\b8_\b5 void _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(FBlocks& Fs, Matrix& E, Vector& b,\n-286 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const POINT& point) const {\n-287 // Project into Camera set and calculate derivatives\n-288 // As in expressionFactor, RHS vector b = - (h(x_bar) - z) = z-h(x_bar)\n-289 // Indeed, nonlinear error |h(x_bar+dx)-z| ~ |h(x_bar) + A*dx - z|\n-290 // = |A*dx - (z-h(x_bar))|\n-291 b = -_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, point, Fs, E);\n-292 }\n-293\n-299 template\n-_\b3_\b0_\b0 void _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD(FBlocks& Fs, Matrix& Enull,\n-301 Vector& b, const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const POINT& point) const {\n-302\n-303 Matrix E;\n-304 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n-305\n-306 static const int N = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bP_\bO_\bI_\bN_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be; // 2 (Unit3) or 3\n-(Point3)\n-307\n-308 // Do SVD on A.\n-309 Eigen::JacobiSVD _\bs_\bv_\bd(E, Eigen::ComputeFullU);\n-310 size_t m = this->_\bk_\be_\by_\bs_\b_.size();\n-311 Enull = _\bs_\bv_\bd.matrixU().block(0, N, _\bZ_\bD_\bi_\bm * m, _\bZ_\bD_\bi_\bm * m - N); // last ZDim*m-\n-N columns\n-312 }\n-313\n-315 // TODO(dellaert): Not used/tested anywhere and not properly whitened.\n-_\b3_\b1_\b6 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n-317 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const _\bP_\bo_\bi_\bn_\bt_\b3& point, const double lambda = 0.0,\n-318 bool diagonalDamping = false) const {\n-319\n-320 Matrix E;\n-321 Vector b;\n-322 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n-323\n-324 // build augmented hessian\n-325 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessian = _\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(Fs, E, b);\n-326\n-327 return boost::make_shared >(_\bk_\be_\by_\bs_\b_,\n-328 augmentedHessian);\n-329 }\n-330\n-_\b3_\b3_\b6 void _\bu_\bp_\bd_\ba_\bt_\be_\bA_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bH_\be_\bs_\bs_\bi_\ba_\bn(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const _\bP_\bo_\bi_\bn_\bt_\b3& point,\n-337 const double lambda, bool diagonalDamping,\n-338 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& augmentedHessian,\n-339 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br allKeys) const {\n-340 Matrix E;\n-341 Vector b;\n-342 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n-343 _\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(Fs, E, b, allKeys, _\bk_\be_\by_\bs_\b_, augmentedHessian);\n-344 }\n-345\n-_\b3_\b4_\b7 void _\bw_\bh_\bi_\bt_\be_\bn_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(FBlocks& F, Matrix& E, Vector& b) const {\n-348 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->WhitenSystem(E, b);\n-349 // TODO make WhitenInPlace work with any dense matrix type\n-350 for (size_t i = 0; i < F.size(); i++)\n-351 F[i] = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->Whiten(F[i]);\n-352 }\n-353\n-355 boost::shared_ptr > //\n-_\b3_\b5_\b6 _\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const _\bP_\bo_\bi_\bn_\bt_\b3&\n-point,\n-357 double lambda = 0.0, bool diagonalDamping = false) const {\n-358 Matrix E;\n-359 Vector b;\n-360 FBlocks F;\n-361 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(F, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n-362 _\bw_\bh_\bi_\bt_\be_\bn_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(F, E, b);\n-363 Matrix P = _\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv(E, lambda, diagonalDamping);\n-364 return boost::make_shared >(_\bk_\be_\by_\bs_\b_, F, E,\n-365 P, b);\n-366 }\n-367\n-_\b3_\b6_\b9 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(\n-370 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const _\bP_\bo_\bi_\bn_\bt_\b3& point, double lambda = 0.0,\n-371 bool diagonalDamping = false) const {\n-372 Matrix E;\n-373 Vector b;\n-374 FBlocks F;\n-375 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(F, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n-376 const size_t M = b.size();\n-377 Matrix P = _\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv(E, lambda, diagonalDamping);\n-378 SharedIsotropic n = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bS_\bi_\bg_\bm_\ba(M, _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->sigma());\n-379 return boost::make_shared >(_\bk_\be_\by_\bs_\b_, F, E, P, b,\n-n);\n-380 }\n-381\n-_\b3_\b8_\b6 boost::shared_ptr _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br(\n-387 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const _\bP_\bo_\bi_\bn_\bt_\b3& point, double lambda = 0.0) const {\n-388 size_t m = this->_\bk_\be_\by_\bs_\b_.size();\n-389 FBlocks F;\n-390 Vector b;\n-391 const size_t M = _\bZ_\bD_\bi_\bm * m;\n-392 Matrix E0(M, M - 3);\n-393 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD(F, E0, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, point);\n-394 SharedIsotropic n = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bS_\bi_\bg_\bm_\ba(M - 3,\n-395 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_->sigma());\n-396 return boost::make_shared >(_\bk_\be_\by_\bs_\b_, F, E0, b,\n-n);\n-397 }\n-398\n-_\b4_\b0_\b0 static void _\bF_\bi_\bl_\bl_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bF(const FBlocks& Fs, Matrix& F) {\n-401 size_t m = Fs.size();\n-402 F.resize(_\bZ_\bD_\bi_\bm * m, _\bD_\bi_\bm * m);\n-403 F.setZero();\n-404 for (size_t i = 0; i < m; ++i)\n-405 F.block<_\bZ_\bD_\bi_\bm, _\bD_\bi_\bm>(_\bZ_\bD_\bi_\bm * i, _\bD_\bi_\bm * i) = Fs.at(i);\n-406 }\n-407\n-408 // Return sensor pose.\n-409 _\bP_\bo_\bs_\be_\b3 body_P_sensor() const{\n-410 if(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_)\n-411 return *_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_;\n-412 else\n-413 return _\bP_\bo_\bs_\be_\b3(); // if unspecified, the transformation is the identity\n-414 }\n-415\n-416private:\n-417\n-_\b4_\b1_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-420 template\n-421 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-422 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-423 ar & BOOST_SERIALIZATION_NVP(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_);\n-424 ar & BOOST_SERIALIZATION_NVP(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n-425 ar & BOOST_SERIALIZATION_NVP(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_);\n-426 }\n-427};\n-428// end class SmartFactorBase\n-429\n-430// Definitions need to avoid link errors (above are only declarations)\n-431template const int _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bD_\bi_\bm;\n-432template const int _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bZ_\bD_\bi_\bm;\n-433\n-434} // \\ namespace gtsam\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n-Base class to create smart factors on poses or cameras.\n-_\bR_\be_\bg_\bu_\bl_\ba_\br_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-HessianFactor class with constant sized blocks.\n+_\b1_\b2_\b2 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bs_\be_\b3& pose, const _\bP_\bo_\bi_\bn_\bt_\b3& point,\n+123 boost::optional H1 = boost::none, boost::optional H2 =\n+boost::none) const override {\n+124 try {\n+125 if(body_P_sensor_) {\n+126 if(H1) {\n+127 gtsam::Matrix H0;\n+128 _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba stereoCam(pose.compose(*body_P_sensor_, H0), K_);\n+129 _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 reprojectionError(stereoCam._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2) -\n+measured_);\n+130 *H1 = *H1 * H0;\n+131 return reprojectionError._\bv_\be_\bc_\bt_\bo_\br();\n+132 } else {\n+133 _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba stereoCam(pose.compose(*body_P_sensor_), K_);\n+134 return (stereoCam._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2) - measured_).vector();\n+135 }\n+136 } else {\n+137 _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba stereoCam(pose, K_);\n+138 return (stereoCam._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2) - measured_).vector();\n+139 }\n+140 } catch(_\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn& e) {\n+141 if (H1) *H1 = Matrix::Zero(3,6);\n+142 if (H2) *H2 = Z_3x3;\n+143 if (verboseCheirality_)\n+144 std::cout << e.what() << \": Landmark \"<< DefaultKeyFormatter(this->key2())\n+<<\n+145 \" moved behind camera \" << DefaultKeyFormatter(this->key1()) << std::endl;\n+146 if (throwCheirality_)\n+147 throw _\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(this->key2());\n+148 }\n+149 return Vector3::Constant(2.0 * K_->fx());\n+150 }\n+151\n+_\b1_\b5_\b3 const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n+154 return measured_;\n+155 }\n+156\n+_\b1_\b5_\b8 inline const Cal3_S2Stereo::shared_ptr _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n+159 return K_;\n+160 }\n+161\n+_\b1_\b6_\b3 inline bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const { return verboseCheirality_; }\n+164\n+_\b1_\b6_\b6 inline bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const { return throwCheirality_; }\n+167\n+168private:\n+_\b1_\b7_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+171 template\n+172 void serialize(Archive & ar, const unsigned int /*version*/) {\n+173 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n+compatibility\n+174 ar & boost::serialization::make_nvp(\"NoiseModelFactor2\",\n+175 boost::serialization::base_object(*this));\n+176 ar & BOOST_SERIALIZATION_NVP(measured_);\n+177 ar & BOOST_SERIALIZATION_NVP(K_);\n+178 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);\n+179 ar & BOOST_SERIALIZATION_NVP(throwCheirality_);\n+180 ar & BOOST_SERIALIZATION_NVP(verboseCheirality_);\n+181 }\n+182};\n+183\n+185template\n+_\b1_\b8_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br > : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n+187\n+188} // \\ namespace gtsam\n+_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+A Stereo Camera based on two Simple Cameras.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n-_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-A subclass of GaussianFactor specialized to structureless SFM.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bv_\bd\n-void svd(const Matrix &A, Matrix &U, Vector &S, Matrix &V)\n-SVD computes economy SVD A=U*S*V'.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:560\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n Vector3 Point3\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n typedef Point3 to Vector3...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n@@ -387,243 +180,138 @@\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-Give fixed size dimension of a type, fails at compile time if dynamic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n-A set of cameras, all with their own calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n-Vector reprojectionError(const POINT &point, const ZVector &measured, boost::\n-optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::\n-none) const\n-Calculate vector [project2(point)-z] of re-projection errors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv\n-static Matrix PointCov(const Matrix &E, const double lambda=0.0, bool\n-diagonalDamping=false)\n-Computes Point Covariance P, with lambda parameter, dynamic version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:331\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n-static void UpdateSchurComplement(const FBlocks &Fs, const Matrix &E, const\n-Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &allKeys,\n-const KeyVector &keys, SymmetricBlockMatrix &augmentedHessian)\n-Applies Schur complement (exploiting block structure) to get a smart factor on\n-cameras,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:369\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n-static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix<\n-double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND >\n-> > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector\n-&b)\n-Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G =\n-F' * F - F' * E * P * ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n+The most common 5DOF 3D->2D calibration, stereo version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n A 3D pose (R,t) : (Rot3,Point3)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n-Pose3 inverse() const\n-inverse transformation with derivatives\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc\n-An isotropic noise model corresponds to a scaled diagonal covariance To\n-construct,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:516\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bI_\bs_\bo_\bt_\br_\bo_\bp_\bi_\bc_\b:_\b:_\bS_\bi_\bg_\bm_\ba\n-static shared_ptr Sigma(size_t dim, double sigma, bool smart=true)\n-An isotropic noise model created by specifying a standard devation sigma.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.cpp:597\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba\n+A stereo camera class, parameterize by left camera pose and stereo calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n+StereoPoint2 project(const Point3 &point) const\n+Project 3D point to StereoPoint2 (uL,uR,v)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.cpp:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2\n+A 2D stereo point, v will be same for rectified images.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoPoint2.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+Vector3 vector() const\n+convert to vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoPoint2.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const StereoPoint2 &q, double tol=1e-9) const\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoPoint2.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\") const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoPoint2.cpp:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-virtual bool equals(const NonlinearFactor &f, double tol=1e-9) const\n-Check if two factors are equal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-const ValueType at(Key j) const\n-Retrieve a variable by key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n-Base class for smart factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n-void computeJacobians(FBlocks &Fs, Matrix &E, Vector &b, const Cameras\n-&cameras, const POINT &point) const\n-Compute F, E, and b (called below in both vanilla and SVD versions), where F is\n-a vector of derivativ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:285\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bd_\bd\n-void add(const Z &measured, const Key &key)\n-Add a new measurement and pose/camera key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\b~_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n-~SmartFactorBase() override\n-Virtual destructor, subclasses from NonlinearFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bA_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bH_\be_\bs_\bs_\bi_\ba_\bn\n-void updateAugmentedHessian(const Cameras &cameras, const Point3 &point, const\n-double lambda, bool diagonalDamping, SymmetricBlockMatrix &augmentedHessian,\n-const KeyVector allKeys) const\n-Add the contribution of the smart factor to a pre-allocated Hessian, using\n-sparse linear algebra.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:336\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > >\n-createRegularImplicitSchurFactor(const Cameras &cameras, const Point3 &point,\n-double lambda=0.0, bool diagonalDamping=false) const\n-Return Jacobians as RegularImplicitSchurFactor with raw access.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:356\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b_\n-SharedIsotropic noiseModel_\n-As of Feb 22, 2015, the noise model is the same for all measurements and is\n-isotropic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bi_\bm\n-static const int Dim\n-Camera dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n-Vector whitenedError(const Cameras &cameras, const POINT &point) const\n-Calculate vector of re-projection errors [h(x)-z] = [cameras.project(p) - z],\n-with the noise model ap...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:251\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs\n-virtual Cameras cameras(const Values &values) const\n-Collect all cameras: important that in key order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:162\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bF_\bi_\bl_\bl_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bF\n-static void FillDiagonalF(const FBlocks &Fs, Matrix &F)\n-Create BIG block-diagonal matrix F from Fblocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n-double totalReprojectionError(const Cameras &cameras, const POINT &point) const\n-Calculate the error of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:267\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bd_\bd\n-void add(const ZVector &measurements, const KeyVector &cameraKeys)\n-Add a bunch of measurements, together with the camera keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< RegularHessianFactor< Dim > > createHessianFactor(const\n-Cameras &cameras, const Point3 &point, const double lambda=0.0, bool\n-diagonalDamping=false) const\n-Linearize to a Hessianfactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:316\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD\n-void computeJacobiansSVD(FBlocks &Fs, Matrix &Enull, Vector &b, const Cameras\n-&cameras, const POINT &point) const\n-SVD version that produces smaller Jacobian matrices by doing an SVD\n-decomposition on E,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:300\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n-ZVector measured_\n-Measurements for each of the m views.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-GTSAM_MAKE_ALIGNED_OPERATOR_NEW typedef boost::shared_ptr< This > shared_ptr\n-shorthand for a smart pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n-Vector unwhitenedError(const Cameras &cameras, const POINT &point, boost::\n-optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional< Matrix\n-& > E=boost::none) const\n-Compute reprojection errors [h(x)-z] = [cameras.project(p)-z] and derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:204\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n-SmartFactorBase()\n-Default Constructor, for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n-void whitenJacobians(FBlocks &F, Matrix &E, Vector &b) const\n-Whiten the Jacobians computed by computeJacobians using noiseModel_.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:347\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n-SmartFactorBase(const SharedNoiseModel &sharedNoiseModel, boost::optional<\n-Pose3 > body_P_sensor=boost::none, size_t expectedNumberCameras=10)\n-Construct with given noise model and optional arguments.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bd_\bd\n-void add(const SFM_TRACK &trackToAdd)\n-Add an entire SfM_track (collection of cameras observing a single point).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:148\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const ZVector & measured() const\n-Return the 2D measurements (ZDim, in general).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras\n-&cameras, const Point3 &point, double lambda=0.0) const\n-Return Jacobians as JacobianFactorSVD.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:386\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-Return the dimension (number of rows!) of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< JacobianFactorQ< Dim, ZDim > > createJacobianQFactor(const\n-Cameras &cameras, const Point3 &point, double lambda=0.0, bool\n-diagonalDamping=false) const\n-Return Jacobians as JacobianFactorQ.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:369\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br\n+A Generic Stereo Factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n+bool throwCheirality() const\n+return flag for throwing cheirality exceptions\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:166\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Pose3 &pose, const Point3 &point, boost::optional<\n+Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const\n+override\n+h(x)-z\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:122\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &f, double tol=1e-9) const override\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+const Cal3_S2Stereo::shared_ptr calibration() const\n+return the calibration object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:158\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br\n+GenericStereoFactor(const StereoPoint2 &measured, const SharedNoiseModel\n+&model, Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr &K, bool\n+throwCheirality, bool verboseCheirality, boost::optional< POSE >\n+body_P_sensor=boost::none)\n+Constructor with exception-handling flags.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+GenericStereoFactor< POSE, LANDMARK > This\n+typedef for this class (with templates)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br\n+~GenericStereoFactor() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n+bool verboseCheirality() const\n+return verbosity\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< GenericStereoFactor > shared_ptr\n+typedef for shared pointer to this object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const StereoPoint2 & measured() const\n+return the measured\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br\n+GenericStereoFactor()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n friend class boost::serialization::access\n Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:419\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:170\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br\n+GenericStereoFactor(const StereoPoint2 &measured, const SharedNoiseModel\n+&model, Key poseKey, Key landmarkKey, const Cal3_S2Stereo::shared_ptr &K,\n+boost::optional< POSE > body_P_sensor=boost::none)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const std::string &s=\"\", const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_\n-boost::optional< Pose3 > body_P_sensor_\n-Pose of the camera in the body frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\br_\br_\be_\bc_\bt_\bF_\bo_\br_\bM_\bi_\bs_\bs_\bi_\bn_\bg_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-virtual void correctForMissingMeasurements(const Cameras &cameras, Vector &ue,\n-boost::optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional<\n-Matrix & > E=boost::none) const\n-This corrects the Jacobians for the case in which some 2D measurement is\n-missing (nan).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:241\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bZ_\bD_\bi_\bm\n-static const int ZDim\n-Measurement dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv\n-static Matrix PointCov(const Matrix &E)\n-Computes Point Covariance P from the \"point Jacobian\" E.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:274\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bs\n-CameraSet< CAMERA > Cameras\n-The CameraSet data structure is used to refer to a set of cameras.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:187\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\ba_\bm_\bP_\bo_\bs_\be\n+POSE CamPose\n+typedef for Pose Lie Value type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n+NoiseModelFactorN< POSE, LANDMARK > Base\n+typedef for base class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoFactor.h:94\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b._\bh\n+ * _\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01319.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01319.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/BetweenFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/FrobeniusFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,56 +94,43 @@\n \n \n \n \n \n
\n \n-
BetweenFactor.h File Reference
\n+Functions
\n+
FrobeniusFactor.cpp File Reference
\n \n
\n \n-

Go to the source code of this file.

\n+

Various factors that minimize some Frobenius norm. \n+More...

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::BetweenFactor< VALUE >
 A class for a measurement predicted by \"between(config[key1],config[key2])\". More...
 
struct  gtsam::traits< BetweenFactor< VALUE > >
 traits More...
 
class  gtsam::BetweenConstraint< VALUE >
 Binary between constraint - forces between to a given value This constraint requires the underlying type to a Lie type. More...
 
struct  gtsam::traits< BetweenConstraint< VALUE > >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n+\n+\n+\n+\n

\n-Macros

\n-#define BETWEENFACTOR_VISIBILITY   GTSAM_EXPORT
 

\n+Functions

SharedNoiseModel gtsam::ConvertNoiseModel (const SharedNoiseModel &model, size_t n, bool defaultToUnit=true)
 When creating (any) FrobeniusFactor we can convert a Rot/Pose BetweenFactor noise model into a n-dimensional isotropic noise model used to weight the Frobenius norm.
 
\n

Detailed Description

\n-
Author
Frank Dellaert, Viorela Ila
\n+

Various factors that minimize some Frobenius norm.

\n+
Date
March 2019
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n-BetweenFactor.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n-\u00a0 A class for a measurement predicted by \"between(config[key1],config\n- [key2])\". _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n-\u00a0 Binary between constraint - forces between to a given value This\n- constraint requires the underlying type to a Lie type. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+FrobeniusFactor.cpp File Reference\n+Various factors that minimize some Frobenius norm. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 B\bBE\bET\bTW\bWE\bEE\bEN\bNF\bFA\bAC\bCT\bTO\bOR\bR_\b_V\bVI\bIS\bSI\bIB\bBI\bIL\bLI\bIT\bTY\bY\u00a0\u00a0\u00a0GTSAM_EXPORT\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl (const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n+ size_t n, bool defaultToUnit=true)\n+ When creating (any) _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br we can convert a Rot/Pose\n+\u00a0 _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br noise model into a n-dimensional isotropic\n+ noise model used to weight the Frobenius norm.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Various factors that minimize some Frobenius norm.\n+ Date\n+ March 2019\n Author\n- Frank Dellaert, Viorela Ila\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01319.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01319.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,3 @@\n var a01319 = [\n- [\"gtsam::traits< BetweenFactor< VALUE > >\", \"a04768.html\", null],\n- [\"gtsam::BetweenConstraint< VALUE >\", \"a04772.html\", \"a04772\"],\n- [\"gtsam::traits< BetweenConstraint< VALUE > >\", \"a04776.html\", null]\n+ [\"ConvertNoiseModel\", \"a01319.html#aa43e7fd7c2b86873458a91ddafc506e4\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01322_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01322_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/JacobianFactorQ.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/BetweenFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,119 +98,215 @@\n
No Matches
\n \n \n \n \n \n
\n-
JacobianFactorQ.h
\n+
BetweenFactor.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file JacobianFactorQ.h
\n-
14 * @date Oct 27, 2013
\n-
15 * @uthor Frank Dellaert
\n-
16 */
\n+
16#pragma once
\n
17
\n-
18#pragma once
\n+
18#include <ostream>
\n
19
\n-\n-
21
\n-
22namespace gtsam {
\n-
26template<size_t D, size_t ZDim>
\n-
\n-\n-
28
\n-
29 typedef RegularJacobianFactor<D> Base;
\n-
30 typedef Eigen::Matrix<double, ZDim, D> MatrixZD;
\n-
31 typedef std::pair<Key, Matrix> KeyMatrix;
\n-
32
\n-
33public:
\n-
34
\n-
\n-\n-
37 }
\n-
\n-
38
\n-
\n-\n-
41 const SharedDiagonal& model = SharedDiagonal()) :
\n-
42 Base() {
\n-
43 Matrix zeroMatrix = Matrix::Zero(0, D);
\n-
44 Vector zeroVector = Vector::Zero(0);
\n-
45 std::vector<KeyMatrix> QF;
\n-
46 QF.reserve(keys.size());
\n-
47 for(const Key& key: keys)
\n-
48 QF.push_back(KeyMatrix(key, zeroMatrix));
\n-
49 JacobianFactor::fillTerms(QF, zeroVector, model);
\n-
50 }
\n-
\n+
20#include <gtsam/base/Testable.h>
\n+
21#include <gtsam/base/Lie.h>
\n+\n+
23
\n+
24#ifdef _WIN32
\n+
25#define BETWEENFACTOR_VISIBILITY
\n+
26#else
\n+
27// This will trigger a LNKxxxx on MSVC, so disable for MSVC build
\n+
28// Please refer to https://github.com/borglab/gtsam/blob/develop/Using-GTSAM-EXPORT.md
\n+
29#define BETWEENFACTOR_VISIBILITY GTSAM_EXPORT
\n+
30#endif
\n+
31
\n+
32namespace gtsam {
\n+
33
\n+
39 template<class VALUE>
\n+
\n+
40 class BetweenFactor: public NoiseModelFactorN<VALUE, VALUE> {
\n+
41
\n+
42 // Check that VALUE type is a testable Lie group
\n+
43 BOOST_CONCEPT_ASSERT((IsTestable<VALUE>));
\n+
44 BOOST_CONCEPT_ASSERT((IsLieGroup<VALUE>));
\n+
45
\n+
46 public:
\n+
47
\n+
48 typedef VALUE T;
\n+
49
\n+
50 private:
\n
51
\n-
\n-\n-
54 const std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> >& FBlocks, const Matrix& E, const Matrix3& P,
\n-
55 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) :
\n-
56 Base() {
\n-
57 size_t j = 0, m2 = E.rows(), m = m2 / ZDim;
\n-
58 // Calculate projector Q
\n-
59 Matrix Q = Matrix::Identity(m2,m2) - E * P * E.transpose();
\n-
60 // Calculate pre-computed Jacobian matrices
\n-
61 // TODO: can we do better ?
\n-
62 std::vector<KeyMatrix> QF;
\n-
63 QF.reserve(m);
\n-
64 // Below, we compute each mZDim*D block A_j = Q_j * F_j = (mZDim*ZDim) * (Zdim*D)
\n-
65 for (size_t k = 0; k < FBlocks.size(); ++k) {
\n-
66 Key key = keys[k];
\n-
67 QF.push_back(
\n-
68 KeyMatrix(key, - Q.block(0, ZDim * j++, m2, ZDim) * FBlocks[k]));
\n-
69 }
\n-
70 // Which is then passed to the normal JacobianFactor constructor
\n-
71 JacobianFactor::fillTerms(QF, - Q * b, model);
\n-
72 }
\n-
\n-
73};
\n+
52 typedef BetweenFactor<VALUE> This;
\n+\n+
54
\n+
55 VALUE measured_;
\n+
57 public:
\n+
58
\n+
59 // shorthand for a smart pointer to a factor
\n+
60 typedef typename boost::shared_ptr<BetweenFactor> shared_ptr;
\n+
61
\n+
64
\n+\n+
67
\n+
\n+
69 BetweenFactor(Key key1, Key key2, const VALUE& measured,
\n+
70 const SharedNoiseModel& model = nullptr) :
\n+
71 Base(model, key1, key2), measured_(measured) {
\n+
72 }
\n
\n-
74// end class JacobianFactorQ
\n+
73
\n
75
\n-
76// traits
\n-
\n-
77template<size_t D, size_t ZDim> struct traits<JacobianFactorQ<D, ZDim> > : public Testable<
\n-
78 JacobianFactorQ<D, ZDim> > {
\n-
79};
\n-
\n-
80
\n-
81}
\n-
JacobianFactor class with fixed sized blcoks.
\n+
76 ~BetweenFactor() override {}
\n+
77
\n+
\n+
79 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
80 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
81 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n+
\n+
82
\n+
85
\n+
\n+
87 void print(
\n+
88 const std::string& s = "",
\n+
89 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
90 std::cout << s << "BetweenFactor("
\n+
91 << keyFormatter(this->key1()) << ","
\n+
92 << keyFormatter(this->key2()) << ")\\n";
\n+
93 traits<T>::Print(measured_, " measured: ");
\n+
94 this->noiseModel_->print(" noise model: ");
\n+
95 }
\n+
\n+
96
\n+
\n+
98 bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
\n+
99 const This *e = dynamic_cast<const This*> (&expected);
\n+
100 return e != nullptr && Base::equals(*e, tol) && traits<T>::Equals(this->measured_, e->measured_, tol);
\n+
101 }
\n+
\n+
102
\n+
106
\n+
\n+
108 Vector evaluateError(const T& p1, const T& p2, boost::optional<Matrix&> H1 =
\n+
109 boost::none, boost::optional<Matrix&> H2 = boost::none) const override {
\n+
110 T hx = traits<T>::Between(p1, p2, H1, H2); // h(x)
\n+
111 // manifold equivalent of h(x)-z -> log(z,h(x))
\n+
112#ifdef GTSAM_SLOW_BUT_CORRECT_BETWEENFACTOR
\n+\n+
114 Vector rval = traits<T>::Local(measured_, hx, boost::none, (H1 || H2) ? &Hlocal : 0);
\n+
115 if (H1) *H1 = Hlocal * (*H1);
\n+
116 if (H2) *H2 = Hlocal * (*H2);
\n+
117 return rval;
\n+
118#else
\n+
119 return traits<T>::Local(measured_, hx);
\n+
120#endif
\n+
121 }
\n+
\n+
122
\n+
126
\n+
\n+
128 const VALUE& measured() const {
\n+
129 return measured_;
\n+
130 }
\n+
\n+
132
\n+
133 private:
\n+
134
\n+\n+
137 template<class ARCHIVE>
\n+
138 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
139 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n+
140 ar & boost::serialization::make_nvp("NoiseModelFactor2",
\n+
141 boost::serialization::base_object<Base>(*this));
\n+
142 ar & BOOST_SERIALIZATION_NVP(measured_);
\n+
143 }
\n+
144
\n+
145 // Alignment, see https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html
\n+
146 enum { NeedsToAlign = (sizeof(VALUE) % 16) == 0 };
\n+
147 public:
\n+\n+
149 }; // \\class BetweenFactor
\n+
\n+
150
\n+
152 template<class VALUE>
\n+
153 struct traits<BetweenFactor<VALUE> > : public Testable<BetweenFactor<VALUE> > {};
\n+
154
\n+
160 template<class VALUE>
\n+
\n+
161 class BetweenConstraint : public BetweenFactor<VALUE> {
\n+
162 public:
\n+
163 typedef boost::shared_ptr<BetweenConstraint<VALUE> > shared_ptr;
\n+
164
\n+
\n+
166 BetweenConstraint(const VALUE& measured, Key key1, Key key2, double mu = 1000.0) :
\n+
167 BetweenFactor<VALUE>(key1, key2, measured,
\n+
168 noiseModel::Constrained::All(traits<VALUE>::GetDimension(measured), std::abs(mu)))
\n+
169 {}
\n+
\n+
170
\n+
171 private:
\n+
172
\n+\n+
175 template<class ARCHIVE>
\n+
176 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
177 ar & boost::serialization::make_nvp("BetweenFactor",
\n+
178 boost::serialization::base_object<BetweenFactor<VALUE> >(*this));
\n+
179 }
\n+
180 }; // \\class BetweenConstraint
\n+
\n+
181
\n+
183 template<class VALUE>
\n+
184 struct traits<BetweenConstraint<VALUE> > : public Testable<BetweenConstraint<VALUE> > {};
\n+
185
\n+
186}
\n+
Base class and basic functions for Lie types.
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n+
Concept check for values that can be used in unit tests.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Lie Group Concept.
Definition Lie.h:260
\n+
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal &noiseModel)
Internal function to fill blocks and set dimensions.
Definition JacobianFactor-inl.h:60
\n-
JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator.
Definition RegularJacobianFactor.h:32
\n-
JacobianFactor for Schur complement that uses Q noise model.
Definition JacobianFactorQ.h:27
\n-
JacobianFactorQ()
Default constructor.
Definition JacobianFactorQ.h:36
\n-
JacobianFactorQ(const KeyVector &keys, const std::vector< MatrixZD, Eigen::aligned_allocator< MatrixZD > > &FBlocks, const Matrix &E, const Matrix3 &P, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Constructor.
Definition JacobianFactorQ.h:53
\n-
JacobianFactorQ(const KeyVector &keys, const SharedDiagonal &model=SharedDiagonal())
Empty constructor with keys.
Definition JacobianFactorQ.h:40
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
A class for a measurement predicted by "between(config[key1],config[key2])".
Definition BetweenFactor.h:40
\n+
BetweenFactor()
default constructor - only use for serialization
Definition BetweenFactor.h:66
\n+
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
assert equality up to a tolerance
Definition BetweenFactor.h:98
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition BetweenFactor.h:79
\n+
boost::shared_ptr< BetweenFactor > shared_ptr
The measurement.
Definition BetweenFactor.h:60
\n+
const VALUE & measured() const
return the measurement
Definition BetweenFactor.h:128
\n+
BetweenFactor(Key key1, Key key2, const VALUE &measured, const SharedNoiseModel &model=nullptr)
Constructor.
Definition BetweenFactor.h:69
\n+
friend class boost::serialization::access
Serialization function.
Definition BetweenFactor.h:136
\n+
Vector evaluateError(const T &p1, const T &p2, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
evaluate error, returns vector of errors size of tangent space
Definition BetweenFactor.h:108
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print with optional string
Definition BetweenFactor.h:87
\n+
Binary between constraint - forces between to a given value This constraint requires the underlying t...
Definition BetweenFactor.h:161
\n+
BetweenConstraint(const VALUE &measured, Key key1, Key key2, double mu=1000.0)
Syntactic sugar for constrained version.
Definition BetweenFactor.h:166
\n+
friend class boost::serialization::access
Serialization function.
Definition BetweenFactor.h:174
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,141 +1,278 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-JacobianFactorQ.h\n+BetweenFactor.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file JacobianFactorQ.h\n-14 * @date Oct 27, 2013\n-15 * @uthor Frank Dellaert\n-16 */\n+16#pragma once\n 17\n-18#pragma once\n+18#include \n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-21\n-22namespace _\bg_\bt_\bs_\ba_\bm {\n-26template\n-_\b2_\b7class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ: public _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n-28\n-29 typedef _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bD_\b> Base;\n-30 typedef Eigen::Matrix MatrixZD;\n-31 typedef std::pair KeyMatrix;\n-32\n-33public:\n-34\n-_\b3_\b6 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ() {\n-37 }\n-38\n-_\b4_\b0 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs, //\n-41 const SharedDiagonal& model = SharedDiagonal()) :\n-42 Base() {\n-43 Matrix zeroMatrix = Matrix::Zero(0, D);\n-44 Vector zeroVector = Vector::Zero(0);\n-45 std::vector QF;\n-46 QF.reserve(_\bk_\be_\by_\bs.size());\n-47 for(const _\bK_\be_\by& key: _\bk_\be_\by_\bs)\n-48 QF.push_back(KeyMatrix(key, zeroMatrix));\n-49 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(QF, zeroVector, model);\n-50 }\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23\n+24#ifdef _WIN32\n+25#define BETWEENFACTOR_VISIBILITY\n+26#else\n+27// This will trigger a LNKxxxx on MSVC, so disable for MSVC build\n+28// Please refer to https://github.com/borglab/gtsam/blob/develop/Using-GTSAM-\n+EXPORT.md\n+29#define BETWEENFACTOR_VISIBILITY GTSAM_EXPORT\n+30#endif\n+31\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+39 template\n+_\b4_\b0 class _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+41\n+42 // Check that VALUE type is a testable Lie group\n+43 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bV_\bA_\bL_\bU_\bE_\b>));\n+44 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\bV_\bA_\bL_\bU_\bE_\b>));\n+45\n+46 public:\n+47\n+48 typedef VALUE T;\n+49\n+50 private:\n 51\n-_\b5_\b3 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n-54 const std::vector >& FBlocks,\n-const Matrix& E, const Matrix3& P,\n-55 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) :\n-56 Base() {\n-57 size_t j = 0, m2 = E.rows(), m = m2 / ZDim;\n-58 // Calculate projector Q\n-59 Matrix Q = Matrix::Identity(m2,m2) - E * P * E.transpose();\n-60 // Calculate pre-computed Jacobian matrices\n-61 // TODO: can we do better ?\n-62 std::vector QF;\n-63 QF.reserve(m);\n-64 // Below, we compute each mZDim*D block A_j = Q_j * F_j = (mZDim*ZDim) *\n-(Zdim*D)\n-65 for (size_t k = 0; k < FBlocks.size(); ++k) {\n-66 _\bK_\be_\by key = _\bk_\be_\by_\bs[k];\n-67 QF.push_back(\n-68 KeyMatrix(key, - Q.block(0, ZDim * j++, m2, ZDim) * FBlocks[k]));\n-69 }\n-70 // Which is then passed to the normal JacobianFactor constructor\n-71 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(QF, - Q * b, model);\n+52 typedef _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bV_\bA_\bL_\bU_\bE_\b> This;\n+53 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b> _\bB_\ba_\bs_\be;\n+54\n+55 VALUE measured_;\n+57 public:\n+58\n+59 // shorthand for a smart pointer to a factor\n+_\b6_\b0 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+61\n+64\n+_\b6_\b6 _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+67\n+_\b6_\b9 _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key1, _\bK_\be_\by key2, const VALUE& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd,\n+70 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr) :\n+71 _\bB_\ba_\bs_\be(model, key1, key2), measured_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd) {\n 72 }\n-73};\n-74// end class JacobianFactorQ\n+73\n 75\n-76// traits\n-_\b7_\b7template struct _\bt_\br_\ba_\bi_\bt_\bs<_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ > :\n-public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n-78 JacobianFactorQ > {\n-79};\n-80\n-81}\n-_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-JacobianFactor class with fixed sized blcoks.\n+76 _\b~_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+77\n+_\b7_\b9 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+80 return boost::static_pointer_cast(\n+81 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }\n+82\n+85\n+_\b8_\b7 void _\bp_\br_\bi_\bn_\bt(\n+88 const std::string& s = \"\",\n+89 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+90 std::cout << s << \"BetweenFactor(\"\n+91 << keyFormatter(this->key1()) << \",\"\n+92 << keyFormatter(this->key2()) << \")\\n\";\n+93 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(measured_, \" measured: \");\n+94 this->noiseModel_->print(\" noise model: \");\n+95 }\n+96\n+_\b9_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol=1e-9) const override\n+{\n+99 const This *e = dynamic_cast (&expected);\n+100 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this-\n+>measured_, e->measured_, tol);\n+101 }\n+102\n+106\n+_\b1_\b0_\b8 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const T& p1, const T& p2, boost::optional H1\n+=\n+109 boost::none, boost::optional H2 = boost::none) const override {\n+110 T hx = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(p1, p2, H1, H2); // h(x)\n+111 // manifold equivalent of h(x)-z -> log(z,h(x))\n+112#ifdef GTSAM_SLOW_BUT_CORRECT_BETWEENFACTOR\n+113 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn Hlocal;\n+114 Vector rval = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured_, hx, boost::none, (H1 || H2) ?\n+&Hlocal : 0);\n+115 if (H1) *H1 = Hlocal * (*H1);\n+116 if (H2) *H2 = Hlocal * (*H2);\n+117 return rval;\n+118#else\n+119 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured_, hx);\n+120#endif\n+121 }\n+122\n+126\n+_\b1_\b2_\b8 const VALUE& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n+129 return measured_;\n+130 }\n+132\n+133 private:\n+134\n+_\b1_\b3_\b6 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+137 template\n+138 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+139 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n+compatibility\n+140 ar & boost::serialization::make_nvp(\"NoiseModelFactor2\",\n+141 boost::serialization::base_object(*this));\n+142 ar & BOOST_SERIALIZATION_NVP(measured_);\n+143 }\n+144\n+145 // Alignment, see https://eigen.tuxfamily.org/dox/\n+group__TopicStructHavingEigenMembers.html\n+146 enum { NeedsToAlign = (sizeof(VALUE) % 16) == 0 };\n+147 public:\n+148 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(NeedsToAlign)\n+149 }; // \\class BetweenFactor\n+150\n+152 template\n+_\b1_\b5_\b3 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+> {};\n+154\n+160 template\n+_\b1_\b6_\b1 class _\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt : public _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n+162 public:\n+163 typedef boost::shared_ptr > shared_ptr;\n+164\n+_\b1_\b6_\b6 _\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt(const VALUE& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, _\bK_\be_\by key1, _\bK_\be_\by key2, double mu =\n+1000.0) :\n+167 _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br(key1, key2, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd,\n+168 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(_\bt_\br_\ba_\bi_\bt_\bs::GetDimension(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd), std::\n+abs(mu)))\n+169 {}\n+170\n+171 private:\n+172\n+_\b1_\b7_\b4 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+175 template\n+176 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+177 ar & boost::serialization::make_nvp(\"BetweenFactor\",\n+178 boost::serialization::base_object<_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bV_\bA_\bL_\bU_\bE_\b> >(*this));\n+179 }\n+180 }; // \\class BetweenConstraint\n+181\n+183 template\n+_\b1_\b8_\b4 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt > : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n+185\n+186}\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:317\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Lie Group Concept.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A testable concept check that should be placed in applicable unit tests and in\n+generic algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs\n-void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal\n-&noiseModel)\n-Internal function to fill blocks and set dimensions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor-inl.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-JacobianFactor with constant sized blocks Provides raw memory access versions\n-of linear operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ\n-JacobianFactor for Schur complement that uses Q noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQ.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ\n-JacobianFactorQ()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQ.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ\n-JacobianFactorQ(const KeyVector &keys, const std::vector< MatrixZD, Eigen::\n-aligned_allocator< MatrixZD > > &FBlocks, const Matrix &E, const Matrix3 &P,\n-const Vector &b, const SharedDiagonal &model=SharedDiagonal())\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+const SharedNoiseModel & noiseModel() const\n+access to the noise model\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A class for a measurement predicted by \"between(config[key1],config[key2])\".\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+BetweenFactor()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n+assert equality up to a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< BetweenFactor > shared_ptr\n+The measurement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const VALUE & measured() const\n+return the measurement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+BetweenFactor(Key key1, Key key2, const VALUE &measured, const SharedNoiseModel\n+&model=nullptr)\n Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQ.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bQ\n-JacobianFactorQ(const KeyVector &keys, const SharedDiagonal\n-&model=SharedDiagonal())\n-Empty constructor with keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorQ.h:40\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const T &p1, const T &p2, boost::optional< Matrix & >\n+H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override\n+evaluate error, returns vector of errors size of tangent space\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print with optional string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n+Binary between constraint - forces between to a given value This constraint\n+requires the underlying t...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:161\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n+BetweenConstraint(const VALUE &measured, Key key1, Key key2, double mu=1000.0)\n+Syntactic sugar for constrained version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:166\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:174\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * J\bJa\bac\bco\bob\bbi\bia\ban\bnF\bFa\bac\bct\bto\bor\brQ\bQ.\b.h\bh\n+ * _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01325.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01325.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/FrobeniusFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/FrobeniusFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,23 +94,38 @@\n
\n \n \n \n \n
\n \n-
FrobeniusFactor.cpp File Reference
\n+
FrobeniusFactor.h File Reference
\n
\n
\n \n

Various factors that minimize some Frobenius norm. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::FrobeniusPrior< Rot >
 FrobeniusPrior calculates the Frobenius norm between a given matrix and an element of SO(3) or SO(4). More...
 
class  gtsam::FrobeniusFactor< Rot >
 FrobeniusFactor calculates the Frobenius norm between rotation matrices. More...
 
class  gtsam::FrobeniusBetweenFactor< Rot >
 FrobeniusBetweenFactor is a BetweenFactor that evaluates the Frobenius norm of the rotation error between measured and predicted (rather than the Logmap of the error). More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n \n \n \n

\n@@ -124,13 +139,13 @@\n
Date
March 2019
\n
Author
Frank Dellaert
\n \n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-FrobeniusFactor.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+FrobeniusFactor.h File Reference\n Various factors that minimize some Frobenius norm. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br_\b<_\b _\bR_\bo_\bt_\b _\b>\n+\u00a0 _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br calculates the Frobenius norm between a given matrix and\n+ an element of SO(3) or SO(4). _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bR_\bo_\bt_\b _\b>\n+\u00a0 _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br calculates the Frobenius norm between rotation\n+ matrices. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bR_\bo_\bt_\b _\b>\n+ _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br is a _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br that evaluates the Frobenius\n+\u00a0 norm of the rotation error between measured and predicted (rather than\n+ the Logmap of the error). _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl (const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n size_t n, bool defaultToUnit=true)\n@@ -21,9 +36,9 @@\n Various factors that minimize some Frobenius norm.\n Date\n March 2019\n Author\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01325.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01325.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,6 @@\n var a01325 = [\n+ [\"gtsam::FrobeniusPrior< Rot >\", \"a04828.html\", \"a04828\"],\n+ [\"gtsam::FrobeniusFactor< Rot >\", \"a04832.html\", \"a04832\"],\n+ [\"gtsam::FrobeniusBetweenFactor< Rot >\", \"a04836.html\", \"a04836\"],\n [\"ConvertNoiseModel\", \"a01325.html#aa43e7fd7c2b86873458a91ddafc506e4\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01328_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01328_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/JacobianFactorSVD.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/RegularImplicitSchurFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,99 +98,587 @@\n
No Matches
\n \n \n \n \n \n
\n-
JacobianFactorSVD.h
\n+
RegularImplicitSchurFactor.h
\n
\n
\n-
1/*
\n-
2 * @file JacobianFactorSVD.h
\n-
3 * @date Oct 27, 2013
\n-
4 * @uthor Frank Dellaert
\n-
5 */
\n-
6
\n-
7#pragma once
\n-\n+Go to the documentation of this file.
1
\n+
8#pragma once
\n
9
\n-
10namespace gtsam {
\n-
28template<size_t D, size_t ZDim>
\n-
\n-\n-
30
\n-
31 typedef RegularJacobianFactor<D> Base;
\n-
32 typedef Eigen::Matrix<double, ZDim, D> MatrixZD; // e.g 2 x 6 with Z=Point2
\n-
33 typedef std::pair<Key, Matrix> KeyMatrix;
\n-
34
\n-
35public:
\n-
36
\n-
\n-\n-
39 }
\n-
\n+\n+\n+\n+
13
\n+
14#include <iosfwd>
\n+
15#include <map>
\n+
16#include <string>
\n+
17#include <vector>
\n+
18
\n+
19namespace gtsam {
\n+
20
\n+
38template<class CAMERA>
\n+
\n+\n
40
\n-
\n-\n-
43 const SharedDiagonal& model = SharedDiagonal())
\n-
44 : Base() {
\n-
45 Matrix zeroMatrix = Matrix::Zero(0, D);
\n-
46 Vector zeroVector = Vector::Zero(0);
\n-
47 std::vector<KeyMatrix> QF;
\n-
48 QF.reserve(keys.size());
\n-
49 for(const Key& key: keys)
\n-
50 QF.push_back(KeyMatrix(key, zeroMatrix));
\n-
51 JacobianFactor::fillTerms(QF, zeroVector, model);
\n-
52 }
\n-
\n+
41public:
\n+\n+
43 typedef boost::shared_ptr<This> shared_ptr;
\n+
44
\n+
45protected:
\n+
46
\n+
47 // This factor is closely related to a CameraSet
\n+
48 typedef CameraSet<CAMERA> Set;
\n+
49
\n+
50 typedef typename CAMERA::Measurement Z;
\n+
51 static const int D = traits<CAMERA>::dimension;
\n+
52 static const int ZDim = traits<Z>::dimension;
\n
53
\n-
\n-\n-
65 const KeyVector& keys,
\n-
66 const std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> >& Fblocks,
\n-
67 const Matrix& Enull, const Vector& b,
\n-
68 const SharedDiagonal& model = SharedDiagonal())
\n-
69 : Base() {
\n-
70 size_t numKeys = Enull.rows() / ZDim;
\n-
71 size_t m2 = ZDim * numKeys - 3; // TODO: is this not just Enull.rows()?
\n-
72 // PLAIN nullptr SPACE TRICK
\n-
73 // Matrix Q = Enull * Enull.transpose();
\n-
74 // for(const KeyMatrixZD& it: Fblocks)
\n-
75 // QF.push_back(KeyMatrix(it.first, Q.block(0, 2 * j++, m2, 2) * it.second));
\n-
76 // JacobianFactor factor(QF, Q * b);
\n-
77 std::vector<KeyMatrix> QF;
\n-
78 QF.reserve(numKeys);
\n-
79 for (size_t k = 0; k < Fblocks.size(); ++k) {
\n-
80 Key key = keys[k];
\n-
81 QF.emplace_back(
\n-
82 key, (Enull.transpose()).block(0, ZDim * k, m2, ZDim) * Fblocks[k]);
\n-
83 }
\n-
84 JacobianFactor::fillTerms(QF, Enull.transpose() * b, model);
\n-
85 }
\n-
\n-
86};
\n+
54 typedef Eigen::Matrix<double, ZDim, D> MatrixZD;
\n+
55 typedef Eigen::Matrix<double, D, D> MatrixDD;
\n+
56 typedef std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> > FBlocks;
\n+
57
\n+
58 FBlocks FBlocks_;
\n+
59 const Matrix PointCovariance_;
\n+
60 const Matrix E_;
\n+
61 const Vector b_;
\n+
62
\n+
63public:
\n+
64
\n+\n+
68
\n+
70
\n+
\n+
80 RegularImplicitSchurFactor(const KeyVector& keys, const FBlocks& Fs,
\n+
81 const Matrix& E, const Matrix& P, const Vector& b)
\n+
82 : GaussianFactor(keys), FBlocks_(Fs), PointCovariance_(P), E_(E), b_(b) {}
\n+
\n+
83
\n+
\n+\n+
86 }
\n
\n
87
\n-
88}
\n-
JacobianFactor class with fixed sized blcoks.
\n+
88 const FBlocks& Fs() const {
\n+
89 return FBlocks_;
\n+
90 }
\n+
91
\n+
92 const Matrix& E() const {
\n+
93 return E_;
\n+
94 }
\n+
95
\n+
96 const Vector& b() const {
\n+
97 return b_;
\n+
98 }
\n+
99
\n+
100 const Matrix& getPointCovariance() const {
\n+
101 return PointCovariance_;
\n+
102 }
\n+
103
\n+
\n+
105 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
106 DefaultKeyFormatter) const override {
\n+
107 std::cout << " RegularImplicitSchurFactor " << std::endl;
\n+
108 Factor::print(s);
\n+
109 for (size_t pos = 0; pos < size(); ++pos) {
\n+
110 std::cout << "Fblock:\\n" << FBlocks_[pos] << std::endl;
\n+
111 }
\n+
112 std::cout << "PointCovariance:\\n" << PointCovariance_ << std::endl;
\n+
113 std::cout << "E:\\n" << E_ << std::endl;
\n+
114 std::cout << "b:\\n" << b_.transpose() << std::endl;
\n+
115 }
\n+
\n+
116
\n+
\n+
118 bool equals(const GaussianFactor& lf, double tol) const override {
\n+
119 const This* f = dynamic_cast<const This*>(&lf);
\n+
120 if (!f)
\n+
121 return false;
\n+
122 for (size_t k = 0; k < FBlocks_.size(); ++k) {
\n+
123 if (keys_[k] != f->keys_[k])
\n+
124 return false;
\n+
125 if (!equal_with_abs_tol(FBlocks_[k], f->FBlocks_[k], tol))
\n+
126 return false;
\n+
127 }
\n+\n+
129 && equal_with_abs_tol(E_, f->E_, tol)
\n+
130 && equal_with_abs_tol(b_, f->b_, tol);
\n+
131 }
\n+
\n+
132
\n+
\n+
134 DenseIndex getDim(const_iterator variable) const override {
\n+
135 return D;
\n+
136 }
\n+
\n+
137
\n+
\n+\n+
139 SymmetricBlockMatrix* info) const override {
\n+
140 throw std::runtime_error(
\n+
141 "RegularImplicitSchurFactor::updateHessian non implemented");
\n+
142 }
\n+
\n+
\n+
143 Matrix augmentedJacobian() const override {
\n+
144 throw std::runtime_error(
\n+
145 "RegularImplicitSchurFactor::augmentedJacobian non implemented");
\n+
146 return Matrix();
\n+
147 }
\n+
\n+
\n+
148 std::pair<Matrix, Vector> jacobian() const override {
\n+
149 throw std::runtime_error(
\n+
150 "RegularImplicitSchurFactor::jacobian non implemented");
\n+
151 return std::make_pair(Matrix(), Vector());
\n+
152 }
\n+
\n+
153
\n+
\n+
155 Matrix augmentedInformation() const override {
\n+
156 // Do the Schur complement
\n+
157 SymmetricBlockMatrix augmentedHessian =
\n+
158 Set::SchurComplement(FBlocks_, E_, b_);
\n+
159 return augmentedHessian.selfadjointView();
\n+
160 }
\n+
\n+
161
\n+
\n+
163 Matrix information() const override {
\n+
164 Matrix augmented = augmentedInformation();
\n+
165 int m = this->keys_.size();
\n+
166 size_t M = D * m;
\n+
167 return augmented.block(0, 0, M, M);
\n+
168 }
\n+
\n+
169
\n+\n+
172
\n+
\n+
174 void hessianDiagonalAdd(VectorValues &d) const override {
\n+
175 // diag(Hessian) = diag(F' * (I - E * PointCov * E') * F);
\n+
176 for (size_t k = 0; k < size(); ++k) { // for each camera
\n+
177 Key j = keys_[k];
\n+
178
\n+
179 // Calculate Fj'*Ej for the current camera (observing a single point)
\n+
180 // D x 3 = (D x ZDim) * (ZDim x 3)
\n+
181 const MatrixZD& Fj = FBlocks_[k];
\n+
182 Eigen::Matrix<double, D, 3> FtE = Fj.transpose()
\n+
183 * E_.block<ZDim, 3>(ZDim * k, 0);
\n+
184
\n+
185 Eigen::Matrix<double, D, 1> dj;
\n+
186 for (int k = 0; k < D; ++k) { // for each diagonal element of the camera hessian
\n+
187 // Vector column_k_Fj = Fj.col(k);
\n+
188 dj(k) = Fj.col(k).squaredNorm(); // dot(column_k_Fj, column_k_Fj);
\n+
189 // Vector column_k_FtE = FtE.row(k);
\n+
190 // (1 x 1) = (1 x 3) * (3 * 3) * (3 x 1)
\n+
191 dj(k) -= FtE.row(k) * PointCovariance_ * FtE.row(k).transpose();
\n+
192 }
\n+
193
\n+
194 auto result = d.emplace(j, dj);
\n+
195 if(!result.second) {
\n+
196 result.first->second += dj;
\n+
197 }
\n+
198 }
\n+
199 }
\n+
\n+
200
\n+
\n+
205 void hessianDiagonal(double* d) const override {
\n+
206 // diag(Hessian) = diag(F' * (I - E * PointCov * E') * F);
\n+
207 // Use eigen magic to access raw memory
\n+
208 typedef Eigen::Matrix<double, D, 1> DVector;
\n+
209 typedef Eigen::Map<DVector> DMap;
\n+
210
\n+
211 for (size_t pos = 0; pos < size(); ++pos) { // for each camera in the factor
\n+
212 Key j = keys_[pos];
\n+
213
\n+
214 // Calculate Fj'*Ej for the current camera (observing a single point)
\n+
215 // D x 3 = (D x ZDim) * (ZDim x 3)
\n+
216 const MatrixZD& Fj = FBlocks_[pos];
\n+
217 Eigen::Matrix<double, D, 3> FtE = Fj.transpose()
\n+
218 * E_.block<ZDim, 3>(ZDim * pos, 0);
\n+
219
\n+
220 DVector dj;
\n+
221 for (int k = 0; k < D; ++k) { // for each diagonal element of the camera hessian
\n+
222 dj(k) = Fj.col(k).squaredNorm();
\n+
223 // (1 x 1) = (1 x 3) * (3 * 3) * (3 x 1)
\n+
224 dj(k) -= FtE.row(k) * PointCovariance_ * FtE.row(k).transpose();
\n+
225 }
\n+
226 DMap(d + D * j) += dj;
\n+
227 }
\n+
228 }
\n+
\n+
229
\n+
\n+
231 std::map<Key, Matrix> hessianBlockDiagonal() const override {
\n+
232 std::map<Key, Matrix> blocks;
\n+
233 // F'*(I - E*P*E')*F
\n+
234 for (size_t pos = 0; pos < size(); ++pos) {
\n+
235 Key j = keys_[pos];
\n+
236 // F'*F - F'*E*P*E'*F e.g. (9*2)*(2*9) - (9*2)*(2*3)*(3*3)*(3*2)*(2*9)
\n+
237 const MatrixZD& Fj = FBlocks_[pos];
\n+
238 // Eigen::Matrix<double, D, 3> FtE = Fj.transpose()
\n+
239 // * E_.block<ZDim, 3>(ZDim * pos, 0);
\n+
240 // blocks[j] = Fj.transpose() * Fj
\n+
241 // - FtE * PointCovariance_ * FtE.transpose();
\n+
242
\n+
243 const Matrix23& Ej = E_.block<ZDim, 3>(ZDim * pos, 0);
\n+
244 blocks[j] = Fj.transpose()
\n+
245 * (Fj - Ej * PointCovariance_ * Ej.transpose() * Fj);
\n+
246
\n+
247 // F'*(I - E*P*E')*F, TODO: this should work, but it does not :-(
\n+
248 // static const Eigen::Matrix<double, ZDim, ZDim> I2 = eye(ZDim);
\n+
249 // Matrix2 Q = //
\n+
250 // I2 - E_.block<ZDim, 3>(ZDim * pos, 0) * PointCovariance_ * E_.block<ZDim, 3>(ZDim * pos, 0).transpose();
\n+
251 // blocks[j] = Fj.transpose() * Q * Fj;
\n+
252 }
\n+
253 return blocks;
\n+
254 }
\n+
\n+
255
\n+
\n+\n+
257 return boost::make_shared<RegularImplicitSchurFactor<CAMERA> >(keys_,
\n+\n+
259 throw std::runtime_error(
\n+
260 "RegularImplicitSchurFactor::clone non implemented");
\n+
261 }
\n+
\n+
262
\n+
\n+\n+
264 return boost::make_shared<RegularImplicitSchurFactor<CAMERA> >(keys_,
\n+\n+
266 throw std::runtime_error(
\n+
267 "RegularImplicitSchurFactor::negate non implemented");
\n+
268 }
\n+
\n+
269
\n+
270 // Raw Vector version of y += F'*alpha*(I - E*P*E')*F*x, for testing
\n+
271 static
\n+
272 void multiplyHessianAdd(const Matrix& F, const Matrix& E,
\n+
273 const Matrix& PointCovariance, double alpha, const Vector& x, Vector& y) {
\n+
274 Vector e1 = F * x;
\n+
275 Vector d1 = E.transpose() * e1;
\n+
276 Vector d2 = PointCovariance * d1;
\n+
277 Vector e2 = E * d2;
\n+
278 Vector e3 = alpha * (e1 - e2);
\n+
279 y += F.transpose() * e3;
\n+
280 }
\n+
281
\n+
282 typedef std::vector<Vector2, Eigen::aligned_allocator<Vector2>> Error2s;
\n+
283
\n+
\n+
287 void projectError2(const Error2s& e1, Error2s& e2) const {
\n+
288
\n+
289 // d1 = E.transpose() * (e1-ZDim*b) = (3*2m)*2m
\n+
290 Vector3 d1;
\n+
291 d1.setZero();
\n+
292 for (size_t k = 0; k < size(); k++)
\n+
293 d1 += E_.block<ZDim, 3>(ZDim * k, 0).transpose()
\n+
294 * (e1[k] - ZDim * b_.segment<ZDim>(k * ZDim));
\n+
295
\n+
296 // d2 = E.transpose() * e1 = (3*2m)*2m
\n+
297 Vector3 d2 = PointCovariance_ * d1;
\n+
298
\n+
299 // e3 = alpha*(e1 - E*d2) = 1*[2m-(2m*3)*3]
\n+
300 for (size_t k = 0; k < size(); k++)
\n+
301 e2[k] = e1[k] - ZDim * b_.segment<ZDim>(k * ZDim)
\n+
302 - E_.block<ZDim, 3>(ZDim * k, 0) * d2;
\n+
303 }
\n+
\n+
304
\n+
305 /*
\n+
306 * This definition matches the linearized error in the Hessian Factor:
\n+
307 * LinError(x) = x'*H*x - 2*x'*eta + f
\n+
308 * with:
\n+
309 * H = F' * (I-E'*P*E) * F = F' * Q * F
\n+
310 * eta = F' * (I-E'*P*E) * b = F' * Q * b
\n+
311 * f = nonlinear error
\n+
312 * (x'*H*x - 2*x'*eta + f) = x'*F'*Q*F*x - 2*x'*F'*Q *b + f = x'*F'*Q*(F*x - 2*b) + f
\n+
313 */
\n+
314 double error(const VectorValues& x) const override {
\n+
315
\n+
316 // resize does not do malloc if correct size
\n+
317 e1.resize(size());
\n+
318 e2.resize(size());
\n+
319
\n+
320 // e1 = F * x - b = (2m*dm)*dm
\n+
321 for (size_t k = 0; k < size(); ++k)
\n+
322 e1[k] = FBlocks_[k] * x.at(keys_[k]);
\n+
323 projectError2(e1, e2);
\n+
324
\n+
325 double result = 0;
\n+
326 for (size_t k = 0; k < size(); ++k)
\n+
327 result += dot(e1[k], e2[k]);
\n+
328
\n+
329 double f = b_.squaredNorm();
\n+
330 return 0.5 * (result + f);
\n+
331 }
\n+
332
\n+
333 // needed to be GaussianFactor - (I - E*P*E')*(F*x - b)
\n+
334 // This is wrong and does not match the definition in Hessian,
\n+
335 // but it matches the definition of the Jacobian factor (JF)
\n+
336 double errorJF(const VectorValues& x) const {
\n+
337
\n+
338 // resize does not do malloc if correct size
\n+
339 e1.resize(size());
\n+
340 e2.resize(size());
\n+
341
\n+
342 // e1 = F * x - b = (2m*dm)*dm
\n+
343 for (size_t k = 0; k < size(); ++k)
\n+
344 e1[k] = FBlocks_[k] * x.at(keys_[k]) - b_.segment<ZDim>(k * ZDim);
\n+
345 projectError(e1, e2);
\n+
346
\n+
347 double result = 0;
\n+
348 for (size_t k = 0; k < size(); ++k)
\n+
349 result += dot(e2[k], e2[k]);
\n+
350
\n+
351 // std::cout << "implicitFactor::error result " << result << std::endl;
\n+
352 return 0.5 * result;
\n+
353 }
\n+
\n+
357 void projectError(const Error2s& e1, Error2s& e2) const {
\n+
358
\n+
359 // d1 = E.transpose() * e1 = (3*2m)*2m
\n+
360 Vector3 d1;
\n+
361 d1.setZero();
\n+
362 for (size_t k = 0; k < size(); k++)
\n+
363 d1 += E_.block<ZDim, 3>(ZDim * k, 0).transpose() * e1[k];
\n+
364
\n+
365 // d2 = E.transpose() * e1 = (3*2m)*2m
\n+
366 Vector3 d2 = PointCovariance_ * d1;
\n+
367
\n+
368 // e3 = alpha*(e1 - E*d2) = 1*[2m-(2m*3)*3]
\n+
369 for (size_t k = 0; k < size(); k++)
\n+
370 e2[k] = e1[k] - E_.block<ZDim, 3>(ZDim * k, 0) * d2;
\n+
371 }
\n+
\n+
372
\n+
374 mutable Error2s e1, e2;
\n+
375
\n+
\n+
380 void multiplyHessianAdd(double alpha, const double* x, double* y) const {
\n+
381
\n+
382 // Use eigen magic to access raw memory
\n+
383 typedef Eigen::Matrix<double, D, 1> DVector;
\n+
384 typedef Eigen::Map<DVector> DMap;
\n+
385 typedef Eigen::Map<const DVector> ConstDMap;
\n+
386
\n+
387 // resize does not do malloc if correct size
\n+
388 e1.resize(size());
\n+
389 e2.resize(size());
\n+
390
\n+
391 // e1 = F * x = (2m*dm)*dm
\n+
392 for (size_t k = 0; k < size(); ++k) {
\n+
393 Key key = keys_[k];
\n+
394 e1[k] = FBlocks_[k] * ConstDMap(x + D * key);
\n+
395 }
\n+
396
\n+
397 projectError(e1, e2);
\n+
398
\n+
399 // y += F.transpose()*e2 = (2d*2m)*2m
\n+
400 for (size_t k = 0; k < size(); ++k) {
\n+
401 Key key = keys_[k];
\n+
402 DMap(y + D * key) += FBlocks_[k].transpose() * alpha * e2[k];
\n+
403 }
\n+
404 }
\n+
\n+
405
\n+
406 void multiplyHessianAdd(double alpha, const double* x, double* y,
\n+
407 std::vector<size_t> keys) const {
\n+
408 }
\n+
409
\n+
\n+
413 void multiplyHessianAdd(double alpha, const VectorValues& x,
\n+
414 VectorValues& y) const override {
\n+
415
\n+
416 // resize does not do malloc if correct size
\n+
417 e1.resize(size());
\n+
418 e2.resize(size());
\n+
419
\n+
420 // e1 = F * x = (2m*dm)*dm
\n+
421 for (size_t k = 0; k < size(); ++k)
\n+
422 e1[k] = FBlocks_[k] * x.at(keys_[k]);
\n+
423
\n+
424 projectError(e1, e2);
\n+
425
\n+
426 // y += F.transpose()*e2 = (2d*2m)*2m
\n+
427 for (size_t k = 0; k < size(); ++k) {
\n+
428 Key key = keys_[k];
\n+
429 static const Vector empty;
\n+
430 std::pair<VectorValues::iterator, bool> it = y.tryInsert(key, empty);
\n+
431 Vector& yi = it.first->second;
\n+
432 // Create the value as a zero vector if it does not exist.
\n+
433 if (it.second)
\n+
434 yi = Vector::Zero(FBlocks_[k].cols());
\n+
435 yi += FBlocks_[k].transpose() * alpha * e2[k];
\n+
436 }
\n+
437 }
\n+
\n+
438
\n+
\n+
442 void multiplyHessianDummy(double alpha, const VectorValues& x,
\n+
443 VectorValues& y) const {
\n+
444
\n+
445 for (size_t k = 0; k < size(); ++k) {
\n+
446 static const Vector empty;
\n+
447 Key key = keys_[k];
\n+
448 std::pair<VectorValues::iterator, bool> it = y.tryInsert(key, empty);
\n+
449 Vector& yi = it.first->second;
\n+
450 yi = x.at(key);
\n+
451 }
\n+
452 }
\n+
\n+
453
\n+
\n+
457 VectorValues gradientAtZero() const override {
\n+
458 // calculate Q*b
\n+
459 e1.resize(size());
\n+
460 e2.resize(size());
\n+
461 for (size_t k = 0; k < size(); k++)
\n+
462 e1[k] = b_.segment<ZDim>(ZDim * k);
\n+
463 projectError(e1, e2);
\n+
464
\n+
465 // g = F.transpose()*e2
\n+
466 VectorValues g;
\n+
467 for (size_t k = 0; k < size(); ++k) {
\n+
468 Key key = keys_[k];
\n+
469 g.insert(key, -FBlocks_[k].transpose() * e2[k]);
\n+
470 }
\n+
471
\n+
472 // return it
\n+
473 return g;
\n+
474 }
\n+
\n+
475
\n+
\n+
479 void gradientAtZero(double* d) const override {
\n+
480
\n+
481 // Use eigen magic to access raw memory
\n+
482 typedef Eigen::Matrix<double, D, 1> DVector;
\n+
483 typedef Eigen::Map<DVector> DMap;
\n+
484
\n+
485 // calculate Q*b
\n+
486 e1.resize(size());
\n+
487 e2.resize(size());
\n+
488 for (size_t k = 0; k < size(); k++)
\n+
489 e1[k] = b_.segment<ZDim>(ZDim * k);
\n+
490 projectError(e1, e2);
\n+
491
\n+
492 for (size_t k = 0; k < size(); ++k) { // for each camera in the factor
\n+
493 Key j = keys_[k];
\n+
494 DMap(d + D * j) += -FBlocks_[k].transpose() * e2[k];
\n+
495 }
\n+
496 }
\n+
\n+
497
\n+
\n+
499 Vector gradient(Key key, const VectorValues& x) const override {
\n+
500 throw std::runtime_error(
\n+
501 "gradient for RegularImplicitSchurFactor is not implemented yet");
\n+
502 }
\n+
\n+
503
\n+
504};
\n+
\n+
505// end class RegularImplicitSchurFactor
\n+
506
\n+
507template<class CAMERA>
\n+\n+
509
\n+
510template<class CAMERA>
\n+\n+
512
\n+
513// traits
\n+
\n+
514template<class CAMERA> struct traits<RegularImplicitSchurFactor<CAMERA> > : public Testable<
\n+
515 RegularImplicitSchurFactor<CAMERA> > {
\n+
516};
\n+
\n+
517
\n+
518}
\n+
519
\n+
Base class to create smart factors on poses or cameras.
\n+\n+
Factor Graph Values.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n+
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j).
Definition SymmetricBlockMatrix.h:156
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal &noiseModel)
Internal function to fill blocks and set dimensions.
Definition JacobianFactor-inl.h:60
\n-
JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator.
Definition RegularJacobianFactor.h:32
\n-
JacobianFactor for Schur complement that uses the "Nullspace Trick" by Mourikis et al.
Definition JacobianFactorSVD.h:29
\n-
JacobianFactorSVD()
Default constructor.
Definition JacobianFactorSVD.h:38
\n-
JacobianFactorSVD(const KeyVector &keys, const std::vector< MatrixZD, Eigen::aligned_allocator< MatrixZD > > &Fblocks, const Matrix &Enull, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Construct a new JacobianFactorSVD object, createing a reduced-rank Jacobian factor on the CameraSet.
Definition JacobianFactorSVD.h:64
\n-
JacobianFactorSVD(const KeyVector &keys, const SharedDiagonal &model=SharedDiagonal())
Empty constructor with keys.
Definition JacobianFactorSVD.h:42
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
bool empty() const
Whether the factor is empty (involves zero variables).
Definition Factor.h:128
\n+
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n+
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n+
size_t size() const
Definition Factor.h:157
\n+
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n+
VectorValues hessianDiagonal() const
Return the diagonal of the Hessian for this factor.
Definition GaussianFactor.cpp:35
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
iterator insert(const std::pair< Key, Vector > &key_value)
Insert a vector value with key j.
Definition VectorValues.cpp:91
\n+
std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)
Emplace a vector value with key j.
Definition VectorValues.h:185
\n+
Vector & at(Key j)
Read/write access to the vector value with key j, throws std::out_of_range if j does not exist,...
Definition VectorValues.h:139
\n+
std::pair< iterator, bool > tryInsert(Key j, const Vector &value)
insert that mimics the STL map insert - if the value already exists, the map is not modified and an i...
Definition VectorValues.h:209
\n+
RegularImplicitSchurFactor.
Definition RegularImplicitSchurFactor.h:39
\n+
const Matrix E_
The 2m*3 E Jacobian with respect to the point.
Definition RegularImplicitSchurFactor.h:60
\n+
void projectError(const Error2s &e1, Error2s &e2) const
Calculate corrected error Q*e = (I - E*P*E')*e.
Definition RegularImplicitSchurFactor.h:357
\n+
GaussianFactor::shared_ptr clone() const override
Clone a factor (make a deep copy)
Definition RegularImplicitSchurFactor.h:256
\n+
void hessianDiagonalAdd(VectorValues &d) const override
Add the diagonal of the Hessian for this factor to existing VectorValues.
Definition RegularImplicitSchurFactor.h:174
\n+
RegularImplicitSchurFactor(const KeyVector &keys, const FBlocks &Fs, const Matrix &E, const Matrix &P, const Vector &b)
Construct from blocks of F, E, inv(E'*E), and RHS vector b.
Definition RegularImplicitSchurFactor.h:80
\n+
RegularImplicitSchurFactor()
Constructor.
Definition RegularImplicitSchurFactor.h:66
\n+
const Vector b_
2m-dimensional RHS vector
Definition RegularImplicitSchurFactor.h:61
\n+
std::pair< Matrix, Vector > jacobian() const override
Return the dense Jacobian and right-hand-side , with the noise models baked into A and b.
Definition RegularImplicitSchurFactor.h:148
\n+
Eigen::Matrix< double, D, D > MatrixDD
camera Hessian
Definition RegularImplicitSchurFactor.h:55
\n+
void gradientAtZero(double *d) const override
Calculate gradient, which is -F'Q*b, see paper - RAW MEMORY ACCESS.
Definition RegularImplicitSchurFactor.h:479
\n+
static const int ZDim
Measurement dimension.
Definition RegularImplicitSchurFactor.h:52
\n+
Matrix information() const override
Compute full information matrix
Definition RegularImplicitSchurFactor.h:163
\n+
~RegularImplicitSchurFactor() override
Destructor.
Definition RegularImplicitSchurFactor.h:85
\n+
void updateHessian(const KeyVector &keys, SymmetricBlockMatrix *info) const override
Update an information matrix by adding the information corresponding to this factor (used internally ...
Definition RegularImplicitSchurFactor.h:138
\n+
FBlocks FBlocks_
All ZDim*D F blocks (one for each camera)
Definition RegularImplicitSchurFactor.h:58
\n+
VectorValues gradientAtZero() const override
Calculate gradient, which is -F'Q*b, see paper.
Definition RegularImplicitSchurFactor.h:457
\n+
Eigen::Matrix< double, ZDim, D > MatrixZD
type of an F block
Definition RegularImplicitSchurFactor.h:54
\n+
const Matrix PointCovariance_
the 3*3 matrix P = inv(E'E) (2*2 if degenerate)
Definition RegularImplicitSchurFactor.h:59
\n+
void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const override
Hessian-vector multiply, i.e.
Definition RegularImplicitSchurFactor.h:413
\n+
std::map< Key, Matrix > hessianBlockDiagonal() const override
Return the block diagonal of the Hessian for this factor.
Definition RegularImplicitSchurFactor.h:231
\n+
Matrix augmentedInformation() const override
Compute full augmented information matrix
Definition RegularImplicitSchurFactor.h:155
\n+
GaussianFactor::shared_ptr negate() const override
Construct the corresponding anti-factor to negate information stored stored in this factor.
Definition RegularImplicitSchurFactor.h:263
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition RegularImplicitSchurFactor.h:43
\n+
Error2s e1
Scratch space for multiplyHessianAdd.
Definition RegularImplicitSchurFactor.h:374
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition RegularImplicitSchurFactor.h:105
\n+
DenseIndex getDim(const_iterator variable) const override
Degrees of freedom of camera.
Definition RegularImplicitSchurFactor.h:134
\n+
bool equals(const GaussianFactor &lf, double tol) const override
equals
Definition RegularImplicitSchurFactor.h:118
\n+
Matrix augmentedJacobian() const override
Return a dense Jacobian matrix, augmented with b with the noise models baked into A and b.
Definition RegularImplicitSchurFactor.h:143
\n+
RegularImplicitSchurFactor This
Typedef to this class.
Definition RegularImplicitSchurFactor.h:42
\n+
static const int D
Camera dimension.
Definition RegularImplicitSchurFactor.h:51
\n+
void projectError2(const Error2s &e1, Error2s &e2) const
Calculate corrected error Q*(e-ZDim*b) = (I - E*P*E')*(e-ZDim*b)
Definition RegularImplicitSchurFactor.h:287
\n+
void multiplyHessianAdd(double alpha, const double *x, double *y) const
double* Hessian-vector multiply, i.e.
Definition RegularImplicitSchurFactor.h:380
\n+
void hessianDiagonal(double *d) const override
add the contribution of this factor to the diagonal of the hessian d(output) = d(input) + deltaHessia...
Definition RegularImplicitSchurFactor.h:205
\n+
void multiplyHessianDummy(double alpha, const VectorValues &x, VectorValues &y) const
Dummy version to measure overhead of key access.
Definition RegularImplicitSchurFactor.h:442
\n+
Vector gradient(Key key, const VectorValues &x) const override
Gradient wrt a key at any values.
Definition RegularImplicitSchurFactor.h:499
\n+
The Factor::error simply extracts the.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,116 +1,729 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-JacobianFactorSVD.h\n-1/*\n-2 * @file JacobianFactorSVD.h\n-3 * @date Oct 27, 2013\n-4 * @uthor Frank Dellaert\n-5 */\n-6\n-7#pragma once\n-8#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+RegularImplicitSchurFactor.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+1\n+8#pragma once\n 9\n-10namespace _\bg_\bt_\bs_\ba_\bm {\n-28template\n-_\b2_\b9class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD: public _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n-30\n-31 typedef _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bD_\b> Base;\n-32 typedef Eigen::Matrix MatrixZD; // e.g 2 x 6 with Z=Point2\n-33 typedef std::pair KeyMatrix;\n-34\n-35public:\n-36\n-_\b3_\b8 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD() {\n-39 }\n+10#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh>\n+11#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+13\n+14#include \n+15#include \n+16#include \n+17#include \n+18\n+19namespace _\bg_\bt_\bs_\ba_\bm {\n+20\n+38template\n+_\b3_\b9class _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br: public _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n 40\n-_\b4_\b2 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n-43 const SharedDiagonal& model = SharedDiagonal())\n-44 : Base() {\n-45 Matrix zeroMatrix = Matrix::Zero(0, D);\n-46 Vector zeroVector = Vector::Zero(0);\n-47 std::vector QF;\n-48 QF.reserve(_\bk_\be_\by_\bs.size());\n-49 for(const _\bK_\be_\by& key: _\bk_\be_\by_\bs)\n-50 QF.push_back(KeyMatrix(key, zeroMatrix));\n-51 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(QF, zeroVector, model);\n-52 }\n+41public:\n+_\b4_\b2 typedef _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+_\b4_\b3 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+44\n+45protected:\n+46\n+47 // This factor is closely related to a CameraSet\n+48 typedef _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> Set;\n+49\n+50 typedef typename CAMERA::Measurement Z;\n+_\b5_\b1 static const int _\bD = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+_\b5_\b2 static const int _\bZ_\bD_\bi_\bm = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bZ_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n 53\n-_\b6_\b4 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD(\n-65 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n-66 const std::vector >& Fblocks,\n-67 const Matrix& Enull, const Vector& b,\n-68 const SharedDiagonal& model = SharedDiagonal())\n-69 : Base() {\n-70 size_t numKeys = Enull.rows() / ZDim;\n-71 size_t m2 = ZDim * numKeys - 3; // TODO: is this not just Enull.rows()?\n-72 // PLAIN nullptr SPACE TRICK\n-73 // Matrix Q = Enull * Enull.transpose();\n-74 // for(const KeyMatrixZD& it: Fblocks)\n-75 // QF.push_back(KeyMatrix(it.first, Q.block(0, 2 * j++, m2, 2) *\n-it.second));\n-76 // JacobianFactor factor(QF, Q * b);\n-77 std::vector QF;\n-78 QF.reserve(numKeys);\n-79 for (size_t k = 0; k < Fblocks.size(); ++k) {\n-80 _\bK_\be_\by key = _\bk_\be_\by_\bs[k];\n-81 QF.emplace_back(\n-82 key, (Enull.transpose()).block(0, ZDim * k, m2, ZDim) * Fblocks[k]);\n-83 }\n-84 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(QF, Enull.transpose() * b, model);\n-85 }\n-86};\n+_\b5_\b4 typedef Eigen::Matrix _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD;\n+_\b5_\b5 typedef Eigen::Matrix _\bM_\ba_\bt_\br_\bi_\bx_\bD_\bD;\n+56 typedef std::vector > FBlocks;\n+57\n+_\b5_\b8 FBlocks _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_;\n+_\b5_\b9 const Matrix _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_;\n+_\b6_\b0 const Matrix _\bE_\b_;\n+_\b6_\b1 const Vector _\bb_\b_;\n+62\n+63public:\n+64\n+_\b6_\b6 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br() {\n+67 }\n+68\n+70\n+_\b8_\b0 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs, const FBlocks& Fs,\n+81 const Matrix& E, const Matrix& P, const Vector& b)\n+82 : _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bk_\be_\by_\bs), _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_(Fs), _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_(P), _\bE_\b_(E), _\bb_\b_(b) {}\n+83\n+_\b8_\b5 _\b~_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br() override {\n+86 }\n 87\n-88}\n-_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-JacobianFactor class with fixed sized blcoks.\n+88 const FBlocks& Fs() const {\n+89 return _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_;\n+90 }\n+91\n+92 const Matrix& E() const {\n+93 return _\bE_\b_;\n+94 }\n+95\n+96 const Vector& b() const {\n+97 return _\bb_\b_;\n+98 }\n+99\n+100 const Matrix& getPointCovariance() const {\n+101 return _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_;\n+102 }\n+103\n+_\b1_\b0_\b5 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+106 DefaultKeyFormatter) const override {\n+107 std::cout << \" RegularImplicitSchurFactor \" << std::endl;\n+108 _\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n+109 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos) {\n+110 std::cout << \"Fblock:\\n\" << _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[pos] << std::endl;\n+111 }\n+112 std::cout << \"PointCovariance:\\n\" << _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ << std::endl;\n+113 std::cout << \"E:\\n\" << _\bE_\b_ << std::endl;\n+114 std::cout << \"b:\\n\" << _\bb_\b_.transpose() << std::endl;\n+115 }\n+116\n+_\b1_\b1_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& lf, double tol) const override {\n+119 const _\bT_\bh_\bi_\bs* f = dynamic_cast(&lf);\n+120 if (!f)\n+121 return false;\n+122 for (size_t k = 0; k < _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_.size(); ++k) {\n+123 if (_\bk_\be_\by_\bs_\b_[k] != f->_\bk_\be_\by_\bs_\b_[k])\n+124 return false;\n+125 if (!_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k], f->_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k], tol))\n+126 return false;\n+127 }\n+128 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_, f->_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_, tol)\n+129 && _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(_\bE_\b_, f->_\bE_\b_, tol)\n+130 && _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(_\bb_\b_, f->_\bb_\b_, tol);\n+131 }\n+132\n+_\b1_\b3_\b4 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bD_\bi_\bm(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) const override {\n+135 return _\bD;\n+136 }\n+137\n+_\b1_\b3_\b8 void _\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n+139 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx* info) const override {\n+140 throw std::runtime_error(\n+141 \"RegularImplicitSchurFactor::updateHessian non implemented\");\n+142 }\n+_\b1_\b4_\b3 Matrix _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() const override {\n+144 throw std::runtime_error(\n+145 \"RegularImplicitSchurFactor::augmentedJacobian non implemented\");\n+146 return Matrix();\n+147 }\n+_\b1_\b4_\b8 std::pair _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn() const override {\n+149 throw std::runtime_error(\n+150 \"RegularImplicitSchurFactor::jacobian non implemented\");\n+151 return std::make_pair(Matrix(), Vector());\n+152 }\n+153\n+_\b1_\b5_\b5 Matrix _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn() const override {\n+156 // Do the Schur complement\n+157 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessian =\n+158 Set::SchurComplement(_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_, _\bE_\b_, _\bb_\b_);\n+159 return augmentedHessian._\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw();\n+160 }\n+161\n+_\b1_\b6_\b3 Matrix _\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn() const override {\n+164 Matrix augmented = _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn();\n+165 int m = this->_\bk_\be_\by_\bs_\b_.size();\n+166 size_t M = _\bD * m;\n+167 return augmented.block(0, 0, M, M);\n+168 }\n+169\n+171 using _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl;\n+172\n+_\b1_\b7_\b4 void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bA_\bd_\bd(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &d) const override {\n+175 // diag(Hessian) = diag(F' * (I - E * PointCov * E') * F);\n+176 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) { // for each camera\n+177 _\bK_\be_\by j = _\bk_\be_\by_\bs_\b_[k];\n+178\n+179 // Calculate Fj'*Ej for the current camera (observing a single point)\n+180 // D x 3 = (D x ZDim) * (ZDim x 3)\n+181 const _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD& Fj = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k];\n+182 Eigen::Matrix FtE = Fj.transpose()\n+183 * _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * k, 0);\n+184\n+185 Eigen::Matrix dj;\n+186 for (int k = 0; k < _\bD; ++k) { // for each diagonal element of the camera\n+hessian\n+187 // Vector column_k_Fj = Fj.col(k);\n+188 dj(k) = Fj.col(k).squaredNorm(); // dot(column_k_Fj, column_k_Fj);\n+189 // Vector column_k_FtE = FtE.row(k);\n+190 // (1 x 1) = (1 x 3) * (3 * 3) * (3 x 1)\n+191 dj(k) -= FtE.row(k) * _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ * FtE.row(k).transpose();\n+192 }\n+193\n+194 auto result = d._\be_\bm_\bp_\bl_\ba_\bc_\be(j, dj);\n+195 if(!result.second) {\n+196 result.first->second += dj;\n+197 }\n+198 }\n+199 }\n+200\n+_\b2_\b0_\b5 void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(double* d) const override {\n+206 // diag(Hessian) = diag(F' * (I - E * PointCov * E') * F);\n+207 // Use eigen magic to access raw memory\n+208 typedef Eigen::Matrix DVector;\n+209 typedef Eigen::Map DMap;\n+210\n+211 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos) { // for each camera in the\n+factor\n+212 _\bK_\be_\by j = _\bk_\be_\by_\bs_\b_[pos];\n+213\n+214 // Calculate Fj'*Ej for the current camera (observing a single point)\n+215 // D x 3 = (D x ZDim) * (ZDim x 3)\n+216 const _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD& Fj = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[pos];\n+217 Eigen::Matrix FtE = Fj.transpose()\n+218 * _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * pos, 0);\n+219\n+220 DVector dj;\n+221 for (int k = 0; k < _\bD; ++k) { // for each diagonal element of the camera\n+hessian\n+222 dj(k) = Fj.col(k).squaredNorm();\n+223 // (1 x 1) = (1 x 3) * (3 * 3) * (3 x 1)\n+224 dj(k) -= FtE.row(k) * _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ * FtE.row(k).transpose();\n+225 }\n+226 DMap(d + _\bD * j) += dj;\n+227 }\n+228 }\n+229\n+_\b2_\b3_\b1 std::map _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bB_\bl_\bo_\bc_\bk_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl() const override {\n+232 std::map blocks;\n+233 // F'*(I - E*P*E')*F\n+234 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos) {\n+235 _\bK_\be_\by j = _\bk_\be_\by_\bs_\b_[pos];\n+236 // F'*F - F'*E*P*E'*F e.g. (9*2)*(2*9) - (9*2)*(2*3)*(3*3)*(3*2)*(2*9)\n+237 const _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD& Fj = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[pos];\n+238 // Eigen::Matrix FtE = Fj.transpose()\n+239 // * E_.block(ZDim * pos, 0);\n+240 // blocks[j] = Fj.transpose() * Fj\n+241 // - FtE * PointCovariance_ * FtE.transpose();\n+242\n+243 const Matrix23& Ej = _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * pos, 0);\n+244 blocks[j] = Fj.transpose()\n+245 * (Fj - Ej * _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ * Ej.transpose() * Fj);\n+246\n+247 // F'*(I - E*P*E')*F, TODO: this should work, but it does not :-(\n+248 // static const Eigen::Matrix I2 = eye(ZDim);\n+249 // Matrix2 Q = //\n+250 // I2 - E_.block(ZDim * pos, 0) * PointCovariance_ *\n+E_.block(ZDim * pos, 0).transpose();\n+251 // blocks[j] = Fj.transpose() * Q * Fj;\n+252 }\n+253 return blocks;\n+254 }\n+255\n+_\b2_\b5_\b6 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const override {\n+257 return boost::make_shared >(_\bk_\be_\by_\bs_\b_,\n+258 _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_, _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_, _\bE_\b_, _\bb_\b_);\n+259 throw std::runtime_error(\n+260 \"RegularImplicitSchurFactor::clone non implemented\");\n+261 }\n+262\n+_\b2_\b6_\b3 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bn_\be_\bg_\ba_\bt_\be() const override {\n+264 return boost::make_shared >(_\bk_\be_\by_\bs_\b_,\n+265 _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_, _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_, _\bE_\b_, _\bb_\b_);\n+266 throw std::runtime_error(\n+267 \"RegularImplicitSchurFactor::negate non implemented\");\n+268 }\n+269\n+270 // Raw Vector version of y += F'*alpha*(I - E*P*E')*F*x, for testing\n+271 static\n+272 void multiplyHessianAdd(const Matrix& F, const Matrix& E,\n+273 const Matrix& PointCovariance, double alpha, const Vector& x, Vector& y) {\n+274 Vector _\be_\b1 = F * x;\n+275 Vector d1 = E.transpose() * _\be_\b1;\n+276 Vector d2 = PointCovariance * d1;\n+277 Vector e2 = E * d2;\n+278 Vector e3 = alpha * (_\be_\b1 - e2);\n+279 y += F.transpose() * e3;\n+280 }\n+281\n+282 typedef std::vector> Error2s;\n+283\n+_\b2_\b8_\b7 void _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br_\b2(const Error2s& _\be_\b1, Error2s& e2) const {\n+288\n+289 // d1 = E.transpose() * (e1-ZDim*b) = (3*2m)*2m\n+290 Vector3 d1;\n+291 d1.setZero();\n+292 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n+293 d1 += _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * k, 0).transpose()\n+294 * (_\be_\b1[k] - _\bZ_\bD_\bi_\bm * _\bb_\b_.segment<_\bZ_\bD_\bi_\bm>(k * _\bZ_\bD_\bi_\bm));\n+295\n+296 // d2 = E.transpose() * e1 = (3*2m)*2m\n+297 Vector3 d2 = _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ * d1;\n+298\n+299 // e3 = alpha*(e1 - E*d2) = 1*[2m-(2m*3)*3]\n+300 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n+301 e2[k] = _\be_\b1[k] - _\bZ_\bD_\bi_\bm * _\bb_\b_.segment<_\bZ_\bD_\bi_\bm>(k * _\bZ_\bD_\bi_\bm)\n+302 - _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * k, 0) * d2;\n+303 }\n+304\n+305 /*\n+306 * This definition matches the linearized error in the Hessian Factor:\n+307 * LinError(x) = x'*H*x - 2*x'*eta + f\n+308 * with:\n+309 * H = F' * (I-E'*P*E) * F = F' * Q * F\n+310 * eta = F' * (I-E'*P*E) * b = F' * Q * b\n+311 * f = nonlinear error\n+312 * (x'*H*x - 2*x'*eta + f) = x'*F'*Q*F*x - 2*x'*F'*Q *b + f = x'*F'*Q*(F*x -\n+2*b) + f\n+313 */\n+314 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const override {\n+315\n+316 // resize does not do malloc if correct size\n+317 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n+318 e2.resize(_\bs_\bi_\bz_\be());\n+319\n+320 // e1 = F * x - b = (2m*dm)*dm\n+321 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k)\n+322 _\be_\b1[k] = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k] * x._\ba_\bt(_\bk_\be_\by_\bs_\b_[k]);\n+323 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br_\b2(_\be_\b1, e2);\n+324\n+325 double result = 0;\n+326 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k)\n+327 result += _\bd_\bo_\bt(_\be_\b1[k], e2[k]);\n+328\n+329 double f = _\bb_\b_.squaredNorm();\n+330 return 0.5 * (result + f);\n+331 }\n+332\n+333 // needed to be GaussianFactor - (I - E*P*E')*(F*x - b)\n+334 // This is wrong and does not match the definition in Hessian,\n+335 // but it matches the definition of the Jacobian factor (JF)\n+336 double errorJF(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n+337\n+338 // resize does not do malloc if correct size\n+339 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n+340 e2.resize(_\bs_\bi_\bz_\be());\n+341\n+342 // e1 = F * x - b = (2m*dm)*dm\n+343 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k)\n+344 _\be_\b1[k] = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k] * x.at(_\bk_\be_\by_\bs_\b_[k]) - _\bb_\b_.segment<_\bZ_\bD_\bi_\bm>(k * _\bZ_\bD_\bi_\bm);\n+345 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(_\be_\b1, e2);\n+346\n+347 double result = 0;\n+348 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k)\n+349 result += _\bd_\bo_\bt(e2[k], e2[k]);\n+350\n+351 // std::cout << \"implicitFactor::error result \" << result << std::endl;\n+352 return 0.5 * result;\n+353 }\n+_\b3_\b5_\b7 void _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(const Error2s& _\be_\b1, Error2s& e2) const {\n+358\n+359 // d1 = E.transpose() * e1 = (3*2m)*2m\n+360 Vector3 d1;\n+361 d1.setZero();\n+362 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n+363 d1 += _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * k, 0).transpose() * _\be_\b1[k];\n+364\n+365 // d2 = E.transpose() * e1 = (3*2m)*2m\n+366 Vector3 d2 = _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_ * d1;\n+367\n+368 // e3 = alpha*(e1 - E*d2) = 1*[2m-(2m*3)*3]\n+369 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n+370 e2[k] = _\be_\b1[k] - _\bE_\b_.block<_\bZ_\bD_\bi_\bm, 3>(_\bZ_\bD_\bi_\bm * k, 0) * d2;\n+371 }\n+372\n+_\b3_\b7_\b4 mutable Error2s _\be_\b1, e2;\n+375\n+_\b3_\b8_\b0 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const double* x, double* y) const {\n+381\n+382 // Use eigen magic to access raw memory\n+383 typedef Eigen::Matrix DVector;\n+384 typedef Eigen::Map DMap;\n+385 typedef Eigen::Map ConstDMap;\n+386\n+387 // resize does not do malloc if correct size\n+388 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n+389 e2.resize(_\bs_\bi_\bz_\be());\n+390\n+391 // e1 = F * x = (2m*dm)*dm\n+392 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) {\n+393 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[k];\n+394 _\be_\b1[k] = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k] * ConstDMap(x + _\bD * key);\n+395 }\n+396\n+397 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(_\be_\b1, e2);\n+398\n+399 // y += F.transpose()*e2 = (2d*2m)*2m\n+400 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) {\n+401 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[k];\n+402 DMap(y + _\bD * key) += _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k].transpose() * alpha * e2[k];\n+403 }\n+404 }\n+405\n+406 void multiplyHessianAdd(double alpha, const double* x, double* y,\n+407 std::vector _\bk_\be_\by_\bs) const {\n+408 }\n+409\n+_\b4_\b1_\b3 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n+414 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const override {\n+415\n+416 // resize does not do malloc if correct size\n+417 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n+418 e2.resize(_\bs_\bi_\bz_\be());\n+419\n+420 // e1 = F * x = (2m*dm)*dm\n+421 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k)\n+422 _\be_\b1[k] = _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k] * x._\ba_\bt(_\bk_\be_\by_\bs_\b_[k]);\n+423\n+424 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(_\be_\b1, e2);\n+425\n+426 // y += F.transpose()*e2 = (2d*2m)*2m\n+427 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) {\n+428 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[k];\n+429 static const Vector _\be_\bm_\bp_\bt_\by;\n+430 std::pair it = y._\bt_\br_\by_\bI_\bn_\bs_\be_\br_\bt(key, _\be_\bm_\bp_\bt_\by);\n+431 Vector& yi = it.first->second;\n+432 // Create the value as a zero vector if it does not exist.\n+433 if (it.second)\n+434 yi = Vector::Zero(_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k].cols());\n+435 yi += _\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k].transpose() * alpha * e2[k];\n+436 }\n+437 }\n+438\n+_\b4_\b4_\b2 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bu_\bm_\bm_\by(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n+443 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const {\n+444\n+445 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) {\n+446 static const Vector _\be_\bm_\bp_\bt_\by;\n+447 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[k];\n+448 std::pair it = y._\bt_\br_\by_\bI_\bn_\bs_\be_\br_\bt(key, _\be_\bm_\bp_\bt_\by);\n+449 Vector& yi = it.first->second;\n+450 yi = x._\ba_\bt(key);\n+451 }\n+452 }\n+453\n+_\b4_\b5_\b7 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo() const override {\n+458 // calculate Q*b\n+459 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n+460 e2.resize(_\bs_\bi_\bz_\be());\n+461 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n+462 _\be_\b1[k] = _\bb_\b_.segment<_\bZ_\bD_\bi_\bm>(_\bZ_\bD_\bi_\bm * k);\n+463 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(_\be_\b1, e2);\n+464\n+465 // g = F.transpose()*e2\n+466 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs g;\n+467 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) {\n+468 _\bK_\be_\by key = _\bk_\be_\by_\bs_\b_[k];\n+469 g._\bi_\bn_\bs_\be_\br_\bt(key, -_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k].transpose() * e2[k]);\n+470 }\n+471\n+472 // return it\n+473 return g;\n+474 }\n+475\n+_\b4_\b7_\b9 void _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo(double* d) const override {\n+480\n+481 // Use eigen magic to access raw memory\n+482 typedef Eigen::Matrix DVector;\n+483 typedef Eigen::Map DMap;\n+484\n+485 // calculate Q*b\n+486 _\be_\b1.resize(_\bs_\bi_\bz_\be());\n+487 e2.resize(_\bs_\bi_\bz_\be());\n+488 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); k++)\n+489 _\be_\b1[k] = _\bb_\b_.segment<_\bZ_\bD_\bi_\bm>(_\bZ_\bD_\bi_\bm * k);\n+490 _\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br(_\be_\b1, e2);\n+491\n+492 for (size_t k = 0; k < _\bs_\bi_\bz_\be(); ++k) { // for each camera in the factor\n+493 _\bK_\be_\by j = _\bk_\be_\by_\bs_\b_[k];\n+494 DMap(d + _\bD * j) += -_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_[k].transpose() * e2[k];\n+495 }\n+496 }\n+497\n+_\b4_\b9_\b9 Vector _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt(_\bK_\be_\by key, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const override {\n+500 throw std::runtime_error(\n+501 \"gradient for RegularImplicitSchurFactor is not implemented yet\");\n+502 }\n+503\n+504};\n+505// end class RegularImplicitSchurFactor\n+506\n+507template\n+508const int _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bD;\n+509\n+510template\n+511const int _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bZ_\bD_\bi_\bm;\n+512\n+513// traits\n+_\b5_\b1_\b4template struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br > :\n+public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n+515 RegularImplicitSchurFactor > {\n+516};\n+517\n+518}\n+519\n+_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n+Base class to create smart factors on poses or cameras.\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n+bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n+DenseBase< MATRIX > &B, double tol=1e-9)\n+equals with a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n+Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex\n+I, DenseIndex J) const\n+Return the square sub-matrix that contains blocks(i:j, i:j).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n+A set of cameras, all with their own calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n const KeyVector & keys() const\n Access the factor's involved variable keys.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs\n-void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal\n-&noiseModel)\n-Internal function to fill blocks and set dimensions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor-inl.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-JacobianFactor with constant sized blocks Provides raw memory access versions\n-of linear operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD\n-JacobianFactor for Schur complement that uses the \"Nullspace Trick\" by Mourikis\n-et al.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorSVD.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD\n-JacobianFactorSVD()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorSVD.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD\n-JacobianFactorSVD(const KeyVector &keys, const std::vector< MatrixZD, Eigen::\n-aligned_allocator< MatrixZD > > &Fblocks, const Matrix &Enull, const Vector &b,\n-const SharedDiagonal &model=SharedDiagonal())\n-Construct a new JacobianFactorSVD object, createing a reduced-rank Jacobian\n-factor on the CameraSet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorSVD.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD\n-JacobianFactorSVD(const KeyVector &keys, const SharedDiagonal\n-&model=SharedDiagonal())\n-Empty constructor with keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorSVD.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+Whether the factor is empty (involves zero variables).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+KeyVector::const_iterator const_iterator\n+Const iterator over keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+An abstract virtual base class for JacobianFactor and HessianFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+VectorValues hessianDiagonal() const\n+Return the diagonal of the Hessian for this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.cpp:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n+iterator insert(const std::pair< Key, Vector > &key_value)\n+Insert a vector value with key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.cpp:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bm_\bp_\bl_\ba_\bc_\be\n+std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)\n+Emplace a vector value with key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+Vector & at(Key j)\n+Read/write access to the vector value with key j, throws std::out_of_range if j\n+does not exist,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:139\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bt_\br_\by_\bI_\bn_\bs_\be_\br_\bt\n+std::pair< iterator, bool > tryInsert(Key j, const Vector &value)\n+insert that mimics the STL map insert - if the value already exists, the map is\n+not modified and an i...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:209\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n+RegularImplicitSchurFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\b_\n+const Matrix E_\n+The 2m*3 E Jacobian with respect to the point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br\n+void projectError(const Error2s &e1, Error2s &e2) const\n+Calculate corrected error Q*e = (I - E*P*E')*e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:357\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+GaussianFactor::shared_ptr clone() const override\n+Clone a factor (make a deep copy)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:256\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bA_\bd_\bd\n+void hessianDiagonalAdd(VectorValues &d) const override\n+Add the diagonal of the Hessian for this factor to existing VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n+RegularImplicitSchurFactor(const KeyVector &keys, const FBlocks &Fs, const\n+Matrix &E, const Matrix &P, const Vector &b)\n+Construct from blocks of F, E, inv(E'*E), and RHS vector b.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n+RegularImplicitSchurFactor()\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\b_\n+const Vector b_\n+2m-dimensional RHS vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+std::pair< Matrix, Vector > jacobian() const override\n+Return the dense Jacobian and right-hand-side , with the noise models baked\n+into A and b.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:148\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\bD_\bD\n+Eigen::Matrix< double, D, D > MatrixDD\n+camera Hessian\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n+void gradientAtZero(double *d) const override\n+Calculate gradient, which is -F'Q*b, see paper - RAW MEMORY ACCESS.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:479\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bZ_\bD_\bi_\bm\n+static const int ZDim\n+Measurement dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+Matrix information() const override\n+Compute full information matrix\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n+~RegularImplicitSchurFactor() override\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn\n+void updateHessian(const KeyVector &keys, SymmetricBlockMatrix *info) const\n+override\n+Update an information matrix by adding the information corresponding to this\n+factor (used internally ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bB_\bl_\bo_\bc_\bk_\bs_\b_\n+FBlocks FBlocks_\n+All ZDim*D F blocks (one for each camera)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n+VectorValues gradientAtZero() const override\n+Calculate gradient, which is -F'Q*b, see paper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:457\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD\n+Eigen::Matrix< double, ZDim, D > MatrixZD\n+type of an F block\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be_\b_\n+const Matrix PointCovariance_\n+the 3*3 matrix P = inv(E'E) (2*2 if degenerate)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n+void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y)\n+const override\n+Hessian-vector multiply, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:413\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bB_\bl_\bo_\bc_\bk_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+std::map< Key, Matrix > hessianBlockDiagonal() const override\n+Return the block diagonal of the Hessian for this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:231\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+Matrix augmentedInformation() const override\n+Compute full augmented information matrix\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be\n+GaussianFactor::shared_ptr negate() const override\n+Construct the corresponding anti-factor to negate information stored stored in\n+this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:263\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\b1\n+Error2s e1\n+Scratch space for multiplyHessianAdd.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:374\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n+DenseIndex getDim(const_iterator variable) const override\n+Degrees of freedom of camera.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const GaussianFactor &lf, double tol) const override\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+Matrix augmentedJacobian() const override\n+Return a dense Jacobian matrix, augmented with b with the noise models baked\n+into A and b.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+RegularImplicitSchurFactor This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD\n+static const int D\n+Camera dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bE_\br_\br_\bo_\br_\b2\n+void projectError2(const Error2s &e1, Error2s &e2) const\n+Calculate corrected error Q*(e-ZDim*b) = (I - E*P*E')*(e-ZDim*b)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:287\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n+void multiplyHessianAdd(double alpha, const double *x, double *y) const\n+double* Hessian-vector multiply, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:380\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+void hessianDiagonal(double *d) const override\n+add the contribution of this factor to the diagonal of the hessian d(output) =\n+d(input) + deltaHessia...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:205\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bu_\bm_\bm_\by\n+void multiplyHessianDummy(double alpha, const VectorValues &x, VectorValues &y)\n+const\n+Dummy version to measure overhead of key access.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:442\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt\n+Vector gradient(Key key, const VectorValues &x) const override\n+Gradient wrt a key at any values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularImplicitSchurFactor.h:499\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * J\bJa\bac\bco\bob\bbi\bia\ban\bnF\bFa\bac\bct\bto\bor\brS\bSV\bVD\bD.\b.h\bh\n+ * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01331.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01331.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/BoundingConstraint.h File Reference\n \n \n \n \n \n \n \n@@ -96,49 +96,45 @@\n
\n \n \n
\n \n-
SmartProjectionFactor.h File Reference
\n+
BoundingConstraint.h File Reference
\n
\n
\n \n-

Smart factor on cameras (pose + calibration) \n+

Provides partially implemented constraints to implement bounds. \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::SmartProjectionFactor< CAMERA >
 SmartProjectionFactor: triangulates point and keeps an estimate of it around. More...
struct  gtsam::BoundingConstraint1< VALUE >
 Unary inequality constraint forcing a scalar to be greater/less than a fixed threshold. More...
 
struct  gtsam::traits< SmartProjectionFactor< CAMERA > >
 traits More...
struct  gtsam::BoundingConstraint2< VALUE1, VALUE2 >
 Binary scalar inequality constraint, with a similar value() function to implement for specific systems. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Smart factor on cameras (pose + calibration)

\n-
Author
Luca Carlone
\n-
\n-Zsolt Kira
\n-
\n-Frank Dellaert
\n+

Provides partially implemented constraints to implement bounds.

\n+
Author
Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SmartProjectionFactor.h File Reference\n-Smart factor on cameras (pose + calibration) _\bM_\bo_\br_\be_\b._\b._\b.\n+BoundingConstraint.h File Reference\n+Provides partially implemented constraints to implement bounds. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n-\u00a0 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br: triangulates point and keeps an estimate of it\n- around. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n+\u00a0 Unary inequality constraint forcing a scalar to be greater/less than a\n+ fixed threshold. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b1_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b2_\b _\b>\n+\u00a0 Binary scalar inequality constraint, with a similar _\bv_\ba_\bl_\bu_\be_\b(_\b) function\n+ to implement for specific systems. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Smart factor on cameras (pose + calibration)\n+Provides partially implemented constraints to implement bounds.\n Author\n- Luca Carlone\n- Zsolt Kira\n- Frank Dellaert\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01331.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01331.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,3 @@\n var a01331 = [\n- [\"gtsam::SmartProjectionFactor< CAMERA >\", \"a04936.html\", \"a04936\"],\n- [\"gtsam::traits< SmartProjectionFactor< CAMERA > >\", \"a04940.html\", null]\n+ [\"gtsam::BoundingConstraint2< VALUE1, VALUE2 >\", \"a04784.html\", \"a04784\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01331_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01331_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/BoundingConstraint.h Source File\n \n \n \n \n \n \n \n@@ -98,539 +98,193 @@\n
No Matches
\n \n \n \n \n \n
\n-
SmartProjectionFactor.h
\n+
BoundingConstraint.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/Lie.h>
\n+\n+
22
\n+
23namespace gtsam {
\n
24
\n-\n-\n-
27#include <gtsam/slam/dataset.h>
\n-
28
\n-
29#include <boost/optional.hpp>
\n-
30#include <boost/make_shared.hpp>
\n-
31#include <vector>
\n-
32
\n-
33namespace gtsam {
\n-
34
\n-
44template<class CAMERA>
\n-
\n-\n+
32template<class VALUE>
\n+
\n+\n+
34 typedef VALUE X;
\n+\n+
36 typedef boost::shared_ptr<BoundingConstraint1<VALUE> > shared_ptr;
\n+
37
\n+
38 double threshold_;
\n+
39 bool isGreaterThan_;
\n+
40
\n+
\n+
41 BoundingConstraint1(Key key, double threshold,
\n+
42 bool isGreaterThan, double mu = 1000.0) :
\n+
43 Base(noiseModel::Constrained::All(1, mu), key),
\n+
44 threshold_(threshold), isGreaterThan_(isGreaterThan) {
\n+
45 }
\n+
\n
46
\n-
47public:
\n+
47 ~BoundingConstraint1() override {}
\n
48
\n-
49private:
\n-\n-\n-
52 typedef SmartProjectionFactor<CAMERA> SmartProjectionCameraFactor;
\n-
53
\n-
54protected:
\n-
55
\n-\n-
60
\n-\n-
64 mutable std::vector<Pose3, Eigen::aligned_allocator<Pose3> >
\n-\n-
67
\n-
68 public:
\n-
69
\n-
71 typedef boost::shared_ptr<This> shared_ptr;
\n-
72
\n-
74 typedef CAMERA Camera;
\n-\n-
76
\n-\n+
49 inline double threshold() const { return threshold_; }
\n+
50 inline bool isGreaterThan() const { return isGreaterThan_; }
\n+
51
\n+
57 virtual double value(const X& x, boost::optional<Matrix&> H =
\n+
58 boost::none) const = 0;
\n+
59
\n+
\n+
61 bool active(const Values& c) const override {
\n+
62 // note: still active at equality to avoid zigzagging
\n+
63 double x = value(c.at<X>(this->key()));
\n+
64 return (isGreaterThan_) ? x <= threshold_ : x >= threshold_;
\n+
65 }
\n+
\n+
66
\n+
67 Vector evaluateError(const X& x, boost::optional<Matrix&> H =
\n+
68 boost::none) const override {
\n+
69 Matrix D;
\n+
70 double error = value(x, D) - threshold_;
\n+
71 if (H) {
\n+
72 if (isGreaterThan_) *H = D;
\n+
73 else *H = -1.0 * D;
\n+
74 }
\n+
75
\n+
76 if (isGreaterThan_)
\n+
77 return (Vector(1) << error).finished();
\n+
78 else
\n+
79 return -1.0 * (Vector(1) << error).finished();
\n+
80 }
\n
81
\n-
\n-\n-
88 const SharedNoiseModel& sharedNoiseModel,
\n-\n-
90 : Base(sharedNoiseModel),
\n-
91 params_(params),
\n-
92 result_(TriangulationResult::Degenerate()) {}
\n-
\n-
93
\n-
\n-\n-
96 }
\n-
\n-
97
\n-
\n-
103 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
104 DefaultKeyFormatter) const override {
\n-
105 std::cout << s << "SmartProjectionFactor\\n";
\n-
106 std::cout << "linearizationMode: " << params_.linearizationMode
\n-
107 << std::endl;
\n-
108 std::cout << "triangulationParameters:\\n" << params_.triangulation
\n-
109 << std::endl;
\n-
110 std::cout << "result:\\n" << result_ << std::endl;
\n-
111 Base::print("", keyFormatter);
\n-
112 }
\n-
\n-
113
\n-
\n-
115 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n-
116 const This *e = dynamic_cast<const This*>(&p);
\n-
117 return e && params_.linearizationMode == e->params_.linearizationMode
\n-
118 && Base::equals(p, tol);
\n-
119 }
\n-
\n+
82private:
\n+
83
\n+\n+
86 template<class ARCHIVE>
\n+
87 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
88 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
89 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n+
90 boost::serialization::base_object<Base>(*this));
\n+
91 ar & BOOST_SERIALIZATION_NVP(threshold_);
\n+
92 ar & BOOST_SERIALIZATION_NVP(isGreaterThan_);
\n+
93 }
\n+
94};
\n+
\n+
95
\n+
100template<class VALUE1, class VALUE2>
\n+
\n+
101struct BoundingConstraint2: public NoiseModelFactorN<VALUE1, VALUE2> {
\n+
102 typedef VALUE1 X1;
\n+
103 typedef VALUE2 X2;
\n+
104
\n+\n+
106 typedef boost::shared_ptr<BoundingConstraint2<VALUE1, VALUE2> > shared_ptr;
\n+
107
\n+
108 double threshold_;
\n+
109 bool isGreaterThan_;
\n+
110
\n+
\n+
111 BoundingConstraint2(Key key1, Key key2, double threshold,
\n+
112 bool isGreaterThan, double mu = 1000.0)
\n+
113 : Base(noiseModel::Constrained::All(1, mu), key1, key2),
\n+
114 threshold_(threshold), isGreaterThan_(isGreaterThan) {}
\n+
\n+
115
\n+
116 ~BoundingConstraint2() override {}
\n+
117
\n+
118 inline double threshold() const { return threshold_; }
\n+
119 inline bool isGreaterThan() const { return isGreaterThan_; }
\n
120
\n-
\n-\n-
129 // Several calls to linearize will be done from the same linearization
\n-
130 // point, hence it is not needed to re-triangulate. Note that this is not
\n-
131 // yet "selecting linearization", that will come later, and we only check if
\n-
132 // the current linearization is the "same" (up to tolerance) w.r.t. the last
\n-
133 // time we triangulated the point.
\n-
134
\n-
135 size_t m = cameras.size();
\n-
136
\n-
137 bool retriangulate = false;
\n-
138
\n-
139 // Definitely true if we do not have a previous linearization point or the
\n-
140 // new linearization point includes more poses.
\n-
141 if (cameraPosesTriangulation_.empty()
\n-
142 || cameras.size() != cameraPosesTriangulation_.size())
\n-
143 retriangulate = true;
\n-
144
\n-
145 // Otherwise, check poses against cache.
\n-
146 if (!retriangulate) {
\n-
147 for (size_t i = 0; i < cameras.size(); i++) {
\n-
148 if (!cameras[i].pose().equals(cameraPosesTriangulation_[i],
\n-
149 params_.retriangulationThreshold)) {
\n-
150 retriangulate = true; // at least two poses are different, hence we retriangulate
\n-
151 break;
\n-
152 }
\n-
153 }
\n-
154 }
\n+
125 virtual double value(const X1& x1, const X2& x2,
\n+
126 boost::optional<Matrix&> H1 = boost::none,
\n+
127 boost::optional<Matrix&> H2 = boost::none) const = 0;
\n+
128
\n+
\n+
130 bool active(const Values& c) const override {
\n+
131 // note: still active at equality to avoid zigzagging
\n+
132 double x = value(c.at<X1>(this->key1()), c.at<X2>(this->key2()));
\n+
133 return (isGreaterThan_) ? x <= threshold_ : x >= threshold_;
\n+
134 }
\n+
\n+
135
\n+
136 Vector evaluateError(const X1& x1, const X2& x2,
\n+
137 boost::optional<Matrix&> H1 = boost::none,
\n+
138 boost::optional<Matrix&> H2 = boost::none) const override {
\n+
139 Matrix D1, D2;
\n+
140 double error = value(x1, x2, D1, D2) - threshold_;
\n+
141 if (H1) {
\n+
142 if (isGreaterThan_) *H1 = D1;
\n+
143 else *H1 = -1.0 * D1;
\n+
144 }
\n+
145 if (H2) {
\n+
146 if (isGreaterThan_) *H2 = D2;
\n+
147 else *H2 = -1.0 * D2;
\n+
148 }
\n+
149
\n+
150 if (isGreaterThan_)
\n+
151 return (Vector(1) << error).finished();
\n+
152 else
\n+
153 return -1.0 * (Vector(1) << error).finished();
\n+
154 }
\n
155
\n-
156 // Store the current poses used for triangulation if we will re-triangulate.
\n-
157 if (retriangulate) {
\n-\n-
159 cameraPosesTriangulation_.reserve(m);
\n-
160 for (size_t i = 0; i < m; i++)
\n-
161 // cameraPosesTriangulation_[i] = cameras[i].pose();
\n-
162 cameraPosesTriangulation_.push_back(cameras[i].pose());
\n-
163 }
\n-
164
\n-
165 return retriangulate;
\n-
166 }
\n-
\n-
167
\n-
\n-\n-
175
\n-
176 size_t m = cameras.size();
\n-
177 if (m < 2) // if we have a single pose the corresponding factor is uninformative
\n-
178 return TriangulationResult::Degenerate();
\n-
179
\n-
180 bool retriangulate = decideIfTriangulate(cameras);
\n-
181 if (retriangulate)
\n-\n-
183 params_.triangulation);
\n-
184 return result_;
\n-
185 }
\n-
\n-
186
\n-
\n-\n-
194 triangulateSafe(cameras); // imperative, might reset result_
\n-
195 return bool(result_);
\n-
196 }
\n-
\n-
197
\n-
\n-
199 boost::shared_ptr<RegularHessianFactor<Base::Dim> > createHessianFactor(
\n-
200 const Cameras& cameras, const double lambda = 0.0,
\n-
201 bool diagonalDamping = false) const {
\n-
202 size_t numKeys = this->keys_.size();
\n-
203 // Create structures for Hessian Factors
\n-
204 KeyVector js;
\n-
205 std::vector<Matrix> Gs(numKeys * (numKeys + 1) / 2);
\n-
206 std::vector<Vector> gs(numKeys);
\n-
207
\n-
208 if (this->measured_.size() != cameras.size())
\n-
209 throw std::runtime_error(
\n-
210 "SmartProjectionHessianFactor: this->measured_"
\n-
211 ".size() inconsistent with input");
\n-
212
\n-\n-
214
\n-
215 if (params_.degeneracyMode == ZERO_ON_DEGENERACY && !result_) {
\n-
216 // failed: return"empty" Hessian
\n-
217 for (Matrix& m : Gs) m = Matrix::Zero(Base::Dim, Base::Dim);
\n-
218 for (Vector& v : gs) v = Vector::Zero(Base::Dim);
\n-
219 return boost::make_shared<RegularHessianFactor<Base::Dim> >(this->keys_,
\n-
220 Gs, gs, 0.0);
\n-
221 }
\n-
222
\n-
223 // Jacobian could be 3D Point3 OR 2D Unit3, difference is E.cols().
\n-
224 typename Base::FBlocks Fs;
\n-
225 Matrix E;
\n-
226 Vector b;
\n-\n-
228
\n-
229 // Whiten using noise model
\n-
230 Base::whitenJacobians(Fs, E, b);
\n-
231
\n-
232 // build augmented hessian
\n-
233 SymmetricBlockMatrix augmentedHessian = //
\n-
234 Cameras::SchurComplement(Fs, E, b, lambda, diagonalDamping);
\n-
235
\n-
236 return boost::make_shared<RegularHessianFactor<Base::Dim> >(
\n-
237 this->keys_, augmentedHessian);
\n-
238 }
\n-
\n-
239
\n-
240 // Create RegularImplicitSchurFactor factor.
\n-
241 boost::shared_ptr<RegularImplicitSchurFactor<CAMERA> > createRegularImplicitSchurFactor(
\n-
242 const Cameras& cameras, double lambda) const {
\n-\n-\n-
245 else
\n-
246 // failed: return empty
\n-
247 return boost::shared_ptr<RegularImplicitSchurFactor<CAMERA> >();
\n-
248 }
\n-
249
\n-
\n-
251 boost::shared_ptr<JacobianFactorQ<Base::Dim, 2> > createJacobianQFactor(
\n-
252 const Cameras& cameras, double lambda) const {
\n-\n-\n-
255 else
\n-
256 // failed: return empty
\n-
257 return boost::make_shared<JacobianFactorQ<Base::Dim, 2> >(this->keys_);
\n-
258 }
\n-
\n-
259
\n-
\n-
261 boost::shared_ptr<JacobianFactorQ<Base::Dim, 2> > createJacobianQFactor(
\n-
262 const Values& values, double lambda) const {
\n-
263 return createJacobianQFactor(this->cameras(values), lambda);
\n-
264 }
\n-
\n-
265
\n-
\n-
267 boost::shared_ptr<JacobianFactor> createJacobianSVDFactor(
\n-
268 const Cameras& cameras, double lambda) const {
\n-\n-\n-
271 else
\n-
272 // failed: return empty
\n-
273 return boost::make_shared<JacobianFactorSVD<Base::Dim, 2> >(this->keys_);
\n-
274 }
\n-
\n-
275
\n-
\n-
277 virtual boost::shared_ptr<RegularHessianFactor<Base::Dim> > linearizeToHessian(
\n-
278 const Values& values, double lambda = 0.0) const {
\n-
279 return createHessianFactor(this->cameras(values), lambda);
\n-
280 }
\n-
\n-
281
\n-
\n-
283 virtual boost::shared_ptr<RegularImplicitSchurFactor<CAMERA> > linearizeToImplicit(
\n-
284 const Values& values, double lambda = 0.0) const {
\n-
285 return createRegularImplicitSchurFactor(this->cameras(values), lambda);
\n-
286 }
\n-
\n-
287
\n-
\n-
289 virtual boost::shared_ptr<JacobianFactorQ<Base::Dim, 2> > linearizeToJacobian(
\n-
290 const Values& values, double lambda = 0.0) const {
\n-
291 return createJacobianQFactor(this->cameras(values), lambda);
\n-
292 }
\n-
\n-
293
\n-
\n-
299 boost::shared_ptr<GaussianFactor> linearizeDamped(const Cameras& cameras,
\n-
300 const double lambda = 0.0) const {
\n-
301 // depending on flag set on construction we may linearize to different linear factors
\n-
302 switch (params_.linearizationMode) {
\n-
303 case HESSIAN:
\n-
304 return createHessianFactor(cameras, lambda);
\n-
305 case IMPLICIT_SCHUR:
\n-
306 return createRegularImplicitSchurFactor(cameras, lambda);
\n-
307 case JACOBIAN_SVD:
\n-
308 return createJacobianSVDFactor(cameras, lambda);
\n-
309 case JACOBIAN_Q:
\n-
310 return createJacobianQFactor(cameras, lambda);
\n-
311 default:
\n-
312 throw std::runtime_error("SmartFactorlinearize: unknown mode");
\n-
313 }
\n-
314 }
\n-
\n-
315
\n-
\n-
321 boost::shared_ptr<GaussianFactor> linearizeDamped(const Values& values,
\n-
322 const double lambda = 0.0) const {
\n-
323 // depending on flag set on construction we may linearize to different linear factors
\n-
324 Cameras cameras = this->cameras(values);
\n-
325 return linearizeDamped(cameras, lambda);
\n-
326 }
\n-
\n-
327
\n-
\n-
329 boost::shared_ptr<GaussianFactor> linearize(
\n-
330 const Values& values) const override {
\n-
331 return linearizeDamped(values);
\n-
332 }
\n-
\n-
333
\n-
\n-
338 bool triangulateAndComputeE(Matrix& E, const Cameras& cameras) const {
\n-
339 bool nonDegenerate = triangulateForLinearize(cameras);
\n-
340 if (nonDegenerate)
\n-
341 cameras.project2(*result_, boost::none, E);
\n-
342 return nonDegenerate;
\n-
343 }
\n-
\n-
344
\n-
\n-
349 bool triangulateAndComputeE(Matrix& E, const Values& values) const {
\n-
350 Cameras cameras = this->cameras(values);
\n-\n-
352 }
\n-
\n-
353
\n-
\n-\n-
358 typename Base::FBlocks& Fs, Matrix& E, Vector& b,
\n-
359 const Cameras& cameras) const {
\n-
360
\n-
361 if (!result_) {
\n-
362 // Handle degeneracy
\n-
363 // TODO check flag whether we should do this
\n-
364 Unit3 backProjected = cameras[0].backprojectPointAtInfinity(
\n-
365 this->measured_.at(0));
\n-
366 Base::computeJacobians(Fs, E, b, cameras, backProjected);
\n-
367 } else {
\n-
368 // valid result: just return Base version
\n-\n-
370 }
\n-
371 }
\n-
\n-
372
\n-
\n-\n-
375 typename Base::FBlocks& Fs, Matrix& E, Vector& b,
\n-
376 const Values& values) const {
\n-
377 Cameras cameras = this->cameras(values);
\n-
378 bool nonDegenerate = triangulateForLinearize(cameras);
\n-
379 if (nonDegenerate)
\n-\n-
381 return nonDegenerate;
\n-
382 }
\n-
\n-
383
\n-
\n-\n-
386 typename Base::FBlocks& Fs, Matrix& Enull, Vector& b,
\n-
387 const Values& values) const {
\n-
388 Cameras cameras = this->cameras(values);
\n-
389 bool nonDegenerate = triangulateForLinearize(cameras);
\n-
390 if (nonDegenerate)
\n-\n-
392 return nonDegenerate;
\n-
393 }
\n-
\n-
394
\n-
\n-
396 Vector reprojectionErrorAfterTriangulation(const Values& values) const {
\n-
397 Cameras cameras = this->cameras(values);
\n-
398 bool nonDegenerate = triangulateForLinearize(cameras);
\n-
399 if (nonDegenerate)
\n-\n-
401 else
\n-
402 return Vector::Zero(cameras.size() * 2);
\n-
403 }
\n-
\n-
404
\n-
\n-\n-
412 boost::optional<Point3> externalPoint = boost::none) const {
\n-
413
\n-
414 if (externalPoint)
\n-
415 result_ = TriangulationResult(*externalPoint);
\n-
416 else
\n-\n-
418
\n-
419 if (result_)
\n-
420 // All good, just use version in base class
\n-\n-
422 else if (params_.degeneracyMode == HANDLE_INFINITY) {
\n-
423 // Otherwise, manage the exceptions with rotation-only factors
\n-
424 Unit3 backprojected = cameras.front().backprojectPointAtInfinity(
\n-
425 this->measured_.at(0));
\n-
426 return Base::totalReprojectionError(cameras, backprojected);
\n-
427 } else
\n-
428 // if we don't want to manage the exceptions we discard the factor
\n-
429 return 0.0;
\n-
430 }
\n-
\n-
431
\n-
\n-
433 double error(const Values& values) const override {
\n-
434 if (this->active(values)) {
\n-\n-
436 } else { // else of active flag
\n-
437 return 0.0;
\n-
438 }
\n-
439 }
\n-
\n-
440
\n-
\n-\n-
443 return result_;
\n-
444 }
\n-
\n-
445
\n-
\n-
447 TriangulationResult point(const Values& values) const {
\n-
448 Cameras cameras = this->cameras(values);
\n-
449 return triangulateSafe(cameras);
\n-
450 }
\n-
\n-
451
\n-
453 bool isValid() const { return result_.valid(); }
\n-
454
\n-
456 bool isDegenerate() const { return result_.degenerate(); }
\n-
457
\n-
459 bool isPointBehindCamera() const { return result_.behindCamera(); }
\n-
460
\n-
462 bool isOutlier() const { return result_.outlier(); }
\n-
463
\n-
465 bool isFarPoint() const { return result_.farPoint(); }
\n-
466
\n-
467 private:
\n-
468
\n-\n-
471 template<class ARCHIVE>
\n-
472 void serialize(ARCHIVE & ar, const unsigned int version) {
\n-
473 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
474 ar & BOOST_SERIALIZATION_NVP(params_);
\n-
475 ar & BOOST_SERIALIZATION_NVP(result_);
\n-
476 ar & BOOST_SERIALIZATION_NVP(cameraPosesTriangulation_);
\n-
477 }
\n-
478}
\n-
\n-
479;
\n-
480
\n-
482template<class CAMERA>
\n-
\n-
483struct traits<SmartProjectionFactor<CAMERA> > : public Testable<
\n-
484 SmartProjectionFactor<CAMERA> > {
\n-
485};
\n-
\n-
486
\n-
487} // \\ namespace gtsam
\n-
Functions for triangulation.
\n-
utility functions for loading datasets
\n-
Collect common parameters for SmartProjection and SmartStereoProjection factors.
\n-
Base class to create smart factors on poses or cameras.
\n+
156private:
\n+
157
\n+\n+
160 template<class ARCHIVE>
\n+
161 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
162 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n+
163 ar & boost::serialization::make_nvp("NoiseModelFactor2",
\n+
164 boost::serialization::base_object<Base>(*this));
\n+
165 ar & BOOST_SERIALIZATION_NVP(threshold_);
\n+
166 ar & BOOST_SERIALIZATION_NVP(isGreaterThan_);
\n+
167 }
\n+
168};
\n+
\n+
169
\n+
170} // \\namespace gtsam
\n+
Base class and basic functions for Lie types.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
TriangulationResult triangulateSafe(const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measured, const TriangulationParameters &params)
triangulateSafe: extensive checking of the outcome
Definition triangulation.h:680
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n-
static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * ...
Definition CameraSet.h:150
\n-
ZVector project2(const POINT &point, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Project a point (possibly Unit3 at infinity), with derivatives Note that F is a sparse block-diagonal...
Definition CameraSet.h:108
\n-
TriangulationResult is an optional point, along with the reasons why it is invalid.
Definition triangulation.h:626
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
double error(const Values &c) const override
Calculate the error of the factor.
Definition NonlinearFactor.cpp:138
\n+
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
Base class for smart factors.
Definition SmartFactorBase.h:50
\n-
void computeJacobians(FBlocks &Fs, Matrix &E, Vector &b, const Cameras &cameras, const POINT &point) const
Compute F, E, and b (called below in both vanilla and SVD versions), where F is a vector of derivativ...
Definition SmartFactorBase.h:285
\n-
boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > > createRegularImplicitSchurFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0, bool diagonalDamping=false) const
Return Jacobians as RegularImplicitSchurFactor with raw access.
Definition SmartFactorBase.h:356
\n-
static const int Dim
Camera dimension.
Definition SmartFactorBase.h:60
\n-
virtual Cameras cameras(const Values &values) const
Collect all cameras: important that in key order.
Definition SmartFactorBase.h:162
\n-
double totalReprojectionError(const Cameras &cameras, const POINT &point) const
Calculate the error of the factor.
Definition SmartFactorBase.h:267
\n-
void computeJacobiansSVD(FBlocks &Fs, Matrix &Enull, Vector &b, const Cameras &cameras, const POINT &point) const
SVD version that produces smaller Jacobian matrices by doing an SVD decomposition on E,...
Definition SmartFactorBase.h:300
\n-
ZVector measured_
Measurements for each of the m views.
Definition SmartFactorBase.h:79
\n-
Vector unwhitenedError(const Cameras &cameras, const POINT &point, boost::optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Compute reprojection errors [h(x)-z] = [cameras.project(p)-z] and derivatives.
Definition SmartFactorBase.h:204
\n-
void whitenJacobians(FBlocks &F, Matrix &E, Vector &b) const
Whiten the Jacobians computed by computeJacobians using noiseModel_.
Definition SmartFactorBase.h:347
\n-
boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0) const
Return Jacobians as JacobianFactorSVD.
Definition SmartFactorBase.h:386
\n-
boost::shared_ptr< JacobianFactorQ< Dim, ZDim > > createJacobianQFactor(const Cameras &cameras, const Point3 &point, double lambda=0.0, bool diagonalDamping=false) const
Return Jacobians as JacobianFactorQ.
Definition SmartFactorBase.h:369
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartFactorBase.h:174
\n-
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartFactorBase.h:187
\n-
Definition SmartFactorParams.h:42
\n-
LinearizationMode linearizationMode
How to linearize the factor.
Definition SmartFactorParams.h:44
\n-
double retriangulationThreshold
threshold to decide whether to re-triangulate
Definition SmartFactorParams.h:50
\n-
DegeneracyMode degeneracyMode
How to linearize the factor.
Definition SmartFactorParams.h:45
\n-
SmartProjectionFactor: triangulates point and keeps an estimate of it around.
Definition SmartProjectionFactor.h:45
\n-
bool decideIfTriangulate(const Cameras &cameras) const
Check if the new linearization point is the same as the one used for previous triangulation.
Definition SmartProjectionFactor.h:128
\n-
boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > > createJacobianQFactor(const Values &values, double lambda) const
Create JacobianFactorQ factor, takes values.
Definition SmartProjectionFactor.h:261
\n-
boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras &cameras, double lambda) const
Different (faster) way to compute a JacobianFactorSVD factor.
Definition SmartProjectionFactor.h:267
\n-
void computeJacobiansWithTriangulatedPoint(typename Base::FBlocks &Fs, Matrix &E, Vector &b, const Cameras &cameras) const
Compute F, E only (called below in both vanilla and SVD versions) Assumes the point has been computed...
Definition SmartProjectionFactor.h:357
\n-
virtual boost::shared_ptr< RegularHessianFactor< Base::Dim > > linearizeToHessian(const Values &values, double lambda=0.0) const
Linearize to a Hessianfactor.
Definition SmartProjectionFactor.h:277
\n-
bool isOutlier() const
return the outlier state
Definition SmartProjectionFactor.h:462
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition SmartProjectionFactor.h:103
\n-
bool triangulateAndComputeE(Matrix &E, const Values &values) const
Triangulate and compute derivative of error with respect to point.
Definition SmartProjectionFactor.h:349
\n-
boost::shared_ptr< GaussianFactor > linearizeDamped(const Cameras &cameras, const double lambda=0.0) const
Linearize to Gaussian Factor.
Definition SmartProjectionFactor.h:299
\n-
bool isFarPoint() const
return the farPoint state
Definition SmartProjectionFactor.h:465
\n-
TriangulationResult result_
result from triangulateSafe
Definition SmartProjectionFactor.h:63
\n-
boost::shared_ptr< RegularHessianFactor< Base::Dim > > createHessianFactor(const Cameras &cameras, const double lambda=0.0, bool diagonalDamping=false) const
Create a Hessianfactor that is an approximation of error(p).
Definition SmartProjectionFactor.h:199
\n-
TriangulationResult triangulateSafe(const Cameras &cameras) const
Call gtsam::triangulateSafe iff we need to re-triangulate.
Definition SmartProjectionFactor.h:174
\n-
~SmartProjectionFactor() override
Virtual destructor.
Definition SmartProjectionFactor.h:95
\n-
double error(const Values &values) const override
Calculate total reprojection error.
Definition SmartProjectionFactor.h:433
\n-
bool isValid() const
Is result valid?
Definition SmartProjectionFactor.h:453
\n-
std::vector< Pose3, Eigen::aligned_allocator< Pose3 > > cameraPosesTriangulation_
current triangulation poses
Definition SmartProjectionFactor.h:65
\n-
bool triangulateAndComputeE(Matrix &E, const Cameras &cameras) const
Triangulate and compute derivative of error with respect to point.
Definition SmartProjectionFactor.h:338
\n-
virtual boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > > linearizeToImplicit(const Values &values, double lambda=0.0) const
Linearize to an Implicit Schur factor.
Definition SmartProjectionFactor.h:283
\n-
double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 > externalPoint=boost::none) const
Calculate the error of the factor.
Definition SmartProjectionFactor.h:411
\n-
virtual boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > > linearizeToJacobian(const Values &values, double lambda=0.0) const
Linearize to a JacobianfactorQ.
Definition SmartProjectionFactor.h:289
\n-
bool isDegenerate() const
return the degenerate state
Definition SmartProjectionFactor.h:456
\n-
bool triangulateAndComputeJacobians(typename Base::FBlocks &Fs, Matrix &E, Vector &b, const Values &values) const
Version that takes values, and creates the point.
Definition SmartProjectionFactor.h:374
\n-
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition SmartProjectionFactor.h:115
\n-
CAMERA Camera
shorthand for a set of cameras
Definition SmartProjectionFactor.h:74
\n-
boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > > createJacobianQFactor(const Cameras &cameras, double lambda) const
Create JacobianFactorQ factor.
Definition SmartProjectionFactor.h:251
\n-
friend class boost::serialization::access
Serialization function.
Definition SmartProjectionFactor.h:470
\n-
TriangulationResult point(const Values &values) const
COMPUTE the landmark.
Definition SmartProjectionFactor.h:447
\n-
SmartProjectionFactor(const SharedNoiseModel &sharedNoiseModel, const SmartProjectionParams &params=SmartProjectionParams())
Constructor.
Definition SmartProjectionFactor.h:87
\n-
bool isPointBehindCamera() const
return the cheirality status flag
Definition SmartProjectionFactor.h:459
\n-
boost::shared_ptr< GaussianFactor > linearize(const Values &values) const override
linearize
Definition SmartProjectionFactor.h:329
\n-
bool triangulateAndComputeJacobiansSVD(typename Base::FBlocks &Fs, Matrix &Enull, Vector &b, const Values &values) const
takes values
Definition SmartProjectionFactor.h:385
\n-
Vector reprojectionErrorAfterTriangulation(const Values &values) const
Calculate vector of re-projection errors, before applying noise model.
Definition SmartProjectionFactor.h:396
\n-
TriangulationResult point() const
return the landmark
Definition SmartProjectionFactor.h:442
\n-
bool triangulateForLinearize(const Cameras &cameras) const
Possibly re-triangulate before calculating Jacobians.
Definition SmartProjectionFactor.h:193
\n-
boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor
Definition SmartProjectionFactor.h:71
\n-
SmartProjectionFactor()
Default constructor, only for serialization.
Definition SmartProjectionFactor.h:80
\n-
boost::shared_ptr< GaussianFactor > linearizeDamped(const Values &values, const double lambda=0.0) const
Linearize to Gaussian Factor.
Definition SmartProjectionFactor.h:321
\n-\n+
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n+
Unary inequality constraint forcing a scalar to be greater/less than a fixed threshold.
Definition BoundingConstraint.h:33
\n+
bool active(const Values &c) const override
active when constraint NOT met
Definition BoundingConstraint.h:61
\n+
BoundingConstraint1(Key key, double threshold, bool isGreaterThan, double mu=1000.0)
flag for greater/less than
Definition BoundingConstraint.h:41
\n+
friend class boost::serialization::access
Serialization function.
Definition BoundingConstraint.h:85
\n+
virtual double value(const X &x, boost::optional< Matrix & > H=boost::none) const =0
function producing a scalar value to compare to the threshold Must have optional argument for derivat...
\n+
Binary scalar inequality constraint, with a similar value() function to implement for specific system...
Definition BoundingConstraint.h:101
\n+
bool active(const Values &c) const override
active when constraint NOT met
Definition BoundingConstraint.h:130
\n+
BoundingConstraint2(Key key1, Key key2, double threshold, bool isGreaterThan, double mu=1000.0)
flag for greater/less than
Definition BoundingConstraint.h:111
\n+
friend class boost::serialization::access
Serialization function.
Definition BoundingConstraint.h:159
\n+
virtual double value(const X1 &x1, const X2 &x2, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const =0
function producing a scalar value to compare to the threshold Must have optional argument for derivat...
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,743 +1,232 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SmartProjectionFactor.h\n+BoundingConstraint.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n 24\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bl_\ba_\bm_\b/_\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh>\n-28\n-29#include \n-30#include \n-31#include \n-32\n-33namespace _\bg_\bt_\bs_\ba_\bm {\n-34\n-44template\n-_\b4_\b5class _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be {\n+32template\n+_\b3_\b3struct _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+34 typedef VALUE X;\n+35 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b> _\bB_\ba_\bs_\be;\n+36 typedef boost::shared_ptr > shared_ptr;\n+37\n+38 double threshold_;\n+39 bool isGreaterThan_;\n+40\n+_\b4_\b1 _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1(_\bK_\be_\by _\bk_\be_\by, double threshold,\n+42 bool isGreaterThan, double mu = 1000.0) :\n+43 _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(1, mu), _\bk_\be_\by),\n+44 threshold_(threshold), isGreaterThan_(isGreaterThan) {\n+45 }\n 46\n-47public:\n+47 _\b~_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1() override {}\n 48\n-49private:\n-50 typedef _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> _\bB_\ba_\bs_\be;\n-51 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> This;\n-52 typedef _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> SmartProjectionCameraFactor;\n-53\n-54protected:\n-55\n-58 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs params_;\n-60\n-_\b6_\b3 mutable _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt _\br_\be_\bs_\bu_\bl_\bt_\b_;\n-64 mutable std::vector >\n-_\b6_\b5 _\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_;\n-67\n-68 public:\n-69\n-_\b7_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-72\n-_\b7_\b4 typedef CAMERA _\bC_\ba_\bm_\be_\br_\ba;\n-75 typedef _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b> _\bC_\ba_\bm_\be_\br_\ba_\bs;\n-76\n-_\b8_\b0 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+49 inline double threshold() const { return threshold_; }\n+50 inline bool isGreaterThan() const { return isGreaterThan_; }\n+51\n+_\b5_\b7 virtual double _\bv_\ba_\bl_\bu_\be(const X& x, boost::optional H =\n+58 boost::none) const = 0;\n+59\n+_\b6_\b1 bool _\ba_\bc_\bt_\bi_\bv_\be(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override {\n+62 // note: still active at equality to avoid zigzagging\n+63 double x = _\bv_\ba_\bl_\bu_\be(c._\ba_\bt(this->key()));\n+64 return (isGreaterThan_) ? x <= threshold_ : x >= threshold_;\n+65 }\n+66\n+67 Vector evaluateError(const X& x, boost::optional H =\n+68 boost::none) const override {\n+69 Matrix D;\n+70 double _\be_\br_\br_\bo_\br = _\bv_\ba_\bl_\bu_\be(x, D) - threshold_;\n+71 if (H) {\n+72 if (isGreaterThan_) *H = D;\n+73 else *H = -1.0 * D;\n+74 }\n+75\n+76 if (isGreaterThan_)\n+77 return (Vector(1) << _\be_\br_\br_\bo_\br).finished();\n+78 else\n+79 return -1.0 * (Vector(1) << _\be_\br_\br_\bo_\br).finished();\n+80 }\n 81\n-_\b8_\b7 _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n-88 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& sharedNoiseModel,\n-89 const _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs& params = _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs())\n-90 : _\bB_\ba_\bs_\be(sharedNoiseModel),\n-91 params_(params),\n-92 _\br_\be_\bs_\bu_\bl_\bt_\b_(_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt::Degenerate()) {}\n-93\n-_\b9_\b5 _\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {\n-96 }\n-97\n-_\b1_\b0_\b3 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-104 DefaultKeyFormatter) const override {\n-105 std::cout << s << \"SmartProjectionFactor\\n\";\n-106 std::cout << \"linearizationMode: \" << params_._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n-107 << std::endl;\n-108 std::cout << \"triangulationParameters:\\n\" << params_.triangulation\n-109 << std::endl;\n-110 std::cout << \"result:\\n\" << _\br_\be_\bs_\bu_\bl_\bt_\b_ << std::endl;\n-111 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n-112 }\n-113\n-_\b1_\b1_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n-116 const This *e = dynamic_cast(&p);\n-117 return e && params_._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be == e->params_.linearizationMode\n-118 && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol);\n-119 }\n+82private:\n+83\n+_\b8_\b5 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+86 template\n+87 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+88 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility\n+89 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n+90 boost::serialization::base_object(*this));\n+91 ar & BOOST_SERIALIZATION_NVP(threshold_);\n+92 ar & BOOST_SERIALIZATION_NVP(isGreaterThan_);\n+93 }\n+94};\n+95\n+100template\n+_\b1_\b0_\b1struct _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+102 typedef VALUE1 X1;\n+103 typedef VALUE2 X2;\n+104\n+105 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b1_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b2_\b> _\bB_\ba_\bs_\be;\n+106 typedef boost::shared_ptr > shared_ptr;\n+107\n+108 double threshold_;\n+109 bool isGreaterThan_;\n+110\n+_\b1_\b1_\b1 _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2(_\bK_\be_\by key1, _\bK_\be_\by key2, double threshold,\n+112 bool isGreaterThan, double mu = 1000.0)\n+113 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(1, mu), key1, key2),\n+114 threshold_(threshold), isGreaterThan_(isGreaterThan) {}\n+115\n+116 _\b~_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2() override {}\n+117\n+118 inline double threshold() const { return threshold_; }\n+119 inline bool isGreaterThan() const { return isGreaterThan_; }\n 120\n-_\b1_\b2_\b8 bool _\bd_\be_\bc_\bi_\bd_\be_\bI_\bf_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n-129 // Several calls to linearize will be done from the same linearization\n-130 // point, hence it is not needed to re-triangulate. Note that this is not\n-131 // yet \"selecting linearization\", that will come later, and we only check\n-if\n-132 // the current linearization is the \"same\" (up to tolerance) w.r.t. the\n-last\n-133 // time we triangulated the point.\n-134\n-135 size_t m = _\bc_\ba_\bm_\be_\br_\ba_\bs.size();\n-136\n-137 bool retriangulate = false;\n-138\n-139 // Definitely true if we do not have a previous linearization point or the\n-140 // new linearization point includes more poses.\n-141 if (_\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_.empty()\n-142 || _\bc_\ba_\bm_\be_\br_\ba_\bs.size() != _\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_.size())\n-143 retriangulate = true;\n-144\n-145 // Otherwise, check poses against cache.\n-146 if (!retriangulate) {\n-147 for (size_t i = 0; i < _\bc_\ba_\bm_\be_\br_\ba_\bs.size(); i++) {\n-148 if (!_\bc_\ba_\bm_\be_\br_\ba_\bs[i].pose()._\be_\bq_\bu_\ba_\bl_\bs(_\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_[i],\n-149 params_._\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd)) {\n-150 retriangulate = true; // at least two poses are different, hence we\n-retriangulate\n-151 break;\n-152 }\n-153 }\n+_\b1_\b2_\b5 virtual double _\bv_\ba_\bl_\bu_\be(const X1& x1, const X2& x2,\n+126 boost::optional H1 = boost::none,\n+127 boost::optional H2 = boost::none) const = 0;\n+128\n+_\b1_\b3_\b0 bool _\ba_\bc_\bt_\bi_\bv_\be(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override {\n+131 // note: still active at equality to avoid zigzagging\n+132 double x = _\bv_\ba_\bl_\bu_\be(c._\ba_\bt(this->key1()), c._\ba_\bt(this->key2()));\n+133 return (isGreaterThan_) ? x <= threshold_ : x >= threshold_;\n+134 }\n+135\n+136 Vector evaluateError(const X1& x1, const X2& x2,\n+137 boost::optional H1 = boost::none,\n+138 boost::optional H2 = boost::none) const override {\n+139 Matrix D1, D2;\n+140 double _\be_\br_\br_\bo_\br = _\bv_\ba_\bl_\bu_\be(x1, x2, D1, D2) - threshold_;\n+141 if (H1) {\n+142 if (isGreaterThan_) *H1 = D1;\n+143 else *H1 = -1.0 * D1;\n+144 }\n+145 if (H2) {\n+146 if (isGreaterThan_) *H2 = D2;\n+147 else *H2 = -1.0 * D2;\n+148 }\n+149\n+150 if (isGreaterThan_)\n+151 return (Vector(1) << _\be_\br_\br_\bo_\br).finished();\n+152 else\n+153 return -1.0 * (Vector(1) << _\be_\br_\br_\bo_\br).finished();\n 154 }\n 155\n-156 // Store the current poses used for triangulation if we will re-\n-triangulate.\n-157 if (retriangulate) {\n-158 _\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_.clear();\n-159 _\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_.reserve(m);\n-160 for (size_t i = 0; i < m; i++)\n-161 // cameraPosesTriangulation_[i] = cameras[i].pose();\n-162 _\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_.push_back(_\bc_\ba_\bm_\be_\br_\ba_\bs[i].pose());\n-163 }\n-164\n-165 return retriangulate;\n-166 }\n-167\n-_\b1_\b7_\b4 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n-175\n-176 size_t m = _\bc_\ba_\bm_\be_\br_\ba_\bs.size();\n-177 if (m < 2) // if we have a single pose the corresponding factor is\n-uninformative\n-178 return TriangulationResult::Degenerate();\n-179\n-180 bool retriangulate = _\bd_\be_\bc_\bi_\bd_\be_\bI_\bf_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n-181 if (retriangulate)\n-182 _\br_\be_\bs_\bu_\bl_\bt_\b_ = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs, this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_,\n-183 params_.triangulation);\n-184 return _\br_\be_\bs_\bu_\bl_\bt_\b_;\n-185 }\n-186\n-_\b1_\b9_\b3 bool _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n-194 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs); // imperative, might reset result_\n-195 return bool(_\br_\be_\bs_\bu_\bl_\bt_\b_);\n-196 }\n-197\n-_\b1_\b9_\b9 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n-200 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, const double lambda = 0.0,\n-201 bool diagonalDamping = false) const {\n-202 size_t numKeys = this->_\bk_\be_\by_\bs_\b_.size();\n-203 // Create structures for Hessian Factors\n-204 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br js;\n-205 std::vector Gs(numKeys * (numKeys + 1) / 2);\n-206 std::vector gs(numKeys);\n-207\n-208 if (this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.size() != cameras.size())\n-209 throw std::runtime_error(\n-210 \"SmartProjectionHessianFactor: this->measured_\"\n-211 \".size() inconsistent with input\");\n-212\n-213 _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n-214\n-215 if (params_._\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be == ZERO_ON_DEGENERACY && !_\br_\be_\bs_\bu_\bl_\bt_\b_) {\n-216 // failed: return\"empty\" Hessian\n-217 for (Matrix& m : Gs) m = Matrix::Zero(_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bi_\bm, _\bB_\ba_\bs_\be_\b:_\b:_\bD_\bi_\bm);\n-218 for (Vector& v : gs) v = Vector::Zero(_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bi_\bm);\n-219 return boost::make_shared >(this->_\bk_\be_\by_\bs_\b_,\n-220 Gs, gs, 0.0);\n-221 }\n-222\n-223 // Jacobian could be 3D Point3 OR 2D Unit3, difference is E.cols().\n-224 typename Base::FBlocks Fs;\n-225 Matrix E;\n-226 Vector b;\n-227 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs);\n-228\n-229 // Whiten using noise model\n-230 _\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b);\n-231\n-232 // build augmented hessian\n-233 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessian = //\n-234 _\bC_\ba_\bm_\be_\br_\ba_\bs_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(Fs, E, b, lambda, diagonalDamping);\n-235\n-236 return boost::make_shared >(\n-237 this->_\bk_\be_\by_\bs_\b_, augmentedHessian);\n-238 }\n-239\n-240 // Create RegularImplicitSchurFactor factor.\n-241 boost::shared_ptr >\n-createRegularImplicitSchurFactor(\n-242 const Cameras& _\bc_\ba_\bm_\be_\br_\ba_\bs, double lambda) const {\n-243 if (_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs))\n-244 return _\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_, lambda);\n-245 else\n-246 // failed: return empty\n-247 return boost::shared_ptr >();\n-248 }\n-249\n-_\b2_\b5_\b1 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(\n-252 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, double lambda) const {\n-253 if (_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs))\n-254 return _\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_, lambda);\n-255 else\n-256 // failed: return empty\n-257 return boost::make_shared >(this->_\bk_\be_\by_\bs_\b_);\n-258 }\n-259\n-_\b2_\b6_\b1 boost::shared_ptr > _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(\n-262 const _\bV_\ba_\bl_\bu_\be_\bs& values, double lambda) const {\n-263 return _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values), lambda);\n-264 }\n-265\n-_\b2_\b6_\b7 boost::shared_ptr _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br(\n-268 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs, double lambda) const {\n-269 if (_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs))\n-270 return _\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_, lambda);\n-271 else\n-272 // failed: return empty\n-273 return boost::make_shared >(this->_\bk_\be_\by_\bs_\b_);\n-274 }\n-275\n-_\b2_\b7_\b7 virtual boost::shared_ptr >\n-_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bH_\be_\bs_\bs_\bi_\ba_\bn(\n-278 const _\bV_\ba_\bl_\bu_\be_\bs& values, double lambda = 0.0) const {\n-279 return _\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values), lambda);\n-280 }\n-281\n-_\b2_\b8_\b3 virtual boost::shared_ptr >\n-_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt(\n-284 const _\bV_\ba_\bl_\bu_\be_\bs& values, double lambda = 0.0) const {\n-285 return createRegularImplicitSchurFactor(this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values), lambda);\n-286 }\n-287\n-_\b2_\b8_\b9 virtual boost::shared_ptr >\n-_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn(\n-290 const _\bV_\ba_\bl_\bu_\be_\bs& values, double lambda = 0.0) const {\n-291 return _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values), lambda);\n-292 }\n-293\n-_\b2_\b9_\b9 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs,\n-300 const double lambda = 0.0) const {\n-301 // depending on flag set on construction we may linearize to different\n-linear factors\n-302 switch (params_._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be) {\n-303 case HESSIAN:\n-304 return _\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, lambda);\n-305 case IMPLICIT_SCHUR:\n-306 return createRegularImplicitSchurFactor(_\bc_\ba_\bm_\be_\br_\ba_\bs, lambda);\n-307 case JACOBIAN_SVD:\n-308 return _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, lambda);\n-309 case JACOBIAN_Q:\n-310 return _\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, lambda);\n-311 default:\n-312 throw std::runtime_error(\"SmartFactorlinearize: unknown mode\");\n-313 }\n-314 }\n-315\n-_\b3_\b2_\b1 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(const _\bV_\ba_\bl_\bu_\be_\bs& values,\n-322 const double lambda = 0.0) const {\n-323 // depending on flag set on construction we may linearize to different\n-linear factors\n-324 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n-325 return _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(_\bc_\ba_\bm_\be_\br_\ba_\bs, lambda);\n-326 }\n-327\n-_\b3_\b2_\b9 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(\n-330 const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n-331 return _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd(values);\n-332 }\n-333\n-_\b3_\b3_\b8 bool _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE(Matrix& E, const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n-339 bool nonDegenerate = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n-340 if (nonDegenerate)\n-341 _\bc_\ba_\bm_\be_\br_\ba_\bs._\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(*_\br_\be_\bs_\bu_\bl_\bt_\b_, boost::none, E);\n-342 return nonDegenerate;\n-343 }\n-344\n-_\b3_\b4_\b9 bool _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE(Matrix& E, const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n-350 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n-351 return _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE(E, _\bc_\ba_\bm_\be_\br_\ba_\bs);\n-352 }\n-353\n-_\b3_\b5_\b7 void _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt(\n-358 typename Base::FBlocks& Fs, Matrix& E, Vector& b,\n-359 const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs) const {\n-360\n-361 if (!_\br_\be_\bs_\bu_\bl_\bt_\b_) {\n-362 // Handle degeneracy\n-363 // TODO check flag whether we should do this\n-364 _\bU_\bn_\bi_\bt_\b3 backProjected = _\bc_\ba_\bm_\be_\br_\ba_\bs[0].backprojectPointAtInfinity(\n-365 this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.at(0));\n-366 _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, backProjected);\n-367 } else {\n-368 // valid result: just return Base version\n-369 _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_);\n-370 }\n-371 }\n-372\n-_\b3_\b7_\b4 bool _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(\n-375 typename Base::FBlocks& Fs, Matrix& E, Vector& b,\n-376 const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n-377 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n-378 bool nonDegenerate = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n-379 if (nonDegenerate)\n-380 _\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt(Fs, E, b, _\bc_\ba_\bm_\be_\br_\ba_\bs);\n-381 return nonDegenerate;\n-382 }\n-383\n-_\b3_\b8_\b5 bool _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD(\n-386 typename Base::FBlocks& Fs, Matrix& Enull, Vector& b,\n-387 const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n-388 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n-389 bool nonDegenerate = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n-390 if (nonDegenerate)\n-391 _\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD(Fs, Enull, b, _\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_);\n-392 return nonDegenerate;\n-393 }\n-394\n-_\b3_\b9_\b6 Vector _\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn(const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n-397 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n-398 bool nonDegenerate = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n-399 if (nonDegenerate)\n-400 return _\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_);\n-401 else\n-402 return Vector::Zero(_\bc_\ba_\bm_\be_\br_\ba_\bs.size() * 2);\n-403 }\n-404\n-_\b4_\b1_\b1 double _\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(const _\bC_\ba_\bm_\be_\br_\ba_\bs& _\bc_\ba_\bm_\be_\br_\ba_\bs,\n-412 boost::optional externalPoint = boost::none) const {\n-413\n-414 if (externalPoint)\n-415 _\br_\be_\bs_\bu_\bl_\bt_\b_ = _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(*externalPoint);\n-416 else\n-417 _\br_\be_\bs_\bu_\bl_\bt_\b_ = _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n-418\n-419 if (_\br_\be_\bs_\bu_\bl_\bt_\b_)\n-420 // All good, just use version in base class\n-421 return _\bB_\ba_\bs_\be_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(_\bc_\ba_\bm_\be_\br_\ba_\bs, *_\br_\be_\bs_\bu_\bl_\bt_\b_);\n-422 else if (params_._\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be == HANDLE_INFINITY) {\n-423 // Otherwise, manage the exceptions with rotation-only factors\n-424 _\bU_\bn_\bi_\bt_\b3 backprojected = _\bc_\ba_\bm_\be_\br_\ba_\bs.front().backprojectPointAtInfinity(\n-425 this->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_.at(0));\n-426 return _\bB_\ba_\bs_\be_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(cameras, backprojected);\n-427 } else\n-428 // if we don't want to manage the exceptions we discard the factor\n-429 return 0.0;\n-430 }\n-431\n-_\b4_\b3_\b3 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n-434 if (this->_\ba_\bc_\bt_\bi_\bv_\be(values)) {\n-435 return _\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(_\bB_\ba_\bs_\be_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs(values));\n-436 } else { // else of active flag\n-437 return 0.0;\n-438 }\n-439 }\n-440\n-_\b4_\b4_\b2 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt _\bp_\bo_\bi_\bn_\bt() const {\n-443 return _\br_\be_\bs_\bu_\bl_\bt_\b_;\n-444 }\n-445\n-_\b4_\b4_\b7 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt _\bp_\bo_\bi_\bn_\bt(const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n-448 _\bC_\ba_\bm_\be_\br_\ba_\bs _\bc_\ba_\bm_\be_\br_\ba_\bs = this->_\bc_\ba_\bm_\be_\br_\ba_\bs(values);\n-449 return _\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be(_\bc_\ba_\bm_\be_\br_\ba_\bs);\n-450 }\n-451\n-_\b4_\b5_\b3 bool _\bi_\bs_\bV_\ba_\bl_\bi_\bd() const { return _\br_\be_\bs_\bu_\bl_\bt_\b_.valid(); }\n-454\n-_\b4_\b5_\b6 bool _\bi_\bs_\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bt_\be() const { return _\br_\be_\bs_\bu_\bl_\bt_\b_.degenerate(); }\n-457\n-_\b4_\b5_\b9 bool _\bi_\bs_\bP_\bo_\bi_\bn_\bt_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba() const { return _\br_\be_\bs_\bu_\bl_\bt_\b_.behindCamera(); }\n-460\n-_\b4_\b6_\b2 bool _\bi_\bs_\bO_\bu_\bt_\bl_\bi_\be_\br() const { return _\br_\be_\bs_\bu_\bl_\bt_\b_.outlier(); }\n-463\n-_\b4_\b6_\b5 bool _\bi_\bs_\bF_\ba_\br_\bP_\bo_\bi_\bn_\bt() const { return _\br_\be_\bs_\bu_\bl_\bt_\b_.farPoint(); }\n-466\n-467 private:\n-468\n-_\b4_\b7_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-471 template\n-472 void serialize(ARCHIVE & ar, const unsigned int version) {\n-473 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-474 ar & BOOST_SERIALIZATION_NVP(params_);\n-475 ar & BOOST_SERIALIZATION_NVP(_\br_\be_\bs_\bu_\bl_\bt_\b_);\n-476 ar & BOOST_SERIALIZATION_NVP(_\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_);\n-477 }\n-478}\n-479;\n-480\n-482template\n-_\b4_\b8_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n-484 SmartProjectionFactor > {\n-485};\n-486\n-487} // \\ namespace gtsam\n-_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-Functions for triangulation.\n-_\bd_\ba_\bt_\ba_\bs_\be_\bt_\b._\bh\n-utility functions for loading datasets\n-_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n-Collect common parameters for SmartProjection and SmartStereoProjection\n-factors.\n-_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b._\bh\n-Base class to create smart factors on poses or cameras.\n+156private:\n+157\n+_\b1_\b5_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+160 template\n+161 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+162 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n+compatibility\n+163 ar & boost::serialization::make_nvp(\"NoiseModelFactor2\",\n+164 boost::serialization::base_object(*this));\n+165 ar & BOOST_SERIALIZATION_NVP(threshold_);\n+166 ar & BOOST_SERIALIZATION_NVP(isGreaterThan_);\n+167 }\n+168};\n+169\n+170} // \\namespace gtsam\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be\n-TriangulationResult triangulateSafe(const CameraSet< CAMERA > &cameras, const\n-typename CAMERA::MeasurementVector &measured, const TriangulationParameters\n-¶ms)\n-triangulateSafe: extensive checking of the outcome\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:680\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n-A set of cameras, all with their own calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n-static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix<\n-double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND >\n-> > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector\n-&b)\n-Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G =\n-F' * F - F' * E * P * ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n-ZVector project2(const POINT &point, boost::optional< FBlocks & > Fs=boost::\n-none, boost::optional< Matrix & > E=boost::none) const\n-Project a point (possibly Unit3 at infinity), with derivatives Note that F is a\n-sparse block-diagonal...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n-TriangulationResult is an optional point, along with the reasons why it is\n-invalid.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.h:626\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n-virtual bool active(const Values &) const\n-Checks whether a factor should be used based on a set of values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &c) const override\n+Calculate the error of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+const SharedNoiseModel & noiseModel() const\n+access to the noise model\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>_\b:_\b:_\bk_\be_\by\n+Key key() const\n+Returns a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be\n-Base class for smart factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n-void computeJacobians(FBlocks &Fs, Matrix &E, Vector &b, const Cameras\n-&cameras, const POINT &point) const\n-Compute F, E, and b (called below in both vanilla and SVD versions), where F is\n-a vector of derivativ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:285\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > >\n-createRegularImplicitSchurFactor(const Cameras &cameras, const Point3 &point,\n-double lambda=0.0, bool diagonalDamping=false) const\n-Return Jacobians as RegularImplicitSchurFactor with raw access.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:356\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bi_\bm\n-static const int Dim\n-Camera dimension.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs\n-virtual Cameras cameras(const Values &values) const\n-Collect all cameras: important that in key order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:162\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n-double totalReprojectionError(const Cameras &cameras, const POINT &point) const\n-Calculate the error of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:267\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD\n-void computeJacobiansSVD(FBlocks &Fs, Matrix &Enull, Vector &b, const Cameras\n-&cameras, const POINT &point) const\n-SVD version that produces smaller Jacobian matrices by doing an SVD\n-decomposition on E,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:300\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n-ZVector measured_\n-Measurements for each of the m views.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n-Vector unwhitenedError(const Cameras &cameras, const POINT &point, boost::\n-optional< typename Cameras::FBlocks & > Fs=boost::none, boost::optional< Matrix\n-& > E=boost::none) const\n-Compute reprojection errors [h(x)-z] = [cameras.project(p)-z] and derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:204\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bw_\bh_\bi_\bt_\be_\bn_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n-void whitenJacobians(FBlocks &F, Matrix &E, Vector &b) const\n-Whiten the Jacobians computed by computeJacobians using noiseModel_.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:347\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras\n-&cameras, const Point3 &point, double lambda=0.0) const\n-Return Jacobians as JacobianFactorSVD.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:386\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< JacobianFactorQ< Dim, ZDim > > createJacobianQFactor(const\n-Cameras &cameras, const Point3 &point, double lambda=0.0, bool\n-diagonalDamping=false) const\n-Return Jacobians as JacobianFactorQ.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:369\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorBase.h:187\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be\n-LinearizationMode linearizationMode\n-How to linearize the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n-double retriangulationThreshold\n-threshold to decide whether to re-triangulate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bd_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be\n-DegeneracyMode degeneracyMode\n-How to linearize the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartFactorParams.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-SmartProjectionFactor: triangulates point and keeps an estimate of it around.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\be_\bc_\bi_\bd_\be_\bI_\bf_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be\n-bool decideIfTriangulate(const Cameras &cameras) const\n-Check if the new linearization point is the same as the one used for previous\n-triangulation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > > createJacobianQFactor\n-(const Values &values, double lambda) const\n-Create JacobianFactorQ factor, takes values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:261\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bS_\bV_\bD_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< JacobianFactor > createJacobianSVDFactor(const Cameras\n-&cameras, double lambda) const\n-Different (faster) way to compute a JacobianFactorSVD factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:267\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bW_\bi_\bt_\bh_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bd_\bP_\bo_\bi_\bn_\bt\n-void computeJacobiansWithTriangulatedPoint(typename Base::FBlocks &Fs, Matrix\n-&E, Vector &b, const Cameras &cameras) const\n-Compute F, E only (called below in both vanilla and SVD versions) Assumes the\n-point has been computed...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:357\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bH_\be_\bs_\bs_\bi_\ba_\bn\n-virtual boost::shared_ptr< RegularHessianFactor< Base::Dim > >\n-linearizeToHessian(const Values &values, double lambda=0.0) const\n-Linearize to a Hessianfactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:277\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bO_\bu_\bt_\bl_\bi_\be_\br\n-bool isOutlier() const\n-return the outlier state\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:462\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE\n-bool triangulateAndComputeE(Matrix &E, const Values &values) const\n-Triangulate and compute derivative of error with respect to point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:349\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd\n-boost::shared_ptr< GaussianFactor > linearizeDamped(const Cameras &cameras,\n-const double lambda=0.0) const\n-Linearize to Gaussian Factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:299\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bF_\ba_\br_\bP_\bo_\bi_\bn_\bt\n-bool isFarPoint() const\n-return the farPoint state\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:465\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\br_\be_\bs_\bu_\bl_\bt_\b_\n-TriangulationResult result_\n-result from triangulateSafe\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< RegularHessianFactor< Base::Dim > > createHessianFactor\n-(const Cameras &cameras, const double lambda=0.0, bool diagonalDamping=false)\n-const\n-Create a Hessianfactor that is an approximation of error(p).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:199\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bS_\ba_\bf_\be\n-TriangulationResult triangulateSafe(const Cameras &cameras) const\n-Call gtsam::triangulateSafe iff we need to re-triangulate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-~SmartProjectionFactor() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &values) const override\n-Calculate total reprojection error.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:433\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bV_\ba_\bl_\bi_\bd\n-bool isValid() const\n-Is result valid?\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:453\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bP_\bo_\bs_\be_\bs_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b_\n-std::vector< Pose3, Eigen::aligned_allocator< Pose3 > >\n-cameraPosesTriangulation_\n-current triangulation poses\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bE\n-bool triangulateAndComputeE(Matrix &E, const Cameras &cameras) const\n-Triangulate and compute derivative of error with respect to point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:338\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt\n-virtual boost::shared_ptr< RegularImplicitSchurFactor< CAMERA > >\n-linearizeToImplicit(const Values &values, double lambda=0.0) const\n-Linearize to an Implicit Schur factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:283\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bo_\bt_\ba_\bl_\bR_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n-double totalReprojectionError(const Cameras &cameras, boost::optional< Point3 >\n-externalPoint=boost::none) const\n-Calculate the error of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:411\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bT_\bo_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-virtual boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > >\n-linearizeToJacobian(const Values &values, double lambda=0.0) const\n-Linearize to a JacobianfactorQ.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:289\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bt_\be\n-bool isDegenerate() const\n-return the degenerate state\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:456\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n-bool triangulateAndComputeJacobians(typename Base::FBlocks &Fs, Matrix &E,\n-Vector &b, const Values &values) const\n-Version that takes values, and creates the point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:374\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba\n-CAMERA Camera\n-shorthand for a set of cameras\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bQ_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< JacobianFactorQ< Base::Dim, 2 > > createJacobianQFactor\n-(const Cameras &cameras, double lambda) const\n-Create JacobianFactorQ factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:251\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+const ValueType at(Key j) const\n+Retrieve a variable by key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1\n+Unary inequality constraint forcing a scalar to be greater/less than a fixed\n+threshold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n+bool active(const Values &c) const override\n+active when constraint NOT met\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1\n+BoundingConstraint1(Key key, double threshold, bool isGreaterThan, double\n+mu=1000.0)\n+flag for greater/less than\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+virtual double value(const X &x, boost::optional< Matrix & > H=boost::none)\n+const =0\n+function producing a scalar value to compare to the threshold Must have\n+optional argument for derivat...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2\n+Binary scalar inequality constraint, with a similar value() function to\n+implement for specific system...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n+bool active(const Values &c) const override\n+active when constraint NOT met\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2\n+BoundingConstraint2(Key key1, Key key2, double threshold, bool isGreaterThan,\n+double mu=1000.0)\n+flag for greater/less than\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n friend class boost::serialization::access\n Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:470\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\bo_\bi_\bn_\bt\n-TriangulationResult point(const Values &values) const\n-COMPUTE the landmark.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:447\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-SmartProjectionFactor(const SharedNoiseModel &sharedNoiseModel, const\n-SmartProjectionParams ¶ms=SmartProjectionParams())\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bP_\bo_\bi_\bn_\bt_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba\n-bool isPointBehindCamera() const\n-return the cheirality status flag\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:459\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianFactor > linearize(const Values &values) const\n-override\n-linearize\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:329\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bA_\bn_\bd_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs_\bS_\bV_\bD\n-bool triangulateAndComputeJacobiansSVD(typename Base::FBlocks &Fs, Matrix\n-&Enull, Vector &b, const Values &values) const\n-takes values\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:385\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn\n-Vector reprojectionErrorAfterTriangulation(const Values &values) const\n-Calculate vector of re-projection errors, before applying noise model.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:396\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\bo_\bi_\bn_\bt\n-TriangulationResult point() const\n-return the landmark\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:442\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\be_\bF_\bo_\br_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-bool triangulateForLinearize(const Cameras &cameras) const\n-Possibly re-triangulate before calculating Jacobians.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:193\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shorthand for a smart pointer to a factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-SmartProjectionFactor()\n-Default constructor, only for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bD_\ba_\bm_\bp_\be_\bd\n-boost::shared_ptr< GaussianFactor > linearizeDamped(const Values &values, const\n-double lambda=0.0) const\n-Linearize to Gaussian Factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SmartProjectionFactor.h:321\n-_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+virtual double value(const X1 &x1, const X2 &x2, boost::optional< Matrix & >\n+H1=boost::none, boost::optional< Matrix & > H2=boost::none) const =0\n+function producing a scalar value to compare to the threshold Must have\n+optional argument for derivat...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01334.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01334.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/BoundingConstraint.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/GeneralSFMFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,45 +96,50 @@\n \n \n \n
\n \n-
BoundingConstraint.h File Reference
\n+
GeneralSFMFactor.h File Reference
\n
\n
\n \n-

Provides partially implemented constraints to implement bounds. \n+

a general SFM factor with an unknown calibration \n More...

\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n+\n+\n+\n+\n \n

\n Classes

struct  gtsam::BoundingConstraint1< VALUE >
 Unary inequality constraint forcing a scalar to be greater/less than a fixed threshold. More...
class  gtsam::GeneralSFMFactor< CAMERA, LANDMARK >
 Non-linear factor for a constraint derived from a 2D measurement. More...
 
struct  gtsam::BoundingConstraint2< VALUE1, VALUE2 >
 Binary scalar inequality constraint, with a similar value() function to implement for specific systems. More...
struct  gtsam::traits< GeneralSFMFactor< CAMERA, LANDMARK > >
 
class  gtsam::GeneralSFMFactor2< CALIBRATION >
 Non-linear factor for a constraint derived from a 2D measurement. More...
 
struct  gtsam::traits< GeneralSFMFactor2< CALIBRATION > >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Provides partially implemented constraints to implement bounds.

\n-
Author
Alex Cunningham
\n+

a general SFM factor with an unknown calibration

\n+
Date
Dec 15, 2010
\n+
Author
Kai Ni
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,36 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BoundingConstraint.h File Reference\n-Provides partially implemented constraints to implement bounds. _\bM_\bo_\br_\be_\b._\b._\b.\n+GeneralSFMFactor.h File Reference\n+a general SFM factor with an unknown calibration _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n-\u00a0 Unary inequality constraint forcing a scalar to be greater/less than a\n- fixed threshold. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b _\b>\n+\u00a0 Non-linear factor for a constraint derived from a 2D measurement.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b1_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b2_\b _\b>\n-\u00a0 Binary scalar inequality constraint, with a similar _\bv_\ba_\bl_\bu_\be_\b(_\b) function\n- to implement for specific systems. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b _\b>_\b _\b>\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n+\u00a0 Non-linear factor for a constraint derived from a 2D measurement.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Provides partially implemented constraints to implement bounds.\n+a general SFM factor with an unknown calibration\n+ Date\n+ Dec 15, 2010\n Author\n- Alex Cunningham\n+ Kai Ni\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b._\bh\n+ * _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01334.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01334.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,5 @@\n var a01334 = [\n- [\"gtsam::BoundingConstraint2< VALUE1, VALUE2 >\", \"a04784.html\", \"a04784\"]\n+ [\"gtsam::traits< GeneralSFMFactor< CAMERA, LANDMARK > >\", \"a04844.html\", null],\n+ [\"gtsam::GeneralSFMFactor2< CALIBRATION >\", \"a04848.html\", \"a04848\"],\n+ [\"gtsam::traits< GeneralSFMFactor2< CALIBRATION > >\", \"a04852.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01334_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01334_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/BoundingConstraint.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/GeneralSFMFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,193 +98,346 @@\n
No Matches
\n \n \n \n \n \n
\n-
BoundingConstraint.h
\n+
GeneralSFMFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Lie.h>
\n-\n+
21#pragma once
\n
22
\n-
23namespace gtsam {
\n-
24
\n-
32template<class VALUE>
\n-
\n-\n-
34 typedef VALUE X;
\n-\n-
36 typedef boost::shared_ptr<BoundingConstraint1<VALUE> > shared_ptr;
\n-
37
\n-
38 double threshold_;
\n-
39 bool isGreaterThan_;
\n-
40
\n-
\n-
41 BoundingConstraint1(Key key, double threshold,
\n-
42 bool isGreaterThan, double mu = 1000.0) :
\n-
43 Base(noiseModel::Constrained::All(1, mu), key),
\n-
44 threshold_(threshold), isGreaterThan_(isGreaterThan) {
\n-
45 }
\n-
\n-
46
\n-
47 ~BoundingConstraint1() override {}
\n-
48
\n-
49 inline double threshold() const { return threshold_; }
\n-
50 inline bool isGreaterThan() const { return isGreaterThan_; }
\n+\n+\n+\n+\n+\n+\n+\n+
30#include <gtsam/base/concepts.h>
\n+
31#include <gtsam/base/Manifold.h>
\n+
32#include <gtsam/base/Matrix.h>
\n+\n+
34#include <gtsam/base/types.h>
\n+
35#include <gtsam/base/Testable.h>
\n+
36#include <gtsam/base/Vector.h>
\n+
37#include <gtsam/base/timing.h>
\n+
38
\n+
39#include <boost/none.hpp>
\n+
40#include <boost/optional/optional.hpp>
\n+
41#include <boost/serialization/nvp.hpp>
\n+
42#include <boost/smart_ptr/shared_ptr.hpp>
\n+
43#include <iostream>
\n+
44#include <string>
\n+
45
\n+
46namespace boost {
\n+
47namespace serialization {
\n+
48class access;
\n+
49} /* namespace serialization */
\n+
50} /* namespace boost */
\n
51
\n-
57 virtual double value(const X& x, boost::optional<Matrix&> H =
\n-
58 boost::none) const = 0;
\n-
59
\n-
\n-
61 bool active(const Values& c) const override {
\n-
62 // note: still active at equality to avoid zigzagging
\n-
63 double x = value(c.at<X>(this->key()));
\n-
64 return (isGreaterThan_) ? x <= threshold_ : x >= threshold_;
\n-
65 }
\n-
\n-
66
\n-
67 Vector evaluateError(const X& x, boost::optional<Matrix&> H =
\n-
68 boost::none) const override {
\n-
69 Matrix D;
\n-
70 double error = value(x, D) - threshold_;
\n-
71 if (H) {
\n-
72 if (isGreaterThan_) *H = D;
\n-
73 else *H = -1.0 * D;
\n-
74 }
\n+
52namespace gtsam {
\n+
53
\n+
59template<class CAMERA, class LANDMARK>
\n+
\n+
60class GeneralSFMFactor: public NoiseModelFactorN<CAMERA, LANDMARK> {
\n+
61
\n+
62 GTSAM_CONCEPT_MANIFOLD_TYPE(CAMERA)
\n+
63 GTSAM_CONCEPT_MANIFOLD_TYPE(LANDMARK)
\n+
64
\n+
65 static const int DimC = FixedDimension<CAMERA>::value;
\n+
66 static const int DimL = FixedDimension<LANDMARK>::value;
\n+
67 typedef Eigen::Matrix<double, 2, DimC> JacobianC;
\n+
68 typedef Eigen::Matrix<double, 2, DimL> JacobianL;
\n+
69
\n+
70protected:
\n+
71
\n+\n+
73
\n+
74public:
\n
75
\n-
76 if (isGreaterThan_)
\n-
77 return (Vector(1) << error).finished();
\n-
78 else
\n-
79 return -1.0 * (Vector(1) << error).finished();
\n-
80 }
\n+\n+\n+
78
\n+
79 // shorthand for a smart pointer to a factor
\n+
80 typedef boost::shared_ptr<This> shared_ptr;
\n
81
\n-
82private:
\n-
83
\n-\n-
86 template<class ARCHIVE>
\n-
87 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
88 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
89 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n-
90 boost::serialization::base_object<Base>(*this));
\n-
91 ar & BOOST_SERIALIZATION_NVP(threshold_);
\n-
92 ar & BOOST_SERIALIZATION_NVP(isGreaterThan_);
\n-
93 }
\n-
94};
\n-
\n-
95
\n-
100template<class VALUE1, class VALUE2>
\n-
\n-
101struct BoundingConstraint2: public NoiseModelFactorN<VALUE1, VALUE2> {
\n-
102 typedef VALUE1 X1;
\n-
103 typedef VALUE2 X2;
\n-
104
\n-\n-
106 typedef boost::shared_ptr<BoundingConstraint2<VALUE1, VALUE2> > shared_ptr;
\n-
107
\n-
108 double threshold_;
\n-
109 bool isGreaterThan_;
\n-
110
\n-
\n-
111 BoundingConstraint2(Key key1, Key key2, double threshold,
\n-
112 bool isGreaterThan, double mu = 1000.0)
\n-
113 : Base(noiseModel::Constrained::All(1, mu), key1, key2),
\n-
114 threshold_(threshold), isGreaterThan_(isGreaterThan) {}
\n-
\n+
\n+\n+
90 Key cameraKey, Key landmarkKey)
\n+
91 : Base(model, cameraKey, landmarkKey), measured_(measured) {}
\n+
\n+
92
\n+
93 GeneralSFMFactor() : measured_(0.0, 0.0) {}
\n+
95 GeneralSFMFactor(const Point2& p) : measured_(p) {}
\n+
97 GeneralSFMFactor(double x, double y) : measured_(x, y) {}
\n+\n+
99 ~GeneralSFMFactor() override {}
\n+
100
\n+
102 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
103 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
104 gtsam::NonlinearFactor::shared_ptr(new This(*this)));}
\n+
105
\n+
111 void print(const std::string& s = "SFMFactor", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
112 Base::print(s, keyFormatter);
\n+
113 traits<Point2>::Print(measured_, s + ".z");
\n+
114 }
\n
115
\n-
116 ~BoundingConstraint2() override {}
\n-
117
\n-
118 inline double threshold() const { return threshold_; }
\n-
119 inline bool isGreaterThan() const { return isGreaterThan_; }
\n-
120
\n-
125 virtual double value(const X1& x1, const X2& x2,
\n-
126 boost::optional<Matrix&> H1 = boost::none,
\n-
127 boost::optional<Matrix&> H2 = boost::none) const = 0;
\n-
128
\n-
\n-
130 bool active(const Values& c) const override {
\n-
131 // note: still active at equality to avoid zigzagging
\n-
132 double x = value(c.at<X1>(this->key1()), c.at<X2>(this->key2()));
\n-
133 return (isGreaterThan_) ? x <= threshold_ : x >= threshold_;
\n-
134 }
\n-
\n-
135
\n-
136 Vector evaluateError(const X1& x1, const X2& x2,
\n-
137 boost::optional<Matrix&> H1 = boost::none,
\n-
138 boost::optional<Matrix&> H2 = boost::none) const override {
\n-
139 Matrix D1, D2;
\n-
140 double error = value(x1, x2, D1, D2) - threshold_;
\n-
141 if (H1) {
\n-
142 if (isGreaterThan_) *H1 = D1;
\n-
143 else *H1 = -1.0 * D1;
\n-
144 }
\n-
145 if (H2) {
\n-
146 if (isGreaterThan_) *H2 = D2;
\n-
147 else *H2 = -1.0 * D2;
\n-
148 }
\n-
149
\n-
150 if (isGreaterThan_)
\n-
151 return (Vector(1) << error).finished();
\n-
152 else
\n-
153 return -1.0 * (Vector(1) << error).finished();
\n-
154 }
\n-
155
\n-
156private:
\n+
119 bool equals(const NonlinearFactor &p, double tol = 1e-9) const override {
\n+
120 const This* e = dynamic_cast<const This*>(&p);
\n+
121 return e && Base::equals(p, tol) && traits<Point2>::Equals(this->measured_, e->measured_, tol);
\n+
122 }
\n+
123
\n+
125 Vector evaluateError(const CAMERA& camera, const LANDMARK& point,
\n+
126 boost::optional<Matrix&> H1=boost::none, boost::optional<Matrix&> H2=boost::none) const override {
\n+
127 try {
\n+
128 return camera.project2(point,H1,H2) - measured_;
\n+
129 }
\n+
130 catch( CheiralityException& e) {
\n+
131 if (H1) *H1 = JacobianC::Zero();
\n+
132 if (H2) *H2 = JacobianL::Zero();
\n+
133 //TODO Print the exception via logging
\n+
134 return Z_2x1;
\n+
135 }
\n+
136 }
\n+
137
\n+
139 boost::shared_ptr<GaussianFactor> linearize(const Values& values) const override {
\n+
140 // Only linearize if the factor is active
\n+
141 if (!this->active(values)) return boost::shared_ptr<JacobianFactor>();
\n+
142
\n+
143 const Key key1 = this->key1(), key2 = this->key2();
\n+
144 JacobianC H1;
\n+
145 JacobianL H2;
\n+
146 Vector2 b;
\n+
147 try {
\n+
148 const CAMERA& camera = values.at<CAMERA>(key1);
\n+
149 const LANDMARK& point = values.at<LANDMARK>(key2);
\n+
150 b = measured() - camera.project2(point, H1, H2);
\n+
151 } catch (CheiralityException& e) {
\n+
152 H1.setZero();
\n+
153 H2.setZero();
\n+
154 b.setZero();
\n+
155 //TODO Print the exception via logging
\n+
156 }
\n
157
\n-\n-
160 template<class ARCHIVE>
\n-
161 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
162 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n-
163 ar & boost::serialization::make_nvp("NoiseModelFactor2",
\n-
164 boost::serialization::base_object<Base>(*this));
\n-
165 ar & BOOST_SERIALIZATION_NVP(threshold_);
\n-
166 ar & BOOST_SERIALIZATION_NVP(isGreaterThan_);
\n-
167 }
\n-
168};
\n-
\n-
169
\n-
170} // \\namespace gtsam
\n-
Base class and basic functions for Lie types.
\n-
Non-linear factor base classes.
\n+
158 // Whiten the system if needed
\n+
159 const SharedNoiseModel& noiseModel = this->noiseModel();
\n+
160 if (noiseModel && !noiseModel->isUnit()) {
\n+
161 // TODO: implement WhitenSystem for fixed size matrices and include
\n+
162 // above
\n+
163 H1 = noiseModel->Whiten(H1);
\n+
164 H2 = noiseModel->Whiten(H2);
\n+
165 b = noiseModel->Whiten(b);
\n+
166 }
\n+
167
\n+
168 // Create new (unit) noiseModel, preserving constraints if applicable
\n+
169 SharedDiagonal model;
\n+
170 if (noiseModel && noiseModel->isConstrained()) {
\n+
171 model = boost::static_pointer_cast<noiseModel::Constrained>(noiseModel)->unit();
\n+
172 }
\n+
173
\n+
174 return boost::make_shared<BinaryJacobianFactor<2, DimC, DimL> >(key1, H1, key2, H2, b, model);
\n+
175 }
\n+
176
\n+
178 inline const Point2 measured() const {
\n+
179 return measured_;
\n+
180 }
\n+
181
\n+
182private:
\n+
184 friend class boost::serialization::access;
\n+
185 template<class Archive>
\n+
186 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
187 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n+
188 ar & boost::serialization::make_nvp("NoiseModelFactor2",
\n+
189 boost::serialization::base_object<Base>(*this));
\n+
190 ar & BOOST_SERIALIZATION_NVP(measured_);
\n+
191 }
\n+
192};
\n+
\n+
193
\n+
194template<class CAMERA, class LANDMARK>
\n+
\n+
195struct traits<GeneralSFMFactor<CAMERA, LANDMARK> > : Testable<
\n+
196 GeneralSFMFactor<CAMERA, LANDMARK> > {
\n+
197};
\n+
\n+
198
\n+
203template<class CALIBRATION>
\n+
\n+
204class GeneralSFMFactor2: public NoiseModelFactorN<Pose3, Point3, CALIBRATION> {
\n+
205
\n+
206 GTSAM_CONCEPT_MANIFOLD_TYPE(CALIBRATION)
\n+
207 static const int DimK = FixedDimension<CALIBRATION>::value;
\n+
208
\n+
209protected:
\n+
210
\n+\n+
212
\n+
213public:
\n+
214
\n+\n+\n+\n+
218
\n+
219 // shorthand for a smart pointer to a factor
\n+
220 typedef boost::shared_ptr<This> shared_ptr;
\n+
221
\n+
\n+
230 GeneralSFMFactor2(const Point2& measured, const SharedNoiseModel& model, Key poseKey, Key landmarkKey, Key calibKey) :
\n+
231 Base(model, poseKey, landmarkKey, calibKey), measured_(measured) {}
\n+
\n+\n+
233
\n+
\n+
234 ~GeneralSFMFactor2() override {}
\n+
235
\n+
\n+
237 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
238 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
239 gtsam::NonlinearFactor::shared_ptr(new This(*this)));}
\n+
\n+
240
\n+
\n+
246 void print(const std::string& s = "SFMFactor2", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
247 Base::print(s, keyFormatter);
\n+\n+
249 }
\n+
\n+
250
\n+
\n+
254 bool equals(const NonlinearFactor &p, double tol = 1e-9) const override {
\n+
255 const This* e = dynamic_cast<const This*>(&p);
\n+
256 return e && Base::equals(p, tol) && traits<Point2>::Equals(this->measured_, e->measured_, tol);
\n+
257 }
\n+
\n+
258
\n+
\n+
260 Vector evaluateError(const Pose3& pose3, const Point3& point, const CALIBRATION &calib,
\n+
261 boost::optional<Matrix&> H1=boost::none,
\n+
262 boost::optional<Matrix&> H2=boost::none,
\n+
263 boost::optional<Matrix&> H3=boost::none) const override
\n+
264 {
\n+
265 try {
\n+
266 Camera camera(pose3,calib);
\n+
267 return camera.project(point, H1, H2, H3) - measured_;
\n+
268 }
\n+
269 catch( CheiralityException& e) {
\n+
270 if (H1) *H1 = Matrix::Zero(2, 6);
\n+
271 if (H2) *H2 = Matrix::Zero(2, 3);
\n+
272 if (H3) *H3 = Matrix::Zero(2, DimK);
\n+
273 std::cout << e.what() << ": Landmark "<< DefaultKeyFormatter(this->key2())
\n+
274 << " behind Camera " << DefaultKeyFormatter(this->key1()) << std::endl;
\n+
275 }
\n+
276 return Z_2x1;
\n+
277 }
\n+
\n+
278
\n+
\n+
280 inline const Point2 measured() const {
\n+
281 return measured_;
\n+
282 }
\n+
\n+
283
\n+
284private:
\n+\n+
287 template<class Archive>
\n+
288 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
289 // NoiseModelFactor3 instead of NoiseModelFactorN for backward compatibility
\n+
290 ar & boost::serialization::make_nvp("NoiseModelFactor3",
\n+
291 boost::serialization::base_object<Base>(*this));
\n+
292 ar & BOOST_SERIALIZATION_NVP(measured_);
\n+
293 }
\n+
294};
\n+
295
\n+
296template<class CALIBRATION>
\n+
\n+
297struct traits<GeneralSFMFactor2<CALIBRATION> > : Testable<
\n+
298 GeneralSFMFactor2<CALIBRATION> > {
\n+
299};
\n+
\n+
300
\n+
301} //namespace
\n+
\n+
\n+
Typedefs for easier changing of types.
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Base class and basic functions for Manifold types.
\n+
Concept check for values that can be used in unit tests.
\n+
typedef and functions to augment Eigen's VectorXd
\n+
Access to matrices via blocks of pre-defined sizes.
\n+
Timing utilities.
\n+
3D Pose
\n+
Base class for all pinhole cameras.
\n+
3D Point
\n+
2D Point
\n+
A binary JacobianFactor specialization that uses fixed matrix math for speed.
\n+\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
double error(const Values &c) const override
Calculate the error of the factor.
Definition NonlinearFactor.cpp:138
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
Definition CalibratedCamera.h:32
\n+
A pinhole camera class that has a Pose3 and a Calibration.
Definition PinholeCamera.h:33
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n-
Unary inequality constraint forcing a scalar to be greater/less than a fixed threshold.
Definition BoundingConstraint.h:33
\n-
bool active(const Values &c) const override
active when constraint NOT met
Definition BoundingConstraint.h:61
\n-
BoundingConstraint1(Key key, double threshold, bool isGreaterThan, double mu=1000.0)
flag for greater/less than
Definition BoundingConstraint.h:41
\n-
friend class boost::serialization::access
Serialization function.
Definition BoundingConstraint.h:85
\n-
virtual double value(const X &x, boost::optional< Matrix & > H=boost::none) const =0
function producing a scalar value to compare to the threshold Must have optional argument for derivat...
\n-
Binary scalar inequality constraint, with a similar value() function to implement for specific system...
Definition BoundingConstraint.h:101
\n-
bool active(const Values &c) const override
active when constraint NOT met
Definition BoundingConstraint.h:130
\n-
BoundingConstraint2(Key key1, Key key2, double threshold, bool isGreaterThan, double mu=1000.0)
flag for greater/less than
Definition BoundingConstraint.h:111
\n-
friend class boost::serialization::access
Serialization function.
Definition BoundingConstraint.h:159
\n-
virtual double value(const X1 &x1, const X2 &x2, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const =0
function producing a scalar value to compare to the threshold Must have optional argument for derivat...
\n+
Non-linear factor for a constraint derived from a 2D measurement.
Definition GeneralSFMFactor.h:60
\n+
boost::shared_ptr< GaussianFactor > linearize(const Values &values) const override
Linearize using fixed-size matrices.
Definition GeneralSFMFactor.h:138
\n+
Vector evaluateError(const CAMERA &camera, const LANDMARK &point, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
h(x)-z
Definition GeneralSFMFactor.h:124
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition GeneralSFMFactor.h:101
\n+
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition GeneralSFMFactor.h:118
\n+
const Point2 measured() const
return the measured
Definition GeneralSFMFactor.h:177
\n+
GeneralSFMFactor(const Point2 &measured, const SharedNoiseModel &model, Key cameraKey, Key landmarkKey)
Constructor.
Definition GeneralSFMFactor.h:89
\n+
GeneralSFMFactor()
default constructor
Definition GeneralSFMFactor.h:93
\n+
GeneralSFMFactor< CAMERA, LANDMARK > This
typedef for this object
Definition GeneralSFMFactor.h:76
\n+
~GeneralSFMFactor() override
destructor
Definition GeneralSFMFactor.h:98
\n+
NoiseModelFactorN< CAMERA, LANDMARK > Base
typedef for the base class
Definition GeneralSFMFactor.h:77
\n+
void print(const std::string &s="SFMFactor", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition GeneralSFMFactor.h:110
\n+
friend class boost::serialization::access
Serialization function.
Definition GeneralSFMFactor.h:183
\n+
Point2 measured_
the 2D measurement
Definition GeneralSFMFactor.h:72
\n+
Non-linear factor for a constraint derived from a 2D measurement.
Definition GeneralSFMFactor.h:204
\n+
GeneralSFMFactor2()
default constructor
Definition GeneralSFMFactor.h:232
\n+
~GeneralSFMFactor2() override
destructor
Definition GeneralSFMFactor.h:234
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition GeneralSFMFactor.h:237
\n+
NoiseModelFactorN< Pose3, Point3, CALIBRATION > Base
typedef for the base class
Definition GeneralSFMFactor.h:217
\n+
Vector evaluateError(const Pose3 &pose3, const Point3 &point, const CALIBRATION &calib, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none, boost::optional< Matrix & > H3=boost::none) const override
h(x)-z
Definition GeneralSFMFactor.h:260
\n+
void print(const std::string &s="SFMFactor2", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition GeneralSFMFactor.h:246
\n+
Point2 measured_
the 2D measurement
Definition GeneralSFMFactor.h:211
\n+
const Point2 measured() const
return the measured
Definition GeneralSFMFactor.h:280
\n+
PinholeCamera< CALIBRATION > Camera
typedef for camera type
Definition GeneralSFMFactor.h:216
\n+
GeneralSFMFactor2(const Point2 &measured, const SharedNoiseModel &model, Key poseKey, Key landmarkKey, Key calibKey)
Constructor.
Definition GeneralSFMFactor.h:230
\n+
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition GeneralSFMFactor.h:254
\n+
friend class boost::serialization::access
Serialization function.
Definition GeneralSFMFactor.h:286
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,232 +1,477 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BoundingConstraint.h\n+GeneralSFMFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21#pragma once\n 22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-32template\n-_\b3_\b3struct _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-34 typedef VALUE X;\n-35 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b> _\bB_\ba_\bs_\be;\n-36 typedef boost::shared_ptr > shared_ptr;\n-37\n-38 double threshold_;\n-39 bool isGreaterThan_;\n-40\n-_\b4_\b1 _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1(_\bK_\be_\by _\bk_\be_\by, double threshold,\n-42 bool isGreaterThan, double mu = 1000.0) :\n-43 _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(1, mu), _\bk_\be_\by),\n-44 threshold_(threshold), isGreaterThan_(isGreaterThan) {\n-45 }\n-46\n-47 _\b~_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1() override {}\n-48\n-49 inline double threshold() const { return threshold_; }\n-50 inline bool isGreaterThan() const { return isGreaterThan_; }\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n+30#include \n+31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+32#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+33#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+34#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+35#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+36#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+37#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n+38\n+39#include \n+40#include \n+41#include \n+42#include \n+43#include \n+44#include \n+45\n+46namespace boost {\n+47namespace serialization {\n+48class access;\n+49} /* namespace serialization */\n+50} /* namespace boost */\n 51\n-_\b5_\b7 virtual double _\bv_\ba_\bl_\bu_\be(const X& x, boost::optional H =\n-58 boost::none) const = 0;\n-59\n-_\b6_\b1 bool _\ba_\bc_\bt_\bi_\bv_\be(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override {\n-62 // note: still active at equality to avoid zigzagging\n-63 double x = _\bv_\ba_\bl_\bu_\be(c._\ba_\bt(this->key()));\n-64 return (isGreaterThan_) ? x <= threshold_ : x >= threshold_;\n-65 }\n-66\n-67 Vector evaluateError(const X& x, boost::optional H =\n-68 boost::none) const override {\n-69 Matrix D;\n-70 double _\be_\br_\br_\bo_\br = _\bv_\ba_\bl_\bu_\be(x, D) - threshold_;\n-71 if (H) {\n-72 if (isGreaterThan_) *H = D;\n-73 else *H = -1.0 * D;\n-74 }\n+52namespace _\bg_\bt_\bs_\ba_\bm {\n+53\n+59template\n+_\b6_\b0class _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+61\n+62 GTSAM_CONCEPT_MANIFOLD_TYPE(CAMERA)\n+63 GTSAM_CONCEPT_MANIFOLD_TYPE(LANDMARK)\n+64\n+65 static const int DimC = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n+66 static const int DimL = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n+67 typedef Eigen::Matrix JacobianC;\n+68 typedef Eigen::Matrix JacobianL;\n+69\n+70protected:\n+71\n+_\b7_\b2 _\bP_\bo_\bi_\bn_\bt_\b2 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+73\n+74public:\n 75\n-76 if (isGreaterThan_)\n-77 return (Vector(1) << _\be_\br_\br_\bo_\br).finished();\n-78 else\n-79 return -1.0 * (Vector(1) << _\be_\br_\br_\bo_\br).finished();\n-80 }\n+_\b7_\b6 typedef _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b> _\bT_\bh_\bi_\bs;\n+_\b7_\b7 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b> _\bB_\ba_\bs_\be;\n+78\n+79 // shorthand for a smart pointer to a factor\n+80 typedef boost::shared_ptr shared_ptr;\n 81\n-82private:\n-83\n-_\b8_\b5 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-86 template\n-87 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-88 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility\n-89 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n-90 boost::serialization::base_object(*this));\n-91 ar & BOOST_SERIALIZATION_NVP(threshold_);\n-92 ar & BOOST_SERIALIZATION_NVP(isGreaterThan_);\n-93 }\n-94};\n-95\n-100template\n-_\b1_\b0_\b1struct _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-102 typedef VALUE1 X1;\n-103 typedef VALUE2 X2;\n-104\n-105 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b1_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b2_\b> _\bB_\ba_\bs_\be;\n-106 typedef boost::shared_ptr > shared_ptr;\n-107\n-108 double threshold_;\n-109 bool isGreaterThan_;\n-110\n-_\b1_\b1_\b1 _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2(_\bK_\be_\by key1, _\bK_\be_\by key2, double threshold,\n-112 bool isGreaterThan, double mu = 1000.0)\n-113 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(1, mu), key1, key2),\n-114 threshold_(threshold), isGreaterThan_(isGreaterThan) {}\n+_\b8_\b9 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n+90 _\bK_\be_\by cameraKey, _\bK_\be_\by landmarkKey)\n+91 : _\bB_\ba_\bs_\be(model, cameraKey, landmarkKey), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd) {}\n+92\n+_\b9_\b3 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br() : _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(0.0, 0.0) {}\n+95 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b2& p) : _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(p) {}\n+97 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br(double x, double y) : _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(x, y) {}\n+_\b9_\b8\n+99 _\b~_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+100\n+102 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+103 return boost::static_pointer_cast(\n+104 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));}\n+105\n+111 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"SFMFactor\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n+keyFormatter = DefaultKeyFormatter) const override {\n+112 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n+113 traits::Print(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, s + \".z\");\n+114 }\n 115\n-116 _\b~_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2() override {}\n-117\n-118 inline double threshold() const { return threshold_; }\n-119 inline bool isGreaterThan() const { return isGreaterThan_; }\n-120\n-_\b1_\b2_\b5 virtual double _\bv_\ba_\bl_\bu_\be(const X1& x1, const X2& x2,\n-126 boost::optional H1 = boost::none,\n-127 boost::optional H2 = boost::none) const = 0;\n-128\n-_\b1_\b3_\b0 bool _\ba_\bc_\bt_\bi_\bv_\be(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override {\n-131 // note: still active at equality to avoid zigzagging\n-132 double x = _\bv_\ba_\bl_\bu_\be(c._\ba_\bt(this->key1()), c._\ba_\bt(this->key2()));\n-133 return (isGreaterThan_) ? x <= threshold_ : x >= threshold_;\n-134 }\n-135\n-136 Vector evaluateError(const X1& x1, const X2& x2,\n-137 boost::optional H1 = boost::none,\n-138 boost::optional H2 = boost::none) const override {\n-139 Matrix D1, D2;\n-140 double _\be_\br_\br_\bo_\br = _\bv_\ba_\bl_\bu_\be(x1, x2, D1, D2) - threshold_;\n-141 if (H1) {\n-142 if (isGreaterThan_) *H1 = D1;\n-143 else *H1 = -1.0 * D1;\n-144 }\n-145 if (H2) {\n-146 if (isGreaterThan_) *H2 = D2;\n-147 else *H2 = -1.0 * D2;\n-148 }\n-149\n-150 if (isGreaterThan_)\n-151 return (Vector(1) << _\be_\br_\br_\bo_\br).finished();\n-152 else\n-153 return -1.0 * (Vector(1) << _\be_\br_\br_\bo_\br).finished();\n-154 }\n-155\n-156private:\n+119 bool _\be_\bq_\bu_\ba_\bl_\bs(const NonlinearFactor &p, double tol = 1e-9) const override {\n+120 const _\bT_\bh_\bi_\bs* e = dynamic_cast(&p);\n+121 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol) && traits::Equals(this->measured_,\n+e->measured_, tol);\n+122 }\n+123\n+125 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const CAMERA& camera, const LANDMARK& point,\n+126 boost::optional H1=boost::none, boost::optional\n+H2=boost::none) const override {\n+127 try {\n+128 return camera.project2(point,H1,H2) - _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+129 }\n+130 catch( CheiralityException& e) {\n+131 if (H1) *H1 = JacobianC::Zero();\n+132 if (H2) *H2 = JacobianL::Zero();\n+133 //TODO Print the exception via logging\n+134 return Z_2x1;\n+135 }\n+136 }\n+137\n+139 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& values) const\n+override {\n+140 // Only linearize if the factor is active\n+141 if (!this->_\ba_\bc_\bt_\bi_\bv_\be(values)) return boost::shared_ptr();\n+142\n+143 const _\bK_\be_\by key1 = this->key1(), key2 = this->key2();\n+144 JacobianC H1;\n+145 JacobianL H2;\n+146 Vector2 b;\n+147 try {\n+148 const CAMERA& camera = values.at(key1);\n+149 const LANDMARK& point = values.at(key2);\n+150 b = _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() - camera.project2(point, H1, H2);\n+151 } catch (CheiralityException& e) {\n+152 H1.setZero();\n+153 H2.setZero();\n+154 b.setZero();\n+155 //TODO Print the exception via logging\n+156 }\n 157\n-_\b1_\b5_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-160 template\n-161 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-162 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n+158 // Whiten the system if needed\n+159 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl = this->noiseModel();\n+160 if (noiseModel && !noiseModel->isUnit()) {\n+161 // TODO: implement WhitenSystem for fixed size matrices and include\n+162 // above\n+163 H1 = noiseModel->Whiten(H1);\n+164 H2 = noiseModel->Whiten(H2);\n+165 b = noiseModel->Whiten(b);\n+166 }\n+167\n+168 // Create new (unit) noiseModel, preserving constraints if applicable\n+169 SharedDiagonal model;\n+170 if (noiseModel && noiseModel->isConstrained()) {\n+171 model = boost::static_pointer_cast(noiseModel)-\n+>unit();\n+172 }\n+173\n+174 return boost::make_shared >(key1, H1,\n+key2, H2, b, model);\n+175 }\n+176\n+178 inline const _\bP_\bo_\bi_\bn_\bt_\b2 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n+179 return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+180 }\n+181\n+182private:\n+184 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+185 template\n+186 void serialize(Archive & ar, const unsigned int /*version*/) {\n+187 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n compatibility\n-163 ar & boost::serialization::make_nvp(\"NoiseModelFactor2\",\n-164 boost::serialization::base_object(*this));\n-165 ar & BOOST_SERIALIZATION_NVP(threshold_);\n-166 ar & BOOST_SERIALIZATION_NVP(isGreaterThan_);\n-167 }\n-168};\n-169\n-170} // \\namespace gtsam\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n+188 ar & boost::serialization::make_nvp(\"NoiseModelFactor2\",\n+189 boost::serialization::base_object(*this));\n+190 ar & BOOST_SERIALIZATION_NVP(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+191 }\n+192};\n+193\n+194template\n+_\b1_\b9_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br > : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n+196 GeneralSFMFactor > {\n+197};\n+198\n+203template\n+_\b2_\b0_\b4class _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+205\n+206 GTSAM_CONCEPT_MANIFOLD_TYPE(CALIBRATION)\n+207 static const int DimK = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n+208\n+209protected:\n+210\n+_\b2_\b1_\b1 _\bP_\bo_\bi_\bn_\bt_\b2 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+212\n+213public:\n+214\n+215 typedef _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> This;\n+_\b2_\b1_\b6 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> _\bC_\ba_\bm_\be_\br_\ba;\n+_\b2_\b1_\b7 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b,_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b,_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> _\bB_\ba_\bs_\be;\n+218\n+219 // shorthand for a smart pointer to a factor\n+220 typedef boost::shared_ptr shared_ptr;\n+221\n+_\b2_\b3_\b0 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2(const _\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n+_\bK_\be_\by poseKey, _\bK_\be_\by landmarkKey, _\bK_\be_\by calibKey) :\n+231 _\bB_\ba_\bs_\be(model, poseKey, landmarkKey, calibKey), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd) {}\n+_\b2_\b3_\b2 _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2():_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(0.0,0.0) {}\n+233\n+_\b2_\b3_\b4 _\b~_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2() override {}\n+235\n+_\b2_\b3_\b7 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+238 return boost::static_pointer_cast(\n+239 gtsam::NonlinearFactor::shared_ptr(new This(*this)));}\n+240\n+_\b2_\b4_\b6 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"SFMFactor2\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n+keyFormatter = DefaultKeyFormatter) const override {\n+247 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n+248 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b2_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, s + \".z\");\n+249 }\n+250\n+_\b2_\b5_\b4 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br &p, double tol = 1e-9) const override {\n+255 const This* e = dynamic_cast(&p);\n+256 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol) && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b2_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_,\n+e->measured_, tol);\n+257 }\n+258\n+_\b2_\b6_\b0 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bs_\be_\b3& pose3, const _\bP_\bo_\bi_\bn_\bt_\b3& point, const\n+CALIBRATION &calib,\n+261 boost::optional H1=boost::none,\n+262 boost::optional H2=boost::none,\n+263 boost::optional H3=boost::none) const override\n+264 {\n+265 try {\n+266 _\bC_\ba_\bm_\be_\br_\ba camera(pose3,calib);\n+267 return camera.project(point, H1, H2, H3) - _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+268 }\n+269 catch( _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn& e) {\n+270 if (H1) *H1 = Matrix::Zero(2, 6);\n+271 if (H2) *H2 = Matrix::Zero(2, 3);\n+272 if (H3) *H3 = Matrix::Zero(2, DimK);\n+273 std::cout << e.what() << \": Landmark \"<< DefaultKeyFormatter(this->key2())\n+274 << \" behind Camera \" << DefaultKeyFormatter(this->key1()) << std::endl;\n+275 }\n+276 return Z_2x1;\n+277 }\n+278\n+_\b2_\b8_\b0 inline const _\bP_\bo_\bi_\bn_\bt_\b2 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n+281 return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+282 }\n+283\n+284private:\n+_\b2_\b8_\b6 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+287 template\n+288 void serialize(Archive & ar, const unsigned int /*version*/) {\n+289 // NoiseModelFactor3 instead of NoiseModelFactorN for backward\n+compatibility\n+290 ar & boost::serialization::make_nvp(\"NoiseModelFactor3\",\n+291 boost::serialization::base_object(*this));\n+292 ar & BOOST_SERIALIZATION_NVP(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+293 }\n+294};\n+295\n+296template\n+_\b2_\b9_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2 > : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be<\n+298 GeneralSFMFactor2 > {\n+299};\n+300\n+301} //namespace\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n+_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+Access to matrices via blocks of pre-defined sizes.\n+_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n+_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+Base class for all pinhole cameras.\n+_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+3D Point\n+_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+2D Point\n+_\bB_\bi_\bn_\ba_\br_\by_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+A binary JacobianFactor specialization that uses fixed matrix math for speed.\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &c) const override\n-Calculate the error of the factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+Give fixed size dimension of a type, fails at compile time if dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n+A pinhole camera class that has a Pose3 and a Calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n+virtual bool active(const Values &) const\n+Checks whether a factor should be used based on a set of values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n const SharedNoiseModel & noiseModel() const\n access to the noise model\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n A convenient base class for creating your own NoiseModelFactor with n\n variables.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>_\b:_\b:_\bk_\be_\by\n-Key key() const\n-Returns a key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-const ValueType at(Key j) const\n-Retrieve a variable by key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1\n-Unary inequality constraint forcing a scalar to be greater/less than a fixed\n-threshold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n-bool active(const Values &c) const override\n-active when constraint NOT met\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1\n-BoundingConstraint1(Key key, double threshold, bool isGreaterThan, double\n-mu=1000.0)\n-flag for greater/less than\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br\n+Non-linear factor for a constraint derived from a 2D measurement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianFactor > linearize(const Values &values) const\n+override\n+Linearize using fixed-size matrices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const CAMERA &camera, const LANDMARK &point, boost::\n+optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::\n+none) const override\n+h(x)-z\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:124\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const Point2 measured() const\n+return the measured\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br\n+GeneralSFMFactor(const Point2 &measured, const SharedNoiseModel &model, Key\n+cameraKey, Key landmarkKey)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br\n+GeneralSFMFactor()\n+default constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+GeneralSFMFactor< CAMERA, LANDMARK > This\n+typedef for this object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br\n+~GeneralSFMFactor() override\n+destructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n+NoiseModelFactorN< CAMERA, LANDMARK > Base\n+typedef for the base class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"SFMFactor\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n friend class boost::serialization::access\n Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b1_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-virtual double value(const X &x, boost::optional< Matrix & > H=boost::none)\n-const =0\n-function producing a scalar value to compare to the threshold Must have\n-optional argument for derivat...\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2\n-Binary scalar inequality constraint, with a similar value() function to\n-implement for specific system...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n-bool active(const Values &c) const override\n-active when constraint NOT met\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2\n-BoundingConstraint2(Key key1, Key key2, double threshold, bool isGreaterThan,\n-double mu=1000.0)\n-flag for greater/less than\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:183\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n+Point2 measured_\n+the 2D measurement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+Non-linear factor for a constraint derived from a 2D measurement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:204\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+GeneralSFMFactor2()\n+default constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:232\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\b~_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+~GeneralSFMFactor2() override\n+destructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:234\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:237\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bB_\ba_\bs_\be\n+NoiseModelFactorN< Pose3, Point3, CALIBRATION > Base\n+typedef for the base class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:217\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Pose3 &pose3, const Point3 &point, const CALIBRATION\n+&calib, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & >\n+H2=boost::none, boost::optional< Matrix & > H3=boost::none) const override\n+h(x)-z\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"SFMFactor2\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:246\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n+Point2 measured_\n+the 2D measurement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:211\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const Point2 measured() const\n+return the measured\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:280\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba\n+PinholeCamera< CALIBRATION > Camera\n+typedef for camera type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:216\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+GeneralSFMFactor2(const Point2 &measured, const SharedNoiseModel &model, Key\n+poseKey, Key landmarkKey, Key calibKey)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:230\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:254\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n friend class boost::serialization::access\n Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BoundingConstraint.h:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b2_\b:_\b:_\bv_\ba_\bl_\bu_\be\n-virtual double value(const X1 &x1, const X2 &x2, boost::optional< Matrix & >\n-H1=boost::none, boost::optional< Matrix & > H2=boost::none) const =0\n-function producing a scalar value to compare to the threshold Must have\n-optional argument for derivat...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GeneralSFMFactor.h:286\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bB_\bo_\bu_\bn_\bd_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b._\bh\n+ * _\bG_\be_\bn_\be_\br_\ba_\bl_\bS_\bF_\bM_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01337.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01337.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/AntiFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/ProjectionFactor.h File Reference\n \n \n \n \n \n \n \n@@ -96,38 +96,51 @@\n \n \n \n
\n \n-
AntiFactor.h File Reference
\n+
ProjectionFactor.h File Reference
\n
\n
\n \n+

Reprojection of a LANDMARK to a 2D point. \n+More...

\n+\n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::AntiFactor
 A class for downdating an existing factor from a graph. More...
class  gtsam::GenericProjectionFactor< POSE, LANDMARK, CALIBRATION >
 Non-linear factor for a constraint derived from a 2D measurement. More...
 
struct  gtsam::traits< GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Stephen Williams
\n+

Reprojection of a LANDMARK to a 2D point.

\n+
Author
Chris Beall
\n+
\n+Richard Roberts
\n+
\n+Frank Dellaert
\n+
\n+Alex Cunningham
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-AntiFactor.h File Reference\n+ProjectionFactor.h File Reference\n+Reprojection of a LANDMARK to a 2D point. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 A class for downdating an existing factor from a graph. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b,_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n+\u00a0 Non-linear factor for a constraint derived from a 2D measurement.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b,_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n+ _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Reprojection of a LANDMARK to a 2D point.\n Author\n- Stephen Williams\n+ Chris Beall\n+ Richard Roberts\n+ Frank Dellaert\n+ Alex Cunningham\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01337_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01337_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/AntiFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/ProjectionFactor.h Source File\n \n \n \n \n \n \n \n@@ -98,134 +98,243 @@\n
No Matches
\n \n \n \n \n \n
\n-
AntiFactor.h
\n+
ProjectionFactor.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
16#pragma once
\n-
17
\n-
18#include <ostream>
\n-
19
\n-\n-\n+
21#pragma once
\n
22
\n-
23namespace gtsam {
\n-
24
\n-
\n-\n-
32
\n-
33 private:
\n-
34
\n-
35 typedef AntiFactor This;
\n-
36 typedef NonlinearFactor Base;
\n-
37 typedef NonlinearFactor::shared_ptr sharedFactor;
\n-
38
\n-
39 sharedFactor factor_;
\n-
40
\n-
41 public:
\n+\n+\n+\n+\n+\n+
28#include <boost/optional.hpp>
\n+
29
\n+
30namespace gtsam {
\n+
31
\n+
38 template <class POSE = Pose3, class LANDMARK = Point3,
\n+
39 class CALIBRATION = Cal3_S2>
\n+
\n+
40 class GenericProjectionFactor: public NoiseModelFactorN<POSE, LANDMARK> {
\n+
41 protected:
\n
42
\n-
43 // shorthand for a smart pointer to a factor
\n-
44 typedef boost::shared_ptr<AntiFactor> shared_ptr;
\n-
45
\n-\n-
48
\n-
50 AntiFactor(NonlinearFactor::shared_ptr factor) : Base(factor->keys()), factor_(factor) {}
\n+
43 // Keep a copy of measurement and calibration for I/O
\n+\n+
45 boost::shared_ptr<CALIBRATION> K_;
\n+
46 boost::optional<POSE> body_P_sensor_;
\n+
47
\n+
48 // verbosity handling for Cheirality Exceptions
\n+\n+\n
51
\n-
52 ~AntiFactor() override {}
\n+
52 public:
\n
53
\n-
\n-
55 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
56 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
57 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n-
\n-
58
\n-
\n-
62 void print(const std::string& s, const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
63 std::cout << s << "AntiFactor version of:" << std::endl;
\n-
64 factor_->print(s, keyFormatter);
\n-
65 }
\n-
\n-
66
\n-
\n-
68 bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
\n-
69 const This *e = dynamic_cast<const This*> (&expected);
\n-
70 return e != nullptr && Base::equals(*e, tol) && this->factor_->equals(*e->factor_, tol);
\n-
71 }
\n-
\n-
72
\n-
80 double error(const Values& c) const override { return -factor_->error(c); }
\n-
81
\n-
83 size_t dim() const override { return factor_->dim(); }
\n-
84
\n-
89 bool active(const Values& c) const override { return factor_->active(c); }
\n-
90
\n-
\n-
97 boost::shared_ptr<GaussianFactor> linearize(const Values& c) const override {
\n-
98
\n-
99 // Generate the linearized factor from the contained nonlinear factor
\n-
100 GaussianFactor::shared_ptr gaussianFactor = factor_->linearize(c);
\n-
101
\n-
102 // return the negated version of the factor
\n-
103 return gaussianFactor->negate();
\n-
104 }
\n+\n+
56
\n+\n+
59
\n+
61 typedef boost::shared_ptr<This> shared_ptr;
\n+
62
\n+
\n+\n+
65 measured_(0, 0), throwCheirality_(false), verboseCheirality_(false) {
\n+
66 }
\n+
\n+
67
\n+
\n+\n+
79 Key poseKey, Key pointKey, const boost::shared_ptr<CALIBRATION>& K,
\n+
80 boost::optional<POSE> body_P_sensor = boost::none) :
\n+
81 Base(model, poseKey, pointKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor),
\n+
82 throwCheirality_(false), verboseCheirality_(false) {}
\n+
\n+
83
\n+
\n+\n+
97 Key poseKey, Key pointKey, const boost::shared_ptr<CALIBRATION>& K,
\n+\n+
99 boost::optional<POSE> body_P_sensor = boost::none) :
\n+
100 Base(model, poseKey, pointKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor),
\n+\n
\n+
102
\n+\n
105
\n-
106
\n-
107 private:
\n-
108
\n-\n-
111 template<class ARCHIVE>
\n-
112 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
113 ar & boost::serialization::make_nvp("AntiFactor",
\n-
114 boost::serialization::base_object<Base>(*this));
\n-
115 ar & BOOST_SERIALIZATION_NVP(factor_);
\n-
116 }
\n-
117 }; // \\class AntiFactor
\n-
\n-
118
\n-
119}
\n-
A factor with a quadratic error function - a Gaussian.
\n-
Non-linear factor base classes.
\n+
\n+
107 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
108 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
109 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n+
\n+
110
\n+
\n+
116 void print(const std::string& s = "", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
117 std::cout << s << "GenericProjectionFactor, z = ";
\n+\n+
119 if(this->body_P_sensor_)
\n+
120 this->body_P_sensor_->print(" sensor pose in body frame: ");
\n+
121 Base::print("", keyFormatter);
\n+
122 }
\n+
\n+
123
\n+
\n+
125 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n+
126 const This *e = dynamic_cast<const This*>(&p);
\n+
127 return e
\n+
128 && Base::equals(p, tol)
\n+
129 && traits<Point2>::Equals(this->measured_, e->measured_, tol)
\n+
130 && this->K_->equals(*e->K_, tol)
\n+
131 && ((!body_P_sensor_ && !e->body_P_sensor_) || (body_P_sensor_ && e->body_P_sensor_ && body_P_sensor_->equals(*e->body_P_sensor_)));
\n+
132 }
\n+
\n+
133
\n+
\n+
135 Vector evaluateError(const Pose3& pose, const Point3& point,
\n+
136 boost::optional<Matrix&> H1 = boost::none, boost::optional<Matrix&> H2 = boost::none) const override {
\n+
137 try {
\n+
138 if(body_P_sensor_) {
\n+
139 if(H1) {
\n+
140 gtsam::Matrix H0;
\n+
141 PinholeCamera<CALIBRATION> camera(pose.compose(*body_P_sensor_, H0), *K_);
\n+
142 Point2 reprojectionError(camera.project(point, H1, H2, boost::none) - measured_);
\n+
143 *H1 = *H1 * H0;
\n+
144 return reprojectionError;
\n+
145 } else {
\n+
146 PinholeCamera<CALIBRATION> camera(pose.compose(*body_P_sensor_), *K_);
\n+
147 return camera.project(point, H1, H2, boost::none) - measured_;
\n+
148 }
\n+
149 } else {
\n+
150 PinholeCamera<CALIBRATION> camera(pose, *K_);
\n+
151 return camera.project(point, H1, H2, boost::none) - measured_;
\n+
152 }
\n+
153 } catch( CheiralityException& e) {
\n+
154 if (H1) *H1 = Matrix::Zero(2,6);
\n+
155 if (H2) *H2 = Matrix::Zero(2,3);
\n+\n+
157 std::cout << e.what() << ": Landmark "<< DefaultKeyFormatter(this->key2()) <<
\n+
158 " moved behind camera " << DefaultKeyFormatter(this->key1()) << std::endl;
\n+\n+
160 throw CheiralityException(this->key2());
\n+
161 }
\n+
162 return Vector2::Constant(2.0 * K_->fx());
\n+
163 }
\n+
\n+
164
\n+
\n+
166 const Point2& measured() const {
\n+
167 return measured_;
\n+
168 }
\n+
\n+
169
\n+
\n+
171 const boost::shared_ptr<CALIBRATION> calibration() const {
\n+
172 return K_;
\n+
173 }
\n+
\n+
174
\n+
\n+
176 const boost::optional<POSE>& body_P_sensor() const {
\n+
177 return body_P_sensor_;
\n+
178 }
\n+
\n+
179
\n+
181 inline bool verboseCheirality() const { return verboseCheirality_; }
\n+
182
\n+
184 inline bool throwCheirality() const { return throwCheirality_; }
\n+
185
\n+
186 private:
\n+
187
\n+\n+
190 template<class ARCHIVE>
\n+
191 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
192 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
193 ar & BOOST_SERIALIZATION_NVP(measured_);
\n+
194 ar & BOOST_SERIALIZATION_NVP(K_);
\n+
195 ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);
\n+
196 ar & BOOST_SERIALIZATION_NVP(throwCheirality_);
\n+
197 ar & BOOST_SERIALIZATION_NVP(verboseCheirality_);
\n+
198 }
\n+
199
\n+
200 public:
\n+\n+
202};
\n+
\n+
203
\n+
205 template<class POSE, class LANDMARK, class CALIBRATION>
\n+
\n+
206 struct traits<GenericProjectionFactor<POSE, LANDMARK, CALIBRATION> > :
\n+
207 public Testable<GenericProjectionFactor<POSE, LANDMARK, CALIBRATION> > {
\n+
208 };
\n+
\n+
209
\n+
210} // \\ namespace gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
3D Pose
\n+
Base class for all pinhole cameras.
\n+
3D Point
\n+
The most common 5DOF 3D->2D calibration.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
Definition CalibratedCamera.h:32
\n+
A pinhole camera class that has a Pose3 and a Calibration.
Definition PinholeCamera.h:33
\n+
Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const
project a 3D point from world coordinates into the image
Definition PinholePose.h:118
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
virtual bool equals(const NonlinearFactor &f, double tol=1e-9) const
Check if two factors are equal.
Definition NonlinearFactor.cpp:47
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
A class for downdating an existing factor from a graph.
Definition AntiFactor.h:31
\n-
AntiFactor(NonlinearFactor::shared_ptr factor)
constructor - Creates the equivalent AntiFactor from an existing factor
Definition AntiFactor.h:50
\n-
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
equals
Definition AntiFactor.h:68
\n-
AntiFactor()
default constructor - only use for serialization
Definition AntiFactor.h:47
\n-
boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override
Linearize to a GaussianFactor.
Definition AntiFactor.h:97
\n-
bool active(const Values &c) const override
Checks whether this factor should be used based on a set of values.
Definition AntiFactor.h:89
\n-
size_t dim() const override
get the dimension of the factor (same as the original factor)
Definition AntiFactor.h:83
\n-
void print(const std::string &s, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
implement functions needed for Testable
Definition AntiFactor.h:62
\n-
double error(const Values &c) const override
implement functions needed to derive from Factor
Definition AntiFactor.h:80
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition AntiFactor.h:55
\n-
friend class boost::serialization::access
Serialization function.
Definition AntiFactor.h:110
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Non-linear factor for a constraint derived from a 2D measurement.
Definition ProjectionFactor.h:40
\n+
bool verboseCheirality() const
return verbosity
Definition ProjectionFactor.h:181
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition ProjectionFactor.h:116
\n+
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition ProjectionFactor.h:125
\n+
Point2 measured_
2D measurement
Definition ProjectionFactor.h:44
\n+
GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > This
shorthand for this class
Definition ProjectionFactor.h:58
\n+
const Point2 & measured() const
return the measurement
Definition ProjectionFactor.h:166
\n+
boost::optional< POSE > body_P_sensor_
The pose of the sensor in the body frame.
Definition ProjectionFactor.h:46
\n+
boost::shared_ptr< CALIBRATION > K_
shared pointer to calibration object
Definition ProjectionFactor.h:45
\n+
~GenericProjectionFactor() override
Virtual destructor.
Definition ProjectionFactor.h:104
\n+
Vector evaluateError(const Pose3 &pose, const Point3 &point, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
Evaluate error h(x)-z and optionally derivatives.
Definition ProjectionFactor.h:135
\n+
GenericProjectionFactor()
Default constructor.
Definition ProjectionFactor.h:64
\n+
bool throwCheirality_
If true, rethrows Cheirality exceptions (default: false)
Definition ProjectionFactor.h:49
\n+
NoiseModelFactorN< POSE, LANDMARK > Base
shorthand for base class type
Definition ProjectionFactor.h:55
\n+
const boost::optional< POSE > & body_P_sensor() const
return the (optional) sensor pose with respect to the vehicle frame
Definition ProjectionFactor.h:176
\n+
bool throwCheirality() const
return flag for throwing cheirality exceptions
Definition ProjectionFactor.h:184
\n+
GenericProjectionFactor(const Point2 &measured, const SharedNoiseModel &model, Key poseKey, Key pointKey, const boost::shared_ptr< CALIBRATION > &K, bool throwCheirality, bool verboseCheirality, boost::optional< POSE > body_P_sensor=boost::none)
Constructor with exception-handling flags TODO: Mark argument order standard (keys,...
Definition ProjectionFactor.h:96
\n+
friend class boost::serialization::access
Serialization function.
Definition ProjectionFactor.h:189
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition ProjectionFactor.h:107
\n+
boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor
Definition ProjectionFactor.h:61
\n+
bool verboseCheirality_
If true, prints text for Cheirality exceptions (default: false)
Definition ProjectionFactor.h:50
\n+
GenericProjectionFactor(const Point2 &measured, const SharedNoiseModel &model, Key poseKey, Key pointKey, const boost::shared_ptr< CALIBRATION > &K, boost::optional< POSE > body_P_sensor=boost::none)
Constructor TODO: Mark argument order standard (keys, measurement, parameters)
Definition ProjectionFactor.h:78
\n+
const boost::shared_ptr< CALIBRATION > calibration() const
return the calibration object
Definition ProjectionFactor.h:171
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,173 +1,350 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-AntiFactor.h\n+ProjectionFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-16#pragma once\n-17\n-18#include \n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21#pragma once\n 22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-_\b3_\b1 class _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n-32\n-33 private:\n-34\n-35 typedef _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-36 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-37 typedef NonlinearFactor::shared_ptr sharedFactor;\n-38\n-39 sharedFactor factor_;\n-40\n-41 public:\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh>\n+28#include \n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+38 template \n+_\b4_\b0 class _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+41 protected:\n 42\n-43 // shorthand for a smart pointer to a factor\n-44 typedef boost::shared_ptr shared_ptr;\n-45\n-_\b4_\b7 _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br() {}\n-48\n-_\b5_\b0 _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br(NonlinearFactor::shared_ptr factor) : _\bB_\ba_\bs_\be(factor->_\bk_\be_\by_\bs()),\n-factor_(factor) {}\n+43 // Keep a copy of measurement and calibration for I/O\n+_\b4_\b4 _\bP_\bo_\bi_\bn_\bt_\b2 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+_\b4_\b5 boost::shared_ptr _\bK_\b_;\n+_\b4_\b6 boost::optional _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_;\n+47\n+48 // verbosity handling for Cheirality Exceptions\n+_\b4_\b9 bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n+_\b5_\b0 bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n 51\n-52 _\b~_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+52 public:\n 53\n-_\b5_\b5 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-56 return boost::static_pointer_cast(\n-57 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this))); }\n-58\n-_\b6_\b2 void _\bp_\br_\bi_\bn_\bt(const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-DefaultKeyFormatter) const override {\n-63 std::cout << s << \"AntiFactor version of:\" << std::endl;\n-64 factor_->print(s, keyFormatter);\n-65 }\n-66\n-_\b6_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol=1e-9) const override\n-{\n-69 const _\bT_\bh_\bi_\bs *e = dynamic_cast (&expected);\n-70 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) && this->factor_->_\be_\bq_\bu_\ba_\bl_\bs(*e-\n->factor_, tol);\n-71 }\n-72\n-_\b8_\b0 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override { return -factor_->error(c); }\n-81\n-_\b8_\b3 size_t _\bd_\bi_\bm() const override { return factor_->dim(); }\n-84\n-_\b8_\b9 bool _\ba_\bc_\bt_\bi_\bv_\be(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override { return factor_->active(c); }\n-90\n-_\b9_\b7 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override\n-{\n-98\n-99 // Generate the linearized factor from the contained nonlinear factor\n-100 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br gaussianFactor = factor_->linearize(c);\n-101\n-102 // return the negated version of the factor\n-103 return gaussianFactor->negate();\n-104 }\n+_\b5_\b5 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b> _\bB_\ba_\bs_\be;\n+56\n+_\b5_\b8 typedef _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b,_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> _\bT_\bh_\bi_\bs;\n+59\n+_\b6_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+62\n+_\b6_\b4 _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() :\n+65 _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(0, 0), _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false) {\n+66 }\n+67\n+_\b7_\b8 _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n+model,\n+79 _\bK_\be_\by poseKey, _\bK_\be_\by pointKey, const boost::shared_ptr& K,\n+80 boost::optional _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br = boost::none) :\n+81 _\bB_\ba_\bs_\be(model, poseKey, pointKey), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd), _\bK_\b_(K), _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_\n+(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br),\n+82 _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false) {}\n+83\n+_\b9_\b6 _\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n+model,\n+97 _\bK_\be_\by poseKey, _\bK_\be_\by pointKey, const boost::shared_ptr& K,\n+98 bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by, bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by,\n+99 boost::optional _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br = boost::none) :\n+100 _\bB_\ba_\bs_\be(model, poseKey, pointKey), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd), _\bK_\b_(K), _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_\n+(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br),\n+101 _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by) {}\n+102\n+_\b1_\b0_\b4 _\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n 105\n-106\n-107 private:\n-108\n-_\b1_\b1_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-111 template\n-112 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-113 ar & boost::serialization::make_nvp(\"AntiFactor\",\n-114 boost::serialization::base_object(*this));\n-115 ar & BOOST_SERIALIZATION_NVP(factor_);\n-116 }\n-117 }; // \\class AntiFactor\n-118\n-119}\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-A factor with a quadratic error function - a Gaussian.\n+_\b1_\b0_\b7 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+108 return boost::static_pointer_cast(\n+109 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this))); }\n+110\n+_\b1_\b1_\b6 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter) const override {\n+117 std::cout << s << \"GenericProjectionFactor, z = \";\n+118 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b2_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+119 if(this->body_P_sensor_)\n+120 this->body_P_sensor_->print(\" sensor pose in body frame: \");\n+121 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n+122 }\n+123\n+_\b1_\b2_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n+126 const _\bT_\bh_\bi_\bs *e = dynamic_cast(&p);\n+127 return e\n+128 && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol)\n+129 && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bP_\bo_\bi_\bn_\bt_\b2_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_, e->measured_, tol)\n+130 && this->K_->equals(*e->K_, tol)\n+131 && ((!_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_ && !e->body_P_sensor_) || (_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_ && e-\n+>body_P_sensor_ && _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_->equals(*e->body_P_sensor_)));\n+132 }\n+133\n+_\b1_\b3_\b5 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bs_\be_\b3& pose, const _\bP_\bo_\bi_\bn_\bt_\b3& point,\n+136 boost::optional H1 = boost::none, boost::optional H2 =\n+boost::none) const override {\n+137 try {\n+138 if(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_) {\n+139 if(H1) {\n+140 gtsam::Matrix H0;\n+141 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> camera(pose.compose(*_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_, H0), *_\bK_\b_);\n+142 _\bP_\bo_\bi_\bn_\bt_\b2 reprojectionError(camera._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2, boost::none) -\n+_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+143 *H1 = *H1 * H0;\n+144 return reprojectionError;\n+145 } else {\n+146 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> camera(pose.compose(*_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_), *_\bK_\b_);\n+147 return camera._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2, boost::none) - _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+148 }\n+149 } else {\n+150 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> camera(pose, *_\bK_\b_);\n+151 return camera._\bp_\br_\bo_\bj_\be_\bc_\bt(point, H1, H2, boost::none) - _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+152 }\n+153 } catch( _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn& e) {\n+154 if (H1) *H1 = Matrix::Zero(2,6);\n+155 if (H2) *H2 = Matrix::Zero(2,3);\n+156 if (_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_)\n+157 std::cout << e.what() << \": Landmark \"<< DefaultKeyFormatter(this->key2())\n+<<\n+158 \" moved behind camera \" << DefaultKeyFormatter(this->key1()) << std::endl;\n+159 if (_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_)\n+160 throw _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(this->key2());\n+161 }\n+162 return Vector2::Constant(2.0 * _\bK_\b_->fx());\n+163 }\n+164\n+_\b1_\b6_\b6 const _\bP_\bo_\bi_\bn_\bt_\b2& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n+167 return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+168 }\n+169\n+_\b1_\b7_\b1 const boost::shared_ptr _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n+172 return _\bK_\b_;\n+173 }\n+174\n+_\b1_\b7_\b6 const boost::optional& _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br() const {\n+177 return _\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_;\n+178 }\n+179\n+_\b1_\b8_\b1 inline bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const { return _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_; }\n+182\n+_\b1_\b8_\b4 inline bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const { return _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_; }\n+185\n+186 private:\n+187\n+_\b1_\b8_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+190 template\n+191 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+192 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+193 ar & BOOST_SERIALIZATION_NVP(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+194 ar & BOOST_SERIALIZATION_NVP(_\bK_\b_);\n+195 ar & BOOST_SERIALIZATION_NVP(_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_);\n+196 ar & BOOST_SERIALIZATION_NVP(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_);\n+197 ar & BOOST_SERIALIZATION_NVP(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_);\n+198 }\n+199\n+200 public:\n+201 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+202};\n+203\n+205 template\n+_\b2_\b0_\b6 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br > :\n+207 public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {\n+208 };\n+209\n+210} // \\ namespace gtsam\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n+_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+Base class for all pinhole cameras.\n+_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+3D Point\n+_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n+The most common 5DOF 3D->2D calibration.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n+A pinhole camera class that has a Pose3 and a Calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n+Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n+OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK >\n+Dcal=boost::none) const\n+project a 3D point from world coordinates into the image\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-virtual bool equals(const NonlinearFactor &f, double tol=1e-9) const\n-Check if two factors are equal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br\n-A class for downdating an existing factor from a graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br\n-AntiFactor(NonlinearFactor::shared_ptr factor)\n-constructor - Creates the equivalent AntiFactor from an existing factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n-equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br\n-AntiFactor()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override\n-Linearize to a GaussianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n-bool active(const Values &c) const override\n-Checks whether this factor should be used based on a set of values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-get the dimension of the factor (same as the original factor)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s, const KeyFormatter\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+Non-linear factor for a constraint derived from a 2D measurement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n+bool verboseCheirality() const\n+return verbosity\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:181\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n &keyFormatter=DefaultKeyFormatter) const override\n-implement functions needed for Testable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &c) const override\n-implement functions needed to derive from Factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:116\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:125\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n+Point2 measured_\n+2D measurement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > This\n+shorthand for this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const Point2 & measured() const\n+return the measurement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:166\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br_\b_\n+boost::optional< POSE > body_P_sensor_\n+The pose of the sensor in the body frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bK_\b_\n+boost::shared_ptr< CALIBRATION > K_\n+shared pointer to calibration object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+~GenericProjectionFactor() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Pose3 &pose, const Point3 &point, boost::optional<\n+Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const\n+override\n+Evaluate error h(x)-z and optionally derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+GenericProjectionFactor()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_\n+bool throwCheirality_\n+If true, rethrows Cheirality exceptions (default: false)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n+NoiseModelFactorN< POSE, LANDMARK > Base\n+shorthand for base class type\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\bo_\bd_\by_\b__\bP_\b__\bs_\be_\bn_\bs_\bo_\br\n+const boost::optional< POSE > & body_P_sensor() const\n+return the (optional) sensor pose with respect to the vehicle frame\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:176\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n+bool throwCheirality() const\n+return flag for throwing cheirality exceptions\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+GenericProjectionFactor(const Point2 &measured, const SharedNoiseModel &model,\n+Key poseKey, Key pointKey, const boost::shared_ptr< CALIBRATION > &K, bool\n+throwCheirality, bool verboseCheirality, boost::optional< POSE >\n+body_P_sensor=boost::none)\n+Constructor with exception-handling flags TODO: Mark argument order standard\n+(keys,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n friend class boost::serialization::access\n Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AntiFactor.h:110\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shorthand for a smart pointer to a factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_\n+bool verboseCheirality_\n+If true, prints text for Cheirality exceptions (default: false)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+GenericProjectionFactor(const Point2 &measured, const SharedNoiseModel &model,\n+Key poseKey, Key pointKey, const boost::shared_ptr< CALIBRATION > &K, boost::\n+optional< POSE > body_P_sensor=boost::none)\n+Constructor TODO: Mark argument order standard (keys, measurement, parameters)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+const boost::shared_ptr< CALIBRATION > calibration() const\n+return the calibration object\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ProjectionFactor.h:171\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bA_\bn_\bt_\bi_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01343.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01343.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicJunctionTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactorGraph.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,32 @@\n \n \n \n \n \n
\n \n-
SymbolicJunctionTree.h File Reference
\n+Namespaces
\n+
SymbolicFactorGraph.cpp File Reference
\n \n
\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-

\n-Classes

class  gtsam::SymbolicJunctionTree
 A EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree, with the additional property that it represents the clique tree associated with a Bayes net. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Typedefs

\n-using gtsam::SymbolicCluster = SymbolicJunctionTree::Cluster
 typedef for wrapper:
 
\n

Detailed Description

\n-
Date
Mar 29, 2013
\n-
Author
Frank Dellaert
\n-
\n-Richard Roberts
\n+
Date
Oct 29, 2009
\n+
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-SymbolicJunctionTree.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n- A _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be, i.e., a set of variable clusters with\n-\u00a0 factors, arranged in a tree, with the additional property that it\n- represents the clique tree associated with a Bayes net. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymbolicFactorGraph.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSy\bym\bmb\bbo\bol\bli\bic\bcC\bCl\blu\bus\bst\bte\ber\br = _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n-\u00a0 typedef for wrapper:\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Mar 29, 2013\n+ Oct 29, 2009\n Author\n Frank Dellaert\n- Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01346.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01346.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicISAM.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,51 +94,34 @@\n \n \n \n \n \n
\n \n-
SymbolicBayesTree.h File Reference
\n+
SymbolicISAM.cpp File Reference
\n
\n
\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::SymbolicBayesTreeClique
 A clique in a SymbolicBayesTree. More...
 
class  gtsam::SymbolicBayesTree
 A Bayes tree that represents the connectivity between variables but is not associated with any probability functions. More...
 
struct  gtsam::traits< SymbolicBayesTreeClique >
 traits More...
 
struct  gtsam::traits< SymbolicBayesTree >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Oct 29, 2009
\n+
Date
July 29, 2013
\n
Author
Frank Dellaert
\n
\n Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,35 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicBayesTree.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-\u00a0 A clique in a _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-\u00a0 A Bayes tree that represents the connectivity between variables but is\n- not associated with any probability functions. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b _\b>\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymbolicISAM.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Oct 29, 2009\n+ July 29, 2013\n Author\n Frank Dellaert\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01349.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01349.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicEliminationTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicEliminationTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,30 +94,19 @@\n \n \n \n \n \n
\n \n-
SymbolicEliminationTree.h File Reference
\n+
SymbolicEliminationTree.cpp File Reference
\n
\n
\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-

\n-Classes

class  gtsam::SymbolicEliminationTree
 
struct  gtsam::traits< SymbolicEliminationTree >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n@@ -126,13 +115,13 @@\n
\n Richard Roberts
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicEliminationTree.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymbolicEliminationTree.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n Mar 29, 2013\n Author\n Frank Dellaert\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01355.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01355.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicConditional.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,39 +94,32 @@\n \n \n \n \n \n
\n \n-
SymbolicFactor.cpp File Reference
\n+Namespaces
\n+
SymbolicConditional.cpp File Reference
\n \n
\n \n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > gtsam::EliminateSymbolic (const SymbolicFactorGraph &factors, const Ordering &keys)
 Dense elimination function for symbolic factors.
 
\n

Detailed Description

\n
Author
Richard Roberts
\n
Date
Oct 17, 2010
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SymbolicFactor.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymbolicConditional.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc (const\n- _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n-shared_ptr< _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n-\u00a0 Dense elimination function for symbolic\n- factors.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n Richard Roberts\n Date\n Oct 17, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01358.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01358.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicConditional.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicISAM.h File Reference\n \n \n \n \n \n \n \n@@ -94,32 +94,42 @@\n \n \n \n \n \n
\n \n-
SymbolicConditional.cpp File Reference
\n+
SymbolicISAM.h File Reference
\n
\n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+

\n+Classes

class  gtsam::SymbolicISAM
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
Oct 17, 2010
\n+
Date
July 29, 2013
\n+
Author
Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicConditional.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymbolicISAM.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+ Date\n+ July 29, 2013\n Author\n+ Frank Dellaert\n Richard Roberts\n- Date\n- Oct 17, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bc_\bp_\bp\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01361.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01361.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicISAM.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactor-inst.h File Reference\n \n \n \n \n \n \n \n@@ -94,42 +94,76 @@\n \n \n \n \n \n
\n \n-
SymbolicISAM.h File Reference
\n+Namespaces |\n+Functions
\n+
SymbolicFactor-inst.h File Reference
\n \n
\n \n

Go to the source code of this file.

\n \n-\n-\n-\n-

\n-Classes

class  gtsam::SymbolicISAM
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n

\n+Functions

template<class FACTOR >
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > gtsam::internal::EliminateSymbolic (const FactorGraph< FACTOR > &factors, const Ordering &keys)
 Implementation of dense elimination function for symbolic factors.
 
\n

Detailed Description

\n-
Date
July 29, 2013
\n-
Author
Frank Dellaert
\n-
\n-Richard Roberts
\n-
\n+
Author
Richard Roberts
\n+
Date
Oct 17, 2010
\n+

Function Documentation

\n+\n+

◆ EliminateSymbolic()

\n+\n+
\n+
\n+
\n+template<class FACTOR >
\n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+ \n+
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > gtsam::internal::EliminateSymbolic (const FactorGraph< FACTOR > & factors,
const Orderingkeys 
)
\n+
\n+\n+

Implementation of dense elimination function for symbolic factors.

\n+

This is a templated version for internally doing symbolic elimination on any factor.

\n+\n+
\n+
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,41 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicISAM.h File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SymbolicFactor-inst.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc (const\n+ _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh< FACTOR > &factors, const\n+shared_ptr< _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n+\u00a0 Implementation of dense elimination\n+ function for symbolic factors.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- July 29, 2013\n Author\n- Frank Dellaert\n Richard Roberts\n+ Date\n+ Oct 17, 2010\n+*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0E\bEl\bli\bim\bmi\bin\bna\bat\bte\beS\bSy\bym\bmb\bbo\bol\bli\bic\bc(\b()\b) *\b**\b**\b**\b**\b*\n+template\n+std::pair< boost::shared_ptr<\n+SymbolicConditional >, boost:: ( const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh< FACTOR > &\u00a0 f\bfa\bac\bct\bto\bor\brs\bs,\n+shared_ptr< SymbolicFactor > >\n+gtsam::internal::EliminateSymbolic\n+ const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &\u00a0 k\bke\bey\bys\bs\u00a0\n+ )\n+Implementation of dense elimination function for symbolic factors.\n+This is a templated version for internally doing symbolic elimination on any\n+factor.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01361.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01361.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01361 = [\n- [\"gtsam::SymbolicISAM\", \"a05032.html\", \"a05032\"]\n+ [\"EliminateSymbolic\", \"a01361.html#ae394348e1a503834f713405afa9afad8\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01361_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01361_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicISAM.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactor-inst.h Source File\n \n \n \n \n \n \n \n@@ -98,63 +98,99 @@\n
No Matches
\n \n \n \n \n \n
\n-
SymbolicISAM.h
\n+
SymbolicFactor-inst.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-
23
\n-
24namespace gtsam {
\n+
18#pragma once
\n+
19
\n+\n+\n+\n+
23#include <gtsam/inference/Key.h>
\n+
24#include <gtsam/base/timing.h>
\n
25
\n-
\n-
26 class GTSAM_EXPORT SymbolicISAM : public ISAM<SymbolicBayesTree>
\n-
27 {
\n-
28 public:
\n-\n-
30 typedef SymbolicISAM This;
\n-
31 typedef boost::shared_ptr<This> shared_ptr;
\n-
32
\n-
35
\n-\n-
38
\n-
40 SymbolicISAM(const SymbolicBayesTree& bayesTree);
\n-
41
\n-
43
\n-
44 };
\n-
\n-
45
\n-
46}
\n-
Incremental update functionality (iSAM) for BayesTree.
\n-\n+
26#include <boost/shared_ptr.hpp>
\n+
27#include <boost/make_shared.hpp>
\n+
28
\n+
29#include <utility>
\n+
30
\n+
31namespace gtsam
\n+
32{
\n+
33 namespace internal
\n+
34 {
\n+
37 template<class FACTOR>
\n+
38 std::pair<boost::shared_ptr<SymbolicConditional>, boost::shared_ptr<SymbolicFactor> >
\n+
\n+
39 EliminateSymbolic(const FactorGraph<FACTOR>& factors, const Ordering& keys)
\n+
40 {
\n+
41 gttic(EliminateSymbolic);
\n+
42
\n+
43 // Gather all keys
\n+
44 KeySet allKeys;
\n+
45 for(const boost::shared_ptr<FACTOR>& factor: factors) {
\n+
46 allKeys.insert(factor->begin(), factor->end());
\n+
47 }
\n+
48
\n+
49 // Check keys
\n+
50 for(Key key: keys) {
\n+
51 if(allKeys.find(key) == allKeys.end())
\n+
52 throw std::runtime_error("Requested to eliminate a key that is not in the factors");
\n+
53 }
\n+
54
\n+
55 // Sort frontal keys
\n+
56 KeySet frontals(keys);
\n+
57 const size_t nFrontals = keys.size();
\n+
58
\n+
59 // Build a key vector with the frontals followed by the separator
\n+
60 KeyVector orderedKeys(allKeys.size());
\n+
61 std::copy(keys.begin(), keys.end(), orderedKeys.begin());
\n+
62 std::set_difference(allKeys.begin(), allKeys.end(), frontals.begin(), frontals.end(), orderedKeys.begin() + nFrontals);
\n+
63
\n+
64 // Return resulting conditional and factor
\n+
65 return std::make_pair(
\n+
66 SymbolicConditional::FromKeysShared(orderedKeys, nFrontals),
\n+
67 SymbolicFactor::FromIteratorsShared(orderedKeys.begin() + nFrontals, orderedKeys.end()));
\n+
68 }
\n+
\n+
69 }
\n+
70}
\n+
Timing utilities.
\n+\n+
The base class for all factors.
\n+
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > EliminateSymbolic(const FactorGraph< FACTOR > &factors, const Ordering &keys)
Implementation of dense elimination function for symbolic factors.
Definition SymbolicFactor-inst.h:39
\n+\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A Bayes tree with an update methods that implements the iSAM algorithm.
Definition ISAM.h:31
\n-
A Bayes tree that represents the connectivity between variables but is not associated with any probab...
Definition SymbolicBayesTree.h:51
\n-
Definition SymbolicISAM.h:27
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
Definition Ordering.h:34
\n+
static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER &keys, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition SymbolicConditional.h:94
\n+
static SymbolicFactor::shared_ptr FromIteratorsShared(KEYITERATOR beginKey, KEYITERATOR endKey)
Constructor from a collection of keys.
Definition SymbolicFactor.h:121
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,62 +1,120 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicISAM.h\n+SymbolicFactor-inst.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bI_\bS_\bA_\bM_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n 25\n-_\b2_\b6 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM : public _\bI_\bS_\bA_\bM\n-27 {\n-28 public:\n-29 typedef _\bI_\bS_\bA_\bM_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b> _\bB_\ba_\bs_\be;\n-30 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM _\bT_\bh_\bi_\bs;\n-31 typedef boost::shared_ptr shared_ptr;\n-32\n-35\n-37 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM();\n-38\n-40 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM(const _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be& bayesTree);\n-41\n-43\n-44 };\n-45\n-46}\n-_\bI_\bS_\bA_\bM_\b._\bh\n-Incremental update functionality (iSAM) for BayesTree.\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+26#include \n+27#include \n+28\n+29#include \n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm\n+32{\n+33 namespace internal\n+34 {\n+37 template\n+38 std::pair, boost::\n+shared_ptr >\n+_\b3_\b9 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys)\n+40 {\n+41 gttic(_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc);\n+42\n+43 // Gather all keys\n+44 _\bK_\be_\by_\bS_\be_\bt allKeys;\n+45 for(const boost::shared_ptr& factor: factors) {\n+46 allKeys.insert(factor->begin(), factor->end());\n+47 }\n+48\n+49 // Check keys\n+50 for(_\bK_\be_\by key: keys) {\n+51 if(allKeys.find(key) == allKeys.end())\n+52 throw std::runtime_error(\"Requested to eliminate a key that is not in the\n+factors\");\n+53 }\n+54\n+55 // Sort frontal keys\n+56 _\bK_\be_\by_\bS_\be_\bt frontals(keys);\n+57 const size_t nFrontals = keys.size();\n+58\n+59 // Build a key vector with the frontals followed by the separator\n+60 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br orderedKeys(allKeys.size());\n+61 std::copy(keys.begin(), keys.end(), orderedKeys.begin());\n+62 std::set_difference(allKeys.begin(), allKeys.end(), frontals.begin(),\n+frontals.end(), orderedKeys.begin() + nFrontals);\n+63\n+64 // Return resulting conditional and factor\n+65 return std::make_pair(\n+66 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd(orderedKeys, nFrontals),\n+67 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd(orderedKeys.begin() + nFrontals,\n+orderedKeys.end()));\n+68 }\n+69 }\n+70}\n+_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+Timing utilities.\n+_\bK_\be_\by_\b._\bh\n+_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+The base class for all factors.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc\n+std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr<\n+SymbolicFactor > > EliminateSymbolic(const FactorGraph< FACTOR > &factors,\n+const Ordering &keys)\n+Implementation of dense elimination function for symbolic factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor-inst.h:39\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM\n-A Bayes tree with an update methods that implements the iSAM algorithm.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-A Bayes tree that represents the connectivity between variables but is not\n-associated with any probab...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesTree.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicISAM.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd\n+static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER &keys,\n+size_t nrFrontals)\n+Named constructor from an arbitrary number of keys and frontals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd\n+static SymbolicFactor::shared_ptr FromIteratorsShared(KEYITERATOR beginKey,\n+KEYITERATOR endKey)\n+Constructor from a collection of keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:121\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01367.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01367.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicConditional.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactorGraph.h File Reference\n \n \n \n \n \n \n \n@@ -96,42 +96,46 @@\n \n \n \n
\n \n-
SymbolicConditional.h File Reference
\n+
SymbolicFactorGraph.h File Reference
\n
\n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n \n-\n-\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::SymbolicConditional
 SymbolicConditional is a conditional with keys but no probability data, produced by symbolic elimination of SymbolicFactor. More...
struct  gtsam::EliminationTraits< SymbolicFactorGraph >
 
struct  gtsam::traits< SymbolicConditional >
 traits More...
class  gtsam::SymbolicFactorGraph
 Symbolic Factor Graph. More...
 
struct  gtsam::traits< SymbolicFactorGraph >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
Oct 17, 2010
\n+
Date
Oct 29, 2009
\n+
Author
Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicConditional.h File Reference\n+SymbolicFactorGraph.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-\u00a0 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl is a conditional with keys but no probability\n- data, produced by symbolic elimination of _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+\u00a0 Symbolic _\bF_\ba_\bc_\bt_\bo_\br Graph. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n \u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+ Date\n+ Oct 29, 2009\n Author\n+ Frank Dellaert\n Richard Roberts\n- Date\n- Oct 17, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01367.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01367.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,5 @@\n var a01367 = [\n- [\"gtsam::SymbolicConditional\", \"a04996.html\", \"a04996\"],\n- [\"gtsam::traits< SymbolicConditional >\", \"a05000.html\", null]\n+ [\"gtsam::EliminationTraits< SymbolicFactorGraph >\", \"a05020.html\", \"a05020\"],\n+ [\"gtsam::SymbolicFactorGraph\", \"a05024.html\", \"a05024\"],\n+ [\"gtsam::traits< SymbolicFactorGraph >\", \"a05028.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01367_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01367_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicConditional.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -98,168 +98,204 @@\n
No Matches
\n \n \n \n \n \n
\n-
SymbolicConditional.h
\n+
SymbolicFactorGraph.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Testable.h>
\n-
21#include <gtsam/base/types.h>
\n-
22#include <gtsam/inference/Conditional-inst.h>
\n-\n-
24
\n-
25namespace gtsam {
\n-
26
\n+
19#pragma once
\n+
20
\n+\n+\n+\n+
24#include <gtsam/base/types.h>
\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
28 class SymbolicFactorGraph;
\n+
29 class SymbolicConditional;
\n+
30 class SymbolicBayesNet;
\n+
31 class SymbolicEliminationTree;
\n+
32 class SymbolicBayesTree;
\n+
33 class SymbolicJunctionTree;
\n+
34
\n+
35 /* ************************************************************************* */
\n
\n-
36 class GTSAM_EXPORT SymbolicConditional :
\n-
37 public SymbolicFactor,
\n-
38 public Conditional<SymbolicFactor, SymbolicConditional> {
\n-
39
\n-
40 public:
\n-\n-\n-\n-
44 typedef boost::shared_ptr<This> shared_ptr;
\n-\n-\n-
47
\n-
50
\n-\n-
53
\n-\n-
56
\n-
58 SymbolicConditional(Key j, Key parent) : BaseFactor(j, parent), BaseConditional(1) {}
\n-
59
\n-
61 SymbolicConditional(Key j, Key parent1, Key parent2) : BaseFactor(j, parent1, parent2), BaseConditional(1) {}
\n-
62
\n-
64 SymbolicConditional(Key j, Key parent1, Key parent2, Key parent3) : BaseFactor(j, parent1, parent2, parent3), BaseConditional(1) {}
\n-
65
\n-
67 template<typename ITERATOR>
\n-
\n-
68 static SymbolicConditional FromIterators(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
\n-
69 {
\n-\n-
71 (BaseFactor&)result = BaseFactor::FromIterators(firstKey, lastKey);
\n-
72 result.nrFrontals_ = nrFrontals;
\n-
73 return result;
\n-
74 }
\n-
\n-
75
\n-
77 template<typename ITERATOR>
\n-
\n-
78 static SymbolicConditional::shared_ptr FromIteratorsShared(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
\n-
79 {
\n-
80 SymbolicConditional::shared_ptr result = boost::make_shared<SymbolicConditional>();
\n-
81 result->keys_.assign(firstKey, lastKey);
\n-
82 result->nrFrontals_ = nrFrontals;
\n-
83 return result;
\n-
84 }
\n+\n+
37 {
\n+\n+\n+\n+\n+\n+\n+\n+
46 static std::pair<boost::shared_ptr<ConditionalType>, boost::shared_ptr<FactorType> >
\n+
\n+
47 DefaultEliminate(const FactorGraphType& factors, const Ordering& keys) {
\n+
48 return EliminateSymbolic(factors, keys); }
\n+
\n+
\n+\n+
51 const FactorGraphType& graph,
\n+
52 boost::optional<const VariableIndex&> variableIndex) {
\n+
53 return Ordering::Colamd(*variableIndex);
\n+
54 }
\n
\n-
85
\n-
87 template<class CONTAINER>
\n-
\n-
88 static SymbolicConditional FromKeys(const CONTAINER& keys, size_t nrFrontals) {
\n-
89 return FromIterators(keys.begin(), keys.end(), nrFrontals);
\n-
90 }
\n+
55 };
\n
\n-
91
\n-
93 template<class CONTAINER>
\n+
56
\n+
57 /* ************************************************************************* */
\n+
\n+
61 class GTSAM_EXPORT SymbolicFactorGraph :
\n+
62 public FactorGraph<SymbolicFactor>,
\n+
63 public EliminateableFactorGraph<SymbolicFactorGraph>
\n+
64 {
\n+
65 public:
\n+
66
\n+\n+\n+\n+
70 typedef boost::shared_ptr<This> shared_ptr;
\n+
71
\n+
74
\n+\n+
77
\n+
79 template<typename ITERATOR>
\n+
80 SymbolicFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor) : Base(firstFactor, lastFactor) {}
\n+
81
\n+
83 template<class CONTAINER>
\n+
84 explicit SymbolicFactorGraph(const CONTAINER& factors) : Base(factors) {}
\n+
85
\n+
87 template<class DERIVEDFACTOR>
\n+\n+
89
\n
\n-
94 static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER& keys, size_t nrFrontals) {
\n-
95 return FromIteratorsShared(keys.begin(), keys.end(), nrFrontals);
\n-
96 }
\n+\n+
95 std::initializer_list<boost::shared_ptr<SymbolicFactor>> sharedFactors)
\n+
96 : Base(sharedFactors) {}
\n
\n
97
\n-
99 SymbolicFactor::shared_ptr clone() const { return boost::make_shared<This>(*this); }
\n-
100
\n-
104
\n-
106 void print(
\n-
107 const std::string& str = "",
\n-
108 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n-
109
\n-
111 bool equals(const This& c, double tol = 1e-9) const;
\n-
112
\n+
\n+\n+
100 push_back(boost::make_shared<SymbolicFactor>(c));
\n+
101 }
\n+
\n+
102
\n+
\n+\n+
110 push_back(boost::make_shared<SymbolicFactor>(c));
\n+
111 return *this;
\n+
112 }
\n+
\n+
113
\n+\n
116
\n-
118 double logProbability(const HybridValues& x) const override;
\n-
119
\n-
121 double evaluate(const HybridValues& x) const override;
\n-
122
\n-
123 using Conditional::operator(); // Expose evaluate(const HybridValues&) method..
\n-
124 using SymbolicFactor::error; // Expose error(const HybridValues&) method..
\n-
125
\n-
127
\n-
128 private:
\n-
130 friend class boost::serialization::access;
\n-
131 template<class Archive>
\n-
132 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
133 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
\n-
134 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
\n-
135 }
\n-
136 };
\n-
\n-
137
\n-
139template<>
\n-
\n-
140struct traits<SymbolicConditional> : public Testable<SymbolicConditional> {
\n-
141};
\n-
\n-
142
\n-
143} //\\ namespace gtsam
\n-
Typedefs for easier changing of types.
\n-
Concept check for values that can be used in unit tests.
\n-\n+
118
\n+
121
\n+
122 bool equals(const This& fg, double tol = 1e-9) const;
\n+
123
\n+
\n+
125 void print(
\n+
126 const std::string& s = "SymbolicFactorGraph",
\n+
127 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n+
128 Base::print(s, formatter);
\n+
129 }
\n+
\n+
130
\n+
132
\n+
135
\n+
137 void push_factor(Key key);
\n+
138
\n+
140 void push_factor(Key key1, Key key2);
\n+
141
\n+
143 void push_factor(Key key1, Key key2, Key key3);
\n+
144
\n+
146 void push_factor(Key key1, Key key2, Key key3, Key key4);
\n+
147
\n+
149
\n+
150 private:
\n+
152 friend class boost::serialization::access;
\n+
153 template<class ARCHIVE>
\n+
154 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
155 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
156 }
\n+
157 };
\n+
\n+
158
\n+
160template<>
\n+
\n+
161struct traits<SymbolicFactorGraph> : public Testable<SymbolicFactorGraph> {
\n+
162};
\n+
\n+
163
\n+
164} //\\ namespace gtsam
\n+
Typedefs for easier changing of types.
\n+
Variable elimination algorithms for factor graphs.
\n+
Factor Graph Base Class.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > EliminateSymbolic(const SymbolicFactorGraph &factors, const Ordering &keys)
Dense elimination function for symbolic factors.
Definition SymbolicFactor.cpp:36
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Conditional.h:64
\n-
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n-
KeyVector::iterator iterator
Iterator over keys.
Definition Factor.h:77
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n+
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:57
\n+
Definition Ordering.h:34
\n+
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:95
\n+
A SymbolicBayesNet is a Bayes Net of purely symbolic conditionals.
Definition SymbolicBayesNet.h:32
\n+
A Bayes tree that represents the connectivity between variables but is not associated with any probab...
Definition SymbolicBayesTree.h:51
\n
SymbolicConditional is a conditional with keys but no probability data, produced by symbolic eliminat...
Definition SymbolicConditional.h:38
\n-
SymbolicConditional(Key j, Key parent1, Key parent2, Key parent3)
Three parents.
Definition SymbolicConditional.h:64
\n-
SymbolicConditional()
Empty Constructor to make serialization possible.
Definition SymbolicConditional.h:52
\n-
static SymbolicConditional FromKeys(const CONTAINER &keys, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition SymbolicConditional.h:88
\n-
BaseFactor::const_iterator const_iterator
iterator to keys
Definition SymbolicConditional.h:46
\n-
boost::shared_ptr< This > shared_ptr
Typedef to the conditional base class.
Definition SymbolicConditional.h:44
\n-
Conditional< BaseFactor, This > BaseConditional
Typedef to the factor base class.
Definition SymbolicConditional.h:43
\n-
static SymbolicConditional::shared_ptr FromIteratorsShared(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition SymbolicConditional.h:78
\n-
static SymbolicConditional FromIterators(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition SymbolicConditional.h:68
\n-
SymbolicConditional(Key j, Key parent)
Single parent.
Definition SymbolicConditional.h:58
\n-
SymbolicConditional(Key j)
No parents.
Definition SymbolicConditional.h:55
\n-
SymbolicConditional(Key j, Key parent1, Key parent2)
Two parents.
Definition SymbolicConditional.h:61
\n-
SymbolicFactor::shared_ptr clone() const
Copy this object as its actual derived type.
Definition SymbolicConditional.h:99
\n-
BaseFactor::iterator iterator
Boost shared_ptr to this class.
Definition SymbolicConditional.h:45
\n-
SymbolicFactor BaseFactor
Typedef to this class.
Definition SymbolicConditional.h:42
\n-
static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER &keys, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition SymbolicConditional.h:94
\n+
Definition SymbolicEliminationTree.h:29
\n
SymbolicFactor represents a symbolic factor that specifies graph topology but is not associated with ...
Definition SymbolicFactor.h:39
\n-
boost::shared_ptr< This > shared_ptr
Overriding the shared_ptr typedef.
Definition SymbolicFactor.h:48
\n+
SymbolicFactor FactorType
Type of factors in factor graph.
Definition SymbolicFactorGraph.h:38
\n+
SymbolicFactorGraph FactorGraphType
Type of the factor graph (e.g. GaussianFactorGraph)
Definition SymbolicFactorGraph.h:39
\n+
SymbolicEliminationTree EliminationTreeType
Type of elimination tree.
Definition SymbolicFactorGraph.h:42
\n+
SymbolicBayesNet BayesNetType
Type of Bayes net from sequential elimination.
Definition SymbolicFactorGraph.h:41
\n+
static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering &keys)
The default dense elimination function.
Definition SymbolicFactorGraph.h:47
\n+
static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::optional< const VariableIndex & > variableIndex)
The default ordering generation function.
Definition SymbolicFactorGraph.h:50
\n+
SymbolicJunctionTree JunctionTreeType
Type of Junction tree.
Definition SymbolicFactorGraph.h:44
\n+
SymbolicBayesTree BayesTreeType
Type of Bayes tree.
Definition SymbolicFactorGraph.h:43
\n+
SymbolicConditional ConditionalType
Type of conditionals from elimination.
Definition SymbolicFactorGraph.h:40
\n+
Symbolic Factor Graph.
Definition SymbolicFactorGraph.h:64
\n+
SymbolicFactorGraph(SymbolicFactor &&c)
Construct from a single factor.
Definition SymbolicFactorGraph.h:99
\n+
SymbolicFactorGraph & operator()(SymbolicFactor &&c)
Add a single factor and return a reference.
Definition SymbolicFactorGraph.h:109
\n+
SymbolicFactorGraph()
Construct empty factor graph.
Definition SymbolicFactorGraph.h:76
\n+
SymbolicFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition SymbolicFactorGraph.h:88
\n+
SymbolicFactorGraph(std::initializer_list< boost::shared_ptr< SymbolicFactor > > sharedFactors)
Constructor that takes an initializer list of shared pointers.
Definition SymbolicFactorGraph.h:94
\n+
void print(const std::string &s="SymbolicFactorGraph", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition SymbolicFactorGraph.h:125
\n+
EliminateableFactorGraph< This > BaseEliminateable
Typedef to base elimination class.
Definition SymbolicFactorGraph.h:69
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition SymbolicFactorGraph.h:70
\n+
SymbolicFactorGraph This
Typedef to this class.
Definition SymbolicFactorGraph.h:67
\n+
SymbolicFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Construct from iterator over factors.
Definition SymbolicFactorGraph.h:80
\n+
virtual ~SymbolicFactorGraph()
Destructor.
Definition SymbolicFactorGraph.h:115
\n+
FactorGraph< SymbolicFactor > Base
Typedef to base factor graph type.
Definition SymbolicFactorGraph.h:68
\n+
SymbolicFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects)
Definition SymbolicFactorGraph.h:84
\n+
A EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition SymbolicJunctionTree.h:51
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,141 +1,157 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicConditional.h\n+SymbolicFactorGraph.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-22#include \n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-_\b3_\b6 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl :\n-37 public _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br,\n-38 public _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n-39\n-40 public:\n-41 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bT_\bh_\bi_\bs;\n-_\b4_\b2 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br;\n-_\b4_\b3 typedef _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bT_\bh_\bi_\bs_\b> _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-_\b4_\b4 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-_\b4_\b5 typedef _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b4_\b6 typedef _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-47\n-50\n-_\b5_\b2 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() {}\n-53\n-_\b5_\b5 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by j) : _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(j), _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(1) {}\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28 class SymbolicFactorGraph;\n+29 class SymbolicConditional;\n+30 class SymbolicBayesNet;\n+31 class SymbolicEliminationTree;\n+32 class SymbolicBayesTree;\n+33 class SymbolicJunctionTree;\n+34\n+35 /* *************************************************************************\n+*/\n+_\b3_\b6 template<> struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh>\n+37 {\n+_\b3_\b8 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n+_\b3_\b9 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n+_\b4_\b0 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+_\b4_\b1 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n+_\b4_\b2 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+_\b4_\b3 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+_\b4_\b4 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+46 static std::pair, boost::\n+shared_ptr >\n+_\b4_\b7 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) {\n+48 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc(factors, keys); }\n+_\b5_\b0 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc(\n+51 const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& graph,\n+52 boost::optional variableIndex) {\n+53 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd(*variableIndex);\n+54 }\n+55 };\n 56\n-_\b5_\b8 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by j, _\bK_\be_\by parent) : _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(j, parent),\n-_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(1) {}\n-59\n-_\b6_\b1 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by j, _\bK_\be_\by parent1, _\bK_\be_\by parent2) : _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(j,\n-parent1, parent2), _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(1) {}\n-62\n-_\b6_\b4 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by j, _\bK_\be_\by parent1, _\bK_\be_\by parent2, _\bK_\be_\by parent3) :\n-_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(j, parent1, parent2, parent3), _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(1) {}\n-65\n-67 template\n-_\b6_\b8 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs(ITERATOR firstKey, ITERATOR\n-lastKey, size_t nrFrontals)\n-69 {\n-70 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl result;\n-71 (_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br&)result = BaseFactor::FromIterators(firstKey, lastKey);\n-72 result.nrFrontals_ = nrFrontals;\n-73 return result;\n-74 }\n-75\n-77 template\n-_\b7_\b8 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd(ITERATOR\n-firstKey, ITERATOR lastKey, size_t nrFrontals)\n-79 {\n-80 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br result = boost::\n-make_shared();\n-81 result->keys_.assign(firstKey, lastKey);\n-82 result->nrFrontals_ = nrFrontals;\n-83 return result;\n-84 }\n+57 /* *************************************************************************\n+*/\n+_\b6_\b1 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh :\n+62 public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh,\n+63 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+64 {\n+65 public:\n+66\n+_\b6_\b7 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bT_\bh_\bi_\bs;\n+_\b6_\b8 typedef _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b> _\bB_\ba_\bs_\be;\n+_\b6_\b9 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bT_\bh_\bi_\bs_\b> _\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be;\n+_\b7_\b0 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+71\n+74\n+_\b7_\b6 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n+77\n+79 template\n+_\b8_\b0 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(ITERATOR firstFactor, ITERATOR lastFactor) : _\bB_\ba_\bs_\be\n+(firstFactor, lastFactor) {}\n+81\n+83 template\n+_\b8_\b4 explicit _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const CONTAINER& factors) : _\bB_\ba_\bs_\be(factors) {}\n 85\n-87 template\n-_\b8_\b8 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bF_\br_\bo_\bm_\bK_\be_\by_\bs(const CONTAINER& keys, size_t\n-nrFrontals) {\n-89 return FromIterators(keys.begin(), keys.end(), nrFrontals);\n-90 }\n-91\n-93 template\n-_\b9_\b4 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd(const CONTAINER& keys,\n-size_t nrFrontals) {\n-95 return FromIteratorsShared(keys.begin(), keys.end(), nrFrontals);\n-96 }\n+87 template\n+_\b8_\b8 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph) : _\bB_\ba_\bs_\be(graph)\n+{}\n+89\n+_\b9_\b4 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(\n+95 std::initializer_list> sharedFactors)\n+96 : _\bB_\ba_\bs_\be(sharedFactors) {}\n 97\n-_\b9_\b9 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const { return boost::make_shared\n-(*this); }\n-100\n-104\n-106 void _\bp_\br_\bi_\bn_\bt(\n-107 const std::string& str = \"\",\n-108 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n-109\n-111 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& c, double tol = 1e-9) const;\n-112\n+_\b9_\b9 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br&& c) {\n+100 push_back(boost::make_shared(c));\n+101 }\n+102\n+_\b1_\b0_\b9 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br&& c) {\n+110 push_back(boost::make_shared(c));\n+111 return *this;\n+112 }\n+113\n+_\b1_\b1_\b5 virtual _\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n 116\n-118 double logProbability(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n-119\n-121 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n-122\n-123 using Conditional::operator(); // Expose evaluate(const HybridValues&)\n-method..\n-124 using SymbolicFactor::error; // Expose error(const HybridValues&) method..\n-125\n-127\n-128 private:\n-_\b1_\b3_\b0 friend class boost::serialization::access;\n-131 template\n-132 void serialize(Archive & ar, const unsigned int /*version*/) {\n-133 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br);\n-134 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl);\n-135 }\n-136 };\n-137\n-139template<>\n-_\b1_\b4_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-141};\n-142\n-143} //\\ namespace gtsam\n+118\n+121\n+122 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& fg, double tol = 1e-9) const;\n+123\n+_\b1_\b2_\b5 void _\bp_\br_\bi_\bn_\bt(\n+126 const std::string& s = \"SymbolicFactorGraph\",\n+127 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n+128 Base::print(s, formatter);\n+129 }\n+130\n+132\n+135\n+137 void push_factor(_\bK_\be_\by key);\n+138\n+140 void push_factor(_\bK_\be_\by key1, _\bK_\be_\by key2);\n+141\n+143 void push_factor(_\bK_\be_\by key1, _\bK_\be_\by key2, _\bK_\be_\by key3);\n+144\n+146 void push_factor(_\bK_\be_\by key1, _\bK_\be_\by key2, _\bK_\be_\by key3, _\bK_\be_\by key4);\n+147\n+149\n+150 private:\n+_\b1_\b5_\b2 friend class boost::serialization::access;\n+153 template\n+154 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+155 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+156 }\n+157 };\n+158\n+160template<>\n+_\b1_\b6_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+162};\n+163\n+164} //\\ namespace gtsam\n _\bt_\by_\bp_\be_\bs_\b._\bh\n Typedefs for easier changing of types.\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Variable elimination algorithms for factor graphs.\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc\n+std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr<\n+SymbolicFactor > > EliminateSymbolic(const SymbolicFactorGraph &factors, const\n+Ordering &keys)\n+Dense elimination function for symbolic factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.cpp:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n@@ -146,99 +162,148 @@\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::const_iterator const_iterator\n-Const iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::iterator iterator\n-Iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n+Traits class for eliminateable factor graphs, specifies the types that result\n+from elimination,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+EliminateableFactorGraph is a base class for factor graphs that contains\n+elimination algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd\n+static Ordering Colamd(const FACTOR_GRAPH &graph)\n+Compute a fill-reducing ordering using COLAMD from a factor graph (see details\n+for note on performanc...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+A SymbolicBayesNet is a Bayes Net of purely symbolic conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+A Bayes tree that represents the connectivity between variables but is not\n+associated with any probab...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesTree.h:51\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n SymbolicConditional is a conditional with keys but no probability data,\n produced by symbolic eliminat...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-SymbolicConditional(Key j, Key parent1, Key parent2, Key parent3)\n-Three parents.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-SymbolicConditional()\n-Empty Constructor to make serialization possible.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs\n-static SymbolicConditional FromKeys(const CONTAINER &keys, size_t nrFrontals)\n-Named constructor from an arbitrary number of keys and frontals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-BaseFactor::const_iterator const_iterator\n-iterator to keys\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-Typedef to the conditional base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Conditional< BaseFactor, This > BaseConditional\n-Typedef to the factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd\n-static SymbolicConditional::shared_ptr FromIteratorsShared(ITERATOR firstKey,\n-ITERATOR lastKey, size_t nrFrontals)\n-Named constructor from an arbitrary number of keys and frontals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs\n-static SymbolicConditional FromIterators(ITERATOR firstKey, ITERATOR lastKey,\n-size_t nrFrontals)\n-Named constructor from an arbitrary number of keys and frontals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-SymbolicConditional(Key j, Key parent)\n-Single parent.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-SymbolicConditional(Key j)\n-No parents.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-SymbolicConditional(Key j, Key parent1, Key parent2)\n-Two parents.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-SymbolicFactor::shared_ptr clone() const\n-Copy this object as its actual derived type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-BaseFactor::iterator iterator\n-Boost shared_ptr to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n-SymbolicFactor BaseFactor\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd\n-static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER &keys,\n-size_t nrFrontals)\n-Named constructor from an arbitrary number of keys and frontals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:29\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n SymbolicFactor represents a symbolic factor that specifies graph topology but\n is not associated with ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n+SymbolicFactor FactorType\n+Type of factors in factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n+SymbolicFactorGraph FactorGraphType\n+Type of the factor graph (e.g. GaussianFactorGraph)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+SymbolicEliminationTree EliminationTreeType\n+Type of elimination tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n+SymbolicBayesNet BayesNetType\n+Type of Bayes net from sequential elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr<\n+FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering\n+&keys)\n+The default dense elimination function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc\n+static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::\n+optional< const VariableIndex & > variableIndex)\n+The default ordering generation function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+SymbolicJunctionTree JunctionTreeType\n+Type of Junction tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+SymbolicBayesTree BayesTreeType\n+Type of Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n+SymbolicConditional ConditionalType\n+Type of conditionals from elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+Symbolic Factor Graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+SymbolicFactorGraph(SymbolicFactor &&c)\n+Construct from a single factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+SymbolicFactorGraph & operator()(SymbolicFactor &&c)\n+Add a single factor and return a reference.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+SymbolicFactorGraph()\n+Construct empty factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+SymbolicFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n+Implicit copy/downcast constructor to override explicit template container\n+constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+SymbolicFactorGraph(std::initializer_list< boost::shared_ptr< SymbolicFactor >\n+> sharedFactors)\n+Constructor that takes an initializer list of shared pointers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"SymbolicFactorGraph\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:125\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be\n+EliminateableFactorGraph< This > BaseEliminateable\n+Typedef to base elimination class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n boost::shared_ptr< This > shared_ptr\n-Overriding the shared_ptr typedef.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:48\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bT_\bh_\bi_\bs\n+SymbolicFactorGraph This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+SymbolicFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)\n+Construct from iterator over factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+virtual ~SymbolicFactorGraph()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be\n+FactorGraph< SymbolicFactor > Base\n+Typedef to base factor graph type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+SymbolicFactorGraph(const CONTAINER &factors)\n+Construct from container of factors (shared_ptr or plain objects)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+A EliminatableClusterTree, i.e., a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicJunctionTree.h:51\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01370.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01370.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicConditional.h File Reference\n \n \n \n \n \n \n \n@@ -95,50 +95,43 @@\n \n \n \n \n
\n \n-
SymbolicFactor.h File Reference
\n+Namespaces
\n+
SymbolicConditional.h File Reference
\n \n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::SymbolicFactor
 SymbolicFactor represents a symbolic factor that specifies graph topology but is not associated with any numerical function. More...
class  gtsam::SymbolicConditional
 SymbolicConditional is a conditional with keys but no probability data, produced by symbolic elimination of SymbolicFactor. More...
 
struct  gtsam::traits< SymbolicFactor >
 traits More...
struct  gtsam::traits< SymbolicConditional >
 traits More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > gtsam::EliminateSymbolic (const SymbolicFactorGraph &factors, const Ordering &keys)
 Dense elimination function for symbolic factors.
 
\n

Detailed Description

\n
Author
Richard Roberts
\n
Date
Oct 17, 2010
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,36 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SymbolicFactor.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymbolicConditional.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br represents a symbolic factor that specifies graph\n- topology but is not associated with any numerical function. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+\u00a0 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl is a conditional with keys but no probability\n+ data, produced by symbolic elimination of _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b _\b>\n \u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc (const\n- _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n-shared_ptr< _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n-\u00a0 Dense elimination function for symbolic\n- factors.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n Richard Roberts\n Date\n Oct 17, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01370.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01370.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,4 @@\n var a01370 = [\n- [\"gtsam::SymbolicFactor\", \"a05012.html\", \"a05012\"],\n- [\"gtsam::traits< SymbolicFactor >\", \"a05016.html\", null],\n- [\"EliminateSymbolic\", \"a01370.html#a659f20993995258b1405737e375efd10\", null]\n+ [\"gtsam::SymbolicConditional\", \"a04996.html\", \"a04996\"],\n+ [\"gtsam::traits< SymbolicConditional >\", \"a05000.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01370_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01370_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicConditional.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
SymbolicFactor.h
\n+
SymbolicConditional.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,200 +114,152 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n-
21#include <gtsam/inference/Key.h>
\n-
22#include <gtsam/base/Testable.h>
\n-
23
\n-
24#include <boost/shared_ptr.hpp>
\n-
25#include <boost/make_shared.hpp>
\n+
20#include <gtsam/base/Testable.h>
\n+
21#include <gtsam/base/types.h>
\n+
22#include <gtsam/inference/Conditional-inst.h>
\n+\n+
24
\n+
25namespace gtsam {
\n
26
\n-
27#include <utility>
\n-
28
\n-
29namespace gtsam {
\n-
30
\n-
31 // Forward declarations
\n-
32 class SymbolicConditional;
\n-
33 class HybridValues;
\n-
34 class Ordering;
\n-
35
\n-
\n-
39 class GTSAM_EXPORT SymbolicFactor : public Factor {
\n-
40
\n-
41 public:
\n-
42
\n-
43 typedef SymbolicFactor This;
\n-
44 typedef Factor Base;
\n-\n-
46
\n-
48 typedef boost::shared_ptr<This> shared_ptr;
\n-
49
\n-
52
\n-\n-
55
\n-
\n-
57 explicit SymbolicFactor(Key j) :
\n-
58 Base(KeyVector{j}) {}
\n-
\n+
\n+
36 class GTSAM_EXPORT SymbolicConditional :
\n+
37 public SymbolicFactor,
\n+
38 public Conditional<SymbolicFactor, SymbolicConditional> {
\n+
39
\n+
40 public:
\n+\n+\n+\n+
44 typedef boost::shared_ptr<This> shared_ptr;
\n+\n+\n+
47
\n+
50
\n+\n+
53
\n+\n+
56
\n+
58 SymbolicConditional(Key j, Key parent) : BaseFactor(j, parent), BaseConditional(1) {}
\n
59
\n-
\n-\n-
62 Base(KeyVector{j1, j2}) {}
\n-
\n-
63
\n-
\n-
65 SymbolicFactor(Key j1, Key j2, Key j3) :
\n-
66 Base(KeyVector{j1, j2, j3}) {}
\n-
\n-
67
\n-
\n-
69 SymbolicFactor(Key j1, Key j2, Key j3, Key j4) :
\n-
70 Base(KeyVector{j1, j2, j3, j4}) {}
\n-
\n-
71
\n-
\n-
73 SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5) :
\n-
74 Base(KeyVector{j1, j2, j3, j4, j5}) {}
\n+
61 SymbolicConditional(Key j, Key parent1, Key parent2) : BaseFactor(j, parent1, parent2), BaseConditional(1) {}
\n+
62
\n+
64 SymbolicConditional(Key j, Key parent1, Key parent2, Key parent3) : BaseFactor(j, parent1, parent2, parent3), BaseConditional(1) {}
\n+
65
\n+
67 template<typename ITERATOR>
\n+
\n+
68 static SymbolicConditional FromIterators(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
\n+
69 {
\n+\n+
71 (BaseFactor&)result = BaseFactor::FromIterators(firstKey, lastKey);
\n+
72 result.nrFrontals_ = nrFrontals;
\n+
73 return result;
\n+
74 }
\n
\n
75
\n-
\n-
77 SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5, Key j6) :
\n-
78 Base(KeyVector{j1, j2, j3, j4, j5, j6}) {}
\n-
\n-
79
\n-
81 explicit SymbolicFactor(const Factor& factor) : Base(factor.keys()) {}
\n-
82
\n-
83 virtual ~SymbolicFactor() {}
\n-
84
\n-
86 SymbolicFactor::shared_ptr clone() const { return boost::make_shared<This>(*this); }
\n-
87
\n-
89
\n-
92
\n-
93 bool equals(const This& other, double tol = 1e-9) const;
\n-
94
\n-
\n-
96 void print(
\n-
97 const std::string& s = "SymbolicFactor",
\n-
98 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n-
99 Base::print(s, formatter);
\n-
100 }
\n-
\n-
101
\n-
\n-\n-
104 const std::string& s = "SymbolicFactor",
\n-
105 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n-
106 Base::printKeys(s, formatter);
\n-
107 }
\n-
\n-
108
\n-
112
\n-
114 template<typename KEYITERATOR>
\n-
\n-
115 static SymbolicFactor FromIterators(KEYITERATOR beginKey, KEYITERATOR endKey) {
\n-
116 return SymbolicFactor(Base::FromIterators(beginKey, endKey));
\n-
117 }
\n-
\n-
118
\n-
120 template<typename KEYITERATOR>
\n-
\n-
121 static SymbolicFactor::shared_ptr FromIteratorsShared(KEYITERATOR beginKey, KEYITERATOR endKey) {
\n-
122 SymbolicFactor::shared_ptr result = boost::make_shared<SymbolicFactor>();
\n-
123 result->keys_.assign(beginKey, endKey);
\n-
124 return result;
\n-
125 }
\n-
\n-
126
\n-
129 template<class CONTAINER>
\n-
\n-
130 static SymbolicFactor FromKeys(const CONTAINER& keys) {
\n-
131 return SymbolicFactor(Base::FromKeys(keys));
\n-
132 }
\n-
\n-
133
\n-
136 template<class CONTAINER>
\n-
\n-
137 static SymbolicFactor::shared_ptr FromKeysShared(const CONTAINER& keys) {
\n-
138 return FromIteratorsShared(keys.begin(), keys.end());
\n-
139 }
\n+
77 template<typename ITERATOR>
\n+
\n+
78 static SymbolicConditional::shared_ptr FromIteratorsShared(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
\n+
79 {
\n+
80 SymbolicConditional::shared_ptr result = boost::make_shared<SymbolicConditional>();
\n+
81 result->keys_.assign(firstKey, lastKey);
\n+
82 result->nrFrontals_ = nrFrontals;
\n+
83 return result;
\n+
84 }
\n+
\n+
85
\n+
87 template<class CONTAINER>
\n+
\n+
88 static SymbolicConditional FromKeys(const CONTAINER& keys, size_t nrFrontals) {
\n+
89 return FromIterators(keys.begin(), keys.end(), nrFrontals);
\n+
90 }
\n+
\n+
91
\n+
93 template<class CONTAINER>
\n+
\n+
94 static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER& keys, size_t nrFrontals) {
\n+
95 return FromIteratorsShared(keys.begin(), keys.end(), nrFrontals);
\n+
96 }
\n+
\n+
97
\n+
99 SymbolicFactor::shared_ptr clone() const { return boost::make_shared<This>(*this); }
\n+
100
\n+
104
\n+
106 void print(
\n+
107 const std::string& str = "",
\n+
108 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n+
109
\n+
111 bool equals(const This& c, double tol = 1e-9) const;
\n+
112
\n+
116
\n+
118 double logProbability(const HybridValues& x) const override;
\n+
119
\n+
121 double evaluate(const HybridValues& x) const override;
\n+
122
\n+
123 using Conditional::operator(); // Expose evaluate(const HybridValues&) method..
\n+
124 using SymbolicFactor::error; // Expose error(const HybridValues&) method..
\n+
125
\n+
127
\n+
128 private:
\n+
130 friend class boost::serialization::access;
\n+
131 template<class Archive>
\n+
132 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
133 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
\n+
134 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
\n+
135 }
\n+
136 };
\n+
\n+
137
\n+
139template<>
\n+
\n+
140struct traits<SymbolicConditional> : public Testable<SymbolicConditional> {
\n+
141};
\n
\n-
140
\n
142
\n-
145
\n-
147 double error(const HybridValues& c) const override;
\n-
148
\n-
151 std::pair<boost::shared_ptr<SymbolicConditional>, boost::shared_ptr<SymbolicFactor> >
\n-
152 eliminate(const Ordering& keys) const;
\n-
153
\n-
155
\n-
156 private:
\n-
158 friend class boost::serialization::access;
\n-
159 template<class ARCHIVE>
\n-
160 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
161 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
162 }
\n-
163 }; // IndexFactor
\n-
\n-
164
\n-
165 // Forward declarations
\n-
166 class SymbolicFactorGraph;
\n-
167 class Ordering;
\n-
168
\n-
173 GTSAM_EXPORT std::pair<boost::shared_ptr<SymbolicConditional>, boost::shared_ptr<SymbolicFactor> >
\n-
174 EliminateSymbolic(const SymbolicFactorGraph& factors, const Ordering& keys);
\n-
175
\n-
177 template<>
\n-
\n-
178 struct traits<SymbolicFactor> : public Testable<SymbolicFactor> {
\n-
179 };
\n-
\n-
180
\n-
181} //\\ namespace gtsam
\n-
182
\n-
Concept check for values that can be used in unit tests.
\n-
The base class for all factors.
\n-\n+
143} //\\ namespace gtsam
\n+
Typedefs for easier changing of types.
\n+
Concept check for values that can be used in unit tests.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > EliminateSymbolic(const SymbolicFactorGraph &factors, const Ordering &keys)
Dense elimination function for symbolic factors.
Definition SymbolicFactor.cpp:36
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Factor.h:68
\n-
Definition Ordering.h:34
\n+
Definition Conditional.h:64
\n+
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n+
KeyVector::iterator iterator
Iterator over keys.
Definition Factor.h:77
\n
SymbolicConditional is a conditional with keys but no probability data, produced by symbolic eliminat...
Definition SymbolicConditional.h:38
\n+
SymbolicConditional(Key j, Key parent1, Key parent2, Key parent3)
Three parents.
Definition SymbolicConditional.h:64
\n+
SymbolicConditional()
Empty Constructor to make serialization possible.
Definition SymbolicConditional.h:52
\n+
static SymbolicConditional FromKeys(const CONTAINER &keys, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition SymbolicConditional.h:88
\n+
BaseFactor::const_iterator const_iterator
iterator to keys
Definition SymbolicConditional.h:46
\n+
boost::shared_ptr< This > shared_ptr
Typedef to the conditional base class.
Definition SymbolicConditional.h:44
\n+
Conditional< BaseFactor, This > BaseConditional
Typedef to the factor base class.
Definition SymbolicConditional.h:43
\n+
static SymbolicConditional::shared_ptr FromIteratorsShared(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition SymbolicConditional.h:78
\n+
static SymbolicConditional FromIterators(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition SymbolicConditional.h:68
\n+
SymbolicConditional(Key j, Key parent)
Single parent.
Definition SymbolicConditional.h:58
\n+
SymbolicConditional(Key j)
No parents.
Definition SymbolicConditional.h:55
\n+
SymbolicConditional(Key j, Key parent1, Key parent2)
Two parents.
Definition SymbolicConditional.h:61
\n+
SymbolicFactor::shared_ptr clone() const
Copy this object as its actual derived type.
Definition SymbolicConditional.h:99
\n+
BaseFactor::iterator iterator
Boost shared_ptr to this class.
Definition SymbolicConditional.h:45
\n+
SymbolicFactor BaseFactor
Typedef to this class.
Definition SymbolicConditional.h:42
\n+
static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER &keys, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition SymbolicConditional.h:94
\n
SymbolicFactor represents a symbolic factor that specifies graph topology but is not associated with ...
Definition SymbolicFactor.h:39
\n-
void print(const std::string &s="SymbolicFactor", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition SymbolicFactor.h:96
\n-
SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5, Key j6)
Construct 6-way factor.
Definition SymbolicFactor.h:77
\n
boost::shared_ptr< This > shared_ptr
Overriding the shared_ptr typedef.
Definition SymbolicFactor.h:48
\n-
static SymbolicFactor FromKeys(const CONTAINER &keys)
Constructor from a collection of keys - compatible with boost assign::list_of and boost assign::cref_...
Definition SymbolicFactor.h:130
\n-
SymbolicFactor(const Factor &factor)
Create symbolic version of any factor.
Definition SymbolicFactor.h:81
\n-
SymbolicFactor(Key j1, Key j2, Key j3, Key j4)
Construct 4-way factor.
Definition SymbolicFactor.h:69
\n-
SymbolicFactor(Key j1, Key j2)
Construct binary factor.
Definition SymbolicFactor.h:61
\n-
static SymbolicFactor FromIterators(KEYITERATOR beginKey, KEYITERATOR endKey)
Constructor from a collection of keys.
Definition SymbolicFactor.h:115
\n-
void printKeys(const std::string &s="SymbolicFactor", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print only keys
Definition SymbolicFactor.h:103
\n-
static SymbolicFactor::shared_ptr FromKeysShared(const CONTAINER &keys)
Constructor from a collection of keys - compatible with boost assign::list_of and boost assign::cref_...
Definition SymbolicFactor.h:137
\n-
SymbolicFactor(Key j1, Key j2, Key j3)
Construct ternary factor.
Definition SymbolicFactor.h:65
\n-
SymbolicFactor(Key j)
Construct unary factor.
Definition SymbolicFactor.h:57
\n-
SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5)
Construct 5-way factor.
Definition SymbolicFactor.h:73
\n-
static SymbolicFactor::shared_ptr FromIteratorsShared(KEYITERATOR beginKey, KEYITERATOR endKey)
Constructor from a collection of keys.
Definition SymbolicFactor.h:121
\n-
SymbolicFactor()
Default constructor for I/O.
Definition SymbolicFactor.h:54
\n-
SymbolicFactor::shared_ptr clone() const
Copy this object as its actual derived type.
Definition SymbolicFactor.h:86
\n-
the error.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicFactor.h\n+SymbolicConditional.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,159 +16,126 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-23\n-24#include \n-25#include \n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+22#include \n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n 26\n-27#include \n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-31 // Forward declarations\n-32 class SymbolicConditional;\n-33 class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n-34 class Ordering;\n-35\n-_\b3_\b9 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br : public _\bF_\ba_\bc_\bt_\bo_\br {\n-40\n-41 public:\n-42\n-43 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-44 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-45 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-46\n-_\b4_\b8 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-49\n-52\n-_\b5_\b4 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br() {}\n-55\n-_\b5_\b7 explicit _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j) :\n-58 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j}) {}\n+_\b3_\b6 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl :\n+37 public _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br,\n+38 public _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n+39\n+40 public:\n+41 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bT_\bh_\bi_\bs;\n+_\b4_\b2 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br;\n+_\b4_\b3 typedef _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b,_\b _\bT_\bh_\bi_\bs_\b> _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+_\b4_\b4 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b4_\b5 typedef _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b4_\b6 typedef _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+47\n+50\n+_\b5_\b2 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() {}\n+53\n+_\b5_\b5 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by j) : _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(j), _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(1) {}\n+56\n+_\b5_\b8 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by j, _\bK_\be_\by parent) : _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(j, parent),\n+_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(1) {}\n 59\n-_\b6_\b1 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2) :\n-62 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j1, j2}) {}\n-63\n-_\b6_\b5 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, _\bK_\be_\by j3) :\n-66 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j1, j2, j3}) {}\n-67\n-_\b6_\b9 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, _\bK_\be_\by j3, _\bK_\be_\by j4) :\n-70 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j1, j2, j3, j4}) {}\n-71\n-_\b7_\b3 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, _\bK_\be_\by j3, _\bK_\be_\by j4, _\bK_\be_\by j5) :\n-74 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j1, j2, j3, j4, j5}) {}\n+_\b6_\b1 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by j, _\bK_\be_\by parent1, _\bK_\be_\by parent2) : _\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(j,\n+parent1, parent2), _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(1) {}\n+62\n+_\b6_\b4 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(_\bK_\be_\by j, _\bK_\be_\by parent1, _\bK_\be_\by parent2, _\bK_\be_\by parent3) :\n+_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(j, parent1, parent2, parent3), _\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(1) {}\n+65\n+67 template\n+_\b6_\b8 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs(ITERATOR firstKey, ITERATOR\n+lastKey, size_t nrFrontals)\n+69 {\n+70 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl result;\n+71 (_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br&)result = BaseFactor::FromIterators(firstKey, lastKey);\n+72 result.nrFrontals_ = nrFrontals;\n+73 return result;\n+74 }\n 75\n-_\b7_\b7 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, _\bK_\be_\by j3, _\bK_\be_\by j4, _\bK_\be_\by j5, _\bK_\be_\by j6) :\n-78 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j1, j2, j3, j4, j5, j6}) {}\n-79\n-_\b8_\b1 explicit _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(const _\bF_\ba_\bc_\bt_\bo_\br& factor) : _\bB_\ba_\bs_\be(factor.keys()) {}\n-82\n-83 virtual _\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br() {}\n-84\n-_\b8_\b6 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const { return boost::make_shared\n+77 template\n+_\b7_\b8 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd(ITERATOR\n+firstKey, ITERATOR lastKey, size_t nrFrontals)\n+79 {\n+80 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br result = boost::\n+make_shared();\n+81 result->keys_.assign(firstKey, lastKey);\n+82 result->nrFrontals_ = nrFrontals;\n+83 return result;\n+84 }\n+85\n+87 template\n+_\b8_\b8 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bF_\br_\bo_\bm_\bK_\be_\by_\bs(const CONTAINER& keys, size_t\n+nrFrontals) {\n+89 return FromIterators(keys.begin(), keys.end(), nrFrontals);\n+90 }\n+91\n+93 template\n+_\b9_\b4 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd(const CONTAINER& keys,\n+size_t nrFrontals) {\n+95 return FromIteratorsShared(keys.begin(), keys.end(), nrFrontals);\n+96 }\n+97\n+_\b9_\b9 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const { return boost::make_shared\n (*this); }\n-87\n-89\n-92\n-93 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n-94\n-_\b9_\b6 void _\bp_\br_\bi_\bn_\bt(\n-97 const std::string& s = \"SymbolicFactor\",\n-98 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n-99 Base::print(s, formatter);\n-100 }\n-101\n-_\b1_\b0_\b3 void _\bp_\br_\bi_\bn_\bt_\bK_\be_\by_\bs(\n-104 const std::string& s = \"SymbolicFactor\",\n-105 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n-106 Base::printKeys(s, formatter);\n-107 }\n-108\n+100\n+104\n+106 void _\bp_\br_\bi_\bn_\bt(\n+107 const std::string& str = \"\",\n+108 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n+109\n+111 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& c, double tol = 1e-9) const;\n 112\n-114 template\n-_\b1_\b1_\b5 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs(KEYITERATOR beginKey, KEYITERATOR\n-endKey) {\n-116 return _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(Base::FromIterators(beginKey, endKey));\n-117 }\n-118\n-120 template\n-_\b1_\b2_\b1 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd(KEYITERATOR beginKey,\n-KEYITERATOR endKey) {\n-122 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br result = boost::make_shared();\n-123 result->keys_.assign(beginKey, endKey);\n-124 return result;\n-125 }\n-126\n-129 template\n-_\b1_\b3_\b0 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bF_\br_\bo_\bm_\bK_\be_\by_\bs(const CONTAINER& keys) {\n-131 return _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(Base::FromKeys(keys));\n-132 }\n-133\n-136 template\n-_\b1_\b3_\b7 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd(const CONTAINER& keys) {\n-138 return FromIteratorsShared(keys.begin(), keys.end());\n-139 }\n-140\n+116\n+118 double logProbability(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n+119\n+121 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n+122\n+123 using Conditional::operator(); // Expose evaluate(const HybridValues&)\n+method..\n+124 using SymbolicFactor::error; // Expose error(const HybridValues&) method..\n+125\n+127\n+128 private:\n+_\b1_\b3_\b0 friend class boost::serialization::access;\n+131 template\n+132 void serialize(Archive & ar, const unsigned int /*version*/) {\n+133 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br);\n+134 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl);\n+135 }\n+136 };\n+137\n+139template<>\n+_\b1_\b4_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+141};\n 142\n-145\n-147 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n-148\n-151 std::pair, boost::\n-shared_ptr >\n-152 eliminate(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) const;\n-153\n-155\n-156 private:\n-_\b1_\b5_\b8 friend class boost::serialization::access;\n-159 template\n-160 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-161 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-162 }\n-163 }; // IndexFactor\n-164\n-165 // Forward declarations\n-166 class SymbolicFactorGraph;\n-167 class Ordering;\n-168\n-173 GTSAM_EXPORT std::pair, boost::\n-shared_ptr >\n-174 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc(const SymbolicFactorGraph& factors, const Ordering&\n-keys);\n-175\n-177 template<>\n-_\b1_\b7_\b8 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-179 };\n-180\n-181} //\\ namespace gtsam\n-182\n+143} //\\ namespace gtsam\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n Concept check for values that can be used in unit tests.\n-_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-The base class for all factors.\n-_\bK_\be_\by_\b._\bh\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc\n-std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr<\n-SymbolicFactor > > EliminateSymbolic(const SymbolicFactorGraph &factors, const\n-Ordering &keys)\n-Dense elimination function for symbolic factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.cpp:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n@@ -182,94 +149,96 @@\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n HybridValues represents a collection of DiscreteValues and VectorValues.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+KeyVector::const_iterator const_iterator\n+Const iterator over keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+KeyVector::iterator iterator\n+Iterator over keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:77\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n SymbolicConditional is a conditional with keys but no probability data,\n produced by symbolic eliminat...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+SymbolicConditional(Key j, Key parent1, Key parent2, Key parent3)\n+Three parents.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+SymbolicConditional()\n+Empty Constructor to make serialization possible.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs\n+static SymbolicConditional FromKeys(const CONTAINER &keys, size_t nrFrontals)\n+Named constructor from an arbitrary number of keys and frontals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+BaseFactor::const_iterator const_iterator\n+iterator to keys\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Typedef to the conditional base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Conditional< BaseFactor, This > BaseConditional\n+Typedef to the factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd\n+static SymbolicConditional::shared_ptr FromIteratorsShared(ITERATOR firstKey,\n+ITERATOR lastKey, size_t nrFrontals)\n+Named constructor from an arbitrary number of keys and frontals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs\n+static SymbolicConditional FromIterators(ITERATOR firstKey, ITERATOR lastKey,\n+size_t nrFrontals)\n+Named constructor from an arbitrary number of keys and frontals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+SymbolicConditional(Key j, Key parent)\n+Single parent.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+SymbolicConditional(Key j)\n+No parents.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+SymbolicConditional(Key j, Key parent1, Key parent2)\n+Two parents.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+SymbolicFactor::shared_ptr clone() const\n+Copy this object as its actual derived type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+BaseFactor::iterator iterator\n+Boost shared_ptr to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bB_\ba_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+SymbolicFactor BaseFactor\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd\n+static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER &keys,\n+size_t nrFrontals)\n+Named constructor from an arbitrary number of keys and frontals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:94\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n SymbolicFactor represents a symbolic factor that specifies graph topology but\n is not associated with ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"SymbolicFactor\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5, Key j6)\n-Construct 6-way factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:77\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n boost::shared_ptr< This > shared_ptr\n Overriding the shared_ptr typedef.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs\n-static SymbolicFactor FromKeys(const CONTAINER &keys)\n-Constructor from a collection of keys - compatible with boost assign::list_of\n-and boost assign::cref_...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-SymbolicFactor(const Factor &factor)\n-Create symbolic version of any factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-SymbolicFactor(Key j1, Key j2, Key j3, Key j4)\n-Construct 4-way factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-SymbolicFactor(Key j1, Key j2)\n-Construct binary factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs\n-static SymbolicFactor FromIterators(KEYITERATOR beginKey, KEYITERATOR endKey)\n-Constructor from a collection of keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt_\bK_\be_\by_\bs\n-void printKeys(const std::string &s=\"SymbolicFactor\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const override\n-print only keys\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd\n-static SymbolicFactor::shared_ptr FromKeysShared(const CONTAINER &keys)\n-Constructor from a collection of keys - compatible with boost assign::list_of\n-and boost assign::cref_...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-SymbolicFactor(Key j1, Key j2, Key j3)\n-Construct ternary factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-SymbolicFactor(Key j)\n-Construct unary factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5)\n-Construct 5-way factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd\n-static SymbolicFactor::shared_ptr FromIteratorsShared(KEYITERATOR beginKey,\n-KEYITERATOR endKey)\n-Constructor from a collection of keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:121\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-SymbolicFactor()\n-Default constructor for I/O.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-SymbolicFactor::shared_ptr clone() const\n-Copy this object as its actual derived type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:86\n-_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-the error.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01373.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01373.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicJunctionTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesNet.h File Reference\n \n \n \n \n \n \n \n@@ -94,34 +94,46 @@\n
\n \n \n \n \n
\n \n-
SymbolicJunctionTree.cpp File Reference
\n+
SymbolicBayesNet.h File Reference
\n
\n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::SymbolicBayesNet
 A SymbolicBayesNet is a Bayes Net of purely symbolic conditionals. More...
 
struct  gtsam::traits< SymbolicBayesNet >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Mar 29, 2013
\n+
Date
Oct 29, 2009
\n
Author
Frank Dellaert
\n
\n Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicJunctionTree.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymbolicBayesNet.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+\u00a0 A _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt is a Bayes Net of purely symbolic conditionals.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Mar 29, 2013\n+ Oct 29, 2009\n Author\n Frank Dellaert\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01376.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01376.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactor-inst.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactor.cpp File Reference\n \n \n \n \n \n \n \n@@ -96,74 +96,37 @@\n \n \n \n
\n \n-
SymbolicFactor-inst.h File Reference
\n+
SymbolicFactor.cpp File Reference
\n
\n
\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n+\n+\n+\n

\n Functions

template<class FACTOR >
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > gtsam::internal::EliminateSymbolic (const FactorGraph< FACTOR > &factors, const Ordering &keys)
 Implementation of dense elimination function for symbolic factors.
 
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > gtsam::EliminateSymbolic (const SymbolicFactorGraph &factors, const Ordering &keys)
 Dense elimination function for symbolic factors.
 
\n

Detailed Description

\n
Author
Richard Roberts
\n
Date
Oct 17, 2010
\n-

Function Documentation

\n-\n-

◆ EliminateSymbolic()

\n-\n-
\n-
\n-
\n-template<class FACTOR >
\n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n- \n-
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > gtsam::internal::EliminateSymbolic (const FactorGraph< FACTOR > & factors,
const Orderingkeys 
)
\n-
\n-\n-

Implementation of dense elimination function for symbolic factors.

\n-

This is a templated version for internally doing symbolic elimination on any factor.

\n-\n-
\n-
\n-
\n+\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,41 +1,27 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-SymbolicFactor-inst.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+SymbolicFactor.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc (const\n- _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh< FACTOR > &factors, const\n+ std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc (const\n+ _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n shared_ptr< _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n-\u00a0 Implementation of dense elimination\n- function for symbolic factors.\n+\u00a0 Dense elimination function for symbolic\n+ factors.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n Richard Roberts\n Date\n Oct 17, 2010\n-*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0E\bEl\bli\bim\bmi\bin\bna\bat\bte\beS\bSy\bym\bmb\bbo\bol\bli\bic\bc(\b()\b) *\b**\b**\b**\b**\b*\n-template\n-std::pair< boost::shared_ptr<\n-SymbolicConditional >, boost:: ( const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh< FACTOR > &\u00a0 f\bfa\bac\bct\bto\bor\brs\bs,\n-shared_ptr< SymbolicFactor > >\n-gtsam::internal::EliminateSymbolic\n- const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &\u00a0 k\bke\bey\bys\bs\u00a0\n- )\n-Implementation of dense elimination function for symbolic factors.\n-This is a templated version for internally doing symbolic elimination on any\n-factor.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01376.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01376.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01376 = [\n- [\"EliminateSymbolic\", \"a01376.html#ae394348e1a503834f713405afa9afad8\", null]\n+ [\"EliminateSymbolic\", \"a01376.html#a659f20993995258b1405737e375efd10\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01379.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01379.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicISAM.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactor.h File Reference\n \n \n \n \n \n \n \n@@ -94,34 +94,51 @@\n \n \n \n \n \n
\n \n-
SymbolicISAM.cpp File Reference
\n+Classes |\n+Namespaces |\n+Functions
\n+
SymbolicFactor.h File Reference
\n \n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::SymbolicFactor
 SymbolicFactor represents a symbolic factor that specifies graph topology but is not associated with any numerical function. More...
 
struct  gtsam::traits< SymbolicFactor >
 traits More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Functions

std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > gtsam::EliminateSymbolic (const SymbolicFactorGraph &factors, const Ordering &keys)
 Dense elimination function for symbolic factors.
 
\n

Detailed Description

\n-
Date
July 29, 2013
\n-
Author
Frank Dellaert
\n-
\n-Richard Roberts
\n+
Author
Richard Roberts
\n+
Date
Oct 17, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,36 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicISAM.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SymbolicFactor.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br represents a symbolic factor that specifies graph\n+ topology but is not associated with any numerical function. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ std::pair< boost::shared_ptr< _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc (const\n+ _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl >, boost:: _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n+shared_ptr< _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br > >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n+\u00a0 Dense elimination function for symbolic\n+ factors.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- July 29, 2013\n Author\n- Frank Dellaert\n Richard Roberts\n+ Date\n+ Oct 17, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM_\b._\bc_\bp_\bp\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01382.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01382.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesNet.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicJunctionTree.h File Reference\n \n \n \n \n \n \n \n@@ -95,45 +95,50 @@\n \n \n \n \n
\n \n-
SymbolicBayesNet.h File Reference
\n+Namespaces |\n+Typedefs
\n+
SymbolicJunctionTree.h File Reference
\n \n
\n \n

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::SymbolicBayesNet
 A SymbolicBayesNet is a Bayes Net of purely symbolic conditionals. More...
 
struct  gtsam::traits< SymbolicBayesNet >
 traits More...
class  gtsam::SymbolicJunctionTree
 A EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree, with the additional property that it represents the clique tree associated with a Bayes net. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n

\n+Typedefs

\n+using gtsam::SymbolicCluster = SymbolicJunctionTree::Cluster
 typedef for wrapper:
 
\n

Detailed Description

\n-
Date
Oct 29, 2009
\n+
Date
Mar 29, 2013
\n
Author
Frank Dellaert
\n
\n Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicBayesNet.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+SymbolicJunctionTree.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-\u00a0 A _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt is a Bayes Net of purely symbolic conditionals.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+ A _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be, i.e., a set of variable clusters with\n+\u00a0 factors, arranged in a tree, with the additional property that it\n+ represents the clique tree associated with a Bayes net. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSy\bym\bmb\bbo\bol\bli\bic\bcC\bCl\blu\bus\bst\bte\ber\br = _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n+\u00a0 typedef for wrapper:\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Oct 29, 2009\n+ Mar 29, 2013\n Author\n Frank Dellaert\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01382.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01382.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var a01382 = [\n- [\"gtsam::traits< SymbolicBayesNet >\", \"a04976.html\", null]\n+ [\"SymbolicCluster\", \"a01382.html#ad78d0a5ba773ceac7ff253525032a15e\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01382_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01382_source.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesNet.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicJunctionTree.h Source File\n \n \n \n \n \n \n \n@@ -98,15 +98,15 @@\n
No Matches
\n \n \n \n \n \n
\n-
SymbolicBayesNet.h
\n+
SymbolicJunctionTree.h
\n
\n
\n Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n@@ -114,130 +114,52 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-\n-
24#include <gtsam/base/types.h>
\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
\n-
32 class SymbolicBayesNet : public BayesNet<SymbolicConditional> {
\n-
33 public:
\n-\n-
35 typedef SymbolicBayesNet This;
\n-\n-
37 typedef boost::shared_ptr<This> shared_ptr;
\n-
38 typedef boost::shared_ptr<ConditionalType> sharedConditional;
\n-
39
\n-
42
\n-\n-
45
\n-
47 template <typename ITERATOR>
\n-
\n-
48 SymbolicBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
\n-
49 : Base(firstConditional, lastConditional) {}
\n-
\n-
50
\n-
52 template <class CONTAINER>
\n-
\n-
53 explicit SymbolicBayesNet(const CONTAINER& conditionals) {
\n-
54 push_back(conditionals);
\n-
55 }
\n-
\n+\n+\n+\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
27 // Forward declarations
\n+
28 class SymbolicEliminationTree;
\n+
29
\n+
\n+
50 class GTSAM_EXPORT SymbolicJunctionTree :
\n+
51 public JunctionTree<SymbolicBayesTree, SymbolicFactorGraph> {
\n+
52 public:
\n+\n+\n+
55 typedef boost::shared_ptr<This> shared_ptr;
\n
56
\n-
59 template <class DERIVEDCONDITIONAL>
\n-
\n-\n-
61 : Base(graph) {}
\n-
\n-
62
\n-
\n-
67 SymbolicBayesNet(std::initializer_list<boost::shared_ptr<SymbolicConditional>> conditionals)
\n-
68 : Base(conditionals) {}
\n-
\n-
69
\n-
\n-\n-
72 push_back(boost::make_shared<SymbolicConditional>(c));
\n-
73 }
\n-
\n-
74
\n-
\n-\n-
82 push_back(boost::make_shared<SymbolicConditional>(c));
\n-
83 return *this;
\n-
84 }
\n-
\n-
85
\n-
87 virtual ~SymbolicBayesNet() {}
\n-
88
\n-
90
\n-
93
\n-
95 GTSAM_EXPORT bool equals(const This& bn, double tol = 1e-9) const;
\n-
96
\n-
\n-
98 GTSAM_EXPORT void print(
\n-
99 const std::string& s = "SymbolicBayesNet",
\n-
100 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n-
101 Base::print(s, formatter);
\n-
102 }
\n-
\n-
103
\n-
105
\n-
106 private:
\n-\n-
109 template<class ARCHIVE>
\n-
110 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
111 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
112 }
\n-
113};
\n-
\n-
114
\n-
116 template<>
\n-
\n-
117 struct traits<SymbolicBayesNet> : public Testable<SymbolicBayesNet> {
\n-
118 };
\n-
\n-
119
\n-
120} //\\ namespace gtsam
\n-
Typedefs for easier changing of types.
\n-
Factor Graph Base Class.
\n-
Bayes network.
\n-\n+
65 SymbolicJunctionTree(const SymbolicEliminationTree& eliminationTree);
\n+
66 };
\n+
\n+
67
\n+\n+
70}
\n+
The junction tree.
\n+\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n-
void print(const std::string &s="BayesNet", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print out graph
Definition BayesNet-inst.h:32
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition FactorGraph.h:186
\n-
A SymbolicBayesNet is a Bayes Net of purely symbolic conditionals.
Definition SymbolicBayesNet.h:32
\n-
virtual ~SymbolicBayesNet()
Destructor.
Definition SymbolicBayesNet.h:87
\n-
SymbolicBayesNet(SymbolicConditional &&c)
Construct from a single conditional.
Definition SymbolicBayesNet.h:71
\n-
GTSAM_EXPORT void print(const std::string &s="SymbolicBayesNet", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition SymbolicBayesNet.h:98
\n-
SymbolicBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
Construct from iterator over conditionals.
Definition SymbolicBayesNet.h:48
\n-
SymbolicBayesNet(std::initializer_list< boost::shared_ptr< SymbolicConditional > > conditionals)
Constructor that takes an initializer list of shared pointers.
Definition SymbolicBayesNet.h:67
\n-
SymbolicBayesNet(const CONTAINER &conditionals)
Construct from container of factors (shared_ptr or plain objects)
Definition SymbolicBayesNet.h:53
\n-
SymbolicBayesNet()
Construct empty factor graph.
Definition SymbolicBayesNet.h:44
\n-
friend class boost::serialization::access
Serialization function.
Definition SymbolicBayesNet.h:108
\n-
SymbolicBayesNet & operator()(SymbolicConditional &&c)
Add a single conditional and return a reference.
Definition SymbolicBayesNet.h:81
\n-
SymbolicBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition SymbolicBayesNet.h:60
\n-
SymbolicConditional is a conditional with keys but no probability data, produced by symbolic eliminat...
Definition SymbolicConditional.h:38
\n+
A Cluster is just a collection of factors.
Definition ClusterTree.h:36
\n+
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n+
Definition SymbolicEliminationTree.h:29
\n+
A EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition SymbolicJunctionTree.h:51
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition SymbolicJunctionTree.h:55
\n+
JunctionTree< SymbolicBayesTree, SymbolicFactorGraph > Base
Base class.
Definition SymbolicJunctionTree.h:53
\n+
SymbolicJunctionTree This
This class.
Definition SymbolicJunctionTree.h:54
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicBayesNet.h\n+SymbolicJunctionTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,171 +16,64 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-_\b3_\b2 class _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt : public _\bB_\ba_\by_\be_\bs_\bN_\be_\bt {\n-33 public:\n-34 typedef _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b> _\bB_\ba_\bs_\be;\n-35 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bT_\bh_\bi_\bs;\n-36 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-37 typedef boost::shared_ptr shared_ptr;\n-38 typedef boost::shared_ptr sharedConditional;\n-39\n-42\n-_\b4_\b4 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n-45\n-47 template \n-_\b4_\b8 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(ITERATOR firstConditional, ITERATOR lastConditional)\n-49 : _\bB_\ba_\bs_\be(firstConditional, lastConditional) {}\n-50\n-52 template \n-_\b5_\b3 explicit _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const CONTAINER& conditionals) {\n-54 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(conditionals);\n-55 }\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+27 // Forward declarations\n+28 class SymbolicEliminationTree;\n+29\n+_\b5_\b0 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n+51 public _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n+52 public:\n+_\b5_\b3 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b,_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n+_\b5_\b4 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+_\b5_\b5 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n 56\n-59 template \n-_\b6_\b0 explicit _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>& graph)\n-61 : _\bB_\ba_\bs_\be(graph) {}\n-62\n-_\b6_\b7 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(std::initializer_list> conditionals)\n-68 : _\bB_\ba_\bs_\be(conditionals) {}\n-69\n-_\b7_\b1 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl&& c) {\n-72 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(boost::make_shared(c));\n-73 }\n-74\n-_\b8_\b1 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl&& c) {\n-82 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(boost::make_shared(c));\n-83 return *this;\n-84 }\n-85\n-_\b8_\b7 virtual _\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n-88\n-90\n-93\n-95 GTSAM_EXPORT bool _\be_\bq_\bu_\ba_\bl_\bs(const This& bn, double tol = 1e-9) const;\n-96\n-_\b9_\b8 GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(\n-99 const std::string& s = \"SymbolicBayesNet\",\n-100 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n-101 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, formatter);\n-102 }\n-103\n-105\n-106 private:\n-_\b1_\b0_\b8 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-109 template\n-110 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-111 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-112 }\n-113};\n-114\n-116 template<>\n-_\b1_\b1_\b7 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-118 };\n-119\n-120} //\\ namespace gtsam\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n-_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-Bayes network.\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+65 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be& eliminationTree);\n+66 };\n+67\n+_\b6_\b9 using _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bl_\bu_\bs_\bt_\be_\br = _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br;\n+70}\n+_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+The junction tree.\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-A BayesNet is a tree of conditionals, stored in elimination order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b _\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"BayesNet\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const override\n-print out graph\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)\n-Add a factor directly using a shared_ptr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-A SymbolicBayesNet is a Bayes Net of purely symbolic conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-virtual ~SymbolicBayesNet()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-SymbolicBayesNet(SymbolicConditional &&c)\n-Construct from a single conditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-GTSAM_EXPORT void print(const std::string &s=\"SymbolicBayesNet\", const\n-KeyFormatter &formatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-SymbolicBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)\n-Construct from iterator over conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-SymbolicBayesNet(std::initializer_list< boost::shared_ptr< SymbolicConditional\n-> > conditionals)\n-Constructor that takes an initializer list of shared pointers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-SymbolicBayesNet(const CONTAINER &conditionals)\n-Construct from container of factors (shared_ptr or plain objects)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-SymbolicBayesNet()\n-Construct empty factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-SymbolicBayesNet & operator()(SymbolicConditional &&c)\n-Add a single conditional and return a reference.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-SymbolicBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)\n-Implicit copy/downcast constructor to override explicit template container\n-constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-SymbolicConditional is a conditional with keys but no probability data,\n-produced by symbolic eliminat...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n+A Cluster is just a collection of factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+A JunctionTree is a cluster tree, a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+A EliminatableClusterTree, i.e., a set of variable clusters with factors,\n+arranged in a tree,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicJunctionTree.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Shared pointer to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicJunctionTree.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n+JunctionTree< SymbolicBayesTree, SymbolicFactorGraph > Base\n+Base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicJunctionTree.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+SymbolicJunctionTree This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicJunctionTree.h:54\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01385.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01385.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactorGraph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesNet.cpp File Reference\n \n \n \n \n \n \n \n@@ -94,33 +94,19 @@\n \n \n \n \n \n
\n \n-
SymbolicFactorGraph.h File Reference
\n+
SymbolicBayesNet.cpp File Reference
\n
\n
\n-\n-

Go to the source code of this file.

\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-

\n-Classes

struct  gtsam::EliminationTraits< SymbolicFactorGraph >
 
class  gtsam::SymbolicFactorGraph
 Symbolic Factor Graph. More...
 
struct  gtsam::traits< SymbolicFactorGraph >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n@@ -129,13 +115,13 @@\n
\n Richard Roberts
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicFactorGraph.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-\u00a0 Symbolic _\bF_\ba_\bc_\bt_\bo_\br Graph. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymbolicBayesNet.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n Oct 29, 2009\n Author\n Frank Dellaert\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01388.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01388.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicEliminationTree.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicEliminationTree.h File Reference\n \n \n \n \n \n \n \n@@ -94,19 +94,30 @@\n \n \n \n \n \n
\n \n-
SymbolicEliminationTree.cpp File Reference
\n+
SymbolicEliminationTree.h File Reference
\n
\n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::SymbolicEliminationTree
 
struct  gtsam::traits< SymbolicEliminationTree >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n@@ -115,13 +126,13 @@\n
\n Richard Roberts
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicEliminationTree.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymbolicEliminationTree.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n Mar 29, 2013\n Author\n Frank Dellaert\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01391.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01391.html", "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesNet.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicJunctionTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -95,33 +95,33 @@\n \n \n \n \n
\n \n-
SymbolicBayesNet.cpp File Reference
\n+
SymbolicJunctionTree.cpp File Reference
\n
\n
\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Oct 29, 2009
\n+
Date
Mar 29, 2013
\n
Author
Frank Dellaert
\n
\n Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicBayesNet.cpp File Reference\n+SymbolicJunctionTree.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Oct 29, 2009\n+ Mar 29, 2013\n Author\n Frank Dellaert\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bc_\bp_\bp\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01397_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01397_source.html", "unified_diff": "@@ -118,74 +118,74 @@\n
11
\n
19#pragma once
\n
20
\n
21// All headers in base, except:
\n
22// treeTraversal-inst.h: very specific to only a few compilation units
\n
23// numericalDerivative.h : includes things in linear, nonlinear :-(
\n
24// testLie.h: includes numericalDerivative
\n-
25#include <gtsam/base/Lie.h>
\n+
25#include <gtsam/base/Lie.h>
\n
26#include <gtsam/base/chartTesting.h>
\n-
27#include <gtsam/base/cholesky.h>
\n+
27#include <gtsam/base/cholesky.h>
\n
28#include <gtsam/base/concepts.h>
\n
29#include <gtsam/base/ConcurrentMap.h>
\n-
30#include <gtsam/base/debug.h>
\n-\n-\n-
33#include <gtsam/base/FastList.h>
\n-
34#include <gtsam/base/FastMap.h>
\n-
35#include <gtsam/base/FastSet.h>
\n-\n+
30#include <gtsam/base/debug.h>
\n+\n+\n+
33#include <gtsam/base/FastList.h>
\n+
34#include <gtsam/base/FastMap.h>
\n+
35#include <gtsam/base/FastSet.h>
\n+\n
37#include <gtsam/base/GenericValue.h>
\n-
38#include <gtsam/base/Group.h>
\n-
39#include <gtsam/base/Lie.h>
\n-\n-
41#include <gtsam/base/Manifold.h>
\n-
42#include <gtsam/base/Matrix.h>
\n-\n-\n-\n-\n-\n-
48#include <gtsam/base/Testable.h>
\n-\n-\n-
51#include <gtsam/base/timing.h>
\n-
52#include <gtsam/base/types.h>
\n-
53#include <gtsam/base/Value.h>
\n-
54#include <gtsam/base/Vector.h>
\n+
38#include <gtsam/base/Group.h>
\n+
39#include <gtsam/base/Lie.h>
\n+\n+
41#include <gtsam/base/Manifold.h>
\n+
42#include <gtsam/base/Matrix.h>
\n+\n+\n+\n+\n+\n+
48#include <gtsam/base/Testable.h>
\n+\n+\n+
51#include <gtsam/base/timing.h>
\n+
52#include <gtsam/base/types.h>
\n+
53#include <gtsam/base/Value.h>
\n+
54#include <gtsam/base/Vector.h>
\n
55#include <gtsam/base/VectorSpace.h>
\n-\n+\n
57
\n
58
\n-
Base class and basic functions for Manifold types.
\n-
Global debugging flags.
\n-
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
\n-
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n-
An easy way to control which allocator is used for Fast* collections.
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Group product of two Lie Groups.
\n-
Access to matrices via blocks of pre-defined sizes.
\n-
Typedefs for easier changing of types.
\n-
Provides additional testing facilities for common data structures.
\n-
The base class for any variable that can be optimized or used in a factor.
\n-
A thin wrapper around std::set that uses boost's fast_pool_allocator.
\n-
Concept check class for variable types with Group properties.
\n-
A matrix with column blocks of pre-defined sizes.
\n-
Base class and basic functions for Lie types.
\n-
A faster implementation for DSF, which uses vector rather than btree.
\n-
Concept check for values that can be used in unit tests.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
typedef and functions to augment Eigen's VectorXd
\n-
Convenience functions for serializing data structures via boost.serialization.
\n-
Provides convenient mappings of common member functions for testing.
\n-
Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.
\n-
Timing utilities.
\n-\n-
Special class for optional Jacobian arguments.
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
A matrix with column blocks of pre-defined sizes.
\n+
Base class and basic functions for Lie types.
\n+
Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.
\n+
Provides convenient mappings of common member functions for testing.
\n+
Group product of two Lie Groups.
\n+
Typedefs for easier changing of types.
\n+
The base class for any variable that can be optimized or used in a factor.
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
A faster implementation for DSF, which uses vector rather than btree.
\n+
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
An easy way to control which allocator is used for Fast* collections.
\n+
Base class and basic functions for Manifold types.
\n+
Global debugging flags.
\n+
Concept check class for variable types with Group properties.
\n+
Provides additional testing facilities for common data structures.
\n+
Convenience functions for serializing data structures via boost.serialization.
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n+
A thin wrapper around std::set that uses boost's fast_pool_allocator.
\n+
Special class for optional Jacobian arguments.
\n+
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
\n+
Concept check for values that can be used in unit tests.
\n+
typedef and functions to augment Eigen's VectorXd
\n+
Access to matrices via blocks of pre-defined sizes.
\n+
Timing utilities.
\n+\n \n \n \n
\n
    \n
  • gtsam
  • precompiled_header.h
  • \n
  • Generated on Tue Jan 9 2024 05:51:35 for gtsam by \"doxygen\"/ 1.9.8
  • \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -54,62 +54,62 @@\n 52#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n 53#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\ba_\bl_\bu_\be_\b._\bh>\n 54#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n 55#include \n 56#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n 57\n 58\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bd_\be_\bb_\bu_\bg_\b._\bh\n-Global debugging flags.\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n-Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n-_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n-A thin wrapper around std::list that uses boost's fast_pool_allocator.\n-_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n-An easy way to control which allocator is used for Fast* collections.\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n+_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+A matrix with column blocks of pre-defined sizes.\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b._\bh\n+Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n+Cholesky.\n+_\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\b._\bh\n+Provides convenient mappings of common member functions for testing.\n _\bP_\br_\bo_\bd_\bu_\bc_\bt_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b._\bh\n Group product of two Lie Groups.\n-_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-Access to matrices via blocks of pre-defined sizes.\n _\bt_\by_\bp_\be_\bs_\b._\bh\n Typedefs for easier changing of types.\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bA_\bs_\bs_\be_\br_\bt_\bi_\bo_\bn_\bs_\b._\bh\n-Provides additional testing facilities for common data structures.\n _\bV_\ba_\bl_\bu_\be_\b._\bh\n The base class for any variable that can be optimized or used in a factor.\n-_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n-A thin wrapper around std::set that uses boost's fast_pool_allocator.\n-_\bG_\br_\bo_\bu_\bp_\b._\bh\n-Concept check class for variable types with Group properties.\n-_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-A matrix with column blocks of pre-defined sizes.\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n A faster implementation for DSF, which uses vector rather than btree.\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n+_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n+A thin wrapper around std::map that uses boost's fast_pool_allocator.\n+_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n+An easy way to control which allocator is used for Fast* collections.\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bd_\be_\bb_\bu_\bg_\b._\bh\n+Global debugging flags.\n+_\bG_\br_\bo_\bu_\bp_\b._\bh\n+Concept check class for variable types with Group properties.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bA_\bs_\bs_\be_\br_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+Provides additional testing facilities for common data structures.\n+_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+Convenience functions for serializing data structures via boost.serialization.\n _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n A thin wrapper around std::vector that uses a custom allocator.\n+_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+A thin wrapper around std::list that uses boost's fast_pool_allocator.\n+_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n+A thin wrapper around std::set that uses boost's fast_pool_allocator.\n+_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n+Special class for optional Jacobian arguments.\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n+Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n typedef and functions to augment Eigen's VectorXd\n-_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-Convenience functions for serializing data structures via boost.serialization.\n-_\bl_\bi_\be_\bP_\br_\bo_\bx_\bi_\be_\bs_\b._\bh\n-Provides convenient mappings of common member functions for testing.\n-_\bc_\bh_\bo_\bl_\be_\bs_\bk_\by_\b._\bh\n-Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained\n-Cholesky.\n+_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+Access to matrices via blocks of pre-defined sizes.\n _\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n Timing utilities.\n _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\be_\bs_\bt_\bH_\be_\bl_\bp_\be_\br_\bs_\b._\bh\n-_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n-Special class for optional Jacobian arguments.\n-_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n-A thin wrapper around std::map that uses boost's fast_pool_allocator.\n * _\bg_\bt_\bs_\ba_\bm\n * _\bp_\br_\be_\bc_\bo_\bm_\bp_\bi_\bl_\be_\bd_\b__\bh_\be_\ba_\bd_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01409.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01409.html", "unified_diff": "@@ -133,15 +133,15 @@\n
    \n
    Member gtsam::SphericalCamera::Dim ()
    \n
    \n
    Member gtsam::StereoCamera::project (const Point3 &point, OptionalJacobian< 3, 6 > H1, OptionalJacobian< 3, 3 > H2=boost::none, OptionalJacobian< 3, 0 > H3=boost::none) const
    \n
    , use project2 - this class has fixed calibration
    \n
    Member gtsam::Unit3::error (const Unit3 &q, OptionalJacobian< 2, 2 > H_q=boost::none) const
    \n
    , errorVector has the proper derivatives, this confusingly has only the second.
    \n-
    Member GTSAM_CONCEPT_TESTABLE_INST (T)
    \n+
    Member GTSAM_CONCEPT_TESTABLE_INST (T)
    \n
    please use BOOST_CONCEPT_ASSERT and
    \n \n
\n \n \n \n
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01413.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01413.html", "unified_diff": "@@ -136,25 +136,25 @@\n

 
class  gtsam::VerticalBlockMatrix
 This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks. More...
 
\n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n

\n Files

file  ThreadsafeException.h
 Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
file  ThreadsafeException.h
 Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
 
file  types.cpp
 Functions for handling type information.
file  types.cpp
 Functions for handling type information.
 
file  types.h
 Typedefs for easier changing of types.
file  types.h
 Typedefs for easier changing of types.
 
file  global_includes.h
 Included from all GTSAM files.
file  global_includes.h
 Included from all GTSAM files.
 
\n \n \n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01428.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01428.html", "unified_diff": "@@ -2788,19 +2788,19 @@\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@@ -3881,15 +3881,15 @@\n \n \n \n

\n Typedefs

template<typename T >
using gtsam::FastVector = std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >
 FastVector is a type alias to a std::vector with a custom memory allocator.
 
\n Vector concatVectors (size_t nrVectors,...)
 concatenate Vectors
 
\n bool equal (const Vector &vec1, const Vector &vec2, double tol)
 Override of equal in Lie.h.
 Override of equal in Lie.h.
 
\n bool equal (const Vector &vec1, const Vector &vec2)
 Override of equal in Lie.h.
 Override of equal in Lie.h.
 
\n template<class V1 , class V2 >
double dot (const V1 &a, const V2 &b)
 Dot product.
 
\n@@ -2978,15 +2978,15 @@\n
 
\n std::ostream & operator<< (std::ostream &os, const Pose2 &pose)
 
\n template<>
Matrix wedge< Pose2 > (const Vector &xi)
 specialization for pose2 wedge function (generic template in Lie.h)
 specialization for pose2 wedge function (generic template in Lie.h)
 
\n std::ostream & operator<< (std::ostream &os, const Pose3 &pose)
 
template<>
Matrix wedge< Pose3 > (const Vector &xi)
 wedge for Pose3:
\n const double logSqrt2PI = log(std::sqrt(2.0 * M_PI))
 constant needed below
 
\n

Detailed Description

\n

Global functions in a separate testing namespace.

\n-

triangulationFactor.h

\n+

triangulationFactor.h

\n

This file supports creating continuous functions f(x;p) as a linear combination of basis functions such as the Fourier basis on SO(2) or a set of Chebyshev polynomials on [-1,1].

\n

Matrix is a typedef in the gtsam namespace TODO: make a version to work with matlab wrapping we use the default < double,col_major,unbounded_array<double> >

\n

These should not be used outside of tests, as they are just remappings of the original functions. We use these to avoid needing to do too much std::bind magic or writing a bunch of separate proxy functions.

\n

Don't expect all classes to work for all of these functions.

\n

In the expression f(x;p) the variable x is the continuous argument at which the function is evaluated, and p are the parameters which are coefficients of the different basis functions, e.g. p = [4; 3; 2] => 4 + 3x + 2x^2 for a polynomial. However, different parameterizations are also possible.

\n

The Basis class below defines a number of functors that can be used to evaluate f(x;p) at a given x, and these functors also calculate the Jacobian of f(x;p) with respect to the parameters p. This is actually the most important calculation, as it will allow GTSAM to optimize over the parameters p.

\n

This functionality is implemented using the CRTP or \"Curiously recurring\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02280.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02280.html", "unified_diff": "@@ -198,15 +198,15 @@\n Friends\n \n class boost::serialization::access\n  Serialization function.
\n  \n \n


The documentation for this class was generated from the following file:\n
\n
\n \n
\n
    \n
  • gtsam
  • ConcurrentMap
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02296.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02296.html", "unified_diff": "@@ -142,16 +142,16 @@\n Public Types\n \n typedef std::vector< size_t > V\n  Vector of ints.
    \n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • DSFBase
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02300.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02300.html", "unified_diff": "@@ -170,16 +170,16 @@\n \"-\"/ Public Types inherited from gtsam::DSFBase\n \n typedef std::vector< size_t > V\n  Vector of ints.
    \n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • DSFVector
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02304.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02304.html", "unified_diff": "@@ -123,15 +123,15 @@\n

    \n Public Types

    \n \n typedef boost::fast_pool_allocator< T > type\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • FastDefaultAllocator
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02308.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02308.html", "unified_diff": "@@ -123,15 +123,15 @@\n

    \n Public Types

    \n \n typedef std::allocator< T > type\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • FastDefaultVectorAllocator
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02312.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02312.html", "unified_diff": "@@ -156,15 +156,15 @@\n Friends\n \n class boost::serialization::access\n  Serialization function.
    \n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastList.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastList.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • FastList
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02316.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02316.html", "unified_diff": "@@ -165,15 +165,15 @@\n Friends\n \n class boost::serialization::access\n  Serialization function.
    \n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastMap.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastMap.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • FastMap
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02320.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02320.html", "unified_diff": "@@ -168,15 +168,15 @@\n Friends\n \n class boost::serialization::access\n  Serialization function.
    \n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastSet.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastSet.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • FastSet
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02324.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02324.html", "unified_diff": "@@ -509,15 +509,15 @@\n

    Generic Value interface version of retract.

    \n \n

    Implements gtsam::Value.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/GenericValue.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/GenericValue.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • GenericValue
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02328.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02328.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const GenericValue< ValueType > &m, const std::string &str="")\n  \n \n static bool Equals (const GenericValue< ValueType > &m1, const GenericValue< ValueType > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/GenericValue.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/GenericValue.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< GenericValue< ValueType > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02332.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02332.html", "unified_diff": "@@ -111,15 +111,15 @@\n \"\"/\n \n \"gtsam::lie_group_tag\"\n \"gtsam::vector_space_tag\"\n \n
\n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • group_tag
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02336.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02336.html", "unified_diff": "@@ -99,15 +99,15 @@\n
    \n
    gtsam::multiplicative_group_tag Struct Reference
    \n
    \n
    \n

    Detailed Description

    \n

    Group operator syntax flavors.

    \n

    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n
    \n
    \n
\n \n
\n
    \n
  • gtsam
  • multiplicative_group_tag
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02340.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02340.html", "unified_diff": "@@ -97,15 +97,15 @@\n
\n \n
\n
gtsam::additive_group_tag Struct Reference
\n
\n
\n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
  • \n
\n
\n \n \n
\n
    \n
  • gtsam
  • additive_group_tag
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02344.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02344.html", "unified_diff": "@@ -120,15 +120,15 @@\n typedef traits< G >::structure_category structure_category_tag\n  \n \n typedef traits< G >::group_flavor flavor_tag\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • IsGroup
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02348.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02348.html", "unified_diff": "@@ -132,15 +132,15 @@\n

    \n Static Public Member Functions

    \n \n static DirectProduct Identity ()\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • DirectProduct
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02352.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02352.html", "unified_diff": "@@ -105,15 +105,15 @@\n
    \n
    \n
    \n
    \n \"\"/\n
    \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< DirectProduct< G, H > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02356.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02356.html", "unified_diff": "@@ -138,15 +138,15 @@\n

    \n Static Public Member Functions

    \n \n static DirectSum Identity ()\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • DirectSum
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02360.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02360.html", "unified_diff": "@@ -105,15 +105,15 @@\n
    \n
    \n
    \n
    \n \"\"/\n
    \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< DirectSum< G, H > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02364.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02364.html", "unified_diff": "@@ -205,15 +205,15 @@\n typedef Eigen::Matrix< double, N, N > Jacobian\n  \n \n typedef Eigen::Matrix< double, N, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • LieGroup
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02368.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02368.html", "unified_diff": "@@ -112,15 +112,15 @@\n \n \"gtsam::manifold_tag\"\n \"gtsam::group_tag\"\n \"gtsam::vector_space_tag\"\n \n
\n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • lie_group_tag
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02372.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02372.html", "unified_diff": "@@ -183,15 +183,15 @@\n

    \n Public Types

    \n \n typedef lie_group_tag structure_category\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • LieGroupTraits
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02376.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02376.html", "unified_diff": "@@ -178,15 +178,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • LieGroup
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02380.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02380.html", "unified_diff": "@@ -149,15 +149,15 @@\n typedef traits< T >::structure_category structure_category_tag\n  \n \n typedef traits< T >::group_flavor flavor_tag\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • IsLieGroup
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02384.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02384.html", "unified_diff": "@@ -114,15 +114,15 @@\n  TransformCovariance (const T &X)\n  \n \n T::Jacobian operator() (const typename T::Jacobian &covariance)\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • TransformCovariance
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02388.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02388.html", "unified_diff": "@@ -111,15 +111,15 @@\n \"\"/\n \n \"gtsam::lie_group_tag\"\n \"gtsam::vector_space_tag\"\n \n
\n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • manifold_tag
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02392.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02392.html", "unified_diff": "@@ -139,15 +139,15 @@\n

    \n Public Types

    \n enum  { dim = Class::dimension\n }\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • HasManifoldPrereqs
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02396.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02396.html", "unified_diff": "@@ -146,15 +146,15 @@\n

    \n Static Public Member Functions

    \n \n static int GetDimension (const Class &)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • GetDimensionImpl
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02400.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02400.html", "unified_diff": "@@ -110,15 +110,15 @@\n

    \n Static Public Member Functions

    \n \n static int GetDimension (const Class &m)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • GetDimensionImpl< Class, Eigen::Dynamic >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02404.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02404.html", "unified_diff": "@@ -168,15 +168,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • ManifoldTraits
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02408.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02408.html", "unified_diff": "@@ -158,15 +158,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • Manifold
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02412.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02412.html", "unified_diff": "@@ -124,15 +124,15 @@\n

    \n Public Types

    \n \n typedef const int value_type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • FixedDimension
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02416.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02416.html", "unified_diff": "@@ -117,15 +117,15 @@\n

    \n Public Types

    \n \n typedef Eigen::Map< const Eigen::Matrix< double, OutM, OutN, OutOptions > > ReshapedType\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Reshape
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02420.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02420.html", "unified_diff": "@@ -117,15 +117,15 @@\n

    \n Public Types

    \n \n typedef const Eigen::Matrix< double, M, M, InOptions > & ReshapedType\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Reshape< M, M, InOptions, M, M, InOptions >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02424.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02424.html", "unified_diff": "@@ -117,15 +117,15 @@\n

    \n Public Types

    \n \n typedef const Eigen::Matrix< double, M, N, InOptions > & ReshapedType\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Reshape< M, N, InOptions, M, N, InOptions >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02428.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02428.html", "unified_diff": "@@ -117,15 +117,15 @@\n

    \n Public Types

    \n \n typedef Eigen::Matrix< double, M, N, InOptions >::ConstTransposeReturnType ReshapedType\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Reshape< N, M, InOptions, M, N, InOptions >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02432.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02432.html", "unified_diff": "@@ -124,15 +124,15 @@\n typedef Eigen::Matrix< double, N, 1 > VectorN\n  \n \n typedef Eigen::Matrix< double, N, N > MatrixN\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • MultiplyWithInverse
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02436.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02436.html", "unified_diff": "@@ -132,15 +132,15 @@\n typedef Eigen::Matrix< double, N, N > MatrixN\n  \n \n typedef std::function< VectorN(const T &, const VectorN &, OptionalJacobian< N, M >, OptionalJacobian< N, N >)> Operator\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Matrix.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • MultiplyWithInverseFunction
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02440.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02440.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Public Types

    \n \n typedef Eigen::Matrix< double, traits< Y >::dimension, traits< X >::dimension > type\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • FixedSizeMatrix
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02444.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02444.html", "unified_diff": "@@ -121,15 +121,15 @@\n

    \n Public Types

    \n \n typedef internal::FixedSizeMatrix< X1 >::type Vector\n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • G_x1
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02448.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02448.html", "unified_diff": "@@ -261,15 +261,15 @@\n \n

    Constructor that will usurp data of a block expression TODO(frank): unfortunately using a Map makes usurping non-contiguous memory impossible.

    \n

    Return true if allocated, false if default constructor was used

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • OptionalJacobian
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02452.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02452.html", "unified_diff": "@@ -172,15 +172,15 @@\n \n

    View on constructor argument, if given.

    \n

    Default constructor acts like boost::none

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02456.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02456.html", "unified_diff": "@@ -117,15 +117,15 @@\n

    \n Public Types

    \n \n typedef Eigen::Matrix< double, traits< T >::dimension, traits< A >::dimension > type\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • MakeJacobian
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02460.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02460.html", "unified_diff": "@@ -117,15 +117,15 @@\n

    \n Public Types

    \n \n typedef OptionalJacobian< traits< T >::dimension, traits< A >::dimension > type\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • MakeOptionalJacobian
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02464.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02464.html", "unified_diff": "@@ -213,15 +213,15 @@\n }\n  \n enum  { dimension2 = traits<H>::dimension\n }\n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • ProductLieGroup
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02468.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02468.html", "unified_diff": "@@ -162,15 +162,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< ProductLieGroup< G, H > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02472.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02472.html", "unified_diff": "@@ -550,16 +550,16 @@\n \n

    Update an off diagonal block.

    \n

    NOTE(emmett): This assumes noalias().

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • SymmetricBlockMatrix
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02476.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02476.html", "unified_diff": "@@ -117,15 +117,15 @@\n

    \n Public Member Functions

    \n \n  BOOST_CONCEPT_USAGE (IsTestable)\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • IsTestable
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02480.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02480.html", "unified_diff": "@@ -128,15 +128,15 @@\n

    \n Public Attributes

    \n \n double tol_\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • equals
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02484.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02484.html", "unified_diff": "@@ -128,15 +128,15 @@\n

    \n Public Attributes

    \n \n double tol_\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • equals_star
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02488.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02488.html", "unified_diff": "@@ -129,15 +129,15 @@\n double tol\n  \n \n std::string str\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • HasTestablePrereqs
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02492.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02492.html", "unified_diff": "@@ -158,15 +158,15 @@\n static void Print (const T &m, const std::string &str="")\n  \n \n static bool Equals (const T &m1, const T &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Testable
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02496.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02496.html", "unified_diff": "@@ -157,15 +157,15 @@\n  \n \n boost::optional< String > description_\n  Optional description.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • ThreadsafeException
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02500.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02500.html", "unified_diff": "@@ -158,15 +158,15 @@\n  \n \n boost::optional< String > description_\n  Optional description.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • RuntimeErrorThreadsafe
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02504.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02504.html", "unified_diff": "@@ -158,15 +158,15 @@\n  \n \n boost::optional< String > description_\n  Optional description.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • OutOfRangeThreadsafe
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02508.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02508.html", "unified_diff": "@@ -158,15 +158,15 @@\n  \n \n boost::optional< String > description_\n  Optional description.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • InvalidArgumentThreadsafe
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02512.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02512.html", "unified_diff": "@@ -150,15 +150,15 @@\n  \n \n boost::optional< String > description_\n  Optional description.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • CholeskyFailed
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02516.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02516.html", "unified_diff": "@@ -229,16 +229,16 @@\n

    \n Friends

    \n \n GTSAM_EXPORT friend void toc (size_t id, const char *label)\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/timing.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/timing.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/timing.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/timing.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • TimingOutline
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02520.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02520.html", "unified_diff": "@@ -112,15 +112,15 @@\n  AutoTicToc (size_t id, const char *label)\n  \n \n void stop ()\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/timing.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/timing.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • AutoTicToc
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02536.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02536.html", "unified_diff": "@@ -100,15 +100,15 @@\n
    gtsam::const_selector< TEST_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST > Struct Template Reference
    \n
\n
\n

Detailed Description

\n
template<typename TEST_TYPE, typename BASIC_TYPE, typename AS_NON_CONST, typename AS_CONST>
\n struct gtsam::const_selector< TEST_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >

Helper class that uses templates to select between two types based on whether TEST_TYPE is const or not.

\n

The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
  • \n
\n
\n \n \n
\n
    \n
  • gtsam
  • const_selector
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02540.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02540.html", "unified_diff": "@@ -110,15 +110,15 @@\n

    \n Public Types

    \n \n typedef AS_NON_CONST type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • const_selector< BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02544.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02544.html", "unified_diff": "@@ -110,15 +110,15 @@\n

    \n Public Types

    \n \n typedef AS_CONST type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • const_selector< const BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02548.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02548.html", "unified_diff": "@@ -134,15 +134,15 @@\n

    \n Public Attributes

    \n \n T value\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ValueWithDefault
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02552.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02552.html", "unified_diff": "@@ -138,15 +138,15 @@\n typedef const T * const_iterator\n  \n \n typedef T * iterator\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ListOfOneContainer
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02556.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02556.html", "unified_diff": "@@ -102,15 +102,15 @@\n
    gtsam::TbbOpenMPMixedScope Class Reference
    \n
\n
\n

Detailed Description

\n

An object whose scope defines a block where TBB and OpenMP parallelism are mixed.

\n

In such a block, we use default threads for TBB, and p/2 threads for OpenMP. If GTSAM is not compiled to use both TBB and OpenMP, this has no effect.

\n

The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
  • \n
\n
\n \n \n
\n
    \n
  • gtsam
  • TbbOpenMPMixedScope
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02560.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02560.html", "unified_diff": "@@ -104,25 +104,25 @@\n
    template<typename, typename = void_t<>>
    \n struct gtsam::needs_eigen_aligned_allocator< typename, typename >

    A SFINAE trait to mark classes that need special alignment.

    \n

    This is required to make boost::make_shared and etc respect alignment, which is essential for the Python wrappers to work properly.

    \n

    \n Explanation

    \n

    When a GTSAM type is not declared with the type alias _eigen_aligned_allocator_trait = void, the first template will be taken so needs_eigen_aligned_allocator will be resolved to std::false_type.

    \n

    Otherwise, it will resolve to the second template, which will be resolved to std::true_type.

    \n-

    Please refer to gtsam/base/make_shared.h for an example.

    \n+

    Please refer to gtsam/base/make_shared.h for an example.

    \n
    \n \"+\"/ Inheritance diagram for gtsam::needs_eigen_aligned_allocator< typename, typename >:
    \n
    \n
    \n
    \n
    \n \"\"/\n
    \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • needs_eigen_aligned_allocator
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02564.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02564.html", "unified_diff": "@@ -105,15 +105,15 @@\n
    \n
    \n
    \n
    \n \"\"/\n
    \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • needs_eigen_aligned_allocator< T, void_t< typename T::_eigen_aligned_allocator_trait > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02596.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02596.html", "unified_diff": "@@ -501,16 +501,16 @@\n http://www.boost.org/doc/libs/release/libs/serialization/doc/traits.html#export\n The last two links explain why these export lines have to be in the same source module that includes\n any of the archive class headers.\n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Value.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/GenericValue.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Value.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/GenericValue.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Value
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02600.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02600.html", "unified_diff": "@@ -112,15 +112,15 @@\n \n \"gtsam::lie_group_tag\"\n \"gtsam::manifold_tag\"\n \"gtsam::group_tag\"\n \n
\n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • vector_space_tag
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02604.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02604.html", "unified_diff": "@@ -159,15 +159,15 @@\n static Class Between (const Class &v1, const Class &v2, ChartJacobian H1=boost::none, ChartJacobian H2=boost::none)\n  \n \n static Class Inverse (const Class &v, ChartJacobian H=boost::none)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • VectorSpaceImpl
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02608.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02608.html", "unified_diff": "@@ -152,15 +152,15 @@\n static Class Between (const Class &v1, const Class &v2, ChartJacobian H1, ChartJacobian H2=boost::none)\n  \n \n static Class Inverse (const Class &v, ChartJacobian H)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • VectorSpaceImpl< Class, Eigen::Dynamic >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02612.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02612.html", "unified_diff": "@@ -130,15 +130,15 @@\n

    \n Public Types

    \n enum  { dim = Class::dimension\n }\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • HasVectorSpacePrereqs
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02616.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02616.html", "unified_diff": "@@ -189,15 +189,15 @@\n static TangentVector Local (const Class &origin, const Class &other, ChartJacobian H1=boost::none, ChartJacobian H2=boost::none)\n  \n \n static Class Retract (const Class &origin, const TangentVector &v, ChartJacobian H1=boost::none, ChartJacobian H2=boost::none)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • VectorSpaceTraits
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02620.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02620.html", "unified_diff": "@@ -186,15 +186,15 @@\n typedef OptionalJacobian< N, N > ChartJacobian\n  \n \n typedef Eigen::Matrix< double, N, N > Jacobian\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • VectorSpace
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02624.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02624.html", "unified_diff": "@@ -202,15 +202,15 @@\n typedef OptionalJacobian< N, N > ChartJacobian\n  \n \n typedef Eigen::Matrix< double, N, N > Jacobian\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • ScalarTraits
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02628.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02628.html", "unified_diff": "@@ -192,15 +192,15 @@\n typedef OptionalJacobian< N, N > ChartJacobian\n  \n \n typedef Eigen::Matrix< double, N, N > Jacobian\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< double >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02632.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02632.html", "unified_diff": "@@ -192,15 +192,15 @@\n typedef OptionalJacobian< N, N > ChartJacobian\n  \n \n typedef Eigen::Matrix< double, N, N > Jacobian\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< float >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02636.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02636.html", "unified_diff": "@@ -204,15 +204,15 @@\n typedef OptionalJacobian< N, N > ChartJacobian\n  \n \n typedef Eigen::Matrix< double, N, N > Jacobian\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02640.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02640.html", "unified_diff": "@@ -173,15 +173,15 @@\n typedef vector_space_tag structure_category\n  \n \n typedef Eigen::Matrix< double, M, N, Options, MaxRows, MaxCols > Dynamic\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • DynamicTraits
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02644.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02644.html", "unified_diff": "@@ -175,15 +175,15 @@\n typedef Dynamic ManifoldType\n  \n \n typedef additive_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • traits< Eigen::Matrix< double, 1, -1, Options, MaxRows, MaxCols > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02656.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02656.html", "unified_diff": "@@ -157,15 +157,15 @@\n typedef traits< T >::structure_category structure_category_tag\n  \n \n typedef traits< T >::group_flavor flavor_tag\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VectorSpace.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • IsVectorSpace
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02660.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02660.html", "unified_diff": "@@ -393,16 +393,16 @@\n \n

    Get the apparent last row (exclusive, i.e.

    \n

    rows() == rowEnd() - rowStart()) of the underlying matrix for all operations

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • VerticalBlockMatrix
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02664.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02664.html", "unified_diff": "@@ -111,15 +111,15 @@\n  Construct from random number generation engine We only store a pointer to it.
    \n  \n \n std::vector< size_t > sampleWithoutReplacement (size_t numSamples, const std::vector< double > &weights)\n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • WeightedSampler
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02668.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02668.html", "unified_diff": "@@ -245,15 +245,15 @@\n \n \n
    Returns
    Returns M*N matrix where M is the size of the vector X.
    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Basis
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02672.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02672.html", "unified_diff": "@@ -152,15 +152,15 @@\n

    \n Protected Attributes

    \n \n Weights weights_\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Basis
  • EvaluationFunctor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02676.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02676.html", "unified_diff": "@@ -225,15 +225,15 @@\n \n

    Calculate the M*(M*N) Jacobian of this functor with respect to the M*N parameter matrix P.

    \n

    We flatten assuming column-major order, e.g., if N=3 and M=2, we have H =[ w(0) 0 w(1) 0 w(2) 0 0 w(0) 0 w(1) 0 w(2) ] i.e., the Kronecker product of weights_ with the MxM identity matrix.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Basis
  • VectorEvaluationFunctor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02680.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02680.html", "unified_diff": "@@ -192,15 +192,15 @@\n  \n \"-\"/ Protected Attributes inherited from gtsam::Basis< DERIVED >::EvaluationFunctor\n \n Weights weights_\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Basis
  • VectorComponentFunctor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02684.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02684.html", "unified_diff": "@@ -209,15 +209,15 @@\n  \n \"-\"/ Protected Attributes inherited from gtsam::Basis< DERIVED >::EvaluationFunctor\n \n Weights weights_\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Basis
  • ManifoldEvaluationFunctor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02688.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02688.html", "unified_diff": "@@ -140,15 +140,15 @@\n

    \n Protected Attributes

    \n \n Weights weights_\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Basis
  • DerivativeFunctorBase
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02692.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02692.html", "unified_diff": "@@ -157,15 +157,15 @@\n  \n \"-\"/ Protected Attributes inherited from gtsam::Basis< DERIVED >::DerivativeFunctorBase\n \n Weights weights_\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Basis
  • DerivativeFunctor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02696.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02696.html", "unified_diff": "@@ -214,15 +214,15 @@\n \n

    Calculate the M*(M*N) Jacobian of this functor with respect to the M*N parameter matrix P.

    \n

    We flatten assuming column-major order, e.g., if N=3 and M=2, we have H =[ w(0) 0 w(1) 0 w(2) 0 0 w(0) 0 w(1) 0 w(2) ] i.e., the Kronecker product of weights_ with the MxM identity matrix.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Basis
  • VectorDerivativeFunctor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02700.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02700.html", "unified_diff": "@@ -182,15 +182,15 @@\n  \n \"-\"/ Protected Attributes inherited from gtsam::Basis< DERIVED >::DerivativeFunctorBase\n \n Weights weights_\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Basis.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Basis
  • ComponentDerivativeFunctor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02704.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02704.html", "unified_diff": "@@ -600,15 +600,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • EvaluationFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02708.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02708.html", "unified_diff": "@@ -601,15 +601,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • VectorEvaluationFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02712.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02712.html", "unified_diff": "@@ -617,15 +617,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • VectorComponentFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02716.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02716.html", "unified_diff": "@@ -605,15 +605,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ManifoldEvaluationFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02720.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02720.html", "unified_diff": "@@ -599,15 +599,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • DerivativeFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02724.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02724.html", "unified_diff": "@@ -600,15 +600,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • VectorDerivativeFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02728.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02728.html", "unified_diff": "@@ -614,15 +614,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ComponentDerivativeFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02732.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02732.html", "unified_diff": "@@ -269,15 +269,15 @@\n \n
    Returns
    Weights
    \n \n
\n \n
The documentation for this struct was generated from the following files:
    \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Chebyshev1Basis
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02736.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02736.html", "unified_diff": "@@ -259,15 +259,15 @@\n \n
    Returns
    Weights
    \n \n
\n \n
The documentation for this struct was generated from the following files:
    \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Chebyshev2Basis
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02740.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02740.html", "unified_diff": "@@ -365,15 +365,15 @@\n

    Evaluate Clenshaw-Curtis integration weights.

    \n

    Trefethen00book, pg 128, clencurt.m Note that N in clencurt.m is 1 less than our N K = N-1; theta = pi*(0:K)'/K; w = zeros(1,N); ii = 2:K; v = ones(K-1, 1); if mod(K,2) == 0 w(1) = 1/(K^2-1); w(N) = w(1); for k=1:K/2-1, v = v-2*cos(2*k*theta(ii))/(4*k^2-1); end v = v - cos(K*theta(ii))/(K^2-1); else w(1) = 1/K^2; w(N) = w(1); for k=1:K/2, v = v-2*cos(2*k*theta(ii))/(4*k^2-1); end end w(ii) = 2*v/K;

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev2.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev2.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Chebyshev2.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Chebyshev2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02744.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02744.html", "unified_diff": "@@ -189,15 +189,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/FitBasis.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/FitBasis.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • FitBasis
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02748.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02748.html", "unified_diff": "@@ -393,15 +393,15 @@\n \n

    Compute D = differentiation matrix.

    \n

    Given coefficients c of a Fourier series c, D*c are the values of c'.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Fourier.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/Fourier.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • FourierBasis
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02752.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02752.html", "unified_diff": "@@ -709,15 +709,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • ParameterMatrix
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02756.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02756.html", "unified_diff": "@@ -184,15 +184,15 @@\n typedef OptionalJacobian< N, N > ChartJacobian\n  \n \n typedef Eigen::Matrix< double, N, N > Jacobian\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< ParameterMatrix< M > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02760.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02760.html", "unified_diff": "@@ -621,15 +621,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • AlgebraicDecisionTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02764.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02764.html", "unified_diff": "@@ -128,15 +128,15 @@\n static double div (const double &a, const double &b)\n  \n \n static double id (const double &x)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • traits< AlgebraicDecisionTree< T > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02772.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02772.html", "unified_diff": "@@ -174,15 +174,15 @@\n \n
    Returns
    vector list of all possible value assignments
    \n

    This function returns a vector of Assignment values for all possible (Cartesian product) configurations of set of Keys which are nothing but (Label,cardinality) pairs. This function should NOT be called for more than a small number of variables and cardinalities. E.g. For 6 variables with each having cardinalities 4, we get 4096 possible configurations!!

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Assignment.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Assignment.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Assignment
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02776.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02776.html", "unified_diff": "@@ -742,15 +742,15 @@\n \n

    The number of assignments contained within this leaf.

    \n

    Particularly useful when leaves have been pruned.

    \n \n
\n \n
The documentation for this struct was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • DecisionTree
  • Leaf
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02780.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02780.html", "unified_diff": "@@ -814,15 +814,15 @@\n

    polymorphic equality: if q is a leaf, could be...

    \n \n

    Implements gtsam::DecisionTree< L, Y >::Node.

    \n \n
\n \n
The documentation for this struct was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • DecisionTree
  • Choice
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02784.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02784.html", "unified_diff": "@@ -131,15 +131,15 @@\n

    \n Public Types

    \n \n using F = std::function< void(const Y &)>\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • Visit
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02788.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02788.html", "unified_diff": "@@ -131,15 +131,15 @@\n

    \n Public Types

    \n \n using F = std::function< void(const typename DecisionTree< L, Y >::Leaf &)>\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • VisitLeaf
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02792.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02792.html", "unified_diff": "@@ -135,15 +135,15 @@\n

    \n Public Types

    \n \n using F = std::function< void(const Assignment< L > &, const Y &)>\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • VisitWith
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02796.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02796.html", "unified_diff": "@@ -828,16 +828,16 @@\n \n
    Note
    Due to pruning, the number of leaves may not be the same as the number of assignments. E.g. if we have a tree on 2 binary variables with all values being 1, then there are 2^2=4 assignments, but only 1 leaf.
    \n

    Example: int sum = 0; auto visitor = [&](const Assignment<L>& assignment, int y) { sum += y; }; tree.visitWith(visitor);

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • DecisionTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02800.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02800.html", "unified_diff": "@@ -506,15 +506,15 @@\n
\n \n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTree.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTree.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • DecisionTree
  • Node
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02804.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02804.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const DecisionTree< L, Y > &m, const std::string &str="")\n  \n \n static bool Equals (const DecisionTree< L, Y > &m1, const DecisionTree< L, Y > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTree.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTree.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< DecisionTree< L, Y > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02808.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02808.html", "has_internal_linenos": true, "unified_diff": "@@ -7983,23 +7983,23 @@\n 0001f2e0: 2066 726f 6d20 7468 6520 666f 6c6c 6f77 from the follow\n 0001f2f0: 696e 6720 6669 6c65 733a 3c75 6c3e 0a3c ing files:
      .<\n 0001f300: 6c69 3e2f 6275 696c 642f 7265 7072 6f64 li>/build/reprod\n 0001f310: 7563 6962 6c65 2d70 6174 682f 6774 7361 ucible-path/gtsa\n 0001f320: 6d2d 342e 322e 302b 6466 7367 2f67 7473 m-4.2.0+dfsg/gts\n 0001f330: 616d 2f64 6973 6372 6574 652f 3c61 2063 am/discrete/DecisionTree\n 0001f370: 4661 6374 6f72 2e68 3c2f 613e 3c2f 6c69 Factor.h.
    • /build/rep\n 0001f390: 726f 6475 6369 626c 652d 7061 7468 2f67 roducible-path/g\n 0001f3a0: 7473 616d 2d34 2e32 2e30 2b64 6673 672f tsam-4.2.0+dfsg/\n 0001f3b0: 6774 7361 6d2f 6469 7363 7265 7465 2f3c gtsam/discrete/<\n 0001f3c0: 6120 636c 6173 733d 2265 6c22 2068 7265 a class=\"el\" hre\n-0001f3d0: 663d 2261 3030 3237 322e 6874 6d6c 223e f=\"a00272.html\">\n+0001f3d0: 663d 2261 3030 3138 322e 6874 6d6c 223e f=\"a00182.html\">\n 0001f3e0: 4465 6369 7369 6f6e 5472 6565 4661 6374 DecisionTreeFact\n 0001f3f0: 6f72 2e63 7070 3c2f 613e 3c2f 6c69 3e0a or.cpp
    • .\n 0001f400: 3c2f 756c 3e0a 3c2f 6469 763e 3c21 2d2d
    .
..\n \n \n
\n
    \n
  • gtsam
  • traits< DecisionTreeFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02816.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02816.html", "unified_diff": "@@ -514,16 +514,16 @@\n

    do ancestral sampling, given certain variables.

    \n

    Assumes the Bayes net is reverse topologically sorted and that the Bayes net does not contain any conditionals for the given values.

    \n
    Returns
    given values extended with sampled value for all other variables.
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • DiscreteBayesNet
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02820.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02820.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const DiscreteBayesNet &m, const std::string &str="")\n  \n \n static bool Equals (const DiscreteBayesNet &m1, const DiscreteBayesNet &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< DiscreteBayesNet >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02824.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02824.html", "unified_diff": "@@ -282,16 +282,16 @@\n  This stores the Cached separator marginal P(S)
    \n  \n std::mutex cachedSeparatorMarginalMutex_\n  This protects Cached seperator marginal P(S) from concurrent read/writes as many the functions which access it are const (hence the mutable) leading to the false impression that these const functions are thread-safe which is not true due to these mutable values.
    \n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • DiscreteBayesTreeClique
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02828.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02828.html", "unified_diff": "@@ -352,16 +352,16 @@\n  \n \n Roots roots_\n  Root cliques.
    \n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • DiscreteBayesTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02832.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02832.html", "has_internal_linenos": true, "unified_diff": "@@ -10609,23 +10609,23 @@\n 00029700: 6564 2066 726f 6d20 7468 6520 666f 6c6c ed from the foll\n 00029710: 6f77 696e 6720 6669 6c65 733a 3c75 6c3e owing files:
      \n 00029720: 0a3c 6c69 3e2f 6275 696c 642f 7265 7072 .
    • /build/repr\n 00029730: 6f64 7563 6962 6c65 2d70 6174 682f 6774 oducible-path/gt\n 00029740: 7361 6d2d 342e 322e 302b 6466 7367 2f67 sam-4.2.0+dfsg/g\n 00029750: 7473 616d 2f64 6973 6372 6574 652f 3c61 tsam/discrete/DiscreteCo\n 00029790: 6e64 6974 696f 6e61 6c2e 683c 2f61 3e3c nditional.h<\n 000297a0: 2f6c 693e 0a3c 6c69 3e2f 6275 696c 642f /li>.
    • /build/\n 000297b0: 7265 7072 6f64 7563 6962 6c65 2d70 6174 reproducible-pat\n 000297c0: 682f 6774 7361 6d2d 342e 322e 302b 6466 h/gtsam-4.2.0+df\n 000297d0: 7367 2f67 7473 616d 2f64 6973 6372 6574 sg/gtsam/discret\n 000297e0: 652f 3c61 2063 6c61 7373 3d22 656c 2220 e/DiscreteCondi\n 00029810: 7469 6f6e 616c 2e63 7070 3c2f 613e 3c2f tional.cpp.
    .
\n 00029830: 3c21 2d2d 2063 6f6e 7465 6e74 7320 2d2d .Print (const DiscreteConditional &m, const std::string &str="")\n  \n \n static bool Equals (const DiscreteConditional &m1, const DiscreteConditional &m2, double tol=1e-8)\n  \n \n
The documentation for this struct was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • traits< DiscreteConditional >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02840.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02840.html", "has_internal_linenos": true, "unified_diff": "@@ -10052,23 +10052,23 @@\n 00027430: 2066 726f 6d20 7468 6520 666f 6c6c 6f77 from the follow\n 00027440: 696e 6720 6669 6c65 733a 3c75 6c3e 0a3c ing files:.
\n 00027560: 3c21 2d2d 2063 6f6e 7465 6e74 7320 2d2d .Print (const DiscreteDistribution &m, const std::string &str="")\n  \n \n static bool Equals (const DiscreteDistribution &m1, const DiscreteDistribution &m2, double tol=1e-8)\n  \n \n
The documentation for this struct was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • traits< DiscreteDistribution >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02848.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02848.html", "unified_diff": "@@ -326,16 +326,16 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • DiscreteEliminationTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02852.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02852.html", "unified_diff": "@@ -612,16 +612,16 @@\n
\n \n

Implemented in gtsam::DecisionTreeFactor.

\n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • DiscreteFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02856.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02856.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const DiscreteFactor &m, const std::string &str="")\n  \n \n static bool Equals (const DiscreteFactor &m1, const DiscreteFactor &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< DiscreteFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02860.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02860.html", "unified_diff": "@@ -144,15 +144,15 @@\n  \n \n typedef DiscreteJunctionTree JunctionTreeType\n  Type of Junction tree.
    \n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • DiscreteFactorGraph
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02868.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02868.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const DiscreteFactorGraph &m, const std::string &str="")\n  \n \n static bool Equals (const DiscreteFactorGraph &m1, const DiscreteFactorGraph &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< DiscreteFactorGraph >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02872.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02872.html", "unified_diff": "@@ -328,15 +328,15 @@\n \n \n
    Returns
    The elimination tree
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02876.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02876.html", "unified_diff": "@@ -166,15 +166,15 @@\n Friends\n \n class boost::serialization::access\n  Serialization function.
    \n  \n \n
    The documentation for this struct was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteKey.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteKey.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteKey.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02880.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02880.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const DiscreteKeys &m, const std::string &str="")\n  \n \n static bool Equals (const DiscreteKeys &m1, const DiscreteKeys &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteKey.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteKey.h
    • \n
    \n
\n \n \n
\n
.\n 00026730: 3c21 2d2d 2064 6f63 2d63 6f6e 7465 6e74 ..\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02888.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02888.html", "unified_diff": "@@ -452,16 +452,16 @@\n

argmax by back-substitution, optionally given certain variables.

\n

Assumes the DAG is reverse topologically sorted, i.e. last conditional will be optimized first and that the DAG does not contain any conditionals for the given variables. If the DAG resulted from eliminating a factor graph, this is true for the elimination ordering.

\n
Returns
given assignment extended w. optimal assignment for all variables.
\n \n \n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • DiscreteLookupDAG
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02892.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02892.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const DiscreteLookupDAG &m, const std::string &str="")\n  \n \n static bool Equals (const DiscreteLookupDAG &m1, const DiscreteLookupDAG &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< DiscreteLookupDAG >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02896.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02896.html", "unified_diff": "@@ -194,15 +194,15 @@\n \n \n
    Returns
    Vector of marginal probabilities
    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • DiscreteMarginals
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02900.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02900.html", "unified_diff": "@@ -312,16 +312,16 @@\n \n

    For all key/value pairs in values, replace values with corresponding keys in this object with those in values.

    \n

    Throws std::out_of_range if any keys in values are not present in this object.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • DiscreteValues
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02904.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02904.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const DiscreteValues &m, const std::string &str="")\n  \n \n static bool Equals (const DiscreteValues &m1, const DiscreteValues &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< DiscreteValues >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02912.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02912.html", "unified_diff": "@@ -274,16 +274,16 @@\n \n

    Construct from a single DiscreteKey.

    \n

    The resulting signature has no parents or CPT table. Typical use then either adds parents with | and , operators below, or assigns a table with operator=().

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Signature.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Signature.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Signature.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Signature.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Signature
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02916.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02916.html", "unified_diff": "@@ -97,15 +97,15 @@\n
\n \n
\n
gtsam::Bearing< A1, A2 > Struct Template Reference
\n
\n
\n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
  • \n
\n
\n \n \n
\n
    \n
  • gtsam
  • Bearing
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02920.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02920.html", "unified_diff": "@@ -97,15 +97,15 @@\n
\n \n
\n
gtsam::Range< A1, A2 > Struct Template Reference
\n
\n
\n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
  • \n
\n
\n \n \n
\n
    \n
  • gtsam
  • Range
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02924.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02924.html", "unified_diff": "@@ -179,15 +179,15 @@\n }\n  \n enum  { dimension = dimB + dimR\n }\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • BearingRange
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02928.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02928.html", "unified_diff": "@@ -154,15 +154,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< BearingRange< A1, A2 > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02932.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02932.html", "unified_diff": "@@ -114,15 +114,15 @@\n

    \n Public Types

    \n \n typedef RT result_type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • HasBearing
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02936.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02936.html", "unified_diff": "@@ -114,15 +114,15 @@\n

    \n Public Types

    \n \n typedef RT result_type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h
    • \n
    \n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Cal3
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02944.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02944.html", "unified_diff": "@@ -493,16 +493,16 @@\n \n \n
    Returns
    point in image coordinates
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Cal3_S2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02948.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02948.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Cal3_S2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02952.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02952.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Cal3_S2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02956.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02956.html", "unified_diff": "@@ -573,15 +573,15 @@\n \n
    Returns
    point in image coordinates
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • Cal3_S2Stereo
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02968.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02968.html", "unified_diff": "@@ -616,16 +616,16 @@\n \n \n
    Returns
    point in image coordinates
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Bundler.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Bundler.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Bundler.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Bundler.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Cal3Bundler
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02972.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02972.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Bundler.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Bundler.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Cal3Bundler >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02976.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02976.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Bundler.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Bundler.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Cal3Bundler >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02980.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02980.html", "unified_diff": "@@ -458,16 +458,16 @@\n

    print with optional string

    \n \n

    Reimplemented from gtsam::Cal3.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Cal3DS2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02984.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02984.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Cal3DS2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02988.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02988.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Cal3DS2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02992.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02992.html", "unified_diff": "@@ -470,16 +470,16 @@\n \n \n
    Returns
    point in (distorted) image coordinates
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2_Base.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2_Base.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2_Base.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2_Base.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Cal3DS2_Base
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a02996.html", "source2": "./usr/share/doc/libgtsam-dev/html/a02996.html", "unified_diff": "@@ -490,16 +490,16 @@\n \n \n
    Returns
    point in (distorted) image coordinates
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Cal3Fisheye
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03000.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03000.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Cal3Fisheye >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03004.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03004.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Cal3Fisheye >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03008.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03008.html", "unified_diff": "@@ -494,16 +494,16 @@\n \n \n
    Returns
    point in image coordinates
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Cal3Unified
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03012.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03012.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Cal3Unified >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03016.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03016.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Unified.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Cal3Unified >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03020.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03020.html", "unified_diff": "@@ -158,15 +158,15 @@\n  \n \n boost::optional< String > description_\n  Optional description.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • CheiralityException
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03024.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03024.html", "unified_diff": "@@ -660,16 +660,16 @@\n \n

    Return the start and end indices (inclusive) of the translation component of the exponential map parameterization.

    \n
    Returns
    a pair of [start, end] indices into the tangent space vector
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • PinholeBase
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03028.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03028.html", "unified_diff": "@@ -653,16 +653,16 @@\n \n \n
    Returns
    range (double)
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • CalibratedCamera
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03032.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03032.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< CalibratedCamera >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03036.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03036.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • Range< CalibratedCamera, T >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03044.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03044.html", "unified_diff": "@@ -383,15 +383,15 @@\n \n

    Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * E' * F g = F' * (b - E * P * E' * b) In this version, we allow for the case where the keys in the Jacobian are organized differently from the keys in the output SymmetricBlockMatrix In particular: each diagonal block of the Jacobian F captures 2 poses (useful for rolling shutter and extrinsic calibration) such that F keeps the block structure that makes the Schur complement trick fast.

    \n

    N = 2 or 3 (point dimension), ND is the Jacobian block dimension, NDD is the Hessian block dimension

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CameraSet.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CameraSet.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • CameraSet
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03048.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03048.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const CameraSet< CAMERA > &m, const std::string &str="")\n  \n \n static bool Equals (const CameraSet< CAMERA > &m1, const CameraSet< CAMERA > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CameraSet.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CameraSet.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< CameraSet< CAMERA > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03052.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03052.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const CameraSet< CAMERA > &m, const std::string &str="")\n  \n \n static bool Equals (const CameraSet< CAMERA > &m1, const CameraSet< CAMERA > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CameraSet.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CameraSet.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const CameraSet< CAMERA > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03060.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03060.html", "unified_diff": "@@ -146,15 +146,15 @@\n

    \n Static Public Member Functions

    \n \n static Cyclic Identity ()\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cyclic.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cyclic.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Cyclic
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03064.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03064.html", "unified_diff": "@@ -128,15 +128,15 @@\n static void Print (const Cyclic< N > &m, const std::string &str="")\n  \n \n static bool Equals (const Cyclic< N > &m1, const Cyclic< N > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cyclic.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cyclic.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Cyclic< N > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03068.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03068.html", "unified_diff": "@@ -356,15 +356,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/EssentialMatrix.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/EssentialMatrix.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/EssentialMatrix.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03072.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03072.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< EssentialMatrix >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03076.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03076.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< const EssentialMatrix >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03080.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03080.html", "unified_diff": "@@ -428,15 +428,15 @@\n \n \n
    Returns
    Transformed line in camera frame
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Line3.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Line3.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Line3.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03084.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03084.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Line3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Line3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Line3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03088.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03088.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Line3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Line3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Line3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03092.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03092.html", "unified_diff": "@@ -266,15 +266,15 @@\n \n \n
    Returns
    the transformed plane
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/OrientedPlane3.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/OrientedPlane3.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/OrientedPlane3.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03096.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03096.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< OrientedPlane3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03100.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03100.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< const OrientedPlane3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03104.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03104.html", "unified_diff": "@@ -903,15 +903,15 @@\n \n \n
    Returns
    range (double)
    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeCamera.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeCamera.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • PinholeCamera
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03108.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03108.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeCamera.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeCamera.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< PinholeCamera< Calibration > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03112.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03112.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeCamera.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeCamera.h
    • \n
    \n
\n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • Range< PinholeCamera< Calibration >, T >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03120.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03120.html", "unified_diff": "@@ -592,15 +592,15 @@\n \n \n
    Returns
    range (double)
    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • PinholeBaseK
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03124.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03124.html", "unified_diff": "@@ -662,15 +662,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • PinholePose
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03128.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03128.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< PinholePose< CALIBRATION > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03132.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03132.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h
    • \n
    \n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeSet.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeSet.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • PinholeSet
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03140.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03140.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const PinholeSet< CAMERA > &m, const std::string &str="")\n  \n \n static bool Equals (const PinholeSet< CAMERA > &m1, const PinholeSet< CAMERA > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeSet.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeSet.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< PinholeSet< CAMERA > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03144.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03144.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const PinholeSet< CAMERA > &m, const std::string &str="")\n  \n \n static bool Equals (const PinholeSet< CAMERA > &m1, const PinholeSet< CAMERA > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeSet.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholeSet.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const PinholeSet< CAMERA > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03148.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03148.html", "unified_diff": "@@ -114,15 +114,15 @@\n

    \n Public Types

    \n \n typedef double result_type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Range< Point2, Point2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03152.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03152.html", "unified_diff": "@@ -114,15 +114,15 @@\n

    \n Public Types

    \n \n typedef double result_type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Range< Point3, Point3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03156.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03156.html", "unified_diff": "@@ -805,16 +805,16 @@\n \n \n
    Returns
    xihat, 3*3 element of Lie algebra that can be exponentiated
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Pose2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03160.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03160.html", "unified_diff": "@@ -110,16 +110,16 @@\n static GTSAM_EXPORT Pose2 Retract (const Vector3 &v, ChartJacobian H=boost::none)\n  \n \n static GTSAM_EXPORT Vector3 Local (const Pose2 &r, ChartJacobian H=boost::none)\n  \n \n
    The documentation for this struct was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Pose2
  • ChartAtOrigin
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03164.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03164.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Pose2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03168.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03168.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Pose2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03172.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03172.html", "unified_diff": "@@ -122,15 +122,15 @@\n  \n \"-\"/ Public Types inherited from gtsam::HasBearing< Pose2, T, Rot2 >\n \n typedef Rot2 result_type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Bearing< Pose2, T >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03176.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03176.html", "unified_diff": "@@ -122,15 +122,15 @@\n  \n \"-\"/ Public Types inherited from gtsam::HasRange< Pose2, T, double >\n \n typedef double result_type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Range< Pose2, T >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03180.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03180.html", "unified_diff": "@@ -705,15 +705,15 @@\n )\n const\n \n \n
\n \n

Interpolate between two poses via individual rotation and translation interpolation.

\n-

The default \"interpolate\" method defined in Lie.h minimizes the geodesic distance on the manifold, leading to a screw motion interpolation in Cartesian space, which might not be what is expected. In contrast, this method executes a straight line interpolation for the translation, while still using interpolate (aka \"slerp\") for the rotational component. This might be more intuitive in many applications.

\n+

The default \"interpolate\" method defined in Lie.h minimizes the geodesic distance on the manifold, leading to a screw motion interpolation in Cartesian space, which might not be what is expected. In contrast, this method executes a straight line interpolation for the translation, while still using interpolate (aka \"slerp\") for the rotational component. This might be more intuitive in many applications.

\n
Parameters
\n \n \n \n
TEnd point of interpolation.
tA value in [0, 1].
\n
\n
\n@@ -1158,16 +1158,16 @@\n \n \n
Returns
xihat, 4*4 element of Lie algebra that can be exponentiated
\n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Pose3
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03184.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03184.html", "unified_diff": "@@ -110,16 +110,16 @@\n static Pose3 Retract (const Vector6 &xi, ChartJacobian Hxi=boost::none)\n  \n \n static Vector6 Local (const Pose3 &pose, ChartJacobian Hpose=boost::none)\n  \n \n
    The documentation for this struct was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Pose3
  • ChartAtOrigin
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03188.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03188.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Pose3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03192.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03192.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Pose3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03196.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03196.html", "unified_diff": "@@ -122,15 +122,15 @@\n  \n \"-\"/ Public Types inherited from gtsam::HasBearing< Pose3, Point3, Unit3 >\n \n typedef Unit3 result_type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Bearing< Pose3, Point3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03200.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03200.html", "unified_diff": "@@ -122,15 +122,15 @@\n  \n \"-\"/ Public Types inherited from gtsam::HasBearing< Pose3, Pose3, Unit3 >\n \n typedef Unit3 result_type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Bearing< Pose3, Pose3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03204.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03204.html", "unified_diff": "@@ -122,15 +122,15 @@\n  \n \"-\"/ Public Types inherited from gtsam::HasRange< Pose3, T, double >\n \n typedef double result_type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Range< Pose3, T >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03208.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03208.html", "unified_diff": "@@ -165,15 +165,15 @@\n typedef OptionalJacobian< 3, 3 > ChartJacobian\n  \n \n typedef Eigen::Matrix< _Scalar, 3, 1, _Options, 3, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Quaternion.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Quaternion.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< QUATERNION_TYPE >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03212.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03212.html", "unified_diff": "@@ -397,16 +397,16 @@\n \n \n
    Returns
    2D rotation \\( \\in SO(2) \\)
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Rot2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03216.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03216.html", "unified_diff": "@@ -110,15 +110,15 @@\n static Rot2 Retract (const Vector1 &v, ChartJacobian H=boost::none)\n  \n \n static Vector1 Local (const Rot2 &r, ChartJacobian H=boost::none)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Rot2
  • ChartAtOrigin
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03220.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03220.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Rot2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03224.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03224.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h
    • \n
    \n
\n \n \n
\n
...
Rot3 Retract (const Vector3 &v, OptionalJacobian< 3, 3 > H=boost::none)\n  \n \n static Vector3 Local (const Rot3 &r, OptionalJacobian< 3, 3 > H=boost::none)\n  \n \n
The documentation for this struct was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3M.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3M.cpp
  • \n
\n
\n \n \n
\n
    \n
  • gtsam
  • Rot3
  • CayleyChart
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03236.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03236.html", "unified_diff": "@@ -110,16 +110,16 @@\n static Rot3 Retract (const Vector3 &v, ChartJacobian H=boost::none)\n  \n \n static Vector3 Local (const Rot3 &r, ChartJacobian H=boost::none)\n  \n \n
    The documentation for this struct was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3M.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3M.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Rot3
  • ChartAtOrigin
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03240.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03240.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Rot3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03244.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03244.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Rot3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03248.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03248.html", "unified_diff": "@@ -381,16 +381,16 @@\n

    Action on a pose T.

    \n

    |Rs ts| |R t| |Rs*R Rs*t+ts| |0 1/s| * |0 1| = | 0 1/s |, the result is still a Sim2 object. To retrieve a Pose2, we normalized the scale value into 1. |Rs*R Rs*t+ts| |Rs*R s(Rs*t+ts)| | 0 1/s | = | 0 1 |

    \n

    This group action satisfies the compatibility condition. For more details, refer to: https://en.wikipedia.org/wiki/Group_action

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Similarity2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03252.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03252.html", "unified_diff": "@@ -112,15 +112,15 @@\n static Similarity2 Retract (const Vector4 &v, ChartJacobian H=boost::none)\n  \n \n static Vector4 Local (const Similarity2 &other, ChartJacobian H=boost::none)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Similarity2
  • ChartAtOrigin
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03256.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03256.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Similarity2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03260.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03260.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Similarity2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03264.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03264.html", "unified_diff": "@@ -420,16 +420,16 @@\n \n \n
    Returns
    4*4 element of Lie algebra that can be exponentiated TODO(frank): rename to Hat, make part of traits
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Similarity3
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03268.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03268.html", "unified_diff": "@@ -112,15 +112,15 @@\n static Similarity3 Retract (const Vector7 &v, ChartJacobian H=boost::none)\n  \n \n static Vector7 Local (const Similarity3 &other, ChartJacobian H=boost::none)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Similarity3
  • ChartAtOrigin
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03272.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03272.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Similarity3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03276.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03276.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Similarity3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Similarity3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03280.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03280.html", "unified_diff": "@@ -164,16 +164,16 @@\n double sin_theta\n  \n \n double one_minus_cos\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • so3
  • ExpmapFunctor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03284.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03284.html", "unified_diff": "@@ -177,16 +177,16 @@\n double sin_theta\n  \n \n double one_minus_cos\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • so3
  • DexpFunctor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03288.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03288.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< SO3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03292.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03292.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const SO3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03296.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03296.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< SO4 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03300.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03300.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const SO4 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03304.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03304.html", "unified_diff": "@@ -205,15 +205,15 @@\n \n static SO ChordalMean (const std::vector< SO > &rotations)\n  Named constructor that finds chordal mean \\( mu = argmin_R \\sum sqr(|R-R_i|_F) \\), currently only defined for SO3.
    \n  \n \n template<int N_ = N, typename = IsDynamic<N_>> \n static SO Random (std::mt19937 &rng, size_t n=0)\n- Random SO(n) element (no big claims about uniformity). SO(3) is specialized in SO3.cpp.
    \n+ Random SO(n) element (no big claims about uniformity). SO(3) is specialized in SO3.cpp.
    \n  \n \n template<int N_ = N, typename = IsFixed<N_>> \n static SO Random (std::mt19937 &rng)\n  Random SO(N) element (no big claims about uniformity)
    \n  \n \n@@ -506,18 +506,18 @@\n \n

    Return vectorized rotation matrix in column order.

    \n

    Will use dynamic matrices as intermediate results, but returns a fixed size X and fixed-size Jacobian if dimension is known at compile time.

    \n \n \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.cpp
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn-inl.h
    • \n
    \n \n \n \n
    \n
      \n
    • gtsam
    • SO
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03308.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03308.html", "unified_diff": "@@ -193,16 +193,16 @@\n \n

      Retract uses Cayley map.

      \n

      See note about xi element order in Hat. Deafault implementation has no Jacobian implemented

      \n \n
    \n \n
    The documentation for this struct was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn-inl.h
    • \n
    \n \n \n \n
    \n
      \n
    • gtsam
    • SO
    • ChartAtOrigin
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03312.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03312.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > 
    \n \n \n \n
    ChartJacobian
     
    \n typedef multiplicative_group_tag group_flavor
     
    \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< SO< N > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03316.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03316.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const SO< N > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03320.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03320.html", "unified_diff": "@@ -136,15 +136,15 @@\n Friends\n \n class boost::serialization::access\n  Serialization function.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • EmptyCal
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03324.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03324.html", "unified_diff": "@@ -478,15 +478,15 @@\n \n \n
    Returns
    the tangent space error between the projection and the measurement
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SphericalCamera.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SphericalCamera.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SphericalCamera.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03328.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03328.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< SphericalCamera >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03332.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03332.html", "unified_diff": "@@ -176,15 +176,15 @@\n typedef OptionalJacobian< dimension, dimension > ChartJacobian\n  \n \n typedef multiplicative_group_tag group_flavor\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< const SphericalCamera >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03336.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03336.html", "unified_diff": "@@ -118,15 +118,15 @@\n  StereoCheiralityException (Key j)\n  \n \n Key nearbyVariable () const\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • StereoCheiralityException
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03340.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03340.html", "unified_diff": "@@ -335,15 +335,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03344.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03344.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< StereoCamera >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03348.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03348.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const StereoCamera >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03352.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03352.html", "unified_diff": "@@ -222,16 +222,16 @@\n Friends\n \n GTSAM_EXPORT friend std::ostream & operator<< (std::ostream &os, const StereoPoint2 &p)\n  Streaming.
    \n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • StereoPoint2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03356.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03356.html", "unified_diff": "@@ -184,15 +184,15 @@\n typedef OptionalJacobian< N, N > ChartJacobian\n  \n \n typedef Eigen::Matrix< double, N, N > Jacobian\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< StereoPoint2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03360.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03360.html", "unified_diff": "@@ -184,15 +184,15 @@\n typedef OptionalJacobian< N, N > ChartJacobian\n  \n \n typedef Eigen::Matrix< double, N, N > Jacobian\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoPoint2.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const StereoPoint2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03380.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03380.html", "unified_diff": "@@ -302,15 +302,15 @@\n \n

    Signed, vector-valued error between two directions.

    \n
    Deprecated:
    , errorVector has the proper derivatives, this confusingly has only the second.
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Unit3.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Unit3.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Unit3.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03384.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03384.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Unit3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Unit3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Unit3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03388.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03388.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Unit3.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Unit3.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< const Unit3 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03392.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03392.html", "unified_diff": "@@ -728,15 +728,15 @@\n \n \n
\n \n

Compute the error of this Gaussian Mixture.

\n

This requires some care, as different mixture components may have different normalization constants. Let's consider p(x|y,m), where m is discrete. We need the error to satisfy the invariant:

\n

error(x;y,m) = K - log(probability(x;y,m))

\n-

For all x,y,m. But note that K, the (log) normalization constant defined in Conditional.h, should not depend on x, y, or m, only on the parameters of the density. Hence, we delegate to the underlying Gaussian conditionals, indexed by m, which do satisfy:

\n+

For all x,y,m. But note that K, the (log) normalization constant defined in Conditional.h, should not depend on x, y, or m, only on the parameters of the density. Hence, we delegate to the underlying Gaussian conditionals, indexed by m, which do satisfy:

\n

log(probability_m(x;y)) = K_m - error_m(x;y)

\n

We resolve by having K == max(K_m) and

\n

error(x;y,m) = error_m(x;y) + K - K_m

\n

which also makes error(x;y,m) >= 0 for all x,y,m.

\n
Parameters
\n \n \n@@ -962,16 +962,16 @@\n
valuesContinuous values and discrete assignment.
\n
\n
\n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • GaussianMixture
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03396.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03396.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const GaussianMixture &m, const std::string &str="")\n  \n \n static bool Equals (const GaussianMixture &m1, const GaussianMixture &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< GaussianMixture >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03400.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03400.html", "unified_diff": "@@ -604,16 +604,16 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • HybridBayesNet
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03412.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03412.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const HybridBayesNet &m, const std::string &str="")\n  \n \n static bool Equals (const HybridBayesNet &m1, const HybridBayesNet &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< HybridBayesNet >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03420.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03420.html", "unified_diff": "@@ -276,15 +276,15 @@\n  This stores the Cached separator marginal P(S)
    \n  \n std::mutex cachedSeparatorMarginalMutex_\n  This protects Cached seperator marginal P(S) from concurrent read/writes as many the functions which access it are const (hence the mutable) leading to the false impression that these const functions are thread-safe which is not true due to these mutable values.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • HybridBayesTreeClique
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03424.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03424.html", "unified_diff": "@@ -471,16 +471,16 @@\n \n \n
    Returns
    HybridPrunerData which is passed to the children.
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • HybridBayesTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03428.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03428.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const HybridBayesTree &m, const std::string &str="")\n  \n \n static bool Equals (const HybridBayesTree &m1, const HybridBayesTree &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< HybridBayesTree >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03432.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03432.html", "unified_diff": "@@ -555,15 +555,15 @@\n

    print utility

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • HybridConditional
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03440.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03440.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const HybridConditional &m, const std::string &str="")\n  \n \n static bool Equals (const HybridConditional &m1, const HybridConditional &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< HybridConditional >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03444.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03444.html", "unified_diff": "@@ -327,16 +327,16 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • HybridFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03452.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03452.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const HybridFactor &m, const std::string &str="")\n  \n \n static bool Equals (const HybridFactor &m1, const HybridFactor &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactor.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridFactor.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< HybridFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03456.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03456.html", "unified_diff": "@@ -413,16 +413,16 @@\n \n

    Implicit copy/downcast constructor to override explicit template container constructor.

    \n

    In BayesTree this is used for: cachedSeparatorMarginal_.reset(*separatorMarginal)

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • HybridFactorGraph
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03460.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03460.html", "unified_diff": "@@ -161,15 +161,15 @@\n \n

    Type of the factor graph (e.g.

    \n

    HybridGaussianFactorGraph)

    \n \n
\n \n
The documentation for this struct was generated from the following file:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • HybridGaussianFactorGraph
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03468.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03468.html", "unified_diff": "@@ -512,15 +512,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianISAM.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianISAM.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianISAM.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03472.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03472.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const HybridGaussianISAM &m, const std::string &str="")\n  \n \n static bool Equals (const HybridGaussianISAM &m1, const HybridGaussianISAM &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< HybridGaussianISAM >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03484.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03484.html", "unified_diff": "@@ -328,16 +328,16 @@\n \n \n
    Returns
    The elimination tree
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • HybridJunctionTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03488.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03488.html", "unified_diff": "@@ -505,16 +505,16 @@\n

    Print the factor graph.

    \n \n

    Reimplemented from gtsam::FactorGraph< Factor >.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • traits< HybridNonlinearFactorGraph >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03496.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03496.html", "unified_diff": "@@ -300,16 +300,16 @@\n \n

    get counters

    \n

    TODO: comment

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • HybridNonlinearISAM
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03500.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03500.html", "unified_diff": "@@ -214,16 +214,16 @@\n \n \n

    Prune

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • HybridSmoother
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03504.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03504.html", "unified_diff": "@@ -163,19 +163,19 @@\n  Insert a vector value with key j.
    \n  \n void insert (Key j, size_t value)\n  Insert a discrete value with key j.
    \n  \n \n void insert_or_assign (Key j, const Vector &value)\n- insert_or_assign() , similar to Values.h
    \n+ insert_or_assign() , similar to Values.h
    \n  \n \n void insert_or_assign (Key j, size_t value)\n- insert_or_assign() , similar to Values.h
    \n+ insert_or_assign() , similar to Values.h
    \n  \n HybridValuesinsert (const VectorValues &values)\n  Insert all continuous values from values.
    \n  \n HybridValuesinsert (const DiscreteValues &values)\n  Insert all discrete values from values.
    \n  \n@@ -537,15 +537,15 @@\n \n

    For all key/value pairs in values, replace continuous values with corresponding keys in this object with those in values.

    \n

    Throws std::out_of_range if any keys in values are not present in this object.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridValues.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridValues.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • HybridValues
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03508.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03508.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const HybridValues &m, const std::string &str="")\n  \n \n static bool Equals (const HybridValues &m1, const HybridValues &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridValues.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridValues.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< HybridValues >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03512.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03512.html", "unified_diff": "@@ -726,15 +726,15 @@\n

    print to stdout

    \n \n

    Reimplemented from gtsam::HybridFactor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesNet.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesNet-inst.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesNet.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesNet-inst.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • BayesNet
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03524.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03524.html", "unified_diff": "@@ -551,17 +551,17 @@\n \n

    concept check, makes sure FACTOR defines print and equals

    \n

    Collection of factors

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph-inst.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph-inst.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • FactorGraph
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03528.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03528.html", "unified_diff": "@@ -292,26 +292,26 @@\n \n \n
\n \n

Eliminate the factors to a Bayes tree and remaining factor graph.

\n
Parameters
\n \n- \n+ \n
functionThe function to use to eliminate, see the namespace functions in GaussianFactorGraph.h
functionThe function to use to eliminate, see the namespace functions in GaussianFactorGraph.h
\n
\n
\n
Returns
The Bayes tree and factor graph resulting from elimination
\n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree-inst.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree-inst.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • EliminatableClusterTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03532.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03532.html", "unified_diff": "@@ -125,16 +125,16 @@\n double avgSeparatorSize\n  \n \n std::size_t maxSeparatorSize\n  \n \n
    The documentation for this struct was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • BayesTreeCliqueStats
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03536.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03536.html", "unified_diff": "@@ -120,16 +120,16 @@\n FastVector< std::size_t > conditionalSizes\n  \n \n FastVector< std::size_t > separatorSizes\n  \n \n
    The documentation for this struct was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • BayesTreeCliqueData
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03540.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03540.html", "unified_diff": "@@ -529,16 +529,16 @@\n \n

    Given a list of indices, turn \"contaminated\" part of the tree back into a factor graph.

    \n

    Factors and orphans are added to the in/out arguments.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree-inst.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree-inst.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • BayesTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03544.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03544.html", "unified_diff": "@@ -173,15 +173,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • BayesTreeOrphanWrapper
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03548.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03548.html", "unified_diff": "@@ -101,15 +101,15 @@\n
\n
\n

Detailed Description

\n
template<class GRAPH>
\n struct gtsam::EliminationTraits< GRAPH >

Traits class for eliminateable factor graphs, specifies the types that result from elimination, etc.

\n

This must be defined for each factor graph that inherits from EliminateableFactorGraph.

\n

The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • EliminationTraits
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03552.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03552.html", "unified_diff": "@@ -427,15 +427,15 @@\n \n

    This protects Cached seperator marginal P(S) from concurrent read/writes as many the functions which access it are const (hence the mutable) leading to the false impression that these const functions are thread-safe which is not true due to these mutable values.

    \n

    This is fixed by applying this mutex.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03556.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03556.html", "unified_diff": "@@ -155,15 +155,15 @@\n \n \n \n \n

    \n Classes

    class  EliminationPostOrderVisitor
     
    \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • EliminationData
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03560.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03560.html", "unified_diff": "@@ -110,15 +110,15 @@\n  EliminationPostOrderVisitor (const typename CLUSTERTREE::Eliminate &eliminationFunction, typename CLUSTERTREE::BayesTreeType::Nodes &nodesIndex)\n  \n \n void operator() (const typename CLUSTERTREE::sharedNode &node, EliminationData &myData)\n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • EliminationData
  • EliminationPostOrderVisitor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03564.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03564.html", "unified_diff": "@@ -223,16 +223,16 @@\n Protected Attributes\n \n FastVector< sharedNode > roots_\n  concept check
    \n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • ClusterTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03568.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03568.html", "unified_diff": "@@ -181,16 +181,16 @@\n typedef FastVector< boost::shared_ptr< Cluster > > Children\n  \n \n typedef Ordering Keys\n  \n \n
    The documentation for this struct was generated from the following files:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • Conditional
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03576.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03576.html", "unified_diff": "@@ -205,16 +205,16 @@\n \n

    The position hints allow one to use symbol character and index to specify position.

    \n

    Unless variable positions are specified, if a hint is present for a given symbol, it will be used to calculate the positions as (index,hint).

    \n \n
\n \n
The documentation for this struct was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/DotWriter.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/DotWriter.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/DotWriter.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/DotWriter.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • DotWriter
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03580.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03580.html", "unified_diff": "@@ -728,16 +728,16 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • EliminateableFactorGraph
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03584.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03584.html", "unified_diff": "@@ -345,25 +345,25 @@\n \n \n
\n \n

Eliminate the factors to a Bayes net and remaining factor graph.

\n
Parameters
\n \n- \n+ \n
functionThe function to use to eliminate, see the namespace functions in GaussianFactorGraph.h
functionThe function to use to eliminate, see the namespace functions in GaussianFactorGraph.h
\n
\n
\n
Returns
The Bayes net and factor graph resulting from elimination
\n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • EliminationTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03588.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03588.html", "unified_diff": "@@ -136,16 +136,16 @@\n typedef FastVector< sharedFactorFactors\n  \n \n typedef FastVector< boost::shared_ptr< Node > > Children\n  \n \n
    The documentation for this struct was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • EliminationTree
  • Node
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03592.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03592.html", "unified_diff": "@@ -539,16 +539,16 @@\n \n
\n
Returns
the number of variables involved in this factor
\n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Factor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03596.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03596.html", "unified_diff": "@@ -114,15 +114,15 @@\n  \n \n template<typename A > \n void operator() (const A &a)\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • CRefCallPushBack
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03600.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03600.html", "unified_diff": "@@ -114,15 +114,15 @@\n  \n \n template<typename A > \n void operator() (A &a)\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • RefCallPushBack
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03604.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03604.html", "unified_diff": "@@ -114,15 +114,15 @@\n  \n \n template<typename A > \n void operator() (const A &a)\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • CRefCallAddCopy
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03608.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03608.html", "unified_diff": "@@ -126,15 +126,15 @@\n

    \n Public Attributes

    \n \n std::list< KEY > & ordering_\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ordering_key_visitor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03612.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03612.html", "unified_diff": "@@ -119,15 +119,15 @@\n  \n \n template<typename Edge , typename Graph > \n void tree_edge (Edge edge, const Graph &g) const\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • compose_key_visitor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03616.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03616.html", "unified_diff": "@@ -118,15 +118,15 @@\n

    \n Public Types

    \n \n typedef boost::graph_traits< SDGraph< KEY > >::vertex_descriptor Vertex\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • SDGraph
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03620.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03620.html", "unified_diff": "@@ -115,15 +115,15 @@\n

    \n Public Types

    \n \n typedef boost::graph_traits< SGraph< KEY > >::vertex_descriptor Vertex\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • SGraph
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03624.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03624.html", "unified_diff": "@@ -119,15 +119,15 @@\n Public Member Functions\n \n void insert (const KEY &key, const KEY &parent)\n  convenience insert so we can pass ints for TypedSymbol keys
    \n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • PredecessorMap
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03636.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03636.html", "unified_diff": "@@ -118,15 +118,15 @@\n

    \n Public Member Functions

    \n \n const char * what () const noexcept override\n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • InconsistentEliminationRequested
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03640.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03640.html", "unified_diff": "@@ -193,16 +193,16 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM-inst.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM-inst.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ISAM
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03652.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03652.html", "unified_diff": "@@ -281,15 +281,15 @@\n \"-\"/ Protected Attributes inherited from gtsam::ClusterTree< GRAPH >\n \n FastVector< sharedNode > roots_\n  concept check
    \n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03656.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03656.html", "unified_diff": "@@ -123,15 +123,15 @@\n

    \n Friends

    \n \n GTSAM_EXPORT friend std::ostream & operator<< (std::ostream &, const StreamedKey &)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • StreamedKey
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03660.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03660.html", "unified_diff": "@@ -120,15 +120,15 @@\n GTSAM_EXPORT friend std::ostream & operator<< (std::ostream &, const key_formatter &)\n  \n \n GTSAM_EXPORT friend std::ostream & operator<< (std::ostream &, const StreamedKey &)\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03664.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03664.html", "unified_diff": "@@ -110,15 +110,15 @@\n static void Print (const Key &val, const std::string &str="")\n  \n \n static bool Equals (const Key &val1, const Key &val2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Key >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03668.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03668.html", "unified_diff": "@@ -215,15 +215,15 @@\n Friends\n \n class boost::serialization::access\n  Serialization function.
    \n  \n \n GTSAM_EXPORT std::ostream & operator<< (std::ostream &, const LabeledSymbol &)\n- Output stream operator that can be used with key_formatter (see Key.h).
    \n+ Output stream operator that can be used with key_formatter (see Key.h).
    \n  \n \n

    Member Function Documentation

    \n \n

    ◆ TypeTest()

    \n \n
    \n@@ -249,15 +249,15 @@\n \n

    Return a filter function that returns true when evaluated on a gtsam::Key whose character (when converted to a LabeledSymbol) matches c.

    \n

    Use this with the Values::filter() function to retrieve all key-value pairs with the requested character.

    \n \n
    \n
\n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/LabeledSymbol.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/LabeledSymbol.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/LabeledSymbol.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03672.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03672.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const LabeledSymbol &m, const std::string &str="")\n  \n \n static bool Equals (const LabeledSymbol &m1, const LabeledSymbol &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/LabeledSymbol.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/LabeledSymbol.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< LabeledSymbol >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03676.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03676.html", "unified_diff": "@@ -165,16 +165,16 @@\n \n

    Augment the variable index with new factors.

    \n

    This can be used when solving problems incrementally.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex-inl.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex-inl.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • MetisIndex
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03680.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03680.html", "unified_diff": "@@ -575,16 +575,16 @@\n \n \n
    Returns
    The ordering variable with appended keys.
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Ordering
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03684.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03684.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const Ordering &m, const std::string &str="")\n  \n \n static bool Equals (const Ordering &m1, const Ordering &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Ordering.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Ordering >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03688.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03688.html", "unified_diff": "@@ -200,15 +200,15 @@\n Friends\n \n class boost::serialization::access\n  Serialization function.
    \n  \n \n GTSAM_EXPORT friend std::ostream & operator<< (std::ostream &, const Symbol &)\n- Output stream operator that can be used with key_formatter (see Key.h).
    \n+ Output stream operator that can be used with key_formatter (see Key.h).
    \n  \n \n

    Member Function Documentation

    \n \n

    ◆ ChrTest()

    \n \n
    \n@@ -235,15 +235,15 @@\n

    Return a filter function that returns true when evaluated on a Key whose character (when converted to a Symbol) matches c.

    \n

    Use this with the Values::filter() function to retrieve all key-value pairs with the requested character.

    \n \n
    \n
\n
The documentation for this class was generated from the following files:
    \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Symbol.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Symbol.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Symbol.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Symbol
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03700.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03700.html", "unified_diff": "@@ -358,16 +358,16 @@\n \n \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • VariableIndex
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03708.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03708.html", "unified_diff": "@@ -206,16 +206,16 @@\n \n

    Constructor from a set of factors to be combined.

    \n

    Sorts the variables and keeps track of which variable from each factor ends up in each slot of the combined factor, as described in the class comment.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • VariableSlots
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03712.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03712.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const VariableSlots &m, const std::string &str="")\n  \n \n static bool Equals (const VariableSlots &m1, const VariableSlots &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableSlots.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableSlots.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< VariableSlots >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03716.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03716.html", "unified_diff": "@@ -235,15 +235,15 @@\n \n

    Start the accelerated iteration, after performing the accelerated iteration, calculate the ritz error, repeat this operation until the ritz error converge.

    \n

    If converged return true, else false.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • AcceleratedPowerMethod
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03720.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03720.html", "unified_diff": "@@ -557,15 +557,15 @@\n \n \n

    Implements gtsam::GaussianFactor.

    \n \n
\n \n
The documentation for this struct was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • BinaryJacobianFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03724.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03724.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const BinaryJacobianFactor< M, N1, N2 > &m, const std::string &str="")\n  \n \n static bool Equals (const BinaryJacobianFactor< M, N1, N2 > &m1, const BinaryJacobianFactor< M, N1, N2 > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n

Reimplemented from gtsam::IterativeOptimizationParameters.

\n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/ConjugateGradientSolver.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/ConjugateGradientSolver.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/ConjugateGradientSolver.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03736.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03736.html", "unified_diff": "@@ -112,15 +112,15 @@\n static void Print (const Errors &e, const std::string &str="")\n  \n \n static bool Equals (const Errors &actual, const Errors &expected, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Errors.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Errors.h
    • \n
    \n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • GaussianBayesNet
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03744.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03744.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const GaussianBayesNet &m, const std::string &str="")\n  \n \n static bool Equals (const GaussianBayesNet &m1, const GaussianBayesNet &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< GaussianBayesNet >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03752.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03752.html", "unified_diff": "@@ -272,15 +272,15 @@\n  This stores the Cached separator marginal P(S)
    \n  \n std::mutex cachedSeparatorMarginalMutex_\n  This protects Cached seperator marginal P(S) from concurrent read/writes as many the functions which access it are const (hence the mutable) leading to the false impression that these const functions are thread-safe which is not true due to these mutable values.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • GaussianBayesTreeClique
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03756.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03756.html", "unified_diff": "@@ -520,16 +520,16 @@\n

    \n \\[ \\delta x = \\hat\\alpha g = \\frac{-g^T g}{(R g)^T(R g)} \\]\n

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • GaussianBayesTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03760.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03760.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const GaussianBayesTree &m, const std::string &str="")\n  \n \n static bool Equals (const GaussianBayesTree &m1, const GaussianBayesTree &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< GaussianBayesTree >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03764.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03764.html", "unified_diff": "@@ -1239,17 +1239,17 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • GaussianConditional
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03768.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03768.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const GaussianConditional &m, const std::string &str="")\n  \n \n static bool Equals (const GaussianConditional &m1, const GaussianConditional &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • GaussianDensity
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03776.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03776.html", "unified_diff": "@@ -324,16 +324,16 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • GaussianFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03784.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03784.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const GaussianFactor &m, const std::string &str="")\n  \n \n static bool Equals (const GaussianFactor &m1, const GaussianFactor &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< GaussianFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03788.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03788.html", "unified_diff": "@@ -144,15 +144,15 @@\n  \n \n typedef GaussianJunctionTree JunctionTreeType\n  Type of Junction tree.
    \n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • EliminationTraits< GaussianFactorGraph >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03792.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03792.html", "unified_diff": "@@ -1172,16 +1172,16 @@\n
      \n
    • ************************************************************************* *‍/* ************************************************************************* *‍/
    • \n
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • GaussianFactorGraph
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03796.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03796.html", "unified_diff": "@@ -130,15 +130,15 @@\n static void Print (const GaussianFactorGraph &m, const std::string &str="")\n  \n \n static bool Equals (const GaussianFactorGraph &m1, const GaussianFactorGraph &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< GaussianFactorGraph >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03808.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03808.html", "unified_diff": "@@ -326,16 +326,16 @@\n \n \n
    Returns
    The elimination tree
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • GaussianJunctionTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03812.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03812.html", "unified_diff": "@@ -1712,17 +1712,17 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • HessianFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03816.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03816.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const HessianFactor &m, const std::string &str="")\n  \n \n static bool Equals (const HessianFactor &m1, const HessianFactor &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< HessianFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03820.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03820.html", "unified_diff": "@@ -155,15 +155,15 @@\n

    \n Public Types

    \n \n typedef ConjugateGradientParameters Parameters\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • CGState
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03824.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03824.html", "unified_diff": "@@ -141,16 +141,16 @@\n  \n \n void transposeMultiplyAdd (double alpha, const Vector &e, Vector &x) const\n  x += alpha* A'*e
    \n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • System
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03828.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03828.html", "unified_diff": "@@ -173,15 +173,15 @@\n

    \n Friends

    \n \n std::ostream & operator<< (std::ostream &os, const IterativeOptimizationParameters &p)\n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03832.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03832.html", "unified_diff": "@@ -184,15 +184,15 @@\n
\n \n

Implemented in gtsam::SubgraphSolver.

\n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03836.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03836.html", "unified_diff": "@@ -122,15 +122,15 @@\n size_t dim\n  \n \n size_t start\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • KeyInfoEntry
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03840.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03840.html", "unified_diff": "@@ -170,15 +170,15 @@\n Ordering ordering_\n  \n \n size_t numCols_\n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03844.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03844.html", "unified_diff": "@@ -1687,17 +1687,17 @@\n \n

    Return a whitened version of the factor, i.e.

    \n

    with unit diagonal noise model.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • JacobianFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03848.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03848.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const JacobianFactor &m, const std::string &str="")\n  \n \n static bool Equals (const JacobianFactor &m1, const JacobianFactor &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< JacobianFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03852.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03852.html", "unified_diff": "@@ -289,16 +289,16 @@\n \n

    Update Kalman filter with a measurement For the Kalman Filter, the measurement function, h(x_{t}) = z_{t} will be of the form h(x_{t}) = H*x_{t} + v where H is the observation model/matrix, and v is zero-mean, Gaussian white noise with covariance R.

    \n

    In this version, R is restricted to diagonal Gaussians (model parameter)

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • linearAlgorithms
  • OptimizeData
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03860.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03860.html", "unified_diff": "@@ -118,15 +118,15 @@\n

    \n Public Attributes

    \n \n VectorValues collectedResult\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • linearAlgorithms
  • OptimizeClique
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03864.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03864.html", "unified_diff": "@@ -180,16 +180,16 @@\n  \n \n boost::optional< String > description_\n  Optional description.
    \n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • IndeterminantLinearSystemException
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03868.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03868.html", "unified_diff": "@@ -172,16 +172,16 @@\n  \n \n boost::optional< String > description_\n  Optional description.
    \n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • InvalidNoiseModel
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03872.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03872.html", "unified_diff": "@@ -172,16 +172,16 @@\n  \n \n boost::optional< String > description_\n  Optional description.
    \n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • InvalidMatrixBlock
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03876.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03876.html", "unified_diff": "@@ -155,15 +155,15 @@\n  \n \n boost::optional< String > description_\n  Optional description.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • InvalidDenseElimination
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03880.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03880.html", "unified_diff": "@@ -291,15 +291,15 @@\n \n

    Strategy for reweighting.

    \n
    See also
    ReweightScheme
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03884.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03884.html", "unified_diff": "@@ -341,15 +341,15 @@\n

    This returns w(x) in mEstimator

    \n \n

    Implements gtsam::noiseModel::mEstimator::Base.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03888.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03888.html", "unified_diff": "@@ -348,15 +348,15 @@\n

    This returns w(x) in mEstimator

    \n \n

    Implements gtsam::noiseModel::mEstimator::Base.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03892.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03892.html", "unified_diff": "@@ -348,15 +348,15 @@\n

    This returns w(x) in mEstimator

    \n \n

    Implements gtsam::noiseModel::mEstimator::Base.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03896.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03896.html", "unified_diff": "@@ -352,15 +352,15 @@\n

    This returns w(x) in mEstimator

    \n \n

    Implements gtsam::noiseModel::mEstimator::Base.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03900.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03900.html", "unified_diff": "@@ -351,15 +351,15 @@\n

    This returns w(x) in mEstimator

    \n \n

    Implements gtsam::noiseModel::mEstimator::Base.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03904.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03904.html", "unified_diff": "@@ -351,15 +351,15 @@\n

    This returns w(x) in mEstimator

    \n \n

    Implements gtsam::noiseModel::mEstimator::Base.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03908.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03908.html", "unified_diff": "@@ -348,15 +348,15 @@\n

    This returns w(x) in mEstimator

    \n \n

    Implements gtsam::noiseModel::mEstimator::Base.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03912.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03912.html", "unified_diff": "@@ -349,15 +349,15 @@\n

    This returns w(x) in mEstimator

    \n \n

    Implements gtsam::noiseModel::mEstimator::Base.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03916.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03916.html", "unified_diff": "@@ -349,15 +349,15 @@\n

    This returns w(x) in mEstimator

    \n \n

    Implements gtsam::noiseModel::mEstimator::Base.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/LossFunctions.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03920.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03920.html", "unified_diff": "@@ -706,16 +706,16 @@\n
\n \n

Implemented in gtsam::noiseModel::Gaussian.

\n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • noiseModel
  • Base
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03924.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03924.html", "unified_diff": "@@ -882,16 +882,16 @@\n

    Whiten a system, in place as well.

    \n \n

    Implements gtsam::noiseModel::Base.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n
\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • noiseModel
  • Diagonal
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03932.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03932.html", "unified_diff": "@@ -715,16 +715,16 @@\n

    In-place version.

    \n \n

    Reimplemented from gtsam::noiseModel::Gaussian.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n
\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • noiseModel
  • Isotropic
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03940.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03940.html", "unified_diff": "@@ -717,16 +717,16 @@\n

    in-place whiten, override if can be done more efficiently

    \n \n

    Reimplemented from gtsam::noiseModel::Isotropic.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • noiseModel
  • Unit
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03944.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03944.html", "unified_diff": "@@ -708,16 +708,16 @@\n
\n \n

Implements gtsam::noiseModel::Base.

\n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • noiseModel
  • Robust
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03948.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03948.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const noiseModel::Gaussian &m, const std::string &str="")\n  \n \n static bool Equals (const noiseModel::Gaussian &m1, const noiseModel::Gaussian &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< noiseModel::Gaussian >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03952.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03952.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const noiseModel::Diagonal &m, const std::string &str="")\n  \n \n static bool Equals (const noiseModel::Diagonal &m1, const noiseModel::Diagonal &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
    • \n
    \n
\n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • traits< noiseModel::Constrained >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03960.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03960.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const noiseModel::Isotropic &m, const std::string &str="")\n  \n \n static bool Equals (const noiseModel::Isotropic &m1, const noiseModel::Isotropic &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< noiseModel::Isotropic >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03964.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03964.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const noiseModel::Unit &m, const std::string &str="")\n  \n \n static bool Equals (const noiseModel::Unit &m1, const noiseModel::Unit &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/NoiseModel.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< noiseModel::Unit >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03968.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03968.html", "unified_diff": "@@ -319,15 +319,15 @@\n
\n \n

Reimplemented from gtsam::ConjugateGradientParameters.

\n \n
\n \n
The documentation for this struct was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03972.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03972.html", "unified_diff": "@@ -262,15 +262,15 @@\n
\n \n

Implements gtsam::IterativeSolver.

\n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03976.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03976.html", "unified_diff": "@@ -149,15 +149,15 @@\n const KeyInfokeyInfo_\n  \n \n const std::map< Key, Vector > & lambda_\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PCGSolver.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03980.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03980.html", "unified_diff": "@@ -214,15 +214,15 @@\n \n

    Start the power/accelerated iteration, after performing the power/accelerated iteration, calculate the ritz error, repeat this operation until the ritz error converge.

    \n

    If converged return true, else false.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PowerMethod.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PowerMethod.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • PowerMethod
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03984.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03984.html", "unified_diff": "@@ -181,15 +181,15 @@\n

    \n Friends

    \n \n std::ostream & operator<< (std::ostream &os, const PreconditionerParameters &p)\n  \n \n
    The documentation for this struct was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Preconditioner.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Preconditioner.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Preconditioner.cpp
    • \n
    \n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • Preconditioner
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a03992.html", "source2": "./usr/share/doc/libgtsam-dev/html/a03992.html", "unified_diff": "@@ -173,15 +173,15 @@\n enum gtsam::PreconditionerParameters::Kernel kernel_\n  \n \n enum gtsam::PreconditionerParameters::Verbosity verbosity_\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • DummyPreconditioner
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04000.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04000.html", "unified_diff": "@@ -170,15 +170,15 @@\n enum gtsam::PreconditionerParameters::Kernel kernel_\n  \n \n enum gtsam::PreconditionerParameters::Verbosity verbosity_\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Preconditioner.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Preconditioner.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Preconditioner.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04008.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04008.html", "unified_diff": "@@ -812,15 +812,15 @@\n

    y += alpha * A'*A*x

    \n \n

    Reimplemented from gtsam::HessianFactor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • RegularHessianFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04012.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04012.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const RegularHessianFactor< D > &m, const std::string &str="")\n  \n \n static bool Equals (const RegularHessianFactor< D > &m1, const RegularHessianFactor< D > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< RegularHessianFactor< D > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04016.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04016.html", "unified_diff": "@@ -1032,15 +1032,15 @@\n \n

    double* Transpose Matrix-vector multiply, i.e.

    \n

    x += A'*e RAW memory access! Assumes keys start at 0 and go to M-1, and y is laid out that way

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • RegularJacobianFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04020.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04020.html", "unified_diff": "@@ -238,16 +238,16 @@\n \n

    Create a sampler for a distribution specified by a vector of sigmas directly.

    \n

    NOTE: do not use zero as a seed, it will break the generator

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Sampler.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Sampler.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Sampler.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Sampler.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Sampler
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04024.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04024.html", "unified_diff": "@@ -136,16 +136,16 @@\n

    \n Friends

    \n \n bool operator< (const SlotEntry &p, const SlotEntry &q)\n  \n \n
    The documentation for this struct was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • SlotEntry
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04028.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04028.html", "unified_diff": "@@ -131,16 +131,16 @@\n  \n \n GTSAM_EXPORT void add (Key key, size_t dim)\n  Add a key/dim pair.
    \n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Scatter.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Scatter
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04032.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04032.html", "unified_diff": "@@ -183,16 +183,16 @@\n class boost::serialization::access\n  \n \n std::ostream & operator<< (std::ostream &os, const Subgraph &subgraph)\n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • Subgraph
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04036.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04036.html", "unified_diff": "@@ -127,15 +127,15 @@\n class boost::serialization::access\n  \n \n std::ostream & operator<< (std::ostream &os, const Edge &edge)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • Subgraph
  • Edge
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04040.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04040.html", "unified_diff": "@@ -177,16 +177,16 @@\n

    \n Friends

    \n \n std::ostream & operator<< (std::ostream &os, const PreconditionerParameters &p)\n  \n \n
    The documentation for this struct was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • SubgraphBuilderParameters
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04044.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04044.html", "unified_diff": "@@ -120,16 +120,16 @@\n typedef SubgraphBuilder Base\n  \n \n typedef std::vector< double > Weights\n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • SubgraphBuilder
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04048.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04048.html", "unified_diff": "@@ -184,15 +184,15 @@\n static std::string kernelTranslator (Kernel k)\n  \n \n static std::string verbosityTranslator (Verbosity v)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • SubgraphPreconditionerParameters
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04052.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04052.html", "unified_diff": "@@ -400,16 +400,16 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • SubgraphPreconditioner
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04056.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04056.html", "unified_diff": "@@ -304,15 +304,15 @@\n
\n \n

Reimplemented from gtsam::ConjugateGradientParameters.

\n \n
\n \n
The documentation for this struct was generated from the following file:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • SubgraphSolver
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04064.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04064.html", "unified_diff": "@@ -793,16 +793,16 @@\n \n

    For all key/value pairs in values, replace values with corresponding keys in this class with those in values.

    \n

    Throws std::out_of_range if any keys in values are not present in this class.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • VectorValues
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04068.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04068.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const VectorValues &m, const std::string &str="")\n  \n \n static bool Equals (const VectorValues &m1, const VectorValues &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/VectorValues.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/VectorValues.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< VectorValues >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04072.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04072.html", "unified_diff": "@@ -462,16 +462,16 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • PreintegratedAhrsMeasurements
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04076.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04076.html", "unified_diff": "@@ -775,16 +775,16 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • AHRSFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04080.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04080.html", "unified_diff": "@@ -208,15 +208,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04084.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04084.html", "unified_diff": "@@ -629,15 +629,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::NoiseModelFactor.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04088.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04088.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const Rot3AttitudeFactor &m, const std::string &str="")\n  \n \n static bool Equals (const Rot3AttitudeFactor &m1, const Rot3AttitudeFactor &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04096.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04096.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const Pose3AttitudeFactor &m, const std::string &str="")\n  \n \n static bool Equals (const Pose3AttitudeFactor &m1, const Pose3AttitudeFactor &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< Pose3AttitudeFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04100.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04100.html", "unified_diff": "@@ -617,16 +617,16 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • BarometricFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04104.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04104.html", "unified_diff": "@@ -378,16 +378,16 @@\n
\n \n

Reimplemented from gtsam::PreintegratedRotationParams.

\n \n
\n \n
The documentation for this struct was generated from the following files:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • PreintegratedCombinedMeasurements
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04112.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04112.html", "unified_diff": "@@ -726,16 +726,16 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • traits< CombinedImuFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04128.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04128.html", "unified_diff": "@@ -477,15 +477,15 @@\n \n \n
    Returns
    * Vector
    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • ConstantVelocityFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04132.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04132.html", "unified_diff": "@@ -612,15 +612,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04136.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04136.html", "unified_diff": "@@ -551,15 +551,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04140.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04140.html", "unified_diff": "@@ -181,16 +181,16 @@\n Static Public Attributes\n \n static const size_t dimension = 6\n  dimension of the variable - used to autodetect sizes
    \n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • imuBias
  • ConstantBias
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04144.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04144.html", "unified_diff": "@@ -184,15 +184,15 @@\n typedef OptionalJacobian< N, N > ChartJacobian\n  \n \n typedef Eigen::Matrix< double, N, N > Jacobian\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< imuBias::ConstantBias >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04148.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04148.html", "unified_diff": "@@ -551,16 +551,16 @@\n \n

    COVARIANCE OF: [PreintROTATION PreintPOSITION PreintVELOCITY].

    \n

    (first-order propagation from measurementCovariance).

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • PreintegratedImuMeasurements
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04152.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04152.html", "unified_diff": "@@ -705,16 +705,16 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ImuFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04156.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04156.html", "unified_diff": "@@ -657,16 +657,16 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ImuFactor2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04160.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04160.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const PreintegratedImuMeasurements &m, const std::string &str="")\n  \n \n static bool Equals (const PreintegratedImuMeasurements &m1, const PreintegratedImuMeasurements &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< PreintegratedImuMeasurements >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04164.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04164.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const ImuFactor &m, const std::string &str="")\n  \n \n static bool Equals (const ImuFactor &m1, const ImuFactor &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< ImuFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04168.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04168.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const ImuFactor2 &m, const std::string &str="")\n  \n \n static bool Equals (const ImuFactor2 &m1, const ImuFactor2 &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< ImuFactor2 >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04172.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04172.html", "unified_diff": "@@ -519,15 +519,15 @@\n
    Returns
    a deep copy of this factor
    \n \n

    Reimplemented from gtsam::NonlinearFactor.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • MagFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04176.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04176.html", "unified_diff": "@@ -438,15 +438,15 @@\n
    Returns
    a deep copy of this factor
    \n \n

    Reimplemented from gtsam::NonlinearFactor.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • MagFactor1
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04180.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04180.html", "unified_diff": "@@ -494,15 +494,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • MagFactor2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04184.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04184.html", "unified_diff": "@@ -506,15 +506,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagFactor.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • MagFactor3
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04188.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04188.html", "unified_diff": "@@ -670,15 +670,15 @@\n

    Implement functions needed for Testable.

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagPoseFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/MagPoseFactor.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • MagPoseFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04192.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04192.html", "unified_diff": "@@ -570,16 +570,16 @@\n

    Update preintegrated measurements and get derivatives It takes measured quantities in the j frame Modifies preintegrated quantities in place after correcting for bias and possibly sensor pose NOTE(frank): implementation is different in two versions.

    \n \n

    Implements gtsam::PreintegrationBase.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • ManifoldPreintegration
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04196.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04196.html", "unified_diff": "@@ -260,15 +260,15 @@\n \n
\n

serialization

\n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/NavState.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/NavState.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/NavState.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04200.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04200.html", "unified_diff": "@@ -156,15 +156,15 @@\n typedef manifold_tag structure_category\n  \n \n typedef Eigen::Matrix< double, dimension, 1 > TangentVector\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/NavState.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/NavState.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< NavState >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04204.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04204.html", "unified_diff": "@@ -169,16 +169,16 @@\n Friends\n \n class boost::serialization::access\n  Serialization function.
    \n  \n \n
    The documentation for this struct was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • PreintegratedRotationParams
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04208.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04208.html", "unified_diff": "@@ -215,16 +215,16 @@\n Friends\n \n class boost::serialization::access\n  Serialization function.
    \n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • traits< PreintegratedRotation >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04216.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04216.html", "unified_diff": "@@ -563,15 +563,15 @@\n

    Update preintegrated measurements and get derivatives It takes measured quantities in the j frame Modifies preintegrated quantities in place after correcting for bias and possibly sensor pose.

    \n \n

    Implemented in gtsam::ManifoldPreintegration, and gtsam::TangentPreintegration.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationBase.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationBase.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationBase.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04220.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04220.html", "unified_diff": "@@ -299,15 +299,15 @@\n
\n \n

Reimplemented from gtsam::PreintegratedRotationParams.

\n \n
\n \n
The documentation for this struct was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationParams.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationParams.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationParams.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04224.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04224.html", "unified_diff": "@@ -267,15 +267,15 @@\n

    velocity at time t, in nav frame

    \n \n

    Implemented in gtsam::ConstantTwistScenario, and gtsam::AcceleratingScenario.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/Scenario.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/Scenario.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Scenario
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04228.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04228.html", "unified_diff": "@@ -272,15 +272,15 @@\n

    velocity at time t, in nav frame

    \n \n

    Implements gtsam::Scenario.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/Scenario.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/Scenario.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ConstantTwistScenario
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04232.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04232.html", "unified_diff": "@@ -271,15 +271,15 @@\n

    velocity at time t, in nav frame

    \n \n

    Implements gtsam::Scenario.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/Scenario.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/Scenario.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • AcceleratingScenario
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04236.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04236.html", "unified_diff": "@@ -165,15 +165,15 @@\n typedef imuBias::ConstantBias Bias\n  \n \n typedef boost::shared_ptr< PreintegrationParamsSharedParams\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ScenarioRunner.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ScenarioRunner.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ScenarioRunner.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04240.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04240.html", "unified_diff": "@@ -185,15 +185,15 @@\n typedef imuBias::ConstantBias Bias\n  \n \n typedef boost::shared_ptr< PreintegrationParamsSharedParams\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ScenarioRunner.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ScenarioRunner.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ScenarioRunner.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04244.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04244.html", "unified_diff": "@@ -567,16 +567,16 @@\n

    Update preintegrated measurements and get derivatives It takes measured quantities in the j frame Modifies preintegrated quantities in place after correcting for bias and possibly sensor pose NOTE(frank): implementation is different in two versions.

    \n \n

    Implements gtsam::PreintegrationBase.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • TangentPreintegration
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04248.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04248.html", "unified_diff": "@@ -524,16 +524,16 @@\n

    Calls the errorFunction closure, which is a std::function object One can check if a derivative is needed in the errorFunction by checking the length of Jacobian array.

    \n \n

    Implements gtsam::NoiseModelFactor.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/CustomFactor.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/CustomFactor.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/CustomFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/CustomFactor.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • CustomFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04256.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04256.html", "unified_diff": "@@ -327,16 +327,16 @@\n
\n \n

Reimplemented from gtsam::NonlinearOptimizerParams.

\n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • DoglegParams
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04260.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04260.html", "unified_diff": "@@ -364,16 +364,16 @@\n

    Perform a single iteration, returning GaussianFactorGraph corresponding to the linearized factor graph.

    \n \n

    Implements gtsam::NonlinearOptimizer.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • DoglegOptimizer
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04264.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04264.html", "unified_diff": "@@ -386,15 +386,15 @@\n \n \n
    Returns
    A DoglegIterationResult containing the new delta, the linear update dx_d, and the resulting nonlinear error f_error.
    \n \n
\n \n
The documentation for this struct was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizerImpl.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizerImpl.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/DoglegOptimizerImpl.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04268.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04268.html", "unified_diff": "@@ -113,15 +113,15 @@\n VectorValues dx_d\n  \n \n double f_error\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • DoglegOptimizerImpl
  • IterationResult
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04272.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04272.html", "unified_diff": "@@ -121,15 +121,15 @@\n

    \n Public Types

    \n \n typedef T result_type\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • apply_compose
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04276.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04276.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Public Member Functions

    \n \n double operator() (const double &x, const double &y, OptionalJacobian< 1, 1 > H1=boost::none, OptionalJacobian< 1, 1 > H2=boost::none) const\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • apply_compose< double >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04280.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04280.html", "unified_diff": "@@ -742,16 +742,16 @@\n

    We override this method to provide both the function evaluation and its derivative(s) in H.

    \n \n

    Implements gtsam::NoiseModelFactor.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExpressionFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExpressionFactor.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ExpressionFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04284.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04284.html", "unified_diff": "@@ -97,15 +97,15 @@\n
\n \n
\n
gtsam::internal::ExecutionTrace< T > Class Template Reference
\n
\n
\n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
  • \n
\n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • ExecutionTrace
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04288.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04288.html", "unified_diff": "@@ -97,15 +97,15 @@\n
\n \n
\n
gtsam::internal::ExpressionNode< T > Class Template Reference
\n
\n
\n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
  • \n
\n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • ExpressionNode
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04292.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04292.html", "unified_diff": "@@ -333,16 +333,16 @@\n \n

    Return value and optional derivatives, reverse AD version Notes: this is not terribly efficient, and H should have correct size.

    \n

    The order of the Jacobians is same as keys in either keys() or dims()

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression-inl.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression-inl.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Expression
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04296.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04296.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Public Types

    \n \n typedef std::function< T(const A1 &, typename MakeOptionalJacobian< T, A1 >::type)> type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Expression
  • UnaryFunction
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04300.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04300.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Public Types

    \n \n typedef std::function< T(const A1 &, const A2 &, typename MakeOptionalJacobian< T, A1 >::type, typename MakeOptionalJacobian< T, A2 >::type)> type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Expression
  • BinaryFunction
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04304.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04304.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Public Types

    \n \n typedef std::function< T(const A1 &, const A2 &, const A3 &, typename MakeOptionalJacobian< T, A1 >::type, typename MakeOptionalJacobian< T, A2 >::type, typename MakeOptionalJacobian< T, A3 >::type)> type\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Expression
  • TernaryFunction
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04308.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04308.html", "unified_diff": "@@ -242,16 +242,16 @@\n  \n \"-\"/ Protected Attributes inherited from gtsam::Expression< T >\n \n boost::shared_ptr< internal::ExpressionNode< T > > root_\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ScalarMultiplyExpression
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04312.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04312.html", "unified_diff": "@@ -242,16 +242,16 @@\n  \n \"-\"/ Protected Attributes inherited from gtsam::Expression< T >\n \n boost::shared_ptr< internal::ExpressionNode< T > > root_\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • BinarySumExpression
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04316.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04316.html", "unified_diff": "@@ -128,15 +128,15 @@\n static void Print (const ExpressionFactor< T > &m, const std::string &str="")\n  \n \n static bool Equals (const ExpressionFactor< T > &m1, const ExpressionFactor< T > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< ExpressionFactor< T > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04320.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04320.html", "unified_diff": "@@ -435,15 +435,15 @@\n  \n \"-\"/ Static Protected Attributes inherited from gtsam::ExpressionFactor< T >\n \n static const int Dim = traits<T>::dimension\n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • ExpressionFactorN
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04324.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04324.html", "unified_diff": "@@ -128,15 +128,15 @@\n static void Print (const ExpressionFactorN< T, Args... > &m, const std::string &str="")\n  \n \n static bool Equals (const ExpressionFactorN< T, Args... > &m1, const ExpressionFactorN< T, Args... > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • ExtendedKalmanFilter
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04336.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04336.html", "unified_diff": "@@ -616,15 +616,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • FunctorizedFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04340.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04340.html", "unified_diff": "@@ -128,15 +128,15 @@\n static void Print (const FunctorizedFactor< R, T > &m, const std::string &str="")\n  \n \n static bool Equals (const FunctorizedFactor< R, T > &m1, const FunctorizedFactor< R, T > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • FunctorizedFactor2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04348.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04348.html", "unified_diff": "@@ -128,15 +128,15 @@\n static void Print (const FunctorizedFactor2< R, T1, T2 > &m, const std::string &str="")\n  \n \n static bool Equals (const FunctorizedFactor2< R, T1, T2 > &m1, const FunctorizedFactor2< R, T1, T2 > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< FunctorizedFactor2< R, T1, T2 > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04352.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04352.html", "unified_diff": "@@ -268,15 +268,15 @@\n  \n \n IterativeOptimizationParameters::shared_ptr iterativeParams\n  The container for iterativeOptimization parameters. used in CG Solvers.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • GaussNewtonParams
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04356.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04356.html", "unified_diff": "@@ -356,16 +356,16 @@\n

    Perform a single iteration, returning GaussianFactorGraph corresponding to the linearized factor graph.

    \n \n

    Implements gtsam::NonlinearOptimizer.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • GaussNewtonOptimizer
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04360.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04360.html", "unified_diff": "@@ -286,15 +286,15 @@\n \n

    Set weights for each factor.

    \n

    This is typically not needed, but provides an extra interface for the user to initialize the weightst

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GncOptimizer.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GncOptimizer.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • GncOptimizer
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04364.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04364.html", "unified_diff": "@@ -312,15 +312,15 @@\n \n

    any other specific GNC parameters:

    \n

    Default loss

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GncParams.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GncParams.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • GncParams
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04368.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04368.html", "unified_diff": "@@ -268,16 +268,16 @@\n \n

    Default constructor sets up robot coordinates.

    \n

    Paper horizontal is robot Y, paper vertical is robot X. Default figure size of 5x5 in.

    \n \n
\n \n
The documentation for this struct was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • GraphvizFormatting
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04372.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04372.html", "unified_diff": "@@ -326,15 +326,15 @@\n  \n \n Roots roots_\n  Root cliques.
    \n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ISAM2BayesTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04376.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04376.html", "unified_diff": "@@ -291,15 +291,15 @@\n \"-\"/ Protected Attributes inherited from gtsam::ClusterTree< GRAPH >\n \n FastVector< sharedNode > roots_\n  concept check
    \n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ISAM2JunctionTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04380.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04380.html", "unified_diff": "@@ -213,16 +213,16 @@\n \n

    Update the RgProd (R*g) incrementally taking into account which variables have been recalculated in replacedKeys.

    \n

    Only used in Dogleg.

    \n \n
\n \n
The documentation for this struct was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • DeltaImpl
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04384.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04384.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Public Attributes

    \n \n ISAM2::sharedClique bayesTree\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • DeltaImpl
  • PartialSolveResult
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04388.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04388.html", "unified_diff": "@@ -127,15 +127,15 @@\n  \n enum  { NO_CONSTRAINT\n , CONSTRAIN_LAST\n }\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • DeltaImpl
  • ReorderingMode
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04392.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04392.html", "unified_diff": "@@ -279,15 +279,15 @@\n \n \n
    Returns
    The set of variable indices in delta whose magnitude is greater than or equal to relinearizeThreshold
    \n \n
\n \n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • UpdateImpl
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04396.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04396.html", "unified_diff": "@@ -964,16 +964,16 @@\n \n

    A cumulative mask for the variables that were replaced and have not yet been updated in the linear solution delta_, this is only used internally, delta will always be updated if necessary when requested with getDelta() or calculateEstimate().

    \n

    This is mutable because it is used internally to not update delta_ until it is needed.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ISAM2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04400.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04400.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const ISAM2 &m, const std::string &str="")\n  \n \n static bool Equals (const ISAM2 &m1, const ISAM2 &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.h
    • \n
    \n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Clique.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Clique.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Clique.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Clique.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ISAM2Clique
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04408.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04408.html", "unified_diff": "@@ -162,15 +162,15 @@\n \n \n \n \n
\n \n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ISAM2GaussNewtonParams
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04412.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04412.html", "unified_diff": "@@ -223,16 +223,16 @@\n \n \n \n \n
\n \n
The documentation for this struct was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ISAM2DoglegParams
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04416.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04416.html", "unified_diff": "@@ -402,16 +402,16 @@\n
    Vector3(1.0, 1.0, 1.0); // 1.0 m landmark position threshold
    \n
    params.relinearizeThreshold = thresholds;
    \n
    FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
    Definition FastMap.h:38
    \n
\n \n \n
The documentation for this struct was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ISAM2Params
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04420.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04420.html", "unified_diff": "@@ -297,15 +297,15 @@\n \n

    The number of variables that were relinearized because their linear deltas exceeded the reslinearization threshold (ISAM2Params::relinearizeThreshold), combined with any additional variables that had to be relinearized because they were involved in the same factor as a variable above the relinearization threshold.

    \n

    On steps where no relinearization is considered (see ISAM2Params::relinearizeSkip), this count will be zero.

    \n \n
\n \n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Result.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Result.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ISAM2Result
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04424.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04424.html", "unified_diff": "@@ -124,15 +124,15 @@\n

    \n Classes

    \n struct  VariableStatus\n  The status of a single variable, this struct is stored in DetailedResults::variableStatus. More...
    \n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Result.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Result.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ISAM2Result
  • DetailedResults
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04428.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04428.html", "unified_diff": "@@ -150,15 +150,15 @@\n \n

    Whether the variable was relinearized, either by being above the relinearization threshold or by involvement.

    \n

    Whether the variable was just involved in new factors

    \n \n
\n \n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Result.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Result.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • ISAM2Result
  • DetailedResults
  • VariableStatus
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04432.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04432.html", "unified_diff": "@@ -186,15 +186,15 @@\n
  • Timestamp i: ISAM2::update() called with a new smart factor depending on Keys X(0) and X(1). It returns that the factor index for the new smart factor (inside ISAM2) is 13.
  • \n
  • Timestamp i+1: The same smart factor has been augmented to now also depend on Keys X(2), X(3). Next call to ISAM2::update() must include its newAffectedKeys field with the map 13 -> {X(2), X(3)}.
  • \n
\n \n
\n \n
The documentation for this struct was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • ISAM2UpdateParams
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04436.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04436.html", "unified_diff": "@@ -397,16 +397,16 @@\n

    Perform a single iteration, returning GaussianFactorGraph corresponding to the linearized factor graph.

    \n \n

    Implements gtsam::NonlinearOptimizer.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • LevenbergMarquardtOptimizer
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04440.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04440.html", "unified_diff": "@@ -466,16 +466,16 @@\n
\n \n

Reimplemented from gtsam::NonlinearOptimizerParams.

\n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • LevenbergMarquardtParams
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04444.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04444.html", "unified_diff": "@@ -648,16 +648,16 @@\n

    Creates a shared_ptr clone of the factor with different keys using a map from old->new keys.

    \n \n

    Reimplemented from gtsam::NonlinearFactor.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • traits< LinearContainerFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04452.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04452.html", "unified_diff": "@@ -501,16 +501,16 @@\n \n

    Compute the marginal information matrix of a single variable.

    \n

    Use LLt(const Matrix&) or RtR(const Matrix&) to obtain the square-root information matrix.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • Marginals
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04456.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04456.html", "unified_diff": "@@ -199,16 +199,16 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • JointMarginal
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04460.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04460.html", "unified_diff": "@@ -294,16 +294,16 @@\n

    Optimize for the maximum-likelihood estimate, returning a the optimized variable assignments.

    \n \n

    Reimplemented from gtsam::NonlinearOptimizer.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • NonlinearEquality
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04472.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04472.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const NonlinearEquality< VALUE > &m, const std::string &str="")\n  \n \n static bool Equals (const NonlinearEquality< VALUE > &m1, const NonlinearEquality< VALUE > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • NonlinearEquality1
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04480.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04480.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const NonlinearEquality1< VALUE > &m, const std::string &str="")\n  \n \n static bool Equals (const NonlinearEquality1< VALUE > &m1, const NonlinearEquality1< VALUE > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • NonlinearEquality2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04488.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04488.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const NonlinearEquality2< VALUE > &m, const std::string &str="")\n  \n \n static bool Equals (const NonlinearEquality2< VALUE > &m1, const NonlinearEquality2< VALUE > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< NonlinearEquality2< VALUE > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04492.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04492.html", "unified_diff": "@@ -124,15 +124,15 @@\n Key key () const\n  \n \n const char * what () const noexcept override\n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • MarginalizeNonleafException
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04496.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04496.html", "unified_diff": "@@ -646,16 +646,16 @@\n

    Should the factor be evaluated in the same thread as the caller This is to enable factors that has shared states (like the Python GIL lock)

    \n \n

    Reimplemented in gtsam::CustomFactor.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • NonlinearFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04500.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04500.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const NonlinearFactor &m, const std::string &str="")\n  \n \n static bool Equals (const NonlinearFactor &m1, const NonlinearFactor &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< NonlinearFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04504.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04504.html", "unified_diff": "@@ -635,16 +635,16 @@\n \n

    Vector of errors, whitened This is the raw error, i.e., i.e.

    \n

    \\( (h(x)-z)/\\sigma \\) in case of a Gaussian

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • NoiseModelFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04536.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04536.html", "unified_diff": "@@ -143,17 +143,17 @@\n
    TEST(NonlinearFactor, MyFactor) {
    \n
    MyFactor f(X(1), X(2), noiseModel::Unit::Create(1));
    \n
    EXPECT_DOUBLES_EQUAL(-8., f.evaluateError(Pose3(), Point3(8., 7., 6.))(0),
    \n
    1e-9);
    \n
    Values values;
    \n
    values.insert(X(1), Pose3(Rot3::RzRyRx(0.1, 0.2, 0.3), Point3(1, 2, 3)));
    \n
    values.insert(X(2), Point3(1, 2, 3));
    \n-
    EXPECT_CORRECT_FACTOR_JACOBIANS(f, values, 1e-5, 1e-5);
    \n+
    EXPECT_CORRECT_FACTOR_JACOBIANS(f, values, 1e-5, 1e-5);
    \n
    }
    \n-
    #define EXPECT_CORRECT_FACTOR_JACOBIANS(factor, values, numerical_derivative_step, tolerance)
    Check the Jacobians produced by a factor against finite differences.
    Definition factorTesting.h:114
    \n+
    #define EXPECT_CORRECT_FACTOR_JACOBIANS(factor, values, numerical_derivative_step, tolerance)
    Check the Jacobians produced by a factor against finite differences.
    Definition factorTesting.h:114
    \n
    Vector3 Point3
    As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
    Definition Point3.h:36
    \n
    noiseModel::Base::shared_ptr SharedNoiseModel
    Aliases.
    Definition NoiseModel.h:724
    \n
    std::uint64_t Key
    Integer nonlinear key type.
    Definition types.h:100
    \n
    A 3D pose (R,t) : (Rot3,Point3)
    Definition Pose3.h:37
    \n
    static Rot3 RzRyRx(double x, double y, double z, OptionalJacobian< 3, 1 > Hx=boost::none, OptionalJacobian< 3, 1 > Hy=boost::none, OptionalJacobian< 3, 1 > Hz=boost::none)
    Rotations around Z, Y, then X axes as in http://en.wikipedia.org/wiki/Rotation_matrix,...
    Definition Rot3M.cpp:85
    \n
    static shared_ptr Create(size_t dim)
    Create a unit covariance noise model.
    Definition NoiseModel.h:597
    \n
    A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
    Definition NonlinearFactor.h:174
    \n@@ -850,15 +850,15 @@\n \n \n

    Implements gtsam::NoiseModelFactor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • NoiseModelFactorN
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04540.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04540.html", "unified_diff": "@@ -879,16 +879,16 @@\n \n

    Linearize and solve in one pass.

    \n

    Calls linearizeToHessianFactor, densely solves the normal equations, and updates the values.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • traits< NonlinearFactorGraph >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04548.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04548.html", "unified_diff": "@@ -259,15 +259,15 @@\n \n

    get counters

    \n

    TODO: comment

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04552.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04552.html", "unified_diff": "@@ -406,16 +406,16 @@\n \n

    Default function to do linear solve, i.e.

    \n

    optimize a GaussianFactorGraph

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • NonlinearOptimizer
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04556.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04556.html", "unified_diff": "@@ -317,16 +317,16 @@\n
    // ...
    \n
    };
    \n

or to the result of a properly-formed std::bind call.

\n \n \n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • NonlinearOptimizerParams
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04568.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04568.html", "unified_diff": "@@ -119,15 +119,15 @@\n  \n \n ValueType & value\n  The value.
    \n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • _ValuesKeyValuePair
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04572.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04572.html", "unified_diff": "@@ -122,15 +122,15 @@\n  \n \n const ValueType & value\n  The value.
    \n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • _ValuesConstKeyValuePair
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04576.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04576.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Static Public Member Functions

    \n \n static CastedKeyValuePairType cast (KeyValuePairType key_value)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ValuesCastHelper
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04580.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04580.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Static Public Member Functions

    \n \n static CastedKeyValuePairType cast (KeyValuePairType key_value)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ValuesCastHelper< Value, CastedKeyValuePairType, KeyValuePairType >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04584.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04584.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Static Public Member Functions

    \n \n static CastedKeyValuePairType cast (KeyValuePairType key_value)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ValuesCastHelper< const Value, CastedKeyValuePairType, KeyValuePairType >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04588.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04588.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Public Member Functions

    \n \n ValueType operator() (Key j, const Value *const pointer)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • handle
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04592.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04592.html", "unified_diff": "@@ -97,15 +97,15 @@\n
\n \n
\n
gtsam::internal::handle_matrix< MatrixType, isDynamic > Struct Template Reference
\n
\n
\n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
  • \n
\n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • handle_matrix
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04596.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04596.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Public Member Functions

    \n \n Eigen::Matrix< double, M, N > operator() (Key j, const Value *const pointer)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • handle_matrix< Eigen::Matrix< double, M, N >, true >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04600.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04600.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Public Member Functions

    \n \n Eigen::Matrix< double, M, N > operator() (Key j, const Value *const pointer)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • handle_matrix< Eigen::Matrix< double, M, N >, false >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04604.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04604.html", "unified_diff": "@@ -107,15 +107,15 @@\n

    \n Public Member Functions

    \n \n Eigen::Matrix< double, M, N > operator() (Key j, const Value *const pointer)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • internal
  • handle< Eigen::Matrix< double, M, N > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04608.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04608.html", "unified_diff": "@@ -110,15 +110,15 @@\n static Valueallocate_clone (const Value &a)\n  \n \n static void deallocate_clone (const Value *a)\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • ValueCloneAllocator
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04612.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04612.html", "unified_diff": "@@ -594,16 +594,16 @@\n \n

    Templated version to update a variable with the given j, throws KeyDoesNotExist<J> if j is not present.

    \n

    If no chart is specified, the DefaultChart<ValueType> is used.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values-inl.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04616.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04616.html", "unified_diff": "@@ -121,15 +121,15 @@\n  \n \n Valuevalue\n  The value.
    \n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Values
  • KeyValuePair
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04620.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04620.html", "unified_diff": "@@ -124,15 +124,15 @@\n  \n \n const Valuevalue\n  The value.
    \n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Values
  • ConstKeyValuePair
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04624.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04624.html", "unified_diff": "@@ -136,15 +136,15 @@\n

    \n Public Types

    \n \n using const_iterator_type = typename KeyValueMap::const_iterator\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • Values
  • deref_iterator
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04628.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04628.html", "unified_diff": "@@ -132,15 +132,15 @@\n Protected Attributes\n \n const Key key_\n  The key that already existed.
    \n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04632.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04632.html", "unified_diff": "@@ -136,15 +136,15 @@\n  \n \n const Key key_\n  The key that does not exist.
    \n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04636.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04636.html", "unified_diff": "@@ -146,15 +146,15 @@\n const std::type_info & storedTypeId_\n  \n \n const std::type_info & requestedTypeId_\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04640.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04640.html", "unified_diff": "@@ -115,15 +115,15 @@\n

    \n Public Member Functions

    \n \n const char * what () const noexcept override\n  \n \n
    The documentation for this class was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • DynamicValuesMismatched
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04644.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04644.html", "unified_diff": "@@ -134,15 +134,15 @@\n const size_t M2_\n  \n \n const size_t N2_\n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04648.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04648.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const Values &m, const std::string &str="")\n  \n \n static bool Equals (const Values &m1, const Values &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Values.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< Values >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04652.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04652.html", "unified_diff": "@@ -597,15 +597,15 @@\n

    Print.

    \n \n

    Reimplemented from gtsam::NonlinearFactor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • WhiteNoiseFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04688.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04688.html", "unified_diff": "@@ -286,15 +286,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • BinaryMeasurement
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04692.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04692.html", "unified_diff": "@@ -121,15 +121,15 @@\n  \n \n boost::optional< gtsam::Vector > responses\n  Optional confidences/responses for each detection, of shape N.
    \n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • gtsfm
  • Keypoints
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04700.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04700.html", "unified_diff": "@@ -244,16 +244,16 @@\n \n

    Computes the outlier weights of the graph.

    \n

    We define the outlier weight of a edge to be zero if the edge is an inlier and the magnitude of its edgeWeight if it is an outlier. This function internally calls computeOrdering and uses the obtained ordering to identify outlier edges.

    Returns
    outlierWeights: map from an edge to its outlier weight.
    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/MFAS.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • MFAS
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04704.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04704.html", "unified_diff": "@@ -329,16 +329,16 @@\n \n \n
    Returns
    NonlinearFactorGraph
    \n \n
\n \n
The documentation for this struct was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.h
  • \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.cpp
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.cpp
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • SfmData
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04708.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04708.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const SfmData &m, const std::string &str="")\n  \n \n static bool Equals (const SfmData &m1, const SfmData &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< SfmData >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04712.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04712.html", "unified_diff": "@@ -191,15 +191,15 @@\n \n

    Check that no two measurements are from the same camera.

    \n
    Returns
    boolean result of the validation.
    \n \n
\n \n
The documentation for this struct was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • SfmTrack2d
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04716.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04716.html", "unified_diff": "@@ -207,15 +207,15 @@\n  \n \n std::vector< SiftIndexsiftIndices\n  The feature descriptors (optional)
    \n  \n \n
    The documentation for this struct was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04720.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04720.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const SfmTrack &m, const std::string &str="")\n  \n \n static bool Equals (const SfmTrack &m1, const SfmTrack &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.h
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • traits< SfmTrack >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04728.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04728.html", "unified_diff": "@@ -205,16 +205,16 @@\n using Rot = typename std::conditional< d==2, Rot2, Rot3 >::type\n  \n \n using Anchor = std::pair< size_t, Rot >\n  \n \n
    The documentation for this struct was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • ShonanAveragingParameters
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04732.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04732.html", "unified_diff": "@@ -832,16 +832,16 @@\n \n \n
    Returns
    SO(p) values
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • ShonanAveraging
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04736.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04736.html", "unified_diff": "@@ -317,16 +317,16 @@\n using Rot = typename Parameters::Rot\n  \n \n using Measurements = std::vector< BinaryMeasurement< Rot > >\n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • ShonanAveraging2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04740.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04740.html", "unified_diff": "@@ -317,16 +317,16 @@\n using Rot = typename Parameters::Rot\n  \n \n using Measurements = std::vector< BinaryMeasurement< Rot > >\n  \n \n
    The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • gtsam
  • ShonanAveraging3
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04744.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04744.html", "unified_diff": "@@ -553,15 +553,15 @@\n

    print with optional string

    \n \n

    Reimplemented from gtsam::NoiseModelFactor.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanFactor.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanFactor.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04748.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04748.html", "unified_diff": "@@ -367,15 +367,15 @@\n

    linearize to a GaussianFactor

    \n \n

    Implements gtsam::NonlinearFactor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • ShonanGaugeFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04752.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04752.html", "unified_diff": "@@ -481,15 +481,15 @@\n \n \n
    Returns
    * Vector
    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • TranslationFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04756.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04756.html", "unified_diff": "@@ -465,15 +465,15 @@\n \n
    Returns
    TranslationEdges vector of binary measurements where the keys are the cameras and the measurement is the simulated Unit3 translation direction between the cameras.
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • TranslationRecovery
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04760.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04760.html", "unified_diff": "@@ -525,15 +525,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/AntiFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/AntiFactor.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • AntiFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04764.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04764.html", "unified_diff": "@@ -569,15 +569,15 @@\n

    print with optional string

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • BetweenFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04768.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04768.html", "unified_diff": "@@ -128,15 +128,15 @@\n static void Print (const BetweenFactor< VALUE > &m, const std::string &str="")\n  \n \n static bool Equals (const BetweenFactor< VALUE > &m1, const BetweenFactor< VALUE > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< BetweenFactor< VALUE > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04772.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04772.html", "unified_diff": "@@ -453,15 +453,15 @@\n \"-\"/ Protected Attributes inherited from gtsam::Factor\n \n KeyVector keys_\n  The keys involved in this factor.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • BetweenConstraint
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04776.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04776.html", "unified_diff": "@@ -128,15 +128,15 @@\n static void Print (const BetweenConstraint< VALUE > &m, const std::string &str="")\n  \n \n static bool Equals (const BetweenConstraint< VALUE > &m1, const BetweenConstraint< VALUE > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this struct was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • BoundingConstraint1
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04784.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04784.html", "unified_diff": "@@ -487,15 +487,15 @@\n

    active when constraint NOT met

    \n \n

    Reimplemented from gtsam::NonlinearFactor.

    \n \n
\n \n
The documentation for this struct was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • BoundingConstraint2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04808.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04808.html", "unified_diff": "@@ -658,16 +658,16 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • EssentialMatrixConstraint
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04812.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04812.html", "unified_diff": "@@ -612,15 +612,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • EssentialMatrixFactor3
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04824.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04824.html", "unified_diff": "@@ -617,15 +617,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • EssentialMatrixFactor4
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04828.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04828.html", "unified_diff": "@@ -411,15 +411,15 @@\n \"-\"/ Protected Attributes inherited from gtsam::Factor\n \n KeyVector keys_\n  The keys involved in this factor.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • FrobeniusPrior
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04832.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04832.html", "unified_diff": "@@ -412,15 +412,15 @@\n \"-\"/ Protected Attributes inherited from gtsam::Factor\n \n KeyVector keys_\n  The keys involved in this factor.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • FrobeniusFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04836.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04836.html", "unified_diff": "@@ -505,15 +505,15 @@\n

    print with optional string

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • FrobeniusBetweenFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04840.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04840.html", "unified_diff": "@@ -714,15 +714,15 @@\n \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • GeneralSFMFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04844.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04844.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const GeneralSFMFactor< CAMERA, LANDMARK > &m, const std::string &str="")\n  \n \n static bool Equals (const GeneralSFMFactor< CAMERA, LANDMARK > &m1, const GeneralSFMFactor< CAMERA, LANDMARK > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • GeneralSFMFactor2
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04852.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04852.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const GeneralSFMFactor2< CALIBRATION > &m, const std::string &str="")\n  \n \n static bool Equals (const GeneralSFMFactor2< CALIBRATION > &m1, const GeneralSFMFactor2< CALIBRATION > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< GeneralSFMFactor2< CALIBRATION > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04856.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04856.html", "unified_diff": "@@ -191,16 +191,16 @@\n
      \n
    • ************************************************************************* *‍/
    • \n
    \n \n
\n \n
The documentation for this struct was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • InitializePose3
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04860.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04860.html", "unified_diff": "@@ -539,15 +539,15 @@\n \"-\"/ Protected Attributes inherited from gtsam::Factor\n \n KeyVector keys_\n  The keys involved in this factor.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • JacobianFactorQ
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04864.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04864.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const JacobianFactorQ< D, ZDim > &m, const std::string &str="")\n  \n \n static bool Equals (const JacobianFactorQ< D, ZDim > &m1, const JacobianFactorQ< D, ZDim > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< JacobianFactorQ< D, ZDim > >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04868.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04868.html", "unified_diff": "@@ -531,15 +531,15 @@\n \"-\"/ Protected Attributes inherited from gtsam::Factor\n \n KeyVector keys_\n  The keys involved in this factor.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • JacobianFactorQR
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04872.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04872.html", "unified_diff": "@@ -609,15 +609,15 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • KarcherMeanFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04880.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04880.html", "unified_diff": "@@ -526,15 +526,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::NoiseModelFactor.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/OrientedPlane3Factor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/OrientedPlane3Factor.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/OrientedPlane3Factor.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04884.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04884.html", "unified_diff": "@@ -511,15 +511,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::NoiseModelFactor.

    \n \n
\n \n
The documentation for this class was generated from the following files:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/OrientedPlane3Factor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/OrientedPlane3Factor.h
  • \n
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/OrientedPlane3Factor.cpp
  • \n
\n \n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04888.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04888.html", "unified_diff": "@@ -574,15 +574,15 @@\n

    print contents

    \n \n

    Reimplemented from gtsam::NoiseModelFactor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • PoseRotationPrior
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04892.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04892.html", "unified_diff": "@@ -567,15 +567,15 @@\n

    print contents

    \n \n

    Reimplemented from gtsam::NoiseModelFactor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • PoseTranslationPrior
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04896.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04896.html", "unified_diff": "@@ -798,15 +798,15 @@\n \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
    \n
  • gtsam
  • GenericProjectionFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04900.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04900.html", "unified_diff": "@@ -128,15 +128,15 @@\n static void Print (const GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > &m, const std::string &str="")\n  \n \n static bool Equals (const GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > &m1, const GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/RotateFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/RotateFactor.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • RotateFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04924.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04924.html", "unified_diff": "@@ -483,15 +483,15 @@\n

    print

    \n \n

    Reimplemented from gtsam::NoiseModelFactor.

    \n \n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/RotateFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/RotateFactor.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • RotateDirectionsFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04928.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04928.html", "unified_diff": "@@ -326,15 +326,15 @@\n static void FillDiagonalF (const FBlocks &Fs, Matrix &F)\n  Create BIG block-diagonal matrix F from Fblocks.
    \n  \n \n \n \n+GTSAM_MAKE_ALIGNED_OPERATOR_NEW typedef boost::shared_ptr< This > \n \n \n

    \n Public Attributes

    \n-GTSAM_MAKE_ALIGNED_OPERATOR_NEW typedef boost::shared_ptr< This > shared_ptr
    shared_ptr
     shorthand for a smart pointer to a factor.
     
    \n \n \n@@ -1107,15 +1107,15 @@\n \n

    As of Feb 22, 2015, the noise model is the same for all measurements and is isotropic.

    \n

    This allows for moving most calculations of Schur complement etc. to be easily moved to CameraSet, and also agrees pragmatically with what is normally done.

    \n \n \n \n
    The documentation for this class was generated from the following file:\n \n \n \n
    \n
      \n
    • gtsam
    • SmartFactorBase
    • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04932.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04932.html", "unified_diff": "@@ -186,15 +186,15 @@\n Friends\n
    \n \n \n

    \n Static Public Attributes

    \n static const int Dim = traits<CAMERA>::dimension
    \n class boost::serialization::access
     Serialization function.
     
    \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/StereoFactor.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/StereoFactor.h
  • \n
\n \n \n \n
\n
    \n
  • gtsam
  • GenericStereoFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04964.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04964.html", "unified_diff": "@@ -128,15 +128,15 @@\n static void Print (const GenericStereoFactor< T1, T2 > &m, const std::string &str="")\n  \n \n static bool Equals (const GenericStereoFactor< T1, T2 > &m1, const GenericStereoFactor< T1, T2 > &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/StereoFactor.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/StereoFactor.h
    • \n
    \n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following file:\n \n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • SymbolicBayesNet
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04976.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04976.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const SymbolicBayesNet &m, const std::string &str="")\n  \n \n static bool Equals (const SymbolicBayesNet &m1, const SymbolicBayesNet &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< SymbolicBayesNet >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04980.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04980.html", "unified_diff": "@@ -272,15 +272,15 @@\n  This stores the Cached separator marginal P(S)
    \n  \n std::mutex cachedSeparatorMarginalMutex_\n  This protects Cached seperator marginal P(S) from concurrent read/writes as many the functions which access it are const (hence the mutable) leading to the false impression that these const functions are thread-safe which is not true due to these mutable values.
    \n  \n \n
    The documentation for this class was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • SymbolicBayesTreeClique
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04984.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04984.html", "unified_diff": "@@ -347,15 +347,15 @@\n  \n \n Roots roots_\n  Root cliques.
    \n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesTree.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesTree.h
    • \n
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesTree.cpp
    • \n
    \n
\n \n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04988.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04988.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const SymbolicBayesTreeClique &m, const std::string &str="")\n  \n \n static bool Equals (const SymbolicBayesTreeClique &m1, const SymbolicBayesTreeClique &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< SymbolicBayesTreeClique >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04992.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04992.html", "unified_diff": "@@ -125,15 +125,15 @@\n static void Print (const SymbolicBayesTree &m, const std::string &str="")\n  \n \n static bool Equals (const SymbolicBayesTree &m1, const SymbolicBayesTree &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< SymbolicBayesTree >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a04996.html", "source2": "./usr/share/doc/libgtsam-dev/html/a04996.html", "unified_diff": "@@ -630,16 +630,16 @@\n

    Print with optional formatter.

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • SymbolicConditional
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05000.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05000.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const SymbolicConditional &m, const std::string &str="")\n  \n \n static bool Equals (const SymbolicConditional &m1, const SymbolicConditional &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< SymbolicConditional >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05004.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05004.html", "unified_diff": "@@ -324,16 +324,16 @@\n \n \n \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
\n \n \n
\n
    \n
  • gtsam
  • traits< SymbolicEliminationTree >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05012.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05012.html", "unified_diff": "@@ -420,16 +420,16 @@\n

    print only keys

    \n \n

    Reimplemented from gtsam::Factor.

    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • SymbolicFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05016.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05016.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const SymbolicFactor &m, const std::string &str="")\n  \n \n static bool Equals (const SymbolicFactor &m1, const SymbolicFactor &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< SymbolicFactor >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05020.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05020.html", "unified_diff": "@@ -144,15 +144,15 @@\n  \n \n typedef SymbolicJunctionTree JunctionTreeType\n  Type of Junction tree.
    \n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • SymbolicFactorGraph
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05028.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05028.html", "unified_diff": "@@ -127,15 +127,15 @@\n static void Print (const SymbolicFactorGraph &m, const std::string &str="")\n  \n \n static bool Equals (const SymbolicFactorGraph &m1, const SymbolicFactorGraph &m2, double tol=1e-8)\n  \n \n
    The documentation for this struct was generated from the following file:\n
\n \n \n
\n
    \n
  • gtsam
  • traits< SymbolicFactorGraph >
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05032.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05032.html", "unified_diff": "@@ -391,16 +391,16 @@\n  \n \n Roots roots_\n  Root cliques.
    \n  \n \n
    The documentation for this class was generated from the following files:
      \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicISAM.h
    • \n-
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicISAM.cpp
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicISAM.h
    • \n+
    • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicISAM.cpp
    • \n
    \n
\n \n \n
\n
    \n
  • gtsam
  • SymbolicISAM
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05036.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05036.html", "unified_diff": "@@ -328,16 +328,16 @@\n \n \n
    Returns
    The elimination tree
    \n \n
\n \n
The documentation for this class was generated from the following files:\n \n \n \n
\n
    \n
  • gtsam
  • SymbolicJunctionTree
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05040.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05040.html", "unified_diff": "@@ -99,15 +99,15 @@\n
    \n
    DiscreteValues Class Reference
    \n
    \n
    \n

    Detailed Description

    \n

    The Factor::error simply extracts the.

    \n

    The documentation for this class was generated from the following file:\n
    \n
\n \n
\n
    \n
  • DiscreteValues
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05044.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05044.html", "unified_diff": "@@ -99,17 +99,17 @@\n
    \n
    HybridValues Class Reference
    \n
    \n
    \n

    Detailed Description

    \n

    the error.

    \n

    The documentation for this class was generated from the following files:\n
    \n
\n \n
\n
    \n
  • HybridValues
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05060.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05060.html", "unified_diff": "@@ -100,15 +100,15 @@\n
    Only Class Reference
    \n
\n
\n

Detailed Description

\n

symbolic elimination etc.

\n

Derived classes must redefine the Factor and shared_ptr typedefs to refer to the associated factor type and shared_ptr type of the derived class. See SymbolicConditional and GaussianConditional for examples.

\n

The documentation for this class was generated from the following file:
    \n-
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Conditional.h
  • \n+
  • /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Conditional.h
  • \n
\n
\n \n \n
\n
    \n
  • Only
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05064.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05064.html", "unified_diff": "@@ -99,15 +99,15 @@\n
    \n
    JacobianFactor Class Reference
    \n
    \n
    \n

    Detailed Description

    \n

    In Gaussian factors, the error function returns either the negative log-likelihood, e.g., 0.5*(A*x-b)'D(A*x-b) for a negative log-density, e.g., 0.5*(A*x-b)'D(A*x-b) - log(k) for a.

    \n

    The documentation for this class was generated from the following file:\n
    \n
\n \n
\n
    \n
  • JacobianFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05068.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05068.html", "unified_diff": "@@ -99,15 +99,15 @@\n
    \n
    GaussianConditional Class Reference
    \n
    \n
    \n

    Detailed Description

    \n

    is the normalization constant.

    \n

    The documentation for this class was generated from the following file:\n
    \n
\n \n
\n
    \n
  • GaussianConditional
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05072.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05072.html", "unified_diff": "@@ -101,17 +101,17 @@\n
\n
\n

Detailed Description

\n

The Factor::error simply extracts the.

\n

(A*x-b)/sigma

\n

HybridValues simply extracts the error.

\n

The documentation for this class was generated from the following files:\n
\n \n \n
\n
    \n
  • VectorValues
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05076.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05076.html", "unified_diff": "@@ -102,15 +102,15 @@\n
    \n

    Detailed Description

    \n

    In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function of the values in a.

    \n

    The Factor::error simply extracts the.

    \n

    The idea is that Gaussian factors have a quadratic error function that locally approximates the negative log-likelihood, and are obtained by linearizing the nonlinear error function at a given linearization.

    \n

    The derived class,

    \n

    The documentation for this class was generated from the following file:\n
    \n
\n \n
\n
    \n
  • Values
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a05080.html", "source2": "./usr/share/doc/libgtsam-dev/html/a05080.html", "unified_diff": "@@ -102,15 +102,15 @@\n
    \n

    Detailed Description

    \n

    noise model to the factor, and calculates the error by asking the user to implement the method

    \n
    double evaluateError(const Values& c) const
    \n
    In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
    \n

    .

    \n

    The documentation for this class was generated from the following file:\n
    \n
\n \n
\n
    \n
  • NoiseModelFactor
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a08128_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a08128_source.html", "unified_diff": "@@ -114,15 +114,15 @@\n
    7
    \n
    8 * See LICENSE for the license information
    \n
    9
    \n
    10 * -------------------------------------------------------------------------- */
    \n
    11
    \n
    25#pragma once
    \n
    26
    \n-
    27#include <gtsam/base/Matrix.h>
    \n+
    27#include <gtsam/base/Matrix.h>
    \n
    28#include <boost/optional.hpp>
    \n
    29
    \n
    30namespace gtsam {
    \n
    31
    \n
    38template<class POSE>
    \n
    \n \n@@ -150,15 +150,15 @@\n
    \n
    61
    \n
    62} // \\namespace gtsam
    \n
    63
    \n
    74#define GTSAM_CONCEPT_POSE_INST(T) template class gtsam::PoseConcept<T>;
    \n
    75#define GTSAM_CONCEPT_POSE_TYPE(T) using _gtsam_PoseConcept##T = gtsam::PoseConcept<T>;
    \n
    76
    \n-
    typedef and functions to augment Eigen's MatrixXd
    \n+
    typedef and functions to augment Eigen's MatrixXd
    \n
    Global functions in a separate testing namespace.
    Definition chartTesting.h:28
    \n
    Pose Concept A must contain a translation and a rotation, with each structure accessable directly and...
    Definition concepts.h:39
    \n
\n \n \n
\n
\n
346
\n
347} // namespace utilities
\n
348
\n
349}
\n
350
\n-
2D Pose
\n-
The most common 5DOF 3D->2D calibration.
\n-
3D Point
\n-
3D Pose
\n-
Base class for all pinhole cameras.
\n-
2D Point
\n-
Factor Graph Values.
\n-
sampling from a NoiseModel
\n-
Non-linear factor base classes.
\n-
A non-templated config holding any types of Manifold-group elements.
\n-
Factor Graph consisting of non-linear factors.
\n-
Reprojection of a LANDMARK to a 2D point.
\n+
3D Pose
\n+
2D Pose
\n+
Base class for all pinhole cameras.
\n+
3D Point
\n+
The most common 5DOF 3D->2D calibration.
\n+
2D Point
\n+
sampling from a NoiseModel
\n+
Factor Graph Values.
\n+
Non-linear factor base classes.
\n+
Factor Graph consisting of non-linear factors.
\n+
A non-templated config holding any types of Manifold-group elements.
\n+
Reprojection of a LANDMARK to a 2D point.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
Key symbol(unsigned char c, std::uint64_t j)
Create a symbol key from a character and index, i.e.
Definition Symbol.h:135
\n
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -314,36 +314,36 @@\n 344 return world;\n 345}\n 346\n 347} // namespace utilities\n 348\n 349}\n 350\n-_\bP_\bo_\bs_\be_\b2_\b._\bh\n-2D Pose\n-_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n-The most common 5DOF 3D->2D calibration.\n-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\n _\bP_\bo_\bs_\be_\b3_\b._\bh\n 3D Pose\n+_\bP_\bo_\bs_\be_\b2_\b._\bh\n+2D Pose\n _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n Base class for all pinhole cameras.\n+_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+3D Point\n+_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n+The most common 5DOF 3D->2D calibration.\n _\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n 2D Point\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n _\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh\n sampling from a NoiseModel\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Factor Graph consisting of non-linear factors.\n+_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+A non-templated config holding any types of Manifold-group elements.\n _\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Reprojection of a LANDMARK to a 2D point.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a08137_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a08137_source.html", "unified_diff": "@@ -114,16 +114,16 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/base/Testable.h>
\n-
22#include <gtsam/inference/Key.h>
\n+
21#include <gtsam/base/Testable.h>
\n+
22#include <gtsam/inference/Key.h>
\n
23
\n
24#include <boost/serialization/nvp.hpp>
\n
25#include <cstdint>
\n
26#include <functional>
\n
27
\n
28namespace gtsam {
\n
29
\n@@ -268,16 +268,16 @@\n
179 constexpr unsigned char chr() const { return c_; }
\n
180};
\n \n
181
\n
183template<> struct traits<Symbol> : public Testable<Symbol> {};
\n
184
\n
185} // \\ namespace gtsam
\n-
Concept check for values that can be used in unit tests.
\n-\n+
Concept check for values that can be used in unit tests.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
std::uint64_t symbolIndex(Key key)
Return the index portion of a symbol key.
Definition Symbol.h:141
\n
Key symbol(unsigned char c, std::uint64_t j)
Create a symbol key from a character and index, i.e.
Definition Symbol.h:135
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
unsigned char symbolChr(Key key)
Return the character portion of a symbol key.
Definition Symbol.h:138
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a08143_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a08143_source.html", "unified_diff": "@@ -104,16 +104,16 @@\n
\n
expressions.h
\n
\n
\n Go to the documentation of this file.
1
\n
8#pragma once
\n
9
\n-
10#include <gtsam/geometry/Rot3.h>
\n-\n+
10#include <gtsam/geometry/Rot3.h>
\n+\n \n \n
14
\n
15namespace gtsam {
\n
16
\n
17typedef Expression<NavState> NavState_;
\n
18typedef Expression<Velocity3> Velocity3_;
\n@@ -139,16 +139,16 @@\n
38 return Point3_(internal::position, X);
\n
39}
\n
40inline Velocity3_ velocity(const NavState_& X) {
\n
41 return Velocity3_(internal::velocity, X);
\n
42}
\n
43
\n
44} // namespace gtsam
\n-
3D rotation represented as a rotation matrix or quaternion
\n-
Navigation state composing of attitude, position, and velocity.
\n+
3D rotation represented as a rotation matrix or quaternion
\n+
Navigation state composing of attitude, position, and velocity.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
Vector3 Velocity3
Velocity is currently typedef'd to Vector3.
Definition NavState.h:28
\n
Common expressions, both linear and non-linear.
\n
Common expressions for solving geometry/slam/sfm problems.
\n
\n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a08146_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a08146_source.html", "unified_diff": "@@ -104,22 +104,22 @@\n
\n
expressions.h
\n
\n
\n Go to the documentation of this file.
1
\n
8#pragma once
\n
9
\n-\n-
11#include <gtsam/base/Lie.h>
\n+\n+
11#include <gtsam/base/Lie.h>
\n
12
\n
13namespace gtsam {
\n
14
\n
15// Generic between, assumes existence of traits<T>::Between
\n
16template <typename T>
\n-
17Expression<T> between(const Expression<T>& t1, const Expression<T>& t2) {
\n+
17Expression<T> between(const Expression<T>& t1, const Expression<T>& t2) {
\n
18 return Expression<T>(traits<T>::Between, t1, t2);
\n
19}
\n
20
\n
21// Generic compose, assumes existence of traits<T>::Compose
\n
22template <typename T>
\n
23Expression<T> compose(const Expression<T>& t1, const Expression<T>& t2) {
\n
24 return Expression<T>(traits<T>::Compose, t1, t2);
\n@@ -134,17 +134,17 @@\n
33typedef Expression<Vector5> Vector5_;
\n
34typedef Expression<Vector6> Vector6_;
\n
35typedef Expression<Vector7> Vector7_;
\n
36typedef Expression<Vector8> Vector8_;
\n
37typedef Expression<Vector9> Vector9_;
\n
38
\n
39} // \\namespace gtsam
\n-
Base class and basic functions for Lie types.
\n-
T between(const T &t1, const T &t2)
binary functions
Definition lieProxies.h:36
\n-
Expressions for Block Automatic Differentiation.
\n+
Base class and basic functions for Lie types.
\n+
T between(const T &t1, const T &t2)
binary functions
Definition lieProxies.h:36
\n+
Expressions for Block Automatic Differentiation.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
\n \n \n
\n
    \n
  • gtsam
  • nonlinear
  • expressions.h
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a08149_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a08149_source.html", "unified_diff": "@@ -105,20 +105,20 @@\n
    expressions.h
    \n
\n
\n Go to the documentation of this file.
1
\n
8#pragma once
\n
9
\n \n-\n-\n-\n-\n+\n+\n+\n+\n
15#include <gtsam/geometry/OrientedPlane3.h>
\n-\n+\n
17
\n
18namespace gtsam {
\n
19
\n
20// 2D Geometry
\n
21
\n
22typedef Expression<Point2> Point2_;
\n
23typedef Expression<Rot2> Rot2_;
\n@@ -191,23 +191,23 @@\n
90 return Rot3_(internal::rotation, pose);
\n
91}
\n
92
\n
93inline Point3_ translation(const Pose3_& pose) {
\n
94 return Point3_(internal::translation, pose);
\n
95}
\n
96
\n-
97inline Point3_ rotate(const Rot3_& x, const Point3_& p) {
\n+
97inline Point3_ rotate(const Rot3_& x, const Point3_& p) {
\n
98 return Point3_(x, &Rot3::rotate, p);
\n
99}
\n
100
\n
101inline Point3_ point3(const Unit3_& v) {
\n
102 return Point3_(&Unit3::point3, v);
\n
103}
\n
104
\n-
105inline Unit3_ rotate(const Rot3_& x, const Unit3_& p) {
\n+
105inline Unit3_ rotate(const Rot3_& x, const Unit3_& p) {
\n
106 return Unit3_(x, &Rot3::rotate, p);
\n
107}
\n
108
\n
109inline Point3_ unrotate(const Rot3_& x, const Point3_& p) {
\n
110 return Point3_(x, &Rot3::unrotate, p);
\n
111}
\n
112
\n@@ -295,20 +295,20 @@\n
193 const gtsam::Expression<T> &x1, const gtsam::Expression<T> &x2) {
\n \n
195 gtsam::traits<T>::Logmap, between(x1, x2));
\n
196}
\n
\n
197
\n
198} // \\namespace gtsam
\n-
P rotate(const T &r, const P &pt)
rotation functions
Definition lieProxies.h:47
\n-
2D Pose
\n-
The most common 5DOF 3D->2D calibration.
\n-
Base class for all pinhole cameras.
\n-
4 dimensional manifold of 3D lines
\n-
Calibration used by Bundler.
\n+
P rotate(const T &r, const P &pt)
rotation functions
Definition lieProxies.h:47
\n+
2D Pose
\n+
Calibration used by Bundler.
\n+
Base class for all pinhole cameras.
\n+
The most common 5DOF 3D->2D calibration.
\n+
4 dimensional manifold of 3D lines
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
gtsam::Expression< typename gtsam::traits< T >::TangentVector > logmap(const gtsam::Expression< T > &x1, const gtsam::Expression< T > &x2)
logmap
Definition expressions.h:192
\n
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
Point3 cross(const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H1, OptionalJacobian< 3, 3 > H2)
cross product
Definition Point3.cpp:64
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
Line3 transformTo(const Pose3 &wTc, const Line3 &wL, OptionalJacobian< 4, 6 > Dpose, OptionalJacobian< 4, 4 > Dline)
Transform a line from world to camera frame.
Definition Line3.cpp:94
\n
Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)
normalize, with optional Jacobian
Definition Point3.cpp:52
\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -201,22 +201,22 @@\n 198} // \\namespace gtsam\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\be_\bs_\bt_\bi_\bn_\bg_\b:_\b:_\br_\bo_\bt_\ba_\bt_\be\n P rotate(const T &r, const P &pt)\n rotation functions\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn lieProxies.h:47\n _\bP_\bo_\bs_\be_\b2_\b._\bh\n 2D Pose\n-_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n-The most common 5DOF 3D->2D calibration.\n+_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n+Calibration used by Bundler.\n _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n Base class for all pinhole cameras.\n+_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n+The most common 5DOF 3D->2D calibration.\n _\bL_\bi_\bn_\be_\b3_\b._\bh\n 4 dimensional manifold of 3D lines\n-_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n-Calibration used by Bundler.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\bg_\bm_\ba_\bp\n gtsam::Expression< typename gtsam::traits< T >::TangentVector > logmap(const\n gtsam::Expression< T > &x1, const gtsam::Expression< T > &x2)\n logmap\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a08152_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a08152_source.html", "unified_diff": "@@ -114,16 +114,16 @@\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
16#pragma once
\n
17
\n-\n-
19#include <gtsam/base/Testable.h>
\n+\n+
19#include <gtsam/base/Testable.h>
\n
20
\n
21#include <string>
\n
22
\n
23namespace gtsam {
\n
24
\n
29 template<class VALUE>
\n
\n@@ -206,26 +206,26 @@\n
110 boost::serialization::base_object<Base>(*this));
\n
111 ar & BOOST_SERIALIZATION_NVP(prior_);
\n
112 }
\n
113
\n
114 // Alignment, see https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html
\n
115 enum { NeedsToAlign = (sizeof(T) % 16) == 0 };
\n
116 public:
\n-\n+\n
118 };
\n
\n
119
\n
121 template<class VALUE>
\n
122 struct traits<PriorFactor<VALUE> > : public Testable<PriorFactor<VALUE> > {};
\n
123
\n
124
\n
125}
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n-
Concept check for values that can be used in unit tests.
\n-
Non-linear factor base classes.
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n+
Concept check for values that can be used in unit tests.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a08164_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a08164_source.html", "unified_diff": "@@ -115,15 +115,15 @@\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
20#pragma once
\n
21
\n
22#include <gtsam/nonlinear/ExpressionFactor.h>
\n-\n+\n
24#include <boost/concept/assert.hpp>
\n
25
\n
26namespace gtsam {
\n
27
\n
32template <typename A1, typename A2,
\n
33 typename B = typename Bearing<A1, A2>::result_type,
\n
34 typename R = typename Range<A1, A2>::result_type>
\n@@ -206,15 +206,15 @@\n
107template <typename A1, typename A2, typename B, typename R>
\n
\n
108struct traits<BearingRangeFactor<A1, A2, B, R> >
\n
109 : public Testable<BearingRangeFactor<A1, A2, B, R> > {};
\n
\n
110
\n
111} // namespace gtsam
\n-
Bearing-Range product.
\n+
Bearing-Range product.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
GenericValue< T > genericValue(const T &v)
Functional constructor of GenericValue<T> so T can be automatically deduced.
Definition GenericValue.h:212
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_0e8eb460b7f775f5eda250a12ea9d76a.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_0e8eb460b7f775f5eda250a12ea9d76a.html", "unified_diff": "@@ -99,45 +99,45 @@\n
\n
symbolic Directory Reference
\n
\n \n
\n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_0e8eb460b7f775f5eda250a12ea9d76a.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_0e8eb460b7f775f5eda250a12ea9d76a.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,18 +1,18 @@\n var dir_0e8eb460b7f775f5eda250a12ea9d76a = [\n- [\"SymbolicBayesNet.cpp\", \"a01391.html\", null],\n- [\"SymbolicBayesNet.h\", \"a01382.html\", \"a01382\"],\n- [\"SymbolicBayesTree.h\", \"a01346.html\", \"a01346\"],\n- [\"SymbolicConditional.cpp\", \"a01358.html\", null],\n- [\"SymbolicConditional.h\", \"a01367.html\", \"a01367\"],\n- [\"SymbolicEliminationTree.cpp\", \"a01388.html\", null],\n- [\"SymbolicEliminationTree.h\", \"a01349.html\", \"a01349\"],\n- [\"SymbolicFactor-inst.h\", \"a01376.html\", \"a01376\"],\n- [\"SymbolicFactor.cpp\", \"a01355.html\", \"a01355\"],\n- [\"SymbolicFactor.h\", \"a01370.html\", \"a01370\"],\n- [\"SymbolicFactorGraph.cpp\", \"a01352.html\", null],\n- [\"SymbolicFactorGraph.h\", \"a01385.html\", \"a01385\"],\n- [\"SymbolicISAM.cpp\", \"a01379.html\", null],\n- [\"SymbolicISAM.h\", \"a01361.html\", \"a01361\"],\n- [\"SymbolicJunctionTree.cpp\", \"a01373.html\", null],\n- [\"SymbolicJunctionTree.h\", \"a01343.html\", \"a01343\"]\n+ [\"SymbolicBayesNet.cpp\", \"a01385.html\", null],\n+ [\"SymbolicBayesNet.h\", \"a01373.html\", \"a01373\"],\n+ [\"SymbolicBayesTree.h\", \"a01364.html\", \"a01364\"],\n+ [\"SymbolicConditional.cpp\", \"a01355.html\", null],\n+ [\"SymbolicConditional.h\", \"a01370.html\", \"a01370\"],\n+ [\"SymbolicEliminationTree.cpp\", \"a01349.html\", null],\n+ [\"SymbolicEliminationTree.h\", \"a01388.html\", \"a01388\"],\n+ [\"SymbolicFactor-inst.h\", \"a01361.html\", \"a01361\"],\n+ [\"SymbolicFactor.cpp\", \"a01376.html\", \"a01376\"],\n+ [\"SymbolicFactor.h\", \"a01379.html\", \"a01379\"],\n+ [\"SymbolicFactorGraph.cpp\", \"a01343.html\", null],\n+ [\"SymbolicFactorGraph.h\", \"a01367.html\", \"a01367\"],\n+ [\"SymbolicISAM.cpp\", \"a01346.html\", null],\n+ [\"SymbolicISAM.h\", \"a01358.html\", \"a01358\"],\n+ [\"SymbolicJunctionTree.cpp\", \"a01391.html\", null],\n+ [\"SymbolicJunctionTree.h\", \"a01382.html\", \"a01382\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_169eaf73225633059c1416b195c6cb0d.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_169eaf73225633059c1416b195c6cb0d.html", "unified_diff": "@@ -99,122 +99,122 @@\n
    \n
    inference Directory Reference
    \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 \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 \n

    \n Files

     BayesNet-inst.h
     BayesNet-inst.h
     
     BayesNet.h
     Bayes network.
     BayesNet.h
     Bayes network.
     
     BayesTree-inst.h
     Bayes Tree is a tree of cliques of a Bayes Chain.
     BayesTree-inst.h
     Bayes Tree is a tree of cliques of a Bayes Chain.
     
     BayesTree.cpp
     Bayes Tree is a tree of cliques of a Bayes Chain.
     BayesTree.cpp
     Bayes Tree is a tree of cliques of a Bayes Chain.
     
     BayesTree.h
     Bayes Tree is a tree of cliques of a Bayes Chain.
     BayesTree.h
     Bayes Tree is a tree of cliques of a Bayes Chain.
     
     BayesTreeCliqueBase-inst.h
     Base class for cliques of a BayesTree.
     
     BayesTreeCliqueBase.h
     Base class for cliques of a BayesTree.
     BayesTreeCliqueBase.h
     Base class for cliques of a BayesTree.
     
     ClusterTree-inst.h
     Collects factorgraph fragments defined on variable clusters, arranged in a tree.
     ClusterTree-inst.h
     Collects factorgraph fragments defined on variable clusters, arranged in a tree.
     
     ClusterTree.h
     Collects factorgraph fragments defined on variable clusters, arranged in a tree.
     ClusterTree.h
     Collects factorgraph fragments defined on variable clusters, arranged in a tree.
     
     Conditional-inst.h
     Conditional-inst.h
     
     Conditional.h
     Base class for conditional densities.
     Conditional.h
     Base class for conditional densities.
     
     DotWriter.cpp
     Graphviz formatting for factor graphs.
     DotWriter.cpp
     Graphviz formatting for factor graphs.
     
     DotWriter.h
     Graphviz formatter.
     DotWriter.h
     Graphviz formatter.
     
     EliminateableFactorGraph-inst.h
     EliminateableFactorGraph-inst.h
     
     EliminateableFactorGraph.h
     Variable elimination algorithms for factor graphs.
     EliminateableFactorGraph.h
     Variable elimination algorithms for factor graphs.
     
     EliminationTree-inst.h
     EliminationTree-inst.h
     
     EliminationTree.h
     EliminationTree.h
     
     Factor.cpp
     The base class for all factors.
     Factor.cpp
     The base class for all factors.
     
     Factor.h
     The base class for all factors.
     Factor.h
     The base class for all factors.
     
     FactorGraph-inst.h
     Factor Graph Base Class.
     FactorGraph-inst.h
     Factor Graph Base Class.
     
     FactorGraph.h
     Factor Graph Base Class.
     FactorGraph.h
     Factor Graph Base Class.
     
     graph-inl.h
     graph-inl.h
     
     graph.h
     Graph algorithm using boost library.
     graph.h
     Graph algorithm using boost library.
     
     inference-inst.h
     Contains generic inference algorithms that convert between templated graphical models, i.e., factor graphs, Bayes nets, and Bayes trees.
     inference-inst.h
     Contains generic inference algorithms that convert between templated graphical models, i.e., factor graphs, Bayes nets, and Bayes trees.
     
     inferenceExceptions.h
     Exceptions that may be thrown by inference algorithms.
     inferenceExceptions.h
     Exceptions that may be thrown by inference algorithms.
     
     ISAM-inst.h
     Incremental update functionality (iSAM) for BayesTree.
     ISAM-inst.h
     Incremental update functionality (iSAM) for BayesTree.
     
     ISAM.h
     Incremental update functionality (iSAM) for BayesTree.
     ISAM.h
     Incremental update functionality (iSAM) for BayesTree.
     
     JunctionTree-inst.h
     The junction tree, template bodies.
     
     JunctionTree.h
     The junction tree.
     JunctionTree.h
     The junction tree.
     
     Key.h
     Key.h
     
     LabeledSymbol.h
     LabeledSymbol.h
     
     MetisIndex-inl.h
     MetisIndex-inl.h
     
     MetisIndex.h
     MetisIndex.h
     
     Ordering.cpp
     Ordering.cpp
     
     Ordering.h
     Variable ordering for the elimination algorithm.
     Ordering.h
     Variable ordering for the elimination algorithm.
     
     Symbol.cpp
     Symbol.cpp
     
     Symbol.h
     
     VariableIndex-inl.h
     VariableIndex-inl.h
     
     VariableIndex.cpp
     VariableIndex.cpp
     
     VariableIndex.h
     
     VariableSlots.cpp
     VariableSlots.cpp
     
     VariableSlots.h
     VariableSlots describes the structure of a combined factor in terms of where each block comes from in the source factors.
     VariableSlots.h
     VariableSlots describes the structure of a combined factor in terms of where each block comes from in the source factors.
     
    \n
    \n
\n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_169eaf73225633059c1416b195c6cb0d.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_169eaf73225633059c1416b195c6cb0d.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,44 +1,44 @@\n var dir_169eaf73225633059c1416b195c6cb0d = [\n- [\"BayesNet-inst.h\", \"a00698_source.html\", null],\n- [\"BayesNet.h\", \"a00689.html\", null],\n- [\"BayesTree-inst.h\", \"a00659.html\", null],\n- [\"BayesTree.cpp\", \"a00653.html\", null],\n- [\"BayesTree.h\", \"a00695.html\", \"a00695\"],\n+ [\"BayesNet-inst.h\", \"a00611_source.html\", null],\n+ [\"BayesNet.h\", \"a00614.html\", null],\n+ [\"BayesTree-inst.h\", \"a00698.html\", null],\n+ [\"BayesTree.cpp\", \"a00632.html\", null],\n+ [\"BayesTree.h\", \"a00593.html\", \"a00593\"],\n [\"BayesTreeCliqueBase-inst.h\", \"a00578.html\", null],\n- [\"BayesTreeCliqueBase.h\", \"a00602.html\", \"a00602\"],\n- [\"ClusterTree-inst.h\", \"a00629.html\", \"a00629\"],\n- [\"ClusterTree.h\", \"a00608.html\", \"a00608\"],\n- [\"Conditional-inst.h\", \"a00677_source.html\", null],\n- [\"Conditional.h\", \"a00680.html\", \"a00680\"],\n- [\"DotWriter.cpp\", \"a00572.html\", null],\n- [\"DotWriter.h\", \"a00686.html\", null],\n- [\"EliminateableFactorGraph-inst.h\", \"a00638_source.html\", null],\n- [\"EliminateableFactorGraph.h\", \"a00623.html\", \"a00623\"],\n- [\"EliminationTree-inst.h\", \"a00587.html\", null],\n- [\"EliminationTree.h\", \"a00641.html\", \"a00641\"],\n- [\"Factor.cpp\", \"a00614.html\", null],\n- [\"Factor.h\", \"a00593.html\", \"a00593\"],\n- [\"FactorGraph-inst.h\", \"a00683.html\", null],\n- [\"FactorGraph.h\", \"a00575.html\", \"a00575\"],\n- [\"graph-inl.h\", \"a00656_source.html\", null],\n- [\"graph.h\", \"a00596.html\", \"a00596\"],\n- [\"inference-inst.h\", \"a00620.html\", \"a00620\"],\n- [\"inferenceExceptions.h\", \"a00650.html\", \"a00650\"],\n- [\"ISAM-inst.h\", \"a00644.html\", null],\n- [\"ISAM.h\", \"a00647.html\", \"a00647\"],\n+ [\"BayesTreeCliqueBase.h\", \"a00662.html\", \"a00662\"],\n+ [\"ClusterTree-inst.h\", \"a00623.html\", \"a00623\"],\n+ [\"ClusterTree.h\", \"a00686.html\", \"a00686\"],\n+ [\"Conditional-inst.h\", \"a00644_source.html\", null],\n+ [\"Conditional.h\", \"a00650.html\", \"a00650\"],\n+ [\"DotWriter.cpp\", \"a00599.html\", null],\n+ [\"DotWriter.h\", \"a00581.html\", null],\n+ [\"EliminateableFactorGraph-inst.h\", \"a00695_source.html\", null],\n+ [\"EliminateableFactorGraph.h\", \"a00590.html\", \"a00590\"],\n+ [\"EliminationTree-inst.h\", \"a00665.html\", null],\n+ [\"EliminationTree.h\", \"a00653.html\", \"a00653\"],\n+ [\"Factor.cpp\", \"a00668.html\", null],\n+ [\"Factor.h\", \"a00647.html\", \"a00647\"],\n+ [\"FactorGraph-inst.h\", \"a00572.html\", null],\n+ [\"FactorGraph.h\", \"a00659.html\", \"a00659\"],\n+ [\"graph-inl.h\", \"a00683_source.html\", null],\n+ [\"graph.h\", \"a00656.html\", \"a00656\"],\n+ [\"inference-inst.h\", \"a00617.html\", \"a00617\"],\n+ [\"inferenceExceptions.h\", \"a00629.html\", \"a00629\"],\n+ [\"ISAM-inst.h\", \"a00692.html\", null],\n+ [\"ISAM.h\", \"a00638.html\", \"a00638\"],\n [\"JunctionTree-inst.h\", \"a00701.html\", \"a00701\"],\n- [\"JunctionTree.h\", \"a00665.html\", null],\n- [\"Key.h\", \"a00662.html\", \"a00662\"],\n- [\"LabeledSymbol.h\", \"a00599.html\", \"a00599\"],\n- [\"MetisIndex-inl.h\", \"a00632.html\", null],\n- [\"MetisIndex.h\", \"a00617.html\", \"a00617\"],\n- [\"Ordering.cpp\", \"a00581.html\", null],\n- [\"Ordering.h\", \"a00674.html\", \"a00674\"],\n- [\"Symbol.cpp\", \"a00590.html\", null],\n+ [\"JunctionTree.h\", \"a00677.html\", null],\n+ [\"Key.h\", \"a00635.html\", \"a00635\"],\n+ [\"LabeledSymbol.h\", \"a00641.html\", \"a00641\"],\n+ [\"MetisIndex-inl.h\", \"a00620.html\", null],\n+ [\"MetisIndex.h\", \"a00674.html\", \"a00674\"],\n+ [\"Ordering.cpp\", \"a00689.html\", null],\n+ [\"Ordering.h\", \"a00587.html\", \"a00587\"],\n+ [\"Symbol.cpp\", \"a00671.html\", null],\n [\"Symbol.h\", \"a08137.html\", \"a08137\"],\n- [\"VariableIndex-inl.h\", \"a00611.html\", null],\n- [\"VariableIndex.cpp\", \"a00635.html\", null],\n+ [\"VariableIndex-inl.h\", \"a00602.html\", null],\n+ [\"VariableIndex.cpp\", \"a00575.html\", null],\n [\"VariableIndex.h\", \"a00626.html\", \"a00626\"],\n- [\"VariableSlots.cpp\", \"a00692.html\", null],\n- [\"VariableSlots.h\", \"a00671.html\", \"a00671\"]\n+ [\"VariableSlots.cpp\", \"a00608.html\", null],\n+ [\"VariableSlots.h\", \"a00596.html\", \"a00596\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_20686f9fbb87ff6485e15cdc5f2b7011.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_20686f9fbb87ff6485e15cdc5f2b7011.html", "unified_diff": "@@ -99,86 +99,86 @@\n
    \n
    discrete Directory Reference
    \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-\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 Files

     AlgebraicDecisionTree.cpp
     AlgebraicDecisionTree.cpp
     
     AlgebraicDecisionTree.h
     Algebraic Decision Trees.
     AlgebraicDecisionTree.h
     Algebraic Decision Trees.
     
     Assignment.h
     An assignment from labels to a discrete value index (size_t)
     Assignment.h
     An assignment from labels to a discrete value index (size_t)
     
     DecisionTree-inl.h
     DecisionTree-inl.h
     
     DecisionTree.h
     Decision Tree for use in DiscreteFactors.
     DecisionTree.h
     Decision Tree for use in DiscreteFactors.
     
     DecisionTreeFactor.cpp
     discrete factor
     DecisionTreeFactor.cpp
     discrete factor
     
     DecisionTreeFactor.h
     DecisionTreeFactor.h
     
     DiscreteBayesNet.cpp
     DiscreteBayesNet.cpp
     
     DiscreteBayesNet.h
     DiscreteBayesNet.h
     
     DiscreteBayesTree.cpp
     Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.
     DiscreteBayesTree.cpp
     Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.
     
     DiscreteBayesTree.h
     Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.
     DiscreteBayesTree.h
     Discrete Bayes Tree, the result of eliminating a DiscreteJunctionTree.
     
     DiscreteConditional.cpp
     DiscreteConditional.cpp
     
     DiscreteConditional.h
     DiscreteConditional.h
     
     DiscreteDistribution.cpp
     DiscreteDistribution.cpp
     
     DiscreteDistribution.h
     DiscreteDistribution.h
     
     DiscreteEliminationTree.cpp
     DiscreteEliminationTree.cpp
     
     DiscreteEliminationTree.h
     DiscreteEliminationTree.h
     
     DiscreteFactor.cpp
     discrete factor
     DiscreteFactor.cpp
     discrete factor
     
     DiscreteFactor.h
     DiscreteFactor.h
     
     DiscreteFactorGraph.cpp
     DiscreteFactorGraph.cpp
     
     DiscreteFactorGraph.h
     DiscreteFactorGraph.h
     
     DiscreteJunctionTree.cpp
     
     DiscreteJunctionTree.h
     DiscreteJunctionTree.h
     
     DiscreteKey.h
     specialized key for discrete variables
     DiscreteKey.h
     specialized key for discrete variables
     
     DiscreteLookupDAG.cpp
     DiscreteLookupDAG.cpp
     
     DiscreteLookupDAG.h
     DiscreteLookupDAG.h
     
     DiscreteMarginals.h
     A class for computing marginals in a DiscreteFactorGraph.
     DiscreteMarginals.h
     A class for computing marginals in a DiscreteFactorGraph.
     
     DiscreteValues.cpp
     DiscreteValues.cpp
     
     DiscreteValues.h
     DiscreteValues.h
     
     Signature.cpp
     signatures for conditional densities
     Signature.cpp
     signatures for conditional densities
     
     Signature.h
     signatures for conditional densities
     Signature.h
     signatures for conditional densities
     
    \n
    \n
\n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_20686f9fbb87ff6485e15cdc5f2b7011.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_20686f9fbb87ff6485e15cdc5f2b7011.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,33 +1,33 @@\n var dir_20686f9fbb87ff6485e15cdc5f2b7011 = [\n- [\"AlgebraicDecisionTree.cpp\", \"a00194.html\", null],\n- [\"AlgebraicDecisionTree.h\", \"a00224.html\", \"a00224\"],\n- [\"Assignment.h\", \"a00218.html\", null],\n- [\"DecisionTree-inl.h\", \"a00233_source.html\", null],\n- [\"DecisionTree.h\", \"a00239.html\", \"a00239\"],\n- [\"DecisionTreeFactor.cpp\", \"a00272.html\", null],\n- [\"DecisionTreeFactor.h\", \"a00227.html\", \"a00227\"],\n- [\"DiscreteBayesNet.cpp\", \"a00269.html\", null],\n- [\"DiscreteBayesNet.h\", \"a00197.html\", \"a00197\"],\n- [\"DiscreteBayesTree.cpp\", \"a00200.html\", null],\n- [\"DiscreteBayesTree.h\", \"a00266.html\", \"a00266\"],\n- [\"DiscreteConditional.cpp\", \"a00212.html\", null],\n- [\"DiscreteConditional.h\", \"a00260.html\", \"a00260\"],\n- [\"DiscreteDistribution.cpp\", \"a00236.html\", null],\n- [\"DiscreteDistribution.h\", \"a00242.html\", \"a00242\"],\n- [\"DiscreteEliminationTree.cpp\", \"a00203.html\", null],\n- [\"DiscreteEliminationTree.h\", \"a00251.html\", null],\n- [\"DiscreteFactor.cpp\", \"a00257.html\", \"a00257\"],\n- [\"DiscreteFactor.h\", \"a00188.html\", \"a00188\"],\n- [\"DiscreteFactorGraph.cpp\", \"a00254.html\", \"a00254\"],\n- [\"DiscreteFactorGraph.h\", \"a00230.html\", \"a00230\"],\n+ [\"AlgebraicDecisionTree.cpp\", \"a00263.html\", null],\n+ [\"AlgebraicDecisionTree.h\", \"a00233.html\", \"a00233\"],\n+ [\"Assignment.h\", \"a00248.html\", null],\n+ [\"DecisionTree-inl.h\", \"a00185_source.html\", null],\n+ [\"DecisionTree.h\", \"a00179.html\", \"a00179\"],\n+ [\"DecisionTreeFactor.cpp\", \"a00182.html\", null],\n+ [\"DecisionTreeFactor.h\", \"a00188.html\", \"a00188\"],\n+ [\"DiscreteBayesNet.cpp\", \"a00218.html\", null],\n+ [\"DiscreteBayesNet.h\", \"a00200.html\", \"a00200\"],\n+ [\"DiscreteBayesTree.cpp\", \"a00245.html\", null],\n+ [\"DiscreteBayesTree.h\", \"a00227.html\", \"a00227\"],\n+ [\"DiscreteConditional.cpp\", \"a00230.html\", null],\n+ [\"DiscreteConditional.h\", \"a00257.html\", \"a00257\"],\n+ [\"DiscreteDistribution.cpp\", \"a00212.html\", null],\n+ [\"DiscreteDistribution.h\", \"a00251.html\", \"a00251\"],\n+ [\"DiscreteEliminationTree.cpp\", \"a00224.html\", null],\n+ [\"DiscreteEliminationTree.h\", \"a00269.html\", null],\n+ [\"DiscreteFactor.cpp\", \"a00266.html\", \"a00266\"],\n+ [\"DiscreteFactor.h\", \"a00242.html\", \"a00242\"],\n+ [\"DiscreteFactorGraph.cpp\", \"a00236.html\", \"a00236\"],\n+ [\"DiscreteFactorGraph.h\", \"a00197.html\", \"a00197\"],\n [\"DiscreteJunctionTree.cpp\", \"a00215.html\", null],\n- [\"DiscreteJunctionTree.h\", \"a00179.html\", \"a00179\"],\n- [\"DiscreteKey.h\", \"a00221.html\", \"a00221\"],\n- [\"DiscreteLookupDAG.cpp\", \"a00209.html\", null],\n- [\"DiscreteLookupDAG.h\", \"a00245.html\", \"a00245\"],\n- [\"DiscreteMarginals.h\", \"a00206.html\", null],\n- [\"DiscreteValues.cpp\", \"a00185.html\", \"a00185\"],\n- [\"DiscreteValues.h\", \"a00191.html\", \"a00191\"],\n- [\"Signature.cpp\", \"a00182.html\", \"a00182\"],\n- [\"Signature.h\", \"a00248.html\", \"a00248\"]\n+ [\"DiscreteJunctionTree.h\", \"a00206.html\", \"a00206\"],\n+ [\"DiscreteKey.h\", \"a00272.html\", \"a00272\"],\n+ [\"DiscreteLookupDAG.cpp\", \"a00203.html\", null],\n+ [\"DiscreteLookupDAG.h\", \"a00194.html\", \"a00194\"],\n+ [\"DiscreteMarginals.h\", \"a00221.html\", null],\n+ [\"DiscreteValues.cpp\", \"a00260.html\", \"a00260\"],\n+ [\"DiscreteValues.h\", \"a00254.html\", \"a00254\"],\n+ [\"Signature.cpp\", \"a00209.html\", \"a00209\"],\n+ [\"Signature.h\", \"a00191.html\", \"a00191\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_323e70a1eef083399c870cf8a6035771.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_323e70a1eef083399c870cf8a6035771.html", "unified_diff": "@@ -99,111 +99,111 @@\n
    \n
    slam Directory Reference
    \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+\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 Files

     AntiFactor.h
     AntiFactor.h
     
     BearingFactor.h
     
     BearingRangeFactor.h
     
     BetweenFactor.h
     BetweenFactor.h
     
     BoundingConstraint.h
     Provides partially implemented constraints to implement bounds.
     BoundingConstraint.h
     Provides partially implemented constraints to implement bounds.
     
     dataset.cpp
     utility functions for loading datasets
     dataset.cpp
     utility functions for loading datasets
     
     dataset.h
     utility functions for loading datasets
     dataset.h
     utility functions for loading datasets
     
     EssentialMatrixConstraint.cpp
     EssentialMatrixConstraint.cpp
     
     EssentialMatrixConstraint.h
     EssentialMatrixConstraint.h
     
     EssentialMatrixFactor.h
     EssentialMatrixFactor.h
     
     expressions.h
     Common expressions for solving geometry/slam/sfm problems.
     
     FrobeniusFactor.cpp
     Various factors that minimize some Frobenius norm.
     FrobeniusFactor.cpp
     Various factors that minimize some Frobenius norm.
     
     FrobeniusFactor.h
     Various factors that minimize some Frobenius norm.
     FrobeniusFactor.h
     Various factors that minimize some Frobenius norm.
     
     GeneralSFMFactor.h
     a general SFM factor with an unknown calibration
     GeneralSFMFactor.h
     a general SFM factor with an unknown calibration
     
     InitializePose.h
     common code between lago.* (2D) and InitializePose3.* (3D)
     InitializePose.h
     common code between lago.* (2D) and InitializePose3.* (3D)
     
     InitializePose3.cpp
     InitializePose3.cpp
     
     InitializePose3.h
     Initialize Pose3 in a factor graph.
     InitializePose3.h
     Initialize Pose3 in a factor graph.
     
     JacobianFactorQ.h
     JacobianFactorQ.h
     
     JacobianFactorQR.h
     JacobianFactorQR.h
     
     JacobianFactorSVD.h
     JacobianFactorSVD.h
     
     KarcherMeanFactor-inl.h
     KarcherMeanFactor-inl.h
     
     KarcherMeanFactor.h
     KarcherMeanFactor.h
     
     lago.h
     Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph Optimization).
     lago.h
     Initialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph Optimization).
     
     OrientedPlane3Factor.h
     OrientedPlane3Factor.h
     
     PoseRotationPrior.h
     Implements a prior on the rotation component of a pose.
     PoseRotationPrior.h
     Implements a prior on the rotation component of a pose.
     
     PoseTranslationPrior.h
     Implements a prior on the translation component of a pose.
     PoseTranslationPrior.h
     Implements a prior on the translation component of a pose.
     
     PriorFactor.h
     
     ProjectionFactor.h
     Reprojection of a LANDMARK to a 2D point.
     ProjectionFactor.h
     Reprojection of a LANDMARK to a 2D point.
     
     RangeFactor.h
     
     ReferenceFrameFactor.h
     
     RegularImplicitSchurFactor.h
     A subclass of GaussianFactor specialized to structureless SFM.
     RegularImplicitSchurFactor.h
     A subclass of GaussianFactor specialized to structureless SFM.
     
     RotateFactor.h
     RotateFactor.h
     
     SmartFactorBase.h
     Base class to create smart factors on poses or cameras.
     SmartFactorBase.h
     Base class to create smart factors on poses or cameras.
     
     SmartFactorParams.h
     Collect common parameters for SmartProjection and SmartStereoProjection factors.
     SmartFactorParams.h
     Collect common parameters for SmartProjection and SmartStereoProjection factors.
     
     SmartProjectionFactor.h
     Smart factor on cameras (pose + calibration)
     SmartProjectionFactor.h
     Smart factor on cameras (pose + calibration)
     
     SmartProjectionPoseFactor.h
     Smart factor on poses, assuming camera calibration is fixed.
     SmartProjectionPoseFactor.h
     Smart factor on poses, assuming camera calibration is fixed.
     
     SmartProjectionRigFactor.h
     Smart factor on poses, assuming camera calibration is fixed.
     SmartProjectionRigFactor.h
     Smart factor on poses, assuming camera calibration is fixed.
     
     StereoFactor.h
     A non-linear factor for stereo measurements.
     StereoFactor.h
     A non-linear factor for stereo measurements.
     
     TriangulationFactor.h
     TriangulationFactor.h
     
    \n
    \n
\n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_323e70a1eef083399c870cf8a6035771.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_323e70a1eef083399c870cf8a6035771.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,41 +1,41 @@\n var dir_323e70a1eef083399c870cf8a6035771 = [\n- [\"AntiFactor.h\", \"a01337.html\", null],\n+ [\"AntiFactor.h\", \"a01274.html\", null],\n [\"BearingFactor.h\", \"a08161_source.html\", null],\n [\"BearingRangeFactor.h\", \"a08167_source.html\", null],\n- [\"BetweenFactor.h\", \"a01319.html\", \"a01319\"],\n- [\"BoundingConstraint.h\", \"a01334.html\", \"a01334\"],\n- [\"dataset.cpp\", \"a01265.html\", \"a01265\"],\n- [\"dataset.h\", \"a01259.html\", \"a01259\"],\n- [\"EssentialMatrixConstraint.cpp\", \"a01253.html\", null],\n- [\"EssentialMatrixConstraint.h\", \"a01244.html\", null],\n- [\"EssentialMatrixFactor.h\", \"a01310_source.html\", null],\n+ [\"BetweenFactor.h\", \"a01322.html\", \"a01322\"],\n+ [\"BoundingConstraint.h\", \"a01331.html\", \"a01331\"],\n+ [\"dataset.cpp\", \"a01262.html\", \"a01262\"],\n+ [\"dataset.h\", \"a01283.html\", \"a01283\"],\n+ [\"EssentialMatrixConstraint.cpp\", \"a01235.html\", null],\n+ [\"EssentialMatrixConstraint.h\", \"a01298.html\", null],\n+ [\"EssentialMatrixFactor.h\", \"a01268_source.html\", null],\n [\"expressions.h\", \"a08149.html\", \"a08149\"],\n- [\"FrobeniusFactor.cpp\", \"a01325.html\", \"a01325\"],\n- [\"FrobeniusFactor.h\", \"a01280.html\", \"a01280\"],\n- [\"GeneralSFMFactor.h\", \"a01292.html\", \"a01292\"],\n- [\"InitializePose.h\", \"a01301.html\", null],\n- [\"InitializePose3.cpp\", \"a01340.html\", null],\n- [\"InitializePose3.h\", \"a01304.html\", \"a01304\"],\n- [\"JacobianFactorQ.h\", \"a01322_source.html\", null],\n- [\"JacobianFactorQR.h\", \"a01289_source.html\", null],\n- [\"JacobianFactorSVD.h\", \"a01328_source.html\", null],\n- [\"KarcherMeanFactor-inl.h\", \"a01235_source.html\", null],\n- [\"KarcherMeanFactor.h\", \"a01247_source.html\", null],\n- [\"lago.h\", \"a01262.html\", null],\n- [\"OrientedPlane3Factor.h\", \"a01295_source.html\", null],\n- [\"PoseRotationPrior.h\", \"a01274.html\", \"a01274\"],\n- [\"PoseTranslationPrior.h\", \"a01271.html\", \"a01271\"],\n+ [\"FrobeniusFactor.cpp\", \"a01319.html\", \"a01319\"],\n+ [\"FrobeniusFactor.h\", \"a01325.html\", \"a01325\"],\n+ [\"GeneralSFMFactor.h\", \"a01334.html\", \"a01334\"],\n+ [\"InitializePose.h\", \"a01280.html\", null],\n+ [\"InitializePose3.cpp\", \"a01304.html\", null],\n+ [\"InitializePose3.h\", \"a01238.html\", \"a01238\"],\n+ [\"JacobianFactorQ.h\", \"a01259_source.html\", null],\n+ [\"JacobianFactorQR.h\", \"a01244_source.html\", null],\n+ [\"JacobianFactorSVD.h\", \"a01265_source.html\", null],\n+ [\"KarcherMeanFactor-inl.h\", \"a01340_source.html\", null],\n+ [\"KarcherMeanFactor.h\", \"a01286_source.html\", null],\n+ [\"lago.h\", \"a01277.html\", null],\n+ [\"OrientedPlane3Factor.h\", \"a01313_source.html\", null],\n+ [\"PoseRotationPrior.h\", \"a01307.html\", \"a01307\"],\n+ [\"PoseTranslationPrior.h\", \"a01301.html\", \"a01301\"],\n [\"PriorFactor.h\", \"a08155.html\", null],\n- [\"ProjectionFactor.h\", \"a01283.html\", \"a01283\"],\n+ [\"ProjectionFactor.h\", \"a01337.html\", \"a01337\"],\n [\"RangeFactor.h\", \"a08173_source.html\", null],\n [\"ReferenceFrameFactor.h\", \"a01256_source.html\", null],\n- [\"RegularImplicitSchurFactor.h\", \"a01286.html\", \"a01286\"],\n- [\"RotateFactor.h\", \"a01268_source.html\", null],\n- [\"SmartFactorBase.h\", \"a01316.html\", \"a01316\"],\n- [\"SmartFactorParams.h\", \"a01298.html\", \"a01298\"],\n- [\"SmartProjectionFactor.h\", \"a01331.html\", \"a01331\"],\n- [\"SmartProjectionPoseFactor.h\", \"a01277.html\", \"a01277\"],\n- [\"SmartProjectionRigFactor.h\", \"a01307.html\", \"a01307\"],\n- [\"StereoFactor.h\", \"a01250.html\", \"a01250\"],\n- [\"TriangulationFactor.h\", \"a01241_source.html\", null]\n+ [\"RegularImplicitSchurFactor.h\", \"a01328.html\", \"a01328\"],\n+ [\"RotateFactor.h\", \"a01250_source.html\", null],\n+ [\"SmartFactorBase.h\", \"a01241.html\", \"a01241\"],\n+ [\"SmartFactorParams.h\", \"a01295.html\", \"a01295\"],\n+ [\"SmartProjectionFactor.h\", \"a01271.html\", \"a01271\"],\n+ [\"SmartProjectionPoseFactor.h\", \"a01289.html\", \"a01289\"],\n+ [\"SmartProjectionRigFactor.h\", \"a01292.html\", \"a01292\"],\n+ [\"StereoFactor.h\", \"a01316.html\", \"a01316\"],\n+ [\"TriangulationFactor.h\", \"a01253_source.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_56c2e1a1204958ddcb066d7d52d67173.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_56c2e1a1204958ddcb066d7d52d67173.html", "unified_diff": "@@ -99,88 +99,88 @@\n
    \n
    hybrid Directory Reference
    \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+\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 Files

     GaussianMixture.cpp
     A hybrid conditional in the Conditional Linear Gaussian scheme.
     GaussianMixture.cpp
     A hybrid conditional in the Conditional Linear Gaussian scheme.
     
     GaussianMixture.h
     A hybrid conditional in the Conditional Linear Gaussian scheme.
     GaussianMixture.h
     A hybrid conditional in the Conditional Linear Gaussian scheme.
     
     GaussianMixtureFactor.cpp
     A set of Gaussian factors indexed by a set of discrete keys.
     GaussianMixtureFactor.cpp
     A set of Gaussian factors indexed by a set of discrete keys.
     
     GaussianMixtureFactor.h
     A set of GaussianFactors, indexed by a set of discrete keys.
     GaussianMixtureFactor.h
     A set of GaussianFactors, indexed by a set of discrete keys.
     
     HybridBayesNet.cpp
     A Bayes net of Gaussian Conditionals indexed by discrete keys.
     HybridBayesNet.cpp
     A Bayes net of Gaussian Conditionals indexed by discrete keys.
     
     HybridBayesNet.h
     A Bayes net of Gaussian Conditionals indexed by discrete keys.
     HybridBayesNet.h
     A Bayes net of Gaussian Conditionals indexed by discrete keys.
     
     HybridBayesTree.cpp
     Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
     HybridBayesTree.cpp
     Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
     
     HybridBayesTree.h
     Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
     HybridBayesTree.h
     Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
     
     HybridConditional.cpp
     HybridConditional.cpp
     
     HybridConditional.h
     HybridConditional.h
     
     HybridEliminationTree.cpp
     HybridEliminationTree.cpp
     
     HybridEliminationTree.h
     HybridEliminationTree.h
     
     HybridFactor.cpp
     HybridFactor.cpp
     
     HybridFactor.h
     HybridFactor.h
     
     HybridFactorGraph.cpp
     Factor graph with utilities for hybrid factors.
     HybridFactorGraph.cpp
     Factor graph with utilities for hybrid factors.
     
     HybridFactorGraph.h
     Factor graph with utilities for hybrid factors.
     HybridFactorGraph.h
     Factor graph with utilities for hybrid factors.
     
     HybridGaussianFactorGraph.cpp
     Hybrid factor graph that uses type erasure.
     HybridGaussianFactorGraph.cpp
     Hybrid factor graph that uses type erasure.
     
     HybridGaussianFactorGraph.h
     Linearized Hybrid factor graph that uses type erasure.
     HybridGaussianFactorGraph.h
     Linearized Hybrid factor graph that uses type erasure.
     
     HybridGaussianISAM.h
     HybridGaussianISAM.h
     
     HybridJunctionTree.cpp
     HybridJunctionTree.cpp
     
     HybridJunctionTree.h
     HybridJunctionTree.h
     
     HybridNonlinearFactorGraph.cpp
     Nonlinear hybrid factor graph that uses type erasure.
     HybridNonlinearFactorGraph.cpp
     Nonlinear hybrid factor graph that uses type erasure.
     
     HybridNonlinearFactorGraph.h
     Nonlinear hybrid factor graph that uses type erasure.
     HybridNonlinearFactorGraph.h
     Nonlinear hybrid factor graph that uses type erasure.
     
     HybridNonlinearISAM.cpp
     HybridNonlinearISAM.cpp
     
     HybridNonlinearISAM.h
     HybridNonlinearISAM.h
     
     HybridSmoother.cpp
     An incremental smoother for hybrid factor graphs.
     HybridSmoother.cpp
     An incremental smoother for hybrid factor graphs.
     
     HybridSmoother.h
     An incremental smoother for hybrid factor graphs.
     HybridSmoother.h
     An incremental smoother for hybrid factor graphs.
     
     HybridValues.h
     HybridValues.h
     
     MixtureFactor.h
     Nonlinear Mixture factor of continuous and discrete.
     MixtureFactor.h
     Nonlinear Mixture factor of continuous and discrete.
     
    \n
    \n
\n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_56c2e1a1204958ddcb066d7d52d67173.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_56c2e1a1204958ddcb066d7d52d67173.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,31 +1,31 @@\n var dir_56c2e1a1204958ddcb066d7d52d67173 = [\n- [\"GaussianMixture.cpp\", \"a00518.html\", \"a00518\"],\n- [\"GaussianMixture.h\", \"a00566.html\", \"a00566\"],\n- [\"GaussianMixtureFactor.cpp\", \"a00506.html\", null],\n- [\"GaussianMixtureFactor.h\", \"a00542.html\", \"a00542\"],\n- [\"HybridBayesNet.cpp\", \"a00545.html\", \"a00545\"],\n- [\"HybridBayesNet.h\", \"a00509.html\", \"a00509\"],\n- [\"HybridBayesTree.cpp\", \"a00521.html\", null],\n- [\"HybridBayesTree.h\", \"a00494.html\", \"a00494\"],\n- [\"HybridConditional.cpp\", \"a00482.html\", null],\n- [\"HybridConditional.h\", \"a00533.html\", \"a00533\"],\n- [\"HybridEliminationTree.cpp\", \"a00515.html\", null],\n- [\"HybridEliminationTree.h\", \"a00551.html\", null],\n- [\"HybridFactor.cpp\", \"a00503.html\", null],\n- [\"HybridFactor.h\", \"a00539.html\", \"a00539\"],\n- [\"HybridFactorGraph.cpp\", \"a00527.html\", null],\n- [\"HybridFactorGraph.h\", \"a00536.html\", \"a00536\"],\n- [\"HybridGaussianFactorGraph.cpp\", \"a00569.html\", \"a00569\"],\n- [\"HybridGaussianFactorGraph.h\", \"a00530.html\", \"a00530\"],\n- [\"HybridGaussianISAM.h\", \"a00554.html\", \"a00554\"],\n- [\"HybridJunctionTree.cpp\", \"a00548.html\", null],\n- [\"HybridJunctionTree.h\", \"a00524.html\", null],\n- [\"HybridNonlinearFactorGraph.cpp\", \"a00485.html\", null],\n- [\"HybridNonlinearFactorGraph.h\", \"a00500.html\", \"a00500\"],\n- [\"HybridNonlinearISAM.cpp\", \"a00488.html\", null],\n- [\"HybridNonlinearISAM.h\", \"a00563.html\", \"a00563\"],\n- [\"HybridSmoother.cpp\", \"a00497.html\", null],\n- [\"HybridSmoother.h\", \"a00557.html\", \"a00557\"],\n- [\"HybridValues.h\", \"a00560.html\", \"a00560\"],\n- [\"MixtureFactor.h\", \"a00491.html\", \"a00491\"]\n+ [\"GaussianMixture.cpp\", \"a00497.html\", \"a00497\"],\n+ [\"GaussianMixture.h\", \"a00503.html\", \"a00503\"],\n+ [\"GaussianMixtureFactor.cpp\", \"a00557.html\", null],\n+ [\"GaussianMixtureFactor.h\", \"a00536.html\", \"a00536\"],\n+ [\"HybridBayesNet.cpp\", \"a00515.html\", \"a00515\"],\n+ [\"HybridBayesNet.h\", \"a00527.html\", \"a00527\"],\n+ [\"HybridBayesTree.cpp\", \"a00509.html\", null],\n+ [\"HybridBayesTree.h\", \"a00488.html\", \"a00488\"],\n+ [\"HybridConditional.cpp\", \"a00566.html\", null],\n+ [\"HybridConditional.h\", \"a00560.html\", \"a00560\"],\n+ [\"HybridEliminationTree.cpp\", \"a00485.html\", null],\n+ [\"HybridEliminationTree.h\", \"a00542.html\", null],\n+ [\"HybridFactor.cpp\", \"a00494.html\", null],\n+ [\"HybridFactor.h\", \"a00533.html\", \"a00533\"],\n+ [\"HybridFactorGraph.cpp\", \"a00545.html\", null],\n+ [\"HybridFactorGraph.h\", \"a00563.html\", \"a00563\"],\n+ [\"HybridGaussianFactorGraph.cpp\", \"a00491.html\", \"a00491\"],\n+ [\"HybridGaussianFactorGraph.h\", \"a00539.html\", \"a00539\"],\n+ [\"HybridGaussianISAM.h\", \"a00569.html\", \"a00569\"],\n+ [\"HybridJunctionTree.cpp\", \"a00521.html\", null],\n+ [\"HybridJunctionTree.h\", \"a00551.html\", null],\n+ [\"HybridNonlinearFactorGraph.cpp\", \"a00548.html\", null],\n+ [\"HybridNonlinearFactorGraph.h\", \"a00518.html\", \"a00518\"],\n+ [\"HybridNonlinearISAM.cpp\", \"a00512.html\", null],\n+ [\"HybridNonlinearISAM.h\", \"a00506.html\", \"a00506\"],\n+ [\"HybridSmoother.cpp\", \"a00524.html\", null],\n+ [\"HybridSmoother.h\", \"a00500.html\", \"a00500\"],\n+ [\"HybridValues.h\", \"a00482.html\", \"a00482\"],\n+ [\"MixtureFactor.h\", \"a00554.html\", \"a00554\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_57fcdbb68a7ed4352200f5cc9c5d1fe3.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_57fcdbb68a7ed4352200f5cc9c5d1fe3.html", "unified_diff": "@@ -99,83 +99,83 @@\n
    \n
    navigation Directory Reference
    \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 \n-\n+\n \n-\n+\n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n-\n+\n \n-\n+\n \n

    \n Files

     AHRSFactor.cpp
     AHRSFactor.cpp
     
     AHRSFactor.h
     AHRSFactor.h
     
     AttitudeFactor.cpp
     Implementation file for Attitude factor.
     
     AttitudeFactor.h
     Header file for Attitude factor.
     AttitudeFactor.h
     Header file for Attitude factor.
     
     BarometricFactor.cpp
     Implementation file for Barometric factor.
     BarometricFactor.cpp
     Implementation file for Barometric factor.
     
     BarometricFactor.h
     Header file for Barometric factor.
     BarometricFactor.h
     Header file for Barometric factor.
     
     CombinedImuFactor.cpp
     CombinedImuFactor.cpp
     
     CombinedImuFactor.h
     CombinedImuFactor.h
     
     ConstantVelocityFactor.h
     Maintain a constant velocity motion model between two NavStates.
     ConstantVelocityFactor.h
     Maintain a constant velocity motion model between two NavStates.
     
     expressions.h
     Common expressions for solving navigation problems.
     
     GPSFactor.cpp
     Implementation file for GPS factor.
     
     GPSFactor.h
     Header file for GPS factor.
     GPSFactor.h
     Header file for GPS factor.
     
     ImuBias.cpp
     ImuBias.cpp
     
     ImuBias.h
     ImuBias.h
     
     ImuFactor.cpp
     ImuFactor.cpp
     
     ImuFactor.h
     ImuFactor.h
     
     MagFactor.h
     Factors involving magnetometers.
     MagFactor.h
     Factors involving magnetometers.
     
     MagPoseFactor.h
     MagPoseFactor.h
     
     ManifoldPreintegration.cpp
     ManifoldPreintegration.cpp
     
     ManifoldPreintegration.h
     ManifoldPreintegration.h
     
     NavState.h
     Navigation state composing of attitude, position, and velocity.
     NavState.h
     Navigation state composing of attitude, position, and velocity.
     
     PreintegratedRotation.cpp
     PreintegratedRotation.cpp
     
     PreintegratedRotation.h
     PreintegratedRotation.h
     
     PreintegrationBase.h
     PreintegrationBase.h
     
     PreintegrationParams.h
     PreintegrationParams.h
     
     Scenario.h
     Simple class to test navigation scenarios.
     Scenario.h
     Simple class to test navigation scenarios.
     
     ScenarioRunner.h
     Simple class to test navigation scenarios.
     ScenarioRunner.h
     Simple class to test navigation scenarios.
     
     TangentPreintegration.cpp
     TangentPreintegration.cpp
     
     TangentPreintegration.h
     TangentPreintegration.h
     
    \n
    \n
\n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_57fcdbb68a7ed4352200f5cc9c5d1fe3.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_57fcdbb68a7ed4352200f5cc9c5d1fe3.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,31 +1,31 @@\n var dir_57fcdbb68a7ed4352200f5cc9c5d1fe3 = [\n- [\"AHRSFactor.cpp\", \"a00965.html\", null],\n- [\"AHRSFactor.h\", \"a00950.html\", \"a00950\"],\n+ [\"AHRSFactor.cpp\", \"a00998.html\", null],\n+ [\"AHRSFactor.h\", \"a00986.html\", \"a00986\"],\n [\"AttitudeFactor.cpp\", \"a00932.html\", null],\n- [\"AttitudeFactor.h\", \"a00902.html\", \"a00902\"],\n- [\"BarometricFactor.cpp\", \"a00974.html\", null],\n- [\"BarometricFactor.h\", \"a00947.html\", null],\n- [\"CombinedImuFactor.cpp\", \"a00980.html\", null],\n- [\"CombinedImuFactor.h\", \"a00929.html\", \"a00929\"],\n- [\"ConstantVelocityFactor.h\", \"a00908.html\", \"a00908\"],\n+ [\"AttitudeFactor.h\", \"a00944.html\", \"a00944\"],\n+ [\"BarometricFactor.cpp\", \"a00941.html\", null],\n+ [\"BarometricFactor.h\", \"a00992.html\", null],\n+ [\"CombinedImuFactor.cpp\", \"a00950.html\", null],\n+ [\"CombinedImuFactor.h\", \"a00953.html\", \"a00953\"],\n+ [\"ConstantVelocityFactor.h\", \"a00956.html\", \"a00956\"],\n [\"expressions.h\", \"a08143.html\", null],\n [\"GPSFactor.cpp\", \"a00983.html\", null],\n- [\"GPSFactor.h\", \"a00920.html\", null],\n- [\"ImuBias.cpp\", \"a00989.html\", \"a00989\"],\n- [\"ImuBias.h\", \"a00968.html\", \"a00968\"],\n- [\"ImuFactor.cpp\", \"a00992.html\", null],\n- [\"ImuFactor.h\", \"a00938.html\", \"a00938\"],\n- [\"MagFactor.h\", \"a00917.html\", \"a00917\"],\n- [\"MagPoseFactor.h\", \"a00956_source.html\", null],\n- [\"ManifoldPreintegration.cpp\", \"a00977.html\", null],\n- [\"ManifoldPreintegration.h\", \"a00998.html\", \"a00998\"],\n- [\"NavState.h\", \"a00944.html\", \"a00944\"],\n- [\"PreintegratedRotation.cpp\", \"a00935.html\", null],\n- [\"PreintegratedRotation.h\", \"a00986.html\", \"a00986\"],\n- [\"PreintegrationBase.h\", \"a00914.html\", \"a00914\"],\n- [\"PreintegrationParams.h\", \"a00923.html\", \"a00923\"],\n- [\"Scenario.h\", \"a00971.html\", \"a00971\"],\n- [\"ScenarioRunner.h\", \"a00995.html\", \"a00995\"],\n- [\"TangentPreintegration.cpp\", \"a00959.html\", null],\n- [\"TangentPreintegration.h\", \"a00941.html\", \"a00941\"]\n+ [\"GPSFactor.h\", \"a00908.html\", null],\n+ [\"ImuBias.cpp\", \"a00968.html\", \"a00968\"],\n+ [\"ImuBias.h\", \"a00974.html\", \"a00974\"],\n+ [\"ImuFactor.cpp\", \"a00959.html\", null],\n+ [\"ImuFactor.h\", \"a00977.html\", \"a00977\"],\n+ [\"MagFactor.h\", \"a00995.html\", \"a00995\"],\n+ [\"MagPoseFactor.h\", \"a00920_source.html\", null],\n+ [\"ManifoldPreintegration.cpp\", \"a00947.html\", null],\n+ [\"ManifoldPreintegration.h\", \"a00926.html\", \"a00926\"],\n+ [\"NavState.h\", \"a00962.html\", \"a00962\"],\n+ [\"PreintegratedRotation.cpp\", \"a00989.html\", null],\n+ [\"PreintegratedRotation.h\", \"a00971.html\", \"a00971\"],\n+ [\"PreintegrationBase.h\", \"a00917.html\", \"a00917\"],\n+ [\"PreintegrationParams.h\", \"a00965.html\", \"a00965\"],\n+ [\"Scenario.h\", \"a00914.html\", \"a00914\"],\n+ [\"ScenarioRunner.h\", \"a00938.html\", \"a00938\"],\n+ [\"TangentPreintegration.cpp\", \"a00902.html\", null],\n+ [\"TangentPreintegration.h\", \"a00911.html\", \"a00911\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_59d8fae67ebcec1514e0f6d4ea576047.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_59d8fae67ebcec1514e0f6d4ea576047.html", "unified_diff": "@@ -99,151 +99,151 @@\n
    \n
    base Directory Reference
    \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+\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 \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 Files

     chartTesting.h
     chartTesting.h
     
     cholesky.cpp
     Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.
     cholesky.cpp
     Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.
     
     cholesky.h
     Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.
     cholesky.h
     Efficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky.
     
     concepts.h
     
     ConcurrentMap.h
     ConcurrentMap.h
     
     debug.cpp
     Global debugging flags.
     debug.cpp
     Global debugging flags.
     
     debug.h
     Global debugging flags.
     debug.h
     Global debugging flags.
     
     DSFMap.h
     Allow for arbitrary type in DSF.
     
     DSFVector.cpp
     a faster implementation for DSF, which uses vector rather than btree.
     DSFVector.cpp
     a faster implementation for DSF, which uses vector rather than btree.
     
     DSFVector.h
     A faster implementation for DSF, which uses vector rather than btree.
     DSFVector.h
     A faster implementation for DSF, which uses vector rather than btree.
     
     FastDefaultAllocator.h
     An easy way to control which allocator is used for Fast* collections.
     FastDefaultAllocator.h
     An easy way to control which allocator is used for Fast* collections.
     
     FastList.h
     A thin wrapper around std::list that uses boost's fast_pool_allocator.
     FastList.h
     A thin wrapper around std::list that uses boost's fast_pool_allocator.
     
     FastMap.h
     A thin wrapper around std::map that uses boost's fast_pool_allocator.
     FastMap.h
     A thin wrapper around std::map that uses boost's fast_pool_allocator.
     
     FastSet.h
     A thin wrapper around std::set that uses boost's fast_pool_allocator.
     FastSet.h
     A thin wrapper around std::set that uses boost's fast_pool_allocator.
     
     FastVector.h
     A thin wrapper around std::vector that uses a custom allocator.
     FastVector.h
     A thin wrapper around std::vector that uses a custom allocator.
     
     GenericValue.h
     GenericValue.h
     
     Group.h
     Concept check class for variable types with Group properties.
     Group.h
     Concept check class for variable types with Group properties.
     
     Lie.h
     Base class and basic functions for Lie types.
     Lie.h
     Base class and basic functions for Lie types.
     
     lieProxies.h
     Provides convenient mappings of common member functions for testing.
     lieProxies.h
     Provides convenient mappings of common member functions for testing.
     
     make_shared.h
     make_shared trampoline function to ensure proper alignment
     make_shared.h
     make_shared trampoline function to ensure proper alignment
     
     Manifold.h
     Base class and basic functions for Manifold types.
     Manifold.h
     Base class and basic functions for Manifold types.
     
     Matrix.cpp
     matrix class
     Matrix.cpp
     matrix class
     
     Matrix.h
     typedef and functions to augment Eigen's MatrixXd
     Matrix.h
     typedef and functions to augment Eigen's MatrixXd
     
     MatrixSerialization.h
     Serialization for matrices.
     MatrixSerialization.h
     Serialization for matrices.
     
     numericalDerivative.h
     Some functions to compute numerical derivatives.
     numericalDerivative.h
     Some functions to compute numerical derivatives.
     
     OptionalJacobian.h
     Special class for optional Jacobian arguments.
     OptionalJacobian.h
     Special class for optional Jacobian arguments.
     
     ProductLieGroup.h
     Group product of two Lie Groups.
     ProductLieGroup.h
     Group product of two Lie Groups.
     
     serialization.h
     Convenience functions for serializing data structures via boost.serialization.
     serialization.h
     Convenience functions for serializing data structures via boost.serialization.
     
     serializationTestHelpers.h
     serializationTestHelpers.h
     
     SymmetricBlockMatrix.cpp
     Access to matrices via blocks of pre-defined sizes.
     SymmetricBlockMatrix.cpp
     Access to matrices via blocks of pre-defined sizes.
     
     SymmetricBlockMatrix.h
     Access to matrices via blocks of pre-defined sizes.
     SymmetricBlockMatrix.h
     Access to matrices via blocks of pre-defined sizes.
     
     Testable.h
     Concept check for values that can be used in unit tests.
     Testable.h
     Concept check for values that can be used in unit tests.
     
     TestableAssertions.h
     Provides additional testing facilities for common data structures.
     TestableAssertions.h
     Provides additional testing facilities for common data structures.
     
     testLie.h
     testLie.h
     
     ThreadsafeException.h
     Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
     ThreadsafeException.h
     Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
     
     timing.cpp
     Timing utilities.
     timing.cpp
     Timing utilities.
     
     timing.h
     Timing utilities.
     timing.h
     Timing utilities.
     
     treeTraversal-inst.h
     treeTraversal-inst.h
     
     types.cpp
     Functions for handling type information.
     types.cpp
     Functions for handling type information.
     
     types.h
     Typedefs for easier changing of types.
     types.h
     Typedefs for easier changing of types.
     
     utilities.h
     
     Value.h
     The base class for any variable that can be optimized or used in a factor.
     Value.h
     The base class for any variable that can be optimized or used in a factor.
     
     Vector.cpp
     typedef and functions to augment Eigen's Vectors
     Vector.cpp
     typedef and functions to augment Eigen's Vectors
     
     Vector.h
     typedef and functions to augment Eigen's VectorXd
     Vector.h
     typedef and functions to augment Eigen's VectorXd
     
     VectorSerialization.h
     serialization for Vectors
     VectorSerialization.h
     serialization for Vectors
     
     VectorSpace.h
     VectorSpace.h
     
     VerticalBlockMatrix.cpp
     A matrix with column blocks of pre-defined sizes.
     VerticalBlockMatrix.cpp
     A matrix with column blocks of pre-defined sizes.
     
     VerticalBlockMatrix.h
     A matrix with column blocks of pre-defined sizes.
     VerticalBlockMatrix.h
     A matrix with column blocks of pre-defined sizes.
     
     WeightedSampler.h
     Fast sampling without replacement.
     WeightedSampler.h
     Fast sampling without replacement.
     
    \n
    \n
\n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_59d8fae67ebcec1514e0f6d4ea576047.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_59d8fae67ebcec1514e0f6d4ea576047.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,51 +1,51 @@\n var dir_59d8fae67ebcec1514e0f6d4ea576047 = [\n- [\"chartTesting.h\", \"a00113_source.html\", null],\n- [\"cholesky.cpp\", \"a00050.html\", \"a00050\"],\n- [\"cholesky.h\", \"a00125.html\", \"a00125\"],\n+ [\"chartTesting.h\", \"a00143_source.html\", null],\n+ [\"cholesky.cpp\", \"a00068.html\", \"a00068\"],\n+ [\"cholesky.h\", \"a00008.html\", \"a00008\"],\n [\"concepts.h\", \"a08125_source.html\", null],\n- [\"ConcurrentMap.h\", \"a00026_source.html\", null],\n- [\"debug.cpp\", \"a00032.html\", null],\n- [\"debug.h\", \"a00008.html\", null],\n+ [\"ConcurrentMap.h\", \"a00047_source.html\", null],\n+ [\"debug.cpp\", \"a00101.html\", null],\n+ [\"debug.h\", \"a00053.html\", null],\n [\"DSFMap.h\", \"a00116.html\", \"a00116\"],\n- [\"DSFVector.cpp\", \"a00044.html\", null],\n- [\"DSFVector.h\", \"a00077.html\", null],\n- [\"FastDefaultAllocator.h\", \"a00017.html\", \"a00017\"],\n- [\"FastList.h\", \"a00014.html\", null],\n- [\"FastMap.h\", \"a00149.html\", null],\n- [\"FastSet.h\", \"a00062.html\", null],\n- [\"FastVector.h\", \"a00083.html\", \"a00083\"],\n- [\"GenericValue.h\", \"a00110_source.html\", null],\n- [\"Group.h\", \"a00065.html\", \"a00065\"],\n- [\"Lie.h\", \"a00074.html\", \"a00074\"],\n- [\"lieProxies.h\", \"a00122.html\", \"a00122\"],\n- [\"make_shared.h\", \"a00038.html\", \"a00038\"],\n- [\"Manifold.h\", \"a00002.html\", \"a00002\"],\n- [\"Matrix.cpp\", \"a00068.html\", \"a00068\"],\n- [\"Matrix.h\", \"a00020.html\", \"a00020\"],\n- [\"MatrixSerialization.h\", \"a00104.html\", \"a00104\"],\n- [\"numericalDerivative.h\", \"a00143.html\", \"a00143\"],\n- [\"OptionalJacobian.h\", \"a00137.html\", \"a00137\"],\n- [\"ProductLieGroup.h\", \"a00023.html\", \"a00023\"],\n- [\"serialization.h\", \"a00092.html\", \"a00092\"],\n- [\"serializationTestHelpers.h\", \"a00134.html\", null],\n- [\"SymmetricBlockMatrix.cpp\", \"a00107.html\", null],\n- [\"SymmetricBlockMatrix.h\", \"a00041.html\", null],\n- [\"Testable.h\", \"a00080.html\", \"a00080\"],\n- [\"TestableAssertions.h\", \"a00053.html\", \"a00053\"],\n- [\"testLie.h\", \"a00086_source.html\", null],\n- [\"ThreadsafeException.h\", \"a00011.html\", \"a00011\"],\n- [\"timing.cpp\", \"a00128.html\", null],\n- [\"timing.h\", \"a00131.html\", \"a00131\"],\n- [\"treeTraversal-inst.h\", \"a00146.html\", \"a00146\"],\n- [\"types.cpp\", \"a00005.html\", \"a00005\"],\n- [\"types.h\", \"a00047.html\", \"a00047\"],\n+ [\"DSFVector.cpp\", \"a00125.html\", null],\n+ [\"DSFVector.h\", \"a00032.html\", null],\n+ [\"FastDefaultAllocator.h\", \"a00041.html\", \"a00041\"],\n+ [\"FastList.h\", \"a00086.html\", null],\n+ [\"FastMap.h\", \"a00035.html\", null],\n+ [\"FastSet.h\", \"a00092.html\", null],\n+ [\"FastVector.h\", \"a00080.html\", \"a00080\"],\n+ [\"GenericValue.h\", \"a00017_source.html\", null],\n+ [\"Group.h\", \"a00056.html\", \"a00056\"],\n+ [\"Lie.h\", \"a00005.html\", \"a00005\"],\n+ [\"lieProxies.h\", \"a00011.html\", \"a00011\"],\n+ [\"make_shared.h\", \"a00077.html\", \"a00077\"],\n+ [\"Manifold.h\", \"a00044.html\", \"a00044\"],\n+ [\"Matrix.cpp\", \"a00071.html\", \"a00071\"],\n+ [\"Matrix.h\", \"a00026.html\", \"a00026\"],\n+ [\"MatrixSerialization.h\", \"a00038.html\", \"a00038\"],\n+ [\"numericalDerivative.h\", \"a00074.html\", \"a00074\"],\n+ [\"OptionalJacobian.h\", \"a00095.html\", \"a00095\"],\n+ [\"ProductLieGroup.h\", \"a00014.html\", \"a00014\"],\n+ [\"serialization.h\", \"a00062.html\", \"a00062\"],\n+ [\"serializationTestHelpers.h\", \"a00149.html\", null],\n+ [\"SymmetricBlockMatrix.cpp\", \"a00083.html\", null],\n+ [\"SymmetricBlockMatrix.h\", \"a00122.html\", null],\n+ [\"Testable.h\", \"a00110.html\", \"a00110\"],\n+ [\"TestableAssertions.h\", \"a00059.html\", \"a00059\"],\n+ [\"testLie.h\", \"a00104_source.html\", null],\n+ [\"ThreadsafeException.h\", \"a00098.html\", \"a00098\"],\n+ [\"timing.cpp\", \"a00029.html\", null],\n+ [\"timing.h\", \"a00137.html\", \"a00137\"],\n+ [\"treeTraversal-inst.h\", \"a00107.html\", \"a00107\"],\n+ [\"types.cpp\", \"a00134.html\", \"a00134\"],\n+ [\"types.h\", \"a00020.html\", \"a00020\"],\n [\"utilities.h\", \"a08131_source.html\", null],\n- [\"Value.h\", \"a00059.html\", \"a00059\"],\n- [\"Vector.cpp\", \"a00140.html\", \"a00140\"],\n- [\"Vector.h\", \"a00089.html\", \"a00089\"],\n- [\"VectorSerialization.h\", \"a00056.html\", null],\n- [\"VectorSpace.h\", \"a00098_source.html\", null],\n- [\"VerticalBlockMatrix.cpp\", \"a00101.html\", null],\n- [\"VerticalBlockMatrix.h\", \"a00071.html\", null],\n- [\"WeightedSampler.h\", \"a00095.html\", \"a00095\"]\n+ [\"Value.h\", \"a00023.html\", \"a00023\"],\n+ [\"Vector.cpp\", \"a00050.html\", \"a00050\"],\n+ [\"Vector.h\", \"a00113.html\", \"a00113\"],\n+ [\"VectorSerialization.h\", \"a00089.html\", null],\n+ [\"VectorSpace.h\", \"a00146_source.html\", null],\n+ [\"VerticalBlockMatrix.cpp\", \"a00131.html\", null],\n+ [\"VerticalBlockMatrix.h\", \"a00002.html\", null],\n+ [\"WeightedSampler.h\", \"a00140.html\", \"a00140\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_76df0d5ddca8353881dcb68d9cbdfd25.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_76df0d5ddca8353881dcb68d9cbdfd25.html", "unified_diff": "@@ -99,58 +99,58 @@\n
    \n
    sfm Directory Reference
    \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 Files

     BinaryMeasurement.h
     Binary measurement represents a measurement between two keys in a graph. A binary measurement is similar to a BetweenFactor, except that it does not contain an error function. It is a measurement (along with a noise model) from one key to another. Note that the direction is important. A measurement from key1 to key2 is not the same as the same measurement from key2 to key1.
     BinaryMeasurement.h
     Binary measurement represents a measurement between two keys in a graph. A binary measurement is similar to a BetweenFactor, except that it does not contain an error function. It is a measurement (along with a noise model) from one key to another. Note that the direction is important. A measurement from key1 to key2 is not the same as the same measurement from key2 to key1.
     
     DsfTrackGenerator.cpp
     Identifies connected components in the keypoint matches graph.
     DsfTrackGenerator.cpp
     Identifies connected components in the keypoint matches graph.
     
     DsfTrackGenerator.h
     Identifies connected components in the keypoint matches graph.
     DsfTrackGenerator.h
     Identifies connected components in the keypoint matches graph.
     
     MFAS.cpp
     Source file for the MFAS class.
     MFAS.cpp
     Source file for the MFAS class.
     
     MFAS.h
     MFAS class to solve Minimum Feedback Arc Set graph problem.
     MFAS.h
     MFAS class to solve Minimum Feedback Arc Set graph problem.
     
     SfmData.cpp
     Data structure for dealing with Structure from Motion data.
     SfmData.cpp
     Data structure for dealing with Structure from Motion data.
     
     SfmData.h
     Data structure for dealing with Structure from Motion data.
     SfmData.h
     Data structure for dealing with Structure from Motion data.
     
     SfmTrack.cpp
     A simple data structure for a track in Structure from Motion.
     
     SfmTrack.h
     A simple data structure for a track in Structure from Motion.
     SfmTrack.h
     A simple data structure for a track in Structure from Motion.
     
     ShonanAveraging.cpp
     Shonan Averaging algorithm.
     ShonanAveraging.cpp
     Shonan Averaging algorithm.
     
     ShonanAveraging.h
     Shonan Averaging algorithm.
     ShonanAveraging.h
     Shonan Averaging algorithm.
     
     ShonanFactor.h
     Main factor type in Shonan averaging, on SO(n) pairs.
     ShonanFactor.h
     Main factor type in Shonan averaging, on SO(n) pairs.
     
     ShonanGaugeFactor.h
     Factor used in Shonan Averaging to clamp down gauge freedom.
     ShonanGaugeFactor.h
     Factor used in Shonan Averaging to clamp down gauge freedom.
     
     TranslationFactor.h
     Binary factor for a relative translation direction measurement.
     TranslationFactor.h
     Binary factor for a relative translation direction measurement.
     
     TranslationRecovery.cpp
     Source code for recovering translations when rotations are given.
     TranslationRecovery.cpp
     Source code for recovering translations when rotations are given.
     
     TranslationRecovery.h
     Recovering translations in an epipolar graph when rotations are given.
     
    \n
    \n
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_76df0d5ddca8353881dcb68d9cbdfd25.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_76df0d5ddca8353881dcb68d9cbdfd25.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,18 +1,18 @@\n var dir_76df0d5ddca8353881dcb68d9cbdfd25 = [\n- [\"BinaryMeasurement.h\", \"a01184.html\", \"a01184\"],\n- [\"DsfTrackGenerator.cpp\", \"a01211.html\", \"a01211\"],\n- [\"DsfTrackGenerator.h\", \"a01232.html\", \"a01232\"],\n- [\"MFAS.cpp\", \"a01205.html\", null],\n- [\"MFAS.h\", \"a01193.html\", null],\n- [\"SfmData.cpp\", \"a01220.html\", \"a01220\"],\n- [\"SfmData.h\", \"a01199.html\", \"a01199\"],\n+ [\"BinaryMeasurement.h\", \"a01229.html\", \"a01229\"],\n+ [\"DsfTrackGenerator.cpp\", \"a01199.html\", \"a01199\"],\n+ [\"DsfTrackGenerator.h\", \"a01196.html\", \"a01196\"],\n+ [\"MFAS.cpp\", \"a01226.html\", null],\n+ [\"MFAS.h\", \"a01184.html\", null],\n+ [\"SfmData.cpp\", \"a01211.html\", \"a01211\"],\n+ [\"SfmData.h\", \"a01202.html\", \"a01202\"],\n [\"SfmTrack.cpp\", \"a01217.html\", null],\n- [\"SfmTrack.h\", \"a01226.html\", \"a01226\"],\n- [\"ShonanAveraging.cpp\", \"a01208.html\", null],\n- [\"ShonanAveraging.h\", \"a01196.html\", \"a01196\"],\n- [\"ShonanFactor.h\", \"a01187.html\", \"a01187\"],\n- [\"ShonanGaugeFactor.h\", \"a01214.html\", \"a01214\"],\n- [\"TranslationFactor.h\", \"a01202.html\", null],\n- [\"TranslationRecovery.cpp\", \"a01229.html\", null],\n+ [\"SfmTrack.h\", \"a01214.html\", \"a01214\"],\n+ [\"ShonanAveraging.cpp\", \"a01232.html\", null],\n+ [\"ShonanAveraging.h\", \"a01187.html\", \"a01187\"],\n+ [\"ShonanFactor.h\", \"a01208.html\", \"a01208\"],\n+ [\"ShonanGaugeFactor.h\", \"a01190.html\", \"a01190\"],\n+ [\"TranslationFactor.h\", \"a01193.html\", null],\n+ [\"TranslationRecovery.cpp\", \"a01205.html\", null],\n [\"TranslationRecovery.h\", \"a01223.html\", \"a01223\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_7c6fd4d23c35234f8f1271a66248b63b.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_7c6fd4d23c35234f8f1271a66248b63b.html", "unified_diff": "@@ -99,40 +99,40 @@\n
\n
basis Directory Reference
\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 Files

 Basis.h
 Compute an interpolating basis.
 Basis.h
 Compute an interpolating basis.
 
 BasisFactors.h
 Factor definitions for various Basis functors.
 BasisFactors.h
 Factor definitions for various Basis functors.
 
 Chebyshev.cpp
 Chebyshev basis decompositions.
 Chebyshev.cpp
 Chebyshev basis decompositions.
 
 Chebyshev.h
 Chebyshev basis decompositions.
 
 Chebyshev2.cpp
 Chebyshev parameterizations on Chebyshev points of second kind.
 Chebyshev2.cpp
 Chebyshev parameterizations on Chebyshev points of second kind.
 
 Chebyshev2.h
 Pseudo-spectral parameterization for Chebyshev polynomials of the second kind.
 
 FitBasis.h
 Fit a Basis using least-squares.
 FitBasis.h
 Fit a Basis using least-squares.
 
 Fourier.h
 Fourier decomposition, see e.g.
 Fourier.h
 Fourier decomposition, see e.g.
 
 ParameterMatrix.h
 Define ParameterMatrix class which is used to store values at interpolation points.
 ParameterMatrix.h
 Define ParameterMatrix class which is used to store values at interpolation points.
 
\n
\n \n \n
\n
\n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_88adea47575c2d5c40d4070390572b66.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_88adea47575c2d5c40d4070390572b66.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,61 +1,61 @@\n var dir_88adea47575c2d5c40d4070390572b66 = [\n- [\"CustomFactor.cpp\", \"a01118.html\", null],\n- [\"CustomFactor.h\", \"a01058.html\", \"a01058\"],\n- [\"DoglegOptimizer.cpp\", \"a01082.html\", null],\n- [\"DoglegOptimizer.h\", \"a01085.html\", \"a01085\"],\n- [\"DoglegOptimizerImpl.h\", \"a01073.html\", \"a01073\"],\n- [\"Expression-inl.h\", \"a01016.html\", \"a01016\"],\n- [\"Expression.h\", \"a01028.html\", \"a01028\"],\n- [\"ExpressionFactor.h\", \"a01151_source.html\", null],\n- [\"ExpressionFactorGraph.h\", \"a01010.html\", \"a01010\"],\n+ [\"CustomFactor.cpp\", \"a01076.html\", null],\n+ [\"CustomFactor.h\", \"a01055.html\", \"a01055\"],\n+ [\"DoglegOptimizer.cpp\", \"a01133.html\", null],\n+ [\"DoglegOptimizer.h\", \"a01043.html\", \"a01043\"],\n+ [\"DoglegOptimizerImpl.h\", \"a01160.html\", \"a01160\"],\n+ [\"Expression-inl.h\", \"a01151.html\", \"a01151\"],\n+ [\"Expression.h\", \"a01097.html\", \"a01097\"],\n+ [\"ExpressionFactor.h\", \"a01046_source.html\", null],\n+ [\"ExpressionFactorGraph.h\", \"a01019.html\", \"a01019\"],\n [\"expressions.h\", \"a08146.html\", null],\n- [\"expressionTesting.h\", \"a01142.html\", \"a01142\"],\n- [\"ExtendedKalmanFilter-inl.h\", \"a01091.html\", null],\n- [\"ExtendedKalmanFilter.h\", \"a01064.html\", \"a01064\"],\n- [\"factorTesting.h\", \"a01121.html\", \"a01121\"],\n- [\"FunctorizedFactor.h\", \"a01013.html\", \"a01013\"],\n- [\"GaussNewtonOptimizer.cpp\", \"a01109.html\", null],\n- [\"GaussNewtonOptimizer.h\", \"a01001.html\", \"a01001\"],\n- [\"GncOptimizer.h\", \"a01052.html\", \"a01052\"],\n- [\"GncParams.h\", \"a01025_source.html\", null],\n- [\"GraphvizFormatting.cpp\", \"a01106.html\", null],\n- [\"GraphvizFormatting.h\", \"a01031.html\", \"a01031\"],\n- [\"ISAM2-impl.cpp\", \"a01046.html\", null],\n- [\"ISAM2-impl.h\", \"a01067.html\", \"a01067\"],\n- [\"ISAM2.cpp\", \"a01139.html\", null],\n- [\"ISAM2.h\", \"a01163.html\", \"a01163\"],\n- [\"ISAM2Clique.cpp\", \"a01055.html\", \"a01055\"],\n- [\"ISAM2Clique.h\", \"a01160.html\", \"a01160\"],\n- [\"ISAM2Params.cpp\", \"a01172.html\", null],\n- [\"ISAM2Params.h\", \"a01040.html\", \"a01040\"],\n- [\"ISAM2Result.h\", \"a01127.html\", \"a01127\"],\n- [\"ISAM2UpdateParams.h\", \"a01169.html\", null],\n- [\"LevenbergMarquardtOptimizer.cpp\", \"a01004.html\", null],\n- [\"LevenbergMarquardtOptimizer.h\", \"a01043.html\", \"a01043\"],\n- [\"LevenbergMarquardtParams.cpp\", \"a01100.html\", null],\n- [\"LevenbergMarquardtParams.h\", \"a01019.html\", \"a01019\"],\n- [\"LinearContainerFactor.cpp\", \"a01145.html\", null],\n- [\"LinearContainerFactor.h\", \"a01103.html\", \"a01103\"],\n- [\"Marginals.cpp\", \"a01079.html\", null],\n- [\"Marginals.h\", \"a01136.html\", \"a01136\"],\n- [\"NonlinearConjugateGradientOptimizer.cpp\", \"a01133.html\", null],\n- [\"NonlinearConjugateGradientOptimizer.h\", \"a01124.html\", \"a01124\"],\n- [\"NonlinearEquality.h\", \"a01007_source.html\", null],\n- [\"nonlinearExceptions.h\", \"a01070.html\", \"a01070\"],\n- [\"NonlinearFactor.cpp\", \"a01148.html\", null],\n- [\"NonlinearFactor.h\", \"a01097.html\", \"a01097\"],\n- [\"NonlinearFactorGraph.cpp\", \"a01115.html\", null],\n- [\"NonlinearFactorGraph.h\", \"a01154.html\", \"a01154\"],\n+ [\"expressionTesting.h\", \"a01100.html\", \"a01100\"],\n+ [\"ExtendedKalmanFilter-inl.h\", \"a01148.html\", null],\n+ [\"ExtendedKalmanFilter.h\", \"a01070.html\", \"a01070\"],\n+ [\"factorTesting.h\", \"a01091.html\", \"a01091\"],\n+ [\"FunctorizedFactor.h\", \"a01064.html\", \"a01064\"],\n+ [\"GaussNewtonOptimizer.cpp\", \"a01016.html\", null],\n+ [\"GaussNewtonOptimizer.h\", \"a01031.html\", \"a01031\"],\n+ [\"GncOptimizer.h\", \"a01103.html\", \"a01103\"],\n+ [\"GncParams.h\", \"a01088_source.html\", null],\n+ [\"GraphvizFormatting.cpp\", \"a01022.html\", null],\n+ [\"GraphvizFormatting.h\", \"a01115.html\", \"a01115\"],\n+ [\"ISAM2-impl.cpp\", \"a01010.html\", null],\n+ [\"ISAM2-impl.h\", \"a01058.html\", \"a01058\"],\n+ [\"ISAM2.cpp\", \"a01106.html\", null],\n+ [\"ISAM2.h\", \"a01007.html\", \"a01007\"],\n+ [\"ISAM2Clique.cpp\", \"a01109.html\", \"a01109\"],\n+ [\"ISAM2Clique.h\", \"a01049.html\", \"a01049\"],\n+ [\"ISAM2Params.cpp\", \"a01124.html\", null],\n+ [\"ISAM2Params.h\", \"a01037.html\", \"a01037\"],\n+ [\"ISAM2Result.h\", \"a01004.html\", \"a01004\"],\n+ [\"ISAM2UpdateParams.h\", \"a01067.html\", null],\n+ [\"LevenbergMarquardtOptimizer.cpp\", \"a01028.html\", null],\n+ [\"LevenbergMarquardtOptimizer.h\", \"a01172.html\", \"a01172\"],\n+ [\"LevenbergMarquardtParams.cpp\", \"a01013.html\", null],\n+ [\"LevenbergMarquardtParams.h\", \"a01145.html\", \"a01145\"],\n+ [\"LinearContainerFactor.cpp\", \"a01082.html\", null],\n+ [\"LinearContainerFactor.h\", \"a01154.html\", \"a01154\"],\n+ [\"Marginals.cpp\", \"a01166.html\", null],\n+ [\"Marginals.h\", \"a01142.html\", \"a01142\"],\n+ [\"NonlinearConjugateGradientOptimizer.cpp\", \"a01034.html\", null],\n+ [\"NonlinearConjugateGradientOptimizer.h\", \"a01052.html\", \"a01052\"],\n+ [\"NonlinearEquality.h\", \"a01139_source.html\", null],\n+ [\"nonlinearExceptions.h\", \"a01001.html\", \"a01001\"],\n+ [\"NonlinearFactor.cpp\", \"a01079.html\", null],\n+ [\"NonlinearFactor.h\", \"a01025.html\", \"a01025\"],\n+ [\"NonlinearFactorGraph.cpp\", \"a01157.html\", null],\n+ [\"NonlinearFactorGraph.h\", \"a01085.html\", \"a01085\"],\n [\"NonlinearISAM.cpp\", \"a01112.html\", null],\n- [\"NonlinearISAM.h\", \"a01166.html\", \"a01166\"],\n- [\"NonlinearOptimizer.cpp\", \"a01034.html\", \"a01034\"],\n- [\"NonlinearOptimizer.h\", \"a01094.html\", \"a01094\"],\n- [\"NonlinearOptimizerParams.cpp\", \"a01049.html\", null],\n- [\"NonlinearOptimizerParams.h\", \"a01076.html\", \"a01076\"],\n+ [\"NonlinearISAM.h\", \"a01061.html\", \"a01061\"],\n+ [\"NonlinearOptimizer.cpp\", \"a01163.html\", \"a01163\"],\n+ [\"NonlinearOptimizer.h\", \"a01121.html\", \"a01121\"],\n+ [\"NonlinearOptimizerParams.cpp\", \"a01130.html\", null],\n+ [\"NonlinearOptimizerParams.h\", \"a01073.html\", \"a01073\"],\n [\"PriorFactor.h\", \"a08152.html\", \"a08152\"],\n [\"Symbol.h\", \"a08140.html\", null],\n [\"utilities.h\", \"a08134.html\", \"a08134\"],\n- [\"Values-inl.h\", \"a01061_source.html\", null],\n- [\"Values.h\", \"a01130.html\", \"a01130\"],\n- [\"WhiteNoiseFactor.h\", \"a01037.html\", \"a01037\"]\n+ [\"Values-inl.h\", \"a01040_source.html\", null],\n+ [\"Values.h\", \"a01127.html\", \"a01127\"],\n+ [\"WhiteNoiseFactor.h\", \"a01118.html\", \"a01118\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_8b9ec42722111795f76d34c6471319a6.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_8b9ec42722111795f76d34c6471319a6.html", "unified_diff": "@@ -99,177 +99,177 @@\n
    \n
    linear Directory Reference
    \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-\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-\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+\n+\n \n-\n-\n+\n+\n \n

    \n Files

     AcceleratedPowerMethod.h
     accelerated power method for fast eigenvalue and eigenvector computation
     AcceleratedPowerMethod.h
     accelerated power method for fast eigenvalue and eigenvector computation
     
     BinaryJacobianFactor.h
     A binary JacobianFactor specialization that uses fixed matrix math for speed.
     BinaryJacobianFactor.h
     A binary JacobianFactor specialization that uses fixed matrix math for speed.
     
     ConjugateGradientSolver.h
     Implementation of Conjugate Gradient solver for a linear system.
     ConjugateGradientSolver.h
     Implementation of Conjugate Gradient solver for a linear system.
     
     Errors.cpp
     Factor Graph Values.
     Errors.cpp
     Factor Graph Values.
     
     Errors.h
     vector of errors
     Errors.h
     vector of errors
     
     GaussianBayesNet.cpp
     Chordal Bayes Net, the result of eliminating a factor graph.
     GaussianBayesNet.cpp
     Chordal Bayes Net, the result of eliminating a factor graph.
     
     GaussianBayesNet.h
     Chordal Bayes Net, the result of eliminating a factor graph.
     GaussianBayesNet.h
     Chordal Bayes Net, the result of eliminating a factor graph.
     
     GaussianBayesTree-inl.h
     Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
     GaussianBayesTree-inl.h
     Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
     
     GaussianBayesTree.cpp
     Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
     GaussianBayesTree.cpp
     Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
     
     GaussianBayesTree.h
     Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
     GaussianBayesTree.h
     Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
     
     GaussianConditional-inl.h
     Conditional Gaussian Base class.
     GaussianConditional-inl.h
     Conditional Gaussian Base class.
     
     GaussianConditional.cpp
     Conditional Gaussian Base class.
     GaussianConditional.cpp
     Conditional Gaussian Base class.
     
     GaussianConditional.h
     Conditional Gaussian Base class.
     GaussianConditional.h
     Conditional Gaussian Base class.
     
     GaussianDensity.cpp
     A Gaussian Density.
     GaussianDensity.cpp
     A Gaussian Density.
     
     GaussianDensity.h
     A Gaussian Density.
     GaussianDensity.h
     A Gaussian Density.
     
     GaussianEliminationTree.cpp
     GaussianEliminationTree.cpp
     
     GaussianEliminationTree.h
     GaussianEliminationTree.h
     
     GaussianFactor.cpp
     A factor with a quadratic error function - a Gaussian.
     GaussianFactor.cpp
     A factor with a quadratic error function - a Gaussian.
     
     GaussianFactor.h
     A factor with a quadratic error function - a Gaussian.
     GaussianFactor.h
     A factor with a quadratic error function - a Gaussian.
     
     GaussianFactorGraph.cpp
     Linear Factor Graph where all factors are Gaussians.
     GaussianFactorGraph.cpp
     Linear Factor Graph where all factors are Gaussians.
     
     GaussianFactorGraph.h
     Linear Factor Graph where all factors are Gaussians.
     GaussianFactorGraph.h
     Linear Factor Graph where all factors are Gaussians.
     
     GaussianISAM.h
     
     GaussianJunctionTree.cpp
     GaussianJunctionTree.cpp
     
     GaussianJunctionTree.h
     GaussianJunctionTree.h
     
     HessianFactor-inl.h
     Contains the HessianFactor class, a general quadratic factor.
     HessianFactor-inl.h
     Contains the HessianFactor class, a general quadratic factor.
     
     HessianFactor.cpp
     HessianFactor.cpp
     
     HessianFactor.h
     Contains the HessianFactor class, a general quadratic factor.
     HessianFactor.h
     Contains the HessianFactor class, a general quadratic factor.
     
     iterative-inl.h
     Iterative methods, template implementation.
     iterative-inl.h
     Iterative methods, template implementation.
     
     iterative.cpp
     Iterative methods, implementation.
     iterative.cpp
     Iterative methods, implementation.
     
     iterative.h
     Iterative methods, implementation.
     iterative.h
     Iterative methods, implementation.
     
     IterativeSolver.cpp
     Some support classes for iterative solvers.
     
     IterativeSolver.h
     Some support classes for iterative solvers.
     IterativeSolver.h
     Some support classes for iterative solvers.
     
     JacobianFactor-inl.h
     JacobianFactor-inl.h
     
     JacobianFactor.cpp
     JacobianFactor.cpp
     
     JacobianFactor.h
     JacobianFactor.h
     
     KalmanFilter.cpp
     Simple linear Kalman filter.
     KalmanFilter.cpp
     Simple linear Kalman filter.
     
     KalmanFilter.h
     Simple linear Kalman filter.
     KalmanFilter.h
     Simple linear Kalman filter.
     
     linearAlgorithms-inst.h
     Templated algorithms that are used in multiple places in linear.
     linearAlgorithms-inst.h
     Templated algorithms that are used in multiple places in linear.
     
     linearExceptions.cpp
     Exceptions that may be thrown by linear solver components.
     linearExceptions.cpp
     Exceptions that may be thrown by linear solver components.
     
     linearExceptions.h
     Exceptions that may be thrown by linear solver components.
     linearExceptions.h
     Exceptions that may be thrown by linear solver components.
     
     LossFunctions.h
     LossFunctions.h
     
     NoiseModel.cpp
     NoiseModel.cpp
     
     NoiseModel.h
     NoiseModel.h
     
     PCGSolver.h
     PCGSolver.h
     
     PowerMethod.h
     Power method for fast eigenvalue and eigenvector computation.
     PowerMethod.h
     Power method for fast eigenvalue and eigenvector computation.
     
     Preconditioner.h
     Preconditioner.h
     
     RegularHessianFactor.h
     HessianFactor class with constant sized blocks.
     RegularHessianFactor.h
     HessianFactor class with constant sized blocks.
     
     RegularJacobianFactor.h
     JacobianFactor class with fixed sized blcoks.
     RegularJacobianFactor.h
     JacobianFactor class with fixed sized blcoks.
     
     Sampler.cpp
     sampling from a diagonal NoiseModel
     Sampler.cpp
     sampling from a diagonal NoiseModel
     
     Sampler.h
     sampling from a NoiseModel
     Sampler.h
     sampling from a NoiseModel
     
     Scatter.cpp
     Scatter.cpp
     
     Scatter.h
     Maps global variable indices to slot indices.
     Scatter.h
     Maps global variable indices to slot indices.
     
     SparseEigen.h
     Utilities for creating Eigen sparse matrices (gtsam::SparseEigen)
     SparseEigen.h
     Utilities for creating Eigen sparse matrices (gtsam::SparseEigen)
     
     SubgraphBuilder.cpp
     SubgraphBuilder.cpp
     
     SubgraphBuilder.h
     SubgraphBuilder.h
     
     SubgraphPreconditioner.cpp
     SubgraphPreconditioner.cpp
     
     SubgraphPreconditioner.h
     SubgraphPreconditioner.h
     
     SubgraphSolver.cpp
     Subgraph Solver from IROS 2010.
     SubgraphSolver.cpp
     Subgraph Solver from IROS 2010.
     
     SubgraphSolver.h
     Subgraph Solver from IROS 2010.
     SubgraphSolver.h
     Subgraph Solver from IROS 2010.
     
     VectorValues.cpp
     Implementations for VectorValues.
     VectorValues.cpp
     Implementations for VectorValues.
     
     VectorValues.h
     Factor Graph Values.
     VectorValues.h
     Factor Graph Values.
     
    \n
    \n
\n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_8b9ec42722111795f76d34c6471319a6.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_8b9ec42722111795f76d34c6471319a6.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,63 +1,63 @@\n var dir_8b9ec42722111795f76d34c6471319a6 = [\n- [\"AcceleratedPowerMethod.h\", \"a00890.html\", \"a00890\"],\n- [\"BinaryJacobianFactor.h\", \"a00785.html\", \"a00785\"],\n- [\"ConjugateGradientSolver.h\", \"a00734.html\", \"a00734\"],\n- [\"Errors.cpp\", \"a00740.html\", \"a00740\"],\n- [\"Errors.h\", \"a00749.html\", \"a00749\"],\n- [\"GaussianBayesNet.cpp\", \"a00755.html\", null],\n- [\"GaussianBayesNet.h\", \"a00860.html\", \"a00860\"],\n- [\"GaussianBayesTree-inl.h\", \"a00800.html\", null],\n- [\"GaussianBayesTree.cpp\", \"a00830.html\", null],\n- [\"GaussianBayesTree.h\", \"a00746.html\", \"a00746\"],\n- [\"GaussianConditional-inl.h\", \"a00839.html\", null],\n- [\"GaussianConditional.cpp\", \"a00707.html\", null],\n- [\"GaussianConditional.h\", \"a00779.html\", \"a00779\"],\n- [\"GaussianDensity.cpp\", \"a00761.html\", null],\n- [\"GaussianDensity.h\", \"a00836.html\", null],\n- [\"GaussianEliminationTree.cpp\", \"a00857.html\", null],\n- [\"GaussianEliminationTree.h\", \"a00716.html\", \"a00716\"],\n- [\"GaussianFactor.cpp\", \"a00845.html\", null],\n- [\"GaussianFactor.h\", \"a00725.html\", \"a00725\"],\n- [\"GaussianFactorGraph.cpp\", \"a00896.html\", \"a00896\"],\n- [\"GaussianFactorGraph.h\", \"a00872.html\", \"a00872\"],\n+ [\"AcceleratedPowerMethod.h\", \"a00794.html\", \"a00794\"],\n+ [\"BinaryJacobianFactor.h\", \"a00722.html\", \"a00722\"],\n+ [\"ConjugateGradientSolver.h\", \"a00884.html\", \"a00884\"],\n+ [\"Errors.cpp\", \"a00788.html\", \"a00788\"],\n+ [\"Errors.h\", \"a00896.html\", \"a00896\"],\n+ [\"GaussianBayesNet.cpp\", \"a00863.html\", null],\n+ [\"GaussianBayesNet.h\", \"a00764.html\", \"a00764\"],\n+ [\"GaussianBayesTree-inl.h\", \"a00824.html\", null],\n+ [\"GaussianBayesTree.cpp\", \"a00800.html\", null],\n+ [\"GaussianBayesTree.h\", \"a00752.html\", \"a00752\"],\n+ [\"GaussianConditional-inl.h\", \"a00845.html\", null],\n+ [\"GaussianConditional.cpp\", \"a00737.html\", null],\n+ [\"GaussianConditional.h\", \"a00872.html\", \"a00872\"],\n+ [\"GaussianDensity.cpp\", \"a00869.html\", null],\n+ [\"GaussianDensity.h\", \"a00758.html\", null],\n+ [\"GaussianEliminationTree.cpp\", \"a00878.html\", null],\n+ [\"GaussianEliminationTree.h\", \"a00746.html\", \"a00746\"],\n+ [\"GaussianFactor.cpp\", \"a00734.html\", null],\n+ [\"GaussianFactor.h\", \"a00731.html\", \"a00731\"],\n+ [\"GaussianFactorGraph.cpp\", \"a00887.html\", \"a00887\"],\n+ [\"GaussianFactorGraph.h\", \"a00815.html\", \"a00815\"],\n [\"GaussianISAM.h\", \"a00881.html\", \"a00881\"],\n- [\"GaussianJunctionTree.cpp\", \"a00866.html\", null],\n- [\"GaussianJunctionTree.h\", \"a00851.html\", null],\n- [\"HessianFactor-inl.h\", \"a00713.html\", null],\n- [\"HessianFactor.cpp\", \"a00788.html\", \"a00788\"],\n- [\"HessianFactor.h\", \"a00827.html\", \"a00827\"],\n- [\"iterative-inl.h\", \"a00737.html\", \"a00737\"],\n- [\"iterative.cpp\", \"a00878.html\", \"a00878\"],\n- [\"iterative.h\", \"a00887.html\", \"a00887\"],\n+ [\"GaussianJunctionTree.cpp\", \"a00854.html\", null],\n+ [\"GaussianJunctionTree.h\", \"a00875.html\", null],\n+ [\"HessianFactor-inl.h\", \"a00890.html\", null],\n+ [\"HessianFactor.cpp\", \"a00767.html\", \"a00767\"],\n+ [\"HessianFactor.h\", \"a00782.html\", \"a00782\"],\n+ [\"iterative-inl.h\", \"a00761.html\", \"a00761\"],\n+ [\"iterative.cpp\", \"a00716.html\", \"a00716\"],\n+ [\"iterative.h\", \"a00812.html\", \"a00812\"],\n [\"IterativeSolver.cpp\", \"a00797.html\", null],\n- [\"IterativeSolver.h\", \"a00767.html\", \"a00767\"],\n- [\"JacobianFactor-inl.h\", \"a00854_source.html\", null],\n- [\"JacobianFactor.cpp\", \"a00899.html\", \"a00899\"],\n- [\"JacobianFactor.h\", \"a00776.html\", \"a00776\"],\n- [\"KalmanFilter.cpp\", \"a00848.html\", null],\n- [\"KalmanFilter.h\", \"a00812.html\", \"a00812\"],\n- [\"linearAlgorithms-inst.h\", \"a00818.html\", \"a00818\"],\n- [\"linearExceptions.cpp\", \"a00743.html\", null],\n- [\"linearExceptions.h\", \"a00719.html\", \"a00719\"],\n- [\"LossFunctions.h\", \"a00821_source.html\", null],\n- [\"NoiseModel.cpp\", \"a00731.html\", null],\n- [\"NoiseModel.h\", \"a00875.html\", \"a00875\"],\n- [\"PCGSolver.h\", \"a00842_source.html\", null],\n- [\"PowerMethod.h\", \"a00728.html\", \"a00728\"],\n- [\"Preconditioner.h\", \"a00833_source.html\", null],\n- [\"RegularHessianFactor.h\", \"a00710.html\", \"a00710\"],\n- [\"RegularJacobianFactor.h\", \"a00773.html\", \"a00773\"],\n- [\"Sampler.cpp\", \"a00782.html\", null],\n- [\"Sampler.h\", \"a00758.html\", \"a00758\"],\n- [\"Scatter.cpp\", \"a00764.html\", null],\n- [\"Scatter.h\", \"a00791.html\", \"a00791\"],\n- [\"SparseEigen.h\", \"a00824.html\", \"a00824\"],\n- [\"SubgraphBuilder.cpp\", \"a00893.html\", \"a00893\"],\n- [\"SubgraphBuilder.h\", \"a00770.html\", \"a00770\"],\n- [\"SubgraphPreconditioner.cpp\", \"a00809.html\", null],\n- [\"SubgraphPreconditioner.h\", \"a00752.html\", \"a00752\"],\n- [\"SubgraphSolver.cpp\", \"a00884.html\", null],\n- [\"SubgraphSolver.h\", \"a00806.html\", \"a00806\"],\n- [\"VectorValues.cpp\", \"a00722.html\", null],\n- [\"VectorValues.h\", \"a00704.html\", \"a00704\"]\n+ [\"IterativeSolver.h\", \"a00857.html\", \"a00857\"],\n+ [\"JacobianFactor-inl.h\", \"a00740_source.html\", null],\n+ [\"JacobianFactor.cpp\", \"a00821.html\", \"a00821\"],\n+ [\"JacobianFactor.h\", \"a00719.html\", \"a00719\"],\n+ [\"KalmanFilter.cpp\", \"a00839.html\", null],\n+ [\"KalmanFilter.h\", \"a00791.html\", \"a00791\"],\n+ [\"linearAlgorithms-inst.h\", \"a00833.html\", \"a00833\"],\n+ [\"linearExceptions.cpp\", \"a00899.html\", null],\n+ [\"linearExceptions.h\", \"a00770.html\", \"a00770\"],\n+ [\"LossFunctions.h\", \"a00803_source.html\", null],\n+ [\"NoiseModel.cpp\", \"a00773.html\", null],\n+ [\"NoiseModel.h\", \"a00827.html\", \"a00827\"],\n+ [\"PCGSolver.h\", \"a00818_source.html\", null],\n+ [\"PowerMethod.h\", \"a00755.html\", \"a00755\"],\n+ [\"Preconditioner.h\", \"a00848_source.html\", null],\n+ [\"RegularHessianFactor.h\", \"a00866.html\", \"a00866\"],\n+ [\"RegularJacobianFactor.h\", \"a00743.html\", \"a00743\"],\n+ [\"Sampler.cpp\", \"a00704.html\", null],\n+ [\"Sampler.h\", \"a00707.html\", \"a00707\"],\n+ [\"Scatter.cpp\", \"a00806.html\", null],\n+ [\"Scatter.h\", \"a00779.html\", \"a00779\"],\n+ [\"SparseEigen.h\", \"a00725.html\", \"a00725\"],\n+ [\"SubgraphBuilder.cpp\", \"a00749.html\", \"a00749\"],\n+ [\"SubgraphBuilder.h\", \"a00830.html\", \"a00830\"],\n+ [\"SubgraphPreconditioner.cpp\", \"a00836.html\", null],\n+ [\"SubgraphPreconditioner.h\", \"a00842.html\", \"a00842\"],\n+ [\"SubgraphSolver.cpp\", \"a00851.html\", null],\n+ [\"SubgraphSolver.h\", \"a00710.html\", \"a00710\"],\n+ [\"VectorValues.cpp\", \"a00785.html\", null],\n+ [\"VectorValues.h\", \"a00893.html\", \"a00893\"]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_be4965403b556e5d04a57d44231dfb01.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_be4965403b556e5d04a57d44231dfb01.html", "unified_diff": "@@ -99,192 +99,192 @@\n
    \n
    geometry Directory Reference
    \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-\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 \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+\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 Files

     BearingRange.h
     Bearing-Range product.
     BearingRange.h
     Bearing-Range product.
     
     Cal3.cpp
     Common code for all calibration models.
     Cal3.cpp
     Common code for all calibration models.
     
     Cal3.h
     Common code for all Calibration models.
     Cal3.h
     Common code for all Calibration models.
     
     Cal3_S2.cpp
     The most common 5DOF 3D->2D calibration.
     Cal3_S2.cpp
     The most common 5DOF 3D->2D calibration.
     
     Cal3_S2.h
     The most common 5DOF 3D->2D calibration.
     Cal3_S2.h
     The most common 5DOF 3D->2D calibration.
     
     Cal3_S2Stereo.cpp
     The most common 5DOF 3D->2D calibration + Stereo baseline.
     Cal3_S2Stereo.cpp
     The most common 5DOF 3D->2D calibration + Stereo baseline.
     
     Cal3_S2Stereo.h
     The most common 5DOF 3D->2D calibration + Stereo baseline.
     
     Cal3Bundler.cpp
     Cal3Bundler.cpp
     
     Cal3Bundler.h
     Calibration used by Bundler.
     Cal3Bundler.h
     Calibration used by Bundler.
     
     Cal3DS2.cpp
     Cal3DS2.cpp
     
     Cal3DS2.h
     Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.
     Cal3DS2.h
     Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.
     
     Cal3DS2_Base.cpp
     Cal3DS2_Base.cpp
     
     Cal3DS2_Base.h
     Cal3DS2_Base.h
     
     Cal3Fisheye.cpp
     Cal3Fisheye.cpp
     
     Cal3Fisheye.h
     Calibration of a fisheye camera.
     Cal3Fisheye.h
     Calibration of a fisheye camera.
     
     Cal3Unified.cpp
     Cal3Unified.cpp
     
     Cal3Unified.h
     Unified Calibration Model, see Mei07icra for details.
     Cal3Unified.h
     Unified Calibration Model, see Mei07icra for details.
     
     CalibratedCamera.cpp
     Calibrated camera for which only pose is unknown.
     CalibratedCamera.cpp
     Calibrated camera for which only pose is unknown.
     
     CalibratedCamera.h
     Calibrated camera for which only pose is unknown.
     CalibratedCamera.h
     Calibrated camera for which only pose is unknown.
     
     CameraSet.h
     Base class to create smart factors on poses or cameras.
     CameraSet.h
     Base class to create smart factors on poses or cameras.
     
     concepts.h
     Concept-checking macros for geometric objects Each macro instantiates a concept check structure, which includes a static function that will fail to compile if the concept does not pass.
     
     Cyclic.cpp
     Cyclic group implementation.
     Cyclic.cpp
     Cyclic group implementation.
     
     Cyclic.h
     Cyclic group, i.e., the integers modulo N.
     Cyclic.h
     Cyclic group, i.e., the integers modulo N.
     
     EssentialMatrix.h
     EssentialMatrix.h
     
     Line3.h
     4 dimensional manifold of 3D lines
     Line3.h
     4 dimensional manifold of 3D lines
     
     OrientedPlane3.h
     OrientedPlane3.h
     
     PinholeCamera.h
     Base class for all pinhole cameras.
     PinholeCamera.h
     Base class for all pinhole cameras.
     
     PinholePose.h
     Pinhole camera with known calibration.
     PinholePose.h
     Pinhole camera with known calibration.
     
     PinholeSet.h
     A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera.
     PinholeSet.h
     A CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera.
     
     Point2.cpp
     2D Point
     Point2.cpp
     2D Point
     
     Point2.h
     2D Point
     Point2.h
     2D Point
     
     Point3.cpp
     3D Point
     Point3.cpp
     3D Point
     
     Point3.h
     3D Point
     Point3.h
     3D Point
     
     Pose2.cpp
     2D Pose
     Pose2.cpp
     2D Pose
     
     Pose2.h
     2D Pose
     Pose2.h
     2D Pose
     
     Pose3.cpp
     3D Pose
     Pose3.cpp
     3D Pose
     
     Pose3.h
     3D Pose
     Pose3.h
     3D Pose
     
     Quaternion.h
     Lie Group wrapper for Eigen Quaternions.
     Quaternion.h
     Lie Group wrapper for Eigen Quaternions.
     
     Rot2.cpp
     2D Rotations
     Rot2.cpp
     2D Rotations
     
     Rot2.h
     2D rotation
     Rot2.h
     2D rotation
     
     Rot3.cpp
     Rotation, common code between Rotation matrix and Quaternion.
     Rot3.cpp
     Rotation, common code between Rotation matrix and Quaternion.
     
     Rot3.h
     3D rotation represented as a rotation matrix or quaternion
     Rot3.h
     3D rotation represented as a rotation matrix or quaternion
     
     Rot3M.cpp
     Rotation (internal: 3*3 matrix representation*)
     Rot3M.cpp
     Rotation (internal: 3*3 matrix representation*)
     
     Rot3Q.cpp
     Rotation (internal: quaternion representation*)
     Rot3Q.cpp
     Rotation (internal: quaternion representation*)
     
     Similarity2.cpp
     Implementation of Similarity2 transform.
     Similarity2.cpp
     Implementation of Similarity2 transform.
     
     Similarity2.h
     Implementation of Similarity2 transform.
     Similarity2.h
     Implementation of Similarity2 transform.
     
     Similarity3.cpp
     Implementation of Similarity3 transform.
     Similarity3.cpp
     Implementation of Similarity3 transform.
     
     Similarity3.h
     Implementation of Similarity3 transform.
     Similarity3.h
     Implementation of Similarity3 transform.
     
     SimpleCamera.cpp
     A simple camera class with a Cal3_S2 calibration.
     SimpleCamera.cpp
     A simple camera class with a Cal3_S2 calibration.
     
     SimpleCamera.h
     A simple camera class with a Cal3_S2 calibration.
     SimpleCamera.h
     A simple camera class with a Cal3_S2 calibration.
     
     SO3.cpp
     3*3 matrix representation of SO(3)
     SO3.cpp
     3*3 matrix representation of SO(3)
     
     SO3.h
     3*3 matrix representation of SO(3)
     SO3.h
     3*3 matrix representation of SO(3)
     
     SO4.cpp
     4*4 matrix representation of SO(4)
     
     SO4.h
     4*4 matrix representation of SO(4)
     SO4.h
     4*4 matrix representation of SO(4)
     
     SOn-inl.h
     Template implementations for SO(n)
     SOn-inl.h
     Template implementations for SO(n)
     
     SOn.cpp
     Definitions of dynamic specializations of SO(n)
     SOn.cpp
     Definitions of dynamic specializations of SO(n)
     
     SOn.h
     N*N matrix representation of SO(N).
     SOn.h
     N*N matrix representation of SO(N).
     
     SphericalCamera.h
     Calibrated camera with spherical projection.
     SphericalCamera.h
     Calibrated camera with spherical projection.
     
     StereoCamera.h
     A Stereo Camera based on two Simple Cameras.
     StereoCamera.h
     A Stereo Camera based on two Simple Cameras.
     
     StereoPoint2.cpp
     StereoPoint2.cpp
     
     StereoPoint2.h
     A 2D stereo point (uL,uR,v)
     StereoPoint2.h
     A 2D stereo point (uL,uR,v)
     
     triangulation.h
     Functions for triangulation.
     
     Unit3.h
     Unit3.h
     
    \n
    \n
\n \n
\n
    \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_be4965403b556e5d04a57d44231dfb01.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_be4965403b556e5d04a57d44231dfb01.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,65 +1,65 @@\n var dir_be4965403b556e5d04a57d44231dfb01 = [\n- [\"BearingRange.h\", \"a00281.html\", \"a00281\"],\n- [\"Cal3.cpp\", \"a00446.html\", null],\n- [\"Cal3.h\", \"a00293.html\", \"a00293\"],\n- [\"Cal3_S2.cpp\", \"a00314.html\", null],\n- [\"Cal3_S2.h\", \"a00359.html\", \"a00359\"],\n- [\"Cal3_S2Stereo.cpp\", \"a00413.html\", null],\n+ [\"BearingRange.h\", \"a00350.html\", \"a00350\"],\n+ [\"Cal3.cpp\", \"a00329.html\", null],\n+ [\"Cal3.h\", \"a00365.html\", \"a00365\"],\n+ [\"Cal3_S2.cpp\", \"a00275.html\", null],\n+ [\"Cal3_S2.h\", \"a00386.html\", \"a00386\"],\n+ [\"Cal3_S2Stereo.cpp\", \"a00464.html\", null],\n [\"Cal3_S2Stereo.h\", \"a00419.html\", \"a00419\"],\n- [\"Cal3Bundler.cpp\", \"a00404.html\", null],\n- [\"Cal3Bundler.h\", \"a00467.html\", \"a00467\"],\n- [\"Cal3DS2.cpp\", \"a00335.html\", null],\n- [\"Cal3DS2.h\", \"a00371.html\", \"a00371\"],\n- [\"Cal3DS2_Base.cpp\", \"a00296.html\", null],\n- [\"Cal3DS2_Base.h\", \"a00275_source.html\", null],\n- [\"Cal3Fisheye.cpp\", \"a00347.html\", null],\n- [\"Cal3Fisheye.h\", \"a00356.html\", \"a00356\"],\n- [\"Cal3Unified.cpp\", \"a00287.html\", null],\n- [\"Cal3Unified.h\", \"a00380.html\", \"a00380\"],\n- [\"CalibratedCamera.cpp\", \"a00431.html\", null],\n- [\"CalibratedCamera.h\", \"a00368.html\", \"a00368\"],\n- [\"CameraSet.h\", \"a00383.html\", \"a00383\"],\n+ [\"Cal3Bundler.cpp\", \"a00398.html\", null],\n+ [\"Cal3Bundler.h\", \"a00320.html\", \"a00320\"],\n+ [\"Cal3DS2.cpp\", \"a00290.html\", null],\n+ [\"Cal3DS2.h\", \"a00296.html\", \"a00296\"],\n+ [\"Cal3DS2_Base.cpp\", \"a00470.html\", null],\n+ [\"Cal3DS2_Base.h\", \"a00302_source.html\", null],\n+ [\"Cal3Fisheye.cpp\", \"a00326.html\", null],\n+ [\"Cal3Fisheye.h\", \"a00476.html\", \"a00476\"],\n+ [\"Cal3Unified.cpp\", \"a00395.html\", null],\n+ [\"Cal3Unified.h\", \"a00434.html\", \"a00434\"],\n+ [\"CalibratedCamera.cpp\", \"a00407.html\", null],\n+ [\"CalibratedCamera.h\", \"a00359.html\", \"a00359\"],\n+ [\"CameraSet.h\", \"a00317.html\", \"a00317\"],\n [\"concepts.h\", \"a08128.html\", \"a08128\"],\n- [\"Cyclic.cpp\", \"a00437.html\", null],\n- [\"Cyclic.h\", \"a00350.html\", \"a00350\"],\n- [\"EssentialMatrix.h\", \"a00398_source.html\", null],\n- [\"Line3.h\", \"a00464.html\", \"a00464\"],\n- [\"OrientedPlane3.h\", \"a00284_source.html\", null],\n- [\"PinholeCamera.h\", \"a00458.html\", \"a00458\"],\n- [\"PinholePose.h\", \"a00377.html\", \"a00377\"],\n- [\"PinholeSet.h\", \"a00323.html\", \"a00323\"],\n- [\"Point2.cpp\", \"a00320.html\", \"a00320\"],\n- [\"Point2.h\", \"a00476.html\", \"a00476\"],\n- [\"Point3.cpp\", \"a00362.html\", \"a00362\"],\n- [\"Point3.h\", \"a00407.html\", \"a00407\"],\n- [\"Pose2.cpp\", \"a00374.html\", null],\n- [\"Pose2.h\", \"a00278.html\", \"a00278\"],\n- [\"Pose3.cpp\", \"a00428.html\", null],\n- [\"Pose3.h\", \"a00410.html\", \"a00410\"],\n- [\"Quaternion.h\", \"a00401.html\", \"a00401\"],\n- [\"Rot2.cpp\", \"a00422.html\", null],\n- [\"Rot2.h\", \"a00395.html\", \"a00395\"],\n- [\"Rot3.cpp\", \"a00449.html\", \"a00449\"],\n- [\"Rot3.h\", \"a00332.html\", \"a00332\"],\n- [\"Rot3M.cpp\", \"a00341.html\", null],\n- [\"Rot3Q.cpp\", \"a00302.html\", null],\n- [\"Similarity2.cpp\", \"a00386.html\", null],\n- [\"Similarity2.h\", \"a00461.html\", \"a00461\"],\n- [\"Similarity3.cpp\", \"a00311.html\", null],\n- [\"Similarity3.h\", \"a00329.html\", \"a00329\"],\n- [\"SimpleCamera.cpp\", \"a00365.html\", null],\n- [\"SimpleCamera.h\", \"a00425.html\", \"a00425\"],\n- [\"SO3.cpp\", \"a00434.html\", \"a00434\"],\n- [\"SO3.h\", \"a00470.html\", \"a00470\"],\n+ [\"Cyclic.cpp\", \"a00428.html\", null],\n+ [\"Cyclic.h\", \"a00332.html\", \"a00332\"],\n+ [\"EssentialMatrix.h\", \"a00404_source.html\", null],\n+ [\"Line3.h\", \"a00437.html\", \"a00437\"],\n+ [\"OrientedPlane3.h\", \"a00353_source.html\", null],\n+ [\"PinholeCamera.h\", \"a00371.html\", \"a00371\"],\n+ [\"PinholePose.h\", \"a00308.html\", \"a00308\"],\n+ [\"PinholeSet.h\", \"a00311.html\", \"a00311\"],\n+ [\"Point2.cpp\", \"a00356.html\", \"a00356\"],\n+ [\"Point2.h\", \"a00431.html\", \"a00431\"],\n+ [\"Point3.cpp\", \"a00401.html\", \"a00401\"],\n+ [\"Point3.h\", \"a00383.html\", \"a00383\"],\n+ [\"Pose2.cpp\", \"a00323.html\", null],\n+ [\"Pose2.h\", \"a00284.html\", \"a00284\"],\n+ [\"Pose3.cpp\", \"a00479.html\", null],\n+ [\"Pose3.h\", \"a00278.html\", \"a00278\"],\n+ [\"Quaternion.h\", \"a00458.html\", \"a00458\"],\n+ [\"Rot2.cpp\", \"a00344.html\", null],\n+ [\"Rot2.h\", \"a00413.html\", \"a00413\"],\n+ [\"Rot3.cpp\", \"a00347.html\", \"a00347\"],\n+ [\"Rot3.h\", \"a00287.html\", \"a00287\"],\n+ [\"Rot3M.cpp\", \"a00299.html\", null],\n+ [\"Rot3Q.cpp\", \"a00380.html\", null],\n+ [\"Similarity2.cpp\", \"a00473.html\", null],\n+ [\"Similarity2.h\", \"a00455.html\", \"a00455\"],\n+ [\"Similarity3.cpp\", \"a00338.html\", null],\n+ [\"Similarity3.h\", \"a00314.html\", \"a00314\"],\n+ [\"SimpleCamera.cpp\", \"a00410.html\", null],\n+ [\"SimpleCamera.h\", \"a00293.html\", \"a00293\"],\n+ [\"SO3.cpp\", \"a00425.html\", \"a00425\"],\n+ [\"SO3.h\", \"a00461.html\", \"a00461\"],\n [\"SO4.cpp\", \"a00305.html\", \"a00305\"],\n- [\"SO4.h\", \"a00455.html\", \"a00455\"],\n- [\"SOn-inl.h\", \"a00290.html\", null],\n- [\"SOn.cpp\", \"a00353.html\", null],\n- [\"SOn.h\", \"a00344.html\", \"a00344\"],\n- [\"SphericalCamera.h\", \"a00392.html\", \"a00392\"],\n- [\"StereoCamera.h\", \"a00308.html\", \"a00308\"],\n- [\"StereoPoint2.cpp\", \"a00440.html\", null],\n- [\"StereoPoint2.h\", \"a00479.html\", \"a00479\"],\n+ [\"SO4.h\", \"a00374.html\", \"a00374\"],\n+ [\"SOn-inl.h\", \"a00449.html\", null],\n+ [\"SOn.cpp\", \"a00440.html\", null],\n+ [\"SOn.h\", \"a00389.html\", \"a00389\"],\n+ [\"SphericalCamera.h\", \"a00416.html\", \"a00416\"],\n+ [\"StereoCamera.h\", \"a00341.html\", \"a00341\"],\n+ [\"StereoPoint2.cpp\", \"a00392.html\", null],\n+ [\"StereoPoint2.h\", \"a00422.html\", \"a00422\"],\n [\"triangulation.h\", \"a00452.html\", \"a00452\"],\n- [\"Unit3.h\", \"a00326_source.html\", null]\n+ [\"Unit3.h\", \"a00335_source.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_bfc28a2d5821421c95e1320e4031f515.html", "source2": "./usr/share/doc/libgtsam-dev/html/dir_bfc28a2d5821421c95e1320e4031f515.html", "unified_diff": "@@ -128,19 +128,19 @@\n  slam\n  \n  symbolic\n  \n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n \n \n \n

    \n Files

     global_includes.h
     Included from all GTSAM files.
     global_includes.h
     Included from all GTSAM files.
     
     precompiled_header.cpp
     We need exactly one compilation unit that includes the precompiled headers.
     precompiled_header.cpp
     We need exactly one compilation unit that includes the precompiled headers.
     
     precompiled_header.h
     >
     
    \n
\n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/dir_bfc28a2d5821421c95e1320e4031f515.js", "source2": "./usr/share/doc/libgtsam-dev/html/dir_bfc28a2d5821421c95e1320e4031f515.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -8,11 +8,11 @@\n [\"linear\", \"dir_8b9ec42722111795f76d34c6471319a6.html\", \"dir_8b9ec42722111795f76d34c6471319a6\"],\n [\"navigation\", \"dir_57fcdbb68a7ed4352200f5cc9c5d1fe3.html\", \"dir_57fcdbb68a7ed4352200f5cc9c5d1fe3\"],\n [\"nonlinear\", \"dir_88adea47575c2d5c40d4070390572b66.html\", \"dir_88adea47575c2d5c40d4070390572b66\"],\n [\"sam\", \"dir_1ce53dc14c347e490e16ecaf87fe4631.html\", \"dir_1ce53dc14c347e490e16ecaf87fe4631\"],\n [\"sfm\", \"dir_76df0d5ddca8353881dcb68d9cbdfd25.html\", \"dir_76df0d5ddca8353881dcb68d9cbdfd25\"],\n [\"slam\", \"dir_323e70a1eef083399c870cf8a6035771.html\", \"dir_323e70a1eef083399c870cf8a6035771\"],\n [\"symbolic\", \"dir_0e8eb460b7f775f5eda250a12ea9d76a.html\", \"dir_0e8eb460b7f775f5eda250a12ea9d76a\"],\n- [\"global_includes.h\", \"a01406.html\", null],\n- [\"precompiled_header.cpp\", \"a01403.html\", null],\n+ [\"global_includes.h\", \"a01400.html\", null],\n+ [\"precompiled_header.cpp\", \"a01394.html\", null],\n [\"precompiled_header.h\", \"a01397.html\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/files.html", "source2": "./usr/share/doc/libgtsam-dev/html/files.html", "unified_diff": "@@ -100,474 +100,474 @@\n
File List
\n \n
\n
Here is a list of all documented files with brief descriptions:
\n
[detail level 123]
\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-\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+\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+\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+\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 \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-\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+\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+\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+\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+\n+\n+\n+\n+\n+\n \n
  gtsam
  base
 chartTesting.h
 cholesky.cppEfficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky
 cholesky.hEfficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky
 chartTesting.h
 cholesky.cppEfficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky
 cholesky.hEfficient incomplete Cholesky on rank-deficient matrices, todo: constrained Cholesky
 concepts.h
 ConcurrentMap.h
 debug.cppGlobal debugging flags
 debug.hGlobal debugging flags
 ConcurrentMap.h
 debug.cppGlobal debugging flags
 debug.hGlobal debugging flags
 DSFMap.hAllow for arbitrary type in DSF
 DSFVector.cppFaster implementation for DSF, which uses vector rather than btree
 DSFVector.hA faster implementation for DSF, which uses vector rather than btree
 FastDefaultAllocator.hAn easy way to control which allocator is used for Fast* collections
 FastList.hA thin wrapper around std::list that uses boost's fast_pool_allocator
 FastMap.hA thin wrapper around std::map that uses boost's fast_pool_allocator
 FastSet.hA thin wrapper around std::set that uses boost's fast_pool_allocator
 FastVector.hA thin wrapper around std::vector that uses a custom allocator
 GenericValue.h
 Group.hConcept check class for variable types with Group properties
 Lie.hBase class and basic functions for Lie types
 lieProxies.hProvides convenient mappings of common member functions for testing
 make_shared.hMake_shared trampoline function to ensure proper alignment
 Manifold.hBase class and basic functions for Manifold types
 Matrix.cppMatrix class
 Matrix.hTypedef and functions to augment Eigen's MatrixXd
 MatrixSerialization.hSerialization for matrices
 numericalDerivative.hSome functions to compute numerical derivatives
 OptionalJacobian.hSpecial class for optional Jacobian arguments
 ProductLieGroup.hGroup product of two Lie Groups
 serialization.hConvenience functions for serializing data structures via boost.serialization
 serializationTestHelpers.h
 SymmetricBlockMatrix.cppAccess to matrices via blocks of pre-defined sizes
 SymmetricBlockMatrix.hAccess to matrices via blocks of pre-defined sizes
 Testable.hConcept check for values that can be used in unit tests
 TestableAssertions.hProvides additional testing facilities for common data structures
 testLie.h
 ThreadsafeException.hBase exception type that uses tbb_allocator if GTSAM is compiled with TBB
 timing.cppTiming utilities
 timing.hTiming utilities
 treeTraversal-inst.h
 types.cppFunctions for handling type information
 types.hTypedefs for easier changing of types
 DSFVector.cppFaster implementation for DSF, which uses vector rather than btree
 DSFVector.hA faster implementation for DSF, which uses vector rather than btree
 FastDefaultAllocator.hAn easy way to control which allocator is used for Fast* collections
 FastList.hA thin wrapper around std::list that uses boost's fast_pool_allocator
 FastMap.hA thin wrapper around std::map that uses boost's fast_pool_allocator
 FastSet.hA thin wrapper around std::set that uses boost's fast_pool_allocator
 FastVector.hA thin wrapper around std::vector that uses a custom allocator
 GenericValue.h
 Group.hConcept check class for variable types with Group properties
 Lie.hBase class and basic functions for Lie types
 lieProxies.hProvides convenient mappings of common member functions for testing
 make_shared.hMake_shared trampoline function to ensure proper alignment
 Manifold.hBase class and basic functions for Manifold types
 Matrix.cppMatrix class
 Matrix.hTypedef and functions to augment Eigen's MatrixXd
 MatrixSerialization.hSerialization for matrices
 numericalDerivative.hSome functions to compute numerical derivatives
 OptionalJacobian.hSpecial class for optional Jacobian arguments
 ProductLieGroup.hGroup product of two Lie Groups
 serialization.hConvenience functions for serializing data structures via boost.serialization
 serializationTestHelpers.h
 SymmetricBlockMatrix.cppAccess to matrices via blocks of pre-defined sizes
 SymmetricBlockMatrix.hAccess to matrices via blocks of pre-defined sizes
 Testable.hConcept check for values that can be used in unit tests
 TestableAssertions.hProvides additional testing facilities for common data structures
 testLie.h
 ThreadsafeException.hBase exception type that uses tbb_allocator if GTSAM is compiled with TBB
 timing.cppTiming utilities
 timing.hTiming utilities
 treeTraversal-inst.h
 types.cppFunctions for handling type information
 types.hTypedefs for easier changing of types
 utilities.h
 Value.hThe base class for any variable that can be optimized or used in a factor
 Vector.cppTypedef and functions to augment Eigen's Vectors
 Vector.hTypedef and functions to augment Eigen's VectorXd
 VectorSerialization.hSerialization for Vectors
 VectorSpace.h
 VerticalBlockMatrix.cppA matrix with column blocks of pre-defined sizes
 VerticalBlockMatrix.hA matrix with column blocks of pre-defined sizes
 WeightedSampler.hFast sampling without replacement
 Value.hThe base class for any variable that can be optimized or used in a factor
 Vector.cppTypedef and functions to augment Eigen's Vectors
 Vector.hTypedef and functions to augment Eigen's VectorXd
 VectorSerialization.hSerialization for Vectors
 VectorSpace.h
 VerticalBlockMatrix.cppA matrix with column blocks of pre-defined sizes
 VerticalBlockMatrix.hA matrix with column blocks of pre-defined sizes
 WeightedSampler.hFast sampling without replacement
  basis
 Basis.hCompute an interpolating basis
 BasisFactors.hFactor definitions for various Basis functors
 Chebyshev.cppChebyshev basis decompositions
 Basis.hCompute an interpolating basis
 BasisFactors.hFactor definitions for various Basis functors
 Chebyshev.cppChebyshev basis decompositions
 Chebyshev.hChebyshev basis decompositions
 Chebyshev2.cppChebyshev parameterizations on Chebyshev points of second kind
 Chebyshev2.cppChebyshev parameterizations on Chebyshev points of second kind
 Chebyshev2.hPseudo-spectral parameterization for Chebyshev polynomials of the second kind
 FitBasis.hFit a Basis using least-squares
 Fourier.hFourier decomposition, see e.g
 ParameterMatrix.hDefine ParameterMatrix class which is used to store values at interpolation points
 FitBasis.hFit a Basis using least-squares
 Fourier.hFourier decomposition, see e.g
 ParameterMatrix.hDefine ParameterMatrix class which is used to store values at interpolation points
  discrete
 AlgebraicDecisionTree.cpp
 AlgebraicDecisionTree.hAlgebraic Decision Trees
 Assignment.hAn assignment from labels to a discrete value index (size_t)
 DecisionTree-inl.h
 DecisionTree.hDecision Tree for use in DiscreteFactors
 DecisionTreeFactor.cppDiscrete factor
 DecisionTreeFactor.h
 DiscreteBayesNet.cpp
 DiscreteBayesNet.h
 DiscreteBayesTree.cppDiscrete Bayes Tree, the result of eliminating a DiscreteJunctionTree
 DiscreteBayesTree.hDiscrete Bayes Tree, the result of eliminating a DiscreteJunctionTree
 DiscreteConditional.cpp
 DiscreteConditional.h
 DiscreteDistribution.cpp
 DiscreteDistribution.h
 DiscreteEliminationTree.cpp
 DiscreteEliminationTree.h
 DiscreteFactor.cppDiscrete factor
 DiscreteFactor.h
 DiscreteFactorGraph.cpp
 DiscreteFactorGraph.h
 AlgebraicDecisionTree.cpp
 AlgebraicDecisionTree.hAlgebraic Decision Trees
 Assignment.hAn assignment from labels to a discrete value index (size_t)
 DecisionTree-inl.h
 DecisionTree.hDecision Tree for use in DiscreteFactors
 DecisionTreeFactor.cppDiscrete factor
 DecisionTreeFactor.h
 DiscreteBayesNet.cpp
 DiscreteBayesNet.h
 DiscreteBayesTree.cppDiscrete Bayes Tree, the result of eliminating a DiscreteJunctionTree
 DiscreteBayesTree.hDiscrete Bayes Tree, the result of eliminating a DiscreteJunctionTree
 DiscreteConditional.cpp
 DiscreteConditional.h
 DiscreteDistribution.cpp
 DiscreteDistribution.h
 DiscreteEliminationTree.cpp
 DiscreteEliminationTree.h
 DiscreteFactor.cppDiscrete factor
 DiscreteFactor.h
 DiscreteFactorGraph.cpp
 DiscreteFactorGraph.h
 DiscreteJunctionTree.cpp
 DiscreteJunctionTree.h
 DiscreteKey.hSpecialized key for discrete variables
 DiscreteLookupDAG.cpp
 DiscreteLookupDAG.h
 DiscreteMarginals.hA class for computing marginals in a DiscreteFactorGraph
 DiscreteValues.cpp
 DiscreteValues.h
 Signature.cppSignatures for conditional densities
 Signature.hSignatures for conditional densities
 DiscreteJunctionTree.h
 DiscreteKey.hSpecialized key for discrete variables
 DiscreteLookupDAG.cpp
 DiscreteLookupDAG.h
 DiscreteMarginals.hA class for computing marginals in a DiscreteFactorGraph
 DiscreteValues.cpp
 DiscreteValues.h
 Signature.cppSignatures for conditional densities
 Signature.hSignatures for conditional densities
  geometry
 BearingRange.hBearing-Range product
 Cal3.cppCommon code for all calibration models
 Cal3.hCommon code for all Calibration models
 Cal3_S2.cppThe most common 5DOF 3D->2D calibration
 Cal3_S2.hThe most common 5DOF 3D->2D calibration
 Cal3_S2Stereo.cppThe most common 5DOF 3D->2D calibration + Stereo baseline
 BearingRange.hBearing-Range product
 Cal3.cppCommon code for all calibration models
 Cal3.hCommon code for all Calibration models
 Cal3_S2.cppThe most common 5DOF 3D->2D calibration
 Cal3_S2.hThe most common 5DOF 3D->2D calibration
 Cal3_S2Stereo.cppThe most common 5DOF 3D->2D calibration + Stereo baseline
 Cal3_S2Stereo.hThe most common 5DOF 3D->2D calibration + Stereo baseline
 Cal3Bundler.cpp
 Cal3Bundler.hCalibration used by Bundler
 Cal3DS2.cpp
 Cal3DS2.hCalibration of a camera with radial distortion, calculations in base class Cal3DS2_Base
 Cal3DS2_Base.cpp
 Cal3DS2_Base.h
 Cal3Fisheye.cpp
 Cal3Fisheye.hCalibration of a fisheye camera
 Cal3Unified.cpp
 Cal3Unified.hUnified Calibration Model, see Mei07icra for details
 CalibratedCamera.cppCalibrated camera for which only pose is unknown
 CalibratedCamera.hCalibrated camera for which only pose is unknown
 CameraSet.hBase class to create smart factors on poses or cameras
 Cal3Bundler.cpp
 Cal3Bundler.hCalibration used by Bundler
 Cal3DS2.cpp
 Cal3DS2.hCalibration of a camera with radial distortion, calculations in base class Cal3DS2_Base
 Cal3DS2_Base.cpp
 Cal3DS2_Base.h
 Cal3Fisheye.cpp
 Cal3Fisheye.hCalibration of a fisheye camera
 Cal3Unified.cpp
 Cal3Unified.hUnified Calibration Model, see Mei07icra for details
 CalibratedCamera.cppCalibrated camera for which only pose is unknown
 CalibratedCamera.hCalibrated camera for which only pose is unknown
 CameraSet.hBase class to create smart factors on poses or cameras
 concepts.hConcept-checking macros for geometric objects Each macro instantiates a concept check structure, which includes a static function that will fail to compile if the concept does not pass
 Cyclic.cppCyclic group implementation
 Cyclic.hCyclic group, i.e., the integers modulo N
 EssentialMatrix.h
 Line3.h4 dimensional manifold of 3D lines
 OrientedPlane3.h
 PinholeCamera.hBase class for all pinhole cameras
 PinholePose.hPinhole camera with known calibration
 PinholeSet.hA CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera
 Point2.cpp2D Point
 Point2.h2D Point
 Point3.cpp3D Point
 Point3.h3D Point
 Pose2.cpp2D Pose
 Pose2.h2D Pose
 Pose3.cpp3D Pose
 Pose3.h3D Pose
 Quaternion.hLie Group wrapper for Eigen Quaternions
 Rot2.cpp2D Rotations
 Rot2.h2D rotation
 Rot3.cppRotation, common code between Rotation matrix and Quaternion
 Rot3.h3D rotation represented as a rotation matrix or quaternion
 Rot3M.cppRotation (internal: 3*3 matrix representation*)
 Rot3Q.cppRotation (internal: quaternion representation*)
 Similarity2.cppImplementation of Similarity2 transform
 Similarity2.hImplementation of Similarity2 transform
 Similarity3.cppImplementation of Similarity3 transform
 Similarity3.hImplementation of Similarity3 transform
 SimpleCamera.cppA simple camera class with a Cal3_S2 calibration
 SimpleCamera.hA simple camera class with a Cal3_S2 calibration
 SO3.cpp3*3 matrix representation of SO(3)
 SO3.h3*3 matrix representation of SO(3)
 Cyclic.cppCyclic group implementation
 Cyclic.hCyclic group, i.e., the integers modulo N
 EssentialMatrix.h
 Line3.h4 dimensional manifold of 3D lines
 OrientedPlane3.h
 PinholeCamera.hBase class for all pinhole cameras
 PinholePose.hPinhole camera with known calibration
 PinholeSet.hA CameraSet of either CalibratedCamera, PinholePose, or PinholeCamera
 Point2.cpp2D Point
 Point2.h2D Point
 Point3.cpp3D Point
 Point3.h3D Point
 Pose2.cpp2D Pose
 Pose2.h2D Pose
 Pose3.cpp3D Pose
 Pose3.h3D Pose
 Quaternion.hLie Group wrapper for Eigen Quaternions
 Rot2.cpp2D Rotations
 Rot2.h2D rotation
 Rot3.cppRotation, common code between Rotation matrix and Quaternion
 Rot3.h3D rotation represented as a rotation matrix or quaternion
 Rot3M.cppRotation (internal: 3*3 matrix representation*)
 Rot3Q.cppRotation (internal: quaternion representation*)
 Similarity2.cppImplementation of Similarity2 transform
 Similarity2.hImplementation of Similarity2 transform
 Similarity3.cppImplementation of Similarity3 transform
 Similarity3.hImplementation of Similarity3 transform
 SimpleCamera.cppA simple camera class with a Cal3_S2 calibration
 SimpleCamera.hA simple camera class with a Cal3_S2 calibration
 SO3.cpp3*3 matrix representation of SO(3)
 SO3.h3*3 matrix representation of SO(3)
 SO4.cpp4*4 matrix representation of SO(4)
 SO4.h4*4 matrix representation of SO(4)
 SOn-inl.hTemplate implementations for SO(n)
 SOn.cppDefinitions of dynamic specializations of SO(n)
 SOn.hN*N matrix representation of SO(N)
 SphericalCamera.hCalibrated camera with spherical projection
 StereoCamera.hA Stereo Camera based on two Simple Cameras
 StereoPoint2.cpp
 StereoPoint2.hA 2D stereo point (uL,uR,v)
 SO4.h4*4 matrix representation of SO(4)
 SOn-inl.hTemplate implementations for SO(n)
 SOn.cppDefinitions of dynamic specializations of SO(n)
 SOn.hN*N matrix representation of SO(N)
 SphericalCamera.hCalibrated camera with spherical projection
 StereoCamera.hA Stereo Camera based on two Simple Cameras
 StereoPoint2.cpp
 StereoPoint2.hA 2D stereo point (uL,uR,v)
 triangulation.hFunctions for triangulation
 Unit3.h
 Unit3.h
  hybrid
 GaussianMixture.cppA hybrid conditional in the Conditional Linear Gaussian scheme
 GaussianMixture.hA hybrid conditional in the Conditional Linear Gaussian scheme
 GaussianMixtureFactor.cppA set of Gaussian factors indexed by a set of discrete keys
 GaussianMixtureFactor.hA set of GaussianFactors, indexed by a set of discrete keys
 HybridBayesNet.cppA Bayes net of Gaussian Conditionals indexed by discrete keys
 HybridBayesNet.hA Bayes net of Gaussian Conditionals indexed by discrete keys
 HybridBayesTree.cppHybrid Bayes Tree, the result of eliminating a HybridJunctionTree
 HybridBayesTree.hHybrid Bayes Tree, the result of eliminating a HybridJunctionTree
 HybridConditional.cpp
 HybridConditional.h
 HybridEliminationTree.cpp
 HybridEliminationTree.h
 HybridFactor.cpp
 HybridFactor.h
 HybridFactorGraph.cppFactor graph with utilities for hybrid factors
 HybridFactorGraph.hFactor graph with utilities for hybrid factors
 HybridGaussianFactorGraph.cppHybrid factor graph that uses type erasure
 HybridGaussianFactorGraph.hLinearized Hybrid factor graph that uses type erasure
 HybridGaussianISAM.h
 HybridJunctionTree.cpp
 HybridJunctionTree.h
 HybridNonlinearFactorGraph.cppNonlinear hybrid factor graph that uses type erasure
 HybridNonlinearFactorGraph.hNonlinear hybrid factor graph that uses type erasure
 HybridNonlinearISAM.cpp
 HybridNonlinearISAM.h
 HybridSmoother.cppAn incremental smoother for hybrid factor graphs
 HybridSmoother.hAn incremental smoother for hybrid factor graphs
 HybridValues.h
 MixtureFactor.hNonlinear Mixture factor of continuous and discrete
 GaussianMixture.cppA hybrid conditional in the Conditional Linear Gaussian scheme
 GaussianMixture.hA hybrid conditional in the Conditional Linear Gaussian scheme
 GaussianMixtureFactor.cppA set of Gaussian factors indexed by a set of discrete keys
 GaussianMixtureFactor.hA set of GaussianFactors, indexed by a set of discrete keys
 HybridBayesNet.cppA Bayes net of Gaussian Conditionals indexed by discrete keys
 HybridBayesNet.hA Bayes net of Gaussian Conditionals indexed by discrete keys
 HybridBayesTree.cppHybrid Bayes Tree, the result of eliminating a HybridJunctionTree
 HybridBayesTree.hHybrid Bayes Tree, the result of eliminating a HybridJunctionTree
 HybridConditional.cpp
 HybridConditional.h
 HybridEliminationTree.cpp
 HybridEliminationTree.h
 HybridFactor.cpp
 HybridFactor.h
 HybridFactorGraph.cppFactor graph with utilities for hybrid factors
 HybridFactorGraph.hFactor graph with utilities for hybrid factors
 HybridGaussianFactorGraph.cppHybrid factor graph that uses type erasure
 HybridGaussianFactorGraph.hLinearized Hybrid factor graph that uses type erasure
 HybridGaussianISAM.h
 HybridJunctionTree.cpp
 HybridJunctionTree.h
 HybridNonlinearFactorGraph.cppNonlinear hybrid factor graph that uses type erasure
 HybridNonlinearFactorGraph.hNonlinear hybrid factor graph that uses type erasure
 HybridNonlinearISAM.cpp
 HybridNonlinearISAM.h
 HybridSmoother.cppAn incremental smoother for hybrid factor graphs
 HybridSmoother.hAn incremental smoother for hybrid factor graphs
 HybridValues.h
 MixtureFactor.hNonlinear Mixture factor of continuous and discrete
  inference
 BayesNet-inst.h
 BayesNet.hBayes network
 BayesTree-inst.hBayes Tree is a tree of cliques of a Bayes Chain
 BayesTree.cppBayes Tree is a tree of cliques of a Bayes Chain
 BayesTree.hBayes Tree is a tree of cliques of a Bayes Chain
 BayesNet-inst.h
 BayesNet.hBayes network
 BayesTree-inst.hBayes Tree is a tree of cliques of a Bayes Chain
 BayesTree.cppBayes Tree is a tree of cliques of a Bayes Chain
 BayesTree.hBayes Tree is a tree of cliques of a Bayes Chain
 BayesTreeCliqueBase-inst.hBase class for cliques of a BayesTree
 BayesTreeCliqueBase.hBase class for cliques of a BayesTree
 ClusterTree-inst.hCollects factorgraph fragments defined on variable clusters, arranged in a tree
 ClusterTree.hCollects factorgraph fragments defined on variable clusters, arranged in a tree
 Conditional-inst.h
 Conditional.hBase class for conditional densities
 DotWriter.cppGraphviz formatting for factor graphs
 DotWriter.hGraphviz formatter
 EliminateableFactorGraph-inst.h
 EliminateableFactorGraph.hVariable elimination algorithms for factor graphs
 EliminationTree-inst.h
 EliminationTree.h
 Factor.cppThe base class for all factors
 Factor.hThe base class for all factors
 FactorGraph-inst.hFactor Graph Base Class
 FactorGraph.hFactor Graph Base Class
 graph-inl.h
 graph.hGraph algorithm using boost library
 inference-inst.hContains generic inference algorithms that convert between templated graphical models, i.e., factor graphs, Bayes nets, and Bayes trees
 inferenceExceptions.hExceptions that may be thrown by inference algorithms
 ISAM-inst.hIncremental update functionality (iSAM) for BayesTree
 ISAM.hIncremental update functionality (iSAM) for BayesTree
 BayesTreeCliqueBase.hBase class for cliques of a BayesTree
 ClusterTree-inst.hCollects factorgraph fragments defined on variable clusters, arranged in a tree
 ClusterTree.hCollects factorgraph fragments defined on variable clusters, arranged in a tree
 Conditional-inst.h
 Conditional.hBase class for conditional densities
 DotWriter.cppGraphviz formatting for factor graphs
 DotWriter.hGraphviz formatter
 EliminateableFactorGraph-inst.h
 EliminateableFactorGraph.hVariable elimination algorithms for factor graphs
 EliminationTree-inst.h
 EliminationTree.h
 Factor.cppThe base class for all factors
 Factor.hThe base class for all factors
 FactorGraph-inst.hFactor Graph Base Class
 FactorGraph.hFactor Graph Base Class
 graph-inl.h
 graph.hGraph algorithm using boost library
 inference-inst.hContains generic inference algorithms that convert between templated graphical models, i.e., factor graphs, Bayes nets, and Bayes trees
 inferenceExceptions.hExceptions that may be thrown by inference algorithms
 ISAM-inst.hIncremental update functionality (iSAM) for BayesTree
 ISAM.hIncremental update functionality (iSAM) for BayesTree
 JunctionTree-inst.hThe junction tree, template bodies
 JunctionTree.hThe junction tree
 Key.h
 LabeledSymbol.h
 MetisIndex-inl.h
 MetisIndex.h
 Ordering.cpp
 Ordering.hVariable ordering for the elimination algorithm
 Symbol.cpp
 JunctionTree.hThe junction tree
 Key.h
 LabeledSymbol.h
 MetisIndex-inl.h
 MetisIndex.h
 Ordering.cpp
 Ordering.hVariable ordering for the elimination algorithm
 Symbol.cpp
 Symbol.h
 VariableIndex-inl.h
 VariableIndex.cpp
 VariableIndex-inl.h
 VariableIndex.cpp
 VariableIndex.h
 VariableSlots.cpp
 VariableSlots.hVariableSlots describes the structure of a combined factor in terms of where each block comes from in the source factors
 VariableSlots.cpp
 VariableSlots.hVariableSlots describes the structure of a combined factor in terms of where each block comes from in the source factors
  linear
 AcceleratedPowerMethod.hAccelerated power method for fast eigenvalue and eigenvector computation
 BinaryJacobianFactor.hA binary JacobianFactor specialization that uses fixed matrix math for speed
 ConjugateGradientSolver.hImplementation of Conjugate Gradient solver for a linear system
 Errors.cppFactor Graph Values
 Errors.hVector of errors
 GaussianBayesNet.cppChordal Bayes Net, the result of eliminating a factor graph
 GaussianBayesNet.hChordal Bayes Net, the result of eliminating a factor graph
 GaussianBayesTree-inl.hGaussian Bayes Tree, the result of eliminating a GaussianJunctionTree
 GaussianBayesTree.cppGaussian Bayes Tree, the result of eliminating a GaussianJunctionTree
 GaussianBayesTree.hGaussian Bayes Tree, the result of eliminating a GaussianJunctionTree
 GaussianConditional-inl.hConditional Gaussian Base class
 GaussianConditional.cppConditional Gaussian Base class
 GaussianConditional.hConditional Gaussian Base class
 GaussianDensity.cppA Gaussian Density
 GaussianDensity.hA Gaussian Density
 GaussianEliminationTree.cpp
 GaussianEliminationTree.h
 GaussianFactor.cppA factor with a quadratic error function - a Gaussian
 GaussianFactor.hA factor with a quadratic error function - a Gaussian
 GaussianFactorGraph.cppLinear Factor Graph where all factors are Gaussians
 GaussianFactorGraph.hLinear Factor Graph where all factors are Gaussians
 AcceleratedPowerMethod.hAccelerated power method for fast eigenvalue and eigenvector computation
 BinaryJacobianFactor.hA binary JacobianFactor specialization that uses fixed matrix math for speed
 ConjugateGradientSolver.hImplementation of Conjugate Gradient solver for a linear system
 Errors.cppFactor Graph Values
 Errors.hVector of errors
 GaussianBayesNet.cppChordal Bayes Net, the result of eliminating a factor graph
 GaussianBayesNet.hChordal Bayes Net, the result of eliminating a factor graph
 GaussianBayesTree-inl.hGaussian Bayes Tree, the result of eliminating a GaussianJunctionTree
 GaussianBayesTree.cppGaussian Bayes Tree, the result of eliminating a GaussianJunctionTree
 GaussianBayesTree.hGaussian Bayes Tree, the result of eliminating a GaussianJunctionTree
 GaussianConditional-inl.hConditional Gaussian Base class
 GaussianConditional.cppConditional Gaussian Base class
 GaussianConditional.hConditional Gaussian Base class
 GaussianDensity.cppA Gaussian Density
 GaussianDensity.hA Gaussian Density
 GaussianEliminationTree.cpp
 GaussianEliminationTree.h
 GaussianFactor.cppA factor with a quadratic error function - a Gaussian
 GaussianFactor.hA factor with a quadratic error function - a Gaussian
 GaussianFactorGraph.cppLinear Factor Graph where all factors are Gaussians
 GaussianFactorGraph.hLinear Factor Graph where all factors are Gaussians
 GaussianISAM.h
 GaussianJunctionTree.cpp
 GaussianJunctionTree.h
 HessianFactor-inl.hContains the HessianFactor class, a general quadratic factor
 HessianFactor.cpp
 HessianFactor.hContains the HessianFactor class, a general quadratic factor
 iterative-inl.hIterative methods, template implementation
 iterative.cppIterative methods, implementation
 iterative.hIterative methods, implementation
 GaussianJunctionTree.cpp
 GaussianJunctionTree.h
 HessianFactor-inl.hContains the HessianFactor class, a general quadratic factor
 HessianFactor.cpp
 HessianFactor.hContains the HessianFactor class, a general quadratic factor
 iterative-inl.hIterative methods, template implementation
 iterative.cppIterative methods, implementation
 iterative.hIterative methods, implementation
 IterativeSolver.cppSome support classes for iterative solvers
 IterativeSolver.hSome support classes for iterative solvers
 JacobianFactor-inl.h
 JacobianFactor.cpp
 JacobianFactor.h
 KalmanFilter.cppSimple linear Kalman filter
 KalmanFilter.hSimple linear Kalman filter
 linearAlgorithms-inst.hTemplated algorithms that are used in multiple places in linear
 linearExceptions.cppExceptions that may be thrown by linear solver components
 linearExceptions.hExceptions that may be thrown by linear solver components
 LossFunctions.h
 NoiseModel.cpp
 NoiseModel.h
 PCGSolver.h
 PowerMethod.hPower method for fast eigenvalue and eigenvector computation
 Preconditioner.h
 RegularHessianFactor.hHessianFactor class with constant sized blocks
 RegularJacobianFactor.hJacobianFactor class with fixed sized blcoks
 Sampler.cppSampling from a diagonal NoiseModel
 Sampler.hSampling from a NoiseModel
 Scatter.cpp
 Scatter.hMaps global variable indices to slot indices
 SparseEigen.hUtilities for creating Eigen sparse matrices (gtsam::SparseEigen)
 SubgraphBuilder.cpp
 SubgraphBuilder.h
 SubgraphPreconditioner.cpp
 SubgraphPreconditioner.h
 SubgraphSolver.cppSubgraph Solver from IROS 2010
 SubgraphSolver.hSubgraph Solver from IROS 2010
 VectorValues.cppImplementations for VectorValues
 VectorValues.hFactor Graph Values
 IterativeSolver.hSome support classes for iterative solvers
 JacobianFactor-inl.h
 JacobianFactor.cpp
 JacobianFactor.h
 KalmanFilter.cppSimple linear Kalman filter
 KalmanFilter.hSimple linear Kalman filter
 linearAlgorithms-inst.hTemplated algorithms that are used in multiple places in linear
 linearExceptions.cppExceptions that may be thrown by linear solver components
 linearExceptions.hExceptions that may be thrown by linear solver components
 LossFunctions.h
 NoiseModel.cpp
 NoiseModel.h
 PCGSolver.h
 PowerMethod.hPower method for fast eigenvalue and eigenvector computation
 Preconditioner.h
 RegularHessianFactor.hHessianFactor class with constant sized blocks
 RegularJacobianFactor.hJacobianFactor class with fixed sized blcoks
 Sampler.cppSampling from a diagonal NoiseModel
 Sampler.hSampling from a NoiseModel
 Scatter.cpp
 Scatter.hMaps global variable indices to slot indices
 SparseEigen.hUtilities for creating Eigen sparse matrices (gtsam::SparseEigen)
 SubgraphBuilder.cpp
 SubgraphBuilder.h
 SubgraphPreconditioner.cpp
 SubgraphPreconditioner.h
 SubgraphSolver.cppSubgraph Solver from IROS 2010
 SubgraphSolver.hSubgraph Solver from IROS 2010
 VectorValues.cppImplementations for VectorValues
 VectorValues.hFactor Graph Values
  navigation
 AHRSFactor.cpp
 AHRSFactor.h
 AHRSFactor.cpp
 AHRSFactor.h
 AttitudeFactor.cppImplementation file for Attitude factor
 AttitudeFactor.hHeader file for Attitude factor
 BarometricFactor.cppImplementation file for Barometric factor
 BarometricFactor.hHeader file for Barometric factor
 CombinedImuFactor.cpp
 CombinedImuFactor.h
 ConstantVelocityFactor.hMaintain a constant velocity motion model between two NavStates
 AttitudeFactor.hHeader file for Attitude factor
 BarometricFactor.cppImplementation file for Barometric factor
 BarometricFactor.hHeader file for Barometric factor
 CombinedImuFactor.cpp
 CombinedImuFactor.h
 ConstantVelocityFactor.hMaintain a constant velocity motion model between two NavStates
 expressions.hCommon expressions for solving navigation problems
 GPSFactor.cppImplementation file for GPS factor
 GPSFactor.hHeader file for GPS factor
 ImuBias.cpp
 ImuBias.h
 ImuFactor.cpp
 ImuFactor.h
 MagFactor.hFactors involving magnetometers
 MagPoseFactor.h
 ManifoldPreintegration.cpp
 ManifoldPreintegration.h
 NavState.hNavigation state composing of attitude, position, and velocity
 PreintegratedRotation.cpp
 PreintegratedRotation.h
 PreintegrationBase.h
 PreintegrationParams.h
 Scenario.hSimple class to test navigation scenarios
 ScenarioRunner.hSimple class to test navigation scenarios
 TangentPreintegration.cpp
 TangentPreintegration.h
 GPSFactor.hHeader file for GPS factor
 ImuBias.cpp
 ImuBias.h
 ImuFactor.cpp
 ImuFactor.h
 MagFactor.hFactors involving magnetometers
 MagPoseFactor.h
 ManifoldPreintegration.cpp
 ManifoldPreintegration.h
 NavState.hNavigation state composing of attitude, position, and velocity
 PreintegratedRotation.cpp
 PreintegratedRotation.h
 PreintegrationBase.h
 PreintegrationParams.h
 Scenario.hSimple class to test navigation scenarios
 ScenarioRunner.hSimple class to test navigation scenarios
 TangentPreintegration.cpp
 TangentPreintegration.h
  nonlinear
 CustomFactor.cppClass to enable arbitrary factors with runtime swappable error function
 CustomFactor.hClass to enable arbitrary factors with runtime swappable error function
 DoglegOptimizer.cpp
 DoglegOptimizer.h
 DoglegOptimizerImpl.hNonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)
 Expression-inl.hInternals for Expression.h, not for general consumption
 Expression.hExpressions for Block Automatic Differentiation
 ExpressionFactor.h
 ExpressionFactorGraph.hFactor graph that supports adding ExpressionFactors directly
 CustomFactor.cppClass to enable arbitrary factors with runtime swappable error function
 CustomFactor.hClass to enable arbitrary factors with runtime swappable error function
 DoglegOptimizer.cpp
 DoglegOptimizer.h
 DoglegOptimizerImpl.hNonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)
 Expression-inl.hInternals for Expression.h, not for general consumption
 Expression.hExpressions for Block Automatic Differentiation
 ExpressionFactor.h
 ExpressionFactorGraph.hFactor graph that supports adding ExpressionFactors directly
 expressions.hCommon expressions, both linear and non-linear
 expressionTesting.hTest harness methods for expressions
 ExtendedKalmanFilter-inl.hClass to perform generic Kalman Filtering using nonlinear factor graphs
 ExtendedKalmanFilter.hClass to perform generic Kalman Filtering using nonlinear factor graphs
 factorTesting.hEvaluate derivatives of a nonlinear factor numerically
 FunctorizedFactor.h
 GaussNewtonOptimizer.cpp
 GaussNewtonOptimizer.h
 GncOptimizer.hThe GncOptimizer class
 GncParams.h
 GraphvizFormatting.cppGraphviz formatter for NonlinearFactorGraph
 GraphvizFormatting.hGraphviz formatter for NonlinearFactorGraph
 ISAM2-impl.cppIncremental update functionality (ISAM2) for BayesTree, with fluid relinearization
 ISAM2-impl.hIncremental update functionality (ISAM2) for BayesTree, with fluid relinearization
 ISAM2.cppIncremental update functionality (ISAM2) for BayesTree, with fluid relinearization
 ISAM2.hIncremental update functionality (ISAM2) for BayesTree, with fluid relinearization
 ISAM2Clique.cppSpecialized iSAM2 Clique
 ISAM2Clique.hSpecialized iSAM2 Clique
 ISAM2Params.cppParameters for iSAM 2
 ISAM2Params.hParameters for iSAM 2
 ISAM2Result.hClass that stores detailed iSAM2 result
 ISAM2UpdateParams.hClass that stores extra params for ISAM2::update()
 LevenbergMarquardtOptimizer.cppA nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme
 LevenbergMarquardtOptimizer.hA nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme
 LevenbergMarquardtParams.cppParameters for Levenberg-Marquardt trust-region scheme
 LevenbergMarquardtParams.hParameters for Levenberg-Marquardt trust-region scheme
 LinearContainerFactor.cpp
 LinearContainerFactor.hWrap Jacobian and Hessian linear factors to allow simple injection into a nonlinear graph
 Marginals.cpp
 Marginals.hA class for computing marginals in a NonlinearFactorGraph
 NonlinearConjugateGradientOptimizer.cppSimple non-linear optimizer that solves using non-preconditioned CG
 NonlinearConjugateGradientOptimizer.hSimple non-linear optimizer that solves using non-preconditioned CG
 NonlinearEquality.h
 nonlinearExceptions.hExceptions that may be thrown by nonlinear optimization components
 NonlinearFactor.cppNonlinear Factor base classes
 NonlinearFactor.hNon-linear factor base classes
 NonlinearFactorGraph.cppFactor Graph Consisting of non-linear factors
 NonlinearFactorGraph.hFactor Graph consisting of non-linear factors
 expressionTesting.hTest harness methods for expressions
 ExtendedKalmanFilter-inl.hClass to perform generic Kalman Filtering using nonlinear factor graphs
 ExtendedKalmanFilter.hClass to perform generic Kalman Filtering using nonlinear factor graphs
 factorTesting.hEvaluate derivatives of a nonlinear factor numerically
 FunctorizedFactor.h
 GaussNewtonOptimizer.cpp
 GaussNewtonOptimizer.h
 GncOptimizer.hThe GncOptimizer class
 GncParams.h
 GraphvizFormatting.cppGraphviz formatter for NonlinearFactorGraph
 GraphvizFormatting.hGraphviz formatter for NonlinearFactorGraph
 ISAM2-impl.cppIncremental update functionality (ISAM2) for BayesTree, with fluid relinearization
 ISAM2-impl.hIncremental update functionality (ISAM2) for BayesTree, with fluid relinearization
 ISAM2.cppIncremental update functionality (ISAM2) for BayesTree, with fluid relinearization
 ISAM2.hIncremental update functionality (ISAM2) for BayesTree, with fluid relinearization
 ISAM2Clique.cppSpecialized iSAM2 Clique
 ISAM2Clique.hSpecialized iSAM2 Clique
 ISAM2Params.cppParameters for iSAM 2
 ISAM2Params.hParameters for iSAM 2
 ISAM2Result.hClass that stores detailed iSAM2 result
 ISAM2UpdateParams.hClass that stores extra params for ISAM2::update()
 LevenbergMarquardtOptimizer.cppA nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme
 LevenbergMarquardtOptimizer.hA nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme
 LevenbergMarquardtParams.cppParameters for Levenberg-Marquardt trust-region scheme
 LevenbergMarquardtParams.hParameters for Levenberg-Marquardt trust-region scheme
 LinearContainerFactor.cpp
 LinearContainerFactor.hWrap Jacobian and Hessian linear factors to allow simple injection into a nonlinear graph
 Marginals.cpp
 Marginals.hA class for computing marginals in a NonlinearFactorGraph
 NonlinearConjugateGradientOptimizer.cppSimple non-linear optimizer that solves using non-preconditioned CG
 NonlinearConjugateGradientOptimizer.hSimple non-linear optimizer that solves using non-preconditioned CG
 NonlinearEquality.h
 nonlinearExceptions.hExceptions that may be thrown by nonlinear optimization components
 NonlinearFactor.cppNonlinear Factor base classes
 NonlinearFactor.hNon-linear factor base classes
 NonlinearFactorGraph.cppFactor Graph Consisting of non-linear factors
 NonlinearFactorGraph.hFactor Graph consisting of non-linear factors
 NonlinearISAM.cpp
 NonlinearISAM.h
 NonlinearOptimizer.cppConvergence functions not dependent on graph types
 NonlinearOptimizer.hBase class and parameters for nonlinear optimization algorithms
 NonlinearOptimizerParams.cppParameters for nonlinear optimization
 NonlinearOptimizerParams.hParameters for nonlinear optimization
 NonlinearISAM.h
 NonlinearOptimizer.cppConvergence functions not dependent on graph types
 NonlinearOptimizer.hBase class and parameters for nonlinear optimization algorithms
 NonlinearOptimizerParams.cppParameters for nonlinear optimization
 NonlinearOptimizerParams.hParameters for nonlinear optimization
 PriorFactor.h
 Symbol.hSymbol.h was moved to inference directory, this header was retained for compatibility
 utilities.hContains generic global functions designed particularly for the matlab interface
 Values-inl.h
 Values.hA non-templated config holding any types of Manifold-group elements
 WhiteNoiseFactor.hBinary white noise factor
 Values-inl.h
 Values.hA non-templated config holding any types of Manifold-group elements
 WhiteNoiseFactor.hBinary white noise factor
  sam
 BearingFactor.hSerializable factor induced by a bearing measurement
 BearingRangeFactor.hSingle factor contains both the bearing and the range to prevent handle to pair bearing and range factors
 RangeFactor.hSerializable factor induced by a range measurement
  sfm
 BinaryMeasurement.hBinary measurement represents a measurement between two keys in a graph. A binary measurement is similar to a BetweenFactor, except that it does not contain an error function. It is a measurement (along with a noise model) from one key to another. Note that the direction is important. A measurement from key1 to key2 is not the same as the same measurement from key2 to key1
 DsfTrackGenerator.cppIdentifies connected components in the keypoint matches graph
 DsfTrackGenerator.hIdentifies connected components in the keypoint matches graph
 MFAS.cppSource file for the MFAS class
 MFAS.hMFAS class to solve Minimum Feedback Arc Set graph problem
 SfmData.cppData structure for dealing with Structure from Motion data
 SfmData.hData structure for dealing with Structure from Motion data
 BinaryMeasurement.hBinary measurement represents a measurement between two keys in a graph. A binary measurement is similar to a BetweenFactor, except that it does not contain an error function. It is a measurement (along with a noise model) from one key to another. Note that the direction is important. A measurement from key1 to key2 is not the same as the same measurement from key2 to key1
 DsfTrackGenerator.cppIdentifies connected components in the keypoint matches graph
 DsfTrackGenerator.hIdentifies connected components in the keypoint matches graph
 MFAS.cppSource file for the MFAS class
 MFAS.hMFAS class to solve Minimum Feedback Arc Set graph problem
 SfmData.cppData structure for dealing with Structure from Motion data
 SfmData.hData structure for dealing with Structure from Motion data
 SfmTrack.cppA simple data structure for a track in Structure from Motion
 SfmTrack.hA simple data structure for a track in Structure from Motion
 ShonanAveraging.cppShonan Averaging algorithm
 ShonanAveraging.hShonan Averaging algorithm
 ShonanFactor.hMain factor type in Shonan averaging, on SO(n) pairs
 ShonanGaugeFactor.hFactor used in Shonan Averaging to clamp down gauge freedom
 TranslationFactor.hBinary factor for a relative translation direction measurement
 TranslationRecovery.cppSource code for recovering translations when rotations are given
 SfmTrack.hA simple data structure for a track in Structure from Motion
 ShonanAveraging.cppShonan Averaging algorithm
 ShonanAveraging.hShonan Averaging algorithm
 ShonanFactor.hMain factor type in Shonan averaging, on SO(n) pairs
 ShonanGaugeFactor.hFactor used in Shonan Averaging to clamp down gauge freedom
 TranslationFactor.hBinary factor for a relative translation direction measurement
 TranslationRecovery.cppSource code for recovering translations when rotations are given
 TranslationRecovery.hRecovering translations in an epipolar graph when rotations are given
  slam
 AntiFactor.h
 AntiFactor.h
 BearingFactor.h
 BearingRangeFactor.h
 BetweenFactor.h
 BoundingConstraint.hProvides partially implemented constraints to implement bounds
 dataset.cppUtility functions for loading datasets
 dataset.hUtility functions for loading datasets
 EssentialMatrixConstraint.cpp
 EssentialMatrixConstraint.h
 EssentialMatrixFactor.h
 BetweenFactor.h
 BoundingConstraint.hProvides partially implemented constraints to implement bounds
 dataset.cppUtility functions for loading datasets
 dataset.hUtility functions for loading datasets
 EssentialMatrixConstraint.cpp
 EssentialMatrixConstraint.h
 EssentialMatrixFactor.h
 expressions.hCommon expressions for solving geometry/slam/sfm problems
 FrobeniusFactor.cppVarious factors that minimize some Frobenius norm
 FrobeniusFactor.hVarious factors that minimize some Frobenius norm
 GeneralSFMFactor.hGeneral SFM factor with an unknown calibration
 InitializePose.hCommon code between lago.* (2D) and InitializePose3.* (3D)
 InitializePose3.cpp
 InitializePose3.hInitialize Pose3 in a factor graph
 JacobianFactorQ.h
 JacobianFactorQR.h
 JacobianFactorSVD.h
 KarcherMeanFactor-inl.h
 KarcherMeanFactor.h
 lago.hInitialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph Optimization)
 OrientedPlane3Factor.h
 PoseRotationPrior.hImplements a prior on the rotation component of a pose
 PoseTranslationPrior.hImplements a prior on the translation component of a pose
 FrobeniusFactor.cppVarious factors that minimize some Frobenius norm
 FrobeniusFactor.hVarious factors that minimize some Frobenius norm
 GeneralSFMFactor.hGeneral SFM factor with an unknown calibration
 InitializePose.hCommon code between lago.* (2D) and InitializePose3.* (3D)
 InitializePose3.cpp
 InitializePose3.hInitialize Pose3 in a factor graph
 JacobianFactorQ.h
 JacobianFactorQR.h
 JacobianFactorSVD.h
 KarcherMeanFactor-inl.h
 KarcherMeanFactor.h
 lago.hInitialize Pose2 in a factor graph using LAGO (Linear Approximation for Graph Optimization)
 OrientedPlane3Factor.h
 PoseRotationPrior.hImplements a prior on the rotation component of a pose
 PoseTranslationPrior.hImplements a prior on the translation component of a pose
 PriorFactor.h
 ProjectionFactor.hReprojection of a LANDMARK to a 2D point
 ProjectionFactor.hReprojection of a LANDMARK to a 2D point
 RangeFactor.h
 ReferenceFrameFactor.h
 RegularImplicitSchurFactor.hA subclass of GaussianFactor specialized to structureless SFM
 RotateFactor.h
 SmartFactorBase.hBase class to create smart factors on poses or cameras
 SmartFactorParams.hCollect common parameters for SmartProjection and SmartStereoProjection factors
 SmartProjectionFactor.hSmart factor on cameras (pose + calibration)
 SmartProjectionPoseFactor.hSmart factor on poses, assuming camera calibration is fixed
 SmartProjectionRigFactor.hSmart factor on poses, assuming camera calibration is fixed
 StereoFactor.hA non-linear factor for stereo measurements
 TriangulationFactor.h
 RegularImplicitSchurFactor.hA subclass of GaussianFactor specialized to structureless SFM
 RotateFactor.h
 SmartFactorBase.hBase class to create smart factors on poses or cameras
 SmartFactorParams.hCollect common parameters for SmartProjection and SmartStereoProjection factors
 SmartProjectionFactor.hSmart factor on cameras (pose + calibration)
 SmartProjectionPoseFactor.hSmart factor on poses, assuming camera calibration is fixed
 SmartProjectionRigFactor.hSmart factor on poses, assuming camera calibration is fixed
 StereoFactor.hA non-linear factor for stereo measurements
 TriangulationFactor.h
  symbolic
 SymbolicBayesNet.cpp
 SymbolicBayesNet.h
 SymbolicBayesTree.h
 SymbolicConditional.cpp
 SymbolicConditional.h
 SymbolicEliminationTree.cpp
 SymbolicEliminationTree.h
 SymbolicFactor-inst.h
 SymbolicFactor.cpp
 SymbolicFactor.h
 SymbolicFactorGraph.cpp
 SymbolicFactorGraph.h
 SymbolicISAM.cpp
 SymbolicISAM.h
 SymbolicJunctionTree.cpp
 SymbolicJunctionTree.h
 global_includes.hIncluded from all GTSAM files
 precompiled_header.cppWe need exactly one compilation unit that includes the precompiled headers
 SymbolicBayesNet.cpp
 SymbolicBayesNet.h
 SymbolicBayesTree.h
 SymbolicConditional.cpp
 SymbolicConditional.h
 SymbolicEliminationTree.cpp
 SymbolicEliminationTree.h
 SymbolicFactor-inst.h
 SymbolicFactor.cpp
 SymbolicFactor.h
 SymbolicFactorGraph.cpp
 SymbolicFactorGraph.h
 SymbolicISAM.cpp
 SymbolicISAM.h
 SymbolicJunctionTree.cpp
 SymbolicJunctionTree.h
 global_includes.hIncluded from all GTSAM files
 precompiled_header.cppWe need exactly one compilation unit that includes the precompiled headers
 precompiled_header.h>
\n
\n
\n \n \n
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/globals.html", "source2": "./usr/share/doc/libgtsam-dev/html/globals.html", "unified_diff": "@@ -94,24 +94,24 @@\n
\n \n \n \n \n
\n
Here is a list of all documented file members with links to the documentation:
\n
\n \n \n
\n
    \n
  • Generated on Tue Jan 9 2024 05:51:35 for gtsam by \"doxygen\"/ 1.9.8
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/globals_defs.html", "source2": "./usr/share/doc/libgtsam-dev/html/globals_defs.html", "unified_diff": "@@ -94,24 +94,24 @@\n
\n \n \n \n \n
\n
Here is a list of all documented macros with links to the documentation:
\n
\n \n \n
\n
    \n
  • Generated on Tue Jan 9 2024 05:51:35 for gtsam by \"doxygen\"/ 1.9.8
  • \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/gtsam.tag.gz", "source2": "./usr/share/doc/libgtsam-dev/html/gtsam.tag.gz", "unified_diff": null, "details": [{"source1": "gtsam.tag", "source2": "gtsam.tag", "unified_diff": null, "details": [{"source1": "gtsam.tag", "source2": "gtsam.tag", "unified_diff": "@@ -1,265 +1,265 @@\n \n \n \n cholesky.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00050.html\n- gtsam/base/cholesky.h\n- gtsam/base/timing.h\n+ a00068.html\n+ gtsam/base/cholesky.h\n+ gtsam/base/timing.h\n gtsam\n \n \n cholesky.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00125.html\n- gtsam/base/Matrix.h\n+ a00008.html\n+ gtsam/base/Matrix.h\n gtsam\n \n \n concepts.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n a08128.html\n- gtsam/base/Matrix.h\n+ gtsam/base/Matrix.h\n gtsam::PoseConcept\n gtsam\n \n #define\n GTSAM_CONCEPT_POSE_INST\n a08128.html\n a1ac1dbb1c81293b35cbab7722ac657ac\n (T)\n \n \n \n debug.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00032.html\n- gtsam/base/debug.h\n+ a00101.html\n+ gtsam/base/debug.h\n gtsam\n \n \n debug.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00008.html\n- gtsam/base/FastMap.h\n- gtsam/global_includes.h\n+ a00053.html\n+ gtsam/base/FastMap.h\n+ gtsam/global_includes.h\n gtsam\n \n \n DSFMap.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n a00116.html\n gtsam::DSFMap\n gtsam::DSFMap::Entry\n gtsam::IndexPair\n gtsam\n \n \n DSFVector.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00044.html\n- gtsam/base/DSFVector.h\n+ a00125.html\n+ gtsam/base/DSFVector.h\n gtsam\n \n \n DSFVector.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00077.html\n- gtsam/global_includes.h\n+ a00032.html\n+ gtsam/global_includes.h\n gtsam::DSFBase\n gtsam::DSFVector\n gtsam\n \n \n FastDefaultAllocator.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00017.html\n+ a00041.html\n gtsam::internal::FastDefaultAllocator\n gtsam::internal::FastDefaultVectorAllocator\n gtsam\n \n \n FastList.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00014.html\n- gtsam/base/FastDefaultAllocator.h\n+ a00086.html\n+ gtsam/base/FastDefaultAllocator.h\n gtsam::FastList\n gtsam\n \n \n FastMap.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00149.html\n- gtsam/base/FastDefaultAllocator.h\n+ a00035.html\n+ gtsam/base/FastDefaultAllocator.h\n gtsam::FastMap\n gtsam\n \n \n FastSet.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00062.html\n- gtsam/base/FastDefaultAllocator.h\n- gtsam/base/Testable.h\n+ a00092.html\n+ gtsam/base/FastDefaultAllocator.h\n+ gtsam/base/Testable.h\n gtsam::FastSet\n gtsam\n \n \n FastVector.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00083.html\n- gtsam/base/FastDefaultAllocator.h\n+ a00080.html\n+ gtsam/base/FastDefaultAllocator.h\n gtsam\n \n \n Group.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00065.html\n- gtsam/base/Testable.h\n+ a00056.html\n+ gtsam/base/Testable.h\n gtsam::group_tag\n gtsam::multiplicative_group_tag\n gtsam::additive_group_tag\n gtsam::IsGroup\n gtsam::DirectProduct\n gtsam::traits< DirectProduct< G, H > >\n gtsam::DirectSum\n gtsam::traits< DirectSum< G, H > >\n gtsam\n \n #define\n GTSAM_CONCEPT_GROUP_INST\n- a00065.html\n+ a00056.html\n aac1ea136475ea605715c809f4b3f0156\n (T)\n \n \n \n Lie.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00074.html\n- gtsam/base/Manifold.h\n- gtsam/base/Group.h\n+ a00005.html\n+ gtsam/base/Manifold.h\n+ gtsam/base/Group.h\n gtsam::LieGroup\n gtsam::lie_group_tag\n gtsam::internal::LieGroupTraits\n gtsam::internal::LieGroup\n gtsam::IsLieGroup\n gtsam::TransformCovariance\n gtsam\n \n #define\n GTSAM_CONCEPT_LIE_INST\n- a00074.html\n+ a00005.html\n aeef5af7d583d275fbc0e6e5af8bf2afc\n (T)\n \n \n \n lieProxies.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00122.html\n- gtsam/global_includes.h\n+ a00011.html\n+ gtsam/global_includes.h\n gtsam\n \n \n make_shared.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00038.html\n- gtsam/base/types.h\n+ a00077.html\n+ gtsam/base/types.h\n gtsam\n \n \n Manifold.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00002.html\n- gtsam/base/Matrix.h\n- gtsam/base/Testable.h\n- gtsam/base/OptionalJacobian.h\n+ a00044.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/Testable.h\n+ gtsam/base/OptionalJacobian.h\n gtsam::manifold_tag\n gtsam::internal::HasManifoldPrereqs\n gtsam::internal::GetDimensionImpl\n gtsam::internal::GetDimensionImpl< Class, Eigen::Dynamic >\n gtsam::internal::ManifoldTraits\n gtsam::internal::Manifold\n gtsam::FixedDimension\n gtsam\n \n #define\n GTSAM_CONCEPT_MANIFOLD_INST\n- a00002.html\n+ a00044.html\n a64b5e2e3c812d2cdea5ee294100f825f\n (T)\n \n \n \n Matrix.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00068.html\n- gtsam/global_includes.h\n- gtsam/base/Matrix.h\n- gtsam/base/timing.h\n- gtsam/base/Vector.h\n- gtsam/base/FastList.h\n+ a00071.html\n+ gtsam/global_includes.h\n+ gtsam/base/Matrix.h\n+ gtsam/base/timing.h\n+ gtsam/base/Vector.h\n+ gtsam/base/FastList.h\n gtsam\n \n \n Matrix.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00020.html\n- gtsam/base/OptionalJacobian.h\n- gtsam/base/Vector.h\n+ a00026.html\n+ gtsam/base/OptionalJacobian.h\n+ gtsam/base/Vector.h\n gtsam::Reshape\n gtsam::Reshape< M, M, InOptions, M, M, InOptions >\n gtsam::Reshape< M, N, InOptions, M, N, InOptions >\n gtsam::Reshape< N, M, InOptions, M, N, InOptions >\n gtsam::MultiplyWithInverse\n gtsam::MultiplyWithInverseFunction\n gtsam\n \n \n MatrixSerialization.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00104.html\n- gtsam/base/Matrix.h\n+ a00038.html\n+ gtsam/base/Matrix.h\n \n \n numericalDerivative.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00143.html\n- gtsam/linear/VectorValues.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/nonlinear/Values.h\n- gtsam/base/Lie.h\n+ a00074.html\n+ gtsam/linear/VectorValues.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/nonlinear/Values.h\n+ gtsam/base/Lie.h\n gtsam::internal::FixedSizeMatrix\n gtsam::G_x1\n gtsam\n \n \n OptionalJacobian.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00137.html\n+ a00095.html\n gtsam::OptionalJacobian\n gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >\n gtsam::MakeJacobian\n gtsam::MakeOptionalJacobian\n gtsam\n \n \n ProductLieGroup.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00023.html\n- gtsam/base/Lie.h\n+ a00014.html\n+ gtsam/base/Lie.h\n gtsam::ProductLieGroup\n gtsam::traits< ProductLieGroup< G, H > >\n gtsam\n \n \n serialization.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00092.html\n+ a00062.html\n gtsam\n \n void\n serializeToStream\n a01428.html\n a007080ca4741cc3d3d6a209b0ae3fe61\n (const T &input, std::ostream &out_archive_stream)\n@@ -593,2378 +593,2378 @@\n a56c41958e57a4bc7361ab593011462fd\n (const std::string &serialized, T &output, const std::string &name=\"data\")\n \n \n \n serializationTestHelpers.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00134.html\n- gtsam/base/serialization.h\n+ a00149.html\n+ gtsam/base/serialization.h\n gtsam\n \n \n SymmetricBlockMatrix.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00107.html\n- gtsam/base/SymmetricBlockMatrix.h\n- gtsam/base/VerticalBlockMatrix.h\n- gtsam/base/cholesky.h\n- gtsam/base/timing.h\n- gtsam/base/ThreadsafeException.h\n+ a00083.html\n+ gtsam/base/SymmetricBlockMatrix.h\n+ gtsam/base/VerticalBlockMatrix.h\n+ gtsam/base/cholesky.h\n+ gtsam/base/timing.h\n+ gtsam/base/ThreadsafeException.h\n gtsam\n \n \n SymmetricBlockMatrix.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00041.html\n- gtsam/base/FastVector.h\n- gtsam/base/Matrix.h\n- gtsam/base/types.h\n+ a00122.html\n+ gtsam/base/FastVector.h\n+ gtsam/base/Matrix.h\n+ gtsam/base/types.h\n gtsam::SymmetricBlockMatrix\n gtsam\n \n \n Testable.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00080.html\n+ a00110.html\n gtsam::IsTestable\n gtsam::equals\n gtsam::equals_star\n gtsam::HasTestablePrereqs\n gtsam::Testable\n gtsam\n \n #define\n GTSAM_CONCEPT_TESTABLE_INST\n- a00080.html\n+ a00110.html\n abe0a238cdd07d484ff0be56ae945b182\n (T)\n \n \n \n TestableAssertions.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00053.html\n- gtsam/base/Testable.h\n- gtsam/global_includes.h\n+ a00059.html\n+ gtsam/base/Testable.h\n+ gtsam/global_includes.h\n gtsam\n \n \n ThreadsafeException.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00011.html\n+ a00098.html\n gtsam::ThreadsafeException\n gtsam::RuntimeErrorThreadsafe\n gtsam::OutOfRangeThreadsafe\n gtsam::InvalidArgumentThreadsafe\n gtsam::CholeskyFailed\n gtsam\n \n \n timing.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00128.html\n- gtsam/base/debug.h\n- gtsam/base/timing.h\n+ a00029.html\n+ gtsam/base/debug.h\n+ gtsam/base/timing.h\n gtsam\n \n \n timing.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00131.html\n- gtsam/base/FastMap.h\n- gtsam/base/types.h\n+ a00137.html\n+ gtsam/base/FastMap.h\n+ gtsam/base/types.h\n gtsam::internal::TimingOutline\n gtsam::internal::AutoTicToc\n gtsam\n \n \n treeTraversal-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00146.html\n- gtsam/base/FastList.h\n- gtsam/base/FastVector.h\n- gtsam/inference/Key.h\n+ a00107.html\n+ gtsam/base/FastList.h\n+ gtsam/base/FastVector.h\n+ gtsam/inference/Key.h\n gtsam\n gtsam::treeTraversal\n \n \n types.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00005.html\n- gtsam/base/types.h\n+ a00134.html\n+ gtsam/base/types.h\n gtsam\n \n \n types.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00047.html\n+ a00020.html\n gtsam::const_selector\n gtsam::const_selector< BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >\n gtsam::const_selector< const BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >\n gtsam::ValueWithDefault\n gtsam::ListOfOneContainer\n gtsam::TbbOpenMPMixedScope\n gtsam::needs_eigen_aligned_allocator\n gtsam::needs_eigen_aligned_allocator< T, void_t< typename T::_eigen_aligned_allocator_trait > >\n gtsam\n \n #define\n assert_throw\n- a00047.html\n+ a00020.html\n a30d3af2da1ea940197addce4f3c223c8\n (CONDITION, EXCEPTION)\n \n \n #define\n GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n- a00047.html\n+ a00020.html\n aa123dd61687e08ae328154a1890b7b86\n \n \n \n #define\n GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF\n- a00047.html\n+ a00020.html\n a352ab46cee3a766e30b049690802fb0a\n (NeedsToAlign)\n \n \n \n utilities.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n a08134.html\n gtsam/inference/Symbol.h\n- gtsam/slam/ProjectionFactor.h\n- gtsam/linear/Sampler.h\n- gtsam/linear/VectorValues.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/nonlinear/Values.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Point3.h\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Pose3.h\n- gtsam/geometry/Cal3_S2.h\n- gtsam/geometry/PinholeCamera.h\n+ gtsam/slam/ProjectionFactor.h\n+ gtsam/linear/Sampler.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/nonlinear/Values.h\n+ gtsam/geometry/Point2.h\n+ gtsam/geometry/Point3.h\n+ gtsam/geometry/Pose2.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/geometry/Cal3_S2.h\n+ gtsam/geometry/PinholeCamera.h\n gtsam\n \n \n Value.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00059.html\n- gtsam/base/Vector.h\n+ a00023.html\n+ gtsam/base/Vector.h\n gtsam::Value\n gtsam\n \n \n Vector.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00140.html\n- gtsam/base/Vector.h\n+ a00050.html\n+ gtsam/base/Vector.h\n gtsam\n \n \n Vector.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00089.html\n- gtsam/global_includes.h\n+ a00113.html\n+ gtsam/global_includes.h\n gtsam\n \n \n VectorSerialization.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00056.html\n- gtsam/base/Vector.h\n+ a00089.html\n+ gtsam/base/Vector.h\n \n \n VerticalBlockMatrix.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00101.html\n- gtsam/base/VerticalBlockMatrix.h\n- gtsam/base/SymmetricBlockMatrix.h\n+ a00131.html\n+ gtsam/base/VerticalBlockMatrix.h\n+ gtsam/base/SymmetricBlockMatrix.h\n gtsam\n \n \n VerticalBlockMatrix.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00071.html\n- gtsam/base/Matrix.h\n- gtsam/base/MatrixSerialization.h\n- gtsam/base/FastVector.h\n+ a00002.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/MatrixSerialization.h\n+ gtsam/base/FastVector.h\n gtsam::VerticalBlockMatrix\n gtsam\n \n \n WeightedSampler.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/\n- a00095.html\n+ a00140.html\n gtsam::WeightedSampler\n gtsam\n \n \n Basis.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n- a00158.html\n- gtsam/base/Matrix.h\n- gtsam/base/OptionalJacobian.h\n- gtsam/basis/ParameterMatrix.h\n+ a00176.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/OptionalJacobian.h\n+ gtsam/basis/ParameterMatrix.h\n gtsam::Basis\n gtsam::Basis::EvaluationFunctor\n gtsam::Basis::VectorEvaluationFunctor\n gtsam::Basis::VectorComponentFunctor\n gtsam::Basis::ManifoldEvaluationFunctor\n gtsam::Basis::DerivativeFunctorBase\n gtsam::Basis::DerivativeFunctor\n gtsam::Basis::VectorDerivativeFunctor\n gtsam::Basis::ComponentDerivativeFunctor\n gtsam\n \n \n BasisFactors.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n- a00176.html\n- gtsam/basis/Basis.h\n- gtsam/nonlinear/FunctorizedFactor.h\n+ a00170.html\n+ gtsam/basis/Basis.h\n+ gtsam/nonlinear/FunctorizedFactor.h\n gtsam::EvaluationFactor\n gtsam::VectorEvaluationFactor\n gtsam::VectorComponentFactor\n gtsam::ManifoldEvaluationFactor\n gtsam::DerivativeFactor\n gtsam::VectorDerivativeFactor\n gtsam::ComponentDerivativeFactor\n gtsam\n \n \n Chebyshev.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n- a00164.html\n+ a00167.html\n gtsam/basis/Chebyshev.h\n gtsam\n \n \n Chebyshev.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n a00155.html\n- gtsam/base/Manifold.h\n- gtsam/basis/Basis.h\n+ gtsam/base/Manifold.h\n+ gtsam/basis/Basis.h\n gtsam::Chebyshev1Basis\n gtsam::Chebyshev2Basis\n gtsam\n \n \n Chebyshev2.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n- a00170.html\n+ a00164.html\n gtsam/basis/Chebyshev2.h\n gtsam\n \n \n Chebyshev2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n a00173.html\n- gtsam/base/Manifold.h\n- gtsam/base/OptionalJacobian.h\n- gtsam/basis/Basis.h\n+ gtsam/base/Manifold.h\n+ gtsam/base/OptionalJacobian.h\n+ gtsam/basis/Basis.h\n gtsam::Chebyshev2\n gtsam\n \n \n FitBasis.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n- a00167.html\n- gtsam/basis/Basis.h\n- gtsam/basis/BasisFactors.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a00152.html\n+ gtsam/basis/Basis.h\n+ gtsam/basis/BasisFactors.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam::FitBasis\n gtsam\n \n \n Fourier.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n- a00161.html\n- gtsam/basis/Basis.h\n+ a00158.html\n+ gtsam/basis/Basis.h\n gtsam::FourierBasis\n gtsam\n \n \n ParameterMatrix.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/\n- a00152.html\n- gtsam/base/Matrix.h\n- gtsam/base/Testable.h\n+ a00161.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/Testable.h\n gtsam::ParameterMatrix\n gtsam::traits< ParameterMatrix< M > >\n gtsam\n \n \n AlgebraicDecisionTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00194.html\n- AlgebraicDecisionTree.h\n- gtsam/base/types.h\n+ a00263.html\n+ AlgebraicDecisionTree.h\n+ gtsam/base/types.h\n gtsam\n \n \n AlgebraicDecisionTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00224.html\n- gtsam/base/Testable.h\n+ a00233.html\n+ gtsam/base/Testable.h\n gtsam::AlgebraicDecisionTree\n gtsam::AlgebraicDecisionTree::Ring\n gtsam::traits< AlgebraicDecisionTree< T > >\n gtsam\n \n \n Assignment.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00218.html\n+ a00248.html\n gtsam::Assignment\n gtsam\n \n \n DecisionTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00239.html\n- gtsam/base/Testable.h\n- gtsam/base/types.h\n- gtsam/discrete/Assignment.h\n+ a00179.html\n+ gtsam/base/Testable.h\n+ gtsam/base/types.h\n+ gtsam/discrete/Assignment.h\n gtsam::DecisionTree\n gtsam::DecisionTree::Node\n gtsam::traits< DecisionTree< L, Y > >\n gtsam\n \n \n DecisionTreeFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00272.html\n- gtsam/base/FastSet.h\n- gtsam/hybrid/HybridValues.h\n- gtsam/discrete/DecisionTreeFactor.h\n- gtsam/discrete/DiscreteConditional.h\n+ a00182.html\n+ gtsam/base/FastSet.h\n+ gtsam/hybrid/HybridValues.h\n+ gtsam/discrete/DecisionTreeFactor.h\n+ gtsam/discrete/DiscreteConditional.h\n gtsam\n \n \n DecisionTreeFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00227.html\n- gtsam/discrete/AlgebraicDecisionTree.h\n- gtsam/discrete/DiscreteFactor.h\n- gtsam/discrete/DiscreteKey.h\n- gtsam/inference/Ordering.h\n+ a00188.html\n+ gtsam/discrete/AlgebraicDecisionTree.h\n+ gtsam/discrete/DiscreteFactor.h\n+ gtsam/discrete/DiscreteKey.h\n+ gtsam/inference/Ordering.h\n gtsam::DecisionTreeFactor\n gtsam::traits< DecisionTreeFactor >\n gtsam\n \n \n DiscreteBayesNet.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00269.html\n- gtsam/discrete/DiscreteBayesNet.h\n- gtsam/discrete/DiscreteConditional.h\n- gtsam/inference/FactorGraph-inst.h\n+ a00218.html\n+ gtsam/discrete/DiscreteBayesNet.h\n+ gtsam/discrete/DiscreteConditional.h\n+ gtsam/inference/FactorGraph-inst.h\n gtsam\n \n \n DiscreteBayesNet.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00197.html\n- gtsam/discrete/DiscreteConditional.h\n- gtsam/discrete/DiscreteDistribution.h\n- gtsam/inference/BayesNet.h\n- gtsam/inference/FactorGraph.h\n+ a00200.html\n+ gtsam/discrete/DiscreteConditional.h\n+ gtsam/discrete/DiscreteDistribution.h\n+ gtsam/inference/BayesNet.h\n+ gtsam/inference/FactorGraph.h\n gtsam::DiscreteBayesNet\n gtsam::traits< DiscreteBayesNet >\n gtsam\n \n \n DiscreteBayesTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00200.html\n- gtsam/base/treeTraversal-inst.h\n- gtsam/inference/BayesTree-inst.h\n+ a00245.html\n+ gtsam/base/treeTraversal-inst.h\n+ gtsam/inference/BayesTree-inst.h\n gtsam/inference/BayesTreeCliqueBase-inst.h\n- gtsam/discrete/DiscreteBayesTree.h\n- gtsam/discrete/DiscreteBayesNet.h\n+ gtsam/discrete/DiscreteBayesTree.h\n+ gtsam/discrete/DiscreteBayesNet.h\n gtsam\n \n \n DiscreteBayesTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00266.html\n- gtsam/discrete/DiscreteBayesNet.h\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/inference/BayesTree.h\n- gtsam/inference/Conditional.h\n- gtsam/inference/BayesTreeCliqueBase.h\n+ a00227.html\n+ gtsam/discrete/DiscreteBayesNet.h\n+ gtsam/discrete/DiscreteFactorGraph.h\n+ gtsam/inference/BayesTree.h\n+ gtsam/inference/Conditional.h\n+ gtsam/inference/BayesTreeCliqueBase.h\n gtsam::DiscreteBayesTreeClique\n gtsam::DiscreteBayesTree\n gtsam\n \n \n DiscreteConditional.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00212.html\n- gtsam/base/Testable.h\n- gtsam/base/debug.h\n- gtsam/discrete/DiscreteConditional.h\n- gtsam/discrete/Signature.h\n- gtsam/hybrid/HybridValues.h\n+ a00230.html\n+ gtsam/base/Testable.h\n+ gtsam/base/debug.h\n+ gtsam/discrete/DiscreteConditional.h\n+ gtsam/discrete/Signature.h\n+ gtsam/hybrid/HybridValues.h\n gtsam\n \n \n DiscreteConditional.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00260.html\n- gtsam/discrete/DecisionTreeFactor.h\n- gtsam/discrete/Signature.h\n+ a00257.html\n+ gtsam/discrete/DecisionTreeFactor.h\n+ gtsam/discrete/Signature.h\n gtsam::DiscreteConditional\n gtsam::traits< DiscreteConditional >\n gtsam\n \n \n DiscreteDistribution.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00236.html\n- gtsam/discrete/DiscreteDistribution.h\n+ a00212.html\n+ gtsam/discrete/DiscreteDistribution.h\n gtsam\n \n \n DiscreteDistribution.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00242.html\n- gtsam/discrete/DiscreteConditional.h\n+ a00251.html\n+ gtsam/discrete/DiscreteConditional.h\n gtsam::DiscreteDistribution\n gtsam::traits< DiscreteDistribution >\n gtsam\n \n \n DiscreteEliminationTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00203.html\n- gtsam/inference/EliminationTree-inst.h\n- gtsam/discrete/DiscreteEliminationTree.h\n+ a00224.html\n+ gtsam/inference/EliminationTree-inst.h\n+ gtsam/discrete/DiscreteEliminationTree.h\n gtsam\n \n \n DiscreteEliminationTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00251.html\n- gtsam/discrete/DiscreteBayesNet.h\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/inference/EliminationTree.h\n+ a00269.html\n+ gtsam/discrete/DiscreteBayesNet.h\n+ gtsam/discrete/DiscreteFactorGraph.h\n+ gtsam/inference/EliminationTree.h\n gtsam::DiscreteEliminationTree\n gtsam\n \n \n DiscreteFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00257.html\n- gtsam/base/Vector.h\n- gtsam/discrete/DiscreteFactor.h\n- gtsam/hybrid/HybridValues.h\n+ a00266.html\n+ gtsam/base/Vector.h\n+ gtsam/discrete/DiscreteFactor.h\n+ gtsam/hybrid/HybridValues.h\n gtsam\n \n \n DiscreteFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00188.html\n- gtsam/discrete/DiscreteValues.h\n- gtsam/inference/Factor.h\n- gtsam/base/Testable.h\n+ a00242.html\n+ gtsam/discrete/DiscreteValues.h\n+ gtsam/inference/Factor.h\n+ gtsam/base/Testable.h\n gtsam::DiscreteFactor\n gtsam::traits< DiscreteFactor >\n gtsam\n \n \n DiscreteFactorGraph.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00254.html\n- gtsam/discrete/DiscreteBayesTree.h\n- gtsam/discrete/DiscreteConditional.h\n- gtsam/discrete/DiscreteEliminationTree.h\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/discrete/DiscreteJunctionTree.h\n- gtsam/discrete/DiscreteLookupDAG.h\n- gtsam/inference/FactorGraph-inst.h\n+ a00236.html\n+ gtsam/discrete/DiscreteBayesTree.h\n+ gtsam/discrete/DiscreteConditional.h\n+ gtsam/discrete/DiscreteEliminationTree.h\n+ gtsam/discrete/DiscreteFactorGraph.h\n+ gtsam/discrete/DiscreteJunctionTree.h\n+ gtsam/discrete/DiscreteLookupDAG.h\n+ gtsam/inference/FactorGraph-inst.h\n gtsam\n \n \n DiscreteFactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00230.html\n- gtsam/discrete/DecisionTreeFactor.h\n- gtsam/discrete/DiscreteLookupDAG.h\n- gtsam/inference/EliminateableFactorGraph.h\n- gtsam/inference/FactorGraph.h\n- gtsam/inference/Ordering.h\n- gtsam/base/FastSet.h\n+ a00197.html\n+ gtsam/discrete/DecisionTreeFactor.h\n+ gtsam/discrete/DiscreteLookupDAG.h\n+ gtsam/inference/EliminateableFactorGraph.h\n+ gtsam/inference/FactorGraph.h\n+ gtsam/inference/Ordering.h\n+ gtsam/base/FastSet.h\n gtsam::EliminationTraits< DiscreteFactorGraph >\n gtsam::DiscreteFactorGraph\n gtsam::traits< DiscreteFactorGraph >\n gtsam\n \n \n DiscreteJunctionTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n a00215.html\n gtsam/inference/JunctionTree-inst.h\n- gtsam/discrete/DiscreteJunctionTree.h\n- gtsam/discrete/DiscreteEliminationTree.h\n+ gtsam/discrete/DiscreteJunctionTree.h\n+ gtsam/discrete/DiscreteEliminationTree.h\n gtsam\n \n \n DiscreteJunctionTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00179.html\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/discrete/DiscreteBayesTree.h\n- gtsam/inference/JunctionTree.h\n+ a00206.html\n+ gtsam/discrete/DiscreteFactorGraph.h\n+ gtsam/discrete/DiscreteBayesTree.h\n+ gtsam/inference/JunctionTree.h\n gtsam::DiscreteJunctionTree\n gtsam\n \n \n DiscreteKey.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00221.html\n- gtsam/global_includes.h\n- gtsam/inference/Key.h\n+ a00272.html\n+ gtsam/global_includes.h\n+ gtsam/inference/Key.h\n gtsam::DiscreteKeys\n gtsam::traits< DiscreteKeys >\n gtsam\n \n \n DiscreteLookupDAG.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00209.html\n- gtsam/discrete/DiscreteBayesNet.h\n- gtsam/discrete/DiscreteLookupDAG.h\n- gtsam/discrete/DiscreteValues.h\n+ a00203.html\n+ gtsam/discrete/DiscreteBayesNet.h\n+ gtsam/discrete/DiscreteLookupDAG.h\n+ gtsam/discrete/DiscreteValues.h\n gtsam\n \n \n DiscreteLookupDAG.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00245.html\n- gtsam/discrete/DiscreteDistribution.h\n- gtsam/inference/BayesNet.h\n- gtsam/inference/FactorGraph.h\n+ a00194.html\n+ gtsam/discrete/DiscreteDistribution.h\n+ gtsam/inference/BayesNet.h\n+ gtsam/inference/FactorGraph.h\n gtsam::DiscreteLookupTable\n gtsam::DiscreteLookupDAG\n gtsam::traits< DiscreteLookupDAG >\n gtsam\n \n \n DiscreteMarginals.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00206.html\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/discrete/DiscreteBayesTree.h\n- gtsam/base/Vector.h\n+ a00221.html\n+ gtsam/discrete/DiscreteFactorGraph.h\n+ gtsam/discrete/DiscreteBayesTree.h\n+ gtsam/base/Vector.h\n gtsam::DiscreteMarginals\n gtsam\n \n \n DiscreteValues.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00185.html\n- gtsam/discrete/DiscreteValues.h\n+ a00260.html\n+ gtsam/discrete/DiscreteValues.h\n gtsam\n \n \n DiscreteValues.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00191.html\n- gtsam/discrete/Assignment.h\n- gtsam/discrete/DiscreteKey.h\n- gtsam/inference/Key.h\n+ a00254.html\n+ gtsam/discrete/Assignment.h\n+ gtsam/discrete/DiscreteKey.h\n+ gtsam/inference/Key.h\n gtsam::DiscreteValues\n gtsam::traits< DiscreteValues >\n gtsam\n \n \n Signature.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00182.html\n- Signature.h\n+ a00209.html\n+ Signature.h\n gtsam\n \n \n Signature.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/\n- a00248.html\n- gtsam/discrete/DiscreteKey.h\n+ a00191.html\n+ gtsam/discrete/DiscreteKey.h\n gtsam::Signature\n gtsam\n \n \n BearingRange.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00281.html\n- gtsam/base/Manifold.h\n- gtsam/base/Testable.h\n- gtsam/base/OptionalJacobian.h\n+ a00350.html\n+ gtsam/base/Manifold.h\n+ gtsam/base/Testable.h\n+ gtsam/base/OptionalJacobian.h\n gtsam::BearingRange\n gtsam::traits< BearingRange< A1, A2 > >\n gtsam::HasBearing\n gtsam::HasRange\n gtsam\n \n \n Cal3.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00446.html\n- gtsam/geometry/Cal3.h\n+ a00329.html\n+ gtsam/geometry/Cal3.h\n gtsam\n \n \n Cal3.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00293.html\n- gtsam/geometry/Point2.h\n+ a00365.html\n+ gtsam/geometry/Point2.h\n gtsam::Cal3\n gtsam\n \n \n Cal3_S2.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00314.html\n- gtsam/geometry/Cal3_S2.h\n+ a00275.html\n+ gtsam/geometry/Cal3_S2.h\n gtsam\n \n \n Cal3_S2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00359.html\n- gtsam/geometry/Cal3.h\n- gtsam/geometry/Point2.h\n+ a00386.html\n+ gtsam/geometry/Cal3.h\n+ gtsam/geometry/Point2.h\n gtsam::Cal3_S2\n gtsam::traits< Cal3_S2 >\n gtsam::traits< const Cal3_S2 >\n gtsam\n \n \n Cal3_S2Stereo.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00413.html\n+ a00464.html\n gtsam/geometry/Cal3_S2Stereo.h\n gtsam\n \n \n Cal3_S2Stereo.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n a00419.html\n- gtsam/geometry/Cal3_S2.h\n+ gtsam/geometry/Cal3_S2.h\n gtsam::Cal3_S2Stereo\n gtsam::traits< Cal3_S2Stereo >\n gtsam::traits< const Cal3_S2Stereo >\n gtsam\n \n \n Cal3Bundler.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00404.html\n- gtsam/base/Matrix.h\n- gtsam/base/Vector.h\n- gtsam/geometry/Cal3Bundler.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Point3.h\n+ a00398.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/Vector.h\n+ gtsam/geometry/Cal3Bundler.h\n+ gtsam/geometry/Point2.h\n+ gtsam/geometry/Point3.h\n gtsam\n \n \n Cal3Bundler.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00467.html\n- gtsam/geometry/Cal3.h\n- gtsam/geometry/Point2.h\n+ a00320.html\n+ gtsam/geometry/Cal3.h\n+ gtsam/geometry/Point2.h\n gtsam::Cal3Bundler\n gtsam::traits< Cal3Bundler >\n gtsam::traits< const Cal3Bundler >\n gtsam\n \n \n Cal3DS2.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00335.html\n- gtsam/base/Matrix.h\n- gtsam/base/Vector.h\n- gtsam/geometry/Cal3DS2.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Point3.h\n+ a00290.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/Vector.h\n+ gtsam/geometry/Cal3DS2.h\n+ gtsam/geometry/Point2.h\n+ gtsam/geometry/Point3.h\n gtsam\n \n \n Cal3DS2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00371.html\n+ a00296.html\n gtsam::Cal3DS2\n gtsam::traits< Cal3DS2 >\n gtsam::traits< const Cal3DS2 >\n gtsam\n \n \n Cal3DS2_Base.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00296.html\n- gtsam/base/Matrix.h\n- gtsam/base/Vector.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Point3.h\n+ a00470.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/Vector.h\n+ gtsam/geometry/Point2.h\n+ gtsam/geometry/Point3.h\n gtsam\n \n \n Cal3Fisheye.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00347.html\n- gtsam/base/Matrix.h\n- gtsam/base/Vector.h\n- gtsam/geometry/Cal3Fisheye.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Point3.h\n+ a00326.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/Vector.h\n+ gtsam/geometry/Cal3Fisheye.h\n+ gtsam/geometry/Point2.h\n+ gtsam/geometry/Point3.h\n gtsam\n \n \n Cal3Fisheye.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00356.html\n- gtsam/geometry/Cal3.h\n- gtsam/geometry/Point2.h\n+ a00476.html\n+ gtsam/geometry/Cal3.h\n+ gtsam/geometry/Point2.h\n gtsam::Cal3Fisheye\n gtsam::traits< Cal3Fisheye >\n gtsam::traits< const Cal3Fisheye >\n gtsam\n \n \n Cal3Unified.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00287.html\n- gtsam/base/Matrix.h\n- gtsam/base/Vector.h\n- gtsam/geometry/Cal3Unified.h\n- gtsam/geometry/Point2.h\n+ a00395.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/Vector.h\n+ gtsam/geometry/Cal3Unified.h\n+ gtsam/geometry/Point2.h\n gtsam\n \n \n Cal3Unified.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00380.html\n+ a00434.html\n gtsam::Cal3Unified\n gtsam::traits< Cal3Unified >\n gtsam::traits< const Cal3Unified >\n gtsam\n \n \n CalibratedCamera.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00431.html\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/CalibratedCamera.h\n+ a00407.html\n+ gtsam/geometry/Pose2.h\n+ gtsam/geometry/CalibratedCamera.h\n gtsam\n \n \n CalibratedCamera.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00368.html\n- gtsam/geometry/BearingRange.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Pose3.h\n- gtsam/base/Manifold.h\n- gtsam/base/ThreadsafeException.h\n+ a00359.html\n+ gtsam/geometry/BearingRange.h\n+ gtsam/geometry/Point2.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/base/Manifold.h\n+ gtsam/base/ThreadsafeException.h\n gtsam::CheiralityException\n gtsam::PinholeBase\n gtsam::CalibratedCamera\n gtsam::traits< CalibratedCamera >\n gtsam::traits< const CalibratedCamera >\n gtsam::Range< CalibratedCamera, T >\n gtsam\n \n \n CameraSet.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00383.html\n- gtsam/base/FastMap.h\n- gtsam/base/SymmetricBlockMatrix.h\n- gtsam/base/Testable.h\n- gtsam/geometry/CalibratedCamera.h\n- gtsam/geometry/Point3.h\n- gtsam/inference/Key.h\n+ a00317.html\n+ gtsam/base/FastMap.h\n+ gtsam/base/SymmetricBlockMatrix.h\n+ gtsam/base/Testable.h\n+ gtsam/geometry/CalibratedCamera.h\n+ gtsam/geometry/Point3.h\n+ gtsam/inference/Key.h\n gtsam::CameraSet\n gtsam::traits< CameraSet< CAMERA > >\n gtsam::traits< const CameraSet< CAMERA > >\n gtsam\n \n \n Cyclic.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00437.html\n- gtsam/geometry/Cyclic.h\n+ a00428.html\n+ gtsam/geometry/Cyclic.h\n gtsam\n \n \n Cyclic.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00350.html\n- gtsam/base/Group.h\n- gtsam/base/Testable.h\n+ a00332.html\n+ gtsam/base/Group.h\n+ gtsam/base/Testable.h\n gtsam::Cyclic\n gtsam::traits< Cyclic< N > >\n gtsam\n \n \n Line3.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00464.html\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/Pose3.h\n+ a00437.html\n+ gtsam/geometry/Rot3.h\n+ gtsam/geometry/Pose3.h\n gtsam::Line3\n gtsam::traits< Line3 >\n gtsam::traits< const Line3 >\n gtsam\n \n \n PinholeCamera.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00458.html\n- gtsam/geometry/PinholePose.h\n- gtsam/geometry/BearingRange.h\n+ a00371.html\n+ gtsam/geometry/PinholePose.h\n+ gtsam/geometry/BearingRange.h\n gtsam::PinholeCamera\n gtsam::traits< PinholeCamera< Calibration > >\n gtsam::traits< const PinholeCamera< Calibration > >\n gtsam::Range< PinholeCamera< Calibration >, T >\n gtsam\n \n \n PinholePose.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00377.html\n- gtsam/geometry/CalibratedCamera.h\n- gtsam/geometry/Point2.h\n+ a00308.html\n+ gtsam/geometry/CalibratedCamera.h\n+ gtsam/geometry/Point2.h\n gtsam::PinholeBaseK\n gtsam::PinholePose\n gtsam::traits< PinholePose< CALIBRATION > >\n gtsam::traits< const PinholePose< CALIBRATION > >\n gtsam\n \n \n PinholeSet.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00323.html\n- gtsam/geometry/CameraSet.h\n+ a00311.html\n+ gtsam/geometry/CameraSet.h\n gtsam/geometry/triangulation.h\n gtsam::PinholeSet\n gtsam::traits< PinholeSet< CAMERA > >\n gtsam::traits< const PinholeSet< CAMERA > >\n gtsam\n \n \n Point2.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00320.html\n- gtsam/geometry/Point2.h\n+ a00356.html\n+ gtsam/geometry/Point2.h\n gtsam\n \n \n Point2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00476.html\n+ a00431.html\n gtsam::Range< Point2, Point2 >\n gtsam\n \n \n Point3.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00362.html\n- gtsam/geometry/Point3.h\n+ a00401.html\n+ gtsam/geometry/Point3.h\n gtsam\n \n \n Point3.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00407.html\n- gtsam/base/Vector.h\n- gtsam/base/VectorSerialization.h\n+ a00383.html\n+ gtsam/base/Vector.h\n+ gtsam/base/VectorSerialization.h\n gtsam::Range< Point3, Point3 >\n gtsam\n \n \n Pose2.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00374.html\n+ a00323.html\n gtsam/geometry/concepts.h\n- gtsam/geometry/Pose2.h\n- gtsam/base/Testable.h\n+ gtsam/geometry/Pose2.h\n+ gtsam/base/Testable.h\n gtsam\n \n \n Pose2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00278.html\n- gtsam/geometry/BearingRange.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Rot2.h\n- gtsam/base/Lie.h\n+ a00284.html\n+ gtsam/geometry/BearingRange.h\n+ gtsam/geometry/Point2.h\n+ gtsam/geometry/Rot2.h\n+ gtsam/base/Lie.h\n gtsam::Pose2\n gtsam::Pose2::ChartAtOrigin\n gtsam::traits< Pose2 >\n gtsam::traits< const Pose2 >\n gtsam::Bearing< Pose2, T >\n gtsam::Range< Pose2, T >\n gtsam\n \n \n Pose3.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00428.html\n- gtsam/geometry/Pose3.h\n- gtsam/geometry/Pose2.h\n+ a00479.html\n+ gtsam/geometry/Pose3.h\n+ gtsam/geometry/Pose2.h\n gtsam/geometry/concepts.h\n gtsam\n \n \n Pose3.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00410.html\n- gtsam/geometry/BearingRange.h\n- gtsam/geometry/Point3.h\n- gtsam/geometry/Rot3.h\n- gtsam/base/Lie.h\n+ a00278.html\n+ gtsam/geometry/BearingRange.h\n+ gtsam/geometry/Point3.h\n+ gtsam/geometry/Rot3.h\n+ gtsam/base/Lie.h\n gtsam::Pose3\n gtsam::Pose3::ChartAtOrigin\n gtsam::traits< Pose3 >\n gtsam::traits< const Pose3 >\n gtsam::Bearing< Pose3, Point3 >\n gtsam::Bearing< Pose3, Pose3 >\n gtsam::Range< Pose3, T >\n gtsam\n \n \n Quaternion.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00401.html\n- gtsam/base/Lie.h\n- gtsam/geometry/SO3.h\n+ a00458.html\n+ gtsam/base/Lie.h\n+ gtsam/geometry/SO3.h\n gtsam::traits< QUATERNION_TYPE >\n gtsam\n \n \n Rot2.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00422.html\n- gtsam/geometry/Rot2.h\n+ a00344.html\n+ gtsam/geometry/Rot2.h\n gtsam\n \n \n Rot2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00395.html\n- gtsam/geometry/Point2.h\n- gtsam/base/Lie.h\n+ a00413.html\n+ gtsam/geometry/Point2.h\n+ gtsam/base/Lie.h\n gtsam::Rot2\n gtsam::Rot2::ChartAtOrigin\n gtsam::traits< Rot2 >\n gtsam::traits< const Rot2 >\n gtsam\n \n \n Rot3.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00449.html\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/SO3.h\n+ a00347.html\n+ gtsam/geometry/Rot3.h\n+ gtsam/geometry/SO3.h\n gtsam\n \n \n Rot3.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00332.html\n- gtsam/geometry/Quaternion.h\n- gtsam/geometry/SO3.h\n+ a00287.html\n+ gtsam/geometry/Quaternion.h\n+ gtsam/geometry/SO3.h\n gtsam::Rot3\n gtsam::Rot3::CayleyChart\n gtsam::Rot3::ChartAtOrigin\n gtsam::traits< Rot3 >\n gtsam::traits< const Rot3 >\n gtsam\n \n \n Rot3M.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00341.html\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/SO3.h\n+ a00299.html\n+ gtsam/geometry/Rot3.h\n+ gtsam/geometry/SO3.h\n gtsam\n \n \n Rot3Q.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00302.html\n+ a00380.html\n \n \n Similarity2.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00386.html\n- gtsam/base/Manifold.h\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/Similarity2.h\n+ a00473.html\n+ gtsam/base/Manifold.h\n+ gtsam/geometry/Pose2.h\n+ gtsam/geometry/Rot3.h\n+ gtsam/geometry/Similarity2.h\n gtsam\n \n \n Similarity2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00461.html\n- gtsam/base/Lie.h\n- gtsam/base/Manifold.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Rot2.h\n+ a00455.html\n+ gtsam/base/Lie.h\n+ gtsam/base/Manifold.h\n+ gtsam/geometry/Point2.h\n+ gtsam/geometry/Pose2.h\n+ gtsam/geometry/Rot2.h\n gtsam::Similarity2\n gtsam::Similarity2::ChartAtOrigin\n gtsam::traits< Similarity2 >\n gtsam::traits< const Similarity2 >\n gtsam\n \n \n Similarity3.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00311.html\n- gtsam/geometry/Similarity3.h\n- gtsam/geometry/Pose3.h\n- gtsam/base/Manifold.h\n+ a00338.html\n+ gtsam/geometry/Similarity3.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/base/Manifold.h\n gtsam\n \n \n Similarity3.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00329.html\n- gtsam/base/Lie.h\n- gtsam/base/Manifold.h\n- gtsam/geometry/Point3.h\n- gtsam/geometry/Pose3.h\n- gtsam/geometry/Rot3.h\n+ a00314.html\n+ gtsam/base/Lie.h\n+ gtsam/base/Manifold.h\n+ gtsam/geometry/Point3.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/geometry/Rot3.h\n gtsam::Similarity3\n gtsam::Similarity3::ChartAtOrigin\n gtsam::traits< Similarity3 >\n gtsam::traits< const Similarity3 >\n gtsam\n \n \n SimpleCamera.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00365.html\n- gtsam/geometry/SimpleCamera.h\n- gtsam/geometry/Cal3_S2.h\n+ a00410.html\n+ gtsam/geometry/SimpleCamera.h\n+ gtsam/geometry/Cal3_S2.h\n gtsam\n \n \n SimpleCamera.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00425.html\n- gtsam/geometry/BearingRange.h\n- gtsam/geometry/Cal3Bundler.h\n- gtsam/geometry/Cal3DS2.h\n- gtsam/geometry/Cal3Fisheye.h\n- gtsam/geometry/Cal3Unified.h\n- gtsam/geometry/Cal3_S2.h\n- gtsam/geometry/PinholeCamera.h\n+ a00293.html\n+ gtsam/geometry/BearingRange.h\n+ gtsam/geometry/Cal3Bundler.h\n+ gtsam/geometry/Cal3DS2.h\n+ gtsam/geometry/Cal3Fisheye.h\n+ gtsam/geometry/Cal3Unified.h\n+ gtsam/geometry/Cal3_S2.h\n+ gtsam/geometry/PinholeCamera.h\n gtsam\n \n \n SO3.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00434.html\n- gtsam/geometry/SO3.h\n+ a00425.html\n+ gtsam/geometry/SO3.h\n gtsam\n \n \n SO3.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00470.html\n- gtsam/geometry/SOn.h\n- gtsam/base/Lie.h\n- gtsam/base/Matrix.h\n+ a00461.html\n+ gtsam/geometry/SOn.h\n+ gtsam/base/Lie.h\n+ gtsam/base/Matrix.h\n gtsam::so3::ExpmapFunctor\n gtsam::so3::DexpFunctor\n gtsam::traits< SO3 >\n gtsam::traits< const SO3 >\n gtsam\n \n \n SO4.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n a00305.html\n- gtsam/base/timing.h\n- gtsam/geometry/SO4.h\n+ gtsam/base/timing.h\n+ gtsam/geometry/SO4.h\n gtsam\n \n \n SO4.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00455.html\n- gtsam/geometry/SOn.h\n- gtsam/base/Group.h\n- gtsam/base/Lie.h\n- gtsam/base/Manifold.h\n- gtsam/base/Matrix.h\n+ a00374.html\n+ gtsam/geometry/SOn.h\n+ gtsam/base/Group.h\n+ gtsam/base/Lie.h\n+ gtsam/base/Manifold.h\n+ gtsam/base/Matrix.h\n gtsam::traits< SO4 >\n gtsam::traits< const SO4 >\n gtsam\n \n \n SOn-inl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00290.html\n- gtsam/base/Matrix.h\n+ a00449.html\n+ gtsam/base/Matrix.h\n gtsam\n \n \n SOn.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00353.html\n- gtsam/geometry/SOn.h\n+ a00440.html\n+ gtsam/geometry/SOn.h\n gtsam\n \n \n SOn.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00344.html\n- gtsam/base/Lie.h\n- gtsam/base/Manifold.h\n- gtsam/base/make_shared.h\n- SOn-inl.h\n+ a00389.html\n+ gtsam/base/Lie.h\n+ gtsam/base/Manifold.h\n+ gtsam/base/make_shared.h\n+ SOn-inl.h\n gtsam::SO\n gtsam::SO::ChartAtOrigin\n gtsam::traits< SO< N > >\n gtsam::traits< const SO< N > >\n gtsam\n \n \n SphericalCamera.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00392.html\n- gtsam/base/Manifold.h\n- gtsam/base/ThreadsafeException.h\n- gtsam/geometry/BearingRange.h\n- gtsam/geometry/Pose3.h\n+ a00416.html\n+ gtsam/base/Manifold.h\n+ gtsam/base/ThreadsafeException.h\n+ gtsam/geometry/BearingRange.h\n+ gtsam/geometry/Pose3.h\n gtsam::EmptyCal\n gtsam::SphericalCamera\n gtsam::traits< SphericalCamera >\n gtsam::traits< const SphericalCamera >\n gtsam\n \n \n StereoCamera.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00308.html\n+ a00341.html\n gtsam/geometry/Cal3_S2Stereo.h\n- gtsam/geometry/Pose3.h\n- gtsam/geometry/StereoPoint2.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/geometry/StereoPoint2.h\n gtsam::StereoCheiralityException\n gtsam::StereoCamera\n gtsam::traits< StereoCamera >\n gtsam::traits< const StereoCamera >\n gtsam\n \n \n StereoPoint2.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00440.html\n- gtsam/geometry/StereoPoint2.h\n+ a00392.html\n+ gtsam/geometry/StereoPoint2.h\n gtsam\n \n \n StereoPoint2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n- a00479.html\n- gtsam/geometry/Point2.h\n+ a00422.html\n+ gtsam/geometry/Point2.h\n gtsam::StereoPoint2\n gtsam::traits< StereoPoint2 >\n gtsam::traits< const StereoPoint2 >\n gtsam\n \n \n triangulation.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/\n a00452.html\n- gtsam/geometry/Cal3Bundler.h\n- gtsam/geometry/Cal3Fisheye.h\n- gtsam/geometry/Cal3Unified.h\n- gtsam/geometry/Cal3_S2.h\n- gtsam/geometry/Cal3DS2.h\n- gtsam/geometry/CameraSet.h\n- gtsam/geometry/PinholeCamera.h\n- gtsam/geometry/SphericalCamera.h\n- gtsam/geometry/Pose2.h\n+ gtsam/geometry/Cal3Bundler.h\n+ gtsam/geometry/Cal3Fisheye.h\n+ gtsam/geometry/Cal3Unified.h\n+ gtsam/geometry/Cal3_S2.h\n+ gtsam/geometry/Cal3DS2.h\n+ gtsam/geometry/CameraSet.h\n+ gtsam/geometry/PinholeCamera.h\n+ gtsam/geometry/SphericalCamera.h\n+ gtsam/geometry/Pose2.h\n gtsam/inference/Symbol.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam::TriangulationUnderconstrainedException\n gtsam::TriangulationCheiralityException\n gtsam::TriangulationParameters\n gtsam::TriangulationResult\n gtsam\n \n \n global_includes.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/\n- a01406.html\n- gtsam/base/types.h\n+ a01400.html\n+ gtsam/base/types.h\n \n \n GaussianMixture.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00518.html\n- gtsam/discrete/DiscreteValues.h\n- gtsam/hybrid/GaussianMixture.h\n- gtsam/hybrid/GaussianMixtureFactor.h\n- gtsam/hybrid/HybridValues.h\n- gtsam/linear/GaussianFactorGraph.h\n+ a00497.html\n+ gtsam/discrete/DiscreteValues.h\n+ gtsam/hybrid/GaussianMixture.h\n+ gtsam/hybrid/GaussianMixtureFactor.h\n+ gtsam/hybrid/HybridValues.h\n+ gtsam/linear/GaussianFactorGraph.h\n gtsam\n \n \n GaussianMixture.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00566.html\n- gtsam/discrete/DecisionTree.h\n- gtsam/discrete/DecisionTreeFactor.h\n- gtsam/discrete/DiscreteKey.h\n- gtsam/hybrid/GaussianMixtureFactor.h\n- gtsam/hybrid/HybridFactor.h\n- gtsam/inference/Conditional.h\n- gtsam/linear/GaussianConditional.h\n+ a00503.html\n+ gtsam/discrete/DecisionTree.h\n+ gtsam/discrete/DecisionTreeFactor.h\n+ gtsam/discrete/DiscreteKey.h\n+ gtsam/hybrid/GaussianMixtureFactor.h\n+ gtsam/hybrid/HybridFactor.h\n+ gtsam/inference/Conditional.h\n+ gtsam/linear/GaussianConditional.h\n gtsam::GaussianMixture\n gtsam::traits< GaussianMixture >\n gtsam\n \n \n GaussianMixtureFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00506.html\n- gtsam/discrete/DecisionTree.h\n- gtsam/hybrid/GaussianMixtureFactor.h\n- gtsam/hybrid/HybridValues.h\n- gtsam/linear/GaussianFactor.h\n- gtsam/linear/GaussianFactorGraph.h\n+ a00557.html\n+ gtsam/discrete/DecisionTree.h\n+ gtsam/hybrid/GaussianMixtureFactor.h\n+ gtsam/hybrid/HybridValues.h\n+ gtsam/linear/GaussianFactor.h\n+ gtsam/linear/GaussianFactorGraph.h\n gtsam\n \n \n GaussianMixtureFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00542.html\n- gtsam/discrete/AlgebraicDecisionTree.h\n- gtsam/discrete/DecisionTree.h\n- gtsam/discrete/DiscreteKey.h\n- gtsam/hybrid/HybridFactor.h\n- gtsam/linear/GaussianFactor.h\n- gtsam/linear/GaussianFactorGraph.h\n+ a00536.html\n+ gtsam/discrete/AlgebraicDecisionTree.h\n+ gtsam/discrete/DecisionTree.h\n+ gtsam/discrete/DiscreteKey.h\n+ gtsam/hybrid/HybridFactor.h\n+ gtsam/linear/GaussianFactor.h\n+ gtsam/linear/GaussianFactorGraph.h\n gtsam::GaussianMixtureFactor\n gtsam::traits< GaussianMixtureFactor >\n gtsam\n \n \n HybridBayesNet.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00545.html\n- gtsam/discrete/DiscreteBayesNet.h\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/hybrid/HybridBayesNet.h\n- gtsam/hybrid/HybridValues.h\n+ a00515.html\n+ gtsam/discrete/DiscreteBayesNet.h\n+ gtsam/discrete/DiscreteFactorGraph.h\n+ gtsam/hybrid/HybridBayesNet.h\n+ gtsam/hybrid/HybridValues.h\n gtsam\n \n \n HybridBayesNet.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00509.html\n- gtsam/discrete/DecisionTreeFactor.h\n- gtsam/global_includes.h\n- gtsam/hybrid/HybridConditional.h\n- gtsam/hybrid/HybridValues.h\n- gtsam/inference/BayesNet.h\n- gtsam/linear/GaussianBayesNet.h\n+ a00527.html\n+ gtsam/discrete/DecisionTreeFactor.h\n+ gtsam/global_includes.h\n+ gtsam/hybrid/HybridConditional.h\n+ gtsam/hybrid/HybridValues.h\n+ gtsam/inference/BayesNet.h\n+ gtsam/linear/GaussianBayesNet.h\n gtsam::HybridBayesNet\n gtsam::traits< HybridBayesNet >\n gtsam\n \n \n HybridBayesTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00521.html\n- gtsam/base/treeTraversal-inst.h\n- gtsam/discrete/DiscreteBayesNet.h\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/hybrid/HybridBayesNet.h\n- gtsam/hybrid/HybridBayesTree.h\n- gtsam/inference/BayesTree-inst.h\n+ a00509.html\n+ gtsam/base/treeTraversal-inst.h\n+ gtsam/discrete/DiscreteBayesNet.h\n+ gtsam/discrete/DiscreteFactorGraph.h\n+ gtsam/hybrid/HybridBayesNet.h\n+ gtsam/hybrid/HybridBayesTree.h\n+ gtsam/inference/BayesTree-inst.h\n gtsam/inference/BayesTreeCliqueBase-inst.h\n- gtsam/linear/GaussianJunctionTree.h\n+ gtsam/linear/GaussianJunctionTree.h\n gtsam\n \n \n HybridBayesTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00494.html\n- gtsam/hybrid/HybridBayesNet.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/inference/BayesTree.h\n- gtsam/inference/BayesTreeCliqueBase.h\n- gtsam/inference/Conditional.h\n- gtsam/linear/GaussianBayesTree.h\n+ a00488.html\n+ gtsam/hybrid/HybridBayesNet.h\n+ gtsam/hybrid/HybridGaussianFactorGraph.h\n+ gtsam/inference/BayesTree.h\n+ gtsam/inference/BayesTreeCliqueBase.h\n+ gtsam/inference/Conditional.h\n+ gtsam/linear/GaussianBayesTree.h\n gtsam::HybridBayesTreeClique\n gtsam::HybridBayesTree\n gtsam::traits< HybridBayesTree >\n gtsam::BayesTreeOrphanWrapper< HybridBayesTreeClique >\n gtsam\n \n \n HybridConditional.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00482.html\n- gtsam/hybrid/HybridConditional.h\n- gtsam/hybrid/HybridFactor.h\n- gtsam/hybrid/HybridValues.h\n- gtsam/inference/Key.h\n+ a00566.html\n+ gtsam/hybrid/HybridConditional.h\n+ gtsam/hybrid/HybridFactor.h\n+ gtsam/hybrid/HybridValues.h\n+ gtsam/inference/Key.h\n gtsam\n \n \n HybridConditional.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00533.html\n- gtsam/discrete/DiscreteConditional.h\n- gtsam/hybrid/GaussianMixture.h\n- gtsam/hybrid/HybridFactor.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/inference/Conditional.h\n- gtsam/inference/Key.h\n- gtsam/linear/GaussianConditional.h\n+ a00560.html\n+ gtsam/discrete/DiscreteConditional.h\n+ gtsam/hybrid/GaussianMixture.h\n+ gtsam/hybrid/HybridFactor.h\n+ gtsam/hybrid/HybridGaussianFactorGraph.h\n+ gtsam/inference/Conditional.h\n+ gtsam/inference/Key.h\n+ gtsam/linear/GaussianConditional.h\n gtsam::HybridConditional\n gtsam::traits< HybridConditional >\n gtsam\n \n \n HybridEliminationTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00515.html\n- gtsam/hybrid/HybridEliminationTree.h\n- gtsam/inference/EliminationTree-inst.h\n+ a00485.html\n+ gtsam/hybrid/HybridEliminationTree.h\n+ gtsam/inference/EliminationTree-inst.h\n gtsam\n \n \n HybridEliminationTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00551.html\n- gtsam/hybrid/HybridBayesNet.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/inference/EliminationTree.h\n+ a00542.html\n+ gtsam/hybrid/HybridBayesNet.h\n+ gtsam/hybrid/HybridGaussianFactorGraph.h\n+ gtsam/inference/EliminationTree.h\n gtsam::HybridEliminationTree\n gtsam\n \n \n HybridFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00503.html\n- gtsam/hybrid/HybridFactor.h\n+ a00494.html\n+ gtsam/hybrid/HybridFactor.h\n gtsam\n \n \n HybridFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00539.html\n- gtsam/base/Testable.h\n- gtsam/discrete/DecisionTree.h\n- gtsam/discrete/DiscreteKey.h\n- gtsam/inference/Factor.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/nonlinear/Values.h\n+ a00533.html\n+ gtsam/base/Testable.h\n+ gtsam/discrete/DecisionTree.h\n+ gtsam/discrete/DiscreteKey.h\n+ gtsam/inference/Factor.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/nonlinear/Values.h\n gtsam::HybridFactor\n gtsam::traits< HybridFactor >\n gtsam\n \n \n HybridFactorGraph.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00527.html\n- gtsam/discrete/DecisionTreeFactor.h\n- gtsam/hybrid/HybridFactorGraph.h\n+ a00545.html\n+ gtsam/discrete/DecisionTreeFactor.h\n+ gtsam/hybrid/HybridFactorGraph.h\n gtsam\n \n \n HybridFactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00536.html\n- gtsam/hybrid/HybridFactor.h\n- gtsam/inference/FactorGraph.h\n+ a00563.html\n+ gtsam/hybrid/HybridFactor.h\n+ gtsam/inference/FactorGraph.h\n gtsam::HybridFactorGraph\n gtsam\n \n \n HybridGaussianFactorGraph.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00569.html\n- gtsam/discrete/Assignment.h\n- gtsam/discrete/DiscreteEliminationTree.h\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/discrete/DiscreteJunctionTree.h\n- gtsam/hybrid/GaussianMixture.h\n- gtsam/hybrid/GaussianMixtureFactor.h\n- gtsam/hybrid/HybridConditional.h\n- gtsam/hybrid/HybridEliminationTree.h\n- gtsam/hybrid/HybridFactor.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/hybrid/HybridJunctionTree.h\n- gtsam/inference/Key.h\n- gtsam/linear/GaussianConditional.h\n- gtsam/linear/GaussianEliminationTree.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/GaussianJunctionTree.h\n- gtsam/linear/HessianFactor.h\n- gtsam/linear/JacobianFactor.h\n+ a00491.html\n+ gtsam/discrete/Assignment.h\n+ gtsam/discrete/DiscreteEliminationTree.h\n+ gtsam/discrete/DiscreteFactorGraph.h\n+ gtsam/discrete/DiscreteJunctionTree.h\n+ gtsam/hybrid/GaussianMixture.h\n+ gtsam/hybrid/GaussianMixtureFactor.h\n+ gtsam/hybrid/HybridConditional.h\n+ gtsam/hybrid/HybridEliminationTree.h\n+ gtsam/hybrid/HybridFactor.h\n+ gtsam/hybrid/HybridGaussianFactorGraph.h\n+ gtsam/hybrid/HybridJunctionTree.h\n+ gtsam/inference/Key.h\n+ gtsam/linear/GaussianConditional.h\n+ gtsam/linear/GaussianEliminationTree.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/GaussianJunctionTree.h\n+ gtsam/linear/HessianFactor.h\n+ gtsam/linear/JacobianFactor.h\n gtsam\n \n \n HybridGaussianFactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00530.html\n- gtsam/hybrid/GaussianMixtureFactor.h\n- gtsam/hybrid/HybridFactor.h\n- gtsam/hybrid/HybridFactorGraph.h\n- gtsam/inference/EliminateableFactorGraph.h\n- gtsam/inference/FactorGraph.h\n- gtsam/inference/Ordering.h\n- gtsam/linear/GaussianFactor.h\n- gtsam/linear/VectorValues.h\n+ a00539.html\n+ gtsam/hybrid/GaussianMixtureFactor.h\n+ gtsam/hybrid/HybridFactor.h\n+ gtsam/hybrid/HybridFactorGraph.h\n+ gtsam/inference/EliminateableFactorGraph.h\n+ gtsam/inference/FactorGraph.h\n+ gtsam/inference/Ordering.h\n+ gtsam/linear/GaussianFactor.h\n+ gtsam/linear/VectorValues.h\n gtsam::EliminationTraits< HybridGaussianFactorGraph >\n gtsam::HybridGaussianFactorGraph\n gtsam\n \n \n HybridGaussianISAM.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00554.html\n- gtsam/base/Testable.h\n- gtsam/hybrid/HybridBayesTree.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/inference/ISAM.h\n+ a00569.html\n+ gtsam/base/Testable.h\n+ gtsam/hybrid/HybridBayesTree.h\n+ gtsam/hybrid/HybridGaussianFactorGraph.h\n+ gtsam/inference/ISAM.h\n gtsam::HybridGaussianISAM\n gtsam::traits< HybridGaussianISAM >\n gtsam\n \n \n HybridJunctionTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00548.html\n- gtsam/hybrid/HybridEliminationTree.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/hybrid/HybridJunctionTree.h\n+ a00521.html\n+ gtsam/hybrid/HybridEliminationTree.h\n+ gtsam/hybrid/HybridGaussianFactorGraph.h\n+ gtsam/hybrid/HybridJunctionTree.h\n gtsam/inference/JunctionTree-inst.h\n- gtsam/inference/Key.h\n+ gtsam/inference/Key.h\n gtsam\n \n \n HybridJunctionTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00524.html\n- gtsam/hybrid/HybridBayesTree.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/inference/JunctionTree.h\n+ a00551.html\n+ gtsam/hybrid/HybridBayesTree.h\n+ gtsam/hybrid/HybridGaussianFactorGraph.h\n+ gtsam/inference/JunctionTree.h\n gtsam::HybridJunctionTree\n gtsam\n \n \n HybridNonlinearFactorGraph.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00485.html\n- gtsam/discrete/DecisionTreeFactor.h\n- gtsam/hybrid/GaussianMixture.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/hybrid/HybridNonlinearFactorGraph.h\n- gtsam/hybrid/MixtureFactor.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a00548.html\n+ gtsam/discrete/DecisionTreeFactor.h\n+ gtsam/hybrid/GaussianMixture.h\n+ gtsam/hybrid/HybridGaussianFactorGraph.h\n+ gtsam/hybrid/HybridNonlinearFactorGraph.h\n+ gtsam/hybrid/MixtureFactor.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam\n \n \n HybridNonlinearFactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00500.html\n- gtsam/hybrid/HybridFactorGraph.h\n+ a00518.html\n+ gtsam/hybrid/HybridFactorGraph.h\n gtsam::HybridNonlinearFactorGraph\n gtsam::traits< HybridNonlinearFactorGraph >\n gtsam\n \n \n HybridNonlinearISAM.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00488.html\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n- gtsam/hybrid/HybridNonlinearISAM.h\n- gtsam/inference/Ordering.h\n+ a00512.html\n+ gtsam/hybrid/HybridGaussianFactorGraph.h\n+ gtsam/hybrid/HybridNonlinearISAM.h\n+ gtsam/inference/Ordering.h\n gtsam\n \n \n HybridNonlinearISAM.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00563.html\n- gtsam/hybrid/HybridGaussianISAM.h\n- gtsam/hybrid/HybridNonlinearFactorGraph.h\n+ a00506.html\n+ gtsam/hybrid/HybridGaussianISAM.h\n+ gtsam/hybrid/HybridNonlinearFactorGraph.h\n gtsam::HybridNonlinearISAM\n gtsam\n \n \n HybridSmoother.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00497.html\n- gtsam/hybrid/HybridSmoother.h\n+ a00524.html\n+ gtsam/hybrid/HybridSmoother.h\n gtsam\n \n \n HybridSmoother.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00557.html\n- gtsam/discrete/DiscreteFactorGraph.h\n- gtsam/hybrid/HybridBayesNet.h\n- gtsam/hybrid/HybridGaussianFactorGraph.h\n+ a00500.html\n+ gtsam/discrete/DiscreteFactorGraph.h\n+ gtsam/hybrid/HybridBayesNet.h\n+ gtsam/hybrid/HybridGaussianFactorGraph.h\n gtsam::HybridSmoother\n gtsam\n \n \n HybridValues.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00560.html\n- gtsam/discrete/Assignment.h\n- gtsam/discrete/DiscreteKey.h\n- gtsam/discrete/DiscreteValues.h\n- gtsam/inference/Key.h\n- gtsam/linear/VectorValues.h\n- gtsam/nonlinear/Values.h\n+ a00482.html\n+ gtsam/discrete/Assignment.h\n+ gtsam/discrete/DiscreteKey.h\n+ gtsam/discrete/DiscreteValues.h\n+ gtsam/inference/Key.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/nonlinear/Values.h\n gtsam::HybridValues\n gtsam::traits< HybridValues >\n gtsam\n \n \n MixtureFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/\n- a00491.html\n- gtsam/discrete/DiscreteValues.h\n- gtsam/hybrid/GaussianMixtureFactor.h\n- gtsam/hybrid/HybridValues.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a00554.html\n+ gtsam/discrete/DiscreteValues.h\n+ gtsam/hybrid/GaussianMixtureFactor.h\n+ gtsam/hybrid/HybridValues.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam/nonlinear/Symbol.h\n gtsam::MixtureFactor\n gtsam\n \n \n BayesNet.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00689.html\n- gtsam/inference/FactorGraph.h\n+ a00614.html\n+ gtsam/inference/FactorGraph.h\n gtsam::BayesNet\n gtsam\n \n \n BayesTree-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00659.html\n- gtsam/inference/Ordering.h\n- gtsam/inference/BayesTree.h\n- gtsam/base/treeTraversal-inst.h\n- gtsam/base/timing.h\n+ a00698.html\n+ gtsam/inference/Ordering.h\n+ gtsam/inference/BayesTree.h\n+ gtsam/base/treeTraversal-inst.h\n+ gtsam/base/timing.h\n gtsam\n \n \n BayesTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00653.html\n- gtsam/inference/BayesTree.h\n+ a00632.html\n+ gtsam/inference/BayesTree.h\n gtsam\n \n \n BayesTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00695.html\n- gtsam/inference/Key.h\n- gtsam/base/FastList.h\n- gtsam/base/FastVector.h\n+ a00593.html\n+ gtsam/inference/Key.h\n+ gtsam/base/FastList.h\n+ gtsam/base/FastVector.h\n gtsam::BayesTreeCliqueStats\n gtsam::BayesTreeCliqueData\n gtsam::BayesTree\n gtsam::BayesTreeOrphanWrapper\n gtsam\n \n \n BayesTreeCliqueBase-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n a00578.html\n- gtsam/inference/BayesTreeCliqueBase.h\n- gtsam/inference/FactorGraph-inst.h\n- gtsam/base/timing.h\n+ gtsam/inference/BayesTreeCliqueBase.h\n+ gtsam/inference/FactorGraph-inst.h\n+ gtsam/base/timing.h\n gtsam\n \n \n BayesTreeCliqueBase.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00602.html\n- gtsam/inference/Key.h\n- gtsam/inference/Ordering.h\n- gtsam/base/types.h\n- gtsam/base/FastVector.h\n+ a00662.html\n+ gtsam/inference/Key.h\n+ gtsam/inference/Ordering.h\n+ gtsam/base/types.h\n+ gtsam/base/FastVector.h\n gtsam::BayesTreeCliqueBase\n gtsam\n \n \n ClusterTree-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00629.html\n- gtsam/inference/ClusterTree.h\n- gtsam/inference/BayesTree.h\n- gtsam/inference/Ordering.h\n- gtsam/base/timing.h\n- gtsam/base/treeTraversal-inst.h\n+ a00623.html\n+ gtsam/inference/ClusterTree.h\n+ gtsam/inference/BayesTree.h\n+ gtsam/inference/Ordering.h\n+ gtsam/base/timing.h\n+ gtsam/base/treeTraversal-inst.h\n gtsam::EliminationData\n gtsam::EliminationData::EliminationPostOrderVisitor\n gtsam\n \n \n ClusterTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00608.html\n- gtsam/base/Testable.h\n- gtsam/base/FastVector.h\n- gtsam/inference/Ordering.h\n- gtsam/inference/ClusterTree-inst.h\n+ a00686.html\n+ gtsam/base/Testable.h\n+ gtsam/base/FastVector.h\n+ gtsam/inference/Ordering.h\n+ gtsam/inference/ClusterTree-inst.h\n gtsam::ClusterTree\n gtsam::ClusterTree::Cluster\n gtsam::EliminatableClusterTree\n gtsam\n \n \n Conditional.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00680.html\n- gtsam/inference/Key.h\n+ a00650.html\n+ gtsam/inference/Key.h\n gtsam::Conditional\n gtsam\n \n \n DotWriter.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00572.html\n- gtsam/inference/DotWriter.h\n- gtsam/base/Vector.h\n+ a00599.html\n+ gtsam/inference/DotWriter.h\n+ gtsam/base/Vector.h\n gtsam/inference/Symbol.h\n gtsam\n \n \n DotWriter.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00686.html\n- gtsam/base/FastVector.h\n- gtsam/base/Vector.h\n- gtsam/inference/Key.h\n+ a00581.html\n+ gtsam/base/FastVector.h\n+ gtsam/base/Vector.h\n+ gtsam/inference/Key.h\n gtsam::DotWriter\n gtsam\n \n \n EliminateableFactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00623.html\n- gtsam/inference/Ordering.h\n+ a00590.html\n+ gtsam/inference/Ordering.h\n gtsam/inference/VariableIndex.h\n gtsam::EliminationTraits\n gtsam::EliminateableFactorGraph\n gtsam\n \n \n EliminationTree-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00587.html\n- gtsam/base/timing.h\n- gtsam/base/treeTraversal-inst.h\n- gtsam/inference/EliminationTree.h\n+ a00665.html\n+ gtsam/base/timing.h\n+ gtsam/base/treeTraversal-inst.h\n+ gtsam/inference/EliminationTree.h\n gtsam/inference/VariableIndex.h\n- gtsam/inference/Ordering.h\n- gtsam/inference/inference-inst.h\n+ gtsam/inference/Ordering.h\n+ gtsam/inference/inference-inst.h\n gtsam\n \n \n EliminationTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00641.html\n- gtsam/base/Testable.h\n- gtsam/base/FastVector.h\n+ a00653.html\n+ gtsam/base/Testable.h\n+ gtsam/base/FastVector.h\n gtsam::EliminationTree\n gtsam::EliminationTree::Node\n gtsam\n \n \n Factor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00614.html\n- gtsam/inference/Factor.h\n+ a00668.html\n+ gtsam/inference/Factor.h\n gtsam\n \n \n Factor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00593.html\n- gtsam/base/types.h\n- gtsam/base/FastVector.h\n- gtsam/inference/Key.h\n+ a00647.html\n+ gtsam/base/types.h\n+ gtsam/base/FastVector.h\n+ gtsam/inference/Key.h\n gtsam::Factor\n gtsam\n \n \n FactorGraph-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00683.html\n- gtsam/inference/FactorGraph.h\n+ a00572.html\n+ gtsam/inference/FactorGraph.h\n gtsam\n \n \n FactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00575.html\n- gtsam/inference/DotWriter.h\n- gtsam/inference/Key.h\n- gtsam/base/FastVector.h\n- gtsam/base/Testable.h\n- gtsam/inference/FactorGraph-inst.h\n+ a00659.html\n+ gtsam/inference/DotWriter.h\n+ gtsam/inference/Key.h\n+ gtsam/base/FastVector.h\n+ gtsam/base/Testable.h\n+ gtsam/inference/FactorGraph-inst.h\n gtsam::CRefCallPushBack\n gtsam::RefCallPushBack\n gtsam::CRefCallAddCopy\n gtsam::FactorGraph\n gtsam\n \n \n graph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00596.html\n- gtsam/nonlinear/Values.h\n+ a00656.html\n+ gtsam/nonlinear/Values.h\n gtsam::SDGraph\n gtsam::SGraph\n gtsam::PredecessorMap\n gtsam\n \n \n inference-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00620.html\n- gtsam/base/treeTraversal-inst.h\n- gtsam/base/FastVector.h\n+ a00617.html\n+ gtsam/base/treeTraversal-inst.h\n+ gtsam/base/FastVector.h\n gtsam\n \n \n inferenceExceptions.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00650.html\n- gtsam/global_includes.h\n+ a00629.html\n+ gtsam/global_includes.h\n gtsam::InconsistentEliminationRequested\n gtsam\n \n \n ISAM-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00644.html\n- gtsam/inference/ISAM.h\n+ a00692.html\n+ gtsam/inference/ISAM.h\n gtsam/inference/VariableIndex.h\n gtsam\n \n \n ISAM.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00647.html\n- gtsam/global_includes.h\n+ a00638.html\n+ gtsam/global_includes.h\n gtsam::ISAM\n gtsam\n \n \n JunctionTree-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n a00701.html\n- gtsam/inference/JunctionTree.h\n- gtsam/inference/ClusterTree-inst.h\n- gtsam/symbolic/SymbolicConditional.h\n- gtsam/symbolic/SymbolicFactor-inst.h\n+ gtsam/inference/JunctionTree.h\n+ gtsam/inference/ClusterTree-inst.h\n+ gtsam/symbolic/SymbolicConditional.h\n+ gtsam/symbolic/SymbolicFactor-inst.h\n gtsam::ConstructorTraversalData\n gtsam::ConstructorTraversalData::SymbolicFactors\n gtsam\n \n \n JunctionTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00665.html\n- gtsam/inference/ClusterTree.h\n+ a00677.html\n+ gtsam/inference/ClusterTree.h\n gtsam::JunctionTree\n gtsam\n \n \n Key.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00662.html\n- gtsam/base/FastList.h\n- gtsam/base/FastMap.h\n- gtsam/base/FastSet.h\n- gtsam/base/FastVector.h\n- gtsam/base/Testable.h\n- gtsam/base/types.h\n+ a00635.html\n+ gtsam/base/FastList.h\n+ gtsam/base/FastMap.h\n+ gtsam/base/FastSet.h\n+ gtsam/base/FastVector.h\n+ gtsam/base/Testable.h\n+ gtsam/base/types.h\n gtsam::StreamedKey\n gtsam::key_formatter\n gtsam::traits< Key >\n gtsam\n \n \n LabeledSymbol.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00599.html\n+ a00641.html\n gtsam/inference/Symbol.h\n gtsam::LabeledSymbol\n gtsam::traits< LabeledSymbol >\n gtsam\n \n \n MetisIndex-inl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00632.html\n+ a00620.html\n gtsam\n \n \n MetisIndex.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00617.html\n- gtsam/inference/Key.h\n- gtsam/inference/FactorGraph.h\n- gtsam/base/types.h\n- gtsam/base/timing.h\n- gtsam/inference/MetisIndex-inl.h\n+ a00674.html\n+ gtsam/inference/Key.h\n+ gtsam/inference/FactorGraph.h\n+ gtsam/base/types.h\n+ gtsam/base/timing.h\n+ gtsam/inference/MetisIndex-inl.h\n gtsam::MetisIndex\n gtsam\n \n \n Ordering.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00581.html\n- gtsam/inference/Ordering.h\n+ a00689.html\n+ gtsam/inference/Ordering.h\n gtsam\n \n \n Ordering.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00674.html\n- gtsam/inference/Key.h\n+ a00587.html\n+ gtsam/inference/Key.h\n gtsam/inference/VariableIndex.h\n- gtsam/inference/MetisIndex.h\n- gtsam/base/FastSet.h\n+ gtsam/inference/MetisIndex.h\n+ gtsam/base/FastSet.h\n gtsam::Ordering\n gtsam::traits< Ordering >\n gtsam\n \n \n Symbol.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00590.html\n+ a00671.html\n gtsam/inference/Symbol.h\n gtsam\n \n \n Symbol.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n a08137.html\n- gtsam/base/Testable.h\n- gtsam/inference/Key.h\n+ gtsam/base/Testable.h\n+ gtsam/inference/Key.h\n gtsam::Symbol\n gtsam::SymbolGenerator\n gtsam::traits< Symbol >\n gtsam\n \n \n Symbol.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n a08140.html\n gtsam/inference/Symbol.h\n \n \n VariableIndex-inl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00611.html\n+ a00602.html\n gtsam/inference/VariableIndex.h\n- gtsam/base/timing.h\n+ gtsam/base/timing.h\n gtsam\n \n \n VariableIndex.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00635.html\n+ a00575.html\n gtsam/inference/VariableIndex.h\n gtsam\n \n \n VariableIndex.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n a00626.html\n- gtsam/inference/Factor.h\n- gtsam/inference/Key.h\n- gtsam/base/FastMap.h\n- gtsam/base/FastVector.h\n- gtsam/inference/VariableIndex-inl.h\n+ gtsam/inference/Factor.h\n+ gtsam/inference/Key.h\n+ gtsam/base/FastMap.h\n+ gtsam/base/FastVector.h\n+ gtsam/inference/VariableIndex-inl.h\n gtsam::VariableIndex\n gtsam::traits< VariableIndex >\n gtsam\n \n \n VariableSlots.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00692.html\n- gtsam/inference/VariableSlots.h\n+ a00608.html\n+ gtsam/inference/VariableSlots.h\n gtsam\n \n \n VariableSlots.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/\n- a00671.html\n- gtsam/global_includes.h\n- gtsam/base/FastMap.h\n- gtsam/base/FastVector.h\n- gtsam/base/timing.h\n- gtsam/base/Testable.h\n+ a00596.html\n+ gtsam/global_includes.h\n+ gtsam/base/FastMap.h\n+ gtsam/base/FastVector.h\n+ gtsam/base/timing.h\n+ gtsam/base/Testable.h\n gtsam::VariableSlots\n gtsam::traits< VariableSlots >\n gtsam\n \n \n AcceleratedPowerMethod.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00890.html\n- gtsam/linear/PowerMethod.h\n+ a00794.html\n+ gtsam/linear/PowerMethod.h\n gtsam::AcceleratedPowerMethod\n gtsam\n \n \n BinaryJacobianFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00785.html\n- gtsam/linear/JacobianFactor.h\n- gtsam/base/SymmetricBlockMatrix.h\n- gtsam/base/timing.h\n+ a00722.html\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/base/SymmetricBlockMatrix.h\n+ gtsam/base/timing.h\n gtsam::BinaryJacobianFactor\n gtsam::traits< BinaryJacobianFactor< M, N1, N2 > >\n gtsam\n \n \n ConjugateGradientSolver.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00734.html\n- gtsam/linear/IterativeSolver.h\n+ a00884.html\n+ gtsam/linear/IterativeSolver.h\n gtsam::ConjugateGradientParameters\n gtsam\n \n \n Errors.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00740.html\n- gtsam/linear/Errors.h\n- gtsam/linear/VectorValues.h\n+ a00788.html\n+ gtsam/linear/Errors.h\n+ gtsam/linear/VectorValues.h\n gtsam\n \n \n Errors.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00749.html\n- gtsam/base/FastList.h\n- gtsam/base/Testable.h\n- gtsam/base/Vector.h\n+ a00896.html\n+ gtsam/base/FastList.h\n+ gtsam/base/Testable.h\n+ gtsam/base/Vector.h\n gtsam::traits< Errors >\n gtsam\n \n \n GaussianBayesNet.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00755.html\n- gtsam/base/timing.h\n- gtsam/inference/FactorGraph-inst.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianFactorGraph.h\n+ a00863.html\n+ gtsam/base/timing.h\n+ gtsam/inference/FactorGraph-inst.h\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/GaussianFactorGraph.h\n gtsam\n \n \n GaussianBayesNet.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00860.html\n- gtsam/linear/GaussianConditional.h\n- gtsam/inference/BayesNet.h\n- gtsam/inference/FactorGraph.h\n- gtsam/global_includes.h\n+ a00764.html\n+ gtsam/linear/GaussianConditional.h\n+ gtsam/inference/BayesNet.h\n+ gtsam/inference/FactorGraph.h\n+ gtsam/global_includes.h\n gtsam::GaussianBayesNet\n gtsam::traits< GaussianBayesNet >\n gtsam\n \n \n GaussianBayesTree-inl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00800.html\n- gtsam/linear/GaussianBayesTree.h\n+ a00824.html\n+ gtsam/linear/GaussianBayesTree.h\n gtsam\n \n \n GaussianBayesTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00830.html\n- gtsam/base/treeTraversal-inst.h\n- gtsam/inference/BayesTree-inst.h\n+ a00800.html\n+ gtsam/base/treeTraversal-inst.h\n+ gtsam/inference/BayesTree-inst.h\n gtsam/inference/BayesTreeCliqueBase-inst.h\n- gtsam/linear/linearAlgorithms-inst.h\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/VectorValues.h\n+ gtsam/linear/linearAlgorithms-inst.h\n+ gtsam/linear/GaussianBayesTree.h\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/VectorValues.h\n gtsam\n \n \n GaussianBayesTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00746.html\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/inference/BayesTree.h\n- gtsam/inference/BayesTreeCliqueBase.h\n+ a00752.html\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/inference/BayesTree.h\n+ gtsam/inference/BayesTreeCliqueBase.h\n gtsam::GaussianBayesTreeClique\n gtsam::GaussianBayesTree\n gtsam::traits< GaussianBayesTree >\n gtsam\n \n \n GaussianConditional-inl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00839.html\n+ a00845.html\n gtsam\n \n \n GaussianConditional.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00707.html\n- gtsam/linear/GaussianConditional.h\n- gtsam/linear/Sampler.h\n- gtsam/linear/VectorValues.h\n- gtsam/linear/linearExceptions.h\n- gtsam/hybrid/HybridValues.h\n+ a00737.html\n+ gtsam/linear/GaussianConditional.h\n+ gtsam/linear/Sampler.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/linear/linearExceptions.h\n+ gtsam/hybrid/HybridValues.h\n gtsam\n \n \n GaussianConditional.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00779.html\n- gtsam/global_includes.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/inference/Conditional.h\n- gtsam/linear/VectorValues.h\n- gtsam/linear/GaussianConditional-inl.h\n+ a00872.html\n+ gtsam/global_includes.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/inference/Conditional.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/linear/GaussianConditional-inl.h\n gtsam::GaussianConditional\n gtsam::traits< GaussianConditional >\n gtsam\n \n \n GaussianDensity.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00761.html\n- gtsam/linear/GaussianDensity.h\n+ a00869.html\n+ gtsam/linear/GaussianDensity.h\n gtsam\n \n \n GaussianDensity.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00836.html\n- gtsam/linear/GaussianConditional.h\n+ a00758.html\n+ gtsam/linear/GaussianConditional.h\n gtsam::GaussianDensity\n gtsam\n \n \n GaussianEliminationTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00857.html\n- gtsam/inference/EliminationTree-inst.h\n- gtsam/linear/GaussianEliminationTree.h\n+ a00878.html\n+ gtsam/inference/EliminationTree-inst.h\n+ gtsam/linear/GaussianEliminationTree.h\n gtsam\n \n \n GaussianEliminationTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00716.html\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/inference/EliminationTree.h\n+ a00746.html\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/inference/EliminationTree.h\n gtsam::GaussianEliminationTree\n gtsam\n \n \n GaussianFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00845.html\n- gtsam/hybrid/HybridValues.h\n- gtsam/linear/GaussianFactor.h\n- gtsam/linear/VectorValues.h\n+ a00734.html\n+ gtsam/hybrid/HybridValues.h\n+ gtsam/linear/GaussianFactor.h\n+ gtsam/linear/VectorValues.h\n gtsam\n \n \n GaussianFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00725.html\n- gtsam/inference/Factor.h\n- gtsam/base/Matrix.h\n- gtsam/base/Testable.h\n+ a00731.html\n+ gtsam/inference/Factor.h\n+ gtsam/base/Matrix.h\n+ gtsam/base/Testable.h\n gtsam::GaussianFactor\n gtsam::traits< GaussianFactor >\n gtsam\n \n \n GaussianFactorGraph.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00896.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/linear/GaussianEliminationTree.h\n- gtsam/linear/GaussianJunctionTree.h\n- gtsam/linear/HessianFactor.h\n- gtsam/inference/FactorGraph-inst.h\n- gtsam/base/debug.h\n- gtsam/base/timing.h\n- gtsam/base/cholesky.h\n+ a00887.html\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/GaussianBayesTree.h\n+ gtsam/linear/GaussianEliminationTree.h\n+ gtsam/linear/GaussianJunctionTree.h\n+ gtsam/linear/HessianFactor.h\n+ gtsam/inference/FactorGraph-inst.h\n+ gtsam/base/debug.h\n+ gtsam/base/timing.h\n+ gtsam/base/cholesky.h\n gtsam\n \n \n GaussianFactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00872.html\n- gtsam/inference/EliminateableFactorGraph.h\n- gtsam/inference/FactorGraph.h\n- gtsam/linear/Errors.h\n- gtsam/linear/GaussianFactor.h\n- gtsam/linear/HessianFactor.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/VectorValues.h\n+ a00815.html\n+ gtsam/inference/EliminateableFactorGraph.h\n+ gtsam/inference/FactorGraph.h\n+ gtsam/linear/Errors.h\n+ gtsam/linear/GaussianFactor.h\n+ gtsam/linear/HessianFactor.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/linear/VectorValues.h\n gtsam::EliminationTraits< GaussianFactorGraph >\n gtsam::GaussianFactorGraph\n gtsam::traits< GaussianFactorGraph >\n gtsam\n \n \n GaussianISAM.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n a00881.html\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/inference/ISAM.h\n- gtsam/base/Testable.h\n+ gtsam/linear/GaussianBayesTree.h\n+ gtsam/inference/ISAM.h\n+ gtsam/base/Testable.h\n gtsam::GaussianISAM\n gtsam::traits< GaussianISAM >\n gtsam\n \n \n GaussianJunctionTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00866.html\n+ a00854.html\n gtsam/inference/JunctionTree-inst.h\n- gtsam/linear/GaussianJunctionTree.h\n- gtsam/linear/GaussianEliminationTree.h\n+ gtsam/linear/GaussianJunctionTree.h\n+ gtsam/linear/GaussianEliminationTree.h\n gtsam\n \n \n GaussianJunctionTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00851.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/inference/JunctionTree.h\n+ a00875.html\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/GaussianBayesTree.h\n+ gtsam/inference/JunctionTree.h\n gtsam::GaussianJunctionTree\n gtsam\n \n \n HessianFactor-inl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00713.html\n+ a00890.html\n gtsam\n \n \n HessianFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00788.html\n- gtsam/linear/HessianFactor.h\n- gtsam/linear/GaussianConditional.h\n- gtsam/linear/GaussianFactor.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/linearExceptions.h\n- gtsam/base/cholesky.h\n- gtsam/base/debug.h\n- gtsam/base/FastMap.h\n- gtsam/base/Matrix.h\n- gtsam/base/ThreadsafeException.h\n- gtsam/base/timing.h\n+ a00767.html\n+ gtsam/linear/HessianFactor.h\n+ gtsam/linear/GaussianConditional.h\n+ gtsam/linear/GaussianFactor.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/linear/linearExceptions.h\n+ gtsam/base/cholesky.h\n+ gtsam/base/debug.h\n+ gtsam/base/FastMap.h\n+ gtsam/base/Matrix.h\n+ gtsam/base/ThreadsafeException.h\n+ gtsam/base/timing.h\n gtsam\n \n \n HessianFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00827.html\n- gtsam/linear/GaussianFactor.h\n- gtsam/linear/Scatter.h\n- gtsam/base/SymmetricBlockMatrix.h\n- gtsam/base/FastVector.h\n- gtsam/linear/HessianFactor-inl.h\n+ a00782.html\n+ gtsam/linear/GaussianFactor.h\n+ gtsam/linear/Scatter.h\n+ gtsam/base/SymmetricBlockMatrix.h\n+ gtsam/base/FastVector.h\n+ gtsam/linear/HessianFactor-inl.h\n gtsam::HessianFactor\n gtsam::traits< HessianFactor >\n gtsam\n \n \n iterative-inl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00737.html\n- gtsam/linear/iterative.h\n- gtsam/linear/ConjugateGradientSolver.h\n+ a00761.html\n+ gtsam/linear/iterative.h\n+ gtsam/linear/ConjugateGradientSolver.h\n gtsam::CGState\n gtsam\n \n \n iterative.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00878.html\n- gtsam/linear/iterative-inl.h\n- gtsam/base/Vector.h\n- gtsam/base/Matrix.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/IterativeSolver.h\n+ a00716.html\n+ gtsam/linear/iterative-inl.h\n+ gtsam/base/Vector.h\n+ gtsam/base/Matrix.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/IterativeSolver.h\n gtsam\n \n \n iterative.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00887.html\n- gtsam/base/Matrix.h\n- gtsam/linear/VectorValues.h\n- gtsam/linear/ConjugateGradientSolver.h\n- gtsam/linear/iterative-inl.h\n+ a00812.html\n+ gtsam/base/Matrix.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/linear/ConjugateGradientSolver.h\n+ gtsam/linear/iterative-inl.h\n gtsam::System\n gtsam\n \n \n IterativeSolver.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n a00797.html\n- gtsam/linear/IterativeSolver.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n+ gtsam/linear/IterativeSolver.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/VectorValues.h\n gtsam\n \n \n IterativeSolver.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00767.html\n- gtsam/inference/Ordering.h\n- gtsam/base/Vector.h\n+ a00857.html\n+ gtsam/inference/Ordering.h\n+ gtsam/base/Vector.h\n gtsam::IterativeOptimizationParameters\n gtsam::IterativeSolver\n gtsam::KeyInfoEntry\n gtsam::KeyInfo\n gtsam\n \n \n JacobianFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00899.html\n- gtsam/linear/linearExceptions.h\n- gtsam/linear/GaussianConditional.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/Scatter.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n- gtsam/inference/VariableSlots.h\n- gtsam/inference/Ordering.h\n- gtsam/base/debug.h\n- gtsam/base/timing.h\n- gtsam/base/Matrix.h\n- gtsam/base/FastMap.h\n- gtsam/base/cholesky.h\n+ a00821.html\n+ gtsam/linear/linearExceptions.h\n+ gtsam/linear/GaussianConditional.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/linear/Scatter.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/inference/VariableSlots.h\n+ gtsam/inference/Ordering.h\n+ gtsam/base/debug.h\n+ gtsam/base/timing.h\n+ gtsam/base/Matrix.h\n+ gtsam/base/FastMap.h\n+ gtsam/base/cholesky.h\n gtsam\n \n \n JacobianFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00776.html\n- gtsam/linear/GaussianFactor.h\n- gtsam/linear/NoiseModel.h\n- gtsam/base/VerticalBlockMatrix.h\n- gtsam/global_includes.h\n- gtsam/inference/VariableSlots.h\n+ a00719.html\n+ gtsam/linear/GaussianFactor.h\n+ gtsam/linear/NoiseModel.h\n+ gtsam/base/VerticalBlockMatrix.h\n+ gtsam/global_includes.h\n+ gtsam/inference/VariableSlots.h\n gtsam::JacobianFactor\n gtsam::traits< JacobianFactor >\n gtsam\n \n \n KalmanFilter.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00848.html\n- gtsam/linear/KalmanFilter.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/HessianFactor.h\n- gtsam/base/Testable.h\n+ a00839.html\n+ gtsam/linear/KalmanFilter.h\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/linear/HessianFactor.h\n+ gtsam/base/Testable.h\n gtsam\n \n \n KalmanFilter.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00812.html\n- gtsam/linear/GaussianDensity.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/NoiseModel.h\n+ a00791.html\n+ gtsam/linear/GaussianDensity.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/NoiseModel.h\n gtsam::KalmanFilter\n gtsam\n \n \n linearAlgorithms-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00818.html\n- gtsam/linear/VectorValues.h\n- gtsam/linear/GaussianConditional.h\n- gtsam/base/treeTraversal-inst.h\n+ a00833.html\n+ gtsam/linear/VectorValues.h\n+ gtsam/linear/GaussianConditional.h\n+ gtsam/base/treeTraversal-inst.h\n gtsam::internal::linearAlgorithms::OptimizeData\n gtsam::internal::linearAlgorithms::OptimizeClique\n gtsam\n \n \n linearExceptions.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00743.html\n- gtsam/linear/linearExceptions.h\n+ a00899.html\n+ gtsam/linear/linearExceptions.h\n gtsam/inference/Symbol.h\n gtsam\n \n \n linearExceptions.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00719.html\n- gtsam/base/ThreadsafeException.h\n- gtsam/base/types.h\n+ a00770.html\n+ gtsam/base/ThreadsafeException.h\n+ gtsam/base/types.h\n gtsam::IndeterminantLinearSystemException\n gtsam::InvalidNoiseModel\n gtsam::InvalidMatrixBlock\n gtsam::InvalidDenseElimination\n gtsam\n \n \n NoiseModel.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00731.html\n- gtsam/linear/NoiseModel.h\n- gtsam/base/timing.h\n+ a00773.html\n+ gtsam/linear/NoiseModel.h\n+ gtsam/base/timing.h\n gtsam\n gtsam::noiseModel\n \n \n NoiseModel.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00875.html\n- gtsam/base/Testable.h\n- gtsam/base/Matrix.h\n+ a00827.html\n+ gtsam/base/Testable.h\n+ gtsam/base/Matrix.h\n gtsam::noiseModel::Base\n gtsam::noiseModel::Gaussian\n gtsam::noiseModel::Diagonal\n gtsam::noiseModel::Constrained\n gtsam::noiseModel::Isotropic\n gtsam::noiseModel::Unit\n gtsam::noiseModel::Robust\n@@ -2975,1009 +2975,1009 @@\n gtsam::traits< noiseModel::Unit >\n gtsam\n gtsam::noiseModel\n \n \n PowerMethod.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00728.html\n- gtsam/base/Matrix.h\n- gtsam/base/Vector.h\n+ a00755.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/Vector.h\n gtsam::PowerMethod\n gtsam\n \n \n RegularHessianFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00710.html\n- gtsam/linear/HessianFactor.h\n- gtsam/linear/RegularJacobianFactor.h\n+ a00866.html\n+ gtsam/linear/HessianFactor.h\n+ gtsam/linear/RegularJacobianFactor.h\n gtsam::RegularHessianFactor\n gtsam::traits< RegularHessianFactor< D > >\n gtsam\n \n \n RegularJacobianFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00773.html\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/VectorValues.h\n+ a00743.html\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/linear/VectorValues.h\n gtsam::RegularJacobianFactor\n gtsam\n \n \n Sampler.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00782.html\n- gtsam/linear/Sampler.h\n+ a00704.html\n+ gtsam/linear/Sampler.h\n gtsam\n \n \n Sampler.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00758.html\n- gtsam/linear/NoiseModel.h\n+ a00707.html\n+ gtsam/linear/NoiseModel.h\n gtsam::Sampler\n gtsam\n \n \n Scatter.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00764.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/Scatter.h\n- gtsam/inference/Ordering.h\n+ a00806.html\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/Scatter.h\n+ gtsam/inference/Ordering.h\n gtsam\n \n \n Scatter.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00791.html\n- gtsam/inference/Key.h\n- gtsam/base/FastMap.h\n+ a00779.html\n+ gtsam/inference/Key.h\n+ gtsam/base/FastMap.h\n gtsam::SlotEntry\n gtsam::Scatter\n gtsam\n \n \n SparseEigen.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00824.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n+ a00725.html\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/VectorValues.h\n gtsam\n \n \n SubgraphBuilder.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00893.html\n- gtsam/base/DSFVector.h\n- gtsam/base/FastMap.h\n- gtsam/base/WeightedSampler.h\n- gtsam/inference/Ordering.h\n+ a00749.html\n+ gtsam/base/DSFVector.h\n+ gtsam/base/FastMap.h\n+ gtsam/base/WeightedSampler.h\n+ gtsam/inference/Ordering.h\n gtsam/inference/VariableIndex.h\n- gtsam/linear/Errors.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/SubgraphBuilder.h\n+ gtsam/linear/Errors.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/SubgraphBuilder.h\n gtsam\n \n \n SubgraphBuilder.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00770.html\n- gtsam/base/FastMap.h\n- gtsam/base/types.h\n+ a00830.html\n+ gtsam/base/FastMap.h\n+ gtsam/base/types.h\n gtsam::Subgraph\n gtsam::Subgraph::Edge\n gtsam::SubgraphBuilderParameters\n gtsam::SubgraphBuilder\n gtsam\n \n \n SubgraphPreconditioner.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00809.html\n- gtsam/linear/SubgraphPreconditioner.h\n- gtsam/linear/SubgraphBuilder.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/base/types.h\n- gtsam/base/Vector.h\n+ a00836.html\n+ gtsam/linear/SubgraphPreconditioner.h\n+ gtsam/linear/SubgraphBuilder.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/base/types.h\n+ gtsam/base/Vector.h\n gtsam\n \n \n SubgraphPreconditioner.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00752.html\n- gtsam/linear/SubgraphBuilder.h\n- gtsam/linear/Errors.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/IterativeSolver.h\n- gtsam/linear/VectorValues.h\n+ a00842.html\n+ gtsam/linear/SubgraphBuilder.h\n+ gtsam/linear/Errors.h\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/IterativeSolver.h\n+ gtsam/linear/VectorValues.h\n gtsam::SubgraphPreconditionerParameters\n gtsam::SubgraphPreconditioner\n gtsam\n \n \n SubgraphSolver.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00884.html\n- gtsam/linear/SubgraphSolver.h\n- gtsam/linear/SubgraphBuilder.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/iterative-inl.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/SubgraphPreconditioner.h\n+ a00851.html\n+ gtsam/linear/SubgraphSolver.h\n+ gtsam/linear/SubgraphBuilder.h\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/iterative-inl.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/SubgraphPreconditioner.h\n gtsam\n \n \n SubgraphSolver.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00806.html\n- gtsam/linear/ConjugateGradientSolver.h\n- gtsam/linear/SubgraphBuilder.h\n+ a00710.html\n+ gtsam/linear/ConjugateGradientSolver.h\n+ gtsam/linear/SubgraphBuilder.h\n gtsam::SubgraphSolverParameters\n gtsam::SubgraphSolver\n gtsam\n \n \n VectorValues.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00722.html\n- gtsam/linear/VectorValues.h\n+ a00785.html\n+ gtsam/linear/VectorValues.h\n gtsam\n \n \n VectorValues.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/\n- a00704.html\n- gtsam/linear/Scatter.h\n- gtsam/inference/Ordering.h\n- gtsam/base/Vector.h\n- gtsam/base/FastVector.h\n- gtsam/global_includes.h\n+ a00893.html\n+ gtsam/linear/Scatter.h\n+ gtsam/inference/Ordering.h\n+ gtsam/base/Vector.h\n+ gtsam/base/FastVector.h\n+ gtsam/global_includes.h\n gtsam::VectorValues\n gtsam::traits< VectorValues >\n gtsam\n \n \n AHRSFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00965.html\n- gtsam/navigation/AHRSFactor.h\n+ a00998.html\n+ gtsam/navigation/AHRSFactor.h\n gtsam\n \n \n AHRSFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00950.html\n- gtsam/navigation/PreintegratedRotation.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/geometry/Pose3.h\n+ a00986.html\n+ gtsam/navigation/PreintegratedRotation.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/geometry/Pose3.h\n gtsam::PreintegratedAhrsMeasurements\n gtsam::AHRSFactor\n gtsam\n \n \n AttitudeFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n a00932.html\n- AttitudeFactor.h\n+ AttitudeFactor.h\n gtsam\n \n \n AttitudeFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00902.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/geometry/Pose3.h\n+ a00944.html\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/geometry/Pose3.h\n gtsam::AttitudeFactor\n gtsam::Rot3AttitudeFactor\n gtsam::traits< Rot3AttitudeFactor >\n gtsam::Pose3AttitudeFactor\n gtsam::traits< Pose3AttitudeFactor >\n gtsam\n \n \n BarometricFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00974.html\n- BarometricFactor.h\n+ a00941.html\n+ BarometricFactor.h\n gtsam\n \n \n BarometricFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00947.html\n- gtsam/geometry/Pose3.h\n- gtsam/navigation/NavState.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a00992.html\n+ gtsam/geometry/Pose3.h\n+ gtsam/navigation/NavState.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::BarometricFactor\n gtsam\n \n \n CombinedImuFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00980.html\n- gtsam/navigation/CombinedImuFactor.h\n+ a00950.html\n+ gtsam/navigation/CombinedImuFactor.h\n gtsam\n \n \n CombinedImuFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00929.html\n- gtsam/navigation/ManifoldPreintegration.h\n- gtsam/navigation/TangentPreintegration.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/base/Matrix.h\n- gtsam/base/serialization.h\n+ a00953.html\n+ gtsam/navigation/ManifoldPreintegration.h\n+ gtsam/navigation/TangentPreintegration.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/base/Matrix.h\n+ gtsam/base/serialization.h\n gtsam::PreintegrationCombinedParams\n gtsam::PreintegratedCombinedMeasurements\n gtsam::CombinedImuFactor\n gtsam::traits< PreintegrationCombinedParams >\n gtsam::traits< PreintegratedCombinedMeasurements >\n gtsam::traits< CombinedImuFactor >\n gtsam\n \n \n ConstantVelocityFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00908.html\n- gtsam/navigation/NavState.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a00956.html\n+ gtsam/navigation/NavState.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::ConstantVelocityFactor\n gtsam\n \n \n expressions.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n a08143.html\n- gtsam/geometry/Rot3.h\n- gtsam/navigation/NavState.h\n+ gtsam/geometry/Rot3.h\n+ gtsam/navigation/NavState.h\n gtsam/nonlinear/expressions.h\n gtsam/slam/expressions.h\n gtsam\n \n \n expressions.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n a08146.html\n- gtsam/nonlinear/Expression.h\n- gtsam/base/Lie.h\n+ gtsam/nonlinear/Expression.h\n+ gtsam/base/Lie.h\n gtsam\n \n \n expressions.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n a08149.html\n gtsam/nonlinear/expressions.h\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Cal3_S2.h\n- gtsam/geometry/Cal3Bundler.h\n- gtsam/geometry/Line3.h\n- gtsam/geometry/PinholeCamera.h\n+ gtsam/geometry/Pose2.h\n+ gtsam/geometry/Cal3_S2.h\n+ gtsam/geometry/Cal3Bundler.h\n+ gtsam/geometry/Line3.h\n+ gtsam/geometry/PinholeCamera.h\n gtsam\n \n \n GPSFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n a00983.html\n- GPSFactor.h\n+ GPSFactor.h\n gtsam\n \n \n GPSFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00920.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/navigation/NavState.h\n- gtsam/geometry/Pose3.h\n+ a00908.html\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/navigation/NavState.h\n+ gtsam/geometry/Pose3.h\n gtsam::GPSFactor\n gtsam::GPSFactor2\n gtsam\n \n \n ImuBias.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00989.html\n- ImuBias.h\n- gtsam/geometry/Point3.h\n+ a00968.html\n+ ImuBias.h\n+ gtsam/geometry/Point3.h\n gtsam\n gtsam::imuBias\n \n \n ImuBias.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00968.html\n- gtsam/base/OptionalJacobian.h\n+ a00974.html\n+ gtsam/base/OptionalJacobian.h\n gtsam::imuBias::ConstantBias\n gtsam::traits< imuBias::ConstantBias >\n gtsam\n gtsam::imuBias\n \n \n ImuFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00992.html\n- gtsam/navigation/ImuFactor.h\n+ a00959.html\n+ gtsam/navigation/ImuFactor.h\n gtsam\n \n \n ImuFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00938.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/navigation/ManifoldPreintegration.h\n- gtsam/navigation/TangentPreintegration.h\n- gtsam/base/debug.h\n+ a00977.html\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/navigation/ManifoldPreintegration.h\n+ gtsam/navigation/TangentPreintegration.h\n+ gtsam/base/debug.h\n gtsam::PreintegratedImuMeasurements\n gtsam::ImuFactor\n gtsam::ImuFactor2\n gtsam::traits< PreintegratedImuMeasurements >\n gtsam::traits< ImuFactor >\n gtsam::traits< ImuFactor2 >\n gtsam\n \n \n MagFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00917.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/geometry/Rot2.h\n- gtsam/geometry/Rot3.h\n+ a00995.html\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/geometry/Rot2.h\n+ gtsam/geometry/Rot3.h\n gtsam::MagFactor\n gtsam::MagFactor1\n gtsam::MagFactor2\n gtsam::MagFactor3\n gtsam\n \n \n ManifoldPreintegration.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00977.html\n- ManifoldPreintegration.h\n+ a00947.html\n+ ManifoldPreintegration.h\n gtsam\n \n \n ManifoldPreintegration.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00998.html\n- gtsam/navigation/NavState.h\n- gtsam/navigation/PreintegrationBase.h\n+ a00926.html\n+ gtsam/navigation/NavState.h\n+ gtsam/navigation/PreintegrationBase.h\n gtsam::ManifoldPreintegration\n gtsam\n \n \n NavState.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00944.html\n- gtsam/geometry/Pose3.h\n- gtsam/base/Vector.h\n- gtsam/base/Manifold.h\n+ a00962.html\n+ gtsam/geometry/Pose3.h\n+ gtsam/base/Vector.h\n+ gtsam/base/Manifold.h\n gtsam::NavState\n gtsam::traits< NavState >\n gtsam\n \n \n PreintegratedRotation.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00935.html\n- PreintegratedRotation.h\n+ a00989.html\n+ PreintegratedRotation.h\n gtsam\n \n \n PreintegratedRotation.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00986.html\n- gtsam/geometry/Pose3.h\n- gtsam/base/Matrix.h\n+ a00971.html\n+ gtsam/geometry/Pose3.h\n+ gtsam/base/Matrix.h\n gtsam::PreintegratedRotationParams\n gtsam::PreintegratedRotation\n gtsam::traits< PreintegratedRotation >\n gtsam\n \n \n PreintegrationBase.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00914.html\n- gtsam/navigation/PreintegrationParams.h\n- gtsam/navigation/NavState.h\n- gtsam/navigation/ImuBias.h\n- gtsam/linear/NoiseModel.h\n+ a00917.html\n+ gtsam/navigation/PreintegrationParams.h\n+ gtsam/navigation/NavState.h\n+ gtsam/navigation/ImuBias.h\n+ gtsam/linear/NoiseModel.h\n gtsam::PreintegrationBase\n gtsam\n \n \n PreintegrationParams.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00923.html\n- gtsam/navigation/PreintegratedRotation.h\n+ a00965.html\n+ gtsam/navigation/PreintegratedRotation.h\n gtsam::PreintegrationParams\n gtsam\n \n \n Scenario.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00971.html\n- gtsam/linear/NoiseModel.h\n- gtsam/navigation/NavState.h\n+ a00914.html\n+ gtsam/linear/NoiseModel.h\n+ gtsam/navigation/NavState.h\n gtsam::Scenario\n gtsam::ConstantTwistScenario\n gtsam::AcceleratingScenario\n gtsam\n \n \n ScenarioRunner.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00995.html\n- gtsam/linear/Sampler.h\n- gtsam/navigation/CombinedImuFactor.h\n- gtsam/navigation/ImuFactor.h\n- gtsam/navigation/Scenario.h\n+ a00938.html\n+ gtsam/linear/Sampler.h\n+ gtsam/navigation/CombinedImuFactor.h\n+ gtsam/navigation/ImuFactor.h\n+ gtsam/navigation/Scenario.h\n gtsam::ScenarioRunner\n gtsam::CombinedScenarioRunner\n gtsam\n \n \n TangentPreintegration.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00959.html\n- TangentPreintegration.h\n- gtsam/base/numericalDerivative.h\n+ a00902.html\n+ TangentPreintegration.h\n+ gtsam/base/numericalDerivative.h\n gtsam\n \n \n TangentPreintegration.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/\n- a00941.html\n- gtsam/navigation/PreintegrationBase.h\n+ a00911.html\n+ gtsam/navigation/PreintegrationBase.h\n gtsam::TangentPreintegration\n gtsam\n \n \n CustomFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01118.html\n- gtsam/nonlinear/CustomFactor.h\n+ a01076.html\n+ gtsam/nonlinear/CustomFactor.h\n gtsam\n \n \n CustomFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01058.html\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01055.html\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::CustomFactor\n gtsam\n \n \n DoglegOptimizer.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01082.html\n- gtsam/nonlinear/DoglegOptimizer.h\n- gtsam/nonlinear/DoglegOptimizerImpl.h\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n+ a01133.html\n+ gtsam/nonlinear/DoglegOptimizer.h\n+ gtsam/nonlinear/DoglegOptimizerImpl.h\n+ gtsam/linear/GaussianBayesTree.h\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/VectorValues.h\n gtsam\n \n \n DoglegOptimizer.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01085.html\n- gtsam/nonlinear/NonlinearOptimizer.h\n+ a01043.html\n+ gtsam/nonlinear/NonlinearOptimizer.h\n gtsam::DoglegParams\n gtsam::DoglegOptimizer\n gtsam\n \n \n DoglegOptimizerImpl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01073.html\n- gtsam/linear/VectorValues.h\n- gtsam/inference/Ordering.h\n+ a01160.html\n+ gtsam/linear/VectorValues.h\n+ gtsam/inference/Ordering.h\n gtsam::DoglegOptimizerImpl\n gtsam::DoglegOptimizerImpl::IterationResult\n gtsam\n \n \n Expression-inl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01016.html\n+ a01151.html\n gtsam::internal::apply_compose\n gtsam::internal::apply_compose< double >\n gtsam\n \n \n Expression.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01028.html\n+ a01097.html\n gtsam/inference/Symbol.h\n- gtsam/base/OptionalJacobian.h\n- gtsam/nonlinear/Expression-inl.h\n+ gtsam/base/OptionalJacobian.h\n+ gtsam/nonlinear/Expression-inl.h\n gtsam::Expression\n gtsam::Expression::UnaryFunction\n gtsam::Expression::BinaryFunction\n gtsam::Expression::TernaryFunction\n gtsam::ScalarMultiplyExpression\n gtsam::BinarySumExpression\n gtsam\n \n \n ExpressionFactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01010.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01019.html\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam::ExpressionFactorGraph\n gtsam\n \n \n expressionTesting.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01142.html\n- gtsam/nonlinear/factorTesting.h\n- gtsam/base/Testable.h\n+ a01100.html\n+ gtsam/nonlinear/factorTesting.h\n+ gtsam/base/Testable.h\n gtsam\n \n #define\n EXPECT_CORRECT_EXPRESSION_JACOBIANS\n- a01142.html\n+ a01100.html\n a701d0cd12b81a725f7f9cd2432fe9e2a\n (expression, values, numerical_derivative_step, tolerance)\n \n \n \n ExtendedKalmanFilter-inl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01091.html\n- gtsam/nonlinear/ExtendedKalmanFilter.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianFactorGraph.h\n+ a01148.html\n+ gtsam/nonlinear/ExtendedKalmanFilter.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/GaussianFactorGraph.h\n gtsam\n \n \n ExtendedKalmanFilter.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01064.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/nonlinear/ExtendedKalmanFilter-inl.h\n+ a01070.html\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/nonlinear/ExtendedKalmanFilter-inl.h\n gtsam::ExtendedKalmanFilter\n gtsam\n \n \n factorTesting.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01121.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/base/numericalDerivative.h\n+ a01091.html\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/base/numericalDerivative.h\n gtsam\n \n #define\n EXPECT_CORRECT_FACTOR_JACOBIANS\n- a01121.html\n+ a01091.html\n a8ec37fe83eda47404b8588e1f012df21\n (factor, values, numerical_derivative_step, tolerance)\n \n \n \n FunctorizedFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01013.html\n- gtsam/base/Testable.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01064.html\n+ gtsam/base/Testable.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::FunctorizedFactor\n gtsam::traits< FunctorizedFactor< R, T > >\n gtsam::FunctorizedFactor2\n gtsam::traits< FunctorizedFactor2< R, T1, T2 > >\n gtsam\n \n \n GaussNewtonOptimizer.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01109.html\n- gtsam/nonlinear/GaussNewtonOptimizer.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n+ a01016.html\n+ gtsam/nonlinear/GaussNewtonOptimizer.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/VectorValues.h\n gtsam\n \n \n GaussNewtonOptimizer.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01001.html\n- gtsam/nonlinear/NonlinearOptimizer.h\n+ a01031.html\n+ gtsam/nonlinear/NonlinearOptimizer.h\n gtsam::GaussNewtonParams\n gtsam::GaussNewtonOptimizer\n gtsam\n \n \n GncOptimizer.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01052.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01103.html\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam::GncOptimizer\n gtsam\n \n \n GraphvizFormatting.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01106.html\n- gtsam/nonlinear/GraphvizFormatting.h\n- gtsam/nonlinear/Values.h\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Pose3.h\n+ a01022.html\n+ gtsam/nonlinear/GraphvizFormatting.h\n+ gtsam/nonlinear/Values.h\n+ gtsam/geometry/Pose2.h\n+ gtsam/geometry/Pose3.h\n gtsam\n \n \n GraphvizFormatting.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01031.html\n- gtsam/inference/DotWriter.h\n+ a01115.html\n+ gtsam/inference/DotWriter.h\n gtsam::GraphvizFormatting\n gtsam\n \n \n ISAM2-impl.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01046.html\n- gtsam/base/debug.h\n+ a01010.html\n+ gtsam/base/debug.h\n gtsam/inference/Symbol.h\n- gtsam/nonlinear/ISAM2-impl.h\n+ gtsam/nonlinear/ISAM2-impl.h\n gtsam\n \n \n ISAM2-impl.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01067.html\n- gtsam/nonlinear/ISAM2.h\n- gtsam/nonlinear/ISAM2Result.h\n- gtsam/base/debug.h\n+ a01058.html\n+ gtsam/nonlinear/ISAM2.h\n+ gtsam/nonlinear/ISAM2Result.h\n+ gtsam/base/debug.h\n gtsam/inference/JunctionTree-inst.h\n gtsam/inference/Symbol.h\n gtsam/inference/VariableIndex.h\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/linear/GaussianEliminationTree.h\n+ gtsam/linear/GaussianBayesTree.h\n+ gtsam/linear/GaussianEliminationTree.h\n gtsam::ISAM2BayesTree\n gtsam::ISAM2JunctionTree\n gtsam::DeltaImpl\n gtsam::DeltaImpl::PartialSolveResult\n gtsam::DeltaImpl::ReorderingMode\n gtsam::UpdateImpl\n gtsam\n \n \n ISAM2.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01139.html\n- gtsam/nonlinear/ISAM2-impl.h\n- gtsam/nonlinear/ISAM2.h\n- gtsam/nonlinear/ISAM2Result.h\n- gtsam/base/debug.h\n- gtsam/base/timing.h\n- gtsam/inference/BayesTree-inst.h\n- gtsam/nonlinear/LinearContainerFactor.h\n+ a01106.html\n+ gtsam/nonlinear/ISAM2-impl.h\n+ gtsam/nonlinear/ISAM2.h\n+ gtsam/nonlinear/ISAM2Result.h\n+ gtsam/base/debug.h\n+ gtsam/base/timing.h\n+ gtsam/inference/BayesTree-inst.h\n+ gtsam/nonlinear/LinearContainerFactor.h\n gtsam\n \n \n ISAM2.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01163.html\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/nonlinear/ISAM2Clique.h\n- gtsam/nonlinear/ISAM2Params.h\n- gtsam/nonlinear/ISAM2Result.h\n- gtsam/nonlinear/ISAM2UpdateParams.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01007.html\n+ gtsam/linear/GaussianBayesTree.h\n+ gtsam/nonlinear/ISAM2Clique.h\n+ gtsam/nonlinear/ISAM2Params.h\n+ gtsam/nonlinear/ISAM2Result.h\n+ gtsam/nonlinear/ISAM2UpdateParams.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam::ISAM2\n gtsam::traits< ISAM2 >\n gtsam\n \n \n ISAM2Clique.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01055.html\n+ a01109.html\n gtsam/inference/BayesTreeCliqueBase-inst.h\n- gtsam/linear/VectorValues.h\n- gtsam/linear/linearAlgorithms-inst.h\n- gtsam/nonlinear/ISAM2Clique.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/linear/linearAlgorithms-inst.h\n+ gtsam/nonlinear/ISAM2Clique.h\n gtsam\n \n \n ISAM2Clique.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01160.html\n- gtsam/inference/BayesTreeCliqueBase.h\n- gtsam/inference/Key.h\n- gtsam/linear/GaussianBayesNet.h\n- gtsam/linear/GaussianConditional.h\n- gtsam/linear/GaussianFactorGraph.h\n+ a01049.html\n+ gtsam/inference/BayesTreeCliqueBase.h\n+ gtsam/inference/Key.h\n+ gtsam/linear/GaussianBayesNet.h\n+ gtsam/linear/GaussianConditional.h\n+ gtsam/linear/GaussianFactorGraph.h\n gtsam::ISAM2Clique\n gtsam\n \n \n ISAM2Params.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01172.html\n- gtsam/nonlinear/ISAM2Params.h\n+ a01124.html\n+ gtsam/nonlinear/ISAM2Params.h\n gtsam\n \n \n ISAM2Params.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01040.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/nonlinear/DoglegOptimizerImpl.h\n+ a01037.html\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/nonlinear/DoglegOptimizerImpl.h\n gtsam::ISAM2GaussNewtonParams\n gtsam::ISAM2DoglegParams\n gtsam::ISAM2Params\n gtsam\n \n \n ISAM2Result.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01127.html\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/nonlinear/DoglegOptimizerImpl.h\n- gtsam/nonlinear/ISAM2Params.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01004.html\n+ gtsam/linear/GaussianBayesTree.h\n+ gtsam/nonlinear/DoglegOptimizerImpl.h\n+ gtsam/nonlinear/ISAM2Params.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam::ISAM2Result\n gtsam::ISAM2Result::DetailedResults\n gtsam::ISAM2Result::DetailedResults::VariableStatus\n gtsam\n \n \n ISAM2UpdateParams.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01169.html\n- gtsam/base/FastList.h\n- gtsam/inference/Key.h\n- gtsam/nonlinear/ISAM2Result.h\n+ a01067.html\n+ gtsam/base/FastList.h\n+ gtsam/inference/Key.h\n+ gtsam/nonlinear/ISAM2Result.h\n gtsam::ISAM2UpdateParams\n gtsam\n \n \n LevenbergMarquardtOptimizer.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01004.html\n- gtsam/nonlinear/LevenbergMarquardtOptimizer.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/Values.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/linearExceptions.h\n- gtsam/inference/Ordering.h\n- gtsam/base/Vector.h\n- gtsam/base/timing.h\n+ a01028.html\n+ gtsam/nonlinear/LevenbergMarquardtOptimizer.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/nonlinear/Values.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/linearExceptions.h\n+ gtsam/inference/Ordering.h\n+ gtsam/base/Vector.h\n+ gtsam/base/timing.h\n gtsam\n \n \n LevenbergMarquardtOptimizer.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01043.html\n- gtsam/nonlinear/NonlinearOptimizer.h\n- gtsam/nonlinear/LevenbergMarquardtParams.h\n- gtsam/linear/VectorValues.h\n+ a01172.html\n+ gtsam/nonlinear/NonlinearOptimizer.h\n+ gtsam/nonlinear/LevenbergMarquardtParams.h\n+ gtsam/linear/VectorValues.h\n gtsam::LevenbergMarquardtOptimizer\n gtsam\n \n \n LevenbergMarquardtParams.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01100.html\n- gtsam/nonlinear/LevenbergMarquardtParams.h\n+ a01013.html\n+ gtsam/nonlinear/LevenbergMarquardtParams.h\n gtsam\n \n \n LevenbergMarquardtParams.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01019.html\n- gtsam/nonlinear/NonlinearOptimizerParams.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01145.html\n+ gtsam/nonlinear/NonlinearOptimizerParams.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam::LevenbergMarquardtParams\n gtsam\n \n \n LinearContainerFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01145.html\n- gtsam/nonlinear/LinearContainerFactor.h\n- gtsam/linear/HessianFactor.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/VectorValues.h\n- gtsam/linear/GaussianFactorGraph.h\n+ a01082.html\n+ gtsam/nonlinear/LinearContainerFactor.h\n+ gtsam/linear/HessianFactor.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/linear/GaussianFactorGraph.h\n gtsam\n \n \n LinearContainerFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01103.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01154.html\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam::LinearContainerFactor\n gtsam::traits< LinearContainerFactor >\n gtsam\n \n \n Marginals.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01079.html\n- gtsam/base/timing.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/HessianFactor.h\n- gtsam/nonlinear/Marginals.h\n+ a01166.html\n+ gtsam/base/timing.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/linear/HessianFactor.h\n+ gtsam/nonlinear/Marginals.h\n gtsam\n \n \n Marginals.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01136.html\n- gtsam/linear/GaussianBayesTree.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/Values.h\n+ a01142.html\n+ gtsam/linear/GaussianBayesTree.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/nonlinear/Values.h\n gtsam::Marginals\n gtsam::JointMarginal\n gtsam\n \n \n NonlinearConjugateGradientOptimizer.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01133.html\n- gtsam/nonlinear/NonlinearConjugateGradientOptimizer.h\n- gtsam/nonlinear/Values.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n+ a01034.html\n+ gtsam/nonlinear/NonlinearConjugateGradientOptimizer.h\n+ gtsam/nonlinear/Values.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/VectorValues.h\n gtsam\n \n \n NonlinearConjugateGradientOptimizer.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01124.html\n- gtsam/base/Manifold.h\n- gtsam/nonlinear/NonlinearOptimizer.h\n+ a01052.html\n+ gtsam/base/Manifold.h\n+ gtsam/nonlinear/NonlinearOptimizer.h\n gtsam::NonlinearConjugateGradientOptimizer\n gtsam\n \n \n nonlinearExceptions.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01070.html\n- gtsam/inference/Key.h\n+ a01001.html\n+ gtsam/inference/Key.h\n gtsam::MarginalizeNonleafException\n gtsam\n \n \n NonlinearFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01148.html\n- gtsam/hybrid/HybridValues.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01079.html\n+ gtsam/hybrid/HybridValues.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam\n \n \n NonlinearFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01097.html\n- gtsam/nonlinear/Values.h\n- gtsam/linear/NoiseModel.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/inference/Factor.h\n- gtsam/base/OptionalJacobian.h\n+ a01025.html\n+ gtsam/nonlinear/Values.h\n+ gtsam/linear/NoiseModel.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/inference/Factor.h\n+ gtsam/base/OptionalJacobian.h\n gtsam::NonlinearFactor\n gtsam::traits< NonlinearFactor >\n gtsam::NoiseModelFactor\n gtsam::NoiseModelFactorN\n gtsam\n \n \n NonlinearFactorGraph.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01115.html\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Pose3.h\n- gtsam/symbolic/SymbolicFactorGraph.h\n- gtsam/nonlinear/Values.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/linearExceptions.h\n- gtsam/linear/VectorValues.h\n- gtsam/inference/Ordering.h\n- gtsam/inference/FactorGraph-inst.h\n+ a01157.html\n+ gtsam/geometry/Pose2.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/symbolic/SymbolicFactorGraph.h\n+ gtsam/nonlinear/Values.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/linearExceptions.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/inference/Ordering.h\n+ gtsam/inference/FactorGraph-inst.h\n gtsam\n \n \n NonlinearFactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01154.html\n- gtsam/geometry/Point2.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/nonlinear/GraphvizFormatting.h\n- gtsam/inference/FactorGraph.h\n+ a01085.html\n+ gtsam/geometry/Point2.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/nonlinear/GraphvizFormatting.h\n+ gtsam/inference/FactorGraph.h\n gtsam/nonlinear/PriorFactor.h\n gtsam::NonlinearFactorGraph\n gtsam::traits< NonlinearFactorGraph >\n gtsam\n \n \n NonlinearISAM.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n a01112.html\n- gtsam/nonlinear/NonlinearISAM.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/inference/Ordering.h\n+ gtsam/nonlinear/NonlinearISAM.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/inference/Ordering.h\n gtsam\n \n \n NonlinearISAM.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01166.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01061.html\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam/linear/GaussianISAM.h\n gtsam::NonlinearISAM\n gtsam\n \n \n NonlinearOptimizer.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01034.html\n- gtsam/nonlinear/NonlinearOptimizer.h\n- gtsam/linear/GaussianEliminationTree.h\n- gtsam/linear/VectorValues.h\n- gtsam/linear/SubgraphSolver.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/inference/Ordering.h\n+ a01163.html\n+ gtsam/nonlinear/NonlinearOptimizer.h\n+ gtsam/linear/GaussianEliminationTree.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/linear/SubgraphSolver.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/inference/Ordering.h\n gtsam\n \n \n NonlinearOptimizer.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01094.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/NonlinearOptimizerParams.h\n+ a01121.html\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/nonlinear/NonlinearOptimizerParams.h\n gtsam::NonlinearOptimizer\n gtsam\n \n \n NonlinearOptimizerParams.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01049.html\n- gtsam/nonlinear/NonlinearOptimizerParams.h\n+ a01130.html\n+ gtsam/nonlinear/NonlinearOptimizerParams.h\n gtsam\n \n \n NonlinearOptimizerParams.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01076.html\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/SubgraphSolver.h\n+ a01073.html\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/SubgraphSolver.h\n gtsam::NonlinearOptimizerParams\n gtsam\n \n \n PriorFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n a08152.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/base/Testable.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/base/Testable.h\n gtsam::PriorFactor\n gtsam::traits< PriorFactor< VALUE > >\n gtsam\n \n \n PriorFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n a08155.html\n gtsam/nonlinear/PriorFactor.h\n \n \n Values.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01130.html\n- gtsam/base/FastDefaultAllocator.h\n- gtsam/inference/Key.h\n+ a01127.html\n+ gtsam/base/FastDefaultAllocator.h\n+ gtsam/inference/Key.h\n gtsam::ValueCloneAllocator\n gtsam::Values\n gtsam::Values::KeyValuePair\n gtsam::Values::ConstKeyValuePair\n gtsam::Values::deref_iterator\n gtsam::ValuesKeyAlreadyExists\n gtsam::ValuesKeyDoesNotExist\n@@ -3986,70 +3986,70 @@\n gtsam::NoMatchFoundForFixed\n gtsam::traits< Values >\n gtsam\n \n \n WhiteNoiseFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/\n- a01037.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/linear/HessianFactor.h\n+ a01118.html\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/linear/HessianFactor.h\n gtsam::WhiteNoiseFactor\n gtsam\n \n \n precompiled_header.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/\n- a01403.html\n+ a01394.html\n precompiled_header.h\n \n \n precompiled_header.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/\n a01397.html\n- gtsam/base/Lie.h\n- gtsam/base/cholesky.h\n- gtsam/base/debug.h\n- gtsam/base/DSFVector.h\n- gtsam/base/FastDefaultAllocator.h\n- gtsam/base/FastList.h\n- gtsam/base/FastMap.h\n- gtsam/base/FastSet.h\n- gtsam/base/FastVector.h\n- gtsam/base/Group.h\n- gtsam/base/lieProxies.h\n- gtsam/base/Manifold.h\n- gtsam/base/Matrix.h\n- gtsam/base/OptionalJacobian.h\n- gtsam/base/ProductLieGroup.h\n- gtsam/base/serialization.h\n- gtsam/base/serializationTestHelpers.h\n- gtsam/base/SymmetricBlockMatrix.h\n- gtsam/base/Testable.h\n- gtsam/base/TestableAssertions.h\n- gtsam/base/ThreadsafeException.h\n- gtsam/base/timing.h\n- gtsam/base/types.h\n- gtsam/base/Value.h\n- gtsam/base/Vector.h\n- gtsam/base/VerticalBlockMatrix.h\n+ gtsam/base/Lie.h\n+ gtsam/base/cholesky.h\n+ gtsam/base/debug.h\n+ gtsam/base/DSFVector.h\n+ gtsam/base/FastDefaultAllocator.h\n+ gtsam/base/FastList.h\n+ gtsam/base/FastMap.h\n+ gtsam/base/FastSet.h\n+ gtsam/base/FastVector.h\n+ gtsam/base/Group.h\n+ gtsam/base/lieProxies.h\n+ gtsam/base/Manifold.h\n+ gtsam/base/Matrix.h\n+ gtsam/base/OptionalJacobian.h\n+ gtsam/base/ProductLieGroup.h\n+ gtsam/base/serialization.h\n+ gtsam/base/serializationTestHelpers.h\n+ gtsam/base/SymmetricBlockMatrix.h\n+ gtsam/base/Testable.h\n+ gtsam/base/TestableAssertions.h\n+ gtsam/base/ThreadsafeException.h\n+ gtsam/base/timing.h\n+ gtsam/base/types.h\n+ gtsam/base/Value.h\n+ gtsam/base/Vector.h\n+ gtsam/base/VerticalBlockMatrix.h\n \n \n BearingFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sam/\n a08158.html\n gtsam::BearingFactor\n gtsam::traits< BearingFactor< A1, A2, T > >\n gtsam\n \n \n BearingRangeFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sam/\n a08164.html\n- gtsam/geometry/BearingRange.h\n+ gtsam/geometry/BearingRange.h\n gtsam::BearingRangeFactor\n gtsam::traits< BearingRangeFactor< A1, A2, B, R > >\n gtsam\n \n \n RangeFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sam/\n@@ -4059,630 +4059,630 @@\n gtsam::RangeFactorWithTransform\n gtsam::traits< RangeFactorWithTransform< A1, A2, T > >\n gtsam\n \n \n BinaryMeasurement.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01184.html\n- gtsam/base/Testable.h\n- gtsam/inference/Factor.h\n- gtsam/inference/Key.h\n- gtsam/linear/NoiseModel.h\n+ a01229.html\n+ gtsam/base/Testable.h\n+ gtsam/inference/Factor.h\n+ gtsam/inference/Key.h\n+ gtsam/linear/NoiseModel.h\n gtsam::BinaryMeasurement\n gtsam\n \n \n DsfTrackGenerator.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01211.html\n- gtsam/sfm/DsfTrackGenerator.h\n+ a01199.html\n+ gtsam/sfm/DsfTrackGenerator.h\n gtsam\n \n \n DsfTrackGenerator.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01232.html\n+ a01196.html\n gtsam/base/DSFMap.h\n- gtsam/sfm/SfmTrack.h\n+ gtsam/sfm/SfmTrack.h\n gtsam::gtsfm::Keypoints\n gtsam\n \n \n MFAS.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01205.html\n- gtsam/sfm/MFAS.h\n+ a01226.html\n+ gtsam/sfm/MFAS.h\n \n \n MFAS.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01193.html\n- gtsam/inference/Key.h\n- gtsam/sfm/BinaryMeasurement.h\n+ a01184.html\n+ gtsam/inference/Key.h\n+ gtsam/sfm/BinaryMeasurement.h\n gtsam::MFAS\n gtsam\n \n \n SfmData.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01220.html\n+ a01211.html\n gtsam/inference/Symbol.h\n- gtsam/sfm/SfmData.h\n- gtsam/slam/GeneralSFMFactor.h\n+ gtsam/sfm/SfmData.h\n+ gtsam/slam/GeneralSFMFactor.h\n gtsam\n \n \n SfmData.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01199.html\n- gtsam/geometry/Cal3Bundler.h\n- gtsam/geometry/PinholeCamera.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/Values.h\n- gtsam/sfm/SfmTrack.h\n+ a01202.html\n+ gtsam/geometry/Cal3Bundler.h\n+ gtsam/geometry/PinholeCamera.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/nonlinear/Values.h\n+ gtsam/sfm/SfmTrack.h\n gtsam::SfmData\n gtsam::traits< SfmData >\n gtsam\n \n \n SfmTrack.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n a01217.html\n- gtsam/sfm/SfmTrack.h\n+ gtsam/sfm/SfmTrack.h\n gtsam\n \n \n SfmTrack.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01226.html\n- gtsam/base/serialization.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Point3.h\n+ a01214.html\n+ gtsam/base/serialization.h\n+ gtsam/geometry/Point2.h\n+ gtsam/geometry/Point3.h\n gtsam::SfmTrack2d\n gtsam::SfmTrack\n gtsam::traits< SfmTrack >\n gtsam\n \n \n ShonanAveraging.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01208.html\n- gtsam/linear/SubgraphPreconditioner.h\n- gtsam/nonlinear/LevenbergMarquardtOptimizer.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/sfm/ShonanAveraging.h\n- gtsam/sfm/ShonanFactor.h\n- gtsam/sfm/ShonanGaugeFactor.h\n- gtsam/slam/FrobeniusFactor.h\n+ a01232.html\n+ gtsam/linear/SubgraphPreconditioner.h\n+ gtsam/nonlinear/LevenbergMarquardtOptimizer.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/sfm/ShonanAveraging.h\n+ gtsam/sfm/ShonanFactor.h\n+ gtsam/sfm/ShonanGaugeFactor.h\n+ gtsam/slam/FrobeniusFactor.h\n gtsam\n \n \n ShonanAveraging.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01196.html\n- gtsam/base/Matrix.h\n- gtsam/base/Vector.h\n- gtsam/geometry/Rot2.h\n- gtsam/geometry/Rot3.h\n- gtsam/linear/VectorValues.h\n- gtsam/nonlinear/LevenbergMarquardtParams.h\n- gtsam/sfm/BinaryMeasurement.h\n- gtsam/linear/PowerMethod.h\n- gtsam/linear/AcceleratedPowerMethod.h\n- gtsam/slam/dataset.h\n+ a01187.html\n+ gtsam/base/Matrix.h\n+ gtsam/base/Vector.h\n+ gtsam/geometry/Rot2.h\n+ gtsam/geometry/Rot3.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/nonlinear/LevenbergMarquardtParams.h\n+ gtsam/sfm/BinaryMeasurement.h\n+ gtsam/linear/PowerMethod.h\n+ gtsam/linear/AcceleratedPowerMethod.h\n+ gtsam/slam/dataset.h\n gtsam::ShonanAveragingParameters\n gtsam::ShonanAveraging\n gtsam::ShonanAveraging2\n gtsam::ShonanAveraging3\n gtsam\n \n \n ShonanFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01187.html\n- gtsam/geometry/Rot2.h\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/SOn.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01208.html\n+ gtsam/geometry/Rot2.h\n+ gtsam/geometry/Rot3.h\n+ gtsam/geometry/SOn.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::ShonanFactor\n gtsam\n \n \n ShonanGaugeFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01214.html\n- gtsam/geometry/SOn.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01190.html\n+ gtsam/geometry/SOn.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::ShonanGaugeFactor\n gtsam\n \n \n TranslationFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01202.html\n- gtsam/geometry/Point3.h\n- gtsam/linear/NoiseModel.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01193.html\n+ gtsam/geometry/Point3.h\n+ gtsam/linear/NoiseModel.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::TranslationFactor\n gtsam\n \n \n TranslationRecovery.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n- a01229.html\n+ a01205.html\n gtsam/base/DSFMap.h\n- gtsam/geometry/Point3.h\n- gtsam/geometry/Pose3.h\n- gtsam/linear/NoiseModel.h\n- gtsam/nonlinear/LevenbergMarquardtOptimizer.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/Values.h\n- gtsam/sfm/TranslationFactor.h\n+ gtsam/geometry/Point3.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/linear/NoiseModel.h\n+ gtsam/nonlinear/LevenbergMarquardtOptimizer.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/nonlinear/Values.h\n+ gtsam/sfm/TranslationFactor.h\n gtsam/sfm/TranslationRecovery.h\n- gtsam/slam/BetweenFactor.h\n+ gtsam/slam/BetweenFactor.h\n gtsam/slam/PriorFactor.h\n gtsam/slam/expressions.h\n \n \n TranslationRecovery.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/\n a01223.html\n- gtsam/nonlinear/LevenbergMarquardtOptimizer.h\n- gtsam/nonlinear/Values.h\n- gtsam/sfm/BinaryMeasurement.h\n+ gtsam/nonlinear/LevenbergMarquardtOptimizer.h\n+ gtsam/nonlinear/Values.h\n+ gtsam/sfm/BinaryMeasurement.h\n gtsam::TranslationRecovery\n gtsam\n \n \n AntiFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01337.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/linear/GaussianFactor.h\n+ a01274.html\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/linear/GaussianFactor.h\n gtsam::AntiFactor\n gtsam\n \n \n BetweenFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01319.html\n- gtsam/base/Testable.h\n- gtsam/base/Lie.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01322.html\n+ gtsam/base/Testable.h\n+ gtsam/base/Lie.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::BetweenFactor\n gtsam::traits< BetweenFactor< VALUE > >\n gtsam::BetweenConstraint\n gtsam::traits< BetweenConstraint< VALUE > >\n gtsam\n \n \n BoundingConstraint.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01334.html\n- gtsam/base/Lie.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01331.html\n+ gtsam/base/Lie.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::BoundingConstraint1\n gtsam::BoundingConstraint2\n gtsam\n \n \n dataset.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01265.html\n+ a01262.html\n gtsam/sam/BearingRangeFactor.h\n- gtsam/slam/BetweenFactor.h\n- gtsam/slam/dataset.h\n- gtsam/geometry/Point3.h\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Rot3.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/linear/Sampler.h\n- gtsam/inference/FactorGraph.h\n+ gtsam/slam/BetweenFactor.h\n+ gtsam/slam/dataset.h\n+ gtsam/geometry/Point3.h\n+ gtsam/geometry/Pose2.h\n+ gtsam/geometry/Rot3.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/linear/Sampler.h\n+ gtsam/inference/FactorGraph.h\n gtsam/inference/Symbol.h\n- gtsam/base/Lie.h\n- gtsam/base/Matrix.h\n- gtsam/base/Value.h\n- gtsam/base/Vector.h\n- gtsam/base/types.h\n+ gtsam/base/Lie.h\n+ gtsam/base/Matrix.h\n+ gtsam/base/Value.h\n+ gtsam/base/Vector.h\n+ gtsam/base/types.h\n gtsam\n \n \n dataset.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01259.html\n- gtsam/sfm/BinaryMeasurement.h\n- gtsam/slam/BetweenFactor.h\n- gtsam/sfm/SfmData.h\n- gtsam/geometry/Cal3Bundler.h\n- gtsam/geometry/PinholeCamera.h\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Pose3.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/nonlinear/Values.h\n- gtsam/linear/NoiseModel.h\n- gtsam/base/serialization.h\n- gtsam/base/Testable.h\n- gtsam/base/types.h\n+ a01283.html\n+ gtsam/sfm/BinaryMeasurement.h\n+ gtsam/slam/BetweenFactor.h\n+ gtsam/sfm/SfmData.h\n+ gtsam/geometry/Cal3Bundler.h\n+ gtsam/geometry/PinholeCamera.h\n+ gtsam/geometry/Pose2.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/nonlinear/Values.h\n+ gtsam/linear/NoiseModel.h\n+ gtsam/base/serialization.h\n+ gtsam/base/Testable.h\n+ gtsam/base/types.h\n gtsam\n \n \n EssentialMatrixConstraint.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01253.html\n- gtsam/slam/EssentialMatrixConstraint.h\n+ a01235.html\n+ gtsam/slam/EssentialMatrixConstraint.h\n gtsam\n \n \n EssentialMatrixConstraint.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01244.html\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01298.html\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::EssentialMatrixConstraint\n gtsam\n \n \n FrobeniusFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01325.html\n- gtsam/slam/FrobeniusFactor.h\n+ a01319.html\n+ gtsam/slam/FrobeniusFactor.h\n gtsam\n \n \n FrobeniusFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01280.html\n- gtsam/geometry/Rot2.h\n- gtsam/geometry/Rot3.h\n- gtsam/geometry/SOn.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ a01325.html\n+ gtsam/geometry/Rot2.h\n+ gtsam/geometry/Rot3.h\n+ gtsam/geometry/SOn.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::FrobeniusPrior\n gtsam::FrobeniusFactor\n gtsam::FrobeniusBetweenFactor\n gtsam\n \n \n GeneralSFMFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01292.html\n- gtsam/geometry/PinholeCamera.h\n- gtsam/geometry/Point2.h\n- gtsam/geometry/Point3.h\n- gtsam/geometry/Pose3.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/linear/BinaryJacobianFactor.h\n- gtsam/linear/NoiseModel.h\n- gtsam/base/Manifold.h\n- gtsam/base/Matrix.h\n- gtsam/base/SymmetricBlockMatrix.h\n- gtsam/base/types.h\n- gtsam/base/Testable.h\n- gtsam/base/Vector.h\n- gtsam/base/timing.h\n+ a01334.html\n+ gtsam/geometry/PinholeCamera.h\n+ gtsam/geometry/Point2.h\n+ gtsam/geometry/Point3.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/linear/BinaryJacobianFactor.h\n+ gtsam/linear/NoiseModel.h\n+ gtsam/base/Manifold.h\n+ gtsam/base/Matrix.h\n+ gtsam/base/SymmetricBlockMatrix.h\n+ gtsam/base/types.h\n+ gtsam/base/Testable.h\n+ gtsam/base/Vector.h\n+ gtsam/base/timing.h\n gtsam::GeneralSFMFactor\n gtsam::traits< GeneralSFMFactor< CAMERA, LANDMARK > >\n gtsam::GeneralSFMFactor2\n gtsam::traits< GeneralSFMFactor2< CALIBRATION > >\n gtsam\n \n \n InitializePose.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01301.html\n+ a01280.html\n gtsam/inference/Symbol.h\n- gtsam/nonlinear/GaussNewtonOptimizer.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/nonlinear/GaussNewtonOptimizer.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam/nonlinear/PriorFactor.h\n- gtsam/slam/BetweenFactor.h\n+ gtsam/slam/BetweenFactor.h\n gtsam\n \n \n InitializePose3.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01340.html\n- gtsam/slam/InitializePose3.h\n- gtsam/slam/InitializePose.h\n+ a01304.html\n+ gtsam/slam/InitializePose3.h\n+ gtsam/slam/InitializePose.h\n gtsam/nonlinear/PriorFactor.h\n- gtsam/slam/BetweenFactor.h\n- gtsam/nonlinear/GaussNewtonOptimizer.h\n+ gtsam/slam/BetweenFactor.h\n+ gtsam/nonlinear/GaussNewtonOptimizer.h\n gtsam/inference/Symbol.h\n- gtsam/geometry/Pose2.h\n- gtsam/geometry/Pose3.h\n- gtsam/base/timing.h\n+ gtsam/geometry/Pose2.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/base/timing.h\n gtsam\n \n \n InitializePose3.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01304.html\n- gtsam/geometry/Rot3.h\n- gtsam/inference/graph.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n- gtsam/nonlinear/NonlinearFactorGraph.h\n+ a01238.html\n+ gtsam/geometry/Rot3.h\n+ gtsam/inference/graph.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n gtsam::InitializePose3\n gtsam\n \n \n lago.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01262.html\n- gtsam/nonlinear/NonlinearFactorGraph.h\n- gtsam/linear/GaussianFactorGraph.h\n- gtsam/linear/VectorValues.h\n- gtsam/inference/graph.h\n+ a01277.html\n+ gtsam/nonlinear/NonlinearFactorGraph.h\n+ gtsam/linear/GaussianFactorGraph.h\n+ gtsam/linear/VectorValues.h\n+ gtsam/inference/graph.h\n gtsam\n \n \n PoseRotationPrior.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01274.html\n+ a01307.html\n gtsam/geometry/concepts.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::PoseRotationPrior\n gtsam\n \n \n PoseTranslationPrior.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01271.html\n+ a01301.html\n gtsam/geometry/concepts.h\n- gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/nonlinear/NonlinearFactor.h\n gtsam::PoseTranslationPrior\n gtsam\n \n \n ProjectionFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01283.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/geometry/PinholeCamera.h\n- gtsam/geometry/Pose3.h\n- gtsam/geometry/Point3.h\n- gtsam/geometry/Cal3_S2.h\n+ a01337.html\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/geometry/PinholeCamera.h\n+ gtsam/geometry/Pose3.h\n+ gtsam/geometry/Point3.h\n+ gtsam/geometry/Cal3_S2.h\n gtsam::GenericProjectionFactor\n gtsam::traits< GenericProjectionFactor< POSE, LANDMARK, CALIBRATION > >\n gtsam\n \n \n RegularImplicitSchurFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01286.html\n- gtsam/geometry/CameraSet.h\n- gtsam/linear/JacobianFactor.h\n- gtsam/linear/VectorValues.h\n+ a01328.html\n+ gtsam/geometry/CameraSet.h\n+ gtsam/linear/JacobianFactor.h\n+ gtsam/linear/VectorValues.h\n gtsam::RegularImplicitSchurFactor\n gtsam::traits< RegularImplicitSchurFactor< CAMERA > >\n gtsam\n \n \n SmartFactorBase.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01316.html\n- gtsam/slam/RegularImplicitSchurFactor.h\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/linear/RegularHessianFactor.h\n- gtsam/geometry/CameraSet.h\n+ a01241.html\n+ gtsam/slam/RegularImplicitSchurFactor.h\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/linear/RegularHessianFactor.h\n+ gtsam/geometry/CameraSet.h\n gtsam::SmartFactorBase\n gtsam\n \n \n SmartFactorParams.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01298.html\n+ a01295.html\n gtsam/geometry/triangulation.h\n gtsam::SmartProjectionParams\n gtsam\n \n \n SmartProjectionFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01331.html\n- gtsam/slam/SmartFactorBase.h\n- gtsam/slam/SmartFactorParams.h\n+ a01271.html\n+ gtsam/slam/SmartFactorBase.h\n+ gtsam/slam/SmartFactorParams.h\n gtsam/geometry/triangulation.h\n gtsam/inference/Symbol.h\n- gtsam/slam/dataset.h\n+ gtsam/slam/dataset.h\n gtsam::SmartProjectionFactor\n gtsam::traits< SmartProjectionFactor< CAMERA > >\n gtsam\n \n \n SmartProjectionPoseFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01277.html\n- gtsam/slam/SmartProjectionFactor.h\n+ a01289.html\n+ gtsam/slam/SmartProjectionFactor.h\n gtsam::SmartProjectionPoseFactor\n gtsam::traits< SmartProjectionPoseFactor< CALIBRATION > >\n gtsam\n \n \n SmartProjectionRigFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01307.html\n- gtsam/slam/SmartProjectionFactor.h\n+ a01292.html\n+ gtsam/slam/SmartProjectionFactor.h\n gtsam::SmartProjectionRigFactor\n gtsam::traits< SmartProjectionRigFactor< CAMERA > >\n gtsam\n \n \n StereoFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/\n- a01250.html\n- gtsam/nonlinear/NonlinearFactor.h\n- gtsam/geometry/StereoCamera.h\n+ a01316.html\n+ gtsam/nonlinear/NonlinearFactor.h\n+ gtsam/geometry/StereoCamera.h\n gtsam::GenericStereoFactor\n gtsam::traits< GenericStereoFactor< T1, T2 > >\n gtsam\n \n \n SymbolicBayesNet.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01391.html\n- gtsam/inference/FactorGraph-inst.h\n- gtsam/symbolic/SymbolicBayesNet.h\n+ a01385.html\n+ gtsam/inference/FactorGraph-inst.h\n+ gtsam/symbolic/SymbolicBayesNet.h\n gtsam\n \n \n SymbolicBayesNet.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01382.html\n- gtsam/symbolic/SymbolicConditional.h\n- gtsam/inference/BayesNet.h\n- gtsam/inference/FactorGraph.h\n- gtsam/base/types.h\n+ a01373.html\n+ gtsam/symbolic/SymbolicConditional.h\n+ gtsam/inference/BayesNet.h\n+ gtsam/inference/FactorGraph.h\n+ gtsam/base/types.h\n gtsam::SymbolicBayesNet\n gtsam::traits< SymbolicBayesNet >\n gtsam\n \n \n SymbolicBayesTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01346.html\n- gtsam/symbolic/SymbolicBayesNet.h\n- gtsam/symbolic/SymbolicFactorGraph.h\n- gtsam/inference/BayesTree.h\n- gtsam/inference/BayesTreeCliqueBase.h\n+ a01364.html\n+ gtsam/symbolic/SymbolicBayesNet.h\n+ gtsam/symbolic/SymbolicFactorGraph.h\n+ gtsam/inference/BayesTree.h\n+ gtsam/inference/BayesTreeCliqueBase.h\n gtsam::SymbolicBayesTreeClique\n gtsam::SymbolicBayesTree\n gtsam::traits< SymbolicBayesTreeClique >\n gtsam::traits< SymbolicBayesTree >\n gtsam\n \n \n SymbolicConditional.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01358.html\n- gtsam/symbolic/SymbolicConditional.h\n+ a01355.html\n+ gtsam/symbolic/SymbolicConditional.h\n gtsam\n \n \n SymbolicConditional.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01367.html\n- gtsam/base/Testable.h\n- gtsam/base/types.h\n- gtsam/symbolic/SymbolicFactor.h\n+ a01370.html\n+ gtsam/base/Testable.h\n+ gtsam/base/types.h\n+ gtsam/symbolic/SymbolicFactor.h\n gtsam::SymbolicConditional\n gtsam::traits< SymbolicConditional >\n gtsam\n \n \n SymbolicEliminationTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01388.html\n- gtsam/inference/EliminationTree-inst.h\n- gtsam/symbolic/SymbolicEliminationTree.h\n+ a01349.html\n+ gtsam/inference/EliminationTree-inst.h\n+ gtsam/symbolic/SymbolicEliminationTree.h\n gtsam\n \n \n SymbolicEliminationTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01349.html\n- gtsam/symbolic/SymbolicBayesNet.h\n- gtsam/symbolic/SymbolicFactorGraph.h\n- gtsam/inference/EliminationTree.h\n+ a01388.html\n+ gtsam/symbolic/SymbolicBayesNet.h\n+ gtsam/symbolic/SymbolicFactorGraph.h\n+ gtsam/inference/EliminationTree.h\n gtsam::SymbolicEliminationTree\n gtsam::traits< SymbolicEliminationTree >\n gtsam\n \n \n SymbolicFactor-inst.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01376.html\n- gtsam/symbolic/SymbolicFactor.h\n- gtsam/symbolic/SymbolicConditional.h\n- gtsam/inference/Factor.h\n- gtsam/inference/Key.h\n- gtsam/base/timing.h\n+ a01361.html\n+ gtsam/symbolic/SymbolicFactor.h\n+ gtsam/symbolic/SymbolicConditional.h\n+ gtsam/inference/Factor.h\n+ gtsam/inference/Key.h\n+ gtsam/base/timing.h\n gtsam\n \n \n SymbolicFactor.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01355.html\n- gtsam/base/FastVector.h\n- gtsam/inference/Ordering.h\n- gtsam/symbolic/SymbolicFactor.h\n- gtsam/symbolic/SymbolicConditional.h\n- gtsam/symbolic/SymbolicFactorGraph.h\n- gtsam/symbolic/SymbolicFactor-inst.h\n+ a01376.html\n+ gtsam/base/FastVector.h\n+ gtsam/inference/Ordering.h\n+ gtsam/symbolic/SymbolicFactor.h\n+ gtsam/symbolic/SymbolicConditional.h\n+ gtsam/symbolic/SymbolicFactorGraph.h\n+ gtsam/symbolic/SymbolicFactor-inst.h\n gtsam\n \n \n SymbolicFactor.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01370.html\n- gtsam/inference/Factor.h\n- gtsam/inference/Key.h\n- gtsam/base/Testable.h\n+ a01379.html\n+ gtsam/inference/Factor.h\n+ gtsam/inference/Key.h\n+ gtsam/base/Testable.h\n gtsam::SymbolicFactor\n gtsam::traits< SymbolicFactor >\n gtsam\n \n \n SymbolicFactorGraph.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01352.html\n- gtsam/inference/FactorGraph-inst.h\n- gtsam/symbolic/SymbolicFactorGraph.h\n- gtsam/symbolic/SymbolicEliminationTree.h\n- gtsam/symbolic/SymbolicJunctionTree.h\n- gtsam/symbolic/SymbolicBayesTree.h\n- gtsam/symbolic/SymbolicConditional.h\n+ a01343.html\n+ gtsam/inference/FactorGraph-inst.h\n+ gtsam/symbolic/SymbolicFactorGraph.h\n+ gtsam/symbolic/SymbolicEliminationTree.h\n+ gtsam/symbolic/SymbolicJunctionTree.h\n+ gtsam/symbolic/SymbolicBayesTree.h\n+ gtsam/symbolic/SymbolicConditional.h\n gtsam\n \n \n SymbolicFactorGraph.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01385.html\n- gtsam/symbolic/SymbolicFactor.h\n- gtsam/inference/FactorGraph.h\n- gtsam/inference/EliminateableFactorGraph.h\n- gtsam/base/types.h\n+ a01367.html\n+ gtsam/symbolic/SymbolicFactor.h\n+ gtsam/inference/FactorGraph.h\n+ gtsam/inference/EliminateableFactorGraph.h\n+ gtsam/base/types.h\n gtsam::EliminationTraits< SymbolicFactorGraph >\n gtsam::SymbolicFactorGraph\n gtsam::traits< SymbolicFactorGraph >\n gtsam\n \n \n SymbolicISAM.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01379.html\n- gtsam/symbolic/SymbolicISAM.h\n- gtsam/inference/ISAM-inst.h\n+ a01346.html\n+ gtsam/symbolic/SymbolicISAM.h\n+ gtsam/inference/ISAM-inst.h\n gtsam\n \n \n SymbolicISAM.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01361.html\n- gtsam/symbolic/SymbolicBayesTree.h\n- gtsam/inference/ISAM.h\n+ a01358.html\n+ gtsam/symbolic/SymbolicBayesTree.h\n+ gtsam/inference/ISAM.h\n gtsam::SymbolicISAM\n gtsam\n \n \n SymbolicJunctionTree.cpp\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01373.html\n+ a01391.html\n gtsam/inference/JunctionTree-inst.h\n- gtsam/symbolic/SymbolicJunctionTree.h\n- gtsam/symbolic/SymbolicEliminationTree.h\n+ gtsam/symbolic/SymbolicJunctionTree.h\n+ gtsam/symbolic/SymbolicEliminationTree.h\n gtsam\n \n \n SymbolicJunctionTree.h\n /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/\n- a01343.html\n- gtsam/symbolic/SymbolicFactorGraph.h\n- gtsam/symbolic/SymbolicBayesTree.h\n- gtsam/inference/JunctionTree.h\n+ a01382.html\n+ gtsam/symbolic/SymbolicFactorGraph.h\n+ gtsam/symbolic/SymbolicBayesTree.h\n+ gtsam/inference/JunctionTree.h\n gtsam::SymbolicJunctionTree\n gtsam\n \n \n boost::mp11::detail::_merge_and_renumber\n a02576.html\n class Sequence1\n"}]}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/navtreedata.js", "source2": "./usr/share/doc/libgtsam-dev/html/navtreedata.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -61,18 +61,18 @@\n ]]\n ]]\n ]]\n ];\n \n var NAVTREEINDEX = [\n \"a00002.html\",\n- \"a00143.html#a5b0db4ac5f279b12fc91fab4cb40b1bf\",\n- \"a00461_source.html\",\n- \"a00836_source.html\",\n- \"a01244.html\",\n+ \"a00113.html#aa7ed1d4fe2dd6828cfeb2d8f488b818d\",\n+ \"a00452.html#ad167fac94fa72c0d3b8db36e5fa2becb\",\n+ \"a00830.html#a0ec82adc6e13261cf4a012b65b301256\",\n+ \"a01238_source.html\",\n \"a01428.html#a5ca42a2fc87373c005299f3087995a97\",\n \"a02324.html#ab8454e55f25f7f475f8d31001625a8e9\",\n \"a02596.html#a5a0554b9e0758f370073ea3cc5cf1c9f\",\n \"a02936.html\",\n \"a03248.html#af0c181f7816a5de150141de9759b02b4\",\n \"a03456.html#a98e6ad1277d067c04b7efaca7d2b5a47\",\n \"a03524.html#abf82d480691d503a5cf78eb13c2c45f0\",\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/navtreeindex0.js", "source2": "./usr/share/doc/libgtsam-dev/html/navtreeindex0.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,252 +1,252 @@\n var NAVTREEINDEX0 = {\n- \"a00002.html\": [4, 0, 0, 0, 20],\n- \"a00002.html#a64b5e2e3c812d2cdea5ee294100f825f\": [4, 0, 0, 0, 20, 7],\n- \"a00002.html#ae03a6aedf0a82f67c2f3e987fb3aacba\": [4, 0, 0, 0, 20, 8],\n- \"a00002_source.html\": [4, 0, 0, 0, 20],\n- \"a00008.html\": [4, 0, 0, 0, 6],\n- \"a00008_source.html\": [4, 0, 0, 0, 6],\n- \"a00014.html\": [4, 0, 0, 0, 11],\n- \"a00014_source.html\": [4, 0, 0, 0, 11],\n- \"a00017.html\": [4, 0, 0, 0, 10],\n- \"a00017_source.html\": [4, 0, 0, 0, 10],\n- \"a00020.html\": [4, 0, 0, 0, 22],\n- \"a00020.html#a0d998e1b770c9864946ddb031b1c4522\": [4, 0, 0, 0, 22, 9],\n- \"a00020.html#a2218e53a2b99c449e70aa5b7805895fc\": [4, 0, 0, 0, 22, 29],\n- \"a00020.html#a24d3ad0252f91f0ec301593c45cf5af7\": [4, 0, 0, 0, 22, 41],\n- \"a00020.html#a2754f325c8600303d627d9e8cf1f9949\": [4, 0, 0, 0, 22, 34],\n- \"a00020.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\": [4, 0, 0, 0, 22, 35],\n- \"a00020.html#a3f9622226dfe06908f11b42bf0bdd22d\": [4, 0, 0, 0, 22, 6],\n- \"a00020.html#a44ead03912d5dcf094d8421e1702ee71\": [4, 0, 0, 0, 22, 31],\n- \"a00020.html#a4b81794af72954abafbb726fc712f5db\": [4, 0, 0, 0, 22, 24],\n- \"a00020.html#a54fa43c89c5334314c8c75939dd5c2d7\": [4, 0, 0, 0, 22, 30],\n- \"a00020.html#a559dba69e2854eb66e34222f60f55722\": [4, 0, 0, 0, 22, 14],\n- \"a00020.html#a57edf6ed7312f63d35f73233665c334d\": [4, 0, 0, 0, 22, 43],\n- \"a00020.html#a5c82884a356ddd09229a5283aed04df9\": [4, 0, 0, 0, 22, 37],\n- \"a00020.html#a60019a03f26b92c6b2a08e43d153d4c0\": [4, 0, 0, 0, 22, 42],\n- \"a00020.html#a6c4876cbe85d5651a52eda0e97c60f2f\": [4, 0, 0, 0, 22, 10],\n- \"a00020.html#a7a116d0643f123ef3b15d91056506492\": [4, 0, 0, 0, 22, 8],\n- \"a00020.html#a7baa2f3184a444adce108633c0265e0c\": [4, 0, 0, 0, 22, 19],\n- \"a00020.html#a7d85957bab2d18cf56ab9aaf95a106de\": [4, 0, 0, 0, 22, 28],\n- \"a00020.html#a7eec9339ab5a008a28ddfaa6b2c94611\": [4, 0, 0, 0, 22, 21],\n- \"a00020.html#a8b0bf332d52b333dab2b20d763c8925b\": [4, 0, 0, 0, 22, 11],\n- \"a00020.html#a8d7e46204d953f64a39445599dbd7eee\": [4, 0, 0, 0, 22, 39],\n- \"a00020.html#a97f108d19e52c83c331c55d35b23796e\": [4, 0, 0, 0, 22, 36],\n- \"a00020.html#a9ae1d9fe2ccad044fbb88b5c1d9e035a\": [4, 0, 0, 0, 22, 38],\n- \"a00020.html#aa2e36d7ab63000feddaeb61bbfcf2db1\": [4, 0, 0, 0, 22, 40],\n- \"a00020.html#ab15462d8c16813d0a7a5b1f76a2f64b7\": [4, 0, 0, 0, 22, 18],\n- \"a00020.html#ab235abf7505b634be2165e0db58239dd\": [4, 0, 0, 0, 22, 26],\n- \"a00020.html#ab2c65f1a69009a306b6a5f9ef31dcee2\": [4, 0, 0, 0, 22, 16],\n- \"a00020.html#aba542e2cd85f08b76f80a0871a4ea713\": [4, 0, 0, 0, 22, 12],\n- \"a00020.html#abb0e19bbbeaca95843e8161b89a12fda\": [4, 0, 0, 0, 22, 7],\n- \"a00020.html#abc29e3164ed30e785a3c48dfd1aa6ca5\": [4, 0, 0, 0, 22, 32],\n- \"a00020.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\": [4, 0, 0, 0, 22, 20],\n- \"a00020.html#ad1088fa2d1494e6a4123a6bc3f5c2d7e\": [4, 0, 0, 0, 22, 22],\n- \"a00020.html#ad8b524ba6c9aed0d21a020999c9b5d88\": [4, 0, 0, 0, 22, 13],\n- \"a00020.html#ad8f0349471464c1fb515819d9503849a\": [4, 0, 0, 0, 22, 25],\n- \"a00020.html#ae32c295e2c40c1e85f146a8a6266eaa8\": [4, 0, 0, 0, 22, 33],\n- \"a00020.html#af1c32907adce74cf9edd6ee5bba5a085\": [4, 0, 0, 0, 22, 15],\n- \"a00020.html#af31e657258505b2e5148846ebbaa3195\": [4, 0, 0, 0, 22, 17],\n- \"a00020.html#afd5b3cf3f54adcbdd6d9e7403f1a792f\": [4, 0, 0, 0, 22, 27],\n- \"a00020.html#aff78dee59ac0250432081f39deb5f6d1\": [4, 0, 0, 0, 22, 23],\n- \"a00020_source.html\": [4, 0, 0, 0, 22],\n- \"a00023.html\": [4, 0, 0, 0, 26],\n- \"a00023_source.html\": [4, 0, 0, 0, 26],\n- \"a00026_source.html\": [4, 0, 0, 0, 4],\n- \"a00032.html\": [4, 0, 0, 0, 5],\n- \"a00038.html\": [4, 0, 0, 0, 19],\n- \"a00038.html#a47e06cd29f4e8a20a8a7842e4045845f\": [4, 0, 0, 0, 19, 0],\n- \"a00038.html#a6f805b32c5544e5552d702d5e2b4e801\": [4, 0, 0, 0, 19, 2],\n- \"a00038.html#abcb9ece2bd206193ac40f118f1815c0e\": [4, 0, 0, 0, 19, 1],\n- \"a00038_source.html\": [4, 0, 0, 0, 19],\n- \"a00041.html\": [4, 0, 0, 0, 30],\n- \"a00041_source.html\": [4, 0, 0, 0, 30],\n- \"a00044.html\": [4, 0, 0, 0, 8],\n- \"a00050.html\": [4, 0, 0, 0, 1],\n- \"a00050.html#a747683f736c50bca16b3aab0e95b1b76\": [4, 0, 0, 0, 1, 0],\n- \"a00050.html#abe82fa6aceccfa2360cf314ab44f39ad\": [4, 0, 0, 0, 1, 1],\n- \"a00053.html\": [4, 0, 0, 0, 32],\n- \"a00053.html#a08641f0f7145716bba9159dd95099a44\": [4, 0, 0, 0, 32, 11],\n- \"a00053.html#a0eec17f894b358dd9f30d7af28082ba5\": [4, 0, 0, 0, 32, 2],\n- \"a00053.html#a21e760bc75888053afd86a27d56b6148\": [4, 0, 0, 0, 32, 8],\n- \"a00053.html#a254be27d6d4b416fa2b546c77ae783fc\": [4, 0, 0, 0, 32, 1],\n- \"a00053.html#a2f19ba6625a264457805513fefcb5c32\": [4, 0, 0, 0, 32, 9],\n- \"a00053.html#a2f509195ea2180d0f7dbd3a99a088ff4\": [4, 0, 0, 0, 32, 0],\n- \"a00053.html#a59ba6a7db27344c5cb021f1421905020\": [4, 0, 0, 0, 32, 4],\n- \"a00053.html#a6d6b2964354593f69848f6bf5d3e0ca1\": [4, 0, 0, 0, 32, 3],\n- \"a00053.html#a830c8c65902d7d0e763562e6c9357346\": [4, 0, 0, 0, 32, 10],\n- \"a00053.html#a982034802415eb6e9bd02355257ed96a\": [4, 0, 0, 0, 32, 7],\n- \"a00053.html#aa0926a5d779171bd8e1d30fb5982b5c0\": [4, 0, 0, 0, 32, 5],\n- \"a00053.html#add6d6575582314cc9b5dbdbe2a86374d\": [4, 0, 0, 0, 32, 6],\n- \"a00053_source.html\": [4, 0, 0, 0, 32],\n- \"a00056.html\": [4, 0, 0, 0, 44],\n- \"a00056_source.html\": [4, 0, 0, 0, 44],\n- \"a00059.html\": [4, 0, 0, 0, 41],\n- \"a00059_source.html\": [4, 0, 0, 0, 41],\n- \"a00062.html\": [4, 0, 0, 0, 13],\n- \"a00062_source.html\": [4, 0, 0, 0, 13],\n- \"a00065.html\": [4, 0, 0, 0, 16],\n- \"a00065.html#a2e95b5b5508cf3284107e979401bd1a4\": [4, 0, 0, 0, 16, 9],\n- \"a00065.html#aac1ea136475ea605715c809f4b3f0156\": [4, 0, 0, 0, 16, 8],\n- \"a00065_source.html\": [4, 0, 0, 0, 16],\n- \"a00068.html\": [4, 0, 0, 0, 21],\n- \"a00068.html#a0d998e1b770c9864946ddb031b1c4522\": [4, 0, 0, 0, 21, 3],\n- \"a00068.html#a2218e53a2b99c449e70aa5b7805895fc\": [4, 0, 0, 0, 21, 18],\n- \"a00068.html#a24d3ad0252f91f0ec301593c45cf5af7\": [4, 0, 0, 0, 21, 25],\n- \"a00068.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\": [4, 0, 0, 0, 21, 22],\n- \"a00068.html#a3f9622226dfe06908f11b42bf0bdd22d\": [4, 0, 0, 0, 21, 0],\n- \"a00068.html#a44ead03912d5dcf094d8421e1702ee71\": [4, 0, 0, 0, 21, 20],\n- \"a00068.html#a4b81794af72954abafbb726fc712f5db\": [4, 0, 0, 0, 21, 15],\n- \"a00068.html#a54fa43c89c5334314c8c75939dd5c2d7\": [4, 0, 0, 0, 21, 19],\n- \"a00068.html#a5c82884a356ddd09229a5283aed04df9\": [4, 0, 0, 0, 21, 23],\n- \"a00068.html#a60019a03f26b92c6b2a08e43d153d4c0\": [4, 0, 0, 0, 21, 26],\n- \"a00068.html#a6c4876cbe85d5651a52eda0e97c60f2f\": [4, 0, 0, 0, 21, 4],\n- \"a00068.html#a7a116d0643f123ef3b15d91056506492\": [4, 0, 0, 0, 21, 2],\n- \"a00068.html#a7baa2f3184a444adce108633c0265e0c\": [4, 0, 0, 0, 21, 11],\n- \"a00068.html#a7d85957bab2d18cf56ab9aaf95a106de\": [4, 0, 0, 0, 21, 17],\n- \"a00068.html#a7eec9339ab5a008a28ddfaa6b2c94611\": [4, 0, 0, 0, 21, 13],\n- \"a00068.html#a8b0bf332d52b333dab2b20d763c8925b\": [4, 0, 0, 0, 21, 5],\n- \"a00068.html#a8d7e46204d953f64a39445599dbd7eee\": [4, 0, 0, 0, 21, 24],\n- \"a00068.html#ab15462d8c16813d0a7a5b1f76a2f64b7\": [4, 0, 0, 0, 21, 10],\n- \"a00068.html#ab2c65f1a69009a306b6a5f9ef31dcee2\": [4, 0, 0, 0, 21, 9],\n- \"a00068.html#aba542e2cd85f08b76f80a0871a4ea713\": [4, 0, 0, 0, 21, 6],\n- \"a00068.html#abb0e19bbbeaca95843e8161b89a12fda\": [4, 0, 0, 0, 21, 1],\n- \"a00068.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\": [4, 0, 0, 0, 21, 12],\n- \"a00068.html#ad8b524ba6c9aed0d21a020999c9b5d88\": [4, 0, 0, 0, 21, 7],\n- \"a00068.html#ad8f0349471464c1fb515819d9503849a\": [4, 0, 0, 0, 21, 16],\n- \"a00068.html#ae32c295e2c40c1e85f146a8a6266eaa8\": [4, 0, 0, 0, 21, 21],\n- \"a00068.html#af1c32907adce74cf9edd6ee5bba5a085\": [4, 0, 0, 0, 21, 8],\n- \"a00068.html#aff78dee59ac0250432081f39deb5f6d1\": [4, 0, 0, 0, 21, 14],\n- \"a00071.html\": [4, 0, 0, 0, 47],\n- \"a00071_source.html\": [4, 0, 0, 0, 47],\n- \"a00074.html\": [4, 0, 0, 0, 17],\n- \"a00074.html#a3041816208c79ef76d3ef2e0991d90b2\": [4, 0, 0, 0, 17, 9],\n- \"a00074.html#a5c6ccec4a3ea452361c0956766bccef5\": [4, 0, 0, 0, 17, 12],\n- \"a00074.html#abd92914d0822d42584d46f31fb500048\": [4, 0, 0, 0, 17, 8],\n- \"a00074.html#adaf06b04fa93b050e99bc3d571d85d53\": [4, 0, 0, 0, 17, 11],\n- \"a00074.html#adbd55c711e6ceee791b595558eb3ec8a\": [4, 0, 0, 0, 17, 7],\n- \"a00074.html#aeef5af7d583d275fbc0e6e5af8bf2afc\": [4, 0, 0, 0, 17, 6],\n- \"a00074.html#af5a7c0a7422c38a0baa131c073e233ac\": [4, 0, 0, 0, 17, 10],\n- \"a00074.html#afe28b7f8e3592fb9f5cf9ebae09497ba\": [4, 0, 0, 0, 17, 13],\n- \"a00074_source.html\": [4, 0, 0, 0, 17],\n- \"a00077.html\": [4, 0, 0, 0, 9],\n- \"a00077_source.html\": [4, 0, 0, 0, 9],\n- \"a00080.html\": [4, 0, 0, 0, 31],\n- \"a00080.html#a1f3dc67ad88b799c469088e428c583b1\": [4, 0, 0, 0, 31, 6],\n- \"a00080.html#a659619cca082d1c10b07c033d48c54da\": [4, 0, 0, 0, 31, 5],\n- \"a00080.html#abe0a238cdd07d484ff0be56ae945b182\": [4, 0, 0, 0, 31, 4],\n- \"a00080.html#ad2dbee4a72127938c79162cc8b6d5152\": [4, 0, 0, 0, 31, 7],\n- \"a00080_source.html\": [4, 0, 0, 0, 31],\n- \"a00083.html\": [4, 0, 0, 0, 14],\n- \"a00083_source.html\": [4, 0, 0, 0, 14],\n- \"a00086_source.html\": [4, 0, 0, 0, 33],\n- \"a00089.html\": [4, 0, 0, 0, 43],\n- \"a00089.html#a09610ec69a8b3f3a00399bb378eda9cf\": [4, 0, 0, 0, 43, 4],\n- \"a00089.html#a09f2bbdb9f9d633542362dbe8d79f9ab\": [4, 0, 0, 0, 43, 19],\n- \"a00089.html#a14844c96706dc362917e0d5e76d65fbe\": [4, 0, 0, 0, 43, 6],\n- \"a00089.html#a2a0cfd7908b06491df49b6a9c9186775\": [4, 0, 0, 0, 43, 15],\n- \"a00089.html#a2ca3db47b15350977c1f03c5560ab332\": [4, 0, 0, 0, 43, 2],\n- \"a00089.html#a368ee40bd9c0124d572d2e49bcb077bf\": [4, 0, 0, 0, 43, 11],\n- \"a00089.html#a3d1cad2313f69f9fa5008fdc348d1526\": [4, 0, 0, 0, 43, 7],\n- \"a00089.html#a4ca41ba9ec9d6d21a2b9f5e00f9f25ed\": [4, 0, 0, 0, 43, 14],\n- \"a00089.html#a5e5d8018a0f44a6a299406aeda27d44b\": [4, 0, 0, 0, 43, 18],\n- \"a00089.html#a64988014ab746343803620dc42513646\": [4, 0, 0, 0, 43, 16],\n- \"a00089.html#a760cc36e9009b23cf564c436294b3504\": [4, 0, 0, 0, 43, 17],\n- \"a00089.html#a8bdced1844ffd6a53af0396d82eaa6da\": [4, 0, 0, 0, 43, 9],\n- \"a00089.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\": [4, 0, 0, 0, 43, 1],\n- \"a00089.html#aa7ed1d4fe2dd6828cfeb2d8f488b818d\": [4, 0, 0, 0, 43, 8],\n- \"a00089.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\": [4, 0, 0, 0, 43, 0],\n- \"a00089.html#ac9c0c05b0198ec0fb6e4115edb755910\": [4, 0, 0, 0, 43, 13],\n- \"a00089.html#aca1c56d11a05464a7a5458dc32ccc777\": [4, 0, 0, 0, 43, 20],\n- \"a00089.html#ad80249acf12bbea741e755cd8fc73042\": [4, 0, 0, 0, 43, 5],\n- \"a00089.html#ae19c359190a379cba44bf818a2293f7c\": [4, 0, 0, 0, 43, 10],\n- \"a00089.html#ae1c88acfa9575bcea3f2e738cb637a85\": [4, 0, 0, 0, 43, 3],\n- \"a00089.html#afb77eefc25dea0fb3e0fcc8f246b617a\": [4, 0, 0, 0, 43, 12],\n- \"a00089_source.html\": [4, 0, 0, 0, 43],\n- \"a00092.html\": [4, 0, 0, 0, 27],\n- \"a00092.html#a007080ca4741cc3d3d6a209b0ae3fe61\": [4, 0, 0, 0, 27, 18],\n- \"a00092.html#a0d8faf2bb0a908ff484677bb2fcf707c\": [4, 0, 0, 0, 27, 8],\n- \"a00092.html#a16c154fe5e35242e26af8286e77eea11\": [4, 0, 0, 0, 27, 22],\n- \"a00092.html#a262487af458d1f48dd7d3bc549caae00\": [4, 0, 0, 0, 27, 7],\n- \"a00092.html#a332bad7d1e70d3c04ceca35adce7a134\": [4, 0, 0, 0, 27, 12],\n- \"a00092.html#a349b7ed4a67a8c3d80737e5383507bc4\": [4, 0, 0, 0, 27, 4],\n- \"a00092.html#a56c41958e57a4bc7361ab593011462fd\": [4, 0, 0, 0, 27, 1],\n- \"a00092.html#a5f2fe2bfc17737ff9ae1fb8b210604f0\": [4, 0, 0, 0, 27, 10],\n- \"a00092.html#a7fad959f63f2eac1478c5ede7b9ae4db\": [4, 0, 0, 0, 27, 16],\n- \"a00092.html#a85ab51b2e8f4cea69f72e06a5c136e85\": [4, 0, 0, 0, 27, 11],\n- \"a00092.html#a89449123a746480a1d668cecb5576708\": [4, 0, 0, 0, 27, 20],\n- \"a00092.html#a8d7ea177ef3e93af15a4a77c2bd7fa8b\": [4, 0, 0, 0, 27, 9],\n- \"a00092.html#a8eb16192d8ebe2532d8a69c9f2bf15b2\": [4, 0, 0, 0, 27, 3],\n- \"a00092.html#a976ff7999fcc13ef602b6ece1b078bca\": [4, 0, 0, 0, 27, 23],\n- \"a00092.html#aa12c78301a9d2968afe5a1a14baa7e90\": [4, 0, 0, 0, 27, 19],\n- \"a00092.html#aa3261c2d455f892dae1921f8c3a39267\": [4, 0, 0, 0, 27, 17],\n- \"a00092.html#aa4d516d0d98946341ad2766521011d1b\": [4, 0, 0, 0, 27, 0],\n- \"a00092.html#aa5d177a3bf16f9f5acf45ee62c816479\": [4, 0, 0, 0, 27, 15],\n- \"a00092.html#ab181d2a3de466fc0c87bd29501bbc7ab\": [4, 0, 0, 0, 27, 6],\n- \"a00092.html#abb476c3e77878f7e0f70dd51871f48e7\": [4, 0, 0, 0, 27, 13],\n- \"a00092.html#abdff0a4b4fdf0e609aa62fb8d8b1dbba\": [4, 0, 0, 0, 27, 14],\n- \"a00092.html#adbb4a71187706918faca3a11519b62f6\": [4, 0, 0, 0, 27, 5],\n- \"a00092.html#ae2e939177cf58b42d7ed4c9856d536c5\": [4, 0, 0, 0, 27, 21],\n- \"a00092.html#aefeb77f2324e4bbfca2c8152c49a4565\": [4, 0, 0, 0, 27, 2],\n- \"a00092_source.html\": [4, 0, 0, 0, 27],\n- \"a00095.html\": [4, 0, 0, 0, 48],\n- \"a00095_source.html\": [4, 0, 0, 0, 48],\n- \"a00098_source.html\": [4, 0, 0, 0, 45],\n- \"a00101.html\": [4, 0, 0, 0, 46],\n- \"a00104.html\": [4, 0, 0, 0, 23],\n- \"a00104.html#a068f1f8df2afd609744bc82386259e71\": [4, 0, 0, 0, 23, 0],\n- \"a00104_source.html\": [4, 0, 0, 0, 23],\n- \"a00107.html\": [4, 0, 0, 0, 29],\n- \"a00110_source.html\": [4, 0, 0, 0, 15],\n- \"a00113_source.html\": [4, 0, 0, 0, 0],\n- \"a00116.html\": [4, 0, 0, 0, 7],\n- \"a00116_source.html\": [4, 0, 0, 0, 7],\n- \"a00122.html\": [4, 0, 0, 0, 18],\n- \"a00122.html#a644bbe6719d8dd756e11e8b3d2fd229a\": [4, 0, 0, 0, 18, 2],\n- \"a00122.html#a72a7c561cc91f437a22023297fb7f658\": [4, 0, 0, 0, 18, 0],\n- \"a00122.html#aaa623dd059a67523b029af6ec20a38da\": [4, 0, 0, 0, 18, 1],\n- \"a00122_source.html\": [4, 0, 0, 0, 18],\n- \"a00125.html\": [4, 0, 0, 0, 2],\n- \"a00125.html#a747683f736c50bca16b3aab0e95b1b76\": [4, 0, 0, 0, 2, 0],\n- \"a00125.html#abe82fa6aceccfa2360cf314ab44f39ad\": [4, 0, 0, 0, 2, 1],\n- \"a00125_source.html\": [4, 0, 0, 0, 2],\n- \"a00128.html\": [4, 0, 0, 0, 35],\n- \"a00131.html\": [4, 0, 0, 0, 36],\n- \"a00131_source.html\": [4, 0, 0, 0, 36],\n- \"a00134.html\": [4, 0, 0, 0, 28],\n- \"a00134_source.html\": [4, 0, 0, 0, 28],\n- \"a00137.html\": [4, 0, 0, 0, 25],\n- \"a00137_source.html\": [4, 0, 0, 0, 25],\n- \"a00140.html\": [4, 0, 0, 0, 42],\n- \"a00140.html#a09610ec69a8b3f3a00399bb378eda9cf\": [4, 0, 0, 0, 42, 4],\n- \"a00140.html#a09f2bbdb9f9d633542362dbe8d79f9ab\": [4, 0, 0, 0, 42, 15],\n- \"a00140.html#a14844c96706dc362917e0d5e76d65fbe\": [4, 0, 0, 0, 42, 5],\n- \"a00140.html#a2a0cfd7908b06491df49b6a9c9186775\": [4, 0, 0, 0, 42, 11],\n- \"a00140.html#a2ca3db47b15350977c1f03c5560ab332\": [4, 0, 0, 0, 42, 2],\n- \"a00140.html#a368ee40bd9c0124d572d2e49bcb077bf\": [4, 0, 0, 0, 42, 8],\n- \"a00140.html#a5e5d8018a0f44a6a299406aeda27d44b\": [4, 0, 0, 0, 42, 14],\n- \"a00140.html#a64988014ab746343803620dc42513646\": [4, 0, 0, 0, 42, 12],\n- \"a00140.html#a760cc36e9009b23cf564c436294b3504\": [4, 0, 0, 0, 42, 13],\n- \"a00140.html#a8bdced1844ffd6a53af0396d82eaa6da\": [4, 0, 0, 0, 42, 6],\n- \"a00140.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\": [4, 0, 0, 0, 42, 1],\n- \"a00140.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\": [4, 0, 0, 0, 42, 0],\n- \"a00140.html#ac9c0c05b0198ec0fb6e4115edb755910\": [4, 0, 0, 0, 42, 10],\n- \"a00140.html#aca1c56d11a05464a7a5458dc32ccc777\": [4, 0, 0, 0, 42, 16],\n- \"a00140.html#ae19c359190a379cba44bf818a2293f7c\": [4, 0, 0, 0, 42, 7],\n- \"a00140.html#ae1c88acfa9575bcea3f2e738cb637a85\": [4, 0, 0, 0, 42, 3],\n- \"a00140.html#afb77eefc25dea0fb3e0fcc8f246b617a\": [4, 0, 0, 0, 42, 9],\n- \"a00143.html\": [4, 0, 0, 0, 24],\n- \"a00143.html#a0ca8a22de666bc39015da34f150df748\": [4, 0, 0, 0, 24, 20],\n- \"a00143.html#a10295660c0177e08d45812fbb7e4c554\": [4, 0, 0, 0, 24, 28],\n- \"a00143.html#a11011d8e9bd69e486c9752875f710c18\": [4, 0, 0, 0, 24, 27],\n- \"a00143.html#a157eb3b44dd4e38bbd66f3cc68a20e43\": [4, 0, 0, 0, 24, 4],\n- \"a00143.html#a15c46aa999886d4ccd06ab73fc02db31\": [4, 0, 0, 0, 24, 22],\n- \"a00143.html#a272af6f7139b76d085279060646e32d1\": [4, 0, 0, 0, 24, 15],\n- \"a00143.html#a2cf5181fc7bca1ef6a1070959de7b975\": [4, 0, 0, 0, 24, 18],\n- \"a00143.html#a3b0937e08e79604ee6ab10fca6ffe65e\": [4, 0, 0, 0, 24, 11],\n- \"a00143.html#a3eb3fef9c77920dfd9496e71a0bcf669\": [4, 0, 0, 0, 24, 23],\n- \"a00143.html#a46d002a0529f1172aebb7e1d85d5c08c\": [4, 0, 0, 0, 24, 7],\n- \"a00143.html#a4c4c5744f0b348d4ec6c047f796e7924\": [4, 0, 0, 0, 24, 3],\n- \"a00143.html#a4e010b7f436124b9b421ba7dc438d987\": [4, 0, 0, 0, 24, 25],\n- \"a00143.html#a526a422ea611724345affed8b71d9bac\": [4, 0, 0, 0, 24, 10],\n- \"a00143.html#a581a9f8db043590096fbac682b8f6a93\": [4, 0, 0, 0, 24, 2]\n+ \"a00002.html\": [4, 0, 0, 0, 47],\n+ \"a00002_source.html\": [4, 0, 0, 0, 47],\n+ \"a00005.html\": [4, 0, 0, 0, 17],\n+ \"a00005.html#a3041816208c79ef76d3ef2e0991d90b2\": [4, 0, 0, 0, 17, 9],\n+ \"a00005.html#a5c6ccec4a3ea452361c0956766bccef5\": [4, 0, 0, 0, 17, 12],\n+ \"a00005.html#abd92914d0822d42584d46f31fb500048\": [4, 0, 0, 0, 17, 8],\n+ \"a00005.html#adaf06b04fa93b050e99bc3d571d85d53\": [4, 0, 0, 0, 17, 11],\n+ \"a00005.html#adbd55c711e6ceee791b595558eb3ec8a\": [4, 0, 0, 0, 17, 7],\n+ \"a00005.html#aeef5af7d583d275fbc0e6e5af8bf2afc\": [4, 0, 0, 0, 17, 6],\n+ \"a00005.html#af5a7c0a7422c38a0baa131c073e233ac\": [4, 0, 0, 0, 17, 10],\n+ \"a00005.html#afe28b7f8e3592fb9f5cf9ebae09497ba\": [4, 0, 0, 0, 17, 13],\n+ \"a00005_source.html\": [4, 0, 0, 0, 17],\n+ \"a00008.html\": [4, 0, 0, 0, 2],\n+ \"a00008.html#a747683f736c50bca16b3aab0e95b1b76\": [4, 0, 0, 0, 2, 0],\n+ \"a00008.html#abe82fa6aceccfa2360cf314ab44f39ad\": [4, 0, 0, 0, 2, 1],\n+ \"a00008_source.html\": [4, 0, 0, 0, 2],\n+ \"a00011.html\": [4, 0, 0, 0, 18],\n+ \"a00011.html#a644bbe6719d8dd756e11e8b3d2fd229a\": [4, 0, 0, 0, 18, 2],\n+ \"a00011.html#a72a7c561cc91f437a22023297fb7f658\": [4, 0, 0, 0, 18, 0],\n+ \"a00011.html#aaa623dd059a67523b029af6ec20a38da\": [4, 0, 0, 0, 18, 1],\n+ \"a00011_source.html\": [4, 0, 0, 0, 18],\n+ \"a00014.html\": [4, 0, 0, 0, 26],\n+ \"a00014_source.html\": [4, 0, 0, 0, 26],\n+ \"a00017_source.html\": [4, 0, 0, 0, 15],\n+ \"a00023.html\": [4, 0, 0, 0, 41],\n+ \"a00023_source.html\": [4, 0, 0, 0, 41],\n+ \"a00026.html\": [4, 0, 0, 0, 22],\n+ \"a00026.html#a0d998e1b770c9864946ddb031b1c4522\": [4, 0, 0, 0, 22, 9],\n+ \"a00026.html#a2218e53a2b99c449e70aa5b7805895fc\": [4, 0, 0, 0, 22, 29],\n+ \"a00026.html#a24d3ad0252f91f0ec301593c45cf5af7\": [4, 0, 0, 0, 22, 41],\n+ \"a00026.html#a2754f325c8600303d627d9e8cf1f9949\": [4, 0, 0, 0, 22, 34],\n+ \"a00026.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\": [4, 0, 0, 0, 22, 35],\n+ \"a00026.html#a3f9622226dfe06908f11b42bf0bdd22d\": [4, 0, 0, 0, 22, 6],\n+ \"a00026.html#a44ead03912d5dcf094d8421e1702ee71\": [4, 0, 0, 0, 22, 31],\n+ \"a00026.html#a4b81794af72954abafbb726fc712f5db\": [4, 0, 0, 0, 22, 24],\n+ \"a00026.html#a54fa43c89c5334314c8c75939dd5c2d7\": [4, 0, 0, 0, 22, 30],\n+ \"a00026.html#a559dba69e2854eb66e34222f60f55722\": [4, 0, 0, 0, 22, 14],\n+ \"a00026.html#a57edf6ed7312f63d35f73233665c334d\": [4, 0, 0, 0, 22, 43],\n+ \"a00026.html#a5c82884a356ddd09229a5283aed04df9\": [4, 0, 0, 0, 22, 37],\n+ \"a00026.html#a60019a03f26b92c6b2a08e43d153d4c0\": [4, 0, 0, 0, 22, 42],\n+ \"a00026.html#a6c4876cbe85d5651a52eda0e97c60f2f\": [4, 0, 0, 0, 22, 10],\n+ \"a00026.html#a7a116d0643f123ef3b15d91056506492\": [4, 0, 0, 0, 22, 8],\n+ \"a00026.html#a7baa2f3184a444adce108633c0265e0c\": [4, 0, 0, 0, 22, 19],\n+ \"a00026.html#a7d85957bab2d18cf56ab9aaf95a106de\": [4, 0, 0, 0, 22, 28],\n+ \"a00026.html#a7eec9339ab5a008a28ddfaa6b2c94611\": [4, 0, 0, 0, 22, 21],\n+ \"a00026.html#a8b0bf332d52b333dab2b20d763c8925b\": [4, 0, 0, 0, 22, 11],\n+ \"a00026.html#a8d7e46204d953f64a39445599dbd7eee\": [4, 0, 0, 0, 22, 39],\n+ \"a00026.html#a97f108d19e52c83c331c55d35b23796e\": [4, 0, 0, 0, 22, 36],\n+ \"a00026.html#a9ae1d9fe2ccad044fbb88b5c1d9e035a\": [4, 0, 0, 0, 22, 38],\n+ \"a00026.html#aa2e36d7ab63000feddaeb61bbfcf2db1\": [4, 0, 0, 0, 22, 40],\n+ \"a00026.html#ab15462d8c16813d0a7a5b1f76a2f64b7\": [4, 0, 0, 0, 22, 18],\n+ \"a00026.html#ab235abf7505b634be2165e0db58239dd\": [4, 0, 0, 0, 22, 26],\n+ \"a00026.html#ab2c65f1a69009a306b6a5f9ef31dcee2\": [4, 0, 0, 0, 22, 16],\n+ \"a00026.html#aba542e2cd85f08b76f80a0871a4ea713\": [4, 0, 0, 0, 22, 12],\n+ \"a00026.html#abb0e19bbbeaca95843e8161b89a12fda\": [4, 0, 0, 0, 22, 7],\n+ \"a00026.html#abc29e3164ed30e785a3c48dfd1aa6ca5\": [4, 0, 0, 0, 22, 32],\n+ \"a00026.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\": [4, 0, 0, 0, 22, 20],\n+ \"a00026.html#ad1088fa2d1494e6a4123a6bc3f5c2d7e\": [4, 0, 0, 0, 22, 22],\n+ \"a00026.html#ad8b524ba6c9aed0d21a020999c9b5d88\": [4, 0, 0, 0, 22, 13],\n+ \"a00026.html#ad8f0349471464c1fb515819d9503849a\": [4, 0, 0, 0, 22, 25],\n+ \"a00026.html#ae32c295e2c40c1e85f146a8a6266eaa8\": [4, 0, 0, 0, 22, 33],\n+ \"a00026.html#af1c32907adce74cf9edd6ee5bba5a085\": [4, 0, 0, 0, 22, 15],\n+ \"a00026.html#af31e657258505b2e5148846ebbaa3195\": [4, 0, 0, 0, 22, 17],\n+ \"a00026.html#afd5b3cf3f54adcbdd6d9e7403f1a792f\": [4, 0, 0, 0, 22, 27],\n+ \"a00026.html#aff78dee59ac0250432081f39deb5f6d1\": [4, 0, 0, 0, 22, 23],\n+ \"a00026_source.html\": [4, 0, 0, 0, 22],\n+ \"a00029.html\": [4, 0, 0, 0, 35],\n+ \"a00032.html\": [4, 0, 0, 0, 9],\n+ \"a00032_source.html\": [4, 0, 0, 0, 9],\n+ \"a00035.html\": [4, 0, 0, 0, 12],\n+ \"a00035_source.html\": [4, 0, 0, 0, 12],\n+ \"a00038.html\": [4, 0, 0, 0, 23],\n+ \"a00038.html#a068f1f8df2afd609744bc82386259e71\": [4, 0, 0, 0, 23, 0],\n+ \"a00038_source.html\": [4, 0, 0, 0, 23],\n+ \"a00041.html\": [4, 0, 0, 0, 10],\n+ \"a00041_source.html\": [4, 0, 0, 0, 10],\n+ \"a00044.html\": [4, 0, 0, 0, 20],\n+ \"a00044.html#a64b5e2e3c812d2cdea5ee294100f825f\": [4, 0, 0, 0, 20, 7],\n+ \"a00044.html#ae03a6aedf0a82f67c2f3e987fb3aacba\": [4, 0, 0, 0, 20, 8],\n+ \"a00044_source.html\": [4, 0, 0, 0, 20],\n+ \"a00047_source.html\": [4, 0, 0, 0, 4],\n+ \"a00050.html\": [4, 0, 0, 0, 42],\n+ \"a00050.html#a09610ec69a8b3f3a00399bb378eda9cf\": [4, 0, 0, 0, 42, 4],\n+ \"a00050.html#a09f2bbdb9f9d633542362dbe8d79f9ab\": [4, 0, 0, 0, 42, 15],\n+ \"a00050.html#a14844c96706dc362917e0d5e76d65fbe\": [4, 0, 0, 0, 42, 5],\n+ \"a00050.html#a2a0cfd7908b06491df49b6a9c9186775\": [4, 0, 0, 0, 42, 11],\n+ \"a00050.html#a2ca3db47b15350977c1f03c5560ab332\": [4, 0, 0, 0, 42, 2],\n+ \"a00050.html#a368ee40bd9c0124d572d2e49bcb077bf\": [4, 0, 0, 0, 42, 8],\n+ \"a00050.html#a5e5d8018a0f44a6a299406aeda27d44b\": [4, 0, 0, 0, 42, 14],\n+ \"a00050.html#a64988014ab746343803620dc42513646\": [4, 0, 0, 0, 42, 12],\n+ \"a00050.html#a760cc36e9009b23cf564c436294b3504\": [4, 0, 0, 0, 42, 13],\n+ \"a00050.html#a8bdced1844ffd6a53af0396d82eaa6da\": [4, 0, 0, 0, 42, 6],\n+ \"a00050.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\": [4, 0, 0, 0, 42, 1],\n+ \"a00050.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\": [4, 0, 0, 0, 42, 0],\n+ \"a00050.html#ac9c0c05b0198ec0fb6e4115edb755910\": [4, 0, 0, 0, 42, 10],\n+ \"a00050.html#aca1c56d11a05464a7a5458dc32ccc777\": [4, 0, 0, 0, 42, 16],\n+ \"a00050.html#ae19c359190a379cba44bf818a2293f7c\": [4, 0, 0, 0, 42, 7],\n+ \"a00050.html#ae1c88acfa9575bcea3f2e738cb637a85\": [4, 0, 0, 0, 42, 3],\n+ \"a00050.html#afb77eefc25dea0fb3e0fcc8f246b617a\": [4, 0, 0, 0, 42, 9],\n+ \"a00053.html\": [4, 0, 0, 0, 6],\n+ \"a00053_source.html\": [4, 0, 0, 0, 6],\n+ \"a00056.html\": [4, 0, 0, 0, 16],\n+ \"a00056.html#a2e95b5b5508cf3284107e979401bd1a4\": [4, 0, 0, 0, 16, 9],\n+ \"a00056.html#aac1ea136475ea605715c809f4b3f0156\": [4, 0, 0, 0, 16, 8],\n+ \"a00056_source.html\": [4, 0, 0, 0, 16],\n+ \"a00059.html\": [4, 0, 0, 0, 32],\n+ \"a00059.html#a08641f0f7145716bba9159dd95099a44\": [4, 0, 0, 0, 32, 11],\n+ \"a00059.html#a0eec17f894b358dd9f30d7af28082ba5\": [4, 0, 0, 0, 32, 2],\n+ \"a00059.html#a21e760bc75888053afd86a27d56b6148\": [4, 0, 0, 0, 32, 8],\n+ \"a00059.html#a254be27d6d4b416fa2b546c77ae783fc\": [4, 0, 0, 0, 32, 1],\n+ \"a00059.html#a2f19ba6625a264457805513fefcb5c32\": [4, 0, 0, 0, 32, 9],\n+ \"a00059.html#a2f509195ea2180d0f7dbd3a99a088ff4\": [4, 0, 0, 0, 32, 0],\n+ \"a00059.html#a59ba6a7db27344c5cb021f1421905020\": [4, 0, 0, 0, 32, 4],\n+ \"a00059.html#a6d6b2964354593f69848f6bf5d3e0ca1\": [4, 0, 0, 0, 32, 3],\n+ \"a00059.html#a830c8c65902d7d0e763562e6c9357346\": [4, 0, 0, 0, 32, 10],\n+ \"a00059.html#a982034802415eb6e9bd02355257ed96a\": [4, 0, 0, 0, 32, 7],\n+ \"a00059.html#aa0926a5d779171bd8e1d30fb5982b5c0\": [4, 0, 0, 0, 32, 5],\n+ \"a00059.html#add6d6575582314cc9b5dbdbe2a86374d\": [4, 0, 0, 0, 32, 6],\n+ \"a00059_source.html\": [4, 0, 0, 0, 32],\n+ \"a00062.html\": [4, 0, 0, 0, 27],\n+ \"a00062.html#a007080ca4741cc3d3d6a209b0ae3fe61\": [4, 0, 0, 0, 27, 18],\n+ \"a00062.html#a0d8faf2bb0a908ff484677bb2fcf707c\": [4, 0, 0, 0, 27, 8],\n+ \"a00062.html#a16c154fe5e35242e26af8286e77eea11\": [4, 0, 0, 0, 27, 22],\n+ \"a00062.html#a262487af458d1f48dd7d3bc549caae00\": [4, 0, 0, 0, 27, 7],\n+ \"a00062.html#a332bad7d1e70d3c04ceca35adce7a134\": [4, 0, 0, 0, 27, 12],\n+ \"a00062.html#a349b7ed4a67a8c3d80737e5383507bc4\": [4, 0, 0, 0, 27, 4],\n+ \"a00062.html#a56c41958e57a4bc7361ab593011462fd\": [4, 0, 0, 0, 27, 1],\n+ \"a00062.html#a5f2fe2bfc17737ff9ae1fb8b210604f0\": [4, 0, 0, 0, 27, 10],\n+ \"a00062.html#a7fad959f63f2eac1478c5ede7b9ae4db\": [4, 0, 0, 0, 27, 16],\n+ \"a00062.html#a85ab51b2e8f4cea69f72e06a5c136e85\": [4, 0, 0, 0, 27, 11],\n+ \"a00062.html#a89449123a746480a1d668cecb5576708\": [4, 0, 0, 0, 27, 20],\n+ \"a00062.html#a8d7ea177ef3e93af15a4a77c2bd7fa8b\": [4, 0, 0, 0, 27, 9],\n+ \"a00062.html#a8eb16192d8ebe2532d8a69c9f2bf15b2\": [4, 0, 0, 0, 27, 3],\n+ \"a00062.html#a976ff7999fcc13ef602b6ece1b078bca\": [4, 0, 0, 0, 27, 23],\n+ \"a00062.html#aa12c78301a9d2968afe5a1a14baa7e90\": [4, 0, 0, 0, 27, 19],\n+ \"a00062.html#aa3261c2d455f892dae1921f8c3a39267\": [4, 0, 0, 0, 27, 17],\n+ \"a00062.html#aa4d516d0d98946341ad2766521011d1b\": [4, 0, 0, 0, 27, 0],\n+ \"a00062.html#aa5d177a3bf16f9f5acf45ee62c816479\": [4, 0, 0, 0, 27, 15],\n+ \"a00062.html#ab181d2a3de466fc0c87bd29501bbc7ab\": [4, 0, 0, 0, 27, 6],\n+ \"a00062.html#abb476c3e77878f7e0f70dd51871f48e7\": [4, 0, 0, 0, 27, 13],\n+ \"a00062.html#abdff0a4b4fdf0e609aa62fb8d8b1dbba\": [4, 0, 0, 0, 27, 14],\n+ \"a00062.html#adbb4a71187706918faca3a11519b62f6\": [4, 0, 0, 0, 27, 5],\n+ \"a00062.html#ae2e939177cf58b42d7ed4c9856d536c5\": [4, 0, 0, 0, 27, 21],\n+ \"a00062.html#aefeb77f2324e4bbfca2c8152c49a4565\": [4, 0, 0, 0, 27, 2],\n+ \"a00062_source.html\": [4, 0, 0, 0, 27],\n+ \"a00068.html\": [4, 0, 0, 0, 1],\n+ \"a00068.html#a747683f736c50bca16b3aab0e95b1b76\": [4, 0, 0, 0, 1, 0],\n+ \"a00068.html#abe82fa6aceccfa2360cf314ab44f39ad\": [4, 0, 0, 0, 1, 1],\n+ \"a00071.html\": [4, 0, 0, 0, 21],\n+ \"a00071.html#a0d998e1b770c9864946ddb031b1c4522\": [4, 0, 0, 0, 21, 3],\n+ \"a00071.html#a2218e53a2b99c449e70aa5b7805895fc\": [4, 0, 0, 0, 21, 18],\n+ \"a00071.html#a24d3ad0252f91f0ec301593c45cf5af7\": [4, 0, 0, 0, 21, 25],\n+ \"a00071.html#a3eb7eed9019d3fda8fcf74fbf85b85c9\": [4, 0, 0, 0, 21, 22],\n+ \"a00071.html#a3f9622226dfe06908f11b42bf0bdd22d\": [4, 0, 0, 0, 21, 0],\n+ \"a00071.html#a44ead03912d5dcf094d8421e1702ee71\": [4, 0, 0, 0, 21, 20],\n+ \"a00071.html#a4b81794af72954abafbb726fc712f5db\": [4, 0, 0, 0, 21, 15],\n+ \"a00071.html#a54fa43c89c5334314c8c75939dd5c2d7\": [4, 0, 0, 0, 21, 19],\n+ \"a00071.html#a5c82884a356ddd09229a5283aed04df9\": [4, 0, 0, 0, 21, 23],\n+ \"a00071.html#a60019a03f26b92c6b2a08e43d153d4c0\": [4, 0, 0, 0, 21, 26],\n+ \"a00071.html#a6c4876cbe85d5651a52eda0e97c60f2f\": [4, 0, 0, 0, 21, 4],\n+ \"a00071.html#a7a116d0643f123ef3b15d91056506492\": [4, 0, 0, 0, 21, 2],\n+ \"a00071.html#a7baa2f3184a444adce108633c0265e0c\": [4, 0, 0, 0, 21, 11],\n+ \"a00071.html#a7d85957bab2d18cf56ab9aaf95a106de\": [4, 0, 0, 0, 21, 17],\n+ \"a00071.html#a7eec9339ab5a008a28ddfaa6b2c94611\": [4, 0, 0, 0, 21, 13],\n+ \"a00071.html#a8b0bf332d52b333dab2b20d763c8925b\": [4, 0, 0, 0, 21, 5],\n+ \"a00071.html#a8d7e46204d953f64a39445599dbd7eee\": [4, 0, 0, 0, 21, 24],\n+ \"a00071.html#ab15462d8c16813d0a7a5b1f76a2f64b7\": [4, 0, 0, 0, 21, 10],\n+ \"a00071.html#ab2c65f1a69009a306b6a5f9ef31dcee2\": [4, 0, 0, 0, 21, 9],\n+ \"a00071.html#aba542e2cd85f08b76f80a0871a4ea713\": [4, 0, 0, 0, 21, 6],\n+ \"a00071.html#abb0e19bbbeaca95843e8161b89a12fda\": [4, 0, 0, 0, 21, 1],\n+ \"a00071.html#abdd1ab05e8ac90b340fbd8f3b322dc6d\": [4, 0, 0, 0, 21, 12],\n+ \"a00071.html#ad8b524ba6c9aed0d21a020999c9b5d88\": [4, 0, 0, 0, 21, 7],\n+ \"a00071.html#ad8f0349471464c1fb515819d9503849a\": [4, 0, 0, 0, 21, 16],\n+ \"a00071.html#ae32c295e2c40c1e85f146a8a6266eaa8\": [4, 0, 0, 0, 21, 21],\n+ \"a00071.html#af1c32907adce74cf9edd6ee5bba5a085\": [4, 0, 0, 0, 21, 8],\n+ \"a00071.html#aff78dee59ac0250432081f39deb5f6d1\": [4, 0, 0, 0, 21, 14],\n+ \"a00074.html\": [4, 0, 0, 0, 24],\n+ \"a00074.html#a0ca8a22de666bc39015da34f150df748\": [4, 0, 0, 0, 24, 20],\n+ \"a00074.html#a10295660c0177e08d45812fbb7e4c554\": [4, 0, 0, 0, 24, 28],\n+ \"a00074.html#a11011d8e9bd69e486c9752875f710c18\": [4, 0, 0, 0, 24, 27],\n+ \"a00074.html#a157eb3b44dd4e38bbd66f3cc68a20e43\": [4, 0, 0, 0, 24, 4],\n+ \"a00074.html#a15c46aa999886d4ccd06ab73fc02db31\": [4, 0, 0, 0, 24, 22],\n+ \"a00074.html#a272af6f7139b76d085279060646e32d1\": [4, 0, 0, 0, 24, 15],\n+ \"a00074.html#a2cf5181fc7bca1ef6a1070959de7b975\": [4, 0, 0, 0, 24, 18],\n+ \"a00074.html#a3b0937e08e79604ee6ab10fca6ffe65e\": [4, 0, 0, 0, 24, 11],\n+ \"a00074.html#a3eb3fef9c77920dfd9496e71a0bcf669\": [4, 0, 0, 0, 24, 23],\n+ \"a00074.html#a46d002a0529f1172aebb7e1d85d5c08c\": [4, 0, 0, 0, 24, 7],\n+ \"a00074.html#a4c4c5744f0b348d4ec6c047f796e7924\": [4, 0, 0, 0, 24, 3],\n+ \"a00074.html#a4e010b7f436124b9b421ba7dc438d987\": [4, 0, 0, 0, 24, 25],\n+ \"a00074.html#a526a422ea611724345affed8b71d9bac\": [4, 0, 0, 0, 24, 10],\n+ \"a00074.html#a581a9f8db043590096fbac682b8f6a93\": [4, 0, 0, 0, 24, 2],\n+ \"a00074.html#a5b0db4ac5f279b12fc91fab4cb40b1bf\": [4, 0, 0, 0, 24, 6],\n+ \"a00074.html#a5ca42a2fc87373c005299f3087995a97\": [4, 0, 0, 0, 24, 19],\n+ \"a00074.html#a6846b5cc84c1d5a54a436121b27057e0\": [4, 0, 0, 0, 24, 13],\n+ \"a00074.html#a722e98babba795ce480f89527b572251\": [4, 0, 0, 0, 24, 16],\n+ \"a00074.html#a799c83517a20a8e0b0b014f26b50f660\": [4, 0, 0, 0, 24, 24],\n+ \"a00074.html#a8061b20199f839b115512d95d058fcbf\": [4, 0, 0, 0, 24, 14],\n+ \"a00074.html#aa8f0264edaf78d503809c1e3152340ee\": [4, 0, 0, 0, 24, 8],\n+ \"a00074.html#ac224e2384e41171181b2dbc0f700cdc1\": [4, 0, 0, 0, 24, 21],\n+ \"a00074.html#acc2f741132522a6ce57d544a27a95855\": [4, 0, 0, 0, 24, 17],\n+ \"a00074.html#acfbadc0ab0cd9386205b2737c5d0b727\": [4, 0, 0, 0, 24, 9],\n+ \"a00074.html#af40f61e8eff01acdb028ad33b8f3529b\": [4, 0, 0, 0, 24, 12],\n+ \"a00074.html#afcc94e3b49906e824c01a3d56df62d33\": [4, 0, 0, 0, 24, 5],\n+ \"a00074.html#afd8862271510196ec4e2d894f623942d\": [4, 0, 0, 0, 24, 26],\n+ \"a00074_source.html\": [4, 0, 0, 0, 24],\n+ \"a00077.html\": [4, 0, 0, 0, 19],\n+ \"a00077.html#a47e06cd29f4e8a20a8a7842e4045845f\": [4, 0, 0, 0, 19, 0],\n+ \"a00077.html#a6f805b32c5544e5552d702d5e2b4e801\": [4, 0, 0, 0, 19, 2],\n+ \"a00077.html#abcb9ece2bd206193ac40f118f1815c0e\": [4, 0, 0, 0, 19, 1],\n+ \"a00077_source.html\": [4, 0, 0, 0, 19],\n+ \"a00080.html\": [4, 0, 0, 0, 14],\n+ \"a00080_source.html\": [4, 0, 0, 0, 14],\n+ \"a00083.html\": [4, 0, 0, 0, 29],\n+ \"a00086.html\": [4, 0, 0, 0, 11],\n+ \"a00086_source.html\": [4, 0, 0, 0, 11],\n+ \"a00089.html\": [4, 0, 0, 0, 44],\n+ \"a00089_source.html\": [4, 0, 0, 0, 44],\n+ \"a00092.html\": [4, 0, 0, 0, 13],\n+ \"a00092_source.html\": [4, 0, 0, 0, 13],\n+ \"a00095.html\": [4, 0, 0, 0, 25],\n+ \"a00095_source.html\": [4, 0, 0, 0, 25],\n+ \"a00101.html\": [4, 0, 0, 0, 5],\n+ \"a00104_source.html\": [4, 0, 0, 0, 33],\n+ \"a00107.html\": [4, 0, 0, 0, 37],\n+ \"a00107.html#a3735d0cee6f4d530e75479f7b1ebaf07\": [4, 0, 0, 0, 37, 1],\n+ \"a00107.html#a50e24f0a9085721425089cdce18f2475\": [4, 0, 0, 0, 37, 2],\n+ \"a00107.html#a67e7c6f5c4916c4a58a783e6b566d55a\": [4, 0, 0, 0, 37, 0],\n+ \"a00107.html#a7228bbaf6ad62b65be7a2084c01aae5c\": [4, 0, 0, 0, 37, 4],\n+ \"a00107.html#afd7410807789da9ad91d6630063be36f\": [4, 0, 0, 0, 37, 3],\n+ \"a00107_source.html\": [4, 0, 0, 0, 37],\n+ \"a00110.html\": [4, 0, 0, 0, 31],\n+ \"a00110.html#a1f3dc67ad88b799c469088e428c583b1\": [4, 0, 0, 0, 31, 6],\n+ \"a00110.html#a659619cca082d1c10b07c033d48c54da\": [4, 0, 0, 0, 31, 5],\n+ \"a00110.html#abe0a238cdd07d484ff0be56ae945b182\": [4, 0, 0, 0, 31, 4],\n+ \"a00110.html#ad2dbee4a72127938c79162cc8b6d5152\": [4, 0, 0, 0, 31, 7],\n+ \"a00110_source.html\": [4, 0, 0, 0, 31],\n+ \"a00113.html\": [4, 0, 0, 0, 43],\n+ \"a00113.html#a09610ec69a8b3f3a00399bb378eda9cf\": [4, 0, 0, 0, 43, 4],\n+ \"a00113.html#a09f2bbdb9f9d633542362dbe8d79f9ab\": [4, 0, 0, 0, 43, 19],\n+ \"a00113.html#a14844c96706dc362917e0d5e76d65fbe\": [4, 0, 0, 0, 43, 6],\n+ \"a00113.html#a2a0cfd7908b06491df49b6a9c9186775\": [4, 0, 0, 0, 43, 15],\n+ \"a00113.html#a2ca3db47b15350977c1f03c5560ab332\": [4, 0, 0, 0, 43, 2],\n+ \"a00113.html#a368ee40bd9c0124d572d2e49bcb077bf\": [4, 0, 0, 0, 43, 11],\n+ \"a00113.html#a3d1cad2313f69f9fa5008fdc348d1526\": [4, 0, 0, 0, 43, 7],\n+ \"a00113.html#a4ca41ba9ec9d6d21a2b9f5e00f9f25ed\": [4, 0, 0, 0, 43, 14],\n+ \"a00113.html#a5e5d8018a0f44a6a299406aeda27d44b\": [4, 0, 0, 0, 43, 18],\n+ \"a00113.html#a64988014ab746343803620dc42513646\": [4, 0, 0, 0, 43, 16],\n+ \"a00113.html#a760cc36e9009b23cf564c436294b3504\": [4, 0, 0, 0, 43, 17],\n+ \"a00113.html#a8bdced1844ffd6a53af0396d82eaa6da\": [4, 0, 0, 0, 43, 9],\n+ \"a00113.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\": [4, 0, 0, 0, 43, 1]\n };\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/navtreeindex1.js", "source2": "./usr/share/doc/libgtsam-dev/html/navtreeindex1.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,224 +1,238 @@\n var NAVTREEINDEX1 = {\n- \"a00143.html#a5b0db4ac5f279b12fc91fab4cb40b1bf\": [4, 0, 0, 0, 24, 6],\n- \"a00143.html#a5ca42a2fc87373c005299f3087995a97\": [4, 0, 0, 0, 24, 19],\n- \"a00143.html#a6846b5cc84c1d5a54a436121b27057e0\": [4, 0, 0, 0, 24, 13],\n- \"a00143.html#a722e98babba795ce480f89527b572251\": [4, 0, 0, 0, 24, 16],\n- \"a00143.html#a799c83517a20a8e0b0b014f26b50f660\": [4, 0, 0, 0, 24, 24],\n- \"a00143.html#a8061b20199f839b115512d95d058fcbf\": [4, 0, 0, 0, 24, 14],\n- \"a00143.html#aa8f0264edaf78d503809c1e3152340ee\": [4, 0, 0, 0, 24, 8],\n- \"a00143.html#ac224e2384e41171181b2dbc0f700cdc1\": [4, 0, 0, 0, 24, 21],\n- \"a00143.html#acc2f741132522a6ce57d544a27a95855\": [4, 0, 0, 0, 24, 17],\n- \"a00143.html#acfbadc0ab0cd9386205b2737c5d0b727\": [4, 0, 0, 0, 24, 9],\n- \"a00143.html#af40f61e8eff01acdb028ad33b8f3529b\": [4, 0, 0, 0, 24, 12],\n- \"a00143.html#afcc94e3b49906e824c01a3d56df62d33\": [4, 0, 0, 0, 24, 5],\n- \"a00143.html#afd8862271510196ec4e2d894f623942d\": [4, 0, 0, 0, 24, 26],\n- \"a00143_source.html\": [4, 0, 0, 0, 24],\n- \"a00146.html\": [4, 0, 0, 0, 37],\n- \"a00146.html#a3735d0cee6f4d530e75479f7b1ebaf07\": [4, 0, 0, 0, 37, 1],\n- \"a00146.html#a50e24f0a9085721425089cdce18f2475\": [4, 0, 0, 0, 37, 2],\n- \"a00146.html#a67e7c6f5c4916c4a58a783e6b566d55a\": [4, 0, 0, 0, 37, 0],\n- \"a00146.html#a7228bbaf6ad62b65be7a2084c01aae5c\": [4, 0, 0, 0, 37, 4],\n- \"a00146.html#afd7410807789da9ad91d6630063be36f\": [4, 0, 0, 0, 37, 3],\n- \"a00146_source.html\": [4, 0, 0, 0, 37],\n- \"a00149.html\": [4, 0, 0, 0, 12],\n- \"a00149_source.html\": [4, 0, 0, 0, 12],\n- \"a00152.html\": [4, 0, 0, 1, 8],\n- \"a00152_source.html\": [4, 0, 0, 1, 8],\n+ \"a00113.html#aa7ed1d4fe2dd6828cfeb2d8f488b818d\": [4, 0, 0, 0, 43, 8],\n+ \"a00113.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\": [4, 0, 0, 0, 43, 0],\n+ \"a00113.html#ac9c0c05b0198ec0fb6e4115edb755910\": [4, 0, 0, 0, 43, 13],\n+ \"a00113.html#aca1c56d11a05464a7a5458dc32ccc777\": [4, 0, 0, 0, 43, 20],\n+ \"a00113.html#ad80249acf12bbea741e755cd8fc73042\": [4, 0, 0, 0, 43, 5],\n+ \"a00113.html#ae19c359190a379cba44bf818a2293f7c\": [4, 0, 0, 0, 43, 10],\n+ \"a00113.html#ae1c88acfa9575bcea3f2e738cb637a85\": [4, 0, 0, 0, 43, 3],\n+ \"a00113.html#afb77eefc25dea0fb3e0fcc8f246b617a\": [4, 0, 0, 0, 43, 12],\n+ \"a00113_source.html\": [4, 0, 0, 0, 43],\n+ \"a00116.html\": [4, 0, 0, 0, 7],\n+ \"a00116_source.html\": [4, 0, 0, 0, 7],\n+ \"a00122.html\": [4, 0, 0, 0, 30],\n+ \"a00122_source.html\": [4, 0, 0, 0, 30],\n+ \"a00125.html\": [4, 0, 0, 0, 8],\n+ \"a00131.html\": [4, 0, 0, 0, 46],\n+ \"a00137.html\": [4, 0, 0, 0, 36],\n+ \"a00137_source.html\": [4, 0, 0, 0, 36],\n+ \"a00140.html\": [4, 0, 0, 0, 48],\n+ \"a00140_source.html\": [4, 0, 0, 0, 48],\n+ \"a00143_source.html\": [4, 0, 0, 0, 0],\n+ \"a00146_source.html\": [4, 0, 0, 0, 45],\n+ \"a00149.html\": [4, 0, 0, 0, 28],\n+ \"a00149_source.html\": [4, 0, 0, 0, 28],\n+ \"a00152.html\": [4, 0, 0, 1, 6],\n+ \"a00152.html#a24ec5d6ec6b211d0cbaf645c11c198de\": [4, 0, 0, 1, 6, 2],\n+ \"a00152.html#a9920fe883a2f506440aca7c1a2bd1a00\": [4, 0, 0, 1, 6, 1],\n+ \"a00152_source.html\": [4, 0, 0, 1, 6],\n \"a00155.html\": [4, 0, 0, 1, 3],\n \"a00155_source.html\": [4, 0, 0, 1, 3],\n- \"a00158.html\": [4, 0, 0, 1, 0],\n- \"a00158_source.html\": [4, 0, 0, 1, 0],\n- \"a00161.html\": [4, 0, 0, 1, 7],\n- \"a00161_source.html\": [4, 0, 0, 1, 7],\n- \"a00164.html\": [4, 0, 0, 1, 2],\n- \"a00167.html\": [4, 0, 0, 1, 6],\n- \"a00167.html#a24ec5d6ec6b211d0cbaf645c11c198de\": [4, 0, 0, 1, 6, 2],\n- \"a00167.html#a9920fe883a2f506440aca7c1a2bd1a00\": [4, 0, 0, 1, 6, 1],\n- \"a00167_source.html\": [4, 0, 0, 1, 6],\n- \"a00170.html\": [4, 0, 0, 1, 4],\n+ \"a00158.html\": [4, 0, 0, 1, 7],\n+ \"a00158_source.html\": [4, 0, 0, 1, 7],\n+ \"a00161.html\": [4, 0, 0, 1, 8],\n+ \"a00161_source.html\": [4, 0, 0, 1, 8],\n+ \"a00164.html\": [4, 0, 0, 1, 4],\n+ \"a00167.html\": [4, 0, 0, 1, 2],\n+ \"a00170.html\": [4, 0, 0, 1, 1],\n+ \"a00170_source.html\": [4, 0, 0, 1, 1],\n \"a00173.html\": [4, 0, 0, 1, 5],\n \"a00173_source.html\": [4, 0, 0, 1, 5],\n- \"a00176.html\": [4, 0, 0, 1, 1],\n- \"a00176_source.html\": [4, 0, 0, 1, 1],\n- \"a00179.html\": [4, 0, 0, 2, 22],\n- \"a00179.html#aa8c26fa5afbbfd23795d7d421e543a81\": [4, 0, 0, 2, 22, 0],\n- \"a00179_source.html\": [4, 0, 0, 2, 22],\n- \"a00182.html\": [4, 0, 0, 2, 29],\n- \"a00182.html#aa6c58dfb2fc9398a026e3268ba2edfad\": [4, 0, 0, 2, 29, 2],\n- \"a00182.html#ab98cf2a4777006c28d6983db5d8ec574\": [4, 0, 0, 2, 29, 1],\n- \"a00182.html#ae4856250df52ce4b9b4b16c7a833408c\": [4, 0, 0, 2, 29, 0],\n- \"a00185.html\": [4, 0, 0, 2, 27],\n- \"a00185.html#a147114735037c2260d4810a8820e72f6\": [4, 0, 0, 2, 27, 0],\n- \"a00185.html#a2b6707b04064df79d26d1016dfa2a013\": [4, 0, 0, 2, 27, 1],\n- \"a00188.html\": [4, 0, 0, 2, 18],\n- \"a00188.html#ae1c1177c8725296b34601409322400ea\": [4, 0, 0, 2, 18, 1],\n- \"a00188_source.html\": [4, 0, 0, 2, 18],\n- \"a00191.html\": [4, 0, 0, 2, 28],\n- \"a00191.html#a147114735037c2260d4810a8820e72f6\": [4, 0, 0, 2, 28, 2],\n- \"a00191.html#a2b6707b04064df79d26d1016dfa2a013\": [4, 0, 0, 2, 28, 3],\n- \"a00191.html#a55a86a4657d82f6ff048a10d058c529f\": [4, 0, 0, 2, 28, 1],\n- \"a00191_source.html\": [4, 0, 0, 2, 28],\n- \"a00194.html\": [4, 0, 0, 2, 0],\n- \"a00197.html\": [4, 0, 0, 2, 8],\n- \"a00197_source.html\": [4, 0, 0, 2, 8],\n- \"a00200.html\": [4, 0, 0, 2, 9],\n- \"a00203.html\": [4, 0, 0, 2, 15],\n- \"a00206.html\": [4, 0, 0, 2, 26],\n- \"a00206_source.html\": [4, 0, 0, 2, 26],\n- \"a00209.html\": [4, 0, 0, 2, 24],\n- \"a00212.html\": [4, 0, 0, 2, 11],\n+ \"a00176.html\": [4, 0, 0, 1, 0],\n+ \"a00176_source.html\": [4, 0, 0, 1, 0],\n+ \"a00179.html\": [4, 0, 0, 2, 4],\n+ \"a00179.html#a1744c5e018220146e8df7a68a05d5c43\": [4, 0, 0, 2, 4, 5],\n+ \"a00179.html#aaf5f5013828ac5e4750377dcad969276\": [4, 0, 0, 2, 4, 4],\n+ \"a00179.html#ad19a5c8f7d997b0b16cf646659834b0f\": [4, 0, 0, 2, 4, 3],\n+ \"a00179.html#ae890a8919b441443ffdc0d8ab047838d\": [4, 0, 0, 2, 4, 2],\n+ \"a00179_source.html\": [4, 0, 0, 2, 4],\n+ \"a00182.html\": [4, 0, 0, 2, 5],\n+ \"a00185_source.html\": [4, 0, 0, 2, 3],\n+ \"a00188.html\": [4, 0, 0, 2, 6],\n+ \"a00188_source.html\": [4, 0, 0, 2, 6],\n+ \"a00191.html\": [4, 0, 0, 2, 30],\n+ \"a00191.html#aa6c58dfb2fc9398a026e3268ba2edfad\": [4, 0, 0, 2, 30, 2],\n+ \"a00191.html#ab98cf2a4777006c28d6983db5d8ec574\": [4, 0, 0, 2, 30, 1],\n+ \"a00191.html#ae4856250df52ce4b9b4b16c7a833408c\": [4, 0, 0, 2, 30, 0],\n+ \"a00191_source.html\": [4, 0, 0, 2, 30],\n+ \"a00194.html\": [4, 0, 0, 2, 25],\n+ \"a00194_source.html\": [4, 0, 0, 2, 25],\n+ \"a00197.html\": [4, 0, 0, 2, 20],\n+ \"a00197_source.html\": [4, 0, 0, 2, 20],\n+ \"a00200.html\": [4, 0, 0, 2, 8],\n+ \"a00200_source.html\": [4, 0, 0, 2, 8],\n+ \"a00203.html\": [4, 0, 0, 2, 24],\n+ \"a00206.html\": [4, 0, 0, 2, 22],\n+ \"a00206.html#aa8c26fa5afbbfd23795d7d421e543a81\": [4, 0, 0, 2, 22, 0],\n+ \"a00206_source.html\": [4, 0, 0, 2, 22],\n+ \"a00209.html\": [4, 0, 0, 2, 29],\n+ \"a00209.html#aa6c58dfb2fc9398a026e3268ba2edfad\": [4, 0, 0, 2, 29, 2],\n+ \"a00209.html#ab98cf2a4777006c28d6983db5d8ec574\": [4, 0, 0, 2, 29, 1],\n+ \"a00209.html#ae4856250df52ce4b9b4b16c7a833408c\": [4, 0, 0, 2, 29, 0],\n+ \"a00212.html\": [4, 0, 0, 2, 13],\n \"a00215.html\": [4, 0, 0, 2, 21],\n- \"a00218.html\": [4, 0, 0, 2, 2],\n- \"a00218_source.html\": [4, 0, 0, 2, 2],\n- \"a00221.html\": [4, 0, 0, 2, 23],\n- \"a00221.html#a0be4f243161c2fd937df60aee511eb16\": [4, 0, 0, 2, 23, 3],\n- \"a00221_source.html\": [4, 0, 0, 2, 23],\n- \"a00224.html\": [4, 0, 0, 2, 1],\n- \"a00224_source.html\": [4, 0, 0, 2, 1],\n- \"a00227.html\": [4, 0, 0, 2, 6],\n- \"a00227_source.html\": [4, 0, 0, 2, 6],\n- \"a00230.html\": [4, 0, 0, 2, 20],\n- \"a00230_source.html\": [4, 0, 0, 2, 20],\n- \"a00233_source.html\": [4, 0, 0, 2, 3],\n- \"a00236.html\": [4, 0, 0, 2, 13],\n- \"a00239.html\": [4, 0, 0, 2, 4],\n- \"a00239.html#a1744c5e018220146e8df7a68a05d5c43\": [4, 0, 0, 2, 4, 5],\n- \"a00239.html#aaf5f5013828ac5e4750377dcad969276\": [4, 0, 0, 2, 4, 4],\n- \"a00239.html#ad19a5c8f7d997b0b16cf646659834b0f\": [4, 0, 0, 2, 4, 3],\n- \"a00239.html#ae890a8919b441443ffdc0d8ab047838d\": [4, 0, 0, 2, 4, 2],\n- \"a00239_source.html\": [4, 0, 0, 2, 4],\n- \"a00242.html\": [4, 0, 0, 2, 14],\n- \"a00242_source.html\": [4, 0, 0, 2, 14],\n- \"a00245.html\": [4, 0, 0, 2, 25],\n- \"a00245_source.html\": [4, 0, 0, 2, 25],\n- \"a00248.html\": [4, 0, 0, 2, 30],\n- \"a00248.html#aa6c58dfb2fc9398a026e3268ba2edfad\": [4, 0, 0, 2, 30, 2],\n- \"a00248.html#ab98cf2a4777006c28d6983db5d8ec574\": [4, 0, 0, 2, 30, 1],\n- \"a00248.html#ae4856250df52ce4b9b4b16c7a833408c\": [4, 0, 0, 2, 30, 0],\n- \"a00248_source.html\": [4, 0, 0, 2, 30],\n- \"a00251.html\": [4, 0, 0, 2, 16],\n- \"a00251_source.html\": [4, 0, 0, 2, 16],\n- \"a00254.html\": [4, 0, 0, 2, 19],\n- \"a00257.html\": [4, 0, 0, 2, 17],\n- \"a00257.html#ae1c1177c8725296b34601409322400ea\": [4, 0, 0, 2, 17, 0],\n- \"a00260.html\": [4, 0, 0, 2, 12],\n- \"a00260_source.html\": [4, 0, 0, 2, 12],\n- \"a00266.html\": [4, 0, 0, 2, 10],\n- \"a00266_source.html\": [4, 0, 0, 2, 10],\n- \"a00269.html\": [4, 0, 0, 2, 7],\n- \"a00272.html\": [4, 0, 0, 2, 5],\n- \"a00275_source.html\": [4, 0, 0, 3, 12],\n- \"a00278.html\": [4, 0, 0, 3, 34],\n- \"a00278.html#a4b78f4db0e05f3ca838ee4da6187710e\": [4, 0, 0, 3, 34, 5],\n- \"a00278_source.html\": [4, 0, 0, 3, 34],\n- \"a00281.html\": [4, 0, 0, 3, 0],\n- \"a00281_source.html\": [4, 0, 0, 3, 0],\n- \"a00284_source.html\": [4, 0, 0, 3, 25],\n- \"a00287.html\": [4, 0, 0, 3, 15],\n- \"a00290.html\": [4, 0, 0, 3, 54],\n- \"a00290_source.html\": [4, 0, 0, 3, 54],\n- \"a00293.html\": [4, 0, 0, 3, 2],\n- \"a00293.html#a9ac814fcc4484bce32e4616d69afb225\": [4, 0, 0, 3, 2, 0],\n- \"a00293_source.html\": [4, 0, 0, 3, 2],\n- \"a00296.html\": [4, 0, 0, 3, 11],\n- \"a00302.html\": [4, 0, 0, 3, 43],\n+ \"a00218.html\": [4, 0, 0, 2, 7],\n+ \"a00221.html\": [4, 0, 0, 2, 26],\n+ \"a00221_source.html\": [4, 0, 0, 2, 26],\n+ \"a00224.html\": [4, 0, 0, 2, 15],\n+ \"a00227.html\": [4, 0, 0, 2, 10],\n+ \"a00227_source.html\": [4, 0, 0, 2, 10],\n+ \"a00230.html\": [4, 0, 0, 2, 11],\n+ \"a00233.html\": [4, 0, 0, 2, 1],\n+ \"a00233_source.html\": [4, 0, 0, 2, 1],\n+ \"a00236.html\": [4, 0, 0, 2, 19],\n+ \"a00242.html\": [4, 0, 0, 2, 18],\n+ \"a00242.html#ae1c1177c8725296b34601409322400ea\": [4, 0, 0, 2, 18, 1],\n+ \"a00242_source.html\": [4, 0, 0, 2, 18],\n+ \"a00245.html\": [4, 0, 0, 2, 9],\n+ \"a00248.html\": [4, 0, 0, 2, 2],\n+ \"a00248_source.html\": [4, 0, 0, 2, 2],\n+ \"a00251.html\": [4, 0, 0, 2, 14],\n+ \"a00251_source.html\": [4, 0, 0, 2, 14],\n+ \"a00254.html\": [4, 0, 0, 2, 28],\n+ \"a00254.html#a147114735037c2260d4810a8820e72f6\": [4, 0, 0, 2, 28, 2],\n+ \"a00254.html#a2b6707b04064df79d26d1016dfa2a013\": [4, 0, 0, 2, 28, 3],\n+ \"a00254.html#a55a86a4657d82f6ff048a10d058c529f\": [4, 0, 0, 2, 28, 1],\n+ \"a00254_source.html\": [4, 0, 0, 2, 28],\n+ \"a00257.html\": [4, 0, 0, 2, 12],\n+ \"a00257_source.html\": [4, 0, 0, 2, 12],\n+ \"a00260.html\": [4, 0, 0, 2, 27],\n+ \"a00260.html#a147114735037c2260d4810a8820e72f6\": [4, 0, 0, 2, 27, 0],\n+ \"a00260.html#a2b6707b04064df79d26d1016dfa2a013\": [4, 0, 0, 2, 27, 1],\n+ \"a00263.html\": [4, 0, 0, 2, 0],\n+ \"a00266.html\": [4, 0, 0, 2, 17],\n+ \"a00266.html#ae1c1177c8725296b34601409322400ea\": [4, 0, 0, 2, 17, 0],\n+ \"a00269.html\": [4, 0, 0, 2, 16],\n+ \"a00269_source.html\": [4, 0, 0, 2, 16],\n+ \"a00272.html\": [4, 0, 0, 2, 23],\n+ \"a00272.html#a0be4f243161c2fd937df60aee511eb16\": [4, 0, 0, 2, 23, 3],\n+ \"a00272_source.html\": [4, 0, 0, 2, 23],\n+ \"a00275.html\": [4, 0, 0, 3, 3],\n+ \"a00278.html\": [4, 0, 0, 3, 36],\n+ \"a00278.html#aefb606eb24889c0f418acf1515a2c723\": [4, 0, 0, 3, 36, 6],\n+ \"a00278_source.html\": [4, 0, 0, 3, 36],\n+ \"a00284.html\": [4, 0, 0, 3, 34],\n+ \"a00284.html#a4b78f4db0e05f3ca838ee4da6187710e\": [4, 0, 0, 3, 34, 5],\n+ \"a00284_source.html\": [4, 0, 0, 3, 34],\n+ \"a00287.html\": [4, 0, 0, 3, 41],\n+ \"a00287.html#a5172b5b6d51bd5348c7e551e1376f60a\": [4, 0, 0, 3, 41, 5],\n+ \"a00287.html#a52e26554234edf7de94a5e43dd0bcbf9\": [4, 0, 0, 3, 41, 4],\n+ \"a00287_source.html\": [4, 0, 0, 3, 41],\n+ \"a00290.html\": [4, 0, 0, 3, 9],\n+ \"a00293.html\": [4, 0, 0, 3, 49],\n+ \"a00293.html#a3a2e8c622e65623a6853c84073bdb4f2\": [4, 0, 0, 3, 49, 0],\n+ \"a00293_source.html\": [4, 0, 0, 3, 49],\n+ \"a00296.html\": [4, 0, 0, 3, 10],\n+ \"a00296_source.html\": [4, 0, 0, 3, 10],\n+ \"a00299.html\": [4, 0, 0, 3, 42],\n+ \"a00302_source.html\": [4, 0, 0, 3, 12],\n \"a00305.html\": [4, 0, 0, 3, 52],\n \"a00305.html#a3e57e4771f13855a495ec2c6454c9121\": [4, 0, 0, 3, 52, 0],\n \"a00305.html#a8d21728e3da4cf1a96e1b6f87a97da47\": [4, 0, 0, 3, 52, 1],\n- \"a00308.html\": [4, 0, 0, 3, 58],\n- \"a00308_source.html\": [4, 0, 0, 3, 58],\n- \"a00311.html\": [4, 0, 0, 3, 46],\n- \"a00314.html\": [4, 0, 0, 3, 3],\n- \"a00320.html\": [4, 0, 0, 3, 29],\n- \"a00320.html#a93d4e38a582b6f32fc4f301df10721d5\": [4, 0, 0, 3, 29, 0],\n- \"a00320.html#a9e357cda5287fae1438f86bc4df27a80\": [4, 0, 0, 3, 29, 2],\n- \"a00320.html#afd1282dfb080cb393ae60188b4582cb2\": [4, 0, 0, 3, 29, 1],\n- \"a00320.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\": [4, 0, 0, 3, 29, 3],\n- \"a00323.html\": [4, 0, 0, 3, 28],\n- \"a00323_source.html\": [4, 0, 0, 3, 28],\n- \"a00326_source.html\": [4, 0, 0, 3, 62],\n- \"a00329.html\": [4, 0, 0, 3, 47],\n- \"a00329_source.html\": [4, 0, 0, 3, 47],\n- \"a00332.html\": [4, 0, 0, 3, 41],\n- \"a00332.html#a5172b5b6d51bd5348c7e551e1376f60a\": [4, 0, 0, 3, 41, 5],\n- \"a00332.html#a52e26554234edf7de94a5e43dd0bcbf9\": [4, 0, 0, 3, 41, 4],\n- \"a00332_source.html\": [4, 0, 0, 3, 41],\n- \"a00335.html\": [4, 0, 0, 3, 9],\n- \"a00341.html\": [4, 0, 0, 3, 42],\n- \"a00344.html\": [4, 0, 0, 3, 56],\n- \"a00344.html#ac1829b506847127f406c0d6182fc0cdd\": [4, 0, 0, 3, 56, 5],\n- \"a00344.html#afdaebcf25a03a9a9986d35d2831605dd\": [4, 0, 0, 3, 56, 4],\n- \"a00344_source.html\": [4, 0, 0, 3, 56],\n- \"a00347.html\": [4, 0, 0, 3, 13],\n- \"a00350.html\": [4, 0, 0, 3, 22],\n- \"a00350_source.html\": [4, 0, 0, 3, 22],\n- \"a00353.html\": [4, 0, 0, 3, 55],\n- \"a00356.html\": [4, 0, 0, 3, 14],\n- \"a00356_source.html\": [4, 0, 0, 3, 14],\n- \"a00359.html\": [4, 0, 0, 3, 4],\n- \"a00359_source.html\": [4, 0, 0, 3, 4],\n- \"a00362.html\": [4, 0, 0, 3, 31],\n- \"a00362.html#a57f778b84bc6106471006421d289b832\": [4, 0, 0, 3, 31, 3],\n- \"a00362.html#a7dc820e4e47218768f104b43a184a1bd\": [4, 0, 0, 3, 31, 2],\n- \"a00362.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\": [4, 0, 0, 3, 31, 0],\n- \"a00362.html#aa42f7ec660b7353de39f9c86a26711cc\": [4, 0, 0, 3, 31, 1],\n- \"a00362.html#abb52bb00c68909fc1147e5d112e8c2ae\": [4, 0, 0, 3, 31, 5],\n- \"a00362.html#ac37b6f807985ffd25217e33f6136fe58\": [4, 0, 0, 3, 31, 4],\n- \"a00365.html\": [4, 0, 0, 3, 48],\n- \"a00368.html\": [4, 0, 0, 3, 18],\n- \"a00368_source.html\": [4, 0, 0, 3, 18],\n- \"a00371.html\": [4, 0, 0, 3, 10],\n- \"a00371_source.html\": [4, 0, 0, 3, 10],\n- \"a00374.html\": [4, 0, 0, 3, 33],\n- \"a00377.html\": [4, 0, 0, 3, 27],\n- \"a00377_source.html\": [4, 0, 0, 3, 27],\n- \"a00380.html\": [4, 0, 0, 3, 16],\n- \"a00380_source.html\": [4, 0, 0, 3, 16],\n- \"a00383.html\": [4, 0, 0, 3, 19],\n- \"a00383_source.html\": [4, 0, 0, 3, 19],\n- \"a00386.html\": [4, 0, 0, 3, 44],\n- \"a00392.html\": [4, 0, 0, 3, 57],\n- \"a00392_source.html\": [4, 0, 0, 3, 57],\n- \"a00395.html\": [4, 0, 0, 3, 39],\n- \"a00395_source.html\": [4, 0, 0, 3, 39],\n- \"a00398_source.html\": [4, 0, 0, 3, 23],\n- \"a00401.html\": [4, 0, 0, 3, 37],\n- \"a00401_source.html\": [4, 0, 0, 3, 37],\n- \"a00404.html\": [4, 0, 0, 3, 7],\n- \"a00407.html\": [4, 0, 0, 3, 32],\n- \"a00407.html#a300205092710091b8745c0a145da20a1\": [4, 0, 0, 3, 32, 5],\n- \"a00407.html#a57f778b84bc6106471006421d289b832\": [4, 0, 0, 3, 32, 6],\n- \"a00407.html#a7dc820e4e47218768f104b43a184a1bd\": [4, 0, 0, 3, 32, 4],\n- \"a00407.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\": [4, 0, 0, 3, 32, 2],\n- \"a00407.html#aa42f7ec660b7353de39f9c86a26711cc\": [4, 0, 0, 3, 32, 3],\n- \"a00407.html#aaa8ed89fd60ea4601d9de63c4811525b\": [4, 0, 0, 3, 32, 1],\n- \"a00407.html#abb52bb00c68909fc1147e5d112e8c2ae\": [4, 0, 0, 3, 32, 8],\n- \"a00407.html#ac37b6f807985ffd25217e33f6136fe58\": [4, 0, 0, 3, 32, 7],\n- \"a00407_source.html\": [4, 0, 0, 3, 32],\n- \"a00410.html\": [4, 0, 0, 3, 36],\n- \"a00410.html#aefb606eb24889c0f418acf1515a2c723\": [4, 0, 0, 3, 36, 6],\n- \"a00410_source.html\": [4, 0, 0, 3, 36],\n- \"a00413.html\": [4, 0, 0, 3, 5],\n+ \"a00308.html\": [4, 0, 0, 3, 27],\n+ \"a00308_source.html\": [4, 0, 0, 3, 27],\n+ \"a00311.html\": [4, 0, 0, 3, 28],\n+ \"a00311_source.html\": [4, 0, 0, 3, 28],\n+ \"a00314.html\": [4, 0, 0, 3, 47],\n+ \"a00314_source.html\": [4, 0, 0, 3, 47],\n+ \"a00317.html\": [4, 0, 0, 3, 19],\n+ \"a00317_source.html\": [4, 0, 0, 3, 19],\n+ \"a00320.html\": [4, 0, 0, 3, 8],\n+ \"a00320_source.html\": [4, 0, 0, 3, 8],\n+ \"a00323.html\": [4, 0, 0, 3, 33],\n+ \"a00326.html\": [4, 0, 0, 3, 13],\n+ \"a00329.html\": [4, 0, 0, 3, 1],\n+ \"a00332.html\": [4, 0, 0, 3, 22],\n+ \"a00332_source.html\": [4, 0, 0, 3, 22],\n+ \"a00335_source.html\": [4, 0, 0, 3, 62],\n+ \"a00338.html\": [4, 0, 0, 3, 46],\n+ \"a00341.html\": [4, 0, 0, 3, 58],\n+ \"a00341_source.html\": [4, 0, 0, 3, 58],\n+ \"a00344.html\": [4, 0, 0, 3, 38],\n+ \"a00347.html\": [4, 0, 0, 3, 40],\n+ \"a00347.html#a5172b5b6d51bd5348c7e551e1376f60a\": [4, 0, 0, 3, 40, 0],\n+ \"a00350.html\": [4, 0, 0, 3, 0],\n+ \"a00350_source.html\": [4, 0, 0, 3, 0],\n+ \"a00353_source.html\": [4, 0, 0, 3, 25],\n+ \"a00356.html\": [4, 0, 0, 3, 29],\n+ \"a00356.html#a93d4e38a582b6f32fc4f301df10721d5\": [4, 0, 0, 3, 29, 0],\n+ \"a00356.html#a9e357cda5287fae1438f86bc4df27a80\": [4, 0, 0, 3, 29, 2],\n+ \"a00356.html#afd1282dfb080cb393ae60188b4582cb2\": [4, 0, 0, 3, 29, 1],\n+ \"a00356.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\": [4, 0, 0, 3, 29, 3],\n+ \"a00359.html\": [4, 0, 0, 3, 18],\n+ \"a00359_source.html\": [4, 0, 0, 3, 18],\n+ \"a00365.html\": [4, 0, 0, 3, 2],\n+ \"a00365.html#a9ac814fcc4484bce32e4616d69afb225\": [4, 0, 0, 3, 2, 0],\n+ \"a00365_source.html\": [4, 0, 0, 3, 2],\n+ \"a00371.html\": [4, 0, 0, 3, 26],\n+ \"a00371_source.html\": [4, 0, 0, 3, 26],\n+ \"a00374.html\": [4, 0, 0, 3, 53],\n+ \"a00374.html#a3e57e4771f13855a495ec2c6454c9121\": [4, 0, 0, 3, 53, 3],\n+ \"a00374.html#a76855a1214bf05a8704ee3deaece6339\": [4, 0, 0, 3, 53, 2],\n+ \"a00374.html#a8d21728e3da4cf1a96e1b6f87a97da47\": [4, 0, 0, 3, 53, 4],\n+ \"a00374_source.html\": [4, 0, 0, 3, 53],\n+ \"a00380.html\": [4, 0, 0, 3, 43],\n+ \"a00383.html\": [4, 0, 0, 3, 32],\n+ \"a00383.html#a300205092710091b8745c0a145da20a1\": [4, 0, 0, 3, 32, 5],\n+ \"a00383.html#a57f778b84bc6106471006421d289b832\": [4, 0, 0, 3, 32, 6],\n+ \"a00383.html#a7dc820e4e47218768f104b43a184a1bd\": [4, 0, 0, 3, 32, 4],\n+ \"a00383.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\": [4, 0, 0, 3, 32, 2],\n+ \"a00383.html#aa42f7ec660b7353de39f9c86a26711cc\": [4, 0, 0, 3, 32, 3],\n+ \"a00383.html#aaa8ed89fd60ea4601d9de63c4811525b\": [4, 0, 0, 3, 32, 1],\n+ \"a00383.html#abb52bb00c68909fc1147e5d112e8c2ae\": [4, 0, 0, 3, 32, 8],\n+ \"a00383.html#ac37b6f807985ffd25217e33f6136fe58\": [4, 0, 0, 3, 32, 7],\n+ \"a00383_source.html\": [4, 0, 0, 3, 32],\n+ \"a00386.html\": [4, 0, 0, 3, 4],\n+ \"a00386_source.html\": [4, 0, 0, 3, 4],\n+ \"a00389.html\": [4, 0, 0, 3, 56],\n+ \"a00389.html#ac1829b506847127f406c0d6182fc0cdd\": [4, 0, 0, 3, 56, 5],\n+ \"a00389.html#afdaebcf25a03a9a9986d35d2831605dd\": [4, 0, 0, 3, 56, 4],\n+ \"a00389_source.html\": [4, 0, 0, 3, 56],\n+ \"a00392.html\": [4, 0, 0, 3, 59],\n+ \"a00395.html\": [4, 0, 0, 3, 15],\n+ \"a00398.html\": [4, 0, 0, 3, 7],\n+ \"a00401.html\": [4, 0, 0, 3, 31],\n+ \"a00401.html#a57f778b84bc6106471006421d289b832\": [4, 0, 0, 3, 31, 3],\n+ \"a00401.html#a7dc820e4e47218768f104b43a184a1bd\": [4, 0, 0, 3, 31, 2],\n+ \"a00401.html#a86bf6ed2ffb0ecc42a7deb8922f4ca4f\": [4, 0, 0, 3, 31, 0],\n+ \"a00401.html#aa42f7ec660b7353de39f9c86a26711cc\": [4, 0, 0, 3, 31, 1],\n+ \"a00401.html#abb52bb00c68909fc1147e5d112e8c2ae\": [4, 0, 0, 3, 31, 5],\n+ \"a00401.html#ac37b6f807985ffd25217e33f6136fe58\": [4, 0, 0, 3, 31, 4],\n+ \"a00404_source.html\": [4, 0, 0, 3, 23],\n+ \"a00407.html\": [4, 0, 0, 3, 17],\n+ \"a00410.html\": [4, 0, 0, 3, 48],\n+ \"a00413.html\": [4, 0, 0, 3, 39],\n+ \"a00413_source.html\": [4, 0, 0, 3, 39],\n+ \"a00416.html\": [4, 0, 0, 3, 57],\n+ \"a00416_source.html\": [4, 0, 0, 3, 57],\n \"a00419.html\": [4, 0, 0, 3, 6],\n \"a00419_source.html\": [4, 0, 0, 3, 6],\n- \"a00422.html\": [4, 0, 0, 3, 38],\n- \"a00425.html\": [4, 0, 0, 3, 49],\n- \"a00425.html#a3a2e8c622e65623a6853c84073bdb4f2\": [4, 0, 0, 3, 49, 0],\n- \"a00425_source.html\": [4, 0, 0, 3, 49],\n- \"a00428.html\": [4, 0, 0, 3, 35],\n- \"a00431.html\": [4, 0, 0, 3, 17],\n- \"a00434.html\": [4, 0, 0, 3, 50],\n- \"a00434.html#a72fc8b10f24d82aa8a4c99f99403fe5e\": [4, 0, 0, 3, 50, 0],\n- \"a00434.html#a7c7e26b6d07ec0f16363c196247b294d\": [4, 0, 0, 3, 50, 1],\n- \"a00437.html\": [4, 0, 0, 3, 21],\n- \"a00440.html\": [4, 0, 0, 3, 59],\n- \"a00446.html\": [4, 0, 0, 3, 1],\n- \"a00449.html\": [4, 0, 0, 3, 40],\n- \"a00449.html#a5172b5b6d51bd5348c7e551e1376f60a\": [4, 0, 0, 3, 40, 0],\n+ \"a00422.html\": [4, 0, 0, 3, 60],\n+ \"a00422_source.html\": [4, 0, 0, 3, 60],\n+ \"a00425.html\": [4, 0, 0, 3, 50],\n+ \"a00425.html#a72fc8b10f24d82aa8a4c99f99403fe5e\": [4, 0, 0, 3, 50, 0],\n+ \"a00425.html#a7c7e26b6d07ec0f16363c196247b294d\": [4, 0, 0, 3, 50, 1],\n+ \"a00428.html\": [4, 0, 0, 3, 21],\n+ \"a00431.html\": [4, 0, 0, 3, 30],\n+ \"a00431.html#a63d86e99c211c6daeac2b7b4dd9d928e\": [4, 0, 0, 3, 30, 6],\n+ \"a00431.html#a6ede8384dee0353a0ce5fb54ea50c21d\": [4, 0, 0, 3, 30, 1],\n+ \"a00431.html#a93d4e38a582b6f32fc4f301df10721d5\": [4, 0, 0, 3, 30, 2],\n+ \"a00431.html#a9e357cda5287fae1438f86bc4df27a80\": [4, 0, 0, 3, 30, 4],\n+ \"a00431.html#afd1282dfb080cb393ae60188b4582cb2\": [4, 0, 0, 3, 30, 3],\n+ \"a00431.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\": [4, 0, 0, 3, 30, 5],\n+ \"a00431_source.html\": [4, 0, 0, 3, 30],\n+ \"a00434.html\": [4, 0, 0, 3, 16],\n+ \"a00434_source.html\": [4, 0, 0, 3, 16],\n+ \"a00437.html\": [4, 0, 0, 3, 24],\n+ \"a00437.html#aae9294b064e306ac7993dea546c0d8fb\": [4, 0, 0, 3, 24, 2],\n+ \"a00437_source.html\": [4, 0, 0, 3, 24],\n+ \"a00440.html\": [4, 0, 0, 3, 55],\n+ \"a00449.html\": [4, 0, 0, 3, 54],\n+ \"a00449_source.html\": [4, 0, 0, 3, 54],\n \"a00452.html\": [4, 0, 0, 3, 61],\n \"a00452.html#a0a386184e9ed9cc4ec844d48d91ba759\": [4, 0, 0, 3, 61, 6],\n \"a00452.html#a0f9e5111ffc481b34f0123418b0ecd13\": [4, 0, 0, 3, 61, 13],\n \"a00452.html#a13ac0858b6f6600f5a4242aeb797692f\": [4, 0, 0, 3, 61, 14],\n \"a00452.html#a1a0e4ac1b773cc295daae7849c833876\": [4, 0, 0, 3, 61, 25],\n \"a00452.html#a2b96bc32f3c5c436db3fe60e5139319e\": [4, 0, 0, 3, 61, 20],\n \"a00452.html#a31e52d463db397f0dda1a13352ab217c\": [4, 0, 0, 3, 61, 24],\n@@ -230,23 +244,9 @@\n \"a00452.html#a58f4009e3a8872d0ac6780d654cccc2e\": [4, 0, 0, 3, 61, 16],\n \"a00452.html#a6a1849035b3acd163d6de715e7683ebf\": [4, 0, 0, 3, 61, 27],\n \"a00452.html#a7f3d15de99fffcc537089fa1440d8ca2\": [4, 0, 0, 3, 61, 26],\n \"a00452.html#a8d16887f8890aaf7ceb5e3cbb181a191\": [4, 0, 0, 3, 61, 12],\n \"a00452.html#a8d52d7d8a5e5c8d7318ce95ee57e9cfa\": [4, 0, 0, 3, 61, 19],\n \"a00452.html#a9dab6b5829b51511735b6b841bb36a36\": [4, 0, 0, 3, 61, 15],\n \"a00452.html#aac6df5bbfb7131cbb05e2a9691e59ba3\": [4, 0, 0, 3, 61, 17],\n- \"a00452.html#ab79854d3cb3bcc4f562fc88a0731a447\": [4, 0, 0, 3, 61, 18],\n- \"a00452.html#ad167fac94fa72c0d3b8db36e5fa2becb\": [4, 0, 0, 3, 61, 21],\n- \"a00452.html#aebe53b43e5151ce9c355b4aa4ba57c13\": [4, 0, 0, 3, 61, 4],\n- \"a00452.html#aed2918ac0049316bf09f96879efca3b6\": [4, 0, 0, 3, 61, 9],\n- \"a00452.html#af01b2988c1bb89268ad572ea7d7ba293\": [4, 0, 0, 3, 61, 23],\n- \"a00452.html#af378e231b519e8bb1f09f4aa13a38dca\": [4, 0, 0, 3, 61, 11],\n- \"a00452_source.html\": [4, 0, 0, 3, 61],\n- \"a00455.html\": [4, 0, 0, 3, 53],\n- \"a00455.html#a3e57e4771f13855a495ec2c6454c9121\": [4, 0, 0, 3, 53, 3],\n- \"a00455.html#a76855a1214bf05a8704ee3deaece6339\": [4, 0, 0, 3, 53, 2],\n- \"a00455.html#a8d21728e3da4cf1a96e1b6f87a97da47\": [4, 0, 0, 3, 53, 4],\n- \"a00455_source.html\": [4, 0, 0, 3, 53],\n- \"a00458.html\": [4, 0, 0, 3, 26],\n- \"a00458_source.html\": [4, 0, 0, 3, 26],\n- \"a00461.html\": [4, 0, 0, 3, 45]\n+ \"a00452.html#ab79854d3cb3bcc4f562fc88a0731a447\": [4, 0, 0, 3, 61, 18]\n };\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/navtreeindex2.js", "source2": "./usr/share/doc/libgtsam-dev/html/navtreeindex2.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,252 +1,252 @@\n var NAVTREEINDEX2 = {\n- \"a00461_source.html\": [4, 0, 0, 3, 45],\n- \"a00464.html\": [4, 0, 0, 3, 24],\n- \"a00464.html#aae9294b064e306ac7993dea546c0d8fb\": [4, 0, 0, 3, 24, 2],\n- \"a00464_source.html\": [4, 0, 0, 3, 24],\n- \"a00467.html\": [4, 0, 0, 3, 8],\n- \"a00467_source.html\": [4, 0, 0, 3, 8],\n- \"a00470.html\": [4, 0, 0, 3, 51],\n- \"a00470.html#a2e0b14126ed42ee95ca5f5f092c5bc84\": [4, 0, 0, 3, 51, 6],\n- \"a00470.html#a72fc8b10f24d82aa8a4c99f99403fe5e\": [4, 0, 0, 3, 51, 4],\n- \"a00470.html#a7c7e26b6d07ec0f16363c196247b294d\": [4, 0, 0, 3, 51, 5],\n- \"a00470_source.html\": [4, 0, 0, 3, 51],\n- \"a00476.html\": [4, 0, 0, 3, 30],\n- \"a00476.html#a63d86e99c211c6daeac2b7b4dd9d928e\": [4, 0, 0, 3, 30, 6],\n- \"a00476.html#a6ede8384dee0353a0ce5fb54ea50c21d\": [4, 0, 0, 3, 30, 1],\n- \"a00476.html#a93d4e38a582b6f32fc4f301df10721d5\": [4, 0, 0, 3, 30, 2],\n- \"a00476.html#a9e357cda5287fae1438f86bc4df27a80\": [4, 0, 0, 3, 30, 4],\n- \"a00476.html#afd1282dfb080cb393ae60188b4582cb2\": [4, 0, 0, 3, 30, 3],\n- \"a00476.html#afee4e6aa4aba9b6a6b421ddd75b52dfc\": [4, 0, 0, 3, 30, 5],\n- \"a00476_source.html\": [4, 0, 0, 3, 30],\n- \"a00479.html\": [4, 0, 0, 3, 60],\n- \"a00479_source.html\": [4, 0, 0, 3, 60],\n- \"a00482.html\": [4, 0, 0, 4, 8],\n- \"a00485.html\": [4, 0, 0, 4, 21],\n- \"a00488.html\": [4, 0, 0, 4, 23],\n- \"a00491.html\": [4, 0, 0, 4, 28],\n- \"a00491_source.html\": [4, 0, 0, 4, 28],\n- \"a00494.html\": [4, 0, 0, 4, 7],\n- \"a00494_source.html\": [4, 0, 0, 4, 7],\n- \"a00497.html\": [4, 0, 0, 4, 25],\n- \"a00500.html\": [4, 0, 0, 4, 22],\n- \"a00500_source.html\": [4, 0, 0, 4, 22],\n- \"a00503.html\": [4, 0, 0, 4, 12],\n- \"a00506.html\": [4, 0, 0, 4, 2],\n- \"a00509.html\": [4, 0, 0, 4, 5],\n- \"a00509_source.html\": [4, 0, 0, 4, 5],\n- \"a00515.html\": [4, 0, 0, 4, 10],\n- \"a00518.html\": [4, 0, 0, 4, 0],\n- \"a00518.html#ad92a1966f54e02a7c2ce061c1228c7b3\": [4, 0, 0, 4, 0, 0],\n- \"a00521.html\": [4, 0, 0, 4, 6],\n- \"a00524.html\": [4, 0, 0, 4, 20],\n- \"a00524_source.html\": [4, 0, 0, 4, 20],\n- \"a00527.html\": [4, 0, 0, 4, 14],\n- \"a00530.html\": [4, 0, 0, 4, 17],\n- \"a00530.html#a584e4e05d52a617c1d313e1f53c8ce58\": [4, 0, 0, 4, 17, 2],\n- \"a00530_source.html\": [4, 0, 0, 4, 17],\n- \"a00533.html\": [4, 0, 0, 4, 9],\n- \"a00533_source.html\": [4, 0, 0, 4, 9],\n- \"a00536.html\": [4, 0, 0, 4, 15],\n- \"a00536_source.html\": [4, 0, 0, 4, 15],\n- \"a00539.html\": [4, 0, 0, 4, 13],\n- \"a00539.html#a8b4a8e0d32b81b0fa2fa15c437b89e7c\": [4, 0, 0, 4, 13, 1],\n- \"a00539_source.html\": [4, 0, 0, 4, 13],\n- \"a00542.html\": [4, 0, 0, 4, 3],\n- \"a00542_source.html\": [4, 0, 0, 4, 3],\n- \"a00545.html\": [4, 0, 0, 4, 4],\n- \"a00545.html#ae6415c63d70d1b582a0162652b16b868\": [4, 0, 0, 4, 4, 0],\n- \"a00548.html\": [4, 0, 0, 4, 19],\n- \"a00551.html\": [4, 0, 0, 4, 11],\n- \"a00551_source.html\": [4, 0, 0, 4, 11],\n- \"a00554.html\": [4, 0, 0, 4, 18],\n- \"a00554_source.html\": [4, 0, 0, 4, 18],\n- \"a00557.html\": [4, 0, 0, 4, 26],\n- \"a00557_source.html\": [4, 0, 0, 4, 26],\n- \"a00560.html\": [4, 0, 0, 4, 27],\n- \"a00560_source.html\": [4, 0, 0, 4, 27],\n- \"a00563.html\": [4, 0, 0, 4, 24],\n- \"a00563_source.html\": [4, 0, 0, 4, 24],\n- \"a00566.html\": [4, 0, 0, 4, 1],\n- \"a00566.html#ad92a1966f54e02a7c2ce061c1228c7b3\": [4, 0, 0, 4, 1, 1],\n- \"a00566_source.html\": [4, 0, 0, 4, 1],\n- \"a00569.html\": [4, 0, 0, 4, 16],\n- \"a00569.html#a584e4e05d52a617c1d313e1f53c8ce58\": [4, 0, 0, 4, 16, 1],\n- \"a00572.html\": [4, 0, 0, 5, 11],\n- \"a00575.html\": [4, 0, 0, 5, 20],\n- \"a00575_source.html\": [4, 0, 0, 5, 20],\n+ \"a00452.html#ad167fac94fa72c0d3b8db36e5fa2becb\": [4, 0, 0, 3, 61, 21],\n+ \"a00452.html#aebe53b43e5151ce9c355b4aa4ba57c13\": [4, 0, 0, 3, 61, 4],\n+ \"a00452.html#aed2918ac0049316bf09f96879efca3b6\": [4, 0, 0, 3, 61, 9],\n+ \"a00452.html#af01b2988c1bb89268ad572ea7d7ba293\": [4, 0, 0, 3, 61, 23],\n+ \"a00452.html#af378e231b519e8bb1f09f4aa13a38dca\": [4, 0, 0, 3, 61, 11],\n+ \"a00452_source.html\": [4, 0, 0, 3, 61],\n+ \"a00455.html\": [4, 0, 0, 3, 45],\n+ \"a00455_source.html\": [4, 0, 0, 3, 45],\n+ \"a00458.html\": [4, 0, 0, 3, 37],\n+ \"a00458_source.html\": [4, 0, 0, 3, 37],\n+ \"a00461.html\": [4, 0, 0, 3, 51],\n+ \"a00461.html#a2e0b14126ed42ee95ca5f5f092c5bc84\": [4, 0, 0, 3, 51, 6],\n+ \"a00461.html#a72fc8b10f24d82aa8a4c99f99403fe5e\": [4, 0, 0, 3, 51, 4],\n+ \"a00461.html#a7c7e26b6d07ec0f16363c196247b294d\": [4, 0, 0, 3, 51, 5],\n+ \"a00461_source.html\": [4, 0, 0, 3, 51],\n+ \"a00464.html\": [4, 0, 0, 3, 5],\n+ \"a00470.html\": [4, 0, 0, 3, 11],\n+ \"a00473.html\": [4, 0, 0, 3, 44],\n+ \"a00476.html\": [4, 0, 0, 3, 14],\n+ \"a00476_source.html\": [4, 0, 0, 3, 14],\n+ \"a00479.html\": [4, 0, 0, 3, 35],\n+ \"a00482.html\": [4, 0, 0, 4, 27],\n+ \"a00482_source.html\": [4, 0, 0, 4, 27],\n+ \"a00485.html\": [4, 0, 0, 4, 10],\n+ \"a00488.html\": [4, 0, 0, 4, 7],\n+ \"a00488_source.html\": [4, 0, 0, 4, 7],\n+ \"a00491.html\": [4, 0, 0, 4, 16],\n+ \"a00491.html#a584e4e05d52a617c1d313e1f53c8ce58\": [4, 0, 0, 4, 16, 1],\n+ \"a00494.html\": [4, 0, 0, 4, 12],\n+ \"a00497.html\": [4, 0, 0, 4, 0],\n+ \"a00497.html#ad92a1966f54e02a7c2ce061c1228c7b3\": [4, 0, 0, 4, 0, 0],\n+ \"a00500.html\": [4, 0, 0, 4, 26],\n+ \"a00500_source.html\": [4, 0, 0, 4, 26],\n+ \"a00503.html\": [4, 0, 0, 4, 1],\n+ \"a00503.html#ad92a1966f54e02a7c2ce061c1228c7b3\": [4, 0, 0, 4, 1, 1],\n+ \"a00503_source.html\": [4, 0, 0, 4, 1],\n+ \"a00506.html\": [4, 0, 0, 4, 24],\n+ \"a00506_source.html\": [4, 0, 0, 4, 24],\n+ \"a00509.html\": [4, 0, 0, 4, 6],\n+ \"a00512.html\": [4, 0, 0, 4, 23],\n+ \"a00515.html\": [4, 0, 0, 4, 4],\n+ \"a00515.html#ae6415c63d70d1b582a0162652b16b868\": [4, 0, 0, 4, 4, 0],\n+ \"a00518.html\": [4, 0, 0, 4, 22],\n+ \"a00518_source.html\": [4, 0, 0, 4, 22],\n+ \"a00521.html\": [4, 0, 0, 4, 19],\n+ \"a00524.html\": [4, 0, 0, 4, 25],\n+ \"a00527.html\": [4, 0, 0, 4, 5],\n+ \"a00527_source.html\": [4, 0, 0, 4, 5],\n+ \"a00533.html\": [4, 0, 0, 4, 13],\n+ \"a00533.html#a8b4a8e0d32b81b0fa2fa15c437b89e7c\": [4, 0, 0, 4, 13, 1],\n+ \"a00533_source.html\": [4, 0, 0, 4, 13],\n+ \"a00536.html\": [4, 0, 0, 4, 3],\n+ \"a00536_source.html\": [4, 0, 0, 4, 3],\n+ \"a00539.html\": [4, 0, 0, 4, 17],\n+ \"a00539.html#a584e4e05d52a617c1d313e1f53c8ce58\": [4, 0, 0, 4, 17, 2],\n+ \"a00539_source.html\": [4, 0, 0, 4, 17],\n+ \"a00542.html\": [4, 0, 0, 4, 11],\n+ \"a00542_source.html\": [4, 0, 0, 4, 11],\n+ \"a00545.html\": [4, 0, 0, 4, 14],\n+ \"a00548.html\": [4, 0, 0, 4, 21],\n+ \"a00551.html\": [4, 0, 0, 4, 20],\n+ \"a00551_source.html\": [4, 0, 0, 4, 20],\n+ \"a00554.html\": [4, 0, 0, 4, 28],\n+ \"a00554_source.html\": [4, 0, 0, 4, 28],\n+ \"a00557.html\": [4, 0, 0, 4, 2],\n+ \"a00560.html\": [4, 0, 0, 4, 9],\n+ \"a00560_source.html\": [4, 0, 0, 4, 9],\n+ \"a00563.html\": [4, 0, 0, 4, 15],\n+ \"a00563_source.html\": [4, 0, 0, 4, 15],\n+ \"a00566.html\": [4, 0, 0, 4, 8],\n+ \"a00569.html\": [4, 0, 0, 4, 18],\n+ \"a00569_source.html\": [4, 0, 0, 4, 18],\n+ \"a00572.html\": [4, 0, 0, 5, 19],\n+ \"a00572_source.html\": [4, 0, 0, 5, 19],\n+ \"a00575.html\": [4, 0, 0, 5, 38],\n \"a00578.html\": [4, 0, 0, 5, 5],\n \"a00578_source.html\": [4, 0, 0, 5, 5],\n- \"a00581.html\": [4, 0, 0, 5, 33],\n- \"a00587.html\": [4, 0, 0, 5, 15],\n- \"a00587_source.html\": [4, 0, 0, 5, 15],\n- \"a00590.html\": [4, 0, 0, 5, 35],\n- \"a00593.html\": [4, 0, 0, 5, 18],\n- \"a00593.html#a99e63c90a8ac740d99716e73fe97e054\": [4, 0, 0, 5, 18, 1],\n- \"a00593_source.html\": [4, 0, 0, 5, 18],\n- \"a00596.html\": [4, 0, 0, 5, 22],\n- \"a00596.html#a18a265afdea057ea54be10262396be12\": [4, 0, 0, 5, 22, 6],\n- \"a00596.html#a3453247aec1d8b4642947ffd4bca426b\": [4, 0, 0, 5, 22, 7],\n- \"a00596.html#a62b34d6038ccdfa84d8a5bb0c15328b1\": [4, 0, 0, 5, 22, 3],\n- \"a00596.html#a6c0319a6ebcc83d4a5cf9ff51729bb80\": [4, 0, 0, 5, 22, 8],\n- \"a00596.html#a7771a103b41708e88763ff67059ff01d\": [4, 0, 0, 5, 22, 4],\n- \"a00596.html#ae67d0d86c4e55b175859967a70b36983\": [4, 0, 0, 5, 22, 5],\n- \"a00596_source.html\": [4, 0, 0, 5, 22],\n- \"a00599.html\": [4, 0, 0, 5, 30],\n- \"a00599.html#a37995b0d0610e5fb29c6bd0715151d67\": [4, 0, 0, 5, 30, 3],\n- \"a00599.html#a4adc1bb606fa4a14d5dbd246f95cecd3\": [4, 0, 0, 5, 30, 4],\n- \"a00599.html#a4e4c133c4fd0d9d73593f601be2248a6\": [4, 0, 0, 5, 30, 5],\n- \"a00599.html#ae9a7dceb0a85c356062b55f6939b1419\": [4, 0, 0, 5, 30, 2],\n- \"a00599_source.html\": [4, 0, 0, 5, 30],\n- \"a00602.html\": [4, 0, 0, 5, 6],\n- \"a00602_source.html\": [4, 0, 0, 5, 6],\n- \"a00608.html\": [4, 0, 0, 5, 8],\n- \"a00608_source.html\": [4, 0, 0, 5, 8],\n- \"a00611.html\": [4, 0, 0, 5, 37],\n- \"a00611_source.html\": [4, 0, 0, 5, 37],\n- \"a00614.html\": [4, 0, 0, 5, 17],\n- \"a00617.html\": [4, 0, 0, 5, 32],\n- \"a00617_source.html\": [4, 0, 0, 5, 32],\n- \"a00620.html\": [4, 0, 0, 5, 23],\n- \"a00620.html#ae955942fde34b4cf32ac3573a1aa1e29\": [4, 0, 0, 5, 23, 0],\n- \"a00620_source.html\": [4, 0, 0, 5, 23],\n- \"a00623.html\": [4, 0, 0, 5, 14],\n- \"a00623_source.html\": [4, 0, 0, 5, 14],\n+ \"a00581.html\": [4, 0, 0, 5, 12],\n+ \"a00581_source.html\": [4, 0, 0, 5, 12],\n+ \"a00587.html\": [4, 0, 0, 5, 34],\n+ \"a00587_source.html\": [4, 0, 0, 5, 34],\n+ \"a00590.html\": [4, 0, 0, 5, 14],\n+ \"a00590_source.html\": [4, 0, 0, 5, 14],\n+ \"a00593.html\": [4, 0, 0, 5, 4],\n+ \"a00593_source.html\": [4, 0, 0, 5, 4],\n+ \"a00596.html\": [4, 0, 0, 5, 41],\n+ \"a00596_source.html\": [4, 0, 0, 5, 41],\n+ \"a00599.html\": [4, 0, 0, 5, 11],\n+ \"a00602.html\": [4, 0, 0, 5, 37],\n+ \"a00602_source.html\": [4, 0, 0, 5, 37],\n+ \"a00608.html\": [4, 0, 0, 5, 40],\n+ \"a00611_source.html\": [4, 0, 0, 5, 0],\n+ \"a00614.html\": [4, 0, 0, 5, 1],\n+ \"a00614_source.html\": [4, 0, 0, 5, 1],\n+ \"a00617.html\": [4, 0, 0, 5, 23],\n+ \"a00617.html#ae955942fde34b4cf32ac3573a1aa1e29\": [4, 0, 0, 5, 23, 0],\n+ \"a00617_source.html\": [4, 0, 0, 5, 23],\n+ \"a00620.html\": [4, 0, 0, 5, 31],\n+ \"a00620_source.html\": [4, 0, 0, 5, 31],\n+ \"a00623.html\": [4, 0, 0, 5, 7],\n+ \"a00623_source.html\": [4, 0, 0, 5, 7],\n \"a00626.html\": [4, 0, 0, 5, 39],\n \"a00626_source.html\": [4, 0, 0, 5, 39],\n- \"a00629.html\": [4, 0, 0, 5, 7],\n- \"a00629_source.html\": [4, 0, 0, 5, 7],\n- \"a00632.html\": [4, 0, 0, 5, 31],\n- \"a00632_source.html\": [4, 0, 0, 5, 31],\n- \"a00635.html\": [4, 0, 0, 5, 38],\n- \"a00638_source.html\": [4, 0, 0, 5, 13],\n- \"a00641.html\": [4, 0, 0, 5, 16],\n- \"a00641_source.html\": [4, 0, 0, 5, 16],\n- \"a00644.html\": [4, 0, 0, 5, 25],\n- \"a00644_source.html\": [4, 0, 0, 5, 25],\n- \"a00647.html\": [4, 0, 0, 5, 26],\n- \"a00647_source.html\": [4, 0, 0, 5, 26],\n- \"a00650.html\": [4, 0, 0, 5, 24],\n- \"a00650_source.html\": [4, 0, 0, 5, 24],\n- \"a00653.html\": [4, 0, 0, 5, 3],\n- \"a00656_source.html\": [4, 0, 0, 5, 21],\n- \"a00659.html\": [4, 0, 0, 5, 2],\n- \"a00659_source.html\": [4, 0, 0, 5, 2],\n- \"a00662.html\": [4, 0, 0, 5, 29],\n- \"a00662.html#a1c320e42b033352fbbd8266e3bd5faad\": [4, 0, 0, 5, 29, 4],\n- \"a00662.html#a4c14be406d50f65bd404429a7b1d3af0\": [4, 0, 0, 5, 29, 8],\n- \"a00662.html#a4f9e295c4f7086ce05cbe37aeeca47fe\": [4, 0, 0, 5, 29, 5],\n- \"a00662.html#aab7ddea9b0bc36f296327e0ec08c4ef0\": [4, 0, 0, 5, 29, 6],\n- \"a00662.html#aac25d6c8afb07054416ba6727685bf55\": [4, 0, 0, 5, 29, 7],\n- \"a00662.html#ae4b4e8e7f0d745882c6a02b507d5bffe\": [4, 0, 0, 5, 29, 3],\n- \"a00662_source.html\": [4, 0, 0, 5, 29],\n- \"a00665.html\": [4, 0, 0, 5, 28],\n- \"a00665_source.html\": [4, 0, 0, 5, 28],\n- \"a00671.html\": [4, 0, 0, 5, 41],\n- \"a00671_source.html\": [4, 0, 0, 5, 41],\n- \"a00674.html\": [4, 0, 0, 5, 34],\n- \"a00674_source.html\": [4, 0, 0, 5, 34],\n- \"a00677_source.html\": [4, 0, 0, 5, 9],\n- \"a00680.html\": [4, 0, 0, 5, 10],\n- \"a00680_source.html\": [4, 0, 0, 5, 10],\n- \"a00683.html\": [4, 0, 0, 5, 19],\n- \"a00683_source.html\": [4, 0, 0, 5, 19],\n- \"a00686.html\": [4, 0, 0, 5, 12],\n- \"a00686_source.html\": [4, 0, 0, 5, 12],\n- \"a00689.html\": [4, 0, 0, 5, 1],\n- \"a00689_source.html\": [4, 0, 0, 5, 1],\n- \"a00692.html\": [4, 0, 0, 5, 40],\n- \"a00695.html\": [4, 0, 0, 5, 4],\n- \"a00695_source.html\": [4, 0, 0, 5, 4],\n- \"a00698_source.html\": [4, 0, 0, 5, 0],\n+ \"a00629.html\": [4, 0, 0, 5, 24],\n+ \"a00629_source.html\": [4, 0, 0, 5, 24],\n+ \"a00632.html\": [4, 0, 0, 5, 3],\n+ \"a00635.html\": [4, 0, 0, 5, 29],\n+ \"a00635.html#a1c320e42b033352fbbd8266e3bd5faad\": [4, 0, 0, 5, 29, 4],\n+ \"a00635.html#a4c14be406d50f65bd404429a7b1d3af0\": [4, 0, 0, 5, 29, 8],\n+ \"a00635.html#a4f9e295c4f7086ce05cbe37aeeca47fe\": [4, 0, 0, 5, 29, 5],\n+ \"a00635.html#aab7ddea9b0bc36f296327e0ec08c4ef0\": [4, 0, 0, 5, 29, 6],\n+ \"a00635.html#aac25d6c8afb07054416ba6727685bf55\": [4, 0, 0, 5, 29, 7],\n+ \"a00635.html#ae4b4e8e7f0d745882c6a02b507d5bffe\": [4, 0, 0, 5, 29, 3],\n+ \"a00635_source.html\": [4, 0, 0, 5, 29],\n+ \"a00638.html\": [4, 0, 0, 5, 26],\n+ \"a00638_source.html\": [4, 0, 0, 5, 26],\n+ \"a00641.html\": [4, 0, 0, 5, 30],\n+ \"a00641.html#a37995b0d0610e5fb29c6bd0715151d67\": [4, 0, 0, 5, 30, 3],\n+ \"a00641.html#a4adc1bb606fa4a14d5dbd246f95cecd3\": [4, 0, 0, 5, 30, 4],\n+ \"a00641.html#a4e4c133c4fd0d9d73593f601be2248a6\": [4, 0, 0, 5, 30, 5],\n+ \"a00641.html#ae9a7dceb0a85c356062b55f6939b1419\": [4, 0, 0, 5, 30, 2],\n+ \"a00641_source.html\": [4, 0, 0, 5, 30],\n+ \"a00644_source.html\": [4, 0, 0, 5, 9],\n+ \"a00647.html\": [4, 0, 0, 5, 18],\n+ \"a00647.html#a99e63c90a8ac740d99716e73fe97e054\": [4, 0, 0, 5, 18, 1],\n+ \"a00647_source.html\": [4, 0, 0, 5, 18],\n+ \"a00650.html\": [4, 0, 0, 5, 10],\n+ \"a00650_source.html\": [4, 0, 0, 5, 10],\n+ \"a00653.html\": [4, 0, 0, 5, 16],\n+ \"a00653_source.html\": [4, 0, 0, 5, 16],\n+ \"a00656.html\": [4, 0, 0, 5, 22],\n+ \"a00656.html#a18a265afdea057ea54be10262396be12\": [4, 0, 0, 5, 22, 6],\n+ \"a00656.html#a3453247aec1d8b4642947ffd4bca426b\": [4, 0, 0, 5, 22, 7],\n+ \"a00656.html#a62b34d6038ccdfa84d8a5bb0c15328b1\": [4, 0, 0, 5, 22, 3],\n+ \"a00656.html#a6c0319a6ebcc83d4a5cf9ff51729bb80\": [4, 0, 0, 5, 22, 8],\n+ \"a00656.html#a7771a103b41708e88763ff67059ff01d\": [4, 0, 0, 5, 22, 4],\n+ \"a00656.html#ae67d0d86c4e55b175859967a70b36983\": [4, 0, 0, 5, 22, 5],\n+ \"a00656_source.html\": [4, 0, 0, 5, 22],\n+ \"a00659.html\": [4, 0, 0, 5, 20],\n+ \"a00659_source.html\": [4, 0, 0, 5, 20],\n+ \"a00662.html\": [4, 0, 0, 5, 6],\n+ \"a00662_source.html\": [4, 0, 0, 5, 6],\n+ \"a00665.html\": [4, 0, 0, 5, 15],\n+ \"a00665_source.html\": [4, 0, 0, 5, 15],\n+ \"a00668.html\": [4, 0, 0, 5, 17],\n+ \"a00671.html\": [4, 0, 0, 5, 35],\n+ \"a00674.html\": [4, 0, 0, 5, 32],\n+ \"a00674_source.html\": [4, 0, 0, 5, 32],\n+ \"a00677.html\": [4, 0, 0, 5, 28],\n+ \"a00677_source.html\": [4, 0, 0, 5, 28],\n+ \"a00683_source.html\": [4, 0, 0, 5, 21],\n+ \"a00686.html\": [4, 0, 0, 5, 8],\n+ \"a00686_source.html\": [4, 0, 0, 5, 8],\n+ \"a00689.html\": [4, 0, 0, 5, 33],\n+ \"a00692.html\": [4, 0, 0, 5, 25],\n+ \"a00692_source.html\": [4, 0, 0, 5, 25],\n+ \"a00695_source.html\": [4, 0, 0, 5, 13],\n+ \"a00698.html\": [4, 0, 0, 5, 2],\n+ \"a00698_source.html\": [4, 0, 0, 5, 2],\n \"a00701.html\": [4, 0, 0, 5, 27],\n \"a00701_source.html\": [4, 0, 0, 5, 27],\n- \"a00704.html\": [4, 0, 0, 6, 60],\n- \"a00704_source.html\": [4, 0, 0, 6, 60],\n- \"a00707.html\": [4, 0, 0, 6, 11],\n- \"a00710.html\": [4, 0, 0, 6, 46],\n- \"a00710_source.html\": [4, 0, 0, 6, 46],\n- \"a00713.html\": [4, 0, 0, 6, 24],\n- \"a00713_source.html\": [4, 0, 0, 6, 24],\n- \"a00716.html\": [4, 0, 0, 6, 16],\n- \"a00716_source.html\": [4, 0, 0, 6, 16],\n- \"a00719.html\": [4, 0, 0, 6, 39],\n- \"a00719_source.html\": [4, 0, 0, 6, 39],\n- \"a00722.html\": [4, 0, 0, 6, 59],\n- \"a00725.html\": [4, 0, 0, 6, 18],\n- \"a00725_source.html\": [4, 0, 0, 6, 18],\n- \"a00728.html\": [4, 0, 0, 6, 44],\n- \"a00728_source.html\": [4, 0, 0, 6, 44],\n- \"a00731.html\": [4, 0, 0, 6, 41],\n- \"a00734.html\": [4, 0, 0, 6, 2],\n- \"a00734_source.html\": [4, 0, 0, 6, 2],\n- \"a00737.html\": [4, 0, 0, 6, 27],\n- \"a00737.html#a6516ea957c3a22ddf429cefef1fe9486\": [4, 0, 0, 6, 27, 1],\n- \"a00737_source.html\": [4, 0, 0, 6, 27],\n- \"a00740.html\": [4, 0, 0, 6, 3],\n- \"a00740.html#a106ec458ddb425604809da93346af55d\": [4, 0, 0, 6, 3, 2],\n- \"a00740.html#a552de56fca49d1b4942dd9b8e8357b0a\": [4, 0, 0, 6, 3, 3],\n- \"a00740.html#a5644e12e89afaac433f5d61c3d8e9003\": [4, 0, 0, 6, 3, 0],\n- \"a00740.html#a6abcac97e441f1454790ff53caa1b229\": [4, 0, 0, 6, 3, 6],\n- \"a00740.html#aa84fa88db91d429bec261c655fc54bd6\": [4, 0, 0, 6, 3, 1],\n- \"a00740.html#aa91c0485819ec2bfd249a922c81e3eb4\": [4, 0, 0, 6, 3, 4],\n- \"a00740.html#af2dc48a6a2e9abf4d0636578847a6b5a\": [4, 0, 0, 6, 3, 5],\n- \"a00743.html\": [4, 0, 0, 6, 38],\n- \"a00746.html\": [4, 0, 0, 6, 9],\n- \"a00746_source.html\": [4, 0, 0, 6, 9],\n- \"a00749.html\": [4, 0, 0, 6, 4],\n- \"a00749.html#a106ec458ddb425604809da93346af55d\": [4, 0, 0, 6, 4, 4],\n- \"a00749.html#a552de56fca49d1b4942dd9b8e8357b0a\": [4, 0, 0, 6, 4, 5],\n- \"a00749.html#a5644e12e89afaac433f5d61c3d8e9003\": [4, 0, 0, 6, 4, 2],\n- \"a00749.html#a6abcac97e441f1454790ff53caa1b229\": [4, 0, 0, 6, 4, 8],\n- \"a00749.html#a74eb09e3192f06bae9de746aa981624a\": [4, 0, 0, 6, 4, 1],\n- \"a00749.html#aa84fa88db91d429bec261c655fc54bd6\": [4, 0, 0, 6, 4, 3],\n- \"a00749.html#aa91c0485819ec2bfd249a922c81e3eb4\": [4, 0, 0, 6, 4, 6],\n- \"a00749.html#af2dc48a6a2e9abf4d0636578847a6b5a\": [4, 0, 0, 6, 4, 7],\n- \"a00749_source.html\": [4, 0, 0, 6, 4],\n- \"a00752.html\": [4, 0, 0, 6, 56],\n- \"a00752_source.html\": [4, 0, 0, 6, 56],\n- \"a00755.html\": [4, 0, 0, 6, 5],\n- \"a00758.html\": [4, 0, 0, 6, 49],\n- \"a00758_source.html\": [4, 0, 0, 6, 49],\n- \"a00761.html\": [4, 0, 0, 6, 13],\n- \"a00764.html\": [4, 0, 0, 6, 50],\n- \"a00767.html\": [4, 0, 0, 6, 31],\n- \"a00767_source.html\": [4, 0, 0, 6, 31],\n- \"a00770.html\": [4, 0, 0, 6, 54],\n- \"a00770.html#a0ec82adc6e13261cf4a012b65b301256\": [4, 0, 0, 6, 54, 4],\n- \"a00770.html#a2c7eca9f27b43b52756c1afd85478dd8\": [4, 0, 0, 6, 54, 5],\n- \"a00770_source.html\": [4, 0, 0, 6, 54],\n- \"a00773.html\": [4, 0, 0, 6, 47],\n- \"a00773_source.html\": [4, 0, 0, 6, 47],\n- \"a00776.html\": [4, 0, 0, 6, 34],\n- \"a00776.html#ab56c4bfa363f8c23c48eb078e9c84a9c\": [4, 0, 0, 6, 34, 2],\n- \"a00776_source.html\": [4, 0, 0, 6, 34],\n- \"a00779.html\": [4, 0, 0, 6, 12],\n- \"a00779_source.html\": [4, 0, 0, 6, 12],\n- \"a00782.html\": [4, 0, 0, 6, 48],\n- \"a00785.html\": [4, 0, 0, 6, 1],\n- \"a00785_source.html\": [4, 0, 0, 6, 1],\n- \"a00788.html\": [4, 0, 0, 6, 25],\n- \"a00791.html\": [4, 0, 0, 6, 51],\n- \"a00791_source.html\": [4, 0, 0, 6, 51],\n+ \"a00704.html\": [4, 0, 0, 6, 48],\n+ \"a00707.html\": [4, 0, 0, 6, 49],\n+ \"a00707_source.html\": [4, 0, 0, 6, 49],\n+ \"a00710.html\": [4, 0, 0, 6, 58],\n+ \"a00710_source.html\": [4, 0, 0, 6, 58],\n+ \"a00716.html\": [4, 0, 0, 6, 28],\n+ \"a00716.html#a81b7af7638d28555c3f404318cc67b22\": [4, 0, 0, 6, 28, 3],\n+ \"a00716.html#aa84114ad1593684ad739088a2898afdb\": [4, 0, 0, 6, 28, 0],\n+ \"a00716.html#ad2b587fde5d35a27d6c88feb4432e785\": [4, 0, 0, 6, 28, 2],\n+ \"a00716.html#aed4b2ca704ddd6530ea70122f883ac88\": [4, 0, 0, 6, 28, 4],\n+ \"a00716.html#af55440f741d8b2f706101f7a79ba7111\": [4, 0, 0, 6, 28, 1],\n+ \"a00719.html\": [4, 0, 0, 6, 34],\n+ \"a00719.html#ab56c4bfa363f8c23c48eb078e9c84a9c\": [4, 0, 0, 6, 34, 2],\n+ \"a00719_source.html\": [4, 0, 0, 6, 34],\n+ \"a00722.html\": [4, 0, 0, 6, 1],\n+ \"a00722_source.html\": [4, 0, 0, 6, 1],\n+ \"a00725.html\": [4, 0, 0, 6, 52],\n+ \"a00725.html#a52b9b28b076a8ae17d6d3d72ee1229c3\": [4, 0, 0, 6, 52, 0],\n+ \"a00725.html#aa9013a9053629f0c00b97726d9d8e19e\": [4, 0, 0, 6, 52, 1],\n+ \"a00725_source.html\": [4, 0, 0, 6, 52],\n+ \"a00731.html\": [4, 0, 0, 6, 18],\n+ \"a00731_source.html\": [4, 0, 0, 6, 18],\n+ \"a00734.html\": [4, 0, 0, 6, 17],\n+ \"a00737.html\": [4, 0, 0, 6, 11],\n+ \"a00740_source.html\": [4, 0, 0, 6, 32],\n+ \"a00743.html\": [4, 0, 0, 6, 47],\n+ \"a00743_source.html\": [4, 0, 0, 6, 47],\n+ \"a00746.html\": [4, 0, 0, 6, 16],\n+ \"a00746_source.html\": [4, 0, 0, 6, 16],\n+ \"a00749.html\": [4, 0, 0, 6, 53],\n+ \"a00749.html#a0ec82adc6e13261cf4a012b65b301256\": [4, 0, 0, 6, 53, 0],\n+ \"a00749.html#a2c7eca9f27b43b52756c1afd85478dd8\": [4, 0, 0, 6, 53, 1],\n+ \"a00752.html\": [4, 0, 0, 6, 9],\n+ \"a00752_source.html\": [4, 0, 0, 6, 9],\n+ \"a00755.html\": [4, 0, 0, 6, 44],\n+ \"a00755_source.html\": [4, 0, 0, 6, 44],\n+ \"a00758.html\": [4, 0, 0, 6, 14],\n+ \"a00758_source.html\": [4, 0, 0, 6, 14],\n+ \"a00761.html\": [4, 0, 0, 6, 27],\n+ \"a00761.html#a6516ea957c3a22ddf429cefef1fe9486\": [4, 0, 0, 6, 27, 1],\n+ \"a00761_source.html\": [4, 0, 0, 6, 27],\n+ \"a00764.html\": [4, 0, 0, 6, 6],\n+ \"a00764_source.html\": [4, 0, 0, 6, 6],\n+ \"a00767.html\": [4, 0, 0, 6, 25],\n+ \"a00770.html\": [4, 0, 0, 6, 39],\n+ \"a00770_source.html\": [4, 0, 0, 6, 39],\n+ \"a00773.html\": [4, 0, 0, 6, 41],\n+ \"a00779.html\": [4, 0, 0, 6, 51],\n+ \"a00779_source.html\": [4, 0, 0, 6, 51],\n+ \"a00782.html\": [4, 0, 0, 6, 26],\n+ \"a00782_source.html\": [4, 0, 0, 6, 26],\n+ \"a00785.html\": [4, 0, 0, 6, 59],\n+ \"a00788.html\": [4, 0, 0, 6, 3],\n+ \"a00788.html#a106ec458ddb425604809da93346af55d\": [4, 0, 0, 6, 3, 2],\n+ \"a00788.html#a552de56fca49d1b4942dd9b8e8357b0a\": [4, 0, 0, 6, 3, 3],\n+ \"a00788.html#a5644e12e89afaac433f5d61c3d8e9003\": [4, 0, 0, 6, 3, 0],\n+ \"a00788.html#a6abcac97e441f1454790ff53caa1b229\": [4, 0, 0, 6, 3, 6],\n+ \"a00788.html#aa84fa88db91d429bec261c655fc54bd6\": [4, 0, 0, 6, 3, 1],\n+ \"a00788.html#aa91c0485819ec2bfd249a922c81e3eb4\": [4, 0, 0, 6, 3, 4],\n+ \"a00788.html#af2dc48a6a2e9abf4d0636578847a6b5a\": [4, 0, 0, 6, 3, 5],\n+ \"a00791.html\": [4, 0, 0, 6, 36],\n+ \"a00791_source.html\": [4, 0, 0, 6, 36],\n+ \"a00794.html\": [4, 0, 0, 6, 0],\n+ \"a00794_source.html\": [4, 0, 0, 6, 0],\n \"a00797.html\": [4, 0, 0, 6, 30],\n- \"a00800.html\": [4, 0, 0, 6, 7],\n- \"a00800_source.html\": [4, 0, 0, 6, 7],\n- \"a00806.html\": [4, 0, 0, 6, 58],\n- \"a00806_source.html\": [4, 0, 0, 6, 58],\n- \"a00809.html\": [4, 0, 0, 6, 55],\n- \"a00812.html\": [4, 0, 0, 6, 36],\n- \"a00812_source.html\": [4, 0, 0, 6, 36],\n- \"a00818.html\": [4, 0, 0, 6, 37],\n- \"a00818_source.html\": [4, 0, 0, 6, 37],\n- \"a00821_source.html\": [4, 0, 0, 6, 40],\n- \"a00824.html\": [4, 0, 0, 6, 52],\n- \"a00824.html#a52b9b28b076a8ae17d6d3d72ee1229c3\": [4, 0, 0, 6, 52, 0],\n- \"a00824.html#aa9013a9053629f0c00b97726d9d8e19e\": [4, 0, 0, 6, 52, 1],\n- \"a00824_source.html\": [4, 0, 0, 6, 52],\n- \"a00827.html\": [4, 0, 0, 6, 26],\n- \"a00827_source.html\": [4, 0, 0, 6, 26],\n- \"a00830.html\": [4, 0, 0, 6, 8],\n- \"a00833_source.html\": [4, 0, 0, 6, 45],\n- \"a00836.html\": [4, 0, 0, 6, 14]\n+ \"a00800.html\": [4, 0, 0, 6, 8],\n+ \"a00803_source.html\": [4, 0, 0, 6, 40],\n+ \"a00806.html\": [4, 0, 0, 6, 50],\n+ \"a00812.html\": [4, 0, 0, 6, 29],\n+ \"a00812.html#a37ca85391e3bc671c71b68bc324296f0\": [4, 0, 0, 6, 29, 7],\n+ \"a00812.html#a6516ea957c3a22ddf429cefef1fe9486\": [4, 0, 0, 6, 29, 4],\n+ \"a00812.html#a81b7af7638d28555c3f404318cc67b22\": [4, 0, 0, 6, 29, 5],\n+ \"a00812.html#aa84114ad1593684ad739088a2898afdb\": [4, 0, 0, 6, 29, 1],\n+ \"a00812.html#ad2b587fde5d35a27d6c88feb4432e785\": [4, 0, 0, 6, 29, 3],\n+ \"a00812.html#aed4b2ca704ddd6530ea70122f883ac88\": [4, 0, 0, 6, 29, 6],\n+ \"a00812.html#af55440f741d8b2f706101f7a79ba7111\": [4, 0, 0, 6, 29, 2],\n+ \"a00812_source.html\": [4, 0, 0, 6, 29],\n+ \"a00815.html\": [4, 0, 0, 6, 20],\n+ \"a00815.html#a35c269c3243cab16a7475239a9c91021\": [4, 0, 0, 6, 20, 3],\n+ \"a00815_source.html\": [4, 0, 0, 6, 20],\n+ \"a00818_source.html\": [4, 0, 0, 6, 43],\n+ \"a00821.html\": [4, 0, 0, 6, 33],\n+ \"a00821.html#ab56c4bfa363f8c23c48eb078e9c84a9c\": [4, 0, 0, 6, 33, 0],\n+ \"a00824.html\": [4, 0, 0, 6, 7],\n+ \"a00824_source.html\": [4, 0, 0, 6, 7],\n+ \"a00827.html\": [4, 0, 0, 6, 42],\n+ \"a00827.html#ab6e5a4884342656e0837ef07008ec03f\": [4, 0, 0, 6, 42, 12],\n+ \"a00827_source.html\": [4, 0, 0, 6, 42],\n+ \"a00830.html\": [4, 0, 0, 6, 54]\n };\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/navtreeindex3.js", "source2": "./usr/share/doc/libgtsam-dev/html/navtreeindex3.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,252 +1,252 @@\n var NAVTREEINDEX3 = {\n- \"a00836_source.html\": [4, 0, 0, 6, 14],\n- \"a00839.html\": [4, 0, 0, 6, 10],\n- \"a00839_source.html\": [4, 0, 0, 6, 10],\n- \"a00842_source.html\": [4, 0, 0, 6, 43],\n- \"a00845.html\": [4, 0, 0, 6, 17],\n- \"a00848.html\": [4, 0, 0, 6, 35],\n- \"a00851.html\": [4, 0, 0, 6, 23],\n- \"a00851_source.html\": [4, 0, 0, 6, 23],\n- \"a00854_source.html\": [4, 0, 0, 6, 32],\n- \"a00857.html\": [4, 0, 0, 6, 15],\n- \"a00860.html\": [4, 0, 0, 6, 6],\n- \"a00860_source.html\": [4, 0, 0, 6, 6],\n- \"a00866.html\": [4, 0, 0, 6, 22],\n- \"a00872.html\": [4, 0, 0, 6, 20],\n- \"a00872.html#a35c269c3243cab16a7475239a9c91021\": [4, 0, 0, 6, 20, 3],\n- \"a00872_source.html\": [4, 0, 0, 6, 20],\n- \"a00875.html\": [4, 0, 0, 6, 42],\n- \"a00875.html#ab6e5a4884342656e0837ef07008ec03f\": [4, 0, 0, 6, 42, 12],\n- \"a00875_source.html\": [4, 0, 0, 6, 42],\n- \"a00878.html\": [4, 0, 0, 6, 28],\n- \"a00878.html#a81b7af7638d28555c3f404318cc67b22\": [4, 0, 0, 6, 28, 3],\n- \"a00878.html#aa84114ad1593684ad739088a2898afdb\": [4, 0, 0, 6, 28, 0],\n- \"a00878.html#ad2b587fde5d35a27d6c88feb4432e785\": [4, 0, 0, 6, 28, 2],\n- \"a00878.html#aed4b2ca704ddd6530ea70122f883ac88\": [4, 0, 0, 6, 28, 4],\n- \"a00878.html#af55440f741d8b2f706101f7a79ba7111\": [4, 0, 0, 6, 28, 1],\n+ \"a00830.html#a0ec82adc6e13261cf4a012b65b301256\": [4, 0, 0, 6, 54, 4],\n+ \"a00830.html#a2c7eca9f27b43b52756c1afd85478dd8\": [4, 0, 0, 6, 54, 5],\n+ \"a00830_source.html\": [4, 0, 0, 6, 54],\n+ \"a00833.html\": [4, 0, 0, 6, 37],\n+ \"a00833_source.html\": [4, 0, 0, 6, 37],\n+ \"a00836.html\": [4, 0, 0, 6, 55],\n+ \"a00839.html\": [4, 0, 0, 6, 35],\n+ \"a00842.html\": [4, 0, 0, 6, 56],\n+ \"a00842_source.html\": [4, 0, 0, 6, 56],\n+ \"a00845.html\": [4, 0, 0, 6, 10],\n+ \"a00845_source.html\": [4, 0, 0, 6, 10],\n+ \"a00848_source.html\": [4, 0, 0, 6, 45],\n+ \"a00851.html\": [4, 0, 0, 6, 57],\n+ \"a00854.html\": [4, 0, 0, 6, 22],\n+ \"a00857.html\": [4, 0, 0, 6, 31],\n+ \"a00857_source.html\": [4, 0, 0, 6, 31],\n+ \"a00863.html\": [4, 0, 0, 6, 5],\n+ \"a00866.html\": [4, 0, 0, 6, 46],\n+ \"a00866_source.html\": [4, 0, 0, 6, 46],\n+ \"a00869.html\": [4, 0, 0, 6, 13],\n+ \"a00872.html\": [4, 0, 0, 6, 12],\n+ \"a00872_source.html\": [4, 0, 0, 6, 12],\n+ \"a00875.html\": [4, 0, 0, 6, 23],\n+ \"a00875_source.html\": [4, 0, 0, 6, 23],\n+ \"a00878.html\": [4, 0, 0, 6, 15],\n \"a00881.html\": [4, 0, 0, 6, 21],\n \"a00881_source.html\": [4, 0, 0, 6, 21],\n- \"a00884.html\": [4, 0, 0, 6, 57],\n- \"a00887.html\": [4, 0, 0, 6, 29],\n- \"a00887.html#a37ca85391e3bc671c71b68bc324296f0\": [4, 0, 0, 6, 29, 7],\n- \"a00887.html#a6516ea957c3a22ddf429cefef1fe9486\": [4, 0, 0, 6, 29, 4],\n- \"a00887.html#a81b7af7638d28555c3f404318cc67b22\": [4, 0, 0, 6, 29, 5],\n- \"a00887.html#aa84114ad1593684ad739088a2898afdb\": [4, 0, 0, 6, 29, 1],\n- \"a00887.html#ad2b587fde5d35a27d6c88feb4432e785\": [4, 0, 0, 6, 29, 3],\n- \"a00887.html#aed4b2ca704ddd6530ea70122f883ac88\": [4, 0, 0, 6, 29, 6],\n- \"a00887.html#af55440f741d8b2f706101f7a79ba7111\": [4, 0, 0, 6, 29, 2],\n- \"a00887_source.html\": [4, 0, 0, 6, 29],\n- \"a00890.html\": [4, 0, 0, 6, 0],\n- \"a00890_source.html\": [4, 0, 0, 6, 0],\n- \"a00893.html\": [4, 0, 0, 6, 53],\n- \"a00893.html#a0ec82adc6e13261cf4a012b65b301256\": [4, 0, 0, 6, 53, 0],\n- \"a00893.html#a2c7eca9f27b43b52756c1afd85478dd8\": [4, 0, 0, 6, 53, 1],\n- \"a00896.html\": [4, 0, 0, 6, 19],\n- \"a00896.html#a35c269c3243cab16a7475239a9c91021\": [4, 0, 0, 6, 19, 0],\n- \"a00899.html\": [4, 0, 0, 6, 33],\n- \"a00899.html#ab56c4bfa363f8c23c48eb078e9c84a9c\": [4, 0, 0, 6, 33, 0],\n- \"a00902.html\": [4, 0, 0, 7, 3],\n- \"a00902_source.html\": [4, 0, 0, 7, 3],\n- \"a00908.html\": [4, 0, 0, 7, 8],\n- \"a00908_source.html\": [4, 0, 0, 7, 8],\n- \"a00914.html\": [4, 0, 0, 7, 23],\n- \"a00914_source.html\": [4, 0, 0, 7, 23],\n- \"a00917.html\": [4, 0, 0, 7, 16],\n- \"a00917_source.html\": [4, 0, 0, 7, 16],\n- \"a00920.html\": [4, 0, 0, 7, 11],\n- \"a00920_source.html\": [4, 0, 0, 7, 11],\n- \"a00923.html\": [4, 0, 0, 7, 24],\n- \"a00923_source.html\": [4, 0, 0, 7, 24],\n- \"a00929.html\": [4, 0, 0, 7, 7],\n- \"a00929_source.html\": [4, 0, 0, 7, 7],\n+ \"a00884.html\": [4, 0, 0, 6, 2],\n+ \"a00884_source.html\": [4, 0, 0, 6, 2],\n+ \"a00887.html\": [4, 0, 0, 6, 19],\n+ \"a00887.html#a35c269c3243cab16a7475239a9c91021\": [4, 0, 0, 6, 19, 0],\n+ \"a00890.html\": [4, 0, 0, 6, 24],\n+ \"a00890_source.html\": [4, 0, 0, 6, 24],\n+ \"a00893.html\": [4, 0, 0, 6, 60],\n+ \"a00893_source.html\": [4, 0, 0, 6, 60],\n+ \"a00896.html\": [4, 0, 0, 6, 4],\n+ \"a00896.html#a106ec458ddb425604809da93346af55d\": [4, 0, 0, 6, 4, 4],\n+ \"a00896.html#a552de56fca49d1b4942dd9b8e8357b0a\": [4, 0, 0, 6, 4, 5],\n+ \"a00896.html#a5644e12e89afaac433f5d61c3d8e9003\": [4, 0, 0, 6, 4, 2],\n+ \"a00896.html#a6abcac97e441f1454790ff53caa1b229\": [4, 0, 0, 6, 4, 8],\n+ \"a00896.html#a74eb09e3192f06bae9de746aa981624a\": [4, 0, 0, 6, 4, 1],\n+ \"a00896.html#aa84fa88db91d429bec261c655fc54bd6\": [4, 0, 0, 6, 4, 3],\n+ \"a00896.html#aa91c0485819ec2bfd249a922c81e3eb4\": [4, 0, 0, 6, 4, 6],\n+ \"a00896.html#af2dc48a6a2e9abf4d0636578847a6b5a\": [4, 0, 0, 6, 4, 7],\n+ \"a00896_source.html\": [4, 0, 0, 6, 4],\n+ \"a00899.html\": [4, 0, 0, 6, 38],\n+ \"a00902.html\": [4, 0, 0, 7, 27],\n+ \"a00908.html\": [4, 0, 0, 7, 11],\n+ \"a00908_source.html\": [4, 0, 0, 7, 11],\n+ \"a00911.html\": [4, 0, 0, 7, 28],\n+ \"a00911_source.html\": [4, 0, 0, 7, 28],\n+ \"a00914.html\": [4, 0, 0, 7, 25],\n+ \"a00914_source.html\": [4, 0, 0, 7, 25],\n+ \"a00917.html\": [4, 0, 0, 7, 23],\n+ \"a00917_source.html\": [4, 0, 0, 7, 23],\n+ \"a00920_source.html\": [4, 0, 0, 7, 17],\n+ \"a00926.html\": [4, 0, 0, 7, 19],\n+ \"a00926_source.html\": [4, 0, 0, 7, 19],\n \"a00932.html\": [4, 0, 0, 7, 2],\n- \"a00935.html\": [4, 0, 0, 7, 21],\n- \"a00938.html\": [4, 0, 0, 7, 15],\n- \"a00938_source.html\": [4, 0, 0, 7, 15],\n- \"a00941.html\": [4, 0, 0, 7, 28],\n- \"a00941_source.html\": [4, 0, 0, 7, 28],\n- \"a00944.html\": [4, 0, 0, 7, 20],\n- \"a00944.html#ad6ba0a40d5dd8936f4ca53f7bb3ef53b\": [4, 0, 0, 7, 20, 2],\n- \"a00944_source.html\": [4, 0, 0, 7, 20],\n- \"a00947.html\": [4, 0, 0, 7, 5],\n- \"a00947_source.html\": [4, 0, 0, 7, 5],\n- \"a00950.html\": [4, 0, 0, 7, 1],\n- \"a00950_source.html\": [4, 0, 0, 7, 1],\n- \"a00956_source.html\": [4, 0, 0, 7, 17],\n- \"a00959.html\": [4, 0, 0, 7, 27],\n- \"a00965.html\": [4, 0, 0, 7, 0],\n- \"a00968.html\": [4, 0, 0, 7, 13],\n- \"a00968_source.html\": [4, 0, 0, 7, 13],\n- \"a00971.html\": [4, 0, 0, 7, 25],\n- \"a00971_source.html\": [4, 0, 0, 7, 25],\n- \"a00974.html\": [4, 0, 0, 7, 4],\n- \"a00977.html\": [4, 0, 0, 7, 18],\n- \"a00980.html\": [4, 0, 0, 7, 6],\n+ \"a00938.html\": [4, 0, 0, 7, 26],\n+ \"a00938_source.html\": [4, 0, 0, 7, 26],\n+ \"a00941.html\": [4, 0, 0, 7, 4],\n+ \"a00944.html\": [4, 0, 0, 7, 3],\n+ \"a00944_source.html\": [4, 0, 0, 7, 3],\n+ \"a00947.html\": [4, 0, 0, 7, 18],\n+ \"a00950.html\": [4, 0, 0, 7, 6],\n+ \"a00953.html\": [4, 0, 0, 7, 7],\n+ \"a00953_source.html\": [4, 0, 0, 7, 7],\n+ \"a00956.html\": [4, 0, 0, 7, 8],\n+ \"a00956_source.html\": [4, 0, 0, 7, 8],\n+ \"a00959.html\": [4, 0, 0, 7, 14],\n+ \"a00962.html\": [4, 0, 0, 7, 20],\n+ \"a00962.html#ad6ba0a40d5dd8936f4ca53f7bb3ef53b\": [4, 0, 0, 7, 20, 2],\n+ \"a00962_source.html\": [4, 0, 0, 7, 20],\n+ \"a00965.html\": [4, 0, 0, 7, 24],\n+ \"a00965_source.html\": [4, 0, 0, 7, 24],\n+ \"a00968.html\": [4, 0, 0, 7, 12],\n+ \"a00968.html#ae7a6582902c6daf9f20f2f7e466c60d8\": [4, 0, 0, 7, 12, 0],\n+ \"a00971.html\": [4, 0, 0, 7, 22],\n+ \"a00971_source.html\": [4, 0, 0, 7, 22],\n+ \"a00974.html\": [4, 0, 0, 7, 13],\n+ \"a00974_source.html\": [4, 0, 0, 7, 13],\n+ \"a00977.html\": [4, 0, 0, 7, 15],\n+ \"a00977_source.html\": [4, 0, 0, 7, 15],\n \"a00983.html\": [4, 0, 0, 7, 10],\n- \"a00986.html\": [4, 0, 0, 7, 22],\n- \"a00986_source.html\": [4, 0, 0, 7, 22],\n- \"a00989.html\": [4, 0, 0, 7, 12],\n- \"a00989.html#ae7a6582902c6daf9f20f2f7e466c60d8\": [4, 0, 0, 7, 12, 0],\n- \"a00992.html\": [4, 0, 0, 7, 14],\n- \"a00995.html\": [4, 0, 0, 7, 26],\n- \"a00995_source.html\": [4, 0, 0, 7, 26],\n- \"a00998.html\": [4, 0, 0, 7, 19],\n- \"a00998_source.html\": [4, 0, 0, 7, 19],\n- \"a01001.html\": [4, 0, 0, 8, 16],\n- \"a01001_source.html\": [4, 0, 0, 8, 16],\n- \"a01004.html\": [4, 0, 0, 8, 31],\n- \"a01007_source.html\": [4, 0, 0, 8, 41],\n- \"a01010.html\": [4, 0, 0, 8, 8],\n- \"a01010_source.html\": [4, 0, 0, 8, 8],\n- \"a01013.html\": [4, 0, 0, 8, 14],\n- \"a01013.html#a313f0e290f370cff0b7e25024d1b8c6d\": [4, 0, 0, 8, 14, 5],\n- \"a01013.html#a9d2a0b16c9f78f20fc78fa39c7426242\": [4, 0, 0, 8, 14, 4],\n- \"a01013_source.html\": [4, 0, 0, 8, 14],\n- \"a01016.html\": [4, 0, 0, 8, 5],\n- \"a01016.html#a3db519caa1b7e43412c9a7e13acf8329\": [4, 0, 0, 8, 5, 3],\n- \"a01016.html#a51881c20dd5ecdd129cb993ea8374846\": [4, 0, 0, 8, 5, 2],\n- \"a01016_source.html\": [4, 0, 0, 8, 5],\n- \"a01019.html\": [4, 0, 0, 8, 34],\n- \"a01019_source.html\": [4, 0, 0, 8, 34],\n- \"a01025_source.html\": [4, 0, 0, 8, 18],\n- \"a01028.html\": [4, 0, 0, 8, 6],\n- \"a01028.html#a3db519caa1b7e43412c9a7e13acf8329\": [4, 0, 0, 8, 6, 8],\n- \"a01028.html#a405f3793afc2cc3173c3fbdecadb162a\": [4, 0, 0, 8, 6, 9],\n- \"a01028.html#a51881c20dd5ecdd129cb993ea8374846\": [4, 0, 0, 8, 6, 6],\n- \"a01028.html#a589e3ff8cd71e5a17ee1dcfae8b2df26\": [4, 0, 0, 8, 6, 10],\n- \"a01028.html#a794029fe8dfc03f67a8cb64ad05d47c9\": [4, 0, 0, 8, 6, 7],\n- \"a01028.html#a9512eb02324210895442f2bf8268902d\": [4, 0, 0, 8, 6, 11],\n- \"a01028_source.html\": [4, 0, 0, 8, 6],\n- \"a01031.html\": [4, 0, 0, 8, 20],\n- \"a01031_source.html\": [4, 0, 0, 8, 20],\n- \"a01034.html\": [4, 0, 0, 8, 49],\n- \"a01034.html#a3382482454c164c6f5817dcbe6f932b3\": [4, 0, 0, 8, 49, 0],\n- \"a01037.html\": [4, 0, 0, 8, 58],\n- \"a01037.html#ad5602eb85d05df6cba60e47eebbd3636\": [4, 0, 0, 8, 58, 1],\n- \"a01037_source.html\": [4, 0, 0, 8, 58],\n- \"a01040.html\": [4, 0, 0, 8, 28],\n- \"a01040_source.html\": [4, 0, 0, 8, 28],\n- \"a01043.html\": [4, 0, 0, 8, 32],\n- \"a01043_source.html\": [4, 0, 0, 8, 32],\n- \"a01046.html\": [4, 0, 0, 8, 21],\n- \"a01049.html\": [4, 0, 0, 8, 51],\n- \"a01052.html\": [4, 0, 0, 8, 17],\n- \"a01052_source.html\": [4, 0, 0, 8, 17],\n- \"a01055.html\": [4, 0, 0, 8, 25],\n- \"a01055.html#a2b0857edd76f8d63eeee0ce9944e28d4\": [4, 0, 0, 8, 25, 0],\n- \"a01058.html\": [4, 0, 0, 8, 1],\n- \"a01058_source.html\": [4, 0, 0, 8, 1],\n- \"a01061_source.html\": [4, 0, 0, 8, 56],\n- \"a01064.html\": [4, 0, 0, 8, 12],\n- \"a01064_source.html\": [4, 0, 0, 8, 12],\n- \"a01067.html\": [4, 0, 0, 8, 22],\n- \"a01067_source.html\": [4, 0, 0, 8, 22],\n- \"a01070.html\": [4, 0, 0, 8, 42],\n- \"a01070_source.html\": [4, 0, 0, 8, 42],\n- \"a01073.html\": [4, 0, 0, 8, 4],\n- \"a01073_source.html\": [4, 0, 0, 8, 4],\n- \"a01076.html\": [4, 0, 0, 8, 52],\n- \"a01076_source.html\": [4, 0, 0, 8, 52],\n- \"a01079.html\": [4, 0, 0, 8, 37],\n- \"a01082.html\": [4, 0, 0, 8, 2],\n- \"a01085.html\": [4, 0, 0, 8, 3],\n- \"a01085_source.html\": [4, 0, 0, 8, 3],\n- \"a01091.html\": [4, 0, 0, 8, 11],\n- \"a01091_source.html\": [4, 0, 0, 8, 11],\n- \"a01094.html\": [4, 0, 0, 8, 50],\n- \"a01094.html#a3382482454c164c6f5817dcbe6f932b3\": [4, 0, 0, 8, 50, 1],\n- \"a01094_source.html\": [4, 0, 0, 8, 50],\n- \"a01097.html\": [4, 0, 0, 8, 44],\n- \"a01097_source.html\": [4, 0, 0, 8, 44],\n- \"a01100.html\": [4, 0, 0, 8, 33],\n- \"a01103.html\": [4, 0, 0, 8, 36],\n- \"a01103_source.html\": [4, 0, 0, 8, 36],\n- \"a01106.html\": [4, 0, 0, 8, 19],\n- \"a01109.html\": [4, 0, 0, 8, 15],\n+ \"a00986.html\": [4, 0, 0, 7, 1],\n+ \"a00986_source.html\": [4, 0, 0, 7, 1],\n+ \"a00989.html\": [4, 0, 0, 7, 21],\n+ \"a00992.html\": [4, 0, 0, 7, 5],\n+ \"a00992_source.html\": [4, 0, 0, 7, 5],\n+ \"a00995.html\": [4, 0, 0, 7, 16],\n+ \"a00995_source.html\": [4, 0, 0, 7, 16],\n+ \"a00998.html\": [4, 0, 0, 7, 0],\n+ \"a01001.html\": [4, 0, 0, 8, 42],\n+ \"a01001_source.html\": [4, 0, 0, 8, 42],\n+ \"a01004.html\": [4, 0, 0, 8, 29],\n+ \"a01004_source.html\": [4, 0, 0, 8, 29],\n+ \"a01007.html\": [4, 0, 0, 8, 24],\n+ \"a01007_source.html\": [4, 0, 0, 8, 24],\n+ \"a01010.html\": [4, 0, 0, 8, 21],\n+ \"a01013.html\": [4, 0, 0, 8, 33],\n+ \"a01016.html\": [4, 0, 0, 8, 15],\n+ \"a01019.html\": [4, 0, 0, 8, 8],\n+ \"a01019_source.html\": [4, 0, 0, 8, 8],\n+ \"a01022.html\": [4, 0, 0, 8, 19],\n+ \"a01025.html\": [4, 0, 0, 8, 44],\n+ \"a01025_source.html\": [4, 0, 0, 8, 44],\n+ \"a01028.html\": [4, 0, 0, 8, 31],\n+ \"a01031.html\": [4, 0, 0, 8, 16],\n+ \"a01031_source.html\": [4, 0, 0, 8, 16],\n+ \"a01034.html\": [4, 0, 0, 8, 39],\n+ \"a01037.html\": [4, 0, 0, 8, 28],\n+ \"a01037_source.html\": [4, 0, 0, 8, 28],\n+ \"a01040_source.html\": [4, 0, 0, 8, 56],\n+ \"a01043.html\": [4, 0, 0, 8, 3],\n+ \"a01043_source.html\": [4, 0, 0, 8, 3],\n+ \"a01046_source.html\": [4, 0, 0, 8, 7],\n+ \"a01049.html\": [4, 0, 0, 8, 26],\n+ \"a01049.html#a2b0857edd76f8d63eeee0ce9944e28d4\": [4, 0, 0, 8, 26, 1],\n+ \"a01049_source.html\": [4, 0, 0, 8, 26],\n+ \"a01052.html\": [4, 0, 0, 8, 40],\n+ \"a01052.html#a0ceb9e5a5e864b96c529db67f55a873b\": [4, 0, 0, 8, 40, 1],\n+ \"a01052.html#afc19854e0bfc1acadb00ff00a043cc17\": [4, 0, 0, 8, 40, 2],\n+ \"a01052_source.html\": [4, 0, 0, 8, 40],\n+ \"a01055.html\": [4, 0, 0, 8, 1],\n+ \"a01055_source.html\": [4, 0, 0, 8, 1],\n+ \"a01058.html\": [4, 0, 0, 8, 22],\n+ \"a01058_source.html\": [4, 0, 0, 8, 22],\n+ \"a01061.html\": [4, 0, 0, 8, 48],\n+ \"a01061_source.html\": [4, 0, 0, 8, 48],\n+ \"a01064.html\": [4, 0, 0, 8, 14],\n+ \"a01064.html#a313f0e290f370cff0b7e25024d1b8c6d\": [4, 0, 0, 8, 14, 5],\n+ \"a01064.html#a9d2a0b16c9f78f20fc78fa39c7426242\": [4, 0, 0, 8, 14, 4],\n+ \"a01064_source.html\": [4, 0, 0, 8, 14],\n+ \"a01067.html\": [4, 0, 0, 8, 30],\n+ \"a01067_source.html\": [4, 0, 0, 8, 30],\n+ \"a01070.html\": [4, 0, 0, 8, 12],\n+ \"a01070_source.html\": [4, 0, 0, 8, 12],\n+ \"a01073.html\": [4, 0, 0, 8, 52],\n+ \"a01073_source.html\": [4, 0, 0, 8, 52],\n+ \"a01076.html\": [4, 0, 0, 8, 0],\n+ \"a01079.html\": [4, 0, 0, 8, 43],\n+ \"a01082.html\": [4, 0, 0, 8, 35],\n+ \"a01085.html\": [4, 0, 0, 8, 46],\n+ \"a01085_source.html\": [4, 0, 0, 8, 46],\n+ \"a01088_source.html\": [4, 0, 0, 8, 18],\n+ \"a01091.html\": [4, 0, 0, 8, 13],\n+ \"a01091.html#a8ec37fe83eda47404b8588e1f012df21\": [4, 0, 0, 8, 13, 0],\n+ \"a01091.html#a9753b4e62378151d30bf8af5e2fc1602\": [4, 0, 0, 8, 13, 1],\n+ \"a01091_source.html\": [4, 0, 0, 8, 13],\n+ \"a01097.html\": [4, 0, 0, 8, 6],\n+ \"a01097.html#a3db519caa1b7e43412c9a7e13acf8329\": [4, 0, 0, 8, 6, 8],\n+ \"a01097.html#a405f3793afc2cc3173c3fbdecadb162a\": [4, 0, 0, 8, 6, 9],\n+ \"a01097.html#a51881c20dd5ecdd129cb993ea8374846\": [4, 0, 0, 8, 6, 6],\n+ \"a01097.html#a589e3ff8cd71e5a17ee1dcfae8b2df26\": [4, 0, 0, 8, 6, 10],\n+ \"a01097.html#a794029fe8dfc03f67a8cb64ad05d47c9\": [4, 0, 0, 8, 6, 7],\n+ \"a01097.html#a9512eb02324210895442f2bf8268902d\": [4, 0, 0, 8, 6, 11],\n+ \"a01097_source.html\": [4, 0, 0, 8, 6],\n+ \"a01100.html\": [4, 0, 0, 8, 10],\n+ \"a01100.html#a701d0cd12b81a725f7f9cd2432fe9e2a\": [4, 0, 0, 8, 10, 0],\n+ \"a01100_source.html\": [4, 0, 0, 8, 10],\n+ \"a01103.html\": [4, 0, 0, 8, 17],\n+ \"a01103_source.html\": [4, 0, 0, 8, 17],\n+ \"a01106.html\": [4, 0, 0, 8, 23],\n+ \"a01109.html\": [4, 0, 0, 8, 25],\n+ \"a01109.html#a2b0857edd76f8d63eeee0ce9944e28d4\": [4, 0, 0, 8, 25, 0],\n \"a01112.html\": [4, 0, 0, 8, 47],\n- \"a01115.html\": [4, 0, 0, 8, 45],\n- \"a01118.html\": [4, 0, 0, 8, 0],\n- \"a01121.html\": [4, 0, 0, 8, 13],\n- \"a01121.html#a8ec37fe83eda47404b8588e1f012df21\": [4, 0, 0, 8, 13, 0],\n- \"a01121.html#a9753b4e62378151d30bf8af5e2fc1602\": [4, 0, 0, 8, 13, 1],\n- \"a01121_source.html\": [4, 0, 0, 8, 13],\n- \"a01124.html\": [4, 0, 0, 8, 40],\n- \"a01124.html#a0ceb9e5a5e864b96c529db67f55a873b\": [4, 0, 0, 8, 40, 1],\n- \"a01124.html#afc19854e0bfc1acadb00ff00a043cc17\": [4, 0, 0, 8, 40, 2],\n- \"a01124_source.html\": [4, 0, 0, 8, 40],\n- \"a01127.html\": [4, 0, 0, 8, 29],\n- \"a01127_source.html\": [4, 0, 0, 8, 29],\n- \"a01130.html\": [4, 0, 0, 8, 57],\n- \"a01130_source.html\": [4, 0, 0, 8, 57],\n- \"a01133.html\": [4, 0, 0, 8, 39],\n- \"a01136.html\": [4, 0, 0, 8, 38],\n- \"a01136_source.html\": [4, 0, 0, 8, 38],\n- \"a01139.html\": [4, 0, 0, 8, 23],\n- \"a01142.html\": [4, 0, 0, 8, 10],\n- \"a01142.html#a701d0cd12b81a725f7f9cd2432fe9e2a\": [4, 0, 0, 8, 10, 0],\n- \"a01142_source.html\": [4, 0, 0, 8, 10],\n- \"a01145.html\": [4, 0, 0, 8, 35],\n- \"a01148.html\": [4, 0, 0, 8, 43],\n- \"a01151_source.html\": [4, 0, 0, 8, 7],\n- \"a01154.html\": [4, 0, 0, 8, 46],\n- \"a01154_source.html\": [4, 0, 0, 8, 46],\n- \"a01160.html\": [4, 0, 0, 8, 26],\n- \"a01160.html#a2b0857edd76f8d63eeee0ce9944e28d4\": [4, 0, 0, 8, 26, 1],\n- \"a01160_source.html\": [4, 0, 0, 8, 26],\n- \"a01163.html\": [4, 0, 0, 8, 24],\n- \"a01163_source.html\": [4, 0, 0, 8, 24],\n- \"a01166.html\": [4, 0, 0, 8, 48],\n- \"a01166_source.html\": [4, 0, 0, 8, 48],\n- \"a01169.html\": [4, 0, 0, 8, 30],\n- \"a01169_source.html\": [4, 0, 0, 8, 30],\n- \"a01172.html\": [4, 0, 0, 8, 27],\n- \"a01184.html\": [4, 0, 0, 10, 0],\n- \"a01184_source.html\": [4, 0, 0, 10, 0],\n- \"a01187.html\": [4, 0, 0, 10, 11],\n- \"a01187_source.html\": [4, 0, 0, 10, 11],\n- \"a01193.html\": [4, 0, 0, 10, 4],\n- \"a01193_source.html\": [4, 0, 0, 10, 4],\n- \"a01196.html\": [4, 0, 0, 10, 10],\n- \"a01196_source.html\": [4, 0, 0, 10, 10],\n- \"a01199.html\": [4, 0, 0, 10, 6],\n- \"a01199.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\": [4, 0, 0, 10, 6, 8],\n- \"a01199.html#a4a2433812cf34ee359e3ec99f4f5bcc4\": [4, 0, 0, 10, 6, 9],\n- \"a01199.html#a710ec0322f4a2c0883841b58516b7a6a\": [4, 0, 0, 10, 6, 7],\n- \"a01199.html#aaff07ef70e6161c4d1d2bd7546ff91e6\": [4, 0, 0, 10, 6, 3],\n- \"a01199.html#aba34ed4a103d9057536ee5cac27cfdef\": [4, 0, 0, 10, 6, 4],\n- \"a01199.html#acab0207730cf78822bdf274b50739d31\": [4, 0, 0, 10, 6, 1],\n- \"a01199.html#ad632ed56581bf174eef379bbe272a06a\": [4, 0, 0, 10, 6, 2],\n- \"a01199.html#ad8b55993353cbab0fde06b872783fe92\": [4, 0, 0, 10, 6, 5],\n- \"a01199.html#ade6eca65dc0168a65f641961ca97924c\": [4, 0, 0, 10, 6, 6],\n- \"a01199_source.html\": [4, 0, 0, 10, 6],\n- \"a01202.html\": [4, 0, 0, 10, 13],\n- \"a01202_source.html\": [4, 0, 0, 10, 13],\n- \"a01205.html\": [4, 0, 0, 10, 3],\n- \"a01208.html\": [4, 0, 0, 10, 9],\n- \"a01211.html\": [4, 0, 0, 10, 1],\n- \"a01211.html#ac50218675ff25e1e9202d335ecfa6b3a\": [4, 0, 0, 10, 1, 0],\n- \"a01214.html\": [4, 0, 0, 10, 12],\n- \"a01214_source.html\": [4, 0, 0, 10, 12],\n+ \"a01115.html\": [4, 0, 0, 8, 20],\n+ \"a01115_source.html\": [4, 0, 0, 8, 20],\n+ \"a01118.html\": [4, 0, 0, 8, 58],\n+ \"a01118.html#ad5602eb85d05df6cba60e47eebbd3636\": [4, 0, 0, 8, 58, 1],\n+ \"a01118_source.html\": [4, 0, 0, 8, 58],\n+ \"a01121.html\": [4, 0, 0, 8, 50],\n+ \"a01121.html#a3382482454c164c6f5817dcbe6f932b3\": [4, 0, 0, 8, 50, 1],\n+ \"a01121_source.html\": [4, 0, 0, 8, 50],\n+ \"a01124.html\": [4, 0, 0, 8, 27],\n+ \"a01127.html\": [4, 0, 0, 8, 57],\n+ \"a01127_source.html\": [4, 0, 0, 8, 57],\n+ \"a01130.html\": [4, 0, 0, 8, 51],\n+ \"a01133.html\": [4, 0, 0, 8, 2],\n+ \"a01139_source.html\": [4, 0, 0, 8, 41],\n+ \"a01142.html\": [4, 0, 0, 8, 38],\n+ \"a01142_source.html\": [4, 0, 0, 8, 38],\n+ \"a01145.html\": [4, 0, 0, 8, 34],\n+ \"a01145_source.html\": [4, 0, 0, 8, 34],\n+ \"a01148.html\": [4, 0, 0, 8, 11],\n+ \"a01148_source.html\": [4, 0, 0, 8, 11],\n+ \"a01151.html\": [4, 0, 0, 8, 5],\n+ \"a01151.html#a3db519caa1b7e43412c9a7e13acf8329\": [4, 0, 0, 8, 5, 3],\n+ \"a01151.html#a51881c20dd5ecdd129cb993ea8374846\": [4, 0, 0, 8, 5, 2],\n+ \"a01151_source.html\": [4, 0, 0, 8, 5],\n+ \"a01154.html\": [4, 0, 0, 8, 36],\n+ \"a01154_source.html\": [4, 0, 0, 8, 36],\n+ \"a01157.html\": [4, 0, 0, 8, 45],\n+ \"a01160.html\": [4, 0, 0, 8, 4],\n+ \"a01160_source.html\": [4, 0, 0, 8, 4],\n+ \"a01163.html\": [4, 0, 0, 8, 49],\n+ \"a01163.html#a3382482454c164c6f5817dcbe6f932b3\": [4, 0, 0, 8, 49, 0],\n+ \"a01166.html\": [4, 0, 0, 8, 37],\n+ \"a01172.html\": [4, 0, 0, 8, 32],\n+ \"a01172_source.html\": [4, 0, 0, 8, 32],\n+ \"a01184.html\": [4, 0, 0, 10, 4],\n+ \"a01184_source.html\": [4, 0, 0, 10, 4],\n+ \"a01187.html\": [4, 0, 0, 10, 10],\n+ \"a01187_source.html\": [4, 0, 0, 10, 10],\n+ \"a01190.html\": [4, 0, 0, 10, 12],\n+ \"a01190_source.html\": [4, 0, 0, 10, 12],\n+ \"a01193.html\": [4, 0, 0, 10, 13],\n+ \"a01193_source.html\": [4, 0, 0, 10, 13],\n+ \"a01196.html\": [4, 0, 0, 10, 2],\n+ \"a01196.html#ac50218675ff25e1e9202d335ecfa6b3a\": [4, 0, 0, 10, 2, 1],\n+ \"a01196_source.html\": [4, 0, 0, 10, 2],\n+ \"a01199.html\": [4, 0, 0, 10, 1],\n+ \"a01199.html#ac50218675ff25e1e9202d335ecfa6b3a\": [4, 0, 0, 10, 1, 0],\n+ \"a01202.html\": [4, 0, 0, 10, 6],\n+ \"a01202.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\": [4, 0, 0, 10, 6, 8],\n+ \"a01202.html#a4a2433812cf34ee359e3ec99f4f5bcc4\": [4, 0, 0, 10, 6, 9],\n+ \"a01202.html#a710ec0322f4a2c0883841b58516b7a6a\": [4, 0, 0, 10, 6, 7],\n+ \"a01202.html#aaff07ef70e6161c4d1d2bd7546ff91e6\": [4, 0, 0, 10, 6, 3],\n+ \"a01202.html#aba34ed4a103d9057536ee5cac27cfdef\": [4, 0, 0, 10, 6, 4],\n+ \"a01202.html#acab0207730cf78822bdf274b50739d31\": [4, 0, 0, 10, 6, 1],\n+ \"a01202.html#ad632ed56581bf174eef379bbe272a06a\": [4, 0, 0, 10, 6, 2],\n+ \"a01202.html#ad8b55993353cbab0fde06b872783fe92\": [4, 0, 0, 10, 6, 5],\n+ \"a01202.html#ade6eca65dc0168a65f641961ca97924c\": [4, 0, 0, 10, 6, 6],\n+ \"a01202_source.html\": [4, 0, 0, 10, 6],\n+ \"a01205.html\": [4, 0, 0, 10, 14],\n+ \"a01208.html\": [4, 0, 0, 10, 11],\n+ \"a01208_source.html\": [4, 0, 0, 10, 11],\n+ \"a01211.html\": [4, 0, 0, 10, 5],\n+ \"a01211.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\": [4, 0, 0, 10, 5, 6],\n+ \"a01211.html#a4a2433812cf34ee359e3ec99f4f5bcc4\": [4, 0, 0, 10, 5, 7],\n+ \"a01211.html#a710ec0322f4a2c0883841b58516b7a6a\": [4, 0, 0, 10, 5, 5],\n+ \"a01211.html#aaff07ef70e6161c4d1d2bd7546ff91e6\": [4, 0, 0, 10, 5, 1],\n+ \"a01211.html#aba34ed4a103d9057536ee5cac27cfdef\": [4, 0, 0, 10, 5, 2],\n+ \"a01211.html#ad632ed56581bf174eef379bbe272a06a\": [4, 0, 0, 10, 5, 0],\n+ \"a01211.html#ad8b55993353cbab0fde06b872783fe92\": [4, 0, 0, 10, 5, 3],\n+ \"a01211.html#ade6eca65dc0168a65f641961ca97924c\": [4, 0, 0, 10, 5, 4],\n+ \"a01214.html\": [4, 0, 0, 10, 8],\n+ \"a01214.html#a21a02e01a9608ce6cade24c1366b208c\": [4, 0, 0, 10, 8, 4],\n+ \"a01214.html#a9ad7940245bbbf4bf25d1dc4690b0108\": [4, 0, 0, 10, 8, 3],\n+ \"a01214_source.html\": [4, 0, 0, 10, 8],\n \"a01217.html\": [4, 0, 0, 10, 7],\n- \"a01220.html\": [4, 0, 0, 10, 5],\n- \"a01220.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\": [4, 0, 0, 10, 5, 6],\n- \"a01220.html#a4a2433812cf34ee359e3ec99f4f5bcc4\": [4, 0, 0, 10, 5, 7],\n- \"a01220.html#a710ec0322f4a2c0883841b58516b7a6a\": [4, 0, 0, 10, 5, 5],\n- \"a01220.html#aaff07ef70e6161c4d1d2bd7546ff91e6\": [4, 0, 0, 10, 5, 1],\n- \"a01220.html#aba34ed4a103d9057536ee5cac27cfdef\": [4, 0, 0, 10, 5, 2],\n- \"a01220.html#ad632ed56581bf174eef379bbe272a06a\": [4, 0, 0, 10, 5, 0],\n- \"a01220.html#ad8b55993353cbab0fde06b872783fe92\": [4, 0, 0, 10, 5, 3],\n- \"a01220.html#ade6eca65dc0168a65f641961ca97924c\": [4, 0, 0, 10, 5, 4],\n \"a01223.html\": [4, 0, 0, 10, 15],\n \"a01223_source.html\": [4, 0, 0, 10, 15],\n- \"a01226.html\": [4, 0, 0, 10, 8],\n- \"a01226.html#a21a02e01a9608ce6cade24c1366b208c\": [4, 0, 0, 10, 8, 4],\n- \"a01226.html#a9ad7940245bbbf4bf25d1dc4690b0108\": [4, 0, 0, 10, 8, 3],\n- \"a01226_source.html\": [4, 0, 0, 10, 8],\n- \"a01229.html\": [4, 0, 0, 10, 14],\n- \"a01232.html\": [4, 0, 0, 10, 2],\n- \"a01232.html#ac50218675ff25e1e9202d335ecfa6b3a\": [4, 0, 0, 10, 2, 1],\n- \"a01232_source.html\": [4, 0, 0, 10, 2],\n- \"a01235_source.html\": [4, 0, 0, 11, 20],\n- \"a01241_source.html\": [4, 0, 0, 11, 38]\n+ \"a01226.html\": [4, 0, 0, 10, 3],\n+ \"a01229.html\": [4, 0, 0, 10, 0],\n+ \"a01229_source.html\": [4, 0, 0, 10, 0],\n+ \"a01232.html\": [4, 0, 0, 10, 9],\n+ \"a01235.html\": [4, 0, 0, 11, 7],\n+ \"a01238.html\": [4, 0, 0, 11, 16]\n };\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/navtreeindex4.js", "source2": "./usr/share/doc/libgtsam-dev/html/navtreeindex4.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,140 +1,140 @@\n var NAVTREEINDEX4 = {\n- \"a01244.html\": [4, 0, 0, 11, 8],\n- \"a01244_source.html\": [4, 0, 0, 11, 8],\n- \"a01247_source.html\": [4, 0, 0, 11, 21],\n- \"a01250.html\": [4, 0, 0, 11, 37],\n- \"a01250_source.html\": [4, 0, 0, 11, 37],\n- \"a01253.html\": [4, 0, 0, 11, 7],\n+ \"a01238_source.html\": [4, 0, 0, 11, 16],\n+ \"a01241.html\": [4, 0, 0, 11, 32],\n+ \"a01241_source.html\": [4, 0, 0, 11, 32],\n+ \"a01244_source.html\": [4, 0, 0, 11, 18],\n+ \"a01250_source.html\": [4, 0, 0, 11, 31],\n+ \"a01253_source.html\": [4, 0, 0, 11, 38],\n \"a01256_source.html\": [4, 0, 0, 11, 29],\n- \"a01259.html\": [4, 0, 0, 11, 6],\n- \"a01259.html#a635ec096b94adc2b05f081cd07eb2c0f\": [4, 0, 0, 11, 6, 6],\n- \"a01259.html#a683ab6a83b5b3e508e734a7089986838\": [4, 0, 0, 11, 6, 12],\n- \"a01259.html#a68bc584d72da3747666ac134a9490f92\": [4, 0, 0, 11, 6, 17],\n- \"a01259.html#a6ab764d13f9aaeafc2dc60763b05ec0e\": [4, 0, 0, 11, 6, 1],\n- \"a01259.html#a6eb4817b97658f00e426b753c52361ed\": [4, 0, 0, 11, 6, 11],\n- \"a01259.html#a6f8d49b13ccc0e007a5e7572286d5854\": [4, 0, 0, 11, 6, 7],\n- \"a01259.html#a71d086efc70f4af31d3c3b00dde4f7c0\": [4, 0, 0, 11, 6, 15],\n- \"a01259.html#a8a2136a163e31faaefe2db498a9b9b43\": [4, 0, 0, 11, 6, 10],\n- \"a01259.html#a8be373f34edc0a9d28b1bfab5dd62ba0\": [4, 0, 0, 11, 6, 2],\n- \"a01259.html#a8be373f34edc0a9d28b1bfab5dd62ba0a37cef4c071c8c4f77f31fa617e91da53\": [4, 0, 0, 11, 6, 2, 1],\n- \"a01259.html#a8be373f34edc0a9d28b1bfab5dd62ba0a406af886b3b4b113dfe666c8ad95e38b\": [4, 0, 0, 11, 6, 2, 0],\n- \"a01259.html#a8be373f34edc0a9d28b1bfab5dd62ba0aacc5d659fca66977c8fe6f341802fae9\": [4, 0, 0, 11, 6, 2, 2],\n- \"a01259.html#a90552b70a2da9c74595cae4b05c2ce18\": [4, 0, 0, 11, 6, 3],\n- \"a01259.html#a90552b70a2da9c74595cae4b05c2ce18a1f8edeb25c58a249789556c686265a4c\": [4, 0, 0, 11, 6, 3, 2],\n- \"a01259.html#a90552b70a2da9c74595cae4b05c2ce18a2f9067b8f5bd2d0dd38c49326a4c070e\": [4, 0, 0, 11, 6, 3, 4],\n- \"a01259.html#a90552b70a2da9c74595cae4b05c2ce18a3790bc2c6f11cd7da84730b33173de5a\": [4, 0, 0, 11, 6, 3, 1],\n- \"a01259.html#a90552b70a2da9c74595cae4b05c2ce18a5450a16f3522214ccdfa23c461e7d05a\": [4, 0, 0, 11, 6, 3, 3],\n- \"a01259.html#a90552b70a2da9c74595cae4b05c2ce18ad0aaa5c51a45cb7c9151aae60a603209\": [4, 0, 0, 11, 6, 3, 0],\n- \"a01259.html#a961e0398bbfc2504c62fdaad70472418\": [4, 0, 0, 11, 6, 13],\n- \"a01259.html#abc8bb9db0893652e8b5e7b47782ec990\": [4, 0, 0, 11, 6, 9],\n- \"a01259.html#abcc5d1ec05ddc954d5de28929acabbdf\": [4, 0, 0, 11, 6, 0],\n- \"a01259.html#abfc0157e4790e3b03dc601d3e86c684d\": [4, 0, 0, 11, 6, 14],\n- \"a01259.html#ac96511703a91071d7b2033976f9739c3\": [4, 0, 0, 11, 6, 8],\n- \"a01259.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\": [4, 0, 0, 11, 6, 16],\n- \"a01259.html#adbe09e573771fd72b08069353d537725\": [4, 0, 0, 11, 6, 4],\n- \"a01259.html#aef971b2c69845e4fcce707306703c7b8\": [4, 0, 0, 11, 6, 5],\n- \"a01259_source.html\": [4, 0, 0, 11, 6],\n- \"a01262.html\": [4, 0, 0, 11, 22],\n- \"a01262_source.html\": [4, 0, 0, 11, 22],\n- \"a01265.html\": [4, 0, 0, 11, 5],\n- \"a01265.html#a635ec096b94adc2b05f081cd07eb2c0f\": [4, 0, 0, 11, 5, 2],\n- \"a01265.html#a68bc584d72da3747666ac134a9490f92\": [4, 0, 0, 11, 5, 10],\n- \"a01265.html#a71d086efc70f4af31d3c3b00dde4f7c0\": [4, 0, 0, 11, 5, 8],\n- \"a01265.html#a79f6cde1c018ea0f4ca3c7fc83123a14\": [4, 0, 0, 11, 5, 3],\n- \"a01265.html#a961e0398bbfc2504c62fdaad70472418\": [4, 0, 0, 11, 5, 6],\n- \"a01265.html#abc8bb9db0893652e8b5e7b47782ec990\": [4, 0, 0, 11, 5, 5],\n- \"a01265.html#abfc0157e4790e3b03dc601d3e86c684d\": [4, 0, 0, 11, 5, 7],\n- \"a01265.html#ac96511703a91071d7b2033976f9739c3\": [4, 0, 0, 11, 5, 4],\n- \"a01265.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\": [4, 0, 0, 11, 5, 9],\n- \"a01265.html#adbe09e573771fd72b08069353d537725\": [4, 0, 0, 11, 5, 0],\n- \"a01265.html#aef971b2c69845e4fcce707306703c7b8\": [4, 0, 0, 11, 5, 1],\n- \"a01268_source.html\": [4, 0, 0, 11, 31],\n- \"a01271.html\": [4, 0, 0, 11, 25],\n- \"a01271_source.html\": [4, 0, 0, 11, 25],\n- \"a01274.html\": [4, 0, 0, 11, 24],\n- \"a01274_source.html\": [4, 0, 0, 11, 24],\n- \"a01277.html\": [4, 0, 0, 11, 35],\n- \"a01277_source.html\": [4, 0, 0, 11, 35],\n- \"a01280.html\": [4, 0, 0, 11, 12],\n- \"a01280.html#aa43e7fd7c2b86873458a91ddafc506e4\": [4, 0, 0, 11, 12, 3],\n- \"a01280_source.html\": [4, 0, 0, 11, 12],\n- \"a01283.html\": [4, 0, 0, 11, 27],\n- \"a01283_source.html\": [4, 0, 0, 11, 27],\n- \"a01286.html\": [4, 0, 0, 11, 30],\n- \"a01286_source.html\": [4, 0, 0, 11, 30],\n- \"a01289_source.html\": [4, 0, 0, 11, 18],\n- \"a01292.html\": [4, 0, 0, 11, 13],\n- \"a01292_source.html\": [4, 0, 0, 11, 13],\n- \"a01295_source.html\": [4, 0, 0, 11, 23],\n- \"a01298.html\": [4, 0, 0, 11, 33],\n- \"a01298.html#ac3d021280c8a8b84903a8ce81f73ea0f\": [4, 0, 0, 11, 33, 1],\n- \"a01298.html#ac3d021280c8a8b84903a8ce81f73ea0fa0836b9ba9572539be631139b0785a200\": [4, 0, 0, 11, 33, 1, 2],\n- \"a01298.html#ac3d021280c8a8b84903a8ce81f73ea0fa7377887fa83ae502adf7f477205c0273\": [4, 0, 0, 11, 33, 1, 0],\n- \"a01298.html#ac3d021280c8a8b84903a8ce81f73ea0fa88da97b27cb213cdf714af781ae76b99\": [4, 0, 0, 11, 33, 1, 1],\n- \"a01298.html#adf2020f3f6087064dde501c99794aac3\": [4, 0, 0, 11, 33, 2],\n- \"a01298.html#adf2020f3f6087064dde501c99794aac3a672276bd72f64f6b462004c89c57297b\": [4, 0, 0, 11, 33, 2, 2],\n- \"a01298.html#adf2020f3f6087064dde501c99794aac3a7a3f02bec869fc563591ecb84ea2eb7a\": [4, 0, 0, 11, 33, 2, 1],\n- \"a01298.html#adf2020f3f6087064dde501c99794aac3a94d642727a23c8b5a1b59b8f74553e80\": [4, 0, 0, 11, 33, 2, 0],\n- \"a01298.html#adf2020f3f6087064dde501c99794aac3aca6b517d49e41094c865c321ddff5b81\": [4, 0, 0, 11, 33, 2, 3],\n- \"a01298_source.html\": [4, 0, 0, 11, 33],\n- \"a01301.html\": [4, 0, 0, 11, 14],\n- \"a01301_source.html\": [4, 0, 0, 11, 14],\n- \"a01304.html\": [4, 0, 0, 11, 16],\n- \"a01304_source.html\": [4, 0, 0, 11, 16],\n- \"a01307.html\": [4, 0, 0, 11, 36],\n- \"a01307_source.html\": [4, 0, 0, 11, 36],\n- \"a01310_source.html\": [4, 0, 0, 11, 9],\n- \"a01316.html\": [4, 0, 0, 11, 32],\n- \"a01316_source.html\": [4, 0, 0, 11, 32],\n- \"a01319.html\": [4, 0, 0, 11, 3],\n- \"a01319_source.html\": [4, 0, 0, 11, 3],\n- \"a01322_source.html\": [4, 0, 0, 11, 17],\n- \"a01325.html\": [4, 0, 0, 11, 11],\n- \"a01325.html#aa43e7fd7c2b86873458a91ddafc506e4\": [4, 0, 0, 11, 11, 0],\n- \"a01328_source.html\": [4, 0, 0, 11, 19],\n- \"a01331.html\": [4, 0, 0, 11, 34],\n- \"a01331_source.html\": [4, 0, 0, 11, 34],\n- \"a01334.html\": [4, 0, 0, 11, 4],\n- \"a01334_source.html\": [4, 0, 0, 11, 4],\n- \"a01337.html\": [4, 0, 0, 11, 0],\n- \"a01337_source.html\": [4, 0, 0, 11, 0],\n- \"a01340.html\": [4, 0, 0, 11, 15],\n- \"a01343.html\": [4, 0, 0, 12, 15],\n- \"a01343.html#ad78d0a5ba773ceac7ff253525032a15e\": [4, 0, 0, 12, 15, 0],\n- \"a01343_source.html\": [4, 0, 0, 12, 15],\n- \"a01346.html\": [4, 0, 0, 12, 2],\n- \"a01346_source.html\": [4, 0, 0, 12, 2],\n- \"a01349.html\": [4, 0, 0, 12, 6],\n- \"a01349_source.html\": [4, 0, 0, 12, 6],\n- \"a01352.html\": [4, 0, 0, 12, 10],\n- \"a01355.html\": [4, 0, 0, 12, 8],\n- \"a01355.html#a659f20993995258b1405737e375efd10\": [4, 0, 0, 12, 8, 0],\n- \"a01358.html\": [4, 0, 0, 12, 3],\n- \"a01361.html\": [4, 0, 0, 12, 13],\n- \"a01361_source.html\": [4, 0, 0, 12, 13],\n- \"a01367.html\": [4, 0, 0, 12, 4],\n- \"a01367_source.html\": [4, 0, 0, 12, 4],\n- \"a01370.html\": [4, 0, 0, 12, 9],\n- \"a01370.html#a659f20993995258b1405737e375efd10\": [4, 0, 0, 12, 9, 2],\n- \"a01370_source.html\": [4, 0, 0, 12, 9],\n- \"a01373.html\": [4, 0, 0, 12, 14],\n- \"a01376.html\": [4, 0, 0, 12, 7],\n- \"a01376.html#ae394348e1a503834f713405afa9afad8\": [4, 0, 0, 12, 7, 0],\n- \"a01376_source.html\": [4, 0, 0, 12, 7],\n- \"a01379.html\": [4, 0, 0, 12, 12],\n- \"a01382.html\": [4, 0, 0, 12, 1],\n- \"a01382_source.html\": [4, 0, 0, 12, 1],\n- \"a01385.html\": [4, 0, 0, 12, 11],\n- \"a01385_source.html\": [4, 0, 0, 12, 11],\n- \"a01388.html\": [4, 0, 0, 12, 5],\n- \"a01391.html\": [4, 0, 0, 12, 0],\n+ \"a01259_source.html\": [4, 0, 0, 11, 17],\n+ \"a01262.html\": [4, 0, 0, 11, 5],\n+ \"a01262.html#a635ec096b94adc2b05f081cd07eb2c0f\": [4, 0, 0, 11, 5, 2],\n+ \"a01262.html#a68bc584d72da3747666ac134a9490f92\": [4, 0, 0, 11, 5, 10],\n+ \"a01262.html#a71d086efc70f4af31d3c3b00dde4f7c0\": [4, 0, 0, 11, 5, 8],\n+ \"a01262.html#a79f6cde1c018ea0f4ca3c7fc83123a14\": [4, 0, 0, 11, 5, 3],\n+ \"a01262.html#a961e0398bbfc2504c62fdaad70472418\": [4, 0, 0, 11, 5, 6],\n+ \"a01262.html#abc8bb9db0893652e8b5e7b47782ec990\": [4, 0, 0, 11, 5, 5],\n+ \"a01262.html#abfc0157e4790e3b03dc601d3e86c684d\": [4, 0, 0, 11, 5, 7],\n+ \"a01262.html#ac96511703a91071d7b2033976f9739c3\": [4, 0, 0, 11, 5, 4],\n+ \"a01262.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\": [4, 0, 0, 11, 5, 9],\n+ \"a01262.html#adbe09e573771fd72b08069353d537725\": [4, 0, 0, 11, 5, 0],\n+ \"a01262.html#aef971b2c69845e4fcce707306703c7b8\": [4, 0, 0, 11, 5, 1],\n+ \"a01265_source.html\": [4, 0, 0, 11, 19],\n+ \"a01268_source.html\": [4, 0, 0, 11, 9],\n+ \"a01271.html\": [4, 0, 0, 11, 34],\n+ \"a01271_source.html\": [4, 0, 0, 11, 34],\n+ \"a01274.html\": [4, 0, 0, 11, 0],\n+ \"a01274_source.html\": [4, 0, 0, 11, 0],\n+ \"a01277.html\": [4, 0, 0, 11, 22],\n+ \"a01277_source.html\": [4, 0, 0, 11, 22],\n+ \"a01280.html\": [4, 0, 0, 11, 14],\n+ \"a01280_source.html\": [4, 0, 0, 11, 14],\n+ \"a01283.html\": [4, 0, 0, 11, 6],\n+ \"a01283.html#a635ec096b94adc2b05f081cd07eb2c0f\": [4, 0, 0, 11, 6, 6],\n+ \"a01283.html#a683ab6a83b5b3e508e734a7089986838\": [4, 0, 0, 11, 6, 12],\n+ \"a01283.html#a68bc584d72da3747666ac134a9490f92\": [4, 0, 0, 11, 6, 17],\n+ \"a01283.html#a6ab764d13f9aaeafc2dc60763b05ec0e\": [4, 0, 0, 11, 6, 1],\n+ \"a01283.html#a6eb4817b97658f00e426b753c52361ed\": [4, 0, 0, 11, 6, 11],\n+ \"a01283.html#a6f8d49b13ccc0e007a5e7572286d5854\": [4, 0, 0, 11, 6, 7],\n+ \"a01283.html#a71d086efc70f4af31d3c3b00dde4f7c0\": [4, 0, 0, 11, 6, 15],\n+ \"a01283.html#a8a2136a163e31faaefe2db498a9b9b43\": [4, 0, 0, 11, 6, 10],\n+ \"a01283.html#a8be373f34edc0a9d28b1bfab5dd62ba0\": [4, 0, 0, 11, 6, 2],\n+ \"a01283.html#a8be373f34edc0a9d28b1bfab5dd62ba0a37cef4c071c8c4f77f31fa617e91da53\": [4, 0, 0, 11, 6, 2, 1],\n+ \"a01283.html#a8be373f34edc0a9d28b1bfab5dd62ba0a406af886b3b4b113dfe666c8ad95e38b\": [4, 0, 0, 11, 6, 2, 0],\n+ \"a01283.html#a8be373f34edc0a9d28b1bfab5dd62ba0aacc5d659fca66977c8fe6f341802fae9\": [4, 0, 0, 11, 6, 2, 2],\n+ \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18\": [4, 0, 0, 11, 6, 3],\n+ \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18a1f8edeb25c58a249789556c686265a4c\": [4, 0, 0, 11, 6, 3, 2],\n+ \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18a2f9067b8f5bd2d0dd38c49326a4c070e\": [4, 0, 0, 11, 6, 3, 4],\n+ \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18a3790bc2c6f11cd7da84730b33173de5a\": [4, 0, 0, 11, 6, 3, 1],\n+ \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18a5450a16f3522214ccdfa23c461e7d05a\": [4, 0, 0, 11, 6, 3, 3],\n+ \"a01283.html#a90552b70a2da9c74595cae4b05c2ce18ad0aaa5c51a45cb7c9151aae60a603209\": [4, 0, 0, 11, 6, 3, 0],\n+ \"a01283.html#a961e0398bbfc2504c62fdaad70472418\": [4, 0, 0, 11, 6, 13],\n+ \"a01283.html#abc8bb9db0893652e8b5e7b47782ec990\": [4, 0, 0, 11, 6, 9],\n+ \"a01283.html#abcc5d1ec05ddc954d5de28929acabbdf\": [4, 0, 0, 11, 6, 0],\n+ \"a01283.html#abfc0157e4790e3b03dc601d3e86c684d\": [4, 0, 0, 11, 6, 14],\n+ \"a01283.html#ac96511703a91071d7b2033976f9739c3\": [4, 0, 0, 11, 6, 8],\n+ \"a01283.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\": [4, 0, 0, 11, 6, 16],\n+ \"a01283.html#adbe09e573771fd72b08069353d537725\": [4, 0, 0, 11, 6, 4],\n+ \"a01283.html#aef971b2c69845e4fcce707306703c7b8\": [4, 0, 0, 11, 6, 5],\n+ \"a01283_source.html\": [4, 0, 0, 11, 6],\n+ \"a01286_source.html\": [4, 0, 0, 11, 21],\n+ \"a01289.html\": [4, 0, 0, 11, 35],\n+ \"a01289_source.html\": [4, 0, 0, 11, 35],\n+ \"a01292.html\": [4, 0, 0, 11, 36],\n+ \"a01292_source.html\": [4, 0, 0, 11, 36],\n+ \"a01295.html\": [4, 0, 0, 11, 33],\n+ \"a01295.html#ac3d021280c8a8b84903a8ce81f73ea0f\": [4, 0, 0, 11, 33, 1],\n+ \"a01295.html#ac3d021280c8a8b84903a8ce81f73ea0fa0836b9ba9572539be631139b0785a200\": [4, 0, 0, 11, 33, 1, 2],\n+ \"a01295.html#ac3d021280c8a8b84903a8ce81f73ea0fa7377887fa83ae502adf7f477205c0273\": [4, 0, 0, 11, 33, 1, 0],\n+ \"a01295.html#ac3d021280c8a8b84903a8ce81f73ea0fa88da97b27cb213cdf714af781ae76b99\": [4, 0, 0, 11, 33, 1, 1],\n+ \"a01295.html#adf2020f3f6087064dde501c99794aac3\": [4, 0, 0, 11, 33, 2],\n+ \"a01295.html#adf2020f3f6087064dde501c99794aac3a672276bd72f64f6b462004c89c57297b\": [4, 0, 0, 11, 33, 2, 2],\n+ \"a01295.html#adf2020f3f6087064dde501c99794aac3a7a3f02bec869fc563591ecb84ea2eb7a\": [4, 0, 0, 11, 33, 2, 1],\n+ \"a01295.html#adf2020f3f6087064dde501c99794aac3a94d642727a23c8b5a1b59b8f74553e80\": [4, 0, 0, 11, 33, 2, 0],\n+ \"a01295.html#adf2020f3f6087064dde501c99794aac3aca6b517d49e41094c865c321ddff5b81\": [4, 0, 0, 11, 33, 2, 3],\n+ \"a01295_source.html\": [4, 0, 0, 11, 33],\n+ \"a01298.html\": [4, 0, 0, 11, 8],\n+ \"a01298_source.html\": [4, 0, 0, 11, 8],\n+ \"a01301.html\": [4, 0, 0, 11, 25],\n+ \"a01301_source.html\": [4, 0, 0, 11, 25],\n+ \"a01304.html\": [4, 0, 0, 11, 15],\n+ \"a01307.html\": [4, 0, 0, 11, 24],\n+ \"a01307_source.html\": [4, 0, 0, 11, 24],\n+ \"a01313_source.html\": [4, 0, 0, 11, 23],\n+ \"a01316.html\": [4, 0, 0, 11, 37],\n+ \"a01316_source.html\": [4, 0, 0, 11, 37],\n+ \"a01319.html\": [4, 0, 0, 11, 11],\n+ \"a01319.html#aa43e7fd7c2b86873458a91ddafc506e4\": [4, 0, 0, 11, 11, 0],\n+ \"a01322.html\": [4, 0, 0, 11, 3],\n+ \"a01322_source.html\": [4, 0, 0, 11, 3],\n+ \"a01325.html\": [4, 0, 0, 11, 12],\n+ \"a01325.html#aa43e7fd7c2b86873458a91ddafc506e4\": [4, 0, 0, 11, 12, 3],\n+ \"a01325_source.html\": [4, 0, 0, 11, 12],\n+ \"a01328.html\": [4, 0, 0, 11, 30],\n+ \"a01328_source.html\": [4, 0, 0, 11, 30],\n+ \"a01331.html\": [4, 0, 0, 11, 4],\n+ \"a01331_source.html\": [4, 0, 0, 11, 4],\n+ \"a01334.html\": [4, 0, 0, 11, 13],\n+ \"a01334_source.html\": [4, 0, 0, 11, 13],\n+ \"a01337.html\": [4, 0, 0, 11, 27],\n+ \"a01337_source.html\": [4, 0, 0, 11, 27],\n+ \"a01340_source.html\": [4, 0, 0, 11, 20],\n+ \"a01343.html\": [4, 0, 0, 12, 10],\n+ \"a01346.html\": [4, 0, 0, 12, 12],\n+ \"a01349.html\": [4, 0, 0, 12, 5],\n+ \"a01355.html\": [4, 0, 0, 12, 3],\n+ \"a01358.html\": [4, 0, 0, 12, 13],\n+ \"a01358_source.html\": [4, 0, 0, 12, 13],\n+ \"a01361.html\": [4, 0, 0, 12, 7],\n+ \"a01361.html#ae394348e1a503834f713405afa9afad8\": [4, 0, 0, 12, 7, 0],\n+ \"a01361_source.html\": [4, 0, 0, 12, 7],\n+ \"a01364.html\": [4, 0, 0, 12, 2],\n+ \"a01364_source.html\": [4, 0, 0, 12, 2],\n+ \"a01367.html\": [4, 0, 0, 12, 11],\n+ \"a01367_source.html\": [4, 0, 0, 12, 11],\n+ \"a01370.html\": [4, 0, 0, 12, 4],\n+ \"a01370_source.html\": [4, 0, 0, 12, 4],\n+ \"a01373.html\": [4, 0, 0, 12, 1],\n+ \"a01373_source.html\": [4, 0, 0, 12, 1],\n+ \"a01376.html\": [4, 0, 0, 12, 8],\n+ \"a01376.html#a659f20993995258b1405737e375efd10\": [4, 0, 0, 12, 8, 0],\n+ \"a01379.html\": [4, 0, 0, 12, 9],\n+ \"a01379.html#a659f20993995258b1405737e375efd10\": [4, 0, 0, 12, 9, 2],\n+ \"a01379_source.html\": [4, 0, 0, 12, 9],\n+ \"a01382.html\": [4, 0, 0, 12, 15],\n+ \"a01382.html#ad78d0a5ba773ceac7ff253525032a15e\": [4, 0, 0, 12, 15, 0],\n+ \"a01382_source.html\": [4, 0, 0, 12, 15],\n+ \"a01385.html\": [4, 0, 0, 12, 0],\n+ \"a01388.html\": [4, 0, 0, 12, 6],\n+ \"a01388_source.html\": [4, 0, 0, 12, 6],\n+ \"a01391.html\": [4, 0, 0, 12, 14],\n+ \"a01394.html\": [4, 0, 0, 14],\n \"a01397.html\": [4, 0, 0, 15],\n \"a01397_source.html\": [4, 0, 0, 15],\n- \"a01403.html\": [4, 0, 0, 14],\n \"a01409.html\": [1],\n \"a01428.html#a007080ca4741cc3d3d6a209b0ae3fe61\": [2, 0, 0, 839],\n \"a01428.html#a045b43784acac77531813c4ab6c4d281\": [2, 0, 0, 732],\n \"a01428.html#a08641f0f7145716bba9159dd95099a44\": [2, 0, 0, 627],\n \"a01428.html#a09610ec69a8b3f3a00399bb378eda9cf\": [2, 0, 0, 653],\n \"a01428.html#a09f2bbdb9f9d633542362dbe8d79f9ab\": [2, 0, 0, 828],\n \"a01428.html#a0a386184e9ed9cc4ec844d48d91ba759\": [2, 0, 0, 642],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/navtreeindex5.js", "source2": "./usr/share/doc/libgtsam-dev/html/navtreeindex5.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -221,32 +221,32 @@\n \"a01434.html#afd7410807789da9ad91d6630063be36f\": [2, 0, 0, 2, 3],\n \"a01449.html\": [2, 0, 0, 1],\n \"a01450.html\": [2, 0, 0, 1, 0],\n \"a01452.html\": [2, 0, 0, 0],\n \"a01452.html#ae7a6582902c6daf9f20f2f7e466c60d8\": [2, 0, 0, 0, 1],\n \"a02276.html\": [3, 0, 1, 380],\n \"a02276.html\": [2, 0, 0, 378],\n- \"a02292.html\": [3, 0, 1, 190],\n \"a02292.html\": [2, 0, 0, 188],\n+ \"a02292.html\": [3, 0, 1, 190],\n \"a02304.html\": [3, 0, 1, 2, 7],\n \"a02308.html\": [3, 0, 1, 2, 8],\n \"a02324.html\": [2, 0, 0, 159],\n \"a02324.html\": [3, 0, 1, 161],\n \"a02324.html#a139a63931a8e8afab4d67cb5bc326659\": [2, 0, 0, 159, 3],\n \"a02324.html#a139a63931a8e8afab4d67cb5bc326659\": [3, 0, 1, 161, 3],\n- \"a02324.html#a13de4f83b7b5305a7be4ee1136dcd201\": [2, 0, 0, 159, 15],\n \"a02324.html#a13de4f83b7b5305a7be4ee1136dcd201\": [3, 0, 1, 161, 15],\n- \"a02324.html#a1e837adf9acfec8a734324b76a9266be\": [2, 0, 0, 159, 14],\n+ \"a02324.html#a13de4f83b7b5305a7be4ee1136dcd201\": [2, 0, 0, 159, 15],\n \"a02324.html#a1e837adf9acfec8a734324b76a9266be\": [3, 0, 1, 161, 14],\n- \"a02324.html#a541ab79b139a7177b1a561ad199f9751\": [2, 0, 0, 159, 11],\n+ \"a02324.html#a1e837adf9acfec8a734324b76a9266be\": [2, 0, 0, 159, 14],\n \"a02324.html#a541ab79b139a7177b1a561ad199f9751\": [3, 0, 1, 161, 11],\n- \"a02324.html#a5a975666c504df56c7c633401e07a0c7\": [2, 0, 0, 159, 12],\n+ \"a02324.html#a541ab79b139a7177b1a561ad199f9751\": [2, 0, 0, 159, 11],\n \"a02324.html#a5a975666c504df56c7c633401e07a0c7\": [3, 0, 1, 161, 12],\n+ \"a02324.html#a5a975666c504df56c7c633401e07a0c7\": [2, 0, 0, 159, 12],\n \"a02324.html#a60ddebd2ce398b9697a0161274ae91cc\": [3, 0, 1, 161, 6],\n \"a02324.html#a60ddebd2ce398b9697a0161274ae91cc\": [2, 0, 0, 159, 6],\n \"a02324.html#a69007ce84df439ad16eefdd23e55580e\": [3, 0, 1, 161, 5],\n \"a02324.html#a69007ce84df439ad16eefdd23e55580e\": [2, 0, 0, 159, 5],\n \"a02324.html#a8bf7ebb7a0a758cebd90d38663f88f89\": [2, 0, 0, 159, 0],\n \"a02324.html#a8bf7ebb7a0a758cebd90d38663f88f89\": [3, 0, 1, 161, 0],\n- \"a02324.html#a93ec4963773f9cfcfdc34b437b0274b1\": [2, 0, 0, 159, 4],\n- \"a02324.html#a93ec4963773f9cfcfdc34b437b0274b1\": [3, 0, 1, 161, 4]\n+ \"a02324.html#a93ec4963773f9cfcfdc34b437b0274b1\": [3, 0, 1, 161, 4],\n+ \"a02324.html#a93ec4963773f9cfcfdc34b437b0274b1\": [2, 0, 0, 159, 4]\n };\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/navtreeindex6.js", "source2": "./usr/share/doc/libgtsam-dev/html/navtreeindex6.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,42 +1,42 @@\n var NAVTREEINDEX6 = {\n \"a02324.html#ab8454e55f25f7f475f8d31001625a8e9\": [3, 0, 1, 161, 18],\n \"a02324.html#ab8454e55f25f7f475f8d31001625a8e9\": [2, 0, 0, 159, 18],\n \"a02324.html#ac4562bce75070c4d3995836a25f3242d\": [3, 0, 1, 161, 10],\n \"a02324.html#ac4562bce75070c4d3995836a25f3242d\": [2, 0, 0, 159, 10],\n- \"a02324.html#ac47a680ad0e320fa896e740fe662ad4d\": [3, 0, 1, 161, 8],\n \"a02324.html#ac47a680ad0e320fa896e740fe662ad4d\": [2, 0, 0, 159, 8],\n- \"a02324.html#ac98d07dd8f7b70e16ccb9a01abf56b9c\": [2, 0, 0, 159, 17],\n+ \"a02324.html#ac47a680ad0e320fa896e740fe662ad4d\": [3, 0, 1, 161, 8],\n \"a02324.html#ac98d07dd8f7b70e16ccb9a01abf56b9c\": [3, 0, 1, 161, 17],\n- \"a02324.html#ad352f894df0e4ede3b39e45ffa0cb98d\": [3, 0, 1, 161, 7],\n+ \"a02324.html#ac98d07dd8f7b70e16ccb9a01abf56b9c\": [2, 0, 0, 159, 17],\n \"a02324.html#ad352f894df0e4ede3b39e45ffa0cb98d\": [2, 0, 0, 159, 7],\n+ \"a02324.html#ad352f894df0e4ede3b39e45ffa0cb98d\": [3, 0, 1, 161, 7],\n \"a02324.html#adb4eb10667d811f19db1e32992785c0a\": [3, 0, 1, 161, 16],\n \"a02324.html#adb4eb10667d811f19db1e32992785c0a\": [2, 0, 0, 159, 16],\n- \"a02324.html#addd810632994517d363f0baa629fcf66\": [3, 0, 1, 161, 1],\n \"a02324.html#addd810632994517d363f0baa629fcf66\": [2, 0, 0, 159, 1],\n+ \"a02324.html#addd810632994517d363f0baa629fcf66\": [3, 0, 1, 161, 1],\n \"a02324.html#ae54ab9a7abe2a7d48bc2756aa545ac78\": [3, 0, 1, 161, 13],\n \"a02324.html#ae54ab9a7abe2a7d48bc2756aa545ac78\": [2, 0, 0, 159, 13],\n- \"a02324.html#aec0e38fe2f3bab85d4e18bb7509ce152\": [3, 0, 1, 161, 9],\n \"a02324.html#aec0e38fe2f3bab85d4e18bb7509ce152\": [2, 0, 0, 159, 9],\n+ \"a02324.html#aec0e38fe2f3bab85d4e18bb7509ce152\": [3, 0, 1, 161, 9],\n \"a02324.html#af542d73ada53c5e0f80f89d0fe2a937c\": [3, 0, 1, 161, 2],\n \"a02324.html#af542d73ada53c5e0f80f89d0fe2a937c\": [2, 0, 0, 159, 2],\n- \"a02328.html\": [3, 0, 1, 461],\n \"a02328.html\": [2, 0, 0, 459],\n- \"a02332.html\": [2, 0, 0, 165],\n+ \"a02328.html\": [3, 0, 1, 461],\n \"a02332.html\": [3, 0, 1, 167],\n+ \"a02332.html\": [2, 0, 0, 165],\n \"a02336.html\": [2, 0, 0, 244],\n \"a02336.html\": [3, 0, 1, 246],\n- \"a02340.html\": [3, 0, 1, 9],\n \"a02340.html\": [2, 0, 0, 7],\n- \"a02344.html\": [3, 0, 1, 206],\n+ \"a02340.html\": [3, 0, 1, 9],\n \"a02344.html\": [2, 0, 0, 204],\n+ \"a02344.html\": [3, 0, 1, 206],\n \"a02348.html\": [3, 0, 1, 78],\n \"a02348.html\": [2, 0, 0, 76],\n- \"a02348.html#acfac23871b8e9ba54fdf2990e8fbbbeb\": [3, 0, 1, 78, 0],\n \"a02348.html#acfac23871b8e9ba54fdf2990e8fbbbeb\": [2, 0, 0, 76, 0],\n+ \"a02348.html#acfac23871b8e9ba54fdf2990e8fbbbeb\": [3, 0, 1, 78, 0],\n \"a02352.html\": [3, 0, 1, 427],\n \"a02352.html\": [2, 0, 0, 425],\n \"a02356.html\": [2, 0, 0, 77],\n \"a02356.html\": [3, 0, 1, 79],\n \"a02356.html#a920a249b3e2bf675eb9ae96ac25887b5\": [2, 0, 0, 77, 0],\n \"a02356.html#a920a249b3e2bf675eb9ae96ac25887b5\": [3, 0, 1, 79, 0],\n \"a02360.html\": [3, 0, 1, 428],\n@@ -45,154 +45,154 @@\n \"a02364.html\": [2, 0, 0, 225],\n \"a02364.html#a5380bfede1eb39fa9473824009a747a7\": [3, 0, 1, 227, 2],\n \"a02364.html#a5380bfede1eb39fa9473824009a747a7\": [2, 0, 0, 225, 2],\n \"a02364.html#a6e41bdf1904caef72ea3f014a0ddd802\": [3, 0, 1, 227, 1],\n \"a02364.html#a6e41bdf1904caef72ea3f014a0ddd802\": [2, 0, 0, 225, 1],\n \"a02364.html#a7c6ad50bc991512d6cf712ab9b0c28c1\": [3, 0, 1, 227, 3],\n \"a02364.html#a7c6ad50bc991512d6cf712ab9b0c28c1\": [2, 0, 0, 225, 3],\n- \"a02364.html#a9a8ba0a0f7442929df460d79292134aa\": [2, 0, 0, 225, 4],\n \"a02364.html#a9a8ba0a0f7442929df460d79292134aa\": [3, 0, 1, 227, 4],\n+ \"a02364.html#a9a8ba0a0f7442929df460d79292134aa\": [2, 0, 0, 225, 4],\n \"a02364.html#aa23724169652cc5d3eddd61bdb5863a8\": [3, 0, 1, 227, 5],\n \"a02364.html#aa23724169652cc5d3eddd61bdb5863a8\": [2, 0, 0, 225, 5],\n- \"a02364.html#abf5136443b24362863f0ad7473168641\": [2, 0, 0, 225, 7],\n \"a02364.html#abf5136443b24362863f0ad7473168641\": [3, 0, 1, 227, 7],\n+ \"a02364.html#abf5136443b24362863f0ad7473168641\": [2, 0, 0, 225, 7],\n \"a02364.html#adf52076de7615c335b4574f577a22b77\": [2, 0, 0, 225, 6],\n \"a02364.html#adf52076de7615c335b4574f577a22b77\": [3, 0, 1, 227, 6],\n- \"a02364.html#aee395d766c6c8afb27a9bece5c42400e\": [2, 0, 0, 225, 0],\n \"a02364.html#aee395d766c6c8afb27a9bece5c42400e\": [3, 0, 1, 227, 0],\n+ \"a02364.html#aee395d766c6c8afb27a9bece5c42400e\": [2, 0, 0, 225, 0],\n \"a02368.html\": [3, 0, 1, 226],\n \"a02368.html\": [2, 0, 0, 224],\n \"a02372.html\": [3, 0, 1, 2, 20],\n \"a02376.html\": [3, 0, 1, 2, 19],\n- \"a02380.html\": [3, 0, 1, 207],\n \"a02380.html\": [2, 0, 0, 205],\n- \"a02384.html\": [3, 0, 1, 541],\n+ \"a02380.html\": [3, 0, 1, 207],\n \"a02384.html\": [2, 0, 0, 539],\n+ \"a02384.html\": [3, 0, 1, 541],\n \"a02388.html\": [3, 0, 1, 238],\n \"a02388.html\": [2, 0, 0, 236],\n \"a02392.html\": [3, 0, 1, 2, 17],\n \"a02396.html\": [3, 0, 1, 2, 10],\n \"a02400.html\": [3, 0, 1, 2, 11],\n \"a02404.html\": [3, 0, 1, 2, 22],\n \"a02408.html\": [3, 0, 1, 2, 21],\n- \"a02412.html\": [2, 0, 0, 132],\n \"a02412.html\": [3, 0, 1, 134],\n+ \"a02412.html\": [2, 0, 0, 132],\n \"a02416.html\": [3, 0, 1, 315],\n \"a02416.html\": [2, 0, 0, 313],\n \"a02420.html\": [3, 0, 1, 316],\n \"a02420.html\": [2, 0, 0, 314],\n \"a02424.html\": [3, 0, 1, 317],\n \"a02424.html\": [2, 0, 0, 315],\n- \"a02428.html\": [3, 0, 1, 318],\n \"a02428.html\": [2, 0, 0, 316],\n+ \"a02428.html\": [3, 0, 1, 318],\n \"a02432.html\": [3, 0, 1, 247],\n \"a02432.html\": [2, 0, 0, 245],\n- \"a02432.html#a45be31afb639bbb371651691d57818fe\": [3, 0, 1, 247, 0],\n \"a02432.html#a45be31afb639bbb371651691d57818fe\": [2, 0, 0, 245, 0],\n- \"a02436.html\": [2, 0, 0, 246],\n+ \"a02432.html#a45be31afb639bbb371651691d57818fe\": [3, 0, 1, 247, 0],\n \"a02436.html\": [3, 0, 1, 248],\n+ \"a02436.html\": [2, 0, 0, 246],\n \"a02436.html#a8d632e9f7d98ecdcfb72a67ecfb4f103\": [3, 0, 1, 248, 1],\n \"a02436.html#a8d632e9f7d98ecdcfb72a67ecfb4f103\": [2, 0, 0, 246, 1],\n \"a02436.html#af22fec3bfb7858ad0eb9bfe19bf1329e\": [3, 0, 1, 248, 0],\n \"a02436.html#af22fec3bfb7858ad0eb9bfe19bf1329e\": [2, 0, 0, 246, 0],\n \"a02440.html\": [3, 0, 1, 2, 9],\n- \"a02444.html\": [3, 0, 1, 141],\n \"a02444.html\": [2, 0, 0, 139],\n+ \"a02444.html\": [3, 0, 1, 141],\n \"a02448.html\": [3, 0, 1, 264],\n \"a02448.html\": [2, 0, 0, 262],\n- \"a02448.html#a15fd73e523755b78f5ee6c994b0d584d\": [2, 0, 0, 262, 8],\n \"a02448.html#a15fd73e523755b78f5ee6c994b0d584d\": [3, 0, 1, 264, 8],\n+ \"a02448.html#a15fd73e523755b78f5ee6c994b0d584d\": [2, 0, 0, 262, 8],\n \"a02448.html#a2f2e381c633b5a8125ceaea77f2f3c51\": [2, 0, 0, 262, 7],\n \"a02448.html#a2f2e381c633b5a8125ceaea77f2f3c51\": [3, 0, 1, 264, 7],\n \"a02448.html#a51b212c26f1b568bfedceadad052f3ad\": [2, 0, 0, 262, 4],\n \"a02448.html#a51b212c26f1b568bfedceadad052f3ad\": [3, 0, 1, 264, 4],\n- \"a02448.html#a556d3b411e9d1387ede5dd6ad798f639\": [3, 0, 1, 264, 11],\n \"a02448.html#a556d3b411e9d1387ede5dd6ad798f639\": [2, 0, 0, 262, 11],\n- \"a02448.html#a59115dc58b27a4d622d06f1a43deebe9\": [3, 0, 1, 264, 1],\n+ \"a02448.html#a556d3b411e9d1387ede5dd6ad798f639\": [3, 0, 1, 264, 11],\n \"a02448.html#a59115dc58b27a4d622d06f1a43deebe9\": [2, 0, 0, 262, 1],\n+ \"a02448.html#a59115dc58b27a4d622d06f1a43deebe9\": [3, 0, 1, 264, 1],\n \"a02448.html#a6686cfa51063175cc51326ce90d5f7b0\": [2, 0, 0, 262, 10],\n \"a02448.html#a6686cfa51063175cc51326ce90d5f7b0\": [3, 0, 1, 264, 10],\n- \"a02448.html#a672b19c6773109bb67a5e8e78e0fc7bb\": [3, 0, 1, 264, 2],\n \"a02448.html#a672b19c6773109bb67a5e8e78e0fc7bb\": [2, 0, 0, 262, 2],\n+ \"a02448.html#a672b19c6773109bb67a5e8e78e0fc7bb\": [3, 0, 1, 264, 2],\n \"a02448.html#a82dc5a243e5910cf541a423815e2083d\": [3, 0, 1, 264, 6],\n \"a02448.html#a82dc5a243e5910cf541a423815e2083d\": [2, 0, 0, 262, 6],\n \"a02448.html#a8e8b7f5456518fb96961bf055aecaa71\": [3, 0, 1, 264, 5],\n \"a02448.html#a8e8b7f5456518fb96961bf055aecaa71\": [2, 0, 0, 262, 5],\n- \"a02448.html#a8ed907b7cc1367188fad8ac2cd99aa15\": [2, 0, 0, 262, 12],\n \"a02448.html#a8ed907b7cc1367188fad8ac2cd99aa15\": [3, 0, 1, 264, 12],\n+ \"a02448.html#a8ed907b7cc1367188fad8ac2cd99aa15\": [2, 0, 0, 262, 12],\n \"a02448.html#aad86e44b7f9c9327f166c01167c20f54\": [3, 0, 1, 264, 0],\n \"a02448.html#aad86e44b7f9c9327f166c01167c20f54\": [2, 0, 0, 262, 0],\n- \"a02448.html#ac2b2b0c5b95f654313726ccbf95e993d\": [2, 0, 0, 262, 3],\n \"a02448.html#ac2b2b0c5b95f654313726ccbf95e993d\": [3, 0, 1, 264, 3],\n- \"a02448.html#af99817fb2887d9029b642f8b7f5a2227\": [3, 0, 1, 264, 9],\n+ \"a02448.html#ac2b2b0c5b95f654313726ccbf95e993d\": [2, 0, 0, 262, 3],\n \"a02448.html#af99817fb2887d9029b642f8b7f5a2227\": [2, 0, 0, 262, 9],\n- \"a02452.html\": [2, 0, 0, 263],\n+ \"a02448.html#af99817fb2887d9029b642f8b7f5a2227\": [3, 0, 1, 264, 9],\n \"a02452.html\": [3, 0, 1, 265],\n- \"a02452.html#a3009c0d094984c8b892f7573f3f722bf\": [3, 0, 1, 265, 1],\n+ \"a02452.html\": [2, 0, 0, 263],\n \"a02452.html#a3009c0d094984c8b892f7573f3f722bf\": [2, 0, 0, 263, 1],\n- \"a02452.html#a38f5ef78eef67e4ef45356adfef88da3\": [2, 0, 0, 263, 5],\n+ \"a02452.html#a3009c0d094984c8b892f7573f3f722bf\": [3, 0, 1, 265, 1],\n \"a02452.html#a38f5ef78eef67e4ef45356adfef88da3\": [3, 0, 1, 265, 5],\n- \"a02452.html#a4804b29dee9d045095431989ef71da6f\": [3, 0, 1, 265, 0],\n+ \"a02452.html#a38f5ef78eef67e4ef45356adfef88da3\": [2, 0, 0, 263, 5],\n \"a02452.html#a4804b29dee9d045095431989ef71da6f\": [2, 0, 0, 263, 0],\n- \"a02452.html#a8898ad351d830aee1e3dd7e878f1fcfc\": [3, 0, 1, 265, 7],\n+ \"a02452.html#a4804b29dee9d045095431989ef71da6f\": [3, 0, 1, 265, 0],\n \"a02452.html#a8898ad351d830aee1e3dd7e878f1fcfc\": [2, 0, 0, 263, 7],\n- \"a02452.html#a8c7596c4767e1254224e59c191a30486\": [3, 0, 1, 265, 4],\n+ \"a02452.html#a8898ad351d830aee1e3dd7e878f1fcfc\": [3, 0, 1, 265, 7],\n \"a02452.html#a8c7596c4767e1254224e59c191a30486\": [2, 0, 0, 263, 4],\n+ \"a02452.html#a8c7596c4767e1254224e59c191a30486\": [3, 0, 1, 265, 4],\n \"a02452.html#a98082822bae323ca57ddcaba6ed1f785\": [3, 0, 1, 265, 2],\n \"a02452.html#a98082822bae323ca57ddcaba6ed1f785\": [2, 0, 0, 263, 2],\n \"a02452.html#ab7617a054d6c047600c829db61a6ee9f\": [3, 0, 1, 265, 3],\n \"a02452.html#ab7617a054d6c047600c829db61a6ee9f\": [2, 0, 0, 263, 3],\n- \"a02452.html#adca2873028cc90c2047c77bc5b398feb\": [3, 0, 1, 265, 8],\n \"a02452.html#adca2873028cc90c2047c77bc5b398feb\": [2, 0, 0, 263, 8],\n+ \"a02452.html#adca2873028cc90c2047c77bc5b398feb\": [3, 0, 1, 265, 8],\n \"a02452.html#aeac04b3e0d6bf65fe4d69b84709e657a\": [3, 0, 1, 265, 6],\n \"a02452.html#aeac04b3e0d6bf65fe4d69b84709e657a\": [2, 0, 0, 263, 6],\n- \"a02456.html\": [2, 0, 0, 234],\n \"a02456.html\": [3, 0, 1, 236],\n- \"a02460.html\": [2, 0, 0, 235],\n+ \"a02456.html\": [2, 0, 0, 234],\n \"a02460.html\": [3, 0, 1, 237],\n- \"a02464.html\": [3, 0, 1, 299],\n+ \"a02460.html\": [2, 0, 0, 235],\n \"a02464.html\": [2, 0, 0, 297],\n- \"a02464.html#aa25886a3e8642f111a265dec1045c6f3\": [3, 0, 1, 299, 0],\n+ \"a02464.html\": [3, 0, 1, 299],\n \"a02464.html#aa25886a3e8642f111a265dec1045c6f3\": [2, 0, 0, 297, 0],\n+ \"a02464.html#aa25886a3e8642f111a265dec1045c6f3\": [3, 0, 1, 299, 0],\n \"a02468.html\": [2, 0, 0, 503],\n \"a02468.html\": [3, 0, 1, 505],\n \"a02480.html\": [2, 0, 0, 112],\n \"a02480.html\": [3, 0, 1, 114],\n \"a02484.html\": [2, 0, 0, 113],\n \"a02484.html\": [3, 0, 1, 115],\n- \"a02488.html\": [2, 0, 0, 168],\n \"a02488.html\": [3, 0, 1, 170],\n+ \"a02488.html\": [2, 0, 0, 168],\n \"a02492.html\": [3, 0, 1, 378],\n \"a02492.html\": [2, 0, 0, 376],\n- \"a02496.html\": [2, 0, 0, 377],\n \"a02496.html\": [3, 0, 1, 379],\n+ \"a02496.html\": [2, 0, 0, 377],\n \"a02496.html#a3a16f8c7e9e195c03a65dd03c65e77c5\": [3, 0, 1, 379, 3],\n \"a02496.html#a3a16f8c7e9e195c03a65dd03c65e77c5\": [2, 0, 0, 377, 3],\n \"a02496.html#a4efc6de8e5ea1810c3d32f29a00714c0\": [3, 0, 1, 379, 5],\n \"a02496.html#a4efc6de8e5ea1810c3d32f29a00714c0\": [2, 0, 0, 377, 5],\n- \"a02496.html#a5e422f39c89802be3c5aaaf65dbfd862\": [2, 0, 0, 377, 0],\n \"a02496.html#a5e422f39c89802be3c5aaaf65dbfd862\": [3, 0, 1, 379, 0],\n- \"a02496.html#a71fe75b345e277c800fb6b5ddba217de\": [2, 0, 0, 377, 1],\n+ \"a02496.html#a5e422f39c89802be3c5aaaf65dbfd862\": [2, 0, 0, 377, 0],\n \"a02496.html#a71fe75b345e277c800fb6b5ddba217de\": [3, 0, 1, 379, 1],\n+ \"a02496.html#a71fe75b345e277c800fb6b5ddba217de\": [2, 0, 0, 377, 1],\n \"a02496.html#a730172f56582e5a56d1fcb93d230d1de\": [3, 0, 1, 379, 2],\n \"a02496.html#a730172f56582e5a56d1fcb93d230d1de\": [2, 0, 0, 377, 2],\n- \"a02496.html#a8f7ec9cccffe7d666e3a025546377c32\": [3, 0, 1, 379, 4],\n \"a02496.html#a8f7ec9cccffe7d666e3a025546377c32\": [2, 0, 0, 377, 4],\n- \"a02500.html\": [3, 0, 1, 324],\n+ \"a02496.html#a8f7ec9cccffe7d666e3a025546377c32\": [3, 0, 1, 379, 4],\n \"a02500.html\": [2, 0, 0, 322],\n- \"a02500.html#aa618fffc79e001904f7d53e0f27a29fd\": [3, 0, 1, 324, 0],\n+ \"a02500.html\": [3, 0, 1, 324],\n \"a02500.html#aa618fffc79e001904f7d53e0f27a29fd\": [2, 0, 0, 322, 0],\n- \"a02504.html\": [2, 0, 0, 269],\n+ \"a02500.html#aa618fffc79e001904f7d53e0f27a29fd\": [3, 0, 1, 324, 0],\n \"a02504.html\": [3, 0, 1, 271],\n+ \"a02504.html\": [2, 0, 0, 269],\n \"a02504.html#abc191cc95d1df7bb9e9fcf7edb857162\": [3, 0, 1, 271, 0],\n \"a02504.html#abc191cc95d1df7bb9e9fcf7edb857162\": [2, 0, 0, 269, 0],\n- \"a02508.html\": [2, 0, 0, 190],\n \"a02508.html\": [3, 0, 1, 192],\n- \"a02508.html#a5b59c8bf5a4f3ed5ab5a3bdc4bb0dad2\": [2, 0, 0, 190, 0],\n+ \"a02508.html\": [2, 0, 0, 190],\n \"a02508.html#a5b59c8bf5a4f3ed5ab5a3bdc4bb0dad2\": [3, 0, 1, 192, 0],\n+ \"a02508.html#a5b59c8bf5a4f3ed5ab5a3bdc4bb0dad2\": [2, 0, 0, 190, 0],\n \"a02512.html\": [2, 0, 0, 53],\n \"a02512.html\": [3, 0, 1, 55],\n \"a02516.html\": [3, 0, 1, 2, 24],\n \"a02516.html#a10bc532260daa8d7372c289c1c2ecb17\": [3, 0, 1, 2, 24, 10],\n \"a02516.html#a1cbcbaea2438a8c1f36f19c46c7ca69b\": [3, 0, 1, 2, 24, 8],\n \"a02516.html#a259f57a09ca2012a5987cabe35514604\": [3, 0, 1, 2, 24, 1],\n \"a02516.html#a49254714ef87b36c03442065c9ca557c\": [3, 0, 1, 2, 24, 7],\n@@ -202,46 +202,46 @@\n \"a02516.html#abec6041cac884177b3345c59c4b875b3\": [3, 0, 1, 2, 24, 9],\n \"a02516.html#acdeff50555c404cfaed4d9e49722e673\": [3, 0, 1, 2, 24, 3],\n \"a02516.html#adfd8ce6ab7a1b7b8f844ef9fc1337d41\": [3, 0, 1, 2, 24, 2],\n \"a02516.html#ae6e021b0b7b9d4e4e95aa65ac5b95637\": [3, 0, 1, 2, 24, 6],\n \"a02520.html\": [3, 0, 1, 2, 3],\n \"a02536.html\": [2, 0, 0, 62],\n \"a02536.html\": [3, 0, 1, 64],\n- \"a02540.html\": [3, 0, 1, 65],\n \"a02540.html\": [2, 0, 0, 63],\n+ \"a02540.html\": [3, 0, 1, 65],\n \"a02544.html\": [3, 0, 1, 66],\n \"a02544.html\": [2, 0, 0, 64],\n- \"a02548.html\": [3, 0, 1, 560],\n \"a02548.html\": [2, 0, 0, 558],\n+ \"a02548.html\": [3, 0, 1, 560],\n \"a02548.html#a0b891b92eae0f946f0dce5892f6b74d3\": [2, 0, 0, 558, 3],\n \"a02548.html#a0b891b92eae0f946f0dce5892f6b74d3\": [3, 0, 1, 560, 3],\n- \"a02548.html#a1d5b519ce1a722e763407563a39dfdd3\": [2, 0, 0, 558, 2],\n \"a02548.html#a1d5b519ce1a722e763407563a39dfdd3\": [3, 0, 1, 560, 2],\n+ \"a02548.html#a1d5b519ce1a722e763407563a39dfdd3\": [2, 0, 0, 558, 2],\n \"a02548.html#a422ed00f49aca034422716e3e8e345bf\": [2, 0, 0, 558, 4],\n \"a02548.html#a422ed00f49aca034422716e3e8e345bf\": [3, 0, 1, 560, 4],\n- \"a02548.html#a530bf5ddc21562989ee4427ef44e520b\": [2, 0, 0, 558, 0],\n \"a02548.html#a530bf5ddc21562989ee4427ef44e520b\": [3, 0, 1, 560, 0],\n+ \"a02548.html#a530bf5ddc21562989ee4427ef44e520b\": [2, 0, 0, 558, 0],\n \"a02548.html#a54bbbf7380c6a54aa696a8a7fe803f0e\": [3, 0, 1, 560, 1],\n \"a02548.html#a54bbbf7380c6a54aa696a8a7fe803f0e\": [2, 0, 0, 558, 1],\n \"a02552.html\": [3, 0, 1, 230],\n \"a02552.html\": [2, 0, 0, 228],\n \"a02556.html\": [2, 0, 0, 375],\n \"a02556.html\": [3, 0, 1, 377],\n- \"a02560.html\": [2, 0, 0, 248],\n \"a02560.html\": [3, 0, 1, 250],\n- \"a02564.html\": [2, 0, 0, 249],\n+ \"a02560.html\": [2, 0, 0, 248],\n \"a02564.html\": [3, 0, 1, 251],\n- \"a02568.html\": [3, 0, 1, 309],\n+ \"a02564.html\": [2, 0, 0, 249],\n \"a02568.html\": [2, 0, 0, 307],\n+ \"a02568.html\": [3, 0, 1, 309],\n \"a02568.html#a37b3ac486d866219fe29f05bd0d742b2\": [2, 0, 0, 307, 1],\n \"a02568.html#a37b3ac486d866219fe29f05bd0d742b2\": [3, 0, 1, 309, 1],\n \"a02568.html#a65a98f77981bd096f65841afb0215747\": [2, 0, 0, 307, 2],\n \"a02568.html#a65a98f77981bd096f65841afb0215747\": [3, 0, 1, 309, 2],\n- \"a02568.html#acea65ff66039691f574aea2894a255d8\": [2, 0, 0, 307, 0],\n \"a02568.html#acea65ff66039691f574aea2894a255d8\": [3, 0, 1, 309, 0],\n+ \"a02568.html#acea65ff66039691f574aea2894a255d8\": [2, 0, 0, 307, 0],\n \"a02576.html\": [3, 0, 0, 0, 0, 0],\n \"a02580.html\": [3, 0, 0, 0, 0, 1],\n \"a02596.html\": [3, 0, 1, 551],\n \"a02596.html\": [2, 0, 0, 549],\n \"a02596.html#a21e0a839ddaabd4c56559684ff887efe\": [2, 0, 0, 549, 5],\n \"a02596.html#a21e0a839ddaabd4c56559684ff887efe\": [3, 0, 1, 551, 5],\n \"a02596.html#a2b95d3ec328cbad775490fa15dae27d5\": [2, 0, 0, 549, 10],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/navtreeindex7.js", "source2": "./usr/share/doc/libgtsam-dev/html/navtreeindex7.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,23 +1,23 @@\n var NAVTREEINDEX7 = {\n \"a02596.html#a5a0554b9e0758f370073ea3cc5cf1c9f\": [2, 0, 0, 549, 4],\n \"a02596.html#a616a94e2ce8e99e732d5ceb9af00632c\": [3, 0, 1, 551, 0],\n \"a02596.html#a616a94e2ce8e99e732d5ceb9af00632c\": [2, 0, 0, 549, 0],\n \"a02596.html#a74edb2709fe745b6d09087f6aacf507f\": [3, 0, 1, 551, 6],\n \"a02596.html#a74edb2709fe745b6d09087f6aacf507f\": [2, 0, 0, 549, 6],\n- \"a02596.html#a83429f15b4f68ed92e976649ea52da97\": [3, 0, 1, 551, 7],\n \"a02596.html#a83429f15b4f68ed92e976649ea52da97\": [2, 0, 0, 549, 7],\n+ \"a02596.html#a83429f15b4f68ed92e976649ea52da97\": [3, 0, 1, 551, 7],\n \"a02596.html#abefd5e7e205863119c1f88075070f5df\": [3, 0, 1, 551, 8],\n \"a02596.html#abefd5e7e205863119c1f88075070f5df\": [2, 0, 0, 549, 8],\n \"a02596.html#ac338307bb9f00cd29a70a48058069458\": [3, 0, 1, 551, 9],\n \"a02596.html#ac338307bb9f00cd29a70a48058069458\": [2, 0, 0, 549, 9],\n- \"a02596.html#ac6245c02ce05c4a87072ebc6bd27a7d5\": [3, 0, 1, 551, 3],\n \"a02596.html#ac6245c02ce05c4a87072ebc6bd27a7d5\": [2, 0, 0, 549, 3],\n- \"a02596.html#ac98d07dd8f7b70e16ccb9a01abf56b9c\": [2, 0, 0, 549, 11],\n+ \"a02596.html#ac6245c02ce05c4a87072ebc6bd27a7d5\": [3, 0, 1, 551, 3],\n \"a02596.html#ac98d07dd8f7b70e16ccb9a01abf56b9c\": [3, 0, 1, 551, 11],\n+ \"a02596.html#ac98d07dd8f7b70e16ccb9a01abf56b9c\": [2, 0, 0, 549, 11],\n \"a02596.html#af8ca22b41d251396c03ffb96f914748d\": [3, 0, 1, 551, 2],\n \"a02596.html#af8ca22b41d251396c03ffb96f914748d\": [2, 0, 0, 549, 2],\n \"a02600.html\": [3, 0, 1, 563],\n \"a02600.html\": [2, 0, 0, 561],\n \"a02604.html\": [3, 0, 1, 2, 26],\n \"a02608.html\": [3, 0, 1, 2, 27],\n \"a02612.html\": [3, 0, 1, 2, 18],\n@@ -45,30 +45,30 @@\n \"a02664.html#aa938b7f88f6efd2be5ee3b1cf12c85f7\": [2, 0, 0, 570, 0],\n \"a02716.html\": [3, 0, 1, 239],\n \"a02716.html\": [2, 0, 0, 237],\n \"a02716.html#a8f01911815a4daec250e6f141dbda835\": [3, 0, 1, 239, 1],\n \"a02716.html#a8f01911815a4daec250e6f141dbda835\": [2, 0, 0, 237, 1],\n \"a02716.html#ad3a72c44acc22b08ddd6f0f6d6fdb27a\": [3, 0, 1, 239, 0],\n \"a02716.html#ad3a72c44acc22b08ddd6f0f6d6fdb27a\": [2, 0, 0, 237, 0],\n- \"a02720.html\": [2, 0, 0, 75],\n \"a02720.html\": [3, 0, 1, 77],\n+ \"a02720.html\": [2, 0, 0, 75],\n \"a02720.html#a04f9e06201f5c76ccaaa7dc23fc603a1\": [3, 0, 1, 77, 1],\n \"a02720.html#a04f9e06201f5c76ccaaa7dc23fc603a1\": [2, 0, 0, 75, 1],\n \"a02720.html#a22a6450e16d12137e40345cfe48c0838\": [3, 0, 1, 77, 0],\n \"a02720.html#a22a6450e16d12137e40345cfe48c0838\": [2, 0, 0, 75, 0],\n \"a02724.html\": [2, 0, 0, 563],\n \"a02724.html\": [3, 0, 1, 565],\n- \"a02724.html#a070fbf65f69e5910a48d0e1f32454e96\": [3, 0, 1, 565, 0],\n \"a02724.html#a070fbf65f69e5910a48d0e1f32454e96\": [2, 0, 0, 563, 0],\n+ \"a02724.html#a070fbf65f69e5910a48d0e1f32454e96\": [3, 0, 1, 565, 0],\n \"a02724.html#a5ecb602f1367e1b4d10b3ea0fbd2ce30\": [2, 0, 0, 563, 1],\n \"a02724.html#a5ecb602f1367e1b4d10b3ea0fbd2ce30\": [3, 0, 1, 565, 1],\n \"a02728.html\": [3, 0, 1, 59],\n \"a02728.html\": [2, 0, 0, 57],\n- \"a02728.html#a16c7420cd2b6dbf6360357bb72cea7e2\": [2, 0, 0, 57, 1],\n \"a02728.html#a16c7420cd2b6dbf6360357bb72cea7e2\": [3, 0, 1, 59, 1],\n+ \"a02728.html#a16c7420cd2b6dbf6360357bb72cea7e2\": [2, 0, 0, 57, 1],\n \"a02728.html#a811f4b56b1fcc6948f75897a0ecc4a0d\": [3, 0, 1, 59, 0],\n \"a02728.html#a811f4b56b1fcc6948f75897a0ecc4a0d\": [2, 0, 0, 57, 0],\n \"a02732.html\": [2, 0, 0, 49],\n \"a02732.html\": [3, 0, 1, 51],\n \"a02736.html\": [2, 0, 0, 51],\n \"a02736.html\": [3, 0, 1, 53],\n \"a02740.html\": [2, 0, 0, 50],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_10.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_10.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -250,29 +250,29 @@\n ['../a02448.html#a15fd73e523755b78f5ee6c994b0d584d', 1, 'gtsam::OptionalJacobian::OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)'],\n ['../a02452.html#a3009c0d094984c8b892f7573f3f722bf', 1, 'gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >::OptionalJacobian()'],\n ['../a02452.html#a98082822bae323ca57ddcaba6ed1f785', 1, 'gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >::OptionalJacobian(Jacobian *pointer)'],\n ['../a02452.html#ab7617a054d6c047600c829db61a6ee9f', 1, 'gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >::OptionalJacobian(Jacobian &dynamic)'],\n ['../a02452.html#a8c7596c4767e1254224e59c191a30486', 1, 'gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >::OptionalJacobian(boost::none_t)'],\n ['../a02452.html#a38f5ef78eef67e4ef45356adfef88da3', 1, 'gtsam::OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >::OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)']\n ]],\n- ['optionaljacobian_2eh_48', ['OptionalJacobian.h', ['../a00137.html', 1, '']]],\n+ ['optionaljacobian_2eh_48', ['OptionalJacobian.h', ['../a00095.html', 1, '']]],\n ['optionaljacobian_3c_20dim_2c_20dim_20_3e_49', ['OptionalJacobian< dim, dim >', ['../a02448.html', 1, 'gtsam']]],\n ['optionaljacobian_3c_20eigen_3a_3adynamic_2c_20eigen_3a_3adynamic_20_3e_50', ['OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >', ['../a02452.html', 1, 'gtsam']]],\n ['optionalorderingtype_51', ['OptionalOrderingType', ['../a03580.html#af7b21bfc67a712216a90bbc7a9e6c2c4', 1, 'gtsam::EliminateableFactorGraph']]],\n ['optionalvariableindex_52', ['OptionalVariableIndex', ['../a03580.html#ad420bb819ec65e1aaa4d81a362a07fcd', 1, 'gtsam::EliminateableFactorGraph']]],\n ['orderedfrontalkeys_53', ['orderedFrontalKeys', ['../a03568.html#a572bf7152d93d7cda0f2745f90e28411', 1, 'gtsam::ClusterTree::Cluster']]],\n ['ordering_54', ['ordering', ['../a03680.html', 1, 'gtsam::Ordering'],\n ['../a03840.html#a4035dbfff1070304ae63a4ecf214adc0', 1, 'gtsam::KeyInfo::ordering()'],\n ['../a03740.html#aa4bf7623222114b8929266f89e96aeb5', 1, 'gtsam::GaussianBayesNet::ordering()'],\n ['../a04556.html#af485749d046e54e52317b96311db3697', 1, 'gtsam::NonlinearOptimizerParams::ordering'],\n ['../a03680.html#a0fdb342e68a74e19c25a1d3364233cde', 1, 'gtsam::Ordering::Ordering(const KEYS &keys)'],\n ['../a03680.html#aa7f3dd0f38b06fa10b7fe9dc1ee1c378', 1, 'gtsam::Ordering::Ordering()']\n ]],\n- ['ordering_2ecpp_55', ['Ordering.cpp', ['../a00581.html', 1, '']]],\n- ['ordering_2eh_56', ['Ordering.h', ['../a00674.html', 1, '']]],\n+ ['ordering_2ecpp_55', ['Ordering.cpp', ['../a00689.html', 1, '']]],\n+ ['ordering_2eh_56', ['Ordering.h', ['../a00587.html', 1, '']]],\n ['ordering_5fkey_5fvisitor_57', ['ordering_key_visitor', ['../a03608.html', 1, 'gtsam']]],\n ['orderingcolamd_58', ['orderingCOLAMD', ['../a04540.html#af1fbc30c54273417321df1d313022fa7', 1, 'gtsam::NonlinearFactorGraph']]],\n ['orderingcolamdconstrained_59', ['orderingCOLAMDConstrained', ['../a04540.html#aa8ba0c68e6ff1853aa548e1338f1890f', 1, 'gtsam::NonlinearFactorGraph']]],\n ['orderingtype_60', ['orderingtype', ['../a03680.html#a41194f31ec42052094cf91d81dcd796d', 1, 'gtsam::Ordering::OrderingType'],\n ['../a04556.html#a9d851ffe0289f4dcd861b18bc6a05960', 1, 'gtsam::NonlinearOptimizerParams::orderingType']\n ]],\n ['orientedplane3_61', ['orientedplane3', ['../a03092.html#aabbde8eb3a3a90e7de6f036fd1dceae0', 1, 'gtsam::OrientedPlane3::OrientedPlane3()'],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_11.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_11.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -9,15 +9,15 @@\n ['p_5f_4', ['p_', ['../a04208.html#a6a57eaeabb9d6144a8dff15e9b895a87', 1, 'gtsam::PreintegratedRotation']]],\n ['paperhorizontalaxis_5', ['paperHorizontalAxis', ['../a04368.html#acd47a7fd6c759b84610f2f0c8643cb3b', 1, 'gtsam::GraphvizFormatting']]],\n ['paperverticalaxis_6', ['paperVerticalAxis', ['../a04368.html#a2510b8d60ade59a0cb2eb20bdeabefa5', 1, 'gtsam::GraphvizFormatting']]],\n ['parametermatrix_7', ['parametermatrix', ['../a02752.html#a0a9e1e32765538a3a161e3b06d29272d', 1, 'gtsam::ParameterMatrix::ParameterMatrix()'],\n ['../a02752.html', 1, 'gtsam::ParameterMatrix< M >'],\n ['../a02752.html#a6787a06d269f6f9ed9d403a3caa8e02e', 1, 'gtsam::ParameterMatrix::ParameterMatrix()']\n ]],\n- ['parametermatrix_2eh_8', ['ParameterMatrix.h', ['../a00152.html', 1, '']]],\n+ ['parametermatrix_2eh_8', ['ParameterMatrix.h', ['../a00161.html', 1, '']]],\n ['parameters_9', ['parameters', ['../a02744.html#a9fff77639aab8e1fb67e226ac84f6701', 1, 'gtsam::FitBasis']]],\n ['params_10', ['params', ['../a04216.html#abf8bcbed6faa28b929feb17ebc945cbc', 1, 'gtsam::PreintegrationBase::params()'],\n ['../a04260.html#ae648869d633326339be7d5d743e97a53', 1, 'gtsam::DoglegOptimizer::params()'],\n ['../a04356.html#a1084408cbbd06b40403a494ee99badbe', 1, 'gtsam::GaussNewtonOptimizer::params()'],\n ['../a04436.html#a3b8146a2452e87a600c61d9a2b195ef0', 1, 'gtsam::LevenbergMarquardtOptimizer::params()']\n ]],\n ['params_5f_11', ['params_', ['../a04396.html#abec56652222d97d144e75a175ba3e8d0', 1, 'gtsam::ISAM2::params_'],\n@@ -54,26 +54,26 @@\n ['pinholecamera_31', ['pinholecamera', ['../a03104.html#a4c5c98302819a067de838de6b17adaf0', 1, 'gtsam::PinholeCamera::PinholeCamera(const Pose3 &pose, const Calibration &K)'],\n ['../a03104.html#a491f98259acec7e03e50e93c4e26a9bb', 1, 'gtsam::PinholeCamera::PinholeCamera(const Pose3 &pose)'],\n ['../a03104.html#af2d439f6216b9f80e5dc38509caee6cb', 1, 'gtsam::PinholeCamera::PinholeCamera()'],\n ['../a03104.html#ad1c537e3934ddede949402b11416bb1f', 1, 'gtsam::PinholeCamera::PinholeCamera(const Vector &v)'],\n ['../a03104.html#ab58ad82e7ebe548736e7fc04ba4433d6', 1, 'gtsam::PinholeCamera::PinholeCamera(const Vector &v, const Vector &K)'],\n ['../a03104.html', 1, 'gtsam::PinholeCamera< Calibration >']\n ]],\n- ['pinholecamera_2eh_32', ['PinholeCamera.h', ['../a00458.html', 1, '']]],\n+ ['pinholecamera_2eh_32', ['PinholeCamera.h', ['../a00371.html', 1, '']]],\n ['pinholecameracal3_5fs2_33', ['PinholeCameraCal3_S2', ['../a01428.html#a3a2e8c622e65623a6853c84073bdb4f2', 1, 'gtsam']]],\n ['pinholepose_34', ['pinholepose', ['../a03124.html#a0f03ed9ab476d4fef2c5dc602e1081f7', 1, 'gtsam::PinholePose::PinholePose()'],\n ['../a03124.html#ae8c10a4c38cf272931232cf2d2723de2', 1, 'gtsam::PinholePose::PinholePose(const Pose3 &pose)'],\n ['../a03124.html#aadf627b6018a112d49f5d3649b5667ca', 1, 'gtsam::PinholePose::PinholePose(const Pose3 &pose, const boost::shared_ptr< CALIBRATION > &K)'],\n ['../a03124.html', 1, 'gtsam::PinholePose< CALIBRATION >'],\n ['../a03124.html#aad52e2f5639eba5fca2d1ea983e984af', 1, 'gtsam::PinholePose::PinholePose(const Vector &v)'],\n ['../a03124.html#a6d953e746fa85d581282c70edef4677f', 1, 'gtsam::PinholePose::PinholePose(const Vector &v, const Vector &K)']\n ]],\n- ['pinholepose_2eh_35', ['PinholePose.h', ['../a00377.html', 1, '']]],\n+ ['pinholepose_2eh_35', ['PinholePose.h', ['../a00308.html', 1, '']]],\n ['pinholeset_36', ['PinholeSet', ['../a03136.html', 1, 'gtsam']]],\n- ['pinholeset_2eh_37', ['PinholeSet.h', ['../a00323.html', 1, '']]],\n+ ['pinholeset_2eh_37', ['PinholeSet.h', ['../a00311.html', 1, '']]],\n ['pitch_38', ['pitch', ['../a03228.html#a10f2fca06dab15d15c64b8f9bb3195ce', 1, 'gtsam::Rot3::pitch(OptionalJacobian< 1, 3 > H=boost::none) const'],\n ['../a03228.html#a910f3e76bf0abda247eb9a8e496c6e27', 1, 'gtsam::Rot3::Pitch(double t)']\n ]],\n ['planecoefficients_39', ['planeCoefficients', ['../a03092.html#a6803d86bef515eaaa4815f74b7f6e958', 1, 'gtsam::OrientedPlane3']]],\n ['plotfactorpoints_40', ['plotFactorPoints', ['../a03576.html#a39eaabf9c4cffe59766b4b8d03652f62', 1, 'gtsam::DotWriter']]],\n ['pmf_41', ['pmf', ['../a02840.html#ab401a49924b290739ee045f42e7cce50', 1, 'gtsam::DiscreteDistribution']]],\n ['point_42', ['point', ['../a04936.html#ad11aa682fdff0190763ed3c33eec3985', 1, 'gtsam::SmartProjectionFactor::point(const Values &values) const'],\n@@ -81,22 +81,22 @@\n ['../a03080.html#ab3ef9a107396ff65d222037dfd9fd32a', 1, 'gtsam::Line3::point()'],\n ['../a02740.html#ab28730ac756133e4d93752a34b1ecad8', 1, 'gtsam::Chebyshev2::Point(size_t N, int j, double a, double b)'],\n ['../a02740.html#a545c241cb6421d73f3494701ee7e4812', 1, 'gtsam::Chebyshev2::Point(size_t N, int j)']\n ]],\n ['point2_43', ['point2', ['../a01428.html#a6ede8384dee0353a0ce5fb54ea50c21d', 1, 'gtsam::Point2'],\n ['../a03352.html#aebca28e1dc3f495c873fd01de7ff0778', 1, 'gtsam::StereoPoint2::point2()']\n ]],\n- ['point2_2ecpp_44', ['Point2.cpp', ['../a00320.html', 1, '']]],\n- ['point2_2eh_45', ['Point2.h', ['../a00476.html', 1, '']]],\n+ ['point2_2ecpp_44', ['Point2.cpp', ['../a00356.html', 1, '']]],\n+ ['point2_2eh_45', ['Point2.h', ['../a00431.html', 1, '']]],\n ['point3_46', ['point3', ['../a03380.html#a4564930d54700b7cb2cabf83112c8e33', 1, 'gtsam::Unit3::point3()'],\n ['../a04716.html#aca2f67edf3d1f91fafb20df210ecae05', 1, 'gtsam::SfmTrack::point3()'],\n ['../a01428.html#aaa8ed89fd60ea4601d9de63c4811525b', 1, 'gtsam::Point3']\n ]],\n- ['point3_2ecpp_47', ['Point3.cpp', ['../a00362.html', 1, '']]],\n- ['point3_2eh_48', ['Point3.h', ['../a00407.html', 1, '']]],\n+ ['point3_2ecpp_47', ['Point3.cpp', ['../a00401.html', 1, '']]],\n+ ['point3_2eh_48', ['Point3.h', ['../a00383.html', 1, '']]],\n ['pointcov_49', ['pointcov', ['../a04928.html#ae81f94fb333ec5a875c74e241fbf93bd', 1, 'gtsam::SmartFactorBase::PointCov()'],\n ['../a03044.html#a78b6feaeb08bb174f61caf9bb42c6839', 1, 'gtsam::CameraSet::PointCov()']\n ]],\n ['pointcovariance_5f_50', ['PointCovariance_', ['../a04912.html#a887d7170cefb1a72bf7576ff95237ed6', 1, 'gtsam::RegularImplicitSchurFactor']]],\n ['points_51', ['points', ['../a02740.html#acef4ab538051627502a1205569ff650c', 1, 'gtsam::Chebyshev2::Points(size_t N, double a, double b)'],\n ['../a02740.html#abe793df46865398aa41cae400190148c', 1, 'gtsam::Chebyshev2::Points(size_t N)']\n ]],\n@@ -113,55 +113,55 @@\n ['../a03156.html#aeed938448e4b42c715527831c1ddf57a', 1, 'gtsam::Pose2::Pose2(const Pose2 &pose)'],\n ['../a03156.html#a698cbb45d2308207237e0a0ab6b27f2c', 1, 'gtsam::Pose2::Pose2(double theta, const Point2 &t)'],\n ['../a03156.html#a7c1a8decfc2de14e194e1f744b969525', 1, 'gtsam::Pose2::Pose2(const Vector &v)'],\n ['../a03156.html#afcd35e3178b6b949cc6d5e1009c5e844', 1, 'gtsam::Pose2::Pose2(const Matrix &T)'],\n ['../a03156.html#ae857f3177acf6c8924aedeebafe10ede', 1, 'gtsam::Pose2::Pose2(const Rot2 &r, const Point2 &t)'],\n ['../a03156.html#a5d0b6d7bfebdf3f4478407160f480a1a', 1, 'gtsam::Pose2::Pose2(double x, double y, double theta)']\n ]],\n- ['pose2_2ecpp_54', ['Pose2.cpp', ['../a00374.html', 1, '']]],\n- ['pose2_2eh_55', ['Pose2.h', ['../a00278.html', 1, '']]],\n+ ['pose2_2ecpp_54', ['Pose2.cpp', ['../a00323.html', 1, '']]],\n+ ['pose2_2eh_55', ['Pose2.h', ['../a00284.html', 1, '']]],\n ['pose3_56', ['pose3', ['../a03180.html#a2cdb58c69c0afbea2bf74af9798b523a', 1, 'gtsam::Pose3::Pose3()'],\n ['../a03180.html', 1, 'gtsam::Pose3'],\n ['../a03180.html#a05842ee58d3e5b7998cdd84932b71738', 1, 'gtsam::Pose3::Pose3(const Pose2 &pose2)'],\n ['../a03180.html#a3d7ad3e9bd3ea0954d4b74959b8dab0a', 1, 'gtsam::Pose3::Pose3(const Matrix &T)'],\n ['../a03180.html#a14eb4114ff69f17c5251ff147a75bff3', 1, 'gtsam::Pose3::Pose3()'],\n ['../a03180.html#a14c25a44db9aa7dfaf7e3121b47f04c0', 1, 'gtsam::Pose3::Pose3(const Pose3 &pose)']\n ]],\n- ['pose3_2ecpp_57', ['Pose3.cpp', ['../a00428.html', 1, '']]],\n- ['pose3_2eh_58', ['Pose3.h', ['../a00410.html', 1, '']]],\n+ ['pose3_2ecpp_57', ['Pose3.cpp', ['../a00479.html', 1, '']]],\n+ ['pose3_2eh_58', ['Pose3.h', ['../a00278.html', 1, '']]],\n ['pose3attitudefactor_59', ['pose3attitudefactor', ['../a04092.html#a9d6daa9a5b6c9b0cc88178d524b55ab4', 1, 'gtsam::Pose3AttitudeFactor::Pose3AttitudeFactor()'],\n ['../a04092.html#aefde8d161d0c93a51f1cbf48a6d9d390', 1, 'gtsam::Pose3AttitudeFactor::Pose3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model, const Unit3 &bRef=Unit3(0, 0, 1))'],\n ['../a04092.html', 1, 'gtsam::Pose3AttitudeFactor']\n ]],\n ['poseconcept_60', ['PoseConcept', ['../a03056.html', 1, 'gtsam']]],\n ['poserotationprior_61', ['poserotationprior', ['../a04888.html#a33069d1c86da3e6c66d5feccb75c7a1b', 1, 'gtsam::PoseRotationPrior::PoseRotationPrior(Key key, const Rotation &rot_z, const SharedNoiseModel &model)'],\n ['../a04888.html#a400f290b75d021bd4852523fc19e0d06', 1, 'gtsam::PoseRotationPrior::PoseRotationPrior(Key key, const POSE &pose_z, const SharedNoiseModel &model)'],\n ['../a04888.html#a7476bd4a82ae48e8841a78f32ea73c0f', 1, 'gtsam::PoseRotationPrior::PoseRotationPrior()'],\n ['../a04888.html', 1, 'gtsam::PoseRotationPrior< POSE >']\n ]],\n- ['poserotationprior_2eh_62', ['PoseRotationPrior.h', ['../a01274.html', 1, '']]],\n+ ['poserotationprior_2eh_62', ['PoseRotationPrior.h', ['../a01307.html', 1, '']]],\n ['posetranslationprior_63', ['posetranslationprior', ['../a04892.html#a204e0b877e117aabfe599ca247a195f8', 1, 'gtsam::PoseTranslationPrior::PoseTranslationPrior(Key key, const POSE &pose_z, const noiseModel::Base::shared_ptr &model)'],\n ['../a04892.html#a1701c62175b4e30c8c1df8159764480c', 1, 'gtsam::PoseTranslationPrior::PoseTranslationPrior(Key key, const Translation &measured, const noiseModel::Base::shared_ptr &model)'],\n ['../a04892.html', 1, 'gtsam::PoseTranslationPrior< POSE >'],\n ['../a04892.html#adad7eab23d69d2dec6ae4ad59e0a8c65', 1, 'gtsam::PoseTranslationPrior::PoseTranslationPrior()']\n ]],\n- ['posetranslationprior_2eh_64', ['PoseTranslationPrior.h', ['../a01271.html', 1, '']]],\n+ ['posetranslationprior_2eh_64', ['PoseTranslationPrior.h', ['../a01301.html', 1, '']]],\n ['positionhints_65', ['positionHints', ['../a03576.html#ac273a9f2ab53aacd7f270ea862d58164', 1, 'gtsam::DotWriter']]],\n ['poweriteration_66', ['poweriteration', ['../a03980.html#a88659c24feb5400af80957d4fca5953f', 1, 'gtsam::PowerMethod::powerIteration() const'],\n ['../a03980.html#a0f67a41b8945aadb46d2c83167a6dd4c', 1, 'gtsam::PowerMethod::powerIteration(const Vector &x) const']\n ]],\n ['powermethod_67', ['powermethod', ['../a03980.html#a72f5174af96689cf0a4b2586c592351c', 1, 'gtsam::PowerMethod::PowerMethod()'],\n ['../a03980.html', 1, 'gtsam::PowerMethod< Operator >']\n ]],\n- ['powermethod_2eh_68', ['PowerMethod.h', ['../a00728.html', 1, '']]],\n+ ['powermethod_2eh_68', ['PowerMethod.h', ['../a00755.html', 1, '']]],\n ['precision_69', ['Precision', ['../a03936.html#a82d8d86deec2e1cc7185c9ccf113b724', 1, 'gtsam::noiseModel::Isotropic']]],\n ['precisions_70', ['precisions', ['../a03928.html#a75d121c047ebd94dd652af7364a6867f', 1, 'gtsam::noiseModel::Diagonal::precisions() const'],\n ['../a03928.html#ad82879bb4b6929df70cfb1d5da1a3591', 1, 'gtsam::noiseModel::Diagonal::Precisions(const Vector &precisions, bool smart=true)']\n ]],\n- ['precompiled_5fheader_2ecpp_71', ['precompiled_header.cpp', ['../a01403.html', 1, '']]],\n+ ['precompiled_5fheader_2ecpp_71', ['precompiled_header.cpp', ['../a01394.html', 1, '']]],\n ['precompiled_5fheader_2eh_72', ['precompiled_header.h', ['../a01397.html', 1, '']]],\n ['preconditioner_73', ['Preconditioner', ['../a03988.html', 1, 'gtsam']]],\n ['preconditionerparameters_74', ['PreconditionerParameters', ['../a03984.html', 1, 'gtsam']]],\n ['predecessormap_75', ['PredecessorMap', ['../a03624.html', 1, 'gtsam']]],\n ['predecessormap2graph_76', ['predecessorMap2Graph', ['../a01428.html#ae67d0d86c4e55b175859967a70b36983', 1, 'gtsam']]],\n ['predecessormap2keys_77', ['predecessorMap2Keys', ['../a01428.html#a18a265afdea057ea54be10262396be12', 1, 'gtsam']]],\n ['predict_78', ['predict', ['../a04240.html#acd04df220e7ee25a6ad656eb3080a4b3', 1, 'gtsam::CombinedScenarioRunner::predict()'],\n@@ -199,31 +199,31 @@\n ['../a04156.html#ad8b426f8d6d3ccea12b90028ff77f804', 1, 'gtsam::ImuFactor2::preintegratedMeasurements()']\n ]],\n ['preintegratedrotation_87', ['preintegratedrotation', ['../a04208.html', 1, 'gtsam::PreintegratedRotation'],\n ['../a04208.html#a845409e08ff8c2de417086eff14aac88', 1, 'gtsam::PreintegratedRotation::PreintegratedRotation(const boost::shared_ptr< Params > &p, double deltaTij, const Rot3 &deltaRij, const Matrix3 &delRdelBiasOmega)'],\n ['../a04208.html#aa1900dc3e0d71ae87a3cd149739493dc', 1, 'gtsam::PreintegratedRotation::PreintegratedRotation(const boost::shared_ptr< Params > &p)'],\n ['../a04208.html#ae744d5c7fcf27da650d08f65467f15e1', 1, 'gtsam::PreintegratedRotation::PreintegratedRotation()']\n ]],\n- ['preintegratedrotation_2ecpp_88', ['PreintegratedRotation.cpp', ['../a00935.html', 1, '']]],\n- ['preintegratedrotation_2eh_89', ['PreintegratedRotation.h', ['../a00986.html', 1, '']]],\n+ ['preintegratedrotation_2ecpp_88', ['PreintegratedRotation.cpp', ['../a00989.html', 1, '']]],\n+ ['preintegratedrotation_2eh_89', ['PreintegratedRotation.h', ['../a00971.html', 1, '']]],\n ['preintegratedrotationparams_90', ['PreintegratedRotationParams', ['../a04204.html', 1, 'gtsam']]],\n ['preintegrationbase_91', ['preintegrationbase', ['../a04216.html#a85da47fc93662940e6bd38d02a3b3118', 1, 'gtsam::PreintegrationBase::PreintegrationBase()'],\n ['../a04216.html#ab2d778943f9acd1126975f7133fa73c5', 1, 'gtsam::PreintegrationBase::PreintegrationBase(const boost::shared_ptr< Params > &p, const imuBias::ConstantBias &biasHat=imuBias::ConstantBias())'],\n ['../a04216.html', 1, 'gtsam::PreintegrationBase']\n ]],\n- ['preintegrationbase_2eh_92', ['PreintegrationBase.h', ['../a00914.html', 1, '']]],\n+ ['preintegrationbase_2eh_92', ['PreintegrationBase.h', ['../a00917.html', 1, '']]],\n ['preintegrationcombinedparams_93', ['preintegrationcombinedparams', ['../a04104.html#a58fe7d6b87985831e14de19acb729f4f', 1, 'gtsam::PreintegrationCombinedParams::PreintegrationCombinedParams(const Vector3 &n_gravity)'],\n ['../a04104.html#a811adb48729d4b60f3b69d657e620fe0', 1, 'gtsam::PreintegrationCombinedParams::PreintegrationCombinedParams()'],\n ['../a04104.html', 1, 'gtsam::PreintegrationCombinedParams']\n ]],\n ['preintegrationparams_94', ['preintegrationparams', ['../a04220.html', 1, 'gtsam::PreintegrationParams'],\n ['../a04220.html#a4172ae9d785221171cf39c019547ba51', 1, 'gtsam::PreintegrationParams::PreintegrationParams(const Vector3 &n_gravity)'],\n ['../a04220.html#a2b734623439aeb465143f0ca4a918ad8', 1, 'gtsam::PreintegrationParams::PreintegrationParams()']\n ]],\n- ['preintegrationparams_2eh_95', ['PreintegrationParams.h', ['../a00923.html', 1, '']]],\n+ ['preintegrationparams_2eh_95', ['PreintegrationParams.h', ['../a00965.html', 1, '']]],\n ['preintmeascov_96', ['preintMeasCov', ['../a04148.html#abe18ef369004d8789af398089920f908', 1, 'gtsam::PreintegratedImuMeasurements']]],\n ['preintmeascov_5f_97', ['preintmeascov_', ['../a04148.html#acb8eb38a2b6f4b6969636c213113343b', 1, 'gtsam::PreintegratedImuMeasurements::preintMeasCov_'],\n ['../a04072.html#ac4e58456c03e2e2ed835d0455e6b591c', 1, 'gtsam::PreintegratedAhrsMeasurements::preintMeasCov_']\n ]],\n ['principalpoint_98', ['principalPoint', ['../a02940.html#a7c566955fe36140162f090bf290808cd', 1, 'gtsam::Cal3']]],\n ['print_99', ['print', ['../a04468.html#a14c6572f5e2f6ba8535ed93b0388cffe', 1, 'gtsam::NonlinearEquality::print()'],\n ['../a04456.html#ae436258b48812bdea2492f505a8d66c2', 1, 'gtsam::JointMarginal::print()'],\n@@ -414,15 +414,15 @@\n ]],\n ['processfactor_113', ['processFactor', ['../a03576.html#a1c53c6ec38ca0a2549182f74ba935b3b', 1, 'gtsam::DotWriter']]],\n ['prod_114', ['prod', ['../a01428.html#abc29e3164ed30e785a3c48dfd1aa6ca5', 1, 'gtsam']]],\n ['product_115', ['product', ['../a02864.html#ac4424bd9e7e9decc7d140610f0c515f8', 1, 'gtsam::DiscreteFactorGraph']]],\n ['productliegroup_116', ['productliegroup', ['../a02464.html#aa25886a3e8642f111a265dec1045c6f3', 1, 'gtsam::ProductLieGroup::ProductLieGroup()'],\n ['../a02464.html', 1, 'gtsam::ProductLieGroup< G, H >']\n ]],\n- ['productliegroup_2eh_117', ['ProductLieGroup.h', ['../a00023.html', 1, '']]],\n+ ['productliegroup_2eh_117', ['ProductLieGroup.h', ['../a00014.html', 1, '']]],\n ['project_118', ['project', ['../a03340.html#a534e5ca4946b76b93c7e278a067ea65a', 1, 'gtsam::StereoCamera::project()'],\n ['../a03028.html#aaa7b49f03ffcaaf4b6f9b69973ee28ec', 1, 'gtsam::CalibratedCamera::project()'],\n ['../a03080.html#a00e63f458f3694269c086f69bb5425d5', 1, 'gtsam::Line3::project()'],\n ['../a03120.html#a23034ce37bc65be08a5e1ad942eacb5a', 1, 'gtsam::PinholeBaseK::project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const'],\n ['../a03120.html#a2098458d3817715320032666f146d9b3', 1, 'gtsam::PinholeBaseK::project(const Unit3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const'],\n ['../a03324.html#af937efdaf77d27d04fa0b428084034d6', 1, 'gtsam::SphericalCamera::project()'],\n ['../a03340.html#a58351937581d58a9e5308a4fc7cebfba', 1, 'gtsam::StereoCamera::project()'],\n@@ -440,15 +440,15 @@\n ['../a03104.html#acc44b8ef143a9380d56872f8e6b71626', 1, 'gtsam::PinholeCamera::project2(const Unit3 &pw, OptionalJacobian< 2, dimension > Dcamera=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const'],\n ['../a03124.html#a9e7a5edd54be46fd47ffe95ad5bda312', 1, 'gtsam::PinholePose::project2()'],\n ['../a03340.html#ac5bf29b33c56dd0ee0e8ba35f5bf7d38', 1, 'gtsam::StereoCamera::project2()']\n ]],\n ['projecterror_120', ['projectError', ['../a04912.html#a11d2626a8e429e4f783ff28bd51919d9', 1, 'gtsam::RegularImplicitSchurFactor']]],\n ['projecterror2_121', ['projectError2', ['../a04912.html#ae79b4ba309675ac2287a002251618516', 1, 'gtsam::RegularImplicitSchurFactor']]],\n ['projectfrom_122', ['projectFrom', ['../a04732.html#a780feee9b086f33757f7fba7dec9f3ac', 1, 'gtsam::ShonanAveraging']]],\n- ['projectionfactor_2eh_123', ['ProjectionFactor.h', ['../a01283.html', 1, '']]],\n+ ['projectionfactor_2eh_123', ['ProjectionFactor.h', ['../a01337.html', 1, '']]],\n ['projectsafe_124', ['projectsafe', ['../a03024.html#a494b5e93c6f577b2a2ef6a2517370429', 1, 'gtsam::PinholeBase::projectSafe()'],\n ['../a03120.html#a26082170ef43a374f355f10046fcd51a', 1, 'gtsam::PinholeBaseK::projectSafe()'],\n ['../a03324.html#a8df6c959b70429a0608684e3823b31f5', 1, 'gtsam::SphericalCamera::projectSafe()']\n ]],\n ['prune_125', ['prune', ['../a02808.html#a4c7de63ccfd8f780fd1d4d01d8531c4d', 1, 'gtsam::DecisionTreeFactor::prune()'],\n ['../a03392.html#a37243fc0e8ffd96589b70b40ad156a4e', 1, 'gtsam::GaussianMixture::prune()'],\n ['../a03408.html#a7a0b925cb9e774d60f1e8b86b27f5b9f', 1, 'gtsam::HybridBayesNet::prune()'],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_12.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_12.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -6,9 +6,9 @@\n ]],\n ['qr_20and_20cholesky_2', ['qr and cholesky', ['../a01411.html', 1, 'Solving by multifrontal variable elimination (QR and Cholesky)'],\n ['../a01412.html', 1, 'Solving by sequential variable elimination (QR and Cholesky)']\n ]],\n ['quaternion_3', ['quaternion', ['../a03228.html#a9f6c4e458645b64d2a38282ed7fdd825', 1, 'gtsam::Rot3::Quaternion()'],\n ['../a04196.html#aa0bdee90f949dc61e8e9ce0c631b0809', 1, 'gtsam::NavState::quaternion()']\n ]],\n- ['quaternion_2eh_4', ['Quaternion.h', ['../a00401.html', 1, '']]]\n+ ['quaternion_2eh_4', ['Quaternion.h', ['../a00458.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_13.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_13.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -68,26 +68,26 @@\n ['../a04008.html#aef13b780689c4a3e45dc9ae4e1154a25', 1, 'gtsam::RegularHessianFactor::RegularHessianFactor(const RegularJacobianFactor< D > &jf)'],\n ['../a04008.html#ab50690c5b18b531c590bf02777f48f97', 1, 'gtsam::RegularHessianFactor::RegularHessianFactor(const KEYS &keys, const SymmetricBlockMatrix &augmentedInformation)'],\n ['../a04008.html#a6bf59fdc2fcc8ef982a624866997e40d', 1, 'gtsam::RegularHessianFactor::RegularHessianFactor(Key j1, Key j2, Key j3, const MatrixD &G11, const MatrixD &G12, const MatrixD &G13, const VectorD &g1, const MatrixD &G22, const MatrixD &G23, const VectorD &g2, const MatrixD &G33, const VectorD &g3, double f)'],\n ['../a04008.html', 1, 'gtsam::RegularHessianFactor< D >'],\n ['../a04008.html#ae70fc62e57d66f8b30c082a74356b754', 1, 'gtsam::RegularHessianFactor::RegularHessianFactor(Key j1, Key j2, const MatrixD &G11, const MatrixD &G12, const VectorD &g1, const MatrixD &G22, const VectorD &g2, double f)'],\n ['../a04008.html#aceacc209ee0628bae0e7da7d6f03b15f', 1, 'gtsam::RegularHessianFactor::RegularHessianFactor(const KeyVector &js, const std::vector< Matrix > &Gs, const std::vector< Vector > &gs, double f)']\n ]],\n- ['regularhessianfactor_2eh_26', ['RegularHessianFactor.h', ['../a00710.html', 1, '']]],\n+ ['regularhessianfactor_2eh_26', ['RegularHessianFactor.h', ['../a00866.html', 1, '']]],\n ['regularimplicitschurfactor_27', ['regularimplicitschurfactor', ['../a04912.html', 1, 'gtsam::RegularImplicitSchurFactor< CAMERA >'],\n ['../a04912.html#a282852bf3235bd03329556de26e91869', 1, 'gtsam::RegularImplicitSchurFactor::RegularImplicitSchurFactor(const KeyVector &keys, const FBlocks &Fs, const Matrix &E, const Matrix &P, const Vector &b)'],\n ['../a04912.html#a3118fa6535b6cafacd6b2f07b6f7156c', 1, 'gtsam::RegularImplicitSchurFactor::RegularImplicitSchurFactor()']\n ]],\n- ['regularimplicitschurfactor_2eh_28', ['RegularImplicitSchurFactor.h', ['../a01286.html', 1, '']]],\n+ ['regularimplicitschurfactor_2eh_28', ['RegularImplicitSchurFactor.h', ['../a01328.html', 1, '']]],\n ['regularjacobianfactor_29', ['regularjacobianfactor', ['../a04016.html', 1, 'gtsam::RegularJacobianFactor< D >'],\n ['../a04016.html#aef8d95559114ea3a3a2ca912994bf923', 1, 'gtsam::RegularJacobianFactor::RegularJacobianFactor(const KEYS &keys, const VerticalBlockMatrix &augmentedMatrix, const SharedDiagonal &sigmas=SharedDiagonal())'],\n ['../a04016.html#ad915ad01a506fff9ef5cedc072bd70da', 1, 'gtsam::RegularJacobianFactor::RegularJacobianFactor(const TERMS &terms, const Vector &b, const SharedDiagonal &model=SharedDiagonal())'],\n ['../a04016.html#ae43bf2cf406f9b68d7aebce9cb7a025a', 1, 'gtsam::RegularJacobianFactor::RegularJacobianFactor()']\n ]],\n- ['regularjacobianfactor_2eh_30', ['RegularJacobianFactor.h', ['../a00773.html', 1, '']]],\n+ ['regularjacobianfactor_2eh_30', ['RegularJacobianFactor.h', ['../a00743.html', 1, '']]],\n ['rekey_31', ['rekey', ['../a04444.html#a6f6ca31f919023c288ef80d8cf580d60', 1, 'gtsam::LinearContainerFactor::rekey(const KeyVector &new_keys) const override'],\n ['../a04444.html#a3d393813c52b8598feb1fdf54ee77c99', 1, 'gtsam::LinearContainerFactor::rekey(const std::map< Key, Key > &rekey_mapping) const override'],\n ['../a04496.html#a659931523972a6bbc9742d89ba09ace2', 1, 'gtsam::NonlinearFactor::rekey(const std::map< Key, Key > &rekey_mapping) const'],\n ['../a04496.html#af7399735ffc6d044195c67a414865e57', 1, 'gtsam::NonlinearFactor::rekey(const KeyVector &new_keys) const'],\n ['../a04540.html#a5ef04effe8cd7b6461cb6bf58edabf45', 1, 'gtsam::NonlinearFactorGraph::rekey()']\n ]],\n ['relativebearing_32', ['relativeBearing', ['../a03212.html#a63d13689284fa19a2d0299b0b2529bfc', 1, 'gtsam::Rot2']]],\n@@ -207,39 +207,39 @@\n ['../a03584.html#a335b2e576f841c10c6cf722214c5799e', 1, 'gtsam::EliminationTree::roots_']\n ]],\n ['rot2_88', ['rot2', ['../a03212.html', 1, 'gtsam::Rot2'],\n ['../a03212.html#ae1383d61756e94cd2cbb837a00078ee2', 1, 'gtsam::Rot2::Rot2()'],\n ['../a03212.html#aec86a74ee72b1d982db5023f4add4fc3', 1, 'gtsam::Rot2::Rot2(const Rot2 &r)'],\n ['../a03212.html#acda969716a9ad7e96bc817a22eefe83d', 1, 'gtsam::Rot2::Rot2(double theta)']\n ]],\n- ['rot2_2ecpp_89', ['Rot2.cpp', ['../a00422.html', 1, '']]],\n- ['rot2_2eh_90', ['Rot2.h', ['../a00395.html', 1, '']]],\n+ ['rot2_2ecpp_89', ['Rot2.cpp', ['../a00344.html', 1, '']]],\n+ ['rot2_2eh_90', ['Rot2.h', ['../a00413.html', 1, '']]],\n ['rot3_91', ['rot3', ['../a03228.html#a790096d9b3f1cd0d90a723915339d847', 1, 'gtsam::Rot3::Rot3()'],\n ['../a03228.html#a5e063e8687e36f5dbaa3281b488a5f37', 1, 'gtsam::Rot3::Rot3(const Point3 &col1, const Point3 &col2, const Point3 &col3)'],\n ['../a03228.html#a933c42065af5ea1e1e3fdcd71451cd23', 1, 'gtsam::Rot3::Rot3(double R11, double R12, double R13, double R21, double R22, double R23, double R31, double R32, double R33)'],\n ['../a03228.html', 1, 'gtsam::Rot3'],\n ['../a03228.html#ae445466f4653469da9c2122f3ec34cd9', 1, 'gtsam::Rot3::Rot3(const Eigen::MatrixBase< Derived > &R)'],\n ['../a03228.html#a6b994c07306b4bd7b5e327d43826b750', 1, 'gtsam::Rot3::Rot3(const Matrix3 &R)'],\n ['../a03228.html#ab681d4d2916e7390b30239312aaf373f', 1, 'gtsam::Rot3::Rot3(const SO3 &R)'],\n ['../a03228.html#a439f4b2a000a5d1a1db1a493222ad2ec', 1, 'gtsam::Rot3::Rot3(const Quaternion &q)']\n ]],\n- ['rot3_2ecpp_92', ['Rot3.cpp', ['../a00449.html', 1, '']]],\n- ['rot3_2eh_93', ['Rot3.h', ['../a00332.html', 1, '']]],\n+ ['rot3_2ecpp_92', ['Rot3.cpp', ['../a00347.html', 1, '']]],\n+ ['rot3_2eh_93', ['Rot3.h', ['../a00287.html', 1, '']]],\n ['rot3attitudefactor_94', ['rot3attitudefactor', ['../a04084.html', 1, 'gtsam::Rot3AttitudeFactor'],\n ['../a04084.html#a6cf360ba0e94862339fadb61ce232c49', 1, 'gtsam::Rot3AttitudeFactor::Rot3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model, const Unit3 &bRef=Unit3(0, 0, 1))'],\n ['../a04084.html#a4e4f004110e20207646c5ed97065910f', 1, 'gtsam::Rot3AttitudeFactor::Rot3AttitudeFactor()']\n ]],\n- ['rot3m_2ecpp_95', ['Rot3M.cpp', ['../a00341.html', 1, '']]],\n- ['rot3q_2ecpp_96', ['Rot3Q.cpp', ['../a00302.html', 1, '']]],\n+ ['rot3m_2ecpp_95', ['Rot3M.cpp', ['../a00299.html', 1, '']]],\n+ ['rot3q_2ecpp_96', ['Rot3Q.cpp', ['../a00380.html', 1, '']]],\n ['rot3vector_97', ['Rot3Vector', ['../a01428.html#a52e26554234edf7de94a5e43dd0bcbf9', 1, 'gtsam']]],\n ['rotate_98', ['rotate', ['../a03068.html#af9a4340182f05a4d1706d3c1ca5cc678', 1, 'gtsam::EssentialMatrix::rotate()'],\n ['../a03212.html#a2519597142ae3cb4c8dcedf11424bc69', 1, 'gtsam::Rot2::rotate()'],\n ['../a03228.html#a89483be3c6be7b7aca15eea0be0f2bdd', 1, 'gtsam::Rot3::rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const'],\n ['../a03228.html#acb55146464dbf21a89e4cce324a2ae62', 1, 'gtsam::Rot3::rotate(const Unit3 &p, OptionalJacobian< 2, 3 > HR=boost::none, OptionalJacobian< 2, 2 > Hp=boost::none) const'],\n- ['../a00122.html#a644bbe6719d8dd756e11e8b3d2fd229a', 1, 'gtsam::testing::rotate()']\n+ ['../a00011.html#a644bbe6719d8dd756e11e8b3d2fd229a', 1, 'gtsam::testing::rotate()']\n ]],\n ['rotatedirectionsfactor_99', ['rotatedirectionsfactor', ['../a04924.html#a2b5ada837b7cc3b3c6d0c175535eb330', 1, 'gtsam::RotateDirectionsFactor::RotateDirectionsFactor()'],\n ['../a04924.html', 1, 'gtsam::RotateDirectionsFactor']\n ]],\n ['rotatefactor_100', ['rotatefactor', ['../a04920.html', 1, 'gtsam::RotateFactor'],\n ['../a04920.html#a27b0b48d60af56c8849a51e450e45718', 1, 'gtsam::RotateFactor::RotateFactor()']\n ]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_14.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_14.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -34,18 +34,18 @@\n ['../a04020.html#a3c39257c64dd6f95fdc173aed274c724', 1, 'gtsam::Sampler::sampleDiagonal(const Vector &sigmas) const']\n ]],\n ['sampleinplace_6', ['sampleInPlace', ['../a02832.html#a9f46a6b647df05d8cb061f45e9e21dcf', 1, 'gtsam::DiscreteConditional']]],\n ['sampler_7', ['sampler', ['../a04020.html', 1, 'gtsam::Sampler'],\n ['../a04020.html#a0e799f78224c4853560f87c293e14470', 1, 'gtsam::Sampler::Sampler(const noiseModel::Diagonal::shared_ptr &model, uint_fast64_t seed=42u)'],\n ['../a04020.html#a9b01291ff045243d1c73b112e36ea0a7', 1, 'gtsam::Sampler::Sampler(const Vector &sigmas, uint_fast64_t seed=42u)']\n ]],\n- ['sampler_2ecpp_8', ['Sampler.cpp', ['../a00782.html', 1, '']]],\n- ['sampler_2eh_9', ['Sampler.h', ['../a00758.html', 1, '']]],\n+ ['sampler_2ecpp_8', ['Sampler.cpp', ['../a00704.html', 1, '']]],\n+ ['sampler_2eh_9', ['Sampler.h', ['../a00707.html', 1, '']]],\n ['save_10', ['save', ['../a01428.html#a09f2bbdb9f9d633542362dbe8d79f9ab', 1, 'gtsam::save()'],\n- ['../a00104.html#a068f1f8df2afd609744bc82386259e71', 1, 'boost::serialization::save()'],\n+ ['../a00038.html#a068f1f8df2afd609744bc82386259e71', 1, 'boost::serialization::save()'],\n ['../a01428.html#a3eb7eed9019d3fda8fcf74fbf85b85c9', 1, 'gtsam::save(const Matrix &A, const std::string &s, const std::string &filename)']\n ]],\n ['save2d_11', ['save2D', ['../a01428.html#acfe516bc2d9ca4cc4530dd3b8460ce3d', 1, 'gtsam']]],\n ['savegraph_12', ['savegraph', ['../a03540.html#af1e2601e723e63fc361bcf8a183e95c4', 1, 'gtsam::BayesTree::saveGraph()'],\n ['../a03496.html#a863a1d2d2344bbf0ee57c1274ac8f4c4', 1, 'gtsam::HybridNonlinearISAM::saveGraph()'],\n ['../a03524.html#af845e20d32a8ba1d1f7b15e443e1b780', 1, 'gtsam::FactorGraph::saveGraph()'],\n ['../a04540.html#a9595ec6f743d18762bf758cffc394472', 1, 'gtsam::NonlinearFactorGraph::saveGraph()'],\n@@ -65,20 +65,20 @@\n ['scaleinplace_18', ['scaleInPlace', ['../a04064.html#a4f2989ccac9bedea447d947e4cc47135', 1, 'gtsam::VectorValues']]],\n ['scaling_19', ['Scaling', ['../a02996.html#ab48aea9600cf16d6a377aa9cceeec838', 1, 'gtsam::Cal3Fisheye']]],\n ['scatter_20', ['scatter', ['../a04028.html', 1, 'gtsam::Scatter'],\n ['../a04028.html#af5136cc8acb2902c1f17c2a7e463ecb4', 1, 'gtsam::Scatter::Scatter(const GaussianFactorGraph &gfg, const Ordering &ordering)'],\n ['../a04028.html#a2486845fa12d82fbd7b84427d8d5832e', 1, 'gtsam::Scatter::Scatter(const GaussianFactorGraph &gfg)'],\n ['../a04028.html#ad4220161208c55a3e426b0b078567a4b', 1, 'gtsam::Scatter::Scatter()']\n ]],\n- ['scatter_2ecpp_21', ['Scatter.cpp', ['../a00764.html', 1, '']]],\n- ['scatter_2eh_22', ['Scatter.h', ['../a00791.html', 1, '']]],\n+ ['scatter_2ecpp_21', ['Scatter.cpp', ['../a00806.html', 1, '']]],\n+ ['scatter_2eh_22', ['Scatter.h', ['../a00779.html', 1, '']]],\n ['scenario_23', ['Scenario', ['../a04224.html', 1, 'gtsam']]],\n- ['scenario_2eh_24', ['Scenario.h', ['../a00971.html', 1, '']]],\n+ ['scenario_2eh_24', ['Scenario.h', ['../a00914.html', 1, '']]],\n ['scenariorunner_25', ['ScenarioRunner', ['../a04236.html', 1, 'gtsam']]],\n- ['scenariorunner_2eh_26', ['ScenarioRunner.h', ['../a00995.html', 1, '']]],\n+ ['scenariorunner_2eh_26', ['ScenarioRunner.h', ['../a00938.html', 1, '']]],\n ['schurcomplement_27', ['schurcomplement', ['../a03044.html#aafc7e8babf561cdd10bcaa72e80e39bb', 1, 'gtsam::CameraSet::SchurComplement(const FBlocks &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)'],\n ['../a03044.html#a3c2a77c489168d59c4b4a465dd825774', 1, 'gtsam::CameraSet::SchurComplement(const FBlocks &Fblocks, const Matrix &E, const Vector &b, const double lambda=0.0, bool diagonalDamping=false)'],\n ['../a03044.html#aa3d01f89448ff9022e5749c4dc84031a', 1, 'gtsam::CameraSet::SchurComplement(const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)']\n ]],\n ['schurcomplementandrearrangeblocks_28', ['SchurComplementAndRearrangeBlocks', ['../a03044.html#aa0e9b151af69adaf352f6e2ff4cd64cd', 1, 'gtsam::CameraSet']]],\n ['sdgraph_29', ['SDGraph', ['../a03616.html', 1, 'gtsam']]],\n ['secs_30', ['secs', ['../a02516.html#a5f6bd0d92720bb07ead3c590b7483fb9', 1, 'gtsam::internal::TimingOutline']]],\n@@ -90,16 +90,16 @@\n ['sendable_33', ['sendable', ['../a04496.html#a9959dc6860b3e2624498ccbd457e290b', 1, 'gtsam::NonlinearFactor::sendable()'],\n ['../a04248.html#afd0394a184c062583c4cf0cb21c8e05b', 1, 'gtsam::CustomFactor::sendable()']\n ]],\n ['separator_5fsetminus_5fb_34', ['separator_setminus_B', ['../a03552.html#acf1ef12f8527f4c2c708ef158362949d', 1, 'gtsam::BayesTreeCliqueBase']]],\n ['separatormarginal_35', ['separatorMarginal', ['../a03552.html#a991d9ea46836f7fe8eda6e1569cee16e', 1, 'gtsam::BayesTreeCliqueBase']]],\n ['sequence_36', ['Sequence', ['../a01428.html#a24ec5d6ec6b211d0cbaf645c11c198de', 1, 'gtsam']]],\n ['sequential_20variable_20elimination_20qr_20and_20cholesky_37', ['Solving by sequential variable elimination (QR and Cholesky)', ['../a01412.html', 1, '']]],\n- ['serialization_2eh_38', ['serialization.h', ['../a00092.html', 1, '']]],\n- ['serializationtesthelpers_2eh_39', ['serializationTestHelpers.h', ['../a00134.html', 1, '']]],\n+ ['serialization_2eh_38', ['serialization.h', ['../a00062.html', 1, '']]],\n+ ['serializationtesthelpers_2eh_39', ['serializationTestHelpers.h', ['../a00149.html', 1, '']]],\n ['serialize_40', ['serialize', ['../a01428.html#a332bad7d1e70d3c04ceca35adce7a134', 1, 'gtsam::serialize(const T &input)'],\n ['../a01428.html#a2e0b14126ed42ee95ca5f5f092c5bc84', 1, 'gtsam::serialize(Archive &ar, SO3 &R, const unsigned int)'],\n ['../a01428.html#a76855a1214bf05a8704ee3deaece6339', 1, 'gtsam::serialize(Archive &ar, SO4 &Q, const unsigned int)'],\n ['../a01428.html#ac1829b506847127f406c0d6182fc0cdd', 1, 'gtsam::serialize(Archive &ar, SOn &Q, const unsigned int file_version)']\n ]],\n ['serializebinary_41', ['serializeBinary', ['../a01428.html#abb476c3e77878f7e0f70dd51871f48e7', 1, 'gtsam']]],\n ['serializetobinaryfile_42', ['serializeToBinaryFile', ['../a01428.html#abdff0a4b4fdf0e609aa62fb8d8b1dbba', 1, 'gtsam']]],\n@@ -139,21 +139,21 @@\n ['setzero_70', ['setzero', ['../a02472.html#a35e66b194fff325549ff61c615381706', 1, 'gtsam::SymmetricBlockMatrix::setZero()'],\n ['../a02752.html#a4a0bde5ab596ae385a8e0e5e36b7e7a8', 1, 'gtsam::ParameterMatrix::setZero()'],\n ['../a04064.html#aa1cfe6450708f9494faa02f8fff1aecc', 1, 'gtsam::VectorValues::setZero()']\n ]],\n ['sfm_71', ['SFM', ['../a01423.html', 1, '']]],\n ['sfmcamera_72', ['SfmCamera', ['../a01428.html#acab0207730cf78822bdf274b50739d31', 1, 'gtsam']]],\n ['sfmdata_73', ['SfmData', ['../a04704.html', 1, 'gtsam']]],\n- ['sfmdata_2ecpp_74', ['SfmData.cpp', ['../a01220.html', 1, '']]],\n- ['sfmdata_2eh_75', ['SfmData.h', ['../a01199.html', 1, '']]],\n+ ['sfmdata_2ecpp_74', ['SfmData.cpp', ['../a01211.html', 1, '']]],\n+ ['sfmdata_2eh_75', ['SfmData.h', ['../a01202.html', 1, '']]],\n ['sfmfactorgraph_76', ['sfmFactorGraph', ['../a04704.html#a049f72237be36c03d8aa6274e32a22c3', 1, 'gtsam::SfmData']]],\n ['sfmmeasurement_77', ['SfmMeasurement', ['../a01428.html#a9ad7940245bbbf4bf25d1dc4690b0108', 1, 'gtsam']]],\n ['sfmtrack_78', ['SfmTrack', ['../a04716.html', 1, 'gtsam']]],\n ['sfmtrack_2ecpp_79', ['SfmTrack.cpp', ['../a01217.html', 1, '']]],\n- ['sfmtrack_2eh_80', ['SfmTrack.h', ['../a01226.html', 1, '']]],\n+ ['sfmtrack_2eh_80', ['SfmTrack.h', ['../a01214.html', 1, '']]],\n ['sfmtrack2d_81', ['SfmTrack2d', ['../a04712.html', 1, 'gtsam']]],\n ['sgraph_82', ['SGraph', ['../a03620.html', 1, 'gtsam']]],\n ['shared_5fptr_83', ['shared_ptr', ['../a04952.html#a33861baa58b6f65cd13365f4fd50811a', 1, 'gtsam::SmartProjectionRigFactor::shared_ptr'],\n ['../a04960.html#a77ec7f1a8e17a46ad0a6e0d092b2549f', 1, 'gtsam::GenericStereoFactor::shared_ptr'],\n ['../a04896.html#ad3d894b6b0ae69d0623f6f45272acb0a', 1, 'gtsam::GenericProjectionFactor::shared_ptr'],\n ['../a04944.html#a28d8d11331b16d38d35f40d63bcb2853', 1, 'gtsam::SmartProjectionPoseFactor::shared_ptr'],\n ['../a04936.html#af14bb9ba7f4664d710079353501204a1', 1, 'gtsam::SmartProjectionFactor::shared_ptr'],\n@@ -226,29 +226,29 @@\n ['sharednode_90', ['sharednode', ['../a03584.html#ae60100edf4d90ad45a02a2f21be46e25', 1, 'gtsam::EliminationTree::sharedNode'],\n ['../a03540.html#a79ce1db45ce48b1006397de1f7af923e', 1, 'gtsam::BayesTree::sharedNode']\n ]],\n ['sharednoisemodel_91', ['SharedNoiseModel', ['../a01428.html#ab6e5a4884342656e0837ef07008ec03f', 1, 'gtsam']]],\n ['shonanaveraging_92', ['shonanaveraging', ['../a04732.html#aaf8a29eafed5a8a6fd587386dcc16800', 1, 'gtsam::ShonanAveraging::ShonanAveraging()'],\n ['../a04732.html', 1, 'gtsam::ShonanAveraging< d >']\n ]],\n- ['shonanaveraging_2ecpp_93', ['ShonanAveraging.cpp', ['../a01208.html', 1, '']]],\n- ['shonanaveraging_2eh_94', ['ShonanAveraging.h', ['../a01196.html', 1, '']]],\n+ ['shonanaveraging_2ecpp_93', ['ShonanAveraging.cpp', ['../a01232.html', 1, '']]],\n+ ['shonanaveraging_2eh_94', ['ShonanAveraging.h', ['../a01187.html', 1, '']]],\n ['shonanaveraging2_95', ['ShonanAveraging2', ['../a04736.html', 1, 'gtsam']]],\n ['shonanaveraging3_96', ['ShonanAveraging3', ['../a04740.html', 1, 'gtsam']]],\n ['shonanaveraging_3c_202_20_3e_97', ['ShonanAveraging< 2 >', ['../a04732.html', 1, 'gtsam']]],\n ['shonanaveraging_3c_203_20_3e_98', ['ShonanAveraging< 3 >', ['../a04732.html', 1, 'gtsam']]],\n ['shonanaveragingparameters_99', ['ShonanAveragingParameters', ['../a04728.html', 1, 'gtsam']]],\n ['shonanfactor_100', ['shonanfactor', ['../a04744.html', 1, 'gtsam::ShonanFactor< d >'],\n ['../a04744.html#ae70223be76f2bbce2cab7a2a1f912322', 1, 'gtsam::ShonanFactor::ShonanFactor()']\n ]],\n- ['shonanfactor_2eh_101', ['ShonanFactor.h', ['../a01187.html', 1, '']]],\n+ ['shonanfactor_2eh_101', ['ShonanFactor.h', ['../a01208.html', 1, '']]],\n ['shonangaugefactor_102', ['shonangaugefactor', ['../a04748.html', 1, 'gtsam::ShonanGaugeFactor'],\n ['../a04748.html#af066e4ba178cc6af9a3163f005d4deea', 1, 'gtsam::ShonanGaugeFactor::ShonanGaugeFactor()']\n ]],\n- ['shonangaugefactor_2eh_103', ['ShonanGaugeFactor.h', ['../a01214.html', 1, '']]],\n+ ['shonangaugefactor_2eh_103', ['ShonanGaugeFactor.h', ['../a01190.html', 1, '']]],\n ['shortcut_104', ['shortcut', ['../a03552.html#a9edb268cc435f7b2a0c254df1404904b', 1, 'gtsam::BayesTreeCliqueBase']]],\n ['shortcut_5findices_105', ['shortcut_indices', ['../a03552.html#ab3ed1131e643eb5b93220129cf84c681', 1, 'gtsam::BayesTreeCliqueBase']]],\n ['siftindex_106', ['siftindex', ['../a01428.html#a21a02e01a9608ce6cade24c1366b208c', 1, 'gtsam::SiftIndex'],\n ['../a04712.html#a8c995c6aeb473a35c84f6a3e872d3b44', 1, 'gtsam::SfmTrack2d::siftIndex(size_t idx) const']\n ]],\n ['siftindices_107', ['siftIndices', ['../a04712.html#a5c92bb2b24444a025cf93fc5bba23d99', 1, 'gtsam::SfmTrack2d']]],\n ['sigma_108', ['sigma', ['../a03936.html#a6f34496ff6924bd5552c77810e991015', 1, 'gtsam::noiseModel::Isotropic::Sigma()'],\n@@ -262,36 +262,36 @@\n ]],\n ['sigmas_5f_110', ['sigmas_', ['../a03928.html#a40cec73d5792d6ff6345de2207e571b1', 1, 'gtsam::noiseModel::Diagonal']]],\n ['signature_111', ['signature', ['../a02912.html#a3ad921ac92454eb5397709294082ce8c', 1, 'gtsam::Signature::Signature()'],\n ['../a02912.html', 1, 'gtsam::Signature'],\n ['../a02912.html#af3779ce6134fad3a652ba6c13e85fe45', 1, 'gtsam::Signature::Signature(const DiscreteKey &key, const DiscreteKeys &parents, const std::string &spec)'],\n ['../a02912.html#aa3b9d42f1dcb5a49a0b0fbdbdadea4b8', 1, 'gtsam::Signature::Signature(const DiscreteKey &key, const DiscreteKeys &parents, const Table &table)']\n ]],\n- ['signature_2ecpp_112', ['Signature.cpp', ['../a00182.html', 1, '']]],\n- ['signature_2eh_113', ['Signature.h', ['../a00248.html', 1, '']]],\n+ ['signature_2ecpp_112', ['Signature.cpp', ['../a00209.html', 1, '']]],\n+ ['signature_2eh_113', ['Signature.h', ['../a00191.html', 1, '']]],\n ['similarity2_114', ['similarity2', ['../a03248.html', 1, 'gtsam::Similarity2'],\n ['../a03248.html#a0e1fb0f274303fa3e9a1b0ab25b91a7e', 1, 'gtsam::Similarity2::Similarity2(const Matrix3 &T)'],\n ['../a03248.html#ae75581d904a71b93d047007518be04a1', 1, 'gtsam::Similarity2::Similarity2(const Rot2 &R, const Point2 &t, double s)'],\n ['../a03248.html#acd5f6dd825f95df356877ddba87555eb', 1, 'gtsam::Similarity2::Similarity2(double s)'],\n ['../a03248.html#af0c181f7816a5de150141de9759b02b4', 1, 'gtsam::Similarity2::Similarity2()'],\n ['../a03248.html#a0608704b134133132d26c332bd5a44aa', 1, 'gtsam::Similarity2::Similarity2(const Matrix2 &R, const Vector2 &t, double s)']\n ]],\n- ['similarity2_2ecpp_115', ['Similarity2.cpp', ['../a00386.html', 1, '']]],\n- ['similarity2_2eh_116', ['Similarity2.h', ['../a00461.html', 1, '']]],\n+ ['similarity2_2ecpp_115', ['Similarity2.cpp', ['../a00473.html', 1, '']]],\n+ ['similarity2_2eh_116', ['Similarity2.h', ['../a00455.html', 1, '']]],\n ['similarity3_117', ['similarity3', ['../a03264.html', 1, 'gtsam::Similarity3'],\n ['../a03264.html#ad3203c1d4df89ae786dd7dc5263fdcca', 1, 'gtsam::Similarity3::Similarity3(const Matrix4 &T)'],\n ['../a03264.html#a62d827f2276a6c98b47d9b5724f01a45', 1, 'gtsam::Similarity3::Similarity3(const Matrix3 &R, const Vector3 &t, double s)'],\n ['../a03264.html#a7e69a343835c52aee6ada8a48a2e9680', 1, 'gtsam::Similarity3::Similarity3(const Rot3 &R, const Point3 &t, double s)'],\n ['../a03264.html#a37c7935249173dbef177d1615fa47c21', 1, 'gtsam::Similarity3::Similarity3(double s)'],\n ['../a03264.html#a5bd853342d60651fc03695e950564a47', 1, 'gtsam::Similarity3::Similarity3()']\n ]],\n- ['similarity3_2ecpp_118', ['Similarity3.cpp', ['../a00311.html', 1, '']]],\n- ['similarity3_2eh_119', ['Similarity3.h', ['../a00329.html', 1, '']]],\n- ['simplecamera_2ecpp_120', ['SimpleCamera.cpp', ['../a00365.html', 1, '']]],\n- ['simplecamera_2eh_121', ['SimpleCamera.h', ['../a00425.html', 1, '']]],\n+ ['similarity3_2ecpp_118', ['Similarity3.cpp', ['../a00338.html', 1, '']]],\n+ ['similarity3_2eh_119', ['Similarity3.h', ['../a00314.html', 1, '']]],\n+ ['simplecamera_2ecpp_120', ['SimpleCamera.cpp', ['../a00410.html', 1, '']]],\n+ ['simplecamera_2eh_121', ['SimpleCamera.h', ['../a00293.html', 1, '']]],\n ['simulatemeasurements_122', ['SimulateMeasurements', ['../a04756.html#a40209e65971ae772ef42a3f3c294c18d', 1, 'gtsam::TranslationRecovery']]],\n ['size_123', ['size', ['../a03540.html#a92e98e84352bb66ac0c2a522cbf5f810', 1, 'gtsam::BayesTree::size()'],\n ['../a03592.html#afac01740aefd22f4f90f49767010f811', 1, 'gtsam::Factor::size()'],\n ['../a03524.html#a76fb453800c9ac164bef864782733403', 1, 'gtsam::FactorGraph::size()'],\n ['../a03700.html#a7e83a7dee6daaa33da9d69b34e5426f4', 1, 'gtsam::VariableIndex::size()'],\n ['../a04064.html#a6c3f7a36fa68c97d2917864dff20b1c6', 1, 'gtsam::VectorValues::size()'],\n ['../a04612.html#a7a174b26fa9c7fa5ad7fbfadae99390a', 1, 'gtsam::Values::size()']\n@@ -305,77 +305,77 @@\n ['../a03180.html#abaa429a23d9aded9a79f4b73b55d4531', 1, 'gtsam::Pose3::slerp()']\n ]],\n ['slotentry_128', ['SlotEntry', ['../a04024.html', 1, 'gtsam']]],\n ['smartfactorbase_129', ['smartfactorbase', ['../a04928.html#ab0b82f1117c0a27386839f27366833cb', 1, 'gtsam::SmartFactorBase::SmartFactorBase(const SharedNoiseModel &sharedNoiseModel, boost::optional< Pose3 > body_P_sensor=boost::none, size_t expectedNumberCameras=10)'],\n ['../a04928.html#a9e455b56e44697ae925f0d1e7569e5c6', 1, 'gtsam::SmartFactorBase::SmartFactorBase()'],\n ['../a04928.html', 1, 'gtsam::SmartFactorBase< CAMERA >']\n ]],\n- ['smartfactorbase_2eh_130', ['SmartFactorBase.h', ['../a01316.html', 1, '']]],\n+ ['smartfactorbase_2eh_130', ['SmartFactorBase.h', ['../a01241.html', 1, '']]],\n ['smartfactorbase_3c_20pinholepose_3c_20calibration_20_3e_20_3e_131', ['SmartFactorBase< PinholePose< CALIBRATION > >', ['../a04928.html', 1, 'gtsam']]],\n- ['smartfactorparams_2eh_132', ['SmartFactorParams.h', ['../a01298.html', 1, '']]],\n+ ['smartfactorparams_2eh_132', ['SmartFactorParams.h', ['../a01295.html', 1, '']]],\n ['smartprojectionfactor_133', ['smartprojectionfactor', ['../a04936.html#ad3cae36bd7cb1b3031dd24509603270a', 1, 'gtsam::SmartProjectionFactor::SmartProjectionFactor(const SharedNoiseModel &sharedNoiseModel, const SmartProjectionParams &params=SmartProjectionParams())'],\n ['../a04936.html#afc54313a5ae848bd36184c969fbda36b', 1, 'gtsam::SmartProjectionFactor::SmartProjectionFactor()'],\n ['../a04936.html', 1, 'gtsam::SmartProjectionFactor< CAMERA >']\n ]],\n- ['smartprojectionfactor_2eh_134', ['SmartProjectionFactor.h', ['../a01331.html', 1, '']]],\n+ ['smartprojectionfactor_2eh_134', ['SmartProjectionFactor.h', ['../a01271.html', 1, '']]],\n ['smartprojectionfactor_3c_20pinholepose_3c_20calibration_20_3e_20_3e_135', ['SmartProjectionFactor< PinholePose< CALIBRATION > >', ['../a04936.html', 1, 'gtsam']]],\n ['smartprojectionparams_136', ['SmartProjectionParams', ['../a04932.html', 1, 'gtsam']]],\n ['smartprojectionposefactor_137', ['smartprojectionposefactor', ['../a04944.html#aceb2d76933a58312e2ddd0ef64f12cfd', 1, 'gtsam::SmartProjectionPoseFactor::SmartProjectionPoseFactor()'],\n ['../a04944.html#abcb92891b3d5fd2030b2c74a8349e268', 1, 'gtsam::SmartProjectionPoseFactor::SmartProjectionPoseFactor(const SharedNoiseModel &sharedNoiseModel, const boost::shared_ptr< CALIBRATION > K, const boost::optional< Pose3 > body_P_sensor, const SmartProjectionParams &params=SmartProjectionParams())'],\n ['../a04944.html#a165cf8ab1c71f9d685fc209dd6d672b8', 1, 'gtsam::SmartProjectionPoseFactor::SmartProjectionPoseFactor(const SharedNoiseModel &sharedNoiseModel, const boost::shared_ptr< CALIBRATION > K, const SmartProjectionParams &params=SmartProjectionParams())'],\n ['../a04944.html', 1, 'gtsam::SmartProjectionPoseFactor< CALIBRATION >']\n ]],\n- ['smartprojectionposefactor_2eh_138', ['SmartProjectionPoseFactor.h', ['../a01277.html', 1, '']]],\n+ ['smartprojectionposefactor_2eh_138', ['SmartProjectionPoseFactor.h', ['../a01289.html', 1, '']]],\n ['smartprojectionrigfactor_139', ['smartprojectionrigfactor', ['../a04952.html', 1, 'gtsam::SmartProjectionRigFactor< CAMERA >'],\n ['../a04952.html#accba552f7cdd30829a659bf9c05c0319', 1, 'gtsam::SmartProjectionRigFactor::SmartProjectionRigFactor(const SharedNoiseModel &sharedNoiseModel, const boost::shared_ptr< Cameras > &cameraRig, const SmartProjectionParams &params=SmartProjectionParams())'],\n ['../a04952.html#a4717072c5bb0a2b4da0a24194616ca22', 1, 'gtsam::SmartProjectionRigFactor::SmartProjectionRigFactor()']\n ]],\n- ['smartprojectionrigfactor_2eh_140', ['SmartProjectionRigFactor.h', ['../a01307.html', 1, '']]],\n+ ['smartprojectionrigfactor_2eh_140', ['SmartProjectionRigFactor.h', ['../a01292.html', 1, '']]],\n ['so_141', ['so', ['../a03304.html#af8ae2ed48dd298937f4c636f5b72daac', 1, 'gtsam::SO::SO(const Eigen::MatrixBase< Derived > &R)'],\n ['../a03304.html#a8d832b038655d584038bda81d277c68e', 1, 'gtsam::SO::SO(size_t n=0)'],\n ['../a03304.html#a948b05d57d6a1cd07fd6d1adbe3837c4', 1, 'gtsam::SO::SO()'],\n ['../a03304.html#a882950b6b03acbc05939f197d64c0137', 1, 'gtsam::SO::SO(const SO< M > &R)'],\n ['../a03304.html#af219a052f42764a57bc13e7116e2a65b', 1, 'gtsam::SO::SO(const Eigen::AngleAxisd &angleAxis)'],\n ['../a03304.html', 1, 'gtsam::SO< N >']\n ]],\n- ['so3_2ecpp_142', ['SO3.cpp', ['../a00434.html', 1, '']]],\n- ['so3_2eh_143', ['SO3.h', ['../a00470.html', 1, '']]],\n+ ['so3_2ecpp_142', ['SO3.cpp', ['../a00425.html', 1, '']]],\n+ ['so3_2eh_143', ['SO3.h', ['../a00461.html', 1, '']]],\n ['so4_2ecpp_144', ['SO4.cpp', ['../a00305.html', 1, '']]],\n- ['so4_2eh_145', ['SO4.h', ['../a00455.html', 1, '']]],\n+ ['so4_2eh_145', ['SO4.h', ['../a00374.html', 1, '']]],\n ['so_3c_203_20_3e_146', ['SO< 3 >', ['../a03304.html', 1, 'gtsam']]],\n ['solve_147', ['solve', ['../a03996.html#ac8f6d2ccb6eb14bdbe7fa15e6b175cb6', 1, 'gtsam::DummyPreconditioner::solve()'],\n ['../a04004.html#a9923c3532ea94c06718fbe2645b08f1f', 1, 'gtsam::BlockJacobiPreconditioner::solve()'],\n ['../a04052.html#a02992340072f87fb8b52404cef2ac08d', 1, 'gtsam::SubgraphPreconditioner::solve()'],\n ['../a04552.html#a541e8b6b63d4bce95e56cf043416e10f', 1, 'gtsam::NonlinearOptimizer::solve()'],\n ['../a03764.html#a846e8cb5bf501dbb30374d51abcc05fc', 1, 'gtsam::GaussianConditional::solve()'],\n ['../a03812.html#a08367080ea54ebc1e299d46fe2300d40', 1, 'gtsam::HessianFactor::solve()'],\n ['../a03988.html#a1487b9feccdfff75cf25cff86affb81b', 1, 'gtsam::Preconditioner::solve()']\n ]],\n ['solvetransposeinplace_148', ['solveTransposeInPlace', ['../a03764.html#adeeb4638b25106445e308ce636930903', 1, 'gtsam::GaussianConditional']]],\n ['solving_20by_20multifrontal_20variable_20elimination_20qr_20and_20cholesky_149', ['Solving by multifrontal variable elimination (QR and Cholesky)', ['../a01411.html', 1, '']]],\n ['solving_20by_20sequential_20variable_20elimination_20qr_20and_20cholesky_150', ['Solving by sequential variable elimination (QR and Cholesky)', ['../a01412.html', 1, '']]],\n ['solving_20of_20sparse_20linear_20systems_20with_20least_20squares_151', ['Solving of sparse linear systems with least-squares', ['../a01410.html', 1, '']]],\n- ['son_2dinl_2eh_152', ['SOn-inl.h', ['../a00290.html', 1, '']]],\n- ['son_2ecpp_153', ['SOn.cpp', ['../a00353.html', 1, '']]],\n- ['son_2eh_154', ['SOn.h', ['../a00344.html', 1, '']]],\n+ ['son_2dinl_2eh_152', ['SOn-inl.h', ['../a00449.html', 1, '']]],\n+ ['son_2ecpp_153', ['SOn.cpp', ['../a00440.html', 1, '']]],\n+ ['son_2eh_154', ['SOn.h', ['../a00389.html', 1, '']]],\n ['spacetonplane_155', ['spaceToNPlane', ['../a03008.html#a19b59abd92fb06e447e010b77cec3148', 1, 'gtsam::Cal3Unified']]],\n ['sparse_20linear_20systems_20with_20least_20squares_156', ['Solving of sparse linear systems with least-squares', ['../a01410.html', 1, '']]],\n ['sparseeigen_157', ['SparseEigen', ['../a01428.html#a52b9b28b076a8ae17d6d3d72ee1229c3', 1, 'gtsam']]],\n- ['sparseeigen_2eh_158', ['SparseEigen.h', ['../a00824.html', 1, '']]],\n+ ['sparseeigen_2eh_158', ['SparseEigen.h', ['../a00725.html', 1, '']]],\n ['sparsejacobian_159', ['sparsejacobian', ['../a03792.html#a2ec5f64848183b75a6a3470c0750aeaa', 1, 'gtsam::GaussianFactorGraph::sparseJacobian(const Ordering &ordering, size_t &nrows, size_t &ncols) const'],\n ['../a03792.html#a0335c868e15088cc174544d55c43ce5c', 1, 'gtsam::GaussianFactorGraph::sparseJacobian() const']\n ]],\n ['sparsejacobian_5f_160', ['sparseJacobian_', ['../a03792.html#a5856b8544f4d9b76be4b2d8f13807e09', 1, 'gtsam::GaussianFactorGraph']]],\n ['sparsejacobianeigen_161', ['sparseJacobianEigen', ['../a01428.html#aa9013a9053629f0c00b97726d9d8e19e', 1, 'gtsam']]],\n ['sphericalcamera_162', ['sphericalcamera', ['../a03324.html#acf4a115630b0719406b1b4e5a5c7f08b', 1, 'gtsam::SphericalCamera::SphericalCamera()'],\n ['../a03324.html#a3de3d8c42457b82f034d6a5931408089', 1, 'gtsam::SphericalCamera::SphericalCamera(const Pose3 &pose)'],\n ['../a03324.html#af767479d2af743775d65cb4e8373f06e', 1, 'gtsam::SphericalCamera::SphericalCamera(const Pose3 &pose, const EmptyCal::shared_ptr &cal)'],\n ['../a03324.html', 1, 'gtsam::SphericalCamera']\n ]],\n- ['sphericalcamera_2eh_163', ['SphericalCamera.h', ['../a00392.html', 1, '']]],\n+ ['sphericalcamera_2eh_163', ['SphericalCamera.h', ['../a00416.html', 1, '']]],\n ['split_164', ['split', ['../a02472.html#ae32a049470045f6dad02b91de2648e2d', 1, 'gtsam::SymmetricBlockMatrix::split()'],\n ['../a01428.html#a3453247aec1d8b4642947ffd4bca426b', 1, 'gtsam::split()']\n ]],\n ['splitconditional_165', ['splitConditional', ['../a03844.html#a1e2534e0283faad17ca8a4416b4a55c7', 1, 'gtsam::JacobianFactor']]],\n ['splitfactorgraph_166', ['splitFactorGraph', ['../a01428.html#a2c7eca9f27b43b52756c1afd85478dd8', 1, 'gtsam']]],\n ['splitgraph_167', ['splitGraph', ['../a04060.html#a75db0028b5e9efcf27c7d7b9206e4eaf', 1, 'gtsam::SubgraphSolver']]],\n ['sqrt_5finformation_5f_168', ['sqrt_information_', ['../a03924.html#a288d3c8bd743700bc19241361a32de01', 1, 'gtsam::noiseModel::Gaussian']]],\n@@ -398,49 +398,49 @@\n ['../a01428.html#aed4b2ca704ddd6530ea70122f883ac88', 1, 'gtsam::steepestDescent(const Matrix &A, const Vector &b, const Vector &x, const ConjugateGradientParameters &parameters)']\n ]],\n ['step_179', ['step', ['../a03852.html#a511b92f76e4d965f50f88a805af12ff8', 1, 'gtsam::KalmanFilter']]],\n ['stereocamera_180', ['stereocamera', ['../a03340.html#a0f564c53fc04f67cd6d801f53fd83050', 1, 'gtsam::StereoCamera::StereoCamera()'],\n ['../a03340.html#a8e6d34f7069c0c7e0caa6359d1b8aafe', 1, 'gtsam::StereoCamera::StereoCamera(const Pose3 &leftCamPose, const Cal3_S2Stereo::shared_ptr K)'],\n ['../a03340.html', 1, 'gtsam::StereoCamera']\n ]],\n- ['stereocamera_2eh_181', ['StereoCamera.h', ['../a00308.html', 1, '']]],\n+ ['stereocamera_2eh_181', ['StereoCamera.h', ['../a00341.html', 1, '']]],\n ['stereocheiralityexception_182', ['StereoCheiralityException', ['../a03336.html', 1, 'gtsam']]],\n- ['stereofactor_2eh_183', ['StereoFactor.h', ['../a01250.html', 1, '']]],\n+ ['stereofactor_2eh_183', ['StereoFactor.h', ['../a01316.html', 1, '']]],\n ['stereopoint2_184', ['stereopoint2', ['../a03352.html#a6e78d04be7be5824277957b807f29a67', 1, 'gtsam::StereoPoint2::StereoPoint2(double uL, double uR, double v)'],\n ['../a03352.html#af91933798181ce1bb4759a7f78900ed8', 1, 'gtsam::StereoPoint2::StereoPoint2()'],\n ['../a03352.html#a127f5a9bc07d0f81dc30f67d4eb6e3bd', 1, 'gtsam::StereoPoint2::StereoPoint2(const Vector3 &v)'],\n ['../a03352.html', 1, 'gtsam::StereoPoint2']\n ]],\n- ['stereopoint2_2ecpp_185', ['StereoPoint2.cpp', ['../a00440.html', 1, '']]],\n- ['stereopoint2_2eh_186', ['StereoPoint2.h', ['../a00479.html', 1, '']]],\n+ ['stereopoint2_2ecpp_185', ['StereoPoint2.cpp', ['../a00392.html', 1, '']]],\n+ ['stereopoint2_2eh_186', ['StereoPoint2.h', ['../a00422.html', 1, '']]],\n ['stiefel_187', ['stiefel', ['../a01428.html#a3e57e4771f13855a495ec2c6454c9121', 1, 'gtsam']]],\n ['stiefelelementmatrix_188', ['StiefelElementMatrix', ['../a04732.html#ac226dd643bb70588df2769f6e0c501f7', 1, 'gtsam::ShonanAveraging']]],\n ['storedtypeid_189', ['storedTypeId', ['../a04636.html#a20a8da2172f95796a00469b9fc6e29ff', 1, 'gtsam::ValuesIncorrectType']]],\n ['str_190', ['str', ['../a02568.html#a65a98f77981bd096f65841afb0215747', 1, 'gtsam::RedirectCout']]],\n ['streamedkey_191', ['StreamedKey', ['../a03656.html', 1, 'gtsam']]],\n ['string_192', ['string', ['../a03688.html#ae1aec5fcd0dcb406974eba027bd7926e', 1, 'gtsam::Symbol']]],\n ['sub_193', ['sub', ['../a01428.html#a9ae1d9fe2ccad044fbb88b5c1d9e035a', 1, 'gtsam']]],\n ['subgraph_194', ['Subgraph', ['../a04032.html', 1, 'gtsam']]],\n ['subgraphbuilder_195', ['SubgraphBuilder', ['../a04044.html', 1, 'gtsam']]],\n- ['subgraphbuilder_2ecpp_196', ['SubgraphBuilder.cpp', ['../a00893.html', 1, '']]],\n- ['subgraphbuilder_2eh_197', ['SubgraphBuilder.h', ['../a00770.html', 1, '']]],\n+ ['subgraphbuilder_2ecpp_196', ['SubgraphBuilder.cpp', ['../a00749.html', 1, '']]],\n+ ['subgraphbuilder_2eh_197', ['SubgraphBuilder.h', ['../a00830.html', 1, '']]],\n ['subgraphbuilderparameters_198', ['SubgraphBuilderParameters', ['../a04040.html', 1, 'gtsam']]],\n ['subgraphpreconditioner_199', ['subgraphpreconditioner', ['../a04052.html', 1, 'gtsam::SubgraphPreconditioner'],\n ['../a04052.html#adb6ce9538a99d6df6489c39908854ed8', 1, 'gtsam::SubgraphPreconditioner::SubgraphPreconditioner()']\n ]],\n- ['subgraphpreconditioner_2ecpp_200', ['SubgraphPreconditioner.cpp', ['../a00809.html', 1, '']]],\n- ['subgraphpreconditioner_2eh_201', ['SubgraphPreconditioner.h', ['../a00752.html', 1, '']]],\n+ ['subgraphpreconditioner_2ecpp_200', ['SubgraphPreconditioner.cpp', ['../a00836.html', 1, '']]],\n+ ['subgraphpreconditioner_2eh_201', ['SubgraphPreconditioner.h', ['../a00842.html', 1, '']]],\n ['subgraphpreconditionerparameters_202', ['SubgraphPreconditionerParameters', ['../a04048.html', 1, 'gtsam']]],\n ['subgraphsolver_203', ['subgraphsolver', ['../a04060.html', 1, 'gtsam::SubgraphSolver'],\n ['../a04060.html#aa12457ed7bc867c1489e1b43a21c5071', 1, 'gtsam::SubgraphSolver::SubgraphSolver(const GaussianBayesNet &Rc1, const GaussianFactorGraph &Ab2, const Parameters &parameters)'],\n ['../a04060.html#af46086c168ff100cdc44a226f2afa4ef', 1, 'gtsam::SubgraphSolver::SubgraphSolver(const GaussianFactorGraph &Ab1, const GaussianFactorGraph &Ab2, const Parameters &parameters, const Ordering &ordering)'],\n ['../a04060.html#aaa164e4b6a6b1c5601f6d2873409bcd7', 1, 'gtsam::SubgraphSolver::SubgraphSolver(const GaussianFactorGraph &A, const Parameters &parameters, const Ordering &ordering)']\n ]],\n- ['subgraphsolver_2ecpp_204', ['SubgraphSolver.cpp', ['../a00884.html', 1, '']]],\n- ['subgraphsolver_2eh_205', ['SubgraphSolver.h', ['../a00806.html', 1, '']]],\n+ ['subgraphsolver_2ecpp_204', ['SubgraphSolver.cpp', ['../a00851.html', 1, '']]],\n+ ['subgraphsolver_2eh_205', ['SubgraphSolver.h', ['../a00710.html', 1, '']]],\n ['subgraphsolverparameters_206', ['SubgraphSolverParameters', ['../a04056.html', 1, 'gtsam']]],\n ['subtract_207', ['subtract', ['../a04064.html#afa50905070c2baad15ac8ccdb45872ec', 1, 'gtsam::VectorValues']]],\n ['sum_208', ['sum', ['../a02760.html#a387bebf75e75a5d1b31759322c184a04', 1, 'gtsam::AlgebraicDecisionTree::sum()'],\n ['../a02808.html#a21a92514194030c43d23d7ad9d159099', 1, 'gtsam::DecisionTreeFactor::sum(const Ordering &keys) const'],\n ['../a02808.html#a98817134685693d2eeb11f3056835ec3', 1, 'gtsam::DecisionTreeFactor::sum(size_t nrFrontals) const'],\n ['../a02760.html#a12a2cd3038c73481b8af276cf5aeea25', 1, 'gtsam::AlgebraicDecisionTree::sum()']\n ]],\n@@ -455,15 +455,15 @@\n ['symbol_212', ['symbol', ['../a03688.html#a88bf5e78e1e38834c95c4626b904b991', 1, 'gtsam::Symbol::Symbol()'],\n ['../a03688.html', 1, 'gtsam::Symbol'],\n ['../a03688.html#a39830bf361caf4ed4d1ef0a613dc8179', 1, 'gtsam::Symbol::Symbol(Key key)'],\n ['../a03688.html#a6c9854ad92d889022fb2fc837efc0b36', 1, 'gtsam::Symbol::Symbol(const Symbol &key)'],\n ['../a03688.html#a70b4c41b784455578c4798dd6b3b3028', 1, 'gtsam::Symbol::Symbol()'],\n ['../a01428.html#a3bfdb8456463015b2dda092a5805a745', 1, 'gtsam::symbol()']\n ]],\n- ['symbol_2ecpp_213', ['Symbol.cpp', ['../a00590.html', 1, '']]],\n+ ['symbol_2ecpp_213', ['Symbol.cpp', ['../a00671.html', 1, '']]],\n ['symbol_2eh_214', ['symbol.h', ['../a08137.html', 1, '(Global Namespace)'],\n ['../a08140.html', 1, '(Global Namespace)']\n ]],\n ['symbolchr_215', ['symbolChr', ['../a01428.html#a9ca9499e881d22361b4833c2854d941f', 1, 'gtsam']]],\n ['symbolgenerator_216', ['SymbolGenerator', ['../a03692.html', 1, 'gtsam']]],\n ['symbolic_217', ['symbolic', ['../a01425.html', 1, 'Symbolic'],\n ['../a04540.html#a77c8ab235e4bfe0dbe15122b201ef7d0', 1, 'gtsam::NonlinearFactorGraph::symbolic()']\n@@ -472,77 +472,77 @@\n ['../a04972.html#a2f0b01d74776d1ad48876042c3293511', 1, 'gtsam::SymbolicBayesNet::SymbolicBayesNet(std::initializer_list< boost::shared_ptr< SymbolicConditional > > conditionals)'],\n ['../a04972.html#afc548bc1dcc40725de7424c80eebb839', 1, 'gtsam::SymbolicBayesNet::SymbolicBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)'],\n ['../a04972.html#a34708a62aafcaded4541d3bd4989fc52', 1, 'gtsam::SymbolicBayesNet::SymbolicBayesNet(const CONTAINER &conditionals)'],\n ['../a04972.html#a2be792589f4fcffb80276d5bdbd12b7b', 1, 'gtsam::SymbolicBayesNet::SymbolicBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)'],\n ['../a04972.html#a6bbc46aa18458037ff7d50567d19c4f6', 1, 'gtsam::SymbolicBayesNet::SymbolicBayesNet()'],\n ['../a04972.html', 1, 'gtsam::SymbolicBayesNet']\n ]],\n- ['symbolicbayesnet_2ecpp_219', ['SymbolicBayesNet.cpp', ['../a01391.html', 1, '']]],\n- ['symbolicbayesnet_2eh_220', ['SymbolicBayesNet.h', ['../a01382.html', 1, '']]],\n+ ['symbolicbayesnet_2ecpp_219', ['SymbolicBayesNet.cpp', ['../a01385.html', 1, '']]],\n+ ['symbolicbayesnet_2eh_220', ['SymbolicBayesNet.h', ['../a01373.html', 1, '']]],\n ['symbolicbayestree_221', ['symbolicbayestree', ['../a04984.html#ac3ed7fda6fb7d46fdfe0d064d8a473bc', 1, 'gtsam::SymbolicBayesTree::SymbolicBayesTree()'],\n ['../a04984.html', 1, 'gtsam::SymbolicBayesTree']\n ]],\n- ['symbolicbayestree_2eh_222', ['SymbolicBayesTree.h', ['../a01346.html', 1, '']]],\n+ ['symbolicbayestree_2eh_222', ['SymbolicBayesTree.h', ['../a01364.html', 1, '']]],\n ['symbolicbayestreeclique_223', ['SymbolicBayesTreeClique', ['../a04980.html', 1, 'gtsam']]],\n ['symboliccluster_224', ['SymbolicCluster', ['../a01428.html#ad78d0a5ba773ceac7ff253525032a15e', 1, 'gtsam']]],\n ['symbolicconditional_225', ['symbolicconditional', ['../a04996.html', 1, 'gtsam::SymbolicConditional'],\n ['../a04996.html#a0d9e9d5af1a6a10390b923f0cc8efe52', 1, 'gtsam::SymbolicConditional::SymbolicConditional(Key j, Key parent1, Key parent2, Key parent3)'],\n ['../a04996.html#a8215e2229254269e71210cb4b5d2cd60', 1, 'gtsam::SymbolicConditional::SymbolicConditional(Key j, Key parent1, Key parent2)'],\n ['../a04996.html#a77133cf0e119b7e0b0105c49f9677f59', 1, 'gtsam::SymbolicConditional::SymbolicConditional(Key j, Key parent)'],\n ['../a04996.html#a811ebc4f9eefbcf25fc2f40f66db8e39', 1, 'gtsam::SymbolicConditional::SymbolicConditional(Key j)'],\n ['../a04996.html#a3d5f37af8e07fc3cb93d9df0f611ab29', 1, 'gtsam::SymbolicConditional::SymbolicConditional()']\n ]],\n- ['symbolicconditional_2ecpp_226', ['SymbolicConditional.cpp', ['../a01358.html', 1, '']]],\n- ['symbolicconditional_2eh_227', ['SymbolicConditional.h', ['../a01367.html', 1, '']]],\n+ ['symbolicconditional_2ecpp_226', ['SymbolicConditional.cpp', ['../a01355.html', 1, '']]],\n+ ['symbolicconditional_2eh_227', ['SymbolicConditional.h', ['../a01370.html', 1, '']]],\n ['symboliceliminationtree_228', ['symboliceliminationtree', ['../a05004.html', 1, 'gtsam::SymbolicEliminationTree'],\n ['../a05004.html#a4b0d5a605d743a626c20b3c77975fb26', 1, 'gtsam::SymbolicEliminationTree::SymbolicEliminationTree(const SymbolicFactorGraph &factorGraph, const Ordering &order)'],\n ['../a05004.html#ad3172bf79260aa8bafae35b4e052beda', 1, 'gtsam::SymbolicEliminationTree::SymbolicEliminationTree(const SymbolicFactorGraph &factorGraph, const VariableIndex &structure, const Ordering &order)']\n ]],\n- ['symboliceliminationtree_2ecpp_229', ['SymbolicEliminationTree.cpp', ['../a01388.html', 1, '']]],\n- ['symboliceliminationtree_2eh_230', ['SymbolicEliminationTree.h', ['../a01349.html', 1, '']]],\n+ ['symboliceliminationtree_2ecpp_229', ['SymbolicEliminationTree.cpp', ['../a01349.html', 1, '']]],\n+ ['symboliceliminationtree_2eh_230', ['SymbolicEliminationTree.h', ['../a01388.html', 1, '']]],\n ['symbolicfactor_231', ['symbolicfactor', ['../a05012.html#a9fe89884fa91b96be1629188d5f14b7e', 1, 'gtsam::SymbolicFactor::SymbolicFactor()'],\n ['../a05012.html', 1, 'gtsam::SymbolicFactor'],\n ['../a05012.html#a9caf912ac889d5bb06f56e748d9aa71b', 1, 'gtsam::SymbolicFactor::SymbolicFactor(Key j)'],\n ['../a05012.html#a4dd708fdef64f6d583d8d428c52d1927', 1, 'gtsam::SymbolicFactor::SymbolicFactor(Key j1, Key j2, Key j3, Key j4)'],\n ['../a05012.html#a139996934bf8b51a68bfd9fe2dfca77c', 1, 'gtsam::SymbolicFactor::SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5, Key j6)'],\n ['../a05012.html#a3adb78452c43c569e8be957a27b68321', 1, 'gtsam::SymbolicFactor::SymbolicFactor(const Factor &factor)'],\n ['../a05012.html#ad5559a2e10e8ae2552ef91f3d8340849', 1, 'gtsam::SymbolicFactor::SymbolicFactor()'],\n ['../a05012.html#a629eccda3484b6e69877e0be2cda1c6a', 1, 'gtsam::SymbolicFactor::SymbolicFactor(Key j1, Key j2)'],\n ['../a05012.html#a99571a93b54a2e6b9659781777f29e80', 1, 'gtsam::SymbolicFactor::SymbolicFactor(Key j1, Key j2, Key j3)']\n ]],\n- ['symbolicfactor_2dinst_2eh_232', ['SymbolicFactor-inst.h', ['../a01376.html', 1, '']]],\n- ['symbolicfactor_2ecpp_233', ['SymbolicFactor.cpp', ['../a01355.html', 1, '']]],\n- ['symbolicfactor_2eh_234', ['SymbolicFactor.h', ['../a01370.html', 1, '']]],\n+ ['symbolicfactor_2dinst_2eh_232', ['SymbolicFactor-inst.h', ['../a01361.html', 1, '']]],\n+ ['symbolicfactor_2ecpp_233', ['SymbolicFactor.cpp', ['../a01376.html', 1, '']]],\n+ ['symbolicfactor_2eh_234', ['SymbolicFactor.h', ['../a01379.html', 1, '']]],\n ['symbolicfactorgraph_235', ['symbolicfactorgraph', ['../a05024.html#a338bedd4fba5574653271c1c8ced52b7', 1, 'gtsam::SymbolicFactorGraph::SymbolicFactorGraph()'],\n ['../a05024.html#acf44afb4ee8e78716fa02e9a3e678722', 1, 'gtsam::SymbolicFactorGraph::SymbolicFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)'],\n ['../a05024.html#a1ac432ab15bc9fa830b29fda44b15260', 1, 'gtsam::SymbolicFactorGraph::SymbolicFactorGraph(SymbolicFactor &&c)'],\n ['../a05024.html', 1, 'gtsam::SymbolicFactorGraph'],\n ['../a05024.html#af5e0ba26014cb8429f771c065e7959eb', 1, 'gtsam::SymbolicFactorGraph::SymbolicFactorGraph(const CONTAINER &factors)'],\n ['../a05024.html#a5ab82f082c3be929fcf44796de70b4f0', 1, 'gtsam::SymbolicFactorGraph::SymbolicFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)'],\n ['../a05024.html#a5c012af40cd8661b5971c83100141c60', 1, 'gtsam::SymbolicFactorGraph::SymbolicFactorGraph(std::initializer_list< boost::shared_ptr< SymbolicFactor > > sharedFactors)']\n ]],\n- ['symbolicfactorgraph_2ecpp_236', ['SymbolicFactorGraph.cpp', ['../a01352.html', 1, '']]],\n- ['symbolicfactorgraph_2eh_237', ['SymbolicFactorGraph.h', ['../a01385.html', 1, '']]],\n+ ['symbolicfactorgraph_2ecpp_236', ['SymbolicFactorGraph.cpp', ['../a01343.html', 1, '']]],\n+ ['symbolicfactorgraph_2eh_237', ['SymbolicFactorGraph.h', ['../a01367.html', 1, '']]],\n ['symbolicfactors_238', ['SymbolicFactors', ['../a03648.html', 1, 'gtsam::ConstructorTraversalData']]],\n ['symbolicisam_239', ['symbolicisam', ['../a05032.html#a0c67633b7ba09d0fcf146e0c8bcfaf1e', 1, 'gtsam::SymbolicISAM::SymbolicISAM()'],\n ['../a05032.html', 1, 'gtsam::SymbolicISAM'],\n ['../a05032.html#a3a6dc13df150778e90b5182d85633d95', 1, 'gtsam::SymbolicISAM::SymbolicISAM()']\n ]],\n- ['symbolicisam_2ecpp_240', ['SymbolicISAM.cpp', ['../a01379.html', 1, '']]],\n- ['symbolicisam_2eh_241', ['SymbolicISAM.h', ['../a01361.html', 1, '']]],\n+ ['symbolicisam_2ecpp_240', ['SymbolicISAM.cpp', ['../a01346.html', 1, '']]],\n+ ['symbolicisam_2eh_241', ['SymbolicISAM.h', ['../a01358.html', 1, '']]],\n ['symbolicjunctiontree_242', ['symbolicjunctiontree', ['../a05036.html', 1, 'gtsam::SymbolicJunctionTree'],\n ['../a05036.html#a61ae085cb8f50804dbb387b7136f3cff', 1, 'gtsam::SymbolicJunctionTree::SymbolicJunctionTree()']\n ]],\n- ['symbolicjunctiontree_2ecpp_243', ['SymbolicJunctionTree.cpp', ['../a01373.html', 1, '']]],\n- ['symbolicjunctiontree_2eh_244', ['SymbolicJunctionTree.h', ['../a01343.html', 1, '']]],\n+ ['symbolicjunctiontree_2ecpp_243', ['SymbolicJunctionTree.cpp', ['../a01391.html', 1, '']]],\n+ ['symbolicjunctiontree_2eh_244', ['SymbolicJunctionTree.h', ['../a01382.html', 1, '']]],\n ['symbolindex_245', ['symbolIndex', ['../a01428.html#a2f4d98c5186046db873a6c05aebbdf9c', 1, 'gtsam']]],\n ['symmetricblockmatrix_246', ['symmetricblockmatrix', ['../a02472.html', 1, 'gtsam::SymmetricBlockMatrix'],\n ['../a02472.html#aba9a0daa86b53c16e36653a816328672', 1, 'gtsam::SymmetricBlockMatrix::SymmetricBlockMatrix()'],\n ['../a02472.html#aa4cfb90a88b42bfab8c7f2c1a73d6f32', 1, 'gtsam::SymmetricBlockMatrix::SymmetricBlockMatrix(const CONTAINER &dimensions, bool appendOneDimension=false)'],\n ['../a02472.html#ab8db4e43a8c4ab7a16a7131b2546ea3f', 1, 'gtsam::SymmetricBlockMatrix::SymmetricBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension=false)'],\n ['../a02472.html#a90f73296bb635ad9bc431949446a33f2', 1, 'gtsam::SymmetricBlockMatrix::SymmetricBlockMatrix(const CONTAINER &dimensions, const Matrix &matrix, bool appendOneDimension=false)']\n ]],\n- ['symmetricblockmatrix_2ecpp_247', ['SymmetricBlockMatrix.cpp', ['../a00107.html', 1, '']]],\n- ['symmetricblockmatrix_2eh_248', ['SymmetricBlockMatrix.h', ['../a00041.html', 1, '']]],\n+ ['symmetricblockmatrix_2ecpp_247', ['SymmetricBlockMatrix.cpp', ['../a00083.html', 1, '']]],\n+ ['symmetricblockmatrix_2eh_248', ['SymmetricBlockMatrix.h', ['../a00122.html', 1, '']]],\n ['system_249', ['System', ['../a03824.html', 1, 'gtsam']]],\n ['systems_20with_20least_20squares_250', ['Solving of sparse linear systems with least-squares', ['../a01410.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_15.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_15.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -3,21 +3,21 @@\n ['../a04196.html#a70316c7d1f14ac7576af31da54da6065', 1, 'gtsam::NavState::t()']\n ]],\n ['t2_5f_1', ['t2_', ['../a02516.html#a10bc532260daa8d7372c289c1c2ecb17', 1, 'gtsam::internal::TimingOutline']]],\n ['tangentpreintegration_2', ['tangentpreintegration', ['../a04244.html#ab0683675722a4b8774b08f4f23538a33', 1, 'gtsam::TangentPreintegration::TangentPreintegration()'],\n ['../a04244.html#a89bb513c2d0998f424d9ff41afbd69ea', 1, 'gtsam::TangentPreintegration::TangentPreintegration(const boost::shared_ptr< Params > &p, const imuBias::ConstantBias &biasHat=imuBias::ConstantBias())'],\n ['../a04244.html', 1, 'gtsam::TangentPreintegration']\n ]],\n- ['tangentpreintegration_2ecpp_3', ['TangentPreintegration.cpp', ['../a00959.html', 1, '']]],\n- ['tangentpreintegration_2eh_4', ['TangentPreintegration.h', ['../a00941.html', 1, '']]],\n+ ['tangentpreintegration_2ecpp_3', ['TangentPreintegration.cpp', ['../a00902.html', 1, '']]],\n+ ['tangentpreintegration_2eh_4', ['TangentPreintegration.h', ['../a00911.html', 1, '']]],\n ['tangentvectorvalues_5', ['TangentVectorValues', ['../a04732.html#a46814fc53a47f7d48eb1fcdc85f930ed', 1, 'gtsam::ShonanAveraging']]],\n ['tbbopenmpmixedscope_6', ['TbbOpenMPMixedScope', ['../a02556.html', 1, 'gtsam']]],\n ['ternaryfunction_7', ['TernaryFunction', ['../a04304.html', 1, 'gtsam::Expression']]],\n ['testable_8', ['Testable', ['../a02492.html', 1, 'gtsam']]],\n- ['testable_2eh_9', ['Testable.h', ['../a00080.html', 1, '']]],\n+ ['testable_2eh_9', ['Testable.h', ['../a00110.html', 1, '']]],\n ['testable_3c_20algebraicdecisiontree_3c_20t_20_3e_20_3e_10', ['Testable< AlgebraicDecisionTree< T > >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20bearingfactor_3c_20a1_2c_20a2_2c_20t_20_3e_20_3e_11', ['Testable< BearingFactor< A1, A2, T > >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20bearingrange_3c_20a1_2c_20a2_20_3e_20_3e_12', ['Testable< BearingRange< A1, A2 > >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20bearingrangefactor_3c_20a1_2c_20a2_2c_20b_2c_20r_20_3e_20_3e_13', ['Testable< BearingRangeFactor< A1, A2, B, R > >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20betweenconstraint_3c_20value_20_3e_20_3e_14', ['Testable< BetweenConstraint< VALUE > >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20betweenfactor_3c_20value_20_3e_20_3e_15', ['Testable< BetweenFactor< VALUE > >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20binaryjacobianfactor_3c_20m_2c_20n1_2c_20n2_20_3e_20_3e_16', ['Testable< BinaryJacobianFactor< M, N1, N2 > >', ['../a02492.html', 1, 'gtsam']]],\n@@ -131,15 +131,15 @@\n ['testable_3c_20symbolicfactor_20_3e_124', ['Testable< SymbolicFactor >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20symbolicfactorgraph_20_3e_125', ['Testable< SymbolicFactorGraph >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20unit3_20_3e_126', ['Testable< Unit3 >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20values_20_3e_127', ['Testable< Values >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20variableindex_20_3e_128', ['Testable< VariableIndex >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20variableslots_20_3e_129', ['Testable< VariableSlots >', ['../a02492.html', 1, 'gtsam']]],\n ['testable_3c_20vectorvalues_20_3e_130', ['Testable< VectorValues >', ['../a02492.html', 1, 'gtsam']]],\n- ['testableassertions_2eh_131', ['TestableAssertions.h', ['../a00053.html', 1, '']]],\n+ ['testableassertions_2eh_131', ['TestableAssertions.h', ['../a00059.html', 1, '']]],\n ['theta_132', ['theta', ['../a03212.html#a4647614b08d02297a48a2f8c8b4a8054', 1, 'gtsam::Rot2::theta()'],\n ['../a03156.html#aab82b98ef745bb0f8f487ee83420f606', 1, 'gtsam::Pose2::theta()']\n ]],\n ['theta_5f_133', ['theta_', ['../a04396.html#abe3ea23a8d9b61097f28bf2a5c23057e', 1, 'gtsam::ISAM2']]],\n ['this_134', ['this', ['../a03456.html#a1b0bca80ca7466d039fc11d821e3b192', 1, 'gtsam::HybridFactorGraph::This'],\n ['../a03680.html#ad29de1a2966331f21b1fd88a18234091', 1, 'gtsam::Ordering::This'],\n ['../a03652.html#a5cd5f2112feb82893591bc85c5608dfc', 1, 'gtsam::JunctionTree::This'],\n@@ -181,15 +181,15 @@\n ['../a03764.html#a0f8b1ce7a6a1414f8c24e160af2f8d4e', 1, 'gtsam::GaussianConditional::This']\n ]],\n ['threadsafeexception_135', ['threadsafeexception', ['../a02496.html', 1, 'gtsam::ThreadsafeException< DERIVED >'],\n ['../a02496.html#a730172f56582e5a56d1fcb93d230d1de', 1, 'gtsam::ThreadsafeException::ThreadsafeException(const std::string &description)'],\n ['../a02496.html#a71fe75b345e277c800fb6b5ddba217de', 1, 'gtsam::ThreadsafeException::ThreadsafeException(const ThreadsafeException &other)'],\n ['../a02496.html#a5e422f39c89802be3c5aaaf65dbfd862', 1, 'gtsam::ThreadsafeException::ThreadsafeException()']\n ]],\n- ['threadsafeexception_2eh_136', ['ThreadsafeException.h', ['../a00011.html', 1, '']]],\n+ ['threadsafeexception_2eh_136', ['ThreadsafeException.h', ['../a00098.html', 1, '']]],\n ['threadsafeexception_3c_20cheiralityexception_20_3e_137', ['ThreadsafeException< CheiralityException >', ['../a02496.html', 1, 'gtsam']]],\n ['threadsafeexception_3c_20choleskyfailed_20_3e_138', ['ThreadsafeException< CholeskyFailed >', ['../a02496.html', 1, 'gtsam']]],\n ['threadsafeexception_3c_20indeterminantlinearsystemexception_20_3e_139', ['ThreadsafeException< IndeterminantLinearSystemException >', ['../a02496.html', 1, 'gtsam']]],\n ['threadsafeexception_3c_20invalidargumentthreadsafe_20_3e_140', ['ThreadsafeException< InvalidArgumentThreadsafe >', ['../a02496.html', 1, 'gtsam']]],\n ['threadsafeexception_3c_20invaliddenseelimination_20_3e_141', ['ThreadsafeException< InvalidDenseElimination >', ['../a02496.html', 1, 'gtsam']]],\n ['threadsafeexception_3c_20invalidmatrixblock_20_3e_142', ['ThreadsafeException< InvalidMatrixBlock >', ['../a02496.html', 1, 'gtsam']]],\n ['threadsafeexception_3c_20invalidnoisemodel_20_3e_143', ['ThreadsafeException< InvalidNoiseModel >', ['../a02496.html', 1, 'gtsam']]],\n@@ -201,16 +201,16 @@\n ['../a04896.html#ab4d91a228926cba2922d9e2e06ff4104', 1, 'gtsam::GenericProjectionFactor::throwCheirality()'],\n ['../a04932.html#a11f8b823fcb922edff9bc2847e5fe36c', 1, 'gtsam::SmartProjectionParams::throwCheirality']\n ]],\n ['throwcheirality_5f_148', ['throwcheirality_', ['../a04968.html#a0fe8550e6416afd3405bd9cfaea87a5c', 1, 'gtsam::TriangulationFactor::throwCheirality_'],\n ['../a04896.html#a9862177693076e80e6e0cd03ab11a94d', 1, 'gtsam::GenericProjectionFactor::throwCheirality_']\n ]],\n ['time_149', ['time', ['../a02516.html#ae6e021b0b7b9d4e4e95aa65ac5b95637', 1, 'gtsam::internal::TimingOutline']]],\n- ['timing_2ecpp_150', ['timing.cpp', ['../a00128.html', 1, '']]],\n- ['timing_2eh_151', ['timing.h', ['../a00131.html', 1, '']]],\n+ ['timing_2ecpp_150', ['timing.cpp', ['../a00029.html', 1, '']]],\n+ ['timing_2eh_151', ['timing.h', ['../a00137.html', 1, '']]],\n ['timingoutline_152', ['timingoutline', ['../a02516.html#aaf71bcd586bc33bd38e9db2a8f59614a', 1, 'gtsam::internal::TimingOutline::TimingOutline()'],\n ['../a02516.html', 1, 'gtsam::internal::TimingOutline']\n ]],\n ['toboostgraph_153', ['toBoostGraph', ['../a01428.html#a6c0319a6ebcc83d4a5cf9ff51729bb80', 1, 'gtsam']]],\n ['todecisiontreefactor_154', ['toDecisionTreeFactor', ['../a02808.html#ac42b7ab20c67cefbf162dd9f53a09680', 1, 'gtsam::DecisionTreeFactor']]],\n ['tofactorgraph_155', ['toFactorGraph', ['../a03408.html#a4d5a5c83c5d25798e22c20a779bac927', 1, 'gtsam::HybridBayesNet']]],\n ['tohessian_156', ['toHessian', ['../a04444.html#a011841322e848555d848bf0fd0346f4b', 1, 'gtsam::LinearContainerFactor']]],\n@@ -221,15 +221,15 @@\n ['totalreprojectionerror_161', ['totalreprojectionerror', ['../a04936.html#aa30166ceca524f30644895be41d56e0e', 1, 'gtsam::SmartProjectionFactor::totalReprojectionError()'],\n ['../a04928.html#a882db94ae4f6d76b2ead0d9218676bc5', 1, 'gtsam::SmartFactorBase::totalReprojectionError()']\n ]],\n ['traceexecution_162', ['traceExecution', ['../a04292.html#afecaa44a9cecec402c4ffd858de147dc', 1, 'gtsam::Expression']]],\n ['tracesize_163', ['traceSize', ['../a04292.html#afbfc8890e715ed28dcfc5e9e6077aebb', 1, 'gtsam::Expression']]],\n ['track_164', ['track', ['../a04704.html#a46b17be69d78037b9642966bcbea9df7', 1, 'gtsam::SfmData']]],\n ['tracks_165', ['tracks', ['../a04704.html#ad005f3beddfb6a8f735ad3369d2b81e6', 1, 'gtsam::SfmData']]],\n- ['tracksfrompairwisematches_166', ['tracksFromPairwiseMatches', ['../a01211.html#ac50218675ff25e1e9202d335ecfa6b3a', 1, 'gtsam::gtsfm']]],\n+ ['tracksfrompairwisematches_166', ['tracksFromPairwiseMatches', ['../a01199.html#ac50218675ff25e1e9202d335ecfa6b3a', 1, 'gtsam::gtsfm']]],\n ['traits_167', ['traits', ['../a02276.html', 1, 'gtsam']]],\n ['traits_3c_20algebraicdecisiontree_3c_20t_20_3e_20_3e_168', ['traits< AlgebraicDecisionTree< T > >', ['../a02768.html', 1, 'gtsam']]],\n ['traits_3c_20bearingfactor_3c_20a1_2c_20a2_2c_20t_20_3e_20_3e_169', ['traits< BearingFactor< A1, A2, T > >', ['../a04660.html', 1, 'gtsam']]],\n ['traits_3c_20bearingrange_3c_20a1_2c_20a2_20_3e_20_3e_170', ['traits< BearingRange< A1, A2 > >', ['../a02928.html', 1, 'gtsam']]],\n ['traits_3c_20bearingrangefactor_3c_20a1_2c_20a2_2c_20b_2c_20r_20_3e_20_3e_171', ['traits< BearingRangeFactor< A1, A2, B, R > >', ['../a04668.html', 1, 'gtsam']]],\n ['traits_3c_20betweenconstraint_3c_20value_20_3e_20_3e_172', ['traits< BetweenConstraint< VALUE > >', ['../a04776.html', 1, 'gtsam']]],\n ['traits_3c_20betweenfactor_3c_20value_20_3e_20_3e_173', ['traits< BetweenFactor< VALUE > >', ['../a04768.html', 1, 'gtsam']]],\n@@ -418,24 +418,24 @@\n ['../a03156.html#af90cdc82f62b599fa4bb52b3ce5952c1', 1, 'gtsam::Pose2::translation()'],\n ['../a03180.html#a8b17f5c70d59c202c17415e687e21e42', 1, 'gtsam::Pose3::translation()'],\n ['../a03248.html#a00cde5048202a220ba7a47d45be7e2ee', 1, 'gtsam::Similarity2::translation()']\n ]],\n ['translationfactor_339', ['translationfactor', ['../a04752.html', 1, 'gtsam::TranslationFactor'],\n ['../a04752.html#a7c01dfa0ae1540c90d4439671b5a74d4', 1, 'gtsam::TranslationFactor::TranslationFactor()']\n ]],\n- ['translationfactor_2eh_340', ['TranslationFactor.h', ['../a01202.html', 1, '']]],\n+ ['translationfactor_2eh_340', ['TranslationFactor.h', ['../a01193.html', 1, '']]],\n ['translationinterval_341', ['translationinterval', ['../a03024.html#aa178d815e1b0fefb7c98f3c21609f297', 1, 'gtsam::PinholeBase::translationInterval()'],\n ['../a03156.html#a68e923aa25cf68f1368685e61807e89f', 1, 'gtsam::Pose2::translationInterval()'],\n ['../a03180.html#af2afca9454555dae0073967b4d16794e', 1, 'gtsam::Pose3::translationInterval()']\n ]],\n ['translationrecovery_342', ['translationrecovery', ['../a04756.html', 1, 'gtsam::TranslationRecovery'],\n ['../a04756.html#a7a327105426ada3cf5b5ddf7415a6bb3', 1, 'gtsam::TranslationRecovery::TranslationRecovery()=default'],\n ['../a04756.html#ab6136c6f0473cddbfcfbb32ad8e83ec5', 1, 'gtsam::TranslationRecovery::TranslationRecovery(const LevenbergMarquardtParams &lmParams)']\n ]],\n- ['translationrecovery_2ecpp_343', ['TranslationRecovery.cpp', ['../a01229.html', 1, '']]],\n+ ['translationrecovery_2ecpp_343', ['TranslationRecovery.cpp', ['../a01205.html', 1, '']]],\n ['translationrecovery_2eh_344', ['TranslationRecovery.h', ['../a01223.html', 1, '']]],\n ['transpose_345', ['transpose', ['../a03228.html#a34b31466e7f777ca2ff550ec2cf804c7', 1, 'gtsam::Rot3::transpose()'],\n ['../a03212.html#a112c97d1fed02e92a48ba42a78d93549', 1, 'gtsam::Rot2::transpose()'],\n ['../a02752.html#afc1bcdad04c69671fb6a3b5c20616693', 1, 'gtsam::ParameterMatrix::transpose()']\n ]],\n ['transposemultiply_346', ['transposeMultiply', ['../a03792.html#adb2535546d074ea20f68d1c9a82ea91f', 1, 'gtsam::GaussianFactorGraph']]],\n ['transposemultiplyadd_347', ['transposemultiplyadd', ['../a03792.html#ad334bc63d65bb3fd53a28fdce19c9bc1', 1, 'gtsam::GaussianFactorGraph::transposeMultiplyAdd()'],\n@@ -447,15 +447,15 @@\n ['transposemultiplyadd2_348', ['transposeMultiplyAdd2', ['../a04052.html#a55355948d9ed5c429a840a28d01c55bc', 1, 'gtsam::SubgraphPreconditioner']]],\n ['transposesolve_349', ['transposesolve', ['../a04004.html#a93673122667b3a9edf71e5f9f98ce304', 1, 'gtsam::BlockJacobiPreconditioner::transposeSolve()'],\n ['../a04052.html#a509b2683de1972e47b982a97a5bb4fb1', 1, 'gtsam::SubgraphPreconditioner::transposeSolve()'],\n ['../a03988.html#aae3d89e2b3e004d227e9fd28ff8dba64', 1, 'gtsam::Preconditioner::transposeSolve()'],\n ['../a03996.html#afa90f3d7764c939969cd37ceaebf4519', 1, 'gtsam::DummyPreconditioner::transposeSolve()']\n ]],\n ['treesize_350', ['treeSize', ['../a03552.html#a57f5a90f8cf4fe3835137d93bf3ace8c', 1, 'gtsam::BayesTreeCliqueBase']]],\n- ['treetraversal_2dinst_2eh_351', ['treeTraversal-inst.h', ['../a00146.html', 1, '']]],\n+ ['treetraversal_2dinst_2eh_351', ['treeTraversal-inst.h', ['../a00107.html', 1, '']]],\n ['triangularview_352', ['triangularView', ['../a02472.html#a8d0fbfb562bef7892a8adebee2b70bb8', 1, 'gtsam::SymmetricBlockMatrix']]],\n ['triangulateandcomputee_353', ['triangulateandcomputee', ['../a04936.html#a9a36c36080404db5e58cdc487ff68da4', 1, 'gtsam::SmartProjectionFactor::triangulateAndComputeE(Matrix &E, const Cameras &cameras) const'],\n ['../a04936.html#a5688a031e48a5e09e3c09b8bf46606c3', 1, 'gtsam::SmartProjectionFactor::triangulateAndComputeE(Matrix &E, const Values &values) const']\n ]],\n ['triangulateandcomputejacobians_354', ['triangulateAndComputeJacobians', ['../a04936.html#ab29870981ddd32b5a1feb35498064372', 1, 'gtsam::SmartProjectionFactor']]],\n ['triangulateandcomputejacobianssvd_355', ['triangulateAndComputeJacobiansSVD', ['../a04936.html#ae5000a3cc7a2f55a7fa458b7fd7c443a', 1, 'gtsam::SmartProjectionFactor']]],\n ['triangulatedlt_356', ['triangulatedlt', ['../a01428.html#aed2918ac0049316bf09f96879efca3b6', 1, 'gtsam::triangulateDLT(const std::vector< Matrix34, Eigen::aligned_allocator< Matrix34 > > &projection_matrices, const Point2Vector &measurements, double rank_tol=1e-9)'],\n@@ -497,11 +497,11 @@\n ['trustregionadaptationmode_370', ['TrustRegionAdaptationMode', ['../a04264.html#a52e03ca11a892d070c911db43f22cf04', 1, 'gtsam::DoglegOptimizerImpl']]],\n ['tryinsert_371', ['tryInsert', ['../a04064.html#af8ae72f3a885ed1d1db573dc82adae2a', 1, 'gtsam::VectorValues']]],\n ['trylambda_372', ['tryLambda', ['../a04436.html#aedf9c658eb5e461dbfdee6d952970daa', 1, 'gtsam::LevenbergMarquardtOptimizer']]],\n ['tryoptimizingat_373', ['tryOptimizingAt', ['../a04732.html#ac48a348adbe626ecb65db0ea68cc8dfb', 1, 'gtsam::ShonanAveraging']]],\n ['tukey_374', ['Tukey', ['../a03900.html', 1, 'gtsam::noiseModel::mEstimator']]],\n ['type_375', ['type', ['../a04292.html#a18218921cb3aa2a55b8e73db8ff67aea', 1, 'gtsam::Expression']]],\n ['types_376', ['Creating new factor and variable types', ['../a08123.html#new_factor_variable_types', 1, '']]],\n- ['types_2ecpp_377', ['types.cpp', ['../a00005.html', 1, '']]],\n- ['types_2eh_378', ['types.h', ['../a00047.html', 1, '']]],\n+ ['types_2ecpp_377', ['types.cpp', ['../a00134.html', 1, '']]],\n+ ['types_2eh_378', ['types.h', ['../a00020.html', 1, '']]],\n ['typetest_379', ['TypeTest', ['../a03668.html#a09ae767d472370836a43228960039702', 1, 'gtsam::LabeledSymbol']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_17.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_17.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -11,15 +11,15 @@\n ['../a04616.html#a512e61d8416f2210a0c41a0a96232b54', 1, 'gtsam::Values::KeyValuePair::value'],\n ['../a04620.html#a7fcc2317ca95dc55484dfa17dc31587d', 1, 'gtsam::Values::ConstKeyValuePair::value'],\n ['../a02324.html#adb4eb10667d811f19db1e32992785c0a', 1, 'gtsam::GenericValue::value() const'],\n ['../a02324.html#a13de4f83b7b5305a7be4ee1136dcd201', 1, 'gtsam::GenericValue::value()'],\n ['../a04292.html#acb8e427a376afb1eec8bcda057128c11', 1, 'gtsam::Expression::value()'],\n ['../a04780.html#ae8d1b604f8580bfd89940d1154b66feb', 1, 'gtsam::BoundingConstraint1::value()']\n ]],\n- ['value_2eh_3', ['Value.h', ['../a00059.html', 1, '']]],\n+ ['value_2eh_3', ['Value.h', ['../a00023.html', 1, '']]],\n ['value_5f_4', ['value_', ['../a02324.html#ab8454e55f25f7f475f8d31001625a8e9', 1, 'gtsam::GenericValue']]],\n ['value_5ftype_5', ['value_type', ['../a04064.html#a0e85b51f4c41dfd5226ec68bd7dac767', 1, 'gtsam::VectorValues']]],\n ['valueandderivatives_6', ['valueAndDerivatives', ['../a04292.html#ac8c6cdfa4becdaf289fd6c9997343da3', 1, 'gtsam::Expression']]],\n ['valueandjacobianmap_7', ['valueAndJacobianMap', ['../a04292.html#a94e579dbb5e5f9ba0a3ae615d1224c9e', 1, 'gtsam::Expression']]],\n ['valuecloneallocator_8', ['ValueCloneAllocator', ['../a04608.html', 1, 'gtsam']]],\n ['valueexists_9', ['valueExists', ['../a04396.html#affcd8d849cfa6e8dbfc73628d38552b9', 1, 'gtsam::ISAM2']]],\n ['values_10', ['values', ['../a02852.html#a5dbf05011b75348e3fdae2c4dd18b2f5', 1, 'gtsam::DiscreteFactor::Values'],\n@@ -34,15 +34,15 @@\n ['../a04064.html#a51de7f0e81eeb8f1bf2fc59a3cc6d8d3', 1, 'gtsam::VectorValues::Values'],\n ['../a03488.html#abf62482973bac8d302dba0441ed08b8b', 1, 'gtsam::HybridNonlinearFactorGraph::Values'],\n ['../a03464.html#a46f6b7e84089bb9568d46ba27805142a', 1, 'gtsam::HybridGaussianFactorGraph::Values'],\n ['../a03456.html#a303833c34b4178ecf5d038cdb1122ed5', 1, 'gtsam::HybridFactorGraph::Values'],\n ['../a02864.html#a47afd40461afeca9a2b9c73aa60fcc0c', 1, 'gtsam::DiscreteFactorGraph::Values'],\n ['../a02832.html#a5352ef4cd5bdf50707d65de6066dd157', 1, 'gtsam::DiscreteConditional::Values']\n ]],\n- ['values_2eh_11', ['Values.h', ['../a01130.html', 1, '']]],\n+ ['values_2eh_11', ['Values.h', ['../a01127.html', 1, '']]],\n ['values_5f_12', ['values_', ['../a04064.html#a4d03169b0c16543a56924123f33850c4', 1, 'gtsam::VectorValues']]],\n ['valuescasthelper_13', ['ValuesCastHelper', ['../a04576.html', 1, 'gtsam']]],\n ['valuescasthelper_3c_20const_20value_2c_20castedkeyvaluepairtype_2c_20keyvaluepairtype_20_3e_14', ['ValuesCastHelper< const Value, CastedKeyValuePairType, KeyValuePairType >', ['../a04584.html', 1, 'gtsam']]],\n ['valuescasthelper_3c_20value_2c_20castedkeyvaluepairtype_2c_20keyvaluepairtype_20_3e_15', ['ValuesCastHelper< Value, CastedKeyValuePairType, KeyValuePairType >', ['../a04580.html', 1, 'gtsam']]],\n ['valuesincorrecttype_16', ['valuesincorrecttype', ['../a04636.html#a880882802e51b570132ac2eceee3ac1a', 1, 'gtsam::ValuesIncorrectType::ValuesIncorrectType()'],\n ['../a04636.html', 1, 'gtsam::ValuesIncorrectType']\n ]],\n@@ -65,27 +65,27 @@\n ['variablecoloffsets_5f_24', ['variablecoloffsets_', ['../a02472.html#ae2d97054785689660b75c3a1f6d5a552', 1, 'gtsam::SymmetricBlockMatrix::variableColOffsets_'],\n ['../a02660.html#ae7ec144e787509009c3fb0f284b94a22', 1, 'gtsam::VerticalBlockMatrix::variableColOffsets_']\n ]],\n ['variableindex_25', ['variableindex', ['../a03700.html#af85147163ce24cb4db4505471440402c', 1, 'gtsam::VariableIndex::VariableIndex()'],\n ['../a03700.html#a79bebdf9292c00135d5605fe38319142', 1, 'gtsam::VariableIndex::VariableIndex(const FG &factorGraph)'],\n ['../a03700.html', 1, 'gtsam::VariableIndex']\n ]],\n- ['variableindex_2dinl_2eh_26', ['VariableIndex-inl.h', ['../a00611.html', 1, '']]],\n- ['variableindex_2ecpp_27', ['VariableIndex.cpp', ['../a00635.html', 1, '']]],\n+ ['variableindex_2dinl_2eh_26', ['VariableIndex-inl.h', ['../a00602.html', 1, '']]],\n+ ['variableindex_2ecpp_27', ['VariableIndex.cpp', ['../a00575.html', 1, '']]],\n ['variableindex_2eh_28', ['VariableIndex.h', ['../a00626.html', 1, '']]],\n ['variableindex_5f_29', ['variableIndex_', ['../a04396.html#ab9bd085bcf745368cb4801d04538ec18', 1, 'gtsam::ISAM2']]],\n ['variablepos_30', ['variablepos', ['../a03576.html#aa805566fe2c6879c6e36fbc75de30b35', 1, 'gtsam::DotWriter::variablePos()'],\n ['../a04368.html#a3d2f56d6febef12fe66e83b1259b974f', 1, 'gtsam::GraphvizFormatting::variablePos()']\n ]],\n ['variablepositions_31', ['variablePositions', ['../a03576.html#a8f926f761e5ce55089228f6496762b2d', 1, 'gtsam::DotWriter']]],\n ['variableslots_32', ['variableslots', ['../a03708.html#acd98bd86878e8c5c9596c929439c0a4c', 1, 'gtsam::VariableSlots::VariableSlots()'],\n ['../a03708.html', 1, 'gtsam::VariableSlots']\n ]],\n- ['variableslots_2ecpp_33', ['VariableSlots.cpp', ['../a00692.html', 1, '']]],\n- ['variableslots_2eh_34', ['VariableSlots.h', ['../a00671.html', 1, '']]],\n+ ['variableslots_2ecpp_33', ['VariableSlots.cpp', ['../a00608.html', 1, '']]],\n+ ['variableslots_2eh_34', ['VariableSlots.h', ['../a00596.html', 1, '']]],\n ['variablesreeliminated_35', ['variablesReeliminated', ['../a04420.html#aa591562d9627adfff6641e1b7f217c06', 1, 'gtsam::ISAM2Result']]],\n ['variablesrelinearized_36', ['variablesRelinearized', ['../a04420.html#a0ef240bad454346811a3db6a28e2516a', 1, 'gtsam::ISAM2Result']]],\n ['variablestatus_37', ['variablestatus', ['../a04424.html#aa95ea9ffc9e1c58ae54bccea5e5e1c5a', 1, 'gtsam::ISAM2Result::DetailedResults::variableStatus'],\n ['../a04428.html', 1, 'gtsam::ISAM2Result::DetailedResults::VariableStatus']\n ]],\n ['variance_38', ['Variance', ['../a03936.html#af176eeec710dc59f5e0125e52a9e8326', 1, 'gtsam::noiseModel::Isotropic']]],\n ['variances_39', ['Variances', ['../a03928.html#a8c23ce6bda772372da8814c0febbb36f', 1, 'gtsam::noiseModel::Diagonal']]],\n@@ -98,16 +98,16 @@\n ['../a03008.html#a1b55a8740cdd5e7c7e8c49783222741f', 1, 'gtsam::Cal3Unified::vector()'],\n ['../a03352.html#a576452db11da6ff1c022e7d6ca2f605b', 1, 'gtsam::StereoPoint2::vector()'],\n ['../a04064.html#abc7bd77615c56140806529ec5ca1424a', 1, 'gtsam::VectorValues::vector() const'],\n ['../a04064.html#aca8ead127e0c9017b4b8861339e5998f', 1, 'gtsam::VectorValues::vector(const CONTAINER &keys) const'],\n ['../a04064.html#a2fbc0bf0d45f8fae0427264a4d8abe26', 1, 'gtsam::VectorValues::vector(const Dims &dims) const'],\n ['../a04140.html#a93610c76ef81c251cb8d5697ee9334bd', 1, 'gtsam::imuBias::ConstantBias::vector()']\n ]],\n- ['vector_2ecpp_42', ['Vector.cpp', ['../a00140.html', 1, '']]],\n- ['vector_2eh_43', ['Vector.h', ['../a00089.html', 1, '']]],\n+ ['vector_2ecpp_42', ['Vector.cpp', ['../a00050.html', 1, '']]],\n+ ['vector_2eh_43', ['Vector.h', ['../a00113.html', 1, '']]],\n ['vector_5fscale_5finplace_44', ['vector_scale_inplace', ['../a01428.html#a24d3ad0252f91f0ec301593c45cf5af7', 1, 'gtsam']]],\n ['vector_5fspace_5ftag_45', ['vector_space_tag', ['../a02600.html', 1, 'gtsam']]],\n ['vectorcomponentfactor_46', ['vectorcomponentfactor', ['../a02712.html#ae91c593c61da33df6ecc5a714ecafbe4', 1, 'gtsam::VectorComponentFactor::VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x)'],\n ['../a02712.html#a3340a699b1a3239fe86568d0ce14277e', 1, 'gtsam::VectorComponentFactor::VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x, double a, double b)'],\n ['../a02712.html', 1, 'gtsam::VectorComponentFactor< BASIS, P >']\n ]],\n ['vectorcomponentfunctor_47', ['vectorcomponentfunctor', ['../a02680.html#a439378326368f095c983293468efde0f', 1, 'gtsam::Basis::VectorComponentFunctor::VectorComponentFunctor()'],\n@@ -133,15 +133,15 @@\n ['../a02676.html#a4eee610c6d82dea4966c101bd952a9f9', 1, 'gtsam::Basis::VectorEvaluationFunctor::VectorEvaluationFunctor()'],\n ['../a02676.html#a6c73f0d957f5774db2f68bacc8824739', 1, 'gtsam::Basis::VectorEvaluationFunctor::VectorEvaluationFunctor(size_t N, double x)']\n ]],\n ['vectorevaluationfunctor_3c_20traits_3c_20t_20_3e_3a_3adimension_20_3e_52', ['VectorEvaluationFunctor< traits< T >::dimension >', ['../a02676.html', 1, 'gtsam::Basis']]],\n ['vectorizedgenerators_53', ['vectorizedgenerators', ['../a03304.html#af3f84a1a6bc7c004ba2ba762792ea8a4', 1, 'gtsam::SO::VectorizedGenerators(size_t n=0)'],\n ['../a03304.html#a09bafb4b9f43ef9511596c02f955b4d6', 1, 'gtsam::SO::VectorizedGenerators()']\n ]],\n- ['vectorserialization_2eh_54', ['VectorSerialization.h', ['../a00056.html', 1, '']]],\n+ ['vectorserialization_2eh_54', ['VectorSerialization.h', ['../a00089.html', 1, '']]],\n ['vectorspace_55', ['VectorSpace', ['../a02620.html', 1, 'gtsam::internal']]],\n ['vectorspace_3c_20imubias_3a_3aconstantbias_20_3e_56', ['VectorSpace< imuBias::ConstantBias >', ['../a02620.html', 1, 'gtsam::internal']]],\n ['vectorspace_3c_20parametermatrix_3c_20m_20_3e_20_3e_57', ['VectorSpace< ParameterMatrix< M > >', ['../a02620.html', 1, 'gtsam::internal']]],\n ['vectorspace_3c_20stereopoint2_20_3e_58', ['VectorSpace< StereoPoint2 >', ['../a02620.html', 1, 'gtsam::internal']]],\n ['vectorspaceimpl_59', ['VectorSpaceImpl', ['../a02604.html', 1, 'gtsam::internal']]],\n ['vectorspaceimpl_3c_20class_2c_20class_3a_3adimension_20_3e_60', ['VectorSpaceImpl< Class, Class::dimension >', ['../a02604.html', 1, 'gtsam::internal']]],\n ['vectorspaceimpl_3c_20class_2c_20eigen_3a_3adynamic_20_3e_61', ['VectorSpaceImpl< Class, Eigen::Dynamic >', ['../a02608.html', 1, 'gtsam::internal']]],\n@@ -163,16 +163,16 @@\n ['../a04064.html', 1, 'gtsam::VectorValues'],\n ['../a04064.html#af8e3b85870636b1d50e7c08d1dbbbf8e', 1, 'gtsam::VectorValues::VectorValues(const VectorValues &c)'],\n ['../a04064.html#ac22c7a89788b4a33dd178f9ee1f6980c', 1, 'gtsam::VectorValues::VectorValues(const VectorValues &first, const VectorValues &second)'],\n ['../a04064.html#a988c508cc8d20e1939860c8aaaaa3a0a', 1, 'gtsam::VectorValues::VectorValues()'],\n ['../a05072.html', 1, 'VectorValues'],\n ['../a04064.html#af3ff30d98342caa2a5630dd9dfa23e31', 1, 'gtsam::VectorValues::VectorValues()']\n ]],\n- ['vectorvalues_2ecpp_74', ['VectorValues.cpp', ['../a00722.html', 1, '']]],\n- ['vectorvalues_2eh_75', ['VectorValues.h', ['../a00704.html', 1, '']]],\n+ ['vectorvalues_2ecpp_74', ['VectorValues.cpp', ['../a00785.html', 1, '']]],\n+ ['vectorvalues_2eh_75', ['VectorValues.h', ['../a00893.html', 1, '']]],\n ['vee_76', ['Vee', ['../a03304.html#a43f11eb2cba2be51ba3fa6ee8d46f823', 1, 'gtsam::SO']]],\n ['velocity3_77', ['Velocity3', ['../a01428.html#ad6ba0a40d5dd8936f4ca53f7bb3ef53b', 1, 'gtsam']]],\n ['velocity_5fn_78', ['velocity_n', ['../a04228.html#ad1ef4f451f2f8d8413424778ab3e1791', 1, 'gtsam::ConstantTwistScenario::velocity_n()'],\n ['../a04232.html#aed78128a8d22e10539cff5352c0f8790', 1, 'gtsam::AcceleratingScenario::velocity_n()'],\n ['../a04224.html#ad696947e9da2987f0913113957b64162', 1, 'gtsam::Scenario::velocity_n()']\n ]],\n ['verbose_79', ['verbose', ['../a04412.html#a423adc06cbc8c72f89469d1c3eb24571', 1, 'gtsam::ISAM2DoglegParams']]],\n@@ -197,16 +197,16 @@\n ]],\n ['verticalblockmatrix_85', ['verticalblockmatrix', ['../a02660.html#a04d12c23c8c6a3179416ca49da794c86', 1, 'gtsam::VerticalBlockMatrix::VerticalBlockMatrix()'],\n ['../a02660.html#a20f3454d88ad93367250ea900c84c53d', 1, 'gtsam::VerticalBlockMatrix::VerticalBlockMatrix(const CONTAINER &dimensions, DenseIndex height, bool appendOneDimension=false)'],\n ['../a02660.html#ac3d367af21c05dca883a91cf5c24a243', 1, 'gtsam::VerticalBlockMatrix::VerticalBlockMatrix(const CONTAINER &dimensions, const Eigen::MatrixBase< DERIVED > &matrix, bool appendOneDimension=false)'],\n ['../a02660.html#a78d48e3b5eb2fc89705be918eb25652e', 1, 'gtsam::VerticalBlockMatrix::VerticalBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, DenseIndex height, bool appendOneDimension=false)'],\n ['../a02660.html', 1, 'gtsam::VerticalBlockMatrix']\n ]],\n- ['verticalblockmatrix_2ecpp_86', ['VerticalBlockMatrix.cpp', ['../a00101.html', 1, '']]],\n- ['verticalblockmatrix_2eh_87', ['VerticalBlockMatrix.h', ['../a00071.html', 1, '']]],\n+ ['verticalblockmatrix_2ecpp_86', ['VerticalBlockMatrix.cpp', ['../a00131.html', 1, '']]],\n+ ['verticalblockmatrix_2eh_87', ['VerticalBlockMatrix.h', ['../a00002.html', 1, '']]],\n ['visit_88', ['visit', ['../a02784.html', 1, 'gtsam::Visit< L, Y >'],\n ['../a02784.html#ae713210a4714d3afb9440034c8e02904', 1, 'gtsam::Visit::Visit()'],\n ['../a02796.html#a4d0c2fc8d7f0bf91da569b10bfa4229f', 1, 'gtsam::DecisionTree::visit(Func f) const']\n ]],\n ['visitleaf_89', ['visitleaf', ['../a02796.html#a56c28d3544ad9bdb06ab981cfe518f6b', 1, 'gtsam::DecisionTree::visitLeaf()'],\n ['../a02788.html#a41d555420231e321c884c2a578e33ee1', 1, 'gtsam::VisitLeaf::VisitLeaf()'],\n ['../a02788.html', 1, 'gtsam::VisitLeaf< L, Y >']\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_18.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_18.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -23,15 +23,15 @@\n ['../a04504.html#ac996decbe6edaf943ff069dbf01fd83a', 1, 'gtsam::NoiseModelFactor::weight()']\n ]],\n ['weighted_5feliminate_5', ['weighted_eliminate', ['../a01428.html#a60019a03f26b92c6b2a08e43d153d4c0', 1, 'gtsam']]],\n ['weightedpseudoinverse_6', ['weightedPseudoinverse', ['../a01428.html#aca1c56d11a05464a7a5458dc32ccc777', 1, 'gtsam']]],\n ['weightedsampler_7', ['weightedsampler', ['../a02664.html', 1, 'gtsam::WeightedSampler< Engine >'],\n ['../a02664.html#aa938b7f88f6efd2be5ee3b1cf12c85f7', 1, 'gtsam::WeightedSampler::WeightedSampler()']\n ]],\n- ['weightedsampler_2eh_8', ['WeightedSampler.h', ['../a00095.html', 1, '']]],\n+ ['weightedsampler_2eh_8', ['WeightedSampler.h', ['../a00140.html', 1, '']]],\n ['weightmatrix_9', ['weightmatrix', ['../a02668.html#a9da2e7dcdb5466d656a8d03b6444dde4', 1, 'gtsam::Basis::WeightMatrix(size_t N, const Vector &X)'],\n ['../a02668.html#a93042a16e34baea05f9e10810244b0cf', 1, 'gtsam::Basis::WeightMatrix(size_t N, const Vector &X, double a, double b)']\n ]],\n ['weightstol_10', ['weightsTol', ['../a04364.html#a631b80e4b8d78e7ba7fc27fd1ddbddcf', 1, 'gtsam::GncParams']]],\n ['welsch_11', ['Welsch', ['../a03904.html', 1, 'gtsam::noiseModel::mEstimator']]],\n ['what_12', ['what', ['../a04628.html#a78a51f5c178833f7e0e9cb856a439a98', 1, 'gtsam::ValuesKeyAlreadyExists::what()'],\n ['../a04632.html#a51b856714ddd14a0b8110834273b8c41', 1, 'gtsam::ValuesKeyDoesNotExist::what()'],\n@@ -72,15 +72,15 @@\n ['../a03924.html#a5e6730ae7579632477a1dbee37e72acf', 1, 'gtsam::noiseModel::Gaussian::WhitenInPlace(Eigen::Block< Matrix > H) const'],\n ['../a03924.html#a10964d6f0d955e27acd6aeb16fc83ed1', 1, 'gtsam::noiseModel::Gaussian::WhitenInPlace(Matrix &H) const']\n ]],\n ['whitenjacobians_16', ['whitenJacobians', ['../a04928.html#aa7cacb92b9bf0af24c701d11aa6c6255', 1, 'gtsam::SmartFactorBase']]],\n ['whitenoisefactor_17', ['whitenoisefactor', ['../a04652.html#a92b88afb4ef2a76302f9ad7694636bce', 1, 'gtsam::WhiteNoiseFactor::WhiteNoiseFactor()'],\n ['../a04652.html', 1, 'gtsam::WhiteNoiseFactor']\n ]],\n- ['whitenoisefactor_2eh_18', ['WhiteNoiseFactor.h', ['../a01037.html', 1, '']]],\n+ ['whitenoisefactor_2eh_18', ['WhiteNoiseFactor.h', ['../a01118.html', 1, '']]],\n ['whitensystem_19', ['WhitenSystem', ['../a03924.html#a4111574a34e80990d155f945140c58e6', 1, 'gtsam::noiseModel::Gaussian']]],\n ['wildfirethreshold_20', ['wildfirethreshold', ['../a04412.html#aaf78f71297ce1a510acd290b3e7289f2', 1, 'gtsam::ISAM2DoglegParams::wildfireThreshold'],\n ['../a04408.html#a2d9c7345a550e3719689a75a4e203f3b', 1, 'gtsam::ISAM2GaussNewtonParams::wildfireThreshold']\n ]],\n ['with_20least_20squares_21', ['Solving of sparse linear systems with least-squares', ['../a01410.html', 1, '']]],\n ['writebal_22', ['writeBAL', ['../a01428.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae', 1, 'gtsam']]],\n ['writebalfromvalues_23', ['writeBALfromValues', ['../a01428.html#a4a2433812cf34ee359e3ec99f4f5bcc4', 1, 'gtsam']]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_2.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_2.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -12,15 +12,15 @@\n ['absoluteerrortol_6', ['absoluteErrorTol', ['../a04556.html#a01f8529b9f7efdd818e0d75134f1ae8b', 1, 'gtsam::NonlinearOptimizerParams']]],\n ['acceleratedpoweriteration_7', ['acceleratedpoweriteration', ['../a03716.html#ac48562a928acf0285d918f0312e5f9f9', 1, 'gtsam::AcceleratedPowerMethod::acceleratedPowerIteration() const'],\n ['../a03716.html#a0d290aa81fbfb4db02d9f3a8790ceb85', 1, 'gtsam::AcceleratedPowerMethod::acceleratedPowerIteration(const Vector &x1, const Vector &x0, const double beta) const']\n ]],\n ['acceleratedpowermethod_8', ['acceleratedpowermethod', ['../a03716.html#a1aae79479b85879cc10e97f081dcfd19', 1, 'gtsam::AcceleratedPowerMethod::AcceleratedPowerMethod()'],\n ['../a03716.html', 1, 'gtsam::AcceleratedPowerMethod< Operator >']\n ]],\n- ['acceleratedpowermethod_2eh_9', ['AcceleratedPowerMethod.h', ['../a00890.html', 1, '']]],\n+ ['acceleratedpowermethod_2eh_9', ['AcceleratedPowerMethod.h', ['../a00794.html', 1, '']]],\n ['acceleratingscenario_10', ['acceleratingscenario', ['../a04232.html', 1, 'gtsam::AcceleratingScenario'],\n ['../a04232.html#ad0533d44571308b0098013ac11f65da1', 1, 'gtsam::AcceleratingScenario::AcceleratingScenario(const Rot3 &nRb, const Point3 &p0, const Vector3 &v0, const Vector3 &a_n, const Vector3 &omega_b=Vector3::Zero())']\n ]],\n ['acceleration_5fn_11', ['acceleration_n', ['../a04232.html#add38095518e49172780a6479d67f13a9', 1, 'gtsam::AcceleratingScenario::acceleration_n()'],\n ['../a04228.html#a313d9f5f2edd143748c1e20fddcd3bde', 1, 'gtsam::ConstantTwistScenario::acceleration_n()'],\n ['../a04224.html#ad590b2a67dc6c674d25cf39638849655', 1, 'gtsam::Scenario::acceleration_n()']\n ]],\n@@ -95,26 +95,26 @@\n ['../a03180.html#af84d7c844d8f61951e481224ad9848de', 1, 'gtsam::Pose3::adjointTranspose(const Vector6 &xi, const Vector6 &y, OptionalJacobian< 6, 6 > Hxi=boost::none, OptionalJacobian< 6, 6 > H_y=boost::none)'],\n ['../a03180.html#a7a73a73b500f0929370f374da90e2df9', 1, 'gtsam::Pose3::AdjointTranspose(const Vector6 &x, OptionalJacobian< 6, 6 > H_this=boost::none, OptionalJacobian< 6, 6 > H_x=boost::none) const']\n ]],\n ['ahrsfactor_36', ['ahrsfactor', ['../a04076.html', 1, 'gtsam::AHRSFactor'],\n ['../a04076.html#a358af0919ed5a0349777771c393ba57a', 1, 'gtsam::AHRSFactor::AHRSFactor(Key rot_i, Key rot_j, Key bias, const PreintegratedAhrsMeasurements &preintegratedMeasurements)'],\n ['../a04076.html#accec1de62fd208caef98766b60cdee4a', 1, 'gtsam::AHRSFactor::AHRSFactor(Key rot_i, Key rot_j, Key bias, const PreintegratedAhrsMeasurements &pim, const Vector3 &omegaCoriolis, const boost::optional< Pose3 > &body_P_sensor=boost::none)']\n ]],\n- ['ahrsfactor_2ecpp_37', ['AHRSFactor.cpp', ['../a00965.html', 1, '']]],\n- ['ahrsfactor_2eh_38', ['AHRSFactor.h', ['../a00950.html', 1, '']]],\n+ ['ahrsfactor_2ecpp_37', ['AHRSFactor.cpp', ['../a00998.html', 1, '']]],\n+ ['ahrsfactor_2eh_38', ['AHRSFactor.h', ['../a00986.html', 1, '']]],\n ['algebraicdecisiontree_39', ['algebraicdecisiontree', ['../a02760.html#a4e42a5ca3fc306d2d83c88dd3532f71d', 1, 'gtsam::AlgebraicDecisionTree::AlgebraicDecisionTree(const L &label, double y1, double y2)'],\n ['../a02760.html#a3cd971460a346293b80eae2f125c5bbe', 1, 'gtsam::AlgebraicDecisionTree::AlgebraicDecisionTree(const AlgebraicDecisionTree< M > &other, const std::map< M, L > &map)'],\n ['../a02760.html#a1568fefa4bc0727d9833722f782f4bb4', 1, 'gtsam::AlgebraicDecisionTree::AlgebraicDecisionTree(const typename Base::LabelC &labelC, double y1, double y2)'],\n ['../a02760.html#a9d6239fa73a7e13ec702bacf1b5604ca', 1, 'gtsam::AlgebraicDecisionTree::AlgebraicDecisionTree(const std::vector< typename Base::LabelC > &labelCs, const std::vector< double > &ys)'],\n ['../a02760.html#a224c622a5f3ffb1f2055f35b724dfdf4', 1, 'gtsam::AlgebraicDecisionTree::AlgebraicDecisionTree(const std::vector< typename Base::LabelC > &labelCs, const std::string &table)'],\n ['../a02760.html#af0cd622a320a4a202473ebae5dd289a7', 1, 'gtsam::AlgebraicDecisionTree::AlgebraicDecisionTree(Iterator begin, Iterator end, const L &label)'],\n ['../a02760.html', 1, 'gtsam::AlgebraicDecisionTree< L >']\n ]],\n- ['algebraicdecisiontree_2ecpp_40', ['AlgebraicDecisionTree.cpp', ['../a00194.html', 1, '']]],\n- ['algebraicdecisiontree_2eh_41', ['AlgebraicDecisionTree.h', ['../a00224.html', 1, '']]],\n+ ['algebraicdecisiontree_2ecpp_40', ['AlgebraicDecisionTree.cpp', ['../a00263.html', 1, '']]],\n+ ['algebraicdecisiontree_2eh_41', ['AlgebraicDecisionTree.h', ['../a00233.html', 1, '']]],\n ['algebraicdecisiontree_3c_20key_20_3e_42', ['AlgebraicDecisionTree< Key >', ['../a02760.html', 1, 'gtsam']]],\n ['align_43', ['align', ['../a03156.html#ae17f22064c470bcc4ce79d00841ccc4d', 1, 'gtsam::Pose2::Align()'],\n ['../a03264.html#ac69a898f450b149bd8f78e14b34e7117', 1, 'gtsam::Similarity3::Align(const std::vector< Pose3Pair > &abPosePairs)'],\n ['../a03264.html#a592b3d2a0756ddcd0a35b0bdbd345da0', 1, 'gtsam::Similarity3::Align(const Point3Pairs &abPointPairs)'],\n ['../a03248.html#aea2eef32f8a46e3ded2af185a189f956', 1, 'gtsam::Similarity2::Align(const Pose2Pairs &abPosePairs)'],\n ['../a03248.html#a1c255059ea8cc93b8585f284333fda79', 1, 'gtsam::Similarity2::Align(const Point2Pairs &abPointPairs)'],\n ['../a03180.html#aa54c78a3f9b93af83f07a7e86035abef', 1, 'gtsam::Pose3::Align()']\n@@ -134,15 +134,15 @@\n ['../a01412.html', 1, 'Solving by sequential variable elimination (QR and Cholesky)']\n ]],\n ['and_20variable_20types_53', ['Creating new factor and variable types', ['../a08123.html#new_factor_variable_types', 1, '']]],\n ['antifactor_54', ['antifactor', ['../a04760.html', 1, 'gtsam::AntiFactor'],\n ['../a04760.html#a344e9905b3dbb09d34599cf6c59ccbf7', 1, 'gtsam::AntiFactor::AntiFactor()'],\n ['../a04760.html#a0db982b2aa42e353e2c17e0ebf379602', 1, 'gtsam::AntiFactor::AntiFactor(NonlinearFactor::shared_ptr factor)']\n ]],\n- ['antifactor_2eh_55', ['AntiFactor.h', ['../a01337.html', 1, '']]],\n+ ['antifactor_2eh_55', ['AntiFactor.h', ['../a01274.html', 1, '']]],\n ['apply_56', ['apply', ['../a02776.html#a1f1c5a3086c485aacbabfbeac089f832', 1, 'gtsam::DecisionTree::Leaf::apply()'],\n ['../a01428.html#ae890a8919b441443ffdc0d8ab047838d', 1, 'gtsam::apply()'],\n ['../a02808.html#a6e0e32506f4207cb06834effd717bac3', 1, 'gtsam::DecisionTreeFactor::apply()'],\n ['../a02796.html#a47f7b5528330806519440a58f587c93b', 1, 'gtsam::DecisionTree::apply(const DecisionTree &g, const Binary &op) const'],\n ['../a02796.html#a72f8882dd04d9cccf5dd0151820856f2', 1, 'gtsam::DecisionTree::apply(const UnaryAssignment &op) const'],\n ['../a02796.html#a00d49afa8ffc80de9cbdbb4489e50ffe', 1, 'gtsam::DecisionTree::apply(const Unary &op) const'],\n ['../a02780.html#a63aaa3f65da7e7b2a1662377a5126ca9', 1, 'gtsam::DecisionTree::Choice::apply(const UnaryAssignment &op, const Assignment< L > &assignment) const override'],\n@@ -190,20 +190,20 @@\n ]],\n ['assert_5finequal_72', ['assert_inequal', ['../a01428.html#a2ca3db47b15350977c1f03c5560ab332', 1, 'gtsam::assert_inequal(const Vector &vec1, const Vector &vec2, double tol=1e-9)'],\n ['../a01428.html#a2f19ba6625a264457805513fefcb5c32', 1, 'gtsam::assert_inequal(const V &expected, const V &actual, double tol=1e-9)'],\n ['../a01428.html#a7a116d0643f123ef3b15d91056506492', 1, 'gtsam::assert_inequal(const Matrix &A, const Matrix &B, double tol=1e-9)']\n ]],\n ['assert_5fprint_5fequal_73', ['assert_print_equal', ['../a01428.html#a830c8c65902d7d0e763562e6c9357346', 1, 'gtsam']]],\n ['assert_5fstdout_5fequal_74', ['assert_stdout_equal', ['../a01428.html#a08641f0f7145716bba9159dd95099a44', 1, 'gtsam']]],\n- ['assert_5fthrow_75', ['assert_throw', ['../a00047.html#a30d3af2da1ea940197addce4f3c223c8', 1, 'types.h']]],\n+ ['assert_5fthrow_75', ['assert_throw', ['../a00020.html#a30d3af2da1ea940197addce4f3c223c8', 1, 'types.h']]],\n ['assignment_76', ['assignment', ['../a03496.html#a53c3580a43dd330492780e45bb94f2b8', 1, 'gtsam::HybridNonlinearISAM::assignment()'],\n ['../a02792.html#a657934a0c65e404319a0f4d7fe560af1', 1, 'gtsam::VisitWith::assignment'],\n ['../a02772.html', 1, 'gtsam::Assignment< L >']\n ]],\n- ['assignment_2eh_77', ['Assignment.h', ['../a00218.html', 1, '']]],\n+ ['assignment_2eh_77', ['Assignment.h', ['../a00248.html', 1, '']]],\n ['assignment_3c_20key_20_3e_78', ['Assignment< Key >', ['../a02772.html', 1, 'gtsam']]],\n ['assignment_5f_79', ['assignment_', ['../a03496.html#a231caf8f3176fa7e5000ba121baf4de4', 1, 'gtsam::HybridNonlinearISAM']]],\n ['at_80', ['at', ['../a04612.html#a0a79d112b79d995d8ea8f704d199259b', 1, 'gtsam::Values::at(Key j) const'],\n ['../a04612.html#a5e511b1e15b67a4fdaaf5bcf676dd1ff', 1, 'gtsam::Values::at(Key j) const'],\n ['../a04456.html#a31082f007860b235520dfe7e427d7c88', 1, 'gtsam::JointMarginal::at()'],\n ['../a04064.html#ab90e73cc6dfde2fae156a45de891dcc4', 1, 'gtsam::VectorValues::at(Key j) const'],\n ['../a04064.html#ae6001983487246c450a50f2e50817c50', 1, 'gtsam::VectorValues::at(Key j)'],\n@@ -216,15 +216,15 @@\n ['atdouble_83', ['atDouble', ['../a04612.html#aee1cbebdc16aff872a1827762ebd80be', 1, 'gtsam::Values']]],\n ['attitudeerror_84', ['attitudeError', ['../a04080.html#a18f856baebcf6c0b2375843048b4f412', 1, 'gtsam::AttitudeFactor']]],\n ['attitudefactor_85', ['attitudefactor', ['../a04080.html', 1, 'gtsam::AttitudeFactor'],\n ['../a04080.html#ada258d635483d37d32ce3b219e3f9186', 1, 'gtsam::AttitudeFactor::AttitudeFactor()'],\n ['../a04080.html#a9d407978a1737d54d14bf020ce489a0c', 1, 'gtsam::AttitudeFactor::AttitudeFactor(const Unit3 &nZ, const Unit3 &bRef=Unit3(0, 0, 1))']\n ]],\n ['attitudefactor_2ecpp_86', ['AttitudeFactor.cpp', ['../a00932.html', 1, '']]],\n- ['attitudefactor_2eh_87', ['AttitudeFactor.h', ['../a00902.html', 1, '']]],\n+ ['attitudefactor_2eh_87', ['AttitudeFactor.h', ['../a00944.html', 1, '']]],\n ['augment_88', ['augment', ['../a03676.html#a7dc9b4a64d6c83cbb6500c6889843153', 1, 'gtsam::MetisIndex::augment()'],\n ['../a03700.html#aedf0942d75479fc6ce0ed9166c9a3f82', 1, 'gtsam::VariableIndex::augment()']\n ]],\n ['augmentationfactor_89', ['augmentationFactor', ['../a04040.html#a927dc3d350c0cf449755cb5f491c0af7', 1, 'gtsam::SubgraphBuilderParameters']]],\n ['augmentedhessian_90', ['augmentedhessian', ['../a03792.html#ad79623fc64110e086baa1980b0f9406a', 1, 'gtsam::GaussianFactorGraph::augmentedHessian(const Ordering &ordering) const'],\n ['../a03792.html#a225dde5026c3f44386c0559ce4320287', 1, 'gtsam::GaussianFactorGraph::augmentedHessian() const']\n ]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_3.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_3.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -24,16 +24,16 @@\n ['backsubstituteupper_11', ['backsubstituteupper', ['../a01428.html#a6c4876cbe85d5651a52eda0e97c60f2f', 1, 'gtsam::backSubstituteUpper(const Matrix &U, const Vector &b, bool unit=false)'],\n ['../a01428.html#a8b0bf332d52b333dab2b20d763c8925b', 1, 'gtsam::backSubstituteUpper(const Vector &b, const Matrix &U, bool unit=false)']\n ]],\n ['barometricfactor_12', ['barometricfactor', ['../a04100.html#a32118f78408e0c408c77b4a380199083', 1, 'gtsam::BarometricFactor::BarometricFactor(Key key, Key baroKey, const double &baroIn, const SharedNoiseModel &model)'],\n ['../a04100.html#ae0565011b7aefe5503382d68dad48b0a', 1, 'gtsam::BarometricFactor::BarometricFactor()'],\n ['../a04100.html', 1, 'gtsam::BarometricFactor']\n ]],\n- ['barometricfactor_2ecpp_13', ['BarometricFactor.cpp', ['../a00974.html', 1, '']]],\n- ['barometricfactor_2eh_14', ['BarometricFactor.h', ['../a00947.html', 1, '']]],\n+ ['barometricfactor_2ecpp_13', ['BarometricFactor.cpp', ['../a00941.html', 1, '']]],\n+ ['barometricfactor_2eh_14', ['BarometricFactor.h', ['../a00992.html', 1, '']]],\n ['base_15', ['base', ['../a03844.html#a9fc30c262bb0a6b6d2ea13d39086f3b9', 1, 'gtsam::JacobianFactor::Base'],\n ['../a02808.html#a96e20fc5f4cc476df586d28dab2da00c', 1, 'gtsam::DecisionTreeFactor::Base'],\n ['../a02848.html#ae4e6afc353582183f3c881a3acad57ca', 1, 'gtsam::DiscreteEliminationTree::Base'],\n ['../a02852.html#a1fe887e0f0c0a7506db99e662f91aa29', 1, 'gtsam::DiscreteFactor::Base'],\n ['../a02864.html#a5b81c4d007a58b2f7a0a9c6412710533', 1, 'gtsam::DiscreteFactorGraph::Base'],\n ['../a02872.html#a187d382e5e43fcc23e55bbbcf8cdb75c', 1, 'gtsam::DiscreteJunctionTree::Base'],\n ['../a03444.html#afe7432e190ac8896e3cbd931c8c5e9fb', 1, 'gtsam::HybridEliminationTree::Base'],\n@@ -80,26 +80,26 @@\n ]],\n ['baseoptimizer_20', ['BaseOptimizer', ['../a04360.html#a383d5ea44839ef8bcba99aac8e76d7f6', 1, 'gtsam::GncOptimizer']]],\n ['baseoptimizerparams_21', ['baseOptimizerParams', ['../a04364.html#a001534e4d9b2665aaf8939fc127d70c6', 1, 'gtsam::GncParams']]],\n ['basis_22', ['basis', ['../a03380.html#a25c12531e20ee69bc7b87bd632c38381', 1, 'gtsam::Unit3::basis()'],\n ['../a01414.html', 1, 'Basis'],\n ['../a02668.html', 1, 'gtsam::Basis< DERIVED >']\n ]],\n- ['basis_2eh_23', ['Basis.h', ['../a00158.html', 1, '']]],\n+ ['basis_2eh_23', ['Basis.h', ['../a00176.html', 1, '']]],\n ['basis_3c_20chebyshev1basis_20_3e_24', ['Basis< Chebyshev1Basis >', ['../a02668.html', 1, 'gtsam']]],\n ['basis_3c_20chebyshev2_20_3e_25', ['Basis< Chebyshev2 >', ['../a02668.html', 1, 'gtsam']]],\n ['basis_3c_20chebyshev2basis_20_3e_26', ['Basis< Chebyshev2Basis >', ['../a02668.html', 1, 'gtsam']]],\n ['basis_3c_20fourierbasis_20_3e_27', ['Basis< FourierBasis >', ['../a02668.html', 1, 'gtsam']]],\n- ['basisfactors_2eh_28', ['BasisFactors.h', ['../a00176.html', 1, '']]],\n+ ['basisfactors_2eh_28', ['BasisFactors.h', ['../a00170.html', 1, '']]],\n ['bayesnet_29', ['bayesnet', ['../a03516.html#ad1f05fb1c55edbb9c84ccb29a0b7464c', 1, 'gtsam::BayesNet::BayesNet(ITERATOR firstConditional, ITERATOR lastConditional)'],\n ['../a03516.html#ae6a59fca7b59061bffe9d3aad97cca69', 1, 'gtsam::BayesNet::BayesNet()'],\n ['../a03516.html', 1, 'gtsam::BayesNet< CONDITIONAL >'],\n ['../a03516.html#a59aa8d5cffc44d6921cdd347f48f6d65', 1, 'gtsam::BayesNet::BayesNet()']\n ]],\n- ['bayesnet_2eh_30', ['BayesNet.h', ['../a00689.html', 1, '']]],\n+ ['bayesnet_2eh_30', ['BayesNet.h', ['../a00614.html', 1, '']]],\n ['bayesnet_3c_20discreteconditional_20_3e_31', ['BayesNet< DiscreteConditional >', ['../a03516.html', 1, 'gtsam']]],\n ['bayesnet_3c_20discretelookuptable_20_3e_32', ['BayesNet< DiscreteLookupTable >', ['../a03516.html', 1, 'gtsam']]],\n ['bayesnet_3c_20gaussianconditional_20_3e_33', ['BayesNet< GaussianConditional >', ['../a03516.html', 1, 'gtsam']]],\n ['bayesnet_3c_20hybridconditional_20_3e_34', ['BayesNet< HybridConditional >', ['../a03516.html', 1, 'gtsam']]],\n ['bayesnet_3c_20symbolicconditional_20_3e_35', ['BayesNet< SymbolicConditional >', ['../a03516.html', 1, 'gtsam']]],\n ['bayesnettype_36', ['bayesnettype', ['../a02860.html#a662cce5359d9cbabb3277f88ca9f3a38', 1, 'gtsam::EliminationTraits< DiscreteFactorGraph >::BayesNetType'],\n ['../a03460.html#aee157d14895e684c199b0aafb2f09ee7', 1, 'gtsam::EliminationTraits< HybridGaussianFactorGraph >::BayesNetType'],\n@@ -110,29 +110,29 @@\n ]],\n ['bayestree_37', ['bayestree', ['../a03496.html#aea6998c026e45222627a188a5927aa24', 1, 'gtsam::HybridNonlinearISAM::bayesTree()'],\n ['../a03540.html', 1, 'gtsam::BayesTree< CLIQUE >'],\n ['../a04548.html#a76efdc9eccb062477ffd6cb29544d94c', 1, 'gtsam::NonlinearISAM::bayesTree()'],\n ['../a03540.html#a52b84560f2afcae463ac9487e6e91a28', 1, 'gtsam::BayesTree::BayesTree()'],\n ['../a03540.html#aa612762931fbe9d2dcf4a2dc24d294d3', 1, 'gtsam::BayesTree::BayesTree(const This &other)']\n ]],\n- ['bayestree_2dinst_2eh_38', ['BayesTree-inst.h', ['../a00659.html', 1, '']]],\n- ['bayestree_2ecpp_39', ['BayesTree.cpp', ['../a00653.html', 1, '']]],\n- ['bayestree_2eh_40', ['BayesTree.h', ['../a00695.html', 1, '']]],\n+ ['bayestree_2dinst_2eh_38', ['BayesTree-inst.h', ['../a00698.html', 1, '']]],\n+ ['bayestree_2ecpp_39', ['BayesTree.cpp', ['../a00632.html', 1, '']]],\n+ ['bayestree_2eh_40', ['BayesTree.h', ['../a00593.html', 1, '']]],\n ['bayestree_3c_20discretebayestreeclique_20_3e_41', ['BayesTree< DiscreteBayesTreeClique >', ['../a03540.html', 1, 'gtsam']]],\n ['bayestree_3c_20gaussianbayestreeclique_20_3e_42', ['BayesTree< GaussianBayesTreeClique >', ['../a03540.html', 1, 'gtsam']]],\n ['bayestree_3c_20hybridbayestreeclique_20_3e_43', ['BayesTree< HybridBayesTreeClique >', ['../a03540.html', 1, 'gtsam']]],\n ['bayestree_3c_20isam2clique_20_3e_44', ['BayesTree< ISAM2Clique >', ['../a03540.html', 1, 'gtsam']]],\n ['bayestree_3c_20symbolicbayestreeclique_20_3e_45', ['BayesTree< SymbolicBayesTreeClique >', ['../a03540.html', 1, 'gtsam']]],\n ['bayestreecliquebase_46', ['bayestreecliquebase', ['../a03552.html#a802c15ee3bb2f09c1ca939c9ef5a3b8e', 1, 'gtsam::BayesTreeCliqueBase::BayesTreeCliqueBase(const BayesTreeCliqueBase &c)'],\n ['../a03552.html#a6c6e1acd351eea812eed018d0946edea', 1, 'gtsam::BayesTreeCliqueBase::BayesTreeCliqueBase(const sharedConditional &conditional)'],\n ['../a03552.html', 1, 'gtsam::BayesTreeCliqueBase< DERIVED, FACTORGRAPH >'],\n ['../a03552.html#a425f748b06905e5f127e061e6b49c440', 1, 'gtsam::BayesTreeCliqueBase::BayesTreeCliqueBase()']\n ]],\n ['bayestreecliquebase_2dinst_2eh_47', ['BayesTreeCliqueBase-inst.h', ['../a00578.html', 1, '']]],\n- ['bayestreecliquebase_2eh_48', ['BayesTreeCliqueBase.h', ['../a00602.html', 1, '']]],\n+ ['bayestreecliquebase_2eh_48', ['BayesTreeCliqueBase.h', ['../a00662.html', 1, '']]],\n ['bayestreecliquebase_3c_20discretebayestreeclique_2c_20discretefactorgraph_20_3e_49', ['BayesTreeCliqueBase< DiscreteBayesTreeClique, DiscreteFactorGraph >', ['../a03552.html', 1, 'gtsam']]],\n ['bayestreecliquebase_3c_20gaussianbayestreeclique_2c_20gaussianfactorgraph_20_3e_50', ['BayesTreeCliqueBase< GaussianBayesTreeClique, GaussianFactorGraph >', ['../a03552.html', 1, 'gtsam']]],\n ['bayestreecliquebase_3c_20hybridbayestreeclique_2c_20hybridgaussianfactorgraph_20_3e_51', ['BayesTreeCliqueBase< HybridBayesTreeClique, HybridGaussianFactorGraph >', ['../a03552.html', 1, 'gtsam']]],\n ['bayestreecliquebase_3c_20isam2clique_2c_20gaussianfactorgraph_20_3e_52', ['BayesTreeCliqueBase< ISAM2Clique, GaussianFactorGraph >', ['../a03552.html', 1, 'gtsam']]],\n ['bayestreecliquebase_3c_20symbolicbayestreeclique_2c_20symbolicfactorgraph_20_3e_53', ['BayesTreeCliqueBase< SymbolicBayesTreeClique, SymbolicFactorGraph >', ['../a03552.html', 1, 'gtsam']]],\n ['bayestreecliquedata_54', ['BayesTreeCliqueData', ['../a03536.html', 1, 'gtsam']]],\n ['bayestreecliquestats_55', ['BayesTreeCliqueStats', ['../a03532.html', 1, 'gtsam']]],\n@@ -161,15 +161,15 @@\n ['bearing_3c_20pose3_2c_20pose3_20_3e_63', ['Bearing< Pose3, Pose3 >', ['../a03200.html', 1, 'gtsam']]],\n ['bearingfactor_64', ['bearingfactor', ['../a04656.html', 1, 'gtsam::BearingFactor< A1, A2, T >'],\n ['../a04656.html#af6f0119ea5805d2b77b85f292920a647', 1, 'gtsam::BearingFactor::BearingFactor()'],\n ['../a04656.html#ac8293c85cbe2aee87457e64475a7a93a', 1, 'gtsam::BearingFactor::BearingFactor(Key key1, Key key2, const T &measured, const SharedNoiseModel &model)']\n ]],\n ['bearingfactor_2eh_65', ['BearingFactor.h', ['../a08158.html', 1, '']]],\n ['bearingrange_66', ['BearingRange', ['../a02924.html', 1, 'gtsam']]],\n- ['bearingrange_2eh_67', ['BearingRange.h', ['../a00281.html', 1, '']]],\n+ ['bearingrange_2eh_67', ['BearingRange.h', ['../a00350.html', 1, '']]],\n ['bearingrangefactor_68', ['bearingrangefactor', ['../a04664.html#a0a1df8a5b7807a3ecc3e1baa74802ac7', 1, 'gtsam::BearingRangeFactor::BearingRangeFactor()'],\n ['../a04664.html#a7398d2ecd4e269a6852473e6fb8108d5', 1, 'gtsam::BearingRangeFactor::BearingRangeFactor(Key key1, Key key2, const T &bearingRange, const SharedNoiseModel &model)'],\n ['../a04664.html', 1, 'gtsam::BearingRangeFactor< A1, A2, B, R >'],\n ['../a04664.html#a2cadb2247daabfc360bbf1d930909edb', 1, 'gtsam::BearingRangeFactor::BearingRangeFactor()']\n ]],\n ['bearingrangefactor_2eh_69', ['BearingRangeFactor.h', ['../a08164.html', 1, '']]],\n ['begin_70', ['begin', ['../a03592.html#a17c02f11c35bf7768347cad4943f0f64', 1, 'gtsam::Factor::begin()'],\n@@ -184,25 +184,25 @@\n ['../a03572.html#acca063529671c6783551c694061f17ab', 1, 'gtsam::Conditional::beginFrontals() const']\n ]],\n ['beginparents_72', ['beginparents', ['../a03572.html#aa44803c99d5df7869d1151468c49afad', 1, 'gtsam::Conditional::beginParents()'],\n ['../a03572.html#af1f80fbcb599d244f1f83998996d34b0', 1, 'gtsam::Conditional::beginParents() const']\n ]],\n ['beta_73', ['beta', ['../a04728.html#a788004c0af2e4be08ab6ca2329d3696f', 1, 'gtsam::ShonanAveragingParameters']]],\n ['between_74', ['between', ['../a02944.html#a9bba3f8020ee39cf143086e62572cbb7', 1, 'gtsam::Cal3_S2::between()'],\n- ['../a00122.html#a72a7c561cc91f437a22023297fb7f658', 1, 'gtsam::testing::between()']\n+ ['../a00011.html#a72a7c561cc91f437a22023297fb7f658', 1, 'gtsam::testing::between()']\n ]],\n ['between_5fdefault_75', ['between_default', ['../a01428.html#abd92914d0822d42584d46f31fb500048', 1, 'gtsam']]],\n ['betweenconstraint_76', ['betweenconstraint', ['../a04772.html', 1, 'gtsam::BetweenConstraint< VALUE >'],\n ['../a04772.html#a58f473a74ca49a13084db2d076278baa', 1, 'gtsam::BetweenConstraint::BetweenConstraint()']\n ]],\n ['betweenfactor_77', ['betweenfactor', ['../a04764.html', 1, 'gtsam::BetweenFactor< VALUE >'],\n ['../a04764.html#a059852c5e2a89302b823baae2de62676', 1, 'gtsam::BetweenFactor::BetweenFactor()'],\n ['../a04764.html#a8b852f5210cb19fa5c31ff97a5aec20e', 1, 'gtsam::BetweenFactor::BetweenFactor(Key key1, Key key2, const VALUE &measured, const SharedNoiseModel &model=nullptr)']\n ]],\n- ['betweenfactor_2eh_78', ['BetweenFactor.h', ['../a01319.html', 1, '']]],\n+ ['betweenfactor_2eh_78', ['BetweenFactor.h', ['../a01322.html', 1, '']]],\n ['biasacccovariance_79', ['biasAccCovariance', ['../a04104.html#af2eda5c67b594a6e4276465503b1f00b', 1, 'gtsam::PreintegrationCombinedParams']]],\n ['biasaccomegaint_80', ['biasAccOmegaInt', ['../a04104.html#a0a7739a500c8feb97dc42687bacd6b77', 1, 'gtsam::PreintegrationCombinedParams']]],\n ['biascorrecteddelta_81', ['biascorrecteddelta', ['../a04192.html#a8df1dd0307e9f0e4f840c4e169b296e9', 1, 'gtsam::ManifoldPreintegration::biasCorrectedDelta()'],\n ['../a04216.html#a60931119ee6fa92d208a0f2a57c86f44', 1, 'gtsam::PreintegrationBase::biasCorrectedDelta()'],\n ['../a04244.html#af3a153da456c86a9de922cb7ce142c32', 1, 'gtsam::TangentPreintegration::biasCorrectedDelta()']\n ]],\n ['biascorrecteddeltarij_82', ['biascorrectedDeltaRij', ['../a04208.html#a10fbefa82ee213aba78f119fb5acafba', 1, 'gtsam::PreintegratedRotation']]],\n@@ -211,17 +211,17 @@\n ]],\n ['biasomegacovariance_84', ['biasOmegaCovariance', ['../a04104.html#ad871987bbb1686a134f0e0212793ed67', 1, 'gtsam::PreintegrationCombinedParams']]],\n ['binaryedges_85', ['binaryEdges', ['../a03576.html#aaae41b37832d3b1d53b56ff11901567e', 1, 'gtsam::DotWriter']]],\n ['binaryfunction_86', ['BinaryFunction', ['../a04300.html', 1, 'gtsam::Expression']]],\n ['binaryjacobianfactor_87', ['binaryjacobianfactor', ['../a03720.html', 1, 'gtsam::BinaryJacobianFactor< M, N1, N2 >'],\n ['../a03720.html#adef0324d93ae1dd00943ea9a088b9bee', 1, 'gtsam::BinaryJacobianFactor::BinaryJacobianFactor()']\n ]],\n- ['binaryjacobianfactor_2eh_88', ['BinaryJacobianFactor.h', ['../a00785.html', 1, '']]],\n+ ['binaryjacobianfactor_2eh_88', ['BinaryJacobianFactor.h', ['../a00722.html', 1, '']]],\n ['binarymeasurement_89', ['BinaryMeasurement', ['../a04688.html', 1, 'gtsam']]],\n- ['binarymeasurement_2eh_90', ['BinaryMeasurement.h', ['../a01184.html', 1, '']]],\n+ ['binarymeasurement_2eh_90', ['BinaryMeasurement.h', ['../a01229.html', 1, '']]],\n ['binarymeasurement_3c_20rot_20_3e_91', ['BinaryMeasurement< Rot >', ['../a04688.html', 1, 'gtsam']]],\n ['binarymeasurement_3c_20unit3_20_3e_92', ['BinaryMeasurement< Unit3 >', ['../a04688.html', 1, 'gtsam']]],\n ['binarysumexpression_93', ['BinarySumExpression', ['../a04312.html', 1, 'gtsam']]],\n ['blaskernel_94', ['BLASKernel', ['../a03728.html#a5f3c3b9315279cf2112501b7c0a3b499', 1, 'gtsam::ConjugateGradientParameters']]],\n ['block_95', ['block', ['../a03812.html#af327feedf9d9e897e81fd0fb7254f3cc', 1, 'gtsam::HessianFactor::Block'],\n ['../a02472.html#a977ea5f8ace56cdfd9f1afd6f0ecbf30', 1, 'gtsam::SymmetricBlockMatrix::block(DenseIndex I, DenseIndex J) const']\n ]],\n@@ -386,15 +386,15 @@\n ['../a03668.html#ac98d07dd8f7b70e16ccb9a01abf56b9c', 1, 'gtsam::LabeledSymbol::access'],\n ['../a03680.html#ac98d07dd8f7b70e16ccb9a01abf56b9c', 1, 'gtsam::Ordering::access'],\n ['../a03688.html#ac98d07dd8f7b70e16ccb9a01abf56b9c', 1, 'gtsam::Symbol::access']\n ]],\n ['boost_5fconcept_5frequires_105', ['boost_concept_requires', ['../a01428.html#ae03a6aedf0a82f67c2f3e987fb3aacba', 1, 'gtsam::BOOST_CONCEPT_REQUIRES(((IsTestable< T >)),(bool)) check_manifold_invariants(const T &a'],\n ['../a01428.html#a2e95b5b5508cf3284107e979401bd1a4', 1, 'gtsam::BOOST_CONCEPT_REQUIRES(((IsGroup< G >)),(bool)) check_group_invariants(const G &a']\n ]],\n- ['boundingconstraint_2eh_106', ['BoundingConstraint.h', ['../a01334.html', 1, '']]],\n+ ['boundingconstraint_2eh_106', ['BoundingConstraint.h', ['../a01331.html', 1, '']]],\n ['boundingconstraint1_107', ['boundingconstraint1', ['../a04780.html#a936b8b1a987ef137f1b6d4bfbcc3db9f', 1, 'gtsam::BoundingConstraint1::BoundingConstraint1()'],\n ['../a04780.html', 1, 'gtsam::BoundingConstraint1< VALUE >']\n ]],\n ['boundingconstraint2_108', ['boundingconstraint2', ['../a04784.html#a80055453c5f4edd96aab215831371aa1', 1, 'gtsam::BoundingConstraint2::BoundingConstraint2()'],\n ['../a04784.html', 1, 'gtsam::BoundingConstraint2< VALUE1, VALUE2 >']\n ]],\n ['boxes_109', ['boxes', ['../a03576.html#ad250d3e6ff7a1de61c3272c9f292d540', 1, 'gtsam::DotWriter']]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_4.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_4.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -7,57 +7,57 @@\n ['cal3_5', ['cal3', ['../a02940.html', 1, 'gtsam::Cal3'],\n ['../a02940.html#a217dac62e79c531d68a6c7674d326b55', 1, 'gtsam::Cal3::Cal3()=default'],\n ['../a02940.html#a00140a3bcdfc1d1aef72c445bf563962', 1, 'gtsam::Cal3::Cal3(double fx, double fy, double s, double u0, double v0)'],\n ['../a02940.html#a07d11d8f73bca2e0153e58b3e94b49ac', 1, 'gtsam::Cal3::Cal3(const Vector5 &d)'],\n ['../a02940.html#a5422fbe7d6a1c4836aac3e9a391fce1c', 1, 'gtsam::Cal3::Cal3(double fov, int w, int h)'],\n ['../a02940.html#a72a4b85d35c7aad6d4efe9c0a8dc59a1', 1, 'gtsam::Cal3::Cal3(const std::string &path)']\n ]],\n- ['cal3_2ecpp_6', ['Cal3.cpp', ['../a00446.html', 1, '']]],\n- ['cal3_2eh_7', ['Cal3.h', ['../a00293.html', 1, '']]],\n+ ['cal3_2ecpp_6', ['Cal3.cpp', ['../a00329.html', 1, '']]],\n+ ['cal3_2eh_7', ['Cal3.h', ['../a00365.html', 1, '']]],\n ['cal3_5fs2_8', ['cal3_s2', ['../a02944.html#a6f59c7c3f3e8782b2b4e1d71cd289d4b', 1, 'gtsam::Cal3_S2::Cal3_S2(double fx, double fy, double s, double u0, double v0)'],\n ['../a02944.html#ac91a4e1b0cfd0ee9b2a0c3538a325631', 1, 'gtsam::Cal3_S2::Cal3_S2(const Vector5 &d)'],\n ['../a02944.html#ae7de8f587615c7b0909c06df658e96e5', 1, 'gtsam::Cal3_S2::Cal3_S2(double fov, int w, int h)'],\n ['../a02944.html#a6e3f6159fec0563e37f15848237a7d9f', 1, 'gtsam::Cal3_S2::Cal3_S2()=default'],\n ['../a02944.html', 1, 'gtsam::Cal3_S2']\n ]],\n- ['cal3_5fs2_2ecpp_9', ['Cal3_S2.cpp', ['../a00314.html', 1, '']]],\n- ['cal3_5fs2_2eh_10', ['Cal3_S2.h', ['../a00359.html', 1, '']]],\n+ ['cal3_5fs2_2ecpp_9', ['Cal3_S2.cpp', ['../a00275.html', 1, '']]],\n+ ['cal3_5fs2_2eh_10', ['Cal3_S2.h', ['../a00386.html', 1, '']]],\n ['cal3_5fs2stereo_11', ['cal3_s2stereo', ['../a02956.html#ab65f2ccdc932731fb59f6781f775135f', 1, 'gtsam::Cal3_S2Stereo::Cal3_S2Stereo()=default'],\n ['../a02956.html#a2ca55987f036f43be6bed31b7766ab27', 1, 'gtsam::Cal3_S2Stereo::Cal3_S2Stereo(double fx, double fy, double s, double u0, double v0, double b)'],\n ['../a02956.html#aa48a7b399986d48da55d6b8a954606f4', 1, 'gtsam::Cal3_S2Stereo::Cal3_S2Stereo(const Vector6 &d)'],\n ['../a02956.html#a7f1fe1eea1342b36c190c66bad4476ef', 1, 'gtsam::Cal3_S2Stereo::Cal3_S2Stereo(double fov, int w, int h, double b)'],\n ['../a02956.html', 1, 'gtsam::Cal3_S2Stereo']\n ]],\n- ['cal3_5fs2stereo_2ecpp_12', ['Cal3_S2Stereo.cpp', ['../a00413.html', 1, '']]],\n+ ['cal3_5fs2stereo_2ecpp_12', ['Cal3_S2Stereo.cpp', ['../a00464.html', 1, '']]],\n ['cal3_5fs2stereo_2eh_13', ['Cal3_S2Stereo.h', ['../a00419.html', 1, '']]],\n ['cal3bundler_14', ['cal3bundler', ['../a02968.html#a1774c3bd09b74440caa6056e7e8ad264', 1, 'gtsam::Cal3Bundler::Cal3Bundler()=default'],\n ['../a02968.html#a32366d4d57d94b3e78f4d1cf1f264084', 1, 'gtsam::Cal3Bundler::Cal3Bundler(double f, double k1, double k2, double u0=0, double v0=0, double tol=1e-5)'],\n ['../a02968.html', 1, 'gtsam::Cal3Bundler']\n ]],\n- ['cal3bundler_2ecpp_15', ['Cal3Bundler.cpp', ['../a00404.html', 1, '']]],\n- ['cal3bundler_2eh_16', ['Cal3Bundler.h', ['../a00467.html', 1, '']]],\n+ ['cal3bundler_2ecpp_15', ['Cal3Bundler.cpp', ['../a00398.html', 1, '']]],\n+ ['cal3bundler_2eh_16', ['Cal3Bundler.h', ['../a00320.html', 1, '']]],\n ['cal3ds2_17', ['cal3ds2', ['../a02980.html#afb959a59bb324eef4fd6578feb9eca8f', 1, 'gtsam::Cal3DS2::Cal3DS2()'],\n ['../a02980.html', 1, 'gtsam::Cal3DS2']\n ]],\n- ['cal3ds2_2ecpp_18', ['Cal3DS2.cpp', ['../a00335.html', 1, '']]],\n- ['cal3ds2_2eh_19', ['Cal3DS2.h', ['../a00371.html', 1, '']]],\n+ ['cal3ds2_2ecpp_18', ['Cal3DS2.cpp', ['../a00290.html', 1, '']]],\n+ ['cal3ds2_2eh_19', ['Cal3DS2.h', ['../a00296.html', 1, '']]],\n ['cal3ds2_5fbase_20', ['cal3ds2_base', ['../a02992.html#a00a1fad7afcbb3ba09a368c3e4903ddc', 1, 'gtsam::Cal3DS2_Base::Cal3DS2_Base()'],\n ['../a02992.html', 1, 'gtsam::Cal3DS2_Base']\n ]],\n- ['cal3ds2_5fbase_2ecpp_21', ['Cal3DS2_Base.cpp', ['../a00296.html', 1, '']]],\n+ ['cal3ds2_5fbase_2ecpp_21', ['Cal3DS2_Base.cpp', ['../a00470.html', 1, '']]],\n ['cal3fisheye_22', ['cal3fisheye', ['../a02996.html#afb3587b815f8d6b25d8dee3704063132', 1, 'gtsam::Cal3Fisheye::Cal3Fisheye()'],\n ['../a02996.html', 1, 'gtsam::Cal3Fisheye']\n ]],\n- ['cal3fisheye_2ecpp_23', ['Cal3Fisheye.cpp', ['../a00347.html', 1, '']]],\n- ['cal3fisheye_2eh_24', ['Cal3Fisheye.h', ['../a00356.html', 1, '']]],\n+ ['cal3fisheye_2ecpp_23', ['Cal3Fisheye.cpp', ['../a00326.html', 1, '']]],\n+ ['cal3fisheye_2eh_24', ['Cal3Fisheye.h', ['../a00476.html', 1, '']]],\n ['cal3unified_25', ['cal3unified', ['../a03008.html#a6ce150e7037a83dccc3fdbabce4970e7', 1, 'gtsam::Cal3Unified::Cal3Unified()'],\n ['../a03008.html', 1, 'gtsam::Cal3Unified']\n ]],\n- ['cal3unified_2ecpp_26', ['Cal3Unified.cpp', ['../a00287.html', 1, '']]],\n- ['cal3unified_2eh_27', ['Cal3Unified.h', ['../a00380.html', 1, '']]],\n+ ['cal3unified_2ecpp_26', ['Cal3Unified.cpp', ['../a00395.html', 1, '']]],\n+ ['cal3unified_2eh_27', ['Cal3Unified.h', ['../a00434.html', 1, '']]],\n ['calcindices_28', ['calcIndices', ['../a02472.html#ac57dc0378696535ed3c0b8674991c5c4', 1, 'gtsam::SymmetricBlockMatrix']]],\n ['calculatebestestimate_29', ['calculateBestEstimate', ['../a04396.html#a9d6f2b0d018f817f64fee6abdaa413ff', 1, 'gtsam::ISAM2']]],\n ['calculateestimate_30', ['calculateestimate', ['../a04396.html#ae12fc71728266a75fa3893f40531f597', 1, 'gtsam::ISAM2::calculateEstimate() const'],\n ['../a04396.html#a35b4a27886c7dd9caacb1ff2e04ca8a9', 1, 'gtsam::ISAM2::calculateEstimate(Key key) const'],\n ['../a04396.html#a29aac843741b236546fa2f8b70929404', 1, 'gtsam::ISAM2::calculateEstimate(Key key) const']\n ]],\n ['calculatejacobian_31', ['calculatejacobian', ['../a02676.html#a81e42ab8abecdc4b0f9d1bb78d55a735', 1, 'gtsam::Basis::VectorEvaluationFunctor::calculateJacobian()'],\n@@ -80,16 +80,16 @@\n ['../a03008.html#a052ce1b774b2f1afa24bbfee71f9ac59', 1, 'gtsam::Cal3Unified::calibrate()']\n ]],\n ['calibratedcamera_34', ['calibratedcamera', ['../a03028.html', 1, 'gtsam::CalibratedCamera'],\n ['../a03028.html#a88d317a781597e5243bb7995df07d9cc', 1, 'gtsam::CalibratedCamera::CalibratedCamera(const Vector &v)'],\n ['../a03028.html#ae9607d9d9ef98835b38d0fb494eba191', 1, 'gtsam::CalibratedCamera::CalibratedCamera(const Pose3 &pose)'],\n ['../a03028.html#a5b59414e39297638751de5f43b293798', 1, 'gtsam::CalibratedCamera::CalibratedCamera()']\n ]],\n- ['calibratedcamera_2ecpp_35', ['CalibratedCamera.cpp', ['../a00431.html', 1, '']]],\n- ['calibratedcamera_2eh_36', ['CalibratedCamera.h', ['../a00368.html', 1, '']]],\n+ ['calibratedcamera_2ecpp_35', ['CalibratedCamera.cpp', ['../a00407.html', 1, '']]],\n+ ['calibratedcamera_2eh_36', ['CalibratedCamera.h', ['../a00359.html', 1, '']]],\n ['calibratejacobians_37', ['calibrateJacobians', ['../a01428.html#a9ac814fcc4484bce32e4616d69afb225', 1, 'gtsam']]],\n ['calibratemeasurements_38', ['calibratemeasurements', ['../a01428.html#a48ad2c1085fcae3881fa956f4cd81890', 1, 'gtsam::calibrateMeasurements(const CameraSet< SphericalCamera > &cameras, const SphericalCamera::MeasurementVector &measurements)'],\n ['../a01428.html#aebe53b43e5151ce9c355b4aa4ba57c13', 1, 'gtsam::calibrateMeasurements(const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measurements)']\n ]],\n ['calibratemeasurementsshared_39', ['calibrateMeasurementsShared', ['../a01428.html#a0a386184e9ed9cc4ec844d48d91ba759', 1, 'gtsam']]],\n ['calibration_40', ['calibration', ['../a03124.html#a33a168ebe251f7b2e13ba060373994ac', 1, 'gtsam::PinholePose::calibration()'],\n ['../a04960.html#a1a512894a302677b724ef4a0c2b6d0f8', 1, 'gtsam::GenericStereoFactor::calibration()'],\n@@ -120,15 +120,15 @@\n ['cameras_50', ['cameras', ['../a04952.html#a6353b092625e5b122d503aebddd0dbdd', 1, 'gtsam::SmartProjectionRigFactor::cameras()'],\n ['../a04944.html#a1c323a14087e35016da506e2b181adc9', 1, 'gtsam::SmartProjectionPoseFactor::cameras()'],\n ['../a04928.html#a5ffab1f3006c13bdc7efe7ce9a2d7d2f', 1, 'gtsam::SmartFactorBase::cameras()'],\n ['../a04704.html#aca9835ee681fe7dfbd3d0e2b58d4f50d', 1, 'gtsam::SfmData::cameras'],\n ['../a04928.html#af404fbccc4a4d53232f67a98d0e5a61b', 1, 'gtsam::SmartFactorBase::Cameras']\n ]],\n ['cameraset_51', ['CameraSet', ['../a03044.html', 1, 'gtsam']]],\n- ['cameraset_2eh_52', ['CameraSet.h', ['../a00383.html', 1, '']]],\n+ ['cameraset_2eh_52', ['CameraSet.h', ['../a00317.html', 1, '']]],\n ['campose_53', ['CamPose', ['../a04960.html#acf611598e4995aaba265b3b4c853e67c', 1, 'gtsam::GenericStereoFactor']]],\n ['cardinalities_54', ['cardinalities', ['../a02876.html#a8ed9d6273b632b2e80f24d82eae90135', 1, 'gtsam::DiscreteKeys']]],\n ['cartesianproduct_55', ['cartesianproduct', ['../a02772.html#aa6a86b71ed05d48c8b3c7e6a1c5a4fe1', 1, 'gtsam::Assignment::CartesianProduct()'],\n ['../a01428.html#a55a86a4657d82f6ff048a10d058c529f', 1, 'gtsam::cartesianProduct()'],\n ['../a02900.html#ab2691bc3106665bf6a5b7ccf58b8d097', 1, 'gtsam::DiscreteValues::CartesianProduct()']\n ]],\n ['cast_56', ['cast', ['../a02596.html#a3572aa15e1db4d995796f4354d926d49', 1, 'gtsam::Value']]],\n@@ -141,19 +141,19 @@\n ['../a03268.html', 1, 'gtsam::Similarity3::ChartAtOrigin'],\n ['../a03252.html', 1, 'gtsam::Similarity2::ChartAtOrigin'],\n ['../a03236.html', 1, 'gtsam::Rot3::ChartAtOrigin'],\n ['../a03308.html', 1, 'gtsam::SO< N >::ChartAtOrigin'],\n ['../a03184.html', 1, 'gtsam::Pose3::ChartAtOrigin'],\n ['../a03160.html', 1, 'gtsam::Pose2::ChartAtOrigin']\n ]],\n- ['chebyshev_2ecpp_63', ['Chebyshev.cpp', ['../a00164.html', 1, '']]],\n+ ['chebyshev_2ecpp_63', ['Chebyshev.cpp', ['../a00167.html', 1, '']]],\n ['chebyshev_2eh_64', ['Chebyshev.h', ['../a00155.html', 1, '']]],\n ['chebyshev1basis_65', ['Chebyshev1Basis', ['../a02732.html', 1, 'gtsam']]],\n ['chebyshev2_66', ['Chebyshev2', ['../a02740.html', 1, 'gtsam']]],\n- ['chebyshev2_2ecpp_67', ['Chebyshev2.cpp', ['../a00170.html', 1, '']]],\n+ ['chebyshev2_2ecpp_67', ['Chebyshev2.cpp', ['../a00164.html', 1, '']]],\n ['chebyshev2_2eh_68', ['Chebyshev2.h', ['../a00173.html', 1, '']]],\n ['chebyshev2basis_69', ['Chebyshev2Basis', ['../a02736.html', 1, 'gtsam']]],\n ['checkconvergence_70', ['checkconvergence', ['../a01428.html#a3382482454c164c6f5817dcbe6f932b3', 1, 'gtsam::checkConvergence()'],\n ['../a04360.html#a8ff9d9337c35c4b6eb03c2858f9ae557', 1, 'gtsam::GncOptimizer::checkConvergence(const double mu, const Vector &weights, const double cost, const double prev_cost) const']\n ]],\n ['checkcostconvergence_71', ['checkCostConvergence', ['../a04360.html#a66d6c300cc2bc33dae93ef04b006e6e6', 1, 'gtsam::GncOptimizer']]],\n ['checkinvariants_72', ['CheckInvariants', ['../a03572.html#a0581ba698d3f008f2a572c9b0474d6c2', 1, 'gtsam::Conditional']]],\n@@ -173,16 +173,16 @@\n ['../a02780.html#a83715de1ab3f83cd2c616a39837c2eff', 1, 'gtsam::DecisionTree::Choice::Choice(const Choice &f, const Choice &g, const Binary &op)'],\n ['../a02780.html#aec83227caa2e2aef7537f4e77d8598fc', 1, 'gtsam::DecisionTree::Choice::Choice(const L &label, const Choice &f, const Unary &op)'],\n ['../a02780.html#a3738b2959a70d8a08e1fd595837e807e', 1, 'gtsam::DecisionTree::Choice::Choice(const L &label, const Choice &f, const UnaryAssignment &op, const Assignment< L > &assignment)']\n ]],\n ['cholesky_82', ['cholesky', ['../a01411.html', 1, 'Solving by multifrontal variable elimination (QR and Cholesky)'],\n ['../a01412.html', 1, 'Solving by sequential variable elimination (QR and Cholesky)']\n ]],\n- ['cholesky_2ecpp_83', ['cholesky.cpp', ['../a00050.html', 1, '']]],\n- ['cholesky_2eh_84', ['cholesky.h', ['../a00125.html', 1, '']]],\n+ ['cholesky_2ecpp_83', ['cholesky.cpp', ['../a00068.html', 1, '']]],\n+ ['cholesky_2eh_84', ['cholesky.h', ['../a00008.html', 1, '']]],\n ['cholesky_5finverse_85', ['cholesky_inverse', ['../a01428.html#aba542e2cd85f08b76f80a0871a4ea713', 1, 'gtsam']]],\n ['choleskycareful_86', ['choleskyCareful', ['../a01428.html#a747683f736c50bca16b3aab0e95b1b76', 1, 'gtsam']]],\n ['choleskyfailed_87', ['CholeskyFailed', ['../a02512.html', 1, 'gtsam']]],\n ['choleskypartial_88', ['choleskypartial', ['../a02472.html#aaf6e0c34bcb0bfc6af21b58ad9f66e79', 1, 'gtsam::SymmetricBlockMatrix::choleskyPartial()'],\n ['../a01428.html#abe82fa6aceccfa2360cf314ab44f39ad', 1, 'gtsam::choleskyPartial()']\n ]],\n ['choose_89', ['choose', ['../a02776.html#a0bbb7370b145f38b7dcb569ed91f4bb9', 1, 'gtsam::DecisionTree::Leaf::choose()'],\n@@ -284,16 +284,16 @@\n ['cluster_103', ['cluster', ['../a03568.html', 1, 'gtsam::ClusterTree< GRAPH >::Cluster'],\n ['../a03568.html#a02ea1b9ff2d9ad0486b593d3f404ea6a', 1, 'gtsam::ClusterTree::Cluster::Cluster()']\n ]],\n ['clustertree_104', ['clustertree', ['../a03564.html', 1, 'gtsam::ClusterTree< GRAPH >'],\n ['../a03564.html#ad0a639242851874afb9e9e4a001da7ae', 1, 'gtsam::ClusterTree::ClusterTree()'],\n ['../a03564.html#acd26df0cc3df2af1c22e4bc2dc76e226', 1, 'gtsam::ClusterTree::ClusterTree(const This &other)']\n ]],\n- ['clustertree_2dinst_2eh_105', ['ClusterTree-inst.h', ['../a00629.html', 1, '']]],\n- ['clustertree_2eh_106', ['ClusterTree.h', ['../a00608.html', 1, '']]],\n+ ['clustertree_2dinst_2eh_105', ['ClusterTree-inst.h', ['../a00623.html', 1, '']]],\n+ ['clustertree_2eh_106', ['ClusterTree.h', ['../a00686.html', 1, '']]],\n ['clustertree_3c_20discretefactorgraph_20_3e_107', ['ClusterTree< DiscreteFactorGraph >', ['../a03564.html', 1, 'gtsam']]],\n ['clustertree_3c_20gaussianfactorgraph_20_3e_108', ['ClusterTree< GaussianFactorGraph >', ['../a03564.html', 1, 'gtsam']]],\n ['clustertree_3c_20hybridgaussianfactorgraph_20_3e_109', ['ClusterTree< HybridGaussianFactorGraph >', ['../a03564.html', 1, 'gtsam']]],\n ['clustertree_3c_20symbolicfactorgraph_20_3e_110', ['ClusterTree< SymbolicFactorGraph >', ['../a03564.html', 1, 'gtsam']]],\n ['col_111', ['col', ['../a02752.html#a6eab77c9c3e20187a2c6c3e54052d534', 1, 'gtsam::ParameterMatrix::col(size_t index) const'],\n ['../a02752.html#acd002830d61a565536a2da07c6eccf6a', 1, 'gtsam::ParameterMatrix::col(size_t index) -> Eigen::Block< MatrixType, M, 1, true >']\n ]],\n@@ -326,28 +326,28 @@\n ['../a02808.html#a3ee7a26df3eb4606abe8b2d59c62ef29', 1, 'gtsam::DecisionTreeFactor::combine(size_t nrFrontals, ADT::Binary op) const'],\n ['../a02808.html#af97c886654f4c5edc890e976e7534de2', 1, 'gtsam::DecisionTreeFactor::combine(const Ordering &keys, ADT::Binary op) const']\n ]],\n ['combinedimufactor_121', ['combinedimufactor', ['../a04112.html#a5edf3d620bbec01e8c9f24146a79a251', 1, 'gtsam::CombinedImuFactor::CombinedImuFactor()'],\n ['../a04112.html#a1136323705e34e0528ce903a4291928b', 1, 'gtsam::CombinedImuFactor::CombinedImuFactor(Key pose_i, Key vel_i, Key pose_j, Key vel_j, Key bias_i, Key bias_j, const PreintegratedCombinedMeasurements &preintegratedMeasurements)'],\n ['../a04112.html', 1, 'gtsam::CombinedImuFactor']\n ]],\n- ['combinedimufactor_2ecpp_122', ['CombinedImuFactor.cpp', ['../a00980.html', 1, '']]],\n- ['combinedimufactor_2eh_123', ['CombinedImuFactor.h', ['../a00929.html', 1, '']]],\n+ ['combinedimufactor_2ecpp_122', ['CombinedImuFactor.cpp', ['../a00950.html', 1, '']]],\n+ ['combinedimufactor_2eh_123', ['CombinedImuFactor.h', ['../a00953.html', 1, '']]],\n ['combinedscenariorunner_124', ['CombinedScenarioRunner', ['../a04240.html', 1, 'gtsam']]],\n ['comparefunction_125', ['CompareFunction', ['../a04468.html#a76dde3ce9e92a24ad589de414b201418', 1, 'gtsam::NonlinearEquality']]],\n ['componentderivativefactor_126', ['componentderivativefactor', ['../a02728.html#a811f4b56b1fcc6948f75897a0ecc4a0d', 1, 'gtsam::ComponentDerivativeFactor::ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x)'],\n ['../a02728.html#a16c7420cd2b6dbf6360357bb72cea7e2', 1, 'gtsam::ComponentDerivativeFactor::ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x, double a, double b)'],\n ['../a02728.html', 1, 'gtsam::ComponentDerivativeFactor< BASIS, P >']\n ]],\n ['componentderivativefunctor_127', ['componentderivativefunctor', ['../a02700.html#a45eed4377c708dbabcf7c10c56ac4f96', 1, 'gtsam::Basis::ComponentDerivativeFunctor::ComponentDerivativeFunctor()'],\n ['../a02700.html#a04da6190c5893400645f886494919d11', 1, 'gtsam::Basis::ComponentDerivativeFunctor::ComponentDerivativeFunctor(size_t N, size_t i, double x)'],\n ['../a02700.html#a5315e7a143a157610def3e29c5877e89', 1, 'gtsam::Basis::ComponentDerivativeFunctor::ComponentDerivativeFunctor(size_t N, size_t i, double x, double a, double b)'],\n ['../a02700.html', 1, 'gtsam::Basis< DERIVED >::ComponentDerivativeFunctor< M >']\n ]],\n- ['compose_128', ['compose', ['../a00434.html#a72fc8b10f24d82aa8a4c99f99403fe5e', 1, 'gtsam::so3']]],\n+ ['compose_128', ['compose', ['../a00425.html#a72fc8b10f24d82aa8a4c99f99403fe5e', 1, 'gtsam::so3']]],\n ['compose_5fkey_5fvisitor_129', ['compose_key_visitor', ['../a03612.html', 1, 'gtsam']]],\n ['composeposes_130', ['composePoses', ['../a01428.html#a62b34d6038ccdfa84d8a5bb0c15328b1', 1, 'gtsam']]],\n ['compute_131', ['compute', ['../a03980.html#adf125a55542b6b8889e1fbbf8ca6d412', 1, 'gtsam::PowerMethod::compute()'],\n ['../a03716.html#ad7509723eb7602fc1b911bbde6061055', 1, 'gtsam::AcceleratedPowerMethod::compute()']\n ]],\n ['computea_132', ['computea', ['../a04732.html#a72088abb3c741dfa2e9e2d6206690417', 1, 'gtsam::ShonanAveraging::computeA(const Matrix &S) const'],\n ['../a04732.html#ac2f90d8c8f79596bab759bbbe2359210', 1, 'gtsam::ShonanAveraging::computeA(const Values &values) const']\n@@ -395,15 +395,15 @@\n ['concurrentmap_3c_20key_2c_20sharedclique_20_3e_158', ['ConcurrentMap< Key, sharedClique >', ['../a02280.html', 1, 'gtsam']]],\n ['concurrentmap_3c_20key_2c_20vector_20_3e_159', ['ConcurrentMap< Key, Vector >', ['../a02280.html', 1, 'gtsam']]],\n ['conditional_160', ['conditional', ['../a03572.html', 1, 'gtsam::Conditional< FACTOR, DERIVEDCONDITIONAL >'],\n ['../a03572.html#a97b7d1439af9d6bd666946a7d22d2fd5', 1, 'gtsam::Conditional::Conditional(size_t nrFrontals)'],\n ['../a03572.html#a92872ac46ea07c2953eabbdfe816f3ed', 1, 'gtsam::Conditional::Conditional()'],\n ['../a03552.html#ab9dacbf3ad501d8fa4b7f174ac9c9be5', 1, 'gtsam::BayesTreeCliqueBase::conditional()']\n ]],\n- ['conditional_2eh_161', ['Conditional.h', ['../a00680.html', 1, '']]],\n+ ['conditional_2eh_161', ['Conditional.h', ['../a00650.html', 1, '']]],\n ['conditional_3c_20decisiontreefactor_2c_20discreteconditional_20_3e_162', ['Conditional< DecisionTreeFactor, DiscreteConditional >', ['../a03572.html', 1, 'gtsam']]],\n ['conditional_3c_20hybridfactor_2c_20gaussianmixture_20_3e_163', ['Conditional< HybridFactor, GaussianMixture >', ['../a03572.html', 1, 'gtsam']]],\n ['conditional_3c_20hybridfactor_2c_20hybridconditional_20_3e_164', ['Conditional< HybridFactor, HybridConditional >', ['../a03572.html', 1, 'gtsam']]],\n ['conditional_3c_20jacobianfactor_2c_20gaussianconditional_20_3e_165', ['Conditional< JacobianFactor, GaussianConditional >', ['../a03572.html', 1, 'gtsam']]],\n ['conditional_3c_20symbolicfactor_2c_20symbolicconditional_20_3e_166', ['Conditional< SymbolicFactor, SymbolicConditional >', ['../a03572.html', 1, 'gtsam']]],\n ['conditionals_167', ['conditionals', ['../a03392.html#a2a6114538a8c5ea987d265792dc59d22', 1, 'gtsam::GaussianMixture::conditionals() const'],\n ['../a03392.html#a96aab537232e820686ba7117ee424ab5', 1, 'gtsam::GaussianMixture::Conditionals']\n@@ -419,15 +419,15 @@\n ['conjugate_169', ['conjugate', ['../a03228.html#aa809377e3681fa7a1a16d13e716d40fc', 1, 'gtsam::Rot3']]],\n ['conjugategradientdescent_170', ['conjugategradientdescent', ['../a01428.html#ad2b587fde5d35a27d6c88feb4432e785', 1, 'gtsam::conjugateGradientDescent(const System &Ab, const Vector &x, const ConjugateGradientParameters &parameters)'],\n ['../a01428.html#af55440f741d8b2f706101f7a79ba7111', 1, 'gtsam::conjugateGradientDescent(const Matrix &A, const Vector &b, const Vector &x, const ConjugateGradientParameters &parameters)'],\n ['../a01428.html#aa84114ad1593684ad739088a2898afdb', 1, 'gtsam::conjugateGradientDescent(const GaussianFactorGraph &fg, const VectorValues &x, const ConjugateGradientParameters &parameters)']\n ]],\n ['conjugategradientparameters_171', ['ConjugateGradientParameters', ['../a03728.html', 1, 'gtsam']]],\n ['conjugategradients_172', ['conjugateGradients', ['../a01428.html#a6516ea957c3a22ddf429cefef1fe9486', 1, 'gtsam']]],\n- ['conjugategradientsolver_2eh_173', ['ConjugateGradientSolver.h', ['../a00734.html', 1, '']]],\n+ ['conjugategradientsolver_2eh_173', ['ConjugateGradientSolver.h', ['../a00884.html', 1, '']]],\n ['connectkeystofactor_174', ['connectKeysToFactor', ['../a03576.html#a72f901153a3eede8769c898ac1c5a64b', 1, 'gtsam::DotWriter']]],\n ['const_5fiterator_175', ['const_iterator', ['../a03592.html#a71af7ad9e9474ebbcf2fdffc7f31251b', 1, 'gtsam::Factor::const_iterator'],\n ['../a04996.html#a4bbf077adf4021b966f398f551b0ce5e', 1, 'gtsam::SymbolicConditional::const_iterator'],\n ['../a04064.html#a0e8f05ac17c5ae99687b52f2e79a5ac8', 1, 'gtsam::VectorValues::const_iterator']\n ]],\n ['const_5fselector_176', ['const_selector', ['../a02536.html', 1, 'gtsam']]],\n ['const_5fselector_3c_20basic_5ftype_2c_20basic_5ftype_2c_20as_5fnon_5fconst_2c_20as_5fconst_20_3e_177', ['const_selector< BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >', ['../a02540.html', 1, 'gtsam']]],\n@@ -439,15 +439,15 @@\n ['constantterm_183', ['constantterm', ['../a03812.html#a51e8f87fdbb60bd0744b624a6bdaa8e4', 1, 'gtsam::HessianFactor::constantTerm() const'],\n ['../a03812.html#afca56ce4b4515feb1b108a80f0dbd152', 1, 'gtsam::HessianFactor::constantTerm()']\n ]],\n ['constanttwistscenario_184', ['constanttwistscenario', ['../a04228.html#a30f972429efb00671fc30d6c958d13b3', 1, 'gtsam::ConstantTwistScenario::ConstantTwistScenario()'],\n ['../a04228.html', 1, 'gtsam::ConstantTwistScenario']\n ]],\n ['constantvelocityfactor_185', ['ConstantVelocityFactor', ['../a04128.html', 1, 'gtsam']]],\n- ['constantvelocityfactor_2eh_186', ['ConstantVelocityFactor.h', ['../a00908.html', 1, '']]],\n+ ['constantvelocityfactor_2eh_186', ['ConstantVelocityFactor.h', ['../a00956.html', 1, '']]],\n ['constblock_187', ['constBlock', ['../a03812.html#ad46fcd8ecbfad2f75caa390ac491fa88', 1, 'gtsam::HessianFactor']]],\n ['constkeyvaluepair_188', ['ConstKeyValuePair', ['../a04620.html', 1, 'gtsam::Values']]],\n ['constrained_189', ['constrained', ['../a03932.html#a8bba90d84c33f799fa4c2c7b53b1774b', 1, 'gtsam::noiseModel::Constrained::constrained()'],\n ['../a03932.html', 1, 'gtsam::noiseModel::Constrained'],\n ['../a03932.html#a96cf4e02109b88d9be5a90d657ddd134', 1, 'gtsam::noiseModel::Constrained::Constrained(const Vector &mu, const Vector &sigmas)'],\n ['../a03932.html#ad6aa2d673a9660668cbb5b446c2aea05', 1, 'gtsam::noiseModel::Constrained::Constrained(const Vector &sigmas=Z_1x1)']\n ]],\n@@ -509,16 +509,16 @@\n ['../a03380.html#a99fd6adaa54d5d6af774291142af4c2c', 1, 'gtsam::Unit3::cross()']\n ]],\n ['csrformat_227', ['CSRFormat', ['../a03680.html#af93f2b27c190bd5d15e3aa426778a45e', 1, 'gtsam::Ordering']]],\n ['customfactor_228', ['customfactor', ['../a04248.html', 1, 'gtsam::CustomFactor'],\n ['../a04248.html#a53488ff12f9b8a98c49c432dd4332176', 1, 'gtsam::CustomFactor::CustomFactor(const SharedNoiseModel &noiseModel, const KeyVector &keys, const CustomErrorFunction &errorFunction)'],\n ['../a04248.html#ac93d675279e7e26e966775dd64f61331', 1, 'gtsam::CustomFactor::CustomFactor()=default']\n ]],\n- ['customfactor_2ecpp_229', ['CustomFactor.cpp', ['../a01118.html', 1, '']]],\n- ['customfactor_2eh_230', ['CustomFactor.h', ['../a01058.html', 1, '']]],\n+ ['customfactor_2ecpp_229', ['CustomFactor.cpp', ['../a01076.html', 1, '']]],\n+ ['customfactor_2eh_230', ['CustomFactor.h', ['../a01055.html', 1, '']]],\n ['cyclic_231', ['cyclic', ['../a03060.html', 1, 'gtsam::Cyclic< N >'],\n ['../a03060.html#a7d391305f0d5d8928f4e87260eeb7132', 1, 'gtsam::Cyclic::Cyclic()'],\n ['../a03060.html#a9fe359009a45861d7aed46f4895fc123', 1, 'gtsam::Cyclic::Cyclic(size_t i)']\n ]],\n- ['cyclic_2ecpp_232', ['Cyclic.cpp', ['../a00437.html', 1, '']]],\n- ['cyclic_2eh_233', ['Cyclic.h', ['../a00350.html', 1, '']]]\n+ ['cyclic_2ecpp_232', ['Cyclic.cpp', ['../a00428.html', 1, '']]],\n+ ['cyclic_2eh_233', ['Cyclic.h', ['../a00332.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_5.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_5.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -9,52 +9,52 @@\n ['../a02992.html#a3528f21cedb334863e95af30e342d6de', 1, 'gtsam::Cal3DS2_Base::D2d_calibration(const Point2 &p) const']\n ]],\n ['d2d_5fintrinsic_2', ['d2d_intrinsic', ['../a02992.html#a2a5de5d704c658de776503bc78f30575', 1, 'gtsam::Cal3DS2_Base::D2d_intrinsic()'],\n ['../a02968.html#a2d2f5baf132f1c70cd55fab1defc66ec', 1, 'gtsam::Cal3Bundler::D2d_intrinsic(const Point2 &p) const']\n ]],\n ['d2d_5fintrinsic_5fcalibration_3', ['D2d_intrinsic_calibration', ['../a02968.html#a130a3fee3d0c17fb1dfb3dab67ffdd66', 1, 'gtsam::Cal3Bundler']]],\n ['dampen_4', ['Dampen', ['../a04540.html#abb04d87a8f860dad18c1898a0f3da21d', 1, 'gtsam::NonlinearFactorGraph']]],\n- ['dataset_2ecpp_5', ['dataset.cpp', ['../a01265.html', 1, '']]],\n- ['dataset_2eh_6', ['dataset.h', ['../a01259.html', 1, '']]],\n- ['dcompose_7', ['Dcompose', ['../a00434.html#a7c7e26b6d07ec0f16363c196247b294d', 1, 'gtsam::so3']]],\n+ ['dataset_2ecpp_5', ['dataset.cpp', ['../a01262.html', 1, '']]],\n+ ['dataset_2eh_6', ['dataset.h', ['../a01283.html', 1, '']]],\n+ ['dcompose_7', ['Dcompose', ['../a00425.html#a7c7e26b6d07ec0f16363c196247b294d', 1, 'gtsam::so3']]],\n ['dcs_8', ['DCS', ['../a03912.html', 1, 'gtsam::noiseModel::mEstimator']]],\n ['deallocate_5f_9', ['deallocate_', ['../a02324.html#a93ec4963773f9cfcfdc34b437b0274b1', 1, 'gtsam::GenericValue::deallocate_()'],\n ['../a02596.html#a5a0554b9e0758f370073ea3cc5cf1c9f', 1, 'gtsam::Value::deallocate_()']\n ]],\n- ['debug_2ecpp_10', ['debug.cpp', ['../a00032.html', 1, '']]],\n- ['debug_2eh_11', ['debug.h', ['../a00008.html', 1, '']]],\n+ ['debug_2ecpp_10', ['debug.cpp', ['../a00101.html', 1, '']]],\n+ ['debug_2eh_11', ['debug.h', ['../a00053.html', 1, '']]],\n ['decideiftriangulate_12', ['decideIfTriangulate', ['../a04936.html#a13b6cc6b17c4de6ed2a254c18b01931d', 1, 'gtsam::SmartProjectionFactor']]],\n ['decisiontree_13', ['decisiontree', ['../a02796.html#af290fdb29bb254e51bfa295208655bcf', 1, 'gtsam::DecisionTree::DecisionTree()'],\n ['../a02796.html#a6427d8a417f455f8e143ab09c3d04209', 1, 'gtsam::DecisionTree::DecisionTree(const Y &y)'],\n ['../a02796.html#ae0b844473823aa09c71e668449509cd2', 1, 'gtsam::DecisionTree::DecisionTree(const L &label, const Y &y1, const Y &y2)'],\n ['../a02796.html#aaa6cb1a9966203a7f43ccd31b335ca7d', 1, 'gtsam::DecisionTree::DecisionTree(const LabelC &label, const Y &y1, const Y &y2)'],\n ['../a02796.html#ad754d8699cb205788f889f012781bdc2', 1, 'gtsam::DecisionTree::DecisionTree(const std::vector< LabelC > &labelCs, const std::vector< Y > &ys)'],\n ['../a02796.html#a3a9a4b4209812f071c1225d9542fa443', 1, 'gtsam::DecisionTree::DecisionTree(const std::vector< LabelC > &labelCs, const std::string &table)'],\n ['../a02796.html#a1d535f26a06302403a1bd6dcac87b041', 1, 'gtsam::DecisionTree::DecisionTree(Iterator begin, Iterator end, const L &label)'],\n ['../a02796.html#afb65bfe5d3dc2b8f294ea894aabc25a3', 1, 'gtsam::DecisionTree::DecisionTree(const L &label, const DecisionTree &f0, const DecisionTree &f1)'],\n ['../a02796.html#a3fe8dfec74c488b61dfd157de62c8ef3', 1, 'gtsam::DecisionTree::DecisionTree(const DecisionTree< L, X > &other, Func Y_of_X)'],\n ['../a02796.html#ad5533f615494992ac69b54571d2449b7', 1, 'gtsam::DecisionTree::DecisionTree(const DecisionTree< M, X > &other, const std::map< M, L > &map, Func Y_of_X)'],\n ['../a02796.html', 1, 'gtsam::DecisionTree< L, Y >']\n ]],\n- ['decisiontree_2eh_14', ['DecisionTree.h', ['../a00239.html', 1, '']]],\n+ ['decisiontree_2eh_14', ['DecisionTree.h', ['../a00179.html', 1, '']]],\n ['decisiontree_3c_20key_2c_20double_20_3e_15', ['DecisionTree< Key, double >', ['../a02796.html', 1, 'gtsam']]],\n ['decisiontree_3c_20key_2c_20gaussianconditional_3a_3ashared_5fptr_20_3e_16', ['DecisionTree< Key, GaussianConditional::shared_ptr >', ['../a02796.html', 1, 'gtsam']]],\n ['decisiontree_3c_20key_2c_20sharedfactor_20_3e_17', ['DecisionTree< Key, sharedFactor >', ['../a02796.html', 1, 'gtsam']]],\n ['decisiontree_3c_20l_2c_20double_20_3e_18', ['DecisionTree< L, double >', ['../a02796.html', 1, 'gtsam']]],\n ['decisiontreefactor_19', ['decisiontreefactor', ['../a02808.html#a0276612e37428bac98fbe8f00f280cbb', 1, 'gtsam::DecisionTreeFactor::DecisionTreeFactor(const DiscreteKeys &keys, const ADT &potentials)'],\n ['../a02808.html#ac3619f52469989d3b09537d4a8e1e124', 1, 'gtsam::DecisionTreeFactor::DecisionTreeFactor(const DiscreteKey &key, SOURCE table)'],\n ['../a02808.html#aeba9d3ebc7094a8dbe6246c1c8fdc921', 1, 'gtsam::DecisionTreeFactor::DecisionTreeFactor(const DiscreteKey &key, const std::vector< double > &row)'],\n ['../a02808.html#a5f99b1a4066ec5cf56d4d5a89cb492be', 1, 'gtsam::DecisionTreeFactor::DecisionTreeFactor(const DiscreteConditional &c)'],\n ['../a02808.html#a96e0b5dc34641dda4ee2f0848416adbb', 1, 'gtsam::DecisionTreeFactor::DecisionTreeFactor(const DiscreteKeys &keys, const std::string &table)'],\n ['../a02808.html#ab5b4a6a081aecedc204c8fd2e9694d4d', 1, 'gtsam::DecisionTreeFactor::DecisionTreeFactor(const DiscreteKeys &keys, const std::vector< double > &table)'],\n ['../a02808.html#ad52196341d54cfcb396eb62a52ceb7d6', 1, 'gtsam::DecisionTreeFactor::DecisionTreeFactor()'],\n ['../a02808.html', 1, 'gtsam::DecisionTreeFactor']\n ]],\n- ['decisiontreefactor_2ecpp_20', ['DecisionTreeFactor.cpp', ['../a00272.html', 1, '']]],\n- ['decisiontreefactor_2eh_21', ['DecisionTreeFactor.h', ['../a00227.html', 1, '']]],\n+ ['decisiontreefactor_2ecpp_20', ['DecisionTreeFactor.cpp', ['../a00182.html', 1, '']]],\n+ ['decisiontreefactor_2eh_21', ['DecisionTreeFactor.h', ['../a00188.html', 1, '']]],\n ['defaultcompare_22', ['DefaultCompare', ['../a02796.html#a35920f74df022d256d9137d3ab2628d2', 1, 'gtsam::DecisionTree']]],\n ['defaulteliminate_23', ['defaulteliminate', ['../a05020.html#a980005a975a05d26aabd12585a581a23', 1, 'gtsam::EliminationTraits< SymbolicFactorGraph >::DefaultEliminate()'],\n ['../a03788.html#ae06644bf558a5efd4c133007b67de4c0', 1, 'gtsam::EliminationTraits< GaussianFactorGraph >::DefaultEliminate()'],\n ['../a03460.html#a1278be83f74555f919bce0dcaa91c646', 1, 'gtsam::EliminationTraits< HybridGaussianFactorGraph >::DefaultEliminate()'],\n ['../a02860.html#a4a8f71e10ebf83fe341b2928593b4f0c', 1, 'gtsam::EliminationTraits< DiscreteFactorGraph >::DefaultEliminate()']\n ]],\n ['defaulterrorwhentriangulatingbehindcamera_24', ['defaulterrorwhentriangulatingbehindcamera', ['../a03124.html#a34fbbf618ef1957011ea830773c565fd', 1, 'gtsam::PinholePose::defaultErrorWhenTriangulatingBehindCamera()'],\n@@ -206,15 +206,15 @@\n ['../a02940.html#ae272b1d4bd1285ba4c94ba0a21dedcc8', 1, 'gtsam::Cal3::dim()'],\n ['../a02752.html#af2f346e14dc665e7afa7919d68e9e1b9', 1, 'gtsam::ParameterMatrix::dim()'],\n ['../a02596.html#a21e0a839ddaabd4c56559684ff887efe', 1, 'gtsam::Value::dim()'],\n ['../a02324.html#a69007ce84df439ad16eefdd23e55580e', 1, 'gtsam::GenericValue::dim()'],\n ['../a02956.html#a3f6f0eeca6a2eab2221f36d00dfd5d08', 1, 'gtsam::Cal3_S2Stereo::dim()']\n ]],\n ['dimension_82', ['dimension', ['../a04140.html#a85ba8cd799a5771ad8ac8669e1377f1d', 1, 'gtsam::imuBias::ConstantBias']]],\n- ['dimensionso_83', ['DimensionSO', ['../a00344.html#afdaebcf25a03a9a9986d35d2831605dd', 1, 'gtsam::internal']]],\n+ ['dimensionso_83', ['DimensionSO', ['../a00389.html#afdaebcf25a03a9a9986d35d2831605dd', 1, 'gtsam::internal']]],\n ['dims_84', ['dims', ['../a04064.html#a4d220e303b7ac4c26c602ff7075c336c', 1, 'gtsam::VectorValues::Dims'],\n ['../a04292.html#a708f557c8b95ab8d3f047852b9ad7267', 1, 'gtsam::Expression::dims()'],\n ['../a04612.html#adc9c857e9b4775c8200e33c080d599ef', 1, 'gtsam::Values::dims()']\n ]],\n ['dims_5f_85', ['dims_', ['../a04280.html#a74e6d73bd82c3ea52a5b5878be6db725', 1, 'gtsam::ExpressionFactor']]],\n ['direction_86', ['direction', ['../a03068.html#ac12aedc3267b87de73518edad3d3bfba', 1, 'gtsam::EssentialMatrix']]],\n ['directproduct_87', ['directproduct', ['../a02348.html', 1, 'gtsam::DirectProduct'],\n@@ -228,73 +228,73 @@\n ]],\n ['discretebayesnet_90', ['discretebayesnet', ['../a02816.html#a73b6d262d031217311515968c7f90f70', 1, 'gtsam::DiscreteBayesNet::DiscreteBayesNet(const CONTAINER &conditionals)'],\n ['../a02816.html#a578876c094461271ac57f31f8f5212c4', 1, 'gtsam::DiscreteBayesNet::DiscreteBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)'],\n ['../a02816.html#a1caa6732f0bf990da980f5154c499755', 1, 'gtsam::DiscreteBayesNet::DiscreteBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)'],\n ['../a02816.html#a7d2ca3113fe78e4f6788d120b62f9004', 1, 'gtsam::DiscreteBayesNet::DiscreteBayesNet()'],\n ['../a02816.html', 1, 'gtsam::DiscreteBayesNet']\n ]],\n- ['discretebayesnet_2ecpp_91', ['DiscreteBayesNet.cpp', ['../a00269.html', 1, '']]],\n- ['discretebayesnet_2eh_92', ['DiscreteBayesNet.h', ['../a00197.html', 1, '']]],\n+ ['discretebayesnet_2ecpp_91', ['DiscreteBayesNet.cpp', ['../a00218.html', 1, '']]],\n+ ['discretebayesnet_2eh_92', ['DiscreteBayesNet.h', ['../a00200.html', 1, '']]],\n ['discretebayestree_93', ['discretebayestree', ['../a02828.html#a9ed89e4e8ddbb56919ab48642a1032c4', 1, 'gtsam::DiscreteBayesTree::DiscreteBayesTree()'],\n ['../a02828.html', 1, 'gtsam::DiscreteBayesTree']\n ]],\n- ['discretebayestree_2ecpp_94', ['DiscreteBayesTree.cpp', ['../a00200.html', 1, '']]],\n- ['discretebayestree_2eh_95', ['DiscreteBayesTree.h', ['../a00266.html', 1, '']]],\n+ ['discretebayestree_2ecpp_94', ['DiscreteBayesTree.cpp', ['../a00245.html', 1, '']]],\n+ ['discretebayestree_2eh_95', ['DiscreteBayesTree.h', ['../a00227.html', 1, '']]],\n ['discretebayestreeclique_96', ['DiscreteBayesTreeClique', ['../a02824.html', 1, 'gtsam']]],\n ['discretecluster_97', ['DiscreteCluster', ['../a01428.html#aa8c26fa5afbbfd23795d7d421e543a81', 1, 'gtsam']]],\n ['discreteconditional_98', ['discreteconditional', ['../a02832.html', 1, 'gtsam::DiscreteConditional'],\n ['../a02832.html#abde5b7e78cd17f518afb2e8048e6748d', 1, 'gtsam::DiscreteConditional::DiscreteConditional()'],\n ['../a02832.html#a1364e251e09ee03e49bbb21520748bbd', 1, 'gtsam::DiscreteConditional::DiscreteConditional(size_t nFrontals, const DecisionTreeFactor &f)'],\n ['../a02832.html#a831a4f839912d7e18276657926081fdf', 1, 'gtsam::DiscreteConditional::DiscreteConditional(size_t nFrontals, const DiscreteKeys &keys, const ADT &potentials)'],\n ['../a02832.html#a4213103c28d8fe4b6e9f6ee28672b192', 1, 'gtsam::DiscreteConditional::DiscreteConditional(const Signature &signature)'],\n ['../a02832.html#a760caf04f6b2961d98fdd94a44d87456', 1, 'gtsam::DiscreteConditional::DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const Signature::Table &table)'],\n ['../a02832.html#a3250313d8ad45a84e65925165ec772a4', 1, 'gtsam::DiscreteConditional::DiscreteConditional(const DiscreteKey &key, const DiscreteKeys &parents, const std::string &spec)'],\n ['../a02832.html#a178e9c87e767bad37f4f4924632bb099', 1, 'gtsam::DiscreteConditional::DiscreteConditional(const DiscreteKey &key, const std::string &spec)'],\n ['../a02832.html#ab1bdb57afa98f368e4c228a360b0ba15', 1, 'gtsam::DiscreteConditional::DiscreteConditional(const DecisionTreeFactor &joint, const DecisionTreeFactor &marginal)'],\n ['../a02832.html#ac18ed1a2d5c0a781729c3b68b24dc424', 1, 'gtsam::DiscreteConditional::DiscreteConditional(const DecisionTreeFactor &joint, const DecisionTreeFactor &marginal, const Ordering &orderedKeys)']\n ]],\n- ['discreteconditional_2ecpp_99', ['DiscreteConditional.cpp', ['../a00212.html', 1, '']]],\n- ['discreteconditional_2eh_100', ['DiscreteConditional.h', ['../a00260.html', 1, '']]],\n+ ['discreteconditional_2ecpp_99', ['DiscreteConditional.cpp', ['../a00230.html', 1, '']]],\n+ ['discreteconditional_2eh_100', ['DiscreteConditional.h', ['../a00257.html', 1, '']]],\n ['discreteconditionals_101', ['discreteConditionals', ['../a03408.html#a551b4475d7245dc025646025c697e0fa', 1, 'gtsam::HybridBayesNet']]],\n ['discretedistribution_102', ['discretedistribution', ['../a02840.html#a870aa4bea6923cba05ea8b91bb488ecd', 1, 'gtsam::DiscreteDistribution::DiscreteDistribution(const DiscreteKey &key, const std::string &spec)'],\n ['../a02840.html#a8b2add9e498d49aa892fec9bf20f99c3', 1, 'gtsam::DiscreteDistribution::DiscreteDistribution()'],\n ['../a02840.html#adb43c7d4a553bc5120ab9690c2bef5ad', 1, 'gtsam::DiscreteDistribution::DiscreteDistribution(const DecisionTreeFactor &f)'],\n ['../a02840.html#a1044b3e57c23e79a68897081a5dd3f9c', 1, 'gtsam::DiscreteDistribution::DiscreteDistribution(const Signature &s)'],\n ['../a02840.html#a10efbdaaed23499eb50839dd630da293', 1, 'gtsam::DiscreteDistribution::DiscreteDistribution(const DiscreteKey &key, const std::vector< double > &spec)'],\n ['../a02840.html', 1, 'gtsam::DiscreteDistribution']\n ]],\n- ['discretedistribution_2ecpp_103', ['DiscreteDistribution.cpp', ['../a00236.html', 1, '']]],\n- ['discretedistribution_2eh_104', ['DiscreteDistribution.h', ['../a00242.html', 1, '']]],\n+ ['discretedistribution_2ecpp_103', ['DiscreteDistribution.cpp', ['../a00212.html', 1, '']]],\n+ ['discretedistribution_2eh_104', ['DiscreteDistribution.h', ['../a00251.html', 1, '']]],\n ['discreteeliminationtree_105', ['discreteeliminationtree', ['../a02848.html#a782fad055747d26fb8e876e3cf51bd6f', 1, 'gtsam::DiscreteEliminationTree::DiscreteEliminationTree(const DiscreteFactorGraph &factorGraph, const VariableIndex &structure, const Ordering &order)'],\n ['../a02848.html#a615df00f083b043dbc3734f68bad05fc', 1, 'gtsam::DiscreteEliminationTree::DiscreteEliminationTree(const DiscreteFactorGraph &factorGraph, const Ordering &order)'],\n ['../a02848.html', 1, 'gtsam::DiscreteEliminationTree']\n ]],\n- ['discreteeliminationtree_2ecpp_106', ['DiscreteEliminationTree.cpp', ['../a00203.html', 1, '']]],\n- ['discreteeliminationtree_2eh_107', ['DiscreteEliminationTree.h', ['../a00251.html', 1, '']]],\n+ ['discreteeliminationtree_2ecpp_106', ['DiscreteEliminationTree.cpp', ['../a00224.html', 1, '']]],\n+ ['discreteeliminationtree_2eh_107', ['DiscreteEliminationTree.h', ['../a00269.html', 1, '']]],\n ['discretefactor_108', ['discretefactor', ['../a02852.html#afadb0ff9285b8ef4c5efe5fb98167a60', 1, 'gtsam::DiscreteFactor::DiscreteFactor()'],\n ['../a02852.html#af9f2d0ba3efda1bb35a2279c53c26b38', 1, 'gtsam::DiscreteFactor::DiscreteFactor(const CONTAINER &keys)'],\n ['../a02852.html', 1, 'gtsam::DiscreteFactor']\n ]],\n- ['discretefactor_2ecpp_109', ['DiscreteFactor.cpp', ['../a00257.html', 1, '']]],\n- ['discretefactor_2eh_110', ['DiscreteFactor.h', ['../a00188.html', 1, '']]],\n+ ['discretefactor_2ecpp_109', ['DiscreteFactor.cpp', ['../a00266.html', 1, '']]],\n+ ['discretefactor_2eh_110', ['DiscreteFactor.h', ['../a00242.html', 1, '']]],\n ['discretefactorgraph_111', ['discretefactorgraph', ['../a02864.html#aabb4702427430be57798639d37bfdc81', 1, 'gtsam::DiscreteFactorGraph::DiscreteFactorGraph()'],\n ['../a02864.html', 1, 'gtsam::DiscreteFactorGraph'],\n ['../a02864.html#a1cc891cc009075ea80f8d114f5ce7941', 1, 'gtsam::DiscreteFactorGraph::DiscreteFactorGraph(const CONTAINER &factors)'],\n ['../a02864.html#ab200e82a32be55ee64c8e0450e289daa', 1, 'gtsam::DiscreteFactorGraph::DiscreteFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)'],\n ['../a02864.html#a9c6155d411d5e8f4169ac14982175908', 1, 'gtsam::DiscreteFactorGraph::DiscreteFactorGraph()']\n ]],\n- ['discretefactorgraph_2ecpp_112', ['DiscreteFactorGraph.cpp', ['../a00254.html', 1, '']]],\n- ['discretefactorgraph_2eh_113', ['DiscreteFactorGraph.h', ['../a00230.html', 1, '']]],\n+ ['discretefactorgraph_2ecpp_112', ['DiscreteFactorGraph.cpp', ['../a00236.html', 1, '']]],\n+ ['discretefactorgraph_2eh_113', ['DiscreteFactorGraph.h', ['../a00197.html', 1, '']]],\n ['discretejunctiontree_114', ['discretejunctiontree', ['../a02872.html#a4555ca722f81654a9aeb9983913dd6fc', 1, 'gtsam::DiscreteJunctionTree::DiscreteJunctionTree()'],\n ['../a02872.html', 1, 'gtsam::DiscreteJunctionTree']\n ]],\n ['discretejunctiontree_2ecpp_115', ['DiscreteJunctionTree.cpp', ['../a00215.html', 1, '']]],\n- ['discretejunctiontree_2eh_116', ['DiscreteJunctionTree.h', ['../a00179.html', 1, '']]],\n+ ['discretejunctiontree_2eh_116', ['DiscreteJunctionTree.h', ['../a00206.html', 1, '']]],\n ['discretekey_117', ['DiscreteKey', ['../a01415.html#gad529b58f00471d8f8b25a89b48b7afc2', 1, 'gtsam']]],\n- ['discretekey_2eh_118', ['DiscreteKey.h', ['../a00221.html', 1, '']]],\n+ ['discretekey_2eh_118', ['DiscreteKey.h', ['../a00272.html', 1, '']]],\n ['discretekeymap_119', ['discreteKeyMap', ['../a03456.html#a796c7f9d89f3a6c0ffc14496a47871eb', 1, 'gtsam::HybridFactorGraph']]],\n ['discretekeys_120', ['discretekeys', ['../a02876.html', 1, 'gtsam::DiscreteKeys'],\n ['../a03448.html#ae85edac700e36080970d91d4fa2e42f8', 1, 'gtsam::HybridFactor::discreteKeys()'],\n ['../a02912.html#a64fdc562c9030fca676e5f20103ce4b1', 1, 'gtsam::Signature::discreteKeys()'],\n ['../a02864.html#a426d04deb0958b223114a68150973dc8', 1, 'gtsam::DiscreteFactorGraph::discreteKeys()'],\n ['../a02808.html#ae9a01f825d7f621959d1b15ee8d2b4ec', 1, 'gtsam::DecisionTreeFactor::discreteKeys()'],\n ['../a02876.html#adc6ee484dc8782489ecd65970ac29901', 1, 'gtsam::DiscreteKeys::DiscreteKeys(const std::vector< int > &cs)'],\n@@ -305,43 +305,43 @@\n ['../a03456.html#adac2988bd778452bdb861fd01a2a9081', 1, 'gtsam::HybridFactorGraph::discreteKeys()']\n ]],\n ['discretekeysasset_121', ['DiscreteKeysAsSet', ['../a01428.html#ad92a1966f54e02a7c2ce061c1228c7b3', 1, 'gtsam']]],\n ['discretekeyset_122', ['discreteKeySet', ['../a03456.html#a24c1edeb99ecbabbba84c0f9a763d575', 1, 'gtsam::HybridFactorGraph']]],\n ['discretelookupdag_123', ['discretelookupdag', ['../a02888.html#a631d976900dcd37b1dc1267bde02dcd0', 1, 'gtsam::DiscreteLookupDAG::DiscreteLookupDAG()'],\n ['../a02888.html', 1, 'gtsam::DiscreteLookupDAG']\n ]],\n- ['discretelookupdag_2ecpp_124', ['DiscreteLookupDAG.cpp', ['../a00209.html', 1, '']]],\n- ['discretelookupdag_2eh_125', ['DiscreteLookupDAG.h', ['../a00245.html', 1, '']]],\n+ ['discretelookupdag_2ecpp_124', ['DiscreteLookupDAG.cpp', ['../a00203.html', 1, '']]],\n+ ['discretelookupdag_2eh_125', ['DiscreteLookupDAG.h', ['../a00194.html', 1, '']]],\n ['discretelookuptable_126', ['discretelookuptable', ['../a02884.html', 1, 'gtsam::DiscreteLookupTable'],\n ['../a02884.html#a981d836a4c625af0a5e021fac9b2bdfa', 1, 'gtsam::DiscreteLookupTable::DiscreteLookupTable()']\n ]],\n ['discretemarginals_127', ['discretemarginals', ['../a02896.html#a989e365c2191c5db801307e50778a706', 1, 'gtsam::DiscreteMarginals::DiscreteMarginals()'],\n ['../a02896.html', 1, 'gtsam::DiscreteMarginals']\n ]],\n- ['discretemarginals_2eh_128', ['DiscreteMarginals.h', ['../a00206.html', 1, '']]],\n+ ['discretemarginals_2eh_128', ['DiscreteMarginals.h', ['../a00221.html', 1, '']]],\n ['discretevalues_129', ['discretevalues', ['../a05040.html', 1, 'DiscreteValues'],\n ['../a02900.html', 1, 'gtsam::DiscreteValues']\n ]],\n- ['discretevalues_2ecpp_130', ['DiscreteValues.cpp', ['../a00185.html', 1, '']]],\n- ['discretevalues_2eh_131', ['DiscreteValues.h', ['../a00191.html', 1, '']]],\n+ ['discretevalues_2ecpp_130', ['DiscreteValues.cpp', ['../a00260.html', 1, '']]],\n+ ['discretevalues_2eh_131', ['DiscreteValues.h', ['../a00254.html', 1, '']]],\n ['distance_132', ['distance', ['../a03092.html#ac112ffab9eb7f956dd9956924eb7759d', 1, 'gtsam::OrientedPlane3::distance()'],\n ['../a03380.html#a8f7e20bc7681d983449c8ab8e8d7760a', 1, 'gtsam::Unit3::distance()']\n ]],\n ['distance2_133', ['distance2', ['../a01428.html#afd1282dfb080cb393ae60188b4582cb2', 1, 'gtsam']]],\n ['distance3_134', ['distance3', ['../a01428.html#aa42f7ec660b7353de39f9c86a26711cc', 1, 'gtsam']]],\n ['dlt_135', ['DLT', ['../a01428.html#ab2c65f1a69009a306b6a5f9ef31dcee2', 1, 'gtsam']]],\n ['doglegdelta_5f_136', ['doglegDelta_', ['../a04396.html#ad460de94ada9813a2a9ca8ee8a953a19', 1, 'gtsam::ISAM2']]],\n ['doglegoptimizer_137', ['doglegoptimizer', ['../a04260.html', 1, 'gtsam::DoglegOptimizer'],\n ['../a04260.html#a1419fd81113aa260374a94a49fe882fe', 1, 'gtsam::DoglegOptimizer::DoglegOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues, const Ordering &ordering)'],\n ['../a04260.html#a803a7052a5817fde973bfe18578aee78', 1, 'gtsam::DoglegOptimizer::DoglegOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues, const DoglegParams &params=DoglegParams())']\n ]],\n- ['doglegoptimizer_2ecpp_138', ['DoglegOptimizer.cpp', ['../a01082.html', 1, '']]],\n- ['doglegoptimizer_2eh_139', ['DoglegOptimizer.h', ['../a01085.html', 1, '']]],\n+ ['doglegoptimizer_2ecpp_138', ['DoglegOptimizer.cpp', ['../a01133.html', 1, '']]],\n+ ['doglegoptimizer_2eh_139', ['DoglegOptimizer.h', ['../a01043.html', 1, '']]],\n ['doglegoptimizerimpl_140', ['DoglegOptimizerImpl', ['../a04264.html', 1, 'gtsam']]],\n- ['doglegoptimizerimpl_2eh_141', ['DoglegOptimizerImpl.h', ['../a01073.html', 1, '']]],\n+ ['doglegoptimizerimpl_2eh_141', ['DoglegOptimizerImpl.h', ['../a01160.html', 1, '']]],\n ['doglegparams_142', ['DoglegParams', ['../a04256.html', 1, 'gtsam']]],\n ['dot_143', ['dot', ['../a03516.html#ae080be60951c55ae928eb6cc03d23ec2', 1, 'gtsam::BayesNet::dot()'],\n ['../a04540.html#ad4ec1d612f9210c68b8206f18765c142', 1, 'gtsam::NonlinearFactorGraph::dot(const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const'],\n ['../a04540.html#a1d86f94cb5876d2e42c5c93c318656b4', 1, 'gtsam::NonlinearFactorGraph::dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const'],\n ['../a04540.html#a7fb53259eaf10ef5bb4239b3f9a4a2a5', 1, 'gtsam::NonlinearFactorGraph::dot(const Values &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const GraphvizFormatting &writer=GraphvizFormatting()) const'],\n ['../a04540.html#a88908bc5972779a8b838def14d09dabd', 1, 'gtsam::NonlinearFactorGraph::dot(std::ostream &os, const Values &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const GraphvizFormatting &writer=GraphvizFormatting()) const'],\n ['../a03524.html#ad4ec1d612f9210c68b8206f18765c142', 1, 'gtsam::FactorGraph::dot()'],\n@@ -361,37 +361,37 @@\n ['../a03540.html#a35c1da2327564e142c49b52d197d32b7', 1, 'gtsam::BayesTree::dot()'],\n ['../a04064.html#a4d340fcef87cb58ded20b48c3479c222', 1, 'gtsam::VectorValues::dot()'],\n ['../a03524.html#a1d86f94cb5876d2e42c5c93c318656b4', 1, 'gtsam::FactorGraph::dot()'],\n ['../a03540.html#a2dc80f8371dee6b7c75a259555221516', 1, 'gtsam::BayesTree::dot(std::ostream &s, sharedClique clique, const KeyFormatter &keyFormatter, int parentnum=0) const'],\n ['../a03540.html#a72c72ab38453c2ce9852a1438bdea505', 1, 'gtsam::BayesTree::dot(const KeyFormatter &keyFormatter=DefaultKeyFormatter) const']\n ]],\n ['dotwriter_144', ['DotWriter', ['../a03576.html', 1, 'gtsam']]],\n- ['dotwriter_2ecpp_145', ['DotWriter.cpp', ['../a00572.html', 1, '']]],\n- ['dotwriter_2eh_146', ['DotWriter.h', ['../a00686.html', 1, '']]],\n+ ['dotwriter_2ecpp_145', ['DotWriter.cpp', ['../a00599.html', 1, '']]],\n+ ['dotwriter_2eh_146', ['DotWriter.h', ['../a00581.html', 1, '']]],\n ['dpoint_147', ['Dpoint', ['../a03024.html#ab774b22d9bbb3b58e5a05f8fcadd981a', 1, 'gtsam::PinholeBase']]],\n ['dpose_148', ['Dpose', ['../a03024.html#a1b8bc2bf7c2d619cebc1a957b0ba9207', 1, 'gtsam::PinholeBase']]],\n ['drawfactor_149', ['DrawFactor', ['../a03576.html#ab9b53c4fe691e088cb3883da42d6af74', 1, 'gtsam::DotWriter']]],\n ['drawvariable_150', ['drawVariable', ['../a03576.html#a0d63bade68d3f7d15a1596c228e145f6', 1, 'gtsam::DotWriter']]],\n ['dsfbase_151', ['dsfbase', ['../a02296.html', 1, 'gtsam::DSFBase'],\n ['../a02296.html#af0274a9e27844450d42dd02ebc3ff34f', 1, 'gtsam::DSFBase::DSFBase(const size_t numNodes)'],\n ['../a02296.html#a7ad36282110651ed9939c8bf8e890425', 1, 'gtsam::DSFBase::DSFBase(const boost::shared_ptr< V > &v_in)']\n ]],\n ['dsfmap_152', ['dsfmap', ['../a02284.html', 1, 'gtsam::DSFMap< KEY >'],\n ['../a02284.html#aac017122db12132a7b6656dd1bb5760f', 1, 'gtsam::DSFMap::DSFMap()']\n ]],\n ['dsfmap_2eh_153', ['DSFMap.h', ['../a00116.html', 1, '']]],\n- ['dsftrackgenerator_2ecpp_154', ['DsfTrackGenerator.cpp', ['../a01211.html', 1, '']]],\n- ['dsftrackgenerator_2eh_155', ['DsfTrackGenerator.h', ['../a01232.html', 1, '']]],\n+ ['dsftrackgenerator_2ecpp_154', ['DsfTrackGenerator.cpp', ['../a01199.html', 1, '']]],\n+ ['dsftrackgenerator_2eh_155', ['DsfTrackGenerator.h', ['../a01196.html', 1, '']]],\n ['dsfvector_156', ['dsfvector', ['../a02300.html', 1, 'gtsam::DSFVector'],\n ['../a02300.html#ac37c745fe9ba94201ca653d155d085d0', 1, 'gtsam::DSFVector::DSFVector(const boost::shared_ptr< V > &v_in, const std::vector< size_t > &keys)'],\n ['../a02300.html#af88896d4b3454f8fdb10b60b4fa8d5ff', 1, 'gtsam::DSFVector::DSFVector(const std::vector< size_t > &keys)'],\n ['../a02300.html#abd90fd03747876b5fb43df6432ac5ad5', 1, 'gtsam::DSFVector::DSFVector(const size_t numNodes)']\n ]],\n- ['dsfvector_2ecpp_157', ['DSFVector.cpp', ['../a00044.html', 1, '']]],\n- ['dsfvector_2eh_158', ['DSFVector.h', ['../a00077.html', 1, '']]],\n+ ['dsfvector_2ecpp_157', ['DSFVector.cpp', ['../a00125.html', 1, '']]],\n+ ['dsfvector_2eh_158', ['DSFVector.h', ['../a00032.html', 1, '']]],\n ['dummypreconditioner_159', ['DummyPreconditioner', ['../a03996.html', 1, 'gtsam']]],\n ['dummypreconditionerparameters_160', ['DummyPreconditionerParameters', ['../a03992.html', 1, 'gtsam']]],\n ['dynamic_5f_161', ['dynamic_', ['../a02496.html#a4efc6de8e5ea1810c3d32f29a00714c0', 1, 'gtsam::ThreadsafeException']]],\n ['dynamicoutlierrejectionthreshold_162', ['dynamicOutlierRejectionThreshold', ['../a03372.html#a64046ca36c4e21f7a805b31728317deb', 1, 'gtsam::TriangulationParameters']]],\n ['dynamictraits_163', ['DynamicTraits', ['../a02640.html', 1, 'gtsam::internal']]],\n ['dynamictraits_3c_201_2c_20_2d1_2c_20options_2c_20maxrows_2c_20maxcols_20_3e_164', ['DynamicTraits< 1, -1, Options, MaxRows, MaxCols >', ['../a02640.html', 1, 'gtsam::internal']]],\n ['dynamictraits_3c_2d1_2c_20_2d1_2c_20options_2c_20maxrows_2c_20maxcols_20_3e_165', ['DynamicTraits<-1, -1, Options, MaxRows, MaxCols >', ['../a02640.html', 1, 'gtsam::internal']]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_6.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_6.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -18,15 +18,15 @@\n ['../a03528.html#af809c368808a33b15a8669ae1a04912e', 1, 'gtsam::EliminatableClusterTree::Eliminate'],\n ['../a03580.html#a4053522180fd649baf38a49c515e7b53', 1, 'gtsam::EliminateableFactorGraph::Eliminate'],\n ['../a03528.html#a48864b139f927eee46de3078bfbf9234', 1, 'gtsam::EliminatableClusterTree::eliminate()'],\n ['../a03584.html#a11b6bc4f0b28b6b60a86555ed096d805', 1, 'gtsam::EliminationTree::eliminate()'],\n ['../a03844.html#a36c5022a9ce7046a867c46e12d83e551', 1, 'gtsam::JacobianFactor::eliminate()']\n ]],\n ['eliminateablefactorgraph_13', ['EliminateableFactorGraph', ['../a03580.html', 1, 'gtsam']]],\n- ['eliminateablefactorgraph_2eh_14', ['EliminateableFactorGraph.h', ['../a00623.html', 1, '']]],\n+ ['eliminateablefactorgraph_2eh_14', ['EliminateableFactorGraph.h', ['../a00590.html', 1, '']]],\n ['eliminateablefactorgraph_3c_20discretefactorgraph_20_3e_15', ['EliminateableFactorGraph< DiscreteFactorGraph >', ['../a03580.html', 1, 'gtsam']]],\n ['eliminateablefactorgraph_3c_20gaussianfactorgraph_20_3e_16', ['EliminateableFactorGraph< GaussianFactorGraph >', ['../a03580.html', 1, 'gtsam']]],\n ['eliminateablefactorgraph_3c_20hybridgaussianfactorgraph_20_3e_17', ['EliminateableFactorGraph< HybridGaussianFactorGraph >', ['../a03580.html', 1, 'gtsam']]],\n ['eliminateablefactorgraph_3c_20symbolicfactorgraph_20_3e_18', ['EliminateableFactorGraph< SymbolicFactorGraph >', ['../a03580.html', 1, 'gtsam']]],\n ['eliminatecholesky_19', ['eliminatecholesky', ['../a03812.html#a4153fcedb4ea45db327ee1620a3f2ca6', 1, 'gtsam::HessianFactor::eliminateCholesky()'],\n ['../a01410.html#ga37760d3ca31c6d8d60a3a2a17babc3a4', 1, 'gtsam::EliminateCholesky(const GaussianFactorGraph &factors, const Ordering &keys)']\n ]],\n@@ -46,17 +46,17 @@\n ['eliminateqr_27', ['eliminateqr', ['../a01410.html#ga7f318e1523041b005d1214436e2ed821', 1, 'gtsam::JacobianFactor::EliminateQR'],\n ['../a01428.html#ab56c4bfa363f8c23c48eb078e9c84a9c', 1, 'gtsam::EliminateQR()']\n ]],\n ['eliminatesequential_28', ['eliminatesequential', ['../a03580.html#a84279a0dfa8e1131847079ef6329de9d', 1, 'gtsam::EliminateableFactorGraph::eliminateSequential(OptionalOrderingType orderingType=boost::none, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const'],\n ['../a03580.html#a57b8e2b172a5857ec129b4baf07c0c8a', 1, 'gtsam::EliminateableFactorGraph::eliminateSequential(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const']\n ]],\n ['eliminatesymbolic_29', ['eliminatesymbolic', ['../a01428.html#a659f20993995258b1405737e375efd10', 1, 'gtsam::EliminateSymbolic()'],\n- ['../a01376.html#ae394348e1a503834f713405afa9afad8', 1, 'gtsam::internal::EliminateSymbolic()']\n+ ['../a01361.html#ae394348e1a503834f713405afa9afad8', 1, 'gtsam::internal::EliminateSymbolic()']\n ]],\n- ['eliminatetree_30', ['EliminateTree', ['../a00620.html#ae955942fde34b4cf32ac3573a1aa1e29', 1, 'gtsam::inference']]],\n+ ['eliminatetree_30', ['EliminateTree', ['../a00617.html#ae955942fde34b4cf32ac3573a1aa1e29', 1, 'gtsam::inference']]],\n ['elimination_20qr_20and_20cholesky_31', ['elimination qr and cholesky', ['../a01411.html', 1, 'Solving by multifrontal variable elimination (QR and Cholesky)'],\n ['../a01412.html', 1, 'Solving by sequential variable elimination (QR and Cholesky)']\n ]],\n ['eliminationdata_32', ['EliminationData', ['../a03556.html', 1, 'gtsam']]],\n ['eliminationfunction_5f_33', ['eliminationfunction_', ['../a04548.html#a177189467b87cc41c92f03e3d73b283e', 1, 'gtsam::NonlinearISAM::eliminationFunction_'],\n ['../a03496.html#ac1b5740936424126b8adf617f7700058', 1, 'gtsam::HybridNonlinearISAM::eliminationFunction_']\n ]],\n@@ -70,16 +70,16 @@\n ['eliminationtraitstype_41', ['EliminationTraitsType', ['../a03580.html#af0c24ab1ca71a74596ee4a5dc7845dd2', 1, 'gtsam::EliminateableFactorGraph']]],\n ['eliminationtree_42', ['eliminationtree', ['../a03584.html#a2d9565551bfe73676f82d41d86f158a5', 1, 'gtsam::EliminationTree::EliminationTree()'],\n ['../a03584.html', 1, 'gtsam::EliminationTree< BAYESNET, GRAPH >'],\n ['../a03584.html#af9d86f2a1c1e084c02982d08b3512385', 1, 'gtsam::EliminationTree::EliminationTree(const FactorGraphType &factorGraph, const VariableIndex &structure, const Ordering &order)'],\n ['../a03584.html#a5767cf9b1e41ecdd681fc3c230e4a651', 1, 'gtsam::EliminationTree::EliminationTree(const FactorGraphType &factorGraph, const Ordering &order)'],\n ['../a03584.html#aacb8da2b775867c6bc7bc064ded4f68a', 1, 'gtsam::EliminationTree::EliminationTree()']\n ]],\n- ['eliminationtree_2dinst_2eh_43', ['EliminationTree-inst.h', ['../a00587.html', 1, '']]],\n- ['eliminationtree_2eh_44', ['EliminationTree.h', ['../a00641.html', 1, '']]],\n+ ['eliminationtree_2dinst_2eh_43', ['EliminationTree-inst.h', ['../a00665.html', 1, '']]],\n+ ['eliminationtree_2eh_44', ['EliminationTree.h', ['../a00653.html', 1, '']]],\n ['eliminationtree_3c_20discretebayesnet_2c_20discretefactorgraph_20_3e_45', ['EliminationTree< DiscreteBayesNet, DiscreteFactorGraph >', ['../a03584.html', 1, 'gtsam']]],\n ['eliminationtree_3c_20gaussianbayesnet_2c_20gaussianfactorgraph_20_3e_46', ['EliminationTree< GaussianBayesNet, GaussianFactorGraph >', ['../a03584.html', 1, 'gtsam']]],\n ['eliminationtree_3c_20hybridbayesnet_2c_20hybridgaussianfactorgraph_20_3e_47', ['EliminationTree< HybridBayesNet, HybridGaussianFactorGraph >', ['../a03584.html', 1, 'gtsam']]],\n ['eliminationtree_3c_20symbolicbayesnet_2c_20symbolicfactorgraph_20_3e_48', ['EliminationTree< SymbolicBayesNet, SymbolicFactorGraph >', ['../a03584.html', 1, 'gtsam']]],\n ['eliminationtreetype_49', ['eliminationtreetype', ['../a03580.html#abe9b40bd96c33b2b8974949b6fc003ef', 1, 'gtsam::EliminateableFactorGraph::EliminationTreeType'],\n ['../a03788.html#a847f1955c654f43fa24ff656fa3c763a', 1, 'gtsam::EliminationTraits< GaussianFactorGraph >::EliminationTreeType'],\n ['../a05020.html#a4229489dec7c3ec29f4b6200aba70232', 1, 'gtsam::EliminationTraits< SymbolicFactorGraph >::EliminationTreeType'],\n@@ -307,31 +307,31 @@\n ['../a02808.html#ac56914407510b2449dbf258a9409c81f', 1, 'gtsam::DecisionTreeFactor::error(const DiscreteValues &values) const'],\n ['../a03436.html#ac14b9b393e282729bf087cf940efb23b', 1, 'gtsam::HybridConditional::error()']\n ]],\n ['error_5fvector_77', ['error_vector', ['../a03844.html#a1ca92ef2c9cedb3fb3aacaf169575b31', 1, 'gtsam::JacobianFactor']]],\n ['errorafter_78', ['errorAfter', ['../a04420.html#ae57486e5d3d6592d0c08b4783baf2f27', 1, 'gtsam::ISAM2Result']]],\n ['errorbefore_79', ['errorBefore', ['../a04420.html#a5ddf96680d6cac030d8862da98bcaba5', 1, 'gtsam::ISAM2Result']]],\n ['errors_80', ['Errors', ['../a01428.html#a74eb09e3192f06bae9de746aa981624a', 1, 'gtsam']]],\n- ['errors_2ecpp_81', ['Errors.cpp', ['../a00740.html', 1, '']]],\n- ['errors_2eh_82', ['Errors.h', ['../a00749.html', 1, '']]],\n+ ['errors_2ecpp_81', ['Errors.cpp', ['../a00788.html', 1, '']]],\n+ ['errors_2eh_82', ['Errors.h', ['../a00896.html', 1, '']]],\n ['errortol_83', ['errorTol', ['../a04556.html#aaf5a44f1a3dfd67a8027a797641cc31c', 1, 'gtsam::NonlinearOptimizerParams']]],\n ['errorvector_84', ['errorvector', ['../a03044.html#a7e9f7b66f70c0b6ec45101496987244b', 1, 'gtsam::CameraSet::ErrorVector()'],\n ['../a03092.html#a3cb324d48dd534ceab417db6a94a9a3a', 1, 'gtsam::OrientedPlane3::errorVector()'],\n ['../a03380.html#a8ae32a1c6ae64cf51bcfa8257df1088c', 1, 'gtsam::Unit3::errorVector()']\n ]],\n ['essentialmatrix_85', ['essentialmatrix', ['../a03068.html#a29e768b352dff0cec0e50199663fd18e', 1, 'gtsam::EssentialMatrix::EssentialMatrix()'],\n ['../a03068.html', 1, 'gtsam::EssentialMatrix'],\n ['../a03068.html#a7ab38f00c9e4e460827a09b02c9e0f20', 1, 'gtsam::EssentialMatrix::EssentialMatrix()']\n ]],\n ['essentialmatrixconstraint_86', ['essentialmatrixconstraint', ['../a04808.html#ac03a28866f89ad12046904c7c0cff4b8', 1, 'gtsam::EssentialMatrixConstraint::EssentialMatrixConstraint()'],\n ['../a04808.html', 1, 'gtsam::EssentialMatrixConstraint'],\n ['../a04808.html#ad7a49abd9aa91e0671eae13becc08ca0', 1, 'gtsam::EssentialMatrixConstraint::EssentialMatrixConstraint()']\n ]],\n- ['essentialmatrixconstraint_2ecpp_87', ['EssentialMatrixConstraint.cpp', ['../a01253.html', 1, '']]],\n- ['essentialmatrixconstraint_2eh_88', ['EssentialMatrixConstraint.h', ['../a01244.html', 1, '']]],\n+ ['essentialmatrixconstraint_2ecpp_87', ['EssentialMatrixConstraint.cpp', ['../a01235.html', 1, '']]],\n+ ['essentialmatrixconstraint_2eh_88', ['EssentialMatrixConstraint.h', ['../a01298.html', 1, '']]],\n ['essentialmatrixfactor_89', ['essentialmatrixfactor', ['../a04812.html', 1, 'gtsam::EssentialMatrixFactor'],\n ['../a04812.html#a9edbb5ac88824e6c9e87b5b979e5b5a5', 1, 'gtsam::EssentialMatrixFactor::EssentialMatrixFactor(Key key, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model)'],\n ['../a04812.html#ae683f489d5cfad2f4ea6a9840820808c', 1, 'gtsam::EssentialMatrixFactor::EssentialMatrixFactor(Key key, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)']\n ]],\n ['essentialmatrixfactor2_90', ['essentialmatrixfactor2', ['../a04816.html', 1, 'gtsam::EssentialMatrixFactor2'],\n ['../a04816.html#ad5fe19b4fbbf5721eaf7e3e59aa313da', 1, 'gtsam::EssentialMatrixFactor2::EssentialMatrixFactor2(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model)'],\n ['../a04816.html#a88adb03636bff678c71f1f572b9cf5b4', 1, 'gtsam::EssentialMatrixFactor2::EssentialMatrixFactor2(Key key1, Key key2, const Point2 &pA, const Point2 &pB, const SharedNoiseModel &model, boost::shared_ptr< CALIBRATION > K)']\n@@ -427,16 +427,16 @@\n ['../a04064.html#a8e544106b444d50692f71b9af5e2fc0b', 1, 'gtsam::VectorValues::exists()'],\n ['../a04612.html#afcc9bfde328506cbc6d99d806ab66fab', 1, 'gtsam::Values::exists(Key j) const'],\n ['../a04612.html#a81477a7d8790f9dcef8a8e958fc3ad1e', 1, 'gtsam::Values::exists(Key j) const']\n ]],\n ['existsdiscrete_105', ['existsDiscrete', ['../a03504.html#a74556db34e10988347a35bcf552ea64e', 1, 'gtsam::HybridValues']]],\n ['existsnonlinear_106', ['existsNonlinear', ['../a03504.html#ac1288cd14023677c5b94e0ad18553141', 1, 'gtsam::HybridValues']]],\n ['existsvector_107', ['existsVector', ['../a03504.html#ac937aa284ee5e0056a626b70dc8acfae', 1, 'gtsam::HybridValues']]],\n- ['expect_5fcorrect_5fexpression_5fjacobians_108', ['EXPECT_CORRECT_EXPRESSION_JACOBIANS', ['../a01142.html#a701d0cd12b81a725f7f9cd2432fe9e2a', 1, 'expressionTesting.h']]],\n- ['expect_5fcorrect_5ffactor_5fjacobians_109', ['EXPECT_CORRECT_FACTOR_JACOBIANS', ['../a01121.html#a8ec37fe83eda47404b8588e1f012df21', 1, 'factorTesting.h']]],\n+ ['expect_5fcorrect_5fexpression_5fjacobians_108', ['EXPECT_CORRECT_EXPRESSION_JACOBIANS', ['../a01100.html#a701d0cd12b81a725f7f9cd2432fe9e2a', 1, 'expressionTesting.h']]],\n+ ['expect_5fcorrect_5ffactor_5fjacobians_109', ['EXPECT_CORRECT_FACTOR_JACOBIANS', ['../a01091.html#a8ec37fe83eda47404b8588e1f012df21', 1, 'factorTesting.h']]],\n ['explanation_110', ['explanation', ['../a02560.html#autotoc_md1', 1, 'Explanation'],\n ['../a01428.html#autotoc_md0', 1, 'Explanation']\n ]],\n ['expm_111', ['expm', ['../a01428.html#a3041816208c79ef76d3ef2e0991d90b2', 1, 'gtsam::expm(const Vector &x, int K=7)'],\n ['../a01428.html#ab15462d8c16813d0a7a5b1f76a2f64b7', 1, 'gtsam::expm(const Matrix &A, size_t K=7)']\n ]],\n ['expmap_112', ['expmap', ['../a03280.html#a6ceef8c46763ee780baac0bc900e6b64', 1, 'gtsam::so3::ExpmapFunctor::expmap()'],\n@@ -477,48 +477,48 @@\n ['../a04320.html#a08d266d95905c232ef7bd1ce35ea183e', 1, 'gtsam::ExpressionFactorN::expression()'],\n ['../a04292.html#a3866041e611978ceb328ef4f61e086cc', 1, 'gtsam::Expression::Expression(const boost::shared_ptr< internal::ExpressionNode< T > > &root)'],\n ['../a04292.html#a69589c13620a88dd2a70ccdde4cc552d', 1, 'gtsam::Expression::Expression(const Key &key)'],\n ['../a04292.html#ad55a2363518370d61b6cf9f31ad31e10', 1, 'gtsam::Expression::Expression(const T &value)'],\n ['../a04292.html#aaed796271d53563978505b3bf9718a92', 1, 'gtsam::Expression::Expression(typename UnaryFunction< A >::type function, const Expression< A > &expression)'],\n ['../a04292.html#a7a74922989aee4280a13b84dea65d307', 1, 'gtsam::Expression::Expression(const Symbol &symbol)']\n ]],\n- ['expression_2dinl_2eh_118', ['Expression-inl.h', ['../a01016.html', 1, '']]],\n- ['expression_2eh_119', ['Expression.h', ['../a01028.html', 1, '']]],\n+ ['expression_2dinl_2eh_118', ['Expression-inl.h', ['../a01151.html', 1, '']]],\n+ ['expression_2eh_119', ['Expression.h', ['../a01097.html', 1, '']]],\n ['expression_3c_20bearingrange_3c_20a1_2c_20a2_20_3e_20_3e_120', ['Expression< BearingRange< A1, A2 > >', ['../a04292.html', 1, 'gtsam']]],\n ['expression_3c_20double_20_3e_121', ['Expression< double >', ['../a04292.html', 1, 'gtsam']]],\n ['expression_3c_20typename_20bearing_3c_20a1_2c_20a2_20_3e_3a_3aresult_5ftype_20_3e_122', ['Expression< typename Bearing< A1, A2 >::result_type >', ['../a04292.html', 1, 'gtsam']]],\n ['expression_3c_20typename_20range_3c_20a1_2c_20a1_20_3e_3a_3aresult_5ftype_20_3e_123', ['Expression< typename Range< A1, A1 >::result_type >', ['../a04292.html', 1, 'gtsam']]],\n ['expression_5f_124', ['expression_', ['../a04280.html#a4c6b16e6167c0a10c83658195ac5da57', 1, 'gtsam::ExpressionFactor']]],\n ['expressionfactor_125', ['expressionfactor', ['../a04280.html#ae72f1ff1db9bee9478d7d98c5384612f', 1, 'gtsam::ExpressionFactor::ExpressionFactor(const SharedNoiseModel &noiseModel, const T &measurement)'],\n ['../a04280.html#af495ef11db24cd68275af89229240881', 1, 'gtsam::ExpressionFactor::ExpressionFactor(const SharedNoiseModel &noiseModel, const T &measurement, const Expression< T > &expression)'],\n ['../a04280.html', 1, 'gtsam::ExpressionFactor< T >']\n ]],\n ['expressionfactor_3c_20bearingrange_3c_20a1_2c_20a2_20_3e_20_3e_126', ['ExpressionFactor< BearingRange< A1, A2 > >', ['../a04280.html', 1, 'gtsam']]],\n ['expressionfactor_3c_20double_20_3e_127', ['ExpressionFactor< double >', ['../a04280.html', 1, 'gtsam']]],\n ['expressionfactor_3c_20typename_20bearing_3c_20a1_2c_20a2_20_3e_3a_3aresult_5ftype_20_3e_128', ['ExpressionFactor< typename Bearing< A1, A2 >::result_type >', ['../a04280.html', 1, 'gtsam']]],\n ['expressionfactor_3c_20typename_20range_3c_20a1_2c_20a1_20_3e_3a_3aresult_5ftype_20_3e_129', ['ExpressionFactor< typename Range< A1, A1 >::result_type >', ['../a04280.html', 1, 'gtsam']]],\n ['expressionfactorgraph_130', ['ExpressionFactorGraph', ['../a04328.html', 1, 'gtsam']]],\n- ['expressionfactorgraph_2eh_131', ['ExpressionFactorGraph.h', ['../a01010.html', 1, '']]],\n+ ['expressionfactorgraph_2eh_131', ['ExpressionFactorGraph.h', ['../a01019.html', 1, '']]],\n ['expressionfactorn_132', ['expressionfactorn', ['../a04320.html#adb2c071818be1ec01a6e189c140c571e', 1, 'gtsam::ExpressionFactorN::ExpressionFactorN()=default'],\n ['../a04320.html#af960d243b89bc6af96f8aa390c881fb6', 1, 'gtsam::ExpressionFactorN::ExpressionFactorN(const ArrayNKeys &keys, const SharedNoiseModel &noiseModel, const T &measurement)'],\n ['../a04320.html', 1, 'gtsam::ExpressionFactorN< T, Args >']\n ]],\n ['expressionfactorn_3c_20bearingrange_3c_20a1_2c_20a2_20_3e_2c_20a1_2c_20a2_20_3e_133', ['ExpressionFactorN< BearingRange< A1, A2 >, A1, A2 >', ['../a04320.html', 1, 'gtsam']]],\n ['expressionfactorn_3c_20double_2c_20a1_2c_20a1_20_3e_134', ['ExpressionFactorN< double, A1, A1 >', ['../a04320.html', 1, 'gtsam']]],\n ['expressionfactorn_3c_20typename_20bearing_3c_20a1_2c_20a2_20_3e_3a_3aresult_5ftype_2c_20a1_2c_20a2_20_3e_135', ['ExpressionFactorN< typename Bearing< A1, A2 >::result_type, A1, A2 >', ['../a04320.html', 1, 'gtsam']]],\n ['expressionfactorn_3c_20typename_20range_3c_20a1_2c_20a1_20_3e_3a_3aresult_5ftype_2c_20a1_2c_20a1_20_3e_136', ['ExpressionFactorN< typename Range< A1, A1 >::result_type, A1, A1 >', ['../a04320.html', 1, 'gtsam']]],\n ['expressionnode_137', ['ExpressionNode', ['../a04288.html', 1, 'gtsam::internal']]],\n ['expressions_2eh_138', ['expressions.h', ['../a08149.html', 1, '(Global Namespace)'],\n ['../a08146.html', 1, '(Global Namespace)'],\n ['../a08143.html', 1, '(Global Namespace)']\n ]],\n- ['expressiontesting_2eh_139', ['expressionTesting.h', ['../a01142.html', 1, '']]],\n+ ['expressiontesting_2eh_139', ['expressionTesting.h', ['../a01100.html', 1, '']]],\n ['extendedkalmanfilter_140', ['ExtendedKalmanFilter', ['../a04332.html', 1, 'gtsam']]],\n- ['extendedkalmanfilter_2dinl_2eh_141', ['ExtendedKalmanFilter-inl.h', ['../a01091.html', 1, '']]],\n- ['extendedkalmanfilter_2eh_142', ['ExtendedKalmanFilter.h', ['../a01064.html', 1, '']]],\n+ ['extendedkalmanfilter_2dinl_2eh_141', ['ExtendedKalmanFilter-inl.h', ['../a01148.html', 1, '']]],\n+ ['extendedkalmanfilter_2eh_142', ['ExtendedKalmanFilter.h', ['../a01070.html', 1, '']]],\n ['extract_143', ['extract', ['../a04612.html#a2cf6d05880cf030a98afa3013ecbd817', 1, 'gtsam::Values']]],\n ['extractpoint2_144', ['extractPoint2', ['../a08134.html#a2323c7a5c883d9a32485601ee350c59f', 1, 'gtsam::utilities']]],\n ['extractpoint3_145', ['extractPoint3', ['../a08134.html#a52e2686ef9d12eaa3ca671c7df95ac1c', 1, 'gtsam::utilities']]],\n ['extractpose2_146', ['extractPose2', ['../a08134.html#ae4712297aa3898df80cc404bf0696449', 1, 'gtsam::utilities']]],\n ['extractpose3_147', ['extractPose3', ['../a08134.html#acbda1854826aee5227f501aa33f24a95', 1, 'gtsam::utilities']]],\n ['extractposition_148', ['extractPosition', ['../a04368.html#a2026ac5705841973a2b9d06ff99aa7c8', 1, 'gtsam::GraphvizFormatting']]],\n ['extractvectors_149', ['extractVectors', ['../a08134.html#a3d5ca9a9d4bc8931ce36c89d880e8e3e', 1, 'gtsam::utilities']]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_7.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_7.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -9,25 +9,25 @@\n ['../a03592.html#a70ff55886664229a25e29cf2a7bb1bb7', 1, 'gtsam::Factor::Factor(ITERATOR first, ITERATOR last)'],\n ['../a03592.html#aa3d2ef6b21961e708a4cbe10b55be59b', 1, 'gtsam::Factor::Factor(const CONTAINER &keys)']\n ]],\n ['factor_20and_20variable_20types_2', ['Creating new factor and variable types', ['../a08123.html#new_factor_variable_types', 1, '']]],\n ['factor_20graph_3', ['factor graph', ['../a03464.html#autotoc_md2', 1, 'Hybrid Gaussian Factor Graph'],\n ['../a03488.html#autotoc_md3', 1, 'Nonlinear Hybrid Factor Graph']\n ]],\n- ['factor_2ecpp_4', ['Factor.cpp', ['../a00614.html', 1, '']]],\n- ['factor_2eh_5', ['Factor.h', ['../a00593.html', 1, '']]],\n+ ['factor_2ecpp_4', ['Factor.cpp', ['../a00668.html', 1, '']]],\n+ ['factor_2eh_5', ['Factor.h', ['../a00647.html', 1, '']]],\n ['factordims_6', ['factorDims', ['../a03868.html#a725a99a84ba90f5847f283c5c63ad7f4', 1, 'gtsam::InvalidNoiseModel']]],\n ['factorgraph_7', ['factorgraph', ['../a03524.html#a42db0a1062eb6c223b0a186a9d34cb4b', 1, 'gtsam::FactorGraph::FactorGraph()'],\n ['../a03524.html#a63a80ba5a22fee5725d0efa75080cdfb', 1, 'gtsam::FactorGraph::FactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)'],\n ['../a03524.html#a37b5e74d2c3711906f57982b4512351f', 1, 'gtsam::FactorGraph::FactorGraph(const CONTAINER &factors)'],\n ['../a03524.html#ad6bb162e6e7fe7ab393af78bc3ffea4f', 1, 'gtsam::FactorGraph::FactorGraph(std::initializer_list< boost::shared_ptr< DERIVEDFACTOR > > sharedFactors)'],\n ['../a03524.html', 1, 'gtsam::FactorGraph< FACTOR >']\n ]],\n- ['factorgraph_2dinst_2eh_8', ['FactorGraph-inst.h', ['../a00683.html', 1, '']]],\n- ['factorgraph_2eh_9', ['FactorGraph.h', ['../a00575.html', 1, '']]],\n+ ['factorgraph_2dinst_2eh_8', ['FactorGraph-inst.h', ['../a00572.html', 1, '']]],\n+ ['factorgraph_2eh_9', ['FactorGraph.h', ['../a00659.html', 1, '']]],\n ['factorgraph_3c_20conditional_20_3e_10', ['FactorGraph< CONDITIONAL >', ['../a03524.html', 1, 'gtsam']]],\n ['factorgraph_3c_20discreteconditional_20_3e_11', ['FactorGraph< DiscreteConditional >', ['../a03524.html', 1, 'gtsam']]],\n ['factorgraph_3c_20discretefactor_20_3e_12', ['FactorGraph< DiscreteFactor >', ['../a03524.html', 1, 'gtsam']]],\n ['factorgraph_3c_20discretelookuptable_20_3e_13', ['FactorGraph< DiscreteLookupTable >', ['../a03524.html', 1, 'gtsam']]],\n ['factorgraph_3c_20factor_20_3e_14', ['FactorGraph< Factor >', ['../a03524.html', 1, 'gtsam']]],\n ['factorgraph_3c_20gaussianconditional_20_3e_15', ['FactorGraph< GaussianConditional >', ['../a03524.html', 1, 'gtsam']]],\n ['factorgraph_3c_20gaussianfactor_20_3e_16', ['FactorGraph< GaussianFactor >', ['../a03524.html', 1, 'gtsam']]],\n@@ -58,60 +58,60 @@\n ['../a03512.html#ad4db04b85e8278edf499c88fbddb68db', 1, 'gtsam::MixtureFactor::Factors']\n ]],\n ['factors_5f_29', ['factors_', ['../a03524.html#ae0c75f68e3ebc37cc4511285b12c33fc', 1, 'gtsam::FactorGraph::factors_'],\n ['../a03496.html#a37f1f9aa1ba8caa26e236e5bf7326969', 1, 'gtsam::HybridNonlinearISAM::factors_'],\n ['../a04548.html#a3abd8344c16dc519209aec578a9f56df', 1, 'gtsam::NonlinearISAM::factors_']\n ]],\n ['factorsrecalculated_30', ['factorsRecalculated', ['../a04420.html#a3d4494a9ce533ee7fac5acf6819f2484', 1, 'gtsam::ISAM2Result']]],\n- ['factortesting_2eh_31', ['factorTesting.h', ['../a01121.html', 1, '']]],\n+ ['factortesting_2eh_31', ['factorTesting.h', ['../a01091.html', 1, '']]],\n ['factortype_32', ['factortype', ['../a03564.html#a6f94687be7774294808f190e9c5b10c6', 1, 'gtsam::ClusterTree::FactorType'],\n ['../a05020.html#a26777b37d1fa769f5b99439417ea858b', 1, 'gtsam::EliminationTraits< SymbolicFactorGraph >::FactorType'],\n ['../a03788.html#a44c2163f161ac7e266324bb084c81d82', 1, 'gtsam::EliminationTraits< GaussianFactorGraph >::FactorType'],\n ['../a03524.html#aa54fb0b66fd8fee9f3c1f2844cf3edef', 1, 'gtsam::FactorGraph::FactorType'],\n ['../a03584.html#ae32081c8e91b81d6833173a86c999a49', 1, 'gtsam::EliminationTree::FactorType'],\n ['../a03528.html#a9327311eb33b3bfc88da2473d355e56d', 1, 'gtsam::EliminatableClusterTree::FactorType'],\n ['../a03460.html#a9d9657e2321be924b27a8bb043ebbccb', 1, 'gtsam::EliminationTraits< HybridGaussianFactorGraph >::FactorType'],\n ['../a02860.html#a414bee0b0df4c0f28a479f96ac874678', 1, 'gtsam::EliminationTraits< DiscreteFactorGraph >::FactorType']\n ]],\n ['fair_33', ['Fair', ['../a03888.html', 1, 'gtsam::noiseModel::mEstimator']]],\n ['fastdefaultallocator_34', ['FastDefaultAllocator', ['../a02304.html', 1, 'gtsam::internal']]],\n- ['fastdefaultallocator_2eh_35', ['FastDefaultAllocator.h', ['../a00017.html', 1, '']]],\n+ ['fastdefaultallocator_2eh_35', ['FastDefaultAllocator.h', ['../a00041.html', 1, '']]],\n ['fastdefaultvectorallocator_36', ['FastDefaultVectorAllocator', ['../a02308.html', 1, 'gtsam::internal']]],\n ['fastlist_37', ['fastlist', ['../a02312.html', 1, 'gtsam::FastList< VALUE >'],\n ['../a02312.html#a4ddfad84c21aa8e028650085d28e64e1', 1, 'gtsam::FastList::FastList()'],\n ['../a02312.html#a4b392c0cdea93c6af52956ccf6282f44', 1, 'gtsam::FastList::FastList(INPUTITERATOR first, INPUTITERATOR last)'],\n ['../a02312.html#a64ede4dd260eb040bf895828796af872', 1, 'gtsam::FastList::FastList(const FastList< VALUE > &x)'],\n ['../a02312.html#ad71cc6bc403f46960f54c75bc956093f', 1, 'gtsam::FastList::FastList(const Base &x)'],\n ['../a02312.html#a4fe23ef7de32013838ac668231983daf', 1, 'gtsam::FastList::FastList(std::initializer_list< VALUE > l)']\n ]],\n- ['fastlist_2eh_38', ['FastList.h', ['../a00014.html', 1, '']]],\n+ ['fastlist_2eh_38', ['FastList.h', ['../a00086.html', 1, '']]],\n ['fastlist_3c_20vector_20_3e_39', ['FastList< Vector >', ['../a02312.html', 1, 'gtsam']]],\n ['fastmap_40', ['fastmap', ['../a02316.html#a2e756b7ee7f04a4e9d890ce38d388d61', 1, 'gtsam::FastMap::FastMap(const Base &x)'],\n ['../a02316.html#a882d34220cdc01fe4aa83ea2bbf29ce6', 1, 'gtsam::FastMap::FastMap(const FastMap< KEY, VALUE > &x)'],\n ['../a02316.html#a44f4df011d0ec4151435413fe4633a76', 1, 'gtsam::FastMap::FastMap(INPUTITERATOR first, INPUTITERATOR last)'],\n ['../a02316.html#aa2c7d3ae2440cc9e7f4cbbcd6cfdfbf5', 1, 'gtsam::FastMap::FastMap()'],\n ['../a02316.html', 1, 'gtsam::FastMap< KEY, VALUE >']\n ]],\n- ['fastmap_2eh_41', ['FastMap.h', ['../a00149.html', 1, '']]],\n+ ['fastmap_2eh_41', ['FastMap.h', ['../a00035.html', 1, '']]],\n ['fastmap_3c_20key_2c_20factorindices_20_3e_42', ['FastMap< Key, FactorIndices >', ['../a02316.html', 1, 'gtsam']]],\n ['fastmap_3c_20key_2c_20fastvector_3c_20size_5ft_20_3e_20_3e_43', ['FastMap< Key, FastVector< size_t > >', ['../a02316.html', 1, 'gtsam']]],\n ['fastmap_3c_20key_2c_20size_5ft_20_3e_44', ['FastMap< Key, size_t >', ['../a02316.html', 1, 'gtsam']]],\n ['fastmap_3c_20key_2c_20variablestatus_20_3e_45', ['FastMap< Key, VariableStatus >', ['../a02316.html', 1, 'gtsam']]],\n ['fastmap_3c_20key_2c_20vectorvalues_3a_3aconst_5fiterator_20_3e_46', ['FastMap< Key, VectorValues::const_iterator >', ['../a02316.html', 1, 'gtsam']]],\n ['fastmap_3c_20size_5ft_2c_20boost_3a_3ashared_5fptr_3c_20timingoutline_20_3e_20_3e_47', ['FastMap< size_t, boost::shared_ptr< TimingOutline > >', ['../a02316.html', 1, 'gtsam']]],\n ['fastset_48', ['fastset', ['../a02320.html#acd2dc81b5518151095ba9aef2eb4d81d', 1, 'gtsam::FastSet::FastSet(const Base &x)'],\n ['../a02320.html#a7f6cb2d27052a33035f135e837b51c47', 1, 'gtsam::FastSet::FastSet(const FastSet< VALUE > &x)'],\n ['../a02320.html#a6fe5c76facd1eab99fe84c19c68d9e5c', 1, 'gtsam::FastSet::FastSet(const INPUTCONTAINER &container)'],\n ['../a02320.html#add9c09326c85681eddf6e666f6a0a7eb', 1, 'gtsam::FastSet::FastSet()=default'],\n ['../a02320.html', 1, 'gtsam::FastSet< VALUE >']\n ]],\n- ['fastset_2eh_49', ['FastSet.h', ['../a00062.html', 1, '']]],\n+ ['fastset_2eh_49', ['FastSet.h', ['../a00092.html', 1, '']]],\n ['fastset_3c_20key_20_3e_50', ['FastSet< Key >', ['../a02320.html', 1, 'gtsam']]],\n ['fastvector_51', ['FastVector', ['../a01413.html#gafeaa7d82369f3ff952157586240273c8', 1, 'gtsam']]],\n- ['fastvector_2eh_52', ['FastVector.h', ['../a00083.html', 1, '']]],\n+ ['fastvector_2eh_52', ['FastVector.h', ['../a00080.html', 1, '']]],\n ['fblocks_5f_53', ['FBlocks_', ['../a04912.html#a699927e30f0c0cbdc11d474aa78c1b2f', 1, 'gtsam::RegularImplicitSchurFactor']]],\n ['figureheightinches_54', ['figureHeightInches', ['../a03576.html#ad918cbf35b3baf520d91033b61523565', 1, 'gtsam::DotWriter']]],\n ['figurewidthinches_55', ['figureWidthInches', ['../a03576.html#a35970a94248630c844b1d02ea6e77e35', 1, 'gtsam::DotWriter']]],\n ['filldiagonalf_56', ['FillDiagonalF', ['../a04928.html#a69e2d616ed38d08c1ce16150e95475c0', 1, 'gtsam::SmartFactorBase']]],\n ['fillnodesindex_57', ['fillNodesIndex', ['../a03540.html#a2c52c639ba14d7890dd3afaff9cb0055', 1, 'gtsam::BayesTree']]],\n ['fillterms_58', ['fillTerms', ['../a03844.html#a87edd57f5afdc5a429163d6a917b6cec', 1, 'gtsam::JacobianFactor']]],\n ['find_59', ['find', ['../a04612.html#a7d83dc76adb05ab74681df26ad278a1a', 1, 'gtsam::Values::find()'],\n@@ -135,32 +135,32 @@\n ['firstblock_68', ['firstblock', ['../a02660.html#a1498857894c5020069e1443f4a84373c', 1, 'gtsam::VerticalBlockMatrix::firstBlock() const'],\n ['../a02660.html#a627c29bede193c9c3750e4249f336381', 1, 'gtsam::VerticalBlockMatrix::firstBlock()']\n ]],\n ['firstfrontalkey_69', ['firstFrontalKey', ['../a03572.html#a2c239cc3a58d08302df173d4e464f2f1', 1, 'gtsam::Conditional']]],\n ['fitbasis_70', ['fitbasis', ['../a02744.html#adba0f358e295a1def2dbe076e9526566', 1, 'gtsam::FitBasis::FitBasis()'],\n ['../a02744.html', 1, 'gtsam::FitBasis< Basis >']\n ]],\n- ['fitbasis_2eh_71', ['FitBasis.h', ['../a00167.html', 1, '']]],\n+ ['fitbasis_2eh_71', ['FitBasis.h', ['../a00152.html', 1, '']]],\n ['fixeddimension_72', ['FixedDimension', ['../a02412.html', 1, 'gtsam']]],\n ['fixedsizematrix_73', ['FixedSizeMatrix', ['../a02440.html', 1, 'gtsam::internal']]],\n ['fixedvariables_5f_74', ['fixedVariables_', ['../a04396.html#a0d0807258336ff483ad89c80cdb88eea', 1, 'gtsam::ISAM2']]],\n ['fold_75', ['fold', ['../a02796.html#a73ca5583ac2dbb26accfc54de69a9c0a', 1, 'gtsam::DecisionTree']]],\n ['force_5frelinearize_76', ['force_relinearize', ['../a04432.html#a3faf0991b952cebcd6da9d13d09dbbf3', 1, 'gtsam::ISAM2UpdateParams']]],\n ['forcefullsolve_77', ['forceFullSolve', ['../a04432.html#a8d9c49f7f7070d873c58913714c11a11', 1, 'gtsam::ISAM2UpdateParams']]],\n- ['fourier_2eh_78', ['Fourier.h', ['../a00161.html', 1, '']]],\n+ ['fourier_2eh_78', ['Fourier.h', ['../a00158.html', 1, '']]],\n ['fourierbasis_79', ['FourierBasis', ['../a02748.html', 1, 'gtsam']]],\n ['fpequal_80', ['fpEqual', ['../a01428.html#ae19c359190a379cba44bf818a2293f7c', 1, 'gtsam']]],\n ['frobeniusbetweenfactor_81', ['frobeniusbetweenfactor', ['../a04836.html#a02cf911776d2df206368c7cbe3a4acf6', 1, 'gtsam::FrobeniusBetweenFactor::FrobeniusBetweenFactor()'],\n ['../a04836.html', 1, 'gtsam::FrobeniusBetweenFactor< Rot >']\n ]],\n ['frobeniusfactor_82', ['frobeniusfactor', ['../a04832.html', 1, 'gtsam::FrobeniusFactor< Rot >'],\n ['../a04832.html#a8b47df22e67b45c126cda7fd1bcb99c2', 1, 'gtsam::FrobeniusFactor::FrobeniusFactor()']\n ]],\n- ['frobeniusfactor_2ecpp_83', ['FrobeniusFactor.cpp', ['../a01325.html', 1, '']]],\n- ['frobeniusfactor_2eh_84', ['FrobeniusFactor.h', ['../a01280.html', 1, '']]],\n+ ['frobeniusfactor_2ecpp_83', ['FrobeniusFactor.cpp', ['../a01319.html', 1, '']]],\n+ ['frobeniusfactor_2eh_84', ['FrobeniusFactor.h', ['../a01325.html', 1, '']]],\n ['frobeniusprior_85', ['frobeniusprior', ['../a04828.html#a6a15c66a4b8b0d762a8bab33ad950a66', 1, 'gtsam::FrobeniusPrior::FrobeniusPrior()'],\n ['../a04828.html', 1, 'gtsam::FrobeniusPrior< Rot >']\n ]],\n ['fromangle_86', ['fromAngle', ['../a03212.html#afb35e14b4b02f27820711c8bcc37367a', 1, 'gtsam::Rot2']]],\n ['frombalfile_87', ['FromBalFile', ['../a04704.html#acbfb5d8da364d4d38aa7c7290c3ba37a', 1, 'gtsam::SfmData']]],\n ['frombayesnet_88', ['FromBayesNet', ['../a02888.html#a26c9861077ad2c6261daf88be2385439', 1, 'gtsam::DiscreteLookupDAG']]],\n ['frombundlerfile_89', ['FromBundlerFile', ['../a04704.html#a00ed0d76356322f3cb0507119a738eaf', 1, 'gtsam::SfmData']]],\n@@ -205,15 +205,15 @@\n ['../a02660.html#abcb19e8883d335b21113d50eb5f37e95', 1, 'gtsam::VerticalBlockMatrix::full()']\n ]],\n ['fullmatrix_108', ['fullMatrix', ['../a04456.html#a5faff6a6fe223f246b99c727fcb59e8a', 1, 'gtsam::JointMarginal']]],\n ['functorizedfactor_109', ['functorizedfactor', ['../a04336.html#a060973f48fd727833d0dda9ef55d4dc4', 1, 'gtsam::FunctorizedFactor::FunctorizedFactor(Key key, const R &z, const SharedNoiseModel &model, const std::function< R(T, boost::optional< Matrix & >)> func)'],\n ['../a04336.html#a7822d3f4c15697b3a530e97343a96e49', 1, 'gtsam::FunctorizedFactor::FunctorizedFactor()'],\n ['../a04336.html', 1, 'gtsam::FunctorizedFactor< R, T >']\n ]],\n- ['functorizedfactor_2eh_110', ['FunctorizedFactor.h', ['../a01013.html', 1, '']]],\n+ ['functorizedfactor_2eh_110', ['FunctorizedFactor.h', ['../a01064.html', 1, '']]],\n ['functorizedfactor2_111', ['functorizedfactor2', ['../a04344.html#a0ac51a5d63d1e455a92eaa920ca785dd', 1, 'gtsam::FunctorizedFactor2::FunctorizedFactor2()'],\n ['../a04344.html#a4b6ae8cd262108a4ba18d48519d433c2', 1, 'gtsam::FunctorizedFactor2::FunctorizedFactor2(Key key1, Key key2, const R &z, const SharedNoiseModel &model, const FunctionType func)'],\n ['../a04344.html', 1, 'gtsam::FunctorizedFactor2< R, T1, T2 >']\n ]],\n ['functorizedfactor_3c_20double_2c_20basis_3a_3aparameters_20_3e_112', ['FunctorizedFactor< double, BASIS::Parameters >', ['../a04336.html', 1, 'gtsam']]],\n ['functorizedfactor_3c_20double_2c_20parametermatrix_3c_20p_20_3e_20_3e_113', ['FunctorizedFactor< double, ParameterMatrix< P > >', ['../a04336.html', 1, 'gtsam']]],\n ['functorizedfactor_3c_20double_2c_20vector_20_3e_114', ['FunctorizedFactor< double, Vector >', ['../a04336.html', 1, 'gtsam']]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_8.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_8.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -8,106 +8,106 @@\n ['gaussianbayesnet_4', ['gaussianbayesnet', ['../a03740.html', 1, 'gtsam::GaussianBayesNet'],\n ['../a03740.html#adecacf9eadcbced34a26cd234e34d197', 1, 'gtsam::GaussianBayesNet::GaussianBayesNet()'],\n ['../a03740.html#ae4f5f693d7582da70a64ea80024fdf12', 1, 'gtsam::GaussianBayesNet::GaussianBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)'],\n ['../a03740.html#ac863c8c8203f4cb9d099d6d1adf8fb3b', 1, 'gtsam::GaussianBayesNet::GaussianBayesNet(const CONTAINER &conditionals)'],\n ['../a03740.html#a91b6b8d6390efc036e690dbaf5493ff4', 1, 'gtsam::GaussianBayesNet::GaussianBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)'],\n ['../a03740.html#a8ee2b4fa6d395890878484a8fc4412bd', 1, 'gtsam::GaussianBayesNet::GaussianBayesNet(std::initializer_list< boost::shared_ptr< DERIVEDCONDITIONAL > > conditionals)']\n ]],\n- ['gaussianbayesnet_2ecpp_5', ['GaussianBayesNet.cpp', ['../a00755.html', 1, '']]],\n- ['gaussianbayesnet_2eh_6', ['GaussianBayesNet.h', ['../a00860.html', 1, '']]],\n+ ['gaussianbayesnet_2ecpp_5', ['GaussianBayesNet.cpp', ['../a00863.html', 1, '']]],\n+ ['gaussianbayesnet_2eh_6', ['GaussianBayesNet.h', ['../a00764.html', 1, '']]],\n ['gaussianbayestree_7', ['gaussianbayestree', ['../a03756.html', 1, 'gtsam::GaussianBayesTree'],\n ['../a03756.html#a10a6eb7dac9a7fcd873d0c0a3c01ca82', 1, 'gtsam::GaussianBayesTree::GaussianBayesTree()']\n ]],\n- ['gaussianbayestree_2dinl_2eh_8', ['GaussianBayesTree-inl.h', ['../a00800.html', 1, '']]],\n- ['gaussianbayestree_2ecpp_9', ['GaussianBayesTree.cpp', ['../a00830.html', 1, '']]],\n- ['gaussianbayestree_2eh_10', ['GaussianBayesTree.h', ['../a00746.html', 1, '']]],\n+ ['gaussianbayestree_2dinl_2eh_8', ['GaussianBayesTree-inl.h', ['../a00824.html', 1, '']]],\n+ ['gaussianbayestree_2ecpp_9', ['GaussianBayesTree.cpp', ['../a00800.html', 1, '']]],\n+ ['gaussianbayestree_2eh_10', ['GaussianBayesTree.h', ['../a00752.html', 1, '']]],\n ['gaussianbayestreeclique_11', ['GaussianBayesTreeClique', ['../a03752.html', 1, 'gtsam']]],\n ['gaussianconditional_12', ['gaussianconditional', ['../a03764.html#a350122154dc86824df762ae59ee51f80', 1, 'gtsam::GaussianConditional::GaussianConditional()'],\n ['../a05068.html', 1, 'GaussianConditional'],\n ['../a03764.html', 1, 'gtsam::GaussianConditional'],\n ['../a03764.html#aa1c8727e45e5944aae5b553482e2632c', 1, 'gtsam::GaussianConditional::GaussianConditional(Key key, const Vector &d, const Matrix &R, const SharedDiagonal &sigmas=SharedDiagonal())'],\n ['../a03764.html#acdc52a1110c6635b778b300bc4361661', 1, 'gtsam::GaussianConditional::GaussianConditional(Key key, const Vector &d, const Matrix &R, Key parent1, const Matrix &S, const SharedDiagonal &sigmas=SharedDiagonal())'],\n ['../a03764.html#a31a735a57a1b024bde55b99cf9e59797', 1, 'gtsam::GaussianConditional::GaussianConditional(Key key, const Vector &d, const Matrix &R, Key parent1, const Matrix &S, Key parent2, const Matrix &T, const SharedDiagonal &sigmas=SharedDiagonal())'],\n ['../a03764.html#ac9e5299e4c0c1f6a0ff3515f6c08fe92', 1, 'gtsam::GaussianConditional::GaussianConditional(const KEYS &keys, size_t nrFrontals, const VerticalBlockMatrix &augmentedMatrix, const SharedDiagonal &sigmas=SharedDiagonal())'],\n ['../a03764.html#aef1269abaa639f7f2fbd9608bdb9e034', 1, 'gtsam::GaussianConditional::GaussianConditional(const TERMS &terms, size_t nrFrontals, const Vector &d, const SharedDiagonal &sigmas=SharedDiagonal())']\n ]],\n- ['gaussianconditional_2dinl_2eh_13', ['GaussianConditional-inl.h', ['../a00839.html', 1, '']]],\n- ['gaussianconditional_2ecpp_14', ['GaussianConditional.cpp', ['../a00707.html', 1, '']]],\n- ['gaussianconditional_2eh_15', ['GaussianConditional.h', ['../a00779.html', 1, '']]],\n+ ['gaussianconditional_2dinl_2eh_13', ['GaussianConditional-inl.h', ['../a00845.html', 1, '']]],\n+ ['gaussianconditional_2ecpp_14', ['GaussianConditional.cpp', ['../a00737.html', 1, '']]],\n+ ['gaussianconditional_2eh_15', ['GaussianConditional.h', ['../a00872.html', 1, '']]],\n ['gaussiandensity_16', ['gaussiandensity', ['../a03772.html', 1, 'gtsam::GaussianDensity'],\n ['../a03772.html#a4c8ce2cd6b2708df545c4fe7778169ee', 1, 'gtsam::GaussianDensity::GaussianDensity(Key key, const Vector &d, const Matrix &R, const SharedDiagonal &noiseModel=SharedDiagonal())'],\n ['../a03772.html#ab87337fa52b848ce99be24006daef46c', 1, 'gtsam::GaussianDensity::GaussianDensity(const GaussianConditional &conditional)'],\n ['../a03772.html#a5e87d41948515b0ea5548aed04227acd', 1, 'gtsam::GaussianDensity::GaussianDensity()']\n ]],\n- ['gaussiandensity_2ecpp_17', ['GaussianDensity.cpp', ['../a00761.html', 1, '']]],\n- ['gaussiandensity_2eh_18', ['GaussianDensity.h', ['../a00836.html', 1, '']]],\n+ ['gaussiandensity_2ecpp_17', ['GaussianDensity.cpp', ['../a00869.html', 1, '']]],\n+ ['gaussiandensity_2eh_18', ['GaussianDensity.h', ['../a00758.html', 1, '']]],\n ['gaussianeliminationtree_19', ['gaussianeliminationtree', ['../a03776.html', 1, 'gtsam::GaussianEliminationTree'],\n ['../a03776.html#acffc7084c938407b8b047843fbd7b138', 1, 'gtsam::GaussianEliminationTree::GaussianEliminationTree(const GaussianFactorGraph &factorGraph, const VariableIndex &structure, const Ordering &order)'],\n ['../a03776.html#abc03f84772075ab56747a259513f62a7', 1, 'gtsam::GaussianEliminationTree::GaussianEliminationTree(const GaussianFactorGraph &factorGraph, const Ordering &order)']\n ]],\n- ['gaussianeliminationtree_2ecpp_20', ['GaussianEliminationTree.cpp', ['../a00857.html', 1, '']]],\n- ['gaussianeliminationtree_2eh_21', ['GaussianEliminationTree.h', ['../a00716.html', 1, '']]],\n+ ['gaussianeliminationtree_2ecpp_20', ['GaussianEliminationTree.cpp', ['../a00878.html', 1, '']]],\n+ ['gaussianeliminationtree_2eh_21', ['GaussianEliminationTree.h', ['../a00746.html', 1, '']]],\n ['gaussianerrors_22', ['gaussianErrors', ['../a03792.html#a908618e417977a645baca9f93b9c4e16', 1, 'gtsam::GaussianFactorGraph']]],\n ['gaussianfactor_23', ['gaussianfactor', ['../a03780.html', 1, 'gtsam::GaussianFactor'],\n ['../a03780.html#a7fc8684c852571ea09ecea36847ed7a2', 1, 'gtsam::GaussianFactor::GaussianFactor(const CONTAINER &keys)'],\n ['../a03780.html#ab31173c32b976a81d76af85e1d49e24a', 1, 'gtsam::GaussianFactor::GaussianFactor()']\n ]],\n- ['gaussianfactor_2ecpp_24', ['GaussianFactor.cpp', ['../a00845.html', 1, '']]],\n- ['gaussianfactor_2eh_25', ['GaussianFactor.h', ['../a00725.html', 1, '']]],\n+ ['gaussianfactor_2ecpp_24', ['GaussianFactor.cpp', ['../a00734.html', 1, '']]],\n+ ['gaussianfactor_2eh_25', ['GaussianFactor.h', ['../a00731.html', 1, '']]],\n ['gaussianfactorgraph_26', ['gaussianfactorgraph', ['../a03792.html#aedece6712926154a27d3facc4899b88a', 1, 'gtsam::GaussianFactorGraph::GaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)'],\n ['../a03792.html#af5974ac5896b74579db7967b05f6a146', 1, 'gtsam::GaussianFactorGraph::GaussianFactorGraph(const CONTAINER &factors)'],\n ['../a03792.html#a6230b36e3daf60b619e20742db3b02b6', 1, 'gtsam::GaussianFactorGraph::GaussianFactorGraph()'],\n ['../a03792.html#a30793ce545553ceb48be79d10d06be39', 1, 'gtsam::GaussianFactorGraph::GaussianFactorGraph(std::initializer_list< sharedFactor > factors)'],\n ['../a03792.html#ae25329ab2478d0ea2054eebc7bcdde0a', 1, 'gtsam::GaussianFactorGraph::GaussianFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)'],\n ['../a03792.html', 1, 'gtsam::GaussianFactorGraph']\n ]],\n- ['gaussianfactorgraph_2ecpp_27', ['GaussianFactorGraph.cpp', ['../a00896.html', 1, '']]],\n- ['gaussianfactorgraph_2eh_28', ['GaussianFactorGraph.h', ['../a00872.html', 1, '']]],\n+ ['gaussianfactorgraph_2ecpp_27', ['GaussianFactorGraph.cpp', ['../a00887.html', 1, '']]],\n+ ['gaussianfactorgraph_2eh_28', ['GaussianFactorGraph.h', ['../a00815.html', 1, '']]],\n ['gaussianfactorgraphsystem_29', ['GaussianFactorGraphSystem', ['../a03976.html', 1, 'gtsam']]],\n ['gaussianfactorgraphtree_30', ['GaussianFactorGraphTree', ['../a01428.html#a8b4a8e0d32b81b0fa2fa15c437b89e7c', 1, 'gtsam']]],\n ['gaussianisam_31', ['gaussianisam', ['../a03800.html', 1, 'gtsam::GaussianISAM'],\n ['../a03800.html#a876e1826e8fdfda05ef9636a11a813d8', 1, 'gtsam::GaussianISAM::GaussianISAM()'],\n ['../a03800.html#afa79821d0c4b3f880bd60eacb7552f15', 1, 'gtsam::GaussianISAM::GaussianISAM(const GaussianBayesTree &bayesTree)']\n ]],\n ['gaussianisam_2eh_32', ['GaussianISAM.h', ['../a00881.html', 1, '']]],\n ['gaussianjunctiontree_33', ['gaussianjunctiontree', ['../a03808.html', 1, 'gtsam::GaussianJunctionTree'],\n ['../a03808.html#aeff8507ed504dfffa8f28dc7466bbb40', 1, 'gtsam::GaussianJunctionTree::GaussianJunctionTree()']\n ]],\n- ['gaussianjunctiontree_2ecpp_34', ['GaussianJunctionTree.cpp', ['../a00866.html', 1, '']]],\n- ['gaussianjunctiontree_2eh_35', ['GaussianJunctionTree.h', ['../a00851.html', 1, '']]],\n+ ['gaussianjunctiontree_2ecpp_34', ['GaussianJunctionTree.cpp', ['../a00854.html', 1, '']]],\n+ ['gaussianjunctiontree_2eh_35', ['GaussianJunctionTree.h', ['../a00875.html', 1, '']]],\n ['gaussianmixture_36', ['gaussianmixture', ['../a03392.html', 1, 'gtsam::GaussianMixture'],\n ['../a03392.html#a526702669a902713b714bea36020ca6b', 1, 'gtsam::GaussianMixture::GaussianMixture(const KeyVector &continuousFrontals, const KeyVector &continuousParents, const DiscreteKeys &discreteParents, const std::vector< GaussianConditional::shared_ptr > &conditionals)'],\n ['../a03392.html#a3b6f9e91f9ab387f5ad38d6e1d2b8aeb', 1, 'gtsam::GaussianMixture::GaussianMixture(KeyVector &&continuousFrontals, KeyVector &&continuousParents, DiscreteKeys &&discreteParents, std::vector< GaussianConditional::shared_ptr > &&conditionals)'],\n ['../a03392.html#aa87fb13fdcc8fc543a39c3ae5d39cdcc', 1, 'gtsam::GaussianMixture::GaussianMixture(const KeyVector &continuousFrontals, const KeyVector &continuousParents, const DiscreteKeys &discreteParents, const Conditionals &conditionals)'],\n ['../a03392.html#a3656df047c72d0192f5592df93ca524e', 1, 'gtsam::GaussianMixture::GaussianMixture()=default'],\n ['../a03500.html#a03051d582bb0d74411ce47ae54dbfb5e', 1, 'gtsam::HybridSmoother::gaussianMixture()']\n ]],\n- ['gaussianmixture_2ecpp_37', ['GaussianMixture.cpp', ['../a00518.html', 1, '']]],\n- ['gaussianmixture_2eh_38', ['GaussianMixture.h', ['../a00566.html', 1, '']]],\n+ ['gaussianmixture_2ecpp_37', ['GaussianMixture.cpp', ['../a00497.html', 1, '']]],\n+ ['gaussianmixture_2eh_38', ['GaussianMixture.h', ['../a00503.html', 1, '']]],\n ['gaussianmixturefactor_39', ['gaussianmixturefactor', ['../a03400.html#a1fd07541d71b0fc8de61ee3be36c86dc', 1, 'gtsam::GaussianMixtureFactor::GaussianMixtureFactor()=default'],\n ['../a03400.html#aa17eba70d3a2d5615e52bff3f98f4984', 1, 'gtsam::GaussianMixtureFactor::GaussianMixtureFactor(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys, const Factors &factors)'],\n ['../a03400.html', 1, 'gtsam::GaussianMixtureFactor'],\n ['../a03400.html#a4d6fc1d10222e14fb2edade6701c4520', 1, 'gtsam::GaussianMixtureFactor::GaussianMixtureFactor()']\n ]],\n- ['gaussianmixturefactor_2ecpp_40', ['GaussianMixtureFactor.cpp', ['../a00506.html', 1, '']]],\n- ['gaussianmixturefactor_2eh_41', ['GaussianMixtureFactor.h', ['../a00542.html', 1, '']]],\n+ ['gaussianmixturefactor_2ecpp_40', ['GaussianMixtureFactor.cpp', ['../a00557.html', 1, '']]],\n+ ['gaussianmixturefactor_2eh_41', ['GaussianMixtureFactor.h', ['../a00536.html', 1, '']]],\n ['gaussnewtonoptimizer_42', ['gaussnewtonoptimizer', ['../a04356.html', 1, 'gtsam::GaussNewtonOptimizer'],\n ['../a04356.html#add3883c2df337aa134c62dd34460e1e9', 1, 'gtsam::GaussNewtonOptimizer::GaussNewtonOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues, const Ordering &ordering)'],\n ['../a04356.html#ac6a87de7dcab376696ede784ccb5da0e', 1, 'gtsam::GaussNewtonOptimizer::GaussNewtonOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues, const GaussNewtonParams &params=GaussNewtonParams())']\n ]],\n- ['gaussnewtonoptimizer_2ecpp_43', ['GaussNewtonOptimizer.cpp', ['../a01109.html', 1, '']]],\n- ['gaussnewtonoptimizer_2eh_44', ['GaussNewtonOptimizer.h', ['../a01001.html', 1, '']]],\n+ ['gaussnewtonoptimizer_2ecpp_43', ['GaussNewtonOptimizer.cpp', ['../a01016.html', 1, '']]],\n+ ['gaussnewtonoptimizer_2eh_44', ['GaussNewtonOptimizer.h', ['../a01031.html', 1, '']]],\n ['gaussnewtonparams_45', ['GaussNewtonParams', ['../a04352.html', 1, 'gtsam']]],\n ['gemanmcclure_46', ['GemanMcClure', ['../a03908.html', 1, 'gtsam::noiseModel::mEstimator']]],\n ['generalsfmfactor_47', ['generalsfmfactor', ['../a04840.html#ab4a204f23fb77bacf94dabba6aa3e6f7', 1, 'gtsam::GeneralSFMFactor::GeneralSFMFactor(const Point2 &p)'],\n ['../a04840.html#a65b2030a4a080aa03d6fa2ed183e5093', 1, 'gtsam::GeneralSFMFactor::GeneralSFMFactor()'],\n ['../a04840.html#a6597e39575729001daec1f975cee4bd7', 1, 'gtsam::GeneralSFMFactor::GeneralSFMFactor(const Point2 &measured, const SharedNoiseModel &model, Key cameraKey, Key landmarkKey)'],\n ['../a04840.html', 1, 'gtsam::GeneralSFMFactor< CAMERA, LANDMARK >']\n ]],\n- ['generalsfmfactor_2eh_48', ['GeneralSFMFactor.h', ['../a01292.html', 1, '']]],\n+ ['generalsfmfactor_2eh_48', ['GeneralSFMFactor.h', ['../a01334.html', 1, '']]],\n ['generalsfmfactor2_49', ['generalsfmfactor2', ['../a04848.html#a9edba229f8eb9818477c7cc2a4a49b38', 1, 'gtsam::GeneralSFMFactor2::GeneralSFMFactor2()'],\n ['../a04848.html', 1, 'gtsam::GeneralSFMFactor2< CALIBRATION >'],\n ['../a04848.html#a35cb09493e3196e3ab58049a8923a2fb', 1, 'gtsam::GeneralSFMFactor2::GeneralSFMFactor2()']\n ]],\n ['generalsfmfactors_50', ['generalSfmFactors', ['../a04704.html#a63398992728c6c3196c8d427aa1bff43', 1, 'gtsam::SfmData']]],\n ['generator_5f_51', ['generator_', ['../a04020.html#aafc871086f7dd8ee5bf99795c8f98ba1', 1, 'gtsam::Sampler']]],\n ['genericprojectionfactor_52', ['genericprojectionfactor', ['../a04896.html#a87fd316162e688e38079f1a304ca6c46', 1, 'gtsam::GenericProjectionFactor::GenericProjectionFactor()'],\n@@ -194,30 +194,30 @@\n ['getpose_99', ['getpose', ['../a03104.html#a3ee59b1849e7d20063478d64ce993934', 1, 'gtsam::PinholeCamera::getPose()'],\n ['../a03024.html#a08f39b2a0a59b1f4b59a74a631349df9', 1, 'gtsam::PinholeBase::getPose()']\n ]],\n ['getstate_100', ['getState', ['../a04360.html#a68bf088d5768d9e9a397c6b798355a34', 1, 'gtsam::GncOptimizer']]],\n ['getvariableindex_101', ['getVariableIndex', ['../a04396.html#a9b334c28f63172f3b0ed4e77989e3a93', 1, 'gtsam::ISAM2']]],\n ['getvariablesrelinearized_102', ['getVariablesRelinearized', ['../a04420.html#a1b2b5247eaf3ef6f6d3e639e2e310962', 1, 'gtsam::ISAM2Result']]],\n ['getweights_103', ['getWeights', ['../a04360.html#ab4d99f54006eb05a4869c043f5e38b93', 1, 'gtsam::GncOptimizer']]],\n- ['global_5fincludes_2eh_104', ['global_includes.h', ['../a01406.html', 1, '']]],\n+ ['global_5fincludes_2eh_104', ['global_includes.h', ['../a01400.html', 1, '']]],\n ['gnclosstype_105', ['GncLossType', ['../a01428.html#a7527de605f5b7c0224c97b5312d816e8', 1, 'gtsam']]],\n ['gncoptimizer_106', ['gncoptimizer', ['../a04360.html#af9300f1031aa2d642436842bc741aa73', 1, 'gtsam::GncOptimizer::GncOptimizer()'],\n ['../a04360.html', 1, 'gtsam::GncOptimizer< GncParameters >']\n ]],\n- ['gncoptimizer_2eh_107', ['GncOptimizer.h', ['../a01052.html', 1, '']]],\n+ ['gncoptimizer_2eh_107', ['GncOptimizer.h', ['../a01103.html', 1, '']]],\n ['gncparams_108', ['gncparams', ['../a04364.html', 1, 'gtsam::GncParams< BaseOptimizerParameters >'],\n ['../a04364.html#a14867f2ab8415772117299e4c76247a0', 1, 'gtsam::GncParams::GncParams()'],\n ['../a04364.html#a2dc4903a5893660edbaf4ea47abcb12d', 1, 'gtsam::GncParams::GncParams(const BaseOptimizerParameters &baseOptimizerParams)']\n ]],\n ['gpsfactor_109', ['gpsfactor', ['../a04132.html', 1, 'gtsam::GPSFactor'],\n ['../a04132.html#aadfaf1bf9a6252628e62a7259baa34a4', 1, 'gtsam::GPSFactor::GPSFactor(Key key, const Point3 &gpsIn, const SharedNoiseModel &model)'],\n ['../a04132.html#a2c18c211bcbb029e12310ed4d6bcc2cd', 1, 'gtsam::GPSFactor::GPSFactor()']\n ]],\n ['gpsfactor_2ecpp_110', ['GPSFactor.cpp', ['../a00983.html', 1, '']]],\n- ['gpsfactor_2eh_111', ['GPSFactor.h', ['../a00920.html', 1, '']]],\n+ ['gpsfactor_2eh_111', ['GPSFactor.h', ['../a00908.html', 1, '']]],\n ['gpsfactor2_112', ['gpsfactor2', ['../a04136.html#a54ca84b1574a5f94e83424155cbb3c5c', 1, 'gtsam::GPSFactor2::GPSFactor2()'],\n ['../a04136.html', 1, 'gtsam::GPSFactor2'],\n ['../a04136.html#ab2d41c2ac9e0bd92725e0b756dd83fef', 1, 'gtsam::GPSFactor2::GPSFactor2()']\n ]],\n ['gradient_113', ['gradient', ['../a03792.html#aa183f87ebad359ef5dee4ef626522bf2', 1, 'gtsam::GaussianFactorGraph::gradient()'],\n ['../a03756.html#acd97366027e87528d3736bc7ad748485', 1, 'gtsam::GaussianBayesTree::gradient()'],\n ['../a03780.html#a16e90a691f7240e1b973e6dd3d8dc9c9', 1, 'gtsam::GaussianFactor::gradient()'],\n@@ -245,41 +245,41 @@\n ['../a04912.html#a528d8560e61df829642b66635b2c300c', 1, 'gtsam::RegularImplicitSchurFactor::gradientAtZero(double *d) const override']\n ]],\n ['gradientcontribution_115', ['gradientContribution', ['../a04404.html#a18b009c1b660a1d79b405aed8551062c', 1, 'gtsam::ISAM2Clique']]],\n ['graph_116', ['graph', ['../a04552.html#a2ffd892baed9b62d31ce39a9243f3c78', 1, 'gtsam::NonlinearOptimizer::graph()'],\n ['../a03464.html#autotoc_md2', 1, 'Hybrid Gaussian Factor Graph'],\n ['../a03488.html#autotoc_md3', 1, 'Nonlinear Hybrid Factor Graph']\n ]],\n- ['graph_2eh_117', ['graph.h', ['../a00596.html', 1, '']]],\n+ ['graph_2eh_117', ['graph.h', ['../a00656.html', 1, '']]],\n ['graph_5f_118', ['graph_', ['../a04552.html#a7142764a820ba039a610074f855bce13', 1, 'gtsam::NonlinearOptimizer']]],\n ['graphandvalues_119', ['GraphAndValues', ['../a01428.html#abcc5d1ec05ddc954d5de28929acabbdf', 1, 'gtsam']]],\n ['graphpreamble_120', ['graphPreamble', ['../a03576.html#ac690a3b9f1d210e2f36aa6de55503d2a', 1, 'gtsam::DotWriter']]],\n ['graphvizformatting_121', ['graphvizformatting', ['../a04368.html#a28cc4181d43026077d292c8f7bbc93a9', 1, 'gtsam::GraphvizFormatting::GraphvizFormatting()'],\n ['../a04368.html', 1, 'gtsam::GraphvizFormatting']\n ]],\n- ['graphvizformatting_2ecpp_122', ['GraphvizFormatting.cpp', ['../a01106.html', 1, '']]],\n- ['graphvizformatting_2eh_123', ['GraphvizFormatting.h', ['../a01031.html', 1, '']]],\n+ ['graphvizformatting_2ecpp_122', ['GraphvizFormatting.cpp', ['../a01022.html', 1, '']]],\n+ ['graphvizformatting_2eh_123', ['GraphvizFormatting.h', ['../a01115.html', 1, '']]],\n ['greaterthanorequal_124', ['greaterThanOrEqual', ['../a01428.html#a368ee40bd9c0124d572d2e49bcb077bf', 1, 'gtsam']]],\n- ['group_2eh_125', ['Group.h', ['../a00065.html', 1, '']]],\n+ ['group_2eh_125', ['Group.h', ['../a00056.html', 1, '']]],\n ['group_5ftag_126', ['group_tag', ['../a02332.html', 1, 'gtsam']]],\n ['gtsam_127', ['gtsam', ['../a03728.html#a5f3c3b9315279cf2112501b7c0a3b499a6899bab70a92ace73fecfa9de464de3c', 1, 'gtsam::ConjugateGradientParameters::GTSAM'],\n ['../index.html', 1, 'GTSAM'],\n ['../a08123.html', 1, 'GTSAM'],\n ['../a01428.html', 1, 'gtsam']\n ]],\n ['gtsam2opengl_128', ['gtsam2opengl', ['../a01428.html#aaff07ef70e6161c4d1d2bd7546ff91e6', 1, 'gtsam::gtsam2openGL(const Rot3 &R, double tx, double ty, double tz)'],\n ['../a01428.html#ad632ed56581bf174eef379bbe272a06a', 1, 'gtsam::gtsam2openGL(const Pose3 &PoseGTSAM)']\n ]],\n ['gtsam_3a_3aimubias_129', ['imuBias', ['../a01452.html', 1, 'gtsam']]],\n ['gtsam_3a_3anoisemodel_130', ['noiseModel', ['../a01449.html', 1, 'gtsam']]],\n ['gtsam_3a_3anoisemodel_3a_3amestimator_131', ['mEstimator', ['../a01450.html', 1, 'gtsam::noiseModel']]],\n ['gtsam_3a_3atreetraversal_132', ['treeTraversal', ['../a01434.html', 1, 'gtsam']]],\n- ['gtsam_5fconcept_5fgroup_5finst_133', ['GTSAM_CONCEPT_GROUP_INST', ['../a00065.html#aac1ea136475ea605715c809f4b3f0156', 1, 'Group.h']]],\n- ['gtsam_5fconcept_5flie_5finst_134', ['GTSAM_CONCEPT_LIE_INST', ['../a00074.html#aeef5af7d583d275fbc0e6e5af8bf2afc', 1, 'Lie.h']]],\n- ['gtsam_5fconcept_5fmanifold_5finst_135', ['GTSAM_CONCEPT_MANIFOLD_INST', ['../a00002.html#a64b5e2e3c812d2cdea5ee294100f825f', 1, 'Manifold.h']]],\n+ ['gtsam_5fconcept_5fgroup_5finst_133', ['GTSAM_CONCEPT_GROUP_INST', ['../a00056.html#aac1ea136475ea605715c809f4b3f0156', 1, 'Group.h']]],\n+ ['gtsam_5fconcept_5flie_5finst_134', ['GTSAM_CONCEPT_LIE_INST', ['../a00005.html#aeef5af7d583d275fbc0e6e5af8bf2afc', 1, 'Lie.h']]],\n+ ['gtsam_5fconcept_5fmanifold_5finst_135', ['GTSAM_CONCEPT_MANIFOLD_INST', ['../a00044.html#a64b5e2e3c812d2cdea5ee294100f825f', 1, 'Manifold.h']]],\n ['gtsam_5fconcept_5fpose_5finst_136', ['GTSAM_CONCEPT_POSE_INST', ['../a08128.html#a1ac1dbb1c81293b35cbab7722ac657ac', 1, 'concepts.h']]],\n- ['gtsam_5fconcept_5ftestable_5finst_137', ['GTSAM_CONCEPT_TESTABLE_INST', ['../a00080.html#abe0a238cdd07d484ff0be56ae945b182', 1, 'Testable.h']]],\n- ['gtsam_5fmake_5faligned_5foperator_5fnew_138', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW', ['../a00047.html#aa123dd61687e08ae328154a1890b7b86', 1, 'types.h']]],\n- ['gtsam_5fmake_5faligned_5foperator_5fnew_5fif_139', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF', ['../a00047.html#a352ab46cee3a766e30b049690802fb0a', 1, 'types.h']]],\n+ ['gtsam_5fconcept_5ftestable_5finst_137', ['GTSAM_CONCEPT_TESTABLE_INST', ['../a00110.html#abe0a238cdd07d484ff0be56ae945b182', 1, 'Testable.h']]],\n+ ['gtsam_5fmake_5faligned_5foperator_5fnew_138', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW', ['../a00020.html#aa123dd61687e08ae328154a1890b7b86', 1, 'types.h']]],\n+ ['gtsam_5fmake_5faligned_5foperator_5fnew_5fif_139', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF', ['../a00020.html#a352ab46cee3a766e30b049690802fb0a', 1, 'types.h']]],\n ['gyroscope_140', ['gyroscope', ['../a04140.html#a176a703de66ddf0cf87abbcca1566478', 1, 'gtsam::imuBias::ConstantBias']]],\n ['gyroscopecovariance_141', ['gyroscopeCovariance', ['../a04204.html#a59e97f78c2725df39d3844e75d950fa8', 1, 'gtsam::PreintegratedRotationParams']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_9.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_9.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -63,17 +63,17 @@\n ['../a03812.html#a3dcc955082863c99391622760e7bdc93', 1, 'gtsam::HessianFactor::HessianFactor(const KeyVector &js, const std::vector< Matrix > &Gs, const std::vector< Vector > &gs, double f)'],\n ['../a03812.html#a8dd0c87ce694143e2ad42c48559f9883', 1, 'gtsam::HessianFactor::HessianFactor(Key j1, Key j2, Key j3, const Matrix &G11, const Matrix &G12, const Matrix &G13, const Vector &g1, const Matrix &G22, const Matrix &G23, const Vector &g2, const Matrix &G33, const Vector &g3, double f)'],\n ['../a03812.html#abb07c3bd55ff688700f82f6024bdf9f0', 1, 'gtsam::HessianFactor::HessianFactor(Key j1, Key j2, const Matrix &G11, const Matrix &G12, const Vector &g1, const Matrix &G22, const Vector &g2, double f)'],\n ['../a03812.html#a7f637f93694de5b61c160376f5702cdd', 1, 'gtsam::HessianFactor::HessianFactor(Key j, const Matrix &G, const Vector &g, double f)'],\n ['../a03812.html#acdcbc6dc5ead9bfdb6010f74bee3c8df', 1, 'gtsam::HessianFactor::HessianFactor()'],\n ['../a03812.html', 1, 'gtsam::HessianFactor']\n ]],\n- ['hessianfactor_2dinl_2eh_27', ['HessianFactor-inl.h', ['../a00713.html', 1, '']]],\n- ['hessianfactor_2ecpp_28', ['HessianFactor.cpp', ['../a00788.html', 1, '']]],\n- ['hessianfactor_2eh_29', ['HessianFactor.h', ['../a00827.html', 1, '']]],\n+ ['hessianfactor_2dinl_2eh_27', ['HessianFactor-inl.h', ['../a00890.html', 1, '']]],\n+ ['hessianfactor_2ecpp_28', ['HessianFactor.cpp', ['../a00767.html', 1, '']]],\n+ ['hessianfactor_2eh_29', ['HessianFactor.h', ['../a00782.html', 1, '']]],\n ['homogeneous_30', ['Homogeneous', ['../a03068.html#aa0ddbe48ef8253475276de478081025d', 1, 'gtsam::EssentialMatrix']]],\n ['house_31', ['house', ['../a01428.html#afb77eefc25dea0fb3e0fcc8f246b617a', 1, 'gtsam']]],\n ['householder_32', ['householder', ['../a01428.html#a7baa2f3184a444adce108633c0265e0c', 1, 'gtsam']]],\n ['householder_5f_33', ['householder_', ['../a01428.html#abdd1ab05e8ac90b340fbd8f3b322dc6d', 1, 'gtsam']]],\n ['houseinplace_34', ['houseInPlace', ['../a01428.html#ac9c0c05b0198ec0fb6e4115edb755910', 1, 'gtsam']]],\n ['html_35', ['html', ['../a02808.html#ac005a72176ffef73d489eaec6c9c7913', 1, 'gtsam::DecisionTreeFactor::html()'],\n ['../a01428.html#a147114735037c2260d4810a8820e72f6', 1, 'gtsam::html()'],\n@@ -90,85 +90,85 @@\n ['hybrid_37', ['Hybrid', ['../a01417.html', 1, '']]],\n ['hybrid_20factor_20graph_38', ['Nonlinear Hybrid Factor Graph', ['../a03488.html#autotoc_md3', 1, '']]],\n ['hybrid_20gaussian_20factor_20graph_39', ['Hybrid Gaussian Factor Graph', ['../a03464.html#autotoc_md2', 1, '']]],\n ['hybridbayesnet_40', ['hybridbayesnet', ['../a03408.html', 1, 'gtsam::HybridBayesNet'],\n ['../a03500.html#a9299d214c6d42ee3b8ad9f9734b78a72', 1, 'gtsam::HybridSmoother::hybridBayesNet()'],\n ['../a03408.html#ab50d718558738f4395e0b15e399ca247', 1, 'gtsam::HybridBayesNet::HybridBayesNet()']\n ]],\n- ['hybridbayesnet_2ecpp_41', ['HybridBayesNet.cpp', ['../a00545.html', 1, '']]],\n- ['hybridbayesnet_2eh_42', ['HybridBayesNet.h', ['../a00509.html', 1, '']]],\n+ ['hybridbayesnet_2ecpp_41', ['HybridBayesNet.cpp', ['../a00515.html', 1, '']]],\n+ ['hybridbayesnet_2eh_42', ['HybridBayesNet.h', ['../a00527.html', 1, '']]],\n ['hybridbayestree_43', ['hybridbayestree', ['../a03424.html', 1, 'gtsam::HybridBayesTree'],\n ['../a03424.html#ae9f77b08b368d6ea0b6fa1e29148202d', 1, 'gtsam::HybridBayesTree::HybridBayesTree()']\n ]],\n- ['hybridbayestree_2ecpp_44', ['HybridBayesTree.cpp', ['../a00521.html', 1, '']]],\n- ['hybridbayestree_2eh_45', ['HybridBayesTree.h', ['../a00494.html', 1, '']]],\n+ ['hybridbayestree_2ecpp_44', ['HybridBayesTree.cpp', ['../a00509.html', 1, '']]],\n+ ['hybridbayestree_2eh_45', ['HybridBayesTree.h', ['../a00488.html', 1, '']]],\n ['hybridbayestreeclique_46', ['hybridbayestreeclique', ['../a03420.html#adf67c91e9b314b8b73db5698a287a5ce', 1, 'gtsam::HybridBayesTreeClique::HybridBayesTreeClique()'],\n ['../a03420.html', 1, 'gtsam::HybridBayesTreeClique']\n ]],\n ['hybridconditional_47', ['hybridconditional', ['../a03436.html#afd1e5b2b522f4ca5157ed97c32200591', 1, 'gtsam::HybridConditional::HybridConditional()=default'],\n ['../a03436.html#a98fd58551a277b363e9db6b9ead31140', 1, 'gtsam::HybridConditional::HybridConditional(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys, size_t nFrontals)'],\n ['../a03436.html#a3bd26d238dc6a1fe704ef68224b24f6b', 1, 'gtsam::HybridConditional::HybridConditional(const KeyVector &continuousFrontals, const DiscreteKeys &discreteFrontals, const KeyVector &continuousParents, const DiscreteKeys &discreteParents)'],\n ['../a03436.html#a7d16b5deda599c27e3bb304ccf97df23', 1, 'gtsam::HybridConditional::HybridConditional(const boost::shared_ptr< GaussianConditional > &continuousConditional)'],\n ['../a03436.html#a5b72c3ac68566a8794c11db90b0bebac', 1, 'gtsam::HybridConditional::HybridConditional(const boost::shared_ptr< DiscreteConditional > &discreteConditional)'],\n ['../a03436.html#a0424a27bffb71080d0ba61f38a35bc37', 1, 'gtsam::HybridConditional::HybridConditional(const boost::shared_ptr< GaussianMixture > &gaussianMixture)'],\n ['../a03436.html', 1, 'gtsam::HybridConditional']\n ]],\n- ['hybridconditional_2ecpp_48', ['HybridConditional.cpp', ['../a00482.html', 1, '']]],\n- ['hybridconditional_2eh_49', ['HybridConditional.h', ['../a00533.html', 1, '']]],\n+ ['hybridconditional_2ecpp_48', ['HybridConditional.cpp', ['../a00566.html', 1, '']]],\n+ ['hybridconditional_2eh_49', ['HybridConditional.h', ['../a00560.html', 1, '']]],\n ['hybrideliminationtree_50', ['hybrideliminationtree', ['../a03444.html', 1, 'gtsam::HybridEliminationTree'],\n ['../a03444.html#a2a4433efc73e96fba7ff726a2f454ec2', 1, 'gtsam::HybridEliminationTree::HybridEliminationTree(const HybridGaussianFactorGraph &factorGraph, const Ordering &order)'],\n ['../a03444.html#ae043665511734e035f01b535f41d32e1', 1, 'gtsam::HybridEliminationTree::HybridEliminationTree(const HybridGaussianFactorGraph &factorGraph, const VariableIndex &structure, const Ordering &order)']\n ]],\n- ['hybrideliminationtree_2ecpp_51', ['HybridEliminationTree.cpp', ['../a00515.html', 1, '']]],\n- ['hybrideliminationtree_2eh_52', ['HybridEliminationTree.h', ['../a00551.html', 1, '']]],\n+ ['hybrideliminationtree_2ecpp_51', ['HybridEliminationTree.cpp', ['../a00485.html', 1, '']]],\n+ ['hybrideliminationtree_2eh_52', ['HybridEliminationTree.h', ['../a00542.html', 1, '']]],\n ['hybridfactor_53', ['hybridfactor', ['../a03448.html#a2b7f14fac17b0a1f247b944b18a2f74d', 1, 'gtsam::HybridFactor::HybridFactor(const KeyVector &keys)'],\n ['../a03448.html#a0e1b5e0371fb48bc049dd70009bdfbd0', 1, 'gtsam::HybridFactor::HybridFactor(const KeyVector &continuousKeys, const DiscreteKeys &discreteKeys)'],\n ['../a03448.html#a23d26d651c77055df31ff0ff7fa7bc6c', 1, 'gtsam::HybridFactor::HybridFactor(const DiscreteKeys &discreteKeys)'],\n ['../a03448.html#a97bb25c7e119639c38ae44bb05f53775', 1, 'gtsam::HybridFactor::HybridFactor()=default'],\n ['../a03448.html', 1, 'gtsam::HybridFactor']\n ]],\n- ['hybridfactor_2ecpp_54', ['HybridFactor.cpp', ['../a00503.html', 1, '']]],\n- ['hybridfactor_2eh_55', ['HybridFactor.h', ['../a00539.html', 1, '']]],\n+ ['hybridfactor_2ecpp_54', ['HybridFactor.cpp', ['../a00494.html', 1, '']]],\n+ ['hybridfactor_2eh_55', ['HybridFactor.h', ['../a00533.html', 1, '']]],\n ['hybridfactorgraph_56', ['hybridfactorgraph', ['../a03456.html#a0d52ae5047022bd0b6838a4e02959f6b', 1, 'gtsam::HybridFactorGraph::HybridFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)'],\n ['../a03456.html#abea72c33b34ce730bfe044d21178d8a2', 1, 'gtsam::HybridFactorGraph::HybridFactorGraph()=default'],\n ['../a03456.html', 1, 'gtsam::HybridFactorGraph']\n ]],\n- ['hybridfactorgraph_2ecpp_57', ['HybridFactorGraph.cpp', ['../a00527.html', 1, '']]],\n- ['hybridfactorgraph_2eh_58', ['HybridFactorGraph.h', ['../a00536.html', 1, '']]],\n+ ['hybridfactorgraph_2ecpp_57', ['HybridFactorGraph.cpp', ['../a00545.html', 1, '']]],\n+ ['hybridfactorgraph_2eh_58', ['HybridFactorGraph.h', ['../a00563.html', 1, '']]],\n ['hybridgaussianfactorgraph_59', ['hybridgaussianfactorgraph', ['../a03464.html#abcfef7969d0dc6fdd13adc91aaf55a23', 1, 'gtsam::HybridGaussianFactorGraph::HybridGaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)'],\n ['../a03464.html#a7b5cbb26bab5b2b44beb2d96fb2f669c', 1, 'gtsam::HybridGaussianFactorGraph::HybridGaussianFactorGraph()=default'],\n ['../a03464.html', 1, 'gtsam::HybridGaussianFactorGraph']\n ]],\n- ['hybridgaussianfactorgraph_2ecpp_60', ['HybridGaussianFactorGraph.cpp', ['../a00569.html', 1, '']]],\n- ['hybridgaussianfactorgraph_2eh_61', ['HybridGaussianFactorGraph.h', ['../a00530.html', 1, '']]],\n+ ['hybridgaussianfactorgraph_2ecpp_60', ['HybridGaussianFactorGraph.cpp', ['../a00491.html', 1, '']]],\n+ ['hybridgaussianfactorgraph_2eh_61', ['HybridGaussianFactorGraph.h', ['../a00539.html', 1, '']]],\n ['hybridgaussianisam_62', ['hybridgaussianisam', ['../a03468.html#ab4bd59258b2467ecabc09be61b6b770a', 1, 'gtsam::HybridGaussianISAM::HybridGaussianISAM()'],\n ['../a03468.html', 1, 'gtsam::HybridGaussianISAM'],\n ['../a03468.html#a57671bd4397e9e579e31f5279dc679cc', 1, 'gtsam::HybridGaussianISAM::HybridGaussianISAM()']\n ]],\n- ['hybridgaussianisam_2eh_63', ['HybridGaussianISAM.h', ['../a00554.html', 1, '']]],\n+ ['hybridgaussianisam_2eh_63', ['HybridGaussianISAM.h', ['../a00569.html', 1, '']]],\n ['hybridjunctiontree_64', ['hybridjunctiontree', ['../a03484.html#a75f0d363a8543bb2f1119bd3fe9b303b', 1, 'gtsam::HybridJunctionTree::HybridJunctionTree()'],\n ['../a03484.html', 1, 'gtsam::HybridJunctionTree']\n ]],\n- ['hybridjunctiontree_2ecpp_65', ['HybridJunctionTree.cpp', ['../a00548.html', 1, '']]],\n- ['hybridjunctiontree_2eh_66', ['HybridJunctionTree.h', ['../a00524.html', 1, '']]],\n+ ['hybridjunctiontree_2ecpp_65', ['HybridJunctionTree.cpp', ['../a00521.html', 1, '']]],\n+ ['hybridjunctiontree_2eh_66', ['HybridJunctionTree.h', ['../a00551.html', 1, '']]],\n ['hybridnonlinearfactorgraph_67', ['hybridnonlinearfactorgraph', ['../a03488.html', 1, 'gtsam::HybridNonlinearFactorGraph'],\n ['../a03488.html#ad849edb68524c55be377f4edd217ec4e', 1, 'gtsam::HybridNonlinearFactorGraph::HybridNonlinearFactorGraph()']\n ]],\n- ['hybridnonlinearfactorgraph_2ecpp_68', ['HybridNonlinearFactorGraph.cpp', ['../a00485.html', 1, '']]],\n- ['hybridnonlinearfactorgraph_2eh_69', ['HybridNonlinearFactorGraph.h', ['../a00500.html', 1, '']]],\n+ ['hybridnonlinearfactorgraph_2ecpp_68', ['HybridNonlinearFactorGraph.cpp', ['../a00548.html', 1, '']]],\n+ ['hybridnonlinearfactorgraph_2eh_69', ['HybridNonlinearFactorGraph.h', ['../a00518.html', 1, '']]],\n ['hybridnonlinearisam_70', ['hybridnonlinearisam', ['../a03496.html', 1, 'gtsam::HybridNonlinearISAM'],\n ['../a03496.html#a343272d257ca8e8c59b1e8a3d35a9371', 1, 'gtsam::HybridNonlinearISAM::HybridNonlinearISAM()']\n ]],\n- ['hybridnonlinearisam_2ecpp_71', ['HybridNonlinearISAM.cpp', ['../a00488.html', 1, '']]],\n- ['hybridnonlinearisam_2eh_72', ['HybridNonlinearISAM.h', ['../a00563.html', 1, '']]],\n+ ['hybridnonlinearisam_2ecpp_71', ['HybridNonlinearISAM.cpp', ['../a00512.html', 1, '']]],\n+ ['hybridnonlinearisam_2eh_72', ['HybridNonlinearISAM.h', ['../a00506.html', 1, '']]],\n ['hybridordering_73', ['HybridOrdering', ['../a01428.html#a584e4e05d52a617c1d313e1f53c8ce58', 1, 'gtsam']]],\n ['hybridsmoother_74', ['HybridSmoother', ['../a03500.html', 1, 'gtsam']]],\n- ['hybridsmoother_2ecpp_75', ['HybridSmoother.cpp', ['../a00497.html', 1, '']]],\n- ['hybridsmoother_2eh_76', ['HybridSmoother.h', ['../a00557.html', 1, '']]],\n+ ['hybridsmoother_2ecpp_75', ['HybridSmoother.cpp', ['../a00524.html', 1, '']]],\n+ ['hybridsmoother_2eh_76', ['HybridSmoother.h', ['../a00500.html', 1, '']]],\n ['hybridvalues_77', ['hybridvalues', ['../a03504.html', 1, 'gtsam::HybridValues'],\n ['../a05044.html', 1, 'HybridValues'],\n ['../a03504.html#a23cef590dc6f0ea815966ac86780e1b4', 1, 'gtsam::HybridValues::HybridValues(const VectorValues &cv, const DiscreteValues &dv, const Values &v)'],\n ['../a03504.html#ad076208a657b91cce655faccfb61a628', 1, 'gtsam::HybridValues::HybridValues(const VectorValues &cv, const DiscreteValues &dv)'],\n ['../a03504.html#ac6a6279b5ebc30394ecae7daf9557301', 1, 'gtsam::HybridValues::HybridValues()=default']\n ]],\n- ['hybridvalues_2eh_78', ['HybridValues.h', ['../a00560.html', 1, '']]]\n+ ['hybridvalues_2eh_78', ['HybridValues.h', ['../a00482.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_a.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_a.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -10,22 +10,22 @@\n ['../a03304.html#a7c4b9598c63ea910d41d6ecdcfa63225', 1, 'gtsam::SO::Identity()'],\n ['../a03324.html#ac232d61a5f6d02a8835510424eebb5b8', 1, 'gtsam::SphericalCamera::Identity()'],\n ['../a03352.html#af51044042dadc526d0b364c26c6da97e', 1, 'gtsam::StereoPoint2::Identity()'],\n ['../a04140.html#a1974ea0edb481b9507d8e6893d801e13', 1, 'gtsam::imuBias::ConstantBias::Identity()'],\n ['../a03104.html#a72913183aceca5659db9ccd9ef8f4cea', 1, 'gtsam::PinholeCamera::Identity()'],\n ['../a02752.html#a2464cdad571c90517d171471827bad0d', 1, 'gtsam::ParameterMatrix::Identity()']\n ]],\n- ['imubias_2ecpp_1', ['ImuBias.cpp', ['../a00989.html', 1, '']]],\n- ['imubias_2eh_2', ['ImuBias.h', ['../a00968.html', 1, '']]],\n+ ['imubias_2ecpp_1', ['ImuBias.cpp', ['../a00968.html', 1, '']]],\n+ ['imubias_2eh_2', ['ImuBias.h', ['../a00974.html', 1, '']]],\n ['imufactor_3', ['imufactor', ['../a04152.html', 1, 'gtsam::ImuFactor'],\n ['../a04152.html#ae252ef148a19d5906acb5dea75a760b8', 1, 'gtsam::ImuFactor::ImuFactor()'],\n ['../a04152.html#a93d499891d2801915a26a344b06036bb', 1, 'gtsam::ImuFactor::ImuFactor(Key pose_i, Key vel_i, Key pose_j, Key vel_j, Key bias, const PreintegratedImuMeasurements &preintegratedMeasurements)']\n ]],\n- ['imufactor_2ecpp_4', ['ImuFactor.cpp', ['../a00992.html', 1, '']]],\n- ['imufactor_2eh_5', ['ImuFactor.h', ['../a00938.html', 1, '']]],\n+ ['imufactor_2ecpp_4', ['ImuFactor.cpp', ['../a00959.html', 1, '']]],\n+ ['imufactor_2eh_5', ['ImuFactor.h', ['../a00977.html', 1, '']]],\n ['imufactor2_6', ['imufactor2', ['../a04156.html', 1, 'gtsam::ImuFactor2'],\n ['../a04156.html#a0abb4a12c32bea6d415ff0977b2ef75b', 1, 'gtsam::ImuFactor2::ImuFactor2()'],\n ['../a04156.html#ae90d38f249a8da177d3b9263113899ec', 1, 'gtsam::ImuFactor2::ImuFactor2(Key state_i, Key state_j, Key bias, const PreintegratedImuMeasurements &preintegratedMeasurements)']\n ]],\n ['inconsistenteliminationrequested_7', ['InconsistentEliminationRequested', ['../a03636.html', 1, 'gtsam']]],\n ['incrementalrotation_8', ['incrementalRotation', ['../a04208.html#a8ae1c42a1167736378498fb09d4a761a', 1, 'gtsam::PreintegratedRotation']]],\n ['indeterminantlinearsystemexception_9', ['IndeterminantLinearSystemException', ['../a03864.html', 1, 'gtsam']]],\n@@ -38,16 +38,16 @@\n ['../a04364.html#a2a07e834472648cc31661410ae7457d4', 1, 'gtsam::GncParams::IndexVector']\n ]],\n ['indices_14', ['indices', ['../a02876.html#a84cdd881990fa290590eb32544f18723', 1, 'gtsam::DiscreteKeys::indices()'],\n ['../a02912.html#adbe99487fcc5aed360e16ea58599ad0c', 1, 'gtsam::Signature::indices()'],\n ['../a03464.html#a27ac200465a3e557c93ae22b0b437902', 1, 'gtsam::HybridGaussianFactorGraph::Indices']\n ]],\n ['inference_15', ['Inference', ['../a01418.html', 1, '']]],\n- ['inference_2dinst_2eh_16', ['inference-inst.h', ['../a00620.html', 1, '']]],\n- ['inferenceexceptions_2eh_17', ['inferenceExceptions.h', ['../a00650.html', 1, '']]],\n+ ['inference_2dinst_2eh_16', ['inference-inst.h', ['../a00617.html', 1, '']]],\n+ ['inferenceexceptions_2eh_17', ['inferenceExceptions.h', ['../a00629.html', 1, '']]],\n ['info_18', ['info', ['../a03812.html#a3d10684a9c0a7862120a29c08a380dbf', 1, 'gtsam::HessianFactor::info() const'],\n ['../a03812.html#af1d7847f2ddce062419421a8e0033653', 1, 'gtsam::HessianFactor::info()']\n ]],\n ['info_5f_19', ['info_', ['../a03812.html#a9de862db7722018e839c909d6ff9236b', 1, 'gtsam::HessianFactor']]],\n ['information_20', ['information', ['../a03780.html#a3e5307082cc4fb1f5bc1c732ab4d61ec', 1, 'gtsam::GaussianFactor::information()'],\n ['../a03812.html#a8c9bc75c63dfb203d591a7f6c1f673d3', 1, 'gtsam::HessianFactor::information()'],\n ['../a03844.html#adae31f902522cc358f9ba948b917d7c9', 1, 'gtsam::JacobianFactor::information()'],\n@@ -65,18 +65,18 @@\n ['initialize_26', ['initialize', ['../a04856.html#a28534d9ea0e1486f3f32cf1b24c17da8', 1, 'gtsam::InitializePose3::initialize()'],\n ['../a04924.html#a85c5981614f80245fbba7ebb05fa2442', 1, 'gtsam::RotateDirectionsFactor::Initialize()'],\n ['../a04856.html#a0de66d19607ddc19c27d3e5be2911f6c', 1, 'gtsam::InitializePose3::initialize()'],\n ['../a04280.html#afe7b64aa1ac8161c0765031f91618deb', 1, 'gtsam::ExpressionFactor::initialize()']\n ]],\n ['initializemu_27', ['initializeMu', ['../a04360.html#a7f832695042f30cf04fabb44913a64cd', 1, 'gtsam::GncOptimizer']]],\n ['initializeorientations_28', ['initializeOrientations', ['../a04856.html#ad8900891ebae624b54cb32bd387f81f2', 1, 'gtsam::InitializePose3']]],\n- ['initializepose_2eh_29', ['InitializePose.h', ['../a01301.html', 1, '']]],\n+ ['initializepose_2eh_29', ['InitializePose.h', ['../a01280.html', 1, '']]],\n ['initializepose3_30', ['InitializePose3', ['../a04856.html', 1, 'gtsam']]],\n- ['initializepose3_2ecpp_31', ['InitializePose3.cpp', ['../a01340.html', 1, '']]],\n- ['initializepose3_2eh_32', ['InitializePose3.h', ['../a01304.html', 1, '']]],\n+ ['initializepose3_2ecpp_31', ['InitializePose3.cpp', ['../a01304.html', 1, '']]],\n+ ['initializepose3_2eh_32', ['InitializePose3.h', ['../a01238.html', 1, '']]],\n ['initializerandomly_33', ['initializerandomly', ['../a04732.html#a7dd6f6b45c55d8f871e613cd0691a9e0', 1, 'gtsam::ShonanAveraging::initializeRandomly() const'],\n ['../a04732.html#a6cc6dc67c3a886181343943a29580000', 1, 'gtsam::ShonanAveraging::initializeRandomly(std::mt19937 &rng) const'],\n ['../a04756.html#a82e04ae68a73a2736f152790adfb3c03', 1, 'gtsam::TranslationRecovery::initializeRandomly(const std::vector< BinaryMeasurement< Unit3 > > &relativeTranslations, const std::vector< BinaryMeasurement< Point3 > > &betweenTranslations, const Values &initialValues=Values()) const'],\n ['../a04756.html#ae6e4812bf6a8523000ce05f18914e035', 1, 'gtsam::TranslationRecovery::initializeRandomly(const std::vector< BinaryMeasurement< Unit3 > > &relativeTranslations, const std::vector< BinaryMeasurement< Point3 > > &betweenTranslations, std::mt19937 *rng, const Values &initialValues=Values()) const']\n ]],\n ['initializerandomlyat_34', ['initializerandomlyat', ['../a04732.html#aab225bd95f94fa28485cf50254bba087', 1, 'gtsam::ShonanAveraging::initializeRandomlyAt(size_t p) const'],\n ['../a04732.html#ac68049b4d0f88bdb30f8cc05a293d543', 1, 'gtsam::ShonanAveraging::initializeRandomlyAt(size_t p, std::mt19937 &rng) const']\n@@ -136,15 +136,15 @@\n ['invalidargumentthreadsafe_58', ['invalidargumentthreadsafe', ['../a02508.html', 1, 'gtsam::InvalidArgumentThreadsafe'],\n ['../a02508.html#a5b59c8bf5a4f3ed5ab5a3bdc4bb0dad2', 1, 'gtsam::InvalidArgumentThreadsafe::InvalidArgumentThreadsafe()']\n ]],\n ['invaliddenseelimination_59', ['InvalidDenseElimination', ['../a03876.html', 1, 'gtsam']]],\n ['invalidmatrixblock_60', ['InvalidMatrixBlock', ['../a03872.html', 1, 'gtsam']]],\n ['invalidnoisemodel_61', ['InvalidNoiseModel', ['../a03868.html', 1, 'gtsam']]],\n ['inverse_62', ['inverse', ['../a03156.html#a438b73dbeda3e8c7818aeff5954f60b3', 1, 'gtsam::Pose2::inverse()'],\n- ['../a00122.html#aaa623dd059a67523b029af6ec20a38da', 1, 'gtsam::testing::inverse()'],\n+ ['../a00011.html#aaa623dd059a67523b029af6ec20a38da', 1, 'gtsam::testing::inverse()'],\n ['../a02940.html#a04db4819715db2034b5c055d06e39ad3', 1, 'gtsam::Cal3::inverse()'],\n ['../a03304.html#a1c5250f64cea96dcbf0e443744a2f7de', 1, 'gtsam::SO::inverse()'],\n ['../a03264.html#a5873b80995627940cdf79da5b631fa6c', 1, 'gtsam::Similarity3::inverse()'],\n ['../a03248.html#a8676f15c94a681f722717c9e6194a578', 1, 'gtsam::Similarity2::inverse()'],\n ['../a03228.html#ab5e9bf20c7a5dc294012debdbd4f7acb', 1, 'gtsam::Rot3::inverse()'],\n ['../a03212.html#a4c5d02fd84eb445e2275a67c31af8453', 1, 'gtsam::Rot2::inverse()'],\n ['../a03180.html#aef9cc3d8b23d0f93c763781a59b2b70a', 1, 'gtsam::Pose3::inverse()']\n@@ -154,49 +154,49 @@\n ['invertinplace_65', ['invertInPlace', ['../a02472.html#a709ab14aa6dc7ca078b3765aac4f2843', 1, 'gtsam::SymmetricBlockMatrix']]],\n ['invsigmas_66', ['invsigmas', ['../a03928.html#a53b4adbacd6134a45b7e9fe86b4b9aa3', 1, 'gtsam::noiseModel::Diagonal']]],\n ['isaboverelinthreshold_67', ['isAboveRelinThreshold', ['../a04428.html#a56611177d7b321070f779f35cb63cd16', 1, 'gtsam::ISAM2Result::DetailedResults::VariableStatus']]],\n ['isam_68', ['isam', ['../a03640.html#a0c7b81b104909590d1341dcfd19dadc9', 1, 'gtsam::ISAM::ISAM()'],\n ['../a03640.html', 1, 'gtsam::ISAM< BAYESTREE >'],\n ['../a03640.html#a528e028d3e062171007e8f40b55fdbae', 1, 'gtsam::ISAM::ISAM()']\n ]],\n- ['isam_2dinst_2eh_69', ['ISAM-inst.h', ['../a00644.html', 1, '']]],\n- ['isam_2eh_70', ['ISAM.h', ['../a00647.html', 1, '']]],\n+ ['isam_2dinst_2eh_69', ['ISAM-inst.h', ['../a00692.html', 1, '']]],\n+ ['isam_2eh_70', ['ISAM.h', ['../a00638.html', 1, '']]],\n ['isam2_71', ['isam2', ['../a04396.html', 1, 'gtsam::ISAM2'],\n ['../a04396.html#ade4c702ba582e744962b5bd403f22206', 1, 'gtsam::ISAM2::ISAM2()'],\n ['../a04396.html#ab79162caabd11ce503c7115c4e9f9419', 1, 'gtsam::ISAM2::ISAM2(const ISAM2Params &params)'],\n ['../a01426.html', 1, 'ISAM2']\n ]],\n- ['isam2_2dimpl_2ecpp_72', ['ISAM2-impl.cpp', ['../a01046.html', 1, '']]],\n- ['isam2_2dimpl_2eh_73', ['ISAM2-impl.h', ['../a01067.html', 1, '']]],\n- ['isam2_2ecpp_74', ['ISAM2.cpp', ['../a01139.html', 1, '']]],\n- ['isam2_2eh_75', ['ISAM2.h', ['../a01163.html', 1, '']]],\n+ ['isam2_2dimpl_2ecpp_72', ['ISAM2-impl.cpp', ['../a01010.html', 1, '']]],\n+ ['isam2_2dimpl_2eh_73', ['ISAM2-impl.h', ['../a01058.html', 1, '']]],\n+ ['isam2_2ecpp_74', ['ISAM2.cpp', ['../a01106.html', 1, '']]],\n+ ['isam2_2eh_75', ['ISAM2.h', ['../a01007.html', 1, '']]],\n ['isam2bayestree_76', ['ISAM2BayesTree', ['../a04372.html', 1, 'gtsam']]],\n ['isam2clique_77', ['isam2clique', ['../a04404.html', 1, 'gtsam::ISAM2Clique'],\n ['../a04404.html#a19fabd19af262f6e8bda230a2efadc82', 1, 'gtsam::ISAM2Clique::ISAM2Clique(const ISAM2Clique &other)'],\n ['../a04404.html#a65df62d31a1b1634ab9ebd9e2bbe32a8', 1, 'gtsam::ISAM2Clique::ISAM2Clique()']\n ]],\n- ['isam2clique_2ecpp_78', ['ISAM2Clique.cpp', ['../a01055.html', 1, '']]],\n- ['isam2clique_2eh_79', ['ISAM2Clique.h', ['../a01160.html', 1, '']]],\n+ ['isam2clique_2ecpp_78', ['ISAM2Clique.cpp', ['../a01109.html', 1, '']]],\n+ ['isam2clique_2eh_79', ['ISAM2Clique.h', ['../a01049.html', 1, '']]],\n ['isam2doglegparams_80', ['isam2doglegparams', ['../a04412.html#a68b79a86c44c9bec6549ecdfaf0cf536', 1, 'gtsam::ISAM2DoglegParams::ISAM2DoglegParams()'],\n ['../a04412.html', 1, 'gtsam::ISAM2DoglegParams']\n ]],\n ['isam2gaussnewtonparams_81', ['isam2gaussnewtonparams', ['../a04408.html', 1, 'gtsam::ISAM2GaussNewtonParams'],\n ['../a04408.html#ab1b9012a5a0d91351d13174c5208dc7e', 1, 'gtsam::ISAM2GaussNewtonParams::ISAM2GaussNewtonParams()']\n ]],\n ['isam2junctiontree_82', ['ISAM2JunctionTree', ['../a04376.html', 1, 'gtsam']]],\n ['isam2params_83', ['isam2params', ['../a04416.html', 1, 'gtsam::ISAM2Params'],\n ['../a04416.html#af9b8cf95eb016d68fa9ce9d06e4a3888', 1, 'gtsam::ISAM2Params::ISAM2Params()']\n ]],\n- ['isam2params_2ecpp_84', ['ISAM2Params.cpp', ['../a01172.html', 1, '']]],\n- ['isam2params_2eh_85', ['ISAM2Params.h', ['../a01040.html', 1, '']]],\n+ ['isam2params_2ecpp_84', ['ISAM2Params.cpp', ['../a01124.html', 1, '']]],\n+ ['isam2params_2eh_85', ['ISAM2Params.h', ['../a01037.html', 1, '']]],\n ['isam2result_86', ['ISAM2Result', ['../a04420.html', 1, 'gtsam']]],\n- ['isam2result_2eh_87', ['ISAM2Result.h', ['../a01127.html', 1, '']]],\n+ ['isam2result_2eh_87', ['ISAM2Result.h', ['../a01004.html', 1, '']]],\n ['isam2thresholdmap_88', ['ISAM2ThresholdMap', ['../a01426.html#ga238e84a1d4a91f43465b12592a8bf8e4', 1, 'gtsam']]],\n ['isam2updateparams_89', ['ISAM2UpdateParams', ['../a04432.html', 1, 'gtsam']]],\n- ['isam2updateparams_2eh_90', ['ISAM2UpdateParams.h', ['../a01169.html', 1, '']]],\n+ ['isam2updateparams_2eh_90', ['ISAM2UpdateParams.h', ['../a01067.html', 1, '']]],\n ['isam_3c_20gaussianbayestree_20_3e_91', ['ISAM< GaussianBayesTree >', ['../a03640.html', 1, 'gtsam']]],\n ['isam_3c_20hybridbayestree_20_3e_92', ['ISAM< HybridBayesTree >', ['../a03640.html', 1, 'gtsam']]],\n ['isam_3c_20symbolicbayestree_20_3e_93', ['ISAM< SymbolicBayesTree >', ['../a03640.html', 1, 'gtsam']]],\n ['isam_5f_94', ['isam_', ['../a04548.html#afd3d7d897197b0a60a8e25dc68c588fd', 1, 'gtsam::NonlinearISAM::isam_'],\n ['../a03496.html#abc388dedfd3df948cce9e9844eb07f86', 1, 'gtsam::HybridNonlinearISAM::isam_']\n ]],\n ['isconstrained_95', ['isconstrained', ['../a03844.html#a6c450b7717764964f270faeb3beb36ac', 1, 'gtsam::JacobianFactor::isConstrained()'],\n@@ -239,20 +239,20 @@\n ['../a04552.html#ab238f0a58ca49edd63ad552baf852599', 1, 'gtsam::NonlinearOptimizer::iterate()']\n ]],\n ['iterationhook_121', ['iterationhook', ['../a04556.html#a100c28f729c2b58813428058b57a5085', 1, 'gtsam::NonlinearOptimizerParams::iterationHook'],\n ['../a04556.html#aa62b693f8dae9f82e5ed0b3dab19f1c3', 1, 'gtsam::NonlinearOptimizerParams::IterationHook']\n ]],\n ['iterationresult_122', ['IterationResult', ['../a04268.html', 1, 'gtsam::DoglegOptimizerImpl']]],\n ['iterations_123', ['iterations', ['../a04552.html#ad87eeae75b136c470a59df02ce3414aa', 1, 'gtsam::NonlinearOptimizer']]],\n- ['iterative_2dinl_2eh_124', ['iterative-inl.h', ['../a00737.html', 1, '']]],\n- ['iterative_2ecpp_125', ['iterative.cpp', ['../a00878.html', 1, '']]],\n- ['iterative_2eh_126', ['iterative.h', ['../a00887.html', 1, '']]],\n+ ['iterative_2dinl_2eh_124', ['iterative-inl.h', ['../a00761.html', 1, '']]],\n+ ['iterative_2ecpp_125', ['iterative.cpp', ['../a00716.html', 1, '']]],\n+ ['iterative_2eh_126', ['iterative.h', ['../a00812.html', 1, '']]],\n ['iterativeoptimizationparameters_127', ['IterativeOptimizationParameters', ['../a03828.html', 1, 'gtsam']]],\n ['iterativeparams_128', ['iterativeParams', ['../a04556.html#a22f0350290afc3b8f3731b67a4917ea6', 1, 'gtsam::NonlinearOptimizerParams']]],\n ['iterativesolver_129', ['IterativeSolver', ['../a03832.html', 1, 'gtsam']]],\n ['iterativesolver_2ecpp_130', ['IterativeSolver.cpp', ['../a00797.html', 1, '']]],\n- ['iterativesolver_2eh_131', ['IterativeSolver.h', ['../a00767.html', 1, '']]],\n+ ['iterativesolver_2eh_131', ['IterativeSolver.h', ['../a00857.html', 1, '']]],\n ['iterator_132', ['iterator', ['../a04996.html#a9cf431cc004298a77735cf3d51c04629', 1, 'gtsam::SymbolicConditional::iterator'],\n ['../a04064.html#a1fb5672c19dff9542baa9375393fb3d8', 1, 'gtsam::VectorValues::iterator'],\n ['../a03592.html#acb069f38cc81bea20cecfad4070da59e', 1, 'gtsam::Factor::iterator']\n ]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_b.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_b.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -21,16 +21,16 @@\n ['../a03844.html#ab44f80d3aa07952ea28b2ba4a969a057', 1, 'gtsam::JacobianFactor::JacobianFactor(const KEYS &keys, const VerticalBlockMatrix &augmentedMatrix, const SharedDiagonal &sigmas=SharedDiagonal())'],\n ['../a03844.html#a32067e31765f075181b0698bf1f7ee6b', 1, 'gtsam::JacobianFactor::JacobianFactor(const GaussianFactorGraph &graph)'],\n ['../a03844.html#ae36415747759e6ed1b9176149ee5a898', 1, 'gtsam::JacobianFactor::JacobianFactor(const GaussianFactorGraph &graph, const VariableSlots &p_variableSlots)'],\n ['../a03844.html#a89c2695b69c18d643614f3d4314e28b4', 1, 'gtsam::JacobianFactor::JacobianFactor(const GaussianFactorGraph &graph, const Ordering &ordering)'],\n ['../a03844.html#ae6a4e0f5dd4e32c35ebdf6aa4a04a895', 1, 'gtsam::JacobianFactor::JacobianFactor(const GaussianFactorGraph &graph, const Ordering &ordering, const VariableSlots &p_variableSlots)'],\n ['../a03844.html', 1, 'gtsam::JacobianFactor']\n ]],\n- ['jacobianfactor_2ecpp_2', ['JacobianFactor.cpp', ['../a00899.html', 1, '']]],\n- ['jacobianfactor_2eh_3', ['JacobianFactor.h', ['../a00776.html', 1, '']]],\n+ ['jacobianfactor_2ecpp_2', ['JacobianFactor.cpp', ['../a00821.html', 1, '']]],\n+ ['jacobianfactor_2eh_3', ['JacobianFactor.h', ['../a00719.html', 1, '']]],\n ['jacobianfactorq_4', ['jacobianfactorq', ['../a04860.html#a549fef1272025c45472f2e4294bd319e', 1, 'gtsam::JacobianFactorQ::JacobianFactorQ(const KeyVector &keys, const std::vector< MatrixZD, Eigen::aligned_allocator< MatrixZD > > &FBlocks, const Matrix &E, const Matrix3 &P, const Vector &b, const SharedDiagonal &model=SharedDiagonal())'],\n ['../a04860.html#abfb38e58b5b2d1293cf374b7eca2b2d4', 1, 'gtsam::JacobianFactorQ::JacobianFactorQ(const KeyVector &keys, const SharedDiagonal &model=SharedDiagonal())'],\n ['../a04860.html#a4dd3fbba46a6dff75bcf902931a3b769', 1, 'gtsam::JacobianFactorQ::JacobianFactorQ()'],\n ['../a04860.html', 1, 'gtsam::JacobianFactorQ< D, ZDim >']\n ]],\n ['jacobianfactorqr_5', ['jacobianfactorqr', ['../a04868.html', 1, 'gtsam::JacobianFactorQR< D, ZDim >'],\n ['../a04868.html#a6acdcc2e3a964795a0438cdb3ea94b1d', 1, 'gtsam::JacobianFactorQR::JacobianFactorQR()']\n@@ -48,15 +48,15 @@\n ]],\n ['jointmarginalcovariance_11', ['jointMarginalCovariance', ['../a04452.html#a79299e7bb9a34e93be69d07882d95133', 1, 'gtsam::Marginals']]],\n ['jointmarginalinformation_12', ['jointMarginalInformation', ['../a04452.html#a18949767da9858fbcc63268b4e28c24e', 1, 'gtsam::Marginals']]],\n ['junctiontree_13', ['junctiontree', ['../a03652.html#a5812db967ae1a284a243c5a695656d52', 1, 'gtsam::JunctionTree::JunctionTree()'],\n ['../a03652.html', 1, 'gtsam::JunctionTree< BAYESTREE, GRAPH >']\n ]],\n ['junctiontree_2dinst_2eh_14', ['JunctionTree-inst.h', ['../a00701.html', 1, '']]],\n- ['junctiontree_2eh_15', ['JunctionTree.h', ['../a00665.html', 1, '']]],\n+ ['junctiontree_2eh_15', ['JunctionTree.h', ['../a00677.html', 1, '']]],\n ['junctiontree_3c_20discretebayestree_2c_20discretefactorgraph_20_3e_16', ['JunctionTree< DiscreteBayesTree, DiscreteFactorGraph >', ['../a03652.html', 1, 'gtsam']]],\n ['junctiontree_3c_20gaussianbayestree_2c_20gaussianfactorgraph_20_3e_17', ['JunctionTree< GaussianBayesTree, GaussianFactorGraph >', ['../a03652.html', 1, 'gtsam']]],\n ['junctiontree_3c_20hybridbayestree_2c_20hybridgaussianfactorgraph_20_3e_18', ['JunctionTree< HybridBayesTree, HybridGaussianFactorGraph >', ['../a03652.html', 1, 'gtsam']]],\n ['junctiontree_3c_20isam2bayestree_2c_20gaussianfactorgraph_20_3e_19', ['JunctionTree< ISAM2BayesTree, GaussianFactorGraph >', ['../a03652.html', 1, 'gtsam']]],\n ['junctiontree_3c_20symbolicbayestree_2c_20symbolicfactorgraph_20_3e_20', ['JunctionTree< SymbolicBayesTree, SymbolicFactorGraph >', ['../a03652.html', 1, 'gtsam']]],\n ['junctiontreetype_21', ['junctiontreetype', ['../a02860.html#a3105cd6512d1674d6d433034c87b4e0c', 1, 'gtsam::EliminationTraits< DiscreteFactorGraph >::JunctionTreeType'],\n ['../a03460.html#a44470007a0869929ac408f3781e949b2', 1, 'gtsam::EliminationTraits< HybridGaussianFactorGraph >::JunctionTreeType'],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_c.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_c.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -18,16 +18,16 @@\n ['k2_5f_3', ['k2_', ['../a02992.html#a2240b8d0b619f888597ef6ab9ea115cc', 1, 'gtsam::Cal3DS2_Base']]],\n ['k3_4', ['k3', ['../a02996.html#a683adc491f83a1e7a0b77ecbb7babe6f', 1, 'gtsam::Cal3Fisheye']]],\n ['k4_5', ['k4', ['../a02996.html#a22b48ebb60cd7aca9adc850701880dd5', 1, 'gtsam::Cal3Fisheye']]],\n ['k_5f_6', ['k_', ['../a04896.html#a4dccf402a384fee6b9ad802c37ab989f', 1, 'gtsam::GenericProjectionFactor::K_'],\n ['../a04944.html#a38878009ca4060a870b45f46184656dd', 1, 'gtsam::SmartProjectionPoseFactor::K_']\n ]],\n ['kalmanfilter_7', ['KalmanFilter', ['../a03852.html', 1, 'gtsam']]],\n- ['kalmanfilter_2ecpp_8', ['KalmanFilter.cpp', ['../a00848.html', 1, '']]],\n- ['kalmanfilter_2eh_9', ['KalmanFilter.h', ['../a00812.html', 1, '']]],\n+ ['kalmanfilter_2ecpp_8', ['KalmanFilter.cpp', ['../a00839.html', 1, '']]],\n+ ['kalmanfilter_2eh_9', ['KalmanFilter.h', ['../a00791.html', 1, '']]],\n ['karchermeanfactor_10', ['karchermeanfactor', ['../a04876.html#a2a629fe6552384f331d8af2a9a2e746f', 1, 'gtsam::KarcherMeanFactor::KarcherMeanFactor()'],\n ['../a04876.html', 1, 'gtsam::KarcherMeanFactor< T >']\n ]],\n ['kernelfunctiontype_11', ['KernelFunctionType', ['../a01428.html#a8be373f34edc0a9d28b1bfab5dd62ba0', 1, 'gtsam']]],\n ['key_12', ['key', ['../a04536.html#ae48358c2377e5cee3dad557c29b374aa', 1, 'gtsam::NoiseModelFactorN::key()'],\n ['../a04628.html#ad4f148e77a4c94f36ab8e190acf93b73', 1, 'gtsam::ValuesKeyAlreadyExists::key()'],\n ['../a04632.html#a58b1edd7ddc0c65ff6af070ef79ccc88', 1, 'gtsam::ValuesKeyDoesNotExist::key()'],\n@@ -38,15 +38,15 @@\n ['../a02912.html#a10c4bb368ec774f858fb8b285d8d3fd9', 1, 'gtsam::Signature::key()'],\n ['../a04620.html#a1e4447d2022b8a70fabaa877641b63a0', 1, 'gtsam::Values::ConstKeyValuePair::key'],\n ['../a04572.html#ad1598dd19527916716fe26a436e62a7f', 1, 'gtsam::_ValuesConstKeyValuePair::key'],\n ['../a04568.html#aa928242396405483048bedd4a00e804c', 1, 'gtsam::_ValuesKeyValuePair::key'],\n ['../a03588.html#a725807c0f6a2b62cea3626dec4d12d24', 1, 'gtsam::EliminationTree::Node::key'],\n ['../a04616.html#ae8240622f321ec9a81a9c41679ca530b', 1, 'gtsam::Values::KeyValuePair::key']\n ]],\n- ['key_2eh_13', ['Key.h', ['../a00662.html', 1, '']]],\n+ ['key_2eh_13', ['Key.h', ['../a00635.html', 1, '']]],\n ['key_5f_14', ['key_', ['../a04636.html#a6303f8c7ce66e97c3107fd4f6cf24d28', 1, 'gtsam::ValuesIncorrectType::key_'],\n ['../a04632.html#a433f387db342dfb0b25c7438fa42f58c', 1, 'gtsam::ValuesKeyDoesNotExist::key_'],\n ['../a04628.html#a5c2ccda4c15caefd91d0308d8b76eb53', 1, 'gtsam::ValuesKeyAlreadyExists::key_']\n ]],\n ['key_5fformatter_15', ['key_formatter', ['../a03660.html', 1, 'gtsam']]],\n ['keyformatter_16', ['keyformatter', ['../a04416.html#af43c5940b56d327638b1a04bf8f85c91', 1, 'gtsam::ISAM2Params::keyFormatter'],\n ['../a01428.html#ae4b4e8e7f0d745882c6a02b507d5bffe', 1, 'gtsam::KeyFormatter']\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_d.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_d.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -8,17 +8,17 @@\n ['labelc_4', ['LabelC', ['../a02796.html#adcdd80ab1af415d212397a2666320e35', 1, 'gtsam::DecisionTree']]],\n ['labeledsymbol_5', ['labeledsymbol', ['../a03668.html', 1, 'gtsam::LabeledSymbol'],\n ['../a03668.html#a6adf25100691a1e4d85a52984d97b890', 1, 'gtsam::LabeledSymbol::LabeledSymbol(gtsam::Key key)'],\n ['../a03668.html#a67e7b55ea34de161202e6cc27ede4d3a', 1, 'gtsam::LabeledSymbol::LabeledSymbol(unsigned char c, unsigned char label, std::uint64_t j)'],\n ['../a03668.html#aa3fb596d35048a62db4081d6805a2788', 1, 'gtsam::LabeledSymbol::LabeledSymbol(const LabeledSymbol &key)'],\n ['../a03668.html#a26423032387e3e0615c2f168a3ad0389', 1, 'gtsam::LabeledSymbol::LabeledSymbol()']\n ]],\n- ['labeledsymbol_2eh_6', ['LabeledSymbol.h', ['../a00599.html', 1, '']]],\n+ ['labeledsymbol_2eh_6', ['LabeledSymbol.h', ['../a00641.html', 1, '']]],\n ['labels_7', ['labels', ['../a02796.html#a3c81ed3e00b4ecf14633a107690f9946', 1, 'gtsam::DecisionTree']]],\n- ['lago_2eh_8', ['lago.h', ['../a01262.html', 1, '']]],\n+ ['lago_2eh_8', ['lago.h', ['../a01277.html', 1, '']]],\n ['lambda_9', ['lambda', ['../a04436.html#a297f58837db566e305af2bbeb166a29a', 1, 'gtsam::LevenbergMarquardtOptimizer']]],\n ['lambdafactor_10', ['lambdaFactor', ['../a04440.html#a0ff6f8698a3993eb6a2fe5720b5c45d6', 1, 'gtsam::LevenbergMarquardtParams']]],\n ['lambdainitial_11', ['lambdaInitial', ['../a04440.html#a49aef82106661bcbd87299fa60209912', 1, 'gtsam::LevenbergMarquardtParams']]],\n ['lambdalowerbound_12', ['lambdaLowerBound', ['../a04440.html#aad53fd303fc59476683c27e942f63ae2', 1, 'gtsam::LevenbergMarquardtParams']]],\n ['lambdaupperbound_13', ['lambdaUpperBound', ['../a04440.html#a465daecb791ab692aa14fe0405b64e36', 1, 'gtsam::LevenbergMarquardtParams']]],\n ['landmarkdistancethreshold_14', ['landmarkDistanceThreshold', ['../a03372.html#a80c1a1257cd5603cfc8710be0a2dbde0', 1, 'gtsam::TriangulationParameters']]],\n ['leaf_15', ['leaf', ['../a02776.html#aced2d5b697111b3934b54823523888d7', 1, 'gtsam::DecisionTree::Leaf::Leaf()'],\n@@ -33,20 +33,20 @@\n ['../a03124.html#ae9e4f3177ad0f29b2c955a88f2430ede', 1, 'gtsam::PinholePose::Level(const Pose2 &pose2, double height)']\n ]],\n ['levelpose_18', ['LevelPose', ['../a03024.html#a9f4fe91997b7fc6a928cac93c80e80f7', 1, 'gtsam::PinholeBase']]],\n ['levenbergmarquardtoptimizer_19', ['levenbergmarquardtoptimizer', ['../a04436.html#afbc0d366428f3339505587ac0848e2f3', 1, 'gtsam::LevenbergMarquardtOptimizer::LevenbergMarquardtOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues, const LevenbergMarquardtParams &params=LevenbergMarquardtParams())'],\n ['../a04436.html#aa9fd26c5fea8ba07a0a5cbe08c5f2e6f', 1, 'gtsam::LevenbergMarquardtOptimizer::LevenbergMarquardtOptimizer(const NonlinearFactorGraph &graph, const Values &initialValues, const Ordering &ordering, const LevenbergMarquardtParams &params=LevenbergMarquardtParams())'],\n ['../a04436.html', 1, 'gtsam::LevenbergMarquardtOptimizer']\n ]],\n- ['levenbergmarquardtoptimizer_2ecpp_20', ['LevenbergMarquardtOptimizer.cpp', ['../a01004.html', 1, '']]],\n- ['levenbergmarquardtoptimizer_2eh_21', ['LevenbergMarquardtOptimizer.h', ['../a01043.html', 1, '']]],\n+ ['levenbergmarquardtoptimizer_2ecpp_20', ['LevenbergMarquardtOptimizer.cpp', ['../a01028.html', 1, '']]],\n+ ['levenbergmarquardtoptimizer_2eh_21', ['LevenbergMarquardtOptimizer.h', ['../a01172.html', 1, '']]],\n ['levenbergmarquardtparams_22', ['LevenbergMarquardtParams', ['../a04440.html', 1, 'gtsam']]],\n- ['levenbergmarquardtparams_2ecpp_23', ['LevenbergMarquardtParams.cpp', ['../a01100.html', 1, '']]],\n- ['levenbergmarquardtparams_2eh_24', ['LevenbergMarquardtParams.h', ['../a01019.html', 1, '']]],\n- ['lie_2eh_25', ['Lie.h', ['../a00074.html', 1, '']]],\n+ ['levenbergmarquardtparams_2ecpp_23', ['LevenbergMarquardtParams.cpp', ['../a01013.html', 1, '']]],\n+ ['levenbergmarquardtparams_2eh_24', ['LevenbergMarquardtParams.h', ['../a01145.html', 1, '']]],\n+ ['lie_2eh_25', ['Lie.h', ['../a00005.html', 1, '']]],\n ['lie_5fgroup_5ftag_26', ['lie_group_tag', ['../a02368.html', 1, 'gtsam']]],\n ['liegroup_27', ['liegroup', ['../a02376.html', 1, 'gtsam::internal::LieGroup< Class >'],\n ['../a02364.html', 1, 'gtsam::LieGroup< Class, N >']\n ]],\n ['liegroup_3c_20pose2_20_3e_28', ['LieGroup< Pose2 >', ['../a02376.html', 1, 'gtsam::internal']]],\n ['liegroup_3c_20pose2_2c_203_20_3e_29', ['LieGroup< Pose2, 3 >', ['../a02364.html', 1, 'gtsam']]],\n ['liegroup_3c_20pose3_20_3e_30', ['LieGroup< Pose3 >', ['../a02376.html', 1, 'gtsam::internal']]],\n@@ -70,15 +70,15 @@\n ['liegrouptraits_3c_20rot2_20_3e_48', ['LieGroupTraits< Rot2 >', ['../a02372.html', 1, 'gtsam::internal']]],\n ['liegrouptraits_3c_20rot3_20_3e_49', ['LieGroupTraits< Rot3 >', ['../a02372.html', 1, 'gtsam::internal']]],\n ['liegrouptraits_3c_20similarity2_20_3e_50', ['LieGroupTraits< Similarity2 >', ['../a02372.html', 1, 'gtsam::internal']]],\n ['liegrouptraits_3c_20similarity3_20_3e_51', ['LieGroupTraits< Similarity3 >', ['../a02372.html', 1, 'gtsam::internal']]],\n ['liegrouptraits_3c_20so3_20_3e_52', ['LieGroupTraits< SO3 >', ['../a02372.html', 1, 'gtsam::internal']]],\n ['liegrouptraits_3c_20so4_20_3e_53', ['LieGroupTraits< SO4 >', ['../a02372.html', 1, 'gtsam::internal']]],\n ['liegrouptraits_3c_20so_3c_20n_20_3e_20_3e_54', ['LieGroupTraits< SO< N > >', ['../a02372.html', 1, 'gtsam::internal']]],\n- ['lieproxies_2eh_55', ['lieProxies.h', ['../a00122.html', 1, '']]],\n+ ['lieproxies_2eh_55', ['lieProxies.h', ['../a00011.html', 1, '']]],\n ['lift_56', ['Lift', ['../a03304.html#ab44f7055420c8a10ef4549c21347bd74', 1, 'gtsam::SO']]],\n ['liftto_57', ['LiftTo', ['../a04732.html#af3985795537724da9056bcdd7e1c62b0', 1, 'gtsam::ShonanAveraging']]],\n ['liftwithdescent_58', ['LiftwithDescent', ['../a04732.html#a4d2db4bfdca54ca20a2c9d432b45850b', 1, 'gtsam::ShonanAveraging']]],\n ['likeactiveviewof_59', ['likeactiveviewof', ['../a02660.html#ad36f9b381dc3876995eb06c03e8667fd', 1, 'gtsam::VerticalBlockMatrix::LikeActiveViewOf(const SymmetricBlockMatrix &rhs, DenseIndex height)'],\n ['../a02660.html#ae5ca2474a54f3212d7e73b3e904b8692', 1, 'gtsam::VerticalBlockMatrix::LikeActiveViewOf(const VerticalBlockMatrix &rhs)'],\n ['../a02472.html#a6d9d6334c117ed8800872198172986ec', 1, 'gtsam::SymmetricBlockMatrix::LikeActiveViewOf(const VerticalBlockMatrix &other)'],\n ['../a02472.html#ad28c4699e481a4b6db09067f420b925a', 1, 'gtsam::SymmetricBlockMatrix::LikeActiveViewOf(const SymmetricBlockMatrix &other)']\n@@ -89,33 +89,33 @@\n ['../a02832.html#a88eb69cea6ab6745e6455d418c18a451', 1, 'gtsam::DiscreteConditional::likelihood(size_t frontal) const'],\n ['../a02832.html#adfd02e7c5cbb6bf839c4c37fdb0e1ccf', 1, 'gtsam::DiscreteConditional::likelihood(const DiscreteValues &frontalValues) const']\n ]],\n ['line3_61', ['line3', ['../a03080.html#a496c45a5ae638d6a7db373c1886c3de6', 1, 'gtsam::Line3::Line3()'],\n ['../a03080.html#a84441b40640c2f8a861272be3ac189eb', 1, 'gtsam::Line3::Line3(const Rot3 &R, const double a, const double b)'],\n ['../a03080.html', 1, 'gtsam::Line3']\n ]],\n- ['line3_2eh_62', ['Line3.h', ['../a00464.html', 1, '']]],\n+ ['line3_2eh_62', ['Line3.h', ['../a00437.html', 1, '']]],\n ['linear_63', ['Linear', ['../a01419.html', 1, '']]],\n ['linear_20systems_20with_20least_20squares_64', ['Solving of sparse linear systems with least-squares', ['../a01410.html', 1, '']]],\n ['linear_5fdependent_65', ['linear_dependent', ['../a01428.html#a2a0cfd7908b06491df49b6a9c9186775', 1, 'gtsam::linear_dependent(const Vector &vec1, const Vector &vec2, double tol=1e-9)'],\n ['../a01428.html#a4b81794af72954abafbb726fc712f5db', 1, 'gtsam::linear_dependent(const Matrix &A, const Matrix &B, double tol=1e-9)']\n ]],\n ['linear_5findependent_66', ['linear_independent', ['../a01428.html#ad8f0349471464c1fb515819d9503849a', 1, 'gtsam']]],\n- ['linearalgorithms_2dinst_2eh_67', ['linearAlgorithms-inst.h', ['../a00818.html', 1, '']]],\n+ ['linearalgorithms_2dinst_2eh_67', ['linearAlgorithms-inst.h', ['../a00833.html', 1, '']]],\n ['linearcontainerfactor_68', ['linearcontainerfactor', ['../a04444.html#a513eab0403b8af02730e086fbd7a2eb5', 1, 'gtsam::LinearContainerFactor::LinearContainerFactor(const GaussianFactor::shared_ptr &factor, const boost::optional< Values > &linearizationPoint)'],\n ['../a04444.html#a0a29b56bbe991b4e0ee8b4205b5a1b42', 1, 'gtsam::LinearContainerFactor::LinearContainerFactor()'],\n ['../a04444.html#a3df136440d82f7ee96f45f5a0bfe8d9a', 1, 'gtsam::LinearContainerFactor::LinearContainerFactor(const JacobianFactor &factor, const Values &linearizationPoint=Values())'],\n ['../a04444.html#ade7ae78a7f514eafa8f0b95b4ec8192c', 1, 'gtsam::LinearContainerFactor::LinearContainerFactor(const HessianFactor &factor, const Values &linearizationPoint=Values())'],\n ['../a04444.html#a3b9d025a1624a404f8ed8dff8fd03c19', 1, 'gtsam::LinearContainerFactor::LinearContainerFactor(const GaussianFactor::shared_ptr &factor, const Values &linearizationPoint=Values())'],\n ['../a04444.html', 1, 'gtsam::LinearContainerFactor']\n ]],\n- ['linearcontainerfactor_2ecpp_69', ['LinearContainerFactor.cpp', ['../a01145.html', 1, '']]],\n- ['linearcontainerfactor_2eh_70', ['LinearContainerFactor.h', ['../a01103.html', 1, '']]],\n- ['linearexceptions_2ecpp_71', ['linearExceptions.cpp', ['../a00743.html', 1, '']]],\n- ['linearexceptions_2eh_72', ['linearExceptions.h', ['../a00719.html', 1, '']]],\n+ ['linearcontainerfactor_2ecpp_69', ['LinearContainerFactor.cpp', ['../a01082.html', 1, '']]],\n+ ['linearcontainerfactor_2eh_70', ['LinearContainerFactor.h', ['../a01154.html', 1, '']]],\n+ ['linearexceptions_2ecpp_71', ['linearExceptions.cpp', ['../a00899.html', 1, '']]],\n+ ['linearexceptions_2eh_72', ['linearExceptions.h', ['../a00770.html', 1, '']]],\n ['linearexpression_73', ['linearExpression', ['../a01428.html#a794029fe8dfc03f67a8cb64ad05d47c9', 1, 'gtsam']]],\n ['linearfactors_5f_74', ['linearFactors_', ['../a04396.html#ada63722602d709e210d4e1ab45dcc6a8', 1, 'gtsam::ISAM2']]],\n ['lineargraph_75', ['LinearGraph', ['../a02744.html#ade0964cca8941494bf8fd1f54250d110', 1, 'gtsam::FitBasis']]],\n ['linearizationmode_76', ['linearizationmode', ['../a04932.html#a4afa132d1f394b6256605752b3b8aab0', 1, 'gtsam::SmartProjectionParams::linearizationMode'],\n ['../a01428.html#adf2020f3f6087064dde501c99794aac3', 1, 'gtsam::LinearizationMode']\n ]],\n ['linearizationpoint_77', ['linearizationPoint', ['../a04444.html#a31c9a4fc8894239e25799f094d3aaf42', 1, 'gtsam::LinearContainerFactor']]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_e.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_e.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,12 +1,12 @@\n var searchData = [\n ['magfactor_0', ['magfactor', ['../a04172.html', 1, 'gtsam::MagFactor'],\n ['../a04172.html#ae9daca6c0ee19dd63e4889c6acbb13d9', 1, 'gtsam::MagFactor::MagFactor()']\n ]],\n- ['magfactor_2eh_1', ['MagFactor.h', ['../a00917.html', 1, '']]],\n+ ['magfactor_2eh_1', ['MagFactor.h', ['../a00995.html', 1, '']]],\n ['magfactor1_2', ['magfactor1', ['../a04176.html', 1, 'gtsam::MagFactor1'],\n ['../a04176.html#a5667d9e3964646f534760bab0b309241', 1, 'gtsam::MagFactor1::MagFactor1()']\n ]],\n ['magfactor2_3', ['magfactor2', ['../a04180.html', 1, 'gtsam::MagFactor2'],\n ['../a04180.html#a5d8d154a6e667e362d68d1250b2c5f40', 1, 'gtsam::MagFactor2::MagFactor2()']\n ]],\n ['magfactor3_4', ['magfactor3', ['../a04184.html', 1, 'gtsam::MagFactor3'],\n@@ -16,23 +16,23 @@\n ['../a04188.html#af2dcbb081485187cf5c939fb6d11971c', 1, 'gtsam::MagPoseFactor::MagPoseFactor()'],\n ['../a04188.html#ae8ceef5add571dd7693f07c94a53bf15', 1, 'gtsam::MagPoseFactor::MagPoseFactor(Key pose_key, const Point &measured, double scale, const Point &direction, const Point &bias, const SharedNoiseModel &model, const boost::optional< POSE > &body_P_sensor)']\n ]],\n ['mahalanobisdistance_6', ['mahalanobisDistance', ['../a03920.html#a381eb3c71bf890c8477115be6567a7df', 1, 'gtsam::noiseModel::Base']]],\n ['make_5fshared_7', ['make_shared', ['../a01428.html#abcb9ece2bd206193ac40f118f1815c0e', 1, 'gtsam::make_shared(Args &&... args)'],\n ['../a01428.html#a6f805b32c5544e5552d702d5e2b4e801', 1, 'gtsam::make_shared(Args &&... args)']\n ]],\n- ['make_5fshared_2eh_8', ['make_shared.h', ['../a00038.html', 1, '']]],\n+ ['make_5fshared_2eh_8', ['make_shared.h', ['../a00077.html', 1, '']]],\n ['makefunctorizedfactor_9', ['MakeFunctorizedFactor', ['../a01428.html#a9d2a0b16c9f78f20fc78fa39c7426242', 1, 'gtsam']]],\n ['makefunctorizedfactor2_10', ['MakeFunctorizedFactor2', ['../a01428.html#a313f0e290f370cff0b7e25024d1b8c6d', 1, 'gtsam']]],\n ['makejacobian_11', ['MakeJacobian', ['../a02456.html', 1, 'gtsam']]],\n ['makenoisemodelrobust_12', ['makeNoiseModelRobust', ['../a04732.html#a09977170b3c9931ed26537ee5d09986d', 1, 'gtsam::ShonanAveraging']]],\n ['makeoptionaljacobian_13', ['MakeOptionalJacobian', ['../a02460.html', 1, 'gtsam']]],\n ['makeweightedgraph_14', ['makeWeightedGraph', ['../a04360.html#aa89a7071def98a46110ead257b03e101', 1, 'gtsam::GncOptimizer']]],\n ['manifold_15', ['Manifold', ['../a02408.html', 1, 'gtsam::internal']]],\n- ['manifold_2eh_16', ['Manifold.h', ['../a00002.html', 1, '']]],\n+ ['manifold_2eh_16', ['Manifold.h', ['../a00044.html', 1, '']]],\n ['manifold_3c_20cal3_5fs2_20_3e_17', ['Manifold< Cal3_S2 >', ['../a02408.html', 1, 'gtsam::internal']]],\n ['manifold_3c_20cal3_5fs2stereo_20_3e_18', ['Manifold< Cal3_S2Stereo >', ['../a02408.html', 1, 'gtsam::internal']]],\n ['manifold_3c_20cal3bundler_20_3e_19', ['Manifold< Cal3Bundler >', ['../a02408.html', 1, 'gtsam::internal']]],\n ['manifold_3c_20cal3ds2_20_3e_20', ['Manifold< Cal3DS2 >', ['../a02408.html', 1, 'gtsam::internal']]],\n ['manifold_3c_20cal3fisheye_20_3e_21', ['Manifold< Cal3Fisheye >', ['../a02408.html', 1, 'gtsam::internal']]],\n ['manifold_3c_20cal3unified_20_3e_22', ['Manifold< Cal3Unified >', ['../a02408.html', 1, 'gtsam::internal']]],\n ['manifold_3c_20calibratedcamera_20_3e_23', ['Manifold< CalibratedCamera >', ['../a02408.html', 1, 'gtsam::internal']]],\n@@ -54,16 +54,16 @@\n ['../a02684.html#a54268f8915b3418642e44acfec95126a', 1, 'gtsam::Basis::ManifoldEvaluationFunctor::ManifoldEvaluationFunctor(size_t N, double x, double a, double b)'],\n ['../a02684.html', 1, 'gtsam::Basis< DERIVED >::ManifoldEvaluationFunctor< T >']\n ]],\n ['manifoldpreintegration_35', ['manifoldpreintegration', ['../a04192.html#a4ece2b4ce023308fa06561e94309ea50', 1, 'gtsam::ManifoldPreintegration::ManifoldPreintegration()'],\n ['../a04192.html#a41ee2c0894d6b99c7d537530b57b2bce', 1, 'gtsam::ManifoldPreintegration::ManifoldPreintegration(const boost::shared_ptr< Params > &p, const imuBias::ConstantBias &biasHat=imuBias::ConstantBias())'],\n ['../a04192.html', 1, 'gtsam::ManifoldPreintegration']\n ]],\n- ['manifoldpreintegration_2ecpp_36', ['ManifoldPreintegration.cpp', ['../a00977.html', 1, '']]],\n- ['manifoldpreintegration_2eh_37', ['ManifoldPreintegration.h', ['../a00998.html', 1, '']]],\n+ ['manifoldpreintegration_2ecpp_36', ['ManifoldPreintegration.cpp', ['../a00947.html', 1, '']]],\n+ ['manifoldpreintegration_2eh_37', ['ManifoldPreintegration.h', ['../a00926.html', 1, '']]],\n ['manifoldtraits_38', ['ManifoldTraits', ['../a02404.html', 1, 'gtsam::internal']]],\n ['manifoldtraits_3c_20bearingrange_3c_20a1_2c_20a2_20_3e_20_3e_39', ['ManifoldTraits< BearingRange< A1, A2 > >', ['../a02404.html', 1, 'gtsam::internal']]],\n ['manifoldtraits_3c_20cal3_5fs2_20_3e_40', ['ManifoldTraits< Cal3_S2 >', ['../a02404.html', 1, 'gtsam::internal']]],\n ['manifoldtraits_3c_20cal3_5fs2stereo_20_3e_41', ['ManifoldTraits< Cal3_S2Stereo >', ['../a02404.html', 1, 'gtsam::internal']]],\n ['manifoldtraits_3c_20cal3bundler_20_3e_42', ['ManifoldTraits< Cal3Bundler >', ['../a02404.html', 1, 'gtsam::internal']]],\n ['manifoldtraits_3c_20cal3ds2_20_3e_43', ['ManifoldTraits< Cal3DS2 >', ['../a02404.html', 1, 'gtsam::internal']]],\n ['manifoldtraits_3c_20cal3fisheye_20_3e_44', ['ManifoldTraits< Cal3Fisheye >', ['../a02404.html', 1, 'gtsam::internal']]],\n@@ -104,16 +104,16 @@\n ['../a04452.html#a9d9ffd54551128922a030edd7ba7429e', 1, 'gtsam::Marginals::Marginals(const NonlinearFactorGraph &graph, const Values &solution, const Ordering &ordering, Factorization factorization=CHOLESKY)'],\n ['../a04452.html#a2fbdb20bd50fae670e3e0fef483026a5', 1, 'gtsam::Marginals::Marginals(const GaussianFactorGraph &graph, const Values &solution, Factorization factorization=CHOLESKY)'],\n ['../a04452.html#ac4edd962c1ecd98277a8a51a5cb5f712', 1, 'gtsam::Marginals::Marginals(const GaussianFactorGraph &graph, const Values &solution, const Ordering &ordering, Factorization factorization=CHOLESKY)'],\n ['../a04452.html#ace605e9e351421289bdf3c2bee6c9015', 1, 'gtsam::Marginals::Marginals(const GaussianFactorGraph &graph, const VectorValues &solution, Factorization factorization=CHOLESKY)'],\n ['../a04452.html#abf63e2c6a652fb8763ee04527a9a725d', 1, 'gtsam::Marginals::Marginals(const GaussianFactorGraph &graph, const VectorValues &solution, const Ordering &ordering, Factorization factorization=CHOLESKY)'],\n ['../a04452.html', 1, 'gtsam::Marginals']\n ]],\n- ['marginals_2ecpp_66', ['Marginals.cpp', ['../a01079.html', 1, '']]],\n- ['marginals_2eh_67', ['Marginals.h', ['../a01136.html', 1, '']]],\n+ ['marginals_2ecpp_66', ['Marginals.cpp', ['../a01166.html', 1, '']]],\n+ ['marginals_2eh_67', ['Marginals.h', ['../a01142.html', 1, '']]],\n ['markdown_68', ['markdown', ['../a02808.html#a3ef862bee1c399aab8d66d5d9c156076', 1, 'gtsam::DecisionTreeFactor::markdown()'],\n ['../a02816.html#a44571dfbe163aed600cb48dfabf5ed36', 1, 'gtsam::DiscreteBayesNet::markdown()'],\n ['../a02828.html#a2601dd81db497cde12663182b21e5fa0', 1, 'gtsam::DiscreteBayesTree::markdown()'],\n ['../a02832.html#a8bd5e595f890079222029e2ba13875a0', 1, 'gtsam::DiscreteConditional::markdown()'],\n ['../a02852.html#ae641a4567179a768f365c8fa7587a5bf', 1, 'gtsam::DiscreteFactor::markdown()'],\n ['../a02864.html#ae9c0801eadd7ba74c019155f5b574681', 1, 'gtsam::DiscreteFactorGraph::markdown()'],\n ['../a02900.html#a28245c7f652cdf2f10166a659ec834ee', 1, 'gtsam::DiscreteValues::markdown()'],\n@@ -134,25 +134,25 @@\n ['../a04196.html#ac1d0d44a05b2f1f301cc0de223e9236d', 1, 'gtsam::NavState::matrix()'],\n ['../a03068.html#aed2afb85f3ed40fd981993abd0fee96d', 1, 'gtsam::EssentialMatrix::matrix()'],\n ['../a02752.html#a567c2b9c7e29b6ecd14134d3e91dfd57', 1, 'gtsam::ParameterMatrix::matrix()'],\n ['../a02740.html#af8c2d2aee76bec49c112d77ee950ac36', 1, 'gtsam::Chebyshev2::matrix()'],\n ['../a02660.html#a1637c4ff95b691fce6b0419996d87061', 1, 'gtsam::VerticalBlockMatrix::matrix() const'],\n ['../a02660.html#ac03597c8a0e5bac77719d73745d902ee', 1, 'gtsam::VerticalBlockMatrix::matrix()']\n ]],\n- ['matrix_2ecpp_72', ['Matrix.cpp', ['../a00068.html', 1, '']]],\n- ['matrix_2eh_73', ['Matrix.h', ['../a00020.html', 1, '']]],\n+ ['matrix_2ecpp_72', ['Matrix.cpp', ['../a00071.html', 1, '']]],\n+ ['matrix_2eh_73', ['Matrix.h', ['../a00026.html', 1, '']]],\n ['matrix_5f_74', ['matrix_', ['../a02472.html#a1df0e505b1794511838609da2d5ea712', 1, 'gtsam::SymmetricBlockMatrix::matrix_'],\n ['../a02660.html#aaac69a1919d004647db02fab5b0cb0eb', 1, 'gtsam::VerticalBlockMatrix::matrix_'],\n ['../a03304.html#a441993008fe80073e5db4e85af81a3ea', 1, 'gtsam::SO::matrix_']\n ]],\n ['matrixdd_75', ['MatrixDD', ['../a04912.html#a505e379475ff4d2234d928ebb1898346', 1, 'gtsam::RegularImplicitSchurFactor']]],\n ['matrixobject_76', ['matrixobject', ['../a03844.html#a9b86a19789d41d0f1205674704ace5ab', 1, 'gtsam::JacobianFactor::matrixObject()'],\n ['../a03844.html#ab9e95472e3bb81cd8e6c1cb9ed92b4af', 1, 'gtsam::JacobianFactor::matrixObject() const']\n ]],\n- ['matrixserialization_2eh_77', ['MatrixSerialization.h', ['../a00104.html', 1, '']]],\n+ ['matrixserialization_2eh_77', ['MatrixSerialization.h', ['../a00038.html', 1, '']]],\n ['matrixzd_78', ['matrixzd', ['../a04912.html#a777da647d82c1bcebc2ca98ce22f9e7e', 1, 'gtsam::RegularImplicitSchurFactor::MatrixZD'],\n ['../a03044.html#ad959e3709004c7f7c219bd9b52a18ebd', 1, 'gtsam::CameraSet::MatrixZD']\n ]],\n ['max_79', ['max', ['../a02808.html#a449d2ce18c2b905a5a54694691972d4a', 1, 'gtsam::DecisionTreeFactor::max()'],\n ['../a02516.html#a259f57a09ca2012a5987cabe35514604', 1, 'gtsam::internal::TimingOutline::max()'],\n ['../a02808.html#a4d4b75a2e8c3c736b7e86808a70f649a', 1, 'gtsam::DecisionTreeFactor::max()']\n ]],\n@@ -210,37 +210,37 @@\n ['mergechildren_96', ['mergeChildren', ['../a03568.html#a5a35c15894923c99a38d393657169be0', 1, 'gtsam::ClusterTree::Cluster']]],\n ['mergesimilarfactors_97', ['mergeSimilarFactors', ['../a04368.html#a7be882956fb690537dffee6b657bee1c', 1, 'gtsam::GraphvizFormatting']]],\n ['mergewith_98', ['mergeWith', ['../a04244.html#a47d5b5a9a0695d464b70a1674db3d5f8', 1, 'gtsam::TangentPreintegration']]],\n ['metis_99', ['Metis', ['../a03680.html#abed79593d0128b7dd45b66021b94b1d9', 1, 'gtsam::Ordering']]],\n ['metisindex_100', ['metisindex', ['../a03676.html#a1969389ac1418955a2d2763fe3d49fd6', 1, 'gtsam::MetisIndex::MetisIndex()'],\n ['../a03676.html', 1, 'gtsam::MetisIndex']\n ]],\n- ['metisindex_2dinl_2eh_101', ['MetisIndex-inl.h', ['../a00632.html', 1, '']]],\n- ['metisindex_2eh_102', ['MetisIndex.h', ['../a00617.html', 1, '']]],\n+ ['metisindex_2dinl_2eh_101', ['MetisIndex-inl.h', ['../a00620.html', 1, '']]],\n+ ['metisindex_2eh_102', ['MetisIndex.h', ['../a00674.html', 1, '']]],\n ['mfas_103', ['mfas', ['../a04700.html', 1, 'gtsam::MFAS'],\n ['../a04700.html#a0fbe57d306aa53ff9f9ef6b4dd5f4ca2', 1, 'gtsam::MFAS::MFAS(const std::map< KeyPair, double > &edgeWeights)'],\n ['../a04700.html#ab67e60b4b7da2c9d2dd82a0e6b6e6e15', 1, 'gtsam::MFAS::MFAS(const TranslationEdges &relativeTranslations, const Unit3 &projectionDirection)']\n ]],\n- ['mfas_2ecpp_104', ['MFAS.cpp', ['../a01205.html', 1, '']]],\n- ['mfas_2eh_105', ['MFAS.h', ['../a01193.html', 1, '']]],\n+ ['mfas_2ecpp_104', ['MFAS.cpp', ['../a01226.html', 1, '']]],\n+ ['mfas_2eh_105', ['MFAS.h', ['../a01184.html', 1, '']]],\n ['min_106', ['min', ['../a02516.html#acdeff50555c404cfaed4d9e49722e673', 1, 'gtsam::internal::TimingOutline']]],\n ['mindiagonal_107', ['minDiagonal', ['../a04440.html#a23c5fa1bbf749c1997a7e685f0cc4d49', 1, 'gtsam::LevenbergMarquardtParams']]],\n ['miniterations_5f_108', ['minIterations_', ['../a03728.html#a02664c7fcb805142421484310dafc7a4', 1, 'gtsam::ConjugateGradientParameters']]],\n ['minmodelfidelity_109', ['minModelFidelity', ['../a04440.html#aa6ab26143bf0ebbada2c325a88ca3348', 1, 'gtsam::LevenbergMarquardtParams']]],\n ['mixedprecisions_110', ['MixedPrecisions', ['../a03932.html#ad95c2600f4d8a0cdb07c3aa7924c93c2', 1, 'gtsam::noiseModel::Constrained']]],\n ['mixedsigmas_111', ['mixedsigmas', ['../a03932.html#a5453997b983eb928f23c149bdcc887c4', 1, 'gtsam::noiseModel::Constrained::MixedSigmas(const Vector &mu, const Vector &sigmas)'],\n ['../a03932.html#a6159ebb4fb60e66101cbed270aa247fd', 1, 'gtsam::noiseModel::Constrained::MixedSigmas(const Vector &sigmas)'],\n ['../a03932.html#aacff9425f80e062b0a124d6bab4b3ac5', 1, 'gtsam::noiseModel::Constrained::MixedSigmas(double m, const Vector &sigmas)']\n ]],\n ['mixedvariances_112', ['MixedVariances', ['../a03932.html#a35a5f78f6ceac81b8e0ab2a9e6259093', 1, 'gtsam::noiseModel::Constrained']]],\n ['mixturefactor_113', ['mixturefactor', ['../a03512.html', 1, 'gtsam::MixtureFactor'],\n ['../a03512.html#a208364f49a62d45c5d8c34487231a527', 1, 'gtsam::MixtureFactor::MixtureFactor(const KeyVector &keys, const DiscreteKeys &discreteKeys, const std::vector< boost::shared_ptr< FACTOR > > &factors, bool normalized=false)'],\n ['../a03512.html#a73d8c97975bf9097f52832e36674f491', 1, 'gtsam::MixtureFactor::MixtureFactor(const KeyVector &keys, const DiscreteKeys &discreteKeys, const Factors &factors, bool normalized=false)']\n ]],\n- ['mixturefactor_2eh_114', ['MixtureFactor.h', ['../a00491.html', 1, '']]],\n+ ['mixturefactor_2eh_114', ['MixtureFactor.h', ['../a00554.html', 1, '']]],\n ['model_5f_115', ['model_', ['../a04020.html#a715947053d2c801444799e4ce00e6118', 1, 'gtsam::Sampler']]],\n ['mrsymbol_116', ['mrsymbol', ['../a01428.html#ae9a7dceb0a85c356062b55f6939b1419', 1, 'gtsam']]],\n ['mrsymbolchr_117', ['mrsymbolChr', ['../a01428.html#a37995b0d0610e5fb29c6bd0715151d67', 1, 'gtsam']]],\n ['mrsymbolindex_118', ['mrsymbolIndex', ['../a01428.html#a4adc1bb606fa4a14d5dbd246f95cecd3', 1, 'gtsam']]],\n ['mrsymbollabel_119', ['mrsymbolLabel', ['../a01428.html#a4e4c133c4fd0d9d73593f601be2248a6', 1, 'gtsam']]],\n ['mu_120', ['mu', ['../a03932.html#a85a6a9d9d7f663b22fcba2e6c2c01737', 1, 'gtsam::noiseModel::Constrained']]],\n ['mu_5f_121', ['mu_', ['../a03932.html#ad12d58b8b5c00ba93702bcccf15e6b4b', 1, 'gtsam::noiseModel::Constrained']]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/all_f.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/all_f.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -8,15 +8,15 @@\n ['navigation_4', ['Navigation', ['../a01420.html', 1, '']]],\n ['navstate_5', ['navstate', ['../a04196.html', 1, 'gtsam::NavState'],\n ['../a04196.html#a071b7ef082393fab89cf6d80d19c0cd3', 1, 'gtsam::NavState::NavState()'],\n ['../a04196.html#a54a1a1b9c7946d32ae2aae70edff9d24', 1, 'gtsam::NavState::NavState(const Rot3 &R, const Point3 &t, const Velocity3 &v)'],\n ['../a04196.html#a6b70be99390c6bcd2acf6e4af81c79f6', 1, 'gtsam::NavState::NavState(const Pose3 &pose, const Velocity3 &v)'],\n ['../a04196.html#a34f54d76bde9c673cd9c408adee824b2', 1, 'gtsam::NavState::NavState(const Matrix3 &R, const Vector6 &tv)']\n ]],\n- ['navstate_2eh_6', ['NavState.h', ['../a00944.html', 1, '']]],\n+ ['navstate_2eh_6', ['NavState.h', ['../a00962.html', 1, '']]],\n ['nblocks_7', ['nblocks', ['../a02472.html#acbbb5bd424e0427ef4672b40e31ffa85', 1, 'gtsam::SymmetricBlockMatrix::nBlocks()'],\n ['../a02660.html#aae2077898052464a33b9af7244c82f87', 1, 'gtsam::VerticalBlockMatrix::nBlocks()']\n ]],\n ['needs_5feigen_5faligned_5fallocator_8', ['needs_eigen_aligned_allocator', ['../a02560.html', 1, 'gtsam']]],\n ['needs_5feigen_5faligned_5fallocator_3c_20t_2c_20void_5ft_3c_20typename_20t_3a_3a_5feigen_5faligned_5fallocator_5ftrait_20_3e_20_3e_9', ['needs_eigen_aligned_allocator< T, void_t< typename T::_eigen_aligned_allocator_trait > >', ['../a02564.html', 1, 'gtsam']]],\n ['negate_10', ['negate', ['../a02472.html#a3c0ac82b5094f15eb6627ef1f64906fd', 1, 'gtsam::SymmetricBlockMatrix::negate()'],\n ['../a03780.html#abd7ff975956b56b356d04547250650b7', 1, 'gtsam::GaussianFactor::negate()'],\n@@ -50,16 +50,16 @@\n ['noiseformatcov_28', ['NoiseFormatCOV', ['../a01428.html#a90552b70a2da9c74595cae4b05c2ce18a5450a16f3522214ccdfa23c461e7d05a', 1, 'gtsam']]],\n ['noiseformatg2o_29', ['NoiseFormatG2O', ['../a01428.html#a90552b70a2da9c74595cae4b05c2ce18ad0aaa5c51a45cb7c9151aae60a603209', 1, 'gtsam']]],\n ['noiseformatgraph_30', ['NoiseFormatGRAPH', ['../a01428.html#a90552b70a2da9c74595cae4b05c2ce18a1f8edeb25c58a249789556c686265a4c', 1, 'gtsam']]],\n ['noiseformattoro_31', ['NoiseFormatTORO', ['../a01428.html#a90552b70a2da9c74595cae4b05c2ce18a3790bc2c6f11cd7da84730b33173de5a', 1, 'gtsam']]],\n ['noisemodel_32', ['noisemodel', ['../a03372.html#ab72f327adcb9fce55ab81569c58ec194', 1, 'gtsam::TriangulationParameters::noiseModel'],\n ['../a04504.html#ae995e64bbd0660091eb6b40cba60aef7', 1, 'gtsam::NoiseModelFactor::noiseModel()']\n ]],\n- ['noisemodel_2ecpp_33', ['NoiseModel.cpp', ['../a00731.html', 1, '']]],\n- ['noisemodel_2eh_34', ['NoiseModel.h', ['../a00875.html', 1, '']]],\n+ ['noisemodel_2ecpp_33', ['NoiseModel.cpp', ['../a00773.html', 1, '']]],\n+ ['noisemodel_2eh_34', ['NoiseModel.h', ['../a00827.html', 1, '']]],\n ['noisemodel_5f_35', ['noiseModel_', ['../a04928.html#a39a7aa087ac63512c5cccf828b90b516', 1, 'gtsam::SmartFactorBase']]],\n ['noisemodeldims_36', ['noiseModelDims', ['../a03868.html#af1938d77a9e6086a0ffe9352bac15467', 1, 'gtsam::InvalidNoiseModel']]],\n ['noisemodelfactor_37', ['noisemodelfactor', ['../a04504.html#ad6e8ef3348e042d598617d1d55f20300', 1, 'gtsam::NoiseModelFactor::NoiseModelFactor()'],\n ['../a04504.html#a02cea97db30d27b51feaf1f0444d743c', 1, 'gtsam::NoiseModelFactor::NoiseModelFactor(const SharedNoiseModel &noiseModel, const CONTAINER &keys)'],\n ['../a04504.html#a4605224417029e9dc58c5267efa9a46d', 1, 'gtsam::NoiseModelFactor::NoiseModelFactor(const SharedNoiseModel &noiseModel)'],\n ['../a04504.html', 1, 'gtsam::NoiseModelFactor'],\n ['../a05080.html', 1, 'NoiseModelFactor']\n@@ -113,60 +113,60 @@\n ['../a01421.html', 1, 'Nonlinear']\n ]],\n ['nonlinear_20hybrid_20factor_20graph_80', ['Nonlinear Hybrid Factor Graph', ['../a03488.html#autotoc_md3', 1, '']]],\n ['nonlinearconjugategradient_81', ['nonlinearConjugateGradient', ['../a01428.html#afc19854e0bfc1acadb00ff00a043cc17', 1, 'gtsam']]],\n ['nonlinearconjugategradientoptimizer_82', ['nonlinearconjugategradientoptimizer', ['../a04460.html#afdd9a2c13cf10cd09e1631de75c04c70', 1, 'gtsam::NonlinearConjugateGradientOptimizer::NonlinearConjugateGradientOptimizer()'],\n ['../a04460.html', 1, 'gtsam::NonlinearConjugateGradientOptimizer']\n ]],\n- ['nonlinearconjugategradientoptimizer_2ecpp_83', ['NonlinearConjugateGradientOptimizer.cpp', ['../a01133.html', 1, '']]],\n- ['nonlinearconjugategradientoptimizer_2eh_84', ['NonlinearConjugateGradientOptimizer.h', ['../a01124.html', 1, '']]],\n+ ['nonlinearconjugategradientoptimizer_2ecpp_83', ['NonlinearConjugateGradientOptimizer.cpp', ['../a01034.html', 1, '']]],\n+ ['nonlinearconjugategradientoptimizer_2eh_84', ['NonlinearConjugateGradientOptimizer.h', ['../a01052.html', 1, '']]],\n ['nonlinearequality_85', ['nonlinearequality', ['../a04468.html', 1, 'gtsam::NonlinearEquality< VALUE >'],\n ['../a04468.html#aa6506dd1416b9762ce601e8fc5d2f13e', 1, 'gtsam::NonlinearEquality::NonlinearEquality(Key j, const T &feasible, double error_gain, const CompareFunction &_compare=std::bind(traits< T >::Equals, std::placeholders::_1, std::placeholders::_2, 1e-9))'],\n ['../a04468.html#ad4c12b4ca31c51cdc77d2ed5c1249d6a', 1, 'gtsam::NonlinearEquality::NonlinearEquality(Key j, const T &feasible, const CompareFunction &_compare=std::bind(traits< T >::Equals, std::placeholders::_1, std::placeholders::_2, 1e-9))'],\n ['../a04468.html#a925972afca1aa82cf9efc736ef7a21d4', 1, 'gtsam::NonlinearEquality::NonlinearEquality()']\n ]],\n ['nonlinearequality1_86', ['nonlinearequality1', ['../a04476.html', 1, 'gtsam::NonlinearEquality1< VALUE >'],\n ['../a04476.html#a86774b96d825d51f4946a54341dcef18', 1, 'gtsam::NonlinearEquality1::NonlinearEquality1(const X &value, Key key, double mu=1000.0)'],\n ['../a04476.html#aa331a1cacd4c4c69f2d8386d3f8cd327', 1, 'gtsam::NonlinearEquality1::NonlinearEquality1()']\n ]],\n ['nonlinearequality2_87', ['nonlinearequality2', ['../a04484.html', 1, 'gtsam::NonlinearEquality2< T >'],\n ['../a04484.html#a712bbf54a226defd53f67679ad7f16fe', 1, 'gtsam::NonlinearEquality2::NonlinearEquality2(Key key1, Key key2, double mu=1e4)'],\n ['../a04484.html#ad9f7e774a73917e34dcd0ed7f7df32b0', 1, 'gtsam::NonlinearEquality2::NonlinearEquality2()']\n ]],\n- ['nonlinearexceptions_2eh_88', ['nonlinearExceptions.h', ['../a01070.html', 1, '']]],\n+ ['nonlinearexceptions_2eh_88', ['nonlinearExceptions.h', ['../a01001.html', 1, '']]],\n ['nonlinearfactor_89', ['nonlinearfactor', ['../a04496.html', 1, 'gtsam::NonlinearFactor'],\n ['../a04496.html#a7c719ae67f222f66569ccb3b526cb9cb', 1, 'gtsam::NonlinearFactor::NonlinearFactor()'],\n ['../a04496.html#a8a7610dba7e9a6f878268c2769ea0e04', 1, 'gtsam::NonlinearFactor::NonlinearFactor(const CONTAINER &keys)']\n ]],\n- ['nonlinearfactor_2ecpp_90', ['NonlinearFactor.cpp', ['../a01148.html', 1, '']]],\n- ['nonlinearfactor_2eh_91', ['NonlinearFactor.h', ['../a01097.html', 1, '']]],\n+ ['nonlinearfactor_2ecpp_90', ['NonlinearFactor.cpp', ['../a01079.html', 1, '']]],\n+ ['nonlinearfactor_2eh_91', ['NonlinearFactor.h', ['../a01025.html', 1, '']]],\n ['nonlinearfactorgraph_92', ['nonlinearfactorgraph', ['../a04540.html', 1, 'gtsam::NonlinearFactorGraph'],\n ['../a04540.html#a08a2bceb4013a4ffe20c27f76aae7a96', 1, 'gtsam::NonlinearFactorGraph::NonlinearFactorGraph()'],\n ['../a04540.html#ab1ca065994632164fe3986388d847604', 1, 'gtsam::NonlinearFactorGraph::NonlinearFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)'],\n ['../a04540.html#a955686c166a967d8fc4884d65cd4ce56', 1, 'gtsam::NonlinearFactorGraph::NonlinearFactorGraph(const CONTAINER &factors)'],\n ['../a04540.html#acd147df7d707f0486daf2b9936b08d71', 1, 'gtsam::NonlinearFactorGraph::NonlinearFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)']\n ]],\n- ['nonlinearfactorgraph_2ecpp_93', ['NonlinearFactorGraph.cpp', ['../a01115.html', 1, '']]],\n- ['nonlinearfactorgraph_2eh_94', ['NonlinearFactorGraph.h', ['../a01154.html', 1, '']]],\n+ ['nonlinearfactorgraph_2ecpp_93', ['NonlinearFactorGraph.cpp', ['../a01157.html', 1, '']]],\n+ ['nonlinearfactorgraph_2eh_94', ['NonlinearFactorGraph.h', ['../a01085.html', 1, '']]],\n ['nonlinearfactorlognormalizingconstant_95', ['nonlinearFactorLogNormalizingConstant', ['../a03512.html#a9cbfaca92f9b62d426709df5c6ed6b72', 1, 'gtsam::MixtureFactor']]],\n ['nonlinearfactors_5f_96', ['nonlinearFactors_', ['../a04396.html#a9307a6fb614f33fb354e4e445467c258', 1, 'gtsam::ISAM2']]],\n ['nonlineargraph_97', ['NonlinearGraph', ['../a02744.html#a9442ab6aec5ec45fb14d4b3eaeeb3a85', 1, 'gtsam::FitBasis']]],\n ['nonlinearisam_98', ['nonlinearisam', ['../a04548.html', 1, 'gtsam::NonlinearISAM'],\n ['../a04548.html#acce79d0a1cb22a2874f3b15c3a2bf0bc', 1, 'gtsam::NonlinearISAM::NonlinearISAM()']\n ]],\n ['nonlinearisam_2ecpp_99', ['NonlinearISAM.cpp', ['../a01112.html', 1, '']]],\n- ['nonlinearisam_2eh_100', ['NonlinearISAM.h', ['../a01166.html', 1, '']]],\n+ ['nonlinearisam_2eh_100', ['NonlinearISAM.h', ['../a01061.html', 1, '']]],\n ['nonlinearoptimizer_101', ['nonlinearoptimizer', ['../a04552.html#ac6b7a069a596fda982cc4aa1ddc79324', 1, 'gtsam::NonlinearOptimizer::NonlinearOptimizer()'],\n ['../a04552.html', 1, 'gtsam::NonlinearOptimizer']\n ]],\n- ['nonlinearoptimizer_2ecpp_102', ['NonlinearOptimizer.cpp', ['../a01034.html', 1, '']]],\n- ['nonlinearoptimizer_2eh_103', ['NonlinearOptimizer.h', ['../a01094.html', 1, '']]],\n+ ['nonlinearoptimizer_2ecpp_102', ['NonlinearOptimizer.cpp', ['../a01163.html', 1, '']]],\n+ ['nonlinearoptimizer_2eh_103', ['NonlinearOptimizer.h', ['../a01121.html', 1, '']]],\n ['nonlinearoptimizerparams_104', ['NonlinearOptimizerParams', ['../a04556.html', 1, 'gtsam']]],\n- ['nonlinearoptimizerparams_2ecpp_105', ['NonlinearOptimizerParams.cpp', ['../a01049.html', 1, '']]],\n- ['nonlinearoptimizerparams_2eh_106', ['NonlinearOptimizerParams.h', ['../a01076.html', 1, '']]],\n+ ['nonlinearoptimizerparams_2ecpp_105', ['NonlinearOptimizerParams.cpp', ['../a01130.html', 1, '']]],\n+ ['nonlinearoptimizerparams_2eh_106', ['NonlinearOptimizerParams.h', ['../a01073.html', 1, '']]],\n ['nonuniquekeys_107', ['nonUniqueKeys', ['../a04952.html#ac998a65e4c8367394f29ffcd3c57adfb', 1, 'gtsam::SmartProjectionRigFactor']]],\n ['nonuniquekeys_5f_108', ['nonUniqueKeys_', ['../a04952.html#a13e13b96ec157a140ec5af90d35c15f5', 1, 'gtsam::SmartProjectionRigFactor']]],\n ['norelinkeys_109', ['noRelinKeys', ['../a04432.html#adee5e549912cce0c412f2476bb12c389', 1, 'gtsam::ISAM2UpdateParams']]],\n ['norm_110', ['norm', ['../a04064.html#a0072434018bc5d3e06fdc15b2603b9c6', 1, 'gtsam::VectorValues']]],\n ['norm2_111', ['norm2', ['../a01428.html#afee4e6aa4aba9b6a6b421ddd75b52dfc', 1, 'gtsam']]],\n ['norm3_112', ['norm3', ['../a01428.html#ac37b6f807985ffd25217e33f6136fe58', 1, 'gtsam']]],\n ['normal_113', ['normal', ['../a03092.html#afacf342cae258837631c47c43157c592', 1, 'gtsam::OrientedPlane3']]],\n@@ -195,15 +195,15 @@\n ['../a04712.html#acd57c58676a3b7d65e8cd76d9af87886', 1, 'gtsam::SfmTrack2d::numberMeasurements()']\n ]],\n ['numbertracks_134', ['numberTracks', ['../a04704.html#a43c98621154cdb9484c36d4f98b4b7ab', 1, 'gtsam::SfmData']]],\n ['numcachedseparatormarginals_135', ['numcachedseparatormarginals', ['../a03552.html#ad7f63b089fd6def94816a0d737622b4b', 1, 'gtsam::BayesTreeCliqueBase::numCachedSeparatorMarginals()'],\n ['../a03540.html#ad40916eaa9d8c47ba5cc21b6f17601d7', 1, 'gtsam::BayesTree::numCachedSeparatorMarginals()']\n ]],\n ['numcols_136', ['numCols', ['../a03840.html#aa7d0169c6f78e236980fa6d60733fb73', 1, 'gtsam::KeyInfo']]],\n- ['numericalderivative_2eh_137', ['numericalDerivative.h', ['../a00143.html', 1, '']]],\n+ ['numericalderivative_2eh_137', ['numericalDerivative.h', ['../a00074.html', 1, '']]],\n ['numericalderivative11_138', ['numericalderivative11', ['../a01428.html#a581a9f8db043590096fbac682b8f6a93', 1, 'gtsam::numericalDerivative11(std::function< Y(const X &)> h, const X &x, double delta=1e-5)'],\n ['../a01428.html#a4c4c5744f0b348d4ec6c047f796e7924', 1, 'gtsam::numericalDerivative11(Y(*h)(const X &), const X &x, double delta=1e-5)']\n ]],\n ['numericalderivative21_139', ['numericalderivative21', ['../a01428.html#a157eb3b44dd4e38bbd66f3cc68a20e43', 1, 'gtsam::numericalDerivative21(const std::function< Y(const X1 &, const X2 &)> &h, const X1 &x1, const X2 &x2, double delta=1e-5)'],\n ['../a01428.html#afcc94e3b49906e824c01a3d56df62d33', 1, 'gtsam::numericalDerivative21(Y(*h)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)']\n ]],\n ['numericalderivative22_140', ['numericalderivative22', ['../a01428.html#a46d002a0529f1172aebb7e1d85d5c08c', 1, 'gtsam::numericalDerivative22(Y(*h)(const X1 &, const X2 &), const X1 &x1, const X2 &x2, double delta=1e-5)'],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/defines_0.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/defines_0.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var searchData = [\n- ['assert_5fthrow_0', ['assert_throw', ['../a00047.html#a30d3af2da1ea940197addce4f3c223c8', 1, 'types.h']]]\n+ ['assert_5fthrow_0', ['assert_throw', ['../a00020.html#a30d3af2da1ea940197addce4f3c223c8', 1, 'types.h']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/defines_1.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/defines_1.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var searchData = [\n- ['expect_5fcorrect_5fexpression_5fjacobians_0', ['EXPECT_CORRECT_EXPRESSION_JACOBIANS', ['../a01142.html#a701d0cd12b81a725f7f9cd2432fe9e2a', 1, 'expressionTesting.h']]],\n- ['expect_5fcorrect_5ffactor_5fjacobians_1', ['EXPECT_CORRECT_FACTOR_JACOBIANS', ['../a01121.html#a8ec37fe83eda47404b8588e1f012df21', 1, 'factorTesting.h']]]\n+ ['expect_5fcorrect_5fexpression_5fjacobians_0', ['EXPECT_CORRECT_EXPRESSION_JACOBIANS', ['../a01100.html#a701d0cd12b81a725f7f9cd2432fe9e2a', 1, 'expressionTesting.h']]],\n+ ['expect_5fcorrect_5ffactor_5fjacobians_1', ['EXPECT_CORRECT_FACTOR_JACOBIANS', ['../a01091.html#a8ec37fe83eda47404b8588e1f012df21', 1, 'factorTesting.h']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/defines_2.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/defines_2.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,9 +1,9 @@\n var searchData = [\n- ['gtsam_5fconcept_5fgroup_5finst_0', ['GTSAM_CONCEPT_GROUP_INST', ['../a00065.html#aac1ea136475ea605715c809f4b3f0156', 1, 'Group.h']]],\n- ['gtsam_5fconcept_5flie_5finst_1', ['GTSAM_CONCEPT_LIE_INST', ['../a00074.html#aeef5af7d583d275fbc0e6e5af8bf2afc', 1, 'Lie.h']]],\n- ['gtsam_5fconcept_5fmanifold_5finst_2', ['GTSAM_CONCEPT_MANIFOLD_INST', ['../a00002.html#a64b5e2e3c812d2cdea5ee294100f825f', 1, 'Manifold.h']]],\n+ ['gtsam_5fconcept_5fgroup_5finst_0', ['GTSAM_CONCEPT_GROUP_INST', ['../a00056.html#aac1ea136475ea605715c809f4b3f0156', 1, 'Group.h']]],\n+ ['gtsam_5fconcept_5flie_5finst_1', ['GTSAM_CONCEPT_LIE_INST', ['../a00005.html#aeef5af7d583d275fbc0e6e5af8bf2afc', 1, 'Lie.h']]],\n+ ['gtsam_5fconcept_5fmanifold_5finst_2', ['GTSAM_CONCEPT_MANIFOLD_INST', ['../a00044.html#a64b5e2e3c812d2cdea5ee294100f825f', 1, 'Manifold.h']]],\n ['gtsam_5fconcept_5fpose_5finst_3', ['GTSAM_CONCEPT_POSE_INST', ['../a08128.html#a1ac1dbb1c81293b35cbab7722ac657ac', 1, 'concepts.h']]],\n- ['gtsam_5fconcept_5ftestable_5finst_4', ['GTSAM_CONCEPT_TESTABLE_INST', ['../a00080.html#abe0a238cdd07d484ff0be56ae945b182', 1, 'Testable.h']]],\n- ['gtsam_5fmake_5faligned_5foperator_5fnew_5', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW', ['../a00047.html#aa123dd61687e08ae328154a1890b7b86', 1, 'types.h']]],\n- ['gtsam_5fmake_5faligned_5foperator_5fnew_5fif_6', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF', ['../a00047.html#a352ab46cee3a766e30b049690802fb0a', 1, 'types.h']]]\n+ ['gtsam_5fconcept_5ftestable_5finst_4', ['GTSAM_CONCEPT_TESTABLE_INST', ['../a00110.html#abe0a238cdd07d484ff0be56ae945b182', 1, 'Testable.h']]],\n+ ['gtsam_5fmake_5faligned_5foperator_5fnew_5', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW', ['../a00020.html#aa123dd61687e08ae328154a1890b7b86', 1, 'types.h']]],\n+ ['gtsam_5fmake_5faligned_5foperator_5fnew_5fif_6', ['GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF', ['../a00020.html#a352ab46cee3a766e30b049690802fb0a', 1, 'types.h']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_0.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_0.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,11 @@\n var searchData = [\n- ['acceleratedpowermethod_2eh_0', ['AcceleratedPowerMethod.h', ['../a00890.html', 1, '']]],\n- ['ahrsfactor_2ecpp_1', ['AHRSFactor.cpp', ['../a00965.html', 1, '']]],\n- ['ahrsfactor_2eh_2', ['AHRSFactor.h', ['../a00950.html', 1, '']]],\n- ['algebraicdecisiontree_2ecpp_3', ['AlgebraicDecisionTree.cpp', ['../a00194.html', 1, '']]],\n- ['algebraicdecisiontree_2eh_4', ['AlgebraicDecisionTree.h', ['../a00224.html', 1, '']]],\n- ['antifactor_2eh_5', ['AntiFactor.h', ['../a01337.html', 1, '']]],\n- ['assignment_2eh_6', ['Assignment.h', ['../a00218.html', 1, '']]],\n+ ['acceleratedpowermethod_2eh_0', ['AcceleratedPowerMethod.h', ['../a00794.html', 1, '']]],\n+ ['ahrsfactor_2ecpp_1', ['AHRSFactor.cpp', ['../a00998.html', 1, '']]],\n+ ['ahrsfactor_2eh_2', ['AHRSFactor.h', ['../a00986.html', 1, '']]],\n+ ['algebraicdecisiontree_2ecpp_3', ['AlgebraicDecisionTree.cpp', ['../a00263.html', 1, '']]],\n+ ['algebraicdecisiontree_2eh_4', ['AlgebraicDecisionTree.h', ['../a00233.html', 1, '']]],\n+ ['antifactor_2eh_5', ['AntiFactor.h', ['../a01274.html', 1, '']]],\n+ ['assignment_2eh_6', ['Assignment.h', ['../a00248.html', 1, '']]],\n ['attitudefactor_2ecpp_7', ['AttitudeFactor.cpp', ['../a00932.html', 1, '']]],\n- ['attitudefactor_2eh_8', ['AttitudeFactor.h', ['../a00902.html', 1, '']]]\n+ ['attitudefactor_2eh_8', ['AttitudeFactor.h', ['../a00944.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_1.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_1.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,19 +1,19 @@\n var searchData = [\n- ['barometricfactor_2ecpp_0', ['BarometricFactor.cpp', ['../a00974.html', 1, '']]],\n- ['barometricfactor_2eh_1', ['BarometricFactor.h', ['../a00947.html', 1, '']]],\n- ['basis_2eh_2', ['Basis.h', ['../a00158.html', 1, '']]],\n- ['basisfactors_2eh_3', ['BasisFactors.h', ['../a00176.html', 1, '']]],\n- ['bayesnet_2eh_4', ['BayesNet.h', ['../a00689.html', 1, '']]],\n- ['bayestree_2dinst_2eh_5', ['BayesTree-inst.h', ['../a00659.html', 1, '']]],\n- ['bayestree_2ecpp_6', ['BayesTree.cpp', ['../a00653.html', 1, '']]],\n- ['bayestree_2eh_7', ['BayesTree.h', ['../a00695.html', 1, '']]],\n+ ['barometricfactor_2ecpp_0', ['BarometricFactor.cpp', ['../a00941.html', 1, '']]],\n+ ['barometricfactor_2eh_1', ['BarometricFactor.h', ['../a00992.html', 1, '']]],\n+ ['basis_2eh_2', ['Basis.h', ['../a00176.html', 1, '']]],\n+ ['basisfactors_2eh_3', ['BasisFactors.h', ['../a00170.html', 1, '']]],\n+ ['bayesnet_2eh_4', ['BayesNet.h', ['../a00614.html', 1, '']]],\n+ ['bayestree_2dinst_2eh_5', ['BayesTree-inst.h', ['../a00698.html', 1, '']]],\n+ ['bayestree_2ecpp_6', ['BayesTree.cpp', ['../a00632.html', 1, '']]],\n+ ['bayestree_2eh_7', ['BayesTree.h', ['../a00593.html', 1, '']]],\n ['bayestreecliquebase_2dinst_2eh_8', ['BayesTreeCliqueBase-inst.h', ['../a00578.html', 1, '']]],\n- ['bayestreecliquebase_2eh_9', ['BayesTreeCliqueBase.h', ['../a00602.html', 1, '']]],\n+ ['bayestreecliquebase_2eh_9', ['BayesTreeCliqueBase.h', ['../a00662.html', 1, '']]],\n ['bearingfactor_2eh_10', ['BearingFactor.h', ['../a08158.html', 1, '']]],\n- ['bearingrange_2eh_11', ['BearingRange.h', ['../a00281.html', 1, '']]],\n+ ['bearingrange_2eh_11', ['BearingRange.h', ['../a00350.html', 1, '']]],\n ['bearingrangefactor_2eh_12', ['BearingRangeFactor.h', ['../a08164.html', 1, '']]],\n- ['betweenfactor_2eh_13', ['BetweenFactor.h', ['../a01319.html', 1, '']]],\n- ['binaryjacobianfactor_2eh_14', ['BinaryJacobianFactor.h', ['../a00785.html', 1, '']]],\n- ['binarymeasurement_2eh_15', ['BinaryMeasurement.h', ['../a01184.html', 1, '']]],\n- ['boundingconstraint_2eh_16', ['BoundingConstraint.h', ['../a01334.html', 1, '']]]\n+ ['betweenfactor_2eh_13', ['BetweenFactor.h', ['../a01322.html', 1, '']]],\n+ ['binaryjacobianfactor_2eh_14', ['BinaryJacobianFactor.h', ['../a00722.html', 1, '']]],\n+ ['binarymeasurement_2eh_15', ['BinaryMeasurement.h', ['../a01229.html', 1, '']]],\n+ ['boundingconstraint_2eh_16', ['BoundingConstraint.h', ['../a01331.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_10.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_10.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,3 +1,3 @@\n var searchData = [\n- ['quaternion_2eh_0', ['Quaternion.h', ['../a00401.html', 1, '']]]\n+ ['quaternion_2eh_0', ['Quaternion.h', ['../a00458.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_11.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_11.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,12 +1,12 @@\n var searchData = [\n ['rangefactor_2eh_0', ['RangeFactor.h', ['../a08170.html', 1, '']]],\n- ['regularhessianfactor_2eh_1', ['RegularHessianFactor.h', ['../a00710.html', 1, '']]],\n- ['regularimplicitschurfactor_2eh_2', ['RegularImplicitSchurFactor.h', ['../a01286.html', 1, '']]],\n- ['regularjacobianfactor_2eh_3', ['RegularJacobianFactor.h', ['../a00773.html', 1, '']]],\n- ['rot2_2ecpp_4', ['Rot2.cpp', ['../a00422.html', 1, '']]],\n- ['rot2_2eh_5', ['Rot2.h', ['../a00395.html', 1, '']]],\n- ['rot3_2ecpp_6', ['Rot3.cpp', ['../a00449.html', 1, '']]],\n- ['rot3_2eh_7', ['Rot3.h', ['../a00332.html', 1, '']]],\n- ['rot3m_2ecpp_8', ['Rot3M.cpp', ['../a00341.html', 1, '']]],\n- ['rot3q_2ecpp_9', ['Rot3Q.cpp', ['../a00302.html', 1, '']]]\n+ ['regularhessianfactor_2eh_1', ['RegularHessianFactor.h', ['../a00866.html', 1, '']]],\n+ ['regularimplicitschurfactor_2eh_2', ['RegularImplicitSchurFactor.h', ['../a01328.html', 1, '']]],\n+ ['regularjacobianfactor_2eh_3', ['RegularJacobianFactor.h', ['../a00743.html', 1, '']]],\n+ ['rot2_2ecpp_4', ['Rot2.cpp', ['../a00344.html', 1, '']]],\n+ ['rot2_2eh_5', ['Rot2.h', ['../a00413.html', 1, '']]],\n+ ['rot3_2ecpp_6', ['Rot3.cpp', ['../a00347.html', 1, '']]],\n+ ['rot3_2eh_7', ['Rot3.h', ['../a00287.html', 1, '']]],\n+ ['rot3m_2ecpp_8', ['Rot3M.cpp', ['../a00299.html', 1, '']]],\n+ ['rot3q_2ecpp_9', ['Rot3Q.cpp', ['../a00380.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_12.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_12.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,72 +1,72 @@\n var searchData = [\n- ['sampler_2ecpp_0', ['Sampler.cpp', ['../a00782.html', 1, '']]],\n- ['sampler_2eh_1', ['Sampler.h', ['../a00758.html', 1, '']]],\n- ['scatter_2ecpp_2', ['Scatter.cpp', ['../a00764.html', 1, '']]],\n- ['scatter_2eh_3', ['Scatter.h', ['../a00791.html', 1, '']]],\n- ['scenario_2eh_4', ['Scenario.h', ['../a00971.html', 1, '']]],\n- ['scenariorunner_2eh_5', ['ScenarioRunner.h', ['../a00995.html', 1, '']]],\n- ['serialization_2eh_6', ['serialization.h', ['../a00092.html', 1, '']]],\n- ['serializationtesthelpers_2eh_7', ['serializationTestHelpers.h', ['../a00134.html', 1, '']]],\n- ['sfmdata_2ecpp_8', ['SfmData.cpp', ['../a01220.html', 1, '']]],\n- ['sfmdata_2eh_9', ['SfmData.h', ['../a01199.html', 1, '']]],\n+ ['sampler_2ecpp_0', ['Sampler.cpp', ['../a00704.html', 1, '']]],\n+ ['sampler_2eh_1', ['Sampler.h', ['../a00707.html', 1, '']]],\n+ ['scatter_2ecpp_2', ['Scatter.cpp', ['../a00806.html', 1, '']]],\n+ ['scatter_2eh_3', ['Scatter.h', ['../a00779.html', 1, '']]],\n+ ['scenario_2eh_4', ['Scenario.h', ['../a00914.html', 1, '']]],\n+ ['scenariorunner_2eh_5', ['ScenarioRunner.h', ['../a00938.html', 1, '']]],\n+ ['serialization_2eh_6', ['serialization.h', ['../a00062.html', 1, '']]],\n+ ['serializationtesthelpers_2eh_7', ['serializationTestHelpers.h', ['../a00149.html', 1, '']]],\n+ ['sfmdata_2ecpp_8', ['SfmData.cpp', ['../a01211.html', 1, '']]],\n+ ['sfmdata_2eh_9', ['SfmData.h', ['../a01202.html', 1, '']]],\n ['sfmtrack_2ecpp_10', ['SfmTrack.cpp', ['../a01217.html', 1, '']]],\n- ['sfmtrack_2eh_11', ['SfmTrack.h', ['../a01226.html', 1, '']]],\n- ['shonanaveraging_2ecpp_12', ['ShonanAveraging.cpp', ['../a01208.html', 1, '']]],\n- ['shonanaveraging_2eh_13', ['ShonanAveraging.h', ['../a01196.html', 1, '']]],\n- ['shonanfactor_2eh_14', ['ShonanFactor.h', ['../a01187.html', 1, '']]],\n- ['shonangaugefactor_2eh_15', ['ShonanGaugeFactor.h', ['../a01214.html', 1, '']]],\n- ['signature_2ecpp_16', ['Signature.cpp', ['../a00182.html', 1, '']]],\n- ['signature_2eh_17', ['Signature.h', ['../a00248.html', 1, '']]],\n- ['similarity2_2ecpp_18', ['Similarity2.cpp', ['../a00386.html', 1, '']]],\n- ['similarity2_2eh_19', ['Similarity2.h', ['../a00461.html', 1, '']]],\n- ['similarity3_2ecpp_20', ['Similarity3.cpp', ['../a00311.html', 1, '']]],\n- ['similarity3_2eh_21', ['Similarity3.h', ['../a00329.html', 1, '']]],\n- ['simplecamera_2ecpp_22', ['SimpleCamera.cpp', ['../a00365.html', 1, '']]],\n- ['simplecamera_2eh_23', ['SimpleCamera.h', ['../a00425.html', 1, '']]],\n- ['smartfactorbase_2eh_24', ['SmartFactorBase.h', ['../a01316.html', 1, '']]],\n- ['smartfactorparams_2eh_25', ['SmartFactorParams.h', ['../a01298.html', 1, '']]],\n- ['smartprojectionfactor_2eh_26', ['SmartProjectionFactor.h', ['../a01331.html', 1, '']]],\n- ['smartprojectionposefactor_2eh_27', ['SmartProjectionPoseFactor.h', ['../a01277.html', 1, '']]],\n- ['smartprojectionrigfactor_2eh_28', ['SmartProjectionRigFactor.h', ['../a01307.html', 1, '']]],\n- ['so3_2ecpp_29', ['SO3.cpp', ['../a00434.html', 1, '']]],\n- ['so3_2eh_30', ['SO3.h', ['../a00470.html', 1, '']]],\n+ ['sfmtrack_2eh_11', ['SfmTrack.h', ['../a01214.html', 1, '']]],\n+ ['shonanaveraging_2ecpp_12', ['ShonanAveraging.cpp', ['../a01232.html', 1, '']]],\n+ ['shonanaveraging_2eh_13', ['ShonanAveraging.h', ['../a01187.html', 1, '']]],\n+ ['shonanfactor_2eh_14', ['ShonanFactor.h', ['../a01208.html', 1, '']]],\n+ ['shonangaugefactor_2eh_15', ['ShonanGaugeFactor.h', ['../a01190.html', 1, '']]],\n+ ['signature_2ecpp_16', ['Signature.cpp', ['../a00209.html', 1, '']]],\n+ ['signature_2eh_17', ['Signature.h', ['../a00191.html', 1, '']]],\n+ ['similarity2_2ecpp_18', ['Similarity2.cpp', ['../a00473.html', 1, '']]],\n+ ['similarity2_2eh_19', ['Similarity2.h', ['../a00455.html', 1, '']]],\n+ ['similarity3_2ecpp_20', ['Similarity3.cpp', ['../a00338.html', 1, '']]],\n+ ['similarity3_2eh_21', ['Similarity3.h', ['../a00314.html', 1, '']]],\n+ ['simplecamera_2ecpp_22', ['SimpleCamera.cpp', ['../a00410.html', 1, '']]],\n+ ['simplecamera_2eh_23', ['SimpleCamera.h', ['../a00293.html', 1, '']]],\n+ ['smartfactorbase_2eh_24', ['SmartFactorBase.h', ['../a01241.html', 1, '']]],\n+ ['smartfactorparams_2eh_25', ['SmartFactorParams.h', ['../a01295.html', 1, '']]],\n+ ['smartprojectionfactor_2eh_26', ['SmartProjectionFactor.h', ['../a01271.html', 1, '']]],\n+ ['smartprojectionposefactor_2eh_27', ['SmartProjectionPoseFactor.h', ['../a01289.html', 1, '']]],\n+ ['smartprojectionrigfactor_2eh_28', ['SmartProjectionRigFactor.h', ['../a01292.html', 1, '']]],\n+ ['so3_2ecpp_29', ['SO3.cpp', ['../a00425.html', 1, '']]],\n+ ['so3_2eh_30', ['SO3.h', ['../a00461.html', 1, '']]],\n ['so4_2ecpp_31', ['SO4.cpp', ['../a00305.html', 1, '']]],\n- ['so4_2eh_32', ['SO4.h', ['../a00455.html', 1, '']]],\n- ['son_2dinl_2eh_33', ['SOn-inl.h', ['../a00290.html', 1, '']]],\n- ['son_2ecpp_34', ['SOn.cpp', ['../a00353.html', 1, '']]],\n- ['son_2eh_35', ['SOn.h', ['../a00344.html', 1, '']]],\n- ['sparseeigen_2eh_36', ['SparseEigen.h', ['../a00824.html', 1, '']]],\n- ['sphericalcamera_2eh_37', ['SphericalCamera.h', ['../a00392.html', 1, '']]],\n- ['stereocamera_2eh_38', ['StereoCamera.h', ['../a00308.html', 1, '']]],\n- ['stereofactor_2eh_39', ['StereoFactor.h', ['../a01250.html', 1, '']]],\n- ['stereopoint2_2ecpp_40', ['StereoPoint2.cpp', ['../a00440.html', 1, '']]],\n- ['stereopoint2_2eh_41', ['StereoPoint2.h', ['../a00479.html', 1, '']]],\n- ['subgraphbuilder_2ecpp_42', ['SubgraphBuilder.cpp', ['../a00893.html', 1, '']]],\n- ['subgraphbuilder_2eh_43', ['SubgraphBuilder.h', ['../a00770.html', 1, '']]],\n- ['subgraphpreconditioner_2ecpp_44', ['SubgraphPreconditioner.cpp', ['../a00809.html', 1, '']]],\n- ['subgraphpreconditioner_2eh_45', ['SubgraphPreconditioner.h', ['../a00752.html', 1, '']]],\n- ['subgraphsolver_2ecpp_46', ['SubgraphSolver.cpp', ['../a00884.html', 1, '']]],\n- ['subgraphsolver_2eh_47', ['SubgraphSolver.h', ['../a00806.html', 1, '']]],\n- ['symbol_2ecpp_48', ['Symbol.cpp', ['../a00590.html', 1, '']]],\n+ ['so4_2eh_32', ['SO4.h', ['../a00374.html', 1, '']]],\n+ ['son_2dinl_2eh_33', ['SOn-inl.h', ['../a00449.html', 1, '']]],\n+ ['son_2ecpp_34', ['SOn.cpp', ['../a00440.html', 1, '']]],\n+ ['son_2eh_35', ['SOn.h', ['../a00389.html', 1, '']]],\n+ ['sparseeigen_2eh_36', ['SparseEigen.h', ['../a00725.html', 1, '']]],\n+ ['sphericalcamera_2eh_37', ['SphericalCamera.h', ['../a00416.html', 1, '']]],\n+ ['stereocamera_2eh_38', ['StereoCamera.h', ['../a00341.html', 1, '']]],\n+ ['stereofactor_2eh_39', ['StereoFactor.h', ['../a01316.html', 1, '']]],\n+ ['stereopoint2_2ecpp_40', ['StereoPoint2.cpp', ['../a00392.html', 1, '']]],\n+ ['stereopoint2_2eh_41', ['StereoPoint2.h', ['../a00422.html', 1, '']]],\n+ ['subgraphbuilder_2ecpp_42', ['SubgraphBuilder.cpp', ['../a00749.html', 1, '']]],\n+ ['subgraphbuilder_2eh_43', ['SubgraphBuilder.h', ['../a00830.html', 1, '']]],\n+ ['subgraphpreconditioner_2ecpp_44', ['SubgraphPreconditioner.cpp', ['../a00836.html', 1, '']]],\n+ ['subgraphpreconditioner_2eh_45', ['SubgraphPreconditioner.h', ['../a00842.html', 1, '']]],\n+ ['subgraphsolver_2ecpp_46', ['SubgraphSolver.cpp', ['../a00851.html', 1, '']]],\n+ ['subgraphsolver_2eh_47', ['SubgraphSolver.h', ['../a00710.html', 1, '']]],\n+ ['symbol_2ecpp_48', ['Symbol.cpp', ['../a00671.html', 1, '']]],\n ['symbol_2eh_49', ['symbol.h', ['../a08140.html', 1, '(Global Namespace)'],\n ['../a08137.html', 1, '(Global Namespace)']\n ]],\n- ['symbolicbayesnet_2ecpp_50', ['SymbolicBayesNet.cpp', ['../a01391.html', 1, '']]],\n- ['symbolicbayesnet_2eh_51', ['SymbolicBayesNet.h', ['../a01382.html', 1, '']]],\n- ['symbolicbayestree_2eh_52', ['SymbolicBayesTree.h', ['../a01346.html', 1, '']]],\n- ['symbolicconditional_2ecpp_53', ['SymbolicConditional.cpp', ['../a01358.html', 1, '']]],\n- ['symbolicconditional_2eh_54', ['SymbolicConditional.h', ['../a01367.html', 1, '']]],\n- ['symboliceliminationtree_2ecpp_55', ['SymbolicEliminationTree.cpp', ['../a01388.html', 1, '']]],\n- ['symboliceliminationtree_2eh_56', ['SymbolicEliminationTree.h', ['../a01349.html', 1, '']]],\n- ['symbolicfactor_2dinst_2eh_57', ['SymbolicFactor-inst.h', ['../a01376.html', 1, '']]],\n- ['symbolicfactor_2ecpp_58', ['SymbolicFactor.cpp', ['../a01355.html', 1, '']]],\n- ['symbolicfactor_2eh_59', ['SymbolicFactor.h', ['../a01370.html', 1, '']]],\n- ['symbolicfactorgraph_2ecpp_60', ['SymbolicFactorGraph.cpp', ['../a01352.html', 1, '']]],\n- ['symbolicfactorgraph_2eh_61', ['SymbolicFactorGraph.h', ['../a01385.html', 1, '']]],\n- ['symbolicisam_2ecpp_62', ['SymbolicISAM.cpp', ['../a01379.html', 1, '']]],\n- ['symbolicisam_2eh_63', ['SymbolicISAM.h', ['../a01361.html', 1, '']]],\n- ['symbolicjunctiontree_2ecpp_64', ['SymbolicJunctionTree.cpp', ['../a01373.html', 1, '']]],\n- ['symbolicjunctiontree_2eh_65', ['SymbolicJunctionTree.h', ['../a01343.html', 1, '']]],\n- ['symmetricblockmatrix_2ecpp_66', ['SymmetricBlockMatrix.cpp', ['../a00107.html', 1, '']]],\n- ['symmetricblockmatrix_2eh_67', ['SymmetricBlockMatrix.h', ['../a00041.html', 1, '']]]\n+ ['symbolicbayesnet_2ecpp_50', ['SymbolicBayesNet.cpp', ['../a01385.html', 1, '']]],\n+ ['symbolicbayesnet_2eh_51', ['SymbolicBayesNet.h', ['../a01373.html', 1, '']]],\n+ ['symbolicbayestree_2eh_52', ['SymbolicBayesTree.h', ['../a01364.html', 1, '']]],\n+ ['symbolicconditional_2ecpp_53', ['SymbolicConditional.cpp', ['../a01355.html', 1, '']]],\n+ ['symbolicconditional_2eh_54', ['SymbolicConditional.h', ['../a01370.html', 1, '']]],\n+ ['symboliceliminationtree_2ecpp_55', ['SymbolicEliminationTree.cpp', ['../a01349.html', 1, '']]],\n+ ['symboliceliminationtree_2eh_56', ['SymbolicEliminationTree.h', ['../a01388.html', 1, '']]],\n+ ['symbolicfactor_2dinst_2eh_57', ['SymbolicFactor-inst.h', ['../a01361.html', 1, '']]],\n+ ['symbolicfactor_2ecpp_58', ['SymbolicFactor.cpp', ['../a01376.html', 1, '']]],\n+ ['symbolicfactor_2eh_59', ['SymbolicFactor.h', ['../a01379.html', 1, '']]],\n+ ['symbolicfactorgraph_2ecpp_60', ['SymbolicFactorGraph.cpp', ['../a01343.html', 1, '']]],\n+ ['symbolicfactorgraph_2eh_61', ['SymbolicFactorGraph.h', ['../a01367.html', 1, '']]],\n+ ['symbolicisam_2ecpp_62', ['SymbolicISAM.cpp', ['../a01346.html', 1, '']]],\n+ ['symbolicisam_2eh_63', ['SymbolicISAM.h', ['../a01358.html', 1, '']]],\n+ ['symbolicjunctiontree_2ecpp_64', ['SymbolicJunctionTree.cpp', ['../a01391.html', 1, '']]],\n+ ['symbolicjunctiontree_2eh_65', ['SymbolicJunctionTree.h', ['../a01382.html', 1, '']]],\n+ ['symmetricblockmatrix_2ecpp_66', ['SymmetricBlockMatrix.cpp', ['../a00083.html', 1, '']]],\n+ ['symmetricblockmatrix_2eh_67', ['SymmetricBlockMatrix.h', ['../a00122.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_13.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_13.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,16 +1,16 @@\n var searchData = [\n- ['tangentpreintegration_2ecpp_0', ['TangentPreintegration.cpp', ['../a00959.html', 1, '']]],\n- ['tangentpreintegration_2eh_1', ['TangentPreintegration.h', ['../a00941.html', 1, '']]],\n- ['testable_2eh_2', ['Testable.h', ['../a00080.html', 1, '']]],\n- ['testableassertions_2eh_3', ['TestableAssertions.h', ['../a00053.html', 1, '']]],\n- ['threadsafeexception_2eh_4', ['ThreadsafeException.h', ['../a00011.html', 1, '']]],\n- ['timing_2ecpp_5', ['timing.cpp', ['../a00128.html', 1, '']]],\n- ['timing_2eh_6', ['timing.h', ['../a00131.html', 1, '']]],\n- ['translationfactor_2eh_7', ['TranslationFactor.h', ['../a01202.html', 1, '']]],\n- ['translationrecovery_2ecpp_8', ['TranslationRecovery.cpp', ['../a01229.html', 1, '']]],\n+ ['tangentpreintegration_2ecpp_0', ['TangentPreintegration.cpp', ['../a00902.html', 1, '']]],\n+ ['tangentpreintegration_2eh_1', ['TangentPreintegration.h', ['../a00911.html', 1, '']]],\n+ ['testable_2eh_2', ['Testable.h', ['../a00110.html', 1, '']]],\n+ ['testableassertions_2eh_3', ['TestableAssertions.h', ['../a00059.html', 1, '']]],\n+ ['threadsafeexception_2eh_4', ['ThreadsafeException.h', ['../a00098.html', 1, '']]],\n+ ['timing_2ecpp_5', ['timing.cpp', ['../a00029.html', 1, '']]],\n+ ['timing_2eh_6', ['timing.h', ['../a00137.html', 1, '']]],\n+ ['translationfactor_2eh_7', ['TranslationFactor.h', ['../a01193.html', 1, '']]],\n+ ['translationrecovery_2ecpp_8', ['TranslationRecovery.cpp', ['../a01205.html', 1, '']]],\n ['translationrecovery_2eh_9', ['TranslationRecovery.h', ['../a01223.html', 1, '']]],\n- ['treetraversal_2dinst_2eh_10', ['treeTraversal-inst.h', ['../a00146.html', 1, '']]],\n+ ['treetraversal_2dinst_2eh_10', ['treeTraversal-inst.h', ['../a00107.html', 1, '']]],\n ['triangulation_2eh_11', ['triangulation.h', ['../a00452.html', 1, '']]],\n- ['types_2ecpp_12', ['types.cpp', ['../a00005.html', 1, '']]],\n- ['types_2eh_13', ['types.h', ['../a00047.html', 1, '']]]\n+ ['types_2ecpp_12', ['types.cpp', ['../a00134.html', 1, '']]],\n+ ['types_2eh_13', ['types.h', ['../a00020.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_15.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_15.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,16 +1,16 @@\n var searchData = [\n- ['value_2eh_0', ['Value.h', ['../a00059.html', 1, '']]],\n- ['values_2eh_1', ['Values.h', ['../a01130.html', 1, '']]],\n- ['variableindex_2dinl_2eh_2', ['VariableIndex-inl.h', ['../a00611.html', 1, '']]],\n- ['variableindex_2ecpp_3', ['VariableIndex.cpp', ['../a00635.html', 1, '']]],\n+ ['value_2eh_0', ['Value.h', ['../a00023.html', 1, '']]],\n+ ['values_2eh_1', ['Values.h', ['../a01127.html', 1, '']]],\n+ ['variableindex_2dinl_2eh_2', ['VariableIndex-inl.h', ['../a00602.html', 1, '']]],\n+ ['variableindex_2ecpp_3', ['VariableIndex.cpp', ['../a00575.html', 1, '']]],\n ['variableindex_2eh_4', ['VariableIndex.h', ['../a00626.html', 1, '']]],\n- ['variableslots_2ecpp_5', ['VariableSlots.cpp', ['../a00692.html', 1, '']]],\n- ['variableslots_2eh_6', ['VariableSlots.h', ['../a00671.html', 1, '']]],\n- ['vector_2ecpp_7', ['Vector.cpp', ['../a00140.html', 1, '']]],\n- ['vector_2eh_8', ['Vector.h', ['../a00089.html', 1, '']]],\n- ['vectorserialization_2eh_9', ['VectorSerialization.h', ['../a00056.html', 1, '']]],\n- ['vectorvalues_2ecpp_10', ['VectorValues.cpp', ['../a00722.html', 1, '']]],\n- ['vectorvalues_2eh_11', ['VectorValues.h', ['../a00704.html', 1, '']]],\n- ['verticalblockmatrix_2ecpp_12', ['VerticalBlockMatrix.cpp', ['../a00101.html', 1, '']]],\n- ['verticalblockmatrix_2eh_13', ['VerticalBlockMatrix.h', ['../a00071.html', 1, '']]]\n+ ['variableslots_2ecpp_5', ['VariableSlots.cpp', ['../a00608.html', 1, '']]],\n+ ['variableslots_2eh_6', ['VariableSlots.h', ['../a00596.html', 1, '']]],\n+ ['vector_2ecpp_7', ['Vector.cpp', ['../a00050.html', 1, '']]],\n+ ['vector_2eh_8', ['Vector.h', ['../a00113.html', 1, '']]],\n+ ['vectorserialization_2eh_9', ['VectorSerialization.h', ['../a00089.html', 1, '']]],\n+ ['vectorvalues_2ecpp_10', ['VectorValues.cpp', ['../a00785.html', 1, '']]],\n+ ['vectorvalues_2eh_11', ['VectorValues.h', ['../a00893.html', 1, '']]],\n+ ['verticalblockmatrix_2ecpp_12', ['VerticalBlockMatrix.cpp', ['../a00131.html', 1, '']]],\n+ ['verticalblockmatrix_2eh_13', ['VerticalBlockMatrix.h', ['../a00002.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_16.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_16.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,4 +1,4 @@\n var searchData = [\n- ['weightedsampler_2eh_0', ['WeightedSampler.h', ['../a00095.html', 1, '']]],\n- ['whitenoisefactor_2eh_1', ['WhiteNoiseFactor.h', ['../a01037.html', 1, '']]]\n+ ['weightedsampler_2eh_0', ['WeightedSampler.h', ['../a00140.html', 1, '']]],\n+ ['whitenoisefactor_2eh_1', ['WhiteNoiseFactor.h', ['../a01118.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_2.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_2.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,38 +1,38 @@\n var searchData = [\n- ['cal3_2ecpp_0', ['Cal3.cpp', ['../a00446.html', 1, '']]],\n- ['cal3_2eh_1', ['Cal3.h', ['../a00293.html', 1, '']]],\n- ['cal3_5fs2_2ecpp_2', ['Cal3_S2.cpp', ['../a00314.html', 1, '']]],\n- ['cal3_5fs2_2eh_3', ['Cal3_S2.h', ['../a00359.html', 1, '']]],\n- ['cal3_5fs2stereo_2ecpp_4', ['Cal3_S2Stereo.cpp', ['../a00413.html', 1, '']]],\n+ ['cal3_2ecpp_0', ['Cal3.cpp', ['../a00329.html', 1, '']]],\n+ ['cal3_2eh_1', ['Cal3.h', ['../a00365.html', 1, '']]],\n+ ['cal3_5fs2_2ecpp_2', ['Cal3_S2.cpp', ['../a00275.html', 1, '']]],\n+ ['cal3_5fs2_2eh_3', ['Cal3_S2.h', ['../a00386.html', 1, '']]],\n+ ['cal3_5fs2stereo_2ecpp_4', ['Cal3_S2Stereo.cpp', ['../a00464.html', 1, '']]],\n ['cal3_5fs2stereo_2eh_5', ['Cal3_S2Stereo.h', ['../a00419.html', 1, '']]],\n- ['cal3bundler_2ecpp_6', ['Cal3Bundler.cpp', ['../a00404.html', 1, '']]],\n- ['cal3bundler_2eh_7', ['Cal3Bundler.h', ['../a00467.html', 1, '']]],\n- ['cal3ds2_2ecpp_8', ['Cal3DS2.cpp', ['../a00335.html', 1, '']]],\n- ['cal3ds2_2eh_9', ['Cal3DS2.h', ['../a00371.html', 1, '']]],\n- ['cal3ds2_5fbase_2ecpp_10', ['Cal3DS2_Base.cpp', ['../a00296.html', 1, '']]],\n- ['cal3fisheye_2ecpp_11', ['Cal3Fisheye.cpp', ['../a00347.html', 1, '']]],\n- ['cal3fisheye_2eh_12', ['Cal3Fisheye.h', ['../a00356.html', 1, '']]],\n- ['cal3unified_2ecpp_13', ['Cal3Unified.cpp', ['../a00287.html', 1, '']]],\n- ['cal3unified_2eh_14', ['Cal3Unified.h', ['../a00380.html', 1, '']]],\n- ['calibratedcamera_2ecpp_15', ['CalibratedCamera.cpp', ['../a00431.html', 1, '']]],\n- ['calibratedcamera_2eh_16', ['CalibratedCamera.h', ['../a00368.html', 1, '']]],\n- ['cameraset_2eh_17', ['CameraSet.h', ['../a00383.html', 1, '']]],\n- ['chebyshev_2ecpp_18', ['Chebyshev.cpp', ['../a00164.html', 1, '']]],\n+ ['cal3bundler_2ecpp_6', ['Cal3Bundler.cpp', ['../a00398.html', 1, '']]],\n+ ['cal3bundler_2eh_7', ['Cal3Bundler.h', ['../a00320.html', 1, '']]],\n+ ['cal3ds2_2ecpp_8', ['Cal3DS2.cpp', ['../a00290.html', 1, '']]],\n+ ['cal3ds2_2eh_9', ['Cal3DS2.h', ['../a00296.html', 1, '']]],\n+ ['cal3ds2_5fbase_2ecpp_10', ['Cal3DS2_Base.cpp', ['../a00470.html', 1, '']]],\n+ ['cal3fisheye_2ecpp_11', ['Cal3Fisheye.cpp', ['../a00326.html', 1, '']]],\n+ ['cal3fisheye_2eh_12', ['Cal3Fisheye.h', ['../a00476.html', 1, '']]],\n+ ['cal3unified_2ecpp_13', ['Cal3Unified.cpp', ['../a00395.html', 1, '']]],\n+ ['cal3unified_2eh_14', ['Cal3Unified.h', ['../a00434.html', 1, '']]],\n+ ['calibratedcamera_2ecpp_15', ['CalibratedCamera.cpp', ['../a00407.html', 1, '']]],\n+ ['calibratedcamera_2eh_16', ['CalibratedCamera.h', ['../a00359.html', 1, '']]],\n+ ['cameraset_2eh_17', ['CameraSet.h', ['../a00317.html', 1, '']]],\n+ ['chebyshev_2ecpp_18', ['Chebyshev.cpp', ['../a00167.html', 1, '']]],\n ['chebyshev_2eh_19', ['Chebyshev.h', ['../a00155.html', 1, '']]],\n- ['chebyshev2_2ecpp_20', ['Chebyshev2.cpp', ['../a00170.html', 1, '']]],\n+ ['chebyshev2_2ecpp_20', ['Chebyshev2.cpp', ['../a00164.html', 1, '']]],\n ['chebyshev2_2eh_21', ['Chebyshev2.h', ['../a00173.html', 1, '']]],\n- ['cholesky_2ecpp_22', ['cholesky.cpp', ['../a00050.html', 1, '']]],\n- ['cholesky_2eh_23', ['cholesky.h', ['../a00125.html', 1, '']]],\n- ['clustertree_2dinst_2eh_24', ['ClusterTree-inst.h', ['../a00629.html', 1, '']]],\n- ['clustertree_2eh_25', ['ClusterTree.h', ['../a00608.html', 1, '']]],\n- ['combinedimufactor_2ecpp_26', ['CombinedImuFactor.cpp', ['../a00980.html', 1, '']]],\n- ['combinedimufactor_2eh_27', ['CombinedImuFactor.h', ['../a00929.html', 1, '']]],\n+ ['cholesky_2ecpp_22', ['cholesky.cpp', ['../a00068.html', 1, '']]],\n+ ['cholesky_2eh_23', ['cholesky.h', ['../a00008.html', 1, '']]],\n+ ['clustertree_2dinst_2eh_24', ['ClusterTree-inst.h', ['../a00623.html', 1, '']]],\n+ ['clustertree_2eh_25', ['ClusterTree.h', ['../a00686.html', 1, '']]],\n+ ['combinedimufactor_2ecpp_26', ['CombinedImuFactor.cpp', ['../a00950.html', 1, '']]],\n+ ['combinedimufactor_2eh_27', ['CombinedImuFactor.h', ['../a00953.html', 1, '']]],\n ['concepts_2eh_28', ['concepts.h', ['../a08128.html', 1, '']]],\n- ['conditional_2eh_29', ['Conditional.h', ['../a00680.html', 1, '']]],\n- ['conjugategradientsolver_2eh_30', ['ConjugateGradientSolver.h', ['../a00734.html', 1, '']]],\n- ['constantvelocityfactor_2eh_31', ['ConstantVelocityFactor.h', ['../a00908.html', 1, '']]],\n- ['customfactor_2ecpp_32', ['CustomFactor.cpp', ['../a01118.html', 1, '']]],\n- ['customfactor_2eh_33', ['CustomFactor.h', ['../a01058.html', 1, '']]],\n- ['cyclic_2ecpp_34', ['Cyclic.cpp', ['../a00437.html', 1, '']]],\n- ['cyclic_2eh_35', ['Cyclic.h', ['../a00350.html', 1, '']]]\n+ ['conditional_2eh_29', ['Conditional.h', ['../a00650.html', 1, '']]],\n+ ['conjugategradientsolver_2eh_30', ['ConjugateGradientSolver.h', ['../a00884.html', 1, '']]],\n+ ['constantvelocityfactor_2eh_31', ['ConstantVelocityFactor.h', ['../a00956.html', 1, '']]],\n+ ['customfactor_2ecpp_32', ['CustomFactor.cpp', ['../a01076.html', 1, '']]],\n+ ['customfactor_2eh_33', ['CustomFactor.h', ['../a01055.html', 1, '']]],\n+ ['cyclic_2ecpp_34', ['Cyclic.cpp', ['../a00428.html', 1, '']]],\n+ ['cyclic_2eh_35', ['Cyclic.h', ['../a00332.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_3.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_3.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,41 +1,41 @@\n var searchData = [\n- ['dataset_2ecpp_0', ['dataset.cpp', ['../a01265.html', 1, '']]],\n- ['dataset_2eh_1', ['dataset.h', ['../a01259.html', 1, '']]],\n- ['debug_2ecpp_2', ['debug.cpp', ['../a00032.html', 1, '']]],\n- ['debug_2eh_3', ['debug.h', ['../a00008.html', 1, '']]],\n- ['decisiontree_2eh_4', ['DecisionTree.h', ['../a00239.html', 1, '']]],\n- ['decisiontreefactor_2ecpp_5', ['DecisionTreeFactor.cpp', ['../a00272.html', 1, '']]],\n- ['decisiontreefactor_2eh_6', ['DecisionTreeFactor.h', ['../a00227.html', 1, '']]],\n- ['discretebayesnet_2ecpp_7', ['DiscreteBayesNet.cpp', ['../a00269.html', 1, '']]],\n- ['discretebayesnet_2eh_8', ['DiscreteBayesNet.h', ['../a00197.html', 1, '']]],\n- ['discretebayestree_2ecpp_9', ['DiscreteBayesTree.cpp', ['../a00200.html', 1, '']]],\n- ['discretebayestree_2eh_10', ['DiscreteBayesTree.h', ['../a00266.html', 1, '']]],\n- ['discreteconditional_2ecpp_11', ['DiscreteConditional.cpp', ['../a00212.html', 1, '']]],\n- ['discreteconditional_2eh_12', ['DiscreteConditional.h', ['../a00260.html', 1, '']]],\n- ['discretedistribution_2ecpp_13', ['DiscreteDistribution.cpp', ['../a00236.html', 1, '']]],\n- ['discretedistribution_2eh_14', ['DiscreteDistribution.h', ['../a00242.html', 1, '']]],\n- ['discreteeliminationtree_2ecpp_15', ['DiscreteEliminationTree.cpp', ['../a00203.html', 1, '']]],\n- ['discreteeliminationtree_2eh_16', ['DiscreteEliminationTree.h', ['../a00251.html', 1, '']]],\n- ['discretefactor_2ecpp_17', ['DiscreteFactor.cpp', ['../a00257.html', 1, '']]],\n- ['discretefactor_2eh_18', ['DiscreteFactor.h', ['../a00188.html', 1, '']]],\n- ['discretefactorgraph_2ecpp_19', ['DiscreteFactorGraph.cpp', ['../a00254.html', 1, '']]],\n- ['discretefactorgraph_2eh_20', ['DiscreteFactorGraph.h', ['../a00230.html', 1, '']]],\n+ ['dataset_2ecpp_0', ['dataset.cpp', ['../a01262.html', 1, '']]],\n+ ['dataset_2eh_1', ['dataset.h', ['../a01283.html', 1, '']]],\n+ ['debug_2ecpp_2', ['debug.cpp', ['../a00101.html', 1, '']]],\n+ ['debug_2eh_3', ['debug.h', ['../a00053.html', 1, '']]],\n+ ['decisiontree_2eh_4', ['DecisionTree.h', ['../a00179.html', 1, '']]],\n+ ['decisiontreefactor_2ecpp_5', ['DecisionTreeFactor.cpp', ['../a00182.html', 1, '']]],\n+ ['decisiontreefactor_2eh_6', ['DecisionTreeFactor.h', ['../a00188.html', 1, '']]],\n+ ['discretebayesnet_2ecpp_7', ['DiscreteBayesNet.cpp', ['../a00218.html', 1, '']]],\n+ ['discretebayesnet_2eh_8', ['DiscreteBayesNet.h', ['../a00200.html', 1, '']]],\n+ ['discretebayestree_2ecpp_9', ['DiscreteBayesTree.cpp', ['../a00245.html', 1, '']]],\n+ ['discretebayestree_2eh_10', ['DiscreteBayesTree.h', ['../a00227.html', 1, '']]],\n+ ['discreteconditional_2ecpp_11', ['DiscreteConditional.cpp', ['../a00230.html', 1, '']]],\n+ ['discreteconditional_2eh_12', ['DiscreteConditional.h', ['../a00257.html', 1, '']]],\n+ ['discretedistribution_2ecpp_13', ['DiscreteDistribution.cpp', ['../a00212.html', 1, '']]],\n+ ['discretedistribution_2eh_14', ['DiscreteDistribution.h', ['../a00251.html', 1, '']]],\n+ ['discreteeliminationtree_2ecpp_15', ['DiscreteEliminationTree.cpp', ['../a00224.html', 1, '']]],\n+ ['discreteeliminationtree_2eh_16', ['DiscreteEliminationTree.h', ['../a00269.html', 1, '']]],\n+ ['discretefactor_2ecpp_17', ['DiscreteFactor.cpp', ['../a00266.html', 1, '']]],\n+ ['discretefactor_2eh_18', ['DiscreteFactor.h', ['../a00242.html', 1, '']]],\n+ ['discretefactorgraph_2ecpp_19', ['DiscreteFactorGraph.cpp', ['../a00236.html', 1, '']]],\n+ ['discretefactorgraph_2eh_20', ['DiscreteFactorGraph.h', ['../a00197.html', 1, '']]],\n ['discretejunctiontree_2ecpp_21', ['DiscreteJunctionTree.cpp', ['../a00215.html', 1, '']]],\n- ['discretejunctiontree_2eh_22', ['DiscreteJunctionTree.h', ['../a00179.html', 1, '']]],\n- ['discretekey_2eh_23', ['DiscreteKey.h', ['../a00221.html', 1, '']]],\n- ['discretelookupdag_2ecpp_24', ['DiscreteLookupDAG.cpp', ['../a00209.html', 1, '']]],\n- ['discretelookupdag_2eh_25', ['DiscreteLookupDAG.h', ['../a00245.html', 1, '']]],\n- ['discretemarginals_2eh_26', ['DiscreteMarginals.h', ['../a00206.html', 1, '']]],\n- ['discretevalues_2ecpp_27', ['DiscreteValues.cpp', ['../a00185.html', 1, '']]],\n- ['discretevalues_2eh_28', ['DiscreteValues.h', ['../a00191.html', 1, '']]],\n- ['doglegoptimizer_2ecpp_29', ['DoglegOptimizer.cpp', ['../a01082.html', 1, '']]],\n- ['doglegoptimizer_2eh_30', ['DoglegOptimizer.h', ['../a01085.html', 1, '']]],\n- ['doglegoptimizerimpl_2eh_31', ['DoglegOptimizerImpl.h', ['../a01073.html', 1, '']]],\n- ['dotwriter_2ecpp_32', ['DotWriter.cpp', ['../a00572.html', 1, '']]],\n- ['dotwriter_2eh_33', ['DotWriter.h', ['../a00686.html', 1, '']]],\n+ ['discretejunctiontree_2eh_22', ['DiscreteJunctionTree.h', ['../a00206.html', 1, '']]],\n+ ['discretekey_2eh_23', ['DiscreteKey.h', ['../a00272.html', 1, '']]],\n+ ['discretelookupdag_2ecpp_24', ['DiscreteLookupDAG.cpp', ['../a00203.html', 1, '']]],\n+ ['discretelookupdag_2eh_25', ['DiscreteLookupDAG.h', ['../a00194.html', 1, '']]],\n+ ['discretemarginals_2eh_26', ['DiscreteMarginals.h', ['../a00221.html', 1, '']]],\n+ ['discretevalues_2ecpp_27', ['DiscreteValues.cpp', ['../a00260.html', 1, '']]],\n+ ['discretevalues_2eh_28', ['DiscreteValues.h', ['../a00254.html', 1, '']]],\n+ ['doglegoptimizer_2ecpp_29', ['DoglegOptimizer.cpp', ['../a01133.html', 1, '']]],\n+ ['doglegoptimizer_2eh_30', ['DoglegOptimizer.h', ['../a01043.html', 1, '']]],\n+ ['doglegoptimizerimpl_2eh_31', ['DoglegOptimizerImpl.h', ['../a01160.html', 1, '']]],\n+ ['dotwriter_2ecpp_32', ['DotWriter.cpp', ['../a00599.html', 1, '']]],\n+ ['dotwriter_2eh_33', ['DotWriter.h', ['../a00581.html', 1, '']]],\n ['dsfmap_2eh_34', ['DSFMap.h', ['../a00116.html', 1, '']]],\n- ['dsftrackgenerator_2ecpp_35', ['DsfTrackGenerator.cpp', ['../a01211.html', 1, '']]],\n- ['dsftrackgenerator_2eh_36', ['DsfTrackGenerator.h', ['../a01232.html', 1, '']]],\n- ['dsfvector_2ecpp_37', ['DSFVector.cpp', ['../a00044.html', 1, '']]],\n- ['dsfvector_2eh_38', ['DSFVector.h', ['../a00077.html', 1, '']]]\n+ ['dsftrackgenerator_2ecpp_35', ['DsfTrackGenerator.cpp', ['../a01199.html', 1, '']]],\n+ ['dsftrackgenerator_2eh_36', ['DsfTrackGenerator.h', ['../a01196.html', 1, '']]],\n+ ['dsfvector_2ecpp_37', ['DSFVector.cpp', ['../a00125.html', 1, '']]],\n+ ['dsfvector_2eh_38', ['DSFVector.h', ['../a00032.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_4.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_4.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,19 +1,19 @@\n var searchData = [\n- ['eliminateablefactorgraph_2eh_0', ['EliminateableFactorGraph.h', ['../a00623.html', 1, '']]],\n- ['eliminationtree_2dinst_2eh_1', ['EliminationTree-inst.h', ['../a00587.html', 1, '']]],\n- ['eliminationtree_2eh_2', ['EliminationTree.h', ['../a00641.html', 1, '']]],\n- ['errors_2ecpp_3', ['Errors.cpp', ['../a00740.html', 1, '']]],\n- ['errors_2eh_4', ['Errors.h', ['../a00749.html', 1, '']]],\n- ['essentialmatrixconstraint_2ecpp_5', ['EssentialMatrixConstraint.cpp', ['../a01253.html', 1, '']]],\n- ['essentialmatrixconstraint_2eh_6', ['EssentialMatrixConstraint.h', ['../a01244.html', 1, '']]],\n- ['expression_2dinl_2eh_7', ['Expression-inl.h', ['../a01016.html', 1, '']]],\n- ['expression_2eh_8', ['Expression.h', ['../a01028.html', 1, '']]],\n- ['expressionfactorgraph_2eh_9', ['ExpressionFactorGraph.h', ['../a01010.html', 1, '']]],\n+ ['eliminateablefactorgraph_2eh_0', ['EliminateableFactorGraph.h', ['../a00590.html', 1, '']]],\n+ ['eliminationtree_2dinst_2eh_1', ['EliminationTree-inst.h', ['../a00665.html', 1, '']]],\n+ ['eliminationtree_2eh_2', ['EliminationTree.h', ['../a00653.html', 1, '']]],\n+ ['errors_2ecpp_3', ['Errors.cpp', ['../a00788.html', 1, '']]],\n+ ['errors_2eh_4', ['Errors.h', ['../a00896.html', 1, '']]],\n+ ['essentialmatrixconstraint_2ecpp_5', ['EssentialMatrixConstraint.cpp', ['../a01235.html', 1, '']]],\n+ ['essentialmatrixconstraint_2eh_6', ['EssentialMatrixConstraint.h', ['../a01298.html', 1, '']]],\n+ ['expression_2dinl_2eh_7', ['Expression-inl.h', ['../a01151.html', 1, '']]],\n+ ['expression_2eh_8', ['Expression.h', ['../a01097.html', 1, '']]],\n+ ['expressionfactorgraph_2eh_9', ['ExpressionFactorGraph.h', ['../a01019.html', 1, '']]],\n ['expressions_2eh_10', ['expressions.h', ['../a08143.html', 1, '(Global Namespace)'],\n ['../a08146.html', 1, '(Global Namespace)'],\n ['../a08149.html', 1, '(Global Namespace)']\n ]],\n- ['expressiontesting_2eh_11', ['expressionTesting.h', ['../a01142.html', 1, '']]],\n- ['extendedkalmanfilter_2dinl_2eh_12', ['ExtendedKalmanFilter-inl.h', ['../a01091.html', 1, '']]],\n- ['extendedkalmanfilter_2eh_13', ['ExtendedKalmanFilter.h', ['../a01064.html', 1, '']]]\n+ ['expressiontesting_2eh_11', ['expressionTesting.h', ['../a01100.html', 1, '']]],\n+ ['extendedkalmanfilter_2dinl_2eh_12', ['ExtendedKalmanFilter-inl.h', ['../a01148.html', 1, '']]],\n+ ['extendedkalmanfilter_2eh_13', ['ExtendedKalmanFilter.h', ['../a01070.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_5.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_5.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,17 +1,17 @@\n var searchData = [\n- ['factor_2ecpp_0', ['Factor.cpp', ['../a00614.html', 1, '']]],\n- ['factor_2eh_1', ['Factor.h', ['../a00593.html', 1, '']]],\n- ['factorgraph_2dinst_2eh_2', ['FactorGraph-inst.h', ['../a00683.html', 1, '']]],\n- ['factorgraph_2eh_3', ['FactorGraph.h', ['../a00575.html', 1, '']]],\n- ['factortesting_2eh_4', ['factorTesting.h', ['../a01121.html', 1, '']]],\n- ['fastdefaultallocator_2eh_5', ['FastDefaultAllocator.h', ['../a00017.html', 1, '']]],\n- ['fastlist_2eh_6', ['FastList.h', ['../a00014.html', 1, '']]],\n- ['fastmap_2eh_7', ['FastMap.h', ['../a00149.html', 1, '']]],\n- ['fastset_2eh_8', ['FastSet.h', ['../a00062.html', 1, '']]],\n- ['fastvector_2eh_9', ['FastVector.h', ['../a00083.html', 1, '']]],\n- ['fitbasis_2eh_10', ['FitBasis.h', ['../a00167.html', 1, '']]],\n- ['fourier_2eh_11', ['Fourier.h', ['../a00161.html', 1, '']]],\n- ['frobeniusfactor_2ecpp_12', ['FrobeniusFactor.cpp', ['../a01325.html', 1, '']]],\n- ['frobeniusfactor_2eh_13', ['FrobeniusFactor.h', ['../a01280.html', 1, '']]],\n- ['functorizedfactor_2eh_14', ['FunctorizedFactor.h', ['../a01013.html', 1, '']]]\n+ ['factor_2ecpp_0', ['Factor.cpp', ['../a00668.html', 1, '']]],\n+ ['factor_2eh_1', ['Factor.h', ['../a00647.html', 1, '']]],\n+ ['factorgraph_2dinst_2eh_2', ['FactorGraph-inst.h', ['../a00572.html', 1, '']]],\n+ ['factorgraph_2eh_3', ['FactorGraph.h', ['../a00659.html', 1, '']]],\n+ ['factortesting_2eh_4', ['factorTesting.h', ['../a01091.html', 1, '']]],\n+ ['fastdefaultallocator_2eh_5', ['FastDefaultAllocator.h', ['../a00041.html', 1, '']]],\n+ ['fastlist_2eh_6', ['FastList.h', ['../a00086.html', 1, '']]],\n+ ['fastmap_2eh_7', ['FastMap.h', ['../a00035.html', 1, '']]],\n+ ['fastset_2eh_8', ['FastSet.h', ['../a00092.html', 1, '']]],\n+ ['fastvector_2eh_9', ['FastVector.h', ['../a00080.html', 1, '']]],\n+ ['fitbasis_2eh_10', ['FitBasis.h', ['../a00152.html', 1, '']]],\n+ ['fourier_2eh_11', ['Fourier.h', ['../a00158.html', 1, '']]],\n+ ['frobeniusfactor_2ecpp_12', ['FrobeniusFactor.cpp', ['../a01319.html', 1, '']]],\n+ ['frobeniusfactor_2eh_13', ['FrobeniusFactor.h', ['../a01325.html', 1, '']]],\n+ ['functorizedfactor_2eh_14', ['FunctorizedFactor.h', ['../a01064.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_6.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_6.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,36 +1,36 @@\n var searchData = [\n- ['gaussianbayesnet_2ecpp_0', ['GaussianBayesNet.cpp', ['../a00755.html', 1, '']]],\n- ['gaussianbayesnet_2eh_1', ['GaussianBayesNet.h', ['../a00860.html', 1, '']]],\n- ['gaussianbayestree_2dinl_2eh_2', ['GaussianBayesTree-inl.h', ['../a00800.html', 1, '']]],\n- ['gaussianbayestree_2ecpp_3', ['GaussianBayesTree.cpp', ['../a00830.html', 1, '']]],\n- ['gaussianbayestree_2eh_4', ['GaussianBayesTree.h', ['../a00746.html', 1, '']]],\n- ['gaussianconditional_2dinl_2eh_5', ['GaussianConditional-inl.h', ['../a00839.html', 1, '']]],\n- ['gaussianconditional_2ecpp_6', ['GaussianConditional.cpp', ['../a00707.html', 1, '']]],\n- ['gaussianconditional_2eh_7', ['GaussianConditional.h', ['../a00779.html', 1, '']]],\n- ['gaussiandensity_2ecpp_8', ['GaussianDensity.cpp', ['../a00761.html', 1, '']]],\n- ['gaussiandensity_2eh_9', ['GaussianDensity.h', ['../a00836.html', 1, '']]],\n- ['gaussianeliminationtree_2ecpp_10', ['GaussianEliminationTree.cpp', ['../a00857.html', 1, '']]],\n- ['gaussianeliminationtree_2eh_11', ['GaussianEliminationTree.h', ['../a00716.html', 1, '']]],\n- ['gaussianfactor_2ecpp_12', ['GaussianFactor.cpp', ['../a00845.html', 1, '']]],\n- ['gaussianfactor_2eh_13', ['GaussianFactor.h', ['../a00725.html', 1, '']]],\n- ['gaussianfactorgraph_2ecpp_14', ['GaussianFactorGraph.cpp', ['../a00896.html', 1, '']]],\n- ['gaussianfactorgraph_2eh_15', ['GaussianFactorGraph.h', ['../a00872.html', 1, '']]],\n+ ['gaussianbayesnet_2ecpp_0', ['GaussianBayesNet.cpp', ['../a00863.html', 1, '']]],\n+ ['gaussianbayesnet_2eh_1', ['GaussianBayesNet.h', ['../a00764.html', 1, '']]],\n+ ['gaussianbayestree_2dinl_2eh_2', ['GaussianBayesTree-inl.h', ['../a00824.html', 1, '']]],\n+ ['gaussianbayestree_2ecpp_3', ['GaussianBayesTree.cpp', ['../a00800.html', 1, '']]],\n+ ['gaussianbayestree_2eh_4', ['GaussianBayesTree.h', ['../a00752.html', 1, '']]],\n+ ['gaussianconditional_2dinl_2eh_5', ['GaussianConditional-inl.h', ['../a00845.html', 1, '']]],\n+ ['gaussianconditional_2ecpp_6', ['GaussianConditional.cpp', ['../a00737.html', 1, '']]],\n+ ['gaussianconditional_2eh_7', ['GaussianConditional.h', ['../a00872.html', 1, '']]],\n+ ['gaussiandensity_2ecpp_8', ['GaussianDensity.cpp', ['../a00869.html', 1, '']]],\n+ ['gaussiandensity_2eh_9', ['GaussianDensity.h', ['../a00758.html', 1, '']]],\n+ ['gaussianeliminationtree_2ecpp_10', ['GaussianEliminationTree.cpp', ['../a00878.html', 1, '']]],\n+ ['gaussianeliminationtree_2eh_11', ['GaussianEliminationTree.h', ['../a00746.html', 1, '']]],\n+ ['gaussianfactor_2ecpp_12', ['GaussianFactor.cpp', ['../a00734.html', 1, '']]],\n+ ['gaussianfactor_2eh_13', ['GaussianFactor.h', ['../a00731.html', 1, '']]],\n+ ['gaussianfactorgraph_2ecpp_14', ['GaussianFactorGraph.cpp', ['../a00887.html', 1, '']]],\n+ ['gaussianfactorgraph_2eh_15', ['GaussianFactorGraph.h', ['../a00815.html', 1, '']]],\n ['gaussianisam_2eh_16', ['GaussianISAM.h', ['../a00881.html', 1, '']]],\n- ['gaussianjunctiontree_2ecpp_17', ['GaussianJunctionTree.cpp', ['../a00866.html', 1, '']]],\n- ['gaussianjunctiontree_2eh_18', ['GaussianJunctionTree.h', ['../a00851.html', 1, '']]],\n- ['gaussianmixture_2ecpp_19', ['GaussianMixture.cpp', ['../a00518.html', 1, '']]],\n- ['gaussianmixture_2eh_20', ['GaussianMixture.h', ['../a00566.html', 1, '']]],\n- ['gaussianmixturefactor_2ecpp_21', ['GaussianMixtureFactor.cpp', ['../a00506.html', 1, '']]],\n- ['gaussianmixturefactor_2eh_22', ['GaussianMixtureFactor.h', ['../a00542.html', 1, '']]],\n- ['gaussnewtonoptimizer_2ecpp_23', ['GaussNewtonOptimizer.cpp', ['../a01109.html', 1, '']]],\n- ['gaussnewtonoptimizer_2eh_24', ['GaussNewtonOptimizer.h', ['../a01001.html', 1, '']]],\n- ['generalsfmfactor_2eh_25', ['GeneralSFMFactor.h', ['../a01292.html', 1, '']]],\n- ['global_5fincludes_2eh_26', ['global_includes.h', ['../a01406.html', 1, '']]],\n- ['gncoptimizer_2eh_27', ['GncOptimizer.h', ['../a01052.html', 1, '']]],\n+ ['gaussianjunctiontree_2ecpp_17', ['GaussianJunctionTree.cpp', ['../a00854.html', 1, '']]],\n+ ['gaussianjunctiontree_2eh_18', ['GaussianJunctionTree.h', ['../a00875.html', 1, '']]],\n+ ['gaussianmixture_2ecpp_19', ['GaussianMixture.cpp', ['../a00497.html', 1, '']]],\n+ ['gaussianmixture_2eh_20', ['GaussianMixture.h', ['../a00503.html', 1, '']]],\n+ ['gaussianmixturefactor_2ecpp_21', ['GaussianMixtureFactor.cpp', ['../a00557.html', 1, '']]],\n+ ['gaussianmixturefactor_2eh_22', ['GaussianMixtureFactor.h', ['../a00536.html', 1, '']]],\n+ ['gaussnewtonoptimizer_2ecpp_23', ['GaussNewtonOptimizer.cpp', ['../a01016.html', 1, '']]],\n+ ['gaussnewtonoptimizer_2eh_24', ['GaussNewtonOptimizer.h', ['../a01031.html', 1, '']]],\n+ ['generalsfmfactor_2eh_25', ['GeneralSFMFactor.h', ['../a01334.html', 1, '']]],\n+ ['global_5fincludes_2eh_26', ['global_includes.h', ['../a01400.html', 1, '']]],\n+ ['gncoptimizer_2eh_27', ['GncOptimizer.h', ['../a01103.html', 1, '']]],\n ['gpsfactor_2ecpp_28', ['GPSFactor.cpp', ['../a00983.html', 1, '']]],\n- ['gpsfactor_2eh_29', ['GPSFactor.h', ['../a00920.html', 1, '']]],\n- ['graph_2eh_30', ['graph.h', ['../a00596.html', 1, '']]],\n- ['graphvizformatting_2ecpp_31', ['GraphvizFormatting.cpp', ['../a01106.html', 1, '']]],\n- ['graphvizformatting_2eh_32', ['GraphvizFormatting.h', ['../a01031.html', 1, '']]],\n- ['group_2eh_33', ['Group.h', ['../a00065.html', 1, '']]]\n+ ['gpsfactor_2eh_29', ['GPSFactor.h', ['../a00908.html', 1, '']]],\n+ ['graph_2eh_30', ['graph.h', ['../a00656.html', 1, '']]],\n+ ['graphvizformatting_2ecpp_31', ['GraphvizFormatting.cpp', ['../a01022.html', 1, '']]],\n+ ['graphvizformatting_2eh_32', ['GraphvizFormatting.h', ['../a01115.html', 1, '']]],\n+ ['group_2eh_33', ['Group.h', ['../a00056.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_7.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_7.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,29 +1,29 @@\n var searchData = [\n- ['hessianfactor_2dinl_2eh_0', ['HessianFactor-inl.h', ['../a00713.html', 1, '']]],\n- ['hessianfactor_2ecpp_1', ['HessianFactor.cpp', ['../a00788.html', 1, '']]],\n- ['hessianfactor_2eh_2', ['HessianFactor.h', ['../a00827.html', 1, '']]],\n- ['hybridbayesnet_2ecpp_3', ['HybridBayesNet.cpp', ['../a00545.html', 1, '']]],\n- ['hybridbayesnet_2eh_4', ['HybridBayesNet.h', ['../a00509.html', 1, '']]],\n- ['hybridbayestree_2ecpp_5', ['HybridBayesTree.cpp', ['../a00521.html', 1, '']]],\n- ['hybridbayestree_2eh_6', ['HybridBayesTree.h', ['../a00494.html', 1, '']]],\n- ['hybridconditional_2ecpp_7', ['HybridConditional.cpp', ['../a00482.html', 1, '']]],\n- ['hybridconditional_2eh_8', ['HybridConditional.h', ['../a00533.html', 1, '']]],\n- ['hybrideliminationtree_2ecpp_9', ['HybridEliminationTree.cpp', ['../a00515.html', 1, '']]],\n- ['hybrideliminationtree_2eh_10', ['HybridEliminationTree.h', ['../a00551.html', 1, '']]],\n- ['hybridfactor_2ecpp_11', ['HybridFactor.cpp', ['../a00503.html', 1, '']]],\n- ['hybridfactor_2eh_12', ['HybridFactor.h', ['../a00539.html', 1, '']]],\n- ['hybridfactorgraph_2ecpp_13', ['HybridFactorGraph.cpp', ['../a00527.html', 1, '']]],\n- ['hybridfactorgraph_2eh_14', ['HybridFactorGraph.h', ['../a00536.html', 1, '']]],\n- ['hybridgaussianfactorgraph_2ecpp_15', ['HybridGaussianFactorGraph.cpp', ['../a00569.html', 1, '']]],\n- ['hybridgaussianfactorgraph_2eh_16', ['HybridGaussianFactorGraph.h', ['../a00530.html', 1, '']]],\n- ['hybridgaussianisam_2eh_17', ['HybridGaussianISAM.h', ['../a00554.html', 1, '']]],\n- ['hybridjunctiontree_2ecpp_18', ['HybridJunctionTree.cpp', ['../a00548.html', 1, '']]],\n- ['hybridjunctiontree_2eh_19', ['HybridJunctionTree.h', ['../a00524.html', 1, '']]],\n- ['hybridnonlinearfactorgraph_2ecpp_20', ['HybridNonlinearFactorGraph.cpp', ['../a00485.html', 1, '']]],\n- ['hybridnonlinearfactorgraph_2eh_21', ['HybridNonlinearFactorGraph.h', ['../a00500.html', 1, '']]],\n- ['hybridnonlinearisam_2ecpp_22', ['HybridNonlinearISAM.cpp', ['../a00488.html', 1, '']]],\n- ['hybridnonlinearisam_2eh_23', ['HybridNonlinearISAM.h', ['../a00563.html', 1, '']]],\n- ['hybridsmoother_2ecpp_24', ['HybridSmoother.cpp', ['../a00497.html', 1, '']]],\n- ['hybridsmoother_2eh_25', ['HybridSmoother.h', ['../a00557.html', 1, '']]],\n- ['hybridvalues_2eh_26', ['HybridValues.h', ['../a00560.html', 1, '']]]\n+ ['hessianfactor_2dinl_2eh_0', ['HessianFactor-inl.h', ['../a00890.html', 1, '']]],\n+ ['hessianfactor_2ecpp_1', ['HessianFactor.cpp', ['../a00767.html', 1, '']]],\n+ ['hessianfactor_2eh_2', ['HessianFactor.h', ['../a00782.html', 1, '']]],\n+ ['hybridbayesnet_2ecpp_3', ['HybridBayesNet.cpp', ['../a00515.html', 1, '']]],\n+ ['hybridbayesnet_2eh_4', ['HybridBayesNet.h', ['../a00527.html', 1, '']]],\n+ ['hybridbayestree_2ecpp_5', ['HybridBayesTree.cpp', ['../a00509.html', 1, '']]],\n+ ['hybridbayestree_2eh_6', ['HybridBayesTree.h', ['../a00488.html', 1, '']]],\n+ ['hybridconditional_2ecpp_7', ['HybridConditional.cpp', ['../a00566.html', 1, '']]],\n+ ['hybridconditional_2eh_8', ['HybridConditional.h', ['../a00560.html', 1, '']]],\n+ ['hybrideliminationtree_2ecpp_9', ['HybridEliminationTree.cpp', ['../a00485.html', 1, '']]],\n+ ['hybrideliminationtree_2eh_10', ['HybridEliminationTree.h', ['../a00542.html', 1, '']]],\n+ ['hybridfactor_2ecpp_11', ['HybridFactor.cpp', ['../a00494.html', 1, '']]],\n+ ['hybridfactor_2eh_12', ['HybridFactor.h', ['../a00533.html', 1, '']]],\n+ ['hybridfactorgraph_2ecpp_13', ['HybridFactorGraph.cpp', ['../a00545.html', 1, '']]],\n+ ['hybridfactorgraph_2eh_14', ['HybridFactorGraph.h', ['../a00563.html', 1, '']]],\n+ ['hybridgaussianfactorgraph_2ecpp_15', ['HybridGaussianFactorGraph.cpp', ['../a00491.html', 1, '']]],\n+ ['hybridgaussianfactorgraph_2eh_16', ['HybridGaussianFactorGraph.h', ['../a00539.html', 1, '']]],\n+ ['hybridgaussianisam_2eh_17', ['HybridGaussianISAM.h', ['../a00569.html', 1, '']]],\n+ ['hybridjunctiontree_2ecpp_18', ['HybridJunctionTree.cpp', ['../a00521.html', 1, '']]],\n+ ['hybridjunctiontree_2eh_19', ['HybridJunctionTree.h', ['../a00551.html', 1, '']]],\n+ ['hybridnonlinearfactorgraph_2ecpp_20', ['HybridNonlinearFactorGraph.cpp', ['../a00548.html', 1, '']]],\n+ ['hybridnonlinearfactorgraph_2eh_21', ['HybridNonlinearFactorGraph.h', ['../a00518.html', 1, '']]],\n+ ['hybridnonlinearisam_2ecpp_22', ['HybridNonlinearISAM.cpp', ['../a00512.html', 1, '']]],\n+ ['hybridnonlinearisam_2eh_23', ['HybridNonlinearISAM.h', ['../a00506.html', 1, '']]],\n+ ['hybridsmoother_2ecpp_24', ['HybridSmoother.cpp', ['../a00524.html', 1, '']]],\n+ ['hybridsmoother_2eh_25', ['HybridSmoother.h', ['../a00500.html', 1, '']]],\n+ ['hybridvalues_2eh_26', ['HybridValues.h', ['../a00482.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_8.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_8.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,28 +1,28 @@\n var searchData = [\n- ['imubias_2ecpp_0', ['ImuBias.cpp', ['../a00989.html', 1, '']]],\n- ['imubias_2eh_1', ['ImuBias.h', ['../a00968.html', 1, '']]],\n- ['imufactor_2ecpp_2', ['ImuFactor.cpp', ['../a00992.html', 1, '']]],\n- ['imufactor_2eh_3', ['ImuFactor.h', ['../a00938.html', 1, '']]],\n- ['inference_2dinst_2eh_4', ['inference-inst.h', ['../a00620.html', 1, '']]],\n- ['inferenceexceptions_2eh_5', ['inferenceExceptions.h', ['../a00650.html', 1, '']]],\n- ['initializepose_2eh_6', ['InitializePose.h', ['../a01301.html', 1, '']]],\n- ['initializepose3_2ecpp_7', ['InitializePose3.cpp', ['../a01340.html', 1, '']]],\n- ['initializepose3_2eh_8', ['InitializePose3.h', ['../a01304.html', 1, '']]],\n- ['isam_2dinst_2eh_9', ['ISAM-inst.h', ['../a00644.html', 1, '']]],\n- ['isam_2eh_10', ['ISAM.h', ['../a00647.html', 1, '']]],\n- ['isam2_2dimpl_2ecpp_11', ['ISAM2-impl.cpp', ['../a01046.html', 1, '']]],\n- ['isam2_2dimpl_2eh_12', ['ISAM2-impl.h', ['../a01067.html', 1, '']]],\n- ['isam2_2ecpp_13', ['ISAM2.cpp', ['../a01139.html', 1, '']]],\n- ['isam2_2eh_14', ['ISAM2.h', ['../a01163.html', 1, '']]],\n- ['isam2clique_2ecpp_15', ['ISAM2Clique.cpp', ['../a01055.html', 1, '']]],\n- ['isam2clique_2eh_16', ['ISAM2Clique.h', ['../a01160.html', 1, '']]],\n- ['isam2params_2ecpp_17', ['ISAM2Params.cpp', ['../a01172.html', 1, '']]],\n- ['isam2params_2eh_18', ['ISAM2Params.h', ['../a01040.html', 1, '']]],\n- ['isam2result_2eh_19', ['ISAM2Result.h', ['../a01127.html', 1, '']]],\n- ['isam2updateparams_2eh_20', ['ISAM2UpdateParams.h', ['../a01169.html', 1, '']]],\n- ['iterative_2dinl_2eh_21', ['iterative-inl.h', ['../a00737.html', 1, '']]],\n- ['iterative_2ecpp_22', ['iterative.cpp', ['../a00878.html', 1, '']]],\n- ['iterative_2eh_23', ['iterative.h', ['../a00887.html', 1, '']]],\n+ ['imubias_2ecpp_0', ['ImuBias.cpp', ['../a00968.html', 1, '']]],\n+ ['imubias_2eh_1', ['ImuBias.h', ['../a00974.html', 1, '']]],\n+ ['imufactor_2ecpp_2', ['ImuFactor.cpp', ['../a00959.html', 1, '']]],\n+ ['imufactor_2eh_3', ['ImuFactor.h', ['../a00977.html', 1, '']]],\n+ ['inference_2dinst_2eh_4', ['inference-inst.h', ['../a00617.html', 1, '']]],\n+ ['inferenceexceptions_2eh_5', ['inferenceExceptions.h', ['../a00629.html', 1, '']]],\n+ ['initializepose_2eh_6', ['InitializePose.h', ['../a01280.html', 1, '']]],\n+ ['initializepose3_2ecpp_7', ['InitializePose3.cpp', ['../a01304.html', 1, '']]],\n+ ['initializepose3_2eh_8', ['InitializePose3.h', ['../a01238.html', 1, '']]],\n+ ['isam_2dinst_2eh_9', ['ISAM-inst.h', ['../a00692.html', 1, '']]],\n+ ['isam_2eh_10', ['ISAM.h', ['../a00638.html', 1, '']]],\n+ ['isam2_2dimpl_2ecpp_11', ['ISAM2-impl.cpp', ['../a01010.html', 1, '']]],\n+ ['isam2_2dimpl_2eh_12', ['ISAM2-impl.h', ['../a01058.html', 1, '']]],\n+ ['isam2_2ecpp_13', ['ISAM2.cpp', ['../a01106.html', 1, '']]],\n+ ['isam2_2eh_14', ['ISAM2.h', ['../a01007.html', 1, '']]],\n+ ['isam2clique_2ecpp_15', ['ISAM2Clique.cpp', ['../a01109.html', 1, '']]],\n+ ['isam2clique_2eh_16', ['ISAM2Clique.h', ['../a01049.html', 1, '']]],\n+ ['isam2params_2ecpp_17', ['ISAM2Params.cpp', ['../a01124.html', 1, '']]],\n+ ['isam2params_2eh_18', ['ISAM2Params.h', ['../a01037.html', 1, '']]],\n+ ['isam2result_2eh_19', ['ISAM2Result.h', ['../a01004.html', 1, '']]],\n+ ['isam2updateparams_2eh_20', ['ISAM2UpdateParams.h', ['../a01067.html', 1, '']]],\n+ ['iterative_2dinl_2eh_21', ['iterative-inl.h', ['../a00761.html', 1, '']]],\n+ ['iterative_2ecpp_22', ['iterative.cpp', ['../a00716.html', 1, '']]],\n+ ['iterative_2eh_23', ['iterative.h', ['../a00812.html', 1, '']]],\n ['iterativesolver_2ecpp_24', ['IterativeSolver.cpp', ['../a00797.html', 1, '']]],\n- ['iterativesolver_2eh_25', ['IterativeSolver.h', ['../a00767.html', 1, '']]]\n+ ['iterativesolver_2eh_25', ['IterativeSolver.h', ['../a00857.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_9.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_9.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,6 +1,6 @@\n var searchData = [\n- ['jacobianfactor_2ecpp_0', ['JacobianFactor.cpp', ['../a00899.html', 1, '']]],\n- ['jacobianfactor_2eh_1', ['JacobianFactor.h', ['../a00776.html', 1, '']]],\n+ ['jacobianfactor_2ecpp_0', ['JacobianFactor.cpp', ['../a00821.html', 1, '']]],\n+ ['jacobianfactor_2eh_1', ['JacobianFactor.h', ['../a00719.html', 1, '']]],\n ['junctiontree_2dinst_2eh_2', ['JunctionTree-inst.h', ['../a00701.html', 1, '']]],\n- ['junctiontree_2eh_3', ['JunctionTree.h', ['../a00665.html', 1, '']]]\n+ ['junctiontree_2eh_3', ['JunctionTree.h', ['../a00677.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_a.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_a.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,5 @@\n var searchData = [\n- ['kalmanfilter_2ecpp_0', ['KalmanFilter.cpp', ['../a00848.html', 1, '']]],\n- ['kalmanfilter_2eh_1', ['KalmanFilter.h', ['../a00812.html', 1, '']]],\n- ['key_2eh_2', ['Key.h', ['../a00662.html', 1, '']]]\n+ ['kalmanfilter_2ecpp_0', ['KalmanFilter.cpp', ['../a00839.html', 1, '']]],\n+ ['kalmanfilter_2eh_1', ['KalmanFilter.h', ['../a00791.html', 1, '']]],\n+ ['key_2eh_2', ['Key.h', ['../a00635.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_b.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_b.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,16 +1,16 @@\n var searchData = [\n- ['labeledsymbol_2eh_0', ['LabeledSymbol.h', ['../a00599.html', 1, '']]],\n- ['lago_2eh_1', ['lago.h', ['../a01262.html', 1, '']]],\n- ['levenbergmarquardtoptimizer_2ecpp_2', ['LevenbergMarquardtOptimizer.cpp', ['../a01004.html', 1, '']]],\n- ['levenbergmarquardtoptimizer_2eh_3', ['LevenbergMarquardtOptimizer.h', ['../a01043.html', 1, '']]],\n- ['levenbergmarquardtparams_2ecpp_4', ['LevenbergMarquardtParams.cpp', ['../a01100.html', 1, '']]],\n- ['levenbergmarquardtparams_2eh_5', ['LevenbergMarquardtParams.h', ['../a01019.html', 1, '']]],\n- ['lie_2eh_6', ['Lie.h', ['../a00074.html', 1, '']]],\n- ['lieproxies_2eh_7', ['lieProxies.h', ['../a00122.html', 1, '']]],\n- ['line3_2eh_8', ['Line3.h', ['../a00464.html', 1, '']]],\n- ['linearalgorithms_2dinst_2eh_9', ['linearAlgorithms-inst.h', ['../a00818.html', 1, '']]],\n- ['linearcontainerfactor_2ecpp_10', ['LinearContainerFactor.cpp', ['../a01145.html', 1, '']]],\n- ['linearcontainerfactor_2eh_11', ['LinearContainerFactor.h', ['../a01103.html', 1, '']]],\n- ['linearexceptions_2ecpp_12', ['linearExceptions.cpp', ['../a00743.html', 1, '']]],\n- ['linearexceptions_2eh_13', ['linearExceptions.h', ['../a00719.html', 1, '']]]\n+ ['labeledsymbol_2eh_0', ['LabeledSymbol.h', ['../a00641.html', 1, '']]],\n+ ['lago_2eh_1', ['lago.h', ['../a01277.html', 1, '']]],\n+ ['levenbergmarquardtoptimizer_2ecpp_2', ['LevenbergMarquardtOptimizer.cpp', ['../a01028.html', 1, '']]],\n+ ['levenbergmarquardtoptimizer_2eh_3', ['LevenbergMarquardtOptimizer.h', ['../a01172.html', 1, '']]],\n+ ['levenbergmarquardtparams_2ecpp_4', ['LevenbergMarquardtParams.cpp', ['../a01013.html', 1, '']]],\n+ ['levenbergmarquardtparams_2eh_5', ['LevenbergMarquardtParams.h', ['../a01145.html', 1, '']]],\n+ ['lie_2eh_6', ['Lie.h', ['../a00005.html', 1, '']]],\n+ ['lieproxies_2eh_7', ['lieProxies.h', ['../a00011.html', 1, '']]],\n+ ['line3_2eh_8', ['Line3.h', ['../a00437.html', 1, '']]],\n+ ['linearalgorithms_2dinst_2eh_9', ['linearAlgorithms-inst.h', ['../a00833.html', 1, '']]],\n+ ['linearcontainerfactor_2ecpp_10', ['LinearContainerFactor.cpp', ['../a01082.html', 1, '']]],\n+ ['linearcontainerfactor_2eh_11', ['LinearContainerFactor.h', ['../a01154.html', 1, '']]],\n+ ['linearexceptions_2ecpp_12', ['linearExceptions.cpp', ['../a00899.html', 1, '']]],\n+ ['linearexceptions_2eh_13', ['linearExceptions.h', ['../a00770.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_c.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_c.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,17 +1,17 @@\n var searchData = [\n- ['magfactor_2eh_0', ['MagFactor.h', ['../a00917.html', 1, '']]],\n- ['make_5fshared_2eh_1', ['make_shared.h', ['../a00038.html', 1, '']]],\n- ['manifold_2eh_2', ['Manifold.h', ['../a00002.html', 1, '']]],\n- ['manifoldpreintegration_2ecpp_3', ['ManifoldPreintegration.cpp', ['../a00977.html', 1, '']]],\n- ['manifoldpreintegration_2eh_4', ['ManifoldPreintegration.h', ['../a00998.html', 1, '']]],\n- ['marginals_2ecpp_5', ['Marginals.cpp', ['../a01079.html', 1, '']]],\n- ['marginals_2eh_6', ['Marginals.h', ['../a01136.html', 1, '']]],\n- ['matrix_2ecpp_7', ['Matrix.cpp', ['../a00068.html', 1, '']]],\n- ['matrix_2eh_8', ['Matrix.h', ['../a00020.html', 1, '']]],\n- ['matrixserialization_2eh_9', ['MatrixSerialization.h', ['../a00104.html', 1, '']]],\n- ['metisindex_2dinl_2eh_10', ['MetisIndex-inl.h', ['../a00632.html', 1, '']]],\n- ['metisindex_2eh_11', ['MetisIndex.h', ['../a00617.html', 1, '']]],\n- ['mfas_2ecpp_12', ['MFAS.cpp', ['../a01205.html', 1, '']]],\n- ['mfas_2eh_13', ['MFAS.h', ['../a01193.html', 1, '']]],\n- ['mixturefactor_2eh_14', ['MixtureFactor.h', ['../a00491.html', 1, '']]]\n+ ['magfactor_2eh_0', ['MagFactor.h', ['../a00995.html', 1, '']]],\n+ ['make_5fshared_2eh_1', ['make_shared.h', ['../a00077.html', 1, '']]],\n+ ['manifold_2eh_2', ['Manifold.h', ['../a00044.html', 1, '']]],\n+ ['manifoldpreintegration_2ecpp_3', ['ManifoldPreintegration.cpp', ['../a00947.html', 1, '']]],\n+ ['manifoldpreintegration_2eh_4', ['ManifoldPreintegration.h', ['../a00926.html', 1, '']]],\n+ ['marginals_2ecpp_5', ['Marginals.cpp', ['../a01166.html', 1, '']]],\n+ ['marginals_2eh_6', ['Marginals.h', ['../a01142.html', 1, '']]],\n+ ['matrix_2ecpp_7', ['Matrix.cpp', ['../a00071.html', 1, '']]],\n+ ['matrix_2eh_8', ['Matrix.h', ['../a00026.html', 1, '']]],\n+ ['matrixserialization_2eh_9', ['MatrixSerialization.h', ['../a00038.html', 1, '']]],\n+ ['metisindex_2dinl_2eh_10', ['MetisIndex-inl.h', ['../a00620.html', 1, '']]],\n+ ['metisindex_2eh_11', ['MetisIndex.h', ['../a00674.html', 1, '']]],\n+ ['mfas_2ecpp_12', ['MFAS.cpp', ['../a01226.html', 1, '']]],\n+ ['mfas_2eh_13', ['MFAS.h', ['../a01184.html', 1, '']]],\n+ ['mixturefactor_2eh_14', ['MixtureFactor.h', ['../a00554.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_d.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_d.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,19 +1,19 @@\n var searchData = [\n- ['navstate_2eh_0', ['NavState.h', ['../a00944.html', 1, '']]],\n- ['noisemodel_2ecpp_1', ['NoiseModel.cpp', ['../a00731.html', 1, '']]],\n- ['noisemodel_2eh_2', ['NoiseModel.h', ['../a00875.html', 1, '']]],\n- ['nonlinearconjugategradientoptimizer_2ecpp_3', ['NonlinearConjugateGradientOptimizer.cpp', ['../a01133.html', 1, '']]],\n- ['nonlinearconjugategradientoptimizer_2eh_4', ['NonlinearConjugateGradientOptimizer.h', ['../a01124.html', 1, '']]],\n- ['nonlinearexceptions_2eh_5', ['nonlinearExceptions.h', ['../a01070.html', 1, '']]],\n- ['nonlinearfactor_2ecpp_6', ['NonlinearFactor.cpp', ['../a01148.html', 1, '']]],\n- ['nonlinearfactor_2eh_7', ['NonlinearFactor.h', ['../a01097.html', 1, '']]],\n- ['nonlinearfactorgraph_2ecpp_8', ['NonlinearFactorGraph.cpp', ['../a01115.html', 1, '']]],\n- ['nonlinearfactorgraph_2eh_9', ['NonlinearFactorGraph.h', ['../a01154.html', 1, '']]],\n+ ['navstate_2eh_0', ['NavState.h', ['../a00962.html', 1, '']]],\n+ ['noisemodel_2ecpp_1', ['NoiseModel.cpp', ['../a00773.html', 1, '']]],\n+ ['noisemodel_2eh_2', ['NoiseModel.h', ['../a00827.html', 1, '']]],\n+ ['nonlinearconjugategradientoptimizer_2ecpp_3', ['NonlinearConjugateGradientOptimizer.cpp', ['../a01034.html', 1, '']]],\n+ ['nonlinearconjugategradientoptimizer_2eh_4', ['NonlinearConjugateGradientOptimizer.h', ['../a01052.html', 1, '']]],\n+ ['nonlinearexceptions_2eh_5', ['nonlinearExceptions.h', ['../a01001.html', 1, '']]],\n+ ['nonlinearfactor_2ecpp_6', ['NonlinearFactor.cpp', ['../a01079.html', 1, '']]],\n+ ['nonlinearfactor_2eh_7', ['NonlinearFactor.h', ['../a01025.html', 1, '']]],\n+ ['nonlinearfactorgraph_2ecpp_8', ['NonlinearFactorGraph.cpp', ['../a01157.html', 1, '']]],\n+ ['nonlinearfactorgraph_2eh_9', ['NonlinearFactorGraph.h', ['../a01085.html', 1, '']]],\n ['nonlinearisam_2ecpp_10', ['NonlinearISAM.cpp', ['../a01112.html', 1, '']]],\n- ['nonlinearisam_2eh_11', ['NonlinearISAM.h', ['../a01166.html', 1, '']]],\n- ['nonlinearoptimizer_2ecpp_12', ['NonlinearOptimizer.cpp', ['../a01034.html', 1, '']]],\n- ['nonlinearoptimizer_2eh_13', ['NonlinearOptimizer.h', ['../a01094.html', 1, '']]],\n- ['nonlinearoptimizerparams_2ecpp_14', ['NonlinearOptimizerParams.cpp', ['../a01049.html', 1, '']]],\n- ['nonlinearoptimizerparams_2eh_15', ['NonlinearOptimizerParams.h', ['../a01076.html', 1, '']]],\n- ['numericalderivative_2eh_16', ['numericalDerivative.h', ['../a00143.html', 1, '']]]\n+ ['nonlinearisam_2eh_11', ['NonlinearISAM.h', ['../a01061.html', 1, '']]],\n+ ['nonlinearoptimizer_2ecpp_12', ['NonlinearOptimizer.cpp', ['../a01163.html', 1, '']]],\n+ ['nonlinearoptimizer_2eh_13', ['NonlinearOptimizer.h', ['../a01121.html', 1, '']]],\n+ ['nonlinearoptimizerparams_2ecpp_14', ['NonlinearOptimizerParams.cpp', ['../a01130.html', 1, '']]],\n+ ['nonlinearoptimizerparams_2eh_15', ['NonlinearOptimizerParams.h', ['../a01073.html', 1, '']]],\n+ ['numericalderivative_2eh_16', ['numericalDerivative.h', ['../a00074.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_e.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_e.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,5 +1,5 @@\n var searchData = [\n- ['optionaljacobian_2eh_0', ['OptionalJacobian.h', ['../a00137.html', 1, '']]],\n- ['ordering_2ecpp_1', ['Ordering.cpp', ['../a00581.html', 1, '']]],\n- ['ordering_2eh_2', ['Ordering.h', ['../a00674.html', 1, '']]]\n+ ['optionaljacobian_2eh_0', ['OptionalJacobian.h', ['../a00095.html', 1, '']]],\n+ ['ordering_2ecpp_1', ['Ordering.cpp', ['../a00689.html', 1, '']]],\n+ ['ordering_2eh_2', ['Ordering.h', ['../a00587.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/files_f.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/files_f.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,28 +1,28 @@\n var searchData = [\n- ['parametermatrix_2eh_0', ['ParameterMatrix.h', ['../a00152.html', 1, '']]],\n- ['pinholecamera_2eh_1', ['PinholeCamera.h', ['../a00458.html', 1, '']]],\n- ['pinholepose_2eh_2', ['PinholePose.h', ['../a00377.html', 1, '']]],\n- ['pinholeset_2eh_3', ['PinholeSet.h', ['../a00323.html', 1, '']]],\n- ['point2_2ecpp_4', ['Point2.cpp', ['../a00320.html', 1, '']]],\n- ['point2_2eh_5', ['Point2.h', ['../a00476.html', 1, '']]],\n- ['point3_2ecpp_6', ['Point3.cpp', ['../a00362.html', 1, '']]],\n- ['point3_2eh_7', ['Point3.h', ['../a00407.html', 1, '']]],\n- ['pose2_2ecpp_8', ['Pose2.cpp', ['../a00374.html', 1, '']]],\n- ['pose2_2eh_9', ['Pose2.h', ['../a00278.html', 1, '']]],\n- ['pose3_2ecpp_10', ['Pose3.cpp', ['../a00428.html', 1, '']]],\n- ['pose3_2eh_11', ['Pose3.h', ['../a00410.html', 1, '']]],\n- ['poserotationprior_2eh_12', ['PoseRotationPrior.h', ['../a01274.html', 1, '']]],\n- ['posetranslationprior_2eh_13', ['PoseTranslationPrior.h', ['../a01271.html', 1, '']]],\n- ['powermethod_2eh_14', ['PowerMethod.h', ['../a00728.html', 1, '']]],\n- ['precompiled_5fheader_2ecpp_15', ['precompiled_header.cpp', ['../a01403.html', 1, '']]],\n+ ['parametermatrix_2eh_0', ['ParameterMatrix.h', ['../a00161.html', 1, '']]],\n+ ['pinholecamera_2eh_1', ['PinholeCamera.h', ['../a00371.html', 1, '']]],\n+ ['pinholepose_2eh_2', ['PinholePose.h', ['../a00308.html', 1, '']]],\n+ ['pinholeset_2eh_3', ['PinholeSet.h', ['../a00311.html', 1, '']]],\n+ ['point2_2ecpp_4', ['Point2.cpp', ['../a00356.html', 1, '']]],\n+ ['point2_2eh_5', ['Point2.h', ['../a00431.html', 1, '']]],\n+ ['point3_2ecpp_6', ['Point3.cpp', ['../a00401.html', 1, '']]],\n+ ['point3_2eh_7', ['Point3.h', ['../a00383.html', 1, '']]],\n+ ['pose2_2ecpp_8', ['Pose2.cpp', ['../a00323.html', 1, '']]],\n+ ['pose2_2eh_9', ['Pose2.h', ['../a00284.html', 1, '']]],\n+ ['pose3_2ecpp_10', ['Pose3.cpp', ['../a00479.html', 1, '']]],\n+ ['pose3_2eh_11', ['Pose3.h', ['../a00278.html', 1, '']]],\n+ ['poserotationprior_2eh_12', ['PoseRotationPrior.h', ['../a01307.html', 1, '']]],\n+ ['posetranslationprior_2eh_13', ['PoseTranslationPrior.h', ['../a01301.html', 1, '']]],\n+ ['powermethod_2eh_14', ['PowerMethod.h', ['../a00755.html', 1, '']]],\n+ ['precompiled_5fheader_2ecpp_15', ['precompiled_header.cpp', ['../a01394.html', 1, '']]],\n ['precompiled_5fheader_2eh_16', ['precompiled_header.h', ['../a01397.html', 1, '']]],\n- ['preintegratedrotation_2ecpp_17', ['PreintegratedRotation.cpp', ['../a00935.html', 1, '']]],\n- ['preintegratedrotation_2eh_18', ['PreintegratedRotation.h', ['../a00986.html', 1, '']]],\n- ['preintegrationbase_2eh_19', ['PreintegrationBase.h', ['../a00914.html', 1, '']]],\n- ['preintegrationparams_2eh_20', ['PreintegrationParams.h', ['../a00923.html', 1, '']]],\n+ ['preintegratedrotation_2ecpp_17', ['PreintegratedRotation.cpp', ['../a00989.html', 1, '']]],\n+ ['preintegratedrotation_2eh_18', ['PreintegratedRotation.h', ['../a00971.html', 1, '']]],\n+ ['preintegrationbase_2eh_19', ['PreintegrationBase.h', ['../a00917.html', 1, '']]],\n+ ['preintegrationparams_2eh_20', ['PreintegrationParams.h', ['../a00965.html', 1, '']]],\n ['priorfactor_2eh_21', ['priorfactor.h', ['../a08152.html', 1, '(Global Namespace)'],\n ['../a08155.html', 1, '(Global Namespace)']\n ]],\n- ['productliegroup_2eh_22', ['ProductLieGroup.h', ['../a00023.html', 1, '']]],\n- ['projectionfactor_2eh_23', ['ProjectionFactor.h', ['../a01283.html', 1, '']]]\n+ ['productliegroup_2eh_22', ['ProductLieGroup.h', ['../a00014.html', 1, '']]],\n+ ['projectionfactor_2eh_23', ['ProjectionFactor.h', ['../a01337.html', 1, '']]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/functions_12.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/functions_12.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -163,15 +163,15 @@\n ['../a03228.html#a6b994c07306b4bd7b5e327d43826b750', 1, 'gtsam::Rot3::Rot3(const Matrix3 &R)'],\n ['../a03228.html#ab681d4d2916e7390b30239312aaf373f', 1, 'gtsam::Rot3::Rot3(const SO3 &R)'],\n ['../a03228.html#a439f4b2a000a5d1a1db1a493222ad2ec', 1, 'gtsam::Rot3::Rot3(const Quaternion &q)']\n ]],\n ['rot3attitudefactor_54', ['rot3attitudefactor', ['../a04084.html#a4e4f004110e20207646c5ed97065910f', 1, 'gtsam::Rot3AttitudeFactor::Rot3AttitudeFactor()'],\n ['../a04084.html#a6cf360ba0e94862339fadb61ce232c49', 1, 'gtsam::Rot3AttitudeFactor::Rot3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model, const Unit3 &bRef=Unit3(0, 0, 1))']\n ]],\n- ['rotate_55', ['rotate', ['../a00122.html#a644bbe6719d8dd756e11e8b3d2fd229a', 1, 'gtsam::testing::rotate()'],\n+ ['rotate_55', ['rotate', ['../a00011.html#a644bbe6719d8dd756e11e8b3d2fd229a', 1, 'gtsam::testing::rotate()'],\n ['../a03212.html#a2519597142ae3cb4c8dcedf11424bc69', 1, 'gtsam::Rot2::rotate()'],\n ['../a03228.html#acb55146464dbf21a89e4cce324a2ae62', 1, 'gtsam::Rot3::rotate(const Unit3 &p, OptionalJacobian< 2, 3 > HR=boost::none, OptionalJacobian< 2, 2 > Hp=boost::none) const'],\n ['../a03228.html#a89483be3c6be7b7aca15eea0be0f2bdd', 1, 'gtsam::Rot3::rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const'],\n ['../a03068.html#af9a4340182f05a4d1706d3c1ca5cc678', 1, 'gtsam::EssentialMatrix::rotate()']\n ]],\n ['rotatedirectionsfactor_56', ['RotateDirectionsFactor', ['../a04924.html#a2b5ada837b7cc3b3c6d0c175535eb330', 1, 'gtsam::RotateDirectionsFactor']]],\n ['rotatefactor_57', ['RotateFactor', ['../a04920.html#a27b0b48d60af56c8849a51e450e45718', 1, 'gtsam::RotateFactor']]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/functions_13.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/functions_13.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -30,15 +30,15 @@\n ['samplediagonal_3', ['samplediagonal', ['../a04020.html#a08133843c80b0d1ed906bf9051015847', 1, 'gtsam::Sampler::sampleDiagonal(const Vector &sigmas, std::mt19937_64 *rng)'],\n ['../a04020.html#a3c39257c64dd6f95fdc173aed274c724', 1, 'gtsam::Sampler::sampleDiagonal(const Vector &sigmas) const']\n ]],\n ['sampleinplace_4', ['sampleInPlace', ['../a02832.html#a9f46a6b647df05d8cb061f45e9e21dcf', 1, 'gtsam::DiscreteConditional']]],\n ['sampler_5', ['sampler', ['../a04020.html#a0e799f78224c4853560f87c293e14470', 1, 'gtsam::Sampler::Sampler(const noiseModel::Diagonal::shared_ptr &model, uint_fast64_t seed=42u)'],\n ['../a04020.html#a9b01291ff045243d1c73b112e36ea0a7', 1, 'gtsam::Sampler::Sampler(const Vector &sigmas, uint_fast64_t seed=42u)']\n ]],\n- ['save_6', ['save', ['../a00104.html#a068f1f8df2afd609744bc82386259e71', 1, 'boost::serialization::save()'],\n+ ['save_6', ['save', ['../a00038.html#a068f1f8df2afd609744bc82386259e71', 1, 'boost::serialization::save()'],\n ['../a01428.html#a09f2bbdb9f9d633542362dbe8d79f9ab', 1, 'gtsam::save(const Vector &A, const std::string &s, const std::string &filename)'],\n ['../a01428.html#a3eb7eed9019d3fda8fcf74fbf85b85c9', 1, 'gtsam::save(const Matrix &A, const std::string &s, const std::string &filename)']\n ]],\n ['save2d_7', ['save2D', ['../a01428.html#acfe516bc2d9ca4cc4530dd3b8460ce3d', 1, 'gtsam']]],\n ['savegraph_8', ['savegraph', ['../a04540.html#a9595ec6f743d18762bf758cffc394472', 1, 'gtsam::NonlinearFactorGraph::saveGraph()'],\n ['../a03540.html#af1e2601e723e63fc361bcf8a183e95c4', 1, 'gtsam::BayesTree::saveGraph()'],\n ['../a03516.html#ae0b05918d78c0dd95363bb4affc22f8a', 1, 'gtsam::BayesNet::saveGraph()'],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/functions_14.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/functions_14.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -28,15 +28,15 @@\n ['toquaternion_14', ['toQuaternion', ['../a03228.html#a61088cbea39ce3dd5a634004ff16683e', 1, 'gtsam::Rot3']]],\n ['totalreprojectionerror_15', ['totalreprojectionerror', ['../a04928.html#a882db94ae4f6d76b2ead0d9218676bc5', 1, 'gtsam::SmartFactorBase::totalReprojectionError()'],\n ['../a04936.html#aa30166ceca524f30644895be41d56e0e', 1, 'gtsam::SmartProjectionFactor::totalReprojectionError()']\n ]],\n ['traceexecution_16', ['traceExecution', ['../a04292.html#afecaa44a9cecec402c4ffd858de147dc', 1, 'gtsam::Expression']]],\n ['tracesize_17', ['traceSize', ['../a04292.html#afbfc8890e715ed28dcfc5e9e6077aebb', 1, 'gtsam::Expression']]],\n ['track_18', ['track', ['../a04704.html#a46b17be69d78037b9642966bcbea9df7', 1, 'gtsam::SfmData']]],\n- ['tracksfrompairwisematches_19', ['tracksFromPairwiseMatches', ['../a01211.html#ac50218675ff25e1e9202d335ecfa6b3a', 1, 'gtsam::gtsfm']]],\n+ ['tracksfrompairwisematches_19', ['tracksFromPairwiseMatches', ['../a01199.html#ac50218675ff25e1e9202d335ecfa6b3a', 1, 'gtsam::gtsfm']]],\n ['trans_20', ['trans', ['../a01428.html#aa2e36d7ab63000feddaeb61bbfcf2db1', 1, 'gtsam']]],\n ['transform_21', ['transform', ['../a03092.html#a646c180545ff02291b42eb74f2715a91', 1, 'gtsam::OrientedPlane3']]],\n ['transform_5fpoint_22', ['transform_point', ['../a01428.html#a80d640f59e5d39a1165069a3841cc5d1', 1, 'gtsam']]],\n ['transformfrom_23', ['transformfrom', ['../a03248.html#acb6fee49e06fc5cf8e0ece1ff0b175c1', 1, 'gtsam::Similarity2::transformFrom()'],\n ['../a03264.html#aa26f89eb7dbcdb6ec21570b4913cfd02', 1, 'gtsam::Similarity3::transformFrom(const Pose3 &T) const'],\n ['../a03264.html#ab7680b3620bc476049e93e421e1b4a8a', 1, 'gtsam::Similarity3::transformFrom(const Point3 &p, OptionalJacobian< 3, 7 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const'],\n ['../a03248.html#a1898429081dc56b9ef716761a5bc2a56', 1, 'gtsam::Similarity2::transformFrom()'],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/functions_2.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/functions_2.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -70,15 +70,15 @@\n ]],\n ['beginfrontals_24', ['beginfrontals', ['../a03572.html#acca063529671c6783551c694061f17ab', 1, 'gtsam::Conditional::beginFrontals() const'],\n ['../a03572.html#ab2b9bbc643244dbabfc6c82bee870499', 1, 'gtsam::Conditional::beginFrontals()']\n ]],\n ['beginparents_25', ['beginparents', ['../a03572.html#aa44803c99d5df7869d1151468c49afad', 1, 'gtsam::Conditional::beginParents()'],\n ['../a03572.html#af1f80fbcb599d244f1f83998996d34b0', 1, 'gtsam::Conditional::beginParents() const']\n ]],\n- ['between_26', ['between', ['../a00122.html#a72a7c561cc91f437a22023297fb7f658', 1, 'gtsam::testing::between()'],\n+ ['between_26', ['between', ['../a00011.html#a72a7c561cc91f437a22023297fb7f658', 1, 'gtsam::testing::between()'],\n ['../a02944.html#a9bba3f8020ee39cf143086e62572cbb7', 1, 'gtsam::Cal3_S2::between()']\n ]],\n ['between_5fdefault_27', ['between_default', ['../a01428.html#abd92914d0822d42584d46f31fb500048', 1, 'gtsam']]],\n ['betweenconstraint_28', ['BetweenConstraint', ['../a04772.html#a58f473a74ca49a13084db2d076278baa', 1, 'gtsam::BetweenConstraint']]],\n ['betweenfactor_29', ['betweenfactor', ['../a04764.html#a059852c5e2a89302b823baae2de62676', 1, 'gtsam::BetweenFactor::BetweenFactor()'],\n ['../a04764.html#a8b852f5210cb19fa5c31ff97a5aec20e', 1, 'gtsam::BetweenFactor::BetweenFactor(Key key1, Key key2, const VALUE &measured, const SharedNoiseModel &model=nullptr)']\n ]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/functions_3.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/functions_3.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -238,15 +238,15 @@\n ['componentderivativefactor_68', ['componentderivativefactor', ['../a02728.html#a16c7420cd2b6dbf6360357bb72cea7e2', 1, 'gtsam::ComponentDerivativeFactor::ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x, double a, double b)'],\n ['../a02728.html#a811f4b56b1fcc6948f75897a0ecc4a0d', 1, 'gtsam::ComponentDerivativeFactor::ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x)']\n ]],\n ['componentderivativefunctor_69', ['componentderivativefunctor', ['../a02700.html#a45eed4377c708dbabcf7c10c56ac4f96', 1, 'gtsam::Basis::ComponentDerivativeFunctor::ComponentDerivativeFunctor()'],\n ['../a02700.html#a04da6190c5893400645f886494919d11', 1, 'gtsam::Basis::ComponentDerivativeFunctor::ComponentDerivativeFunctor(size_t N, size_t i, double x)'],\n ['../a02700.html#a5315e7a143a157610def3e29c5877e89', 1, 'gtsam::Basis::ComponentDerivativeFunctor::ComponentDerivativeFunctor(size_t N, size_t i, double x, double a, double b)']\n ]],\n- ['compose_70', ['compose', ['../a00434.html#a72fc8b10f24d82aa8a4c99f99403fe5e', 1, 'gtsam::so3']]],\n+ ['compose_70', ['compose', ['../a00425.html#a72fc8b10f24d82aa8a4c99f99403fe5e', 1, 'gtsam::so3']]],\n ['composeposes_71', ['composePoses', ['../a01428.html#a62b34d6038ccdfa84d8a5bb0c15328b1', 1, 'gtsam']]],\n ['compute_72', ['compute', ['../a03716.html#ad7509723eb7602fc1b911bbde6061055', 1, 'gtsam::AcceleratedPowerMethod::compute()'],\n ['../a03980.html#adf125a55542b6b8889e1fbbf8ca6d412', 1, 'gtsam::PowerMethod::compute()']\n ]],\n ['computea_73', ['computea', ['../a04732.html#ac2f90d8c8f79596bab759bbbe2359210', 1, 'gtsam::ShonanAveraging::computeA(const Values &values) const'],\n ['../a04732.html#a72088abb3c741dfa2e9e2d6206690417', 1, 'gtsam::ShonanAveraging::computeA(const Matrix &S) const']\n ]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/functions_4.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/functions_4.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -5,15 +5,15 @@\n ['d2d_5fcalibration_1', ['d2d_calibration', ['../a02968.html#a298f80d64ca9fe2e0c6fd508a767599c', 1, 'gtsam::Cal3Bundler::D2d_calibration()'],\n ['../a02992.html#a3528f21cedb334863e95af30e342d6de', 1, 'gtsam::Cal3DS2_Base::D2d_calibration()']\n ]],\n ['d2d_5fintrinsic_2', ['d2d_intrinsic', ['../a02968.html#a2d2f5baf132f1c70cd55fab1defc66ec', 1, 'gtsam::Cal3Bundler::D2d_intrinsic()'],\n ['../a02992.html#a2a5de5d704c658de776503bc78f30575', 1, 'gtsam::Cal3DS2_Base::D2d_intrinsic()']\n ]],\n ['d2d_5fintrinsic_5fcalibration_3', ['D2d_intrinsic_calibration', ['../a02968.html#a130a3fee3d0c17fb1dfb3dab67ffdd66', 1, 'gtsam::Cal3Bundler']]],\n- ['dcompose_4', ['Dcompose', ['../a00434.html#a7c7e26b6d07ec0f16363c196247b294d', 1, 'gtsam::so3']]],\n+ ['dcompose_4', ['Dcompose', ['../a00425.html#a7c7e26b6d07ec0f16363c196247b294d', 1, 'gtsam::so3']]],\n ['deallocate_5f_5', ['deallocate_', ['../a02324.html#a93ec4963773f9cfcfdc34b437b0274b1', 1, 'gtsam::GenericValue::deallocate_()'],\n ['../a02596.html#a5a0554b9e0758f370073ea3cc5cf1c9f', 1, 'gtsam::Value::deallocate_()']\n ]],\n ['decideiftriangulate_6', ['decideIfTriangulate', ['../a04936.html#a13b6cc6b17c4de6ed2a254c18b01931d', 1, 'gtsam::SmartProjectionFactor']]],\n ['decisiontree_7', ['decisiontree', ['../a02796.html#a3a9a4b4209812f071c1225d9542fa443', 1, 'gtsam::DecisionTree::DecisionTree(const std::vector< LabelC > &labelCs, const std::string &table)'],\n ['../a02796.html#ad5533f615494992ac69b54571d2449b7', 1, 'gtsam::DecisionTree::DecisionTree(const DecisionTree< M, X > &other, const std::map< M, L > &map, Func Y_of_X)'],\n ['../a02796.html#a3fe8dfec74c488b61dfd157de62c8ef3', 1, 'gtsam::DecisionTree::DecisionTree(const DecisionTree< L, X > &other, Func Y_of_X)'],\n@@ -152,15 +152,15 @@\n ['../a04504.html#a7f892150e927e38368fe55971f001a5e', 1, 'gtsam::NoiseModelFactor::dim()'],\n ['../a04496.html#a5f0fcf1c93ded207d4a31e8ede07d797', 1, 'gtsam::NonlinearFactor::dim()'],\n ['../a04444.html#a2c23dfc1dbcc1646eecfd214a07e4e0e', 1, 'gtsam::LinearContainerFactor::dim()'],\n ['../a04064.html#a677694d125aaa594bfb6f6140937eb9a', 1, 'gtsam::VectorValues::dim()'],\n ['../a03380.html#a5cf9ee18166bb59b9ce142ce39e5bb7f', 1, 'gtsam::Unit3::dim()'],\n ['../a03512.html#ae5dd93ef47e0c4d90158b3fa14b1622c', 1, 'gtsam::MixtureFactor::dim()']\n ]],\n- ['dimensionso_49', ['DimensionSO', ['../a00344.html#afdaebcf25a03a9a9986d35d2831605dd', 1, 'gtsam::internal']]],\n+ ['dimensionso_49', ['DimensionSO', ['../a00389.html#afdaebcf25a03a9a9986d35d2831605dd', 1, 'gtsam::internal']]],\n ['dims_50', ['dims', ['../a04612.html#adc9c857e9b4775c8200e33c080d599ef', 1, 'gtsam::Values::dims()'],\n ['../a04292.html#a708f557c8b95ab8d3f047852b9ad7267', 1, 'gtsam::Expression::dims()']\n ]],\n ['direction_51', ['direction', ['../a03068.html#ac12aedc3267b87de73518edad3d3bfba', 1, 'gtsam::EssentialMatrix']]],\n ['directproduct_52', ['DirectProduct', ['../a02348.html#acfac23871b8e9ba54fdf2990e8fbbbeb', 1, 'gtsam::DirectProduct']]],\n ['directsum_53', ['DirectSum', ['../a02356.html#a920a249b3e2bf675eb9ae96ac25887b5', 1, 'gtsam::DirectSum']]],\n ['discrete_54', ['discrete', ['../a03504.html#a65423001d766d901944ea4796e3a73dd', 1, 'gtsam::HybridValues']]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/functions_5.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/functions_5.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -27,17 +27,17 @@\n ]],\n ['eliminateprefercholesky_12', ['EliminatePreferCholesky', ['../a01410.html#gadbb147d2a9039f67ad3b8b5515d2e5cc', 1, 'gtsam']]],\n ['eliminateqr_13', ['EliminateQR', ['../a01428.html#ab56c4bfa363f8c23c48eb078e9c84a9c', 1, 'gtsam']]],\n ['eliminatesequential_14', ['eliminatesequential', ['../a03580.html#a57b8e2b172a5857ec129b4baf07c0c8a', 1, 'gtsam::EliminateableFactorGraph::eliminateSequential(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const'],\n ['../a03580.html#a84279a0dfa8e1131847079ef6329de9d', 1, 'gtsam::EliminateableFactorGraph::eliminateSequential(OptionalOrderingType orderingType=boost::none, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const']\n ]],\n ['eliminatesymbolic_15', ['eliminatesymbolic', ['../a01428.html#a659f20993995258b1405737e375efd10', 1, 'gtsam::EliminateSymbolic()'],\n- ['../a01376.html#ae394348e1a503834f713405afa9afad8', 1, 'gtsam::internal::EliminateSymbolic()']\n+ ['../a01361.html#ae394348e1a503834f713405afa9afad8', 1, 'gtsam::internal::EliminateSymbolic()']\n ]],\n- ['eliminatetree_16', ['EliminateTree', ['../a00620.html#ae955942fde34b4cf32ac3573a1aa1e29', 1, 'gtsam::inference']]],\n+ ['eliminatetree_16', ['EliminateTree', ['../a00617.html#ae955942fde34b4cf32ac3573a1aa1e29', 1, 'gtsam::inference']]],\n ['eliminationtree_17', ['eliminationtree', ['../a03584.html#a2d9565551bfe73676f82d41d86f158a5', 1, 'gtsam::EliminationTree::EliminationTree(const This &other)'],\n ['../a03584.html#aacb8da2b775867c6bc7bc064ded4f68a', 1, 'gtsam::EliminationTree::EliminationTree()'],\n ['../a03584.html#a5767cf9b1e41ecdd681fc3c230e4a651', 1, 'gtsam::EliminationTree::EliminationTree(const FactorGraphType &factorGraph, const Ordering &order)'],\n ['../a03584.html#af9d86f2a1c1e084c02982d08b3512385', 1, 'gtsam::EliminationTree::EliminationTree(const FactorGraphType &factorGraph, const VariableIndex &structure, const Ordering &order)']\n ]],\n ['emplace_18', ['emplace', ['../a04064.html#a6109ac0252bed2254fffc76ebf7e32ca', 1, 'gtsam::VectorValues']]],\n ['emplace_5fback_19', ['emplace_back', ['../a03408.html#a63243de12d98219920ab32abc75f55e3', 1, 'gtsam::HybridBayesNet']]],\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/search/functions_9.js", "source2": "./usr/share/doc/libgtsam-dev/html/search/functions_9.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -106,15 +106,15 @@\n ['internalat_35', ['internalat', ['../a03700.html#a11479e896e15a83a49e9888c8a9f8ae3', 1, 'gtsam::VariableIndex::internalAt(Key variable) const'],\n ['../a03700.html#a820c6f5b0f83a1303d35dac9fd33a0a9', 1, 'gtsam::VariableIndex::internalAt(Key variable)']\n ]],\n ['interpolate_36', ['interpolate', ['../a01428.html#adaf06b04fa93b050e99bc3d571d85d53', 1, 'gtsam']]],\n ['interpolatert_37', ['interpolateRt', ['../a03180.html#a4a8f136a03b38e8f5fc8734f0977d8a7', 1, 'gtsam::Pose3']]],\n ['invalidargumentthreadsafe_38', ['InvalidArgumentThreadsafe', ['../a02508.html#a5b59c8bf5a4f3ed5ab5a3bdc4bb0dad2', 1, 'gtsam::InvalidArgumentThreadsafe']]],\n ['inverse_39', ['inverse', ['../a02940.html#a04db4819715db2034b5c055d06e39ad3', 1, 'gtsam::Cal3::inverse()'],\n- ['../a00122.html#aaa623dd059a67523b029af6ec20a38da', 1, 'gtsam::testing::inverse()'],\n+ ['../a00011.html#aaa623dd059a67523b029af6ec20a38da', 1, 'gtsam::testing::inverse()'],\n ['../a03304.html#a1c5250f64cea96dcbf0e443744a2f7de', 1, 'gtsam::SO::inverse()'],\n ['../a03264.html#a5873b80995627940cdf79da5b631fa6c', 1, 'gtsam::Similarity3::inverse()'],\n ['../a03248.html#a8676f15c94a681f722717c9e6194a578', 1, 'gtsam::Similarity2::inverse()'],\n ['../a03228.html#ab5e9bf20c7a5dc294012debdbd4f7acb', 1, 'gtsam::Rot3::inverse()'],\n ['../a03212.html#a4c5d02fd84eb445e2275a67c31af8453', 1, 'gtsam::Rot2::inverse()'],\n ['../a03180.html#aef9cc3d8b23d0f93c763781a59b2b70a', 1, 'gtsam::Pose3::inverse()'],\n ['../a03156.html#a438b73dbeda3e8c7818aeff5954f60b3', 1, 'gtsam::Pose2::inverse()']\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00002.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00044.js", "comments": ["Files 88% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,11 +1,11 @@\n-var a00002 = [\n+var a00044 = [\n [\"gtsam::manifold_tag\", \"a02388.html\", null],\n [\"gtsam::internal::HasManifoldPrereqs< Class >\", \"a02392.html\", null],\n [\"gtsam::internal::GetDimensionImpl< Class, N >\", \"a02396.html\", null],\n [\"gtsam::internal::GetDimensionImpl< Class, Eigen::Dynamic >\", \"a02400.html\", null],\n [\"gtsam::internal::ManifoldTraits< Class >\", \"a02404.html\", null],\n [\"gtsam::internal::Manifold< Class >\", \"a02408.html\", null],\n [\"gtsam::FixedDimension< T >\", \"a02412.html\", null],\n- [\"GTSAM_CONCEPT_MANIFOLD_INST\", \"a00002.html#a64b5e2e3c812d2cdea5ee294100f825f\", null],\n- [\"BOOST_CONCEPT_REQUIRES\", \"a00002.html#ae03a6aedf0a82f67c2f3e987fb3aacba\", null]\n+ [\"GTSAM_CONCEPT_MANIFOLD_INST\", \"a00044.html#a64b5e2e3c812d2cdea5ee294100f825f\", null],\n+ [\"BOOST_CONCEPT_REQUIRES\", \"a00044.html#ae03a6aedf0a82f67c2f3e987fb3aacba\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00017.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01364.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastDefaultAllocator.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesTree.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
FastDefaultAllocator.h File Reference
\n+Namespaces
\n+
SymbolicBayesTree.h File Reference
\n \n
\n \n-

An easy way to control which allocator is used for Fast* collections. \n-More...

\n-\n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n \n-\n-\n+\n \n

\n Classes

struct  gtsam::internal::FastDefaultAllocator< T >
 Default allocator for list, map, and set types. More...
class  gtsam::SymbolicBayesTreeClique
 A clique in a SymbolicBayesTree. More...
 
class  gtsam::SymbolicBayesTree
 A Bayes tree that represents the connectivity between variables but is not associated with any probability functions. More...
 
struct  gtsam::traits< SymbolicBayesTreeClique >
 traits More...
 
struct  gtsam::internal::FastDefaultVectorAllocator< T >
 Default allocator for vector types (we never use boost pool for vectors) More...
struct  gtsam::traits< SymbolicBayesTree >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

An easy way to control which allocator is used for Fast* collections.

\n-
Author
Richard Roberts
\n-
Date
Aug 15, 2013
\n+
Date
Oct 29, 2009
\n+
Author
Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n-FastDefaultAllocator.h File Reference\n-An easy way to control which allocator is used for Fast* collections. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+SymbolicBayesTree.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n-\u00a0 Default allocator for list, map, and set types. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n+\u00a0 A clique in a _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bV_\be_\bc_\bt_\bo_\br_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bT_\b _\b>\n-\u00a0 Default allocator for vector types (we never use boost pool for\n- vectors) _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+\u00a0 A Bayes tree that represents the connectivity between variables but is\n+ not associated with any probability functions. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-An easy way to control which allocator is used for Fast* collections.\n+ Date\n+ Oct 29, 2009\n Author\n+ Frank Dellaert\n Richard Roberts\n- Date\n- Aug 15, 2013\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00047.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00113.html", "comments": ["Files 80% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/types.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Vector.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n \n
\n \n-
types.h File Reference
\n+
Vector.h File Reference
\n
\n
\n \n-

Typedefs for easier changing of types. \n+

typedef and functions to augment Eigen's VectorXd \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\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-Classes

struct  gtsam::const_selector< TEST_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
 Helper class that uses templates to select between two types based on whether TEST_TYPE is const or not. More...
 
struct  gtsam::const_selector< BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
 Specialization for the non-const version. More...
 
struct  gtsam::const_selector< const BASIC_TYPE, BASIC_TYPE, AS_NON_CONST, AS_CONST >
 Specialization for the const version. More...
 
struct  gtsam::ValueWithDefault< T, defaultValue >
 Helper struct that encapsulates a value with a default, this is just used as a member object so you don't have to specify defaults in the class constructor. More...
 
class  gtsam::ListOfOneContainer< T >
 A helper class that behaves as a container with one element, and works with boost::range. More...
 
class  gtsam::TbbOpenMPMixedScope
 An object whose scope defines a block where TBB and OpenMP parallelism are mixed. More...
 
struct  gtsam::needs_eigen_aligned_allocator< typename, typename >
 A SFINAE trait to mark classes that need special alignment. More...
 
struct  gtsam::needs_eigen_aligned_allocator< T, void_t< typename T::_eigen_aligned_allocator_trait > >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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 Macros

\n-#define GTSAM_DEPRECATED
 
\n-#define DO_PRAGMA(x)   _Pragma (#x)
 
\n-#define CLANG_DIAGNOSTIC_PUSH_IGNORE(diag)
 
\n-#define GCC_DIAGNOSTIC_PUSH_IGNORE(diag)
 
\n-#define MSVC_DIAGNOSTIC_PUSH_IGNORE(code)
 
\n-#define DIAGNOSTIC_POP()
 
#define assert_throw(CONDITION, EXCEPTION)
 An assertion that throws an exception if NDEBUG is not defined and evaluates to an empty statement otherwise.
 
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
 This marks a GTSAM object to require alignment.
 
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
 This marks a GTSAM object to require alignment.
 
\n+#define MKL_BLAS   MKL_DOMAIN_BLAS
 
#define GTSAM_MAKE_VECTOR_DEFS(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 Typedefs

\n-typedef std::uint64_t gtsam::Key
 Integer nonlinear key type.
 
\n-typedef std::uint64_t gtsam::FactorIndex
 Integer nonlinear factor index type.
 
\n-typedef ptrdiff_t gtsam::DenseIndex
 The index type for Eigen objects.
 
\n-template<typename ... >
using gtsam::void_t = void
 Convenience void_t as we assume C++11, it will not conflict the std one in C++17 as this is in gtsam::
 
\n+typedef Eigen::VectorXd gtsam::Vector
 
\n+typedef Eigen::Matrix< double, 1, 1 > gtsam::Vector1
 
\n+typedef Eigen::Vector2d gtsam::Vector2
 
\n+typedef Eigen::Vector3d gtsam::Vector3
 
\n+typedef Eigen::VectorBlock< Vector > gtsam::SubVector
 
\n+typedef Eigen::VectorBlock< const Vector > gtsam::ConstSubVector
 
\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 Functions

std::string gtsam::demangle (const char *name)
 Pretty print Value type name.
 
\n- gtsam::BOOST_CONCEPT_ASSERT ((boost::RandomAccessRangeConcept< ListOfOneContainer< int > >))
 
\n-template<typename T >
ListOfOneContainer< T > gtsam::ListOfOne (const T &element)
 Factory function for ListOfOneContainer to enable ListOfOne(e) syntax.
 
bool gtsam::fpEqual (double a, double b, double tol, bool check_relative_also=true)
 Ensure we are not including a different version of Eigen in user code than while compiling gtsam, since it can lead to hard-to-understand runtime crashes.
 
\n+void gtsam::print (const Vector &v, const std::string &s, std::ostream &stream)
 print without optional string, must specify cout yourself
 
\n+void gtsam::print (const Vector &v, const std::string &s="")
 print with optional string to cout
 
\n+void gtsam::save (const Vector &A, const std::string &s, const std::string &filename)
 save a vector to file, which can be loaded by matlab
 
\n+bool gtsam::operator== (const Vector &vec1, const Vector &vec2)
 operator==()
 
\n+bool gtsam::greaterThanOrEqual (const Vector &v1, const Vector &v2)
 Greater than or equal to operation returns true if all elements in v1 are greater than corresponding elements in v2.
 
\n+bool gtsam::equal_with_abs_tol (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 VecA == VecB up to tolerance.
 
\n+bool gtsam::equal_with_abs_tol (const SubVector &vec1, const SubVector &vec2, double tol)
 
\n+bool gtsam::equal (const Vector &vec1, const Vector &vec2, double tol)
 Override of equal in Lie.h.
 
\n+bool gtsam::equal (const Vector &vec1, const Vector &vec2)
 Override of equal in Lie.h.
 
bool gtsam::assert_equal (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 Same, prints if error.
 
bool gtsam::assert_inequal (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 Not the same, prints if error.
 
bool gtsam::assert_equal (const SubVector &vec1, const SubVector &vec2, double tol=1e-9)
 Same, prints if error.
 
\n+bool gtsam::assert_equal (const ConstSubVector &expected, const ConstSubVector &actual, double tol)
 
bool gtsam::linear_dependent (const Vector &vec1, const Vector &vec2, double tol=1e-9)
 check whether two vectors are linearly dependent
 
Vector gtsam::ediv_ (const Vector &a, const Vector &b)
 elementwise division, but 0/0 = 0, not inf
 
\n+template<class V1 , class V2 >
double gtsam::dot (const V1 &a, const V2 &b)
 Dot product.
 
\n+template<class V1 , class V2 >
double gtsam::inner_prod (const V1 &a, const V2 &b)
 compatibility version for ublas' inner_prod()
 
pair< double, Vector > gtsam::house (const Vector &x)
 house(x,j) computes HouseHolder vector v and scaling factor beta from x, such that the corresponding Householder reflection zeroes out all but x.
 
\n+double gtsam::houseInPlace (Vector &x)
 beta = house(x) computes the HouseHolder vector in place
 
pair< Vector, double > gtsam::weightedPseudoinverse (const Vector &v, const Vector &weights)
 Weighted Householder solution vector, a.k.a., the pseudoinverse of the column NOTE: if any sigmas are zero (indicating a constraint) the pseudoinverse will be a selection vector, and the variance will be zero.
 
\n+double gtsam::weightedPseudoinverse (const Vector &a, const Vector &weights, Vector &pseudo)
 
\n+Vector gtsam::concatVectors (const std::list< Vector > &vs)
 concatenate Vectors
 
\n+Vector gtsam::concatVectors (size_t nrVectors,...)
 concatenate Vectors
 
\n

Detailed Description

\n-

Typedefs for easier changing of types.

\n-
Author
Richard Roberts
\n-
Date
Aug 21, 2010
\n+

typedef and functions to augment Eigen's VectorXd

\n+
Author
Kai Ni
\n+
\n+Frank Dellaert
\n+
\n+Alex Hagiopol
\n+
\n+Varun Agrawal
\n

Macro Definition Documentation

\n-\n-

◆ assert_throw

\n+\n+

◆ GTSAM_MAKE_VECTOR_DEFS

\n \n
\n
\n \n \n- \n+ \n \n \n- \n- \n- \n- \n- \n- \n- \n- \n- \n+ \n \n- \n- \n \n
#define assert_throw#define GTSAM_MAKE_VECTOR_DEFS( CONDITION,
 EXCEPTION 
N))
\n
\n-Value:
if (!(CONDITION)) { \\
\n-
throw (EXCEPTION); \\
\n-
}
\n+Value:
using Vector##N = Eigen::Matrix<double, N, 1>; \\
\n+
static const Eigen::MatrixBase<Vector##N>::ConstantReturnType Z_##N##x1 = Vector##N::Zero();
\n
\n-

An assertion that throws an exception if NDEBUG is not defined and evaluates to an empty statement otherwise.

\n-\n-
\n-
\n-\n-

◆ GTSAM_MAKE_ALIGNED_OPERATOR_NEW

\n-\n-
\n-
\n- \n- \n- \n- \n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
\n-
\n-Value:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW \\
\n-
using _eigen_aligned_allocator_trait = void;
\n-
\n-

This marks a GTSAM object to require alignment.

\n-

With this macro an object will automatically be allocated in aligned memory when one uses gtsam::make_shared. It reduces future misalignment problems that is hard to debug. See https://eigen.tuxfamily.org/dox/group__DenseMatrixManipulation__Alignement.html for detailed explanation.

\n-\n-
\n-
\n-\n-

◆ GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF

\n-\n-
\n-
\n- \n- \n- \n- \n- \n- \n- \n- \n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF( NeedsToAlign)
\n-
\n-Value:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\
\n-
using _eigen_aligned_allocator_trait = void;
\n-
\n-

This marks a GTSAM object to require alignment.

\n-

With this macro an object will automatically be allocated in aligned memory when one uses gtsam::make_shared. It reduces future misalignment problems that is hard to debug. See https://eigen.tuxfamily.org/dox/group__DenseMatrixManipulation__Alignement.html for detailed explanation.

\n-\n
\n
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,138 +1,147 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-types.h File Reference\n-_\bB_\ba_\bs_\be\n-Typedefs for easier changing of types. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Vector.h File Reference\n+typedef and functions to augment Eigen's VectorXd _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br_\b<_\b _\bT_\bE_\bS_\bT_\b__\bT_\bY_\bP_\bE_\b,_\b _\bB_\bA_\bS_\bI_\bC_\b__\bT_\bY_\bP_\bE_\b,_\b _\bA_\bS_\b__\bN_\bO_\bN_\b__\bC_\bO_\bN_\bS_\bT_\b,_\b _\bA_\bS_\b__\bC_\bO_\bN_\bS_\bT_\b _\b>\n-\u00a0 Helper class that uses templates to select between two types based on\n- whether TEST_TYPE is const or not. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br_\b<_\b _\bB_\bA_\bS_\bI_\bC_\b__\bT_\bY_\bP_\bE_\b,_\b _\bB_\bA_\bS_\bI_\bC_\b__\bT_\bY_\bP_\bE_\b,_\b _\bA_\bS_\b__\bN_\bO_\bN_\b__\bC_\bO_\bN_\bS_\bT_\b,_\b _\bA_\bS_\b__\bC_\bO_\bN_\bS_\bT\n- _\b>\n-\u00a0 Specialization for the non-const version. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bo_\br_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bB_\bA_\bS_\bI_\bC_\b__\bT_\bY_\bP_\bE_\b,_\b _\bB_\bA_\bS_\bI_\bC_\b__\bT_\bY_\bP_\bE_\b,_\b _\bA_\bS_\b__\bN_\bO_\bN_\b__\bC_\bO_\bN_\bS_\bT_\b,\n- _\bA_\bS_\b__\bC_\bO_\bN_\bS_\bT_\b _\b>\n-\u00a0 Specialization for the const version. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b<_\b _\bT_\b,_\b _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bV_\ba_\bl_\bu_\be_\b _\b>\n- Helper struct that encapsulates a value with a default, this is just\n-\u00a0 used as a member object so you don't have to specify defaults in the\n- class constructor. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br_\b<_\b _\bT_\b _\b>\n-\u00a0 A helper class that behaves as a container with one element, and works\n- with boost::range. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bb_\bb_\bO_\bp_\be_\bn_\bM_\bP_\bM_\bi_\bx_\be_\bd_\bS_\bc_\bo_\bp_\be\n-\u00a0 An object whose scope defines a block where TBB and OpenMP parallelism\n- are mixed. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\b>\n-\u00a0 A SFINAE trait to mark classes that need special alignment. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\be_\be_\bd_\bs_\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\b _\bT_\b,_\b _\bv_\bo_\bi_\bd_\b__\bt_\b<_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bT_\b:_\b:\n- _\b__\be_\bi_\bg_\be_\bn_\b__\ba_\bl_\bi_\bg_\bn_\be_\bd_\b__\ba_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b__\bt_\br_\ba_\bi_\bt_\b _\b>_\b _\b>\n-\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_D\bDE\bEP\bPR\bRE\bEC\bCA\bAT\bTE\bED\bD\n-\u00a0\n-#define\u00a0 D\bDO\bO_\b_P\bPR\bRA\bAG\bGM\bMA\bA(x)\u00a0\u00a0\u00a0_Pragma (#x)\n-\u00a0\n-#define\u00a0 C\bCL\bLA\bAN\bNG\bG_\b_D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bC_\b_P\bPU\bUS\bSH\bH_\b_I\bIG\bGN\bNO\bOR\bRE\bE(diag)\n-\u00a0\n-#define\u00a0 G\bGC\bCC\bC_\b_D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bC_\b_P\bPU\bUS\bSH\bH_\b_I\bIG\bGN\bNO\bOR\bRE\bE(diag)\n+#define\u00a0 M\bMK\bKL\bL_\b_B\bBL\bLA\bAS\bS\u00a0\u00a0\u00a0MKL_DOMAIN_BLAS\n \u00a0\n-#define\u00a0 M\bMS\bSV\bVC\bC_\b_D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bC_\b_P\bPU\bUS\bSH\bH_\b_I\bIG\bGN\bNO\bOR\bRE\bE(code)\n+#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bV_\bE_\bC_\bT_\bO_\bR_\b__\bD_\bE_\bF_\bS(N)\n \u00a0\n-#define\u00a0 D\bDI\bIA\bAG\bGN\bNO\bOS\bST\bTI\bIC\bC_\b_P\bPO\bOP\bP()\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+ typedef Eigen::VectorXd\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br\n \u00a0\n-#define\u00a0 _\ba_\bs_\bs_\be_\br_\bt_\b__\bt_\bh_\br_\bo_\bw(CONDITION, EXCEPTION)\n-\u00a0 An assertion that throws an exception if NDEBUG is not defined and\n- evaluates to an empty statement otherwise.\n+ typedef Eigen::Matrix< double, 1, 1 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br1\b1\n \u00a0\n-#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-\u00a0 This marks a GTSAM object to require alignment.\n+ typedef Eigen::Vector2d\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br2\b2\n \u00a0\n-#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(NeedsToAlign)\n-\u00a0 This marks a GTSAM object to require alignment.\n+ typedef Eigen::Vector3d\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bec\bct\bto\bor\br3\b3\n \u00a0\n-T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n-typedef std::uint64_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\by\n-\u00a0 Integer nonlinear key type.\n+ typedef Eigen::VectorBlock< Vector >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSu\bub\bbV\bVe\bec\bct\bto\bor\br\n \u00a0\n-typedef std::uint64_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:F\bFa\bac\bct\bto\bor\brI\bIn\bnd\bde\bex\bx\n-\u00a0 Integer nonlinear factor index type.\n+typedef Eigen::VectorBlock< const Vector >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:C\bCo\bon\bns\bst\btS\bSu\bub\bbV\bVe\bec\bct\bto\bor\br\n \u00a0\n- typedef ptrdiff_t\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDe\ben\bns\bse\beI\bIn\bnd\bde\bex\bx\n-\u00a0 The index type for Eigen objects.\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bf_\bp_\bE_\bq_\bu_\ba_\bl (double a, double b, double tol, bool\n+ check_relative_also=true)\n+ Ensure we are not including a different version of\n+\u00a0 Eigen in user code than while compiling gtsam, since it\n+ can lead to hard-to-understand runtime crashes.\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Vector &v, const std::string &s,\n+ std::ostream &stream)\n+\u00a0 print without optional string, must specify cout\n+ yourself\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const Vector &v, const std::string &s=\"\")\n+\u00a0 print with optional string to cout\n+\u00a0\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsa\bav\bve\be (const Vector &A, const std::string &s,\n+ const std::string &filename)\n+\u00a0 save a vector to file, which can be loaded by matlab\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br=\b==\b= (const Vector &vec1, const Vector\n+ &vec2)\n+\u00a0 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=_\b(_\b)\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:g\bgr\bre\bea\bat\bte\ber\brT\bTh\bha\ban\bnO\bOr\brE\bEq\bqu\bua\bal\bl (const Vector &v1, const\n+ Vector &v2)\n+ Greater than or equal to operation returns true if all\n+\u00a0 elements in v1 are greater than corresponding elements\n+ in v2.\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl_\b_w\bwi\bit\bth\bh_\b_a\bab\bbs\bs_\b_t\bto\bol\bl (const Vector &vec1, const\n+ Vector &vec2, double tol=1e-9)\n+\u00a0 VecA == VecB up to tolerance.\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl_\b_w\bwi\bit\bth\bh_\b_a\bab\bbs\bs_\b_t\bto\bol\bl (const SubVector &vec1, const\n+ SubVector &vec2, double tol)\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl (const Vector &vec1, const Vector &vec2,\n+ double tol)\n+\u00a0 Override of equal in _\bL_\bi_\be_\b._\bh.\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl (const Vector &vec1, const Vector &vec2)\n+\u00a0 Override of equal in _\bL_\bi_\be_\b._\bh.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl (const Vector &vec1, const Vector\n+ &vec2, double tol=1e-9)\n+\u00a0 Same, prints if error.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\bi_\bn_\be_\bq_\bu_\ba_\bl (const Vector &vec1, const Vector\n+ &vec2, double tol=1e-9)\n+\u00a0 Not the same, prints if error.\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl (const SubVector &vec1, const\n+ SubVector &vec2, double tol=1e-9)\n+\u00a0 Same, prints if error.\n+\u00a0\n+ bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const ConstSubVector &expected,\n+ const ConstSubVector &actual, double tol)\n+\u00a0\n+ bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\b__\bd_\be_\bp_\be_\bn_\bd_\be_\bn_\bt (const Vector &vec1, const\n+ Vector &vec2, double tol=1e-9)\n+\u00a0 check whether two vectors are linearly dependent\n+\u00a0\n+ Vector\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bd_\bi_\bv_\b_ (const Vector &a, const Vector &b)\n+\u00a0 elementwise division, but 0/0 = 0, not inf\n+\u00a0\n+template\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdo\bot\bt (const V1 &a, const V2 &b)\n+\u00a0 Dot product.\n+\u00a0\n+template\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnn\bne\ber\br_\b_p\bpr\bro\bod\bd (const V1 &a, const V2 &b)\n+\u00a0 compatibility version for ublas' _\bi_\bn_\bn_\be_\br_\b__\bp_\br_\bo_\bd_\b(_\b)\n+\u00a0\n+pair< double, Vector >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bo_\bu_\bs_\be (const Vector &x)\n+ house(x,j) computes HouseHolder vector v and scaling\n+\u00a0 factor beta from x, such that the corresponding\n+ Householder reflection zeroes out all but x.\n+\u00a0\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:h\bho\bou\bus\bse\beI\bIn\bnP\bPl\bla\bac\bce\be (Vector &x)\n+\u00a0 beta = house(x) computes the HouseHolder vector in\n+ place\n+\u00a0\n+pair< Vector, double >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\be_\bd_\bP_\bs_\be_\bu_\bd_\bo_\bi_\bn_\bv_\be_\br_\bs_\be (const Vector &v, const\n+ Vector &weights)\n+ Weighted Householder solution vector, a.k.a., the\n+\u00a0 pseudoinverse of the column NOTE: if any sigmas are\n+ zero (indicating a constraint) the pseudoinverse will\n+ be a selection vector, and the variance will be zero.\n \u00a0\n-template\n- using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:v\bvo\boi\bid\bd_\b_t\bt = void\n-\u00a0 Convenience void_t as we assume C++11, it will not\n- conflict the std one in C++17 as this is in gtsam::\n+ double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:w\bwe\bei\big\bgh\bht\bte\bed\bdP\bPs\bse\beu\bud\bdo\boi\bin\bnv\bve\ber\brs\bse\be (const Vector &a, const\n+ Vector &weights, Vector &pseudo)\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- std::string\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bm_\ba_\bn_\bg_\bl_\be (const char *name)\n-\u00a0 Pretty print _\bV_\ba_\bl_\bu_\be type name.\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnc\bca\bat\btV\bVe\bec\bct\bto\bor\brs\bs (const std::list< Vector > &vs)\n+\u00a0 concatenate Vectors\n \u00a0\n- \u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBO\bOO\bOS\bST\bT_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_A\bAS\bSS\bSE\bER\bRT\bT ((boost::\n- RandomAccessRangeConcept< _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br< int >\n- >))\n-\u00a0\n-template\n-_\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br< T >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:L\bLi\bis\bst\btO\bOf\bfO\bOn\bne\be (const T &element)\n-\u00a0 Factory function for _\bL_\bi_\bs_\bt_\bO_\bf_\bO_\bn_\be_\bC_\bo_\bn_\bt_\ba_\bi_\bn_\be_\br to enable\n- ListOfOne(e) syntax.\n+ Vector\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bon\bnc\bca\bat\btV\bVe\bec\bct\bto\bor\brs\bs (size_t nrVectors,...)\n+\u00a0 concatenate Vectors\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Typedefs for easier changing of types.\n+typedef and functions to augment Eigen's VectorXd\n Author\n- Richard Roberts\n- Date\n- Aug 21, 2010\n+ Kai Ni\n+ Frank Dellaert\n+ Alex Hagiopol\n+ Varun Agrawal\n *\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0a\bas\bss\bse\ber\brt\bt_\b_t\bth\bhr\bro\bow\bw *\b**\b**\b**\b**\b*\n-#define assert_throw ( \u00a0 CONDITION,\n- \u00a0 EXCEPTION\u00a0\n- )\n-V\bVa\bal\blu\bue\be:\b:\n-if (!(CONDITION)) { \\\n-throw (EXCEPTION); \\\n-}\n-An assertion that throws an exception if NDEBUG is not defined and evaluates to\n-an empty statement otherwise.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_M\bMA\bAK\bKE\bE_\b_A\bAL\bLI\bIG\bGN\bNE\bED\bD_\b_O\bOP\bPE\bER\bRA\bAT\bTO\bOR\bR_\b_N\bNE\bEW\bW *\b**\b**\b**\b**\b*\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-V\bVa\bal\blu\bue\be:\b:\n-EIGEN_MAKE_ALIGNED_OPERATOR_NEW \\\n-using _eigen_aligned_allocator_trait = void;\n-This marks a GTSAM object to require alignment.\n-With this macro an object will automatically be allocated in aligned memory\n-when one uses _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd. It reduces future misalignment problems that\n-is hard to debug. See _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\be_\bi_\bg_\be_\bn_\b._\bt_\bu_\bx_\bf_\ba_\bm_\bi_\bl_\by_\b._\bo_\br_\bg_\b/_\bd_\bo_\bx_\b/\n-_\bg_\br_\bo_\bu_\bp_\b__\b__\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\bM_\ba_\bn_\bi_\bp_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b__\b__\bA_\bl_\bi_\bg_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bt_\bm_\bl for detailed explanation.\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_M\bMA\bAK\bKE\bE_\b_A\bAL\bLI\bIG\bGN\bNE\bED\bD_\b_O\bOP\bPE\bER\bRA\bAT\bTO\bOR\bR_\b_N\bNE\bEW\bW_\b_I\bIF\bF *\b**\b**\b**\b**\b*\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF ( \u00a0 NeedsToAlign )\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_M\bMA\bAK\bKE\bE_\b_V\bVE\bEC\bCT\bTO\bOR\bR_\b_D\bDE\bEF\bFS\bS *\b**\b**\b**\b**\b*\n+#define GTSAM_MAKE_VECTOR_DEFS ( \u00a0 N )\n V\bVa\bal\blu\bue\be:\b:\n-EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign) \\\n-using _eigen_aligned_allocator_trait = void;\n-This marks a GTSAM object to require alignment.\n-With this macro an object will automatically be allocated in aligned memory\n-when one uses _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd. It reduces future misalignment problems that\n-is hard to debug. See _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\be_\bi_\bg_\be_\bn_\b._\bt_\bu_\bx_\bf_\ba_\bm_\bi_\bl_\by_\b._\bo_\br_\bg_\b/_\bd_\bo_\bx_\b/\n-_\bg_\br_\bo_\bu_\bp_\b__\b__\bD_\be_\bn_\bs_\be_\bM_\ba_\bt_\br_\bi_\bx_\bM_\ba_\bn_\bi_\bp_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\b__\b__\bA_\bl_\bi_\bg_\bn_\be_\bm_\be_\bn_\bt_\b._\bh_\bt_\bm_\bl for detailed explanation.\n+using Vector##N = Eigen::Matrix; \\\n+static const Eigen::MatrixBase::ConstantReturnType Z_##N##x1 =\n+Vector##N::Zero();\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bt_\by_\bp_\be_\bs_\b._\bh\n+ * _\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00065.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00110.html", "comments": ["Files 92% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Testable.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n \n
\n \n-
Group.h File Reference
\n+Functions
\n+
Testable.h File Reference
\n
\n
\n \n-

Concept check class for variable types with Group properties. \n+

Concept check for values that can be used in unit tests. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\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 Classes

struct  gtsam::group_tag
 tag to assert a type is a group More...
class  gtsam::IsTestable< T >
 A testable concept check that should be placed in applicable unit tests and in generic algorithms. More...
 
struct  gtsam::multiplicative_group_tag
 Group operator syntax flavors. More...
struct  gtsam::equals< V >
 Template to create a binary predicate. More...
 
struct  gtsam::additive_group_tag
struct  gtsam::equals_star< V >
 Binary predicate on shared pointers. More...
 
class  gtsam::IsGroup< G >
 Group Concept. More...
struct  gtsam::HasTestablePrereqs< T >
 Requirements on type to pass it to Testable template below. More...
 
class  gtsam::DirectProduct
 
struct  gtsam::traits< DirectProduct< G, H > >
 
class  gtsam::DirectSum< G, H >
 Template to construct the direct sum of two additive groups Assumes existence of three additive operators for both groups. More...
 
struct  gtsam::traits< DirectSum< G, H > >
struct  gtsam::Testable< T >
 A helper that implements the traits interface for GTSAM types. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n

\n Macros

#define GTSAM_CONCEPT_GROUP_INST(T)   template class gtsam::IsGroup<T>;
 Macros for using the IsGroup.
 
\n-#define GTSAM_CONCEPT_GROUP_TYPE(T)   typedef gtsam::IsGroup<T> _gtsam_IsGroup_##T;
 
\n+#define GTSAM_PRINT(x)   ((x).print(#x))
 
#define GTSAM_CONCEPT_TESTABLE_INST(T)   template class gtsam::IsTestable<T>;
 Macros for using the TestableConcept.
 
\n+#define GTSAM_CONCEPT_TESTABLE_TYPE(T)   using _gtsam_Testable_##T = gtsam::IsTestable<T>;
 
\n \n-\n-\n-\n-\n-

\n Functions

\n-template<typename G >
 gtsam::BOOST_CONCEPT_REQUIRES (((IsGroup< G >)),(bool)) check_group_invariants(const G &a
 Check invariants.
 
\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n-Variables

\n-const G & gtsam::b
 
\n-const G double gtsam::tol
 
\n+void gtsam::print (float v, const std::string &s="")
 
\n+void gtsam::print (double v, const std::string &s="")
 
\n+template<class T >
bool gtsam::equal (const T &obj1, const T &obj2, double tol)
 Call equal on the object.
 
\n+template<class T >
bool gtsam::equal (const T &obj1, const T &obj2)
 Call equal without tolerance (use default tolerance)
 
\n+template<class V >
bool gtsam::assert_equal (const V &expected, const V &actual, double tol=1e-9)
 This template works for any type with equals.
 
\n

Detailed Description

\n-

Concept check class for variable types with Group properties.

\n-
Date
November, 2011
\n-
Author
Alex Cunningham
\n-
\n-Frank Dellaert
\n+

Concept check for values that can be used in unit tests.

\n+
Author
Frank Dellaert
\n+

The necessary functions to implement for Testable are defined below with additional details as to the interface. The concept checking function will check whether or not the function exists in derived class and throw compile-time errors.

\n+

print with optional string naming the object void print(const std::string& name) const = 0;

\n+

equality up to tolerance tricky to implement, see PriorFactor for an example equals is not supposed to print out anything, just return true|false bool equals(const Derived& expected, double tol) const = 0;

\n

Macro Definition Documentation

\n-\n-

◆ GTSAM_CONCEPT_GROUP_INST

\n+\n+

◆ GTSAM_CONCEPT_TESTABLE_INST

\n \n
\n
\n \n \n- \n+ \n \n \n \n- \n+ \n \n
#define GTSAM_CONCEPT_GROUP_INST#define GTSAM_CONCEPT_TESTABLE_INST( T)   template class gtsam::IsGroup<T>;   template class gtsam::IsTestable<T>;
\n
\n \n-

Macros for using the IsGroup.

\n+

Macros for using the TestableConcept.

\n
    \n
  • An instantiation for use inside unit tests
  • \n
  • A typedef for use inside generic algorithms
  • \n
\n-

NOTE: intentionally not in the gtsam namespace to allow for classes not in the gtsam namespace to be more easily enforced as testable

\n+

NOTE: intentionally not in the gtsam namespace to allow for classes not in the gtsam namespace to be more easily enforced as testable

Deprecated:
please use BOOST_CONCEPT_ASSERT and
\n \n
\n
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,72 +1,84 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs | _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-Group.h File Reference\n-Concept check class for variable types with Group properties. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Testable.h File Reference\n+Concept check for values that can be used in unit tests. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-\u00a0 tag to assert a type is a group _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\b _\bT_\b _\b>\n+\u00a0 A testable concept check that should be placed in applicable unit\n+ tests and in generic algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-\u00a0 Group operator syntax flavors. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs_\b<_\b _\bV_\b _\b>\n+\u00a0 Template to create a binary predicate. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs_\b__\bs_\bt_\ba_\br_\b<_\b _\bV_\b _\b>\n+\u00a0 Binary predicate on shared pointers. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\b _\bG_\b _\b>\n-\u00a0 Group Concept. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\bP_\br_\be_\br_\be_\bq_\bs_\b<_\b _\bT_\b _\b>\n+\u00a0 Requirements on type to pass it to _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be template below. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt_\b<_\b _\bG_\b,_\b _\bH_\b _\b>_\b _\b>\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm_\b<_\b _\bG_\b,_\b _\bH_\b _\b>\n-\u00a0 Template to construct the direct sum of two additive groups Assumes\n- existence of three additive operators for both groups. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm_\b<_\b _\bG_\b,_\b _\bH_\b _\b>_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\b _\bT_\b _\b>\n+\u00a0 A helper that implements the traits interface for GTSAM types. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bG_\bR_\bO_\bU_\bP_\b__\bI_\bN_\bS_\bT(T)\u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp;\n-\u00a0 Macros for using the IsGroup.\n+#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_P\bPR\bRI\bIN\bNT\bT(x)\u00a0\u00a0\u00a0((x).print(#x))\n \u00a0\n-#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_G\bGR\bRO\bOU\bUP\bP_\b_T\bTY\bYP\bPE\bE(T)\u00a0\u00a0\u00a0typedef _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp\n- _gtsam_IsGroup_##T;\n+#define\u00a0 _\bG_\bT_\bS_\bA_\bM_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bT_\bE_\bS_\bT_\bA_\bB_\bL_\bE_\b__\bI_\bN_\bS_\bT(T)\u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be;\n+\u00a0 Macros for using the TestableConcept.\n+\u00a0\n+#define\u00a0 G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_T\bTE\bES\bST\bTA\bAB\bBL\bLE\bE_\b_T\bTY\bYP\bPE\bE(T)\u00a0\u00a0\u00a0using _gtsam_Testable_##T = _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n+ _\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be;\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:B\bBO\bOO\bOS\bST\bT_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_R\bRE\bEQ\bQU\bUI\bIR\bRE\bES\bS (((_\bI_\bs_\bG_\br_\bo_\bu_\bp< G >)),(bool))\n- check_group_invariants(const G &a\n-\u00a0 Check invariants.\n+void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (float v, const std::string &s=\"\")\n+\u00a0\n+void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (double v, const std::string &s=\"\")\n+\u00a0\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl (const T &obj1, const T &obj2, double tol)\n+\u00a0 Call equal on the object.\n \u00a0\n-V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs\n- const G &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:b\bb\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bl (const T &obj1, const T &obj2)\n+\u00a0 Call equal without tolerance (use default tolerance)\n \u00a0\n-const G double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bto\bol\bl\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bas\bss\bse\ber\brt\bt_\b_e\beq\bqu\bua\bal\bl (const V &expected, const V &actual, double tol=1e-9)\n+\u00a0 This template works for any type with equals.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Concept check class for variable types with Group properties.\n- Date\n- November, 2011\n+Concept check for values that can be used in unit tests.\n Author\n- Alex Cunningham\n Frank Dellaert\n+The necessary functions to implement for Testable are defined below with\n+additional details as to the interface. The concept checking function will\n+check whether or not the function exists in derived class and throw compile-\n+time errors.\n+print with optional string naming the object void print(const std::string&\n+name) const = 0;\n+equality up to tolerance tricky to implement, see PriorFactor for an example\n+equals is not supposed to print out a\ban\bny\byt\bth\bhi\bin\bng\bg, just return true|false bool\n+equals(const Derived& expected, double tol) const = 0;\n *\b**\b**\b**\b**\b* M\bMa\bac\bcr\bro\bo D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_G\bGR\bRO\bOU\bUP\bP_\b_I\bIN\bNS\bST\bT *\b**\b**\b**\b**\b*\n-#define GTSAM_CONCEPT_GROUP_INST ( \u00a0 T ) \u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp;\n-Macros for using the IsGroup.\n+*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0G\bGT\bTS\bSA\bAM\bM_\b_C\bCO\bON\bNC\bCE\bEP\bPT\bT_\b_T\bTE\bES\bST\bTA\bAB\bBL\bLE\bE_\b_I\bIN\bNS\bST\bT *\b**\b**\b**\b**\b*\n+#define GTSAM_CONCEPT_TESTABLE_INST ( \u00a0 T ) \u00a0\u00a0\u00a0template class _\bg_\bt_\bs_\ba_\bm_\b:_\b:\n+ _\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be;\n+Macros for using the TestableConcept.\n * An instantiation for use inside unit tests\n * A typedef for use inside generic algorithms\n NOTE: intentionally not in the gtsam namespace to allow for classes not in the\n gtsam namespace to be more easily enforced as testable\n+ _\bD\bD_\be\be_\bp\bp_\br\br_\be\be_\bc\bc_\ba\ba_\bt\bt_\be\be_\bd\bd_\b:\b:\n+ please use BOOST_CONCEPT_ASSERT and\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bG_\br_\bo_\bu_\bp_\b._\bh\n+ * _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00065.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00056.js", "comments": ["Files 98% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,12 +1,12 @@\n-var a00065 = [\n+var a00056 = [\n [\"gtsam::group_tag\", \"a02332.html\", null],\n [\"gtsam::multiplicative_group_tag\", \"a02336.html\", null],\n [\"gtsam::additive_group_tag\", \"a02340.html\", null],\n [\"gtsam::IsGroup< G >\", \"a02344.html\", null],\n [\"gtsam::DirectProduct\", \"a02348.html\", \"a02348\"],\n [\"gtsam::traits< DirectProduct< G, H > >\", \"a02352.html\", null],\n [\"gtsam::DirectSum< G, H >\", \"a02356.html\", \"a02356\"],\n [\"gtsam::traits< DirectSum< G, H > >\", \"a02360.html\", null],\n- [\"GTSAM_CONCEPT_GROUP_INST\", \"a00065.html#aac1ea136475ea605715c809f4b3f0156\", null],\n- [\"BOOST_CONCEPT_REQUIRES\", \"a00065.html#a2e95b5b5508cf3284107e979401bd1a4\", null]\n+ [\"GTSAM_CONCEPT_GROUP_INST\", \"a00056.html#aac1ea136475ea605715c809f4b3f0156\", null],\n+ [\"BOOST_CONCEPT_REQUIRES\", \"a00056.html#a2e95b5b5508cf3284107e979401bd1a4\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00065_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00107_source.html", "comments": ["Files 91% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Group.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/treeTraversal-inst.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Group.h
\n+
treeTraversal-inst.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n-
22
\n-
23#include <gtsam/base/Testable.h>
\n-
24
\n-
25#include <boost/concept_check.hpp>
\n-
26#include <boost/concept/requires.hpp>
\n-
27#include <boost/type_traits/is_base_of.hpp>
\n-
28#include <boost/static_assert.hpp>
\n-
29#include <utility>
\n-
30
\n-
31namespace gtsam {
\n+
17#pragma once
\n+
18
\n+
19#include <gtsam/base/treeTraversal/parallelTraversalTasks.h>
\n+
20#include <gtsam/base/treeTraversal/statistics.h>
\n+
21
\n+
22#include <gtsam/base/FastList.h>
\n+\n+
24#include <gtsam/inference/Key.h>
\n+
25#include <gtsam/config.h> // for GTSAM_USE_TBB
\n+
26
\n+
27#include <stack>
\n+
28#include <vector>
\n+
29#include <string>
\n+
30#include <boost/shared_ptr.hpp>
\n+
31#include <boost/make_shared.hpp>
\n
32
\n-
34struct group_tag {};
\n-
35
\n-\n-\n-
39
\n-
40template <typename T> struct traits;
\n-
41
\n-
45template<typename G>
\n-
\n-
46class IsGroup {
\n-
47public:
\n-
48 typedef typename traits<G>::structure_category structure_category_tag;
\n-
49 typedef typename traits<G>::group_flavor flavor_tag;
\n-
50 //typedef typename traits<G>::identity::value_type identity_value_type;
\n+
33namespace gtsam {
\n+
34
\n+
\n+
36namespace treeTraversal {
\n+
37
\n+
38/* ************************************************************************* */
\n+
39namespace {
\n+
40// Internal node used in DFS preorder stack
\n+
41template<typename NODE, typename DATA>
\n+
42struct TraversalNode {
\n+
43 bool expanded;
\n+
44 const boost::shared_ptr<NODE>& treeNode;
\n+
45 DATA& parentData;
\n+
46 typename FastList<DATA>::iterator dataPointer;
\n+
47 TraversalNode(const boost::shared_ptr<NODE>& _treeNode, DATA& _parentData) :
\n+
48 expanded(false), treeNode(_treeNode), parentData(_parentData) {
\n+
49 }
\n+
50};
\n
51
\n-
52 BOOST_CONCEPT_USAGE(IsGroup) {
\n-
53 BOOST_STATIC_ASSERT_MSG(
\n-
54 (boost::is_base_of<group_tag, structure_category_tag>::value),
\n-
55 "This type's structure_category trait does not assert it as a group (or derived)");
\n-\n-
57 e = traits<G>::Compose(g, h);
\n-
58 e = traits<G>::Between(g, h);
\n-
59 e = traits<G>::Inverse(g);
\n-
60 operator_usage(flavor);
\n-
61 // todo: how do we test the act concept? or do we even need to?
\n-
62 }
\n-
63
\n-
64private:
\n-
65 void operator_usage(multiplicative_group_tag) {
\n-
66 e = g * h;
\n-
67 //e = -g; // todo this should work, but it is failing for Quaternions
\n-
68 }
\n-
69 void operator_usage(additive_group_tag) {
\n-
70 e = g + h;
\n-
71 e = h - g;
\n-
72 e = -g;
\n-
73 }
\n-
74
\n-
75 flavor_tag flavor;
\n-
76 G e, g, h;
\n-
77 bool b;
\n-
78};
\n-
\n-
79
\n-
81template<typename G>
\n-\n-
83check_group_invariants(const G& a, const G& b, double tol = 1e-9) {
\n-
84 G e = traits<G>::Identity();
\n-\n-\n-\n-
88}
\n-
89
\n-
90namespace internal {
\n-
91
\n-
94template<class Class>
\n-
95struct MultiplicativeGroupTraits {
\n-
96 typedef group_tag structure_category;
\n-
97 typedef multiplicative_group_tag group_flavor;
\n-
98 static Class Identity() { return Class::Identity(); }
\n-
99 static Class Compose(const Class &g, const Class & h) { return g * h;}
\n-
100 static Class Between(const Class &g, const Class & h) { return g.inverse() * h;}
\n-
101 static Class Inverse(const Class &g) { return g.inverse();}
\n-
102};
\n-
103
\n-
105template<class Class>
\n-
106struct MultiplicativeGroup : MultiplicativeGroupTraits<Class>, Testable<Class> {};
\n-
107
\n-
110template<class Class>
\n-
111struct AdditiveGroupTraits {
\n-
112 typedef group_tag structure_category;
\n-
113 typedef additive_group_tag group_flavor;
\n-
114 static Class Identity() { return Class::Identity(); }
\n-
115 static Class Compose(const Class &g, const Class & h) { return g + h;}
\n-
116 static Class Between(const Class &g, const Class & h) { return h - g;}
\n-
117 static Class Inverse(const Class &g) { return -g;}
\n-
118};
\n-
119
\n-
121template<class Class>
\n-
122struct AdditiveGroup : AdditiveGroupTraits<Class>, Testable<Class> {};
\n-
123
\n-
124} // namespace internal
\n-
125
\n-
127template<typename G>
\n-
128BOOST_CONCEPT_REQUIRES(((IsGroup<G>)),(G)) //
\n-
129compose_pow(const G& g, size_t n) {
\n-
130 if (n == 0) return traits<G>::Identity();
\n-
131 else if (n == 1) return g;
\n-
132 else return traits<G>::Compose(compose_pow(g, n - 1), g);
\n-
133}
\n-
134
\n-
137template<typename G, typename H>
\n-
\n-
138class DirectProduct: public std::pair<G, H> {
\n-
139 BOOST_CONCEPT_ASSERT((IsGroup<G>));
\n-
140 BOOST_CONCEPT_ASSERT((IsGroup<H>));
\n-
141
\n-
142public:
\n-
144 DirectProduct():std::pair<G,H>(traits<G>::Identity(),traits<H>::Identity()) {}
\n-
145
\n-
146 // Construct from two subgroup elements
\n-
147 DirectProduct(const G& g, const H& h):std::pair<G,H>(g,h) {}
\n-
148
\n-
149 // identity
\n-
150 static DirectProduct Identity() { return DirectProduct(); }
\n-
151
\n-
152 DirectProduct operator*(const DirectProduct& other) const {
\n-
153 return DirectProduct(traits<G>::Compose(this->first, other.first),
\n-
154 traits<H>::Compose(this->second, other.second));
\n-
155 }
\n-
156 DirectProduct inverse() const {
\n-
157 return DirectProduct(this->first.inverse(), this->second.inverse());
\n-
158 }
\n-
159};
\n-
\n+
52// Do nothing - default argument for post-visitor for tree traversal
\n+
53struct no_op {
\n+
54 template<typename NODE, typename DATA>
\n+
55 void operator()(const boost::shared_ptr<NODE>& node, const DATA& data) {
\n+
56 }
\n+
57};
\n+
58
\n+
59}
\n+
60
\n+
75template<class FOREST, typename DATA, typename VISITOR_PRE,
\n+
76 typename VISITOR_POST>
\n+
\n+
77void DepthFirstForest(FOREST& forest, DATA& rootData, VISITOR_PRE& visitorPre,
\n+
78 VISITOR_POST& visitorPost) {
\n+
79 // Typedefs
\n+
80 typedef typename FOREST::Node Node;
\n+
81 typedef boost::shared_ptr<Node> sharedNode;
\n+
82
\n+
83 // Depth first traversal stack
\n+
84 typedef TraversalNode<typename FOREST::Node, DATA> TraversalNode;
\n+
85 typedef FastList<TraversalNode> Stack;
\n+
86 Stack stack;
\n+
87 FastList<DATA> dataList; // List to store node data as it is returned from the pre-order visitor
\n+
88
\n+
89 // Add roots to stack (insert such that they are visited and processed in order
\n+
90 {
\n+
91 typename Stack::iterator insertLocation = stack.begin();
\n+
92 for(const sharedNode& root: forest.roots())
\n+
93 stack.insert(insertLocation, TraversalNode(root, rootData));
\n+
94 }
\n+
95
\n+
96 // Traverse
\n+
97 while (!stack.empty()) {
\n+
98 // Get next node
\n+
99 TraversalNode& node = stack.front();
\n+
100
\n+
101 if (node.expanded) {
\n+
102 // If already expanded, then the data stored in the node is no longer needed, so visit
\n+
103 // then delete it.
\n+
104 (void) visitorPost(node.treeNode, *node.dataPointer);
\n+
105 dataList.erase(node.dataPointer);
\n+
106 stack.pop_front();
\n+
107 } else {
\n+
108 // If not already visited, visit the node and add its children (use reverse iterators so
\n+
109 // children are processed in the order they appear)
\n+
110 node.dataPointer = dataList.insert(dataList.end(),
\n+
111 visitorPre(node.treeNode, node.parentData));
\n+
112 typename Stack::iterator insertLocation = stack.begin();
\n+
113 for(const sharedNode& child: node.treeNode->children)
\n+
114 stack.insert(insertLocation, TraversalNode(child, *node.dataPointer));
\n+
115 node.expanded = true;
\n+
116 }
\n+
117 }
\n+
118 assert(dataList.empty());
\n+
119}
\n+
\n+
120
\n+
132template<class FOREST, typename DATA, typename VISITOR_PRE>
\n+
\n+
133void DepthFirstForest(FOREST& forest, DATA& rootData, VISITOR_PRE& visitorPre) {
\n+
134 no_op visitorPost;
\n+
135 DepthFirstForest(forest, rootData, visitorPre, visitorPost);
\n+
136}
\n+
\n+
137
\n+
152template<class FOREST, typename DATA, typename VISITOR_PRE,
\n+
153 typename VISITOR_POST>
\n+
\n+
154void DepthFirstForestParallel(FOREST& forest, DATA& rootData,
\n+
155 VISITOR_PRE& visitorPre, VISITOR_POST& visitorPost,
\n+
156 int problemSizeThreshold = 10) {
\n+
157#ifdef GTSAM_USE_TBB
\n+
158 // Typedefs
\n+
159 typedef typename FOREST::Node Node;
\n
160
\n-
161// Define any direct product group to be a model of the multiplicative Group concept
\n-
162template<typename G, typename H>
\n-
\n-
163struct traits<DirectProduct<G, H> > :
\n-
164 internal::MultiplicativeGroupTraits<DirectProduct<G, H> > {};
\n-
\n-
165
\n-
168template<typename G, typename H>
\n-
\n-
169class DirectSum: public std::pair<G, H> {
\n-
170 BOOST_CONCEPT_ASSERT((IsGroup<G>)); // TODO(frank): check additive
\n-
171 BOOST_CONCEPT_ASSERT((IsGroup<H>)); // TODO(frank): check additive
\n-
172
\n-
173 const G& g() const { return this->first; }
\n-
174 const H& h() const { return this->second;}
\n-
175
\n-
176public:
\n-
178 DirectSum():std::pair<G,H>(traits<G>::Identity(),traits<H>::Identity()) {}
\n-
179
\n-
180 // Construct from two subgroup elements
\n-
181 DirectSum(const G& g, const H& h):std::pair<G,H>(g,h) {}
\n+
161 internal::CreateRootTask<Node>(forest.roots(), rootData, visitorPre,
\n+
162 visitorPost, problemSizeThreshold);
\n+
163#else
\n+
164 DepthFirstForest(forest, rootData, visitorPre, visitorPost);
\n+
165#endif
\n+
166}
\n+
\n+
167
\n+
168/* ************************************************************************* */
\n+
170namespace {
\n+
171template<typename NODE>
\n+
172boost::shared_ptr<NODE> CloneForestVisitorPre(
\n+
173 const boost::shared_ptr<NODE>& node,
\n+
174 const boost::shared_ptr<NODE>& parentPointer) {
\n+
175 // Clone the current node and add it to its cloned parent
\n+
176 boost::shared_ptr<NODE> clone = boost::make_shared<NODE>(*node);
\n+
177 clone->children.clear();
\n+
178 parentPointer->children.push_back(clone);
\n+
179 return clone;
\n+
180}
\n+
181}
\n
182
\n-
183 // identity
\n-
184 static DirectSum Identity() { return DirectSum(); }
\n-
185
\n-
186 DirectSum operator+(const DirectSum& other) const {
\n-
187 return DirectSum(g()+other.g(), h()+other.h());
\n-
188 }
\n-
189 DirectSum operator-(const DirectSum& other) const {
\n-
190 return DirectSum(g()-other.g(), h()-other.h());
\n-
191 }
\n-
192 DirectSum operator-() const {
\n-
193 return DirectSum(- g(), - h());
\n-
194 }
\n-
195};
\n-
\n-
196
\n-
197// Define direct sums to be a model of the Additive Group concept
\n-
198template<typename G, typename H>
\n-
\n-
199struct traits<DirectSum<G, H> > :
\n-
200 internal::AdditiveGroupTraits<DirectSum<G, H> > {};
\n-
\n-
201
\n-
202} // namespace gtsam
\n-
203
\n-
212#define GTSAM_CONCEPT_GROUP_INST(T) template class gtsam::IsGroup<T>;
\n-
213#define GTSAM_CONCEPT_GROUP_TYPE(T) typedef gtsam::IsGroup<T> _gtsam_IsGroup_##T;
\n-
Concept check for values that can be used in unit tests.
\n+
188template<class FOREST>
\n+
\n+\n+
190 const FOREST& forest) {
\n+
191 typedef typename FOREST::Node Node;
\n+
192 boost::shared_ptr<Node> rootContainer = boost::make_shared<Node>();
\n+
193 DepthFirstForest(forest, rootContainer, CloneForestVisitorPre<Node>);
\n+
194 return FastVector<boost::shared_ptr<Node> >(rootContainer->children.begin(),
\n+
195 rootContainer->children.end());
\n+
196}
\n+
\n+
197
\n+
198/* ************************************************************************* */
\n+
200namespace {
\n+
201struct PrintForestVisitorPre {
\n+
202 const KeyFormatter& formatter;
\n+
203 PrintForestVisitorPre(const KeyFormatter& formatter) :
\n+
204 formatter(formatter) {
\n+
205 }
\n+
206 template<typename NODE> std::string operator()(
\n+
207 const boost::shared_ptr<NODE>& node, const std::string& parentString) {
\n+
208 // Print the current node
\n+
209 node->print(parentString + "-", formatter);
\n+
210 // Increment the indentation
\n+
211 return parentString + "| ";
\n+
212 }
\n+
213};
\n+
214}
\n+
215
\n+
218template<class FOREST>
\n+
\n+
219void PrintForest(const FOREST& forest, std::string str,
\n+
220 const KeyFormatter& keyFormatter) {
\n+
221 PrintForestVisitorPre visitor(keyFormatter);
\n+
222 DepthFirstForest(forest, str, visitor);
\n+
223}
\n+
\n+
224} // namespace treeTraversal
\n+
\n+
225
\n+
226} // namespace gtsam
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n+\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
BOOST_CONCEPT_REQUIRES(((IsGroup< G >)),(bool)) check_group_invariants(const G &a
Check invariants.
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
tag to assert a type is a group
Definition Group.h:34
\n-
Group operator syntax flavors.
Definition Group.h:37
\n-
Definition Group.h:38
\n-
Group Concept.
Definition Group.h:46
\n-
Definition Group.h:138
\n-
DirectProduct()
Default constructor yields identity.
Definition Group.h:144
\n-
Template to construct the direct sum of two additive groups Assumes existence of three additive opera...
Definition Group.h:169
\n-
DirectSum()
Default constructor yields identity.
Definition Group.h:178
\n+
Matrix stack(size_t nrMatrices,...)
create a matrix by stacking other matrices Given a set of matrices: A1, A2, A3...
Definition Matrix.cpp:397
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:77
\n+
FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const FOREST &forest)
Clone a tree, copy-constructing new nodes (calling boost::make_shared) and setting up child pointers ...
Definition treeTraversal-inst.h:189
\n+
void PrintForest(const FOREST &forest, std::string str, const KeyFormatter &keyFormatter)
Print a tree, prefixing each line with str, and formatting keys using keyFormatter.
Definition treeTraversal-inst.h:219
\n+
void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)
Traverse a forest depth-first with pre-order and post-order visits.
Definition treeTraversal-inst.h:154
\n+
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,237 +1,243 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Group.h\n+treeTraversal-inst.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-24\n-25#include \n-26#include \n-27#include \n-28#include \n-29#include \n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n+17#pragma once\n+18\n+19#include \n+20#include \n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+25#include // for GTSAM_USE_TBB\n+26\n+27#include \n+28#include \n+29#include \n+30#include \n+31#include \n 32\n-_\b3_\b4struct _\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg {};\n-35\n-_\b3_\b7struct _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg {};\n-_\b3_\b8struct _\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg {};\n-39\n-40template struct _\bt_\br_\ba_\bi_\bt_\bs;\n-41\n-45template\n-_\b4_\b6class _\bI_\bs_\bG_\br_\bo_\bu_\bp {\n-47public:\n-48 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by structure_category_tag;\n-49 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br flavor_tag;\n-50 //typedef typename traits::identity::value_type identity_value_type;\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n+34\n+_\b3_\b6namespace treeTraversal {\n+37\n+38/* *************************************************************************\n+*/\n+39namespace {\n+40// Internal node used in DFS preorder stack\n+41template\n+42struct TraversalNode {\n+43 bool expanded;\n+44 const boost::shared_ptr& treeNode;\n+45 DATA& parentData;\n+46 typename _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bD_\bA_\bT_\bA_\b>_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br dataPointer;\n+47 TraversalNode(const boost::shared_ptr& _treeNode, DATA& _parentData) :\n+48 expanded(false), treeNode(_treeNode), parentData(_parentData) {\n+49 }\n+50};\n 51\n-52 BOOST_CONCEPT_USAGE(_\bI_\bs_\bG_\br_\bo_\bu_\bp) {\n-53 BOOST_STATIC_ASSERT_MSG(\n-54 (boost::is_base_of::value),\n-55 \"This type's structure_category trait does not assert it as a group (or\n-derived)\");\n-56 e = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by();\n-57 e = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(g, h);\n-58 e = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(g, h);\n-59 e = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bI_\bn_\bv_\be_\br_\bs_\be(g);\n-60 operator_usage(flavor);\n-61 // todo: how do we test the act concept? or do we even need to?\n-62 }\n-63\n-64private:\n-65 void operator_usage(_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg) {\n-66 e = g * h;\n-67 //e = -g; // todo this should work, but it is failing for Quaternions\n-68 }\n-69 void operator_usage(_\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg) {\n-70 e = g + h;\n-71 e = h - g;\n-72 e = -g;\n-73 }\n-74\n-75 flavor_tag flavor;\n-76 G e, g, h;\n-77 bool b;\n-78};\n-79\n-81template\n-_\b8_\b2_\bB_\bO_\bO_\bS_\bT_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bR_\bE_\bQ_\bU_\bI_\bR_\bE_\bS(((_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\bG_\b>)),(bool)) //\n-83check_group_invariants(const G& a, const G& b, double tol = 1e-9) {\n-84 G e = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by();\n-85 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(a, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bI_\bn_\bv_\be_\br_\bs_\be(a)), e,\n-tol)\n-86 && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(a, b), _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be\n-(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bI_\bn_\bv_\be_\br_\bs_\be(a), b), tol)\n-87 && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(a, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bG_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(a, b)), b,\n-tol);\n-88}\n-89\n-90namespace internal {\n-91\n-94template\n-95struct MultiplicativeGroupTraits {\n-96 typedef group_tag structure_category;\n-97 typedef multiplicative_group_tag group_flavor;\n-98 static Class Identity() { return Class::Identity(); }\n-99 static Class Compose(const Class &g, const Class & h) { return g * h;}\n-100 static Class Between(const Class &g, const Class & h) { return g.inverse()\n-* h;}\n-101 static Class Inverse(const Class &g) { return g.inverse();}\n-102};\n-103\n-105template\n-106struct MultiplicativeGroup : MultiplicativeGroupTraits,\n-Testable {};\n-107\n-110template\n-111struct AdditiveGroupTraits {\n-112 typedef group_tag structure_category;\n-113 typedef additive_group_tag group_flavor;\n-114 static Class Identity() { return Class::Identity(); }\n-115 static Class Compose(const Class &g, const Class & h) { return g + h;}\n-116 static Class Between(const Class &g, const Class & h) { return h - g;}\n-117 static Class Inverse(const Class &g) { return -g;}\n-118};\n-119\n-121template\n-122struct AdditiveGroup : AdditiveGroupTraits, Testable {};\n-123\n-124} // namespace internal\n-125\n-127template\n-128_\bB_\bO_\bO_\bS_\bT_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bR_\bE_\bQ_\bU_\bI_\bR_\bE_\bS(((IsGroup)),(G)) //\n-129compose_pow(const G& g, size_t n) {\n-130 if (n == 0) return traits::Identity();\n-131 else if (n == 1) return g;\n-132 else return traits::Compose(compose_pow(g, n - 1), g);\n-133}\n-134\n-137template\n-_\b1_\b3_\b8class _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt: public std::pair {\n-139 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\bG_\b>));\n-140 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\bH_\b>));\n-141\n-142public:\n-_\b1_\b4_\b4 _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt():std::pair(_\bt_\br_\ba_\bi_\bt_\bs::Identity(),_\bt_\br_\ba_\bi_\bt_\bs::Identity())\n-{}\n-145\n-146 // Construct from two subgroup elements\n-147 _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt(const G& g, const H& h):std::pair(g,h) {}\n-148\n-149 // identity\n-150 static _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt Identity() { return _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt(); }\n-151\n-152 _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt operator*(const _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt& other) const {\n-153 return _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt(traits::Compose(this->first, other.first),\n-154 traits::Compose(this->second, other.second));\n-155 }\n-156 _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt inverse() const {\n-157 return _\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt(this->first.inverse(), this->second.inverse());\n-158 }\n-159};\n+52// Do nothing - default argument for post-visitor for tree traversal\n+53struct no_op {\n+54 template\n+55 void operator()(const boost::shared_ptr& node, const DATA& data) {\n+56 }\n+57};\n+58\n+59}\n+60\n+75template\n+_\b7_\b7void _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(FOREST& forest, DATA& rootData, VISITOR_PRE&\n+visitorPre,\n+78 VISITOR_POST& visitorPost) {\n+79 // Typedefs\n+80 typedef typename FOREST::Node Node;\n+81 typedef boost::shared_ptr sharedNode;\n+82\n+83 // Depth first traversal stack\n+84 typedef TraversalNode TraversalNode;\n+85 typedef _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\bN_\bo_\bd_\be_\b> Stack;\n+86 Stack _\bs_\bt_\ba_\bc_\bk;\n+87 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bD_\bA_\bT_\bA_\b> dataList; // List to store node data as it is returned from\n+the pre-order visitor\n+88\n+89 // Add roots to stack (insert such that they are visited and processed in\n+order\n+90 {\n+91 typename Stack::iterator insertLocation = _\bs_\bt_\ba_\bc_\bk.begin();\n+92 for(const sharedNode& root: forest.roots())\n+93 _\bs_\bt_\ba_\bc_\bk.insert(insertLocation, TraversalNode(root, rootData));\n+94 }\n+95\n+96 // Traverse\n+97 while (!_\bs_\bt_\ba_\bc_\bk.empty()) {\n+98 // Get next node\n+99 TraversalNode& node = _\bs_\bt_\ba_\bc_\bk.front();\n+100\n+101 if (node.expanded) {\n+102 // If already expanded, then the data stored in the node is no longer\n+needed, so visit\n+103 // then delete it.\n+104 (void) visitorPost(node.treeNode, *node.dataPointer);\n+105 dataList.erase(node.dataPointer);\n+106 _\bs_\bt_\ba_\bc_\bk.pop_front();\n+107 } else {\n+108 // If not already visited, visit the node and add its children (use reverse\n+iterators so\n+109 // children are processed in the order they appear)\n+110 node.dataPointer = dataList.insert(dataList.end(),\n+111 visitorPre(node.treeNode, node.parentData));\n+112 typename Stack::iterator insertLocation = _\bs_\bt_\ba_\bc_\bk.begin();\n+113 for(const sharedNode& child: node.treeNode->children)\n+114 _\bs_\bt_\ba_\bc_\bk.insert(insertLocation, TraversalNode(child, *node.dataPointer));\n+115 node.expanded = true;\n+116 }\n+117 }\n+118 assert(dataList.empty());\n+119}\n+120\n+132template\n+_\b1_\b3_\b3void _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(FOREST& forest, DATA& rootData, VISITOR_PRE&\n+visitorPre) {\n+134 no_op visitorPost;\n+135 _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(forest, rootData, visitorPre, visitorPost);\n+136}\n+137\n+152template\n+_\b1_\b5_\b4void _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl(FOREST& forest, DATA& rootData,\n+155 VISITOR_PRE& visitorPre, VISITOR_POST& visitorPost,\n+156 int problemSizeThreshold = 10) {\n+157#ifdef GTSAM_USE_TBB\n+158 // Typedefs\n+159 typedef typename FOREST::Node Node;\n 160\n-161// Define any direct product group to be a model of the multiplicative Group\n-concept\n-162template\n-_\b1_\b6_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt > :\n-164 internal::MultiplicativeGroupTraits > {};\n-165\n-168template\n-_\b1_\b6_\b9class _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm: public std::pair {\n-170 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\bG_\b>)); // TODO(frank): check additive\n-171 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bG_\br_\bo_\bu_\bp_\b<_\bH_\b>)); // TODO(frank): check additive\n-172\n-173 const G& g() const { return this->first; }\n-174 const H& h() const { return this->second;}\n-175\n-176public:\n-_\b1_\b7_\b8 _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm():std::pair(_\bt_\br_\ba_\bi_\bt_\bs::Identity(),_\bt_\br_\ba_\bi_\bt_\bs::Identity()) {}\n-179\n-180 // Construct from two subgroup elements\n-181 _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm(const G& g, const H& h):std::pair(g,h) {}\n+161 internal::CreateRootTask(forest.roots(), rootData, visitorPre,\n+162 visitorPost, problemSizeThreshold);\n+163#else\n+164 _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(forest, rootData, visitorPre, visitorPost);\n+165#endif\n+166}\n+167\n+168/* *************************************************************************\n+*/\n+170namespace {\n+171template\n+172boost::shared_ptr CloneForestVisitorPre(\n+173 const boost::shared_ptr& node,\n+174 const boost::shared_ptr& parentPointer) {\n+175 // Clone the current node and add it to its cloned parent\n+176 boost::shared_ptr clone = boost::make_shared(*node);\n+177 clone->children.clear();\n+178 parentPointer->children.push_back(clone);\n+179 return clone;\n+180}\n+181}\n 182\n-183 // identity\n-184 static _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm Identity() { return _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm(); }\n-185\n-186 _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm operator+(const _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm& other) const {\n-187 return _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm(g()+other.g(), h()+other.h());\n-188 }\n-189 _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm operator-(const _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm& other) const {\n-190 return _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm(g()-other.g(), h()-other.h());\n-191 }\n-192 _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm operator-() const {\n-193 return _\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm(- g(), - h());\n-194 }\n-195};\n-196\n-197// Define direct sums to be a model of the Additive Group concept\n-198template\n-_\b1_\b9_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm > :\n-200 internal::AdditiveGroupTraits > {};\n-201\n-202} // namespace gtsam\n-203\n-_\b2_\b1_\b2#define GTSAM_CONCEPT_GROUP_INST(T) template class gtsam::IsGroup;\n-213#define GTSAM_CONCEPT_GROUP_TYPE(T) typedef gtsam::IsGroup\n-_gtsam_IsGroup_##T;\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n+188template\n+_\b1_\b8_\b9_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b<_\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bF_\bO_\bR_\bE_\bS_\bT_\b:_\b:_\bN_\bo_\bd_\be_\b> > _\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt(\n+190 const FOREST& forest) {\n+191 typedef typename FOREST::Node Node;\n+192 boost::shared_ptr rootContainer = boost::make_shared();\n+193 _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(forest, rootContainer, CloneForestVisitorPre);\n+194 return _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b<_\bN_\bo_\bd_\be_\b> >(rootContainer->children.begin\n+(),\n+195 rootContainer->children.end());\n+196}\n+197\n+198/* *************************************************************************\n+*/\n+200namespace {\n+201struct PrintForestVisitorPre {\n+202 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter;\n+203 PrintForestVisitorPre(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter) :\n+204 formatter(formatter) {\n+205 }\n+206 template std::string operator()(\n+207 const boost::shared_ptr& node, const std::string& parentString) {\n+208 // Print the current node\n+209 node->print(parentString + \"-\", formatter);\n+210 // Increment the indentation\n+211 return parentString + \"| \";\n+212 }\n+213};\n+214}\n+215\n+218template\n+_\b2_\b1_\b9void _\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt(const FOREST& forest, std::string str,\n+220 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) {\n+221 PrintForestVisitorPre visitor(keyFormatter);\n+222 _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt(forest, str, visitor);\n+223}\n+224} // namespace treeTraversal\n+225\n+226} // namespace gtsam\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+A thin wrapper around std::list that uses boost's fast_pool_allocator.\n+_\bK_\be_\by_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bO_\bO_\bS_\bT_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bR_\bE_\bQ_\bU_\bI_\bR_\bE_\bS\n-BOOST_CONCEPT_REQUIRES(((IsGroup< G >)),(bool)) check_group_invariants(const G\n-&a\n-Check invariants.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-tag to assert a type is a group\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-Group operator syntax flavors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bd_\bd_\bi_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp\n-Group Concept.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bP_\br_\bo_\bd_\bu_\bc_\bt\n-DirectProduct()\n-Default constructor yields identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:144\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm\n-Template to construct the direct sum of two additive groups Assumes existence\n-of three additive opera...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:169\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm_\b:_\b:_\bD_\bi_\br_\be_\bc_\bt_\bS_\bu_\bm\n-DirectSum()\n-Default constructor yields identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:178\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\ba_\bc_\bk\n+Matrix stack(size_t nrMatrices,...)\n+create a matrix by stacking other matrices Given a set of matrices: A1, A2,\n+A3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:397\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt\n+void DepthFirstForest(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre,\n+VISITOR_POST &visitorPost)\n+Traverse a forest depth-first with pre-order and post-order visits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt\n+FastVector< boost::shared_ptr< typename FOREST::Node > > CloneForest(const\n+FOREST &forest)\n+Clone a tree, copy-constructing new nodes (calling boost::make_shared) and\n+setting up child pointers ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt\n+void PrintForest(const FOREST &forest, std::string str, const KeyFormatter\n+&keyFormatter)\n+Print a tree, prefixing each line with str, and formatting keys using\n+keyFormatter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl\n+void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE\n+&visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)\n+Traverse a forest depth-first with pre-order and post-order visits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn treeTraversal-inst.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList is a thin wrapper around std::list that uses the boost\n+fast_pool_allocator instead of the de...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n * _\bg_\bt_\bs_\ba_\bm\n * _\bb_\ba_\bs_\be\n- * _\bG_\br_\bo_\bu_\bp_\b._\bh\n+ * _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00071_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00416_source.html", "comments": ["Files 90% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/VerticalBlockMatrix.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SphericalCamera.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
VerticalBlockMatrix.h
\n+
SphericalCamera.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Matrix.h>
\n-\n-\n-
23
\n-
24namespace gtsam {
\n-
25
\n-
26 // Forward declarations
\n-
27 class SymmetricBlockMatrix;
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/base/Manifold.h>
\n+\n+
23#include <gtsam/base/concepts.h>
\n+
24#include <gtsam/dllexport.h>
\n+\n+\n+
27#include <gtsam/geometry/Unit3.h>
\n
28
\n-
\n-
42 class GTSAM_EXPORT VerticalBlockMatrix
\n-
43 {
\n-
44 public:
\n-\n-
46 typedef Eigen::Block<Matrix> Block;
\n-
47 typedef Eigen::Block<const Matrix> constBlock;
\n-
48
\n-
49 protected:
\n-
50 Matrix matrix_;
\n-\n-
52
\n-\n-\n-\n-
56
\n-
57 public:
\n-
58
\n-
\n-\n-
61 rowStart_(0), rowEnd_(0), blockStart_(0)
\n-
62 {
\n-
63 variableColOffsets_.push_back(0);
\n-
64 assertInvariants();
\n-
65 }
\n-
\n-
66
\n-
68 template<typename CONTAINER>
\n-
\n-
69 VerticalBlockMatrix(const CONTAINER& dimensions, DenseIndex height,
\n-
70 bool appendOneDimension = false) :
\n-
71 variableColOffsets_(dimensions.size() + (appendOneDimension ? 2 : 1)),
\n-
72 rowStart_(0), rowEnd_(height), blockStart_(0) {
\n-
73 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);
\n-
74 matrix_.resize(height, variableColOffsets_.back());
\n-
75 assertInvariants();
\n-
76 }
\n-
\n+
29#include <boost/serialization/nvp.hpp>
\n+
30
\n+
31namespace gtsam {
\n+
32
\n+
\n+
40class GTSAM_EXPORT EmptyCal {
\n+
41 public:
\n+
42 enum { dimension = 0 };
\n+
43 EmptyCal() {}
\n+
44 virtual ~EmptyCal() = default;
\n+
45 using shared_ptr = boost::shared_ptr<EmptyCal>;
\n+
46
\n+
48 inline static size_t Dim() { return dimension; }
\n+
49
\n+
50 void print(const std::string& s) const {
\n+
51 std::cout << "empty calibration: " << s << std::endl;
\n+
52 }
\n+
53
\n+
54 private:
\n+
56 friend class boost::serialization::access;
\n+
57 template <class Archive>
\n+
58 void serialize(Archive& ar, const unsigned int /*version*/) {
\n+
59 ar& boost::serialization::make_nvp(
\n+
60 "EmptyCal", boost::serialization::base_object<EmptyCal>(*this));
\n+
61 }
\n+
62};
\n+
\n+
63
\n+
\n+
70class GTSAM_EXPORT SphericalCamera {
\n+
71 public:
\n+
72 enum { dimension = 6 };
\n+
73
\n+
74 using Measurement = Unit3;
\n+
75 using MeasurementVector = std::vector<Unit3>;
\n+\n
77
\n-
79 template<typename CONTAINER, typename DERIVED>
\n-
\n-
80 VerticalBlockMatrix(const CONTAINER& dimensions,
\n-
81 const Eigen::MatrixBase<DERIVED>& matrix, bool appendOneDimension = false) :
\n-
82 matrix_(matrix), variableColOffsets_(dimensions.size() + (appendOneDimension ? 2 : 1)),
\n-
83 rowStart_(0), rowEnd_(matrix.rows()), blockStart_(0) {
\n-
84 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);
\n-
85 if (variableColOffsets_.back() != matrix_.cols())
\n-
86 throw std::invalid_argument(
\n-
87 "Requested to create a VerticalBlockMatrix with dimensions that do not sum to the total columns of the provided matrix.");
\n-
88 assertInvariants();
\n-
89 }
\n+
78 private:
\n+
79 Pose3 pose_;
\n+
80
\n+
81 protected:
\n+
82 EmptyCal::shared_ptr emptyCal_;
\n+
83
\n+
84 public:
\n+
87
\n+
\n+\n+
90 : pose_(Pose3()), emptyCal_(boost::make_shared<EmptyCal>()) {}
\n
\n-
90
\n-
92 template<typename ITERATOR>
\n+
91
\n
\n-
93 VerticalBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim,
\n-
94 DenseIndex height, bool appendOneDimension = false) :
\n-
95 variableColOffsets_((lastBlockDim-firstBlockDim) + (appendOneDimension ? 2 : 1)),
\n-
96 rowStart_(0), rowEnd_(height), blockStart_(0) {
\n-
97 fillOffsets(firstBlockDim, lastBlockDim, appendOneDimension);
\n-
98 matrix_.resize(height, variableColOffsets_.back());
\n-
99 assertInvariants();
\n-
100 }
\n+
93 explicit SphericalCamera(const Pose3& pose)
\n+
94 : pose_(pose), emptyCal_(boost::make_shared<EmptyCal>()) {}
\n
\n-
101
\n-
107 static VerticalBlockMatrix LikeActiveViewOf(const VerticalBlockMatrix& rhs);
\n+
95
\n+
\n+
97 explicit SphericalCamera(const Pose3& pose,
\n+
98 const EmptyCal::shared_ptr& cal)
\n+
99 : pose_(pose), emptyCal_(cal) {}
\n+
\n+
100
\n+
104 explicit SphericalCamera(const Vector& v) : pose_(Pose3::Expmap(v)) {}
\n+
105
\n+
107 virtual ~SphericalCamera() = default;
\n
108
\n-
112 static VerticalBlockMatrix LikeActiveViewOf(const SymmetricBlockMatrix& rhs, DenseIndex height);
\n+
\n+
110 const EmptyCal::shared_ptr& sharedCalibration() const {
\n+
111 return emptyCal_;
\n+
112 }
\n+
\n
113
\n-
115 DenseIndex rows() const { assertInvariants(); return rowEnd_ - rowStart_; }
\n+
115 const EmptyCal& calibration() const { return *emptyCal_; }
\n
116
\n-
118 DenseIndex cols() const { assertInvariants(); return variableColOffsets_.back() - variableColOffsets_[blockStart_]; }
\n-
119
\n-
121 DenseIndex nBlocks() const { assertInvariants(); return variableColOffsets_.size() - 1 - blockStart_; }
\n-
122
\n-
124 Block operator()(DenseIndex block) { return range(block, block+1); }
\n-
125
\n-
127 const constBlock operator()(DenseIndex block) const { return range(block, block+1); }
\n-
128
\n-
\n-
130 Block range(DenseIndex startBlock, DenseIndex endBlock) {
\n-
131 assertInvariants();
\n-
132 DenseIndex actualStartBlock = startBlock + blockStart_;
\n-
133 DenseIndex actualEndBlock = endBlock + blockStart_;
\n-
134 if(startBlock != 0 || endBlock != 0) {
\n-
135 checkBlock(actualStartBlock);
\n-
136 assert(actualEndBlock < (DenseIndex)variableColOffsets_.size());
\n-
137 }
\n-
138 const DenseIndex startCol = variableColOffsets_[actualStartBlock];
\n-
139 const DenseIndex rangeCols = variableColOffsets_[actualEndBlock] - startCol;
\n-
140 return matrix_.block(rowStart_, startCol, this->rows(), rangeCols);
\n-
141 }
\n-
\n+
120
\n+
122 bool equals(const SphericalCamera& camera, double tol = 1e-9) const;
\n+
123
\n+
125 virtual void print(const std::string& s = "SphericalCamera") const;
\n+
126
\n+
130
\n+
132 const Pose3& pose() const { return pose_; }
\n+
133
\n+
135 const Rot3& rotation() const { return pose_.rotation(); }
\n+
136
\n+
138 const Point3& translation() const { return pose_.translation(); }
\n+
139
\n+
140 // /// return pose, with derivative
\n+
141 // const Pose3& getPose(OptionalJacobian<6, 6> H) const;
\n
142
\n-
143 const constBlock range(DenseIndex startBlock, DenseIndex endBlock) const {
\n-
144 assertInvariants();
\n-
145 DenseIndex actualStartBlock = startBlock + blockStart_;
\n-
146 DenseIndex actualEndBlock = endBlock + blockStart_;
\n-
147 if(startBlock != 0 || endBlock != 0) {
\n-
148 checkBlock(actualStartBlock);
\n-
149 assert(actualEndBlock < (DenseIndex)variableColOffsets_.size());
\n-
150 }
\n-
151 const DenseIndex startCol = variableColOffsets_[actualStartBlock];
\n-
152 const DenseIndex rangeCols = variableColOffsets_[actualEndBlock] - startCol;
\n-
153 return ((const Matrix&)matrix_).block(rowStart_, startCol, this->rows(), rangeCols);
\n-
154 }
\n-
155
\n-
157 Block full() { return range(0, nBlocks()); }
\n-
158
\n-
160 const constBlock full() const { return range(0, nBlocks()); }
\n-
161
\n-
162 DenseIndex offset(DenseIndex block) const {
\n-
163 assertInvariants();
\n-
164 DenseIndex actualBlock = block + blockStart_;
\n-
165 checkBlock(actualBlock);
\n-
166 return variableColOffsets_[actualBlock];
\n-
167 }
\n+
146
\n+
148 std::pair<Unit3, bool> projectSafe(const Point3& pw) const;
\n+
149
\n+
155 Unit3 project2(const Point3& pw, OptionalJacobian<2, 6> Dpose = boost::none,
\n+
156 OptionalJacobian<2, 3> Dpoint = boost::none) const;
\n+
157
\n+
163 Unit3 project2(const Unit3& pwu, OptionalJacobian<2, 6> Dpose = boost::none,
\n+
164 OptionalJacobian<2, 2> Dpoint = boost::none) const;
\n+
165
\n+
167 Point3 backproject(const Unit3& p, const double depth) const;
\n
168
\n-
170 const DenseIndex& rowStart() const { return rowStart_; }
\n+
170 Unit3 backprojectPointAtInfinity(const Unit3& p) const;
\n
171
\n-
173 DenseIndex& rowStart() { return rowStart_; }
\n-
174
\n-
176 const DenseIndex& rowEnd() const { return rowEnd_; }
\n-
177
\n-
179 DenseIndex& rowEnd() { return rowEnd_; }
\n-
180
\n-
182 const DenseIndex& firstBlock() const { return blockStart_; }
\n-
183
\n-
185 DenseIndex& firstBlock() { return blockStart_; }
\n-
186
\n-
188 const Matrix& matrix() const { return matrix_; }
\n-
189
\n-
191 Matrix& matrix() { return matrix_; }
\n-
192
\n-
193 protected:
\n-
194 void assertInvariants() const {
\n-
195 assert(matrix_.cols() == variableColOffsets_.back());
\n-
196 assert(blockStart_ < (DenseIndex)variableColOffsets_.size());
\n-
197 assert(rowStart_ <= matrix_.rows());
\n-
198 assert(rowEnd_ <= matrix_.rows());
\n-
199 assert(rowStart_ <= rowEnd_);
\n-
200 }
\n-
201
\n-
202 void checkBlock(DenseIndex block) const {
\n-
203 static_cast<void>(block); //Disable unused varibale warnings.
\n-
204 assert(matrix_.cols() == variableColOffsets_.back());
\n-
205 assert(block < (DenseIndex)variableColOffsets_.size() - 1);
\n-
206 assert(variableColOffsets_[block] < matrix_.cols() && variableColOffsets_[block+1] <= matrix_.cols());
\n-
207 }
\n-
208
\n-
209 template<typename ITERATOR>
\n-
210 void fillOffsets(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool appendOneDimension) {
\n-
211 variableColOffsets_[0] = 0;
\n-
212 DenseIndex j=0;
\n-
213 for(ITERATOR dim=firstBlockDim; dim!=lastBlockDim; ++dim, ++j)
\n-
214 variableColOffsets_[j+1] = variableColOffsets_[j] + *dim;
\n-
215 if(appendOneDimension)
\n-
216 variableColOffsets_[j+1] = variableColOffsets_[j] + 1;
\n-
217 }
\n-
218
\n-
219 friend class SymmetricBlockMatrix;
\n+
177 Unit3 project(const Point3& point, OptionalJacobian<2, 6> Dpose = boost::none,
\n+
178 OptionalJacobian<2, 3> Dpoint = boost::none) const;
\n+
179
\n+
184 Vector2 reprojectionError(const Point3& point, const Unit3& measured,
\n+
185 OptionalJacobian<2, 6> Dpose = boost::none,
\n+
186 OptionalJacobian<2, 3> Dpoint = boost::none) const;
\n+
188
\n+
\n+
190 SphericalCamera retract(const Vector6& d) const {
\n+
191 return SphericalCamera(pose().retract(d));
\n+
192 }
\n+
\n+
193
\n+
\n+
195 Vector6 localCoordinates(const SphericalCamera& p) const {
\n+
196 return pose().localCoordinates(p.pose());
\n+
197 }
\n+
\n+
198
\n+
\n+\n+
201 return SphericalCamera(
\n+
202 Pose3::Identity()); // assumes that the default constructor is valid
\n+
203 }
\n+
\n+
204
\n+
\n+
206 Matrix34 cameraProjectionMatrix() const {
\n+
207 return Matrix34(pose_.inverse().matrix().block(0, 0, 3, 4));
\n+
208 }
\n+
\n+
209
\n+
\n+\n+
212 return Eigen::Matrix<double, traits<Point2>::dimension, 1>::Constant(0.0);
\n+
213 }
\n+
\n+
214
\n+
216 size_t dim() const { return 6; }
\n+
217
\n+
219 static size_t Dim() { return 6; }
\n
220
\n-
221 private:
\n-
223 friend class boost::serialization::access;
\n-
224 template<class ARCHIVE>
\n-
225 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
226 ar & BOOST_SERIALIZATION_NVP(matrix_);
\n-
227 ar & BOOST_SERIALIZATION_NVP(variableColOffsets_);
\n-
228 ar & BOOST_SERIALIZATION_NVP(rowStart_);
\n-
229 ar & BOOST_SERIALIZATION_NVP(rowEnd_);
\n-
230 ar & BOOST_SERIALIZATION_NVP(blockStart_);
\n-
231 }
\n-
232 };
\n+
221 private:
\n+
223 friend class boost::serialization::access;
\n+
224 template <class Archive>
\n+
225 void serialize(Archive& ar, const unsigned int /*version*/) {
\n+
226 ar& BOOST_SERIALIZATION_NVP(pose_);
\n+
227 }
\n+
228
\n+
229 public:
\n+\n+
231};
\n
\n+
232// end of class SphericalCamera
\n
233
\n-
234}
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
Serialization for matrices.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
234template <>
\n+
235struct traits<SphericalCamera> : public internal::LieGroup<Pose3> {};
\n+
236
\n+
237template <>
\n+
238struct traits<const SphericalCamera> : public internal::LieGroup<Pose3> {};
\n+
239
\n+
240} // namespace gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Base class and basic functions for Manifold types.
\n+
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
\n+
3D Pose
\n+
Bearing-Range product.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n-
VerticalBlockMatrix()
Construct an empty VerticalBlockMatrix.
Definition VerticalBlockMatrix.h:60
\n-
Block full()
Return the full matrix, not including any portions excluded by rowStart(), rowEnd(),...
Definition VerticalBlockMatrix.h:157
\n-
Block range(DenseIndex startBlock, DenseIndex endBlock)
access ranges of blocks at a time
Definition VerticalBlockMatrix.h:130
\n-
const DenseIndex & firstBlock() const
Get the apparent first block for all operations.
Definition VerticalBlockMatrix.h:182
\n-
const Matrix & matrix() const
Access to full matrix (including any portions excluded by rowStart(), rowEnd(), and firstBlock())
Definition VerticalBlockMatrix.h:188
\n-
VerticalBlockMatrix(const CONTAINER &dimensions, DenseIndex height, bool appendOneDimension=false)
Construct from a container of the sizes of each vertical block.
Definition VerticalBlockMatrix.h:69
\n-
DenseIndex rowEnd_
Changes apparent matrix view, see main class comment.
Definition VerticalBlockMatrix.h:54
\n-
const DenseIndex & rowEnd() const
Get the apparent last row (exclusive, i.e.
Definition VerticalBlockMatrix.h:176
\n-
DenseIndex rows() const
Row size.
Definition VerticalBlockMatrix.h:115
\n-
Block operator()(DenseIndex block)
Access a single block in the underlying matrix with read/write access.
Definition VerticalBlockMatrix.h:124
\n-
DenseIndex & firstBlock()
Get or set the apparent first block for all operations.
Definition VerticalBlockMatrix.h:185
\n-
DenseIndex cols() const
Column size.
Definition VerticalBlockMatrix.h:118
\n-
VerticalBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, DenseIndex height, bool appendOneDimension=false)
Construct from iterator over the sizes of each vertical block.
Definition VerticalBlockMatrix.h:93
\n-
const constBlock operator()(DenseIndex block) const
Access a const block view.
Definition VerticalBlockMatrix.h:127
\n-
const DenseIndex & rowStart() const
Get the apparent first row of the underlying matrix for all operations.
Definition VerticalBlockMatrix.h:170
\n-
Matrix matrix_
The full matrix.
Definition VerticalBlockMatrix.h:50
\n-
DenseIndex nBlocks() const
Block count.
Definition VerticalBlockMatrix.h:121
\n-
const constBlock full() const
Return the full matrix, not including any portions excluded by rowStart(), rowEnd(),...
Definition VerticalBlockMatrix.h:160
\n-
DenseIndex & rowStart()
Get or set the apparent first row of the underlying matrix for all operations.
Definition VerticalBlockMatrix.h:173
\n-
Matrix & matrix()
Non-const access to full matrix (including any portions excluded by rowStart(), rowEnd(),...
Definition VerticalBlockMatrix.h:191
\n-
DenseIndex & rowEnd()
Get or set the apparent last row (exclusive, i.e.
Definition VerticalBlockMatrix.h:179
\n-
DenseIndex rowStart_
Changes apparent matrix view, see main class comment.
Definition VerticalBlockMatrix.h:53
\n-
VerticalBlockMatrix(const CONTAINER &dimensions, const Eigen::MatrixBase< DERIVED > &matrix, bool appendOneDimension=false)
Construct from a container of the sizes of each vertical block and a pre-prepared matrix.
Definition VerticalBlockMatrix.h:80
\n-
DenseIndex blockStart_
Changes apparent matrix view, see main class comment.
Definition VerticalBlockMatrix.h:55
\n-
FastVector< DenseIndex > variableColOffsets_
the starting columns of each block (0-based)
Definition VerticalBlockMatrix.h:51
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > make_shared(Args &&... args)
Add our own make_shared as a layer of wrapping on boost::make_shared This solves the problem with the...
Definition make_shared.h:57
\n+
Point2_ project(const Point3_ &p_cam)
Expression version of PinholeBase::Project.
Definition expressions.h:131
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get translation
Definition Pose3.cpp:308
\n+
Matrix4 matrix() const
convert to 4*4 matrix
Definition Pose3.cpp:323
\n+
Pose3 inverse() const
inverse transformation with derivatives
Definition Pose3.cpp:49
\n+
const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get rotation
Definition Pose3.cpp:315
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
Empty calibration.
Definition SphericalCamera.h:40
\n+
static size_t Dim()
return DOF, dimensionality of tangent space
Definition SphericalCamera.h:48
\n+
A spherical camera class that has a Pose3 and measures bearing vectors.
Definition SphericalCamera.h:70
\n+
const EmptyCal::shared_ptr & sharedCalibration() const
return shared pointer to calibration
Definition SphericalCamera.h:110
\n+
static size_t Dim()
Definition SphericalCamera.h:219
\n+
SphericalCamera(const Pose3 &pose)
Constructor with pose.
Definition SphericalCamera.h:93
\n+
virtual ~SphericalCamera()=default
Default destructor.
\n+
Matrix34 cameraProjectionMatrix() const
for Linear Triangulation
Definition SphericalCamera.h:206
\n+
Vector6 localCoordinates(const SphericalCamera &p) const
return canonical coordinate
Definition SphericalCamera.h:195
\n+
const Rot3 & rotation() const
get rotation
Definition SphericalCamera.h:135
\n+
const Pose3 & pose() const
return pose, constant version
Definition SphericalCamera.h:132
\n+
const Point3 & translation() const
get translation
Definition SphericalCamera.h:138
\n+
SphericalCamera retract(const Vector6 &d) const
move a cameras according to d
Definition SphericalCamera.h:190
\n+
const EmptyCal & calibration() const
return calibration
Definition SphericalCamera.h:115
\n+
size_t dim() const
Definition SphericalCamera.h:216
\n+
static SphericalCamera Identity()
for Canonical
Definition SphericalCamera.h:200
\n+
SphericalCamera()
Default constructor.
Definition SphericalCamera.h:89
\n+
Vector defaultErrorWhenTriangulatingBehindCamera() const
for Nonlinear Triangulation
Definition SphericalCamera.h:211
\n+
SphericalCamera(const Pose3 &pose, const EmptyCal::shared_ptr &cal)
Constructor with empty intrinsics (needed for smart factors)
Definition SphericalCamera.h:97
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,346 +1,323 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VerticalBlockMatrix.h\n+SphericalCamera.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-26 // Forward declarations\n-27 class SymmetricBlockMatrix;\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh>\n+23#include \n+24#include \n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+27#include \n 28\n-_\b4_\b2 class GTSAM_EXPORT _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-43 {\n-44 public:\n-45 typedef _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bT_\bh_\bi_\bs;\n-46 typedef Eigen::Block Block;\n-47 typedef Eigen::Block constBlock;\n-48\n-49 protected:\n-_\b5_\b0 Matrix _\bm_\ba_\bt_\br_\bi_\bx_\b_;\n-_\b5_\b1 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx_\b> _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bC_\bo_\bl_\bO_\bf_\bf_\bs_\be_\bt_\bs_\b_;\n-52\n-_\b5_\b3 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\br_\bo_\bw_\bS_\bt_\ba_\br_\bt_\b_;\n-_\b5_\b4 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\br_\bo_\bw_\bE_\bn_\bd_\b_;\n-_\b5_\b5 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt_\b_;\n-56\n-57 public:\n-58\n-_\b6_\b0 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx() :\n-61 rowStart_(0), rowEnd_(0), blockStart_(0)\n-62 {\n-63 variableColOffsets_.push_back(0);\n-64 assertInvariants();\n-65 }\n-66\n-68 template\n-_\b6_\b9 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(const CONTAINER& dimensions, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx height,\n-70 bool appendOneDimension = false) :\n-71 variableColOffsets_(dimensions.size() + (appendOneDimension ? 2 : 1)),\n-72 rowStart_(0), rowEnd_(height), blockStart_(0) {\n-73 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);\n-74 matrix_.resize(height, variableColOffsets_.back());\n-75 assertInvariants();\n-76 }\n+29#include \n+30\n+31namespace _\bg_\bt_\bs_\ba_\bm {\n+32\n+_\b4_\b0class GTSAM_EXPORT _\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl {\n+41 public:\n+42 enum { dimension = 0 };\n+43 _\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl() {}\n+44 virtual _\b~_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl() = default;\n+45 using shared_ptr = boost::shared_ptr;\n+46\n+_\b4_\b8 inline static size_t _\bD_\bi_\bm() { return dimension; }\n+49\n+50 void _\bp_\br_\bi_\bn_\bt(const std::string& s) const {\n+51 std::cout << \"empty calibration: \" << s << std::endl;\n+52 }\n+53\n+54 private:\n+_\b5_\b6 friend class boost::serialization::access;\n+57 template \n+58 void serialize(Archive& ar, const unsigned int /*version*/) {\n+59 ar& boost::serialization::make_nvp(\n+60 \"EmptyCal\", boost::serialization::base_object(*this));\n+61 }\n+62};\n+63\n+_\b7_\b0class GTSAM_EXPORT _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba {\n+71 public:\n+72 enum { dimension = 6 };\n+73\n+74 using _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt = _\bU_\bn_\bi_\bt_\b3;\n+75 using MeasurementVector = std::vector;\n+76 using _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be = _\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl;\n 77\n-79 template\n-_\b8_\b0 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(const CONTAINER& dimensions,\n-81 const Eigen::MatrixBase& matrix, bool appendOneDimension = false) :\n-82 matrix_(matrix), variableColOffsets_(dimensions.size() + (appendOneDimension\n-? 2 : 1)),\n-83 rowStart_(0), rowEnd_(matrix.rows()), blockStart_(0) {\n-84 fillOffsets(dimensions.begin(), dimensions.end(), appendOneDimension);\n-85 if (variableColOffsets_.back() != matrix_.cols())\n-86 throw std::invalid_argument(\n-87 \"Requested to create a VerticalBlockMatrix with dimensions that do not sum\n-to the total columns of the provided matrix.\");\n-88 assertInvariants();\n-89 }\n-90\n-92 template\n-_\b9_\b3 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(ITERATOR firstBlockDim, ITERATOR lastBlockDim,\n-94 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx height, bool appendOneDimension = false) :\n-95 variableColOffsets_((lastBlockDim-firstBlockDim) + (appendOneDimension ? 2 :\n-1)),\n-96 rowStart_(0), rowEnd_(height), blockStart_(0) {\n-97 fillOffsets(firstBlockDim, lastBlockDim, appendOneDimension);\n-98 matrix_.resize(height, variableColOffsets_.back());\n-99 assertInvariants();\n-100 }\n-101\n-107 static _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx LikeActiveViewOf(const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n-rhs);\n+78 private:\n+79 _\bP_\bo_\bs_\be_\b3 pose_;\n+80\n+81 protected:\n+82 EmptyCal::shared_ptr emptyCal_;\n+83\n+84 public:\n+87\n+_\b8_\b9 _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba()\n+90 : pose_(_\bP_\bo_\bs_\be_\b3()), emptyCal_(boost::_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd<_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl>()) {}\n+91\n+_\b9_\b3 explicit _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& pose)\n+94 : pose_(pose), emptyCal_(boost::_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd<_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl>()) {}\n+95\n+_\b9_\b7 explicit _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& pose,\n+98 const EmptyCal::shared_ptr& cal)\n+99 : pose_(pose), emptyCal_(cal) {}\n+100\n+104 explicit _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba(const Vector& v) : pose_(_\bP_\bo_\bs_\be_\b3::Expmap(v)) {}\n+105\n+_\b1_\b0_\b7 virtual _\b~_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba() = default;\n 108\n-112 static _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx LikeActiveViewOf(const _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n-rhs, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx height);\n+_\b1_\b1_\b0 const EmptyCal::shared_ptr& _\bs_\bh_\ba_\br_\be_\bd_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n+111 return emptyCal_;\n+112 }\n 113\n-_\b1_\b1_\b5 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\br_\bo_\bw_\bs() const { assertInvariants(); return rowEnd_ - rowStart_; }\n+_\b1_\b1_\b5 const _\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const { return *emptyCal_; }\n 116\n-_\b1_\b1_\b8 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bc_\bo_\bl_\bs() const { assertInvariants(); return\n-variableColOffsets_.back() - variableColOffsets_[blockStart_]; }\n-119\n-_\b1_\b2_\b1 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bn_\bB_\bl_\bo_\bc_\bk_\bs() const { assertInvariants(); return\n-variableColOffsets_.size() - 1 - blockStart_; }\n-122\n-_\b1_\b2_\b4 Block _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx block) { return range(block, block+1); }\n-125\n-_\b1_\b2_\b7 const constBlock _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx block) const { return range(block,\n-block+1); }\n-128\n-_\b1_\b3_\b0 Block _\br_\ba_\bn_\bg_\be(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx startBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx endBlock) {\n-131 assertInvariants();\n-132 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actualStartBlock = startBlock + blockStart_;\n-133 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actualEndBlock = endBlock + blockStart_;\n-134 if(startBlock != 0 || endBlock != 0) {\n-135 checkBlock(actualStartBlock);\n-136 assert(actualEndBlock < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)variableColOffsets_.size());\n-137 }\n-138 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx startCol = variableColOffsets_[actualStartBlock];\n-139 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx rangeCols = variableColOffsets_[actualEndBlock] -\n-startCol;\n-140 return matrix_.block(rowStart_, startCol, this->rows(), rangeCols);\n-141 }\n+120\n+122 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba& camera, double tol = 1e-9) const;\n+123\n+125 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"SphericalCamera\") const;\n+126\n+130\n+_\b1_\b3_\b2 const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be() const { return pose_; }\n+133\n+_\b1_\b3_\b5 const _\bR_\bo_\bt_\b3& _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn() const { return pose_._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn(); }\n+136\n+_\b1_\b3_\b8 const _\bP_\bo_\bi_\bn_\bt_\b3& _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn() const { return pose_._\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn(); }\n+139\n+140 // /// return pose, with derivative\n+141 // const Pose3& getPose(OptionalJacobian<6, 6> H) const;\n 142\n-143 const constBlock range(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx startBlock, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx endBlock) const {\n-144 assertInvariants();\n-145 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actualStartBlock = startBlock + blockStart_;\n-146 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actualEndBlock = endBlock + blockStart_;\n-147 if(startBlock != 0 || endBlock != 0) {\n-148 checkBlock(actualStartBlock);\n-149 assert(actualEndBlock < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)variableColOffsets_.size());\n-150 }\n-151 const DenseIndex startCol = variableColOffsets_[actualStartBlock];\n-152 const DenseIndex rangeCols = variableColOffsets_[actualEndBlock] -\n-startCol;\n-153 return ((const Matrix&)matrix_).block(rowStart_, startCol, this->rows(),\n-rangeCols);\n-154 }\n-155\n-_\b1_\b5_\b7 Block _\bf_\bu_\bl_\bl() { return range(0, nBlocks()); }\n-158\n-_\b1_\b6_\b0 const constBlock _\bf_\bu_\bl_\bl() const { return range(0, nBlocks()); }\n-161\n-162 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx offset(_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx block) const {\n-163 assertInvariants();\n-164 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx actualBlock = block + blockStart_;\n-165 checkBlock(actualBlock);\n-166 return variableColOffsets_[actualBlock];\n-167 }\n+146\n+148 std::pair projectSafe(const _\bP_\bo_\bi_\bn_\bt_\b3& pw) const;\n+149\n+155 _\bU_\bn_\bi_\bt_\b3 project2(const _\bP_\bo_\bi_\bn_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose = boost::\n+none,\n+156 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none) const;\n+157\n+163 _\bU_\bn_\bi_\bt_\b3 project2(const _\bU_\bn_\bi_\bt_\b3& pwu, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose = boost::\n+none,\n+164 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dpoint = boost::none) const;\n+165\n+167 _\bP_\bo_\bi_\bn_\bt_\b3 backproject(const _\bU_\bn_\bi_\bt_\b3& p, const double depth) const;\n 168\n-_\b1_\b7_\b0 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\br_\bo_\bw_\bS_\bt_\ba_\br_\bt() const { return rowStart_; }\n+170 _\bU_\bn_\bi_\bt_\b3 backprojectPointAtInfinity(const _\bU_\bn_\bi_\bt_\b3& p) const;\n 171\n-_\b1_\b7_\b3 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\br_\bo_\bw_\bS_\bt_\ba_\br_\bt() { return rowStart_; }\n-174\n-_\b1_\b7_\b6 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\br_\bo_\bw_\bE_\bn_\bd() const { return rowEnd_; }\n-177\n-_\b1_\b7_\b9 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\br_\bo_\bw_\bE_\bn_\bd() { return rowEnd_; }\n-180\n-_\b1_\b8_\b2 const _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\bf_\bi_\br_\bs_\bt_\bB_\bl_\bo_\bc_\bk() const { return blockStart_; }\n-183\n-_\b1_\b8_\b5 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx& _\bf_\bi_\br_\bs_\bt_\bB_\bl_\bo_\bc_\bk() { return blockStart_; }\n-186\n-_\b1_\b8_\b8 const Matrix& _\bm_\ba_\bt_\br_\bi_\bx() const { return matrix_; }\n-189\n-_\b1_\b9_\b1 Matrix& _\bm_\ba_\bt_\br_\bi_\bx() { return matrix_; }\n-192\n-193 protected:\n-194 void assertInvariants() const {\n-195 assert(matrix_.cols() == variableColOffsets_.back());\n-196 assert(blockStart_ < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)variableColOffsets_.size());\n-197 assert(rowStart_ <= matrix_.rows());\n-198 assert(rowEnd_ <= matrix_.rows());\n-199 assert(rowStart_ <= rowEnd_);\n-200 }\n-201\n-202 void checkBlock(DenseIndex block) const {\n-203 static_cast(block); //Disable unused varibale warnings.\n-204 assert(matrix_.cols() == variableColOffsets_.back());\n-205 assert(block < (DenseIndex)variableColOffsets_.size() - 1);\n-206 assert(variableColOffsets_[block] < matrix_.cols() && variableColOffsets_\n-[block+1] <= matrix_.cols());\n-207 }\n-208\n-209 template\n-210 void fillOffsets(ITERATOR firstBlockDim, ITERATOR lastBlockDim, bool\n-appendOneDimension) {\n-211 variableColOffsets_[0] = 0;\n-212 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j=0;\n-213 for(ITERATOR dim=firstBlockDim; dim!=lastBlockDim; ++dim, ++j)\n-214 variableColOffsets_[j+1] = variableColOffsets_[j] + *dim;\n-215 if(appendOneDimension)\n-216 variableColOffsets_[j+1] = variableColOffsets_[j] + 1;\n-217 }\n-218\n-219 friend class SymmetricBlockMatrix;\n+177 _\bU_\bn_\bi_\bt_\b3 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose = boost::\n+none,\n+178 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none) const;\n+179\n+184 Vector2 reprojectionError(const _\bP_\bo_\bi_\bn_\bt_\b3& point, const _\bU_\bn_\bi_\bt_\b3& measured,\n+185 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose = boost::none,\n+186 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none) const;\n+188\n+_\b1_\b9_\b0 _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector6& d) const {\n+191 return _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba(pose().retract(d));\n+192 }\n+193\n+_\b1_\b9_\b5 Vector6 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba& p) const {\n+196 return pose().localCoordinates(p._\bp_\bo_\bs_\be());\n+197 }\n+198\n+_\b2_\b0_\b0 static _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n+201 return _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba(\n+202 Pose3::Identity()); // assumes that the default constructor is valid\n+203 }\n+204\n+_\b2_\b0_\b6 Matrix34 _\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx() const {\n+207 return Matrix34(pose_._\bi_\bn_\bv_\be_\br_\bs_\be()._\bm_\ba_\bt_\br_\bi_\bx().block(0, 0, 3, 4));\n+208 }\n+209\n+_\b2_\b1_\b1 Vector _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba() const {\n+212 return Eigen::Matrix::dimension, 1>::Constant(0.0);\n+213 }\n+214\n+_\b2_\b1_\b6 size_t _\bd_\bi_\bm() const { return 6; }\n+217\n+_\b2_\b1_\b9 static size_t _\bD_\bi_\bm() { return 6; }\n 220\n 221 private:\n _\b2_\b2_\b3 friend class boost::serialization::access;\n-224 template\n-225 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-226 ar & BOOST_SERIALIZATION_NVP(matrix_);\n-227 ar & BOOST_SERIALIZATION_NVP(variableColOffsets_);\n-228 ar & BOOST_SERIALIZATION_NVP(rowStart_);\n-229 ar & BOOST_SERIALIZATION_NVP(rowEnd_);\n-230 ar & BOOST_SERIALIZATION_NVP(blockStart_);\n-231 }\n-232 };\n+224 template \n+225 void serialize(Archive& ar, const unsigned int /*version*/) {\n+226 ar& BOOST_SERIALIZATION_NVP(pose_);\n+227 }\n+228\n+229 public:\n+230 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+231};\n+232// end of class SphericalCamera\n 233\n-234}\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bM_\ba_\bt_\br_\bi_\bx_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-Serialization for matrices.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+234template <>\n+_\b2_\b3_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+236\n+237template <>\n+_\b2_\b3_\b8struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+239\n+240} // namespace gtsam\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n+Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n+_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n+Bearing-Range product.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of vertical blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-VerticalBlockMatrix()\n-Construct an empty VerticalBlockMatrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bu_\bl_\bl\n-Block full()\n-Return the full matrix, not including any portions excluded by rowStart(),\n-rowEnd(),...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\ba_\bn_\bg_\be\n-Block range(DenseIndex startBlock, DenseIndex endBlock)\n-access ranges of blocks at a time\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bi_\br_\bs_\bt_\bB_\bl_\bo_\bc_\bk\n-const DenseIndex & firstBlock() const\n-Get the apparent first block for all operations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:182\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-const Matrix & matrix() const\n-Access to full matrix (including any portions excluded by rowStart(), rowEnd(),\n-and firstBlock())\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:188\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-VerticalBlockMatrix(const CONTAINER &dimensions, DenseIndex height, bool\n-appendOneDimension=false)\n-Construct from a container of the sizes of each vertical block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bE_\bn_\bd_\b_\n-DenseIndex rowEnd_\n-Changes apparent matrix view, see main class comment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bE_\bn_\bd\n-const DenseIndex & rowEnd() const\n-Get the apparent last row (exclusive, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:176\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-DenseIndex rows() const\n-Row size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-Block operator()(DenseIndex block)\n-Access a single block in the underlying matrix with read/write access.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:124\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bi_\br_\bs_\bt_\bB_\bl_\bo_\bc_\bk\n-DenseIndex & firstBlock()\n-Get or set the apparent first block for all operations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n-DenseIndex cols() const\n-Column size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-VerticalBlockMatrix(ITERATOR firstBlockDim, ITERATOR lastBlockDim, DenseIndex\n-height, bool appendOneDimension=false)\n-Construct from iterator over the sizes of each vertical block.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-const constBlock operator()(DenseIndex block) const\n-Access a const block view.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:127\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bS_\bt_\ba_\br_\bt\n-const DenseIndex & rowStart() const\n-Get the apparent first row of the underlying matrix for all operations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:170\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\b_\n-Matrix matrix_\n-The full matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bB_\bl_\bo_\bc_\bk_\bs\n-DenseIndex nBlocks() const\n-Block count.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:121\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bf_\bu_\bl_\bl\n-const constBlock full() const\n-Return the full matrix, not including any portions excluded by rowStart(),\n-rowEnd(),...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bS_\bt_\ba_\br_\bt\n-DenseIndex & rowStart()\n-Get or set the apparent first row of the underlying matrix for all operations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:173\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-Matrix & matrix()\n-Non-const access to full matrix (including any portions excluded by rowStart(),\n-rowEnd(),...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:191\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bE_\bn_\bd\n-DenseIndex & rowEnd()\n-Get or set the apparent last row (exclusive, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:179\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bS_\bt_\ba_\br_\bt_\b_\n-DenseIndex rowStart_\n-Changes apparent matrix view, see main class comment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-VerticalBlockMatrix(const CONTAINER &dimensions, const Eigen::MatrixBase<\n-DERIVED > &matrix, bool appendOneDimension=false)\n-Construct from a container of the sizes of each vertical block and a pre-\n-prepared matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk_\bS_\bt_\ba_\br_\bt_\b_\n-DenseIndex blockStart_\n-Changes apparent matrix view, see main class comment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bC_\bo_\bl_\bO_\bf_\bf_\bs_\be_\bt_\bs_\b_\n-FastVector< DenseIndex > variableColOffsets_\n-the starting columns of each block (0-based)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd\n+gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::\n+shared_ptr< T > > make_shared(Args &&... args)\n+Add our own make_shared as a layer of wrapping on boost::make_shared This\n+solves the problem with the...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn make_shared.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n+Point2_ project(const Point3_ &p_cam)\n+Expression version of PinholeBase::Project.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn expressions.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Both LieGroupTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n+const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n+get translation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:308\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+Matrix4 matrix() const\n+convert to 4*4 matrix\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:323\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n+Pose3 inverse() const\n+inverse transformation with derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n+get rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:315\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl\n+Empty calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+return DOF, dimensionality of tangent space\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n+A spherical camera class that has a Pose3 and measures bearing vectors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+const EmptyCal::shared_ptr & sharedCalibration() const\n+return shared pointer to calibration\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n+SphericalCamera(const Pose3 &pose)\n+Constructor with pose.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\b~_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n+virtual ~SphericalCamera()=default\n+Default destructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx\n+Matrix34 cameraProjectionMatrix() const\n+for Linear Triangulation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:206\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+Vector6 localCoordinates(const SphericalCamera &p) const\n+return canonical coordinate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n+const Rot3 & rotation() const\n+get rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\bo_\bs_\be\n+const Pose3 & pose() const\n+return pose, constant version\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n+const Point3 & translation() const\n+get translation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+SphericalCamera retract(const Vector6 &d) const\n+move a cameras according to d\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:190\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+const EmptyCal & calibration() const\n+return calibration\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:216\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static SphericalCamera Identity()\n+for Canonical\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:200\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n+SphericalCamera()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba\n+Vector defaultErrorWhenTriangulatingBehindCamera() const\n+for Nonlinear Triangulation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:211\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n+SphericalCamera(const Pose3 &pose, const EmptyCal::shared_ptr &cal)\n+Constructor with empty intrinsics (needed for smart factors)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bb_\ba_\bs_\be\n- * _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00083_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01400_source.html", "comments": ["Files 88% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastVector.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/global_includes.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n
\n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
FastVector.h
\n+
global_includes.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-
23#include <vector>
\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
32template <typename T>
\n-\n-
34 std::vector<T, typename internal::FastDefaultVectorAllocator<T>::type>;
\n-
35
\n-
36} // namespace gtsam
\n-
An easy way to control which allocator is used for Fast* collections.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n-
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/config.h> // Configuration from CMake
\n+
22#include <gtsam/base/types.h> // Basic types, constants, and compatibility functions
\n+
23// types.h includes dllexport.h, which contains macros for dllspec tags for Windows DLLs
\n+
Typedefs for easier changing of types.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,46 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FastVector.h\n+global_includes.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh>\n-23#include \n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-32template \n-_\b3_\b3using _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br =\n-34 std::vector::type>;\n-35\n-36} // namespace gtsam\n-_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n-An easy way to control which allocator is used for Fast* collections.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n-_\bg_\bt_\bs_\ba_\bm\n-Global functions in a separate testing namespace.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+19#pragma once\n+20\n+21#include // Configuration from CMake\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh> // Basic types, constants, and compatibility\n+functions\n+23// types.h includes dllexport.h, which contains macros for dllspec tags for\n+Windows DLLs\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bb_\ba_\bs_\be\n- * _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00089.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00113.js", "comments": ["Files 81% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,23 +1,23 @@\n-var a00089 = [\n- [\"assert_equal\", \"a00089.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\", null],\n- [\"assert_equal\", \"a00089.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\", null],\n- [\"assert_inequal\", \"a00089.html#a2ca3db47b15350977c1f03c5560ab332\", null],\n- [\"concatVectors\", \"a00089.html#ae1c88acfa9575bcea3f2e738cb637a85\", null],\n- [\"concatVectors\", \"a00089.html#a09610ec69a8b3f3a00399bb378eda9cf\", null],\n- [\"dot\", \"a00089.html#ad80249acf12bbea741e755cd8fc73042\", null],\n- [\"ediv_\", \"a00089.html#a14844c96706dc362917e0d5e76d65fbe\", null],\n- [\"equal\", \"a00089.html#a3d1cad2313f69f9fa5008fdc348d1526\", null],\n- [\"equal\", \"a00089.html#aa7ed1d4fe2dd6828cfeb2d8f488b818d\", null],\n- [\"equal_with_abs_tol\", \"a00089.html#a8bdced1844ffd6a53af0396d82eaa6da\", null],\n- [\"fpEqual\", \"a00089.html#ae19c359190a379cba44bf818a2293f7c\", null],\n- [\"greaterThanOrEqual\", \"a00089.html#a368ee40bd9c0124d572d2e49bcb077bf\", null],\n- [\"house\", \"a00089.html#afb77eefc25dea0fb3e0fcc8f246b617a\", null],\n- [\"houseInPlace\", \"a00089.html#ac9c0c05b0198ec0fb6e4115edb755910\", null],\n- [\"inner_prod\", \"a00089.html#a4ca41ba9ec9d6d21a2b9f5e00f9f25ed\", null],\n- [\"linear_dependent\", \"a00089.html#a2a0cfd7908b06491df49b6a9c9186775\", null],\n- [\"operator==\", \"a00089.html#a64988014ab746343803620dc42513646\", null],\n- [\"print\", \"a00089.html#a760cc36e9009b23cf564c436294b3504\", null],\n- [\"print\", \"a00089.html#a5e5d8018a0f44a6a299406aeda27d44b\", null],\n- [\"save\", \"a00089.html#a09f2bbdb9f9d633542362dbe8d79f9ab\", null],\n- [\"weightedPseudoinverse\", \"a00089.html#aca1c56d11a05464a7a5458dc32ccc777\", null]\n+var a00113 = [\n+ [\"assert_equal\", \"a00113.html#ac3cf8e8e70cd696d9c789c31bc1e89a7\", null],\n+ [\"assert_equal\", \"a00113.html#a9f3ee662d25ffb8c04b4e35c4b02e90b\", null],\n+ [\"assert_inequal\", \"a00113.html#a2ca3db47b15350977c1f03c5560ab332\", null],\n+ [\"concatVectors\", \"a00113.html#ae1c88acfa9575bcea3f2e738cb637a85\", null],\n+ [\"concatVectors\", \"a00113.html#a09610ec69a8b3f3a00399bb378eda9cf\", null],\n+ [\"dot\", \"a00113.html#ad80249acf12bbea741e755cd8fc73042\", null],\n+ [\"ediv_\", \"a00113.html#a14844c96706dc362917e0d5e76d65fbe\", null],\n+ [\"equal\", \"a00113.html#a3d1cad2313f69f9fa5008fdc348d1526\", null],\n+ [\"equal\", \"a00113.html#aa7ed1d4fe2dd6828cfeb2d8f488b818d\", null],\n+ [\"equal_with_abs_tol\", \"a00113.html#a8bdced1844ffd6a53af0396d82eaa6da\", null],\n+ [\"fpEqual\", \"a00113.html#ae19c359190a379cba44bf818a2293f7c\", null],\n+ [\"greaterThanOrEqual\", \"a00113.html#a368ee40bd9c0124d572d2e49bcb077bf\", null],\n+ [\"house\", \"a00113.html#afb77eefc25dea0fb3e0fcc8f246b617a\", null],\n+ [\"houseInPlace\", \"a00113.html#ac9c0c05b0198ec0fb6e4115edb755910\", null],\n+ [\"inner_prod\", \"a00113.html#a4ca41ba9ec9d6d21a2b9f5e00f9f25ed\", null],\n+ [\"linear_dependent\", \"a00113.html#a2a0cfd7908b06491df49b6a9c9186775\", null],\n+ [\"operator==\", \"a00113.html#a64988014ab746343803620dc42513646\", null],\n+ [\"print\", \"a00113.html#a760cc36e9009b23cf564c436294b3504\", null],\n+ [\"print\", \"a00113.html#a5e5d8018a0f44a6a299406aeda27d44b\", null],\n+ [\"save\", \"a00113.html#a09f2bbdb9f9d633542362dbe8d79f9ab\", null],\n+ [\"weightedPseudoinverse\", \"a00113.html#aca1c56d11a05464a7a5458dc32ccc777\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00092.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00062.js", "comments": ["Files 82% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,26 +1,26 @@\n-var a00092 = [\n- [\"deserialize\", \"a00092.html#aa4d516d0d98946341ad2766521011d1b\", null],\n- [\"deserializeBinary\", \"a00092.html#a56c41958e57a4bc7361ab593011462fd\", null],\n- [\"deserializeFromBinaryFile\", \"a00092.html#aefeb77f2324e4bbfca2c8152c49a4565\", null],\n- [\"deserializeFromBinaryStream\", \"a00092.html#a8eb16192d8ebe2532d8a69c9f2bf15b2\", null],\n- [\"deserializeFromBinaryString\", \"a00092.html#a349b7ed4a67a8c3d80737e5383507bc4\", null],\n- [\"deserializeFromFile\", \"a00092.html#adbb4a71187706918faca3a11519b62f6\", null],\n- [\"deserializeFromStream\", \"a00092.html#ab181d2a3de466fc0c87bd29501bbc7ab\", null],\n- [\"deserializeFromString\", \"a00092.html#a262487af458d1f48dd7d3bc549caae00\", null],\n- [\"deserializeFromXMLFile\", \"a00092.html#a0d8faf2bb0a908ff484677bb2fcf707c\", null],\n- [\"deserializeFromXMLStream\", \"a00092.html#a8d7ea177ef3e93af15a4a77c2bd7fa8b\", null],\n- [\"deserializeFromXMLString\", \"a00092.html#a5f2fe2bfc17737ff9ae1fb8b210604f0\", null],\n- [\"deserializeXML\", \"a00092.html#a85ab51b2e8f4cea69f72e06a5c136e85\", null],\n- [\"serialize\", \"a00092.html#a332bad7d1e70d3c04ceca35adce7a134\", null],\n- [\"serializeBinary\", \"a00092.html#abb476c3e77878f7e0f70dd51871f48e7\", null],\n- [\"serializeToBinaryFile\", \"a00092.html#abdff0a4b4fdf0e609aa62fb8d8b1dbba\", null],\n- [\"serializeToBinaryStream\", \"a00092.html#aa5d177a3bf16f9f5acf45ee62c816479\", null],\n- [\"serializeToBinaryString\", \"a00092.html#a7fad959f63f2eac1478c5ede7b9ae4db\", null],\n- [\"serializeToFile\", \"a00092.html#aa3261c2d455f892dae1921f8c3a39267\", null],\n- [\"serializeToStream\", \"a00092.html#a007080ca4741cc3d3d6a209b0ae3fe61\", null],\n- [\"serializeToString\", \"a00092.html#aa12c78301a9d2968afe5a1a14baa7e90\", null],\n- [\"serializeToXMLFile\", \"a00092.html#a89449123a746480a1d668cecb5576708\", null],\n- [\"serializeToXMLStream\", \"a00092.html#ae2e939177cf58b42d7ed4c9856d536c5\", null],\n- [\"serializeToXMLString\", \"a00092.html#a16c154fe5e35242e26af8286e77eea11\", null],\n- [\"serializeXML\", \"a00092.html#a976ff7999fcc13ef602b6ece1b078bca\", null]\n+var a00062 = [\n+ [\"deserialize\", \"a00062.html#aa4d516d0d98946341ad2766521011d1b\", null],\n+ [\"deserializeBinary\", \"a00062.html#a56c41958e57a4bc7361ab593011462fd\", null],\n+ [\"deserializeFromBinaryFile\", \"a00062.html#aefeb77f2324e4bbfca2c8152c49a4565\", null],\n+ [\"deserializeFromBinaryStream\", \"a00062.html#a8eb16192d8ebe2532d8a69c9f2bf15b2\", null],\n+ [\"deserializeFromBinaryString\", \"a00062.html#a349b7ed4a67a8c3d80737e5383507bc4\", null],\n+ [\"deserializeFromFile\", \"a00062.html#adbb4a71187706918faca3a11519b62f6\", null],\n+ [\"deserializeFromStream\", \"a00062.html#ab181d2a3de466fc0c87bd29501bbc7ab\", null],\n+ [\"deserializeFromString\", \"a00062.html#a262487af458d1f48dd7d3bc549caae00\", null],\n+ [\"deserializeFromXMLFile\", \"a00062.html#a0d8faf2bb0a908ff484677bb2fcf707c\", null],\n+ [\"deserializeFromXMLStream\", \"a00062.html#a8d7ea177ef3e93af15a4a77c2bd7fa8b\", null],\n+ [\"deserializeFromXMLString\", \"a00062.html#a5f2fe2bfc17737ff9ae1fb8b210604f0\", null],\n+ [\"deserializeXML\", \"a00062.html#a85ab51b2e8f4cea69f72e06a5c136e85\", null],\n+ [\"serialize\", \"a00062.html#a332bad7d1e70d3c04ceca35adce7a134\", null],\n+ [\"serializeBinary\", \"a00062.html#abb476c3e77878f7e0f70dd51871f48e7\", null],\n+ [\"serializeToBinaryFile\", \"a00062.html#abdff0a4b4fdf0e609aa62fb8d8b1dbba\", null],\n+ [\"serializeToBinaryStream\", \"a00062.html#aa5d177a3bf16f9f5acf45ee62c816479\", null],\n+ [\"serializeToBinaryString\", \"a00062.html#a7fad959f63f2eac1478c5ede7b9ae4db\", null],\n+ [\"serializeToFile\", \"a00062.html#aa3261c2d455f892dae1921f8c3a39267\", null],\n+ [\"serializeToStream\", \"a00062.html#a007080ca4741cc3d3d6a209b0ae3fe61\", null],\n+ [\"serializeToString\", \"a00062.html#aa12c78301a9d2968afe5a1a14baa7e90\", null],\n+ [\"serializeToXMLFile\", \"a00062.html#a89449123a746480a1d668cecb5576708\", null],\n+ [\"serializeToXMLStream\", \"a00062.html#ae2e939177cf58b42d7ed4c9856d536c5\", null],\n+ [\"serializeToXMLString\", \"a00062.html#a16c154fe5e35242e26af8286e77eea11\", null],\n+ [\"serializeXML\", \"a00062.html#a976ff7999fcc13ef602b6ece1b078bca\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00104.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01025.html", "comments": ["Files 78% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/MatrixSerialization.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactor.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n \n
\n \n-
MatrixSerialization.h File Reference
\n+Classes |\n+Namespaces |\n+Macros
\n+
NonlinearFactor.h File Reference
\n \n
\n \n-

Serialization for matrices. \n+

Non-linear factor base classes. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\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-Functions

template<class Archive , typename Scalar_ , int Rows_, int Cols_, int Ops_, int MaxRows_, int MaxCols_>
void boost::serialization::save (Archive &ar, const Eigen::Matrix< Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int)
 Ref.
 
\n-template<class Archive , typename Scalar_ , int Rows_, int Cols_, int Ops_, int MaxRows_, int MaxCols_>
void boost::serialization::load (Archive &ar, Eigen::Matrix< Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int)
 
\n-template<class Archive , typename Scalar_ , int Rows_, int Cols_, int Ops_, int MaxRows_, int MaxCols_>
void boost::serialization::serialize (Archive &ar, Eigen::Matrix< Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int version)
 
\n-template<class Archive >
void boost::serialization::serialize (Archive &ar, gtsam::Matrix &m, const unsigned int version)
 

\n+Classes

class  gtsam::NonlinearFactor
 Nonlinear factor base class. More...
 
struct  gtsam::traits< NonlinearFactor >
 traits More...
 
class  gtsam::NoiseModelFactor
 A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density \\( P(z|x) \\propto exp -0.5*|z-h(x)|^2_C \\) Templated on the parameter type X and the values structure Values There is no return type specified for h(x). More...
 
class  gtsam::NoiseModelFactorN< ValueTypes >
 A convenient base class for creating your own NoiseModelFactor with n variables. More...
 
\n+\n+\n+\n+\n+

\n+Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Macros

\n+#define NoiseModelFactor1   NoiseModelFactorN
 
\n+#define NoiseModelFactor2   NoiseModelFactorN
 
\n+#define NoiseModelFactor3   NoiseModelFactorN
 
\n+#define NoiseModelFactor4   NoiseModelFactorN
 
\n+#define NoiseModelFactor5   NoiseModelFactorN
 
\n+#define NoiseModelFactor6   NoiseModelFactorN
 
\n

Detailed Description

\n-

Serialization for matrices.

\n-
Author
Frank Dellaert
\n-
Date
February 2022
\n-

Function Documentation

\n-\n-

◆ save()

\n-\n-
\n-
\n-
\n-template<class Archive , typename Scalar_ , int Rows_, int Cols_, int Ops_, int MaxRows_, int MaxCols_>
\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-
void boost::serialization::save (Archive & ar,
const Eigen::Matrix< Scalar_, Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > & m,
const unsigned int  
)
\n-
\n-\n-

Ref.

\n-

https://stackoverflow.com/questions/18382457/eigen-and-boostserialize/22903063#22903063

\n-

Eigen supports calling resize() on both static and dynamic matrices. This allows for a uniform API, with resize having no effect if the static matrix is already the correct size. https://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html#TutorialMatrixSizesResizing

\n-

We use all the Matrix template parameters to ensure wide compatibility.

\n-

eigen_typekit in ROS uses the same code http://docs.ros.org/lunar/api/eigen_typekit/html/eigen__mqueue_8cpp_source.html

\n-\n-
\n-
\n-
\n+

Non-linear factor base classes.

\n+
Author
Frank Dellaert
\n+
\n+Richard Roberts
\n+
\n+Gerry Chen
\n+
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,59 +1,53 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-MatrixSerialization.h File Reference\n-Serialization for matrices. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n+NonlinearFactor.h File Reference\n+Non-linear factor base classes. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-void\u00a0 _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\bs_\ba_\bv_\be (Archive &ar, const Eigen::Matrix< Scalar_,\n- Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int)\n-\u00a0 Ref.\n-\u00a0\n-template\n-void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:l\blo\boa\bad\bd (Archive &ar, Eigen::Matrix< Scalar_, Rows_,\n- Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int)\n-\u00a0\n-template\n-void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (Archive &ar, Eigen::Matrix< Scalar_,\n- Rows_, Cols_, Ops_, MaxRows_, MaxCols_ > &m, const unsigned int version)\n-\u00a0\n-template\n-void\u00a0 b\bbo\boo\bos\bst\bt:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (Archive &ar, gtsam::Matrix &m, const\n- unsigned int version)\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Nonlinear factor base class. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+ A nonlinear sum-of-squares factor with a zero-mean noise model\n+\u00a0 implementing the density \\( P(z|x) \\propto exp -0.5*|z-h(x)|^2_C \\)\n+ Templated on the parameter type X and the values structure _\bV_\ba_\bl_\bu_\be_\bs\n+ There is no return type specified for h(x). _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bV_\ba_\bl_\bu_\be_\bT_\by_\bp_\be_\bs_\b _\b>\n+\u00a0 A convenient base class for creating your own _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br with n\n+ variables. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n+namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n+\u00a0 Global functions in a separate testing namespace.\n+\u00a0\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br1\b1\u00a0\u00a0\u00a0NoiseModelFactorN\n+\u00a0\n+#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br2\b2\u00a0\u00a0\u00a0NoiseModelFactorN\n+\u00a0\n+#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br3\b3\u00a0\u00a0\u00a0NoiseModelFactorN\n+\u00a0\n+#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br4\b4\u00a0\u00a0\u00a0NoiseModelFactorN\n+\u00a0\n+#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br5\b5\u00a0\u00a0\u00a0NoiseModelFactorN\n+\u00a0\n+#define\u00a0 N\bNo\boi\bis\bse\beM\bMo\bod\bde\bel\blF\bFa\bac\bct\bto\bor\br6\b6\u00a0\u00a0\u00a0NoiseModelFactorN\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Serialization for matrices.\n+Non-linear factor base classes.\n Author\n Frank Dellaert\n- Date\n- February 2022\n-*\b**\b**\b**\b**\b* F\bFu\bun\bnc\bct\bti\bio\bon\bn D\bDo\boc\bcu\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-*\b**\b**\b**\b**\b* _\b?\b\u25c6_\b?\b\u00a0s\bsa\bav\bve\be(\b()\b) *\b**\b**\b**\b**\b*\n-template\n-void boost::serialization::save ( Archive &\u00a0 a\bar\br,\n- const Eigen::Matrix< Scalar_, Rows_, m\bm,\n- Cols_, Ops_, MaxRows_, MaxCols_ > &\u00a0\n- const unsigned int\u00a0 \u00a0\n- )\n-Ref.\n-_\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\bs_\bt_\ba_\bc_\bk_\bo_\bv_\be_\br_\bf_\bl_\bo_\bw_\b._\bc_\bo_\bm_\b/_\bq_\bu_\be_\bs_\bt_\bi_\bo_\bn_\bs_\b/_\b1_\b8_\b3_\b8_\b2_\b4_\b5_\b7_\b/_\be_\bi_\bg_\be_\bn_\b-_\ba_\bn_\bd_\b-_\bb_\bo_\bo_\bs_\bt_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\b/\n-_\b2_\b2_\b9_\b0_\b3_\b0_\b6_\b3_\b#_\b2_\b2_\b9_\b0_\b3_\b0_\b6_\b3\n-Eigen supports calling resize() on both static and dynamic matrices. This\n-allows for a uniform API, with resize having no effect if the static matrix is\n-already the correct size. _\bh_\bt_\bt_\bp_\bs_\b:_\b/_\b/_\be_\bi_\bg_\be_\bn_\b._\bt_\bu_\bx_\bf_\ba_\bm_\bi_\bl_\by_\b._\bo_\br_\bg_\b/_\bd_\bo_\bx_\b/\n-_\bg_\br_\bo_\bu_\bp_\b__\b__\bT_\bu_\bt_\bo_\br_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bl_\ba_\bs_\bs_\b._\bh_\bt_\bm_\bl_\b#_\bT_\bu_\bt_\bo_\br_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bS_\bi_\bz_\be_\bs_\bR_\be_\bs_\bi_\bz_\bi_\bn_\bg\n-We use all the Matrix template parameters to ensure wide compatibility.\n-eigen_typekit in ROS uses the same code _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bd_\bo_\bc_\bs_\b._\br_\bo_\bs_\b._\bo_\br_\bg_\b/_\bl_\bu_\bn_\ba_\br_\b/_\ba_\bp_\bi_\b/\n-_\be_\bi_\bg_\be_\bn_\b__\bt_\by_\bp_\be_\bk_\bi_\bt_\b/_\bh_\bt_\bm_\bl_\b/_\be_\bi_\bg_\be_\bn_\b__\b__\bm_\bq_\bu_\be_\bu_\be_\b__\b8_\bc_\bp_\bp_\b__\bs_\bo_\bu_\br_\bc_\be_\b._\bh_\bt_\bm_\bl\n+ Richard Roberts\n+ Gerry Chen\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bb_\ba_\bs_\be\n- * _\bM_\ba_\bt_\br_\bi_\bx_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00128.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00029.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
Author
Richard Roberts, Michael Kaess
\n
Date
Oct 5, 2010
\n
\n \n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00131_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00953_source.html", "comments": ["Files 90% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/timing.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/CombinedImuFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
timing.h
\n+
CombinedImuFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/FastMap.h>
\n-
21#include <gtsam/dllexport.h>
\n-
22#include <gtsam/config.h> // for GTSAM_USE_TBB
\n-
23
\n-
24#include <boost/smart_ptr/shared_ptr.hpp>
\n-
25#include <boost/smart_ptr/weak_ptr.hpp>
\n-
26#include <boost/version.hpp>
\n-
27
\n-
28#include <cstddef>
\n-
29#include <string>
\n-
30
\n-
31// This file contains the GTSAM timing instrumentation library, a low-overhead method for
\n-
32// learning at a medium-fine level how much time various components of an algorithm take
\n-
33// in CPU and wall time.
\n-
34//
\n-
35// The output of this instrumentation is a call-tree-like printout containing statistics
\n-
36// about each instrumented code block. To print this output at any time, call
\n-
37// tictoc_print() or tictoc_print_().
\n-
38//
\n-
39// An overall point to be aware of is that there are two versions of each function - one
\n-
40// ending in an underscore '_' and one without the trailing underscore. The underscore
\n-
41// versions always are active, but the versions without an underscore are active only when
\n-
42// GTSAM_ENABLE_TIMING is defined (automatically defined in our CMake Timing build type).
\n-
43// GTSAM algorithms are all instrumented with the non-underscore versions, so generally
\n-
44// you should use the underscore versions in your own code to leave out the GTSAM detail.
\n-
45//
\n-
46// gttic and gttoc start and stop a timed section, respectively. gttic creates a *scoped*
\n-
47// object - when it goes out of scope gttoc is called automatically. Thus, you do not
\n-
48// need to call gttoc if you are timing an entire function (see basic use examples below).
\n-
49// However, you must be *aware* of this scoped nature - putting gttic inside of an if(...)
\n-
50// block, for example, will only time code until the closing brace '}'. See advanced
\n-
51// usage below if you need to avoid this.
\n-
52//
\n-
53// Multiple calls nest automatically - each gttic nests under the previous gttic called
\n-
54// for which gttoc has not been called (or the previous gttic did not go out of scope).
\n-
55//
\n-
56// Basic usage examples are as follows:
\n-
57//
\n-
58// - Timing an entire function:
\n-
59// void myFunction() {
\n-
60// gttic_(myFunction);
\n-
61// ........
\n-
62// }
\n-
63//
\n-
64// - Timing an entire function as well as its component parts:
\n-
65// void myLongFunction() {
\n-
66// gttic_(myLongFunction);
\n-
67// gttic_(step1); // Will nest under the 'myLongFunction' label
\n-
68// ........
\n-
69// gttoc_(step1);
\n-
70// gttic_(step2); // Will nest under the 'myLongFunction' label
\n-
71// ........
\n-
72// gttoc_(step2);
\n-
73// ........
\n-
74// }
\n-
75//
\n-
76// - Timing functions calling/called by other functions:
\n-
77// void oneStep() {
\n-
78// gttic_(oneStep); // Will automatically nest under the gttic label of the calling function
\n-
79// .......
\n-
80// }
\n-
81// void algorithm() {
\n-
82// gttic_(algorithm);
\n-
83// oneStep(); // gttic's inside this function will automatically nest inside our 'algorithm' label
\n-
84// twoStep(); // gttic's inside this function will automatically nest inside our 'algorithm' label
\n-
85// }
\n-
86//
\n-
87//
\n-
88// Advanced usage:
\n-
89//
\n-
90// - "Finishing iterations" - to get correct min/max times for each call, you must define
\n-
91// in your code what constitutes an iteration. A single sum for the min/max times is
\n-
92// accumulated within each iteration. If you don't care about min/max times, you don't
\n-
93// need to worry about this. For example:
\n-
94// void myOuterLoop() {
\n-
95// while(true) {
\n-
96// iterateMyAlgorithm();
\n-
97// tictoc_finishedIteration_();
\n-
98// tictoc_print_(); // Optional
\n-
99// }
\n-
100// }
\n-
101//
\n-
102// - Stopping timing a section in a different scope than it is started. Normally, a gttoc
\n-
103// statement goes out of scope at end of C++ scope. However, you can use longtic and
\n-
104// longtoc to start and stop timing with the specified label at any point, without regard
\n-
105// too scope. Note that if you use these, it may become difficult to ensure that you
\n-
106// have matching gttic/gttoc statments. You may want to consider reorganizing your timing
\n-
107// outline to match the scope of your code.
\n-
108
\n-
109// Automatically use the new Boost timers if version is recent enough.
\n-
110#if BOOST_VERSION >= 104800
\n-
111# ifndef GTSAM_DISABLE_NEW_TIMERS
\n-
112# define GTSAM_USING_NEW_BOOST_TIMERS
\n-
113# endif
\n-
114#endif
\n-
115
\n-
116#ifdef GTSAM_USING_NEW_BOOST_TIMERS
\n-
117# include <boost/timer/timer.hpp>
\n-
118#else
\n-
119# include <boost/timer.hpp>
\n-
120# include <gtsam/base/types.h>
\n-
121#endif
\n-
122
\n-
123#ifdef GTSAM_USE_TBB
\n-
124# include <tbb/tick_count.h>
\n-
125# undef min
\n-
126# undef max
\n-
127# undef ERROR
\n-
128#endif
\n-
129
\n-
130namespace gtsam {
\n-
131
\n-
132 namespace internal {
\n-
133 // Generate/retrieve a unique global ID number that will be used to look up tic/toc statements
\n-
134 GTSAM_EXPORT size_t getTicTocID(const char *description);
\n-
135
\n-
136 // Create new TimingOutline child for gCurrentTimer, make it gCurrentTimer, and call tic method
\n-
137 GTSAM_EXPORT void tic(size_t id, const char *label);
\n-
138
\n-
139 // Call toc on gCurrentTimer and then set gCurrentTimer to the parent of gCurrentTimer
\n-
140 GTSAM_EXPORT void toc(size_t id, const char *label);
\n-
141
\n-
\n-\n-
146 protected:
\n-
147 size_t id_;
\n-
148 size_t t_;
\n-
149 size_t tWall_;
\n-
150 double t2_ ;
\n-
151 size_t tIt_;
\n-
152 size_t tMax_;
\n-
153 size_t tMin_;
\n-
154 size_t n_;
\n-
155 size_t myOrder_;
\n-
156 size_t lastChildOrder_;
\n-
157 std::string label_;
\n-
158
\n-
159 // Tree structure
\n-
160 boost::weak_ptr<TimingOutline> parent_;
\n-\n-\n-
163
\n-
164#ifdef GTSAM_USING_NEW_BOOST_TIMERS
\n-
165 boost::timer::cpu_timer timer_;
\n-
166#else
\n-
167 boost::timer timer_;
\n-\n-
169#endif
\n-
170#ifdef GTSAM_USE_TBB
\n-
171 tbb::tick_count tbbTimer_;
\n-
172#endif
\n-
173 void add(size_t usecs, size_t usecsWall);
\n-
174
\n-
175 public:
\n-
177 GTSAM_EXPORT TimingOutline(const std::string& label, size_t myId);
\n-
178 GTSAM_EXPORT size_t time() const;
\n-
179 double secs() const { return double(time()) / 1000000.0;}
\n-
\n-
180 double self() const { return double(t_) / 1000000.0;}
\n-
\n-
181 double wall() const { return double(tWall_) / 1000000.0;}
\n-
\n-
182 double min() const { return double(tMin_) / 1000000.0;}
\n-
\n-
183 double max() const { return double(tMax_) / 1000000.0;}
\n-
\n-
184 double mean() const { return self() / double(n_); }
\n-
185 GTSAM_EXPORT void print(const std::string& outline = "") const;
\n-
186 GTSAM_EXPORT void print2(const std::string& outline = "", const double parentTotal = -1.0) const;
\n-
187 GTSAM_EXPORT const boost::shared_ptr<TimingOutline>&
\n-
188 child(size_t child, const std::string& label, const boost::weak_ptr<TimingOutline>& thisPtr);
\n-
189 GTSAM_EXPORT void tic();
\n-
190 GTSAM_EXPORT void toc();
\n-
191 GTSAM_EXPORT void finishedIteration();
\n-
192
\n-
193 GTSAM_EXPORT friend void toc(size_t id, const char *label);
\n-
194 }; // \\TimingOutline
\n-
195
\n-
\n-
199 class GTSAM_EXPORT AutoTicToc {
\n-
200 private:
\n-
201 size_t id_;
\n-
202 const char* label_;
\n-
203 bool isSet_;
\n-
204
\n-
205 public:
\n-
206 AutoTicToc(size_t id, const char* label)
\n-
207 : id_(id), label_(label), isSet_(true) {
\n-
208 tic(id_, label_);
\n-
209 }
\n-
210 void stop() {
\n-
211 toc(id_, label_);
\n-
212 isSet_ = false;
\n-
213 }
\n-
214 ~AutoTicToc() {
\n-
215 if (isSet_) stop();
\n-
216 }
\n-
217 };
\n-
\n-
218
\n-
219 GTSAM_EXTERN_EXPORT boost::shared_ptr<TimingOutline> gTimingRoot;
\n-
220 GTSAM_EXTERN_EXPORT boost::weak_ptr<TimingOutline> gCurrentTimer;
\n-
221 }
\n+
23#pragma once
\n+
24
\n+
25/* GTSAM includes */
\n+\n+\n+\n+
29#include <gtsam/base/Matrix.h>
\n+\n+
31
\n+
32namespace gtsam {
\n+
33
\n+
34#ifdef GTSAM_TANGENT_PREINTEGRATION
\n+
35typedef TangentPreintegration PreintegrationType;
\n+
36#else
\n+
37typedef ManifoldPreintegration PreintegrationType;
\n+
38#endif
\n+
39
\n+
40/*
\n+
41 * If you are using the factor, please cite:
\n+
42 * L. Carlone, Z. Kira, C. Beall, V. Indelman, F. Dellaert, Eliminating
\n+
43 * conditionally independent sets in factor graphs: a unifying perspective based
\n+
44 * on smart factors, Int. Conf. on Robotics and Automation (ICRA), 2014.
\n+
45 *
\n+
46 * REFERENCES:
\n+
47 * [1] G.S. Chirikjian, "Stochastic Models, Information Theory, and Lie Groups",
\n+
48 * Volume 2, 2008.
\n+
49 * [2] T. Lupton and S.Sukkarieh, "Visual-Inertial-Aided Navigation for
\n+
50 * High-Dynamic Motion in Built Environments Without Initial Conditions",
\n+
51 * TRO, 28(1):61-76, 2012.
\n+
52 * [3] L. Carlone, S. Williams, R. Roberts, "Preintegrated IMU factor:
\n+
53 * Computation of the Jacobian Matrices", Tech. Report, 2013.
\n+
54 * Available in this repo as "PreintegratedIMUJacobians.pdf".
\n+
55 * [4] C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, IMU Preintegration on
\n+
56 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation,
\n+
57 * Robotics: Science and Systems (RSS), 2015.
\n+
58 */
\n+
59
\n+
\n+\n+\n+\n+\n+
66
\n+
\n+\n+
70 : biasAccCovariance(I_3x3),
\n+
71 biasOmegaCovariance(I_3x3),
\n+
72 biasAccOmegaInt(I_6x6) {}
\n+
\n+
73
\n+
\n+
75 PreintegrationCombinedParams(const Vector3& n_gravity) :
\n+
76 PreintegrationParams(n_gravity), biasAccCovariance(I_3x3),
\n+
77 biasOmegaCovariance(I_3x3), biasAccOmegaInt(I_6x6) {
\n+
78
\n+
79 }
\n+
\n+
80
\n+
81 // Default Params for a Z-down navigation frame, such as NED: gravity points along positive Z-axis
\n+
82 static boost::shared_ptr<PreintegrationCombinedParams> MakeSharedD(double g = 9.81) {
\n+
83 return boost::shared_ptr<PreintegrationCombinedParams>(new PreintegrationCombinedParams(Vector3(0, 0, g)));
\n+
84 }
\n+
85
\n+
86 // Default Params for a Z-up navigation frame, such as ENU: gravity points along negative Z-axis
\n+
87 static boost::shared_ptr<PreintegrationCombinedParams> MakeSharedU(double g = 9.81) {
\n+
88 return boost::shared_ptr<PreintegrationCombinedParams>(new PreintegrationCombinedParams(Vector3(0, 0, -g)));
\n+
89 }
\n+
90
\n+
91 void print(const std::string& s="") const override;
\n+
92 bool equals(const PreintegratedRotationParams& other, double tol) const override;
\n+
93
\n+
94 void setBiasAccCovariance(const Matrix3& cov) { biasAccCovariance=cov; }
\n+
95 void setBiasOmegaCovariance(const Matrix3& cov) { biasOmegaCovariance=cov; }
\n+
96 void setBiasAccOmegaInit(const Matrix6& cov) { biasAccOmegaInt=cov; }
\n+
97
\n+
98 const Matrix3& getBiasAccCovariance() const { return biasAccCovariance; }
\n+
99 const Matrix3& getBiasOmegaCovariance() const { return biasOmegaCovariance; }
\n+
100 const Matrix6& getBiasAccOmegaInit() const { return biasAccOmegaInt; }
\n+
101
\n+
102private:
\n+
103
\n+
105 friend class boost::serialization::access;
\n+
106 template <class ARCHIVE>
\n+
107 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
108 namespace bs = ::boost::serialization;
\n+
109 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegrationParams);
\n+
110 ar & BOOST_SERIALIZATION_NVP(biasAccCovariance);
\n+
111 ar & BOOST_SERIALIZATION_NVP(biasOmegaCovariance);
\n+
112 ar & BOOST_SERIALIZATION_NVP(biasAccOmegaInt);
\n+
113 }
\n+
114
\n+
115public:
\n+\n+
117};
\n+
\n+
118
\n+
\n+\n+
130
\n+
131public:
\n+\n+
133
\n+
134 protected:
\n+
135 /* Covariance matrix of the preintegrated measurements
\n+
136 * COVARIANCE OF: [PreintROTATION PreintPOSITION PreintVELOCITY BiasAcc BiasOmega]
\n+
137 * (first-order propagation from *measurementCovariance*).
\n+
138 * PreintegratedCombinedMeasurements also include the biases and keep the correlation
\n+
139 * between the preintegrated measurements and the biases
\n+
140 */
\n+
141 Eigen::Matrix<double, 15, 15> preintMeasCov_;
\n+
142
\n+
143 friend class CombinedImuFactor;
\n+
144
\n+
145 public:
\n+
148
\n+
\n+\n+
151 preintMeasCov_.setZero();
\n+
152 }
\n+
\n+
153
\n+
\n+\n+
160 const boost::shared_ptr<Params>& p,
\n+\n+
162 : PreintegrationType(p, biasHat) {
\n+
163 preintMeasCov_.setZero();
\n+
164 }
\n+
\n+
165
\n+
\n+
171 PreintegratedCombinedMeasurements(const PreintegrationType& base, const Eigen::Matrix<double, 15, 15>& preintMeasCov)
\n+
172 : PreintegrationType(base),
\n+
173 preintMeasCov_(preintMeasCov) {
\n+
174 }
\n+
\n+
175
\n+\n+
178
\n+
180
\n+
183
\n+
185 void resetIntegration() override;
\n+
186
\n+
188 Params& p() const { return *boost::static_pointer_cast<Params>(this->p_); }
\n+
190
\n+
194 Matrix preintMeasCov() const { return preintMeasCov_; }
\n+
196
\n+
200 void print(const std::string& s = "Preintegrated Measurements:") const override;
\n+
202 bool equals(const PreintegratedCombinedMeasurements& expected,
\n+
203 double tol = 1e-9) const;
\n+
205
\n+
206
\n+
209
\n+
220 void integrateMeasurement(const Vector3& measuredAcc,
\n+
221 const Vector3& measuredOmega, const double dt) override;
\n
222
\n-
223// Tic and toc functions that are always active (whether or not ENABLE_TIMING is defined)
\n-
224// There is a trick being used here to achieve near-zero runtime overhead, in that a
\n-
225// static variable is created for each tic/toc statement storing an integer ID, but the
\n-
226// integer ID is only looked up by string once when the static variable is initialized
\n-
227// as the program starts.
\n-
228
\n-
229// tic
\n-
230#define gttic_(label) \\
\n-
231 static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\
\n-
232 ::gtsam::internal::AutoTicToc label##_obj(label##_id_tic, #label)
\n-
233
\n-
234// toc
\n-
235#define gttoc_(label) \\
\n-
236 label##_obj.stop()
\n-
237
\n-
238// tic
\n-
239#define longtic_(label) \\
\n-
240 static const size_t label##_id_tic = ::gtsam::internal::getTicTocID(#label); \\
\n-
241 ::gtsam::internal::ticInternal(label##_id_tic, #label)
\n-
242
\n-
243// toc
\n-
244#define longtoc_(label) \\
\n-
245 static const size_t label##_id_toc = ::gtsam::internal::getTicTocID(#label); \\
\n-
246 ::gtsam::internal::tocInternal(label##_id_toc, #label)
\n-
247
\n-
248// indicate iteration is finished
\n-
249inline void tictoc_finishedIteration_() {
\n-
250 ::gtsam::internal::gTimingRoot->finishedIteration(); }
\n-
251
\n-
252// print
\n-
253inline void tictoc_print_() {
\n-
254 ::gtsam::internal::gTimingRoot->print(); }
\n-
255
\n-
256// print mean and standard deviation
\n-
257inline void tictoc_print2_() {
\n-
258 ::gtsam::internal::gTimingRoot->print2(); }
\n-
259
\n-
260// get a node by label and assign it to variable
\n-
261#define tictoc_getNode(variable, label) \\
\n-
262 static const size_t label##_id_getnode = ::gtsam::internal::getTicTocID(#label); \\
\n-
263 const boost::shared_ptr<const ::gtsam::internal::TimingOutline> variable = \\
\n-
264 ::gtsam::internal::gCurrentTimer.lock()->child(label##_id_getnode, #label, ::gtsam::internal::gCurrentTimer);
\n-
265
\n-
266// reset
\n-
267inline void tictoc_reset_() {
\n-
268 ::gtsam::internal::gTimingRoot.reset(new ::gtsam::internal::TimingOutline("Total", ::gtsam::internal::getTicTocID("Total")));
\n-
269 ::gtsam::internal::gCurrentTimer = ::gtsam::internal::gTimingRoot; }
\n-
270
\n-
271#ifdef ENABLE_TIMING
\n-
272#define gttic(label) gttic_(label)
\n-
273#define gttoc(label) gttoc_(label)
\n-
274#define longtic(label) longtic_(label)
\n-
275#define longtoc(label) longtoc_(label)
\n-
276#define tictoc_finishedIteration tictoc_finishedIteration_
\n-
277#define tictoc_print tictoc_print_
\n-
278#define tictoc_reset tictoc_reset_
\n-
279#else
\n-
280#define gttic(label) ((void)0)
\n-
281#define gttoc(label) ((void)0)
\n-
282#define longtic(label) ((void)0)
\n-
283#define longtoc(label) ((void)0)
\n-
284#define tictoc_finishedIteration() ((void)0)
\n-
285#define tictoc_print() ((void)0)
\n-
286#define tictoc_reset() ((void)0)
\n-
287#endif
\n-
288
\n-
289}
\n-
\n-
\n-
\n-
\n-
\n-
\n-
Typedefs for easier changing of types.
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
224
\n+
225 private:
\n+
227 friend class boost::serialization::access;
\n+
228 template <class ARCHIVE>
\n+
229 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
230 namespace bs = ::boost::serialization;
\n+
231 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegrationType);
\n+
232 ar& BOOST_SERIALIZATION_NVP(preintMeasCov_);
\n+
233 }
\n+
234
\n+
235public:
\n+\n+
237};
\n+
\n+
238
\n+
\n+
258class GTSAM_EXPORT CombinedImuFactor: public NoiseModelFactorN<Pose3, Vector3, Pose3,
\n+
259 Vector3, imuBias::ConstantBias, imuBias::ConstantBias> {
\n+
260public:
\n+
261
\n+
262private:
\n+
263
\n+
264 typedef CombinedImuFactor This;
\n+
265 typedef NoiseModelFactorN<Pose3, Vector3, Pose3, Vector3,
\n+\n+
267
\n+\n+
269
\n+
270public:
\n+
271
\n+
273#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5
\n+
274 typedef typename boost::shared_ptr<CombinedImuFactor> shared_ptr;
\n+
275#else
\n+
276 typedef boost::shared_ptr<CombinedImuFactor> shared_ptr;
\n+
277#endif
\n+
278
\n+\n+
281
\n+\n+
293 Key pose_i, Key vel_i, Key pose_j, Key vel_j, Key bias_i, Key bias_j,
\n+
294 const PreintegratedCombinedMeasurements& preintegratedMeasurements);
\n+
295
\n+
296 ~CombinedImuFactor() override {}
\n+
297
\n+
299 gtsam::NonlinearFactor::shared_ptr clone() const override;
\n+
300
\n+
305 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n+
306 const CombinedImuFactor&);
\n+
308 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
309 DefaultKeyFormatter) const override;
\n+
310
\n+
312 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n+
314
\n+
\n+\n+
318 return _PIM_;
\n+
319 }
\n+
\n+
320
\n+
324 Vector evaluateError(const Pose3& pose_i, const Vector3& vel_i,
\n+
325 const Pose3& pose_j, const Vector3& vel_j,
\n+
326 const imuBias::ConstantBias& bias_i, const imuBias::ConstantBias& bias_j,
\n+
327 boost::optional<Matrix&> H1 = boost::none, boost::optional<Matrix&> H2 =
\n+
328 boost::none, boost::optional<Matrix&> H3 = boost::none,
\n+
329 boost::optional<Matrix&> H4 = boost::none, boost::optional<Matrix&> H5 =
\n+
330 boost::none, boost::optional<Matrix&> H6 = boost::none) const override;
\n+
331
\n+
332 private:
\n+
334 friend class boost::serialization::access;
\n+
335 template <class ARCHIVE>
\n+
336 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
337 // NoiseModelFactor6 instead of NoiseModelFactorN for backward compatibility
\n+
338 ar& boost::serialization::make_nvp(
\n+
339 "NoiseModelFactor6", boost::serialization::base_object<Base>(*this));
\n+
340 ar& BOOST_SERIALIZATION_NVP(_PIM_);
\n+
341 }
\n+
342
\n+
343public:
\n+\n+
345};
\n+
\n+
346// class CombinedImuFactor
\n+
347
\n+
348template <>
\n+
\n+\n+
350 : public Testable<PreintegrationCombinedParams> {};
\n+
\n+
351
\n+
352template <>
\n+
\n+\n+
354 : public Testable<PreintegratedCombinedMeasurements> {};
\n+
\n+
355
\n+
356template <>
\n+
357struct traits<CombinedImuFactor> : public Testable<CombinedImuFactor> {};
\n+
358
\n+
359} // namespace gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Convenience functions for serializing data structures via boost.serialization.
\n+\n+\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-
Timing Entry, arranged in a tree.
Definition timing.h:145
\n-
double t2_
cache the
Definition timing.h:150
\n-
ChildMap children_
subtrees
Definition timing.h:162
\n-
double max() const
max time, in seconds
Definition timing.h:183
\n-
double wall() const
wall time, in seconds
Definition timing.h:181
\n-
double secs() const
time taken, in seconds, including children
Definition timing.h:179
\n-
double self() const
self time only, in seconds
Definition timing.h:180
\n-
boost::weak_ptr< TimingOutline > parent_
parent pointer
Definition timing.h:160
\n-
double min() const
min time, in seconds
Definition timing.h:182
\n-
double mean() const
mean self time, in seconds
Definition timing.h:184
\n-
GTSAM_EXPORT size_t time() const
time taken, including children
Definition timing.cpp:65
\n-
Small class that calls internal::tic at construction, and internol::toc when destroyed.
Definition timing.h:199
\n-
Helper struct that encapsulates a value with a default, this is just used as a member object so you d...
Definition types.h:137
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Parameters for pre-integration using PreintegratedCombinedMeasurements: Usage: Create just a single P...
Definition CombinedImuFactor.h:62
\n+
Matrix6 biasAccOmegaInt
covariance of bias used as initial estimate.
Definition CombinedImuFactor.h:65
\n+
PreintegrationCombinedParams(const Vector3 &n_gravity)
See two named constructors below for good values of n_gravity in body frame.
Definition CombinedImuFactor.h:75
\n+
PreintegrationCombinedParams()
Default constructor makes uninitialized params struct.
Definition CombinedImuFactor.h:69
\n+
Matrix3 biasOmegaCovariance
continuous-time "Covariance" describing gyroscope bias random walk
Definition CombinedImuFactor.h:64
\n+
Matrix3 biasAccCovariance
continuous-time "Covariance" describing accelerometer bias random walk
Definition CombinedImuFactor.h:63
\n+
PreintegratedCombinedMeasurements integrates the IMU measurements (rotation rates and accelerations) ...
Definition CombinedImuFactor.h:129
\n+
PreintegratedCombinedMeasurements(const PreintegrationType &base, const Eigen::Matrix< double, 15, 15 > &preintMeasCov)
Construct preintegrated directly from members: base class and preintMeasCov.
Definition CombinedImuFactor.h:171
\n+
~PreintegratedCombinedMeasurements() override
Virtual destructor.
Definition CombinedImuFactor.h:177
\n+
PreintegratedCombinedMeasurements()
Default constructor only for serialization and wrappers.
Definition CombinedImuFactor.h:150
\n+
Params & p() const
const reference to params, shadows definition in base class
Definition CombinedImuFactor.h:188
\n+
PreintegratedCombinedMeasurements(const boost::shared_ptr< Params > &p, const imuBias::ConstantBias &biasHat=imuBias::ConstantBias())
Default constructor, initializes the class with no measurements.
Definition CombinedImuFactor.h:159
\n+
CombinedImuFactor is a 6-ways factor involving previous state (pose and velocity of the vehicle,...
Definition CombinedImuFactor.h:259
\n+
boost::shared_ptr< CombinedImuFactor > shared_ptr
Shorthand for a smart pointer to a factor.
Definition CombinedImuFactor.h:276
\n+
CombinedImuFactor()
Default constructor - only use for serialization.
Definition CombinedImuFactor.h:280
\n+
const PreintegratedCombinedMeasurements & preintegratedMeasurements() const
Access the preintegrated measurements.
Definition CombinedImuFactor.h:317
\n+
Definition ImuBias.h:30
\n+
IMU pre-integration on NavSatet manifold.
Definition ManifoldPreintegration.h:33
\n+
Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the c...
Definition PreintegrationParams.h:26
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,394 +1,389 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-timing.h\n+CombinedImuFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n-21#include \n-22#include // for GTSAM_USE_TBB\n-23\n-24#include \n-25#include \n-26#include \n-27\n-28#include \n-29#include \n-30\n-31// This file contains the GTSAM timing instrumentation library, a low-\n-overhead method for\n-32// learning at a medium-fine level how much time various components of an\n-algorithm take\n-33// in CPU and wall time.\n-34//\n-35// The output of this instrumentation is a call-tree-like printout containing\n-statistics\n-36// about each instrumented code block. To print this output at any time, call\n-37// tictoc_print() or tictoc_print_().\n-38//\n-39// An overall point to be aware of is that there are two versions of each\n-function - one\n-40// ending in an underscore '_' and one without the trailing underscore. The\n-underscore\n-41// versions always are active, but the versions without an underscore are\n-active only when\n-42// GTSAM_ENABLE_TIMING is defined (automatically defined in our CMake Timing\n-build type).\n-43// GTSAM algorithms are all instrumented with the non-underscore versions, so\n-generally\n-44// you should use the underscore versions in your own code to leave out the\n-GTSAM detail.\n-45//\n-46// gttic and gttoc start and stop a timed section, respectively. gttic\n-creates a *scoped*\n-47// object - when it goes out of scope gttoc is called automatically. Thus,\n-you do not\n-48// need to call gttoc if you are timing an entire function (see basic use\n-examples below).\n-49// However, you must be *aware* of this scoped nature - putting gttic inside\n-of an if(...)\n-50// block, for example, will only time code until the closing brace '}'. See\n-advanced\n-51// usage below if you need to avoid this.\n-52//\n-53// Multiple calls nest automatically - each gttic nests under the previous\n-gttic called\n-54// for which gttoc has not been called (or the previous gttic did not go out\n-of scope).\n-55//\n-56// Basic usage examples are as follows:\n-57//\n-58// - Timing an entire function:\n-59// void myFunction() {\n-60// gttic_(myFunction);\n-61// ........\n-62// }\n-63//\n-64// - Timing an entire function as well as its component parts:\n-65// void myLongFunction() {\n-66// gttic_(myLongFunction);\n-67// gttic_(step1); // Will nest under the 'myLongFunction' label\n-68// ........\n-69// gttoc_(step1);\n-70// gttic_(step2); // Will nest under the 'myLongFunction' label\n-71// ........\n-72// gttoc_(step2);\n-73// ........\n-74// }\n-75//\n-76// - Timing functions calling/called by other functions:\n-77// void oneStep() {\n-78// gttic_(oneStep); // Will automatically nest under the gttic label of the\n-calling function\n-79// .......\n-80// }\n-81// void algorithm() {\n-82// gttic_(algorithm);\n-83// oneStep(); // gttic's inside this function will automatically nest inside\n-our 'algorithm' label\n-84// twoStep(); // gttic's inside this function will automatically nest inside\n-our 'algorithm' label\n-85// }\n-86//\n-87//\n-88// Advanced usage:\n-89//\n-90// - \"Finishing iterations\" - to get correct min/max times for each call, you\n-must define\n-91// in your code what constitutes an iteration. A single sum for the min/max\n-times is\n-92// accumulated within each iteration. If you don't care about min/max times,\n-you don't\n-93// need to worry about this. For example:\n-94// void myOuterLoop() {\n-95// while(true) {\n-96// iterateMyAlgorithm();\n-97// tictoc_finishedIteration_();\n-98// tictoc_print_(); // Optional\n-99// }\n-100// }\n-101//\n-102// - Stopping timing a section in a different scope than it is started.\n-Normally, a gttoc\n-103// statement goes out of scope at end of C++ scope. However, you can use\n-longtic and\n-104// longtoc to start and stop timing with the specified label at any point,\n-without regard\n-105// too scope. Note that if you use these, it may become difficult to ensure\n-that you\n-106// have matching gttic/gttoc statments. You may want to consider\n-reorganizing your timing\n-107// outline to match the scope of your code.\n-108\n-109// Automatically use the new Boost timers if version is recent enough.\n-110#if BOOST_VERSION >= 104800\n-111# ifndef GTSAM_DISABLE_NEW_TIMERS\n-112# define GTSAM_USING_NEW_BOOST_TIMERS\n-113# endif\n-114#endif\n-115\n-116#ifdef GTSAM_USING_NEW_BOOST_TIMERS\n-117# include \n-118#else\n-119# include \n-120# include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-121#endif\n-122\n-123#ifdef GTSAM_USE_TBB\n-124# include \n-125# undef min\n-126# undef max\n-127# undef ERROR\n-128#endif\n-129\n-130namespace _\bg_\bt_\bs_\ba_\bm {\n-131\n-132 namespace internal {\n-133 // Generate/retrieve a unique global ID number that will be used to look up\n-tic/toc statements\n-134 GTSAM_EXPORT size_t getTicTocID(const char *description);\n-135\n-136 // Create new TimingOutline child for gCurrentTimer, make it gCurrentTimer,\n-and call tic method\n-137 GTSAM_EXPORT void tic(size_t id, const char *label);\n-138\n-139 // Call toc on gCurrentTimer and then set gCurrentTimer to the parent of\n-gCurrentTimer\n-140 GTSAM_EXPORT void toc(size_t id, const char *label);\n-141\n-_\b1_\b4_\b5 class _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be {\n-146 protected:\n-147 size_t id_;\n-148 size_t t_;\n-149 size_t tWall_;\n-_\b1_\b5_\b0 double _\bt_\b2_\b_ ;\n-151 size_t tIt_;\n-152 size_t tMax_;\n-153 size_t tMin_;\n-154 size_t n_;\n-155 size_t myOrder_;\n-156 size_t lastChildOrder_;\n-157 std::string label_;\n-158\n-159 // Tree structure\n-_\b1_\b6_\b0 boost::weak_ptr _\bp_\ba_\br_\be_\bn_\bt_\b_;\n-161 typedef _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bs_\bi_\bz_\be_\b__\bt_\b,_\b _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b<_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b> > _\bC_\bh_\bi_\bl_\bd_\bM_\ba_\bp;\n-_\b1_\b6_\b2 _\bC_\bh_\bi_\bl_\bd_\bM_\ba_\bp _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_;\n-163\n-164#ifdef GTSAM_USING_NEW_BOOST_TIMERS\n-165 boost::timer::cpu_timer timer_;\n-166#else\n-167 boost::timer timer_;\n-168 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt_\b<_\bb_\bo_\bo_\bl_\b,_\bf_\ba_\bl_\bs_\be_\b> timerActive_;\n-169#endif\n-170#ifdef GTSAM_USE_TBB\n-171 tbb::tick_count tbbTimer_;\n-172#endif\n-173 void add(size_t usecs, size_t usecsWall);\n-174\n-175 public:\n-177 GTSAM_EXPORT _\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be(const std::string& label, size_t myId);\n-178 GTSAM_EXPORT size_t _\bt_\bi_\bm_\be() const;\n-_\b1_\b7_\b9 double _\bs_\be_\bc_\bs() const { return double(_\bt_\bi_\bm_\be()) / 1000000.0;}\n-_\b1_\b8_\b0 double _\bs_\be_\bl_\bf() const { return double(t_) / 1000000.0;}\n-_\b1_\b8_\b1 double _\bw_\ba_\bl_\bl() const { return double(tWall_) / 1000000.0;}\n-_\b1_\b8_\b2 double _\bm_\bi_\bn() const { return double(tMin_) / 1000000.0;}\n-_\b1_\b8_\b3 double _\bm_\ba_\bx() const { return double(tMax_) / 1000000.0;}\n-_\b1_\b8_\b4 double _\bm_\be_\ba_\bn() const { return _\bs_\be_\bl_\bf() / double(n_); }\n-185 GTSAM_EXPORT void print(const std::string& outline = \"\") const;\n-186 GTSAM_EXPORT void print2(const std::string& outline = \"\", const double\n-parentTotal = -1.0) const;\n-187 GTSAM_EXPORT const boost::shared_ptr&\n-188 child(size_t child, const std::string& label, const boost::\n-weak_ptr& thisPtr);\n-189 GTSAM_EXPORT void tic();\n-190 GTSAM_EXPORT void toc();\n-191 GTSAM_EXPORT void finishedIteration();\n-192\n-193 GTSAM_EXPORT friend void toc(size_t id, const char *label);\n-194 }; // \\TimingOutline\n-195\n-_\b1_\b9_\b9 class GTSAM_EXPORT _\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc {\n-200 private:\n-201 size_t id_;\n-202 const char* label_;\n-203 bool isSet_;\n-204\n-205 public:\n-206 _\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc(size_t id, const char* label)\n-207 : id_(id), label_(label), isSet_(true) {\n-208 tic(id_, label_);\n-209 }\n-210 void stop() {\n-211 toc(id_, label_);\n-212 isSet_ = false;\n-213 }\n-214 _\b~_\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc() {\n-215 if (isSet_) stop();\n-216 }\n-217 };\n-218\n-219 GTSAM_EXTERN_EXPORT boost::shared_ptr gTimingRoot;\n-220 GTSAM_EXTERN_EXPORT boost::weak_ptr gCurrentTimer;\n-221 }\n+23#pragma once\n+24\n+25/* GTSAM includes */\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+31\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+34#ifdef GTSAM_TANGENT_PREINTEGRATION\n+35typedef TangentPreintegration PreintegrationType;\n+36#else\n+37typedef ManifoldPreintegration PreintegrationType;\n+38#endif\n+39\n+40/*\n+41 * If you are using the factor, please cite:\n+42 * L. Carlone, Z. Kira, C. Beall, V. Indelman, F. Dellaert, Eliminating\n+43 * conditionally independent sets in factor graphs: a unifying perspective\n+based\n+44 * on smart factors, Int. Conf. on Robotics and Automation (ICRA), 2014.\n+45 *\n+46 * REFERENCES:\n+47 * [1] G.S. Chirikjian, \"Stochastic Models, Information Theory, and Lie\n+Groups\",\n+48 * Volume 2, 2008.\n+49 * [2] T. Lupton and S.Sukkarieh, \"Visual-Inertial-Aided Navigation for\n+50 * High-Dynamic Motion in Built Environments Without Initial Conditions\",\n+51 * TRO, 28(1):61-76, 2012.\n+52 * [3] L. Carlone, S. Williams, R. Roberts, \"Preintegrated IMU factor:\n+53 * Computation of the Jacobian Matrices\", Tech. Report, 2013.\n+54 * Available in this repo as \"PreintegratedIMUJacobians.pdf\".\n+55 * [4] C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, IMU Preintegration\n+on\n+56 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation,\n+57 * Robotics: Science and Systems (RSS), 2015.\n+58 */\n+59\n+_\b6_\b2struct GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs : _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs {\n+_\b6_\b3 Matrix3 _\bb_\bi_\ba_\bs_\bA_\bc_\bc_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be;\n+_\b6_\b4 Matrix3 _\bb_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be;\n+_\b6_\b5 Matrix6 _\bb_\bi_\ba_\bs_\bA_\bc_\bc_\bO_\bm_\be_\bg_\ba_\bI_\bn_\bt;\n+66\n+_\b6_\b9 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs()\n+70 : biasAccCovariance(I_3x3),\n+71 biasOmegaCovariance(I_3x3),\n+72 biasAccOmegaInt(I_6x6) {}\n+73\n+_\b7_\b5 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs(const Vector3& n_gravity) :\n+76 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs(n_gravity), biasAccCovariance(I_3x3),\n+77 biasOmegaCovariance(I_3x3), biasAccOmegaInt(I_6x6) {\n+78\n+79 }\n+80\n+81 // Default Params for a Z-down navigation frame, such as NED: gravity points\n+along positive Z-axis\n+82 static boost::shared_ptr MakeSharedD(double g\n+= 9.81) {\n+83 return boost::shared_ptr(new\n+_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs(Vector3(0, 0, g)));\n+84 }\n+85\n+86 // Default Params for a Z-up navigation frame, such as ENU: gravity points\n+along negative Z-axis\n+87 static boost::shared_ptr MakeSharedU(double g\n+= 9.81) {\n+88 return boost::shared_ptr(new\n+PreintegrationCombinedParams(Vector3(0, 0, -g)));\n+89 }\n+90\n+91 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\") const override;\n+92 bool equals(const PreintegratedRotationParams& other, double tol) const\n+override;\n+93\n+94 void setBiasAccCovariance(const Matrix3& cov) { biasAccCovariance=cov; }\n+95 void setBiasOmegaCovariance(const Matrix3& cov) { biasOmegaCovariance=cov; }\n+96 void setBiasAccOmegaInit(const Matrix6& cov) { biasAccOmegaInt=cov; }\n+97\n+98 const Matrix3& getBiasAccCovariance() const { return biasAccCovariance; }\n+99 const Matrix3& getBiasOmegaCovariance() const { return biasOmegaCovariance;\n+}\n+100 const Matrix6& getBiasAccOmegaInit() const { return biasAccOmegaInt; }\n+101\n+102private:\n+103\n+_\b1_\b0_\b5 friend class boost::serialization::access;\n+106 template \n+107 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+108 namespace bs = ::boost::serialization;\n+109 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs);\n+110 ar & BOOST_SERIALIZATION_NVP(biasAccCovariance);\n+111 ar & BOOST_SERIALIZATION_NVP(biasOmegaCovariance);\n+112 ar & BOOST_SERIALIZATION_NVP(biasAccOmegaInt);\n+113 }\n+114\n+115public:\n+116 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+117};\n+118\n+_\b1_\b2_\b9class GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs : public\n+_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be {\n+130\n+131public:\n+132 typedef _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs _\bP_\ba_\br_\ba_\bm_\bs;\n+133\n+134 protected:\n+135 /* Covariance matrix of the preintegrated measurements\n+136 * COVARIANCE OF: [PreintROTATION PreintPOSITION PreintVELOCITY BiasAcc\n+BiasOmega]\n+137 * (first-order propagation from *measurementCovariance*).\n+138 * PreintegratedCombinedMeasurements also include the biases and keep the\n+correlation\n+139 * between the preintegrated measurements and the biases\n+140 */\n+141 Eigen::Matrix preintMeasCov_;\n+142\n+143 friend class _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br;\n+144\n+145 public:\n+148\n+_\b1_\b5_\b0 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() {\n+151 preintMeasCov_.setZero();\n+152 }\n+153\n+_\b1_\b5_\b9 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n+160 const boost::shared_ptr& p,\n+161 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& biasHat = _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs())\n+162 : _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be(p, biasHat) {\n+163 preintMeasCov_.setZero();\n+164 }\n+165\n+_\b1_\b7_\b1 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be& base, const\n+Eigen::Matrix& preintMeasCov)\n+172 : _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be(base),\n+173 preintMeasCov_(preintMeasCov) {\n+174 }\n+175\n+_\b1_\b7_\b7 _\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() override {}\n+178\n+180\n+183\n+185 void resetIntegration() override;\n+186\n+_\b1_\b8_\b8 _\bP_\ba_\br_\ba_\bm_\bs& _\bp() const { return *boost::static_pointer_cast(this->p_); }\n+190\n+194 Matrix preintMeasCov() const { return preintMeasCov_; }\n+196\n+200 void print(const std::string& s = \"Preintegrated Measurements:\") const\n+override;\n+202 bool equals(const PreintegratedCombinedMeasurements& expected,\n+203 double tol = 1e-9) const;\n+205\n+206\n+209\n+220 void integrateMeasurement(const Vector3& measuredAcc,\n+221 const Vector3& measuredOmega, const double dt) override;\n 222\n-223// Tic and toc functions that are always active (whether or not\n-ENABLE_TIMING is defined)\n-224// There is a trick being used here to achieve near-zero runtime overhead,\n-in that a\n-225// static variable is created for each tic/toc statement storing an integer\n-ID, but the\n-226// integer ID is only looked up by string once when the static variable is\n-initialized\n-227// as the program starts.\n-228\n-229// tic\n-230#define gttic_(label) \\\n-231 static const size_t label##_id_tic = ::gtsam::internal::getTicTocID\n-(#label); \\\n-232 ::gtsam::internal::AutoTicToc label##_obj(label##_id_tic, #label)\n-233\n-234// toc\n-235#define gttoc_(label) \\\n-236 label##_obj.stop()\n-237\n-238// tic\n-239#define longtic_(label) \\\n-240 static const size_t label##_id_tic = ::gtsam::internal::getTicTocID\n-(#label); \\\n-241 ::gtsam::internal::ticInternal(label##_id_tic, #label)\n-242\n-243// toc\n-244#define longtoc_(label) \\\n-245 static const size_t label##_id_toc = ::gtsam::internal::getTicTocID\n-(#label); \\\n-246 ::gtsam::internal::tocInternal(label##_id_toc, #label)\n-247\n-248// indicate iteration is finished\n-249inline void tictoc_finishedIteration_() {\n-250 ::gtsam::internal::gTimingRoot->finishedIteration(); }\n-251\n-252// print\n-253inline void tictoc_print_() {\n-254 ::gtsam::internal::gTimingRoot->print(); }\n-255\n-256// print mean and standard deviation\n-257inline void tictoc_print2_() {\n-258 ::gtsam::internal::gTimingRoot->print2(); }\n-259\n-260// get a node by label and assign it to variable\n-261#define tictoc_getNode(variable, label) \\\n-262 static const size_t label##_id_getnode = ::gtsam::internal::getTicTocID\n-(#label); \\\n-263 const boost::shared_ptr variable =\n-\\\n-264 ::gtsam::internal::gCurrentTimer.lock()->child(label##_id_getnode, #label,\n-::gtsam::internal::gCurrentTimer);\n-265\n-266// reset\n-267inline void tictoc_reset_() {\n-268 ::gtsam::internal::gTimingRoot.reset(new ::gtsam::internal::TimingOutline\n-(\"Total\", ::gtsam::internal::getTicTocID(\"Total\")));\n-269 ::gtsam::internal::gCurrentTimer = ::gtsam::internal::gTimingRoot; }\n-270\n-271#ifdef ENABLE_TIMING\n-272#define gttic(label) gttic_(label)\n-273#define gttoc(label) gttoc_(label)\n-274#define longtic(label) longtic_(label)\n-275#define longtoc(label) longtoc_(label)\n-276#define tictoc_finishedIteration tictoc_finishedIteration_\n-277#define tictoc_print tictoc_print_\n-278#define tictoc_reset tictoc_reset_\n-279#else\n-280#define gttic(label) ((void)0)\n-281#define gttoc(label) ((void)0)\n-282#define longtic(label) ((void)0)\n-283#define longtoc(label) ((void)0)\n-284#define tictoc_finishedIteration() ((void)0)\n-285#define tictoc_print() ((void)0)\n-286#define tictoc_reset() ((void)0)\n-287#endif\n-288\n-289}\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n-A thin wrapper around std::map that uses boost's fast_pool_allocator.\n+224\n+225 private:\n+_\b2_\b2_\b7 friend class boost::serialization::access;\n+228 template \n+229 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+230 namespace bs = ::boost::serialization;\n+231 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be);\n+232 ar& BOOST_SERIALIZATION_NVP(preintMeasCov_);\n+233 }\n+234\n+235public:\n+236 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+237};\n+238\n+_\b2_\b5_\b8class GTSAM_EXPORT _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+260public:\n+261\n+262private:\n+263\n+264 typedef _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+265 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN<_\bP_\bo_\bs_\be_\b3, Vector3, _\bP_\bo_\bs_\be_\b3, Vector3,\n+266 _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs, _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs> _\bB_\ba_\bs_\be;\n+267\n+268 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs _PIM_;\n+269\n+270public:\n+271\n+273#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5\n+274 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+275#else\n+_\b2_\b7_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+277#endif\n+278\n+_\b2_\b8_\b0 _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br() {}\n+281\n+292 _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br(\n+293 _\bK_\be_\by pose_i, _\bK_\be_\by vel_i, _\bK_\be_\by pose_j, _\bK_\be_\by vel_j, _\bK_\be_\by bias_i, _\bK_\be_\by bias_j,\n+294 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& preintegratedMeasurements);\n+295\n+296 _\b~_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+297\n+299 gtsam::NonlinearFactor::shared_ptr clone() const override;\n+300\n+305 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+306 const CombinedImuFactor&);\n+308 void print(const std::string& s = \"\", const KeyFormatter& keyFormatter =\n+309 DefaultKeyFormatter) const override;\n+310\n+312 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const\n+override;\n+314\n+_\b3_\b1_\b7 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const\n+{\n+318 return _PIM_;\n+319 }\n+320\n+324 Vector evaluateError(const _\bP_\bo_\bs_\be_\b3& pose_i, const Vector3& vel_i,\n+325 const _\bP_\bo_\bs_\be_\b3& pose_j, const Vector3& vel_j,\n+326 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i, const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_j,\n+327 boost::optional H1 = boost::none, boost::optional H2 =\n+328 boost::none, boost::optional H3 = boost::none,\n+329 boost::optional H4 = boost::none, boost::optional H5 =\n+330 boost::none, boost::optional H6 = boost::none) const override;\n+331\n+332 private:\n+_\b3_\b3_\b4 friend class boost::serialization::access;\n+335 template \n+336 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+337 // NoiseModelFactor6 instead of NoiseModelFactorN for backward\n+compatibility\n+338 ar& boost::serialization::make_nvp(\n+339 \"NoiseModelFactor6\", boost::serialization::base_object(*this));\n+340 ar& BOOST_SERIALIZATION_NVP(_PIM_);\n+341 }\n+342\n+343public:\n+344 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+345};\n+346// class CombinedImuFactor\n+347\n+348template <>\n+_\b3_\b4_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs>\n+350 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+351\n+352template <>\n+_\b3_\b5_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs>\n+354 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+355\n+356template <>\n+_\b3_\b5_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+358\n+359} // namespace gtsam\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+Convenience functions for serializing data structures via boost.serialization.\n+_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be\n-Timing Entry, arranged in a tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:145\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bt_\b2_\b_\n-double t2_\n-cache the\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn_\b_\n-ChildMap children_\n-subtrees\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:162\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bm_\ba_\bx\n-double max() const\n-max time, in seconds\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:183\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bw_\ba_\bl_\bl\n-double wall() const\n-wall time, in seconds\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:181\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bs_\be_\bc_\bs\n-double secs() const\n-time taken, in seconds, including children\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:179\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bs_\be_\bl_\bf\n-double self() const\n-self time only, in seconds\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:180\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bp_\ba_\br_\be_\bn_\bt_\b_\n-boost::weak_ptr< TimingOutline > parent_\n-parent pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bm_\bi_\bn\n-double min() const\n-min time, in seconds\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:182\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bm_\be_\ba_\bn\n-double mean() const\n-mean self time, in seconds\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bT_\bi_\bm_\bi_\bn_\bg_\bO_\bu_\bt_\bl_\bi_\bn_\be_\b:_\b:_\bt_\bi_\bm_\be\n-GTSAM_EXPORT size_t time() const\n-time taken, including children\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.cpp:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bA_\bu_\bt_\bo_\bT_\bi_\bc_\bT_\bo_\bc\n-Small class that calls internal::tic at construction, and internol::toc when\n-destroyed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn timing.h:199\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bW_\bi_\bt_\bh_\bD_\be_\bf_\ba_\bu_\bl_\bt\n-Helper struct that encapsulates a value with a default, this is just used as a\n-member object so you d...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for pre-integration using PreintegratedCombinedMeasurements: Usage:\n+Create just a single P...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bb_\bi_\ba_\bs_\bA_\bc_\bc_\bO_\bm_\be_\bg_\ba_\bI_\bn_\bt\n+Matrix6 biasAccOmegaInt\n+covariance of bias used as initial estimate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs\n+PreintegrationCombinedParams(const Vector3 &n_gravity)\n+See two named constructors below for good values of n_gravity in body frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs\n+PreintegrationCombinedParams()\n+Default constructor makes uninitialized params struct.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bb_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n+Matrix3 biasOmegaCovariance\n+continuous-time \"Covariance\" describing gyroscope bias random walk\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bb_\bi_\ba_\bs_\bA_\bc_\bc_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n+Matrix3 biasAccCovariance\n+continuous-time \"Covariance\" describing accelerometer bias random walk\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedCombinedMeasurements integrates the IMU measurements (rotation\n+rates and accelerations) ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:129\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedCombinedMeasurements(const PreintegrationType &base, const Eigen::\n+Matrix< double, 15, 15 > &preintMeasCov)\n+Construct preintegrated directly from members: base class and preintMeasCov.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:171\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+~PreintegratedCombinedMeasurements() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedCombinedMeasurements()\n+Default constructor only for serialization and wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bp\n+Params & p() const\n+const reference to params, shadows definition in base class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:188\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedCombinedMeasurements(const boost::shared_ptr< Params > &p, const\n+imuBias::ConstantBias &biasHat=imuBias::ConstantBias())\n+Default constructor, initializes the class with no measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n+CombinedImuFactor is a 6-ways factor involving previous state (pose and\n+velocity of the vehicle,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:259\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< CombinedImuFactor > shared_ptr\n+Shorthand for a smart pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:276\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n+CombinedImuFactor()\n+Default constructor - only use for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:280\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+const PreintegratedCombinedMeasurements & preintegratedMeasurements() const\n+Access the preintegrated measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:317\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n+IMU pre-integration on NavSatet manifold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for pre-integration: Usage: Create just a single Params and pass a\n+shared pointer to the c...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bb_\ba_\bs_\be\n- * _\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n+ * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n+ * _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00134_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00884_source.html", "comments": ["Files 93% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/serializationTestHelpers.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/ConjugateGradientSolver.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
serializationTestHelpers.h
\n+
ConjugateGradientSolver.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
20#pragma once
\n
21
\n-
22#include <iostream>
\n-
23#include <sstream>
\n-
24#include <string>
\n+\n+
23
\n+
24namespace gtsam {
\n
25
\n-\n-
27
\n-
28#include <boost/serialization/serialization.hpp>
\n-
29#include <boost/filesystem.hpp>
\n+
\n+\n
30
\n-
31
\n-
32// whether to print the serialized text to stdout
\n-
33const bool verbose = false;
\n+
31public:
\n+\n+
33 typedef boost::shared_ptr<ConjugateGradientParameters> shared_ptr;
\n
34
\n-
35namespace gtsam {
\n-
36namespace serializationTestHelpers {
\n-
37
\n-
38// templated default object creation so we only need to declare one friend (if applicable)
\n-
39template<class T>
\n-
40T create() {
\n-
41 return T();
\n-
42}
\n-
43
\n-
44// Creates or empties a folder in the build folder and returns the relative path
\n-
45inline boost::filesystem::path resetFilesystem(
\n-
46 boost::filesystem::path folder = "actual") {
\n-
47 boost::filesystem::remove_all(folder);
\n-
48 boost::filesystem::create_directory(folder);
\n-
49 return folder;
\n-
50}
\n-
51
\n-
52// Templated round-trip serialization
\n-
53template<class T>
\n-
54void roundtrip(const T& input, T& output) {
\n-
55 std::string serialized = serialize(input);
\n-
56 if (verbose) std::cout << serialized << std::endl << std::endl;
\n-
57 deserialize(serialized, output);
\n-
58}
\n-
59
\n-
60// Templated round-trip serialization using a file
\n-
61template<class T>
\n-
62void roundtripFile(const T& input, T& output) {
\n-
63 boost::filesystem::path path = resetFilesystem()/"graph.dat";
\n-
64 serializeToFile(input, path.string());
\n-
65 deserializeFromFile(path.string(), output);
\n-
66}
\n-
67
\n-
68// This version requires equality operator and uses string and file round-trips
\n-
69template<class T>
\n-
70bool equality(const T& input = T()) {
\n-
71 T output = create<T>(), outputf = create<T>();
\n-
72 roundtrip<T>(input,output);
\n-
73 roundtripFile<T>(input,outputf);
\n-
74 return (input==output) && (input==outputf);
\n-
75}
\n-
76
\n-
77// This version requires Testable
\n-
78template<class T>
\n-
79bool equalsObj(const T& input = T()) {
\n-
80 T output = create<T>();
\n-
81 roundtrip<T>(input,output);
\n-
82 return assert_equal(input, output);
\n-
83}
\n+\n+\n+
37 size_t reset_;
\n+
38 double epsilon_rel_;
\n+
39 double epsilon_abs_;
\n+
40
\n+
41 /* Matrix Operation Kernel */
\n+
\n+\n+
43 GTSAM = 0,
\n+
44 } blas_kernel_ ;
\n+
\n+
45
\n+\n+
47 : minIterations_(1), maxIterations_(500), reset_(501), epsilon_rel_(1e-3),
\n+
48 epsilon_abs_(1e-3), blas_kernel_(GTSAM) {}
\n+
49
\n+
50 ConjugateGradientParameters(size_t minIterations, size_t maxIterations, size_t reset,
\n+
51 double epsilon_rel, double epsilon_abs, BLASKernel blas)
\n+
52 : minIterations_(minIterations), maxIterations_(maxIterations), reset_(reset),
\n+
53 epsilon_rel_(epsilon_rel), epsilon_abs_(epsilon_abs), blas_kernel_(blas) {}
\n+
54
\n+
55 ConjugateGradientParameters(const ConjugateGradientParameters &p)
\n+
56 : Base(p), minIterations_(p.minIterations_), maxIterations_(p.maxIterations_), reset_(p.reset_),
\n+
57 epsilon_rel_(p.epsilon_rel_), epsilon_abs_(p.epsilon_abs_), blas_kernel_(GTSAM) {}
\n+
58
\n+
59 /* general interface */
\n+
60 inline size_t minIterations() const { return minIterations_; }
\n+
61 inline size_t maxIterations() const { return maxIterations_; }
\n+
62 inline size_t reset() const { return reset_; }
\n+
63 inline double epsilon() const { return epsilon_rel_; }
\n+
64 inline double epsilon_rel() const { return epsilon_rel_; }
\n+
65 inline double epsilon_abs() const { return epsilon_abs_; }
\n+
66
\n+
67 inline size_t getMinIterations() const { return minIterations_; }
\n+
68 inline size_t getMaxIterations() const { return maxIterations_; }
\n+
69 inline size_t getReset() const { return reset_; }
\n+
70 inline double getEpsilon() const { return epsilon_rel_; }
\n+
71 inline double getEpsilon_rel() const { return epsilon_rel_; }
\n+
72 inline double getEpsilon_abs() const { return epsilon_abs_; }
\n+
73
\n+
74 inline void setMinIterations(size_t value) { minIterations_ = value; }
\n+
75 inline void setMaxIterations(size_t value) { maxIterations_ = value; }
\n+
76 inline void setReset(size_t value) { reset_ = value; }
\n+
77 inline void setEpsilon(double value) { epsilon_rel_ = value; }
\n+
78 inline void setEpsilon_rel(double value) { epsilon_rel_ = value; }
\n+
79 inline void setEpsilon_abs(double value) { epsilon_abs_ = value; }
\n+
80
\n+
81
\n+
82 void print() const { Base::print(); }
\n+
83 void print(std::ostream &os) const override;
\n
84
\n-
85// De-referenced version for pointers, requires equals method
\n-
86template<class T>
\n-
87bool equalsDereferenced(const T& input) {
\n-
88 T output = create<T>();
\n-
89 roundtrip<T>(input,output);
\n-
90 return input->equals(*output);
\n-
91}
\n-
92
\n-
93// Templated round-trip serialization using XML
\n-
94template<class T>
\n-
95void roundtripXML(const T& input, T& output) {
\n-
96 std::string serialized = serializeXML<T>(input);
\n-
97 if (verbose) std::cout << serialized << std::endl << std::endl;
\n-
98 deserializeXML(serialized, output);
\n-
99}
\n-
100
\n-
101// Templated round-trip serialization using XML File
\n-
102template<class T>
\n-
103void roundtripXMLFile(const T& input, T& output) {
\n-
104 boost::filesystem::path path = resetFilesystem()/"graph.xml";
\n-
105 serializeToXMLFile(input, path.string());
\n-
106 deserializeFromXMLFile(path.string(), output);
\n-
107}
\n-
108
\n-
109// This version requires equality operator
\n-
110template<class T>
\n-
111bool equalityXML(const T& input = T()) {
\n-
112 T output = create<T>(), outputf = create<T>();
\n-
113 roundtripXML<T>(input,output);
\n-
114 roundtripXMLFile<T>(input,outputf);
\n-
115 return (input==output) && (input==outputf);
\n-
116}
\n+
85 static std::string blasTranslator(const BLASKernel k) ;
\n+
86 static BLASKernel blasTranslator(const std::string &s) ;
\n+
87};
\n+
\n+
88
\n+
89/*
\n+
90 * A template for the linear preconditioned conjugate gradient method.
\n+
91 * System class should support residual(v, g), multiply(v,Av), scal(alpha,v), dot(v,v), axpy(alpha,x,y)
\n+
92 * leftPrecondition(v, L^{-1}v, rightPrecondition(v, L^{-T}v) where preconditioner M = L*L^T
\n+
93 * Note that the residual is in the preconditioned domain. Refer to Section 9.2 of Saad's book.
\n+
94 *
\n+
95 ** REFERENCES:
\n+
96 * [1] Y. Saad, "Preconditioned Iterations," in Iterative Methods for Sparse Linear Systems,
\n+
97 * 2nd ed. SIAM, 2003, ch. 9, sec. 2, pp.276-281.
\n+
98 */
\n+
99template<class S, class V>
\n+
100V preconditionedConjugateGradient(const S &system, const V &initial,
\n+
101 const ConjugateGradientParameters &parameters) {
\n+
102
\n+
103 V estimate, residual, direction, q1, q2;
\n+
104 estimate = residual = direction = q1 = q2 = initial;
\n+
105
\n+
106 system.residual(estimate, q1); /* q1 = b-Ax */
\n+
107 system.leftPrecondition(q1, residual); /* r = L^{-1} (b-Ax) */
\n+
108 system.rightPrecondition(residual, direction);/* p = L^{-T} r */
\n+
109
\n+
110 double currentGamma = system.dot(residual, residual), prevGamma, alpha, beta;
\n+
111
\n+
112 const size_t iMaxIterations = parameters.maxIterations(),
\n+
113 iMinIterations = parameters.minIterations(),
\n+
114 iReset = parameters.reset() ;
\n+
115 const double threshold = std::max(parameters.epsilon_abs(),
\n+
116 parameters.epsilon() * parameters.epsilon() * currentGamma);
\n
117
\n-
118// This version requires Testable
\n-
119template<class T>
\n-
120bool equalsXML(const T& input = T()) {
\n-
121 T output = create<T>();
\n-
122 roundtripXML<T>(input,output);
\n-
123 return assert_equal(input, output);
\n-
124}
\n-
125
\n-
126// This version is for pointers, requires equals method
\n-
127template<class T>
\n-
128bool equalsDereferencedXML(const T& input = T()) {
\n-
129 T output = create<T>();
\n-
130 roundtripXML<T>(input,output);
\n-
131 return input->equals(*output);
\n-
132}
\n-
133
\n-
134// Templated round-trip serialization using XML
\n-
135template<class T>
\n-
136void roundtripBinary(const T& input, T& output) {
\n-
137 std::string serialized = serializeBinary<T>(input);
\n-
138 if (verbose) std::cout << serialized << std::endl << std::endl;
\n-
139 deserializeBinary(serialized, output);
\n-
140}
\n-
141
\n-
142// Templated round-trip serialization using Binary file
\n-
143template<class T>
\n-
144void roundtripBinaryFile(const T& input, T& output) {
\n-
145 boost::filesystem::path path = resetFilesystem()/"graph.bin";
\n-
146 serializeToBinaryFile(input, path.string());
\n-
147 deserializeFromBinaryFile(path.string(), output);
\n-
148}
\n-
149
\n-
150// This version requires equality operator
\n-
151template<class T>
\n-
152bool equalityBinary(const T& input = T()) {
\n-
153 T output = create<T>(), outputf = create<T>();
\n-
154 roundtripBinary<T>(input,output);
\n-
155 roundtripBinaryFile<T>(input,outputf);
\n-
156 return (input==output) && (input==outputf);
\n-
157}
\n-
158
\n-
159// This version requires Testable
\n-
160template<class T>
\n-
161bool equalsBinary(const T& input = T()) {
\n-
162 T output = create<T>();
\n-
163 roundtripBinary<T>(input,output);
\n-
164 return assert_equal(input, output);
\n-
165}
\n-
166
\n-
167// This version is for pointers, requires equals method
\n-
168template<class T>
\n-
169bool equalsDereferencedBinary(const T& input = T()) {
\n-
170 T output = create<T>();
\n-
171 roundtripBinary<T>(input,output);
\n-
172 return input->equals(*output);
\n-
173}
\n-
174
\n-
175} // \\namespace serializationTestHelpers
\n-
176} // \\namespace gtsam
\n-
Convenience functions for serializing data structures via boost.serialization.
\n+
118 if (parameters.verbosity() >= ConjugateGradientParameters::COMPLEXITY )
\n+
119 std::cout << "[PCG] epsilon = " << parameters.epsilon()
\n+
120 << ", max = " << parameters.maxIterations()
\n+
121 << ", reset = " << parameters.reset()
\n+
122 << ", ||r0||^2 = " << currentGamma
\n+
123 << ", threshold = " << threshold << std::endl;
\n+
124
\n+
125 size_t k;
\n+
126 for ( k = 1 ; k <= iMaxIterations && (currentGamma > threshold || k <= iMinIterations) ; k++ ) {
\n+
127
\n+
128 if ( k % iReset == 0 ) {
\n+
129 system.residual(estimate, q1); /* q1 = b-Ax */
\n+
130 system.leftPrecondition(q1, residual); /* r = L^{-1} (b-Ax) */
\n+
131 system.rightPrecondition(residual, direction); /* p = L^{-T} r */
\n+
132 currentGamma = system.dot(residual, residual);
\n+
133 }
\n+
134 system.multiply(direction, q1); /* q1 = A p */
\n+
135 alpha = currentGamma / system.dot(direction, q1); /* alpha = gamma / (p' A p) */
\n+
136 system.axpy(alpha, direction, estimate); /* estimate += alpha * p */
\n+
137 system.leftPrecondition(q1, q2); /* q2 = L^{-1} * q1 */
\n+
138 system.axpy(-alpha, q2, residual); /* r -= alpha * q2 */
\n+
139 prevGamma = currentGamma;
\n+
140 currentGamma = system.dot(residual, residual); /* gamma = |r|^2 */
\n+
141 beta = currentGamma / prevGamma;
\n+
142 system.rightPrecondition(residual, q1); /* q1 = L^{-T} r */
\n+
143 system.scal(beta, direction);
\n+
144 system.axpy(1.0, q1, direction); /* p = q1 + beta * p */
\n+
145
\n+
146 if (parameters.verbosity() >= ConjugateGradientParameters::ERROR )
\n+
147 std::cout << "[PCG] k = " << k
\n+
148 << ", alpha = " << alpha
\n+
149 << ", beta = " << beta
\n+
150 << ", ||r||^2 = " << currentGamma
\n+
151// << "\\nx =\\n" << estimate
\n+
152// << "\\nr =\\n" << residual
\n+
153 << std::endl;
\n+
154 }
\n+
155 if (parameters.verbosity() >= ConjugateGradientParameters::COMPLEXITY )
\n+
156 std::cout << "[PCG] iterations = " << k
\n+
157 << ", ||r||^2 = " << currentGamma
\n+
158 << std::endl;
\n+
159
\n+
160 return estimate;
\n+
161}
\n+
162
\n+
163
\n+
164}
\n+
Some support classes for iterative solvers.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
bool deserializeFromXMLFile(const std::string &filename, T &output, const std::string &name="data")
deserializes from an XML file
Definition serialization.h:174
\n-
std::string serialize(const T &input)
serializes to a string
Definition serialization.h:113
\n-
bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)
equals with an tolerance, prints out message if unequal
Definition Matrix.cpp:43
\n-
void deserializeBinary(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in binary
Definition serialization.h:266
\n-
void deserializeXML(const std::string &serialized, T &output, const std::string &name="data")
deserializes from a string in XML
Definition serialization.h:192
\n-
bool serializeToXMLFile(const T &input, const std::string &filename, const std::string &name="data")
serializes to an XML file
Definition serialization.h:163
\n-
bool serializeToFile(const T &input, const std::string &filename)
serializes to a file
Definition serialization.h:93
\n-
void deserialize(const std::string &serialized, T &output)
deserializes from a string
Definition serialization.h:119
\n-
bool serializeToBinaryFile(const T &input, const std::string &filename, const std::string &name="data")
serializes to a binary file
Definition serialization.h:237
\n-
bool deserializeFromFile(const std::string &filename, T &output)
deserializes from a file
Definition serialization.h:103
\n-
bool deserializeFromBinaryFile(const std::string &filename, T &output, const std::string &name="data")
deserializes from a binary file
Definition serialization.h:248
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
parameters for the conjugate gradient method
Definition ConjugateGradientSolver.h:29
\n+
size_t minIterations_
minimum number of cg iterations
Definition ConjugateGradientSolver.h:35
\n+
size_t reset_
number of iterations before reset
Definition ConjugateGradientSolver.h:37
\n+
BLASKernel
Definition ConjugateGradientSolver.h:42
\n+
double epsilon_rel_
threshold for relative error decrease
Definition ConjugateGradientSolver.h:38
\n+
size_t maxIterations_
maximum number of cg iterations
Definition ConjugateGradientSolver.h:36
\n+
double epsilon_abs_
threshold for absolute error decrease
Definition ConjugateGradientSolver.h:39
\n+
parameters for iterative linear solvers
Definition IterativeSolver.h:44
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-serializationTestHelpers.h\n+ConjugateGradientSolver.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,224 +16,201 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 20#pragma once\n 21\n-22#include \n-23#include \n-24#include \n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n 25\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-27\n-28#include \n-29#include \n+_\b2_\b9class GTSAM_EXPORT _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs : public\n+_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n 30\n-31\n-32// whether to print the serialized text to stdout\n-33const bool verbose = false;\n+31public:\n+32 typedef _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs _\bB_\ba_\bs_\be;\n+33 typedef boost::shared_ptr shared_ptr;\n 34\n-35namespace _\bg_\bt_\bs_\ba_\bm {\n-36namespace serializationTestHelpers {\n-37\n-38// templated default object creation so we only need to declare one friend\n-(if applicable)\n-39template\n-40T create() {\n-41 return T();\n-42}\n-43\n-44// Creates or empties a folder in the build folder and returns the relative\n-path\n-45inline boost::filesystem::path resetFilesystem(\n-46 boost::filesystem::path folder = \"actual\") {\n-47 boost::filesystem::remove_all(folder);\n-48 boost::filesystem::create_directory(folder);\n-49 return folder;\n-50}\n-51\n-52// Templated round-trip serialization\n-53template\n-54void roundtrip(const T& input, T& output) {\n-55 std::string serialized = _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(input);\n-56 if (verbose) std::cout << serialized << std::endl << std::endl;\n-57 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(serialized, output);\n-58}\n-59\n-60// Templated round-trip serialization using a file\n-61template\n-62void roundtripFile(const T& input, T& output) {\n-63 boost::filesystem::path path = resetFilesystem()/\"graph.dat\";\n-64 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bF_\bi_\bl_\be(input, path.string());\n-65 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bF_\bi_\bl_\be(path.string(), output);\n-66}\n-67\n-68// This version requires equality operator and uses string and file round-\n-trips\n-69template\n-70bool equality(const T& input = T()) {\n-71 T output = create(), outputf = create();\n-72 roundtrip(input,output);\n-73 roundtripFile(input,outputf);\n-74 return (input==output) && (input==outputf);\n-75}\n-76\n-77// This version requires Testable\n-78template\n-79bool equalsObj(const T& input = T()) {\n-80 T output = create();\n-81 roundtrip(input,output);\n-82 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(input, output);\n-83}\n+_\b3_\b5 size_t _\bm_\bi_\bn_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs_\b_;\n+_\b3_\b6 size_t _\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs_\b_;\n+_\b3_\b7 size_t _\br_\be_\bs_\be_\bt_\b_;\n+_\b3_\b8 double _\be_\bp_\bs_\bi_\bl_\bo_\bn_\b__\br_\be_\bl_\b_;\n+_\b3_\b9 double _\be_\bp_\bs_\bi_\bl_\bo_\bn_\b__\ba_\bb_\bs_\b_;\n+40\n+41 /* Matrix Operation Kernel */\n+_\b4_\b2 enum _\bB_\bL_\bA_\bS_\bK_\be_\br_\bn_\be_\bl {\n+_\b4_\b3 GTSAM = 0,\n+44 } blas_kernel_ ;\n+45\n+46 _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs()\n+47 : minIterations_(1), maxIterations_(500), reset_(501), epsilon_rel_(1e-3),\n+48 epsilon_abs_(1e-3), blas_kernel_(GTSAM) {}\n+49\n+50 ConjugateGradientParameters(size_t minIterations, size_t maxIterations,\n+size_t reset,\n+51 double epsilon_rel, double epsilon_abs, BLASKernel blas)\n+52 : minIterations_(minIterations), maxIterations_(maxIterations), reset_\n+(reset),\n+53 epsilon_rel_(epsilon_rel), epsilon_abs_(epsilon_abs), blas_kernel_(blas) {}\n+54\n+55 ConjugateGradientParameters(const ConjugateGradientParameters &p)\n+56 : Base(p), minIterations_(p.minIterations_), maxIterations_\n+(p.maxIterations_), reset_(p.reset_),\n+57 epsilon_rel_(p.epsilon_rel_), epsilon_abs_(p.epsilon_abs_), blas_kernel_\n+(GTSAM) {}\n+58\n+59 /* general interface */\n+60 inline size_t minIterations() const { return minIterations_; }\n+61 inline size_t maxIterations() const { return maxIterations_; }\n+62 inline size_t reset() const { return reset_; }\n+63 inline double epsilon() const { return epsilon_rel_; }\n+64 inline double epsilon_rel() const { return epsilon_rel_; }\n+65 inline double epsilon_abs() const { return epsilon_abs_; }\n+66\n+67 inline size_t getMinIterations() const { return minIterations_; }\n+68 inline size_t getMaxIterations() const { return maxIterations_; }\n+69 inline size_t getReset() const { return reset_; }\n+70 inline double getEpsilon() const { return epsilon_rel_; }\n+71 inline double getEpsilon_rel() const { return epsilon_rel_; }\n+72 inline double getEpsilon_abs() const { return epsilon_abs_; }\n+73\n+74 inline void setMinIterations(size_t value) { minIterations_ = value; }\n+75 inline void setMaxIterations(size_t value) { maxIterations_ = value; }\n+76 inline void setReset(size_t value) { reset_ = value; }\n+77 inline void setEpsilon(double value) { epsilon_rel_ = value; }\n+78 inline void setEpsilon_rel(double value) { epsilon_rel_ = value; }\n+79 inline void setEpsilon_abs(double value) { epsilon_abs_ = value; }\n+80\n+81\n+82 void _\bp_\br_\bi_\bn_\bt() const { Base::print(); }\n+83 void _\bp_\br_\bi_\bn_\bt(std::ostream &os) const override;\n 84\n-85// De-referenced version for pointers, requires equals method\n-86template\n-87bool equalsDereferenced(const T& input) {\n-88 T output = create();\n-89 roundtrip(input,output);\n-90 return input->equals(*output);\n-91}\n-92\n-93// Templated round-trip serialization using XML\n-94template\n-95void roundtripXML(const T& input, T& output) {\n-96 std::string serialized = serializeXML(input);\n-97 if (verbose) std::cout << serialized << std::endl << std::endl;\n-98 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL(serialized, output);\n-99}\n-100\n-101// Templated round-trip serialization using XML File\n-102template\n-103void roundtripXMLFile(const T& input, T& output) {\n-104 boost::filesystem::path path = resetFilesystem()/\"graph.xml\";\n-105 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bF_\bi_\bl_\be(input, path.string());\n-106 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bF_\bi_\bl_\be(path.string(), output);\n-107}\n-108\n-109// This version requires equality operator\n-110template\n-111bool equalityXML(const T& input = T()) {\n-112 T output = create(), outputf = create();\n-113 roundtripXML(input,output);\n-114 roundtripXMLFile(input,outputf);\n-115 return (input==output) && (input==outputf);\n-116}\n+85 static std::string blasTranslator(const BLASKernel k) ;\n+86 static BLASKernel blasTranslator(const std::string &s) ;\n+87};\n+88\n+89/*\n+90 * A template for the linear preconditioned conjugate gradient method.\n+91 * System class should support residual(v, g), multiply(v,Av), scal(alpha,v),\n+dot(v,v), axpy(alpha,x,y)\n+92 * leftPrecondition(v, L^{-1}v, rightPrecondition(v, L^{-T}v) where\n+preconditioner M = L*L^T\n+93 * Note that the residual is in the preconditioned domain. Refer to Section\n+9.2 of Saad's book.\n+94 *\n+95 ** REFERENCES:\n+96 * [1] Y. Saad, \"Preconditioned Iterations,\" in Iterative Methods for Sparse\n+Linear Systems,\n+97 * 2nd ed. SIAM, 2003, ch. 9, sec. 2, pp.276-281.\n+98 */\n+99template\n+100V preconditionedConjugateGradient(const S &system, const V &initial,\n+101 const ConjugateGradientParameters ¶meters) {\n+102\n+103 V estimate, residual, direction, q1, q2;\n+104 estimate = residual = direction = q1 = q2 = initial;\n+105\n+106 system.residual(estimate, q1); /* q1 = b-Ax */\n+107 system.leftPrecondition(q1, residual); /* r = L^{-1} (b-Ax) */\n+108 system.rightPrecondition(residual, direction);/* p = L^{-T} r */\n+109\n+110 double currentGamma = system.dot(residual, residual), prevGamma, alpha,\n+beta;\n+111\n+112 const size_t iMaxIterations = parameters.maxIterations(),\n+113 iMinIterations = parameters.minIterations(),\n+114 iReset = parameters.reset() ;\n+115 const double threshold = std::max(parameters.epsilon_abs(),\n+116 parameters.epsilon() * parameters.epsilon() * currentGamma);\n 117\n-118// This version requires Testable\n-119template\n-120bool equalsXML(const T& input = T()) {\n-121 T output = create();\n-122 roundtripXML(input,output);\n-123 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(input, output);\n-124}\n-125\n-126// This version is for pointers, requires equals method\n-127template\n-128bool equalsDereferencedXML(const T& input = T()) {\n-129 T output = create();\n-130 roundtripXML(input,output);\n-131 return input->equals(*output);\n-132}\n-133\n-134// Templated round-trip serialization using XML\n-135template\n-136void roundtripBinary(const T& input, T& output) {\n-137 std::string serialized = serializeBinary(input);\n-138 if (verbose) std::cout << serialized << std::endl << std::endl;\n-139 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by(serialized, output);\n-140}\n-141\n-142// Templated round-trip serialization using Binary file\n-143template\n-144void roundtripBinaryFile(const T& input, T& output) {\n-145 boost::filesystem::path path = resetFilesystem()/\"graph.bin\";\n-146 _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be(input, path.string());\n-147 _\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be(path.string(), output);\n-148}\n-149\n-150// This version requires equality operator\n-151template\n-152bool equalityBinary(const T& input = T()) {\n-153 T output = create(), outputf = create();\n-154 roundtripBinary(input,output);\n-155 roundtripBinaryFile(input,outputf);\n-156 return (input==output) && (input==outputf);\n-157}\n-158\n-159// This version requires Testable\n-160template\n-161bool equalsBinary(const T& input = T()) {\n-162 T output = create();\n-163 roundtripBinary(input,output);\n-164 return _\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl(input, output);\n-165}\n-166\n-167// This version is for pointers, requires equals method\n-168template\n-169bool equalsDereferencedBinary(const T& input = T()) {\n-170 T output = create();\n-171 roundtripBinary(input,output);\n-172 return input->equals(*output);\n-173}\n-174\n-175} // \\namespace serializationTestHelpers\n-176} // \\namespace gtsam\n-_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-Convenience functions for serializing data structures via boost.serialization.\n+118 if (parameters.verbosity() >= ConjugateGradientParameters::COMPLEXITY )\n+119 std::cout << \"[PCG] epsilon = \" << parameters.epsilon()\n+120 << \", max = \" << parameters.maxIterations()\n+121 << \", reset = \" << parameters.reset()\n+122 << \", ||r0||^2 = \" << currentGamma\n+123 << \", threshold = \" << threshold << std::endl;\n+124\n+125 size_t k;\n+126 for ( k = 1 ; k <= iMaxIterations && (currentGamma > threshold || k <=\n+iMinIterations) ; k++ ) {\n+127\n+128 if ( k % iReset == 0 ) {\n+129 system.residual(estimate, q1); /* q1 = b-Ax */\n+130 system.leftPrecondition(q1, residual); /* r = L^{-1} (b-Ax) */\n+131 system.rightPrecondition(residual, direction); /* p = L^{-T} r */\n+132 currentGamma = system.dot(residual, residual);\n+133 }\n+134 system.multiply(direction, q1); /* q1 = A p */\n+135 alpha = currentGamma / system.dot(direction, q1); /* alpha = gamma / (p' A\n+p) */\n+136 system.axpy(alpha, direction, estimate); /* estimate += alpha * p */\n+137 system.leftPrecondition(q1, q2); /* q2 = L^{-1} * q1 */\n+138 system.axpy(-alpha, q2, residual); /* r -= alpha * q2 */\n+139 prevGamma = currentGamma;\n+140 currentGamma = system.dot(residual, residual); /* gamma = |r|^2 */\n+141 beta = currentGamma / prevGamma;\n+142 system.rightPrecondition(residual, q1); /* q1 = L^{-T} r */\n+143 system.scal(beta, direction);\n+144 system.axpy(1.0, q1, direction); /* p = q1 + beta * p */\n+145\n+146 if (parameters.verbosity() >= ConjugateGradientParameters::ERROR )\n+147 std::cout << \"[PCG] k = \" << k\n+148 << \", alpha = \" << alpha\n+149 << \", beta = \" << beta\n+150 << \", ||r||^2 = \" << currentGamma\n+151// << \"\\nx =\\n\" << estimate\n+152// << \"\\nr =\\n\" << residual\n+153 << std::endl;\n+154 }\n+155 if (parameters.verbosity() >= ConjugateGradientParameters::COMPLEXITY )\n+156 std::cout << \"[PCG] iterations = \" << k\n+157 << \", ||r||^2 = \" << currentGamma\n+158 << std::endl;\n+159\n+160 return estimate;\n+161}\n+162\n+163\n+164}\n+_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+Some support classes for iterative solvers.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bX_\bM_\bL_\bF_\bi_\bl_\be\n-bool deserializeFromXMLFile(const std::string &filename, T &output, const std::\n-string &name=\"data\")\n-deserializes from an XML file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n-std::string serialize(const T &input)\n-serializes to a string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bs_\bs_\be_\br_\bt_\b__\be_\bq_\bu_\ba_\bl\n-bool assert_equal(const Matrix &expected, const Matrix &actual, double tol)\n-equals with an tolerance, prints out message if unequal\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bB_\bi_\bn_\ba_\br_\by\n-void deserializeBinary(const std::string &serialized, T &output, const std::\n-string &name=\"data\")\n-deserializes from a string in binary\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:266\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bX_\bM_\bL\n-void deserializeXML(const std::string &serialized, T &output, const std::string\n-&name=\"data\")\n-deserializes from a string in XML\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bX_\bM_\bL_\bF_\bi_\bl_\be\n-bool serializeToXMLFile(const T &input, const std::string &filename, const\n-std::string &name=\"data\")\n-serializes to an XML file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bF_\bi_\bl_\be\n-bool serializeToFile(const T &input, const std::string &filename)\n-serializes to a file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n-void deserialize(const std::string &serialized, T &output)\n-deserializes from a string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:119\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bT_\bo_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be\n-bool serializeToBinaryFile(const T &input, const std::string &filename, const\n-std::string &name=\"data\")\n-serializes to a binary file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:237\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bF_\bi_\bl_\be\n-bool deserializeFromFile(const std::string &filename, T &output)\n-deserializes from a file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bF_\br_\bo_\bm_\bB_\bi_\bn_\ba_\br_\by_\bF_\bi_\bl_\be\n-bool deserializeFromBinaryFile(const std::string &filename, T &output, const\n-std::string &name=\"data\")\n-deserializes from a binary file\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:248\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+parameters for the conjugate gradient method\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bm_\bi_\bn_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs_\b_\n+size_t minIterations_\n+minimum number of cg iterations\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\br_\be_\bs_\be_\bt_\b_\n+size_t reset_\n+number of iterations before reset\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bB_\bL_\bA_\bS_\bK_\be_\br_\bn_\be_\bl\n+BLASKernel\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn_\b__\br_\be_\bl_\b_\n+double epsilon_rel_\n+threshold for relative error decrease\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs_\b_\n+size_t maxIterations_\n+maximum number of cg iterations\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn_\b__\ba_\bb_\bs_\b_\n+double epsilon_abs_\n+threshold for absolute error decrease\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+parameters for iterative linear solvers\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:44\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bb_\ba_\bs_\be\n- * _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bT_\be_\bs_\bt_\bH_\be_\bl_\bp_\be_\br_\bs_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00146.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00389.html", "comments": ["Files 83% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/treeTraversal-inst.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n \n
\n \n-
treeTraversal-inst.h File Reference
\n+
SOn.h File Reference
\n
\n
\n \n-

Go to the source code of this file.

\n+

N*N matrix representation of SO(N). \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::SO< N >
 Manifold of special orthogonal rotation matrices SO<N>. More...
 
struct  gtsam::SO< N >::ChartAtOrigin
 
struct  gtsam::traits< SO< N > >
 
struct  gtsam::traits< const SO< N > >
 
\n \n \n \n \n-\n-\n-\n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
namespace  gtsam::treeTraversal
 Internal functions used for traversing trees.
 
\n+\n+\n+\n+\n+\n

\n+Typedefs

\n+using gtsam::SOn = SO< Eigen::Dynamic >
 
\n+using gtsam::DynamicJacobian = OptionalJacobian< Eigen::Dynamic, Eigen::Dynamic >
 
\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 Functions

template<class FOREST , typename DATA , typename VISITOR_PRE , typename VISITOR_POST >
void gtsam::treeTraversal::DepthFirstForest (FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost)
 Traverse a forest depth-first with pre-order and post-order visits.
 
template<class FOREST , typename DATA , typename VISITOR_PRE >
void gtsam::treeTraversal::DepthFirstForest (FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre)
 Traverse a forest depth-first, with a pre-order visit but no post-order visit.
 
template<class FOREST , typename DATA , typename VISITOR_PRE , typename VISITOR_POST >
void gtsam::treeTraversal::DepthFirstForestParallel (FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)
 Traverse a forest depth-first with pre-order and post-order visits.
 
template<class FOREST >
FastVector< boost::shared_ptr< typename FOREST::Node > > gtsam::treeTraversal::CloneForest (const FOREST &forest)
 Clone a tree, copy-constructing new nodes (calling boost::make_shared) and setting up child pointers for a clone of the original tree.
 
template<class FOREST >
void gtsam::treeTraversal::PrintForest (const FOREST &forest, std::string str, const KeyFormatter &keyFormatter)
 Print a tree, prefixing each line with str, and formatting keys using keyFormatter.
 
\n+constexpr int gtsam::internal::DimensionSO (int N)
 Calculate dimensionality of SO<N> manifold, or return Dynamic if so.
 
\n+constexpr int gtsam::internal::NSquaredSO (int N)
 
\n+template<class Archive >
void gtsam::serialize (Archive &ar, SOn &Q, const unsigned int file_version)
 Serialization function.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
April 9, 2013
\n+

N*N matrix representation of SO(N).

\n+

N can be Eigen::Dynamic

Author
Frank Dellaert
\n+
Date
March 2019
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,68 +1,52 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-treeTraversal-inst.h File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+SOn.h File Reference\n+N*N matrix representation of SO(N). _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\bN_\b _\b>\n+\u00a0 Manifold of special orthogonal rotation matrices SO. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\bN_\b _\b>_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bO_\b<_\b _\bN_\b _\b>_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bO_\b<_\b _\bN_\b _\b>_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-namespace \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl\n-\u00a0 Internal functions used for traversing trees.\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSO\bOn\bn = _\bS_\bO< Eigen::Dynamic >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:D\bDy\byn\bna\bam\bmi\bic\bcJ\bJa\bac\bco\bob\bbi\bia\ban\bn = _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< Eigen::Dynamic, Eigen::\n+ Dynamic >\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt\n- (FOREST &forest, DATA &rootData,\n- VISITOR_PRE &visitorPre, VISITOR_POST\n- &visitorPost)\n-\u00a0 Traverse a forest depth-first with pre-\n- order and post-order visits.\n-\u00a0\n-template\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt\n- (FOREST &forest, DATA &rootData,\n- VISITOR_PRE &visitorPre)\n- Traverse a forest depth-first, with a\n-\u00a0 pre-order visit but no post-order\n- visit.\n-\u00a0\n-template\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:\n- _\bD_\be_\bp_\bt_\bh_\bF_\bi_\br_\bs_\bt_\bF_\bo_\br_\be_\bs_\bt_\bP_\ba_\br_\ba_\bl_\bl_\be_\bl (FOREST\n- &forest, DATA &rootData, VISITOR_PRE\n- &visitorPre, VISITOR_POST &visitorPost,\n- int problemSizeThreshold=10)\n-\u00a0 Traverse a forest depth-first with pre-\n- order and post-order visits.\n-\u00a0\n-template\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br< boost::shared_ptr< typename _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bC_\bl_\bo_\bn_\be_\bF_\bo_\br_\be_\bs_\bt\n- FOREST::Node > >\u00a0 (const FOREST &forest)\n- Clone a tree, copy-constructing new\n-\u00a0 nodes (calling boost::make_shared) and\n- setting up child pointers for a clone\n- of the original tree.\n-\u00a0\n-template\n- void\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bF_\bo_\br_\be_\bs_\bt\n- (const FOREST &forest, std::string str,\n- const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter)\n- Print a tree, prefixing each line with\n-\u00a0 str, and formatting keys using\n- keyFormatter.\n+constexpr int\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:D\bDi\bim\bme\ben\bns\bsi\bio\bon\bnS\bSO\bO (int N)\n+\u00a0 Calculate dimensionality of SO manifold, or return Dynamic if\n+ so.\n+\u00a0\n+constexpr int\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:N\bNS\bSq\bqu\bua\bar\bre\bed\bdS\bSO\bO (int N)\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bse\ber\bri\bia\bal\bli\biz\bze\be (Archive &ar, _\bS_\bO_\bn &Q, const unsigned int\n+ file_version)\n+\u00a0 Serialization function.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+N*N matrix representation of SO(N).\n+N can be Eigen::Dynamic\n Author\n- Richard Roberts\n+ Frank Dellaert\n Date\n- April 9, 2013\n+ March 2019\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bb_\ba_\bs_\be\n- * _\bt_\br_\be_\be_\bT_\br_\ba_\bv_\be_\br_\bs_\ba_\bl_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bS_\bO_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00167_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00254_source.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/FitBasis.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteValues.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
FitBasis.h
\n+
DiscreteValues.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19/*
\n-
20 * Concept needed for LS. Parameters = Coefficients | Values
\n-
21 * - Parameters, Jacobian
\n-
22 * - PredictFactor(double x)(Parameters p, OptionalJacobian<1,N> H)
\n-
23 */
\n-
24
\n-
25#pragma once
\n-
26
\n-
27#include <gtsam/basis/Basis.h>
\n-\n-\n-\n-\n-
32
\n-
33namespace gtsam {
\n-
34
\n-
36using Sequence = std::map<double, double>;
\n-
38using Sample = std::pair<double, double>;
\n-
39
\n-
51template <class Basis>
\n-
\n-
52class FitBasis {
\n-
53 public:
\n-
54 using Parameters = typename Basis::Parameters;
\n+
18#pragma once
\n+
19
\n+\n+\n+
22#include <gtsam/inference/Key.h>
\n+
23
\n+
24#include <map>
\n+
25#include <string>
\n+
26#include <vector>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
\n+
34class GTSAM_EXPORT DiscreteValues : public Assignment<Key> {
\n+
35 public:
\n+
36 using Base = Assignment<Key>; // base class
\n+
37
\n+
40 using Assignment::Assignment; // all constructors
\n+
41
\n+
42 // Define the implicit default constructor.
\n+
43 DiscreteValues() = default;
\n+
44
\n+
45 // Construct from assignment.
\n+
46 explicit DiscreteValues(const Base& a) : Base(a) {}
\n+
47
\n+
48 // Construct from initializer list.
\n+
49 DiscreteValues(std::initializer_list<std::pair<const Key, size_t>> init)
\n+
50 : Assignment<Key>{init} {}
\n+
51
\n
55
\n-
56 private:
\n-
57 Parameters parameters_;
\n-
58
\n-
59 public:
\n-
\n-\n-
62 const SharedNoiseModel& model,
\n-
63 size_t N) {
\n-\n-
65 for (const Sample sample : sequence) {
\n-
66 graph.emplace_shared<EvaluationFactor<Basis>>(0, sample.second, model, N,
\n-
67 sample.first);
\n-
68 }
\n-
69 return graph;
\n+
57 void print(const std::string& s = "",
\n+
58 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
59
\n+
61 bool equals(const DiscreteValues& x, double tol = 1e-9) const;
\n+
62
\n+
66
\n+
67 // insert in base class;
\n+
68 std::pair<iterator, bool> insert( const value_type& value ){
\n+
69 return Base::insert(value);
\n
70 }
\n-
\n
71
\n-
\n-\n-
74 const Sequence& sequence, const SharedNoiseModel& model, size_t N) {
\n-
75 NonlinearFactorGraph graph = NonlinearGraph(sequence, model, N);
\n-
76 Values values;
\n-
77 values.insert<Parameters>(0, Parameters::Zero(N));
\n-
78 GaussianFactorGraph::shared_ptr gfg = graph.linearize(values);
\n-
79 return gfg;
\n-
80 }
\n-
\n-
81
\n-
\n-
89 FitBasis(const Sequence& sequence, const SharedNoiseModel& model, size_t N) {
\n-
90 GaussianFactorGraph::shared_ptr gfg = LinearGraph(sequence, model, N);
\n-
91 VectorValues solution = gfg->optimize();
\n-
92 parameters_ = solution.at(0);
\n-
93 }
\n-
\n-
94
\n-
96 Parameters parameters() const { return parameters_; }
\n-
97};
\n-
\n-
98
\n-
99} // namespace gtsam
\n-
Compute an interpolating basis.
\n-
Factor definitions for various Basis functors.
\n-
Factor Graph Values.
\n-
Linear Factor Graph where all factors are Gaussians.
\n-
Factor Graph consisting of non-linear factors.
\n+
74 DiscreteValues& insert(const DiscreteValues& values);
\n+
75
\n+
79 DiscreteValues& update(const DiscreteValues& values);
\n+
80
\n+
\n+
85 static std::vector<DiscreteValues> CartesianProduct(
\n+
86 const DiscreteKeys& keys) {
\n+
87 return Base::CartesianProduct<DiscreteValues>(keys);
\n+
88 }
\n+
\n+
89
\n+
93
\n+
95 using Names = std::map<Key, std::vector<std::string>>;
\n+
96
\n+
98 static std::string Translate(const Names& names, Key key, size_t index);
\n+
99
\n+
107 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
108 const Names& names = {}) const;
\n+
109
\n+
117 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
118 const Names& names = {}) const;
\n+
119
\n+
121};
\n+
\n+
122
\n+
\n+
124inline std::vector<DiscreteValues> cartesianProduct(const DiscreteKeys& keys) {
\n+\n+
126}
\n+
\n+
127
\n+
129std::string markdown(const DiscreteValues& values,
\n+
130 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
131 const DiscreteValues::Names& names = {});
\n+
132
\n+
134std::string html(const DiscreteValues& values,
\n+
135 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
136 const DiscreteValues::Names& names = {});
\n+
137
\n+
138// traits
\n+
139template <>
\n+
140struct traits<DiscreteValues> : public Testable<DiscreteValues> {};
\n+
141
\n+
142} // namespace gtsam
\n+
An assignment from labels to a discrete value index (size_t)
\n+
specialized key for discrete variables
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::map< double, double > Sequence
Our sequence representation is a map of {x: y} values where y = f(x)
Definition FitBasis.h:36
\n-
std::pair< double, double > Sample
A sample is a key-value pair from a sequence.
Definition FitBasis.h:38
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
Factor for enforcing the scalar value of the polynomial BASIS representation at x is the same as the ...
Definition BasisFactors.h:39
\n-
Class that does regression via least squares Example usage: size_t N = 3; auto fit = FitBasis<Chebysh...
Definition FitBasis.h:52
\n-
static NonlinearFactorGraph NonlinearGraph(const Sequence &sequence, const SharedNoiseModel &model, size_t N)
Create nonlinear FG from Sequence.
Definition FitBasis.h:61
\n-
Parameters parameters() const
Return Fourier coefficients.
Definition FitBasis.h:96
\n-
FitBasis(const Sequence &sequence, const SharedNoiseModel &model, size_t N)
Construct a new FitBasis object.
Definition FitBasis.h:89
\n-
static GaussianFactorGraph::shared_ptr LinearGraph(const Sequence &sequence, const SharedNoiseModel &model, size_t N)
Create linear FG from Sequence.
Definition FitBasis.h:73
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
Vector & at(Key j)
Read/write access to the vector value with key j, throws std::out_of_range if j does not exist,...
Definition VectorValues.h:139
\n-
Definition NonlinearFactorGraph.h:55
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
void insert(Key j, const Value &val)
Add a variable with the given j, throws KeyAlreadyExists<J> if j is already present.
Definition Values.cpp:157
\n+
string html(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of html.
Definition DiscreteValues.cpp:134
\n+
string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of markdown.
Definition DiscreteValues.cpp:129
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::vector< DiscreteValues > cartesianProduct(const DiscreteKeys &keys)
Free version of CartesianProduct.
Definition DiscreteValues.h:124
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
An assignment from labels to value index (size_t).
Definition Assignment.h:37
\n+
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n+
A map from keys to values.
Definition DiscreteValues.h:34
\n+
std::map< Key, std::vector< std::string > > Names
Translation table from values to strings.
Definition DiscreteValues.h:95
\n+
static std::vector< DiscreteValues > CartesianProduct(const DiscreteKeys &keys)
Return a vector of DiscreteValues, one for each possible combination of values.
Definition DiscreteValues.h:85
\n+
The Factor::error simply extracts the.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,157 +1,168 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FitBasis.h\n+DiscreteValues.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19/*\n-20 * Concept needed for LS. Parameters = Coefficients | Values\n-21 * - Parameters, Jacobian\n-22 * - PredictFactor(double x)(Parameters p, OptionalJacobian<1,N> H)\n-23 */\n-24\n-25#pragma once\n-26\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b._\bh>\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-31#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-32\n-33namespace _\bg_\bt_\bs_\ba_\bm {\n-34\n-_\b3_\b6using _\bS_\be_\bq_\bu_\be_\bn_\bc_\be = std::map;\n-_\b3_\b8using _\bS_\ba_\bm_\bp_\bl_\be = std::pair;\n-39\n-51template \n-_\b5_\b2class _\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs {\n-53 public:\n-54 using Parameters = typename Basis::Parameters;\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+23\n+24#include \n+25#include \n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+_\b3_\b4class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs : public _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt {\n+35 public:\n+36 using _\bB_\ba_\bs_\be = _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bK_\be_\by_\b>; // base class\n+37\n+40 using Assignment::Assignment; // all constructors\n+41\n+42 // Define the implicit default constructor.\n+43 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs() = default;\n+44\n+45 // Construct from assignment.\n+46 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs(const _\bB_\ba_\bs_\be& a) : _\bB_\ba_\bs_\be(a) {}\n+47\n+48 // Construct from initializer list.\n+49 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs(std::initializer_list> init)\n+50 : _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bK_\be_\by_\b>{init} {}\n+51\n 55\n-56 private:\n-57 Parameters parameters_;\n-58\n-59 public:\n-_\b6_\b1 static _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bG_\br_\ba_\bp_\bh(const _\bS_\be_\bq_\bu_\be_\bn_\bc_\be& sequence,\n-62 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n-63 size_t N) {\n-64 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph;\n-65 for (const _\bS_\ba_\bm_\bp_\bl_\be sample : sequence) {\n-66 graph.emplace_shared<_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bB_\ba_\bs_\bi_\bs_\b>>(0, sample.second, model, N,\n-67 sample.first);\n-68 }\n-69 return graph;\n+57 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+58 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+59\n+61 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& x, double tol = 1e-9) const;\n+62\n+66\n+67 // insert in base class;\n+68 std::pair insert( const value_type& value ){\n+69 return Base::insert(value);\n 70 }\n 71\n-_\b7_\b3 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bL_\bi_\bn_\be_\ba_\br_\bG_\br_\ba_\bp_\bh(\n-74 const _\bS_\be_\bq_\bu_\be_\bn_\bc_\be& sequence, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model, size_t N) {\n-75 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph = _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bG_\br_\ba_\bp_\bh(sequence, model, N);\n-76 _\bV_\ba_\bl_\bu_\be_\bs values;\n-77 values._\bi_\bn_\bs_\be_\br_\bt(0, Parameters::Zero(N));\n-78 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br gfg = graph.linearize(values);\n-79 return gfg;\n-80 }\n-81\n-_\b8_\b9 _\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs(const _\bS_\be_\bq_\bu_\be_\bn_\bc_\be& sequence, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model, size_t N)\n-{\n-90 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br gfg = _\bL_\bi_\bn_\be_\ba_\br_\bG_\br_\ba_\bp_\bh(sequence, model, N);\n-91 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs solution = gfg->optimize();\n-92 parameters_ = solution._\ba_\bt(0);\n-93 }\n-94\n-_\b9_\b6 Parameters _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs() const { return parameters_; }\n-97};\n-98\n-99} // namespace gtsam\n-_\bB_\ba_\bs_\bi_\bs_\b._\bh\n-Compute an interpolating basis.\n-_\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b._\bh\n-Factor definitions for various Basis functors.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n+74 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& insert(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values);\n+75\n+79 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& update(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values);\n+80\n+_\b8_\b5 static std::vector _\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt(\n+86 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& keys) {\n+87 return Base::CartesianProduct(keys);\n+88 }\n+89\n+93\n+_\b9_\b5 using _\bN_\ba_\bm_\be_\bs = std::map>;\n+96\n+98 static std::string Translate(const _\bN_\ba_\bm_\be_\bs& names, _\bK_\be_\by key, size_t index);\n+99\n+107 std::string _\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+DefaultKeyFormatter,\n+108 const _\bN_\ba_\bm_\be_\bs& names = {}) const;\n+109\n+117 std::string _\bh_\bt_\bm_\bl(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+118 const Names& names = {}) const;\n+119\n+121};\n+122\n+_\b1_\b2_\b4inline std::vector _\bc_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs&\n+keys) {\n+125 return _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt(keys);\n+126}\n+127\n+129std::string _\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values,\n+130 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+131 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs& names = {});\n+132\n+134std::string _\bh_\bt_\bm_\bl(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values,\n+135 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+136 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs& names = {});\n+137\n+138// traits\n+139template <>\n+_\b1_\b4_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+141\n+142} // namespace gtsam\n+_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh\n+An assignment from labels to a discrete value index (size_t)\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n+specialized key for discrete variables\n+_\bK_\be_\by_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\be_\bq_\bu_\be_\bn_\bc_\be\n-std::map< double, double > Sequence\n-Our sequence representation is a map of {x: y} values where y = f(x)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FitBasis.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be\n-std::pair< double, double > Sample\n-A sample is a key-value pair from a sequence.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FitBasis.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-Factor for enforcing the scalar value of the polynomial BASIS representation at\n-x is the same as the ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs\n-Class that does regression via least squares Example usage: size_t N = 3; auto\n-fit = FitBasis shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-Vector & at(Key j)\n-Read/write access to the vector value with key j, throws std::out_of_range if j\n-does not exist,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:139\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-void insert(Key j, const Value &val)\n-Add a variable with the given j, throws KeyAlreadyExists if j is already\n-present.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bt_\bm_\bl\n+string html(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n+const DiscreteValues::Names &names)\n+Free version of html.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn\n+string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n+const DiscreteValues::Names &names)\n+Free version of markdown.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:129\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt\n+std::vector< DiscreteValues > cartesianProduct(const DiscreteKeys &keys)\n+Free version of CartesianProduct.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:124\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt\n+An assignment from labels to value index (size_t).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Assignment.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys is a set of keys that can be assembled using the & operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+A map from keys to values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs\n+std::map< Key, std::vector< std::string > > Names\n+Translation table from values to strings.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt\n+static std::vector< DiscreteValues > CartesianProduct(const DiscreteKeys &keys)\n+Return a vector of DiscreteValues, one for each possible combination of values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:85\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bb_\ba_\bs_\bi_\bs\n- * _\bF_\bi_\bt_\bB_\ba_\bs_\bi_\bs_\b._\bh\n+ * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00185.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01328.html", "comments": ["Files 89% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteValues.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/RegularImplicitSchurFactor.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n \n
\n \n-
DiscreteValues.cpp File Reference
\n+Classes |\n+Namespaces
\n+
RegularImplicitSchurFactor.h File Reference
\n \n
\n+\n+

A subclass of GaussianFactor specialized to structureless SFM. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::RegularImplicitSchurFactor< CAMERA >
 RegularImplicitSchurFactor. More...
 
struct  gtsam::traits< RegularImplicitSchurFactor< CAMERA > >
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n-\n

\n-Functions

\n-string gtsam::markdown (const DiscreteValues &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DiscreteValues::Names &names={})
 Free version of markdown.
 
\n-string gtsam::html (const DiscreteValues &values, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DiscreteValues::Names &names={})
 Free version of html.
 
\n

Detailed Description

\n-
Date
January, 2022
\n-
Author
Frank Dellaert
\n+

A subclass of GaussianFactor specialized to structureless SFM.

\n+
Author
Frank Dellaert
\n+
\n+Luca Carlone
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,31 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DiscreteValues.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+RegularImplicitSchurFactor.h File Reference\n+A subclass of GaussianFactor specialized to structureless SFM. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n+\u00a0 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bma\bar\brk\bkd\bdo\bow\bwn\bn (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &values, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n- &keyFormatter=DefaultKeyFormatter, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs &names=\n- {})\n-\u00a0 Free version of markdown.\n-\u00a0\n-string\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:h\bht\btm\bml\bl (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs &values, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n- &keyFormatter=DefaultKeyFormatter, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bN_\ba_\bm_\be_\bs &names=\n- {})\n-\u00a0 Free version of html.\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- January, 2022\n+A subclass of GaussianFactor specialized to structureless SFM.\n Author\n Frank Dellaert\n+ Luca Carlone\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bc_\bp_\bp\n+ * _\bs_\bl_\ba_\bm\n+ * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00218_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00032_source.html", "comments": ["Files 96% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/Assignment.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/DSFVector.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Assignment.h
\n+
DSFVector.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <functional>
\n-
22#include <iostream>
\n-
23#include <map>
\n-
24#include <sstream>
\n-
25#include <utility>
\n+
21#include <gtsam/dllexport.h>
\n+\n+
23
\n+
24#include <boost/shared_ptr.hpp>
\n+
25
\n
26#include <vector>
\n-
27
\n-
28namespace gtsam {
\n+
27#include <set>
\n+
28#include <map>
\n
29
\n-
36template <class L>
\n-
\n-
37class Assignment : public std::map<L, size_t> {
\n-
45 static std::string DefaultFormatter(const L& x) {
\n-
46 std::stringstream ss;
\n-
47 ss << x;
\n-
48 return ss.str();
\n-
49 }
\n-
50
\n-
51 public:
\n-
52 using std::map<L, size_t>::operator=;
\n-
53
\n-
54 // Define the implicit default constructor.
\n-
55 Assignment() = default;
\n-
56
\n-
57 // Construct from initializer list.
\n-
58 Assignment(std::initializer_list<std::pair<const L, size_t>> init)
\n-
59 : std::map<L, size_t>{init} {}
\n-
60
\n-
61 void print(const std::string& s = "Assignment: ",
\n-
62 const std::function<std::string(L)>& labelFormatter =
\n-
63 &DefaultFormatter) const {
\n-
64 std::cout << s << ": ";
\n-
65 for (const typename Assignment::value_type& keyValue : *this) {
\n-
66 std::cout << "(" << labelFormatter(keyValue.first) << ", "
\n-
67 << keyValue.second << ")";
\n-
68 }
\n-
69 std::cout << std::endl;
\n-
70 }
\n-
71
\n-
72 bool equals(const Assignment& other, double tol = 1e-9) const {
\n-
73 return (*this == other);
\n-
74 }
\n+
30namespace gtsam {
\n+
31
\n+
\n+
38class GTSAM_EXPORT DSFBase {
\n+
39
\n+
40public:
\n+
41 typedef std::vector<size_t> V;
\n+
42
\n+
43private:
\n+
44 boost::shared_ptr<V> v_;
\n+
45
\n+
46public:
\n+
48 DSFBase(const size_t numNodes);
\n+
49
\n+
51 DSFBase(const boost::shared_ptr<V>& v_in);
\n+
52
\n+
54 size_t find(size_t key) const;
\n+
55
\n+
57 void merge(const size_t& i1, const size_t& i2);
\n+
58};
\n+
\n+
59
\n+
\n+
64class GTSAM_EXPORT DSFVector: public DSFBase {
\n+
65
\n+
66private:
\n+
67 std::vector<size_t> keys_;
\n+
68
\n+
69public:
\n+
71 DSFVector(const size_t numNodes);
\n+
72
\n+
74 DSFVector(const std::vector<size_t>& keys);
\n
75
\n-
88 template <typename Derived = Assignment<L>>
\n-
\n-
89 static std::vector<Derived> CartesianProduct(
\n-
90 const std::vector<std::pair<L, size_t>>& keys) {
\n-
91 std::vector<Derived> allPossValues;
\n-
92 Derived values;
\n-
93 typedef std::pair<L, size_t> DiscreteKey;
\n-
94 for (const DiscreteKey& key : keys)
\n-
95 values[key.first] = 0; // Initialize from 0
\n-
96 while (1) {
\n-
97 allPossValues.push_back(values);
\n-
98 size_t j = 0;
\n-
99 for (j = 0; j < keys.size(); j++) {
\n-
100 L idx = keys[j].first;
\n-
101 values[idx]++;
\n-
102 if (values[idx] < keys[j].second) break;
\n-
103 // Wrap condition
\n-
104 values[idx] = 0;
\n-
105 }
\n-
106 if (j == keys.size()) break;
\n-
107 }
\n-
108 return allPossValues;
\n-
109 }
\n-
\n-
110}; // Assignment
\n-
\n-
111
\n-
112} // namespace gtsam
\n-
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n+
77 DSFVector(const boost::shared_ptr<V>& v_in, const std::vector<size_t>& keys);
\n+
78
\n+
79 // All operations below loop over all keys and hence are *at least* O(n)
\n+
80
\n+
82 bool isSingleton(const size_t& label) const;
\n+
83
\n+
85 std::set<size_t> set(const size_t& label) const;
\n+
86
\n+
88 std::map<size_t, std::set<size_t> > sets() const;
\n+
89
\n+
91 std::map<size_t, std::vector<size_t> > arrays() const;
\n+
92};
\n+
\n+
93
\n+
94}
\n+
Included from all GTSAM files.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
An assignment from labels to value index (size_t).
Definition Assignment.h:37
\n-
static std::vector< Derived > CartesianProduct(const std::vector< std::pair< L, size_t > > &keys)
Get Cartesian product consisting all possible configurations.
Definition Assignment.h:89
\n+
A fast implementation of disjoint set forests that uses vector as underly data structure.
Definition DSFVector.h:38
\n+
std::vector< size_t > V
Vector of ints.
Definition DSFVector.h:41
\n+
DSFVector additionally keeps a vector of keys to support more expensive operations.
Definition DSFVector.h:64
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Assignment.h\n+DSFVector.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,96 +16,82 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include \n-22#include \n-23#include \n-24#include \n-25#include \n+21#include \n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+23\n+24#include \n+25\n 26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n+27#include \n+28#include \n 29\n-36template \n-_\b3_\b7class _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt : public std::map {\n-45 static std::string DefaultFormatter(const L& x) {\n-46 std::stringstream ss;\n-47 ss << x;\n-48 return ss.str();\n-49 }\n-50\n-51 public:\n-52 using std::map::operator=;\n-53\n-54 // Define the implicit default constructor.\n-55 _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt() = default;\n-56\n-57 // Construct from initializer list.\n-58 _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt(std::initializer_list> init)\n-59 : std::map{init} {}\n-60\n-61 void print(const std::string& s = \"Assignment: \",\n-62 const std::function& labelFormatter =\n-63 &DefaultFormatter) const {\n-64 std::cout << s << \": \";\n-65 for (const typename Assignment::value_type& keyValue : *this) {\n-66 std::cout << \"(\" << labelFormatter(keyValue.first) << \", \"\n-67 << keyValue.second << \")\";\n-68 }\n-69 std::cout << std::endl;\n-70 }\n-71\n-72 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt& other, double tol = 1e-9) const {\n-73 return (*this == other);\n-74 }\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+_\b3_\b8class GTSAM_EXPORT _\bD_\bS_\bF_\bB_\ba_\bs_\be {\n+39\n+40public:\n+_\b4_\b1 typedef std::vector _\bV;\n+42\n+43private:\n+44 boost::shared_ptr v_;\n+45\n+46public:\n+48 _\bD_\bS_\bF_\bB_\ba_\bs_\be(const size_t numNodes);\n+49\n+51 _\bD_\bS_\bF_\bB_\ba_\bs_\be(const boost::shared_ptr& v_in);\n+52\n+54 size_t find(size_t key) const;\n+55\n+57 void merge(const size_t& i1, const size_t& i2);\n+58};\n+59\n+_\b6_\b4class GTSAM_EXPORT _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br: public _\bD_\bS_\bF_\bB_\ba_\bs_\be {\n+65\n+66private:\n+67 std::vector keys_;\n+68\n+69public:\n+71 _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br(const size_t numNodes);\n+72\n+74 _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br(const std::vector& keys);\n 75\n-88 template >\n-_\b8_\b9 static std::vector _\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt(\n-90 const std::vector>& keys) {\n-91 std::vector allPossValues;\n-92 Derived values;\n-93 typedef std::pair _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by;\n-94 for (const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key : keys)\n-95 values[key.first] = 0; // Initialize from 0\n-96 while (1) {\n-97 allPossValues.push_back(values);\n-98 size_t j = 0;\n-99 for (j = 0; j < keys.size(); j++) {\n-100 L idx = keys[j].first;\n-101 values[idx]++;\n-102 if (values[idx] < keys[j].second) break;\n-103 // Wrap condition\n-104 values[idx] = 0;\n-105 }\n-106 if (j == keys.size()) break;\n-107 }\n-108 return allPossValues;\n-109 }\n-110}; // Assignment\n-111\n-112} // namespace gtsam\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n-std::pair< Key, size_t > DiscreteKey\n-Key type for discrete variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n+77 _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br(const boost::shared_ptr& v_in, const std::vector&\n+keys);\n+78\n+79 // All operations below loop over all keys and hence are *at least* O(n)\n+80\n+82 bool isSingleton(const size_t& label) const;\n+83\n+85 std::set set(const size_t& label) const;\n+86\n+88 std::map > sets() const;\n+89\n+91 std::map > arrays() const;\n+92};\n+93\n+94}\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt\n-An assignment from labels to value index (size_t).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Assignment.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b:_\b:_\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt\n-static std::vector< Derived > CartesianProduct(const std::vector< std::pair< L,\n-size_t > > &keys)\n-Get Cartesian product consisting all possible configurations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Assignment.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bB_\ba_\bs_\be\n+A fast implementation of disjoint set forests that uses vector as underly data\n+structure.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFVector.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bB_\ba_\bs_\be_\b:_\b:_\bV\n+std::vector< size_t > V\n+Vector of ints.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFVector.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br\n+DSFVector additionally keeps a vector of keys to support more expensive\n+operations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DSFVector.h:64\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh\n+ * _\bb_\ba_\bs_\be\n+ * _\bD_\bS_\bF_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00224_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00743_source.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/AlgebraicDecisionTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/RegularJacobianFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
AlgebraicDecisionTree.h
\n+
RegularJacobianFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/base/Testable.h>
\n-
22#include <gtsam/discrete/DecisionTree-inl.h>
\n+\n+\n
23
\n-
24#include <algorithm>
\n-
25#include <map>
\n-
26#include <string>
\n-
27#include <vector>
\n-
28namespace gtsam {
\n-
29
\n-
37 template <typename L>
\n-
\n-
38 class GTSAM_EXPORT AlgebraicDecisionTree : public DecisionTree<L, double> {
\n-
46 static std::string DefaultFormatter(const L& x) {
\n-
47 std::stringstream ss;
\n-
48 ss << x;
\n-
49 return ss.str();
\n-
50 }
\n-
51
\n-
52 public:
\n-\n-
54
\n-
\n-
56 struct Ring {
\n-
57 static inline double zero() { return 0.0; }
\n-
58 static inline double one() { return 1.0; }
\n-
59 static inline double add(const double& a, const double& b) {
\n-
60 return a + b;
\n-
61 }
\n-
62 static inline double max(const double& a, const double& b) {
\n-
63 return std::max(a, b);
\n-
64 }
\n-
65 static inline double mul(const double& a, const double& b) {
\n-
66 return a * b;
\n-
67 }
\n-
68 static inline double div(const double& a, const double& b) {
\n-
69 return a / b;
\n-
70 }
\n-
71 static inline double id(const double& x) { return x; }
\n-
72 };
\n-
\n-
73
\n-
74 AlgebraicDecisionTree(double leaf = 1.0) : Base(leaf) {}
\n-
75
\n-
76 // Explicitly non-explicit constructor
\n-
77 AlgebraicDecisionTree(const Base& add) : Base(add) {}
\n-
78
\n-
\n-
80 AlgebraicDecisionTree(const L& label, double y1, double y2)
\n-
81 : Base(label, y1, y2) {}
\n-
\n-
82
\n-
\n-
96 AlgebraicDecisionTree(const typename Base::LabelC& labelC, double y1,
\n-
97 double y2)
\n-
98 : Base(labelC, y1, y2) {}
\n-
\n+
24namespace gtsam {
\n+
25
\n+
31template<size_t D>
\n+
\n+\n+
33
\n+
34private:
\n+
35
\n+
36 // Use eigen magic to access raw memory
\n+
37 typedef Eigen::Matrix<double, D, 1> DVector;
\n+
38 typedef Eigen::Map<DVector> DMap;
\n+
39 typedef Eigen::Map<const DVector> ConstDMap;
\n+
40
\n+
41public:
\n+
42
\n+\n+
45
\n+
51 template<typename TERMS>
\n+
\n+
52 RegularJacobianFactor(const TERMS& terms, const Vector& b,
\n+
53 const SharedDiagonal& model = SharedDiagonal()) :
\n+
54 JacobianFactor(terms, b, model) {
\n+
55 }
\n+
\n+
56
\n+
63 template<typename KEYS>
\n+
\n+\n+
65 const VerticalBlockMatrix& augmentedMatrix, const SharedDiagonal& sigmas =
\n+
66 SharedDiagonal()) :
\n+
67 JacobianFactor(keys, augmentedMatrix, sigmas) {
\n+
68 }
\n+
\n+
69
\n+\n+
71
\n+
\n+
73 void multiplyHessianAdd(double alpha, const VectorValues& x,
\n+
74 VectorValues& y) const override {
\n+\n+
76 }
\n+
\n+
77
\n+
\n+
82 void multiplyHessianAdd(double alpha, const double* x, double* y) const {
\n+
83 if (empty())
\n+
84 return;
\n+
85 Vector Ax = Vector::Zero(Ab_.rows());
\n+
86
\n+
87 // Just iterate over all A matrices and multiply in correct config part
\n+
88 for (size_t pos = 0; pos < size(); ++pos)
\n+
89 Ax += Ab_(pos) * ConstDMap(x + D * keys_[pos]);
\n+
90
\n+
91 // Deal with noise properly, need to Double* whiten as we are dividing by variance
\n+
92 if (model_) {
\n+
93 model_->whitenInPlace(Ax);
\n+
94 model_->whitenInPlace(Ax);
\n+
95 }
\n+
96
\n+
97 // multiply with alpha
\n+
98 Ax *= alpha;
\n
99
\n-
\n-\n-
125 (const std::vector<typename Base::LabelC>& labelCs,
\n-
126 const std::vector<double>& ys) {
\n-
127 this->root_ =
\n-
128 Base::create(labelCs.begin(), labelCs.end(), ys.begin(), ys.end());
\n-
129 }
\n-
\n-
130
\n-
\n-\n-
140 (const std::vector<typename Base::LabelC>& labelCs,
\n-
141 const std::string& table) {
\n-
142 // Convert string to doubles
\n-
143 std::vector<double> ys;
\n-
144 std::istringstream iss(table);
\n-
145 std::copy(std::istream_iterator<double>(iss),
\n-
146 std::istream_iterator<double>(), std::back_inserter(ys));
\n-
147
\n-
148 // now call recursive Create
\n-
149 this->root_ =
\n-
150 Base::create(labelCs.begin(), labelCs.end(), ys.begin(), ys.end());
\n-
151 }
\n+
100 // Again iterate over all A matrices and insert Ai^e into y
\n+
101 for (size_t pos = 0; pos < size(); ++pos)
\n+
102 DMap(y + D * keys_[pos]) += Ab_(pos).transpose() * Ax;
\n+
103 }
\n+
\n+
104
\n+\n+
107
\n+
\n+
109 void hessianDiagonal(double* d) const override {
\n+
110 // Loop over all variables in the factor
\n+
111 for (DenseIndex j = 0; j < (DenseIndex) size(); ++j) {
\n+
112 // Get the diagonal block, and insert its diagonal
\n+
113 DVector dj;
\n+
114 for (size_t k = 0; k < D; ++k) {
\n+
115 if (model_) {
\n+
116 Vector column_k = Ab_(j).col(k);
\n+
117 column_k = model_->whiten(column_k);
\n+
118 dj(k) = dot(column_k, column_k);
\n+
119 } else {
\n+
120 dj(k) = Ab_(j).col(k).squaredNorm();
\n+
121 }
\n+
122 }
\n+
123 DMap(d + D * j) += dj;
\n+
124 }
\n+
125 }
\n+
\n+
126
\n+
\n+
128 VectorValues gradientAtZero() const override {
\n+\n+
130 }
\n+
\n+
131
\n+
\n+
133 void gradientAtZero(double* d) const override {
\n+
134
\n+
135 // Get vector b not weighted
\n+
136 Vector b = getb();
\n+
137
\n+
138 // Whitening b
\n+
139 if (model_) {
\n+
140 b = model_->whiten(b);
\n+
141 b = model_->whiten(b);
\n+
142 }
\n+
143
\n+
144 // Just iterate over all A matrices
\n+
145 for (DenseIndex j = 0; j < (DenseIndex) size(); ++j) {
\n+
146 DVector dj;
\n+
147 // gradient -= A'*b/sigma^2
\n+
148 // Computing with each column
\n+
149 for (size_t k = 0; k < D; ++k) {
\n+
150 Vector column_k = Ab_(j).col(k);
\n+
151 dj(k) = -1.0 * dot(b, column_k);
\n+
152 }
\n+
153 DMap(d + D * j) += dj;
\n+
154 }
\n+
155 }
\n
\n-
152
\n-
160 template <typename Iterator>
\n+
156
\n
\n-
161 AlgebraicDecisionTree(Iterator begin, Iterator end, const L& label)
\n-
162 : Base(nullptr) {
\n-
163 this->root_ = compose(begin, end, label);
\n-
164 }
\n-
\n-
165
\n-
172 template <typename M>
\n-
\n-\n-
174 const std::map<M, L>& map) {
\n-
175 // Functor for label conversion so we can use `convertFrom`.
\n-
176 std::function<L(const M&)> L_of_M = [&map](const M& label) -> L {
\n-
177 return map.at(label);
\n-
178 };
\n-
179 std::function<double(const double&)> op = Ring::id;
\n-
180 this->root_ = DecisionTree<L, double>::convertFrom(other.root_, L_of_M, op);
\n-
181 }
\n-
\n-
182
\n-
\n-\n-
185 return this->apply(g, &Ring::add);
\n-
186 }
\n-
\n-
187
\n-
\n-\n-
190 return this->apply(g, &Ring::mul);
\n-
191 }
\n-
\n-
192
\n-
\n-\n-
195 return this->apply(g, &Ring::div);
\n-
196 }
\n-
\n-
197
\n-
\n-
199 AlgebraicDecisionTree sum(const L& label, size_t cardinality) const {
\n-
200 return this->combine(label, cardinality, &Ring::add);
\n-
201 }
\n-
\n-
202
\n-
\n-
204 AlgebraicDecisionTree sum(const typename Base::LabelC& labelC) const {
\n-
205 return this->combine(labelC, &Ring::add);
\n-
206 }
\n-
\n-
207
\n-
\n-
209 void print(const std::string& s = "",
\n-
210 const typename Base::LabelFormatter& labelFormatter =
\n-
211 &DefaultFormatter) const {
\n-
212 auto valueFormatter = [](const double& v) {
\n-
213 return (boost::format("%4.8g") % v).str();
\n-
214 };
\n-
215 Base::print(s, labelFormatter, valueFormatter);
\n-
216 }
\n-
\n-
217
\n-
\n-
219 bool equals(const AlgebraicDecisionTree& other, double tol = 1e-9) const {
\n-
220 // lambda for comparison of two doubles upto some tolerance.
\n-
221 auto compare = [tol](double a, double b) {
\n-
222 return std::abs(a - b) < tol;
\n-
223 };
\n-
224 return Base::equals(other, compare);
\n-
225 }
\n-
\n-
226 };
\n-
\n-
227
\n-
228template <typename T>
\n-
\n-\n-
230 : public Testable<AlgebraicDecisionTree<T>> {};
\n-
\n-
231} // namespace gtsam
\n-
Concept check for values that can be used in unit tests.
\n+
161 void transposeMultiplyAdd(double alpha, const Vector& e, double* x) const {
\n+
162 Vector E = alpha * (model_ ? model_->whiten(e) : e);
\n+
163 // Just iterate over all A matrices and insert Ai^e into y
\n+
164 for (size_t pos = 0; pos < size(); ++pos)
\n+
165 DMap(x + D * keys_[pos]) += Ab_(pos).transpose() * E;
\n+
166 }
\n+
\n+
167
\n+
\n+
172 Vector operator*(const double* x) const {
\n+
173 Vector Ax = Vector::Zero(Ab_.rows());
\n+
174 if (empty())
\n+
175 return Ax;
\n+
176
\n+
177 // Just iterate over all A matrices and multiply in correct config part
\n+
178 for (size_t pos = 0; pos < size(); ++pos)
\n+
179 Ax += Ab_(pos) * ConstDMap(x + D * keys_[pos]);
\n+
180
\n+
181 return model_ ? model_->whiten(Ax) : Ax;
\n+
182 }
\n+
\n+
183
\n+
184};
\n+
\n+
185// end class RegularJacobianFactor
\n+
186
\n+
187}// end namespace gtsam
\n+\n+
Factor Graph Values.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::Unary &op)
free versions of apply
Definition DecisionTree.h:413
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
An algebraic decision tree fixes the range of a DecisionTree to double.
Definition AlgebraicDecisionTree.h:38
\n-
AlgebraicDecisionTree operator/(const AlgebraicDecisionTree &g) const
division
Definition AlgebraicDecisionTree.h:194
\n-
AlgebraicDecisionTree sum(const L &label, size_t cardinality) const
sum out variable
Definition AlgebraicDecisionTree.h:199
\n-
AlgebraicDecisionTree(const typename Base::LabelC &labelC, double y1, double y2)
Create a new leaf function splitting on a variable.
Definition AlgebraicDecisionTree.h:96
\n-
void print(const std::string &s="", const typename Base::LabelFormatter &labelFormatter=&DefaultFormatter) const
print method customized to value type double.
Definition AlgebraicDecisionTree.h:209
\n-
AlgebraicDecisionTree sum(const typename Base::LabelC &labelC) const
sum out variable
Definition AlgebraicDecisionTree.h:204
\n-
AlgebraicDecisionTree(const AlgebraicDecisionTree< M > &other, const std::map< M, L > &map)
Convert labels from type M to type L.
Definition AlgebraicDecisionTree.h:173
\n-
AlgebraicDecisionTree(const L &label, double y1, double y2)
Create a new leaf function splitting on a variable.
Definition AlgebraicDecisionTree.h:80
\n-
bool equals(const AlgebraicDecisionTree &other, double tol=1e-9) const
Equality method customized to value type double.
Definition AlgebraicDecisionTree.h:219
\n-
AlgebraicDecisionTree operator+(const AlgebraicDecisionTree &g) const
sum
Definition AlgebraicDecisionTree.h:184
\n-
AlgebraicDecisionTree operator*(const AlgebraicDecisionTree &g) const
product
Definition AlgebraicDecisionTree.h:189
\n-
AlgebraicDecisionTree(Iterator begin, Iterator end, const L &label)
Create a range of decision trees, splitting on a single variable.
Definition AlgebraicDecisionTree.h:161
\n-
The Real ring with addition and multiplication.
Definition AlgebraicDecisionTree.h:56
\n-
a decision tree is a function from assignments to values.
Definition DecisionTree.h:61
\n-
NodePtr root_
A DecisionTree just contains the root. TODO(dellaert): make protected.
Definition DecisionTree.h:146
\n-
std::pair< L, size_t > LabelC
A label annotated with cardinality.
Definition DecisionTree.h:79
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n+
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n+
DenseIndex rows() const
Row size.
Definition VerticalBlockMatrix.h:115
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
bool empty() const
Whether the factor is empty (involves zero variables).
Definition Factor.h:128
\n+
size_t size() const
Definition Factor.h:157
\n+
VectorValues hessianDiagonal() const
Return the diagonal of the Hessian for this factor.
Definition GaussianFactor.cpp:35
\n+
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n+
const constBVector getb() const
Get a view of the r.h.s.
Definition JacobianFactor.h:297
\n+
void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const override
y += alpha * A'*A*x
Definition JacobianFactor.cpp:649
\n+
VectorValues gradientAtZero() const override
A'*b for Jacobian.
Definition JacobianFactor.cpp:701
\n+
JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator.
Definition RegularJacobianFactor.h:32
\n+
Vector operator*(const double *x) const
double* Matrix-vector multiply, i.e.
Definition RegularJacobianFactor.h:172
\n+
void hessianDiagonal(double *d) const override
Raw memory access version of hessianDiagonal.
Definition RegularJacobianFactor.h:109
\n+
void gradientAtZero(double *d) const override
Raw memory access version of gradientAtZero.
Definition RegularJacobianFactor.h:133
\n+
void transposeMultiplyAdd(double alpha, const Vector &e, double *x) const
double* Transpose Matrix-vector multiply, i.e.
Definition RegularJacobianFactor.h:161
\n+
VectorValues gradientAtZero() const override
Expose base class gradientAtZero.
Definition RegularJacobianFactor.h:128
\n+
RegularJacobianFactor(const TERMS &terms, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Construct an n-ary factor.
Definition RegularJacobianFactor.h:52
\n+
void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const override
y += alpha * A'*A*x
Definition RegularJacobianFactor.h:73
\n+
RegularJacobianFactor()
Default constructor.
Definition RegularJacobianFactor.h:44
\n+
RegularJacobianFactor(const KEYS &keys, const VerticalBlockMatrix &augmentedMatrix, const SharedDiagonal &sigmas=SharedDiagonal())
Constructor with arbitrary number keys, and where the augmented matrix is given all together instead ...
Definition RegularJacobianFactor.h:64
\n+
void multiplyHessianAdd(double alpha, const double *x, double *y) const
double* Hessian-vector multiply, i.e.
Definition RegularJacobianFactor.h:82
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-AlgebraicDecisionTree.h\n+RegularJacobianFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,223 +16,254 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-22#include \n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n 23\n-24#include \n-25#include \n-26#include \n-27#include \n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-37 template \n-_\b3_\b8 class GTSAM_EXPORT _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be : public _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be {\n-46 static std::string DefaultFormatter(const L& x) {\n-47 std::stringstream ss;\n-48 ss << x;\n-49 return ss.str();\n-50 }\n-51\n-52 public:\n-53 using _\bB_\ba_\bs_\be = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bd_\bo_\bu_\bb_\bl_\be_\b>;\n-54\n-_\b5_\b6 struct _\bR_\bi_\bn_\bg {\n-57 static inline double zero() { return 0.0; }\n-58 static inline double one() { return 1.0; }\n-59 static inline double add(const double& a, const double& b) {\n-60 return a + b;\n-61 }\n-62 static inline double max(const double& a, const double& b) {\n-63 return std::max(a, b);\n-64 }\n-65 static inline double mul(const double& a, const double& b) {\n-66 return a * b;\n-67 }\n-68 static inline double div(const double& a, const double& b) {\n-69 return a / b;\n-70 }\n-71 static inline double id(const double& x) { return x; }\n-72 };\n-73\n-74 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(double leaf = 1.0) : _\bB_\ba_\bs_\be(leaf) {}\n-75\n-76 // Explicitly non-explicit constructor\n-77 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const Base& add) : Base(add) {}\n-78\n-_\b8_\b0 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const L& label, double y1, double y2)\n-81 : _\bB_\ba_\bs_\be(label, y1, y2) {}\n-82\n-_\b9_\b6 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const typename _\bB_\ba_\bs_\be_\b:_\b:_\bL_\ba_\bb_\be_\bl_\bC& labelC, double y1,\n-97 double y2)\n-98 : _\bB_\ba_\bs_\be(labelC, y1, y2) {}\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+31template\n+_\b3_\b2class _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n+33\n+34private:\n+35\n+36 // Use eigen magic to access raw memory\n+37 typedef Eigen::Matrix DVector;\n+38 typedef Eigen::Map DMap;\n+39 typedef Eigen::Map ConstDMap;\n+40\n+41public:\n+42\n+_\b4_\b4 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+45\n+51 template\n+_\b5_\b2 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const TERMS& terms, const Vector& b,\n+53 const SharedDiagonal& model = SharedDiagonal()) :\n+54 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(terms, b, model) {\n+55 }\n+56\n+63 template\n+_\b6_\b4 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const KEYS& _\bk_\be_\by_\bs,\n+65 const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& augmentedMatrix, const SharedDiagonal& sigmas =\n+66 SharedDiagonal()) :\n+67 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bk_\be_\by_\bs, augmentedMatrix, sigmas) {\n+68 }\n+69\n+70 using _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd;\n+71\n+_\b7_\b3 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n+74 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const override {\n+75 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(alpha, x, y);\n+76 }\n+77\n+_\b8_\b2 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const double* x, double* y) const {\n+83 if (_\be_\bm_\bp_\bt_\by())\n+84 return;\n+85 Vector Ax = Vector::Zero(Ab_._\br_\bo_\bw_\bs());\n+86\n+87 // Just iterate over all A matrices and multiply in correct config part\n+88 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos)\n+89 Ax += Ab_(pos) * ConstDMap(x + D * _\bk_\be_\by_\bs_\b_[pos]);\n+90\n+91 // Deal with noise properly, need to Double* whiten as we are dividing by\n+variance\n+92 if (model_) {\n+93 model_->whitenInPlace(Ax);\n+94 model_->whitenInPlace(Ax);\n+95 }\n+96\n+97 // multiply with alpha\n+98 Ax *= alpha;\n 99\n-_\b1_\b2_\b4 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be //\n-125 (const std::vector& labelCs,\n-126 const std::vector& ys) {\n-127 this->root_ =\n-128 Base::create(labelCs.begin(), labelCs.end(), ys.begin(), ys.end());\n-129 }\n-130\n-_\b1_\b3_\b9 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be //\n-140 (const std::vector& labelCs,\n-141 const std::string& table) {\n-142 // Convert string to doubles\n-143 std::vector ys;\n-144 std::istringstream iss(table);\n-145 std::copy(std::istream_iterator(iss),\n-146 std::istream_iterator(), std::back_inserter(ys));\n-147\n-148 // now call recursive Create\n-149 this->root_ =\n-150 Base::create(labelCs.begin(), labelCs.end(), ys.begin(), ys.end());\n-151 }\n-152\n-160 template \n-_\b1_\b6_\b1 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(Iterator begin, Iterator end, const L& label)\n-162 : _\bB_\ba_\bs_\be(nullptr) {\n-163 this->root_ = compose(begin, end, label);\n-164 }\n-165\n-172 template \n-_\b1_\b7_\b3 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bM_\b>& other,\n-174 const std::map& map) {\n-175 // Functor for label conversion so we can use `convertFrom`.\n-176 std::function L_of_M = [&map](const M& label) -> L {\n-177 return map.at(label);\n-178 };\n-179 std::function op = Ring::id;\n-180 this->root_ = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bd_\bo_\bu_\bb_\bl_\be_\b>_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bF_\br_\bo_\bm(other._\br_\bo_\bo_\bt_\b_, L_of_M,\n-op);\n-181 }\n-182\n-_\b1_\b8_\b4 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& g) const {\n-185 return this->_\ba_\bp_\bp_\bl_\by(g, &Ring::add);\n-186 }\n-187\n-_\b1_\b8_\b9 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& g) const {\n-190 return this->_\ba_\bp_\bp_\bl_\by(g, &Ring::mul);\n-191 }\n-192\n-_\b1_\b9_\b4 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/(const _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& g) const {\n-195 return this->_\ba_\bp_\bp_\bl_\by(g, &Ring::div);\n-196 }\n-197\n-_\b1_\b9_\b9 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\bs_\bu_\bm(const L& label, size_t cardinality) const {\n-200 return this->combine(label, cardinality, &Ring::add);\n-201 }\n-202\n-_\b2_\b0_\b4 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\bs_\bu_\bm(const typename _\bB_\ba_\bs_\be_\b:_\b:_\bL_\ba_\bb_\be_\bl_\bC& labelC) const {\n-205 return this->combine(labelC, &Ring::add);\n-206 }\n-207\n-_\b2_\b0_\b9 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-210 const typename Base::LabelFormatter& labelFormatter =\n-211 &DefaultFormatter) const {\n-212 auto valueFormatter = [](const double& v) {\n-213 return (boost::format(\"%4.8g\") % v).str();\n-214 };\n-215 Base::print(s, labelFormatter, valueFormatter);\n-216 }\n-217\n-_\b2_\b1_\b9 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& other, double tol = 1e-9) const {\n-220 // lambda for comparison of two doubles upto some tolerance.\n-221 auto compare = [tol](double a, double b) {\n-222 return std::abs(a - b) < tol;\n-223 };\n-224 return Base::equals(other, compare);\n-225 }\n-226 };\n-227\n-228template \n-_\b2_\b2_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be>\n-230 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n-231} // namespace gtsam\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n+100 // Again iterate over all A matrices and insert Ai^e into y\n+101 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos)\n+102 DMap(y + D * _\bk_\be_\by_\bs_\b_[pos]) += Ab_(pos).transpose() * Ax;\n+103 }\n+104\n+106 using _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl;\n+107\n+_\b1_\b0_\b9 void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(double* d) const override {\n+110 // Loop over all variables in the factor\n+111 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j = 0; j < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++j) {\n+112 // Get the diagonal block, and insert its diagonal\n+113 DVector dj;\n+114 for (size_t k = 0; k < D; ++k) {\n+115 if (model_) {\n+116 Vector column_k = Ab_(j).col(k);\n+117 column_k = model_->whiten(column_k);\n+118 dj(k) = _\bd_\bo_\bt(column_k, column_k);\n+119 } else {\n+120 dj(k) = Ab_(j).col(k).squaredNorm();\n+121 }\n+122 }\n+123 DMap(d + D * j) += dj;\n+124 }\n+125 }\n+126\n+_\b1_\b2_\b8 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo() const override {\n+129 return _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo();\n+130 }\n+131\n+_\b1_\b3_\b3 void _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo(double* d) const override {\n+134\n+135 // Get vector b not weighted\n+136 Vector b = _\bg_\be_\bt_\bb();\n+137\n+138 // Whitening b\n+139 if (model_) {\n+140 b = model_->whiten(b);\n+141 b = model_->whiten(b);\n+142 }\n+143\n+144 // Just iterate over all A matrices\n+145 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j = 0; j < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++j) {\n+146 DVector dj;\n+147 // gradient -= A'*b/sigma^2\n+148 // Computing with each column\n+149 for (size_t k = 0; k < D; ++k) {\n+150 Vector column_k = Ab_(j).col(k);\n+151 dj(k) = -1.0 * _\bd_\bo_\bt(b, column_k);\n+152 }\n+153 DMap(d + D * j) += dj;\n+154 }\n+155 }\n+156\n+_\b1_\b6_\b1 void _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bA_\bd_\bd(double alpha, const Vector& e, double* x) const {\n+162 Vector E = alpha * (model_ ? model_->whiten(e) : e);\n+163 // Just iterate over all A matrices and insert Ai^e into y\n+164 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos)\n+165 DMap(x + D * _\bk_\be_\by_\bs_\b_[pos]) += Ab_(pos).transpose() * E;\n+166 }\n+167\n+_\b1_\b7_\b2 Vector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const double* x) const {\n+173 Vector Ax = Vector::Zero(Ab_._\br_\bo_\bw_\bs());\n+174 if (_\be_\bm_\bp_\bt_\by())\n+175 return Ax;\n+176\n+177 // Just iterate over all A matrices and multiply in correct config part\n+178 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos)\n+179 Ax += Ab_(pos) * ConstDMap(x + D * _\bk_\be_\by_\bs_\b_[pos]);\n+180\n+181 return model_ ? model_->whiten(Ax) : Ax;\n+182 }\n+183\n+184};\n+185// end class RegularJacobianFactor\n+186\n+187}// end namespace gtsam\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename\n-DecisionTree< L, Y >::Unary &op)\n-free versions of apply\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:413\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-An algebraic decision tree fixes the range of a DecisionTree to double.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b/\n-AlgebraicDecisionTree operator/(const AlgebraicDecisionTree &g) const\n-division\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:194\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bu_\bm\n-AlgebraicDecisionTree sum(const L &label, size_t cardinality) const\n-sum out variable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:199\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-AlgebraicDecisionTree(const typename Base::LabelC &labelC, double y1, double\n-y2)\n-Create a new leaf function splitting on a variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const typename Base::LabelFormatter\n-&labelFormatter=&DefaultFormatter) const\n-print method customized to value type double.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:209\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bu_\bm\n-AlgebraicDecisionTree sum(const typename Base::LabelC &labelC) const\n-sum out variable\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:204\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-AlgebraicDecisionTree(const AlgebraicDecisionTree< M > &other, const std::map<\n-M, L > &map)\n-Convert labels from type M to type L.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:173\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-AlgebraicDecisionTree(const L &label, double y1, double y2)\n-Create a new leaf function splitting on a variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const AlgebraicDecisionTree &other, double tol=1e-9) const\n-Equality method customized to value type double.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-AlgebraicDecisionTree operator+(const AlgebraicDecisionTree &g) const\n-sum\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-AlgebraicDecisionTree operator*(const AlgebraicDecisionTree &g) const\n-product\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-AlgebraicDecisionTree(Iterator begin, Iterator end, const L &label)\n-Create a range of decision trees, splitting on a single variable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bR_\bi_\bn_\bg\n-The Real ring with addition and multiplication.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-a decision tree is a function from assignments to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\b_\n-NodePtr root_\n-A DecisionTree just contains the root. TODO(dellaert): make protected.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:146\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b,_\b _\bd_\bo_\bu_\bb_\bl_\be_\b _\b>_\b:_\b:_\bL_\ba_\bb_\be_\bl_\bC\n-std::pair< L, size_t > LabelC\n-A label annotated with cardinality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of vertical blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n+DenseIndex rows() const\n+Row size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bm_\bp_\bt_\by\n+bool empty() const\n+Whether the factor is empty (involves zero variables).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+VectorValues hessianDiagonal() const\n+Return the diagonal of the Hessian for this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.cpp:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor in the squared-error form.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bb\n+const constBVector getb() const\n+Get a view of the r.h.s.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:297\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n+void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y)\n+const override\n+y += alpha * A'*A*x\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:649\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n+VectorValues gradientAtZero() const override\n+A'*b for Jacobian.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:701\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+JacobianFactor with constant sized blocks Provides raw memory access versions\n+of linear operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Vector operator*(const double *x) const\n+double* Matrix-vector multiply, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:172\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+void hessianDiagonal(double *d) const override\n+Raw memory access version of hessianDiagonal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n+void gradientAtZero(double *d) const override\n+Raw memory access version of gradientAtZero.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:133\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bA_\bd_\bd\n+void transposeMultiplyAdd(double alpha, const Vector &e, double *x) const\n+double* Transpose Matrix-vector multiply, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:161\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n+VectorValues gradientAtZero() const override\n+Expose base class gradientAtZero.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+RegularJacobianFactor(const TERMS &terms, const Vector &b, const SharedDiagonal\n+&model=SharedDiagonal())\n+Construct an n-ary factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n+void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y)\n+const override\n+y += alpha * A'*A*x\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+RegularJacobianFactor()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+RegularJacobianFactor(const KEYS &keys, const VerticalBlockMatrix\n+&augmentedMatrix, const SharedDiagonal &sigmas=SharedDiagonal())\n+Constructor with arbitrary number keys, and where the augmented matrix is given\n+all together instead ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n+void multiplyHessianAdd(double alpha, const double *x, double *y) const\n+double* Hessian-vector multiply, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00230_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01253_source.html", "comments": ["Files 90% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/TriangulationFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
DiscreteFactorGraph.h
\n+
TriangulationFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-\n-\n-
26#include <gtsam/base/FastSet.h>
\n-
27
\n-
28#include <boost/make_shared.hpp>
\n-
29#include <string>
\n-
30#include <utility>
\n-
31#include <vector>
\n-
32
\n-
33namespace gtsam {
\n+
18#pragma once
\n+
19
\n+\n+\n+
22#include <boost/make_shared.hpp>
\n+
23#include <boost/lexical_cast.hpp>
\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
32template<class CAMERA>
\n+
\n+\n
34
\n-
35// Forward declarations
\n-
36class DiscreteFactorGraph;
\n-
37class DiscreteConditional;
\n-
38class DiscreteBayesNet;
\n-
39class DiscreteEliminationTree;
\n-
40class DiscreteBayesTree;
\n-
41class DiscreteJunctionTree;
\n-
42
\n-
51GTSAM_EXPORT
\n-
52std::pair<DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr>
\n-
53EliminateDiscrete(const DiscreteFactorGraph& factors,
\n-
54 const Ordering& frontalKeys);
\n-
55
\n-
64GTSAM_EXPORT
\n-
65std::pair<DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr>
\n-
66EliminateForMPE(const DiscreteFactorGraph& factors,
\n-
67 const Ordering& frontalKeys);
\n-
68
\n-
\n-\n-
70{
\n-\n-\n-\n-\n-\n-\n-\n-
78
\n-
80 static std::pair<boost::shared_ptr<ConditionalType>,
\n-
81 boost::shared_ptr<FactorType> >
\n-
\n-
82 DefaultEliminate(const FactorGraphType& factors, const Ordering& keys) {
\n-
83 return EliminateDiscrete(factors, keys);
\n-
84 }
\n-
\n-
85
\n-
\n-\n-
88 const FactorGraphType& graph,
\n-
89 boost::optional<const VariableIndex&> variableIndex) {
\n-
90 return Ordering::Colamd(*variableIndex);
\n-
91 }
\n-
\n-
92};
\n-
\n-
93
\n-
\n-
99class GTSAM_EXPORT DiscreteFactorGraph
\n-
100 : public FactorGraph<DiscreteFactor>,
\n-
101 public EliminateableFactorGraph<DiscreteFactorGraph> {
\n-
102 public:
\n-\n-\n-\n-\n-
107 using shared_ptr = boost::shared_ptr<This>;
\n-
108
\n-\n-
110
\n-
111 using Indices = KeyVector;
\n-
112
\n-\n-
115
\n-
117 template <typename ITERATOR>
\n-
\n-
118 DiscreteFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
\n-
119 : Base(firstFactor, lastFactor) {}
\n+
35public:
\n+
36
\n+
38 using Camera = CAMERA;
\n+
39
\n+
40protected:
\n+
41
\n+\n+
44
\n+\n+
47
\n+
49 using Measurement = typename CAMERA::Measurement;
\n+
50
\n+
51 // Keep a copy of measurement and calibration for I/O
\n+
52 const CAMERA camera_;
\n+\n+
54
\n+
55 // verbosity handling for Cheirality Exceptions
\n+
56 const bool throwCheirality_;
\n+
57 const bool verboseCheirality_;
\n+
58
\n+
59public:
\n+
60 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n+
61
\n+
63 using shared_ptr = boost::shared_ptr<This>;
\n+
64
\n+
\n+\n+\n+
68 }
\n+
\n+
69
\n+
\n+
79 TriangulationFactor(const CAMERA& camera, const Measurement& measured,
\n+
80 const SharedNoiseModel& model, Key pointKey, bool throwCheirality = false,
\n+
81 bool verboseCheirality = false) :
\n+
82 Base(model, pointKey), camera_(camera), measured_(measured), throwCheirality_(
\n+\n+
84 if (model && model->dim() != traits<Measurement>::dimension)
\n+
85 throw std::invalid_argument(
\n+
86 "TriangulationFactor must be created with "
\n+
87 + boost::lexical_cast<std::string>((int) traits<Measurement>::dimension)
\n+
88 + "-dimensional noise model.");
\n+
89 }
\n+
\n+
90
\n+
\n+\n+
93 }
\n+
\n+
94
\n+
\n+
96 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
97 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
98 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
99 }
\n+
\n+
100
\n+
\n+
106 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
107 DefaultKeyFormatter) const override {
\n+
108 std::cout << s << "TriangulationFactor,";
\n+
109 camera_.print("camera");
\n+\n+
111 Base::print("", keyFormatter);
\n+
112 }
\n+
\n+
113
\n+
\n+
115 bool equals(const NonlinearFactor& p, double tol = 1e-9) const override {
\n+
116 const This *e = dynamic_cast<const This*>(&p);
\n+
117 return e && Base::equals(p, tol) && this->camera_.equals(e->camera_, tol)
\n+
118 && traits<Measurement>::Equals(this->measured_, e->measured_, tol);
\n+
119 }
\n
\n
120
\n-
122 template <class CONTAINER>
\n-
123 explicit DiscreteFactorGraph(const CONTAINER& factors) : Base(factors) {}
\n-
124
\n-
127 template <class DERIVED_FACTOR>
\n-\n-
129
\n-\n-
132
\n-
135
\n-
136 bool equals(const This& fg, double tol = 1e-9) const;
\n-
137
\n-
139
\n-
141 template <typename... Args>
\n-
\n-
142 void add(Args&&... args) {
\n-
143 emplace_shared<DecisionTreeFactor>(std::forward<Args>(args)...);
\n-
144 }
\n-
\n-
145
\n-
147 KeySet keys() const;
\n-
148
\n-
150 DiscreteKeys discreteKeys() const;
\n-
151
\n-
153 DecisionTreeFactor product() const;
\n-
154
\n-
159 double operator()(const DiscreteValues& values) const;
\n-
160
\n-
162 void print(
\n-
163 const std::string& s = "DiscreteFactorGraph",
\n-
164 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n-
165
\n-
172 DiscreteBayesNet sumProduct(
\n-
173 OptionalOrderingType orderingType = boost::none) const;
\n-
174
\n-
181 DiscreteBayesNet sumProduct(const Ordering& ordering) const;
\n-
182
\n-
189 DiscreteLookupDAG maxProduct(
\n-
190 OptionalOrderingType orderingType = boost::none) const;
\n-
191
\n-
198 DiscreteLookupDAG maxProduct(const Ordering& ordering) const;
\n-
199
\n-\n-
207 OptionalOrderingType orderingType = boost::none) const;
\n-
208
\n-
215 DiscreteValues optimize(const Ordering& ordering) const;
\n-
216
\n-
219
\n-
227 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
228 const DiscreteFactor::Names& names = {}) const;
\n-
229
\n-
237 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
238 const DiscreteFactor::Names& names = {}) const;
\n-
239
\n-
243
\n-
244 using Base::error; // Expose error(const HybridValues&) method..
\n-
245
\n-
247}; // \\ DiscreteFactorGraph
\n-
\n-
248
\n-
250template <>
\n-
251struct traits<DiscreteFactorGraph> : public Testable<DiscreteFactorGraph> {};
\n-
252
\n-
253} // namespace gtsam
\n-
A thin wrapper around std::set that uses boost's fast_pool_allocator.
\n-\n-\n-
Factor Graph Base Class.
\n-
Variable elimination algorithms for factor graphs.
\n-
Variable ordering for the elimination algorithm.
\n-
std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > EliminateDiscrete(const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
Main elimination function for DiscreteFactorGraph.
Definition DiscreteFactorGraph.cpp:200
\n-
std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr > EliminateForMPE(const DiscreteFactorGraph &factors, const Ordering &frontalKeys)
Alternate elimination function for that creates non-normalized lookup tables.
Definition DiscreteFactorGraph.cpp:116
\n+
\n+
122 Vector evaluateError(const Point3& point, boost::optional<Matrix&> H2 =
\n+
123 boost::none) const override {
\n+
124 try {
\n+
125 return traits<Measurement>::Local(measured_, camera_.project2(point, boost::none, H2));
\n+
126 } catch (CheiralityException& e) {
\n+
127 if (H2)
\n+
128 *H2 = Matrix::Zero(traits<Measurement>::dimension, 3);
\n+\n+
130 std::cout << e.what() << ": Landmark "
\n+
131 << DefaultKeyFormatter(this->key()) << " moved behind camera"
\n+
132 << std::endl;
\n+\n+
134 throw e;
\n+
135 return camera_.defaultErrorWhenTriangulatingBehindCamera();
\n+
136 }
\n+
137 }
\n+
\n+
138
\n+\n+
141 mutable Matrix A;
\n+
142 mutable Vector b;
\n+
143
\n+
\n+
149 boost::shared_ptr<GaussianFactor> linearize(const Values& x) const override {
\n+
150 // Only linearize if the factor is active
\n+
151 if (!this->active(x))
\n+
152 return boost::shared_ptr<JacobianFactor>();
\n+
153
\n+
154 // Allocate memory for Jacobian factor, do only once
\n+
155 if (Ab.rows() == 0) {
\n+
156 std::vector<size_t> dimensions(1, 3);
\n+\n+\n+\n+
160 }
\n+
161
\n+
162 // Would be even better if we could pass blocks to project
\n+
163 const Point3& point = x.at<Point3>(key());
\n+
164 b = traits<Measurement>::Local(camera_.project2(point, boost::none, A), measured_);
\n+
165 if (noiseModel_)
\n+
166 this->noiseModel_->WhitenSystem(A, b);
\n+
167
\n+
168 Ab(0) = A;
\n+
169 Ab(1) = b;
\n+
170
\n+
171 return boost::make_shared<JacobianFactor>(this->keys_, Ab);
\n+
172 }
\n+
\n+
173
\n+
\n+
175 const Measurement& measured() const {
\n+
176 return measured_;
\n+
177 }
\n+
\n+
178
\n+
\n+
180 inline bool verboseCheirality() const {
\n+
181 return verboseCheirality_;
\n+
182 }
\n+
\n+
183
\n+
\n+
185 inline bool throwCheirality() const {
\n+
186 return throwCheirality_;
\n+
187 }
\n+
\n+
188
\n+
189private:
\n+
190
\n+\n+
193 template<class ARCHIVE>
\n+
194 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
195 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
196 ar & BOOST_SERIALIZATION_NVP(camera_);
\n+
197 ar & BOOST_SERIALIZATION_NVP(measured_);
\n+
198 ar & BOOST_SERIALIZATION_NVP(throwCheirality_);
\n+
199 ar & BOOST_SERIALIZATION_NVP(verboseCheirality_);
\n+
200 }
\n+
201};
\n+
\n+
202} // \\ namespace gtsam
\n+
203
\n+
Calibrated camera for which only pose is unknown.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of markdown.
Definition DiscreteValues.cpp:129
\n-
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A discrete probabilistic factor.
Definition DecisionTreeFactor.h:45
\n-
A Bayes net made from discrete conditional distributions.
Definition DiscreteBayesNet.h:38
\n-
A Bayes tree representing a Discrete density.
Definition DiscreteBayesTree.h:75
\n-
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n-
Elimination tree for discrete factors.
Definition DiscreteEliminationTree.h:33
\n-
Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor.
Definition DiscreteFactor.h:38
\n-
DiscreteValues::Names Names
Translation table from values to strings.
Definition DiscreteFactor.h:106
\n-
DiscreteFactorGraph FactorGraphType
Type of the factor graph (e.g. DiscreteFactorGraph)
Definition DiscreteFactorGraph.h:72
\n-
DiscreteJunctionTree JunctionTreeType
Type of Junction tree.
Definition DiscreteFactorGraph.h:77
\n-
DiscreteFactor FactorType
Type of factors in factor graph.
Definition DiscreteFactorGraph.h:71
\n-
static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering &keys)
The default dense elimination function.
Definition DiscreteFactorGraph.h:82
\n-
DiscreteBayesTree BayesTreeType
Type of Bayes tree.
Definition DiscreteFactorGraph.h:76
\n-
DiscreteBayesNet BayesNetType
Type of Bayes net from sequential elimination.
Definition DiscreteFactorGraph.h:74
\n-
DiscreteConditional ConditionalType
Type of conditionals from elimination.
Definition DiscreteFactorGraph.h:73
\n-
static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::optional< const VariableIndex & > variableIndex)
The default ordering generation function.
Definition DiscreteFactorGraph.h:87
\n-
DiscreteEliminationTree EliminationTreeType
Type of elimination tree.
Definition DiscreteFactorGraph.h:75
\n-
A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.
Definition DiscreteFactorGraph.h:101
\n-
DiscreteFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects)
Definition DiscreteFactorGraph.h:123
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to This
Definition DiscreteFactorGraph.h:107
\n-
DiscreteFactorGraph()
\u200dmap from keys to values
Definition DiscreteFactorGraph.h:114
\n-
DiscreteFactorGraph(const FactorGraph< DERIVED_FACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition DiscreteFactorGraph.h:128
\n-
DiscreteFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Construct from iterator over factors.
Definition DiscreteFactorGraph.h:118
\n-
virtual ~DiscreteFactorGraph()
Destructor.
Definition DiscreteFactorGraph.h:131
\n-
EliminateableFactorGraph< This > BaseEliminateable
for elimination
Definition DiscreteFactorGraph.h:106
\n-
void add(Args &&... args)
Add a decision-tree factor.
Definition DiscreteFactorGraph.h:142
\n-
An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition DiscreteJunctionTree.h:52
\n-
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n-
A DAG made from lookup tables, as defined above.
Definition DiscreteLookupDAG.h:77
\n-
A map from keys to values.
Definition DiscreteValues.h:34
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n-
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:57
\n-
Definition Ordering.h:34
\n-
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:95
\n+
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n+
DenseIndex rows() const
Row size.
Definition VerticalBlockMatrix.h:115
\n+
Definition CalibratedCamera.h:32
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n+
Non-linear factor for a constraint derived from a 2D measurement.
Definition TriangulationFactor.h:33
\n+
VerticalBlockMatrix Ab
thread-safe (?) scratch memory for linearize
Definition TriangulationFactor.h:140
\n+
const bool throwCheirality_
If true, rethrows Cheirality exceptions (default: false)
Definition TriangulationFactor.h:56
\n+
bool throwCheirality() const
return flag for throwing cheirality exceptions
Definition TriangulationFactor.h:185
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition TriangulationFactor.h:106
\n+
Vector evaluateError(const Point3 &point, boost::optional< Matrix & > H2=boost::none) const override
Evaluate error h(x)-z and optionally derivatives.
Definition TriangulationFactor.h:122
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition TriangulationFactor.h:96
\n+
boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override
Linearize to a JacobianFactor, does not support constrained noise model ! Hence .
Definition TriangulationFactor.h:149
\n+
TriangulationFactor(const CAMERA &camera, const Measurement &measured, const SharedNoiseModel &model, Key pointKey, bool throwCheirality=false, bool verboseCheirality=false)
Constructor with exception-handling flags.
Definition TriangulationFactor.h:79
\n+
typename CAMERA::Measurement Measurement
shorthand for measurement type, e.g. Point2 or StereoPoint2
Definition TriangulationFactor.h:49
\n+
const Measurement & measured() const
return the measurement
Definition TriangulationFactor.h:175
\n+
bool verboseCheirality() const
return verbosity
Definition TriangulationFactor.h:180
\n+
CAMERA Camera
CAMERA type.
Definition TriangulationFactor.h:38
\n+
bool equals(const NonlinearFactor &p, double tol=1e-9) const override
equals
Definition TriangulationFactor.h:115
\n+
~TriangulationFactor() override
Virtual destructor.
Definition TriangulationFactor.h:92
\n+
const bool verboseCheirality_
If true, prints text for Cheirality exceptions (default: false)
Definition TriangulationFactor.h:57
\n+
friend class boost::serialization::access
Serialization function.
Definition TriangulationFactor.h:192
\n+
TriangulationFactor()
Default constructor.
Definition TriangulationFactor.h:66
\n+
TriangulationFactor< CAMERA > This
shorthand for this class
Definition TriangulationFactor.h:46
\n+
const Measurement measured_
2D measurement
Definition TriangulationFactor.h:53
\n+
boost::shared_ptr< This > shared_ptr
shorthand for a smart pointer to a factor
Definition TriangulationFactor.h:63
\n+
const CAMERA camera_
CAMERA in which this landmark was seen.
Definition TriangulationFactor.h:52
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,352 +1,338 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteFactorGraph.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+TriangulationFactor.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh>\n-27\n-28#include \n-29#include \n-30#include \n-31#include \n-32\n-33namespace _\bg_\bt_\bs_\ba_\bm {\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n+22#include \n+23#include \n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+32template\n+_\b3_\b3class _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n 34\n-35// Forward declarations\n-36class DiscreteFactorGraph;\n-37class DiscreteConditional;\n-38class DiscreteBayesNet;\n-39class DiscreteEliminationTree;\n-40class DiscreteBayesTree;\n-41class DiscreteJunctionTree;\n-42\n-51GTSAM_EXPORT\n-52std::pair\n-53_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be(const DiscreteFactorGraph& factors,\n-54 const Ordering& frontalKeys);\n-55\n-64GTSAM_EXPORT\n-65std::pair\n-66_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bF_\bo_\br_\bM_\bP_\bE(const DiscreteFactorGraph& factors,\n-67 const Ordering& frontalKeys);\n-68\n-_\b6_\b9template<> struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh>\n-70{\n-_\b7_\b1 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n-_\b7_\b2 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n-_\b7_\b3 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-_\b7_\b4 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n-_\b7_\b5 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-_\b7_\b6 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-_\b7_\b7 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-78\n-80 static std::pair,\n-81 boost::shared_ptr >\n-_\b8_\b2 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) {\n-83 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be(factors, keys);\n-84 }\n-85\n-_\b8_\b7 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc(\n-88 const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& graph,\n-89 boost::optional variableIndex) {\n-90 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd(*variableIndex);\n-91 }\n-92};\n-93\n-_\b9_\b9class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-100 : public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh,\n-101 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n-102 public:\n-_\b1_\b0_\b3 using _\bT_\bh_\bi_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n-_\b1_\b0_\b4 using _\bB_\ba_\bs_\be = _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b>;\n-_\b1_\b0_\b5 using _\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be =\n-106 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bT_\bh_\bi_\bs_\b>;\n-_\b1_\b0_\b7 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n-108\n-_\b1_\b0_\b9 using _\bV_\ba_\bl_\bu_\be_\bs = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs;\n-110\n-111 using Indices = _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br;\n-112\n-_\b1_\b1_\b4 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n-115\n-117 template \n-_\b1_\b1_\b8 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(ITERATOR firstFactor, ITERATOR lastFactor)\n-119 : _\bB_\ba_\bs_\be(firstFactor, lastFactor) {}\n+35public:\n+36\n+_\b3_\b8 using _\bC_\ba_\bm_\be_\br_\ba = CAMERA;\n+39\n+40protected:\n+41\n+_\b4_\b3 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bi_\bn_\bt_\b3_\b>;\n+44\n+_\b4_\b6 using _\bT_\bh_\bi_\bs = _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>;\n+47\n+_\b4_\b9 using _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt = typename CAMERA::Measurement;\n+50\n+51 // Keep a copy of measurement and calibration for I/O\n+_\b5_\b2 const CAMERA _\bc_\ba_\bm_\be_\br_\ba_\b_;\n+_\b5_\b3 const _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+54\n+55 // verbosity handling for Cheirality Exceptions\n+_\b5_\b6 const bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n+_\b5_\b7 const bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n+58\n+59public:\n+60 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n+61\n+_\b6_\b3 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n+64\n+_\b6_\b6 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() :\n+67 _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(false) {\n+68 }\n+69\n+_\b7_\b9 _\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const CAMERA& camera, const _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd,\n+80 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model, _\bK_\be_\by pointKey, bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by = false,\n+81 bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by = false) :\n+82 _\bB_\ba_\bs_\be(model, pointKey), _\bc_\ba_\bm_\be_\br_\ba_\b_(camera), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd),\n+_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(\n+83 _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by), _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by) {\n+84 if (model && model->dim() != _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn)\n+85 throw std::invalid_argument(\n+86 \"TriangulationFactor must be created with \"\n+87 + boost::lexical_cast((int) _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn)\n+88 + \"-dimensional noise model.\");\n+89 }\n+90\n+_\b9_\b2 _\b~_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {\n+93 }\n+94\n+_\b9_\b6 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+97 return boost::static_pointer_cast(\n+98 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+99 }\n+100\n+_\b1_\b0_\b6 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n+107 DefaultKeyFormatter) const override {\n+108 std::cout << s << \"TriangulationFactor,\";\n+109 _\bc_\ba_\bm_\be_\br_\ba_\b_.print(\"camera\");\n+110 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, \"z\");\n+111 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n+112 }\n+113\n+_\b1_\b1_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& p, double tol = 1e-9) const override {\n+116 const _\bT_\bh_\bi_\bs *e = dynamic_cast(&p);\n+117 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(p, tol) && this->camera_.equals(e->camera_, tol)\n+118 && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_, e->measured_, tol);\n+119 }\n 120\n-122 template \n-_\b1_\b2_\b3 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const CONTAINER& factors) : _\bB_\ba_\bs_\be(factors) {}\n-124\n-127 template \n-_\b1_\b2_\b8 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\b__\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph) : _\bB_\ba_\bs_\be(graph)\n-{}\n-129\n-_\b1_\b3_\b1 virtual _\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n-132\n-135\n-136 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& fg, double tol = 1e-9) const;\n-137\n-139\n-141 template \n-_\b1_\b4_\b2 void _\ba_\bd_\bd(Args&&... args) {\n-143 emplace_shared(std::forward(args)...);\n-144 }\n-145\n-147 _\bK_\be_\by_\bS_\be_\bt keys() const;\n-148\n-150 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs discreteKeys() const;\n-151\n-153 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br product() const;\n-154\n-159 double operator()(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n-160\n-162 void _\bp_\br_\bi_\bn_\bt(\n-163 const std::string& s = \"DiscreteFactorGraph\",\n-164 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n-165\n-172 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt sumProduct(\n-173 OptionalOrderingType orderingType = boost::none) const;\n-174\n-181 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt sumProduct(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n-182\n-189 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG maxProduct(\n-190 OptionalOrderingType orderingType = boost::none) const;\n-191\n-198 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG maxProduct(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n-199\n-206 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(\n-207 OptionalOrderingType orderingType = boost::none) const;\n-208\n-215 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n-216\n-219\n-227 std::string _\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-DefaultKeyFormatter,\n-228 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\ba_\bm_\be_\bs& names = {}) const;\n-229\n-237 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,\n-238 const DiscreteFactor::Names& names = {}) const;\n-239\n-243\n-244 using Base::error; // Expose error(const HybridValues&) method..\n-245\n-247}; // \\ DiscreteFactorGraph\n-248\n-250template <>\n-_\b2_\b5_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-{};\n-252\n-253} // namespace gtsam\n-_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n-A thin wrapper around std::set that uses boost's fast_pool_allocator.\n-_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG_\b._\bh\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Variable elimination algorithms for factor graphs.\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bD_\bi_\bs_\bc_\br_\be_\bt_\be\n-std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr >\n-EliminateDiscrete(const DiscreteFactorGraph &factors, const Ordering\n-&frontalKeys)\n-Main elimination function for DiscreteFactorGraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.cpp:200\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bF_\bo_\br_\bM_\bP_\bE\n-std::pair< DiscreteConditional::shared_ptr, DecisionTreeFactor::shared_ptr >\n-EliminateForMPE(const DiscreteFactorGraph &factors, const Ordering\n-&frontalKeys)\n-Alternate elimination function for that creates non-normalized lookup tables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.cpp:116\n+_\b1_\b2_\b2 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b3& point, boost::optional H2 =\n+123 boost::none) const override {\n+124 try {\n+125 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, _\bc_\ba_\bm_\be_\br_\ba_\b_.project2(point,\n+boost::none, H2));\n+126 } catch (_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn& e) {\n+127 if (H2)\n+128 *H2 = Matrix::Zero(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, 3);\n+129 if (_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_)\n+130 std::cout << e.what() << \": Landmark \"\n+131 << DefaultKeyFormatter(this->_\bk_\be_\by()) << \" moved behind camera\"\n+132 << std::endl;\n+133 if (_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_)\n+134 throw e;\n+135 return _\bc_\ba_\bm_\be_\br_\ba_\b_.defaultErrorWhenTriangulatingBehindCamera();\n+136 }\n+137 }\n+138\n+_\b1_\b4_\b0 mutable _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bA_\bb;\n+141 mutable Matrix A;\n+142 mutable Vector b;\n+143\n+_\b1_\b4_\b9 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& x) const override\n+{\n+150 // Only linearize if the factor is active\n+151 if (!this->_\ba_\bc_\bt_\bi_\bv_\be(x))\n+152 return boost::shared_ptr();\n+153\n+154 // Allocate memory for Jacobian factor, do only once\n+155 if (_\bA_\bb._\br_\bo_\bw_\bs() == 0) {\n+156 std::vector dimensions(1, 3);\n+157 _\bA_\bb = _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(dimensions, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, true);\n+158 A.resize(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn,3);\n+159 b.resize(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn);\n+160 }\n+161\n+162 // Would be even better if we could pass blocks to project\n+163 const _\bP_\bo_\bi_\bn_\bt_\b3& point = x._\ba_\bt<_\bP_\bo_\bi_\bn_\bt_\b3>(_\bk_\be_\by());\n+164 b = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(_\bc_\ba_\bm_\be_\br_\ba_\b_.project2(point, boost::none, A),\n+_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+165 if (noiseModel_)\n+166 this->noiseModel_->WhitenSystem(A, b);\n+167\n+168 _\bA_\bb(0) = A;\n+169 _\bA_\bb(1) = b;\n+170\n+171 return boost::make_shared(this->_\bk_\be_\by_\bs_\b_, Ab);\n+172 }\n+173\n+_\b1_\b7_\b5 const _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n+176 return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+177 }\n+178\n+_\b1_\b8_\b0 inline bool _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const {\n+181 return _\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n+182 }\n+183\n+_\b1_\b8_\b5 inline bool _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by() const {\n+186 return _\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_;\n+187 }\n+188\n+189private:\n+190\n+_\b1_\b9_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+193 template\n+194 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+195 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+196 ar & BOOST_SERIALIZATION_NVP(_\bc_\ba_\bm_\be_\br_\ba_\b_);\n+197 ar & BOOST_SERIALIZATION_NVP(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+198 ar & BOOST_SERIALIZATION_NVP(_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_);\n+199 ar & BOOST_SERIALIZATION_NVP(_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_);\n+200 }\n+201};\n+202} // \\ namespace gtsam\n+203\n+_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+Calibrated camera for which only pose is unknown.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\br_\bk_\bd_\bo_\bw_\bn\n-string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n-const DiscreteValues::Names &names)\n-Free version of markdown.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n-Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n-landmarkKey)\n-Optimize for triangulation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br\n-A discrete probabilistic factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTreeFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-A Bayes net made from discrete conditional distributions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-A Bayes tree representing a Discrete density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesTree.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Discrete Conditional Density Derives from DecisionTreeFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-Elimination tree for discrete factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Base class for discrete probabilistic factors The most general one is the\n-derived DecisionTreeFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\ba_\bm_\be_\bs\n-DiscreteValues::Names Names\n-Translation table from values to strings.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactor.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n-DiscreteFactorGraph FactorGraphType\n-Type of the factor graph (e.g. DiscreteFactorGraph)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-DiscreteJunctionTree JunctionTreeType\n-Type of Junction tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n-DiscreteFactor FactorType\n-Type of factors in factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr<\n-FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering\n-&keys)\n-The default dense elimination function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-DiscreteBayesTree BayesTreeType\n-Type of Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n-DiscreteBayesNet BayesNetType\n-Type of Bayes net from sequential elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n-DiscreteConditional ConditionalType\n-Type of conditionals from elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc\n-static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::\n-optional< const VariableIndex & > variableIndex)\n-The default ordering generation function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-DiscreteEliminationTree EliminationTreeType\n-Type of elimination tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-DiscreteFactorGraph(const CONTAINER &factors)\n-Construct from container of factors (shared_ptr or plain objects)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of vertical blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n+DenseIndex rows() const\n+Row size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n+virtual bool active(const Values &) const\n+Checks whether a factor should be used based on a set of values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bP_\bo_\bi_\bn_\bt_\b3_\b _\b>_\b:_\b:_\bk_\be_\by\n+Key key() const\n+Returns a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+const ValueType at(Key j) const\n+Retrieve a variable by key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+Non-linear factor for a constraint derived from a 2D measurement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bA_\bb\n+VerticalBlockMatrix Ab\n+thread-safe (?) scratch memory for linearize\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_\n+const bool throwCheirality_\n+If true, rethrows Cheirality exceptions (default: false)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\bh_\br_\bo_\bw_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n+bool throwCheirality() const\n+return flag for throwing cheirality exceptions\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Point3 &point, boost::optional< Matrix & >\n+H2=boost::none) const override\n+Evaluate error h(x)-z and optionally derivatives.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:122\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override\n+Linearize to a JacobianFactor, does not support constrained noise model ! Hence\n+.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:149\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+TriangulationFactor(const CAMERA &camera, const Measurement &measured, const\n+SharedNoiseModel &model, Key pointKey, bool throwCheirality=false, bool\n+verboseCheirality=false)\n+Constructor with exception-handling flags.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+typename CAMERA::Measurement Measurement\n+shorthand for measurement type, e.g. Point2 or StereoPoint2\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const Measurement & measured() const\n+return the measurement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:175\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by\n+bool verboseCheirality() const\n+return verbosity\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba\n+CAMERA Camera\n+CAMERA type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &p, double tol=1e-9) const override\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+~TriangulationFactor() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\be_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\b_\n+const bool verboseCheirality_\n+If true, prints text for Cheirality exceptions (default: false)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+TriangulationFactor()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+TriangulationFactor< CAMERA > This\n+shorthand for this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n+const Measurement measured_\n+2D measurement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n boost::shared_ptr< This > shared_ptr\n-shared_ptr to This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-DiscreteFactorGraph()\n-\u00e2\u0080\u008dmap from keys to values\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-DiscreteFactorGraph(const FactorGraph< DERIVED_FACTOR > &graph)\n-Implicit copy/downcast constructor to override explicit template container\n-constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-DiscreteFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)\n-Construct from iterator over factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-virtual ~DiscreteFactorGraph()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be\n-EliminateableFactorGraph< This > BaseEliminateable\n-for elimination\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-void add(Args &&... args)\n-Add a decision-tree factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:142\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-An EliminatableClusterTree, i.e., a set of variable clusters with factors,\n-arranged in a tree,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteJunctionTree.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys is a set of keys that can be assembled using the & operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG\n-A DAG made from lookup tables, as defined above.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteLookupDAG.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-A map from keys to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n-Traits class for eliminateable factor graphs, specifies the types that result\n-from elimination,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-EliminateableFactorGraph is a base class for factor graphs that contains\n-elimination algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd\n-static Ordering Colamd(const FACTOR_GRAPH &graph)\n-Compute a fill-reducing ordering using COLAMD from a factor graph (see details\n-for note on performanc...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:95\n+shorthand for a smart pointer to a factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\b_\n+const CAMERA camera_\n+CAMERA in which this landmark was seen.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn TriangulationFactor.h:52\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bs_\bl_\ba_\bm\n+ * T\bTr\bri\bia\ban\bng\bgu\bul\bla\bat\bti\bio\bon\bnF\bFa\bac\bct\bto\bor\br.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00239.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00284.html", "comments": ["Files 80% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose2.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
DecisionTree.h File Reference
\n+
Pose2.h File Reference
\n
\n
\n \n-

Decision Tree for use in DiscreteFactors. \n+

2D Pose \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n+\n \n-\n+\n+\n+\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::DecisionTree< L, Y >
 a decision tree is a function from assignments to values. More...
class  gtsam::Pose2
 A 2D pose (Point2,Rot2) More...
 
struct  gtsam::DecisionTree< L, Y >::Node
 ---------------------— Node base class ------------------------— More...
struct  gtsam::Pose2::ChartAtOrigin
 
struct  gtsam::traits< DecisionTree< L, Y > >
struct  gtsam::traits< Pose2 >
 
struct  gtsam::traits< const Pose2 >
 
struct  gtsam::Bearing< Pose2, T >
 
struct  gtsam::Range< Pose2, T >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+

\n+Typedefs

\n+using gtsam::Pose2Pair = std::pair< Pose2, Pose2 >
 
\n+using gtsam::Pose2Pairs = std::vector< Pose2Pair >
 
\n \n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n

\n Functions

template<typename L , typename Y >
DecisionTree< L, Y > gtsam::apply (const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::Unary &op)
 free versions of apply
 
\n-template<typename L , typename Y >
DecisionTree< L, Y > gtsam::apply (const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::UnaryAssignment &op)
 Apply unary operator op with Assignment to DecisionTree f.
 
\n-template<typename L , typename Y >
DecisionTree< L, Y > gtsam::apply (const DecisionTree< L, Y > &f, const DecisionTree< L, Y > &g, const typename DecisionTree< L, Y >::Binary &op)
 Apply binary operator op to DecisionTree f.
 
template<typename L , typename T1 , typename T2 >
std::pair< DecisionTree< L, T1 >, DecisionTree< L, T2 > > gtsam::unzip (const DecisionTree< L, std::pair< T1, T2 > > &input)
 unzip a DecisionTree with std::pair values.
 
\n+template<>
Matrix gtsam::wedge< Pose2 > (const Vector &xi)
 specialization for pose2 wedge function (generic template in Lie.h)
 
\n

Detailed Description

\n-

Decision Tree for use in DiscreteFactors.

\n-
Author
Frank Dellaert
\n+

2D Pose

\n+
Author
: Frank Dellaert
\n
\n-Can Erdogan
\n-
Date
Jan 30, 2012
\n+: Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,59 +1,46 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-DecisionTree.h File Reference\n-Decision Tree for use in DiscreteFactors. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Pose2.h File Reference\n+2D Pose _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b,_\b _\bY_\b _\b>\n-\u00a0 a decision tree is a function from assignments to values. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n+\u00a0 A 2D pose (Point2,_\bR_\bo_\bt_\b2) _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b,_\b _\bY_\b _\b>_\b:_\b:_\bN_\bo_\bd_\be\n-\u00a0 ---------------------\u2014 _\bN_\bo_\bd_\be base class ------------------------\n- \u2014 _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b,_\b _\bY_\b _\b>_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bo_\bs_\be_\b2_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bP_\bo_\bs_\be_\b2_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\b _\bP_\bo_\bs_\be_\b2_\b,_\b _\bT_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bP_\bo_\bs_\be_\b2_\b,_\b _\bT_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\bos\bse\be2\b2P\bPa\bai\bir\br = std::pair< _\bP_\bo_\bs_\be_\b2, _\bP_\bo_\bs_\be_\b2 >\n+\u00a0\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:P\bPo\bos\bse\be2\b2P\bPa\bai\bir\brs\bs = std::vector< Pose2Pair >\n+\u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n- _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bp_\bp_\bl_\by (const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y > &f,\n- const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >::Unary\n- &op)\n-\u00a0 free versions of apply\n-\u00a0\n-template\n- _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bap\bpp\bpl\bly\by (const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y > &f,\n- const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >::\n- UnaryAssignment &op)\n-\u00a0 Apply unary operator op with _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt to\n- _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be f.\n-\u00a0\n-template\n- _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bap\bpp\bpl\bly\by (const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y > &f,\n- const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y > &g, const typename\n- _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, Y >::Binary &op)\n-\u00a0 Apply binary operator op to _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be f.\n-\u00a0\n-template\n-std::pair< _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, T1 >, _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bz_\bi_\bp (const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, std::\n- _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be< L, T2 > >\u00a0 pair< T1, T2 > > &input)\n-\u00a0 unzip a _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be with std::pair values.\n+template<>\n+ Matrix\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:w\bwe\bed\bdg\bge\be<\b< P\bPo\bos\bse\be2\b2 >\b> (const Vector &xi)\n+\u00a0 specialization for pose2 wedge function (generic template in _\bL_\bi_\be_\b._\bh)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Decision Tree for use in DiscreteFactors.\n+2D Pose\n Author\n- Frank Dellaert\n- Can Erdogan\n- Date\n- Jan 30, 2012\n+ : Frank Dellaert\n+ : Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bP_\bo_\bs_\be_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00239_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00389_source.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DecisionTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
DecisionTree.h
\n+
SOn.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <gtsam/base/Testable.h>
\n-
23#include <gtsam/base/types.h>
\n-\n-
25
\n-
26#include <boost/serialization/nvp.hpp>
\n-
27#include <boost/shared_ptr.hpp>
\n-
28#include <functional>
\n-
29#include <iostream>
\n-
30#include <map>
\n-
31#include <set>
\n-
32#include <sstream>
\n-
33#include <string>
\n-
34#include <utility>
\n-
35#include <vector>
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/base/Lie.h>
\n+
22#include <gtsam/base/Manifold.h>
\n+\n+
24#include <gtsam/dllexport.h>
\n+
25#include <Eigen/Core>
\n+
26
\n+
27#include <boost/serialization/nvp.hpp>
\n+
28
\n+
29#include <iostream> // TODO(frank): how to avoid?
\n+
30#include <string>
\n+
31#include <type_traits>
\n+
32#include <vector>
\n+
33#include <random>
\n+
34
\n+
35namespace gtsam {
\n
36
\n-
37namespace gtsam {
\n-
38
\n-
60 template<typename L, typename Y>
\n-
\n-\n-
62 protected:
\n-
\n-
64 static bool DefaultCompare(const Y& a, const Y& b) {
\n-
65 return a == b;
\n-
66 }
\n-
\n-
67
\n-
68 public:
\n-
69 using LabelFormatter = std::function<std::string(L)>;
\n-
70 using ValueFormatter = std::function<std::string(Y)>;
\n-
71 using CompareFunc = std::function<bool(const Y&, const Y&)>;
\n+
37namespace internal {
\n+
\n+
39constexpr int DimensionSO(int N) {
\n+
40 return (N < 0) ? Eigen::Dynamic : N * (N - 1) / 2;
\n+
41}
\n+
\n+
42
\n+
43// Calculate N^2 at compile time, or return Dynamic if so
\n+
44constexpr int NSquaredSO(int N) { return (N < 0) ? Eigen::Dynamic : N * N; }
\n+
45} // namespace internal
\n+
46
\n+
51template <int N>
\n+
\n+
52class SO : public LieGroup<SO<N>, internal::DimensionSO(N)> {
\n+
53 public:
\n+
54 enum { dimension = internal::DimensionSO(N) };
\n+
55 using MatrixNN = Eigen::Matrix<double, N, N>;
\n+
56 using VectorN2 = Eigen::Matrix<double, internal::NSquaredSO(N), 1>;
\n+
57 using MatrixDD = Eigen::Matrix<double, dimension, dimension>;
\n+
58
\n+\n+
60
\n+
61 protected:
\n+
62 MatrixNN matrix_;
\n+
63
\n+
64 // enable_if_t aliases, used to specialize constructors/methods, see
\n+
65 // https://www.fluentcpp.com/2018/05/18/make-sfinae-pretty-2-hidden-beauty-sfinae/
\n+
66 template <int N_>
\n+
67 using IsDynamic = typename std::enable_if<N_ == Eigen::Dynamic, void>::type;
\n+
68 template <int N_>
\n+
69 using IsFixed = typename std::enable_if<N_ >= 2, void>::type;
\n+
70 template <int N_>
\n+
71 using IsSO3 = typename std::enable_if<N_ == 3, void>::type;
\n
72
\n-
74 using Unary = std::function<Y(const Y&)>;
\n-
75 using UnaryAssignment = std::function<Y(const Assignment<L>&, const Y&)>;
\n-
76 using Binary = std::function<Y(const Y&, const Y&)>;
\n-
77
\n-
79 using LabelC = std::pair<L, size_t>;
\n+
73 public:
\n+
76
\n+
78 template <int N_ = N, typename = IsFixed<N_>>
\n+
79 SO() : matrix_(MatrixNN::Identity()) {}
\n
80
\n-
82 struct Leaf;
\n-
83 struct Choice;
\n-
84
\n-
\n-
86 struct Node {
\n-
87 using Ptr = boost::shared_ptr<const Node>;
\n+
82 template <int N_ = N, typename = IsDynamic<N_>>
\n+
\n+
83 explicit SO(size_t n = 0) {
\n+
84 // We allow for n=0 as the default constructor, needed for serialization,
\n+
85 // wrappers etc.
\n+
86 matrix_ = Eigen::MatrixXd::Identity(n, n);
\n+
87 }
\n+
\n
88
\n-
89#ifdef DT_DEBUG_MEMORY
\n-
90 static int nrNodes;
\n-
91#endif
\n+
90 template <typename Derived>
\n+
91 explicit SO(const Eigen::MatrixBase<Derived>& R) : matrix_(R.eval()) {}
\n
92
\n-
93 // Constructor
\n-
94 Node() {
\n-
95#ifdef DT_DEBUG_MEMORY
\n-
96 std::cout << ++nrNodes << " constructed " << id() << std::endl;
\n-
97 std::cout.flush();
\n-
98#endif
\n-
99 }
\n-
100
\n-
101 // Destructor
\n-
102 virtual ~Node() {
\n-
103#ifdef DT_DEBUG_MEMORY
\n-
104 std::cout << --nrNodes << " destructed " << id() << std::endl;
\n-
105 std::cout.flush();
\n-
106#endif
\n-
107 }
\n+
94 template <typename Derived>
\n+
\n+
95 static SO FromMatrix(const Eigen::MatrixBase<Derived>& R) {
\n+
96 return SO(R);
\n+
97 }
\n+
\n+
98
\n+
100 template <typename Derived, int N_ = N, typename = IsDynamic<N_>>
\n+
\n+
101 static SO Lift(size_t n, const Eigen::MatrixBase<Derived> &R) {
\n+
102 Matrix Q = Matrix::Identity(n, n);
\n+
103 const int p = R.rows();
\n+
104 assert(p >= 0 && p <= static_cast<int>(n) && R.cols() == p);
\n+
105 Q.topLeftCorner(p, p) = R;
\n+
106 return SO(Q);
\n+
107 }
\n+
\n
108
\n-
109 // Unique ID for dot files
\n-
110 const void* id() const { return this; }
\n-
111
\n-
112 // everything else is virtual, no documentation here as internal
\n-
113 virtual void print(const std::string& s,
\n-
114 const LabelFormatter& labelFormatter,
\n-
115 const ValueFormatter& valueFormatter) const = 0;
\n-
116 virtual void dot(std::ostream& os, const LabelFormatter& labelFormatter,
\n-
117 const ValueFormatter& valueFormatter,
\n-
118 bool showZero) const = 0;
\n-
119 virtual bool sameLeaf(const Leaf& q) const = 0;
\n-
120 virtual bool sameLeaf(const Node& q) const = 0;
\n-
121 virtual bool equals(const Node& other, const CompareFunc& compare =
\n-
122 &DefaultCompare) const = 0;
\n-
123 virtual const Y& operator()(const Assignment<L>& x) const = 0;
\n-
124 virtual Ptr apply(const Unary& op) const = 0;
\n-
125 virtual Ptr apply(const UnaryAssignment& op,
\n-
126 const Assignment<L>& assignment) const = 0;
\n-
127 virtual Ptr apply_f_op_g(const Node&, const Binary&) const = 0;
\n-
128 virtual Ptr apply_g_op_fL(const Leaf&, const Binary&) const = 0;
\n-
129 virtual Ptr apply_g_op_fC(const Choice&, const Binary&) const = 0;
\n-
130 virtual Ptr choose(const L& label, size_t index) const = 0;
\n-
131 virtual bool isLeaf() const = 0;
\n-
132
\n-
133 private:
\n-\n-
136 template <class ARCHIVE>
\n-
137 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {}
\n-
138 };
\n-
\n-
141 public:
\n-
143 using NodePtr = typename Node::Ptr;
\n-
144
\n-\n-
147
\n-
148 protected:
\n-
153 template<typename It, typename ValueIt>
\n-
154 NodePtr create(It begin, It end, ValueIt beginY, ValueIt endY) const;
\n-
155
\n-
166 template <typename M, typename X>
\n-\n-
168 std::function<L(const M&)> L_of_M,
\n-
169 std::function<Y(const X&)> Y_of_X) const;
\n-
170
\n-
171 public:
\n-
174
\n-
176 DecisionTree();
\n-
177
\n-
179 explicit DecisionTree(const Y& y);
\n-
180
\n-
188 DecisionTree(const L& label, const Y& y1, const Y& y2);
\n-
189
\n-
191 DecisionTree(const LabelC& label, const Y& y1, const Y& y2);
\n-
192
\n-
194 DecisionTree(const std::vector<LabelC>& labelCs, const std::vector<Y>& ys);
\n-
195
\n-
197 DecisionTree(const std::vector<LabelC>& labelCs, const std::string& table);
\n+
110 template <int M, int N_ = N, typename = IsDynamic<N_>>
\n+
111 explicit SO(const SO<M>& R) : matrix_(R.matrix()) {}
\n+
112
\n+
114 template <int N_ = N, typename = IsSO3<N_>>
\n+
115 explicit SO(const Eigen::AngleAxisd& angleAxis) : matrix_(angleAxis) {}
\n+
116
\n+
118 static SO AxisAngle(const Vector3& axis, double theta);
\n+
119
\n+
122 static SO ClosestTo(const MatrixNN& M);
\n+
123
\n+
127 static SO ChordalMean(const std::vector<SO>& rotations);
\n+
128
\n+
130 template <int N_ = N, typename = IsDynamic<N_>>
\n+
\n+
131 static SO Random(std::mt19937& rng, size_t n = 0) {
\n+
132 if (n == 0) throw std::runtime_error("SO: Dimensionality not known.");
\n+
133 // TODO(frank): this might need to be re-thought
\n+
134 static std::uniform_real_distribution<double> randomAngle(-M_PI, M_PI);
\n+
135 const size_t d = SO::Dimension(n);
\n+
136 Vector xi(d);
\n+
137 for (size_t j = 0; j < d; j++) {
\n+
138 xi(j) = randomAngle(rng);
\n+
139 }
\n+
140 return SO::Retract(xi);
\n+
141 }
\n+
\n+
142
\n+
144 template <int N_ = N, typename = IsFixed<N_>>
\n+
\n+
145 static SO Random(std::mt19937& rng) {
\n+
146 // By default, use dynamic implementation above. Specialized for SO(3).
\n+
147 return SO(SO<Eigen::Dynamic>::Random(rng, N).matrix());
\n+
148 }
\n+
\n+
149
\n+
153
\n+
155 const MatrixNN& matrix() const { return matrix_; }
\n+
156
\n+
157 size_t rows() const { return matrix_.rows(); }
\n+
158 size_t cols() const { return matrix_.cols(); }
\n+
159
\n+
163
\n+
164 void print(const std::string& s = std::string()) const;
\n+
165
\n+
166 bool equals(const SO& other, double tol) const {
\n+
167 return equal_with_abs_tol(matrix_, other.matrix_, tol);
\n+
168 }
\n+
169
\n+
173
\n+
\n+
175 SO operator*(const SO& other) const {
\n+
176 assert(dim() == other.dim());
\n+
177 return SO(matrix_ * other.matrix_);
\n+
178 }
\n+
\n+
179
\n+
181 template <int N_ = N, typename = IsFixed<N_>>
\n+
\n+
182 static SO Identity() {
\n+
183 return SO();
\n+
184 }
\n+
\n+
185
\n+
187 template <int N_ = N, typename = IsDynamic<N_>>
\n+
\n+
188 static SO Identity(size_t n = 0) {
\n+
189 return SO(n);
\n+
190 }
\n+
\n+
191
\n+
193 SO inverse() const { return SO(matrix_.transpose()); }
\n+
194
\n
198
\n-
200 template<typename Iterator>
\n-
201 DecisionTree(Iterator begin, Iterator end, const L& label);
\n-
202
\n-
204 DecisionTree(const L& label, const DecisionTree& f0,
\n-
205 const DecisionTree& f1);
\n-
206
\n-
214 template <typename X, typename Func>
\n-
215 DecisionTree(const DecisionTree<L, X>& other, Func Y_of_X);
\n-
216
\n-
227 template <typename M, typename X, typename Func>
\n-
228 DecisionTree(const DecisionTree<M, X>& other, const std::map<M, L>& map,
\n-
229 Func Y_of_X);
\n-
230
\n-
234
\n-
242 void print(const std::string& s, const LabelFormatter& labelFormatter,
\n-
243 const ValueFormatter& valueFormatter) const;
\n-
244
\n-
245 // Testable
\n-
246 bool equals(const DecisionTree& other,
\n-
247 const CompareFunc& compare = &DefaultCompare) const;
\n-
248
\n+
199 using TangentVector = Eigen::Matrix<double, dimension, 1>;
\n+
200 using ChartJacobian = OptionalJacobian<dimension, dimension>;
\n+
201
\n+
203 static int Dim() { return dimension; }
\n+
204
\n+
205 // Calculate manifold dimensionality for SO(n).
\n+
206 // Available as dimension or Dim() for fixed N.
\n+
207 static size_t Dimension(size_t n) { return n * (n - 1) / 2; }
\n+
208
\n+
209 // Calculate ambient dimension n from manifold dimensionality d.
\n+
210 static size_t AmbientDim(size_t d) { return (1 + std::sqrt(1 + 8 * d)) / 2; }
\n+
211
\n+
212 // Calculate run-time dimensionality of manifold.
\n+
213 // Available as dimension or Dim() for fixed N.
\n+
214 size_t dim() const { return Dimension(static_cast<size_t>(matrix_.rows())); }
\n+
215
\n+
231 static MatrixNN Hat(const TangentVector& xi);
\n+
232
\n+
234 static void Hat(const Vector &xi, Eigen::Ref<MatrixNN> X);
\n+
235
\n+
237 static TangentVector Vee(const MatrixNN& X);
\n+
238
\n+
239 // Chart at origin
\n+
\n+\n+
245 static SO Retract(const TangentVector& xi, ChartJacobian H = boost::none);
\n+
246
\n+
250 static TangentVector Local(const SO& R, ChartJacobian H = boost::none);
\n+
251 };
\n+
\n
252
\n-
254 virtual ~DecisionTree() = default;
\n-
255
\n-
257 bool empty() const { return !root_; }
\n-
258
\n-
260 bool operator==(const DecisionTree& q) const;
\n-
261
\n-
263 const Y& operator()(const Assignment<L>& x) const;
\n-
264
\n-
279 template <typename Func>
\n-
280 void visit(Func f) const;
\n-
281
\n-
296 template <typename Func>
\n-
297 void visitLeaf(Func f) const;
\n-
298
\n-
313 template <typename Func>
\n-
314 void visitWith(Func f) const;
\n-
315
\n-
317 size_t nrLeaves() const;
\n-
318
\n-
334 template <typename Func, typename X>
\n-
335 X fold(Func f, X x0) const;
\n-
336
\n-
338 std::set<L> labels() const;
\n+
253 // Return dynamic identity DxD Jacobian for given SO(n)
\n+
254 template <int N_ = N, typename = IsDynamic<N_>>
\n+
255 static MatrixDD IdentityJacobian(size_t n) {
\n+
256 const size_t d = Dimension(n);
\n+
257 return MatrixDD::Identity(d, d);
\n+
258 }
\n+
259
\n+
263
\n+
265 MatrixDD AdjointMap() const;
\n+
266
\n+
270 static SO Expmap(const TangentVector& omega, ChartJacobian H = boost::none);
\n+
271
\n+
273 static MatrixDD ExpmapDerivative(const TangentVector& omega);
\n+
274
\n+
278 static TangentVector Logmap(const SO& R, ChartJacobian H = boost::none);
\n+
279
\n+
281 static MatrixDD LogmapDerivative(const TangentVector& omega);
\n+
282
\n+
283 // inverse with optional derivative
\n+
284 using LieGroup<SO<N>, internal::DimensionSO(N)>::inverse;
\n+
285
\n+
289
\n+
295 VectorN2 vec(OptionalJacobian<internal::NSquaredSO(N), dimension> H =
\n+
296 boost::none) const;
\n+
297
\n+
299 template <int N_ = N, typename = IsFixed<N_>>
\n+
\n+
300 static Matrix VectorizedGenerators() {
\n+
301 constexpr size_t N2 = static_cast<size_t>(N * N);
\n+
302 Eigen::Matrix<double, N2, dimension> G;
\n+
303 for (size_t j = 0; j < dimension; j++) {
\n+
304 const auto X = Hat(Vector::Unit(dimension, j));
\n+
305 G.col(j) = Eigen::Map<const VectorN2>(X.data());
\n+
306 }
\n+
307 return G;
\n+
308 }
\n+
\n+
309
\n+
311 template <int N_ = N, typename = IsDynamic<N_>>
\n+
\n+
312 static Matrix VectorizedGenerators(size_t n = 0) {
\n+
313 const size_t n2 = n * n, dim = Dimension(n);
\n+
314 Matrix G(n2, dim);
\n+
315 for (size_t j = 0; j < dim; j++) {
\n+
316 const auto X = Hat(Vector::Unit(dim, j));
\n+
317 G.col(j) = Eigen::Map<const Matrix>(X.data(), n2, 1);
\n+
318 }
\n+
319 return G;
\n+
320 }
\n+
\n+
321
\n+
325
\n+
326 template <class Archive>
\n+
327 friend void save(Archive&, SO&, const unsigned int);
\n+
328 template <class Archive>
\n+
329 friend void load(Archive&, SO&, const unsigned int);
\n+
330 template <class Archive>
\n+
331 friend void serialize(Archive&, SO&, const unsigned int);
\n+
332 friend class boost::serialization::access;
\n+
333 friend class Rot3; // for serialize
\n+
334
\n+
336};
\n+
\n+
337
\n+
338using SOn = SO<Eigen::Dynamic>;
\n
339
\n-
341 DecisionTree apply(const Unary& op) const;
\n-
342
\n-
351 DecisionTree apply(const UnaryAssignment& op) const;
\n-
352
\n-
354 DecisionTree apply(const DecisionTree& g, const Binary& op) const;
\n-
355
\n-
\n-
358 DecisionTree choose(const L& label, size_t index) const {
\n-
359 NodePtr newRoot = root_->choose(label, index);
\n-
360 return DecisionTree(newRoot);
\n-
361 }
\n-
\n-
362
\n-
364 DecisionTree combine(const L& label, size_t cardinality,
\n-
365 const Binary& op) const;
\n-
366
\n-
\n-
368 DecisionTree combine(const LabelC& labelC, const Binary& op) const {
\n-
369 return combine(labelC.first, labelC.second, op);
\n-
370 }
\n-
\n-
371
\n-
373 void dot(std::ostream& os, const LabelFormatter& labelFormatter,
\n-
374 const ValueFormatter& valueFormatter, bool showZero = true) const;
\n-
375
\n-
377 void dot(const std::string& name, const LabelFormatter& labelFormatter,
\n-
378 const ValueFormatter& valueFormatter, bool showZero = true) const;
\n-
379
\n-
381 std::string dot(const LabelFormatter& labelFormatter,
\n-
382 const ValueFormatter& valueFormatter,
\n-
383 bool showZero = true) const;
\n-
384
\n+
340/*
\n+
341 * Specialize dynamic Hat and Vee, because recursion depends on dynamic nature.
\n+
342 * The definition is in SOn.cpp. Fixed-size SO3 and SO4 have their own version,
\n+
343 * and implementation for other fixed N is in SOn-inl.h.
\n+
344 */
\n+
345
\n+
346template <>
\n+
347GTSAM_EXPORT
\n+
348Matrix SOn::Hat(const Vector& xi);
\n+
349
\n+
350template <>
\n+
351GTSAM_EXPORT
\n+
352Vector SOn::Vee(const Matrix& X);
\n+
353
\n+
354/*
\n+
355 * Specialize dynamic compose and between, because the derivative is unknowable
\n+
356 * by the LieGroup implementations, who return a fixed-size matrix for H2.
\n+
357 */
\n+
358
\n+
359using DynamicJacobian = OptionalJacobian<Eigen::Dynamic, Eigen::Dynamic>;
\n+
360
\n+
361template <>
\n+
362GTSAM_EXPORT
\n+
363SOn LieGroup<SOn, Eigen::Dynamic>::compose(const SOn& g, DynamicJacobian H1,
\n+
364 DynamicJacobian H2) const;
\n+
365
\n+
366template <>
\n+
367GTSAM_EXPORT
\n+
368SOn LieGroup<SOn, Eigen::Dynamic>::between(const SOn& g, DynamicJacobian H1,
\n+
369 DynamicJacobian H2) const;
\n+
370
\n+
371/*
\n+
372 * Specialize dynamic vec.
\n+
373 */
\n+
374template <>
\n+
375GTSAM_EXPORT
\n+
376typename SOn::VectorN2 SOn::vec(DynamicJacobian H) const;
\n+
377
\n+
379template<class Archive>
\n+
\n+\n+
381 Archive& ar, SOn& Q,
\n+
382 const unsigned int file_version
\n+
383) {
\n+
384 Matrix& M = Q.matrix_;
\n+
385 ar& BOOST_SERIALIZATION_NVP(M);
\n+
386}
\n+
\n
387
\n-
388 // internal use only
\n-
389 explicit DecisionTree(const NodePtr& root);
\n-
390
\n-
391 // internal use only
\n-
392 template<typename Iterator> NodePtr
\n-
393 compose(Iterator begin, Iterator end, const L& label) const;
\n+
388/*
\n+
389 * Define the traits. internal::LieGroup provides both Lie group and Testable
\n+
390 */
\n+
391
\n+
392template <int N>
\n+
393struct traits<SO<N>> : public internal::LieGroup<SO<N>> {};
\n
394
\n-
396
\n-
397 private:
\n-\n-
400 template <class ARCHIVE>
\n-
401 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
402 ar& BOOST_SERIALIZATION_NVP(root_);
\n-
403 }
\n-
404 }; // DecisionTree
\n-
\n-
405
\n-
406 template <class L, class Y>
\n-
407 struct traits<DecisionTree<L, Y>> : public Testable<DecisionTree<L, Y>> {};
\n-
408
\n-
412 template<typename L, typename Y>
\n-
\n-\n-
414 const typename DecisionTree<L, Y>::Unary& op) {
\n-
415 return f.apply(op);
\n-
416 }
\n-
\n-
417
\n-
419 template<typename L, typename Y>
\n-
\n-\n-
421 const typename DecisionTree<L, Y>::UnaryAssignment& op) {
\n-
422 return f.apply(op);
\n-
423 }
\n-
\n-
424
\n-
426 template<typename L, typename Y>
\n-
\n-\n-
428 const DecisionTree<L, Y>& g,
\n-
429 const typename DecisionTree<L, Y>::Binary& op) {
\n-
430 return f.apply(g, op);
\n-
431 }
\n-
\n-
432
\n-
439 template <typename L, typename T1, typename T2>
\n-
\n-
440 std::pair<DecisionTree<L, T1>, DecisionTree<L, T2> > unzip(
\n-
441 const DecisionTree<L, std::pair<T1, T2> >& input) {
\n-
442 return std::make_pair(
\n-
443 DecisionTree<L, T1>(input, [](std::pair<T1, T2> i) { return i.first; }),
\n-\n-
445 [](std::pair<T1, T2> i) { return i.second; }));
\n-
446 }
\n-
\n-
447
\n-
448} // namespace gtsam
\n-
Typedefs for easier changing of types.
\n-
Concept check for values that can be used in unit tests.
\n-
An assignment from labels to a discrete value index (size_t)
\n+
395template <int N>
\n+
396struct traits<const SO<N>> : public internal::LieGroup<SO<N>> {};
\n+
397
\n+
398} // namespace gtsam
\n+
399
\n+
400#include "SOn-inl.h"
\n+
Base class and basic functions for Lie types.
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n+
Base class and basic functions for Manifold types.
\n+
make_shared trampoline function to ensure proper alignment
\n+
constexpr int DimensionSO(int N)
Calculate dimensionality of SO<N> manifold, or return Dynamic if so.
Definition SOn.h:39
\n+
Template implementations for SO(n)
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::pair< DecisionTree< L, T1 >, DecisionTree< L, T2 > > unzip(const DecisionTree< L, std::pair< T1, T2 > > &input)
unzip a DecisionTree with std::pair values.
Definition DecisionTree.h:440
\n-
DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename DecisionTree< L, Y >::Unary &op)
free versions of apply
Definition DecisionTree.h:413
\n+
std::string serialize(const T &input)
serializes to a string
Definition serialization.h:113
\n+
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
An assignment from labels to value index (size_t).
Definition Assignment.h:37
\n-
Definition DecisionTree-inl.h:52
\n-
Definition DecisionTree-inl.h:172
\n-
a decision tree is a function from assignments to values.
Definition DecisionTree.h:61
\n-
DecisionTree apply(const Unary &op) const
apply Unary operation "op" to f
Definition DecisionTree-inl.h:889
\n-
DecisionTree choose(const L &label, size_t index) const
create a new function where value(label)==index It's like "restrict" in Darwiche09book pg329,...
Definition DecisionTree.h:358
\n-
NodePtr convertFrom(const typename DecisionTree< M, X >::NodePtr &f, std::function< L(const M &)> L_of_M, std::function< Y(const X &)> Y_of_X) const
Convert from a DecisionTree<M, X> to DecisionTree<L, Y>.
Definition DecisionTree-inl.h:671
\n-
DecisionTree combine(const LabelC &labelC, const Binary &op) const
combine with LabelC for convenience
Definition DecisionTree.h:368
\n-
NodePtr create(It begin, It end, ValueIt beginY, ValueIt endY) const
Internal recursive function to create from keys, cardinalities, and Y values.
Definition DecisionTree-inl.h:630
\n-
virtual ~DecisionTree()=default
Make virtual.
\n-
static bool DefaultCompare(const Y &a, const Y &b)
Default method for comparison of two objects of type Y.
Definition DecisionTree.h:64
\n-
typename Node::Ptr NodePtr
---------------------\u2014 Node base class ------------------------\u2014
Definition DecisionTree.h:143
\n-
std::set< L > labels() const
Retrieve all unique labels as a set.
Definition DecisionTree-inl.h:853
\n-
bool empty() const
Check if tree is empty.
Definition DecisionTree.h:257
\n-
void visit(Func f) const
Visit all leaves in depth-first fashion.
Definition DecisionTree-inl.h:736
\n-
void visitLeaf(Func f) const
Visit all leaves in depth-first fashion.
Definition DecisionTree-inl.h:773
\n-
std::function< Y(const Y &)> Unary
Handy typedefs for unary and binary function types.
Definition DecisionTree.h:74
\n-
X fold(Func f, X x0) const
Fold a binary function over the tree, returning accumulator.
Definition DecisionTree-inl.h:833
\n-
NodePtr root_
A DecisionTree just contains the root. TODO(dellaert): make protected.
Definition DecisionTree.h:146
\n-
void print(const std::string &s, const LabelFormatter &labelFormatter, const ValueFormatter &valueFormatter) const
GTSAM-style print.
Definition DecisionTree-inl.h:872
\n-
DecisionTree combine(const L &label, size_t cardinality, const Binary &op) const
combine subtrees on key with binary operation "op"
Definition DecisionTree-inl.h:937
\n-
void visitWith(Func f) const
Visit all leaves in depth-first fashion.
Definition DecisionTree-inl.h:816
\n-
const Y & operator()(const Assignment< L > &x) const
evaluate
Definition DecisionTree-inl.h:884
\n-
void dot(std::ostream &os, const LabelFormatter &labelFormatter, const ValueFormatter &valueFormatter, bool showZero=true) const
output to graphviz format, stream version
Definition DecisionTree-inl.h:949
\n-
friend class boost::serialization::access
Serialization function.
Definition DecisionTree.h:399
\n-
bool operator==(const DecisionTree &q) const
equality
Definition DecisionTree-inl.h:879
\n-
std::pair< L, size_t > LabelC
A label annotated with cardinality.
Definition DecisionTree.h:79
\n-
size_t nrLeaves() const
Return the number of leaves in the tree.
Definition DecisionTree-inl.h:823
\n-
DecisionTree()
Default constructor (for serialization)
Definition DecisionTree-inl.h:462
\n-
---------------------\u2014 Node base class ------------------------\u2014
Definition DecisionTree.h:86
\n-
friend class boost::serialization::access
Serialization function.
Definition DecisionTree.h:135
\n+
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n+
static SO< N > Retract(const TangentVector &v)
Retract at origin: possible in Lie group because it has an identity.
Definition Lie.h:111
\n+
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
Manifold of special orthogonal rotation matrices SO<N>.
Definition SOn.h:52
\n+
static SO FromMatrix(const Eigen::MatrixBase< Derived > &R)
Named constructor from Eigen Matrix.
Definition SOn.h:95
\n+
static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates.
Definition SOn-inl.h:67
\n+
static Matrix VectorizedGenerators()
Calculate N^2 x dim matrix of vectorized Lie algebra generators for SO(N)
Definition SOn.h:300
\n+
SO inverse() const
inverse of a rotation = transpose
Definition SOn.h:193
\n+
VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::none) const
Return vectorized rotation matrix in column order.
Definition SOn-inl.h:88
\n+
static SO ChordalMean(const std::vector< SO > &rotations)
Named constructor that finds chordal mean , currently only defined for SO3.
\n+
SO operator*(const SO &other) const
Multiplication.
Definition SOn.h:175
\n+
static TangentVector Vee(const MatrixNN &X)
Inverse of Hat. See note about xi element order in Hat.
Definition SOn-inl.h:35
\n+
MatrixNN matrix_
Rotation matrix.
Definition SOn.h:62
\n+
static TangentVector Logmap(const SO &R, ChartJacobian H=boost::none)
Log map at identity - returns the canonical coordinates of this rotation.
Definition SOn-inl.h:77
\n+
static SO AxisAngle(const Vector3 &axis, double theta)
Constructor from axis and angle. Only defined for SO3.
\n+
MatrixDD AdjointMap() const
Adjoint map.
Definition SO4.cpp:159
\n+
static void Hat(const Vector &xi, Eigen::Ref< MatrixNN > X)
In-place version of Hat (see details there), implements recursion.
\n+
static SO Identity()
SO<N> identity for N >= 2.
Definition SOn.h:182
\n+
static int Dim()
Return compile-time dimensionality: fixed size N or Eigen::Dynamic.
Definition SOn.h:203
\n+
static MatrixNN Hat(const TangentVector &xi)
Hat operator creates Lie algebra element corresponding to d-vector, where d is the dimensionality of ...
Definition SOn-inl.h:29
\n+
static MatrixDD ExpmapDerivative(const TangentVector &omega)
Derivative of Expmap, currently only defined for SO3.
Definition SOn-inl.h:72
\n+
static MatrixDD LogmapDerivative(const TangentVector &omega)
Derivative of Logmap, currently only defined for SO3.
Definition SOn-inl.h:82
\n+
SO(const SO< M > &R)
Construct dynamic SO(n) from Fixed SO<M>
Definition SOn.h:111
\n+
SO(size_t n=0)
Construct SO<N> identity for N == Eigen::Dynamic.
Definition SOn.h:83
\n+
SO()
Construct SO<N> identity for N >= 2.
Definition SOn.h:79
\n+
static SO Lift(size_t n, const Eigen::MatrixBase< Derived > &R)
Named constructor from lower dimensional matrix.
Definition SOn.h:101
\n+
static SO Random(std::mt19937 &rng, size_t n=0)
Random SO(n) element (no big claims about uniformity). SO(3) is specialized in SO3....
Definition SOn.h:131
\n+
static SO Identity(size_t n=0)
SO<N> identity for N == Eigen::Dynamic.
Definition SOn.h:188
\n+
const MatrixNN & matrix() const
Return matrix.
Definition SOn.h:155
\n+
static SO Random(std::mt19937 &rng)
Random SO(N) element (no big claims about uniformity)
Definition SOn.h:145
\n+
static SO ClosestTo(const MatrixNN &M)
Named constructor that finds SO(n) matrix closest to M in Frobenius norm, currently only defined for ...
\n+
SO(const Eigen::AngleAxisd &angleAxis)
Constructor from AngleAxisd.
Definition SOn.h:115
\n+
static Matrix VectorizedGenerators(size_t n=0)
Calculate n^2 x dim matrix of vectorized Lie algebra generators for SO(n)
Definition SOn.h:312
\n+
SO(const Eigen::MatrixBase< Derived > &R)
Constructor from Eigen Matrix, dynamic version.
Definition SOn.h:91
\n+
Definition SOn.h:240
\n+
static TangentVector Local(const SO &R, ChartJacobian H=boost::none)
Inverse of Retract.
Definition SOn-inl.h:50
\n+
static SO Retract(const TangentVector &xi, ChartJacobian H=boost::none)
Retract uses Cayley map.
Definition SOn-inl.h:40
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "encoding", "source2": "encoding", "unified_diff": "@@ -1 +1 @@\n-utf-8\n+us-ascii\n"}, {"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,417 +1,507 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DecisionTree.h\n+SOn.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh>\n-25\n-26#include \n-27#include \n-28#include \n-29#include \n-30#include \n-31#include \n-32#include \n-33#include \n-34#include \n-35#include \n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd_\b._\bh>\n+24#include \n+25#include \n+26\n+27#include \n+28\n+29#include // TODO(frank): how to avoid?\n+30#include \n+31#include \n+32#include \n+33#include \n+34\n+35namespace _\bg_\bt_\bs_\ba_\bm {\n 36\n-37namespace _\bg_\bt_\bs_\ba_\bm {\n-38\n-60 template\n-_\b6_\b1 class _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be {\n-62 protected:\n-_\b6_\b4 static bool _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bo_\bm_\bp_\ba_\br_\be(const Y& a, const Y& b) {\n-65 return a == b;\n-66 }\n-67\n-68 public:\n-69 using LabelFormatter = std::function;\n-70 using ValueFormatter = std::function;\n-71 using CompareFunc = std::function;\n+37namespace internal {\n+_\b3_\b9constexpr int _\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bS_\bO(int N) {\n+40 return (N < 0) ? Eigen::Dynamic : N * (N - 1) / 2;\n+41}\n+42\n+43// Calculate N^2 at compile time, or return Dynamic if so\n+44constexpr int NSquaredSO(int N) { return (N < 0) ? Eigen::Dynamic : N * N; }\n+45} // namespace internal\n+46\n+51template \n+_\b5_\b2class _\bS_\bO : public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp, internal::DimensionSO(N)> {\n+53 public:\n+54 enum { dimension = internal::DimensionSO(N) };\n+55 using MatrixNN = Eigen::Matrix;\n+56 using VectorN2 = Eigen::Matrix;\n+57 using MatrixDD = Eigen::Matrix;\n+58\n+59 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(true)\n+60\n+61 protected:\n+_\b6_\b2 MatrixNN _\bm_\ba_\bt_\br_\bi_\bx_\b_;\n+63\n+64 // enable_if_t aliases, used to specialize constructors/methods, see\n+65 // https://www.fluentcpp.com/2018/05/18/make-sfinae-pretty-2-hidden-beauty-\n+sfinae/\n+66 template \n+67 using IsDynamic = typename std::enable_if::type;\n+68 template \n+69 using IsFixed = typename std::enable_if= 2, void>::type;\n+70 template \n+71 using IsSO3 = typename std::enable_if::type;\n 72\n-_\b7_\b4 using _\bU_\bn_\ba_\br_\by = std::function;\n-75 using UnaryAssignment = std::function&, const Y&)>;\n-76 using Binary = std::function;\n-77\n-_\b7_\b9 using _\bL_\ba_\bb_\be_\bl_\bC = std::pair;\n+73 public:\n+76\n+78 template >\n+_\b7_\b9 _\bS_\bO() : _\bm_\ba_\bt_\br_\bi_\bx_\b_(MatrixNN::_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by()) {}\n 80\n-82 struct _\bL_\be_\ba_\bf;\n-83 struct _\bC_\bh_\bo_\bi_\bc_\be;\n-84\n-_\b8_\b6 struct _\bN_\bo_\bd_\be {\n-87 using Ptr = boost::shared_ptr;\n+82 template >\n+_\b8_\b3 explicit _\bS_\bO(size_t n = 0) {\n+84 // We allow for n=0 as the default constructor, needed for serialization,\n+85 // wrappers etc.\n+86 _\bm_\ba_\bt_\br_\bi_\bx_\b_ = Eigen::MatrixXd::Identity(n, n);\n+87 }\n 88\n-89#ifdef DT_DEBUG_MEMORY\n-90 static int nrNodes;\n-91#endif\n+90 template \n+_\b9_\b1 explicit _\bS_\bO(const Eigen::MatrixBase& R) : _\bm_\ba_\bt_\br_\bi_\bx_\b_(R.eval()) {}\n 92\n-93 // Constructor\n-94 _\bN_\bo_\bd_\be() {\n-95#ifdef DT_DEBUG_MEMORY\n-96 std::cout << ++nrNodes << \" constructed \" << id() << std::endl;\n-97 std::cout.flush();\n-98#endif\n-99 }\n-100\n-101 // Destructor\n-102 virtual _\b~_\bN_\bo_\bd_\be() {\n-103#ifdef DT_DEBUG_MEMORY\n-104 std::cout << --nrNodes << \" destructed \" << id() << std::endl;\n-105 std::cout.flush();\n-106#endif\n+94 template \n+_\b9_\b5 static _\bS_\bO _\bF_\br_\bo_\bm_\bM_\ba_\bt_\br_\bi_\bx(const Eigen::MatrixBase& R) {\n+96 return _\bS_\bO(R);\n+97 }\n+98\n+100 template >\n+_\b1_\b0_\b1 static _\bS_\bO _\bL_\bi_\bf_\bt(size_t n, const Eigen::MatrixBase &R) {\n+102 Matrix Q = Matrix::Identity(n, n);\n+103 const int p = R.rows();\n+104 assert(p >= 0 && p <= static_cast(n) && R.cols() == p);\n+105 Q.topLeftCorner(p, p) = R;\n+106 return _\bS_\bO(Q);\n 107 }\n 108\n-109 // Unique ID for dot files\n-110 const void* id() const { return this; }\n-111\n-112 // everything else is virtual, no documentation here as internal\n-113 virtual void print(const std::string& s,\n-114 const LabelFormatter& labelFormatter,\n-115 const ValueFormatter& valueFormatter) const = 0;\n-116 virtual void dot(std::ostream& os, const LabelFormatter& labelFormatter,\n-117 const ValueFormatter& valueFormatter,\n-118 bool showZero) const = 0;\n-119 virtual bool sameLeaf(const _\bL_\be_\ba_\bf& q) const = 0;\n-120 virtual bool sameLeaf(const _\bN_\bo_\bd_\be& q) const = 0;\n-121 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bd_\be& other, const CompareFunc& compare =\n-122 &_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bo_\bm_\bp_\ba_\br_\be) const = 0;\n-123 virtual const Y& operator()(const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>& x) const = 0;\n-124 virtual Ptr apply(const _\bU_\bn_\ba_\br_\by& op) const = 0;\n-125 virtual Ptr apply(const UnaryAssignment& op,\n-126 const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>& assignment) const = 0;\n-127 virtual Ptr apply_f_op_g(const _\bN_\bo_\bd_\be&, const Binary&) const = 0;\n-128 virtual Ptr apply_g_op_fL(const _\bL_\be_\ba_\bf&, const Binary&) const = 0;\n-129 virtual Ptr apply_g_op_fC(const _\bC_\bh_\bo_\bi_\bc_\be&, const Binary&) const = 0;\n-130 virtual Ptr choose(const L& label, size_t index) const = 0;\n-131 virtual bool isLeaf() const = 0;\n-132\n-133 private:\n-_\b1_\b3_\b5 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-136 template \n-137 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {}\n-138 };\n-141 public:\n-_\b1_\b4_\b3 using _\bN_\bo_\bd_\be_\bP_\bt_\br = typename Node::Ptr;\n-144\n-_\b1_\b4_\b6 _\bN_\bo_\bd_\be_\bP_\bt_\br _\br_\bo_\bo_\bt_\b_;\n-147\n-148 protected:\n-153 template\n-154 _\bN_\bo_\bd_\be_\bP_\bt_\br _\bc_\br_\be_\ba_\bt_\be(It begin, It end, ValueIt beginY, ValueIt endY) const;\n-155\n-166 template \n-167 _\bN_\bo_\bd_\be_\bP_\bt_\br _\bc_\bo_\bn_\bv_\be_\br_\bt_\bF_\br_\bo_\bm(const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bM_\b,_\b _\bX_\b>_\b:_\b:_\bN_\bo_\bd_\be_\bP_\bt_\br& f,\n-168 std::function L_of_M,\n-169 std::function Y_of_X) const;\n-170\n-171 public:\n-174\n-176 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be();\n-177\n-179 explicit _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const Y& y);\n-180\n-188 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const L& label, const Y& y1, const Y& y2);\n-189\n-191 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bL_\ba_\bb_\be_\bl_\bC& label, const Y& y1, const Y& y2);\n-192\n-194 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const std::vector& labelCs, const std::vector& ys);\n-195\n-197 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const std::vector& labelCs, const std::string& table);\n+110 template >\n+_\b1_\b1_\b1 explicit _\bS_\bO(const _\bS_\bO_\b<_\bM_\b>& R) : _\bm_\ba_\bt_\br_\bi_\bx_\b_(R._\bm_\ba_\bt_\br_\bi_\bx()) {}\n+112\n+114 template >\n+_\b1_\b1_\b5 explicit _\bS_\bO(const Eigen::AngleAxisd& angleAxis) : _\bm_\ba_\bt_\br_\bi_\bx_\b_(angleAxis) {}\n+116\n+_\b1_\b1_\b8 static _\bS_\bO _\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be(const Vector3& axis, double theta);\n+119\n+_\b1_\b2_\b2 static _\bS_\bO _\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo(const MatrixNN& M);\n+123\n+_\b1_\b2_\b7 static _\bS_\bO _\bC_\bh_\bo_\br_\bd_\ba_\bl_\bM_\be_\ba_\bn(const std::vector& rotations);\n+128\n+130 template >\n+_\b1_\b3_\b1 static _\bS_\bO _\bR_\ba_\bn_\bd_\bo_\bm(std::mt19937& rng, size_t n = 0) {\n+132 if (n == 0) throw std::runtime_error(\"SO: Dimensionality not known.\");\n+133 // TODO(frank): this might need to be re-thought\n+134 static std::uniform_real_distribution randomAngle(-M_PI, M_PI);\n+135 const size_t d = SO::Dimension(n);\n+136 Vector xi(d);\n+137 for (size_t j = 0; j < d; j++) {\n+138 xi(j) = randomAngle(rng);\n+139 }\n+140 return _\bS_\bO_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(xi);\n+141 }\n+142\n+144 template >\n+_\b1_\b4_\b5 static _\bS_\bO _\bR_\ba_\bn_\bd_\bo_\bm(std::mt19937& rng) {\n+146 // By default, use dynamic implementation above. Specialized for SO(3).\n+147 return _\bS_\bO(_\bS_\bO_\b<_\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b>_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm(rng, N)._\bm_\ba_\bt_\br_\bi_\bx());\n+148 }\n+149\n+153\n+_\b1_\b5_\b5 const MatrixNN& _\bm_\ba_\bt_\br_\bi_\bx() const { return _\bm_\ba_\bt_\br_\bi_\bx_\b_; }\n+156\n+157 size_t rows() const { return _\bm_\ba_\bt_\br_\bi_\bx_\b_.rows(); }\n+158 size_t cols() const { return _\bm_\ba_\bt_\br_\bi_\bx_\b_.cols(); }\n+159\n+163\n+164 void print(const std::string& s = std::string()) const;\n+165\n+166 bool equals(const _\bS_\bO& other, double tol) const {\n+167 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(_\bm_\ba_\bt_\br_\bi_\bx_\b_, other.matrix_, tol);\n+168 }\n+169\n+173\n+_\b1_\b7_\b5 _\bS_\bO _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bS_\bO& other) const {\n+176 assert(dim() == other.dim());\n+177 return _\bS_\bO(_\bm_\ba_\bt_\br_\bi_\bx_\b_ * other._\bm_\ba_\bt_\br_\bi_\bx_\b_);\n+178 }\n+179\n+181 template >\n+_\b1_\b8_\b2 static _\bS_\bO _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n+183 return _\bS_\bO();\n+184 }\n+185\n+187 template >\n+_\b1_\b8_\b8 static _\bS_\bO _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by(size_t n = 0) {\n+189 return _\bS_\bO(n);\n+190 }\n+191\n+_\b1_\b9_\b3 _\bS_\bO _\bi_\bn_\bv_\be_\br_\bs_\be() const { return _\bS_\bO(_\bm_\ba_\bt_\br_\bi_\bx_\b_.transpose()); }\n+194\n 198\n-200 template\n-201 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(Iterator begin, Iterator end, const L& label);\n-202\n-204 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const L& label, const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& f0,\n-205 const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& f1);\n-206\n-214 template \n-215 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bX_\b>& other, Func Y_of_X);\n-216\n-227 template \n-228 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bM_\b,_\b _\bX_\b>& other, const std::map& map,\n-229 Func Y_of_X);\n-230\n-234\n-242 void _\bp_\br_\bi_\bn_\bt(const std::string& s, const LabelFormatter& labelFormatter,\n-243 const ValueFormatter& valueFormatter) const;\n-244\n-245 // Testable\n-246 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& other,\n-247 const CompareFunc& compare = &_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bo_\bm_\bp_\ba_\br_\be) const;\n-248\n+199 using TangentVector = Eigen::Matrix;\n+200 using ChartJacobian = _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>;\n+201\n+_\b2_\b0_\b3 static int _\bD_\bi_\bm() { return dimension; }\n+204\n+205 // Calculate manifold dimensionality for SO(n).\n+206 // Available as dimension or Dim() for fixed N.\n+207 static size_t Dimension(size_t n) { return n * (n - 1) / 2; }\n+208\n+209 // Calculate ambient dimension n from manifold dimensionality d.\n+210 static size_t AmbientDim(size_t d) { return (1 + std::sqrt(1 + 8 * d)) / 2;\n+}\n+211\n+212 // Calculate run-time dimensionality of manifold.\n+213 // Available as dimension or Dim() for fixed N.\n+214 size_t dim() const { return Dimension(static_cast(_\bm_\ba_\bt_\br_\bi_\bx_\b_.rows()));\n+}\n+215\n+231 static MatrixNN _\bH_\ba_\bt(const TangentVector& xi);\n+232\n+_\b2_\b3_\b4 static void _\bH_\ba_\bt(const Vector &xi, Eigen::Ref X);\n+235\n+237 static TangentVector _\bV_\be_\be(const MatrixNN& X);\n+238\n+239 // Chart at origin\n+_\b2_\b4_\b0 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n+245 static _\bS_\bO _\bR_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& xi, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H = boost::none);\n+246\n+250 static TangentVector _\bL_\bo_\bc_\ba_\bl(const _\bS_\bO& R, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H = boost::none);\n+251 };\n 252\n-_\b2_\b5_\b4 virtual _\b~_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be() = default;\n-255\n-_\b2_\b5_\b7 bool _\be_\bm_\bp_\bt_\by() const { return !_\br_\bo_\bo_\bt_\b_; }\n-258\n-260 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& q) const;\n-261\n-263 const Y& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b<_\bL_\b>& x) const;\n-264\n-279 template \n-280 void _\bv_\bi_\bs_\bi_\bt(Func f) const;\n-281\n-296 template \n-297 void _\bv_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf(Func f) const;\n-298\n-313 template \n-314 void _\bv_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh(Func f) const;\n-315\n-317 size_t _\bn_\br_\bL_\be_\ba_\bv_\be_\bs() const;\n-318\n-334 template \n-335 X _\bf_\bo_\bl_\bd(Func f, X x0) const;\n-336\n-338 std::set _\bl_\ba_\bb_\be_\bl_\bs() const;\n+253 // Return dynamic identity DxD Jacobian for given SO(n)\n+254 template >\n+255 static MatrixDD IdentityJacobian(size_t n) {\n+256 const size_t d = Dimension(n);\n+257 return MatrixDD::Identity(d, d);\n+258 }\n+259\n+263\n+265 MatrixDD _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const;\n+266\n+270 static _\bS_\bO _\bE_\bx_\bp_\bm_\ba_\bp(const TangentVector& omega, ChartJacobian H = boost::\n+none);\n+271\n+273 static MatrixDD _\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const TangentVector& omega);\n+274\n+278 static TangentVector _\bL_\bo_\bg_\bm_\ba_\bp(const _\bS_\bO& R, ChartJacobian H = boost::none);\n+279\n+281 static MatrixDD _\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const TangentVector& omega);\n+282\n+283 // inverse with optional derivative\n+284 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bS_\bO_\b<_\bN_\b>, internal::DimensionSO(N)>_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be;\n+285\n+289\n+295 VectorN2 _\bv_\be_\bc(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H =\n+296 boost::none) const;\n+297\n+299 template >\n+_\b3_\b0_\b0 static Matrix _\bV_\be_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\bs() {\n+301 constexpr size_t N2 = static_cast(N * N);\n+302 Eigen::Matrix G;\n+303 for (size_t j = 0; j < dimension; j++) {\n+304 const auto X = _\bH_\ba_\bt(Vector::Unit(dimension, j));\n+305 G.col(j) = Eigen::Map(X.data());\n+306 }\n+307 return G;\n+308 }\n+309\n+311 template >\n+_\b3_\b1_\b2 static Matrix _\bV_\be_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\bs(size_t n = 0) {\n+313 const size_t n2 = n * n, dim = Dimension(n);\n+314 Matrix G(n2, dim);\n+315 for (size_t j = 0; j < dim; j++) {\n+316 const auto X = _\bH_\ba_\bt(Vector::Unit(dim, j));\n+317 G.col(j) = Eigen::Map(X.data(), n2, 1);\n+318 }\n+319 return G;\n+320 }\n+321\n+325\n+326 template \n+327 friend void save(Archive&, _\bS_\bO&, const unsigned int);\n+328 template \n+329 friend void load(Archive&, _\bS_\bO&, const unsigned int);\n+330 template \n+331 friend void serialize(Archive&, _\bS_\bO&, const unsigned int);\n+332 friend class boost::serialization::access;\n+333 friend class _\bR_\bo_\bt_\b3; // for serialize\n+334\n+336};\n+337\n+338using SOn = SO;\n 339\n-341 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\ba_\bp_\bp_\bl_\by(const _\bU_\bn_\ba_\br_\by& op) const;\n-342\n-351 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\ba_\bp_\bp_\bl_\by(const UnaryAssignment& op) const;\n-352\n-354 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be& g, const Binary& op) const;\n-355\n-_\b3_\b5_\b8 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\bc_\bh_\bo_\bo_\bs_\be(const L& label, size_t index) const {\n-359 _\bN_\bo_\bd_\be_\bP_\bt_\br newRoot = _\br_\bo_\bo_\bt_\b_->_\bc_\bh_\bo_\bo_\bs_\be(label, index);\n-360 return _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(newRoot);\n-361 }\n-362\n-364 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be combine(const L& label, size_t cardinality,\n-365 const Binary& op) const;\n-366\n-_\b3_\b6_\b8 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be _\bc_\bo_\bm_\bb_\bi_\bn_\be(const _\bL_\ba_\bb_\be_\bl_\bC& labelC, const Binary& op) const {\n-369 return _\bc_\bo_\bm_\bb_\bi_\bn_\be(labelC.first, labelC.second, op);\n-370 }\n-371\n-373 void _\bd_\bo_\bt(std::ostream& os, const LabelFormatter& labelFormatter,\n-374 const ValueFormatter& valueFormatter, bool showZero = true) const;\n-375\n-377 void _\bd_\bo_\bt(const std::string& name, const LabelFormatter& labelFormatter,\n-378 const ValueFormatter& valueFormatter, bool showZero = true) const;\n-379\n-381 std::string _\bd_\bo_\bt(const LabelFormatter& labelFormatter,\n-382 const ValueFormatter& valueFormatter,\n-383 bool showZero = true) const;\n-384\n+340/*\n+341 * Specialize dynamic Hat and Vee, because recursion depends on dynamic\n+nature.\n+342 * The definition is in SOn.cpp. Fixed-size SO3 and SO4 have their own\n+version,\n+343 * and implementation for other fixed N is in SOn-inl.h.\n+344 */\n+345\n+346template <>\n+347GTSAM_EXPORT\n+348Matrix _\bS_\bO_\bn_\b:_\b:_\bH_\ba_\bt(const Vector& xi);\n+349\n+350template <>\n+351GTSAM_EXPORT\n+352Vector _\bS_\bO_\bn_\b:_\b:_\bV_\be_\be(const Matrix& X);\n+353\n+354/*\n+355 * Specialize dynamic compose and between, because the derivative is\n+unknowable\n+356 * by the LieGroup implementations, who return a fixed-size matrix for H2.\n+357 */\n+358\n+359using DynamicJacobian = OptionalJacobian;\n+360\n+361template <>\n+362GTSAM_EXPORT\n+363SOn LieGroup::compose(const SOn& g, DynamicJacobian H1,\n+364 DynamicJacobian H2) const;\n+365\n+366template <>\n+367GTSAM_EXPORT\n+368SOn LieGroup::between(const SOn& g, DynamicJacobian H1,\n+369 DynamicJacobian H2) const;\n+370\n+371/*\n+372 * Specialize dynamic vec.\n+373 */\n+374template <>\n+375GTSAM_EXPORT\n+376typename SOn::VectorN2 _\bS_\bO_\bn_\b:_\b:_\bv_\be_\bc(DynamicJacobian H) const;\n+377\n+379template\n+_\b3_\b8_\b0void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(\n+381 Archive& ar, _\bS_\bO_\bn& Q,\n+382 const unsigned int file_version\n+383) {\n+384 Matrix& M = Q.matrix_;\n+385 ar& BOOST_SERIALIZATION_NVP(M);\n+386}\n 387\n-388 // internal use only\n-389 explicit _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bN_\bo_\bd_\be_\bP_\bt_\br& root);\n-390\n-391 // internal use only\n-392 template _\bN_\bo_\bd_\be_\bP_\bt_\br\n-393 compose(Iterator begin, Iterator end, const L& label) const;\n+388/*\n+389 * Define the traits. internal::LieGroup provides both Lie group and\n+Testable\n+390 */\n+391\n+392template \n+_\b3_\b9_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bO> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp> {};\n 394\n-396\n-397 private:\n-_\b3_\b9_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-400 template \n-401 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-402 ar& BOOST_SERIALIZATION_NVP(_\br_\bo_\bo_\bt_\b_);\n-403 }\n-404 }; // DecisionTree\n-405\n-406 template \n-_\b4_\b0_\b7 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n-408\n-412 template\n-_\b4_\b1_\b3 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b> _\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>& f,\n-414 const typename _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>_\b:_\b:_\bU_\bn_\ba_\br_\by& op) {\n-415 return f._\ba_\bp_\bp_\bl_\by(op);\n-416 }\n-417\n-419 template\n-_\b4_\b2_\b0 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b> _\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>& f,\n-421 const typename DecisionTree::UnaryAssignment& op) {\n-422 return f._\ba_\bp_\bp_\bl_\by(op);\n-423 }\n-424\n-426 template\n-_\b4_\b2_\b7 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b> _\ba_\bp_\bp_\bl_\by(const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>& f,\n-428 const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bY_\b>& g,\n-429 const typename DecisionTree::Binary& op) {\n-430 return f._\ba_\bp_\bp_\bl_\by(g, op);\n-431 }\n-432\n-439 template \n-_\b4_\b4_\b0 std::pair, _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bT_\b2_\b> > _\bu_\bn_\bz_\bi_\bp(\n-441 const _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be >& input) {\n-442 return std::make_pair(\n-443 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bT_\b1_\b>(input, [](std::pair i) { return i.first; }),\n-444 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bL_\b,_\b _\bT_\b2_\b>(input,\n-445 [](std::pair i) { return i.second; }));\n-446 }\n-447\n-448} // namespace gtsam\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b._\bh\n-An assignment from labels to a discrete value index (size_t)\n+395template \n+_\b3_\b9_\b6struct _\bt_\br_\ba_\bi_\bt_\bs> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp> {};\n+397\n+398} // namespace gtsam\n+399\n+400#include \"_\bS_\bO_\bn_\b-_\bi_\bn_\bl_\b._\bh\"\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:317\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd_\b._\bh\n+make_shared trampoline function to ensure proper alignment\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bS_\bO\n+constexpr int DimensionSO(int N)\n+Calculate dimensionality of SO manifold, or return Dynamic if so.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:39\n+_\bS_\bO_\bn_\b-_\bi_\bn_\bl_\b._\bh\n+Template implementations for SO(n)\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bu_\bn_\bz_\bi_\bp\n-std::pair< DecisionTree< L, T1 >, DecisionTree< L, T2 > > unzip(const\n-DecisionTree< L, std::pair< T1, T2 > > &input)\n-unzip a DecisionTree with std::pair values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:440\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-DecisionTree< L, Y > apply(const DecisionTree< L, Y > &f, const typename\n-DecisionTree< L, Y >::Unary &op)\n-free versions of apply\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:413\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n+std::string serialize(const T &input)\n+serializes to a string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n+bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n+DenseBase< MATRIX > &B, double tol=1e-9)\n+equals with a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt\n-An assignment from labels to value index (size_t).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Assignment.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bL_\be_\ba_\bf\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bh_\bo_\bi_\bc_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:172\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-a decision tree is a function from assignments to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\ba_\bp_\bp_\bl_\by\n-DecisionTree apply(const Unary &op) const\n-apply Unary operation \"op\" to f\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:889\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bc_\bh_\bo_\bo_\bs_\be\n-DecisionTree choose(const L &label, size_t index) const\n-create a new function where value(label)==index It's like \"restrict\" in\n-Darwiche09book pg329,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:358\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bt_\bF_\br_\bo_\bm\n-NodePtr convertFrom(const typename DecisionTree< M, X >::NodePtr &f, std::\n-function< L(const M &)> L_of_M, std::function< Y(const X &)> Y_of_X) const\n-Convert from a DecisionTree to DecisionTree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:671\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bc_\bo_\bm_\bb_\bi_\bn_\be\n-DecisionTree combine(const LabelC &labelC, const Binary &op) const\n-combine with LabelC for convenience\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:368\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bc_\br_\be_\ba_\bt_\be\n-NodePtr create(It begin, It end, ValueIt beginY, ValueIt endY) const\n-Internal recursive function to create from keys, cardinalities, and Y values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:630\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\b~_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-virtual ~DecisionTree()=default\n-Make virtual.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bC_\bo_\bm_\bp_\ba_\br_\be\n-static bool DefaultCompare(const Y &a, const Y &b)\n-Default method for comparison of two objects of type Y.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\bP_\bt_\br\n-typename Node::Ptr NodePtr\n----------------------\u00e2\u0080\u0094 Node base class ------------------------\u00e2\u0080\u0094\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:143\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bl_\ba_\bb_\be_\bl_\bs\n-std::set< L > labels() const\n-Retrieve all unique labels as a set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:853\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty() const\n-Check if tree is empty.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:257\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bv_\bi_\bs_\bi_\bt\n-void visit(Func f) const\n-Visit all leaves in depth-first fashion.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:736\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bv_\bi_\bs_\bi_\bt_\bL_\be_\ba_\bf\n-void visitLeaf(Func f) const\n-Visit all leaves in depth-first fashion.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:773\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bU_\bn_\ba_\br_\by\n-std::function< Y(const Y &)> Unary\n-Handy typedefs for unary and binary function types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bf_\bo_\bl_\bd\n-X fold(Func f, X x0) const\n-Fold a binary function over the tree, returning accumulator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:833\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\b_\n-NodePtr root_\n-A DecisionTree just contains the root. TODO(dellaert): make protected.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:146\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s, const LabelFormatter &labelFormatter, const\n-ValueFormatter &valueFormatter) const\n-GTSAM-style print.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:872\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bc_\bo_\bm_\bb_\bi_\bn_\be\n-DecisionTree combine(const L &label, size_t cardinality, const Binary &op)\n-const\n-combine subtrees on key with binary operation \"op\"\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:937\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bv_\bi_\bs_\bi_\bt_\bW_\bi_\bt_\bh\n-void visitWith(Func f) const\n-Visit all leaves in depth-first fashion.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:816\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-const Y & operator()(const Assignment< L > &x) const\n-evaluate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:884\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bd_\bo_\bt\n-void dot(std::ostream &os, const LabelFormatter &labelFormatter, const\n-ValueFormatter &valueFormatter, bool showZero=true) const\n-output to graphviz format, stream version\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:949\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:399\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const DecisionTree &q) const\n-equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:879\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bL_\ba_\bb_\be_\bl_\bC\n-std::pair< L, size_t > LabelC\n-A label annotated with cardinality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bn_\br_\bL_\be_\ba_\bv_\be_\bs\n-size_t nrLeaves() const\n-Return the number of leaves in the tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:823\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-DecisionTree()\n-Default constructor (for serialization)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:462\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be\n----------------------\u00e2\u0080\u0094 Node base class ------------------------\u00e2\u0080\u0094\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+A CRTP helper class that implements Lie group methods Prerequisites: methods\n+operator*,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bS_\bO_\b<_\b _\bN_\b _\b>_\b,_\b _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bS_\bO_\b(_\bN_\b)_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n+static SO< N > Retract(const TangentVector &v)\n+Retract at origin: possible in Lie group because it has an identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Both LieGroupTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO\n+Manifold of special orthogonal rotation matrices SO.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bF_\br_\bo_\bm_\bM_\ba_\bt_\br_\bi_\bx\n+static SO FromMatrix(const Eigen::MatrixBase< Derived > &R)\n+Named constructor from Eigen Matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n+static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)\n+Exponential map at identity - create a rotation from canonical coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\bs\n+static Matrix VectorizedGenerators()\n+Calculate N^2 x dim matrix of vectorized Lie algebra generators for SO(N)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:300\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n+SO inverse() const\n+inverse of a rotation = transpose\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:193\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bv_\be_\bc\n+VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::\n+none) const\n+Return vectorized rotation matrix in column order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bC_\bh_\bo_\br_\bd_\ba_\bl_\bM_\be_\ba_\bn\n+static SO ChordalMean(const std::vector< SO > &rotations)\n+Named constructor that finds chordal mean , currently only defined for SO3.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+SO operator*(const SO &other) const\n+Multiplication.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:175\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bV_\be_\be\n+static TangentVector Vee(const MatrixNN &X)\n+Inverse of Hat. See note about xi element order in Hat.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\b_\n+MatrixNN matrix_\n+Rotation matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp\n+static TangentVector Logmap(const SO &R, ChartJacobian H=boost::none)\n+Log map at identity - returns the canonical coordinates of this rotation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be\n+static SO AxisAngle(const Vector3 &axis, double theta)\n+Constructor from axis and angle. Only defined for SO3.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n+MatrixDD AdjointMap() const\n+Adjoint map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO4.cpp:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bH_\ba_\bt\n+static void Hat(const Vector &xi, Eigen::Ref< MatrixNN > X)\n+In-place version of Hat (see details there), implements recursion.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static SO Identity()\n+SO identity for N >= 2.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:182\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bD_\bi_\bm\n+static int Dim()\n+Return compile-time dimensionality: fixed size N or Eigen::Dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:203\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bH_\ba_\bt\n+static MatrixNN Hat(const TangentVector &xi)\n+Hat operator creates Lie algebra element corresponding to d-vector, where d is\n+the dimensionality of ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+static MatrixDD ExpmapDerivative(const TangentVector &omega)\n+Derivative of Expmap, currently only defined for SO3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+static MatrixDD LogmapDerivative(const TangentVector &omega)\n+Derivative of Logmap, currently only defined for SO3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bS_\bO\n+SO(const SO< M > &R)\n+Construct dynamic SO(n) from Fixed SO\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bS_\bO\n+SO(size_t n=0)\n+Construct SO identity for N == Eigen::Dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bS_\bO\n+SO()\n+Construct SO identity for N >= 2.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bL_\bi_\bf_\bt\n+static SO Lift(size_t n, const Eigen::MatrixBase< Derived > &R)\n+Named constructor from lower dimensional matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm\n+static SO Random(std::mt19937 &rng, size_t n=0)\n+Random SO(n) element (no big claims about uniformity). SO(3) is specialized in\n+SO3....\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static SO Identity(size_t n=0)\n+SO identity for N == Eigen::Dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:188\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+const MatrixNN & matrix() const\n+Return matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm\n+static SO Random(std::mt19937 &rng)\n+Random SO(N) element (no big claims about uniformity)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:145\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo\n+static SO ClosestTo(const MatrixNN &M)\n+Named constructor that finds SO(n) matrix closest to M in Frobenius norm,\n+currently only defined for ...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bS_\bO\n+SO(const Eigen::AngleAxisd &angleAxis)\n+Constructor from AngleAxisd.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\bs\n+static Matrix VectorizedGenerators(size_t n=0)\n+Calculate n^2 x dim matrix of vectorized Lie algebra generators for SO(n)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:312\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bS_\bO\n+SO(const Eigen::MatrixBase< Derived > &R)\n+Constructor from Eigen Matrix, dynamic version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:240\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl\n+static TangentVector Local(const SO &R, ChartJacobian H=boost::none)\n+Inverse of Retract.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n+static SO Retract(const TangentVector &xi, ChartJacobian H=boost::none)\n+Retract uses Cayley map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:40\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bS_\bO_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00245_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00194_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
DiscreteLookupDAG.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n-\n-\n+\n+\n+\n
23
\n
24#include <boost/shared_ptr.hpp>
\n
25#include <string>
\n
26#include <utility>
\n
27#include <vector>
\n
28
\n
29namespace gtsam {
\n@@ -193,17 +193,17 @@\n
\n
136
\n
137// traits
\n
138template <>
\n
139struct traits<DiscreteLookupDAG> : public Testable<DiscreteLookupDAG> {};
\n
140
\n
141} // namespace gtsam
\n-\n-
Factor Graph Base Class.
\n-
Bayes network.
\n+\n+
Bayes network.
\n+
Factor Graph Base Class.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n \n
A Bayes net made from discrete conditional distributions.
Definition DiscreteBayesNet.h:38
\n@@ -220,13 +220,13 @@\n
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n
Definition Conditional.h:64
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -88,18 +88,18 @@\n 136\n 137// traits\n 138template <>\n _\b1_\b3_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bL_\bo_\bo_\bk_\bu_\bp_\bD_\bA_\bG> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n 140\n 141} // namespace gtsam\n _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n Bayes network.\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00260_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00257_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
DiscreteConditional.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n
21#include <gtsam/inference/Conditional-inst.h>
\n-\n-\n+\n+\n
24
\n
25#include <boost/make_shared.hpp>
\n
26#include <boost/shared_ptr.hpp>
\n
27#include <string>
\n
28#include <vector>
\n
29
\n
30namespace gtsam {
\n@@ -277,16 +277,16 @@\n
288// DiscreteConditional
\n
289
\n
290// traits
\n
291template <>
\n
292struct traits<DiscreteConditional> : public Testable<DiscreteConditional> {};
\n
293
\n
294} // namespace gtsam
\n-\n-
signatures for conditional densities
\n+\n+
signatures for conditional densities
\n
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
string markdown(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of markdown.
Definition DiscreteValues.cpp:129
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n@@ -313,13 +313,13 @@\n
Definition Conditional.h:64
\n
the error.
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00266_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00614_source.html", "comments": ["Files 87% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesNet.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
DiscreteBayesTree.h
\n+
BayesNet.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4* Atlanta, Georgia 30332-0415
\n+
5* All Rights Reserved
\n+
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8 * See LICENSE for the license information
\n+
8* See LICENSE for the license information
\n
9
\n-
10 * -------------------------------------------------------------------------- */
\n+
10* -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n+
19#pragma once
\n+
20
\n+\n
22
\n-\n-\n-\n-\n-\n-
28
\n-
29#include <string>
\n-
30
\n-
31namespace gtsam {
\n-
32
\n-
33// Forward declarations
\n-
34class DiscreteConditional;
\n-
35class VectorValues;
\n-
36
\n-
37/* ************************************************************************* */
\n-
\n-
39class GTSAM_EXPORT DiscreteBayesTreeClique
\n-
40 : public BayesTreeCliqueBase<DiscreteBayesTreeClique, DiscreteFactorGraph> {
\n-
41 public:
\n-\n-\n-
44 Base;
\n-
45 typedef boost::shared_ptr<This> shared_ptr;
\n-
46 typedef boost::weak_ptr<This> weak_ptr;
\n-\n-
48 virtual ~DiscreteBayesTreeClique() {}
\n-\n-
50 const boost::shared_ptr<DiscreteConditional>& conditional)
\n-
51 : Base(conditional) {}
\n-
52
\n-
\n-\n-
55 const std::string& s = "Clique: ",
\n-
56 const KeyFormatter& formatter = DefaultKeyFormatter) const {
\n-
57 conditional_->printSignature(s, formatter);
\n-
58 }
\n-
\n-
59
\n-
60 //** evaluate conditional probability of subtree for given DiscreteValues */
\n-
61 double evaluate(const DiscreteValues& values) const;
\n-
62
\n-
63 //** (Preferred) sugar for the above for given DiscreteValues */
\n-
64 double operator()(const DiscreteValues& values) const {
\n-
65 return evaluate(values);
\n-
66 }
\n-
67};
\n+
23#include <boost/shared_ptr.hpp>
\n+
24#include <string>
\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
28class HybridValues;
\n+
29
\n+
34template <class CONDITIONAL>
\n+
\n+
35class BayesNet : public FactorGraph<CONDITIONAL> {
\n+
36 private:
\n+\n+
38
\n+
39 public:
\n+
40 typedef typename boost::shared_ptr<CONDITIONAL>
\n+\n+
42
\n+
43 protected:
\n+
46
\n+\n+
49
\n+
51 template <typename ITERATOR>
\n+
\n+
52 BayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
\n+
53 : Base(firstConditional, lastConditional) {}
\n+
\n+
54
\n+
\n+
60 BayesNet(std::initializer_list<sharedConditional> conditionals)
\n+
61 : Base(conditionals) {}
\n
\n+
62
\n+
64
\n+
65 public:
\n
68
\n-
69/* ************************************************************************* */
\n-
\n-
74class GTSAM_EXPORT DiscreteBayesTree
\n-
75 : public BayesTree<DiscreteBayesTreeClique> {
\n-
76 private:
\n-\n-
78
\n-
79 public:
\n-
80 typedef DiscreteBayesTree This;
\n-
81 typedef boost::shared_ptr<This> shared_ptr;
\n+
70 void print(
\n+
71 const std::string& s = "BayesNet",
\n+
72 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n+
73
\n+
77
\n+
79 void dot(std::ostream& os,
\n+
80 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
81 const DotWriter& writer = DotWriter()) const;
\n
82
\n-
85
\n-\n-
87
\n-
89 bool equals(const This& other, double tol = 1e-9) const;
\n-
90
\n-
91 //** evaluate probability for given DiscreteValues */
\n-
92 double evaluate(const DiscreteValues& values) const;
\n-
93
\n-
94 //** (Preferred) sugar for the above for given DiscreteValues */
\n-
95 double operator()(const DiscreteValues& values) const {
\n-
96 return evaluate(values);
\n-
97 }
\n+
84 std::string dot(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
85 const DotWriter& writer = DotWriter()) const;
\n+
86
\n+
88 void saveGraph(const std::string& filename,
\n+
89 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
90 const DotWriter& writer = DotWriter()) const;
\n+
91
\n+
95
\n+
96 // Expose HybridValues version of logProbability.
\n+
97 double logProbability(const HybridValues& x) const;
\n
98
\n-
102
\n-
104 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
105 const DiscreteFactor::Names& names = {}) const;
\n+
99 // Expose HybridValues version of evaluate.
\n+
100 double evaluate(const HybridValues& c) const;
\n+
101
\n+
103};
\n+
\n+
104
\n+
105} // namespace gtsam
\n
106
\n-
108 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
109 const DiscreteFactor::Names& names = {}) const;
\n-
110
\n-
112};
\n-
\n-
113
\n-
114} // namespace gtsam
\n-\n-\n-
Base class for cliques of a BayesTree.
\n-
Base class for conditional densities.
\n-
Bayes Tree is a tree of cliques of a Bayes Chain.
\n+
107#include <gtsam/inference/BayesNet-inst.h>
\n+
Factor Graph Base Class.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
string html(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of html.
Definition DiscreteValues.cpp:134
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A clique in a DiscreteBayesTree.
Definition DiscreteBayesTree.h:40
\n-
void printSignature(const std::string &s="Clique: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
print index signature only
Definition DiscreteBayesTree.h:54
\n-
A Bayes tree representing a Discrete density.
Definition DiscreteBayesTree.h:75
\n-
DiscreteBayesTree()
Default constructor, creates an empty Bayes tree.
Definition DiscreteBayesTree.h:86
\n-
A map from keys to values.
Definition DiscreteValues.h:34
\n-
Bayes tree.
Definition BayesTree.h:67
\n-
This is the base class for BayesTree cliques.
Definition BayesTreeCliqueBase.h:50
\n-
The Factor::error simply extracts the.
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n+
BayesNet(std::initializer_list< sharedConditional > conditionals)
Constructor that takes an initializer list of shared pointers.
Definition BayesNet.h:60
\n+
void print(const std::string &s="BayesNet", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print out graph
Definition BayesNet-inst.h:32
\n+
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
Output to graphviz format, stream version.
Definition BayesNet-inst.h:46
\n+
boost::shared_ptr< CONDITIONAL > sharedConditional
A shared pointer to a conditional.
Definition BayesNet.h:41
\n+
BayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
Construct from iterator over conditionals.
Definition BayesNet.h:52
\n+
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
output to file with graphviz format.
Definition BayesNet-inst.h:83
\n+
BayesNet()
Default constructor as an empty BayesNet.
Definition BayesNet.h:48
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n+
the error.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,155 +1,141 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DiscreteBayesTree.h\n+BayesNet.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4* Atlanta, Georgia 30332-0415\n+5* All Rights Reserved\n+6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8 * See LICENSE for the license information\n+8* See LICENSE for the license information\n 9\n-10 * -------------------------------------------------------------------------\n+10* -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n 22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh>\n-28\n-29#include \n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32\n-33// Forward declarations\n-34class DiscreteConditional;\n-35class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n-36\n-37/* *************************************************************************\n-*/\n-_\b3_\b9class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-40 : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be {\n-41 public:\n-42 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be _\bT_\bh_\bi_\bs;\n-43 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b,_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>\n-44 _\bB_\ba_\bs_\be;\n-45 typedef boost::shared_ptr shared_ptr;\n-46 typedef boost::weak_ptr weak_ptr;\n-47 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n-48 virtual _\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n-49 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be(\n-50 const boost::shared_ptr& conditional)\n-51 : _\bB_\ba_\bs_\be(conditional) {}\n-52\n-_\b5_\b4 void _\bp_\br_\bi_\bn_\bt_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be(\n-55 const std::string& s = \"Clique: \",\n-56 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const {\n-57 conditional_->printSignature(s, formatter);\n-58 }\n-59\n-60 //** evaluate conditional probability of subtree for given DiscreteValues */\n-61 double evaluate(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n+23#include \n+24#include \n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+29\n+34template \n+_\b3_\b5class _\bB_\ba_\by_\be_\bs_\bN_\be_\bt : public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n+36 private:\n+37 typedef _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b> _\bB_\ba_\bs_\be;\n+38\n+39 public:\n+40 typedef typename boost::shared_ptr\n+_\b4_\b1 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+42\n+43 protected:\n+46\n+_\b4_\b8 _\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n+49\n+51 template \n+_\b5_\b2 _\bB_\ba_\by_\be_\bs_\bN_\be_\bt(ITERATOR firstConditional, ITERATOR lastConditional)\n+53 : _\bB_\ba_\bs_\be(firstConditional, lastConditional) {}\n+54\n+_\b6_\b0 _\bB_\ba_\by_\be_\bs_\bN_\be_\bt(std::initializer_list conditionals)\n+61 : _\bB_\ba_\bs_\be(conditionals) {}\n 62\n-63 //** (Preferred) sugar for the above for given DiscreteValues */\n-64 double operator()(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const {\n-65 return evaluate(values);\n-66 }\n-67};\n+64\n+65 public:\n 68\n-69/* *************************************************************************\n-*/\n-_\b7_\b4class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-75 : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be {\n-76 private:\n-77 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bB_\ba_\bs_\be;\n-78\n-79 public:\n-80 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-81 typedef boost::shared_ptr shared_ptr;\n+70 void _\bp_\br_\bi_\bn_\bt(\n+71 const std::string& s = \"BayesNet\",\n+72 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n+73\n+77\n+79 void _\bd_\bo_\bt(std::ostream& os,\n+80 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+81 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n 82\n-85\n-_\b8_\b6 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() {}\n-87\n-89 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n-90\n-91 //** evaluate probability for given DiscreteValues */\n-92 double evaluate(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n-93\n-94 //** (Preferred) sugar for the above for given DiscreteValues */\n-95 double operator()(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& values) const {\n-96 return evaluate(values);\n-97 }\n+84 std::string _\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+85 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n+86\n+88 void _\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n+89 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+90 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n+91\n+95\n+96 // Expose HybridValues version of logProbability.\n+97 double logProbability(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n 98\n-102\n-104 std::string markdown(const KeyFormatter& keyFormatter =\n-DefaultKeyFormatter,\n-105 const DiscreteFactor::Names& names = {}) const;\n+99 // Expose HybridValues version of evaluate.\n+100 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+101\n+103};\n+104\n+105} // namespace gtsam\n 106\n-108 std::string _\bh_\bt_\bm_\bl(const KeyFormatter& keyFormatter = DefaultKeyFormatter,\n-109 const DiscreteFactor::Names& names = {}) const;\n-110\n-112};\n-113\n-114} // namespace gtsam\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n-Base class for cliques of a BayesTree.\n-_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-Base class for conditional densities.\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Bayes Tree is a tree of cliques of a Bayes Chain.\n+107#include \n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bt_\bm_\bl\n-string html(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n-const DiscreteValues::Names &names)\n-Free version of html.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:134\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-A clique in a DiscreteBayesTree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesTree.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt_\bS_\bi_\bg_\bn_\ba_\bt_\bu_\br_\be\n-void printSignature(const std::string &s=\"Clique: \", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print index signature only\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesTree.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-A Bayes tree representing a Discrete density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesTree.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-DiscreteBayesTree()\n-Default constructor, creates an empty Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesTree.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-A map from keys to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-This is the base class for BayesTree cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:50\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+A BayesNet is a tree of conditionals, stored in elimination order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+BayesNet(std::initializer_list< sharedConditional > conditionals)\n+Constructor that takes an initializer list of shared pointers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"BayesNet\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const override\n+print out graph\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bd_\bo_\bt\n+void dot(std::ostream &os, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n+Output to graphviz format, stream version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+boost::shared_ptr< CONDITIONAL > sharedConditional\n+A shared pointer to a conditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+BayesNet(ITERATOR firstConditional, ITERATOR lastConditional)\n+Construct from iterator over conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n+void saveGraph(const std::string &filename, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n+output to file with graphviz format.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+BayesNet()\n+Default constructor as an empty BayesNet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n+DotWriter is a helper class for writing graphviz .dot files.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n+_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+the error.\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n- * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n+ * _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00275_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00302_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
20#pragma once
\n
21
\n-
22#include <gtsam/geometry/Cal3.h>
\n-\n+
22#include <gtsam/geometry/Cal3.h>
\n+\n
24#include <boost/shared_ptr.hpp>
\n
25
\n
26namespace gtsam {
\n
27
\n
\n
42class GTSAM_EXPORT Cal3DS2_Base : public Cal3 {
\n
43 protected:
\n@@ -214,16 +214,16 @@\n
168 ar& BOOST_SERIALIZATION_NVP(p2_);
\n
169 ar& BOOST_SERIALIZATION_NVP(tol_);
\n
170 }
\n
171
\n
173};
\n
\n
174}
\n-
Common code for all Calibration models.
\n-
2D Point
\n+
Common code for all Calibration models.
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Common base class for all calibration models.
Definition Cal3.h:69
\n
Calibration of a camera with radial distortion.
Definition Cal3DS2_Base.h:42
\n
Cal3DS2_Base()=default
Default Constructor with only unit focal length.
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00281.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01289.html", "comments": ["Files 93% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartProjectionPoseFactor.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
BearingRange.h File Reference
\n+
SmartProjectionPoseFactor.h File Reference
\n
\n
\n \n-

Bearing-Range product. \n+

Smart factor on poses, assuming camera calibration is fixed. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::BearingRange< A1, A2, B, R >
 Bearing-Range product for a particular A1,A2 combination will use the functors above to create a similar functor of type A1*A2 -> pair<Bearing::return_type,Range::return_type> For example BearingRange<Pose2,Point2>(pose,point) will return pair<Rot2,double> and BearingRange<Pose3,Point3>(pose,point) will return pair<Unit3,double> More...
class  gtsam::SmartProjectionPoseFactor< CALIBRATION >
 If you are using the factor, please cite: L. More...
 
struct  gtsam::traits< BearingRange< A1, A2 > >
 
struct  gtsam::HasBearing< A1, A2, RT >
 
struct  gtsam::HasRange< A1, A2, RT >
struct  gtsam::traits< SmartProjectionPoseFactor< CALIBRATION > >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Bearing-Range product.

\n-
Date
July, 2015
\n-
Author
Frank Dellaert
\n+

Smart factor on poses, assuming camera calibration is fixed.

\n+
Author
Luca Carlone
\n+
\n+Chris Beall
\n+
\n+Zsolt Kira
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,38 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BearingRange.h File Reference\n-Bearing-Range product. _\bM_\bo_\br_\be_\b._\b._\b.\n+SmartProjectionPoseFactor.h File Reference\n+Smart factor on poses, assuming camera calibration is fixed. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b,_\b _\bB_\b,_\b _\bR_\b _\b>\n- Bearing-Range product for a particular A1,A2 combination will use the\n- functors above to create a similar functor of type A1*A2 -\n-\u00a0 > pair For example\n- BearingRange(pose,point) will return pair\n- and BearingRange(pose,point) will return\n- pair _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n+\u00a0 If you are using the factor, please cite: L. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b,_\b _\bR_\bT_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be_\b<_\b _\bA_\b1_\b,_\b _\bA_\b2_\b,_\b _\bR_\bT_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Bearing-Range product.\n- Date\n- July, 2015\n+Smart factor on poses, assuming camera calibration is fixed.\n Author\n- Frank Dellaert\n+ Luca Carlone\n+ Chris Beall\n+ Zsolt Kira\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n+ * _\bs_\bl_\ba_\bm\n+ * _\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\bo_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00281_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00335_source.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/BearingRange.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Unit3.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
BearingRange.h
\n+
Unit3.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n+
3 * Atlanta, Georgia 30332-0415
\n+
4 * All Rights Reserved
\n+
5 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n+
12/*
\n+
13 * @file Unit3.h
\n+
14 * @date Feb 02, 2011
\n+
15 * @author Can Erdogan
\n+
16 * @author Frank Dellaert
\n+
17 * @author Alex Trevor
\n+
18 * @brief Develop a Unit3 class - basically a point on a unit sphere
\n+
19 */
\n
20
\n-
21#include <gtsam/base/Manifold.h>
\n-
22#include <gtsam/base/Testable.h>
\n-\n-
24#include <boost/concept/assert.hpp>
\n-
25#include <boost/serialization/nvp.hpp>
\n-
26#include <iostream>
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
30// Forward declaration of Bearing functor which should be of A1*A2 -> return_type
\n-
31// For example Bearing<Pose3,Point3>(pose,point), defined in Pose3.h will return Unit3
\n-
32// At time of writing only Pose2 and Pose3 specialize this functor.
\n-
33template <typename A1, typename A2>
\n-
34struct Bearing;
\n+
21#pragma once
\n+
22
\n+\n+\n+
25#include <gtsam/base/Manifold.h>
\n+
26#include <gtsam/base/Vector.h>
\n+\n+
28#include <gtsam/base/Matrix.h>
\n+
29#include <gtsam/dllexport.h>
\n+
30
\n+
31#include <boost/optional.hpp>
\n+
32
\n+
33#include <random>
\n+
34#include <string>
\n
35
\n-
36// Forward declaration of Range functor which should be of A1*A2 -> return_type
\n-
37// For example Range<Pose2,Pose2>(T1,T2), defined in Pose2.h will return double
\n-
38// At time of writing Pose2, Pose3, and several Camera variants specialize this for several types
\n-
39template <typename A1, typename A2>
\n-
40struct Range;
\n+
36#ifdef GTSAM_USE_TBB
\n+
37#include <mutex> // std::mutex
\n+
38#endif
\n+
39
\n+
40namespace gtsam {
\n
41
\n-
48template <typename A1, typename A2,
\n-
49 typename B = typename Bearing<A1, A2>::result_type,
\n-
50 typename R = typename Range<A1, A2>::result_type>
\n-
\n-\n-
52private:
\n-
53 B bearing_;
\n-
54 R range_;
\n-
55
\n-
56public:
\n-
57 enum { dimB = traits<B>::dimension };
\n-
58 enum { dimR = traits<R>::dimension };
\n-
59 enum { dimension = dimB + dimR };
\n+
\n+
43class GTSAM_EXPORT Unit3 {
\n+
44
\n+
45private:
\n+
46
\n+
47 Vector3 p_;
\n+
48 mutable boost::optional<Matrix32> B_;
\n+
49 mutable boost::optional<Matrix62> H_B_;
\n+
50
\n+
51#ifdef GTSAM_USE_TBB
\n+
52 mutable std::mutex B_mutex_;
\n+
53#endif
\n+
54
\n+
55public:
\n+
56
\n+
57 enum {
\n+
58 dimension = 2
\n+
59 };
\n
60
\n
63
\n-
64 BearingRange() {}
\n-
65 BearingRange(const B& b, const R& r) : bearing_(b), range_(r) {}
\n-
66
\n-
70
\n-
72 const B& bearing() const { return bearing_; }
\n-
73
\n-
75 const R& range() const { return range_; }
\n-
76
\n-
\n-\n-
79 const A1& a1, const A2& a2,
\n-
80 OptionalJacobian<dimension, traits<A1>::dimension> H1 = boost::none,
\n-
81 OptionalJacobian<dimension, traits<A2>::dimension> H2 = boost::none) {
\n-
82 typename MakeJacobian<B, A1>::type HB1;
\n-
83 typename MakeJacobian<B, A2>::type HB2;
\n-
84 typename MakeJacobian<R, A1>::type HR1;
\n-
85 typename MakeJacobian<R, A2>::type HR2;
\n-
86
\n-
87 B b = Bearing<A1, A2>()(a1, a2, H1 ? &HB1 : 0, H2 ? &HB2 : 0);
\n-
88 R r = Range<A1, A2>()(a1, a2, H1 ? &HR1 : 0, H2 ? &HR2 : 0);
\n-
89
\n-
90 if (H1) *H1 << HB1, HR1;
\n-
91 if (H2) *H2 << HB2, HR2;
\n-
92 return BearingRange(b, r);
\n-
93 }
\n-
\n-
94
\n-
\n-
96 static B MeasureBearing(const A1& a1, const A2& a2) {
\n-
97 return Bearing<A1, A2>()(a1, a2);
\n-
98 }
\n-
\n-
99
\n-
\n-
101 static R MeasureRange(const A1& a1, const A2& a2) {
\n-
102 return Range<A1, A2>()(a1, a2);
\n-
103 }
\n-
\n-
104
\n+
\n+\n+
66 p_(1.0, 0.0, 0.0) {
\n+
67 }
\n+
\n+
68
\n+
70 explicit Unit3(const Vector3& p);
\n+
71
\n+
73 Unit3(double x, double y, double z);
\n+
74
\n+
77 explicit Unit3(const Point2& p, double f);
\n+
78
\n+
\n+
80 Unit3(const Unit3& u) {
\n+
81 p_ = u.p_;
\n+
82 }
\n+
\n+
83
\n+
\n+
85 Unit3& operator=(const Unit3 & u) {
\n+
86 p_ = u.p_;
\n+
87 B_ = u.B_;
\n+
88 H_B_ = u.H_B_;
\n+
89 return *this;
\n+
90 }
\n+
\n+
91
\n+
93 static Unit3 FromPoint3(const Point3& point, //
\n+
94 OptionalJacobian<2, 3> H = boost::none);
\n+
95
\n+
102 static Unit3 Random(std::mt19937 & rng);
\n+
103
\n+
105
\n
108
\n-
109 void print(const std::string& str = "") const {
\n-
110 std::cout << str;
\n-
111 traits<B>::Print(bearing_, "bearing ");
\n-
112 traits<R>::Print(range_, "range ");
\n-
113 }
\n-
114 bool equals(const BearingRange<A1, A2>& m2, double tol = 1e-8) const {
\n-
115 return traits<B>::Equals(bearing_, m2.bearing_, tol) &&
\n-
116 traits<R>::Equals(range_, m2.range_, tol);
\n+
109 friend std::ostream& operator<<(std::ostream& os, const Unit3& pair);
\n+
110
\n+
112 void print(const std::string& s = std::string()) const;
\n+
113
\n+
\n+
115 bool equals(const Unit3& s, double tol = 1e-9) const {
\n+
116 return equal_with_abs_tol(p_, s.p_, tol);
\n
117 }
\n-
118
\n+
\n+
119
\n
122
\n-
123 inline static size_t Dim() { return dimension; }
\n-
124 inline size_t dim() const { return dimension; }
\n-
125
\n-
126 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
\n-
127 typedef OptionalJacobian<dimension, dimension> ChartJacobian;
\n-
128
\n-
\n-
130 BearingRange retract(const TangentVector& xi) const {
\n-
131 B m1 = traits<B>::Retract(bearing_, xi.template head<dimB>());
\n-
132 R m2 = traits<R>::Retract(range_, xi.template tail<dimR>());
\n-
133 return BearingRange(m1, m2);
\n-
134 }
\n-
\n-
135
\n-
\n-
137 TangentVector localCoordinates(const BearingRange& other) const {
\n-
138 typename traits<B>::TangentVector v1 = traits<B>::Local(bearing_, other.bearing_);
\n-
139 typename traits<R>::TangentVector v2 = traits<R>::Local(range_, other.range_);
\n-
140 TangentVector v;
\n-
141 v << v1, v2;
\n-
142 return v;
\n+
129 const Matrix32& basis(OptionalJacobian<6, 2> H = boost::none) const;
\n+
130
\n+
132 Matrix3 skew() const;
\n+
133
\n+
135 Point3 point3(OptionalJacobian<3, 2> H = boost::none) const;
\n+
136
\n+
138 Vector3 unitVector(OptionalJacobian<3, 2> H = boost::none) const;
\n+
139
\n+
\n+
141 friend Point3 operator*(double s, const Unit3& d) {
\n+
142 return Point3(s * d.p_);
\n
143 }
\n
\n
144
\n+
146 double dot(const Unit3& q, OptionalJacobian<1,2> H1 = boost::none, //
\n+
147 OptionalJacobian<1,2> H2 = boost::none) const;
\n
148
\n-
149private:
\n-
151 template <class ARCHIVE>
\n-
152 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
153 ar& boost::serialization::make_nvp("bearing", bearing_);
\n-
154 ar& boost::serialization::make_nvp("range", range_);
\n-
155 }
\n-
156
\n-
157 friend class boost::serialization::access;
\n-
158
\n+
151 Vector2 error(const Unit3& q, OptionalJacobian<2, 2> H_q = boost::none) const;
\n+
152
\n+
155 Vector2 errorVector(const Unit3& q, OptionalJacobian<2, 2> H_p = boost::none, //
\n+
156 OptionalJacobian<2, 2> H_q = boost::none) const;
\n+
157
\n+
159 double distance(const Unit3& q, OptionalJacobian<1, 2> H = boost::none) const;
\n
160
\n-
161 // Alignment, see https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html
\n-
162 enum {
\n-
163 NeedsToAlign = (sizeof(B) % 16) == 0 || (sizeof(R) % 16) == 0
\n-
164 };
\n-
165public:
\n-\n-
167};
\n-
\n-
168
\n-
169// Declare this to be both Testable and a Manifold
\n-
170template <typename A1, typename A2>
\n-
\n-
171struct traits<BearingRange<A1, A2> >
\n-
172 : Testable<BearingRange<A1, A2> >,
\n-
173 internal::ManifoldTraits<BearingRange<A1, A2> > {};
\n-
\n-
174
\n-
175// Helper class for to implement Range traits for classes with a bearing method
\n-
176// For example, to specialize Bearing to Pose3 and Point3, using Pose3::bearing, it suffices to say
\n-
177// template <> struct Bearing<Pose3, Point3> : HasBearing<Pose3, Point3, Unit3> {};
\n-
178// where the third argument is used to indicate the return type
\n-
179template <class A1, typename A2, class RT>
\n-
\n-\n-
181 typedef RT result_type;
\n-
182 RT operator()(
\n-
183 const A1& a1, const A2& a2,
\n-\n-\n-
186 return a1.bearing(a2, H1, H2);
\n-
187 }
\n-
188};
\n-
\n-
189
\n-
190// Similar helper class for to implement Range traits for classes with a range method
\n-
191// For classes with overloaded range methods, such as PinholeCamera, this can even be templated:
\n-
192// template <typename T> struct Range<PinholeCamera, T> : HasRange<PinholeCamera, T, double> {};
\n-
193template <class A1, typename A2, class RT>
\n-
\n-
194struct HasRange {
\n-
195 typedef RT result_type;
\n-
196 RT operator()(
\n-
197 const A1& a1, const A2& a2,
\n-\n-\n-
200 return a1.range(a2, H1, H2);
\n-
201 }
\n-
202};
\n-
\n+
\n+
162 Unit3 cross(const Unit3& q) const {
\n+
163 return Unit3(p_.cross(q.p_));
\n+
164 }
\n+
\n+
165
\n+
\n+
167 Point3 cross(const Point3& q) const {
\n+
168 return point3().cross(q);
\n+
169 }
\n+
\n+
170
\n+
172
\n+
175
\n+
\n+
177 inline static size_t Dim() {
\n+
178 return 2;
\n+
179 }
\n+
\n+
180
\n+
\n+
182 inline size_t dim() const {
\n+
183 return 2;
\n+
184 }
\n+
\n+
185
\n+
\n+\n+\n+
188 RENORM
\n+
189 };
\n+
\n+
190
\n+
192 Unit3 retract(const Vector2& v, OptionalJacobian<2,2> H = boost::none) const;
\n+
193
\n+
195 Vector2 localCoordinates(const Unit3& s) const;
\n+
196
\n+
198
\n+
199private:
\n+
200
\n
203
\n-
204} // namespace gtsam
\n-
Base class and basic functions for Manifold types.
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n-
Concept check for values that can be used in unit tests.
\n-
Special class for optional Jacobian arguments.
\n+
204 friend class boost::serialization::access;
\n+
205 template<class ARCHIVE>
\n+
206 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
207 ar & BOOST_SERIALIZATION_NVP(p_);
\n+
208 }
\n+
209
\n+
211
\n+
212public:
\n+\n+
214};
\n+
\n+
215
\n+
216// Define GTSAM traits
\n+
\n+
217template<> struct traits<Unit3> : public internal::Manifold<Unit3> {
\n+
218};
\n+
\n+
219
\n+
\n+
220template<> struct traits<const Unit3> : public internal::Manifold<Unit3> {
\n+
221};
\n+
\n+
222
\n+
223} // namespace gtsam
\n+
224
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Base class and basic functions for Manifold types.
\n+
serialization for Vectors
\n+
typedef and functions to augment Eigen's VectorXd
\n+
3D Point
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n+
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM manifolds.
Definition Manifold.h:95
\n+
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Definition BearingRange.h:34
\n-
Definition BearingRange.h:40
\n-
Bearing-Range product for a particular A1,A2 combination will use the functors above to create a simi...
Definition BearingRange.h:51
\n-
static R MeasureRange(const A1 &a1, const A2 &a2)
Predict range.
Definition BearingRange.h:101
\n-
static BearingRange Measure(const A1 &a1, const A2 &a2, OptionalJacobian< dimension, traits< A1 >::dimension > H1=boost::none, OptionalJacobian< dimension, traits< A2 >::dimension > H2=boost::none)
Prediction function that stacks measurements.
Definition BearingRange.h:78
\n-
BearingRange retract(const TangentVector &xi) const
Retract delta to manifold.
Definition BearingRange.h:130
\n-
const B & bearing() const
Return bearing measurement.
Definition BearingRange.h:72
\n-
TangentVector localCoordinates(const BearingRange &other) const
Compute the coordinates in the tangent space.
Definition BearingRange.h:137
\n-
const R & range() const
Return range measurement.
Definition BearingRange.h:75
\n-
static B MeasureBearing(const A1 &a1, const A2 &a2)
Predict bearing.
Definition BearingRange.h:96
\n-
Definition BearingRange.h:180
\n-
Definition BearingRange.h:194
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
Unit3(const Unit3 &u)
Copy constructor.
Definition Unit3.h:80
\n+
Unit3()
Default constructor.
Definition Unit3.h:65
\n+
friend Point3 operator*(double s, const Unit3 &d)
Return scaled direction as Point3.
Definition Unit3.h:141
\n+
static size_t Dim()
Dimensionality of tangent space = 2 DOF.
Definition Unit3.h:177
\n+
size_t dim() const
Dimensionality of tangent space = 2 DOF.
Definition Unit3.h:182
\n+
bool equals(const Unit3 &s, double tol=1e-9) const
The equals function with tolerance.
Definition Unit3.h:115
\n+
CoordinatesMode
Definition Unit3.h:186
\n+
@ EXPMAP
Use the exponential map to retract.
Definition Unit3.h:187
\n+
Unit3 cross(const Unit3 &q) const
Cross-product between two Unit3s.
Definition Unit3.h:162
\n+
Point3 cross(const Point3 &q) const
Cross-product w Point3.
Definition Unit3.h:167
\n+
Unit3 & operator=(const Unit3 &u)
Copy assignment.
Definition Unit3.h:85
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,268 +1,285 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BearingRange.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+Unit3.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n+3 * Atlanta, Georgia 30332-0415\n+4 * All Rights Reserved\n+5 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n+12/*\n+13 * @file Unit3.h\n+14 * @date Feb 02, 2011\n+15 * @author Can Erdogan\n+16 * @author Frank Dellaert\n+17 * @author Alex Trevor\n+18 * @brief Develop a Unit3 class - basically a point on a unit sphere\n+19 */\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n-24#include \n-25#include \n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-30// Forward declaration of Bearing functor which should be of A1*A2 -\n-> return_type\n-31// For example Bearing(pose,point), defined in Pose3.h will\n-return Unit3\n-32// At time of writing only Pose2 and Pose3 specialize this functor.\n-33template \n-_\b3_\b4struct _\bB_\be_\ba_\br_\bi_\bn_\bg;\n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+29#include \n+30\n+31#include \n+32\n+33#include \n+34#include \n 35\n-36// Forward declaration of Range functor which should be of A1*A2 -\n-> return_type\n-37// For example Range(T1,T2), defined in Pose2.h will return\n-double\n-38// At time of writing Pose2, Pose3, and several Camera variants specialize\n-this for several types\n-39template \n-_\b4_\b0struct _\bR_\ba_\bn_\bg_\be;\n+36#ifdef GTSAM_USE_TBB\n+37#include // std::mutex\n+38#endif\n+39\n+40namespace _\bg_\bt_\bs_\ba_\bm {\n 41\n-48template _\b:_\b:_\br_\be_\bs_\bu_\bl_\bt_\b__\bt_\by_\bp_\be,\n-50 typename R = typename _\bR_\ba_\bn_\bg_\be_\b<_\bA_\b1_\b,_\b _\bA_\b2_\b>_\b:_\b:_\br_\be_\bs_\bu_\bl_\bt_\b__\bt_\by_\bp_\be>\n-_\b5_\b1struct _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be {\n-52private:\n-53 B bearing_;\n-54 R range_;\n-55\n-56public:\n-57 enum { dimB = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bB_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn };\n-58 enum { dimR = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn };\n-59 enum { dimension = dimB + dimR };\n+_\b4_\b3class GTSAM_EXPORT _\bU_\bn_\bi_\bt_\b3 {\n+44\n+45private:\n+46\n+47 Vector3 p_;\n+48 mutable boost::optional B_;\n+49 mutable boost::optional H_B_;\n+50\n+51#ifdef GTSAM_USE_TBB\n+52 mutable std::mutex B_mutex_;\n+53#endif\n+54\n+55public:\n+56\n+57 enum {\n+58 dimension = 2\n+59 };\n 60\n 63\n-64 _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be() {}\n-65 _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be(const B& b, const R& r) : bearing_(b), range_(r) {}\n-66\n-70\n-_\b7_\b2 const B& _\bb_\be_\ba_\br_\bi_\bn_\bg() const { return bearing_; }\n-73\n-_\b7_\b5 const R& _\br_\ba_\bn_\bg_\be() const { return range_; }\n-76\n-_\b7_\b8 static _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be _\bM_\be_\ba_\bs_\bu_\br_\be(\n-79 const A1& a1, const A2& a2,\n-80 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H1 = boost::none,\n-81 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H2 = boost::none) {\n-82 typename MakeJacobian::type HB1;\n-83 typename MakeJacobian::type HB2;\n-84 typename MakeJacobian::type HR1;\n-85 typename MakeJacobian::type HR2;\n-86\n-87 B b = _\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\bA_\b1_\b,_\b _\bA_\b2_\b>()(a1, a2, H1 ? &HB1 : 0, H2 ? &HB2 : 0);\n-88 R r = _\bR_\ba_\bn_\bg_\be_\b<_\bA_\b1_\b,_\b _\bA_\b2_\b>()(a1, a2, H1 ? &HR1 : 0, H2 ? &HR2 : 0);\n-89\n-90 if (H1) *H1 << HB1, HR1;\n-91 if (H2) *H2 << HB2, HR2;\n-92 return _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be(b, r);\n-93 }\n-94\n-_\b9_\b6 static B _\bM_\be_\ba_\bs_\bu_\br_\be_\bB_\be_\ba_\br_\bi_\bn_\bg(const A1& a1, const A2& a2) {\n-97 return _\bB_\be_\ba_\br_\bi_\bn_\bg_\b<_\bA_\b1_\b,_\b _\bA_\b2_\b>()(a1, a2);\n-98 }\n-99\n-_\b1_\b0_\b1 static R _\bM_\be_\ba_\bs_\bu_\br_\be_\bR_\ba_\bn_\bg_\be(const A1& a1, const A2& a2) {\n-102 return _\bR_\ba_\bn_\bg_\be_\b<_\bA_\b1_\b,_\b _\bA_\b2_\b>()(a1, a2);\n-103 }\n-104\n+_\b6_\b5 _\bU_\bn_\bi_\bt_\b3() :\n+66 p_(1.0, 0.0, 0.0) {\n+67 }\n+68\n+70 explicit _\bU_\bn_\bi_\bt_\b3(const Vector3& p);\n+71\n+73 _\bU_\bn_\bi_\bt_\b3(double x, double y, double z);\n+74\n+77 explicit _\bU_\bn_\bi_\bt_\b3(const _\bP_\bo_\bi_\bn_\bt_\b2& p, double f);\n+78\n+_\b8_\b0 _\bU_\bn_\bi_\bt_\b3(const _\bU_\bn_\bi_\bt_\b3& u) {\n+81 p_ = u.p_;\n+82 }\n+83\n+_\b8_\b5 _\bU_\bn_\bi_\bt_\b3& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bU_\bn_\bi_\bt_\b3 & u) {\n+86 p_ = u.p_;\n+87 B_ = u.B_;\n+88 H_B_ = u.H_B_;\n+89 return *this;\n+90 }\n+91\n+93 static _\bU_\bn_\bi_\bt_\b3 FromPoint3(const _\bP_\bo_\bi_\bn_\bt_\b3& point, //\n+94 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> H = boost::none);\n+95\n+102 static _\bU_\bn_\bi_\bt_\b3 Random(std::mt19937 & rng);\n+103\n+105\n 108\n-109 void print(const std::string& str = \"\") const {\n-110 std::cout << str;\n-111 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bB_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(bearing_, \"bearing \");\n-112 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(range_, \"range \");\n-113 }\n-114 bool equals(const BearingRange& m2, double tol = 1e-8) const {\n-115 return traits::Equals(bearing_, m2.bearing_, tol) &&\n-116 traits::Equals(range_, m2.range_, tol);\n+109 friend std::ostream& operator<<(std::ostream& os, const _\bU_\bn_\bi_\bt_\b3& pair);\n+110\n+112 void _\bp_\br_\bi_\bn_\bt(const std::string& s = std::string()) const;\n+113\n+_\b1_\b1_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bU_\bn_\bi_\bt_\b3& s, double tol = 1e-9) const {\n+116 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(p_, s.p_, tol);\n 117 }\n-118\n+119\n 122\n-123 inline static size_t Dim() { return dimension; }\n-124 inline size_t dim() const { return dimension; }\n-125\n-126 typedef Eigen::Matrix TangentVector;\n-127 typedef OptionalJacobian ChartJacobian;\n-128\n-_\b1_\b3_\b0 _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be _\br_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& xi) const {\n-131 B m1 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bB_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(bearing_, xi.template head());\n-132 R m2 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(range_, xi.template tail());\n-133 return _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be(m1, m2);\n-134 }\n-135\n-_\b1_\b3_\b7 TangentVector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be& other) const {\n-138 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bB_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br v1 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bB_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(bearing_,\n-other.bearing_);\n-139 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br v2 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(range_,\n-other.range_);\n-140 TangentVector v;\n-141 v << v1, v2;\n-142 return v;\n+129 const Matrix32& basis(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b2_\b> H = boost::none) const;\n+130\n+132 Matrix3 skew() const;\n+133\n+135 _\bP_\bo_\bi_\bn_\bt_\b3 point3(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b2_\b> H = boost::none) const;\n+136\n+138 Vector3 unitVector(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b2_\b> H = boost::none) const;\n+139\n+_\b1_\b4_\b1 friend _\bP_\bo_\bi_\bn_\bt_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(double s, const _\bU_\bn_\bi_\bt_\b3& d) {\n+142 return _\bP_\bo_\bi_\bn_\bt_\b3(s * d.p_);\n 143 }\n 144\n+146 double _\bd_\bo_\bt(const _\bU_\bn_\bi_\bt_\b3& q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b2_\b> H1 = boost::none, //\n+147 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b2_\b> H2 = boost::none) const;\n 148\n-149private:\n-151 template \n-152 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-153 ar& boost::serialization::make_nvp(\"bearing\", bearing_);\n-154 ar& boost::serialization::make_nvp(\"range\", range_);\n-155 }\n-156\n-157 friend class boost::serialization::access;\n-158\n+151 Vector2 error(const _\bU_\bn_\bi_\bt_\b3& q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> H_q = boost::none)\n+const;\n+152\n+155 Vector2 errorVector(const _\bU_\bn_\bi_\bt_\b3& q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> H_p = boost::\n+none, //\n+156 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> H_q = boost::none) const;\n+157\n+159 double distance(const _\bU_\bn_\bi_\bt_\b3& q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H = boost::none)\n+const;\n 160\n-161 // Alignment, see https://eigen.tuxfamily.org/dox/\n-group__TopicStructHavingEigenMembers.html\n-162 enum {\n-163 NeedsToAlign = (sizeof(B) % 16) == 0 || (sizeof(R) % 16) == 0\n-164 };\n-165public:\n-166 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(NeedsToAlign)\n-167};\n-168\n-169// Declare this to be both Testable and a Manifold\n-170template \n-_\b1_\b7_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be >\n-172 : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be >,\n-173 _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs > {};\n-174\n-175// Helper class for to implement Range traits for classes with a bearing\n-method\n-176// For example, to specialize Bearing to Pose3 and Point3, using Pose3::\n-bearing, it suffices to say\n-177// template <> struct Bearing : HasBearing {};\n-178// where the third argument is used to indicate the return type\n-179template \n-_\b1_\b8_\b0struct _\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg {\n-181 typedef RT result_type;\n-182 RT operator()(\n-183 const A1& a1, const A2& a2,\n-184 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b1_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H1=boost::\n-none,\n-185 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b2_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H2=boost::\n-none) {\n-186 return a1.bearing(a2, H1, H2);\n-187 }\n-188};\n-189\n-190// Similar helper class for to implement Range traits for classes with a\n-range method\n-191// For classes with overloaded range methods, such as PinholeCamera, this\n-can even be templated:\n-192// template struct Range :\n-HasRange {};\n-193template \n-_\b1_\b9_\b4struct _\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be {\n-195 typedef RT result_type;\n-196 RT operator()(\n-197 const A1& a1, const A2& a2,\n-198 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b1_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H1=boost::\n-none,\n-199 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bA_\b2_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn> H2=boost::\n-none) {\n-200 return a1.range(a2, H1, H2);\n-201 }\n-202};\n+_\b1_\b6_\b2 _\bU_\bn_\bi_\bt_\b3 _\bc_\br_\bo_\bs_\bs(const _\bU_\bn_\bi_\bt_\b3& q) const {\n+163 return _\bU_\bn_\bi_\bt_\b3(p_.cross(q.p_));\n+164 }\n+165\n+_\b1_\b6_\b7 _\bP_\bo_\bi_\bn_\bt_\b3 _\bc_\br_\bo_\bs_\bs(const _\bP_\bo_\bi_\bn_\bt_\b3& q) const {\n+168 return point3().cross(q);\n+169 }\n+170\n+172\n+175\n+_\b1_\b7_\b7 inline static size_t _\bD_\bi_\bm() {\n+178 return 2;\n+179 }\n+180\n+_\b1_\b8_\b2 inline size_t _\bd_\bi_\bm() const {\n+183 return 2;\n+184 }\n+185\n+_\b1_\b8_\b6 enum _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\bM_\bo_\bd_\be {\n+_\b1_\b8_\b7 _\bE_\bX_\bP_\bM_\bA_\bP,\n+188 RENORM\n+_\b1_\b8_\b9 };\n+190\n+192 _\bU_\bn_\bi_\bt_\b3 retract(const Vector2& v, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b2_\b> H = boost::none)\n+const;\n+193\n+195 Vector2 localCoordinates(const _\bU_\bn_\bi_\bt_\b3& s) const;\n+196\n+198\n+199private:\n+200\n 203\n-204} // namespace gtsam\n+_\b2_\b0_\b4 friend class boost::serialization::access;\n+205 template\n+206 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+207 ar & BOOST_SERIALIZATION_NVP(p_);\n+208 }\n+209\n+211\n+212public:\n+213 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+214};\n+215\n+216// Define GTSAM traits\n+_\b2_\b1_\b7template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bU_\bn_\bi_\bt_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {\n+218};\n+219\n+_\b2_\b2_\b0template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {\n+221};\n+222\n+223} // namespace gtsam\n+224\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n Base class and basic functions for Manifold types.\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:317\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n-Special class for optional Jacobian arguments.\n+_\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+serialization for Vectors\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n+_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+3D Point\n+_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n+bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n+DenseBase< MATRIX > &B, double tol=1e-9)\n+equals with a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs\n-A helper that implements the traits interface for GTSAM manifolds.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+Both ManifoldTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be\n-Bearing-Range product for a particular A1,A2 combination will use the functors\n-above to create a simi...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bR_\ba_\bn_\bg_\be\n-static R MeasureRange(const A1 &a1, const A2 &a2)\n-Predict range.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be\n-static BearingRange Measure(const A1 &a1, const A2 &a2, OptionalJacobian<\n-dimension, traits< A1 >::dimension > H1=boost::none, OptionalJacobian<\n-dimension, traits< A2 >::dimension > H2=boost::none)\n-Prediction function that stacks measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-BearingRange retract(const TangentVector &xi) const\n-Retract delta to manifold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bb_\be_\ba_\br_\bi_\bn_\bg\n-const B & bearing() const\n-Return bearing measurement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-TangentVector localCoordinates(const BearingRange &other) const\n-Compute the coordinates in the tangent space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\br_\ba_\bn_\bg_\be\n-const R & range() const\n-Return range measurement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bB_\be_\ba_\br_\bi_\bn_\bg\n-static B MeasureBearing(const A1 &a1, const A2 &a2)\n-Predict bearing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:180\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:194\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Unit3(const Unit3 &u)\n+Copy constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Unit3()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+friend Point3 operator*(double s, const Unit3 &d)\n+Return scaled direction as Point3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+Dimensionality of tangent space = 2 DOF.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+Dimensionality of tangent space = 2 DOF.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:182\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const Unit3 &s, double tol=1e-9) const\n+The equals function with tolerance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\bM_\bo_\bd_\be\n+CoordinatesMode\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bE_\bX_\bP_\bM_\bA_\bP\n+@ EXPMAP\n+Use the exponential map to retract.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:187\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bc_\br_\bo_\bs_\bs\n+Unit3 cross(const Unit3 &q) const\n+Cross-product between two Unit3s.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bc_\br_\bo_\bs_\bs\n+Point3 cross(const Point3 &q) const\n+Cross-product w Point3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+Unit3 & operator=(const Unit3 &u)\n+Copy assignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:85\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n+ * U\bUn\bni\bit\bt3\b3.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00290_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00449_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n
SOn-inl.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
12#pragma once
\n
13
\n-
21#include <gtsam/base/Matrix.h>
\n+
21#include <gtsam/base/Matrix.h>
\n
22
\n
23#include <iostream>
\n
24
\n
25namespace gtsam {
\n
26
\n
27// Implementation for N>=5 just uses dynamic version
\n
28template <int N>
\n@@ -224,15 +224,15 @@\n
106
\n
107template <int N>
\n
108void SO<N>::print(const std::string& s) const {
\n
109 std::cout << s << matrix_ << std::endl;
\n
110}
\n
111
\n
112} // namespace gtsam
\n-
typedef and functions to augment Eigen's MatrixXd
\n+
typedef and functions to augment Eigen's MatrixXd
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Manifold of special orthogonal rotation matrices SO<N>.
Definition SOn.h:52
\n
static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates.
Definition SOn-inl.h:67
\n
static Matrix VectorizedGenerators()
Calculate N^2 x dim matrix of vectorized Lie algebra generators for SO(N)
Definition SOn.h:300
\n
SO inverse() const
inverse of a rotation = transpose
Definition SOn.h:193
\n
VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::none) const
Return vectorized rotation matrix in column order.
Definition SOn-inl.h:88
\n@@ -247,13 +247,13 @@\n
static TangentVector Local(const SO &R, ChartJacobian H=boost::none)
Inverse of Retract.
Definition SOn-inl.h:50
\n
static SO Retract(const TangentVector &xi, ChartJacobian H=boost::none)
Retract uses Cayley map.
Definition SOn-inl.h:40
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00302.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01400.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3Q.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/global_includes.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Rot3Q.cpp File Reference
\n+
global_includes.h File Reference
\n
\n
\n \n-

Rotation (internal: quaternion representation*) \n+

Included from all GTSAM files. \n More...

\n+\n+

Go to the source code of this file.

\n

Detailed Description

\n-

Rotation (internal: quaternion representation*)

\n+

Included from all GTSAM files.

\n
Author
Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,15 +1,16 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Rot3Q.cpp File Reference\n-Rotation (internal: quaternion representation*) _\bM_\bo_\br_\be_\b._\b._\b.\n+global_includes.h File Reference\n+_\bB_\ba_\bs_\be\n+Included from all GTSAM files. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Rotation (internal: quaternion representation*)\n+Included from all GTSAM files.\n Author\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bR_\bo_\bt_\b3_\bQ_\b._\bc_\bp_\bp\n+ * _\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00323_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00311_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
PinholeSet.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n+\n \n
22#include <boost/optional.hpp>
\n
23
\n
24namespace gtsam {
\n
25
\n
29template<class CAMERA>
\n
\n@@ -182,15 +182,15 @@\n
80template<class CAMERA>
\n
\n
81struct traits<const PinholeSet<CAMERA> > : public Testable<PinholeSet<CAMERA> > {
\n
82};
\n
\n
83
\n
84} // \\ namespace gtsam
\n-
Base class to create smart factors on poses or cameras.
\n+
Base class to create smart factors on poses or cameras.
\n
Functions for triangulation.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
TriangulationResult triangulateSafe(const CameraSet< CAMERA > &cameras, const typename CAMERA::MeasurementVector &measured, const TriangulationParameters &params)
triangulateSafe: extensive checking of the outcome
Definition triangulation.h:680
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n
PinholeSet: triangulates point and keeps an estimate of it around.
Definition PinholeSet.h:30
\n@@ -202,13 +202,13 @@\n
Definition triangulation.h:556
\n
TriangulationResult is an optional point, along with the reasons why it is invalid.
Definition triangulation.h:626
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00326_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00572_source.html", "comments": ["Files 93% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Unit3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph-inst.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n
\n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Unit3.h
\n+
FactorGraph-inst.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * Atlanta, Georgia 30332-0415
\n-
4 * All Rights Reserved
\n-
5 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file Unit3.h
\n-
14 * @date Feb 02, 2011
\n-
15 * @author Can Erdogan
\n-
16 * @author Frank Dellaert
\n-
17 * @author Alex Trevor
\n-
18 * @brief Develop a Unit3 class - basically a point on a unit sphere
\n-
19 */
\n-
20
\n-
21#pragma once
\n-
22
\n-\n-\n-
25#include <gtsam/base/Manifold.h>
\n-
26#include <gtsam/base/Vector.h>
\n-\n-
28#include <gtsam/base/Matrix.h>
\n-
29#include <gtsam/dllexport.h>
\n-
30
\n-
31#include <boost/optional.hpp>
\n+
22#pragma once
\n+
23
\n+\n+
25
\n+
26#include <stdio.h>
\n+
27#include <algorithm>
\n+
28#include <iostream> // for cout :-(
\n+
29#include <fstream>
\n+
30#include <sstream>
\n+
31#include <string>
\n
32
\n-
33#include <random>
\n-
34#include <string>
\n-
35
\n-
36#ifdef GTSAM_USE_TBB
\n-
37#include <mutex> // std::mutex
\n-
38#endif
\n-
39
\n-
40namespace gtsam {
\n-
41
\n-
\n-
43class GTSAM_EXPORT Unit3 {
\n-
44
\n-
45private:
\n-
46
\n-
47 Vector3 p_;
\n-
48 mutable boost::optional<Matrix32> B_;
\n-
49 mutable boost::optional<Matrix62> H_B_;
\n-
50
\n-
51#ifdef GTSAM_USE_TBB
\n-
52 mutable std::mutex B_mutex_;
\n-
53#endif
\n-
54
\n-
55public:
\n-
56
\n-
57 enum {
\n-
58 dimension = 2
\n-
59 };
\n-
60
\n-
63
\n-
\n-\n-
66 p_(1.0, 0.0, 0.0) {
\n-
67 }
\n-
\n-
68
\n-
70 explicit Unit3(const Vector3& p);
\n-
71
\n-
73 Unit3(double x, double y, double z);
\n-
74
\n-
77 explicit Unit3(const Point2& p, double f);
\n-
78
\n-
\n-
80 Unit3(const Unit3& u) {
\n-
81 p_ = u.p_;
\n-
82 }
\n+
33namespace gtsam {
\n+
34
\n+
35/* ************************************************************************* */
\n+
36template <class FACTOR>
\n+
\n+
37void FactorGraph<FACTOR>::print(const std::string& s,
\n+
38 const KeyFormatter& formatter) const {
\n+
39 std::cout << (s.empty() ? "" : s + " ") << std::endl;
\n+
40 std::cout << "size: " << size() << std::endl;
\n+
41 for (size_t i = 0; i < factors_.size(); i++) {
\n+
42 std::stringstream ss;
\n+
43 ss << "factor " << i << ": ";
\n+
44 if (factors_[i]) factors_[i]->print(ss.str(), formatter);
\n+
45 }
\n+
46}
\n+
\n+
47
\n+
48/* ************************************************************************* */
\n+
49template <class FACTOR>
\n+
\n+
50bool FactorGraph<FACTOR>::equals(const This& fg, double tol) const {
\n+
51 // check whether the two factor graphs have the same number of factors.
\n+
52 if (factors_.size() != fg.size()) return false;
\n+
53
\n+
54 // check whether the factors are the same, in same order.
\n+
55 for (size_t i = 0; i < factors_.size(); i++) {
\n+
56 sharedFactor f1 = factors_[i], f2 = fg.factors_[i];
\n+
57 if (f1 == nullptr && f2 == nullptr) continue;
\n+
58 if (f1 == nullptr || f2 == nullptr) return false;
\n+
59 if (!f1->equals(*f2, tol)) return false;
\n+
60 }
\n+
61 return true;
\n+
62}
\n
\n-
83
\n+
63
\n+
64/* ************************************************************************ */
\n+
65template <class FACTOR>
\n+
\n+
66double FactorGraph<FACTOR>::error(const HybridValues &values) const {
\n+
67 double error = 0.0;
\n+
68 for (auto &f : factors_) {
\n+
69 error += f->error(values);
\n+
70 }
\n+
71 return error;
\n+
72}
\n+
\n+
73
\n+
74/* ************************************************************************* */
\n+
75template <class FACTOR>
\n+
\n+\n+
77 size_t size_ = 0;
\n+
78 for (const sharedFactor& factor : factors_)
\n+
79 if (factor) size_++;
\n+
80 return size_;
\n+
81}
\n+
\n+
82
\n+
83/* ************************************************************************* */
\n+
84template <class FACTOR>
\n
\n-
85 Unit3& operator=(const Unit3 & u) {
\n-
86 p_ = u.p_;
\n-
87 B_ = u.B_;
\n-
88 H_B_ = u.H_B_;
\n-
89 return *this;
\n-
90 }
\n-
\n-
91
\n-
93 static Unit3 FromPoint3(const Point3& point, //
\n-
94 OptionalJacobian<2, 3> H = boost::none);
\n-
95
\n-
102 static Unit3 Random(std::mt19937 & rng);
\n-
103
\n+\n+
86 KeySet keys;
\n+
87 for (const sharedFactor& factor : this->factors_) {
\n+
88 if (factor) keys.insert(factor->begin(), factor->end());
\n+
89 }
\n+
90 return keys;
\n+
91}
\n+
\n+
92
\n+
93/* ************************************************************************* */
\n+
94template <class FACTOR>
\n+
\n+\n+
96 KeyVector keys;
\n+
97 keys.reserve(2 * size()); // guess at size
\n+
98 for (const sharedFactor& factor : factors_)
\n+
99 if (factor) keys.insert(keys.end(), factor->begin(), factor->end());
\n+
100 std::sort(keys.begin(), keys.end());
\n+
101 auto last = std::unique(keys.begin(), keys.end());
\n+
102 keys.erase(last, keys.end());
\n+
103 return keys;
\n+
104}
\n+
\n
105
\n-
108
\n-
109 friend std::ostream& operator<<(std::ostream& os, const Unit3& pair);
\n-
110
\n-
112 void print(const std::string& s = std::string()) const;
\n-
113
\n-
\n-
115 bool equals(const Unit3& s, double tol = 1e-9) const {
\n-
116 return equal_with_abs_tol(p_, s.p_, tol);
\n-
117 }
\n-
\n-
119
\n-
122
\n-
129 const Matrix32& basis(OptionalJacobian<6, 2> H = boost::none) const;
\n-
130
\n-
132 Matrix3 skew() const;
\n-
133
\n-
135 Point3 point3(OptionalJacobian<3, 2> H = boost::none) const;
\n-
136
\n-
138 Vector3 unitVector(OptionalJacobian<3, 2> H = boost::none) const;
\n-
139
\n-
\n-
141 friend Point3 operator*(double s, const Unit3& d) {
\n-
142 return Point3(s * d.p_);
\n-
143 }
\n-
\n-
144
\n-
146 double dot(const Unit3& q, OptionalJacobian<1,2> H1 = boost::none, //
\n-
147 OptionalJacobian<1,2> H2 = boost::none) const;
\n-
148
\n-
151 Vector2 error(const Unit3& q, OptionalJacobian<2, 2> H_q = boost::none) const;
\n+
106/* ************************************************************************* */
\n+
107template <class FACTOR>
\n+
108template <typename CONTAINER, typename>
\n+
\n+\n+
110 bool useEmptySlots) {
\n+
111 const size_t num_factors = factors.size();
\n+
112 FactorIndices newFactorIndices(num_factors);
\n+
113 if (useEmptySlots) {
\n+
114 size_t i = 0;
\n+
115 for (size_t j = 0; j < num_factors; ++j) {
\n+
116 // Loop to find the next available factor slot
\n+
117 do {
\n+
118 if (i >= size())
\n+
119 // Make room for remaining factors, happens only once.
\n+
120 resize(size() + num_factors - j);
\n+
121 else if (at(i))
\n+
122 ++i; // Move on to the next slot or past end.
\n+
123 else
\n+
124 break; // We found an empty slot, break to fill it.
\n+
125 } while (true);
\n+
126
\n+
127 // Use the current slot, updating graph and newFactorSlots.
\n+
128 at(i) = factors[j];
\n+
129 newFactorIndices[j] = i;
\n+
130 }
\n+
131 } else {
\n+
132 // We're not looking for unused slots, so just add the factors at the end.
\n+
133 for (size_t i = 0; i < num_factors; ++i) newFactorIndices[i] = i + size();
\n+
134 push_back(factors);
\n+
135 }
\n+
136 return newFactorIndices;
\n+
137}
\n+
\n+
138
\n+
139/* ************************************************************************* */
\n+
140template <class FACTOR>
\n+
\n+
141void FactorGraph<FACTOR>::dot(std::ostream& os,
\n+
142 const KeyFormatter& keyFormatter,
\n+
143 const DotWriter& writer) const {
\n+
144 writer.graphPreamble(&os);
\n+
145
\n+
146 // Create nodes for each variable in the graph
\n+
147 for (Key key : keys()) {
\n+
148 auto position = writer.variablePos(key);
\n+
149 writer.drawVariable(key, keyFormatter, position, &os);
\n+
150 }
\n+
151 os << "\\n";
\n
152
\n-
155 Vector2 errorVector(const Unit3& q, OptionalJacobian<2, 2> H_p = boost::none, //
\n-
156 OptionalJacobian<2, 2> H_q = boost::none) const;
\n-
157
\n-
159 double distance(const Unit3& q, OptionalJacobian<1, 2> H = boost::none) const;
\n-
160
\n-
\n-
162 Unit3 cross(const Unit3& q) const {
\n-
163 return Unit3(p_.cross(q.p_));
\n-
164 }
\n+
153 // Create factors and variable connections
\n+
154 for (size_t i = 0; i < size(); ++i) {
\n+
155 const auto& factor = at(i);
\n+
156 if (factor) {
\n+
157 const KeyVector& factorKeys = factor->keys();
\n+
158 writer.processFactor(i, factorKeys, keyFormatter, boost::none, &os);
\n+
159 }
\n+
160 }
\n+
161
\n+
162 os << "}\\n";
\n+
163 std::flush(os);
\n+
164}
\n
\n
165
\n-
\n-
167 Point3 cross(const Point3& q) const {
\n-
168 return point3().cross(q);
\n-
169 }
\n-
\n-
170
\n-
172
\n-
175
\n+
166/* ************************************************************************* */
\n+
167template <class FACTOR>
\n+
\n+
168std::string FactorGraph<FACTOR>::dot(const KeyFormatter& keyFormatter,
\n+
169 const DotWriter& writer) const {
\n+
170 std::stringstream ss;
\n+
171 dot(ss, keyFormatter, writer);
\n+
172 return ss.str();
\n+
173}
\n+
\n+
174
\n+
175/* ************************************************************************* */
\n+
176template <class FACTOR>
\n
\n-
177 inline static size_t Dim() {
\n-
178 return 2;
\n-
179 }
\n-
\n-
180
\n-
\n-
182 inline size_t dim() const {
\n-
183 return 2;
\n-
184 }
\n-
\n-
185
\n-
\n-\n-\n-
188 RENORM
\n-
189 };
\n-
\n-
190
\n-
192 Unit3 retract(const Vector2& v, OptionalJacobian<2,2> H = boost::none) const;
\n-
193
\n-
195 Vector2 localCoordinates(const Unit3& s) const;
\n-
196
\n-
198
\n-
199private:
\n-
200
\n-
203
\n-
204 friend class boost::serialization::access;
\n-
205 template<class ARCHIVE>
\n-
206 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
207 ar & BOOST_SERIALIZATION_NVP(p_);
\n-
208 }
\n-
209
\n-
211
\n-
212public:
\n-\n-
214};
\n-
\n-
215
\n-
216// Define GTSAM traits
\n-
\n-
217template<> struct traits<Unit3> : public internal::Manifold<Unit3> {
\n-
218};
\n-
\n-
219
\n-
\n-
220template<> struct traits<const Unit3> : public internal::Manifold<Unit3> {
\n-
221};
\n-
\n-
222
\n-
223} // namespace gtsam
\n-
224
\n-
Base class and basic functions for Manifold types.
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
serialization for Vectors
\n-
typedef and functions to augment Eigen's VectorXd
\n-
3D Point
\n-
2D Point
\n+
177void FactorGraph<FACTOR>::saveGraph(const std::string& filename,
\n+
178 const KeyFormatter& keyFormatter,
\n+
179 const DotWriter& writer) const {
\n+
180 std::ofstream of(filename.c_str());
\n+
181 dot(of, keyFormatter, writer);
\n+
182 of.close();
\n+
183}
\n+
\n+
184
\n+
185} // namespace gtsam
\n+
Factor Graph Base Class.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n-
Unit3(const Unit3 &u)
Copy constructor.
Definition Unit3.h:80
\n-
Unit3()
Default constructor.
Definition Unit3.h:65
\n-
friend Point3 operator*(double s, const Unit3 &d)
Return scaled direction as Point3.
Definition Unit3.h:141
\n-
static size_t Dim()
Dimensionality of tangent space = 2 DOF.
Definition Unit3.h:177
\n-
size_t dim() const
Dimensionality of tangent space = 2 DOF.
Definition Unit3.h:182
\n-
bool equals(const Unit3 &s, double tol=1e-9) const
The equals function with tolerance.
Definition Unit3.h:115
\n-
CoordinatesMode
Definition Unit3.h:186
\n-
@ EXPMAP
Use the exponential map to retract.
Definition Unit3.h:187
\n-
Unit3 cross(const Unit3 &q) const
Cross-product between two Unit3s.
Definition Unit3.h:162
\n-
Point3 cross(const Point3 &q) const
Cross-product w Point3.
Definition Unit3.h:167
\n-
Unit3 & operator=(const Unit3 &u)
Copy assignment.
Definition Unit3.h:85
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
virtual void print(const std::string &s="FactorGraph", const KeyFormatter &formatter=DefaultKeyFormatter) const
Print out graph to std::cout, with optional key formatter.
Definition FactorGraph-inst.h:37
\n+
KeySet keys() const
Potentially slow function to return all keys involved, sorted, as a set.
Definition FactorGraph-inst.h:85
\n+
FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)
Add new factors to a factor graph and returns a list of new factor indices, optionally finding and re...
Definition FactorGraph-inst.h:109
\n+
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
Output to graphviz format, stream version.
Definition FactorGraph-inst.h:141
\n+
KeyVector keyVector() const
Potentially slow function to return all keys involved, sorted, as a vector.
Definition FactorGraph-inst.h:95
\n+
double error(const HybridValues &values) const
Add error for all factors.
Definition FactorGraph-inst.h:66
\n+
size_t nrFactors() const
return the number of non-null factors
Definition FactorGraph-inst.h:76
\n+
size_t size() const
return the number of factors (including any null factors set by remove() ).
Definition FactorGraph.h:326
\n+
bool equals(const This &fg, double tol=1e-9) const
Check equality up to tolerance.
Definition FactorGraph-inst.h:50
\n+
boost::shared_ptr< FACTOR > sharedFactor
Shared pointer to a factor.
Definition FactorGraph.h:101
\n+
FastVector< sharedFactor > factors_
concept check, makes sure FACTOR defines print and equals
Definition FactorGraph.h:131
\n+
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
output to file with graphviz format.
Definition FactorGraph-inst.h:177
\n+
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n+
void drawVariable(Key key, const KeyFormatter &keyFormatter, const boost::optional< Vector2 > &position, std::ostream *os) const
Create a variable dot fragment.
Definition DotWriter.cpp:42
\n+
void processFactor(size_t i, const KeyVector &keys, const KeyFormatter &keyFormatter, const boost::optional< Vector2 > &position, std::ostream *os) const
Draw a single factor, specified by its index i and its variable keys.
Definition DotWriter.cpp:96
\n+
boost::optional< Vector2 > variablePos(Key key) const
Return variable position or none.
Definition DotWriter.cpp:79
\n+
void graphPreamble(std::ostream *os) const
Write out preamble for graph, including size.
Definition DotWriter.cpp:30
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,285 +1,305 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Unit3.h\n+FactorGraph-inst.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * Atlanta, Georgia 30332-0415\n-4 * All Rights Reserved\n-5 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file Unit3.h\n-14 * @date Feb 02, 2011\n-15 * @author Can Erdogan\n-16 * @author Frank Dellaert\n-17 * @author Alex Trevor\n-18 * @brief Develop a Unit3 class - basically a point on a unit sphere\n-19 */\n-20\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-29#include \n-30\n-31#include \n+22#pragma once\n+23\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+25\n+26#include \n+27#include \n+28#include // for cout :-(\n+29#include \n+30#include \n+31#include \n 32\n-33#include \n-34#include \n-35\n-36#ifdef GTSAM_USE_TBB\n-37#include // std::mutex\n-38#endif\n-39\n-40namespace _\bg_\bt_\bs_\ba_\bm {\n-41\n-_\b4_\b3class GTSAM_EXPORT _\bU_\bn_\bi_\bt_\b3 {\n-44\n-45private:\n-46\n-47 Vector3 p_;\n-48 mutable boost::optional B_;\n-49 mutable boost::optional H_B_;\n-50\n-51#ifdef GTSAM_USE_TBB\n-52 mutable std::mutex B_mutex_;\n-53#endif\n-54\n-55public:\n-56\n-57 enum {\n-58 dimension = 2\n-59 };\n-60\n+33namespace _\bg_\bt_\bs_\ba_\bm {\n+34\n+35/* *************************************************************************\n+*/\n+36template \n+_\b3_\b7void _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt(const std::string& s,\n+38 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter) const {\n+39 std::cout << (s.empty() ? \"\" : s + \" \") << std::endl;\n+40 std::cout << \"size: \" << size() << std::endl;\n+41 for (size_t i = 0; i < factors_.size(); i++) {\n+42 std::stringstream ss;\n+43 ss << \"factor \" << i << \": \";\n+44 if (factors_[i]) factors_[i]->print(ss.str(), formatter);\n+45 }\n+46}\n+47\n+48/* *************************************************************************\n+*/\n+49template \n+_\b5_\b0bool _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& fg, double tol) const {\n+51 // check whether the two factor graphs have the same number of factors.\n+52 if (factors_.size() != fg._\bs_\bi_\bz_\be()) return false;\n+53\n+54 // check whether the factors are the same, in same order.\n+55 for (size_t i = 0; i < factors_.size(); i++) {\n+56 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br f1 = factors_[i], f2 = fg._\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_[i];\n+57 if (f1 == nullptr && f2 == nullptr) continue;\n+58 if (f1 == nullptr || f2 == nullptr) return false;\n+59 if (!f1->equals(*f2, tol)) return false;\n+60 }\n+61 return true;\n+62}\n 63\n-_\b6_\b5 _\bU_\bn_\bi_\bt_\b3() :\n-66 p_(1.0, 0.0, 0.0) {\n-67 }\n-68\n-70 explicit _\bU_\bn_\bi_\bt_\b3(const Vector3& p);\n-71\n-73 _\bU_\bn_\bi_\bt_\b3(double x, double y, double z);\n-74\n-77 explicit _\bU_\bn_\bi_\bt_\b3(const _\bP_\bo_\bi_\bn_\bt_\b2& p, double f);\n-78\n-_\b8_\b0 _\bU_\bn_\bi_\bt_\b3(const _\bU_\bn_\bi_\bt_\b3& u) {\n-81 p_ = u.p_;\n-82 }\n-83\n-_\b8_\b5 _\bU_\bn_\bi_\bt_\b3& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bU_\bn_\bi_\bt_\b3 & u) {\n-86 p_ = u.p_;\n-87 B_ = u.B_;\n-88 H_B_ = u.H_B_;\n-89 return *this;\n-90 }\n-91\n-93 static _\bU_\bn_\bi_\bt_\b3 FromPoint3(const _\bP_\bo_\bi_\bn_\bt_\b3& point, //\n-94 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> H = boost::none);\n-95\n-102 static _\bU_\bn_\bi_\bt_\b3 Random(std::mt19937 & rng);\n-103\n+64/* ************************************************************************\n+*/\n+65template \n+_\b6_\b6double _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\be_\br_\br_\bo_\br(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const {\n+67 double error = 0.0;\n+68 for (auto &f : factors_) {\n+69 error += f->error(values);\n+70 }\n+71 return error;\n+72}\n+73\n+74/* *************************************************************************\n+*/\n+75template \n+_\b7_\b6size_t _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bn_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs() const {\n+77 size_t size_ = 0;\n+78 for (const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor : factors_)\n+79 if (factor) size_++;\n+80 return size_;\n+81}\n+82\n+83/* *************************************************************************\n+*/\n+84template \n+_\b8_\b5_\bK_\be_\by_\bS_\be_\bt _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bk_\be_\by_\bs() const {\n+86 _\bK_\be_\by_\bS_\be_\bt keys;\n+87 for (const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor : this->factors_) {\n+88 if (factor) keys.insert(factor->begin(), factor->end());\n+89 }\n+90 return keys;\n+91}\n+92\n+93/* *************************************************************************\n+*/\n+94template \n+_\b9_\b5_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bk_\be_\by_\bV_\be_\bc_\bt_\bo_\br() const {\n+96 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keys;\n+97 keys.reserve(2 * size()); // guess at size\n+98 for (const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor : factors_)\n+99 if (factor) keys.insert(keys.end(), factor->begin(), factor->end());\n+100 std::sort(keys.begin(), keys.end());\n+101 auto last = std::unique(keys.begin(), keys.end());\n+102 keys.erase(last, keys.end());\n+103 return keys;\n+104}\n 105\n-108\n-109 friend std::ostream& operator<<(std::ostream& os, const _\bU_\bn_\bi_\bt_\b3& pair);\n-110\n-112 void _\bp_\br_\bi_\bn_\bt(const std::string& s = std::string()) const;\n-113\n-_\b1_\b1_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bU_\bn_\bi_\bt_\b3& s, double tol = 1e-9) const {\n-116 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(p_, s.p_, tol);\n-117 }\n-119\n-122\n-129 const Matrix32& basis(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b2_\b> H = boost::none) const;\n-130\n-132 Matrix3 skew() const;\n-133\n-135 _\bP_\bo_\bi_\bn_\bt_\b3 point3(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b2_\b> H = boost::none) const;\n-136\n-138 Vector3 unitVector(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b2_\b> H = boost::none) const;\n-139\n-_\b1_\b4_\b1 friend _\bP_\bo_\bi_\bn_\bt_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(double s, const _\bU_\bn_\bi_\bt_\b3& d) {\n-142 return _\bP_\bo_\bi_\bn_\bt_\b3(s * d.p_);\n-143 }\n-144\n-146 double _\bd_\bo_\bt(const _\bU_\bn_\bi_\bt_\b3& q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b2_\b> H1 = boost::none, //\n-147 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b2_\b> H2 = boost::none) const;\n-148\n-151 Vector2 error(const _\bU_\bn_\bi_\bt_\b3& q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> H_q = boost::none)\n-const;\n+106/* *************************************************************************\n+*/\n+107template \n+108template \n+_\b1_\b0_\b9_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs(const CONTAINER& factors,\n+110 bool useEmptySlots) {\n+111 const size_t num_factors = factors.size();\n+112 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs newFactorIndices(num_factors);\n+113 if (useEmptySlots) {\n+114 size_t i = 0;\n+115 for (size_t j = 0; j < num_factors; ++j) {\n+116 // Loop to find the next available factor slot\n+117 do {\n+118 if (i >= size())\n+119 // Make room for remaining factors, happens only once.\n+120 resize(size() + num_factors - j);\n+121 else if (at(i))\n+122 ++i; // Move on to the next slot or past end.\n+123 else\n+124 break; // We found an empty slot, break to fill it.\n+125 } while (true);\n+126\n+127 // Use the current slot, updating graph and newFactorSlots.\n+128 at(i) = factors[j];\n+129 newFactorIndices[j] = i;\n+130 }\n+131 } else {\n+132 // We're not looking for unused slots, so just add the factors at the end.\n+133 for (size_t i = 0; i < num_factors; ++i) newFactorIndices[i] = i + size();\n+134 push_back(factors);\n+135 }\n+136 return newFactorIndices;\n+137}\n+138\n+139/* *************************************************************************\n+*/\n+140template \n+_\b1_\b4_\b1void _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bd_\bo_\bt(std::ostream& os,\n+142 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n+143 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n+144 writer._\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\ba_\bm_\bb_\bl_\be(&os);\n+145\n+146 // Create nodes for each variable in the graph\n+147 for (_\bK_\be_\by key : keys()) {\n+148 auto position = writer._\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs(key);\n+149 writer._\bd_\br_\ba_\bw_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be(key, keyFormatter, position, &os);\n+150 }\n+151 os << \"\\n\";\n 152\n-155 Vector2 errorVector(const _\bU_\bn_\bi_\bt_\b3& q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> H_p = boost::\n-none, //\n-156 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> H_q = boost::none) const;\n-157\n-159 double distance(const _\bU_\bn_\bi_\bt_\b3& q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H = boost::none)\n-const;\n-160\n-_\b1_\b6_\b2 _\bU_\bn_\bi_\bt_\b3 _\bc_\br_\bo_\bs_\bs(const _\bU_\bn_\bi_\bt_\b3& q) const {\n-163 return _\bU_\bn_\bi_\bt_\b3(p_.cross(q.p_));\n-164 }\n+153 // Create factors and variable connections\n+154 for (size_t i = 0; i < size(); ++i) {\n+155 const auto& factor = at(i);\n+156 if (factor) {\n+157 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& factorKeys = factor->keys();\n+158 writer._\bp_\br_\bo_\bc_\be_\bs_\bs_\bF_\ba_\bc_\bt_\bo_\br(i, factorKeys, keyFormatter, boost::none, &os);\n+159 }\n+160 }\n+161\n+162 os << \"}\\n\";\n+163 std::flush(os);\n+164}\n 165\n-_\b1_\b6_\b7 _\bP_\bo_\bi_\bn_\bt_\b3 _\bc_\br_\bo_\bs_\bs(const _\bP_\bo_\bi_\bn_\bt_\b3& q) const {\n-168 return point3().cross(q);\n-169 }\n-170\n-172\n-175\n-_\b1_\b7_\b7 inline static size_t _\bD_\bi_\bm() {\n-178 return 2;\n-179 }\n-180\n-_\b1_\b8_\b2 inline size_t _\bd_\bi_\bm() const {\n-183 return 2;\n-184 }\n-185\n-_\b1_\b8_\b6 enum _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\bM_\bo_\bd_\be {\n-_\b1_\b8_\b7 _\bE_\bX_\bP_\bM_\bA_\bP,\n-188 RENORM\n-_\b1_\b8_\b9 };\n-190\n-192 _\bU_\bn_\bi_\bt_\b3 retract(const Vector2& v, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b2_\b> H = boost::none)\n-const;\n-193\n-195 Vector2 localCoordinates(const _\bU_\bn_\bi_\bt_\b3& s) const;\n-196\n-198\n-199private:\n-200\n-203\n-_\b2_\b0_\b4 friend class boost::serialization::access;\n-205 template\n-206 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-207 ar & BOOST_SERIALIZATION_NVP(p_);\n-208 }\n-209\n-211\n-212public:\n-213 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-214};\n-215\n-216// Define GTSAM traits\n-_\b2_\b1_\b7template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bU_\bn_\bi_\bt_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {\n-218};\n-219\n-_\b2_\b2_\b0template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {\n-221};\n-222\n-223} // namespace gtsam\n-224\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-serialization for Vectors\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\n-_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-2D Point\n+166/* *************************************************************************\n+*/\n+167template \n+_\b1_\b6_\b8std::string _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n+169 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n+170 std::stringstream ss;\n+171 _\bd_\bo_\bt(ss, keyFormatter, writer);\n+172 return ss.str();\n+173}\n+174\n+175/* *************************************************************************\n+*/\n+176template \n+_\b1_\b7_\b7void _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n+178 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n+179 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer) const {\n+180 std::ofstream of(filename.c_str());\n+181 _\bd_\bo_\bt(of, keyFormatter, writer);\n+182 of.close();\n+183}\n+184\n+185} // namespace gtsam\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+FastVector< FactorIndex > FactorIndices\n+Define collection types:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n double dot(const V1 &a, const V2 &b)\n Dot product.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n-bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n-DenseBase< MATRIX > &B, double tol=1e-9)\n-equals with a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-Both ManifoldTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Unit3(const Unit3 &u)\n-Copy constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Unit3()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-friend Point3 operator*(double s, const Unit3 &d)\n-Return scaled direction as Point3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-Dimensionality of tangent space = 2 DOF.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-Dimensionality of tangent space = 2 DOF.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:182\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const Unit3 &s, double tol=1e-9) const\n-The equals function with tolerance.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\bM_\bo_\bd_\be\n-CoordinatesMode\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bE_\bX_\bP_\bM_\bA_\bP\n-@ EXPMAP\n-Use the exponential map to retract.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:187\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bc_\br_\bo_\bs_\bs\n-Unit3 cross(const Unit3 &q) const\n-Cross-product between two Unit3s.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:162\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bc_\br_\bo_\bs_\bs\n-Point3 cross(const Point3 &q) const\n-Cross-product w Point3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-Unit3 & operator=(const Unit3 &u)\n-Copy assignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"FactorGraph\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+Print out graph to std::cout, with optional key formatter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bk_\be_\by_\bs\n+KeySet keys() const\n+Potentially slow function to return all keys involved, sorted, as a set.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs\n+FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)\n+Add new factors to a factor graph and returns a list of new factor indices,\n+optionally finding and re...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bd_\bo_\bt\n+void dot(std::ostream &os, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n+Output to graphviz format, stream version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bk_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+KeyVector keyVector() const\n+Potentially slow function to return all keys involved, sorted, as a vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const HybridValues &values) const\n+Add error for all factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bn_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+size_t nrFactors() const\n+return the number of non-null factors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+return the number of factors (including any null factors set by remove() ).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:326\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &fg, double tol=1e-9) const\n+Check equality up to tolerance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< FACTOR > sharedFactor\n+Shared pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_\n+FastVector< sharedFactor > factors_\n+concept check, makes sure FACTOR defines print and equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n+void saveGraph(const std::string &filename, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n+output to file with graphviz format.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n+DotWriter is a helper class for writing graphviz .dot files.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bd_\br_\ba_\bw_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be\n+void drawVariable(Key key, const KeyFormatter &keyFormatter, const boost::\n+optional< Vector2 > &position, std::ostream *os) const\n+Create a variable dot fragment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bp_\br_\bo_\bc_\be_\bs_\bs_\bF_\ba_\bc_\bt_\bo_\br\n+void processFactor(size_t i, const KeyVector &keys, const KeyFormatter\n+&keyFormatter, const boost::optional< Vector2 > &position, std::ostream *os)\n+const\n+Draw a single factor, specified by its index i and its variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs\n+boost::optional< Vector2 > variablePos(Key key) const\n+Return variable position or none.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\ba_\bm_\bb_\bl_\be\n+void graphPreamble(std::ostream *os) const\n+Write out preamble for graph, including size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.cpp:30\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * U\bUn\bni\bit\bt3\b3.\b.h\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n+ * _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00329_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00314_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
Similarity3.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/base/Lie.h>
\n-
22#include <gtsam/base/Manifold.h>
\n+
21#include <gtsam/base/Lie.h>
\n+
22#include <gtsam/base/Manifold.h>
\n
23#include <gtsam/dllexport.h>
\n-\n-\n-
26#include <gtsam/geometry/Rot3.h>
\n+\n+\n+
26#include <gtsam/geometry/Rot3.h>
\n
27
\n
28namespace gtsam {
\n
29
\n
30// Forward declarations
\n
31class Pose3;
\n
32
\n
\n@@ -235,19 +235,19 @@\n
215template <>
\n
216struct traits<Similarity3> : public internal::LieGroup<Similarity3> {};
\n
217
\n
218template <>
\n
219struct traits<const Similarity3> : public internal::LieGroup<Similarity3> {};
\n
220
\n
221} // namespace gtsam
\n-
Base class and basic functions for Manifold types.
\n-
Base class and basic functions for Lie types.
\n-
3D rotation represented as a rotation matrix or quaternion
\n-
3D Point
\n-
3D Pose
\n+
Base class and basic functions for Lie types.
\n+
Base class and basic functions for Manifold types.
\n+
3D Pose
\n+
3D rotation represented as a rotation matrix or quaternion
\n+
3D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition Matrix.h:100
\n
Matrix wedge(const Vector &x)
Declaration of wedge (see Murray94book) used to convert from n exponential coordinates to n*n element...
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n@@ -266,13 +266,13 @@\n
double scale() const
Return the scale.
Definition Similarity3.h:191
\n
Chart at the origin.
Definition Similarity3.h:153
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -134,24 +134,24 @@\n _\b2_\b1_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bi_\bt_\by_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n 217\n 218template <>\n _\b2_\b1_\b9struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n {};\n 220\n 221} // namespace gtsam\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n _\bL_\bi_\be_\b._\bh\n Base class and basic functions for Lie types.\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n _\bR_\bo_\bt_\b3_\b._\bh\n 3D rotation represented as a rotation matrix or quaternion\n _\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n 3D Point\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00335.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00926.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ManifoldPreintegration.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n \n \n
\n \n-
Cal3DS2.cpp File Reference
\n+Classes |\n+Namespaces
\n+
ManifoldPreintegration.h File Reference
\n \n
\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::ManifoldPreintegration
 IMU pre-integration on NavSatet manifold. More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n

\n-Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Cal3DS2 &cal)
 
\n

Detailed Description

\n-
Date
Feb 28, 2010
\n-
Author
ydjian
\n+
Author
Luca Carlone
\n+
\n+Stephen Williams
\n+
\n+Richard Roberts
\n+
\n+Vadim Indelman
\n+
\n+David Jensen
\n
\n-Varun Agrawal
\n+Frank Dellaert
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Cal3DS2.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ManifoldPreintegration.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n+\u00a0 IMU pre-integration on NavSatet manifold. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\bD_\bS_\b2 &cal)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Feb 28, 2010\n Author\n- ydjian\n- Varun Agrawal\n+ Luca Carlone\n+ Stephen Williams\n+ Richard Roberts\n+ Vadim Indelman\n+ David Jensen\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bc_\bp_\bp\n+ * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n+ * _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00344_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00815_source.html", "comments": ["Files 84% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SOn.h
\n+
GaussianFactorGraph.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <gtsam/base/Lie.h>
\n-
22#include <gtsam/base/Manifold.h>
\n-\n-
24#include <gtsam/dllexport.h>
\n-
25#include <Eigen/Core>
\n-
26
\n-
27#include <boost/serialization/nvp.hpp>
\n-
28
\n-
29#include <iostream> // TODO(frank): how to avoid?
\n-
30#include <string>
\n-
31#include <type_traits>
\n-
32#include <vector>
\n-
33#include <random>
\n-
34
\n-
35namespace gtsam {
\n-
36
\n-
37namespace internal {
\n-
\n-
39constexpr int DimensionSO(int N) {
\n-
40 return (N < 0) ? Eigen::Dynamic : N * (N - 1) / 2;
\n-
41}
\n-
\n+
22#pragma once
\n+
23
\n+\n+\n+
26#include <gtsam/linear/Errors.h> // Included here instead of fw-declared so we can use Errors::iterator
\n+\n+\n+\n+\n+
31
\n+
32namespace gtsam {
\n+
33
\n+
34 // Forward declarations
\n+
35 class GaussianFactorGraph;
\n+
36 class GaussianFactor;
\n+\n+
38 class GaussianBayesNet;
\n+
39 class GaussianEliminationTree;
\n+
40 class GaussianBayesTree;
\n+
41 class GaussianJunctionTree;
\n
42
\n-
43// Calculate N^2 at compile time, or return Dynamic if so
\n-
44constexpr int NSquaredSO(int N) { return (N < 0) ? Eigen::Dynamic : N * N; }
\n-
45} // namespace internal
\n-
46
\n-
51template <int N>
\n-
\n-
52class SO : public LieGroup<SO<N>, internal::DimensionSO(N)> {
\n-
53 public:
\n-
54 enum { dimension = internal::DimensionSO(N) };
\n-
55 using MatrixNN = Eigen::Matrix<double, N, N>;
\n-
56 using VectorN2 = Eigen::Matrix<double, internal::NSquaredSO(N), 1>;
\n-
57 using MatrixDD = Eigen::Matrix<double, dimension, dimension>;
\n-
58
\n-\n-
60
\n-
61 protected:
\n-
62 MatrixNN matrix_;
\n-
63
\n-
64 // enable_if_t aliases, used to specialize constructors/methods, see
\n-
65 // https://www.fluentcpp.com/2018/05/18/make-sfinae-pretty-2-hidden-beauty-sfinae/
\n-
66 template <int N_>
\n-
67 using IsDynamic = typename std::enable_if<N_ == Eigen::Dynamic, void>::type;
\n-
68 template <int N_>
\n-
69 using IsFixed = typename std::enable_if<N_ >= 2, void>::type;
\n-
70 template <int N_>
\n-
71 using IsSO3 = typename std::enable_if<N_ == 3, void>::type;
\n-
72
\n-
73 public:
\n-
76
\n-
78 template <int N_ = N, typename = IsFixed<N_>>
\n-
79 SO() : matrix_(MatrixNN::Identity()) {}
\n-
80
\n-
82 template <int N_ = N, typename = IsDynamic<N_>>
\n-
\n-
83 explicit SO(size_t n = 0) {
\n-
84 // We allow for n=0 as the default constructor, needed for serialization,
\n-
85 // wrappers etc.
\n-
86 matrix_ = Eigen::MatrixXd::Identity(n, n);
\n-
87 }
\n-
\n+
43 /* ************************************************************************* */
\n+
\n+\n+
45 {
\n+\n+\n+\n+\n+\n+\n+\n+
54 static std::pair<boost::shared_ptr<ConditionalType>, boost::shared_ptr<FactorType> >
\n+
\n+
55 DefaultEliminate(const FactorGraphType& factors, const Ordering& keys) {
\n+
56 return EliminatePreferCholesky(factors, keys); }
\n+
\n+
\n+\n+
59 const FactorGraphType& graph,
\n+
60 boost::optional<const VariableIndex&> variableIndex) {
\n+
61 return Ordering::Colamd(*variableIndex);
\n+
62 }
\n+
\n+
63 };
\n+
\n+
64
\n+
65 /* ************************************************************************* */
\n+
\n+
72 class GTSAM_EXPORT GaussianFactorGraph :
\n+
73 public FactorGraph<GaussianFactor>,
\n+
74 public EliminateableFactorGraph<GaussianFactorGraph>
\n+
75 {
\n+
76 public:
\n+
77
\n+\n+\n+\n+
81 typedef boost::shared_ptr<This> shared_ptr;
\n+
82
\n+
85
\n+\n
88
\n-
90 template <typename Derived>
\n-
91 explicit SO(const Eigen::MatrixBase<Derived>& R) : matrix_(R.eval()) {}
\n-
92
\n-
94 template <typename Derived>
\n-
\n-
95 static SO FromMatrix(const Eigen::MatrixBase<Derived>& R) {
\n-
96 return SO(R);
\n-
97 }
\n-
\n-
98
\n-
100 template <typename Derived, int N_ = N, typename = IsDynamic<N_>>
\n-
\n-
101 static SO Lift(size_t n, const Eigen::MatrixBase<Derived> &R) {
\n-
102 Matrix Q = Matrix::Identity(n, n);
\n-
103 const int p = R.rows();
\n-
104 assert(p >= 0 && p <= static_cast<int>(n) && R.cols() == p);
\n-
105 Q.topLeftCorner(p, p) = R;
\n-
106 return SO(Q);
\n-
107 }
\n-
\n+
94 GaussianFactorGraph(std::initializer_list<sharedFactor> factors) : Base(factors) {}
\n+
95
\n+
96
\n+
98 template<typename ITERATOR>
\n+
99 GaussianFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor) : Base(firstFactor, lastFactor) {}
\n+
100
\n+
102 template<class CONTAINER>
\n+
103 explicit GaussianFactorGraph(const CONTAINER& factors) : Base(factors) {}
\n+
104
\n+
106 template<class DERIVEDFACTOR>
\n+\n
108
\n-
110 template <int M, int N_ = N, typename = IsDynamic<N_>>
\n-
111 explicit SO(const SO<M>& R) : matrix_(R.matrix()) {}
\n-
112
\n-
114 template <int N_ = N, typename = IsSO3<N_>>
\n-
115 explicit SO(const Eigen::AngleAxisd& angleAxis) : matrix_(angleAxis) {}
\n-
116
\n-
118 static SO AxisAngle(const Vector3& axis, double theta);
\n+\n+
111
\n+
115
\n+
116 bool equals(const This& fg, double tol = 1e-9) const;
\n+
117
\n
119
\n-
122 static SO ClosestTo(const MatrixNN& M);
\n-
123
\n-
127 static SO ChordalMean(const std::vector<SO>& rotations);
\n+
\n+
121 friend bool operator==(const GaussianFactorGraph& lhs,
\n+
122 const GaussianFactorGraph& rhs) {
\n+
123 return lhs.isEqual(rhs);
\n+
124 }
\n+
\n+
125
\n+
127 void add(const GaussianFactor& factor) { push_back(factor.clone()); }
\n
128
\n-
130 template <int N_ = N, typename = IsDynamic<N_>>
\n-
\n-
131 static SO Random(std::mt19937& rng, size_t n = 0) {
\n-
132 if (n == 0) throw std::runtime_error("SO: Dimensionality not known.");
\n-
133 // TODO(frank): this might need to be re-thought
\n-
134 static std::uniform_real_distribution<double> randomAngle(-M_PI, M_PI);
\n-
135 const size_t d = SO::Dimension(n);
\n-
136 Vector xi(d);
\n-
137 for (size_t j = 0; j < d; j++) {
\n-
138 xi(j) = randomAngle(rng);
\n-
139 }
\n-
140 return SO::Retract(xi);
\n-
141 }
\n-
\n-
142
\n-
144 template <int N_ = N, typename = IsFixed<N_>>
\n-
\n-
145 static SO Random(std::mt19937& rng) {
\n-
146 // By default, use dynamic implementation above. Specialized for SO(3).
\n-
147 return SO(SO<Eigen::Dynamic>::Random(rng, N).matrix());
\n-
148 }
\n+
130 void add(const sharedFactor& factor) { push_back(factor); }
\n+
131
\n+
\n+
133 void add(const Vector& b) {
\n+
134 add(JacobianFactor(b)); }
\n+
\n+
135
\n+
\n+
137 void add(Key key1, const Matrix& A1,
\n+
138 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {
\n+
139 add(JacobianFactor(key1,A1,b,model)); }
\n+
\n+
140
\n+
\n+
142 void add(Key key1, const Matrix& A1,
\n+
143 Key key2, const Matrix& A2,
\n+
144 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {
\n+
145 add(JacobianFactor(key1,A1,key2,A2,b,model)); }
\n+
\n+
146
\n+
\n+
148 void add(Key key1, const Matrix& A1,
\n+
149 Key key2, const Matrix& A2,
\n+
150 Key key3, const Matrix& A3,
\n+
151 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {
\n+
152 add(JacobianFactor(key1,A1,key2,A2,key3,A3,b,model)); }
\n
\n-
149
\n
153
\n-
155 const MatrixNN& matrix() const { return matrix_; }
\n-
156
\n-
157 size_t rows() const { return matrix_.rows(); }
\n-
158 size_t cols() const { return matrix_.cols(); }
\n-
159
\n-
163
\n-
164 void print(const std::string& s = std::string()) const;
\n+
155 template<class TERMS>
\n+
\n+
156 void add(const TERMS& terms, const Vector &b, const SharedDiagonal& model = SharedDiagonal()) {
\n+
157 add(JacobianFactor(terms,b,model)); }
\n+
\n+
158
\n+
163 typedef KeySet Keys;
\n+
164 Keys keys() const;
\n
165
\n-
166 bool equals(const SO& other, double tol) const {
\n-
167 return equal_with_abs_tol(matrix_, other.matrix_, tol);
\n-
168 }
\n-
169
\n-
173
\n-
\n-
175 SO operator*(const SO& other) const {
\n-
176 assert(dim() == other.dim());
\n-
177 return SO(matrix_ * other.matrix_);
\n-
178 }
\n-
\n-
179
\n-
181 template <int N_ = N, typename = IsFixed<N_>>
\n-
\n-
182 static SO Identity() {
\n-
183 return SO();
\n-
184 }
\n-
\n-
185
\n-
187 template <int N_ = N, typename = IsDynamic<N_>>
\n-
\n-
188 static SO Identity(size_t n = 0) {
\n-
189 return SO(n);
\n-
190 }
\n-
\n-
191
\n-
193 SO inverse() const { return SO(matrix_.transpose()); }
\n-
194
\n+
166 /* return a map of (Key, dimension) */
\n+
167 std::map<Key, size_t> getKeyDimMap() const;
\n+
168
\n+
170 double error(const VectorValues& x) const;
\n+
171
\n+
173 double probPrime(const VectorValues& c) const;
\n+
174
\n+
180 virtual GaussianFactorGraph clone() const;
\n+
181
\n+
186 virtual GaussianFactorGraph::shared_ptr cloneToPtr() const;
\n+
187
\n+
194 GaussianFactorGraph negate() const;
\n+
195
\n
198
\n-
199 using TangentVector = Eigen::Matrix<double, dimension, 1>;
\n-
200 using ChartJacobian = OptionalJacobian<dimension, dimension>;
\n-
201
\n-
203 static int Dim() { return dimension; }
\n-
204
\n-
205 // Calculate manifold dimensionality for SO(n).
\n-
206 // Available as dimension or Dim() for fixed N.
\n-
207 static size_t Dimension(size_t n) { return n * (n - 1) / 2; }
\n-
208
\n-
209 // Calculate ambient dimension n from manifold dimensionality d.
\n-
210 static size_t AmbientDim(size_t d) { return (1 + std::sqrt(1 + 8 * d)) / 2; }
\n+
209 std::vector<std::tuple<int, int, double> > sparseJacobian(
\n+
210 const Ordering& ordering, size_t& nrows, size_t& ncols) const;
\n
211
\n-
212 // Calculate run-time dimensionality of manifold.
\n-
213 // Available as dimension or Dim() for fixed N.
\n-
214 size_t dim() const { return Dimension(static_cast<size_t>(matrix_.rows())); }
\n-
215
\n-
231 static MatrixNN Hat(const TangentVector& xi);
\n-
232
\n-
234 static void Hat(const Vector &xi, Eigen::Ref<MatrixNN> X);
\n-
235
\n-
237 static TangentVector Vee(const MatrixNN& X);
\n-
238
\n-
239 // Chart at origin
\n-
\n-\n-
245 static SO Retract(const TangentVector& xi, ChartJacobian H = boost::none);
\n-
246
\n-
250 static TangentVector Local(const SO& R, ChartJacobian H = boost::none);
\n-
251 };
\n-
\n-
252
\n-
253 // Return dynamic identity DxD Jacobian for given SO(n)
\n-
254 template <int N_ = N, typename = IsDynamic<N_>>
\n-
255 static MatrixDD IdentityJacobian(size_t n) {
\n-
256 const size_t d = Dimension(n);
\n-
257 return MatrixDD::Identity(d, d);
\n-
258 }
\n-
259
\n-
263
\n-
265 MatrixDD AdjointMap() const;
\n-
266
\n-
270 static SO Expmap(const TangentVector& omega, ChartJacobian H = boost::none);
\n+
213 std::vector<std::tuple<int, int, double> > sparseJacobian() const;
\n+
214
\n+
221 Matrix sparseJacobian_() const;
\n+
222
\n+
230 Matrix augmentedJacobian(const Ordering& ordering) const;
\n+
231
\n+
239 Matrix augmentedJacobian() const;
\n+
240
\n+
248 std::pair<Matrix,Vector> jacobian(const Ordering& ordering) const;
\n+
249
\n+
257 std::pair<Matrix,Vector> jacobian() const;
\n+
258
\n+
270 Matrix augmentedHessian(const Ordering& ordering) const;
\n
271
\n-
273 static MatrixDD ExpmapDerivative(const TangentVector& omega);
\n-
274
\n-
278 static TangentVector Logmap(const SO& R, ChartJacobian H = boost::none);
\n-
279
\n-
281 static MatrixDD LogmapDerivative(const TangentVector& omega);
\n-
282
\n-
283 // inverse with optional derivative
\n-
284 using LieGroup<SO<N>, internal::DimensionSO(N)>::inverse;
\n-
285
\n-
289
\n-
295 VectorN2 vec(OptionalJacobian<internal::NSquaredSO(N), dimension> H =
\n-
296 boost::none) const;
\n-
297
\n-
299 template <int N_ = N, typename = IsFixed<N_>>
\n-
\n-
300 static Matrix VectorizedGenerators() {
\n-
301 constexpr size_t N2 = static_cast<size_t>(N * N);
\n-
302 Eigen::Matrix<double, N2, dimension> G;
\n-
303 for (size_t j = 0; j < dimension; j++) {
\n-
304 const auto X = Hat(Vector::Unit(dimension, j));
\n-
305 G.col(j) = Eigen::Map<const VectorN2>(X.data());
\n-
306 }
\n-
307 return G;
\n-
308 }
\n-
\n-
309
\n-
311 template <int N_ = N, typename = IsDynamic<N_>>
\n-
\n-
312 static Matrix VectorizedGenerators(size_t n = 0) {
\n-
313 const size_t n2 = n * n, dim = Dimension(n);
\n-
314 Matrix G(n2, dim);
\n-
315 for (size_t j = 0; j < dim; j++) {
\n-
316 const auto X = Hat(Vector::Unit(dim, j));
\n-
317 G.col(j) = Eigen::Map<const Matrix>(X.data(), n2, 1);
\n-
318 }
\n-
319 return G;
\n-
320 }
\n-
\n-
321
\n+
283 Matrix augmentedHessian() const;
\n+
284
\n+
291 std::pair<Matrix,Vector> hessian(const Ordering& ordering) const;
\n+
292
\n+
299 std::pair<Matrix,Vector> hessian() const;
\n+
300
\n+
302 virtual VectorValues hessianDiagonal() const;
\n+
303
\n+
305 virtual std::map<Key,Matrix> hessianBlockDiagonal() const;
\n+
306
\n+\n+
312 const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
\n+
313
\n+\n+
319 const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;
\n+
320
\n+
324 VectorValues optimizeDensely() const;
\n
325
\n-
326 template <class Archive>
\n-
327 friend void save(Archive&, SO&, const unsigned int);
\n-
328 template <class Archive>
\n-
329 friend void load(Archive&, SO&, const unsigned int);
\n-
330 template <class Archive>
\n-
331 friend void serialize(Archive&, SO&, const unsigned int);
\n-
332 friend class boost::serialization::access;
\n-
333 friend class Rot3; // for serialize
\n-
334
\n-
336};
\n-
\n-
337
\n-
338using SOn = SO<Eigen::Dynamic>;
\n-
339
\n-
340/*
\n-
341 * Specialize dynamic Hat and Vee, because recursion depends on dynamic nature.
\n-
342 * The definition is in SOn.cpp. Fixed-size SO3 and SO4 have their own version,
\n-
343 * and implementation for other fixed N is in SOn-inl.h.
\n-
344 */
\n+
335 VectorValues gradient(const VectorValues& x0) const;
\n+
336
\n+
344 virtual VectorValues gradientAtZero() const;
\n
345
\n-
346template <>
\n-
347GTSAM_EXPORT
\n-
348Matrix SOn::Hat(const Vector& xi);
\n-
349
\n-
350template <>
\n-
351GTSAM_EXPORT
\n-
352Vector SOn::Vee(const Matrix& X);
\n-
353
\n-
354/*
\n-
355 * Specialize dynamic compose and between, because the derivative is unknowable
\n-
356 * by the LieGroup implementations, who return a fixed-size matrix for H2.
\n-
357 */
\n-
358
\n-
359using DynamicJacobian = OptionalJacobian<Eigen::Dynamic, Eigen::Dynamic>;
\n-
360
\n-
361template <>
\n-
362GTSAM_EXPORT
\n-
363SOn LieGroup<SOn, Eigen::Dynamic>::compose(const SOn& g, DynamicJacobian H1,
\n-
364 DynamicJacobian H2) const;
\n-
365
\n-
366template <>
\n-
367GTSAM_EXPORT
\n-
368SOn LieGroup<SOn, Eigen::Dynamic>::between(const SOn& g, DynamicJacobian H1,
\n-
369 DynamicJacobian H2) const;
\n-
370
\n-
371/*
\n-
372 * Specialize dynamic vec.
\n-
373 */
\n-
374template <>
\n-
375GTSAM_EXPORT
\n-
376typename SOn::VectorN2 SOn::vec(DynamicJacobian H) const;
\n+
370 VectorValues optimizeGradientSearch() const;
\n+
371
\n+
373 VectorValues transposeMultiply(const Errors& e) const;
\n+
374
\n+
376 void transposeMultiplyAdd(double alpha, const Errors& e, VectorValues& x) const;
\n
377
\n-
379template<class Archive>
\n-
\n-\n-
381 Archive& ar, SOn& Q,
\n-
382 const unsigned int file_version
\n-
383) {
\n-
384 Matrix& M = Q.matrix_;
\n-
385 ar& BOOST_SERIALIZATION_NVP(M);
\n-
386}
\n-
\n+
379 Errors gaussianErrors(const VectorValues& x) const;
\n+
380
\n+
382 Errors operator*(const VectorValues& x) const;
\n+
383
\n+
385 void multiplyHessianAdd(double alpha, const VectorValues& x,
\n+
386 VectorValues& y) const;
\n
387
\n-
388/*
\n-
389 * Define the traits. internal::LieGroup provides both Lie group and Testable
\n-
390 */
\n-
391
\n-
392template <int N>
\n-
393struct traits<SO<N>> : public internal::LieGroup<SO<N>> {};
\n-
394
\n-
395template <int N>
\n-
396struct traits<const SO<N>> : public internal::LieGroup<SO<N>> {};
\n-
397
\n-
398} // namespace gtsam
\n-
399
\n-
400#include "SOn-inl.h"
\n-
Base class and basic functions for Manifold types.
\n-
make_shared trampoline function to ensure proper alignment
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n-
Base class and basic functions for Lie types.
\n-
Template implementations for SO(n)
\n-
constexpr int DimensionSO(int N)
Calculate dimensionality of SO<N> manifold, or return Dynamic if so.
Definition SOn.h:39
\n+
389 void multiplyInPlace(const VectorValues& x, Errors& e) const;
\n+
390
\n+
392 void multiplyInPlace(const VectorValues& x, const Errors::iterator& e) const;
\n+
393
\n+
394 void printErrors(
\n+
395 const VectorValues& x,
\n+
396 const std::string& str = "GaussianFactorGraph: ",
\n+
397 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
398 const std::function<bool(const Factor* /*factor*/,
\n+
399 double /*whitenedError*/, size_t /*index*/)>&
\n+
400 printCondition =
\n+
401 [](const Factor*, double, size_t) { return true; }) const;
\n+
403
\n+
404 private:
\n+
406 friend class boost::serialization::access;
\n+
407 template<class ARCHIVE>
\n+
408 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
409 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
410 }
\n+
411
\n+
412 public:
\n+
413
\n+
414#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
416 VectorValues GTSAM_DEPRECATED
\n+
417 optimize(boost::none_t, const Eliminate& function =
\n+
418 EliminationTraitsType::DefaultEliminate) const {
\n+
419 return optimize(function);
\n+
420 }
\n+
421#endif
\n+
422
\n+
423 };
\n+
\n+
424
\n+
429 GTSAM_EXPORT bool hasConstraints(const GaussianFactorGraph& factors);
\n+
430
\n+
431 /****** Linear Algebra Operations ******/
\n+
432
\n+
434 //GTSAM_EXPORT void residual(const GaussianFactorGraph& fg, const VectorValues &x, VectorValues &r);
\n+
435 //GTSAM_EXPORT void multiply(const GaussianFactorGraph& fg, const VectorValues &x, VectorValues &r);
\n+
436
\n+
438template<>
\n+
\n+
439struct traits<GaussianFactorGraph> : public Testable<GaussianFactorGraph> {
\n+
440};
\n+
\n+
441
\n+
442} // \\ namespace gtsam
\n+
Variable elimination algorithms for factor graphs.
\n+
Factor Graph Base Class.
\n+\n+
A factor with a quadratic error function - a Gaussian.
\n+
Contains the HessianFactor class, a general quadratic factor.
\n+
Factor Graph Values.
\n+
vector of errors
\n+
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with Cholesky factorization.
Definition HessianFactor.cpp:548
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::string serialize(const T &input)
serializes to a string
Definition serialization.h:113
\n-
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n+
bool hasConstraints(const GaussianFactorGraph &factors)
Evaluates whether linear factors have any constrained noise models.
Definition GaussianFactorGraph.cpp:442
\n+
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n+
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n-
static SO< N > Retract(const TangentVector &v)
Retract at origin: possible in Lie group because it has an identity.
Definition Lie.h:111
\n-
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
Manifold of special orthogonal rotation matrices SO<N>.
Definition SOn.h:52
\n-
static SO FromMatrix(const Eigen::MatrixBase< Derived > &R)
Named constructor from Eigen Matrix.
Definition SOn.h:95
\n-
static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates.
Definition SOn-inl.h:67
\n-
static Matrix VectorizedGenerators()
Calculate N^2 x dim matrix of vectorized Lie algebra generators for SO(N)
Definition SOn.h:300
\n-
SO inverse() const
inverse of a rotation = transpose
Definition SOn.h:193
\n-
VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::none) const
Return vectorized rotation matrix in column order.
Definition SOn-inl.h:88
\n-
static SO ChordalMean(const std::vector< SO > &rotations)
Named constructor that finds chordal mean , currently only defined for SO3.
\n-
SO operator*(const SO &other) const
Multiplication.
Definition SOn.h:175
\n-
static TangentVector Vee(const MatrixNN &X)
Inverse of Hat. See note about xi element order in Hat.
Definition SOn-inl.h:35
\n-
MatrixNN matrix_
Rotation matrix.
Definition SOn.h:62
\n-
static TangentVector Logmap(const SO &R, ChartJacobian H=boost::none)
Log map at identity - returns the canonical coordinates of this rotation.
Definition SOn-inl.h:77
\n-
static SO AxisAngle(const Vector3 &axis, double theta)
Constructor from axis and angle. Only defined for SO3.
\n-
MatrixDD AdjointMap() const
Adjoint map.
Definition SO4.cpp:159
\n-
static void Hat(const Vector &xi, Eigen::Ref< MatrixNN > X)
In-place version of Hat (see details there), implements recursion.
\n-
static SO Identity()
SO<N> identity for N >= 2.
Definition SOn.h:182
\n-
static int Dim()
Return compile-time dimensionality: fixed size N or Eigen::Dynamic.
Definition SOn.h:203
\n-
static MatrixNN Hat(const TangentVector &xi)
Hat operator creates Lie algebra element corresponding to d-vector, where d is the dimensionality of ...
Definition SOn-inl.h:29
\n-
static MatrixDD ExpmapDerivative(const TangentVector &omega)
Derivative of Expmap, currently only defined for SO3.
Definition SOn-inl.h:72
\n-
static MatrixDD LogmapDerivative(const TangentVector &omega)
Derivative of Logmap, currently only defined for SO3.
Definition SOn-inl.h:82
\n-
SO(const SO< M > &R)
Construct dynamic SO(n) from Fixed SO<M>
Definition SOn.h:111
\n-
SO(size_t n=0)
Construct SO<N> identity for N == Eigen::Dynamic.
Definition SOn.h:83
\n-
SO()
Construct SO<N> identity for N >= 2.
Definition SOn.h:79
\n-
static SO Lift(size_t n, const Eigen::MatrixBase< Derived > &R)
Named constructor from lower dimensional matrix.
Definition SOn.h:101
\n-
static SO Random(std::mt19937 &rng, size_t n=0)
Random SO(n) element (no big claims about uniformity). SO(3) is specialized in SO3....
Definition SOn.h:131
\n-
static SO Identity(size_t n=0)
SO<N> identity for N == Eigen::Dynamic.
Definition SOn.h:188
\n-
const MatrixNN & matrix() const
Return matrix.
Definition SOn.h:155
\n-
static SO Random(std::mt19937 &rng)
Random SO(N) element (no big claims about uniformity)
Definition SOn.h:145
\n-
static SO ClosestTo(const MatrixNN &M)
Named constructor that finds SO(n) matrix closest to M in Frobenius norm, currently only defined for ...
\n-
SO(const Eigen::AngleAxisd &angleAxis)
Constructor from AngleAxisd.
Definition SOn.h:115
\n-
static Matrix VectorizedGenerators(size_t n=0)
Calculate n^2 x dim matrix of vectorized Lie algebra generators for SO(n)
Definition SOn.h:312
\n-
SO(const Eigen::MatrixBase< Derived > &R)
Constructor from Eigen Matrix, dynamic version.
Definition SOn.h:91
\n-
Definition SOn.h:240
\n-
static TangentVector Local(const SO &R, ChartJacobian H=boost::none)
Inverse of Retract.
Definition SOn-inl.h:50
\n-
static SO Retract(const TangentVector &xi, ChartJacobian H=boost::none)
Retract uses Cayley map.
Definition SOn-inl.h:40
\n+\n+\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
bool isEqual(const FactorGraph &other) const
Check exact equality of the factor pointers. Useful for derived ==.
Definition FactorGraph.h:134
\n+
boost::shared_ptr< GaussianFactor > sharedFactor
Shared pointer to a factor.
Definition FactorGraph.h:101
\n+
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n+
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:57
\n+
Definition Factor.h:68
\n+
Definition Ordering.h:34
\n+
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:95
\n+
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
\n+
A Bayes tree representing a Gaussian density.
Definition GaussianBayesTree.h:52
\n+
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n+
Definition GaussianEliminationTree.h:29
\n+
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n+
virtual GaussianFactor::shared_ptr clone() const =0
Clone a factor (make a deep copy)
\n+
static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::optional< const VariableIndex & > variableIndex)
The default ordering generation function.
Definition GaussianFactorGraph.h:58
\n+
GaussianBayesTree BayesTreeType
Type of Bayes tree.
Definition GaussianFactorGraph.h:51
\n+
GaussianConditional ConditionalType
Type of conditionals from elimination.
Definition GaussianFactorGraph.h:48
\n+
GaussianFactor FactorType
Type of factors in factor graph.
Definition GaussianFactorGraph.h:46
\n+
GaussianEliminationTree EliminationTreeType
Type of elimination tree.
Definition GaussianFactorGraph.h:50
\n+
GaussianFactorGraph FactorGraphType
Type of the factor graph (e.g. GaussianFactorGraph)
Definition GaussianFactorGraph.h:47
\n+
GaussianBayesNet BayesNetType
Type of Bayes net from sequential elimination.
Definition GaussianFactorGraph.h:49
\n+
GaussianJunctionTree JunctionTreeType
Type of Junction tree.
Definition GaussianFactorGraph.h:52
\n+
static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering &keys)
The default dense elimination function.
Definition GaussianFactorGraph.h:55
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
EliminateableFactorGraph< This > BaseEliminateable
Typedef to base elimination class.
Definition GaussianFactorGraph.h:80
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n+
void add(const TERMS &terms, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add an n-ary factor.
Definition GaussianFactorGraph.h:156
\n+
GaussianFactorGraph(std::initializer_list< sharedFactor > factors)
Construct from an initializer lists of GaussianFactor shared pointers.
Definition GaussianFactorGraph.h:94
\n+
GaussianFactorGraph()
Default constructor.
Definition GaussianFactorGraph.h:87
\n+
void add(const GaussianFactor &factor)
Add a factor by value - makes a copy.
Definition GaussianFactorGraph.h:127
\n+
void add(Key key1, const Matrix &A1, Key key2, const Matrix &A2, Key key3, const Matrix &A3, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add a ternary factor.
Definition GaussianFactorGraph.h:148
\n+
void add(const sharedFactor &factor)
Add a factor by pointer - stores pointer without copying the factor.
Definition GaussianFactorGraph.h:130
\n+
friend bool operator==(const GaussianFactorGraph &lhs, const GaussianFactorGraph &rhs)
Check exact equality.
Definition GaussianFactorGraph.h:121
\n+
GaussianFactorGraph This
Typedef to this class.
Definition GaussianFactorGraph.h:78
\n+
KeySet Keys
Return the set of variables involved in the factors (computes a set union).
Definition GaussianFactorGraph.h:163
\n+
void add(const Vector &b)
Add a null factor.
Definition GaussianFactorGraph.h:133
\n+
void add(Key key1, const Matrix &A1, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add a unary factor.
Definition GaussianFactorGraph.h:137
\n+
virtual ~GaussianFactorGraph()
Virtual destructor.
Definition GaussianFactorGraph.h:110
\n+
void add(Key key1, const Matrix &A1, Key key2, const Matrix &A2, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Add a binary factor.
Definition GaussianFactorGraph.h:142
\n+
GaussianFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Construct from iterator over factors.
Definition GaussianFactorGraph.h:99
\n+
FactorGraph< GaussianFactor > Base
Typedef to base factor graph type.
Definition GaussianFactorGraph.h:79
\n+
GaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition GaussianFactorGraph.h:107
\n+
GaussianFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects)
Definition GaussianFactorGraph.h:103
\n+
A junction tree specialized to Gaussian factors, i.e., it is a cluster tree with Gaussian factors sto...
Definition GaussianJunctionTree.h:39
\n+
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
is the normalization constant.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,507 +1,493 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SOn.h\n+GaussianFactorGraph.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd_\b._\bh>\n-24#include \n-25#include \n-26\n-27#include \n-28\n-29#include // TODO(frank): how to avoid?\n-30#include \n-31#include \n-32#include \n-33#include \n-34\n-35namespace _\bg_\bt_\bs_\ba_\bm {\n-36\n-37namespace internal {\n-_\b3_\b9constexpr int _\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bS_\bO(int N) {\n-40 return (N < 0) ? Eigen::Dynamic : N * (N - 1) / 2;\n-41}\n+22#pragma once\n+23\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\br_\br_\bo_\br_\bs_\b._\bh> // Included here instead of fw-declared so\n+we can use Errors::iterator\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+31\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+34 // Forward declarations\n+35 class GaussianFactorGraph;\n+36 class GaussianFactor;\n+37 class _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+38 class GaussianBayesNet;\n+39 class GaussianEliminationTree;\n+40 class GaussianBayesTree;\n+41 class GaussianJunctionTree;\n 42\n-43// Calculate N^2 at compile time, or return Dynamic if so\n-44constexpr int NSquaredSO(int N) { return (N < 0) ? Eigen::Dynamic : N * N; }\n-45} // namespace internal\n-46\n-51template \n-_\b5_\b2class _\bS_\bO : public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp, internal::DimensionSO(N)> {\n-53 public:\n-54 enum { dimension = internal::DimensionSO(N) };\n-55 using MatrixNN = Eigen::Matrix;\n-56 using VectorN2 = Eigen::Matrix;\n-57 using MatrixDD = Eigen::Matrix;\n-58\n-59 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(true)\n-60\n-61 protected:\n-_\b6_\b2 MatrixNN _\bm_\ba_\bt_\br_\bi_\bx_\b_;\n-63\n-64 // enable_if_t aliases, used to specialize constructors/methods, see\n-65 // https://www.fluentcpp.com/2018/05/18/make-sfinae-pretty-2-hidden-beauty-\n-sfinae/\n-66 template \n-67 using IsDynamic = typename std::enable_if::type;\n-68 template \n-69 using IsFixed = typename std::enable_if= 2, void>::type;\n-70 template \n-71 using IsSO3 = typename std::enable_if::type;\n-72\n-73 public:\n-76\n-78 template >\n-_\b7_\b9 _\bS_\bO() : _\bm_\ba_\bt_\br_\bi_\bx_\b_(MatrixNN::_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by()) {}\n-80\n-82 template >\n-_\b8_\b3 explicit _\bS_\bO(size_t n = 0) {\n-84 // We allow for n=0 as the default constructor, needed for serialization,\n-85 // wrappers etc.\n-86 _\bm_\ba_\bt_\br_\bi_\bx_\b_ = Eigen::MatrixXd::Identity(n, n);\n-87 }\n+43 /* *************************************************************************\n+*/\n+_\b4_\b4 template<> struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh>\n+45 {\n+_\b4_\b6 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n+_\b4_\b7 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n+_\b4_\b8 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+_\b4_\b9 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n+_\b5_\b0 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+_\b5_\b1 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+_\b5_\b2 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+54 static std::pair, boost::\n+shared_ptr >\n+_\b5_\b5 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) {\n+56 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by(factors, keys); }\n+_\b5_\b8 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc(\n+59 const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& graph,\n+60 boost::optional variableIndex) {\n+61 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd(*variableIndex);\n+62 }\n+63 };\n+64\n+65 /* *************************************************************************\n+*/\n+_\b7_\b2 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh :\n+73 public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh,\n+74 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+75 {\n+76 public:\n+77\n+_\b7_\b8 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bT_\bh_\bi_\bs;\n+_\b7_\b9 typedef _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b> _\bB_\ba_\bs_\be;\n+_\b8_\b0 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bT_\bh_\bi_\bs_\b> _\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be;\n+_\b8_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+82\n+85\n+_\b8_\b7 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n 88\n-90 template \n-_\b9_\b1 explicit _\bS_\bO(const Eigen::MatrixBase& R) : _\bm_\ba_\bt_\br_\bi_\bx_\b_(R.eval()) {}\n-92\n-94 template \n-_\b9_\b5 static _\bS_\bO _\bF_\br_\bo_\bm_\bM_\ba_\bt_\br_\bi_\bx(const Eigen::MatrixBase& R) {\n-96 return _\bS_\bO(R);\n-97 }\n-98\n-100 template >\n-_\b1_\b0_\b1 static _\bS_\bO _\bL_\bi_\bf_\bt(size_t n, const Eigen::MatrixBase &R) {\n-102 Matrix Q = Matrix::Identity(n, n);\n-103 const int p = R.rows();\n-104 assert(p >= 0 && p <= static_cast(n) && R.cols() == p);\n-105 Q.topLeftCorner(p, p) = R;\n-106 return _\bS_\bO(Q);\n-107 }\n+_\b9_\b4 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(std::initializer_list factors) : _\bB_\ba_\bs_\be\n+(factors) {}\n+95\n+96\n+98 template\n+_\b9_\b9 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(ITERATOR firstFactor, ITERATOR lastFactor) : _\bB_\ba_\bs_\be\n+(firstFactor, lastFactor) {}\n+100\n+102 template\n+_\b1_\b0_\b3 explicit _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const CONTAINER& factors) : _\bB_\ba_\bs_\be(factors) {}\n+104\n+106 template\n+_\b1_\b0_\b7 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph) : _\bB_\ba_\bs_\be(graph)\n+{}\n 108\n-110 template >\n-_\b1_\b1_\b1 explicit _\bS_\bO(const _\bS_\bO_\b<_\bM_\b>& R) : _\bm_\ba_\bt_\br_\bi_\bx_\b_(R._\bm_\ba_\bt_\br_\bi_\bx()) {}\n-112\n-114 template >\n-_\b1_\b1_\b5 explicit _\bS_\bO(const Eigen::AngleAxisd& angleAxis) : _\bm_\ba_\bt_\br_\bi_\bx_\b_(angleAxis) {}\n-116\n-_\b1_\b1_\b8 static _\bS_\bO _\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be(const Vector3& axis, double theta);\n+_\b1_\b1_\b0 virtual _\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n+111\n+115\n+116 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& fg, double tol = 1e-9) const;\n+117\n 119\n-_\b1_\b2_\b2 static _\bS_\bO _\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo(const MatrixNN& M);\n-123\n-_\b1_\b2_\b7 static _\bS_\bO _\bC_\bh_\bo_\br_\bd_\ba_\bl_\bM_\be_\ba_\bn(const std::vector& rotations);\n+_\b1_\b2_\b1 friend bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& lhs,\n+122 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& rhs) {\n+123 return lhs._\bi_\bs_\bE_\bq_\bu_\ba_\bl(rhs);\n+124 }\n+125\n+_\b1_\b2_\b7 void _\ba_\bd_\bd(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& factor) { push_back(factor._\bc_\bl_\bo_\bn_\be()); }\n 128\n-130 template >\n-_\b1_\b3_\b1 static _\bS_\bO _\bR_\ba_\bn_\bd_\bo_\bm(std::mt19937& rng, size_t n = 0) {\n-132 if (n == 0) throw std::runtime_error(\"SO: Dimensionality not known.\");\n-133 // TODO(frank): this might need to be re-thought\n-134 static std::uniform_real_distribution randomAngle(-M_PI, M_PI);\n-135 const size_t d = SO::Dimension(n);\n-136 Vector xi(d);\n-137 for (size_t j = 0; j < d; j++) {\n-138 xi(j) = randomAngle(rng);\n-139 }\n-140 return _\bS_\bO_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(xi);\n-141 }\n-142\n-144 template >\n-_\b1_\b4_\b5 static _\bS_\bO _\bR_\ba_\bn_\bd_\bo_\bm(std::mt19937& rng) {\n-146 // By default, use dynamic implementation above. Specialized for SO(3).\n-147 return _\bS_\bO(_\bS_\bO_\b<_\bE_\bi_\bg_\be_\bn_\b:_\b:_\bD_\by_\bn_\ba_\bm_\bi_\bc_\b>_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm(rng, N)._\bm_\ba_\bt_\br_\bi_\bx());\n-148 }\n-149\n+_\b1_\b3_\b0 void _\ba_\bd_\bd(const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& factor) { push_back(factor); }\n+131\n+_\b1_\b3_\b3 void _\ba_\bd_\bd(const Vector& b) {\n+134 add(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(b)); }\n+135\n+_\b1_\b3_\b7 void _\ba_\bd_\bd(_\bK_\be_\by key1, const Matrix& A1,\n+138 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {\n+139 add(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(key1,A1,b,model)); }\n+140\n+_\b1_\b4_\b2 void _\ba_\bd_\bd(_\bK_\be_\by key1, const Matrix& A1,\n+143 _\bK_\be_\by key2, const Matrix& A2,\n+144 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {\n+145 add(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(key1,A1,key2,A2,b,model)); }\n+146\n+_\b1_\b4_\b8 void _\ba_\bd_\bd(_\bK_\be_\by key1, const Matrix& A1,\n+149 _\bK_\be_\by key2, const Matrix& A2,\n+150 _\bK_\be_\by key3, const Matrix& A3,\n+151 const Vector& b, const SharedDiagonal& model = SharedDiagonal()) {\n+152 add(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(key1,A1,key2,A2,key3,A3,b,model)); }\n 153\n-_\b1_\b5_\b5 const MatrixNN& _\bm_\ba_\bt_\br_\bi_\bx() const { return _\bm_\ba_\bt_\br_\bi_\bx_\b_; }\n-156\n-157 size_t rows() const { return _\bm_\ba_\bt_\br_\bi_\bx_\b_.rows(); }\n-158 size_t cols() const { return _\bm_\ba_\bt_\br_\bi_\bx_\b_.cols(); }\n-159\n-163\n-164 void print(const std::string& s = std::string()) const;\n+155 template\n+_\b1_\b5_\b6 void _\ba_\bd_\bd(const TERMS& terms, const Vector &b, const SharedDiagonal& model =\n+SharedDiagonal()) {\n+157 add(_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(terms,b,model)); }\n+158\n+_\b1_\b6_\b3 typedef _\bK_\be_\by_\bS_\be_\bt _\bK_\be_\by_\bs;\n+164 _\bK_\be_\by_\bs keys() const;\n 165\n-166 bool equals(const _\bS_\bO& other, double tol) const {\n-167 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(_\bm_\ba_\bt_\br_\bi_\bx_\b_, other.matrix_, tol);\n-168 }\n-169\n-173\n-_\b1_\b7_\b5 _\bS_\bO _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bS_\bO& other) const {\n-176 assert(dim() == other.dim());\n-177 return _\bS_\bO(_\bm_\ba_\bt_\br_\bi_\bx_\b_ * other._\bm_\ba_\bt_\br_\bi_\bx_\b_);\n-178 }\n-179\n-181 template >\n-_\b1_\b8_\b2 static _\bS_\bO _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n-183 return _\bS_\bO();\n-184 }\n-185\n-187 template >\n-_\b1_\b8_\b8 static _\bS_\bO _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by(size_t n = 0) {\n-189 return _\bS_\bO(n);\n-190 }\n-191\n-_\b1_\b9_\b3 _\bS_\bO _\bi_\bn_\bv_\be_\br_\bs_\be() const { return _\bS_\bO(_\bm_\ba_\bt_\br_\bi_\bx_\b_.transpose()); }\n-194\n+166 /* return a map of (Key, dimension) */\n+167 std::map getKeyDimMap() const;\n+168\n+170 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+171\n+173 double probPrime(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+174\n+180 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh clone() const;\n+181\n+186 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br cloneToPtr() const;\n+187\n+194 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh negate() const;\n+195\n 198\n-199 using TangentVector = Eigen::Matrix;\n-200 using ChartJacobian = _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b>;\n-201\n-_\b2_\b0_\b3 static int _\bD_\bi_\bm() { return dimension; }\n-204\n-205 // Calculate manifold dimensionality for SO(n).\n-206 // Available as dimension or Dim() for fixed N.\n-207 static size_t Dimension(size_t n) { return n * (n - 1) / 2; }\n-208\n-209 // Calculate ambient dimension n from manifold dimensionality d.\n-210 static size_t AmbientDim(size_t d) { return (1 + std::sqrt(1 + 8 * d)) / 2;\n-}\n+209 std::vector > sparseJacobian(\n+210 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering, size_t& nrows, size_t& ncols) const;\n 211\n-212 // Calculate run-time dimensionality of manifold.\n-213 // Available as dimension or Dim() for fixed N.\n-214 size_t dim() const { return Dimension(static_cast(_\bm_\ba_\bt_\br_\bi_\bx_\b_.rows()));\n-}\n-215\n-231 static MatrixNN _\bH_\ba_\bt(const TangentVector& xi);\n-232\n-_\b2_\b3_\b4 static void _\bH_\ba_\bt(const Vector &xi, Eigen::Ref X);\n-235\n-237 static TangentVector _\bV_\be_\be(const MatrixNN& X);\n-238\n-239 // Chart at origin\n-_\b2_\b4_\b0 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n-245 static _\bS_\bO _\bR_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& xi, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H = boost::none);\n-246\n-250 static TangentVector _\bL_\bo_\bc_\ba_\bl(const _\bS_\bO& R, _\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H = boost::none);\n-251 };\n-252\n-253 // Return dynamic identity DxD Jacobian for given SO(n)\n-254 template >\n-255 static MatrixDD IdentityJacobian(size_t n) {\n-256 const size_t d = Dimension(n);\n-257 return MatrixDD::Identity(d, d);\n-258 }\n-259\n-263\n-265 MatrixDD _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const;\n-266\n-270 static _\bS_\bO _\bE_\bx_\bp_\bm_\ba_\bp(const TangentVector& omega, ChartJacobian H = boost::\n-none);\n+213 std::vector > sparseJacobian() const;\n+214\n+221 Matrix sparseJacobian_() const;\n+222\n+230 Matrix augmentedJacobian(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n+231\n+239 Matrix augmentedJacobian() const;\n+240\n+248 std::pair jacobian(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n+249\n+257 std::pair jacobian() const;\n+258\n+270 Matrix augmentedHessian(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n 271\n-273 static MatrixDD _\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const TangentVector& omega);\n-274\n-278 static TangentVector _\bL_\bo_\bg_\bm_\ba_\bp(const _\bS_\bO& R, ChartJacobian H = boost::none);\n-279\n-281 static MatrixDD _\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const TangentVector& omega);\n-282\n-283 // inverse with optional derivative\n-284 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bS_\bO_\b<_\bN_\b>, internal::DimensionSO(N)>_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be;\n-285\n-289\n-295 VectorN2 _\bv_\be_\bc(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn H =\n-296 boost::none) const;\n-297\n-299 template >\n-_\b3_\b0_\b0 static Matrix _\bV_\be_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\bs() {\n-301 constexpr size_t N2 = static_cast(N * N);\n-302 Eigen::Matrix G;\n-303 for (size_t j = 0; j < dimension; j++) {\n-304 const auto X = _\bH_\ba_\bt(Vector::Unit(dimension, j));\n-305 G.col(j) = Eigen::Map(X.data());\n-306 }\n-307 return G;\n-308 }\n-309\n-311 template >\n-_\b3_\b1_\b2 static Matrix _\bV_\be_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\bs(size_t n = 0) {\n-313 const size_t n2 = n * n, dim = Dimension(n);\n-314 Matrix G(n2, dim);\n-315 for (size_t j = 0; j < dim; j++) {\n-316 const auto X = _\bH_\ba_\bt(Vector::Unit(dim, j));\n-317 G.col(j) = Eigen::Map(X.data(), n2, 1);\n-318 }\n-319 return G;\n-320 }\n-321\n+283 Matrix augmentedHessian() const;\n+284\n+291 std::pair hessian(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n+292\n+299 std::pair hessian() const;\n+300\n+302 virtual _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs hessianDiagonal() const;\n+303\n+305 virtual std::map hessianBlockDiagonal() const;\n+306\n+311 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(\n+312 const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;\n+313\n+318 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg&,\n+319 const Eliminate& function = EliminationTraitsType::DefaultEliminate) const;\n+320\n+324 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimizeDensely() const;\n 325\n-326 template \n-327 friend void save(Archive&, _\bS_\bO&, const unsigned int);\n-328 template \n-329 friend void load(Archive&, _\bS_\bO&, const unsigned int);\n-330 template \n-331 friend void serialize(Archive&, _\bS_\bO&, const unsigned int);\n-332 friend class boost::serialization::access;\n-333 friend class _\bR_\bo_\bt_\b3; // for serialize\n-334\n-336};\n-337\n-338using SOn = SO;\n-339\n-340/*\n-341 * Specialize dynamic Hat and Vee, because recursion depends on dynamic\n-nature.\n-342 * The definition is in SOn.cpp. Fixed-size SO3 and SO4 have their own\n-version,\n-343 * and implementation for other fixed N is in SOn-inl.h.\n-344 */\n+335 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradient(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x0) const;\n+336\n+344 virtual _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const;\n 345\n-346template <>\n-347GTSAM_EXPORT\n-348Matrix _\bS_\bO_\bn_\b:_\b:_\bH_\ba_\bt(const Vector& xi);\n-349\n-350template <>\n-351GTSAM_EXPORT\n-352Vector _\bS_\bO_\bn_\b:_\b:_\bV_\be_\be(const Matrix& X);\n-353\n-354/*\n-355 * Specialize dynamic compose and between, because the derivative is\n-unknowable\n-356 * by the LieGroup implementations, who return a fixed-size matrix for H2.\n-357 */\n-358\n-359using DynamicJacobian = OptionalJacobian;\n-360\n-361template <>\n-362GTSAM_EXPORT\n-363SOn LieGroup::compose(const SOn& g, DynamicJacobian H1,\n-364 DynamicJacobian H2) const;\n-365\n-366template <>\n-367GTSAM_EXPORT\n-368SOn LieGroup::between(const SOn& g, DynamicJacobian H1,\n-369 DynamicJacobian H2) const;\n-370\n-371/*\n-372 * Specialize dynamic vec.\n-373 */\n-374template <>\n-375GTSAM_EXPORT\n-376typename SOn::VectorN2 _\bS_\bO_\bn_\b:_\b:_\bv_\be_\bc(DynamicJacobian H) const;\n+370 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimizeGradientSearch() const;\n+371\n+373 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs transposeMultiply(const _\bE_\br_\br_\bo_\br_\bs& e) const;\n+374\n+376 void transposeMultiplyAdd(double alpha, const _\bE_\br_\br_\bo_\br_\bs& e, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x)\n+const;\n 377\n-379template\n-_\b3_\b8_\b0void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(\n-381 Archive& ar, _\bS_\bO_\bn& Q,\n-382 const unsigned int file_version\n-383) {\n-384 Matrix& M = Q.matrix_;\n-385 ar& BOOST_SERIALIZATION_NVP(M);\n-386}\n+379 _\bE_\br_\br_\bo_\br_\bs gaussianErrors(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+380\n+382 _\bE_\br_\br_\bo_\br_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+383\n+385 void multiplyHessianAdd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n+386 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const;\n 387\n-388/*\n-389 * Define the traits. internal::LieGroup provides both Lie group and\n-Testable\n-390 */\n-391\n-392template \n-_\b3_\b9_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bO> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp> {};\n-394\n-395template \n-_\b3_\b9_\b6struct _\bt_\br_\ba_\bi_\bt_\bs> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp> {};\n-397\n-398} // namespace gtsam\n-399\n-400#include \"_\bS_\bO_\bn_\b-_\bi_\bn_\bl_\b._\bh\"\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd_\b._\bh\n-make_shared trampoline function to ensure proper alignment\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:317\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n-_\bS_\bO_\bn_\b-_\bi_\bn_\bl_\b._\bh\n-Template implementations for SO(n)\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bS_\bO\n-constexpr int DimensionSO(int N)\n-Calculate dimensionality of SO manifold, or return Dynamic if so.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:39\n+389 void multiplyInPlace(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x, _\bE_\br_\br_\bo_\br_\bs& e) const;\n+390\n+392 void multiplyInPlace(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x, const Errors::iterator& e)\n+const;\n+393\n+394 void printErrors(\n+395 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n+396 const std::string& str = \"GaussianFactorGraph: \",\n+397 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n+398 const std::function&\n+400 printCondition =\n+401 [](const _\bF_\ba_\bc_\bt_\bo_\br*, double, size_t) { return true; }) const;\n+403\n+404 private:\n+_\b4_\b0_\b6 friend class boost::serialization::access;\n+407 template\n+408 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+409 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+410 }\n+411\n+412 public:\n+413\n+414#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+416 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs GTSAM_DEPRECATED\n+417 _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(boost::none_t, const Eliminate& function =\n+418 EliminationTraitsType::DefaultEliminate) const {\n+419 return _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(function);\n+420 }\n+421#endif\n+422\n+423 };\n+424\n+429 GTSAM_EXPORT bool _\bh_\ba_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\bs(const GaussianFactorGraph& factors);\n+430\n+431 /****** Linear Algebra Operations ******/\n+432\n+434 //GTSAM_EXPORT void residual(const GaussianFactorGraph& fg, const\n+VectorValues &x, VectorValues &r);\n+435 //GTSAM_EXPORT void multiply(const GaussianFactorGraph& fg, const\n+VectorValues &x, VectorValues &r);\n+436\n+438template<>\n+_\b4_\b3_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+440};\n+441\n+442} // \\ namespace gtsam\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Variable elimination algorithms for factor graphs.\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+A factor with a quadratic error function - a Gaussian.\n+_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Contains the HessianFactor class, a general quadratic factor.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n+_\bE_\br_\br_\bo_\br_\bs_\b._\bh\n+vector of errors\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by\n+std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr<\n+GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors,\n+const Ordering &keys)\n+Densely partially eliminate with Cholesky factorization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:548\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n-std::string serialize(const T &input)\n-serializes to a string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n-bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n-DenseBase< MATRIX > &B, double tol=1e-9)\n-equals with a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\ba_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\bs\n+bool hasConstraints(const GaussianFactorGraph &factors)\n+Evaluates whether linear factors have any constrained noise models.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.cpp:442\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n+Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n+landmarkKey)\n+Optimize for triangulation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point2 operator*(double s, const Point2 &p)\n+multiply with scalar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-A CRTP helper class that implements Lie group methods Prerequisites: methods\n-operator*,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bS_\bO_\b<_\b _\bN_\b _\b>_\b,_\b _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bS_\bO_\b(_\bN_\b)_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n-static SO< N > Retract(const TangentVector &v)\n-Retract at origin: possible in Lie group because it has an identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Both LieGroupTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n-symbol GTSAM_USE_QUATERNIO...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO\n-Manifold of special orthogonal rotation matrices SO.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bF_\br_\bo_\bm_\bM_\ba_\bt_\br_\bi_\bx\n-static SO FromMatrix(const Eigen::MatrixBase< Derived > &R)\n-Named constructor from Eigen Matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n-static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)\n-Exponential map at identity - create a rotation from canonical coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\bs\n-static Matrix VectorizedGenerators()\n-Calculate N^2 x dim matrix of vectorized Lie algebra generators for SO(N)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:300\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n-SO inverse() const\n-inverse of a rotation = transpose\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:193\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bv_\be_\bc\n-VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::\n-none) const\n-Return vectorized rotation matrix in column order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bC_\bh_\bo_\br_\bd_\ba_\bl_\bM_\be_\ba_\bn\n-static SO ChordalMean(const std::vector< SO > &rotations)\n-Named constructor that finds chordal mean , currently only defined for SO3.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-SO operator*(const SO &other) const\n-Multiplication.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:175\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bV_\be_\be\n-static TangentVector Vee(const MatrixNN &X)\n-Inverse of Hat. See note about xi element order in Hat.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\b_\n-MatrixNN matrix_\n-Rotation matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp\n-static TangentVector Logmap(const SO &R, ChartJacobian H=boost::none)\n-Log map at identity - returns the canonical coordinates of this rotation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be\n-static SO AxisAngle(const Vector3 &axis, double theta)\n-Constructor from axis and angle. Only defined for SO3.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n-MatrixDD AdjointMap() const\n-Adjoint map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO4.cpp:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bH_\ba_\bt\n-static void Hat(const Vector &xi, Eigen::Ref< MatrixNN > X)\n-In-place version of Hat (see details there), implements recursion.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static SO Identity()\n-SO identity for N >= 2.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:182\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bD_\bi_\bm\n-static int Dim()\n-Return compile-time dimensionality: fixed size N or Eigen::Dynamic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:203\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bH_\ba_\bt\n-static MatrixNN Hat(const TangentVector &xi)\n-Hat operator creates Lie algebra element corresponding to d-vector, where d is\n-the dimensionality of ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-static MatrixDD ExpmapDerivative(const TangentVector &omega)\n-Derivative of Expmap, currently only defined for SO3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-static MatrixDD LogmapDerivative(const TangentVector &omega)\n-Derivative of Logmap, currently only defined for SO3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bS_\bO\n-SO(const SO< M > &R)\n-Construct dynamic SO(n) from Fixed SO\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bS_\bO\n-SO(size_t n=0)\n-Construct SO identity for N == Eigen::Dynamic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bS_\bO\n-SO()\n-Construct SO identity for N >= 2.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bL_\bi_\bf_\bt\n-static SO Lift(size_t n, const Eigen::MatrixBase< Derived > &R)\n-Named constructor from lower dimensional matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm\n-static SO Random(std::mt19937 &rng, size_t n=0)\n-Random SO(n) element (no big claims about uniformity). SO(3) is specialized in\n-SO3....\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static SO Identity(size_t n=0)\n-SO identity for N == Eigen::Dynamic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:188\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-const MatrixNN & matrix() const\n-Return matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bR_\ba_\bn_\bd_\bo_\bm\n-static SO Random(std::mt19937 &rng)\n-Random SO(N) element (no big claims about uniformity)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:145\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo\n-static SO ClosestTo(const MatrixNN &M)\n-Named constructor that finds SO(n) matrix closest to M in Frobenius norm,\n-currently only defined for ...\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bS_\bO\n-SO(const Eigen::AngleAxisd &angleAxis)\n-Constructor from AngleAxisd.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\bs\n-static Matrix VectorizedGenerators(size_t n=0)\n-Calculate n^2 x dim matrix of vectorized Lie algebra generators for SO(n)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:312\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bS_\bO\n-SO(const Eigen::MatrixBase< Derived > &R)\n-Constructor from Eigen Matrix, dynamic version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:240\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn_\b:_\b:_\bL_\bo_\bc_\ba_\bl\n-static TangentVector Local(const SO &R, ChartJacobian H=boost::none)\n-Inverse of Retract.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n-static SO Retract(const TangentVector &xi, ChartJacobian H=boost::none)\n-Retract uses Cayley map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\b _\bV_\be_\bc_\bt_\bo_\br_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bi_\bs_\bE_\bq_\bu_\ba_\bl\n+bool isEqual(const FactorGraph &other) const\n+Check exact equality of the factor pointers. Useful for derived ==.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< GaussianFactor > sharedFactor\n+Shared pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n+Traits class for eliminateable factor graphs, specifies the types that result\n+from elimination,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+EliminateableFactorGraph is a base class for factor graphs that contains\n+elimination algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd\n+static Ordering Colamd(const FACTOR_GRAPH &graph)\n+Compute a fill-reducing ordering using COLAMD from a factor graph (see details\n+for note on performanc...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+A Bayes tree representing a Gaussian density.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+A GaussianConditional functions as the node in a Bayes network.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+An abstract virtual base class for JacobianFactor and HessianFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual GaussianFactor::shared_ptr clone() const =0\n+Clone a factor (make a deep copy)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc\n+static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::\n+optional< const VariableIndex & > variableIndex)\n+The default ordering generation function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+GaussianBayesTree BayesTreeType\n+Type of Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n+GaussianConditional ConditionalType\n+Type of conditionals from elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n+GaussianFactor FactorType\n+Type of factors in factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+GaussianEliminationTree EliminationTreeType\n+Type of elimination tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n+GaussianFactorGraph FactorGraphType\n+Type of the factor graph (e.g. GaussianFactorGraph)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n+GaussianBayesNet BayesNetType\n+Type of Bayes net from sequential elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+GaussianJunctionTree JunctionTreeType\n+Type of Junction tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr<\n+FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering\n+&keys)\n+The default dense elimination function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be\n+EliminateableFactorGraph< This > BaseEliminateable\n+Typedef to base elimination class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+void add(const TERMS &terms, const Vector &b, const SharedDiagonal\n+&model=SharedDiagonal())\n+Add an n-ary factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+GaussianFactorGraph(std::initializer_list< sharedFactor > factors)\n+Construct from an initializer lists of GaussianFactor shared pointers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+GaussianFactorGraph()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+void add(const GaussianFactor &factor)\n+Add a factor by value - makes a copy.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+void add(Key key1, const Matrix &A1, Key key2, const Matrix &A2, Key key3,\n+const Matrix &A3, const Vector &b, const SharedDiagonal &model=SharedDiagonal\n+())\n+Add a ternary factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:148\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+void add(const sharedFactor &factor)\n+Add a factor by pointer - stores pointer without copying the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n+friend bool operator==(const GaussianFactorGraph &lhs, const\n+GaussianFactorGraph &rhs)\n+Check exact equality.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:121\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bT_\bh_\bi_\bs\n+GaussianFactorGraph This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bK_\be_\by_\bs\n+KeySet Keys\n+Return the set of variables involved in the factors (computes a set union).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+void add(const Vector &b)\n+Add a null factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:133\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+void add(Key key1, const Matrix &A1, const Vector &b, const SharedDiagonal\n+&model=SharedDiagonal())\n+Add a unary factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+virtual ~GaussianFactorGraph()\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n+void add(Key key1, const Matrix &A1, Key key2, const Matrix &A2, const Vector\n+&b, const SharedDiagonal &model=SharedDiagonal())\n+Add a binary factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:142\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+GaussianFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)\n+Construct from iterator over factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be\n+FactorGraph< GaussianFactor > Base\n+Typedef to base factor graph type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+GaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n+Implicit copy/downcast constructor to override explicit template container\n+constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+GaussianFactorGraph(const CONTAINER &factors)\n+Construct from container of factors (shared_ptr or plain objects)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+A junction tree specialized to Gaussian factors, i.e., it is a cluster tree\n+with Gaussian factors sto...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianJunctionTree.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor in the squared-error form.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+is the normalization constant.\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\bn_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00353.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00869.html", "comments": ["Files 96% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SOn.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianDensity.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
SOn.cpp File Reference
\n+
GaussianDensity.cpp File Reference
\n
\n
\n \n-

Definitions of dynamic specializations of SO(n) \n+

A Gaussian Density. \n More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Definitions of dynamic specializations of SO(n)

\n-
Author
Frank Dellaert
\n-
\n-Varun Agrawal
\n-
Date
March 2019
\n+

A Gaussian Density.

\n+
Author
Frank Dellaert
\n+
Date
Jan 21, 2012
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SOn.cpp File Reference\n-Definitions of dynamic specializations of SO(n) _\bM_\bo_\br_\be_\b._\b._\b.\n+GaussianDensity.cpp File Reference\n+A Gaussian Density. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Definitions of dynamic specializations of SO(n)\n+A Gaussian Density.\n Author\n Frank Dellaert\n- Varun Agrawal\n Date\n- March 2019\n+ Jan 21, 2012\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\bn_\b._\bc_\bp_\bp\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00356_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00365_source.html", "comments": ["Files 96% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Cal3Fisheye.h
\n+
Cal3.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <gtsam/geometry/Cal3.h>
\n-\n-
24
\n-
25#include <boost/shared_ptr.hpp>
\n-
26
\n-
27#include <string>
\n-
28
\n-
29namespace gtsam {
\n-
30
\n-
\n-
51class GTSAM_EXPORT Cal3Fisheye : public Cal3 {
\n-
52 private:
\n-
53 double k1_ = 0.0f, k2_ = 0.0f;
\n-
54 double k3_ = 0.0f, k4_ = 0.0f;
\n-
55 double tol_ = 1e-5;
\n+
22#pragma once
\n+
23
\n+\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
46template <typename Cal, size_t Dim>
\n+
\n+
47void calibrateJacobians(const Cal& calibration, const Point2& pn,
\n+
48 OptionalJacobian<2, Dim> Dcal = boost::none,
\n+
49 OptionalJacobian<2, 2> Dp = boost::none) {
\n+
50 if (Dcal || Dp) {
\n+
51 Eigen::Matrix<double, 2, Dim> H_uncal_K;
\n+
52 Matrix22 H_uncal_pn, H_uncal_pn_inv;
\n+
53
\n+
54 // Compute uncalibrate Jacobians
\n+
55 calibration.uncalibrate(pn, Dcal ? &H_uncal_K : nullptr, H_uncal_pn);
\n
56
\n-
57 public:
\n-
58 enum { dimension = 9 };
\n-
60 using shared_ptr = boost::shared_ptr<Cal3Fisheye>;
\n-
61
\n-
64
\n-
66 Cal3Fisheye() = default;
\n-
67
\n-
68 Cal3Fisheye(const double fx, const double fy, const double s, const double u0,
\n-
69 const double v0, const double k1, const double k2,
\n-
70 const double k3, const double k4, double tol = 1e-5)
\n-
71 : Cal3(fx, fy, s, u0, v0),
\n-
72 k1_(k1),
\n-
73 k2_(k2),
\n-
74 k3_(k3),
\n-
75 k4_(k4),
\n-
76 tol_(tol) {}
\n-
77
\n-
78 ~Cal3Fisheye() override {}
\n+
57 H_uncal_pn_inv = H_uncal_pn.inverse();
\n+
58
\n+
59 if (Dp) *Dp = H_uncal_pn_inv;
\n+
60 if (Dcal) *Dcal = -H_uncal_pn_inv * H_uncal_K;
\n+
61 }
\n+
62}
\n+
\n+
63
\n+
\n+
69class GTSAM_EXPORT Cal3 {
\n+
70 protected:
\n+
71 double fx_ = 1.0f, fy_ = 1.0f;
\n+
72 double s_ = 0.0f;
\n+
73 double u0_ = 0.0f, v0_ = 0.0f;
\n+
74
\n+
75 public:
\n+
76 enum { dimension = 5 };
\n+
78 using shared_ptr = boost::shared_ptr<Cal3>;
\n
79
\n-
83
\n-
84 explicit Cal3Fisheye(const Vector9& v)
\n-
85 : Cal3(v(0), v(1), v(2), v(3), v(4)),
\n-
86 k1_(v(5)),
\n-
87 k2_(v(6)),
\n-
88 k3_(v(7)),
\n-
89 k4_(v(8)) {}
\n-
90
\n-
94
\n-
96 inline double k1() const { return k1_; }
\n-
97
\n-
99 inline double k2() const { return k2_; }
\n-
100
\n-
102 inline double k3() const { return k3_; }
\n-
103
\n-
105 inline double k4() const { return k4_; }
\n-
106
\n-
108 Vector4 k() const { return Vector4(k1_, k2_, k3_, k4_); }
\n-
109
\n-
111 Vector9 vector() const;
\n-
112
\n-
114 static double Scaling(double r);
\n-
115
\n-
124 Point2 uncalibrate(const Point2& p, OptionalJacobian<2, 9> Dcal = boost::none,
\n-
125 OptionalJacobian<2, 2> Dp = boost::none) const;
\n-
126
\n-
135 Point2 calibrate(const Point2& p, OptionalJacobian<2, 9> Dcal = boost::none,
\n-
136 OptionalJacobian<2, 2> Dp = boost::none) const;
\n+
82
\n+
84 Cal3() = default;
\n+
85
\n+
\n+
87 Cal3(double fx, double fy, double s, double u0, double v0)
\n+
88 : fx_(fx), fy_(fy), s_(s), u0_(u0), v0_(v0) {}
\n+
\n+
89
\n+
\n+
91 Cal3(const Vector5& d)
\n+
92 : fx_(d(0)), fy_(d(1)), s_(d(2)), u0_(d(3)), v0_(d(4)) {}
\n+
\n+
93
\n+
100 Cal3(double fov, int w, int h);
\n+
101
\n+
103 virtual ~Cal3() {}
\n+
104
\n+
108
\n+
118 Cal3(const std::string& path);
\n+
119
\n+
123
\n+
125 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n+
126 const Cal3& cal);
\n+
127
\n+
129 virtual void print(const std::string& s = "") const;
\n+
130
\n+
132 bool equals(const Cal3& K, double tol = 10e-9) const;
\n+
133
\n
137
\n-
141
\n-
143 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n-
144 const Cal3Fisheye& cal);
\n-
145
\n-
147 void print(const std::string& s = "") const override;
\n-
148
\n-
150 bool equals(const Cal3Fisheye& K, double tol = 10e-9) const;
\n-
151
\n+
139 inline double fx() const { return fx_; }
\n+
140
\n+
142 inline double fy() const { return fy_; }
\n+
143
\n+
145 inline double aspectRatio() const { return fx_ / fy_; }
\n+
146
\n+
148 inline double skew() const { return s_; }
\n+
149
\n+
151 inline double px() const { return u0_; }
\n+
152
\n+
154 inline double py() const { return v0_; }
\n
155
\n-
157 size_t dim() const override { return Dim(); }
\n+
157 Point2 principalPoint() const { return Point2(u0_, v0_); }
\n
158
\n-
160 inline static size_t Dim() { return dimension; }
\n-
161
\n-
\n-
163 inline Cal3Fisheye retract(const Vector& d) const {
\n-
164 return Cal3Fisheye(vector() + d);
\n-
165 }
\n-
\n-
166
\n-
\n-
168 Vector localCoordinates(const Cal3Fisheye& T2) const {
\n-
169 return T2.vector() - vector();
\n-
170 }
\n-
\n-
171
\n-
175
\n-
\n-
177 virtual boost::shared_ptr<Cal3Fisheye> clone() const {
\n-
178 return boost::shared_ptr<Cal3Fisheye>(new Cal3Fisheye(*this));
\n-
179 }
\n-
\n+
\n+
160 Vector5 vector() const {
\n+
161 Vector5 v;
\n+
162 v << fx_, fy_, s_, u0_, v0_;
\n+
163 return v;
\n+
164 }
\n+
\n+
165
\n+
\n+
167 virtual Matrix3 K() const {
\n+
168 Matrix3 K;
\n+
169 K << fx_, s_, u0_, 0.0, fy_, v0_, 0.0, 0.0, 1.0;
\n+
170 return K;
\n+
171 }
\n+
\n+
172
\n+
173#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
175 Matrix3 GTSAM_DEPRECATED matrix() const { return K(); }
\n+
176#endif
\n+
177
\n+
179 Matrix3 inverse() const;
\n
180
\n-
182
\n-
183 private:
\n+
182 inline virtual size_t dim() const { return Dim(); }
\n+
183
\n+
185 inline static size_t Dim() { return dimension; }
\n
186
\n-
188 friend class boost::serialization::access;
\n-
189 template <class Archive>
\n-
190 void serialize(Archive& ar, const unsigned int /*version*/) {
\n-
191 ar& boost::serialization::make_nvp(
\n-
192 "Cal3Fisheye", boost::serialization::base_object<Cal3>(*this));
\n-
193 ar& BOOST_SERIALIZATION_NVP(k1_);
\n-
194 ar& BOOST_SERIALIZATION_NVP(k2_);
\n-
195 ar& BOOST_SERIALIZATION_NVP(k3_);
\n-
196 ar& BOOST_SERIALIZATION_NVP(k4_);
\n-
197 }
\n-
198
\n-
200};
\n-
\n-
201
\n-
202template <>
\n-
203struct traits<Cal3Fisheye> : public internal::Manifold<Cal3Fisheye> {};
\n-
204
\n-
205template <>
\n-
206struct traits<const Cal3Fisheye> : public internal::Manifold<Cal3Fisheye> {};
\n-
207
\n-
208} // namespace gtsam
\n-
Common code for all Calibration models.
\n-
2D Point
\n+
190
\n+
191 private:
\n+
193 friend class boost::serialization::access;
\n+
194 template <class Archive>
\n+
195 void serialize(Archive& ar, const unsigned int /*version*/) {
\n+
196 ar& BOOST_SERIALIZATION_NVP(fx_);
\n+
197 ar& BOOST_SERIALIZATION_NVP(fy_);
\n+
198 ar& BOOST_SERIALIZATION_NVP(s_);
\n+
199 ar& BOOST_SERIALIZATION_NVP(u0_);
\n+
200 ar& BOOST_SERIALIZATION_NVP(v0_);
\n+
201 }
\n+
202
\n+
204};
\n+
\n+
205
\n+
206} // \\ namespace gtsam
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n+
void calibrateJacobians(const Cal &calibration, const Point2 &pn, OptionalJacobian< 2, Dim > Dcal=boost::none, OptionalJacobian< 2, 2 > Dp=boost::none)
Function which makes use of the Implicit Function Theorem to compute the Jacobians of calibrate using...
Definition Cal3.h:47
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Template to create a binary predicate.
Definition Testable.h:111
\n
Common base class for all calibration models.
Definition Cal3.h:69
\n-
Calibration of a fisheye camera.
Definition Cal3Fisheye.h:51
\n-
double k4() const
Second tangential distortion coefficient.
Definition Cal3Fisheye.h:105
\n-
double k1() const
First distortion coefficient.
Definition Cal3Fisheye.h:96
\n-
double k3() const
First tangential distortion coefficient.
Definition Cal3Fisheye.h:102
\n-
Vector localCoordinates(const Cal3Fisheye &T2) const
Given a different calibration, calculate update to obtain it.
Definition Cal3Fisheye.h:168
\n-
static size_t Dim()
Return dimensions of calibration manifold object.
Definition Cal3Fisheye.h:160
\n-
double k2() const
Second distortion coefficient.
Definition Cal3Fisheye.h:99
\n-
size_t dim() const override
Return dimensions of calibration manifold object.
Definition Cal3Fisheye.h:157
\n-
Vector9 vector() const
Return all parameters as a vector.
Definition Cal3Fisheye.cpp:28
\n-
virtual boost::shared_ptr< Cal3Fisheye > clone() const
Definition Cal3Fisheye.h:177
\n-
Vector4 k() const
return distortion parameter vector
Definition Cal3Fisheye.h:108
\n-
Cal3Fisheye()=default
Default Constructor with only unit focal length.
\n-
Cal3Fisheye retract(const Vector &d) const
Given delta vector, update calibration.
Definition Cal3Fisheye.h:163
\n+
Cal3(double fx, double fy, double s, double u0, double v0)
constructor from doubles
Definition Cal3.h:87
\n+
virtual Matrix3 K() const
return calibration matrix K
Definition Cal3.h:167
\n+
Cal3(const Vector5 &d)
constructor from vector
Definition Cal3.h:91
\n+
virtual ~Cal3()
Virtual destructor.
Definition Cal3.h:103
\n+
Vector5 vector() const
vectorized form (column-wise)
Definition Cal3.h:160
\n+
Cal3()=default
Create a default calibration that leaves coordinates unchanged.
\n+
double px() const
image center in x
Definition Cal3.h:151
\n+
static size_t Dim()
return DOF, dimensionality of tangent space
Definition Cal3.h:185
\n+
Point2 principalPoint() const
return the principal point
Definition Cal3.h:157
\n+
double fx() const
focal length x
Definition Cal3.h:139
\n+
double py() const
image center in y
Definition Cal3.h:154
\n+
double skew() const
skew
Definition Cal3.h:148
\n+
virtual size_t dim() const
return DOF, dimensionality of tangent space
Definition Cal3.h:182
\n+
double aspectRatio() const
aspect ratio
Definition Cal3.h:145
\n+
double fy() const
focal length y
Definition Cal3.h:142
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,224 +1,224 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Cal3Fisheye.h\n+Cal3.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-24\n-25#include \n-26\n-27#include \n-28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-_\b5_\b1class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be : public _\bC_\ba_\bl_\b3 {\n-52 private:\n-53 double k1_ = 0.0f, k2_ = 0.0f;\n-54 double k3_ = 0.0f, k4_ = 0.0f;\n-55 double tol_ = 1e-5;\n+22#pragma once\n+23\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+46template \n+_\b4_\b7void _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs(const Cal& calibration, const _\bP_\bo_\bi_\bn_\bt_\b2& pn,\n+48 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bD_\bi_\bm_\b> Dcal = boost::none,\n+49 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dp = boost::none) {\n+50 if (Dcal || Dp) {\n+51 Eigen::Matrix H_uncal_K;\n+52 Matrix22 H_uncal_pn, H_uncal_pn_inv;\n+53\n+54 // Compute uncalibrate Jacobians\n+55 calibration.uncalibrate(pn, Dcal ? &H_uncal_K : nullptr, H_uncal_pn);\n 56\n-57 public:\n-58 enum { dimension = 9 };\n-60 using shared_ptr = boost::shared_ptr;\n-61\n-64\n-_\b6_\b6 _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be() = default;\n-67\n-68 _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be(const double fx, const double fy, const double s, const double\n-u0,\n-69 const double v0, const double k1, const double k2,\n-70 const double k3, const double k4, double tol = 1e-5)\n-71 : _\bC_\ba_\bl_\b3(fx, fy, s, u0, v0),\n-72 k1_(k1),\n-73 k2_(k2),\n-74 k3_(k3),\n-75 k4_(k4),\n-76 tol_(tol) {}\n-77\n-78 _\b~_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be() override {}\n+57 H_uncal_pn_inv = H_uncal_pn.inverse();\n+58\n+59 if (Dp) *Dp = H_uncal_pn_inv;\n+60 if (Dcal) *Dcal = -H_uncal_pn_inv * H_uncal_K;\n+61 }\n+62}\n+63\n+_\b6_\b9class GTSAM_EXPORT _\bC_\ba_\bl_\b3 {\n+70 protected:\n+_\b7_\b1 double fx_ = 1.0f, fy_ = 1.0f;\n+_\b7_\b2 double s_ = 0.0f;\n+_\b7_\b3 double u0_ = 0.0f, v0_ = 0.0f;\n+74\n+75 public:\n+76 enum { dimension = 5 };\n+78 using shared_ptr = boost::shared_ptr;\n 79\n-83\n-84 explicit Cal3Fisheye(const Vector9& v)\n-85 : Cal3(v(0), v(1), v(2), v(3), v(4)),\n-86 k1_(v(5)),\n-87 k2_(v(6)),\n-88 k3_(v(7)),\n-89 k4_(v(8)) {}\n-90\n-94\n-_\b9_\b6 inline double _\bk_\b1() const { return k1_; }\n-97\n-_\b9_\b9 inline double _\bk_\b2() const { return k2_; }\n-100\n-_\b1_\b0_\b2 inline double _\bk_\b3() const { return k3_; }\n-103\n-_\b1_\b0_\b5 inline double _\bk_\b4() const { return k4_; }\n-106\n-_\b1_\b0_\b8 Vector4 _\bk() const { return Vector4(k1_, k2_, k3_, k4_); }\n-109\n-111 Vector9 vector() const;\n-112\n-114 static double Scaling(double r);\n-115\n-124 _\bP_\bo_\bi_\bn_\bt_\b2 uncalibrate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b9_\b> Dcal = boost::\n-none,\n-125 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dp = boost::none) const;\n-126\n-135 _\bP_\bo_\bi_\bn_\bt_\b2 calibrate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b9_\b> Dcal = boost::\n-none,\n-136 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dp = boost::none) const;\n+82\n+_\b8_\b4 _\bC_\ba_\bl_\b3() = default;\n+85\n+_\b8_\b7 _\bC_\ba_\bl_\b3(double fx, double fy, double s, double u0, double v0)\n+88 : fx_(fx), fy_(fy), s_(s), u0_(u0), v0_(v0) {}\n+89\n+_\b9_\b1 _\bC_\ba_\bl_\b3(const Vector5& d)\n+92 : fx_(d(0)), fy_(d(1)), s_(d(2)), u0_(d(3)), v0_(d(4)) {}\n+93\n+100 _\bC_\ba_\bl_\b3(double fov, int w, int h);\n+101\n+_\b1_\b0_\b3 virtual _\b~_\bC_\ba_\bl_\b3() {}\n+104\n+108\n+118 _\bC_\ba_\bl_\b3(const std::string& path);\n+119\n+123\n+125 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+126 const _\bC_\ba_\bl_\b3& cal);\n+127\n+129 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n+130\n+132 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bl_\b3& K, double tol = 10e-9) const;\n+133\n 137\n-141\n-143 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-144 const _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be& cal);\n-145\n-147 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override;\n-148\n-150 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be& K, double tol = 10e-9) const;\n-151\n+_\b1_\b3_\b9 inline double _\bf_\bx() const { return fx_; }\n+140\n+_\b1_\b4_\b2 inline double _\bf_\by() const { return fy_; }\n+143\n+_\b1_\b4_\b5 inline double _\ba_\bs_\bp_\be_\bc_\bt_\bR_\ba_\bt_\bi_\bo() const { return fx_ / fy_; }\n+146\n+_\b1_\b4_\b8 inline double _\bs_\bk_\be_\bw() const { return s_; }\n+149\n+_\b1_\b5_\b1 inline double _\bp_\bx() const { return u0_; }\n+152\n+_\b1_\b5_\b4 inline double _\bp_\by() const { return v0_; }\n 155\n-_\b1_\b5_\b7 size_t _\bd_\bi_\bm() const override { return Dim(); }\n+_\b1_\b5_\b7 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl_\bP_\bo_\bi_\bn_\bt() const { return _\bP_\bo_\bi_\bn_\bt_\b2(u0_, v0_); }\n 158\n-_\b1_\b6_\b0 inline static size_t _\bD_\bi_\bm() { return dimension; }\n-161\n-_\b1_\b6_\b3 inline _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& d) const {\n-164 return _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be(vector() + d);\n-165 }\n-166\n-_\b1_\b6_\b8 Vector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be& T2) const {\n-169 return T2._\bv_\be_\bc_\bt_\bo_\br() - vector();\n-170 }\n-171\n-175\n-_\b1_\b7_\b7 virtual boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n-178 return boost::shared_ptr(new _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be(*this));\n-179 }\n+_\b1_\b6_\b0 Vector5 _\bv_\be_\bc_\bt_\bo_\br() const {\n+161 Vector5 v;\n+162 v << fx_, fy_, s_, u0_, v0_;\n+163 return v;\n+164 }\n+165\n+_\b1_\b6_\b7 virtual Matrix3 _\bK() const {\n+168 Matrix3 K;\n+169 K << fx_, s_, u0_, 0.0, fy_, v0_, 0.0, 0.0, 1.0;\n+170 return K;\n+171 }\n+172\n+173#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+175 Matrix3 GTSAM_DEPRECATED matrix() const { return K(); }\n+176#endif\n+177\n+179 Matrix3 inverse() const;\n 180\n-182\n-183 private:\n+_\b1_\b8_\b2 inline virtual size_t _\bd_\bi_\bm() const { return Dim(); }\n+183\n+_\b1_\b8_\b5 inline static size_t _\bD_\bi_\bm() { return dimension; }\n 186\n-_\b1_\b8_\b8 friend class boost::serialization::access;\n-189 template \n-190 void serialize(Archive& ar, const unsigned int /*version*/) {\n-191 ar& boost::serialization::make_nvp(\n-192 \"Cal3Fisheye\", boost::serialization::base_object(*this));\n-193 ar& BOOST_SERIALIZATION_NVP(k1_);\n-194 ar& BOOST_SERIALIZATION_NVP(k2_);\n-195 ar& BOOST_SERIALIZATION_NVP(k3_);\n-196 ar& BOOST_SERIALIZATION_NVP(k4_);\n-197 }\n-198\n-200};\n-201\n-202template <>\n-_\b2_\b0_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n-204\n-205template <>\n-_\b2_\b0_\b6struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-{};\n-207\n-208} // namespace gtsam\n-_\bC_\ba_\bl_\b3_\b._\bh\n-Common code for all Calibration models.\n+190\n+191 private:\n+_\b1_\b9_\b3 friend class boost::serialization::access;\n+194 template \n+195 void serialize(Archive& ar, const unsigned int /*version*/) {\n+196 ar& BOOST_SERIALIZATION_NVP(fx_);\n+197 ar& BOOST_SERIALIZATION_NVP(fy_);\n+198 ar& BOOST_SERIALIZATION_NVP(s_);\n+199 ar& BOOST_SERIALIZATION_NVP(u0_);\n+200 ar& BOOST_SERIALIZATION_NVP(v0_);\n+201 }\n+202\n+204};\n+205\n+206} // \\ namespace gtsam\n _\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n 2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n Vector2 Point2\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n typedef Point2 to Vector2...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-Both ManifoldTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bs\n+void calibrateJacobians(const Cal &calibration, const Point2 &pn,\n+OptionalJacobian< 2, Dim > Dcal=boost::none, OptionalJacobian< 2, 2 >\n+Dp=boost::none)\n+Function which makes use of the Implicit Function Theorem to compute the\n+Jacobians of calibrate using...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:47\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3\n Common base class for all calibration models.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be\n-Calibration of a fisheye camera.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bk_\b4\n-double k4() const\n-Second tangential distortion coefficient.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bk_\b1\n-double k1() const\n-First distortion coefficient.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bk_\b3\n-double k3() const\n-First tangential distortion coefficient.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-Vector localCoordinates(const Cal3Fisheye &T2) const\n-Given a different calibration, calculate update to obtain it.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:168\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bD_\bi_\bm\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bC_\ba_\bl_\b3\n+Cal3(double fx, double fy, double s, double u0, double v0)\n+constructor from doubles\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bK\n+virtual Matrix3 K() const\n+return calibration matrix K\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bC_\ba_\bl_\b3\n+Cal3(const Vector5 &d)\n+constructor from vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\b~_\bC_\ba_\bl_\b3\n+virtual ~Cal3()\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+Vector5 vector() const\n+vectorized form (column-wise)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bC_\ba_\bl_\b3\n+Cal3()=default\n+Create a default calibration that leaves coordinates unchanged.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bp_\bx\n+double px() const\n+image center in x\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bD_\bi_\bm\n static size_t Dim()\n-Return dimensions of calibration manifold object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bk_\b2\n-double k2() const\n-Second distortion coefficient.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-Return dimensions of calibration manifold object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-Vector9 vector() const\n-Return all parameters as a vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.cpp:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-virtual boost::shared_ptr< Cal3Fisheye > clone() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bk\n-Vector4 k() const\n-return distortion parameter vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be\n-Cal3Fisheye()=default\n-Default Constructor with only unit focal length.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-Cal3Fisheye retract(const Vector &d) const\n-Given delta vector, update calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3Fisheye.h:163\n+return DOF, dimensionality of tangent space\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bp_\br_\bi_\bn_\bc_\bi_\bp_\ba_\bl_\bP_\bo_\bi_\bn_\bt\n+Point2 principalPoint() const\n+return the principal point\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bf_\bx\n+double fx() const\n+focal length x\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:139\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bp_\by\n+double py() const\n+image center in y\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bs_\bk_\be_\bw\n+double skew() const\n+skew\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:148\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bd_\bi_\bm\n+virtual size_t dim() const\n+return DOF, dimensionality of tangent space\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:182\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\ba_\bs_\bp_\be_\bc_\bt_\bR_\ba_\bt_\bi_\bo\n+double aspectRatio() const\n+aspect ratio\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:145\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bf_\by\n+double fy() const\n+focal length y\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:142\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n+ * _\bC_\ba_\bl_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00362.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01322.html", "comments": ["Files 78% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point3.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/BetweenFactor.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n \n
\n \n-
Point3.cpp File Reference
\n+Macros
\n+
BetweenFactor.h File Reference
\n \n
\n \n-

3D Point \n-More...

\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::BetweenFactor< VALUE >
 A class for a measurement predicted by \"between(config[key1],config[key2])\". More...
 
struct  gtsam::traits< BetweenFactor< VALUE > >
 traits More...
 
class  gtsam::BetweenConstraint< VALUE >
 Binary between constraint - forces between to a given value This constraint requires the underlying type to a Lie type. More...
 
struct  gtsam::traits< BetweenConstraint< VALUE > >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-Functions

\n-double gtsam::distance3 (const Point3 &p1, const Point3 &q, OptionalJacobian< 1, 3 > H1=boost::none, OptionalJacobian< 1, 3 > H2=boost::none)
 distance between two points
 
\n-double gtsam::norm3 (const Point3 &p, OptionalJacobian< 1, 3 > H=boost::none)
 Distance of the point from the origin, with Jacobian.
 
\n-Point3 gtsam::normalize (const Point3 &p, OptionalJacobian< 3, 3 > H=boost::none)
 normalize, with optional Jacobian
 
Point3 gtsam::cross (const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H_p=boost::none, OptionalJacobian< 3, 3 > H_q=boost::none)
 cross product
 
\n-double gtsam::dot (const Point3 &p, const Point3 &q, OptionalJacobian< 1, 3 > H_p=boost::none, OptionalJacobian< 1, 3 > H_q=boost::none)
 dot product
 
\n-Point3Pair gtsam::means (const std::vector< Point3Pair > &abPointPairs)
 Calculate the two means of a set of Point3 pairs.
 
\n-ostream & gtsam::operator<< (ostream &os, const gtsam::Point3Pair &p)
 

\n+Macros

\n+#define BETWEENFACTOR_VISIBILITY   GTSAM_EXPORT
 
\n

Detailed Description

\n-

3D Point

\n+
Author
Frank Dellaert, Viorela Ila
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,45 +1,37 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Point3.cpp File Reference\n-3D Point _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs\n+BetweenFactor.h File Reference\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n+\u00a0 A class for a measurement predicted by \"between(config[key1],config\n+ [key2])\". _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n+\u00a0 Binary between constraint - forces between to a given value This\n+ constraint requires the underlying type to a Lie type. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdi\bis\bst\bta\ban\bnc\bce\be3\b3 (const _\bP_\bo_\bi_\bn_\bt_\b3 &p1, const _\bP_\bo_\bi_\bn_\bt_\b3 &q,\n- _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H1=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 >\n- H2=boost::none)\n-\u00a0 distance between two points\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bm3\b3 (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H=boost::\n- none)\n-\u00a0 Distance of the point from the origin, with Jacobian.\n-\u00a0\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:n\bno\bor\brm\bma\bal\bli\biz\bze\be (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 3 >\n- H=boost::none)\n-\u00a0 normalize, with optional Jacobian\n-\u00a0\n- _\bP_\bo_\bi_\bn_\bt_\b3\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\bo_\bs_\bs (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, const _\bP_\bo_\bi_\bn_\bt_\b3 &q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<\n- 3, 3 > H_p=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 3, 3 > H_q=boost::none)\n-\u00a0 cross product\n-\u00a0\n- double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdo\bot\bt (const _\bP_\bo_\bi_\bn_\bt_\b3 &p, const _\bP_\bo_\bi_\bn_\bt_\b3 &q, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1,\n- 3 > H_p=boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn< 1, 3 > H_q=boost::none)\n-\u00a0 dot product\n-\u00a0\n-Point3Pair\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:m\bme\bea\ban\bns\bs (const std::vector< Point3Pair > &abPointPairs)\n-\u00a0 Calculate the two means of a set of Point3 pairs.\n-\u00a0\n- ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (ostream &os, const gtsam::Point3Pair &p)\n+M\bMa\bac\bcr\bro\bos\bs\n+#define\u00a0 B\bBE\bET\bTW\bWE\bEE\bEN\bNF\bFA\bAC\bCT\bTO\bOR\bR_\b_V\bVI\bIS\bSI\bIB\bBI\bIL\bLI\bIT\bTY\bY\u00a0\u00a0\u00a0GTSAM_EXPORT\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-3D Point\n+ Author\n+ Frank Dellaert, Viorela Ila\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bi_\bn_\bt_\b3_\b._\bc_\bp_\bp\n+ * _\bs_\bl_\ba_\bm\n+ * _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00368.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00416.html", "comments": ["Files 96% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CalibratedCamera.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SphericalCamera.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
CalibratedCamera.h File Reference
\n+
SphericalCamera.h File Reference
\n
\n
\n \n-

Calibrated camera for which only pose is unknown. \n+

Calibrated camera with spherical projection. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n+\n+\n \n-\n-\n+\n+\n \n-\n-\n+\n \n-\n-\n-\n-\n-\n+\n \n

\n Classes

class  gtsam::CheiralityException
class  gtsam::EmptyCal
 Empty calibration. More...
 
class  gtsam::PinholeBase
 A pinhole camera class that has a Pose3, functions as base class for all pinhole cameras. More...
class  gtsam::SphericalCamera
 A spherical camera class that has a Pose3 and measures bearing vectors. More...
 
class  gtsam::CalibratedCamera
 A Calibrated camera class [R|-R't], calibration K=I. More...
struct  gtsam::traits< SphericalCamera >
 
struct  gtsam::traits< CalibratedCamera >
 
struct  gtsam::traits< const CalibratedCamera >
 
struct  gtsam::Range< CalibratedCamera, T >
struct  gtsam::traits< const SphericalCamera >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Calibrated camera for which only pose is unknown.

\n-
Date
Aug 17, 2009
\n-
Author
Frank Dellaert
\n+

Calibrated camera with spherical projection.

\n+
Date
Aug 26, 2021
\n+
Author
Luca Carlone
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-CalibratedCamera.h File Reference\n-Calibrated camera for which only pose is unknown. _\bM_\bo_\br_\be_\b._\b._\b.\n+SphericalCamera.h File Reference\n+Calibrated camera with spherical projection. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl\n+\u00a0 Empty calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n-\u00a0 A pinhole camera class that has a _\bP_\bo_\bs_\be_\b3, functions as base class for\n- all pinhole cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n+\u00a0 A spherical camera class that has a _\bP_\bo_\bs_\be_\b3 and measures bearing\n+ vectors. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n-\u00a0 A Calibrated camera class [R|-R't], calibration K=I. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be_\b<_\b _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b,_\b _\bT_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Calibrated camera for which only pose is unknown.\n+Calibrated camera with spherical projection.\n Date\n- Aug 17, 2009\n+ Aug 26, 2021\n Author\n- Frank Dellaert\n+ Luca Carlone\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+ * _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00368_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01139_source.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CalibratedCamera.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearEquality.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
CalibratedCamera.h
\n+
NonlinearEquality.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-
24#include <gtsam/base/concepts.h>
\n-
25#include <gtsam/base/Manifold.h>
\n-\n-
27#include <gtsam/dllexport.h>
\n-
28#include <boost/serialization/nvp.hpp>
\n+
12/*
\n+
13 * @file NonlinearEquality.h
\n+
14 * @brief Factor to handle enforced equality between factors
\n+
15 * @author Alex Cunningham
\n+
16 */
\n+
17
\n+
18#pragma once
\n+
19
\n+\n+
21#include <gtsam/base/Testable.h>
\n+
22#include <gtsam/base/Manifold.h>
\n+
23
\n+
24#include <boost/bind/bind.hpp>
\n+
25
\n+
26#include <limits>
\n+
27#include <iostream>
\n+
28#include <cmath>
\n
29
\n
30namespace gtsam {
\n
31
\n-
\n-
32class GTSAM_EXPORT CheiralityException: public ThreadsafeException<CheiralityException> {
\n-
33public:
\n-\n-
35 : CheiralityException(std::numeric_limits<Key>::max()) {}
\n-
36
\n-\n-
38 : ThreadsafeException<CheiralityException>("CheiralityException"),
\n-
39 j_(j) {}
\n-
40
\n-
41 Key nearbyVariable() const {return j_;}
\n-
42
\n-
43private:
\n-
44 Key j_;
\n-
45};
\n-
\n+
44template<class VALUE>
\n+
\n+\n
46
\n-
\n-
52class GTSAM_EXPORT PinholeBase {
\n-
53
\n-
54public:
\n-
55
\n-
57 typedef Rot3 Rotation;
\n-
58 typedef Point3 Translation;
\n-
59
\n-\n-
65 typedef Point2Vector MeasurementVector;
\n+
47public:
\n+
48 typedef VALUE T;
\n+
49
\n+
50private:
\n+
51
\n+
52 // feasible value
\n+
53 T feasible_;
\n+
54
\n+
55 // error handling flag
\n+
56 bool allow_error_;
\n+
57
\n+
58 // error gain in allow error case
\n+
59 double error_gain_;
\n+
60
\n+
61 // typedef to this class
\n+
62 using This = NonlinearEquality<VALUE>;
\n+
63
\n+
64 // typedef to base class
\n+\n
66
\n-
67private:
\n+
67public:
\n
68
\n-
69 Pose3 pose_;
\n-
70
\n-
71protected:
\n+
70 using CompareFunction = std::function<bool(const T&, const T&)>;
\n+
71 CompareFunction compare_;
\n
72
\n-
75
\n-
81 static Matrix26 Dpose(const Point2& pn, double d);
\n+
\n+\n+
75 }
\n+
\n+
76
\n+
77 ~NonlinearEquality() override {
\n+
78 }
\n+
79
\n
82
\n-
89 static Matrix23 Dpoint(const Point2& pn, double d, const Matrix3& Rt);
\n-
90
\n-
92
\n-
93public:
\n-
94
\n-
97
\n-
105 static Pose3 LevelPose(const Pose2& pose2, double height);
\n-
106
\n-
115 static Pose3 LookatPose(const Point3& eye, const Point3& target,
\n-
116 const Point3& upVector);
\n+
\n+
86 NonlinearEquality(Key j, const T& feasible,
\n+
87 const CompareFunction &_compare = std::bind(traits<T>::Equals,
\n+
88 std::placeholders::_1, std::placeholders::_2, 1e-9)) :
\n+
89 Base(noiseModel::Constrained::All(traits<T>::GetDimension(feasible)),
\n+
90 j), feasible_(feasible), allow_error_(false), error_gain_(0.0), //
\n+
91 compare_(_compare) {
\n+
92 }
\n+
\n+
93
\n+
\n+
97 NonlinearEquality(Key j, const T& feasible, double error_gain,
\n+
98 const CompareFunction &_compare = std::bind(traits<T>::Equals,
\n+
99 std::placeholders::_1, std::placeholders::_2, 1e-9)) :
\n+
100 Base(noiseModel::Constrained::All(traits<T>::GetDimension(feasible)),
\n+
101 j), feasible_(feasible), allow_error_(true), error_gain_(error_gain), //
\n+
102 compare_(_compare) {
\n+
103 }
\n+
\n+
104
\n+
108
\n+
\n+
109 void print(const std::string& s = "",
\n+
110 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
111 std::cout << (s.empty() ? s : s + " ") << "Constraint: on ["
\n+
112 << keyFormatter(this->key()) << "]\\n";
\n+
113 traits<VALUE>::Print(feasible_, "Feasible Point:\\n");
\n+
114 std::cout << "Variable Dimension: " << traits<T>::GetDimension(feasible_)
\n+
115 << std::endl;
\n+
116 }
\n+
\n
117
\n-
121
\n-\n+
\n+
119 bool equals(const NonlinearFactor& f, double tol = 1e-9) const override {
\n+
120 const This* e = dynamic_cast<const This*>(&f);
\n+
121 return e && Base::equals(f) && traits<T>::Equals(feasible_,e->feasible_, tol)
\n+
122 && std::abs(error_gain_ - e->error_gain_) < tol;
\n+
123 }
\n+
\n
124
\n-
126 explicit PinholeBase(const Pose3& pose) : pose_(pose) {}
\n-
127
\n-
131
\n-
132 explicit PinholeBase(const Vector& v) : pose_(Pose3::Expmap(v)) {}
\n-
133
\n-
135 virtual ~PinholeBase() = default;
\n-
136
\n-
140
\n-
142 bool equals(const PinholeBase &camera, double tol = 1e-9) const;
\n-
143
\n-
145 virtual void print(const std::string& s = "PinholeBase") const;
\n-
146
\n-
150
\n-
\n-
152 const Pose3& pose() const {
\n-
153 return pose_;
\n-
154 }
\n-
\n-
155
\n-
\n-
157 const Rot3& rotation() const {
\n-
158 return pose_.rotation();
\n+
128
\n+
\n+
130 double error(const Values& c) const override {
\n+
131 const T& xj = c.at<T>(this->key());
\n+
132 Vector e = this->unwhitenedError(c);
\n+
133 if (allow_error_ || !compare_(xj, feasible_)) {
\n+
134 return error_gain_ * dot(e, e);
\n+
135 } else {
\n+
136 return 0.0;
\n+
137 }
\n+
138 }
\n+
\n+
139
\n+
\n+
141 Vector evaluateError(const T& xj,
\n+
142 boost::optional<Matrix&> H = boost::none) const override {
\n+
143 const size_t nj = traits<T>::GetDimension(feasible_);
\n+
144 if (allow_error_) {
\n+
145 if (H)
\n+
146 *H = Matrix::Identity(nj,nj); // FIXME: this is not the right linearization for nonlinear compare
\n+
147 return traits<T>::Local(xj,feasible_);
\n+
148 } else if (compare_(feasible_, xj)) {
\n+
149 if (H)
\n+
150 *H = Matrix::Identity(nj,nj);
\n+
151 return Vector::Zero(nj); // set error to zero if equal
\n+
152 } else {
\n+
153 if (H)
\n+
154 throw std::invalid_argument(
\n+
155 "Linearization point not feasible for "
\n+
156 + DefaultKeyFormatter(this->key()) + "!");
\n+
157 return Vector::Constant(nj, std::numeric_limits<double>::infinity()); // set error to infinity if not equal
\n+
158 }
\n
159 }
\n
\n
160
\n
\n-
162 const Point3& translation() const {
\n-
163 return pose_.translation();
\n-
164 }
\n-
\n-
165
\n-
167 const Pose3& getPose(OptionalJacobian<6, 6> H) const;
\n-
168
\n-
172
\n-
178 static Point2 Project(const Point3& pc, //
\n-
179 OptionalJacobian<2, 3> Dpoint = boost::none);
\n+
162 GaussianFactor::shared_ptr linearize(const Values& x) const override {
\n+
163 const T& xj = x.at<T>(this->key());
\n+
164 Matrix A;
\n+
165 Vector b = evaluateError(xj, A);
\n+
166 SharedDiagonal model = noiseModel::Constrained::All(b.size());
\n+\n+
168 new JacobianFactor(this->key(), A, b, model));
\n+
169 }
\n+
\n+
170
\n+
\n+
172 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
173 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
174 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
175 }
\n+
\n+
176
\n+
178
\n+\n
180
\n-
186 static Point2 Project(const Unit3& pc, //
\n-
187 OptionalJacobian<2, 2> Dpoint = boost::none);
\n-
188
\n-
190 std::pair<Point2, bool> projectSafe(const Point3& pw) const;
\n-
191
\n-
197 Point2 project2(const Point3& point, OptionalJacobian<2, 6> Dpose =
\n-
198 boost::none, OptionalJacobian<2, 3> Dpoint = boost::none) const;
\n-
199
\n-
205 Point2 project2(const Unit3& point,
\n-
206 OptionalJacobian<2, 6> Dpose = boost::none,
\n-
207 OptionalJacobian<2, 2> Dpoint = boost::none) const;
\n+
181private:
\n+
182
\n+\n+
185 template<class ARCHIVE>
\n+
186 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
187 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
188 ar
\n+
189 & boost::serialization::make_nvp("NoiseModelFactor1",
\n+
190 boost::serialization::base_object<Base>(*this));
\n+
191 ar & BOOST_SERIALIZATION_NVP(feasible_);
\n+
192 ar & BOOST_SERIALIZATION_NVP(allow_error_);
\n+
193 ar & BOOST_SERIALIZATION_NVP(error_gain_);
\n+
194 }
\n+
195
\n+
196};
\n+
\n+
197// \\class NonlinearEquality
\n+
198
\n+
199template <typename VALUE>
\n+
200struct traits<NonlinearEquality<VALUE>> : Testable<NonlinearEquality<VALUE>> {};
\n+
201
\n+
202/* ************************************************************************* */
\n+
206template<class VALUE>
\n+
\n+\n
208
\n-
210 static Point3 BackprojectFromCamera(const Point2& p, const double depth,
\n-
211 OptionalJacobian<3, 2> Dpoint = boost::none,
\n-
212 OptionalJacobian<3, 1> Ddepth = boost::none);
\n-
213
\n-
217
\n-
\n-
223 inline static std::pair<size_t, size_t> translationInterval() {
\n-
224 return std::make_pair(3, 5);
\n-
225 }
\n-
\n+
209public:
\n+
210 typedef VALUE X;
\n+
211
\n+
212protected:
\n+\n+
214 typedef NonlinearEquality1<VALUE> This;
\n+
215
\n+
\n+\n+
218 }
\n+
\n+
219
\n+
220 X value_;
\n+
221
\n+
222 GTSAM_CONCEPT_MANIFOLD_TYPE(X)
\n+
223 GTSAM_CONCEPT_TESTABLE_TYPE(X)
\n+
224
\n+
225public:
\n
226
\n+
227 typedef boost::shared_ptr<NonlinearEquality1<VALUE> > shared_ptr;
\n
228
\n-
229private:
\n-
230
\n-
232 friend class boost::serialization::access;
\n-
233 template<class Archive>
\n-
234 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
235 ar & BOOST_SERIALIZATION_NVP(pose_);
\n-
236 }
\n-
237};
\n-
\n-
238// end of class PinholeBase
\n-
239
\n-
\n-
247class GTSAM_EXPORT CalibratedCamera: public PinholeBase {
\n-
248
\n-
249public:
\n-
250
\n-
251 enum {
\n-
252 dimension = 6
\n-
253 };
\n-
254
\n-
257
\n-
\n-\n-
260 }
\n-
\n-
261
\n-
\n-
263 explicit CalibratedCamera(const Pose3& pose) :
\n-
264 PinholeBase(pose) {
\n-
265 }
\n-
\n-
266
\n-
270
\n-
271 // Create CalibratedCamera, with derivatives
\n-
272 static CalibratedCamera Create(const Pose3& pose,
\n-
273 OptionalJacobian<dimension, 6> H1 = boost::none) {
\n-
274 if (H1)
\n-
275 *H1 << I_6x6;
\n-
276 return CalibratedCamera(pose);
\n-
277 }
\n-
278
\n-
285 static CalibratedCamera Level(const Pose2& pose2, double height);
\n-
286
\n-
295 static CalibratedCamera Lookat(const Point3& eye, const Point3& target,
\n-
296 const Point3& upVector);
\n-
297
\n+
\n+
235 NonlinearEquality1(const X& value, Key key, double mu = 1000.0)
\n+
236 : Base(noiseModel::Constrained::All(traits<X>::GetDimension(value),
\n+
237 std::abs(mu)),
\n+
238 key),
\n+
239 value_(value) {}
\n+
\n+
240
\n+
241 ~NonlinearEquality1() override {
\n+
242 }
\n+
243
\n+
\n+
245 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
246 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
247 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
248 }
\n+
\n+
249
\n+
\n+
251 Vector evaluateError(const X& x1,
\n+
252 boost::optional<Matrix&> H = boost::none) const override {
\n+
253 if (H)
\n+
254 (*H) = Matrix::Identity(traits<X>::GetDimension(x1),traits<X>::GetDimension(x1));
\n+
255 // manifold equivalent of h(x)-z -> log(z,h(x))
\n+
256 return traits<X>::Local(value_,x1);
\n+
257 }
\n+
\n+
258
\n+
\n+
260 void print(const std::string& s = "",
\n+
261 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
262 std::cout << s << ": NonlinearEquality1(" << keyFormatter(this->key())
\n+
263 << ")," << "\\n";
\n+
264 this->noiseModel_->print();
\n+
265 traits<X>::Print(value_, "Value");
\n+
266 }
\n+
\n+
267
\n+\n+
269
\n+
270private:
\n+
271
\n+\n+
274 template<class ARCHIVE>
\n+
275 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
276 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
277 ar
\n+
278 & boost::serialization::make_nvp("NoiseModelFactor1",
\n+
279 boost::serialization::base_object<Base>(*this));
\n+
280 ar & BOOST_SERIALIZATION_NVP(value_);
\n+
281 }
\n+
282};
\n+
\n+
283// \\NonlinearEquality1
\n+
284
\n+
285template <typename VALUE>
\n+
\n+\n+
287 : Testable<NonlinearEquality1<VALUE> > {};
\n+
\n+
288
\n+
289/* ************************************************************************* */
\n+
294template <class T>
\n+
\n+\n+
296 protected:
\n+\n+
298 using This = NonlinearEquality2<T>;
\n+
299
\n+
300 GTSAM_CONCEPT_MANIFOLD_TYPE(T)
\n
301
\n-
\n-
303 explicit CalibratedCamera(const Vector &v) :
\n-
304 PinholeBase(v) {
\n-
305 }
\n-
\n-
306
\n-
310
\n-
\n-\n-
313 }
\n+
302
\n+\n+
304
\n+
305 public:
\n+
306 typedef boost::shared_ptr<NonlinearEquality2<T>> shared_ptr;
\n+
307
\n+
\n+
314 NonlinearEquality2(Key key1, Key key2, double mu = 1e4)
\n+
315 : Base(noiseModel::Constrained::All(traits<T>::dimension, std::abs(mu)),
\n+
316 key1, key2) {}
\n
\n-
314
\n+
317 ~NonlinearEquality2() override {}
\n
318
\n-
320 CalibratedCamera retract(const Vector& d) const;
\n-
321
\n-
323 Vector localCoordinates(const CalibratedCamera& T2) const;
\n+
\n+
320 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
321 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
322 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
323 }
\n+
\n
324
\n
\n-
326 void print(const std::string& s = "CalibratedCamera") const override {
\n-
327 PinholeBase::print(s);
\n-
328 }
\n-
\n-
329
\n-
\n-
331 inline size_t dim() const {
\n-
332 return dimension;
\n+\n+
327 const T& x1, const T& x2, boost::optional<Matrix&> H1 = boost::none,
\n+
328 boost::optional<Matrix&> H2 = boost::none) const override {
\n+
329 static const size_t p = traits<T>::dimension;
\n+
330 if (H1) *H1 = -Matrix::Identity(p, p);
\n+
331 if (H2) *H2 = Matrix::Identity(p, p);
\n+
332 return traits<T>::Local(x1, x2);
\n
333 }
\n
\n
334
\n-
\n-
336 inline static size_t Dim() {
\n-
337 return dimension;
\n-
338 }
\n-
\n-
339
\n-
343
\n-
348 Point2 project(const Point3& point, OptionalJacobian<2, 6> Dcamera =
\n-
349 boost::none, OptionalJacobian<2, 3> Dpoint = boost::none) const;
\n-
350
\n-
\n-
352 Point3 backproject(const Point2& pn, double depth,
\n-
353 OptionalJacobian<3, 6> Dresult_dpose = boost::none,
\n-
354 OptionalJacobian<3, 2> Dresult_dp = boost::none,
\n-
355 OptionalJacobian<3, 1> Dresult_ddepth = boost::none) const {
\n-
356
\n-
357 Matrix32 Dpoint_dpn;
\n-
358 Matrix31 Dpoint_ddepth;
\n-
359 const Point3 point = BackprojectFromCamera(pn, depth,
\n-
360 Dresult_dp ? &Dpoint_dpn : 0,
\n-
361 Dresult_ddepth ? &Dpoint_ddepth : 0);
\n-
362
\n-
363 Matrix33 Dresult_dpoint;
\n-
364 const Point3 result = pose().transformFrom(point, Dresult_dpose,
\n-
365 (Dresult_ddepth ||
\n-
366 Dresult_dp) ? &Dresult_dpoint : 0);
\n-
367
\n-
368 if (Dresult_dp)
\n-
369 *Dresult_dp = Dresult_dpoint * Dpoint_dpn;
\n-
370 if (Dresult_ddepth)
\n-
371 *Dresult_ddepth = Dresult_dpoint * Dpoint_ddepth;
\n-
372
\n-
373 return result;
\n-
374 }
\n-
\n-
375
\n-
\n-
381 double range(const Point3& point,
\n-
382 OptionalJacobian<1, 6> Dcamera = boost::none,
\n-
383 OptionalJacobian<1, 3> Dpoint = boost::none) const {
\n-
384 return pose().range(point, Dcamera, Dpoint);
\n-
385 }
\n-
\n-
386
\n-
\n-
392 double range(const Pose3& pose, OptionalJacobian<1, 6> Dcamera = boost::none,
\n-
393 OptionalJacobian<1, 6> Dpose = boost::none) const {
\n-
394 return this->pose().range(pose, Dcamera, Dpose);
\n-
395 }
\n-
\n-
396
\n-
\n-
402 double range(const CalibratedCamera& camera, //
\n-
403 OptionalJacobian<1, 6> H1 = boost::none, //
\n-
404 OptionalJacobian<1, 6> H2 = boost::none) const {
\n-
405 return pose().range(camera.pose(), H1, H2);
\n-
406 }
\n-
\n-
407
\n-
409
\n-
410private:
\n-
411
\n-
414
\n-
416 friend class boost::serialization::access;
\n-
417 template<class Archive>
\n-
418 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
419 ar
\n-
420 & boost::serialization::make_nvp("PinholeBase",
\n-
421 boost::serialization::base_object<PinholeBase>(*this));
\n-
422 }
\n-
423
\n-
425};
\n-
\n-
426
\n-
427// manifold traits
\n-
428template <>
\n-
429struct traits<CalibratedCamera> : public internal::Manifold<CalibratedCamera> {};
\n-
430
\n-
431template <>
\n-
432struct traits<const CalibratedCamera> : public internal::Manifold<CalibratedCamera> {};
\n-
433
\n-
434// range traits, used in RangeFactor
\n-
435template <typename T>
\n-
436struct Range<CalibratedCamera, T> : HasRange<CalibratedCamera, T, double> {};
\n-
437
\n-
438} // namespace gtsam
\n-
Base class and basic functions for Manifold types.
\n-
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
\n-
Bearing-Range product.
\n-
3D Pose
\n-
2D Point
\n+\n+
336
\n+
337 private:
\n+\n+
340 template <class ARCHIVE>
\n+
341 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
342 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n+
343 ar& boost::serialization::make_nvp(
\n+
344 "NoiseModelFactor2", boost::serialization::base_object<Base>(*this));
\n+
345 }
\n+
346};
\n+
\n+
347// \\NonlinearEquality2
\n+
348
\n+
349template <typename VALUE>
\n+
\n+
350struct traits<NonlinearEquality2<VALUE>> : Testable<NonlinearEquality2<VALUE>> {
\n+
351};
\n+
\n+
352
\n+
353}// namespace gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Base class and basic functions for Manifold types.
\n+
Concept check for values that can be used in unit tests.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n-
Point2_ project(const Point3_ &p_cam)
Expression version of PinholeBase::Project.
Definition expressions.h:131
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
Definition ThreadsafeException.h:42
\n-
Definition BearingRange.h:40
\n-
Definition BearingRange.h:194
\n-
Definition CalibratedCamera.h:32
\n-
A pinhole camera class that has a Pose3, functions as base class for all pinhole cameras.
Definition CalibratedCamera.h:52
\n-
PinholeBase()
Default constructor.
Definition CalibratedCamera.h:123
\n-
PinholeBase(const Pose3 &pose)
Constructor with pose.
Definition CalibratedCamera.h:126
\n-
const Point3 & translation() const
get translation
Definition CalibratedCamera.h:162
\n-
const Rot3 & rotation() const
get rotation
Definition CalibratedCamera.h:157
\n-
Point2 Measurement
Some classes template on either PinholeCamera or StereoCamera, and this typedef informs those classes...
Definition CalibratedCamera.h:64
\n-
const Pose3 & pose() const
return pose, constant version
Definition CalibratedCamera.h:152
\n-
static std::pair< size_t, size_t > translationInterval()
Return the start and end indices (inclusive) of the translation component of the exponential map para...
Definition CalibratedCamera.h:223
\n-
Rot3 Rotation
Pose Concept requirements.
Definition CalibratedCamera.h:57
\n-
virtual ~PinholeBase()=default
Default destructor.
\n-
A Calibrated camera class [R|-R't], calibration K=I.
Definition CalibratedCamera.h:247
\n-
Point3 backproject(const Point2 &pn, double depth, OptionalJacobian< 3, 6 > Dresult_dpose=boost::none, OptionalJacobian< 3, 2 > Dresult_dp=boost::none, OptionalJacobian< 3, 1 > Dresult_ddepth=boost::none) const
backproject a 2-dimensional point to a 3-dimensional point at given depth
Definition CalibratedCamera.h:352
\n-
CalibratedCamera()
default constructor
Definition CalibratedCamera.h:259
\n-
double range(const Pose3 &pose, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dpose=boost::none) const
Calculate range to another pose.
Definition CalibratedCamera.h:392
\n-
size_t dim() const
Definition CalibratedCamera.h:331
\n-
CalibratedCamera(const Vector &v)
construct from vector
Definition CalibratedCamera.h:303
\n-
virtual ~CalibratedCamera()
destructor
Definition CalibratedCamera.h:312
\n-
static size_t Dim()
Definition CalibratedCamera.h:336
\n-
double range(const CalibratedCamera &camera, OptionalJacobian< 1, 6 > H1=boost::none, OptionalJacobian< 1, 6 > H2=boost::none) const
Calculate range to another camera.
Definition CalibratedCamera.h:402
\n-
void print(const std::string &s="CalibratedCamera") const override
print
Definition CalibratedCamera.h:326
\n-
double range(const Point3 &point, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 3 > Dpoint=boost::none) const
Calculate range to a landmark.
Definition CalibratedCamera.h:381
\n-
CalibratedCamera(const Pose3 &pose)
construct with pose
Definition CalibratedCamera.h:263
\n-
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Point3 transformFrom(const Point3 &point, OptionalJacobian< 3, 6 > Hself=boost::none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const
takes point in Pose coordinates and transforms it to world coordinates
Definition Pose3.cpp:347
\n-
double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none, OptionalJacobian< 1, 3 > Hpoint=boost::none) const
Calculate range to a landmark.
Definition Pose3.cpp:399
\n-
const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get translation
Definition Pose3.cpp:308
\n-
const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get rotation
Definition Pose3.cpp:315
\n-
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n+
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n+
static shared_ptr All(size_t dim)
Fully constrained variations.
Definition NoiseModel.h:457
\n+
An equality factor that forces either one variable to a constant, or a set of variables to be equal t...
Definition NonlinearEquality.h:45
\n+
double error(const Values &c) const override
Actual error function calculation.
Definition NonlinearEquality.h:130
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Print.
Definition NonlinearEquality.h:109
\n+
std::function< bool(const T &, const T &)> CompareFunction
Function that compares two values.
Definition NonlinearEquality.h:70
\n+
NonlinearEquality()
Default constructor - only for serialization.
Definition NonlinearEquality.h:74
\n+
bool equals(const NonlinearFactor &f, double tol=1e-9) const override
Check if two factors are equal.
Definition NonlinearEquality.h:119
\n+
NonlinearEquality(Key j, const T &feasible, double error_gain, const CompareFunction &_compare=std::bind(traits< T >::Equals, std::placeholders::_1, std::placeholders::_2, 1e-9))
Constructor - allows inexact evaluation.
Definition NonlinearEquality.h:97
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition NonlinearEquality.h:172
\n+
Vector evaluateError(const T &xj, boost::optional< Matrix & > H=boost::none) const override
Error function.
Definition NonlinearEquality.h:141
\n+
friend class boost::serialization::access
Serialization function.
Definition NonlinearEquality.h:184
\n+
NonlinearEquality(Key j, const T &feasible, const CompareFunction &_compare=std::bind(traits< T >::Equals, std::placeholders::_1, std::placeholders::_2, 1e-9))
Constructor - forces exact evaluation.
Definition NonlinearEquality.h:86
\n+
GaussianFactor::shared_ptr linearize(const Values &x) const override
Linearize is over-written, because base linearization tries to whiten.
Definition NonlinearEquality.h:162
\n+
Simple unary equality constraint - fixes a value for a variable.
Definition NonlinearEquality.h:207
\n+
Vector evaluateError(const X &x1, boost::optional< Matrix & > H=boost::none) const override
g(x) with optional derivative
Definition NonlinearEquality.h:251
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition NonlinearEquality.h:245
\n+
boost::shared_ptr< NonlinearEquality1< VALUE > > shared_ptr
fixed value for variable
Definition NonlinearEquality.h:227
\n+
NonlinearEquality1(const X &value, Key key, double mu=1000.0)
Constructor.
Definition NonlinearEquality.h:235
\n+
NonlinearEquality1()
Default constructor to allow for serialization.
Definition NonlinearEquality.h:217
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Print.
Definition NonlinearEquality.h:260
\n+
friend class boost::serialization::access
Serialization function.
Definition NonlinearEquality.h:273
\n+
Simple binary equality constraint - this constraint forces two variables to be the same.
Definition NonlinearEquality.h:295
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition NonlinearEquality.h:320
\n+
Vector evaluateError(const T &x1, const T &x2, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
g(x) with optional derivative2
Definition NonlinearEquality.h:326
\n+
NonlinearEquality2(Key key1, Key key2, double mu=1e4)
Constructor.
Definition NonlinearEquality.h:314
\n+
friend class boost::serialization::access
Serialization function.
Definition NonlinearEquality.h:339
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix > & > H=boost::none) const override
This implements the unwhitenedError virtual function by calling the n-key specific version of evaluat...
Definition NonlinearFactor.h:542
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,460 +1,494 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-CalibratedCamera.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+NonlinearEquality.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-24#include \n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh>\n-27#include \n-28#include \n+12/*\n+13 * @file NonlinearEquality.h\n+14 * @brief Factor to handle enforced equality between factors\n+15 * @author Alex Cunningham\n+16 */\n+17\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+23\n+24#include \n+25\n+26#include \n+27#include \n+28#include \n 29\n 30namespace _\bg_\bt_\bs_\ba_\bm {\n 31\n-_\b3_\b2class GTSAM_EXPORT _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn: public\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn {\n-33public:\n-34 _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn()\n-35 : _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(std::numeric_limits::max()) {}\n-36\n-37 _\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(_\bK_\be_\by j)\n-38 : _\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b<_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b>(\"CheiralityException\"),\n-39 j_(j) {}\n-40\n-41 _\bK_\be_\by nearbyVariable() const {return j_;}\n-42\n-43private:\n-44 _\bK_\be_\by j_;\n-45};\n+44template\n+_\b4_\b5class _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n 46\n-_\b5_\b2class GTSAM_EXPORT _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be {\n-53\n-54public:\n-55\n-_\b5_\b7 typedef _\bR_\bo_\bt_\b3 _\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn;\n-58 typedef _\bP_\bo_\bi_\bn_\bt_\b3 Translation;\n-59\n-_\b6_\b4 typedef _\bP_\bo_\bi_\bn_\bt_\b2 _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt;\n-65 typedef Point2Vector MeasurementVector;\n+47public:\n+48 typedef VALUE T;\n+49\n+50private:\n+51\n+52 // feasible value\n+53 T feasible_;\n+54\n+55 // error handling flag\n+56 bool allow_error_;\n+57\n+58 // error gain in allow error case\n+59 double error_gain_;\n+60\n+61 // typedef to this class\n+62 using This = _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b<_\bV_\bA_\bL_\bU_\bE_\b>;\n+63\n+64 // typedef to base class\n+65 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b>;\n 66\n-67private:\n+67public:\n 68\n-69 _\bP_\bo_\bs_\be_\b3 pose_;\n-70\n-71protected:\n+_\b7_\b0 using _\bC_\bo_\bm_\bp_\ba_\br_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn = std::function;\n+71 _\bC_\bo_\bm_\bp_\ba_\br_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn compare_;\n 72\n-75\n-81 static Matrix26 Dpose(const _\bP_\bo_\bi_\bn_\bt_\b2& pn, double d);\n+_\b7_\b4 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by() {\n+75 }\n+76\n+77 _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by() override {\n+78 }\n+79\n 82\n-89 static Matrix23 Dpoint(const _\bP_\bo_\bi_\bn_\bt_\b2& pn, double d, const Matrix3& Rt);\n-90\n-92\n-93public:\n-94\n-97\n-105 static _\bP_\bo_\bs_\be_\b3 LevelPose(const _\bP_\bo_\bs_\be_\b2& pose2, double height);\n-106\n-115 static _\bP_\bo_\bs_\be_\b3 LookatPose(const _\bP_\bo_\bi_\bn_\bt_\b3& eye, const _\bP_\bo_\bi_\bn_\bt_\b3& target,\n-116 const _\bP_\bo_\bi_\bn_\bt_\b3& upVector);\n+_\b8_\b6 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by(_\bK_\be_\by j, const T& feasible,\n+87 const _\bC_\bo_\bm_\bp_\ba_\br_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn &_compare = std::bind(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs,\n+88 std::placeholders::_1, std::placeholders::_2, 1e-9)) :\n+89 _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(_\bt_\br_\ba_\bi_\bt_\bs::GetDimension(feasible)),\n+90 j), feasible_(feasible), allow_error_(false), error_gain_(0.0), //\n+91 compare_(_compare) {\n+92 }\n+93\n+_\b9_\b7 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by(_\bK_\be_\by j, const T& feasible, double error_gain,\n+98 const _\bC_\bo_\bm_\bp_\ba_\br_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn &_compare = std::bind(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs,\n+99 std::placeholders::_1, std::placeholders::_2, 1e-9)) :\n+100 _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(_\bt_\br_\ba_\bi_\bt_\bs::GetDimension(feasible)),\n+101 j), feasible_(feasible), allow_error_(true), error_gain_(error_gain), //\n+102 compare_(_compare) {\n+103 }\n+104\n+108\n+_\b1_\b0_\b9 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+110 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+111 std::cout << (s.empty() ? s : s + \" \") << \"Constraint: on [\"\n+112 << keyFormatter(this->_\bk_\be_\by()) << \"]\\n\";\n+113 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(feasible_, \"Feasible Point:\\n\");\n+114 std::cout << \"Variable Dimension: \" << _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(feasible_)\n+115 << std::endl;\n+116 }\n 117\n-121\n-_\b1_\b2_\b3 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be() {}\n+_\b1_\b1_\b9 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& f, double tol = 1e-9) const override {\n+120 const This* e = dynamic_cast(&f);\n+121 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(f) && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(feasible_,e->feasible_,\n+tol)\n+122 && std::abs(error_gain_ - e->error_gain_) < tol;\n+123 }\n 124\n-_\b1_\b2_\b6 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(const _\bP_\bo_\bs_\be_\b3& pose) : pose_(pose) {}\n-127\n-131\n-132 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(const Vector& v) : pose_(_\bP_\bo_\bs_\be_\b3::Expmap(v)) {}\n-133\n-_\b1_\b3_\b5 virtual _\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be() = default;\n-136\n-140\n-142 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be &camera, double tol = 1e-9) const;\n-143\n-145 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"PinholeBase\") const;\n-146\n-150\n-_\b1_\b5_\b2 const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be() const {\n-153 return pose_;\n-154 }\n-155\n-_\b1_\b5_\b7 const _\bR_\bo_\bt_\b3& _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn() const {\n-158 return pose_._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn();\n+128\n+_\b1_\b3_\b0 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& c) const override {\n+131 const T& xj = c._\ba_\bt(this->_\bk_\be_\by());\n+132 Vector e = this->_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(c);\n+133 if (allow_error_ || !compare_(xj, feasible_)) {\n+134 return error_gain_ * _\bd_\bo_\bt(e, e);\n+135 } else {\n+136 return 0.0;\n+137 }\n+138 }\n+139\n+_\b1_\b4_\b1 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const T& xj,\n+142 boost::optional H = boost::none) const override {\n+143 const size_t nj = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(feasible_);\n+144 if (allow_error_) {\n+145 if (H)\n+146 *H = Matrix::Identity(nj,nj); // FIXME: this is not the right linearization\n+for nonlinear compare\n+147 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(xj,feasible_);\n+148 } else if (compare_(feasible_, xj)) {\n+149 if (H)\n+150 *H = Matrix::Identity(nj,nj);\n+151 return Vector::Zero(nj); // set error to zero if equal\n+152 } else {\n+153 if (H)\n+154 throw std::invalid_argument(\n+155 \"Linearization point not feasible for \"\n+156 + DefaultKeyFormatter(this->_\bk_\be_\by()) + \"!\");\n+157 return Vector::Constant(nj, std::numeric_limits::infinity()); /\n+/ set error to infinity if not equal\n+158 }\n 159 }\n 160\n-_\b1_\b6_\b2 const _\bP_\bo_\bi_\bn_\bt_\b3& _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn() const {\n-163 return pose_._\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn();\n-164 }\n-165\n-167 const _\bP_\bo_\bs_\be_\b3& getPose(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H) const;\n-168\n-172\n-178 static _\bP_\bo_\bi_\bn_\bt_\b2 Project(const _\bP_\bo_\bi_\bn_\bt_\b3& pc, //\n-179 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none);\n+_\b1_\b6_\b2 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& x) const override {\n+163 const T& xj = x._\ba_\bt(this->_\bk_\be_\by());\n+164 Matrix A;\n+165 Vector b = _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(xj, A);\n+166 SharedDiagonal model = _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bA_\bl_\bl(b.size());\n+167 return _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br(\n+168 new _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(this->_\bk_\be_\by(), A, b, model));\n+169 }\n+170\n+_\b1_\b7_\b2 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+173 return boost::static_pointer_cast(\n+174 gtsam::NonlinearFactor::shared_ptr(new This(*this)));\n+175 }\n+176\n+178\n+179 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n 180\n-186 static _\bP_\bo_\bi_\bn_\bt_\b2 Project(const _\bU_\bn_\bi_\bt_\b3& pc, //\n-187 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dpoint = boost::none);\n-188\n-190 std::pair projectSafe(const _\bP_\bo_\bi_\bn_\bt_\b3& pw) const;\n-191\n-197 _\bP_\bo_\bi_\bn_\bt_\b2 project2(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose =\n-198 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none) const;\n-199\n-205 _\bP_\bo_\bi_\bn_\bt_\b2 project2(const _\bU_\bn_\bi_\bt_\b3& point,\n-206 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose = boost::none,\n-207 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dpoint = boost::none) const;\n+181private:\n+182\n+_\b1_\b8_\b4 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+185 template\n+186 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+187 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n+compatibility\n+188 ar\n+189 & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n+190 boost::serialization::base_object(*this));\n+191 ar & BOOST_SERIALIZATION_NVP(feasible_);\n+192 ar & BOOST_SERIALIZATION_NVP(allow_error_);\n+193 ar & BOOST_SERIALIZATION_NVP(error_gain_);\n+194 }\n+195\n+196};\n+197// \\class NonlinearEquality\n+198\n+199template \n+_\b2_\b0_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by> : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be>\n+{};\n+201\n+202/* *************************************************************************\n+*/\n+206template\n+_\b2_\b0_\b7class _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n 208\n-210 static _\bP_\bo_\bi_\bn_\bt_\b3 BackprojectFromCamera(const _\bP_\bo_\bi_\bn_\bt_\b2& p, const double depth,\n-211 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b2_\b> Dpoint = boost::none,\n-212 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Ddepth = boost::none);\n-213\n-217\n-_\b2_\b2_\b3 inline static std::pair _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() {\n-224 return std::make_pair(3, 5);\n-225 }\n+209public:\n+210 typedef VALUE X;\n+211\n+212protected:\n+213 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b> _\bB_\ba_\bs_\be;\n+214 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b<_\bV_\bA_\bL_\bU_\bE_\b> This;\n+215\n+_\b2_\b1_\b7 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1() {\n+218 }\n+219\n+220 X value_;\n+221\n+222 GTSAM_CONCEPT_MANIFOLD_TYPE(X)\n+223 GTSAM_CONCEPT_TESTABLE_TYPE(X)\n+224\n+225public:\n 226\n+_\b2_\b2_\b7 typedef boost::shared_ptr > _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n 228\n-229private:\n-230\n-_\b2_\b3_\b2 friend class boost::serialization::access;\n-233 template\n-234 void serialize(Archive & ar, const unsigned int /*version*/) {\n-235 ar & BOOST_SERIALIZATION_NVP(pose_);\n-236 }\n-237};\n-238// end of class PinholeBase\n-239\n-_\b2_\b4_\b7class GTSAM_EXPORT _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba: public _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be {\n-248\n-249public:\n-250\n-251 enum {\n-252 dimension = 6\n-253 };\n-254\n-257\n-_\b2_\b5_\b9 _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba() {\n-260 }\n-261\n-_\b2_\b6_\b3 explicit _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& pose) :\n-264 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(pose) {\n-265 }\n-266\n-270\n-271 // Create CalibratedCamera, with derivatives\n-272 static _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba Create(const _\bP_\bo_\bs_\be_\b3& pose,\n-273 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\b6_\b> H1 = boost::none) {\n-274 if (H1)\n-275 *H1 << I_6x6;\n-276 return _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba(pose);\n-277 }\n-278\n-285 static CalibratedCamera Level(const Pose2& pose2, double height);\n-286\n-295 static CalibratedCamera Lookat(const Point3& eye, const Point3& target,\n-296 const Point3& upVector);\n-297\n+_\b2_\b3_\b5 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1(const X& value, _\bK_\be_\by _\bk_\be_\by, double mu = 1000.0)\n+236 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(_\bt_\br_\ba_\bi_\bt_\bs::GetDimension(value),\n+237 std::abs(mu)),\n+238 _\bk_\be_\by),\n+239 value_(value) {}\n+240\n+241 _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1() override {\n+242 }\n+243\n+_\b2_\b4_\b5 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+246 return boost::static_pointer_cast(\n+247 gtsam::NonlinearFactor::shared_ptr(new This(*this)));\n+248 }\n+249\n+_\b2_\b5_\b1 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const X& x1,\n+252 boost::optional H = boost::none) const override {\n+253 if (H)\n+254 (*H) = Matrix::Identity(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn(x1),_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+(x1));\n+255 // manifold equivalent of h(x)-z -> log(z,h(x))\n+256 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(value_,x1);\n+257 }\n+258\n+_\b2_\b6_\b0 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+261 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+262 std::cout << s << \": NonlinearEquality1(\" << keyFormatter(this->_\bk_\be_\by())\n+263 << \"),\" << \"\\n\";\n+264 this->noiseModel_->print();\n+265 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bX_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(value_, \"Value\");\n+266 }\n+267\n+268 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+269\n+270private:\n+271\n+_\b2_\b7_\b3 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+274 template\n+275 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+276 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n+compatibility\n+277 ar\n+278 & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n+279 boost::serialization::base_object(*this));\n+280 ar & BOOST_SERIALIZATION_NVP(value_);\n+281 }\n+282};\n+283// \\NonlinearEquality1\n+284\n+285template \n+_\b2_\b8_\b6struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1 >\n+287 : _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n+288\n+289/* *************************************************************************\n+*/\n+294template \n+_\b2_\b9_\b5class _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2 : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+296 protected:\n+297 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bT_\b,_\b _\bT_\b>;\n+298 using This = _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2_\b<_\bT_\b>;\n+299\n+300 GTSAM_CONCEPT_MANIFOLD_TYPE(T)\n 301\n-_\b3_\b0_\b3 explicit _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba(const Vector &v) :\n-304 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(v) {\n-305 }\n-306\n-310\n-_\b3_\b1_\b2 virtual _\b~_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba() {\n-313 }\n-314\n+302\n+_\b3_\b0_\b3 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2() {}\n+304\n+305 public:\n+306 typedef boost::shared_ptr> shared_ptr;\n+307\n+_\b3_\b1_\b4 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2(_\bK_\be_\by key1, _\bK_\be_\by key2, double mu = 1e4)\n+315 : _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(_\bt_\br_\ba_\bi_\bt_\bs::dimension, std::abs(mu)),\n+316 key1, key2) {}\n+317 _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2() override {}\n 318\n-320 _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba retract(const Vector& d) const;\n-321\n-323 Vector localCoordinates(const _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba& T2) const;\n+_\b3_\b2_\b0 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+321 return boost::static_pointer_cast(\n+322 gtsam::NonlinearFactor::shared_ptr(new This(*this)));\n+323 }\n 324\n-_\b3_\b2_\b6 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"CalibratedCamera\") const override {\n-327 PinholeBase::print(s);\n-328 }\n-329\n-_\b3_\b3_\b1 inline size_t _\bd_\bi_\bm() const {\n-332 return dimension;\n+_\b3_\b2_\b6 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(\n+327 const T& x1, const T& x2, boost::optional H1 = boost::none,\n+328 boost::optional H2 = boost::none) const override {\n+329 static const size_t p = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+330 if (H1) *H1 = -Matrix::Identity(p, p);\n+331 if (H2) *H2 = Matrix::Identity(p, p);\n+332 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(x1, x2);\n 333 }\n 334\n-_\b3_\b3_\b6 inline static size_t _\bD_\bi_\bm() {\n-337 return dimension;\n-338 }\n-339\n-343\n-348 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dcamera =\n-349 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none) const;\n-350\n-_\b3_\b5_\b2 _\bP_\bo_\bi_\bn_\bt_\b3 _\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b2& pn, double depth,\n-353 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Dresult_dpose = boost::none,\n-354 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b2_\b> Dresult_dp = boost::none,\n-355 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Dresult_ddepth = boost::none) const {\n-356\n-357 Matrix32 Dpoint_dpn;\n-358 Matrix31 Dpoint_ddepth;\n-359 const _\bP_\bo_\bi_\bn_\bt_\b3 point = BackprojectFromCamera(pn, depth,\n-360 Dresult_dp ? &Dpoint_dpn : 0,\n-361 Dresult_ddepth ? &Dpoint_ddepth : 0);\n-362\n-363 Matrix33 Dresult_dpoint;\n-364 const _\bP_\bo_\bi_\bn_\bt_\b3 result = pose()._\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm(point, Dresult_dpose,\n-365 (Dresult_ddepth ||\n-366 Dresult_dp) ? &Dresult_dpoint : 0);\n-367\n-368 if (Dresult_dp)\n-369 *Dresult_dp = Dresult_dpoint * Dpoint_dpn;\n-370 if (Dresult_ddepth)\n-371 *Dresult_ddepth = Dresult_dpoint * Dpoint_ddepth;\n-372\n-373 return result;\n-374 }\n-375\n-_\b3_\b8_\b1 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& point,\n-382 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera = boost::none,\n-383 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> Dpoint = boost::none) const {\n-384 return pose()._\br_\ba_\bn_\bg_\be(point, Dcamera, Dpoint);\n-385 }\n-386\n-_\b3_\b9_\b2 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bs_\be_\b3& pose, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera = boost::\n-none,\n-393 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dpose = boost::none) const {\n-394 return this->pose()._\br_\ba_\bn_\bg_\be(pose, Dcamera, Dpose);\n-395 }\n-396\n-_\b4_\b0_\b2 double _\br_\ba_\bn_\bg_\be(const _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba& camera, //\n-403 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> H1 = boost::none, //\n-404 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> H2 = boost::none) const {\n-405 return pose()._\br_\ba_\bn_\bg_\be(camera._\bp_\bo_\bs_\be(), H1, H2);\n-406 }\n-407\n-409\n-410private:\n-411\n-414\n-_\b4_\b1_\b6 friend class boost::serialization::access;\n-417 template\n-418 void serialize(Archive & ar, const unsigned int /*version*/) {\n-419 ar\n-420 & boost::serialization::make_nvp(\"PinholeBase\",\n-421 boost::serialization::base_object(*this));\n-422 }\n-423\n-425};\n-426\n-427// manifold traits\n-428template <>\n-_\b4_\b2_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n-430\n-431template <>\n-_\b4_\b3_\b2struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n-433\n-434// range traits, used in RangeFactor\n-435template \n-_\b4_\b3_\b6struct _\bR_\ba_\bn_\bg_\be<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba, T> : _\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n-{};\n-437\n-438} // namespace gtsam\n+335 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+336\n+337 private:\n+_\b3_\b3_\b9 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+340 template \n+341 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+342 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n+compatibility\n+343 ar& boost::serialization::make_nvp(\n+344 \"NoiseModelFactor2\", boost::serialization::base_object(*this));\n+345 }\n+346};\n+347// \\NonlinearEquality2\n+348\n+349template \n+_\b3_\b5_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2> :\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {\n+351};\n+352\n+353}// namespace gtsam\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n Base class and basic functions for Manifold types.\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n-Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n-_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n-Bearing-Range product.\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n-_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-2D Point\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n-Point2_ project(const Point3_ &p_cam)\n-Expression version of PinholeBase::Project.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn expressions.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-Both ManifoldTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ThreadsafeException.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:194\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n-A pinhole camera class that has a Pose3, functions as base class for all\n-pinhole cameras.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n-PinholeBase()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n-PinholeBase(const Pose3 &pose)\n-Constructor with pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n-const Point3 & translation() const\n-get translation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:162\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-const Rot3 & rotation() const\n-get rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-Point2 Measurement\n-Some classes template on either PinholeCamera or StereoCamera, and this typedef\n-informs those classes...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be\n-const Pose3 & pose() const\n-return pose, constant version\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n-static std::pair< size_t, size_t > translationInterval()\n-Return the start and end indices (inclusive) of the translation component of\n-the exponential map para...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:223\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-Rot3 Rotation\n-Pose Concept requirements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n-virtual ~PinholeBase()=default\n-Default destructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n-A Calibrated camera class [R|-R't], calibration K=I.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:247\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt\n-Point3 backproject(const Point2 &pn, double depth, OptionalJacobian< 3, 6 >\n-Dresult_dpose=boost::none, OptionalJacobian< 3, 2 > Dresult_dp=boost::none,\n-OptionalJacobian< 3, 1 > Dresult_ddepth=boost::none) const\n-backproject a 2-dimensional point to a 3-dimensional point at given depth\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:352\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n-CalibratedCamera()\n-default constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:259\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const Pose3 &pose, OptionalJacobian< 1, 6 > Dcamera=boost::none,\n-OptionalJacobian< 1, 6 > Dpose=boost::none) const\n-Calculate range to another pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:392\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:331\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n-CalibratedCamera(const Vector &v)\n-construct from vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:303\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\b~_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n-virtual ~CalibratedCamera()\n-destructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:312\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:336\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const CalibratedCamera &camera, OptionalJacobian< 1, 6 >\n-H1=boost::none, OptionalJacobian< 1, 6 > H2=boost::none) const\n-Calculate range to another camera.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:402\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"CalibratedCamera\") const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:326\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const Point3 &point, OptionalJacobian< 1, 6 > Dcamera=boost::none,\n-OptionalJacobian< 1, 3 > Dpoint=boost::none) const\n-Calculate range to a landmark.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:381\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n-CalibratedCamera(const Pose3 &pose)\n-construct with pose\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:263\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-A 2D pose (Point2,Rot2)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm\n-Point3 transformFrom(const Point3 &point, OptionalJacobian< 3, 6 >\n-Hself=boost::none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const\n-takes point in Pose coordinates and transforms it to world coordinates\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:347\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none,\n-OptionalJacobian< 1, 3 > Hpoint=boost::none) const\n-Calculate range to a landmark.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:399\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n-const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n-get translation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:308\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n-get rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:315\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n-symbol GTSAM_USE_QUATERNIO...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor in the squared-error form.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\b:_\b:_\bA_\bl_\bl\n+static shared_ptr All(size_t dim)\n+Fully constrained variations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:457\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by\n+An equality factor that forces either one variable to a constant, or a set of\n+variables to be equal t...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &c) const override\n+Actual error function calculation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+Print.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:109\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bC_\bo_\bm_\bp_\ba_\br_\be_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn\n+std::function< bool(const T &, const T &)> CompareFunction\n+Function that compares two values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by\n+NonlinearEquality()\n+Default constructor - only for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &f, double tol=1e-9) const override\n+Check if two factors are equal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:119\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by\n+NonlinearEquality(Key j, const T &feasible, double error_gain, const\n+CompareFunction &_compare=std::bind(traits< T >::Equals, std::placeholders::_1,\n+std::placeholders::_2, 1e-9))\n+Constructor - allows inexact evaluation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:172\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const T &xj, boost::optional< Matrix & > H=boost::none)\n+const override\n+Error function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:184\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by\n+NonlinearEquality(Key j, const T &feasible, const CompareFunction\n+&_compare=std::bind(traits< T >::Equals, std::placeholders::_1, std::\n+placeholders::_2, 1e-9))\n+Constructor - forces exact evaluation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+GaussianFactor::shared_ptr linearize(const Values &x) const override\n+Linearize is over-written, because base linearization tries to whiten.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:162\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1\n+Simple unary equality constraint - fixes a value for a variable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const X &x1, boost::optional< Matrix & > H=boost::none)\n+const override\n+g(x) with optional derivative\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:251\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:245\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< NonlinearEquality1< VALUE > > shared_ptr\n+fixed value for variable\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:227\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1\n+NonlinearEquality1(const X &value, Key key, double mu=1000.0)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:235\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1\n+NonlinearEquality1()\n+Default constructor to allow for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:217\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+Print.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b1_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:273\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2\n+Simple binary equality constraint - this constraint forces two variables to be\n+the same.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:295\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:320\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const T &x1, const T &x2, boost::optional< Matrix & >\n+H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override\n+g(x) with optional derivative2\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:326\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2\n+NonlinearEquality2(Key key1, Key key2, double mu=1e4)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:314\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bE_\bq_\bu_\ba_\bl_\bi_\bt_\by_\b2_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearEquality.h:339\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+const SharedNoiseModel & noiseModel() const\n+access to the noise model\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n+Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix >\n+& > H=boost::none) const override\n+This implements the unwhitenedError virtual function by calling the n-key\n+specific version of evaluat...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:542\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>_\b:_\b:_\bk_\be_\by\n+Key key() const\n+Returns a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+const ValueType at(Key j) const\n+Retrieve a variable by key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * N\bNo\bon\bnl\bli\bin\bne\bea\bar\brE\bEq\bqu\bua\bal\bli\bit\bty\by.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00377.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01151.html", "comments": ["Files 89% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Expression-inl.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
PinholePose.h File Reference
\n+Namespaces |\n+Functions
\n+
Expression-inl.h File Reference
\n \n
\n \n-

Pinhole camera with known calibration. \n+

Internals for Expression.h, not for general consumption. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n \n-\n-\n-\n-\n-\n-\n+\n \n

\n Classes

class  gtsam::PinholeBaseK< CALIBRATION >
 A pinhole camera class that has a Pose3 and a fixed Calibration. More...
struct  gtsam::internal::apply_compose< T >
 
class  gtsam::PinholePose< CALIBRATION >
 A pinhole camera class that has a Pose3 and a fixed Calibration. More...
 
struct  gtsam::traits< PinholePose< CALIBRATION > >
 
struct  gtsam::traits< const PinholePose< CALIBRATION > >
struct  gtsam::internal::apply_compose< double >
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n+\n+\n+\n+\n+\n+\n

\n+Functions

template<typename T >
Expression< T > gtsam::operator* (const Expression< T > &expression1, const Expression< T > &expression2)
 Construct a product expression, assumes T::compose(T) -> T.
 
template<typename T >
std::vector< Expression< T > > gtsam::createUnknowns (size_t n, char c, size_t start)
 Construct an array of leaves.
 
\n

Detailed Description

\n-

Pinhole camera with known calibration.

\n-
Author
Yong-Dian Jian
\n+

Internals for Expression.h, not for general consumption.

\n+
Date
September 18, 2014
\n+
Author
Frank Dellaert
\n
\n-Frank Dellaert
\n-
Date
Feb 20, 2015
\n+Paul Furgale
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,37 +1,42 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-PinholePose.h File Reference\n-Pinhole camera with known calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Expression-inl.h File Reference\n+Internals for _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh, not for general consumption. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n-\u00a0 A pinhole camera class that has a _\bP_\bo_\bs_\be_\b3 and a f\bfi\bix\bxe\bed\bd Calibration.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\ba_\bp_\bp_\bl_\by_\b__\bc_\bo_\bm_\bp_\bo_\bs_\be_\b<_\b _\bT_\b _\b>\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>\n-\u00a0 A pinhole camera class that has a _\bP_\bo_\bs_\be_\b3 and a f\bfi\bix\bxe\bed\bd Calibration.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b<_\b _\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b _\b>_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\ba_\bp_\bp_\bl_\by_\b__\bc_\bo_\bm_\bp_\bo_\bs_\be_\b<_\b _\bd_\bo_\bu_\bb_\bl_\be_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+template\n+ _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b* (const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\n+ &expression1, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T >\n+ &expression2)\n+\u00a0 Construct a product expression, assumes T::\n+ compose(T) -> T.\n+\u00a0\n+template\n+std::vector< _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn< T > >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bU_\bn_\bk_\bn_\bo_\bw_\bn_\bs (size_t n, char c, size_t\n+ start)\n+\u00a0 Construct an array of leaves.\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Pinhole camera with known calibration.\n+Internals for _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh, not for general consumption.\n+ Date\n+ September 18, 2014\n Author\n- Yong-Dian Jian\n Frank Dellaert\n- Date\n- Feb 20, 2015\n+ Paul Furgale\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00377_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00893_source.html", "comments": ["Files 77% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/PinholePose.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/VectorValues.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
PinholePose.h
\n+
VectorValues.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-\n-
24#include <boost/make_shared.hpp>
\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
33template<typename CALIBRATION>
\n-
\n-\n+
18#pragma once
\n+
19
\n+\n+\n+
22#include <gtsam/base/Vector.h>
\n+
23#include <gtsam/base/ConcurrentMap.h>
\n+\n+\n+
26
\n+
27#include <boost/shared_ptr.hpp>
\n+
28
\n+
29
\n+
30#include <map>
\n+
31#include <string>
\n+
32#include <iosfwd>
\n+
33
\n+
34namespace gtsam {
\n
35
\n-
36private:
\n-
37
\n-
38 GTSAM_CONCEPT_MANIFOLD_TYPE(CALIBRATION)
\n-
39
\n-
40 // Get dimensions of calibration type at compile time
\n-
41 static const int DimK = FixedDimension<CALIBRATION>::value;
\n-
42
\n-
43public:
\n-
44
\n-
45 typedef CALIBRATION CalibrationType;
\n-
46
\n-
49
\n-
\n-\n-
52 }
\n-
\n-
53
\n-
\n-
55 explicit PinholeBaseK(const Pose3& pose) :
\n-\n-
57 }
\n-
\n-
58
\n-
62
\n-
63 explicit PinholeBaseK(const Vector &v) :
\n-
64 PinholeBase(v) {
\n-
65 }
\n-
66
\n-
70
\n-
71 virtual ~PinholeBaseK() {
\n-
72 }
\n-
73
\n-
75 virtual const CALIBRATION& calibration() const = 0;
\n-
76
\n-
80
\n-
\n-
82 std::pair<Point2, bool> projectSafe(const Point3& pw) const {
\n-
83 std::pair<Point2, bool> pn = PinholeBase::projectSafe(pw);
\n-
84 pn.first = calibration().uncalibrate(pn.first);
\n-
85 return pn;
\n-
86 }
\n-
\n+
\n+
74 class GTSAM_EXPORT VectorValues {
\n+
75 protected:
\n+
76 typedef VectorValues This;
\n+\n+\n+
79
\n+
80 public:
\n+
81 typedef Values::iterator iterator;
\n+
82 typedef Values::const_iterator const_iterator;
\n+
83 typedef boost::shared_ptr<This> shared_ptr;
\n+\n+\n+
86 typedef std::map<Key, size_t> Dims;
\n
87
\n-
88
\n-
95 template <class POINT>
\n-
\n-\n-\n-
98 OptionalJacobian<2, DimK> Dcal) const {
\n-
99
\n-
100 // project to normalized coordinates
\n-
101 const Point2 pn = PinholeBase::project2(pw, Dpose, Dpoint);
\n-
102
\n-
103 // uncalibrate to pixel coordinates
\n-
104 Matrix2 Dpi_pn;
\n-
105 const Point2 pi = calibration().uncalibrate(pn, Dcal,
\n-
106 Dpose || Dpoint ? &Dpi_pn : 0);
\n-
107
\n-
108 // If needed, apply chain rule
\n-
109 if (Dpose)
\n-
110 *Dpose = Dpi_pn * *Dpose;
\n-
111 if (Dpoint)
\n-
112 *Dpoint = Dpi_pn * *Dpoint;
\n-
113
\n-
114 return pi;
\n-
115 }
\n-
\n-
116
\n-
\n-\n-
119 OptionalJacobian<2, 3> Dpoint = boost::none,
\n-
120 OptionalJacobian<2, DimK> Dcal = boost::none) const {
\n-
121 return _project(pw, Dpose, Dpoint, Dcal);
\n-
122 }
\n-
\n-
123
\n-
\n-
125 Point2 reprojectionError(const Point3& pw, const Point2& measured, OptionalJacobian<2, 6> Dpose = boost::none,
\n-
126 OptionalJacobian<2, 3> Dpoint = boost::none,
\n-
127 OptionalJacobian<2, DimK> Dcal = boost::none) const {
\n-
128 return Point2(_project(pw, Dpose, Dpoint, Dcal) - measured);
\n-
129 }
\n-
\n-
130
\n-
\n-\n-
133 OptionalJacobian<2, 2> Dpoint = boost::none,
\n-
134 OptionalJacobian<2, DimK> Dcal = boost::none) const {
\n-
135 return _project(pw, Dpose, Dpoint, Dcal);
\n-
136 }
\n-
\n-
137
\n+
90
\n+\n+
93
\n+
\n+
95 VectorValues(std::initializer_list<std::pair<Key, Vector>> init)
\n+
96 : values_(init.begin(), init.end()) {}
\n+
\n+
97
\n+
100 VectorValues(const VectorValues& first, const VectorValues& second);
\n+
101
\n+
103 template<class CONTAINER>
\n+
104 explicit VectorValues(const CONTAINER& c) : values_(c.begin(), c.end()) {}
\n+
105
\n+
107 VectorValues(const VectorValues& c) : values_(c.values_) {}
\n+
108
\n+
110 template<typename ITERATOR>
\n+
111 VectorValues(ITERATOR first, ITERATOR last) : values_(first, last) {}
\n+
112
\n+
114 VectorValues(const Vector& c, const Dims& dims);
\n+
115
\n+
117 VectorValues(const Vector& c, const Scatter& scatter);
\n+
118
\n+
120 static VectorValues Zero(const VectorValues& other);
\n+
121
\n+
125
\n+
127 size_t size() const { return values_.size(); }
\n+
128
\n+
130 size_t dim(Key j) const { return at(j).rows(); }
\n+
131
\n+
133 bool exists(Key j) const { return find(j) != end(); }
\n+
134
\n
\n-
139 Point3 backproject(const Point2& p, double depth,
\n-
140 OptionalJacobian<3, 6> Dresult_dpose = boost::none,
\n-
141 OptionalJacobian<3, 2> Dresult_dp = boost::none,
\n-
142 OptionalJacobian<3, 1> Dresult_ddepth = boost::none,
\n-
143 OptionalJacobian<3, DimK> Dresult_dcal = boost::none) const {
\n-
144 typedef Eigen::Matrix<double, 2, DimK> Matrix2K;
\n-
145 Matrix2K Dpn_dcal;
\n-
146 Matrix22 Dpn_dp;
\n-
147 const Point2 pn = calibration().calibrate(p, Dresult_dcal ? &Dpn_dcal : 0,
\n-
148 Dresult_dp ? &Dpn_dp : 0);
\n-
149 Matrix32 Dpoint_dpn;
\n-
150 Matrix31 Dpoint_ddepth;
\n-
151 const Point3 point = BackprojectFromCamera(pn, depth,
\n-
152 (Dresult_dp || Dresult_dcal) ? &Dpoint_dpn : 0,
\n-
153 Dresult_ddepth ? &Dpoint_ddepth : 0);
\n-
154 Matrix33 Dresult_dpoint;
\n-
155 const Point3 result = pose().transformFrom(point, Dresult_dpose,
\n-
156 (Dresult_ddepth ||
\n-
157 Dresult_dp ||
\n-
158 Dresult_dcal) ? &Dresult_dpoint : 0);
\n-
159 if (Dresult_dcal)
\n-
160 *Dresult_dcal = Dresult_dpoint * Dpoint_dpn * Dpn_dcal; // (3x3)*(3x2)*(2xDimK)
\n-
161 if (Dresult_dp)
\n-
162 *Dresult_dp = Dresult_dpoint * Dpoint_dpn * Dpn_dp; // (3x3)*(3x2)*(2x2)
\n-
163 if (Dresult_ddepth)
\n-
164 *Dresult_ddepth = Dresult_dpoint * Dpoint_ddepth; // (3x3)*(3x1)
\n-
165
\n-
166 return result;
\n-
167 }
\n-
\n+
139 Vector& at(Key j) {
\n+
140 iterator item = find(j);
\n+
141 if (item == end())
\n+
142 throw std::out_of_range(
\n+
143 "Requested variable '" + DefaultKeyFormatter(j) + "' is not in this VectorValues.");
\n+
144 else
\n+
145 return item->second;
\n+
146 }
\n+
\n+
147
\n+
\n+
152 const Vector& at(Key j) const {
\n+
153 const_iterator item = find(j);
\n+
154 if (item == end())
\n+
155 throw std::out_of_range(
\n+
156 "Requested variable '" + DefaultKeyFormatter(j) + "' is not in this VectorValues.");
\n+
157 else
\n+
158 return item->second;
\n+
159 }
\n+
\n+
160
\n+
163 Vector& operator[](Key j) { return at(j); }
\n+
164
\n+
167 const Vector& operator[](Key j) const { return at(j); }
\n
168
\n-
\n-\n-
171 const Point2 pn = calibration().calibrate(p);
\n-
172 const Unit3 pc(pn.x(), pn.y(), 1.0); //by convention the last element is 1
\n-
173 return pose().rotation().rotate(pc);
\n-
174 }
\n-
\n-
175
\n-
\n-
181 double range(const Point3& point,
\n-
182 OptionalJacobian<1, 6> Dcamera = boost::none,
\n-
183 OptionalJacobian<1, 3> Dpoint = boost::none) const {
\n-
184 return pose().range(point, Dcamera, Dpoint);
\n-
185 }
\n-
\n-
186
\n-
\n-
192 double range(const Pose3& pose, OptionalJacobian<1, 6> Dcamera = boost::none,
\n-
193 OptionalJacobian<1, 6> Dpose = boost::none) const {
\n-
194 return this->pose().range(pose, Dcamera, Dpose);
\n-
195 }
\n-
\n-
196
\n-
\n-
202 double range(const CalibratedCamera& camera, OptionalJacobian<1, 6> Dcamera =
\n-
203 boost::none, OptionalJacobian<1, 6> Dother = boost::none) const {
\n-
204 return pose().range(camera.pose(), Dcamera, Dother);
\n-
205 }
\n-
\n-
206
\n-
212 template<class CalibrationB>
\n-
\n-
213 double range(const PinholeBaseK<CalibrationB>& camera,
\n-
214 OptionalJacobian<1, 6> Dcamera = boost::none,
\n-
215 OptionalJacobian<1, 6> Dother = boost::none) const {
\n-
216 return pose().range(camera.pose(), Dcamera, Dother);
\n-
217 }
\n-
\n-
218
\n-
219private:
\n-
220
\n-\n-
223 template<class Archive>
\n-
224 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
225 ar
\n-
226 & boost::serialization::make_nvp("PinholeBase",
\n-
227 boost::serialization::base_object<PinholeBase>(*this));
\n-
228 }
\n-
229
\n-
230public:
\n-\n-
232};
\n-
\n-
233// end of class PinholeBaseK
\n-
234
\n-
242template<typename CALIBRATION>
\n-
\n-
243class PinholePose: public PinholeBaseK<CALIBRATION> {
\n-
244
\n-
245private:
\n+
172 VectorValues& update(const VectorValues& values);
\n+
173
\n+
178 iterator insert(const std::pair<Key, Vector>& key_value);
\n+
179
\n+
184 template<class... Args>
\n+
\n+
185 inline std::pair<VectorValues::iterator, bool> emplace(Key j, Args&&... args) {
\n+
186#if ! defined(GTSAM_USE_TBB) || defined (TBB_GREATER_EQUAL_2020)
\n+
187 return values_.emplace(std::piecewise_construct, std::forward_as_tuple(j), std::forward_as_tuple(args...));
\n+
188#else
\n+
189 return values_.insert(std::make_pair(j, Vector(std::forward<Args>(args)...)));
\n+
190#endif
\n+
191 }
\n+
\n+
192
\n+
\n+
197 iterator insert(Key j, const Vector& value) {
\n+
198 return insert(std::make_pair(j, value));
\n+
199 }
\n+
\n+
200
\n+
203 VectorValues& insert(const VectorValues& values);
\n+
204
\n+
\n+
209 inline std::pair<iterator, bool> tryInsert(Key j, const Vector& value) {
\n+
210#ifdef TBB_GREATER_EQUAL_2020
\n+
211 return values_.emplace(j, value);
\n+
212#else
\n+
213 return values_.insert(std::make_pair(j, value));
\n+
214#endif
\n+
215 }
\n+
\n+
216
\n+
\n+
219 void insert_or_assign(Key j, const Vector& value) {
\n+
220 if (!tryInsert(j, value).second) {
\n+
221 (*this)[j] = value;
\n+
222 }
\n+
223 }
\n+
\n+
224
\n+
\n+
226 void erase(Key var) {
\n+
227 if (values_.unsafe_erase(var) == 0)
\n+
228 throw std::invalid_argument("Requested variable '" +
\n+
229 DefaultKeyFormatter(var) +
\n+
230 "', is not in this VectorValues.");
\n+
231 }
\n+
\n+
232
\n+
234 void setZero();
\n+
235
\n+
236 iterator begin() { return values_.begin(); }
\n+
\n+
237 const_iterator begin() const { return values_.begin(); }
\n+
\n+
238 iterator end() { return values_.end(); }
\n+
\n+
239 const_iterator end() const { return values_.end(); }
\n+
240
\n+
245 iterator find(Key j) { return values_.find(j); }
\n
246
\n-\n-
248 boost::shared_ptr<CALIBRATION> K_;
\n-
249
\n-
250public:
\n-
251
\n-
252 enum {
\n-
253 dimension = 6
\n-
254 };
\n+
251 const_iterator find(Key j) const { return values_.find(j); }
\n+
252
\n+
254 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream&, const VectorValues&);
\n
255
\n-
258
\n-
\n-\n-
261 }
\n-
\n+
257 void print(const std::string& str = "VectorValues",
\n+
258 const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n+
259
\n+
261 bool equals(const VectorValues& x, double tol = 1e-9) const;
\n
262
\n-
\n-
264 explicit PinholePose(const Pose3& pose) :
\n-
265 Base(pose), K_(new CALIBRATION()) {
\n-
266 }
\n-
\n-
267
\n-
\n-
269 PinholePose(const Pose3& pose, const boost::shared_ptr<CALIBRATION>& K) :
\n-
270 Base(pose), K_(K) {
\n-
271 }
\n-
\n-
272
\n-
276
\n-
\n-
284 static PinholePose Level(const boost::shared_ptr<CALIBRATION>& K,
\n-
285 const Pose2& pose2, double height) {
\n-
286 return PinholePose(Base::LevelPose(pose2, height), K);
\n-
287 }
\n-
\n+
266
\n+
268 Vector vector() const;
\n+
269
\n+
271 template <typename CONTAINER>
\n+
\n+
272 Vector vector(const CONTAINER& keys) const {
\n+
273 DenseIndex totalDim = 0;
\n+\n+
275 items.reserve(keys.end() - keys.begin());
\n+
276 for (Key key : keys) {
\n+
277 const Vector* v = &at(key);
\n+
278 totalDim += v->size();
\n+
279 items.push_back(v);
\n+
280 }
\n+
281
\n+
282 Vector result(totalDim);
\n+
283 DenseIndex pos = 0;
\n+
284 for (const Vector* v : items) {
\n+
285 result.segment(pos, v->size()) = *v;
\n+
286 pos += v->size();
\n+
287 }
\n
288
\n-
\n-
290 static PinholePose Level(const Pose2& pose2, double height) {
\n-
291 return PinholePose::Level(boost::make_shared<CALIBRATION>(), pose2, height);
\n-
292 }
\n-
\n-
293
\n-
\n-
303 static PinholePose Lookat(const Point3& eye, const Point3& target,
\n-
304 const Point3& upVector, const boost::shared_ptr<CALIBRATION>& K =
\n-
305 boost::make_shared<CALIBRATION>()) {
\n-
306 return PinholePose(Base::LookatPose(eye, target, upVector), K);
\n-
307 }
\n+
289 return result;
\n+
290 }
\n
\n-
308
\n+
291
\n+
293 Vector vector(const Dims& dims) const;
\n+
294
\n+
296 void swap(VectorValues& other);
\n+
297
\n+
299 bool hasSameStructure(const VectorValues other) const;
\n+
300
\n+
304
\n+
308 double dot(const VectorValues& v) const;
\n+
309
\n+
311 double norm() const;
\n
312
\n-
\n-
314 explicit PinholePose(const Vector &v) :
\n-
315 Base(v), K_(new CALIBRATION()) {
\n-
316 }
\n-
\n-
317
\n-
\n-
319 PinholePose(const Vector &v, const Vector &K) :
\n-
320 Base(v), K_(new CALIBRATION(K)) {
\n-
321 }
\n-
\n-
322
\n-
323 // Init from Pose3 and calibration
\n-
324 PinholePose(const Pose3 &pose, const Vector &K) :
\n-
325 Base(pose), K_(new CALIBRATION(K)) {
\n-
326 }
\n+
314 double squaredNorm() const;
\n+
315
\n+
318 VectorValues operator+(const VectorValues& c) const;
\n+
319
\n+
322 VectorValues add(const VectorValues& c) const;
\n+
323
\n+
326 VectorValues& operator+=(const VectorValues& c);
\n
327
\n+
330 VectorValues& addInPlace(const VectorValues& c);
\n
331
\n-
\n-
333 bool equals(const Base &camera, double tol = 1e-9) const {
\n-
334 const PinholePose* e = dynamic_cast<const PinholePose*>(&camera);
\n-
335 return Base::equals(camera, tol) && K_->equals(e->calibration(), tol);
\n-
336 }
\n-
\n-
337
\n-
\n-
339 friend std::ostream& operator<<(std::ostream &os, const PinholePose& camera) {
\n-
340 os << "{R: " << camera.pose().rotation().rpy().transpose();
\n-
341 os << ", t: " << camera.pose().translation().transpose();
\n-
342 if (!camera.K_) os << ", K: none";
\n-
343 else os << ", K: " << *camera.K_;
\n-
344 os << "}";
\n-
345 return os;
\n-
346 }
\n-
\n-
347
\n-
\n-
349 void print(const std::string& s = "PinholePose") const override {
\n-
350 Base::print(s);
\n-
351 if (!K_)
\n-
352 std::cout << "s No calibration given" << std::endl;
\n-
353 else
\n-
354 K_->print(s + ".calibration");
\n-
355 }
\n-
\n+
333 VectorValues& addInPlace_(const VectorValues& c);
\n+
334
\n+
337 VectorValues operator-(const VectorValues& c) const;
\n+
338
\n+
341 VectorValues subtract(const VectorValues& c) const;
\n+
342
\n+
344 friend GTSAM_EXPORT VectorValues operator*(const double a, const VectorValues &v);
\n+
345
\n+
347 VectorValues scale(const double a) const;
\n+
348
\n+
350 VectorValues& operator*=(double alpha);
\n+
351
\n+
353 VectorValues& scaleInPlace(double alpha);
\n+
354
\n
356
\n-
360
\n-
361 ~PinholePose() override {
\n-
362 }
\n-
363
\n-
\n-
365 const boost::shared_ptr<CALIBRATION>& sharedCalibration() const {
\n-
366 return K_;
\n-
367 }
\n-
\n-
368
\n-
\n-
370 const CALIBRATION& calibration() const override {
\n-
371 return *K_;
\n-
372 }
\n-
\n-
373
\n-
\n-\n-
380 OptionalJacobian<2, 3> Dpoint = boost::none) const {
\n-
381 return Base::project(pw, Dpose, Dpoint);
\n-
382 }
\n+
359
\n+
365 std::string html(
\n+
366 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
367
\n+
369
\n+
370 private:
\n+
372 friend class boost::serialization::access;
\n+
373 template<class ARCHIVE>
\n+
374 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
375 ar & BOOST_SERIALIZATION_NVP(values_);
\n+
376 }
\n+
377 }; // VectorValues definition
\n+
378
\n+
380 template<>
\n+
\n+
381 struct traits<VectorValues> : public Testable<VectorValues> {
\n+
382 };
\n
\n
383
\n-
\n-\n-
386 OptionalJacobian<2, 2> Dpoint = boost::none) const {
\n-
387 return Base::project(pw, Dpose, Dpoint);
\n-
388 }
\n-
\n-
389
\n-
393
\n-
\n-
395 size_t dim() const {
\n-
396 return 6;
\n-
397 }
\n-
\n-
398
\n-
\n-
400 static size_t Dim() {
\n-
401 return 6;
\n-
402 }
\n-
\n-
403
\n-
\n-
405 PinholePose retract(const Vector6& d) const {
\n-
406 return PinholePose(Base::pose().retract(d), K_);
\n-
407 }
\n-
\n-
408
\n-
\n-
410 Vector6 localCoordinates(const PinholePose& p) const {
\n-
411 return Base::pose().localCoordinates(p.Base::pose());
\n-
412 }
\n-
\n-
413
\n-
\n-\n-
416 return PinholePose(); // assumes that the default constructor is valid
\n-
417 }
\n-
\n-
418
\n-
\n-
420 Matrix34 cameraProjectionMatrix() const {
\n-
421 Matrix34 P = Matrix34(PinholeBase::pose().inverse().matrix().block(0, 0, 3, 4));
\n-
422 return K_->K() * P;
\n-
423 }
\n-
\n-
424
\n-
\n-\n-
427 return Eigen::Matrix<double,traits<Point2>::dimension,1>::Constant(2.0 * K_->fx());;
\n-
428 }
\n-
\n-
430
\n-
431private:
\n-
432
\n-\n-
435 template<class Archive>
\n-
436 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
437 ar
\n-
438 & boost::serialization::make_nvp("PinholeBaseK",
\n-
439 boost::serialization::base_object<Base>(*this));
\n-
440 ar & BOOST_SERIALIZATION_NVP(K_);
\n-
441 }
\n-
442
\n-
443public:
\n-\n-
445};
\n-
\n-
446// end of class PinholePose
\n-
447
\n-
448template<typename CALIBRATION>
\n-
\n-
449struct traits<PinholePose<CALIBRATION> > : public internal::Manifold<
\n-
450 PinholePose<CALIBRATION> > {
\n-
451};
\n-
\n-
452
\n-
453template<typename CALIBRATION>
\n-
\n-
454struct traits<const PinholePose<CALIBRATION> > : public internal::Manifold<
\n-
455 PinholePose<CALIBRATION> > {
\n-
456};
\n-
\n-
457
\n-
458} // \\ gtsam
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Calibrated camera for which only pose is unknown.
\n-
2D Point
\n+
384} // \\namespace gtsam
\n+
\n+
\n+
\n+
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
typedef and functions to augment Eigen's VectorXd
\n+
Variable ordering for the elimination algorithm.
\n+
Maps global variable indices to slot indices.
\n+
Included from all GTSAM files.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
string html(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of html.
Definition DiscreteValues.cpp:134
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Errors operator+(const Errors &a, const Errors &b)
Addition.
Definition Errors.cpp:60
\n+
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n+
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
Errors operator-(const Errors &a, const Errors &b)
Subtraction.
Definition Errors.cpp:75
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
TangentVector localCoordinates(const Class &g) const
localCoordinates as required by manifold concept: finds tangent vector between *this and g
Definition Lie.h:136
\n-
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n-
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
A pinhole camera class that has a Pose3, functions as base class for all pinhole cameras.
Definition CalibratedCamera.h:52
\n-
static Matrix26 Dpose(const Point2 &pn, double d)
Calculate Jacobian with respect to pose.
Definition CalibratedCamera.cpp:27
\n-
virtual void print(const std::string &s="PinholeBase") const
print
Definition CalibratedCamera.cpp:74
\n-
std::pair< Point2, bool > projectSafe(const Point3 &pw) const
Project a point into the image and check depth.
Definition CalibratedCamera.cpp:109
\n-
const Pose3 & pose() const
return pose, constant version
Definition CalibratedCamera.h:152
\n-
static Pose3 LevelPose(const Pose2 &pose2, double height)
Create a level pose at the given 2D pose and height.
Definition CalibratedCamera.cpp:49
\n-
bool equals(const PinholeBase &camera, double tol=1e-9) const
assert equality up to a tolerance
Definition CalibratedCamera.cpp:69
\n-
static Matrix23 Dpoint(const Point2 &pn, double d, const Matrix3 &Rt)
Calculate Jacobian with respect to point.
Definition CalibratedCamera.cpp:37
\n-
static Point3 BackprojectFromCamera(const Point2 &p, const double depth, OptionalJacobian< 3, 2 > Dpoint=boost::none, OptionalJacobian< 3, 1 > Ddepth=boost::none)
backproject a 2-dimensional point to a 3-dimensional point at given depth
Definition CalibratedCamera.cpp:167
\n-
static Pose3 LookatPose(const Point3 &eye, const Point3 &target, const Point3 &upVector)
Create a camera pose at the given eye position looking at a target point in the scene with the specif...
Definition CalibratedCamera.cpp:58
\n-
Point2 project2(const Point3 &point, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const
Project point into the image Throws a CheiralityException if point behind image plane iff GTSAM_THROW...
Definition CalibratedCamera.cpp:116
\n-
A Calibrated camera class [R|-R't], calibration K=I.
Definition CalibratedCamera.h:247
\n-
A pinhole camera class that has a Pose3 and a fixed Calibration.
Definition PinholePose.h:34
\n-
double range(const CalibratedCamera &camera, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const
Calculate range to a CalibratedCamera.
Definition PinholePose.h:202
\n-
Point2 project(const Unit3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const
project a point at infinity from world coordinates into the image
Definition PinholePose.h:132
\n-
Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const
project a 3D point from world coordinates into the image
Definition PinholePose.h:118
\n-
std::pair< Point2, bool > projectSafe(const Point3 &pw) const
Project a point into the image and check depth.
Definition PinholePose.h:82
\n-
PinholeBaseK()
default constructor
Definition PinholePose.h:51
\n-
double range(const Point3 &point, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 3 > Dpoint=boost::none) const
Calculate range to a landmark.
Definition PinholePose.h:181
\n-
virtual const CALIBRATION & calibration() const =0
return calibration
\n-
Point2 reprojectionError(const Point3 &pw, const Point2 &measured, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const
project a 3D point from world coordinates into the image
Definition PinholePose.h:125
\n-
PinholeBaseK(const Pose3 &pose)
constructor with pose
Definition PinholePose.h:55
\n-
Point3 backproject(const Point2 &p, double depth, OptionalJacobian< 3, 6 > Dresult_dpose=boost::none, OptionalJacobian< 3, 2 > Dresult_dp=boost::none, OptionalJacobian< 3, 1 > Dresult_ddepth=boost::none, OptionalJacobian< 3, DimK > Dresult_dcal=boost::none) const
backproject a 2-dimensional point to a 3-dimensional point at given depth
Definition PinholePose.h:139
\n-
double range(const PinholeBaseK< CalibrationB > &camera, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const
Calculate range to a PinholePoseK derived class.
Definition PinholePose.h:213
\n-
Unit3 backprojectPointAtInfinity(const Point2 &p) const
backproject a 2-dimensional point to a 3-dimensional point at infinity
Definition PinholePose.h:170
\n-
friend class boost::serialization::access
Serialization function.
Definition PinholePose.h:222
\n-
Point2 _project(const POINT &pw, OptionalJacobian< 2, 6 > Dpose, OptionalJacobian< 2, FixedDimension< POINT >::value > Dpoint, OptionalJacobian< 2, DimK > Dcal) const
Templated projection of a point (possibly at infinity) from world coordinate to the image.
Definition PinholePose.h:96
\n-
double range(const Pose3 &pose, OptionalJacobian< 1, 6 > Dcamera=boost::none, OptionalJacobian< 1, 6 > Dpose=boost::none) const
Calculate range to another pose.
Definition PinholePose.h:192
\n-
A pinhole camera class that has a Pose3 and a fixed Calibration.
Definition PinholePose.h:243
\n-
static PinholePose Lookat(const Point3 &eye, const Point3 &target, const Point3 &upVector, const boost::shared_ptr< CALIBRATION > &K=boost::make_shared< CALIBRATION >())
Create a camera at the given eye position looking at a target point in the scene with the specified u...
Definition PinholePose.h:303
\n-
PinholePose()
default constructor
Definition PinholePose.h:260
\n-
Matrix34 cameraProjectionMatrix() const
for Linear Triangulation
Definition PinholePose.h:420
\n-
Point2 project2(const Unit3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 2 > Dpoint=boost::none) const
project2 version for point at infinity
Definition PinholePose.h:385
\n-
const CALIBRATION & calibration() const override
return calibration
Definition PinholePose.h:370
\n-
Vector defaultErrorWhenTriangulatingBehindCamera() const
for Nonlinear Triangulation
Definition PinholePose.h:426
\n-
friend std::ostream & operator<<(std::ostream &os, const PinholePose &camera)
stream operator
Definition PinholePose.h:339
\n-
static PinholePose Identity()
for Canonical
Definition PinholePose.h:415
\n-
PinholePose(const Vector &v, const Vector &K)
Init from Vector and calibration.
Definition PinholePose.h:319
\n-
const boost::shared_ptr< CALIBRATION > & sharedCalibration() const
return shared pointer to calibration
Definition PinholePose.h:365
\n-
size_t dim() const
Definition PinholePose.h:395
\n-
Point2 project2(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const
project a point from world coordinate to the image, 2 derivatives only
Definition PinholePose.h:379
\n-
PinholePose retract(const Vector6 &d) const
move a cameras according to d
Definition PinholePose.h:405
\n-
PinholePose(const Vector &v)
Init from 6D vector.
Definition PinholePose.h:314
\n-
PinholePose(const Pose3 &pose, const boost::shared_ptr< CALIBRATION > &K)
constructor with pose and calibration
Definition PinholePose.h:269
\n-
static size_t Dim()
Definition PinholePose.h:400
\n-
friend class boost::serialization::access
Serialization function.
Definition PinholePose.h:434
\n-
bool equals(const Base &camera, double tol=1e-9) const
assert equality up to a tolerance
Definition PinholePose.h:333
\n-
void print(const std::string &s="PinholePose") const override
print
Definition PinholePose.h:349
\n-
static PinholePose Level(const boost::shared_ptr< CALIBRATION > &K, const Pose2 &pose2, double height)
Create a level camera at the given 2D pose and height.
Definition PinholePose.h:284
\n-
PinholePose(const Pose3 &pose)
constructor with pose, uses default calibration
Definition PinholePose.h:264
\n-
static PinholePose Level(const Pose2 &pose2, double height)
PinholePose::level with default calibration.
Definition PinholePose.h:290
\n-
Vector6 localCoordinates(const PinholePose &p) const
return canonical coordinate
Definition PinholePose.h:410
\n-
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Point3 transformFrom(const Point3 &point, OptionalJacobian< 3, 6 > Hself=boost::none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const
takes point in Pose coordinates and transforms it to world coordinates
Definition Pose3.cpp:347
\n-
double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none, OptionalJacobian< 1, 3 > Hpoint=boost::none) const
Calculate range to a landmark.
Definition Pose3.cpp:399
\n-
const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get translation
Definition Pose3.cpp:308
\n-
const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get rotation
Definition Pose3.cpp:315
\n-
Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
rotate point from rotated coordinate frame to world
Definition Rot3M.cpp:149
\n-
Vector3 rpy(OptionalJacobian< 3, 3 > H=boost::none) const
Use RQ to calculate roll-pitch-yaw angle representation.
Definition Rot3.cpp:192
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition ConcurrentMap.h:68
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
Scatter is an intermediate data structure used when building a HessianFactor incrementally,...
Definition Scatter.h:49
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
value_type KeyValuePair
Typedef to pair<Key, Vector>
Definition VectorValues.h:85
\n+
const_iterator end() const
Iterator over variables.
Definition VectorValues.h:239
\n+
Values::value_type value_type
Typedef to pair<Key, Vector>
Definition VectorValues.h:84
\n+
Values::const_iterator const_iterator
Const iterator over vector values.
Definition VectorValues.h:82
\n+
iterator end()
Iterator over variables.
Definition VectorValues.h:238
\n+
Values::iterator iterator
Iterator over vector values.
Definition VectorValues.h:81
\n+
iterator insert(Key j, const Vector &value)
Insert a vector value with key j.
Definition VectorValues.h:197
\n+
VectorValues(const CONTAINER &c)
Create from another container holding pair<Key,Vector>.
Definition VectorValues.h:104
\n+
Values values_
Vectors making up this VectorValues.
Definition VectorValues.h:78
\n+
std::map< Key, size_t > Dims
Keyed vector dimensions.
Definition VectorValues.h:86
\n+
ConcurrentMap< Key, Vector > Values
Collection of Vectors making up a VectorValues.
Definition VectorValues.h:77
\n+
Vector & operator[](Key j)
Read/write access to the vector value with key j, throws std::out_of_range if j does not exist,...
Definition VectorValues.h:163
\n+
std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)
Emplace a vector value with key j.
Definition VectorValues.h:185
\n+
iterator find(Key j)
Return the iterator corresponding to the requested key, or end() if no variable is present with this ...
Definition VectorValues.h:245
\n+
size_t dim(Key j) const
Return the dimension of variable j.
Definition VectorValues.h:130
\n+
size_t size() const
Number of variables stored.
Definition VectorValues.h:127
\n+
const Vector & operator[](Key j) const
Access the vector value with key j (const version), throws std::out_of_range if j does not exist,...
Definition VectorValues.h:167
\n+
bool exists(Key j) const
Check whether a variable with key j exists.
Definition VectorValues.h:133
\n+
VectorValues()
Default constructor creates an empty VectorValues.
Definition VectorValues.h:92
\n+
const_iterator find(Key j) const
Return the iterator corresponding to the requested key, or end() if no variable is present with this ...
Definition VectorValues.h:251
\n+
VectorValues(ITERATOR first, ITERATOR last)
Create from a pair of iterators over pair<Key,Vector>.
Definition VectorValues.h:111
\n+
const Vector & at(Key j) const
Access the vector value with key j (const version), throws std::out_of_range if j does not exist,...
Definition VectorValues.h:152
\n+
Vector vector(const CONTAINER &keys) const
Access a vector that is a subset of relevant keys.
Definition VectorValues.h:272
\n+
void insert_or_assign(Key j, const Vector &value)
insert_or_assign that mimics the STL map insert_or_assign - if the value already exists,...
Definition VectorValues.h:219
\n+
const_iterator begin() const
Iterator over variables.
Definition VectorValues.h:237
\n+
Vector & at(Key j)
Read/write access to the vector value with key j, throws std::out_of_range if j does not exist,...
Definition VectorValues.h:139
\n+
void erase(Key var)
Erase the vector with the given key, or throw std::out_of_range if it does not exist.
Definition VectorValues.h:226
\n+
VectorValues(std::initializer_list< std::pair< Key, Vector > > init)
Construct from initializer list.
Definition VectorValues.h:95
\n+
std::pair< iterator, bool > tryInsert(Key j, const Vector &value)
insert that mimics the STL map insert - if the value already exists, the map is not modified and an i...
Definition VectorValues.h:209
\n+
VectorValues(const VectorValues &c)
Implicit copy constructor to specialize the explicit constructor from any container.
Definition VectorValues.h:107
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition VectorValues.h:83
\n+
iterator begin()
Iterator over variables.
Definition VectorValues.h:236
\n+
A key-value pair, which you get by dereferencing iterators.
Definition Values.h:93
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,662 +1,468 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PinholePose.h\n+VectorValues.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-24#include \n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-33template\n-_\b3_\b4class _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK: public _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be {\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+23#include \n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+26\n+27#include \n+28\n+29\n+30#include \n+31#include \n+32#include \n+33\n+34namespace _\bg_\bt_\bs_\ba_\bm {\n 35\n-36private:\n-37\n-38 GTSAM_CONCEPT_MANIFOLD_TYPE(CALIBRATION)\n-39\n-40 // Get dimensions of calibration type at compile time\n-41 static const int DimK = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n-42\n-43public:\n-44\n-45 typedef CALIBRATION CalibrationType;\n-46\n-49\n-_\b5_\b1 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK() {\n-52 }\n-53\n-_\b5_\b5 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be) :\n-56 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(_\bp_\bo_\bs_\be) {\n-57 }\n-58\n-62\n-63 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK(const Vector &v) :\n-64 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be(v) {\n-65 }\n-66\n-70\n-71 virtual ~PinholeBaseK() {\n-72 }\n-73\n-_\b7_\b5 virtual const CALIBRATION& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const = 0;\n-76\n-80\n-_\b8_\b2 std::pair _\bp_\br_\bo_\bj_\be_\bc_\bt_\bS_\ba_\bf_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& pw) const {\n-83 std::pair pn = _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bS_\ba_\bf_\be(pw);\n-84 pn.first = _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn().uncalibrate(pn.first);\n-85 return pn;\n-86 }\n+_\b7_\b4 class GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs {\n+75 protected:\n+76 typedef _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bT_\bh_\bi_\bs;\n+_\b7_\b7 typedef _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b> _\bV_\ba_\bl_\bu_\be_\bs;\n+_\b7_\b8 _\bV_\ba_\bl_\bu_\be_\bs _\bv_\ba_\bl_\bu_\be_\bs_\b_;\n+79\n+80 public:\n+_\b8_\b1 typedef Values::iterator _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b8_\b2 typedef Values::const_iterator _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n+_\b8_\b3 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b8_\b4 typedef _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n+_\b8_\b5 typedef _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be _\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br;\n+_\b8_\b6 typedef std::map _\bD_\bi_\bm_\bs;\n 87\n-88\n-95 template \n-_\b9_\b6 _\bP_\bo_\bi_\bn_\bt_\b2 _\b__\bp_\br_\bo_\bj_\be_\bc_\bt(const POINT& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be,\n-97 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn<2, _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bP_\bO_\bI_\bN_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be> _\bD_\bp_\bo_\bi_\bn_\bt,\n-98 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bD_\bi_\bm_\bK_\b> Dcal) const {\n-99\n-100 // project to normalized coordinates\n-101 const _\bP_\bo_\bi_\bn_\bt_\b2 pn = _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt);\n-102\n-103 // uncalibrate to pixel coordinates\n-104 Matrix2 Dpi_pn;\n-105 const _\bP_\bo_\bi_\bn_\bt_\b2 pi = _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn().uncalibrate(pn, Dcal,\n-106 _\bD_\bp_\bo_\bs_\be || _\bD_\bp_\bo_\bi_\bn_\bt ? &Dpi_pn : 0);\n-107\n-108 // If needed, apply chain rule\n-109 if (_\bD_\bp_\bo_\bs_\be)\n-110 *_\bD_\bp_\bo_\bs_\be = Dpi_pn * *_\bD_\bp_\bo_\bs_\be;\n-111 if (_\bD_\bp_\bo_\bi_\bn_\bt)\n-112 *_\bD_\bp_\bo_\bi_\bn_\bt = Dpi_pn * *_\bD_\bp_\bo_\bi_\bn_\bt;\n-113\n-114 return pi;\n-115 }\n-116\n-_\b1_\b1_\b8 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::\n-none,\n-119 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none,\n-120 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bD_\bi_\bm_\bK_\b> Dcal = boost::none) const {\n-121 return _\b__\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt, Dcal);\n-122 }\n-123\n-_\b1_\b2_\b5 _\bP_\bo_\bi_\bn_\bt_\b2 _\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bi_\bn_\bt_\b3& pw, const _\bP_\bo_\bi_\bn_\bt_\b2& measured,\n-_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::none,\n-126 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none,\n-127 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bD_\bi_\bm_\bK_\b> Dcal = boost::none) const {\n-128 return _\bP_\bo_\bi_\bn_\bt_\b2(_\b__\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt, Dcal) - measured);\n-129 }\n-130\n-_\b1_\b3_\b2 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bU_\bn_\bi_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::none,\n-133 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none,\n-134 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\bD_\bi_\bm_\bK_\b> Dcal = boost::none) const {\n-135 return _\b__\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt, Dcal);\n-136 }\n-137\n-_\b1_\b3_\b9 _\bP_\bo_\bi_\bn_\bt_\b3 _\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b2& p, double depth,\n-140 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Dresult_dpose = boost::none,\n-141 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b2_\b> Dresult_dp = boost::none,\n-142 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Dresult_ddepth = boost::none,\n-143 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\bD_\bi_\bm_\bK_\b> Dresult_dcal = boost::none) const {\n-144 typedef Eigen::Matrix Matrix2K;\n-145 Matrix2K Dpn_dcal;\n-146 Matrix22 Dpn_dp;\n-147 const _\bP_\bo_\bi_\bn_\bt_\b2 pn = _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn().calibrate(p, Dresult_dcal ? &Dpn_dcal : 0,\n-148 Dresult_dp ? &Dpn_dp : 0);\n-149 Matrix32 Dpoint_dpn;\n-150 Matrix31 Dpoint_ddepth;\n-151 const _\bP_\bo_\bi_\bn_\bt_\b3 point = _\bB_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt_\bF_\br_\bo_\bm_\bC_\ba_\bm_\be_\br_\ba(pn, depth,\n-152 (Dresult_dp || Dresult_dcal) ? &Dpoint_dpn : 0,\n-153 Dresult_ddepth ? &Dpoint_ddepth : 0);\n-154 Matrix33 Dresult_dpoint;\n-155 const _\bP_\bo_\bi_\bn_\bt_\b3 result = _\bp_\bo_\bs_\be()._\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm(point, Dresult_dpose,\n-156 (Dresult_ddepth ||\n-157 Dresult_dp ||\n-158 Dresult_dcal) ? &Dresult_dpoint : 0);\n-159 if (Dresult_dcal)\n-160 *Dresult_dcal = Dresult_dpoint * Dpoint_dpn * Dpn_dcal; // (3x3)*(3x2)*\n-(2xDimK)\n-161 if (Dresult_dp)\n-162 *Dresult_dp = Dresult_dpoint * Dpoint_dpn * Dpn_dp; // (3x3)*(3x2)*(2x2)\n-163 if (Dresult_ddepth)\n-164 *Dresult_ddepth = Dresult_dpoint * Dpoint_ddepth; // (3x3)*(3x1)\n-165\n-166 return result;\n-167 }\n+90\n+_\b9_\b2 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs() {}\n+93\n+_\b9_\b5 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(std::initializer_list> init)\n+96 : values_(init.begin(), init.end()) {}\n+97\n+100 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& first, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& second);\n+101\n+103 template\n+_\b1_\b0_\b4 explicit _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const CONTAINER& c) : values_(c.begin(), c.end()) {}\n+105\n+_\b1_\b0_\b7 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) : values_(c.values_) {}\n+108\n+110 template\n+_\b1_\b1_\b1 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(ITERATOR first, ITERATOR last) : values_(first, last) {}\n+112\n+114 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const Vector& c, const Dims& dims);\n+115\n+117 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const Vector& c, const _\bS_\bc_\ba_\bt_\bt_\be_\br& scatter);\n+118\n+120 static _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs Zero(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& other);\n+121\n+125\n+_\b1_\b2_\b7 size_t _\bs_\bi_\bz_\be() const { return values_.size(); }\n+128\n+_\b1_\b3_\b0 size_t _\bd_\bi_\bm(_\bK_\be_\by j) const { return at(j).rows(); }\n+131\n+_\b1_\b3_\b3 bool _\be_\bx_\bi_\bs_\bt_\bs(_\bK_\be_\by j) const { return find(j) != end(); }\n+134\n+_\b1_\b3_\b9 Vector& _\ba_\bt(_\bK_\be_\by j) {\n+140 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br item = find(j);\n+141 if (item == end())\n+142 throw std::out_of_range(\n+143 \"Requested variable '\" + DefaultKeyFormatter(j) + \"' is not in this\n+VectorValues.\");\n+144 else\n+145 return item->second;\n+146 }\n+147\n+_\b1_\b5_\b2 const Vector& _\ba_\bt(_\bK_\be_\by j) const {\n+153 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br item = find(j);\n+154 if (item == end())\n+155 throw std::out_of_range(\n+156 \"Requested variable '\" + DefaultKeyFormatter(j) + \"' is not in this\n+VectorValues.\");\n+157 else\n+158 return item->second;\n+159 }\n+160\n+_\b1_\b6_\b3 Vector& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bK_\be_\by j) { return at(j); }\n+164\n+_\b1_\b6_\b7 const Vector& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bK_\be_\by j) const { return at(j); }\n 168\n-_\b1_\b7_\b0 _\bU_\bn_\bi_\bt_\b3 _\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt_\bP_\bo_\bi_\bn_\bt_\bA_\bt_\bI_\bn_\bf_\bi_\bn_\bi_\bt_\by(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const {\n-171 const _\bP_\bo_\bi_\bn_\bt_\b2 pn = _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn().calibrate(p);\n-172 const _\bU_\bn_\bi_\bt_\b3 pc(pn.x(), pn.y(), 1.0); //by convention the last element is 1\n-173 return _\bp_\bo_\bs_\be()._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn()._\br_\bo_\bt_\ba_\bt_\be(pc);\n-174 }\n-175\n-_\b1_\b8_\b1 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& point,\n-182 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera = boost::none,\n-183 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n-184 return _\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(point, Dcamera, _\bD_\bp_\bo_\bi_\bn_\bt);\n-185 }\n-186\n-_\b1_\b9_\b2 double _\br_\ba_\bn_\bg_\be(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera = boost::\n-none,\n-193 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::none) const {\n-194 return this->_\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(pose, Dcamera, _\bD_\bp_\bo_\bs_\be);\n-195 }\n-196\n-_\b2_\b0_\b2 double _\br_\ba_\bn_\bg_\be(const _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba& camera, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera\n-=\n-203 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dother = boost::none) const {\n-204 return _\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(camera._\bp_\bo_\bs_\be(), Dcamera, Dother);\n-205 }\n-206\n-212 template\n-_\b2_\b1_\b3 double _\br_\ba_\bn_\bg_\be(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b<_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\bB_\b>& camera,\n-214 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dcamera = boost::none,\n-215 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Dother = boost::none) const {\n-216 return _\bp_\bo_\bs_\be()._\br_\ba_\bn_\bg_\be(camera._\bp_\bo_\bs_\be(), Dcamera, Dother);\n-217 }\n-218\n-219private:\n-220\n-_\b2_\b2_\b2 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-223 template\n-224 void serialize(Archive & ar, const unsigned int /*version*/) {\n-225 ar\n-226 & boost::serialization::make_nvp(\"PinholeBase\",\n-227 boost::serialization::base_object(*this));\n-228 }\n-229\n-230public:\n-231 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-232};\n-233// end of class PinholeBaseK\n-234\n-242template\n-_\b2_\b4_\b3class _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be: public _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK {\n-244\n-245private:\n+172 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& update(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& values);\n+173\n+178 iterator insert(const std::pair& key_value);\n+179\n+184 template\n+_\b1_\b8_\b5 inline std::pair _\be_\bm_\bp_\bl_\ba_\bc_\be(_\bK_\be_\by j, Args&&...\n+args) {\n+186#if ! defined(GTSAM_USE_TBB) || defined (TBB_GREATER_EQUAL_2020)\n+187 return values_.emplace(std::piecewise_construct, std::forward_as_tuple(j),\n+std::forward_as_tuple(args...));\n+188#else\n+189 return values_.insert(std::make_pair(j, Vector(std::forward\n+(args)...)));\n+190#endif\n+191 }\n+192\n+_\b1_\b9_\b7 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bn_\bs_\be_\br_\bt(_\bK_\be_\by j, const Vector& value) {\n+198 return insert(std::make_pair(j, value));\n+199 }\n+200\n+203 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& insert(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& values);\n+204\n+_\b2_\b0_\b9 inline std::pair _\bt_\br_\by_\bI_\bn_\bs_\be_\br_\bt(_\bK_\be_\by j, const Vector& value) {\n+210#ifdef TBB_GREATER_EQUAL_2020\n+211 return values_.emplace(j, value);\n+212#else\n+213 return values_.insert(std::make_pair(j, value));\n+214#endif\n+215 }\n+216\n+_\b2_\b1_\b9 void _\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn(_\bK_\be_\by j, const Vector& value) {\n+220 if (!tryInsert(j, value).second) {\n+221 (*this)[j] = value;\n+222 }\n+223 }\n+224\n+_\b2_\b2_\b6 void _\be_\br_\ba_\bs_\be(_\bK_\be_\by var) {\n+227 if (values_.unsafe_erase(var) == 0)\n+228 throw std::invalid_argument(\"Requested variable '\" +\n+229 DefaultKeyFormatter(var) +\n+230 \"', is not in this VectorValues.\");\n+231 }\n+232\n+234 void setZero();\n+235\n+_\b2_\b3_\b6 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() { return values_.begin(); }\n+_\b2_\b3_\b7 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const { return values_.begin(); }\n+_\b2_\b3_\b8 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() { return values_.end(); }\n+_\b2_\b3_\b9 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const { return values_.end(); }\n+240\n+_\b2_\b4_\b5 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bf_\bi_\bn_\bd(_\bK_\be_\by j) { return values_.find(j); }\n 246\n-247 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b<_\bC_\bA_\bL_\bI_\bB_\bR_\bA_\bT_\bI_\bO_\bN_\b> _\bB_\ba_\bs_\be;\n-248 boost::shared_ptr K_;\n-249\n-250public:\n-251\n-252 enum {\n-253 dimension = 6\n-254 };\n+_\b2_\b5_\b1 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bf_\bi_\bn_\bd(_\bK_\be_\by j) const { return values_.find(j); }\n+252\n+254 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream&, const\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs&);\n 255\n-258\n-_\b2_\b6_\b0 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be() {\n-261 }\n+257 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"VectorValues\",\n+258 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const;\n+259\n+261 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x, double tol = 1e-9) const;\n 262\n-_\b2_\b6_\b4 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be) :\n-265 _\bB_\ba_\bs_\be(_\bp_\bo_\bs_\be), K_(new CALIBRATION()) {\n-266 }\n-267\n-_\b2_\b6_\b9 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be, const boost::shared_ptr& K) :\n-270 _\bB_\ba_\bs_\be(_\bp_\bo_\bs_\be), K_(K) {\n-271 }\n-272\n-276\n-_\b2_\b8_\b4 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be _\bL_\be_\bv_\be_\bl(const boost::shared_ptr& K,\n-285 const _\bP_\bo_\bs_\be_\b2& pose2, double height) {\n-286 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(_\bB_\ba_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl_\bP_\bo_\bs_\be(pose2, height), K);\n+266\n+268 Vector vector() const;\n+269\n+271 template \n+_\b2_\b7_\b2 Vector _\bv_\be_\bc_\bt_\bo_\br(const CONTAINER& keys) const {\n+273 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx totalDim = 0;\n+274 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bc_\bo_\bn_\bs_\bt_\b _\bV_\be_\bc_\bt_\bo_\br_\b*_\b> items;\n+275 items.reserve(keys.end() - keys.begin());\n+276 for (_\bK_\be_\by key : keys) {\n+277 const Vector* v = &at(key);\n+278 totalDim += v->size();\n+279 items.push_back(v);\n+280 }\n+281\n+282 Vector result(totalDim);\n+283 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx pos = 0;\n+284 for (const Vector* v : items) {\n+285 result.segment(pos, v->size()) = *v;\n+286 pos += v->size();\n 287 }\n 288\n-_\b2_\b9_\b0 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be _\bL_\be_\bv_\be_\bl(const _\bP_\bo_\bs_\be_\b2& pose2, double height) {\n-291 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl(boost::make_shared(), pose2,\n-height);\n-292 }\n-293\n-_\b3_\b0_\b3 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be _\bL_\bo_\bo_\bk_\ba_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& eye, const _\bP_\bo_\bi_\bn_\bt_\b3& target,\n-304 const _\bP_\bo_\bi_\bn_\bt_\b3& upVector, const boost::shared_ptr& K =\n-305 boost::make_shared()) {\n-306 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt_\bP_\bo_\bs_\be(eye, target, upVector), K);\n-307 }\n-308\n+289 return result;\n+290 }\n+291\n+293 Vector vector(const Dims& dims) const;\n+294\n+296 void swap(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& other);\n+297\n+299 bool hasSameStructure(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs other) const;\n+300\n+304\n+308 double _\bd_\bo_\bt(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& v) const;\n+309\n+311 double norm() const;\n 312\n-_\b3_\b1_\b4 explicit _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(const Vector &v) :\n-315 _\bB_\ba_\bs_\be(v), K_(new CALIBRATION()) {\n-316 }\n-317\n-_\b3_\b1_\b9 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(const Vector &v, const Vector &K) :\n-320 _\bB_\ba_\bs_\be(v), K_(new CALIBRATION(K)) {\n-321 }\n-322\n-323 // Init from Pose3 and calibration\n-324 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(const _\bP_\bo_\bs_\be_\b3 &_\bp_\bo_\bs_\be, const Vector &K) :\n-325 Base(_\bp_\bo_\bs_\be), K_(new CALIBRATION(K)) {\n-326 }\n+314 double squaredNorm() const;\n+315\n+318 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+319\n+322 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs add(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+323\n+326 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& operator+=(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c);\n 327\n+330 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& addInPlace(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c);\n 331\n-_\b3_\b3_\b3 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\ba_\bs_\be &camera, double tol = 1e-9) const {\n-334 const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be* e = dynamic_cast(&camera);\n-335 return _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(camera, tol) && K_->_\be_\bq_\bu_\ba_\bl_\bs(e->_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn(), tol);\n-336 }\n-337\n-_\b3_\b3_\b9 friend std::ostream& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<(std::ostream &os, const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be&\n-camera) {\n-340 os << \"{R: \" << camera._\bp_\bo_\bs_\be()._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn()._\br_\bp_\by().transpose();\n-341 os << \", t: \" << camera._\bp_\bo_\bs_\be()._\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn().transpose();\n-342 if (!camera.K_) os << \", K: none\";\n-343 else os << \", K: \" << *camera.K_;\n-344 os << \"}\";\n-345 return os;\n-346 }\n-347\n-_\b3_\b4_\b9 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"PinholePose\") const override {\n-350 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s);\n-351 if (!K_)\n-352 std::cout << \"s No calibration given\" << std::endl;\n-353 else\n-354 K_->print(s + \".calibration\");\n-355 }\n+333 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& addInPlace_(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c);\n+334\n+337 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+338\n+341 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs subtract(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+342\n+344 friend GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const double a, const\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &v);\n+345\n+347 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs scale(const double a) const;\n+348\n+350 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& operator*=(double alpha);\n+351\n+353 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& scaleInPlace(double alpha);\n+354\n 356\n-360\n-361 _\b~_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be() override {\n-362 }\n-363\n-_\b3_\b6_\b5 const boost::shared_ptr& _\bs_\bh_\ba_\br_\be_\bd_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n-366 return K_;\n-367 }\n-368\n-_\b3_\b7_\b0 const CALIBRATION& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const override {\n-371 return *K_;\n-372 }\n-373\n-_\b3_\b7_\b9 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const _\bP_\bo_\bi_\bn_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::\n-none,\n-380 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n-381 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt);\n-382 }\n+359\n+365 std::string _\bh_\bt_\bm_\bl(\n+366 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+367\n+369\n+370 private:\n+_\b3_\b7_\b2 friend class boost::serialization::access;\n+373 template\n+374 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+375 ar & BOOST_SERIALIZATION_NVP(values_);\n+376 }\n+377 }; // VectorValues definition\n+378\n+380 template<>\n+_\b3_\b8_\b1 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+382 };\n 383\n-_\b3_\b8_\b5 _\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const _\bU_\bn_\bi_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> _\bD_\bp_\bo_\bs_\be = boost::\n-none,\n-386 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> _\bD_\bp_\bo_\bi_\bn_\bt = boost::none) const {\n-387 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt(pw, _\bD_\bp_\bo_\bs_\be, _\bD_\bp_\bo_\bi_\bn_\bt);\n-388 }\n-389\n-393\n-_\b3_\b9_\b5 size_t _\bd_\bi_\bm() const {\n-396 return 6;\n-397 }\n-398\n-_\b4_\b0_\b0 static size_t _\bD_\bi_\bm() {\n-401 return 6;\n-402 }\n-403\n-_\b4_\b0_\b5 _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector6& d) const {\n-406 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be()._\br_\be_\bt_\br_\ba_\bc_\bt(d), K_);\n-407 }\n-408\n-_\b4_\b1_\b0 Vector6 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be& p) const {\n-411 return _\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be()._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(p.Base::pose());\n-412 }\n-413\n-_\b4_\b1_\b5 static _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n-416 return _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be(); // assumes that the default constructor is valid\n-417 }\n-418\n-_\b4_\b2_\b0 Matrix34 _\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx() const {\n-421 Matrix34 P = Matrix34(_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be().inverse().matrix().block(0, 0, 3,\n-4));\n-422 return K_->K() * P;\n-423 }\n-424\n-_\b4_\b2_\b6 Vector _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba() const {\n-427 return Eigen::Matrix::dimension,1>::Constant(2.0 *\n-K_->fx());;\n-428 }\n-430\n-431private:\n-432\n-_\b4_\b3_\b4 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-435 template\n-436 void serialize(Archive & ar, const unsigned int /*version*/) {\n-437 ar\n-438 & boost::serialization::make_nvp(\"PinholeBaseK\",\n-439 boost::serialization::base_object(*this));\n-440 ar & BOOST_SERIALIZATION_NVP(K_);\n-441 }\n-442\n-443public:\n-444 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-445};\n-446// end of class PinholePose\n-447\n-448template\n-_\b4_\b4_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be > : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd<\n-450 PinholePose > {\n-451};\n-452\n-453template\n-_\b4_\b5_\b4struct _\bt_\br_\ba_\bi_\bt_\bs > : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd<\n-455 PinholePose > {\n-456};\n-457\n-458} // \\ gtsam\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n-Calibrated camera for which only pose is unknown.\n-_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-2D Point\n+384} // \\namespace gtsam\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n+Variable ordering for the elimination algorithm.\n+_\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\n+Maps global variable indices to slot indices.\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bt_\bm_\bl\n+string html(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n+const DiscreteValues::Names &names)\n+Free version of html.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+Errors operator+(const Errors &a, const Errors &b)\n+Addition.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point2 operator*(double s, const Point2 &p)\n+multiply with scalar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n+double dot(const V1 &a, const V2 &b)\n+Dot product.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+Errors operator-(const Errors &a, const Errors &b)\n+Subtraction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:75\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-TangentVector localCoordinates(const Class &g) const\n-localCoordinates as required by manifold concept: finds tangent vector between\n-*this and g\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n-Both ManifoldTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n-Give fixed size dimension of a type, fails at compile time if dynamic.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be\n-A pinhole camera class that has a Pose3, functions as base class for all\n-pinhole cameras.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bp_\bo_\bs_\be\n-static Matrix26 Dpose(const Point2 &pn, double d)\n-Calculate Jacobian with respect to pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"PinholeBase\") const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bS_\ba_\bf_\be\n-std::pair< Point2, bool > projectSafe(const Point3 &pw) const\n-Project a point into the image and check depth.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\bo_\bs_\be\n-const Pose3 & pose() const\n-return pose, constant version\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl_\bP_\bo_\bs_\be\n-static Pose3 LevelPose(const Pose2 &pose2, double height)\n-Create a level pose at the given 2D pose and height.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const PinholeBase &camera, double tol=1e-9) const\n-assert equality up to a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bD_\bp_\bo_\bi_\bn_\bt\n-static Matrix23 Dpoint(const Point2 &pn, double d, const Matrix3 &Rt)\n-Calculate Jacobian with respect to point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bB_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt_\bF_\br_\bo_\bm_\bC_\ba_\bm_\be_\br_\ba\n-static Point3 BackprojectFromCamera(const Point2 &p, const double depth,\n-OptionalJacobian< 3, 2 > Dpoint=boost::none, OptionalJacobian< 3, 1 >\n-Ddepth=boost::none)\n-backproject a 2-dimensional point to a 3-dimensional point at given depth\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt_\bP_\bo_\bs_\be\n-static Pose3 LookatPose(const Point3 &eye, const Point3 &target, const Point3\n-&upVector)\n-Create a camera pose at the given eye position looking at a target point in the\n-scene with the specif...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n-Point2 project2(const Point3 &point, OptionalJacobian< 2, 6 > Dpose=boost::\n-none, OptionalJacobian< 2, 3 > Dpoint=boost::none) const\n-Project point into the image Throws a CheiralityException if point behind image\n-plane iff GTSAM_THROW...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.cpp:116\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba\n-A Calibrated camera class [R|-R't], calibration K=I.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CalibratedCamera.h:247\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK\n-A pinhole camera class that has a Pose3 and a fixed Calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const CalibratedCamera &camera, OptionalJacobian< 1, 6 >\n-Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const\n-Calculate range to a CalibratedCamera.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:202\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n-Point2 project(const Unit3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n-OptionalJacobian< 2, 2 > Dpoint=boost::none, OptionalJacobian< 2, DimK >\n-Dcal=boost::none) const\n-project a point at infinity from world coordinates into the image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:132\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n-Point2 project(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n-OptionalJacobian< 2, 3 > Dpoint=boost::none, OptionalJacobian< 2, DimK >\n-Dcal=boost::none) const\n-project a 3D point from world coordinates into the image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\bS_\ba_\bf_\be\n-std::pair< Point2, bool > projectSafe(const Point3 &pw) const\n-Project a point into the image and check depth.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK\n-PinholeBaseK()\n-default constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const Point3 &point, OptionalJacobian< 1, 6 > Dcamera=boost::none,\n-OptionalJacobian< 1, 3 > Dpoint=boost::none) const\n-Calculate range to a landmark.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:181\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-virtual const CALIBRATION & calibration() const =0\n-return calibration\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n-Point2 reprojectionError(const Point3 &pw, const Point2 &measured,\n-OptionalJacobian< 2, 6 > Dpose=boost::none, OptionalJacobian< 2, 3 >\n-Dpoint=boost::none, OptionalJacobian< 2, DimK > Dcal=boost::none) const\n-project a 3D point from world coordinates into the image\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:125\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK\n-PinholeBaseK(const Pose3 &pose)\n-constructor with pose\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt\n-Point3 backproject(const Point2 &p, double depth, OptionalJacobian< 3, 6 >\n-Dresult_dpose=boost::none, OptionalJacobian< 3, 2 > Dresult_dp=boost::none,\n-OptionalJacobian< 3, 1 > Dresult_ddepth=boost::none, OptionalJacobian< 3, DimK\n-> Dresult_dcal=boost::none) const\n-backproject a 2-dimensional point to a 3-dimensional point at given depth\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:139\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const PinholeBaseK< CalibrationB > &camera, OptionalJacobian< 1, 6\n-> Dcamera=boost::none, OptionalJacobian< 1, 6 > Dother=boost::none) const\n-Calculate range to a PinholePoseK derived class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:213\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\bb_\ba_\bc_\bk_\bp_\br_\bo_\bj_\be_\bc_\bt_\bP_\bo_\bi_\bn_\bt_\bA_\bt_\bI_\bn_\bf_\bi_\bn_\bi_\bt_\by\n-Unit3 backprojectPointAtInfinity(const Point2 &p) const\n-backproject a 2-dimensional point to a 3-dimensional point at infinity\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:170\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:222\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\b__\bp_\br_\bo_\bj_\be_\bc_\bt\n-Point2 _project(const POINT &pw, OptionalJacobian< 2, 6 > Dpose,\n-OptionalJacobian< 2, FixedDimension< POINT >::value > Dpoint, OptionalJacobian<\n-2, DimK > Dcal) const\n-Templated projection of a point (possibly at infinity) from world coordinate to\n-the image.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bB_\ba_\bs_\be_\bK_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const Pose3 &pose, OptionalJacobian< 1, 6 > Dcamera=boost::none,\n-OptionalJacobian< 1, 6 > Dpose=boost::none) const\n-Calculate range to another pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n-A pinhole camera class that has a Pose3 and a fixed Calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:243\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bL_\bo_\bo_\bk_\ba_\bt\n-static PinholePose Lookat(const Point3 &eye, const Point3 &target, const Point3\n-&upVector, const boost::shared_ptr< CALIBRATION > &K=boost::make_shared<\n-CALIBRATION >())\n-Create a camera at the given eye position looking at a target point in the\n-scene with the specified u...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:303\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n-PinholePose()\n-default constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx\n-Matrix34 cameraProjectionMatrix() const\n-for Linear Triangulation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:420\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n-Point2 project2(const Unit3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n-OptionalJacobian< 2, 2 > Dpoint=boost::none) const\n-project2 version for point at infinity\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:385\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-const CALIBRATION & calibration() const override\n-return calibration\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:370\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba\n-Vector defaultErrorWhenTriangulatingBehindCamera() const\n-for Nonlinear Triangulation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:426\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b<_\b<\n-friend std::ostream & operator<<(std::ostream &os, const PinholePose &camera)\n-stream operator\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:339\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static PinholePose Identity()\n-for Canonical\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:415\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n-PinholePose(const Vector &v, const Vector &K)\n-Init from Vector and calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:319\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-const boost::shared_ptr< CALIBRATION > & sharedCalibration() const\n-return shared pointer to calibration\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:365\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:395\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n-Point2 project2(const Point3 &pw, OptionalJacobian< 2, 6 > Dpose=boost::none,\n-OptionalJacobian< 2, 3 > Dpoint=boost::none) const\n-project a point from world coordinate to the image, 2 derivatives only\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:379\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-PinholePose retract(const Vector6 &d) const\n-move a cameras according to d\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:405\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n-PinholePose(const Vector &v)\n-Init from 6D vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:314\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n-PinholePose(const Pose3 &pose, const boost::shared_ptr< CALIBRATION > &K)\n-constructor with pose and calibration\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:269\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:434\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const Base &camera, double tol=1e-9) const\n-assert equality up to a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:333\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"PinholePose\") const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:349\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl\n-static PinholePose Level(const boost::shared_ptr< CALIBRATION > &K, const Pose2\n-&pose2, double height)\n-Create a level camera at the given 2D pose and height.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:284\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be\n-PinholePose(const Pose3 &pose)\n-constructor with pose, uses default calibration\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:264\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bL_\be_\bv_\be_\bl\n-static PinholePose Level(const Pose2 &pose2, double height)\n-PinholePose::level with default calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:290\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-Vector6 localCoordinates(const PinholePose &p) const\n-return canonical coordinate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholePose.h:410\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-A 2D pose (Point2,Rot2)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bF_\br_\bo_\bm\n-Point3 transformFrom(const Point3 &point, OptionalJacobian< 3, 6 >\n-Hself=boost::none, OptionalJacobian< 3, 3 > Hpoint=boost::none) const\n-takes point in Pose coordinates and transforms it to world coordinates\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:347\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\ba_\bn_\bg_\be\n-double range(const Point3 &point, OptionalJacobian< 1, 6 > Hself=boost::none,\n-OptionalJacobian< 1, 3 > Hpoint=boost::none) const\n-Calculate range to a landmark.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:399\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n-const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n-get translation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:308\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n-get rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:315\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\be\n-Point3 rotate(const Point3 &p, OptionalJacobian< 3, 3 > H1=boost::none,\n-OptionalJacobian< 3, 3 > H2=boost::none) const\n-rotate point from rotated coordinate frame to world\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:149\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\br_\bp_\by\n-Vector3 rpy(OptionalJacobian< 3, 3 > H=boost::none) const\n-Use RQ to calculate roll-pitch-yaw angle representation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.cpp:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n+Scatter is an intermediate data structure used when building a HessianFactor\n+incrementally,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+value_type KeyValuePair\n+Typedef to pair\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bn_\bd\n+const_iterator end() const\n+Iterator over variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:239\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n+Values::value_type value_type\n+Typedef to pair\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+Values::const_iterator const_iterator\n+Const iterator over vector values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bn_\bd\n+iterator end()\n+Iterator over variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:238\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+Values::iterator iterator\n+Iterator over vector values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n+iterator insert(Key j, const Vector &value)\n+Insert a vector value with key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:197\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues(const CONTAINER &c)\n+Create from another container holding pair.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bv_\ba_\bl_\bu_\be_\bs_\b_\n+Values values_\n+Vectors making up this VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bD_\bi_\bm_\bs\n+std::map< Key, size_t > Dims\n+Keyed vector dimensions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+ConcurrentMap< Key, Vector > Values\n+Collection of Vectors making up a VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+Vector & operator[](Key j)\n+Read/write access to the vector value with key j, throws std::out_of_range if j\n+does not exist,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:163\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bm_\bp_\bl_\ba_\bc_\be\n+std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)\n+Emplace a vector value with key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:185\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bf_\bi_\bn_\bd\n+iterator find(Key j)\n+Return the iterator corresponding to the requested key, or end() if no variable\n+is present with this ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:245\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bd_\bi_\bm\n+size_t dim(Key j) const\n+Return the dimension of variable j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+Number of variables stored.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n+const Vector & operator[](Key j) const\n+Access the vector value with key j (const version), throws std::out_of_range if\n+j does not exist,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n+bool exists(Key j) const\n+Check whether a variable with key j exists.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:133\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues()\n+Default constructor creates an empty VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bf_\bi_\bn_\bd\n+const_iterator find(Key j) const\n+Return the iterator corresponding to the requested key, or end() if no variable\n+is present with this ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:251\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues(ITERATOR first, ITERATOR last)\n+Create from a pair of iterators over pair.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+const Vector & at(Key j) const\n+Access the vector value with key j (const version), throws std::out_of_range if\n+j does not exist,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+Vector vector(const CONTAINER &keys) const\n+Access a vector that is a subset of relevant keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:272\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn\n+void insert_or_assign(Key j, const Vector &value)\n+insert_or_assign that mimics the STL map insert_or_assign - if the value\n+already exists,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+const_iterator begin() const\n+Iterator over variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:237\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+Vector & at(Key j)\n+Read/write access to the vector value with key j, throws std::out_of_range if j\n+does not exist,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:139\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\br_\ba_\bs_\be\n+void erase(Key var)\n+Erase the vector with the given key, or throw std::out_of_range if it does not\n+exist.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:226\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues(std::initializer_list< std::pair< Key, Vector > > init)\n+Construct from initializer list.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bt_\br_\by_\bI_\bn_\bs_\be_\br_\bt\n+std::pair< iterator, bool > tryInsert(Key j, const Vector &value)\n+insert that mimics the STL map insert - if the value already exists, the map is\n+not modified and an i...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:209\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues(const VectorValues &c)\n+Implicit copy constructor to specialize the explicit constructor from any\n+container.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bb_\be_\bg_\bi_\bn\n+iterator begin()\n+Iterator over variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:236\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n+A key-value pair, which you get by dereferencing iterators.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:93\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bP_\bo_\bs_\be_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00380_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00434_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n
Cal3Unified.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n@@ -212,13 +212,13 @@\n
double xi() const
mirror parameter
Definition Cal3Unified.h:96
\n
static size_t Dim()
Return dimensions of calibration manifold object.
Definition Cal3Unified.h:136
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00392_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00413_source.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SphericalCamera.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SphericalCamera.h
\n+
Rot2.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <gtsam/base/Manifold.h>
\n-\n-
23#include <gtsam/base/concepts.h>
\n-
24#include <gtsam/dllexport.h>
\n-\n-\n-
27#include <gtsam/geometry/Unit3.h>
\n-
28
\n-
29#include <boost/serialization/nvp.hpp>
\n-
30
\n-
31namespace gtsam {
\n-
32
\n-
\n-
40class GTSAM_EXPORT EmptyCal {
\n-
41 public:
\n-
42 enum { dimension = 0 };
\n-
43 EmptyCal() {}
\n-
44 virtual ~EmptyCal() = default;
\n-
45 using shared_ptr = boost::shared_ptr<EmptyCal>;
\n+
20#pragma once
\n+
21
\n+\n+
23#include <gtsam/base/Lie.h>
\n+
24#include <boost/optional.hpp>
\n+
25
\n+
26#include <random>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
\n+
36 class GTSAM_EXPORT Rot2 : public LieGroup<Rot2, 1> {
\n+
37
\n+
39 double c_, s_;
\n+
40
\n+
42 Rot2& normalize();
\n+
43
\n+
45 inline Rot2(double c, double s) : c_(c), s_(s) {}
\n
46
\n-
48 inline static size_t Dim() { return dimension; }
\n-
49
\n-
50 void print(const std::string& s) const {
\n-
51 std::cout << "empty calibration: " << s << std::endl;
\n-
52 }
\n-
53
\n-
54 private:
\n-
56 friend class boost::serialization::access;
\n-
57 template <class Archive>
\n-
58 void serialize(Archive& ar, const unsigned int /*version*/) {
\n-
59 ar& boost::serialization::make_nvp(
\n-
60 "EmptyCal", boost::serialization::base_object<EmptyCal>(*this));
\n-
61 }
\n-
62};
\n-
\n-
63
\n-
\n-
70class GTSAM_EXPORT SphericalCamera {
\n-
71 public:
\n-
72 enum { dimension = 6 };
\n-
73
\n-
74 using Measurement = Unit3;
\n-
75 using MeasurementVector = std::vector<Unit3>;
\n-\n-
77
\n-
78 private:
\n-
79 Pose3 pose_;
\n-
80
\n-
81 protected:
\n-
82 EmptyCal::shared_ptr emptyCal_;
\n-
83
\n-
84 public:
\n+
47 public:
\n+
48
\n+
51
\n+
53 Rot2() : c_(1.0), s_(0.0) {}
\n+
54
\n+
56 Rot2(const Rot2& r) : Rot2(r.c_, r.s_) {}
\n+
57
\n+
59 Rot2(double theta) : c_(cos(theta)), s_(sin(theta)) {}
\n+
60
\n+
\n+
62 static Rot2 fromAngle(double theta) {
\n+
63 return Rot2(theta);
\n+
64 }
\n+
\n+
65
\n+
\n+
67 static Rot2 fromDegrees(double theta) {
\n+
68 static const double degree = M_PI / 180;
\n+
69 return fromAngle(theta * degree);
\n+
70 }
\n+
\n+
71
\n+
73 static Rot2 fromCosSin(double c, double s);
\n+
74
\n+
82 static Rot2 relativeBearing(const Point2& d, OptionalJacobian<1,2> H =
\n+
83 boost::none);
\n+
84
\n+
86 static Rot2 atan2(double y, double x);
\n
87
\n-
\n-\n-
90 : pose_(Pose3()), emptyCal_(boost::make_shared<EmptyCal>()) {}
\n-
\n-
91
\n-
\n-
93 explicit SphericalCamera(const Pose3& pose)
\n-
94 : pose_(pose), emptyCal_(boost::make_shared<EmptyCal>()) {}
\n-
\n+
94 static Rot2 Random(std::mt19937 & rng);
\n
95
\n-
\n-
97 explicit SphericalCamera(const Pose3& pose,
\n-
98 const EmptyCal::shared_ptr& cal)
\n-
99 : pose_(pose), emptyCal_(cal) {}
\n-
\n-
100
\n-
104 explicit SphericalCamera(const Vector& v) : pose_(Pose3::Expmap(v)) {}
\n+
99
\n+
101 void print(const std::string& s = "theta") const;
\n+
102
\n+
104 bool equals(const Rot2& R, double tol = 1e-9) const;
\n
105
\n-
107 virtual ~SphericalCamera() = default;
\n-
108
\n-
\n-
110 const EmptyCal::shared_ptr& sharedCalibration() const {
\n-
111 return emptyCal_;
\n-
112 }
\n-
\n-
113
\n-
115 const EmptyCal& calibration() const { return *emptyCal_; }
\n-
116
\n+
109
\n+
111 inline static Rot2 Identity() { return Rot2(); }
\n+
112
\n+
114 Rot2 inverse() const { return Rot2(c_, -s_);}
\n+
115
\n+
\n+
117 Rot2 operator*(const Rot2& R) const {
\n+
118 return fromCosSin(c_ * R.c_ - s_ * R.s_, s_ * R.c_ + c_ * R.s_);
\n+
119 }
\n+
\n
120
\n-
122 bool equals(const SphericalCamera& camera, double tol = 1e-9) const;
\n-
123
\n-
125 virtual void print(const std::string& s = "SphericalCamera") const;
\n-
126
\n+
124
\n+
126 static Rot2 Expmap(const Vector1& v, ChartJacobian H = boost::none);
\n+
127
\n+
129 static Vector1 Logmap(const Rot2& r, ChartJacobian H = boost::none);
\n
130
\n-
132 const Pose3& pose() const { return pose_; }
\n+
132 Matrix1 AdjointMap() const { return I_1x1; }
\n
133
\n-
135 const Rot3& rotation() const { return pose_.rotation(); }
\n-
136
\n-
138 const Point3& translation() const { return pose_.translation(); }
\n-
139
\n-
140 // /// return pose, with derivative
\n-
141 // const Pose3& getPose(OptionalJacobian<6, 6> H) const;
\n-
142
\n-
146
\n-
148 std::pair<Unit3, bool> projectSafe(const Point3& pw) const;
\n-
149
\n-
155 Unit3 project2(const Point3& pw, OptionalJacobian<2, 6> Dpose = boost::none,
\n-
156 OptionalJacobian<2, 3> Dpoint = boost::none) const;
\n-
157
\n-
163 Unit3 project2(const Unit3& pwu, OptionalJacobian<2, 6> Dpose = boost::none,
\n-
164 OptionalJacobian<2, 2> Dpoint = boost::none) const;
\n+
\n+
135 static Matrix ExpmapDerivative(const Vector& /*v*/) {
\n+
136 return I_1x1;
\n+
137 }
\n+
\n+
138
\n+
\n+
140 static Matrix LogmapDerivative(const Vector& /*v*/) {
\n+
141 return I_1x1;
\n+
142 }
\n+
\n+
143
\n+
144 // Chart at origin simply uses exponential map and its inverse
\n+
\n+\n+
146 static Rot2 Retract(const Vector1& v, ChartJacobian H = boost::none) {
\n+
147 return Expmap(v, H);
\n+
148 }
\n+
149 static Vector1 Local(const Rot2& r, ChartJacobian H = boost::none) {
\n+
150 return Logmap(r, H);
\n+
151 }
\n+
152 };
\n+
\n+
153
\n+
154 using LieGroup<Rot2, 1>::inverse; // version with derivative
\n+
155
\n+
159
\n+
163 Point2 rotate(const Point2& p, OptionalJacobian<2, 1> H1 = boost::none,
\n+
164 OptionalJacobian<2, 2> H2 = boost::none) const;
\n
165
\n-
167 Point3 backproject(const Unit3& p, const double depth) const;
\n-
168
\n-
170 Unit3 backprojectPointAtInfinity(const Unit3& p) const;
\n-
171
\n-
177 Unit3 project(const Point3& point, OptionalJacobian<2, 6> Dpose = boost::none,
\n-
178 OptionalJacobian<2, 3> Dpoint = boost::none) const;
\n-
179
\n-
184 Vector2 reprojectionError(const Point3& point, const Unit3& measured,
\n-
185 OptionalJacobian<2, 6> Dpose = boost::none,
\n-
186 OptionalJacobian<2, 3> Dpoint = boost::none) const;
\n-
188
\n-
\n-
190 SphericalCamera retract(const Vector6& d) const {
\n-
191 return SphericalCamera(pose().retract(d));
\n-
192 }
\n-
\n-
193
\n-
\n-
195 Vector6 localCoordinates(const SphericalCamera& p) const {
\n-
196 return pose().localCoordinates(p.pose());
\n-
197 }
\n-
\n-
198
\n-
\n-\n-
201 return SphericalCamera(
\n-
202 Pose3::Identity()); // assumes that the default constructor is valid
\n-
203 }
\n-
\n-
204
\n-
\n-
206 Matrix34 cameraProjectionMatrix() const {
\n-
207 return Matrix34(pose_.inverse().matrix().block(0, 0, 3, 4));
\n-
208 }
\n+
\n+
167 inline Point2 operator*(const Point2& p) const {
\n+
168 return rotate(p);
\n+
169 }
\n+
\n+
170
\n+
174 Point2 unrotate(const Point2& p, OptionalJacobian<2, 1> H1 = boost::none,
\n+
175 OptionalJacobian<2, 2> H2 = boost::none) const;
\n+
176
\n+
180
\n+
\n+
182 inline Point2 unit() const {
\n+
183 return Point2(c_, s_);
\n+
184 }
\n+
\n+
185
\n+
\n+
187 double theta() const {
\n+
188 return ::atan2(s_, c_);
\n+
189 }
\n+
\n+
190
\n+
\n+
192 double degrees() const {
\n+
193 const double degree = M_PI / 180;
\n+
194 return theta() / degree;
\n+
195 }
\n+
\n+
196
\n+
\n+
198 inline double c() const {
\n+
199 return c_;
\n+
200 }
\n+
\n+
201
\n+
\n+
203 inline double s() const {
\n+
204 return s_;
\n+
205 }
\n
\n+
206
\n+
208 Matrix2 matrix() const;
\n
209
\n-
\n-\n-
212 return Eigen::Matrix<double, traits<Point2>::dimension, 1>::Constant(0.0);
\n-
213 }
\n-
\n-
214
\n-
216 size_t dim() const { return 6; }
\n-
217
\n-
219 static size_t Dim() { return 6; }
\n-
220
\n-
221 private:
\n-
223 friend class boost::serialization::access;
\n-
224 template <class Archive>
\n-
225 void serialize(Archive& ar, const unsigned int /*version*/) {
\n-
226 ar& BOOST_SERIALIZATION_NVP(pose_);
\n-
227 }
\n-
228
\n-
229 public:
\n-\n-
231};
\n-
\n-
232// end of class SphericalCamera
\n-
233
\n-
234template <>
\n-
235struct traits<SphericalCamera> : public internal::LieGroup<Pose3> {};
\n-
236
\n-
237template <>
\n-
238struct traits<const SphericalCamera> : public internal::LieGroup<Pose3> {};
\n-
239
\n-
240} // namespace gtsam
\n-
Base class and basic functions for Manifold types.
\n-
Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Bearing-Range product.
\n-
3D Pose
\n+
211 Matrix2 transpose() const;
\n+
212
\n+
214 static Rot2 ClosestTo(const Matrix2& M);
\n+
215
\n+
216 private:
\n+
218 friend class boost::serialization::access;
\n+
219 template<class ARCHIVE>
\n+
220 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
221 ar & BOOST_SERIALIZATION_NVP(c_);
\n+
222 ar & BOOST_SERIALIZATION_NVP(s_);
\n+
223 }
\n+
224
\n+
225 };
\n+
\n+
226
\n+
227 template<>
\n+
228 struct traits<Rot2> : public internal::LieGroup<Rot2> {};
\n+
229
\n+
230 template<>
\n+
231 struct traits<const Rot2> : public internal::LieGroup<Rot2> {};
\n+
232
\n+
233} // gtsam
\n+
Base class and basic functions for Lie types.
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n-
gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > make_shared(Args &&... args)
Add our own make_shared as a layer of wrapping on boost::make_shared This solves the problem with the...
Definition make_shared.h:57
\n-
Point2_ project(const Point3_ &p_cam)
Expression version of PinholeBase::Project.
Definition expressions.h:131
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n+
Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)
normalize, with optional Jacobian
Definition Point3.cpp:52
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get translation
Definition Pose3.cpp:308
\n-
Matrix4 matrix() const
convert to 4*4 matrix
Definition Pose3.cpp:323
\n-
Pose3 inverse() const
inverse transformation with derivatives
Definition Pose3.cpp:49
\n-
const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get rotation
Definition Pose3.cpp:315
\n-
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
Empty calibration.
Definition SphericalCamera.h:40
\n-
static size_t Dim()
return DOF, dimensionality of tangent space
Definition SphericalCamera.h:48
\n-
A spherical camera class that has a Pose3 and measures bearing vectors.
Definition SphericalCamera.h:70
\n-
const EmptyCal::shared_ptr & sharedCalibration() const
return shared pointer to calibration
Definition SphericalCamera.h:110
\n-
static size_t Dim()
Definition SphericalCamera.h:219
\n-
SphericalCamera(const Pose3 &pose)
Constructor with pose.
Definition SphericalCamera.h:93
\n-
virtual ~SphericalCamera()=default
Default destructor.
\n-
Matrix34 cameraProjectionMatrix() const
for Linear Triangulation
Definition SphericalCamera.h:206
\n-
Vector6 localCoordinates(const SphericalCamera &p) const
return canonical coordinate
Definition SphericalCamera.h:195
\n-
const Rot3 & rotation() const
get rotation
Definition SphericalCamera.h:135
\n-
const Pose3 & pose() const
return pose, constant version
Definition SphericalCamera.h:132
\n-
const Point3 & translation() const
get translation
Definition SphericalCamera.h:138
\n-
SphericalCamera retract(const Vector6 &d) const
move a cameras according to d
Definition SphericalCamera.h:190
\n-
const EmptyCal & calibration() const
return calibration
Definition SphericalCamera.h:115
\n-
size_t dim() const
Definition SphericalCamera.h:216
\n-
static SphericalCamera Identity()
for Canonical
Definition SphericalCamera.h:200
\n-
SphericalCamera()
Default constructor.
Definition SphericalCamera.h:89
\n-
Vector defaultErrorWhenTriangulatingBehindCamera() const
for Nonlinear Triangulation
Definition SphericalCamera.h:211
\n-
SphericalCamera(const Pose3 &pose, const EmptyCal::shared_ptr &cal)
Constructor with empty intrinsics (needed for smart factors)
Definition SphericalCamera.h:97
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.
Definition Rot2.h:36
\n+
Rot2 operator*(const Rot2 &R) const
Compose - make a new rotation by adding angles.
Definition Rot2.h:117
\n+
double c() const
return cos
Definition Rot2.h:198
\n+
static Matrix ExpmapDerivative(const Vector &)
Left-trivialized derivative of the exponential map.
Definition Rot2.h:135
\n+
Point2 unit() const
Creates a unit vector as a Point2.
Definition Rot2.h:182
\n+
double theta() const
return angle (RADIANS)
Definition Rot2.h:187
\n+
Rot2 inverse() const
The inverse rotation - negative angle.
Definition Rot2.h:114
\n+
Point2 operator*(const Point2 &p) const
syntactic sugar for rotate
Definition Rot2.h:167
\n+
double s() const
return sin
Definition Rot2.h:203
\n+
static Rot2 Identity()
Identity.
Definition Rot2.h:111
\n+
double degrees() const
return angle (DEGREES)
Definition Rot2.h:192
\n+
static Matrix LogmapDerivative(const Vector &)
Left-trivialized derivative inverse of the exponential map.
Definition Rot2.h:140
\n+
Matrix1 AdjointMap() const
Calculate Adjoint map.
Definition Rot2.h:132
\n+
Rot2(double theta)
Constructor from angle in radians == exponential map at identity.
Definition Rot2.h:59
\n+
static Rot2 fromDegrees(double theta)
Named constructor from angle in degrees.
Definition Rot2.h:67
\n+
Rot2()
default constructor, zero rotation
Definition Rot2.h:53
\n+
Rot2(const Rot2 &r)
copy constructor
Definition Rot2.h:56
\n+
static Rot2 fromAngle(double theta)
Named constructor from angle in radians.
Definition Rot2.h:62
\n+
Definition Rot2.h:145
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,323 +1,277 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SphericalCamera.h\n+Rot2.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh>\n-23#include \n-24#include \n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-27#include \n-28\n-29#include \n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32\n-_\b4_\b0class GTSAM_EXPORT _\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl {\n-41 public:\n-42 enum { dimension = 0 };\n-43 _\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl() {}\n-44 virtual _\b~_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl() = default;\n-45 using shared_ptr = boost::shared_ptr;\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+24#include \n+25\n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+_\b3_\b6 class GTSAM_EXPORT _\bR_\bo_\bt_\b2 : public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n+37\n+39 double c_, s_;\n+40\n+42 _\bR_\bo_\bt_\b2& _\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be();\n+43\n+45 inline _\bR_\bo_\bt_\b2(double c, double s) : c_(c), s_(s) {}\n 46\n-_\b4_\b8 inline static size_t _\bD_\bi_\bm() { return dimension; }\n-49\n-50 void _\bp_\br_\bi_\bn_\bt(const std::string& s) const {\n-51 std::cout << \"empty calibration: \" << s << std::endl;\n-52 }\n-53\n-54 private:\n-_\b5_\b6 friend class boost::serialization::access;\n-57 template \n-58 void serialize(Archive& ar, const unsigned int /*version*/) {\n-59 ar& boost::serialization::make_nvp(\n-60 \"EmptyCal\", boost::serialization::base_object(*this));\n-61 }\n-62};\n-63\n-_\b7_\b0class GTSAM_EXPORT _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba {\n-71 public:\n-72 enum { dimension = 6 };\n-73\n-74 using _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt = _\bU_\bn_\bi_\bt_\b3;\n-75 using MeasurementVector = std::vector;\n-76 using _\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be = _\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl;\n-77\n-78 private:\n-79 _\bP_\bo_\bs_\be_\b3 pose_;\n-80\n-81 protected:\n-82 EmptyCal::shared_ptr emptyCal_;\n-83\n-84 public:\n+47 public:\n+48\n+51\n+_\b5_\b3 _\bR_\bo_\bt_\b2() : c_(1.0), s_(0.0) {}\n+54\n+_\b5_\b6 _\bR_\bo_\bt_\b2(const _\bR_\bo_\bt_\b2& r) : _\bR_\bo_\bt_\b2(r.c_, r.s_) {}\n+57\n+_\b5_\b9 _\bR_\bo_\bt_\b2(double theta) : c_(cos(theta)), s_(sin(theta)) {}\n+60\n+_\b6_\b2 static _\bR_\bo_\bt_\b2 _\bf_\br_\bo_\bm_\bA_\bn_\bg_\bl_\be(double theta) {\n+63 return _\bR_\bo_\bt_\b2(theta);\n+64 }\n+65\n+_\b6_\b7 static _\bR_\bo_\bt_\b2 _\bf_\br_\bo_\bm_\bD_\be_\bg_\br_\be_\be_\bs(double theta) {\n+68 static const double degree = M_PI / 180;\n+69 return fromAngle(theta * degree);\n+70 }\n+71\n+73 static _\bR_\bo_\bt_\b2 fromCosSin(double c, double s);\n+74\n+82 static _\bR_\bo_\bt_\b2 relativeBearing(const _\bP_\bo_\bi_\bn_\bt_\b2& d, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b2_\b> H =\n+83 boost::none);\n+84\n+86 static _\bR_\bo_\bt_\b2 atan2(double y, double x);\n 87\n-_\b8_\b9 _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba()\n-90 : pose_(_\bP_\bo_\bs_\be_\b3()), emptyCal_(boost::_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd<_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl>()) {}\n-91\n-_\b9_\b3 explicit _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& pose)\n-94 : pose_(pose), emptyCal_(boost::_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd<_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl>()) {}\n+94 static _\bR_\bo_\bt_\b2 Random(std::mt19937 & rng);\n 95\n-_\b9_\b7 explicit _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& pose,\n-98 const EmptyCal::shared_ptr& cal)\n-99 : pose_(pose), emptyCal_(cal) {}\n-100\n-104 explicit _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba(const Vector& v) : pose_(_\bP_\bo_\bs_\be_\b3::Expmap(v)) {}\n+99\n+101 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"theta\") const;\n+102\n+104 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bR_\bo_\bt_\b2& R, double tol = 1e-9) const;\n 105\n-_\b1_\b0_\b7 virtual _\b~_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba() = default;\n-108\n-_\b1_\b1_\b0 const EmptyCal::shared_ptr& _\bs_\bh_\ba_\br_\be_\bd_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n-111 return emptyCal_;\n-112 }\n-113\n-_\b1_\b1_\b5 const _\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const { return *emptyCal_; }\n-116\n+109\n+_\b1_\b1_\b1 inline static _\bR_\bo_\bt_\b2 _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() { return _\bR_\bo_\bt_\b2(); }\n+112\n+_\b1_\b1_\b4 _\bR_\bo_\bt_\b2 _\bi_\bn_\bv_\be_\br_\bs_\be() const { return _\bR_\bo_\bt_\b2(c_, -s_);}\n+115\n+_\b1_\b1_\b7 _\bR_\bo_\bt_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bR_\bo_\bt_\b2& R) const {\n+118 return fromCosSin(c_ * R.c_ - s_ * R.s_, s_ * R.c_ + c_ * R.s_);\n+119 }\n 120\n-122 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba& camera, double tol = 1e-9) const;\n-123\n-125 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"SphericalCamera\") const;\n-126\n+124\n+126 static _\bR_\bo_\bt_\b2 Expmap(const Vector1& v, ChartJacobian H = boost::none);\n+127\n+129 static Vector1 Logmap(const _\bR_\bo_\bt_\b2& r, ChartJacobian H = boost::none);\n 130\n-_\b1_\b3_\b2 const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be() const { return pose_; }\n+_\b1_\b3_\b2 Matrix1 _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const { return I_1x1; }\n 133\n-_\b1_\b3_\b5 const _\bR_\bo_\bt_\b3& _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn() const { return pose_._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn(); }\n-136\n-_\b1_\b3_\b8 const _\bP_\bo_\bi_\bn_\bt_\b3& _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn() const { return pose_._\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn(); }\n-139\n-140 // /// return pose, with derivative\n-141 // const Pose3& getPose(OptionalJacobian<6, 6> H) const;\n-142\n-146\n-148 std::pair projectSafe(const _\bP_\bo_\bi_\bn_\bt_\b3& pw) const;\n-149\n-155 _\bU_\bn_\bi_\bt_\b3 project2(const _\bP_\bo_\bi_\bn_\bt_\b3& pw, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose = boost::\n-none,\n-156 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none) const;\n-157\n-163 _\bU_\bn_\bi_\bt_\b3 project2(const _\bU_\bn_\bi_\bt_\b3& pwu, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose = boost::\n-none,\n-164 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dpoint = boost::none) const;\n+_\b1_\b3_\b5 static Matrix _\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const Vector& /*v*/) {\n+136 return I_1x1;\n+137 }\n+138\n+_\b1_\b4_\b0 static Matrix _\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const Vector& /*v*/) {\n+141 return I_1x1;\n+142 }\n+143\n+144 // Chart at origin simply uses exponential map and its inverse\n+_\b1_\b4_\b5 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n+146 static _\bR_\bo_\bt_\b2 Retract(const Vector1& v, ChartJacobian H = boost::none) {\n+147 return Expmap(v, H);\n+148 }\n+149 static Vector1 Local(const _\bR_\bo_\bt_\b2& r, ChartJacobian H = boost::none) {\n+150 return Logmap(r, H);\n+151 }\n+152 };\n+153\n+154 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bR_\bo_\bt_\b2, 1>::inverse; // version with derivative\n+155\n+159\n+163 _\bP_\bo_\bi_\bn_\bt_\b2 rotate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b1_\b> H1 = boost::none,\n+164 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> H2 = boost::none) const;\n 165\n-167 _\bP_\bo_\bi_\bn_\bt_\b3 backproject(const _\bU_\bn_\bi_\bt_\b3& p, const double depth) const;\n-168\n-170 _\bU_\bn_\bi_\bt_\b3 backprojectPointAtInfinity(const _\bU_\bn_\bi_\bt_\b3& p) const;\n-171\n-177 _\bU_\bn_\bi_\bt_\b3 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose = boost::\n-none,\n-178 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none) const;\n-179\n-184 Vector2 reprojectionError(const _\bP_\bo_\bi_\bn_\bt_\b3& point, const _\bU_\bn_\bi_\bt_\b3& measured,\n-185 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Dpose = boost::none,\n-186 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Dpoint = boost::none) const;\n-188\n-_\b1_\b9_\b0 _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector6& d) const {\n-191 return _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba(pose().retract(d));\n-192 }\n-193\n-_\b1_\b9_\b5 Vector6 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba& p) const {\n-196 return pose().localCoordinates(p._\bp_\bo_\bs_\be());\n-197 }\n-198\n-_\b2_\b0_\b0 static _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n-201 return _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba(\n-202 Pose3::Identity()); // assumes that the default constructor is valid\n-203 }\n-204\n-_\b2_\b0_\b6 Matrix34 _\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx() const {\n-207 return Matrix34(pose_._\bi_\bn_\bv_\be_\br_\bs_\be()._\bm_\ba_\bt_\br_\bi_\bx().block(0, 0, 3, 4));\n-208 }\n+_\b1_\b6_\b7 inline _\bP_\bo_\bi_\bn_\bt_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const {\n+168 return rotate(p);\n+169 }\n+170\n+174 _\bP_\bo_\bi_\bn_\bt_\b2 unrotate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b1_\b> H1 = boost::none,\n+175 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> H2 = boost::none) const;\n+176\n+180\n+_\b1_\b8_\b2 inline _\bP_\bo_\bi_\bn_\bt_\b2 _\bu_\bn_\bi_\bt() const {\n+183 return _\bP_\bo_\bi_\bn_\bt_\b2(c_, s_);\n+184 }\n+185\n+_\b1_\b8_\b7 double _\bt_\bh_\be_\bt_\ba() const {\n+188 return ::atan2(s_, c_);\n+189 }\n+190\n+_\b1_\b9_\b2 double _\bd_\be_\bg_\br_\be_\be_\bs() const {\n+193 const double degree = M_PI / 180;\n+194 return theta() / degree;\n+195 }\n+196\n+_\b1_\b9_\b8 inline double _\bc() const {\n+199 return c_;\n+200 }\n+201\n+_\b2_\b0_\b3 inline double _\bs() const {\n+204 return s_;\n+205 }\n+206\n+208 Matrix2 matrix() const;\n 209\n-_\b2_\b1_\b1 Vector _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba() const {\n-212 return Eigen::Matrix::dimension, 1>::Constant(0.0);\n-213 }\n-214\n-_\b2_\b1_\b6 size_t _\bd_\bi_\bm() const { return 6; }\n-217\n-_\b2_\b1_\b9 static size_t _\bD_\bi_\bm() { return 6; }\n-220\n-221 private:\n-_\b2_\b2_\b3 friend class boost::serialization::access;\n-224 template \n-225 void serialize(Archive& ar, const unsigned int /*version*/) {\n-226 ar& BOOST_SERIALIZATION_NVP(pose_);\n-227 }\n-228\n-229 public:\n-230 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-231};\n-232// end of class SphericalCamera\n-233\n-234template <>\n-_\b2_\b3_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-236\n-237template <>\n-_\b2_\b3_\b8struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-239\n-240} // namespace gtsam\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bT_\bh_\br_\be_\ba_\bd_\bs_\ba_\bf_\be_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\b._\bh\n-Base exception type that uses tbb_allocator if GTSAM is compiled with TBB.\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n-Bearing-Range product.\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n+211 Matrix2 transpose() const;\n+212\n+214 static _\bR_\bo_\bt_\b2 ClosestTo(const Matrix2& M);\n+215\n+216 private:\n+_\b2_\b1_\b8 friend class boost::serialization::access;\n+219 template\n+220 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+221 ar & BOOST_SERIALIZATION_NVP(c_);\n+222 ar & BOOST_SERIALIZATION_NVP(s_);\n+223 }\n+224\n+225 };\n+226\n+227 template<>\n+_\b2_\b2_\b8 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\bo_\bt_\b2> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+229\n+230 template<>\n+_\b2_\b3_\b1 struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+232\n+233} // gtsam\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd\n-gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::\n-shared_ptr< T > > make_shared(Args &&... args)\n-Add our own make_shared as a layer of wrapping on boost::make_shared This\n-solves the problem with the...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn make_shared.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n-Point2_ project(const Point3_ &p_cam)\n-Expression version of PinholeBase::Project.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn expressions.h:131\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be\n+Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)\n+normalize, with optional Jacobian\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:52\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+A CRTP helper class that implements Lie group methods Prerequisites: methods\n+operator*,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n Both LieGroupTraits and Testable.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n-const Point3 & translation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n-get translation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:308\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n-Matrix4 matrix() const\n-convert to 4*4 matrix\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:323\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n-Pose3 inverse() const\n-inverse transformation with derivatives\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n-get rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:315\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n-symbol GTSAM_USE_QUATERNIO...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl\n-Empty calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bm_\bp_\bt_\by_\bC_\ba_\bl_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-return DOF, dimensionality of tangent space\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n-A spherical camera class that has a Pose3 and measures bearing vectors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-const EmptyCal::shared_ptr & sharedCalibration() const\n-return shared pointer to calibration\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bD_\bi_\bm\n-static size_t Dim()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n-SphericalCamera(const Pose3 &pose)\n-Constructor with pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:93\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\b~_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n-virtual ~SphericalCamera()=default\n-Default destructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bM_\ba_\bt_\br_\bi_\bx\n-Matrix34 cameraProjectionMatrix() const\n-for Linear Triangulation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:206\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n-Vector6 localCoordinates(const SphericalCamera &p) const\n-return canonical coordinate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-const Rot3 & rotation() const\n-get rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\bo_\bs_\be\n-const Pose3 & pose() const\n-return pose, constant version\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:132\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn\n-const Point3 & translation() const\n-get translation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:138\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n-SphericalCamera retract(const Vector6 &d) const\n-move a cameras according to d\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:190\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n-const EmptyCal & calibration() const\n-return calibration\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:216\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static SphericalCamera Identity()\n-for Canonical\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:200\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n-SphericalCamera()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba\n-Vector defaultErrorWhenTriangulatingBehindCamera() const\n-for Nonlinear Triangulation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:211\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba\n-SphericalCamera(const Pose3 &pose, const EmptyCal::shared_ptr &cal)\n-Constructor with empty intrinsics (needed for smart factors)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SphericalCamera.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2\n+Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Rot2 operator*(const Rot2 &R) const\n+Compose - make a new rotation by adding angles.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bc\n+double c() const\n+return cos\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:198\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+static Matrix ExpmapDerivative(const Vector &)\n+Left-trivialized derivative of the exponential map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bu_\bn_\bi_\bt\n+Point2 unit() const\n+Creates a unit vector as a Point2.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:182\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bt_\bh_\be_\bt_\ba\n+double theta() const\n+return angle (RADIANS)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:187\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n+Rot2 inverse() const\n+The inverse rotation - negative angle.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point2 operator*(const Point2 &p) const\n+syntactic sugar for rotate\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bs\n+double s() const\n+return sin\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:203\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static Rot2 Identity()\n+Identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bd_\be_\bg_\br_\be_\be_\bs\n+double degrees() const\n+return angle (DEGREES)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:192\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n+static Matrix LogmapDerivative(const Vector &)\n+Left-trivialized derivative inverse of the exponential map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n+Matrix1 AdjointMap() const\n+Calculate Adjoint map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bR_\bo_\bt_\b2\n+Rot2(double theta)\n+Constructor from angle in radians == exponential map at identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bf_\br_\bo_\bm_\bD_\be_\bg_\br_\be_\be_\bs\n+static Rot2 fromDegrees(double theta)\n+Named constructor from angle in degrees.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bR_\bo_\bt_\b2\n+Rot2()\n+default constructor, zero rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bR_\bo_\bt_\b2\n+Rot2(const Rot2 &r)\n+copy constructor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bf_\br_\bo_\bm_\bA_\bn_\bg_\bl_\be\n+static Rot2 fromAngle(double theta)\n+Named constructor from angle in radians.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:145\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bp_\bh_\be_\br_\bi_\bc_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+ * _\bR_\bo_\bt_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00395_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00341_source.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot2.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/StereoCamera.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Rot2.h
\n+
StereoCamera.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-
23#include <gtsam/base/Lie.h>
\n-
24#include <boost/optional.hpp>
\n+
18#pragma once
\n+
19
\n+\n+\n+\n+
23
\n+
24namespace gtsam {
\n
25
\n-
26#include <random>
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
\n-
36 class GTSAM_EXPORT Rot2 : public LieGroup<Rot2, 1> {
\n-
37
\n-
39 double c_, s_;
\n-
40
\n-
42 Rot2& normalize();
\n-
43
\n-
45 inline Rot2(double c, double s) : c_(c), s_(s) {}
\n-
46
\n-
47 public:
\n+
\n+
26class GTSAM_EXPORT StereoCheiralityException: public std::runtime_error {
\n+
27public:
\n+\n+
29 : StereoCheiralityException(std::numeric_limits<Key>::max()) {}
\n+
30
\n+\n+
32 : std::runtime_error("Stereo Cheirality Exception"),
\n+
33 j_(j) {}
\n+
34
\n+
35 Key nearbyVariable() const {
\n+
36 return j_;
\n+
37 }
\n+
38
\n+
39private:
\n+
40 Key j_;
\n+
41};
\n+
\n+
42
\n+
\n+
47class GTSAM_EXPORT StereoCamera {
\n
48
\n-
51
\n-
53 Rot2() : c_(1.0), s_(0.0) {}
\n-
54
\n-
56 Rot2(const Rot2& r) : Rot2(r.c_, r.s_) {}
\n+
49public:
\n+
50
\n+\n+
56 typedef StereoPoint2Vector MeasurementVector;
\n
57
\n-
59 Rot2(double theta) : c_(cos(theta)), s_(sin(theta)) {}
\n-
60
\n-
\n-
62 static Rot2 fromAngle(double theta) {
\n-
63 return Rot2(theta);
\n-
64 }
\n-
\n-
65
\n-
\n-
67 static Rot2 fromDegrees(double theta) {
\n-
68 static const double degree = M_PI / 180;
\n-
69 return fromAngle(theta * degree);
\n-
70 }
\n-
\n-
71
\n-
73 static Rot2 fromCosSin(double c, double s);
\n-
74
\n-
82 static Rot2 relativeBearing(const Point2& d, OptionalJacobian<1,2> H =
\n-
83 boost::none);
\n-
84
\n-
86 static Rot2 atan2(double y, double x);
\n+
58private:
\n+
59 Pose3 leftCamPose_;
\n+
60 Cal3_S2Stereo::shared_ptr K_;
\n+
61
\n+
62public:
\n+
63
\n+
64 enum {
\n+
65 dimension = 6
\n+
66 };
\n+
67
\n+
70
\n+
\n+\n+
73 K_(new Cal3_S2Stereo()) {
\n+
74 }
\n+
\n+
75
\n+
77 StereoCamera(const Pose3& leftCamPose, const Cal3_S2Stereo::shared_ptr K);
\n+
78
\n+
\n+
80 const Cal3_S2Stereo& calibration() const {
\n+
81 return *K_;
\n+
82 }
\n+
\n+
83
\n
87
\n-
94 static Rot2 Random(std::mt19937 & rng);
\n-
95
\n+
\n+
89 void print(const std::string& s = "") const {
\n+
90 leftCamPose_.print(s + ".camera.");
\n+
91 K_->print(s + ".calibration.");
\n+
92 }
\n+
\n+
93
\n+
\n+
95 bool equals(const StereoCamera &camera, double tol = 1e-9) const {
\n+
96 return leftCamPose_.equals(camera.leftCamPose_, tol)
\n+
97 && K_->equals(*camera.K_, tol);
\n+
98 }
\n+
\n
99
\n-
101 void print(const std::string& s = "theta") const;
\n-
102
\n-
104 bool equals(const Rot2& R, double tol = 1e-9) const;
\n-
105
\n-
109
\n-
111 inline static Rot2 Identity() { return Rot2(); }
\n-
112
\n-
114 Rot2 inverse() const { return Rot2(c_, -s_);}
\n-
115
\n-
\n-
117 Rot2 operator*(const Rot2& R) const {
\n-
118 return fromCosSin(c_ * R.c_ - s_ * R.s_, s_ * R.c_ + c_ * R.s_);
\n-
119 }
\n-
\n-
120
\n-
124
\n-
126 static Rot2 Expmap(const Vector1& v, ChartJacobian H = boost::none);
\n+
103
\n+
\n+
105 inline size_t dim() const {
\n+
106 return 6;
\n+
107 }
\n+
\n+
108
\n+
\n+
110 static inline size_t Dim() {
\n+
111 return 6;
\n+
112 }
\n+
\n+
113
\n+
\n+
115 inline StereoCamera retract(const Vector& v) const {
\n+
116 return StereoCamera(pose().retract(v), K_);
\n+
117 }
\n+
\n+
118
\n+
\n+
120 inline Vector6 localCoordinates(const StereoCamera& t2) const {
\n+
121 return leftCamPose_.localCoordinates(t2.leftCamPose_);
\n+
122 }
\n+
\n+
123
\n
127
\n-
129 static Vector1 Logmap(const Rot2& r, ChartJacobian H = boost::none);
\n-
130
\n-
132 Matrix1 AdjointMap() const { return I_1x1; }
\n-
133
\n-
\n-
135 static Matrix ExpmapDerivative(const Vector& /*v*/) {
\n-
136 return I_1x1;
\n-
137 }
\n-
\n-
138
\n-
\n-
140 static Matrix LogmapDerivative(const Vector& /*v*/) {
\n-
141 return I_1x1;
\n-
142 }
\n-
\n-
143
\n-
144 // Chart at origin simply uses exponential map and its inverse
\n-
\n-\n-
146 static Rot2 Retract(const Vector1& v, ChartJacobian H = boost::none) {
\n-
147 return Expmap(v, H);
\n-
148 }
\n-
149 static Vector1 Local(const Rot2& r, ChartJacobian H = boost::none) {
\n-
150 return Logmap(r, H);
\n-
151 }
\n-
152 };
\n-
\n-
153
\n-
154 using LieGroup<Rot2, 1>::inverse; // version with derivative
\n-
155
\n-
159
\n-
163 Point2 rotate(const Point2& p, OptionalJacobian<2, 1> H1 = boost::none,
\n-
164 OptionalJacobian<2, 2> H2 = boost::none) const;
\n-
165
\n-
\n-
167 inline Point2 operator*(const Point2& p) const {
\n-
168 return rotate(p);
\n-
169 }
\n-
\n-
170
\n-
174 Point2 unrotate(const Point2& p, OptionalJacobian<2, 1> H1 = boost::none,
\n-
175 OptionalJacobian<2, 2> H2 = boost::none) const;
\n-
176
\n-
180
\n-
\n-
182 inline Point2 unit() const {
\n-
183 return Point2(c_, s_);
\n-
184 }
\n-
\n-
185
\n-
\n-
187 double theta() const {
\n-
188 return ::atan2(s_, c_);
\n-
189 }
\n+
\n+
129 const Pose3& pose() const {
\n+
130 return leftCamPose_;
\n+
131 }
\n+
\n+
132
\n+
\n+
134 double baseline() const {
\n+
135 return K_->baseline();
\n+
136 }
\n+
\n+
137
\n+
139 StereoPoint2 project(const Point3& point) const;
\n+
140
\n+
145 StereoPoint2 project2(const Point3& point, OptionalJacobian<3, 6> H1 =
\n+
146 boost::none, OptionalJacobian<3, 3> H2 = boost::none) const;
\n+
147
\n+
149 Point3 backproject(const StereoPoint2& z) const;
\n+
150
\n+
155 Point3 backproject2(const StereoPoint2& z,
\n+
156 OptionalJacobian<3, 6> H1 = boost::none,
\n+
157 OptionalJacobian<3, 3> H2 = boost::none) const;
\n+
158
\n+
162
\n+\n+\n+
171 boost::none) const;
\n+
172
\n+
\n+\n+
175 return Eigen::Matrix<double,traits<Measurement>::dimension,1>::Constant(2.0 * K_->fx());;
\n+
176 }
\n+
\n+
177
\n+
179
\n+
180private:
\n+
181
\n+
182 friend class boost::serialization::access;
\n+
183 template<class Archive>
\n+
184 void serialize(Archive & ar, const unsigned int /*version*/) {
\n+
185 ar & BOOST_SERIALIZATION_NVP(leftCamPose_);
\n+
186 ar & BOOST_SERIALIZATION_NVP(K_);
\n+
187 }
\n+
188
\n+
189};
\n
\n
190
\n-
\n-
192 double degrees() const {
\n-
193 const double degree = M_PI / 180;
\n-
194 return theta() / degree;
\n-
195 }
\n-
\n-
196
\n-
\n-
198 inline double c() const {
\n-
199 return c_;
\n-
200 }
\n-
\n-
201
\n-
\n-
203 inline double s() const {
\n-
204 return s_;
\n-
205 }
\n-
\n-
206
\n-
208 Matrix2 matrix() const;
\n-
209
\n-
211 Matrix2 transpose() const;
\n-
212
\n-
214 static Rot2 ClosestTo(const Matrix2& M);
\n-
215
\n-
216 private:
\n-
218 friend class boost::serialization::access;
\n-
219 template<class ARCHIVE>
\n-
220 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
221 ar & BOOST_SERIALIZATION_NVP(c_);
\n-
222 ar & BOOST_SERIALIZATION_NVP(s_);
\n-
223 }
\n-
224
\n-
225 };
\n-
\n-
226
\n-
227 template<>
\n-
228 struct traits<Rot2> : public internal::LieGroup<Rot2> {};
\n-
229
\n-
230 template<>
\n-
231 struct traits<const Rot2> : public internal::LieGroup<Rot2> {};
\n-
232
\n-
233} // gtsam
\n-
Base class and basic functions for Lie types.
\n-
2D Point
\n+
191template<>
\n+
\n+
192struct traits<StereoCamera> : public internal::Manifold<StereoCamera> {
\n+
193};
\n+
\n+
194
\n+
195template<>
\n+
\n+
196struct traits<const StereoCamera> : public internal::Manifold<StereoCamera> {
\n+
197};
\n+
\n+
198}
\n+
3D Pose
\n+
The most common 5DOF 3D->2D calibration + Stereo baseline.
\n+
A 2D stereo point (uL,uR,v)
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)
normalize, with optional Jacobian
Definition Point3.cpp:52
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
Point2_ project(const Point3_ &p_cam)
Expression version of PinholeBase::Project.
Definition expressions.h:131
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n-
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n+
TangentVector localCoordinates(const Class &g) const
localCoordinates as required by manifold concept: finds tangent vector between *this and g
Definition Lie.h:136
\n+
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.
Definition Rot2.h:36
\n-
Rot2 operator*(const Rot2 &R) const
Compose - make a new rotation by adding angles.
Definition Rot2.h:117
\n-
double c() const
return cos
Definition Rot2.h:198
\n-
static Matrix ExpmapDerivative(const Vector &)
Left-trivialized derivative of the exponential map.
Definition Rot2.h:135
\n-
Point2 unit() const
Creates a unit vector as a Point2.
Definition Rot2.h:182
\n-
double theta() const
return angle (RADIANS)
Definition Rot2.h:187
\n-
Rot2 inverse() const
The inverse rotation - negative angle.
Definition Rot2.h:114
\n-
Point2 operator*(const Point2 &p) const
syntactic sugar for rotate
Definition Rot2.h:167
\n-
double s() const
return sin
Definition Rot2.h:203
\n-
static Rot2 Identity()
Identity.
Definition Rot2.h:111
\n-
double degrees() const
return angle (DEGREES)
Definition Rot2.h:192
\n-
static Matrix LogmapDerivative(const Vector &)
Left-trivialized derivative inverse of the exponential map.
Definition Rot2.h:140
\n-
Matrix1 AdjointMap() const
Calculate Adjoint map.
Definition Rot2.h:132
\n-
Rot2(double theta)
Constructor from angle in radians == exponential map at identity.
Definition Rot2.h:59
\n-
static Rot2 fromDegrees(double theta)
Named constructor from angle in degrees.
Definition Rot2.h:67
\n-
Rot2()
default constructor, zero rotation
Definition Rot2.h:53
\n-
Rot2(const Rot2 &r)
copy constructor
Definition Rot2.h:56
\n-
static Rot2 fromAngle(double theta)
Named constructor from angle in radians.
Definition Rot2.h:62
\n-
Definition Rot2.h:145
\n+
The most common 5DOF 3D->2D calibration, stereo version.
Definition Cal3_S2Stereo.h:30
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
bool equals(const Pose3 &pose, double tol=1e-9) const
assert equality up to a tolerance
Definition Pose3.cpp:157
\n+
void print(const std::string &s="") const
print with optional string
Definition Pose3.cpp:152
\n+
Definition StereoCamera.h:26
\n+
A stereo camera class, parameterize by left camera pose and stereo calibration.
Definition StereoCamera.h:47
\n+
StereoCamera()
Default constructor allocates a calibration!
Definition StereoCamera.h:72
\n+
static size_t Dim()
Dimensionality of the tangent space.
Definition StereoCamera.h:110
\n+
void print(const std::string &s="") const
print
Definition StereoCamera.h:89
\n+
Vector6 localCoordinates(const StereoCamera &t2) const
Local coordinates of manifold neighborhood around current value.
Definition StereoCamera.h:120
\n+
bool equals(const StereoCamera &camera, double tol=1e-9) const
equals
Definition StereoCamera.h:95
\n+
size_t dim() const
Dimensionality of the tangent space.
Definition StereoCamera.h:105
\n+
StereoCamera retract(const Vector &v) const
Updates a with tangent space delta.
Definition StereoCamera.h:115
\n+
StereoPoint2 Measurement
Some classes template on either PinholeCamera or StereoCamera, and this typedef informs those classes...
Definition StereoCamera.h:55
\n+
const Cal3_S2Stereo & calibration() const
Return shared pointer to calibration.
Definition StereoCamera.h:80
\n+
double baseline() const
baseline
Definition StereoCamera.h:134
\n+
const Pose3 & pose() const
pose
Definition StereoCamera.h:129
\n+
Vector defaultErrorWhenTriangulatingBehindCamera() const
for Nonlinear Triangulation
Definition StereoCamera.h:174
\n+
A 2D stereo point, v will be same for rectified images.
Definition StereoPoint2.h:32
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,277 +1,265 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Rot2.h\n+StereoCamera.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-24#include \n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n 25\n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-_\b3_\b6 class GTSAM_EXPORT _\bR_\bo_\bt_\b2 : public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n-37\n-39 double c_, s_;\n-40\n-42 _\bR_\bo_\bt_\b2& _\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be();\n-43\n-45 inline _\bR_\bo_\bt_\b2(double c, double s) : c_(c), s_(s) {}\n-46\n-47 public:\n+_\b2_\b6class GTSAM_EXPORT _\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn: public std::runtime_error {\n+27public:\n+28 _\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn()\n+29 : _\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(std::numeric_limits::max()) {}\n+30\n+31 _\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn(_\bK_\be_\by j)\n+32 : std::runtime_error(\"Stereo Cheirality Exception\"),\n+33 j_(j) {}\n+34\n+35 _\bK_\be_\by nearbyVariable() const {\n+36 return j_;\n+37 }\n+38\n+39private:\n+40 _\bK_\be_\by j_;\n+41};\n+42\n+_\b4_\b7class GTSAM_EXPORT _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba {\n 48\n-51\n-_\b5_\b3 _\bR_\bo_\bt_\b2() : c_(1.0), s_(0.0) {}\n-54\n-_\b5_\b6 _\bR_\bo_\bt_\b2(const _\bR_\bo_\bt_\b2& r) : _\bR_\bo_\bt_\b2(r.c_, r.s_) {}\n+49public:\n+50\n+_\b5_\b5 typedef _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 _\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt;\n+56 typedef StereoPoint2Vector MeasurementVector;\n 57\n-_\b5_\b9 _\bR_\bo_\bt_\b2(double theta) : c_(cos(theta)), s_(sin(theta)) {}\n-60\n-_\b6_\b2 static _\bR_\bo_\bt_\b2 _\bf_\br_\bo_\bm_\bA_\bn_\bg_\bl_\be(double theta) {\n-63 return _\bR_\bo_\bt_\b2(theta);\n-64 }\n-65\n-_\b6_\b7 static _\bR_\bo_\bt_\b2 _\bf_\br_\bo_\bm_\bD_\be_\bg_\br_\be_\be_\bs(double theta) {\n-68 static const double degree = M_PI / 180;\n-69 return fromAngle(theta * degree);\n-70 }\n-71\n-73 static _\bR_\bo_\bt_\b2 fromCosSin(double c, double s);\n-74\n-82 static _\bR_\bo_\bt_\b2 relativeBearing(const _\bP_\bo_\bi_\bn_\bt_\b2& d, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b2_\b> H =\n-83 boost::none);\n-84\n-86 static _\bR_\bo_\bt_\b2 atan2(double y, double x);\n+58private:\n+59 _\bP_\bo_\bs_\be_\b3 leftCamPose_;\n+60 Cal3_S2Stereo::shared_ptr K_;\n+61\n+62public:\n+63\n+64 enum {\n+65 dimension = 6\n+66 };\n+67\n+70\n+_\b7_\b2 _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba() :\n+73 K_(new _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo()) {\n+74 }\n+75\n+77 _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba(const _\bP_\bo_\bs_\be_\b3& leftCamPose, const Cal3_S2Stereo::shared_ptr K);\n+78\n+_\b8_\b0 const _\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo& _\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn() const {\n+81 return *K_;\n+82 }\n+83\n 87\n-94 static _\bR_\bo_\bt_\b2 Random(std::mt19937 & rng);\n-95\n+_\b8_\b9 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const {\n+90 leftCamPose_._\bp_\br_\bi_\bn_\bt(s + \".camera.\");\n+91 K_->print(s + \".calibration.\");\n+92 }\n+93\n+_\b9_\b5 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba &camera, double tol = 1e-9) const {\n+96 return leftCamPose_._\be_\bq_\bu_\ba_\bl_\bs(camera.leftCamPose_, tol)\n+97 && K_->equals(*camera.K_, tol);\n+98 }\n 99\n-101 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"theta\") const;\n-102\n-104 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bR_\bo_\bt_\b2& R, double tol = 1e-9) const;\n-105\n-109\n-_\b1_\b1_\b1 inline static _\bR_\bo_\bt_\b2 _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() { return _\bR_\bo_\bt_\b2(); }\n-112\n-_\b1_\b1_\b4 _\bR_\bo_\bt_\b2 _\bi_\bn_\bv_\be_\br_\bs_\be() const { return _\bR_\bo_\bt_\b2(c_, -s_);}\n-115\n-_\b1_\b1_\b7 _\bR_\bo_\bt_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bR_\bo_\bt_\b2& R) const {\n-118 return fromCosSin(c_ * R.c_ - s_ * R.s_, s_ * R.c_ + c_ * R.s_);\n-119 }\n-120\n-124\n-126 static _\bR_\bo_\bt_\b2 Expmap(const Vector1& v, ChartJacobian H = boost::none);\n+103\n+_\b1_\b0_\b5 inline size_t _\bd_\bi_\bm() const {\n+106 return 6;\n+107 }\n+108\n+_\b1_\b1_\b0 static inline size_t _\bD_\bi_\bm() {\n+111 return 6;\n+112 }\n+113\n+_\b1_\b1_\b5 inline _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& v) const {\n+116 return _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba(pose().retract(v), K_);\n+117 }\n+118\n+_\b1_\b2_\b0 inline Vector6 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba& t2) const {\n+121 return leftCamPose_._\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(t2.leftCamPose_);\n+122 }\n+123\n 127\n-129 static Vector1 Logmap(const _\bR_\bo_\bt_\b2& r, ChartJacobian H = boost::none);\n-130\n-_\b1_\b3_\b2 Matrix1 _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const { return I_1x1; }\n-133\n-_\b1_\b3_\b5 static Matrix _\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const Vector& /*v*/) {\n-136 return I_1x1;\n-137 }\n-138\n-_\b1_\b4_\b0 static Matrix _\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const Vector& /*v*/) {\n-141 return I_1x1;\n-142 }\n-143\n-144 // Chart at origin simply uses exponential map and its inverse\n-_\b1_\b4_\b5 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n-146 static _\bR_\bo_\bt_\b2 Retract(const Vector1& v, ChartJacobian H = boost::none) {\n-147 return Expmap(v, H);\n-148 }\n-149 static Vector1 Local(const _\bR_\bo_\bt_\b2& r, ChartJacobian H = boost::none) {\n-150 return Logmap(r, H);\n-151 }\n-152 };\n-153\n-154 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bR_\bo_\bt_\b2, 1>::inverse; // version with derivative\n-155\n-159\n-163 _\bP_\bo_\bi_\bn_\bt_\b2 rotate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b1_\b> H1 = boost::none,\n-164 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> H2 = boost::none) const;\n-165\n-_\b1_\b6_\b7 inline _\bP_\bo_\bi_\bn_\bt_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bi_\bn_\bt_\b2& p) const {\n-168 return rotate(p);\n-169 }\n-170\n-174 _\bP_\bo_\bi_\bn_\bt_\b2 unrotate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b1_\b> H1 = boost::none,\n-175 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> H2 = boost::none) const;\n-176\n-180\n-_\b1_\b8_\b2 inline _\bP_\bo_\bi_\bn_\bt_\b2 _\bu_\bn_\bi_\bt() const {\n-183 return _\bP_\bo_\bi_\bn_\bt_\b2(c_, s_);\n-184 }\n-185\n-_\b1_\b8_\b7 double _\bt_\bh_\be_\bt_\ba() const {\n-188 return ::atan2(s_, c_);\n-189 }\n+_\b1_\b2_\b9 const _\bP_\bo_\bs_\be_\b3& _\bp_\bo_\bs_\be() const {\n+130 return leftCamPose_;\n+131 }\n+132\n+_\b1_\b3_\b4 double _\bb_\ba_\bs_\be_\bl_\bi_\bn_\be() const {\n+135 return K_->baseline();\n+136 }\n+137\n+139 _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& point) const;\n+140\n+145 _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 project2(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> H1 =\n+146 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const;\n+147\n+149 _\bP_\bo_\bi_\bn_\bt_\b3 backproject(const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2& z) const;\n+150\n+155 _\bP_\bo_\bi_\bn_\bt_\b3 backproject2(const _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2& z,\n+156 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> H1 = boost::none,\n+157 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const;\n+158\n+162\n+169 _\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2 _\bp_\br_\bo_\bj_\be_\bc_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> H1,\n+170 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b0_\b> H3 =\n+171 boost::none) const;\n+172\n+_\b1_\b7_\b4 Vector _\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba() const {\n+175 return Eigen::Matrix::dimension,1>::Constant(2.0\n+* K_->fx());;\n+176 }\n+177\n+179\n+180private:\n+181\n+182 friend class boost::serialization::access;\n+183 template\n+184 void serialize(Archive & ar, const unsigned int /*version*/) {\n+185 ar & BOOST_SERIALIZATION_NVP(leftCamPose_);\n+186 ar & BOOST_SERIALIZATION_NVP(K_);\n+187 }\n+188\n+189};\n 190\n-_\b1_\b9_\b2 double _\bd_\be_\bg_\br_\be_\be_\bs() const {\n-193 const double degree = M_PI / 180;\n-194 return theta() / degree;\n-195 }\n-196\n-_\b1_\b9_\b8 inline double _\bc() const {\n-199 return c_;\n-200 }\n-201\n-_\b2_\b0_\b3 inline double _\bs() const {\n-204 return s_;\n-205 }\n-206\n-208 Matrix2 matrix() const;\n-209\n-211 Matrix2 transpose() const;\n-212\n-214 static _\bR_\bo_\bt_\b2 ClosestTo(const Matrix2& M);\n-215\n-216 private:\n-_\b2_\b1_\b8 friend class boost::serialization::access;\n-219 template\n-220 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-221 ar & BOOST_SERIALIZATION_NVP(c_);\n-222 ar & BOOST_SERIALIZATION_NVP(s_);\n-223 }\n-224\n-225 };\n-226\n-227 template<>\n-_\b2_\b2_\b8 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\bo_\bt_\b2> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-229\n-230 template<>\n-_\b2_\b3_\b1 struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-232\n-233} // gtsam\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n-_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-2D Point\n+191template<>\n+_\b1_\b9_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {\n+193};\n+194\n+195template<>\n+_\b1_\b9_\b6struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+{\n+197};\n+198}\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n+_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo_\b._\bh\n+The most common 5DOF 3D->2D calibration + Stereo baseline.\n+_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+A 2D stereo point (uL,uR,v)\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be\n-Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)\n-normalize, with optional Jacobian\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:52\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt\n+Point2_ project(const Point3_ &p_cam)\n+Expression version of PinholeBase::Project.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn expressions.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-A CRTP helper class that implements Lie group methods Prerequisites: methods\n-operator*,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Both LieGroupTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+TangentVector localCoordinates(const Class &g) const\n+localCoordinates as required by manifold concept: finds tangent vector between\n+*this and g\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+Both ManifoldTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2\n-Rotation matrix NOTE: the angle theta is in radians unless explicitly stated.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Rot2 operator*(const Rot2 &R) const\n-Compose - make a new rotation by adding angles.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bc\n-double c() const\n-return cos\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:198\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-static Matrix ExpmapDerivative(const Vector &)\n-Left-trivialized derivative of the exponential map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bu_\bn_\bi_\bt\n-Point2 unit() const\n-Creates a unit vector as a Point2.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:182\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bt_\bh_\be_\bt_\ba\n-double theta() const\n-return angle (RADIANS)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:187\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n-Rot2 inverse() const\n-The inverse rotation - negative angle.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Point2 operator*(const Point2 &p) const\n-syntactic sugar for rotate\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bs\n-double s() const\n-return sin\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:203\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static Rot2 Identity()\n-Identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bd_\be_\bg_\br_\be_\be_\bs\n-double degrees() const\n-return angle (DEGREES)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-static Matrix LogmapDerivative(const Vector &)\n-Left-trivialized derivative inverse of the exponential map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n-Matrix1 AdjointMap() const\n-Calculate Adjoint map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:132\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bR_\bo_\bt_\b2\n-Rot2(double theta)\n-Constructor from angle in radians == exponential map at identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bf_\br_\bo_\bm_\bD_\be_\bg_\br_\be_\be_\bs\n-static Rot2 fromDegrees(double theta)\n-Named constructor from angle in degrees.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bR_\bo_\bt_\b2\n-Rot2()\n-default constructor, zero rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bR_\bo_\bt_\b2\n-Rot2(const Rot2 &r)\n-copy constructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bf_\br_\bo_\bm_\bA_\bn_\bg_\bl_\be\n-static Rot2 fromAngle(double theta)\n-Named constructor from angle in radians.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b2_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot2.h:145\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\bS_\bt_\be_\br_\be_\bo\n+The most common 5DOF 3D->2D calibration, stereo version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2Stereo.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const Pose3 &pose, double tol=1e-9) const\n+assert equality up to a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\") const\n+print with optional string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\bh_\be_\bi_\br_\ba_\bl_\bi_\bt_\by_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:26\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba\n+A stereo camera class, parameterize by left camera pose and stereo calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba\n+StereoCamera()\n+Default constructor allocates a calibration!\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+Dimensionality of the tangent space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\") const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+Vector6 localCoordinates(const StereoCamera &t2) const\n+Local coordinates of manifold neighborhood around current value.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const StereoCamera &camera, double tol=1e-9) const\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+Dimensionality of the tangent space.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+StereoCamera retract(const Vector &v) const\n+Updates a with tangent space delta.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+StereoPoint2 Measurement\n+Some classes template on either PinholeCamera or StereoCamera, and this typedef\n+informs those classes...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bc_\ba_\bl_\bi_\bb_\br_\ba_\bt_\bi_\bo_\bn\n+const Cal3_S2Stereo & calibration() const\n+Return shared pointer to calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bb_\ba_\bs_\be_\bl_\bi_\bn_\be\n+double baseline() const\n+baseline\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bp_\bo_\bs_\be\n+const Pose3 & pose() const\n+pose\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:129\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b:_\b:_\bd_\be_\bf_\ba_\bu_\bl_\bt_\bE_\br_\br_\bo_\br_\bW_\bh_\be_\bn_\bT_\br_\bi_\ba_\bn_\bg_\bu_\bl_\ba_\bt_\bi_\bn_\bg_\bB_\be_\bh_\bi_\bn_\bd_\bC_\ba_\bm_\be_\br_\ba\n+Vector defaultErrorWhenTriangulatingBehindCamera() const\n+for Nonlinear Triangulation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoCamera.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\be_\br_\be_\bo_\bP_\bo_\bi_\bn_\bt_\b2\n+A 2D stereo point, v will be same for rectified images.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn StereoPoint2.h:32\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bR_\bo_\bt_\b2_\b._\bh\n+ * _\bS_\bt_\be_\br_\be_\bo_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00398_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00404_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
3 * @brief EssentialMatrix class
\n
4 * @author Frank Dellaert
\n
5 * @date December 17, 2013
\n
6 */
\n
7
\n
8#pragma once
\n
9
\n-\n+\n
11#include <gtsam/geometry/Unit3.h>
\n-\n-
13#include <gtsam/base/Manifold.h>
\n+\n+
13#include <gtsam/base/Manifold.h>
\n
14
\n
15#include <iosfwd>
\n
16#include <string>
\n
17
\n
18namespace gtsam {
\n
19
\n
\n@@ -271,30 +271,30 @@\n
196 ar & boost::serialization::make_nvp("E31", E_(2, 0));
\n
197 ar & boost::serialization::make_nvp("E32", E_(2, 1));
\n
198 ar & boost::serialization::make_nvp("E33", E_(2, 2));
\n
199 }
\n
200
\n
202
\n
203 public:
\n-\n+\n
205};
\n
\n
206
\n
207template<>
\n
208struct traits<EssentialMatrix> : public internal::Manifold<EssentialMatrix> {};
\n
209
\n
210template<>
\n
211struct traits<const EssentialMatrix> : public internal::Manifold<EssentialMatrix> {};
\n
212
\n
213} // namespace gtsam
\n
214
\n-
Base class and basic functions for Manifold types.
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
3D Pose
\n-
2D Point
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Base class and basic functions for Manifold types.
\n+
3D Pose
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
TangentVector localCoordinates(const Class &g) const
localCoordinates as required by manifold concept: finds tangent vector between *this and g
Definition Lie.h:136
\n
Class retract(const TangentVector &v) const
retract as required by manifold concept: applies v at *this
Definition Lie.h:131
\n
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -161,20 +161,20 @@\n 209\n 210template<>\n _\b2_\b1_\b1struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:\n _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n 212\n 213} // namespace gtsam\n 214\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n #define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n This marks a GTSAM object to require alignment.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n _\bP_\bo_\bs_\be_\b3_\b._\bh\n 3D Pose\n _\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n 2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00401_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00044_source.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Quaternion.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Manifold.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Quaternion.h
\n+
Manifold.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Lie.h>
\n-
21#include <gtsam/base/concepts.h>
\n-
22#include <gtsam/geometry/SO3.h> // Logmap/Expmap derivatives
\n-
23#include <limits>
\n-
24#include <iostream>
\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/base/Matrix.h>
\n+
23#include <gtsam/base/Testable.h>
\n+\n
25
\n-
26#define QUATERNION_TYPE Eigen::Quaternion<_Scalar,_Options>
\n-
27
\n-
28namespace gtsam {
\n+
26#include <boost/concept_check.hpp>
\n+
27#include <boost/concept/requires.hpp>
\n+
28#include <boost/type_traits/is_base_of.hpp>
\n
29
\n-
30// Define traits
\n-
31template<typename _Scalar, int _Options>
\n-
\n-
32struct traits<QUATERNION_TYPE> {
\n-
33 typedef QUATERNION_TYPE ManifoldType;
\n-
34 typedef QUATERNION_TYPE Q;
\n-
35
\n-\n-\n-
38
\n-
41 static Q Identity() {
\n-
42 return Q::Identity();
\n-
43 }
\n-
44
\n-
48 enum {
\n-
49 dimension = 3
\n-
50 };
\n-
51 typedef OptionalJacobian<3, 3> ChartJacobian;
\n-
52 typedef Eigen::Matrix<_Scalar, 3, 1, _Options, 3, 1> TangentVector;
\n-
53
\n-
57 static Q Compose(const Q &g, const Q & h,
\n-
58 ChartJacobian Hg = boost::none, ChartJacobian Hh = boost::none) {
\n-
59 if (Hg) *Hg = h.toRotationMatrix().transpose();
\n-
60 if (Hh) *Hh = I_3x3;
\n-
61 return g * h;
\n-
62 }
\n-
63
\n-
64 static Q Between(const Q &g, const Q & h,
\n-
65 ChartJacobian Hg = boost::none, ChartJacobian Hh = boost::none) {
\n-
66 Q d = g.inverse() * h;
\n-
67 if (Hg) *Hg = -d.toRotationMatrix().transpose();
\n-
68 if (Hh) *Hh = I_3x3;
\n-
69 return d;
\n+
30namespace gtsam {
\n+
31
\n+
33struct manifold_tag {};
\n+
34
\n+
53template <typename T> struct traits;
\n+
54
\n+
55namespace internal {
\n+
56
\n+
58template<class Class>
\n+
\n+\n+
60
\n+
61 enum { dim = Class::dimension };
\n+
62
\n+
63 Class p, q;
\n+
64 Eigen::Matrix<double, dim, 1> v;
\n+\n+
66
\n+
67 BOOST_CONCEPT_USAGE(HasManifoldPrereqs) {
\n+
68 v = p.localCoordinates(q);
\n+
69 q = p.retract(v);
\n
70 }
\n-
71
\n-
72 static Q Inverse(const Q &g,
\n-
73 ChartJacobian H = boost::none) {
\n-
74 if (H) *H = -g.toRotationMatrix();
\n-
75 return g.inverse();
\n-
76 }
\n-
77
\n-
\n-
79 static Q Expmap(const Eigen::Ref<const TangentVector>& omega,
\n-
80 ChartJacobian H = boost::none) {
\n-
81 using std::cos;
\n-
82 using std::sin;
\n-
83 if (H) *H = SO3::ExpmapDerivative(omega.template cast<double>());
\n-
84 _Scalar theta2 = omega.dot(omega);
\n-
85 if (theta2 > std::numeric_limits<_Scalar>::epsilon()) {
\n-
86 _Scalar theta = std::sqrt(theta2);
\n-
87 _Scalar ha = _Scalar(0.5) * theta;
\n-
88 Vector3 vec = (sin(ha) / theta) * omega;
\n-
89 return Q(cos(ha), vec.x(), vec.y(), vec.z());
\n-
90 } else {
\n-
91 // first order approximation sin(theta/2)/theta = 0.5
\n-
92 Vector3 vec = _Scalar(0.5) * omega;
\n-
93 return Q(1.0, vec.x(), vec.y(), vec.z());
\n-
94 }
\n-
95 }
\n+
71};
\n
\n+
72
\n+
74template<class Class, int N>
\n+
\n+\n+
76 // Compile-time dimensionality
\n+
77 static int GetDimension(const Class&) {
\n+
78 return N;
\n+
79 }
\n+
80};
\n+
\n+
81
\n+
83template<class Class>
\n+
\n+
84struct GetDimensionImpl<Class, Eigen::Dynamic> {
\n+
85 // Run-time dimensionality
\n+
86 static int GetDimension(const Class& m) {
\n+
87 return m.dim();
\n+
88 }
\n+
89};
\n+
\n+
90
\n+
94template<class Class>
\n+
\n+
95struct ManifoldTraits: GetDimensionImpl<Class, Class::dimension> {
\n
96
\n-
\n-
98 static TangentVector Logmap(const Q& q, ChartJacobian H = boost::none) {
\n-
99 using std::acos;
\n-
100 using std::sqrt;
\n-
101
\n-
102 // define these compile time constants to avoid std::abs:
\n-
103 static const double twoPi = 2.0 * M_PI, NearlyOne = 1.0 - 1e-10,
\n-
104 NearlyNegativeOne = -1.0 + 1e-10;
\n-
105
\n-
106 TangentVector omega;
\n+
97 // Check that Class has the necessary machinery
\n+
98 BOOST_CONCEPT_ASSERT((HasManifoldPrereqs<Class>));
\n+
99
\n+
100 // Dimension of the manifold
\n+
101 enum { dimension = Class::dimension };
\n+
102
\n+
103 // Typedefs required by all manifold types.
\n+
104 typedef Class ManifoldType;
\n+\n+
106 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
\n
107
\n-
108 const _Scalar qw = q.w();
\n-
109 // See Quaternion-Logmap.nb in doc for Taylor expansions
\n-
110 if (qw > NearlyOne) {
\n-
111 // Taylor expansion of (angle / s) at 1
\n-
112 // (2 + 2 * (1-qw) / 3) * q.vec();
\n-
113 omega = ( 8. / 3. - 2. / 3. * qw) * q.vec();
\n-
114 } else if (qw < NearlyNegativeOne) {
\n-
115 // Taylor expansion of (angle / s) at -1
\n-
116 // (-2 - 2 * (1 + qw) / 3) * q.vec();
\n-
117 omega = (-8. / 3. - 2. / 3. * qw) * q.vec();
\n-
118 } else {
\n-
119 // Normal, away from zero case
\n-
120 if (qw > 0) {
\n-
121 _Scalar angle = 2 * acos(qw), s = sqrt(1 - qw * qw);
\n-
122 // Important: convert to [-pi,pi] to keep error continuous
\n-
123 if (angle > M_PI)
\n-
124 angle -= twoPi;
\n-
125 else if (angle < -M_PI)
\n-
126 angle += twoPi;
\n-
127 omega = (angle / s) * q.vec();
\n-
128 } else {
\n-
129 // Make sure that we are using a canonical quaternion with w > 0
\n-
130 _Scalar angle = 2 * acos(-qw), s = sqrt(1 - qw * qw);
\n-
131 if (angle > M_PI)
\n-
132 angle -= twoPi;
\n-
133 else if (angle < -M_PI)
\n-
134 angle += twoPi;
\n-
135 omega = (angle / s) * -q.vec();
\n-
136 }
\n-
137 }
\n-
138
\n-
139 if(H) *H = SO3::LogmapDerivative(omega.template cast<double>());
\n-
140 return omega;
\n-
141 }
\n-
\n-
142
\n-
146
\n-
147 static TangentVector Local(const Q& g, const Q& h,
\n-
148 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
149 Q b = Between(g, h, H1, H2);
\n-
150 Matrix3 D_v_b;
\n-
151 TangentVector v = Logmap(b, (H1 || H2) ? &D_v_b : 0);
\n-
152 if (H1) *H1 = D_v_b * (*H1);
\n-
153 if (H2) *H2 = D_v_b * (*H2);
\n-
154 return v;
\n-
155 }
\n-
156
\n-
157 static Q Retract(const Q& g, const TangentVector& v,
\n-
158 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n-
159 Matrix3 D_h_v;
\n-
160 Q b = Expmap(v,H2 ? &D_h_v : 0);
\n-
161 Q h = Compose(g, b, H1, H2);
\n-
162 if (H2) *H2 = (*H2) * D_h_v;
\n-
163 return h;
\n-
164 }
\n-
165
\n-
169 static void Print(const Q& q, const std::string& str = "") {
\n-
170 if (str.size() == 0)
\n-
171 std::cout << "Eigen::Quaternion: ";
\n-
172 else
\n-
173 std::cout << str << " ";
\n-
174 std::cout << q.vec().transpose() << std::endl;
\n-
175 }
\n-
176 static bool Equals(const Q& q1, const Q& q2, double tol = 1e-8) {
\n-
177 return Between(q1, q2).vec().array().abs().maxCoeff() < tol;
\n-
178 }
\n-
180};
\n-
\n-
181
\n-
182typedef Eigen::Quaternion<double, Eigen::DontAlign> Quaternion;
\n-
183
\n-
184} // \\namespace gtsam
\n-
185
\n-
Base class and basic functions for Lie types.
\n-
3*3 matrix representation of SO(3)
\n+
108 // Local coordinates
\n+
109 static TangentVector Local(const Class& origin, const Class& other) {
\n+
110 return origin.localCoordinates(other);
\n+
111 }
\n+
112
\n+
113 // Retraction back to manifold
\n+
114 static Class Retract(const Class& origin, const TangentVector& v) {
\n+
115 return origin.retract(v);
\n+
116 }
\n+
117};
\n+
\n+
118
\n+
120template<class Class> struct Manifold: ManifoldTraits<Class>, Testable<Class> {};
\n+
121
\n+
122} // \\ namespace internal
\n+
123
\n+
125template<typename T>
\n+\n+
127check_manifold_invariants(const T& a, const T& b, double tol=1e-9) {
\n+\n+\n+
130 T c = traits<T>::Retract(a,v);
\n+
131 return v0.norm() < tol && traits<T>::Equals(b,c,tol);
\n+
132}
\n+
133
\n+
135template<typename T>
\n+
136class IsManifold {
\n+
137
\n+
138public:
\n+
139
\n+
140 typedef typename traits<T>::structure_category structure_category_tag;
\n+
141 static const int dim = traits<T>::dimension;
\n+
142 typedef typename traits<T>::ManifoldType ManifoldType;
\n+
143 typedef typename traits<T>::TangentVector TangentVector;
\n+
144
\n+
145 BOOST_CONCEPT_USAGE(IsManifold) {
\n+
146 BOOST_STATIC_ASSERT_MSG(
\n+
147 (boost::is_base_of<manifold_tag, structure_category_tag>::value),
\n+
148 "This type's structure_category trait does not assert it as a manifold (or derived)");
\n+
149 BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim);
\n+
150
\n+
151 // make sure Chart methods are defined
\n+
152 v = traits<T>::Local(p, q);
\n+
153 q = traits<T>::Retract(p, v);
\n+
154 }
\n+
155
\n+
156private:
\n+
157
\n+
158 TangentVector v;
\n+
159 ManifoldType p, q;
\n+
160};
\n+
161
\n+
163template<typename T>
\n+
\n+\n+
165 typedef const int value_type;
\n+
166 static const int value = traits<T>::dimension;
\n+
167 BOOST_STATIC_ASSERT_MSG(value != Eigen::Dynamic,
\n+
168 "FixedDimension instantiated for dymanically-sized type.");
\n+
169};
\n+
\n+
170} // \\ namespace gtsam
\n+
171
\n+
173// * Macros for using the ManifoldConcept
\n+
174// * - An instantiation for use inside unit tests
\n+
175// * - A typedef for use inside generic algorithms
\n+
176// *
\n+
177// * NOTE: intentionally not in the gtsam namespace to allow for classes not in
\n+
178// * the gtsam namespace to be more easily enforced as testable
\n+
179// */
\n+
180#define GTSAM_CONCEPT_MANIFOLD_INST(T) template class gtsam::IsManifold<T>;
\n+
181#define GTSAM_CONCEPT_MANIFOLD_TYPE(T) using _gtsam_IsManifold_##T = gtsam::IsManifold<T>;
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Special class for optional Jacobian arguments.
\n+
Concept check for values that can be used in unit tests.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
BOOST_CONCEPT_REQUIRES(((IsGroup< G >)),(bool)) check_group_invariants(const G &a
Check invariants.
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Group operator syntax flavors.
Definition Group.h:37
\n-
tag to assert a type is a Lie group
Definition Lie.h:164
\n+
tag to assert a type is a manifold
Definition Manifold.h:33
\n+
Requirements on type to pass it to Manifold template below.
Definition Manifold.h:59
\n+
Extra manifold traits for fixed-dimension types.
Definition Manifold.h:75
\n+
A helper that implements the traits interface for GTSAM manifolds.
Definition Manifold.h:95
\n+
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n+
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
static Q Expmap(const Eigen::Ref< const TangentVector > &omega, ChartJacobian H=boost::none)
Exponential map, using the inlined code from Eigen's conversion from axis/angle.
Definition Quaternion.h:79
\n-
static TangentVector Logmap(const Q &q, ChartJacobian H=boost::none)
We use our own Logmap, as there is a slight bug in Eigen.
Definition Quaternion.h:98
\n-
static MatrixDD ExpmapDerivative(const TangentVector &omega)
Derivative of Expmap, currently only defined for SO3.
Definition SOn-inl.h:72
\n-
static MatrixDD LogmapDerivative(const TangentVector &omega)
Derivative of Logmap, currently only defined for SO3.
Definition SOn-inl.h:82
\n+
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,214 +1,206 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Quaternion.h\n+Manifold.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-21#include \n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\b3_\b._\bh> // Logmap/Expmap derivatives\n-23#include \n-24#include \n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n 25\n-26#define QUATERNION_TYPE Eigen::Quaternion<_Scalar,_Options>\n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n+26#include \n+27#include \n+28#include \n 29\n-30// Define traits\n-31template\n-_\b3_\b2struct _\bt_\br_\ba_\bi_\bt_\bs {\n-33 typedef QUATERNION_TYPE ManifoldType;\n-34 typedef QUATERNION_TYPE Q;\n-35\n-36 typedef _\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n-37 typedef _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n-38\n-41 static Q Identity() {\n-42 return Q::Identity();\n-43 }\n-44\n-48 enum {\n-49 dimension = 3\n-50 };\n-51 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> ChartJacobian;\n-52 typedef Eigen::Matrix<_Scalar, 3, 1, _Options, 3, 1> TangentVector;\n-53\n-57 static Q Compose(const Q &g, const Q & h,\n-58 ChartJacobian Hg = boost::none, ChartJacobian Hh = boost::none) {\n-59 if (Hg) *Hg = h.toRotationMatrix().transpose();\n-60 if (Hh) *Hh = I_3x3;\n-61 return g * h;\n-62 }\n-63\n-64 static Q Between(const Q &g, const Q & h,\n-65 ChartJacobian Hg = boost::none, ChartJacobian Hh = boost::none) {\n-66 Q d = g.inverse() * h;\n-67 if (Hg) *Hg = -d.toRotationMatrix().transpose();\n-68 if (Hh) *Hh = I_3x3;\n-69 return d;\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+_\b3_\b3struct _\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg {};\n+34\n+53template struct _\bt_\br_\ba_\bi_\bt_\bs;\n+54\n+55namespace internal {\n+56\n+58template\n+_\b5_\b9struct _\bH_\ba_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\br_\be_\bq_\bs {\n+60\n+61 enum { dim = Class::dimension };\n+62\n+63 Class p, q;\n+64 Eigen::Matrix v;\n+65 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\b,_\b _\bd_\bi_\bm_\b> Hp, Hq, Hv;\n+66\n+67 BOOST_CONCEPT_USAGE(_\bH_\ba_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\br_\be_\bq_\bs) {\n+68 v = p.localCoordinates(q);\n+69 q = p.retract(v);\n 70 }\n-71\n-72 static Q Inverse(const Q &g,\n-73 ChartJacobian H = boost::none) {\n-74 if (H) *H = -g.toRotationMatrix();\n-75 return g.inverse();\n-76 }\n-77\n-_\b7_\b9 static Q _\bE_\bx_\bp_\bm_\ba_\bp(const Eigen::Ref& omega,\n-80 ChartJacobian H = boost::none) {\n-81 using std::cos;\n-82 using std::sin;\n-83 if (H) *H = _\bS_\bO_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(omega.template cast());\n-84 _Scalar theta2 = omega.dot(omega);\n-85 if (theta2 > std::numeric_limits<_Scalar>::epsilon()) {\n-86 _Scalar theta = std::sqrt(theta2);\n-87 _Scalar ha = _Scalar(0.5) * theta;\n-88 Vector3 vec = (sin(ha) / theta) * omega;\n-89 return Q(cos(ha), vec.x(), vec.y(), vec.z());\n-90 } else {\n-91 // first order approximation sin(theta/2)/theta = 0.5\n-92 Vector3 vec = _Scalar(0.5) * omega;\n-93 return Q(1.0, vec.x(), vec.y(), vec.z());\n-94 }\n-95 }\n+71};\n+72\n+74template\n+_\b7_\b5struct _\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl {\n+76 // Compile-time dimensionality\n+77 static int GetDimension(const Class&) {\n+78 return N;\n+79 }\n+80};\n+81\n+83template\n+_\b8_\b4struct _\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl {\n+85 // Run-time dimensionality\n+86 static int GetDimension(const Class& m) {\n+87 return m.dim();\n+88 }\n+89};\n+90\n+94template\n+_\b9_\b5struct _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs: _\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl {\n 96\n-_\b9_\b8 static TangentVector _\bL_\bo_\bg_\bm_\ba_\bp(const Q& q, ChartJacobian H = boost::none) {\n-99 using std::acos;\n-100 using std::sqrt;\n-101\n-102 // define these compile time constants to avoid std::abs:\n-103 static const double twoPi = 2.0 * M_PI, NearlyOne = 1.0 - 1e-10,\n-104 NearlyNegativeOne = -1.0 + 1e-10;\n-105\n-106 TangentVector omega;\n+97 // Check that Class has the necessary machinery\n+98 BOOST_CONCEPT_ASSERT((_\bH_\ba_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\br_\be_\bq_\bs_\b<_\bC_\bl_\ba_\bs_\bs_\b>));\n+99\n+100 // Dimension of the manifold\n+101 enum { dimension = Class::dimension };\n+102\n+103 // Typedefs required by all manifold types.\n+104 typedef Class ManifoldType;\n+105 typedef _\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n+106 typedef Eigen::Matrix TangentVector;\n 107\n-108 const _Scalar qw = q.w();\n-109 // See Quaternion-Logmap.nb in doc for Taylor expansions\n-110 if (qw > NearlyOne) {\n-111 // Taylor expansion of (angle / s) at 1\n-112 // (2 + 2 * (1-qw) / 3) * q.vec();\n-113 omega = ( 8. / 3. - 2. / 3. * qw) * q.vec();\n-114 } else if (qw < NearlyNegativeOne) {\n-115 // Taylor expansion of (angle / s) at -1\n-116 // (-2 - 2 * (1 + qw) / 3) * q.vec();\n-117 omega = (-8. / 3. - 2. / 3. * qw) * q.vec();\n-118 } else {\n-119 // Normal, away from zero case\n-120 if (qw > 0) {\n-121 _Scalar angle = 2 * acos(qw), s = sqrt(1 - qw * qw);\n-122 // Important: convert to [-pi,pi] to keep error continuous\n-123 if (angle > M_PI)\n-124 angle -= twoPi;\n-125 else if (angle < -M_PI)\n-126 angle += twoPi;\n-127 omega = (angle / s) * q.vec();\n-128 } else {\n-129 // Make sure that we are using a canonical quaternion with w > 0\n-130 _Scalar angle = 2 * acos(-qw), s = sqrt(1 - qw * qw);\n-131 if (angle > M_PI)\n-132 angle -= twoPi;\n-133 else if (angle < -M_PI)\n-134 angle += twoPi;\n-135 omega = (angle / s) * -q.vec();\n-136 }\n-137 }\n-138\n-139 if(H) *H = _\bS_\bO_\b3_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(omega.template cast());\n-140 return omega;\n-141 }\n-142\n-146\n-147 static TangentVector Local(const Q& g, const Q& h,\n-148 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-149 Q b = Between(g, h, H1, H2);\n-150 Matrix3 D_v_b;\n-151 TangentVector v = Logmap(b, (H1 || H2) ? &D_v_b : 0);\n-152 if (H1) *H1 = D_v_b * (*H1);\n-153 if (H2) *H2 = D_v_b * (*H2);\n-154 return v;\n-155 }\n-156\n-157 static Q Retract(const Q& g, const TangentVector& v,\n-158 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n-159 Matrix3 D_h_v;\n-160 Q b = Expmap(v,H2 ? &D_h_v : 0);\n-161 Q h = Compose(g, b, H1, H2);\n-162 if (H2) *H2 = (*H2) * D_h_v;\n-163 return h;\n-164 }\n-165\n-169 static void Print(const Q& q, const std::string& str = \"\") {\n-170 if (str.size() == 0)\n-171 std::cout << \"Eigen::Quaternion: \";\n-172 else\n-173 std::cout << str << \" \";\n-174 std::cout << q.vec().transpose() << std::endl;\n-175 }\n-176 static bool Equals(const Q& q1, const Q& q2, double tol = 1e-8) {\n-177 return Between(q1, q2).vec().array().abs().maxCoeff() < tol;\n-178 }\n-180};\n-181\n-182typedef Eigen::Quaternion Quaternion;\n-183\n-184} // \\namespace gtsam\n-185\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n-_\bS_\bO_\b3_\b._\bh\n-3*3 matrix representation of SO(3)\n+108 // Local coordinates\n+109 static TangentVector Local(const Class& origin, const Class& other) {\n+110 return origin.localCoordinates(other);\n+111 }\n+112\n+113 // Retraction back to manifold\n+114 static Class Retract(const Class& origin, const TangentVector& v) {\n+115 return origin.retract(v);\n+116 }\n+117};\n+118\n+_\b1_\b2_\b0template struct _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd: _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs,\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+121\n+122} // \\ namespace internal\n+123\n+125template\n+_\b1_\b2_\b6_\bB_\bO_\bO_\bS_\bT_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bR_\bE_\bQ_\bU_\bI_\bR_\bE_\bS(((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bT_\b>)),(bool)) //\n+127check_manifold_invariants(const T& a, const T& b, double tol=1e-9) {\n+128 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br v0 = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(a,a);\n+129 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br v = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(a,b);\n+130 T c = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(a,v);\n+131 return v0.norm() < tol && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(b,c,tol);\n+132}\n+133\n+135template\n+136class IsManifold {\n+137\n+138public:\n+139\n+140 typedef typename traits::structure_category structure_category_tag;\n+141 static const int dim = traits::dimension;\n+142 typedef typename traits::ManifoldType ManifoldType;\n+143 typedef typename traits::TangentVector TangentVector;\n+144\n+145 BOOST_CONCEPT_USAGE(IsManifold) {\n+146 BOOST_STATIC_ASSERT_MSG(\n+147 (boost::is_base_of::value),\n+148 \"This type's structure_category trait does not assert it as a manifold (or\n+derived)\");\n+149 BOOST_STATIC_ASSERT(TangentVector::SizeAtCompileTime == dim);\n+150\n+151 // make sure Chart methods are defined\n+152 v = traits::Local(p, q);\n+153 q = traits::Retract(p, v);\n+154 }\n+155\n+156private:\n+157\n+158 TangentVector v;\n+159 ManifoldType p, q;\n+160};\n+161\n+163template\n+_\b1_\b6_\b4struct _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn {\n+165 typedef const int value_type;\n+166 static const int value = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+167 BOOST_STATIC_ASSERT_MSG(value != Eigen::Dynamic,\n+168 \"FixedDimension instantiated for dymanically-sized type.\");\n+169};\n+170} // \\ namespace gtsam\n+171\n+173// * Macros for using the ManifoldConcept\n+174// * - An instantiation for use inside unit tests\n+175// * - A typedef for use inside generic algorithms\n+176// *\n+177// * NOTE: intentionally not in the gtsam namespace to allow for classes not\n+in\n+178// * the gtsam namespace to be more easily enforced as testable\n+179// */\n+_\b1_\b8_\b0#define GTSAM_CONCEPT_MANIFOLD_INST(T) template class gtsam::IsManifold;\n+181#define GTSAM_CONCEPT_MANIFOLD_TYPE(T) using _gtsam_IsManifold_##T = gtsam::\n+IsManifold;\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n+Special class for optional Jacobian arguments.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bO_\bO_\bS_\bT_\b__\bC_\bO_\bN_\bC_\bE_\bP_\bT_\b__\bR_\bE_\bQ_\bU_\bI_\bR_\bE_\bS\n+BOOST_CONCEPT_REQUIRES(((IsGroup< G >)),(bool)) check_group_invariants(const G\n+&a\n+Check invariants.\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-Group operator syntax flavors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n-tag to assert a type is a Lie group\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg\n+tag to assert a type is a manifold\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bH_\ba_\bs_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\br_\be_\bq_\bs\n+Requirements on type to pass it to Manifold template below.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl\n+Extra manifold traits for fixed-dimension types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\br_\ba_\bi_\bt_\bs\n+A helper that implements the traits interface for GTSAM manifolds.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+Both ManifoldTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+Give fixed size dimension of a type, fails at compile time if dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n either a fixed size o...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bQ_\bU_\bA_\bT_\bE_\bR_\bN_\bI_\bO_\bN_\b__\bT_\bY_\bP_\bE_\b _\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n-static Q Expmap(const Eigen::Ref< const TangentVector > &omega, ChartJacobian\n-H=boost::none)\n-Exponential map, using the inlined code from Eigen's conversion from axis/\n-angle.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Quaternion.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bQ_\bU_\bA_\bT_\bE_\bR_\bN_\bI_\bO_\bN_\b__\bT_\bY_\bP_\bE_\b _\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp\n-static TangentVector Logmap(const Q &q, ChartJacobian H=boost::none)\n-We use our own Logmap, as there is a slight bug in Eigen.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Quaternion.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-static MatrixDD ExpmapDerivative(const TangentVector &omega)\n-Derivative of Expmap, currently only defined for SO3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-static MatrixDD LogmapDerivative(const TangentVector &omega)\n-Derivative of Logmap, currently only defined for SO3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A testable concept check that should be placed in applicable unit tests and in\n+generic algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh\n+ * _\bb_\ba_\bs_\be\n+ * _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00404.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00398.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
Date
Sep 25, 2010
\n
Author
ydjian
\n
\n \n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00407_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00896_source.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Errors.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Point3.h
\n+
Errors.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20// \\callgraph
\n+
18// \\callgraph
\n+
19
\n+
20#pragma once
\n
21
\n-
22#pragma once
\n-
23
\n-
24#include <gtsam/config.h>
\n-
25#include <gtsam/base/VectorSpace.h>
\n-
26#include <gtsam/base/Vector.h>
\n-
27#include <gtsam/dllexport.h>
\n-\n-
29#include <boost/serialization/nvp.hpp>
\n-
30#include <numeric>
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
36typedef Vector3 Point3;
\n-
37typedef std::vector<Point3, Eigen::aligned_allocator<Point3> > Point3Vector;
\n+
22#include <gtsam/base/FastList.h>
\n+
23#include <gtsam/base/Testable.h>
\n+
24#include <gtsam/base/Vector.h>
\n+
25
\n+
26#include <string>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
30// Forward declarations
\n+
31class VectorValues;
\n+
32
\n+\n+
35
\n+
37GTSAM_EXPORT Errors createErrors(const VectorValues& V);
\n
38
\n-
39// Convenience typedef
\n-
40using Point3Pair = std::pair<Point3, Point3>;
\n-
41GTSAM_EXPORT std::ostream &operator<<(std::ostream &os, const gtsam::Point3Pair &p);
\n-
42
\n-
43using Point3Pairs = std::vector<Point3Pair>;
\n-
44
\n-
46GTSAM_EXPORT double distance3(const Point3& p1, const Point3& q,
\n-
47 OptionalJacobian<1, 3> H1 = boost::none,
\n-
48 OptionalJacobian<1, 3> H2 = boost::none);
\n-
49
\n-
51GTSAM_EXPORT double norm3(const Point3& p, OptionalJacobian<1, 3> H = boost::none);
\n-
52
\n-
54GTSAM_EXPORT Point3 normalize(const Point3& p, OptionalJacobian<3, 3> H = boost::none);
\n-
55
\n-
57GTSAM_EXPORT Point3 cross(const Point3& p, const Point3& q,
\n-
58 OptionalJacobian<3, 3> H_p = boost::none,
\n-
59 OptionalJacobian<3, 3> H_q = boost::none);
\n+
40GTSAM_EXPORT void print(const Errors& e, const std::string& s = "Errors");
\n+
41
\n+
42// Check equality for unit testing.
\n+
43GTSAM_EXPORT bool equality(const Errors& actual, const Errors& expected,
\n+
44 double tol = 1e-9);
\n+
45
\n+
47GTSAM_EXPORT Errors operator+(const Errors& a, const Errors& b);
\n+
48
\n+
50GTSAM_EXPORT Errors operator-(const Errors& a, const Errors& b);
\n+
51
\n+
53GTSAM_EXPORT Errors operator-(const Errors& a);
\n+
54
\n+
56GTSAM_EXPORT double dot(const Errors& a, const Errors& b);
\n+
57
\n+
59GTSAM_EXPORT void axpy(double alpha, const Errors& x, Errors& y);
\n
60
\n-
62GTSAM_EXPORT double dot(const Point3& p, const Point3& q,
\n-
63 OptionalJacobian<1, 3> H_p = boost::none,
\n-
64 OptionalJacobian<1, 3> H_q = boost::none);
\n-
65
\n-
67template <class CONTAINER>
\n-
\n-
68Point3 mean(const CONTAINER& points) {
\n-
69 if (points.size() == 0) throw std::invalid_argument("Point3::mean input container is empty");
\n-
70 Point3 sum(0, 0, 0);
\n-
71 sum = std::accumulate(points.begin(), points.end(), sum);
\n-
72 return sum / points.size();
\n-
73}
\n-
\n-
74
\n-
76GTSAM_EXPORT Point3Pair means(const std::vector<Point3Pair> &abPointPairs);
\n-
77
\n-
78template <typename A1, typename A2>
\n-
79struct Range;
\n-
80
\n-
81template <>
\n-
\n-\n-
83 typedef double result_type;
\n-
84 double operator()(const Point3& p, const Point3& q,
\n-
85 OptionalJacobian<1, 3> H1 = boost::none,
\n-
86 OptionalJacobian<1, 3> H2 = boost::none) {
\n-
87 return distance3(p, q, H1, H2);
\n-
88 }
\n-
89};
\n-
\n-
90
\n-
91} // namespace gtsam
\n-
92
\n-
serialization for Vectors
\n-
typedef and functions to augment Eigen's VectorXd
\n+
62template <>
\n+
\n+
63struct traits<Errors> {
\n+
64 static void Print(const Errors& e, const std::string& str = "") {
\n+
65 print(e, str);
\n+
66 }
\n+
67 static bool Equals(const Errors& actual, const Errors& expected,
\n+
68 double tol = 1e-8) {
\n+
69 return equality(actual, expected, tol);
\n+
70 }
\n+
71};
\n+
\n+
72
\n+
73} // namespace gtsam
\n+
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n+
Concept check for values that can be used in unit tests.
\n+
typedef and functions to augment Eigen's VectorXd
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Point3 mean(const CONTAINER &points)
mean
Definition Point3.h:68
\n-
Point3 cross(const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H1, OptionalJacobian< 3, 3 > H2)
cross product
Definition Point3.cpp:64
\n-
Point2Pair means(const std::vector< Point2Pair > &abPointPairs)
Calculate the two means of a set of Point2 pairs.
Definition Point2.cpp:116
\n-
double distance3(const Point3 &p1, const Point3 &q, OptionalJacobian< 1, 3 > H1, OptionalJacobian< 1, 3 > H2)
distance between two points
Definition Point3.cpp:27
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n-
Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)
normalize, with optional Jacobian
Definition Point3.cpp:52
\n-
double norm3(const Point3 &p, OptionalJacobian< 1, 3 > H)
Distance of the point from the origin, with Jacobian.
Definition Point3.cpp:41
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Errors operator+(const Errors &a, const Errors &b)
Addition.
Definition Errors.cpp:60
\n+
void axpy(double alpha, const Errors &x, Errors &y)
BLAS level 2 style AXPY, y := alpha*x + y
Definition Errors.cpp:111
\n+
Errors createErrors(const VectorValues &V)
Break V into pieces according to its start indices.
Definition Errors.cpp:29
\n
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Definition BearingRange.h:40
\n+
Errors operator-(const Errors &a, const Errors &b)
Subtraction.
Definition Errors.cpp:75
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
The Factor::error simply extracts the.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,140 +1,115 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Point3.h\n+Errors.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20// \\callgraph\n+18// \\callgraph\n+19\n+20#pragma once\n 21\n-22#pragma once\n-23\n-24#include \n-25#include \n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-27#include \n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-29#include \n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-_\b3_\b6typedef Vector3 _\bP_\bo_\bi_\bn_\bt_\b3;\n-37typedef std::vector > Point3Vector;\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+25\n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+30// Forward declarations\n+31class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+32\n+_\b3_\b4using _\bE_\br_\br_\bo_\br_\bs = _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bV_\be_\bc_\bt_\bo_\br_\b>;\n+35\n+37GTSAM_EXPORT _\bE_\br_\br_\bo_\br_\bs _\bc_\br_\be_\ba_\bt_\be_\bE_\br_\br_\bo_\br_\bs(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& V);\n 38\n-39// Convenience typedef\n-40using Point3Pair = std::pair;\n-41GTSAM_EXPORT std::ostream &operator<<(std::ostream &os, const gtsam::\n-Point3Pair &p);\n-42\n-43using Point3Pairs = std::vector;\n-44\n-46GTSAM_EXPORT double _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b3(const _\bP_\bo_\bi_\bn_\bt_\b3& p1, const _\bP_\bo_\bi_\bn_\bt_\b3& q,\n-47 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1 = boost::none,\n-48 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H2 = boost::none);\n-49\n-51GTSAM_EXPORT double _\bn_\bo_\br_\bm_\b3(const _\bP_\bo_\bi_\bn_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H = boost::\n-none);\n-52\n-54GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H =\n-boost::none);\n-55\n-57GTSAM_EXPORT _\bP_\bo_\bi_\bn_\bt_\b3 _\bc_\br_\bo_\bs_\bs(const _\bP_\bo_\bi_\bn_\bt_\b3& p, const _\bP_\bo_\bi_\bn_\bt_\b3& q,\n-58 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H_p = boost::none,\n-59 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H_q = boost::none);\n+40GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const _\bE_\br_\br_\bo_\br_\bs& e, const std::string& s = \"Errors\");\n+41\n+42// Check equality for unit testing.\n+43GTSAM_EXPORT bool equality(const _\bE_\br_\br_\bo_\br_\bs& actual, const _\bE_\br_\br_\bo_\br_\bs& expected,\n+44 double tol = 1e-9);\n+45\n+47GTSAM_EXPORT _\bE_\br_\br_\bo_\br_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bE_\br_\br_\bo_\br_\bs& a, const _\bE_\br_\br_\bo_\br_\bs& b);\n+48\n+50GTSAM_EXPORT _\bE_\br_\br_\bo_\br_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bE_\br_\br_\bo_\br_\bs& a, const _\bE_\br_\br_\bo_\br_\bs& b);\n+51\n+53GTSAM_EXPORT _\bE_\br_\br_\bo_\br_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bE_\br_\br_\bo_\br_\bs& a);\n+54\n+56GTSAM_EXPORT double _\bd_\bo_\bt(const _\bE_\br_\br_\bo_\br_\bs& a, const _\bE_\br_\br_\bo_\br_\bs& b);\n+57\n+59GTSAM_EXPORT void _\ba_\bx_\bp_\by(double alpha, const _\bE_\br_\br_\bo_\br_\bs& x, _\bE_\br_\br_\bo_\br_\bs& y);\n 60\n-62GTSAM_EXPORT double _\bd_\bo_\bt(const _\bP_\bo_\bi_\bn_\bt_\b3& p, const _\bP_\bo_\bi_\bn_\bt_\b3& q,\n-63 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H_p = boost::none,\n-64 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H_q = boost::none);\n-65\n-67template \n-_\b6_\b8_\bP_\bo_\bi_\bn_\bt_\b3 _\bm_\be_\ba_\bn(const CONTAINER& points) {\n-69 if (points.size() == 0) throw std::invalid_argument(\"Point3::mean input\n-container is empty\");\n-70 _\bP_\bo_\bi_\bn_\bt_\b3 sum(0, 0, 0);\n-71 sum = std::accumulate(points.begin(), points.end(), sum);\n-72 return sum / points.size();\n-73}\n-74\n-76GTSAM_EXPORT Point3Pair _\bm_\be_\ba_\bn_\bs(const std::vector &abPointPairs);\n-77\n-78template \n-79struct Range;\n-80\n-81template <>\n-_\b8_\b2struct _\bR_\ba_\bn_\bg_\be<_\bP_\bo_\bi_\bn_\bt_\b3, _\bP_\bo_\bi_\bn_\bt_\b3> {\n-83 typedef double result_type;\n-84 double operator()(const _\bP_\bo_\bi_\bn_\bt_\b3& p, const _\bP_\bo_\bi_\bn_\bt_\b3& q,\n-85 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H1 = boost::none,\n-86 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H2 = boost::none) {\n-87 return _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b3(p, q, H1, H2);\n-88 }\n-89};\n-90\n-91} // namespace gtsam\n-92\n-_\bV_\be_\bc_\bt_\bo_\br_\bS_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-serialization for Vectors\n+62template <>\n+_\b6_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bE_\br_\br_\bo_\br_\bs> {\n+64 static void Print(const _\bE_\br_\br_\bo_\br_\bs& e, const std::string& str = \"\") {\n+65 _\bp_\br_\bi_\bn_\bt(e, str);\n+66 }\n+67 static bool Equals(const _\bE_\br_\br_\bo_\br_\bs& actual, const _\bE_\br_\br_\bo_\br_\bs& expected,\n+68 double tol = 1e-8) {\n+69 return equality(actual, expected, tol);\n+70 }\n+71};\n+72\n+73} // namespace gtsam\n+_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+A thin wrapper around std::list that uses boost's fast_pool_allocator.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n typedef and functions to augment Eigen's VectorXd\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\be_\ba_\bn\n-Point3 mean(const CONTAINER &points)\n-mean\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\bo_\bs_\bs\n-Point3 cross(const Point3 &p, const Point3 &q, OptionalJacobian< 3, 3 > H1,\n-OptionalJacobian< 3, 3 > H2)\n-cross product\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\be_\ba_\bn_\bs\n-Point2Pair means(const std::vector< Point2Pair > &abPointPairs)\n-Calculate the two means of a set of Point2 pairs.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.cpp:116\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b3\n-double distance3(const Point3 &p1, const Point3 &q, OptionalJacobian< 1, 3 >\n-H1, OptionalJacobian< 1, 3 > H2)\n-distance between two points\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\be\n-Point3 normalize(const Point3 &p, OptionalJacobian< 3, 3 > H)\n-normalize, with optional Jacobian\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\br_\bm_\b3\n-double norm3(const Point3 &p, OptionalJacobian< 1, 3 > H)\n-Distance of the point from the origin, with Jacobian.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.cpp:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+Errors operator+(const Errors &a, const Errors &b)\n+Addition.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bx_\bp_\by\n+void axpy(double alpha, const Errors &x, Errors &y)\n+BLAS level 2 style AXPY, y := alpha*x + y\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bE_\br_\br_\bo_\br_\bs\n+Errors createErrors(const VectorValues &V)\n+Break V into pieces according to its start indices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:29\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n double dot(const V1 &a, const V2 &b)\n Dot product.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+Errors operator-(const Errors &a, const Errors &b)\n+Subtraction.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\b _\bV_\be_\bc_\bt_\bo_\br_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bE_\br_\br_\bo_\br_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00410_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00977_source.html", "comments": ["Files 87% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Pose3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Pose3.h
\n+
ImuFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
17// \\callgraph
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/config.h>
\n-
21
\n-\n-\n-
24#include <gtsam/geometry/Rot3.h>
\n-
25#include <gtsam/base/Lie.h>
\n-
26
\n-
27namespace gtsam {
\n-
28
\n-
29class Pose2;
\n-
30// forward declare
\n+
22#pragma once
\n+
23
\n+
24/* GTSAM includes */
\n+\n+\n+\n+
28#include <gtsam/base/debug.h>
\n+
29
\n+
30namespace gtsam {
\n
31
\n-
\n-
37class GTSAM_EXPORT Pose3: public LieGroup<Pose3, 6> {
\n-
38public:
\n-
39
\n-
41 typedef Rot3 Rotation;
\n-
42 typedef Point3 Translation;
\n-
43
\n-
44private:
\n-
45
\n-
46 Rot3 R_;
\n-
47 Point3 t_;
\n-
48
\n-
49public:
\n-
50
\n-
53
\n-
55 Pose3() : R_(traits<Rot3>::Identity()), t_(traits<Point3>::Identity()) {}
\n-
56
\n-
\n-
58 Pose3(const Pose3& pose) :
\n-
59 R_(pose.R_), t_(pose.t_) {
\n-
60 }
\n-
\n+
32#ifdef GTSAM_TANGENT_PREINTEGRATION
\n+
33typedef TangentPreintegration PreintegrationType;
\n+
34#else
\n+
35typedef ManifoldPreintegration PreintegrationType;
\n+
36#endif
\n+
37
\n+
38/*
\n+
39 * If you are using the factor, please cite:
\n+
40 * L. Carlone, Z. Kira, C. Beall, V. Indelman, F. Dellaert, "Eliminating
\n+
41 * conditionally independent sets in factor graphs: a unifying perspective based
\n+
42 * on smart factors", Int. Conf. on Robotics and Automation (ICRA), 2014.
\n+
43 *
\n+
44 * C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, "IMU Preintegration on
\n+
45 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation",
\n+
46 * Robotics: Science and Systems (RSS), 2015.
\n+
47 *
\n+
48 * REFERENCES:
\n+
49 * [1] G.S. Chirikjian, "Stochastic Models, Information Theory, and Lie Groups",
\n+
50 * Volume 2, 2008.
\n+
51 * [2] T. Lupton and S.Sukkarieh, "Visual-Inertial-Aided Navigation for
\n+
52 * High-Dynamic Motion in Built Environments Without Initial Conditions",
\n+
53 * TRO, 28(1):61-76, 2012.
\n+
54 * [3] L. Carlone, S. Williams, R. Roberts, "Preintegrated IMU factor:
\n+
55 * Computation of the Jacobian Matrices", Tech. Report, 2013.
\n+
56 * Available in this repo as "PreintegratedIMUJacobians.pdf".
\n+
57 * [4] C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, "IMU Preintegration on
\n+
58 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation",
\n+
59 * Robotics: Science and Systems (RSS), 2015.
\n+
60 */
\n
61
\n-
\n-
63 Pose3(const Rot3& R, const Point3& t) :
\n-
64 R_(R), t_(t) {
\n-
65 }
\n-
\n-
66
\n-
68 explicit Pose3(const Pose2& pose2);
\n-
69
\n-
\n-
71 Pose3(const Matrix &T) :
\n-
72 R_(T(0, 0), T(0, 1), T(0, 2), T(1, 0), T(1, 1), T(1, 2), T(2, 0), T(2, 1),
\n-
73 T(2, 2)), t_(T(0, 3), T(1, 3), T(2, 3)) {
\n-
74 }
\n-
\n-
75
\n-
77 static Pose3 Create(const Rot3& R, const Point3& t,
\n-
78 OptionalJacobian<6, 3> HR = boost::none,
\n-
79 OptionalJacobian<6, 3> Ht = boost::none);
\n-
80
\n-
86 static boost::optional<Pose3> Align(const Point3Pairs& abPointPairs);
\n-
87
\n-
88 // Version of Pose3::Align that takes 2 matrices.
\n-
89 static boost::optional<Pose3> Align(const Matrix& a, const Matrix& b);
\n-
90
\n-
94
\n-
96 void print(const std::string& s = "") const;
\n-
97
\n-
99 bool equals(const Pose3& pose, double tol = 1e-9) const;
\n-
100
\n-
104
\n-
\n-
106 static Pose3 Identity() {
\n-
107 return Pose3();
\n+
\n+\n+
73
\n+
74 friend class ImuFactor;
\n+
75 friend class ImuFactor2;
\n+
76
\n+
77protected:
\n+
78
\n+\n+
81
\n+
82public:
\n+
83
\n+
\n+\n+
86 preintMeasCov_.setZero();
\n+
87 }
\n+
\n+
88
\n+
\n+
94 PreintegratedImuMeasurements(const boost::shared_ptr<PreintegrationParams>& p,
\n+\n+
96 PreintegrationType(p, biasHat) {
\n+
97 preintMeasCov_.setZero();
\n+
98 }
\n+
\n+
99
\n+
\n+
105 PreintegratedImuMeasurements(const PreintegrationType& base, const Matrix9& preintMeasCov)
\n+
106 : PreintegrationType(base),
\n+
107 preintMeasCov_(preintMeasCov) {
\n
108 }
\n
\n
109
\n-
111 Pose3 inverse() const;
\n-
112
\n-
\n-
114 Pose3 operator*(const Pose3& T) const {
\n-
115 return Pose3(R_ * T.R_, t_ + R_ * T.t_);
\n-
116 }
\n-
\n-
117
\n-
132 Pose3 interpolateRt(const Pose3& T, double t) const;
\n-
133
\n-
137
\n-
139 static Pose3 Expmap(const Vector6& xi, OptionalJacobian<6, 6> Hxi = boost::none);
\n-
140
\n-
142 static Vector6 Logmap(const Pose3& pose, OptionalJacobian<6, 6> Hpose = boost::none);
\n-
143
\n-
148 Matrix6 AdjointMap() const;
\n-
149
\n-
156 Vector6 Adjoint(const Vector6& xi_b,
\n-
157 OptionalJacobian<6, 6> H_this = boost::none,
\n-
158 OptionalJacobian<6, 6> H_xib = boost::none) const;
\n-
159
\n-
161 Vector6 AdjointTranspose(const Vector6& x,
\n-
162 OptionalJacobian<6, 6> H_this = boost::none,
\n-
163 OptionalJacobian<6, 6> H_x = boost::none) const;
\n-
164
\n-
180 static Matrix6 adjointMap(const Vector6& xi);
\n-
181
\n-
185 static Vector6 adjoint(const Vector6& xi, const Vector6& y,
\n-
186 OptionalJacobian<6, 6> Hxi = boost::none,
\n-
187 OptionalJacobian<6, 6> H_y = boost::none);
\n-
188
\n-
189 // temporary fix for wrappers until case issue is resolved
\n-
190 static Matrix6 adjointMap_(const Vector6 &xi) { return adjointMap(xi);}
\n-
191 static Vector6 adjoint_(const Vector6 &xi, const Vector6 &y) { return adjoint(xi, y);}
\n+
\n+\n+
112 }
\n+
\n+
113
\n+
115 void print(const std::string& s = "Preintegrated Measurements:") const override;
\n+
116
\n+
118 bool equals(const PreintegratedImuMeasurements& expected, double tol = 1e-9) const;
\n+
119
\n+
121 void resetIntegration() override;
\n+
122
\n+
133 void integrateMeasurement(const Vector3& measuredAcc,
\n+
134 const Vector3& measuredOmega, const double dt) override;
\n+
135
\n+
137 void integrateMeasurements(const Matrix& measuredAccs, const Matrix& measuredOmegas,
\n+
138 const Matrix& dts);
\n+
139
\n+
141 Matrix preintMeasCov() const { return preintMeasCov_; }
\n+
142
\n+
143#ifdef GTSAM_TANGENT_PREINTEGRATION
\n+
145 void mergeWith(const PreintegratedImuMeasurements& pim, Matrix9* H1, Matrix9* H2);
\n+
146#endif
\n+
147
\n+
148 private:
\n+
150 friend class boost::serialization::access;
\n+
151 template<class ARCHIVE>
\n+
152 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
153 namespace bs = ::boost::serialization;
\n+
154 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegrationType);
\n+
155 ar & BOOST_SERIALIZATION_NVP(preintMeasCov_);
\n+
156 }
\n+
157};
\n+
\n+
158
\n+
\n+
171class GTSAM_EXPORT ImuFactor: public NoiseModelFactorN<Pose3, Vector3, Pose3, Vector3,
\n+
172 imuBias::ConstantBias> {
\n+
173private:
\n+
174
\n+
175 typedef ImuFactor This;
\n+
176 typedef NoiseModelFactorN<Pose3, Vector3, Pose3, Vector3,
\n+\n+
178
\n+\n+
180
\n+
181public:
\n+
182
\n+
184#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5
\n+
185 typedef typename boost::shared_ptr<ImuFactor> shared_ptr;
\n+
186#else
\n+
187 typedef boost::shared_ptr<ImuFactor> shared_ptr;
\n+
188#endif
\n+
189
\n+\n
192
\n-
196 static Vector6 adjointTranspose(const Vector6& xi, const Vector6& y,
\n-
197 OptionalJacobian<6, 6> Hxi = boost::none,
\n-
198 OptionalJacobian<6, 6> H_y = boost::none);
\n-
199
\n-
201 static Matrix6 ExpmapDerivative(const Vector6& xi);
\n-
202
\n-
204 static Matrix6 LogmapDerivative(const Pose3& xi);
\n+
203 ImuFactor(Key pose_i, Key vel_i, Key pose_j, Key vel_j, Key bias,
\n+
204 const PreintegratedImuMeasurements& preintegratedMeasurements);
\n
205
\n-
206 // Chart at origin, depends on compile-time flag GTSAM_POSE3_EXPMAP
\n-
\n-\n-
208 static Pose3 Retract(const Vector6& xi, ChartJacobian Hxi = boost::none);
\n-
209 static Vector6 Local(const Pose3& pose, ChartJacobian Hpose = boost::none);
\n-
210 };
\n-
\n+
206 ~ImuFactor() override {
\n+
207 }
\n+
208
\n+
210 gtsam::NonlinearFactor::shared_ptr clone() const override;
\n
211
\n-
221 static Matrix3 ComputeQforExpmapDerivative(
\n-
222 const Vector6& xi, double nearZeroThreshold = 1e-5);
\n-
223
\n-
224 using LieGroup<Pose3, 6>::inverse; // version with derivative
\n-
225
\n-
\n-
233 static Matrix wedge(double wx, double wy, double wz, double vx, double vy,
\n-
234 double vz) {
\n-
235 return (Matrix(4, 4) << 0., -wz, wy, vx, wz, 0., -wx, vy, -wy, wx, 0., vz, 0., 0., 0., 0.).finished();
\n-
236 }
\n+
214 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const ImuFactor&);
\n+
215 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
216 DefaultKeyFormatter) const override;
\n+
217 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n+
219
\n+
\n+\n+
223 return _PIM_;
\n+
224 }
\n
\n-
237
\n+
225
\n+
229 Vector evaluateError(const Pose3& pose_i, const Vector3& vel_i,
\n+
230 const Pose3& pose_j, const Vector3& vel_j,
\n+
231 const imuBias::ConstantBias& bias_i, boost::optional<Matrix&> H1 =
\n+
232 boost::none, boost::optional<Matrix&> H2 = boost::none,
\n+
233 boost::optional<Matrix&> H3 = boost::none, boost::optional<Matrix&> H4 =
\n+
234 boost::none, boost::optional<Matrix&> H5 = boost::none) const override;
\n+
235
\n+
236#ifdef GTSAM_TANGENT_PREINTEGRATION
\n+
238 static PreintegratedImuMeasurements Merge(
\n+
239 const PreintegratedImuMeasurements& pim01,
\n+
240 const PreintegratedImuMeasurements& pim12);
\n
241
\n-
249 Point3 transformFrom(const Point3& point, OptionalJacobian<3, 6> Hself =
\n-
250 boost::none, OptionalJacobian<3, 3> Hpoint = boost::none) const;
\n-
251
\n-
257 Matrix transformFrom(const Matrix& points) const;
\n+
243 static shared_ptr Merge(const shared_ptr& f01, const shared_ptr& f12);
\n+
244#endif
\n+
245
\n+
246 private:
\n+
248 friend class boost::serialization::access;
\n+
249 template<class ARCHIVE>
\n+
250 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
251 // NoiseModelFactor5 instead of NoiseModelFactorN for backward compatibility
\n+
252 ar & boost::serialization::make_nvp("NoiseModelFactor5",
\n+
253 boost::serialization::base_object<Base>(*this));
\n+
254 ar & BOOST_SERIALIZATION_NVP(_PIM_);
\n+
255 }
\n+
256};
\n+
\n+
257// class ImuFactor
\n
258
\n-
\n-
260 inline Point3 operator*(const Point3& point) const {
\n-
261 return transformFrom(point);
\n-
262 }
\n-
\n-
263
\n-
271 Point3 transformTo(const Point3& point, OptionalJacobian<3, 6> Hself =
\n-
272 boost::none, OptionalJacobian<3, 3> Hpoint = boost::none) const;
\n-
273
\n-
279 Matrix transformTo(const Matrix& points) const;
\n-
280
\n+
\n+
263class GTSAM_EXPORT ImuFactor2 : public NoiseModelFactorN<NavState, NavState, imuBias::ConstantBias> {
\n+
264private:
\n+
265
\n+
266 typedef ImuFactor2 This;
\n+\n+
268
\n+\n+
270
\n+
271public:
\n+
272
\n+\n+
275
\n+
282 ImuFactor2(Key state_i, Key state_j, Key bias,
\n+
283 const PreintegratedImuMeasurements& preintegratedMeasurements);
\n
284
\n-
286 const Rot3& rotation(OptionalJacobian<3, 6> Hself = boost::none) const;
\n+
285 ~ImuFactor2() override {
\n+
286 }
\n
287
\n-
289 const Point3& translation(OptionalJacobian<3, 6> Hself = boost::none) const;
\n+
289 gtsam::NonlinearFactor::shared_ptr clone() const override;
\n
290
\n-
\n-
292 double x() const {
\n-
293 return t_.x();
\n-
294 }
\n-
\n-
295
\n-
\n-
297 double y() const {
\n-
298 return t_.y();
\n-
299 }
\n-
\n-
300
\n-
\n-
302 double z() const {
\n-
303 return t_.z();
\n-
304 }
\n-
\n-
305
\n-
307 Matrix4 matrix() const;
\n-
308
\n-
314 Pose3 transformPoseFrom(const Pose3& aTb, OptionalJacobian<6, 6> Hself = boost::none,
\n-
315 OptionalJacobian<6, 6> HaTb = boost::none) const;
\n-
316
\n-
321 Pose3 transformPoseTo(const Pose3& wTb, OptionalJacobian<6, 6> Hself = boost::none,
\n-
322 OptionalJacobian<6, 6> HwTb = boost::none) const;
\n-
323
\n-
329 double range(const Point3& point, OptionalJacobian<1, 6> Hself = boost::none,
\n-
330 OptionalJacobian<1, 3> Hpoint = boost::none) const;
\n-
331
\n-
337 double range(const Pose3& pose, OptionalJacobian<1, 6> Hself = boost::none,
\n-
338 OptionalJacobian<1, 6> Hpose = boost::none) const;
\n-
339
\n-
345 Unit3 bearing(const Point3& point, OptionalJacobian<2, 6> Hself = boost::none,
\n-
346 OptionalJacobian<2, 3> Hpoint = boost::none) const;
\n-
347
\n-
354 Unit3 bearing(const Pose3& pose, OptionalJacobian<2, 6> Hself = boost::none,
\n-
355 OptionalJacobian<2, 6> Hpose = boost::none) const;
\n-
356
\n-
360
\n-
\n-
366 inline static std::pair<size_t, size_t> translationInterval() {
\n-
367 return std::make_pair(3, 5);
\n-
368 }
\n-
\n-
369
\n-
\n-
375 static std::pair<size_t, size_t> rotationInterval() {
\n-
376 return std::make_pair(0, 2);
\n-
377 }
\n-
\n-
378
\n-
384 Pose3 slerp(double t, const Pose3& other, OptionalJacobian<6, 6> Hx = boost::none,
\n-
385 OptionalJacobian<6, 6> Hy = boost::none) const;
\n-
386
\n-
388 GTSAM_EXPORT
\n-
389 friend std::ostream &operator<<(std::ostream &os, const Pose3& p);
\n-
390
\n-
391 private:
\n-
393 friend class boost::serialization::access;
\n-
394 template<class Archive>
\n-
395 void serialize(Archive & ar, const unsigned int /*version*/) {
\n-
396 ar & BOOST_SERIALIZATION_NVP(R_);
\n-
397 ar & BOOST_SERIALIZATION_NVP(t_);
\n-
398 }
\n-
400
\n-
401#ifdef GTSAM_USE_QUATERNIONS
\n-
402 // Align if we are using Quaternions
\n-
403 public:
\n-\n-
405#endif
\n-
406};
\n-
\n-
407// Pose3 class
\n-
408
\n-
416template<>
\n-
\n-
417inline Matrix wedge<Pose3>(const Vector& xi) {
\n-
418 return Pose3::wedge(xi(0), xi(1), xi(2), xi(3), xi(4), xi(5));
\n-
419}
\n-
\n-
420
\n-
421// Convenience typedef
\n-
422using Pose3Pair = std::pair<Pose3, Pose3>;
\n-
423using Pose3Pairs = std::vector<std::pair<Pose3, Pose3> >;
\n-
424
\n-
425// For MATLAB wrapper
\n-
426typedef std::vector<Pose3> Pose3Vector;
\n-
427
\n-
428template <>
\n-
429struct traits<Pose3> : public internal::LieGroup<Pose3> {};
\n-
430
\n-
431template <>
\n-
432struct traits<const Pose3> : public internal::LieGroup<Pose3> {};
\n-
433
\n-
434// bearing and range traits, used in RangeFactor
\n-
435template <>
\n-
436struct Bearing<Pose3, Point3> : HasBearing<Pose3, Point3, Unit3> {};
\n-
437
\n-
438template<>
\n-
439struct Bearing<Pose3, Pose3> : HasBearing<Pose3, Pose3, Unit3> {};
\n-
440
\n-
441template <typename T>
\n-
442struct Range<Pose3, T> : HasRange<Pose3, T, double> {};
\n-
443
\n-
444} // namespace gtsam
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Base class and basic functions for Lie types.
\n-
Bearing-Range product.
\n-
3D rotation represented as a rotation matrix or quaternion
\n-
3D Point
\n+
293 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const ImuFactor2&);
\n+
294 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n+
295 DefaultKeyFormatter) const override;
\n+
296 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n+
298
\n+
\n+\n+
302 return _PIM_;
\n+
303 }
\n+
\n+
304
\n+
308 Vector evaluateError(const NavState& state_i, const NavState& state_j,
\n+
309 const imuBias::ConstantBias& bias_i, //
\n+
310 boost::optional<Matrix&> H1 = boost::none,
\n+
311 boost::optional<Matrix&> H2 = boost::none,
\n+
312 boost::optional<Matrix&> H3 = boost::none) const override;
\n+
313
\n+
314private:
\n+
315
\n+
317 friend class boost::serialization::access;
\n+
318 template<class ARCHIVE>
\n+
319 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
320 // NoiseModelFactor3 instead of NoiseModelFactorN for backward compatibility
\n+
321 ar & boost::serialization::make_nvp("NoiseModelFactor3",
\n+
322 boost::serialization::base_object<Base>(*this));
\n+
323 ar & BOOST_SERIALIZATION_NVP(_PIM_);
\n+
324 }
\n+
325};
\n+
\n+
326// class ImuFactor2
\n+
327
\n+
328template <>
\n+
329struct traits<PreintegratedImuMeasurements> : public Testable<PreintegratedImuMeasurements> {};
\n+
330
\n+
331template <>
\n+
332struct traits<ImuFactor> : public Testable<ImuFactor> {};
\n+
333
\n+
334template <>
\n+
335struct traits<ImuFactor2> : public Testable<ImuFactor2> {};
\n+
336
\n+
337}
\n+
Global debugging flags.
\n+\n+\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n-
Line3 transformTo(const Pose3 &wTc, const Line3 &wL, OptionalJacobian< 4, 6 > Dpose, OptionalJacobian< 4, 4 > Dline)
Transform a line from world to camera frame.
Definition Line3.cpp:94
\n-
Matrix wedge< Pose3 >(const Vector &xi)
wedge for Pose3:
Definition Pose3.h:417
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n-
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
Definition BearingRange.h:34
\n-
Definition BearingRange.h:40
\n-
Definition BearingRange.h:180
\n-
Definition BearingRange.h:194
\n-
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
static Pose3 Identity()
identity for group operation
Definition Pose3.h:106
\n-
Pose3(const Pose3 &pose)
Copy constructor.
Definition Pose3.h:58
\n-
Pose3()
Default constructor is origin.
Definition Pose3.h:55
\n-
static Matrix wedge(double wx, double wy, double wz, double vx, double vy, double vz)
wedge for Pose3:
Definition Pose3.h:233
\n-
Pose3(const Rot3 &R, const Point3 &t)
Construct from R,t.
Definition Pose3.h:63
\n-
Pose3(const Matrix &T)
Constructor from 4*4 matrix.
Definition Pose3.h:71
\n-
double z() const
get z
Definition Pose3.h:302
\n-
static std::pair< size_t, size_t > rotationInterval()
Return the start and end indices (inclusive) of the rotation component of the exponential map paramet...
Definition Pose3.h:375
\n-
Pose3 operator*(const Pose3 &T) const
compose syntactic sugar
Definition Pose3.h:114
\n-
Rot3 Rotation
Pose Concept requirements.
Definition Pose3.h:41
\n-
double y() const
get y
Definition Pose3.h:297
\n-
static std::pair< size_t, size_t > translationInterval()
Return the start and end indices (inclusive) of the translation component of the exponential map para...
Definition Pose3.h:366
\n-
Point3 operator*(const Point3 &point) const
syntactic sugar for transformFrom
Definition Pose3.h:260
\n-
double x() const
get x
Definition Pose3.h:292
\n-
Definition Pose3.h:207
\n-
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
Definition ImuBias.h:30
\n+
PreintegratedImuMeasurements accumulates (integrates) the IMU measurements (rotation rates and accele...
Definition ImuFactor.h:72
\n+
~PreintegratedImuMeasurements() override
Virtual destructor.
Definition ImuFactor.h:111
\n+
PreintegratedImuMeasurements(const boost::shared_ptr< PreintegrationParams > &p, const imuBias::ConstantBias &biasHat=imuBias::ConstantBias())
Constructor, initializes the class with no measurements.
Definition ImuFactor.h:94
\n+
PreintegratedImuMeasurements(const PreintegrationType &base, const Matrix9 &preintMeasCov)
Construct preintegrated directly from members: base class and preintMeasCov.
Definition ImuFactor.h:105
\n+
PreintegratedImuMeasurements()
Default constructor for serialization and wrappers.
Definition ImuFactor.h:85
\n+
Matrix preintMeasCov() const
Return pre-integrated measurement covariance.
Definition ImuFactor.h:141
\n+
Matrix9 preintMeasCov_
COVARIANCE OF: [PreintROTATION PreintPOSITION PreintVELOCITY].
Definition ImuFactor.h:79
\n+
ImuFactor is a 5-ways factor involving previous state (pose and velocity of the vehicle at previous t...
Definition ImuFactor.h:172
\n+
const PreintegratedImuMeasurements & preintegratedMeasurements() const
Access the preintegrated measurements.
Definition ImuFactor.h:222
\n+
ImuFactor()
Default constructor - only use for serialization.
Definition ImuFactor.h:191
\n+
boost::shared_ptr< ImuFactor > shared_ptr
Shorthand for a smart pointer to a factor.
Definition ImuFactor.h:187
\n+
ImuFactor2 is a ternary factor that uses NavStates rather than Pose/Velocity.
Definition ImuFactor.h:263
\n+
ImuFactor2()
Default constructor - only use for serialization.
Definition ImuFactor.h:274
\n+
const PreintegratedImuMeasurements & preintegratedMeasurements() const
Access the preintegrated measurements.
Definition ImuFactor.h:301
\n+
IMU pre-integration on NavSatet manifold.
Definition ManifoldPreintegration.h:33
\n+
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,402 +1,361 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Pose3.h\n+ImuFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-17// \\callgraph\n-18#pragma once\n-19\n-20#include \n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n-28\n-29class Pose2;\n-30// forward declare\n+22#pragma once\n+23\n+24/* GTSAM includes */\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bd_\be_\bb_\bu_\bg_\b._\bh>\n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n 31\n-_\b3_\b7class GTSAM_EXPORT _\bP_\bo_\bs_\be_\b3: public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n-38public:\n-39\n-_\b4_\b1 typedef _\bR_\bo_\bt_\b3 _\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn;\n-42 typedef _\bP_\bo_\bi_\bn_\bt_\b3 Translation;\n-43\n-44private:\n-45\n-46 _\bR_\bo_\bt_\b3 R_;\n-47 _\bP_\bo_\bi_\bn_\bt_\b3 t_;\n-48\n-49public:\n-50\n-53\n-_\b5_\b5 _\bP_\bo_\bs_\be_\b3() : R_(_\bt_\br_\ba_\bi_\bt_\bs<_\bR_\bo_\bt_\b3>::Identity()), t_(_\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bo_\bi_\bn_\bt_\b3>::Identity()) {}\n-56\n-_\b5_\b8 _\bP_\bo_\bs_\be_\b3(const _\bP_\bo_\bs_\be_\b3& pose) :\n-59 R_(pose.R_), t_(pose.t_) {\n-60 }\n+32#ifdef GTSAM_TANGENT_PREINTEGRATION\n+33typedef TangentPreintegration PreintegrationType;\n+34#else\n+35typedef ManifoldPreintegration PreintegrationType;\n+36#endif\n+37\n+38/*\n+39 * If you are using the factor, please cite:\n+40 * L. Carlone, Z. Kira, C. Beall, V. Indelman, F. Dellaert, \"Eliminating\n+41 * conditionally independent sets in factor graphs: a unifying perspective\n+based\n+42 * on smart factors\", Int. Conf. on Robotics and Automation (ICRA), 2014.\n+43 *\n+44 * C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, \"IMU Preintegration on\n+45 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation\",\n+46 * Robotics: Science and Systems (RSS), 2015.\n+47 *\n+48 * REFERENCES:\n+49 * [1] G.S. Chirikjian, \"Stochastic Models, Information Theory, and Lie\n+Groups\",\n+50 * Volume 2, 2008.\n+51 * [2] T. Lupton and S.Sukkarieh, \"Visual-Inertial-Aided Navigation for\n+52 * High-Dynamic Motion in Built Environments Without Initial Conditions\",\n+53 * TRO, 28(1):61-76, 2012.\n+54 * [3] L. Carlone, S. Williams, R. Roberts, \"Preintegrated IMU factor:\n+55 * Computation of the Jacobian Matrices\", Tech. Report, 2013.\n+56 * Available in this repo as \"PreintegratedIMUJacobians.pdf\".\n+57 * [4] C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, \"IMU\n+Preintegration on\n+58 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation\",\n+59 * Robotics: Science and Systems (RSS), 2015.\n+60 */\n 61\n-_\b6_\b3 _\bP_\bo_\bs_\be_\b3(const _\bR_\bo_\bt_\b3& R, const _\bP_\bo_\bi_\bn_\bt_\b3& t) :\n-64 R_(R), t_(t) {\n-65 }\n-66\n-68 explicit _\bP_\bo_\bs_\be_\b3(const _\bP_\bo_\bs_\be_\b2& pose2);\n-69\n-_\b7_\b1 _\bP_\bo_\bs_\be_\b3(const Matrix &T) :\n-72 R_(T(0, 0), T(0, 1), T(0, 2), T(1, 0), T(1, 1), T(1, 2), T(2, 0), T(2, 1),\n-73 T(2, 2)), t_(T(0, 3), T(1, 3), T(2, 3)) {\n-74 }\n-75\n-77 static _\bP_\bo_\bs_\be_\b3 Create(const _\bR_\bo_\bt_\b3& R, const _\bP_\bo_\bi_\bn_\bt_\b3& t,\n-78 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b3_\b> HR = boost::none,\n-79 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b3_\b> Ht = boost::none);\n-80\n-86 static boost::optional Align(const Point3Pairs& abPointPairs);\n-87\n-88 // Version of Pose3::Align that takes 2 matrices.\n-89 static boost::optional Align(const Matrix& a, const Matrix& b);\n-90\n-94\n-96 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n-97\n-99 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\bo_\bs_\be_\b3& pose, double tol = 1e-9) const;\n-100\n-104\n-_\b1_\b0_\b6 static _\bP_\bo_\bs_\be_\b3 _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n-107 return _\bP_\bo_\bs_\be_\b3();\n+_\b7_\b2class GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs: public _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be {\n+73\n+74 friend class _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br;\n+75 friend class _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2;\n+76\n+77protected:\n+78\n+_\b7_\b9 Matrix9 _\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv_\b_;\n+81\n+82public:\n+83\n+_\b8_\b5 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() {\n+86 preintMeasCov_.setZero();\n+87 }\n+88\n+_\b9_\b4 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const boost::shared_ptr&\n+p,\n+95 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& biasHat = _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs()) :\n+96 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be(p, biasHat) {\n+97 preintMeasCov_.setZero();\n+98 }\n+99\n+_\b1_\b0_\b5 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be& base, const Matrix9&\n+preintMeasCov)\n+106 : _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be(base),\n+107 preintMeasCov_(preintMeasCov) {\n 108 }\n 109\n-111 _\bP_\bo_\bs_\be_\b3 inverse() const;\n-112\n-_\b1_\b1_\b4 _\bP_\bo_\bs_\be_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bs_\be_\b3& T) const {\n-115 return _\bP_\bo_\bs_\be_\b3(R_ * T.R_, t_ + R_ * T.t_);\n-116 }\n-117\n-132 _\bP_\bo_\bs_\be_\b3 interpolateRt(const _\bP_\bo_\bs_\be_\b3& T, double t) const;\n-133\n-137\n-139 static _\bP_\bo_\bs_\be_\b3 Expmap(const Vector6& xi, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hxi = boost::\n-none);\n-140\n-142 static Vector6 Logmap(const _\bP_\bo_\bs_\be_\b3& pose, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hpose =\n-boost::none);\n-143\n-148 Matrix6 AdjointMap() const;\n-149\n-156 Vector6 Adjoint(const Vector6& xi_b,\n-157 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H_this = boost::none,\n-158 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H_xib = boost::none) const;\n-159\n-161 Vector6 AdjointTranspose(const Vector6& x,\n-162 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H_this = boost::none,\n-163 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H_x = boost::none) const;\n-164\n-180 static Matrix6 adjointMap(const Vector6& xi);\n-181\n-185 static Vector6 adjoint(const Vector6& xi, const Vector6& y,\n-186 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hxi = boost::none,\n-187 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> H_y = boost::none);\n-188\n-189 // temporary fix for wrappers until case issue is resolved\n-190 static Matrix6 adjointMap_(const Vector6 &xi) { return adjointMap(xi);}\n-191 static Vector6 adjoint_(const Vector6 &xi, const Vector6 &y) { return\n-adjoint(xi, y);}\n+_\b1_\b1_\b1 _\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() override {\n+112 }\n+113\n+115 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"Preintegrated Measurements:\") const\n+override;\n+116\n+118 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& expected, double tol = 1e-\n+9) const;\n+119\n+121 void resetIntegration() override;\n+122\n+133 void integrateMeasurement(const Vector3& measuredAcc,\n+134 const Vector3& measuredOmega, const double dt) override;\n+135\n+137 void integrateMeasurements(const Matrix& measuredAccs, const Matrix&\n+measuredOmegas,\n+138 const Matrix& dts);\n+139\n+_\b1_\b4_\b1 Matrix _\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv() const { return preintMeasCov_; }\n+142\n+143#ifdef GTSAM_TANGENT_PREINTEGRATION\n+145 void mergeWith(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim, Matrix9* H1,\n+Matrix9* H2);\n+146#endif\n+147\n+148 private:\n+_\b1_\b5_\b0 friend class boost::serialization::access;\n+151 template\n+152 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+153 namespace bs = ::boost::serialization;\n+154 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be);\n+155 ar & BOOST_SERIALIZATION_NVP(preintMeasCov_);\n+156 }\n+157};\n+158\n+_\b1_\b7_\b1class GTSAM_EXPORT _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+173private:\n+174\n+175 typedef _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+176 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN<_\bP_\bo_\bs_\be_\b3, Vector3, _\bP_\bo_\bs_\be_\b3, Vector3,\n+177 _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs> _\bB_\ba_\bs_\be;\n+178\n+179 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs _PIM_;\n+180\n+181public:\n+182\n+184#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5\n+185 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+186#else\n+_\b1_\b8_\b7 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+188#endif\n+189\n+_\b1_\b9_\b1 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br() {}\n 192\n-196 static Vector6 adjointTranspose(const Vector6& xi, const Vector6& y,\n-197 OptionalJacobian<6, 6> Hxi = boost::none,\n-198 OptionalJacobian<6, 6> H_y = boost::none);\n-199\n-201 static Matrix6 ExpmapDerivative(const Vector6& xi);\n-202\n-204 static Matrix6 LogmapDerivative(const Pose3& xi);\n+203 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by pose_i, _\bK_\be_\by vel_i, _\bK_\be_\by pose_j, _\bK_\be_\by vel_j, _\bK_\be_\by bias,\n+204 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& preintegratedMeasurements);\n 205\n-206 // Chart at origin, depends on compile-time flag GTSAM_POSE3_EXPMAP\n-_\b2_\b0_\b7 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n-208 static _\bP_\bo_\bs_\be_\b3 Retract(const Vector6& xi, ChartJacobian Hxi = boost::none);\n-209 static Vector6 Local(const _\bP_\bo_\bs_\be_\b3& pose, ChartJacobian Hpose = boost::none);\n-210 };\n+206 _\b~_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br() override {\n+207 }\n+208\n+210 gtsam::NonlinearFactor::shared_ptr clone() const override;\n 211\n-221 static Matrix3 ComputeQforExpmapDerivative(\n-222 const Vector6& xi, double nearZeroThreshold = 1e-5);\n-223\n-224 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bP_\bo_\bs_\be_\b3, 6>::inverse; // version with derivative\n+214 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const\n+ImuFactor&);\n+215 void print(const std::string& s = \"\", const KeyFormatter& keyFormatter =\n+216 DefaultKeyFormatter) const override;\n+217 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const\n+override;\n+219\n+_\b2_\b2_\b2 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const {\n+223 return _PIM_;\n+224 }\n 225\n-_\b2_\b3_\b3 static Matrix _\bw_\be_\bd_\bg_\be(double wx, double wy, double wz, double vx, double vy,\n-234 double vz) {\n-235 return (Matrix(4, 4) << 0., -wz, wy, vx, wz, 0., -wx, vy, -wy, wx, 0., vz,\n-0., 0., 0., 0.).finished();\n-236 }\n-237\n+229 Vector evaluateError(const _\bP_\bo_\bs_\be_\b3& pose_i, const Vector3& vel_i,\n+230 const _\bP_\bo_\bs_\be_\b3& pose_j, const Vector3& vel_j,\n+231 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i, boost::optional H1 =\n+232 boost::none, boost::optional H2 = boost::none,\n+233 boost::optional H3 = boost::none, boost::optional H4 =\n+234 boost::none, boost::optional H5 = boost::none) const override;\n+235\n+236#ifdef GTSAM_TANGENT_PREINTEGRATION\n+238 static _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs Merge(\n+239 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim01,\n+240 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim12);\n 241\n-249 _\bP_\bo_\bi_\bn_\bt_\b3 transformFrom(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Hself =\n-250 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> Hpoint = boost::none) const;\n-251\n-257 Matrix transformFrom(const Matrix& points) const;\n+243 static shared_ptr Merge(const shared_ptr& f01, const shared_ptr& f12);\n+244#endif\n+245\n+246 private:\n+_\b2_\b4_\b8 friend class boost::serialization::access;\n+249 template\n+250 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+251 // NoiseModelFactor5 instead of NoiseModelFactorN for backward\n+compatibility\n+252 ar & boost::serialization::make_nvp(\"NoiseModelFactor5\",\n+253 boost::serialization::base_object(*this));\n+254 ar & BOOST_SERIALIZATION_NVP(_PIM_);\n+255 }\n+256};\n+257// class ImuFactor\n 258\n-_\b2_\b6_\b0 inline _\bP_\bo_\bi_\bn_\bt_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bi_\bn_\bt_\b3& point) const {\n-261 return transformFrom(point);\n-262 }\n-263\n-271 _\bP_\bo_\bi_\bn_\bt_\b3 _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Hself =\n-272 boost::none, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> Hpoint = boost::none) const;\n-273\n-279 Matrix _\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo(const Matrix& points) const;\n-280\n+_\b2_\b6_\b3class GTSAM_EXPORT _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2 : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+264private:\n+265\n+266 typedef _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2 _\bT_\bh_\bi_\bs;\n+267 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b,_\b _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b,_\b _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b> _\bB_\ba_\bs_\be;\n+268\n+269 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs _PIM_;\n+270\n+271public:\n+272\n+_\b2_\b7_\b4 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2() {}\n+275\n+282 _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2(_\bK_\be_\by state_i, _\bK_\be_\by state_j, _\bK_\be_\by bias,\n+283 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& preintegratedMeasurements);\n 284\n-286 const _\bR_\bo_\bt_\b3& rotation(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Hself = boost::none) const;\n+285 _\b~_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2() override {\n+286 }\n 287\n-289 const _\bP_\bo_\bi_\bn_\bt_\b3& translation(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Hself = boost::none)\n-const;\n+289 gtsam::NonlinearFactor::shared_ptr clone() const override;\n 290\n-_\b2_\b9_\b2 double _\bx() const {\n-293 return t_.x();\n-294 }\n-295\n-_\b2_\b9_\b7 double _\by() const {\n-298 return t_.y();\n-299 }\n-300\n-_\b3_\b0_\b2 double _\bz() const {\n-303 return t_.z();\n-304 }\n-305\n-307 Matrix4 matrix() const;\n-308\n-314 _\bP_\bo_\bs_\be_\b3 transformPoseFrom(const _\bP_\bo_\bs_\be_\b3& aTb, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hself =\n-boost::none,\n-315 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> HaTb = boost::none) const;\n-316\n-321 _\bP_\bo_\bs_\be_\b3 transformPoseTo(const _\bP_\bo_\bs_\be_\b3& wTb, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hself =\n-boost::none,\n-322 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> HwTb = boost::none) const;\n-323\n-329 double range(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Hself = boost::\n-none,\n-330 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> Hpoint = boost::none) const;\n-331\n-337 double range(const _\bP_\bo_\bs_\be_\b3& pose, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Hself = boost::none,\n-338 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b6_\b> Hpose = boost::none) const;\n-339\n-345 _\bU_\bn_\bi_\bt_\b3 bearing(const _\bP_\bo_\bi_\bn_\bt_\b3& point, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Hself = boost::\n-none,\n-346 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> Hpoint = boost::none) const;\n-347\n-354 _\bU_\bn_\bi_\bt_\b3 bearing(const _\bP_\bo_\bs_\be_\b3& pose, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Hself = boost::\n-none,\n-355 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b6_\b> Hpose = boost::none) const;\n-356\n-360\n-_\b3_\b6_\b6 inline static std::pair _\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() {\n-367 return std::make_pair(3, 5);\n-368 }\n-369\n-_\b3_\b7_\b5 static std::pair _\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() {\n-376 return std::make_pair(0, 2);\n-377 }\n-378\n-384 _\bP_\bo_\bs_\be_\b3 slerp(double t, const _\bP_\bo_\bs_\be_\b3& other, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hx =\n-boost::none,\n-385 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b6_\b,_\b _\b6_\b> Hy = boost::none) const;\n-386\n-388 GTSAM_EXPORT\n-389 friend std::ostream &operator<<(std::ostream &os, const _\bP_\bo_\bs_\be_\b3& p);\n-390\n-391 private:\n-_\b3_\b9_\b3 friend class boost::serialization::access;\n-394 template\n-395 void serialize(Archive & ar, const unsigned int /*version*/) {\n-396 ar & BOOST_SERIALIZATION_NVP(R_);\n-397 ar & BOOST_SERIALIZATION_NVP(t_);\n-398 }\n-400\n-401#ifdef GTSAM_USE_QUATERNIONS\n-402 // Align if we are using Quaternions\n-403 public:\n-404 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-405#endif\n-406};\n-407// Pose3 class\n-408\n-416template<>\n-_\b4_\b1_\b7inline Matrix _\bw_\be_\bd_\bg_\be_\b<_\bP_\bo_\bs_\be_\b3_\b>(const Vector& xi) {\n-418 return _\bP_\bo_\bs_\be_\b3_\b:_\b:_\bw_\be_\bd_\bg_\be(xi(0), xi(1), xi(2), xi(3), xi(4), xi(5));\n-419}\n-420\n-421// Convenience typedef\n-422using Pose3Pair = std::pair;\n-423using Pose3Pairs = std::vector >;\n-424\n-425// For MATLAB wrapper\n-426typedef std::vector Pose3Vector;\n-427\n-428template <>\n-_\b4_\b2_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bo_\bs_\be_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-430\n-431template <>\n-_\b4_\b3_\b2struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-433\n-434// bearing and range traits, used in RangeFactor\n-435template <>\n-_\b4_\b3_\b6struct _\bB_\be_\ba_\br_\bi_\bn_\bg<_\bP_\bo_\bs_\be_\b3, _\bP_\bo_\bi_\bn_\bt_\b3> : _\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg {};\n-437\n-438template<>\n-_\b4_\b3_\b9struct _\bB_\be_\ba_\br_\bi_\bn_\bg<_\bP_\bo_\bs_\be_\b3, _\bP_\bo_\bs_\be_\b3> : _\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg {};\n-440\n-441template \n-_\b4_\b4_\b2struct _\bR_\ba_\bn_\bg_\be<_\bP_\bo_\bs_\be_\b3, T> : _\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be {};\n-443\n-444} // namespace gtsam\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n-_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n-Bearing-Range product.\n-_\bR_\bo_\bt_\b3_\b._\bh\n-3D rotation represented as a rotation matrix or quaternion\n-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\n+293 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const\n+ImuFactor2&);\n+294 void print(const std::string& s = \"\", const KeyFormatter& keyFormatter =\n+295 DefaultKeyFormatter) const override;\n+296 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const\n+override;\n+298\n+_\b3_\b0_\b1 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const {\n+302 return _PIM_;\n+303 }\n+304\n+308 Vector evaluateError(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state_i, const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state_j,\n+309 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i, //\n+310 boost::optional H1 = boost::none,\n+311 boost::optional H2 = boost::none,\n+312 boost::optional H3 = boost::none) const override;\n+313\n+314private:\n+315\n+_\b3_\b1_\b7 friend class boost::serialization::access;\n+318 template\n+319 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+320 // NoiseModelFactor3 instead of NoiseModelFactorN for backward\n+compatibility\n+321 ar & boost::serialization::make_nvp(\"NoiseModelFactor3\",\n+322 boost::serialization::base_object(*this));\n+323 ar & BOOST_SERIALIZATION_NVP(_PIM_);\n+324 }\n+325};\n+326// class ImuFactor2\n+327\n+328template <>\n+_\b3_\b2_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs> : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+330\n+331template <>\n+_\b3_\b3_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+333\n+334template <>\n+_\b3_\b3_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+336\n+337}\n+_\bd_\be_\bb_\bu_\bg_\b._\bh\n+Global debugging flags.\n+_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bT_\bo\n-Line3 transformTo(const Pose3 &wTc, const Line3 &wL, OptionalJacobian< 4, 6 >\n-Dpose, OptionalJacobian< 4, 4 > Dline)\n-Transform a line from world to camera frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Line3.cpp:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bd_\bg_\be_\b<_\b _\bP_\bo_\bs_\be_\b3_\b _\b>\n-Matrix wedge< Pose3 >(const Vector &xi)\n-wedge for Pose3:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:417\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-A CRTP helper class that implements Lie group methods Prerequisites: methods\n-operator*,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Both LieGroupTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\ba_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bB_\be_\ba_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:180\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\ba_\bs_\bR_\ba_\bn_\bg_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:194\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-A 2D pose (Point2,Rot2)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n A 3D pose (R,t) : (Rot3,Point3)\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static Pose3 Identity()\n-identity for group operation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-Pose3(const Pose3 &pose)\n-Copy constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-Pose3()\n-Default constructor is origin.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bw_\be_\bd_\bg_\be\n-static Matrix wedge(double wx, double wy, double wz, double vx, double vy,\n-double vz)\n-wedge for Pose3:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:233\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-Pose3(const Rot3 &R, const Point3 &t)\n-Construct from R,t.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-Pose3(const Matrix &T)\n-Constructor from 4*4 matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bz\n-double z() const\n-get z\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:302\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n-static std::pair< size_t, size_t > rotationInterval()\n-Return the start and end indices (inclusive) of the rotation component of the\n-exponential map paramet...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:375\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Pose3 operator*(const Pose3 &T) const\n-compose syntactic sugar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-Rot3 Rotation\n-Pose Concept requirements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\by\n-double y() const\n-get y\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:297\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\bi_\bo_\bn_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n-static std::pair< size_t, size_t > translationInterval()\n-Return the start and end indices (inclusive) of the translation component of\n-the exponential map para...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:366\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Point3 operator*(const Point3 &point) const\n-syntactic sugar for transformFrom\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bx\n-double x() const\n-get x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:292\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n-symbol GTSAM_USE_QUATERNIO...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedImuMeasurements accumulates (integrates) the IMU measurements\n+(rotation rates and accele...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+~PreintegratedImuMeasurements() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedImuMeasurements(const boost::shared_ptr< PreintegrationParams >\n+&p, const imuBias::ConstantBias &biasHat=imuBias::ConstantBias())\n+Constructor, initializes the class with no measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedImuMeasurements(const PreintegrationType &base, const Matrix9\n+&preintMeasCov)\n+Construct preintegrated directly from members: base class and preintMeasCov.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+PreintegratedImuMeasurements()\n+Default constructor for serialization and wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv\n+Matrix preintMeasCov() const\n+Return pre-integrated measurement covariance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bI_\bm_\bu_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv_\b_\n+Matrix9 preintMeasCov_\n+COVARIANCE OF: [PreintROTATION PreintPOSITION PreintVELOCITY].\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n+ImuFactor is a 5-ways factor involving previous state (pose and velocity of the\n+vehicle at previous t...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:172\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+const PreintegratedImuMeasurements & preintegratedMeasurements() const\n+Access the preintegrated measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:222\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n+ImuFactor()\n+Default constructor - only use for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:191\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< ImuFactor > shared_ptr\n+Shorthand for a smart pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:187\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+ImuFactor2 is a ternary factor that uses NavStates rather than Pose/Velocity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:263\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2\n+ImuFactor2()\n+Default constructor - only use for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:274\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n+const PreintegratedImuMeasurements & preintegratedMeasurements() const\n+Access the preintegrated measurements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuFactor.h:301\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n+IMU pre-integration on NavSatet manifold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n+Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n+not make sense to make...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bP_\bo_\bs_\be_\b3_\b._\bh\n+ * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n+ * _\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00425_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00740_source.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SimpleCamera.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/JacobianFactor-inl.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n
\n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SimpleCamera.h
\n+
JacobianFactor-inl.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-\n-\n-\n-\n-\n-\n-
29
\n-
30namespace gtsam {
\n+\n+
22
\n+
23namespace gtsam {
\n+
24
\n+
25 /* ************************************************************************* */
\n+
26 template<typename TERMS>
\n+
\n+
27 JacobianFactor::JacobianFactor(const TERMS&terms, const Vector &b, const SharedDiagonal& model)
\n+
28 {
\n+
29 fillTerms(terms, b, model);
\n+
30 }
\n+
\n
31
\n-\n-
35 using PinholeCameraCal3Bundler = gtsam::PinholeCamera<gtsam::Cal3Bundler>;
\n-
36 using PinholeCameraCal3DS2 = gtsam::PinholeCamera<gtsam::Cal3DS2>;
\n-
37 using PinholeCameraCal3Unified = gtsam::PinholeCamera<gtsam::Cal3Unified>;
\n-
38 using PinholeCameraCal3Fisheye = gtsam::PinholeCamera<gtsam::Cal3Fisheye>;
\n-
39
\n-
40#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
45class GTSAM_EXPORT SimpleCamera : public PinholeCameraCal3_S2 {
\n-
46
\n-
47 typedef PinholeCamera<Cal3_S2> Base;
\n-
48 typedef boost::shared_ptr<SimpleCamera> shared_ptr;
\n-
49
\n-
50public:
\n-
51
\n-
54
\n-
56 SimpleCamera() :
\n-
57 Base() {
\n-
58 }
\n-
59
\n-
61 explicit SimpleCamera(const Pose3& pose) :
\n-
62 Base(pose) {
\n-
63 }
\n-
64
\n-
66 SimpleCamera(const Pose3& pose, const Cal3_S2& K) :
\n-
67 Base(pose, K) {
\n-
68 }
\n-
69
\n-
73
\n-
81 static SimpleCamera Level(const Cal3_S2 &K, const Pose2& pose2,
\n-
82 double height) {
\n-
83 return SimpleCamera(Base::LevelPose(pose2, height), K);
\n-
84 }
\n-
85
\n-
87 static SimpleCamera Level(const Pose2& pose2, double height) {
\n-
88 return SimpleCamera::Level(Cal3_S2(), pose2, height);
\n-
89 }
\n-
90
\n-
100 static SimpleCamera Lookat(const Point3& eye, const Point3& target,
\n-
101 const Point3& upVector, const Cal3_S2& K = Cal3_S2()) {
\n-
102 return SimpleCamera(Base::LookatPose(eye, target, upVector), K);
\n-
103 }
\n-
104
\n+
32 /* ************************************************************************* */
\n+
33 template<typename KEYS>
\n+
\n+\n+
35 const KEYS& keys, const VerticalBlockMatrix& augmentedMatrix, const SharedDiagonal& model) :
\n+
36 Base(keys), Ab_(augmentedMatrix)
\n+
37 {
\n+
38 // Check noise model dimension
\n+
39 if(model && (DenseIndex)model->dim() != augmentedMatrix.rows())
\n+
40 throw InvalidNoiseModel(augmentedMatrix.rows(), model->dim());
\n+
41
\n+
42 // Check number of variables
\n+
43 if((DenseIndex)Base::keys_.size() != augmentedMatrix.nBlocks() - 1)
\n+
44 throw std::invalid_argument(
\n+
45 "Error in JacobianFactor constructor input. Number of provided keys plus\\n"
\n+
46 "one for the RHS vector must equal the number of provided matrix blocks.");
\n+
47
\n+
48 // Check RHS dimension
\n+
49 if(augmentedMatrix(augmentedMatrix.nBlocks() - 1).cols() != 1)
\n+
50 throw std::invalid_argument(
\n+
51 "Error in JacobianFactor constructor input. The last provided matrix block\\n"
\n+
52 "must be the RHS vector, but the last provided block had more than one column.");
\n+
53
\n+
54 // Take noise model
\n+
55 model_ = model;
\n+
56 }
\n+
\n+
57
\n+
58 /* ************************************************************************* */
\n+
59 template<typename TERMS>
\n+
\n+
60 void JacobianFactor::fillTerms(const TERMS& terms, const Vector& b, const SharedDiagonal& noiseModel)
\n+
61 {
\n+
62 // Check noise model dimension
\n+
63 if(noiseModel && (DenseIndex)noiseModel->dim() != b.size())
\n+
64 throw InvalidNoiseModel(b.size(), noiseModel->dim());
\n+
65
\n+
66 // Resize base class key vector
\n+
67 Base::keys_.resize(terms.size());
\n+
68
\n+
69 // Get dimensions of matrices
\n+
70 std::vector<size_t> dimensions;
\n+
71 dimensions.reserve(terms.size());
\n+
72 for(typename TERMS::const_iterator it = terms.begin(); it != terms.end(); ++it) {
\n+
73 const std::pair<Key, Matrix>& term = *it;
\n+
74 const Matrix& Ai = term.second;
\n+
75 dimensions.push_back(Ai.cols());
\n+
76 }
\n+
77
\n+
78 // Construct block matrix
\n+
79 Ab_ = VerticalBlockMatrix(dimensions, b.size(), true);
\n+
80
\n+
81 // Check and add terms
\n+
82 DenseIndex i = 0; // For block index
\n+
83 for(typename TERMS::const_iterator it = terms.begin(); it != terms.end(); ++it) {
\n+
84 const std::pair<Key, Matrix>& term = *it;
\n+
85 Key key = term.first;
\n+
86 const Matrix& Ai = term.second;
\n+
87
\n+
88 // Check block rows
\n+
89 if(Ai.rows() != Ab_.rows())
\n+
90 throw InvalidMatrixBlock(Ab_.rows(), Ai.rows());
\n+
91
\n+
92 // Assign key and matrix
\n+
93 Base::keys_[i] = key;
\n+
94 Ab_(i) = Ai;
\n+
95
\n+
96 // Increment block index
\n+
97 ++ i;
\n+
98 }
\n+
99
\n+
100 // Assign RHS vector
\n+
101 getb() = b;
\n+
102
\n+
103 // Assign noise model
\n+
104 model_ = noiseModel;
\n+
105 }
\n+
\n+
106
\n+
107} // gtsam
\n
108
\n-
110 explicit SimpleCamera(const Vector &v) :
\n-
111 Base(v) {
\n-
112 }
\n-
113
\n-
115 SimpleCamera(const Vector &v, const Vector &K) :
\n-
116 Base(v, K) {
\n-
117 }
\n-
118
\n-
120 SimpleCamera::shared_ptr clone() const { return boost::make_shared<SimpleCamera>(*this); }
\n-
121
\n-
122
\n-
126
\n-
128 SimpleCamera retract(const Vector& d) const {
\n-
129 if ((size_t) d.size() == 6)
\n-
130 return SimpleCamera(this->pose().retract(d), calibration());
\n-
131 else
\n-
132 return SimpleCamera(this->pose().retract(d.head(6)),
\n-
133 calibration().retract(d.tail(calibration().dim())));
\n-
134 }
\n-
135
\n-
137
\n-
138};
\n-
139
\n-
141GTSAM_EXPORT SimpleCamera simpleCamera(const Matrix34& P);
\n-
142
\n-
143// manifold traits
\n-
144template <>
\n-
145struct traits<SimpleCamera> : public internal::Manifold<SimpleCamera> {};
\n-
146
\n-
147template <>
\n-
148struct traits<const SimpleCamera> : public internal::Manifold<SimpleCamera> {};
\n-
149
\n-
150// range traits, used in RangeFactor
\n-
151template <typename T>
\n-
152struct Range<SimpleCamera, T> : HasRange<SimpleCamera, T, double> {};
\n-
153
\n-
154#endif
\n-
155
\n-
156} // namespace gtsam
\n-
Bearing-Range product.
\n-
Calibration of a fisheye camera.
\n-
The most common 5DOF 3D->2D calibration.
\n-
Calibration of a camera with radial distortion, calculations in base class Cal3DS2_Base.
\n-
Unified Calibration Model, see Mei07icra for details.
\n-
Base class for all pinhole cameras.
\n-
Calibration used by Bundler.
\n+
Exceptions that may be thrown by linear solver components.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
gtsam::PinholeCamera< gtsam::Cal3_S2 > PinholeCameraCal3_S2
Convenient aliases for Pinhole camera classes with different calibrations.
Definition SimpleCamera.h:34
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n-
The most common 5DOF 3D->2D calibration.
Definition Cal3_S2.h:34
\n-
A pinhole camera class that has a Pose3 and a Calibration.
Definition PinholeCamera.h:33
\n-
A 2D pose (Point2,Rot2)
Definition Pose2.h:36
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n+
DenseIndex rows() const
Row size.
Definition VerticalBlockMatrix.h:115
\n+
DenseIndex cols() const
Column size.
Definition VerticalBlockMatrix.h:118
\n+
DenseIndex nBlocks() const
Block count.
Definition VerticalBlockMatrix.h:121
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
size_t size() const
Definition Factor.h:157
\n+
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n+
const constBVector getb() const
Get a view of the r.h.s.
Definition JacobianFactor.h:297
\n+
JacobianFactor()
default constructor for I/O
Definition JacobianFactor.cpp:54
\n+
void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal &noiseModel)
Internal function to fill blocks and set dimensions.
Definition JacobianFactor-inl.h:60
\n+
An exception indicating that the noise model dimension passed into a JacobianFactor has a different d...
Definition linearExceptions.h:106
\n+
An exception indicating that a matrix block passed into a JacobianFactor has a different dimensionali...
Definition linearExceptions.h:124
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,14 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SimpleCamera.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+JacobianFactor-inl.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n@@ -16,145 +15,169 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+25 /* *************************************************************************\n+*/\n+26 template\n+_\b2_\b7 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const TERMS&terms, const Vector &b, const\n+SharedDiagonal& model)\n+28 {\n+29 _\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(terms, b, model);\n+30 }\n 31\n-_\b3_\b4 using _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\bC_\ba_\bl_\b3_\b__\bS_\b2 = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b>;\n-35 using PinholeCameraCal3Bundler = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b>;\n-36 using PinholeCameraCal3DS2 = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b>;\n-37 using PinholeCameraCal3Unified = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b>;\n-38 using PinholeCameraCal3Fisheye = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b>;\n-39\n-40#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-45class GTSAM_EXPORT SimpleCamera : public _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\bC_\ba_\bl_\b3_\b__\bS_\b2 {\n-46\n-47 typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b> Base;\n-48 typedef boost::shared_ptr shared_ptr;\n-49\n-50public:\n-51\n-54\n-56 SimpleCamera() :\n-57 Base() {\n-58 }\n-59\n-61 explicit SimpleCamera(const _\bP_\bo_\bs_\be_\b3& pose) :\n-62 Base(pose) {\n-63 }\n-64\n-66 SimpleCamera(const _\bP_\bo_\bs_\be_\b3& pose, const _\bC_\ba_\bl_\b3_\b__\bS_\b2& K) :\n-67 Base(pose, K) {\n-68 }\n-69\n-73\n-81 static SimpleCamera Level(const _\bC_\ba_\bl_\b3_\b__\bS_\b2 &K, const _\bP_\bo_\bs_\be_\b2& pose2,\n-82 double height) {\n-83 return SimpleCamera(Base::LevelPose(pose2, height), K);\n-84 }\n-85\n-87 static SimpleCamera Level(const _\bP_\bo_\bs_\be_\b2& pose2, double height) {\n-88 return SimpleCamera::Level(_\bC_\ba_\bl_\b3_\b__\bS_\b2(), pose2, height);\n-89 }\n-90\n-100 static SimpleCamera Lookat(const _\bP_\bo_\bi_\bn_\bt_\b3& eye, const _\bP_\bo_\bi_\bn_\bt_\b3& target,\n-101 const _\bP_\bo_\bi_\bn_\bt_\b3& upVector, const _\bC_\ba_\bl_\b3_\b__\bS_\b2& K = _\bC_\ba_\bl_\b3_\b__\bS_\b2()) {\n-102 return SimpleCamera(Base::LookatPose(eye, target, upVector), K);\n-103 }\n-104\n+32 /* *************************************************************************\n+*/\n+33 template\n+_\b3_\b4 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n+35 const KEYS& keys, const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& augmentedMatrix, const\n+SharedDiagonal& model) :\n+36 _\bB_\ba_\bs_\be(keys), Ab_(augmentedMatrix)\n+37 {\n+38 // Check noise model dimension\n+39 if(model && (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)model->dim() != augmentedMatrix._\br_\bo_\bw_\bs())\n+40 throw _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(augmentedMatrix._\br_\bo_\bw_\bs(), model->dim());\n+41\n+42 // Check number of variables\n+43 if((_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)_\bB_\ba_\bs_\be_\b:_\b:_\bk_\be_\by_\bs_\b_._\bs_\bi_\bz_\be() != augmentedMatrix._\bn_\bB_\bl_\bo_\bc_\bk_\bs() - 1)\n+44 throw std::invalid_argument(\n+45 \"Error in JacobianFactor constructor input. Number of provided keys plus\\n\"\n+46 \"one for the RHS vector must equal the number of provided matrix blocks.\");\n+47\n+48 // Check RHS dimension\n+49 if(augmentedMatrix(augmentedMatrix._\bn_\bB_\bl_\bo_\bc_\bk_\bs() - 1)._\bc_\bo_\bl_\bs() != 1)\n+50 throw std::invalid_argument(\n+51 \"Error in JacobianFactor constructor input. The last provided matrix\n+block\\n\"\n+52 \"must be the RHS vector, but the last provided block had more than one\n+column.\");\n+53\n+54 // Take noise model\n+55 model_ = model;\n+56 }\n+57\n+58 /* *************************************************************************\n+*/\n+59 template\n+_\b6_\b0 void _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(const TERMS& terms, const Vector& b, const\n+SharedDiagonal& noiseModel)\n+61 {\n+62 // Check noise model dimension\n+63 if(noiseModel && (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)noiseModel->dim() != b.size())\n+64 throw _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(b.size(), noiseModel->dim());\n+65\n+66 // Resize base class key vector\n+67 _\bB_\ba_\bs_\be_\b:_\b:_\bk_\be_\by_\bs_\b_.resize(terms.size());\n+68\n+69 // Get dimensions of matrices\n+70 std::vector dimensions;\n+71 dimensions.reserve(terms.size());\n+72 for(typename TERMS::const_iterator it = terms.begin(); it != terms.end();\n+++it) {\n+73 const std::pair& term = *it;\n+74 const Matrix& Ai = term.second;\n+75 dimensions.push_back(Ai.cols());\n+76 }\n+77\n+78 // Construct block matrix\n+79 Ab_ = _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(dimensions, b.size(), true);\n+80\n+81 // Check and add terms\n+82 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i = 0; // For block index\n+83 for(typename TERMS::const_iterator it = terms.begin(); it != terms.end();\n+++it) {\n+84 const std::pair& term = *it;\n+85 _\bK_\be_\by key = term.first;\n+86 const Matrix& Ai = term.second;\n+87\n+88 // Check block rows\n+89 if(Ai.rows() != Ab_._\br_\bo_\bw_\bs())\n+90 throw _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk(Ab_._\br_\bo_\bw_\bs(), Ai.rows());\n+91\n+92 // Assign key and matrix\n+93 _\bB_\ba_\bs_\be_\b:_\b:_\bk_\be_\by_\bs_\b_[i] = key;\n+94 Ab_(i) = Ai;\n+95\n+96 // Increment block index\n+97 ++ i;\n+98 }\n+99\n+100 // Assign RHS vector\n+101 _\bg_\be_\bt_\bb() = b;\n+102\n+103 // Assign noise model\n+104 model_ = noiseModel;\n+105 }\n+106\n+107} // gtsam\n 108\n-110 explicit SimpleCamera(const Vector &v) :\n-111 Base(v) {\n-112 }\n-113\n-115 SimpleCamera(const Vector &v, const Vector &K) :\n-116 Base(v, K) {\n-117 }\n-118\n-120 SimpleCamera::shared_ptr clone() const { return boost::\n-make_shared(*this); }\n-121\n-122\n-126\n-128 SimpleCamera retract(const Vector& d) const {\n-129 if ((size_t) d.size() == 6)\n-130 return SimpleCamera(this->pose().retract(d), calibration());\n-131 else\n-132 return SimpleCamera(this->pose().retract(d.head(6)),\n-133 calibration().retract(d.tail(calibration().dim())));\n-134 }\n-135\n-137\n-138};\n-139\n-141GTSAM_EXPORT SimpleCamera simpleCamera(const Matrix34& P);\n-142\n-143// manifold traits\n-144template <>\n-145struct traits : public internal::Manifold {};\n-146\n-147template <>\n-148struct traits : public internal::Manifold\n-{};\n-149\n-150// range traits, used in RangeFactor\n-151template \n-152struct Range : HasRange {};\n-153\n-154#endif\n-155\n-156} // namespace gtsam\n-_\bB_\be_\ba_\br_\bi_\bn_\bg_\bR_\ba_\bn_\bg_\be_\b._\bh\n-Bearing-Range product.\n-_\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bh\n-Calibration of a fisheye camera.\n-_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n-The most common 5DOF 3D->2D calibration.\n-_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bh\n-Calibration of a camera with radial distortion, calculations in base class\n-Cal3DS2_Base.\n-_\bC_\ba_\bl_\b3_\bU_\bn_\bi_\bf_\bi_\be_\bd_\b._\bh\n-Unified Calibration Model, see Mei07icra for details.\n-_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n-Base class for all pinhole cameras.\n-_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n-Calibration used by Bundler.\n+_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n+Exceptions that may be thrown by linear solver components.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\bC_\ba_\bl_\b3_\b__\bS_\b2\n-gtsam::PinholeCamera< gtsam::Cal3_S2 > PinholeCameraCal3_S2\n-Convenient aliases for Pinhole camera classes with different calibrations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SimpleCamera.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n-The most common 5DOF 3D->2D calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n-A pinhole camera class that has a Pose3 and a Calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b2\n-A 2D pose (Point2,Rot2)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose2.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of vertical blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n+DenseIndex rows() const\n+Row size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n+DenseIndex cols() const\n+Column size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bB_\bl_\bo_\bc_\bk_\bs\n+DenseIndex nBlocks() const\n+Block count.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:121\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n+size_t size() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+An abstract virtual base class for JacobianFactor and HessianFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bb\n+const constBVector getb() const\n+Get a view of the r.h.s.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:297\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+JacobianFactor()\n+default constructor for I/O\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs\n+void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal\n+&noiseModel)\n+Internal function to fill blocks and set dimensions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor-inl.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+An exception indicating that the noise model dimension passed into a\n+JacobianFactor has a different d...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk\n+An exception indicating that a matrix block passed into a JacobianFactor has a\n+different dimensionali...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:124\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bi_\bm_\bp_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * J\bJa\bac\bco\bob\bbi\bia\ban\bnF\bFa\bac\bct\bto\bor\br-\b-i\bin\bnl\bl.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00446.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00275.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
Cal3.cpp File Reference
\n+
Cal3_S2.cpp File Reference
\n
\n
\n \n-

Common code for all calibration models. \n+

The most common 5DOF 3D->2D calibration. \n More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n+\n+\n

\n Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const Cal3 &cal)
 
\n+std::ostream & gtsam::operator<< (std::ostream &os, const Cal3_S2 &cal)
 
\n

Detailed Description

\n-

Common code for all calibration models.

\n+

The most common 5DOF 3D->2D calibration.

\n
Author
Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Cal3.cpp File Reference\n-Common code for all calibration models. _\bM_\bo_\br_\be_\b._\b._\b.\n+Cal3_S2.cpp File Reference\n+The most common 5DOF 3D->2D calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3 &cal)\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\b__\bS_\b2 &cal)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Common code for all calibration models.\n+The most common 5DOF 3D->2D calibration.\n Author\n Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\b._\bc_\bp_\bp\n+ * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00464_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00437_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n
Line3.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
3 * Atlanta, Georgia 30332-0415
\n
4 * All Rights Reserved
\n
5 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
6 * See LICENSE for the license information
\n
7 * -------------------------------------------------------------------------- */
\n
8
\n
15// \\callgraph
\n
16
\n
17#pragma once
\n
18
\n-
19#include <gtsam/geometry/Rot3.h>
\n-\n+
19#include <gtsam/geometry/Rot3.h>
\n+\n
21
\n
22namespace gtsam {
\n
23
\n
24class Line3;
\n
25
\n
34GTSAM_EXPORT Line3 transformTo(const Pose3 &wTc, const Line3 &wL,
\n
35 OptionalJacobian<4, 6> Dpose = boost::none,
\n@@ -190,16 +190,16 @@\n
153
\n
154template<>
\n
155struct traits<Line3> : public internal::Manifold<Line3> {};
\n
156
\n
157template<>
\n
158struct traits<const Line3> : public internal::Manifold<Line3> {};
\n
159}
\n-
3D rotation represented as a rotation matrix or quaternion
\n-
3D Pose
\n+
3D Pose
\n+
3D rotation represented as a rotation matrix or quaternion
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
Line3 transformTo(const Pose3 &wTc, const Line3 &wL, OptionalJacobian< 4, 6 > Dpose, OptionalJacobian< 4, 4 > Dline)
Transform a line from world to camera frame.
Definition Line3.cpp:94
\n
Point2_ project(const Point3_ &p_cam)
Expression version of PinholeBase::Project.
Definition expressions.h:131
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n@@ -215,13 +215,13 @@\n
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -81,18 +81,18 @@\n 153\n 154template<>\n _\b1_\b5_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bL_\bi_\bn_\be_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n 156\n 157template<>\n _\b1_\b5_\b8struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n 159}\n-_\bR_\bo_\bt_\b3_\b._\bh\n-3D rotation represented as a rotation matrix or quaternion\n _\bP_\bo_\bs_\be_\b3_\b._\bh\n 3D Pose\n+_\bR_\bo_\bt_\b3_\b._\bh\n+3D rotation represented as a rotation matrix or quaternion\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00467.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00794.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Bundler.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/AcceleratedPowerMethod.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
Cal3Bundler.h File Reference
\n+Namespaces |\n+Typedefs
\n+
AcceleratedPowerMethod.h File Reference
\n \n
\n \n-

Calibration used by Bundler. \n+

accelerated power method for fast eigenvalue and eigenvector computation \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::Cal3Bundler
 Calibration used by Bundler. More...
 
struct  gtsam::traits< Cal3Bundler >
 
struct  gtsam::traits< const Cal3Bundler >
class  gtsam::AcceleratedPowerMethod< Operator >
 Compute maximum Eigenpair with accelerated power method. More...
 
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Typedefs

\n+using gtsam::Sparse = Eigen::SparseMatrix< double >
 
\n

Detailed Description

\n-

Calibration used by Bundler.

\n-
Date
Sep 25, 2010
\n-
Author
Yong Dian Jian
\n-
\n-Varun Agrawal
\n+

accelerated power method for fast eigenvalue and eigenvector computation

\n+
Date
Sept 2020
\n+
Author
Jing Wu
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Cal3Bundler.h File Reference\n-Calibration used by Bundler. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+AcceleratedPowerMethod.h File Reference\n+accelerated power method for fast eigenvalue and eigenvector computation\n+_\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br\n-\u00a0 Calibration used by Bundler. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b _\b>\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b<_\b _\bO_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b>\n+\u00a0 Compute maximum Eigenpair with accelerated power method. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+using\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:S\bSp\bpa\bar\brs\bse\be = Eigen::SparseMatrix< double >\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Calibration used by Bundler.\n+accelerated power method for fast eigenvalue and eigenvector computation\n Date\n- Sep 25, 2010\n+ Sept 2020\n Author\n- Yong Dian Jian\n- Varun Agrawal\n+ Jing Wu\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00467_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00320_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
Cal3Bundler.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
20#pragma once
\n
21
\n-
22#include <gtsam/geometry/Cal3.h>
\n-\n+
22#include <gtsam/geometry/Cal3.h>
\n+\n
24
\n
25namespace gtsam {
\n
26
\n
\n
32class GTSAM_EXPORT Cal3Bundler : public Cal3 {
\n
33 private:
\n
34 double k1_ = 0.0f, k2_ = 0.0f;
\n@@ -224,16 +224,16 @@\n
181template <>
\n
182struct traits<Cal3Bundler> : public internal::Manifold<Cal3Bundler> {};
\n
183
\n
184template <>
\n
185struct traits<const Cal3Bundler> : public internal::Manifold<Cal3Bundler> {};
\n
186
\n
187} // namespace gtsam
\n-
Common code for all Calibration models.
\n-
2D Point
\n+
Common code for all Calibration models.
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n
Common base class for all calibration models.
Definition Cal3.h:69
\n
Calibration used by Bundler.
Definition Cal3Bundler.h:32
\n
double k1() const
distorsion parameter k1
Definition Cal3Bundler.h:87
\n@@ -247,13 +247,13 @@\n
size_t dim() const override
return DOF, dimensionality of tangent space
Definition Cal3Bundler.h:147
\n
static size_t Dim()
return DOF, dimensionality of tangent space
Definition Cal3Bundler.h:150
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00470_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00764_source.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesNet.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n
\n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SO3.h
\n+
GaussianBayesNet.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n+
19// \\callgraph
\n+
20
\n
21#pragma once
\n
22
\n-
23#include <gtsam/geometry/SOn.h>
\n-
24
\n-
25#include <gtsam/base/Lie.h>
\n-
26#include <gtsam/base/Matrix.h>
\n-
27#include <gtsam/dllexport.h>
\n-
28
\n-
29#include <cmath>
\n-
30#include <vector>
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
34using SO3 = SO<3>;
\n-
35
\n-
36// Below are all declarations of SO<3> specializations.
\n-
37// They are *defined* in SO3.cpp.
\n+\n+\n+\n+\n+
27
\n+
28#include <utility>
\n+
29namespace gtsam {
\n+
30
\n+
\n+
35 class GTSAM_EXPORT GaussianBayesNet: public BayesNet<GaussianConditional>
\n+
36 {
\n+
37 public:
\n
38
\n-
39template <>
\n-
40GTSAM_EXPORT
\n-
41SO3 SO3::AxisAngle(const Vector3& axis, double theta);
\n-
42
\n-
43template <>
\n-
44GTSAM_EXPORT
\n-
45SO3 SO3::ClosestTo(const Matrix3& M);
\n-
46
\n-
47template <>
\n-
48GTSAM_EXPORT
\n-
49SO3 SO3::ChordalMean(const std::vector<SO3>& rotations);
\n+\n+
40 typedef GaussianBayesNet This;
\n+\n+
42 typedef boost::shared_ptr<This> shared_ptr;
\n+
43 typedef boost::shared_ptr<ConditionalType> sharedConditional;
\n+
44
\n+
47
\n+\n
50
\n-
51template <>
\n-
52GTSAM_EXPORT
\n-
53Matrix3 SO3::Hat(const Vector3& xi);
\n-
54
\n-
55template <>
\n-
56GTSAM_EXPORT
\n-
57Vector3 SO3::Vee(const Matrix3& X);
\n-
58
\n-
60template <>
\n-
61Matrix3 SO3::AdjointMap() const;
\n-
62
\n-
67template <>
\n-
68GTSAM_EXPORT
\n-
69SO3 SO3::Expmap(const Vector3& omega, ChartJacobian H);
\n-
70
\n-
72template <>
\n-
73GTSAM_EXPORT
\n-
74Matrix3 SO3::ExpmapDerivative(const Vector3& omega);
\n-
75
\n-
80template <>
\n-
81GTSAM_EXPORT
\n-
82Vector3 SO3::Logmap(const SO3& R, ChartJacobian H);
\n-
83
\n-
85template <>
\n-
86GTSAM_EXPORT
\n-
87Matrix3 SO3::LogmapDerivative(const Vector3& omega);
\n-
88
\n-
89// Chart at origin for SO3 is *not* Cayley but actual Expmap/Logmap
\n-
90template <>
\n-
91GTSAM_EXPORT
\n-
92SO3 SO3::ChartAtOrigin::Retract(const Vector3& omega, ChartJacobian H);
\n-
93
\n-
94template <>
\n-
95GTSAM_EXPORT
\n-
96Vector3 SO3::ChartAtOrigin::Local(const SO3& R, ChartJacobian H);
\n-
97
\n-
98template <>
\n-
99GTSAM_EXPORT
\n-
100Vector9 SO3::vec(OptionalJacobian<9, 3> H) const;
\n-
101
\n-
103template <class Archive>
\n-
\n-
104void serialize(Archive& ar, SO3& R, const unsigned int /*version*/) {
\n-
105 Matrix3& M = R.matrix_;
\n-
106 ar& boost::serialization::make_nvp("R11", M(0, 0));
\n-
107 ar& boost::serialization::make_nvp("R12", M(0, 1));
\n-
108 ar& boost::serialization::make_nvp("R13", M(0, 2));
\n-
109 ar& boost::serialization::make_nvp("R21", M(1, 0));
\n-
110 ar& boost::serialization::make_nvp("R22", M(1, 1));
\n-
111 ar& boost::serialization::make_nvp("R23", M(1, 2));
\n-
112 ar& boost::serialization::make_nvp("R31", M(2, 0));
\n-
113 ar& boost::serialization::make_nvp("R32", M(2, 1));
\n-
114 ar& boost::serialization::make_nvp("R33", M(2, 2));
\n-
115}
\n-
\n-
116
\n-
117namespace so3 {
\n-
118
\n-
123GTSAM_EXPORT Matrix3 compose(const Matrix3& M, const SO3& R,
\n-
124 OptionalJacobian<9, 9> H = boost::none);
\n-
125
\n-
127GTSAM_EXPORT Matrix99 Dcompose(const SO3& R);
\n-
128
\n-
129// Below are two functors that allow for saving computation when exponential map
\n-
130// and its derivatives are needed at the same location in so<3>. The second
\n-
131// functor also implements dedicated methods to apply dexp and/or inv(dexp).
\n+
52 template <typename ITERATOR>
\n+
\n+
53 GaussianBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
\n+
54 : Base(firstConditional, lastConditional) {}
\n+
\n+
55
\n+
57 template <class CONTAINER>
\n+
\n+
58 explicit GaussianBayesNet(const CONTAINER& conditionals) {
\n+
59 push_back(conditionals);
\n+
60 }
\n+
\n+
61
\n+
64 template <class DERIVEDCONDITIONAL>
\n+
\n+\n+
66 : Base(graph) {}
\n+
\n+
67
\n+
72 template <class DERIVEDCONDITIONAL>
\n+
\n+\n+
74 std::initializer_list<boost::shared_ptr<DERIVEDCONDITIONAL> > conditionals)
\n+
75 : Base(conditionals) {}
\n+
\n+
76
\n+
78 virtual ~GaussianBayesNet() = default;
\n+
79
\n+
81
\n+
84
\n+
86 bool equals(const This& bn, double tol = 1e-9) const;
\n+
87
\n+
\n+
89 void print(
\n+
90 const std::string& s = "",
\n+
91 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n+
92 Base::print(s, formatter);
\n+
93 }
\n+
\n+
94
\n+
96
\n+
99
\n+
101 double error(const VectorValues& x) const;
\n+
102
\n+
104 double logProbability(const VectorValues& x) const;
\n+
105
\n+
111 double evaluate(const VectorValues& x) const;
\n+
112
\n+
\n+
114 double operator()(const VectorValues& x) const {
\n+
115 return evaluate(x);
\n+
116 }
\n+
\n+
117
\n+
120 VectorValues optimize() const;
\n+
121
\n+
123 VectorValues optimize(const VectorValues& given) const;
\n+
124
\n+
131 VectorValues sample(std::mt19937_64* rng) const;
\n
132
\n-
\n-
134class GTSAM_EXPORT ExpmapFunctor {
\n-
135 protected:
\n-
136 const double theta2;
\n-
137 Matrix3 W, K, KK;
\n-
138 bool nearZero;
\n-
139 double theta, sin_theta, one_minus_cos; // only defined if !nearZero
\n-
140
\n-
141 void init(bool nearZeroApprox = false);
\n-
142
\n-
143 public:
\n-
145 explicit ExpmapFunctor(const Vector3& omega, bool nearZeroApprox = false);
\n-
146
\n-
148 ExpmapFunctor(const Vector3& axis, double angle, bool nearZeroApprox = false);
\n-
149
\n-
151 SO3 expmap() const;
\n-
152};
\n-
\n-
153
\n-
\n-\n-
156 const Vector3 omega;
\n-
157 double a, b;
\n-
158 Matrix3 dexp_;
\n-
159
\n-
160 public:
\n-
162 GTSAM_EXPORT explicit DexpFunctor(const Vector3& omega, bool nearZeroApprox = false);
\n-
163
\n-
164 // NOTE(luca): Right Jacobian for Exponential map in SO(3) - equation
\n-
165 // (10.86) and following equations in G.S. Chirikjian, "Stochastic Models,
\n-
166 // Information Theory, and Lie Groups", Volume 2, 2008.
\n-
167 // expmap(omega + v) \\approx expmap(omega) * expmap(dexp * v)
\n-
168 // This maps a perturbation v in the tangent space to
\n-
169 // a perturbation on the manifold Expmap(dexp * v) */
\n-
170 const Matrix3& dexp() const { return dexp_; }
\n-
171
\n-
173 GTSAM_EXPORT Vector3 applyDexp(const Vector3& v, OptionalJacobian<3, 3> H1 = boost::none,
\n-
174 OptionalJacobian<3, 3> H2 = boost::none) const;
\n-
175
\n-
177 GTSAM_EXPORT Vector3 applyInvDexp(const Vector3& v,
\n-
178 OptionalJacobian<3, 3> H1 = boost::none,
\n-
179 OptionalJacobian<3, 3> H2 = boost::none) const;
\n-
180};
\n-
\n-
181} // namespace so3
\n-
182
\n-
183/*
\n-
184 * Define the traits. internal::LieGroup provides both Lie group and Testable
\n-
185 */
\n-
186
\n-
187template <>
\n-
188struct traits<SO3> : public internal::LieGroup<SO3> {};
\n-
189
\n-
190template <>
\n-
191struct traits<const SO3> : public internal::LieGroup<SO3> {};
\n-
192
\n-
193} // end namespace gtsam
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Base class and basic functions for Lie types.
\n-
N*N matrix representation of SO(N).
\n+
140 VectorValues sample(const VectorValues& given, std::mt19937_64* rng) const;
\n+
141
\n+
143 VectorValues sample() const;
\n+
144
\n+
146 VectorValues sample(const VectorValues& given) const;
\n+
147
\n+
154 Ordering ordering() const;
\n+
155
\n+
157
\n+
160
\n+
166 std::pair<Matrix, Vector> matrix(const Ordering& ordering) const;
\n+
167
\n+
173 std::pair<Matrix, Vector> matrix() const;
\n+
174
\n+
200 VectorValues optimizeGradientSearch() const;
\n+
201
\n+
207 VectorValues gradient(const VectorValues& x0) const;
\n+
208
\n+
215 VectorValues gradientAtZero() const;
\n+
216
\n+
224 double determinant() const;
\n+
225
\n+
232 double logDeterminant() const;
\n+
233
\n+
238 VectorValues backSubstitute(const VectorValues& gx) const;
\n+
239
\n+
246 VectorValues backSubstituteTranspose(const VectorValues& gx) const;
\n+
247
\n+
251
\n+
252 using Base::evaluate; // Expose evaluate(const HybridValues&) method..
\n+
253 using Base::logProbability; // Expose logProbability(const HybridValues&) method..
\n+
254 using Base::error; // Expose error(const HybridValues&) method..
\n+
255
\n+
257
\n+
258 private:
\n+
260 friend class boost::serialization::access;
\n+
261 template<class ARCHIVE>
\n+
262 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
263 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
264 }
\n+
265 };
\n+
\n+
266
\n+
268 template<>
\n+
\n+
269 struct traits<GaussianBayesNet> : public Testable<GaussianBayesNet> {
\n+
270 };
\n+
\n+
271
\n+
272} //\\ namespace gtsam
\n+
Bayes network.
\n+
Factor Graph Base Class.
\n+
Conditional Gaussian Base class.
\n+
Included from all GTSAM files.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::string serialize(const T &input)
serializes to a string
Definition serialization.h:113
\n+
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
static SO< N > Retract(const TangentVector &v)
Retract at origin: possible in Lie group because it has an identity.
Definition Lie.h:111
\n-
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Functor implementing Exponential map.
Definition SO3.h:134
\n-
Functor that implements Exponential map and its derivatives.
Definition SO3.h:155
\n-
GTSAM_EXPORT Vector3 applyDexp(const Vector3 &v, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
Multiplies with dexp(), with optional derivatives.
Definition SO3.cpp:101
\n-
GTSAM_EXPORT Vector3 applyInvDexp(const Vector3 &v, OptionalJacobian< 3, 3 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
Multiplies with dexp().inverse(), with optional derivatives.
Definition SO3.cpp:120
\n-\n-
static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates.
Definition SOn-inl.h:67
\n-
VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::none) const
Return vectorized rotation matrix in column order.
Definition SOn-inl.h:88
\n-
static SO ChordalMean(const std::vector< SO > &rotations)
Named constructor that finds chordal mean , currently only defined for SO3.
\n-
static TangentVector Vee(const MatrixNN &X)
Inverse of Hat. See note about xi element order in Hat.
Definition SOn-inl.h:35
\n-
static TangentVector Logmap(const SO &R, ChartJacobian H=boost::none)
Log map at identity - returns the canonical coordinates of this rotation.
Definition SOn-inl.h:77
\n-
static SO AxisAngle(const Vector3 &axis, double theta)
Constructor from axis and angle. Only defined for SO3.
\n-
MatrixDD AdjointMap() const
Adjoint map.
Definition SO4.cpp:159
\n-
static MatrixNN Hat(const TangentVector &xi)
Hat operator creates Lie algebra element corresponding to d-vector, where d is the dimensionality of ...
Definition SOn-inl.h:29
\n-
static MatrixDD ExpmapDerivative(const TangentVector &omega)
Derivative of Expmap, currently only defined for SO3.
Definition SOn-inl.h:72
\n-
static MatrixDD LogmapDerivative(const TangentVector &omega)
Derivative of Logmap, currently only defined for SO3.
Definition SOn-inl.h:82
\n-
static SO ClosestTo(const MatrixNN &M)
Named constructor that finds SO(n) matrix closest to M in Frobenius norm, currently only defined for ...
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
Definition Ordering.h:34
\n+
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
\n+
double operator()(const VectorValues &x) const
Evaluate probability density, sugar.
Definition GaussianBayesNet.h:114
\n+
void print(const std::string &s="", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print graph
Definition GaussianBayesNet.h:89
\n+
GaussianBayesNet(std::initializer_list< boost::shared_ptr< DERIVEDCONDITIONAL > > conditionals)
Constructor that takes an initializer list of shared pointers.
Definition GaussianBayesNet.h:73
\n+
GaussianBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition GaussianBayesNet.h:65
\n+
virtual ~GaussianBayesNet()=default
Destructor.
\n+
GaussianBayesNet(const CONTAINER &conditionals)
Construct from container of factors (shared_ptr or plain objects)
Definition GaussianBayesNet.h:58
\n+
GaussianBayesNet()
Construct empty bayes net.
Definition GaussianBayesNet.h:49
\n+
GaussianBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
Construct from iterator over conditionals.
Definition GaussianBayesNet.h:53
\n+
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,266 +1,228 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SO3.h\n+GaussianBayesNet.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n+19// \\callgraph\n+20\n 21#pragma once\n 22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\bn_\b._\bh>\n-24\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-27#include \n-28\n-29#include \n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-34using SO3 = SO<3>;\n-35\n-36// Below are all declarations of SO<3> specializations.\n-37// They are *defined* in SO3.cpp.\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+27\n+28#include \n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+_\b3_\b5 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt: public _\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+36 {\n+37 public:\n 38\n-39template <>\n-40GTSAM_EXPORT\n-41SO3 _\bS_\bO_\b3_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be(const Vector3& axis, double theta);\n-42\n-43template <>\n-44GTSAM_EXPORT\n-45SO3 _\bS_\bO_\b3_\b:_\b:_\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo(const Matrix3& M);\n-46\n-47template <>\n-48GTSAM_EXPORT\n-49SO3 _\bS_\bO_\b3_\b:_\b:_\bC_\bh_\bo_\br_\bd_\ba_\bl_\bM_\be_\ba_\bn(const std::vector& rotations);\n+39 typedef _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b> _\bB_\ba_\bs_\be;\n+40 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bT_\bh_\bi_\bs;\n+41 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+42 typedef boost::shared_ptr shared_ptr;\n+43 typedef boost::shared_ptr sharedConditional;\n+44\n+47\n+_\b4_\b9 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n 50\n-51template <>\n-52GTSAM_EXPORT\n-53Matrix3 _\bS_\bO_\b3_\b:_\b:_\bH_\ba_\bt(const Vector3& xi);\n-54\n-55template <>\n-56GTSAM_EXPORT\n-57Vector3 _\bS_\bO_\b3_\b:_\b:_\bV_\be_\be(const Matrix3& X);\n-58\n-60template <>\n-61Matrix3 _\bS_\bO_\b3_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const;\n-62\n-67template <>\n-68GTSAM_EXPORT\n-69SO3 _\bS_\bO_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(const Vector3& omega, ChartJacobian H);\n-70\n-72template <>\n-73GTSAM_EXPORT\n-74Matrix3 _\bS_\bO_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const Vector3& omega);\n-75\n-80template <>\n-81GTSAM_EXPORT\n-82Vector3 _\bS_\bO_\b3_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(const SO3& R, ChartJacobian H);\n-83\n-85template <>\n-86GTSAM_EXPORT\n-87Matrix3 _\bS_\bO_\b3_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be(const Vector3& omega);\n-88\n-89// Chart at origin for SO3 is *not* Cayley but actual Expmap/Logmap\n-90template <>\n-91GTSAM_EXPORT\n-92SO3 _\bS_\bO_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(const Vector3& omega, ChartJacobian H);\n-93\n-94template <>\n-95GTSAM_EXPORT\n-96Vector3 SO3::ChartAtOrigin::Local(const SO3& R, ChartJacobian H);\n-97\n-98template <>\n-99GTSAM_EXPORT\n-100Vector9 _\bS_\bO_\b3_\b:_\b:_\bv_\be_\bc(OptionalJacobian<9, 3> H) const;\n-101\n-103template \n-_\b1_\b0_\b4void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(Archive& ar, _\bS_\bO_\b3& R, const unsigned int /*version*/) {\n-105 Matrix3& M = R.matrix_;\n-106 ar& boost::serialization::make_nvp(\"R11\", M(0, 0));\n-107 ar& boost::serialization::make_nvp(\"R12\", M(0, 1));\n-108 ar& boost::serialization::make_nvp(\"R13\", M(0, 2));\n-109 ar& boost::serialization::make_nvp(\"R21\", M(1, 0));\n-110 ar& boost::serialization::make_nvp(\"R22\", M(1, 1));\n-111 ar& boost::serialization::make_nvp(\"R23\", M(1, 2));\n-112 ar& boost::serialization::make_nvp(\"R31\", M(2, 0));\n-113 ar& boost::serialization::make_nvp(\"R32\", M(2, 1));\n-114 ar& boost::serialization::make_nvp(\"R33\", M(2, 2));\n-115}\n-116\n-117namespace so3 {\n-118\n-123GTSAM_EXPORT Matrix3 compose(const Matrix3& M, const SO3& R,\n-124 OptionalJacobian<9, 9> H = boost::none);\n-125\n-127GTSAM_EXPORT Matrix99 Dcompose(const SO3& R);\n-128\n-129// Below are two functors that allow for saving computation when exponential\n-map\n-130// and its derivatives are needed at the same location in so<3>. The second\n-131// functor also implements dedicated methods to apply dexp and/or inv(dexp).\n+52 template \n+_\b5_\b3 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(ITERATOR firstConditional, ITERATOR lastConditional)\n+54 : _\bB_\ba_\bs_\be(firstConditional, lastConditional) {}\n+55\n+57 template \n+_\b5_\b8 explicit _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const CONTAINER& conditionals) {\n+59 push_back(conditionals);\n+60 }\n+61\n+64 template \n+_\b6_\b5 explicit _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>& graph)\n+66 : _\bB_\ba_\bs_\be(graph) {}\n+67\n+72 template \n+_\b7_\b3 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n+74 std::initializer_list > conditionals)\n+75 : _\bB_\ba_\bs_\be(conditionals) {}\n+76\n+_\b7_\b8 virtual _\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() = default;\n+79\n+81\n+84\n+86 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& bn, double tol = 1e-9) const;\n+87\n+_\b8_\b9 void _\bp_\br_\bi_\bn_\bt(\n+90 const std::string& s = \"\",\n+91 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n+92 Base::print(s, formatter);\n+93 }\n+94\n+96\n+99\n+101 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+102\n+104 double logProbability(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+105\n+111 double evaluate(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+112\n+_\b1_\b1_\b4 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n+115 return evaluate(x);\n+116 }\n+117\n+120 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n+121\n+123 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& given) const;\n+124\n+131 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(std::mt19937_64* rng) const;\n 132\n-_\b1_\b3_\b4class GTSAM_EXPORT _\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br {\n-135 protected:\n-136 const double theta2;\n-137 Matrix3 W, K, KK;\n-138 bool nearZero;\n-139 double theta, sin_theta, one_minus_cos; // only defined if !nearZero\n-140\n-141 void init(bool nearZeroApprox = false);\n-142\n-143 public:\n-145 explicit _\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br(const Vector3& omega, bool nearZeroApprox = false);\n-146\n-148 _\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br(const Vector3& axis, double angle, bool nearZeroApprox =\n-false);\n-149\n-151 _\bS_\bO_\b3 expmap() const;\n-152};\n-153\n-_\b1_\b5_\b5class _\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br : public _\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br {\n-156 const Vector3 omega;\n-157 double a, b;\n-158 Matrix3 dexp_;\n-159\n-160 public:\n-162 GTSAM_EXPORT explicit _\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br(const Vector3& omega, bool nearZeroApprox\n-= false);\n-163\n-164 // NOTE(luca): Right Jacobian for Exponential map in SO(3) - equation\n-165 // (10.86) and following equations in G.S. Chirikjian, \"Stochastic Models,\n-166 // Information Theory, and Lie Groups\", Volume 2, 2008.\n-167 // expmap(omega + v) \\approx expmap(omega) * expmap(dexp * v)\n-168 // This maps a perturbation v in the tangent space to\n-169 // a perturbation on the manifold Expmap(dexp * v) */\n-170 const Matrix3& dexp() const { return dexp_; }\n-171\n-173 GTSAM_EXPORT Vector3 _\ba_\bp_\bp_\bl_\by_\bD_\be_\bx_\bp(const Vector3& v, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H1\n-= boost::none,\n-174 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const;\n-175\n-177 GTSAM_EXPORT Vector3 _\ba_\bp_\bp_\bl_\by_\bI_\bn_\bv_\bD_\be_\bx_\bp(const Vector3& v,\n-178 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H1 = boost::none,\n-179 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const;\n-180};\n-181} // namespace so3\n-182\n-183/*\n-184 * Define the traits. internal::LieGroup provides both Lie group and\n-Testable\n-185 */\n-186\n-187template <>\n-_\b1_\b8_\b8struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bO_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-189\n-190template <>\n-_\b1_\b9_\b1struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n-192\n-193} // end namespace gtsam\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n-_\bS_\bO_\bn_\b._\bh\n-N*N matrix representation of SO(N).\n+140 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& given, std::mt19937_64* rng) const;\n+141\n+143 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample() const;\n+144\n+146 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& given) const;\n+147\n+154 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg ordering() const;\n+155\n+157\n+160\n+166 std::pair matrix(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n+167\n+173 std::pair matrix() const;\n+174\n+200 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimizeGradientSearch() const;\n+201\n+207 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradient(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x0) const;\n+208\n+215 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const;\n+216\n+224 double determinant() const;\n+225\n+232 double logDeterminant() const;\n+233\n+238 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs backSubstitute(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gx) const;\n+239\n+246 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs backSubstituteTranspose(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gx) const;\n+247\n+251\n+252 using Base::evaluate; // Expose evaluate(const HybridValues&) method..\n+253 using Base::logProbability; // Expose logProbability(const HybridValues&)\n+method..\n+254 using Base::error; // Expose error(const HybridValues&) method..\n+255\n+257\n+258 private:\n+_\b2_\b6_\b0 friend class boost::serialization::access;\n+261 template\n+262 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+263 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+264 }\n+265 };\n+266\n+268 template<>\n+_\b2_\b6_\b9 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+270 };\n+271\n+272} //\\ namespace gtsam\n+_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+Bayes network.\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+Conditional Gaussian Base class.\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n-std::string serialize(const T &input)\n-serializes to a string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n+Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n+landmarkKey)\n+Optimize for triangulation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bS_\bO_\b<_\b _\bN_\b _\b>_\b,_\b _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bS_\bO_\b(_\bN_\b)_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n-static SO< N > Retract(const TangentVector &v)\n-Retract at origin: possible in Lie group because it has an identity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Both LieGroupTraits and Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-Functor implementing Exponential map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO3.h:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br\n-Functor that implements Exponential map and its derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO3.h:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by_\bD_\be_\bx_\bp\n-GTSAM_EXPORT Vector3 applyDexp(const Vector3 &v, OptionalJacobian< 3, 3 >\n-H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const\n-Multiplies with dexp(), with optional derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO3.cpp:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bo_\b3_\b:_\b:_\bD_\be_\bx_\bp_\bF_\bu_\bn_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bp_\bp_\bl_\by_\bI_\bn_\bv_\bD_\be_\bx_\bp\n-GTSAM_EXPORT Vector3 applyInvDexp(const Vector3 &v, OptionalJacobian< 3, 3 >\n-H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const\n-Multiplies with dexp().inverse(), with optional derivatives.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO3.cpp:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n-static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)\n-Exponential map at identity - create a rotation from canonical coordinates.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bv_\be_\bc\n-VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::\n-none) const\n-Return vectorized rotation matrix in column order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bC_\bh_\bo_\br_\bd_\ba_\bl_\bM_\be_\ba_\bn\n-static SO ChordalMean(const std::vector< SO > &rotations)\n-Named constructor that finds chordal mean , currently only defined for SO3.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bV_\be_\be\n-static TangentVector Vee(const MatrixNN &X)\n-Inverse of Hat. See note about xi element order in Hat.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp\n-static TangentVector Logmap(const SO &R, ChartJacobian H=boost::none)\n-Log map at identity - returns the canonical coordinates of this rotation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be\n-static SO AxisAngle(const Vector3 &axis, double theta)\n-Constructor from axis and angle. Only defined for SO3.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n-MatrixDD AdjointMap() const\n-Adjoint map.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO4.cpp:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bH_\ba_\bt\n-static MatrixNN Hat(const TangentVector &xi)\n-Hat operator creates Lie algebra element corresponding to d-vector, where d is\n-the dimensionality of ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-static MatrixDD ExpmapDerivative(const TangentVector &omega)\n-Derivative of Expmap, currently only defined for SO3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be\n-static MatrixDD LogmapDerivative(const TangentVector &omega)\n-Derivative of Logmap, currently only defined for SO3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>_\b:_\b:_\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo\n-static SO ClosestTo(const MatrixNN &M)\n-Named constructor that finds SO(n) matrix closest to M in Frobenius norm,\n-currently only defined for ...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+A BayesNet is a tree of conditionals, stored in elimination order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+double operator()(const VectorValues &x) const\n+Evaluate probability density, sugar.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const override\n+print graph\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+GaussianBayesNet(std::initializer_list< boost::shared_ptr< DERIVEDCONDITIONAL >\n+> conditionals)\n+Constructor that takes an initializer list of shared pointers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+GaussianBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)\n+Implicit copy/downcast constructor to override explicit template container\n+constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+virtual ~GaussianBayesNet()=default\n+Destructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+GaussianBayesNet(const CONTAINER &conditionals)\n+Construct from container of factors (shared_ptr or plain objects)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+GaussianBayesNet()\n+Construct empty bayes net.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+GaussianBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)\n+Construct from iterator over conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+A GaussianConditional functions as the node in a Bayes network.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n- * _\bS_\bO_\b3_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00479_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00422_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
StereoPoint2.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n+\n
22#include <gtsam/base/VectorSpace.h>
\n
23#include <boost/serialization/nvp.hpp>
\n
24
\n
25namespace gtsam {
\n
26
\n
\n
32class GTSAM_EXPORT StereoPoint2 {
\n@@ -216,16 +216,16 @@\n
125 Point2 right() const {
\n
126 return Point2(uR_, v_);
\n
127 }
\n
\n
128
\n
131 inline StereoPoint2 inverse() const { return StereoPoint2()- (*this);}
\n
132 inline StereoPoint2 compose(const StereoPoint2& p1) const { return *this + p1;}
\n-
133 inline StereoPoint2 between(const StereoPoint2& p2) const { return p2 - *this; }
\n-
134 inline Vector localCoordinates(const StereoPoint2& t2) const { return Logmap(between(t2)); }
\n+
133 inline StereoPoint2 between(const StereoPoint2& p2) const { return p2 - *this; }
\n+
134 inline Vector localCoordinates(const StereoPoint2& t2) const { return Logmap(between(t2)); }
\n
135 inline StereoPoint2 retract(const Vector& v) const { return compose(Expmap(v)); }
\n
136 static inline Vector Logmap(const StereoPoint2& p) { return p.vector(); }
\n
137 static inline StereoPoint2 Expmap(const Vector& d) { return StereoPoint2(d(0), d(1), d(2)); }
\n
139
\n
141 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &os, const StereoPoint2& p);
\n
142
\n
143private:
\n@@ -247,16 +247,16 @@\n
163
\n
164template<>
\n
165struct traits<StereoPoint2> : public internal::VectorSpace<StereoPoint2> {};
\n
166
\n
167template<>
\n
168struct traits<const StereoPoint2> : public internal::VectorSpace<StereoPoint2> {};
\n
169}
\n-
T between(const T &t1, const T &t2)
binary functions
Definition lieProxies.h:36
\n-
2D Point
\n+
T between(const T &t1, const T &t2)
binary functions
Definition lieProxies.h:36
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
VectorSpace provides both Testable and VectorSpaceTraits.
Definition VectorSpace.h:207
\n
A 2D stereo point, v will be same for rectified images.
Definition StereoPoint2.h:32
\n
double uR() const
get uR
Definition StereoPoint2.h:109
\n@@ -272,13 +272,13 @@\n
static StereoPoint2 Identity()
identity
Definition StereoPoint2.h:74
\n
StereoPoint2()
default constructor
Definition StereoPoint2.h:43
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00491_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00962_source.html", "comments": ["Files 83% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/MixtureFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/NavState.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
MixtureFactor.h
\n+
NavState.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-\n-\n-\n-\n-\n-
28
\n-
29#include <algorithm>
\n-
30#include <boost/format.hpp>
\n-
31#include <cmath>
\n-
32#include <limits>
\n-
33#include <vector>
\n-
34
\n-
35namespace gtsam {
\n+
19#pragma once
\n+
20
\n+\n+
22#include <gtsam/base/Vector.h>
\n+
23#include <gtsam/base/Manifold.h>
\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
28typedef Vector3 Velocity3;
\n+
29
\n+
\n+
34class GTSAM_EXPORT NavState {
\n+
35private:
\n
36
\n-
\n-\n-
49 public:
\n-
50 using Base = HybridFactor;
\n-
51 using This = MixtureFactor;
\n-
52 using shared_ptr = boost::shared_ptr<MixtureFactor>;
\n-
53 using sharedFactor = boost::shared_ptr<NonlinearFactor>;
\n-
54
\n-\n-
60
\n-
61 private:
\n-
63 Factors factors_;
\n-
64 bool normalized_;
\n-
65
\n-
66 public:
\n-
67 MixtureFactor() = default;
\n-
68
\n-
\n-\n-
79 const Factors& factors, bool normalized = false)
\n-
80 : Base(keys, discreteKeys), factors_(factors), normalized_(normalized) {}
\n-
\n+
37 // TODO(frank):
\n+
38 // - should we rename t_ to p_? if not, we should rename dP do dT
\n+
39 Rot3 R_;
\n+
40 Point3 t_;
\n+
41 Velocity3 v_;
\n+
42
\n+
43public:
\n+
44
\n+
45 enum {
\n+
46 dimension = 9
\n+
47 };
\n+
48
\n+
49 typedef std::pair<Point3, Velocity3> PositionAndVelocity;
\n+
50
\n+
53
\n+
\n+\n+
56 t_(0, 0, 0), v_(Vector3::Zero()) {
\n+
57 }
\n+
\n+
\n+
59 NavState(const Rot3& R, const Point3& t, const Velocity3& v) :
\n+
60 R_(R), t_(t), v_(v) {
\n+
61 }
\n+
\n+
\n+
63 NavState(const Pose3& pose, const Velocity3& v) :
\n+
64 R_(pose.rotation()), t_(pose.translation()), v_(v) {
\n+
65 }
\n+
\n+
\n+
67 NavState(const Matrix3& R, const Vector6& tv) :
\n+
68 R_(R), t_(tv.head<3>()), v_(tv.tail<3>()) {
\n+
69 }
\n+
\n+
71 static NavState Create(const Rot3& R, const Point3& t, const Velocity3& v,
\n+\n+\n+
75 static NavState FromPoseVelocity(const Pose3& pose, const Vector3& vel,
\n+\n+
77
\n
81
\n-
98 template <typename FACTOR>
\n-
\n-\n-
100 const std::vector<boost::shared_ptr<FACTOR>>& factors,
\n-
101 bool normalized = false)
\n-
102 : Base(keys, discreteKeys), normalized_(normalized) {
\n-
103 std::vector<NonlinearFactor::shared_ptr> nonlinear_factors;
\n-
104 KeySet continuous_keys_set(keys.begin(), keys.end());
\n-
105 KeySet factor_keys_set;
\n-
106 for (auto&& f : factors) {
\n-
107 // Insert all factor continuous keys in the continuous keys set.
\n-
108 std::copy(f->keys().begin(), f->keys().end(),
\n-
109 std::inserter(factor_keys_set, factor_keys_set.end()));
\n-
110
\n-
111 if (auto nf = boost::dynamic_pointer_cast<NonlinearFactor>(f)) {
\n-
112 nonlinear_factors.push_back(nf);
\n-
113 } else {
\n-
114 throw std::runtime_error(
\n-
115 "Factors passed into MixtureFactor need to be nonlinear!");
\n-
116 }
\n-
117 }
\n-
118 factors_ = Factors(discreteKeys, nonlinear_factors);
\n-
119
\n-
120 if (continuous_keys_set != factor_keys_set) {
\n-
121 throw std::runtime_error(
\n-
122 "The specified continuous keys and the keys in the factors don't "
\n-
123 "match!");
\n-
124 }
\n-
125 }
\n+
82 const Rot3& attitude(OptionalJacobian<3, 9> H = boost::none) const;
\n+
83 const Point3& position(OptionalJacobian<3, 9> H = boost::none) const;
\n+
84 const Velocity3& velocity(OptionalJacobian<3, 9> H = boost::none) const;
\n+
85
\n+
86 const Pose3 pose() const {
\n+
87 return Pose3(attitude(), position());
\n+
88 }
\n+
89
\n+
93
\n+
\n+
95 Matrix3 R() const {
\n+
96 return R_.matrix();
\n+
97 }
\n
\n-
126
\n-
127 ~MixtureFactor() = default;
\n+
\n+
99 Quaternion quaternion() const {
\n+
100 return R_.toQuaternion();
\n+
101 }
\n+
\n+
\n+
103 Vector3 t() const {
\n+
104 return t_;
\n+
105 }
\n+
\n+
\n+
107 const Vector3& v() const {
\n+
108 return v_;
\n+
109 }
\n+
\n+
110 // Return velocity in body frame
\n+
111 Velocity3 bodyVelocity(OptionalJacobian<3, 9> H = boost::none) const;
\n+
112
\n+
116 Matrix7 matrix() const;
\n+
117
\n+
121
\n+
123 GTSAM_EXPORT
\n+
124 friend std::ostream &operator<<(std::ostream &os, const NavState& state);
\n+
125
\n+
127 void print(const std::string& s = "") const;
\n
128
\n-
\n-
137 AlgebraicDecisionTree<Key> error(const Values& continuousValues) const {
\n-
138 // functor to convert from sharedFactor to double error value.
\n-
139 auto errorFunc = [continuousValues](const sharedFactor& factor) {
\n-
140 return factor->error(continuousValues);
\n-
141 };
\n-
142 DecisionTree<Key, double> errorTree(factors_, errorFunc);
\n-
143 return errorTree;
\n-
144 }
\n-
\n-
145
\n-
\n-
153 double error(const Values& continuousValues,
\n-
154 const DiscreteValues& discreteValues) const {
\n-
155 // Retrieve the factor corresponding to the assignment in discreteValues.
\n-
156 auto factor = factors_(discreteValues);
\n-
157 // Compute the error for the selected factor
\n-
158 const double factorError = factor->error(continuousValues);
\n-
159 if (normalized_) return factorError;
\n-
160 return factorError + this->nonlinearFactorLogNormalizingConstant(
\n-
161 factor, continuousValues);
\n-
162 }
\n-
\n-
163
\n-
\n-
170 double error(const HybridValues& values) const override {
\n-
171 return error(values.nonlinear(), values.discrete());
\n-
172 }
\n-
\n-
173
\n-
\n-
179 size_t dim() const {
\n-
180 const auto assignments = DiscreteValues::CartesianProduct(discreteKeys_);
\n-
181 auto factor = factors_(assignments.at(0));
\n-
182 return factor->dim();
\n-
183 }
\n-
\n-
184
\n+
130 bool equals(const NavState& other, double tol = 1e-8) const;
\n+
131
\n+
135
\n+
136 // Tangent space sugar.
\n+
137 // TODO(frank): move to private navstate namespace in cpp
\n+
138 static Eigen::Block<Vector9, 3, 1> dR(Vector9& v) {
\n+
139 return v.segment<3>(0);
\n+
140 }
\n+
141 static Eigen::Block<Vector9, 3, 1> dP(Vector9& v) {
\n+
142 return v.segment<3>(3);
\n+
143 }
\n+
144 static Eigen::Block<Vector9, 3, 1> dV(Vector9& v) {
\n+
145 return v.segment<3>(6);
\n+
146 }
\n+
147 static Eigen::Block<const Vector9, 3, 1> dR(const Vector9& v) {
\n+
148 return v.segment<3>(0);
\n+
149 }
\n+
150 static Eigen::Block<const Vector9, 3, 1> dP(const Vector9& v) {
\n+
151 return v.segment<3>(3);
\n+
152 }
\n+
153 static Eigen::Block<const Vector9, 3, 1> dV(const Vector9& v) {
\n+
154 return v.segment<3>(6);
\n+
155 }
\n+
156
\n+
158 NavState retract(const Vector9& v, //
\n+
159 OptionalJacobian<9, 9> H1 = boost::none, OptionalJacobian<9, 9> H2 =
\n+
160 boost::none) const;
\n+
161
\n+
163 Vector9 localCoordinates(const NavState& g, //
\n+
164 OptionalJacobian<9, 9> H1 = boost::none, OptionalJacobian<9, 9> H2 =
\n+
165 boost::none) const;
\n+
166
\n+
170
\n+
173 NavState update(const Vector3& b_acceleration, const Vector3& b_omega,
\n+
174 const double dt, OptionalJacobian<9, 9> F, OptionalJacobian<9, 3> G1,
\n+
175 OptionalJacobian<9, 3> G2) const;
\n+
176
\n+
178 Vector9 coriolis(double dt, const Vector3& omega, bool secondOrder = false,
\n+
179 OptionalJacobian<9, 9> H = boost::none) const;
\n+
180
\n+
183 Vector9 correctPIM(const Vector9& pim, double dt, const Vector3& n_gravity,
\n+
184 const boost::optional<Vector3>& omegaCoriolis, bool use2ndOrderCoriolis =
\n+
185 false, OptionalJacobian<9, 9> H1 = boost::none,
\n+
186 OptionalJacobian<9, 9> H2 = boost::none) const;
\n
187
\n-
\n-
189 void print(
\n-
190 const std::string& s = "",
\n-
191 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
192 std::cout << (s.empty() ? "" : s + " ");
\n-
193 Base::print("", keyFormatter);
\n-
194 std::cout << "\\nMixtureFactor\\n";
\n-
195 auto valueFormatter = [](const sharedFactor& v) {
\n-
196 if (v) {
\n-
197 return (boost::format("Nonlinear factor on %d keys") % v->size()).str();
\n-
198 } else {
\n-
199 return std::string("nullptr");
\n-
200 }
\n-
201 };
\n-
202 factors_.print("", keyFormatter, valueFormatter);
\n-
203 }
\n-
\n-
204
\n-
\n-
206 bool equals(const HybridFactor& other, double tol = 1e-9) const override {
\n-
207 // We attempt a dynamic cast from HybridFactor to MixtureFactor. If it
\n-
208 // fails, return false.
\n-
209 if (!dynamic_cast<const MixtureFactor*>(&other)) return false;
\n-
210
\n-
211 // If the cast is successful, we'll properly construct a MixtureFactor
\n-
212 // object from `other`
\n-
213 const MixtureFactor& f(static_cast<const MixtureFactor&>(other));
\n-
214
\n-
215 // Ensure that this MixtureFactor and `f` have the same `factors_`.
\n-
216 auto compare = [tol](const sharedFactor& a, const sharedFactor& b) {
\n-
217 return traits<NonlinearFactor>::Equals(*a, *b, tol);
\n-
218 };
\n-
219 if (!factors_.equals(f.factors_, compare)) return false;
\n-
220
\n-
221 // If everything above passes, and the keys_, discreteKeys_ and normalized_
\n-
222 // member variables are identical, return true.
\n-
223 return (std::equal(keys_.begin(), keys_.end(), f.keys().begin()) &&
\n-
224 (discreteKeys_ == f.discreteKeys_) &&
\n-
225 (normalized_ == f.normalized_));
\n-
226 }
\n-
\n-
227
\n-
229
\n-
\n-\n-
233 const Values& continuousValues,
\n-
234 const DiscreteValues& discreteValues) const {
\n-
235 auto factor = factors_(discreteValues);
\n-
236 return factor->linearize(continuousValues);
\n-
237 }
\n-
\n-
238
\n-
\n-
240 boost::shared_ptr<GaussianMixtureFactor> linearize(
\n-
241 const Values& continuousValues) const {
\n-
242 // functional to linearize each factor in the decision tree
\n-
243 auto linearizeDT = [continuousValues](const sharedFactor& factor) {
\n-
244 return factor->linearize(continuousValues);
\n-
245 };
\n-
246
\n-\n-
248 factors_, linearizeDT);
\n-
249
\n-
250 return boost::make_shared<GaussianMixtureFactor>(
\n-
251 continuousKeys_, discreteKeys_, linearized_factors);
\n-
252 }
\n-
\n-
253
\n-
\n-
261 double nonlinearFactorLogNormalizingConstant(const sharedFactor& factor,
\n-
262 const Values& values) const {
\n-
263 // Information matrix (inverse covariance matrix) for the factor.
\n-
264 Matrix infoMat;
\n-
265
\n-
266 // If this is a NoiseModelFactor, we'll use its noiseModel to
\n-
267 // otherwise noiseModelFactor will be nullptr
\n-
268 if (auto noiseModelFactor =
\n-
269 boost::dynamic_pointer_cast<NoiseModelFactor>(factor)) {
\n-
270 // If dynamic cast to NoiseModelFactor succeeded, see if the noise model
\n-
271 // is Gaussian
\n-
272 auto noiseModel = noiseModelFactor->noiseModel();
\n-
273
\n-
274 auto gaussianNoiseModel =
\n-
275 boost::dynamic_pointer_cast<noiseModel::Gaussian>(noiseModel);
\n-
276 if (gaussianNoiseModel) {
\n-
277 // If the noise model is Gaussian, retrieve the information matrix
\n-
278 infoMat = gaussianNoiseModel->information();
\n-
279 } else {
\n-
280 // If the factor is not a Gaussian factor, we'll linearize it to get
\n-
281 // something with a normalized noise model
\n-
282 // TODO(kevin): does this make sense to do? I think maybe not in
\n-
283 // general? Should we just yell at the user?
\n-
284 auto gaussianFactor = factor->linearize(values);
\n-
285 infoMat = gaussianFactor->information();
\n-
286 }
\n-
287 }
\n-
288
\n-
289 // Compute the (negative) log of the normalizing constant
\n-
290 return -(factor->dim() * log(2.0 * M_PI) / 2.0) -
\n-
291 (log(infoMat.determinant()) / 2.0);
\n-
292 }
\n-
\n-
293};
\n-
\n-
294
\n-
295} // namespace gtsam
\n-\n-
A set of GaussianFactors, indexed by a set of discrete keys.
\n-\n-
Non-linear factor base classes.
\n-
Factor Graph consisting of non-linear factors.
\n+
189
\n+
190private:
\n+
193 friend class boost::serialization::access;
\n+
194 template<class ARCHIVE>
\n+
195 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
196 ar & BOOST_SERIALIZATION_NVP(R_);
\n+
197 ar & BOOST_SERIALIZATION_NVP(t_);
\n+
198 ar & BOOST_SERIALIZATION_NVP(v_);
\n+
199 }
\n+
201};
\n+
\n+
202
\n+
203// Specialize NavState traits to use a Retract/Local that agrees with IMUFactors
\n+
204template<>
\n+
\n+
205struct traits<NavState> : internal::Manifold<NavState> {
\n+
206};
\n+
\n+
207
\n+
208} // namespace gtsam
\n+
Base class and basic functions for Manifold types.
\n+
typedef and functions to augment Eigen's VectorXd
\n+
3D Pose
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
Vector3 Velocity3
Velocity is currently typedef'd to Vector3.
Definition NavState.h:28
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-\n-
An algebraic decision tree fixes the range of a DecisionTree to double.
Definition AlgebraicDecisionTree.h:38
\n-\n-
void print(const std::string &s, const LabelFormatter &labelFormatter, const ValueFormatter &valueFormatter) const
GTSAM-style print.
Definition DecisionTree-inl.h:872
\n-
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n-
A map from keys to values.
Definition DiscreteValues.h:34
\n-
static std::vector< DiscreteValues > CartesianProduct(const DiscreteKeys &keys)
Return a vector of DiscreteValues, one for each possible combination of values.
Definition DiscreteValues.h:85
\n-
Base class for truly hybrid probabilistic factors.
Definition HybridFactor.h:52
\n-
HybridFactor()=default
Default constructor creates empty factor.
\n-
void print(const std::string &s="HybridFactor\\n", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition HybridFactor.cpp:82
\n-
KeyVector continuousKeys_
Record continuous keys for book-keeping.
Definition HybridFactor.h:62
\n-
const DiscreteKeys & discreteKeys() const
Return the discrete keys for this factor.
Definition HybridFactor.h:132
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
const DiscreteValues & discrete() const
Return the discrete values.
Definition HybridValues.h:92
\n-
const Values & nonlinear() const
Return the nonlinear values.
Definition HybridValues.h:95
\n-
Implementation of a discrete conditional mixture factor.
Definition MixtureFactor.h:48
\n-
MixtureFactor(const KeyVector &keys, const DiscreteKeys &discreteKeys, const std::vector< boost::shared_ptr< FACTOR > > &factors, bool normalized=false)
Convenience constructor that generates the underlying factor decision tree for us.
Definition MixtureFactor.h:99
\n-
double error(const Values &continuousValues, const DiscreteValues &discreteValues) const
Compute error of factor given both continuous and discrete values.
Definition MixtureFactor.h:153
\n-
AlgebraicDecisionTree< Key > error(const Values &continuousValues) const
Compute error of the MixtureFactor as a tree.
Definition MixtureFactor.h:137
\n-
MixtureFactor(const KeyVector &keys, const DiscreteKeys &discreteKeys, const Factors &factors, bool normalized=false)
Construct from Decision tree.
Definition MixtureFactor.h:78
\n-
bool equals(const HybridFactor &other, double tol=1e-9) const override
Check equality.
Definition MixtureFactor.h:206
\n-
GaussianFactor::shared_ptr linearize(const Values &continuousValues, const DiscreteValues &discreteValues) const
Linearize specific nonlinear factors based on the assignment in discreteValues.
Definition MixtureFactor.h:232
\n-
double nonlinearFactorLogNormalizingConstant(const sharedFactor &factor, const Values &values) const
If the component factors are not already normalized, we want to compute their normalizing constants s...
Definition MixtureFactor.h:261
\n-
double error(const HybridValues &values) const override
Compute error of factor given hybrid values.
Definition MixtureFactor.h:170
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Testable.
Definition MixtureFactor.h:189
\n-
DecisionTree< Key, sharedFactor > Factors
typedef for DecisionTree which has Keys as node labels and NonlinearFactor as leaf nodes.
Definition MixtureFactor.h:59
\n-
size_t dim() const
Get the dimension of the factor (number of rows on linearization).
Definition MixtureFactor.h:179
\n-
boost::shared_ptr< GaussianMixtureFactor > linearize(const Values &continuousValues) const
Linearize all the continuous factors to get a GaussianMixtureFactor.
Definition MixtureFactor.h:240
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
Symbol.h was moved to inference directory, this header was retained for compatibility.
\n+
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
gtsam::Quaternion toQuaternion() const
Compute the quaternion representation of this rotation.
Definition Rot3M.cpp:233
\n+
Matrix3 matrix() const
return 3*3 rotation matrix
Definition Rot3M.cpp:219
\n+
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n+
NavState()
Default constructor.
Definition NavState.h:55
\n+
NavState(const Matrix3 &R, const Vector6 &tv)
Construct from SO(3) and R^6.
Definition NavState.h:67
\n+
NavState(const Rot3 &R, const Point3 &t, const Velocity3 &v)
Construct from attitude, position, velocity.
Definition NavState.h:59
\n+
Matrix3 R() const
Return rotation matrix. Induces computation in quaternion mode.
Definition NavState.h:95
\n+
NavState(const Pose3 &pose, const Velocity3 &v)
Construct from pose and velocity.
Definition NavState.h:63
\n+
const Vector3 & v() const
Return velocity as Vector3. Computation-free.
Definition NavState.h:107
\n+
Vector3 t() const
Return position as Vector3.
Definition NavState.h:103
\n+
Quaternion quaternion() const
Return quaternion. Induces computation in matrix mode.
Definition NavState.h:99
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,370 +1,253 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MixtureFactor.h\n+NavState.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n-28\n-29#include \n-30#include \n-31#include \n-32#include \n-33#include \n-34\n-35namespace _\bg_\bt_\bs_\ba_\bm {\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+_\b2_\b8typedef Vector3 _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3;\n+29\n+_\b3_\b4class GTSAM_EXPORT _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be {\n+35private:\n 36\n-_\b4_\b8class _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br {\n-49 public:\n-50 using _\bB_\ba_\bs_\be = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n-51 using _\bT_\bh_\bi_\bs = _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br;\n-52 using shared_ptr = boost::shared_ptr;\n-53 using sharedFactor = boost::shared_ptr;\n-54\n-_\b5_\b9 using _\bF_\ba_\bc_\bt_\bo_\br_\bs = _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b,_\b _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>;\n-60\n-61 private:\n-63 _\bF_\ba_\bc_\bt_\bo_\br_\bs factors_;\n-64 bool normalized_;\n-65\n-66 public:\n-67 _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br() = default;\n-68\n-_\b7_\b8 _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs,\n-79 const _\bF_\ba_\bc_\bt_\bo_\br_\bs& factors, bool normalized = false)\n-80 : _\bB_\ba_\bs_\be(_\bk_\be_\by_\bs, _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs), factors_(factors), normalized_(normalized) {}\n+37 // TODO(frank):\n+38 // - should we rename t_ to p_? if not, we should rename dP do dT\n+39 _\bR_\bo_\bt_\b3 R_;\n+40 _\bP_\bo_\bi_\bn_\bt_\b3 t_;\n+41 _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3 v_;\n+42\n+43public:\n+44\n+45 enum {\n+46 dimension = 9\n+47 };\n+48\n+49 typedef std::pair PositionAndVelocity;\n+50\n+53\n+_\b5_\b5 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be() :\n+56 t_(0, 0, 0), v_(Vector3::Zero()) {\n+57 }\n+_\b5_\b9 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be(const _\bR_\bo_\bt_\b3& R, const _\bP_\bo_\bi_\bn_\bt_\b3& t, const _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3& v) :\n+60 R_(R), t_(t), v_(v) {\n+61 }\n+_\b6_\b3 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be(const _\bP_\bo_\bs_\be_\b3& pose, const _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3& v) :\n+64 R_(pose.rotation()), t_(pose.translation()), v_(v) {\n+65 }\n+_\b6_\b7 _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be(const Matrix3& R, const Vector6& tv) :\n+68 R_(R), t_(tv.head<3>()), v_(tv.tail<3>()) {\n+69 }\n+71 static _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be Create(const _\bR_\bo_\bt_\b3& R, const _\bP_\bo_\bi_\bn_\bt_\b3& t, const _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3& v,\n+72 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H1, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H2,\n+73 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H3);\n+75 static _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be FromPoseVelocity(const _\bP_\bo_\bs_\be_\b3& pose, const Vector3& vel,\n+76 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b6_\b> H1, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b9_\b,_\b _\b3_\b> H2);\n+77\n 81\n-98 template \n-_\b9_\b9 _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs, const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs,\n-100 const std::vector>& factors,\n-101 bool normalized = false)\n-102 : _\bB_\ba_\bs_\be(_\bk_\be_\by_\bs, _\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs), normalized_(normalized) {\n-103 std::vector nonlinear_factors;\n-104 _\bK_\be_\by_\bS_\be_\bt continuous_keys_set(_\bk_\be_\by_\bs.begin(), _\bk_\be_\by_\bs.end());\n-105 _\bK_\be_\by_\bS_\be_\bt factor_keys_set;\n-106 for (auto&& f : factors) {\n-107 // Insert all factor continuous keys in the continuous keys set.\n-108 std::copy(f->keys().begin(), f->keys().end(),\n-109 std::inserter(factor_keys_set, factor_keys_set.end()));\n-110\n-111 if (auto nf = boost::dynamic_pointer_cast(f)) {\n-112 nonlinear_factors.push_back(nf);\n-113 } else {\n-114 throw std::runtime_error(\n-115 \"Factors passed into MixtureFactor need to be nonlinear!\");\n-116 }\n-117 }\n-118 factors_ = _\bF_\ba_\bc_\bt_\bo_\br_\bs(_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs, nonlinear_factors);\n-119\n-120 if (continuous_keys_set != factor_keys_set) {\n-121 throw std::runtime_error(\n-122 \"The specified continuous keys and the keys in the factors don't \"\n-123 \"match!\");\n-124 }\n-125 }\n-126\n-127 _\b~_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br() = default;\n+82 const _\bR_\bo_\bt_\b3& attitude(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b9_\b> H = boost::none) const;\n+83 const _\bP_\bo_\bi_\bn_\bt_\b3& position(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b9_\b> H = boost::none) const;\n+84 const _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3& velocity(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b9_\b> H = boost::none) const;\n+85\n+86 const _\bP_\bo_\bs_\be_\b3 pose() const {\n+87 return _\bP_\bo_\bs_\be_\b3(attitude(), position());\n+88 }\n+89\n+93\n+_\b9_\b5 Matrix3 _\bR() const {\n+96 return R_._\bm_\ba_\bt_\br_\bi_\bx();\n+97 }\n+_\b9_\b9 Quaternion _\bq_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn() const {\n+100 return R_._\bt_\bo_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn();\n+101 }\n+_\b1_\b0_\b3 Vector3 _\bt() const {\n+104 return t_;\n+105 }\n+_\b1_\b0_\b7 const Vector3& _\bv() const {\n+108 return v_;\n+109 }\n+110 // Return velocity in body frame\n+111 _\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3 bodyVelocity(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b9_\b> H = boost::none) const;\n+112\n+116 Matrix7 matrix() const;\n+117\n+121\n+123 GTSAM_EXPORT\n+124 friend std::ostream &operator<<(std::ostream &os, const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& state);\n+125\n+127 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n 128\n-_\b1_\b3_\b7 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b> _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& continuousValues) const {\n-138 // functor to convert from sharedFactor to double error value.\n-139 auto errorFunc = [continuousValues](const sharedFactor& factor) {\n-140 return factor->error(continuousValues);\n-141 };\n-142 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b,_\b _\bd_\bo_\bu_\bb_\bl_\be_\b> errorTree(factors_, errorFunc);\n-143 return errorTree;\n-144 }\n-145\n-_\b1_\b5_\b3 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& continuousValues,\n-154 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& discreteValues) const {\n-155 // Retrieve the factor corresponding to the assignment in discreteValues.\n-156 auto factor = factors_(discreteValues);\n-157 // Compute the error for the selected factor\n-158 const double factorError = factor->error(continuousValues);\n-159 if (normalized_) return factorError;\n-160 return factorError + this->_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bL_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt(\n-161 factor, continuousValues);\n-162 }\n-163\n-_\b1_\b7_\b0 double _\be_\br_\br_\bo_\br(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const override {\n-171 return _\be_\br_\br_\bo_\br(values._\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br(), values._\bd_\bi_\bs_\bc_\br_\be_\bt_\be());\n-172 }\n-173\n-_\b1_\b7_\b9 size_t _\bd_\bi_\bm() const {\n-180 const auto assignments = _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt(discreteKeys_);\n-181 auto factor = factors_(assignments.at(0));\n-182 return factor->dim();\n-183 }\n-184\n+130 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be& other, double tol = 1e-8) const;\n+131\n+135\n+136 // Tangent space sugar.\n+137 // TODO(frank): move to private navstate namespace in cpp\n+138 static Eigen::Block dR(Vector9& v) {\n+139 return v.segment<3>(0);\n+140 }\n+141 static Eigen::Block dP(Vector9& v) {\n+142 return v.segment<3>(3);\n+143 }\n+144 static Eigen::Block dV(Vector9& v) {\n+145 return v.segment<3>(6);\n+146 }\n+147 static Eigen::Block dR(const Vector9& v) {\n+148 return v.segment<3>(0);\n+149 }\n+150 static Eigen::Block dP(const Vector9& v) {\n+151 return v.segment<3>(3);\n+152 }\n+153 static Eigen::Block dV(const Vector9& v) {\n+154 return v.segment<3>(6);\n+155 }\n+156\n+158 NavState retract(const Vector9& v, //\n+159 OptionalJacobian<9, 9> H1 = boost::none, OptionalJacobian<9, 9> H2 =\n+160 boost::none) const;\n+161\n+163 Vector9 localCoordinates(const NavState& g, //\n+164 OptionalJacobian<9, 9> H1 = boost::none, OptionalJacobian<9, 9> H2 =\n+165 boost::none) const;\n+166\n+170\n+173 NavState update(const Vector3& b_acceleration, const Vector3& b_omega,\n+174 const double dt, OptionalJacobian<9, 9> F, OptionalJacobian<9, 3> G1,\n+175 OptionalJacobian<9, 3> G2) const;\n+176\n+178 Vector9 coriolis(double dt, const Vector3& omega, bool secondOrder = false,\n+179 OptionalJacobian<9, 9> H = boost::none) const;\n+180\n+183 Vector9 correctPIM(const Vector9& pim, double dt, const Vector3& n_gravity,\n+184 const boost::optional& omegaCoriolis, bool use2ndOrderCoriolis =\n+185 false, OptionalJacobian<9, 9> H1 = boost::none,\n+186 OptionalJacobian<9, 9> H2 = boost::none) const;\n 187\n-_\b1_\b8_\b9 void _\bp_\br_\bi_\bn_\bt(\n-190 const std::string& s = \"\",\n-191 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n-192 std::cout << (s.empty() ? \"\" : s + \" \");\n-193 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(\"\", keyFormatter);\n-194 std::cout << \"\\nMixtureFactor\\n\";\n-195 auto valueFormatter = [](const sharedFactor& v) {\n-196 if (v) {\n-197 return (boost::format(\"Nonlinear factor on %d keys\") % v->size()).str();\n-198 } else {\n-199 return std::string(\"nullptr\");\n-200 }\n-201 };\n-202 factors_._\bp_\br_\bi_\bn_\bt(\"\", keyFormatter, valueFormatter);\n-203 }\n-204\n-_\b2_\b0_\b6 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br& other, double tol = 1e-9) const override {\n-207 // We attempt a dynamic cast from HybridFactor to MixtureFactor. If it\n-208 // fails, return false.\n-209 if (!dynamic_cast(&other)) return false;\n-210\n-211 // If the cast is successful, we'll properly construct a MixtureFactor\n-212 // object from `other`\n-213 const _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br& f(static_cast(other));\n-214\n-215 // Ensure that this MixtureFactor and `f` have the same `factors_`.\n-216 auto compare = [tol](const sharedFactor& a, const sharedFactor& b) {\n-217 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(*a, *b, tol);\n-218 };\n-219 if (!factors_.equals(f.factors_, compare)) return false;\n-220\n-221 // If everything above passes, and the keys_, discreteKeys_ and normalized_\n-222 // member variables are identical, return true.\n-223 return (std::equal(_\bk_\be_\by_\bs_\b_.begin(), _\bk_\be_\by_\bs_\b_.end(), f._\bk_\be_\by_\bs().begin()) &&\n-224 (discreteKeys_ == f.discreteKeys_) &&\n-225 (normalized_ == f.normalized_));\n-226 }\n-227\n-229\n-_\b2_\b3_\b2 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(\n-233 const _\bV_\ba_\bl_\bu_\be_\bs& continuousValues,\n-234 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& discreteValues) const {\n-235 auto factor = factors_(discreteValues);\n-236 return factor->linearize(continuousValues);\n-237 }\n-238\n-_\b2_\b4_\b0 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(\n-241 const _\bV_\ba_\bl_\bu_\be_\bs& continuousValues) const {\n-242 // functional to linearize each factor in the decision tree\n-243 auto linearizeDT = [continuousValues](const sharedFactor& factor) {\n-244 return factor->linearize(continuousValues);\n-245 };\n-246\n-247 _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b> linearized_factors(\n-248 factors_, linearizeDT);\n-249\n-250 return boost::make_shared(\n-251 _\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs_\b_, discreteKeys_, linearized_factors);\n-252 }\n-253\n-_\b2_\b6_\b1 double _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bL_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt(const sharedFactor& factor,\n-262 const _\bV_\ba_\bl_\bu_\be_\bs& values) const {\n-263 // Information matrix (inverse covariance matrix) for the factor.\n-264 Matrix infoMat;\n-265\n-266 // If this is a NoiseModelFactor, we'll use its noiseModel to\n-267 // otherwise noiseModelFactor will be nullptr\n-268 if (auto noiseModelFactor =\n-269 boost::dynamic_pointer_cast(factor)) {\n-270 // If dynamic cast to NoiseModelFactor succeeded, see if the noise model\n-271 // is Gaussian\n-272 auto noiseModel = noiseModelFactor->noiseModel();\n-273\n-274 auto gaussianNoiseModel =\n-275 boost::dynamic_pointer_cast(noiseModel);\n-276 if (gaussianNoiseModel) {\n-277 // If the noise model is Gaussian, retrieve the information matrix\n-278 infoMat = gaussianNoiseModel->information();\n-279 } else {\n-280 // If the factor is not a Gaussian factor, we'll linearize it to get\n-281 // something with a normalized noise model\n-282 // TODO(kevin): does this make sense to do? I think maybe not in\n-283 // general? Should we just yell at the user?\n-284 auto gaussianFactor = factor->linearize(values);\n-285 infoMat = gaussianFactor->information();\n-286 }\n-287 }\n-288\n-289 // Compute the (negative) log of the normalizing constant\n-290 return -(factor->dim() * log(2.0 * M_PI) / 2.0) -\n-291 (log(infoMat.determinant()) / 2.0);\n-292 }\n-293};\n-294\n-295} // namespace gtsam\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-A set of GaussianFactors, indexed by a set of discrete keys.\n-_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n+189\n+190private:\n+_\b1_\b9_\b3 friend class boost::serialization::access;\n+194 template\n+195 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+196 ar & BOOST_SERIALIZATION_NVP(R_);\n+197 ar & BOOST_SERIALIZATION_NVP(t_);\n+198 ar & BOOST_SERIALIZATION_NVP(v_);\n+199 }\n+201};\n+202\n+203// Specialize NavState traits to use a Retract/Local that agrees with\n+IMUFactors\n+204template<>\n+_\b2_\b0_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be> : _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {\n+206};\n+207\n+208} // namespace gtsam\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\b3\n+Vector3 Velocity3\n+Velocity is currently typedef'd to Vector3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-An algebraic decision tree fixes the range of a DecisionTree to double.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bK_\be_\by_\b,_\b _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s, const LabelFormatter &labelFormatter, const\n-ValueFormatter &valueFormatter) const\n-GTSAM-style print.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree-inl.h:872\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-DiscreteKeys is a set of keys that can be assembled using the & operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n-A map from keys to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bC_\ba_\br_\bt_\be_\bs_\bi_\ba_\bn_\bP_\br_\bo_\bd_\bu_\bc_\bt\n-static std::vector< DiscreteValues > CartesianProduct(const DiscreteKeys &keys)\n-Return a vector of DiscreteValues, one for each possible combination of values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-Base class for truly hybrid probabilistic factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-HybridFactor()=default\n-Default constructor creates empty factor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"HybridFactor\\n\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.cpp:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bt_\bi_\bn_\bu_\bo_\bu_\bs_\bK_\be_\by_\bs_\b_\n-KeyVector continuousKeys_\n-Record continuous keys for book-keeping.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n-const DiscreteKeys & discreteKeys() const\n-Return the discrete keys for this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactor.h:132\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n-const DiscreteValues & discrete() const\n-Return the discrete values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n-const Values & nonlinear() const\n-Return the nonlinear values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Implementation of a discrete conditional mixture factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n-MixtureFactor(const KeyVector &keys, const DiscreteKeys &discreteKeys, const\n-std::vector< boost::shared_ptr< FACTOR > > &factors, bool normalized=false)\n-Convenience constructor that generates the underlying factor decision tree for\n-us.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &continuousValues, const DiscreteValues\n-&discreteValues) const\n-Compute error of factor given both continuous and discrete values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:153\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-AlgebraicDecisionTree< Key > error(const Values &continuousValues) const\n-Compute error of the MixtureFactor as a tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br\n-MixtureFactor(const KeyVector &keys, const DiscreteKeys &discreteKeys, const\n-Factors &factors, bool normalized=false)\n-Construct from Decision tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const HybridFactor &other, double tol=1e-9) const override\n-Check equality.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:206\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-GaussianFactor::shared_ptr linearize(const Values &continuousValues, const\n-DiscreteValues &discreteValues) const\n-Linearize specific nonlinear factors based on the assignment in discreteValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:232\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bL_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\bi_\bn_\bg_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n-double nonlinearFactorLogNormalizingConstant(const sharedFactor &factor, const\n-Values &values) const\n-If the component factors are not already normalized, we want to compute their\n-normalizing constants s...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:261\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const HybridValues &values) const override\n-Compute error of factor given hybrid values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:170\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-Testable.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-DecisionTree< Key, sharedFactor > Factors\n-typedef for DecisionTree which has Keys as node labels and NonlinearFactor as\n-leaf nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const\n-Get the dimension of the factor (number of rows on linearization).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:179\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianMixtureFactor > linearize(const Values\n-&continuousValues) const\n-Linearize all the continuous factors to get a GaussianMixtureFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MixtureFactor.h:240\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n-Symbol.h was moved to inference directory, this header was retained for\n-compatibility.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+Both ManifoldTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bt_\bo_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn\n+gtsam::Quaternion toQuaternion() const\n+Compute the quaternion representation of this rotation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:233\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+Matrix3 matrix() const\n+return 3*3 rotation matrix\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3M.cpp:219\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n+Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does\n+not make sense to make...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n+NavState()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n+NavState(const Matrix3 &R, const Vector6 &tv)\n+Construct from SO(3) and R^6.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n+NavState(const Rot3 &R, const Point3 &t, const Velocity3 &v)\n+Construct from attitude, position, velocity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bR\n+Matrix3 R() const\n+Return rotation matrix. Induces computation in quaternion mode.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n+NavState(const Pose3 &pose, const Velocity3 &v)\n+Construct from pose and velocity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bv\n+const Vector3 & v() const\n+Return velocity as Vector3. Computation-free.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bt\n+Vector3 t() const\n+Return position as Vector3.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b:_\b:_\bq_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn\n+Quaternion quaternion() const\n+Return quaternion. Induces computation in matrix mode.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NavState.h:99\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n+ * _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00494_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00488_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n
HybridBayesTree.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
20#pragma once
\n
21
\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n
28
\n
29#include <string>
\n
30
\n
31namespace gtsam {
\n
32
\n
33// Forward declarations
\n
34class HybridConditional;
\n@@ -217,20 +217,20 @@\n
166 clique->print(s + "stored clique", formatter);
\n
167 }
\n
\n
168};
\n
\n
169
\n
170} // namespace gtsam
\n-
A Bayes net of Gaussian Conditionals indexed by discrete keys.
\n-
Linearized Hybrid factor graph that uses type erasure.
\n-
Base class for cliques of a BayesTree.
\n-
Base class for conditional densities.
\n-
Bayes Tree is a tree of cliques of a Bayes Chain.
\n-
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n+
A Bayes net of Gaussian Conditionals indexed by discrete keys.
\n+
Linearized Hybrid factor graph that uses type erasure.
\n+
Bayes Tree is a tree of cliques of a Bayes Chain.
\n+
Base class for conditional densities.
\n+
Base class for cliques of a BayesTree.
\n+
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
A map from keys to values.
Definition DiscreteValues.h:34
\n@@ -249,13 +249,13 @@\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n
The Factor::error simply extracts the.
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -119,20 +119,20 @@\n 168};\n 169\n 170} // namespace gtsam\n _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n A Bayes net of Gaussian Conditionals indexed by discrete keys.\n _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Linearized Hybrid factor graph that uses type erasure.\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n-Base class for cliques of a BayesTree.\n-_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-Base class for conditional densities.\n _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n Bayes Tree is a tree of cliques of a Bayes Chain.\n+_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+Base class for conditional densities.\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n+Base class for cliques of a BayesTree.\n _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00509_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00527_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
HybridBayesNet.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
3 * Atlanta, Georgia 30332-0415
\n
4 * All Rights Reserved
\n
5 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
6 * See LICENSE for the license information
\n
7 * -------------------------------------------------------------------------- */
\n
8
\n
18#pragma once
\n
19
\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n
26
\n
27namespace gtsam {
\n
28
\n
\n
35class GTSAM_EXPORT HybridBayesNet : public BayesNet<HybridConditional> {
\n
36 public:
\n \n@@ -212,20 +212,20 @@\n
237};
\n
\n
238
\n
240template <>
\n
241struct traits<HybridBayesNet> : public Testable<HybridBayesNet> {};
\n
242
\n
243} // namespace gtsam
\n-\n-\n-\n-
Bayes network.
\n-
Chordal Bayes Net, the result of eliminating a factor graph.
\n-
Included from all GTSAM files.
\n+\n+\n+\n+
Bayes network.
\n+
Chordal Bayes Net, the result of eliminating a factor graph.
\n+
Included from all GTSAM files.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n@@ -246,13 +246,13 @@\n
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -106,16 +106,16 @@\n 237};\n 238\n 240template <>\n _\b2_\b4_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n 242\n 243} // namespace gtsam\n _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n Bayes network.\n _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n Chordal Bayes Net, the result of eliminating a factor graph.\n _\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n Included from all GTSAM files.\n _\bg_\bt_\bs_\ba_\bm\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00524_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00269_source.html", "comments": ["Files 88% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridJunctionTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteEliminationTree.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
HybridJunctionTree.h
\n+
DiscreteEliminationTree.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-\n-\n-
23
\n-
24namespace gtsam {
\n-
25
\n-
26// Forward declarations
\n-
27class HybridEliminationTree;
\n-
28
\n-
\n-
52class GTSAM_EXPORT HybridJunctionTree
\n-
53 : public JunctionTree<HybridBayesTree, HybridGaussianFactorGraph> {
\n-
54
\n-
55 public:
\n-\n-\n-\n-
59 typedef boost::shared_ptr<This> shared_ptr;
\n+
19#pragma once
\n+
20
\n+\n+\n+\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
\n+
31 class GTSAM_EXPORT DiscreteEliminationTree :
\n+
32 public EliminationTree<DiscreteBayesNet, DiscreteFactorGraph>
\n+
33 {
\n+
34 public:
\n+\n+\n+
37 typedef boost::shared_ptr<This> shared_ptr;
\n+
38
\n+\n+
48 const VariableIndex& structure, const Ordering& order);
\n+
49
\n+\n+
56 const Ordering& order);
\n+
57
\n+
59 bool equals(const This& other, double tol = 1e-9) const;
\n
60
\n-
70 HybridJunctionTree(const HybridEliminationTree& eliminationTree);
\n-
71};
\n-
\n-
72
\n-
73} // namespace gtsam
\n-
Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
\n-
Linearized Hybrid factor graph that uses type erasure.
\n-
The junction tree.
\n+
61 private:
\n+
62
\n+
63 friend class ::EliminationTreeTester;
\n+
64
\n+
65 };
\n+
\n+
66
\n+
67}
\n+\n+\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Elimination Tree type for Hybrid Factor Graphs.
Definition HybridEliminationTree.h:32
\n-
An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition HybridJunctionTree.h:53
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition HybridJunctionTree.h:59
\n-
JunctionTree< HybridBayesTree, HybridGaussianFactorGraph > Base
Base class.
Definition HybridJunctionTree.h:57
\n-
HybridJunctionTree This
This class.
Definition HybridJunctionTree.h:58
\n-
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
Elimination tree for discrete factors.
Definition DiscreteEliminationTree.h:33
\n+
DiscreteEliminationTree This
This class.
Definition DiscreteEliminationTree.h:36
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition DiscreteEliminationTree.h:37
\n+
EliminationTree< DiscreteBayesNet, DiscreteFactorGraph > Base
Base class.
Definition DiscreteEliminationTree.h:35
\n+
A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.
Definition DiscreteFactorGraph.h:101
\n+
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n+
Definition Ordering.h:34
\n+
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,80 +1,91 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridJunctionTree.h\n+DiscreteEliminationTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-26// Forward declarations\n-27class HybridEliminationTree;\n-28\n-_\b5_\b2class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-53 : public _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n-54\n-55 public:\n-56 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b,_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>\n-_\b5_\b7 _\bB_\ba_\bs_\be;\n-_\b5_\b8 typedef _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-_\b5_\b9 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+_\b3_\b1 class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n+32 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+33 {\n+34 public:\n+_\b3_\b5 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b,_\b _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n+_\b3_\b6 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+_\b3_\b7 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+38\n+47 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n+48 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+49\n+55 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n+56 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+57\n+59 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n 60\n-70 _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be& eliminationTree);\n-71};\n-72\n-73} // namespace gtsam\n-_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\n-_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linearized Hybrid factor graph that uses type erasure.\n-_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-The junction tree.\n+61 private:\n+62\n+63 friend class ::EliminationTreeTester;\n+64\n+65 };\n+66\n+67}\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-Elimination Tree type for Hybrid Factor Graphs.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-An EliminatableClusterTree, i.e., a set of variable clusters with factors,\n-arranged in a tree,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridJunctionTree.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+Elimination tree for discrete factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+DiscreteEliminationTree This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n boost::shared_ptr< This > shared_ptr\n Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridJunctionTree.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n-JunctionTree< HybridBayesTree, HybridGaussianFactorGraph > Base\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n+EliminationTree< DiscreteBayesNet, DiscreteFactorGraph > Base\n Base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridJunctionTree.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-HybridJunctionTree This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridJunctionTree.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-A JunctionTree is a cluster tree, a set of variable clusters with factors,\n-arranged in a tree,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteEliminationTree.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Discrete Factor Graph is a factor graph where all factors are Discrete, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteFactorGraph.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+An elimination tree is a data structure used intermediately during elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+The VariableIndex class computes and stores the block column structure of a\n+factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00530.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00833.html", "comments": ["Files 88% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianFactorGraph.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/linearAlgorithms-inst.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n \n
\n \n-
HybridGaussianFactorGraph.h File Reference
\n+
linearAlgorithms-inst.h File Reference
\n
\n
\n \n-

Linearized Hybrid factor graph that uses type erasure. \n+

Templated algorithms that are used in multiple places in linear. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n+\n \n-\n+\n+\n \n

\n Classes

struct  gtsam::EliminationTraits< HybridGaussianFactorGraph >
struct  gtsam::internal::linearAlgorithms::OptimizeData
 
class  gtsam::HybridGaussianFactorGraph
struct  gtsam::internal::linearAlgorithms::OptimizeClique< CLIQUE >
 Pre-order visitor for back-substitution in a Bayes tree. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n-\n-\n+\n+\n+\n

\n Functions

std::pair< HybridConditional::shared_ptr, boost::shared_ptr< Factor > > gtsam::EliminateHybrid (const HybridGaussianFactorGraph &factors, const Ordering &keys)
 Main elimination function for HybridGaussianFactorGraph.
 
const Ordering gtsam::HybridOrdering (const HybridGaussianFactorGraph &graph)
 Return a Colamd constrained ordering where the discrete keys are eliminated after the continuous keys.
 
\n+template<class BAYESTREE >
VectorValues gtsam::internal::linearAlgorithms::optimizeBayesTree (const BAYESTREE &bayesTree)
 
\n

Detailed Description

\n-

Linearized Hybrid factor graph that uses type erasure.

\n-
Author
Fan Jiang, Varun Agrawal, Frank Dellaert
\n-
Date
Mar 11, 2022
\n+

Templated algorithms that are used in multiple places in linear.

\n+
Author
Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,41 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-HybridGaussianFactorGraph.h File Reference\n-Linearized Hybrid factor graph that uses type erasure. _\bM_\bo_\br_\be_\b._\b._\b.\n+linearAlgorithms-inst.h File Reference\n+Templated algorithms that are used in multiple places in linear. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bC_\bl_\bi_\bq_\bu_\be_\b<_\b _\bC_\bL_\bI_\bQ_\bU_\bE_\b _\b>\n+\u00a0 Pre-order visitor for back-substitution in a Bayes tree. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- std::pair< _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bH_\by_\bb_\br_\bi_\bd (const\n-_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, boost::shared_ptr< _\bF_\ba_\bc_\bt_\bo_\br > _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors,\n- >\u00a0 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n-\u00a0 Main elimination function for\n- _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh.\n-\u00a0\n- const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bO_\br_\bd_\be_\br_\bi_\bn_\bg (const\n- _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph)\n- Return a Colamd constrained ordering\n-\u00a0 where the discrete keys are eliminated\n- after the continuous keys.\n+template\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:l\bli\bin\bne\bea\bar\brA\bAl\blg\bgo\bor\bri\bit\bth\bhm\bms\bs:\b::\b:o\bop\bpt\bti\bim\bmi\biz\bze\beB\bBa\bay\bye\bes\bsT\bTr\bre\bee\be (const\n+ BAYESTREE &bayesTree)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Linearized Hybrid factor graph that uses type erasure.\n+Templated algorithms that are used in multiple places in linear.\n Author\n- Fan Jiang, Varun Agrawal, Frank Dellaert\n- Date\n- Mar 11, 2022\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00530_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01088_source.html", "comments": ["Files 87% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GncParams.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n
\n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
HybridGaussianFactorGraph.h
\n+
GncParams.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-\n-\n-\n-\n-\n-
29
\n-
30namespace gtsam {
\n+
27#pragma once
\n+
28
\n+\n+\n
31
\n-
32// Forward declarations
\n-
33class HybridGaussianFactorGraph;
\n-
34class HybridConditional;
\n-
35class HybridBayesNet;
\n-
36class HybridEliminationTree;
\n-
37class HybridBayesTree;
\n-
38class HybridJunctionTree;
\n-
39class DecisionTreeFactor;
\n-
40class JacobianFactor;
\n-
41class HybridValues;
\n-
42
\n-
51GTSAM_EXPORT
\n-
52std::pair<boost::shared_ptr<HybridConditional>, boost::shared_ptr<Factor>>
\n-
53EliminateHybrid(const HybridGaussianFactorGraph& factors, const Ordering& keys);
\n-
54
\n-
61GTSAM_EXPORT const Ordering
\n-
62HybridOrdering(const HybridGaussianFactorGraph& graph);
\n-
63
\n-
64/* ************************************************************************* */
\n-
65template <>
\n-
\n-\n-\n-\n-\n-
71 typedef HybridConditional
\n-\n-
73 typedef HybridBayesNet
\n-\n-\n-\n-\n-\n-
80 static std::pair<boost::shared_ptr<ConditionalType>,
\n-
81 boost::shared_ptr<FactorType>>
\n-
\n-
82 DefaultEliminate(const FactorGraphType& factors, const Ordering& keys) {
\n-
83 return EliminateHybrid(factors, keys);
\n-
84 }
\n-
\n-
\n-\n-
87 const FactorGraphType& graph,
\n-
88 boost::optional<const VariableIndex&> variableIndex) {
\n-
89 return HybridOrdering(graph);
\n-
90 }
\n-
\n-
91};
\n-
\n-
92
\n-
\n-\n-
101 : public HybridFactorGraph,
\n-
102 public EliminateableFactorGraph<HybridGaussianFactorGraph> {
\n-
103 protected:
\n-
105 template <typename FACTOR>
\n-
106 using IsGaussian = typename std::enable_if<
\n-
107 std::is_base_of<GaussianFactor, FACTOR>::value>::type;
\n-
108
\n-
109 public:
\n-
110 using Base = HybridFactorGraph;
\n-\n-\n-\n-
114 using shared_ptr = boost::shared_ptr<This>;
\n-
115
\n-\n-\n-
118
\n-
121
\n-\n-
124
\n-
130 template <class DERIVEDFACTOR>
\n-
\n-\n-
132 : Base(graph) {}
\n-
\n-
133
\n-
137
\n-
138 // TODO(dellaert): customize print and equals.
\n-
139 // void print(const std::string& s = "HybridGaussianFactorGraph",
\n-
140 // const KeyFormatter& keyFormatter = DefaultKeyFormatter) const
\n-
141 // override;
\n-
142 // bool equals(const This& fg, double tol = 1e-9) const override;
\n-
143
\n-
147
\n-
148 using Base::error; // Expose error(const HybridValues&) method..
\n+
32namespace gtsam {
\n+
33
\n+
34/* ************************************************************************* */
\n+
\n+\n+
37 GM /*Geman McClure*/,
\n+
38 TLS /*Truncated least squares*/
\n+
39};
\n+
\n+
40
\n+
41template<class BaseOptimizerParameters>
\n+
\n+
42class GncParams {
\n+
43 public:
\n+
45 typedef typename BaseOptimizerParameters::OptimizerType OptimizerType;
\n+
46
\n+
\n+
48 enum Verbosity {
\n+
49 SILENT = 0,
\n+
50 SUMMARY,
\n+
51 MU,
\n+
52 WEIGHTS,
\n+
53 VALUES
\n+
54 };
\n+
\n+
55
\n+
\n+
57 GncParams(const BaseOptimizerParameters& baseOptimizerParams)
\n+\n+
59 }
\n+
\n+
60
\n+
\n+\n+\n+
64 }
\n+
\n+
65
\n+
67 BaseOptimizerParameters baseOptimizerParams;
\n+\n+
70 size_t maxIterations = 100;
\n+
71 double muStep = 1.4;
\n+
72 double relativeCostTol = 1e-5;
\n+
73 double weightsTol = 1e-4;
\n+\n+
75
\n+
76 //TODO(Varun) replace IndexVector with vector<size_t> once pybind11/stl.h is globally enabled.
\n+\n+\n+
82 IndexVector knownOutliers = IndexVector();
\n+
83
\n+
\n+
85 void setLossType(const GncLossType type) {
\n+
86 lossType = type;
\n+
87 }
\n+
\n+
88
\n+
\n+
90 void setMaxIterations(const size_t maxIter) {
\n+
91 std::cout
\n+
92 << "setMaxIterations: changing the max nr of iters might lead to less accurate solutions and is not recommended! "
\n+
93 << std::endl;
\n+
94 maxIterations = maxIter;
\n+
95 }
\n+
\n+
96
\n+
\n+
98 void setMuStep(const double step) {
\n+
99 muStep = step;
\n+
100 }
\n+
\n+
101
\n+
\n+
103 void setRelativeCostTol(double value) {
\n+
104 relativeCostTol = value;
\n+
105 }
\n+
\n+
106
\n+
\n+
108 void setWeightsTol(double value) {
\n+
109 weightsTol = value;
\n+
110 }
\n+
\n+
111
\n+
\n+
113 void setVerbosityGNC(const Verbosity value) {
\n+
114 verbosity = value;
\n+
115 }
\n+
\n+
116
\n+
\n+
123 void setKnownInliers(const IndexVector& knownIn) {
\n+
124 for (size_t i = 0; i < knownIn.size(); i++){
\n+
125 knownInliers.push_back(knownIn[i]);
\n+
126 }
\n+
127 std::sort(knownInliers.begin(), knownInliers.end());
\n+
128 }
\n+
\n+
129
\n+
\n+
134 void setKnownOutliers(const IndexVector& knownOut) {
\n+
135 for (size_t i = 0; i < knownOut.size(); i++){
\n+
136 knownOutliers.push_back(knownOut[i]);
\n+
137 }
\n+
138 std::sort(knownOutliers.begin(), knownOutliers.end());
\n+
139 }
\n+
\n+
140
\n+
\n+
142 bool equals(const GncParams& other, double tol = 1e-9) const {
\n+
143 return baseOptimizerParams.equals(other.baseOptimizerParams)
\n+
144 && lossType == other.lossType && maxIterations == other.maxIterations
\n+
145 && std::fabs(muStep - other.muStep) <= tol
\n+
146 && verbosity == other.verbosity && knownInliers == other.knownInliers
\n+
147 && knownOutliers == other.knownOutliers;
\n+
148 }
\n+
\n
149
\n-
159 AlgebraicDecisionTree<Key> error(const VectorValues& continuousValues) const;
\n-
160
\n-\n-
170 const VectorValues& continuousValues) const;
\n-
171
\n-
178 double probPrime(const HybridValues& values) const;
\n-
179
\n-
189 GaussianFactorGraphTree assembleGraphTree() const;
\n-
190
\n-
192};
\n-
\n-
193
\n-
194} // namespace gtsam
\n-
Factor graph with utilities for hybrid factors.
\n-\n-
A set of GaussianFactors, indexed by a set of discrete keys.
\n-
Factor Graph Base Class.
\n-
Variable elimination algorithms for factor graphs.
\n-
Variable ordering for the elimination algorithm.
\n-
Factor Graph Values.
\n-
A factor with a quadratic error function - a Gaussian.
\n-
std::pair< HybridConditional::shared_ptr, boost::shared_ptr< Factor > > EliminateHybrid(const HybridGaussianFactorGraph &factors, const Ordering &frontalKeys)
Main elimination function for HybridGaussianFactorGraph.
Definition HybridGaussianFactorGraph.cpp:320
\n+
\n+
151 void print(const std::string& str) const {
\n+
152 std::cout << str << "\\n";
\n+
153 switch (lossType) {
\n+
154 case GM:
\n+
155 std::cout << "lossType: Geman McClure" << "\\n";
\n+
156 break;
\n+
157 case TLS:
\n+
158 std::cout << "lossType: Truncated Least-squares" << "\\n";
\n+
159 break;
\n+
160 default:
\n+
161 throw std::runtime_error("GncParams::print: unknown loss type.");
\n+
162 }
\n+
163 std::cout << "maxIterations: " << maxIterations << "\\n";
\n+
164 std::cout << "muStep: " << muStep << "\\n";
\n+
165 std::cout << "relativeCostTol: " << relativeCostTol << "\\n";
\n+
166 std::cout << "weightsTol: " << weightsTol << "\\n";
\n+
167 std::cout << "verbosity: " << verbosity << "\\n";
\n+
168 for (size_t i = 0; i < knownInliers.size(); i++)
\n+
169 std::cout << "knownInliers: " << knownInliers[i] << "\\n";
\n+
170 for (size_t i = 0; i < knownOutliers.size(); i++)
\n+
171 std::cout << "knownOutliers: " << knownOutliers[i] << "\\n";
\n+
172 baseOptimizerParams.print("Base optimizer params: ");
\n+
173 }
\n+
\n+
174};
\n+
\n+
175
\n+
176}
\n+\n+
A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
const Ordering HybridOrdering(const HybridGaussianFactorGraph &graph)
Return a Colamd constrained ordering where the discrete keys are eliminated after the continuous keys...
Definition HybridGaussianFactorGraph.cpp:72
\n-
An algebraic decision tree fixes the range of a DecisionTree to double.
Definition AlgebraicDecisionTree.h:38
\n-
a decision tree is a function from assignments to values.
Definition DecisionTree.h:61
\n-
A hybrid Bayes net is a collection of HybridConditionals, which can have discrete conditionals,...
Definition HybridBayesNet.h:35
\n-
A Bayes tree representing a Hybrid density.
Definition HybridBayesTree.h:64
\n-
Hybrid Conditional Density.
Definition HybridConditional.h:62
\n-
Elimination Tree type for Hybrid Factor Graphs.
Definition HybridEliminationTree.h:32
\n-
Hybrid Factor Graph Factor graph with utilities for hybrid factors.
Definition HybridFactorGraph.h:39
\n-
static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering &keys)
The default dense elimination function.
Definition HybridGaussianFactorGraph.h:82
\n-
HybridConditional ConditionalType
Type of conditionals from elimination.
Definition HybridGaussianFactorGraph.h:72
\n-
HybridGaussianFactorGraph FactorGraphType
Type of the factor graph (e.g.
Definition HybridGaussianFactorGraph.h:69
\n-
HybridJunctionTree JunctionTreeType
Type of Junction tree.
Definition HybridGaussianFactorGraph.h:78
\n-
HybridEliminationTree EliminationTreeType
Type of elimination tree.
Definition HybridGaussianFactorGraph.h:76
\n-
static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::optional< const VariableIndex & > variableIndex)
The default ordering generation function.
Definition HybridGaussianFactorGraph.h:86
\n-
Factor FactorType
Type of factors in factor graph.
Definition HybridGaussianFactorGraph.h:67
\n-
HybridBayesTree BayesTreeType
Type of Bayes tree.
Definition HybridGaussianFactorGraph.h:77
\n-
HybridBayesNet BayesNetType
Type of Bayes net from sequential elimination.
Definition HybridGaussianFactorGraph.h:74
\n-
Definition HybridGaussianFactorGraph.h:102
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to This
Definition HybridGaussianFactorGraph.h:114
\n-
typename std::enable_if< std::is_base_of< GaussianFactor, FACTOR >::value >::type IsGaussian
Check if FACTOR type is derived from GaussianFactor.
Definition HybridGaussianFactorGraph.h:107
\n-
KeyVector Indices
map from keys to values
Definition HybridGaussianFactorGraph.h:117
\n-
EliminateableFactorGraph< This > BaseEliminateable
for elimination
Definition HybridGaussianFactorGraph.h:113
\n-
HybridGaussianFactorGraph()=default
Default constructor.
\n-
HybridGaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition HybridGaussianFactorGraph.h:131
\n-
An EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition HybridJunctionTree.h:53
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n-
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:57
\n-
Definition Factor.h:68
\n-
Definition Ordering.h:34
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
the error.
\n-
In Gaussian factors, the error function returns either the negative log-likelihood,...
\n+
GncLossType
Choice of robust loss function for GNC.
Definition GncParams.h:36
\n+
Definition GncParams.h:42
\n+
BaseOptimizerParameters baseOptimizerParams
GNC parameters.
Definition GncParams.h:67
\n+
IndexVector knownInliers
Slots in the factor graph corresponding to measurements that we know are outliers.
Definition GncParams.h:80
\n+
GncParams()
Default constructor.
Definition GncParams.h:62
\n+
BaseOptimizerParameters::OptimizerType OptimizerType
For each parameter, specify the corresponding optimizer: e.g., GaussNewtonParams -> GaussNewtonOptimi...
Definition GncParams.h:45
\n+
void setKnownInliers(const IndexVector &knownIn)
(Optional) Provide a vector of measurements that must be considered inliers.
Definition GncParams.h:123
\n+
void print(const std::string &str) const
Print.
Definition GncParams.h:151
\n+
FastVector< uint64_t > IndexVector
Slots in the factor graph corresponding to measurements that we know are inliers.
Definition GncParams.h:79
\n+
GncParams(const BaseOptimizerParameters &baseOptimizerParams)
Constructor.
Definition GncParams.h:57
\n+
double muStep
Multiplicative factor to reduce/increase the mu in gnc.
Definition GncParams.h:71
\n+
double weightsTol
If the weights are within weightsTol from being binary, stop iterating (only for TLS)
Definition GncParams.h:73
\n+
void setKnownOutliers(const IndexVector &knownOut)
(Optional) Provide a vector of measurements that must be considered outliers.
Definition GncParams.h:134
\n+
Verbosity verbosity
Verbosity level.
Definition GncParams.h:74
\n+
bool equals(const GncParams &other, double tol=1e-9) const
Equals.
Definition GncParams.h:142
\n+
void setRelativeCostTol(double value)
Set the maximum relative difference in mu values to stop iterating.
Definition GncParams.h:103
\n+
GncLossType lossType
any other specific GNC parameters:
Definition GncParams.h:69
\n+
size_t maxIterations
Maximum number of iterations.
Definition GncParams.h:70
\n+
void setLossType(const GncLossType type)
Set the robust loss function to be used in GNC (chosen among the ones in GncLossType).
Definition GncParams.h:85
\n+
void setMuStep(const double step)
Set the graduated non-convexity step: at each GNC iteration, mu is updated as mu <- mu * muStep.
Definition GncParams.h:98
\n+
double relativeCostTol
If relative cost change is below this threshold, stop iterating.
Definition GncParams.h:72
\n+
void setVerbosityGNC(const Verbosity value)
Set the verbosity level.
Definition GncParams.h:113
\n+
void setMaxIterations(const size_t maxIter)
Set the maximum number of iterations in GNC (changing the max nr of iters might lead to less accurate...
Definition GncParams.h:90
\n+
Verbosity
Verbosity levels.
Definition GncParams.h:48
\n+
void setWeightsTol(double value)
Set the maximum difference between the weights and their rounding in {0,1} to stop iterating.
Definition GncParams.h:108
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,287 +1,265 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridGaussianFactorGraph.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+GncParams.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n+27#pragma once\n+28\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n+30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n 31\n-32// Forward declarations\n-33class HybridGaussianFactorGraph;\n-34class HybridConditional;\n-35class HybridBayesNet;\n-36class HybridEliminationTree;\n-37class HybridBayesTree;\n-38class HybridJunctionTree;\n-39class DecisionTreeFactor;\n-40class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br;\n-41class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n-42\n-51GTSAM_EXPORT\n-52std::pair, boost::shared_ptr>\n-53_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bH_\by_\bb_\br_\bi_\bd(const HybridGaussianFactorGraph& factors, const Ordering&\n-keys);\n-54\n-61GTSAM_EXPORT const Ordering\n-62_\bH_\by_\bb_\br_\bi_\bd_\bO_\br_\bd_\be_\br_\bi_\bn_\bg(const HybridGaussianFactorGraph& graph);\n-63\n-64/* *************************************************************************\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+34/* *************************************************************************\n */\n-65template <>\n-_\b6_\b6struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh> {\n-_\b6_\b7 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n-68 typedef _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-_\b6_\b9 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n-71 typedef _\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-_\b7_\b2 _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-73 typedef _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-_\b7_\b4 _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n-75 typedef _\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-_\b7_\b6 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-_\b7_\b7 typedef _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-_\b7_\b8 typedef _\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-80 static std::pair,\n-81 boost::shared_ptr>\n-_\b8_\b2 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) {\n-83 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bH_\by_\bb_\br_\bi_\bd(factors, keys);\n-84 }\n-_\b8_\b6 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc(\n-87 const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& graph,\n-88 boost::optional variableIndex) {\n-89 return _\bH_\by_\bb_\br_\bi_\bd_\bO_\br_\bd_\be_\br_\bi_\bn_\bg(graph);\n-90 }\n-91};\n-92\n-_\b1_\b0_\b0class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-101 : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh,\n-102 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n-103 protected:\n-105 template \n-_\b1_\b0_\b6 using _\bI_\bs_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn = typename std::enable_if<\n-107 std::is_base_of::value>::type;\n-108\n-109 public:\n-110 using _\bB_\ba_\bs_\be = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n-_\b1_\b1_\b1 using _\bT_\bh_\bi_\bs = _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n-_\b1_\b1_\b2 using _\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be =\n-113 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bT_\bh_\bi_\bs_\b>;\n-_\b1_\b1_\b4 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n-115\n-_\b1_\b1_\b6 using _\bV_\ba_\bl_\bu_\be_\bs = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs;\n-_\b1_\b1_\b7 using _\bI_\bn_\bd_\bi_\bc_\be_\bs = _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br;\n-118\n-121\n-_\b1_\b2_\b3 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() = default;\n-124\n-130 template \n-_\b1_\b3_\b1 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph)\n-132 : _\bB_\ba_\bs_\be(graph) {}\n-133\n-137\n-138 // TODO(dellaert): customize print and equals.\n-139 // void print(const std::string& s = \"HybridGaussianFactorGraph\",\n-140 // const KeyFormatter& keyFormatter = DefaultKeyFormatter) const\n-141 // override;\n-142 // bool equals(const This& fg, double tol = 1e-9) const override;\n-143\n-147\n-148 using Base::error; // Expose error(const HybridValues&) method..\n+_\b3_\b6enum _\bG_\bn_\bc_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be {\n+37 GM /*Geman McClure*/,\n+38 TLS /*Truncated least squares*/\n+39};\n+40\n+41template\n+_\b4_\b2class _\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs {\n+43 public:\n+_\b4_\b5 typedef typename BaseOptimizerParameters::OptimizerType _\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bT_\by_\bp_\be;\n+46\n+_\b4_\b8 enum _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by {\n+49 SILENT = 0,\n+50 SUMMARY,\n+51 MU,\n+52 WEIGHTS,\n+53 VALUES\n+54 };\n+55\n+_\b5_\b7 _\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs(const BaseOptimizerParameters& _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs)\n+58 : _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs(_\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs) {\n+59 }\n+60\n+_\b6_\b2 _\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs()\n+63 : _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs() {\n+64 }\n+65\n+_\b6_\b7 BaseOptimizerParameters _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs;\n+_\b6_\b9 _\bG_\bn_\bc_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be _\bl_\bo_\bs_\bs_\bT_\by_\bp_\be = TLS;\n+_\b7_\b0 size_t _\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs = 100;\n+_\b7_\b1 double _\bm_\bu_\bS_\bt_\be_\bp = 1.4;\n+_\b7_\b2 double _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl = 1e-5;\n+_\b7_\b3 double _\bw_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl = 1e-4;\n+_\b7_\b4 _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by = SILENT;\n+75\n+76 //TODO(Varun) replace IndexVector with vector once pybind11/stl.h is\n+globally enabled.\n+_\b7_\b8 using _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br = _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bu_\bi_\bn_\bt_\b6_\b4_\b__\bt_\b>;\n+_\b8_\b0 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs = _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br();\n+82 _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br knownOutliers = _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br();\n+83\n+_\b8_\b5 void _\bs_\be_\bt_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be(const _\bG_\bn_\bc_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be type) {\n+86 _\bl_\bo_\bs_\bs_\bT_\by_\bp_\be = type;\n+87 }\n+88\n+_\b9_\b0 void _\bs_\be_\bt_\bM_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs(const size_t maxIter) {\n+91 std::cout\n+92 << \"setMaxIterations: changing the max nr of iters might lead to less\n+accurate solutions and is not recommended! \"\n+93 << std::endl;\n+94 _\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs = maxIter;\n+95 }\n+96\n+_\b9_\b8 void _\bs_\be_\bt_\bM_\bu_\bS_\bt_\be_\bp(const double step) {\n+99 _\bm_\bu_\bS_\bt_\be_\bp = step;\n+100 }\n+101\n+_\b1_\b0_\b3 void _\bs_\be_\bt_\bR_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl(double value) {\n+104 _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl = value;\n+105 }\n+106\n+_\b1_\b0_\b8 void _\bs_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl(double value) {\n+109 _\bw_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl = value;\n+110 }\n+111\n+_\b1_\b1_\b3 void _\bs_\be_\bt_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bG_\bN_\bC(const _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by value) {\n+114 _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by = value;\n+115 }\n+116\n+_\b1_\b2_\b3 void _\bs_\be_\bt_\bK_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs(const _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br& knownIn) {\n+124 for (size_t i = 0; i < knownIn.size(); i++){\n+125 _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs.push_back(knownIn[i]);\n+126 }\n+127 std::sort(_\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs.begin(), _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs.end());\n+128 }\n+129\n+_\b1_\b3_\b4 void _\bs_\be_\bt_\bK_\bn_\bo_\bw_\bn_\bO_\bu_\bt_\bl_\bi_\be_\br_\bs(const _\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br& knownOut) {\n+135 for (size_t i = 0; i < knownOut.size(); i++){\n+136 knownOutliers.push_back(knownOut[i]);\n+137 }\n+138 std::sort(knownOutliers.begin(), knownOutliers.end());\n+139 }\n+140\n+_\b1_\b4_\b2 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs& other, double tol = 1e-9) const {\n+143 return _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs.equals(other._\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs)\n+144 && _\bl_\bo_\bs_\bs_\bT_\by_\bp_\be == other._\bl_\bo_\bs_\bs_\bT_\by_\bp_\be && _\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs == other._\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n+145 && std::fabs(_\bm_\bu_\bS_\bt_\be_\bp - other._\bm_\bu_\bS_\bt_\be_\bp) <= tol\n+146 && _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by == other._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by && _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs == other._\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs\n+147 && knownOutliers == other.knownOutliers;\n+148 }\n 149\n-159 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b> error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& continuousValues)\n-const;\n-160\n-169 _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bK_\be_\by_\b> probPrime(\n-170 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& continuousValues) const;\n-171\n-178 double probPrime(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& values) const;\n-179\n-189 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\br_\be_\be assembleGraphTree() const;\n-190\n-192};\n-193\n-194} // namespace gtsam\n-_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor graph with utilities for hybrid factors.\n-_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-A set of GaussianFactors, indexed by a set of discrete keys.\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Variable elimination algorithms for factor graphs.\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-A factor with a quadratic error function - a Gaussian.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bH_\by_\bb_\br_\bi_\bd\n-std::pair< HybridConditional::shared_ptr, boost::shared_ptr< Factor > >\n-EliminateHybrid(const HybridGaussianFactorGraph &factors, const Ordering\n-&frontalKeys)\n-Main elimination function for HybridGaussianFactorGraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.cpp:320\n+_\b1_\b5_\b1 void _\bp_\br_\bi_\bn_\bt(const std::string& str) const {\n+152 std::cout << str << \"\\n\";\n+153 switch (_\bl_\bo_\bs_\bs_\bT_\by_\bp_\be) {\n+154 case GM:\n+155 std::cout << \"lossType: Geman McClure\" << \"\\n\";\n+156 break;\n+157 case TLS:\n+158 std::cout << \"lossType: Truncated Least-squares\" << \"\\n\";\n+159 break;\n+160 default:\n+161 throw std::runtime_error(\"GncParams::print: unknown loss type.\");\n+162 }\n+163 std::cout << \"maxIterations: \" << _\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs << \"\\n\";\n+164 std::cout << \"muStep: \" << _\bm_\bu_\bS_\bt_\be_\bp << \"\\n\";\n+165 std::cout << \"relativeCostTol: \" << _\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl << \"\\n\";\n+166 std::cout << \"weightsTol: \" << _\bw_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl << \"\\n\";\n+167 std::cout << \"verbosity: \" << _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by << \"\\n\";\n+168 for (size_t i = 0; i < _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs.size(); i++)\n+169 std::cout << \"knownInliers: \" << _\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs[i] << \"\\n\";\n+170 for (size_t i = 0; i < knownOutliers.size(); i++)\n+171 std::cout << \"knownOutliers: \" << knownOutliers[i] << \"\\n\";\n+172 _\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs.print(\"Base optimizer params: \");\n+173 }\n+174};\n+175\n+176}\n+_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+A nonlinear optimizer that uses the Levenberg-Marquardt trust-region scheme.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-const Ordering HybridOrdering(const HybridGaussianFactorGraph &graph)\n-Return a Colamd constrained ordering where the discrete keys are eliminated\n-after the continuous keys...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.cpp:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-An algebraic decision tree fixes the range of a DecisionTree to double.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AlgebraicDecisionTree.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be\n-a decision tree is a function from assignments to values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DecisionTree.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-A hybrid Bayes net is a collection of HybridConditionals, which can have\n-discrete conditionals,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-A Bayes tree representing a Hybrid density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Hybrid Conditional Density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridConditional.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-Elimination Tree type for Hybrid Factor Graphs.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridEliminationTree.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-Hybrid Factor Graph Factor graph with utilities for hybrid factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr<\n-FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering\n-&keys)\n-The default dense elimination function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n-HybridConditional ConditionalType\n-Type of conditionals from elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n-HybridGaussianFactorGraph FactorGraphType\n-Type of the factor graph (e.g.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-HybridJunctionTree JunctionTreeType\n-Type of Junction tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-HybridEliminationTree EliminationTreeType\n-Type of elimination tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc\n-static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::\n-optional< const VariableIndex & > variableIndex)\n-The default ordering generation function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n-Factor FactorType\n-Type of factors in factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-HybridBayesTree BayesTreeType\n-Type of Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n-HybridBayesNet BayesNetType\n-Type of Bayes net from sequential elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to This\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bI_\bs_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn\n-typename std::enable_if< std::is_base_of< GaussianFactor, FACTOR >::value >::\n-type IsGaussian\n-Check if FACTOR type is derived from GaussianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-KeyVector Indices\n-map from keys to values\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be\n-EliminateableFactorGraph< This > BaseEliminateable\n-for elimination\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-HybridGaussianFactorGraph()=default\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be\n+GncLossType\n+Choice of robust loss function for GNC.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bb_\ba_\bs_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+BaseOptimizerParameters baseOptimizerParams\n+GNC parameters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bk_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs\n+IndexVector knownInliers\n+Slots in the factor graph corresponding to measurements that we know are\n+outliers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs\n+GncParams()\n Default constructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-HybridGaussianFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n-Implicit copy/downcast constructor to override explicit template container\n-constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-An EliminatableClusterTree, i.e., a set of variable clusters with factors,\n-arranged in a tree,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridJunctionTree.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n-Traits class for eliminateable factor graphs, specifies the types that result\n-from elimination,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-EliminateableFactorGraph is a base class for factor graphs that contains\n-elimination algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-the error.\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-In Gaussian factors, the error function returns either the negative log-\n-likelihood,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bT_\by_\bp_\be\n+BaseOptimizerParameters::OptimizerType OptimizerType\n+For each parameter, specify the corresponding optimizer: e.g.,\n+GaussNewtonParams -> GaussNewtonOptimi...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bK_\bn_\bo_\bw_\bn_\bI_\bn_\bl_\bi_\be_\br_\bs\n+void setKnownInliers(const IndexVector &knownIn)\n+(Optional) Provide a vector of measurements that must be considered inliers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:123\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &str) const\n+Print.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bI_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< uint64_t > IndexVector\n+Slots in the factor graph corresponding to measurements that we know are\n+inliers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs\n+GncParams(const BaseOptimizerParameters &baseOptimizerParams)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\bu_\bS_\bt_\be_\bp\n+double muStep\n+Multiplicative factor to reduce/increase the mu in gnc.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bw_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl\n+double weightsTol\n+If the weights are within weightsTol from being binary, stop iterating (only\n+for TLS)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bK_\bn_\bo_\bw_\bn_\bO_\bu_\bt_\bl_\bi_\be_\br_\bs\n+void setKnownOutliers(const IndexVector &knownOut)\n+(Optional) Provide a vector of measurements that must be considered outliers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n+Verbosity verbosity\n+Verbosity level.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const GncParams &other, double tol=1e-9) const\n+Equals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:142\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bR_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl\n+void setRelativeCostTol(double value)\n+Set the maximum relative difference in mu values to stop iterating.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\bo_\bs_\bs_\bT_\by_\bp_\be\n+GncLossType lossType\n+any other specific GNC parameters:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n+size_t maxIterations\n+Maximum number of iterations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bL_\bo_\bs_\bs_\bT_\by_\bp_\be\n+void setLossType(const GncLossType type)\n+Set the robust loss function to be used in GNC (chosen among the ones in\n+GncLossType).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bM_\bu_\bS_\bt_\be_\bp\n+void setMuStep(const double step)\n+Set the graduated non-convexity step: at each GNC iteration, mu is updated as\n+mu <- mu * muStep.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bC_\bo_\bs_\bt_\bT_\bo_\bl\n+double relativeCostTol\n+If relative cost change is below this threshold, stop iterating.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bG_\bN_\bC\n+void setVerbosityGNC(const Verbosity value)\n+Set the verbosity level.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bM_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n+void setMaxIterations(const size_t maxIter)\n+Set the maximum number of iterations in GNC (changing the max nr of iters might\n+lead to less accurate...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:90\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n+Verbosity\n+Verbosity levels.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bn_\bc_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bs_\be_\bt_\bW_\be_\bi_\bg_\bh_\bt_\bs_\bT_\bo_\bl\n+void setWeightsTol(double value)\n+Set the maximum difference between the weights and their rounding in {0,1} to\n+stop iterating.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GncParams.h:108\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * G\bGn\bnc\bcP\bPa\bar\bra\bam\bms\bs.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00557_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01100_source.html", "comments": ["Files 87% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridSmoother.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/expressionTesting.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
HybridSmoother.h
\n+
expressionTesting.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-\n-\n-\n-
22
\n-
23namespace gtsam {
\n-
24
\n-
\n-\n-
26 private:
\n-
27 HybridBayesNet hybridBayesNet_;
\n-
28 HybridGaussianFactorGraph remainingFactorGraph_;
\n-
29
\n-
30 public:
\n-
50 void update(HybridGaussianFactorGraph graph, const Ordering& ordering,
\n-
51 boost::optional<size_t> maxNrLeaves = boost::none);
\n-
52
\n-
53 Ordering getOrdering(const HybridGaussianFactorGraph& newFactors);
\n-
54
\n-
64 std::pair<HybridGaussianFactorGraph, HybridBayesNet> addConditionals(
\n-
65 const HybridGaussianFactorGraph& graph,
\n-
66 const HybridBayesNet& hybridBayesNet, const Ordering& ordering) const;
\n-
67
\n-
69 GaussianMixture::shared_ptr gaussianMixture(size_t index) const;
\n-
70
\n-
72 const HybridBayesNet& hybridBayesNet() const;
\n-
73};
\n-
\n-
74
\n-
75}; // namespace gtsam
\n-\n-
A Bayes net of Gaussian Conditionals indexed by discrete keys.
\n-
Linearized Hybrid factor graph that uses type erasure.
\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/nonlinear/ExpressionFactor.h>
\n+\n+
24#include <gtsam/base/Testable.h>
\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
28namespace internal {
\n+
29// CPPUnitLite-style test for linearization of an ExpressionFactor
\n+
30template<typename T>
\n+
31bool testExpressionJacobians(const std::string& name_,
\n+
32 const gtsam::Expression<T>& expression, const gtsam::Values& values,
\n+
33 double nd_step, double tolerance) {
\n+
34 // Create factor
\n+
35 size_t size = traits<T>::dimension;
\n+
36 ExpressionFactor<T> f(noiseModel::Unit::Create(size),
\n+
37 expression.value(values), expression);
\n+
38 return testFactorJacobians(name_, f, values, nd_step, tolerance);
\n+
39}
\n+
40} // namespace internal
\n+
41} // namespace gtsam
\n+
42
\n+
\n+
48#define EXPECT_CORRECT_EXPRESSION_JACOBIANS(expression, values, numerical_derivative_step, tolerance) \\
\n+
49 { EXPECT(gtsam::internal::testExpressionJacobians(name_, expression, values, numerical_derivative_step, tolerance)); }
\n+
\n+
Concept check for values that can be used in unit tests.
\n+
Evaluate derivatives of a nonlinear factor numerically.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A hybrid Bayes net is a collection of HybridConditionals, which can have discrete conditionals,...
Definition HybridBayesNet.h:35
\n-
Definition HybridGaussianFactorGraph.h:102
\n-
Definition HybridSmoother.h:25
\n-
GaussianMixture::shared_ptr gaussianMixture(size_t index) const
Get the Gaussian Mixture from the Bayes Net posterior at index.
Definition HybridSmoother.cpp:131
\n-
void update(HybridGaussianFactorGraph graph, const Ordering &ordering, boost::optional< size_t > maxNrLeaves=boost::none)
Given new factors, perform an incremental update.
Definition HybridSmoother.cpp:58
\n-
std::pair< HybridGaussianFactorGraph, HybridBayesNet > addConditionals(const HybridGaussianFactorGraph &graph, const HybridBayesNet &hybridBayesNet, const Ordering &ordering) const
Add conditionals from previous timestep as part of liquefication.
Definition HybridSmoother.cpp:85
\n-
const HybridBayesNet & hybridBayesNet() const
Return the Bayes Net posterior.
Definition HybridSmoother.cpp:137
\n-
Definition Ordering.h:34
\n+
static shared_ptr Create(size_t dim)
Create a unit covariance noise model.
Definition NoiseModel.h:597
\n+
Expression class that supports automatic differentiation.
Definition Expression.h:48
\n+
T value(const Values &values, boost::optional< std::vector< Matrix > & > H=boost::none) const
Return value and optional derivatives, reverse AD version Notes: this is not terribly efficient,...
Definition Expression-inl.h:147
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,88 +1,74 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HybridSmoother.h\n+expressionTesting.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-_\b2_\b5class _\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br {\n-26 private:\n-27 _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt hybridBayesNet_;\n-28 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh remainingFactorGraph_;\n-29\n-30 public:\n-50 void _\bu_\bp_\bd_\ba_\bt_\be(_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-51 boost::optional maxNrLeaves = boost::none);\n-52\n-53 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg getOrdering(const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors);\n-54\n-64 std::pair _\ba_\bd_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bs(\n-65 const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n-66 const _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& _\bh_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n-67\n-69 GaussianMixture::shared_ptr _\bg_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be(size_t index) const;\n-70\n-72 const _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& _\bh_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() const;\n-73};\n-74\n-75}; // namespace gtsam\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-A Bayes net of Gaussian Conditionals indexed by discrete keys.\n-_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linearized Hybrid factor graph that uses type erasure.\n+20#pragma once\n+21\n+22#include \n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bf_\ba_\bc_\bt_\bo_\br_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28namespace internal {\n+29// CPPUnitLite-style test for linearization of an ExpressionFactor\n+30template\n+31bool testExpressionJacobians(const std::string& name_,\n+32 const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& expression, const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs& values,\n+33 double nd_step, double tolerance) {\n+34 // Create factor\n+35 size_t size = traits::dimension;\n+36 ExpressionFactor f(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be(size),\n+37 expression._\bv_\ba_\bl_\bu_\be(values), expression);\n+38 return testFactorJacobians(name_, f, values, nd_step, tolerance);\n+39}\n+40} // namespace internal\n+41} // namespace gtsam\n+42\n+_\b4_\b8#define EXPECT_CORRECT_EXPRESSION_JACOBIANS(expression, values,\n+numerical_derivative_step, tolerance) \\\n+49 { EXPECT(gtsam::internal::testExpressionJacobians(name_, expression, values,\n+numerical_derivative_step, tolerance)); }\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bf_\ba_\bc_\bt_\bo_\br_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh\n+Evaluate derivatives of a nonlinear factor numerically.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-A hybrid Bayes net is a collection of HybridConditionals, which can have\n-discrete conditionals,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesNet.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridSmoother.h:25\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b:_\b:_\bg_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be\n-GaussianMixture::shared_ptr gaussianMixture(size_t index) const\n-Get the Gaussian Mixture from the Bayes Net posterior at index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridSmoother.cpp:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n-void update(HybridGaussianFactorGraph graph, const Ordering &ordering, boost::\n-optional< size_t > maxNrLeaves=boost::none)\n-Given new factors, perform an incremental update.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridSmoother.cpp:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b:_\b:_\ba_\bd_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bs\n-std::pair< HybridGaussianFactorGraph, HybridBayesNet > addConditionals(const\n-HybridGaussianFactorGraph &graph, const HybridBayesNet &hybridBayesNet, const\n-Ordering &ordering) const\n-Add conditionals from previous timestep as part of liquefication.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridSmoother.cpp:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b:_\b:_\bh_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-const HybridBayesNet & hybridBayesNet() const\n-Return the Bayes Net posterior.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridSmoother.cpp:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b:_\b:_\bU_\bn_\bi_\bt_\b:_\b:_\bC_\br_\be_\ba_\bt_\be\n+static shared_ptr Create(size_t dim)\n+Create a unit covariance noise model.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:597\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+Expression class that supports automatic differentiation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b:_\b:_\bv_\ba_\bl_\bu_\be\n+T value(const Values &values, boost::optional< std::vector< Matrix > & >\n+H=boost::none) const\n+Return value and optional derivatives, reverse AD version Notes: this is not\n+terribly efficient,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression-inl.h:147\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bh_\by_\bb_\br_\bi_\bd\n- * _\bH_\by_\bb_\br_\bi_\bd_\bS_\bm_\bo_\bo_\bt_\bh_\be_\br_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bT_\be_\bs_\bt_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00566_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00503_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
GaussianMixture.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
20#pragma once
\n
21
\n
22#include <gtsam/discrete/DecisionTree-inl.h>
\n-\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n
30
\n
31namespace gtsam {
\n
32
\n
33class HybridValues;
\n
34
\n
\n
53class GTSAM_EXPORT GaussianMixture
\n@@ -230,21 +230,21 @@\n
269std::set<DiscreteKey> DiscreteKeysAsSet(const DiscreteKeys &discreteKeys);
\n
270
\n
271// traits
\n
272template <>
\n
273struct traits<GaussianMixture> : public Testable<GaussianMixture> {};
\n
274
\n
275} // namespace gtsam
\n-
specialized key for discrete variables
\n-\n-
Decision Tree for use in DiscreteFactors.
\n-\n-
A set of GaussianFactors, indexed by a set of discrete keys.
\n-
Base class for conditional densities.
\n-
Conditional Gaussian Base class.
\n+
Decision Tree for use in DiscreteFactors.
\n+\n+
specialized key for discrete variables
\n+\n+
A set of GaussianFactors, indexed by a set of discrete keys.
\n+
Base class for conditional densities.
\n+
Conditional Gaussian Base class.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::set< DiscreteKey > DiscreteKeysAsSet(const DiscreteKeys &discreteKeys)
Return the DiscreteKey vector as a set.
Definition GaussianMixture.cpp:221
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
std::function< double(const Assignment< Key > &, double)> prunerFunc(const DecisionTreeFactor &prunedDecisionTree, const HybridConditional &conditional)
Helper function to get the pruner functional.
Definition HybridBayesNet.cpp:66
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n@@ -267,13 +267,13 @@\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n
the error.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -130,19 +130,19 @@\n 269std::set _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\bA_\bs_\bS_\be_\bt(const DiscreteKeys &discreteKeys);\n 270\n 271// traits\n 272template <>\n _\b2_\b7_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n 274\n 275} // namespace gtsam\n-_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n-specialized key for discrete variables\n-_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n Decision Tree for use in DiscreteFactors.\n+_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n+specialized key for discrete variables\n _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bM_\bi_\bx_\bt_\bu_\br_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n A set of GaussianFactors, indexed by a set of discrete keys.\n _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n Base class for conditional densities.\n _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n Conditional Gaussian Base class.\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00575_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01046_source.html", "comments": ["Files 79% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExpressionFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n
\n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
FactorGraph.h
\n+
ExpressionFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21// \\callgraph
\n-
22
\n-
23#pragma once
\n-
24
\n-\n-
26#include <gtsam/inference/Key.h>
\n-\n-
28#include <gtsam/base/Testable.h>
\n-
29
\n-
30#include <Eigen/Core> // for Eigen::aligned_allocator
\n-
31
\n-
32#include <boost/assign/list_inserter.hpp>
\n-
33#include <boost/make_shared.hpp>
\n-
34#include <boost/serialization/nvp.hpp>
\n-
35#include <boost/serialization/vector.hpp>
\n-
36
\n-
37#include <string>
\n-
38#include <type_traits>
\n-
39#include <utility>
\n-
40#include <iosfwd>
\n-
41
\n-
42namespace gtsam {
\n-
44typedef FastVector<FactorIndex> FactorIndices;
\n-
45
\n-
46// Forward declarations
\n-
47template <class CLIQUE>
\n-
48class BayesTree;
\n-
49
\n-
50class HybridValues;
\n+
20#pragma once
\n+
21
\n+
22#include <array>
\n+
23#include <gtsam/config.h>
\n+
24#include <gtsam/base/Testable.h>
\n+\n+\n+
27#include <numeric>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n+
43template<typename T>
\n+
\n+\n+
45 BOOST_CONCEPT_ASSERT((IsTestable<T>));
\n+
46
\n+
47protected:
\n+
48
\n+\n+
50 static const int Dim = traits<T>::dimension;
\n
51
\n-
53template <class C>
\n-
\n-\n-
55 C& obj;
\n+\n+\n+\n+
55
\n
56
\n
57 public:
\n-
58 explicit CRefCallPushBack(C& obj) : obj(obj) {}
\n-
59 template <typename A>
\n-
60 void operator()(const A& a) {
\n-
61 obj.push_back(a);
\n-
62 }
\n-
63};
\n-
\n-
64
\n-
66template <class C>
\n-
\n-\n-
68 C& obj;
\n-
69
\n-
70 public:
\n-
71 explicit RefCallPushBack(C& obj) : obj(obj) {}
\n-
72 template <typename A>
\n-
73 void operator()(A& a) {
\n-
74 obj.push_back(a);
\n-
75 }
\n-
76};
\n-
\n-
77
\n-
79template <class C>
\n-
\n-\n-
81 C& obj;
\n-
82
\n-
83 public:
\n-
84 explicit CRefCallAddCopy(C& obj) : obj(obj) {}
\n-
85 template <typename A>
\n-
86 void operator()(const A& a) {
\n-
87 obj.addCopy(a);
\n-
88 }
\n-
89};
\n-
\n-
90
\n-
96template <class FACTOR>
\n-
\n-\n-
98 public:
\n-
99 typedef FACTOR FactorType;
\n-
100 typedef boost::shared_ptr<FACTOR>
\n-\n-
102 typedef sharedFactor value_type;
\n-
103 typedef typename FastVector<sharedFactor>::iterator iterator;
\n-
104 typedef typename FastVector<sharedFactor>::const_iterator const_iterator;
\n-
105
\n-
106 private:
\n-
107 typedef FactorGraph<FACTOR> This;
\n-
108 typedef boost::shared_ptr<This>
\n-
109 shared_ptr;
\n-
110
\n-
112 template <typename DERIVEDFACTOR>
\n-
113 using IsDerived = typename std::enable_if<
\n-
114 std::is_base_of<FactorType, DERIVEDFACTOR>::value>::type;
\n-
115
\n-
117 template <typename T>
\n-
118 using HasDerivedValueType = typename std::enable_if<
\n-
119 std::is_base_of<FactorType, typename T::value_type>::value>::type;
\n-
120
\n-
122 template <typename T>
\n-
123 using HasDerivedElementType = typename std::enable_if<std::is_base_of<
\n-
124 FactorType, typename T::value_type::element_type>::value>::type;
\n-
125
\n-
126 protected:
\n-
128 GTSAM_CONCEPT_TESTABLE_TYPE(FACTOR)
\n-
129
\n-
130
\n-\n-
132
\n-
\n-
134 bool isEqual(const FactorGraph& other) const {
\n-
135 return factors_ == other.factors_;
\n-
136 }
\n-
\n+
58 typedef boost::shared_ptr<ExpressionFactor<T> > shared_ptr;
\n+
59
\n+
\n+\n+
68 const T& measurement, const Expression<T>& expression)
\n+
69 : NoiseModelFactor(noiseModel), measured_(measurement) {
\n+\n+
71 }
\n+
\n+
72
\n+
74 ~ExpressionFactor() override {}
\n+
75
\n+
77 const T& measured() const { return measured_; }
\n+
78
\n+
\n+
80 void print(const std::string& s = "",
\n+
81 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
82 NoiseModelFactor::print(s, keyFormatter);
\n+
83 traits<T>::Print(measured_, "ExpressionFactor with measurement: ");
\n+
84 }
\n+
\n+
85
\n+
\n+
87 bool equals(const NonlinearFactor& f, double tol) const override {
\n+
88 const ExpressionFactor* p = dynamic_cast<const ExpressionFactor*>(&f);
\n+
89 return p && NoiseModelFactor::equals(f, tol) &&
\n+\n+
91 dims_ == p->dims_;
\n+
92 }
\n+
\n+
93
\n+
\n+
99 Vector unwhitenedError(const Values& x,
\n+
100 boost::optional<std::vector<Matrix>&> H = boost::none) const override {
\n+
101 if (H) {
\n+
102 const T value = expression_.valueAndDerivatives(x, keys_, dims_, *H);
\n+
103 // NOTE(hayk): Doing the reverse, AKA Local(measured_, value) is not correct here
\n+
104 // because it would use the tangent space of the measurement instead of the value.
\n+
105 return -traits<T>::Local(value, measured_);
\n+
106 } else {
\n+
107 const T value = expression_.value(x);
\n+
108 return -traits<T>::Local(value, measured_);
\n+
109 }
\n+
110 }
\n+
\n+
111
\n+
\n+
112 boost::shared_ptr<GaussianFactor> linearize(const Values& x) const override {
\n+
113 // Only linearize if the factor is active
\n+
114 if (!active(x))
\n+
115 return boost::shared_ptr<JacobianFactor>();
\n+
116
\n+
117 // In case noise model is constrained, we need to provide a noise model
\n+
118 SharedDiagonal noiseModel;
\n+
119 if (noiseModel_ && noiseModel_->isConstrained()) {
\n+
120 noiseModel = boost::static_pointer_cast<noiseModel::Constrained>(
\n+
121 noiseModel_)->unit();
\n+
122 }
\n+
123
\n+
124 // Create a writeable JacobianFactor in advance
\n+
125 boost::shared_ptr<JacobianFactor> factor(
\n+\n+
127
\n+
128 // Wrap keys and VerticalBlockMatrix into structure passed to expression_
\n+
129 VerticalBlockMatrix& Ab = factor->matrixObject();
\n+
130 internal::JacobianMap jacobianMap(keys_, Ab);
\n+
131
\n+
132 // Zero out Jacobian so we can simply add to it
\n+
133 Ab.matrix().setZero();
\n+
134
\n+
135 // Get value and Jacobians, writing directly into JacobianFactor
\n+
136 T value = expression_.valueAndJacobianMap(x, jacobianMap); // <<< Reverse AD happens here !
\n
137
\n+
138 // Evaluate error and set RHS vector b
\n+
139 Ab(size()).col(0) = traits<T>::Local(value, measured_);
\n
140
\n-\n-
143
\n-
145 template <typename ITERATOR>
\n-
\n-
146 FactorGraph(ITERATOR firstFactor, ITERATOR lastFactor) {
\n-
147 push_back(firstFactor, lastFactor);
\n+
141 // Whiten the corresponding system, Ab already contains RHS
\n+
142 if (noiseModel_) {
\n+
143 Vector b = Ab(size()).col(0); // need b to be valid for Robust noise models
\n+
144 noiseModel_->WhitenSystem(Ab.matrix(), b);
\n+
145 }
\n+
146
\n+
147 return factor;
\n
148 }
\n
\n
149
\n-
151 template <class CONTAINER>
\n-
\n-
152 explicit FactorGraph(const CONTAINER& factors) {
\n-
153 push_back(factors);
\n+
\n+
151 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
152 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
153 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n
154 }
\n
\n
155
\n-
157
\n-
158 public:
\n-
161
\n-
164 virtual ~FactorGraph() = default;
\n-
165
\n-
170 template <class DERIVEDFACTOR, typename = IsDerived<DERIVEDFACTOR>>
\n-
\n-
171 FactorGraph(std::initializer_list<boost::shared_ptr<DERIVEDFACTOR>> sharedFactors)
\n-
172 : factors_(sharedFactors) {}
\n-
\n-
173
\n-
177
\n-
182 void reserve(size_t size) { factors_.reserve(size); }
\n-
183
\n-
185 template <class DERIVEDFACTOR>
\n-
\n-
186 IsDerived<DERIVEDFACTOR> push_back(boost::shared_ptr<DERIVEDFACTOR> factor) {
\n-
187 factors_.push_back(boost::shared_ptr<FACTOR>(factor));
\n-
188 }
\n-
\n-
189
\n-
191 template <class DERIVEDFACTOR, class... Args>
\n-
\n-
192 IsDerived<DERIVEDFACTOR> emplace_shared(Args&&... args) {
\n-
193 factors_.push_back(boost::allocate_shared<DERIVEDFACTOR>(
\n-
194 Eigen::aligned_allocator<DERIVEDFACTOR>(),
\n-
195 std::forward<Args>(args)...));
\n-
196 }
\n-
\n-
197
\n-
202 template <class DERIVEDFACTOR>
\n-
\n-
203 IsDerived<DERIVEDFACTOR> push_back(const DERIVEDFACTOR& factor) {
\n-
204 factors_.push_back(boost::allocate_shared<DERIVEDFACTOR>(
\n-
205 Eigen::aligned_allocator<DERIVEDFACTOR>(), factor));
\n-
206 }
\n-
\n-
207
\n-
209 template <class DERIVEDFACTOR>
\n-
\n-
210 IsDerived<DERIVEDFACTOR> add(boost::shared_ptr<DERIVEDFACTOR> factor) {
\n-
211 push_back(factor);
\n-
212 }
\n+
156protected:
\n+\n+
159
\n+
\n+
161 ExpressionFactor(const SharedNoiseModel& noiseModel, const T& measurement)
\n+
162 : NoiseModelFactor(noiseModel), measured_(measurement) {
\n+
163 // Not properly initialized yet, need to call initialize
\n+
164 }
\n
\n+
165
\n+
\n+\n+
168 if (!noiseModel_)
\n+
169 throw std::invalid_argument("ExpressionFactor: no NoiseModel.");
\n+
170 if (noiseModel_->dim() != Dim)
\n+
171 throw std::invalid_argument(
\n+
172 "ExpressionFactor was created with a NoiseModel of incorrect dimension.");
\n+\n+
174
\n+
175 // Get keys and dimensions for Jacobian matrices
\n+
176 // An Expression is assumed unmutable, so we do this now
\n+
177 if (keys_.empty()) {
\n+
178 // This is the case when called in ExpressionFactor Constructor.
\n+
179 // We then take the keys from the expression in sorted order.
\n+
180 boost::tie(keys_, dims_) = expression_.keysAndDims();
\n+
181 } else {
\n+
182 // This happens with classes derived from BinaryExpressionFactor etc.
\n+
183 // In that case, the keys_ are already defined and we just need to grab
\n+
184 // the dimensions in the correct order.
\n+
185 std::map<Key, int> keyedDims;
\n+
186 expression_.dims(keyedDims);
\n+
187 for (Key key : keys_) dims_.push_back(keyedDims[key]);
\n+
188 }
\n+
189 }
\n+
\n+
190
\n+
\n+
193 virtual Expression<T> expression() const {
\n+
194 throw std::runtime_error("ExpressionFactor::expression not provided: cannot deserialize.");
\n+
195 }
\n+
\n+
196
\n+
197private:
\n+
199 template <class Archive>
\n+
200 void save(Archive& ar, const unsigned int /*version*/) const {
\n+
201 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(NoiseModelFactor);
\n+
202 ar << boost::serialization::make_nvp("measured_", this->measured_);
\n+
203 }
\n+
204
\n+
207 template <class Archive>
\n+
208 void load(Archive& ar, const unsigned int /*version*/) {
\n+
209 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(NoiseModelFactor);
\n+
210 ar >> boost::serialization::make_nvp("measured_", this->measured_);
\n+
211 this->initialize(expression());
\n+
212 }
\n
213
\n-
215 template <class DERIVEDFACTOR>
\n-
216 typename std::enable_if<
\n-
217 std::is_base_of<FactorType, DERIVEDFACTOR>::value,
\n-
218 boost::assign::list_inserter<RefCallPushBack<This>>>::type
\n-
\n-
219 operator+=(boost::shared_ptr<DERIVEDFACTOR> factor) {
\n-
220 return boost::assign::make_list_inserter(RefCallPushBack<This>(*this))(
\n-
221 factor);
\n-
222 }
\n-
\n-
223
\n-
227
\n-
232 template <typename ITERATOR>
\n-
\n-
233 HasDerivedElementType<ITERATOR> push_back(ITERATOR firstFactor,
\n-
234 ITERATOR lastFactor) {
\n-
235 factors_.insert(end(), firstFactor, lastFactor);
\n-
236 }
\n-
\n-
237
\n-
239 template <typename ITERATOR>
\n-
\n-
240 HasDerivedValueType<ITERATOR> push_back(ITERATOR firstFactor,
\n-
241 ITERATOR lastFactor) {
\n-
242 for (ITERATOR f = firstFactor; f != lastFactor; ++f) push_back(*f);
\n-
243 }
\n-
\n-
244
\n-
248
\n-
253 template <typename CONTAINER>
\n-
\n-
254 HasDerivedElementType<CONTAINER> push_back(const CONTAINER& container) {
\n-
255 push_back(container.begin(), container.end());
\n-
256 }
\n-
\n-
257
\n-
259 template <typename CONTAINER>
\n-
\n-
260 HasDerivedValueType<CONTAINER> push_back(const CONTAINER& container) {
\n-
261 push_back(container.begin(), container.end());
\n-
262 }
\n-
\n-
263
\n-
268 template <class FACTOR_OR_CONTAINER>
\n-
\n-
269 void add(const FACTOR_OR_CONTAINER& factorOrContainer) {
\n-
270 push_back(factorOrContainer);
\n+
214 // Indicate that we implement save/load separately, and be friendly to boost
\n+
215 BOOST_SERIALIZATION_SPLIT_MEMBER()
\n+
216
\n+
217 friend class boost::serialization::access;
\n+
218
\n+
219 // Alignment, see https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html
\n+
220 enum { NeedsToAlign = (sizeof(T) % 16) == 0 };
\n+
221 public:
\n+\n+
223};
\n+
\n+
224// ExpressionFactor
\n+
225
\n+
227template <typename T>
\n+
228struct traits<ExpressionFactor<T> > : public Testable<ExpressionFactor<T> > {};
\n+
229
\n+
241template <typename T, typename... Args>
\n+
\n+\n+
243public:
\n+
244 static const std::size_t NARY_EXPRESSION_SIZE = sizeof...(Args);
\n+
245 using ArrayNKeys = std::array<Key, NARY_EXPRESSION_SIZE>;
\n+
246
\n+
248 ~ExpressionFactorN() override = default;
\n+
249
\n+
250 // Don't provide backward compatible evaluateVector(), due to its problematic
\n+
251 // variable length of optional Jacobian arguments. Vector evaluateError(const
\n+
252 // Args... args,...);
\n+
253
\n+
\n+
256 virtual Expression<T> expression(const ArrayNKeys &keys) const {
\n+
257 throw std::runtime_error(
\n+
258 "ExpressionFactorN::expression not provided: cannot deserialize.");
\n+
259 }
\n+
\n+
260
\n+
261protected:
\n+
263 ExpressionFactorN() = default;
\n+
264
\n+
\n+
266 ExpressionFactorN(const ArrayNKeys &keys, const SharedNoiseModel &noiseModel,
\n+
267 const T &measurement)
\n+
268 : ExpressionFactor<T>(noiseModel, measurement) {
\n+
269 for (const auto &key : keys)
\n+
270 Factor::keys_.push_back(key);
\n
271 }
\n
\n
272
\n-
277 template <class FACTOR_OR_CONTAINER>
\n-
\n-
278 boost::assign::list_inserter<CRefCallPushBack<This>> operator+=(
\n-
279 const FACTOR_OR_CONTAINER& factorOrContainer) {
\n-
280 return boost::assign::make_list_inserter(CRefCallPushBack<This>(*this))(
\n-
281 factorOrContainer);
\n-
282 }
\n-
\n-
283
\n-
287
\n-
293 template <class CLIQUE>
\n-
294 typename std::enable_if<
\n-
295 std::is_base_of<This, typename CLIQUE::FactorGraphType>::value>::type
\n-
\n-
296 push_back(const BayesTree<CLIQUE>& bayesTree) {
\n-
297 bayesTree.addFactorsToGraph(this);
\n-
298 }
\n-
\n-
299
\n-
304 template <typename CONTAINER, typename = HasDerivedElementType<CONTAINER>>
\n-
305 FactorIndices add_factors(const CONTAINER& factors,
\n-
306 bool useEmptySlots = false);
\n-
307
\n-
311
\n-
313 virtual void print(const std::string& s = "FactorGraph",
\n-
314 const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n-
315
\n-
317 bool equals(const This& fg, double tol = 1e-9) const;
\n-
319
\n-
320 public:
\n-
323
\n-
326 size_t size() const { return factors_.size(); }
\n-
327
\n-
330 bool empty() const { return factors_.empty(); }
\n-
331
\n-
335 const sharedFactor at(size_t i) const { return factors_.at(i); }
\n-
336
\n-
340 sharedFactor& at(size_t i) { return factors_.at(i); }
\n-
341
\n-
345 const sharedFactor operator[](size_t i) const { return at(i); }
\n-
346
\n-
350 sharedFactor& operator[](size_t i) { return at(i); }
\n-
351
\n-
353 const_iterator begin() const { return factors_.begin(); }
\n-
354
\n-
356 const_iterator end() const { return factors_.end(); }
\n-
357
\n-
359 sharedFactor front() const { return factors_.front(); }
\n-
360
\n-
362 sharedFactor back() const { return factors_.back(); }
\n-
363
\n-
365 double error(const HybridValues &values) const;
\n-
366
\n-
370
\n-
372 iterator begin() { return factors_.begin(); }
\n-
373
\n-
375 iterator end() { return factors_.end(); }
\n-
376
\n-
381 virtual void resize(size_t size) { factors_.resize(size); }
\n-
382
\n-
385 void remove(size_t i) { factors_.at(i).reset(); }
\n-
386
\n-
388 void replace(size_t index, sharedFactor factor) { at(index) = factor; }
\n-
389
\n-
391 iterator erase(iterator item) { return factors_.erase(item); }
\n-
392
\n-
\n-
394 iterator erase(iterator first, iterator last) {
\n-
395 return factors_.erase(first, last);
\n-
396 }
\n-
\n-
397
\n-
401
\n-
403 void dot(std::ostream& os,
\n-
404 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
405 const DotWriter& writer = DotWriter()) const;
\n-
406
\n-
408 std::string dot(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
409 const DotWriter& writer = DotWriter()) const;
\n-
410
\n-
412 void saveGraph(const std::string& filename,
\n-
413 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
414 const DotWriter& writer = DotWriter()) const;
\n-
415
\n-
419
\n-
421 size_t nrFactors() const;
\n-
422
\n-
425 KeySet keys() const;
\n-
426
\n-
430 KeyVector keyVector() const;
\n-
431
\n-
434 inline bool exists(size_t idx) const { return idx < size() && at(idx); }
\n-
435
\n-
436 private:
\n-\n-
439 template <class ARCHIVE>
\n-
440 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
441 ar& BOOST_SERIALIZATION_NVP(factors_);
\n-
442 }
\n-
443
\n-
445}; // FactorGraph
\n-
\n-
446} // namespace gtsam
\n-
447
\n-\n-
Concept check for values that can be used in unit tests.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-\n-
Factor Graph Base Class.
\n-
Graphviz formatter.
\n+
273private:
\n+
275 Expression<T> expression() const override {
\n+
276 ArrayNKeys keys;
\n+
277 int idx = 0;
\n+
278 for (const auto &key : Factor::keys_)
\n+
279 keys[idx++] = key;
\n+
280 return expression(keys);
\n+
281 }
\n+
282
\n+
283 friend class boost::serialization::access;
\n+
284 template <class ARCHIVE>
\n+
285 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n+
286 ar &boost::serialization::make_nvp(
\n+
287 "ExpressionFactorN",
\n+
288 boost::serialization::base_object<ExpressionFactor<T>>(*this));
\n+
289 }
\n+
290};
\n+
\n+
292template <typename T, typename... Args>
\n+
\n+
293struct traits<ExpressionFactorN<T, Args...>>
\n+
294 : public Testable<ExpressionFactorN<T, Args...>> {};
\n+
\n+
295// ExpressionFactorN
\n+
296
\n+
297
\n+
298#if defined(GTSAM_ALLOW_DEPRECATED_SINCE_V42)
\n+
307template <typename T, typename A1, typename A2>
\n+
308class GTSAM_DEPRECATED ExpressionFactor2 : public ExpressionFactorN<T, A1, A2> {
\n+
309public:
\n+
311 ~ExpressionFactor2() override {}
\n+
312
\n+
314 Vector evaluateError(const A1 &a1, const A2 &a2,
\n+
315 boost::optional<Matrix &> H1 = boost::none,
\n+
316 boost::optional<Matrix &> H2 = boost::none) const {
\n+
317 Values values;
\n+
318 values.insert(this->keys_[0], a1);
\n+
319 values.insert(this->keys_[1], a2);
\n+
320 std::vector<Matrix> H(2);
\n+
321 Vector error = ExpressionFactor<T>::unwhitenedError(values, H);
\n+
322 if (H1) (*H1) = H[0];
\n+
323 if (H2) (*H2) = H[1];
\n+
324 return error;
\n+
325 }
\n+
326
\n+
329 virtual Expression<T> expression(Key key1, Key key2) const {
\n+
330 throw std::runtime_error(
\n+
331 "ExpressionFactor2::expression not provided: cannot deserialize.");
\n+
332 }
\n+
333 Expression<T>
\n+
334 expression(const typename ExpressionFactorN<T, A1, A2>::ArrayNKeys &keys)
\n+
335 const override {
\n+
336 return expression(keys[0], keys[1]);
\n+
337 }
\n+
338
\n+
339protected:
\n+
341 ExpressionFactor2() {}
\n+
342
\n+
344 ExpressionFactor2(Key key1, Key key2, const SharedNoiseModel &noiseModel,
\n+
345 const T &measurement)
\n+
346 : ExpressionFactorN<T, A1, A2>({key1, key2}, noiseModel, measurement) {}
\n+
347};
\n+
348// ExpressionFactor2
\n+
349#endif
\n+
350
\n+
351} // namespace gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n+
Concept check for values that can be used in unit tests.
\n+
Non-linear factor base classes.
\n+
Expressions for Block Automatic Differentiation.
\n
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
virtual void print(const std::string &s="FactorGraph", const KeyFormatter &formatter=DefaultKeyFormatter) const
Print out graph to std::cout, with optional key formatter.
Definition FactorGraph-inst.h:37
\n-
bool isEqual(const FactorGraph &other) const
Check exact equality of the factor pointers. Useful for derived ==.
Definition FactorGraph.h:134
\n-
KeySet keys() const
Potentially slow function to return all keys involved, sorted, as a set.
Definition FactorGraph-inst.h:85
\n-
bool empty() const
Check if the graph is empty (null factors set by remove() will cause this to return false).
Definition FactorGraph.h:330
\n-
FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)
Add new factors to a factor graph and returns a list of new factor indices, optionally finding and re...
Definition FactorGraph-inst.h:109
\n-
IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition FactorGraph.h:186
\n-
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
Output to graphviz format, stream version.
Definition FactorGraph-inst.h:141
\n-
iterator erase(iterator item)
Erase factor and rearrange other factors to take up the empty space.
Definition FactorGraph.h:391
\n-
void add(const FACTOR_OR_CONTAINER &factorOrContainer)
Add a factor or container of factors, including STL collections, BayesTrees, etc.
Definition FactorGraph.h:269
\n-
iterator erase(iterator first, iterator last)
Erase factors and rearrange other factors to take up the empty space.
Definition FactorGraph.h:394
\n-
sharedFactor back() const
Get the last factor.
Definition FactorGraph.h:362
\n-
FactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects)
Definition FactorGraph.h:152
\n-
void remove(size_t i)
delete factor without re-arranging indexes by inserting a nullptr pointer
Definition FactorGraph.h:385
\n-
KeyVector keyVector() const
Potentially slow function to return all keys involved, sorted, as a vector.
Definition FactorGraph-inst.h:95
\n-
HasDerivedValueType< CONTAINER > push_back(const CONTAINER &container)
Push back non-pointer objects in a container (factors are copied).
Definition FactorGraph.h:260
\n-
FactorGraph()
Default constructor.
Definition FactorGraph.h:142
\n-
IsDerived< DERIVEDFACTOR > emplace_shared(Args &&... args)
Emplace a shared pointer to factor of given type.
Definition FactorGraph.h:192
\n-
sharedFactor & operator[](size_t i)
Get a specific factor by index (this does not check array bounds, as opposed to at() which does).
Definition FactorGraph.h:350
\n-
sharedFactor & at(size_t i)
Get a specific factor by index (this checks array bounds and may throw an exception,...
Definition FactorGraph.h:340
\n-
std::enable_if< std::is_base_of< This, typenameCLIQUE::FactorGraphType >::value >::type push_back(const BayesTree< CLIQUE > &bayesTree)
Push back a BayesTree as a collection of factors.
Definition FactorGraph.h:296
\n-
double error(const HybridValues &values) const
Add error for all factors.
Definition FactorGraph-inst.h:66
\n-
FactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Constructor from iterator over factors (shared_ptr or plain objects)
Definition FactorGraph.h:146
\n-
virtual void resize(size_t size)
Directly resize the number of factors in the graph.
Definition FactorGraph.h:381
\n-
size_t nrFactors() const
return the number of non-null factors
Definition FactorGraph-inst.h:76
\n-
size_t size() const
return the number of factors (including any null factors set by remove() ).
Definition FactorGraph.h:326
\n-
HasDerivedValueType< ITERATOR > push_back(ITERATOR firstFactor, ITERATOR lastFactor)
Push back many factors with an iterator (factors are copied)
Definition FactorGraph.h:240
\n-
sharedFactor front() const
Get the first factor.
Definition FactorGraph.h:359
\n-
const_iterator end() const
Iterator to end of factors.
Definition FactorGraph.h:356
\n-
HasDerivedElementType< CONTAINER > push_back(const CONTAINER &container)
Push back many factors as shared_ptr's in a container (factors are not copied)
Definition FactorGraph.h:254
\n-
FACTOR FactorType
factor type
Definition FactorGraph.h:99
\n-
void replace(size_t index, sharedFactor factor)
replace a factor by index
Definition FactorGraph.h:388
\n-
boost::assign::list_inserter< CRefCallPushBack< This > > operator+=(const FACTOR_OR_CONTAINER &factorOrContainer)
Add a factor or container of factors, including STL collections, BayesTrees, etc.
Definition FactorGraph.h:278
\n-
std::enable_if< std::is_base_of< FactorType, DERIVEDFACTOR >::value, boost::assign::list_inserter< RefCallPushBack< This > > >::type operator+=(boost::shared_ptr< DERIVEDFACTOR > factor)
+= works well with boost::assign list inserter.
Definition FactorGraph.h:219
\n-
iterator begin()
non-const STL-style begin()
Definition FactorGraph.h:372
\n-
const_iterator begin() const
Iterator to beginning of factors.
Definition FactorGraph.h:353
\n-
HasDerivedElementType< ITERATOR > push_back(ITERATOR firstFactor, ITERATOR lastFactor)
Push back many factors with an iterator over shared_ptr (factors are not copied)
Definition FactorGraph.h:233
\n-
IsDerived< DERIVEDFACTOR > add(boost::shared_ptr< DERIVEDFACTOR > factor)
add is a synonym for push_back.
Definition FactorGraph.h:210
\n-
friend class boost::serialization::access
Serialization function.
Definition FactorGraph.h:438
\n-
boost::shared_ptr< FACTOR > sharedFactor
Shared pointer to a factor.
Definition FactorGraph.h:101
\n-
bool exists(size_t idx) const
MATLAB interface utility: Checks whether a factor index idx exists in the graph and is a live pointer...
Definition FactorGraph.h:434
\n-
const sharedFactor operator[](size_t i) const
Get a specific factor by index (this does not check array bounds, as opposed to at() which does).
Definition FactorGraph.h:345
\n-
IsDerived< DERIVEDFACTOR > push_back(const DERIVEDFACTOR &factor)
Add a factor by value, will be copy-constructed (use push_back with a shared_ptr to avoid the copy).
Definition FactorGraph.h:203
\n-
FactorGraph(std::initializer_list< boost::shared_ptr< DERIVEDFACTOR > > sharedFactors)
Constructor that takes an initializer list of shared pointers.
Definition FactorGraph.h:171
\n-
iterator end()
non-const STL-style end()
Definition FactorGraph.h:375
\n-
FastVector< sharedFactor > factors_
concept check, makes sure FACTOR defines print and equals
Definition FactorGraph.h:131
\n-
const sharedFactor at(size_t i) const
Get a specific factor by index (this checks array bounds and may throw an exception,...
Definition FactorGraph.h:335
\n-
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
output to file with graphviz format.
Definition FactorGraph-inst.h:177
\n-
virtual ~FactorGraph()=default
Default destructor Public and virtual so boost serialization can call it.
\n-
void reserve(size_t size)
Reserve space for the specified number of factors if you know in advance how many there will be (work...
Definition FactorGraph.h:182
\n-
Bayes tree.
Definition BayesTree.h:67
\n-
void addFactorsToGraph(FactorGraph< FactorType > *graph) const
Add all cliques in this BayesTree to the specified factor graph.
Definition BayesTree-inst.h:168
\n-
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n-
Helper.
Definition FactorGraph.h:54
\n-
Helper.
Definition FactorGraph.h:67
\n-
Helper.
Definition FactorGraph.h:80
\n-
the error.
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n+
const Matrix & matrix() const
Access to full matrix (including any portions excluded by rowStart(), rowEnd(), and firstBlock())
Definition VerticalBlockMatrix.h:188
\n+
Definition Factor.h:68
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
size_t size() const
Definition Factor.h:157
\n+
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n+
Factor that supports arbitrary expressions via AD.
Definition ExpressionFactor.h:44
\n+
Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix > & > H=boost::none) const override
Error function without the NoiseModel, .
Definition ExpressionFactor.h:99
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print relies on Testable traits being defined for T
Definition ExpressionFactor.h:80
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition ExpressionFactor.h:151
\n+
virtual Expression< T > expression() const
Recreate expression from keys_ and measured_, used in load below.
Definition ExpressionFactor.h:193
\n+
Expression< T > expression_
the expression that is AD enabled
Definition ExpressionFactor.h:53
\n+
T measured_
the measurement to be compared with the expression
Definition ExpressionFactor.h:52
\n+
FastVector< int > dims_
dimensions of the Jacobian matrices
Definition ExpressionFactor.h:54
\n+
const T & measured() const
return the measurement
Definition ExpressionFactor.h:77
\n+
boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override
linearize to a GaussianFactor
Definition ExpressionFactor.h:112
\n+
~ExpressionFactor() override
Destructor.
Definition ExpressionFactor.h:74
\n+
bool equals(const NonlinearFactor &f, double tol) const override
equals relies on Testable traits being defined for T
Definition ExpressionFactor.h:87
\n+
ExpressionFactor(const SharedNoiseModel &noiseModel, const T &measurement)
Default constructor, for serialization.
Definition ExpressionFactor.h:161
\n+
ExpressionFactor(const SharedNoiseModel &noiseModel, const T &measurement, const Expression< T > &expression)
Constructor: creates a factor from a measurement and measurement function.
Definition ExpressionFactor.h:67
\n+
void initialize(const Expression< T > &expression)
Initialize with constructor arguments.
Definition ExpressionFactor.h:167
\n+
Expression class that supports automatic differentiation.
Definition Expression.h:48
\n+
N-ary variadic template for ExpressionFactor meant as a base class for N-ary factors.
Definition ExpressionFactor.h:242
\n+
virtual Expression< T > expression(const ArrayNKeys &keys) const
Recreate expression from given keys_ and measured_, used in load Needed to deserialize a derived fact...
Definition ExpressionFactor.h:256
\n+
~ExpressionFactorN() override=default
Destructor.
\n+
ExpressionFactorN()=default
Default constructor, for serialization.
\n+
ExpressionFactorN(const ArrayNKeys &keys, const SharedNoiseModel &noiseModel, const T &measurement)
Constructor takes care of keys, but still need to call initialize.
Definition ExpressionFactor.h:266
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
virtual bool active(const Values &) const
Checks whether a factor should be used based on a set of values.
Definition NonlinearFactor.h:118
\n+
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Print.
Definition NonlinearFactor.cpp:74
\n+
bool equals(const NonlinearFactor &f, double tol=1e-9) const override
Check if two factors are equal.
Definition NonlinearFactor.cpp:82
\n+
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+
noise model to the factor, and calculates the error by asking the user to implement the method
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,591 +1,480 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FactorGraph.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+ExpressionFactor.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21// \\callgraph\n-22\n-23#pragma once\n-24\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-29\n-30#include // for Eigen::aligned_allocator\n-31\n-32#include \n-33#include \n-34#include \n-35#include \n-36\n-37#include \n-38#include \n-39#include \n-40#include \n-41\n-42namespace _\bg_\bt_\bs_\ba_\bm {\n-44typedef FastVector _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n-45\n-46// Forward declarations\n-47template \n-48class BayesTree;\n-49\n-50class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+20#pragma once\n+21\n+22#include \n+23#include \n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+43template\n+_\b4_\b4class _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br {\n+45 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bT_\b>));\n+46\n+47protected:\n+48\n+49 typedef _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bT_\b> _\bT_\bh_\bi_\bs;\n+50 static const int Dim = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n 51\n-53template \n-_\b5_\b4class _\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk {\n-55 C& obj;\n+_\b5_\b2 T _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_;\n+_\b5_\b3 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_;\n+_\b5_\b4 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bi_\bn_\bt_\b> _\bd_\bi_\bm_\bs_\b_;\n+55\n 56\n 57 public:\n-58 explicit _\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk(C& obj) : obj(obj) {}\n-59 template \n-60 void operator()(const A& a) {\n-61 obj.push_back(a);\n-62 }\n-63};\n-64\n-66template \n-_\b6_\b7class _\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk {\n-68 C& obj;\n-69\n-70 public:\n-71 explicit _\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk(C& obj) : obj(obj) {}\n-72 template \n-73 void operator()(A& a) {\n-74 obj.push_back(a);\n-75 }\n-76};\n-77\n-79template \n-_\b8_\b0class _\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bA_\bd_\bd_\bC_\bo_\bp_\by {\n-81 C& obj;\n-82\n-83 public:\n-84 explicit _\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bA_\bd_\bd_\bC_\bo_\bp_\by(C& obj) : obj(obj) {}\n-85 template \n-86 void operator()(const A& a) {\n-87 obj.addCopy(a);\n-88 }\n-89};\n-90\n-96template \n-_\b9_\b7class _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n-98 public:\n-_\b9_\b9 typedef FACTOR _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n-100 typedef boost::shared_ptr\n-_\b1_\b0_\b1 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n-102 typedef _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br value_type;\n-103 typedef typename _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br iterator;\n-104 typedef typename _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br const_iterator;\n-105\n-106 private:\n-107 typedef _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b> _\bT_\bh_\bi_\bs;\n-108 typedef boost::shared_ptr\n-109 shared_ptr;\n-110\n-112 template \n-113 using IsDerived = typename std::enable_if<\n-114 std::is_base_of::value>::type;\n-115\n-117 template \n-118 using HasDerivedValueType = typename std::enable_if<\n-119 std::is_base_of::value>::type;\n-120\n-122 template \n-123 using HasDerivedElementType = typename std::enable_if::value>::type;\n-125\n-126 protected:\n-128 GTSAM_CONCEPT_TESTABLE_TYPE(FACTOR)\n-129\n-130\n-_\b1_\b3_\b1 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_;\n-132\n-_\b1_\b3_\b4 bool _\bi_\bs_\bE_\bq_\bu_\ba_\bl(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& other) const {\n-135 return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_ == other.factors_;\n-136 }\n+58 typedef boost::shared_ptr > shared_ptr;\n+59\n+_\b6_\b7 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, //\n+68 const T& measurement, const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn)\n+69 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(measurement) {\n+70 _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be(_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn);\n+71 }\n+72\n+_\b7_\b4 _\b~_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+75\n+_\b7_\b7 const T& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const { return _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_; }\n+78\n+_\b8_\b0 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+81 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+82 _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n+83 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, \"ExpressionFactor with measurement: \");\n+84 }\n+85\n+_\b8_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& f, double tol) const override {\n+88 const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br* p = dynamic_cast(&f);\n+89 return p && _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(f, tol) &&\n+90 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, p->_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_, tol) &&\n+91 _\bd_\bi_\bm_\bs_\b_ == p->_\bd_\bi_\bm_\bs_\b_;\n+92 }\n+93\n+_\b9_\b9 Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& x,\n+100 boost::optional&> H = boost::none) const override {\n+101 if (H) {\n+102 const T value = _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_.valueAndDerivatives(x, _\bk_\be_\by_\bs_\b_, _\bd_\bi_\bm_\bs_\b_, *H);\n+103 // NOTE(hayk): Doing the reverse, AKA Local(measured_, value) is not\n+correct here\n+104 // because it would use the tangent space of the measurement instead of the\n+value.\n+105 return -_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(value, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+106 } else {\n+107 const T value = _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_.value(x);\n+108 return -_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(value, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n+109 }\n+110 }\n+111\n+_\b1_\b1_\b2 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& x) const override\n+{\n+113 // Only linearize if the factor is active\n+114 if (!_\ba_\bc_\bt_\bi_\bv_\be(x))\n+115 return boost::shared_ptr();\n+116\n+117 // In case noise model is constrained, we need to provide a noise model\n+118 SharedDiagonal _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl;\n+119 if (noiseModel_ && noiseModel_->isConstrained()) {\n+120 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl = boost::static_pointer_cast(\n+121 noiseModel_)->unit();\n+122 }\n+123\n+124 // Create a writeable JacobianFactor in advance\n+125 boost::shared_ptr factor(\n+126 new _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bk_\be_\by_\bs_\b_, _\bd_\bi_\bm_\bs_\b_, Dim, _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl));\n+127\n+128 // Wrap keys and VerticalBlockMatrix into structure passed to expression_\n+129 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& Ab = factor->matrixObject();\n+130 internal::JacobianMap jacobianMap(_\bk_\be_\by_\bs_\b_, Ab);\n+131\n+132 // Zero out Jacobian so we can simply add to it\n+133 Ab._\bm_\ba_\bt_\br_\bi_\bx().setZero();\n+134\n+135 // Get value and Jacobians, writing directly into JacobianFactor\n+136 T value = _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_.valueAndJacobianMap(x, jacobianMap); // <<< Reverse\n+AD happens here !\n 137\n+138 // Evaluate error and set RHS vector b\n+139 Ab(_\bs_\bi_\bz_\be()).col(0) = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(value, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_);\n 140\n-_\b1_\b4_\b2 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n-143\n-145 template \n-_\b1_\b4_\b6 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(ITERATOR firstFactor, ITERATOR lastFactor) {\n-147 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(firstFactor, lastFactor);\n+141 // Whiten the corresponding system, Ab already contains RHS\n+142 if (noiseModel_) {\n+143 Vector b = Ab(_\bs_\bi_\bz_\be()).col(0); // need b to be valid for Robust noise models\n+144 noiseModel_->WhitenSystem(Ab._\bm_\ba_\bt_\br_\bi_\bx(), b);\n+145 }\n+146\n+147 return factor;\n 148 }\n 149\n-151 template \n-_\b1_\b5_\b2 explicit _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const CONTAINER& factors) {\n-153 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(factors);\n+_\b1_\b5_\b1 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+152 return boost::static_pointer_cast(\n+153 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n 154 }\n 155\n-157\n-158 public:\n-161\n-_\b1_\b6_\b4 virtual _\b~_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() = default;\n+156protected:\n+157 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+159\n+_\b1_\b6_\b1 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, const T& measurement)\n+162 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl), _\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_(measurement) {\n+163 // Not properly initialized yet, need to call initialize\n+164 }\n 165\n-170 template >\n-_\b1_\b7_\b1 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(std::initializer_list>\n-sharedFactors)\n-172 : _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_(sharedFactors) {}\n-173\n-177\n-_\b1_\b8_\b2 void _\br_\be_\bs_\be_\br_\bv_\be(size_t _\bs_\bi_\bz_\be) { _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.reserve(_\bs_\bi_\bz_\be); }\n-183\n-185 template \n-_\b1_\b8_\b6 IsDerived _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(boost::shared_ptr factor)\n-{\n-187 _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.push_back(boost::shared_ptr(factor));\n+_\b1_\b6_\b7 void _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn) {\n+168 if (!noiseModel_)\n+169 throw std::invalid_argument(\"ExpressionFactor: no NoiseModel.\");\n+170 if (noiseModel_->dim() != Dim)\n+171 throw std::invalid_argument(\n+172 \"ExpressionFactor was created with a NoiseModel of incorrect dimension.\");\n+173 _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_ = _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn;\n+174\n+175 // Get keys and dimensions for Jacobian matrices\n+176 // An Expression is assumed unmutable, so we do this now\n+177 if (_\bk_\be_\by_\bs_\b_.empty()) {\n+178 // This is the case when called in ExpressionFactor Constructor.\n+179 // We then take the keys from the expression in sorted order.\n+180 boost::tie(_\bk_\be_\by_\bs_\b_, _\bd_\bi_\bm_\bs_\b_) = _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_.keysAndDims();\n+181 } else {\n+182 // This happens with classes derived from BinaryExpressionFactor etc.\n+183 // In that case, the keys_ are already defined and we just need to grab\n+184 // the dimensions in the correct order.\n+185 std::map keyedDims;\n+186 _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_.dims(keyedDims);\n+187 for (_\bK_\be_\by key : _\bk_\be_\by_\bs_\b_) _\bd_\bi_\bm_\bs_\b_.push_back(keyedDims[key]);\n 188 }\n-189\n-191 template \n-_\b1_\b9_\b2 IsDerived _\be_\bm_\bp_\bl_\ba_\bc_\be_\b__\bs_\bh_\ba_\br_\be_\bd(Args&&... args) {\n-193 _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.push_back(boost::allocate_shared(\n-194 Eigen::aligned_allocator(),\n-195 std::forward(args)...));\n-196 }\n-197\n-202 template \n-_\b2_\b0_\b3 IsDerived _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const DERIVEDFACTOR& factor) {\n-204 _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.push_back(boost::allocate_shared(\n-205 Eigen::aligned_allocator(), factor));\n-206 }\n-207\n-209 template \n-_\b2_\b1_\b0 IsDerived _\ba_\bd_\bd(boost::shared_ptr factor) {\n-211 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(factor);\n+189 }\n+190\n+_\b1_\b9_\b3 virtual _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn() const {\n+194 throw std::runtime_error(\"ExpressionFactor::expression not provided: cannot\n+deserialize.\");\n+195 }\n+196\n+197private:\n+199 template \n+200 void save(Archive& ar, const unsigned int /*version*/) const {\n+201 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br);\n+202 ar << boost::serialization::make_nvp(\"measured_\", this->measured_);\n+203 }\n+204\n+207 template \n+208 void load(Archive& ar, const unsigned int /*version*/) {\n+209 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br);\n+210 ar >> boost::serialization::make_nvp(\"measured_\", this->measured_);\n+211 this->initialize(_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn());\n 212 }\n 213\n-215 template \n-216 typename std::enable_if<\n-217 std::is_base_of::value,\n-218 boost::assign::list_inserter>>::type\n-_\b2_\b1_\b9 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(boost::shared_ptr factor) {\n-220 return boost::assign::make_list_inserter(_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk_\b<_\bT_\bh_\bi_\bs_\b>(*this))(\n-221 factor);\n-222 }\n-223\n-227\n-232 template \n-_\b2_\b3_\b3 HasDerivedElementType _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(ITERATOR firstFactor,\n-234 ITERATOR lastFactor) {\n-235 _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.insert(_\be_\bn_\bd(), firstFactor, lastFactor);\n-236 }\n-237\n-239 template \n-_\b2_\b4_\b0 HasDerivedValueType _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(ITERATOR firstFactor,\n-241 ITERATOR lastFactor) {\n-242 for (ITERATOR f = firstFactor; f != lastFactor; ++f) _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(*f);\n-243 }\n-244\n-248\n-253 template \n-_\b2_\b5_\b4 HasDerivedElementType _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const CONTAINER& container) {\n-255 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(container.begin(), container.end());\n-256 }\n-257\n-259 template \n-_\b2_\b6_\b0 HasDerivedValueType _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const CONTAINER& container) {\n-261 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(container.begin(), container.end());\n-262 }\n-263\n-268 template \n-_\b2_\b6_\b9 void _\ba_\bd_\bd(const FACTOR_OR_CONTAINER& factorOrContainer) {\n-270 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(factorOrContainer);\n+214 // Indicate that we implement save/load separately, and be friendly to\n+boost\n+215 BOOST_SERIALIZATION_SPLIT_MEMBER()\n+216\n+217 friend class boost::serialization::access;\n+218\n+219 // Alignment, see https://eigen.tuxfamily.org/dox/\n+group__TopicStructHavingEigenMembers.html\n+220 enum { NeedsToAlign = (sizeof(T) % 16) == 0 };\n+221 public:\n+222 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(NeedsToAlign)\n+223};\n+224// ExpressionFactor\n+225\n+227template \n+_\b2_\b2_\b8struct _\bt_\br_\ba_\bi_\bt_\bs<_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be >\n+{};\n+229\n+241template \n+_\b2_\b4_\b2class _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN : public _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n+243public:\n+244 static const std::size_t NARY_EXPRESSION_SIZE = sizeof...(Args);\n+245 using ArrayNKeys = std::array;\n+246\n+_\b2_\b4_\b8 _\b~_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN() override = default;\n+249\n+250 // Don't provide backward compatible evaluateVector(), due to its\n+problematic\n+251 // variable length of optional Jacobian arguments. Vector evaluateError\n+(const\n+252 // Args... args,...);\n+253\n+_\b2_\b5_\b6 virtual _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn(const ArrayNKeys &_\bk_\be_\by_\bs) const {\n+257 throw std::runtime_error(\n+258 \"ExpressionFactorN::expression not provided: cannot deserialize.\");\n+259 }\n+260\n+261protected:\n+_\b2_\b6_\b3 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN() = default;\n+264\n+_\b2_\b6_\b6 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN(const ArrayNKeys &_\bk_\be_\by_\bs, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+&noiseModel,\n+267 const T &measurement)\n+268 : _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(noiseModel, measurement) {\n+269 for (const auto &key : _\bk_\be_\by_\bs)\n+270 _\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_.push_back(key);\n 271 }\n 272\n-277 template \n-_\b2_\b7_\b8 boost::assign::list_inserter> _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=(\n-279 const FACTOR_OR_CONTAINER& factorOrContainer) {\n-280 return boost::assign::make_list_inserter(_\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk_\b<_\bT_\bh_\bi_\bs_\b>(*this))(\n-281 factorOrContainer);\n-282 }\n-283\n-287\n-293 template \n-294 typename std::enable_if<\n-295 std::is_base_of::value>::type\n-_\b2_\b9_\b6 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(const _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bC_\bL_\bI_\bQ_\bU_\bE_\b>& bayesTree) {\n-297 bayesTree._\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh(this);\n-298 }\n-299\n-304 template >\n-305 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs _\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs(const CONTAINER& factors,\n-306 bool useEmptySlots = false);\n-307\n-311\n-313 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"FactorGraph\",\n-314 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const;\n-315\n-317 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& fg, double tol = 1e-9) const;\n-319\n-320 public:\n-323\n-_\b3_\b2_\b6 size_t _\bs_\bi_\bz_\be() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.size(); }\n-327\n-_\b3_\b3_\b0 bool _\be_\bm_\bp_\bt_\by() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.empty(); }\n-331\n-_\b3_\b3_\b5 const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br _\ba_\bt(size_t i) const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.at(i); }\n-336\n-_\b3_\b4_\b0 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& _\ba_\bt(size_t i) { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.at(i); }\n-341\n-_\b3_\b4_\b5 const _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](size_t i) const { return _\ba_\bt(i); }\n-346\n-_\b3_\b5_\b0 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](size_t i) { return _\ba_\bt(i); }\n-351\n-_\b3_\b5_\b3 const_iterator _\bb_\be_\bg_\bi_\bn() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.begin(); }\n-354\n-_\b3_\b5_\b6 const_iterator _\be_\bn_\bd() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.end(); }\n-357\n-_\b3_\b5_\b9 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br _\bf_\br_\bo_\bn_\bt() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.front(); }\n-360\n-_\b3_\b6_\b2 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br _\bb_\ba_\bc_\bk() const { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.back(); }\n-363\n-365 double _\be_\br_\br_\bo_\br(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs &values) const;\n-366\n-370\n-_\b3_\b7_\b2 iterator _\bb_\be_\bg_\bi_\bn() { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.begin(); }\n-373\n-_\b3_\b7_\b5 iterator _\be_\bn_\bd() { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.end(); }\n-376\n-_\b3_\b8_\b1 virtual void _\br_\be_\bs_\bi_\bz_\be(size_t _\bs_\bi_\bz_\be) { _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.resize(_\bs_\bi_\bz_\be); }\n-382\n-_\b3_\b8_\b5 void _\br_\be_\bm_\bo_\bv_\be(size_t i) { _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.at(i).reset(); }\n-386\n-_\b3_\b8_\b8 void _\br_\be_\bp_\bl_\ba_\bc_\be(size_t index, _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br factor) { _\ba_\bt(index) = factor; }\n-389\n-_\b3_\b9_\b1 iterator _\be_\br_\ba_\bs_\be(iterator item) { return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.erase(item); }\n-392\n-_\b3_\b9_\b4 iterator _\be_\br_\ba_\bs_\be(iterator first, iterator last) {\n-395 return _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_.erase(first, last);\n-396 }\n-397\n-401\n-403 void _\bd_\bo_\bt(std::ostream& os,\n-404 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-405 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n-406\n-408 std::string _\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-409 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n-410\n-412 void _\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n-413 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-414 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n-415\n-419\n-421 size_t _\bn_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs() const;\n-422\n-425 _\bK_\be_\by_\bS_\be_\bt _\bk_\be_\by_\bs() const;\n-426\n-430 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bk_\be_\by_\bV_\be_\bc_\bt_\bo_\br() const;\n-431\n-_\b4_\b3_\b4 inline bool _\be_\bx_\bi_\bs_\bt_\bs(size_t idx) const { return idx < _\bs_\bi_\bz_\be() && _\ba_\bt(idx); }\n-435\n-436 private:\n-_\b4_\b3_\b8 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-439 template \n-440 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-441 ar& BOOST_SERIALIZATION_NVP(_\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_);\n-442 }\n-443\n-445}; // FactorGraph\n-446} // namespace gtsam\n-447\n-448#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n+273private:\n+275 _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b> expression() const override {\n+276 ArrayNKeys _\bk_\be_\by_\bs;\n+277 int idx = 0;\n+278 for (const auto &key : _\bF_\ba_\bc_\bt_\bo_\br::_\bk_\be_\by_\bs_\b_)\n+279 _\bk_\be_\by_\bs[idx++] = key;\n+280 return expression(_\bk_\be_\by_\bs);\n+281 }\n+282\n+283 friend class boost::serialization::access;\n+284 template \n+285 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+286 ar &boost::serialization::make_nvp(\n+287 \"ExpressionFactorN\",\n+288 boost::serialization::base_object>(*this));\n+289 }\n+290};\n+292template \n+_\b2_\b9_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN>\n+294 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n+295// ExpressionFactorN\n+296\n+297\n+298#if defined(GTSAM_ALLOW_DEPRECATED_SINCE_V42)\n+307template \n+308class GTSAM_DEPRECATED ExpressionFactor2 : public _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+309public:\n+311 ~ExpressionFactor2() override {}\n+312\n+314 Vector evaluateError(const A1 &a1, const A2 &a2,\n+315 boost::optional H1 = boost::none,\n+316 boost::optional H2 = boost::none) const {\n+317 _\bV_\ba_\bl_\bu_\be_\bs values;\n+318 values.insert(this->keys_[0], a1);\n+319 values.insert(this->keys_[1], a2);\n+320 std::vector H(2);\n+321 Vector error = ExpressionFactor::unwhitenedError(values, H);\n+322 if (H1) (*H1) = H[0];\n+323 if (H2) (*H2) = H[1];\n+324 return error;\n+325 }\n+326\n+329 virtual Expression expression(Key key1, Key key2) const {\n+330 throw std::runtime_error(\n+331 \"ExpressionFactor2::expression not provided: cannot deserialize.\");\n+332 }\n+333 Expression\n+334 expression(const typename ExpressionFactorN::ArrayNKeys &keys)\n+335 const override {\n+336 return expression(keys[0], keys[1]);\n+337 }\n+338\n+339protected:\n+341 ExpressionFactor2() {}\n+342\n+344 ExpressionFactor2(Key key1, Key key2, const SharedNoiseModel &noiseModel,\n+345 const T &measurement)\n+346 : ExpressionFactorN({key1, key2}, noiseModel, measurement) {}\n+347};\n+348// ExpressionFactor2\n+349#endif\n+350\n+351} // namespace gtsam\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:317\n _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n Concept check for values that can be used in unit tests.\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bK_\be_\by_\b._\bh\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh\n-Factor Graph Base Class.\n-_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh\n-Graphviz formatter.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n+_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b._\bh\n+Expressions for Block Automatic Differentiation.\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n FastVector\n FastVector is a type alias to a std::vector with a custom memory allocator.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-FastVector< Key > KeyVector\n-Define collection type once and for all - also used in wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-FastVector< FactorIndex > FactorIndices\n-Define collection types:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"FactorGraph\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-Print out graph to std::cout, with optional key formatter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bi_\bs_\bE_\bq_\bu_\ba_\bl\n-bool isEqual(const FactorGraph &other) const\n-Check exact equality of the factor pointers. Useful for derived ==.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bk_\be_\by_\bs\n-KeySet keys() const\n-Potentially slow function to return all keys involved, sorted, as a set.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty() const\n-Check if the graph is empty (null factors set by remove() will cause this to\n-return false).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:330\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\b__\bf_\ba_\bc_\bt_\bo_\br_\bs\n-FactorIndices add_factors(const CONTAINER &factors, bool useEmptySlots=false)\n-Add new factors to a factor graph and returns a list of new factor indices,\n-optionally finding and re...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)\n-Add a factor directly using a shared_ptr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bd_\bo_\bt\n-void dot(std::ostream &os, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n-Output to graphviz format, stream version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:141\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\ba_\bs_\be\n-iterator erase(iterator item)\n-Erase factor and rearrange other factors to take up the empty space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:391\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-void add(const FACTOR_OR_CONTAINER &factorOrContainer)\n-Add a factor or container of factors, including STL collections, BayesTrees,\n-etc.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:269\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\ba_\bs_\be\n-iterator erase(iterator first, iterator last)\n-Erase factors and rearrange other factors to take up the empty space.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:394\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bb_\ba_\bc_\bk\n-sharedFactor back() const\n-Get the last factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:362\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-FactorGraph(const CONTAINER &factors)\n-Construct from container of factors (shared_ptr or plain objects)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bm_\bo_\bv_\be\n-void remove(size_t i)\n-delete factor without re-arranging indexes by inserting a nullptr pointer\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:385\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bk_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n-KeyVector keyVector() const\n-Potentially slow function to return all keys involved, sorted, as a vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-HasDerivedValueType< CONTAINER > push_back(const CONTAINER &container)\n-Push back non-pointer objects in a container (factors are copied).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-FactorGraph()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:142\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bm_\bp_\bl_\ba_\bc_\be_\b__\bs_\bh_\ba_\br_\be_\bd\n-IsDerived< DERIVEDFACTOR > emplace_shared(Args &&... args)\n-Emplace a shared pointer to factor of given type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:192\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-sharedFactor & operator[](size_t i)\n-Get a specific factor by index (this does not check array bounds, as opposed to\n-at() which does).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:350\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bt\n-sharedFactor & at(size_t i)\n-Get a specific factor by index (this checks array bounds and may throw an\n-exception,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:340\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-std::enable_if< std::is_base_of< This, typenameCLIQUE::FactorGraphType >::value\n->::type push_back(const BayesTree< CLIQUE > &bayesTree)\n-Push back a BayesTree as a collection of factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:296\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const HybridValues &values) const\n-Add error for all factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-FactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)\n-Constructor from iterator over factors (shared_ptr or plain objects)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:146\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bs_\bi_\bz_\be\n-virtual void resize(size_t size)\n-Directly resize the number of factors in the graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:381\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bn_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-size_t nrFactors() const\n-return the number of non-null factors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bi_\bz_\be\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A testable concept check that should be placed in applicable unit tests and in\n+generic algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of vertical blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+const Matrix & matrix() const\n+Access to full matrix (including any portions excluded by rowStart(), rowEnd(),\n+and firstBlock())\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:188\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n size_t size() const\n-return the number of factors (including any null factors set by remove() ).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:326\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-HasDerivedValueType< ITERATOR > push_back(ITERATOR firstFactor, ITERATOR\n-lastFactor)\n-Push back many factors with an iterator (factors are copied)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:240\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bf_\br_\bo_\bn_\bt\n-sharedFactor front() const\n-Get the first factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:359\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bn_\bd\n-const_iterator end() const\n-Iterator to end of factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:356\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-HasDerivedElementType< CONTAINER > push_back(const CONTAINER &container)\n-Push back many factors as shared_ptr's in a container (factors are not copied)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:254\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n-FACTOR FactorType\n-factor type\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bp_\bl_\ba_\bc_\be\n-void replace(size_t index, sharedFactor factor)\n-replace a factor by index\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:388\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n-boost::assign::list_inserter< CRefCallPushBack< This > > operator+=(const\n-FACTOR_OR_CONTAINER &factorOrContainer)\n-Add a factor or container of factors, including STL collections, BayesTrees,\n-etc.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:278\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+_\b=\n-std::enable_if< std::is_base_of< FactorType, DERIVEDFACTOR >::value, boost::\n-assign::list_inserter< RefCallPushBack< This > > >::type operator+=(boost::\n-shared_ptr< DERIVEDFACTOR > factor)\n-+= works well with boost::assign list inserter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-iterator begin()\n-non-const STL-style begin()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:372\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-Iterator to beginning of factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:353\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-HasDerivedElementType< ITERATOR > push_back(ITERATOR firstFactor, ITERATOR\n-lastFactor)\n-Push back many factors with an iterator over shared_ptr (factors are not\n-copied)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:233\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd\n-IsDerived< DERIVEDFACTOR > add(boost::shared_ptr< DERIVEDFACTOR > factor)\n-add is a synonym for push_back.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:210\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:438\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< FACTOR > sharedFactor\n-Shared pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(size_t idx) const\n-MATLAB interface utility: Checks whether a factor index idx exists in the graph\n-and is a live pointer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:434\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const sharedFactor operator[](size_t i) const\n-Get a specific factor by index (this does not check array bounds, as opposed to\n-at() which does).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:345\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-IsDerived< DERIVEDFACTOR > push_back(const DERIVEDFACTOR &factor)\n-Add a factor by value, will be copy-constructed (use push_back with a\n-shared_ptr to avoid the copy).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:203\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-FactorGraph(std::initializer_list< boost::shared_ptr< DERIVEDFACTOR > >\n-sharedFactors)\n-Constructor that takes an initializer list of shared pointers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:171\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bn_\bd\n-iterator end()\n-non-const STL-style end()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:375\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_\n-FastVector< sharedFactor > factors_\n-concept check, makes sure FACTOR defines print and equals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bt\n-const sharedFactor at(size_t i) const\n-Get a specific factor by index (this checks array bounds and may throw an\n-exception,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:335\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n-void saveGraph(const std::string &filename, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n-output to file with graphviz format.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph-inst.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\b~_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-virtual ~FactorGraph()=default\n-Default destructor Public and virtual so boost serialization can call it.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\br_\be_\bs_\be_\br_\bv_\be\n-void reserve(size_t size)\n-Reserve space for the specified number of factors if you know in advance how\n-many there will be (work...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:182\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bT_\bo_\bG_\br_\ba_\bp_\bh\n-void addFactorsToGraph(FactorGraph< FactorType > *graph) const\n-Add all cliques in this BayesTree to the specified factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree-inst.h:168\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n-DotWriter is a helper class for writing graphviz .dot files.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk\n-Helper.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bP_\bu_\bs_\bh_\bB_\ba_\bc_\bk\n-Helper.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bR_\be_\bf_\bC_\ba_\bl_\bl_\bA_\bd_\bd_\bC_\bo_\bp_\by\n-Helper.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:80\n-_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-the error.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor in the squared-error form.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+Factor that supports arbitrary expressions via AD.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n+Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix >\n+& > H=boost::none) const override\n+Error function without the NoiseModel, .\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:99\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print relies on Testable traits being defined for T\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+virtual Expression< T > expression() const\n+Recreate expression from keys_ and measured_, used in load below.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:193\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b_\n+Expression< T > expression_\n+the expression that is AD enabled\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd_\b_\n+T measured_\n+the measurement to be compared with the expression\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm_\bs_\b_\n+FastVector< int > dims_\n+dimensions of the Jacobian matrices\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n+const T & measured() const\n+return the measurement\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override\n+linearize to a GaussianFactor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:112\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+~ExpressionFactor() override\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &f, double tol) const override\n+equals relies on Testable traits being defined for T\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+ExpressionFactor(const SharedNoiseModel &noiseModel, const T &measurement)\n+Default constructor, for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:161\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+ExpressionFactor(const SharedNoiseModel &noiseModel, const T &measurement,\n+const Expression< T > &expression)\n+Constructor: creates a factor from a measurement and measurement function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be\n+void initialize(const Expression< T > &expression)\n+Initialize with constructor arguments.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:167\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+Expression class that supports automatic differentiation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+N-ary variadic template for ExpressionFactor meant as a base class for N-ary\n+factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:242\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n+virtual Expression< T > expression(const ArrayNKeys &keys) const\n+Recreate expression from given keys_ and measured_, used in load Needed to\n+deserialize a derived fact...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:256\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\b~_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+~ExpressionFactorN() override=default\n+Destructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+ExpressionFactorN()=default\n+Default constructor, for serialization.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+ExpressionFactorN(const ArrayNKeys &keys, const SharedNoiseModel &noiseModel,\n+const T &measurement)\n+Constructor takes care of keys, but still need to call initialize.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:266\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bt_\bi_\bv_\be\n+virtual bool active(const Values &) const\n+Checks whether a factor should be used based on a set of values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n+density Templated on...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+Print.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &f, double tol=1e-9) const override\n+Check if two factors are equal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+const SharedNoiseModel & noiseModel() const\n+access to the noise model\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+noise model to the factor, and calculates the error by asking the user to\n+implement the method\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * E\bEx\bxp\bpr\bre\bes\bss\bsi\bio\bon\bnF\bFa\bac\bct\bto\bor\br.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00599_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00386_source.html", "comments": ["Files 92% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/LabeledSymbol.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3_S2.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n
\n \n
\n \n
No Matches
\n
\n
\n
\n \n \n
\n-
LabeledSymbol.h
\n+
Cal3_S2.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <functional>
\n-\n-
24
\n-
25namespace gtsam {
\n+
22#pragma once
\n+
23
\n+
24#include <gtsam/geometry/Cal3.h>
\n+\n
26
\n-
\n-
35class GTSAM_EXPORT LabeledSymbol {
\n-
36protected:
\n-
37 unsigned char c_, label_;
\n-
38 std::uint64_t j_;
\n-
39
\n-
40public:
\n-\n+
27namespace gtsam {
\n+
28
\n+
\n+
34class GTSAM_EXPORT Cal3_S2 : public Cal3 {
\n+
35 public:
\n+
36 enum { dimension = 5 };
\n+
37
\n+
39 using shared_ptr = boost::shared_ptr<Cal3_S2>;
\n+
40
\n
43
\n-
45 LabeledSymbol(const LabeledSymbol& key);
\n+
45 Cal3_S2() = default;
\n
46
\n-
48 LabeledSymbol(unsigned char c, unsigned char label, std::uint64_t j);
\n-
49
\n-\n-
52
\n-
54 operator gtsam::Key() const;
\n-
55
\n-
56 // Testable Requirements
\n-
57 void print(const std::string& s = "") const;
\n-
58
\n-
59 bool equals(const LabeledSymbol& expected, double tol = 0.0) const {
\n-
60 return (*this) == expected;
\n-
61 }
\n-
62
\n-
64 gtsam::Key key() const { return (gtsam::Key) *this; }
\n-
65
\n-
67 inline unsigned char label() const { return label_; }
\n-
68
\n-
70 inline unsigned char chr() const { return c_; }
\n+
\n+
48 Cal3_S2(double fx, double fy, double s, double u0, double v0)
\n+
49 : Cal3(fx, fy, s, u0, v0) {}
\n+
\n+
50
\n+
52 Cal3_S2(const Vector5& d) : Cal3(d) {}
\n+
53
\n+
60 Cal3_S2(double fov, int w, int h) : Cal3(fov, w, h) {}
\n+
61
\n+
69 Point2 uncalibrate(const Point2& p, OptionalJacobian<2, 5> Dcal = boost::none,
\n+
70 OptionalJacobian<2, 2> Dp = boost::none) const;
\n
71
\n-
73 inline size_t index() const { return j_; }
\n-
74
\n-
76 operator std::string() const;
\n-
77
\n-
79 bool operator<(const LabeledSymbol& comp) const;
\n-
80 bool operator==(const LabeledSymbol& comp) const;
\n-
81 bool operator==(gtsam::Key comp) const;
\n-
82 bool operator!=(const LabeledSymbol& comp) const;
\n-
83 bool operator!=(gtsam::Key comp) const;
\n-
84
\n-
91 // Checks only the type
\n-
92 static std::function<bool(gtsam::Key)> TypeTest(unsigned char c);
\n-
93
\n-
94 // Checks only the robot ID (label_)
\n-
95 static std::function<bool(gtsam::Key)> LabelTest(unsigned char label);
\n+
79 Point2 calibrate(const Point2& p, OptionalJacobian<2, 5> Dcal = boost::none,
\n+
80 OptionalJacobian<2, 2> Dp = boost::none) const;
\n+
81
\n+
87 Vector3 calibrate(const Vector3& p) const;
\n+
88
\n+
92
\n+
94 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n+
95 const Cal3_S2& cal);
\n
96
\n-
97 // Checks both type and the robot ID
\n-
98 static std::function<bool(gtsam::Key)> TypeLabelTest(unsigned char c, unsigned char label);
\n+
98 void print(const std::string& s = "Cal3_S2") const override;
\n
99
\n-
100 // Converts to upper/lower versions of labels
\n-
101 LabeledSymbol upper() const { return LabeledSymbol(c_, toupper(label_), j_); }
\n-
102 LabeledSymbol lower() const { return LabeledSymbol(c_, tolower(label_), j_); }
\n-
103
\n-
104 // Create a new symbol with a different character.
\n-
105 LabeledSymbol newChr(unsigned char c) const { return LabeledSymbol(c, label_, j_); }
\n-
106
\n-
107 // Create a new symbol with a different label.
\n-
108 LabeledSymbol newLabel(unsigned char label) const { return LabeledSymbol(c_, label, j_); }
\n-
109
\n-
111 friend GTSAM_EXPORT std::ostream &operator<<(std::ostream &, const LabeledSymbol &);
\n+
101 bool equals(const Cal3_S2& K, double tol = 10e-9) const;
\n+
102
\n+
\n+
104 inline Cal3_S2 between(const Cal3_S2& q,
\n+
105 OptionalJacobian<5, 5> H1 = boost::none,
\n+
106 OptionalJacobian<5, 5> H2 = boost::none) const {
\n+
107 if (H1) *H1 = -I_5x5;
\n+
108 if (H2) *H2 = I_5x5;
\n+
109 return Cal3_S2(q.fx_ - fx_, q.fy_ - fy_, q.s_ - s_, q.u0_ - u0_,
\n+
110 q.v0_ - v0_);
\n+
111 }
\n+
\n
112
\n-
113private:
\n-
114
\n-
116 friend class boost::serialization::access;
\n-
117 template<class ARCHIVE>
\n-
118 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
119 ar & BOOST_SERIALIZATION_NVP(c_);
\n-
120 ar & BOOST_SERIALIZATION_NVP(label_);
\n-
121 ar & BOOST_SERIALIZATION_NVP(j_);
\n-
122 }
\n-
123}; // \\class LabeledSymbol
\n+
116
\n+
118 inline static size_t Dim() { return dimension; }
\n+
119
\n+
\n+
121 inline Cal3_S2 retract(const Vector& d) const {
\n+
122 return Cal3_S2(fx_ + d(0), fy_ + d(1), s_ + d(2), u0_ + d(3), v0_ + d(4));
\n+
123 }
\n
\n
124
\n
\n-
126inline Key mrsymbol(unsigned char c, unsigned char label, size_t j) {
\n-
127 return (Key)LabeledSymbol(c,label,j);
\n-
128}
\n+
126 Vector5 localCoordinates(const Cal3_S2& T2) const {
\n+
127 return T2.vector() - vector();
\n+
128 }
\n
\n
129
\n-
131inline unsigned char mrsymbolChr(Key key) { return LabeledSymbol(key).chr(); }
\n-
132
\n-
134inline unsigned char mrsymbolLabel(Key key) { return LabeledSymbol(key).label(); }
\n-
135
\n-
137inline size_t mrsymbolIndex(Key key) { return LabeledSymbol(key).index(); }
\n-
138
\n-
140template<> struct traits<LabeledSymbol> : public Testable<LabeledSymbol> {};
\n-
141
\n-
142} // \\namespace gtsam
\n-
143
\n+
133
\n+
134 private:
\n+
136 friend class boost::serialization::access;
\n+
137 template <class Archive>
\n+
138 void serialize(Archive& ar, const unsigned int /*version*/) {
\n+
139 ar& boost::serialization::make_nvp(
\n+
140 "Cal3_S2", boost::serialization::base_object<Cal3>(*this));
\n+
141 }
\n+
142
\n+
144};
\n+
\n+
145
\n+
146template <>
\n+
147struct traits<Cal3_S2> : public internal::Manifold<Cal3_S2> {};
\n+
148
\n+
149template <>
\n+
150struct traits<const Cal3_S2> : public internal::Manifold<Cal3_S2> {};
\n+
151
\n+
152} // \\ namespace gtsam
\n+
Common code for all Calibration models.
\n+
2D Point
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
unsigned char mrsymbolChr(Key key)
Return the character portion of a symbol key.
Definition LabeledSymbol.h:131
\n-
size_t mrsymbolIndex(Key key)
Return the index portion of a symbol key.
Definition LabeledSymbol.h:137
\n-
unsigned char mrsymbolLabel(Key key)
Return the label portion of a symbol key.
Definition LabeledSymbol.h:134
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
bool operator!=(const Matrix &A, const Matrix &B)
inequality
Definition Matrix.h:107
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
Key mrsymbol(unsigned char c, unsigned char label, size_t j)
Create a symbol key from a character, label and index, i.e.
Definition LabeledSymbol.h:126
\n-
bool operator==(const Matrix &A, const Matrix &B)
equality is just equal_with_abs_tol 1e-9
Definition Matrix.h:100
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Customized version of gtsam::Symbol for multi-robot use.
Definition LabeledSymbol.h:35
\n-
unsigned char chr() const
Retrieve key character.
Definition LabeledSymbol.h:70
\n-
gtsam::Key key() const
return the integer version
Definition LabeledSymbol.h:64
\n-
size_t index() const
Retrieve key index.
Definition LabeledSymbol.h:73
\n-
unsigned char label() const
Retrieve label character.
Definition LabeledSymbol.h:67
\n-\n+
Common base class for all calibration models.
Definition Cal3.h:69
\n+
Vector5 vector() const
vectorized form (column-wise)
Definition Cal3.h:160
\n+
double fy_
focal length
Definition Cal3.h:71
\n+
double s_
skew
Definition Cal3.h:72
\n+
double v0_
principal point
Definition Cal3.h:73
\n+
The most common 5DOF 3D->2D calibration.
Definition Cal3_S2.h:34
\n+
Cal3_S2()=default
Create a default calibration that leaves coordinates unchanged.
\n+
Cal3_S2(double fx, double fy, double s, double u0, double v0)
constructor from doubles
Definition Cal3_S2.h:48
\n+
Cal3_S2 between(const Cal3_S2 &q, OptionalJacobian< 5, 5 > H1=boost::none, OptionalJacobian< 5, 5 > H2=boost::none) const
"Between", subtracts calibrations. between(p,q) == compose(inverse(p),q)
Definition Cal3_S2.h:104
\n+
static size_t Dim()
return DOF, dimensionality of tangent space
Definition Cal3_S2.h:118
\n+
Cal3_S2(const Vector5 &d)
constructor from vector
Definition Cal3_S2.h:52
\n+
Vector5 localCoordinates(const Cal3_S2 &T2) const
Unretraction for the calibration.
Definition Cal3_S2.h:126
\n+
Cal3_S2(double fov, int w, int h)
Easy constructor, takes fov in degrees, asssumes zero skew, unit aspect.
Definition Cal3_S2.h:60
\n+
Cal3_S2 retract(const Vector &d) const
Given 5-dim tangent vector, create new calibration.
Definition Cal3_S2.h:121
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,189 +1,186 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-LabeledSymbol.h\n+Cal3_S2.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include \n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n+22#pragma once\n+23\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n 26\n-_\b3_\b5class GTSAM_EXPORT _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl {\n-36protected:\n-37 unsigned char c_, label_;\n-38 std::uint64_t j_;\n-39\n-40public:\n-42 _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl();\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n+28\n+_\b3_\b4class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\b__\bS_\b2 : public _\bC_\ba_\bl_\b3 {\n+35 public:\n+36 enum { dimension = 5 };\n+37\n+39 using shared_ptr = boost::shared_ptr;\n+40\n 43\n-45 _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(const _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl& key);\n+_\b4_\b5 _\bC_\ba_\bl_\b3_\b__\bS_\b2() = default;\n 46\n-48 _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(unsigned char c, unsigned char label, std::uint64_t j);\n-49\n-51 _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by key);\n-52\n-54 operator _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by() const;\n-55\n-56 // Testable Requirements\n-57 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n-58\n-59 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl& expected, double tol = 0.0) const {\n-60 return (*this) == expected;\n-61 }\n-62\n-_\b6_\b4 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by _\bk_\be_\by() const { return (_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by) *this; }\n-65\n-_\b6_\b7 inline unsigned char _\bl_\ba_\bb_\be_\bl() const { return label_; }\n-68\n-_\b7_\b0 inline unsigned char _\bc_\bh_\br() const { return c_; }\n+_\b4_\b8 _\bC_\ba_\bl_\b3_\b__\bS_\b2(double fx, double fy, double s, double u0, double v0)\n+49 : _\bC_\ba_\bl_\b3(fx, fy, s, u0, v0) {}\n+50\n+_\b5_\b2 _\bC_\ba_\bl_\b3_\b__\bS_\b2(const Vector5& d) : _\bC_\ba_\bl_\b3(d) {}\n+53\n+_\b6_\b0 _\bC_\ba_\bl_\b3_\b__\bS_\b2(double fov, int w, int h) : _\bC_\ba_\bl_\b3(fov, w, h) {}\n+61\n+69 _\bP_\bo_\bi_\bn_\bt_\b2 uncalibrate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b5_\b> Dcal = boost::\n+none,\n+70 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dp = boost::none) const;\n 71\n-_\b7_\b3 inline size_t _\bi_\bn_\bd_\be_\bx() const { return j_; }\n-74\n-76 operator std::string() const;\n-77\n-79 bool operator<(const _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl& comp) const;\n-80 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(const _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl& comp) const;\n-81 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by comp) const;\n-82 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(const _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl& comp) const;\n-83 bool _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by comp) const;\n-84\n-91 // Checks only the type\n-92 static std::function TypeTest(unsigned char c);\n-93\n-94 // Checks only the robot ID (label_)\n-95 static std::function LabelTest(unsigned char label);\n+79 _\bP_\bo_\bi_\bn_\bt_\b2 calibrate(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b5_\b> Dcal = boost::none,\n+80 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b2_\b> Dp = boost::none) const;\n+81\n+87 Vector3 calibrate(const Vector3& p) const;\n+88\n+92\n+94 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+95 const _\bC_\ba_\bl_\b3_\b__\bS_\b2& cal);\n 96\n-97 // Checks both type and the robot ID\n-98 static std::function TypeLabelTest(unsigned char c,\n-unsigned char label);\n+98 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"Cal3_S2\") const override;\n 99\n-100 // Converts to upper/lower versions of labels\n-101 _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl upper() const { return _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(c_, toupper(label_),\n-j_); }\n-102 LabeledSymbol lower() const { return LabeledSymbol(c_, tolower(label_),\n-j_); }\n-103\n-104 // Create a new symbol with a different character.\n-105 LabeledSymbol newChr(unsigned char c) const { return LabeledSymbol(c,\n-label_, j_); }\n-106\n-107 // Create a new symbol with a different label.\n-108 LabeledSymbol newLabel(unsigned char label) const { return LabeledSymbol\n-(c_, label, j_); }\n-109\n-111 friend GTSAM_EXPORT std::ostream &operator<<(std::ostream &, const\n-LabeledSymbol &);\n+101 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bl_\b3_\b__\bS_\b2& K, double tol = 10e-9) const;\n+102\n+_\b1_\b0_\b4 inline _\bC_\ba_\bl_\b3_\b__\bS_\b2 _\bb_\be_\bt_\bw_\be_\be_\bn(const _\bC_\ba_\bl_\b3_\b__\bS_\b2& q,\n+105 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b5_\b,_\b _\b5_\b> H1 = boost::none,\n+106 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b5_\b,_\b _\b5_\b> H2 = boost::none) const {\n+107 if (H1) *H1 = -I_5x5;\n+108 if (H2) *H2 = I_5x5;\n+109 return _\bC_\ba_\bl_\b3_\b__\bS_\b2(q.fx_ - fx_, q._\bf_\by_\b_ - fy_, q._\bs_\b_ - s_, q.u0_ - u0_,\n+110 q._\bv_\b0_\b_ - v0_);\n+111 }\n 112\n-113private:\n-114\n-_\b1_\b1_\b6 friend class boost::serialization::access;\n-117 template\n-118 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-119 ar & BOOST_SERIALIZATION_NVP(c_);\n-120 ar & BOOST_SERIALIZATION_NVP(label_);\n-121 ar & BOOST_SERIALIZATION_NVP(j_);\n-122 }\n-123}; // \\class LabeledSymbol\n+116\n+_\b1_\b1_\b8 inline static size_t _\bD_\bi_\bm() { return dimension; }\n+119\n+_\b1_\b2_\b1 inline _\bC_\ba_\bl_\b3_\b__\bS_\b2 _\br_\be_\bt_\br_\ba_\bc_\bt(const Vector& d) const {\n+122 return _\bC_\ba_\bl_\b3_\b__\bS_\b2(fx_ + d(0), fy_ + d(1), s_ + d(2), u0_ + d(3), v0_ + d(4));\n+123 }\n 124\n-_\b1_\b2_\b6inline _\bK_\be_\by _\bm_\br_\bs_\by_\bm_\bb_\bo_\bl(unsigned char c, unsigned char label, size_t j) {\n-127 return (_\bK_\be_\by)_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(c,label,j);\n-128}\n+_\b1_\b2_\b6 Vector5 _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const _\bC_\ba_\bl_\b3_\b__\bS_\b2& T2) const {\n+127 return T2._\bv_\be_\bc_\bt_\bo_\br() - vector();\n+128 }\n 129\n-_\b1_\b3_\b1inline unsigned char _\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bC_\bh_\br(_\bK_\be_\by key) { return _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(key)._\bc_\bh_\br();\n-}\n-132\n-_\b1_\b3_\b4inline unsigned char _\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bL_\ba_\bb_\be_\bl(_\bK_\be_\by key) { return _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl\n-(key)._\bl_\ba_\bb_\be_\bl(); }\n-135\n-_\b1_\b3_\b7inline size_t _\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bI_\bn_\bd_\be_\bx(_\bK_\be_\by key) { return _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl(key)._\bi_\bn_\bd_\be_\bx(); }\n-138\n-_\b1_\b4_\b0template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-141\n-142} // \\namespace gtsam\n-143\n+133\n+134 private:\n+_\b1_\b3_\b6 friend class boost::serialization::access;\n+137 template \n+138 void serialize(Archive& ar, const unsigned int /*version*/) {\n+139 ar& boost::serialization::make_nvp(\n+140 \"Cal3_S2\", boost::serialization::base_object(*this));\n+141 }\n+142\n+144};\n+145\n+146template <>\n+_\b1_\b4_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\b__\bS_\b2> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n+148\n+149template <>\n+_\b1_\b5_\b0struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n+151\n+152} // \\ namespace gtsam\n+_\bC_\ba_\bl_\b3_\b._\bh\n+Common code for all Calibration models.\n+_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n+2D Point\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bC_\bh_\br\n-unsigned char mrsymbolChr(Key key)\n-Return the character portion of a symbol key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bI_\bn_\bd_\be_\bx\n-size_t mrsymbolIndex(Key key)\n-Return the index portion of a symbol key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:137\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\br_\bs_\by_\bm_\bb_\bo_\bl_\bL_\ba_\bb_\be_\bl\n-unsigned char mrsymbolLabel(Key key)\n-Return the label portion of a symbol key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:134\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b!_\b=\n-bool operator!=(const Matrix &A, const Matrix &B)\n-inequality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\br_\bs_\by_\bm_\bb_\bo_\bl\n-Key mrsymbol(unsigned char c, unsigned char label, size_t j)\n-Create a symbol key from a character, label and index, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=_\b=\n-bool operator==(const Matrix &A, const Matrix &B)\n-equality is just equal_with_abs_tol 1e-9\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+Both ManifoldTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl\n-Customized version of gtsam::Symbol for multi-robot use.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b:_\b:_\bc_\bh_\br\n-unsigned char chr() const\n-Retrieve key character.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b:_\b:_\bk_\be_\by\n-gtsam::Key key() const\n-return the integer version\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b:_\b:_\bi_\bn_\bd_\be_\bx\n-size_t index() const\n-Retrieve key index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b:_\b:_\bl_\ba_\bb_\be_\bl\n-unsigned char label() const\n-Retrieve label character.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LabeledSymbol.h:67\n-_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3\n+Common base class for all calibration models.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+Vector5 vector() const\n+vectorized form (column-wise)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bf_\by_\b_\n+double fy_\n+focal length\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bs_\b_\n+double s_\n+skew\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b:_\b:_\bv_\b0_\b_\n+double v0_\n+principal point\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n+The most common 5DOF 3D->2D calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n+Cal3_S2()=default\n+Create a default calibration that leaves coordinates unchanged.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n+Cal3_S2(double fx, double fy, double s, double u0, double v0)\n+constructor from doubles\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bb_\be_\bt_\bw_\be_\be_\bn\n+Cal3_S2 between(const Cal3_S2 &q, OptionalJacobian< 5, 5 > H1=boost::none,\n+OptionalJacobian< 5, 5 > H2=boost::none) const\n+\"Between\", subtracts calibrations. between(p,q) == compose(inverse(p),q)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+return DOF, dimensionality of tangent space\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:118\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n+Cal3_S2(const Vector5 &d)\n+constructor from vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+Vector5 localCoordinates(const Cal3_S2 &T2) const\n+Unretraction for the calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2\n+Cal3_S2(double fov, int w, int h)\n+Easy constructor, takes fov in degrees, asssumes zero skew, unit aspect.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\b__\bS_\b2_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+Cal3_S2 retract(const Vector &d) const\n+Given 5-dim tangent vector, create new calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3_S2.h:121\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bL_\ba_\bb_\be_\bl_\be_\bd_\bS_\by_\bm_\bb_\bo_\bl_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bC_\ba_\bl_\b3_\b__\bS_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00608_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00590_source.html", "comments": ["Files 91% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ClusterTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminateableFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
ClusterTree.h
\n+
EliminateableFactorGraph.h
\n
\n
\n-Go to the documentation of this file.
1
\n-
10#pragma once
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12#include <gtsam/base/Testable.h>
\n-\n-\n-
15
\n-
16namespace gtsam {
\n-
17
\n-
24template <class GRAPH>
\n-
\n-\n-
26 public:
\n-
27 typedef GRAPH FactorGraphType;
\n-\n-
29 typedef boost::shared_ptr<This> shared_ptr;
\n+
19#pragma once
\n+
20
\n+
21#include <boost/shared_ptr.hpp>
\n+
22#include <functional>
\n+
23#include <boost/variant.hpp>
\n+
24#include <boost/optional.hpp>
\n+
25
\n+\n+\n+
28
\n+
29namespace gtsam {
\n
30
\n-
31 typedef typename GRAPH::FactorType FactorType;
\n-
32 typedef boost::shared_ptr<FactorType> sharedFactor;
\n-
33
\n-
35 // TODO(frank): re-factor JunctionTree so we can make members private
\n-
\n-
36 struct Cluster {
\n-\n-
38 Children children;
\n-
39
\n-
40 typedef Ordering Keys;
\n-\n-
42
\n-\n-
44
\n-
45 int problemSize_;
\n-
46
\n-
47 Cluster() : problemSize_(0) {}
\n-
48
\n-
49 virtual ~Cluster() {}
\n-
50
\n-
51 const Cluster& operator[](size_t i) const {
\n-
52 return *(children.at(i));
\n-
53 }
\n-
54
\n-
56 template <class CONTAINER>
\n-
\n-
57 Cluster(Key key, const CONTAINER& factorsToAdd)
\n-
58 : problemSize_(0) {
\n-
59 addFactors(key, factorsToAdd);
\n-
60 }
\n-
\n-
61
\n-
63 template <class CONTAINER>
\n-
\n-
64 void addFactors(Key key, const CONTAINER& factorsToAdd) {
\n-
65 orderedFrontalKeys.push_back(key);
\n-
66 factors.push_back(factorsToAdd);
\n-
67 problemSize_ += factors.size();
\n-
68 }
\n-
\n-
69
\n-
\n-
71 void addChild(const boost::shared_ptr<Cluster>& cluster) {
\n-
72 children.push_back(cluster);
\n-
73 problemSize_ = std::max(problemSize_, cluster->problemSize_);
\n-
74 }
\n+
34 template<class GRAPH>
\n+
\n+\n+
36 {
\n+
37 // Template for deriving:
\n+
38 // typedef MyFactor FactorType; ///< Type of factors in factor graph (e.g. GaussianFactor)
\n+
39 // typedef MyFactorGraphType FactorGraphType; ///< Type of the factor graph (e.g. GaussianFactorGraph)
\n+
40 // typedef MyConditional ConditionalType; ///< Type of conditionals from elimination (e.g. GaussianConditional)
\n+
41 // typedef MyBayesNet BayesNetType; ///< Type of Bayes net from sequential elimination (e.g. GaussianBayesNet)
\n+
42 // typedef MyEliminationTree EliminationTreeType; ///< Type of elimination tree (e.g. GaussianEliminationTree)
\n+
43 // typedef MyBayesTree BayesTreeType; ///< Type of Bayes tree (e.g. GaussianBayesTree)
\n+
44 // typedef MyJunctionTree JunctionTreeType; ///< Type of Junction tree (e.g. GaussianJunctionTree)
\n+
45 // static pair<shared_ptr<ConditionalType>, shared_ptr<FactorType>
\n+
46 // DefaultEliminate(
\n+
47 // const MyFactorGraph& factors, const Ordering& keys); ///< The default dense elimination function
\n+
48 };
\n
\n-
75
\n-
76 size_t nrChildren() const {
\n-
77 return children.size();
\n-
78 }
\n-
79
\n-
80 size_t nrFactors() const {
\n-
81 return factors.size();
\n-
82 }
\n+
49
\n+
50
\n+
55 template<class FACTOR_GRAPH>
\n+
\n+\n+
57 {
\n+
58 private:
\n+\n+
60 typedef FACTOR_GRAPH FactorGraphType;
\n+
61 // Base factor type stored in this graph (private because derived classes will get this from
\n+
62 // their FactorGraph base class)
\n+
63 typedef typename EliminationTraits<FactorGraphType>::FactorType _FactorType;
\n+
64
\n+
65 public:
\n+\n+
68
\n+
70 typedef typename EliminationTraitsType::ConditionalType ConditionalType;
\n+
71
\n+
73 typedef typename EliminationTraitsType::BayesNetType BayesNetType;
\n+
74
\n+
76 typedef typename EliminationTraitsType::EliminationTreeType EliminationTreeType;
\n+
77
\n+
79 typedef typename EliminationTraitsType::BayesTreeType BayesTreeType;
\n+
80
\n+
82 typedef typename EliminationTraitsType::JunctionTreeType JunctionTreeType;
\n
83
\n-
84 size_t nrFrontals() const {
\n-
85 return orderedFrontalKeys.size();
\n-
86 }
\n+
86 typedef std::pair<boost::shared_ptr<ConditionalType>, boost::shared_ptr<_FactorType> > EliminationResult;
\n
87
\n-
88 int problemSize() const {
\n-
89 return problemSize_;
\n-
90 }
\n-
91
\n-
93 virtual void print(const std::string& s = "",
\n-
94 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
95
\n-
97 std::vector<size_t> nrFrontalsOfChildren() const;
\n-
98
\n-
100 void merge(const boost::shared_ptr<Cluster>& cluster);
\n-
101
\n-
103 void mergeChildren(const std::vector<bool>& merge);
\n-
104 };
\n-
\n-
105
\n-
106 typedef boost::shared_ptr<Cluster> sharedCluster;
\n-
107
\n-
108 // Define Node=Cluster for compatibility with tree traversal functions
\n-
109 typedef Cluster Node;
\n-
110 typedef sharedCluster sharedNode;
\n-
111
\n-
113 GTSAM_CONCEPT_TESTABLE_TYPE(FactorType)
\n-
114
\n-
115 protected:
\n-\n-
117
\n-
120
\n-
\n-
123 ClusterTree(const This& other) {
\n-
124 *this = other;
\n-
125 }
\n-
\n-
126
\n-
128
\n-
129 public:
\n-
130
\n-\n-
133
\n-
136
\n-
138 void print(const std::string& s = "",
\n-
139 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
89 typedef std::function<EliminationResult(const FactorGraphType&, const Ordering&)> Eliminate;
\n+
90
\n+
92 typedef boost::optional<const VariableIndex&> OptionalVariableIndex;
\n+
93
\n+
95 typedef boost::optional<Ordering::OrderingType> OptionalOrderingType;
\n+
96
\n+
117 boost::shared_ptr<BayesNetType> eliminateSequential(
\n+
118 OptionalOrderingType orderingType = boost::none,
\n+
119 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
120 OptionalVariableIndex variableIndex = boost::none) const;
\n+
121
\n+
136 boost::shared_ptr<BayesNetType> eliminateSequential(
\n+
137 const Ordering& ordering,
\n+
138 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
139 OptionalVariableIndex variableIndex = boost::none) const;
\n
140
\n-
144
\n-
145 void addRoot(const boost::shared_ptr<Cluster>& cluster) {
\n-
146 roots_.push_back(cluster);
\n-
147 }
\n-
148
\n-
149 void addChildrenAsRoots(const boost::shared_ptr<Cluster>& cluster) {
\n-
150 for (auto child : cluster->children)
\n-
151 this->addRoot(child);
\n-
152 }
\n-
153
\n-
154 size_t nrRoots() const {
\n-
155 return roots_.size();
\n-
156 }
\n-
157
\n-
\n-\n-
160 return roots_;
\n-
161 }
\n-
\n-
162
\n-
163 const Cluster& operator[](size_t i) const {
\n-
164 return *(roots_.at(i));
\n-
165 }
\n-
166
\n-
168
\n-
169 protected:
\n-
172
\n-
175 This& operator=(const This& other);
\n-
176
\n-
178};
\n-
\n-
179
\n-
183template <class BAYESTREE, class GRAPH>
\n-
\n-\n-
185 public:
\n-
186 typedef BAYESTREE BayesTreeType;
\n-
187 typedef GRAPH FactorGraphType;
\n-\n-
189 typedef boost::shared_ptr<This> shared_ptr;
\n-
190
\n-
191 typedef typename BAYESTREE::ConditionalType ConditionalType;
\n-
192 typedef boost::shared_ptr<ConditionalType>
\n-\n-
194
\n-
195 typedef typename GRAPH::Eliminate Eliminate;
\n-
196 typedef typename GRAPH::FactorType FactorType;
\n-
197 typedef boost::shared_ptr<FactorType> sharedFactor;
\n-
198
\n-
199 protected:
\n-
200 FastVector<sharedFactor> remainingFactors_;
\n-
201
\n-
204
\n-
\n-
207 EliminatableClusterTree(const This& other) : ClusterTree<GRAPH>(other) {
\n-
208 *this = other;
\n-
209 }
\n-
\n-
210
\n-
212
\n-
213 public:
\n-
216
\n-
222 std::pair<boost::shared_ptr<BayesTreeType>, boost::shared_ptr<FactorGraphType> > eliminate(
\n-
223 const Eliminate& function) const;
\n-
224
\n-
226
\n+
157 boost::shared_ptr<BayesTreeType> eliminateMultifrontal(
\n+
158 OptionalOrderingType orderingType = boost::none,
\n+
159 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
160 OptionalVariableIndex variableIndex = boost::none) const;
\n+
161
\n+
171 boost::shared_ptr<BayesTreeType> eliminateMultifrontal(
\n+
172 const Ordering& ordering,
\n+
173 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
174 OptionalVariableIndex variableIndex = boost::none) const;
\n+
175
\n+
180 std::pair<boost::shared_ptr<BayesNetType>, boost::shared_ptr<FactorGraphType> >
\n+\n+
182 const Ordering& ordering,
\n+
183 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
184 OptionalVariableIndex variableIndex = boost::none) const;
\n+
185
\n+
190 std::pair<boost::shared_ptr<BayesNetType>, boost::shared_ptr<FactorGraphType> >
\n+\n+
192 const KeyVector& variables,
\n+
193 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
194 OptionalVariableIndex variableIndex = boost::none) const;
\n+
195
\n+
200 std::pair<boost::shared_ptr<BayesTreeType>, boost::shared_ptr<FactorGraphType> >
\n+\n+
202 const Ordering& ordering,
\n+
203 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
204 OptionalVariableIndex variableIndex = boost::none) const;
\n+
205
\n+
210 std::pair<boost::shared_ptr<BayesTreeType>, boost::shared_ptr<FactorGraphType> >
\n+\n+
212 const KeyVector& variables,
\n+
213 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
214 OptionalVariableIndex variableIndex = boost::none) const;
\n+
215
\n+
225 boost::shared_ptr<BayesNetType> marginalMultifrontalBayesNet(
\n+
226 boost::variant<const Ordering&, const KeyVector&> variables,
\n+
227 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
228 OptionalVariableIndex variableIndex = boost::none) const;
\n
229
\n-
\n-\n-
232 return remainingFactors_;
\n-
233 }
\n-
\n-
234
\n-
236
\n-
237 protected:
\n-
240
\n-
243 This& operator=(const This& other);
\n-
244
\n-\n-
247
\n-
249};
\n-
\n-
250}
\n-
251
\n-\n-
Concept check for values that can be used in unit tests.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
Collects factorgraph fragments defined on variable clusters, arranged in a tree.
\n-
Variable ordering for the elimination algorithm.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
240 boost::shared_ptr<BayesNetType> marginalMultifrontalBayesNet(
\n+
241 boost::variant<const Ordering&, const KeyVector&> variables,
\n+
242 const Ordering& marginalizedVariableOrdering,
\n+
243 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
244 OptionalVariableIndex variableIndex = boost::none) const;
\n+
245
\n+
255 boost::shared_ptr<BayesTreeType> marginalMultifrontalBayesTree(
\n+
256 boost::variant<const Ordering&, const KeyVector&> variables,
\n+
257 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
258 OptionalVariableIndex variableIndex = boost::none) const;
\n+
259
\n+
270 boost::shared_ptr<BayesTreeType> marginalMultifrontalBayesTree(
\n+
271 boost::variant<const Ordering&, const KeyVector&> variables,
\n+
272 const Ordering& marginalizedVariableOrdering,
\n+
273 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
274 OptionalVariableIndex variableIndex = boost::none) const;
\n+
275
\n+
277 boost::shared_ptr<FactorGraphType> marginal(
\n+
278 const KeyVector& variables,
\n+
279 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
280 OptionalVariableIndex variableIndex = boost::none) const;
\n+
281
\n+
282 private:
\n+
283
\n+
284 // Access the derived factor graph class
\n+
285 const FactorGraphType& asDerived() const { return static_cast<const FactorGraphType&>(*this); }
\n+
286
\n+
287 // Access the derived factor graph class
\n+
288 FactorGraphType& asDerived() { return static_cast<FactorGraphType&>(*this); }
\n+
289
\n+
290 public:
\n+
291 #ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
293 boost::shared_ptr<BayesNetType> GTSAM_DEPRECATED eliminateSequential(
\n+
294 const Ordering& ordering,
\n+
295 const Eliminate& function,
\n+
296 OptionalVariableIndex variableIndex,
\n+
297 OptionalOrderingType orderingType) const {
\n+
298 return eliminateSequential(ordering, function, variableIndex);
\n+
299 }
\n+
300
\n+
302 boost::shared_ptr<BayesNetType> GTSAM_DEPRECATED eliminateSequential(
\n+
303 const Eliminate& function,
\n+
304 OptionalVariableIndex variableIndex = boost::none,
\n+
305 OptionalOrderingType orderingType = boost::none) const {
\n+
306 return eliminateSequential(orderingType, function, variableIndex);
\n+
307 }
\n+
308
\n+
310 boost::shared_ptr<BayesTreeType> GTSAM_DEPRECATED eliminateMultifrontal(
\n+
311 const Ordering& ordering,
\n+
312 const Eliminate& function,
\n+
313 OptionalVariableIndex variableIndex,
\n+
314 OptionalOrderingType orderingType) const {
\n+
315 return eliminateMultifrontal(ordering, function, variableIndex);
\n+
316 }
\n+
317
\n+
319 boost::shared_ptr<BayesTreeType> GTSAM_DEPRECATED eliminateMultifrontal(
\n+
320 const Eliminate& function,
\n+
321 OptionalVariableIndex variableIndex = boost::none,
\n+
322 OptionalOrderingType orderingType = boost::none) const {
\n+
323 return eliminateMultifrontal(orderingType, function, variableIndex);
\n+
324 }
\n+
325
\n+
327 boost::shared_ptr<BayesNetType> GTSAM_DEPRECATED marginalMultifrontalBayesNet(
\n+
328 boost::variant<const Ordering&, const KeyVector&> variables,
\n+
329 boost::none_t,
\n+
330 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
331 OptionalVariableIndex variableIndex = boost::none) const {
\n+
332 return marginalMultifrontalBayesNet(variables, function, variableIndex);
\n+
333 }
\n+
334
\n+
336 boost::shared_ptr<BayesTreeType> GTSAM_DEPRECATED marginalMultifrontalBayesTree(
\n+
337 boost::variant<const Ordering&, const KeyVector&> variables,
\n+
338 boost::none_t,
\n+
339 const Eliminate& function = EliminationTraitsType::DefaultEliminate,
\n+
340 OptionalVariableIndex variableIndex = boost::none) const {
\n+
341 return marginalMultifrontalBayesTree(variables, function, variableIndex);
\n+
342 }
\n+
343 #endif
\n+
344 };
\n+
\n+
345
\n+
346}
\n+
Variable ordering for the elimination algorithm.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A cluster-tree that eliminates to a Bayes tree.
Definition ClusterTree.h:184
\n-
EliminatableClusterTree< BAYESTREE, GRAPH > This
This class.
Definition ClusterTree.h:188
\n-
EliminatableClusterTree()
Default constructor to be used in derived classes.
Definition ClusterTree.h:246
\n-
BAYESTREE::ConditionalType ConditionalType
The type of conditionals.
Definition ClusterTree.h:191
\n-
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition ClusterTree-inst.h:231
\n-
std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr< FactorGraphType > > eliminate(const Eliminate &function) const
Eliminate the factors to a Bayes tree and remaining factor graph.
Definition ClusterTree-inst.h:245
\n-
boost::shared_ptr< ConditionalType > sharedConditional
Shared pointer to a conditional.
Definition ClusterTree.h:193
\n-
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition ClusterTree.h:197
\n-
const FastVector< sharedFactor > & remainingFactors() const
Return the remaining factors that are not pulled into elimination.
Definition ClusterTree.h:231
\n-
EliminatableClusterTree(const This &other)
Copy constructor - makes a deep copy of the tree structure, but only pointers to factors are copied,...
Definition ClusterTree.h:207
\n-
BAYESTREE BayesTreeType
The BayesTree type produced by elimination.
Definition ClusterTree.h:186
\n-
GRAPH::FactorType FactorType
The type of factors.
Definition ClusterTree.h:196
\n-
GRAPH FactorGraphType
The factor graph type.
Definition ClusterTree.h:187
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition ClusterTree.h:189
\n-
GRAPH::Eliminate Eliminate
Typedef for an eliminate subroutine.
Definition ClusterTree.h:195
\n-
A cluster-tree is associated with a factor graph and is defined as in Koller-Friedman: each node k re...
Definition ClusterTree.h:25
\n-
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition ClusterTree-inst.h:104
\n-
ClusterTree< GRAPH > This
This class.
Definition ClusterTree.h:28
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition ClusterTree.h:29
\n-
FastVector< sharedNode > roots_
concept check
Definition ClusterTree.h:116
\n-
GRAPH::FactorType FactorType
The type of factors.
Definition ClusterTree.h:31
\n-
GRAPH FactorGraphType
The factor graph type.
Definition ClusterTree.h:27
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
Print the cluster tree.
Definition ClusterTree-inst.h:98
\n-
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition ClusterTree.h:32
\n-
const FastVector< sharedNode > & roots() const
Return the set of roots (one for a tree, multiple for a forest)
Definition ClusterTree.h:159
\n-
ClusterTree(const This &other)
Copy constructor - makes a deep copy of the tree structure, but only pointers to factors are copied,...
Definition ClusterTree.h:123
\n-
ClusterTree()
Default constructor.
Definition ClusterTree.h:132
\n-
boost::shared_ptr< Cluster > sharedCluster
Shared pointer to Cluster.
Definition ClusterTree.h:106
\n-
A Cluster is just a collection of factors.
Definition ClusterTree.h:36
\n-
Cluster(Key key, const CONTAINER &factorsToAdd)
Construct from factors associated with a single key.
Definition ClusterTree.h:57
\n-
Children children
sub-trees
Definition ClusterTree.h:38
\n-
virtual void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const
print this node
Definition ClusterTree-inst.h:26
\n-
Keys orderedFrontalKeys
Frontal keys of this node.
Definition ClusterTree.h:41
\n-
void mergeChildren(const std::vector< bool > &merge)
Merge all children for which bit is set into this node.
Definition ClusterTree-inst.h:56
\n-
void merge(const boost::shared_ptr< Cluster > &cluster)
Merge in given cluster.
Definition ClusterTree-inst.h:44
\n-
std::vector< size_t > nrFrontalsOfChildren() const
Return a vector with nrFrontal keys for each child.
Definition ClusterTree-inst.h:34
\n-
FactorGraphType factors
Factors associated with this node.
Definition ClusterTree.h:43
\n-
void addChild(const boost::shared_ptr< Cluster > &cluster)
Add a child cluster.
Definition ClusterTree.h:71
\n-
void addFactors(Key key, const CONTAINER &factorsToAdd)
Add factors associated with a single key.
Definition ClusterTree.h:64
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n+
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:57
\n+
boost::shared_ptr< BayesTreeType > marginalMultifrontalBayesTree(boost::variant< const Ordering &, const KeyVector & > variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal of the requested variables and return the result as a Bayes tree.
Definition EliminateableFactorGraph-inst.h:300
\n+
EliminationTraitsType::JunctionTreeType JunctionTreeType
Junction tree type that can do multifrontal elimination of this graph.
Definition EliminateableFactorGraph.h:82
\n+
boost::shared_ptr< FactorGraphType > marginal(const KeyVector &variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal factor graph of the requested variables.
Definition EliminateableFactorGraph-inst.h:367
\n+
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition EliminateableFactorGraph.h:89
\n+
EliminationTraitsType::BayesTreeType BayesTreeType
Bayes tree type produced by multifrontal elimination.
Definition EliminateableFactorGraph.h:79
\n+
EliminationTraitsType::BayesNetType BayesNetType
Bayes net type produced by sequential elimination.
Definition EliminateableFactorGraph.h:73
\n+
std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< _FactorType > > EliminationResult
The pair of conditional and remaining factor produced by a single dense elimination step on a subgrap...
Definition EliminateableFactorGraph.h:86
\n+
boost::shared_ptr< BayesNetType > eliminateSequential(OptionalOrderingType orderingType=boost::none, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do sequential elimination of all variables to produce a Bayes net.
Definition EliminateableFactorGraph-inst.h:30
\n+
boost::shared_ptr< BayesTreeType > eliminateMultifrontal(OptionalOrderingType orderingType=boost::none, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do multifrontal elimination of all variables to produce a Bayes tree.
Definition EliminateableFactorGraph-inst.h:91
\n+
EliminationTraitsType::ConditionalType ConditionalType
Conditional type stored in the Bayes net produced by elimination.
Definition EliminateableFactorGraph.h:70
\n+
EliminationTraitsType::EliminationTreeType EliminationTreeType
Elimination tree type that can do sequential elimination of this graph.
Definition EliminateableFactorGraph.h:76
\n+
boost::optional< const VariableIndex & > OptionalVariableIndex
Typedef for an optional variable index as an argument to elimination functions.
Definition EliminateableFactorGraph.h:92
\n+
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do sequential elimination of some variables, in ordering provided, to produce a Bayes net and a remai...
Definition EliminateableFactorGraph-inst.h:154
\n+
boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant< const Ordering &, const KeyVector & > variables, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Compute the marginal of the requested variables and return the result as a Bayes net.
Definition EliminateableFactorGraph-inst.h:233
\n+
std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr< FactorGraphType > > eliminatePartialMultifrontal(const Ordering &ordering, const Eliminate &function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const
Do multifrontal elimination of some variables, in ordering provided, to produce a Bayes tree and a re...
Definition EliminateableFactorGraph-inst.h:193
\n+
EliminationTraits< FactorGraphType > EliminationTraitsType
Typedef to the specific EliminationTraits for this graph.
Definition EliminateableFactorGraph.h:67
\n+
boost::optional< Ordering::OrderingType > OptionalOrderingType
Typedef for an optional ordering type.
Definition EliminateableFactorGraph.h:95
\n
Definition Ordering.h:34
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,384 +1,347 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ClusterTree.h\n+EliminateableFactorGraph.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1\n-10#pragma once\n+1/* ---------------------------------------------------------------------------\n+-\n+2\n+3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+7\n+8 * See LICENSE for the license information\n+9\n+10 * -------------------------------------------------------------------------\n+- */\n 11\n-12#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-13#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-14#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n-15\n-16namespace _\bg_\bt_\bs_\ba_\bm {\n-17\n-24template \n-_\b2_\b5class _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be {\n-26 public:\n-_\b2_\b7 typedef GRAPH _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n-_\b2_\b8 typedef _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bG_\bR_\bA_\bP_\bH_\b> _\bT_\bh_\bi_\bs;\n-_\b2_\b9 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+19#pragma once\n+20\n+21#include \n+22#include \n+23#include \n+24#include \n+25\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n 30\n-_\b3_\b1 typedef typename GRAPH::FactorType _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n-_\b3_\b2 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n-33\n-35 // TODO(frank): re-factor JunctionTree so we can make members private\n-_\b3_\b6 struct _\bC_\bl_\bu_\bs_\bt_\be_\br {\n-37 typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b<_\bC_\bl_\bu_\bs_\bt_\be_\br_\b> > Children;\n-_\b3_\b8 Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n-39\n-40 typedef _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bK_\be_\by_\bs;\n-_\b4_\b1 _\bK_\be_\by_\bs _\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs;\n-42\n-_\b4_\b3 _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be _\bf_\ba_\bc_\bt_\bo_\br_\bs;\n-44\n-45 int problemSize_;\n-46\n-47 _\bC_\bl_\bu_\bs_\bt_\be_\br() : problemSize_(0) {}\n-48\n-49 virtual _\b~_\bC_\bl_\bu_\bs_\bt_\be_\br() {}\n+34 template\n+_\b3_\b5 struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n+36 {\n+37 // Template for deriving:\n+38 // typedef MyFactor FactorType; ///< Type of factors in factor graph (e.g.\n+GaussianFactor)\n+39 // typedef MyFactorGraphType FactorGraphType; ///< Type of the factor graph\n+(e.g. GaussianFactorGraph)\n+40 // typedef MyConditional ConditionalType; ///< Type of conditionals from\n+elimination (e.g. GaussianConditional)\n+41 // typedef MyBayesNet BayesNetType; ///< Type of Bayes net from sequential\n+elimination (e.g. GaussianBayesNet)\n+42 // typedef MyEliminationTree EliminationTreeType; ///< Type of elimination\n+tree (e.g. GaussianEliminationTree)\n+43 // typedef MyBayesTree BayesTreeType; ///< Type of Bayes tree (e.g.\n+GaussianBayesTree)\n+44 // typedef MyJunctionTree JunctionTreeType; ///< Type of Junction tree (e.g.\n+GaussianJunctionTree)\n+45 // static pair, shared_ptr\n+46 // DefaultEliminate(\n+47 // const MyFactorGraph& factors, const Ordering& keys); ///< The default\n+dense elimination function\n+48 };\n+49\n 50\n-51 const Cluster& operator[](size_t i) const {\n-52 return *(_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn.at(i));\n-53 }\n-54\n-56 template \n-_\b5_\b7 _\bC_\bl_\bu_\bs_\bt_\be_\br(_\bK_\be_\by key, const CONTAINER& factorsToAdd)\n-58 : problemSize_(0) {\n-59 _\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs(key, factorsToAdd);\n-60 }\n-61\n-63 template \n-_\b6_\b4 void _\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs(_\bK_\be_\by key, const CONTAINER& factorsToAdd) {\n-65 _\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs.push_back(key);\n-66 _\bf_\ba_\bc_\bt_\bo_\br_\bs.push_back(factorsToAdd);\n-67 problemSize_ += _\bf_\ba_\bc_\bt_\bo_\br_\bs.size();\n-68 }\n-69\n-_\b7_\b1 void _\ba_\bd_\bd_\bC_\bh_\bi_\bl_\bd(const boost::shared_ptr& cluster) {\n-72 _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn.push_back(cluster);\n-73 problemSize_ = std::max(problemSize_, cluster->problemSize_);\n-74 }\n-75\n-76 size_t nrChildren() const {\n-77 return _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn.size();\n-78 }\n-79\n-80 size_t nrFactors() const {\n-81 return _\bf_\ba_\bc_\bt_\bo_\br_\bs.size();\n-82 }\n+55 template\n+_\b5_\b6 class _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+57 {\n+58 private:\n+59 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b__\bG_\bR_\bA_\bP_\bH_\b> This;\n+60 typedef FACTOR_GRAPH FactorGraphType;\n+61 // Base factor type stored in this graph (private because derived classes\n+will get this from\n+62 // their FactorGraph base class)\n+63 typedef typename _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be_\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be _FactorType;\n+64\n+65 public:\n+_\b6_\b7 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be_\b> _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\bT_\by_\bp_\be;\n+68\n+_\b7_\b0 typedef typename EliminationTraitsType::ConditionalType _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+71\n+_\b7_\b3 typedef typename EliminationTraitsType::BayesNetType _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n+74\n+_\b7_\b6 typedef typename EliminationTraitsType::EliminationTreeType\n+_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+77\n+_\b7_\b9 typedef typename EliminationTraitsType::BayesTreeType _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n+80\n+_\b8_\b2 typedef typename EliminationTraitsType::JunctionTreeType _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n 83\n-84 size_t nrFrontals() const {\n-85 return _\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs.size();\n-86 }\n+_\b8_\b6 typedef std::pair, boost::\n+shared_ptr<_FactorType> > _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt;\n 87\n-88 int problemSize() const {\n-89 return problemSize_;\n-90 }\n-91\n-93 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-94 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n-95\n-97 std::vector _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bO_\bf_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn() const;\n-98\n-100 void _\bm_\be_\br_\bg_\be(const boost::shared_ptr& cluster);\n-101\n-103 void _\bm_\be_\br_\bg_\be_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn(const std::vector& _\bm_\be_\br_\bg_\be);\n-104 };\n-105\n-_\b1_\b0_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bu_\bs_\bt_\be_\br;\n-107\n-108 // Define Node=Cluster for compatibility with tree traversal functions\n-109 typedef _\bC_\bl_\bu_\bs_\bt_\be_\br _\bN_\bo_\bd_\be;\n-110 typedef _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bu_\bs_\bt_\be_\br sharedNode;\n-111\n-113 GTSAM_CONCEPT_TESTABLE_TYPE(_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be)\n-114\n-115 protected:\n-_\b1_\b1_\b6 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b> _\br_\bo_\bo_\bt_\bs_\b_;\n-117\n-120\n-_\b1_\b2_\b3 _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be(const _\bT_\bh_\bi_\bs& other) {\n-124 *this = other;\n-125 }\n-126\n-128\n-129 public:\n-130\n-_\b1_\b3_\b2 _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be() {}\n-133\n-136\n-138 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-139 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+_\b8_\b9 typedef std::function<_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt(const FactorGraphType&, const\n+_\bO_\br_\bd_\be_\br_\bi_\bn_\bg&)> _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be;\n+90\n+_\b9_\b2 typedef boost::optional _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx;\n+93\n+_\b9_\b5 typedef boost::optional _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be;\n+96\n+117 boost::shared_ptr _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n+118 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType = boost::none,\n+119 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+120 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+121\n+136 boost::shared_ptr _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n+137 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+138 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+139 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n 140\n-144\n-145 void addRoot(const boost::shared_ptr& cluster) {\n-146 _\br_\bo_\bo_\bt_\bs_\b_.push_back(cluster);\n-147 }\n-148\n-149 void addChildrenAsRoots(const boost::shared_ptr& cluster) {\n-150 for (auto child : cluster->children)\n-151 this->addRoot(child);\n-152 }\n-153\n-154 size_t nrRoots() const {\n-155 return _\br_\bo_\bo_\bt_\bs_\b_.size();\n-156 }\n-157\n-_\b1_\b5_\b9 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>& _\br_\bo_\bo_\bt_\bs() const {\n-160 return _\br_\bo_\bo_\bt_\bs_\b_;\n-161 }\n-162\n-163 const Cluster& operator[](size_t i) const {\n-164 return *(_\br_\bo_\bo_\bt_\bs_\b_.at(i));\n-165 }\n-166\n-168\n-169 protected:\n-172\n-175 _\bT_\bh_\bi_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs& other);\n-176\n-178};\n-179\n-183template \n-_\b1_\b8_\b4class _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be : public _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be {\n-185 public:\n-_\b1_\b8_\b6 typedef BAYESTREE _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-_\b1_\b8_\b7 typedef GRAPH _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n-_\b1_\b8_\b8 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b> _\bT_\bh_\bi_\bs;\n-_\b1_\b8_\b9 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-190\n-_\b1_\b9_\b1 typedef typename BAYESTREE::ConditionalType _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-192 typedef boost::shared_ptr\n-_\b1_\b9_\b3 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-194\n-_\b1_\b9_\b5 typedef typename GRAPH::Eliminate _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be;\n-_\b1_\b9_\b6 typedef typename GRAPH::FactorType _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n-_\b1_\b9_\b7 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n-198\n-199 protected:\n-200 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b> remainingFactors_;\n-201\n-204\n-_\b2_\b0_\b7 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be(const _\bT_\bh_\bi_\bs& other) : _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be(other) {\n-208 *this = other;\n-209 }\n-210\n-212\n-213 public:\n-216\n-222 std::pair, boost::\n-shared_ptr > _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(\n-223 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function) const;\n-224\n-226\n+157 boost::shared_ptr _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n+158 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType = boost::none,\n+159 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+160 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+161\n+171 boost::shared_ptr _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n+172 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+173 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+174 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+175\n+180 std::pair, boost::\n+shared_ptr >\n+181 _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n+182 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+183 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+184 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+185\n+190 std::pair, boost::\n+shared_ptr >\n+191 _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n+192 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables,\n+193 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+194 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+195\n+200 std::pair, boost::\n+shared_ptr >\n+201 _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n+202 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+203 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+204 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+205\n+210 std::pair, boost::\n+shared_ptr >\n+211 _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n+212 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables,\n+213 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+214 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+215\n+225 boost::shared_ptr _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n+226 boost::variant variables,\n+227 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+228 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n 229\n-_\b2_\b3_\b1 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>& _\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs() const {\n-232 return remainingFactors_;\n-233 }\n-234\n-236\n-237 protected:\n-240\n-243 _\bT_\bh_\bi_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs& other);\n-244\n-_\b2_\b4_\b6 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be() {}\n-247\n-249};\n-250}\n-251\n-252#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh>\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n-Collects factorgraph fragments defined on variable clusters, arranged in a\n-tree.\n+240 boost::shared_ptr _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n+241 boost::variant variables,\n+242 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& marginalizedVariableOrdering,\n+243 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+244 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+245\n+255 boost::shared_ptr _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(\n+256 boost::variant variables,\n+257 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+258 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+259\n+270 boost::shared_ptr _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(\n+271 boost::variant variables,\n+272 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& marginalizedVariableOrdering,\n+273 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+274 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+275\n+277 boost::shared_ptr _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl(\n+278 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables,\n+279 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+280 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const;\n+281\n+282 private:\n+283\n+284 // Access the derived factor graph class\n+285 const FactorGraphType& asDerived() const { return static_cast(*this); }\n+286\n+287 // Access the derived factor graph class\n+288 FactorGraphType& asDerived() { return static_cast(*this);\n+}\n+289\n+290 public:\n+291 #ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+293 boost::shared_ptr GTSAM_DEPRECATED _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n+294 const Ordering& ordering,\n+295 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n+296 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex,\n+297 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType) const {\n+298 return _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(ordering, function, variableIndex);\n+299 }\n+300\n+302 boost::shared_ptr GTSAM_DEPRECATED _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(\n+303 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n+304 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none,\n+305 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType = boost::none) const {\n+306 return _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl(orderingType, function, variableIndex);\n+307 }\n+308\n+310 boost::shared_ptr GTSAM_DEPRECATED _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n+311 const Ordering& ordering,\n+312 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n+313 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex,\n+314 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType) const {\n+315 return _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(ordering, function, variableIndex);\n+316 }\n+317\n+319 boost::shared_ptr GTSAM_DEPRECATED _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(\n+320 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function,\n+321 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none,\n+322 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType = boost::none) const {\n+323 return _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl(orderingType, function, variableIndex);\n+324 }\n+325\n+327 boost::shared_ptr GTSAM_DEPRECATED\n+_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n+328 boost::variant variables,\n+329 boost::none_t,\n+330 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+331 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const {\n+332 return _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(variables, function, variableIndex);\n+333 }\n+334\n+336 boost::shared_ptr GTSAM_DEPRECATED\n+_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(\n+337 boost::variant variables,\n+338 boost::none_t,\n+339 const _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& function = EliminationTraitsType::DefaultEliminate,\n+340 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx variableIndex = boost::none) const {\n+341 return _\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be(variables, function, variableIndex);\n+342 }\n+343 #endif\n+344 };\n+345\n+346}\n _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n Variable ordering for the elimination algorithm.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n-A cluster-tree that eliminates to a Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-EliminatableClusterTree< BAYESTREE, GRAPH > This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:188\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n-EliminatableClusterTree()\n-Default constructor to be used in derived classes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:246\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n-BAYESTREE::ConditionalType ConditionalType\n-The type of conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:191\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-This & operator=(const This &other)\n-Assignment operator - makes a deep copy of the tree structure, but only\n-pointers to factors are copie...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:231\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n+Traits class for eliminateable factor graphs, specifies the types that result\n+from elimination,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+EliminateableFactorGraph is a base class for factor graphs that contains\n+elimination algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+boost::shared_ptr< BayesTreeType > marginalMultifrontalBayesTree(boost::\n+variant< const Ordering &, const KeyVector & > variables, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex\n+variableIndex=boost::none) const\n+Compute the marginal of the requested variables and return the result as a\n+Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:300\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+EliminationTraitsType::JunctionTreeType JunctionTreeType\n+Junction tree type that can do multifrontal elimination of this graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:82\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl\n+boost::shared_ptr< FactorGraphType > marginal(const KeyVector &variables, const\n+Eliminate &function=EliminationTraitsType::DefaultEliminate,\n+OptionalVariableIndex variableIndex=boost::none) const\n+Compute the marginal factor graph of the requested variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:367\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+std::function< EliminationResult(const FactorGraphType &, const Ordering &)>\n+Eliminate\n+The function type that does a single dense elimination step on a subgraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+EliminationTraitsType::BayesTreeType BayesTreeType\n+Bayes tree type produced by multifrontal elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:79\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n+EliminationTraitsType::BayesNetType BayesNetType\n+Bayes net type produced by sequential elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bR_\be_\bs_\bu_\bl_\bt\n+std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< _FactorType\n+> > EliminationResult\n+The pair of conditional and remaining factor produced by a single dense\n+elimination step on a subgrap...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl\n+boost::shared_ptr< BayesNetType > eliminateSequential(OptionalOrderingType\n+orderingType=boost::none, const Eliminate &function=EliminationTraitsType::\n+DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const\n+Do sequential elimination of all variables to produce a Bayes net.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl\n+boost::shared_ptr< BayesTreeType > eliminateMultifrontal(OptionalOrderingType\n+orderingType=boost::none, const Eliminate &function=EliminationTraitsType::\n+DefaultEliminate, OptionalVariableIndex variableIndex=boost::none) const\n+Do multifrontal elimination of all variables to produce a Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n+EliminationTraitsType::ConditionalType ConditionalType\n+Conditional type stored in the Bayes net produced by elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n+EliminationTraitsType::EliminationTreeType EliminationTreeType\n+Elimination tree type that can do sequential elimination of this graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+boost::optional< const VariableIndex & > OptionalVariableIndex\n+Typedef for an optional variable index as an argument to elimination functions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bS_\be_\bq_\bu_\be_\bn_\bt_\bi_\ba_\bl\n+std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr<\n+FactorGraphType > > eliminatePartialSequential(const Ordering &ordering, const\n+Eliminate &function=EliminationTraitsType::DefaultEliminate,\n+OptionalVariableIndex variableIndex=boost::none) const\n+Do sequential elimination of some variables, in ordering provided, to produce a\n+Bayes net and a remai...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bm_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+boost::shared_ptr< BayesNetType > marginalMultifrontalBayesNet(boost::variant<\n+const Ordering &, const KeyVector & > variables, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate, OptionalVariableIndex\n+variableIndex=boost::none) const\n+Compute the marginal of the requested variables and return the result as a\n+Bayes net.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:233\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\ba_\br_\bt_\bi_\ba_\bl_\bM_\bu_\bl_\bt_\bi_\bf_\br_\bo_\bn_\bt_\ba_\bl\n std::pair< boost::shared_ptr< BayesTreeType >, boost::shared_ptr<\n-FactorGraphType > > eliminate(const Eliminate &function) const\n-Eliminate the factors to a Bayes tree and remaining factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:245\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-boost::shared_ptr< ConditionalType > sharedConditional\n-Shared pointer to a conditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:193\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< FactorType > sharedFactor\n-Shared pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:197\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-const FastVector< sharedFactor > & remainingFactors() const\n-Return the remaining factors that are not pulled into elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:231\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n-EliminatableClusterTree(const This &other)\n-Copy constructor - makes a deep copy of the tree structure, but only pointers\n-to factors are copied,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-BAYESTREE BayesTreeType\n-The BayesTree type produced by elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n-GRAPH::FactorType FactorType\n-The type of factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:196\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n-GRAPH FactorGraphType\n-The factor graph type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:187\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\ba_\bb_\bl_\be_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-GRAPH::Eliminate Eliminate\n-Typedef for an eliminate subroutine.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n-A cluster-tree is associated with a factor graph and is defined as in Koller-\n-Friedman: each node k re...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:25\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n-This & operator=(const This &other)\n-Assignment operator - makes a deep copy of the tree structure, but only\n-pointers to factors are copie...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-ClusterTree< GRAPH > This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs_\b_\n-FastVector< sharedNode > roots_\n-concept check\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:116\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n-GRAPH::FactorType FactorType\n-The type of factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n-GRAPH FactorGraphType\n-The factor graph type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-Print the cluster tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-boost::shared_ptr< FactorType > sharedFactor\n-Shared pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs\n-const FastVector< sharedNode > & roots() const\n-Return the set of roots (one for a tree, multiple for a forest)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n-ClusterTree(const This &other)\n-Copy constructor - makes a deep copy of the tree structure, but only pointers\n-to factors are copied,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:123\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be\n-ClusterTree()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:132\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bu_\bs_\bt_\be_\br\n-boost::shared_ptr< Cluster > sharedCluster\n-Shared pointer to Cluster.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n-A Cluster is just a collection of factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br\n-Cluster(Key key, const CONTAINER &factorsToAdd)\n-Construct from factors associated with a single key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n-Children children\n-sub-trees\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const\n-print this node\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:26\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bo_\br_\bd_\be_\br_\be_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by_\bs\n-Keys orderedFrontalKeys\n-Frontal keys of this node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn\n-void mergeChildren(const std::vector< bool > &merge)\n-Merge all children for which bit is set into this node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:56\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bm_\be_\br_\bg_\be\n-void merge(const boost::shared_ptr< Cluster > &cluster)\n-Merge in given cluster.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\bO_\bf_\bC_\bh_\bi_\bl_\bd_\br_\be_\bn\n-std::vector< size_t > nrFrontalsOfChildren() const\n-Return a vector with nrFrontal keys for each child.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree-inst.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs\n-FactorGraphType factors\n-Factors associated with this node.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\ba_\bd_\bd_\bC_\bh_\bi_\bl_\bd\n-void addChild(const boost::shared_ptr< Cluster > &cluster)\n-Add a child cluster.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b:_\b:_\bC_\bl_\bu_\bs_\bt_\be_\br_\b:_\b:_\ba_\bd_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs\n-void addFactors(Key key, const CONTAINER &factorsToAdd)\n-Add factors associated with a single key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ClusterTree.h:64\n+FactorGraphType > > eliminatePartialMultifrontal(const Ordering &ordering,\n+const Eliminate &function=EliminationTraitsType::DefaultEliminate,\n+OptionalVariableIndex variableIndex=boost::none) const\n+Do multifrontal elimination of some variables, in ordering provided, to produce\n+a Bayes tree and a re...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph-inst.h:193\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\bT_\by_\bp_\be\n+EliminationTraits< FactorGraphType > EliminationTraitsType\n+Typedef to the specific EliminationTraits for this graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be\n+boost::optional< Ordering::OrderingType > OptionalOrderingType\n+Typedef for an optional ordering type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:95\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bC_\bl_\bu_\bs_\bt_\be_\br_\bT_\br_\be_\be_\b._\bh\n+ * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00611.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00263.html", "comments": ["Files 96% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableIndex-inl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/AlgebraicDecisionTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
VariableIndex-inl.h File Reference
\n+
AlgebraicDecisionTree.cpp File Reference
\n
\n
\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n-
Date
March 26, 2013
\n+
Date
Feb 20, 2022
\n+
Author
Mike Sheffler
\n+
\n+Duy-Nguyen Ta
\n+
\n+Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-VariableIndex-inl.h File Reference\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+AlgebraicDecisionTree.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Author\n- Richard Roberts\n Date\n- March 26, 2013\n+ Feb 20, 2022\n+ Author\n+ Mike Sheffler\n+ Duy-Nguyen Ta\n+ Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n+ * _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00632_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01340_source.html", "comments": ["Files 93% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/MetisIndex-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/KarcherMeanFactor-inl.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
MetisIndex-inl.h
\n+
KarcherMeanFactor-inl.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n+
12/*
\n+
13 * @file KarcherMeanFactor.cpp
\n+
14 * @author Frank Dellaert
\n+
15 * @date March 2019
\n+
16 */
\n+
17
\n
18#pragma once
\n
19
\n-
20#include <map>
\n-
21#include <vector>
\n-
22
\n-
23namespace gtsam {
\n-
24
\n-
25/* ************************************************************************* */
\n-
26template<class FACTORGRAPH>
\n-
\n-
27void MetisIndex::augment(const FACTORGRAPH& factors) {
\n-
28 std::map<int32_t, std::set<int32_t> > iAdjMap; // Stores a set of keys that are adjacent to key x, with adjMap.first
\n-
29 std::map<int32_t, std::set<int32_t> >::iterator iAdjMapIt;
\n-
30 std::set<Key> keySet;
\n-
31
\n-
32 /* ********** Convert to CSR format ********** */
\n-
33 // Assuming that vertex numbering starts from 0 (C style),
\n-
34 // then the adjacency list of vertex i is stored in array adjncy
\n-
35 // starting at index xadj[i] and ending at(but not including)
\n-
36 // index xadj[i + 1](i.e., adjncy[xadj[i]] through
\n-
37 // and including adjncy[xadj[i + 1] - 1]).
\n-
38 int32_t keyCounter = 0;
\n-
39
\n-
40 // First: Record a copy of each key inside the factorgraph and create a
\n-
41 // key to integer mapping. This is referenced during the adjaceny step
\n-
42 for (size_t i = 0; i < factors.size(); i++) {
\n-
43 if (factors[i]) {
\n-
44 for(const Key& key: *factors[i]) {
\n-
45 keySet.insert(keySet.end(), key); // Keep a track of all unique keys
\n-
46 if (intKeyBMap_.left.find(key) == intKeyBMap_.left.end()) {
\n-
47 intKeyBMap_.insert(bm_type::value_type(key, keyCounter));
\n-
48 keyCounter++;
\n-
49 }
\n-
50 }
\n-
51 }
\n-
52 }
\n-
53
\n-
54 // Create an adjacency mapping that stores the set of all adjacent keys for every key
\n-
55 for (size_t i = 0; i < factors.size(); i++) {
\n-
56 if (factors[i]) {
\n-
57 for(const Key& k1: *factors[i])
\n-
58 for(const Key& k2: *factors[i])
\n-
59 if (k1 != k2) {
\n-
60 // Store both in Key and int32_t format
\n-
61 int i = intKeyBMap_.left.at(k1);
\n-
62 int j = intKeyBMap_.left.at(k2);
\n-
63 iAdjMap[i].insert(iAdjMap[i].end(), j);
\n-
64 }
\n-
65 }
\n+\n+\n+
22#include <gtsam/slam/KarcherMeanFactor.h>
\n+
23
\n+
24using namespace std;
\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
28template <class T, class ALLOC>
\n+
29T FindKarcherMeanImpl(const vector<T, ALLOC>& rotations) {
\n+
30 // Cost function C(R) = \\sum PriorFactor(R_i)::error(R)
\n+
31 // No closed form solution.
\n+
32 NonlinearFactorGraph graph;
\n+
33 static const Key kKey(0);
\n+
34 for (const auto& R : rotations) {
\n+
35 graph.addPrior<T>(kKey, R);
\n+
36 }
\n+
37 Values initial;
\n+
38 initial.insert<T>(kKey, T());
\n+
39 auto result = GaussNewtonOptimizer(graph, initial).optimize();
\n+
40 return result.at<T>(kKey);
\n+
41}
\n+
42
\n+
43template <class T>
\n+
44T FindKarcherMean(const std::vector<T>& rotations) {
\n+
45 return FindKarcherMeanImpl(rotations);
\n+
46}
\n+
47
\n+
48template <class T>
\n+
\n+
49T FindKarcherMean(const std::vector<T, Eigen::aligned_allocator<T>>& rotations) {
\n+
50 return FindKarcherMeanImpl(rotations);
\n+
51}
\n+
\n+
52
\n+
53template <class T>
\n+
54T FindKarcherMean(std::initializer_list<T>&& rotations) {
\n+
55 return FindKarcherMeanImpl(std::vector<T, Eigen::aligned_allocator<T> >(rotations));
\n+
56}
\n+
57
\n+
58template <class T>
\n+
59template <typename CONTAINER>
\n+
\n+
60KarcherMeanFactor<T>::KarcherMeanFactor(const CONTAINER &keys, int d,
\n+
61 boost::optional<double> beta)
\n+
62 : NonlinearFactor(keys), d_(static_cast<size_t>(d)) {
\n+
63 if (d <= 0) {
\n+
64 throw std::invalid_argument(
\n+
65 "KarcherMeanFactor needs dimension for dynamic types.");
\n
66 }
\n-
67
\n-
68 // Number of keys referenced in this factor graph
\n-
69 nKeys_ = keySet.size();
\n-
70
\n-
71 xadj_.push_back(0); // Always set the first index to zero
\n-
72 for (iAdjMapIt = iAdjMap.begin(); iAdjMapIt != iAdjMap.end(); ++iAdjMapIt) {
\n-
73 std::vector<int32_t> temp;
\n-
74 // Copy from the FastSet into a temporary vector
\n-
75 std::copy(iAdjMapIt->second.begin(), iAdjMapIt->second.end(),
\n-
76 std::back_inserter(temp));
\n-
77 // Insert each index's set in order by appending them to the end of adj_
\n-
78 adj_.insert(adj_.end(), temp.begin(), temp.end());
\n-
79 //adj_.push_back(temp);
\n-
80 xadj_.push_back((int32_t) adj_.size());
\n-
81 }
\n-
82}
\n-
\n-
83
\n-
84} // \\ gtsam
\n+
67 // Create the constant Jacobian made of d*d identity matrices,
\n+
68 // where d is the dimensionality of the manifold.
\n+
69 Matrix A = Matrix::Identity(d, d);
\n+
70 if (beta) A *= std::sqrt(*beta);
\n+
71 std::map<Key, Matrix> terms;
\n+
72 for (Key j : keys) {
\n+
73 terms[j] = A;
\n+
74 }
\n+
75 whitenedJacobian_ =
\n+
76 boost::make_shared<JacobianFactor>(terms, Vector::Zero(d));
\n+
77}
\n+
\n+
78} // namespace gtsam
\n+\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
void augment(const FACTORGRAPH &factors)
Augment the variable index with new factors.
Definition MetisIndex-inl.h:27
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
KarcherMeanFactor(const CONTAINER &keys, int d=D, boost::optional< double > beta=boost::none)
Construct from given keys.
Definition KarcherMeanFactor-inl.h:60
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,105 +1,117 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-MetisIndex-inl.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+KarcherMeanFactor-inl.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n+12/*\n+13 * @file KarcherMeanFactor.cpp\n+14 * @author Frank Dellaert\n+15 * @date March 2019\n+16 */\n+17\n 18#pragma once\n 19\n-20#include \n-21#include \n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-25/* *************************************************************************\n-*/\n-26template\n-_\b2_\b7void _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt(const FACTORGRAPH& factors) {\n-28 std::map > iAdjMap; // Stores a set of keys that\n-are adjacent to key x, with adjMap.first\n-29 std::map >::iterator iAdjMapIt;\n-30 std::set keySet;\n-31\n-32 /* ********** Convert to CSR format ********** */\n-33 // Assuming that vertex numbering starts from 0 (C style),\n-34 // then the adjacency list of vertex i is stored in array adjncy\n-35 // starting at index xadj[i] and ending at(but not including)\n-36 // index xadj[i + 1](i.e., adjncy[xadj[i]] through\n-37 // and including adjncy[xadj[i + 1] - 1]).\n-38 int32_t keyCounter = 0;\n-39\n-40 // First: Record a copy of each key inside the factorgraph and create a\n-41 // key to integer mapping. This is referenced during the adjaceny step\n-42 for (size_t i = 0; i < factors.size(); i++) {\n-43 if (factors[i]) {\n-44 for(const _\bK_\be_\by& key: *factors[i]) {\n-45 keySet.insert(keySet.end(), key); // Keep a track of all unique keys\n-46 if (intKeyBMap_.left.find(key) == intKeyBMap_.left.end()) {\n-47 intKeyBMap_.insert(bm_type::value_type(key, keyCounter));\n-48 keyCounter++;\n-49 }\n-50 }\n-51 }\n-52 }\n-53\n-54 // Create an adjacency mapping that stores the set of all adjacent keys for\n-every key\n-55 for (size_t i = 0; i < factors.size(); i++) {\n-56 if (factors[i]) {\n-57 for(const _\bK_\be_\by& k1: *factors[i])\n-58 for(const _\bK_\be_\by& k2: *factors[i])\n-59 if (k1 != k2) {\n-60 // Store both in Key and int32_t format\n-61 int i = intKeyBMap_.left.at(k1);\n-62 int j = intKeyBMap_.left.at(k2);\n-63 iAdjMap[i].insert(iAdjMap[i].end(), j);\n-64 }\n-65 }\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+22#include \n+23\n+24using namespace std;\n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28template \n+29T FindKarcherMeanImpl(const vector& rotations) {\n+30 // Cost function C(R) = \\sum PriorFactor(R_i)::error(R)\n+31 // No closed form solution.\n+32 NonlinearFactorGraph graph;\n+33 static const _\bK_\be_\by kKey(0);\n+34 for (const auto& R : rotations) {\n+35 graph.addPrior(kKey, R);\n+36 }\n+37 _\bV_\ba_\bl_\bu_\be_\bs initial;\n+38 initial.insert(kKey, T());\n+39 auto result = GaussNewtonOptimizer(graph, initial).optimize();\n+40 return result.at(kKey);\n+41}\n+42\n+43template \n+44T FindKarcherMean(const std::vector& rotations) {\n+45 return FindKarcherMeanImpl(rotations);\n+46}\n+47\n+48template \n+_\b4_\b9T FindKarcherMean(const std::vector>&\n+rotations) {\n+50 return FindKarcherMeanImpl(rotations);\n+51}\n+52\n+53template \n+54T FindKarcherMean(std::initializer_list&& rotations) {\n+55 return FindKarcherMeanImpl(std::vector >\n+(rotations));\n+56}\n+57\n+58template \n+59template \n+_\b6_\b0_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bT_\b>_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER &keys, int d,\n+61 boost::optional beta)\n+62 : _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br(keys), d_(static_cast(d)) {\n+63 if (d <= 0) {\n+64 throw std::invalid_argument(\n+65 \"KarcherMeanFactor needs dimension for dynamic types.\");\n 66 }\n-67\n-68 // Number of keys referenced in this factor graph\n-69 nKeys_ = keySet.size();\n-70\n-71 xadj_.push_back(0); // Always set the first index to zero\n-72 for (iAdjMapIt = iAdjMap.begin(); iAdjMapIt != iAdjMap.end(); ++iAdjMapIt) {\n-73 std::vector temp;\n-74 // Copy from the FastSet into a temporary vector\n-75 std::copy(iAdjMapIt->second.begin(), iAdjMapIt->second.end(),\n-76 std::back_inserter(temp));\n-77 // Insert each index's set in order by appending them to the end of adj_\n-78 adj_.insert(adj_.end(), temp.begin(), temp.end());\n-79 //adj_.push_back(temp);\n-80 xadj_.push_back((int32_t) adj_.size());\n-81 }\n-82}\n-83\n-84} // \\ gtsam\n+67 // Create the constant Jacobian made of d*d identity matrices,\n+68 // where d is the dimensionality of the manifold.\n+69 Matrix A = Matrix::Identity(d, d);\n+70 if (beta) A *= std::sqrt(*beta);\n+71 std::map terms;\n+72 for (_\bK_\be_\by j : _\bk_\be_\by_\bs) {\n+73 terms[j] = A;\n+74 }\n+75 whitenedJacobian_ =\n+76 boost::make_shared(terms, Vector::Zero(d));\n+77}\n+78} // namespace gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt\n-void augment(const FACTORGRAPH &factors)\n-Augment the variable index with new factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn MetisIndex-inl.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+KarcherMeanFactor(const CONTAINER &keys, int d=D, boost::optional< double >\n+beta=boost::none)\n+Construct from given keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor-inl.h:60\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bM_\be_\bt_\bi_\bs_\bI_\bn_\bd_\be_\bx_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bs_\bl_\ba_\bm\n+ * K\bKa\bar\brc\bch\bhe\ber\brM\bMe\bea\ban\bnF\bFa\bac\bct\bto\bor\br-\b-i\bin\bnl\bl.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00644.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00863.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM-inst.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesNet.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
ISAM-inst.h File Reference
\n+
GaussianBayesNet.cpp File Reference
\n
\n
\n \n-

Incremental update functionality (iSAM) for BayesTree. \n+

Chordal Bayes Net, the result of eliminating a factor graph. \n More...

\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Incremental update functionality (iSAM) for BayesTree.

\n-
Author
Michael Kaess
\n+

Chordal Bayes Net, the result of eliminating a factor graph.

\n+
Author
Frank Dellaert, Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ISAM-inst.h File Reference\n-Incremental update functionality (iSAM) for BayesTree. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+GaussianBayesNet.cpp File Reference\n+Chordal Bayes Net, the result of eliminating a factor graph. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Incremental update functionality (iSAM) for BayesTree.\n+Chordal Bayes Net, the result of eliminating a factor graph.\n Author\n- Michael Kaess\n+ Frank Dellaert, Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bI_\bS_\bA_\bM_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00671_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00992_source.html", "comments": ["Files 91% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/VariableSlots.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/BarometricFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
VariableSlots.h
\n+
BarometricFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-
22#include <gtsam/base/FastMap.h>
\n-\n-
24#include <gtsam/base/timing.h>
\n-
25#include <gtsam/base/Testable.h>
\n-
26
\n-
27#include <boost/tuple/tuple.hpp>
\n-
28
\n-
29#include <iostream>
\n-
30#include <string>
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
\n-
52class VariableSlots : public FastMap<Key, FastVector<size_t> > {
\n-
53
\n-
54public:
\n-
55
\n-\n-
57 GTSAM_EXPORT static const size_t Empty;
\n-
58
\n-
61
\n-
67 template<class FG>
\n-
68 VariableSlots(const FG& factorGraph);
\n-
69
\n-
71
\n-
74
\n-
76 GTSAM_EXPORT void print(const std::string& str = "VariableSlots: ") const;
\n+
18#pragma once
\n+
19
\n+\n+\n+\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
\n+
34class GTSAM_EXPORT BarometricFactor : public NoiseModelFactorN<Pose3, double> {
\n+
35 private:
\n+\n+
37
\n+
38 double nT_;
\n+
39
\n+
40 public:
\n+
42 typedef boost::shared_ptr<BarometricFactor> shared_ptr;
\n+
43
\n+\n+
46
\n+
48 BarometricFactor() : nT_(0) {}
\n+
49
\n+
50 ~BarometricFactor() override {}
\n+
51
\n+
\n+
59 BarometricFactor(Key key, Key baroKey, const double& baroIn,
\n+
60 const SharedNoiseModel& model)
\n+
61 : Base(model, key, baroKey), nT_(heightOut(baroIn)) {}
\n+
\n+
62
\n+
\n+
64 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
65 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
66 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n+
67 }
\n+
\n+
68
\n+
70 void print(
\n+
71 const std::string& s = "",
\n+
72 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n+
73
\n+
75 bool equals(const NonlinearFactor& expected,
\n+
76 double tol = 1e-9) const override;
\n
77
\n-
79 GTSAM_EXPORT bool equals(const VariableSlots& rhs, double tol = 0.0) const;
\n-
80
\n-
82};
\n-
\n+
79 Vector evaluateError(
\n+
80 const Pose3& p, const double& b,
\n+
81 boost::optional<Matrix&> H = boost::none,
\n+
82 boost::optional<Matrix&> H2 = boost::none) const override;
\n
83
\n-
85template<> struct traits<VariableSlots> : public Testable<VariableSlots> {};
\n-
86
\n-
87/* ************************************************************************* */
\n-
88template<class FG>
\n-
\n-
89VariableSlots::VariableSlots(const FG& factorGraph)
\n-
90{
\n-
91 gttic(VariableSlots_constructor);
\n-
92 static const bool debug = false;
\n-
93
\n-
94 // Compute a mapping (called variableSlots) *from* each involved
\n-
95 // variable that will be in the new joint factor *to* the slot in each
\n-
96 // removed factor in which that variable appears. For each variable,
\n-
97 // this is stored as a vector of slot numbers, stored in order of the
\n-
98 // removed factors. The slot number is the max integer value if the
\n-
99 // factor does not involve that variable.
\n-
100 size_t jointFactorPos = 0;
\n-
101 for(const typename FG::sharedFactor& factor: factorGraph) {
\n-
102 if (!factor) {
\n-
103 continue;
\n-
104 }
\n-
105 size_t factorVarSlot = 0;
\n-
106 for(const Key involvedVariable: *factor) {
\n-
107 // Set the slot in this factor for this variable. If the
\n-
108 // variable was not already discovered, create an array for it
\n-
109 // that we'll fill with the slot indices for each factor that
\n-
110 // we're combining. Initially we put the max integer value in
\n-
111 // the array entry for each factor that will indicate the factor
\n-
112 // does not involve the variable.
\n-
113 iterator thisVarSlots; bool inserted;
\n-
114 boost::tie(thisVarSlots, inserted) = this->insert(std::make_pair(involvedVariable, FastVector<size_t>()));
\n-
115 if(inserted)
\n-
116 thisVarSlots->second.resize(factorGraph.nrFactors(), Empty);
\n-
117 thisVarSlots->second[jointFactorPos] = factorVarSlot;
\n-
118 if(debug) std::cout << " var " << involvedVariable << " rowblock " << jointFactorPos << " comes from factor's slot " << factorVarSlot << std::endl;
\n-
119 ++ factorVarSlot;
\n-
120 }
\n-
121 ++ jointFactorPos;
\n-
122 }
\n-
123}
\n-
\n-
124
\n-
125}
\n-
Concept check for values that can be used in unit tests.
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
Timing utilities.
\n-
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n-
Included from all GTSAM files.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
84 inline const double& measurementIn() const { return nT_; }
\n+
85
\n+
86 inline double heightOut(double n) const {
\n+
87 // From https://www.grc.nasa.gov/www/k-12/airplane/atmosmet.html
\n+
88 return (std::pow(n / 101.29, 1. / 5.256) * 288.08 - 273.1 - 15.04) /
\n+
89 -0.00649;
\n+
90 };
\n+
91
\n+
92 inline double baroOut(const double& meters) {
\n+
93 double temp = 15.04 - 0.00649 * meters;
\n+
94 return 101.29 * std::pow(((temp + 273.1) / 288.08), 5.256);
\n+
95 };
\n+
96
\n+
97 private:
\n+
99 friend class boost::serialization::access;
\n+
100 template <class ARCHIVE>
\n+
101 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
102 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n+
103 ar& boost::serialization::make_nvp(
\n+
104 "NoiseModelFactor1",
\n+
105 boost::serialization::base_object<Base>(*this));
\n+
106 ar& BOOST_SERIALIZATION_NVP(nT_);
\n+
107 }
\n+
108};
\n+
\n+
109
\n+
110} // namespace gtsam
\n+
3D Pose
\n+
Navigation state composing of attitude, position, and velocity.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A combined factor is assembled as one block of rows for each component factor.
Definition VariableSlots.h:52
\n-
GTSAM_EXPORT void print(const std::string &str="VariableSlots: ") const
print
Definition VariableSlots.cpp:29
\n-
VariableSlots(const FG &factorGraph)
Constructor from a set of factors to be combined.
Definition VariableSlots.h:89
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Prior on height in a cartesian frame.
Definition BarometricFactor.h:34
\n+
BarometricFactor This
Typedef to this class.
Definition BarometricFactor.h:45
\n+
BarometricFactor(Key key, Key baroKey, const double &baroIn, const SharedNoiseModel &model)
Constructor from a measurement of pressure in KPa.
Definition BarometricFactor.h:59
\n+
boost::shared_ptr< BarometricFactor > shared_ptr
shorthand for a smart pointer to a factor
Definition BarometricFactor.h:42
\n+
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition BarometricFactor.h:64
\n+
BarometricFactor()
default constructor - only use for serialization
Definition BarometricFactor.h:48
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,149 +1,157 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VariableSlots.h\n+BarometricFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-26\n-27#include \n-28\n-29#include \n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-_\b5_\b2class _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs : public _\bF_\ba_\bs_\bt_\bM_\ba_\bp > {\n-53\n-54public:\n-55\n-56 typedef _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b> > _\bB_\ba_\bs_\be;\n-57 GTSAM_EXPORT static const size_t Empty;\n-58\n-61\n-67 template\n-68 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs(const FG& factorGraph);\n-69\n-71\n-74\n-76 GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"VariableSlots: \") const;\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+_\b3_\b4class GTSAM_EXPORT _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+{\n+35 private:\n+36 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b,_\b _\bd_\bo_\bu_\bb_\bl_\be_\b> _\bB_\ba_\bs_\be;\n+37\n+38 double nT_;\n+39\n+40 public:\n+_\b4_\b2 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+43\n+_\b4_\b5 typedef _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+46\n+_\b4_\b8 _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br() : nT_(0) {}\n+49\n+50 _\b~_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+51\n+_\b5_\b9 _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, _\bK_\be_\by baroKey, const double& baroIn,\n+60 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model)\n+61 : _\bB_\ba_\bs_\be(model, key, baroKey), nT_(heightOut(baroIn)) {}\n+62\n+_\b6_\b4 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+65 return boost::static_pointer_cast(\n+66 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n+67 }\n+68\n+70 void _\bp_\br_\bi_\bn_\bt(\n+71 const std::string& s = \"\",\n+72 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n+73\n+75 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected,\n+76 double tol = 1e-9) const override;\n 77\n-79 GTSAM_EXPORT bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs& rhs, double tol = 0.0) const;\n-80\n-82};\n+79 Vector evaluateError(\n+80 const _\bP_\bo_\bs_\be_\b3& p, const double& b,\n+81 boost::optional H = boost::none,\n+82 boost::optional H2 = boost::none) const override;\n 83\n-_\b8_\b5template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-86\n-87/* *************************************************************************\n-*/\n-88template\n-_\b8_\b9_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs(const FG& factorGraph)\n-90{\n-91 gttic(VariableSlots_constructor);\n-92 static const bool debug = false;\n-93\n-94 // Compute a mapping (called variableSlots) *from* each involved\n-95 // variable that will be in the new joint factor *to* the slot in each\n-96 // removed factor in which that variable appears. For each variable,\n-97 // this is stored as a vector of slot numbers, stored in order of the\n-98 // removed factors. The slot number is the max integer value if the\n-99 // factor does not involve that variable.\n-100 size_t jointFactorPos = 0;\n-101 for(const typename FG::sharedFactor& factor: factorGraph) {\n-102 if (!factor) {\n-103 continue;\n-104 }\n-105 size_t factorVarSlot = 0;\n-106 for(const _\bK_\be_\by involvedVariable: *factor) {\n-107 // Set the slot in this factor for this variable. If the\n-108 // variable was not already discovered, create an array for it\n-109 // that we'll fill with the slot indices for each factor that\n-110 // we're combining. Initially we put the max integer value in\n-111 // the array entry for each factor that will indicate the factor\n-112 // does not involve the variable.\n-113 iterator thisVarSlots; bool inserted;\n-114 boost::tie(thisVarSlots, inserted) = this->insert(std::make_pair\n-(involvedVariable, _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bi_\bz_\be_\b__\bt_\b>()));\n-115 if(inserted)\n-116 thisVarSlots->second.resize(factorGraph.nrFactors(), Empty);\n-117 thisVarSlots->second[jointFactorPos] = factorVarSlot;\n-118 if(debug) std::cout << \" var \" << involvedVariable << \" rowblock \" <<\n-jointFactorPos << \" comes from factor's slot \" << factorVarSlot << std::endl;\n-119 ++ factorVarSlot;\n-120 }\n-121 ++ jointFactorPos;\n-122 }\n-123}\n-124\n-125}\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\n-_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n-A thin wrapper around std::map that uses boost's fast_pool_allocator.\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+84 inline const double& measurementIn() const { return nT_; }\n+85\n+86 inline double heightOut(double n) const {\n+87 // From https://www.grc.nasa.gov/www/k-12/airplane/atmosmet.html\n+88 return (std::pow(n / 101.29, 1. / 5.256) * 288.08 - 273.1 - 15.04) /\n+89 -0.00649;\n+90 };\n+91\n+92 inline double baroOut(const double& meters) {\n+93 double temp = 15.04 - 0.00649 * meters;\n+94 return 101.29 * std::pow(((temp + 273.1) / 288.08), 5.256);\n+95 };\n+96\n+97 private:\n+_\b9_\b9 friend class boost::serialization::access;\n+100 template \n+101 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+102 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n+compatibility\n+103 ar& boost::serialization::make_nvp(\n+104 \"NoiseModelFactor1\",\n+105 boost::serialization::base_object(*this));\n+106 ar& BOOST_SERIALIZATION_NVP(nT_);\n+107 }\n+108};\n+109\n+110} // namespace gtsam\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n+_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n+Navigation state composing of attitude, position, and velocity.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs\n-A combined factor is assembled as one block of rows for each component factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableSlots.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-GTSAM_EXPORT void print(const std::string &str=\"VariableSlots: \") const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableSlots.cpp:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs\n-VariableSlots(const FG &factorGraph)\n-Constructor from a set of factors to be combined.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableSlots.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+Prior on height in a cartesian frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+BarometricFactor This\n+Typedef to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+BarometricFactor(Key key, Key baroKey, const double &baroIn, const\n+SharedNoiseModel &model)\n+Constructor from a measurement of pressure in KPa.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< BarometricFactor > shared_ptr\n+shorthand for a smart pointer to a factor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+gtsam::NonlinearFactor::shared_ptr clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+BarometricFactor()\n+default constructor - only use for serialization\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b._\bh\n+ * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n+ * _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00680.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00842.html", "comments": ["Files 96% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Conditional.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphPreconditioner.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
Conditional.h File Reference
\n+
SubgraphPreconditioner.h File Reference
\n
\n
\n \n-

Base class for conditional densities. \n-More...

\n-\n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n+\n+\n+\n+\n \n

\n Classes

class  gtsam::Conditional< FACTOR, DERIVEDCONDITIONAL >
struct  gtsam::SubgraphPreconditionerParameters
 
class  gtsam::SubgraphPreconditioner
 Subgraph conditioner class, as explained in the RSS 2010 submission. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Base class for conditional densities.

\n-
Author
Frank Dellaert
\n+
Date
Dec 31, 2009
\n+
Author
Frank Dellaert, Yong-Dian Jian
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Conditional.h File Reference\n-Base class for conditional densities. _\bM_\bo_\br_\be_\b._\b._\b.\n+SubgraphPreconditioner.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\b _\bF_\bA_\bC_\bT_\bO_\bR_\b,_\b _\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n+\u00a0\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br\n+\u00a0 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh conditioner class, as explained in the RSS 2010 submission.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Base class for conditional densities.\n+ Date\n+ Dec 31, 2009\n Author\n- Frank Dellaert\n+ Frank Dellaert, Yong-Dian Jian\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00680_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01379_source.html", "comments": ["Files 87% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Conditional.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Conditional.h
\n+
SymbolicFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18// \\callgraph
\n-
19#pragma once
\n-
20
\n-
21#include <boost/range.hpp>
\n-
22
\n-
23#include <gtsam/inference/Key.h>
\n-
24
\n-
25namespace gtsam {
\n+
18#pragma once
\n+
19
\n+\n+
21#include <gtsam/inference/Key.h>
\n+
22#include <gtsam/base/Testable.h>
\n+
23
\n+
24#include <boost/shared_ptr.hpp>
\n+
25#include <boost/make_shared.hpp>
\n
26
\n-
27 class HybridValues; // forward declaration.
\n+
27#include <utility>
\n
28
\n-
62 template<class FACTOR, class DERIVEDCONDITIONAL>
\n-
\n-\n-
64 {
\n-
65 protected:
\n-\n-
68
\n-
69 private:
\n-\n-
72
\n-
73 public:
\n-
75 typedef boost::iterator_range<typename FACTOR::const_iterator> Frontals;
\n-
76
\n-
78 typedef boost::iterator_range<typename FACTOR::const_iterator> Parents;
\n+
29namespace gtsam {
\n+
30
\n+
31 // Forward declarations
\n+
32 class SymbolicConditional;
\n+
33 class HybridValues;
\n+
34 class Ordering;
\n+
35
\n+
\n+
39 class GTSAM_EXPORT SymbolicFactor : public Factor {
\n+
40
\n+
41 public:
\n+
42
\n+
43 typedef SymbolicFactor This;
\n+
44 typedef Factor Base;
\n+\n+
46
\n+
48 typedef boost::shared_ptr<This> shared_ptr;
\n+
49
\n+
52
\n+\n+
55
\n+
\n+
57 explicit SymbolicFactor(Key j) :
\n+
58 Base(KeyVector{j}) {}
\n+
\n+
59
\n+
\n+\n+
62 Base(KeyVector{j1, j2}) {}
\n+
\n+
63
\n+
\n+
65 SymbolicFactor(Key j1, Key j2, Key j3) :
\n+
66 Base(KeyVector{j1, j2, j3}) {}
\n+
\n+
67
\n+
\n+
69 SymbolicFactor(Key j1, Key j2, Key j3, Key j4) :
\n+
70 Base(KeyVector{j1, j2, j3, j4}) {}
\n+
\n+
71
\n+
\n+
73 SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5) :
\n+
74 Base(KeyVector{j1, j2, j3, j4, j5}) {}
\n+
\n+
75
\n+
\n+
77 SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5, Key j6) :
\n+
78 Base(KeyVector{j1, j2, j3, j4, j5, j6}) {}
\n+
\n
79
\n-
80 protected:
\n-
83
\n-\n-
86
\n-\n+
81 explicit SymbolicFactor(const Factor& factor) : Base(factor.keys()) {}
\n+
82
\n+
83 virtual ~SymbolicFactor() {}
\n+
84
\n+
86 SymbolicFactor::shared_ptr clone() const { return boost::make_shared<This>(*this); }
\n+
87
\n
89
\n-
91
\n-
92 public:
\n-
95
\n-
97 void print(const std::string& s = "Conditional", const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n-
98
\n-
100 bool equals(const This& c, double tol = 1e-9) const;
\n+
92
\n+
93 bool equals(const This& other, double tol = 1e-9) const;
\n+
94
\n+
\n+
96 void print(
\n+
97 const std::string& s = "SymbolicFactor",
\n+
98 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n+
99 Base::print(s, formatter);
\n+
100 }
\n+
\n
101
\n-
103
\n-
106
\n-
107 virtual ~Conditional() {}
\n+
\n+\n+
104 const std::string& s = "SymbolicFactor",
\n+
105 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n+
106 Base::printKeys(s, formatter);
\n+
107 }
\n+
\n
108
\n-
110 size_t nrFrontals() const { return nrFrontals_; }
\n-
111
\n-
113 size_t nrParents() const { return asFactor().size() - nrFrontals_; }
\n-
114
\n-
\n-\n-
117 if(nrFrontals_ > 0)
\n-
118 return asFactor().front();
\n-
119 else
\n-
120 throw std::invalid_argument("Requested Conditional::firstFrontalKey from a conditional with zero frontal keys");
\n-
121 }
\n-
\n-
122
\n-
124 Frontals frontals() const { return boost::make_iterator_range(beginFrontals(), endFrontals()); }
\n-
125
\n-
127 Parents parents() const { return boost::make_iterator_range(beginParents(), endParents()); }
\n-
128
\n-
133 virtual double logProbability(const HybridValues& c) const;
\n-
134
\n-
139 virtual double evaluate(const HybridValues& c) const;
\n-
140
\n-
\n-
142 double operator()(const HybridValues& x) const {
\n-
143 return evaluate(x);
\n-
144 }
\n+
112
\n+
114 template<typename KEYITERATOR>
\n+
\n+
115 static SymbolicFactor FromIterators(KEYITERATOR beginKey, KEYITERATOR endKey) {
\n+
116 return SymbolicFactor(Base::FromIterators(beginKey, endKey));
\n+
117 }
\n+
\n+
118
\n+
120 template<typename KEYITERATOR>
\n+
\n+
121 static SymbolicFactor::shared_ptr FromIteratorsShared(KEYITERATOR beginKey, KEYITERATOR endKey) {
\n+
122 SymbolicFactor::shared_ptr result = boost::make_shared<SymbolicFactor>();
\n+
123 result->keys_.assign(beginKey, endKey);
\n+
124 return result;
\n+
125 }
\n+
\n+
126
\n+
129 template<class CONTAINER>
\n+
\n+
130 static SymbolicFactor FromKeys(const CONTAINER& keys) {
\n+
131 return SymbolicFactor(Base::FromKeys(keys));
\n+
132 }
\n+
\n+
133
\n+
136 template<class CONTAINER>
\n+
\n+
137 static SymbolicFactor::shared_ptr FromKeysShared(const CONTAINER& keys) {
\n+
138 return FromIteratorsShared(keys.begin(), keys.end());
\n+
139 }
\n
\n+
140
\n+
142
\n
145
\n-
150 virtual double logNormalizationConstant() const;
\n-
151
\n-
153 double normalizationConstant() const;
\n-
154
\n-
158
\n-
160 typename FACTOR::const_iterator beginFrontals() const { return asFactor().begin(); }
\n-
161
\n-
163 typename FACTOR::const_iterator endFrontals() const { return asFactor().begin() + nrFrontals_; }
\n+
147 double error(const HybridValues& c) const override;
\n+
148
\n+
151 std::pair<boost::shared_ptr<SymbolicConditional>, boost::shared_ptr<SymbolicFactor> >
\n+
152 eliminate(const Ordering& keys) const;
\n+
153
\n+
155
\n+
156 private:
\n+
158 friend class boost::serialization::access;
\n+
159 template<class ARCHIVE>
\n+
160 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
161 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
162 }
\n+
163 }; // IndexFactor
\n+
\n
164
\n-
166 typename FACTOR::const_iterator beginParents() const { return endFrontals(); }
\n-
167
\n-
169 typename FACTOR::const_iterator endParents() const { return asFactor().end(); }
\n-
170
\n-
172 size_t& nrFrontals() { return nrFrontals_; }
\n-
173
\n-
175 typename FACTOR::iterator beginFrontals() { return asFactor().begin(); }
\n-
176
\n-
178 typename FACTOR::iterator endFrontals() { return asFactor().begin() + nrFrontals_; }
\n-
179
\n-
181 typename FACTOR::iterator beginParents() { return asFactor().begin() + nrFrontals_; }
\n+
165 // Forward declarations
\n+
166 class SymbolicFactorGraph;
\n+
167 class Ordering;
\n+
168
\n+
173 GTSAM_EXPORT std::pair<boost::shared_ptr<SymbolicConditional>, boost::shared_ptr<SymbolicFactor> >
\n+
174 EliminateSymbolic(const SymbolicFactorGraph& factors, const Ordering& keys);
\n+
175
\n+
177 template<>
\n+
\n+
178 struct traits<SymbolicFactor> : public Testable<SymbolicFactor> {
\n+
179 };
\n+
\n+
180
\n+
181} //\\ namespace gtsam
\n
182
\n-
184 typename FACTOR::iterator endParents() { return asFactor().end(); }
\n-
185
\n-
199 template <class VALUES>
\n-
200 static bool CheckInvariants(const DERIVEDCONDITIONAL& conditional,
\n-
201 const VALUES& x);
\n-
202
\n-
204
\n-
205 private:
\n-
206
\n-
209
\n-
210 // Cast to factor type (non-const) (casts down to derived conditional type, then up to factor type)
\n-
211 FACTOR& asFactor() { return static_cast<FACTOR&>(static_cast<DERIVEDCONDITIONAL&>(*this)); }
\n-
212
\n-
213 // Cast to derived type (const) (casts down to derived conditional type, then up to factor type)
\n-
214 const FACTOR& asFactor() const { return static_cast<const FACTOR&>(static_cast<const DERIVEDCONDITIONAL&>(*this)); }
\n-
215
\n-\n-
218 template<class ARCHIVE>
\n-
219 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
220 ar & BOOST_SERIALIZATION_NVP(nrFrontals_);
\n-
221 }
\n-
222
\n-
224
\n-
225 };
\n-
\n-
226
\n-
227} // gtsam
\n-\n+
Concept check for values that can be used in unit tests.
\n+\n+
The base class for all factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > EliminateSymbolic(const SymbolicFactorGraph &factors, const Ordering &keys)
Dense elimination function for symbolic factors.
Definition SymbolicFactor.cpp:36
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
Definition Conditional.h:64
\n-
static bool CheckInvariants(const DERIVEDCONDITIONAL &conditional, const VALUES &x)
Check invariants of this conditional, given the values x.
Definition Conditional-inst.h:77
\n-
size_t nrFrontals_
The first nrFrontal variables are frontal and the rest are parents.
Definition Conditional.h:67
\n-
virtual double logNormalizationConstant() const
All conditional types need to implement a log normalization constant to make it such that error>=0.
Definition Conditional-inst.h:62
\n-
Key firstFrontalKey() const
Convenience function to get the first frontal key.
Definition Conditional.h:116
\n-
FACTOR::const_iterator endFrontals() const
Iterator pointing past the last frontal key.
Definition Conditional.h:163
\n-
FACTOR::iterator endParents()
Mutable iterator pointing past the last parent key.
Definition Conditional.h:184
\n-
FACTOR::iterator endFrontals()
Mutable iterator pointing past the last frontal key.
Definition Conditional.h:178
\n-
virtual double evaluate(const HybridValues &c) const
All conditional types need to implement an evaluate function, that yields a true probability.
Definition Conditional-inst.h:55
\n-
Parents parents() const
return a view of the parent keys
Definition Conditional.h:127
\n-
double operator()(const HybridValues &x) const
Evaluate probability density, sugar.
Definition Conditional.h:142
\n-
boost::iterator_range< typename FACTOR::const_iterator > Parents
View of the separator keys (call parents())
Definition Conditional.h:78
\n-
virtual double logProbability(const HybridValues &c) const
All conditional types need to implement a logProbability function, for which exp(logProbability(x)) =...
Definition Conditional-inst.h:48
\n-
size_t nrFrontals() const
return the number of frontals
Definition Conditional.h:110
\n-
Conditional()
Empty Constructor to make serialization possible.
Definition Conditional.h:85
\n-
Conditional(size_t nrFrontals)
Constructor.
Definition Conditional.h:88
\n-
FACTOR::iterator beginParents()
Mutable iterator pointing to the first parent key.
Definition Conditional.h:181
\n-
size_t & nrFrontals()
Mutable version of nrFrontals.
Definition Conditional.h:172
\n-
FACTOR::iterator beginFrontals()
Mutable iterator pointing to first frontal key.
Definition Conditional.h:175
\n-
boost::iterator_range< typename FACTOR::const_iterator > Frontals
View of the frontal keys (call frontals())
Definition Conditional.h:75
\n-
Frontals frontals() const
return a view of the frontal keys
Definition Conditional.h:124
\n-
friend class boost::serialization::access
Serialization function.
Definition Conditional.h:217
\n-
FACTOR::const_iterator beginFrontals() const
Iterator pointing to first frontal key.
Definition Conditional.h:160
\n-
double normalizationConstant() const
Non-virtual, exponentiate logNormalizationConstant.
Definition Conditional-inst.h:70
\n-
size_t nrParents() const
return the number of parents
Definition Conditional.h:113
\n-
void print(const std::string &s="Conditional", const KeyFormatter &formatter=DefaultKeyFormatter) const
print with optional formatter
Definition Conditional-inst.h:30
\n-
FACTOR::const_iterator endParents() const
Iterator pointing past the last parent key.
Definition Conditional.h:169
\n-
FACTOR::const_iterator beginParents() const
Iterator pointing to the first parent key.
Definition Conditional.h:166
\n+
Definition Factor.h:68
\n+
Definition Ordering.h:34
\n+
SymbolicConditional is a conditional with keys but no probability data, produced by symbolic eliminat...
Definition SymbolicConditional.h:38
\n+
SymbolicFactor represents a symbolic factor that specifies graph topology but is not associated with ...
Definition SymbolicFactor.h:39
\n+
void print(const std::string &s="SymbolicFactor", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition SymbolicFactor.h:96
\n+
SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5, Key j6)
Construct 6-way factor.
Definition SymbolicFactor.h:77
\n+
boost::shared_ptr< This > shared_ptr
Overriding the shared_ptr typedef.
Definition SymbolicFactor.h:48
\n+
static SymbolicFactor FromKeys(const CONTAINER &keys)
Constructor from a collection of keys - compatible with boost assign::list_of and boost assign::cref_...
Definition SymbolicFactor.h:130
\n+
SymbolicFactor(const Factor &factor)
Create symbolic version of any factor.
Definition SymbolicFactor.h:81
\n+
SymbolicFactor(Key j1, Key j2, Key j3, Key j4)
Construct 4-way factor.
Definition SymbolicFactor.h:69
\n+
SymbolicFactor(Key j1, Key j2)
Construct binary factor.
Definition SymbolicFactor.h:61
\n+
static SymbolicFactor FromIterators(KEYITERATOR beginKey, KEYITERATOR endKey)
Constructor from a collection of keys.
Definition SymbolicFactor.h:115
\n+
void printKeys(const std::string &s="SymbolicFactor", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print only keys
Definition SymbolicFactor.h:103
\n+
static SymbolicFactor::shared_ptr FromKeysShared(const CONTAINER &keys)
Constructor from a collection of keys - compatible with boost assign::list_of and boost assign::cref_...
Definition SymbolicFactor.h:137
\n+
SymbolicFactor(Key j1, Key j2, Key j3)
Construct ternary factor.
Definition SymbolicFactor.h:65
\n+
SymbolicFactor(Key j)
Construct unary factor.
Definition SymbolicFactor.h:57
\n+
SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5)
Construct 5-way factor.
Definition SymbolicFactor.h:73
\n+
static SymbolicFactor::shared_ptr FromIteratorsShared(KEYITERATOR beginKey, KEYITERATOR endKey)
Constructor from a collection of keys.
Definition SymbolicFactor.h:121
\n+
SymbolicFactor()
Default constructor for I/O.
Definition SymbolicFactor.h:54
\n+
SymbolicFactor::shared_ptr clone() const
Copy this object as its actual derived type.
Definition SymbolicFactor.h:86
\n
the error.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,285 +1,275 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Conditional.h\n+SymbolicFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18// \\callgraph\n-19#pragma once\n-20\n-21#include \n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+23\n+24#include \n+25#include \n 26\n-27 class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs; // forward declaration.\n+27#include \n 28\n-62 template\n-_\b6_\b3 class _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-64 {\n-65 protected:\n-_\b6_\b7 size_t _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_;\n-68\n-69 private:\n-71 typedef _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b,_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b> _\bT_\bh_\bi_\bs;\n-72\n-73 public:\n-_\b7_\b5 typedef boost::iterator_range _\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs;\n-76\n-_\b7_\b8 typedef boost::iterator_range _\bP_\ba_\br_\be_\bn_\bt_\bs;\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+31 // Forward declarations\n+32 class SymbolicConditional;\n+33 class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+34 class Ordering;\n+35\n+_\b3_\b9 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br : public _\bF_\ba_\bc_\bt_\bo_\br {\n+40\n+41 public:\n+42\n+43 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+44 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n+45 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+46\n+_\b4_\b8 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+49\n+52\n+_\b5_\b4 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br() {}\n+55\n+_\b5_\b7 explicit _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j) :\n+58 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j}) {}\n+59\n+_\b6_\b1 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2) :\n+62 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j1, j2}) {}\n+63\n+_\b6_\b5 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, _\bK_\be_\by j3) :\n+66 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j1, j2, j3}) {}\n+67\n+_\b6_\b9 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, _\bK_\be_\by j3, _\bK_\be_\by j4) :\n+70 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j1, j2, j3, j4}) {}\n+71\n+_\b7_\b3 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, _\bK_\be_\by j3, _\bK_\be_\by j4, _\bK_\be_\by j5) :\n+74 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j1, j2, j3, j4, j5}) {}\n+75\n+_\b7_\b7 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, _\bK_\be_\by j3, _\bK_\be_\by j4, _\bK_\be_\by j5, _\bK_\be_\by j6) :\n+78 _\bB_\ba_\bs_\be(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{j1, j2, j3, j4, j5, j6}) {}\n 79\n-80 protected:\n-83\n-_\b8_\b5 _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() : _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_(0) {}\n-86\n-_\b8_\b8 _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(size_t _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs) : _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_(_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs) {}\n+_\b8_\b1 explicit _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(const _\bF_\ba_\bc_\bt_\bo_\br& factor) : _\bB_\ba_\bs_\be(factor.keys()) {}\n+82\n+83 virtual _\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br() {}\n+84\n+_\b8_\b6 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const { return boost::make_shared\n+(*this); }\n+87\n 89\n-91\n-92 public:\n-95\n-97 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"Conditional\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n-formatter = DefaultKeyFormatter) const;\n-98\n-100 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& c, double tol = 1e-9) const;\n+92\n+93 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n+94\n+_\b9_\b6 void _\bp_\br_\bi_\bn_\bt(\n+97 const std::string& s = \"SymbolicFactor\",\n+98 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n+99 Base::print(s, formatter);\n+100 }\n 101\n-103\n-106\n-107 virtual _\b~_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() {}\n+_\b1_\b0_\b3 void _\bp_\br_\bi_\bn_\bt_\bK_\be_\by_\bs(\n+104 const std::string& s = \"SymbolicFactor\",\n+105 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n+106 Base::printKeys(s, formatter);\n+107 }\n 108\n-_\b1_\b1_\b0 size_t _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() const { return _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n-111\n-_\b1_\b1_\b3 size_t _\bn_\br_\bP_\ba_\br_\be_\bn_\bt_\bs() const { return asFactor().size() - _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n-114\n-_\b1_\b1_\b6 _\bK_\be_\by _\bf_\bi_\br_\bs_\bt_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by() const {\n-117 if(_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_ > 0)\n-118 return asFactor().front();\n-119 else\n-120 throw std::invalid_argument(\"Requested Conditional::firstFrontalKey from a\n-conditional with zero frontal keys\");\n-121 }\n-122\n-_\b1_\b2_\b4 _\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs _\bf_\br_\bo_\bn_\bt_\ba_\bl_\bs() const { return boost::make_iterator_range(_\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-(), _\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs()); }\n-125\n-_\b1_\b2_\b7 _\bP_\ba_\br_\be_\bn_\bt_\bs _\bp_\ba_\br_\be_\bn_\bt_\bs() const { return boost::make_iterator_range(_\bb_\be_\bg_\bi_\bn_\bP_\ba_\br_\be_\bn_\bt_\bs(),\n-_\be_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bs()); }\n-128\n-133 virtual double _\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-134\n-139 virtual double _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+112\n+114 template\n+_\b1_\b1_\b5 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs(KEYITERATOR beginKey, KEYITERATOR\n+endKey) {\n+116 return _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(Base::FromIterators(beginKey, endKey));\n+117 }\n+118\n+120 template\n+_\b1_\b2_\b1 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd(KEYITERATOR beginKey,\n+KEYITERATOR endKey) {\n+122 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br result = boost::make_shared();\n+123 result->keys_.assign(beginKey, endKey);\n+124 return result;\n+125 }\n+126\n+129 template\n+_\b1_\b3_\b0 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bF_\br_\bo_\bm_\bK_\be_\by_\bs(const CONTAINER& keys) {\n+131 return _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(Base::FromKeys(keys));\n+132 }\n+133\n+136 template\n+_\b1_\b3_\b7 static _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd(const CONTAINER& keys) {\n+138 return FromIteratorsShared(keys.begin(), keys.end());\n+139 }\n 140\n-_\b1_\b4_\b2 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n-143 return _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be(x);\n-144 }\n+142\n 145\n-150 virtual double _\bl_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt() const;\n-151\n-153 double _\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt() const;\n-154\n-158\n-_\b1_\b6_\b0 typename FACTOR::const_iterator _\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() const { return asFactor\n-().begin(); }\n-161\n-_\b1_\b6_\b3 typename FACTOR::const_iterator _\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() const { return asFactor\n-().begin() + _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n+147 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n+148\n+151 std::pair, boost::\n+shared_ptr >\n+152 eliminate(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) const;\n+153\n+155\n+156 private:\n+_\b1_\b5_\b8 friend class boost::serialization::access;\n+159 template\n+160 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+161 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+162 }\n+163 }; // IndexFactor\n 164\n-_\b1_\b6_\b6 typename FACTOR::const_iterator _\bb_\be_\bg_\bi_\bn_\bP_\ba_\br_\be_\bn_\bt_\bs() const { return _\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-(); }\n-167\n-_\b1_\b6_\b9 typename FACTOR::const_iterator _\be_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bs() const { return asFactor().end\n-(); }\n-170\n-_\b1_\b7_\b2 size_t& _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() { return _\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n-173\n-_\b1_\b7_\b5 typename FACTOR::iterator _\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() { return asFactor().begin(); }\n-176\n-_\b1_\b7_\b8 typename FACTOR::iterator _\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs() { return asFactor().begin() +\n-_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n-179\n-_\b1_\b8_\b1 typename FACTOR::iterator _\bb_\be_\bg_\bi_\bn_\bP_\ba_\br_\be_\bn_\bt_\bs() { return asFactor().begin() +\n-_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_; }\n+165 // Forward declarations\n+166 class SymbolicFactorGraph;\n+167 class Ordering;\n+168\n+173 GTSAM_EXPORT std::pair, boost::\n+shared_ptr >\n+174 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc(const SymbolicFactorGraph& factors, const Ordering&\n+keys);\n+175\n+177 template<>\n+_\b1_\b7_\b8 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+179 };\n+180\n+181} //\\ namespace gtsam\n 182\n-_\b1_\b8_\b4 typename FACTOR::iterator _\be_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bs() { return asFactor().end(); }\n-185\n-199 template \n-200 static bool _\bC_\bh_\be_\bc_\bk_\bI_\bn_\bv_\ba_\br_\bi_\ba_\bn_\bt_\bs(const DERIVEDCONDITIONAL& conditional,\n-201 const VALUES& x);\n-202\n-204\n-205 private:\n-206\n-209\n-210 // Cast to factor type (non-const) (casts down to derived conditional type,\n-then up to factor type)\n-211 FACTOR& asFactor() { return static_cast\n-(static_cast(*this)); }\n-212\n-213 // Cast to derived type (const) (casts down to derived conditional type,\n-then up to factor type)\n-214 const FACTOR& asFactor() const { return static_cast\n-(static_cast(*this)); }\n-215\n-_\b2_\b1_\b7 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-218 template\n-219 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-220 ar & BOOST_SERIALIZATION_NVP(_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_);\n-221 }\n-222\n-224\n-225 };\n-226\n-227} // gtsam\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n _\bK_\be_\by_\b._\bh\n+_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+The base class for all factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc\n+std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr<\n+SymbolicFactor > > EliminateSymbolic(const SymbolicFactorGraph &factors, const\n+Ordering &keys)\n+Dense elimination function for symbolic factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.cpp:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n HybridValues represents a collection of DiscreteValues and VectorValues.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bC_\bh_\be_\bc_\bk_\bI_\bn_\bv_\ba_\br_\bi_\ba_\bn_\bt_\bs\n-static bool CheckInvariants(const DERIVEDCONDITIONAL &conditional, const VALUES\n-&x)\n-Check invariants of this conditional, given the values x.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs_\b_\n-size_t nrFrontals_\n-The first nrFrontal variables are frontal and the rest are parents.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bl_\bo_\bg_\bN_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n-virtual double logNormalizationConstant() const\n-All conditional types need to implement a log normalization constant to make it\n-such that error>=0.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bf_\bi_\br_\bs_\bt_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bK_\be_\by\n-Key firstFrontalKey() const\n-Convenience function to get the first frontal key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:116\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-FACTOR::const_iterator endFrontals() const\n-Iterator pointing past the last frontal key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bs\n-FACTOR::iterator endParents()\n-Mutable iterator pointing past the last parent key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bn_\bd_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-FACTOR::iterator endFrontals()\n-Mutable iterator pointing past the last frontal key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:178\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be\n-virtual double evaluate(const HybridValues &c) const\n-All conditional types need to implement an evaluate function, that yields a\n-true probability.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bp_\ba_\br_\be_\bn_\bt_\bs\n-Parents parents() const\n-return a view of the parent keys\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:127\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-double operator()(const HybridValues &x) const\n-Evaluate probability density, sugar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:142\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bP_\ba_\br_\be_\bn_\bt_\bs\n-boost::iterator_range< typename FACTOR::const_iterator > Parents\n-View of the separator keys (call parents())\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bl_\bo_\bg_\bP_\br_\bo_\bb_\ba_\bb_\bi_\bl_\bi_\bt_\by\n-virtual double logProbability(const HybridValues &c) const\n-All conditional types need to implement a logProbability function, for which\n-exp(logProbability(x)) =...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-size_t nrFrontals() const\n-return the number of frontals\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Conditional()\n-Empty Constructor to make serialization possible.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-Conditional(size_t nrFrontals)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bP_\ba_\br_\be_\bn_\bt_\bs\n-FACTOR::iterator beginParents()\n-Mutable iterator pointing to the first parent key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:181\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-size_t & nrFrontals()\n-Mutable version of nrFrontals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:172\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-FACTOR::iterator beginFrontals()\n-Mutable iterator pointing to first frontal key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:175\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-boost::iterator_range< typename FACTOR::const_iterator > Frontals\n-View of the frontal keys (call frontals())\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bf_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-Frontals frontals() const\n-return a view of the frontal keys\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:124\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:217\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bF_\br_\bo_\bn_\bt_\ba_\bl_\bs\n-FACTOR::const_iterator beginFrontals() const\n-Iterator pointing to first frontal key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:160\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt\n-double normalizationConstant() const\n-Non-virtual, exponentiate logNormalizationConstant.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bP_\ba_\br_\be_\bn_\bt_\bs\n-size_t nrParents() const\n-return the number of parents\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"Conditional\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print with optional formatter\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional-inst.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\be_\bn_\bd_\bP_\ba_\br_\be_\bn_\bt_\bs\n-FACTOR::const_iterator endParents() const\n-Iterator pointing past the last parent key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:169\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bb_\be_\bg_\bi_\bn_\bP_\ba_\br_\be_\bn_\bt_\bs\n-FACTOR::const_iterator beginParents() const\n-Iterator pointing to the first parent key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:166\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+SymbolicConditional is a conditional with keys but no probability data,\n+produced by symbolic eliminat...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+SymbolicFactor represents a symbolic factor that specifies graph topology but\n+is not associated with ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"SymbolicFactor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5, Key j6)\n+Construct 6-way factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Overriding the shared_ptr typedef.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs\n+static SymbolicFactor FromKeys(const CONTAINER &keys)\n+Constructor from a collection of keys - compatible with boost assign::list_of\n+and boost assign::cref_...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+SymbolicFactor(const Factor &factor)\n+Create symbolic version of any factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+SymbolicFactor(Key j1, Key j2, Key j3, Key j4)\n+Construct 4-way factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+SymbolicFactor(Key j1, Key j2)\n+Construct binary factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs\n+static SymbolicFactor FromIterators(KEYITERATOR beginKey, KEYITERATOR endKey)\n+Constructor from a collection of keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:115\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt_\bK_\be_\by_\bs\n+void printKeys(const std::string &s=\"SymbolicFactor\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const override\n+print only keys\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:103\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd\n+static SymbolicFactor::shared_ptr FromKeysShared(const CONTAINER &keys)\n+Constructor from a collection of keys - compatible with boost assign::list_of\n+and boost assign::cref_...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:137\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+SymbolicFactor(Key j1, Key j2, Key j3)\n+Construct ternary factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+SymbolicFactor(Key j)\n+Construct unary factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+SymbolicFactor(Key j1, Key j2, Key j3, Key j4, Key j5)\n+Construct 5-way factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:73\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd\n+static SymbolicFactor::shared_ptr FromIteratorsShared(KEYITERATOR beginKey,\n+KEYITERATOR endKey)\n+Constructor from a collection of keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:121\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n+SymbolicFactor()\n+Default constructor for I/O.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+SymbolicFactor::shared_ptr clone() const\n+Copy this object as its actual derived type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:86\n _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n the error.\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+ * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00683.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00668.html", "comments": ["Files 97% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/FactorGraph-inst.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Factor.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
FactorGraph-inst.h File Reference
\n+
Factor.cpp File Reference
\n
\n
\n \n-

Factor Graph Base Class. \n+

The base class for all factors. \n More...

\n-\n-

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Factor Graph Base Class.

\n-
Author
Carlos Nieto
\n+

The base class for all factors.

\n+
Author
Kai Ni
\n
\n Frank Dellaert
\n
\n-Alireza Fathi
\n-
\n-Michael Kaess
\n-
\n Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,25 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-FactorGraph-inst.h File Reference\n-Factor Graph Base Class. _\bM_\bo_\br_\be_\b._\b._\b.\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+Factor.cpp File Reference\n+The base class for all factors. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor Graph Base Class.\n+The base class for all factors.\n Author\n- Carlos Nieto\n+ Kai Ni\n Frank Dellaert\n- Alireza Fathi\n- Michael Kaess\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00689_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00755_source.html", "comments": ["Files 96% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesNet.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PowerMethod.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
BayesNet.h
\n+
PowerMethod.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4* Atlanta, Georgia 30332-0415
\n-
5* All Rights Reserved
\n-
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8* See LICENSE for the license information
\n+
8 * See LICENSE for the license information
\n
9
\n-
10* -------------------------------------------------------------------------- */
\n+
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-
22
\n-
23#include <boost/shared_ptr.hpp>
\n-
24#include <string>
\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
28class HybridValues;
\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/base/Matrix.h>
\n+
23#include <gtsam/base/Vector.h>
\n+
24
\n+
25#include <Eigen/Core>
\n+
26#include <Eigen/Sparse>
\n+
27#include <random>
\n+
28#include <vector>
\n
29
\n-
34template <class CONDITIONAL>
\n-
\n-
35class BayesNet : public FactorGraph<CONDITIONAL> {
\n-
36 private:
\n-\n-
38
\n-
39 public:
\n-
40 typedef typename boost::shared_ptr<CONDITIONAL>
\n-\n-
42
\n-
43 protected:
\n-
46
\n-\n-
49
\n-
51 template <typename ITERATOR>
\n-
\n-
52 BayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
\n-
53 : Base(firstConditional, lastConditional) {}
\n-
\n-
54
\n-
\n-
60 BayesNet(std::initializer_list<sharedConditional> conditionals)
\n-
61 : Base(conditionals) {}
\n-
\n-
62
\n+
30namespace gtsam {
\n+
31
\n+
32using Sparse = Eigen::SparseMatrix<double>;
\n+
33
\n+
56template <class Operator>
\n+
\n+\n+
58 protected:
\n+
63 const Operator &A_;
\n
64
\n-
65 public:
\n+
65 const int dim_; // dimension of Matrix A
\n+
66
\n+
67 size_t nrIterations_; // number of iterations
\n
68
\n-
70 void print(
\n-
71 const std::string& s = "BayesNet",
\n-
72 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n-
73
\n-
77
\n-
79 void dot(std::ostream& os,
\n-
80 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
81 const DotWriter& writer = DotWriter()) const;
\n-
82
\n-
84 std::string dot(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
85 const DotWriter& writer = DotWriter()) const;
\n+
69 double ritzValue_; // Ritz eigenvalue
\n+
70 Vector ritzVector_; // Ritz eigenvector
\n+
71
\n+
72 public:
\n+
75
\n+
\n+
77 explicit PowerMethod(const Operator &A,
\n+
78 const boost::optional<Vector> initial = boost::none)
\n+
79 : A_(A), dim_(A.rows()), nrIterations_(0) {
\n+
80 Vector x0;
\n+
81 x0 = initial ? initial.get() : Vector::Random(dim_);
\n+
82 x0.normalize();
\n+
83
\n+
84 // initialize Ritz eigen value
\n+
85 ritzValue_ = 0.0;
\n
86
\n-
88 void saveGraph(const std::string& filename,
\n-
89 const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n-
90 const DotWriter& writer = DotWriter()) const;
\n-
91
\n-
95
\n-
96 // Expose HybridValues version of logProbability.
\n-
97 double logProbability(const HybridValues& x) const;
\n-
98
\n-
99 // Expose HybridValues version of evaluate.
\n-
100 double evaluate(const HybridValues& c) const;
\n-
101
\n-
103};
\n+
87 // initialize Ritz eigen vector
\n+
88 ritzVector_ = powerIteration(x0);
\n+
89 }
\n+
\n+
90
\n+
\n+
95 Vector powerIteration(const Vector &x) const {
\n+
96 Vector y = A_ * x;
\n+
97 y.normalize();
\n+
98 return y;
\n+
99 }
\n
\n-
104
\n-
105} // namespace gtsam
\n+
100
\n+
105 Vector powerIteration() const { return powerIteration(ritzVector_); }
\n
106
\n-
107#include <gtsam/inference/BayesNet-inst.h>
\n-
Factor Graph Base Class.
\n+
\n+
112 bool converged(double tol) const {
\n+
113 const Vector x = ritzVector_;
\n+
114 // store the Ritz eigen value
\n+
115 const double ritzValue = x.dot(A_ * x);
\n+
116 const double error = (A_ * x - ritzValue * x).norm();
\n+
117 return error < tol;
\n+
118 }
\n+
\n+
119
\n+
121 size_t nrIterations() const { return nrIterations_; }
\n+
122
\n+
\n+
129 bool compute(size_t maxIterations, double tol) {
\n+
130 // Starting
\n+
131 bool isConverged = false;
\n+
132
\n+
133 for (size_t i = 0; i < maxIterations && !isConverged; i++) {
\n+
134 ++nrIterations_;
\n+
135 // update the ritzVector after power iteration
\n+
136 ritzVector_ = powerIteration();
\n+
137 // update the ritzValue
\n+
138 ritzValue_ = ritzVector_.dot(A_ * ritzVector_);
\n+
139 isConverged = converged(tol);
\n+
140 }
\n+
141
\n+
142 return isConverged;
\n+
143 }
\n+
\n+
144
\n+
146 double eigenvalue() const { return ritzValue_; }
\n+
147
\n+
149 Vector eigenvector() const { return ritzVector_; }
\n+
150};
\n+
\n+
151
\n+
152} // namespace gtsam
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
typedef and functions to augment Eigen's VectorXd
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n-
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n-
BayesNet(std::initializer_list< sharedConditional > conditionals)
Constructor that takes an initializer list of shared pointers.
Definition BayesNet.h:60
\n-
void print(const std::string &s="BayesNet", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print out graph
Definition BayesNet-inst.h:32
\n-
void dot(std::ostream &os, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
Output to graphviz format, stream version.
Definition BayesNet-inst.h:46
\n-
boost::shared_ptr< CONDITIONAL > sharedConditional
A shared pointer to a conditional.
Definition BayesNet.h:41
\n-
BayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
Construct from iterator over conditionals.
Definition BayesNet.h:52
\n-
void saveGraph(const std::string &filename, const KeyFormatter &keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const
output to file with graphviz format.
Definition BayesNet-inst.h:83
\n-
BayesNet()
Default constructor as an empty BayesNet.
Definition BayesNet.h:48
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n-
the error.
\n+
Compute maximum Eigenpair with power method.
Definition PowerMethod.h:57
\n+
Vector powerIteration(const Vector &x) const
Run power iteration to get ritzVector with previous ritzVector x, and return A * x / || A * x ||.
Definition PowerMethod.h:95
\n+
Vector eigenvector() const
Return the eigenvector.
Definition PowerMethod.h:149
\n+
const Operator & A_
Const reference to an externally-held matrix whose minimum-eigenvalue we want to compute.
Definition PowerMethod.h:63
\n+
double eigenvalue() const
Return the eigenvalue.
Definition PowerMethod.h:146
\n+
PowerMethod(const Operator &A, const boost::optional< Vector > initial=boost::none)
Construct from the aim matrix and intial ritz vector.
Definition PowerMethod.h:77
\n+
Vector powerIteration() const
Run power iteration to get ritzVector with previous ritzVector x, and return A * x / || A * x ||.
Definition PowerMethod.h:105
\n+
bool converged(double tol) const
After Perform power iteration on a single Ritz value, check if the Ritz residual for the current Ritz...
Definition PowerMethod.h:112
\n+
bool compute(size_t maxIterations, double tol)
Start the power/accelerated iteration, after performing the power/accelerated iteration,...
Definition PowerMethod.h:129
\n+
size_t nrIterations() const
Return the number of iterations.
Definition PowerMethod.h:121
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,141 +1,158 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BayesNet.h\n+PowerMethod.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4* Atlanta, Georgia 30332-0415\n-5* All Rights Reserved\n-6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8* See LICENSE for the license information\n+8 * See LICENSE for the license information\n 9\n-10* -------------------------------------------------------------------------\n+10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22\n-23#include \n-24#include \n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-28class _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs;\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+24\n+25#include \n+26#include \n+27#include \n+28#include \n 29\n-34template \n-_\b3_\b5class _\bB_\ba_\by_\be_\bs_\bN_\be_\bt : public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n-36 private:\n-37 typedef _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b> _\bB_\ba_\bs_\be;\n-38\n-39 public:\n-40 typedef typename boost::shared_ptr\n-_\b4_\b1 _\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-42\n-43 protected:\n-46\n-_\b4_\b8 _\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n-49\n-51 template \n-_\b5_\b2 _\bB_\ba_\by_\be_\bs_\bN_\be_\bt(ITERATOR firstConditional, ITERATOR lastConditional)\n-53 : _\bB_\ba_\bs_\be(firstConditional, lastConditional) {}\n-54\n-_\b6_\b0 _\bB_\ba_\by_\be_\bs_\bN_\be_\bt(std::initializer_list conditionals)\n-61 : _\bB_\ba_\bs_\be(conditionals) {}\n-62\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+32using Sparse = Eigen::SparseMatrix;\n+33\n+56template \n+_\b5_\b7class _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd {\n+58 protected:\n+_\b6_\b3 const Operator &_\bA_\b_;\n 64\n-65 public:\n+65 const int dim_; // dimension of Matrix A\n+66\n+67 size_t nrIterations_; // number of iterations\n 68\n-70 void _\bp_\br_\bi_\bn_\bt(\n-71 const std::string& s = \"BayesNet\",\n-72 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n-73\n-77\n-79 void _\bd_\bo_\bt(std::ostream& os,\n-80 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-81 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n-82\n-84 std::string _\bd_\bo_\bt(const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-85 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n+69 double ritzValue_; // Ritz eigenvalue\n+70 Vector ritzVector_; // Ritz eigenvector\n+71\n+72 public:\n+75\n+_\b7_\b7 explicit _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd(const Operator &A,\n+78 const boost::optional initial = boost::none)\n+79 : _\bA_\b_(A), dim_(A.rows()), nrIterations_(0) {\n+80 Vector x0;\n+81 x0 = initial ? initial.get() : Vector::Random(dim_);\n+82 x0.normalize();\n+83\n+84 // initialize Ritz eigen value\n+85 ritzValue_ = 0.0;\n 86\n-88 void _\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh(const std::string& filename,\n-89 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter,\n-90 const _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br& writer = _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br()) const;\n-91\n-95\n-96 // Expose HybridValues version of logProbability.\n-97 double logProbability(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-98\n-99 // Expose HybridValues version of evaluate.\n-100 double evaluate(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-101\n-103};\n-104\n-105} // namespace gtsam\n+87 // initialize Ritz eigen vector\n+88 ritzVector_ = _\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(x0);\n+89 }\n+90\n+_\b9_\b5 Vector _\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(const Vector &x) const {\n+96 Vector y = _\bA_\b_ * x;\n+97 y.normalize();\n+98 return y;\n+99 }\n+100\n+_\b1_\b0_\b5 Vector _\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn() const { return _\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(ritzVector_); }\n 106\n-107#include \n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n+_\b1_\b1_\b2 bool _\bc_\bo_\bn_\bv_\be_\br_\bg_\be_\bd(double tol) const {\n+113 const Vector x = ritzVector_;\n+114 // store the Ritz eigen value\n+115 const double ritzValue = x.dot(_\bA_\b_ * x);\n+116 const double error = (_\bA_\b_ * x - ritzValue * x).norm();\n+117 return error < tol;\n+118 }\n+119\n+_\b1_\b2_\b1 size_t _\bn_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs() const { return nrIterations_; }\n+122\n+_\b1_\b2_\b9 bool _\bc_\bo_\bm_\bp_\bu_\bt_\be(size_t maxIterations, double tol) {\n+130 // Starting\n+131 bool isConverged = false;\n+132\n+133 for (size_t i = 0; i < maxIterations && !isConverged; i++) {\n+134 ++nrIterations_;\n+135 // update the ritzVector after power iteration\n+136 ritzVector_ = _\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn();\n+137 // update the ritzValue\n+138 ritzValue_ = ritzVector_.dot(_\bA_\b_ * ritzVector_);\n+139 isConverged = _\bc_\bo_\bn_\bv_\be_\br_\bg_\be_\bd(tol);\n+140 }\n+141\n+142 return isConverged;\n+143 }\n+144\n+_\b1_\b4_\b6 double _\be_\bi_\bg_\be_\bn_\bv_\ba_\bl_\bu_\be() const { return ritzValue_; }\n+147\n+_\b1_\b4_\b9 Vector _\be_\bi_\bg_\be_\bn_\bv_\be_\bc_\bt_\bo_\br() const { return ritzVector_; }\n+150};\n+151\n+152} // namespace gtsam\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-HybridValues represents a collection of DiscreteValues and VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-A BayesNet is a tree of conditionals, stored in elimination order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-BayesNet(std::initializer_list< sharedConditional > conditionals)\n-Constructor that takes an initializer list of shared pointers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"BayesNet\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const override\n-print out graph\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bd_\bo_\bt\n-void dot(std::ostream &os, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n-Output to graphviz format, stream version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-boost::shared_ptr< CONDITIONAL > sharedConditional\n-A shared pointer to a conditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-BayesNet(ITERATOR firstConditional, ITERATOR lastConditional)\n-Construct from iterator over conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bs_\ba_\bv_\be_\bG_\br_\ba_\bp_\bh\n-void saveGraph(const std::string &filename, const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter, const DotWriter &writer=DotWriter()) const\n-output to file with graphviz format.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-BayesNet()\n-Default constructor as an empty BayesNet.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n-DotWriter is a helper class for writing graphviz .dot files.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n-_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n-the error.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd\n+Compute maximum Eigenpair with power method.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn\n+Vector powerIteration(const Vector &x) const\n+Run power iteration to get ritzVector with previous ritzVector x, and return A\n+* x / || A * x ||.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:95\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\be_\bi_\bg_\be_\bn_\bv_\be_\bc_\bt_\bo_\br\n+Vector eigenvector() const\n+Return the eigenvector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:149\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bA_\b_\n+const Operator & A_\n+Const reference to an externally-held matrix whose minimum-eigenvalue we want\n+to compute.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\be_\bi_\bg_\be_\bn_\bv_\ba_\bl_\bu_\be\n+double eigenvalue() const\n+Return the eigenvalue.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:146\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd\n+PowerMethod(const Operator &A, const boost::optional< Vector > initial=boost::\n+none)\n+Construct from the aim matrix and intial ritz vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn\n+Vector powerIteration() const\n+Run power iteration to get ritzVector with previous ritzVector x, and return A\n+* x / || A * x ||.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bg_\be_\bd\n+bool converged(double tol) const\n+After Perform power iteration on a single Ritz value, check if the Ritz\n+residual for the current Ritz...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:112\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be\n+bool compute(size_t maxIterations, double tol)\n+Start the power/accelerated iteration, after performing the power/accelerated\n+iteration,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:129\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bn_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n+size_t nrIterations() const\n+Return the number of iterations.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:121\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00695.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00233.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/AlgebraicDecisionTree.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
BayesTree.h File Reference
\n+
AlgebraicDecisionTree.h File Reference
\n
\n
\n \n-

Bayes Tree is a tree of cliques of a Bayes Chain. \n+

Algebraic Decision Trees. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n \n-\n-\n-\n-\n+\n \n

\n Classes

struct  gtsam::BayesTreeCliqueStats
 clique statistics More...
class  gtsam::AlgebraicDecisionTree< L >
 An algebraic decision tree fixes the range of a DecisionTree to double. More...
 
struct  gtsam::BayesTreeCliqueData
 store all the sizes
\n- More...
struct  gtsam::AlgebraicDecisionTree< L >::Ring
 The Real ring with addition and multiplication. More...
 
class  gtsam::BayesTree< CLIQUE >
 Bayes tree. More...
 
class  gtsam::BayesTreeOrphanWrapper< CLIQUE, typename >
struct  gtsam::traits< AlgebraicDecisionTree< T > >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Bayes Tree is a tree of cliques of a Bayes Chain.

\n+

Algebraic Decision Trees.

\n
Author
Frank Dellaert
\n+
Date
Mar 14, 2011
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,34 +1,33 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-BayesTree.h File Reference\n-Bayes Tree is a tree of cliques of a Bayes Chain. _\bM_\bo_\br_\be_\b._\b._\b.\n+AlgebraicDecisionTree.h File Reference\n+Algebraic Decision Trees. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bS_\bt_\ba_\bt_\bs\n-\u00a0 clique statistics _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b _\b>\n+\u00a0 An algebraic decision tree fixes the range of a _\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be to\n+ double. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bD_\ba_\bt_\ba\n-\u00a0 store all the sizes\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bL_\b _\b>_\b:_\b:_\bR_\bi_\bn_\bg\n+\u00a0 The Real ring with addition and multiplication. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\b _\bC_\bL_\bI_\bQ_\bU_\bE_\b _\b>\n-\u00a0 Bayes tree. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\b _\bC_\bL_\bI_\bQ_\bU_\bE_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\b>\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bT_\b _\b>_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Bayes Tree is a tree of cliques of a Bayes Chain.\n+Algebraic Decision Trees.\n Author\n Frank Dellaert\n+ Date\n+ Mar 14, 2011\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n- * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+ * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n+ * _\bA_\bl_\bg_\be_\bb_\br_\ba_\bi_\bc_\bD_\be_\bc_\bi_\bs_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00704_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00287_source.html", "comments": ["Files 76% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/VectorValues.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
VectorValues.h
\n+
Rot3.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-\n-
22#include <gtsam/base/Vector.h>
\n-
23#include <gtsam/base/ConcurrentMap.h>
\n-\n-\n-
26
\n-
27#include <boost/shared_ptr.hpp>
\n-
28
\n-
29
\n-
30#include <map>
\n-
31#include <string>
\n-
32#include <iosfwd>
\n+
22// \\callgraph
\n+
23
\n+
24#pragma once
\n+
25
\n+
26#include <gtsam/geometry/Unit3.h>
\n+\n+
28#include <gtsam/geometry/SO3.h>
\n+
29#include <gtsam/base/concepts.h>
\n+
30#include <gtsam/config.h> // Get GTSAM_USE_QUATERNIONS macro
\n+
31
\n+
32#include <random>
\n
33
\n-
34namespace gtsam {
\n-
35
\n-
\n-
74 class GTSAM_EXPORT VectorValues {
\n-
75 protected:
\n-
76 typedef VectorValues This;
\n-\n-\n-
79
\n-
80 public:
\n-
81 typedef Values::iterator iterator;
\n-
82 typedef Values::const_iterator const_iterator;
\n-
83 typedef boost::shared_ptr<This> shared_ptr;
\n-\n-\n-
86 typedef std::map<Key, size_t> Dims;
\n+
34// You can override the default coordinate mode using this flag
\n+
35#ifndef ROT3_DEFAULT_COORDINATES_MODE
\n+
36 #ifdef GTSAM_USE_QUATERNIONS
\n+
37 // Exponential map is very cheap for quaternions
\n+
38 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::EXPMAP
\n+
39 #else
\n+
40 // If user doesn't require GTSAM_ROT3_EXPMAP in cmake when building
\n+
41 #ifndef GTSAM_ROT3_EXPMAP
\n+
42 // For rotation matrices, the Cayley transform is a fast retract alternative
\n+
43 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::CAYLEY
\n+
44 #else
\n+
45 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::EXPMAP
\n+
46 #endif
\n+
47 #endif
\n+
48#endif
\n+
49
\n+
50namespace gtsam {
\n+
51
\n+
\n+
58class GTSAM_EXPORT Rot3 : public LieGroup<Rot3, 3> {
\n+
59 private:
\n+
60
\n+
61#ifdef GTSAM_USE_QUATERNIONS
\n+
63 gtsam::Quaternion quaternion_;
\n+
64#else
\n+
65 SO3 rot_;
\n+
66#endif
\n+
67
\n+
68 public:
\n+
71
\n+
73 Rot3();
\n+
74
\n+
81 Rot3(const Point3& col1, const Point3& col2, const Point3& col3);
\n+
82
\n+
84 Rot3(double R11, double R12, double R13,
\n+
85 double R21, double R22, double R23,
\n+
86 double R31, double R32, double R33);
\n
87
\n-
90
\n-\n-
93
\n-
\n-
95 VectorValues(std::initializer_list<std::pair<Key, Vector>> init)
\n-
96 : values_(init.begin(), init.end()) {}
\n-
\n-
97
\n-
100 VectorValues(const VectorValues& first, const VectorValues& second);
\n-
101
\n-
103 template<class CONTAINER>
\n-
104 explicit VectorValues(const CONTAINER& c) : values_(c.begin(), c.end()) {}
\n-
105
\n-
107 VectorValues(const VectorValues& c) : values_(c.values_) {}
\n-
108
\n-
110 template<typename ITERATOR>
\n-
111 VectorValues(ITERATOR first, ITERATOR last) : values_(first, last) {}
\n-
112
\n-
114 VectorValues(const Vector& c, const Dims& dims);
\n-
115
\n-
117 VectorValues(const Vector& c, const Scatter& scatter);
\n-
118
\n-
120 static VectorValues Zero(const VectorValues& other);
\n-
121
\n-
125
\n-
127 size_t size() const { return values_.size(); }
\n-
128
\n-
130 size_t dim(Key j) const { return at(j).rows(); }
\n-
131
\n-
133 bool exists(Key j) const { return find(j) != end(); }
\n-
134
\n-
\n-
139 Vector& at(Key j) {
\n-
140 iterator item = find(j);
\n-
141 if (item == end())
\n-
142 throw std::out_of_range(
\n-
143 "Requested variable '" + DefaultKeyFormatter(j) + "' is not in this VectorValues.");
\n-
144 else
\n-
145 return item->second;
\n-
146 }
\n-
\n-
147
\n-
\n-
152 const Vector& at(Key j) const {
\n-
153 const_iterator item = find(j);
\n-
154 if (item == end())
\n-
155 throw std::out_of_range(
\n-
156 "Requested variable '" + DefaultKeyFormatter(j) + "' is not in this VectorValues.");
\n-
157 else
\n-
158 return item->second;
\n-
159 }
\n-
\n-
160
\n-
163 Vector& operator[](Key j) { return at(j); }
\n-
164
\n-
167 const Vector& operator[](Key j) const { return at(j); }
\n-
168
\n-
172 VectorValues& update(const VectorValues& values);
\n-
173
\n-
178 iterator insert(const std::pair<Key, Vector>& key_value);
\n-
179
\n-
184 template<class... Args>
\n-
\n-
185 inline std::pair<VectorValues::iterator, bool> emplace(Key j, Args&&... args) {
\n-
186#if ! defined(GTSAM_USE_TBB) || defined (TBB_GREATER_EQUAL_2020)
\n-
187 return values_.emplace(std::piecewise_construct, std::forward_as_tuple(j), std::forward_as_tuple(args...));
\n-
188#else
\n-
189 return values_.insert(std::make_pair(j, Vector(std::forward<Args>(args)...)));
\n-
190#endif
\n-
191 }
\n-
\n-
192
\n-
\n-
197 iterator insert(Key j, const Vector& value) {
\n-
198 return insert(std::make_pair(j, value));
\n-
199 }
\n-
\n-
200
\n-
203 VectorValues& insert(const VectorValues& values);
\n-
204
\n-
\n-
209 inline std::pair<iterator, bool> tryInsert(Key j, const Vector& value) {
\n-
210#ifdef TBB_GREATER_EQUAL_2020
\n-
211 return values_.emplace(j, value);
\n-
212#else
\n-
213 return values_.insert(std::make_pair(j, value));
\n-
214#endif
\n-
215 }
\n-
\n-
216
\n-
\n-
219 void insert_or_assign(Key j, const Vector& value) {
\n-
220 if (!tryInsert(j, value).second) {
\n-
221 (*this)[j] = value;
\n-
222 }
\n+
95 template <typename Derived>
\n+
96#ifdef GTSAM_USE_QUATERNIONS
\n+
97 explicit Rot3(const Eigen::MatrixBase<Derived>& R) {
\n+
98 quaternion_ = Matrix3(R);
\n+
99 }
\n+
100#else
\n+
\n+
101 explicit Rot3(const Eigen::MatrixBase<Derived>& R) : rot_(R) {
\n+
102 }
\n+
\n+
103#endif
\n+
104
\n+
109#ifdef GTSAM_USE_QUATERNIONS
\n+
110 explicit Rot3(const Matrix3& R) : quaternion_(R) {}
\n+
111#else
\n+
112 explicit Rot3(const Matrix3& R) : rot_(R) {}
\n+
113#endif
\n+
114
\n+
118#ifdef GTSAM_USE_QUATERNIONS
\n+
119 explicit Rot3(const SO3& R) : quaternion_(R.matrix()) {}
\n+
120#else
\n+
121 explicit Rot3(const SO3& R) : rot_(R) {}
\n+
122#endif
\n+
123
\n+
128 Rot3(const Quaternion& q);
\n+
129 Rot3(double w, double x, double y, double z) : Rot3(Quaternion(w, x, y, z)) {}
\n+
130
\n+
137 static Rot3 Random(std::mt19937 & rng);
\n+
138
\n+
140 virtual ~Rot3() {}
\n+
141
\n+
142 /* Static member function to generate some well known rotations */
\n+
143
\n+
145 static Rot3 Rx(double t);
\n+
146
\n+
148 static Rot3 Ry(double t);
\n+
149
\n+
151 static Rot3 Rz(double t);
\n+
152
\n+
154 static Rot3 RzRyRx(double x, double y, double z,
\n+
155 OptionalJacobian<3, 1> Hx = boost::none,
\n+
156 OptionalJacobian<3, 1> Hy = boost::none,
\n+
157 OptionalJacobian<3, 1> Hz = boost::none);
\n+
158
\n+
\n+
160 inline static Rot3 RzRyRx(const Vector& xyz,
\n+
161 OptionalJacobian<3, 3> H = boost::none) {
\n+
162 assert(xyz.size() == 3);
\n+
163 Rot3 out;
\n+
164 if (H) {
\n+
165 Vector3 Hx, Hy, Hz;
\n+
166 out = RzRyRx(xyz(0), xyz(1), xyz(2), Hx, Hy, Hz);
\n+
167 (*H) << Hx, Hy, Hz;
\n+
168 } else
\n+
169 out = RzRyRx(xyz(0), xyz(1), xyz(2));
\n+
170 return out;
\n+
171 }
\n+
\n+
172
\n+
174 static Rot3 Yaw (double t) { return Rz(t); }
\n+
175
\n+
177 static Rot3 Pitch(double t) { return Ry(t); }
\n+
178
\n+
180 static Rot3 Roll (double t) { return Rx(t); }
\n+
181
\n+
\n+
196 static Rot3 Ypr(double y, double p, double r,
\n+
197 OptionalJacobian<3, 1> Hy = boost::none,
\n+
198 OptionalJacobian<3, 1> Hp = boost::none,
\n+
199 OptionalJacobian<3, 1> Hr = boost::none) {
\n+
200 return RzRyRx(r, p, y, Hr, Hp, Hy);
\n+
201 }
\n+
\n+
202
\n+
\n+
204 static Rot3 Quaternion(double w, double x, double y, double z) {
\n+
205 gtsam::Quaternion q(w, x, y, z);
\n+
206 return Rot3(q);
\n+
207 }
\n+
\n+
208
\n+
\n+
215 static Rot3 AxisAngle(const Point3& axis, double angle) {
\n+
216 // Convert to unit vector.
\n+
217 Vector3 unitAxis = Unit3(axis).unitVector();
\n+
218#ifdef GTSAM_USE_QUATERNIONS
\n+
219 return gtsam::Quaternion(Eigen::AngleAxis<double>(angle, unitAxis));
\n+
220#else
\n+
221 return Rot3(SO3::AxisAngle(unitAxis,angle));
\n+
222#endif
\n
223 }
\n
\n
224
\n-
\n-
226 void erase(Key var) {
\n-
227 if (values_.unsafe_erase(var) == 0)
\n-
228 throw std::invalid_argument("Requested variable '" +
\n-
229 DefaultKeyFormatter(var) +
\n-
230 "', is not in this VectorValues.");
\n-
231 }
\n-
\n-
232
\n-
234 void setZero();
\n-
235
\n-
236 iterator begin() { return values_.begin(); }
\n-
\n-
237 const_iterator begin() const { return values_.begin(); }
\n-
\n-
238 iterator end() { return values_.end(); }
\n-
\n-
239 const_iterator end() const { return values_.end(); }
\n-
240
\n-
245 iterator find(Key j) { return values_.find(j); }
\n-
246
\n-
251 const_iterator find(Key j) const { return values_.find(j); }
\n-
252
\n-
254 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream&, const VectorValues&);
\n-
255
\n-
257 void print(const std::string& str = "VectorValues",
\n-
258 const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n-
259
\n-
261 bool equals(const VectorValues& x, double tol = 1e-9) const;
\n-
262
\n-
266
\n-
268 Vector vector() const;
\n-
269
\n-
271 template <typename CONTAINER>
\n-
\n-
272 Vector vector(const CONTAINER& keys) const {
\n-
273 DenseIndex totalDim = 0;
\n-\n-
275 items.reserve(keys.end() - keys.begin());
\n-
276 for (Key key : keys) {
\n-
277 const Vector* v = &at(key);
\n-
278 totalDim += v->size();
\n-
279 items.push_back(v);
\n-
280 }
\n-
281
\n-
282 Vector result(totalDim);
\n-
283 DenseIndex pos = 0;
\n-
284 for (const Vector* v : items) {
\n-
285 result.segment(pos, v->size()) = *v;
\n-
286 pos += v->size();
\n-
287 }
\n+
\n+
231 static Rot3 AxisAngle(const Unit3& axis, double angle) {
\n+
232 return AxisAngle(axis.unitVector(),angle);
\n+
233 }
\n+
\n+
234
\n+
\n+
240 static Rot3 Rodrigues(const Vector3& w) {
\n+
241 return Rot3::Expmap(w);
\n+
242 }
\n+
\n+
243
\n+
\n+
251 static Rot3 Rodrigues(double wx, double wy, double wz) {
\n+
252 return Rodrigues(Vector3(wx, wy, wz));
\n+
253 }
\n+
\n+
254
\n+
256 static Rot3 AlignPair(const Unit3& axis, const Unit3& a_p, const Unit3& b_p);
\n+
257
\n+
259 static Rot3 AlignTwoPairs(const Unit3& a_p, const Unit3& b_p, //
\n+
260 const Unit3& a_q, const Unit3& b_q);
\n+
261
\n+
271 static Rot3 ClosestTo(const Matrix3& M) { return Rot3(SO3::ClosestTo(M)); }
\n+
272
\n+
283 Rot3 normalized() const;
\n+
284
\n
288
\n-
289 return result;
\n-
290 }
\n-
\n+
290 void print(const std::string& s="") const;
\n
291
\n-
293 Vector vector(const Dims& dims) const;
\n+
293 bool equals(const Rot3& p, double tol = 1e-9) const;
\n
294
\n-
296 void swap(VectorValues& other);
\n-
297
\n-
299 bool hasSameStructure(const VectorValues other) const;
\n-
300
\n-
304
\n-
308 double dot(const VectorValues& v) const;
\n-
309
\n-
311 double norm() const;
\n-
312
\n-
314 double squaredNorm() const;
\n+
298
\n+
\n+
300 inline static Rot3 Identity() {
\n+
301 return Rot3();
\n+
302 }
\n+
\n+
303
\n+
305 Rot3 operator*(const Rot3& R2) const;
\n+
306
\n+
\n+
308 Rot3 inverse() const {
\n+
309#ifdef GTSAM_USE_QUATERNIONS
\n+
310 return Rot3(quaternion_.inverse());
\n+
311#else
\n+
312 return Rot3(rot_.matrix().transpose());
\n+
313#endif
\n+
314 }
\n+
\n
315
\n-
318 VectorValues operator+(const VectorValues& c) const;
\n-
319
\n-
322 VectorValues add(const VectorValues& c) const;
\n-
323
\n-
326 VectorValues& operator+=(const VectorValues& c);
\n-
327
\n-
330 VectorValues& addInPlace(const VectorValues& c);
\n-
331
\n-
333 VectorValues& addInPlace_(const VectorValues& c);
\n-
334
\n-
337 VectorValues operator-(const VectorValues& c) const;
\n-
338
\n-
341 VectorValues subtract(const VectorValues& c) const;
\n-
342
\n-
344 friend GTSAM_EXPORT VectorValues operator*(const double a, const VectorValues &v);
\n+
\n+
321 Rot3 conjugate(const Rot3& cRb) const {
\n+
322 // TODO: do more efficiently by using Eigen or quaternion properties
\n+
323 return cRb * (*this) * cRb.inverse();
\n+
324 }
\n+
\n+
325
\n+
329
\n+
\n+\n+\n+
341#ifndef GTSAM_USE_QUATERNIONS
\n+\n+
343#endif
\n+
344 };
\n+
\n
345
\n-
347 VectorValues scale(const double a) const;
\n-
348
\n-
350 VectorValues& operator*=(double alpha);
\n-
351
\n-
353 VectorValues& scaleInPlace(double alpha);
\n-
354
\n-
356
\n-
359
\n-
365 std::string html(
\n-
366 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
367
\n+
346#ifndef GTSAM_USE_QUATERNIONS
\n+
347
\n+
348 // Cayley chart around origin
\n+
\n+
349 struct CayleyChart {
\n+
350 static Rot3 Retract(const Vector3& v, OptionalJacobian<3, 3> H = boost::none);
\n+
351 static Vector3 Local(const Rot3& r, OptionalJacobian<3, 3> H = boost::none);
\n+
352 };
\n+
\n+
353
\n+
\n+
355 Rot3 retractCayley(const Vector& omega) const {
\n+
356 return compose(CayleyChart::Retract(omega));
\n+
357 }
\n+
\n+
358
\n+
\n+
360 Vector3 localCayley(const Rot3& other) const {
\n+
361 return CayleyChart::Local(between(other));
\n+
362 }
\n+
\n+
363
\n+
364#endif
\n+
365
\n
369
\n-
370 private:
\n-
372 friend class boost::serialization::access;
\n-
373 template<class ARCHIVE>
\n-
374 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
375 ar & BOOST_SERIALIZATION_NVP(values_);
\n-
376 }
\n-
377 }; // VectorValues definition
\n-
378
\n-
380 template<>
\n-
\n-
381 struct traits<VectorValues> : public Testable<VectorValues> {
\n-
382 };
\n-
\n-
383
\n-
384} // \\namespace gtsam
\n-
\n-
\n-
\n-
\n-
A thin wrapper around std::vector that uses a custom allocator.
\n-
typedef and functions to augment Eigen's VectorXd
\n-
Variable ordering for the elimination algorithm.
\n-
Maps global variable indices to slot indices.
\n-
Included from all GTSAM files.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
\n+
374 static Rot3 Expmap(const Vector3& v, OptionalJacobian<3,3> H = boost::none) {
\n+
375 if(H) *H = Rot3::ExpmapDerivative(v);
\n+
376#ifdef GTSAM_USE_QUATERNIONS
\n+\n+
378#else
\n+
379 return Rot3(traits<SO3>::Expmap(v));
\n+
380#endif
\n+
381 }
\n+
\n+
382
\n+
387 static Vector3 Logmap(const Rot3& R, OptionalJacobian<3,3> H = boost::none);
\n+
388
\n+
390 static Matrix3 ExpmapDerivative(const Vector3& x);
\n+
391
\n+
393 static Matrix3 LogmapDerivative(const Vector3& x);
\n+
394
\n+
396 Matrix3 AdjointMap() const { return matrix(); }
\n+
397
\n+
398 // Chart at origin, depends on compile-time flag ROT3_DEFAULT_COORDINATES_MODE
\n+
\n+\n+
400 static Rot3 Retract(const Vector3& v, ChartJacobian H = boost::none);
\n+
401 static Vector3 Local(const Rot3& r, ChartJacobian H = boost::none);
\n+
402 };
\n+
\n+
403
\n+
404 using LieGroup<Rot3, 3>::inverse; // version with derivative
\n+
405
\n+
409
\n+
413 Point3 rotate(const Point3& p, OptionalJacobian<3,3> H1 = boost::none,
\n+
414 OptionalJacobian<3,3> H2 = boost::none) const;
\n+
415
\n+
417 Point3 operator*(const Point3& p) const;
\n+
418
\n+
420 Point3 unrotate(const Point3& p, OptionalJacobian<3,3> H1 = boost::none,
\n+
421 OptionalJacobian<3,3> H2=boost::none) const;
\n+
422
\n+
426
\n+
428 Unit3 rotate(const Unit3& p, OptionalJacobian<2,3> HR = boost::none,
\n+
429 OptionalJacobian<2,2> Hp = boost::none) const;
\n+
430
\n+
432 Unit3 unrotate(const Unit3& p, OptionalJacobian<2,3> HR = boost::none,
\n+
433 OptionalJacobian<2,2> Hp = boost::none) const;
\n+
434
\n+
436 Unit3 operator*(const Unit3& p) const;
\n+
437
\n+
441
\n+
443 Matrix3 matrix() const;
\n+
444
\n+
448 Matrix3 transpose() const;
\n+
449
\n+
451 Point3 column(int index) const;
\n+
452
\n+
453 Point3 r1() const;
\n+
454 Point3 r2() const;
\n+
455 Point3 r3() const;
\n+
456
\n+
461 Vector3 xyz(OptionalJacobian<3, 3> H = boost::none) const;
\n+
462
\n+
467 Vector3 ypr(OptionalJacobian<3, 3> H = boost::none) const;
\n+
468
\n+
473 Vector3 rpy(OptionalJacobian<3, 3> H = boost::none) const;
\n+
474
\n+
481 double roll(OptionalJacobian<1, 3> H = boost::none) const;
\n+
482
\n+
489 double pitch(OptionalJacobian<1, 3> H = boost::none) const;
\n+
490
\n+
497 double yaw(OptionalJacobian<1, 3> H = boost::none) const;
\n+
498
\n+
502
\n+
511 std::pair<Unit3, double> axisAngle() const;
\n+
512
\n+
516 gtsam::Quaternion toQuaternion() const;
\n+
517
\n+
518#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
526 Vector GTSAM_DEPRECATED quaternion() const;
\n+
527#endif
\n+
528
\n+
534 Rot3 slerp(double t, const Rot3& other) const;
\n+
535
\n+
537 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &os, const Rot3& p);
\n+
538
\n+
540
\n+
541 private:
\n+
543 friend class boost::serialization::access;
\n+
544 template <class ARCHIVE>
\n+
545 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
546#ifndef GTSAM_USE_QUATERNIONS
\n+
547 Matrix3& M = rot_.matrix_;
\n+
548 ar& boost::serialization::make_nvp("rot11", M(0, 0));
\n+
549 ar& boost::serialization::make_nvp("rot12", M(0, 1));
\n+
550 ar& boost::serialization::make_nvp("rot13", M(0, 2));
\n+
551 ar& boost::serialization::make_nvp("rot21", M(1, 0));
\n+
552 ar& boost::serialization::make_nvp("rot22", M(1, 1));
\n+
553 ar& boost::serialization::make_nvp("rot23", M(1, 2));
\n+
554 ar& boost::serialization::make_nvp("rot31", M(2, 0));
\n+
555 ar& boost::serialization::make_nvp("rot32", M(2, 1));
\n+
556 ar& boost::serialization::make_nvp("rot33", M(2, 2));
\n+
557#else
\n+
558 ar& boost::serialization::make_nvp("w", quaternion_.w());
\n+
559 ar& boost::serialization::make_nvp("x", quaternion_.x());
\n+
560 ar& boost::serialization::make_nvp("y", quaternion_.y());
\n+
561 ar& boost::serialization::make_nvp("z", quaternion_.z());
\n+
562#endif
\n+
563 }
\n+
564
\n+
565#ifdef GTSAM_USE_QUATERNIONS
\n+
566 // only align if quaternion, Matrix3 has no alignment requirements
\n+
567 public:
\n+\n+
569#endif
\n+
570 };
\n+
\n+
571
\n+
573 using Rot3Vector = std::vector<Rot3, Eigen::aligned_allocator<Rot3> >;
\n+
574
\n+
585 GTSAM_EXPORT std::pair<Matrix3, Vector3> RQ(
\n+
586 const Matrix3& A, OptionalJacobian<3, 9> H = boost::none);
\n+
587
\n+
588 template<>
\n+
589 struct traits<Rot3> : public internal::LieGroup<Rot3> {};
\n+
590
\n+
591 template<>
\n+
592 struct traits<const Rot3> : public internal::LieGroup<Rot3> {};
\n+
593
\n+
594} // namespace gtsam
\n+
595
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Lie Group wrapper for Eigen Quaternions.
\n+
3*3 matrix representation of SO(3)
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
string html(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of html.
Definition DiscreteValues.cpp:134
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n+
pair< Matrix3, Vector3 > RQ(const Matrix3 &A, OptionalJacobian< 3, 9 > H)
[RQ] receives a 3 by 3 matrix and returns an upper triangular matrix R and 3 rotation angles correspo...
Definition Rot3.cpp:260
\n+
std::vector< Rot3, Eigen::aligned_allocator< Rot3 > > Rot3Vector
std::vector of Rot3s, mainly for wrapper
Definition Rot3.h:573
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Errors operator+(const Errors &a, const Errors &b)
Addition.
Definition Errors.cpp:60
\n+
const MATRIX::ConstColXpr column(const MATRIX &A, size_t j)
Extracts a column view from a matrix that avoids a copy.
Definition Matrix.h:211
\n
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
Errors operator-(const Errors &a, const Errors &b)
Subtraction.
Definition Errors.cpp:75
\n+
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition ConcurrentMap.h:68
\n+
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n+
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Scatter is an intermediate data structure used when building a HessianFactor incrementally,...
Definition Scatter.h:49
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
value_type KeyValuePair
Typedef to pair<Key, Vector>
Definition VectorValues.h:85
\n-
const_iterator end() const
Iterator over variables.
Definition VectorValues.h:239
\n-
Values::value_type value_type
Typedef to pair<Key, Vector>
Definition VectorValues.h:84
\n-
Values::const_iterator const_iterator
Const iterator over vector values.
Definition VectorValues.h:82
\n-
iterator end()
Iterator over variables.
Definition VectorValues.h:238
\n-
Values::iterator iterator
Iterator over vector values.
Definition VectorValues.h:81
\n-
iterator insert(Key j, const Vector &value)
Insert a vector value with key j.
Definition VectorValues.h:197
\n-
VectorValues(const CONTAINER &c)
Create from another container holding pair<Key,Vector>.
Definition VectorValues.h:104
\n-
Values values_
Vectors making up this VectorValues.
Definition VectorValues.h:78
\n-
std::map< Key, size_t > Dims
Keyed vector dimensions.
Definition VectorValues.h:86
\n-
ConcurrentMap< Key, Vector > Values
Collection of Vectors making up a VectorValues.
Definition VectorValues.h:77
\n-
Vector & operator[](Key j)
Read/write access to the vector value with key j, throws std::out_of_range if j does not exist,...
Definition VectorValues.h:163
\n-
std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)
Emplace a vector value with key j.
Definition VectorValues.h:185
\n-
iterator find(Key j)
Return the iterator corresponding to the requested key, or end() if no variable is present with this ...
Definition VectorValues.h:245
\n-
size_t dim(Key j) const
Return the dimension of variable j.
Definition VectorValues.h:130
\n-
size_t size() const
Number of variables stored.
Definition VectorValues.h:127
\n-
const Vector & operator[](Key j) const
Access the vector value with key j (const version), throws std::out_of_range if j does not exist,...
Definition VectorValues.h:167
\n-
bool exists(Key j) const
Check whether a variable with key j exists.
Definition VectorValues.h:133
\n-
VectorValues()
Default constructor creates an empty VectorValues.
Definition VectorValues.h:92
\n-
const_iterator find(Key j) const
Return the iterator corresponding to the requested key, or end() if no variable is present with this ...
Definition VectorValues.h:251
\n-
VectorValues(ITERATOR first, ITERATOR last)
Create from a pair of iterators over pair<Key,Vector>.
Definition VectorValues.h:111
\n-
const Vector & at(Key j) const
Access the vector value with key j (const version), throws std::out_of_range if j does not exist,...
Definition VectorValues.h:152
\n-
Vector vector(const CONTAINER &keys) const
Access a vector that is a subset of relevant keys.
Definition VectorValues.h:272
\n-
void insert_or_assign(Key j, const Vector &value)
insert_or_assign that mimics the STL map insert_or_assign - if the value already exists,...
Definition VectorValues.h:219
\n-
const_iterator begin() const
Iterator over variables.
Definition VectorValues.h:237
\n-
Vector & at(Key j)
Read/write access to the vector value with key j, throws std::out_of_range if j does not exist,...
Definition VectorValues.h:139
\n-
void erase(Key var)
Erase the vector with the given key, or throw std::out_of_range if it does not exist.
Definition VectorValues.h:226
\n-
VectorValues(std::initializer_list< std::pair< Key, Vector > > init)
Construct from initializer list.
Definition VectorValues.h:95
\n-
std::pair< iterator, bool > tryInsert(Key j, const Vector &value)
insert that mimics the STL map insert - if the value already exists, the map is not modified and an i...
Definition VectorValues.h:209
\n-
VectorValues(const VectorValues &c)
Implicit copy constructor to specialize the explicit constructor from any container.
Definition VectorValues.h:107
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition VectorValues.h:83
\n-
iterator begin()
Iterator over variables.
Definition VectorValues.h:236
\n-
A key-value pair, which you get by dereferencing iterators.
Definition Values.h:93
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
static Rot3 Identity()
identity rotation for group operation
Definition Rot3.h:300
\n+
Rot3 retractCayley(const Vector &omega) const
Retraction from R^3 to Rot3 manifold using the Cayley transform.
Definition Rot3.h:355
\n+
Matrix3 AdjointMap() const
Calculate Adjoint map.
Definition Rot3.h:396
\n+
static Rot3 ClosestTo(const Matrix3 &M)
Static, named constructor that finds Rot3 element closest to M in Frobenius norm.
Definition Rot3.h:271
\n+
virtual ~Rot3()
Virtual destructor.
Definition Rot3.h:140
\n+
static Rot3 Yaw(double t)
Positive yaw is to right (as in aircraft heading). See ypr.
Definition Rot3.h:174
\n+
static Rot3 AxisAngle(const Unit3 &axis, double angle)
Convert from axis/angle representation.
Definition Rot3.h:231
\n+
Rot3(const Matrix3 &R)
Constructor from a rotation matrix Overload version for Matrix3 to avoid casting in quaternion mode.
Definition Rot3.h:112
\n+
static Rot3 Rodrigues(const Vector3 &w)
Rodrigues' formula to compute an incremental rotation.
Definition Rot3.h:240
\n+
static Rot3 AxisAngle(const Point3 &axis, double angle)
Convert from axis/angle representation.
Definition Rot3.h:215
\n+
static Rot3 Pitch(double t)
Positive pitch is up (increasing aircraft altitude).See ypr.
Definition Rot3.h:177
\n+
static Rot3 RzRyRx(const Vector &xyz, OptionalJacobian< 3, 3 > H=boost::none)
Rotations around Z, Y, then X axes as in http://en.wikipedia.org/wiki/Rotation_matrix,...
Definition Rot3.h:160
\n+
Vector3 localCayley(const Rot3 &other) const
Inverse of retractCayley.
Definition Rot3.h:360
\n+
static Rot3 Quaternion(double w, double x, double y, double z)
Create from Quaternion coefficients.
Definition Rot3.h:204
\n+
Rot3 conjugate(const Rot3 &cRb) const
Conjugation: given a rotation acting in frame B, compute rotation c1Rc2 acting in a frame C.
Definition Rot3.h:321
\n+
static Rot3 Rodrigues(double wx, double wy, double wz)
Rodrigues' formula to compute an incremental rotation.
Definition Rot3.h:251
\n+
Rot3 inverse() const
inverse of a rotation
Definition Rot3.h:308
\n+
Rot3(const SO3 &R)
Constructor from an SO3 instance.
Definition Rot3.h:121
\n+
static Rot3 Expmap(const Vector3 &v, OptionalJacobian< 3, 3 > H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates using Rodrigues' formula.
Definition Rot3.h:374
\n+
static Rot3 Ypr(double y, double p, double r, OptionalJacobian< 3, 1 > Hy=boost::none, OptionalJacobian< 3, 1 > Hp=boost::none, OptionalJacobian< 3, 1 > Hr=boost::none)
Returns rotation nRb from body to nav frame.
Definition Rot3.h:196
\n+
CoordinatesMode
The method retract() is used to map from the tangent space back to the manifold.
Definition Rot3.h:339
\n+
@ CAYLEY
Retract and localCoordinates using the Cayley transform.
Definition Rot3.h:342
\n+
@ EXPMAP
Use the Lie group exponential map to retract.
Definition Rot3.h:340
\n+
Rot3(const Eigen::MatrixBase< Derived > &R)
Constructor from a rotation matrix Version for generic matrices.
Definition Rot3.h:101
\n+
Definition Rot3.h:349
\n+
Definition Rot3.h:399
\n+\n+
MatrixNN matrix_
Rotation matrix.
Definition SOn.h:62
\n+
const MatrixNN & matrix() const
Return matrix.
Definition SOn.h:155
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const
Return unit-norm Vector.
Definition Unit3.cpp:151
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,468 +1,543 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-VectorValues.h\n+Rot3.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-23#include \n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-26\n-27#include \n-28\n-29\n-30#include \n-31#include \n-32#include \n+22// \\callgraph\n+23\n+24#pragma once\n+25\n+26#include \n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\b3_\b._\bh>\n+29#include \n+30#include // Get GTSAM_USE_QUATERNIONS macro\n+31\n+32#include \n 33\n-34namespace _\bg_\bt_\bs_\ba_\bm {\n-35\n-_\b7_\b4 class GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs {\n-75 protected:\n-76 typedef _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bT_\bh_\bi_\bs;\n-_\b7_\b7 typedef _\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b> _\bV_\ba_\bl_\bu_\be_\bs;\n-_\b7_\b8 _\bV_\ba_\bl_\bu_\be_\bs _\bv_\ba_\bl_\bu_\be_\bs_\b_;\n-79\n-80 public:\n-_\b8_\b1 typedef Values::iterator _\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b8_\b2 typedef Values::const_iterator _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br;\n-_\b8_\b3 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-_\b8_\b4 typedef _\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be;\n-_\b8_\b5 typedef _\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be _\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br;\n-_\b8_\b6 typedef std::map _\bD_\bi_\bm_\bs;\n+34// You can override the default coordinate mode using this flag\n+35#ifndef ROT3_DEFAULT_COORDINATES_MODE\n+36 #ifdef GTSAM_USE_QUATERNIONS\n+37 // Exponential map is very cheap for quaternions\n+38 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::EXPMAP\n+39 #else\n+40 // If user doesn't require GTSAM_ROT3_EXPMAP in cmake when building\n+41 #ifndef GTSAM_ROT3_EXPMAP\n+42 // For rotation matrices, the Cayley transform is a fast retract alternative\n+43 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::CAYLEY\n+44 #else\n+45 #define ROT3_DEFAULT_COORDINATES_MODE Rot3::EXPMAP\n+46 #endif\n+47 #endif\n+48#endif\n+49\n+50namespace _\bg_\bt_\bs_\ba_\bm {\n+51\n+_\b5_\b8class GTSAM_EXPORT _\bR_\bo_\bt_\b3 : public _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n+59 private:\n+60\n+61#ifdef GTSAM_USE_QUATERNIONS\n+63 gtsam::Quaternion quaternion_;\n+64#else\n+65 _\bS_\bO_\b3 rot_;\n+66#endif\n+67\n+68 public:\n+71\n+73 _\bR_\bo_\bt_\b3();\n+74\n+81 _\bR_\bo_\bt_\b3(const _\bP_\bo_\bi_\bn_\bt_\b3& col1, const _\bP_\bo_\bi_\bn_\bt_\b3& col2, const _\bP_\bo_\bi_\bn_\bt_\b3& col3);\n+82\n+84 _\bR_\bo_\bt_\b3(double R11, double R12, double R13,\n+85 double R21, double R22, double R23,\n+86 double R31, double R32, double R33);\n 87\n-90\n-_\b9_\b2 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs() {}\n-93\n-_\b9_\b5 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(std::initializer_list> init)\n-96 : values_(init.begin(), init.end()) {}\n-97\n-100 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& first, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& second);\n-101\n-103 template\n-_\b1_\b0_\b4 explicit _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const CONTAINER& c) : values_(c.begin(), c.end()) {}\n-105\n-_\b1_\b0_\b7 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) : values_(c.values_) {}\n-108\n-110 template\n-_\b1_\b1_\b1 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(ITERATOR first, ITERATOR last) : values_(first, last) {}\n-112\n-114 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const Vector& c, const Dims& dims);\n-115\n-117 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs(const Vector& c, const _\bS_\bc_\ba_\bt_\bt_\be_\br& scatter);\n-118\n-120 static _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs Zero(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& other);\n-121\n-125\n-_\b1_\b2_\b7 size_t _\bs_\bi_\bz_\be() const { return values_.size(); }\n-128\n-_\b1_\b3_\b0 size_t _\bd_\bi_\bm(_\bK_\be_\by j) const { return at(j).rows(); }\n-131\n-_\b1_\b3_\b3 bool _\be_\bx_\bi_\bs_\bt_\bs(_\bK_\be_\by j) const { return find(j) != end(); }\n-134\n-_\b1_\b3_\b9 Vector& _\ba_\bt(_\bK_\be_\by j) {\n-140 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br item = find(j);\n-141 if (item == end())\n-142 throw std::out_of_range(\n-143 \"Requested variable '\" + DefaultKeyFormatter(j) + \"' is not in this\n-VectorValues.\");\n-144 else\n-145 return item->second;\n-146 }\n-147\n-_\b1_\b5_\b2 const Vector& _\ba_\bt(_\bK_\be_\by j) const {\n-153 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br item = find(j);\n-154 if (item == end())\n-155 throw std::out_of_range(\n-156 \"Requested variable '\" + DefaultKeyFormatter(j) + \"' is not in this\n-VectorValues.\");\n-157 else\n-158 return item->second;\n-159 }\n-160\n-_\b1_\b6_\b3 Vector& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bK_\be_\by j) { return at(j); }\n-164\n-_\b1_\b6_\b7 const Vector& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b](_\bK_\be_\by j) const { return at(j); }\n-168\n-172 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& update(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& values);\n-173\n-178 iterator insert(const std::pair& key_value);\n-179\n-184 template\n-_\b1_\b8_\b5 inline std::pair _\be_\bm_\bp_\bl_\ba_\bc_\be(_\bK_\be_\by j, Args&&...\n-args) {\n-186#if ! defined(GTSAM_USE_TBB) || defined (TBB_GREATER_EQUAL_2020)\n-187 return values_.emplace(std::piecewise_construct, std::forward_as_tuple(j),\n-std::forward_as_tuple(args...));\n-188#else\n-189 return values_.insert(std::make_pair(j, Vector(std::forward\n-(args)...)));\n-190#endif\n-191 }\n-192\n-_\b1_\b9_\b7 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bi_\bn_\bs_\be_\br_\bt(_\bK_\be_\by j, const Vector& value) {\n-198 return insert(std::make_pair(j, value));\n-199 }\n-200\n-203 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& insert(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& values);\n-204\n-_\b2_\b0_\b9 inline std::pair _\bt_\br_\by_\bI_\bn_\bs_\be_\br_\bt(_\bK_\be_\by j, const Vector& value) {\n-210#ifdef TBB_GREATER_EQUAL_2020\n-211 return values_.emplace(j, value);\n-212#else\n-213 return values_.insert(std::make_pair(j, value));\n-214#endif\n-215 }\n-216\n-_\b2_\b1_\b9 void _\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn(_\bK_\be_\by j, const Vector& value) {\n-220 if (!tryInsert(j, value).second) {\n-221 (*this)[j] = value;\n-222 }\n+95 template \n+96#ifdef GTSAM_USE_QUATERNIONS\n+97 explicit _\bR_\bo_\bt_\b3(const Eigen::MatrixBase& R) {\n+98 quaternion_ = Matrix3(R);\n+99 }\n+100#else\n+_\b1_\b0_\b1 explicit _\bR_\bo_\bt_\b3(const Eigen::MatrixBase& R) : rot_(R) {\n+102 }\n+103#endif\n+104\n+109#ifdef GTSAM_USE_QUATERNIONS\n+110 explicit _\bR_\bo_\bt_\b3(const Matrix3& R) : quaternion_(R) {}\n+111#else\n+_\b1_\b1_\b2 explicit _\bR_\bo_\bt_\b3(const Matrix3& R) : rot_(R) {}\n+113#endif\n+114\n+118#ifdef GTSAM_USE_QUATERNIONS\n+119 explicit _\bR_\bo_\bt_\b3(const _\bS_\bO_\b3& R) : quaternion_(R.matrix()) {}\n+120#else\n+_\b1_\b2_\b1 explicit _\bR_\bo_\bt_\b3(const _\bS_\bO_\b3& R) : rot_(R) {}\n+122#endif\n+123\n+128 _\bR_\bo_\bt_\b3(const Quaternion& q);\n+129 _\bR_\bo_\bt_\b3(double w, double x, double y, double z) : _\bR_\bo_\bt_\b3(Quaternion(w, x, y, z))\n+{}\n+130\n+137 static Rot3 Random(std::mt19937 & rng);\n+138\n+_\b1_\b4_\b0 virtual _\b~_\bR_\bo_\bt_\b3() {}\n+141\n+142 /* Static member function to generate some well known rotations */\n+143\n+145 static _\bR_\bo_\bt_\b3 Rx(double t);\n+146\n+148 static _\bR_\bo_\bt_\b3 Ry(double t);\n+149\n+151 static _\bR_\bo_\bt_\b3 Rz(double t);\n+152\n+154 static _\bR_\bo_\bt_\b3 RzRyRx(double x, double y, double z,\n+155 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hx = boost::none,\n+156 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hy = boost::none,\n+157 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hz = boost::none);\n+158\n+_\b1_\b6_\b0 inline static _\bR_\bo_\bt_\b3 _\bR_\bz_\bR_\by_\bR_\bx(const Vector& xyz,\n+161 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::none) {\n+162 assert(xyz.size() == 3);\n+163 _\bR_\bo_\bt_\b3 out;\n+164 if (H) {\n+165 Vector3 Hx, Hy, Hz;\n+166 out = RzRyRx(xyz(0), xyz(1), xyz(2), Hx, Hy, Hz);\n+167 (*H) << Hx, Hy, Hz;\n+168 } else\n+169 out = RzRyRx(xyz(0), xyz(1), xyz(2));\n+170 return out;\n+171 }\n+172\n+_\b1_\b7_\b4 static _\bR_\bo_\bt_\b3 _\bY_\ba_\bw (double t) { return Rz(t); }\n+175\n+_\b1_\b7_\b7 static _\bR_\bo_\bt_\b3 _\bP_\bi_\bt_\bc_\bh(double t) { return Ry(t); }\n+178\n+180 static _\bR_\bo_\bt_\b3 Roll (double t) { return Rx(t); }\n+181\n+_\b1_\b9_\b6 static _\bR_\bo_\bt_\b3 _\bY_\bp_\br(double y, double p, double r,\n+197 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hy = boost::none,\n+198 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hp = boost::none,\n+199 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b1_\b> Hr = boost::none) {\n+200 return RzRyRx(r, p, y, Hr, Hp, Hy);\n+201 }\n+202\n+_\b2_\b0_\b4 static _\bR_\bo_\bt_\b3 _\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn(double w, double x, double y, double z) {\n+205 gtsam::Quaternion q(w, x, y, z);\n+206 return _\bR_\bo_\bt_\b3(q);\n+207 }\n+208\n+_\b2_\b1_\b5 static _\bR_\bo_\bt_\b3 _\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be(const _\bP_\bo_\bi_\bn_\bt_\b3& axis, double angle) {\n+216 // Convert to unit vector.\n+217 Vector3 unitAxis = _\bU_\bn_\bi_\bt_\b3(axis)._\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br();\n+218#ifdef GTSAM_USE_QUATERNIONS\n+219 return gtsam::Quaternion(Eigen::AngleAxis(angle, unitAxis));\n+220#else\n+221 return _\bR_\bo_\bt_\b3(SO3::AxisAngle(unitAxis,angle));\n+222#endif\n 223 }\n 224\n-_\b2_\b2_\b6 void _\be_\br_\ba_\bs_\be(_\bK_\be_\by var) {\n-227 if (values_.unsafe_erase(var) == 0)\n-228 throw std::invalid_argument(\"Requested variable '\" +\n-229 DefaultKeyFormatter(var) +\n-230 \"', is not in this VectorValues.\");\n-231 }\n-232\n-234 void setZero();\n-235\n-_\b2_\b3_\b6 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() { return values_.begin(); }\n-_\b2_\b3_\b7 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bb_\be_\bg_\bi_\bn() const { return values_.begin(); }\n-_\b2_\b3_\b8 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() { return values_.end(); }\n-_\b2_\b3_\b9 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\be_\bn_\bd() const { return values_.end(); }\n-240\n-_\b2_\b4_\b5 _\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bf_\bi_\bn_\bd(_\bK_\be_\by j) { return values_.find(j); }\n-246\n-_\b2_\b5_\b1 _\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br _\bf_\bi_\bn_\bd(_\bK_\be_\by j) const { return values_.find(j); }\n-252\n-254 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream&, const\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs&);\n-255\n-257 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"VectorValues\",\n-258 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const;\n-259\n-261 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x, double tol = 1e-9) const;\n-262\n-266\n-268 Vector vector() const;\n-269\n-271 template \n-_\b2_\b7_\b2 Vector _\bv_\be_\bc_\bt_\bo_\br(const CONTAINER& keys) const {\n-273 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx totalDim = 0;\n-274 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bc_\bo_\bn_\bs_\bt_\b _\bV_\be_\bc_\bt_\bo_\br_\b*_\b> items;\n-275 items.reserve(keys.end() - keys.begin());\n-276 for (_\bK_\be_\by key : keys) {\n-277 const Vector* v = &at(key);\n-278 totalDim += v->size();\n-279 items.push_back(v);\n-280 }\n-281\n-282 Vector result(totalDim);\n-283 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx pos = 0;\n-284 for (const Vector* v : items) {\n-285 result.segment(pos, v->size()) = *v;\n-286 pos += v->size();\n-287 }\n+_\b2_\b3_\b1 static _\bR_\bo_\bt_\b3 _\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be(const _\bU_\bn_\bi_\bt_\b3& axis, double angle) {\n+232 return AxisAngle(axis._\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br(),angle);\n+233 }\n+234\n+_\b2_\b4_\b0 static _\bR_\bo_\bt_\b3 _\bR_\bo_\bd_\br_\bi_\bg_\bu_\be_\bs(const Vector3& w) {\n+241 return Rot3::Expmap(w);\n+242 }\n+243\n+_\b2_\b5_\b1 static _\bR_\bo_\bt_\b3 _\bR_\bo_\bd_\br_\bi_\bg_\bu_\be_\bs(double wx, double wy, double wz) {\n+252 return Rodrigues(Vector3(wx, wy, wz));\n+253 }\n+254\n+256 static _\bR_\bo_\bt_\b3 AlignPair(const _\bU_\bn_\bi_\bt_\b3& axis, const _\bU_\bn_\bi_\bt_\b3& a_p, const _\bU_\bn_\bi_\bt_\b3&\n+b_p);\n+257\n+259 static _\bR_\bo_\bt_\b3 AlignTwoPairs(const _\bU_\bn_\bi_\bt_\b3& a_p, const _\bU_\bn_\bi_\bt_\b3& b_p, //\n+260 const _\bU_\bn_\bi_\bt_\b3& a_q, const _\bU_\bn_\bi_\bt_\b3& b_q);\n+261\n+_\b2_\b7_\b1 static _\bR_\bo_\bt_\b3 _\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo(const Matrix3& M) { return _\bR_\bo_\bt_\b3(SO3::ClosestTo(M)); }\n+272\n+283 _\bR_\bo_\bt_\b3 normalized() const;\n+284\n 288\n-289 return result;\n-290 }\n+290 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\") const;\n 291\n-293 Vector vector(const Dims& dims) const;\n+293 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bR_\bo_\bt_\b3& p, double tol = 1e-9) const;\n 294\n-296 void swap(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& other);\n-297\n-299 bool hasSameStructure(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs other) const;\n-300\n-304\n-308 double _\bd_\bo_\bt(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& v) const;\n-309\n-311 double norm() const;\n-312\n-314 double squaredNorm() const;\n+298\n+_\b3_\b0_\b0 inline static _\bR_\bo_\bt_\b3 _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n+301 return _\bR_\bo_\bt_\b3();\n+302 }\n+303\n+305 _\bR_\bo_\bt_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bR_\bo_\bt_\b3& R2) const;\n+306\n+_\b3_\b0_\b8 _\bR_\bo_\bt_\b3 _\bi_\bn_\bv_\be_\br_\bs_\be() const {\n+309#ifdef GTSAM_USE_QUATERNIONS\n+310 return _\bR_\bo_\bt_\b3(quaternion_.inverse());\n+311#else\n+312 return _\bR_\bo_\bt_\b3(rot_._\bm_\ba_\bt_\br_\bi_\bx().transpose());\n+313#endif\n+314 }\n 315\n-318 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-319\n-322 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs add(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-323\n-326 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& operator+=(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c);\n-327\n-330 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& addInPlace(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c);\n-331\n-333 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& addInPlace_(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c);\n-334\n-337 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-338\n-341 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs subtract(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-342\n-344 friend GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const double a, const\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &v);\n+_\b3_\b2_\b1 _\bR_\bo_\bt_\b3 _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be(const _\bR_\bo_\bt_\b3& cRb) const {\n+322 // TODO: do more efficiently by using Eigen or quaternion properties\n+323 return cRb * (*this) * cRb._\bi_\bn_\bv_\be_\br_\bs_\be();\n+324 }\n+325\n+329\n+_\b3_\b3_\b9 enum _\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\bM_\bo_\bd_\be {\n+_\b3_\b4_\b0 _\bE_\bX_\bP_\bM_\bA_\bP,\n+341#ifndef GTSAM_USE_QUATERNIONS\n+_\b3_\b4_\b2 _\bC_\bA_\bY_\bL_\bE_\bY,\n+343#endif\n+344 };\n 345\n-347 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs scale(const double a) const;\n-348\n-350 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& operator*=(double alpha);\n-351\n-353 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& scaleInPlace(double alpha);\n-354\n-356\n-359\n-365 std::string _\bh_\bt_\bm_\bl(\n-366 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n-367\n+346#ifndef GTSAM_USE_QUATERNIONS\n+347\n+348 // Cayley chart around origin\n+_\b3_\b4_\b9 struct _\bC_\ba_\by_\bl_\be_\by_\bC_\bh_\ba_\br_\bt {\n+350 static _\bR_\bo_\bt_\b3 Retract(const Vector3& v, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::\n+none);\n+351 static Vector3 Local(const _\bR_\bo_\bt_\b3& r, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::\n+none);\n+352 };\n+353\n+_\b3_\b5_\b5 _\bR_\bo_\bt_\b3 _\br_\be_\bt_\br_\ba_\bc_\bt_\bC_\ba_\by_\bl_\be_\by(const Vector& omega) const {\n+356 return compose(CayleyChart::Retract(omega));\n+357 }\n+358\n+_\b3_\b6_\b0 Vector3 _\bl_\bo_\bc_\ba_\bl_\bC_\ba_\by_\bl_\be_\by(const _\bR_\bo_\bt_\b3& other) const {\n+361 return CayleyChart::Local(between(other));\n+362 }\n+363\n+364#endif\n+365\n 369\n-370 private:\n-_\b3_\b7_\b2 friend class boost::serialization::access;\n-373 template\n-374 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-375 ar & BOOST_SERIALIZATION_NVP(values_);\n-376 }\n-377 }; // VectorValues definition\n-378\n-380 template<>\n-_\b3_\b8_\b1 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-382 };\n-383\n-384} // \\namespace gtsam\n-_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-A thin wrapper around std::vector that uses a custom allocator.\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b._\bh\n-Variable ordering for the elimination algorithm.\n-_\bS_\bc_\ba_\bt_\bt_\be_\br_\b._\bh\n-Maps global variable indices to slot indices.\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+_\b3_\b7_\b4 static _\bR_\bo_\bt_\b3 _\bE_\bx_\bp_\bm_\ba_\bp(const Vector3& v, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H = boost::none)\n+{\n+375 if(H) *H = Rot3::ExpmapDerivative(v);\n+376#ifdef GTSAM_USE_QUATERNIONS\n+377 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(v);\n+378#else\n+379 return _\bR_\bo_\bt_\b3(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bS_\bO_\b3_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(v));\n+380#endif\n+381 }\n+382\n+387 static Vector3 Logmap(const _\bR_\bo_\bt_\b3& R, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H = boost::\n+none);\n+388\n+390 static Matrix3 ExpmapDerivative(const Vector3& x);\n+391\n+393 static Matrix3 LogmapDerivative(const Vector3& x);\n+394\n+_\b3_\b9_\b6 Matrix3 _\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const { return matrix(); }\n+397\n+398 // Chart at origin, depends on compile-time flag\n+ROT3_DEFAULT_COORDINATES_MODE\n+_\b3_\b9_\b9 struct _\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn {\n+400 static _\bR_\bo_\bt_\b3 Retract(const Vector3& v, ChartJacobian H = boost::none);\n+401 static Vector3 Local(const _\bR_\bo_\bt_\b3& r, ChartJacobian H = boost::none);\n+402 };\n+403\n+404 using _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp<_\bR_\bo_\bt_\b3, 3>::inverse; // version with derivative\n+405\n+409\n+413 _\bP_\bo_\bi_\bn_\bt_\b3 rotate(const _\bP_\bo_\bi_\bn_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H1 = boost::none,\n+414 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H2 = boost::none) const;\n+415\n+417 _\bP_\bo_\bi_\bn_\bt_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bP_\bo_\bi_\bn_\bt_\b3& p) const;\n+418\n+420 _\bP_\bo_\bi_\bn_\bt_\b3 unrotate(const _\bP_\bo_\bi_\bn_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H1 = boost::none,\n+421 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b3_\b> H2=boost::none) const;\n+422\n+426\n+428 _\bU_\bn_\bi_\bt_\b3 rotate(const _\bU_\bn_\bi_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b3_\b> HR = boost::none,\n+429 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b2_\b> Hp = boost::none) const;\n+430\n+432 _\bU_\bn_\bi_\bt_\b3 unrotate(const _\bU_\bn_\bi_\bt_\b3& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b3_\b> HR = boost::none,\n+433 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b2_\b> Hp = boost::none) const;\n+434\n+436 _\bU_\bn_\bi_\bt_\b3 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bU_\bn_\bi_\bt_\b3& p) const;\n+437\n+441\n+443 Matrix3 matrix() const;\n+444\n+448 Matrix3 transpose() const;\n+449\n+451 _\bP_\bo_\bi_\bn_\bt_\b3 _\bc_\bo_\bl_\bu_\bm_\bn(int index) const;\n+452\n+453 _\bP_\bo_\bi_\bn_\bt_\b3 r1() const;\n+454 _\bP_\bo_\bi_\bn_\bt_\b3 r2() const;\n+455 _\bP_\bo_\bi_\bn_\bt_\b3 r3() const;\n+456\n+461 Vector3 xyz(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::none) const;\n+462\n+467 Vector3 ypr(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::none) const;\n+468\n+473 Vector3 rpy(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::none) const;\n+474\n+481 double roll(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H = boost::none) const;\n+482\n+489 double pitch(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H = boost::none) const;\n+490\n+497 double yaw(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H = boost::none) const;\n+498\n+502\n+511 std::pair axisAngle() const;\n+512\n+516 gtsam::Quaternion toQuaternion() const;\n+517\n+518#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+526 Vector GTSAM_DEPRECATED quaternion() const;\n+527#endif\n+528\n+534 _\bR_\bo_\bt_\b3 slerp(double t, const _\bR_\bo_\bt_\b3& other) const;\n+535\n+537 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &os, const _\bR_\bo_\bt_\b3&\n+p);\n+538\n+540\n+541 private:\n+_\b5_\b4_\b3 friend class boost::serialization::access;\n+544 template \n+545 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+546#ifndef GTSAM_USE_QUATERNIONS\n+547 Matrix3& M = rot_._\bm_\ba_\bt_\br_\bi_\bx_\b_;\n+548 ar& boost::serialization::make_nvp(\"rot11\", M(0, 0));\n+549 ar& boost::serialization::make_nvp(\"rot12\", M(0, 1));\n+550 ar& boost::serialization::make_nvp(\"rot13\", M(0, 2));\n+551 ar& boost::serialization::make_nvp(\"rot21\", M(1, 0));\n+552 ar& boost::serialization::make_nvp(\"rot22\", M(1, 1));\n+553 ar& boost::serialization::make_nvp(\"rot23\", M(1, 2));\n+554 ar& boost::serialization::make_nvp(\"rot31\", M(2, 0));\n+555 ar& boost::serialization::make_nvp(\"rot32\", M(2, 1));\n+556 ar& boost::serialization::make_nvp(\"rot33\", M(2, 2));\n+557#else\n+558 ar& boost::serialization::make_nvp(\"w\", quaternion_.w());\n+559 ar& boost::serialization::make_nvp(\"x\", quaternion_.x());\n+560 ar& boost::serialization::make_nvp(\"y\", quaternion_.y());\n+561 ar& boost::serialization::make_nvp(\"z\", quaternion_.z());\n+562#endif\n+563 }\n+564\n+565#ifdef GTSAM_USE_QUATERNIONS\n+566 // only align if quaternion, Matrix3 has no alignment requirements\n+567 public:\n+568 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+569#endif\n+570 };\n+571\n+_\b5_\b7_\b3 using _\bR_\bo_\bt_\b3_\bV_\be_\bc_\bt_\bo_\br = std::vector >;\n+574\n+585 GTSAM_EXPORT std::pair _\bR_\bQ(\n+586 const Matrix3& A, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b9_\b> H = boost::none);\n+587\n+588 template<>\n+_\b5_\b8_\b9 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\bo_\bt_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+590\n+591 template<>\n+_\b5_\b9_\b2 struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+593\n+594} // namespace gtsam\n+595\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn_\b._\bh\n+Lie Group wrapper for Eigen Quaternions.\n+_\bS_\bO_\b3_\b._\bh\n+3*3 matrix representation of SO(3)\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bt_\bm_\bl\n-string html(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n-const DiscreteValues::Names &names)\n-Free version of html.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:134\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bQ\n+pair< Matrix3, Vector3 > RQ(const Matrix3 &A, OptionalJacobian< 3, 9 > H)\n+[RQ] receives a 3 by 3 matrix and returns an upper triangular matrix R and 3\n+rotation angles correspo...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.cpp:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< Rot3, Eigen::aligned_allocator< Rot3 > > Rot3Vector\n+std::vector of Rot3s, mainly for wrapper\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:573\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-Errors operator+(const Errors &a, const Errors &b)\n-Addition.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bl_\bu_\bm_\bn\n+const MATRIX::ConstColXpr column(const MATRIX &A, size_t j)\n+Extracts a column view from a matrix that avoids a copy.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:211\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n Point2 operator*(double s, const Point2 &p)\n multiply with scalar\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-Errors operator-(const Errors &a, const Errors &b)\n-Subtraction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n+Vector3 Point3\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point3 to Vector3...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bc_\bu_\br_\br_\be_\bn_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConcurrentMap.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+A CRTP helper class that implements Lie group methods Prerequisites: methods\n+operator*,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Both LieGroupTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bc_\ba_\bt_\bt_\be_\br\n-Scatter is an intermediate data structure used when building a HessianFactor\n-incrementally,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Scatter.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n-value_type KeyValuePair\n-Typedef to pair\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bn_\bd\n-const_iterator end() const\n-Iterator over variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:239\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bv_\ba_\bl_\bu_\be_\b__\bt_\by_\bp_\be\n-Values::value_type value_type\n-Typedef to pair\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Values::const_iterator const_iterator\n-Const iterator over vector values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bn_\bd\n-iterator end()\n-Iterator over variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:238\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-Values::iterator iterator\n-Iterator over vector values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n-iterator insert(Key j, const Vector &value)\n-Insert a vector value with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:197\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues(const CONTAINER &c)\n-Create from another container holding pair.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bv_\ba_\bl_\bu_\be_\bs_\b_\n-Values values_\n-Vectors making up this VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bD_\bi_\bm_\bs\n-std::map< Key, size_t > Dims\n-Keyed vector dimensions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-ConcurrentMap< Key, Vector > Values\n-Collection of Vectors making up a VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-Vector & operator[](Key j)\n-Read/write access to the vector value with key j, throws std::out_of_range if j\n-does not exist,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:163\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bm_\bp_\bl_\ba_\bc_\be\n-std::pair< VectorValues::iterator, bool > emplace(Key j, Args &&... args)\n-Emplace a vector value with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bf_\bi_\bn_\bd\n-iterator find(Key j)\n-Return the iterator corresponding to the requested key, or end() if no variable\n-is present with this ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:245\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bd_\bi_\bm\n-size_t dim(Key j) const\n-Return the dimension of variable j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-Number of variables stored.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:127\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b[_\b]\n-const Vector & operator[](Key j) const\n-Access the vector value with key j (const version), throws std::out_of_range if\n-j does not exist,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(Key j) const\n-Check whether a variable with key j exists.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:133\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues()\n-Default constructor creates an empty VectorValues.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bf_\bi_\bn_\bd\n-const_iterator find(Key j) const\n-Return the iterator corresponding to the requested key, or end() if no variable\n-is present with this ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:251\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues(ITERATOR first, ITERATOR last)\n-Create from a pair of iterators over pair.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-const Vector & at(Key j) const\n-Access the vector value with key j (const version), throws std::out_of_range if\n-j does not exist,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:152\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-Vector vector(const CONTAINER &keys) const\n-Access a vector that is a subset of relevant keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:272\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b__\bo_\br_\b__\ba_\bs_\bs_\bi_\bg_\bn\n-void insert_or_assign(Key j, const Vector &value)\n-insert_or_assign that mimics the STL map insert_or_assign - if the value\n-already exists,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:219\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-const_iterator begin() const\n-Iterator over variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:237\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-Vector & at(Key j)\n-Read/write access to the vector value with key j, throws std::out_of_range if j\n-does not exist,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:139\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\br_\ba_\bs_\be\n-void erase(Key var)\n-Erase the vector with the given key, or throw std::out_of_range if it does not\n-exist.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:226\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues(std::initializer_list< std::pair< Key, Vector > > init)\n-Construct from initializer list.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bt_\br_\by_\bI_\bn_\bs_\be_\br_\bt\n-std::pair< iterator, bool > tryInsert(Key j, const Vector &value)\n-insert that mimics the STL map insert - if the value already exists, the map is\n-not modified and an i...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:209\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues(const VectorValues &c)\n-Implicit copy constructor to specialize the explicit constructor from any\n-container.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:107\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bb_\be_\bg_\bi_\bn\n-iterator begin()\n-Iterator over variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:236\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bK_\be_\by_\bV_\ba_\bl_\bu_\be_\bP_\ba_\bi_\br\n-A key-value pair, which you get by dereferencing iterators.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static Rot3 Identity()\n+identity rotation for group operation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:300\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt_\bC_\ba_\by_\bl_\be_\by\n+Rot3 retractCayley(const Vector &omega) const\n+Retraction from R^3 to Rot3 manifold using the Cayley transform.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:355\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n+Matrix3 AdjointMap() const\n+Calculate Adjoint map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:396\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\bl_\bo_\bs_\be_\bs_\bt_\bT_\bo\n+static Rot3 ClosestTo(const Matrix3 &M)\n+Static, named constructor that finds Rot3 element closest to M in Frobenius\n+norm.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:271\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\b~_\bR_\bo_\bt_\b3\n+virtual ~Rot3()\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bY_\ba_\bw\n+static Rot3 Yaw(double t)\n+Positive yaw is to right (as in aircraft heading). See ypr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be\n+static Rot3 AxisAngle(const Unit3 &axis, double angle)\n+Convert from axis/angle representation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:231\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3(const Matrix3 &R)\n+Constructor from a rotation matrix Overload version for Matrix3 to avoid\n+casting in quaternion mode.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:112\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bo_\bd_\br_\bi_\bg_\bu_\be_\bs\n+static Rot3 Rodrigues(const Vector3 &w)\n+Rodrigues' formula to compute an incremental rotation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:240\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bA_\bx_\bi_\bs_\bA_\bn_\bg_\bl_\be\n+static Rot3 AxisAngle(const Point3 &axis, double angle)\n+Convert from axis/angle representation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:215\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bP_\bi_\bt_\bc_\bh\n+static Rot3 Pitch(double t)\n+Positive pitch is up (increasing aircraft altitude).See ypr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:177\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bz_\bR_\by_\bR_\bx\n+static Rot3 RzRyRx(const Vector &xyz, OptionalJacobian< 3, 3 > H=boost::none)\n+Rotations around Z, Y, then X axes as in http://en.wikipedia.org/wiki/\n+Rotation_matrix,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:160\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\ba_\by_\bl_\be_\by\n+Vector3 localCayley(const Rot3 &other) const\n+Inverse of retractCayley.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:360\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bQ_\bu_\ba_\bt_\be_\br_\bn_\bi_\bo_\bn\n+static Rot3 Quaternion(double w, double x, double y, double z)\n+Create from Quaternion coefficients.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:204\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be\n+Rot3 conjugate(const Rot3 &cRb) const\n+Conjugation: given a rotation acting in frame B, compute rotation c1Rc2 acting\n+in a frame C.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:321\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bo_\bd_\br_\bi_\bg_\bu_\be_\bs\n+static Rot3 Rodrigues(double wx, double wy, double wz)\n+Rodrigues' formula to compute an incremental rotation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:251\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bi_\bn_\bv_\be_\br_\bs_\be\n+Rot3 inverse() const\n+inverse of a rotation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:308\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3(const SO3 &R)\n+Constructor from an SO3 instance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:121\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n+static Rot3 Expmap(const Vector3 &v, OptionalJacobian< 3, 3 > H=boost::none)\n+Exponential map at identity - create a rotation from canonical coordinates\n+using Rodrigues' formula.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:374\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bY_\bp_\br\n+static Rot3 Ypr(double y, double p, double r, OptionalJacobian< 3, 1 >\n+Hy=boost::none, OptionalJacobian< 3, 1 > Hp=boost::none, OptionalJacobian< 3, 1\n+> Hr=boost::none)\n+Returns rotation nRb from body to nav frame.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:196\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs_\bM_\bo_\bd_\be\n+CoordinatesMode\n+The method retract() is used to map from the tangent space back to the\n+manifold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:339\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\bA_\bY_\bL_\bE_\bY\n+@ CAYLEY\n+Retract and localCoordinates using the Cayley transform.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:342\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bE_\bX_\bP_\bM_\bA_\bP\n+@ EXPMAP\n+Use the Lie group exponential map to retract.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:340\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3(const Eigen::MatrixBase< Derived > &R)\n+Constructor from a rotation matrix Version for generic matrices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\ba_\by_\bl_\be_\by_\bC_\bh_\ba_\br_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:349\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:399\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b<_\b _\b3_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\b_\n+MatrixNN matrix_\n+Rotation matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx\n+const MatrixNN & matrix() const\n+Return matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br\n+Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const\n+Return unit-norm Vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:151\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bR_\bo_\bt_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00713.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00638.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/HessianFactor-inl.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n \n
\n \n-
HessianFactor-inl.h File Reference
\n+
ISAM.h File Reference
\n
\n
\n \n-

Contains the HessianFactor class, a general quadratic factor. \n+

Incremental update functionality (iSAM) for BayesTree. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+

\n+Classes

class  gtsam::ISAM< BAYESTREE >
 A Bayes tree with an update methods that implements the iSAM algorithm. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Contains the HessianFactor class, a general quadratic factor.

\n-
Author
Richard Roberts
\n-
Date
Dec 8, 2010
\n+

Incremental update functionality (iSAM) for BayesTree.

\n+
Author
Michael Kaess
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,26 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-HessianFactor-inl.h File Reference\n-Contains the HessianFactor class, a general quadratic factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ISAM.h File Reference\n+Incremental update functionality (iSAM) for BayesTree. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b _\b>\n+\u00a0 A Bayes tree with an update methods that implements the iSAM algorithm.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Contains the HessianFactor class, a general quadratic factor.\n+Incremental update functionality (iSAM) for BayesTree.\n Author\n- Richard Roberts\n- Date\n- Dec 8, 2010\n+ Michael Kaess\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n+ * _\bI_\bS_\bA_\bM_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00713_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00035_source.html", "comments": ["Files 74% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/HessianFactor-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastMap.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
HessianFactor-inl.h
\n+
FastMap.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21namespace gtsam {
\n-
22
\n-
23 /* ************************************************************************* */
\n-
24 template<typename KEYS>
\n-
\n-
25 HessianFactor::HessianFactor(const KEYS& keys, const SymmetricBlockMatrix& augmentedInformation) :
\n-
26 GaussianFactor(keys), info_(augmentedInformation)
\n-
27 {
\n-
28 // Check number of variables
\n-
29 if((DenseIndex)Base::keys_.size() != augmentedInformation.nBlocks() - 1)
\n-
30 throw std::invalid_argument(
\n-
31 "Error in HessianFactor constructor input. Number of provided keys plus\\n"
\n-
32 "one for the information vector must equal the number of provided matrix blocks. ");
\n-
33
\n-
34 // Check RHS dimension
\n-
35 if(augmentedInformation.getDim(augmentedInformation.nBlocks() - 1) != 1)
\n-
36 throw std::invalid_argument(
\n-
37 "Error in HessianFactor constructor input. The last provided matrix block\\n"
\n-
38 "must be the information vector, but the last provided block had more than one column.");
\n-
39 }
\n-
\n-
40
\n-
41}
\n+\n+
22#include <boost/serialization/nvp.hpp>
\n+
23#include <boost/serialization/map.hpp>
\n+
24#include <map>
\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
36template<typename KEY, typename VALUE>
\n+
\n+
37class FastMap : public std::map<KEY, VALUE, std::less<KEY>,
\n+
38 typename internal::FastDefaultAllocator<std::pair<const KEY, VALUE> >::type> {
\n+
39
\n+
40public:
\n+
41
\n+
42 typedef std::map<KEY, VALUE, std::less<KEY>,
\n+\n+
44
\n+\n+
47
\n+
49 template<typename INPUTITERATOR>
\n+
50 explicit FastMap(INPUTITERATOR first, INPUTITERATOR last) : Base(first, last) {}
\n+
51
\n+
53 FastMap(const FastMap<KEY,VALUE>& x) : Base(x) {}
\n+
54
\n+
56 FastMap(const Base& x) : Base(x) {}
\n+
57
\n+
\n+
59 operator std::map<KEY,VALUE>() const {
\n+
60 return std::map<KEY,VALUE>(this->begin(), this->end());
\n+
61 }
\n+
\n+
62
\n+
64 bool insert2(const KEY& key, const VALUE& val) { return Base::insert(std::make_pair(key, val)).second; }
\n+
65
\n+
67 bool exists(const KEY& e) const { return this->find(e) != this->end(); }
\n+
68
\n+
69private:
\n+\n+
72 template<class ARCHIVE>
\n+
73 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
74 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
75 }
\n+
76};
\n+
\n+
77
\n+
78}
\n+
An easy way to control which allocator is used for Fast* collections.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
size_t size() const
Definition Factor.h:157
\n-
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n-
Matrix augmentedInformation() const override
Return the augmented information matrix represented by this GaussianFactor.
Definition HessianFactor.cpp:282
\n-
HessianFactor()
default constructor for I/O
Definition HessianFactor.cpp:77
\n+
Default allocator for list, map, and set types.
Definition FastDefaultAllocator.h:50
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+
FastMap(const Base &x)
Copy constructor from the base map class.
Definition FastMap.h:56
\n+
FastMap(INPUTITERATOR first, INPUTITERATOR last)
Constructor from a range, passes through to base class.
Definition FastMap.h:50
\n+
bool insert2(const KEY &key, const VALUE &val)
Handy 'insert' function for Matlab wrapper.
Definition FastMap.h:64
\n+
FastMap(const FastMap< KEY, VALUE > &x)
Copy constructor from another FastMap.
Definition FastMap.h:53
\n+
FastMap()
Default constructor.
Definition FastMap.h:46
\n+
bool exists(const KEY &e) const
Handy 'exists' function.
Definition FastMap.h:67
\n+
friend class boost::serialization::access
Serialization function.
Definition FastMap.h:71
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-HessianFactor-inl.h\n+FastMap.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,65 +16,97 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21namespace _\bg_\bt_\bs_\ba_\bm {\n-22\n-23 /* *************************************************************************\n-*/\n-24 template\n-_\b2_\b5 _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const KEYS& keys, const _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx&\n-augmentedInformation) :\n-26 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(keys), info_(augmentedInformation)\n-27 {\n-28 // Check number of variables\n-29 if((_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)_\bB_\ba_\bs_\be_\b:_\b:_\bk_\be_\by_\bs_\b_._\bs_\bi_\bz_\be() != _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn.nBlocks() - 1)\n-30 throw std::invalid_argument(\n-31 \"Error in HessianFactor constructor input. Number of provided keys plus\\n\"\n-32 \"one for the information vector must equal the number of provided matrix\n-blocks. \");\n-33\n-34 // Check RHS dimension\n-35 if(_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn.getDim(_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn.nBlocks() - 1) != 1)\n-36 throw std::invalid_argument(\n-37 \"Error in HessianFactor constructor input. The last provided matrix block\\n\"\n-38 \"must be the information vector, but the last provided block had more than\n-one column.\");\n-39 }\n-40\n-41}\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh>\n+22#include \n+23#include \n+24#include \n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+36template\n+_\b3_\b7class _\bF_\ba_\bs_\bt_\bM_\ba_\bp : public std::map,\n+38 typename internal::FastDefaultAllocator >::type>\n+{\n+39\n+40public:\n+41\n+42 typedef std::map,\n+43 typename _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b<_\bs_\bt_\bd_\b:_\b:_\bp_\ba_\bi_\br_\b<_\bc_\bo_\bn_\bs_\bt_\b _\bK_\bE_\bY_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b> >::type\n+> Base;\n+44\n+_\b4_\b6 _\bF_\ba_\bs_\bt_\bM_\ba_\bp() {}\n+47\n+49 template\n+_\b5_\b0 explicit _\bF_\ba_\bs_\bt_\bM_\ba_\bp(INPUTITERATOR first, INPUTITERATOR last) : Base(first,\n+last) {}\n+51\n+_\b5_\b3 _\bF_\ba_\bs_\bt_\bM_\ba_\bp(const _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\bE_\bY_\b,_\bV_\bA_\bL_\bU_\bE_\b>& x) : Base(x) {}\n+54\n+_\b5_\b6 _\bF_\ba_\bs_\bt_\bM_\ba_\bp(const Base& x) : Base(x) {}\n+57\n+_\b5_\b9 operator std::map() const {\n+60 return std::map(this->begin(), this->end());\n+61 }\n+62\n+_\b6_\b4 bool _\bi_\bn_\bs_\be_\br_\bt_\b2(const KEY& key, const VALUE& val) { return Base::insert(std::\n+make_pair(key, val)).second; }\n+65\n+_\b6_\b7 bool _\be_\bx_\bi_\bs_\bt_\bs(const KEY& e) const { return this->find(e) != this->end(); }\n+68\n+69private:\n+_\b7_\b1 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+72 template\n+73 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+74 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n+75 }\n+76};\n+77\n+78}\n+_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br_\b._\bh\n+An easy way to control which allocator is used for Fast* collections.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-An abstract virtual base class for JacobianFactor and HessianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n-Matrix augmentedInformation() const override\n-Return the augmented information matrix represented by this GaussianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:282\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-HessianFactor()\n-default constructor for I/O\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bF_\ba_\bs_\bt_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bA_\bl_\bl_\bo_\bc_\ba_\bt_\bo_\br\n+Default allocator for list, map, and set types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastDefaultAllocator.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap(const Base &x)\n+Copy constructor from the base map class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap(INPUTITERATOR first, INPUTITERATOR last)\n+Constructor from a range, passes through to base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt_\b2\n+bool insert2(const KEY &key, const VALUE &val)\n+Handy 'insert' function for Matlab wrapper.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap(const FastMap< KEY, VALUE > &x)\n+Copy constructor from another FastMap.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n+bool exists(const KEY &e) const\n+Handy 'exists' function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:71\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bl_\b._\bh\n+ * _\bb_\ba_\bs_\be\n+ * _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00716_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01388_source.html", "comments": ["Files 92% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianEliminationTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicEliminationTree.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
GaussianEliminationTree.h
\n+
SymbolicEliminationTree.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-\n+\n+\n+\n
24
\n
25namespace gtsam {
\n
26
\n
\n-
27 class GTSAM_EXPORT GaussianEliminationTree :
\n-
28 public EliminationTree<GaussianBayesNet, GaussianFactorGraph>
\n+
27 class GTSAM_EXPORT SymbolicEliminationTree :
\n+
28 public EliminationTree<SymbolicBayesNet, SymbolicFactorGraph>
\n
29 {
\n
30 public:
\n-\n-\n-
33 typedef boost::shared_ptr<This> shared_ptr;
\n+\n+\n+
33 typedef boost::shared_ptr<This> shared_ptr;
\n
34
\n-\n-
44 const VariableIndex& structure, const Ordering& order);
\n-
45
\n-\n-
52 const Ordering& order);
\n-
53
\n-
55 bool equals(const This& other, double tol = 1e-9) const;
\n-
56
\n-
57 private:
\n-
58
\n-
59 friend class ::EliminationTreeTester;
\n-
60
\n-
61 };
\n-
\n-
62
\n-
63}
\n-\n-
Chordal Bayes Net, the result of eliminating a factor graph.
\n-
Linear Factor Graph where all factors are Gaussians.
\n+\n+
41 const VariableIndex& structure, const Ordering& order);
\n+
42
\n+\n+
48 const Ordering& order);
\n+
49
\n+
51 bool equals(const This& other, double tol = 1e-9) const;
\n+
52
\n+
53 private:
\n+
54
\n+\n+
57
\n+
58 friend class ::EliminationTreeTester;
\n+
59
\n+
60 };
\n+
\n+
61
\n+
63template<>
\n+
\n+
64struct traits<SymbolicEliminationTree> : public Testable<SymbolicEliminationTree> {
\n+
65};
\n+
\n+
66
\n+
67} //\\ namespace gtsam
\n+\n+\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n
Definition Ordering.h:34
\n
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n-
Definition GaussianEliminationTree.h:29
\n-
GaussianEliminationTree This
This class.
Definition GaussianEliminationTree.h:32
\n-
EliminationTree< GaussianBayesNet, GaussianFactorGraph > Base
Base class.
Definition GaussianEliminationTree.h:31
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition GaussianEliminationTree.h:33
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
Definition SymbolicEliminationTree.h:29
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition SymbolicEliminationTree.h:33
\n+
EliminationTree< SymbolicBayesNet, SymbolicFactorGraph > Base
Base class.
Definition SymbolicEliminationTree.h:31
\n+
SymbolicEliminationTree This
This class.
Definition SymbolicEliminationTree.h:32
\n+
Symbolic Factor Graph.
Definition SymbolicFactorGraph.h:64
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianEliminationTree.h\n+SymbolicEliminationTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,77 +16,89 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n 23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n 24\n 25namespace _\bg_\bt_\bs_\ba_\bm {\n 26\n-_\b2_\b7 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n-28 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+_\b2_\b7 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n+28 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n 29 {\n 30 public:\n-_\b3_\b1 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n-_\b3_\b2 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+_\b3_\b1 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b,_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n+_\b3_\b2 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n _\b3_\b3 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n 34\n-43 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n-44 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n-45\n-51 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n-52 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n-53\n-55 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n-56\n-57 private:\n-58\n-59 friend class ::EliminationTreeTester;\n-60\n-61 };\n-62\n-63}\n+40 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n+41 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+42\n+47 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n+48 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+49\n+51 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n+52\n+53 private:\n+54\n+56 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be() {}\n+57\n+58 friend class ::EliminationTreeTester;\n+59\n+60 };\n+61\n+63template<>\n+_\b6_\b4struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be> : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+65};\n+66\n+67} //\\ namespace gtsam\n _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-Chordal Bayes Net, the result of eliminating a factor graph.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n An elimination tree is a data structure used intermediately during elimination.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n The VariableIndex class computes and stores the block column structure of a\n factor graph.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-GaussianEliminationTree This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n-EliminationTree< GaussianBayesNet, GaussianFactorGraph > Base\n-Base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n boost::shared_ptr< This > shared_ptr\n Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n+EliminationTree< SymbolicBayesNet, SymbolicFactorGraph > Base\n+Base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+SymbolicEliminationTree This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+Symbolic Factor Graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:64\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00728.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01061.html", "comments": ["Files 96% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PowerMethod.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearISAM.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
PowerMethod.h File Reference
\n+
NonlinearISAM.h File Reference
\n
\n
\n \n-

Power method for fast eigenvalue and eigenvector computation. \n-More...

\n-\n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::PowerMethod< Operator >
 Compute maximum Eigenpair with power method. More...
class  gtsam::NonlinearISAM
 Wrapper class to manage ISAM in a nonlinear context. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Power method for fast eigenvalue and eigenvector computation.

\n-
Date
Sept 2020
\n-
Author
Jing Wu
\n+
Date
Jan 19, 2010
\n+
Author
Viorela Ila and Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,25 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-PowerMethod.h File Reference\n-Power method for fast eigenvalue and eigenvector computation. _\bM_\bo_\br_\be_\b._\b._\b.\n+NonlinearISAM.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b<_\b _\bO_\bp_\be_\br_\ba_\bt_\bo_\br_\b _\b>\n-\u00a0 Compute maximum Eigenpair with power method. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n+\u00a0 Wrapper class to manage _\bI_\bS_\bA_\bM in a nonlinear context. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Power method for fast eigenvalue and eigenvector computation.\n Date\n- Sept 2020\n+ Jan 19, 2010\n Author\n- Jing Wu\n+ Viorela Ila and Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00728_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01229_source.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/PowerMethod.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/BinaryMeasurement.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
PowerMethod.h
\n+
BinaryMeasurement.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22#include <gtsam/base/Matrix.h>
\n-
23#include <gtsam/base/Vector.h>
\n-
24
\n-
25#include <Eigen/Core>
\n-
26#include <Eigen/Sparse>
\n-
27#include <random>
\n-
28#include <vector>
\n-
29
\n-
30namespace gtsam {
\n-
31
\n-
32using Sparse = Eigen::SparseMatrix<double>;
\n+
12#pragma once
\n+
13
\n+
26#include <gtsam/base/Testable.h>
\n+\n+
28#include <gtsam/inference/Key.h>
\n+\n+
30
\n+
31#include <iostream>
\n+
32#include <vector>
\n
33
\n-
56template <class Operator>
\n-
\n-\n-
58 protected:
\n-
63 const Operator &A_;
\n-
64
\n-
65 const int dim_; // dimension of Matrix A
\n-
66
\n-
67 size_t nrIterations_; // number of iterations
\n-
68
\n-
69 double ritzValue_; // Ritz eigenvalue
\n-
70 Vector ritzVector_; // Ritz eigenvector
\n-
71
\n-
72 public:
\n-
75
\n-
\n-
77 explicit PowerMethod(const Operator &A,
\n-
78 const boost::optional<Vector> initial = boost::none)
\n-
79 : A_(A), dim_(A.rows()), nrIterations_(0) {
\n-
80 Vector x0;
\n-
81 x0 = initial ? initial.get() : Vector::Random(dim_);
\n-
82 x0.normalize();
\n-
83
\n-
84 // initialize Ritz eigen value
\n-
85 ritzValue_ = 0.0;
\n-
86
\n-
87 // initialize Ritz eigen vector
\n-
88 ritzVector_ = powerIteration(x0);
\n-
89 }
\n-
\n-
90
\n-
\n-
95 Vector powerIteration(const Vector &x) const {
\n-
96 Vector y = A_ * x;
\n-
97 y.normalize();
\n-
98 return y;
\n-
99 }
\n-
\n-
100
\n-
105 Vector powerIteration() const { return powerIteration(ritzVector_); }
\n-
106
\n-
\n-
112 bool converged(double tol) const {
\n-
113 const Vector x = ritzVector_;
\n-
114 // store the Ritz eigen value
\n-
115 const double ritzValue = x.dot(A_ * x);
\n-
116 const double error = (A_ * x - ritzValue * x).norm();
\n-
117 return error < tol;
\n-
118 }
\n-
\n-
119
\n-
121 size_t nrIterations() const { return nrIterations_; }
\n-
122
\n-
\n-
129 bool compute(size_t maxIterations, double tol) {
\n-
130 // Starting
\n-
131 bool isConverged = false;
\n-
132
\n-
133 for (size_t i = 0; i < maxIterations && !isConverged; i++) {
\n-
134 ++nrIterations_;
\n-
135 // update the ritzVector after power iteration
\n-
136 ritzVector_ = powerIteration();
\n-
137 // update the ritzValue
\n-
138 ritzValue_ = ritzVector_.dot(A_ * ritzVector_);
\n-
139 isConverged = converged(tol);
\n-
140 }
\n-
141
\n-
142 return isConverged;
\n-
143 }
\n-
\n-
144
\n-
146 double eigenvalue() const { return ritzValue_; }
\n-
147
\n-
149 Vector eigenvector() const { return ritzVector_; }
\n-
150};
\n-
\n-
151
\n-
152} // namespace gtsam
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
typedef and functions to augment Eigen's VectorXd
\n+
34namespace gtsam {
\n+
35
\n+
\n+
36template <class T> class BinaryMeasurement : public Factor {
\n+
37 // Check that T type is testable
\n+
38 BOOST_CONCEPT_ASSERT((IsTestable<T>));
\n+
39
\n+
40public:
\n+
41 // shorthand for a smart pointer to a measurement
\n+
42 using shared_ptr = typename boost::shared_ptr<BinaryMeasurement>;
\n+
43
\n+
44private:
\n+
45 T measured_;
\n+
46 SharedNoiseModel noiseModel_;
\n+
47
\n+
48 public:
\n+
49 BinaryMeasurement(Key key1, Key key2, const T &measured,
\n+
50 const SharedNoiseModel &model = nullptr)
\n+
51 : Factor(std::vector<Key>({key1, key2})),
\n+
52 measured_(measured),
\n+
53 noiseModel_(model) {}
\n+
54
\n+
56 virtual ~BinaryMeasurement() {}
\n+
57
\n+
60
\n+
61 Key key1() const { return keys_[0]; }
\n+
62 Key key2() const { return keys_[1]; }
\n+
63 const T &measured() const { return measured_; }
\n+
64 const SharedNoiseModel &noiseModel() const { return noiseModel_; }
\n+
65
\n+
69
\n+
\n+
70 void print(const std::string &s, const KeyFormatter &keyFormatter =
\n+
71 DefaultKeyFormatter) const override {
\n+
72 std::cout << s << "BinaryMeasurement(" << keyFormatter(this->key1()) << ","
\n+
73 << keyFormatter(this->key2()) << ")\\n";
\n+
74 traits<T>::Print(measured_, " measured: ");
\n+
75 this->noiseModel_->print(" noise model: ");
\n+
76 }
\n+
\n+
77
\n+
78 bool equals(const BinaryMeasurement &expected, double tol = 1e-9) const {
\n+
79 const BinaryMeasurement<T> *e =
\n+
80 dynamic_cast<const BinaryMeasurement<T> *>(&expected);
\n+
81 return e != nullptr && Factor::equals(*e) &&
\n+
82 traits<T>::Equals(this->measured_, e->measured_, tol) &&
\n+
83 noiseModel_->equals(*expected.noiseModel());
\n+
84 }
\n+
86};
\n+
\n+
87} // namespace gtsam
\n+
Concept check for values that can be used in unit tests.
\n+\n+
The base class for all factors.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Compute maximum Eigenpair with power method.
Definition PowerMethod.h:57
\n-
Vector powerIteration(const Vector &x) const
Run power iteration to get ritzVector with previous ritzVector x, and return A * x / || A * x ||.
Definition PowerMethod.h:95
\n-
Vector eigenvector() const
Return the eigenvector.
Definition PowerMethod.h:149
\n-
const Operator & A_
Const reference to an externally-held matrix whose minimum-eigenvalue we want to compute.
Definition PowerMethod.h:63
\n-
double eigenvalue() const
Return the eigenvalue.
Definition PowerMethod.h:146
\n-
PowerMethod(const Operator &A, const boost::optional< Vector > initial=boost::none)
Construct from the aim matrix and intial ritz vector.
Definition PowerMethod.h:77
\n-
Vector powerIteration() const
Run power iteration to get ritzVector with previous ritzVector x, and return A * x / || A * x ||.
Definition PowerMethod.h:105
\n-
bool converged(double tol) const
After Perform power iteration on a single Ritz value, check if the Ritz residual for the current Ritz...
Definition PowerMethod.h:112
\n-
bool compute(size_t maxIterations, double tol)
Start the power/accelerated iteration, after performing the power/accelerated iteration,...
Definition PowerMethod.h:129
\n-
size_t nrIterations() const
Return the number of iterations.
Definition PowerMethod.h:121
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
Definition Factor.h:68
\n+
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n+
Factor()
Default constructor for I/O.
Definition Factor.h:91
\n+
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n+
Definition BinaryMeasurement.h:36
\n+
void print(const std::string &s, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition BinaryMeasurement.h:70
\n+
virtual ~BinaryMeasurement()
Destructor.
Definition BinaryMeasurement.h:56
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,158 +1,138 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-PowerMethod.h\n+BinaryMeasurement.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010-2020, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-24\n-25#include \n-26#include \n-27#include \n-28#include \n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-32using Sparse = Eigen::SparseMatrix;\n+12#pragma once\n+13\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n+30\n+31#include \n+32#include \n 33\n-56template \n-_\b5_\b7class _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd {\n-58 protected:\n-_\b6_\b3 const Operator &_\bA_\b_;\n-64\n-65 const int dim_; // dimension of Matrix A\n-66\n-67 size_t nrIterations_; // number of iterations\n-68\n-69 double ritzValue_; // Ritz eigenvalue\n-70 Vector ritzVector_; // Ritz eigenvector\n-71\n-72 public:\n-75\n-_\b7_\b7 explicit _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd(const Operator &A,\n-78 const boost::optional initial = boost::none)\n-79 : _\bA_\b_(A), dim_(A.rows()), nrIterations_(0) {\n-80 Vector x0;\n-81 x0 = initial ? initial.get() : Vector::Random(dim_);\n-82 x0.normalize();\n-83\n-84 // initialize Ritz eigen value\n-85 ritzValue_ = 0.0;\n-86\n-87 // initialize Ritz eigen vector\n-88 ritzVector_ = _\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(x0);\n-89 }\n-90\n-_\b9_\b5 Vector _\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(const Vector &x) const {\n-96 Vector y = _\bA_\b_ * x;\n-97 y.normalize();\n-98 return y;\n-99 }\n-100\n-_\b1_\b0_\b5 Vector _\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn() const { return _\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(ritzVector_); }\n-106\n-_\b1_\b1_\b2 bool _\bc_\bo_\bn_\bv_\be_\br_\bg_\be_\bd(double tol) const {\n-113 const Vector x = ritzVector_;\n-114 // store the Ritz eigen value\n-115 const double ritzValue = x.dot(_\bA_\b_ * x);\n-116 const double error = (_\bA_\b_ * x - ritzValue * x).norm();\n-117 return error < tol;\n-118 }\n-119\n-_\b1_\b2_\b1 size_t _\bn_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs() const { return nrIterations_; }\n-122\n-_\b1_\b2_\b9 bool _\bc_\bo_\bm_\bp_\bu_\bt_\be(size_t maxIterations, double tol) {\n-130 // Starting\n-131 bool isConverged = false;\n-132\n-133 for (size_t i = 0; i < maxIterations && !isConverged; i++) {\n-134 ++nrIterations_;\n-135 // update the ritzVector after power iteration\n-136 ritzVector_ = _\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn();\n-137 // update the ritzValue\n-138 ritzValue_ = ritzVector_.dot(_\bA_\b_ * ritzVector_);\n-139 isConverged = _\bc_\bo_\bn_\bv_\be_\br_\bg_\be_\bd(tol);\n-140 }\n-141\n-142 return isConverged;\n-143 }\n-144\n-_\b1_\b4_\b6 double _\be_\bi_\bg_\be_\bn_\bv_\ba_\bl_\bu_\be() const { return ritzValue_; }\n-147\n-_\b1_\b4_\b9 Vector _\be_\bi_\bg_\be_\bn_\bv_\be_\bc_\bt_\bo_\br() const { return ritzVector_; }\n-150};\n-151\n-152} // namespace gtsam\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n+34namespace _\bg_\bt_\bs_\ba_\bm {\n+35\n+_\b3_\b6template class _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt : public _\bF_\ba_\bc_\bt_\bo_\br {\n+37 // Check that T type is testable\n+38 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bT_\b>));\n+39\n+40public:\n+41 // shorthand for a smart pointer to a measurement\n+42 using shared_ptr = typename boost::shared_ptr;\n+43\n+44private:\n+45 T measured_;\n+46 _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl noiseModel_;\n+47\n+48 public:\n+49 _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt(_\bK_\be_\by key1, _\bK_\be_\by key2, const T &measured,\n+50 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model = nullptr)\n+51 : _\bF_\ba_\bc_\bt_\bo_\br(std::vector({key1, key2})),\n+52 measured_(measured),\n+53 noiseModel_(model) {}\n+54\n+_\b5_\b6 virtual _\b~_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt() {}\n+57\n+60\n+61 _\bK_\be_\by key1() const { return _\bk_\be_\by_\bs_\b_[0]; }\n+62 _\bK_\be_\by key2() const { return _\bk_\be_\by_\bs_\b_[1]; }\n+63 const T &measured() const { return measured_; }\n+64 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &noiseModel() const { return noiseModel_; }\n+65\n+69\n+_\b7_\b0 void _\bp_\br_\bi_\bn_\bt(const std::string &s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter =\n+71 DefaultKeyFormatter) const override {\n+72 std::cout << s << \"BinaryMeasurement(\" << keyFormatter(this->key1()) << \",\"\n+73 << keyFormatter(this->key2()) << \")\\n\";\n+74 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(measured_, \" measured: \");\n+75 this->noiseModel_->print(\" noise model: \");\n+76 }\n+77\n+78 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt &expected, double tol = 1e-9) const {\n+79 const _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b<_\bT_\b> *e =\n+80 dynamic_cast *>(&expected);\n+81 return e != nullptr && _\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e) &&\n+82 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_, e->measured_, tol) &&\n+83 noiseModel_->equals(*expected.noiseModel());\n+84 }\n+86};\n+87} // namespace gtsam\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bK_\be_\by_\b._\bh\n+_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+The base class for all factors.\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd\n-Compute maximum Eigenpair with power method.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn\n-Vector powerIteration(const Vector &x) const\n-Run power iteration to get ritzVector with previous ritzVector x, and return A\n-* x / || A * x ||.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\be_\bi_\bg_\be_\bn_\bv_\be_\bc_\bt_\bo_\br\n-Vector eigenvector() const\n-Return the eigenvector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:149\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bA_\b_\n-const Operator & A_\n-Const reference to an externally-held matrix whose minimum-eigenvalue we want\n-to compute.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\be_\bi_\bg_\be_\bn_\bv_\ba_\bl_\bu_\be\n-double eigenvalue() const\n-Return the eigenvalue.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:146\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd\n-PowerMethod(const Operator &A, const boost::optional< Vector > initial=boost::\n-none)\n-Construct from the aim matrix and intial ritz vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bp_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn\n-Vector powerIteration() const\n-Run power iteration to get ritzVector with previous ritzVector x, and return A\n-* x / || A * x ||.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bg_\be_\bd\n-bool converged(double tol) const\n-After Perform power iteration on a single Ritz value, check if the Ritz\n-residual for the current Ritz...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be\n-bool compute(size_t maxIterations, double tol)\n-Start the power/accelerated iteration, after performing the power/accelerated\n-iteration,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bn_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n-size_t nrIterations() const\n-Return the number of iterations.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:121\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A testable concept check that should be placed in applicable unit tests and in\n+generic algorithms.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n+KeyVector keys_\n+The keys involved in this factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+Factor()\n+Default constructor for I/O.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const This &other, double tol=1e-9) const\n+check equality\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryMeasurement.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryMeasurement.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b:_\b:_\b~_\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n+virtual ~BinaryMeasurement()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BinaryMeasurement.h:56\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n+ * _\bs_\bf_\bm\n+ * _\bB_\bi_\bn_\ba_\br_\by_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00734_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00974_source.html", "comments": ["Files 93% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/ConjugateGradientSolver.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
ConjugateGradientSolver.h
\n+
ImuBias.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-
23
\n-
24namespace gtsam {
\n-
25
\n-
\n-\n-
30
\n-
31public:
\n-\n-
33 typedef boost::shared_ptr<ConjugateGradientParameters> shared_ptr;
\n+
18#pragma once
\n+
19
\n+\n+
21#include <gtsam/base/VectorSpace.h>
\n+
22#include <iosfwd>
\n+
23#include <boost/serialization/nvp.hpp>
\n+
24
\n+
25namespace gtsam {
\n+
26
\n+
28namespace imuBias {
\n+
29
\n+
\n+
30class GTSAM_EXPORT ConstantBias {
\n+
31private:
\n+
32 Vector3 biasAcc_;
\n+
33 Vector3 biasGyro_;
\n
34
\n-\n-\n-
37 size_t reset_;
\n-
38 double epsilon_rel_;
\n-
39 double epsilon_abs_;
\n-
40
\n-
41 /* Matrix Operation Kernel */
\n-
\n-\n-
43 GTSAM = 0,
\n-
44 } blas_kernel_ ;
\n-
\n+
35public:
\n+
37 static const size_t dimension = 6;
\n+
38
\n+
41
\n+
42 ConstantBias() :
\n+
43 biasAcc_(0.0, 0.0, 0.0), biasGyro_(0.0, 0.0, 0.0) {
\n+
44 }
\n
45
\n-\n-
47 : minIterations_(1), maxIterations_(500), reset_(501), epsilon_rel_(1e-3),
\n-
48 epsilon_abs_(1e-3), blas_kernel_(GTSAM) {}
\n+
46 ConstantBias(const Vector3& biasAcc, const Vector3& biasGyro) :
\n+
47 biasAcc_(biasAcc), biasGyro_(biasGyro) {
\n+
48 }
\n
49
\n-
50 ConjugateGradientParameters(size_t minIterations, size_t maxIterations, size_t reset,
\n-
51 double epsilon_rel, double epsilon_abs, BLASKernel blas)
\n-
52 : minIterations_(minIterations), maxIterations_(maxIterations), reset_(reset),
\n-
53 epsilon_rel_(epsilon_rel), epsilon_abs_(epsilon_abs), blas_kernel_(blas) {}
\n-
54
\n-
55 ConjugateGradientParameters(const ConjugateGradientParameters &p)
\n-
56 : Base(p), minIterations_(p.minIterations_), maxIterations_(p.maxIterations_), reset_(p.reset_),
\n-
57 epsilon_rel_(p.epsilon_rel_), epsilon_abs_(p.epsilon_abs_), blas_kernel_(GTSAM) {}
\n-
58
\n-
59 /* general interface */
\n-
60 inline size_t minIterations() const { return minIterations_; }
\n-
61 inline size_t maxIterations() const { return maxIterations_; }
\n-
62 inline size_t reset() const { return reset_; }
\n-
63 inline double epsilon() const { return epsilon_rel_; }
\n-
64 inline double epsilon_rel() const { return epsilon_rel_; }
\n-
65 inline double epsilon_abs() const { return epsilon_abs_; }
\n-
66
\n-
67 inline size_t getMinIterations() const { return minIterations_; }
\n-
68 inline size_t getMaxIterations() const { return maxIterations_; }
\n-
69 inline size_t getReset() const { return reset_; }
\n-
70 inline double getEpsilon() const { return epsilon_rel_; }
\n-
71 inline double getEpsilon_rel() const { return epsilon_rel_; }
\n-
72 inline double getEpsilon_abs() const { return epsilon_abs_; }
\n-
73
\n-
74 inline void setMinIterations(size_t value) { minIterations_ = value; }
\n-
75 inline void setMaxIterations(size_t value) { maxIterations_ = value; }
\n-
76 inline void setReset(size_t value) { reset_ = value; }
\n-
77 inline void setEpsilon(double value) { epsilon_rel_ = value; }
\n-
78 inline void setEpsilon_rel(double value) { epsilon_rel_ = value; }
\n-
79 inline void setEpsilon_abs(double value) { epsilon_abs_ = value; }
\n-
80
\n+
50 explicit ConstantBias(const Vector6& v) :
\n+
51 biasAcc_(v.head<3>()), biasGyro_(v.tail<3>()) {
\n+
52 }
\n+
53
\n+
55
\n+
\n+
57 Vector6 vector() const {
\n+
58 Vector6 v;
\n+
59 v << biasAcc_, biasGyro_;
\n+
60 return v;
\n+
61 }
\n+
\n+
62
\n+
\n+
64 const Vector3& accelerometer() const {
\n+
65 return biasAcc_;
\n+
66 }
\n+
\n+
67
\n+
\n+
69 const Vector3& gyroscope() const {
\n+
70 return biasGyro_;
\n+
71 }
\n+
\n+
72
\n+
\n+
74 Vector3 correctAccelerometer(const Vector3& measurement,
\n+
75 OptionalJacobian<3, 6> H1 = boost::none,
\n+
76 OptionalJacobian<3, 3> H2 = boost::none) const {
\n+
77 if (H1) (*H1) << -I_3x3, Z_3x3;
\n+
78 if (H2) (*H2) << I_3x3;
\n+
79 return measurement - biasAcc_;
\n+
80 }
\n+
\n
81
\n-
82 void print() const { Base::print(); }
\n-
83 void print(std::ostream &os) const override;
\n-
84
\n-
85 static std::string blasTranslator(const BLASKernel k) ;
\n-
86 static BLASKernel blasTranslator(const std::string &s) ;
\n-
87};
\n-
\n-
88
\n-
89/*
\n-
90 * A template for the linear preconditioned conjugate gradient method.
\n-
91 * System class should support residual(v, g), multiply(v,Av), scal(alpha,v), dot(v,v), axpy(alpha,x,y)
\n-
92 * leftPrecondition(v, L^{-1}v, rightPrecondition(v, L^{-T}v) where preconditioner M = L*L^T
\n-
93 * Note that the residual is in the preconditioned domain. Refer to Section 9.2 of Saad's book.
\n-
94 *
\n-
95 ** REFERENCES:
\n-
96 * [1] Y. Saad, "Preconditioned Iterations," in Iterative Methods for Sparse Linear Systems,
\n-
97 * 2nd ed. SIAM, 2003, ch. 9, sec. 2, pp.276-281.
\n-
98 */
\n-
99template<class S, class V>
\n-
100V preconditionedConjugateGradient(const S &system, const V &initial,
\n-
101 const ConjugateGradientParameters &parameters) {
\n-
102
\n-
103 V estimate, residual, direction, q1, q2;
\n-
104 estimate = residual = direction = q1 = q2 = initial;
\n-
105
\n-
106 system.residual(estimate, q1); /* q1 = b-Ax */
\n-
107 system.leftPrecondition(q1, residual); /* r = L^{-1} (b-Ax) */
\n-
108 system.rightPrecondition(residual, direction);/* p = L^{-T} r */
\n-
109
\n-
110 double currentGamma = system.dot(residual, residual), prevGamma, alpha, beta;
\n-
111
\n-
112 const size_t iMaxIterations = parameters.maxIterations(),
\n-
113 iMinIterations = parameters.minIterations(),
\n-
114 iReset = parameters.reset() ;
\n-
115 const double threshold = std::max(parameters.epsilon_abs(),
\n-
116 parameters.epsilon() * parameters.epsilon() * currentGamma);
\n-
117
\n-
118 if (parameters.verbosity() >= ConjugateGradientParameters::COMPLEXITY )
\n-
119 std::cout << "[PCG] epsilon = " << parameters.epsilon()
\n-
120 << ", max = " << parameters.maxIterations()
\n-
121 << ", reset = " << parameters.reset()
\n-
122 << ", ||r0||^2 = " << currentGamma
\n-
123 << ", threshold = " << threshold << std::endl;
\n-
124
\n-
125 size_t k;
\n-
126 for ( k = 1 ; k <= iMaxIterations && (currentGamma > threshold || k <= iMinIterations) ; k++ ) {
\n-
127
\n-
128 if ( k % iReset == 0 ) {
\n-
129 system.residual(estimate, q1); /* q1 = b-Ax */
\n-
130 system.leftPrecondition(q1, residual); /* r = L^{-1} (b-Ax) */
\n-
131 system.rightPrecondition(residual, direction); /* p = L^{-T} r */
\n-
132 currentGamma = system.dot(residual, residual);
\n-
133 }
\n-
134 system.multiply(direction, q1); /* q1 = A p */
\n-
135 alpha = currentGamma / system.dot(direction, q1); /* alpha = gamma / (p' A p) */
\n-
136 system.axpy(alpha, direction, estimate); /* estimate += alpha * p */
\n-
137 system.leftPrecondition(q1, q2); /* q2 = L^{-1} * q1 */
\n-
138 system.axpy(-alpha, q2, residual); /* r -= alpha * q2 */
\n-
139 prevGamma = currentGamma;
\n-
140 currentGamma = system.dot(residual, residual); /* gamma = |r|^2 */
\n-
141 beta = currentGamma / prevGamma;
\n-
142 system.rightPrecondition(residual, q1); /* q1 = L^{-T} r */
\n-
143 system.scal(beta, direction);
\n-
144 system.axpy(1.0, q1, direction); /* p = q1 + beta * p */
\n-
145
\n-
146 if (parameters.verbosity() >= ConjugateGradientParameters::ERROR )
\n-
147 std::cout << "[PCG] k = " << k
\n-
148 << ", alpha = " << alpha
\n-
149 << ", beta = " << beta
\n-
150 << ", ||r||^2 = " << currentGamma
\n-
151// << "\\nx =\\n" << estimate
\n-
152// << "\\nr =\\n" << residual
\n-
153 << std::endl;
\n-
154 }
\n-
155 if (parameters.verbosity() >= ConjugateGradientParameters::COMPLEXITY )
\n-
156 std::cout << "[PCG] iterations = " << k
\n-
157 << ", ||r||^2 = " << currentGamma
\n-
158 << std::endl;
\n-
159
\n-
160 return estimate;
\n-
161}
\n+
\n+
83 Vector3 correctGyroscope(const Vector3& measurement,
\n+
84 OptionalJacobian<3, 6> H1 = boost::none,
\n+
85 OptionalJacobian<3, 3> H2 = boost::none) const {
\n+
86 if (H1) (*H1) << Z_3x3, -I_3x3;
\n+
87 if (H2) (*H2) << I_3x3;
\n+
88 return measurement - biasGyro_;
\n+
89 }
\n+
\n+
90
\n+
93
\n+
95 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n+
96 const ConstantBias& bias);
\n+
97
\n+
99 void print(const std::string& s = "") const;
\n+
100
\n+
\n+
102 inline bool equals(const ConstantBias& expected, double tol = 1e-5) const {
\n+
103 return equal_with_abs_tol(biasAcc_, expected.biasAcc_, tol)
\n+
104 && equal_with_abs_tol(biasGyro_, expected.biasGyro_, tol);
\n+
105 }
\n+
\n+
106
\n+
110
\n+
\n+\n+
113 return ConstantBias();
\n+
114 }
\n+
\n+
115
\n+
\n+
117 inline ConstantBias operator-() const {
\n+
118 return ConstantBias(-biasAcc_, -biasGyro_);
\n+
119 }
\n+
\n+
120
\n+
\n+
122 ConstantBias operator+(const Vector6& v) const {
\n+
123 return ConstantBias(biasAcc_ + v.head<3>(), biasGyro_ + v.tail<3>());
\n+
124 }
\n+
\n+
125
\n+
\n+\n+
128 return ConstantBias(biasAcc_ + b.biasAcc_, biasGyro_ + b.biasGyro_);
\n+
129 }
\n+
\n+
130
\n+
\n+\n+
133 return ConstantBias(biasAcc_ - b.biasAcc_, biasGyro_ - b.biasGyro_);
\n+
134 }
\n+
\n+
135
\n+
137
\n+
138#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
141 ConstantBias GTSAM_DEPRECATED inverse() { return -(*this); }
\n+
142 ConstantBias GTSAM_DEPRECATED compose(const ConstantBias& q) {
\n+
143 return (*this) + q;
\n+
144 }
\n+
145 ConstantBias GTSAM_DEPRECATED between(const ConstantBias& q) {
\n+
146 return q - (*this);
\n+
147 }
\n+
148 Vector6 GTSAM_DEPRECATED localCoordinates(const ConstantBias& q) {
\n+
149 return (q - (*this)).vector();
\n+
150 }
\n+
151 ConstantBias GTSAM_DEPRECATED retract(const Vector6& v) {
\n+
152 return (*this) + ConstantBias(v);
\n+
153 }
\n+
154 static Vector6 GTSAM_DEPRECATED Logmap(const ConstantBias& p) {
\n+
155 return p.vector();
\n+
156 }
\n+
157 static ConstantBias GTSAM_DEPRECATED Expmap(const Vector6& v) {
\n+
158 return ConstantBias(v);
\n+
159 }
\n+
161#endif
\n
162
\n-
163
\n-
164}
\n-
Some support classes for iterative solvers.
\n+
163private:
\n+
164
\n+
167
\n+
169 friend class boost::serialization::access;
\n+
170 template<class ARCHIVE>
\n+
171 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
172 ar & BOOST_SERIALIZATION_NVP(biasAcc_);
\n+
173 ar & BOOST_SERIALIZATION_NVP(biasGyro_);
\n+
174 }
\n+
175
\n+
176
\n+
177public:
\n+\n+
180
\n+
181}; // ConstantBias class
\n+
\n+
182} // namespace imuBias
\n+
183
\n+
184template<>
\n+
\n+
185struct traits<imuBias::ConstantBias> : public internal::VectorSpace<
\n+
186 imuBias::ConstantBias> {
\n+
187};
\n+
\n+
188
\n+
189} // namespace gtsam
\n+
190
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
Special class for optional Jacobian arguments.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
parameters for the conjugate gradient method
Definition ConjugateGradientSolver.h:29
\n-
size_t minIterations_
minimum number of cg iterations
Definition ConjugateGradientSolver.h:35
\n-
size_t reset_
number of iterations before reset
Definition ConjugateGradientSolver.h:37
\n-
BLASKernel
Definition ConjugateGradientSolver.h:42
\n-
double epsilon_rel_
threshold for relative error decrease
Definition ConjugateGradientSolver.h:38
\n-
size_t maxIterations_
maximum number of cg iterations
Definition ConjugateGradientSolver.h:36
\n-
double epsilon_abs_
threshold for absolute error decrease
Definition ConjugateGradientSolver.h:39
\n-
parameters for iterative linear solvers
Definition IterativeSolver.h:44
\n+
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
VectorSpace provides both Testable and VectorSpaceTraits.
Definition VectorSpace.h:207
\n+
Definition ImuBias.h:30
\n+
const Vector3 & gyroscope() const
get gyroscope bias
Definition ImuBias.h:69
\n+
static ConstantBias Identity()
identity for group operation
Definition ImuBias.h:112
\n+
bool equals(const ConstantBias &expected, double tol=1e-5) const
equality up to tolerance
Definition ImuBias.h:102
\n+
ConstantBias operator-(const ConstantBias &b) const
subtraction
Definition ImuBias.h:132
\n+
Vector3 correctAccelerometer(const Vector3 &measurement, OptionalJacobian< 3, 6 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
Correct an accelerometer measurement using this bias model, and optionally compute Jacobians.
Definition ImuBias.h:74
\n+
ConstantBias operator-() const
inverse
Definition ImuBias.h:117
\n+
Vector3 correctGyroscope(const Vector3 &measurement, OptionalJacobian< 3, 6 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
Correct a gyroscope measurement using this bias model, and optionally compute Jacobians.
Definition ImuBias.h:83
\n+
Vector6 vector() const
return the accelerometer and gyro biases in a single vector
Definition ImuBias.h:57
\n+
ConstantBias operator+(const Vector6 &v) const
addition of vector on right
Definition ImuBias.h:122
\n+
ConstantBias operator+(const ConstantBias &b) const
addition
Definition ImuBias.h:127
\n+
const Vector3 & accelerometer() const
get accelerometer bias
Definition ImuBias.h:64
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,216 +1,245 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ConjugateGradientSolver.h\n+ImuBias.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-_\b2_\b9class GTSAM_EXPORT _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs : public\n-_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n-30\n-31public:\n-32 typedef _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs _\bB_\ba_\bs_\be;\n-33 typedef boost::shared_ptr shared_ptr;\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n+21#include \n+22#include \n+23#include \n+24\n+25namespace _\bg_\bt_\bs_\ba_\bm {\n+26\n+28namespace imuBias {\n+29\n+_\b3_\b0class GTSAM_EXPORT _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs {\n+31private:\n+32 Vector3 biasAcc_;\n+33 Vector3 biasGyro_;\n 34\n-_\b3_\b5 size_t _\bm_\bi_\bn_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs_\b_;\n-_\b3_\b6 size_t _\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs_\b_;\n-_\b3_\b7 size_t _\br_\be_\bs_\be_\bt_\b_;\n-_\b3_\b8 double _\be_\bp_\bs_\bi_\bl_\bo_\bn_\b__\br_\be_\bl_\b_;\n-_\b3_\b9 double _\be_\bp_\bs_\bi_\bl_\bo_\bn_\b__\ba_\bb_\bs_\b_;\n-40\n-41 /* Matrix Operation Kernel */\n-_\b4_\b2 enum _\bB_\bL_\bA_\bS_\bK_\be_\br_\bn_\be_\bl {\n-_\b4_\b3 GTSAM = 0,\n-44 } blas_kernel_ ;\n+35public:\n+_\b3_\b7 static const size_t dimension = 6;\n+38\n+41\n+42 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs() :\n+43 biasAcc_(0.0, 0.0, 0.0), biasGyro_(0.0, 0.0, 0.0) {\n+44 }\n 45\n-46 _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs()\n-47 : minIterations_(1), maxIterations_(500), reset_(501), epsilon_rel_(1e-3),\n-48 epsilon_abs_(1e-3), blas_kernel_(GTSAM) {}\n+46 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs(const Vector3& biasAcc, const Vector3& biasGyro) :\n+47 biasAcc_(biasAcc), biasGyro_(biasGyro) {\n+48 }\n 49\n-50 ConjugateGradientParameters(size_t minIterations, size_t maxIterations,\n-size_t reset,\n-51 double epsilon_rel, double epsilon_abs, BLASKernel blas)\n-52 : minIterations_(minIterations), maxIterations_(maxIterations), reset_\n-(reset),\n-53 epsilon_rel_(epsilon_rel), epsilon_abs_(epsilon_abs), blas_kernel_(blas) {}\n-54\n-55 ConjugateGradientParameters(const ConjugateGradientParameters &p)\n-56 : Base(p), minIterations_(p.minIterations_), maxIterations_\n-(p.maxIterations_), reset_(p.reset_),\n-57 epsilon_rel_(p.epsilon_rel_), epsilon_abs_(p.epsilon_abs_), blas_kernel_\n-(GTSAM) {}\n-58\n-59 /* general interface */\n-60 inline size_t minIterations() const { return minIterations_; }\n-61 inline size_t maxIterations() const { return maxIterations_; }\n-62 inline size_t reset() const { return reset_; }\n-63 inline double epsilon() const { return epsilon_rel_; }\n-64 inline double epsilon_rel() const { return epsilon_rel_; }\n-65 inline double epsilon_abs() const { return epsilon_abs_; }\n-66\n-67 inline size_t getMinIterations() const { return minIterations_; }\n-68 inline size_t getMaxIterations() const { return maxIterations_; }\n-69 inline size_t getReset() const { return reset_; }\n-70 inline double getEpsilon() const { return epsilon_rel_; }\n-71 inline double getEpsilon_rel() const { return epsilon_rel_; }\n-72 inline double getEpsilon_abs() const { return epsilon_abs_; }\n-73\n-74 inline void setMinIterations(size_t value) { minIterations_ = value; }\n-75 inline void setMaxIterations(size_t value) { maxIterations_ = value; }\n-76 inline void setReset(size_t value) { reset_ = value; }\n-77 inline void setEpsilon(double value) { epsilon_rel_ = value; }\n-78 inline void setEpsilon_rel(double value) { epsilon_rel_ = value; }\n-79 inline void setEpsilon_abs(double value) { epsilon_abs_ = value; }\n-80\n+50 explicit ConstantBias(const Vector6& v) :\n+51 biasAcc_(v.head<3>()), biasGyro_(v.tail<3>()) {\n+52 }\n+53\n+55\n+_\b5_\b7 Vector6 _\bv_\be_\bc_\bt_\bo_\br() const {\n+58 Vector6 v;\n+59 v << biasAcc_, biasGyro_;\n+60 return v;\n+61 }\n+62\n+_\b6_\b4 const Vector3& _\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br() const {\n+65 return biasAcc_;\n+66 }\n+67\n+_\b6_\b9 const Vector3& _\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be() const {\n+70 return biasGyro_;\n+71 }\n+72\n+_\b7_\b4 Vector3 _\bc_\bo_\br_\br_\be_\bc_\bt_\bA_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br(const Vector3& measurement,\n+75 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> H1 = boost::none,\n+76 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const {\n+77 if (H1) (*H1) << -I_3x3, Z_3x3;\n+78 if (H2) (*H2) << I_3x3;\n+79 return measurement - biasAcc_;\n+80 }\n 81\n-82 void _\bp_\br_\bi_\bn_\bt() const { Base::print(); }\n-83 void _\bp_\br_\bi_\bn_\bt(std::ostream &os) const override;\n-84\n-85 static std::string blasTranslator(const BLASKernel k) ;\n-86 static BLASKernel blasTranslator(const std::string &s) ;\n-87};\n-88\n-89/*\n-90 * A template for the linear preconditioned conjugate gradient method.\n-91 * System class should support residual(v, g), multiply(v,Av), scal(alpha,v),\n-dot(v,v), axpy(alpha,x,y)\n-92 * leftPrecondition(v, L^{-1}v, rightPrecondition(v, L^{-T}v) where\n-preconditioner M = L*L^T\n-93 * Note that the residual is in the preconditioned domain. Refer to Section\n-9.2 of Saad's book.\n-94 *\n-95 ** REFERENCES:\n-96 * [1] Y. Saad, \"Preconditioned Iterations,\" in Iterative Methods for Sparse\n-Linear Systems,\n-97 * 2nd ed. SIAM, 2003, ch. 9, sec. 2, pp.276-281.\n-98 */\n-99template\n-100V preconditionedConjugateGradient(const S &system, const V &initial,\n-101 const ConjugateGradientParameters ¶meters) {\n-102\n-103 V estimate, residual, direction, q1, q2;\n-104 estimate = residual = direction = q1 = q2 = initial;\n-105\n-106 system.residual(estimate, q1); /* q1 = b-Ax */\n-107 system.leftPrecondition(q1, residual); /* r = L^{-1} (b-Ax) */\n-108 system.rightPrecondition(residual, direction);/* p = L^{-T} r */\n-109\n-110 double currentGamma = system.dot(residual, residual), prevGamma, alpha,\n-beta;\n-111\n-112 const size_t iMaxIterations = parameters.maxIterations(),\n-113 iMinIterations = parameters.minIterations(),\n-114 iReset = parameters.reset() ;\n-115 const double threshold = std::max(parameters.epsilon_abs(),\n-116 parameters.epsilon() * parameters.epsilon() * currentGamma);\n-117\n-118 if (parameters.verbosity() >= ConjugateGradientParameters::COMPLEXITY )\n-119 std::cout << \"[PCG] epsilon = \" << parameters.epsilon()\n-120 << \", max = \" << parameters.maxIterations()\n-121 << \", reset = \" << parameters.reset()\n-122 << \", ||r0||^2 = \" << currentGamma\n-123 << \", threshold = \" << threshold << std::endl;\n-124\n-125 size_t k;\n-126 for ( k = 1 ; k <= iMaxIterations && (currentGamma > threshold || k <=\n-iMinIterations) ; k++ ) {\n-127\n-128 if ( k % iReset == 0 ) {\n-129 system.residual(estimate, q1); /* q1 = b-Ax */\n-130 system.leftPrecondition(q1, residual); /* r = L^{-1} (b-Ax) */\n-131 system.rightPrecondition(residual, direction); /* p = L^{-T} r */\n-132 currentGamma = system.dot(residual, residual);\n-133 }\n-134 system.multiply(direction, q1); /* q1 = A p */\n-135 alpha = currentGamma / system.dot(direction, q1); /* alpha = gamma / (p' A\n-p) */\n-136 system.axpy(alpha, direction, estimate); /* estimate += alpha * p */\n-137 system.leftPrecondition(q1, q2); /* q2 = L^{-1} * q1 */\n-138 system.axpy(-alpha, q2, residual); /* r -= alpha * q2 */\n-139 prevGamma = currentGamma;\n-140 currentGamma = system.dot(residual, residual); /* gamma = |r|^2 */\n-141 beta = currentGamma / prevGamma;\n-142 system.rightPrecondition(residual, q1); /* q1 = L^{-T} r */\n-143 system.scal(beta, direction);\n-144 system.axpy(1.0, q1, direction); /* p = q1 + beta * p */\n-145\n-146 if (parameters.verbosity() >= ConjugateGradientParameters::ERROR )\n-147 std::cout << \"[PCG] k = \" << k\n-148 << \", alpha = \" << alpha\n-149 << \", beta = \" << beta\n-150 << \", ||r||^2 = \" << currentGamma\n-151// << \"\\nx =\\n\" << estimate\n-152// << \"\\nr =\\n\" << residual\n-153 << std::endl;\n-154 }\n-155 if (parameters.verbosity() >= ConjugateGradientParameters::COMPLEXITY )\n-156 std::cout << \"[PCG] iterations = \" << k\n-157 << \", ||r||^2 = \" << currentGamma\n-158 << std::endl;\n-159\n-160 return estimate;\n-161}\n+_\b8_\b3 Vector3 _\bc_\bo_\br_\br_\be_\bc_\bt_\bG_\by_\br_\bo_\bs_\bc_\bo_\bp_\be(const Vector3& measurement,\n+84 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> H1 = boost::none,\n+85 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const {\n+86 if (H1) (*H1) << Z_3x3, -I_3x3;\n+87 if (H2) (*H2) << I_3x3;\n+88 return measurement - biasGyro_;\n+89 }\n+90\n+93\n+95 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+96 const _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias);\n+97\n+99 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n+100\n+_\b1_\b0_\b2 inline bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& expected, double tol = 1e-5) const {\n+103 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(biasAcc_, expected.biasAcc_, tol)\n+104 && _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(biasGyro_, expected.biasGyro_, tol);\n+105 }\n+106\n+110\n+_\b1_\b1_\b2 static _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n+113 return _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs();\n+114 }\n+115\n+_\b1_\b1_\b7 inline _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-() const {\n+118 return _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs(-biasAcc_, -biasGyro_);\n+119 }\n+120\n+_\b1_\b2_\b2 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const Vector6& v) const {\n+123 return _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs(biasAcc_ + v.head<3>(), biasGyro_ + v.tail<3>());\n+124 }\n+125\n+_\b1_\b2_\b7 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& b) const {\n+128 return _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs(biasAcc_ + b.biasAcc_, biasGyro_ + b.biasGyro_);\n+129 }\n+130\n+_\b1_\b3_\b2 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& b) const {\n+133 return _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs(biasAcc_ - b.biasAcc_, biasGyro_ - b.biasGyro_);\n+134 }\n+135\n+137\n+138#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+141 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs GTSAM_DEPRECATED inverse() { return -(*this); }\n+142 ConstantBias GTSAM_DEPRECATED compose(const ConstantBias& q) {\n+143 return (*this) + q;\n+144 }\n+145 ConstantBias GTSAM_DEPRECATED between(const ConstantBias& q) {\n+146 return q - (*this);\n+147 }\n+148 Vector6 GTSAM_DEPRECATED localCoordinates(const ConstantBias& q) {\n+149 return (q - (*this)).vector();\n+150 }\n+151 ConstantBias GTSAM_DEPRECATED retract(const Vector6& v) {\n+152 return (*this) + ConstantBias(v);\n+153 }\n+154 static Vector6 GTSAM_DEPRECATED Logmap(const ConstantBias& p) {\n+155 return p.vector();\n+156 }\n+157 static ConstantBias GTSAM_DEPRECATED Expmap(const Vector6& v) {\n+158 return ConstantBias(v);\n+159 }\n+161#endif\n 162\n-163\n-164}\n-_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n-Some support classes for iterative solvers.\n+163private:\n+164\n+167\n+_\b1_\b6_\b9 friend class boost::serialization::access;\n+170 template\n+171 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+172 ar & BOOST_SERIALIZATION_NVP(biasAcc_);\n+173 ar & BOOST_SERIALIZATION_NVP(biasGyro_);\n+174 }\n+175\n+176\n+177public:\n+178 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+180\n+181}; // ConstantBias class\n+182} // namespace imuBias\n+183\n+184template<>\n+_\b1_\b8_\b5struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be<\n+186 imuBias::ConstantBias> {\n+187};\n+188\n+189} // namespace gtsam\n+190\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n+Special class for optional Jacobian arguments.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-parameters for the conjugate gradient method\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bm_\bi_\bn_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs_\b_\n-size_t minIterations_\n-minimum number of cg iterations\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\br_\be_\bs_\be_\bt_\b_\n-size_t reset_\n-number of iterations before reset\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bB_\bL_\bA_\bS_\bK_\be_\br_\bn_\be_\bl\n-BLASKernel\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn_\b__\br_\be_\bl_\b_\n-double epsilon_rel_\n-threshold for relative error decrease\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs_\b_\n-size_t maxIterations_\n-maximum number of cg iterations\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b:_\b:_\be_\bp_\bs_\bi_\bl_\bo_\bn_\b__\ba_\bb_\bs_\b_\n-double epsilon_abs_\n-threshold for absolute error decrease\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-parameters for iterative linear solvers\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n+bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n+DenseBase< MATRIX > &B, double tol=1e-9)\n+equals with a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be\n+VectorSpace provides both Testable and VectorSpaceTraits.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be\n+const Vector3 & gyroscope() const\n+get gyroscope bias\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n+static ConstantBias Identity()\n+identity for group operation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:112\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const ConstantBias &expected, double tol=1e-5) const\n+equality up to tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+ConstantBias operator-(const ConstantBias &b) const\n+subtraction\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:132\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bc_\bo_\br_\br_\be_\bc_\bt_\bA_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br\n+Vector3 correctAccelerometer(const Vector3 &measurement, OptionalJacobian< 3, 6\n+> H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const\n+Correct an accelerometer measurement using this bias model, and optionally\n+compute Jacobians.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n+ConstantBias operator-() const\n+inverse\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bc_\bo_\br_\br_\be_\bc_\bt_\bG_\by_\br_\bo_\bs_\bc_\bo_\bp_\be\n+Vector3 correctGyroscope(const Vector3 &measurement, OptionalJacobian< 3, 6 >\n+H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const\n+Correct a gyroscope measurement using this bias model, and optionally compute\n+Jacobians.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n+Vector6 vector() const\n+return the accelerometer and gyro biases in a single vector\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+ConstantBias operator+(const Vector6 &v) const\n+addition of vector on right\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:122\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n+ConstantBias operator+(const ConstantBias &b) const\n+addition\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br\n+const Vector3 & accelerometer() const\n+get accelerometer bias\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:64\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+ * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n+ * _\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00737_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00761_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
iterative-inl.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n+\n+\n
23#include <boost/shared_ptr.hpp>
\n
24
\n
25namespace gtsam {
\n
26
\n
27 /* ************************************************************************* */
\n
28 // state for CG method
\n
29 template<class S, class V, class E>
\n@@ -247,16 +247,16 @@\n
144 while (!state.step(Ab, x)) {}
\n
145 return x;
\n
146 }
\n
\n
147/* ************************************************************************* */
\n
148
\n
149} // namespace gtsam
\n-
Implementation of Conjugate Gradient solver for a linear system.
\n-
Iterative methods, implementation.
\n+
Iterative methods, implementation.
\n+
Implementation of Conjugate Gradient solver for a linear system.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
V conjugateGradients(const S &Ab, V x, const ConjugateGradientParameters &parameters, bool steepest)
Method of conjugate gradients (CG) template "System" class S needs gradient(S,v), e=S*v,...
Definition iterative-inl.h:125
\n
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n
parameters for the conjugate gradient method
Definition ConjugateGradientSolver.h:29
\n
Definition iterative-inl.h:30
\n
bool steepest
flag to indicate we are doing steepest descent
Definition iterative-inl.h:36
\n@@ -264,13 +264,13 @@\n
int k
iteration
Definition iterative-inl.h:35
\n
V d
gradient g and search direction d for CG
Definition iterative-inl.h:37
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -154,18 +154,18 @@\n 144 while (!state.step(Ab, x)) {}\n 145 return x;\n 146 }\n 147/* *************************************************************************\n */\n 148\n 149} // namespace gtsam\n-_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n-Implementation of Conjugate Gradient solver for a linear system.\n _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b._\bh\n Iterative methods, implementation.\n+_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+Implementation of Conjugate Gradient solver for a linear system.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00740.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00656.html", "comments": ["Files 83% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Errors.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/graph.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n \n
\n \n-
Errors.cpp File Reference
\n+
graph.h File Reference
\n
\n
\n \n-

Factor Graph Values. \n+

Graph algorithm using boost library. \n More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+\n+\n+\n+\n+\n+\n+

\n+Classes

class  gtsam::SDGraph< KEY >
 SDGraph is undirected graph with variable keys and double edge weights. More...
 
class  gtsam::SGraph< KEY >
 
class  gtsam::PredecessorMap< KEY >
 Map from variable key to parent key. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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 Functions

\n-Errors gtsam::createErrors (const VectorValues &V)
 Break V into pieces according to its start indices.
 
\n-void gtsam::print (const Errors &e, const std::string &s="Errors")
 Print an Errors instance.
 
\n-bool gtsam::equality (const Errors &actual, const Errors &expected, double tol)
 
\n-Errors gtsam::operator+ (const Errors &a, const Errors &b)
 Addition.
 
\n-Errors gtsam::operator- (const Errors &a, const Errors &b)
 Subtraction.
 
\n-Errors gtsam::operator- (const Errors &a)
 Negation.
 
\n-double gtsam::dot (const Errors &a, const Errors &b)
 Dot product.
 
\n-void gtsam::axpy (double alpha, const Errors &x, Errors &y)
 BLAS level 2 style AXPY, y := alpha*x + y
 
\n+template<class KEY >
std::list< KEY > gtsam::predecessorMap2Keys (const PredecessorMap< KEY > &p_map)
 Generate a list of keys from a spanning tree represented by its predecessor map.
 
\n+template<class G , class F , class KEY >
SDGraph< KEY > gtsam::toBoostGraph (const G &graph)
 Convert the factor graph to an SDGraph G = Graph type F = Factor type Key = Key type.
 
template<class G , class V , class KEY >
boost::tuple< G, V, std::map< KEY, V > > gtsam::predecessorMap2Graph (const PredecessorMap< KEY > &p_map)
 Build takes a predecessor map, and builds a directed graph corresponding to the tree.
 
\n+template<class G , class Factor , class POSE , class KEY >
boost::shared_ptr< Valuesgtsam::composePoses (const G &graph, const PredecessorMap< KEY > &tree, const POSE &rootPose)
 Compose the poses by following the chain specified by the spanning tree.
 
\n+template<class G , class KEY , class FACTOR2 >
PredecessorMap< KEY > gtsam::findMinimumSpanningTree (const G &g)
 find the minimum spanning tree using boost graph library
 
\n+template<class G , class KEY , class FACTOR2 >
void gtsam::split (const G &g, const PredecessorMap< KEY > &tree, G &Ab1, G &Ab2)
 Split the graph into two parts: one corresponds to the given spanning tree, and the other corresponds to the rest of the factors.
 
\n

Detailed Description

\n-

Factor Graph Values.

\n-

Errors

Author
Carlos Nieto
\n-
\n-Christian Potthast
\n+

Graph algorithm using boost library.

\n+
Author
: Kai Ni
\n+
Date
Jan 11, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,47 +1,75 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-Errors.cpp File Reference\n-Factor Graph _\bV_\ba_\bl_\bu_\be_\bs. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+graph.h File Reference\n+Graph algorithm using boost library. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bD_\bG_\br_\ba_\bp_\bh_\b<_\b _\bK_\bE_\bY_\b _\b>\n+\u00a0 _\bS_\bD_\bG_\br_\ba_\bp_\bh is undirected graph with variable keys and double edge weights.\n+ _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bG_\br_\ba_\bp_\bh_\b<_\b _\bK_\bE_\bY_\b _\b>\n+\u00a0\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b<_\b _\bK_\bE_\bY_\b _\b>\n+\u00a0 Map from variable key to parent key. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bcr\bre\bea\bat\bte\beE\bEr\brr\bro\bor\brs\bs (const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &V)\n-\u00a0 Break V into pieces according to its start indices.\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bri\bin\bnt\bt (const _\bE_\br_\br_\bo_\br_\bs &e, const std::string &s=\"Errors\")\n-\u00a0 Print an Errors instance.\n-\u00a0\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:e\beq\bqu\bua\bal\bli\bit\bty\by (const _\bE_\br_\br_\bo_\br_\bs &actual, const _\bE_\br_\br_\bo_\br_\bs &expected, double\n- tol)\n-\u00a0\n-_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br+\b+ (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n-\u00a0 Addition.\n-\u00a0\n-_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br-\b- (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n-\u00a0 Subtraction.\n-\u00a0\n-_\bE_\br_\br_\bo_\br_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br-\b- (const _\bE_\br_\br_\bo_\br_\bs &a)\n-\u00a0 Negation.\n-\u00a0\n-double\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:d\bdo\bot\bt (const _\bE_\br_\br_\bo_\br_\bs &a, const _\bE_\br_\br_\bo_\br_\bs &b)\n-\u00a0 Dot product.\n-\u00a0\n- void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:a\bax\bxp\bpy\by (double alpha, const _\bE_\br_\br_\bo_\br_\bs &x, _\bE_\br_\br_\bo_\br_\bs &y)\n-\u00a0 BLAS level 2 style AXPY, y := alpha*x + y\n+template\n+ std::list< KEY >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:p\bpr\bre\bed\bde\bec\bce\bes\bss\bso\bor\brM\bMa\bap\bp2\b2K\bKe\bey\bys\bs (const\n+ _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< KEY > &p_map)\n+\u00a0 Generate a list of keys from a spanning\n+ tree represented by its predecessor map.\n+\u00a0\n+template\n+ _\bS_\bD_\bG_\br_\ba_\bp_\bh< KEY >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:t\bto\boB\bBo\boo\bos\bst\btG\bGr\bra\bap\bph\bh (const G &graph)\n+ Convert the factor graph to an _\bS_\bD_\bG_\br_\ba_\bp_\bh G\n+\u00a0 = Graph type F = _\bF_\ba_\bc_\bt_\bo_\br type Key = Key\n+ type.\n+\u00a0\n+template\n+boost::tuple< G, V, std::map< KEY, V > _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp_\b2_\bG_\br_\ba_\bp_\bh (const\n+ >\u00a0 _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< KEY > &p_map)\n+ Build takes a predecessor map, and\n+\u00a0 builds a directed graph corresponding to\n+ the tree.\n+\u00a0\n+template\n+ boost::shared_ptr< _\bV_\ba_\bl_\bu_\be_\bs >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bco\bom\bmp\bpo\bos\bse\beP\bPo\bos\bse\bes\bs (const G &graph,\n+ const _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< KEY > &tree, const\n+ POSE &rootPose)\n+\u00a0 Compose the poses by following the chain\n+ specified by the spanning tree.\n+\u00a0\n+template\n+ _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< KEY >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:f\bfi\bin\bnd\bdM\bMi\bin\bni\bim\bmu\bum\bmS\bSp\bpa\ban\bnn\bni\bin\bng\bgT\bTr\bre\bee\be (const G\n+ &g)\n+\u00a0 find the minimum spanning tree using\n+ boost graph library\n+\u00a0\n+template\n+ void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:s\bsp\bpl\bli\bit\bt (const G &g, const\n+ _\bP_\br_\be_\bd_\be_\bc_\be_\bs_\bs_\bo_\br_\bM_\ba_\bp< KEY > &tree, G &Ab1, G\n+ &Ab2)\n+ Split the graph into two parts: one\n+\u00a0 corresponds to the given spanning tree,\n+ and the other corresponds to the rest of\n+ the factors.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Factor Graph _\bV_\ba_\bl_\bu_\be_\bs.\n-Errors\n+Graph algorithm using boost library.\n Author\n- Carlos Nieto\n- Christian Potthast\n+ : Kai Ni\n+ Date\n+ Jan 11, 2010\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\br_\br_\bo_\br_\bs_\b._\bc_\bp_\bp\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n+ * _\bg_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00749_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00518_source.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Errors.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearFactorGraph.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Errors.h
\n+
HybridNonlinearFactorGraph.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18// \\callgraph
\n-
19
\n-
20#pragma once
\n-
21
\n-
22#include <gtsam/base/FastList.h>
\n-
23#include <gtsam/base/Testable.h>
\n-
24#include <gtsam/base/Vector.h>
\n-
25
\n-
26#include <string>
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
30// Forward declarations
\n-
31class VectorValues;
\n-
32
\n-\n-
35
\n-
37GTSAM_EXPORT Errors createErrors(const VectorValues& V);
\n-
38
\n-
40GTSAM_EXPORT void print(const Errors& e, const std::string& s = "Errors");
\n-
41
\n-
42// Check equality for unit testing.
\n-
43GTSAM_EXPORT bool equality(const Errors& actual, const Errors& expected,
\n-
44 double tol = 1e-9);
\n+
19#pragma once
\n+
20
\n+\n+
22
\n+
23namespace gtsam {
\n+
24
\n+
25class HybridGaussianFactorGraph;
\n+
26
\n+
\n+
33class GTSAM_EXPORT HybridNonlinearFactorGraph : public HybridFactorGraph {
\n+
34 protected:
\n+
35 public:
\n+
36 using Base = HybridFactorGraph;
\n+\n+
38 using shared_ptr = boost::shared_ptr<This>;
\n+
39
\n+\n+
41 using Indices = KeyVector;
\n+
42
\n
45
\n-
47GTSAM_EXPORT Errors operator+(const Errors& a, const Errors& b);
\n-
48
\n-
50GTSAM_EXPORT Errors operator-(const Errors& a, const Errors& b);
\n-
51
\n-
53GTSAM_EXPORT Errors operator-(const Errors& a);
\n-
54
\n-
56GTSAM_EXPORT double dot(const Errors& a, const Errors& b);
\n-
57
\n-
59GTSAM_EXPORT void axpy(double alpha, const Errors& x, Errors& y);
\n+\n+
47
\n+
53 template <class DERIVEDFACTOR>
\n+
\n+\n+
55 : Base(graph) {}
\n+
\n+
56
\n
60
\n-
62template <>
\n-
\n-
63struct traits<Errors> {
\n-
64 static void Print(const Errors& e, const std::string& str = "") {
\n-
65 print(e, str);
\n-
66 }
\n-
67 static bool Equals(const Errors& actual, const Errors& expected,
\n-
68 double tol = 1e-8) {
\n-
69 return equality(actual, expected, tol);
\n-
70 }
\n-
71};
\n-
\n-
72
\n-
73} // namespace gtsam
\n-
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n-
Concept check for values that can be used in unit tests.
\n-
typedef and functions to augment Eigen's VectorXd
\n+
62 void print(
\n+
63 const std::string& s = "HybridNonlinearFactorGraph",
\n+
64 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n+
65
\n+
69
\n+
77 boost::shared_ptr<HybridGaussianFactorGraph> linearize(
\n+
78 const Values& continuousValues) const;
\n+
80};
\n+
\n+
81
\n+
82template <>
\n+
\n+\n+
84 : public Testable<HybridNonlinearFactorGraph> {};
\n+
\n+
85
\n+
86} // namespace gtsam
\n+
Factor graph with utilities for hybrid factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Errors operator+(const Errors &a, const Errors &b)
Addition.
Definition Errors.cpp:60
\n-
void axpy(double alpha, const Errors &x, Errors &y)
BLAS level 2 style AXPY, y := alpha*x + y
Definition Errors.cpp:111
\n-
Errors createErrors(const VectorValues &V)
Break V into pieces according to its start indices.
Definition Errors.cpp:29
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
Errors operator-(const Errors &a, const Errors &b)
Subtraction.
Definition Errors.cpp:75
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
The Factor::error simply extracts the.
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
Hybrid Factor Graph Factor graph with utilities for hybrid factors.
Definition HybridFactorGraph.h:39
\n+
Definition HybridNonlinearFactorGraph.h:33
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to This
Definition HybridNonlinearFactorGraph.h:38
\n+
HybridNonlinearFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition HybridNonlinearFactorGraph.h:54
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,115 +1,109 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Errors.h\n+HybridNonlinearFactorGraph.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18// \\callgraph\n-19\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n-25\n-26#include \n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-30// Forward declarations\n-31class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n-32\n-_\b3_\b4using _\bE_\br_\br_\bo_\br_\bs = _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bV_\be_\bc_\bt_\bo_\br_\b>;\n-35\n-37GTSAM_EXPORT _\bE_\br_\br_\bo_\br_\bs _\bc_\br_\be_\ba_\bt_\be_\bE_\br_\br_\bo_\br_\bs(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& V);\n-38\n-40GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(const _\bE_\br_\br_\bo_\br_\bs& e, const std::string& s = \"Errors\");\n-41\n-42// Check equality for unit testing.\n-43GTSAM_EXPORT bool equality(const _\bE_\br_\br_\bo_\br_\bs& actual, const _\bE_\br_\br_\bo_\br_\bs& expected,\n-44 double tol = 1e-9);\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+25class HybridGaussianFactorGraph;\n+26\n+_\b3_\b3class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh : public _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n+34 protected:\n+35 public:\n+36 using _\bB_\ba_\bs_\be = _\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n+_\b3_\b7 using _\bT_\bh_\bi_\bs = _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh;\n+_\b3_\b8 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n+39\n+_\b4_\b0 using _\bV_\ba_\bl_\bu_\be_\bs = _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs;\n+41 using Indices = _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br;\n+42\n 45\n-47GTSAM_EXPORT _\bE_\br_\br_\bo_\br_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bE_\br_\br_\bo_\br_\bs& a, const _\bE_\br_\br_\bo_\br_\bs& b);\n-48\n-50GTSAM_EXPORT _\bE_\br_\br_\bo_\br_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bE_\br_\br_\bo_\br_\bs& a, const _\bE_\br_\br_\bo_\br_\bs& b);\n-51\n-53GTSAM_EXPORT _\bE_\br_\br_\bo_\br_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bE_\br_\br_\bo_\br_\bs& a);\n-54\n-56GTSAM_EXPORT double _\bd_\bo_\bt(const _\bE_\br_\br_\bo_\br_\bs& a, const _\bE_\br_\br_\bo_\br_\bs& b);\n-57\n-59GTSAM_EXPORT void _\ba_\bx_\bp_\by(double alpha, const _\bE_\br_\br_\bo_\br_\bs& x, _\bE_\br_\br_\bo_\br_\bs& y);\n+46 _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() = default;\n+47\n+53 template \n+_\b5_\b4 _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph)\n+55 : _\bB_\ba_\bs_\be(graph) {}\n+56\n 60\n-62template <>\n-_\b6_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bE_\br_\br_\bo_\br_\bs> {\n-64 static void Print(const _\bE_\br_\br_\bo_\br_\bs& e, const std::string& str = \"\") {\n-65 _\bp_\br_\bi_\bn_\bt(e, str);\n-66 }\n-67 static bool Equals(const _\bE_\br_\br_\bo_\br_\bs& actual, const _\bE_\br_\br_\bo_\br_\bs& expected,\n-68 double tol = 1e-8) {\n-69 return equality(actual, expected, tol);\n-70 }\n-71};\n-72\n-73} // namespace gtsam\n-_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n-A thin wrapper around std::list that uses boost's fast_pool_allocator.\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n-_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n-typedef and functions to augment Eigen's VectorXd\n+62 void _\bp_\br_\bi_\bn_\bt(\n+63 const std::string& s = \"HybridNonlinearFactorGraph\",\n+64 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n+65\n+69\n+77 boost::shared_ptr linearize(\n+78 const _\bV_\ba_\bl_\bu_\be_\bs& continuousValues) const;\n+80};\n+81\n+82template <>\n+_\b8_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh>\n+84 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+85\n+86} // namespace gtsam\n+_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor graph with utilities for hybrid factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-Errors operator+(const Errors &a, const Errors &b)\n-Addition.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\ba_\bx_\bp_\by\n-void axpy(double alpha, const Errors &x, Errors &y)\n-BLAS level 2 style AXPY, y := alpha*x + y\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\br_\be_\ba_\bt_\be_\bE_\br_\br_\bo_\br_\bs\n-Errors createErrors(const VectorValues &V)\n-Break V into pieces according to its start indices.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-Errors operator-(const Errors &a, const Errors &b)\n-Subtraction.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Errors.cpp:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\b _\bV_\be_\bc_\bt_\bo_\br_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+Hybrid Factor Graph Factor graph with utilities for hybrid factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridFactorGraph.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearFactorGraph.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to This\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearFactorGraph.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+HybridNonlinearFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n+Implicit copy/downcast constructor to override explicit template container\n+constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearFactorGraph.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\br_\br_\bo_\br_\bs_\b._\bh\n+ * _\bh_\by_\bb_\br_\bi_\bd\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00767_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00857_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
IterativeSolver.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-
22#include <gtsam/base/Vector.h>
\n+\n+
22#include <gtsam/base/Vector.h>
\n
23
\n
24#include <boost/tuple/tuple.hpp>
\n
25#include <boost/shared_ptr.hpp>
\n
26#include <boost/optional.hpp>
\n
27
\n
28#include <iosfwd>
\n
29#include <string>
\n@@ -260,16 +260,16 @@\n
167
\n
169 Vector x0vector() const;
\n
170
\n
171};
\n
\n
172
\n
173} // \\ namespace gtsam
\n-
typedef and functions to augment Eigen's VectorXd
\n-
Variable ordering for the elimination algorithm.
\n+
typedef and functions to augment Eigen's VectorXd
\n+
Variable ordering for the elimination algorithm.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
Definition Ordering.h:34
\n
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n
parameters for iterative linear solvers
Definition IterativeSolver.h:44
\n@@ -283,13 +283,13 @@\n
The Factor::error simply extracts the.
\n
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00773_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00200_source.html", "comments": ["Files 88% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/RegularJacobianFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteBayesNet.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
RegularJacobianFactor.h
\n+
DiscreteBayesNet.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-
23
\n-
24namespace gtsam {
\n+\n+\n+\n+\n
25
\n-
31template<size_t D>
\n-
\n-\n+
26#include <boost/shared_ptr.hpp>
\n+
27#include <map>
\n+
28#include <string>
\n+
29#include <utility>
\n+
30#include <vector>
\n+
31
\n+
32namespace gtsam {
\n
33
\n-
34private:
\n-
35
\n-
36 // Use eigen magic to access raw memory
\n-
37 typedef Eigen::Matrix<double, D, 1> DVector;
\n-
38 typedef Eigen::Map<DVector> DMap;
\n-
39 typedef Eigen::Map<const DVector> ConstDMap;
\n-
40
\n-
41public:
\n-
42
\n-\n+
\n+
38class GTSAM_EXPORT DiscreteBayesNet: public BayesNet<DiscreteConditional> {
\n+
39 public:
\n+\n+
41 typedef DiscreteBayesNet This;
\n+\n+
43 typedef boost::shared_ptr<This> shared_ptr;
\n+
44 typedef boost::shared_ptr<ConditionalType> sharedConditional;
\n
45
\n-
51 template<typename TERMS>
\n-
\n-
52 RegularJacobianFactor(const TERMS& terms, const Vector& b,
\n-
53 const SharedDiagonal& model = SharedDiagonal()) :
\n-
54 JacobianFactor(terms, b, model) {
\n-
55 }
\n+
48
\n+\n+
51
\n+
53 template <typename ITERATOR>
\n+
\n+
54 DiscreteBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
\n+
55 : Base(firstConditional, lastConditional) {}
\n
\n
56
\n-
63 template<typename KEYS>
\n-
\n-\n-
65 const VerticalBlockMatrix& augmentedMatrix, const SharedDiagonal& sigmas =
\n-
66 SharedDiagonal()) :
\n-
67 JacobianFactor(keys, augmentedMatrix, sigmas) {
\n-
68 }
\n-
\n-
69
\n-\n-
71
\n-
\n-
73 void multiplyHessianAdd(double alpha, const VectorValues& x,
\n-
74 VectorValues& y) const override {
\n-\n-
76 }
\n-
\n-
77
\n-
\n-
82 void multiplyHessianAdd(double alpha, const double* x, double* y) const {
\n-
83 if (empty())
\n-
84 return;
\n-
85 Vector Ax = Vector::Zero(Ab_.rows());
\n+
58 template <class CONTAINER>
\n+
\n+
59 explicit DiscreteBayesNet(const CONTAINER& conditionals)
\n+
60 : Base(conditionals) {}
\n+
\n+
61
\n+
64 template <class DERIVEDCONDITIONAL>
\n+
\n+\n+
66 : Base(graph) {}
\n+
\n+
67
\n+
69 virtual ~DiscreteBayesNet() {}
\n+
70
\n+
72
\n+
75
\n+
77 bool equals(const This& bn, double tol = 1e-9) const;
\n+
78
\n+
80
\n+
83
\n+
84 // Add inherited versions of add.
\n+
85 using Base::add;
\n
86
\n-
87 // Just iterate over all A matrices and multiply in correct config part
\n-
88 for (size_t pos = 0; pos < size(); ++pos)
\n-
89 Ax += Ab_(pos) * ConstDMap(x + D * keys_[pos]);
\n-
90
\n-
91 // Deal with noise properly, need to Double* whiten as we are dividing by variance
\n-
92 if (model_) {
\n-
93 model_->whitenInPlace(Ax);
\n-
94 model_->whitenInPlace(Ax);
\n-
95 }
\n-
96
\n-
97 // multiply with alpha
\n-
98 Ax *= alpha;
\n-
99
\n-
100 // Again iterate over all A matrices and insert Ai^e into y
\n-
101 for (size_t pos = 0; pos < size(); ++pos)
\n-
102 DMap(y + D * keys_[pos]) += Ab_(pos).transpose() * Ax;
\n-
103 }
\n-
\n-
104
\n-\n-
107
\n-
\n-
109 void hessianDiagonal(double* d) const override {
\n-
110 // Loop over all variables in the factor
\n-
111 for (DenseIndex j = 0; j < (DenseIndex) size(); ++j) {
\n-
112 // Get the diagonal block, and insert its diagonal
\n-
113 DVector dj;
\n-
114 for (size_t k = 0; k < D; ++k) {
\n-
115 if (model_) {
\n-
116 Vector column_k = Ab_(j).col(k);
\n-
117 column_k = model_->whiten(column_k);
\n-
118 dj(k) = dot(column_k, column_k);
\n-
119 } else {
\n-
120 dj(k) = Ab_(j).col(k).squaredNorm();
\n-
121 }
\n-
122 }
\n-
123 DMap(d + D * j) += dj;
\n-
124 }
\n-
125 }
\n-
\n-
126
\n-
\n-
128 VectorValues gradientAtZero() const override {
\n-\n-
130 }
\n-
\n-
131
\n-
\n-
133 void gradientAtZero(double* d) const override {
\n-
134
\n-
135 // Get vector b not weighted
\n-
136 Vector b = getb();
\n+
\n+
88 void add(const DiscreteKey& key, const std::string& spec) {
\n+
89 emplace_shared<DiscreteDistribution>(key, spec);
\n+
90 }
\n+
\n+
91
\n+
93 template <typename... Args>
\n+
\n+
94 void add(Args&&... args) {
\n+
95 emplace_shared<DiscreteConditional>(std::forward<Args>(args)...);
\n+
96 }
\n+
\n+
97
\n+
98 //** evaluate for given DiscreteValues */
\n+
99 double evaluate(const DiscreteValues & values) const;
\n+
100
\n+
101 //** (Preferred) sugar for the above for given DiscreteValues */
\n+
102 double operator()(const DiscreteValues & values) const {
\n+
103 return evaluate(values);
\n+
104 }
\n+
105
\n+
106 //** log(evaluate(values)) for given DiscreteValues */
\n+
107 double logProbability(const DiscreteValues & values) const;
\n+
108
\n+
118 DiscreteValues sample() const;
\n+
119
\n+
128 DiscreteValues sample(DiscreteValues given) const;
\n+
129
\n+
133
\n+
135 std::string markdown(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
136 const DiscreteFactor::Names& names = {}) const;
\n
137
\n-
138 // Whitening b
\n-
139 if (model_) {
\n-
140 b = model_->whiten(b);
\n-
141 b = model_->whiten(b);
\n-
142 }
\n-
143
\n-
144 // Just iterate over all A matrices
\n-
145 for (DenseIndex j = 0; j < (DenseIndex) size(); ++j) {
\n-
146 DVector dj;
\n-
147 // gradient -= A'*b/sigma^2
\n-
148 // Computing with each column
\n-
149 for (size_t k = 0; k < D; ++k) {
\n-
150 Vector column_k = Ab_(j).col(k);
\n-
151 dj(k) = -1.0 * dot(b, column_k);
\n-
152 }
\n-
153 DMap(d + D * j) += dj;
\n-
154 }
\n-
155 }
\n-
\n-
156
\n-
\n-
161 void transposeMultiplyAdd(double alpha, const Vector& e, double* x) const {
\n-
162 Vector E = alpha * (model_ ? model_->whiten(e) : e);
\n-
163 // Just iterate over all A matrices and insert Ai^e into y
\n-
164 for (size_t pos = 0; pos < size(); ++pos)
\n-
165 DMap(x + D * keys_[pos]) += Ab_(pos).transpose() * E;
\n-
166 }
\n-
\n-
167
\n-
\n-
172 Vector operator*(const double* x) const {
\n-
173 Vector Ax = Vector::Zero(Ab_.rows());
\n-
174 if (empty())
\n-
175 return Ax;
\n-
176
\n-
177 // Just iterate over all A matrices and multiply in correct config part
\n-
178 for (size_t pos = 0; pos < size(); ++pos)
\n-
179 Ax += Ab_(pos) * ConstDMap(x + D * keys_[pos]);
\n-
180
\n-
181 return model_ ? model_->whiten(Ax) : Ax;
\n-
182 }
\n-
\n-
183
\n-
184};
\n-
\n-
185// end class RegularJacobianFactor
\n-
186
\n-
187}// end namespace gtsam
\n-
Factor Graph Values.
\n-\n+
139 std::string html(const KeyFormatter& keyFormatter = DefaultKeyFormatter,
\n+
140 const DiscreteFactor::Names& names = {}) const;
\n+
141
\n+
145
\n+
146 using Base::error; // Expose error(const HybridValues&) method..
\n+
147 using Base::evaluate; // Expose evaluate(const HybridValues&) method..
\n+
148 using Base::logProbability; // Expose logProbability(const HybridValues&)
\n+
149
\n+
151
\n+
152#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n+
155
\n+
156 DiscreteValues GTSAM_DEPRECATED optimize() const;
\n+
157 DiscreteValues GTSAM_DEPRECATED optimize(DiscreteValues given) const;
\n+
159#endif
\n+
160
\n+
161 private:
\n+
163 friend class boost::serialization::access;
\n+
164 template<class ARCHIVE>
\n+
165 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
166 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
167 }
\n+
168 };
\n+
\n+
169
\n+
170// traits
\n+
171template<> struct traits<DiscreteBayesNet> : public Testable<DiscreteBayesNet> {};
\n+
172
\n+
173} // \\ namespace gtsam
\n+
174
\n+\n+\n+
Bayes network.
\n+
Factor Graph Base Class.
\n+
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
double dot(const V1 &a, const V2 &b)
Dot product.
Definition Vector.h:195
\n-
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n-
DenseIndex rows() const
Row size.
Definition VerticalBlockMatrix.h:115
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
bool empty() const
Whether the factor is empty (involves zero variables).
Definition Factor.h:128
\n-
size_t size() const
Definition Factor.h:157
\n-
VectorValues hessianDiagonal() const
Return the diagonal of the Hessian for this factor.
Definition GaussianFactor.cpp:35
\n-
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n-
const constBVector getb() const
Get a view of the r.h.s.
Definition JacobianFactor.h:297
\n-
void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const override
y += alpha * A'*A*x
Definition JacobianFactor.cpp:649
\n-
VectorValues gradientAtZero() const override
A'*b for Jacobian.
Definition JacobianFactor.cpp:701
\n-
JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator.
Definition RegularJacobianFactor.h:32
\n-
Vector operator*(const double *x) const
double* Matrix-vector multiply, i.e.
Definition RegularJacobianFactor.h:172
\n-
void hessianDiagonal(double *d) const override
Raw memory access version of hessianDiagonal.
Definition RegularJacobianFactor.h:109
\n-
void gradientAtZero(double *d) const override
Raw memory access version of gradientAtZero.
Definition RegularJacobianFactor.h:133
\n-
void transposeMultiplyAdd(double alpha, const Vector &e, double *x) const
double* Transpose Matrix-vector multiply, i.e.
Definition RegularJacobianFactor.h:161
\n-
VectorValues gradientAtZero() const override
Expose base class gradientAtZero.
Definition RegularJacobianFactor.h:128
\n-
RegularJacobianFactor(const TERMS &terms, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Construct an n-ary factor.
Definition RegularJacobianFactor.h:52
\n-
void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const override
y += alpha * A'*A*x
Definition RegularJacobianFactor.h:73
\n-
RegularJacobianFactor()
Default constructor.
Definition RegularJacobianFactor.h:44
\n-
RegularJacobianFactor(const KEYS &keys, const VerticalBlockMatrix &augmentedMatrix, const SharedDiagonal &sigmas=SharedDiagonal())
Constructor with arbitrary number keys, and where the augmented matrix is given all together instead ...
Definition RegularJacobianFactor.h:64
\n-
void multiplyHessianAdd(double alpha, const double *x, double *y) const
double* Hessian-vector multiply, i.e.
Definition RegularJacobianFactor.h:82
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
string html(const DiscreteValues &values, const KeyFormatter &keyFormatter, const DiscreteValues::Names &names)
Free version of html.
Definition DiscreteValues.cpp:134
\n+
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A Bayes net made from discrete conditional distributions.
Definition DiscreteBayesNet.h:38
\n+
DiscreteBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
Construct from iterator over conditionals.
Definition DiscreteBayesNet.h:54
\n+
DiscreteBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition DiscreteBayesNet.h:65
\n+
DiscreteBayesNet(const CONTAINER &conditionals)
Construct from container of factors (shared_ptr or plain objects)
Definition DiscreteBayesNet.h:59
\n+
DiscreteBayesNet()
Construct empty Bayes net.
Definition DiscreteBayesNet.h:50
\n+
virtual ~DiscreteBayesNet()
Destructor.
Definition DiscreteBayesNet.h:69
\n+
void add(Args &&... args)
Add a DiscreteCondtional.
Definition DiscreteBayesNet.h:94
\n+
void add(const DiscreteKey &key, const std::string &spec)
Add a DiscreteDistribution using a table or a string.
Definition DiscreteBayesNet.h:88
\n+
Discrete Conditional Density Derives from DecisionTreeFactor.
Definition DiscreteConditional.h:40
\n+
A map from keys to values.
Definition DiscreteValues.h:34
\n+
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
The Factor::error simply extracts the.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-RegularJacobianFactor.h\n+DiscreteBayesNet.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,254 +16,196 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bd_\bi_\bs_\bc_\br_\be_\bt_\be_\b/_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n 25\n-31template\n-_\b3_\b2class _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n+26#include \n+27#include \n+28#include \n+29#include \n+30#include \n+31\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n 33\n-34private:\n-35\n-36 // Use eigen magic to access raw memory\n-37 typedef Eigen::Matrix DVector;\n-38 typedef Eigen::Map DMap;\n-39 typedef Eigen::Map ConstDMap;\n-40\n-41public:\n-42\n-_\b4_\b4 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+_\b3_\b8class GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt: public _\bB_\ba_\by_\be_\bs_\bN_\be_\bt {\n+39 public:\n+40 typedef _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b> _\bB_\ba_\bs_\be;\n+41 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bT_\bh_\bi_\bs;\n+42 typedef _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+43 typedef boost::shared_ptr shared_ptr;\n+44 typedef boost::shared_ptr sharedConditional;\n 45\n-51 template\n-_\b5_\b2 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const TERMS& terms, const Vector& b,\n-53 const SharedDiagonal& model = SharedDiagonal()) :\n-54 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(terms, b, model) {\n-55 }\n+48\n+_\b5_\b0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n+51\n+53 template \n+_\b5_\b4 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(ITERATOR firstConditional, ITERATOR lastConditional)\n+55 : _\bB_\ba_\bs_\be(firstConditional, lastConditional) {}\n 56\n-63 template\n-_\b6_\b4 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const KEYS& _\bk_\be_\by_\bs,\n-65 const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& augmentedMatrix, const SharedDiagonal& sigmas =\n-66 SharedDiagonal()) :\n-67 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bk_\be_\by_\bs, augmentedMatrix, sigmas) {\n-68 }\n-69\n-70 using _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd;\n-71\n-_\b7_\b3 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n-74 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const override {\n-75 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(alpha, x, y);\n-76 }\n-77\n-_\b8_\b2 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const double* x, double* y) const {\n-83 if (_\be_\bm_\bp_\bt_\by())\n-84 return;\n-85 Vector Ax = Vector::Zero(Ab_._\br_\bo_\bw_\bs());\n+58 template \n+_\b5_\b9 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const CONTAINER& conditionals)\n+60 : _\bB_\ba_\bs_\be(conditionals) {}\n+61\n+64 template \n+_\b6_\b5 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>& graph)\n+66 : _\bB_\ba_\bs_\be(graph) {}\n+67\n+_\b6_\b9 virtual _\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n+70\n+72\n+75\n+77 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& bn, double tol = 1e-9) const;\n+78\n+80\n+83\n+84 // Add inherited versions of add.\n+85 using Base::add;\n 86\n-87 // Just iterate over all A matrices and multiply in correct config part\n-88 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos)\n-89 Ax += Ab_(pos) * ConstDMap(x + D * _\bk_\be_\by_\bs_\b_[pos]);\n-90\n-91 // Deal with noise properly, need to Double* whiten as we are dividing by\n-variance\n-92 if (model_) {\n-93 model_->whitenInPlace(Ax);\n-94 model_->whitenInPlace(Ax);\n-95 }\n-96\n-97 // multiply with alpha\n-98 Ax *= alpha;\n-99\n-100 // Again iterate over all A matrices and insert Ai^e into y\n-101 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos)\n-102 DMap(y + D * _\bk_\be_\by_\bs_\b_[pos]) += Ab_(pos).transpose() * Ax;\n-103 }\n-104\n-106 using _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl;\n-107\n-_\b1_\b0_\b9 void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(double* d) const override {\n-110 // Loop over all variables in the factor\n-111 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j = 0; j < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++j) {\n-112 // Get the diagonal block, and insert its diagonal\n-113 DVector dj;\n-114 for (size_t k = 0; k < D; ++k) {\n-115 if (model_) {\n-116 Vector column_k = Ab_(j).col(k);\n-117 column_k = model_->whiten(column_k);\n-118 dj(k) = _\bd_\bo_\bt(column_k, column_k);\n-119 } else {\n-120 dj(k) = Ab_(j).col(k).squaredNorm();\n-121 }\n-122 }\n-123 DMap(d + D * j) += dj;\n-124 }\n-125 }\n-126\n-_\b1_\b2_\b8 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo() const override {\n-129 return _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo();\n-130 }\n-131\n-_\b1_\b3_\b3 void _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo(double* d) const override {\n-134\n-135 // Get vector b not weighted\n-136 Vector b = _\bg_\be_\bt_\bb();\n+_\b8_\b8 void _\ba_\bd_\bd(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key, const std::string& spec) {\n+89 emplace_shared(key, spec);\n+90 }\n+91\n+93 template \n+_\b9_\b4 void _\ba_\bd_\bd(Args&&... args) {\n+95 emplace_shared(std::forward(args)...);\n+96 }\n+97\n+98 //** evaluate for given DiscreteValues */\n+99 double evaluate(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs & values) const;\n+100\n+101 //** (Preferred) sugar for the above for given DiscreteValues */\n+102 double operator()(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs & values) const {\n+103 return evaluate(values);\n+104 }\n+105\n+106 //** log(evaluate(values)) for given DiscreteValues */\n+107 double logProbability(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs & values) const;\n+108\n+118 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs sample() const;\n+119\n+128 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs sample(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs given) const;\n+129\n+133\n+135 std::string markdown(const KeyFormatter& keyFormatter =\n+DefaultKeyFormatter,\n+136 const DiscreteFactor::Names& names = {}) const;\n 137\n-138 // Whitening b\n-139 if (model_) {\n-140 b = model_->whiten(b);\n-141 b = model_->whiten(b);\n-142 }\n-143\n-144 // Just iterate over all A matrices\n-145 for (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx j = 0; j < (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx) _\bs_\bi_\bz_\be(); ++j) {\n-146 DVector dj;\n-147 // gradient -= A'*b/sigma^2\n-148 // Computing with each column\n-149 for (size_t k = 0; k < D; ++k) {\n-150 Vector column_k = Ab_(j).col(k);\n-151 dj(k) = -1.0 * _\bd_\bo_\bt(b, column_k);\n-152 }\n-153 DMap(d + D * j) += dj;\n-154 }\n-155 }\n-156\n-_\b1_\b6_\b1 void _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bA_\bd_\bd(double alpha, const Vector& e, double* x) const {\n-162 Vector E = alpha * (model_ ? model_->whiten(e) : e);\n-163 // Just iterate over all A matrices and insert Ai^e into y\n-164 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos)\n-165 DMap(x + D * _\bk_\be_\by_\bs_\b_[pos]) += Ab_(pos).transpose() * E;\n-166 }\n-167\n-_\b1_\b7_\b2 Vector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const double* x) const {\n-173 Vector Ax = Vector::Zero(Ab_._\br_\bo_\bw_\bs());\n-174 if (_\be_\bm_\bp_\bt_\by())\n-175 return Ax;\n-176\n-177 // Just iterate over all A matrices and multiply in correct config part\n-178 for (size_t pos = 0; pos < _\bs_\bi_\bz_\be(); ++pos)\n-179 Ax += Ab_(pos) * ConstDMap(x + D * _\bk_\be_\by_\bs_\b_[pos]);\n-180\n-181 return model_ ? model_->whiten(Ax) : Ax;\n-182 }\n-183\n-184};\n-185// end class RegularJacobianFactor\n-186\n-187}// end namespace gtsam\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+139 std::string _\bh_\bt_\bm_\bl(const KeyFormatter& keyFormatter = DefaultKeyFormatter,\n+140 const DiscreteFactor::Names& names = {}) const;\n+141\n+145\n+146 using Base::error; // Expose error(const HybridValues&) method..\n+147 using Base::evaluate; // Expose evaluate(const HybridValues&) method..\n+148 using Base::logProbability; // Expose logProbability(const HybridValues&)\n+149\n+151\n+152#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n+155\n+156 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs GTSAM_DEPRECATED _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n+157 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs GTSAM_DEPRECATED _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs given) const;\n+159#endif\n+160\n+161 private:\n+_\b1_\b6_\b3 friend class boost::serialization::access;\n+164 template\n+165 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+166 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+167 }\n+168 };\n+169\n+170// traits\n+_\b1_\b7_\b1template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt> : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+172\n+173} // \\ namespace gtsam\n+174\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bD_\bi_\bs_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn_\b._\bh\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+Bayes network.\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n+std::pair< Key, size_t > DiscreteKey\n+Key type for discrete variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bo_\bt\n-double dot(const V1 &a, const V2 &b)\n-Dot product.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Vector.h:195\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of vertical blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-DenseIndex rows() const\n-Row size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bm_\bp_\bt_\by\n-bool empty() const\n-Whether the factor is empty (involves zero variables).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-VectorValues hessianDiagonal() const\n-Return the diagonal of the Hessian for this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.cpp:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor in the squared-error form.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bb\n-const constBVector getb() const\n-Get a view of the r.h.s.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:297\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n-void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y)\n-const override\n-y += alpha * A'*A*x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:649\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n-VectorValues gradientAtZero() const override\n-A'*b for Jacobian.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:701\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-JacobianFactor with constant sized blocks Provides raw memory access versions\n-of linear operator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Vector operator*(const double *x) const\n-double* Matrix-vector multiply, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:172\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n-void hessianDiagonal(double *d) const override\n-Raw memory access version of hessianDiagonal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n-void gradientAtZero(double *d) const override\n-Raw memory access version of gradientAtZero.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:133\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bA_\bd_\bd\n-void transposeMultiplyAdd(double alpha, const Vector &e, double *x) const\n-double* Transpose Matrix-vector multiply, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n-VectorValues gradientAtZero() const override\n-Expose base class gradientAtZero.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-RegularJacobianFactor(const TERMS &terms, const Vector &b, const SharedDiagonal\n-&model=SharedDiagonal())\n-Construct an n-ary factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n-void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y)\n-const override\n-y += alpha * A'*A*x\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-RegularJacobianFactor()\n-Default constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-RegularJacobianFactor(const KEYS &keys, const VerticalBlockMatrix\n-&augmentedMatrix, const SharedDiagonal &sigmas=SharedDiagonal())\n-Constructor with arbitrary number keys, and where the augmented matrix is given\n-all together instead ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n-void multiplyHessianAdd(double alpha, const double *x, double *y) const\n-double* Hessian-vector multiply, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\bt_\bm_\bl\n+string html(const DiscreteValues &values, const KeyFormatter &keyFormatter,\n+const DiscreteValues::Names &names)\n+Free version of html.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.cpp:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n+Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n+landmarkKey)\n+Optimize for triangulation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+A Bayes net made from discrete conditional distributions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+DiscreteBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)\n+Construct from iterator over conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+DiscreteBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)\n+Implicit copy/downcast constructor to override explicit template container\n+constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+DiscreteBayesNet(const CONTAINER &conditionals)\n+Construct from container of factors (shared_ptr or plain objects)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+DiscreteBayesNet()\n+Construct empty Bayes net.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\b~_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+virtual ~DiscreteBayesNet()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:69\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\ba_\bd_\bd\n+void add(Args &&... args)\n+Add a DiscreteCondtional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\ba_\bd_\bd\n+void add(const DiscreteKey &key, const std::string &spec)\n+Add a DiscreteDistribution using a table or a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteBayesNet.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+Discrete Conditional Density Derives from DecisionTreeFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteConditional.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+A map from keys to values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+A BayesNet is a tree of conditionals, stored in elimination order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00776.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00815.html", "comments": ["Files 93% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/JacobianFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactorGraph.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n \n
\n \n-
JacobianFactor.h File Reference
\n+
GaussianFactorGraph.h File Reference
\n
\n
\n \n-

Go to the source code of this file.

\n+

Linear Factor Graph where all factors are Gaussians. \n+More...

\n+\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n+\n+\n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::JacobianFactor
 A Gaussian factor in the squared-error form. More...
struct  gtsam::EliminationTraits< GaussianFactorGraph >
 
class  gtsam::GaussianFactorGraph
 A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e. More...
 
struct  gtsam::traits< JacobianFactor >
 traits More...
struct  gtsam::traits< GaussianFactorGraph >
 traits More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n+\n+\n+\n

\n Functions

std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptrgtsam::EliminateQR (const GaussianFactorGraph &factors, const Ordering &keys)
 Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that handles constraints (zero sigmas).
 
bool gtsam::hasConstraints (const GaussianFactorGraph &factors)
 Evaluates whether linear factors have any constrained noise models.
 
\n

Detailed Description

\n-
Author
Richard Roberts
\n+

Linear Factor Graph where all factors are Gaussians.

\n+
Author
Kai Ni
\n
\n Christian Potthast
\n
\n+Alireza Fathi
\n+
\n+Richard Roberts
\n+
\n Frank Dellaert
\n-
Date
Dec 8, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,39 +1,39 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-JacobianFactor.h File Reference\n+GaussianFactorGraph.h File Reference\n+Linear Factor Graph where all factors are Gaussians. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 A Gaussian factor in the squared-error form. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+\u00a0 A Linear _\bF_\ba_\bc_\bt_\bo_\br Graph is a factor graph where all factors are\n+ Gaussian, i.e. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>\n \u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- std::pair< _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b: _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR (const\n-_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br, _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors, const\n- >\u00a0 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &keys)\n- Multiply all factors and eliminate the\n-\u00a0 given keys from the resulting factor\n- using a QR variant that handles\n- constraints (zero sigmas).\n+bool\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bh_\ba_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\bs (const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &factors)\n+\u00a0 Evaluates whether linear factors have any constrained noise models.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Linear Factor Graph where all factors are Gaussians.\n Author\n- Richard Roberts\n+ Kai Ni\n Christian Potthast\n+ Alireza Fathi\n+ Richard Roberts\n Frank Dellaert\n- Date\n- Dec 8, 2010\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00776_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00317_source.html", "comments": ["Files 82% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/JacobianFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CameraSet.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n
\n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
JacobianFactor.h
\n+
CameraSet.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-\n-\n-\n-
26
\n-
27#include <boost/make_shared.hpp>
\n-
28#include <boost/serialization/version.hpp>
\n-
29#include <boost/serialization/split_member.hpp>
\n-
30
\n-
31namespace gtsam {
\n-
32
\n-
33 // Forward declarations
\n-
34 class HessianFactor;
\n-
35 class VariableSlots;
\n-
36 class GaussianFactorGraph;
\n-\n-
38 class HessianFactor;
\n-
39 class VectorValues;
\n-
40 class Ordering;
\n-
41 class JacobianFactor;
\n-
42
\n-
48 GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, boost::shared_ptr<JacobianFactor> >
\n-
49 EliminateQR(const GaussianFactorGraph& factors, const Ordering& keys);
\n-
50
\n-
\n-
90 class GTSAM_EXPORT JacobianFactor : public GaussianFactor
\n-
91 {
\n-
92 public:
\n-
93
\n-\n-\n-
96 typedef boost::shared_ptr<This> shared_ptr;
\n-
97
\n-
98 typedef VerticalBlockMatrix::Block ABlock;
\n-
99 typedef VerticalBlockMatrix::constBlock constABlock;
\n-
100 typedef ABlock::ColXpr BVector;
\n-
101 typedef constABlock::ConstColXpr constBVector;
\n-
102
\n-
103 protected:
\n-
104
\n-
105 VerticalBlockMatrix Ab_; // the block view of the full matrix
\n-
106 noiseModel::Diagonal::shared_ptr model_; // Gaussian noise model with diagonal covariance matrix
\n-
107
\n-
108 public:
\n-
109
\n-
111 explicit JacobianFactor(const GaussianFactor& gf);
\n+
21#include <gtsam/base/FastMap.h>
\n+\n+
23#include <gtsam/base/Testable.h>
\n+
24#include <gtsam/geometry/CalibratedCamera.h> // for Cheirality exception
\n+\n+
26#include <gtsam/inference/Key.h>
\n+
27
\n+
28#include <vector>
\n+
29
\n+
30namespace gtsam {
\n+
31
\n+
35template <class CAMERA>
\n+
\n+
36class CameraSet : public std::vector<CAMERA, Eigen::aligned_allocator<CAMERA>> {
\n+
37 protected:
\n+
38 using Base = std::vector<CAMERA, typename Eigen::aligned_allocator<CAMERA>>;
\n+
39
\n+
44 typedef typename CAMERA::Measurement Z;
\n+
45 typedef typename CAMERA::MeasurementVector ZVector;
\n+
46
\n+
47 static const int D = traits<CAMERA>::dimension;
\n+
48 static const int ZDim = traits<Z>::dimension;
\n+
49
\n+
\n+
51 static Vector ErrorVector(const ZVector& predicted, const ZVector& measured) {
\n+
52 // Check size
\n+
53 size_t m = predicted.size();
\n+
54 if (measured.size() != m)
\n+
55 throw std::runtime_error("CameraSet::errors: size mismatch");
\n+
56
\n+
57 // Project and fill error vector
\n+
58 Vector b(ZDim * m);
\n+
59 for (size_t i = 0, row = 0; i < m; i++, row += ZDim) {
\n+
60 Vector bi = traits<Z>::Local(measured[i], predicted[i]);
\n+
61 if (ZDim == 3 && std::isnan(bi(1))) { // if it is a stereo point and the
\n+
62 // right pixel is missing (nan)
\n+
63 bi(1) = 0;
\n+
64 }
\n+
65 b.segment<ZDim>(row) = bi;
\n+
66 }
\n+
67 return b;
\n+
68 }
\n+
\n+
69
\n+
70 public:
\n+
71 using Base::Base; // Inherit the vector constructors
\n+
72
\n+
74 virtual ~CameraSet() = default;
\n+
75
\n+
77 using MatrixZD = Eigen::Matrix<double, ZDim, D>;
\n+
78 using FBlocks = std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD>>;
\n+
79
\n+
\n+
85 virtual void print(const std::string& s = "") const {
\n+
86 std::cout << s << "CameraSet, cameras = \\n";
\n+
87 for (size_t k = 0; k < this->size(); ++k) this->at(k).print(s);
\n+
88 }
\n+
\n+
89
\n+
\n+
91 bool equals(const CameraSet& p, double tol = 1e-9) const {
\n+
92 if (this->size() != p.size()) return false;
\n+
93 bool camerasAreEqual = true;
\n+
94 for (size_t i = 0; i < this->size(); i++) {
\n+
95 if (this->at(i).equals(p.at(i), tol) == false) camerasAreEqual = false;
\n+
96 break;
\n+
97 }
\n+
98 return camerasAreEqual;
\n+
99 }
\n+
\n+
100
\n+
107 template <class POINT>
\n+
\n+
108 ZVector project2(const POINT& point, //
\n+
109 boost::optional<FBlocks&> Fs = boost::none, //
\n+
110 boost::optional<Matrix&> E = boost::none) const {
\n+
111 static const int N = FixedDimension<POINT>::value;
\n
112
\n-
114 JacobianFactor(const JacobianFactor& jf) : Base(jf), Ab_(jf.Ab_), model_(jf.model_) {}
\n-
115
\n-
117 explicit JacobianFactor(const HessianFactor& hf);
\n-
118
\n-\n+
113 // Allocate result
\n+
114 size_t m = this->size();
\n+
115 ZVector z;
\n+
116 z.reserve(m);
\n+
117
\n+
118 // Allocate derivatives
\n+
119 if (E) E->resize(ZDim * m, N);
\n+
120 if (Fs) Fs->resize(m);
\n
121
\n-
123 explicit JacobianFactor(const Vector& b_in);
\n-
124
\n-
126 JacobianFactor(Key i1, const Matrix& A1,
\n-
127 const Vector& b, const SharedDiagonal& model = SharedDiagonal());
\n-
128
\n-
130 JacobianFactor(Key i1, const Matrix& A1,
\n-
131 Key i2, const Matrix& A2,
\n-
132 const Vector& b, const SharedDiagonal& model = SharedDiagonal());
\n+
122 // Project and fill derivatives
\n+
123 for (size_t i = 0; i < m; i++) {
\n+
124 MatrixZD Fi;
\n+
125 Eigen::Matrix<double, ZDim, N> Ei;
\n+
126 z.emplace_back(this->at(i).project2(point, Fs ? &Fi : 0, E ? &Ei : 0));
\n+
127 if (Fs) (*Fs)[i] = Fi;
\n+
128 if (E) E->block<ZDim, N>(ZDim * i, 0) = Ei;
\n+
129 }
\n+
130
\n+
131 return z;
\n+
132 }
\n+
\n
133
\n-
135 JacobianFactor(Key i1, const Matrix& A1, Key i2,
\n-
136 const Matrix& A2, Key i3, const Matrix& A3,
\n-
137 const Vector& b, const SharedDiagonal& model = SharedDiagonal());
\n-
138
\n-
142 template<typename TERMS>
\n-
143 JacobianFactor(const TERMS& terms, const Vector& b, const SharedDiagonal& model = SharedDiagonal());
\n-
144
\n-
149 template<typename KEYS>
\n-\n-
151 const KEYS& keys, const VerticalBlockMatrix& augmentedMatrix, const SharedDiagonal& sigmas = SharedDiagonal());
\n-
152
\n-
157 explicit JacobianFactor(
\n-
158 const GaussianFactorGraph& graph);
\n-
159
\n-
164 explicit JacobianFactor(
\n-
165 const GaussianFactorGraph& graph,
\n-
166 const VariableSlots& p_variableSlots);
\n-
167
\n-
172 explicit JacobianFactor(
\n-
173 const GaussianFactorGraph& graph,
\n-
174 const Ordering& ordering);
\n-
175
\n-
180 explicit JacobianFactor(
\n-
181 const GaussianFactorGraph& graph,
\n-
182 const Ordering& ordering,
\n-
183 const VariableSlots& p_variableSlots);
\n-
184
\n-
186 ~JacobianFactor() override {}
\n-
187
\n-
\n-\n-
190 return boost::static_pointer_cast<GaussianFactor>(
\n-
191 boost::make_shared<JacobianFactor>(*this));
\n-
192 }
\n-
\n-
193
\n-
194 // Implementing Testable interface
\n-
195 void print(const std::string& s = "",
\n-
196 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n-
197 bool equals(const GaussianFactor& lf, double tol = 1e-9) const override;
\n-
198
\n-
199 Vector unweighted_error(const VectorValues& c) const;
\n-
200 Vector error_vector(const VectorValues& c) const;
\n-
203 using GaussianFactor::error;
\n-
204
\n-
206 double error(const VectorValues& c) const override;
\n-
207
\n-
216 Matrix augmentedInformation() const override;
\n-
217
\n-
221 Matrix information() const override;
\n-
222
\n-
224 using Base::hessianDiagonal;
\n-
225
\n-
227 void hessianDiagonalAdd(VectorValues& d) const override;
\n-
228
\n-
230 void hessianDiagonal(double* d) const override;
\n-
231
\n-
233 std::map<Key,Matrix> hessianBlockDiagonal() const override;
\n-
234
\n-
238 std::pair<Matrix, Vector> jacobian() const override;
\n-
239
\n-
243 std::pair<Matrix, Vector> jacobianUnweighted() const;
\n-
244
\n-
248 Matrix augmentedJacobian() const override;
\n+
135 template <class POINT>
\n+
\n+
136 Vector reprojectionError(const POINT& point, const ZVector& measured,
\n+
137 boost::optional<FBlocks&> Fs = boost::none, //
\n+
138 boost::optional<Matrix&> E = boost::none) const {
\n+
139 return ErrorVector(project2(point, Fs, E), measured);
\n+
140 }
\n+
\n+
141
\n+
148 template <int N,
\n+
149 int ND> // N = 2 or 3 (point dimension), ND is the camera dimension
\n+
\n+\n+
151 const std::vector<
\n+
152 Eigen::Matrix<double, ZDim, ND>,
\n+
153 Eigen::aligned_allocator<Eigen::Matrix<double, ZDim, ND>>>& Fs,
\n+
154 const Matrix& E, const Eigen::Matrix<double, N, N>& P, const Vector& b) {
\n+
155 // a single point is observed in m cameras
\n+
156 size_t m = Fs.size();
\n+
157
\n+
158 // Create a SymmetricBlockMatrix (augmented hessian, with extra row/column
\n+
159 // with info vector)
\n+
160 size_t M1 = ND * m + 1;
\n+
161 std::vector<DenseIndex> dims(m + 1); // this also includes the b term
\n+
162 std::fill(dims.begin(), dims.end() - 1, ND);
\n+
163 dims.back() = 1;
\n+
164 SymmetricBlockMatrix augmentedHessian(dims, Matrix::Zero(M1, M1));
\n+
165
\n+
166 // Blockwise Schur complement
\n+
167 for (size_t i = 0; i < m; i++) { // for each camera
\n+
168
\n+
169 const Eigen::Matrix<double, ZDim, ND>& Fi = Fs[i];
\n+
170 const auto FiT = Fi.transpose();
\n+
171 const Eigen::Matrix<double, ZDim, N> Ei_P = //
\n+
172 E.block(ZDim * i, 0, ZDim, N) * P;
\n+
173
\n+
174 // D = (Dx2) * ZDim
\n+
175 augmentedHessian.setOffDiagonalBlock(
\n+
176 i, m,
\n+
177 FiT * b.segment<ZDim>(ZDim * i) // F' * b
\n+
178 -
\n+
179 FiT *
\n+
180 (Ei_P *
\n+
181 (E.transpose() *
\n+
182 b))); // D = (DxZDim) * (ZDimx3) * (N*ZDimm) * (ZDimm x 1)
\n+
183
\n+
184 // (DxD) = (DxZDim) * ( (ZDimxD) - (ZDimx3) * (3xZDim) * (ZDimxD) )
\n+
185 augmentedHessian.setDiagonalBlock(
\n+
186 i,
\n+
187 FiT * (Fi - Ei_P * E.block(ZDim * i, 0, ZDim, N).transpose() * Fi));
\n+
188
\n+
189 // upper triangular part of the hessian
\n+
190 for (size_t j = i + 1; j < m; j++) { // for each camera
\n+
191 const Eigen::Matrix<double, ZDim, ND>& Fj = Fs[j];
\n+
192
\n+
193 // (DxD) = (Dx2) * ( (2x2) * (2xD) )
\n+
194 augmentedHessian.setOffDiagonalBlock(
\n+
195 i, j,
\n+
196 -FiT * (Ei_P * E.block(ZDim * j, 0, ZDim, N).transpose() * Fj));
\n+
197 }
\n+
198 } // end of for over cameras
\n+
199
\n+
200 augmentedHessian.diagonalBlock(m)(0, 0) += b.squaredNorm();
\n+
201 return augmentedHessian;
\n+
202 }
\n+
\n+
203
\n+
217 template <int N, int ND, int NDD>
\n+
\n+\n+
219 const std::vector<
\n+
220 Eigen::Matrix<double, ZDim, ND>,
\n+
221 Eigen::aligned_allocator<Eigen::Matrix<double, ZDim, ND>>>& Fs,
\n+
222 const Matrix& E, const Eigen::Matrix<double, N, N>& P, const Vector& b,
\n+
223 const KeyVector& jacobianKeys, const KeyVector& hessianKeys) {
\n+
224 size_t nrNonuniqueKeys = jacobianKeys.size();
\n+
225 size_t nrUniqueKeys = hessianKeys.size();
\n+
226
\n+
227 // Marginalize point: note - we reuse the standard SchurComplement function.
\n+
228 SymmetricBlockMatrix augmentedHessian = SchurComplement<N, ND>(Fs, E, P, b);
\n+
229
\n+
230 // Pack into an Hessian factor, allow space for b term.
\n+
231 std::vector<DenseIndex> dims(nrUniqueKeys + 1);
\n+
232 std::fill(dims.begin(), dims.end() - 1, NDD);
\n+
233 dims.back() = 1;
\n+
234 SymmetricBlockMatrix augmentedHessianUniqueKeys;
\n+
235
\n+
236 // Deal with the fact that some blocks may share the same keys.
\n+
237 if (nrUniqueKeys == nrNonuniqueKeys) {
\n+
238 // Case when there is 1 calibration key per camera:
\n+
239 augmentedHessianUniqueKeys = SymmetricBlockMatrix(
\n+
240 dims, Matrix(augmentedHessian.selfadjointView()));
\n+
241 } else {
\n+
242 // When multiple cameras share a calibration we have to rearrange
\n+
243 // the results of the Schur complement matrix.
\n+
244 std::vector<DenseIndex> nonuniqueDims(nrNonuniqueKeys + 1); // includes b
\n+
245 std::fill(nonuniqueDims.begin(), nonuniqueDims.end() - 1, NDD);
\n+
246 nonuniqueDims.back() = 1;
\n+
247 augmentedHessian = SymmetricBlockMatrix(
\n+
248 nonuniqueDims, Matrix(augmentedHessian.selfadjointView()));
\n
249
\n-
253 Matrix augmentedJacobianUnweighted() const;
\n-
254
\n-
256 const VerticalBlockMatrix& matrixObject() const { return Ab_; }
\n-
257
\n-\n+
250 // Get map from key to location in the new augmented Hessian matrix (the
\n+
251 // one including only unique keys).
\n+
252 std::map<Key, size_t> keyToSlotMap;
\n+
253 for (size_t k = 0; k < nrUniqueKeys; k++) {
\n+
254 keyToSlotMap[hessianKeys[k]] = k;
\n+
255 }
\n+
256
\n+
257 // Initialize matrix to zero.
\n+
258 augmentedHessianUniqueKeys = SymmetricBlockMatrix(
\n+
259 dims, Matrix::Zero(NDD * nrUniqueKeys + 1, NDD * nrUniqueKeys + 1));
\n
260
\n-
266 GaussianFactor::shared_ptr negate() const override;
\n-
267
\n-
\n-
269 bool isConstrained() const {
\n-
270 return model_ && model_->isConstrained();
\n-
271 }
\n-
\n-
272
\n-
\n-
276 DenseIndex getDim(const_iterator variable) const override {
\n-
277 return Ab_(variable - begin()).cols();
\n-
278 }
\n-
\n-
279
\n-
283 size_t rows() const { return Ab_.rows(); }
\n-
284
\n-
288 size_t cols() const { return Ab_.cols(); }
\n-
289
\n-
291 const SharedDiagonal& get_model() const { return model_; }
\n+
261 // Add contributions for each key: note this loops over the hessian with
\n+
262 // nonUnique keys (augmentedHessian) and populates an Hessian that only
\n+
263 // includes the unique keys (that is what we want to return).
\n+
264 for (size_t i = 0; i < nrNonuniqueKeys; i++) { // rows
\n+
265 Key key_i = jacobianKeys.at(i);
\n+
266
\n+
267 // Update information vector.
\n+
268 augmentedHessianUniqueKeys.updateOffDiagonalBlock(
\n+
269 keyToSlotMap[key_i], nrUniqueKeys,
\n+
270 augmentedHessian.aboveDiagonalBlock(i, nrNonuniqueKeys));
\n+
271
\n+
272 // Update blocks.
\n+
273 for (size_t j = i; j < nrNonuniqueKeys; j++) { // cols
\n+
274 Key key_j = jacobianKeys.at(j);
\n+
275 if (i == j) {
\n+
276 augmentedHessianUniqueKeys.updateDiagonalBlock(
\n+
277 keyToSlotMap[key_i], augmentedHessian.diagonalBlock(i));
\n+
278 } else { // (i < j)
\n+
279 if (keyToSlotMap[key_i] != keyToSlotMap[key_j]) {
\n+
280 augmentedHessianUniqueKeys.updateOffDiagonalBlock(
\n+
281 keyToSlotMap[key_i], keyToSlotMap[key_j],
\n+
282 augmentedHessian.aboveDiagonalBlock(i, j));
\n+
283 } else {
\n+
284 augmentedHessianUniqueKeys.updateDiagonalBlock(
\n+
285 keyToSlotMap[key_i],
\n+
286 augmentedHessian.aboveDiagonalBlock(i, j) +
\n+
287 augmentedHessian.aboveDiagonalBlock(i, j).transpose());
\n+
288 }
\n+
289 }
\n+
290 }
\n+
291 }
\n
292
\n-
294 SharedDiagonal& get_model() { return model_; }
\n-
295
\n-
297 const constBVector getb() const { return Ab_(size()).col(0); }
\n-
298
\n-
300 constABlock getA(const_iterator variable) const { return Ab_(variable - begin()); }
\n-
301
\n-
303 constABlock getA() const { return Ab_.range(0, size()); }
\n-
304
\n-
306 BVector getb() { return Ab_(size()).col(0); }
\n-
307
\n-
309 ABlock getA(iterator variable) { return Ab_(variable - begin()); }
\n-
310
\n-
312 ABlock getA() { return Ab_.range(0, size()); }
\n-
313
\n-
319 void updateHessian(const KeyVector& keys, SymmetricBlockMatrix* info) const override;
\n-
320
\n-
322 Vector operator*(const VectorValues& x) const;
\n-
323
\n-
326 void transposeMultiplyAdd(double alpha, const Vector& e,
\n-
327 VectorValues& x) const;
\n-
328
\n-
330 void multiplyHessianAdd(double alpha, const VectorValues& x,
\n-
331 VectorValues& y) const override;
\n-
332
\n-
341 void multiplyHessianAdd(double alpha, const double* x, double* y,
\n-
342 const std::vector<size_t>& accumulatedDims) const;
\n+
293 // Update bottom right element of the matrix.
\n+
294 augmentedHessianUniqueKeys.updateDiagonalBlock(
\n+
295 nrUniqueKeys, augmentedHessian.diagonalBlock(nrNonuniqueKeys));
\n+
296 }
\n+
297 return augmentedHessianUniqueKeys;
\n+
298 }
\n+
\n+
299
\n+
306 template <int N> // N = 2 or 3
\n+
\n+\n+
308 const FBlocks& Fs, const Matrix& E, const Eigen::Matrix<double, N, N>& P,
\n+
309 const Vector& b) {
\n+
310 return SchurComplement<N, D>(Fs, E, P, b);
\n+
311 }
\n+
\n+
312
\n+
314 template <int N> // N = 2 or 3 (point dimension)
\n+
\n+
315 static void ComputePointCovariance(Eigen::Matrix<double, N, N>& P,
\n+
316 const Matrix& E, double lambda,
\n+
317 bool diagonalDamping = false) {
\n+
318 Matrix EtE = E.transpose() * E;
\n+
319
\n+
320 if (diagonalDamping) { // diagonal of the hessian
\n+
321 EtE.diagonal() += lambda * EtE.diagonal();
\n+
322 } else {
\n+
323 DenseIndex n = E.cols();
\n+
324 EtE += lambda * Eigen::MatrixXd::Identity(n, n);
\n+
325 }
\n+
326
\n+
327 P = (EtE).inverse();
\n+
328 }
\n+
\n+
329
\n+
\n+
331 static Matrix PointCov(const Matrix& E, const double lambda = 0.0,
\n+
332 bool diagonalDamping = false) {
\n+
333 if (E.cols() == 2) {
\n+
334 Matrix2 P2;
\n+
335 ComputePointCovariance<2>(P2, E, lambda, diagonalDamping);
\n+
336 return P2;
\n+
337 } else {
\n+
338 Matrix3 P3;
\n+
339 ComputePointCovariance<3>(P3, E, lambda, diagonalDamping);
\n+
340 return P3;
\n+
341 }
\n+
342 }
\n+
\n
343
\n-
345 VectorValues gradientAtZero() const override;
\n-
346
\n-
348 void gradientAtZero(double* d) const override;
\n-
349
\n-
351 Vector gradient(Key key, const VectorValues& x) const override;
\n-
352
\n-
354 JacobianFactor whiten() const;
\n-
355
\n-
357 std::pair<boost::shared_ptr<GaussianConditional>, shared_ptr>
\n-
358 eliminate(const Ordering& keys);
\n-
359
\n-
361 void setModel(bool anyConstrained, const Vector& sigmas);
\n+
\n+
348 static SymmetricBlockMatrix SchurComplement(const FBlocks& Fblocks,
\n+
349 const Matrix& E, const Vector& b,
\n+
350 const double lambda = 0.0,
\n+
351 bool diagonalDamping = false) {
\n+
352 if (E.cols() == 2) {
\n+
353 Matrix2 P;
\n+
354 ComputePointCovariance<2>(P, E, lambda, diagonalDamping);
\n+
355 return SchurComplement<2>(Fblocks, E, P, b);
\n+
356 } else {
\n+
357 Matrix3 P;
\n+
358 ComputePointCovariance<3>(P, E, lambda, diagonalDamping);
\n+
359 return SchurComplement<3>(Fblocks, E, P, b);
\n+
360 }
\n+
361 }
\n+
\n
362
\n-
374 friend GTSAM_EXPORT std::pair<boost::shared_ptr<GaussianConditional>, shared_ptr>
\n-
375 EliminateQR(const GaussianFactorGraph& factors, const Ordering& keys);
\n-
376
\n-
384 boost::shared_ptr<GaussianConditional> splitConditional(size_t nrFrontals);
\n-
385
\n-
386 protected:
\n-
387
\n-
389 template<typename TERMS>
\n-
390 void fillTerms(const TERMS& terms, const Vector& b, const SharedDiagonal& noiseModel);
\n+
368 template <int N> // N = 2 or 3 (point dimension)
\n+
\n+\n+
370 const FBlocks& Fs, const Matrix& E, const Eigen::Matrix<double, N, N>& P,
\n+
371 const Vector& b, const KeyVector& allKeys, const KeyVector& keys,
\n+
372 /*output ->*/ SymmetricBlockMatrix& augmentedHessian) {
\n+
373 assert(keys.size() == Fs.size());
\n+
374 assert(keys.size() <= allKeys.size());
\n+
375
\n+
376 FastMap<Key, size_t> KeySlotMap;
\n+
377 for (size_t slot = 0; slot < allKeys.size(); slot++)
\n+
378 KeySlotMap.insert(std::make_pair(allKeys[slot], slot));
\n+
379
\n+
380 // Schur complement trick
\n+
381 // G = F' * F - F' * E * P * E' * F
\n+
382 // g = F' * (b - E * P * E' * b)
\n+
383
\n+
384 // a single point is observed in m cameras
\n+
385 size_t m = Fs.size(); // cameras observing current point
\n+
386 size_t M = (augmentedHessian.rows() - 1) / D; // all cameras in the group
\n+
387 assert(allKeys.size() == M);
\n+
388
\n+
389 // Blockwise Schur complement
\n+
390 for (size_t i = 0; i < m; i++) { // for each camera in the current factor
\n
391
\n-
392 private:
\n-
393
\n-
398 void JacobianFactorHelper(
\n-
399 const GaussianFactorGraph& graph,
\n-\n-
401
\n-
408 template<class KEYS, class DIMENSIONS>
\n-
409 JacobianFactor(const KEYS& keys, const DIMENSIONS& dims, DenseIndex m,
\n-
410 const SharedDiagonal& model = SharedDiagonal()) :
\n-
411 Base(keys), Ab_(dims.begin(), dims.end(), m, true), model_(model) {
\n-
412 }
\n-
413
\n-
414 // be very selective on who can access these private methods:
\n-
415 template<typename T> friend class ExpressionFactor;
\n-
416
\n-
418 friend class boost::serialization::access;
\n-
419 template<class ARCHIVE>
\n-
420 void save(ARCHIVE & ar, const unsigned int version) const {
\n-
421 // TODO(fan): This is a hack for Boost < 1.66
\n-
422 // We really need to introduce proper versioning in the archives
\n-
423 // As otherwise this will not read objects serialized by older
\n-
424 // versions of GTSAM
\n-
425 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
426 ar << BOOST_SERIALIZATION_NVP(Ab_);
\n-
427 bool model_null = false;
\n-
428 if(model_.get() == nullptr) {
\n-
429 model_null = true;
\n-
430 ar << boost::serialization::make_nvp("model_null", model_null);
\n-
431 } else {
\n-
432 ar << boost::serialization::make_nvp("model_null", model_null);
\n-
433 ar << BOOST_SERIALIZATION_NVP(model_);
\n-
434 }
\n-
435 }
\n-
436
\n-
437 template<class ARCHIVE>
\n-
438 void load(ARCHIVE & ar, const unsigned int version) {
\n-
439 // invoke serialization of the base class
\n-
440 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
441 ar >> BOOST_SERIALIZATION_NVP(Ab_);
\n-
442 if (version < 1) {
\n-
443 ar >> BOOST_SERIALIZATION_NVP(model_);
\n-
444 } else {
\n-
445 bool model_null;
\n-
446 ar >> BOOST_SERIALIZATION_NVP(model_null);
\n-
447 if (!model_null) {
\n-
448 ar >> BOOST_SERIALIZATION_NVP(model_);
\n-
449 }
\n-
450 }
\n-
451 }
\n-
452
\n-
453 BOOST_SERIALIZATION_SPLIT_MEMBER()
\n-
454 }; // JacobianFactor
\n-
\n-
456template<>
\n-
\n-
457struct traits<JacobianFactor> : public Testable<JacobianFactor> {
\n-
458};
\n-
\n-
459
\n-
460} // \\ namespace gtsam
\n-
461
\n-
462BOOST_CLASS_VERSION(gtsam::JacobianFactor, 1)
\n+
392 const MatrixZD& Fi = Fs[i];
\n+
393 const auto FiT = Fi.transpose();
\n+
394 const Eigen::Matrix<double, 2, N> Ei_P =
\n+
395 E.template block<ZDim, N>(ZDim * i, 0) * P;
\n+
396
\n+
397 // D = (DxZDim) * (ZDim)
\n+
398 // allKeys are the list of all camera keys in the group, e.g, (1,3,4,5,7)
\n+
399 // we should map those to a slot in the local (grouped) hessian
\n+
400 // (0,1,2,3,4) Key cameraKey_i = this->keys_[i];
\n+
401 DenseIndex aug_i = KeySlotMap.at(keys[i]);
\n+
402
\n+
403 // information vector - store previous vector
\n+
404 // vectorBlock = augmentedHessian(aug_i, aug_m).knownOffDiagonal();
\n+
405 // add contribution of current factor
\n+
406 augmentedHessian.updateOffDiagonalBlock(
\n+
407 aug_i, M,
\n+
408 FiT * b.segment<ZDim>(ZDim * i) // F' * b
\n+
409 -
\n+
410 FiT *
\n+
411 (Ei_P *
\n+
412 (E.transpose() *
\n+
413 b))); // D = (DxZDim) * (ZDimx3) * (N*ZDimm) * (ZDimm x 1)
\n+
414
\n+
415 // (DxD) += (DxZDim) * ( (ZDimxD) - (ZDimx3) * (3xZDim) * (ZDimxD) )
\n+
416 // add contribution of current factor
\n+
417 // TODO(gareth): Eigen doesn't let us pass the expression. Call eval() for
\n+
418 // now...
\n+
419 augmentedHessian.updateDiagonalBlock(
\n+
420 aug_i,
\n+
421 ((FiT *
\n+
422 (Fi -
\n+
423 Ei_P * E.template block<ZDim, N>(ZDim * i, 0).transpose() * Fi)))
\n+
424 .eval());
\n+
425
\n+
426 // upper triangular part of the hessian
\n+
427 for (size_t j = i + 1; j < m; j++) { // for each camera
\n+
428 const MatrixZD& Fj = Fs[j];
\n+
429
\n+
430 DenseIndex aug_j = KeySlotMap.at(keys[j]);
\n+
431
\n+
432 // (DxD) = (DxZDim) * ( (ZDimxZDim) * (ZDimxD) )
\n+
433 // off diagonal block - store previous block
\n+
434 // matrixBlock = augmentedHessian(aug_i, aug_j).knownOffDiagonal();
\n+
435 // add contribution of current factor
\n+
436 augmentedHessian.updateOffDiagonalBlock(
\n+
437 aug_i, aug_j,
\n+
438 -FiT * (Ei_P * E.template block<ZDim, N>(ZDim * j, 0).transpose() *
\n+
439 Fj));
\n+
440 }
\n+
441 } // end of for over cameras
\n+
442
\n+
443 augmentedHessian.diagonalBlock(M)(0, 0) += b.squaredNorm();
\n+
444 }
\n+
\n+
445
\n+
446 private:
\n+\n+
449 template <class ARCHIVE>
\n+
450 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
451 ar&(*this);
\n+
452 }
\n+
453
\n+
454 public:
\n+\n+
456};
\n+
\n+
457
\n+
458template <class CAMERA>
\n+
459const int CameraSet<CAMERA>::D;
\n+
460
\n+
461template <class CAMERA>
\n+\n
463
\n-
464#include <gtsam/linear/JacobianFactor-inl.h>
\n-
465
\n+
464template <class CAMERA>
\n+
465struct traits<CameraSet<CAMERA>> : public Testable<CameraSet<CAMERA>> {};
\n
466
\n-
A matrix with column blocks of pre-defined sizes.
\n-
VariableSlots describes the structure of a combined factor in terms of where each block comes from in...
\n-
A factor with a quadratic error function - a Gaussian.
\n-\n-
Included from all GTSAM files.
\n-
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n+
467template <class CAMERA>
\n+
468struct traits<const CameraSet<CAMERA>> : public Testable<CameraSet<CAMERA>> {};
\n+
469
\n+
470} // namespace gtsam
\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
Concept check for values that can be used in unit tests.
\n+
Access to matrices via blocks of pre-defined sizes.
\n+
Calibrated camera for which only pose is unknown.
\n+
3D Point
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n-
void save(const Matrix &A, const string &s, const string &filename)
save a matrix to file, which can be loaded by matlab
Definition Matrix.cpp:167
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n-
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that h...
Definition JacobianFactor.cpp:789
\n+
const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)
Extracts a row view from a matrix that avoids a copy.
Definition Matrix.h:222
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+
Give fixed size dimension of a type, fails at compile time if dynamic.
Definition Manifold.h:164
\n
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n+
void setDiagonalBlock(DenseIndex I, const XprType &xpr)
Set a diagonal block. Only the upper triangular portion of xpr is evaluated.
Definition SymmetricBlockMatrix.h:195
\n+
void setOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)
Set an off-diagonal block. Only the upper triangular portion of xpr is evaluated.
Definition SymmetricBlockMatrix.h:201
\n+
constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const
Get block above the diagonal (I, J).
Definition SymmetricBlockMatrix.h:150
\n+
DenseIndex rows() const
Row size.
Definition SymmetricBlockMatrix.h:114
\n+
void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)
Update an off diagonal block.
Definition SymmetricBlockMatrix.h:228
\n+
Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)
Return the J'th diagonal block as a self adjoint view.
Definition SymmetricBlockMatrix.h:135
\n+
void updateDiagonalBlock(DenseIndex I, const XprType &xpr)
Increment the diagonal block by the values in xpr. Only reads the upper triangular part of xpr.
Definition SymmetricBlockMatrix.h:212
\n+
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j).
Definition SymmetricBlockMatrix.h:156
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n-
Block range(DenseIndex startBlock, DenseIndex endBlock)
access ranges of blocks at a time
Definition VerticalBlockMatrix.h:130
\n-
DenseIndex rows() const
Row size.
Definition VerticalBlockMatrix.h:115
\n-
DenseIndex cols() const
Column size.
Definition VerticalBlockMatrix.h:118
\n-
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n-
KeyVector::iterator iterator
Iterator over keys.
Definition Factor.h:77
\n-
Definition Ordering.h:34
\n-
A combined factor is assembled as one block of rows for each component factor.
Definition VariableSlots.h:52
\n-
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
A Gaussian factor using the canonical parameters (information form)
Definition HessianFactor.h:101
\n-
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n-
const constBVector getb() const
Get a view of the r.h.s.
Definition JacobianFactor.h:297
\n-
BVector getb()
Get a view of the r.h.s.
Definition JacobianFactor.h:306
\n-
const SharedDiagonal & get_model() const
get a copy of model
Definition JacobianFactor.h:291
\n-
JacobianFactor(const JacobianFactor &jf)
Copy constructor.
Definition JacobianFactor.h:114
\n-
JacobianFactor This
Typedef to this class.
Definition JacobianFactor.h:94
\n-
bool isConstrained() const
is noise model constrained ?
Definition JacobianFactor.h:269
\n-
constABlock getA() const
Get a view of the A matrix, not weighted by noise.
Definition JacobianFactor.h:303
\n-
GaussianFactor::shared_ptr clone() const override
Clone this JacobianFactor.
Definition JacobianFactor.h:189
\n-
ABlock getA(iterator variable)
Get a view of the A matrix for the variable pointed to by the given key iterator (non-const version)
Definition JacobianFactor.h:309
\n-
SharedDiagonal & get_model()
get a copy of model (non-const version)
Definition JacobianFactor.h:294
\n-
DenseIndex getDim(const_iterator variable) const override
Return the dimension of the variable pointed to by the given key iterator todo: Remove this in favor ...
Definition JacobianFactor.h:276
\n-
VerticalBlockMatrix & matrixObject()
Mutable access to the full augmented Jacobian matrix of this factor as a VerticalBlockMatrix object.
Definition JacobianFactor.h:259
\n-
ABlock getA()
Get a view of the A matrix.
Definition JacobianFactor.h:312
\n-
GaussianFactor Base
Typedef to base class.
Definition JacobianFactor.h:95
\n-
~JacobianFactor() override
Virtual destructor.
Definition JacobianFactor.h:186
\n-
const VerticalBlockMatrix & matrixObject() const
Return the full augmented Jacobian matrix of this factor as a VerticalBlockMatrix object.
Definition JacobianFactor.h:256
\n-
size_t rows() const
return the number of rows in the corresponding linear system
Definition JacobianFactor.h:283
\n-
size_t cols() const
return the number of columns in the corresponding linear system
Definition JacobianFactor.h:288
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition JacobianFactor.h:96
\n-
constABlock getA(const_iterator variable) const
Get a view of the A matrix for the variable pointed to by the given key iterator.
Definition JacobianFactor.h:300
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
In Gaussian factors, the error function returns either the negative log-likelihood,...
\n-
is the normalization constant.
\n-
The Factor::error simply extracts the.
\n+
A set of cameras, all with their own calibration.
Definition CameraSet.h:36
\n+
Vector reprojectionError(const POINT &point, const ZVector &measured, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Calculate vector [project2(point)-z] of re-projection errors.
Definition CameraSet.h:136
\n+
virtual void print(const std::string &s="") const
print
Definition CameraSet.h:85
\n+
static void ComputePointCovariance(Eigen::Matrix< double, N, N > &P, const Matrix &E, double lambda, bool diagonalDamping=false)
Computes Point Covariance P, with lambda parameter.
Definition CameraSet.h:315
\n+
static SymmetricBlockMatrix SchurComplement(const FBlocks &Fblocks, const Matrix &E, const Vector &b, const double lambda=0.0, bool diagonalDamping=false)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix Dynamic version.
Definition CameraSet.h:348
\n+
CAMERA::Measurement Z
2D measurement and noise model for each of the m views The order is kept the same as the keys that we...
Definition CameraSet.h:44
\n+
virtual ~CameraSet()=default
Destructor.
\n+
bool equals(const CameraSet &p, double tol=1e-9) const
equals
Definition CameraSet.h:91
\n+
static Matrix PointCov(const Matrix &E, const double lambda=0.0, bool diagonalDamping=false)
Computes Point Covariance P, with lambda parameter, dynamic version.
Definition CameraSet.h:331
\n+
static Vector ErrorVector(const ZVector &predicted, const ZVector &measured)
Make a vector of re-projection errors.
Definition CameraSet.h:51
\n+
static void UpdateSchurComplement(const FBlocks &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &allKeys, const KeyVector &keys, SymmetricBlockMatrix &augmentedHessian)
Applies Schur complement (exploiting block structure) to get a smart factor on cameras,...
Definition CameraSet.h:369
\n+
static SymmetricBlockMatrix SchurComplementAndRearrangeBlocks(const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &jacobianKeys, const KeyVector &hessianKeys)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * ...
Definition CameraSet.h:218
\n+
static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * ...
Definition CameraSet.h:150
\n+
static const int ZDim
Measurement dimension.
Definition CameraSet.h:48
\n+
static SymmetricBlockMatrix SchurComplement(const FBlocks &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector &b)
Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G = F' * F - F' * E * P * ...
Definition CameraSet.h:307
\n+
static const int D
Camera dimension.
Definition CameraSet.h:47
\n+
friend class boost::serialization::access
Serialization function.
Definition CameraSet.h:448
\n+
Eigen::Matrix< double, ZDim, D > MatrixZD
Definitions for blocks of F.
Definition CameraSet.h:77
\n+
ZVector project2(const POINT &point, boost::optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::none) const
Project a point (possibly Unit3 at infinity), with derivatives Note that F is a sparse block-diagonal...
Definition CameraSet.h:108
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-JacobianFactor.h\n+CameraSet.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,487 +16,591 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b._\bh>\n-26\n-27#include \n-28#include \n-29#include \n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm {\n-32\n-33 // Forward declarations\n-34 class HessianFactor;\n-35 class VariableSlots;\n-36 class GaussianFactorGraph;\n-37 class _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n-38 class HessianFactor;\n-39 class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n-40 class Ordering;\n-41 class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br;\n-42\n-48 GTSAM_EXPORT std::pair, boost::\n-shared_ptr >\n-49 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR(const GaussianFactorGraph& factors, const Ordering& keys);\n-50\n-_\b9_\b0 class GTSAM_EXPORT _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-91 {\n-92 public:\n-93\n-_\b9_\b4 typedef _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-_\b9_\b5 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n-_\b9_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-97\n-98 typedef VerticalBlockMatrix::Block ABlock;\n-99 typedef VerticalBlockMatrix::constBlock constABlock;\n-100 typedef ABlock::ColXpr BVector;\n-101 typedef constABlock::ConstColXpr constBVector;\n-102\n-103 protected:\n-104\n-105 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx Ab_; // the block view of the full matrix\n-106 noiseModel::Diagonal::shared_ptr model_; // Gaussian noise model with\n-diagonal covariance matrix\n-107\n-108 public:\n-109\n-111 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& gf);\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh> // for Cheirality exception\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+27\n+28#include \n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+35template \n+_\b3_\b6class _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt : public std::vector> {\n+37 protected:\n+38 using Base = std::vector>;\n+39\n+_\b4_\b4 typedef typename CAMERA::Measurement _\bZ;\n+45 typedef typename CAMERA::MeasurementVector ZVector;\n+46\n+_\b4_\b7 static const int _\bD = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+_\b4_\b8 static const int _\bZ_\bD_\bi_\bm = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bZ_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn;\n+49\n+_\b5_\b1 static Vector _\bE_\br_\br_\bo_\br_\bV_\be_\bc_\bt_\bo_\br(const ZVector& predicted, const ZVector& measured)\n+{\n+52 // Check size\n+53 size_t m = predicted.size();\n+54 if (measured.size() != m)\n+55 throw std::runtime_error(\"CameraSet::errors: size mismatch\");\n+56\n+57 // Project and fill error vector\n+58 Vector b(_\bZ_\bD_\bi_\bm * m);\n+59 for (size_t i = 0, _\br_\bo_\bw = 0; i < m; i++, _\br_\bo_\bw += _\bZ_\bD_\bi_\bm) {\n+60 Vector bi = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bZ_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured[i], predicted[i]);\n+61 if (_\bZ_\bD_\bi_\bm == 3 && std::isnan(bi(1))) { // if it is a stereo point and the\n+62 // right pixel is missing (nan)\n+63 bi(1) = 0;\n+64 }\n+65 b.segment<_\bZ_\bD_\bi_\bm>(_\br_\bo_\bw) = bi;\n+66 }\n+67 return b;\n+68 }\n+69\n+70 public:\n+71 using Base::Base; // Inherit the vector constructors\n+72\n+_\b7_\b4 virtual _\b~_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt() = default;\n+75\n+_\b7_\b7 using _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD = Eigen::Matrix;\n+78 using FBlocks = std::vector>;\n+79\n+_\b8_\b5 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const {\n+86 std::cout << s << \"CameraSet, cameras = \\n\";\n+87 for (size_t k = 0; k < this->size(); ++k) this->at(k).print(s);\n+88 }\n+89\n+_\b9_\b1 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt& p, double tol = 1e-9) const {\n+92 if (this->size() != p.size()) return false;\n+93 bool camerasAreEqual = true;\n+94 for (size_t i = 0; i < this->size(); i++) {\n+95 if (this->at(i).equals(p.at(i), tol) == false) camerasAreEqual = false;\n+96 break;\n+97 }\n+98 return camerasAreEqual;\n+99 }\n+100\n+107 template \n+_\b1_\b0_\b8 ZVector _\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(const POINT& point, //\n+109 boost::optional Fs = boost::none, //\n+110 boost::optional E = boost::none) const {\n+111 static const int N = _\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b<_\bP_\bO_\bI_\bN_\bT_\b>_\b:_\b:_\bv_\ba_\bl_\bu_\be;\n 112\n-_\b1_\b1_\b4 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& jf) : _\bB_\ba_\bs_\be(jf), Ab_(jf.Ab_), model_\n-(jf.model_) {}\n-115\n-117 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& hf);\n-118\n-120 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br();\n+113 // Allocate result\n+114 size_t m = this->size();\n+115 ZVector z;\n+116 z.reserve(m);\n+117\n+118 // Allocate derivatives\n+119 if (E) E->resize(_\bZ_\bD_\bi_\bm * m, N);\n+120 if (Fs) Fs->resize(m);\n 121\n-123 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const Vector& b_in);\n-124\n-126 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by i1, const Matrix& A1,\n-127 const Vector& b, const SharedDiagonal& model = SharedDiagonal());\n-128\n-130 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by i1, const Matrix& A1,\n-131 _\bK_\be_\by i2, const Matrix& A2,\n-132 const Vector& b, const SharedDiagonal& model = SharedDiagonal());\n+122 // Project and fill derivatives\n+123 for (size_t i = 0; i < m; i++) {\n+124 _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD Fi;\n+125 Eigen::Matrix Ei;\n+126 z.emplace_back(this->at(i)._\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(point, Fs ? &Fi : 0, E ? &Ei : 0));\n+127 if (Fs) (*Fs)[i] = Fi;\n+128 if (E) E->block<_\bZ_\bD_\bi_\bm, N>(_\bZ_\bD_\bi_\bm * i, 0) = Ei;\n+129 }\n+130\n+131 return z;\n+132 }\n 133\n-135 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by i1, const Matrix& A1, _\bK_\be_\by i2,\n-136 const Matrix& A2, _\bK_\be_\by i3, const Matrix& A3,\n-137 const Vector& b, const SharedDiagonal& model = SharedDiagonal());\n-138\n-142 template\n-143 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const TERMS& terms, const Vector& b, const SharedDiagonal&\n-model = SharedDiagonal());\n-144\n-149 template\n-150 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n-151 const KEYS& keys, const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& augmentedMatrix, const\n-SharedDiagonal& sigmas = SharedDiagonal());\n-152\n-157 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n-158 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph);\n-159\n-164 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n-165 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n-166 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs& p_variableSlots);\n-167\n-172 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n-173 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n-174 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering);\n-175\n-180 explicit _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n-181 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n-182 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-183 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs& p_variableSlots);\n-184\n-_\b1_\b8_\b6 _\b~_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-187\n-_\b1_\b8_\b9 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const override {\n-190 return boost::static_pointer_cast(\n-191 boost::make_shared(*this));\n-192 }\n-193\n-194 // Implementing Testable interface\n-195 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n-196 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n-197 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& lf, double tol = 1e-9) const override;\n-198\n-199 Vector unweighted_error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-200 Vector error_vector(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n-203 using GaussianFactor::error;\n-204\n-206 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n-207\n-216 Matrix augmentedInformation() const override;\n-217\n-221 Matrix information() const override;\n-222\n-224 using Base::hessianDiagonal;\n-225\n-227 void hessianDiagonalAdd(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& d) const override;\n-228\n-230 void hessianDiagonal(double* d) const override;\n-231\n-233 std::map hessianBlockDiagonal() const override;\n-234\n-238 std::pair jacobian() const override;\n-239\n-243 std::pair jacobianUnweighted() const;\n-244\n-248 Matrix augmentedJacobian() const override;\n+135 template \n+_\b1_\b3_\b6 Vector _\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br(const POINT& point, const ZVector& measured,\n+137 boost::optional Fs = boost::none, //\n+138 boost::optional E = boost::none) const {\n+139 return _\bE_\br_\br_\bo_\br_\bV_\be_\bc_\bt_\bo_\br(_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2(point, Fs, E), measured);\n+140 }\n+141\n+148 template // N = 2 or 3 (point dimension), ND is the camera dimension\n+_\b1_\b5_\b0 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(\n+151 const std::vector<\n+152 Eigen::Matrix,\n+153 Eigen::aligned_allocator>>& Fs,\n+154 const Matrix& E, const Eigen::Matrix& P, const Vector& b) {\n+155 // a single point is observed in m cameras\n+156 size_t m = Fs.size();\n+157\n+158 // Create a SymmetricBlockMatrix (augmented hessian, with extra row/column\n+159 // with info vector)\n+160 size_t M1 = ND * m + 1;\n+161 std::vector dims(m + 1); // this also includes the b term\n+162 std::fill(dims.begin(), dims.end() - 1, ND);\n+163 dims.back() = 1;\n+164 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessian(dims, Matrix::Zero(M1, M1));\n+165\n+166 // Blockwise Schur complement\n+167 for (size_t i = 0; i < m; i++) { // for each camera\n+168\n+169 const Eigen::Matrix& Fi = Fs[i];\n+170 const auto FiT = Fi.transpose();\n+171 const Eigen::Matrix Ei_P = //\n+172 E.block(_\bZ_\bD_\bi_\bm * i, 0, _\bZ_\bD_\bi_\bm, N) * P;\n+173\n+174 // D = (Dx2) * ZDim\n+175 augmentedHessian._\bs_\be_\bt_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+176 i, m,\n+177 FiT * b.segment<_\bZ_\bD_\bi_\bm>(_\bZ_\bD_\bi_\bm * i) // F' * b\n+178 -\n+179 FiT *\n+180 (Ei_P *\n+181 (E.transpose() *\n+182 b))); // D = (DxZDim) * (ZDimx3) * (N*ZDimm) * (ZDimm x 1)\n+183\n+184 // (DxD) = (DxZDim) * ( (ZDimxD) - (ZDimx3) * (3xZDim) * (ZDimxD) )\n+185 augmentedHessian._\bs_\be_\bt_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+186 i,\n+187 FiT * (Fi - Ei_P * E.block(_\bZ_\bD_\bi_\bm * i, 0, _\bZ_\bD_\bi_\bm, N).transpose() * Fi));\n+188\n+189 // upper triangular part of the hessian\n+190 for (size_t j = i + 1; j < m; j++) { // for each camera\n+191 const Eigen::Matrix& Fj = Fs[j];\n+192\n+193 // (DxD) = (Dx2) * ( (2x2) * (2xD) )\n+194 augmentedHessian._\bs_\be_\bt_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+195 i, j,\n+196 -FiT * (Ei_P * E.block(_\bZ_\bD_\bi_\bm * j, 0, _\bZ_\bD_\bi_\bm, N).transpose() * Fj));\n+197 }\n+198 } // end of for over cameras\n+199\n+200 augmentedHessian._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(m)(0, 0) += b.squaredNorm();\n+201 return augmentedHessian;\n+202 }\n+203\n+217 template \n+_\b2_\b1_\b8 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\bA_\bn_\bd_\bR_\be_\ba_\br_\br_\ba_\bn_\bg_\be_\bB_\bl_\bo_\bc_\bk_\bs(\n+219 const std::vector<\n+220 Eigen::Matrix,\n+221 Eigen::aligned_allocator>>& Fs,\n+222 const Matrix& E, const Eigen::Matrix& P, const Vector& b,\n+223 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& jacobianKeys, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& hessianKeys) {\n+224 size_t nrNonuniqueKeys = jacobianKeys.size();\n+225 size_t nrUniqueKeys = hessianKeys.size();\n+226\n+227 // Marginalize point: note - we reuse the standard SchurComplement\n+function.\n+228 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessian = SchurComplement(Fs, E, P,\n+b);\n+229\n+230 // Pack into an Hessian factor, allow space for b term.\n+231 std::vector dims(nrUniqueKeys + 1);\n+232 std::fill(dims.begin(), dims.end() - 1, NDD);\n+233 dims.back() = 1;\n+234 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx augmentedHessianUniqueKeys;\n+235\n+236 // Deal with the fact that some blocks may share the same keys.\n+237 if (nrUniqueKeys == nrNonuniqueKeys) {\n+238 // Case when there is 1 calibration key per camera:\n+239 augmentedHessianUniqueKeys = _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(\n+240 dims, Matrix(augmentedHessian._\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw()));\n+241 } else {\n+242 // When multiple cameras share a calibration we have to rearrange\n+243 // the results of the Schur complement matrix.\n+244 std::vector nonuniqueDims(nrNonuniqueKeys + 1); // includes b\n+245 std::fill(nonuniqueDims.begin(), nonuniqueDims.end() - 1, NDD);\n+246 nonuniqueDims.back() = 1;\n+247 augmentedHessian = _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(\n+248 nonuniqueDims, Matrix(augmentedHessian._\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw()));\n 249\n-253 Matrix augmentedJacobianUnweighted() const;\n-254\n-_\b2_\b5_\b6 const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& _\bm_\ba_\bt_\br_\bi_\bx_\bO_\bb_\bj_\be_\bc_\bt() const { return Ab_; }\n-257\n-_\b2_\b5_\b9 _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& _\bm_\ba_\bt_\br_\bi_\bx_\bO_\bb_\bj_\be_\bc_\bt() { return Ab_; }\n+250 // Get map from key to location in the new augmented Hessian matrix (the\n+251 // one including only unique keys).\n+252 std::map keyToSlotMap;\n+253 for (size_t k = 0; k < nrUniqueKeys; k++) {\n+254 keyToSlotMap[hessianKeys[k]] = k;\n+255 }\n+256\n+257 // Initialize matrix to zero.\n+258 augmentedHessianUniqueKeys = _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(\n+259 dims, Matrix::Zero(NDD * nrUniqueKeys + 1, NDD * nrUniqueKeys + 1));\n 260\n-266 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br negate() const override;\n-267\n-_\b2_\b6_\b9 bool _\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd() const {\n-270 return model_ && model_->isConstrained();\n-271 }\n-272\n-_\b2_\b7_\b6 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bD_\bi_\bm(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) const override {\n-277 return Ab_(variable - begin())._\bc_\bo_\bl_\bs();\n-278 }\n-279\n-_\b2_\b8_\b3 size_t _\br_\bo_\bw_\bs() const { return Ab_._\br_\bo_\bw_\bs(); }\n-284\n-_\b2_\b8_\b8 size_t _\bc_\bo_\bl_\bs() const { return Ab_._\bc_\bo_\bl_\bs(); }\n-289\n-_\b2_\b9_\b1 const SharedDiagonal& _\bg_\be_\bt_\b__\bm_\bo_\bd_\be_\bl() const { return model_; }\n+261 // Add contributions for each key: note this loops over the hessian with\n+262 // nonUnique keys (augmentedHessian) and populates an Hessian that only\n+263 // includes the unique keys (that is what we want to return).\n+264 for (size_t i = 0; i < nrNonuniqueKeys; i++) { // rows\n+265 _\bK_\be_\by key_i = jacobianKeys.at(i);\n+266\n+267 // Update information vector.\n+268 augmentedHessianUniqueKeys._\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+269 keyToSlotMap[key_i], nrUniqueKeys,\n+270 augmentedHessian._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i, nrNonuniqueKeys));\n+271\n+272 // Update blocks.\n+273 for (size_t j = i; j < nrNonuniqueKeys; j++) { // cols\n+274 _\bK_\be_\by key_j = jacobianKeys.at(j);\n+275 if (i == j) {\n+276 augmentedHessianUniqueKeys._\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+277 keyToSlotMap[key_i], augmentedHessian._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i));\n+278 } else { // (i < j)\n+279 if (keyToSlotMap[key_i] != keyToSlotMap[key_j]) {\n+280 augmentedHessianUniqueKeys._\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+281 keyToSlotMap[key_i], keyToSlotMap[key_j],\n+282 augmentedHessian._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i, j));\n+283 } else {\n+284 augmentedHessianUniqueKeys._\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+285 keyToSlotMap[key_i],\n+286 augmentedHessian._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i, j) +\n+287 augmentedHessian._\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(i, j).transpose());\n+288 }\n+289 }\n+290 }\n+291 }\n 292\n-_\b2_\b9_\b4 SharedDiagonal& _\bg_\be_\bt_\b__\bm_\bo_\bd_\be_\bl() { return model_; }\n-295\n-_\b2_\b9_\b7 const constBVector _\bg_\be_\bt_\bb() const { return Ab_(size()).col(0); }\n-298\n-_\b3_\b0_\b0 constABlock _\bg_\be_\bt_\bA(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) const { return Ab_(variable -\n-begin()); }\n-301\n-_\b3_\b0_\b3 constABlock _\bg_\be_\bt_\bA() const { return Ab_._\br_\ba_\bn_\bg_\be(0, size()); }\n-304\n-_\b3_\b0_\b6 BVector _\bg_\be_\bt_\bb() { return Ab_(size()).col(0); }\n-307\n-_\b3_\b0_\b9 ABlock _\bg_\be_\bt_\bA(_\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) { return Ab_(variable - begin()); }\n-310\n-_\b3_\b1_\b2 ABlock _\bg_\be_\bt_\bA() { return Ab_._\br_\ba_\bn_\bg_\be(0, size()); }\n-313\n-319 void updateHessian(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys, _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx* info) const\n-override;\n-320\n-322 Vector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-323\n-326 void transposeMultiplyAdd(double alpha, const Vector& e,\n-327 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-328\n-330 void multiplyHessianAdd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n-331 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const override;\n-332\n-341 void multiplyHessianAdd(double alpha, const double* x, double* y,\n-342 const std::vector& accumulatedDims) const;\n+293 // Update bottom right element of the matrix.\n+294 augmentedHessianUniqueKeys._\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+295 nrUniqueKeys, augmentedHessian._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(nrNonuniqueKeys));\n+296 }\n+297 return augmentedHessianUniqueKeys;\n+298 }\n+299\n+306 template // N = 2 or 3\n+_\b3_\b0_\b7 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(\n+308 const FBlocks& Fs, const Matrix& E, const Eigen::Matrix& P,\n+309 const Vector& b) {\n+310 return SchurComplement(Fs, E, P, b);\n+311 }\n+312\n+314 template // N = 2 or 3 (point dimension)\n+_\b3_\b1_\b5 static void _\bC_\bo_\bm_\bp_\bu_\bt_\be_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be(Eigen::Matrix& P,\n+316 const Matrix& E, double lambda,\n+317 bool diagonalDamping = false) {\n+318 Matrix EtE = E.transpose() * E;\n+319\n+320 if (diagonalDamping) { // diagonal of the hessian\n+321 EtE.diagonal() += lambda * EtE.diagonal();\n+322 } else {\n+323 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx n = E.cols();\n+324 EtE += lambda * Eigen::MatrixXd::Identity(n, n);\n+325 }\n+326\n+327 P = (EtE).inverse();\n+328 }\n+329\n+_\b3_\b3_\b1 static Matrix _\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv(const Matrix& E, const double lambda = 0.0,\n+332 bool diagonalDamping = false) {\n+333 if (E.cols() == 2) {\n+334 Matrix2 P2;\n+335 ComputePointCovariance<2>(P2, E, lambda, diagonalDamping);\n+336 return P2;\n+337 } else {\n+338 Matrix3 P3;\n+339 ComputePointCovariance<3>(P3, E, lambda, diagonalDamping);\n+340 return P3;\n+341 }\n+342 }\n 343\n-345 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const override;\n-346\n-348 void gradientAtZero(double* d) const override;\n-349\n-351 Vector gradient(_\bK_\be_\by key, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const override;\n-352\n-354 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br whiten() const;\n-355\n-357 std::pair, shared_ptr>\n-358 eliminate(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys);\n-359\n-361 void setModel(bool anyConstrained, const Vector& sigmas);\n+_\b3_\b4_\b8 static _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx _\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(const FBlocks& Fblocks,\n+349 const Matrix& E, const Vector& b,\n+350 const double lambda = 0.0,\n+351 bool diagonalDamping = false) {\n+352 if (E.cols() == 2) {\n+353 Matrix2 P;\n+354 ComputePointCovariance<2>(P, E, lambda, diagonalDamping);\n+355 return SchurComplement<2>(Fblocks, E, P, b);\n+356 } else {\n+357 Matrix3 P;\n+358 ComputePointCovariance<3>(P, E, lambda, diagonalDamping);\n+359 return SchurComplement<3>(Fblocks, E, P, b);\n+360 }\n+361 }\n 362\n-374 friend GTSAM_EXPORT std::pair,\n-shared_ptr>\n-375 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys);\n-376\n-384 boost::shared_ptr splitConditional(size_t nrFrontals);\n-385\n-386 protected:\n-387\n-389 template\n-390 void fillTerms(const TERMS& terms, const Vector& b, const SharedDiagonal&\n-noiseModel);\n+368 template // N = 2 or 3 (point dimension)\n+_\b3_\b6_\b9 static void _\bU_\bp_\bd_\ba_\bt_\be_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt(\n+370 const FBlocks& Fs, const Matrix& E, const Eigen::Matrix& P,\n+371 const Vector& b, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& allKeys, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys,\n+372 /*output ->*/ _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& augmentedHessian) {\n+373 assert(keys.size() == Fs.size());\n+374 assert(keys.size() <= allKeys.size());\n+375\n+376 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bs_\bi_\bz_\be_\b__\bt_\b> KeySlotMap;\n+377 for (size_t slot = 0; slot < allKeys.size(); slot++)\n+378 KeySlotMap.insert(std::make_pair(allKeys[slot], slot));\n+379\n+380 // Schur complement trick\n+381 // G = F' * F - F' * E * P * E' * F\n+382 // g = F' * (b - E * P * E' * b)\n+383\n+384 // a single point is observed in m cameras\n+385 size_t m = Fs.size(); // cameras observing current point\n+386 size_t M = (augmentedHessian._\br_\bo_\bw_\bs() - 1) / _\bD; // all cameras in the group\n+387 assert(allKeys.size() == M);\n+388\n+389 // Blockwise Schur complement\n+390 for (size_t i = 0; i < m; i++) { // for each camera in the current factor\n 391\n-392 private:\n-393\n-398 void JacobianFactorHelper(\n-399 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n-400 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b>& orderedSlots);\n-401\n-408 template\n-409 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const KEYS& keys, const DIMENSIONS& dims, _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx m,\n-410 const SharedDiagonal& model = SharedDiagonal()) :\n-411 Base(keys), Ab_(dims.begin(), dims.end(), m, true), model_(model) {\n-412 }\n-413\n-414 // be very selective on who can access these private methods:\n-415 template friend class ExpressionFactor;\n-416\n-_\b4_\b1_\b8 friend class boost::serialization::access;\n-419 template\n-420 void _\bs_\ba_\bv_\be(ARCHIVE & ar, const unsigned int version) const {\n-421 // TODO(fan): This is a hack for Boost < 1.66\n-422 // We really need to introduce proper versioning in the archives\n-423 // As otherwise this will not read objects serialized by older\n-424 // versions of GTSAM\n-425 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-426 ar << BOOST_SERIALIZATION_NVP(Ab_);\n-427 bool model_null = false;\n-428 if(model_.get() == nullptr) {\n-429 model_null = true;\n-430 ar << boost::serialization::make_nvp(\"model_null\", model_null);\n-431 } else {\n-432 ar << boost::serialization::make_nvp(\"model_null\", model_null);\n-433 ar << BOOST_SERIALIZATION_NVP(model_);\n-434 }\n-435 }\n-436\n-437 template\n-438 void load(ARCHIVE & ar, const unsigned int version) {\n-439 // invoke serialization of the base class\n-440 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n-441 ar >> BOOST_SERIALIZATION_NVP(Ab_);\n-442 if (version < 1) {\n-443 ar >> BOOST_SERIALIZATION_NVP(model_);\n-444 } else {\n-445 bool model_null;\n-446 ar >> BOOST_SERIALIZATION_NVP(model_null);\n-447 if (!model_null) {\n-448 ar >> BOOST_SERIALIZATION_NVP(model_);\n-449 }\n-450 }\n-451 }\n-452\n-453 BOOST_SERIALIZATION_SPLIT_MEMBER()\n-454 }; // JacobianFactor\n-456template<>\n-_\b4_\b5_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-458};\n-459\n-460} // \\ namespace gtsam\n-461\n-462BOOST_CLASS_VERSION(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br, 1)\n+392 const _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD& Fi = Fs[i];\n+393 const auto FiT = Fi.transpose();\n+394 const Eigen::Matrix Ei_P =\n+395 E.template block(_\bZ_\bD_\bi_\bm * i, 0) * P;\n+396\n+397 // D = (DxZDim) * (ZDim)\n+398 // allKeys are the list of all camera keys in the group, e.g, (1,3,4,5,7)\n+399 // we should map those to a slot in the local (grouped) hessian\n+400 // (0,1,2,3,4) Key cameraKey_i = this->keys_[i];\n+401 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx aug_i = KeySlotMap.at(keys[i]);\n+402\n+403 // information vector - store previous vector\n+404 // vectorBlock = augmentedHessian(aug_i, aug_m).knownOffDiagonal();\n+405 // add contribution of current factor\n+406 augmentedHessian._\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+407 aug_i, M,\n+408 FiT * b.segment<_\bZ_\bD_\bi_\bm>(_\bZ_\bD_\bi_\bm * i) // F' * b\n+409 -\n+410 FiT *\n+411 (Ei_P *\n+412 (E.transpose() *\n+413 b))); // D = (DxZDim) * (ZDimx3) * (N*ZDimm) * (ZDimm x 1)\n+414\n+415 // (DxD) += (DxZDim) * ( (ZDimxD) - (ZDimx3) * (3xZDim) * (ZDimxD) )\n+416 // add contribution of current factor\n+417 // TODO(gareth): Eigen doesn't let us pass the expression. Call eval() for\n+418 // now...\n+419 augmentedHessian._\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+420 aug_i,\n+421 ((FiT *\n+422 (Fi -\n+423 Ei_P * E.template block(_\bZ_\bD_\bi_\bm * i, 0).transpose() * Fi)))\n+424 .eval());\n+425\n+426 // upper triangular part of the hessian\n+427 for (size_t j = i + 1; j < m; j++) { // for each camera\n+428 const _\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD& Fj = Fs[j];\n+429\n+430 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx aug_j = KeySlotMap.at(keys[j]);\n+431\n+432 // (DxD) = (DxZDim) * ( (ZDimxZDim) * (ZDimxD) )\n+433 // off diagonal block - store previous block\n+434 // matrixBlock = augmentedHessian(aug_i, aug_j).knownOffDiagonal();\n+435 // add contribution of current factor\n+436 augmentedHessian._\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(\n+437 aug_i, aug_j,\n+438 -FiT * (Ei_P * E.template block(_\bZ_\bD_\bi_\bm * j, 0).transpose() *\n+439 Fj));\n+440 }\n+441 } // end of for over cameras\n+442\n+443 augmentedHessian._\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk(M)(0, 0) += b.squaredNorm();\n+444 }\n+445\n+446 private:\n+_\b4_\b4_\b8 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+449 template \n+450 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+451 ar&(*this);\n+452 }\n+453\n+454 public:\n+455 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+456};\n+457\n+458template \n+459const int _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bD;\n+460\n+461template \n+462const int _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\bC_\bA_\bM_\bE_\bR_\bA_\b>_\b:_\b:_\bZ_\bD_\bi_\bm;\n 463\n-464#include \n-465\n+464template \n+_\b4_\b6_\b5struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n 466\n-_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-A matrix with column blocks of pre-defined sizes.\n-_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs_\b._\bh\n-VariableSlots describes the structure of a combined factor in terms of where\n-each block comes from in...\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-A factor with a quadratic error function - a Gaussian.\n-_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n-std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n-FastVector\n-FastVector is a type alias to a std::vector with a custom memory allocator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n+467template \n+_\b4_\b6_\b8struct _\bt_\br_\ba_\bi_\bt_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be>\n+{};\n+469\n+470} // namespace gtsam\n+_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n+#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n+This marks a GTSAM object to require alignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n+_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n+A thin wrapper around std::map that uses boost's fast_pool_allocator.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+Access to matrices via blocks of pre-defined sizes.\n+_\bC_\ba_\bl_\bi_\bb_\br_\ba_\bt_\be_\bd_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n+Calibrated camera for which only pose is unknown.\n+_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n+3D Point\n+_\bK_\be_\by_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n ptrdiff_t DenseIndex\n The index type for Eigen objects.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\ba_\bv_\be\n-void save(const Matrix &A, const string &s, const string &filename)\n-save a matrix to file, which can be loaded by matlab\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Point2 operator*(double s, const Point2 &p)\n-multiply with scalar\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR\n-std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr >\n-EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)\n-Multiply all factors and eliminate the given keys from the resulting factor\n-using a QR variant that h...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:789\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\bo_\bw\n+const MATRIX::ConstRowXpr row(const MATRIX &A, size_t j)\n+Extracts a row view from a matrix that avoids a copy.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:222\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bi_\bx_\be_\bd_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn\n+Give fixed size dimension of a type, fails at compile time if dynamic.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:164\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n This class stores a dense matrix and allows it to be accessed as a collection\n of blocks.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+void setDiagonalBlock(DenseIndex I, const XprType &xpr)\n+Set a diagonal block. Only the upper triangular portion of xpr is evaluated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:195\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bt_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+void setOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)\n+Set an off-diagonal block. Only the upper triangular portion of xpr is\n+evaluated.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:201\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\ba_\bb_\bo_\bv_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+constBlock aboveDiagonalBlock(DenseIndex I, DenseIndex J) const\n+Get block above the diagonal (I, J).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n+DenseIndex rows() const\n+Row size.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bO_\bf_\bf_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)\n+Update an off diagonal block.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:228\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+Eigen::SelfAdjointView< Block, Eigen::Upper > diagonalBlock(DenseIndex J)\n+Return the J'th diagonal block as a self adjoint view.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:135\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bB_\bl_\bo_\bc_\bk\n+void updateDiagonalBlock(DenseIndex I, const XprType &xpr)\n+Increment the diagonal block by the values in xpr. Only reads the upper\n+triangular part of xpr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:212\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n+Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex\n+I, DenseIndex J) const\n+Return the square sub-matrix that contains blocks(i:j, i:j).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of vertical blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\ba_\bn_\bg_\be\n-Block range(DenseIndex startBlock, DenseIndex endBlock)\n-access ranges of blocks at a time\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:130\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-DenseIndex rows() const\n-Row size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n-DenseIndex cols() const\n-Column size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::const_iterator const_iterator\n-Const iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n-KeyVector::iterator iterator\n-Iterator over keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bl_\bo_\bt_\bs\n-A combined factor is assembled as one block of rows for each component factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableSlots.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-An abstract virtual base class for JacobianFactor and HessianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor using the canonical parameters (information form)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:101\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A Gaussian factor in the squared-error form.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:91\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bb\n-const constBVector getb() const\n-Get a view of the r.h.s.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:297\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bb\n-BVector getb()\n-Get a view of the r.h.s.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:306\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\b__\bm_\bo_\bd_\be_\bl\n-const SharedDiagonal & get_model() const\n-get a copy of model\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:291\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-JacobianFactor(const JacobianFactor &jf)\n-Copy constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-JacobianFactor This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bs_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd\n-bool isConstrained() const\n-is noise model constrained ?\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:269\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bA\n-constABlock getA() const\n-Get a view of the A matrix, not weighted by noise.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:303\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-GaussianFactor::shared_ptr clone() const override\n-Clone this JacobianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bA\n-ABlock getA(iterator variable)\n-Get a view of the A matrix for the variable pointed to by the given key\n-iterator (non-const version)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:309\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\b__\bm_\bo_\bd_\be_\bl\n-SharedDiagonal & get_model()\n-get a copy of model (non-const version)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:294\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n-DenseIndex getDim(const_iterator variable) const override\n-Return the dimension of the variable pointed to by the given key iterator todo:\n-Remove this in favor ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:276\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\bO_\bb_\bj_\be_\bc_\bt\n-VerticalBlockMatrix & matrixObject()\n-Mutable access to the full augmented Jacobian matrix of this factor as a\n-VerticalBlockMatrix object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:259\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bA\n-ABlock getA()\n-Get a view of the A matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:312\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n-GaussianFactor Base\n-Typedef to base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-~JacobianFactor() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\ba_\bt_\br_\bi_\bx_\bO_\bb_\bj_\be_\bc_\bt\n-const VerticalBlockMatrix & matrixObject() const\n-Return the full augmented Jacobian matrix of this factor as a\n-VerticalBlockMatrix object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:256\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\br_\bo_\bw_\bs\n-size_t rows() const\n-return the number of rows in the corresponding linear system\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:283\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bl_\bs\n-size_t cols() const\n-return the number of columns in the corresponding linear system\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:288\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bA\n-constABlock getA(const_iterator variable) const\n-Get a view of the A matrix for the variable pointed to by the given key\n-iterator.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:300\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-In Gaussian factors, the error function returns either the negative log-\n-likelihood,...\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-is the normalization constant.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n+A set of cameras, all with their own calibration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\br_\be_\bp_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bE_\br_\br_\bo_\br\n+Vector reprojectionError(const POINT &point, const ZVector &measured, boost::\n+optional< FBlocks & > Fs=boost::none, boost::optional< Matrix & > E=boost::\n+none) const\n+Calculate vector [project2(point)-z] of re-projection errors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+virtual void print(const std::string &s=\"\") const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:85\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bC_\bo_\bm_\bp_\bu_\bt_\be_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n+static void ComputePointCovariance(Eigen::Matrix< double, N, N > &P, const\n+Matrix &E, double lambda, bool diagonalDamping=false)\n+Computes Point Covariance P, with lambda parameter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:315\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n+static SymmetricBlockMatrix SchurComplement(const FBlocks &Fblocks, const\n+Matrix &E, const Vector &b, const double lambda=0.0, bool\n+diagonalDamping=false)\n+Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix\n+Dynamic version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:348\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bZ\n+CAMERA::Measurement Z\n+2D measurement and noise model for each of the m views The order is kept the\n+same as the keys that we...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\b~_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt\n+virtual ~CameraSet()=default\n+Destructor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const CameraSet &p, double tol=1e-9) const\n+equals\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\bC_\bo_\bv\n+static Matrix PointCov(const Matrix &E, const double lambda=0.0, bool\n+diagonalDamping=false)\n+Computes Point Covariance P, with lambda parameter, dynamic version.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:331\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bE_\br_\br_\bo_\br_\bV_\be_\bc_\bt_\bo_\br\n+static Vector ErrorVector(const ZVector &predicted, const ZVector &measured)\n+Make a vector of re-projection errors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bU_\bp_\bd_\ba_\bt_\be_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n+static void UpdateSchurComplement(const FBlocks &Fs, const Matrix &E, const\n+Eigen::Matrix< double, N, N > &P, const Vector &b, const KeyVector &allKeys,\n+const KeyVector &keys, SymmetricBlockMatrix &augmentedHessian)\n+Applies Schur complement (exploiting block structure) to get a smart factor on\n+cameras,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:369\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt_\bA_\bn_\bd_\bR_\be_\ba_\br_\br_\ba_\bn_\bg_\be_\bB_\bl_\bo_\bc_\bk_\bs\n+static SymmetricBlockMatrix SchurComplementAndRearrangeBlocks(const std::\n+vector< Eigen::Matrix< double, ZDim, ND >, Eigen::aligned_allocator< Eigen::\n+Matrix< double, ZDim, ND > > > &Fs, const Matrix &E, const Eigen::Matrix<\n+double, N, N > &P, const Vector &b, const KeyVector &jacobianKeys, const\n+KeyVector &hessianKeys)\n+Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G =\n+F' * F - F' * E * P * ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:218\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n+static SymmetricBlockMatrix SchurComplement(const std::vector< Eigen::Matrix<\n+double, ZDim, ND >, Eigen::aligned_allocator< Eigen::Matrix< double, ZDim, ND >\n+> > &Fs, const Matrix &E, const Eigen::Matrix< double, N, N > &P, const Vector\n+&b)\n+Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G =\n+F' * F - F' * E * P * ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:150\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bZ_\bD_\bi_\bm\n+static const int ZDim\n+Measurement dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bS_\bc_\bh_\bu_\br_\bC_\bo_\bm_\bp_\bl_\be_\bm_\be_\bn_\bt\n+static SymmetricBlockMatrix SchurComplement(const FBlocks &Fs, const Matrix &E,\n+const Eigen::Matrix< double, N, N > &P, const Vector &b)\n+Do Schur complement, given Jacobian as Fs,E,P, return SymmetricBlockMatrix G =\n+F' * F - F' * E * P * ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:307\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bD\n+static const int D\n+Camera dimension.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:448\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bM_\ba_\bt_\br_\bi_\bx_\bZ_\bD\n+Eigen::Matrix< double, ZDim, D > MatrixZD\n+Definitions for blocks of F.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b:_\b:_\bp_\br_\bo_\bj_\be_\bc_\bt_\b2\n+ZVector project2(const POINT &point, boost::optional< FBlocks & > Fs=boost::\n+none, boost::optional< Matrix & > E=boost::none) const\n+Project a point (possibly Unit3 at infinity), with derivatives Note that F is a\n+sparse block-diagonal...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CameraSet.h:108\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00785_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00722_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
BinaryJacobianFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
21#pragma once
\n
22
\n-\n-\n-
25#include <gtsam/base/timing.h>
\n+\n+\n+
25#include <gtsam/base/timing.h>
\n
26
\n
27namespace gtsam {
\n
28
\n
32template<int M, int N1, int N2>
\n
\n \n
34
\n@@ -187,17 +187,17 @@\n
\n
87struct traits<BinaryJacobianFactor<M, N1, N2> > : Testable<
\n
88 BinaryJacobianFactor<M, N1, N2> > {
\n
89};
\n
\n
90
\n
91} //namespace gtsam
\n-
Access to matrices via blocks of pre-defined sizes.
\n-
Timing utilities.
\n-\n+
Access to matrices via blocks of pre-defined sizes.
\n+
Timing utilities.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n
void updateOffDiagonalBlock(DenseIndex I, DenseIndex J, const XprType &xpr)
Update an off diagonal block.
Definition SymmetricBlockMatrix.h:228
\n@@ -217,13 +217,13 @@\n
const SharedDiagonal & get_model() const
get a copy of model
Definition JacobianFactor.h:291
\n
constABlock getA() const
Get a view of the A matrix, not weighted by noise.
Definition JacobianFactor.h:303
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00806_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00581_source.html", "comments": ["Files 92% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphSolver.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/DotWriter.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n
\n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SubgraphSolver.h
\n+
DotWriter.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010-2021, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-\n-\n+
19#pragma once
\n+
20
\n+\n+
22#include <gtsam/base/Vector.h>
\n+
23#include <gtsam/inference/Key.h>
\n
24
\n-
25#include <map>
\n-
26#include <utility> // pair
\n-
27
\n-
28namespace gtsam {
\n-
29
\n-
30// Forward declarations
\n-
31class GaussianFactorGraph;
\n-
32class GaussianBayesNet;
\n-
33class SubgraphPreconditioner;
\n-
34
\n+
25#include <iosfwd>
\n+
26#include <map>
\n+
27#include <set>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n
\n-
35struct GTSAM_EXPORT SubgraphSolverParameters
\n-\n-
37 SubgraphBuilderParameters builderParams;
\n-\n-
39 : builderParams(p) {}
\n-
40 void print() const { Base::print(); }
\n-
41 void print(std::ostream &os) const override {
\n-
42 Base::print(os);
\n-
43 }
\n-
44};
\n-
\n-
45
\n-
\n-
76class GTSAM_EXPORT SubgraphSolver : public IterativeSolver {
\n-
77 public:
\n-\n-
79
\n-
80 protected:
\n-
81 Parameters parameters_;
\n-
82 boost::shared_ptr<SubgraphPreconditioner> pc_;
\n-
83
\n-
84 public:
\n-
87
\n-
93 SubgraphSolver(const GaussianFactorGraph &A, const Parameters &parameters,
\n-
94 const Ordering &ordering);
\n-
95
\n-\n-
103 const Parameters &parameters, const Ordering &ordering);
\n-\n-
109 const Parameters &parameters);
\n-
110
\n-
112 ~SubgraphSolver() override {}
\n-
113
\n-
117
\n-
119 VectorValues optimize() const;
\n-
120
\n-\n-
123 const KeyInfo &keyInfo,
\n-
124 const std::map<Key, Vector> &lambda,
\n-
125 const VectorValues &initial) override;
\n-
126
\n-
130
\n-
132 std::pair<GaussianFactorGraph, GaussianFactorGraph> splitGraph(
\n-
133 const GaussianFactorGraph &gfg);
\n-
134
\n-
136};
\n-
\n-
137
\n-
138} // namespace gtsam
\n-
Implementation of Conjugate Gradient solver for a linear system.
\n-\n+
35struct GTSAM_EXPORT DotWriter {
\n+\n+\n+\n+\n+\n+
42
\n+
47 std::map<Key, Vector2> variablePositions;
\n+
48
\n+
54 std::map<char, double> positionHints;
\n+
55
\n+
57 std::set<Key> boxes;
\n+
58
\n+
63 std::map<size_t, Vector2> factorPositions;
\n+
64
\n+
65 explicit DotWriter(double figureWidthInches = 5,
\n+
66 double figureHeightInches = 5,
\n+
67 bool plotFactorPoints = true,
\n+
68 bool connectKeysToFactor = true, bool binaryEdges = false)
\n+
69 : figureWidthInches(figureWidthInches),
\n+
70 figureHeightInches(figureHeightInches),
\n+
71 plotFactorPoints(plotFactorPoints),
\n+
72 connectKeysToFactor(connectKeysToFactor),
\n+
73 binaryEdges(binaryEdges) {}
\n+
74
\n+
76 void graphPreamble(std::ostream* os) const;
\n+
77
\n+
79 void digraphPreamble(std::ostream* os) const;
\n+
80
\n+
82 void drawVariable(Key key, const KeyFormatter& keyFormatter,
\n+
83 const boost::optional<Vector2>& position,
\n+
84 std::ostream* os) const;
\n+
85
\n+
87 static void DrawFactor(size_t i, const boost::optional<Vector2>& position,
\n+
88 std::ostream* os);
\n+
89
\n+
91 boost::optional<Vector2> variablePos(Key key) const;
\n+
92
\n+
94 void processFactor(size_t i, const KeyVector& keys,
\n+
95 const KeyFormatter& keyFormatter,
\n+
96 const boost::optional<Vector2>& position,
\n+
97 std::ostream* os) const;
\n+
98};
\n+
\n+
99
\n+
100} // namespace gtsam
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
typedef and functions to augment Eigen's VectorXd
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Definition Ordering.h:34
\n-
parameters for the conjugate gradient method
Definition ConjugateGradientSolver.h:29
\n-
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
Base class for Iterative Solvers like SubgraphSolver.
Definition IterativeSolver.h:86
\n-
Handy data structure for iterative solvers.
Definition IterativeSolver.h:126
\n-
Definition SubgraphBuilder.h:96
\n-
Definition SubgraphSolver.h:36
\n-
This class implements the linear SPCG solver presented in Dellaert et al in IROS'10.
Definition SubgraphSolver.h:76
\n-
~SubgraphSolver() override
Destructor.
Definition SubgraphSolver.h:112
\n-
boost::shared_ptr< SubgraphPreconditioner > pc_
preconditioner object
Definition SubgraphSolver.h:82
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n+
double figureWidthInches
The figure width on paper in inches.
Definition DotWriter.h:36
\n+
bool plotFactorPoints
Plots each factor as a dot between the variables.
Definition DotWriter.h:38
\n+
bool connectKeysToFactor
Draw a line from each key within a factor to the dot of the factor.
Definition DotWriter.h:39
\n+
std::map< Key, Vector2 > variablePositions
Variable positions can be optionally specified and will be included in the dot file with a "!...
Definition DotWriter.h:47
\n+
bool binaryEdges
just use non-dotted edges for binary factors
Definition DotWriter.h:41
\n+
std::map< char, double > positionHints
The position hints allow one to use symbol character and index to specify position.
Definition DotWriter.h:54
\n+
std::set< Key > boxes
A set of keys that will be displayed as a box.
Definition DotWriter.h:57
\n+
std::map< size_t, Vector2 > factorPositions
Factor positions can be optionally specified and will be included in the dot file with a "!...
Definition DotWriter.h:63
\n+
double figureHeightInches
The figure height on paper in inches.
Definition DotWriter.h:37
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,139 +1,143 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SubgraphSolver.h\n+DotWriter.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010-2021, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh>\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n 24\n-25#include \n-26#include // pair\n-27\n-28namespace _\bg_\bt_\bs_\ba_\bm {\n-29\n-30// Forward declarations\n-31class GaussianFactorGraph;\n-32class GaussianBayesNet;\n-33class SubgraphPreconditioner;\n-34\n-_\b3_\b5struct GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-36 : public _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs {\n-37 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs builderParams;\n-38 explicit _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs(const _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs &p =\n-_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs())\n-39 : builderParams(p) {}\n-40 void _\bp_\br_\bi_\bn_\bt() const { Base::print(); }\n-41 void _\bp_\br_\bi_\bn_\bt(std::ostream &os) const override {\n-42 Base::print(os);\n-43 }\n-44};\n-45\n-_\b7_\b6class GTSAM_EXPORT _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br : public _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br {\n-77 public:\n-78 typedef _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs;\n-79\n-80 protected:\n-81 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs parameters_;\n-_\b8_\b2 boost::shared_ptr _\bp_\bc_\b_;\n-83\n-84 public:\n-87\n-93 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &A, const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters,\n-94 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering);\n-95\n-102 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &Ab1, const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-&Ab2,\n-103 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg &ordering);\n-108 _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt &Rc1, const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &Ab2,\n-109 const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs ¶meters);\n-110\n-_\b1_\b1_\b2 _\b~_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br() override {}\n-113\n-117\n-119 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n-120\n-122 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-123 const _\bK_\be_\by_\bI_\bn_\bf_\bo &keyInfo,\n-124 const std::map &lambda,\n-125 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &initial) override;\n-126\n-130\n-132 std::pair splitGraph(\n-133 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg);\n-134\n-136};\n-137\n-138} // namespace gtsam\n-_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n-Implementation of Conjugate Gradient solver for a linear system.\n-_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\b._\bh\n+25#include \n+26#include \n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+_\b3_\b5struct GTSAM_EXPORT _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br {\n+_\b3_\b6 double _\bf_\bi_\bg_\bu_\br_\be_\bW_\bi_\bd_\bt_\bh_\bI_\bn_\bc_\bh_\be_\bs;\n+_\b3_\b7 double _\bf_\bi_\bg_\bu_\br_\be_\bH_\be_\bi_\bg_\bh_\bt_\bI_\bn_\bc_\bh_\be_\bs;\n+_\b3_\b8 bool _\bp_\bl_\bo_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\bo_\bi_\bn_\bt_\bs;\n+_\b3_\b9 bool _\bc_\bo_\bn_\bn_\be_\bc_\bt_\bK_\be_\by_\bs_\bT_\bo_\bF_\ba_\bc_\bt_\bo_\br;\n+_\b4_\b1 bool _\bb_\bi_\bn_\ba_\br_\by_\bE_\bd_\bg_\be_\bs;\n+42\n+_\b4_\b7 std::map _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bs;\n+48\n+_\b5_\b4 std::map _\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bH_\bi_\bn_\bt_\bs;\n+55\n+_\b5_\b7 std::set _\bb_\bo_\bx_\be_\bs;\n+58\n+_\b6_\b3 std::map _\bf_\ba_\bc_\bt_\bo_\br_\bP_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bs;\n+64\n+65 explicit _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br(double figureWidthInches = 5,\n+66 double figureHeightInches = 5,\n+67 bool plotFactorPoints = true,\n+68 bool connectKeysToFactor = true, bool binaryEdges = false)\n+69 : figureWidthInches(figureWidthInches),\n+70 figureHeightInches(figureHeightInches),\n+71 plotFactorPoints(plotFactorPoints),\n+72 connectKeysToFactor(connectKeysToFactor),\n+73 binaryEdges(binaryEdges) {}\n+74\n+76 void graphPreamble(std::ostream* os) const;\n+77\n+79 void digraphPreamble(std::ostream* os) const;\n+80\n+82 void drawVariable(_\bK_\be_\by key, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n+83 const boost::optional& position,\n+84 std::ostream* os) const;\n+85\n+87 static void DrawFactor(size_t i, const boost::optional& position,\n+88 std::ostream* os);\n+89\n+91 boost::optional variablePos(_\bK_\be_\by key) const;\n+92\n+94 void processFactor(size_t i, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys,\n+95 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter,\n+96 const boost::optional& position,\n+97 std::ostream* os) const;\n+98};\n+99\n+100} // namespace gtsam\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+typedef and functions to augment Eigen's VectorXd\n+_\bK_\be_\by_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n-Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n-landmarkKey)\n-Optimize for triangulation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-parameters for the conjugate gradient method\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bS_\bo_\bl_\bv_\be_\br\n-Base class for Iterative Solvers like SubgraphSolver.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bI_\bn_\bf_\bo\n-Handy data structure for iterative solvers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bB_\bu_\bi_\bl_\bd_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphBuilder.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphSolver.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br\n-This class implements the linear SPCG solver presented in Dellaert et al in\n-IROS'10.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphSolver.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b:_\b:_\b~_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br\n-~SubgraphSolver() override\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphSolver.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b:_\b:_\bp_\bc_\b_\n-boost::shared_ptr< SubgraphPreconditioner > pc_\n-preconditioner object\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SubgraphSolver.h:82\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n+DotWriter is a helper class for writing graphviz .dot files.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bf_\bi_\bg_\bu_\br_\be_\bW_\bi_\bd_\bt_\bh_\bI_\bn_\bc_\bh_\be_\bs\n+double figureWidthInches\n+The figure width on paper in inches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bp_\bl_\bo_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\bo_\bi_\bn_\bt_\bs\n+bool plotFactorPoints\n+Plots each factor as a dot between the variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bc_\bo_\bn_\bn_\be_\bc_\bt_\bK_\be_\by_\bs_\bT_\bo_\bF_\ba_\bc_\bt_\bo_\br\n+bool connectKeysToFactor\n+Draw a line from each key within a factor to the dot of the factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bP_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bs\n+std::map< Key, Vector2 > variablePositions\n+Variable positions can be optionally specified and will be included in the dot\n+file with a \"!...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bb_\bi_\bn_\ba_\br_\by_\bE_\bd_\bg_\be_\bs\n+bool binaryEdges\n+just use non-dotted edges for binary factors\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bH_\bi_\bn_\bt_\bs\n+std::map< char, double > positionHints\n+The position hints allow one to use symbol character and index to specify\n+position.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bb_\bo_\bx_\be_\bs\n+std::set< Key > boxes\n+A set of keys that will be displayed as a box.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bP_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\bs\n+std::map< size_t, Vector2 > factorPositions\n+Factor positions can be optionally specified and will be included in the dot\n+file with a \"!...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b:_\b:_\bf_\bi_\bg_\bu_\br_\be_\bH_\be_\bi_\bg_\bh_\bt_\bI_\bn_\bc_\bh_\be_\bs\n+double figureHeightInches\n+The figure height on paper in inches.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:37\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n+ * _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00809.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00854.html", "comments": ["Files 96% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/SubgraphPreconditioner.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianJunctionTree.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
SubgraphPreconditioner.cpp File Reference
\n+
GaussianJunctionTree.cpp File Reference
\n
\n
\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Dec 31, 2009
\n-
Author
Frank Dellaert, Yong-Dian Jian
\n+
Date
Mar 29, 2013
\n+
Author
Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,21 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SubgraphPreconditioner.cpp File Reference\n+GaussianJunctionTree.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Date\n- Dec 31, 2009\n+ Mar 29, 2013\n Author\n- Frank Dellaert, Yong-Dian Jian\n+ Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bP_\br_\be_\bc_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\be_\br_\b._\bc_\bp_\bp\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00818.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01007.html", "comments": ["Files 90% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/linearAlgorithms-inst.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
linearAlgorithms-inst.h File Reference
\n+Namespaces
\n+
ISAM2.h File Reference
\n \n
\n \n-

Templated algorithms that are used in multiple places in linear. \n+

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n+\n+\n \n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::internal::linearAlgorithms::OptimizeData
class  gtsam::ISAM2
 Implementation of the full ISAM2 algorithm for incremental nonlinear optimization. More...
 
struct  gtsam::internal::linearAlgorithms::OptimizeClique< CLIQUE >
 Pre-order visitor for back-substitution in a Bayes tree. More...
struct  gtsam::traits< ISAM2 >
 traits More...
 
\n \n \n \n \n-

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n

\n-Functions

\n-template<class BAYESTREE >
VectorValues gtsam::internal::linearAlgorithms::optimizeBayesTree (const BAYESTREE &bayesTree)
 
\n

Detailed Description

\n-

Templated algorithms that are used in multiple places in linear.

\n-
Author
Richard Roberts
\n+

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.

\n+
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,32 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-linearAlgorithms-inst.h File Reference\n-Templated algorithms that are used in multiple places in linear. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n+ISAM2.h File Reference\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bD_\ba_\bt_\ba\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2\n+\u00a0 Implementation of the full _\bI_\bS_\bA_\bM_\b2 algorithm for incremental nonlinear\n+ optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b:_\b:_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bC_\bl_\bi_\bq_\bu_\be_\b<_\b _\bC_\bL_\bI_\bQ_\bU_\bE_\b _\b>\n-\u00a0 Pre-order visitor for back-substitution in a Bayes tree. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bI_\bS_\bA_\bM_\b2_\b _\b>\n+\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-template\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:l\bli\bin\bne\bea\bar\brA\bAl\blg\bgo\bor\bri\bit\bth\bhm\bms\bs:\b::\b:o\bop\bpt\bti\bim\bmi\biz\bze\beB\bBa\bay\bye\bes\bsT\bTr\bre\bee\be (const\n- BAYESTREE &bayesTree)\n-\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Templated algorithms that are used in multiple places in linear.\n+Incremental update functionality (ISAM2) for BayesTree, with fluid\n+relinearization.\n Author\n- Richard Roberts\n+ Michael Kaess, Richard Roberts, Frank Dellaert\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bl_\bi_\bn_\be_\ba_\br_\bA_\bl_\bg_\bo_\br_\bi_\bt_\bh_\bm_\bs_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bI_\bS_\bA_\bM_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00821_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00803_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
8
\n
9 * See LICENSE for the license information
\n
10
\n
11 * -------------------------------------------------------------------------- */
\n
12
\n
20#pragma once
\n
21
\n-
22#include <gtsam/base/Matrix.h>
\n-
23#include <gtsam/base/Testable.h>
\n+
22#include <gtsam/base/Matrix.h>
\n+
23#include <gtsam/base/Testable.h>
\n
24#include <gtsam/dllexport.h>
\n
25
\n
26#include <boost/serialization/extended_type_info.hpp>
\n
27#include <boost/serialization/nvp.hpp>
\n
28#include <boost/serialization/version.hpp>
\n
29#include <boost/serialization/optional.hpp>
\n
30#include <boost/serialization/shared_ptr.hpp>
\n@@ -412,16 +412,16 @@\n
448 }
\n
449};
\n
\n
450
\n
451} // namespace mEstimator
\n
452} // namespace noiseModel
\n
453} // namespace gtsam
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Concept check for values that can be used in unit tests.
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Concept check for values that can be used in unit tests.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
Template to create a binary predicate.
Definition Testable.h:111
\n
Pure virtual class for all robust error function classes.
Definition LossFunctions.h:63
\n
virtual double loss(double distance) const
This method is responsible for returning the total penalty for a given amount of error.
Definition LossFunctions.h:94
\n
ReweightScheme reweight_
Strategy for reweighting.
Definition LossFunctions.h:72
\n
ReweightScheme reweightScheme() const
Returns the reweight scheme, as explained in ReweightScheme.
Definition LossFunctions.h:79
\n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00836_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01115_source.html", "comments": ["Files 90% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianDensity.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GraphvizFormatting.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
GaussianDensity.h
\n+
GraphvizFormatting.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010-2021, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19// \\callgraph
\n-
20#pragma once
\n-
21
\n-\n-
23
\n-
24namespace gtsam {
\n-
25
\n+
19#pragma once
\n+
20
\n+\n+
22
\n+
23namespace gtsam {
\n+
24
\n+
25class Values;
\n+
26class Value;
\n+
27
\n
\n-
32 class GTSAM_EXPORT GaussianDensity : public GaussianConditional {
\n-
33
\n-
34 public:
\n+
32struct GTSAM_EXPORT GraphvizFormatting : public DotWriter {
\n+
34 enum Axis { X, Y, Z, NEGX, NEGY, NEGZ };
\n
35
\n-
36 typedef boost::shared_ptr<GaussianDensity> shared_ptr;
\n-
37
\n-
\n-\n-\n-
41 }
\n-
\n-
42
\n-
\n-\n-
45 GaussianConditional(conditional) {
\n-
46 if(conditional.nrParents() != 0)
\n-
47 throw std::invalid_argument("GaussianDensity can only be created from a conditional with no parents");
\n-
48 }
\n-
\n-
49
\n-
\n-
51 GaussianDensity(Key key, const Vector& d, const Matrix& R, const SharedDiagonal& noiseModel = SharedDiagonal()) :
\n-
52 GaussianConditional(key, d, R, noiseModel) {}
\n-
\n-
53
\n-
55 static GaussianDensity FromMeanAndStddev(Key key, const Vector& mean,
\n-
56 double sigma);
\n+\n+\n+
40 double scale;
\n+\n+
43
\n+
\n+\n+
47 : paperHorizontalAxis(Y),
\n+
48 paperVerticalAxis(X),
\n+
49 scale(1),
\n+
50 mergeSimilarFactors(false) {}
\n+
\n+
51
\n+
52 // Find bounds
\n+
53 Vector2 findBounds(const Values& values, const KeySet& keys) const;
\n+
54
\n+
56 boost::optional<Vector2> extractPosition(const Value& value) const;
\n
57
\n-
59 void print(const std::string& = "GaussianDensity",
\n-
60 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n+
59 boost::optional<Vector2> variablePos(const Values& values, const Vector2& min,
\n+
60 Key key) const;
\n
61
\n-
63 Vector mean() const;
\n-
64
\n-
66 Matrix covariance() const;
\n-
67
\n-
68 };
\n-
\n-
69 // GaussianDensity
\n-
70
\n-
71}// gtsam
\n-
Conditional Gaussian Base class.
\n+
63 boost::optional<Vector2> factorPos(const Vector2& min, size_t i) const;
\n+
64};
\n+
\n+
65
\n+
66} // namespace gtsam
\n+
Graphviz formatter.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Point3 mean(const CONTAINER &points)
mean
Definition Point3.h:68
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
size_t nrParents() const
return the number of parents
Definition Conditional.h:113
\n-
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n-
A GaussianDensity is a GaussianConditional without parents.
Definition GaussianDensity.h:32
\n-
GaussianDensity(Key key, const Vector &d, const Matrix &R, const SharedDiagonal &noiseModel=SharedDiagonal())
constructor using d, R
Definition GaussianDensity.h:51
\n-
GaussianDensity()
default constructor needed for serialization
Definition GaussianDensity.h:39
\n-
GaussianDensity(const GaussianConditional &conditional)
Copy constructor from GaussianConditional.
Definition GaussianDensity.h:44
\n+\n+
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n+
DotWriter is a helper class for writing graphviz .dot files.
Definition DotWriter.h:35
\n+
Formatting options and functions for saving a NonlinearFactorGraph instance in GraphViz format.
Definition GraphvizFormatting.h:32
\n+
Axis
World axes to be assigned to paper axes.
Definition GraphvizFormatting.h:34
\n+
Axis paperVerticalAxis
The world axis assigned to the vertical paper axis.
Definition GraphvizFormatting.h:38
\n+
GraphvizFormatting()
Default constructor sets up robot coordinates.
Definition GraphvizFormatting.h:46
\n+
bool mergeSimilarFactors
Merge multiple factors that have the same connectivity.
Definition GraphvizFormatting.h:41
\n+
double scale
Scale all positions to reduce / increase density.
Definition GraphvizFormatting.h:40
\n+
Axis paperHorizontalAxis
The world axis assigned to the horizontal paper axis.
Definition GraphvizFormatting.h:36
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,110 +1,110 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianDensity.h\n+GraphvizFormatting.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010-2021, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19// \\callgraph\n-20#pragma once\n-21\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-_\b3_\b2 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by : public _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl {\n-33\n-34 public:\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+25class _\bV_\ba_\bl_\bu_\be_\bs;\n+26class Value;\n+27\n+_\b3_\b2struct GTSAM_EXPORT _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg : public _\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br {\n+_\b3_\b4 enum _\bA_\bx_\bi_\bs { X, Y, Z, NEGX, NEGY, NEGZ };\n 35\n-36 typedef boost::shared_ptr shared_ptr;\n-37\n-_\b3_\b9 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by() :\n-40 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl() {\n-41 }\n-42\n-_\b4_\b4 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl& conditional) :\n-45 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(conditional) {\n-46 if(conditional._\bn_\br_\bP_\ba_\br_\be_\bn_\bt_\bs() != 0)\n-47 throw std::invalid_argument(\"GaussianDensity can only be created from a\n-conditional with no parents\");\n-48 }\n-49\n-_\b5_\b1 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by(_\bK_\be_\by key, const Vector& d, const Matrix& R, const\n-SharedDiagonal& noiseModel = SharedDiagonal()) :\n-52 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl(key, d, R, noiseModel) {}\n-53\n-55 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by FromMeanAndStddev(_\bK_\be_\by key, const Vector& mean,\n-56 double sigma);\n+_\b3_\b6 _\bA_\bx_\bi_\bs _\bp_\ba_\bp_\be_\br_\bH_\bo_\br_\bi_\bz_\bo_\bn_\bt_\ba_\bl_\bA_\bx_\bi_\bs;\n+_\b3_\b8 _\bA_\bx_\bi_\bs _\bp_\ba_\bp_\be_\br_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bA_\bx_\bi_\bs;\n+_\b4_\b0 double _\bs_\bc_\ba_\bl_\be;\n+_\b4_\b1 bool _\bm_\be_\br_\bg_\be_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs;\n+43\n+_\b4_\b6 _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg()\n+47 : paperHorizontalAxis(Y),\n+48 paperVerticalAxis(X),\n+49 scale(1),\n+50 mergeSimilarFactors(false) {}\n+51\n+52 // Find bounds\n+53 Vector2 findBounds(const _\bV_\ba_\bl_\bu_\be_\bs& values, const _\bK_\be_\by_\bS_\be_\bt& keys) const;\n+54\n+56 boost::optional extractPosition(const _\bV_\ba_\bl_\bu_\be& value) const;\n 57\n-59 void _\bp_\br_\bi_\bn_\bt(const std::string& = \"GaussianDensity\",\n-60 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n+59 boost::optional variablePos(const _\bV_\ba_\bl_\bu_\be_\bs& values, const Vector2&\n+min,\n+60 _\bK_\be_\by key) const;\n 61\n-63 Vector _\bm_\be_\ba_\bn() const;\n-64\n-66 Matrix covariance() const;\n-67\n-68 };\n-69 // GaussianDensity\n-70\n-71}// gtsam\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-Conditional Gaussian Base class.\n+63 boost::optional factorPos(const Vector2& min, size_t i) const;\n+64};\n+65\n+66} // namespace gtsam\n+_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br_\b._\bh\n+Graphviz formatter.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\be_\ba_\bn\n-Point3 mean(const CONTAINER &points)\n-mean\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bn_\br_\bP_\ba_\br_\be_\bn_\bt_\bs\n-size_t nrParents() const\n-return the number of parents\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Conditional.h:113\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-A GaussianConditional functions as the node in a Bayes network.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by\n-A GaussianDensity is a GaussianConditional without parents.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianDensity.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by\n-GaussianDensity(Key key, const Vector &d, const Matrix &R, const SharedDiagonal\n-&noiseModel=SharedDiagonal())\n-constructor using d, R\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianDensity.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by\n-GaussianDensity()\n-default constructor needed for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianDensity.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by\n-GaussianDensity(const GaussianConditional &conditional)\n-Copy constructor from GaussianConditional.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianDensity.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n+This is the base class for any type to be stored in Values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bo_\bt_\bW_\br_\bi_\bt_\be_\br\n+DotWriter is a helper class for writing graphviz .dot files.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DotWriter.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg\n+Formatting options and functions for saving a NonlinearFactorGraph instance in\n+GraphViz format.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bA_\bx_\bi_\bs\n+Axis\n+World axes to be assigned to paper axes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bp_\ba_\bp_\be_\br_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bA_\bx_\bi_\bs\n+Axis paperVerticalAxis\n+The world axis assigned to the vertical paper axis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg\n+GraphvizFormatting()\n+Default constructor sets up robot coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bm_\be_\br_\bg_\be_\bS_\bi_\bm_\bi_\bl_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+bool mergeSimilarFactors\n+Merge multiple factors that have the same connectivity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bs_\bc_\ba_\bl_\be\n+double scale\n+Scale all positions to reduce / increase density.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b:_\b:_\bp_\ba_\bp_\be_\br_\bH_\bo_\br_\bi_\bz_\bo_\bn_\bt_\ba_\bl_\bA_\bx_\bi_\bs\n+Axis paperHorizontalAxis\n+The world axis assigned to the horizontal paper axis.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GraphvizFormatting.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bD_\be_\bn_\bs_\bi_\bt_\by_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00839_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00845_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
GaussianConditional-inl.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n@@ -145,13 +145,13 @@\n
Conditional< BaseFactor, This > BaseConditional
Typedef to our conditional base class.
Definition GaussianConditional.h:48
\n
A Gaussian factor in the squared-error form.
Definition JacobianFactor.h:91
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00848.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01157.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/KalmanFilter.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearFactorGraph.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
KalmanFilter.cpp File Reference
\n+
NonlinearFactorGraph.cpp File Reference
\n
\n
\n \n-

Simple linear Kalman filter. \n+

Factor Graph Consisting of non-linear factors. \n More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Simple linear Kalman filter.

\n-

Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.

\n-
Date
Sep 3, 2011
\n-
Author
Stephen Williams
\n+

Factor Graph Consisting of non-linear factors.

\n+
Author
Frank Dellaert
\n
\n-Frank Dellaert
\n+Carlos Nieto \n+
\n+Christian Potthast
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,24 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-KalmanFilter.cpp File Reference\n-Simple linear Kalman filter. _\bM_\bo_\br_\be_\b._\b._\b.\n+NonlinearFactorGraph.cpp File Reference\n+Factor Graph Consisting of non-linear factors. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Simple linear Kalman filter.\n-Implemented using factor graphs, i.e., does Cholesky-based SRIF, really.\n- Date\n- Sep 3, 2011\n+Factor Graph Consisting of non-linear factors.\n Author\n- Stephen Williams\n Frank Dellaert\n+ Carlos Nieto\n+ Christian Potthast\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bc_\bp_\bp\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00851_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00707_source.html", "comments": ["Files 82% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianJunctionTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/Sampler.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
GaussianJunctionTree.h
\n+
Sampler.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-\n+\n+
22
\n+
23#include <random>
\n
24
\n
25namespace gtsam {
\n
26
\n-
27 // Forward declarations
\n-
28 class GaussianEliminationTree;
\n-
29
\n-
\n-
38 class GTSAM_EXPORT GaussianJunctionTree :
\n-
39 public JunctionTree<GaussianBayesTree, GaussianFactorGraph> {
\n-
40 public:
\n-\n-\n-
43 typedef boost::shared_ptr<This> shared_ptr;
\n+
\n+
31class GTSAM_EXPORT Sampler {
\n+
32 protected:
\n+
34 noiseModel::Diagonal::shared_ptr model_;
\n+
35
\n+
37 mutable std::mt19937_64 generator_;
\n+
38
\n+
39 public:
\n+
40 typedef boost::shared_ptr<Sampler> shared_ptr;
\n+
41
\n
44
\n-
53 GaussianJunctionTree(const GaussianEliminationTree& eliminationTree);
\n-
54 };
\n-
\n-
55
\n-
56}
\n-
The junction tree.
\n-
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n-
Linear Factor Graph where all factors are Gaussians.
\n+
51 explicit Sampler(const noiseModel::Diagonal::shared_ptr& model,
\n+
52 uint_fast64_t seed = 42u);
\n+
53
\n+
60 explicit Sampler(const Vector& sigmas, uint_fast64_t seed = 42u);
\n+
61
\n+
65
\n+
66 size_t dim() const { return model_->dim(); }
\n+
67
\n+
68 Vector sigmas() const { return model_->sigmas(); }
\n+
69
\n+
70 const noiseModel::Diagonal::shared_ptr& model() const { return model_; }
\n+
71
\n+
75
\n+
77 Vector sample() const;
\n+
78
\n+
80 static Vector sampleDiagonal(const Vector& sigmas, std::mt19937_64* rng);
\n+
82
\n+
83 protected:
\n+
85 Vector sampleDiagonal(const Vector& sigmas) const;
\n+
86};
\n+
\n+
87
\n+
88} // namespace gtsam
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree,...
Definition JunctionTree.h:50
\n-
Definition GaussianEliminationTree.h:29
\n-
A junction tree specialized to Gaussian factors, i.e., it is a cluster tree with Gaussian factors sto...
Definition GaussianJunctionTree.h:39
\n-
GaussianJunctionTree This
This class.
Definition GaussianJunctionTree.h:42
\n-
JunctionTree< GaussianBayesTree, GaussianFactorGraph > Base
Base class.
Definition GaussianJunctionTree.h:41
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition GaussianJunctionTree.h:43
\n+
Sampling structure that keeps internal random number generators for diagonal distributions specified ...
Definition Sampler.h:31
\n+
noiseModel::Diagonal::shared_ptr model_
noiseModel created at generation
Definition Sampler.h:34
\n+
std::mt19937_64 generator_
generator
Definition Sampler.h:37
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianJunctionTree.h\n+Sampler.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,62 +16,65 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh>\n+22\n+23#include \n 24\n 25namespace _\bg_\bt_\bs_\ba_\bm {\n 26\n-27 // Forward declarations\n-28 class GaussianEliminationTree;\n-29\n-_\b3_\b8 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n-39 public _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be {\n-40 public:\n-_\b4_\b1 typedef _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n-_\b4_\b2 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-_\b4_\b3 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b3_\b1class GTSAM_EXPORT _\bS_\ba_\bm_\bp_\bl_\be_\br {\n+32 protected:\n+_\b3_\b4 noiseModel::Diagonal::shared_ptr _\bm_\bo_\bd_\be_\bl_\b_;\n+35\n+_\b3_\b7 mutable std::mt19937_64 _\bg_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\b_;\n+38\n+39 public:\n+40 typedef boost::shared_ptr shared_ptr;\n+41\n 44\n-53 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be& eliminationTree);\n-54 };\n-55\n-56}\n-_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-The junction tree.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n+51 explicit _\bS_\ba_\bm_\bp_\bl_\be_\br(const noiseModel::Diagonal::shared_ptr& model,\n+52 uint_fast64_t seed = 42u);\n+53\n+60 explicit _\bS_\ba_\bm_\bp_\bl_\be_\br(const Vector& sigmas, uint_fast64_t seed = 42u);\n+61\n+65\n+66 size_t dim() const { return model_->dim(); }\n+67\n+68 Vector sigmas() const { return model_->sigmas(); }\n+69\n+70 const noiseModel::Diagonal::shared_ptr& model() const { return model_; }\n+71\n+75\n+77 Vector sample() const;\n+78\n+80 static Vector sampleDiagonal(const Vector& sigmas, std::mt19937_64* rng);\n+82\n+83 protected:\n+85 Vector sampleDiagonal(const Vector& sigmas) const;\n+86};\n+87\n+88} // namespace gtsam\n+_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-A JunctionTree is a cluster tree, a set of variable clusters with factors,\n-arranged in a tree,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JunctionTree.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianEliminationTree.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-A junction tree specialized to Gaussian factors, i.e., it is a cluster tree\n-with Gaussian factors sto...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianJunctionTree.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-GaussianJunctionTree This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianJunctionTree.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n-JunctionTree< GaussianBayesTree, GaussianFactorGraph > Base\n-Base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianJunctionTree.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianJunctionTree.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br\n+Sampling structure that keeps internal random number generators for diagonal\n+distributions specified ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Sampler.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br_\b:_\b:_\bm_\bo_\bd_\be_\bl_\b_\n+noiseModel::Diagonal::shared_ptr model_\n+noiseModel created at generation\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Sampler.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\ba_\bm_\bp_\bl_\be_\br_\b:_\b:_\bg_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\b_\n+std::mt19937_64 generator_\n+generator\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Sampler.h:37\n * _\bg_\bt_\bs_\ba_\bm\n * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bS_\ba_\bm_\bp_\bl_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00854_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01148_source.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/JacobianFactor-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExtendedKalmanFilter-inl.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
JacobianFactor-inl.h
\n+
ExtendedKalmanFilter-inl.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-
22
\n-
23namespace gtsam {
\n-
24
\n-
25 /* ************************************************************************* */
\n-
26 template<typename TERMS>
\n-
\n-
27 JacobianFactor::JacobianFactor(const TERMS&terms, const Vector &b, const SharedDiagonal& model)
\n-
28 {
\n-
29 fillTerms(terms, b, model);
\n-
30 }
\n-
\n-
31
\n-
32 /* ************************************************************************* */
\n-
33 template<typename KEYS>
\n-
\n-\n-
35 const KEYS& keys, const VerticalBlockMatrix& augmentedMatrix, const SharedDiagonal& model) :
\n-
36 Base(keys), Ab_(augmentedMatrix)
\n-
37 {
\n-
38 // Check noise model dimension
\n-
39 if(model && (DenseIndex)model->dim() != augmentedMatrix.rows())
\n-
40 throw InvalidNoiseModel(augmentedMatrix.rows(), model->dim());
\n-
41
\n-
42 // Check number of variables
\n-
43 if((DenseIndex)Base::keys_.size() != augmentedMatrix.nBlocks() - 1)
\n-
44 throw std::invalid_argument(
\n-
45 "Error in JacobianFactor constructor input. Number of provided keys plus\\n"
\n-
46 "one for the RHS vector must equal the number of provided matrix blocks.");
\n+\n+\n+\n+\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
28 /* ************************************************************************* */
\n+
29 template<class VALUE>
\n+
30 typename ExtendedKalmanFilter<VALUE>::T ExtendedKalmanFilter<VALUE>::solve_(
\n+
31 const GaussianFactorGraph& linearFactorGraph,
\n+
32 const Values& linearizationPoint, Key lastKey,
\n+\n+
34 {
\n+
35 // Compute the marginal on the last key
\n+
36 // Solve the linear factor graph, converting it into a linear Bayes Network
\n+
37 // P(x0,x1) = P(x0|x1)*P(x1)
\n+
38 Ordering lastKeyAsOrdering;
\n+
39 lastKeyAsOrdering += lastKey;
\n+
40 const GaussianConditional::shared_ptr marginal =
\n+
41 linearFactorGraph.marginalMultifrontalBayesNet(lastKeyAsOrdering)->front();
\n+
42
\n+
43 // Extract the current estimate of x1,P1
\n+
44 VectorValues result = marginal->solve(VectorValues());
\n+
45 const T& current = linearizationPoint.at<T>(lastKey);
\n+
46 T x = traits<T>::Retract(current, result[lastKey]);
\n
47
\n-
48 // Check RHS dimension
\n-
49 if(augmentedMatrix(augmentedMatrix.nBlocks() - 1).cols() != 1)
\n-
50 throw std::invalid_argument(
\n-
51 "Error in JacobianFactor constructor input. The last provided matrix block\\n"
\n-
52 "must be the RHS vector, but the last provided block had more than one column.");
\n-
53
\n-
54 // Take noise model
\n-
55 model_ = model;
\n-
56 }
\n-
\n-
57
\n-
58 /* ************************************************************************* */
\n-
59 template<typename TERMS>
\n-
\n-
60 void JacobianFactor::fillTerms(const TERMS& terms, const Vector& b, const SharedDiagonal& noiseModel)
\n-
61 {
\n-
62 // Check noise model dimension
\n-
63 if(noiseModel && (DenseIndex)noiseModel->dim() != b.size())
\n-
64 throw InvalidNoiseModel(b.size(), noiseModel->dim());
\n-
65
\n-
66 // Resize base class key vector
\n-
67 Base::keys_.resize(terms.size());
\n-
68
\n-
69 // Get dimensions of matrices
\n-
70 std::vector<size_t> dimensions;
\n-
71 dimensions.reserve(terms.size());
\n-
72 for(typename TERMS::const_iterator it = terms.begin(); it != terms.end(); ++it) {
\n-
73 const std::pair<Key, Matrix>& term = *it;
\n-
74 const Matrix& Ai = term.second;
\n-
75 dimensions.push_back(Ai.cols());
\n-
76 }
\n+
48 // Create a Jacobian Factor from the root node of the produced Bayes Net.
\n+
49 // This will act as a prior for the next iteration.
\n+
50 // The linearization point of this prior must be moved to the new estimate of x,
\n+
51 // and the key/index needs to be reset to 0, the first key in the next iteration.
\n+
52 assert(marginal->nrFrontals() == 1);
\n+
53 assert(marginal->nrParents() == 0);
\n+
54 *newPrior = boost::make_shared<JacobianFactor>(
\n+
55 marginal->keys().front(),
\n+
56 marginal->getA(marginal->begin()),
\n+
57 marginal->getb() - marginal->getA(marginal->begin()) * result[lastKey],
\n+
58 marginal->get_model());
\n+
59
\n+
60 return x;
\n+
61 }
\n+
62
\n+
63 /* ************************************************************************* */
\n+
64 template <class VALUE>
\n+
65 ExtendedKalmanFilter<VALUE>::ExtendedKalmanFilter(
\n+
66 Key key_initial, T x_initial, noiseModel::Gaussian::shared_ptr P_initial)
\n+
67 : x_(x_initial) // Set the initial linearization point
\n+
68 {
\n+
69 // Create a Jacobian Prior Factor directly P_initial.
\n+
70 // Since x0 is set to the provided mean, the b vector in the prior will be zero
\n+
71 // TODO(Frank): is there a reason why noiseModel is not simply P_initial?
\n+
72 int n = traits<T>::GetDimension(x_initial);
\n+
73 priorFactor_ = JacobianFactor::shared_ptr(
\n+
74 new JacobianFactor(key_initial, P_initial->R(), Vector::Zero(n),
\n+
75 noiseModel::Unit::Create(n)));
\n+
76 }
\n
77
\n-
78 // Construct block matrix
\n-
79 Ab_ = VerticalBlockMatrix(dimensions, b.size(), true);
\n-
80
\n-
81 // Check and add terms
\n-
82 DenseIndex i = 0; // For block index
\n-
83 for(typename TERMS::const_iterator it = terms.begin(); it != terms.end(); ++it) {
\n-
84 const std::pair<Key, Matrix>& term = *it;
\n-
85 Key key = term.first;
\n-
86 const Matrix& Ai = term.second;
\n-
87
\n-
88 // Check block rows
\n-
89 if(Ai.rows() != Ab_.rows())
\n-
90 throw InvalidMatrixBlock(Ab_.rows(), Ai.rows());
\n-
91
\n-
92 // Assign key and matrix
\n-
93 Base::keys_[i] = key;
\n-
94 Ab_(i) = Ai;
\n+
78 /* ************************************************************************* */
\n+
79 template<class VALUE>
\n+
\n+
80 typename ExtendedKalmanFilter<VALUE>::T ExtendedKalmanFilter<VALUE>::predict(
\n+
81 const NoiseModelFactor& motionFactor) {
\n+
82 const auto keys = motionFactor.keys();
\n+
83
\n+
84 // Create a Gaussian Factor Graph
\n+
85 GaussianFactorGraph linearFactorGraph;
\n+
86
\n+
87 // Add in previous posterior as prior on the first state
\n+
88 linearFactorGraph.push_back(priorFactor_);
\n+
89
\n+
90 // Linearize motion model and add it to the Kalman Filter graph
\n+
91 Values linearizationPoint;
\n+
92 linearizationPoint.insert(keys[0], x_);
\n+
93 linearizationPoint.insert(keys[1], x_); // TODO should this really be x_ ?
\n+
94 linearFactorGraph.push_back(motionFactor.linearize(linearizationPoint));
\n
95
\n-
96 // Increment block index
\n-
97 ++ i;
\n-
98 }
\n+
96 // Solve the factor graph and update the current state estimate
\n+
97 // and the posterior for the next iteration.
\n+
98 x_ = solve_(linearFactorGraph, linearizationPoint, keys[1], &priorFactor_);
\n
99
\n-
100 // Assign RHS vector
\n-
101 getb() = b;
\n-
102
\n-
103 // Assign noise model
\n-
104 model_ = noiseModel;
\n-
105 }
\n+
100 return x_;
\n+
101 }
\n
\n-
106
\n-
107} // gtsam
\n+
102
\n+
103 /* ************************************************************************* */
\n+
104 template<class VALUE>
\n+
\n+
105 typename ExtendedKalmanFilter<VALUE>::T ExtendedKalmanFilter<VALUE>::update(
\n+
106 const NoiseModelFactor& measurementFactor) {
\n+
107 const auto keys = measurementFactor.keys();
\n
108
\n-
Exceptions that may be thrown by linear solver components.
\n+
109 // Create a Gaussian Factor Graph
\n+
110 GaussianFactorGraph linearFactorGraph;
\n+
111
\n+
112 // Add in the prior on the first state
\n+
113 linearFactorGraph.push_back(priorFactor_);
\n+
114
\n+
115 // Linearize measurement factor and add it to the Kalman Filter graph
\n+
116 Values linearizationPoint;
\n+
117 linearizationPoint.insert(keys[0], x_);
\n+
118 linearFactorGraph.push_back(measurementFactor.linearize(linearizationPoint));
\n+
119
\n+
120 // Solve the factor graph and update the current state estimate
\n+
121 // and the prior factor for the next iteration
\n+
122 x_ = solve_(linearFactorGraph, linearizationPoint, keys[0], &priorFactor_);
\n+
123
\n+
124 return x_;
\n+
125 }
\n+
\n+
126
\n+
127} // namespace gtsam
\n+
Chordal Bayes Net, the result of eliminating a factor graph.
\n+
Linear Factor Graph where all factors are Gaussians.
\n+
Non-linear factor base classes.
\n+
Class to perform generic Kalman Filtering using nonlinear factor graphs.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
This class stores a dense matrix and allows it to be accessed as a collection of vertical blocks.
Definition VerticalBlockMatrix.h:43
\n-
DenseIndex rows() const
Row size.
Definition VerticalBlockMatrix.h:115
\n-
DenseIndex cols() const
Column size.
Definition VerticalBlockMatrix.h:118
\n-
DenseIndex nBlocks() const
Block count.
Definition VerticalBlockMatrix.h:121
\n-
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:85
\n-
size_t size() const
Definition Factor.h:157
\n-
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n-
const constBVector getb() const
Get a view of the r.h.s.
Definition JacobianFactor.h:297
\n-
JacobianFactor()
default constructor for I/O
Definition JacobianFactor.cpp:54
\n-
void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal &noiseModel)
Internal function to fill blocks and set dimensions.
Definition JacobianFactor-inl.h:60
\n-
An exception indicating that the noise model dimension passed into a JacobianFactor has a different d...
Definition linearExceptions.h:106
\n-
An exception indicating that a matrix block passed into a JacobianFactor has a different dimensionali...
Definition linearExceptions.h:124
\n+
IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition FactorGraph.h:186
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianConditional.h:46
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition JacobianFactor.h:96
\n+
This is a generic Extended Kalman Filter class implemented using nonlinear factors.
Definition ExtendedKalmanFilter.h:45
\n+
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n+
boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override
Linearize a non-linearFactorN to get a GaussianFactor, Hence .
Definition NonlinearFactor.cpp:152
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
void insert(Key j, const Value &val)
Add a variable with the given j, throws KeyAlreadyExists<J> if j is already present.
Definition Values.cpp:157
\n+
In Gaussian factors, the error function returns either the negative log-likelihood,...
\n+
The Factor::error simply extracts the.
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,14 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-JacobianFactor-inl.h\n+ExtendedKalmanFilter-inl.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n@@ -15,169 +16,190 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh>\n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-24\n-25 /* *************************************************************************\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28 /* *************************************************************************\n */\n-26 template\n-_\b2_\b7 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const TERMS&terms, const Vector &b, const\n-SharedDiagonal& model)\n-28 {\n-29 _\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(terms, b, model);\n-30 }\n-31\n-32 /* *************************************************************************\n-*/\n-33 template\n-_\b3_\b4 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(\n-35 const KEYS& keys, const _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx& augmentedMatrix, const\n-SharedDiagonal& model) :\n-36 _\bB_\ba_\bs_\be(keys), Ab_(augmentedMatrix)\n-37 {\n-38 // Check noise model dimension\n-39 if(model && (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)model->dim() != augmentedMatrix._\br_\bo_\bw_\bs())\n-40 throw _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(augmentedMatrix._\br_\bo_\bw_\bs(), model->dim());\n-41\n-42 // Check number of variables\n-43 if((_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)_\bB_\ba_\bs_\be_\b:_\b:_\bk_\be_\by_\bs_\b_._\bs_\bi_\bz_\be() != augmentedMatrix._\bn_\bB_\bl_\bo_\bc_\bk_\bs() - 1)\n-44 throw std::invalid_argument(\n-45 \"Error in JacobianFactor constructor input. Number of provided keys plus\\n\"\n-46 \"one for the RHS vector must equal the number of provided matrix blocks.\");\n+29 template\n+30 typename ExtendedKalmanFilter::T ExtendedKalmanFilter::solve_(\n+31 const GaussianFactorGraph& linearFactorGraph,\n+32 const _\bV_\ba_\bl_\bu_\be_\bs& linearizationPoint, _\bK_\be_\by lastKey,\n+33 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br* newPrior)\n+34 {\n+35 // Compute the marginal on the last key\n+36 // Solve the linear factor graph, converting it into a linear Bayes Network\n+37 // P(x0,x1) = P(x0|x1)*P(x1)\n+38 Ordering lastKeyAsOrdering;\n+39 lastKeyAsOrdering += lastKey;\n+40 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br marginal =\n+41 linearFactorGraph.marginalMultifrontalBayesNet(lastKeyAsOrdering)->front();\n+42\n+43 // Extract the current estimate of x1,P1\n+44 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs result = marginal->solve(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs());\n+45 const T& current = linearizationPoint.at(lastKey);\n+46 T x = traits::Retract(current, result[lastKey]);\n 47\n-48 // Check RHS dimension\n-49 if(augmentedMatrix(augmentedMatrix._\bn_\bB_\bl_\bo_\bc_\bk_\bs() - 1)._\bc_\bo_\bl_\bs() != 1)\n-50 throw std::invalid_argument(\n-51 \"Error in JacobianFactor constructor input. The last provided matrix\n-block\\n\"\n-52 \"must be the RHS vector, but the last provided block had more than one\n-column.\");\n-53\n-54 // Take noise model\n-55 model_ = model;\n-56 }\n-57\n-58 /* *************************************************************************\n+48 // Create a Jacobian Factor from the root node of the produced Bayes Net.\n+49 // This will act as a prior for the next iteration.\n+50 // The linearization point of this prior must be moved to the new estimate\n+of x,\n+51 // and the key/index needs to be reset to 0, the first key in the next\n+iteration.\n+52 assert(marginal->nrFrontals() == 1);\n+53 assert(marginal->nrParents() == 0);\n+54 *newPrior = boost::make_shared(\n+55 marginal->keys().front(),\n+56 marginal->getA(marginal->begin()),\n+57 marginal->getb() - marginal->getA(marginal->begin()) * result[lastKey],\n+58 marginal->get_model());\n+59\n+60 return x;\n+61 }\n+62\n+63 /* *************************************************************************\n */\n-59 template\n-_\b6_\b0 void _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(const TERMS& terms, const Vector& b, const\n-SharedDiagonal& noiseModel)\n-61 {\n-62 // Check noise model dimension\n-63 if(noiseModel && (_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx)noiseModel->dim() != b.size())\n-64 throw _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(b.size(), noiseModel->dim());\n-65\n-66 // Resize base class key vector\n-67 _\bB_\ba_\bs_\be_\b:_\b:_\bk_\be_\by_\bs_\b_.resize(terms.size());\n-68\n-69 // Get dimensions of matrices\n-70 std::vector dimensions;\n-71 dimensions.reserve(terms.size());\n-72 for(typename TERMS::const_iterator it = terms.begin(); it != terms.end();\n-++it) {\n-73 const std::pair& term = *it;\n-74 const Matrix& Ai = term.second;\n-75 dimensions.push_back(Ai.cols());\n+64 template \n+65 ExtendedKalmanFilter::ExtendedKalmanFilter(\n+66 _\bK_\be_\by key_initial, T x_initial, noiseModel::Gaussian::shared_ptr P_initial)\n+67 : x_(x_initial) // Set the initial linearization point\n+68 {\n+69 // Create a Jacobian Prior Factor directly P_initial.\n+70 // Since x0 is set to the provided mean, the b vector in the prior will be\n+zero\n+71 // TODO(Frank): is there a reason why noiseModel is not simply P_initial?\n+72 int n = traits::GetDimension(x_initial);\n+73 priorFactor_ = JacobianFactor::shared_ptr(\n+74 new _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(key_initial, P_initial->R(), Vector::Zero(n),\n+75 noiseModel::Unit::Create(n)));\n 76 }\n 77\n-78 // Construct block matrix\n-79 Ab_ = _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx(dimensions, b.size(), true);\n-80\n-81 // Check and add terms\n-82 _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx i = 0; // For block index\n-83 for(typename TERMS::const_iterator it = terms.begin(); it != terms.end();\n-++it) {\n-84 const std::pair& term = *it;\n-85 _\bK_\be_\by key = term.first;\n-86 const Matrix& Ai = term.second;\n-87\n-88 // Check block rows\n-89 if(Ai.rows() != Ab_._\br_\bo_\bw_\bs())\n-90 throw _\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk(Ab_._\br_\bo_\bw_\bs(), Ai.rows());\n-91\n-92 // Assign key and matrix\n-93 _\bB_\ba_\bs_\be_\b:_\b:_\bk_\be_\by_\bs_\b_[i] = key;\n-94 Ab_(i) = Ai;\n+78 /* *************************************************************************\n+*/\n+79 template\n+_\b8_\b0 typename ExtendedKalmanFilter::T _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bp_\br_\be_\bd_\bi_\bc_\bt\n+(\n+81 const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& motionFactor) {\n+82 const auto keys = motionFactor._\bk_\be_\by_\bs();\n+83\n+84 // Create a Gaussian Factor Graph\n+85 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh linearFactorGraph;\n+86\n+87 // Add in previous posterior as prior on the first state\n+88 linearFactorGraph._\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(priorFactor_);\n+89\n+90 // Linearize motion model and add it to the Kalman Filter graph\n+91 _\bV_\ba_\bl_\bu_\be_\bs linearizationPoint;\n+92 linearizationPoint._\bi_\bn_\bs_\be_\br_\bt(keys[0], x_);\n+93 linearizationPoint._\bi_\bn_\bs_\be_\br_\bt(keys[1], x_); // TODO should this really be x_ ?\n+94 linearFactorGraph._\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(motionFactor._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(linearizationPoint));\n 95\n-96 // Increment block index\n-97 ++ i;\n-98 }\n+96 // Solve the factor graph and update the current state estimate\n+97 // and the posterior for the next iteration.\n+98 x_ = solve_(linearFactorGraph, linearizationPoint, keys[1], &priorFactor_);\n 99\n-100 // Assign RHS vector\n-101 _\bg_\be_\bt_\bb() = b;\n+100 return x_;\n+101 }\n 102\n-103 // Assign noise model\n-104 model_ = noiseModel;\n-105 }\n-106\n-107} // gtsam\n+103 /\n+* ************************************************************************* */\n+104 template\n+_\b1_\b0_\b5 typename ExtendedKalmanFilter::T _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+(\n+106 const _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br& measurementFactor) {\n+107 const auto keys = measurementFactor._\bk_\be_\by_\bs();\n 108\n-_\bl_\bi_\bn_\be_\ba_\br_\bE_\bx_\bc_\be_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bh\n-Exceptions that may be thrown by linear solver components.\n+109 // Create a Gaussian Factor Graph\n+110 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh linearFactorGraph;\n+111\n+112 // Add in the prior on the first state\n+113 linearFactorGraph._\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(priorFactor_);\n+114\n+115 // Linearize measurement factor and add it to the Kalman Filter graph\n+116 _\bV_\ba_\bl_\bu_\be_\bs linearizationPoint;\n+117 linearizationPoint._\bi_\bn_\bs_\be_\br_\bt(keys[0], x_);\n+118 linearFactorGraph._\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(measurementFactor._\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+(linearizationPoint));\n+119\n+120 // Solve the factor graph and update the current state estimate\n+121 // and the prior factor for the next iteration\n+122 x_ = solve_(linearFactorGraph, linearizationPoint, keys[0], &priorFactor_);\n+123\n+124 return x_;\n+125 }\n+126\n+127} // namespace gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+Chordal Bayes Net, the result of eliminating a factor graph.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n+_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b._\bh\n+Class to perform generic Kalman Filtering using nonlinear factor graphs.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n-ptrdiff_t DenseIndex\n-The index type for Eigen objects.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of vertical blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\br_\bo_\bw_\bs\n-DenseIndex rows() const\n-Row size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bc_\bo_\bl_\bs\n-DenseIndex cols() const\n-Column size.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bn_\bB_\bl_\bo_\bc_\bk_\bs\n-DenseIndex nBlocks() const\n-Block count.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VerticalBlockMatrix.h:121\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs_\b_\n-KeyVector keys_\n-The keys involved in this factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bi_\bz_\be\n-size_t size() const\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:157\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-An abstract virtual base class for JacobianFactor and HessianFactor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bb\n-const constBVector getb() const\n-Get a view of the r.h.s.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:297\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-JacobianFactor()\n-default constructor for I/O\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs\n-void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal\n-&noiseModel)\n-Internal function to fill blocks and set dimensions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor-inl.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-An exception indicating that the noise model dimension passed into a\n-JacobianFactor has a different d...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:106\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bv_\ba_\bl_\bi_\bd_\bM_\ba_\bt_\br_\bi_\bx_\bB_\bl_\bo_\bc_\bk\n-An exception indicating that a matrix block passed into a JacobianFactor has a\n-different dimensionali...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn linearExceptions.h:124\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)\n+Add a factor directly using a shared_ptr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br\n+This is a generic Extended Kalman Filter class implemented using nonlinear\n+factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExtendedKalmanFilter.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n+density Templated on...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override\n+Linearize a non-linearFactorN to get a GaussianFactor, Hence .\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bn_\bs_\be_\br_\bt\n+void insert(Key j, const Value &val)\n+Add a variable with the given j, throws KeyAlreadyExists if j is already\n+present.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:157\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+In Gaussian factors, the error function returns either the negative log-\n+likelihood,...\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * J\bJa\bac\bco\bob\bbi\bia\ban\bnF\bFa\bac\bct\bto\bor\br-\b-i\bin\bnl\bl.\b.h\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bE_\bx_\bt_\be_\bn_\bd_\be_\bd_\bK_\ba_\bl_\bm_\ba_\bn_\bF_\bi_\bl_\bt_\be_\br_\b-_\bi_\bn_\bl_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00860.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00956.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesNet.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ConstantVelocityFactor.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
GaussianBayesNet.h File Reference
\n+
ConstantVelocityFactor.h File Reference
\n
\n
\n \n-

Chordal Bayes Net, the result of eliminating a factor graph. \n+

Maintain a constant velocity motion model between two NavStates. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::GaussianBayesNet
 GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals. More...
 
struct  gtsam::traits< GaussianBayesNet >
 traits More...
class  gtsam::ConstantVelocityFactor
 Binary factor for applying a constant velocity model to a moving body represented as a NavState. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Chordal Bayes Net, the result of eliminating a factor graph.

\n-

GaussianBayesNet

Author
Frank Dellaert
\n+

Maintain a constant velocity motion model between two NavStates.

\n+
Author
Asa Hammond
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,26 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GaussianBayesNet.h File Reference\n-Chordal Bayes Net, the result of eliminating a factor graph. _\bM_\bo_\br_\be_\b._\b._\b.\n+ConstantVelocityFactor.h File Reference\n+Maintain a constant velocity motion model between two NavStates. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-\u00a0 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt is a Bayes net made from linear-Gaussian\n- conditionals. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 Binary factor for applying a constant velocity model to a moving body\n+ represented as a _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Chordal Bayes Net, the result of eliminating a factor graph.\n-GaussianBayesNet\n+Maintain a constant velocity motion model between two NavStates.\n Author\n- Frank Dellaert\n+ Asa Hammond\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+ * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n+ * _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bV_\be_\bl_\bo_\bc_\bi_\bt_\by_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00860_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01145_source.html", "comments": ["Files 90% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianBayesNet.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtParams.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
GaussianBayesNet.h
\n+
LevenbergMarquardtParams.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19// \\callgraph
\n-
20
\n
21#pragma once
\n
22
\n-\n-\n-\n-\n+\n+\n+
25
\n+
26namespace gtsam {
\n
27
\n-
28#include <utility>
\n-
29namespace gtsam {
\n-
30
\n+
28class LevenbergMarquardtOptimizer;
\n+
29
\n
\n-
35 class GTSAM_EXPORT GaussianBayesNet: public BayesNet<GaussianConditional>
\n-
36 {
\n-
37 public:
\n-
38
\n-\n-
40 typedef GaussianBayesNet This;
\n-\n-
42 typedef boost::shared_ptr<This> shared_ptr;
\n-
43 typedef boost::shared_ptr<ConditionalType> sharedConditional;
\n-
44
\n-
47
\n-\n-
50
\n-
52 template <typename ITERATOR>
\n-
\n-
53 GaussianBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
\n-
54 : Base(firstConditional, lastConditional) {}
\n-
\n-
55
\n-
57 template <class CONTAINER>
\n-
\n-
58 explicit GaussianBayesNet(const CONTAINER& conditionals) {
\n-
59 push_back(conditionals);
\n-
60 }
\n-
\n-
61
\n-
64 template <class DERIVEDCONDITIONAL>
\n-
\n-\n-
66 : Base(graph) {}
\n-
\n-
67
\n-
72 template <class DERIVEDCONDITIONAL>
\n-
\n-\n-
74 std::initializer_list<boost::shared_ptr<DERIVEDCONDITIONAL> > conditionals)
\n-
75 : Base(conditionals) {}
\n-
\n-
76
\n-
78 virtual ~GaussianBayesNet() = default;
\n-
79
\n-
81
\n-
84
\n-
86 bool equals(const This& bn, double tol = 1e-9) const;
\n-
87
\n-
\n-
89 void print(
\n-
90 const std::string& s = "",
\n-
91 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n-
92 Base::print(s, formatter);
\n-
93 }
\n-
\n-
94
\n-
96
\n+\n+
36
\n+
37public:
\n+
\n+\n+
40 SILENT = 0, SUMMARY, TERMINATION, LAMBDA, TRYLAMBDA, TRYCONFIG, DAMPED, TRYDELTA
\n+
41 };
\n+
\n+
42
\n+
43 static VerbosityLM verbosityLMTranslator(const std::string &s);
\n+
44 static std::string verbosityLMTranslator(VerbosityLM value);
\n+
45 using OptimizerType = LevenbergMarquardtOptimizer;
\n+
46
\n+
47public:
\n+
48
\n+\n+
50 double lambdaFactor;
\n+\n+\n+\n+\n+
55 std::string logFile;
\n+\n+\n+
58 double minDiagonal;
\n+
59 double maxDiagonal;
\n+
60
\n+\n+
62 : verbosityLM(SILENT),
\n+
63 diagonalDamping(false),
\n+
64 minDiagonal(1e-6),
\n+
65 maxDiagonal(1e32) {
\n+
66 SetLegacyDefaults(this);
\n+
67 }
\n+
68
\n+
69 static void SetLegacyDefaults(LevenbergMarquardtParams* p) {
\n+
70 // Relevant NonlinearOptimizerParams:
\n+
71 p->maxIterations = 100;
\n+
72 p->relativeErrorTol = 1e-5;
\n+
73 p->absoluteErrorTol = 1e-5;
\n+
74 // LM-specific:
\n+
75 p->lambdaInitial = 1e-5;
\n+
76 p->lambdaFactor = 10.0;
\n+
77 p->lambdaUpperBound = 1e5;
\n+
78 p->lambdaLowerBound = 0.0;
\n+
79 p->minModelFidelity = 1e-3;
\n+
80 p->diagonalDamping = false;
\n+
81 p->useFixedLambdaFactor = true;
\n+
82 }
\n+
83
\n+
84 // these do seem to work better for SFM
\n+
85 static void SetCeresDefaults(LevenbergMarquardtParams* p) {
\n+
86 // Relevant NonlinearOptimizerParams:
\n+
87 p->maxIterations = 50;
\n+
88 p->absoluteErrorTol = 0; // No corresponding option in CERES
\n+
89 p->relativeErrorTol = 1e-6; // This is function_tolerance
\n+
90 // LM-specific:
\n+
91 p->lambdaUpperBound = 1e32;
\n+
92 p->lambdaLowerBound = 1e-16;
\n+
93 p->lambdaInitial = 1e-04;
\n+
94 p->lambdaFactor = 2.0;
\n+
95 p->minModelFidelity = 1e-3; // options.min_relative_decrease in CERES
\n+
96 p->diagonalDamping = true;
\n+
97 p->useFixedLambdaFactor = false; // This is important
\n+
98 }
\n
99
\n-
101 double error(const VectorValues& x) const;
\n-
102
\n-
104 double logProbability(const VectorValues& x) const;
\n+
100 static LevenbergMarquardtParams LegacyDefaults() {
\n+
101 LevenbergMarquardtParams p;
\n+
102 SetLegacyDefaults(&p);
\n+
103 return p;
\n+
104 }
\n
105
\n-
111 double evaluate(const VectorValues& x) const;
\n-
112
\n-
\n-
114 double operator()(const VectorValues& x) const {
\n-
115 return evaluate(x);
\n-
116 }
\n-
\n-
117
\n-
120 VectorValues optimize() const;
\n-
121
\n-
123 VectorValues optimize(const VectorValues& given) const;
\n+
106 static LevenbergMarquardtParams CeresDefaults() {
\n+
107 LevenbergMarquardtParams p;
\n+
108 SetCeresDefaults(&p);
\n+
109 return p;
\n+
110 }
\n+
111
\n+
112 static LevenbergMarquardtParams EnsureHasOrdering(LevenbergMarquardtParams params,
\n+
113 const NonlinearFactorGraph& graph) {
\n+
114 if (!params.ordering)
\n+
115 params.ordering = Ordering::Create(params.orderingType, graph);
\n+
116 return params;
\n+
117 }
\n+
118
\n+
119 static LevenbergMarquardtParams ReplaceOrdering(LevenbergMarquardtParams params,
\n+
120 const Ordering& ordering) {
\n+
121 params.ordering = ordering;
\n+
122 return params;
\n+
123 }
\n
124
\n-
131 VectorValues sample(std::mt19937_64* rng) const;
\n-
132
\n-
140 VectorValues sample(const VectorValues& given, std::mt19937_64* rng) const;
\n-
141
\n-
143 VectorValues sample() const;
\n-
144
\n-
146 VectorValues sample(const VectorValues& given) const;
\n-
147
\n-
154 Ordering ordering() const;
\n+
125 ~LevenbergMarquardtParams() override {}
\n+
126 void print(const std::string& str = "") const override;
\n+
127
\n+
130 bool getDiagonalDamping() const { return diagonalDamping; }
\n+
131 double getlambdaFactor() const { return lambdaFactor; }
\n+
132 double getlambdaInitial() const { return lambdaInitial; }
\n+
133 double getlambdaLowerBound() const { return lambdaLowerBound; }
\n+
134 double getlambdaUpperBound() const { return lambdaUpperBound; }
\n+
135 bool getUseFixedLambdaFactor() { return useFixedLambdaFactor; }
\n+
136 std::string getLogFile() const { return logFile; }
\n+
137 std::string getVerbosityLM() const { return verbosityLMTranslator(verbosityLM);}
\n+
138
\n+
139 void setDiagonalDamping(bool flag) { diagonalDamping = flag; }
\n+
140 void setlambdaFactor(double value) { lambdaFactor = value; }
\n+
141 void setlambdaInitial(double value) { lambdaInitial = value; }
\n+
142 void setlambdaLowerBound(double value) { lambdaLowerBound = value; }
\n+
143 void setlambdaUpperBound(double value) { lambdaUpperBound = value; }
\n+
144 void setUseFixedLambdaFactor(bool flag) { useFixedLambdaFactor = flag;}
\n+
145 void setLogFile(const std::string& s) { logFile = s; }
\n+
146 void setVerbosityLM(const std::string& s) { verbosityLM = verbosityLMTranslator(s);}
\n+
147 // @}
\n+
150
\n+
\n+
152 boost::shared_ptr<NonlinearOptimizerParams> clone() const {
\n+
153 return boost::shared_ptr<NonlinearOptimizerParams>(new LevenbergMarquardtParams(*this));
\n+
154 }
\n+
\n
155
\n-
157
\n-
160
\n-
166 std::pair<Matrix, Vector> matrix(const Ordering& ordering) const;
\n-
167
\n-
173 std::pair<Matrix, Vector> matrix() const;
\n-
174
\n-
200 VectorValues optimizeGradientSearch() const;
\n-
201
\n-
207 VectorValues gradient(const VectorValues& x0) const;
\n-
208
\n-
215 VectorValues gradientAtZero() const;
\n-
216
\n-
224 double determinant() const;
\n-
225
\n-
232 double logDeterminant() const;
\n-
233
\n-
238 VectorValues backSubstitute(const VectorValues& gx) const;
\n-
239
\n-
246 VectorValues backSubstituteTranspose(const VectorValues& gx) const;
\n-
247
\n-
251
\n-
252 using Base::evaluate; // Expose evaluate(const HybridValues&) method..
\n-
253 using Base::logProbability; // Expose logProbability(const HybridValues&) method..
\n-
254 using Base::error; // Expose error(const HybridValues&) method..
\n-
255
\n-
257
\n-
258 private:
\n-
260 friend class boost::serialization::access;
\n-
261 template<class ARCHIVE>
\n-
262 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
263 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
264 }
\n-
265 };
\n-
\n-
266
\n-
268 template<>
\n-
\n-
269 struct traits<GaussianBayesNet> : public Testable<GaussianBayesNet> {
\n-
270 };
\n-
\n-
271
\n-
272} //\\ namespace gtsam
\n-
Factor Graph Base Class.
\n-
Bayes network.
\n-
Conditional Gaussian Base class.
\n-
Included from all GTSAM files.
\n+
157};
\n+
\n+
158
\n+
159}
\n+
Parameters for nonlinear optimization.
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
Definition Ordering.h:34
\n-
GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.
Definition GaussianBayesNet.h:36
\n-
double operator()(const VectorValues &x) const
Evaluate probability density, sugar.
Definition GaussianBayesNet.h:114
\n-
void print(const std::string &s="", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print graph
Definition GaussianBayesNet.h:89
\n-
GaussianBayesNet(std::initializer_list< boost::shared_ptr< DERIVEDCONDITIONAL > > conditionals)
Constructor that takes an initializer list of shared pointers.
Definition GaussianBayesNet.h:73
\n-
GaussianBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition GaussianBayesNet.h:65
\n-
virtual ~GaussianBayesNet()=default
Destructor.
\n-
GaussianBayesNet(const CONTAINER &conditionals)
Construct from container of factors (shared_ptr or plain objects)
Definition GaussianBayesNet.h:58
\n-
GaussianBayesNet()
Construct empty bayes net.
Definition GaussianBayesNet.h:49
\n-
GaussianBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
Construct from iterator over conditionals.
Definition GaussianBayesNet.h:53
\n-
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
This class performs Levenberg-Marquardt nonlinear optimization.
Definition LevenbergMarquardtOptimizer.h:35
\n+
Parameters for Levenberg-Marquardt optimization.
Definition LevenbergMarquardtParams.h:35
\n+
double lambdaFactor
The amount by which to multiply or divide lambda when adjusting lambda (default: 10....
Definition LevenbergMarquardtParams.h:50
\n+
double minDiagonal
when using diagonal damping saturates the minimum diagonal entries (default: 1e-6)
Definition LevenbergMarquardtParams.h:58
\n+
double lambdaUpperBound
The maximum lambda to try before assuming the optimization has failed (default: 1e5)
Definition LevenbergMarquardtParams.h:51
\n+
double lambdaInitial
The initial Levenberg-Marquardt damping term (default: 1e-5)
Definition LevenbergMarquardtParams.h:49
\n+
double maxDiagonal
when using diagonal damping saturates the maximum diagonal entries (default: 1e32)
Definition LevenbergMarquardtParams.h:59
\n+
double minModelFidelity
Lower bound for the modelFidelity to accept the result of an LM iteration.
Definition LevenbergMarquardtParams.h:54
\n+
double lambdaLowerBound
The minimum lambda used in LM (default: 0)
Definition LevenbergMarquardtParams.h:52
\n+
boost::shared_ptr< NonlinearOptimizerParams > clone() const
Definition LevenbergMarquardtParams.h:152
\n+
bool diagonalDamping
if true, use diagonal of Hessian
Definition LevenbergMarquardtParams.h:56
\n+
bool useFixedLambdaFactor
if true applies constant increase (or decrease) to lambda according to lambdaFactor
Definition LevenbergMarquardtParams.h:57
\n+
std::string logFile
an optional CSV log file, with [iteration, time, error, lambda]
Definition LevenbergMarquardtParams.h:55
\n+
VerbosityLM
See LevenbergMarquardtParams::verbosityLM.
Definition LevenbergMarquardtParams.h:39
\n+
VerbosityLM verbosityLM
The verbosity level for Levenberg-Marquardt (default: SILENT), see also NonlinearOptimizerParams::ver...
Definition LevenbergMarquardtParams.h:53
\n+
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n+
double absoluteErrorTol
The maximum absolute error decrease to stop iterating (default 1e-5)
Definition NonlinearOptimizerParams.h:43
\n+
size_t maxIterations
The maximum iterations to stop iterating (default 100)
Definition NonlinearOptimizerParams.h:41
\n+
double relativeErrorTol
The maximum relative error decrease to stop iterating (default 1e-5)
Definition NonlinearOptimizerParams.h:42
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,228 +1,247 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-GaussianBayesNet.h\n+LevenbergMarquardtParams.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19// \\callgraph\n-20\n 21#pragma once\n 22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n 27\n-28#include \n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-_\b3_\b5 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt: public _\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-36 {\n-37 public:\n-38\n-39 typedef _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b> _\bB_\ba_\bs_\be;\n-40 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bT_\bh_\bi_\bs;\n-41 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-42 typedef boost::shared_ptr shared_ptr;\n-43 typedef boost::shared_ptr sharedConditional;\n-44\n-47\n-_\b4_\b9 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n-50\n-52 template \n-_\b5_\b3 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(ITERATOR firstConditional, ITERATOR lastConditional)\n-54 : _\bB_\ba_\bs_\be(firstConditional, lastConditional) {}\n-55\n-57 template \n-_\b5_\b8 explicit _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const CONTAINER& conditionals) {\n-59 push_back(conditionals);\n-60 }\n-61\n-64 template \n-_\b6_\b5 explicit _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>& graph)\n-66 : _\bB_\ba_\bs_\be(graph) {}\n-67\n-72 template \n-_\b7_\b3 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(\n-74 std::initializer_list > conditionals)\n-75 : _\bB_\ba_\bs_\be(conditionals) {}\n-76\n-_\b7_\b8 virtual _\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() = default;\n-79\n-81\n-84\n-86 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& bn, double tol = 1e-9) const;\n-87\n-_\b8_\b9 void _\bp_\br_\bi_\bn_\bt(\n-90 const std::string& s = \"\",\n-91 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n-92 Base::print(s, formatter);\n-93 }\n-94\n-96\n+28class LevenbergMarquardtOptimizer;\n+29\n+_\b3_\b5class GTSAM_EXPORT _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+{\n+36\n+37public:\n+_\b3_\b9 enum _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bL_\bM {\n+40 SILENT = 0, SUMMARY, TERMINATION, LAMBDA, TRYLAMBDA, TRYCONFIG, DAMPED,\n+TRYDELTA\n+41 };\n+42\n+43 static VerbosityLM verbosityLMTranslator(const std::string &s);\n+44 static std::string verbosityLMTranslator(VerbosityLM value);\n+45 using OptimizerType = _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br;\n+46\n+47public:\n+48\n+_\b4_\b9 double _\bl_\ba_\bm_\bb_\bd_\ba_\bI_\bn_\bi_\bt_\bi_\ba_\bl;\n+_\b5_\b0 double _\bl_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br;\n+_\b5_\b1 double _\bl_\ba_\bm_\bb_\bd_\ba_\bU_\bp_\bp_\be_\br_\bB_\bo_\bu_\bn_\bd;\n+_\b5_\b2 double _\bl_\ba_\bm_\bb_\bd_\ba_\bL_\bo_\bw_\be_\br_\bB_\bo_\bu_\bn_\bd;\n+_\b5_\b3 _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bL_\bM _\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bL_\bM;\n+_\b5_\b4 double _\bm_\bi_\bn_\bM_\bo_\bd_\be_\bl_\bF_\bi_\bd_\be_\bl_\bi_\bt_\by;\n+_\b5_\b5 std::string _\bl_\bo_\bg_\bF_\bi_\bl_\be;\n+_\b5_\b6 bool _\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bD_\ba_\bm_\bp_\bi_\bn_\bg;\n+_\b5_\b7 bool _\bu_\bs_\be_\bF_\bi_\bx_\be_\bd_\bL_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br;\n+_\b5_\b8 double _\bm_\bi_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl;\n+_\b5_\b9 double _\bm_\ba_\bx_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl;\n+60\n+61 _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs()\n+62 : verbosityLM(SILENT),\n+63 diagonalDamping(false),\n+64 minDiagonal(1e-6),\n+65 maxDiagonal(1e32) {\n+66 SetLegacyDefaults(this);\n+67 }\n+68\n+69 static void SetLegacyDefaults(_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs* p) {\n+70 // Relevant NonlinearOptimizerParams:\n+71 p->_\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs = 100;\n+72 p->_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl = 1e-5;\n+73 p->_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl = 1e-5;\n+74 // LM-specific:\n+75 p->_\bl_\ba_\bm_\bb_\bd_\ba_\bI_\bn_\bi_\bt_\bi_\ba_\bl = 1e-5;\n+76 p->_\bl_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br = 10.0;\n+77 p->_\bl_\ba_\bm_\bb_\bd_\ba_\bU_\bp_\bp_\be_\br_\bB_\bo_\bu_\bn_\bd = 1e5;\n+78 p->_\bl_\ba_\bm_\bb_\bd_\ba_\bL_\bo_\bw_\be_\br_\bB_\bo_\bu_\bn_\bd = 0.0;\n+79 p->_\bm_\bi_\bn_\bM_\bo_\bd_\be_\bl_\bF_\bi_\bd_\be_\bl_\bi_\bt_\by = 1e-3;\n+80 p->_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bD_\ba_\bm_\bp_\bi_\bn_\bg = false;\n+81 p->_\bu_\bs_\be_\bF_\bi_\bx_\be_\bd_\bL_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br = true;\n+82 }\n+83\n+84 // these do seem to work better for SFM\n+85 static void SetCeresDefaults(LevenbergMarquardtParams* p) {\n+86 // Relevant NonlinearOptimizerParams:\n+87 p->maxIterations = 50;\n+88 p->absoluteErrorTol = 0; // No corresponding option in CERES\n+89 p->relativeErrorTol = 1e-6; // This is function_tolerance\n+90 // LM-specific:\n+91 p->lambdaUpperBound = 1e32;\n+92 p->lambdaLowerBound = 1e-16;\n+93 p->lambdaInitial = 1e-04;\n+94 p->lambdaFactor = 2.0;\n+95 p->minModelFidelity = 1e-3; // options.min_relative_decrease in CERES\n+96 p->diagonalDamping = true;\n+97 p->useFixedLambdaFactor = false; // This is important\n+98 }\n 99\n-101 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-102\n-104 double logProbability(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n+100 static LevenbergMarquardtParams LegacyDefaults() {\n+101 LevenbergMarquardtParams p;\n+102 SetLegacyDefaults(&p);\n+103 return p;\n+104 }\n 105\n-111 double evaluate(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-112\n-_\b1_\b1_\b4 double _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const {\n-115 return evaluate(x);\n-116 }\n-117\n-120 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n-121\n-123 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& given) const;\n+106 static LevenbergMarquardtParams CeresDefaults() {\n+107 LevenbergMarquardtParams p;\n+108 SetCeresDefaults(&p);\n+109 return p;\n+110 }\n+111\n+112 static LevenbergMarquardtParams EnsureHasOrdering(LevenbergMarquardtParams\n+params,\n+113 const NonlinearFactorGraph& graph) {\n+114 if (!params.ordering)\n+115 params.ordering = Ordering::Create(params.orderingType, graph);\n+116 return params;\n+117 }\n+118\n+119 static LevenbergMarquardtParams ReplaceOrdering(LevenbergMarquardtParams\n+params,\n+120 const Ordering& ordering) {\n+121 params.ordering = ordering;\n+122 return params;\n+123 }\n 124\n-131 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(std::mt19937_64* rng) const;\n-132\n-140 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& given, std::mt19937_64* rng) const;\n-141\n-143 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample() const;\n-144\n-146 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs sample(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& given) const;\n-147\n-154 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg ordering() const;\n+125 ~LevenbergMarquardtParams() override {}\n+126 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const override;\n+127\n+130 bool getDiagonalDamping() const { return diagonalDamping; }\n+131 double getlambdaFactor() const { return lambdaFactor; }\n+132 double getlambdaInitial() const { return lambdaInitial; }\n+133 double getlambdaLowerBound() const { return lambdaLowerBound; }\n+134 double getlambdaUpperBound() const { return lambdaUpperBound; }\n+135 bool getUseFixedLambdaFactor() { return useFixedLambdaFactor; }\n+136 std::string getLogFile() const { return logFile; }\n+137 std::string getVerbosityLM() const { return verbosityLMTranslator\n+(verbosityLM);}\n+138\n+139 void setDiagonalDamping(bool flag) { diagonalDamping = flag; }\n+140 void setlambdaFactor(double value) { lambdaFactor = value; }\n+141 void setlambdaInitial(double value) { lambdaInitial = value; }\n+142 void setlambdaLowerBound(double value) { lambdaLowerBound = value; }\n+143 void setlambdaUpperBound(double value) { lambdaUpperBound = value; }\n+144 void setUseFixedLambdaFactor(bool flag) { useFixedLambdaFactor = flag;}\n+145 void setLogFile(const std::string& s) { logFile = s; }\n+146 void setVerbosityLM(const std::string& s) { verbosityLM =\n+verbosityLMTranslator(s);}\n+147 // @}\n+150\n+_\b1_\b5_\b2 boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const {\n+153 return boost::shared_ptr(new\n+_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs(*this));\n+154 }\n 155\n-157\n-160\n-166 std::pair matrix(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) const;\n-167\n-173 std::pair matrix() const;\n-174\n-200 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs optimizeGradientSearch() const;\n-201\n-207 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradient(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x0) const;\n-208\n-215 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const;\n-216\n-224 double determinant() const;\n-225\n-232 double logDeterminant() const;\n-233\n-238 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs backSubstitute(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gx) const;\n-239\n-246 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs backSubstituteTranspose(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& gx) const;\n-247\n-251\n-252 using Base::evaluate; // Expose evaluate(const HybridValues&) method..\n-253 using Base::logProbability; // Expose logProbability(const HybridValues&)\n-method..\n-254 using Base::error; // Expose error(const HybridValues&) method..\n-255\n-257\n-258 private:\n-_\b2_\b6_\b0 friend class boost::serialization::access;\n-261 template\n-262 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-263 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-264 }\n-265 };\n-266\n-268 template<>\n-_\b2_\b6_\b9 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-270 };\n-271\n-272} //\\ namespace gtsam\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n-_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-Bayes network.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-Conditional Gaussian Base class.\n-_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n-Included from all GTSAM files.\n+157};\n+158\n+159}\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+Parameters for nonlinear optimization.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n-Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n-landmarkKey)\n-Optimize for triangulation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-A BayesNet is a tree of conditionals, stored in elimination order.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-GaussianBayesNet is a Bayes net made from linear-Gaussian conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-double operator()(const VectorValues &x) const\n-Evaluate probability density, sugar.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const override\n-print graph\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-GaussianBayesNet(std::initializer_list< boost::shared_ptr< DERIVEDCONDITIONAL >\n-> conditionals)\n-Constructor that takes an initializer list of shared pointers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-GaussianBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)\n-Implicit copy/downcast constructor to override explicit template container\n-constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-virtual ~GaussianBayesNet()=default\n-Destructor.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-GaussianBayesNet(const CONTAINER &conditionals)\n-Construct from container of factors (shared_ptr or plain objects)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-GaussianBayesNet()\n-Construct empty bayes net.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-GaussianBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)\n-Construct from iterator over conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesNet.h:53\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-A GaussianConditional functions as the node in a Bayes network.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+This class performs Levenberg-Marquardt nonlinear optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for Levenberg-Marquardt optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br\n+double lambdaFactor\n+The amount by which to multiply or divide lambda when adjusting lambda\n+(default: 10....\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\bi_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+double minDiagonal\n+when using diagonal damping saturates the minimum diagonal entries (default:\n+1e-6)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\ba_\bm_\bb_\bd_\ba_\bU_\bp_\bp_\be_\br_\bB_\bo_\bu_\bn_\bd\n+double lambdaUpperBound\n+The maximum lambda to try before assuming the optimization has failed (default:\n+1e5)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\ba_\bm_\bb_\bd_\ba_\bI_\bn_\bi_\bt_\bi_\ba_\bl\n+double lambdaInitial\n+The initial Levenberg-Marquardt damping term (default: 1e-5)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:49\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\ba_\bx_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+double maxDiagonal\n+when using diagonal damping saturates the maximum diagonal entries (default:\n+1e32)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\bi_\bn_\bM_\bo_\bd_\be_\bl_\bF_\bi_\bd_\be_\bl_\bi_\bt_\by\n+double minModelFidelity\n+Lower bound for the modelFidelity to accept the result of an LM iteration.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\ba_\bm_\bb_\bd_\ba_\bL_\bo_\bw_\be_\br_\bB_\bo_\bu_\bn_\bd\n+double lambdaLowerBound\n+The minimum lambda used in LM (default: 0)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+boost::shared_ptr< NonlinearOptimizerParams > clone() const\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bd_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bD_\ba_\bm_\bp_\bi_\bn_\bg\n+bool diagonalDamping\n+if true, use diagonal of Hessian\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bu_\bs_\be_\bF_\bi_\bx_\be_\bd_\bL_\ba_\bm_\bb_\bd_\ba_\bF_\ba_\bc_\bt_\bo_\br\n+bool useFixedLambdaFactor\n+if true applies constant increase (or decrease) to lambda according to\n+lambdaFactor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bl_\bo_\bg_\bF_\bi_\bl_\be\n+std::string logFile\n+an optional CSV log file, with [iteration, time, error, lambda]\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bL_\bM\n+VerbosityLM\n+See LevenbergMarquardtParams::verbosityLM.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by_\bL_\bM\n+VerbosityLM verbosityLM\n+The verbosity level for Levenberg-Marquardt (default: SILENT), see also\n+NonlinearOptimizerParams::ver...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+The common parameters for Nonlinear optimizers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl\n+double absoluteErrorTol\n+The maximum absolute error decrease to stop iterating (default 1e-5)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n+size_t maxIterations\n+The maximum iterations to stop iterating (default 100)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl\n+double relativeErrorTol\n+The maximum relative error decrease to stop iterating (default 1e-5)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:42\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00887_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01172_source.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/iterative.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/LevenbergMarquardtOptimizer.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
iterative.h
\n+
LevenbergMarquardtOptimizer.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <gtsam/base/Matrix.h>
\n-\n-\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
36 template<class S, class V, class E>
\n-
37 V conjugateGradients(const S& Ab, V x,
\n-
38 const ConjugateGradientParameters &parameters, bool steepest = false);
\n-
39
\n-
\n-
44 class GTSAM_EXPORT System {
\n+
21#pragma once
\n+
22
\n+\n+\n+\n+
26#include <boost/date_time/posix_time/posix_time.hpp>
\n+
27
\n+
28class NonlinearOptimizerMoreOptimizationTest;
\n+
29
\n+
30namespace gtsam {
\n+
31
\n+
\n+\n+
36
\n+
37protected:
\n+\n+
39 boost::posix_time::ptime startTime_;
\n+
40
\n+
41 void initTime();
\n+
42
\n+
43public:
\n+
44 typedef boost::shared_ptr<LevenbergMarquardtOptimizer> shared_ptr;
\n
45
\n-
46 private:
\n-
47 const Matrix& A_;
\n-
48 const Vector& b_;
\n-
49
\n-
50 public:
\n-
51
\n-
52 System(const Matrix& A, const Vector& b) :
\n-
53 A_(A), b_(b) {
\n-
54 }
\n-
55
\n-
57 const Matrix& A() const { return A_; }
\n-
58
\n-
60 const Vector& b() const { return b_; }
\n-
61
\n-
\n-
63 Vector operator^(const Vector& e) const {
\n-
64 return A_ ^ e;
\n-
65 }
\n-
\n-
66
\n-
70 void print (const std::string& s = "System") const;
\n-
71
\n-
\n-
73 Vector gradient(const Vector& x) const {
\n-
74 return A() ^ (A() * x - b());
\n-
75 }
\n+
48
\n+
57 LevenbergMarquardtOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n+\n+
59
\n+
67 LevenbergMarquardtOptimizer(const NonlinearFactorGraph& graph, const Values& initialValues,
\n+
68 const Ordering& ordering,
\n+\n+
70
\n+
\n+\n+
73 }
\n
\n+
74
\n
76
\n-
\n-
78 Vector operator*(const Vector& x) const {
\n-
79 return A() * x;
\n-
80 }
\n-
\n-
81
\n-
\n-
83 void multiplyInPlace(const Vector& x, Vector& e) const {
\n-
84 e = A() * x;
\n-
85 }
\n-
\n-
86
\n-
\n-
88 void transposeMultiplyAdd(double alpha, const Vector& e, Vector& x) const {
\n-
89 x += alpha * A().transpose() * e;
\n-
90 }
\n-
\n-
91 };
\n-
\n-
92
\n-
96 GTSAM_EXPORT Vector steepestDescent(
\n-
97 const System& Ab,
\n-
98 const Vector& x,
\n-
99 const IterativeOptimizationParameters & parameters);
\n-
100
\n-
104 GTSAM_EXPORT Vector conjugateGradientDescent(
\n-
105 const System& Ab,
\n-
106 const Vector& x,
\n-
107 const ConjugateGradientParameters & parameters);
\n-
108
\n-
114 GTSAM_EXPORT Vector steepestDescent(
\n-
115 const Matrix& A,
\n-
116 const Vector& b,
\n-
117 const Vector& x,
\n-
118 const ConjugateGradientParameters & parameters);
\n+
79
\n+
81 double lambda() const;
\n+
82
\n+
84 int getInnerIterations() const;
\n+
85
\n+
\n+
87 void print(const std::string& str = "") const {
\n+
88 std::cout << str << "LevenbergMarquardtOptimizer" << std::endl;
\n+
89 this->params_.print(" parameters:\\n");
\n+
90 }
\n+
\n+
91
\n+
93
\n+
96
\n+
101 GaussianFactorGraph::shared_ptr iterate() override;
\n+
102
\n+
\n+\n+
105 return params_;
\n+
106 }
\n+
\n+
107
\n+
108 void writeLogFile(double currentError);
\n+
109
\n+
111 virtual GaussianFactorGraph::shared_ptr linearize() const;
\n+
112
\n+
114 GaussianFactorGraph buildDampedSystem(const GaussianFactorGraph& linear,
\n+
115 const VectorValues& sqrtHessianDiagonal) const;
\n+
116
\n+
118 bool tryLambda(const GaussianFactorGraph& linear, const VectorValues& sqrtHessianDiagonal);
\n
119
\n-
123 GTSAM_EXPORT Vector conjugateGradientDescent(
\n-
124 const Matrix& A,
\n-
125 const Vector& b,
\n-
126 const Vector& x,
\n-
127 const ConjugateGradientParameters & parameters);
\n-
128
\n-
132 GTSAM_EXPORT VectorValues steepestDescent(
\n-
133 const GaussianFactorGraph& fg,
\n-
134 const VectorValues& x,
\n-
135 const ConjugateGradientParameters & parameters);
\n-
136
\n-\n-
141 const GaussianFactorGraph& fg,
\n-
142 const VectorValues& x,
\n-
143 const ConjugateGradientParameters & parameters);
\n-
144
\n-
145
\n-
146} // namespace gtsam
\n-
147
\n-\n-
149
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
Factor Graph Values.
\n-
Implementation of Conjugate Gradient solver for a linear system.
\n-
Iterative methods, template implementation.
\n+
121
\n+
122protected:
\n+
123
\n+
\n+
125 const NonlinearOptimizerParams& _params() const override {
\n+
126 return params_;
\n+
127 }
\n+
\n+
128};
\n+
\n+
129
\n+
130}
\n+
Factor Graph Values.
\n+
Base class and parameters for nonlinear optimization algorithms.
\n+
Parameters for Levenberg-Marquardt trust-region scheme.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
V conjugateGradients(const S &Ab, V x, const ConjugateGradientParameters &parameters, bool steepest)
Method of conjugate gradients (CG) template "System" class S needs gradient(S,v), e=S*v,...
Definition iterative-inl.h:125
\n-
Vector conjugateGradientDescent(const System &Ab, const Vector &x, const ConjugateGradientParameters &parameters)
Method of conjugate gradients (CG), System version.
Definition iterative.cpp:45
\n-
parameters for the conjugate gradient method
Definition ConjugateGradientSolver.h:29
\n+
Definition Ordering.h:34
\n
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
Helper class encapsulating the combined system |Ax-b_|^2 Needed to run Conjugate Gradients on matrice...
Definition iterative.h:44
\n-
Vector operator*(const Vector &x) const
Apply operator A.
Definition iterative.h:78
\n-
const Matrix & A() const
Access A matrix.
Definition iterative.h:57
\n-
void multiplyInPlace(const Vector &x, Vector &e) const
Apply operator A in place.
Definition iterative.h:83
\n-
const Vector & b() const
Access b vector.
Definition iterative.h:60
\n-
Vector gradient(const Vector &x) const
gradient of objective function 0.5*|Ax-b_|^2 at x = A_'*(Ax-b_)
Definition iterative.h:73
\n-
void transposeMultiplyAdd(double alpha, const Vector &e, Vector &x) const
x += alpha* A'*e
Definition iterative.h:88
\n-
Vector operator^(const Vector &e) const
Apply operator A'*e.
Definition iterative.h:63
\n-
parameters for iterative linear solvers
Definition IterativeSolver.h:44
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
This class performs Levenberg-Marquardt nonlinear optimization.
Definition LevenbergMarquardtOptimizer.h:35
\n+
~LevenbergMarquardtOptimizer() override
Virtual destructor.
Definition LevenbergMarquardtOptimizer.h:72
\n+
const LevenbergMarquardtParams & params() const
Read-only access the parameters.
Definition LevenbergMarquardtOptimizer.h:104
\n+
const NonlinearOptimizerParams & _params() const override
Access the parameters (base class version)
Definition LevenbergMarquardtOptimizer.h:125
\n+
const LevenbergMarquardtParams params_
LM parameters.
Definition LevenbergMarquardtOptimizer.h:38
\n+
void print(const std::string &str="") const
print
Definition LevenbergMarquardtOptimizer.h:87
\n+
Parameters for Levenberg-Marquardt optimization.
Definition LevenbergMarquardtParams.h:35
\n+
Definition NonlinearFactorGraph.h:55
\n+
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition NonlinearOptimizer.h:75
\n+
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,183 +1,157 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-iterative.h\n+LevenbergMarquardtOptimizer.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-36 template\n-37 V _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bs(const S& Ab, V x,\n-38 const ConjugateGradientParameters ¶meters, bool steepest = false);\n-39\n-_\b4_\b4 class GTSAM_EXPORT _\bS_\by_\bs_\bt_\be_\bm {\n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+26#include \n+27\n+28class NonlinearOptimizerMoreOptimizationTest;\n+29\n+30namespace _\bg_\bt_\bs_\ba_\bm {\n+31\n+_\b3_\b5class GTSAM_EXPORT _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n+36\n+37protected:\n+_\b3_\b8 const _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs _\bp_\ba_\br_\ba_\bm_\bs_\b_;\n+39 boost::posix_time::ptime startTime_;\n+40\n+41 void initTime();\n+42\n+43public:\n+44 typedef boost::shared_ptr shared_ptr;\n 45\n-46 private:\n-47 const Matrix& A_;\n-48 const Vector& b_;\n-49\n-50 public:\n-51\n-52 _\bS_\by_\bs_\bt_\be_\bm(const Matrix& A, const Vector& b) :\n-53 A_(A), b_(b) {\n-54 }\n-55\n-_\b5_\b7 const Matrix& _\bA() const { return A_; }\n-58\n-_\b6_\b0 const Vector& _\bb() const { return b_; }\n-61\n-_\b6_\b3 Vector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b^(const Vector& e) const {\n-64 return A_ ^ e;\n-65 }\n-66\n-70 void _\bp_\br_\bi_\bn_\bt (const std::string& s = \"System\") const;\n-71\n-_\b7_\b3 Vector _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt(const Vector& x) const {\n-74 return A() ^ (A() * x - b());\n-75 }\n+48\n+57 _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n+initialValues,\n+58 const _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs& params = _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs());\n+59\n+67 _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n+initialValues,\n+68 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n+69 const _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs& params = _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs());\n+70\n+_\b7_\b2 _\b~_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br() override {\n+73 }\n+74\n 76\n-_\b7_\b8 Vector _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(const Vector& x) const {\n-79 return A() * x;\n-80 }\n-81\n-_\b8_\b3 void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bI_\bn_\bP_\bl_\ba_\bc_\be(const Vector& x, Vector& e) const {\n-84 e = A() * x;\n-85 }\n-86\n-_\b8_\b8 void _\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bA_\bd_\bd(double alpha, const Vector& e, Vector& x) const {\n-89 x += alpha * A().transpose() * e;\n+79\n+81 double lambda() const;\n+82\n+84 int getInnerIterations() const;\n+85\n+_\b8_\b7 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const {\n+88 std::cout << str << \"LevenbergMarquardtOptimizer\" << std::endl;\n+89 this->params_.print(\" parameters:\\n\");\n 90 }\n-91 };\n-92\n-_\b9_\b6 GTSAM_EXPORT Vector steepestDescent(\n-97 const _\bS_\by_\bs_\bt_\be_\bm& Ab,\n-98 const Vector& x,\n-99 const _\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n-100\n-104 GTSAM_EXPORT Vector _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt(\n-105 const _\bS_\by_\bs_\bt_\be_\bm& Ab,\n-106 const Vector& x,\n-107 const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n-108\n-114 GTSAM_EXPORT Vector steepestDescent(\n-115 const Matrix& A,\n-116 const Vector& b,\n-117 const Vector& x,\n-118 const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n+91\n+93\n+96\n+101 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br iterate() override;\n+102\n+_\b1_\b0_\b4 const _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs& _\bp_\ba_\br_\ba_\bm_\bs() const {\n+105 return params_;\n+106 }\n+107\n+108 void writeLogFile(double currentError);\n+109\n+111 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br linearize() const;\n+112\n+114 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh buildDampedSystem(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& linear,\n+115 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& sqrtHessianDiagonal) const;\n+116\n+118 bool tryLambda(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& linear, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs&\n+sqrtHessianDiagonal);\n 119\n-123 GTSAM_EXPORT Vector _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt(\n-124 const Matrix& A,\n-125 const Vector& b,\n-126 const Vector& x,\n-127 const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n-128\n-132 GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs steepestDescent(\n-133 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& fg,\n-134 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n-135 const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n-136\n-140 GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt(\n-141 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& fg,\n-142 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n-143 const _\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs & parameters);\n-144\n-145\n-146} // namespace gtsam\n-147\n-148#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b-_\bi_\bn_\bl_\b._\bh>\n-149\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n+121\n+122protected:\n+123\n+_\b1_\b2_\b5 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& _\b__\bp_\ba_\br_\ba_\bm_\bs() const override {\n+126 return params_;\n+127 }\n+128};\n+129\n+130}\n _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n Factor Graph Values.\n-_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n-Implementation of Conjugate Gradient solver for a linear system.\n-_\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b-_\bi_\bn_\bl_\b._\bh\n-Iterative methods, template implementation.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+Base class and parameters for nonlinear optimization algorithms.\n+_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+Parameters for Levenberg-Marquardt trust-region scheme.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bs\n-V conjugateGradients(const S &Ab, V x, const ConjugateGradientParameters\n-¶meters, bool steepest)\n-Method of conjugate gradients (CG) template \"System\" class S needs gradient\n-(S,v), e=S*v,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative-inl.h:125\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bD_\be_\bs_\bc_\be_\bn_\bt\n-Vector conjugateGradientDescent(const System &Ab, const Vector &x, const\n-ConjugateGradientParameters ¶meters)\n-Method of conjugate gradients (CG), System version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.cpp:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-parameters for the conjugate gradient method\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ConjugateGradientSolver.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm\n-Helper class encapsulating the combined system |Ax-b_|^2 Needed to run\n-Conjugate Gradients on matrice...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n-Vector operator*(const Vector &x) const\n-Apply operator A.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bA\n-const Matrix & A() const\n-Access A matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bI_\bn_\bP_\bl_\ba_\bc_\be\n-void multiplyInPlace(const Vector &x, Vector &e) const\n-Apply operator A in place.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bb\n-const Vector & b() const\n-Access b vector.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt\n-Vector gradient(const Vector &x) const\n-gradient of objective function 0.5*|Ax-b_|^2 at x = A_'*(Ax-b_)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bt_\br_\ba_\bn_\bs_\bp_\bo_\bs_\be_\bM_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bA_\bd_\bd\n-void transposeMultiplyAdd(double alpha, const Vector &e, Vector &x) const\n-x += alpha* A'*e\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bs_\bt_\be_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b^\n-Vector operator^(const Vector &e) const\n-Apply operator A'*e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn iterative.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs\n-parameters for iterative linear solvers\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn IterativeSolver.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n VectorValues represents a collection of vector-valued variables associated each\n with a unique integer...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+This class performs Levenberg-Marquardt nonlinear optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b~_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+~LevenbergMarquardtOptimizer() override\n+Virtual destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs\n+const LevenbergMarquardtParams & params() const\n+Read-only access the parameters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\b__\bp_\ba_\br_\ba_\bm_\bs\n+const NonlinearOptimizerParams & _params() const override\n+Access the parameters (base class version)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:125\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs_\b_\n+const LevenbergMarquardtParams params_\n+LM parameters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &str=\"\") const\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtOptimizer.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bP_\ba_\br_\ba_\bm_\bs\n+Parameters for Levenberg-Marquardt optimization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn LevenbergMarquardtParams.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n+This is the abstract interface for classes that can optimize for the maximum-\n+likelihood estimate of a...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n+The common parameters for Nonlinear optimizers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bl_\bi_\bn_\be_\ba_\br\n- * _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bL_\be_\bv_\be_\bn_\bb_\be_\br_\bg_\bM_\ba_\br_\bq_\bu_\ba_\br_\bd_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00902_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01118_source.html", "comments": ["Files 82% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AttitudeFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/WhiteNoiseFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
AttitudeFactor.h
\n+
WhiteNoiseFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-\n-
22#include <gtsam/geometry/Unit3.h>
\n-
23
\n-
24namespace gtsam {
\n+
20#pragma once
\n+
21
\n+\n+\n+
24#include <cmath>
\n
25
\n-
\n-\n-
35
\n-
36protected:
\n-
37
\n-
38 Unit3 nZ_, bRef_;
\n-
39
\n-
40public:
\n-
41
\n-
\n-\n-
44 }
\n-
\n-
45
\n-
\n-
51 AttitudeFactor(const Unit3& nZ, const Unit3& bRef = Unit3(0, 0, 1)) :
\n-
52 nZ_(nZ), bRef_(bRef) {
\n-
53 }
\n-
\n-
54
\n-
56 Vector attitudeError(const Rot3& p,
\n-
57 OptionalJacobian<2,3> H = boost::none) const;
\n-
58
\n-
59 const Unit3& nZ() const {
\n-
60 return nZ_;
\n-
61 }
\n-
62 const Unit3& bRef() const {
\n-
63 return bRef_;
\n-
64 }
\n-
65
\n-\n-
68 template<class ARCHIVE>
\n-
69 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
70 ar & boost::serialization::make_nvp("nZ_", nZ_);
\n-
71 ar & boost::serialization::make_nvp("bRef_", bRef_);
\n-
72 }
\n-
73};
\n-
\n-
74
\n-
\n-
79class GTSAM_EXPORT Rot3AttitudeFactor: public NoiseModelFactorN<Rot3>, public AttitudeFactor {
\n-
80
\n-\n-
82
\n-
83public:
\n-
84
\n-
86 typedef boost::shared_ptr<Rot3AttitudeFactor> shared_ptr;
\n+
26namespace gtsam {
\n+
27
\n+
28 const double logSqrt2PI = log(std::sqrt(2.0 * M_PI));
\n+
29
\n+
\n+\n+
42
\n+
43 private:
\n+
44
\n+
45 double z_;
\n+
46
\n+
47 Key meanKey_;
\n+
48 Key precisionKey_;
\n+
49
\n+
50 typedef NonlinearFactor Base;
\n+
51
\n+
52 public:
\n+
53
\n+
\n+
61 static double f(double z, double u, double p) {
\n+
62 return logSqrt2PI - 0.5 * log(p) + 0.5 * (z - u) * (z - u) * p;
\n+
63 }
\n+
\n+
64
\n+
\n+
75 static HessianFactor::shared_ptr linearize(double z, double u, double p,
\n+
76 Key j1, Key j2) {
\n+
77 double e = u - z, e2 = e * e;
\n+
78 double c = 2 * logSqrt2PI - log(p) + e2 * p;
\n+
79 Vector g1 = (Vector(1) << -e * p).finished();
\n+
80 Vector g2 = (Vector(1) << 0.5 / p - 0.5 * e2).finished();
\n+
81 Matrix G11 = (Matrix(1, 1) << p).finished();
\n+
82 Matrix G12 = (Matrix(1, 1) << e).finished();
\n+
83 Matrix G22 = (Matrix(1, 1) << 0.5 / (p * p)).finished();
\n+\n+
85 new HessianFactor(j1, j2, G11, G12, g1, G22, g2, c));
\n+
86 }
\n+
\n
87
\n-\n
90
\n-
\n-\n-
93 }
\n-
\n-
94
\n-
95 ~Rot3AttitudeFactor() override {
\n-
96 }
\n-
97
\n+
\n+
96 WhiteNoiseFactor(double z, Key meanKey, Key precisionKey) :
\n+
97 Base(), z_(z), meanKey_(meanKey), precisionKey_(precisionKey) {
\n+
98 }
\n+
\n+
99
\n+
103
\n
\n-
105 Rot3AttitudeFactor(Key key, const Unit3& nZ, const SharedNoiseModel& model,
\n-
106 const Unit3& bRef = Unit3(0, 0, 1)) :
\n-
107 Base(model, key), AttitudeFactor(nZ, bRef) {
\n-
108 }
\n-
\n-
109
\n-
\n-
111 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
112 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
113 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
114 }
\n-
\n-
115
\n-
117 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
118 DefaultKeyFormatter) const override;
\n-
119
\n-
121 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n+
105 ~WhiteNoiseFactor() override {
\n+
106 }
\n+
\n+
107
\n+
111
\n+
\n+
113 void print(const std::string& p = "WhiteNoiseFactor",
\n+
114 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n+
115 Base::print(p, keyFormatter);
\n+
116 std::cout << p + ".z: " << z_ << std::endl;
\n+
117 }
\n+
\n+
118
\n
122
\n
\n-
124 Vector evaluateError(const Rot3& nRb, //
\n-
125 boost::optional<Matrix&> H = boost::none) const override {
\n-
126 return attitudeError(nRb, H);
\n-
127 }
\n-
\n-
128
\n-
129private:
\n-
130
\n-
132 friend class boost::serialization::access;
\n-
133 template<class ARCHIVE>
\n-
134 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
135 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
136 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n-
137 boost::serialization::base_object<Base>(*this));
\n-
138 ar & boost::serialization::make_nvp("AttitudeFactor",
\n-
139 boost::serialization::base_object<AttitudeFactor>(*this));
\n-
140 }
\n-
141
\n-
142public:
\n-\n-
144};
\n-
\n-
145
\n-
147template<> struct traits<Rot3AttitudeFactor> : public Testable<Rot3AttitudeFactor> {};
\n-
148
\n-
\n-
153class GTSAM_EXPORT Pose3AttitudeFactor: public NoiseModelFactorN<Pose3>,
\n-
154 public AttitudeFactor {
\n-
155
\n-\n-
157
\n-
158public:
\n-
159
\n-
161 typedef boost::shared_ptr<Pose3AttitudeFactor> shared_ptr;
\n-
162
\n-\n+
124 size_t dim() const override {
\n+
125 return 2;
\n+
126 }
\n+
\n+
127
\n+
\n+
129 double error(const Values& x) const override {
\n+
130 return f(z_, x.at<double>(meanKey_), x.at<double>(precisionKey_));
\n+
131 }
\n+
\n+
132
\n+
\n+
140 virtual Vector unwhitenedError(const Values& x) const {
\n+
141 return (Vector(1) << std::sqrt(2 * error(x))).finished();
\n+
142 }
\n+
\n+
143
\n+
148// virtual IndexFactor::shared_ptr symbolic(const Ordering& ordering) const {
\n+
149// const Key j1 = ordering[meanKey_], j2 = ordering[precisionKey_];
\n+
150// return IndexFactor::shared_ptr(new IndexFactor(j1, j2));
\n+
151// }
\n+
152
\n+
156
\n+
\n+
158 boost::shared_ptr<GaussianFactor> linearize(const Values& x) const override {
\n+
159 double u = x.at<double>(meanKey_);
\n+
160 double p = x.at<double>(precisionKey_);
\n+
161 Key j1 = meanKey_;
\n+
162 Key j2 = precisionKey_;
\n+
163 return linearize(z_, u, p, j1, j2);
\n+
164 }
\n+
\n
165
\n-
\n-\n-
168 }
\n-
\n-
169
\n-
170 ~Pose3AttitudeFactor() override {
\n-
171 }
\n-
172
\n-
\n-
180 Pose3AttitudeFactor(Key key, const Unit3& nZ, const SharedNoiseModel& model,
\n-
181 const Unit3& bRef = Unit3(0, 0, 1)) :
\n-
182 Base(model, key), AttitudeFactor(nZ, bRef) {
\n-
183 }
\n-
\n-
184
\n-
\n-
186 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
187 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
188 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
189 }
\n-
\n-
190
\n-
192 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
193 DefaultKeyFormatter) const override;
\n-
194
\n-
196 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n-
197
\n-
\n-
199 Vector evaluateError(const Pose3& nTb, //
\n-
200 boost::optional<Matrix&> H = boost::none) const override {
\n-
201 Vector e = attitudeError(nTb.rotation(), H);
\n-
202 if (H) {
\n-
203 Matrix H23 = *H;
\n-
204 *H = Matrix::Zero(2,6);
\n-
205 H->block<2,3>(0,0) = H23;
\n-
206 }
\n-
207 return e;
\n-
208 }
\n-
\n-
209
\n-
210private:
\n-
211
\n-
213 friend class boost::serialization::access;
\n-
214 template<class ARCHIVE>
\n-
215 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
216 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
217 ar & boost::serialization::make_nvp("NoiseModelFactor1",
\n-
218 boost::serialization::base_object<Base>(*this));
\n-
219 ar & boost::serialization::make_nvp("AttitudeFactor",
\n-
220 boost::serialization::base_object<AttitudeFactor>(*this));
\n-
221 }
\n-
222
\n-
223public:
\n-\n-
225};
\n-
\n-
226
\n-
228template<> struct traits<Pose3AttitudeFactor> : public Testable<Pose3AttitudeFactor> {};
\n-
229
\n-
230}
\n-
231
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
3D Pose
\n-
Non-linear factor base classes.
\n+
166 // TODO: Frank commented this out for now, can it go?
\n+
167 // /// @return a deep copy of this factor
\n+
168 // gtsam::NonlinearFactor::shared_ptr clone() const override {
\n+
169 // return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n+
170 // gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n+
171
\n+
173
\n+
174 };
\n+
\n+
175// WhiteNoiseFactor
\n+
176
\n+
177}// namespace gtsam
\n+
178
\n+
Contains the HessianFactor class, a general quadratic factor.
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
const double logSqrt2PI
constant needed below
Definition WhiteNoiseFactor.h:28
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const
get rotation
Definition Pose3.cpp:315
\n-
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n-
Base class for prior on attitude Example:
Definition AttitudeFactor.h:34
\n-
Vector attitudeError(const Rot3 &p, OptionalJacobian< 2, 3 > H=boost::none) const
vector of errors
Definition AttitudeFactor.cpp:26
\n-
Unit3 bRef_
Position measurement in.
Definition AttitudeFactor.h:38
\n-
AttitudeFactor(const Unit3 &nZ, const Unit3 &bRef=Unit3(0, 0, 1))
Constructor.
Definition AttitudeFactor.h:51
\n-
friend class boost::serialization::access
Serialization function.
Definition AttitudeFactor.h:67
\n-
AttitudeFactor()
default constructor - only use for serialization
Definition AttitudeFactor.h:43
\n-
Version of AttitudeFactor for Rot3.
Definition AttitudeFactor.h:79
\n-
Vector evaluateError(const Rot3 &nRb, boost::optional< Matrix & > H=boost::none) const override
vector of errors
Definition AttitudeFactor.h:124
\n-
Rot3AttitudeFactor()
default constructor - only use for serialization
Definition AttitudeFactor.h:92
\n-
boost::shared_ptr< Rot3AttitudeFactor > shared_ptr
shorthand for a smart pointer to a factor
Definition AttitudeFactor.h:86
\n-
Rot3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model, const Unit3 &bRef=Unit3(0, 0, 1))
Constructor.
Definition AttitudeFactor.h:105
\n-
Rot3AttitudeFactor This
Typedef to this class.
Definition AttitudeFactor.h:89
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition AttitudeFactor.h:111
\n-
Version of AttitudeFactor for Pose3.
Definition AttitudeFactor.h:154
\n-
Vector evaluateError(const Pose3 &nTb, boost::optional< Matrix & > H=boost::none) const override
vector of errors
Definition AttitudeFactor.h:199
\n-
boost::shared_ptr< Pose3AttitudeFactor > shared_ptr
shorthand for a smart pointer to a factor
Definition AttitudeFactor.h:161
\n-
Pose3AttitudeFactor This
Typedef to this class.
Definition AttitudeFactor.h:164
\n-
Pose3AttitudeFactor()
default constructor - only use for serialization
Definition AttitudeFactor.h:167
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition AttitudeFactor.h:186
\n-
Pose3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model, const Unit3 &bRef=Unit3(0, 0, 1))
Constructor.
Definition AttitudeFactor.h:180
\n+
A Gaussian factor using the canonical parameters (information form)
Definition HessianFactor.h:101
\n+
boost::shared_ptr< This > shared_ptr
A shared_ptr to this class.
Definition HessianFactor.h:110
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition NonlinearFactor.cpp:37
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n+
Binary factor to estimate parameters of zero-mean Gaussian white noise.
Definition WhiteNoiseFactor.h:41
\n+
boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override
linearize returns a Hessianfactor that is an approximation of error(p)
Definition WhiteNoiseFactor.h:158
\n+
~WhiteNoiseFactor() override
Destructor.
Definition WhiteNoiseFactor.h:105
\n+
static HessianFactor::shared_ptr linearize(double z, double u, double p, Key j1, Key j2)
linearize returns a Hessianfactor that approximates error Hessian is
Definition WhiteNoiseFactor.h:75
\n+
void print(const std::string &p="WhiteNoiseFactor", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
Print.
Definition WhiteNoiseFactor.h:113
\n+
WhiteNoiseFactor(double z, Key meanKey, Key precisionKey)
Construct from measurement.
Definition WhiteNoiseFactor.h:96
\n+
virtual Vector unwhitenedError(const Values &x) const
Vector of errors "unwhitened" does not make sense for this factor What is meant typically is only "e"...
Definition WhiteNoiseFactor.h:140
\n+
static double f(double z, double u, double p)
negative log likelihood as a function of mean and precision
Definition WhiteNoiseFactor.h:61
\n+
double error(const Values &x) const override
Calculate the error of the factor, typically equal to log-likelihood.
Definition WhiteNoiseFactor.h:129
\n+
size_t dim() const override
get the dimension of the factor (number of rows on linearization)
Definition WhiteNoiseFactor.h:124
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,332 +1,204 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-AttitudeFactor.h\n+WhiteNoiseFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-22#include \n-23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+24#include \n 25\n-_\b3_\b4class _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br {\n-35\n-36protected:\n-37\n-_\b3_\b8 _\bU_\bn_\bi_\bt_\b3 nZ_, _\bb_\bR_\be_\bf_\b_;\n-39\n-40public:\n-41\n-_\b4_\b3 _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br() {\n-44 }\n-45\n-_\b5_\b1 _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br(const _\bU_\bn_\bi_\bt_\b3& nZ, const _\bU_\bn_\bi_\bt_\b3& bRef = _\bU_\bn_\bi_\bt_\b3(0, 0, 1)) :\n-52 nZ_(nZ), _\bb_\bR_\be_\bf_\b_(bRef) {\n-53 }\n-54\n-56 Vector _\ba_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b3& p,\n-57 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b3_\b> H = boost::none) const;\n-58\n-59 const _\bU_\bn_\bi_\bt_\b3& nZ() const {\n-60 return nZ_;\n-61 }\n-62 const Unit3& bRef() const {\n-63 return _\bb_\bR_\be_\bf_\b_;\n-64 }\n-65\n-_\b6_\b7 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-68 template\n-69 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-70 ar & boost::serialization::make_nvp(\"nZ_\", nZ_);\n-71 ar & boost::serialization::make_nvp(\"bRef_\", _\bb_\bR_\be_\bf_\b_);\n-72 }\n-73};\n-74\n-_\b7_\b9class GTSAM_EXPORT _\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN, public\n-_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br {\n-80\n-81 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bR_\bo_\bt_\b3_\b> _\bB_\ba_\bs_\be;\n-82\n-83public:\n-84\n-_\b8_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+_\b2_\b8 const double _\bl_\bo_\bg_\bS_\bq_\br_\bt_\b2_\bP_\bI = log(std::sqrt(2.0 * M_PI));\n+29\n+_\b4_\b1 class _\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n+42\n+43 private:\n+44\n+45 double z_;\n+46\n+47 _\bK_\be_\by meanKey_;\n+48 _\bK_\be_\by precisionKey_;\n+49\n+50 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n+51\n+52 public:\n+53\n+_\b6_\b1 static double _\bf(double z, double u, double p) {\n+62 return _\bl_\bo_\bg_\bS_\bq_\br_\bt_\b2_\bP_\bI - 0.5 * log(p) + 0.5 * (z - u) * (z - u) * p;\n+63 }\n+64\n+_\b7_\b5 static _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(double z, double u, double p,\n+76 _\bK_\be_\by j1, _\bK_\be_\by j2) {\n+77 double e = u - z, e2 = e * e;\n+78 double c = 2 * _\bl_\bo_\bg_\bS_\bq_\br_\bt_\b2_\bP_\bI - log(p) + e2 * p;\n+79 Vector g1 = (Vector(1) << -e * p).finished();\n+80 Vector g2 = (Vector(1) << 0.5 / p - 0.5 * e2).finished();\n+81 Matrix G11 = (Matrix(1, 1) << p).finished();\n+82 Matrix G12 = (Matrix(1, 1) << e).finished();\n+83 Matrix G22 = (Matrix(1, 1) << 0.5 / (p * p)).finished();\n+84 return _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br(\n+85 new _\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(j1, j2, G11, G12, g1, G22, g2, c));\n+86 }\n 87\n-_\b8_\b9 typedef _\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n 90\n-_\b9_\b2 _\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br() {\n-93 }\n-94\n-95 _\b~_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br() override {\n-96 }\n-97\n-_\b1_\b0_\b5 _\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, const _\bU_\bn_\bi_\bt_\b3& nZ, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model,\n-106 const _\bU_\bn_\bi_\bt_\b3& bRef = _\bU_\bn_\bi_\bt_\b3(0, 0, 1)) :\n-107 _\bB_\ba_\bs_\be(model, key), _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br(nZ, bRef) {\n-108 }\n-109\n-_\b1_\b1_\b1 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-112 return boost::static_pointer_cast(\n-113 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n-114 }\n-115\n-117 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-118 DefaultKeyFormatter) const override;\n-119\n-121 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n-override;\n+_\b9_\b6 _\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br(double z, _\bK_\be_\by meanKey, _\bK_\be_\by precisionKey) :\n+97 _\bB_\ba_\bs_\be(), z_(z), meanKey_(meanKey), precisionKey_(precisionKey) {\n+98 }\n+99\n+103\n+_\b1_\b0_\b5 _\b~_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br() override {\n+106 }\n+107\n+111\n+_\b1_\b1_\b3 void _\bp_\br_\bi_\bn_\bt(const std::string& p = \"WhiteNoiseFactor\",\n+114 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n+115 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(p, keyFormatter);\n+116 std::cout << p + \".z: \" << z_ << std::endl;\n+117 }\n+118\n 122\n-_\b1_\b2_\b4 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bR_\bo_\bt_\b3& nRb, //\n-125 boost::optional H = boost::none) const override {\n-126 return attitudeError(nRb, H);\n-127 }\n-128\n-129private:\n-130\n-_\b1_\b3_\b2 friend class boost::serialization::access;\n-133 template\n-134 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-135 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n-compatibility\n-136 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n-137 boost::serialization::base_object(*this));\n-138 ar & boost::serialization::make_nvp(\"AttitudeFactor\",\n-139 boost::serialization::base_object(*this));\n-140 }\n-141\n-142public:\n-143 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-144};\n-145\n-_\b1_\b4_\b7template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br> : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-148\n-_\b1_\b5_\b3class GTSAM_EXPORT _\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN,\n-154 public _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br {\n-155\n-156 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b> _\bB_\ba_\bs_\be;\n-157\n-158public:\n-159\n-_\b1_\b6_\b1 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-162\n-_\b1_\b6_\b4 typedef _\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+_\b1_\b2_\b4 size_t _\bd_\bi_\bm() const override {\n+125 return 2;\n+126 }\n+127\n+_\b1_\b2_\b9 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& x) const override {\n+130 return _\bf(z_, x._\ba_\bt(meanKey_), x._\ba_\bt(precisionKey_));\n+131 }\n+132\n+_\b1_\b4_\b0 virtual Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs& x) const {\n+141 return (Vector(1) << std::sqrt(2 * _\be_\br_\br_\bo_\br(x))).finished();\n+142 }\n+143\n+148// virtual IndexFactor::shared_ptr symbolic(const Ordering& ordering) const\n+{\n+149// const Key j1 = ordering[meanKey_], j2 = ordering[precisionKey_];\n+150// return IndexFactor::shared_ptr(new IndexFactor(j1, j2));\n+151// }\n+152\n+156\n+_\b1_\b5_\b8 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs& x) const override\n+{\n+159 double u = x._\ba_\bt(meanKey_);\n+160 double p = x._\ba_\bt(precisionKey_);\n+161 _\bK_\be_\by j1 = meanKey_;\n+162 _\bK_\be_\by j2 = precisionKey_;\n+163 return _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(z_, u, p, j1, j2);\n+164 }\n 165\n-_\b1_\b6_\b7 _\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br() {\n-168 }\n-169\n-170 _\b~_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br() override {\n-171 }\n-172\n-_\b1_\b8_\b0 _\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, const _\bU_\bn_\bi_\bt_\b3& nZ, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl&\n-model,\n-181 const _\bU_\bn_\bi_\bt_\b3& bRef = _\bU_\bn_\bi_\bt_\b3(0, 0, 1)) :\n-182 _\bB_\ba_\bs_\be(model, key), _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br(nZ, bRef) {\n-183 }\n-184\n-_\b1_\b8_\b6 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-187 return boost::static_pointer_cast(\n-188 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n-189 }\n-190\n-192 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-193 DefaultKeyFormatter) const override;\n-194\n-196 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol = 1e-9) const\n-override;\n-197\n-_\b1_\b9_\b9 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const _\bP_\bo_\bs_\be_\b3& nTb, //\n-200 boost::optional H = boost::none) const override {\n-201 Vector e = attitudeError(nTb._\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn(), H);\n-202 if (H) {\n-203 Matrix H23 = *H;\n-204 *H = Matrix::Zero(2,6);\n-205 H->block<2,3>(0,0) = H23;\n-206 }\n-207 return e;\n-208 }\n-209\n-210private:\n-211\n-_\b2_\b1_\b3 friend class boost::serialization::access;\n-214 template\n-215 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-216 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n-compatibility\n-217 ar & boost::serialization::make_nvp(\"NoiseModelFactor1\",\n-218 boost::serialization::base_object(*this));\n-219 ar & boost::serialization::make_nvp(\"AttitudeFactor\",\n-220 boost::serialization::base_object(*this));\n-221 }\n-222\n-223public:\n-224 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-225};\n-226\n-_\b2_\b2_\b8template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br> : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-229\n-230}\n-231\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n+166 // TODO: Frank commented this out for now, can it go?\n+167 // /// @return a deep copy of this factor\n+168 // gtsam::NonlinearFactor::shared_ptr clone() const override {\n+169 // return boost::static_pointer_cast(\n+170 // gtsam::NonlinearFactor::shared_ptr(new This(*this))); }\n+171\n+173\n+174 };\n+175// WhiteNoiseFactor\n+176\n+177}// namespace gtsam\n+178\n+_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Contains the HessianFactor class, a general quadratic factor.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\bg_\bS_\bq_\br_\bt_\b2_\bP_\bI\n+const double logSqrt2PI\n+constant needed below\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\b:_\b:_\br_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-const Rot3 & rotation(OptionalJacobian< 3, 6 > Hself=boost::none) const\n-get rotation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.cpp:315\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n-symbol GTSAM_USE_QUATERNIO...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n-Represents a 3D point on a unit sphere.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Base class for prior on attitude Example:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bE_\br_\br_\bo_\br\n-Vector attitudeError(const Rot3 &p, OptionalJacobian< 2, 3 > H=boost::none)\n-const\n-vector of errors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.cpp:26\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bb_\bR_\be_\bf_\b_\n-Unit3 bRef_\n-Position measurement in.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-AttitudeFactor(const Unit3 &nZ, const Unit3 &bRef=Unit3(0, 0, 1))\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-AttitudeFactor()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Version of AttitudeFactor for Rot3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Rot3 &nRb, boost::optional< Matrix & > H=boost::\n-none) const override\n-vector of errors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:124\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Rot3AttitudeFactor()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:92\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< Rot3AttitudeFactor > shared_ptr\n-shorthand for a smart pointer to a factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Rot3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model,\n-const Unit3 &bRef=Unit3(0, 0, 1))\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:105\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-Rot3AttitudeFactor This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Version of AttitudeFactor for Pose3.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:154\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const Pose3 &nTb, boost::optional< Matrix & > H=boost::\n-none) const override\n-vector of errors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:199\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< Pose3AttitudeFactor > shared_ptr\n-shorthand for a smart pointer to a factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-Pose3AttitudeFactor This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:164\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Pose3AttitudeFactor()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:167\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bP_\bo_\bs_\be_\b3_\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br\n-Pose3AttitudeFactor(Key key, const Unit3 &nZ, const SharedNoiseModel &model,\n-const Unit3 &bRef=Unit3(0, 0, 1))\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AttitudeFactor.h:180\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+A Gaussian factor using the canonical parameters (information form)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+A shared_ptr to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.h:110\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n+const ValueType at(Key j) const\n+Retrieve a variable by key j.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+Binary factor to estimate parameters of zero-mean Gaussian white noise.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianFactor > linearize(const Values &x) const override\n+linearize returns a Hessianfactor that is an approximation of error(p)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:158\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+~WhiteNoiseFactor() override\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+static HessianFactor::shared_ptr linearize(double z, double u, double p, Key\n+j1, Key j2)\n+linearize returns a Hessianfactor that approximates error Hessian is\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &p=\"WhiteNoiseFactor\", const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+Print.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br\n+WhiteNoiseFactor(double z, Key meanKey, Key precisionKey)\n+Construct from measurement.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n+virtual Vector unwhitenedError(const Values &x) const\n+Vector of errors \"unwhitened\" does not make sense for this factor What is meant\n+typically is only \"e\"...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf\n+static double f(double z, double u, double p)\n+negative log likelihood as a function of mean and precision\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &x) const override\n+Calculate the error of the factor, typically equal to log-likelihood.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:129\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+get the dimension of the factor (number of rows on linearization)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn WhiteNoiseFactor.h:124\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bA_\bt_\bt_\bi_\bt_\bu_\bd_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bW_\bh_\bi_\bt_\be_\bN_\bo_\bi_\bs_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00920.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01190.html", "comments": ["Files 92% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/GPSFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanGaugeFactor.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
GPSFactor.h File Reference
\n+
ShonanGaugeFactor.h File Reference
\n
\n
\n \n-

Header file for GPS factor. \n+

Factor used in Shonan Averaging to clamp down gauge freedom. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::GPSFactor
 Prior on position in a Cartesian frame. More...
 
class  gtsam::GPSFactor2
 Version of GPSFactor for NavState. More...
class  gtsam::ShonanGaugeFactor
 The ShonanGaugeFactor creates a constraint on a single SO(n) to avoid moving in the stabilizer. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Header file for GPS factor.

\n+

Factor used in Shonan Averaging to clamp down gauge freedom.

\n+
Date
March 2019
\n
Author
Frank Dellaert
\n-
Date
January 22, 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-GPSFactor.h File Reference\n-Header file for GPS factor. _\bM_\bo_\br_\be_\b._\b._\b.\n+ShonanGaugeFactor.h File Reference\n+Factor used in Shonan Averaging to clamp down gauge freedom. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br\n-\u00a0 Prior on position in a Cartesian frame. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-\u00a0 Version of _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br for _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br\n+\u00a0 The _\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br creates a constraint on a single SO(n) to avoid\n+ moving in the stabilizer. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Header file for GPS factor.\n+Factor used in Shonan Averaging to clamp down gauge freedom.\n+ Date\n+ March 2019\n Author\n Frank Dellaert\n- Date\n- January 22, 2014\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bG_\bP_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bs_\bf_\bm\n+ * _\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00923.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00911.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegrationParams.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/TangentPreintegration.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
PreintegrationParams.h File Reference
\n+
TangentPreintegration.h File Reference
\n
\n
\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::PreintegrationParams
 Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the constructor. More...
class  gtsam::TangentPreintegration
 Integrate on the 9D tangent space of the NavState manifold. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Luca Carlone
\n+
Author
Frank Dellaert
\n
\n-Stephen Williams
\n-
\n-Richard Roberts
\n-
\n-Vadim Indelman
\n-
\n-David Jensen
\n-
\n-Frank Dellaert
\n-
\n-Frank Dellaert
\n+Adam Bry
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,30 +1,24 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-PreintegrationParams.h File Reference\n+TangentPreintegration.h File Reference\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-\u00a0 Parameters for pre-integration: Usage: Create just a single Params and\n- pass a shared pointer to the constructor. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n+\u00a0 Integrate on the 9D tangent space of the _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be manifold. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n Author\n- Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n- Frank Dellaert\n Frank Dellaert\n+ Adam Bry\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * _\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00923_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00965_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
PreintegrationParams.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
17#pragma once
\n
18
\n-\n+\n
20#include <boost/make_shared.hpp>
\n
21
\n
22namespace gtsam {
\n
23
\n
\n \n \n@@ -182,22 +182,22 @@\n
83 ar & BOOST_SERIALIZATION_NVP(use2ndOrderCoriolis);
\n
84 ar & BOOST_SERIALIZATION_NVP(n_gravity);
\n
85 }
\n
86
\n
87#ifdef GTSAM_USE_QUATERNIONS
\n
88 // Align if we are using Quaternions
\n
89public:
\n-\n+\n
91#endif
\n
92};
\n
\n
93
\n
94} // namespace gtsam
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n
Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the c...
Definition PreintegratedRotation.h:31
\n
Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the c...
Definition PreintegrationParams.h:26
\n
Matrix3 accelerometerCovariance
Continuous-time "Covariance" of accelerometer The units for stddev are \u03c3 = m/s\u00b2/\u221aHz.
Definition PreintegrationParams.h:29
\n
bool use2ndOrderCoriolis
Whether to use second order Coriolis integration.
Definition PreintegrationParams.h:31
\n
PreintegrationParams()
Default constructor for serialization only.
Definition PreintegrationParams.h:35
\n@@ -205,13 +205,13 @@\n
PreintegrationParams(const Vector3 &n_gravity)
The Params constructor insists on getting the navigation frame gravity vector For convenience,...
Definition PreintegrationParams.h:44
\n
Matrix3 integrationCovariance
continuous-time "Covariance" describing integration uncertainty
Definition PreintegrationParams.h:30
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00929.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00953.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
Classes |\n Namespaces |\n Typedefs
\n
CombinedImuFactor.h File Reference
\n
\n
\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n \n \n \n \n@@ -152,13 +152,13 @@\n
\n Varun Agrawal
\n \n \n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00929_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00005_source.html", "comments": ["Files 84% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/CombinedImuFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/Lie.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
CombinedImuFactor.h
\n+
Lie.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
23#pragma once
\n-
24
\n-
25/* GTSAM includes */
\n-\n-\n-\n-
29#include <gtsam/base/Matrix.h>
\n-\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
34#ifdef GTSAM_TANGENT_PREINTEGRATION
\n-
35typedef TangentPreintegration PreintegrationType;
\n-
36#else
\n-
37typedef ManifoldPreintegration PreintegrationType;
\n-
38#endif
\n-
39
\n-
40/*
\n-
41 * If you are using the factor, please cite:
\n-
42 * L. Carlone, Z. Kira, C. Beall, V. Indelman, F. Dellaert, Eliminating
\n-
43 * conditionally independent sets in factor graphs: a unifying perspective based
\n-
44 * on smart factors, Int. Conf. on Robotics and Automation (ICRA), 2014.
\n-
45 *
\n-
46 * REFERENCES:
\n-
47 * [1] G.S. Chirikjian, "Stochastic Models, Information Theory, and Lie Groups",
\n-
48 * Volume 2, 2008.
\n-
49 * [2] T. Lupton and S.Sukkarieh, "Visual-Inertial-Aided Navigation for
\n-
50 * High-Dynamic Motion in Built Environments Without Initial Conditions",
\n-
51 * TRO, 28(1):61-76, 2012.
\n-
52 * [3] L. Carlone, S. Williams, R. Roberts, "Preintegrated IMU factor:
\n-
53 * Computation of the Jacobian Matrices", Tech. Report, 2013.
\n-
54 * Available in this repo as "PreintegratedIMUJacobians.pdf".
\n-
55 * [4] C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, IMU Preintegration on
\n-
56 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation,
\n-
57 * Robotics: Science and Systems (RSS), 2015.
\n-
58 */
\n-
59
\n-
\n-\n-\n-\n-\n-
66
\n-
\n-\n-
70 : biasAccCovariance(I_3x3),
\n-
71 biasOmegaCovariance(I_3x3),
\n-
72 biasAccOmegaInt(I_6x6) {}
\n-
\n-
73
\n-
\n-
75 PreintegrationCombinedParams(const Vector3& n_gravity) :
\n-
76 PreintegrationParams(n_gravity), biasAccCovariance(I_3x3),
\n-
77 biasOmegaCovariance(I_3x3), biasAccOmegaInt(I_6x6) {
\n-
78
\n-
79 }
\n-
\n-
80
\n-
81 // Default Params for a Z-down navigation frame, such as NED: gravity points along positive Z-axis
\n-
82 static boost::shared_ptr<PreintegrationCombinedParams> MakeSharedD(double g = 9.81) {
\n-
83 return boost::shared_ptr<PreintegrationCombinedParams>(new PreintegrationCombinedParams(Vector3(0, 0, g)));
\n-
84 }
\n-
85
\n-
86 // Default Params for a Z-up navigation frame, such as ENU: gravity points along negative Z-axis
\n-
87 static boost::shared_ptr<PreintegrationCombinedParams> MakeSharedU(double g = 9.81) {
\n-
88 return boost::shared_ptr<PreintegrationCombinedParams>(new PreintegrationCombinedParams(Vector3(0, 0, -g)));
\n-
89 }
\n-
90
\n-
91 void print(const std::string& s="") const override;
\n-
92 bool equals(const PreintegratedRotationParams& other, double tol) const override;
\n-
93
\n-
94 void setBiasAccCovariance(const Matrix3& cov) { biasAccCovariance=cov; }
\n-
95 void setBiasOmegaCovariance(const Matrix3& cov) { biasOmegaCovariance=cov; }
\n-
96 void setBiasAccOmegaInit(const Matrix6& cov) { biasAccOmegaInt=cov; }
\n-
97
\n-
98 const Matrix3& getBiasAccCovariance() const { return biasAccCovariance; }
\n-
99 const Matrix3& getBiasOmegaCovariance() const { return biasOmegaCovariance; }
\n-
100 const Matrix6& getBiasAccOmegaInit() const { return biasAccOmegaInt; }
\n-
101
\n-
102private:
\n-
103
\n-
105 friend class boost::serialization::access;
\n-
106 template <class ARCHIVE>
\n-
107 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
108 namespace bs = ::boost::serialization;
\n-
109 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegrationParams);
\n-
110 ar & BOOST_SERIALIZATION_NVP(biasAccCovariance);
\n-
111 ar & BOOST_SERIALIZATION_NVP(biasOmegaCovariance);
\n-
112 ar & BOOST_SERIALIZATION_NVP(biasAccOmegaInt);
\n+
24#pragma once
\n+
25
\n+
26#include <gtsam/base/Manifold.h>
\n+
27#include <gtsam/base/Group.h>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n+
36template <class Class, int N>
\n+
\n+
37struct LieGroup {
\n+
38
\n+
39 enum { dimension = N };
\n+
40 typedef OptionalJacobian<N, N> ChartJacobian;
\n+
41 typedef Eigen::Matrix<double, N, N> Jacobian;
\n+
42 typedef Eigen::Matrix<double, N, 1> TangentVector;
\n+
43
\n+
44 const Class & derived() const {
\n+
45 return static_cast<const Class&>(*this);
\n+
46 }
\n+
47
\n+
48 Class compose(const Class& g) const {
\n+
49 return derived() * g;
\n+
50 }
\n+
51
\n+
52 Class between(const Class& g) const {
\n+
53 return derived().inverse() * g;
\n+
54 }
\n+
55
\n+
56 Class compose(const Class& g, ChartJacobian H1,
\n+
57 ChartJacobian H2 = boost::none) const {
\n+
58 if (H1) *H1 = g.inverse().AdjointMap();
\n+
59 if (H2) *H2 = Eigen::Matrix<double, N, N>::Identity();
\n+
60 return derived() * g;
\n+
61 }
\n+
62
\n+
63 Class between(const Class& g, ChartJacobian H1,
\n+
64 ChartJacobian H2 = boost::none) const {
\n+
65 Class result = derived().inverse() * g;
\n+
66 if (H1) *H1 = - result.inverse().AdjointMap();
\n+
67 if (H2) *H2 = Eigen::Matrix<double, N, N>::Identity();
\n+
68 return result;
\n+
69 }
\n+
70
\n+
71 Class inverse(ChartJacobian H) const {
\n+
72 if (H) *H = - derived().AdjointMap();
\n+
73 return derived().inverse();
\n+
74 }
\n+
75
\n+
\n+
78 Class expmap(const TangentVector& v) const {
\n+
79 return compose(Class::Expmap(v));
\n+
80 }
\n+
\n+
81
\n+
\n+
84 TangentVector logmap(const Class& g) const {
\n+
85 return Class::Logmap(between(g));
\n+
86 }
\n+
\n+
87
\n+
\n+
89 Class expmap(const TangentVector& v, //
\n+
90 ChartJacobian H1, ChartJacobian H2 = boost::none) const {
\n+
91 Jacobian D_g_v;
\n+
92 Class g = Class::Expmap(v,H2 ? &D_g_v : 0);
\n+
93 Class h = compose(g); // derivatives inlined below
\n+
94 if (H1) *H1 = g.inverse().AdjointMap();
\n+
95 if (H2) *H2 = D_g_v;
\n+
96 return h;
\n+
97 }
\n+
\n+
98
\n+
\n+
100 TangentVector logmap(const Class& g, //
\n+
101 ChartJacobian H1, ChartJacobian H2 = boost::none) const {
\n+
102 Class h = between(g); // derivatives inlined below
\n+
103 Jacobian D_v_h;
\n+
104 TangentVector v = Class::Logmap(h, (H1 || H2) ? &D_v_h : 0);
\n+
105 if (H1) *H1 = - D_v_h * h.inverse().AdjointMap();
\n+
106 if (H2) *H2 = D_v_h;
\n+
107 return v;
\n+
108 }
\n+
\n+
109
\n+
\n+
111 static Class Retract(const TangentVector& v) {
\n+
112 return Class::ChartAtOrigin::Retract(v);
\n
113 }
\n+
\n
114
\n-
115public:
\n-\n-
117};
\n-
\n-
118
\n-
\n-\n-
130
\n-
131public:
\n-\n-
133
\n-
134 protected:
\n-
135 /* Covariance matrix of the preintegrated measurements
\n-
136 * COVARIANCE OF: [PreintROTATION PreintPOSITION PreintVELOCITY BiasAcc BiasOmega]
\n-
137 * (first-order propagation from *measurementCovariance*).
\n-
138 * PreintegratedCombinedMeasurements also include the biases and keep the correlation
\n-
139 * between the preintegrated measurements and the biases
\n-
140 */
\n-
141 Eigen::Matrix<double, 15, 15> preintMeasCov_;
\n-
142
\n-
143 friend class CombinedImuFactor;
\n-
144
\n-
145 public:
\n-
148
\n-
\n-\n-
151 preintMeasCov_.setZero();
\n-
152 }
\n-
\n-
153
\n-
\n-\n-
160 const boost::shared_ptr<Params>& p,
\n-\n-
162 : PreintegrationType(p, biasHat) {
\n-
163 preintMeasCov_.setZero();
\n-
164 }
\n+
\n+
116 static TangentVector LocalCoordinates(const Class& g) {
\n+
117 return Class::ChartAtOrigin::Local(g);
\n+
118 }
\n+
\n+
119
\n+
\n+
121 static Class Retract(const TangentVector& v, ChartJacobian H) {
\n+
122 return Class::ChartAtOrigin::Retract(v,H);
\n+
123 }
\n+
\n+
124
\n+
\n+
126 static TangentVector LocalCoordinates(const Class& g, ChartJacobian H) {
\n+
127 return Class::ChartAtOrigin::Local(g,H);
\n+
128 }
\n+
\n+
129
\n+
\n+
131 Class retract(const TangentVector& v) const {
\n+
132 return compose(Class::ChartAtOrigin::Retract(v));
\n+
133 }
\n+
\n+
134
\n+
\n+
136 TangentVector localCoordinates(const Class& g) const {
\n+
137 return Class::ChartAtOrigin::Local(between(g));
\n+
138 }
\n+
\n+
139
\n+
\n+
141 Class retract(const TangentVector& v, //
\n+
142 ChartJacobian H1, ChartJacobian H2 = boost::none) const {
\n+
143 Jacobian D_g_v;
\n+
144 Class g = Class::ChartAtOrigin::Retract(v, H2 ? &D_g_v : 0);
\n+
145 Class h = compose(g); // derivatives inlined below
\n+
146 if (H1) *H1 = g.inverse().AdjointMap();
\n+
147 if (H2) *H2 = D_g_v;
\n+
148 return h;
\n+
149 }
\n+
\n+
150
\n+
\n+
152 TangentVector localCoordinates(const Class& g, //
\n+
153 ChartJacobian H1, ChartJacobian H2 = boost::none) const {
\n+
154 Class h = between(g); // derivatives inlined below
\n+
155 Jacobian D_v_h;
\n+
156 TangentVector v = Class::ChartAtOrigin::Local(h, (H1 || H2) ? &D_v_h : 0);
\n+
157 if (H1) *H1 = - D_v_h * h.inverse().AdjointMap();
\n+
158 if (H2) *H2 = D_v_h;
\n+
159 return v;
\n+
160 }
\n+
\n+
161};
\n
\n+
162
\n+
164struct lie_group_tag: public manifold_tag, public group_tag {};
\n
165
\n-
\n-
171 PreintegratedCombinedMeasurements(const PreintegrationType& base, const Eigen::Matrix<double, 15, 15>& preintMeasCov)
\n-
172 : PreintegrationType(base),
\n-
173 preintMeasCov_(preintMeasCov) {
\n-
174 }
\n-
\n-
175
\n-\n-
178
\n-
180
\n-
183
\n-
185 void resetIntegration() override;
\n-
186
\n-
188 Params& p() const { return *boost::static_pointer_cast<Params>(this->p_); }
\n-
190
\n-
194 Matrix preintMeasCov() const { return preintMeasCov_; }
\n-
196
\n-
200 void print(const std::string& s = "Preintegrated Measurements:") const override;
\n-
202 bool equals(const PreintegratedCombinedMeasurements& expected,
\n-
203 double tol = 1e-9) const;
\n-
205
\n+
166namespace internal {
\n+
167
\n+
173template<class Class>
\n+
\n+
174struct LieGroupTraits: GetDimensionImpl<Class, Class::dimension> {
\n+\n+
176
\n+\n+
180 static Class Identity() { return Class::Identity();}
\n+
182
\n+
185 typedef Class ManifoldType;
\n+
186 enum { dimension = Class::dimension };
\n+
187 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
\n+
188 typedef OptionalJacobian<dimension, dimension> ChartJacobian;
\n+
189
\n+
190 static TangentVector Local(const Class& origin, const Class& other,
\n+
191 ChartJacobian Horigin = boost::none, ChartJacobian Hother = boost::none) {
\n+
192 return origin.localCoordinates(other, Horigin, Hother);
\n+
193 }
\n+
194
\n+
195 static Class Retract(const Class& origin, const TangentVector& v,
\n+
196 ChartJacobian Horigin = boost::none, ChartJacobian Hv = boost::none) {
\n+
197 return origin.retract(v, Horigin, Hv);
\n+
198 }
\n+
200
\n+
203 static TangentVector Logmap(const Class& m, ChartJacobian Hm = boost::none) {
\n+
204 return Class::Logmap(m, Hm);
\n+
205 }
\n
206
\n-
209
\n-
220 void integrateMeasurement(const Vector3& measuredAcc,
\n-
221 const Vector3& measuredOmega, const double dt) override;
\n-
222
\n-
224
\n-
225 private:
\n-
227 friend class boost::serialization::access;
\n-
228 template <class ARCHIVE>
\n-
229 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
230 namespace bs = ::boost::serialization;
\n-
231 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegrationType);
\n-
232 ar& BOOST_SERIALIZATION_NVP(preintMeasCov_);
\n-
233 }
\n-
234
\n-
235public:
\n-\n-
237};
\n-
\n-
238
\n-
\n-
258class GTSAM_EXPORT CombinedImuFactor: public NoiseModelFactorN<Pose3, Vector3, Pose3,
\n-
259 Vector3, imuBias::ConstantBias, imuBias::ConstantBias> {
\n-
260public:
\n-
261
\n-
262private:
\n-
263
\n-
264 typedef CombinedImuFactor This;
\n-
265 typedef NoiseModelFactorN<Pose3, Vector3, Pose3, Vector3,
\n-\n-
267
\n-\n-
269
\n-
270public:
\n+
207 static Class Expmap(const TangentVector& v, ChartJacobian Hv = boost::none) {
\n+
208 return Class::Expmap(v, Hv);
\n+
209 }
\n+
210
\n+
211 static Class Compose(const Class& m1, const Class& m2, //
\n+
212 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
213 return m1.compose(m2, H1, H2);
\n+
214 }
\n+
215
\n+
216 static Class Between(const Class& m1, const Class& m2, //
\n+
217 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {
\n+
218 return m1.between(m2, H1, H2);
\n+
219 }
\n+
220
\n+
221 static Class Inverse(const Class& m, //
\n+
222 ChartJacobian H = boost::none) {
\n+
223 return m.inverse(H);
\n+
224 }
\n+
226};
\n+
\n+
227
\n+
229template<class Class> struct LieGroup: LieGroupTraits<Class>, Testable<Class> {};
\n+
230
\n+
231} // \\ namepsace internal
\n+
232
\n+
239template<class Class>
\n+
\n+
240inline Class between_default(const Class& l1, const Class& l2) {
\n+
241 return l1.inverse().compose(l2);
\n+
242}
\n+
\n+
243
\n+
245template<class Class>
\n+
\n+
246inline Vector logmap_default(const Class& l0, const Class& lp) {
\n+
247 return Class::Logmap(l0.between(lp));
\n+
248}
\n+
\n+
249
\n+
251template<class Class>
\n+
\n+
252inline Class expmap_default(const Class& t, const Vector& d) {
\n+
253 return t.compose(Class::Expmap(d));
\n+
254}
\n+
\n+
255
\n+
259template<typename T>
\n+
\n+
260class IsLieGroup: public IsGroup<T>, public IsManifold<T> {
\n+
261public:
\n+
262 typedef typename traits<T>::structure_category structure_category_tag;
\n+
263 typedef typename traits<T>::ManifoldType ManifoldType;
\n+
264 typedef typename traits<T>::TangentVector TangentVector;
\n+
265 typedef typename traits<T>::ChartJacobian ChartJacobian;
\n+
266
\n+
267 BOOST_CONCEPT_USAGE(IsLieGroup) {
\n+
268 BOOST_STATIC_ASSERT_MSG(
\n+
269 (boost::is_base_of<lie_group_tag, structure_category_tag>::value),
\n+
270 "This type's trait does not assert it is a Lie group (or derived)");
\n
271
\n-
273#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5
\n-
274 typedef typename boost::shared_ptr<CombinedImuFactor> shared_ptr;
\n-
275#else
\n-
276 typedef boost::shared_ptr<CombinedImuFactor> shared_ptr;
\n-
277#endif
\n-
278
\n-\n-
281
\n-\n-
293 Key pose_i, Key vel_i, Key pose_j, Key vel_j, Key bias_i, Key bias_j,
\n-
294 const PreintegratedCombinedMeasurements& preintegratedMeasurements);
\n-
295
\n-
296 ~CombinedImuFactor() override {}
\n-
297
\n-
299 gtsam::NonlinearFactor::shared_ptr clone() const override;
\n-
300
\n-
305 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n-
306 const CombinedImuFactor&);
\n-
308 void print(const std::string& s = "", const KeyFormatter& keyFormatter =
\n-
309 DefaultKeyFormatter) const override;
\n-
310
\n-
312 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
\n-
314
\n+
272 // group opertations with Jacobians
\n+
273 g = traits<T>::Compose(g, h, Hg, Hh);
\n+
274 g = traits<T>::Between(g, h, Hg, Hh);
\n+
275 g = traits<T>::Inverse(g, Hg);
\n+
276 // log and exp map without Jacobians
\n+
277 g = traits<T>::Expmap(v);
\n+
278 v = traits<T>::Logmap(g);
\n+
279 // log and exponential map with Jacobians
\n+
280 g = traits<T>::Expmap(v, Hg);
\n+
281 v = traits<T>::Logmap(g, Hg);
\n+
282 }
\n+
283private:
\n+
284 T g, h;
\n+
285 TangentVector v;
\n+
286 ChartJacobian Hg, Hh;
\n+
287};
\n+
\n+
288
\n+
297template<class T>
\n+
\n+
298T BCH(const T& X, const T& Y) {
\n+
299 static const double _2 = 1. / 2., _12 = 1. / 12., _24 = 1. / 24.;
\n+
300 T X_Y = bracket(X, Y);
\n+
301 return T(X + Y + _2 * X_Y + _12 * bracket(X - Y, X_Y) - _24 * bracket(Y, bracket(X, X_Y)));
\n+
302}
\n+
\n+
303
\n+
308template <class T> Matrix wedge(const Vector& x);
\n+
309
\n+
316template <class T>
\n
\n-\n-
318 return _PIM_;
\n-
319 }
\n-
\n-
320
\n-
324 Vector evaluateError(const Pose3& pose_i, const Vector3& vel_i,
\n-
325 const Pose3& pose_j, const Vector3& vel_j,
\n-
326 const imuBias::ConstantBias& bias_i, const imuBias::ConstantBias& bias_j,
\n-
327 boost::optional<Matrix&> H1 = boost::none, boost::optional<Matrix&> H2 =
\n-
328 boost::none, boost::optional<Matrix&> H3 = boost::none,
\n-
329 boost::optional<Matrix&> H4 = boost::none, boost::optional<Matrix&> H5 =
\n-
330 boost::none, boost::optional<Matrix&> H6 = boost::none) const override;
\n-
331
\n-
332 private:
\n-
334 friend class boost::serialization::access;
\n-
335 template <class ARCHIVE>
\n-
336 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
337 // NoiseModelFactor6 instead of NoiseModelFactorN for backward compatibility
\n-
338 ar& boost::serialization::make_nvp(
\n-
339 "NoiseModelFactor6", boost::serialization::base_object<Base>(*this));
\n-
340 ar& BOOST_SERIALIZATION_NVP(_PIM_);
\n-
341 }
\n-
342
\n-
343public:
\n-\n-
345};
\n-
\n-
346// class CombinedImuFactor
\n-
347
\n-
348template <>
\n-
\n-\n-
350 : public Testable<PreintegrationCombinedParams> {};
\n-
\n-
351
\n-
352template <>
\n-
\n-\n-
354 : public Testable<PreintegratedCombinedMeasurements> {};
\n-
\n-
355
\n-
356template <>
\n-
357struct traits<CombinedImuFactor> : public Testable<CombinedImuFactor> {};
\n-
358
\n-
359} // namespace gtsam
\n-
typedef and functions to augment Eigen's MatrixXd
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Convenience functions for serializing data structures via boost.serialization.
\n-\n-\n-
Non-linear factor base classes.
\n+
317T expm(const Vector& x, int K=7) {
\n+
318 Matrix xhat = wedge<T>(x);
\n+
319 return T(expm(xhat,K));
\n+
320}
\n+
\n+
321
\n+
326template <typename T>
\n+
\n+
327T interpolate(const T& X, const T& Y, double t,
\n+
328 typename MakeOptionalJacobian<T, T>::type Hx = boost::none,
\n+
329 typename MakeOptionalJacobian<T, T>::type Hy = boost::none) {
\n+
330 if (Hx || Hy) {
\n+
331 typename MakeJacobian<T, T>::type between_H_x, log_H, exp_H, compose_H_x;
\n+
332 const T between =
\n+
333 traits<T>::Between(X, Y, between_H_x); // between_H_y = identity
\n+
334 typename traits<T>::TangentVector delta = traits<T>::Logmap(between, log_H);
\n+
335 const T Delta = traits<T>::Expmap(t * delta, exp_H);
\n+
336 const T result = traits<T>::Compose(
\n+
337 X, Delta, compose_H_x); // compose_H_xinv_y = identity
\n+
338
\n+
339 if (Hx) *Hx = compose_H_x + t * exp_H * log_H * between_H_x;
\n+
340 if (Hy) *Hy = t * exp_H * log_H;
\n+
341 return result;
\n+
342 }
\n+
343 return traits<T>::Compose(
\n+\n+
345}
\n+
\n+
346
\n+
351template<class T>
\n+
\n+\n+
353{
\n+
354private:
\n+
355 typename T::Jacobian adjointMap_;
\n+
356public:
\n+
357 explicit TransformCovariance(const T &X) : adjointMap_{X.AdjointMap()} {}
\n+
358 typename T::Jacobian operator()(const typename T::Jacobian &covariance)
\n+
359 { return adjointMap_ * covariance * adjointMap_.transpose(); }
\n+
360};
\n+
\n+
361
\n+
362} // namespace gtsam
\n+
363
\n+
372#define GTSAM_CONCEPT_LIE_INST(T) template class gtsam::IsLieGroup<T>;
\n+
373#define GTSAM_CONCEPT_LIE_TYPE(T) using _gtsam_IsLieGroup_##T = gtsam::IsLieGroup<T>;
\n+
Base class and basic functions for Manifold types.
\n+
Concept check class for variable types with Group properties.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
T expm(const Vector &x, int K=7)
Exponential map given exponential coordinates class T needs a wedge<> function and a constructor from...
Definition Lie.h:317
\n+
Vector logmap_default(const Class &l0, const Class &lp)
Log map centered at l0, s.t.
Definition Lie.h:246
\n+
Class between_default(const Class &l1, const Class &l2)
These core global functions can be specialized by new Lie types for better performance.
Definition Lie.h:240
\n+
T interpolate(const T &X, const T &Y, double t, typename MakeOptionalJacobian< T, T >::type Hx=boost::none, typename MakeOptionalJacobian< T, T >::type Hy=boost::none)
Linear interpolation between X and Y by coefficient t.
Definition Lie.h:327
\n+
T BCH(const T &X, const T &Y)
Three term approximation of the Baker-Campbell-Hausdorff formula In non-commutative Lie groups,...
Definition Lie.h:298
\n+
Class expmap_default(const Class &t, const Vector &d)
Exponential map centered at l0, s.t.
Definition Lie.h:252
\n+
Matrix wedge(const Vector &x)
Declaration of wedge (see Murray94book) used to convert from n exponential coordinates to n*n element...
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
tag to assert a type is a group
Definition Group.h:34
\n+
Group operator syntax flavors.
Definition Group.h:37
\n+
Group Concept.
Definition Group.h:46
\n+
A CRTP helper class that implements Lie group methods Prerequisites: methods operator*,...
Definition Lie.h:37
\n+
static Class Retract(const TangentVector &v, ChartJacobian H)
Retract at origin with optional derivative.
Definition Lie.h:121
\n+
TangentVector localCoordinates(const Class &g) const
localCoordinates as required by manifold concept: finds tangent vector between *this and g
Definition Lie.h:136
\n+
Class expmap(const TangentVector &v, ChartJacobian H1, ChartJacobian H2=boost::none) const
expmap with optional derivatives
Definition Lie.h:89
\n+
TangentVector localCoordinates(const Class &g, ChartJacobian H1, ChartJacobian H2=boost::none) const
localCoordinates with optional derivatives
Definition Lie.h:152
\n+
TangentVector logmap(const Class &g) const
logmap as required by manifold concept Applies logarithmic map to group element that takes *this to g
Definition Lie.h:84
\n+
TangentVector logmap(const Class &g, ChartJacobian H1, ChartJacobian H2=boost::none) const
logmap with optional derivatives
Definition Lie.h:100
\n+
static TangentVector LocalCoordinates(const Class &g)
LocalCoordinates at origin: possible in Lie group because it has an identity.
Definition Lie.h:116
\n+
Class retract(const TangentVector &v, ChartJacobian H1, ChartJacobian H2=boost::none) const
retract with optional derivatives
Definition Lie.h:141
\n+
static TangentVector LocalCoordinates(const Class &g, ChartJacobian H)
LocalCoordinates at origin with optional derivative.
Definition Lie.h:126
\n+
Class retract(const TangentVector &v) const
retract as required by manifold concept: applies v at *this
Definition Lie.h:131
\n+
Class expmap(const TangentVector &v) const
expmap as required by manifold concept Applies exponential map to v and composes with *this
Definition Lie.h:78
\n+
static Class Retract(const TangentVector &v)
Retract at origin: possible in Lie group because it has an identity.
Definition Lie.h:111
\n+
tag to assert a type is a Lie group
Definition Lie.h:164
\n+
A helper class that implements the traits interface for GTSAM lie groups.
Definition Lie.h:174
\n+
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n+
Lie Group Concept.
Definition Lie.h:260
\n+
Functor for transforming covariance of T.
Definition Lie.h:353
\n+
tag to assert a type is a manifold
Definition Manifold.h:33
\n+
Extra manifold traits for fixed-dimension types.
Definition Manifold.h:75
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Parameters for pre-integration using PreintegratedCombinedMeasurements: Usage: Create just a single P...
Definition CombinedImuFactor.h:62
\n-
Matrix6 biasAccOmegaInt
covariance of bias used as initial estimate.
Definition CombinedImuFactor.h:65
\n-
PreintegrationCombinedParams(const Vector3 &n_gravity)
See two named constructors below for good values of n_gravity in body frame.
Definition CombinedImuFactor.h:75
\n-
PreintegrationCombinedParams()
Default constructor makes uninitialized params struct.
Definition CombinedImuFactor.h:69
\n-
Matrix3 biasOmegaCovariance
continuous-time "Covariance" describing gyroscope bias random walk
Definition CombinedImuFactor.h:64
\n-
Matrix3 biasAccCovariance
continuous-time "Covariance" describing accelerometer bias random walk
Definition CombinedImuFactor.h:63
\n-
PreintegratedCombinedMeasurements integrates the IMU measurements (rotation rates and accelerations) ...
Definition CombinedImuFactor.h:129
\n-
PreintegratedCombinedMeasurements(const PreintegrationType &base, const Eigen::Matrix< double, 15, 15 > &preintMeasCov)
Construct preintegrated directly from members: base class and preintMeasCov.
Definition CombinedImuFactor.h:171
\n-
~PreintegratedCombinedMeasurements() override
Virtual destructor.
Definition CombinedImuFactor.h:177
\n-
PreintegratedCombinedMeasurements()
Default constructor only for serialization and wrappers.
Definition CombinedImuFactor.h:150
\n-
Params & p() const
const reference to params, shadows definition in base class
Definition CombinedImuFactor.h:188
\n-
PreintegratedCombinedMeasurements(const boost::shared_ptr< Params > &p, const imuBias::ConstantBias &biasHat=imuBias::ConstantBias())
Default constructor, initializes the class with no measurements.
Definition CombinedImuFactor.h:159
\n-
CombinedImuFactor is a 6-ways factor involving previous state (pose and velocity of the vehicle,...
Definition CombinedImuFactor.h:259
\n-
boost::shared_ptr< CombinedImuFactor > shared_ptr
Shorthand for a smart pointer to a factor.
Definition CombinedImuFactor.h:276
\n-
CombinedImuFactor()
Default constructor - only use for serialization.
Definition CombinedImuFactor.h:280
\n-
const PreintegratedCombinedMeasurements & preintegratedMeasurements() const
Access the preintegrated measurements.
Definition CombinedImuFactor.h:317
\n-
Definition ImuBias.h:30
\n-
IMU pre-integration on NavSatet manifold.
Definition ManifoldPreintegration.h:33
\n-
Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the c...
Definition PreintegrationParams.h:26
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,389 +1,440 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-CombinedImuFactor.h\n+Lie.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-23#pragma once\n-24\n-25/* GTSAM includes */\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-29#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-30#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-34#ifdef GTSAM_TANGENT_PREINTEGRATION\n-35typedef TangentPreintegration PreintegrationType;\n-36#else\n-37typedef ManifoldPreintegration PreintegrationType;\n-38#endif\n-39\n-40/*\n-41 * If you are using the factor, please cite:\n-42 * L. Carlone, Z. Kira, C. Beall, V. Indelman, F. Dellaert, Eliminating\n-43 * conditionally independent sets in factor graphs: a unifying perspective\n-based\n-44 * on smart factors, Int. Conf. on Robotics and Automation (ICRA), 2014.\n-45 *\n-46 * REFERENCES:\n-47 * [1] G.S. Chirikjian, \"Stochastic Models, Information Theory, and Lie\n-Groups\",\n-48 * Volume 2, 2008.\n-49 * [2] T. Lupton and S.Sukkarieh, \"Visual-Inertial-Aided Navigation for\n-50 * High-Dynamic Motion in Built Environments Without Initial Conditions\",\n-51 * TRO, 28(1):61-76, 2012.\n-52 * [3] L. Carlone, S. Williams, R. Roberts, \"Preintegrated IMU factor:\n-53 * Computation of the Jacobian Matrices\", Tech. Report, 2013.\n-54 * Available in this repo as \"PreintegratedIMUJacobians.pdf\".\n-55 * [4] C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, IMU Preintegration\n-on\n-56 * Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation,\n-57 * Robotics: Science and Systems (RSS), 2015.\n-58 */\n-59\n-_\b6_\b2struct GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs : _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs {\n-_\b6_\b3 Matrix3 _\bb_\bi_\ba_\bs_\bA_\bc_\bc_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be;\n-_\b6_\b4 Matrix3 _\bb_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be;\n-_\b6_\b5 Matrix6 _\bb_\bi_\ba_\bs_\bA_\bc_\bc_\bO_\bm_\be_\bg_\ba_\bI_\bn_\bt;\n-66\n-_\b6_\b9 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs()\n-70 : biasAccCovariance(I_3x3),\n-71 biasOmegaCovariance(I_3x3),\n-72 biasAccOmegaInt(I_6x6) {}\n-73\n-_\b7_\b5 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs(const Vector3& n_gravity) :\n-76 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs(n_gravity), biasAccCovariance(I_3x3),\n-77 biasOmegaCovariance(I_3x3), biasAccOmegaInt(I_6x6) {\n-78\n-79 }\n-80\n-81 // Default Params for a Z-down navigation frame, such as NED: gravity points\n-along positive Z-axis\n-82 static boost::shared_ptr MakeSharedD(double g\n-= 9.81) {\n-83 return boost::shared_ptr(new\n-_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs(Vector3(0, 0, g)));\n-84 }\n-85\n-86 // Default Params for a Z-up navigation frame, such as ENU: gravity points\n-along negative Z-axis\n-87 static boost::shared_ptr MakeSharedU(double g\n-= 9.81) {\n-88 return boost::shared_ptr(new\n-PreintegrationCombinedParams(Vector3(0, 0, -g)));\n-89 }\n-90\n-91 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\") const override;\n-92 bool equals(const PreintegratedRotationParams& other, double tol) const\n-override;\n-93\n-94 void setBiasAccCovariance(const Matrix3& cov) { biasAccCovariance=cov; }\n-95 void setBiasOmegaCovariance(const Matrix3& cov) { biasOmegaCovariance=cov; }\n-96 void setBiasAccOmegaInit(const Matrix6& cov) { biasAccOmegaInt=cov; }\n-97\n-98 const Matrix3& getBiasAccCovariance() const { return biasAccCovariance; }\n-99 const Matrix3& getBiasOmegaCovariance() const { return biasOmegaCovariance;\n-}\n-100 const Matrix6& getBiasAccOmegaInit() const { return biasAccOmegaInt; }\n-101\n-102private:\n-103\n-_\b1_\b0_\b5 friend class boost::serialization::access;\n-106 template \n-107 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-108 namespace bs = ::boost::serialization;\n-109 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs);\n-110 ar & BOOST_SERIALIZATION_NVP(biasAccCovariance);\n-111 ar & BOOST_SERIALIZATION_NVP(biasOmegaCovariance);\n-112 ar & BOOST_SERIALIZATION_NVP(biasAccOmegaInt);\n+24#pragma once\n+25\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bG_\br_\bo_\bu_\bp_\b._\bh>\n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+36template \n+_\b3_\b7struct _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {\n+38\n+39 enum { dimension = N };\n+40 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bN_\b,_\b _\bN_\b> ChartJacobian;\n+41 typedef Eigen::Matrix Jacobian;\n+42 typedef Eigen::Matrix TangentVector;\n+43\n+44 const Class & derived() const {\n+45 return static_cast(*this);\n+46 }\n+47\n+48 Class compose(const Class& g) const {\n+49 return derived() * g;\n+50 }\n+51\n+52 Class between(const Class& g) const {\n+53 return derived().inverse() * g;\n+54 }\n+55\n+56 Class compose(const Class& g, ChartJacobian H1,\n+57 ChartJacobian H2 = boost::none) const {\n+58 if (H1) *H1 = g.inverse().AdjointMap();\n+59 if (H2) *H2 = Eigen::Matrix::Identity();\n+60 return derived() * g;\n+61 }\n+62\n+63 Class between(const Class& g, ChartJacobian H1,\n+64 ChartJacobian H2 = boost::none) const {\n+65 Class result = derived().inverse() * g;\n+66 if (H1) *H1 = - result.inverse().AdjointMap();\n+67 if (H2) *H2 = Eigen::Matrix::Identity();\n+68 return result;\n+69 }\n+70\n+71 Class inverse(ChartJacobian H) const {\n+72 if (H) *H = - derived().AdjointMap();\n+73 return derived().inverse();\n+74 }\n+75\n+_\b7_\b8 Class _\be_\bx_\bp_\bm_\ba_\bp(const TangentVector& v) const {\n+79 return compose(Class::Expmap(v));\n+80 }\n+81\n+_\b8_\b4 TangentVector _\bl_\bo_\bg_\bm_\ba_\bp(const Class& g) const {\n+85 return Class::Logmap(between(g));\n+86 }\n+87\n+_\b8_\b9 Class _\be_\bx_\bp_\bm_\ba_\bp(const TangentVector& v, //\n+90 ChartJacobian H1, ChartJacobian H2 = boost::none) const {\n+91 Jacobian D_g_v;\n+92 Class g = Class::Expmap(v,H2 ? &D_g_v : 0);\n+93 Class h = compose(g); // derivatives inlined below\n+94 if (H1) *H1 = g.inverse().AdjointMap();\n+95 if (H2) *H2 = D_g_v;\n+96 return h;\n+97 }\n+98\n+_\b1_\b0_\b0 TangentVector _\bl_\bo_\bg_\bm_\ba_\bp(const Class& g, //\n+101 ChartJacobian H1, ChartJacobian H2 = boost::none) const {\n+102 Class h = between(g); // derivatives inlined below\n+103 Jacobian D_v_h;\n+104 TangentVector v = Class::Logmap(h, (H1 || H2) ? &D_v_h : 0);\n+105 if (H1) *H1 = - D_v_h * h.inverse().AdjointMap();\n+106 if (H2) *H2 = D_v_h;\n+107 return v;\n+108 }\n+109\n+_\b1_\b1_\b1 static Class _\bR_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& v) {\n+112 return Class::ChartAtOrigin::Retract(v);\n 113 }\n 114\n-115public:\n-116 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-117};\n-118\n-_\b1_\b2_\b9class GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs : public\n-_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be {\n-130\n-131public:\n-132 typedef _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs _\bP_\ba_\br_\ba_\bm_\bs;\n-133\n-134 protected:\n-135 /* Covariance matrix of the preintegrated measurements\n-136 * COVARIANCE OF: [PreintROTATION PreintPOSITION PreintVELOCITY BiasAcc\n-BiasOmega]\n-137 * (first-order propagation from *measurementCovariance*).\n-138 * PreintegratedCombinedMeasurements also include the biases and keep the\n-correlation\n-139 * between the preintegrated measurements and the biases\n-140 */\n-141 Eigen::Matrix preintMeasCov_;\n-142\n-143 friend class _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br;\n-144\n-145 public:\n-148\n-_\b1_\b5_\b0 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() {\n-151 preintMeasCov_.setZero();\n-152 }\n-153\n-_\b1_\b5_\b9 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n-160 const boost::shared_ptr& p,\n-161 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& biasHat = _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs())\n-162 : _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be(p, biasHat) {\n-163 preintMeasCov_.setZero();\n-164 }\n+_\b1_\b1_\b6 static TangentVector _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const Class& g) {\n+117 return Class::ChartAtOrigin::Local(g);\n+118 }\n+119\n+_\b1_\b2_\b1 static Class _\bR_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& v, ChartJacobian H) {\n+122 return Class::ChartAtOrigin::Retract(v,H);\n+123 }\n+124\n+_\b1_\b2_\b6 static TangentVector _\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const Class& g, ChartJacobian H) {\n+127 return Class::ChartAtOrigin::Local(g,H);\n+128 }\n+129\n+_\b1_\b3_\b1 Class _\br_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& v) const {\n+132 return compose(Class::ChartAtOrigin::Retract(v));\n+133 }\n+134\n+_\b1_\b3_\b6 TangentVector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const Class& g) const {\n+137 return Class::ChartAtOrigin::Local(between(g));\n+138 }\n+139\n+_\b1_\b4_\b1 Class _\br_\be_\bt_\br_\ba_\bc_\bt(const TangentVector& v, //\n+142 ChartJacobian H1, ChartJacobian H2 = boost::none) const {\n+143 Jacobian D_g_v;\n+144 Class g = Class::ChartAtOrigin::Retract(v, H2 ? &D_g_v : 0);\n+145 Class h = compose(g); // derivatives inlined below\n+146 if (H1) *H1 = g.inverse().AdjointMap();\n+147 if (H2) *H2 = D_g_v;\n+148 return h;\n+149 }\n+150\n+_\b1_\b5_\b2 TangentVector _\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs(const Class& g, //\n+153 ChartJacobian H1, ChartJacobian H2 = boost::none) const {\n+154 Class h = between(g); // derivatives inlined below\n+155 Jacobian D_v_h;\n+156 TangentVector v = Class::ChartAtOrigin::Local(h, (H1 || H2) ? &D_v_h : 0);\n+157 if (H1) *H1 = - D_v_h * h.inverse().AdjointMap();\n+158 if (H2) *H2 = D_v_h;\n+159 return v;\n+160 }\n+161};\n+162\n+_\b1_\b6_\b4struct _\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg: public _\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg, public _\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg {};\n 165\n-_\b1_\b7_\b1 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be& base, const\n-Eigen::Matrix& preintMeasCov)\n-172 : _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be(base),\n-173 preintMeasCov_(preintMeasCov) {\n-174 }\n-175\n-_\b1_\b7_\b7 _\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() override {}\n-178\n-180\n-183\n-185 void resetIntegration() override;\n-186\n-_\b1_\b8_\b8 _\bP_\ba_\br_\ba_\bm_\bs& _\bp() const { return *boost::static_pointer_cast(this->p_); }\n-190\n-194 Matrix preintMeasCov() const { return preintMeasCov_; }\n-196\n-200 void print(const std::string& s = \"Preintegrated Measurements:\") const\n-override;\n-202 bool equals(const PreintegratedCombinedMeasurements& expected,\n-203 double tol = 1e-9) const;\n-205\n+166namespace internal {\n+167\n+173template\n+_\b1_\b7_\b4struct _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs: _\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl {\n+175 typedef _\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by;\n+176\n+179 typedef _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg _\bg_\br_\bo_\bu_\bp_\b__\bf_\bl_\ba_\bv_\bo_\br;\n+180 static Class Identity() { return Class::Identity();}\n+182\n+185 typedef Class ManifoldType;\n+186 enum { dimension = Class::dimension };\n+187 typedef Eigen::Matrix TangentVector;\n+188 typedef _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b,_\b _\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\b> ChartJacobian;\n+189\n+190 static TangentVector Local(const Class& origin, const Class& other,\n+191 ChartJacobian Horigin = boost::none, ChartJacobian Hother = boost::none) {\n+192 return origin.localCoordinates(other, Horigin, Hother);\n+193 }\n+194\n+195 static Class Retract(const Class& origin, const TangentVector& v,\n+196 ChartJacobian Horigin = boost::none, ChartJacobian Hv = boost::none) {\n+197 return origin.retract(v, Horigin, Hv);\n+198 }\n+200\n+203 static TangentVector Logmap(const Class& m, ChartJacobian Hm = boost::none)\n+{\n+204 return Class::Logmap(m, Hm);\n+205 }\n 206\n-209\n-220 void integrateMeasurement(const Vector3& measuredAcc,\n-221 const Vector3& measuredOmega, const double dt) override;\n-222\n-224\n-225 private:\n-_\b2_\b2_\b7 friend class boost::serialization::access;\n-228 template \n-229 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-230 namespace bs = ::boost::serialization;\n-231 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bT_\by_\bp_\be);\n-232 ar& BOOST_SERIALIZATION_NVP(preintMeasCov_);\n-233 }\n-234\n-235public:\n-236 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-237};\n-238\n-_\b2_\b5_\b8class GTSAM_EXPORT _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-260public:\n-261\n-262private:\n-263\n-264 typedef _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-265 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN<_\bP_\bo_\bs_\be_\b3, Vector3, _\bP_\bo_\bs_\be_\b3, Vector3,\n-266 _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs, _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs> _\bB_\ba_\bs_\be;\n-267\n-268 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs _PIM_;\n-269\n-270public:\n-271\n-273#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5\n-274 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-275#else\n-_\b2_\b7_\b6 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-277#endif\n-278\n-_\b2_\b8_\b0 _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br() {}\n-281\n-292 _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br(\n-293 _\bK_\be_\by pose_i, _\bK_\be_\by vel_i, _\bK_\be_\by pose_j, _\bK_\be_\by vel_j, _\bK_\be_\by bias_i, _\bK_\be_\by bias_j,\n-294 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& preintegratedMeasurements);\n-295\n-296 _\b~_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-297\n-299 gtsam::NonlinearFactor::shared_ptr clone() const override;\n-300\n-305 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-306 const CombinedImuFactor&);\n-308 void print(const std::string& s = \"\", const KeyFormatter& keyFormatter =\n-309 DefaultKeyFormatter) const override;\n-310\n-312 bool equals(const NonlinearFactor& expected, double tol = 1e-9) const\n-override;\n-314\n-_\b3_\b1_\b7 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const\n+207 static Class Expmap(const TangentVector& v, ChartJacobian Hv = boost::none)\n {\n-318 return _PIM_;\n-319 }\n-320\n-324 Vector evaluateError(const _\bP_\bo_\bs_\be_\b3& pose_i, const Vector3& vel_i,\n-325 const _\bP_\bo_\bs_\be_\b3& pose_j, const Vector3& vel_j,\n-326 const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_i, const _\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias_j,\n-327 boost::optional H1 = boost::none, boost::optional H2 =\n-328 boost::none, boost::optional H3 = boost::none,\n-329 boost::optional H4 = boost::none, boost::optional H5 =\n-330 boost::none, boost::optional H6 = boost::none) const override;\n-331\n-332 private:\n-_\b3_\b3_\b4 friend class boost::serialization::access;\n-335 template \n-336 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-337 // NoiseModelFactor6 instead of NoiseModelFactorN for backward\n-compatibility\n-338 ar& boost::serialization::make_nvp(\n-339 \"NoiseModelFactor6\", boost::serialization::base_object(*this));\n-340 ar& BOOST_SERIALIZATION_NVP(_PIM_);\n-341 }\n-342\n-343public:\n-344 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-345};\n-346// class CombinedImuFactor\n-347\n-348template <>\n-_\b3_\b4_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs>\n-350 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-351\n-352template <>\n-_\b3_\b5_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs>\n-354 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-355\n-356template <>\n-_\b3_\b5_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-358\n-359} // namespace gtsam\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-Convenience functions for serializing data structures via boost.serialization.\n-_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+208 return Class::Expmap(v, Hv);\n+209 }\n+210\n+211 static Class Compose(const Class& m1, const Class& m2, //\n+212 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+213 return m1.compose(m2, H1, H2);\n+214 }\n+215\n+216 static Class Between(const Class& m1, const Class& m2, //\n+217 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none) {\n+218 return m1.between(m2, H1, H2);\n+219 }\n+220\n+221 static Class Inverse(const Class& m, //\n+222 ChartJacobian H = boost::none) {\n+223 return m.inverse(H);\n+224 }\n+226};\n+227\n+_\b2_\b2_\b9template struct _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp: _\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs,\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+230\n+231} // \\ namepsace internal\n+232\n+239template\n+_\b2_\b4_\b0inline Class _\bb_\be_\bt_\bw_\be_\be_\bn_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt(const Class& l1, const Class& l2) {\n+241 return l1.inverse().compose(l2);\n+242}\n+243\n+245template\n+_\b2_\b4_\b6inline Vector _\bl_\bo_\bg_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt(const Class& l0, const Class& lp) {\n+247 return Class::Logmap(l0.between(lp));\n+248}\n+249\n+251template\n+_\b2_\b5_\b2inline Class _\be_\bx_\bp_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt(const Class& t, const Vector& d) {\n+253 return t.compose(Class::Expmap(d));\n+254}\n+255\n+259template\n+_\b2_\b6_\b0class _\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp: public _\bI_\bs_\bG_\br_\bo_\bu_\bp, public IsManifold {\n+261public:\n+262 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bs_\bt_\br_\bu_\bc_\bt_\bu_\br_\be_\b__\bc_\ba_\bt_\be_\bg_\bo_\br_\by structure_category_tag;\n+263 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bT_\by_\bp_\be ManifoldType;\n+264 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br TangentVector;\n+265 typedef typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn ChartJacobian;\n+266\n+267 BOOST_CONCEPT_USAGE(_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp) {\n+268 BOOST_STATIC_ASSERT_MSG(\n+269 (boost::is_base_of::value),\n+270 \"This type's trait does not assert it is a Lie group (or derived)\");\n+271\n+272 // group opertations with Jacobians\n+273 g = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(g, h, Hg, Hh);\n+274 g = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(g, h, Hg, Hh);\n+275 g = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bI_\bn_\bv_\be_\br_\bs_\be(g, Hg);\n+276 // log and exp map without Jacobians\n+277 g = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(v);\n+278 v = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(g);\n+279 // log and exponential map with Jacobians\n+280 g = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(v, Hg);\n+281 v = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(g, Hg);\n+282 }\n+283private:\n+284 T g, h;\n+285 TangentVector v;\n+286 ChartJacobian Hg, Hh;\n+287};\n+288\n+297template\n+_\b2_\b9_\b8T _\bB_\bC_\bH(const T& X, const T& Y) {\n+299 static const double _2 = 1. / 2., _12 = 1. / 12., _24 = 1. / 24.;\n+300 T X_Y = bracket(X, Y);\n+301 return T(X + Y + _2 * X_Y + _12 * bracket(X - Y, X_Y) - _24 * bracket(Y,\n+bracket(X, X_Y)));\n+302}\n+303\n+_\b3_\b0_\b8template Matrix _\bw_\be_\bd_\bg_\be(const Vector& x);\n+309\n+316template \n+_\b3_\b1_\b7T _\be_\bx_\bp_\bm(const Vector& x, int K=7) {\n+318 Matrix xhat = wedge(x);\n+319 return T(_\be_\bx_\bp_\bm(xhat,K));\n+320}\n+321\n+326template \n+_\b3_\b2_\b7T _\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be(const T& X, const T& Y, double t,\n+328 typename MakeOptionalJacobian::type Hx = boost::none,\n+329 typename MakeOptionalJacobian::type Hy = boost::none) {\n+330 if (Hx || Hy) {\n+331 typename MakeJacobian::type between_H_x, log_H, exp_H, compose_H_x;\n+332 const T between =\n+333 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(X, Y, between_H_x); // between_H_y = identity\n+334 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bT_\ba_\bn_\bg_\be_\bn_\bt_\bV_\be_\bc_\bt_\bo_\br delta = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(between,\n+log_H);\n+335 const T Delta = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(t * delta, exp_H);\n+336 const T result = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(\n+337 X, Delta, compose_H_x); // compose_H_xinv_y = identity\n+338\n+339 if (Hx) *Hx = compose_H_x + t * exp_H * log_H * between_H_x;\n+340 if (Hy) *Hy = t * exp_H * log_H;\n+341 return result;\n+342 }\n+343 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bs_\be(\n+344 X, _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(t * _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bg_\bm_\ba_\bp(_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(X, Y))));\n+345}\n+346\n+351template\n+_\b3_\b5_\b2class _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n+353{\n+354private:\n+355 typename T::Jacobian adjointMap_;\n+356public:\n+357 explicit _\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be(const T &X) : adjointMap_{X.AdjointMap()} {}\n+358 typename T::Jacobian operator()(const typename T::Jacobian &covariance)\n+359 { return adjointMap_ * covariance * adjointMap_.transpose(); }\n+360};\n+361\n+362} // namespace gtsam\n+363\n+_\b3_\b7_\b2#define GTSAM_CONCEPT_LIE_INST(T) template class gtsam::IsLieGroup;\n+373#define GTSAM_CONCEPT_LIE_TYPE(T) using _gtsam_IsLieGroup_##T = gtsam::\n+IsLieGroup;\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bG_\br_\bo_\bu_\bp_\b._\bh\n+Concept check class for variable types with Group properties.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm\n+T expm(const Vector &x, int K=7)\n+Exponential map given exponential coordinates class T needs a wedge<> function\n+and a constructor from...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:317\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bo_\bg_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt\n+Vector logmap_default(const Class &l0, const Class &lp)\n+Log map centered at l0, s.t.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:246\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bb_\be_\bt_\bw_\be_\be_\bn_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt\n+Class between_default(const Class &l1, const Class &l2)\n+These core global functions can be specialized by new Lie types for better\n+performance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:240\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bp_\bo_\bl_\ba_\bt_\be\n+T interpolate(const T &X, const T &Y, double t, typename MakeOptionalJacobian<\n+T, T >::type Hx=boost::none, typename MakeOptionalJacobian< T, T >::type\n+Hy=boost::none)\n+Linear interpolation between X and Y by coefficient t.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:327\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\bC_\bH\n+T BCH(const T &X, const T &Y)\n+Three term approximation of the Baker-Campbell-Hausdorff formula In non-\n+commutative Lie groups,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:298\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bx_\bp_\bm_\ba_\bp_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt\n+Class expmap_default(const Class &t, const Vector &d)\n+Exponential map centered at l0, s.t.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:252\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\be_\bd_\bg_\be\n+Matrix wedge(const Vector &x)\n+Declaration of wedge (see Murray94book) used to convert from n exponential\n+coordinates to n*n element...\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+tag to assert a type is a group\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bv_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+Group operator syntax flavors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bG_\br_\bo_\bu_\bp\n+Group Concept.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Group.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+A CRTP helper class that implements Lie group methods Prerequisites: methods\n+operator*,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n+static Class Retract(const TangentVector &v, ChartJacobian H)\n+Retract at origin with optional derivative.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:121\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+TangentVector localCoordinates(const Class &g) const\n+localCoordinates as required by manifold concept: finds tangent vector between\n+*this and g\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\be_\bx_\bp_\bm_\ba_\bp\n+Class expmap(const TangentVector &v, ChartJacobian H1, ChartJacobian H2=boost::\n+none) const\n+expmap with optional derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:89\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+TangentVector localCoordinates(const Class &g, ChartJacobian H1, ChartJacobian\n+H2=boost::none) const\n+localCoordinates with optional derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bg_\bm_\ba_\bp\n+TangentVector logmap(const Class &g) const\n+logmap as required by manifold concept Applies logarithmic map to group element\n+that takes *this to g\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bl_\bo_\bg_\bm_\ba_\bp\n+TangentVector logmap(const Class &g, ChartJacobian H1, ChartJacobian H2=boost::\n+none) const\n+logmap with optional derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+static TangentVector LocalCoordinates(const Class &g)\n+LocalCoordinates at origin: possible in Lie group because it has an identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:116\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+Class retract(const TangentVector &v, ChartJacobian H1, ChartJacobian\n+H2=boost::none) const\n+retract with optional derivatives\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:141\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bL_\bo_\bc_\ba_\bl_\bC_\bo_\bo_\br_\bd_\bi_\bn_\ba_\bt_\be_\bs\n+static TangentVector LocalCoordinates(const Class &g, ChartJacobian H)\n+LocalCoordinates at origin with optional derivative.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:126\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\br_\be_\bt_\br_\ba_\bc_\bt\n+Class retract(const TangentVector &v) const\n+retract as required by manifold concept: applies v at *this\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\be_\bx_\bp_\bm_\ba_\bp\n+Class expmap(const TangentVector &v) const\n+expmap as required by manifold concept Applies exponential map to v and\n+composes with *this\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n+static Class Retract(const TangentVector &v)\n+Retract at origin: possible in Lie group because it has an identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\be_\b__\bg_\br_\bo_\bu_\bp_\b__\bt_\ba_\bg\n+tag to assert a type is a Lie group\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:164\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\bT_\br_\ba_\bi_\bt_\bs\n+A helper class that implements the traits interface for GTSAM lie groups.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Both LieGroupTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Lie Group Concept.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:260\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\br_\ba_\bn_\bs_\bf_\bo_\br_\bm_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n+Functor for transforming covariance of T.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:353\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b__\bt_\ba_\bg\n+tag to assert a type is a manifold\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bG_\be_\bt_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bI_\bm_\bp_\bl\n+Extra manifold traits for fixed-dimension types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for pre-integration using PreintegratedCombinedMeasurements: Usage:\n-Create just a single P...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:62\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bb_\bi_\ba_\bs_\bA_\bc_\bc_\bO_\bm_\be_\bg_\ba_\bI_\bn_\bt\n-Matrix6 biasAccOmegaInt\n-covariance of bias used as initial estimate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs\n-PreintegrationCombinedParams(const Vector3 &n_gravity)\n-See two named constructors below for good values of n_gravity in body frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs\n-PreintegrationCombinedParams()\n-Default constructor makes uninitialized params struct.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bb_\bi_\ba_\bs_\bO_\bm_\be_\bg_\ba_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n-Matrix3 biasOmegaCovariance\n-continuous-time \"Covariance\" describing gyroscope bias random walk\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bb_\bi_\ba_\bs_\bA_\bc_\bc_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be\n-Matrix3 biasAccCovariance\n-continuous-time \"Covariance\" describing accelerometer bias random walk\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:63\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedCombinedMeasurements integrates the IMU measurements (rotation\n-rates and accelerations) ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:129\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedCombinedMeasurements(const PreintegrationType &base, const Eigen::\n-Matrix< double, 15, 15 > &preintMeasCov)\n-Construct preintegrated directly from members: base class and preintMeasCov.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:171\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\b~_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-~PreintegratedCombinedMeasurements() override\n-Virtual destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedCombinedMeasurements()\n-Default constructor only for serialization and wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:150\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bp\n-Params & p() const\n-const reference to params, shadows definition in base class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:188\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedCombinedMeasurements(const boost::shared_ptr< Params > &p, const\n-imuBias::ConstantBias &biasHat=imuBias::ConstantBias())\n-Default constructor, initializes the class with no measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n-CombinedImuFactor is a 6-ways factor involving previous state (pose and\n-velocity of the vehicle,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:259\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< CombinedImuFactor > shared_ptr\n-Shorthand for a smart pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:276\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n-CombinedImuFactor()\n-Default constructor - only use for serialization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:280\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-const PreintegratedCombinedMeasurements & preintegratedMeasurements() const\n-Access the preintegrated measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CombinedImuFactor.h:317\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn\n-IMU pre-integration on NavSatet manifold.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ManifoldPreintegration.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for pre-integration: Usage: Create just a single Params and pass a\n-shared pointer to the c...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegrationParams.h:26\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bb_\ba_\bs_\be\n+ * _\bL_\bi_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00935.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00326.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/PreintegratedRotation.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3Fisheye.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n \n
\n \n-
PreintegratedRotation.cpp File Reference
\n+Namespaces |\n+Functions
\n+
Cal3Fisheye.cpp File Reference
\n \n
\n

\n Classes

struct  gtsam::PreintegrationCombinedParams
 Parameters for pre-integration using PreintegratedCombinedMeasurements: Usage: Create just a single Params and pass a shared pointer to the constructor. More...
 
class  gtsam::PreintegratedCombinedMeasurements
\n \n \n \n \n+

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n+\n+\n+\n

\n+Functions

\n+std::ostream & gtsam::operator<< (std::ostream &os, const Cal3Fisheye &cal)
 
\n

Detailed Description

\n-
Author
Luca Carlone
\n+
Date
Apr 8, 2020
\n+
Author
ghaggin
\n
\n-Stephen Williams
\n-
\n-Richard Roberts
\n-
\n-Vadim Indelman
\n-
\n-David Jensen
\n-
\n-Frank Dellaert
\n+Varun Agrawal
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,23 +1,24 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-PreintegratedRotation.cpp File Reference\n+_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n+Cal3Fisheye.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n+F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n+std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be &cal)\n+\u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+ Date\n+ Apr 8, 2020\n Author\n- Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n- Frank Dellaert\n+ ghaggin\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bc_\bp_\bp\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bC_\ba_\bl_\b3_\bF_\bi_\bs_\bh_\be_\by_\be_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00941_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00911_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
TangentPreintegration.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n+\n
21
\n
22namespace gtsam {
\n
23
\n
\n
28class GTSAM_EXPORT TangentPreintegration : public PreintegrationBase {
\n
29 protected:
\n
30
\n@@ -201,21 +201,21 @@\n
135 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegrationBase);
\n
136 ar & BOOST_SERIALIZATION_NVP(preintegrated_);
\n
137 ar & BOOST_SERIALIZATION_NVP(preintegrated_H_biasAcc_);
\n
138 ar & BOOST_SERIALIZATION_NVP(preintegrated_H_biasOmega_);
\n
139 }
\n
140
\n
141public:
\n-\n+\n
143};
\n
\n
144
\n
145}
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-\n+
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Definition ImuBias.h:30
\n
PreintegrationBase is the base class for PreintegratedMeasurements (in ImuFactor) and CombinedPreinte...
Definition PreintegrationBase.h:41
\n
Integrate on the 9D tangent space of the NavState manifold.
Definition TangentPreintegration.h:28
\n
Matrix93 preintegrated_H_biasOmega_
Jacobian of preintegrated_ w.r.t. angular rate bias.
Definition TangentPreintegration.h:37
\n
~TangentPreintegration() override
Virtual destructor.
Definition TangentPreintegration.h:57
\n
Vector9 preintegrated_
Preintegrated navigation state, as a 9D vector on tangent space at frame i Order is: theta,...
Definition TangentPreintegration.h:35
\n@@ -223,13 +223,13 @@\n
Matrix93 preintegrated_H_biasAcc_
Jacobian of preintegrated_ w.r.t. acceleration bias.
Definition TangentPreintegration.h:36
\n
virtual boost::shared_ptr< TangentPreintegration > clone() const
Dummy clone for MATLAB.
Definition TangentPreintegration.h:123
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00947_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00374_source.html", "comments": ["Files 88% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/BarometricFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/SO4.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
BarometricFactor.h
\n+
SO4.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-\n-\n-\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/geometry/SOn.h>
\n
23
\n-
24namespace gtsam {
\n-
25
\n-
\n-
34class GTSAM_EXPORT BarometricFactor : public NoiseModelFactorN<Pose3, double> {
\n-
35 private:
\n-\n-
37
\n-
38 double nT_;
\n-
39
\n-
40 public:
\n-
42 typedef boost::shared_ptr<BarometricFactor> shared_ptr;
\n-
43
\n-\n-
46
\n-
48 BarometricFactor() : nT_(0) {}
\n+
24#include <gtsam/base/Group.h>
\n+
25#include <gtsam/base/Lie.h>
\n+
26#include <gtsam/base/Manifold.h>
\n+
27#include <gtsam/base/Matrix.h>
\n+
28#include <gtsam/dllexport.h>
\n+
29
\n+
30#include <string>
\n+
31
\n+
32namespace gtsam {
\n+
33
\n+
34using SO4 = SO<4>;
\n+
35
\n+
36// /// Random SO(4) element (no big claims about uniformity)
\n+
37// static SO4 Random(std::mt19937 &rng);
\n+
38
\n+
39// Below are all declarations of SO<4> specializations.
\n+
40// They are *defined* in SO4.cpp.
\n+
41
\n+
42template <>
\n+
43GTSAM_EXPORT
\n+
44Matrix4 SO4::Hat(const TangentVector &xi);
\n+
45
\n+
46template <>
\n+
47GTSAM_EXPORT
\n+
48Vector6 SO4::Vee(const Matrix4 &X);
\n
49
\n-
50 ~BarometricFactor() override {}
\n-
51
\n-
\n-
59 BarometricFactor(Key key, Key baroKey, const double& baroIn,
\n-
60 const SharedNoiseModel& model)
\n-
61 : Base(model, key, baroKey), nT_(heightOut(baroIn)) {}
\n-
\n-
62
\n-
\n-
64 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
65 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
66 gtsam::NonlinearFactor::shared_ptr(new This(*this)));
\n-
67 }
\n-
\n-
68
\n-
70 void print(
\n-
71 const std::string& s = "",
\n-
72 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
\n-
73
\n-
75 bool equals(const NonlinearFactor& expected,
\n-
76 double tol = 1e-9) const override;
\n-
77
\n-
79 Vector evaluateError(
\n-
80 const Pose3& p, const double& b,
\n-
81 boost::optional<Matrix&> H = boost::none,
\n-
82 boost::optional<Matrix&> H2 = boost::none) const override;
\n-
83
\n-
84 inline const double& measurementIn() const { return nT_; }
\n-
85
\n-
86 inline double heightOut(double n) const {
\n-
87 // From https://www.grc.nasa.gov/www/k-12/airplane/atmosmet.html
\n-
88 return (std::pow(n / 101.29, 1. / 5.256) * 288.08 - 273.1 - 15.04) /
\n-
89 -0.00649;
\n-
90 };
\n-
91
\n-
92 inline double baroOut(const double& meters) {
\n-
93 double temp = 15.04 - 0.00649 * meters;
\n-
94 return 101.29 * std::pow(((temp + 273.1) / 288.08), 5.256);
\n-
95 };
\n-
96
\n-
97 private:
\n-
99 friend class boost::serialization::access;
\n-
100 template <class ARCHIVE>
\n-
101 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
102 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
103 ar& boost::serialization::make_nvp(
\n-
104 "NoiseModelFactor1",
\n-
105 boost::serialization::base_object<Base>(*this));
\n-
106 ar& BOOST_SERIALIZATION_NVP(nT_);
\n-
107 }
\n-
108};
\n-
\n+
50template <>
\n+
51GTSAM_EXPORT
\n+
52SO4 SO4::Expmap(const Vector6 &xi, ChartJacobian H);
\n+
53
\n+
54template <>
\n+
55GTSAM_EXPORT
\n+
56Matrix6 SO4::AdjointMap() const;
\n+
57
\n+
58template <>
\n+
59GTSAM_EXPORT
\n+
60SO4::VectorN2 SO4::vec(OptionalJacobian<16, 6> H) const;
\n+
61
\n+
62template <>
\n+
63GTSAM_EXPORT
\n+
64SO4 SO4::ChartAtOrigin::Retract(const Vector6 &omega, ChartJacobian H);
\n+
65
\n+
66template <>
\n+
67GTSAM_EXPORT
\n+
68Vector6 SO4::ChartAtOrigin::Local(const SO4 &Q, ChartJacobian H);
\n+
69
\n+
73GTSAM_EXPORT Matrix3 topLeft(const SO4 &Q, OptionalJacobian<9, 6> H = boost::none);
\n+
74
\n+
79GTSAM_EXPORT Matrix43 stiefel(const SO4 &Q, OptionalJacobian<12, 6> H = boost::none);
\n+
80
\n+
82template <class Archive>
\n+
\n+
83void serialize(Archive &ar, SO4 &Q, const unsigned int /*version*/) {
\n+
84 Matrix4 &M = Q.matrix_;
\n+
85 ar &boost::serialization::make_nvp("Q11", M(0, 0));
\n+
86 ar &boost::serialization::make_nvp("Q12", M(0, 1));
\n+
87 ar &boost::serialization::make_nvp("Q13", M(0, 2));
\n+
88 ar &boost::serialization::make_nvp("Q14", M(0, 3));
\n+
89
\n+
90 ar &boost::serialization::make_nvp("Q21", M(1, 0));
\n+
91 ar &boost::serialization::make_nvp("Q22", M(1, 1));
\n+
92 ar &boost::serialization::make_nvp("Q23", M(1, 2));
\n+
93 ar &boost::serialization::make_nvp("Q24", M(1, 3));
\n+
94
\n+
95 ar &boost::serialization::make_nvp("Q31", M(2, 0));
\n+
96 ar &boost::serialization::make_nvp("Q32", M(2, 1));
\n+
97 ar &boost::serialization::make_nvp("Q33", M(2, 2));
\n+
98 ar &boost::serialization::make_nvp("Q34", M(2, 3));
\n+
99
\n+
100 ar &boost::serialization::make_nvp("Q41", M(3, 0));
\n+
101 ar &boost::serialization::make_nvp("Q42", M(3, 1));
\n+
102 ar &boost::serialization::make_nvp("Q43", M(3, 2));
\n+
103 ar &boost::serialization::make_nvp("Q44", M(3, 3));
\n+
104}
\n+
\n+
105
\n+
106/*
\n+
107 * Define the traits. internal::LieGroup provides both Lie group and Testable
\n+
108 */
\n
109
\n-
110} // namespace gtsam
\n-
3D Pose
\n-
Navigation state composing of attitude, position, and velocity.
\n-
Non-linear factor base classes.
\n+
110template <>
\n+
111struct traits<SO4> : public internal::LieGroup<SO4> {};
\n+
112
\n+
113template <>
\n+
114struct traits<const SO4> : public internal::LieGroup<SO4> {};
\n+
115
\n+
116} // end namespace gtsam
\n+
Base class and basic functions for Lie types.
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Base class and basic functions for Manifold types.
\n+
Concept check class for variable types with Group properties.
\n+
N*N matrix representation of SO(N).
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Prior on height in a cartesian frame.
Definition BarometricFactor.h:34
\n-
BarometricFactor This
Typedef to this class.
Definition BarometricFactor.h:45
\n-
BarometricFactor(Key key, Key baroKey, const double &baroIn, const SharedNoiseModel &model)
Constructor from a measurement of pressure in KPa.
Definition BarometricFactor.h:59
\n-
boost::shared_ptr< BarometricFactor > shared_ptr
shorthand for a smart pointer to a factor
Definition BarometricFactor.h:42
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition BarometricFactor.h:64
\n-
BarometricFactor()
default constructor - only use for serialization
Definition BarometricFactor.h:48
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
std::string serialize(const T &input)
serializes to a string
Definition serialization.h:113
\n+
GTSAM_EXPORT Matrix43 stiefel(const SO4 &Q, OptionalJacobian< 12, 6 > H)
Project to Stiefel manifold of 4*3 orthonormal 3-frames in R^4, i.e., pi(Q) -> .
Definition SO4.cpp:220
\n+
GTSAM_EXPORT Matrix3 topLeft(const SO4 &Q, OptionalJacobian< 9, 6 > H)
Project to top-left 3*3 matrix.
Definition SO4.cpp:206
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
static SO< N > Retract(const TangentVector &v)
Retract at origin: possible in Lie group because it has an identity.
Definition Lie.h:111
\n+
Both LieGroupTraits and Testable.
Definition Lie.h:229
\n+
Manifold of special orthogonal rotation matrices SO<N>.
Definition SOn.h:52
\n+
static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)
Exponential map at identity - create a rotation from canonical coordinates.
Definition SOn-inl.h:67
\n+
VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::none) const
Return vectorized rotation matrix in column order.
Definition SOn-inl.h:88
\n+
static TangentVector Vee(const MatrixNN &X)
Inverse of Hat. See note about xi element order in Hat.
Definition SOn-inl.h:35
\n+
MatrixDD AdjointMap() const
Adjoint map.
Definition SO4.cpp:159
\n+
static MatrixNN Hat(const TangentVector &xi)
Hat operator creates Lie algebra element corresponding to d-vector, where d is the dimensionality of ...
Definition SOn-inl.h:29
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,157 +1,178 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BarometricFactor.h\n+SO4.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\bn_\b._\bh>\n 23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-_\b3_\b4class GTSAM_EXPORT _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-{\n-35 private:\n-36 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bP_\bo_\bs_\be_\b3_\b,_\b _\bd_\bo_\bu_\bb_\bl_\be_\b> _\bB_\ba_\bs_\be;\n-37\n-38 double nT_;\n-39\n-40 public:\n-_\b4_\b2 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-43\n-_\b4_\b5 typedef _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-46\n-_\b4_\b8 _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br() : nT_(0) {}\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bG_\br_\bo_\bu_\bp_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+28#include \n+29\n+30#include \n+31\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+34using SO4 = SO<4>;\n+35\n+36// /// Random SO(4) element (no big claims about uniformity)\n+37// static SO4 Random(std::mt19937 &rng);\n+38\n+39// Below are all declarations of SO<4> specializations.\n+40// They are *defined* in SO4.cpp.\n+41\n+42template <>\n+43GTSAM_EXPORT\n+44Matrix4 _\bS_\bO_\b4_\b:_\b:_\bH_\ba_\bt(const TangentVector &xi);\n+45\n+46template <>\n+47GTSAM_EXPORT\n+48Vector6 _\bS_\bO_\b4_\b:_\b:_\bV_\be_\be(const Matrix4 &X);\n 49\n-50 _\b~_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-51\n-_\b5_\b9 _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, _\bK_\be_\by baroKey, const double& baroIn,\n-60 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model)\n-61 : _\bB_\ba_\bs_\be(model, key, baroKey), nT_(heightOut(baroIn)) {}\n-62\n-_\b6_\b4 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-65 return boost::static_pointer_cast(\n-66 gtsam::NonlinearFactor::shared_ptr(new _\bT_\bh_\bi_\bs(*this)));\n-67 }\n-68\n-70 void _\bp_\br_\bi_\bn_\bt(\n-71 const std::string& s = \"\",\n-72 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override;\n-73\n-75 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected,\n-76 double tol = 1e-9) const override;\n-77\n-79 Vector evaluateError(\n-80 const _\bP_\bo_\bs_\be_\b3& p, const double& b,\n-81 boost::optional H = boost::none,\n-82 boost::optional H2 = boost::none) const override;\n-83\n-84 inline const double& measurementIn() const { return nT_; }\n-85\n-86 inline double heightOut(double n) const {\n-87 // From https://www.grc.nasa.gov/www/k-12/airplane/atmosmet.html\n-88 return (std::pow(n / 101.29, 1. / 5.256) * 288.08 - 273.1 - 15.04) /\n-89 -0.00649;\n-90 };\n-91\n-92 inline double baroOut(const double& meters) {\n-93 double temp = 15.04 - 0.00649 * meters;\n-94 return 101.29 * std::pow(((temp + 273.1) / 288.08), 5.256);\n-95 };\n-96\n-97 private:\n-_\b9_\b9 friend class boost::serialization::access;\n-100 template \n-101 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-102 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n-compatibility\n-103 ar& boost::serialization::make_nvp(\n-104 \"NoiseModelFactor1\",\n-105 boost::serialization::base_object(*this));\n-106 ar& BOOST_SERIALIZATION_NVP(nT_);\n-107 }\n-108};\n+50template <>\n+51GTSAM_EXPORT\n+52SO4 _\bS_\bO_\b4_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp(const Vector6 &xi, ChartJacobian H);\n+53\n+54template <>\n+55GTSAM_EXPORT\n+56Matrix6 _\bS_\bO_\b4_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp() const;\n+57\n+58template <>\n+59GTSAM_EXPORT\n+60SO4::VectorN2 _\bS_\bO_\b4_\b:_\b:_\bv_\be_\bc(OptionalJacobian<16, 6> H) const;\n+61\n+62template <>\n+63GTSAM_EXPORT\n+64SO4 _\bS_\bO_\b4_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bA_\bt_\bO_\br_\bi_\bg_\bi_\bn_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(const Vector6 &omega, ChartJacobian H);\n+65\n+66template <>\n+67GTSAM_EXPORT\n+68Vector6 SO4::ChartAtOrigin::Local(const SO4 &Q, ChartJacobian H);\n+69\n+73GTSAM_EXPORT Matrix3 _\bt_\bo_\bp_\bL_\be_\bf_\bt(const SO4 &Q, OptionalJacobian<9, 6> H = boost::\n+none);\n+74\n+79GTSAM_EXPORT Matrix43 _\bs_\bt_\bi_\be_\bf_\be_\bl(const SO4 &Q, OptionalJacobian<12, 6> H =\n+boost::none);\n+80\n+82template \n+_\b8_\b3void _\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be(Archive &ar, _\bS_\bO_\b4 &Q, const unsigned int /*version*/) {\n+84 Matrix4 &M = Q.matrix_;\n+85 ar &boost::serialization::make_nvp(\"Q11\", M(0, 0));\n+86 ar &boost::serialization::make_nvp(\"Q12\", M(0, 1));\n+87 ar &boost::serialization::make_nvp(\"Q13\", M(0, 2));\n+88 ar &boost::serialization::make_nvp(\"Q14\", M(0, 3));\n+89\n+90 ar &boost::serialization::make_nvp(\"Q21\", M(1, 0));\n+91 ar &boost::serialization::make_nvp(\"Q22\", M(1, 1));\n+92 ar &boost::serialization::make_nvp(\"Q23\", M(1, 2));\n+93 ar &boost::serialization::make_nvp(\"Q24\", M(1, 3));\n+94\n+95 ar &boost::serialization::make_nvp(\"Q31\", M(2, 0));\n+96 ar &boost::serialization::make_nvp(\"Q32\", M(2, 1));\n+97 ar &boost::serialization::make_nvp(\"Q33\", M(2, 2));\n+98 ar &boost::serialization::make_nvp(\"Q34\", M(2, 3));\n+99\n+100 ar &boost::serialization::make_nvp(\"Q41\", M(3, 0));\n+101 ar &boost::serialization::make_nvp(\"Q42\", M(3, 1));\n+102 ar &boost::serialization::make_nvp(\"Q43\", M(3, 2));\n+103 ar &boost::serialization::make_nvp(\"Q44\", M(3, 3));\n+104}\n+105\n+106/*\n+107 * Define the traits. internal::LieGroup provides both Lie group and\n+Testable\n+108 */\n 109\n-110} // namespace gtsam\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n-_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n-Navigation state composing of attitude, position, and velocity.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+110template <>\n+_\b1_\b1_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bO_\b4> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+112\n+113template <>\n+_\b1_\b1_\b4struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp {};\n+115\n+116} // end namespace gtsam\n+_\bL_\bi_\be_\b._\bh\n+Base class and basic functions for Lie types.\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n+_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n+Base class and basic functions for Manifold types.\n+_\bG_\br_\bo_\bu_\bp_\b._\bh\n+Concept check class for variable types with Group properties.\n+_\bS_\bO_\bn_\b._\bh\n+N*N matrix representation of SO(N).\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-Prior on height in a cartesian frame.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n-BarometricFactor This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-BarometricFactor(Key key, Key baroKey, const double &baroIn, const\n-SharedNoiseModel &model)\n-Constructor from a measurement of pressure in KPa.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< BarometricFactor > shared_ptr\n-shorthand for a smart pointer to a factor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-BarometricFactor()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BarometricFactor.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\be\n+std::string serialize(const T &input)\n+serializes to a string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn serialization.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bs_\bt_\bi_\be_\bf_\be_\bl\n+GTSAM_EXPORT Matrix43 stiefel(const SO4 &Q, OptionalJacobian< 12, 6 > H)\n+Project to Stiefel manifold of 4*3 orthonormal 3-frames in R^4, i.e., pi(Q) -\n+> .\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO4.cpp:220\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\bo_\bp_\bL_\be_\bf_\bt\n+GTSAM_EXPORT Matrix3 topLeft(const SO4 &Q, OptionalJacobian< 9, 6 > H)\n+Project to top-left 3*3 matrix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO4.cpp:206\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\b _\bS_\bO_\b<_\b _\bN_\b _\b>_\b,_\b _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bD_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn_\bS_\bO_\b(_\bN_\b)_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt\n+static SO< N > Retract(const TangentVector &v)\n+Retract at origin: possible in Lie group because it has an identity.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n+Both LieGroupTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:229\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO\n+Manifold of special orthogonal rotation matrices SO.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bE_\bx_\bp_\bm_\ba_\bp\n+static SO Expmap(const TangentVector &omega, ChartJacobian H=boost::none)\n+Exponential map at identity - create a rotation from canonical coordinates.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bv_\be_\bc\n+VectorN2 vec(OptionalJacobian< internal::NSquaredSO(N), dimension > H=boost::\n+none) const\n+Return vectorized rotation matrix in column order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bV_\be_\be\n+static TangentVector Vee(const MatrixNN &X)\n+Inverse of Hat. See note about xi element order in Hat.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bA_\bd_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\bp\n+MatrixDD AdjointMap() const\n+Adjoint map.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SO4.cpp:159\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO_\b:_\b:_\bH_\ba_\bt\n+static MatrixNN Hat(const TangentVector &xi)\n+Hat operator creates Lie algebra element corresponding to d-vector, where d is\n+the dimensionality of ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn-inl.h:29\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bB_\ba_\br_\bo_\bm_\be_\bt_\br_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bS_\bO_\b4_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00950_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00653_source.html", "comments": ["Files 89% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/AHRSFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/EliminationTree.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
AHRSFactor.h
\n+
EliminationTree.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
3* GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
4* Atlanta, Georgia 30332-0415
\n+
5* All Rights Reserved
\n+
6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n-
8 * See LICENSE for the license information
\n+
8* See LICENSE for the license information
\n
9
\n-
10 * -------------------------------------------------------------------------- */
\n+
10* -------------------------------------------------------------------------- */
\n
11
\n-
20#pragma once
\n-
21
\n-
22/* GTSAM includes */
\n-\n-\n-\n-
26
\n-
27namespace gtsam {
\n-
28
\n-
\n-\n-
35
\n-
36 protected:
\n-
37
\n-
38 Vector3 biasHat_;
\n-\n-
40
\n-
41 friend class AHRSFactor;
\n-
42
\n-
43 public:
\n-
44
\n-\n-
47
\n-
\n-
52 PreintegratedAhrsMeasurements(const boost::shared_ptr<Params>& p,
\n-
53 const Vector3& biasHat) :
\n-
54 PreintegratedRotation(p), biasHat_(biasHat) {
\n-
55 resetIntegration();
\n-
56 }
\n+
18#pragma once
\n+
19
\n+
20#include <utility>
\n+
21#include <boost/shared_ptr.hpp>
\n+
22
\n+
23#include <gtsam/base/Testable.h>
\n+\n+
25
\n+
26class EliminationTreeTester; // for unit tests, see testEliminationTree
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
30 class VariableIndex;
\n+
31 class Ordering;
\n+
32
\n+
50 template<class BAYESNET, class GRAPH>
\n+
\n+\n+
52 {
\n+
53 protected:
\n+\n+
55 typedef boost::shared_ptr<This> shared_ptr;
\n+
56
\n+
57 public:
\n+
58 typedef GRAPH FactorGraphType;
\n+
59 typedef typename GRAPH::FactorType FactorType;
\n+
60 typedef typename boost::shared_ptr<FactorType> sharedFactor;
\n+
61 typedef BAYESNET BayesNetType;
\n+
62 typedef typename BayesNetType::ConditionalType ConditionalType;
\n+
63 typedef typename boost::shared_ptr<ConditionalType> sharedConditional;
\n+
64 typedef typename GRAPH::Eliminate Eliminate;
\n+
65
\n+
\n+
66 struct Node {
\n+
67 typedef FastVector<sharedFactor> Factors;
\n+
68 typedef FastVector<boost::shared_ptr<Node> > Children;
\n+
69
\n+\n+
71 Factors factors;
\n+
72 Children children;
\n+
73
\n+
74 sharedFactor eliminate(const boost::shared_ptr<BayesNetType>& output,
\n+
75 const Eliminate& function, const FastVector<sharedFactor>& childrenFactors) const;
\n+
76
\n+
77 void print(const std::string& str, const KeyFormatter& keyFormatter) const;
\n+
78 };
\n
\n-
57
\n-
\n-\n-
68 const boost::shared_ptr<Params>& p,
\n-
69 const Vector3& bias_hat,
\n-
70 double deltaTij,
\n-
71 const Rot3& deltaRij,
\n-
72 const Matrix3& delRdelBiasOmega,
\n-
73 const Matrix3& preint_meas_cov) :
\n-
74 PreintegratedRotation(p, deltaTij, deltaRij, delRdelBiasOmega),
\n-
75 biasHat_(bias_hat),
\n-
76 preintMeasCov_(preint_meas_cov) {}
\n-
\n-
77
\n-
78 Params& p() const { return *boost::static_pointer_cast<Params>(p_);}
\n-
79 const Vector3& biasHat() const { return biasHat_; }
\n-
80 const Matrix3& preintMeasCov() const { return preintMeasCov_; }
\n+
79
\n+
80 typedef boost::shared_ptr<Node> sharedNode;
\n
81
\n-
83 void print(const std::string& s = "Preintegrated Measurements: ") const;
\n-
84
\n-
86 bool equals(const PreintegratedAhrsMeasurements&, double tol = 1e-9) const;
\n-
87
\n-
89 void resetIntegration();
\n-
90
\n-
100 void integrateMeasurement(const Vector3& measuredOmega, double deltaT);
\n-
101
\n-
104 Vector3 predict(const Vector3& bias, OptionalJacobian<3,3> H = boost::none) const;
\n-
105
\n-
106 // This function is only used for test purposes
\n-
107 // (compare numerical derivatives wrt analytic ones)
\n-
108 static Vector DeltaAngles(const Vector& msr_gyro_t, const double msr_dt,
\n-
109 const Vector3& delta_angles);
\n-
110
\n-
\n-
112 PreintegratedAhrsMeasurements(const Vector3& biasHat,
\n-
113 const Matrix3& measuredOmegaCovariance)
\n-
114 : PreintegratedRotation(boost::make_shared<Params>()), biasHat_(biasHat) {
\n-
115 p_->gyroscopeCovariance = measuredOmegaCovariance;
\n-
116 resetIntegration();
\n-
117 }
\n-
\n-
118
\n-
119private:
\n-
120
\n-
122 friend class boost::serialization::access;
\n-
123 template<class ARCHIVE>
\n-
124 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
125 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegratedRotation);
\n-
126 ar & BOOST_SERIALIZATION_NVP(p_);
\n-
127 ar & BOOST_SERIALIZATION_NVP(biasHat_);
\n-
128 }
\n-
129};
\n-
\n-
130
\n-
\n-
131class GTSAM_EXPORT AHRSFactor: public NoiseModelFactorN<Rot3, Rot3, Vector3> {
\n-
132
\n-
133 typedef AHRSFactor This;
\n-\n+
82 protected:
\n+
84 GTSAM_CONCEPT_TESTABLE_TYPE(FactorType)
\n+
85
\n+\n+
87 FastVector<sharedFactor> remainingFactors_;
\n+
88
\n+
91
\n+
100 EliminationTree(const FactorGraphType& factorGraph,
\n+
101 const VariableIndex& structure, const Ordering& order);
\n+
102
\n+
108 EliminationTree(const FactorGraphType& factorGraph, const Ordering& order);
\n+
109
\n+
112 EliminationTree(const This& other) { *this = other; }
\n+
113
\n+
116 This& operator=(const This& other);
\n+
117
\n+
119
\n+
120 public:
\n+
123
\n+
129 std::pair<boost::shared_ptr<BayesNetType>, boost::shared_ptr<FactorGraphType> >
\n+
130 eliminate(Eliminate function) const;
\n+
131
\n
135
\n-\n-
137
\n-
139 AHRSFactor() {}
\n-
140
\n-
141public:
\n-
142
\n-
144#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5
\n-
145 typedef typename boost::shared_ptr<AHRSFactor> shared_ptr;
\n-
146#else
\n-
147 typedef boost::shared_ptr<AHRSFactor> shared_ptr;
\n-
148#endif
\n+
137 void print(const std::string& name = "EliminationTree: ",
\n+
138 const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n+
139
\n+
140 protected:
\n+
142 bool equals(const This& other, double tol = 1e-9) const;
\n+
143
\n+
145
\n+
146 public:
\n
149
\n-
157 AHRSFactor(Key rot_i, Key rot_j, Key bias,
\n-
158 const PreintegratedAhrsMeasurements& preintegratedMeasurements);
\n-
159
\n-
160 ~AHRSFactor() override {
\n-
161 }
\n+
151 const FastVector<sharedNode>& roots() const { return roots_; }
\n+
152
\n+
154 const FastVector<sharedFactor>& remainingFactors() const { return remainingFactors_; }
\n+
155
\n+
157 void swap(This& other);
\n+
158
\n+
159 protected:
\n+\n
162
\n-
164 gtsam::NonlinearFactor::shared_ptr clone() const override;
\n-
165
\n-
167 void print(const std::string& s, const KeyFormatter& keyFormatter =
\n-
168 DefaultKeyFormatter) const override;
\n-
169
\n-
171 bool equals(const NonlinearFactor&, double tol = 1e-9) const override;
\n-
172
\n-
\n-\n-
175 return _PIM_;
\n-
176 }
\n-
\n-
177
\n-
181 Vector evaluateError(const Rot3& rot_i, const Rot3& rot_j,
\n-
182 const Vector3& bias, boost::optional<Matrix&> H1 = boost::none,
\n-
183 boost::optional<Matrix&> H2 = boost::none, boost::optional<Matrix&> H3 =
\n-
184 boost::none) const override;
\n-
185
\n-
188 static Rot3 Predict(const Rot3& rot_i, const Vector3& bias,
\n-\n-
190
\n-
192 AHRSFactor(Key rot_i, Key rot_j, Key bias,
\n-\n-
194 const Vector3& omegaCoriolis,
\n-
195 const boost::optional<Pose3>& body_P_sensor = boost::none);
\n-
196
\n-
198 static Rot3 predict(
\n-
199 const Rot3& rot_i, const Vector3& bias,
\n-
200 const PreintegratedAhrsMeasurements& pim, const Vector3& omegaCoriolis,
\n-
201 const boost::optional<Pose3>& body_P_sensor = boost::none);
\n-
202
\n-
203#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
205 typedef PreintegratedAhrsMeasurements PreintegratedMeasurements;
\n-
206
\n-
207#endif
\n-
208
\n-
209private:
\n-
210
\n-
212 friend class boost::serialization::access;
\n-
213 template<class ARCHIVE>
\n-
214 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
215 // NoiseModelFactor3 instead of NoiseModelFactorN for backward compatibility
\n-
216 ar
\n-
217 & boost::serialization::make_nvp("NoiseModelFactor3",
\n-
218 boost::serialization::base_object<Base>(*this));
\n-
219 ar & BOOST_SERIALIZATION_NVP(_PIM_);
\n-
220 }
\n-
221
\n-
222};
\n-
\n-
223// AHRSFactor
\n-
224
\n-
225} //namespace gtsam
\n-
3D Pose
\n-\n-
Non-linear factor base classes.
\n+
163 private:
\n+
165 friend class ::EliminationTreeTester;
\n+
166 };
\n+
\n+
167
\n+
168}
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
Concept check for values that can be used in unit tests.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::shared_ptr< T > > make_shared(Args &&... args)
Add our own make_shared as a layer of wrapping on boost::make_shared This solves the problem with the...
Definition make_shared.h:57
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
Template to create a binary predicate.
Definition Testable.h:111
\n-
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
PreintegratedAHRSMeasurements accumulates (integrates) the Gyroscope measurements (rotation rates) an...
Definition AHRSFactor.h:34
\n-
Vector3 biasHat_
Angular rate bias values used during preintegration.
Definition AHRSFactor.h:38
\n-
PreintegratedAhrsMeasurements(const Vector3 &biasHat, const Matrix3 &measuredOmegaCovariance)
Definition AHRSFactor.h:112
\n-
PreintegratedAhrsMeasurements(const boost::shared_ptr< Params > &p, const Vector3 &biasHat)
Default constructor, initialize with no measurements.
Definition AHRSFactor.h:52
\n-
Matrix3 preintMeasCov_
Covariance matrix of the preintegrated measurements (first-order propagation from measurementCovarian...
Definition AHRSFactor.h:39
\n-
PreintegratedAhrsMeasurements(const boost::shared_ptr< Params > &p, const Vector3 &bias_hat, double deltaTij, const Rot3 &deltaRij, const Matrix3 &delRdelBiasOmega, const Matrix3 &preint_meas_cov)
Non-Default constructor, initialize with measurements.
Definition AHRSFactor.h:67
\n-
PreintegratedAhrsMeasurements()
Default constructor, only for serialization and wrappers.
Definition AHRSFactor.h:46
\n-
Definition AHRSFactor.h:131
\n-
const PreintegratedAhrsMeasurements & preintegratedMeasurements() const
Access the preintegrated measurements.
Definition AHRSFactor.h:174
\n-
boost::shared_ptr< AHRSFactor > shared_ptr
Shorthand for a smart pointer to a factor.
Definition AHRSFactor.h:147
\n-
Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the c...
Definition PreintegratedRotation.h:31
\n-
PreintegratedRotation is the base class for all PreintegratedMeasurements classes (in AHRSFactor,...
Definition PreintegratedRotation.h:89
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n+
void print(const std::string &name="EliminationTree: ", const KeyFormatter &formatter=DefaultKeyFormatter) const
Print the tree to cout.
Definition EliminationTree-inst.h:207
\n+
std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr< FactorGraphType > > eliminate(Eliminate function) const
Eliminate the factors to a Bayes net and remaining factor graph.
Definition EliminationTree-inst.h:187
\n+
This & operator=(const This &other)
Assignment operator - makes a deep copy of the tree structure, but only pointers to factors are copie...
Definition EliminationTree-inst.h:172
\n+
EliminationTree< BAYESNET, GRAPH > This
This class.
Definition EliminationTree.h:54
\n+
FastVector< sharedNode > roots_
concept check
Definition EliminationTree.h:86
\n+
boost::shared_ptr< FactorType > sharedFactor
Shared pointer to a factor.
Definition EliminationTree.h:60
\n+
BAYESNET BayesNetType
The BayesNet corresponding to FACTOR.
Definition EliminationTree.h:61
\n+
boost::shared_ptr< ConditionalType > sharedConditional
Shared pointer to a conditional.
Definition EliminationTree.h:63
\n+
const FastVector< sharedNode > & roots() const
Return the set of roots (one for a tree, multiple for a forest)
Definition EliminationTree.h:151
\n+
GRAPH FactorGraphType
The factor graph type.
Definition EliminationTree.h:58
\n+
void swap(This &other)
Swap the data of this tree with another one, this operation is very fast.
Definition EliminationTree-inst.h:283
\n+
EliminationTree()
Protected default constructor.
Definition EliminationTree.h:161
\n+
BayesNetType::ConditionalType ConditionalType
The type of conditionals.
Definition EliminationTree.h:62
\n+
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition EliminationTree.h:55
\n+
GRAPH::FactorType FactorType
The type of factors.
Definition EliminationTree.h:59
\n+
boost::shared_ptr< Node > sharedNode
Shared pointer to Node.
Definition EliminationTree.h:80
\n+
const FastVector< sharedFactor > & remainingFactors() const
Return the remaining factors that are not pulled into elimination.
Definition EliminationTree.h:154
\n+
Definition EliminationTree.h:66
\n+
Key key
key associated with root
Definition EliminationTree.h:70
\n+
Children children
sub-trees
Definition EliminationTree.h:72
\n+
Factors factors
factors associated with root
Definition EliminationTree.h:71
\n+
Definition Ordering.h:34
\n+
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,267 +1,237 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-AHRSFactor.h\n+EliminationTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+3* GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+4* Atlanta, Georgia 30332-0415\n+5* All Rights Reserved\n+6* Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n-8 * See LICENSE for the license information\n+8* See LICENSE for the license information\n 9\n-10 * -------------------------------------------------------------------------\n+10* -------------------------------------------------------------------------\n - */\n 11\n-20#pragma once\n-21\n-22/* GTSAM includes */\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn_\b/_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n-26\n-27namespace _\bg_\bt_\bs_\ba_\bm {\n-28\n-_\b3_\b4class GTSAM_EXPORT _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs : public\n-_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn {\n-35\n-36 protected:\n-37\n-_\b3_\b8 Vector3 _\bb_\bi_\ba_\bs_\bH_\ba_\bt_\b_;\n-_\b3_\b9 Matrix3 _\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv_\b_;\n-40\n-41 friend class _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br;\n-42\n-43 public:\n-44\n-_\b4_\b6 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() {}\n-47\n-_\b5_\b2 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const boost::shared_ptr& p,\n-53 const Vector3& biasHat) :\n-54 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn(p), biasHat_(biasHat) {\n-55 resetIntegration();\n-56 }\n-57\n-_\b6_\b7 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(\n-68 const boost::shared_ptr& p,\n-69 const Vector3& bias_hat,\n-70 double deltaTij,\n-71 const _\bR_\bo_\bt_\b3& deltaRij,\n-72 const Matrix3& delRdelBiasOmega,\n-73 const Matrix3& preint_meas_cov) :\n-74 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn(p, deltaTij, deltaRij, delRdelBiasOmega),\n-75 biasHat_(bias_hat),\n-76 preintMeasCov_(preint_meas_cov) {}\n-77\n-78 Params& p() const { return *boost::static_pointer_cast(p_);}\n-79 const Vector3& biasHat() const { return biasHat_; }\n-80 const Matrix3& preintMeasCov() const { return preintMeasCov_; }\n-81\n-83 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"Preintegrated Measurements: \") const;\n-84\n-86 bool equals(const PreintegratedAhrsMeasurements&, double tol = 1e-9) const;\n-87\n-89 void resetIntegration();\n-90\n-100 void integrateMeasurement(const Vector3& measuredOmega, double deltaT);\n-101\n-104 Vector3 predict(const Vector3& bias, OptionalJacobian<3,3> H = boost::none)\n+18#pragma once\n+19\n+20#include \n+21#include \n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+25\n+26class EliminationTreeTester; // for unit tests, see testEliminationTree\n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+30 class VariableIndex;\n+31 class Ordering;\n+32\n+50 template\n+_\b5_\b1 class _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+52 {\n+53 protected:\n+_\b5_\b4 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bB_\bA_\bY_\bE_\bS_\bN_\bE_\bT_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b> _\bT_\bh_\bi_\bs;\n+_\b5_\b5 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+56\n+57 public:\n+_\b5_\b8 typedef GRAPH _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n+_\b5_\b9 typedef typename GRAPH::FactorType _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n+_\b6_\b0 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br;\n+_\b6_\b1 typedef BAYESNET _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n+_\b6_\b2 typedef typename BayesNetType::ConditionalType _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+_\b6_\b3 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl;\n+64 typedef typename GRAPH::Eliminate Eliminate;\n+65\n+_\b6_\b6 struct _\bN_\bo_\bd_\be {\n+67 typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b> Factors;\n+68 typedef _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br_\b<_\bN_\bo_\bd_\be_\b> > Children;\n+69\n+_\b7_\b0 _\bK_\be_\by _\bk_\be_\by;\n+_\b7_\b1 Factors _\bf_\ba_\bc_\bt_\bo_\br_\bs;\n+_\b7_\b2 Children _\bc_\bh_\bi_\bl_\bd_\br_\be_\bn;\n+73\n+74 _\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br eliminate(const boost::shared_ptr& output,\n+75 const Eliminate& function, const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>& childrenFactors)\n const;\n-105\n-106 // This function is only used for test purposes\n-107 // (compare numerical derivatives wrt analytic ones)\n-108 static Vector DeltaAngles(const Vector& msr_gyro_t, const double msr_dt,\n-109 const Vector3& delta_angles);\n-110\n-_\b1_\b1_\b2 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs(const Vector3& biasHat,\n-113 const Matrix3& measuredOmegaCovariance)\n-114 : _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn(boost::_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd<_\bP_\ba_\br_\ba_\bm_\bs>()), biasHat_(biasHat) {\n-115 p_->gyroscopeCovariance = measuredOmegaCovariance;\n-116 resetIntegration();\n-117 }\n-118\n-119private:\n-120\n-_\b1_\b2_\b2 friend class boost::serialization::access;\n-123 template\n-124 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-125 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn);\n-126 ar & BOOST_SERIALIZATION_NVP(p_);\n-127 ar & BOOST_SERIALIZATION_NVP(biasHat_);\n-128 }\n-129};\n-130\n-_\b1_\b3_\b1class GTSAM_EXPORT _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-{\n-132\n-133 typedef _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n-134 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bR_\bo_\bt_\b3_\b,_\b _\bR_\bo_\bt_\b3_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b3_\b> _\bB_\ba_\bs_\be;\n+76\n+77 void print(const std::string& str, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter) const;\n+78 };\n+79\n+_\b8_\b0 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be;\n+81\n+82 protected:\n+84 GTSAM_CONCEPT_TESTABLE_TYPE(_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be)\n+85\n+_\b8_\b6 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br<_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be> _\br_\bo_\bo_\bt_\bs_\b_;\n+87 _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> remainingFactors_;\n+88\n+91\n+100 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factorGraph,\n+101 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+102\n+108 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factorGraph, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n+109\n+_\b1_\b1_\b2 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bT_\bh_\bi_\bs& other) { *this = other; }\n+113\n+116 _\bT_\bh_\bi_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bT_\bh_\bi_\bs& other);\n+117\n+119\n+120 public:\n+123\n+129 std::pair, boost::\n+shared_ptr >\n+130 _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(Eliminate function) const;\n+131\n 135\n-136 _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs _PIM_;\n-137\n-139 _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br() {}\n-140\n-141public:\n-142\n-144#if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5\n-145 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-146#else\n-_\b1_\b4_\b7 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-148#endif\n+137 void _\bp_\br_\bi_\bn_\bt(const std::string& name = \"EliminationTree: \",\n+138 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const;\n+139\n+140 protected:\n+142 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n+143\n+145\n+146 public:\n 149\n-157 _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by rot_i, _\bK_\be_\by rot_j, _\bK_\be_\by bias,\n-158 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& preintegratedMeasurements);\n-159\n-160 _\b~_\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br() override {\n-161 }\n+_\b1_\b5_\b1 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be_\b>& _\br_\bo_\bo_\bt_\bs() const { return _\br_\bo_\bo_\bt_\bs_\b_; }\n+152\n+_\b1_\b5_\b4 const _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b>& _\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs() const { return\n+remainingFactors_; }\n+155\n+157 void _\bs_\bw_\ba_\bp(_\bT_\bh_\bi_\bs& other);\n+158\n+159 protected:\n+_\b1_\b6_\b1 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be() {}\n 162\n-164 gtsam::NonlinearFactor::shared_ptr clone() const override;\n-165\n-167 void _\bp_\br_\bi_\bn_\bt(const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-168 DefaultKeyFormatter) const override;\n-169\n-171 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br&, double tol = 1e-9) const override;\n-172\n-_\b1_\b7_\b4 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& _\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const {\n-175 return _PIM_;\n-176 }\n-177\n-181 Vector evaluateError(const _\bR_\bo_\bt_\b3& rot_i, const _\bR_\bo_\bt_\b3& rot_j,\n-182 const Vector3& bias, boost::optional H1 = boost::none,\n-183 boost::optional H2 = boost::none, boost::optional H3 =\n-184 boost::none) const override;\n-185\n-188 static _\bR_\bo_\bt_\b3 Predict(const _\bR_\bo_\bt_\b3& rot_i, const Vector3& bias,\n-189 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim);\n-190\n-192 _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by rot_i, _\bK_\be_\by rot_j, _\bK_\be_\by bias,\n-193 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim,\n-194 const Vector3& omegaCoriolis,\n-195 const boost::optional& body_P_sensor = boost::none);\n-196\n-198 static _\bR_\bo_\bt_\b3 predict(\n-199 const _\bR_\bo_\bt_\b3& rot_i, const Vector3& bias,\n-200 const _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs& pim, const Vector3& omegaCoriolis,\n-201 const boost::optional& body_P_sensor = boost::none);\n-202\n-203#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-205 typedef _\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs PreintegratedMeasurements;\n-206\n-207#endif\n-208\n-209private:\n-210\n-_\b2_\b1_\b2 friend class boost::serialization::access;\n-213 template\n-214 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-215 // NoiseModelFactor3 instead of NoiseModelFactorN for backward\n-compatibility\n-216 ar\n-217 & boost::serialization::make_nvp(\"NoiseModelFactor3\",\n-218 boost::serialization::base_object(*this));\n-219 ar & BOOST_SERIALIZATION_NVP(_PIM_);\n-220 }\n-221\n-222};\n-223// AHRSFactor\n-224\n-225} //namespace gtsam\n-_\bP_\bo_\bs_\be_\b3_\b._\bh\n-3D Pose\n-_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+163 private:\n+_\b1_\b6_\b5 friend class ::EliminationTreeTester;\n+166 };\n+167\n+168}\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\ba_\bk_\be_\b__\bs_\bh_\ba_\br_\be_\bd\n-gtsam::enable_if_t< needs_eigen_aligned_allocator< T >::value, boost::\n-shared_ptr< T > > make_shared(Args &&... args)\n-Add our own make_shared as a layer of wrapping on boost::make_shared This\n-solves the problem with the...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn make_shared.h:57\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n-symbol GTSAM_USE_QUATERNIO...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedAHRSMeasurements accumulates (integrates) the Gyroscope\n-measurements (rotation rates) an...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bb_\bi_\ba_\bs_\bH_\ba_\bt_\b_\n-Vector3 biasHat_\n-Angular rate bias values used during preintegration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedAhrsMeasurements(const Vector3 &biasHat, const Matrix3\n-&measuredOmegaCovariance)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedAhrsMeasurements(const boost::shared_ptr< Params > &p, const\n-Vector3 &biasHat)\n-Default constructor, initialize with no measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\bM_\be_\ba_\bs_\bC_\bo_\bv_\b_\n-Matrix3 preintMeasCov_\n-Covariance matrix of the preintegrated measurements (first-order propagation\n-from measurementCovarian...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedAhrsMeasurements(const boost::shared_ptr< Params > &p, const\n-Vector3 &bias_hat, double deltaTij, const Rot3 &deltaRij, const Matrix3\n-&delRdelBiasOmega, const Matrix3 &preint_meas_cov)\n-Non-Default constructor, initialize with measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bA_\bh_\br_\bs_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-PreintegratedAhrsMeasurements()\n-Default constructor, only for serialization and wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:46\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:131\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-const PreintegratedAhrsMeasurements & preintegratedMeasurements() const\n-Access the preintegrated measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:174\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< AHRSFactor > shared_ptr\n-Shorthand for a smart pointer to a factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AHRSFactor.h:147\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-Parameters for pre-integration: Usage: Create just a single Params and pass a\n-shared pointer to the c...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\be_\bi_\bn_\bt_\be_\bg_\br_\ba_\bt_\be_\bd_\bR_\bo_\bt_\ba_\bt_\bi_\bo_\bn\n-PreintegratedRotation is the base class for all PreintegratedMeasurements\n-classes (in AHRSFactor,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PreintegratedRotation.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+An elimination tree is a data structure used intermediately during elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &name=\"EliminationTree: \", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const\n+Print the tree to cout.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:207\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+std::pair< boost::shared_ptr< BayesNetType >, boost::shared_ptr<\n+FactorGraphType > > eliminate(Eliminate function) const\n+Eliminate the factors to a Bayes net and remaining factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:187\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+This & operator=(const This &other)\n+Assignment operator - makes a deep copy of the tree structure, but only\n+pointers to factors are copie...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:172\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n+EliminationTree< BAYESNET, GRAPH > This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs_\b_\n+FastVector< sharedNode > roots_\n+concept check\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+boost::shared_ptr< FactorType > sharedFactor\n+Shared pointer to a factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n+BAYESNET BayesNetType\n+The BayesNet corresponding to FACTOR.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:61\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+boost::shared_ptr< ConditionalType > sharedConditional\n+Shared pointer to a conditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\bo_\bo_\bt_\bs\n+const FastVector< sharedNode > & roots() const\n+Return the set of roots (one for a tree, multiple for a forest)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n+GRAPH FactorGraphType\n+The factor graph type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bw_\ba_\bp\n+void swap(This &other)\n+Swap the data of this tree with another one, this operation is very fast.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree-inst.h:283\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n+EliminationTree()\n+Protected default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:161\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n+BayesNetType::ConditionalType ConditionalType\n+The type of conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+Shared pointer to this class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n+GRAPH::FactorType FactorType\n+The type of factors.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bN_\bo_\bd_\be\n+boost::shared_ptr< Node > sharedNode\n+Shared pointer to Node.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\br_\be_\bm_\ba_\bi_\bn_\bi_\bn_\bg_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+const FastVector< sharedFactor > & remainingFactors() const\n+Return the remaining factors that are not pulled into elimination.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:154\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bk_\be_\by\n+Key key\n+key associated with root\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bc_\bh_\bi_\bl_\bd_\br_\be_\bn\n+Children children\n+sub-trees\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bN_\bo_\bd_\be_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs\n+Factors factors\n+factors associated with root\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+The VariableIndex class computes and stores the block column structure of a\n+factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bA_\bH_\bR_\bS_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n+ * _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00968_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01049_source.html", "comments": ["Files 86% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/ImuBias.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Clique.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
ImuBias.h
\n+
ISAM2Clique.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n+
18// \\callgraph
\n
19
\n-\n-
21#include <gtsam/base/VectorSpace.h>
\n-
22#include <iosfwd>
\n-
23#include <boost/serialization/nvp.hpp>
\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
28namespace imuBias {
\n-
29
\n-
\n-
30class GTSAM_EXPORT ConstantBias {
\n-
31private:
\n-
32 Vector3 biasAcc_;
\n-
33 Vector3 biasGyro_;
\n-
34
\n-
35public:
\n-
37 static const size_t dimension = 6;
\n-
38
\n-
41
\n-
42 ConstantBias() :
\n-
43 biasAcc_(0.0, 0.0, 0.0), biasGyro_(0.0, 0.0, 0.0) {
\n-
44 }
\n+
20#pragma once
\n+
21
\n+\n+
23#include <gtsam/inference/Key.h>
\n+\n+\n+\n+
27#include <string>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n+
\n+
36class GTSAM_EXPORT ISAM2Clique
\n+
37 : public BayesTreeCliqueBase<ISAM2Clique, GaussianFactorGraph> {
\n+
38 public:
\n+
39 typedef ISAM2Clique This;
\n+\n+
41 typedef boost::shared_ptr<This> shared_ptr;
\n+
42 typedef boost::weak_ptr<This> weak_ptr;
\n+\n+
44 typedef ConditionalType::shared_ptr sharedConditional;
\n
45
\n-
46 ConstantBias(const Vector3& biasAcc, const Vector3& biasGyro) :
\n-
47 biasAcc_(biasAcc), biasGyro_(biasGyro) {
\n-
48 }
\n-
49
\n-
50 explicit ConstantBias(const Vector6& v) :
\n-
51 biasAcc_(v.head<3>()), biasGyro_(v.tail<3>()) {
\n-
52 }
\n-
53
\n+
46 Base::FactorType::shared_ptr cachedFactor_;
\n+
47 Vector gradientContribution_;
\n+
48#ifdef USE_BROKEN_FAST_BACKSUBSTITUTE
\n+
49 mutable FastMap<Key, VectorValues::iterator> solnPointers_;
\n+
50#endif
\n+
51
\n+
53 ISAM2Clique() : Base() {}
\n+
54 virtual ~ISAM2Clique() = default;
\n
55
\n-
\n-
57 Vector6 vector() const {
\n-
58 Vector6 v;
\n-
59 v << biasAcc_, biasGyro_;
\n-
60 return v;
\n-
61 }
\n+
\n+\n+
59 : Base(other),
\n+
60 cachedFactor_(other.cachedFactor_),
\n+
61 gradientContribution_(other.gradientContribution_) {}
\n
\n
62
\n-
\n-
64 const Vector3& accelerometer() const {
\n-
65 return biasAcc_;
\n-
66 }
\n-
\n-
67
\n-
\n-
69 const Vector3& gyroscope() const {
\n-
70 return biasGyro_;
\n-
71 }
\n-
\n-
72
\n-
\n-
74 Vector3 correctAccelerometer(const Vector3& measurement,
\n-
75 OptionalJacobian<3, 6> H1 = boost::none,
\n-
76 OptionalJacobian<3, 3> H2 = boost::none) const {
\n-
77 if (H1) (*H1) << -I_3x3, Z_3x3;
\n-
78 if (H2) (*H2) << I_3x3;
\n-
79 return measurement - biasAcc_;
\n-
80 }
\n-
\n+
\n+\n+
66 Base::operator=(other);
\n+
67 cachedFactor_ = other.cachedFactor_;
\n+
68 gradientContribution_ = other.gradientContribution_;
\n+
69 return *this;
\n+
70 }
\n+
\n+
71
\n+
73 void setEliminationResult(
\n+
74 const FactorGraphType::EliminationResult& eliminationResult);
\n+
75
\n+
77 Base::FactorType::shared_ptr& cachedFactor() { return cachedFactor_; }
\n+
78
\n+
80 const Vector& gradientContribution() const { return gradientContribution_; }
\n
81
\n-
\n-
83 Vector3 correctGyroscope(const Vector3& measurement,
\n-
84 OptionalJacobian<3, 6> H1 = boost::none,
\n-
85 OptionalJacobian<3, 3> H2 = boost::none) const {
\n-
86 if (H1) (*H1) << Z_3x3, -I_3x3;
\n-
87 if (H2) (*H2) << I_3x3;
\n-
88 return measurement - biasGyro_;
\n-
89 }
\n-
\n+
83 void addGradientAtZero(VectorValues* g) const;
\n+
84
\n+
85 bool equals(const This& other, double tol = 1e-9) const;
\n+
86
\n+
88 void print(const std::string& s = "",
\n+
89 const KeyFormatter& formatter = DefaultKeyFormatter) const override;
\n
90
\n-
93
\n-
95 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n-
96 const ConstantBias& bias);
\n-
97
\n-
99 void print(const std::string& s = "") const;
\n-
100
\n-
\n-
102 inline bool equals(const ConstantBias& expected, double tol = 1e-5) const {
\n-
103 return equal_with_abs_tol(biasAcc_, expected.biasAcc_, tol)
\n-
104 && equal_with_abs_tol(biasGyro_, expected.biasGyro_, tol);
\n-
105 }
\n-
\n-
106
\n-
110
\n-
\n-\n-
113 return ConstantBias();
\n-
114 }
\n-
\n-
115
\n-
\n-
117 inline ConstantBias operator-() const {
\n-
118 return ConstantBias(-biasAcc_, -biasGyro_);
\n-
119 }
\n-
\n-
120
\n-
\n-
122 ConstantBias operator+(const Vector6& v) const {
\n-
123 return ConstantBias(biasAcc_ + v.head<3>(), biasGyro_ + v.tail<3>());
\n-
124 }
\n-
\n-
125
\n-
\n-\n-
128 return ConstantBias(biasAcc_ + b.biasAcc_, biasGyro_ + b.biasGyro_);
\n-
129 }
\n-
\n-
130
\n-
\n-\n-
133 return ConstantBias(biasAcc_ - b.biasAcc_, biasGyro_ - b.biasGyro_);
\n-
134 }
\n-
\n+
91 void optimizeWildfire(const KeySet& replaced, double threshold,
\n+
92 KeySet* changed, VectorValues* delta,
\n+
93 size_t* count) const;
\n+
94
\n+
95 bool optimizeWildfireNode(const KeySet& replaced, double threshold,
\n+
96 KeySet* changed, VectorValues* delta,
\n+
97 size_t* count) const;
\n+
98
\n+
103 void nnz_internal(size_t* result) const;
\n+
104 size_t calculate_nnz() const;
\n+
105
\n+
121 void findAll(const KeySet& markedMask, KeySet* keys) const;
\n+
122
\n+
123 private:
\n+
128 bool isDirty(const KeySet& replaced, const KeySet& changed) const;
\n+
129
\n+
134 void fastBackSubstitute(VectorValues* delta) const;
\n
135
\n-
137
\n-
138#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
141 ConstantBias GTSAM_DEPRECATED inverse() { return -(*this); }
\n-
142 ConstantBias GTSAM_DEPRECATED compose(const ConstantBias& q) {
\n-
143 return (*this) + q;
\n-
144 }
\n-
145 ConstantBias GTSAM_DEPRECATED between(const ConstantBias& q) {
\n-
146 return q - (*this);
\n-
147 }
\n-
148 Vector6 GTSAM_DEPRECATED localCoordinates(const ConstantBias& q) {
\n-
149 return (q - (*this)).vector();
\n-
150 }
\n-
151 ConstantBias GTSAM_DEPRECATED retract(const Vector6& v) {
\n-
152 return (*this) + ConstantBias(v);
\n-
153 }
\n-
154 static Vector6 GTSAM_DEPRECATED Logmap(const ConstantBias& p) {
\n-
155 return p.vector();
\n-
156 }
\n-
157 static ConstantBias GTSAM_DEPRECATED Expmap(const Vector6& v) {
\n-
158 return ConstantBias(v);
\n-
159 }
\n-
161#endif
\n-
162
\n-
163private:
\n-
164
\n-
167
\n-
169 friend class boost::serialization::access;
\n-
170 template<class ARCHIVE>
\n-
171 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
172 ar & BOOST_SERIALIZATION_NVP(biasAcc_);
\n-
173 ar & BOOST_SERIALIZATION_NVP(biasGyro_);
\n-
174 }
\n-
175
\n-
176
\n-
177public:
\n-\n-
180
\n-
181}; // ConstantBias class
\n-
\n-
182} // namespace imuBias
\n-
183
\n-
184template<>
\n-
\n-
185struct traits<imuBias::ConstantBias> : public internal::VectorSpace<
\n-
186 imuBias::ConstantBias> {
\n-
187};
\n-
\n-
188
\n-
189} // namespace gtsam
\n-
190
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW
This marks a GTSAM object to require alignment.
Definition types.h:308
\n-
Special class for optional Jacobian arguments.
\n+
136 /*
\n+
137 * Check whether the values changed above a threshold, or always true if the
\n+
138 * clique was replaced.
\n+
139 */
\n+
140 bool valuesChanged(const KeySet& replaced, const Vector& originalValues,
\n+
141 const VectorValues& delta, double threshold) const;
\n+
142
\n+
144 void markFrontalsAsChanged(KeySet* changed) const;
\n+
145
\n+
147 void restoreFromOriginals(const Vector& originalValues,
\n+
148 VectorValues* delta) const;
\n+
149
\n+
151 friend class boost::serialization::access;
\n+
152 template <class ARCHIVE>
\n+
153 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
154 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
155 ar& BOOST_SERIALIZATION_NVP(cachedFactor_);
\n+
156 ar& BOOST_SERIALIZATION_NVP(gradientContribution_);
\n+
157 }
\n+
158}; // \\struct ISAM2Clique
\n+
\n+
159
\n+
171size_t optimizeWildfire(const ISAM2Clique::shared_ptr& root, double threshold,
\n+
172 const KeySet& replaced, VectorValues* delta);
\n+
173
\n+
174size_t optimizeWildfireNonRecursive(const ISAM2Clique::shared_ptr& root,
\n+
175 double threshold, const KeySet& replaced,
\n+
176 VectorValues* delta);
\n+
177
\n+
178} // namespace gtsam
\n+\n+
Base class for cliques of a BayesTree.
\n+
Chordal Bayes Net, the result of eliminating a factor graph.
\n+
Linear Factor Graph where all factors are Gaussians.
\n+
Conditional Gaussian Base class.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n+
size_t optimizeWildfire(const ISAM2Clique::shared_ptr &root, double threshold, const KeySet &keys, VectorValues *delta)
Optimize the BayesTree, starting from the root.
Definition ISAM2Clique.cpp:226
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::DenseBase< MATRIX > &B, double tol=1e-9)
equals with a tolerance
Definition Matrix.h:81
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n-
VectorSpace provides both Testable and VectorSpaceTraits.
Definition VectorSpace.h:207
\n-
Definition ImuBias.h:30
\n-
const Vector3 & gyroscope() const
get gyroscope bias
Definition ImuBias.h:69
\n-
static ConstantBias Identity()
identity for group operation
Definition ImuBias.h:112
\n-
bool equals(const ConstantBias &expected, double tol=1e-5) const
equality up to tolerance
Definition ImuBias.h:102
\n-
ConstantBias operator-(const ConstantBias &b) const
subtraction
Definition ImuBias.h:132
\n-
Vector3 correctAccelerometer(const Vector3 &measurement, OptionalJacobian< 3, 6 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
Correct an accelerometer measurement using this bias model, and optionally compute Jacobians.
Definition ImuBias.h:74
\n-
ConstantBias operator-() const
inverse
Definition ImuBias.h:117
\n-
Vector3 correctGyroscope(const Vector3 &measurement, OptionalJacobian< 3, 6 > H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const
Correct a gyroscope measurement using this bias model, and optionally compute Jacobians.
Definition ImuBias.h:83
\n-
Vector6 vector() const
return the accelerometer and gyro biases in a single vector
Definition ImuBias.h:57
\n-
ConstantBias operator+(const Vector6 &v) const
addition of vector on right
Definition ImuBias.h:122
\n-
ConstantBias operator+(const ConstantBias &b) const
addition
Definition ImuBias.h:127
\n-
const Vector3 & accelerometer() const
get accelerometer bias
Definition ImuBias.h:64
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
This is the base class for BayesTree cliques.
Definition BayesTreeCliqueBase.h:50
\n+
A GaussianConditional functions as the node in a Bayes network.
Definition GaussianConditional.h:43
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianConditional.h:46
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
Specialized Clique structure for ISAM2, incorporating caching and gradient contribution TODO: more do...
Definition ISAM2Clique.h:37
\n+
const Vector & gradientContribution() const
Access the gradient contribution.
Definition ISAM2Clique.h:80
\n+
ISAM2Clique(const ISAM2Clique &other)
Copy constructor, does not copy solution pointers as these are invalid in different trees.
Definition ISAM2Clique.h:58
\n+
ISAM2Clique & operator=(const ISAM2Clique &other)
Assignment operator, does not copy solution pointers as these are invalid in different trees.
Definition ISAM2Clique.h:65
\n+
Base::FactorType::shared_ptr & cachedFactor()
Access the cached factor.
Definition ISAM2Clique.h:77
\n+
ISAM2Clique()
Default constructor.
Definition ISAM2Clique.h:53
\n+
The Factor::error simply extracts the.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,245 +1,205 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ImuBias.h\n+ISAM2Clique.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n+18// \\callgraph\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh>\n-21#include \n-22#include \n-23#include \n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-28namespace imuBias {\n-29\n-_\b3_\b0class GTSAM_EXPORT _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs {\n-31private:\n-32 Vector3 biasAcc_;\n-33 Vector3 biasGyro_;\n-34\n-35public:\n-_\b3_\b7 static const size_t dimension = 6;\n-38\n-41\n-42 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs() :\n-43 biasAcc_(0.0, 0.0, 0.0), biasGyro_(0.0, 0.0, 0.0) {\n-44 }\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+_\b3_\b6class GTSAM_EXPORT _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n+37 : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be {\n+38 public:\n+39 typedef _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be _\bT_\bh_\bi_\bs;\n+40 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bT_\bh_\bi_\bs_\b,_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> Base;\n+41 typedef boost::shared_ptr shared_ptr;\n+42 typedef boost::weak_ptr weak_ptr;\n+43 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+44 typedef _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br sharedConditional;\n 45\n-46 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs(const Vector3& biasAcc, const Vector3& biasGyro) :\n-47 biasAcc_(biasAcc), biasGyro_(biasGyro) {\n-48 }\n-49\n-50 explicit ConstantBias(const Vector6& v) :\n-51 biasAcc_(v.head<3>()), biasGyro_(v.tail<3>()) {\n-52 }\n-53\n+46 Base::FactorType::shared_ptr cachedFactor_;\n+47 Vector gradientContribution_;\n+48#ifdef USE_BROKEN_FAST_BACKSUBSTITUTE\n+49 mutable _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bo_\br_\b> solnPointers_;\n+50#endif\n+51\n+_\b5_\b3 _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be() : Base() {}\n+54 virtual _\b~_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be() = default;\n 55\n-_\b5_\b7 Vector6 _\bv_\be_\bc_\bt_\bo_\br() const {\n-58 Vector6 v;\n-59 v << biasAcc_, biasGyro_;\n-60 return v;\n-61 }\n+_\b5_\b8 _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be(const _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be& other)\n+59 : Base(other),\n+60 cachedFactor_(other.cachedFactor_),\n+61 gradientContribution_(other.gradientContribution_) {}\n 62\n-_\b6_\b4 const Vector3& _\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br() const {\n-65 return biasAcc_;\n-66 }\n-67\n-_\b6_\b9 const Vector3& _\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be() const {\n-70 return biasGyro_;\n-71 }\n-72\n-_\b7_\b4 Vector3 _\bc_\bo_\br_\br_\be_\bc_\bt_\bA_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br(const Vector3& measurement,\n-75 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> H1 = boost::none,\n-76 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const {\n-77 if (H1) (*H1) << -I_3x3, Z_3x3;\n-78 if (H2) (*H2) << I_3x3;\n-79 return measurement - biasAcc_;\n-80 }\n+_\b6_\b5 _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=(const _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be& other) {\n+66 Base::operator=(other);\n+67 cachedFactor_ = other.cachedFactor_;\n+68 gradientContribution_ = other.gradientContribution_;\n+69 return *this;\n+70 }\n+71\n+73 void setEliminationResult(\n+74 const FactorGraphType::EliminationResult& eliminationResult);\n+75\n+_\b7_\b7 Base::FactorType::shared_ptr& _\bc_\ba_\bc_\bh_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br() { return cachedFactor_; }\n+78\n+_\b8_\b0 const Vector& _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bC_\bo_\bn_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn() const { return gradientContribution_; }\n 81\n-_\b8_\b3 Vector3 _\bc_\bo_\br_\br_\be_\bc_\bt_\bG_\by_\br_\bo_\bs_\bc_\bo_\bp_\be(const Vector3& measurement,\n-84 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> H1 = boost::none,\n-85 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const {\n-86 if (H1) (*H1) << Z_3x3, -I_3x3;\n-87 if (H2) (*H2) << I_3x3;\n-88 return measurement - biasGyro_;\n-89 }\n+83 void addGradientAtZero(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* g) const;\n+84\n+85 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n+86\n+88 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+89 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override;\n 90\n-93\n-95 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n-96 const _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& bias);\n-97\n-99 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n-100\n-_\b1_\b0_\b2 inline bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& expected, double tol = 1e-5) const {\n-103 return _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(biasAcc_, expected.biasAcc_, tol)\n-104 && _\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl(biasGyro_, expected.biasGyro_, tol);\n-105 }\n-106\n-110\n-_\b1_\b1_\b2 static _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bI_\bd_\be_\bn_\bt_\bi_\bt_\by() {\n-113 return _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs();\n-114 }\n-115\n-_\b1_\b1_\b7 inline _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-() const {\n-118 return _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs(-biasAcc_, -biasGyro_);\n-119 }\n-120\n-_\b1_\b2_\b2 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const Vector6& v) const {\n-123 return _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs(biasAcc_ + v.head<3>(), biasGyro_ + v.tail<3>());\n-124 }\n-125\n-_\b1_\b2_\b7 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+(const _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& b) const {\n-128 return _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs(biasAcc_ + b.biasAcc_, biasGyro_ + b.biasGyro_);\n-129 }\n-130\n-_\b1_\b3_\b2 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-(const _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs& b) const {\n-133 return _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs(biasAcc_ - b.biasAcc_, biasGyro_ - b.biasGyro_);\n-134 }\n+91 void _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bW_\bi_\bl_\bd_\bf_\bi_\br_\be(const _\bK_\be_\by_\bS_\be_\bt& replaced, double threshold,\n+92 _\bK_\be_\by_\bS_\be_\bt* changed, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta,\n+93 size_t* count) const;\n+94\n+95 bool optimizeWildfireNode(const _\bK_\be_\by_\bS_\be_\bt& replaced, double threshold,\n+96 _\bK_\be_\by_\bS_\be_\bt* changed, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta,\n+97 size_t* count) const;\n+98\n+103 void nnz_internal(size_t* result) const;\n+104 size_t calculate_nnz() const;\n+105\n+121 void findAll(const _\bK_\be_\by_\bS_\be_\bt& markedMask, _\bK_\be_\by_\bS_\be_\bt* keys) const;\n+122\n+123 private:\n+128 bool isDirty(const _\bK_\be_\by_\bS_\be_\bt& replaced, const _\bK_\be_\by_\bS_\be_\bt& changed) const;\n+129\n+134 void fastBackSubstitute(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta) const;\n 135\n-137\n-138#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-141 _\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs GTSAM_DEPRECATED inverse() { return -(*this); }\n-142 ConstantBias GTSAM_DEPRECATED compose(const ConstantBias& q) {\n-143 return (*this) + q;\n-144 }\n-145 ConstantBias GTSAM_DEPRECATED between(const ConstantBias& q) {\n-146 return q - (*this);\n-147 }\n-148 Vector6 GTSAM_DEPRECATED localCoordinates(const ConstantBias& q) {\n-149 return (q - (*this)).vector();\n-150 }\n-151 ConstantBias GTSAM_DEPRECATED retract(const Vector6& v) {\n-152 return (*this) + ConstantBias(v);\n-153 }\n-154 static Vector6 GTSAM_DEPRECATED Logmap(const ConstantBias& p) {\n-155 return p.vector();\n-156 }\n-157 static ConstantBias GTSAM_DEPRECATED Expmap(const Vector6& v) {\n-158 return ConstantBias(v);\n-159 }\n-161#endif\n-162\n-163private:\n-164\n-167\n-_\b1_\b6_\b9 friend class boost::serialization::access;\n-170 template\n-171 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-172 ar & BOOST_SERIALIZATION_NVP(biasAcc_);\n-173 ar & BOOST_SERIALIZATION_NVP(biasGyro_);\n-174 }\n-175\n-176\n-177public:\n-178 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-180\n-181}; // ConstantBias class\n-182} // namespace imuBias\n-183\n-184template<>\n-_\b1_\b8_\b5struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be<\n-186 imuBias::ConstantBias> {\n-187};\n-188\n-189} // namespace gtsam\n-190\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:308\n-_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b._\bh\n-Special class for optional Jacobian arguments.\n+136 /*\n+137 * Check whether the values changed above a threshold, or always true if the\n+138 * clique was replaced.\n+139 */\n+140 bool valuesChanged(const _\bK_\be_\by_\bS_\be_\bt& replaced, const Vector& originalValues,\n+141 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& delta, double threshold) const;\n+142\n+144 void markFrontalsAsChanged(_\bK_\be_\by_\bS_\be_\bt* changed) const;\n+145\n+147 void restoreFromOriginals(const Vector& originalValues,\n+148 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta) const;\n+149\n+_\b1_\b5_\b1 friend class boost::serialization::access;\n+152 template \n+153 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+154 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);\n+155 ar& BOOST_SERIALIZATION_NVP(cachedFactor_);\n+156 ar& BOOST_SERIALIZATION_NVP(gradientContribution_);\n+157 }\n+158}; // \\struct ISAM2Clique\n+159\n+171size_t _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bW_\bi_\bl_\bd_\bf_\bi_\br_\be(const ISAM2Clique::shared_ptr& root, double\n+threshold,\n+172 const KeySet& replaced, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta);\n+173\n+174size_t optimizeWildfireNonRecursive(const ISAM2Clique::shared_ptr& root,\n+175 double threshold, const KeySet& replaced,\n+176 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs* delta);\n+177\n+178} // namespace gtsam\n+_\bK_\be_\by_\b._\bh\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n+Base class for cliques of a BayesTree.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+Chordal Bayes Net, the result of eliminating a factor graph.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linear Factor Graph where all factors are Gaussians.\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n+Conditional Gaussian Base class.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be_\bW_\bi_\bl_\bd_\bf_\bi_\br_\be\n+size_t optimizeWildfire(const ISAM2Clique::shared_ptr &root, double threshold,\n+const KeySet &keys, VectorValues *delta)\n+Optimize the BayesTree, starting from the root.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.cpp:226\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\b__\bw_\bi_\bt_\bh_\b__\ba_\bb_\bs_\b__\bt_\bo_\bl\n-bool equal_with_abs_tol(const Eigen::DenseBase< MATRIX > &A, const Eigen::\n-DenseBase< MATRIX > &B, double tol=1e-9)\n-equals with a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n-OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n-either a fixed size o...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bS_\bp_\ba_\bc_\be\n-VectorSpace provides both Testable and VectorSpaceTraits.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorSpace.h:207\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bg_\by_\br_\bo_\bs_\bc_\bo_\bp_\be\n-const Vector3 & gyroscope() const\n-get gyroscope bias\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bI_\bd_\be_\bn_\bt_\bi_\bt_\by\n-static ConstantBias Identity()\n-identity for group operation\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:112\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const ConstantBias &expected, double tol=1e-5) const\n-equality up to tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:102\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-ConstantBias operator-(const ConstantBias &b) const\n-subtraction\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:132\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bc_\bo_\br_\br_\be_\bc_\bt_\bA_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br\n-Vector3 correctAccelerometer(const Vector3 &measurement, OptionalJacobian< 3, 6\n-> H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const\n-Correct an accelerometer measurement using this bias model, and optionally\n-compute Jacobians.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b-\n-ConstantBias operator-() const\n-inverse\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bc_\bo_\br_\br_\be_\bc_\bt_\bG_\by_\br_\bo_\bs_\bc_\bo_\bp_\be\n-Vector3 correctGyroscope(const Vector3 &measurement, OptionalJacobian< 3, 6 >\n-H1=boost::none, OptionalJacobian< 3, 3 > H2=boost::none) const\n-Correct a gyroscope measurement using this bias model, and optionally compute\n-Jacobians.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bv_\be_\bc_\bt_\bo_\br\n-Vector6 vector() const\n-return the accelerometer and gyro biases in a single vector\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-ConstantBias operator+(const Vector6 &v) const\n-addition of vector on right\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:122\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b+\n-ConstantBias operator+(const ConstantBias &b) const\n-addition\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:127\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bm_\bu_\bB_\bi_\ba_\bs_\b:_\b:_\bC_\bo_\bn_\bs_\bt_\ba_\bn_\bt_\bB_\bi_\ba_\bs_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\bo_\bm_\be_\bt_\be_\br\n-const Vector3 & accelerometer() const\n-get accelerometer bias\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ImuBias.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+This is the base class for BayesTree cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+A GaussianConditional functions as the node in a Bayes network.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianConditional.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n+Specialized Clique structure for ISAM2, incorporating caching and gradient\n+contribution TODO: more do...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bC_\bo_\bn_\bt_\br_\bi_\bb_\bu_\bt_\bi_\bo_\bn\n+const Vector & gradientContribution() const\n+Access the gradient contribution.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n+ISAM2Clique(const ISAM2Clique &other)\n+Copy constructor, does not copy solution pointers as these are invalid in\n+different trees.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b=\n+ISAM2Clique & operator=(const ISAM2Clique &other)\n+Assignment operator, does not copy solution pointers as these are invalid in\n+different trees.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bc_\ba_\bc_\bh_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+Base::FactorType::shared_ptr & cachedFactor()\n+Access the cached factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n+ISAM2Clique()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:53\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bI_\bm_\bu_\bB_\bi_\ba_\bs_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00980.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01295.html", "comments": ["Files 74% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/CombinedImuFactor.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartFactorParams.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n \n
\n \n-
CombinedImuFactor.cpp File Reference
\n+Enumerations
\n+
SmartFactorParams.h File Reference
\n \n
\n+\n+

Collect common parameters for SmartProjection and SmartStereoProjection factors. \n+More...

\n+\n+

Go to the source code of this file.

\n \n+\n+\n+\n+

\n+Classes

struct  gtsam::SmartProjectionParams
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\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-Macros

\n-#define D_R_R(H)   (H)->block<3,3>(0,0)
 
\n-#define D_R_t(H)   (H)->block<3,3>(0,3)
 
\n-#define D_R_v(H)   (H)->block<3,3>(0,6)
 
\n-#define D_t_R(H)   (H)->block<3,3>(3,0)
 
\n-#define D_t_t(H)   (H)->block<3,3>(3,3)
 
\n-#define D_t_v(H)   (H)->block<3,3>(3,6)
 
\n-#define D_v_R(H)   (H)->block<3,3>(6,0)
 
\n-#define D_v_t(H)   (H)->block<3,3>(6,3)
 
\n-#define D_v_v(H)   (H)->block<3,3>(6,6)
 
\n-#define D_a_a(H)   (H)->block<3,3>(9,9)
 
\n-#define D_g_g(H)   (H)->block<3,3>(12,12)
 
\n-\n-\n-\n+\n+\n+\n+\n+\n+\n+\n

\n-Functions

\n-std::ostream & gtsam::operator<< (std::ostream &os, const CombinedImuFactor &f)
 

\n+Enumerations

enum  gtsam::LinearizationMode { HESSIAN\n+, IMPLICIT_SCHUR\n+, JACOBIAN_Q\n+, JACOBIAN_SVD\n+ }
 SmartFactorParams: parameters and (linearization/degeneracy) modes for SmartProjection and SmartStereoProjection factors. More...
 
enum  gtsam::DegeneracyMode { IGNORE_DEGENERACY\n+, ZERO_ON_DEGENERACY\n+, HANDLE_INFINITY\n+ }
 How to manage degeneracy.
 
\n

Detailed Description

\n-
Author
Luca Carlone
\n-
\n-Stephen Williams
\n-
\n-Richard Roberts
\n-
\n-Vadim Indelman
\n-
\n-David Jensen
\n+

Collect common parameters for SmartProjection and SmartStereoProjection factors.

\n+
Author
Luca Carlone
\n
\n-Frank Dellaert
\n+Zsolt Kira \n
\n-Varun Agrawal
\n+Frank Dellaert
\n
\n \n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,51 +1,38 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bM_\ba_\bc_\br_\bo_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-CombinedImuFactor.cpp File Reference\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bE_\bn_\bu_\bm_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n+SmartFactorParams.h File Reference\n+Collect common parameters for SmartProjection and SmartStereoProjection\n+factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+C\bCl\bla\bas\bss\bse\bes\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bP_\br_\bo_\bj_\be_\bc_\bt_\bi_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n+\u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-M\bMa\bac\bcr\bro\bos\bs\n-#define\u00a0 D\bD_\b_R\bR_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,0)\n-\u00a0\n-#define\u00a0 D\bD_\b_R\bR_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,3)\n-\u00a0\n-#define\u00a0 D\bD_\b_R\bR_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(0,6)\n-\u00a0\n-#define\u00a0 D\bD_\b_t\bt_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,0)\n-\u00a0\n-#define\u00a0 D\bD_\b_t\bt_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,3)\n-\u00a0\n-#define\u00a0 D\bD_\b_t\bt_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(3,6)\n-\u00a0\n-#define\u00a0 D\bD_\b_v\bv_\b_R\bR(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,0)\n-\u00a0\n-#define\u00a0 D\bD_\b_v\bv_\b_t\bt(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,3)\n-\u00a0\n-#define\u00a0 D\bD_\b_v\bv_\b_v\bv(H)\u00a0\u00a0\u00a0(H)->block<3,3>(6,6)\n-\u00a0\n-#define\u00a0 D\bD_\b_a\ba_\b_a\ba(H)\u00a0\u00a0\u00a0(H)->block<3,3>(9,9)\n-\u00a0\n-#define\u00a0 D\bD_\b_g\bg_\b_g\bg(H)\u00a0\u00a0\u00a0(H)->block<3,3>(12,12)\n-\u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-std::ostream &\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:o\bop\bpe\ber\bra\bat\bto\bor\br<\b<<\b< (std::ostream &os, const _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br\n- &f)\n+E\bEn\bnu\bum\bme\ber\bra\bat\bti\bio\bon\bns\bs\n+enum \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bM_\bo_\bd_\be { H\bHE\bES\bSS\bSI\bIA\bAN\bN , I\bIM\bMP\bPL\bLI\bIC\bCI\bIT\bT_\b_S\bSC\bCH\bHU\bUR\bR , J\bJA\bAC\bCO\bOB\bBI\bIA\bAN\bN_\b_Q\bQ ,\n+ J\bJA\bAC\bCO\bOB\bBI\bIA\bAN\bN_\b_S\bSV\bVD\bD }\n+\u00a0 SmartFactorParams: parameters and (linearization/degeneracy) modes for\n+ SmartProjection and SmartStereoProjection factors. _\bM_\bo_\br_\be_\b._\b._\b.\n+\u00a0\n+enum \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bg_\be_\bn_\be_\br_\ba_\bc_\by_\bM_\bo_\bd_\be { I\bIG\bGN\bNO\bOR\bRE\bE_\b_D\bDE\bEG\bGE\bEN\bNE\bER\bRA\bAC\bCY\bY , Z\bZE\bER\bRO\bO_\b_O\bON\bN_\b_D\bDE\bEG\bGE\bEN\bNE\bER\bRA\bAC\bCY\bY ,\n+ H\bHA\bAN\bND\bDL\bLE\bE_\b_I\bIN\bNF\bFI\bIN\bNI\bIT\bTY\bY }\n+\u00a0 How to manage degeneracy.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Collect common parameters for SmartProjection and SmartStereoProjection\n+factors.\n Author\n Luca Carlone\n- Stephen Williams\n- Richard Roberts\n- Vadim Indelman\n- David Jensen\n+ Zsolt Kira\n Frank Dellaert\n- Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n- * _\bC_\bo_\bm_\bb_\bi_\bn_\be_\bd_\bI_\bm_\bu_\bF_\ba_\bc_\bt_\bo_\br_\b._\bc_\bp_\bp\n+ * _\bs_\bl_\ba_\bm\n+ * _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a00998_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00926_source.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n
ManifoldPreintegration.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
22#pragma once
\n
23
\n-\n-\n+\n+\n
26
\n
27namespace gtsam {
\n
28
\n
\n
33class GTSAM_EXPORT ManifoldPreintegration : public PreintegrationBase {
\n
34 protected:
\n
35
\n@@ -189,16 +189,16 @@\n
126 ar & BOOST_SERIALIZATION_NVP(delVdelBiasAcc_);
\n
127 ar & BOOST_SERIALIZATION_NVP(delVdelBiasOmega_);
\n
128 }
\n
129};
\n
\n
130
\n
131}
\n-\n-
Navigation state composing of attitude, position, and velocity.
\n+\n+
Navigation state composing of attitude, position, and velocity.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
Definition ImuBias.h:30
\n
IMU pre-integration on NavSatet manifold.
Definition ManifoldPreintegration.h:33
\n
ManifoldPreintegration()
Default constructor for serialization.
Definition ManifoldPreintegration.h:49
\n
Matrix3 delVdelBiasAcc_
Jacobian of preintegrated velocity w.r.t. acceleration bias.
Definition ManifoldPreintegration.h:45
\n
Matrix3 delRdelBiasOmega_
Jacobian of preintegrated rotation w.r.t. angular rate bias.
Definition ManifoldPreintegration.h:42
\n
Matrix3 delPdelBiasAcc_
Jacobian of preintegrated position w.r.t. acceleration bias.
Definition ManifoldPreintegration.h:43
\n@@ -209,13 +209,13 @@\n
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition NavState.h:34
\n
PreintegrationBase is the base class for PreintegratedMeasurements (in ImuFactor) and CombinedPreinte...
Definition PreintegrationBase.h:41
\n
\n
\n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01010_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01358_source.html", "comments": ["Files 94% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ExpressionFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicISAM.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
ExpressionFactorGraph.h
\n+
SymbolicISAM.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-
21#include <gtsam/nonlinear/ExpressionFactor.h>
\n-\n+\n+\n
23
\n
24namespace gtsam {
\n
25
\n-
\n-\n-
30
\n-
31public:
\n+
\n+
26 class GTSAM_EXPORT SymbolicISAM : public ISAM<SymbolicBayesTree>
\n+
27 {
\n+
28 public:
\n+\n+
30 typedef SymbolicISAM This;
\n+
31 typedef boost::shared_ptr<This> shared_ptr;
\n
32
\n
35
\n-
42 template<typename T>
\n-
\n-
43 void addExpressionFactor(const Expression<T>& h, const T& z,
\n-
44 const SharedNoiseModel& R) {
\n-
45 using F = ExpressionFactor<T>;
\n-
46 push_back(boost::allocate_shared<F>(Eigen::aligned_allocator<F>(), R, z, h));
\n-
47 }
\n-
\n-
48
\n-
50};
\n-
\n-
51
\n-
52}
\n-
Factor Graph consisting of non-linear factors.
\n+\n+
38
\n+
40 SymbolicISAM(const SymbolicBayesTree& bayesTree);
\n+
41
\n+
43
\n+
44 };
\n+
\n+
45
\n+
46}
\n+
Incremental update functionality (iSAM) for BayesTree.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n-
IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition FactorGraph.h:186
\n-
Factor that supports arbitrary expressions via AD.
Definition ExpressionFactor.h:44
\n-
Expression class that supports automatic differentiation.
Definition Expression.h:48
\n-
Factor graph that supports adding ExpressionFactors directly.
Definition ExpressionFactorGraph.h:29
\n-
void addExpressionFactor(const Expression< T > &h, const T &z, const SharedNoiseModel &R)
Directly add ExpressionFactor that implements |h(x)-z|^2_R.
Definition ExpressionFactorGraph.h:43
\n-
Definition NonlinearFactorGraph.h:55
\n+
A Bayes tree with an update methods that implements the iSAM algorithm.
Definition ISAM.h:31
\n+
A Bayes tree that represents the connectivity between variables but is not associated with any probab...
Definition SymbolicBayesTree.h:51
\n+
Definition SymbolicISAM.h:27
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ExpressionFactorGraph.h\n+SymbolicISAM.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,61 +16,47 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include \n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bI_\bS_\bA_\bM_\b._\bh>\n 23\n 24namespace _\bg_\bt_\bs_\ba_\bm {\n 25\n-_\b2_\b9class _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh: public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh {\n-30\n-31public:\n+_\b2_\b6 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM : public _\bI_\bS_\bA_\bM\n+27 {\n+28 public:\n+29 typedef _\bI_\bS_\bA_\bM_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b> _\bB_\ba_\bs_\be;\n+30 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM _\bT_\bh_\bi_\bs;\n+31 typedef boost::shared_ptr shared_ptr;\n 32\n 35\n-42 template\n-_\b4_\b3 void _\ba_\bd_\bd_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(const _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b<_\bT_\b>& h, const T& z,\n-44 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& R) {\n-45 using F = _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bT_\b>;\n-46 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(boost::allocate_shared(Eigen::aligned_allocator(), R, z,\n-h));\n-47 }\n-48\n-50};\n-51\n-52}\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n+37 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM();\n+38\n+40 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM(const _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be& bayesTree);\n+41\n+43\n+44 };\n+45\n+46}\n+_\bI_\bS_\bA_\bM_\b._\bh\n+Incremental update functionality (iSAM) for BayesTree.\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b _\b>_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n-IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)\n-Add a factor directly using a shared_ptr.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:186\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-Factor that supports arbitrary expressions via AD.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactor.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn\n-Expression class that supports automatic differentiation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Expression.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-Factor graph that supports adding ExpressionFactors directly.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactorGraph.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\ba_\bd_\bd_\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-void addExpressionFactor(const Expression< T > &h, const T &z, const\n-SharedNoiseModel &R)\n-Directly add ExpressionFactor that implements |h(x)-z|^2_R.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ExpressionFactorGraph.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM\n+A Bayes tree with an update methods that implements the iSAM algorithm.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+A Bayes tree that represents the connectivity between variables but is not\n+associated with any probab...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesTree.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicISAM.h:27\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bI_\bS_\bA_\bM_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01013_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01325_source.html", "comments": ["Files 77% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/FunctorizedFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/FrobeniusFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
FunctorizedFactor.h
\n+
FrobeniusFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Testable.h>
\n-\n-
22
\n-
23#include <cmath>
\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
58template <typename R, typename T>
\n-
\n-\n-
60 private:
\n-\n-
62
\n-
63 R measured_;
\n-
64 SharedNoiseModel noiseModel_;
\n-
65 std::function<R(T, boost::optional<Matrix &>)> func_;
\n-
66
\n-
67 public:
\n-\n-
70
\n-
\n-
78 FunctorizedFactor(Key key, const R &z, const SharedNoiseModel &model,
\n-
79 const std::function<R(T, boost::optional<Matrix &>)> func)
\n-
80 : Base(model, key), measured_(z), noiseModel_(model), func_(func) {}
\n-
\n-
81
\n-
82 ~FunctorizedFactor() override {}
\n-
83
\n-
\n-
85 NonlinearFactor::shared_ptr clone() const override {
\n-
86 return boost::static_pointer_cast<NonlinearFactor>(
\n-
87 NonlinearFactor::shared_ptr(new FunctorizedFactor<R, T>(*this)));
\n-
88 }
\n-
\n-
89
\n-
90 Vector evaluateError(const T &params, boost::optional<Matrix &> H =
\n-
91 boost::none) const override {
\n-
92 R x = func_(params, H);
\n-
93 Vector error = traits<R>::Local(measured_, x);
\n-
94 return error;
\n-
95 }
\n-
96
\n-
\n-
99 void print(
\n-
100 const std::string &s = "",
\n-
101 const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override {
\n-
102 Base::print(s, keyFormatter);
\n-
103 std::cout << s << (s != "" ? " " : "") << "FunctorizedFactor("
\n-
104 << keyFormatter(this->key1()) << ")" << std::endl;
\n-
105 traits<R>::Print(measured_, " measurement: ");
\n-
106 std::cout << " noise model sigmas: " << noiseModel_->sigmas().transpose()
\n-
107 << std::endl;
\n-
108 }
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/geometry/Rot2.h>
\n+
22#include <gtsam/geometry/Rot3.h>
\n+
23#include <gtsam/geometry/SOn.h>
\n+\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
42GTSAM_EXPORT SharedNoiseModel
\n+
43ConvertNoiseModel(const SharedNoiseModel &model, size_t n,
\n+
44 bool defaultToUnit = true);
\n+
45
\n+
50template <class Rot>
\n+
\n+
51class FrobeniusPrior : public NoiseModelFactorN<Rot> {
\n+
52 enum { Dim = Rot::VectorN2::RowsAtCompileTime };
\n+
53 using MatrixNN = typename Rot::MatrixNN;
\n+
54 Eigen::Matrix<double, Dim, 1> vecM_;
\n+
55
\n+
56 public:
\n+
57 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n+
58
\n+
\n+
60 FrobeniusPrior(Key j, const MatrixNN& M,
\n+
61 const SharedNoiseModel& model = nullptr)
\n+
62 : NoiseModelFactorN<Rot>(ConvertNoiseModel(model, Dim), j) {
\n+
63 vecM_ << Eigen::Map<const Matrix>(M.data(), Dim, 1);
\n+
64 }
\n+
\n+
65
\n+
\n+
67 Vector evaluateError(const Rot& R,
\n+
68 boost::optional<Matrix&> H = boost::none) const override {
\n+
69 return R.vec(H) - vecM_; // Jacobian is computed only when needed.
\n+
70 }
\n+
\n+
71};
\n+
\n+
72
\n+
77template <class Rot>
\n+
\n+
78class FrobeniusFactor : public NoiseModelFactorN<Rot, Rot> {
\n+
79 enum { Dim = Rot::VectorN2::RowsAtCompileTime };
\n+
80
\n+
81 public:
\n+
\n+
83 FrobeniusFactor(Key j1, Key j2, const SharedNoiseModel& model = nullptr)
\n+
84 : NoiseModelFactorN<Rot, Rot>(ConvertNoiseModel(model, Dim), j1,
\n+
85 j2) {}
\n+
\n+
86
\n+
\n+
88 Vector evaluateError(const Rot& R1, const Rot& R2,
\n+
89 boost::optional<Matrix&> H1 = boost::none,
\n+
90 boost::optional<Matrix&> H2 = boost::none) const override {
\n+
91 Vector error = R2.vec(H2) - R1.vec(H1);
\n+
92 if (H1) *H1 = -*H1;
\n+
93 return error;
\n+
94 }
\n+
\n+
95};
\n
\n+
96
\n+
103template <class Rot>
\n+
\n+\n+
105 Rot R12_;
\n+
106 Eigen::Matrix<double, Rot::dimension, Rot::dimension>
\n+
107 R2hat_H_R1_;
\n+
108 enum { Dim = Rot::VectorN2::RowsAtCompileTime };
\n
109
\n-
\n-
110 bool equals(const NonlinearFactor &other, double tol = 1e-9) const override {
\n-
111 const FunctorizedFactor<R, T> *e =
\n-
112 dynamic_cast<const FunctorizedFactor<R, T> *>(&other);
\n-
113 return e != nullptr && Base::equals(other, tol) &&
\n-
114 traits<R>::Equals(this->measured_, e->measured_, tol);
\n-
115 }
\n-
\n-
117
\n-
118 private:
\n-\n-
121 template <class ARCHIVE>
\n-
122 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n-
123 // NoiseModelFactor1 instead of NoiseModelFactorN for backward compatibility
\n-
124 ar &boost::serialization::make_nvp(
\n-
125 "NoiseModelFactor1", boost::serialization::base_object<Base>(*this));
\n-
126 ar &BOOST_SERIALIZATION_NVP(measured_);
\n-
127 ar &BOOST_SERIALIZATION_NVP(func_);
\n-
128 }
\n-
129};
\n-
\n-
130
\n-
132template <typename R, typename T>
\n-
\n-\n-
134 : public Testable<FunctorizedFactor<R, T>> {};
\n-
\n-
135
\n-
142template <typename T, typename R, typename FUNC>
\n-
\n-\n-
144 const SharedNoiseModel &model,
\n-
145 const FUNC func) {
\n-
146 return FunctorizedFactor<R, T>(key, z, model, func);
\n-
147}
\n-
\n-
148
\n-
158template <typename R, typename T1, typename T2>
\n-
\n-
159class FunctorizedFactor2 : public NoiseModelFactorN<T1, T2> {
\n-
160 private:
\n-\n-
162
\n-
163 R measured_;
\n-
164 SharedNoiseModel noiseModel_;
\n-
165 using FunctionType = std::function<R(T1, T2, boost::optional<Matrix &>,
\n-
166 boost::optional<Matrix &>)>;
\n-
167 FunctionType func_;
\n-
168
\n-
169 public:
\n-\n-
172
\n-
\n-
180 FunctorizedFactor2(Key key1, Key key2, const R &z,
\n-
181 const SharedNoiseModel &model, const FunctionType func)
\n-
182 : Base(model, key1, key2),
\n-
183 measured_(z),
\n-
184 noiseModel_(model),
\n-
185 func_(func) {}
\n-
\n-
186
\n-
187 ~FunctorizedFactor2() override {}
\n-
188
\n-
\n-
190 NonlinearFactor::shared_ptr clone() const override {
\n-
191 return boost::static_pointer_cast<NonlinearFactor>(
\n-
192 NonlinearFactor::shared_ptr(new FunctorizedFactor2<R, T1, T2>(*this)));
\n-
193 }
\n-
\n-
194
\n-
195 Vector evaluateError(
\n-
196 const T1 &params1, const T2 &params2,
\n-
197 boost::optional<Matrix &> H1 = boost::none,
\n-
198 boost::optional<Matrix &> H2 = boost::none) const override {
\n-
199 R x = func_(params1, params2, H1, H2);
\n-
200 Vector error = traits<R>::Local(measured_, x);
\n-
201 return error;
\n-
202 }
\n-
203
\n-
\n-
206 void print(
\n-
207 const std::string &s = "",
\n-
208 const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override {
\n-
209 Base::print(s, keyFormatter);
\n-
210 std::cout << s << (s != "" ? " " : "") << "FunctorizedFactor2("
\n-
211 << keyFormatter(this->key1()) << ", "
\n-
212 << keyFormatter(this->key2()) << ")" << std::endl;
\n-
213 traits<R>::Print(measured_, " measurement: ");
\n-
214 std::cout << " noise model sigmas: " << noiseModel_->sigmas().transpose()
\n-
215 << std::endl;
\n-
216 }
\n-
\n-
217
\n-
\n-
218 bool equals(const NonlinearFactor &other, double tol = 1e-9) const override {
\n-\n-
220 dynamic_cast<const FunctorizedFactor2<R, T1, T2> *>(&other);
\n-
221 return e && Base::equals(other, tol) &&
\n-
222 traits<R>::Equals(this->measured_, e->measured_, tol);
\n-
223 }
\n-
\n-
225
\n-
226 private:
\n-\n-
229 template <class ARCHIVE>
\n-
230 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n-
231 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n-
232 ar &boost::serialization::make_nvp(
\n-
233 "NoiseModelFactor2", boost::serialization::base_object<Base>(*this));
\n-
234 ar &BOOST_SERIALIZATION_NVP(measured_);
\n-
235 ar &BOOST_SERIALIZATION_NVP(func_);
\n-
236 }
\n-
237};
\n-
\n-
238
\n-
240template <typename R, typename T1, typename T2>
\n-
\n-
241struct traits<FunctorizedFactor2<R, T1, T2>>
\n-
242 : public Testable<FunctorizedFactor2<R, T1, T2>> {};
\n-
\n-
243
\n-
250template <typename T1, typename T2, typename R, typename FUNC>
\n-
\n-\n-
252 Key key1, Key key2, const R &z, const SharedNoiseModel &model,
\n-
253 const FUNC func) {
\n-
254 return FunctorizedFactor2<R, T1, T2>(key1, key2, z, model, func);
\n-
255}
\n-
\n-
256
\n-
257} // namespace gtsam
\n-
Concept check for values that can be used in unit tests.
\n-
Non-linear factor base classes.
\n+
110 public:
\n+
111 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
\n+
112
\n+
115
\n+
\n+
117 FrobeniusBetweenFactor(Key j1, Key j2, const Rot& R12,
\n+
118 const SharedNoiseModel& model = nullptr)
\n+
119 : NoiseModelFactorN<Rot, Rot>(
\n+
120 ConvertNoiseModel(model, Dim), j1, j2),
\n+
121 R12_(R12),
\n+
122 R2hat_H_R1_(R12.inverse().AdjointMap()) {}
\n+
\n+
123
\n+
127
\n+
129 void
\n+
\n+
130 print(const std::string &s,
\n+
131 const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override {
\n+
132 std::cout << s << "FrobeniusBetweenFactor<" << demangle(typeid(Rot).name())
\n+
133 << ">(" << keyFormatter(this->key1()) << ","
\n+
134 << keyFormatter(this->key2()) << ")\\n";
\n+
135 traits<Rot>::Print(R12_, " R12: ");
\n+
136 this->noiseModel_->print(" noise model: ");
\n+
137 }
\n+
\n+
138
\n+
\n+
140 bool equals(const NonlinearFactor &expected,
\n+
141 double tol = 1e-9) const override {
\n+
142 auto e = dynamic_cast<const FrobeniusBetweenFactor *>(&expected);
\n+
143 return e != nullptr && NoiseModelFactorN<Rot, Rot>::equals(*e, tol) &&
\n+
144 traits<Rot>::Equals(this->R12_, e->R12_, tol);
\n+
145 }
\n+
\n+
146
\n+
150
\n+
\n+
152 Vector evaluateError(const Rot& R1, const Rot& R2,
\n+
153 boost::optional<Matrix&> H1 = boost::none,
\n+
154 boost::optional<Matrix&> H2 = boost::none) const override {
\n+
155 const Rot R2hat = R1.compose(R12_);
\n+
156 Eigen::Matrix<double, Dim, Rot::dimension> vec_H_R2hat;
\n+
157 Vector error = R2.vec(H2) - R2hat.vec(H1 ? &vec_H_R2hat : nullptr);
\n+
158 if (H1) *H1 = -vec_H_R2hat * R2hat_H_R1_;
\n+
159 return error;
\n+
160 }
\n+
\n+
162};
\n+
\n+
163
\n+
164} // namespace gtsam
\n+
3D rotation represented as a rotation matrix or quaternion
\n+
N*N matrix representation of SO(N).
\n+
2D rotation
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FunctorizedFactor2< R, T1, T2 > MakeFunctorizedFactor2(Key key1, Key key2, const R &z, const SharedNoiseModel &model, const FUNC func)
Helper function to create a functorized factor.
Definition FunctorizedFactor.h:251
\n-
FunctorizedFactor< R, T > MakeFunctorizedFactor(Key key, const R &z, const SharedNoiseModel &model, const FUNC func)
Helper function to create a functorized factor.
Definition FunctorizedFactor.h:143
\n+
std::string demangle(const char *name)
Pretty print Value type name.
Definition types.cpp:37
\n+
SharedNoiseModel ConvertNoiseModel(const SharedNoiseModel &model, size_t d, bool defaultToUnit)
When creating (any) FrobeniusFactor we can convert a Rot/Pose BetweenFactor noise model into a n-dime...
Definition FrobeniusFactor.cpp:27
\n
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
virtual void print(const std::string &s="Factor", const KeyFormatter &formatter=DefaultKeyFormatter) const
print
Definition Factor.cpp:29
\n
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n-
Factor which evaluates provided unary functor and uses the result to compute error with respect to th...
Definition FunctorizedFactor.h:59
\n-
FunctorizedFactor(Key key, const R &z, const SharedNoiseModel &model, const std::function< R(T, boost::optional< Matrix & >)> func)
Construct with given x and the parameters of the basis.
Definition FunctorizedFactor.h:78
\n-
bool equals(const NonlinearFactor &other, double tol=1e-9) const override
Check if two factors are equal.
Definition FunctorizedFactor.h:110
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition FunctorizedFactor.h:99
\n-
FunctorizedFactor()
default constructor - only use for serialization
Definition FunctorizedFactor.h:69
\n-
friend class boost::serialization::access
Serialization function.
Definition FunctorizedFactor.h:120
\n-
NonlinearFactor::shared_ptr clone() const override
Definition FunctorizedFactor.h:85
\n-
Factor which evaluates provided binary functor and uses the result to compute error with respect to t...
Definition FunctorizedFactor.h:159
\n-
FunctorizedFactor2()
default constructor - only use for serialization
Definition FunctorizedFactor.h:171
\n-
NonlinearFactor::shared_ptr clone() const override
Definition FunctorizedFactor.h:190
\n-
FunctorizedFactor2(Key key1, Key key2, const R &z, const SharedNoiseModel &model, const FunctionType func)
Construct with given x and the parameters of the basis.
Definition FunctorizedFactor.h:180
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition FunctorizedFactor.h:206
\n-
bool equals(const NonlinearFactor &other, double tol=1e-9) const override
Check if two factors are equal.
Definition FunctorizedFactor.h:218
\n-
friend class boost::serialization::access
Serialization function.
Definition FunctorizedFactor.h:228
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n
double error(const Values &c) const override
Calculate the error of the factor.
Definition NonlinearFactor.cpp:138
\n
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n+
FrobeniusPrior calculates the Frobenius norm between a given matrix and an element of SO(3) or SO(4).
Definition FrobeniusFactor.h:51
\n+
EIGEN_MAKE_ALIGNED_OPERATOR_NEW FrobeniusPrior(Key j, const MatrixNN &M, const SharedNoiseModel &model=nullptr)
Constructor.
Definition FrobeniusFactor.h:60
\n+
Vector evaluateError(const Rot &R, boost::optional< Matrix & > H=boost::none) const override
Error is just Frobenius norm between Rot element and vectorized matrix M.
Definition FrobeniusFactor.h:67
\n+
FrobeniusFactor calculates the Frobenius norm between rotation matrices.
Definition FrobeniusFactor.h:78
\n+
Vector evaluateError(const Rot &R1, const Rot &R2, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
Error is just Frobenius norm between rotation matrices.
Definition FrobeniusFactor.h:88
\n+
FrobeniusFactor(Key j1, Key j2, const SharedNoiseModel &model=nullptr)
Constructor.
Definition FrobeniusFactor.h:83
\n+
FrobeniusBetweenFactor is a BetweenFactor that evaluates the Frobenius norm of the rotation error bet...
Definition FrobeniusFactor.h:104
\n+
FrobeniusBetweenFactor(Key j1, Key j2, const Rot &R12, const SharedNoiseModel &model=nullptr)
Construct from two keys and measured rotation.
Definition FrobeniusFactor.h:117
\n+
void print(const std::string &s, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print with optional string
Definition FrobeniusFactor.h:130
\n+
Vector evaluateError(const Rot &R1, const Rot &R2, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
Error is Frobenius norm between R1*R12 and R2.
Definition FrobeniusFactor.h:152
\n+
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
assert equality up to a tolerance
Definition FrobeniusFactor.h:140
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,208 +1,149 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-FunctorizedFactor.h\n+FrobeniusFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22\n-23#include \n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-58template \n-_\b5_\b9class _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-60 private:\n-61 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bT_\b>;\n-62\n-63 R measured_;\n-64 _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl noiseModel_;\n-65 std::function)> func_;\n-66\n-67 public:\n-_\b6_\b9 _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br() {}\n-70\n-_\b7_\b8 _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const R &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n-79 const std::function)> func)\n-80 : _\bB_\ba_\bs_\be(model, _\bk_\be_\by), measured_(z), noiseModel_(model), func_(func) {}\n-81\n-82 _\b~_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-83\n-_\b8_\b5 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-86 return boost::static_pointer_cast(\n-87 NonlinearFactor::shared_ptr(new _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bR_\b,_\b _\bT_\b>(*this)));\n-88 }\n-89\n-90 Vector evaluateError(const T ¶ms, boost::optional H =\n-91 boost::none) const override {\n-92 R x = func_(params, H);\n-93 Vector _\be_\br_\br_\bo_\br = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured_, x);\n-94 return _\be_\br_\br_\bo_\br;\n-95 }\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\bn_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+42GTSAM_EXPORT _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+43_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, size_t n,\n+44 bool defaultToUnit = true);\n+45\n+50template \n+_\b5_\b1class _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+52 enum { Dim = Rot::VectorN2::RowsAtCompileTime };\n+53 using MatrixNN = typename Rot::MatrixNN;\n+54 Eigen::Matrix vecM_;\n+55\n+56 public:\n+57 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n+58\n+_\b6_\b0 _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br(_\bK_\be_\by j, const MatrixNN& M,\n+61 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr)\n+62 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(model, Dim), j) {\n+63 vecM_ << Eigen::Map(M.data(), Dim, 1);\n+64 }\n+65\n+_\b6_\b7 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Rot& R,\n+68 boost::optional H = boost::none) const override {\n+69 return R.vec(H) - vecM_; // Jacobian is computed only when needed.\n+70 }\n+71};\n+72\n+77template \n+_\b7_\b8class _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+79 enum { Dim = Rot::VectorN2::RowsAtCompileTime };\n+80\n+81 public:\n+_\b8_\b3 _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr)\n+84 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(model, Dim), j1,\n+85 j2) {}\n+86\n+_\b8_\b8 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Rot& R1, const Rot& R2,\n+89 boost::optional H1 = boost::none,\n+90 boost::optional H2 = boost::none) const override {\n+91 Vector _\be_\br_\br_\bo_\br = R2.vec(H2) - R1.vec(H1);\n+92 if (H1) *H1 = -*H1;\n+93 return _\be_\br_\br_\bo_\br;\n+94 }\n+95};\n 96\n-_\b9_\b9 void _\bp_\br_\bi_\bn_\bt(\n-100 const std::string &s = \"\",\n-101 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter) const override {\n-102 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n-103 std::cout << s << (s != \"\" ? \" \" : \"\") << \"FunctorizedFactor(\"\n-104 << keyFormatter(this->key1()) << \")\" << std::endl;\n-105 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(measured_, \" measurement: \");\n-106 std::cout << \" noise model sigmas: \" << noiseModel_->sigmas().transpose()\n-107 << std::endl;\n-108 }\n+103template \n+_\b1_\b0_\b4class _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+105 Rot R12_;\n+106 Eigen::Matrix\n+107 R2hat_H_R1_;\n+108 enum { Dim = Rot::VectorN2::RowsAtCompileTime };\n 109\n-_\b1_\b1_\b0 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br &other, double tol = 1e-9) const override\n-{\n-111 const _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bR_\b,_\b _\bT_\b> *e =\n-112 dynamic_cast *>(&other);\n-113 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(other, tol) &&\n-114 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_, e->measured_, tol);\n-115 }\n-117\n-118 private:\n-_\b1_\b2_\b0 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-121 template \n-122 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-123 // NoiseModelFactor1 instead of NoiseModelFactorN for backward\n-compatibility\n-124 ar &boost::serialization::make_nvp(\n-125 \"NoiseModelFactor1\", boost::serialization::base_object(*this));\n-126 ar &BOOST_SERIALIZATION_NVP(measured_);\n-127 ar &BOOST_SERIALIZATION_NVP(func_);\n-128 }\n-129};\n-130\n-132template \n-_\b1_\b3_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br>\n-134 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n-135\n-142template \n-_\b1_\b4_\b3_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bR_\b,_\b _\bT_\b> _\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, const R &z,\n-144 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n-145 const FUNC func) {\n-146 return _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bR_\b,_\b _\bT_\b>(key, z, model, func);\n-147}\n-148\n-158template \n-_\b1_\b5_\b9class _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2 : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-160 private:\n-161 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bT_\b1_\b,_\b _\bT_\b2_\b>;\n-162\n-163 R measured_;\n-164 _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl noiseModel_;\n-165 using FunctionType = std::function,\n-166 boost::optional)>;\n-167 FunctionType func_;\n-168\n-169 public:\n-_\b1_\b7_\b1 _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2() {}\n-172\n-_\b1_\b8_\b0 _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2(_\bK_\be_\by key1, _\bK_\be_\by key2, const R &z,\n-181 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const FunctionType func)\n-182 : _\bB_\ba_\bs_\be(model, key1, key2),\n-183 measured_(z),\n-184 noiseModel_(model),\n-185 func_(func) {}\n-186\n-187 _\b~_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2() override {}\n-188\n-_\b1_\b9_\b0 NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-191 return boost::static_pointer_cast(\n-192 NonlinearFactor::shared_ptr(new _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b>(*this)));\n-193 }\n-194\n-195 Vector evaluateError(\n-196 const T1 ¶ms1, const T2 ¶ms2,\n-197 boost::optional H1 = boost::none,\n-198 boost::optional H2 = boost::none) const override {\n-199 R x = func_(params1, params2, H1, H2);\n-200 Vector _\be_\br_\br_\bo_\br = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured_, x);\n-201 return _\be_\br_\br_\bo_\br;\n-202 }\n-203\n-_\b2_\b0_\b6 void _\bp_\br_\bi_\bn_\bt(\n-207 const std::string &s = \"\",\n-208 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter) const override {\n-209 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, keyFormatter);\n-210 std::cout << s << (s != \"\" ? \" \" : \"\") << \"FunctorizedFactor2(\"\n-211 << keyFormatter(this->key1()) << \", \"\n-212 << keyFormatter(this->key2()) << \")\" << std::endl;\n-213 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(measured_, \" measurement: \");\n-214 std::cout << \" noise model sigmas: \" << noiseModel_->sigmas().transpose()\n-215 << std::endl;\n-216 }\n-217\n-_\b2_\b1_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br &other, double tol = 1e-9) const override\n-{\n-219 const _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b> *e =\n-220 dynamic_cast *>(&other);\n-221 return e && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(other, tol) &&\n-222 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->measured_, e->measured_, tol);\n-223 }\n-225\n-226 private:\n-_\b2_\b2_\b8 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-229 template \n-230 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n-231 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n-compatibility\n-232 ar &boost::serialization::make_nvp(\n-233 \"NoiseModelFactor2\", boost::serialization::base_object(*this));\n-234 ar &BOOST_SERIALIZATION_NVP(measured_);\n-235 ar &BOOST_SERIALIZATION_NVP(func_);\n-236 }\n-237};\n-238\n-240template \n-_\b2_\b4_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2>\n-242 : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be> {};\n-243\n-250template \n-_\b2_\b5_\b1_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b> _\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2(\n-252 _\bK_\be_\by key1, _\bK_\be_\by key2, const R &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n-253 const FUNC func) {\n-254 return _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b<_\bR_\b,_\b _\bT_\b1_\b,_\b _\bT_\b2_\b>(key1, key2, z, model, func);\n-255}\n-256\n-257} // namespace gtsam\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n-Concept check for values that can be used in unit tests.\n+110 public:\n+111 EIGEN_MAKE_ALIGNED_OPERATOR_NEW\n+112\n+115\n+_\b1_\b1_\b7 _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, const Rot& R12,\n+118 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr)\n+119 : _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN(\n+120 _\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl(model, Dim), j1, j2),\n+121 R12_(R12),\n+122 R2hat_H_R1_(R12.inverse().AdjointMap()) {}\n+123\n+127\n+129 void\n+_\b1_\b3_\b0 _\bp_\br_\bi_\bn_\bt(const std::string &s,\n+131 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter) const override {\n+132 std::cout << s << \"FrobeniusBetweenFactor<\" << _\bd_\be_\bm_\ba_\bn_\bg_\bl_\be(typeid(Rot).name())\n+133 << \">(\" << keyFormatter(this->key1()) << \",\"\n+134 << keyFormatter(this->key2()) << \")\\n\";\n+135 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bo_\bt_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(R12_, \" R12: \");\n+136 this->noiseModel_->print(\" noise model: \");\n+137 }\n+138\n+_\b1_\b4_\b0 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br &expected,\n+141 double tol = 1e-9) const override {\n+142 auto e = dynamic_cast(&expected);\n+143 return e != nullptr && _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bR_\bo_\bt_\b,_\b _\bR_\bo_\bt_\b>_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) &&\n+144 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bR_\bo_\bt_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this->R12_, e->R12_, tol);\n+145 }\n+146\n+150\n+_\b1_\b5_\b2 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const Rot& R1, const Rot& R2,\n+153 boost::optional H1 = boost::none,\n+154 boost::optional H2 = boost::none) const override {\n+155 const Rot R2hat = R1.compose(R12_);\n+156 Eigen::Matrix vec_H_R2hat;\n+157 Vector _\be_\br_\br_\bo_\br = R2.vec(H2) - R2hat.vec(H1 ? &vec_H_R2hat : nullptr);\n+158 if (H1) *H1 = -vec_H_R2hat * R2hat_H_R1_;\n+159 return _\be_\br_\br_\bo_\br;\n+160 }\n+162};\n+163\n+164} // namespace gtsam\n+_\bR_\bo_\bt_\b3_\b._\bh\n+3D rotation represented as a rotation matrix or quaternion\n+_\bS_\bO_\bn_\b._\bh\n+N*N matrix representation of SO(N).\n+_\bR_\bo_\bt_\b2_\b._\bh\n+2D rotation\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-FunctorizedFactor2< R, T1, T2 > MakeFunctorizedFactor2(Key key1, Key key2,\n-const R &z, const SharedNoiseModel &model, const FUNC func)\n-Helper function to create a functorized factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:251\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bk_\be_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-FunctorizedFactor< R, T > MakeFunctorizedFactor(Key key, const R &z, const\n-SharedNoiseModel &model, const FUNC func)\n-Helper function to create a functorized factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:143\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\be_\bm_\ba_\bn_\bg_\bl_\be\n+std::string demangle(const char *name)\n+Pretty print Value type name.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.cpp:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bn_\bv_\be_\br_\bt_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+SharedNoiseModel ConvertNoiseModel(const SharedNoiseModel &model, size_t d,\n+bool defaultToUnit)\n+When creating (any) FrobeniusFactor we can convert a Rot/Pose BetweenFactor\n+noise model into a n-dime...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.cpp:27\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n noiseModel::Base::shared_ptr SharedNoiseModel\n Aliases.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n@@ -211,96 +152,75 @@\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-virtual void print(const std::string &s=\"Factor\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:29\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n bool equals(const This &other, double tol=1e-9) const\n check equality\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-Factor which evaluates provided unary functor and uses the result to compute\n-error with respect to th...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:59\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-FunctorizedFactor(Key key, const R &z, const SharedNoiseModel &model, const\n-std::function< R(T, boost::optional< Matrix & >)> func)\n-Construct with given x and the parameters of the basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &other, double tol=1e-9) const override\n-Check if two factors are equal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:110\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n-FunctorizedFactor()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:120\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-Factor which evaluates provided binary functor and uses the result to compute\n-error with respect to t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:159\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-FunctorizedFactor2()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:171\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:190\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2\n-FunctorizedFactor2(Key key1, Key key2, const R &z, const SharedNoiseModel\n-&model, const FunctionType func)\n-Construct with given x and the parameters of the basis.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:180\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:206\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &other, double tol=1e-9) const override\n-Check if two factors are equal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:218\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b2_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:228\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n double error(const Values &c) const override\n Calculate the error of the factor.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.cpp:138\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n A convenient base class for creating your own NoiseModelFactor with n\n variables.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\b _\bT_\b _\b>_\b:_\b:_\bk_\be_\by\n-Key key() const\n-Returns a key.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br\n+FrobeniusPrior calculates the Frobenius norm between a given matrix and an\n+element of SO(3) or SO(4).\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br\n+EIGEN_MAKE_ALIGNED_OPERATOR_NEW FrobeniusPrior(Key j, const MatrixNN &M, const\n+SharedNoiseModel &model=nullptr)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bP_\br_\bi_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Rot &R, boost::optional< Matrix & > H=boost::none)\n+const override\n+Error is just Frobenius norm between Rot element and vectorized matrix M.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br\n+FrobeniusFactor calculates the Frobenius norm between rotation matrices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Rot &R1, const Rot &R2, boost::optional< Matrix & >\n+H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override\n+Error is just Frobenius norm between rotation matrices.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br\n+FrobeniusFactor(Key j1, Key j2, const SharedNoiseModel &model=nullptr)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:83\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+FrobeniusBetweenFactor is a BetweenFactor that evaluates the Frobenius norm of\n+the rotation error bet...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:104\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+FrobeniusBetweenFactor(Key j1, Key j2, const Rot &R12, const SharedNoiseModel\n+&model=nullptr)\n+Construct from two keys and measured rotation.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print with optional string\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:130\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n+Vector evaluateError(const Rot &R1, const Rot &R2, boost::optional< Matrix & >\n+H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override\n+Error is Frobenius norm between R1*R12 and R2.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:152\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n+assert equality up to a tolerance\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FrobeniusFactor.h:140\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bs_\bl_\ba_\bm\n+ * _\bF_\br_\bo_\bb_\be_\bn_\bi_\bu_\bs_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01028.js", "source2": "./usr/share/doc/libgtsam-dev/html/a00656.js", "comments": ["Files 78% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,14 +1,11 @@\n-var a01028 = [\n- [\"gtsam::Expression< T >\", \"a04292.html\", \"a04292\"],\n- [\"gtsam::Expression< T >::UnaryFunction< A1 >\", \"a04296.html\", null],\n- [\"gtsam::Expression< T >::BinaryFunction< A1, A2 >\", \"a04300.html\", null],\n- [\"gtsam::Expression< T >::TernaryFunction< A1, A2, A3 >\", \"a04304.html\", null],\n- [\"gtsam::ScalarMultiplyExpression< T >\", \"a04308.html\", null],\n- [\"gtsam::BinarySumExpression< T >\", \"a04312.html\", null],\n- [\"createUnknowns\", \"a01028.html#a51881c20dd5ecdd129cb993ea8374846\", null],\n- [\"linearExpression\", \"a01028.html#a794029fe8dfc03f67a8cb64ad05d47c9\", null],\n- [\"operator*\", \"a01028.html#a3db519caa1b7e43412c9a7e13acf8329\", null],\n- [\"operator*\", \"a01028.html#a405f3793afc2cc3173c3fbdecadb162a\", null],\n- [\"operator+\", \"a01028.html#a589e3ff8cd71e5a17ee1dcfae8b2df26\", null],\n- [\"operator-\", \"a01028.html#a9512eb02324210895442f2bf8268902d\", null]\n+var a00656 = [\n+ [\"gtsam::SDGraph< KEY >\", \"a03616.html\", null],\n+ [\"gtsam::SGraph< KEY >\", \"a03620.html\", null],\n+ [\"gtsam::PredecessorMap< KEY >\", \"a03624.html\", \"a03624\"],\n+ [\"composePoses\", \"a00656.html#a62b34d6038ccdfa84d8a5bb0c15328b1\", null],\n+ [\"findMinimumSpanningTree\", \"a00656.html#a7771a103b41708e88763ff67059ff01d\", null],\n+ [\"predecessorMap2Graph\", \"a00656.html#ae67d0d86c4e55b175859967a70b36983\", null],\n+ [\"predecessorMap2Keys\", \"a00656.html#a18a265afdea057ea54be10262396be12\", null],\n+ [\"split\", \"a00656.html#a3453247aec1d8b4642947ffd4bca426b\", null],\n+ [\"toBoostGraph\", \"a00656.html#a6c0319a6ebcc83d4a5cf9ff51729bb80\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01040.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00962.html", "comments": ["Files 88% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Params.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/navigation/NavState.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n \n
\n \n-
ISAM2Params.h File Reference
\n+
NavState.h File Reference
\n
\n
\n \n-

Parameters for iSAM 2. \n+

Navigation state composing of attitude, position, and velocity. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n-\n-\n+\n \n

\n Classes

struct  gtsam::ISAM2GaussNewtonParams
 Parameters for ISAM2 using Gauss-Newton optimization. More...
class  gtsam::NavState
 Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make this a Lie group, but it is a 9D manifold. More...
 
struct  gtsam::ISAM2DoglegParams
 Parameters for ISAM2 using Dogleg optimization. More...
 
struct  gtsam::ISAM2Params
struct  gtsam::traits< NavState >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n-\n-\n-\n+\n+\n+\n

\n Typedefs

typedef FastMap< char, Vector > gtsam::ISAM2ThresholdMap
 Parameters for the ISAM2 algorithm.
 
\n-typedef ISAM2ThresholdMap::value_type gtsam::ISAM2ThresholdMapValue
 
\n+typedef Vector3 gtsam::Velocity3
 Velocity is currently typedef'd to Vector3.
 
\n

Detailed Description

\n-

Parameters for iSAM 2.

\n-
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n+

Navigation state composing of attitude, position, and velocity.

\n+
Author
Frank Dellaert
\n+
Date
July 2015
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,36 +1,35 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n-ISAM2Params.h File Reference\n-Parameters for iSAM 2. _\bM_\bo_\br_\be_\b._\b._\b.\n+NavState.h File Reference\n+Navigation state composing of attitude, position, and velocity. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bP_\ba_\br_\ba_\bm_\bs\n-\u00a0 Parameters for _\bI_\bS_\bA_\bM_\b2 using Gauss-Newton optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be\n+ Navigation state: Pose (rotation, translation) + velocity NOTE(frank):\n+\u00a0 it does not make sense to make this a Lie group, but it is a 9D\n+ manifold. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bD_\bo_\bg_\bl_\be_\bg_\bP_\ba_\br_\ba_\bm_\bs\n-\u00a0 Parameters for _\bI_\bS_\bA_\bM_\b2 using Dogleg optimization. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n- typedef _\bF_\ba_\bs_\bt_\bM_\ba_\bp< char, Vector >\u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd_\bM_\ba_\bp\n-\u00a0 Parameters for the _\bI_\bS_\bA_\bM_\b2 algorithm.\n-\u00a0\n-typedef ISAM2ThresholdMap::value_type\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:I\bIS\bSA\bAM\bM2\b2T\bTh\bhr\bre\bes\bsh\bho\bol\bld\bdM\bMa\bap\bpV\bVa\bal\blu\bue\be\n+typedef Vector3\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:V\bVe\bel\blo\boc\bci\bit\bty\by3\b3\n+\u00a0 Velocity is currently typedef'd to Vector3.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Parameters for iSAM 2.\n+Navigation state composing of attitude, position, and velocity.\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert\n+ Frank Dellaert\n+ Date\n+ July 2015\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * _\bn_\ba_\bv_\bi_\bg_\ba_\bt_\bi_\bo_\bn\n+ * _\bN_\ba_\bv_\bS_\bt_\ba_\bt_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01046.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00698.html", "comments": ["Files 90% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2-impl.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/BayesTree-inst.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n
\n \n
\n \n
\n
\n \n
\n \n-
ISAM2-impl.cpp File Reference
\n+
BayesTree-inst.h File Reference
\n
\n
\n \n-

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \n+

Bayes Tree is a tree of cliques of a Bayes Chain. \n More...

\n+\n+

Go to the source code of this file.

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n \n-\n-\n+\n+\n+\n

\n Functions

\n-void gtsam::internal::updateRgProd (const ISAM2::sharedClique &clique, const KeySet &replacedKeys, const VectorValues &grad, VectorValues *RgProd, size_t *varsUpdated)
 
\n+template<class CLIQUE >
bool gtsam::check_sharedCliques (const std::pair< Key, typename BayesTree< CLIQUE >::sharedClique > &v1, const std::pair< Key, typename BayesTree< CLIQUE >::sharedClique > &v2)
 
\n

Detailed Description

\n-

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.

\n-
Author
Michael Kaess
\n+

Bayes Tree is a tree of cliques of a Bayes Chain.

\n+
Author
Frank Dellaert
\n+
\n+Michael Kaess
\n+
\n+Viorela Ila
\n
\n Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,30 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-ISAM2-impl.cpp File Reference\n-Incremental update functionality (ISAM2) for BayesTree, with fluid\n-relinearization. _\bM_\bo_\br_\be_\b._\b._\b.\n+BayesTree-inst.h File Reference\n+Bayes Tree is a tree of cliques of a Bayes Chain. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n-void\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:i\bin\bnt\bte\ber\brn\bna\bal\bl:\b::\b:u\bup\bpd\bda\bat\bte\beR\bRg\bgP\bPr\bro\bod\bd (const _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be &clique, const\n- _\bK_\be_\by_\bS_\be_\bt &replacedKeys, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs &grad, _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs *RgProd,\n- size_t *varsUpdated)\n+template\n+bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bch\bhe\bec\bck\bk_\b_s\bsh\bha\bar\bre\bed\bdC\bCl\bli\biq\bqu\bue\bes\bs (const std::pair< _\bK_\be_\by, typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be<\n+ CLIQUE >::sharedClique > &v1, const std::pair< _\bK_\be_\by, typename _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be<\n+ CLIQUE >::sharedClique > &v2)\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Incremental update functionality (ISAM2) for BayesTree, with fluid\n-relinearization.\n+Bayes Tree is a tree of cliques of a Bayes Chain.\n Author\n+ Frank Dellaert\n Michael Kaess\n+ Viorela Ila\n Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\b-_\bi_\bm_\bp_\bl_\b._\bc_\bp_\bp\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n+ * _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01076_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00353_source.html", "comments": ["Files 88% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizerParams.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/OrientedPlane3.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
NonlinearOptimizerParams.h
\n+
OrientedPlane3.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n+
3 * Atlanta, Georgia 30332-0415
\n+
4 * All Rights Reserved
\n+
5 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
22#pragma once
\n-
23
\n-\n-\n-
26#include <boost/optional.hpp>
\n-
27#include <string>
\n+
12/*
\n+
13 * @file OrientedPlane3.h
\n+
14 * @date Dec 19, 2013
\n+
15 * @author Alex Trevor
\n+
16 * @author Frank Dellaert
\n+
17 * @author Zhaoyang Lv
\n+
18 * @brief An infinite plane, represented by a normal direction and perpendicular distance
\n+
19 */
\n+
20
\n+
21#pragma once
\n+
22
\n+
23#include <gtsam/geometry/Unit3.h>
\n+\n+
25#include <string>
\n+
26
\n+
27namespace gtsam {
\n
28
\n-
29namespace gtsam {
\n-
30
\n-
\n-
34class GTSAM_EXPORT NonlinearOptimizerParams {
\n-
35public:
\n-
\n-
37 enum Verbosity {
\n-
38 SILENT, TERMINATION, ERROR, VALUES, DELTA, LINEAR
\n-
39 };
\n-
\n+
\n+
36class GTSAM_EXPORT OrientedPlane3 {
\n+
37private:
\n+
38 Unit3 n_;
\n+
39 double d_;
\n
40
\n-
41 size_t maxIterations = 100;
\n-
42 double relativeErrorTol = 1e-5;
\n-
43 double absoluteErrorTol = 1e-5;
\n-
44 double errorTol = 0.0;
\n-
45 Verbosity verbosity = SILENT;
\n-
46 Ordering::OrderingType orderingType = Ordering::COLAMD;
\n-
47
\n-
48 size_t getMaxIterations() const { return maxIterations; }
\n-
49 double getRelativeErrorTol() const { return relativeErrorTol; }
\n-
50 double getAbsoluteErrorTol() const { return absoluteErrorTol; }
\n-
51 double getErrorTol() const { return errorTol; }
\n-
52 std::string getVerbosity() const { return verbosityTranslator(verbosity); }
\n+
41public:
\n+
42 enum {
\n+
43 dimension = 3
\n+
44 };
\n+
45
\n+
48
\n+
\n+\n+
51 n_(), d_(0.0) {
\n+
52 }
\n+
\n
53
\n-
54 void setMaxIterations(int value) { maxIterations = value; }
\n-
55 void setRelativeErrorTol(double value) { relativeErrorTol = value; }
\n-
56 void setAbsoluteErrorTol(double value) { absoluteErrorTol = value; }
\n-
57 void setErrorTol(double value) { errorTol = value; }
\n-
58 void setVerbosity(const std::string& src) {
\n-
59 verbosity = verbosityTranslator(src);
\n-
60 }
\n-
61
\n-
62 static Verbosity verbosityTranslator(const std::string &s) ;
\n-
63 static std::string verbosityTranslator(Verbosity value) ;
\n-
64
\n-
67 using IterationHook = std::function<
\n-
68 void(size_t /*iteration*/, double/*errorBefore*/, double/*errorAfter*/)>;
\n-
69
\n-\n-
95
\n-
\n-\n-
98 MULTIFRONTAL_CHOLESKY,
\n-
99 MULTIFRONTAL_QR,
\n-
100 SEQUENTIAL_CHOLESKY,
\n-
101 SEQUENTIAL_QR,
\n-
102 Iterative, /* Experimental Flag */
\n-
103 CHOLMOD, /* Experimental Flag */
\n-
104 };
\n-
\n-
105
\n-
106 LinearSolverType linearSolverType = MULTIFRONTAL_CHOLESKY;
\n-
107 boost::optional<Ordering> ordering;
\n-
108 IterativeOptimizationParameters::shared_ptr iterativeParams;
\n-
109
\n-
110 NonlinearOptimizerParams() = default;
\n-
111 virtual ~NonlinearOptimizerParams() {
\n+
\n+
55 OrientedPlane3(const Unit3& n, double d) :
\n+
56 n_(n), d_(d) {
\n+
57 }
\n+
\n+
58
\n+
\n+
60 explicit OrientedPlane3(const Vector4& vec)
\n+
61 : n_(vec(0), vec(1), vec(2)), d_(vec(3)) {}
\n+
\n+
62
\n+
\n+
64 OrientedPlane3(double a, double b, double c, double d) {
\n+
65 n_ = Unit3(a, b, c);
\n+
66 d_ = d;
\n+
67 }
\n+
\n+
68
\n+
72
\n+
74 void print(const std::string& s = std::string()) const;
\n+
75
\n+
\n+
77 bool equals(const OrientedPlane3& s, double tol = 1e-9) const {
\n+
78 return (n_.equals(s.n_, tol) && (std::abs(d_ - s.d_) < tol));
\n+
79 }
\n+
\n+
80
\n+
82
\n+
89 OrientedPlane3 transform(const Pose3& xr,
\n+
90 OptionalJacobian<3, 3> Hp = boost::none,
\n+
91 OptionalJacobian<3, 6> Hr = boost::none) const;
\n+
92
\n+
100 Vector3 errorVector(const OrientedPlane3& other,
\n+
101 OptionalJacobian<3, 3> H1 = boost::none,
\n+
102 OptionalJacobian<3, 3> H2 = boost::none) const;
\n+
103
\n+
\n+
105 inline static size_t Dim() {
\n+
106 return 3;
\n+
107 }
\n+
\n+
108
\n+
\n+
110 inline size_t dim() const {
\n+
111 return 3;
\n
112 }
\n+
\n
113
\n-
114 virtual void print(const std::string& str = "") const;
\n-
115
\n-
116 bool equals(const NonlinearOptimizerParams& other, double tol = 1e-9) const {
\n-
117 return maxIterations == other.getMaxIterations()
\n-
118 && std::abs(relativeErrorTol - other.getRelativeErrorTol()) <= tol
\n-
119 && std::abs(absoluteErrorTol - other.getAbsoluteErrorTol()) <= tol
\n-
120 && std::abs(errorTol - other.getErrorTol()) <= tol
\n-
121 && verbosityTranslator(verbosity) == other.getVerbosity();
\n-
122 // && orderingType.equals(other.getOrderingType()_;
\n-
123 // && linearSolverType == other.getLinearSolverType();
\n-
124 // TODO: check ordering, iterativeParams, and iterationsHook
\n+
115 OrientedPlane3 retract(const Vector3& v,
\n+
116 OptionalJacobian<3, 3> H = boost::none) const;
\n+
117
\n+
119 Vector3 localCoordinates(const OrientedPlane3& s) const;
\n+
120
\n+
\n+
122 inline Vector4 planeCoefficients() const {
\n+
123 Vector3 unit_vec = n_.unitVector();
\n+
124 return Vector4(unit_vec[0], unit_vec[1], unit_vec[2], d_);
\n
125 }
\n+
\n
126
\n-
127 inline bool isMultifrontal() const {
\n-
128 return (linearSolverType == MULTIFRONTAL_CHOLESKY)
\n-
129 || (linearSolverType == MULTIFRONTAL_QR);
\n-
130 }
\n-
131
\n-
132 inline bool isSequential() const {
\n-
133 return (linearSolverType == SEQUENTIAL_CHOLESKY)
\n-
134 || (linearSolverType == SEQUENTIAL_QR);
\n-
135 }
\n-
136
\n-
137 inline bool isCholmod() const {
\n-
138 return (linearSolverType == CHOLMOD);
\n-
139 }
\n-
140
\n-
141 inline bool isIterative() const {
\n-
142 return (linearSolverType == Iterative);
\n-
143 }
\n-
144
\n-
145 GaussianFactorGraph::Eliminate getEliminationFunction() const {
\n-
146 switch (linearSolverType) {
\n-
147 case MULTIFRONTAL_CHOLESKY:
\n-
148 case SEQUENTIAL_CHOLESKY:
\n-\n-
150
\n-
151 case MULTIFRONTAL_QR:
\n-
152 case SEQUENTIAL_QR:
\n-
153 return EliminateQR;
\n-
154
\n-
155 default:
\n-
156 throw std::runtime_error(
\n-
157 "Nonlinear optimization parameter \\"factorization\\" is invalid");
\n-
158 }
\n-
159 }
\n-
160
\n-
161 std::string getLinearSolverType() const {
\n-
162 return linearSolverTranslator(linearSolverType);
\n-
163 }
\n-
164
\n-
165 void setLinearSolverType(const std::string& solver) {
\n-
166 linearSolverType = linearSolverTranslator(solver);
\n-
167 }
\n-
168
\n-
169 void setIterativeParams(const boost::shared_ptr<IterativeOptimizationParameters> params);
\n-
170
\n-
171 void setOrdering(const Ordering& ordering) {
\n-
172 this->ordering = ordering;
\n-
173 this->orderingType = Ordering::CUSTOM;
\n-
174 }
\n-
175
\n-
176 std::string getOrderingType() const {
\n-
177 return orderingTypeTranslator(orderingType);
\n-
178 }
\n-
179
\n-
180 // Note that if you want to use a custom ordering, you must set the ordering directly, this will switch to custom type
\n-
181 void setOrderingType(const std::string& ordering){
\n-
182 orderingType = orderingTypeTranslator(ordering);
\n-
183 }
\n-
184
\n-
185private:
\n-
186 std::string linearSolverTranslator(LinearSolverType linearSolverType) const;
\n-
187 LinearSolverType linearSolverTranslator(const std::string& linearSolverType) const;
\n-
188 std::string orderingTypeTranslator(Ordering::OrderingType type) const;
\n-
189 Ordering::OrderingType orderingTypeTranslator(const std::string& type) const;
\n-
190};
\n-
\n-
191
\n-
192// For backward compatibility:
\n-
193typedef NonlinearOptimizerParams SuccessiveLinearizationParams;
\n-
194
\n-
195} /* namespace gtsam */
\n-
Subgraph Solver from IROS 2010.
\n-
Linear Factor Graph where all factors are Gaussians.
\n-
std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr< GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors, const Ordering &keys)
Densely partially eliminate with Cholesky factorization.
Definition HessianFactor.cpp:548
\n+
\n+
128 inline Unit3 normal(OptionalJacobian<2, 3> H = boost::none) const {
\n+
129 if (H) *H << I_2x2, Z_2x1;
\n+
130 return n_;
\n+
131 }
\n+
\n+
132
\n+
\n+
134 inline double distance(OptionalJacobian<1, 3> H = boost::none) const {
\n+
135 if (H) *H << 0,0,1;
\n+
136 return d_;
\n+
137 }
\n+
\n+
138};
\n+
\n+
139
\n+
\n+
140template<> struct traits<OrientedPlane3> : public internal::Manifold<
\n+
141OrientedPlane3> {
\n+
142};
\n+
\n+
143
\n+
\n+
144template<> struct traits<const OrientedPlane3> : public internal::Manifold<
\n+
145OrientedPlane3> {
\n+
146};
\n+
\n+
147
\n+
148} // namespace gtsam
\n+
149
\n+
3D Pose
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr > EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)
Multiply all factors and eliminate the given keys from the resulting factor using a QR variant that h...
Definition JacobianFactor.cpp:789
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
OrderingType
Type of ordering to use.
Definition Ordering.h:41
\n-
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n-
IterationHook iterationHook
Optional user-provided iteration hook to be called after each optimization iteration (Default: none).
Definition NonlinearOptimizerParams.h:94
\n-
IterativeOptimizationParameters::shared_ptr iterativeParams
The container for iterativeOptimization parameters. used in CG Solvers.
Definition NonlinearOptimizerParams.h:108
\n-
Verbosity
See NonlinearOptimizerParams::verbosity.
Definition NonlinearOptimizerParams.h:37
\n-
LinearSolverType
See NonlinearOptimizerParams::linearSolverType.
Definition NonlinearOptimizerParams.h:97
\n-
std::function< void(size_t, double, double)> IterationHook
Type for an optional user-provided hook to be called after each internal optimizer iteration.
Definition NonlinearOptimizerParams.h:68
\n-
boost::optional< Ordering > ordering
The optional variable elimination ordering, or empty to use COLAMD (default: empty)
Definition NonlinearOptimizerParams.h:107
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
Represents an infinite plane in 3D, which is composed of a planar normal and its perpendicular distan...
Definition OrientedPlane3.h:36
\n+
OrientedPlane3(double a, double b, double c, double d)
Construct from four numbers of plane coeffcients (a, b, c, d)
Definition OrientedPlane3.h:64
\n+
Vector4 planeCoefficients() const
Returns the plane coefficients.
Definition OrientedPlane3.h:122
\n+
OrientedPlane3(const Unit3 &n, double d)
Construct from a Unit3 and a distance.
Definition OrientedPlane3.h:55
\n+
size_t dim() const
Dimensionality of tangent space = 3 DOF.
Definition OrientedPlane3.h:110
\n+
bool equals(const OrientedPlane3 &s, double tol=1e-9) const
The equals function with tolerance.
Definition OrientedPlane3.h:77
\n+
OrientedPlane3(const Vector4 &vec)
Construct from a vector of plane coefficients.
Definition OrientedPlane3.h:60
\n+
static size_t Dim()
Dimensionality of tangent space = 3 DOF.
Definition OrientedPlane3.h:105
\n+
OrientedPlane3()
Default constructor.
Definition OrientedPlane3.h:50
\n+
double distance(OptionalJacobian< 1, 3 > H=boost::none) const
Return the perpendicular distance to the origin.
Definition OrientedPlane3.h:134
\n+
Unit3 normal(OptionalJacobian< 2, 3 > H=boost::none) const
Return the normal.
Definition OrientedPlane3.h:128
\n+
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n+
Represents a 3D point on a unit sphere.
Definition Unit3.h:43
\n+
Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const
Return unit-norm Vector.
Definition Unit3.cpp:151
\n+
bool equals(const Unit3 &s, double tol=1e-9) const
The equals function with tolerance.
Definition Unit3.h:115
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,233 +1,201 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearOptimizerParams.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n+OrientedPlane3.h\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n+3 * Atlanta, Georgia 30332-0415\n+4 * All Rights Reserved\n+5 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-22#pragma once\n-23\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b._\bh>\n-26#include \n-27#include \n+12/*\n+13 * @file OrientedPlane3.h\n+14 * @date Dec 19, 2013\n+15 * @author Alex Trevor\n+16 * @author Frank Dellaert\n+17 * @author Zhaoyang Lv\n+18 * @brief An infinite plane, represented by a normal direction and\n+perpendicular distance\n+19 */\n+20\n+21#pragma once\n+22\n+23#include \n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bs_\be_\b3_\b._\bh>\n+25#include \n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n 28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-_\b3_\b4class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs {\n-35public:\n-_\b3_\b7 enum _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by {\n-38 SILENT, TERMINATION, ERROR, VALUES, DELTA, LINEAR\n-39 };\n+_\b3_\b6class GTSAM_EXPORT _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3 {\n+37private:\n+38 _\bU_\bn_\bi_\bt_\b3 n_;\n+39 double d_;\n 40\n-_\b4_\b1 size_t maxIterations = 100;\n-_\b4_\b2 double relativeErrorTol = 1e-5;\n-_\b4_\b3 double absoluteErrorTol = 1e-5;\n-_\b4_\b4 double errorTol = 0.0;\n-_\b4_\b5 _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by verbosity = SILENT;\n-_\b4_\b6 _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be orderingType = Ordering::COLAMD;\n-47\n-48 size_t getMaxIterations() const { return maxIterations; }\n-49 double getRelativeErrorTol() const { return relativeErrorTol; }\n-50 double getAbsoluteErrorTol() const { return absoluteErrorTol; }\n-51 double getErrorTol() const { return errorTol; }\n-52 std::string getVerbosity() const { return verbosityTranslator(verbosity); }\n+41public:\n+42 enum {\n+43 dimension = 3\n+44 };\n+45\n+48\n+_\b5_\b0 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3() :\n+51 n_(), d_(0.0) {\n+52 }\n 53\n-54 void setMaxIterations(int value) { maxIterations = value; }\n-55 void setRelativeErrorTol(double value) { relativeErrorTol = value; }\n-56 void setAbsoluteErrorTol(double value) { absoluteErrorTol = value; }\n-57 void setErrorTol(double value) { errorTol = value; }\n-58 void setVerbosity(const std::string& src) {\n-59 verbosity = verbosityTranslator(src);\n-60 }\n-61\n-62 static Verbosity verbosityTranslator(const std::string &s) ;\n-63 static std::string verbosityTranslator(Verbosity value) ;\n-64\n-_\b6_\b7 using _\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk = std::function<\n-68 void(size_t /*iteration*/, double/*errorBefore*/, double/*errorAfter*/)>;\n-69\n-_\b9_\b4 _\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk _\bi_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk;\n-95\n-_\b9_\b7 enum _\bL_\bi_\bn_\be_\ba_\br_\bS_\bo_\bl_\bv_\be_\br_\bT_\by_\bp_\be {\n-98 MULTIFRONTAL_CHOLESKY,\n-99 MULTIFRONTAL_QR,\n-100 SEQUENTIAL_CHOLESKY,\n-101 SEQUENTIAL_QR,\n-102 Iterative, /* Experimental Flag */\n-103 CHOLMOD, /* Experimental Flag */\n-104 };\n-105\n-_\b1_\b0_\b6 _\bL_\bi_\bn_\be_\ba_\br_\bS_\bo_\bl_\bv_\be_\br_\bT_\by_\bp_\be linearSolverType = MULTIFRONTAL_CHOLESKY;\n-_\b1_\b0_\b7 boost::optional _\bo_\br_\bd_\be_\br_\bi_\bn_\bg;\n-_\b1_\b0_\b8 IterativeOptimizationParameters::shared_ptr _\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bP_\ba_\br_\ba_\bm_\bs;\n-109\n-110 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs() = default;\n-111 virtual _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs() {\n+_\b5_\b5 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3(const _\bU_\bn_\bi_\bt_\b3& n, double d) :\n+56 n_(n), d_(d) {\n+57 }\n+58\n+_\b6_\b0 explicit _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3(const Vector4& vec)\n+61 : n_(vec(0), vec(1), vec(2)), d_(vec(3)) {}\n+62\n+_\b6_\b4 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3(double a, double b, double c, double d) {\n+65 n_ = _\bU_\bn_\bi_\bt_\b3(a, b, c);\n+66 d_ = d;\n+67 }\n+68\n+72\n+74 void _\bp_\br_\bi_\bn_\bt(const std::string& s = std::string()) const;\n+75\n+_\b7_\b7 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3& s, double tol = 1e-9) const {\n+78 return (n_._\be_\bq_\bu_\ba_\bl_\bs(s.n_, tol) && (std::abs(d_ - s.d_) < tol));\n+79 }\n+80\n+82\n+89 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3 transform(const _\bP_\bo_\bs_\be_\b3& xr,\n+90 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> Hp = boost::none,\n+91 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b6_\b> Hr = boost::none) const;\n+92\n+100 Vector3 errorVector(const _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3& other,\n+101 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H1 = boost::none,\n+102 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H2 = boost::none) const;\n+103\n+_\b1_\b0_\b5 inline static size_t _\bD_\bi_\bm() {\n+106 return 3;\n+107 }\n+108\n+_\b1_\b1_\b0 inline size_t _\bd_\bi_\bm() const {\n+111 return 3;\n 112 }\n 113\n-114 virtual void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"\") const;\n-115\n-116 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& other, double tol = 1e-9) const\n-{\n-117 return maxIterations == other.getMaxIterations()\n-118 && std::abs(relativeErrorTol - other.getRelativeErrorTol()) <= tol\n-119 && std::abs(absoluteErrorTol - other.getAbsoluteErrorTol()) <= tol\n-120 && std::abs(errorTol - other.getErrorTol()) <= tol\n-121 && verbosityTranslator(verbosity) == other.getVerbosity();\n-122 // && orderingType.equals(other.getOrderingType()_;\n-123 // && linearSolverType == other.getLinearSolverType();\n-124 // TODO: check ordering, iterativeParams, and iterationsHook\n+115 _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3 retract(const Vector3& v,\n+116 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b3_\b,_\b _\b3_\b> H = boost::none) const;\n+117\n+119 Vector3 localCoordinates(const _\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3& s) const;\n+120\n+_\b1_\b2_\b2 inline Vector4 _\bp_\bl_\ba_\bn_\be_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs() const {\n+123 Vector3 unit_vec = n_._\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br();\n+124 return Vector4(unit_vec[0], unit_vec[1], unit_vec[2], d_);\n 125 }\n 126\n-127 inline bool isMultifrontal() const {\n-128 return (linearSolverType == MULTIFRONTAL_CHOLESKY)\n-129 || (linearSolverType == MULTIFRONTAL_QR);\n-130 }\n-131\n-132 inline bool isSequential() const {\n-133 return (linearSolverType == SEQUENTIAL_CHOLESKY)\n-134 || (linearSolverType == SEQUENTIAL_QR);\n-135 }\n-136\n-137 inline bool isCholmod() const {\n-138 return (linearSolverType == CHOLMOD);\n-139 }\n-140\n-141 inline bool isIterative() const {\n-142 return (linearSolverType == Iterative);\n-143 }\n-144\n-145 GaussianFactorGraph::Eliminate getEliminationFunction() const {\n-146 switch (linearSolverType) {\n-147 case MULTIFRONTAL_CHOLESKY:\n-148 case SEQUENTIAL_CHOLESKY:\n-149 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by;\n-150\n-151 case MULTIFRONTAL_QR:\n-152 case SEQUENTIAL_QR:\n-153 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR;\n-154\n-155 default:\n-156 throw std::runtime_error(\n-157 \"Nonlinear optimization parameter \\\"factorization\\\" is invalid\");\n-158 }\n-159 }\n-160\n-161 std::string getLinearSolverType() const {\n-162 return linearSolverTranslator(linearSolverType);\n-163 }\n-164\n-165 void setLinearSolverType(const std::string& solver) {\n-166 linearSolverType = linearSolverTranslator(solver);\n-167 }\n-168\n-169 void setIterativeParams(const boost::\n-shared_ptr params);\n-170\n-171 void setOrdering(const Ordering& ordering) {\n-172 this->ordering = ordering;\n-173 this->orderingType = Ordering::CUSTOM;\n-174 }\n-175\n-176 std::string getOrderingType() const {\n-177 return orderingTypeTranslator(orderingType);\n-178 }\n-179\n-180 // Note that if you want to use a custom ordering, you must set the\n-ordering directly, this will switch to custom type\n-181 void setOrderingType(const std::string& ordering){\n-182 orderingType = orderingTypeTranslator(ordering);\n-183 }\n-184\n-185private:\n-186 std::string linearSolverTranslator(LinearSolverType linearSolverType)\n-const;\n-187 LinearSolverType linearSolverTranslator(const std::string&\n-linearSolverType) const;\n-188 std::string orderingTypeTranslator(Ordering::OrderingType type) const;\n-189 Ordering::OrderingType orderingTypeTranslator(const std::string& type)\n-const;\n-190};\n-191\n-192// For backward compatibility:\n-193typedef NonlinearOptimizerParams SuccessiveLinearizationParams;\n-194\n-195} /* namespace gtsam */\n-_\bS_\bu_\bb_\bg_\br_\ba_\bp_\bh_\bS_\bo_\bl_\bv_\be_\br_\b._\bh\n-Subgraph Solver from IROS 2010.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bP_\br_\be_\bf_\be_\br_\bC_\bh_\bo_\bl_\be_\bs_\bk_\by\n-std::pair< boost::shared_ptr< GaussianConditional >, boost::shared_ptr<\n-GaussianFactor > > EliminatePreferCholesky(const GaussianFactorGraph &factors,\n-const Ordering &keys)\n-Densely partially eliminate with Cholesky factorization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HessianFactor.cpp:548\n+_\b1_\b2_\b8 inline _\bU_\bn_\bi_\bt_\b3 _\bn_\bo_\br_\bm_\ba_\bl(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b2_\b,_\b _\b3_\b> H = boost::none) const {\n+129 if (H) *H << I_2x2, Z_2x1;\n+130 return n_;\n+131 }\n+132\n+_\b1_\b3_\b4 inline double _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be(_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b3_\b> H = boost::none) const {\n+135 if (H) *H << 0,0,1;\n+136 return d_;\n+137 }\n+138};\n+139\n+_\b1_\b4_\b0template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd<\n+141OrientedPlane3> {\n+142};\n+143\n+_\b1_\b4_\b4template<> struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd<\n+145OrientedPlane3> {\n+146};\n+147\n+148} // namespace gtsam\n+149\n+_\bP_\bo_\bs_\be_\b3_\b._\bh\n+3D Pose\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const Matrix &A, const string &s, ostream &stream)\n print without optional string, must specify cout yourself\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bQ_\bR\n-std::pair< GaussianConditional::shared_ptr, JacobianFactor::shared_ptr >\n-EliminateQR(const GaussianFactorGraph &factors, const Ordering &keys)\n-Multiply all factors and eliminate the given keys from the resulting factor\n-using a QR variant that h...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor.cpp:789\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bT_\by_\bp_\be\n-OrderingType\n-Type of ordering to use.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n-The common parameters for Nonlinear optimizers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk\n-IterationHook iterationHook\n-Optional user-provided iteration hook to be called after each optimization\n-iteration (Default: none).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bi_\bv_\be_\bP_\ba_\br_\ba_\bm_\bs\n-IterativeOptimizationParameters::shared_ptr iterativeParams\n-The container for iterativeOptimization parameters. used in CG Solvers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n-Verbosity\n-See NonlinearOptimizerParams::verbosity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bL_\bi_\bn_\be_\ba_\br_\bS_\bo_\bl_\bv_\be_\br_\bT_\by_\bp_\be\n-LinearSolverType\n-See NonlinearOptimizerParams::linearSolverType.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk\n-std::function< void(size_t, double, double)> IterationHook\n-Type for an optional user-provided hook to be called after each internal\n-optimizer iteration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bo_\br_\bd_\be_\br_\bi_\bn_\bg\n-boost::optional< Ordering > ordering\n-The optional variable elimination ordering, or empty to use COLAMD (default:\n-empty)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:107\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+Both ManifoldTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n+Represents an infinite plane in 3D, which is composed of a planar normal and\n+its perpendicular distan...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n+OrientedPlane3(double a, double b, double c, double d)\n+Construct from four numbers of plane coeffcients (a, b, c, d)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bp_\bl_\ba_\bn_\be_\bC_\bo_\be_\bf_\bf_\bi_\bc_\bi_\be_\bn_\bt_\bs\n+Vector4 planeCoefficients() const\n+Returns the plane coefficients.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:122\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n+OrientedPlane3(const Unit3 &n, double d)\n+Construct from a Unit3 and a distance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const\n+Dimensionality of tangent space = 3 DOF.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:110\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const OrientedPlane3 &s, double tol=1e-9) const\n+The equals function with tolerance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n+OrientedPlane3(const Vector4 &vec)\n+Construct from a vector of plane coefficients.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+Dimensionality of tangent space = 3 DOF.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3\n+OrientedPlane3()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be\n+double distance(OptionalJacobian< 1, 3 > H=boost::none) const\n+Return the perpendicular distance to the origin.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:134\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bi_\be_\bn_\bt_\be_\bd_\bP_\bl_\ba_\bn_\be_\b3_\b:_\b:_\bn_\bo_\br_\bm_\ba_\bl\n+Unit3 normal(OptionalJacobian< 2, 3 > H=boost::none) const\n+Return the normal.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OrientedPlane3.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n+A 3D pose (R,t) : (Rot3,Point3)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3\n+Represents a 3D point on a unit sphere.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\bu_\bn_\bi_\bt_\bV_\be_\bc_\bt_\bo_\br\n+Vector3 unitVector(OptionalJacobian< 3, 2 > H=boost::none) const\n+Return unit-norm Vector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.cpp:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bU_\bn_\bi_\bt_\b3_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+bool equals(const Unit3 &s, double tol=1e-9) const\n+The equals function with tolerance.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Unit3.h:115\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * O\bOr\bri\bie\ben\bnt\bte\bed\bdP\bPl\bla\ban\bne\be3\b3.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01094.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01238.html", "comments": ["Files 82% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizer.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/InitializePose3.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
NonlinearOptimizer.h File Reference
\n+Typedefs
\n+
InitializePose3.h File Reference
\n
\n
\n \n-

Base class and parameters for nonlinear optimization algorithms. \n+

Initialize Pose3 in a factor graph. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n \n

\n Classes

class  gtsam::NonlinearOptimizer
 This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a NonlinearFactorGraph. More...
struct  gtsam::InitializePose3
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n-\n-\n-\n-\n-\n-\n+\n+\n+\n+\n+\n

\n-Functions

\n-bool gtsam::checkConvergence (double relativeErrorTreshold, double absoluteErrorTreshold, double errorThreshold, double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity=NonlinearOptimizerParams::SILENT)
 Check whether the relative error decrease is less than relativeErrorTreshold, the absolute error decrease is less than absoluteErrorTreshold, or the error itself is less than errorThreshold.
 
\n-GTSAM_EXPORT bool gtsam::checkConvergence (const NonlinearOptimizerParams &params, double currentError, double newError)
 

\n+Typedefs

\n+typedef std::map< Key, std::vector< size_t > > gtsam::KeyVectorMap
 
\n+typedef std::map< Key, Rot3gtsam::KeyRotMap
 
\n

Detailed Description

\n-

Base class and parameters for nonlinear optimization algorithms.

\n-
Author
Richard Roberts
\n-
Date
Sep 7, 2009
\n+

Initialize Pose3 in a factor graph.

\n+
Author
Luca Carlone
\n+
\n+Frank Dellaert
\n+
Date
August, 2014
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,41 +1,32 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bs\n-NonlinearOptimizer.h File Reference\n-Base class and parameters for nonlinear optimization algorithms. _\bM_\bo_\br_\be_\b._\b._\b.\n+_\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs | _\bT_\by_\bp_\be_\bd_\be_\bf_\bs\n+InitializePose3.h File Reference\n+Initialize Pose3 in a factor graph. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-\u00a0 This is the abstract interface for classes that can optimize for the\n- maximum-likelihood estimate of a _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh. _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n-F\bFu\bun\bnc\bct\bti\bio\bon\bns\bs\n- bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bch\bhe\bec\bck\bkC\bCo\bon\bnv\bve\ber\brg\bge\ben\bnc\bce\be (double relativeErrorTreshold,\n- double absoluteErrorTreshold, double errorThreshold, double\n- currentError, double newError, _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:\n- _\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by verbosity=NonlinearOptimizerParams::SILENT)\n- Check whether the relative error decrease is less than\n-\u00a0 relativeErrorTreshold, the absolute error decrease is less\n- than absoluteErrorTreshold, o\bor\br the error itself is less than\n- errorThreshold.\n+T\bTy\byp\bpe\bed\bde\bef\bfs\bs\n+typedef std::map< _\bK_\be_\by, std::vector< size_t > >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byV\bVe\bec\bct\bto\bor\brM\bMa\bap\bp\n \u00a0\n-GTSAM_EXPORT bool\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:c\bch\bhe\bec\bck\bkC\bCo\bon\bnv\bve\ber\brg\bge\ben\bnc\bce\be (const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n- ¶ms, double currentError, double newError)\n+ typedef std::map< _\bK_\be_\by, _\bR_\bo_\bt_\b3 >\u00a0 g\bgt\bts\bsa\bam\bm:\b::\b:K\bKe\bey\byR\bRo\bot\btM\bMa\bap\bp\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Base class and parameters for nonlinear optimization algorithms.\n+Initialize Pose3 in a factor graph.\n Author\n- Richard Roberts\n+ Luca Carlone\n+ Frank Dellaert\n Date\n- Sep 7, 2009\n+ August, 2014\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bs_\bl_\ba_\bm\n+ * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01094_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00272_source.html", "comments": ["Files 92% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearOptimizer.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/discrete/DiscreteKey.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
NonlinearOptimizer.h
\n+
DiscreteKey.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n+\n+
22#include <gtsam/inference/Key.h>
\n
23
\n-
24namespace gtsam {
\n-
25
\n-
26namespace internal { struct NonlinearOptimizerState; }
\n-
27
\n-
\n-
75class GTSAM_EXPORT NonlinearOptimizer {
\n-
76
\n-
77protected:
\n-\n-
79
\n-
80 std::unique_ptr<internal::NonlinearOptimizerState> state_;
\n+
24#include <boost/serialization/vector.hpp>
\n+
25#include <map>
\n+
26#include <string>
\n+
27#include <vector>
\n+
28
\n+
29namespace gtsam {
\n+
30
\n+
36 using DiscreteKey = std::pair<Key,size_t>;
\n+
37
\n+
\n+
39 struct GTSAM_EXPORT DiscreteKeys: public std::vector<DiscreteKey> {
\n+
40
\n+
41 // Forward all constructors.
\n+
42 using std::vector<DiscreteKey>::vector;
\n+
43
\n+
45 DiscreteKeys() : std::vector<DiscreteKey>::vector() {}
\n+
46
\n+
48 explicit DiscreteKeys(const DiscreteKey& key) { push_back(key); }
\n+
49
\n+
\n+
51 explicit DiscreteKeys(std::map<Key, size_t> cardinalities) {
\n+
52 for (auto&& kv : cardinalities) emplace_back(kv);
\n+
53 }
\n+
\n+
54
\n+
\n+
56 DiscreteKeys(const std::vector<DiscreteKey>& keys) :
\n+
57 std::vector<DiscreteKey>(keys) {
\n+
58 }
\n+
\n+
59
\n+
61 DiscreteKeys(const std::vector<int>& cs);
\n+
62
\n+
64 KeyVector indices() const;
\n+
65
\n+
67 std::map<Key,size_t> cardinalities() const;
\n+
68
\n+
\n+\n+
71 push_back(key);
\n+
72 return *this;
\n+
73 }
\n+
\n+
74
\n+
76 void print(const std::string& s = "",
\n+
77 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
78
\n+
80 bool equals(const DiscreteKeys& other, double tol = 0) const;
\n
81
\n-
82public:
\n-
84 using shared_ptr = boost::shared_ptr<const NonlinearOptimizer>;
\n-
85
\n-
88
\n-
98 virtual const Values& optimize() { defaultOptimize(); return values(); }
\n+
83 friend class boost::serialization::access;
\n+
84 template <class ARCHIVE>
\n+
85 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n+
86 ar& boost::serialization::make_nvp(
\n+
87 "DiscreteKeys",
\n+
88 boost::serialization::base_object<std::vector<DiscreteKey>>(*this));
\n+
89 }
\n+
90
\n+
91 }; // DiscreteKeys
\n+
\n+
92
\n+
94 GTSAM_EXPORT DiscreteKeys operator&(const DiscreteKey& key1, const DiscreteKey& key2);
\n+
95
\n+
96 // traits
\n+
97 template <>
\n+
98 struct traits<DiscreteKeys> : public Testable<DiscreteKeys> {};
\n
99
\n-
106 const Values& optimizeSafely();
\n-
107
\n-
109 double error() const;
\n-
110
\n-
112 size_t iterations() const;
\n-
113
\n-
115 const Values &values() const;
\n-
116
\n-
118 const NonlinearFactorGraph &graph() const { return graph_; }
\n-
119
\n-
121
\n-
124
\n-
126 virtual ~NonlinearOptimizer();
\n-
127
\n-
129 virtual VectorValues solve(const GaussianFactorGraph &gfg,
\n-
130 const NonlinearOptimizerParams& params) const;
\n-
131
\n-\n-
137
\n-
139
\n-
140protected:
\n-
144 void defaultOptimize();
\n-
145
\n-
146 virtual const NonlinearOptimizerParams& _params() const = 0;
\n-
147
\n-\n-
150 std::unique_ptr<internal::NonlinearOptimizerState> state);
\n-
151};
\n-
\n-
152
\n-
157GTSAM_EXPORT bool checkConvergence(double relativeErrorTreshold,
\n-
158 double absoluteErrorTreshold, double errorThreshold,
\n-
159 double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity = NonlinearOptimizerParams::SILENT);
\n-
160
\n-
161GTSAM_EXPORT bool checkConvergence(const NonlinearOptimizerParams& params, double currentError,
\n-
162 double newError);
\n-
163
\n-
164} // gtsam
\n-
Parameters for nonlinear optimization.
\n-
Factor Graph consisting of non-linear factors.
\n+
100 } // namespace gtsam
\n+\n+
Included from all GTSAM files.
\n+
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:36
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
bool checkConvergence(double relativeErrorTreshold, double absoluteErrorTreshold, double errorThreshold, double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity)
Check whether the relative error decrease is less than relativeErrorTreshold, the absolute error decr...
Definition NonlinearOptimizer.cpp:185
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
Definition NonlinearFactorGraph.h:55
\n-
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition NonlinearOptimizer.h:75
\n-
const NonlinearFactorGraph & graph() const
return the graph with nonlinear factors
Definition NonlinearOptimizer.h:118
\n-
NonlinearFactorGraph graph_
The graph with nonlinear factors.
Definition NonlinearOptimizer.h:78
\n-
virtual const Values & optimize()
Optimize for the maximum-likelihood estimate, returning a the optimized variable assignments.
Definition NonlinearOptimizer.h:98
\n-
std::unique_ptr< internal::NonlinearOptimizerState > state_
PIMPL'd state.
Definition NonlinearOptimizer.h:80
\n-
boost::shared_ptr< const NonlinearOptimizer > shared_ptr
A shared pointer to this class.
Definition NonlinearOptimizer.h:84
\n-
virtual GaussianFactorGraph::shared_ptr iterate()=0
Perform a single iteration, returning GaussianFactorGraph corresponding to the linearized factor grap...
\n-
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n-
Verbosity
See NonlinearOptimizerParams::verbosity.
Definition NonlinearOptimizerParams.h:37
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
DiscreteKeys operator&(const DiscreteKey &key1, const DiscreteKey &key2)
Create a list from two keys.
Definition DiscreteKey.cpp:46
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:39
\n+
DiscreteKeys & operator&(const DiscreteKey &key)
Add a key (non-const!)
Definition DiscreteKey.h:70
\n+
DiscreteKeys()
Constructor for serialization.
Definition DiscreteKey.h:45
\n+
DiscreteKeys(const DiscreteKey &key)
Construct from a key.
Definition DiscreteKey.h:48
\n+
DiscreteKeys(const std::vector< DiscreteKey > &keys)
Construct from a vector of keys.
Definition DiscreteKey.h:56
\n+
DiscreteKeys(std::map< Key, size_t > cardinalities)
Construct from cardinalities.
Definition DiscreteKey.h:51
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearOptimizer.h\n+DiscreteKey.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,136 +16,133 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n 23\n-24namespace _\bg_\bt_\bs_\ba_\bm {\n-25\n-26namespace internal { struct NonlinearOptimizerState; }\n-27\n-_\b7_\b5class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n-76\n-77protected:\n-_\b7_\b8 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bg_\br_\ba_\bp_\bh_\b_;\n-79\n-_\b8_\b0 std::unique_ptr _\bs_\bt_\ba_\bt_\be_\b_;\n+24#include \n+25#include \n+26#include \n+27#include \n+28\n+29namespace _\bg_\bt_\bs_\ba_\bm {\n+30\n+_\b3_\b6 using _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by = std::pair;\n+37\n+_\b3_\b9 struct GTSAM_EXPORT _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs: public std::vector {\n+40\n+41 // Forward all constructors.\n+42 using std::vector<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by>::vector;\n+43\n+_\b4_\b5 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs() : std::vector<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by>::vector() {}\n+46\n+_\b4_\b8 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key) { push_back(key); }\n+49\n+_\b5_\b1 explicit _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs(std::map cardinalities) {\n+52 for (auto&& kv : cardinalities) emplace_back(kv);\n+53 }\n+54\n+_\b5_\b6 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs(const std::vector& keys) :\n+57 std::vector<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by>(keys) {\n+58 }\n+59\n+61 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs(const std::vector& cs);\n+62\n+64 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br indices() const;\n+65\n+67 std::map cardinalities() const;\n+68\n+_\b7_\b0 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key) {\n+71 push_back(key);\n+72 return *this;\n+73 }\n+74\n+76 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+77 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+78\n+80 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs& other, double tol = 0) const;\n 81\n-82public:\n-_\b8_\b4 using _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br = boost::shared_ptr;\n-85\n-88\n-_\b9_\b8 virtual const _\bV_\ba_\bl_\bu_\be_\bs& _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() { defaultOptimize(); return values(); }\n+_\b8_\b3 friend class boost::serialization::access;\n+84 template \n+85 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n+86 ar& boost::serialization::make_nvp(\n+87 \"DiscreteKeys\",\n+88 boost::serialization::base_object>(*this));\n+89 }\n+90\n+91 }; // DiscreteKeys\n+92\n+94 GTSAM_EXPORT DiscreteKeys _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&(const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key1, const\n+_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by& key2);\n+95\n+96 // traits\n+97 template <>\n+_\b9_\b8 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n 99\n-106 const _\bV_\ba_\bl_\bu_\be_\bs& optimizeSafely();\n-107\n-109 double error() const;\n-110\n-112 size_t iterations() const;\n-113\n-115 const _\bV_\ba_\bl_\bu_\be_\bs &values() const;\n-116\n-_\b1_\b1_\b8 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &_\bg_\br_\ba_\bp_\bh() const { return graph_; }\n-119\n-121\n-124\n-126 virtual _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br();\n-127\n-129 virtual _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs solve(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &gfg,\n-130 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& params) const;\n-131\n-_\b1_\b3_\b6 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bi_\bt_\be_\br_\ba_\bt_\be() = 0;\n-137\n-139\n-140protected:\n-144 void defaultOptimize();\n-145\n-146 virtual const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& _params() const = 0;\n-147\n-149 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n-150 std::unique_ptr state);\n-151};\n-152\n-157GTSAM_EXPORT bool _\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(double relativeErrorTreshold,\n-158 double absoluteErrorTreshold, double errorThreshold,\n-159 double currentError, double newError, _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n-verbosity = NonlinearOptimizerParams::SILENT);\n-160\n-161GTSAM_EXPORT bool _\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& params,\n-double currentError,\n-162 double newError);\n-163\n-164} // gtsam\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n-Parameters for nonlinear optimization.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n+100 } // namespace gtsam\n+_\bK_\be_\by_\b._\bh\n+_\bg_\bl_\bo_\bb_\ba_\bl_\b__\bi_\bn_\bc_\bl_\bu_\bd_\be_\bs_\b._\bh\n+Included from all GTSAM files.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by\n+std::pair< Key, size_t > DiscreteKey\n+Key type for discrete variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:36\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n-bool checkConvergence(double relativeErrorTreshold, double\n-absoluteErrorTreshold, double errorThreshold, double currentError, double\n-newError, NonlinearOptimizerParams::Verbosity verbosity)\n-Check whether the relative error decrease is less than relativeErrorTreshold,\n-the absolute error decr...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.cpp:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-This is the abstract interface for classes that can optimize for the maximum-\n-likelihood estimate of a...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\br_\ba_\bp_\bh\n-const NonlinearFactorGraph & graph() const\n-return the graph with nonlinear factors\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:118\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bg_\br_\ba_\bp_\bh_\b_\n-NonlinearFactorGraph graph_\n-The graph with nonlinear factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n-virtual const Values & optimize()\n-Optimize for the maximum-likelihood estimate, returning a the optimized\n-variable assignments.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\bt_\ba_\bt_\be_\b_\n-std::unique_ptr< internal::NonlinearOptimizerState > state_\n-PIMPL'd state.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< const NonlinearOptimizer > shared_ptr\n-A shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\be\n-virtual GaussianFactorGraph::shared_ptr iterate()=0\n-Perform a single iteration, returning GaussianFactorGraph corresponding to the\n-linearized factor grap...\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n-The common parameters for Nonlinear optimizers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bV_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n-Verbosity\n-See NonlinearOptimizerParams::verbosity.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&\n+DiscreteKeys operator&(const DiscreteKey &key1, const DiscreteKey &key2)\n+Create a list from two keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.cpp:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys is a set of keys that can be assembled using the & operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b&\n+DiscreteKeys & operator&(const DiscreteKey &key)\n+Add a key (non-const!)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys()\n+Constructor for serialization.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys(const DiscreteKey &key)\n+Construct from a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys(const std::vector< DiscreteKey > &keys)\n+Construct from a vector of keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:56\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\bs\n+DiscreteKeys(std::map< Key, size_t > cardinalities)\n+Construct from cardinalities.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteKey.h:51\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bd_\bi_\bs_\bc_\br_\be_\bt_\be\n+ * _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bK_\be_\by_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01124_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00794_source.html", "comments": ["Files 84% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearConjugateGradientOptimizer.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/AcceleratedPowerMethod.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
NonlinearConjugateGradientOptimizer.h
\n+
AcceleratedPowerMethod.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-
21#include <gtsam/base/Manifold.h>
\n-\n-
23#include <boost/tuple/tuple.hpp>
\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
\n-\n-
29
\n-
30 /* a class for the nonlinearConjugateGradient template */
\n-
31 class System {
\n-
32 public:
\n-
33 typedef Values State;
\n-
34 typedef VectorValues Gradient;
\n-\n-
36
\n-
37 protected:
\n-
38 const NonlinearFactorGraph &graph_;
\n-
39
\n-
40 public:
\n-
41 System(const NonlinearFactorGraph &graph) :
\n-
42 graph_(graph) {
\n-
43 }
\n-
44 double error(const State &state) const;
\n-
45 Gradient gradient(const State &state) const;
\n-
46 State advance(const State &current, const double alpha,
\n-
47 const Gradient &g) const;
\n-
48 };
\n-
49
\n-
50public:
\n-
51
\n-\n-\n-
54 typedef boost::shared_ptr<NonlinearConjugateGradientOptimizer> shared_ptr;
\n-
55
\n-
56protected:
\n-
57 Parameters params_;
\n-
58
\n-
59 const NonlinearOptimizerParams& _params() const override {
\n-
60 return params_;
\n-
61 }
\n-
62
\n-
63public:
\n-
64
\n-\n-
67 const Values& initialValues, const Parameters& params = Parameters());
\n-
68
\n-
\n-\n-
71 }
\n-
\n-
72
\n-
77 GaussianFactorGraph::shared_ptr iterate() override;
\n-
78
\n-
83 const Values& optimize() override;
\n-
84};
\n-
\n-
85
\n-
87template<class S, class V, class W>
\n-
\n-
88double lineSearch(const S &system, const V currentValues, const W &gradient) {
\n-
89
\n-
90 /* normalize it such that it becomes a unit vector */
\n-
91 const double g = gradient.norm();
\n-
92
\n-
93 // perform the golden section search algorithm to decide the the optimal step size
\n-
94 // detail refer to http://en.wikipedia.org/wiki/Golden_section_search
\n-
95 const double phi = 0.5 * (1.0 + std::sqrt(5.0)), resphi = 2.0 - phi, tau =
\n-
96 1e-5;
\n-
97 double minStep = -1.0 / g, maxStep = 0, newStep = minStep
\n-
98 + (maxStep - minStep) / (phi + 1.0);
\n-
99
\n-
100 V newValues = system.advance(currentValues, newStep, gradient);
\n-
101 double newError = system.error(newValues);
\n-
102
\n-
103 while (true) {
\n-
104 const bool flag = (maxStep - newStep > newStep - minStep) ? true : false;
\n-
105 const double testStep =
\n-
106 flag ? newStep + resphi * (maxStep - newStep) :
\n-
107 newStep - resphi * (newStep - minStep);
\n-
108
\n-
109 if ((maxStep - minStep)
\n-
110 < tau * (std::abs(testStep) + std::abs(newStep))) {
\n-
111 return 0.5 * (minStep + maxStep);
\n-
112 }
\n-
113
\n-
114 const V testValues = system.advance(currentValues, testStep, gradient);
\n-
115 const double testError = system.error(testValues);
\n-
116
\n-
117 // update the working range
\n-
118 if (testError >= newError) {
\n-
119 if (flag)
\n-
120 maxStep = testStep;
\n-
121 else
\n-
122 minStep = testStep;
\n-
123 } else {
\n-
124 if (flag) {
\n-
125 minStep = newStep;
\n-
126 newStep = testStep;
\n-
127 newError = testError;
\n-
128 } else {
\n-
129 maxStep = newStep;
\n-
130 newStep = testStep;
\n-
131 newError = testError;
\n-
132 }
\n-
133 }
\n-
134 }
\n-
135 return 0.0;
\n-
136}
\n-
\n-
137
\n-
147template<class S, class V>
\n-
\n-
148boost::tuple<V, int> nonlinearConjugateGradient(const S &system,
\n-
149 const V &initial, const NonlinearOptimizerParams &params,
\n-
150 const bool singleIteration, const bool gradientDescent = false) {
\n-
151
\n-
152 // GTSAM_CONCEPT_MANIFOLD_TYPE(V)
\n-
153
\n-
154 size_t iteration = 0;
\n-
155
\n-
156 // check if we're already close enough
\n-
157 double currentError = system.error(initial);
\n-
158 if (currentError <= params.errorTol) {
\n-
159 if (params.verbosity >= NonlinearOptimizerParams::ERROR) {
\n-
160 std::cout << "Exiting, as error = " << currentError << " < "
\n-
161 << params.errorTol << std::endl;
\n-
162 }
\n-
163 return boost::tie(initial, iteration);
\n-
164 }
\n-
165
\n-
166 V currentValues = initial;
\n-
167 typename S::Gradient currentGradient = system.gradient(currentValues),
\n-
168 prevGradient, direction = currentGradient;
\n-
169
\n-
170 /* do one step of gradient descent */
\n-
171 V prevValues = currentValues;
\n-
172 double prevError = currentError;
\n-
173 double alpha = lineSearch(system, currentValues, direction);
\n-
174 currentValues = system.advance(prevValues, alpha, direction);
\n-
175 currentError = system.error(currentValues);
\n-
176
\n-
177 // Maybe show output
\n-
178 if (params.verbosity >= NonlinearOptimizerParams::ERROR)
\n-
179 std::cout << "Initial error: " << currentError << std::endl;
\n-
180
\n-
181 // Iterative loop
\n-
182 do {
\n-
183 if (gradientDescent == true) {
\n-
184 direction = system.gradient(currentValues);
\n-
185 } else {
\n-
186 prevGradient = currentGradient;
\n-
187 currentGradient = system.gradient(currentValues);
\n-
188 // Polak-Ribiere: beta = g'*(g_n-g_n-1)/g_n-1'*g_n-1
\n-
189 const double beta = std::max(0.0,
\n-
190 currentGradient.dot(currentGradient - prevGradient)
\n-
191 / prevGradient.dot(prevGradient));
\n-
192 direction = currentGradient + (beta * direction);
\n-
193 }
\n-
194
\n-
195 alpha = lineSearch(system, currentValues, direction);
\n-
196
\n-
197 prevValues = currentValues;
\n-
198 prevError = currentError;
\n-
199
\n-
200 currentValues = system.advance(prevValues, alpha, direction);
\n-
201 currentError = system.error(currentValues);
\n-
202
\n-
203 // User hook:
\n-
204 if (params.iterationHook)
\n-
205 params.iterationHook(iteration, prevError, currentError);
\n-
206
\n-
207 // Maybe show output
\n-
208 if (params.verbosity >= NonlinearOptimizerParams::ERROR)
\n-
209 std::cout << "iteration: " << iteration << ", currentError: " << currentError << std::endl;
\n-
210 } while (++iteration < params.maxIterations && !singleIteration
\n-\n-
212 params.errorTol, prevError, currentError, params.verbosity));
\n-
213
\n-
214 // Printing if verbose
\n-
215 if (params.verbosity >= NonlinearOptimizerParams::ERROR
\n-
216 && iteration >= params.maxIterations)
\n-
217 std::cout
\n-
218 << "nonlinearConjugateGradient: Terminating because reached maximum iterations"
\n-
219 << std::endl;
\n-
220
\n-
221 return boost::tie(currentValues, iteration);
\n-
222}
\n-
\n-
223
\n-
224} // \\ namespace gtsam
\n-
225
\n-
Base class and basic functions for Manifold types.
\n-
Base class and parameters for nonlinear optimization algorithms.
\n+
20#pragma once
\n+
21
\n+\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
26using Sparse = Eigen::SparseMatrix<double>;
\n+
27
\n+
50template <class Operator>
\n+
\n+
51class AcceleratedPowerMethod : public PowerMethod<Operator> {
\n+
52
\n+
53 double beta_ = 0; // a Polyak momentum term
\n+
54
\n+
55 Vector previousVector_; // store previous vector
\n+
56
\n+
57 public:
\n+
\n+\n+
63 const Operator &A, const boost::optional<Vector> initial = boost::none,
\n+
64 double initialBeta = 0.0)
\n+
65 : PowerMethod<Operator>(A, initial) {
\n+
66 // initialize Ritz eigen vector and previous vector
\n+
67 this->ritzVector_ = initial ? initial.get() : Vector::Random(this->dim_);
\n+
68 this->ritzVector_.normalize();
\n+
69 previousVector_ = Vector::Zero(this->dim_);
\n+
70
\n+
71 // initialize beta_
\n+
72 beta_ = initialBeta;
\n+
73 }
\n+
\n+
74
\n+
\n+
80 Vector acceleratedPowerIteration (const Vector &x1, const Vector &x0,
\n+
81 const double beta) const {
\n+
82 Vector y = this->A_ * x1 - beta * x0;
\n+
83 y.normalize();
\n+
84 return y;
\n+
85 }
\n+
\n+
86
\n+
\n+
92 Vector acceleratedPowerIteration () const {
\n+
93 Vector y = acceleratedPowerIteration(this->ritzVector_, previousVector_, beta_);
\n+
94 return y;
\n+
95 }
\n+
\n+
96
\n+
\n+
101 double estimateBeta(const size_t T = 10) const {
\n+
102 // set initial estimation of maxBeta
\n+
103 Vector initVector = this->ritzVector_;
\n+
104 const double up = initVector.dot( this->A_ * initVector );
\n+
105 const double down = initVector.dot(initVector);
\n+
106 const double mu = up / down;
\n+
107 double maxBeta = mu * mu / 4;
\n+
108 size_t maxIndex;
\n+
109 std::vector<double> betas;
\n+
110
\n+
111 Matrix R = Matrix::Zero(this->dim_, 10);
\n+
112 // run T times of iteration to find the beta that has the largest Rayleigh quotient
\n+
113 for (size_t t = 0; t < T; t++) {
\n+
114 // after each t iteration, reset the betas with the current maxBeta
\n+
115 betas = {2 / 3 * maxBeta, 0.99 * maxBeta, maxBeta, 1.01 * maxBeta,
\n+
116 1.5 * maxBeta};
\n+
117 // iterate through every beta value
\n+
118 for (size_t k = 0; k < betas.size(); ++k) {
\n+
119 // initialize x0 and x00 in each iteration of each beta
\n+
120 Vector x0 = initVector;
\n+
121 Vector x00 = Vector::Zero(this->dim_);
\n+
122 // run 10 steps of accelerated power iteration with this beta
\n+
123 for (size_t j = 1; j < 10; j++) {
\n+
124 if (j < 2) {
\n+
125 R.col(0) = acceleratedPowerIteration(x0, x00, betas[k]);
\n+
126 R.col(1) = acceleratedPowerIteration(R.col(0), x0, betas[k]);
\n+
127 } else {
\n+
128 R.col(j) = acceleratedPowerIteration(R.col(j - 1), R.col(j - 2),
\n+
129 betas[k]);
\n+
130 }
\n+
131 }
\n+
132 // compute the Rayleigh quotient for the randomly sampled vector after
\n+
133 // 10 steps of power accelerated iteration
\n+
134 const Vector x = R.col(9);
\n+
135 const double up = x.dot(this->A_ * x);
\n+
136 const double down = x.dot(x);
\n+
137 const double mu = up / down;
\n+
138 // store the momentum with largest Rayleigh quotient and its according index of beta_
\n+
139 if (mu * mu / 4 > maxBeta) {
\n+
140 // save the max beta index
\n+
141 maxIndex = k;
\n+
142 maxBeta = mu * mu / 4;
\n+
143 }
\n+
144 }
\n+
145 }
\n+
146 // set beta_ to momentum with largest Rayleigh quotient
\n+
147 return betas[maxIndex];
\n+
148 }
\n+
\n+
149
\n+
\n+
156 bool compute(size_t maxIterations, double tol) {
\n+
157 // Starting
\n+
158 bool isConverged = false;
\n+
159
\n+
160 for (size_t i = 0; i < maxIterations && !isConverged; i++) {
\n+
161 ++(this->nrIterations_);
\n+
162 Vector tmp = this->ritzVector_;
\n+
163 // update the ritzVector after accelerated power iteration
\n+
164 this->ritzVector_ = acceleratedPowerIteration();
\n+
165 // update the previousVector with ritzVector
\n+
166 previousVector_ = tmp;
\n+
167 // update the ritzValue
\n+
168 this->ritzValue_ = this->ritzVector_.dot(this->A_ * this->ritzVector_);
\n+
169 isConverged = this->converged(tol);
\n+
170 }
\n+
171
\n+
172 return isConverged;
\n+
173 }
\n+
\n+
174};
\n+
\n+
175
\n+
176} // namespace gtsam
\n+
Power method for fast eigenvalue and eigenvector computation.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
double lineSearch(const S &system, const V currentValues, const W &gradient)
Implement the golden-section line search algorithm.
Definition NonlinearConjugateGradientOptimizer.h:88
\n-
bool checkConvergence(double relativeErrorTreshold, double absoluteErrorTreshold, double errorThreshold, double currentError, double newError, NonlinearOptimizerParams::Verbosity verbosity)
Check whether the relative error decrease is less than relativeErrorTreshold, the absolute error decr...
Definition NonlinearOptimizer.cpp:185
\n-
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n-
boost::tuple< V, int > nonlinearConjugateGradient(const S &system, const V &initial, const NonlinearOptimizerParams &params, const bool singleIteration, const bool gradientDescent=false)
Implement the nonlinear conjugate gradient method using the Polak-Ribiere formula suggested in http:/...
Definition NonlinearConjugateGradientOptimizer.h:148
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactorGraph.h:81
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
An implementation of the nonlinear CG method using the template below.
Definition NonlinearConjugateGradientOptimizer.h:28
\n-
~NonlinearConjugateGradientOptimizer() override
Destructor.
Definition NonlinearConjugateGradientOptimizer.h:70
\n-
Definition NonlinearFactorGraph.h:55
\n-
This is the abstract interface for classes that can optimize for the maximum-likelihood estimate of a...
Definition NonlinearOptimizer.h:75
\n-
The common parameters for Nonlinear optimizers.
Definition NonlinearOptimizerParams.h:34
\n-
double absoluteErrorTol
The maximum absolute error decrease to stop iterating (default 1e-5)
Definition NonlinearOptimizerParams.h:43
\n-
IterationHook iterationHook
Optional user-provided iteration hook to be called after each optimization iteration (Default: none).
Definition NonlinearOptimizerParams.h:94
\n-
size_t maxIterations
The maximum iterations to stop iterating (default 100)
Definition NonlinearOptimizerParams.h:41
\n-
Verbosity verbosity
The printing verbosity during optimization (default SILENT)
Definition NonlinearOptimizerParams.h:45
\n-
double relativeErrorTol
The maximum relative error decrease to stop iterating (default 1e-5)
Definition NonlinearOptimizerParams.h:42
\n-
double errorTol
The maximum total error to stop iterating (default 0.0)
Definition NonlinearOptimizerParams.h:44
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
Compute maximum Eigenpair with accelerated power method.
Definition AcceleratedPowerMethod.h:51
\n+
Vector acceleratedPowerIteration(const Vector &x1, const Vector &x0, const double beta) const
Run accelerated power iteration to get ritzVector with beta and previous two ritzVector x0 and x00,...
Definition AcceleratedPowerMethod.h:80
\n+
AcceleratedPowerMethod(const Operator &A, const boost::optional< Vector > initial=boost::none, double initialBeta=0.0)
Constructor from aim matrix A (given as Matrix or Sparse), optional intial vector as ritzVector.
Definition AcceleratedPowerMethod.h:62
\n+
double estimateBeta(const size_t T=10) const
Tuning the momentum beta using the Best Heavy Ball algorithm in Ref(3), T is the iteration time to fi...
Definition AcceleratedPowerMethod.h:101
\n+
Vector acceleratedPowerIteration() const
Run accelerated power iteration to get ritzVector with beta and previous two ritzVector x0 and x00,...
Definition AcceleratedPowerMethod.h:92
\n+
bool compute(size_t maxIterations, double tol)
Start the accelerated iteration, after performing the accelerated iteration, calculate the ritz error...
Definition AcceleratedPowerMethod.h:156
\n+
Compute maximum Eigenpair with power method.
Definition PowerMethod.h:57
\n+
const Operator & A_
Const reference to an externally-held matrix whose minimum-eigenvalue we want to compute.
Definition PowerMethod.h:63
\n+
bool converged(double tol) const
After Perform power iteration on a single Ritz value, check if the Ritz residual for the current Ritz...
Definition PowerMethod.h:112
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,298 +1,186 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearConjugateGradientOptimizer.h\n+AcceleratedPowerMethod.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n-23#include \n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-_\b2_\b8class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br : public\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br {\n-29\n-30 /* a class for the nonlinearConjugateGradient template */\n-31 class System {\n-32 public:\n-33 typedef _\bV_\ba_\bl_\bu_\be_\bs State;\n-34 typedef _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs Gradient;\n-35 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs;\n-36\n-37 protected:\n-38 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph_;\n-39\n-40 public:\n-41 System(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh &graph) :\n-42 graph_(graph) {\n-43 }\n-44 double error(const State &state) const;\n-45 Gradient gradient(const State &state) const;\n-46 State advance(const State ¤t, const double alpha,\n-47 const Gradient &g) const;\n-48 };\n-49\n-50public:\n-51\n-52 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br _\bB_\ba_\bs_\be;\n-53 typedef _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs;\n-54 typedef boost::shared_ptr shared_ptr;\n-55\n-56protected:\n-57 _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs params_;\n-58\n-59 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs& _params() const override {\n-60 return params_;\n-61 }\n-62\n-63public:\n-64\n-66 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n-67 const _\bV_\ba_\bl_\bu_\be_\bs& initialValues, const _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs& params = _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs());\n-68\n-_\b7_\b0 _\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br() override {\n-71 }\n-72\n-77 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br iterate() override;\n-78\n-83 const _\bV_\ba_\bl_\bu_\be_\bs& _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() override;\n-84};\n-85\n-87template\n-_\b8_\b8double _\bl_\bi_\bn_\be_\bS_\be_\ba_\br_\bc_\bh(const S &system, const V currentValues, const W &gradient)\n-{\n-89\n-90 /* normalize it such that it becomes a unit vector */\n-91 const double g = gradient.norm();\n-92\n-93 // perform the golden section search algorithm to decide the the optimal\n-step size\n-94 // detail refer to http://en.wikipedia.org/wiki/Golden_section_search\n-95 const double phi = 0.5 * (1.0 + std::sqrt(5.0)), resphi = 2.0 - phi, tau =\n-96 1e-5;\n-97 double minStep = -1.0 / g, maxStep = 0, newStep = minStep\n-98 + (maxStep - minStep) / (phi + 1.0);\n-99\n-100 V newValues = system.advance(currentValues, newStep, gradient);\n-101 double newError = system.error(newValues);\n-102\n-103 while (true) {\n-104 const bool flag = (maxStep - newStep > newStep - minStep) ? true : false;\n-105 const double testStep =\n-106 flag ? newStep + resphi * (maxStep - newStep) :\n-107 newStep - resphi * (newStep - minStep);\n-108\n-109 if ((maxStep - minStep)\n-110 < tau * (std::abs(testStep) + std::abs(newStep))) {\n-111 return 0.5 * (minStep + maxStep);\n-112 }\n-113\n-114 const V testValues = system.advance(currentValues, testStep, gradient);\n-115 const double testError = system.error(testValues);\n-116\n-117 // update the working range\n-118 if (testError >= newError) {\n-119 if (flag)\n-120 maxStep = testStep;\n-121 else\n-122 minStep = testStep;\n-123 } else {\n-124 if (flag) {\n-125 minStep = newStep;\n-126 newStep = testStep;\n-127 newError = testError;\n-128 } else {\n-129 maxStep = newStep;\n-130 newStep = testStep;\n-131 newError = testError;\n-132 }\n-133 }\n-134 }\n-135 return 0.0;\n-136}\n-137\n-147template\n-_\b1_\b4_\b8boost::tuple _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt(const S &system,\n-149 const V &initial, const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs ¶ms,\n-150 const bool singleIteration, const bool gradientDescent = false) {\n-151\n-152 // GTSAM_CONCEPT_MANIFOLD_TYPE(V)\n-153\n-154 size_t iteration = 0;\n-155\n-156 // check if we're already close enough\n-157 double currentError = system.error(initial);\n-158 if (currentError <= params._\be_\br_\br_\bo_\br_\bT_\bo_\bl) {\n-159 if (params._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by >= NonlinearOptimizerParams::ERROR) {\n-160 std::cout << \"Exiting, as error = \" << currentError << \" < \"\n-161 << params._\be_\br_\br_\bo_\br_\bT_\bo_\bl << std::endl;\n-162 }\n-163 return boost::tie(initial, iteration);\n-164 }\n-165\n-166 V currentValues = initial;\n-167 typename S::Gradient currentGradient = system.gradient(currentValues),\n-168 prevGradient, direction = currentGradient;\n-169\n-170 /* do one step of gradient descent */\n-171 V prevValues = currentValues;\n-172 double prevError = currentError;\n-173 double alpha = _\bl_\bi_\bn_\be_\bS_\be_\ba_\br_\bc_\bh(system, currentValues, direction);\n-174 currentValues = system.advance(prevValues, alpha, direction);\n-175 currentError = system.error(currentValues);\n-176\n-177 // Maybe show output\n-178 if (params._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by >= NonlinearOptimizerParams::ERROR)\n-179 std::cout << \"Initial error: \" << currentError << std::endl;\n-180\n-181 // Iterative loop\n-182 do {\n-183 if (gradientDescent == true) {\n-184 direction = system.gradient(currentValues);\n-185 } else {\n-186 prevGradient = currentGradient;\n-187 currentGradient = system.gradient(currentValues);\n-188 // Polak-Ribiere: beta = g'*(g_n-g_n-1)/g_n-1'*g_n-1\n-189 const double beta = std::max(0.0,\n-190 currentGradient.dot(currentGradient - prevGradient)\n-191 / prevGradient.dot(prevGradient));\n-192 direction = currentGradient + (beta * direction);\n-193 }\n-194\n-195 alpha = _\bl_\bi_\bn_\be_\bS_\be_\ba_\br_\bc_\bh(system, currentValues, direction);\n-196\n-197 prevValues = currentValues;\n-198 prevError = currentError;\n-199\n-200 currentValues = system.advance(prevValues, alpha, direction);\n-201 currentError = system.error(currentValues);\n-202\n-203 // User hook:\n-204 if (params._\bi_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk)\n-205 params._\bi_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk(iteration, prevError, currentError);\n-206\n-207 // Maybe show output\n-208 if (params._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by >= NonlinearOptimizerParams::ERROR)\n-209 std::cout << \"iteration: \" << iteration << \", currentError: \" <<\n-currentError << std::endl;\n-210 } while (++iteration < params._\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs && !singleIteration\n-211 && !_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be(params._\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl, params._\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl,\n-212 params._\be_\br_\br_\bo_\br_\bT_\bo_\bl, prevError, currentError, params._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by));\n-213\n-214 // Printing if verbose\n-215 if (params._\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by >= NonlinearOptimizerParams::ERROR\n-216 && iteration >= params._\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs)\n-217 std::cout\n-218 << \"nonlinearConjugateGradient: Terminating because reached maximum\n-iterations\"\n-219 << std::endl;\n-220\n-221 return boost::tie(currentValues, iteration);\n-222}\n-223\n-224} // \\ namespace gtsam\n-225\n-_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\b._\bh\n-Base class and basic functions for Manifold types.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n-Base class and parameters for nonlinear optimization algorithms.\n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+26using Sparse = Eigen::SparseMatrix;\n+27\n+50template \n+_\b5_\b1class _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd : public _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd {\n+52\n+53 double beta_ = 0; // a Polyak momentum term\n+54\n+55 Vector previousVector_; // store previous vector\n+56\n+57 public:\n+_\b6_\b2 explicit _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd(\n+63 const Operator &A, const boost::optional initial = boost::none,\n+64 double initialBeta = 0.0)\n+65 : _\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd(A, initial) {\n+66 // initialize Ritz eigen vector and previous vector\n+67 this->ritzVector_ = initial ? initial.get() : Vector::Random(this->dim_);\n+68 this->ritzVector_.normalize();\n+69 previousVector_ = Vector::Zero(this->dim_);\n+70\n+71 // initialize beta_\n+72 beta_ = initialBeta;\n+73 }\n+74\n+_\b8_\b0 Vector _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn (const Vector &x1, const Vector &x0,\n+81 const double beta) const {\n+82 Vector y = this->_\bA_\b_ * x1 - beta * x0;\n+83 y.normalize();\n+84 return y;\n+85 }\n+86\n+_\b9_\b2 Vector _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn () const {\n+93 Vector y = _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(this->ritzVector_, previousVector_,\n+beta_);\n+94 return y;\n+95 }\n+96\n+_\b1_\b0_\b1 double _\be_\bs_\bt_\bi_\bm_\ba_\bt_\be_\bB_\be_\bt_\ba(const size_t T = 10) const {\n+102 // set initial estimation of maxBeta\n+103 Vector initVector = this->ritzVector_;\n+104 const double up = initVector.dot( this->_\bA_\b_ * initVector );\n+105 const double down = initVector.dot(initVector);\n+106 const double mu = up / down;\n+107 double maxBeta = mu * mu / 4;\n+108 size_t maxIndex;\n+109 std::vector betas;\n+110\n+111 Matrix R = Matrix::Zero(this->dim_, 10);\n+112 // run T times of iteration to find the beta that has the largest Rayleigh\n+quotient\n+113 for (size_t t = 0; t < T; t++) {\n+114 // after each t iteration, reset the betas with the current maxBeta\n+115 betas = {2 / 3 * maxBeta, 0.99 * maxBeta, maxBeta, 1.01 * maxBeta,\n+116 1.5 * maxBeta};\n+117 // iterate through every beta value\n+118 for (size_t k = 0; k < betas.size(); ++k) {\n+119 // initialize x0 and x00 in each iteration of each beta\n+120 Vector x0 = initVector;\n+121 Vector x00 = Vector::Zero(this->dim_);\n+122 // run 10 steps of accelerated power iteration with this beta\n+123 for (size_t j = 1; j < 10; j++) {\n+124 if (j < 2) {\n+125 R.col(0) = _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(x0, x00, betas[k]);\n+126 R.col(1) = _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(R.col(0), x0, betas[k]);\n+127 } else {\n+128 R.col(j) = _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn(R.col(j - 1), R.col(j - 2),\n+129 betas[k]);\n+130 }\n+131 }\n+132 // compute the Rayleigh quotient for the randomly sampled vector after\n+133 // 10 steps of power accelerated iteration\n+134 const Vector x = R.col(9);\n+135 const double up = x.dot(this->_\bA_\b_ * x);\n+136 const double down = x.dot(x);\n+137 const double mu = up / down;\n+138 // store the momentum with largest Rayleigh quotient and its according\n+index of beta_\n+139 if (mu * mu / 4 > maxBeta) {\n+140 // save the max beta index\n+141 maxIndex = k;\n+142 maxBeta = mu * mu / 4;\n+143 }\n+144 }\n+145 }\n+146 // set beta_ to momentum with largest Rayleigh quotient\n+147 return betas[maxIndex];\n+148 }\n+149\n+_\b1_\b5_\b6 bool _\bc_\bo_\bm_\bp_\bu_\bt_\be(size_t maxIterations, double tol) {\n+157 // Starting\n+158 bool isConverged = false;\n+159\n+160 for (size_t i = 0; i < maxIterations && !isConverged; i++) {\n+161 ++(this->nrIterations_);\n+162 Vector tmp = this->ritzVector_;\n+163 // update the ritzVector after accelerated power iteration\n+164 this->ritzVector_ = _\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn();\n+165 // update the previousVector with ritzVector\n+166 previousVector_ = tmp;\n+167 // update the ritzValue\n+168 this->ritzValue_ = this->ritzVector_.dot(this->_\bA_\b_ * this->ritzVector_);\n+169 isConverged = this->_\bc_\bo_\bn_\bv_\be_\br_\bg_\be_\bd(tol);\n+170 }\n+171\n+172 return isConverged;\n+173 }\n+174};\n+175\n+176} // namespace gtsam\n+_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n+Power method for fast eigenvalue and eigenvector computation.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bl_\bi_\bn_\be_\bS_\be_\ba_\br_\bc_\bh\n-double lineSearch(const S &system, const V currentValues, const W &gradient)\n-Implement the golden-section line search algorithm.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearConjugateGradientOptimizer.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bc_\bh_\be_\bc_\bk_\bC_\bo_\bn_\bv_\be_\br_\bg_\be_\bn_\bc_\be\n-bool checkConvergence(double relativeErrorTreshold, double\n-absoluteErrorTreshold, double errorThreshold, double currentError, double\n-newError, NonlinearOptimizerParams::Verbosity verbosity)\n-Check whether the relative error decrease is less than relativeErrorTreshold,\n-the absolute error decr...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.cpp:185\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n-Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n-landmarkKey)\n-Optimize for triangulation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt\n-boost::tuple< V, int > nonlinearConjugateGradient(const S &system, const V\n-&initial, const NonlinearOptimizerParams ¶ms, const bool singleIteration,\n-const bool gradientDescent=false)\n-Implement the nonlinear conjugate gradient method using the Polak-Ribiere\n-formula suggested in http:/...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearConjugateGradientOptimizer.h:148\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-An implementation of the nonlinear CG method using the template below.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearConjugateGradientOptimizer.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b:_\b:\n-_\b~_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-~NonlinearConjugateGradientOptimizer() override\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearConjugateGradientOptimizer.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br\n-This is the abstract interface for classes that can optimize for the maximum-\n-likelihood estimate of a...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizer.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs\n-The common parameters for Nonlinear optimizers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\ba_\bb_\bs_\bo_\bl_\bu_\bt_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl\n-double absoluteErrorTol\n-The maximum absolute error decrease to stop iterating (default 1e-5)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bi_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bH_\bo_\bo_\bk\n-IterationHook iterationHook\n-Optional user-provided iteration hook to be called after each optimization\n-iteration (Default: none).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bm_\ba_\bx_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn_\bs\n-size_t maxIterations\n-The maximum iterations to stop iterating (default 100)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bv_\be_\br_\bb_\bo_\bs_\bi_\bt_\by\n-Verbosity verbosity\n-The printing verbosity during optimization (default SILENT)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bl_\ba_\bt_\bi_\bv_\be_\bE_\br_\br_\bo_\br_\bT_\bo_\bl\n-double relativeErrorTol\n-The maximum relative error decrease to stop iterating (default 1e-5)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\br_\br_\bo_\br_\bT_\bo_\bl\n-double errorTol\n-The maximum total error to stop iterating (default 0.0)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearOptimizerParams.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd\n+Compute maximum Eigenpair with accelerated power method.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn\n+Vector acceleratedPowerIteration(const Vector &x1, const Vector &x0, const\n+double beta) const\n+Run accelerated power iteration to get ritzVector with beta and previous two\n+ritzVector x0 and x00,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd\n+AcceleratedPowerMethod(const Operator &A, const boost::optional< Vector >\n+initial=boost::none, double initialBeta=0.0)\n+Constructor from aim matrix A (given as Matrix or Sparse), optional intial\n+vector as ritzVector.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\be_\bs_\bt_\bi_\bm_\ba_\bt_\be_\bB_\be_\bt_\ba\n+double estimateBeta(const size_t T=10) const\n+Tuning the momentum beta using the Best Heavy Ball algorithm in Ref(3), T is\n+the iteration time to fi...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\ba_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bI_\bt_\be_\br_\ba_\bt_\bi_\bo_\bn\n+Vector acceleratedPowerIteration() const\n+Run accelerated power iteration to get ritzVector with beta and previous two\n+ritzVector x0 and x00,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:92\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bc_\bo_\bm_\bp_\bu_\bt_\be\n+bool compute(size_t maxIterations, double tol)\n+Start the accelerated iteration, after performing the accelerated iteration,\n+calculate the ritz error...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn AcceleratedPowerMethod.h:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd\n+Compute maximum Eigenpair with power method.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:57\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bA_\b_\n+const Operator & A_\n+Const reference to an externally-held matrix whose minimum-eigenvalue we want\n+to compute.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:63\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b:_\b:_\bc_\bo_\bn_\bv_\be_\br_\bg_\be_\bd\n+bool converged(double tol) const\n+After Perform power iteration on a single Ritz value, check if the Ritz\n+residual for the current Ritz...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PowerMethod.h:112\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bC_\bo_\bn_\bj_\bu_\bg_\ba_\bt_\be_\bG_\br_\ba_\bd_\bi_\be_\bn_\bt_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bA_\bc_\bc_\be_\bl_\be_\br_\ba_\bt_\be_\bd_\bP_\bo_\bw_\be_\br_\bM_\be_\bt_\bh_\bo_\bd_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01136.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00317.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/CameraSet.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
Marginals.h File Reference
\n+
CameraSet.h File Reference
\n
\n
\n \n-

A class for computing marginals in a NonlinearFactorGraph. \n+

Base class to create smart factors on poses or cameras. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n-\n-\n+\n+\n+\n \n

\n Classes

class  gtsam::Marginals
 A class for computing Gaussian marginals of variables in a NonlinearFactorGraph. More...
class  gtsam::CameraSet< CAMERA >
 A set of cameras, all with their own calibration. More...
 
class  gtsam::JointMarginal
 A class to store and access a joint marginal, returned from Marginals::jointMarginalCovariance and Marginals::jointMarginalInformation. More...
struct  gtsam::traits< CameraSet< CAMERA > >
 
struct  gtsam::traits< const CameraSet< CAMERA > >
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A class for computing marginals in a NonlinearFactorGraph.

\n-
Author
Richard Roberts
\n-
Date
May 14, 2012
\n+

Base class to create smart factors on poses or cameras.

\n+
Author
Frank Dellaert
\n+
Date
Feb 19, 2015
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,33 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-Marginals.h File Reference\n-A class for computing marginals in a NonlinearFactorGraph. _\bM_\bo_\br_\be_\b._\b._\b.\n+CameraSet.h File Reference\n+Base class to create smart factors on poses or cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n-\u00a0 A class for computing Gaussian marginals of variables in a\n- _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh. _\bM_\bo_\br_\be_\b._\b._\b.\n+ class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n+\u00a0 A set of cameras, all with their own calibration. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl\n- A class to store and access a joint marginal, returned from _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:\n-\u00a0 _\bj_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bC_\bo_\bv_\ba_\br_\bi_\ba_\bn_\bc_\be and _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bj_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn.\n- _\bM_\bo_\br_\be_\b._\b._\b.\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n+\u00a0\n+struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bc_\bo_\bn_\bs_\bt_\b _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A class for computing marginals in a NonlinearFactorGraph.\n+Base class to create smart factors on poses or cameras.\n Author\n- Richard Roberts\n+ Frank Dellaert\n Date\n- May 14, 2012\n+ Feb 19, 2015\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bC_\ba_\bm_\be_\br_\ba_\bS_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01136_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00635_source.html", "comments": ["Files 87% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/Marginals.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/Key.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
Marginals.h
\n+
Key.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
27class JointMarginal;
\n-
28
\n-
\n-
32class GTSAM_EXPORT Marginals {
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/FastList.h>
\n+
21#include <gtsam/base/FastMap.h>
\n+
22#include <gtsam/base/FastSet.h>
\n+\n+
24#include <gtsam/base/Testable.h>
\n+
25#include <gtsam/base/types.h>
\n+
26#include <gtsam/dllexport.h>
\n+
27
\n+
28#include <functional>
\n+
29
\n+
30#include <iosfwd>
\n+
31
\n+
32namespace gtsam {
\n
33
\n-
34public:
\n-
35
\n-
\n-\n-
38 CHOLESKY,
\n-
39 QR
\n-
40 };
\n-
\n-
41
\n-
42protected:
\n-
43
\n-\n-
45 Values values_;
\n-
46 Factorization factorization_;
\n-
47 GaussianBayesTree bayesTree_;
\n-
48
\n-
49public:
\n-
50
\n-\n-
53
\n-
59 Marginals(const NonlinearFactorGraph& graph, const Values& solution, Factorization factorization = CHOLESKY);
\n-
60
\n-
67 Marginals(const NonlinearFactorGraph& graph, const Values& solution, const Ordering& ordering,
\n-
68 Factorization factorization = CHOLESKY);
\n-
69
\n-
75 Marginals(const GaussianFactorGraph& graph, const Values& solution, Factorization factorization = CHOLESKY);
\n-
76
\n-
83 Marginals(const GaussianFactorGraph& graph, const Values& solution, const Ordering& ordering,
\n-
84 Factorization factorization = CHOLESKY);
\n-
85
\n-
92 Marginals(const GaussianFactorGraph& graph, const VectorValues& solution, Factorization factorization = CHOLESKY);
\n-
93
\n-
100 Marginals(const GaussianFactorGraph& graph, const VectorValues& solution, const Ordering& ordering,
\n-
101 Factorization factorization = CHOLESKY);
\n+
35using KeyFormatter = std::function<std::string(Key)>;
\n+
36
\n+
37// Helper function for DefaultKeyFormatter
\n+
38GTSAM_EXPORT std::string _defaultKeyFormatter(Key key);
\n+
39
\n+
43static const KeyFormatter DefaultKeyFormatter = &_defaultKeyFormatter;
\n+
44
\n+
45// Helper function for Multi-robot Key Formatter
\n+
46GTSAM_EXPORT std::string _multirobotKeyFormatter(gtsam::Key key);
\n+
47
\n+
54static const gtsam::KeyFormatter MultiRobotKeyFormatter =
\n+
55 &_multirobotKeyFormatter;
\n+
56
\n+
\n+\n+
59 const Key &key_;
\n+
60 explicit StreamedKey(const Key &key) : key_(key) {}
\n+
61 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const StreamedKey &);
\n+
62};
\n+
\n+
63
\n+
\n+\n+
73 public:
\n+
74 explicit key_formatter(KeyFormatter v) : formatter_(v) {}
\n+
75 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const key_formatter &);
\n+
76 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const StreamedKey &);
\n+
77
\n+
78 private:
\n+
79 KeyFormatter formatter_;
\n+
80 static void *&property(std::ios_base &s);
\n+
81 static void set_property(std::ios_base &s, const KeyFormatter &f);
\n+
82 static KeyFormatter *get_property(std::ios_base &s);
\n+
83};
\n+
\n+
84
\n+\n+
87
\n+
88// TODO(frank): Nothing fast about these :-(
\n+\n+
90using KeySet = FastSet<Key>;
\n+
91using KeyGroupMap = FastMap<Key, int>;
\n+
92
\n+
94GTSAM_EXPORT void PrintKey(
\n+
95 Key key, const std::string &s = "",
\n+
96 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
\n+
97
\n+
99GTSAM_EXPORT void PrintKeyList(
\n+
100 const KeyList &keys, const std::string &s = "",
\n+
101 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
\n
102
\n-
104 void print(const std::string& str = "Marginals: ", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
105
\n-
107 GaussianFactor::shared_ptr marginalFactor(Key variable) const;
\n-
108
\n-
111 Matrix marginalInformation(Key variable) const;
\n+
104GTSAM_EXPORT void PrintKeyVector(
\n+
105 const KeyVector &keys, const std::string &s = "",
\n+
106 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
\n+
107
\n+
109GTSAM_EXPORT void PrintKeySet(
\n+
110 const KeySet &keys, const std::string &s = "",
\n+
111 const KeyFormatter &keyFormatter = DefaultKeyFormatter);
\n
112
\n-
114 Matrix marginalCovariance(Key variable) const;
\n+
113// Define Key to be Testable by specializing gtsam::traits
\n+
114template<typename T> struct traits;
\n
115
\n-
117 JointMarginal jointMarginalCovariance(const KeyVector& variables) const;
\n-
118
\n-
120 JointMarginal jointMarginalInformation(const KeyVector& variables) const;
\n-
121
\n-
123 VectorValues optimize() const;
\n-
124
\n-
125protected:
\n-
126
\n-
128 void computeBayesTree();
\n+
116template <>
\n+
\n+
117struct traits<Key> {
\n+
118 static void Print(const Key& val, const std::string& str = "") {
\n+
119 PrintKey(val, str);
\n+
120 }
\n+
121 static bool Equals(const Key& val1, const Key& val2, double tol = 1e-8) {
\n+
122 return val1 == val2;
\n+
123 }
\n+
124};
\n+
\n+
125
\n+
126} // namespace gtsam
\n+
127
\n+
128
\n
129
\n-
131 void computeBayesTree(const Ordering& ordering);
\n-
132
\n-
133public:
\n-
134#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
136 GTSAM_DEPRECATED Marginals(const NonlinearFactorGraph& graph, const Values& solution, Factorization factorization,
\n-
137 const Ordering& ordering) : Marginals(graph, solution, ordering, factorization) {}
\n-
138
\n-
140 GTSAM_DEPRECATED Marginals(const GaussianFactorGraph& graph, const Values& solution, Factorization factorization,
\n-
141 const Ordering& ordering) : Marginals(graph, solution, ordering, factorization) {}
\n-
142
\n-
144 GTSAM_DEPRECATED Marginals(const GaussianFactorGraph& graph, const VectorValues& solution, Factorization factorization,
\n-
145 const Ordering& ordering) : Marginals(graph, solution, ordering, factorization) {}
\n-
146#endif
\n-
147
\n-
148};
\n-
\n-
149
\n-
\n-
153class GTSAM_EXPORT JointMarginal {
\n-
154
\n-
155protected:
\n-
156 SymmetricBlockMatrix blockMatrix_;
\n-
157 KeyVector keys_;
\n-
158 FastMap<Key, size_t> indices_;
\n-
159
\n-
160public:
\n-\n-
163
\n-
\n-
177 Matrix operator()(Key iVariable, Key jVariable) const {
\n-
178 const auto indexI = indices_.at(iVariable);
\n-
179 const auto indexJ = indices_.at(jVariable);
\n-
180 return blockMatrix_.block(indexI, indexJ);
\n-
181 }
\n-
\n-
182
\n-
\n-
184 Matrix at(Key iVariable, Key jVariable) const {
\n-
185 return (*this)(iVariable, jVariable);
\n-
186 }
\n-
\n-
187
\n-
\n-
189 Matrix fullMatrix() const {
\n-
190 return blockMatrix_.selfadjointView();
\n-
191 }
\n-
\n-
192
\n-
194 void print(const std::string& s = "", const KeyFormatter& formatter = DefaultKeyFormatter) const;
\n-
195
\n-
196protected:
\n-
197 JointMarginal(const Matrix& fullMatrix, const std::vector<size_t>& dims, const KeyVector& keys) :
\n-
198 blockMatrix_(dims, fullMatrix), keys_(keys), indices_(Ordering(keys).invert()) {}
\n-
199
\n-
200 friend class Marginals;
\n-
201
\n-
202};
\n-
\n-
203
\n-
204} /* namespace gtsam */
\n-
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n-
A non-templated config holding any types of Manifold-group elements.
\n-
Factor Graph consisting of non-linear factors.
\n+
130
\n+
Typedefs for easier changing of types.
\n+
A thin wrapper around std::map that uses boost's fast_pool_allocator.
\n+
A thin wrapper around std::vector that uses a custom allocator.
\n+
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n+
A thin wrapper around std::set that uses boost's fast_pool_allocator.
\n+
Concept check for values that can be used in unit tests.
\n+
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key landmarkKey)
Optimize for triangulation.
Definition triangulation.cpp:155
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
void PrintKeyVector(const KeyVector &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition Key.cpp:77
\n+
void PrintKey(Key key, const string &s, const KeyFormatter &keyFormatter)
Utility function to print one key with optional prefix.
Definition Key.cpp:40
\n+
void PrintKeyList(const KeyList &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition Key.cpp:72
\n+
void PrintKeySet(const KeySet &keys, const string &s, const KeyFormatter &keyFormatter)
Utility function to print sets of keys with optional prefix.
Definition Key.cpp:82
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n-
Matrix block(DenseIndex I, DenseIndex J) const
Get a copy of a block (anywhere in the matrix).
Definition SymmetricBlockMatrix.cpp:60
\n-
Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex I, DenseIndex J) const
Return the square sub-matrix that contains blocks(i:j, i:j).
Definition SymmetricBlockMatrix.h:156
\n-
Definition Ordering.h:34
\n-
A Bayes tree representing a Gaussian density.
Definition GaussianBayesTree.h:52
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
A class for computing Gaussian marginals of variables in a NonlinearFactorGraph.
Definition Marginals.h:32
\n-
Factorization
The linear factorization mode - either CHOLESKY (faster and suitable for most problems) or QR (slower...
Definition Marginals.h:37
\n-
Marginals()
Default constructor only for wrappers.
Definition Marginals.h:52
\n-
A class to store and access a joint marginal, returned from Marginals::jointMarginalCovariance and Ma...
Definition Marginals.h:153
\n-
Matrix at(Key iVariable, Key jVariable) const
Synonym for operator()
Definition Marginals.h:184
\n-
Matrix fullMatrix() const
The full, dense covariance/information matrix of the joint marginal.
Definition Marginals.h:189
\n-
Matrix operator()(Key iVariable, Key jVariable) const
Access a block, corresponding to a pair of variables, of the joint marginal.
Definition Marginals.h:177
\n-
JointMarginal()
Default constructor only for wrappers.
Definition Marginals.h:162
\n-
Definition NonlinearFactorGraph.h:55
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
The Factor::error simply extracts the.
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+\n+
To use the key_formatter on Keys, they must be wrapped in a StreamedKey.
Definition Key.h:58
\n+
Output stream manipulator that will format gtsam::Keys according to the given KeyFormatter,...
Definition Key.h:72
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,260 +1,187 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-Marginals.h\n+Key.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-27class JointMarginal;\n-28\n-_\b3_\b2class GTSAM_EXPORT _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs {\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+26#include \n+27\n+28#include \n+29\n+30#include \n+31\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n 33\n-34public:\n-35\n-_\b3_\b7 enum _\bF_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn {\n-38 CHOLESKY,\n-39 QR\n-40 };\n-41\n-42protected:\n-43\n-44 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh graph_;\n-45 _\bV_\ba_\bl_\bu_\be_\bs values_;\n-46 Factorization factorization_;\n-47 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be bayesTree_;\n-48\n-49public:\n-50\n-_\b5_\b2 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(){}\n-53\n-59 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs& solution,\n-Factorization factorization = CHOLESKY);\n-60\n-67 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs& solution, const\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-68 Factorization factorization = CHOLESKY);\n-69\n-75 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs& solution,\n-Factorization factorization = CHOLESKY);\n-76\n-83 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs& solution, const\n-_\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-84 Factorization factorization = CHOLESKY);\n-85\n-92 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& solution,\n-Factorization factorization = CHOLESKY);\n-93\n-100 _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& solution,\n-const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering,\n-101 Factorization factorization = CHOLESKY);\n+_\b3_\b5using _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br = std::function;\n+36\n+37// Helper function for DefaultKeyFormatter\n+38GTSAM_EXPORT std::string _defaultKeyFormatter(_\bK_\be_\by key);\n+39\n+43static const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br DefaultKeyFormatter = &_defaultKeyFormatter;\n+44\n+45// Helper function for Multi-robot Key Formatter\n+46GTSAM_EXPORT std::string _multirobotKeyFormatter(_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by key);\n+47\n+54static const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br MultiRobotKeyFormatter =\n+55 &_multirobotKeyFormatter;\n+56\n+_\b5_\b8struct _\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by {\n+59 const _\bK_\be_\by &key_;\n+60 explicit _\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by(const _\bK_\be_\by &key) : key_(key) {}\n+61 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const\n+_\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by &);\n+62};\n+63\n+_\b7_\b2class _\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br {\n+73 public:\n+74 explicit _\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br(_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br v) : formatter_(v) {}\n+75 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const\n+_\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &);\n+76 GTSAM_EXPORT friend std::ostream &operator<<(std::ostream &, const\n+_\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by &);\n+77\n+78 private:\n+79 _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br formatter_;\n+80 static void *&property(std::ios_base &s);\n+81 static void set_property(std::ios_base &s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &f);\n+82 static _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br *get_property(std::ios_base &s);\n+83};\n+84\n+_\b8_\b6using _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br = _\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b<_\bK_\be_\by_\b>;\n+87\n+88// TODO(frank): Nothing fast about these :-(\n+89using _\bK_\be_\by_\bL_\bi_\bs_\bt = _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b>;\n+90using _\bK_\be_\by_\bS_\be_\bt = _\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\bK_\be_\by_\b>;\n+91using KeyGroupMap = _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bi_\bn_\bt_\b>;\n+92\n+94GTSAM_EXPORT void _\bP_\br_\bi_\bn_\bt_\bK_\be_\by(\n+95 _\bK_\be_\by key, const std::string &s = \"\",\n+96 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter);\n+97\n+99GTSAM_EXPORT void _\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bL_\bi_\bs_\bt(\n+100 const _\bK_\be_\by_\bL_\bi_\bs_\bt &keys, const std::string &s = \"\",\n+101 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter);\n 102\n-104 void _\bp_\br_\bi_\bn_\bt(const std::string& str = \"Marginals: \", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br&\n-keyFormatter = DefaultKeyFormatter) const;\n-105\n-107 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br marginalFactor(_\bK_\be_\by variable) const;\n-108\n-111 Matrix marginalInformation(_\bK_\be_\by variable) const;\n+104GTSAM_EXPORT void _\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br(\n+105 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &keys, const std::string &s = \"\",\n+106 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter);\n+107\n+109GTSAM_EXPORT void _\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bS_\be_\bt(\n+110 const _\bK_\be_\by_\bS_\be_\bt &keys, const std::string &s = \"\",\n+111 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter);\n 112\n-114 Matrix marginalCovariance(_\bK_\be_\by variable) const;\n+113// Define Key to be Testable by specializing gtsam::traits\n+114template struct _\bt_\br_\ba_\bi_\bt_\bs;\n 115\n-117 _\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl jointMarginalCovariance(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables) const;\n-118\n-120 _\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl jointMarginalInformation(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& variables) const;\n-121\n-123 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be() const;\n-124\n-125protected:\n-126\n-128 void computeBayesTree();\n+116template <>\n+_\b1_\b1_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bK_\be_\by> {\n+118 static void Print(const _\bK_\be_\by& val, const std::string& str = \"\") {\n+119 _\bP_\br_\bi_\bn_\bt_\bK_\be_\by(val, str);\n+120 }\n+121 static bool Equals(const _\bK_\be_\by& val1, const _\bK_\be_\by& val2, double tol = 1e-8) {\n+122 return val1 == val2;\n+123 }\n+124};\n+125\n+126} // namespace gtsam\n+127\n+128\n 129\n-131 void computeBayesTree(const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering);\n-132\n-133public:\n-134#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-136 GTSAM_DEPRECATED _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n-solution, Factorization factorization,\n-137 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& ordering) : _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs(graph, solution, ordering,\n-factorization) {}\n-138\n-140 GTSAM_DEPRECATED Marginals(const GaussianFactorGraph& graph, const _\bV_\ba_\bl_\bu_\be_\bs&\n-solution, Factorization factorization,\n-141 const Ordering& ordering) : Marginals(graph, solution, ordering,\n-factorization) {}\n-142\n-144 GTSAM_DEPRECATED Marginals(const GaussianFactorGraph& graph, const\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& solution, Factorization factorization,\n-145 const Ordering& ordering) : Marginals(graph, solution, ordering,\n-factorization) {}\n-146#endif\n-147\n-148};\n-149\n-_\b1_\b5_\b3class GTSAM_EXPORT _\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl {\n-154\n-155protected:\n-156 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx blockMatrix_;\n-157 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keys_;\n-158 _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bs_\bi_\bz_\be_\b__\bt_\b> indices_;\n-159\n-160public:\n-_\b1_\b6_\b2 _\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl() {}\n-163\n-_\b1_\b7_\b7 Matrix _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bK_\be_\by iVariable, _\bK_\be_\by jVariable) const {\n-178 const auto indexI = indices_.at(iVariable);\n-179 const auto indexJ = indices_.at(jVariable);\n-180 return blockMatrix_._\bb_\bl_\bo_\bc_\bk(indexI, indexJ);\n-181 }\n-182\n-_\b1_\b8_\b4 Matrix _\ba_\bt(_\bK_\be_\by iVariable, _\bK_\be_\by jVariable) const {\n-185 return (*this)(iVariable, jVariable);\n-186 }\n-187\n-_\b1_\b8_\b9 Matrix _\bf_\bu_\bl_\bl_\bM_\ba_\bt_\br_\bi_\bx() const {\n-190 return blockMatrix_._\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw();\n-191 }\n-192\n-194 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter =\n-DefaultKeyFormatter) const;\n-195\n-196protected:\n-197 _\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl(const Matrix& fullMatrix, const std::vector& dims,\n-const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys) :\n-198 blockMatrix_(dims, fullMatrix), keys_(keys), indices_(_\bO_\br_\bd_\be_\br_\bi_\bn_\bg(keys).invert\n-()) {}\n-199\n-200 friend class Marginals;\n-201\n-202};\n-203\n-204} /* namespace gtsam */\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n+130\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n+_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n+A thin wrapper around std::map that uses boost's fast_pool_allocator.\n+_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br_\b._\bh\n+A thin wrapper around std::vector that uses a custom allocator.\n+_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n+A thin wrapper around std::list that uses boost's fast_pool_allocator.\n+_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b._\bh\n+A thin wrapper around std::set that uses boost's fast_pool_allocator.\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bV_\be_\bc_\bt_\bo_\br\n+std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type >\n+FastVector\n+FastVector is a type alias to a std::vector with a custom memory allocator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastVector.h:34\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\bt_\bi_\bm_\bi_\bz_\be\n-Point3 optimize(const NonlinearFactorGraph &graph, const Values &values, Key\n-landmarkKey)\n-Optimize for triangulation.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn triangulation.cpp:155\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+void PrintKeyVector(const KeyVector &keys, const string &s, const KeyFormatter\n+&keyFormatter)\n+Utility function to print sets of keys with optional prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.cpp:77\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bK_\be_\by\n+void PrintKey(Key key, const string &s, const KeyFormatter &keyFormatter)\n+Utility function to print one key with optional prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.cpp:40\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bL_\bi_\bs_\bt\n+void PrintKeyList(const KeyList &keys, const string &s, const KeyFormatter\n+&keyFormatter)\n+Utility function to print sets of keys with optional prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.cpp:72\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\br_\bi_\bn_\bt_\bK_\be_\by_\bS_\be_\bt\n+void PrintKeySet(const KeySet &keys, const string &s, const KeyFormatter\n+&keyFormatter)\n+Utility function to print sets of keys with optional prefix.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.cpp:82\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n+FastList is a thin wrapper around std::list that uses the boost\n+fast_pool_allocator instead of the de...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n FastMap is a thin wrapper around std::map that uses the boost\n fast_pool_allocator instead of the defa...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n-This class stores a dense matrix and allows it to be accessed as a collection\n-of blocks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bb_\bl_\bo_\bc_\bk\n-Matrix block(DenseIndex I, DenseIndex J) const\n-Get a copy of a block (anywhere in the matrix).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.cpp:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx_\b:_\b:_\bs_\be_\bl_\bf_\ba_\bd_\bj_\bo_\bi_\bn_\bt_\bV_\bi_\be_\bw\n-Eigen::SelfAdjointView< constBlock, Eigen::Upper > selfadjointView(DenseIndex\n-I, DenseIndex J) const\n-Return the square sub-matrix that contains blocks(i:j, i:j).\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-A Bayes tree representing a Gaussian density.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianBayesTree.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n-A class for computing Gaussian marginals of variables in a\n-NonlinearFactorGraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn\n-Factorization\n-The linear factorization mode - either CHOLESKY (faster and suitable for most\n-problems) or QR (slower...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b:_\b:_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs\n-Marginals()\n-Default constructor only for wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl\n-A class to store and access a joint marginal, returned from Marginals::\n-jointMarginalCovariance and Ma...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:153\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b:_\b:_\ba_\bt\n-Matrix at(Key iVariable, Key jVariable) const\n-Synonym for operator()\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:184\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b:_\b:_\bf_\bu_\bl_\bl_\bM_\ba_\bt_\br_\bi_\bx\n-Matrix fullMatrix() const\n-The full, dense covariance/information matrix of the joint marginal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:189\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-Matrix operator()(Key iVariable, Key jVariable) const\n-Access a block, corresponding to a pair of variables, of the joint marginal.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:177\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\b:_\b:_\bJ_\bo_\bi_\bn_\bt_\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl\n-JointMarginal()\n-Default constructor only for wrappers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Marginals.h:162\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bt_\br_\be_\ba_\bm_\be_\bd_\bK_\be_\by\n+To use the key_formatter on Keys, they must be wrapped in a StreamedKey.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bk_\be_\by_\b__\bf_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+Output stream manipulator that will format gtsam::Keys according to the given\n+KeyFormatter,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:72\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bM_\ba_\br_\bg_\bi_\bn_\ba_\bl_\bs_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n+ * _\bK_\be_\by_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01139.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00512.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearISAM.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
ISAM2.cpp File Reference
\n+
HybridNonlinearISAM.cpp File Reference
\n
\n
\n-\n-

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization. \n-More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Incremental update functionality (ISAM2) for BayesTree, with fluid relinearization.

\n-
Author
Michael Kaess, Richard Roberts, Frank Dellaert
\n+
Date
Sep 12, 2022
\n+
Author
Varun Agrawal
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,22 +1,20 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ISAM2.cpp File Reference\n-Incremental update functionality (ISAM2) for BayesTree, with fluid\n-relinearization. _\bM_\bo_\br_\be_\b._\b._\b.\n+HybridNonlinearISAM.cpp File Reference\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Incremental update functionality (ISAM2) for BayesTree, with fluid\n-relinearization.\n+ Date\n+ Sep 12, 2022\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert\n+ Varun Agrawal\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\b._\bc_\bp_\bp\n+ * _\bh_\by_\bb_\br_\bi_\bd\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01163_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00170_source.html", "comments": ["Files 80% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/basis/BasisFactors.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
ISAM2.h
\n+
BasisFactors.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19// \\callgraph
\n+
19#pragma once
\n
20
\n-
21#pragma once
\n-
22
\n-\n-\n-\n-\n-\n-\n-
29
\n-
30#include <vector>
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
\n-
45class GTSAM_EXPORT ISAM2 : public BayesTree<ISAM2Clique> {
\n-
46 protected:
\n-\n-
49
\n-\n-
53
\n-\n-
62
\n-
63 mutable VectorValues deltaNewton_; // Only used when using Dogleg - stores
\n-
64 // the Gauss-Newton update
\n-
65 mutable VectorValues RgProd_; // Only used when using Dogleg - stores R*g and
\n-
66 // is updated incrementally
\n-
67
\n-
76 mutable KeySet deltaReplacedMask_; // TODO(dellaert): Make sure accessed in
\n-
77 // the right way
\n-
78
\n-\n-
82
\n-\n-
85
\n-\n-
88
\n-
90 mutable boost::optional<double> doglegDelta_;
\n-
91
\n-\n-
95
\n-\n-
98
\n-
99 public:
\n-
100 using This = ISAM2;
\n-\n-\n-\n-
104 using Cliques = Base::Cliques;
\n-
105
\n-
107 explicit ISAM2(const ISAM2Params& params);
\n-
108
\n-
111 ISAM2();
\n-
112
\n-
114 virtual ~ISAM2() {}
\n-
115
\n-
117 virtual bool equals(const ISAM2& other, double tol = 1e-9) const;
\n+
21#include <gtsam/basis/Basis.h>
\n+\n+
23
\n+
24namespace gtsam {
\n+
25
\n+
38template <class BASIS>
\n+
\n+
39class EvaluationFactor : public FunctorizedFactor<double, Vector> {
\n+
40 private:
\n+\n+
42
\n+
43 public:
\n+\n+
45
\n+
\n+
55 EvaluationFactor(Key key, double z, const SharedNoiseModel &model,
\n+
56 const size_t N, double x)
\n+
57 : Base(key, z, model, typename BASIS::EvaluationFunctor(N, x)) {}
\n+
\n+
58
\n+
\n+
70 EvaluationFactor(Key key, double z, const SharedNoiseModel &model,
\n+
71 const size_t N, double x, double a, double b)
\n+
72 : Base(key, z, model, typename BASIS::EvaluationFunctor(N, x, a, b)) {}
\n+
\n+
73
\n+
74 virtual ~EvaluationFactor() {}
\n+
75};
\n+
\n+
76
\n+
94template <class BASIS, int M>
\n+
\n+\n+
96 : public FunctorizedFactor<Vector, ParameterMatrix<M>> {
\n+
97 private:
\n+\n+
99
\n+
100 public:
\n+\n+
102
\n+
\n+\n+
114 const SharedNoiseModel &model, const size_t N,
\n+
115 double x)
\n+
116 : Base(key, z, model,
\n+
117 typename BASIS::template VectorEvaluationFunctor<M>(N, x)) {}
\n+
\n
118
\n-
151 virtual ISAM2Result update(
\n-
152 const NonlinearFactorGraph& newFactors = NonlinearFactorGraph(),
\n-
153 const Values& newTheta = Values(),
\n-
154 const FactorIndices& removeFactorIndices = FactorIndices(),
\n-
155 const boost::optional<FastMap<Key, int> >& constrainedKeys = boost::none,
\n-
156 const boost::optional<FastList<Key> >& noRelinKeys = boost::none,
\n-
157 const boost::optional<FastList<Key> >& extraReelimKeys = boost::none,
\n-
158 bool force_relinearize = false);
\n-
159
\n-
178 virtual ISAM2Result update(const NonlinearFactorGraph& newFactors,
\n-
179 const Values& newTheta,
\n-
180 const ISAM2UpdateParams& updateParams);
\n-
181
\n-
199 void marginalizeLeaves(
\n-
200 const FastList<Key>& leafKeys,
\n-
201 boost::optional<FactorIndices&> marginalFactorsIndices = boost::none,
\n-
202 boost::optional<FactorIndices&> deletedFactorsIndices = boost::none);
\n-
203
\n-
205 const Values& getLinearizationPoint() const { return theta_; }
\n-
206
\n-
208 bool valueExists(Key key) const { return theta_.exists(key); }
\n-
209
\n-
215 Values calculateEstimate() const;
\n-
216
\n-
223 template <class VALUE>
\n-
\n-
224 VALUE calculateEstimate(Key key) const {
\n-
225 const Vector& delta = getDelta()[key];
\n-
226 return traits<VALUE>::Retract(theta_.at<VALUE>(key), delta);
\n-
227 }
\n-
\n-
228
\n-
237 const Value& calculateEstimate(Key key) const;
\n-
238
\n-
240 Matrix marginalCovariance(Key key) const;
\n-
241
\n-
244
\n-
248 Values calculateBestEstimate() const;
\n-
249
\n-
251 const VectorValues& getDelta() const;
\n-
252
\n-
254 double error(const VectorValues& x) const;
\n-
255
\n-
\n-\n-
258 return nonlinearFactors_;
\n-
259 }
\n-
\n-
260
\n-
262 const VariableIndex& getVariableIndex() const { return variableIndex_; }
\n-
263
\n-
265 const KeySet& getFixedVariables() const { return fixedVariables_; }
\n-
266
\n-
267 const ISAM2Params& params() const { return params_; }
\n-
268
\n-
270 void printStats() const { getCliqueData().getStats().print(); }
\n-
271
\n-
279 VectorValues gradientAtZero() const;
\n-
280
\n-
282
\n-
283 protected:
\n-
285 void recalculate(const ISAM2UpdateParams& updateParams,
\n-
286 const KeySet& relinKeys, ISAM2Result* result);
\n-
287
\n-
288 // Do a batch step - reorder and relinearize all variables
\n-
289 void recalculateBatch(const ISAM2UpdateParams& updateParams,
\n-
290 KeySet* affectedKeysSet, ISAM2Result* result);
\n-
291
\n-
292 // retrieve all factors that ONLY contain the affected variables
\n-
293 // (note that the remaining stuff is summarized in the cached factors)
\n-
294 GaussianFactorGraph relinearizeAffectedFactors(
\n-
295 const ISAM2UpdateParams& updateParams, const FastList<Key>& affectedKeys,
\n-
296 const KeySet& relinKeys);
\n-
297
\n-
309 void recalculateIncremental(const ISAM2UpdateParams& updateParams,
\n-
310 const KeySet& relinKeys,
\n-
311 const FastList<Key>& affectedKeys,
\n-
312 KeySet* affectedKeysSet, Cliques* orphans,
\n-
313 ISAM2Result* result);
\n-
314
\n-
320 void addVariables(const Values& newTheta,
\n-
321 ISAM2Result::DetailedResults* detail = 0);
\n-
322
\n-
326 void removeVariables(const KeySet& unusedKeys);
\n-
327
\n-
328 void updateDelta(bool forceFullSolve = false) const;
\n-
329
\n-
330 private:
\n-
332 friend class boost::serialization::access;
\n-
333 template<class ARCHIVE>
\n-
334 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
335 ar & boost::serialization::base_object<BayesTree<ISAM2Clique> >(*this);
\n-
336 ar & BOOST_SERIALIZATION_NVP(theta_);
\n-
337 ar & BOOST_SERIALIZATION_NVP(variableIndex_);
\n-
338 ar & BOOST_SERIALIZATION_NVP(delta_);
\n-
339 ar & BOOST_SERIALIZATION_NVP(deltaNewton_);
\n-
340 ar & BOOST_SERIALIZATION_NVP(RgProd_);
\n-
341 ar & BOOST_SERIALIZATION_NVP(deltaReplacedMask_);
\n-
342 ar & BOOST_SERIALIZATION_NVP(nonlinearFactors_);
\n-
343 ar & BOOST_SERIALIZATION_NVP(linearFactors_);
\n-
344 ar & BOOST_SERIALIZATION_NVP(doglegDelta_);
\n-
345 ar & BOOST_SERIALIZATION_NVP(fixedVariables_);
\n-
346 ar & BOOST_SERIALIZATION_NVP(update_count_);
\n-
347 }
\n-
348
\n-
349}; // ISAM2
\n-
\n-
350
\n-
352template <>
\n-
353struct traits<ISAM2> : public Testable<ISAM2> {};
\n-
354
\n-
355} // namespace gtsam
\n-
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n-
Parameters for iSAM 2.
\n-
Class that stores detailed iSAM2 result.
\n-
Factor Graph consisting of non-linear factors.
\n-
Specialized iSAM2 Clique.
\n-
Class that stores extra params for ISAM2::update()
\n+
\n+\n+
132 const SharedNoiseModel &model, const size_t N,
\n+
133 double x, double a, double b)
\n+
134 : Base(key, z, model,
\n+
135 typename BASIS::template VectorEvaluationFunctor<M>(N, x, a, b)) {}
\n+
\n+
136
\n+
137 virtual ~VectorEvaluationFactor() {}
\n+
138};
\n+
\n+
139
\n+
159template <class BASIS, size_t P>
\n+
\n+\n+
161 : public FunctorizedFactor<double, ParameterMatrix<P>> {
\n+
162 private:
\n+\n+
164
\n+
165 public:
\n+\n+
167
\n+
\n+
181 VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model,
\n+
182 const size_t N, size_t i, double x)
\n+
183 : Base(key, z, model,
\n+
184 typename BASIS::template VectorComponentFunctor<P>(N, i, x)) {}
\n+
\n+
185
\n+
\n+
201 VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model,
\n+
202 const size_t N, size_t i, double x, double a, double b)
\n+
203 : Base(
\n+
204 key, z, model,
\n+
205 typename BASIS::template VectorComponentFunctor<P>(N, i, x, a, b)) {
\n+
206 }
\n+
\n+
207
\n+
208 virtual ~VectorComponentFactor() {}
\n+
209};
\n+
\n+
210
\n+
228template <class BASIS, typename T>
\n+
\n+\n+
230 : public FunctorizedFactor<T, ParameterMatrix<traits<T>::dimension>> {
\n+
231 private:
\n+\n+
233
\n+
234 public:
\n+\n+
236
\n+
\n+\n+
248 const size_t N, double x)
\n+
249 : Base(key, z, model,
\n+
250 typename BASIS::template ManifoldEvaluationFunctor<T>(N, x)) {}
\n+
\n+
251
\n+
\n+\n+
265 const size_t N, double x, double a, double b)
\n+
266 : Base(
\n+
267 key, z, model,
\n+
268 typename BASIS::template ManifoldEvaluationFunctor<T>(N, x, a, b)) {
\n+
269 }
\n+
\n+
270
\n+
271 virtual ~ManifoldEvaluationFactor() {}
\n+
272};
\n+
\n+
273
\n+
280template <class BASIS>
\n+
\n+\n+
282 : public FunctorizedFactor<double, typename BASIS::Parameters> {
\n+
283 private:
\n+\n+
285
\n+
286 public:
\n+\n+
288
\n+
\n+
299 DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model,
\n+
300 const size_t N, double x)
\n+
301 : Base(key, z, model, typename BASIS::DerivativeFunctor(N, x)) {}
\n+
\n+
302
\n+
\n+
315 DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model,
\n+
316 const size_t N, double x, double a, double b)
\n+
317 : Base(key, z, model, typename BASIS::DerivativeFunctor(N, x, a, b)) {}
\n+
\n+
318
\n+
319 virtual ~DerivativeFactor() {}
\n+
320};
\n+
\n+
321
\n+
329template <class BASIS, int M>
\n+
\n+\n+
331 : public FunctorizedFactor<Vector, ParameterMatrix<M>> {
\n+
332 private:
\n+\n+
334 using Func = typename BASIS::template VectorDerivativeFunctor<M>;
\n+
335
\n+
336 public:
\n+\n+
338
\n+
\n+\n+
350 const SharedNoiseModel &model, const size_t N,
\n+
351 double x)
\n+
352 : Base(key, z, model, Func(N, x)) {}
\n+
\n+
353
\n+
\n+\n+
367 const SharedNoiseModel &model, const size_t N,
\n+
368 double x, double a, double b)
\n+
369 : Base(key, z, model, Func(N, x, a, b)) {}
\n+
\n+
370
\n+
371 virtual ~VectorDerivativeFactor() {}
\n+
372};
\n+
\n+
373
\n+
382template <class BASIS, int P>
\n+
\n+\n+
384 : public FunctorizedFactor<double, ParameterMatrix<P>> {
\n+
385 private:
\n+\n+
387 using Func = typename BASIS::template ComponentDerivativeFunctor<P>;
\n+
388
\n+
389 public:
\n+\n+
391
\n+
\n+\n+
406 const SharedNoiseModel &model, const size_t N,
\n+
407 size_t i, double x)
\n+
408 : Base(key, z, model, Func(N, i, x)) {}
\n+
\n+
409
\n+
\n+\n+
426 const SharedNoiseModel &model, const size_t N,
\n+
427 size_t i, double x, double a, double b)
\n+
428 : Base(key, z, model, Func(N, i, x, a, b)) {}
\n+
\n+
429
\n+
430 virtual ~ComponentDerivativeFactor() {}
\n+
431};
\n+
\n+
432
\n+
433} // namespace gtsam
\n+
Compute an interpolating basis.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the de...
Definition FastList.h:40
\n-
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n-\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
This is the base class for any type to be stored in Values.
Definition Value.h:37
\n-
Bayes tree.
Definition BayesTree.h:67
\n-
boost::shared_ptr< Clique > sharedClique
Shared pointer to a clique.
Definition BayesTree.h:74
\n-
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
Implementation of the full ISAM2 algorithm for incremental nonlinear optimization.
Definition ISAM2.h:45
\n-
KeySet fixedVariables_
Set of variables that are involved with linear factors from marginalized variables and thus cannot ha...
Definition ISAM2.h:94
\n-
KeySet deltaReplacedMask_
A cumulative mask for the variables that were replaced and have not yet been updated in the linear so...
Definition ISAM2.h:76
\n-
int update_count_
Counter incremented every update(), used to determine periodic relinearization.
Definition ISAM2.h:96
\n-
VALUE calculateEstimate(Key key) const
Compute an estimate for a single variable using its incomplete linear delta computed during the last ...
Definition ISAM2.h:224
\n-
virtual ~ISAM2()
default virtual destructor
Definition ISAM2.h:114
\n-
const KeySet & getFixedVariables() const
Access the nonlinear variable index.
Definition ISAM2.h:265
\n-
Base::Cliques Cliques
List of Cliques.
Definition ISAM2.h:104
\n-
void printStats() const
prints out clique statistics
Definition ISAM2.h:270
\n-
NonlinearFactorGraph nonlinearFactors_
All original nonlinear factors are stored here to use during relinearization.
Definition ISAM2.h:81
\n-
const VariableIndex & getVariableIndex() const
Access the nonlinear variable index.
Definition ISAM2.h:262
\n-
Base::sharedClique sharedClique
Shared pointer to a clique.
Definition ISAM2.h:103
\n-
VectorValues delta_
The linear delta from the last linear solution, an update to the estimate in theta.
Definition ISAM2.h:61
\n-
VariableIndex variableIndex_
VariableIndex lets us look up factors by involved variable and keeps track of dimensions.
Definition ISAM2.h:52
\n-
const Values & getLinearizationPoint() const
Access the current linearization point.
Definition ISAM2.h:205
\n-
Values theta_
The current linearization point.
Definition ISAM2.h:48
\n-
ISAM2Params params_
The current parameters.
Definition ISAM2.h:87
\n-
boost::optional< double > doglegDelta_
The current Dogleg Delta (trust region radius)
Definition ISAM2.h:90
\n-
GaussianFactorGraph linearFactors_
The current linear factors, which are only updated as needed.
Definition ISAM2.h:84
\n-
const NonlinearFactorGraph & getFactorsUnsafe() const
Access the set of nonlinear factors.
Definition ISAM2.h:257
\n-
bool valueExists(Key key) const
Check whether variable with given key exists in linearization point.
Definition ISAM2.h:208
\n-
Specialized Clique structure for ISAM2, incorporating caching and gradient contribution TODO: more do...
Definition ISAM2Clique.h:37
\n-
Definition ISAM2Params.h:135
\n-
This struct is returned from ISAM2::update() and contains information about the update that is useful...
Definition ISAM2Result.h:41
\n-
A struct holding detailed results, which must be enabled with ISAM2Params::enableDetailedResults.
Definition ISAM2Result.h:117
\n-
This struct is used by ISAM2::update() to pass additional parameters to give the user a fine-grained ...
Definition ISAM2UpdateParams.h:32
\n-
Definition NonlinearFactorGraph.h:55
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
const ValueType at(Key j) const
Retrieve a variable by key j.
Definition Values-inl.h:361
\n-
bool exists(Key j) const
Check if a value exists with key j.
Definition Values.cpp:94
\n+
Factor for enforcing the scalar value of the polynomial BASIS representation at x is the same as the ...
Definition BasisFactors.h:39
\n+
EvaluationFactor(Key key, double z, const SharedNoiseModel &model, const size_t N, double x)
Construct a new EvaluationFactor object.
Definition BasisFactors.h:55
\n+
EvaluationFactor(Key key, double z, const SharedNoiseModel &model, const size_t N, double x, double a, double b)
Construct a new EvaluationFactor object.
Definition BasisFactors.h:70
\n+
Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of size (M,...
Definition BasisFactors.h:96
\n+
VectorEvaluationFactor(Key key, const Vector &z, const SharedNoiseModel &model, const size_t N, double x, double a, double b)
Construct a new VectorEvaluationFactor object.
Definition BasisFactors.h:131
\n+
VectorEvaluationFactor(Key key, const Vector &z, const SharedNoiseModel &model, const size_t N, double x)
Construct a new VectorEvaluationFactor object.
Definition BasisFactors.h:113
\n+
Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of size (P,...
Definition BasisFactors.h:161
\n+
VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x, double a, double b)
Construct a new VectorComponentFactor object.
Definition BasisFactors.h:201
\n+
VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x)
Construct a new VectorComponentFactor object.
Definition BasisFactors.h:181
\n+
For a measurement value of type T i.e.
Definition BasisFactors.h:230
\n+
ManifoldEvaluationFactor(Key key, const T &z, const SharedNoiseModel &model, const size_t N, double x, double a, double b)
Construct a new ManifoldEvaluationFactor object.
Definition BasisFactors.h:264
\n+
ManifoldEvaluationFactor(Key key, const T &z, const SharedNoiseModel &model, const size_t N, double x)
Construct a new ManifoldEvaluationFactor object.
Definition BasisFactors.h:247
\n+
A unary factor which enforces the evaluation of the derivative of a BASIS polynomial at a specified p...
Definition BasisFactors.h:282
\n+
DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, double x, double a, double b)
Construct a new DerivativeFactor object.
Definition BasisFactors.h:315
\n+
DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, double x)
Construct a new DerivativeFactor object.
Definition BasisFactors.h:299
\n+
A unary factor which enforces the evaluation of the derivative of a BASIS polynomial at a specified p...
Definition BasisFactors.h:331
\n+
VectorDerivativeFactor(Key key, const Vector &z, const SharedNoiseModel &model, const size_t N, double x)
Construct a new VectorDerivativeFactor object.
Definition BasisFactors.h:349
\n+
VectorDerivativeFactor(Key key, const Vector &z, const SharedNoiseModel &model, const size_t N, double x, double a, double b)
Construct a new VectorDerivativeFactor object.
Definition BasisFactors.h:366
\n+
A unary factor which enforces the evaluation of the derivative of a BASIS polynomial is equal to the ...
Definition BasisFactors.h:384
\n+
ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x, double a, double b)
Construct a new ComponentDerivativeFactor object.
Definition BasisFactors.h:425
\n+
ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const size_t N, size_t i, double x)
Construct a new ComponentDerivativeFactor object.
Definition BasisFactors.h:405
\n+
Factor which evaluates provided unary functor and uses the result to compute error with respect to th...
Definition FunctorizedFactor.h:59
\n+
Key key() const
Returns a key.
Definition NonlinearFactor.h:518
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,373 +1,312 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM2.h\n+BasisFactors.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19// \\callgraph\n+19#pragma once\n 20\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n-28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-29\n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-_\b4_\b5class GTSAM_EXPORT _\bI_\bS_\bA_\bM_\b2 : public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be {\n-46 protected:\n-_\b4_\b8 _\bV_\ba_\bl_\bu_\be_\bs _\bt_\bh_\be_\bt_\ba_\b_;\n-49\n-_\b5_\b2 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b_;\n-53\n-_\b6_\b1 mutable _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bd_\be_\bl_\bt_\ba_\b_;\n-62\n-63 mutable _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs deltaNewton_; // Only used when using Dogleg - stores\n-64 // the Gauss-Newton update\n-65 mutable _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs RgProd_; // Only used when using Dogleg - stores R*g\n-and\n-66 // is updated incrementally\n-67\n-_\b7_\b6 mutable _\bK_\be_\by_\bS_\be_\bt _\bd_\be_\bl_\bt_\ba_\bR_\be_\bp_\bl_\ba_\bc_\be_\bd_\bM_\ba_\bs_\bk_\b_; // TODO(dellaert): Make sure accessed in\n-77 // the right way\n-78\n-_\b8_\b1 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b_;\n-82\n-_\b8_\b4 mutable _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b_;\n-85\n-_\b8_\b7 _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs _\bp_\ba_\br_\ba_\bm_\bs_\b_;\n-88\n-_\b9_\b0 mutable boost::optional _\bd_\bo_\bg_\bl_\be_\bg_\bD_\be_\bl_\bt_\ba_\b_;\n-91\n-_\b9_\b4 _\bK_\be_\by_\bS_\be_\bt _\bf_\bi_\bx_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\b_;\n-95\n-_\b9_\b6 int _\bu_\bp_\bd_\ba_\bt_\be_\b__\bc_\bo_\bu_\bn_\bt_\b_;\n-98\n-99 public:\n-_\b1_\b0_\b0 using _\bT_\bh_\bi_\bs = _\bI_\bS_\bA_\bM_\b2;\n-_\b1_\b0_\b1 using _\bB_\ba_\bs_\be = _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b>;\n-_\b1_\b0_\b2 using _\bC_\bl_\bi_\bq_\bu_\be = _\bB_\ba_\bs_\be_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be;\n-_\b1_\b0_\b3 using _\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be = _\bB_\ba_\bs_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be;\n-_\b1_\b0_\b4 using _\bC_\bl_\bi_\bq_\bu_\be_\bs = Base::Cliques;\n-105\n-107 explicit _\bI_\bS_\bA_\bM_\b2(const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs& params);\n-108\n-111 _\bI_\bS_\bA_\bM_\b2();\n-112\n-_\b1_\b1_\b4 virtual _\b~_\bI_\bS_\bA_\bM_\b2() {}\n-115\n-117 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bI_\bS_\bA_\bM_\b2& other, double tol = 1e-9) const;\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\bi_\bs_\b/_\bB_\ba_\bs_\bi_\bs_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23\n+24namespace _\bg_\bt_\bs_\ba_\bm {\n+25\n+38template \n+_\b3_\b9class _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br {\n+40 private:\n+41 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bV_\be_\bc_\bt_\bo_\br_\b>;\n+42\n+43 public:\n+44 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+45\n+_\b5_\b5 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, double z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n+56 const size_t N, double x)\n+57 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, typename BASIS::EvaluationFunctor(N, x)) {}\n+58\n+_\b7_\b0 _\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, double z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n+71 const size_t N, double x, double a, double b)\n+72 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, typename BASIS::EvaluationFunctor(N, x, a, b)) {}\n+73\n+74 virtual _\b~_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+75};\n+76\n+94template \n+_\b9_\b5class _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+96 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> {\n+97 private:\n+98 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bV_\be_\bc_\bt_\bo_\br_\b,_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>>;\n+99\n+100 public:\n+101 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+102\n+_\b1_\b1_\b3 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Vector &z,\n+114 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n+115 double x)\n+116 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model,\n+117 typename BASIS::template VectorEvaluationFunctor(N, x)) {}\n 118\n-151 virtual _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt update(\n-152 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors = _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(),\n-153 const _\bV_\ba_\bl_\bu_\be_\bs& newTheta = _\bV_\ba_\bl_\bu_\be_\bs(),\n-154 const _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs& removeFactorIndices = _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs(),\n-155 const boost::optional<_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bi_\bn_\bt_\b> >& constrainedKeys = boost::none,\n-156 const boost::optional<_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b> >& noRelinKeys = boost::none,\n-157 const boost::optional<_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b> >& extraReelimKeys = boost::none,\n-158 bool force_relinearize = false);\n-159\n-178 virtual _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt update(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n-179 const _\bV_\ba_\bl_\bu_\be_\bs& newTheta,\n-180 const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams);\n-181\n-199 void marginalizeLeaves(\n-200 const _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b>& leafKeys,\n-201 boost::optional marginalFactorsIndices = boost::none,\n-202 boost::optional deletedFactorsIndices = boost::none);\n-203\n-_\b2_\b0_\b5 const _\bV_\ba_\bl_\bu_\be_\bs& _\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt() const { return theta_; }\n-206\n-_\b2_\b0_\b8 bool _\bv_\ba_\bl_\bu_\be_\bE_\bx_\bi_\bs_\bt_\bs(_\bK_\be_\by key) const { return theta_._\be_\bx_\bi_\bs_\bt_\bs(key); }\n-209\n-215 _\bV_\ba_\bl_\bu_\be_\bs calculateEstimate() const;\n-216\n-223 template \n-_\b2_\b2_\b4 VALUE _\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be(_\bK_\be_\by key) const {\n-225 const Vector& delta = getDelta()[key];\n-226 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bV_\bA_\bL_\bU_\bE_\b>_\b:_\b:_\bR_\be_\bt_\br_\ba_\bc_\bt(theta_._\ba_\bt(key), delta);\n-227 }\n-228\n-237 const _\bV_\ba_\bl_\bu_\be& calculateEstimate(_\bK_\be_\by key) const;\n-238\n-240 Matrix marginalCovariance(_\bK_\be_\by key) const;\n-241\n-244\n-248 _\bV_\ba_\bl_\bu_\be_\bs calculateBestEstimate() const;\n-249\n-251 const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& getDelta() const;\n-252\n-254 double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const;\n-255\n-_\b2_\b5_\b7 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be() const {\n-258 return nonlinearFactors_;\n-259 }\n-260\n-_\b2_\b6_\b2 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& _\bg_\be_\bt_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx() const { return variableIndex_; }\n-263\n-_\b2_\b6_\b5 const _\bK_\be_\by_\bS_\be_\bt& _\bg_\be_\bt_\bF_\bi_\bx_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs() const { return fixedVariables_; }\n-266\n-267 const _\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs& params() const { return params_; }\n-268\n-_\b2_\b7_\b0 void _\bp_\br_\bi_\bn_\bt_\bS_\bt_\ba_\bt_\bs() const { getCliqueData().getStats().print(); }\n-271\n-279 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs gradientAtZero() const;\n-280\n-282\n-283 protected:\n-285 void recalculate(const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams,\n-286 const _\bK_\be_\by_\bS_\be_\bt& relinKeys, _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt* result);\n-287\n-288 // Do a batch step - reorder and relinearize all variables\n-289 void recalculateBatch(const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams,\n-290 _\bK_\be_\by_\bS_\be_\bt* affectedKeysSet, _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt* result);\n-291\n-292 // retrieve all factors that ONLY contain the affected variables\n-293 // (note that the remaining stuff is summarized in the cached factors)\n-294 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh relinearizeAffectedFactors(\n-295 const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams, const _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b>& affectedKeys,\n-296 const _\bK_\be_\by_\bS_\be_\bt& relinKeys);\n-297\n-309 void recalculateIncremental(const _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs& updateParams,\n-310 const _\bK_\be_\by_\bS_\be_\bt& relinKeys,\n-311 const _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\bK_\be_\by_\b>& affectedKeys,\n-312 _\bK_\be_\by_\bS_\be_\bt* affectedKeysSet, Cliques* orphans,\n-313 _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt* result);\n-314\n-320 void addVariables(const _\bV_\ba_\bl_\bu_\be_\bs& newTheta,\n-321 _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs* detail = 0);\n-322\n-326 void removeVariables(const _\bK_\be_\by_\bS_\be_\bt& unusedKeys);\n-327\n-328 void updateDelta(bool forceFullSolve = false) const;\n-329\n-330 private:\n-_\b3_\b3_\b2 friend class boost::serialization::access;\n-333 template\n-334 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-335 ar & boost::serialization::base_object >(*this);\n-336 ar & BOOST_SERIALIZATION_NVP(theta_);\n-337 ar & BOOST_SERIALIZATION_NVP(variableIndex_);\n-338 ar & BOOST_SERIALIZATION_NVP(delta_);\n-339 ar & BOOST_SERIALIZATION_NVP(deltaNewton_);\n-340 ar & BOOST_SERIALIZATION_NVP(RgProd_);\n-341 ar & BOOST_SERIALIZATION_NVP(deltaReplacedMask_);\n-342 ar & BOOST_SERIALIZATION_NVP(nonlinearFactors_);\n-343 ar & BOOST_SERIALIZATION_NVP(linearFactors_);\n-344 ar & BOOST_SERIALIZATION_NVP(doglegDelta_);\n-345 ar & BOOST_SERIALIZATION_NVP(fixedVariables_);\n-346 ar & BOOST_SERIALIZATION_NVP(update_count_);\n-347 }\n-348\n-349}; // ISAM2\n-350\n-352template <>\n-_\b3_\b5_\b3struct _\bt_\br_\ba_\bi_\bt_\bs<_\bI_\bS_\bA_\bM_\b2> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-354\n-355} // namespace gtsam\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n-_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n-Parameters for iSAM 2.\n-_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh\n-Class that stores detailed iSAM2 result.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n-_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b._\bh\n-Specialized iSAM2 Clique.\n-_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n-Class that stores extra params for ISAM2::update()\n+_\b1_\b3_\b1 _\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Vector &z,\n+132 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n+133 double x, double a, double b)\n+134 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model,\n+135 typename BASIS::template VectorEvaluationFunctor(N, x, a, b)) {}\n+136\n+137 virtual _\b~_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+138};\n+139\n+159template \n+_\b1_\b6_\b0class _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br\n+161 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> {\n+162 private:\n+163 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bP_\b>>;\n+164\n+165 public:\n+166 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br() {}\n+167\n+_\b1_\b8_\b1 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+&model,\n+182 const size_t N, size_t i, double x)\n+183 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model,\n+184 typename BASIS::template VectorComponentFunctor

(N, i, x)) {}\n+185\n+_\b2_\b0_\b1 _\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+&model,\n+202 const size_t N, size_t i, double x, double a, double b)\n+203 : _\bB_\ba_\bs_\be(\n+204 _\bk_\be_\by, z, model,\n+205 typename BASIS::template VectorComponentFunctor

(N, i, x, a, b)) {\n+206 }\n+207\n+208 virtual _\b~_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br() {}\n+209};\n+210\n+228template \n+_\b2_\b2_\b9class _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+230 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br::dimension>> {\n+231 private:\n+232 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bT_\b,_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn>>;\n+233\n+234 public:\n+235 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+236\n+_\b2_\b4_\b7 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const T &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+&model,\n+248 const size_t N, double x)\n+249 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model,\n+250 typename BASIS::template ManifoldEvaluationFunctor(N, x)) {}\n+251\n+_\b2_\b6_\b4 _\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const T &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+&model,\n+265 const size_t N, double x, double a, double b)\n+266 : _\bB_\ba_\bs_\be(\n+267 _\bk_\be_\by, z, model,\n+268 typename BASIS::template ManifoldEvaluationFunctor(N, x, a, b)) {\n+269 }\n+270\n+271 virtual _\b~_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+272};\n+273\n+280template \n+_\b2_\b8_\b1class _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+282 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br {\n+283 private:\n+284 using Base = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bt_\by_\bp_\be_\bn_\ba_\bm_\be_\b _\bB_\bA_\bS_\bI_\bS_\b:_\b:_\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bs_\b>;\n+285\n+286 public:\n+287 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+288\n+_\b2_\b9_\b9 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n+300 const size_t N, double x)\n+301 : Base(_\bk_\be_\by, z, model, typename BASIS::DerivativeFunctor(N, x)) {}\n+302\n+_\b3_\b1_\b5 _\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z, const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model,\n+316 const size_t N, double x, double a, double b)\n+317 : Base(_\bk_\be_\by, z, model, typename BASIS::DerivativeFunctor(N, x, a, b)) {}\n+318\n+319 virtual _\b~_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+320};\n+321\n+329template \n+_\b3_\b3_\b0class _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+331 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> {\n+332 private:\n+333 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bV_\be_\bc_\bt_\bo_\br_\b,_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bM_\b>>;\n+334 using Func = typename BASIS::template VectorDerivativeFunctor;\n+335\n+336 public:\n+337 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+338\n+_\b3_\b4_\b9 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Vector &z,\n+350 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n+351 double x)\n+352 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, Func(N, x)) {}\n+353\n+_\b3_\b6_\b6 _\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const Vector &z,\n+367 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n+368 double x, double a, double b)\n+369 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, Func(N, x, a, b)) {}\n+370\n+371 virtual _\b~_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+372};\n+373\n+382template \n+_\b3_\b8_\b3class _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+384 : public _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br> {\n+385 private:\n+386 using _\bB_\ba_\bs_\be = _\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bd_\bo_\bu_\bb_\bl_\be_\b,_\b _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br_\bM_\ba_\bt_\br_\bi_\bx_\b<_\bP_\b>>;\n+387 using Func = typename BASIS::template ComponentDerivativeFunctor

;\n+388\n+389 public:\n+390 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+391\n+_\b4_\b0_\b5 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z,\n+406 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n+407 size_t i, double x)\n+408 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, Func(N, i, x)) {}\n+409\n+_\b4_\b2_\b5 _\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by _\bk_\be_\by, const double &z,\n+426 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model, const size_t N,\n+427 size_t i, double x, double a, double b)\n+428 : _\bB_\ba_\bs_\be(_\bk_\be_\by, z, model, Func(N, i, x, a, b)) {}\n+429\n+430 virtual _\b~_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br() {}\n+431};\n+432\n+433} // namespace gtsam\n+_\bB_\ba_\bs_\bi_\bs_\b._\bh\n+Compute an interpolating basis.\n+_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-FastVector< FactorIndex > FactorIndices\n-Define collection types:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt\n-FastList is a thin wrapper around std::list that uses the boost\n-fast_pool_allocator instead of the de...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastList.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n-FastMap is a thin wrapper around std::map that uses the boost\n-fast_pool_allocator instead of the defa...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be\n-This is the base class for any type to be stored in Values.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Value.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\b _\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be_\b _\b>_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be\n-boost::shared_ptr< Clique > sharedClique\n-Shared pointer to a clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-The VariableIndex class computes and stores the block column structure of a\n-factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2\n-Implementation of the full ISAM2 algorithm for incremental nonlinear\n-optimization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bf_\bi_\bx_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\b_\n-KeySet fixedVariables_\n-Set of variables that are involved with linear factors from marginalized\n-variables and thus cannot ha...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bd_\be_\bl_\bt_\ba_\bR_\be_\bp_\bl_\ba_\bc_\be_\bd_\bM_\ba_\bs_\bk_\b_\n-KeySet deltaReplacedMask_\n-A cumulative mask for the variables that were replaced and have not yet been\n-updated in the linear so...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\b__\bc_\bo_\bu_\bn_\bt_\b_\n-int update_count_\n-Counter incremented every update(), used to determine periodic relinearization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:96\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be\n-VALUE calculateEstimate(Key key) const\n-Compute an estimate for a single variable using its incomplete linear delta\n-computed during the last ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:224\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\b~_\bI_\bS_\bA_\bM_\b2\n-virtual ~ISAM2()\n-default virtual destructor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:114\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bg_\be_\bt_\bF_\bi_\bx_\be_\bd_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs\n-const KeySet & getFixedVariables() const\n-Access the nonlinear variable index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:265\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bC_\bl_\bi_\bq_\bu_\be_\bs\n-Base::Cliques Cliques\n-List of Cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:104\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bp_\br_\bi_\bn_\bt_\bS_\bt_\ba_\bt_\bs\n-void printStats() const\n-prints out clique statistics\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:270\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b_\n-NonlinearFactorGraph nonlinearFactors_\n-All original nonlinear factors are stored here to use during relinearization.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bg_\be_\bt_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-const VariableIndex & getVariableIndex() const\n-Access the nonlinear variable index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:262\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\bC_\bl_\bi_\bq_\bu_\be\n-Base::sharedClique sharedClique\n-Shared pointer to a clique.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:103\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bd_\be_\bl_\bt_\ba_\b_\n-VectorValues delta_\n-The linear delta from the last linear solution, an update to the estimate in\n-theta.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:61\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b_\n-VariableIndex variableIndex_\n-VariableIndex lets us look up factors by involved variable and keeps track of\n-dimensions.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt\n-const Values & getLinearizationPoint() const\n-Access the current linearization point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:205\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bt_\bh_\be_\bt_\ba_\b_\n-Values theta_\n-The current linearization point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bp_\ba_\br_\ba_\bm_\bs_\b_\n-ISAM2Params params_\n-The current parameters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bd_\bo_\bg_\bl_\be_\bg_\bD_\be_\bl_\bt_\ba_\b_\n-boost::optional< double > doglegDelta_\n-The current Dogleg Delta (trust region radius)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:90\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b_\n-GaussianFactorGraph linearFactors_\n-The current linear factors, which are only updated as needed.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be\n-const NonlinearFactorGraph & getFactorsUnsafe() const\n-Access the set of nonlinear factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:257\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bv_\ba_\bl_\bu_\be_\bE_\bx_\bi_\bs_\bt_\bs\n-bool valueExists(Key key) const\n-Check whether variable with given key exists in linearization point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2.h:208\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bC_\bl_\bi_\bq_\bu_\be\n-Specialized Clique structure for ISAM2, incorporating caching and gradient\n-contribution TODO: more do...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Clique.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Params.h:135\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt\n-This struct is returned from ISAM2::update() and contains information about the\n-update that is useful...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs\n-A struct holding detailed results, which must be enabled with ISAM2Params::\n-enableDetailedResults.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:117\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs\n-This struct is used by ISAM2::update() to pass additional parameters to give\n-the user a fine-grained ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\ba_\bt\n-const ValueType at(Key j) const\n-Retrieve a variable by key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values-inl.h:361\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs_\b:_\b:_\be_\bx_\bi_\bs_\bt_\bs\n-bool exists(Key j) const\n-Check if a value exists with key j.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.cpp:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+Factor for enforcing the scalar value of the polynomial BASIS representation at\n+x is the same as the ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+EvaluationFactor(Key key, double z, const SharedNoiseModel &model, const size_t\n+N, double x)\n+Construct a new EvaluationFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+EvaluationFactor(Key key, double z, const SharedNoiseModel &model, const size_t\n+N, double x, double a, double b)\n+Construct a new EvaluationFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:70\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of\n+size (M,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+VectorEvaluationFactor(Key key, const Vector &z, const SharedNoiseModel &model,\n+const size_t N, double x, double a, double b)\n+Construct a new VectorEvaluationFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:131\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+VectorEvaluationFactor(Key key, const Vector &z, const SharedNoiseModel &model,\n+const size_t N, double x)\n+Construct a new VectorEvaluationFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:113\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br\n+Unary factor for enforcing BASIS polynomial evaluation on a ParameterMatrix of\n+size (P,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:161\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br\n+VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model,\n+const size_t N, size_t i, double x, double a, double b)\n+Construct a new VectorComponentFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:201\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bF_\ba_\bc_\bt_\bo_\br\n+VectorComponentFactor(Key key, const double &z, const SharedNoiseModel &model,\n+const size_t N, size_t i, double x)\n+Construct a new VectorComponentFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:181\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+For a measurement value of type T i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:230\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+ManifoldEvaluationFactor(Key key, const T &z, const SharedNoiseModel &model,\n+const size_t N, double x, double a, double b)\n+Construct a new ManifoldEvaluationFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:264\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd_\bE_\bv_\ba_\bl_\bu_\ba_\bt_\bi_\bo_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+ManifoldEvaluationFactor(Key key, const T &z, const SharedNoiseModel &model,\n+const size_t N, double x)\n+Construct a new ManifoldEvaluationFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:247\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+A unary factor which enforces the evaluation of the derivative of a BASIS\n+polynomial at a specified p...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:282\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const\n+size_t N, double x, double a, double b)\n+Construct a new DerivativeFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:315\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+DerivativeFactor(Key key, const double &z, const SharedNoiseModel &model, const\n+size_t N, double x)\n+Construct a new DerivativeFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:299\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+A unary factor which enforces the evaluation of the derivative of a BASIS\n+polynomial at a specified p...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:331\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+VectorDerivativeFactor(Key key, const Vector &z, const SharedNoiseModel &model,\n+const size_t N, double x)\n+Construct a new VectorDerivativeFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:349\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+VectorDerivativeFactor(Key key, const Vector &z, const SharedNoiseModel &model,\n+const size_t N, double x, double a, double b)\n+Construct a new VectorDerivativeFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:366\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+A unary factor which enforces the evaluation of the derivative of a BASIS\n+polynomial is equal to the ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:384\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel\n+&model, const size_t N, size_t i, double x, double a, double b)\n+Construct a new ComponentDerivativeFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:425\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bo_\bm_\bp_\bo_\bn_\be_\bn_\bt_\bD_\be_\br_\bi_\bv_\ba_\bt_\bi_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br\n+ComponentDerivativeFactor(Key key, const double &z, const SharedNoiseModel\n+&model, const size_t N, size_t i, double x)\n+Construct a new ComponentDerivativeFactor object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BasisFactors.h:405\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\bu_\bn_\bc_\bt_\bo_\br_\bi_\bz_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br\n+Factor which evaluates provided unary functor and uses the result to compute\n+error with respect to th...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FunctorizedFactor.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b:_\b:_\bk_\be_\by\n+Key key() const\n+Returns a key.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:518\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\b._\bh\n+ * _\bb_\ba_\bs_\bi_\bs\n+ * _\bB_\ba_\bs_\bi_\bs_\bF_\ba_\bc_\bt_\bo_\br_\bs_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01166_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01055_source.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/NonlinearISAM.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/CustomFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n

\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
NonlinearISAM.h
\n+
CustomFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n-\n-
22
\n-
23namespace gtsam {
\n-
\n-
27class GTSAM_EXPORT NonlinearISAM {
\n-
28protected:
\n-
29
\n-\n-
32
\n-\n-
35
\n-\n-
38
\n-\n-
41 int reorderCounter_;
\n-
42
\n-\n-
45
\n-
46public:
\n-
47
\n+\n+
21
\n+
22namespace gtsam {
\n+
23
\n+
24using JacobianVector = std::vector<Matrix>;
\n+
25
\n+
26class CustomFactor;
\n+
27
\n+
28/*
\n+
29 * NOTE
\n+
30 * ==========
\n+
31 * pybind11 will invoke a copy if this is `JacobianVector &`, and modifications in Python will not be reflected.
\n+
32 *
\n+
33 * This is safe because this is passing a const pointer, and pybind11 will maintain the `std::vector` memory layout.
\n+
34 * Thus the pointer will never be invalidated.
\n+
35 */
\n+
36using CustomErrorFunction = std::function<Vector(const CustomFactor &, const Values &, const JacobianVector *)>;
\n+
37
\n+
\n+\n+
46protected:
\n+
47 CustomErrorFunction error_function_;
\n+
48
\n+
49protected:
\n
50
\n-
\n-
58 NonlinearISAM(int reorderInterval = 1,
\n-
59 const GaussianFactorGraph::Eliminate& eliminationFunction = GaussianFactorGraph::EliminationTraitsType::DefaultEliminate) :
\n-
60 reorderInterval_(reorderInterval), reorderCounter_(0), eliminationFunction_(eliminationFunction) {}
\n-
\n-
61
\n-
65
\n-
67 Values estimate() const;
\n-
68
\n-
70 Matrix marginalCovariance(Key key) const;
\n+
51 using Base = NoiseModelFactor;
\n+
52 using This = CustomFactor;
\n+
53
\n+
54public:
\n+
55
\n+
59 CustomFactor() = default;
\n+
60
\n+
\n+
67 CustomFactor(const SharedNoiseModel &noiseModel, const KeyVector &keys, const CustomErrorFunction &errorFunction) :
\n+\n+
69 this->error_function_ = errorFunction;
\n+
70 }
\n+
\n
71
\n-
72 // access
\n+
72 ~CustomFactor() override = default;
\n
73
\n-
75 const GaussianISAM& bayesTree() const { return isam_; }
\n-
76
\n-
78 const Values& getLinearizationPoint() const { return linPoint_; }
\n+
78 Vector unwhitenedError(const Values &x, boost::optional<std::vector<Matrix> &> H = boost::none) const override;
\n
79
\n-
81 const NonlinearFactorGraph& getFactorsUnsafe() const { return factors_; }
\n-
82
\n-
84 int reorderInterval() const { return reorderInterval_; }
\n-
\n-
85 int reorderCounter() const { return reorderCounter_; }
\n-
86
\n-
88 void print(const std::string& s="", const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
89
\n-
91 void printStats() const;
\n-
92
\n-
94 void saveGraph(const std::string& s, const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n-
95
\n-
99
\n-
101 void update(const NonlinearFactorGraph& newFactors, const Values& initialValues);
\n-
102
\n-
104 void reorder_relinearize();
\n-
105
\n-
107
\n-
108};
\n-
109
\n-
110} // \\namespace gtsam
\n+
81 void print(const std::string &s,
\n+
82 const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override;
\n+
83
\n+
\n+
87 bool sendable() const override {
\n+
88 return false;
\n+
89 }
\n
\n-
\n-\n-
Factor Graph consisting of non-linear factors.
\n+
90
\n+
91private:
\n+
92
\n+\n+
95 template<class ARCHIVE>
\n+
96 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {
\n+
97 ar & boost::serialization::make_nvp("CustomFactor",
\n+
98 boost::serialization::base_object<Base>(*this));
\n+
99 }
\n+
100};
\n+
\n+
101
\n+
102}
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition EliminateableFactorGraph.h:89
\n-
Definition GaussianISAM.h:28
\n-
Definition NonlinearFactorGraph.h:55
\n-
Wrapper class to manage ISAM in a nonlinear context.
Definition NonlinearISAM.h:27
\n-
GaussianFactorGraph::Eliminate eliminationFunction_
The elimination function.
Definition NonlinearISAM.h:44
\n-
NonlinearFactorGraph factors_
The original factors, used when relinearizing.
Definition NonlinearISAM.h:37
\n-
const GaussianISAM & bayesTree() const
access the underlying bayes tree
Definition NonlinearISAM.h:75
\n-
int reorderInterval() const
get counters
Definition NonlinearISAM.h:84
\n-
NonlinearISAM(int reorderInterval=1, const GaussianFactorGraph::Eliminate &eliminationFunction=GaussianFactorGraph::EliminationTraitsType::DefaultEliminate)
Periodically reorder and relinearize.
Definition NonlinearISAM.h:58
\n-
int reorderCounter() const
TODO: comment.
Definition NonlinearISAM.h:85
\n-
const NonlinearFactorGraph & getFactorsUnsafe() const
get underlying nonlinear graph
Definition NonlinearISAM.h:81
\n-
int reorderInterval_
The reordering interval and counter.
Definition NonlinearISAM.h:40
\n-
Values linPoint_
The current linearization point.
Definition NonlinearISAM.h:34
\n-
gtsam::GaussianISAM isam_
The internal iSAM object.
Definition NonlinearISAM.h:31
\n-
const Values & getLinearizationPoint() const
Return the current linearization point.
Definition NonlinearISAM.h:78
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
Definition CustomFactor.h:45
\n+
Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix > & > H=boost::none) const override
Calls the errorFunction closure, which is a std::function object One can check if a derivative is nee...
Definition CustomFactor.cpp:25
\n+
CustomFactor(const SharedNoiseModel &noiseModel, const KeyVector &keys, const CustomErrorFunction &errorFunction)
Constructor.
Definition CustomFactor.h:67
\n+
CustomFactor()=default
Default Constructor for I/O.
\n+
friend class boost::serialization::access
Serialization function.
Definition CustomFactor.h:94
\n+
bool sendable() const override
Mark not sendable.
Definition CustomFactor.h:87
\n+
void print(const std::string &s, const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print
Definition CustomFactor.cpp:59
\n+
A nonlinear sum-of-squares factor with a zero-mean noise model implementing the density Templated on...
Definition NonlinearFactor.h:174
\n+
NoiseModelFactor()
Default constructor for I/O only.
Definition NonlinearFactor.h:189
\n+
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-NonlinearISAM.h\n+CustomFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,151 +16,142 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh>\n-22\n-23namespace _\bg_\bt_\bs_\ba_\bm {\n-_\b2_\b7class GTSAM_EXPORT _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM {\n-28protected:\n-29\n-_\b3_\b1 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM _\bi_\bs_\ba_\bm_\b_;\n-32\n-_\b3_\b4 _\bV_\ba_\bl_\bu_\be_\bs _\bl_\bi_\bn_\bP_\bo_\bi_\bn_\bt_\b_;\n-35\n-_\b3_\b7 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_;\n-38\n-_\b4_\b0 int _\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\b_;\n-41 int reorderCounter_;\n-42\n-_\b4_\b4 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_;\n-45\n-46public:\n-47\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+21\n+22namespace _\bg_\bt_\bs_\ba_\bm {\n+23\n+24using JacobianVector = std::vector;\n+25\n+26class CustomFactor;\n+27\n+28/*\n+29 * NOTE\n+30 * ==========\n+31 * pybind11 will invoke a copy if this is `JacobianVector &`, and\n+modifications in Python will not be reflected.\n+32 *\n+33 * This is safe because this is passing a const pointer, and pybind11 will\n+maintain the `std::vector` memory layout.\n+34 * Thus the pointer will never be invalidated.\n+35 */\n+36using CustomErrorFunction = std::function;\n+37\n+_\b4_\b5class _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br {\n+46protected:\n+47 CustomErrorFunction error_function_;\n+48\n+49protected:\n 50\n-_\b5_\b8 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM(int reorderInterval = 1,\n-59 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& eliminationFunction =\n-GaussianFactorGraph::EliminationTraitsType::DefaultEliminate) :\n-60 reorderInterval_(reorderInterval), reorderCounter_(0), eliminationFunction_\n-(eliminationFunction) {}\n-61\n-65\n-67 _\bV_\ba_\bl_\bu_\be_\bs estimate() const;\n-68\n-70 Matrix marginalCovariance(_\bK_\be_\by key) const;\n+51 using _\bB_\ba_\bs_\be = _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br;\n+52 using _\bT_\bh_\bi_\bs = _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br;\n+53\n+54public:\n+55\n+_\b5_\b9 _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br() = default;\n+60\n+_\b6_\b7 _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br(const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br &_\bk_\be_\by_\bs,\n+const CustomErrorFunction &errorFunction) :\n+68 _\bB_\ba_\bs_\be(_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl, _\bk_\be_\by_\bs) {\n+69 this->error_function_ = errorFunction;\n+70 }\n 71\n-72 // access\n+72 _\b~_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br() override = default;\n 73\n-_\b7_\b5 const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM& _\bb_\ba_\by_\be_\bs_\bT_\br_\be_\be() const { return isam_; }\n-76\n-_\b7_\b8 const _\bV_\ba_\bl_\bu_\be_\bs& _\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt() const { return linPoint_; }\n+78 Vector _\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs &x, boost::optional\n+&> H = boost::none) const override;\n 79\n-_\b8_\b1 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be() const { return factors_; }\n-82\n-_\b8_\b4 int _\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() const { return reorderInterval_; }\n-_\b8_\b5 int _\br_\be_\bo_\br_\bd_\be_\br_\bC_\bo_\bu_\bn_\bt_\be_\br() const { return reorderCounter_; }\n-86\n-88 void _\bp_\br_\bi_\bn_\bt(const std::string& s=\"\", const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-DefaultKeyFormatter) const;\n-89\n-91 void printStats() const;\n+81 void _\bp_\br_\bi_\bn_\bt(const std::string &s,\n+82 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter) const override;\n+83\n+_\b8_\b7 bool _\bs_\be_\bn_\bd_\ba_\bb_\bl_\be() const override {\n+88 return false;\n+89 }\n+90\n+91private:\n 92\n-94 void saveGraph(const std::string& s, const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter =\n-DefaultKeyFormatter) const;\n-95\n-99\n-101 void update(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors, const _\bV_\ba_\bl_\bu_\be_\bs&\n-initialValues);\n-102\n-104 void reorder_relinearize();\n-105\n-107\n-108};\n-109\n-110} // \\namespace gtsam\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n+_\b9_\b4 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+95 template\n+96 void serialize(ARCHIVE &ar, const unsigned int /*version*/) {\n+97 ar & boost::serialization::make_nvp(\"CustomFactor\",\n+98 boost::serialization::base_object(*this));\n+99 }\n+100};\n+101\n+102}\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-std::function< EliminationResult(const FactorGraphType &, const Ordering &)>\n-Eliminate\n-The function type that does a single dense elimination step on a subgraph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:89\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianISAM.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n-Wrapper class to manage ISAM in a nonlinear context.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_\n-GaussianFactorGraph::Eliminate eliminationFunction_\n-The elimination function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_\n-NonlinearFactorGraph factors_\n-The original factors, used when relinearizing.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bb_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-const GaussianISAM & bayesTree() const\n-access the underlying bayes tree\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n-int reorderInterval() const\n-get counters\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n-NonlinearISAM(int reorderInterval=1, const GaussianFactorGraph::Eliminate\n-&eliminationFunction=GaussianFactorGraph::EliminationTraitsType::\n-DefaultEliminate)\n-Periodically reorder and relinearize.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bC_\bo_\bu_\bn_\bt_\be_\br\n-int reorderCounter() const\n-TODO: comment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:85\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be\n-const NonlinearFactorGraph & getFactorsUnsafe() const\n-get underlying nonlinear graph\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:81\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\b_\n-int reorderInterval_\n-The reordering interval and counter.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bl_\bi_\bn_\bP_\bo_\bi_\bn_\bt_\b_\n-Values linPoint_\n-The current linearization point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bi_\bs_\ba_\bm_\b_\n-gtsam::GaussianISAM isam_\n-The internal iSAM object.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt\n-const Values & getLinearizationPoint() const\n-Return the current linearization point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearISAM.h:78\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bn_\bw_\bh_\bi_\bt_\be_\bn_\be_\bd_\bE_\br_\br_\bo_\br\n+Vector unwhitenedError(const Values &x, boost::optional< std::vector< Matrix >\n+& > H=boost::none) const override\n+Calls the errorFunction closure, which is a std::function object One can check\n+if a derivative is nee...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.cpp:25\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br\n+CustomFactor(const SharedNoiseModel &noiseModel, const KeyVector &keys, const\n+CustomErrorFunction &errorFunction)\n+Constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br\n+CustomFactor()=default\n+Default Constructor for I/O.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\be_\bn_\bd_\ba_\bb_\bl_\be\n+bool sendable() const override\n+Mark not sendable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s, const KeyFormatter\n+&keyFormatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn CustomFactor.cpp:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+A nonlinear sum-of-squares factor with a zero-mean noise model implementing the\n+density Templated on...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:174\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br\n+NoiseModelFactor()\n+Default constructor for I/O only.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:189\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+const SharedNoiseModel & noiseModel() const\n+access to the noise model\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bV_\ba_\bl_\bu_\be_\bs\n+In nonlinear factors, the error function returns the negative log-likelihood as\n+a non-linear function...\n * _\bg_\bt_\bs_\ba_\bm\n * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b._\bh\n+ * _\bC_\bu_\bs_\bt_\bo_\bm_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01169.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00677.html", "comments": ["Files 90% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2UpdateParams.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/JunctionTree.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
ISAM2UpdateParams.h File Reference
\n+
JunctionTree.h File Reference
\n
\n
\n \n-

Class that stores extra params for ISAM2::update() \n+

The junction tree. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

struct  gtsam::ISAM2UpdateParams
 This struct is used by ISAM2::update() to pass additional parameters to give the user a fine-grained control on how factors and relinearized, etc. More...
class  gtsam::JunctionTree< BAYESTREE, GRAPH >
 A JunctionTree is a cluster tree, a set of variable clusters with factors, arranged in a tree, with the additional property that it represents the clique tree associated with a Bayes Net. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

Class that stores extra params for ISAM2::update()

\n-
Author
Michael Kaess, Richard Roberts, Frank Dellaert, Jose Luis Blanco
\n+

The junction tree.

\n+
Date
Feb 4, 2010
\n+
Author
Kai Ni
\n+
\n+Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,31 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-ISAM2UpdateParams.h File Reference\n-Class that stores extra params for ISAM2::update() _\bM_\bo_\br_\be_\b._\b._\b.\n+JunctionTree.h File Reference\n+The junction tree. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs\n- This struct is used by _\bI_\bS_\bA_\bM_\b2_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\b(_\b) to pass additional parameters\n-\u00a0 to give the user a fine-grained control on how factors and\n- relinearized, etc. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\b _\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b,_\b _\bG_\bR_\bA_\bP_\bH_\b _\b>\n+ A _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be is a cluster tree, a set of variable clusters with\n+\u00a0 factors, arranged in a tree, with the additional property that it\n+ represents the clique tree associated with a Bayes Net. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-Class that stores extra params for ISAM2::update()\n+The junction tree.\n+ Date\n+ Feb 4, 2010\n Author\n- Michael Kaess, Richard Roberts, Frank Dellaert, Jose Luis Blanco\n+ Kai Ni\n+ Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n+ * _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01169_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01190_source.html", "comments": ["Files 76% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2UpdateParams.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanGaugeFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
ISAM2UpdateParams.h
\n+
ShonanGaugeFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
3 * Atlanta, Georgia 30332-0415
\n-
4 * All Rights Reserved
\n-
5 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
6 * See LICENSE for the license information
\n-
7 * -------------------------------------------------------------------------- */
\n-
8
\n-
15// \\callgraph
\n-
16
\n-
17#pragma once
\n-
18
\n-
19#include <gtsam/base/FastList.h>
\n-
20#include <gtsam/dllexport.h> // GTSAM_EXPORT
\n-
21#include <gtsam/inference/Key.h> // Key, KeySet
\n-
22#include <gtsam/nonlinear/ISAM2Result.h> //FactorIndices
\n-
23#include <boost/optional.hpp>
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+
2
\n+
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n+
4 * Atlanta, Georgia 30332-0415
\n+
5 * All Rights Reserved
\n+
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n+
7
\n+
8 * See LICENSE for the license information
\n+
9
\n+
10 * -------------------------------------------------------------------------- */
\n+
11
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/geometry/SOn.h>
\n+\n+\n
24
\n
25namespace gtsam {
\n-
26
\n-
\n-\n-
33 ISAM2UpdateParams() = default;
\n-
34
\n-\n-
37
\n-
40 boost::optional<FastMap<Key, int>> constrainedKeys{boost::none};
\n-
41
\n-
44 boost::optional<FastList<Key>> noRelinKeys{boost::none};
\n-
45
\n-
49 boost::optional<FastList<Key>> extraReelimKeys{boost::none};
\n-
50
\n-
54 bool force_relinearize{false};
\n-
55
\n-
66 boost::optional<FastMap<FactorIndex, KeySet>> newAffectedKeys{boost::none};
\n-
67
\n-
71 bool forceFullSolve{false};
\n-
72};
\n-
\n-
73
\n-
74} // namespace gtsam
\n-
A thin wrapper around std::list that uses boost's fast_pool_allocator.
\n-\n-
Class that stores detailed iSAM2 result.
\n+
\n+
45class GTSAM_EXPORT ShonanGaugeFactor : public NonlinearFactor {
\n+
46 // Row dimension, equal to the dimensionality of SO(p-d)
\n+
47 size_t rows_;
\n+
48
\n+
50 boost::shared_ptr<JacobianFactor> whitenedJacobian_;
\n+
51
\n+
52public:
\n+
\n+
58 ShonanGaugeFactor(Key key, size_t p, size_t d = 3,
\n+
59 boost::optional<double> gamma = boost::none)
\n+\n+
61 if (p < d) {
\n+
62 throw std::invalid_argument("ShonanGaugeFactor must have p>=d.");
\n+
63 }
\n+
64 // Calculate dimensions
\n+
65 size_t q = p - d;
\n+
66 size_t P = SOn::Dimension(p); // dimensionality of SO(p)
\n+
67 rows_ = SOn::Dimension(q); // dimensionality of SO(q), the gauge
\n+
68
\n+
69 // Create constant Jacobian as a rows_*P matrix: there are rows_ penalized
\n+
70 // dimensions, but it is a bit tricky to find them among the P columns.
\n+
71 // The key is to look at how skew-symmetric matrices are laid out in SOn.h:
\n+
72 // the first tangent dimension will always be included, but beyond that we
\n+
73 // have to be careful. We always need to skip the d top-rows of the skew-
\n+
74 // symmetric matrix as they below to K, part of the Stiefel manifold.
\n+
75 Matrix A(rows_, P);
\n+
76 A.setZero();
\n+
77 double invSigma = gamma ? std::sqrt(*gamma) : 1.0;
\n+
78 size_t i = 0, j = 0, n = p - 1 - d;
\n+
79 while (i < rows_) {
\n+
80 A.block(i, j, n, n) = invSigma * Matrix::Identity(n, n);
\n+
81 i += n;
\n+
82 j += n + d; // skip d columns
\n+
83 n -= 1;
\n+
84 }
\n+
85 // TODO(frank): assign the right one in the right columns
\n+
86 whitenedJacobian_ =
\n+
87 boost::make_shared<JacobianFactor>(key, A, Vector::Zero(rows_));
\n+
88 }
\n+
\n+
89
\n+
91 ~ShonanGaugeFactor() override {}
\n+
92
\n+
94 double error(const Values &c) const override { return 0; }
\n+
95
\n+
97 size_t dim() const override { return rows_; }
\n+
98
\n+
\n+
100 boost::shared_ptr<GaussianFactor> linearize(const Values &c) const override {
\n+
101 return whitenedJacobian_;
\n+
102 }
\n+
\n+
103};
\n+
\n+
104// \\ShonanGaugeFactor
\n+
105
\n+
106} // namespace gtsam
\n+
N*N matrix representation of SO(N).
\n+\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n-
This struct is used by ISAM2::update() to pass additional parameters to give the user a fine-grained ...
Definition ISAM2UpdateParams.h:32
\n-
boost::optional< FastMap< Key, int > > constrainedKeys
An optional map of keys to group labels, such that a variable can be constrained to a particular grou...
Definition ISAM2UpdateParams.h:40
\n-
bool force_relinearize
Relinearize any variables whose delta magnitude is sufficiently large (Params::relinearizeThreshold),...
Definition ISAM2UpdateParams.h:54
\n-
FactorIndices removeFactorIndices
Indices of factors to remove from system (default: empty)
Definition ISAM2UpdateParams.h:36
\n-
bool forceFullSolve
By default, iSAM2 uses a wildfire update scheme that stops updating when the deltas become too small ...
Definition ISAM2UpdateParams.h:71
\n-
boost::optional< FastList< Key > > extraReelimKeys
An optional set of nonlinear keys that iSAM2 will re-eliminate, regardless of the size of the linear ...
Definition ISAM2UpdateParams.h:49
\n-
boost::optional< FastList< Key > > noRelinKeys
An optional set of nonlinear keys that iSAM2 will hold at a constant linearization point,...
Definition ISAM2UpdateParams.h:44
\n-
boost::optional< FastMap< FactorIndex, KeySet > > newAffectedKeys
An optional set of new Keys that are now affected by factors, indexed by factor indices (as returned ...
Definition ISAM2UpdateParams.h:66
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
The ShonanGaugeFactor creates a constraint on a single SO(n) to avoid moving in the stabilizer.
Definition ShonanGaugeFactor.h:45
\n+
double error(const Values &c) const override
Calculate the error of the factor: always zero.
Definition ShonanGaugeFactor.h:94
\n+
~ShonanGaugeFactor() override
Destructor.
Definition ShonanGaugeFactor.h:91
\n+
boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override
linearize to a GaussianFactor
Definition ShonanGaugeFactor.h:100
\n+
size_t dim() const override
get the dimension of the factor (number of rows on linearization)
Definition ShonanGaugeFactor.h:97
\n+
ShonanGaugeFactor(Key key, size_t p, size_t d=3, boost::optional< double > gamma=boost::none)
Construct from key for an SO(p) matrix, for base dimension d (2 or 3) If parameter gamma is given,...
Definition ShonanGaugeFactor.h:58
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,102 +1,132 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-ISAM2UpdateParams.h\n+ShonanGaugeFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n-2 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-3 * Atlanta, Georgia 30332-0415\n-4 * All Rights Reserved\n-5 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n-6 * See LICENSE for the license information\n-7 * -------------------------------------------------------------------------\n+2\n+3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n+4 * Atlanta, Georgia 30332-0415\n+5 * All Rights Reserved\n+6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n+7\n+8 * See LICENSE for the license information\n+9\n+10 * -------------------------------------------------------------------------\n - */\n-8\n-15// \\callgraph\n-16\n-17#pragma once\n-18\n-19#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh>\n-20#include // GTSAM_EXPORT\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh> // Key, KeySet\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh> //FactorIndices\n-23#include \n+11\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\bn_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n 24\n 25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-_\b3_\b2struct _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs {\n-33 _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs() = default;\n-34\n-_\b3_\b6 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs _\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n-37\n-_\b4_\b0 boost::optional> _\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bK_\be_\by_\bs{boost::none};\n-41\n-_\b4_\b4 boost::optional> _\bn_\bo_\bR_\be_\bl_\bi_\bn_\bK_\be_\by_\bs{boost::none};\n-45\n-_\b4_\b9 boost::optional> _\be_\bx_\bt_\br_\ba_\bR_\be_\be_\bl_\bi_\bm_\bK_\be_\by_\bs{boost::none};\n-50\n-_\b5_\b4 bool _\bf_\bo_\br_\bc_\be_\b__\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be{false};\n-55\n-_\b6_\b6 boost::optional> _\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs{boost::none};\n-67\n-_\b7_\b1 bool _\bf_\bo_\br_\bc_\be_\bF_\bu_\bl_\bl_\bS_\bo_\bl_\bv_\be{false};\n-72};\n-73\n-74} // namespace gtsam\n-_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n-A thin wrapper around std::list that uses boost's fast_pool_allocator.\n-_\bK_\be_\by_\b._\bh\n-_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh\n-Class that stores detailed iSAM2 result.\n+_\b4_\b5class GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n+46 // Row dimension, equal to the dimensionality of SO(p-d)\n+47 size_t rows_;\n+48\n+50 boost::shared_ptr whitenedJacobian_;\n+51\n+52public:\n+_\b5_\b8 _\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key, size_t p, size_t d = 3,\n+59 boost::optional gamma = boost::none)\n+60 : _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br{key}) {\n+61 if (p < d) {\n+62 throw std::invalid_argument(\"ShonanGaugeFactor must have p>=d.\");\n+63 }\n+64 // Calculate dimensions\n+65 size_t q = p - d;\n+66 size_t P = SOn::Dimension(p); // dimensionality of SO(p)\n+67 rows_ = SOn::Dimension(q); // dimensionality of SO(q), the gauge\n+68\n+69 // Create constant Jacobian as a rows_*P matrix: there are rows_ penalized\n+70 // dimensions, but it is a bit tricky to find them among the P columns.\n+71 // The key is to look at how skew-symmetric matrices are laid out in SOn.h:\n+72 // the first tangent dimension will always be included, but beyond that we\n+73 // have to be careful. We always need to skip the d top-rows of the skew-\n+74 // symmetric matrix as they below to K, part of the Stiefel manifold.\n+75 Matrix A(rows_, P);\n+76 A.setZero();\n+77 double invSigma = gamma ? std::sqrt(*gamma) : 1.0;\n+78 size_t i = 0, j = 0, n = p - 1 - d;\n+79 while (i < rows_) {\n+80 A.block(i, j, n, n) = invSigma * Matrix::Identity(n, n);\n+81 i += n;\n+82 j += n + d; // skip d columns\n+83 n -= 1;\n+84 }\n+85 // TODO(frank): assign the right one in the right columns\n+86 whitenedJacobian_ =\n+87 boost::make_shared(key, A, Vector::Zero(rows_));\n+88 }\n+89\n+_\b9_\b1 _\b~_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+92\n+_\b9_\b4 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs &c) const override { return 0; }\n+95\n+_\b9_\b7 size_t _\bd_\bi_\bm() const override { return rows_; }\n+98\n+_\b1_\b0_\b0 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs &c) const override\n+{\n+101 return whitenedJacobian_;\n+102 }\n+103};\n+104// \\ShonanGaugeFactor\n+105\n+106} // namespace gtsam\n+_\bS_\bO_\bn_\b._\bh\n+N*N matrix representation of SO(N).\n+_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-FastVector< FactorIndex > FactorIndices\n-Define collection types:\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs\n-This struct is used by ISAM2::update() to pass additional parameters to give\n-the user a fine-grained ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bK_\be_\by_\bs\n-boost::optional< FastMap< Key, int > > constrainedKeys\n-An optional map of keys to group labels, such that a variable can be\n-constrained to a particular grou...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bf_\bo_\br_\bc_\be_\b__\br_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-bool force_relinearize\n-Relinearize any variables whose delta magnitude is sufficiently large (Params::\n-relinearizeThreshold),...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:54\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\br_\be_\bm_\bo_\bv_\be_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-FactorIndices removeFactorIndices\n-Indices of factors to remove from system (default: empty)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bf_\bo_\br_\bc_\be_\bF_\bu_\bl_\bl_\bS_\bo_\bl_\bv_\be\n-bool forceFullSolve\n-By default, iSAM2 uses a wildfire update scheme that stops updating when the\n-deltas become too small ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\be_\bx_\bt_\br_\ba_\bR_\be_\be_\bl_\bi_\bm_\bK_\be_\by_\bs\n-boost::optional< FastList< Key > > extraReelimKeys\n-An optional set of nonlinear keys that iSAM2 will re-eliminate, regardless of\n-the size of the linear ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:49\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bn_\bo_\bR_\be_\bl_\bi_\bn_\bK_\be_\by_\bs\n-boost::optional< FastList< Key > > noRelinKeys\n-An optional set of nonlinear keys that iSAM2 will hold at a constant\n-linearization point,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b:_\b:_\bn_\be_\bw_\bA_\bf_\bf_\be_\bc_\bt_\be_\bd_\bK_\be_\by_\bs\n-boost::optional< FastMap< FactorIndex, KeySet > > newAffectedKeys\n-An optional set of new Keys that are now affected by factors, indexed by factor\n-indices (as returned ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2UpdateParams.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n+Nonlinear factor base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br\n+The ShonanGaugeFactor creates a constraint on a single SO(n) to avoid moving in\n+the stabilizer.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:45\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n+double error(const Values &c) const override\n+Calculate the error of the factor: always zero.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:94\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br\n+~ShonanGaugeFactor() override\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n+boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override\n+linearize to a GaussianFactor\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+get the dimension of the factor (number of rows on linearization)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br\n+ShonanGaugeFactor(Key key, size_t p, size_t d=3, boost::optional< double >\n+gamma=boost::none)\n+Construct from key for an SO(p) matrix, for base dimension d (2 or 3) If\n+parameter gamma is given,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanGaugeFactor.h:58\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n- * _\bI_\bS_\bA_\bM_\b2_\bU_\bp_\bd_\ba_\bt_\be_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+ * _\bs_\bf_\bm\n+ * _\bS_\bh_\bo_\bn_\ba_\bn_\bG_\ba_\bu_\bg_\be_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01199_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00506_source.html", "comments": ["Files 88% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmData.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridNonlinearISAM.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SfmData.h
\n+
HybridNonlinearISAM.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-\n-
25#include <gtsam/sfm/SfmTrack.h>
\n-
26
\n-
27#include <string>
\n-
28#include <vector>
\n-
29
\n-
30namespace gtsam {
\n+
18#pragma once
\n+
19
\n+\n+\n+
22
\n+
23namespace gtsam {
\n+
\n+
27class GTSAM_EXPORT HybridNonlinearISAM {
\n+
28 protected:
\n+\n
31
\n-\n+\n
34
\n-
\n-
39struct GTSAM_EXPORT SfmData {
\n-
40 std::vector<SfmCamera> cameras;
\n-
41
\n-
42 std::vector<SfmTrack> tracks;
\n-
43
\n-
46
\n-
53 static SfmData FromBundlerFile(const std::string& filename);
\n-
54
\n-
61 static SfmData FromBalFile(const std::string& filename);
\n-
62
\n+\n+
37
\n+\n+
40
\n+\n+
43 int reorderCounter_;
\n+
44
\n+\n+
47
\n+
48 public:
\n+
51
\n+
\n+\n+
60 int reorderInterval = 1,
\n+
61 const HybridGaussianFactorGraph::Eliminate& eliminationFunction =
\n+
62 HybridGaussianFactorGraph::EliminationTraitsType::DefaultEliminate)
\n+
63 : reorderInterval_(reorderInterval),
\n+
64 reorderCounter_(0),
\n+
65 eliminationFunction_(eliminationFunction) {}
\n+
\n
66
\n-
68 void addTrack(const SfmTrack& t) { tracks.push_back(t); }
\n-
69
\n-
71 void addCamera(const SfmCamera& cam) { cameras.push_back(cam); }
\n-
72
\n-
74 size_t numberTracks() const { return tracks.size(); }
\n-
75
\n-
77 size_t numberCameras() const { return cameras.size(); }
\n+
70
\n+
72 Values estimate();
\n+
73
\n+
74 // /** find the marginal covariance for a single variable */
\n+
75 // Matrix marginalCovariance(Key key) const;
\n+
76
\n+
77 // access
\n
78
\n-
80 const SfmTrack& track(size_t idx) const { return tracks[idx]; }
\n+
80 const HybridGaussianISAM& bayesTree() const { return isam_; }
\n
81
\n-
83 const SfmCamera& camera(size_t idx) const { return cameras[idx]; }
\n-
84
\n-
86 const std::vector<SfmCamera>& cameraList() const { return cameras; }
\n-
87 const std::vector<SfmTrack>& trackList() const { return tracks; }
\n+
87 void prune(const size_t maxNumberLeaves) { isam_.prune(maxNumberLeaves); }
\n
88
\n-
95 NonlinearFactorGraph generalSfmFactors(
\n-
96 const SharedNoiseModel& model = noiseModel::Isotropic::Sigma(2,
\n-
97 1.0)) const;
\n-
98
\n-
109 NonlinearFactorGraph sfmFactorGraph(
\n-
110 const SharedNoiseModel& model = noiseModel::Isotropic::Sigma(2, 1.0),
\n-
111 boost::optional<size_t> fixedCamera = 0,
\n-
112 boost::optional<size_t> fixedPoint = 0) const;
\n-
113
\n-
117
\n-
119 void print(const std::string& s = "") const;
\n-
120
\n-
122 bool equals(const SfmData& sfmData, double tol = 1e-9) const;
\n-
123
\n-
125#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
128 void GTSAM_DEPRECATED add_track(const SfmTrack& t) { tracks.push_back(t); }
\n-
129 void GTSAM_DEPRECATED add_camera(const SfmCamera& cam) {
\n-
130 cameras.push_back(cam);
\n-
131 }
\n-
132 size_t GTSAM_DEPRECATED number_tracks() const { return tracks.size(); }
\n-
133 size_t GTSAM_DEPRECATED number_cameras() const { return cameras.size(); }
\n-
135#endif
\n-
138
\n-
140 friend class boost::serialization::access;
\n-
141 template <class Archive>
\n-
142 void serialize(Archive& ar, const unsigned int /*version*/) {
\n-
143 ar& BOOST_SERIALIZATION_NVP(cameras);
\n-
144 ar& BOOST_SERIALIZATION_NVP(tracks);
\n-
145 }
\n-
146
\n-
148};
\n-
\n-
149
\n-
151template <>
\n-
152struct traits<SfmData> : public Testable<SfmData> {};
\n-
153
\n-
154#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
155GTSAM_EXPORT bool GTSAM_DEPRECATED readBundler(const std::string& filename,
\n-
156 SfmData& data);
\n-
157GTSAM_EXPORT bool GTSAM_DEPRECATED readBAL(const std::string& filename,
\n-
158 SfmData& data);
\n-
159#endif
\n-
160
\n-
167GTSAM_EXPORT SfmData readBal(const std::string& filename);
\n-
168
\n-
176GTSAM_EXPORT bool writeBAL(const std::string& filename, const SfmData& data);
\n-
177
\n-
190GTSAM_EXPORT bool writeBALfromValues(const std::string& filename,
\n-
191 const SfmData& data, const Values& values);
\n-
192
\n-
201GTSAM_EXPORT Pose3 openGL2gtsam(const Rot3& R, double tx, double ty, double tz);
\n-
202
\n-
211GTSAM_EXPORT Pose3 gtsam2openGL(const Rot3& R, double tx, double ty, double tz);
\n-
212
\n-
218GTSAM_EXPORT Pose3 gtsam2openGL(const Pose3& PoseGTSAM);
\n-
219
\n-
228GTSAM_EXPORT Values initialCamerasEstimate(const SfmData& db);
\n-
229
\n-
238GTSAM_EXPORT Values initialCamerasAndPointsEstimate(const SfmData& db);
\n-
239
\n-
240} // namespace gtsam
\n-
Base class for all pinhole cameras.
\n-
Calibration used by Bundler.
\n-
A non-templated config holding any types of Manifold-group elements.
\n-
Factor Graph consisting of non-linear factors.
\n-
A simple data structure for a track in Structure from Motion.
\n+
90 const Values& getLinearizationPoint() const { return linPoint_; }
\n+
91
\n+
93 const DiscreteValues& assignment() const { return assignment_; }
\n+
94
\n+
\n+\n+
97 return factors_;
\n+
98 }
\n+
\n+
99
\n+
101 int reorderInterval() const { return reorderInterval_; }
\n+
\n+
102 int reorderCounter() const { return reorderCounter_; }
\n+
103
\n+
105 void print(const std::string& s = "",
\n+
106 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
107
\n+
109 void printStats() const;
\n+
110
\n+
112 void saveGraph(const std::string& s,
\n+
113 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const;
\n+
114
\n+
118
\n+
120 void update(const HybridNonlinearFactorGraph& newFactors,
\n+
121 const Values& initialValues,
\n+
122 const boost::optional<size_t>& maxNrLeaves = boost::none,
\n+
123 const boost::optional<Ordering>& ordering = boost::none);
\n+
124
\n+
126 void reorder_relinearize();
\n+
127
\n+
129};
\n+
130
\n+
131} // namespace gtsam
\n+
\n+
\n+
Nonlinear hybrid factor graph that uses type erasure.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
bool writeBAL(const std::string &filename, const SfmData &data)
This function writes a "Bundle Adjustment in the Large" (BAL) file from a SfmData structure.
Definition SfmData.cpp:249
\n-
bool writeBALfromValues(const std::string &filename, const SfmData &data, const Values &values)
This function writes a "Bundle Adjustment in the Large" (BAL) file from a SfmData structure and a val...
Definition SfmData.cpp:349
\n-
SfmData readBal(const std::string &filename)
This function parses a "Bundle Adjustment in the Large" (BAL) file and returns the data as a SfmData ...
Definition SfmData.cpp:344
\n-
Pose3 gtsam2openGL(const Rot3 &R, double tx, double ty, double tz)
This function converts a GTSAM camera pose to an openGL camera pose.
Definition SfmData.cpp:88
\n-
Values initialCamerasAndPointsEstimate(const SfmData &db)
This function creates initial values for cameras and points from db.
Definition SfmData.cpp:449
\n-
PinholeCamera< Cal3Bundler > SfmCamera
Define the structure for the camera poses.
Definition SfmData.h:33
\n-
Values initialCamerasEstimate(const SfmData &db)
This function creates initial values for cameras from db.
Definition SfmData.cpp:441
\n-
Pose3 openGL2gtsam(const Rot3 &R, double tx, double ty, double tz)
This function converts an openGL camera pose to an GTSAM camera pose.
Definition SfmData.cpp:79
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A pinhole camera class that has a Pose3 and a Calibration.
Definition PinholeCamera.h:33
\n-
A 3D pose (R,t) : (Rot3,Point3)
Definition Pose3.h:37
\n-
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
A map from keys to values.
Definition DiscreteValues.h:34
\n+
void prune(const size_t maxNumberLeaves)
Prune the underlying Bayes tree.
Definition HybridBayesTree.cpp:175
\n+
Definition HybridGaussianISAM.h:34
\n+
Definition HybridNonlinearFactorGraph.h:33
\n+
Wrapper class to manage ISAM in a nonlinear context.
Definition HybridNonlinearISAM.h:27
\n+
const HybridNonlinearFactorGraph & getFactorsUnsafe() const
get underlying nonlinear graph
Definition HybridNonlinearISAM.h:96
\n+
DiscreteValues assignment_
The discrete assignment.
Definition HybridNonlinearISAM.h:36
\n+
const Values & getLinearizationPoint() const
Return the current linearization point.
Definition HybridNonlinearISAM.h:90
\n+
HybridNonlinearISAM(int reorderInterval=1, const HybridGaussianFactorGraph::Eliminate &eliminationFunction=HybridGaussianFactorGraph::EliminationTraitsType::DefaultEliminate)
Periodically reorder and relinearize.
Definition HybridNonlinearISAM.h:59
\n+
HybridNonlinearFactorGraph factors_
The original factors, used when relinearizing.
Definition HybridNonlinearISAM.h:39
\n+
const DiscreteValues & assignment() const
Return the current discrete assignment.
Definition HybridNonlinearISAM.h:93
\n+
int reorderCounter() const
TODO: comment.
Definition HybridNonlinearISAM.h:102
\n+
void prune(const size_t maxNumberLeaves)
Prune the underlying Bayes tree.
Definition HybridNonlinearISAM.h:87
\n+
int reorderInterval_
The reordering interval and counter.
Definition HybridNonlinearISAM.h:42
\n+
int reorderInterval() const
get counters
Definition HybridNonlinearISAM.h:101
\n+
Values linPoint_
The current linearization point.
Definition HybridNonlinearISAM.h:33
\n+
gtsam::HybridGaussianISAM isam_
The internal iSAM object.
Definition HybridNonlinearISAM.h:30
\n+
HybridGaussianFactorGraph::Eliminate eliminationFunction_
The elimination function.
Definition HybridNonlinearISAM.h:46
\n+
const HybridGaussianISAM & bayesTree() const
access the underlying bayes tree
Definition HybridNonlinearISAM.h:80
\n+
std::function< EliminationResult(const FactorGraphType &, const Ordering &)> Eliminate
The function type that does a single dense elimination step on a subgraph.
Definition EliminateableFactorGraph.h:89
\n
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
SfmData stores a bunch of SfmTracks.
Definition SfmData.h:39
\n-
const std::vector< SfmCamera > & cameraList() const
Getters.
Definition SfmData.h:86
\n-
void addCamera(const SfmCamera &cam)
Add a camera to SfmData.
Definition SfmData.h:71
\n-
size_t numberCameras() const
The number of cameras.
Definition SfmData.h:77
\n-
size_t numberTracks() const
The number of reconstructed 3D points.
Definition SfmData.h:74
\n-
const SfmTrack & track(size_t idx) const
The track formed by series of landmark measurements.
Definition SfmData.h:80
\n-
void addTrack(const SfmTrack &t)
Add a track to SfmData.
Definition SfmData.h:68
\n-
const SfmCamera & camera(size_t idx) const
The camera pose at frame index idx
Definition SfmData.h:83
\n-
std::vector< SfmCamera > cameras
Set of cameras.
Definition SfmData.h:40
\n-
std::vector< SfmTrack > tracks
Sparse set of points.
Definition SfmData.h:42
\n-
Definition SfmTrack.h:126
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,238 +1,191 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SfmData.h\n+HybridNonlinearISAM.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh>\n-26\n-27#include \n-28#include \n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n+18#pragma once\n+19\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+_\b2_\b7class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM {\n+28 protected:\n+_\b3_\b0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM _\bi_\bs_\ba_\bm_\b_;\n 31\n-_\b3_\b3typedef _\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b<_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b> _\bS_\bf_\bm_\bC_\ba_\bm_\be_\br_\ba;\n+_\b3_\b3 _\bV_\ba_\bl_\bu_\be_\bs _\bl_\bi_\bn_\bP_\bo_\bi_\bn_\bt_\b_;\n 34\n-_\b3_\b9struct GTSAM_EXPORT _\bS_\bf_\bm_\bD_\ba_\bt_\ba {\n-_\b4_\b0 std::vector _\bc_\ba_\bm_\be_\br_\ba_\bs;\n-41\n-_\b4_\b2 std::vector _\bt_\br_\ba_\bc_\bk_\bs;\n-43\n-46\n-53 static _\bS_\bf_\bm_\bD_\ba_\bt_\ba FromBundlerFile(const std::string& filename);\n-54\n-61 static _\bS_\bf_\bm_\bD_\ba_\bt_\ba FromBalFile(const std::string& filename);\n-62\n+_\b3_\b6 _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs _\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b_;\n+37\n+_\b3_\b9 _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_;\n+40\n+_\b4_\b2 int _\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\b_;\n+43 int reorderCounter_;\n+44\n+_\b4_\b6 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be _\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_;\n+47\n+48 public:\n+51\n+_\b5_\b9 _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM(\n+60 int reorderInterval = 1,\n+61 const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be& eliminationFunction =\n+62 HybridGaussianFactorGraph::EliminationTraitsType::DefaultEliminate)\n+63 : reorderInterval_(reorderInterval),\n+64 reorderCounter_(0),\n+65 eliminationFunction_(eliminationFunction) {}\n 66\n-_\b6_\b8 void _\ba_\bd_\bd_\bT_\br_\ba_\bc_\bk(const _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk& t) { tracks.push_back(t); }\n-69\n-_\b7_\b1 void _\ba_\bd_\bd_\bC_\ba_\bm_\be_\br_\ba(const _\bS_\bf_\bm_\bC_\ba_\bm_\be_\br_\ba& cam) { cameras.push_back(cam); }\n-72\n-_\b7_\b4 size_t _\bn_\bu_\bm_\bb_\be_\br_\bT_\br_\ba_\bc_\bk_\bs() const { return tracks.size(); }\n-75\n-_\b7_\b7 size_t _\bn_\bu_\bm_\bb_\be_\br_\bC_\ba_\bm_\be_\br_\ba_\bs() const { return cameras.size(); }\n+70\n+72 _\bV_\ba_\bl_\bu_\be_\bs estimate();\n+73\n+74 // /** find the marginal covariance for a single variable */\n+75 // Matrix marginalCovariance(Key key) const;\n+76\n+77 // access\n 78\n-_\b8_\b0 const _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk& _\bt_\br_\ba_\bc_\bk(size_t idx) const { return tracks[idx]; }\n+_\b8_\b0 const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM& _\bb_\ba_\by_\be_\bs_\bT_\br_\be_\be() const { return isam_; }\n 81\n-_\b8_\b3 const _\bS_\bf_\bm_\bC_\ba_\bm_\be_\br_\ba& _\bc_\ba_\bm_\be_\br_\ba(size_t idx) const { return cameras[idx]; }\n-84\n-_\b8_\b6 const std::vector& _\bc_\ba_\bm_\be_\br_\ba_\bL_\bi_\bs_\bt() const { return cameras; }\n-87 const std::vector& trackList() const { return tracks; }\n+_\b8_\b7 void _\bp_\br_\bu_\bn_\be(const size_t maxNumberLeaves) { isam_._\bp_\br_\bu_\bn_\be(maxNumberLeaves); }\n 88\n-95 NonlinearFactorGraph generalSfmFactors(\n-96 const SharedNoiseModel& model = noiseModel::Isotropic::Sigma(2,\n-97 1.0)) const;\n-98\n-109 NonlinearFactorGraph sfmFactorGraph(\n-110 const SharedNoiseModel& model = noiseModel::Isotropic::Sigma(2, 1.0),\n-111 boost::optional fixedCamera = 0,\n-112 boost::optional fixedPoint = 0) const;\n-113\n-117\n-119 void print(const std::string& s = \"\") const;\n-120\n-122 bool equals(const SfmData& sfmData, double tol = 1e-9) const;\n-123\n-125#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-128 void GTSAM_DEPRECATED add_track(const SfmTrack& t) { tracks.push_back(t); }\n-129 void GTSAM_DEPRECATED add_camera(const SfmCamera& cam) {\n-130 cameras.push_back(cam);\n-131 }\n-132 size_t GTSAM_DEPRECATED number_tracks() const { return tracks.size(); }\n-133 size_t GTSAM_DEPRECATED number_cameras() const { return cameras.size(); }\n-135#endif\n-138\n-_\b1_\b4_\b0 friend class boost::serialization::access;\n-141 template \n-142 void serialize(Archive& ar, const unsigned int /*version*/) {\n-143 ar& BOOST_SERIALIZATION_NVP(cameras);\n-144 ar& BOOST_SERIALIZATION_NVP(tracks);\n-145 }\n-146\n-148};\n-149\n-151template <>\n-_\b1_\b5_\b2struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bf_\bm_\bD_\ba_\bt_\ba> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-153\n-154#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-155GTSAM_EXPORT bool GTSAM_DEPRECATED readBundler(const std::string& filename,\n-156 _\bS_\bf_\bm_\bD_\ba_\bt_\ba& data);\n-157GTSAM_EXPORT bool GTSAM_DEPRECATED readBAL(const std::string& filename,\n-158 _\bS_\bf_\bm_\bD_\ba_\bt_\ba& data);\n-159#endif\n-160\n-167GTSAM_EXPORT _\bS_\bf_\bm_\bD_\ba_\bt_\ba _\br_\be_\ba_\bd_\bB_\ba_\bl(const std::string& filename);\n-168\n-176GTSAM_EXPORT bool _\bw_\br_\bi_\bt_\be_\bB_\bA_\bL(const std::string& filename, const _\bS_\bf_\bm_\bD_\ba_\bt_\ba&\n-data);\n-177\n-190GTSAM_EXPORT bool _\bw_\br_\bi_\bt_\be_\bB_\bA_\bL_\bf_\br_\bo_\bm_\bV_\ba_\bl_\bu_\be_\bs(const std::string& filename,\n-191 const _\bS_\bf_\bm_\bD_\ba_\bt_\ba& data, const _\bV_\ba_\bl_\bu_\be_\bs& values);\n-192\n-201GTSAM_EXPORT _\bP_\bo_\bs_\be_\b3 _\bo_\bp_\be_\bn_\bG_\bL_\b2_\bg_\bt_\bs_\ba_\bm(const _\bR_\bo_\bt_\b3& R, double tx, double ty, double\n-tz);\n-202\n-211GTSAM_EXPORT _\bP_\bo_\bs_\be_\b3 _\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL(const _\bR_\bo_\bt_\b3& R, double tx, double ty, double\n-tz);\n-212\n-218GTSAM_EXPORT _\bP_\bo_\bs_\be_\b3 _\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL(const _\bP_\bo_\bs_\be_\b3& PoseGTSAM);\n-219\n-228GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bs _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be(const _\bS_\bf_\bm_\bD_\ba_\bt_\ba& db);\n-229\n-238GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bs _\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bA_\bn_\bd_\bP_\bo_\bi_\bn_\bt_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be(const _\bS_\bf_\bm_\bD_\ba_\bt_\ba& db);\n-239\n-240} // namespace gtsam\n-_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba_\b._\bh\n-Base class for all pinhole cameras.\n-_\bC_\ba_\bl_\b3_\bB_\bu_\bn_\bd_\bl_\be_\br_\b._\bh\n-Calibration used by Bundler.\n-_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-A non-templated config holding any types of Manifold-group elements.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n-_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh\n-A simple data structure for a track in Structure from Motion.\n+_\b9_\b0 const _\bV_\ba_\bl_\bu_\be_\bs& _\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt() const { return linPoint_; }\n+91\n+_\b9_\b3 const _\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs& _\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt() const { return assignment_; }\n+94\n+_\b9_\b6 const _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be() const {\n+97 return factors_;\n+98 }\n+99\n+_\b1_\b0_\b1 int _\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl() const { return reorderInterval_; }\n+_\b1_\b0_\b2 int _\br_\be_\bo_\br_\bd_\be_\br_\bC_\bo_\bu_\bn_\bt_\be_\br() const { return reorderCounter_; }\n+103\n+105 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\",\n+106 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+107\n+109 void printStats() const;\n+110\n+112 void saveGraph(const std::string& s,\n+113 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const;\n+114\n+118\n+120 void update(const _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n+121 const _\bV_\ba_\bl_\bu_\be_\bs& initialValues,\n+122 const boost::optional& maxNrLeaves = boost::none,\n+123 const boost::optional& ordering = boost::none);\n+124\n+126 void reorder_relinearize();\n+127\n+129};\n+130\n+131} // namespace gtsam\n+_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Nonlinear hybrid factor graph that uses type erasure.\n+_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bB_\bA_\bL\n-bool writeBAL(const std::string &filename, const SfmData &data)\n-This function writes a \"Bundle Adjustment in the Large\" (BAL) file from a\n-SfmData structure.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:249\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bw_\br_\bi_\bt_\be_\bB_\bA_\bL_\bf_\br_\bo_\bm_\bV_\ba_\bl_\bu_\be_\bs\n-bool writeBALfromValues(const std::string &filename, const SfmData &data, const\n-Values &values)\n-This function writes a \"Bundle Adjustment in the Large\" (BAL) file from a\n-SfmData structure and a val...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:349\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\br_\be_\ba_\bd_\bB_\ba_\bl\n-SfmData readBal(const std::string &filename)\n-This function parses a \"Bundle Adjustment in the Large\" (BAL) file and returns\n-the data as a SfmData ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:344\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\ba_\bm_\b2_\bo_\bp_\be_\bn_\bG_\bL\n-Pose3 gtsam2openGL(const Rot3 &R, double tx, double ty, double tz)\n-This function converts a GTSAM camera pose to an openGL camera pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bA_\bn_\bd_\bP_\bo_\bi_\bn_\bt_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be\n-Values initialCamerasAndPointsEstimate(const SfmData &db)\n-This function creates initial values for cameras and points from db.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:449\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bC_\ba_\bm_\be_\br_\ba\n-PinholeCamera< Cal3Bundler > SfmCamera\n-Define the structure for the camera poses.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bi_\bt_\bi_\ba_\bl_\bC_\ba_\bm_\be_\br_\ba_\bs_\bE_\bs_\bt_\bi_\bm_\ba_\bt_\be\n-Values initialCamerasEstimate(const SfmData &db)\n-This function creates initial values for cameras from db.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:441\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\bn_\bG_\bL_\b2_\bg_\bt_\bs_\ba_\bm\n-Pose3 openGL2gtsam(const Rot3 &R, double tx, double ty, double tz)\n-This function converts an openGL camera pose to an GTSAM camera pose.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.cpp:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bi_\bn_\bh_\bo_\bl_\be_\bC_\ba_\bm_\be_\br_\ba\n-A pinhole camera class that has a Pose3 and a Calibration.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn PinholeCamera.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bs_\be_\b3\n-A 3D pose (R,t) : (Rot3,Point3)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Pose3.h:37\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n-symbol GTSAM_USE_QUATERNIO...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\bi_\bs_\bc_\br_\be_\bt_\be_\bV_\ba_\bl_\bu_\be_\bs\n+A map from keys to values.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DiscreteValues.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bp_\br_\bu_\bn_\be\n+void prune(const size_t maxNumberLeaves)\n+Prune the underlying Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.cpp:175\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianISAM.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearFactorGraph.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n+Wrapper class to manage ISAM in a nonlinear context.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bg_\be_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bU_\bn_\bs_\ba_\bf_\be\n+const HybridNonlinearFactorGraph & getFactorsUnsafe() const\n+get underlying nonlinear graph\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:96\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt_\b_\n+DiscreteValues assignment_\n+The discrete assignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bg_\be_\bt_\bL_\bi_\bn_\be_\ba_\br_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\bP_\bo_\bi_\bn_\bt\n+const Values & getLinearizationPoint() const\n+Return the current linearization point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:90\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM\n+HybridNonlinearISAM(int reorderInterval=1, const HybridGaussianFactorGraph::\n+Eliminate &eliminationFunction=HybridGaussianFactorGraph::\n+EliminationTraitsType::DefaultEliminate)\n+Periodically reorder and relinearize.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:59\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs_\b_\n+HybridNonlinearFactorGraph factors_\n+The original factors, used when relinearizing.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\ba_\bs_\bs_\bi_\bg_\bn_\bm_\be_\bn_\bt\n+const DiscreteValues & assignment() const\n+Return the current discrete assignment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:93\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bC_\bo_\bu_\bn_\bt_\be_\br\n+int reorderCounter() const\n+TODO: comment.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bp_\br_\bu_\bn_\be\n+void prune(const size_t maxNumberLeaves)\n+Prune the underlying Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl_\b_\n+int reorderInterval_\n+The reordering interval and counter.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\br_\be_\bo_\br_\bd_\be_\br_\bI_\bn_\bt_\be_\br_\bv_\ba_\bl\n+int reorderInterval() const\n+get counters\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:101\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bl_\bi_\bn_\bP_\bo_\bi_\bn_\bt_\b_\n+Values linPoint_\n+The current linearization point.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:33\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bi_\bs_\ba_\bm_\b_\n+gtsam::HybridGaussianISAM isam_\n+The internal iSAM object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bF_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b_\n+HybridGaussianFactorGraph::Eliminate eliminationFunction_\n+The elimination function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b:_\b:_\bb_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+const HybridGaussianISAM & bayesTree() const\n+access the underlying bayes tree\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridNonlinearISAM.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\b _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n+std::function< EliminationResult(const FactorGraphType &, const Ordering &)>\n+Eliminate\n+The function type that does a single dense elimination step on a subgraph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:89\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n A non-templated config holding any types of Manifold-group elements.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba\n-SfmData stores a bunch of SfmTracks.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bL_\bi_\bs_\bt\n-const std::vector< SfmCamera > & cameraList() const\n-Getters.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\ba_\bd_\bd_\bC_\ba_\bm_\be_\br_\ba\n-void addCamera(const SfmCamera &cam)\n-Add a camera to SfmData.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:71\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bn_\bu_\bm_\bb_\be_\br_\bC_\ba_\bm_\be_\br_\ba_\bs\n-size_t numberCameras() const\n-The number of cameras.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:77\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bn_\bu_\bm_\bb_\be_\br_\bT_\br_\ba_\bc_\bk_\bs\n-size_t numberTracks() const\n-The number of reconstructed 3D points.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bt_\br_\ba_\bc_\bk\n-const SfmTrack & track(size_t idx) const\n-The track formed by series of landmark measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\ba_\bd_\bd_\bT_\br_\ba_\bc_\bk\n-void addTrack(const SfmTrack &t)\n-Add a track to SfmData.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba\n-const SfmCamera & camera(size_t idx) const\n-The camera pose at frame index idx\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:83\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bc_\ba_\bm_\be_\br_\ba_\bs\n-std::vector< SfmCamera > cameras\n-Set of cameras.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b:_\b:_\bt_\br_\ba_\bc_\bk_\bs\n-std::vector< SfmTrack > tracks\n-Sparse set of points.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmData.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:126\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\bf_\bm\n- * _\bS_\bf_\bm_\bD_\ba_\bt_\ba_\b._\bh\n+ * _\bh_\by_\bb_\br_\bi_\bd\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bI_\bS_\bA_\bM_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01220.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01202.js", "comments": ["Files 74% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,10 +1,12 @@\n-var a01220 = [\n- [\"gtsam2openGL\", \"a01220.html#ad632ed56581bf174eef379bbe272a06a\", null],\n- [\"gtsam2openGL\", \"a01220.html#aaff07ef70e6161c4d1d2bd7546ff91e6\", null],\n- [\"initialCamerasAndPointsEstimate\", \"a01220.html#aba34ed4a103d9057536ee5cac27cfdef\", null],\n- [\"initialCamerasEstimate\", \"a01220.html#ad8b55993353cbab0fde06b872783fe92\", null],\n- [\"openGL2gtsam\", \"a01220.html#ade6eca65dc0168a65f641961ca97924c\", null],\n- [\"readBal\", \"a01220.html#a710ec0322f4a2c0883841b58516b7a6a\", null],\n- [\"writeBAL\", \"a01220.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\", null],\n- [\"writeBALfromValues\", \"a01220.html#a4a2433812cf34ee359e3ec99f4f5bcc4\", null]\n+var a01202 = [\n+ [\"gtsam::traits< SfmData >\", \"a04708.html\", null],\n+ [\"SfmCamera\", \"a01202.html#acab0207730cf78822bdf274b50739d31\", null],\n+ [\"gtsam2openGL\", \"a01202.html#ad632ed56581bf174eef379bbe272a06a\", null],\n+ [\"gtsam2openGL\", \"a01202.html#aaff07ef70e6161c4d1d2bd7546ff91e6\", null],\n+ [\"initialCamerasAndPointsEstimate\", \"a01202.html#aba34ed4a103d9057536ee5cac27cfdef\", null],\n+ [\"initialCamerasEstimate\", \"a01202.html#ad8b55993353cbab0fde06b872783fe92\", null],\n+ [\"openGL2gtsam\", \"a01202.html#ade6eca65dc0168a65f641961ca97924c\", null],\n+ [\"readBal\", \"a01202.html#a710ec0322f4a2c0883841b58516b7a6a\", null],\n+ [\"writeBAL\", \"a01202.html#a43c2c2ead4fddd79d9c3f9a5bfa764ae\", null],\n+ [\"writeBALfromValues\", \"a01202.html#a4a2433812cf34ee359e3ec99f4f5bcc4\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01226_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01373_source.html", "comments": ["Files 84% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/SfmTrack.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesNet.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SfmTrack.h
\n+
SymbolicBayesNet.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
19#pragma once
\n
20
\n-\n-\n-\n-
24
\n-
25#include <Eigen/Core>
\n-
26#include <string>
\n-
27#include <utility>
\n-
28#include <vector>
\n-
29
\n-
30namespace gtsam {
\n-
31
\n-
33typedef std::pair<size_t, Point2> SfmMeasurement;
\n-
34
\n-
36typedef std::pair<size_t, size_t> SiftIndex;
\n-
37
\n-
\n-
43struct GTSAM_EXPORT SfmTrack2d {
\n-
45 std::vector<SfmMeasurement> measurements;
\n-
46
\n-
48 std::vector<SiftIndex> siftIndices;
\n-
49
\n-
52
\n-
53 // Default constructor.
\n-
54 SfmTrack2d() = default;
\n-
55
\n-
56 // Constructor from measurements.
\n-
57 explicit SfmTrack2d(const std::vector<SfmMeasurement>& measurements)
\n-
58 : measurements(measurements) {}
\n-
59
\n-
63
\n-
\n-
65 void addMeasurement(size_t idx, const gtsam::Point2& m) {
\n-
66 measurements.emplace_back(idx, m);
\n-
67 }
\n-
\n-
68
\n-
70 size_t numberMeasurements() const { return measurements.size(); }
\n-
71
\n-
\n-
73 const SfmMeasurement& measurement(size_t idx) const {
\n-
74 return measurements[idx];
\n-
75 }
\n-
\n-
76
\n-
78 const SiftIndex& siftIndex(size_t idx) const { return siftIndices[idx]; }
\n-
79
\n-
\n-
84 bool hasUniqueCameras() const {
\n-
85 std::vector<int> track_cam_indices;
\n-
86 for (auto& measurement : measurements) {
\n-
87 track_cam_indices.emplace_back(measurement.first);
\n-
88 }
\n-
89 auto i =
\n-
90 std::adjacent_find(track_cam_indices.begin(), track_cam_indices.end());
\n-
91 bool all_cameras_unique = (i == track_cam_indices.end());
\n-
92 return all_cameras_unique;
\n-
93 }
\n-
\n-
94
\n-
98
\n-
\n-
100 Eigen::MatrixX2d measurementMatrix() const {
\n-
101 Eigen::MatrixX2d m(numberMeasurements(), 2);
\n-
102 for (size_t i = 0; i < numberMeasurements(); i++) {
\n-
103 m.row(i) = measurement(i).second;
\n-
104 }
\n-
105 return m;
\n-
106 }
\n-
\n-
107
\n-
\n-
109 Eigen::VectorXi indexVector() const {
\n-
110 Eigen::VectorXi v(numberMeasurements());
\n-
111 for (size_t i = 0; i < numberMeasurements(); i++) {
\n-
112 v(i) = measurement(i).first;
\n-
113 }
\n-
114 return v;
\n-
115 }
\n-
\n-
116
\n-
118};
\n+\n+\n+\n+
24#include <gtsam/base/types.h>
\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
\n+
32 class SymbolicBayesNet : public BayesNet<SymbolicConditional> {
\n+
33 public:
\n+\n+
35 typedef SymbolicBayesNet This;
\n+\n+
37 typedef boost::shared_ptr<This> shared_ptr;
\n+
38 typedef boost::shared_ptr<ConditionalType> sharedConditional;
\n+
39
\n+
42
\n+\n+
45
\n+
47 template <typename ITERATOR>
\n+
\n+
48 SymbolicBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
\n+
49 : Base(firstConditional, lastConditional) {}
\n+
\n+
50
\n+
52 template <class CONTAINER>
\n+
\n+
53 explicit SymbolicBayesNet(const CONTAINER& conditionals) {
\n+
54 push_back(conditionals);
\n+
55 }
\n+
\n+
56
\n+
59 template <class DERIVEDCONDITIONAL>
\n+
\n+\n+
61 : Base(graph) {}
\n+
\n+
62
\n+
\n+
67 SymbolicBayesNet(std::initializer_list<boost::shared_ptr<SymbolicConditional>> conditionals)
\n+
68 : Base(conditionals) {}
\n+
\n+
69
\n+
\n+\n+
72 push_back(boost::make_shared<SymbolicConditional>(c));
\n+
73 }
\n+
\n+
74
\n+
\n+\n+
82 push_back(boost::make_shared<SymbolicConditional>(c));
\n+
83 return *this;
\n+
84 }
\n+
\n+
85
\n+
87 virtual ~SymbolicBayesNet() {}
\n+
88
\n+
90
\n+
93
\n+
95 GTSAM_EXPORT bool equals(const This& bn, double tol = 1e-9) const;
\n+
96
\n+
\n+
98 GTSAM_EXPORT void print(
\n+
99 const std::string& s = "SymbolicBayesNet",
\n+
100 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n+
101 Base::print(s, formatter);
\n+
102 }
\n+
\n+
103
\n+
105
\n+
106 private:
\n+\n+
109 template<class ARCHIVE>
\n+
110 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
111 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
112 }
\n+
113};
\n+
\n+
114
\n+
116 template<>
\n+
\n+
117 struct traits<SymbolicBayesNet> : public Testable<SymbolicBayesNet> {
\n+
118 };
\n
\n
119
\n-
120using SfmTrack2dVector = std::vector<SfmTrack2d>;
\n-
121
\n-
\n-
126struct GTSAM_EXPORT SfmTrack : SfmTrack2d {
\n-\n-
128 float r, g, b;
\n-
129
\n-
132
\n-
133 explicit SfmTrack(float r = 0, float g = 0, float b = 0)
\n-
134 : p(0, 0, 0), r(r), g(g), b(b) {}
\n-
135
\n-
136 explicit SfmTrack(const gtsam::Point3& pt, float r = 0, float g = 0,
\n-
137 float b = 0)
\n-
138 : p(pt), r(r), g(g), b(b) {}
\n-
139
\n-
143
\n-
145 const Point3& point3() const { return p; }
\n-
146
\n-
148 Point3 rgb() const { return Point3(r, g, b); }
\n-
149
\n-
153
\n-
155 void print(const std::string& s = "") const;
\n-
156
\n-
158 bool equals(const SfmTrack& sfmTrack, double tol = 1e-9) const;
\n-
159
\n-
161#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42
\n-
164 void GTSAM_DEPRECATED add_measurement(size_t idx, const gtsam::Point2& m) {
\n-
165 measurements.emplace_back(idx, m);
\n-
166 }
\n-
167
\n-
168 size_t GTSAM_DEPRECATED number_measurements() const {
\n-
169 return measurements.size();
\n-
170 }
\n-
172#endif
\n-
175
\n-
177 friend class boost::serialization::access;
\n-
178 template <class ARCHIVE>
\n-
179 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {
\n-
180 ar& BOOST_SERIALIZATION_NVP(p);
\n-
181 ar& BOOST_SERIALIZATION_NVP(r);
\n-
182 ar& BOOST_SERIALIZATION_NVP(g);
\n-
183 ar& BOOST_SERIALIZATION_NVP(b);
\n-
184 ar& BOOST_SERIALIZATION_NVP(measurements);
\n-
185 ar& BOOST_SERIALIZATION_NVP(siftIndices);
\n-
186 }
\n-
188};
\n-
\n-
189
\n-
190template <typename T>
\n-
191struct traits;
\n-
192
\n-
193template <>
\n-
194struct traits<SfmTrack> : public Testable<SfmTrack> {};
\n-
195
\n-
196} // namespace gtsam
\n-
Convenience functions for serializing data structures via boost.serialization.
\n-
3D Point
\n-
2D Point
\n+
120} //\\ namespace gtsam
\n+
Typedefs for easier changing of types.
\n+
Bayes network.
\n+
Factor Graph Base Class.
\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::pair< size_t, size_t > SiftIndex
Sift index for SfmTrack.
Definition SfmTrack.h:36
\n-
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n-
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n-
std::pair< size_t, Point2 > SfmMeasurement
A measurement with its camera index.
Definition SfmTrack.h:33
\n-
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:36
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n
Template to create a binary predicate.
Definition Testable.h:111
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Track containing 2D measurements associated with a single 3D point.
Definition SfmTrack.h:43
\n-
void addMeasurement(size_t idx, const gtsam::Point2 &m)
Add measurement (camera_idx, Point2) to track.
Definition SfmTrack.h:65
\n-
const SfmMeasurement & measurement(size_t idx) const
Get the measurement (camera index, Point2) at pose index idx
Definition SfmTrack.h:73
\n-
std::vector< SiftIndex > siftIndices
The feature descriptors (optional)
Definition SfmTrack.h:48
\n-
const SiftIndex & siftIndex(size_t idx) const
Get the SIFT feature index corresponding to the measurement at idx
Definition SfmTrack.h:78
\n-
bool hasUniqueCameras() const
Check that no two measurements are from the same camera.
Definition SfmTrack.h:84
\n-
Eigen::MatrixX2d measurementMatrix() const
Return the measurements as a 2D matrix.
Definition SfmTrack.h:100
\n-
size_t numberMeasurements() const
Total number of measurements in this track.
Definition SfmTrack.h:70
\n-
std::vector< SfmMeasurement > measurements
The 2D image projections (id,(u,v))
Definition SfmTrack.h:45
\n-
Eigen::VectorXi indexVector() const
Return the camera indices of the measurements.
Definition SfmTrack.h:109
\n-
Definition SfmTrack.h:126
\n-
Point3 rgb() const
Get RGB values describing 3d point.
Definition SfmTrack.h:148
\n-
float b
RGB color of the 3D point.
Definition SfmTrack.h:128
\n-
const Point3 & point3() const
Get 3D point.
Definition SfmTrack.h:145
\n-
Point3 p
3D position of the point
Definition SfmTrack.h:127
\n+
A BayesNet is a tree of conditionals, stored in elimination order.
Definition BayesNet.h:35
\n+
void print(const std::string &s="BayesNet", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print out graph
Definition BayesNet-inst.h:32
\n+
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)
Add a factor directly using a shared_ptr.
Definition FactorGraph.h:186
\n+
A SymbolicBayesNet is a Bayes Net of purely symbolic conditionals.
Definition SymbolicBayesNet.h:32
\n+
virtual ~SymbolicBayesNet()
Destructor.
Definition SymbolicBayesNet.h:87
\n+
SymbolicBayesNet(SymbolicConditional &&c)
Construct from a single conditional.
Definition SymbolicBayesNet.h:71
\n+
GTSAM_EXPORT void print(const std::string &s="SymbolicBayesNet", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition SymbolicBayesNet.h:98
\n+
SymbolicBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)
Construct from iterator over conditionals.
Definition SymbolicBayesNet.h:48
\n+
SymbolicBayesNet(std::initializer_list< boost::shared_ptr< SymbolicConditional > > conditionals)
Constructor that takes an initializer list of shared pointers.
Definition SymbolicBayesNet.h:67
\n+
SymbolicBayesNet(const CONTAINER &conditionals)
Construct from container of factors (shared_ptr or plain objects)
Definition SymbolicBayesNet.h:53
\n+
SymbolicBayesNet()
Construct empty factor graph.
Definition SymbolicBayesNet.h:44
\n+
friend class boost::serialization::access
Serialization function.
Definition SymbolicBayesNet.h:108
\n+
SymbolicBayesNet & operator()(SymbolicConditional &&c)
Add a single conditional and return a reference.
Definition SymbolicBayesNet.h:81
\n+
SymbolicBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition SymbolicBayesNet.h:60
\n+
SymbolicConditional is a conditional with keys but no probability data, produced by symbolic eliminat...
Definition SymbolicConditional.h:38
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SfmTrack.h\n+SymbolicBayesNet.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,233 +16,171 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 19#pragma once\n 20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh>\n-24\n-25#include \n-26#include \n-27#include \n-28#include \n-29\n-30namespace _\bg_\bt_\bs_\ba_\bm {\n-31\n-_\b3_\b3typedef std::pair _\bS_\bf_\bm_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt;\n-34\n-_\b3_\b6typedef std::pair _\bS_\bi_\bf_\bt_\bI_\bn_\bd_\be_\bx;\n-37\n-_\b4_\b3struct GTSAM_EXPORT _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd {\n-_\b4_\b5 std::vector _\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs;\n-46\n-_\b4_\b8 std::vector _\bs_\bi_\bf_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n-49\n-52\n-53 // Default constructor.\n-54 _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd() = default;\n-55\n-56 // Constructor from measurements.\n-57 explicit _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd(const std::vector& measurements)\n-58 : measurements(measurements) {}\n-59\n-63\n-_\b6_\b5 void _\ba_\bd_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt(size_t idx, const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2& m) {\n-66 measurements.emplace_back(idx, m);\n-67 }\n-68\n-_\b7_\b0 size_t _\bn_\bu_\bm_\bb_\be_\br_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs() const { return measurements.size(); }\n-71\n-_\b7_\b3 const _\bS_\bf_\bm_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt& _\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt(size_t idx) const {\n-74 return measurements[idx];\n-75 }\n-76\n-_\b7_\b8 const _\bS_\bi_\bf_\bt_\bI_\bn_\bd_\be_\bx& _\bs_\bi_\bf_\bt_\bI_\bn_\bd_\be_\bx(size_t idx) const { return siftIndices[idx]; }\n-79\n-_\b8_\b4 bool _\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bC_\ba_\bm_\be_\br_\ba_\bs() const {\n-85 std::vector track_cam_indices;\n-86 for (auto& measurement : measurements) {\n-87 track_cam_indices.emplace_back(measurement.first);\n-88 }\n-89 auto i =\n-90 std::adjacent_find(track_cam_indices.begin(), track_cam_indices.end());\n-91 bool all_cameras_unique = (i == track_cam_indices.end());\n-92 return all_cameras_unique;\n-93 }\n-94\n-98\n-_\b1_\b0_\b0 Eigen::MatrixX2d _\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bM_\ba_\bt_\br_\bi_\bx() const {\n-101 Eigen::MatrixX2d m(numberMeasurements(), 2);\n-102 for (size_t i = 0; i < numberMeasurements(); i++) {\n-103 m.row(i) = measurement(i).second;\n-104 }\n-105 return m;\n-106 }\n-107\n-_\b1_\b0_\b9 Eigen::VectorXi _\bi_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br() const {\n-110 Eigen::VectorXi v(numberMeasurements());\n-111 for (size_t i = 0; i < numberMeasurements(); i++) {\n-112 v(i) = measurement(i).first;\n-113 }\n-114 return v;\n-115 }\n-116\n-118};\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+_\b3_\b2 class _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt : public _\bB_\ba_\by_\be_\bs_\bN_\be_\bt {\n+33 public:\n+34 typedef _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b> _\bB_\ba_\bs_\be;\n+35 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bT_\bh_\bi_\bs;\n+36 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n+37 typedef boost::shared_ptr shared_ptr;\n+38 typedef boost::shared_ptr sharedConditional;\n+39\n+42\n+_\b4_\b4 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n+45\n+47 template \n+_\b4_\b8 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(ITERATOR firstConditional, ITERATOR lastConditional)\n+49 : _\bB_\ba_\bs_\be(firstConditional, lastConditional) {}\n+50\n+52 template \n+_\b5_\b3 explicit _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const CONTAINER& conditionals) {\n+54 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(conditionals);\n+55 }\n+56\n+59 template \n+_\b6_\b0 explicit _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL_\b>& graph)\n+61 : _\bB_\ba_\bs_\be(graph) {}\n+62\n+_\b6_\b7 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(std::initializer_list> conditionals)\n+68 : _\bB_\ba_\bs_\be(conditionals) {}\n+69\n+_\b7_\b1 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt(_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl&& c) {\n+72 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(boost::make_shared(c));\n+73 }\n+74\n+_\b8_\b1 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl&& c) {\n+82 _\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk(boost::make_shared(c));\n+83 return *this;\n+84 }\n+85\n+_\b8_\b7 virtual _\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt() {}\n+88\n+90\n+93\n+95 GTSAM_EXPORT bool _\be_\bq_\bu_\ba_\bl_\bs(const This& bn, double tol = 1e-9) const;\n+96\n+_\b9_\b8 GTSAM_EXPORT void _\bp_\br_\bi_\bn_\bt(\n+99 const std::string& s = \"SymbolicBayesNet\",\n+100 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n+101 _\bB_\ba_\bs_\be_\b:_\b:_\bp_\br_\bi_\bn_\bt(s, formatter);\n+102 }\n+103\n+105\n+106 private:\n+_\b1_\b0_\b8 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n+109 template\n+110 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+111 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+112 }\n+113};\n+114\n+116 template<>\n+_\b1_\b1_\b7 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+118 };\n 119\n-120using SfmTrack2dVector = std::vector;\n-121\n-_\b1_\b2_\b6struct GTSAM_EXPORT _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk : _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd {\n-_\b1_\b2_\b7 _\bP_\bo_\bi_\bn_\bt_\b3 _\bp;\n-_\b1_\b2_\b8 float r, g, _\bb;\n-129\n-132\n-133 explicit _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk(float r = 0, float g = 0, float b = 0)\n-134 : p(0, 0, 0), r(r), g(g), b(b) {}\n-135\n-136 explicit _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk(const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3& pt, float r = 0, float g = 0,\n-137 float b = 0)\n-138 : p(pt), r(r), g(g), b(b) {}\n-139\n-143\n-_\b1_\b4_\b5 const _\bP_\bo_\bi_\bn_\bt_\b3& _\bp_\bo_\bi_\bn_\bt_\b3() const { return p; }\n-146\n-_\b1_\b4_\b8 _\bP_\bo_\bi_\bn_\bt_\b3 _\br_\bg_\bb() const { return _\bP_\bo_\bi_\bn_\bt_\b3(r, g, b); }\n-149\n-153\n-155 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const;\n-156\n-158 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk& sfmTrack, double tol = 1e-9) const;\n-159\n-161#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V42\n-164 void GTSAM_DEPRECATED add_measurement(size_t idx, const _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2& m) {\n-165 measurements.emplace_back(idx, m);\n-166 }\n-167\n-168 size_t GTSAM_DEPRECATED number_measurements() const {\n-169 return measurements.size();\n-170 }\n-172#endif\n-175\n-_\b1_\b7_\b7 friend class boost::serialization::access;\n-178 template \n-179 void serialize(ARCHIVE& ar, const unsigned int /*version*/) {\n-180 ar& BOOST_SERIALIZATION_NVP(p);\n-181 ar& BOOST_SERIALIZATION_NVP(r);\n-182 ar& BOOST_SERIALIZATION_NVP(g);\n-183 ar& BOOST_SERIALIZATION_NVP(b);\n-184 ar& BOOST_SERIALIZATION_NVP(measurements);\n-185 ar& BOOST_SERIALIZATION_NVP(siftIndices);\n-186 }\n-188};\n-189\n-190template \n-191struct traits;\n-192\n-193template <>\n-_\b1_\b9_\b4struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-195\n-196} // namespace gtsam\n-_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b._\bh\n-Convenience functions for serializing data structures via boost.serialization.\n-_\bP_\bo_\bi_\bn_\bt_\b3_\b._\bh\n-3D Point\n-_\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n-2D Point\n+120} //\\ namespace gtsam\n+_\bt_\by_\bp_\be_\bs_\b._\bh\n+Typedefs for easier changing of types.\n+_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n+Bayes network.\n+_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph Base Class.\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bi_\bf_\bt_\bI_\bn_\bd_\be_\bx\n-std::pair< size_t, size_t > SiftIndex\n-Sift index for SfmTrack.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const Matrix &A, const string &s, ostream &stream)\n-print without optional string, must specify cout yourself\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n-Vector2 Point2\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point2 to Vector2...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-std::pair< size_t, Point2 > SfmMeasurement\n-A measurement with its camera index.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b3\n-Vector3 Point3\n-As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n-typedef Point3 to Vector3...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point3.h:36\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n Template to create a binary predicate.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd\n-Track containing 2D measurements associated with a single 3D point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\ba_\bd_\bd_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-void addMeasurement(size_t idx, const gtsam::Point2 &m)\n-Add measurement (camera_idx, Point2) to track.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt\n-const SfmMeasurement & measurement(size_t idx) const\n-Get the measurement (camera index, Point2) at pose index idx\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:73\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bs_\bi_\bf_\bt_\bI_\bn_\bd_\bi_\bc_\be_\bs\n-std::vector< SiftIndex > siftIndices\n-The feature descriptors (optional)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:48\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bs_\bi_\bf_\bt_\bI_\bn_\bd_\be_\bx\n-const SiftIndex & siftIndex(size_t idx) const\n-Get the SIFT feature index corresponding to the measurement at idx\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:78\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bh_\ba_\bs_\bU_\bn_\bi_\bq_\bu_\be_\bC_\ba_\bm_\be_\br_\ba_\bs\n-bool hasUniqueCameras() const\n-Check that no two measurements are from the same camera.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bM_\ba_\bt_\br_\bi_\bx\n-Eigen::MatrixX2d measurementMatrix() const\n-Return the measurements as a 2D matrix.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bn_\bu_\bm_\bb_\be_\br_\bM_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-size_t numberMeasurements() const\n-Total number of measurements in this track.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bm_\be_\bn_\bt_\bs\n-std::vector< SfmMeasurement > measurements\n-The 2D image projections (id,(u,v))\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b2_\bd_\b:_\b:_\bi_\bn_\bd_\be_\bx_\bV_\be_\bc_\bt_\bo_\br\n-Eigen::VectorXi indexVector() const\n-Return the camera indices of the measurements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:126\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b:_\b:_\br_\bg_\bb\n-Point3 rgb() const\n-Get RGB values describing 3d point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:148\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b:_\b:_\bb\n-float b\n-RGB color of the 3D point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b:_\b:_\bp_\bo_\bi_\bn_\bt_\b3\n-const Point3 & point3() const\n-Get 3D point.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:145\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b:_\b:_\bp\n-Point3 p\n-3D position of the point\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SfmTrack.h:127\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+A BayesNet is a tree of conditionals, stored in elimination order.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b _\b>_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string &s=\"BayesNet\", const KeyFormatter\n+&formatter=DefaultKeyFormatter) const override\n+print out graph\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesNet-inst.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A factor graph is a bipartite graph with factor nodes connected to variable\n+nodes.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\bu_\bs_\bh_\b__\bb_\ba_\bc_\bk\n+IsDerived< DERIVEDFACTOR > push_back(boost::shared_ptr< DERIVEDFACTOR > factor)\n+Add a factor directly using a shared_ptr.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:186\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+A SymbolicBayesNet is a Bayes Net of purely symbolic conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+virtual ~SymbolicBayesNet()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+SymbolicBayesNet(SymbolicConditional &&c)\n+Construct from a single conditional.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:71\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+GTSAM_EXPORT void print(const std::string &s=\"SymbolicBayesNet\", const\n+KeyFormatter &formatter=DefaultKeyFormatter) const override\n+print\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:98\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+SymbolicBayesNet(ITERATOR firstConditional, ITERATOR lastConditional)\n+Construct from iterator over conditionals.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:48\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+SymbolicBayesNet(std::initializer_list< boost::shared_ptr< SymbolicConditional\n+> > conditionals)\n+Constructor that takes an initializer list of shared pointers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+SymbolicBayesNet(const CONTAINER &conditionals)\n+Construct from container of factors (shared_ptr or plain objects)\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:53\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+SymbolicBayesNet()\n+Construct empty factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:44\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n+friend class boost::serialization::access\n+Serialization function.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n+SymbolicBayesNet & operator()(SymbolicConditional &&c)\n+Add a single conditional and return a reference.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:81\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n+SymbolicBayesNet(const FactorGraph< DERIVEDCONDITIONAL > &graph)\n+Implicit copy/downcast constructor to override explicit template container\n+constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n+SymbolicConditional is a conditional with keys but no probability data,\n+produced by symbolic eliminat...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:38\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\bf_\bm\n- * _\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh\n+ * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01232_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00569_source.html", "comments": ["Files 85% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/DsfTrackGenerator.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/hybrid/HybridGaussianISAM.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
DsfTrackGenerator.h
\n+
HybridGaussianISAM.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20#include <gtsam/base/DSFMap.h>
\n-
21#include <gtsam/sfm/SfmTrack.h>
\n-
22
\n-
23#include <boost/optional.hpp>
\n-
24
\n-
25#include <Eigen/Core>
\n-
26#include <map>
\n-
27#include <vector>
\n+
20#pragma once
\n+
21
\n+
22#include <gtsam/base/Testable.h>
\n+\n+\n+\n+
26
\n+
27namespace gtsam {
\n
28
\n-
29namespace gtsam {
\n-
30
\n-
31namespace gtsfm {
\n-
32
\n-
33typedef Eigen::MatrixX2i CorrespondenceIndices; // N x 2 array
\n-
34
\n-
35// Output of detections in an image.
\n-
36// Coordinate system convention:
\n-
37// 1. The x coordinate denotes the horizontal direction (+ve direction towards
\n-
38// the right).
\n-
39// 2. The y coordinate denotes the vertical direction (+ve direction downwards).
\n-
40// 3. Origin is at the top left corner of the image.
\n-
\n-
41struct Keypoints {
\n-
42 // The (x, y) coordinates of the features, of shape Nx2.
\n-
43 Eigen::MatrixX2d coordinates;
\n-
44
\n-
45 // Optional scale of the detections, of shape N.
\n-
46 // Note: gtsam::Vector is typedef'd for Eigen::VectorXd.
\n-
47 boost::optional<gtsam::Vector> scales;
\n+
\n+
34class GTSAM_EXPORT HybridGaussianISAM : public ISAM<HybridBayesTree> {
\n+
35 public:
\n+\n+\n+
38 typedef boost::shared_ptr<This> shared_ptr;
\n+
39
\n+
42
\n+\n+
45
\n+
47 HybridGaussianISAM(const HybridBayesTree& bayesTree);
\n
48
\n-
50 boost::optional<gtsam::Vector> responses;
\n-
51
\n-
52 Keypoints(const Eigen::MatrixX2d& coordinates)
\n-
53 : coordinates(coordinates){}; // boost::none
\n-
54};
\n-
\n-
55
\n-
56using KeypointsVector = std::vector<Keypoints>;
\n-
57// Mapping from each image pair to (N,2) array representing indices of matching
\n-
58// keypoints.
\n-
59using MatchIndicesMap = std::map<IndexPair, CorrespondenceIndices>;
\n+
50
\n+
51 private:
\n+
53 void updateInternal(
\n+
54 const HybridGaussianFactorGraph& newFactors,
\n+
55 HybridBayesTree::Cliques* orphans,
\n+
56 const boost::optional<size_t>& maxNrLeaves = boost::none,
\n+
57 const boost::optional<Ordering>& ordering = boost::none,
\n+
58 const HybridBayesTree::Eliminate& function =
\n+
59 HybridBayesTree::EliminationTraitsType::DefaultEliminate);
\n
60
\n-
73std::vector<SfmTrack2d> tracksFromPairwiseMatches(
\n-
74 const MatchIndicesMap& matches, const KeypointsVector& keypoints,
\n-
75 bool verbose = false);
\n-
76
\n-
77} // namespace gtsfm
\n-
78
\n-
79} // namespace gtsam
\n-
Allow for arbitrary type in DSF.
\n-
A simple data structure for a track in Structure from Motion.
\n+
61 public:
\n+
70 void update(const HybridGaussianFactorGraph& newFactors,
\n+
71 const boost::optional<size_t>& maxNrLeaves = boost::none,
\n+
72 const boost::optional<Ordering>& ordering = boost::none,
\n+
73 const HybridBayesTree::Eliminate& function =
\n+
74 HybridBayesTree::EliminationTraitsType::DefaultEliminate);
\n+
75
\n+
84 static Ordering GetOrdering(HybridGaussianFactorGraph& factors,
\n+
85 const HybridGaussianFactorGraph& newFactors);
\n+
86};
\n+
\n+
87
\n+
89template <>
\n+
90struct traits<HybridGaussianISAM> : public Testable<HybridGaussianISAM> {};
\n+
91
\n+
92} // namespace gtsam
\n+
Concept check for values that can be used in unit tests.
\n+
Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.
\n+
Linearized Hybrid factor graph that uses type erasure.
\n+
Incremental update functionality (iSAM) for BayesTree.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Definition DsfTrackGenerator.h:41
\n-
boost::optional< gtsam::Vector > responses
Optional confidences/responses for each detection, of shape N.
Definition DsfTrackGenerator.h:50
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
A Bayes tree representing a Hybrid density.
Definition HybridBayesTree.h:64
\n+
Definition HybridGaussianFactorGraph.h:102
\n+
Definition HybridGaussianISAM.h:34
\n+
A Bayes tree with an update methods that implements the iSAM algorithm.
Definition ISAM.h:31
\n+
Definition Ordering.h:34
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,88 +1,99 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-DsfTrackGenerator.h\n+HybridGaussianISAM.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bD_\bS_\bF_\bM_\ba_\bp_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\bf_\bm_\b/_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh>\n-22\n-23#include \n-24\n-25#include \n-26#include \n-27#include \n+20#pragma once\n+21\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bh_\by_\bb_\br_\bi_\bd_\b/_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bI_\bS_\bA_\bM_\b._\bh>\n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n 28\n-29namespace _\bg_\bt_\bs_\ba_\bm {\n-30\n-31namespace gtsfm {\n-32\n-33typedef Eigen::MatrixX2i CorrespondenceIndices; // N x 2 array\n-34\n-35// Output of detections in an image.\n-36// Coordinate system convention:\n-37// 1. The x coordinate denotes the horizontal direction (+ve direction\n-towards\n-38// the right).\n-39// 2. The y coordinate denotes the vertical direction (+ve direction\n-downwards).\n-40// 3. Origin is at the top left corner of the image.\n-_\b4_\b1struct _\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs {\n-42 // The (x, y) coordinates of the features, of shape Nx2.\n-43 Eigen::MatrixX2d coordinates;\n-44\n-45 // Optional scale of the detections, of shape N.\n-46 // Note: gtsam::Vector is typedef'd for Eigen::VectorXd.\n-47 boost::optional scales;\n+_\b3_\b4class GTSAM_EXPORT _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM : public _\bI_\bS_\bA_\bM {\n+35 public:\n+36 typedef _\bI_\bS_\bA_\bM_\b<_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b> _\bB_\ba_\bs_\be;\n+37 typedef _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM _\bT_\bh_\bi_\bs;\n+38 typedef boost::shared_ptr shared_ptr;\n+39\n+42\n+44 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM();\n+45\n+47 _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM(const _\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be& bayesTree);\n 48\n-_\b5_\b0 boost::optional _\br_\be_\bs_\bp_\bo_\bn_\bs_\be_\bs;\n-51\n-52 _\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs(const Eigen::MatrixX2d& coordinates)\n-53 : coordinates(coordinates){}; // boost::none\n-54};\n-55\n-56using KeypointsVector = std::vector;\n-57// Mapping from each image pair to (N,2) array representing indices of\n-matching\n-58// keypoints.\n-59using MatchIndicesMap = std::map;\n+50\n+51 private:\n+53 void updateInternal(\n+54 const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n+55 HybridBayesTree::Cliques* orphans,\n+56 const boost::optional& maxNrLeaves = boost::none,\n+57 const boost::optional& ordering = boost::none,\n+58 const HybridBayesTree::Eliminate& function =\n+59 HybridBayesTree::EliminationTraitsType::DefaultEliminate);\n 60\n-73std::vector tracksFromPairwiseMatches(\n-74 const MatchIndicesMap& matches, const KeypointsVector& keypoints,\n-75 bool verbose = false);\n-76\n-77} // namespace gtsfm\n-78\n-79} // namespace gtsam\n-_\bD_\bS_\bF_\bM_\ba_\bp_\b._\bh\n-Allow for arbitrary type in DSF.\n-_\bS_\bf_\bm_\bT_\br_\ba_\bc_\bk_\b._\bh\n-A simple data structure for a track in Structure from Motion.\n+61 public:\n+70 void update(const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors,\n+71 const boost::optional& maxNrLeaves = boost::none,\n+72 const boost::optional& ordering = boost::none,\n+73 const HybridBayesTree::Eliminate& function =\n+74 HybridBayesTree::EliminationTraitsType::DefaultEliminate);\n+75\n+84 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg GetOrdering(_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factors,\n+85 const _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& newFactors);\n+86};\n+87\n+89template <>\n+_\b9_\b0struct _\bt_\br_\ba_\bi_\bt_\bs<_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+91\n+92} // namespace gtsam\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n+Concept check for values that can be used in unit tests.\n+_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Hybrid Bayes Tree, the result of eliminating a HybridJunctionTree.\n+_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Linearized Hybrid factor graph that uses type erasure.\n+_\bI_\bS_\bA_\bM_\b._\bh\n+Incremental update functionality (iSAM) for BayesTree.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\bf_\bm_\b:_\b:_\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DsfTrackGenerator.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bg_\bt_\bs_\bf_\bm_\b:_\b:_\bK_\be_\by_\bp_\bo_\bi_\bn_\bt_\bs_\b:_\b:_\br_\be_\bs_\bp_\bo_\bn_\bs_\be_\bs\n-boost::optional< gtsam::Vector > responses\n-Optional confidences/responses for each detection, of shape N.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn DsfTrackGenerator.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+A Bayes tree representing a Hybrid density.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridBayesTree.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianFactorGraph.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridGaussianISAM.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM\n+A Bayes tree with an update methods that implements the iSAM algorithm.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM.h:31\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\bf_\bm\n- * _\bD_\bs_\bf_\bT_\br_\ba_\bc_\bk_\bG_\be_\bn_\be_\br_\ba_\bt_\bo_\br_\b._\bh\n+ * _\bh_\by_\bb_\br_\bi_\bd\n+ * _\bH_\by_\bb_\br_\bi_\bd_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bI_\bS_\bA_\bM_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01235_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00296_source.html", "comments": ["Files 92% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/KarcherMeanFactor-inl.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Cal3DS2.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
KarcherMeanFactor-inl.h
\n+
Cal3DS2.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file KarcherMeanFactor.cpp
\n-
14 * @author Frank Dellaert
\n-
15 * @date March 2019
\n-
16 */
\n-
17
\n-
18#pragma once
\n-
19
\n-\n-\n-
22#include <gtsam/slam/KarcherMeanFactor.h>
\n-
23
\n-
24using namespace std;
\n+
21#pragma once
\n+
22
\n+
23#include <gtsam/geometry/Cal3DS2_Base.h>
\n+
24#include <boost/shared_ptr.hpp>
\n
25
\n
26namespace gtsam {
\n
27
\n-
28template <class T, class ALLOC>
\n-
29T FindKarcherMeanImpl(const vector<T, ALLOC>& rotations) {
\n-
30 // Cost function C(R) = \\sum PriorFactor(R_i)::error(R)
\n-
31 // No closed form solution.
\n-
32 NonlinearFactorGraph graph;
\n-
33 static const Key kKey(0);
\n-
34 for (const auto& R : rotations) {
\n-
35 graph.addPrior<T>(kKey, R);
\n-
36 }
\n-
37 Values initial;
\n-
38 initial.insert<T>(kKey, T());
\n-
39 auto result = GaussNewtonOptimizer(graph, initial).optimize();
\n-
40 return result.at<T>(kKey);
\n-
41}
\n-
42
\n-
43template <class T>
\n-
44T FindKarcherMean(const std::vector<T>& rotations) {
\n-
45 return FindKarcherMeanImpl(rotations);
\n-
46}
\n-
47
\n-
48template <class T>
\n-
\n-
49T FindKarcherMean(const std::vector<T, Eigen::aligned_allocator<T>>& rotations) {
\n-
50 return FindKarcherMeanImpl(rotations);
\n-
51}
\n-
\n-
52
\n-
53template <class T>
\n-
54T FindKarcherMean(std::initializer_list<T>&& rotations) {
\n-
55 return FindKarcherMeanImpl(std::vector<T, Eigen::aligned_allocator<T> >(rotations));
\n-
56}
\n-
57
\n-
58template <class T>
\n-
59template <typename CONTAINER>
\n-
\n-
60KarcherMeanFactor<T>::KarcherMeanFactor(const CONTAINER &keys, int d,
\n-
61 boost::optional<double> beta)
\n-
62 : NonlinearFactor(keys), d_(static_cast<size_t>(d)) {
\n-
63 if (d <= 0) {
\n-
64 throw std::invalid_argument(
\n-
65 "KarcherMeanFactor needs dimension for dynamic types.");
\n-
66 }
\n-
67 // Create the constant Jacobian made of d*d identity matrices,
\n-
68 // where d is the dimensionality of the manifold.
\n-
69 Matrix A = Matrix::Identity(d, d);
\n-
70 if (beta) A *= std::sqrt(*beta);
\n-
71 std::map<Key, Matrix> terms;
\n-
72 for (Key j : keys) {
\n-
73 terms[j] = A;
\n-
74 }
\n-
75 whitenedJacobian_ =
\n-
76 boost::make_shared<JacobianFactor>(terms, Vector::Zero(d));
\n-
77}
\n-
\n-
78} // namespace gtsam
\n-\n-
Factor Graph consisting of non-linear factors.
\n+
\n+
35class GTSAM_EXPORT Cal3DS2 : public Cal3DS2_Base {
\n+
36 using Base = Cal3DS2_Base;
\n+
37
\n+
38 public:
\n+
39 enum { dimension = 9 };
\n+
40
\n+
42 using shared_ptr = boost::shared_ptr<Cal3DS2>;
\n+
43
\n+
46
\n+
48 Cal3DS2() = default;
\n+
49
\n+
50 Cal3DS2(double fx, double fy, double s, double u0, double v0, double k1,
\n+
51 double k2, double p1 = 0.0, double p2 = 0.0, double tol = 1e-5)
\n+
52 : Base(fx, fy, s, u0, v0, k1, k2, p1, p2, tol) {}
\n+
53
\n+
54 ~Cal3DS2() override {}
\n+
55
\n+
59
\n+
60 Cal3DS2(const Vector9& v) : Base(v) {}
\n+
61
\n+
65
\n+
67 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
\n+
68 const Cal3DS2& cal);
\n+
69
\n+
71 void print(const std::string& s = "") const override;
\n+
72
\n+
74 bool equals(const Cal3DS2& K, double tol = 10e-9) const;
\n+
75
\n+
79
\n+
81 Cal3DS2 retract(const Vector& d) const;
\n+
82
\n+
84 Vector localCoordinates(const Cal3DS2& T2) const;
\n+
85
\n+
87 size_t dim() const override { return Dim(); }
\n+
88
\n+
90 inline static size_t Dim() { return dimension; }
\n+
91
\n+
95
\n+
\n+
97 boost::shared_ptr<Base> clone() const override {
\n+
98 return boost::shared_ptr<Base>(new Cal3DS2(*this));
\n+
99 }
\n+
\n+
100
\n+
102
\n+
103 private:
\n+
106
\n+
108 friend class boost::serialization::access;
\n+
109 template <class Archive>
\n+
110 void serialize(Archive& ar, const unsigned int /*version*/) {
\n+
111 ar& boost::serialization::make_nvp(
\n+
112 "Cal3DS2", boost::serialization::base_object<Cal3DS2_Base>(*this));
\n+
113 }
\n+
114
\n+
116};
\n+
\n+
117
\n+
118template <>
\n+
119struct traits<Cal3DS2> : public internal::Manifold<Cal3DS2> {};
\n+
120
\n+
121template <>
\n+
122struct traits<const Cal3DS2> : public internal::Manifold<Cal3DS2> {};
\n+
123}
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
KarcherMeanFactor(const CONTAINER &keys, int d=D, boost::optional< double > beta=boost::none)
Construct from given keys.
Definition KarcherMeanFactor-inl.h:60
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Both ManifoldTraits and Testable.
Definition Manifold.h:120
\n+
Calibration of a camera with radial distortion that also supports Lie-group behaviors for optimizatio...
Definition Cal3DS2.h:35
\n+
size_t dim() const override
Return dimensions of calibration manifold object.
Definition Cal3DS2.h:87
\n+
boost::shared_ptr< Base > clone() const override
Definition Cal3DS2.h:97
\n+
static size_t Dim()
Return dimensions of calibration manifold object.
Definition Cal3DS2.h:90
\n+
Cal3DS2()=default
Default Constructor with only unit focal length.
\n+
Calibration of a camera with radial distortion.
Definition Cal3DS2_Base.h:42
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,117 +1,126 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-KarcherMeanFactor-inl.h\n+Cal3DS2.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file KarcherMeanFactor.cpp\n-14 * @author Frank Dellaert\n-15 * @date March 2019\n-16 */\n-17\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-22#include \n-23\n-24using namespace std;\n+21#pragma once\n+22\n+23#include \n+24#include \n 25\n 26namespace _\bg_\bt_\bs_\ba_\bm {\n 27\n-28template \n-29T FindKarcherMeanImpl(const vector& rotations) {\n-30 // Cost function C(R) = \\sum PriorFactor(R_i)::error(R)\n-31 // No closed form solution.\n-32 NonlinearFactorGraph graph;\n-33 static const _\bK_\be_\by kKey(0);\n-34 for (const auto& R : rotations) {\n-35 graph.addPrior(kKey, R);\n-36 }\n-37 _\bV_\ba_\bl_\bu_\be_\bs initial;\n-38 initial.insert(kKey, T());\n-39 auto result = GaussNewtonOptimizer(graph, initial).optimize();\n-40 return result.at(kKey);\n-41}\n-42\n-43template \n-44T FindKarcherMean(const std::vector& rotations) {\n-45 return FindKarcherMeanImpl(rotations);\n-46}\n-47\n-48template \n-_\b4_\b9T FindKarcherMean(const std::vector>&\n-rotations) {\n-50 return FindKarcherMeanImpl(rotations);\n-51}\n-52\n-53template \n-54T FindKarcherMean(std::initializer_list&& rotations) {\n-55 return FindKarcherMeanImpl(std::vector >\n-(rotations));\n-56}\n-57\n-58template \n-59template \n-_\b6_\b0_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bT_\b>_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER &keys, int d,\n-61 boost::optional beta)\n-62 : _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br(keys), d_(static_cast(d)) {\n-63 if (d <= 0) {\n-64 throw std::invalid_argument(\n-65 \"KarcherMeanFactor needs dimension for dynamic types.\");\n-66 }\n-67 // Create the constant Jacobian made of d*d identity matrices,\n-68 // where d is the dimensionality of the manifold.\n-69 Matrix A = Matrix::Identity(d, d);\n-70 if (beta) A *= std::sqrt(*beta);\n-71 std::map terms;\n-72 for (_\bK_\be_\by j : _\bk_\be_\by_\bs) {\n-73 terms[j] = A;\n-74 }\n-75 whitenedJacobian_ =\n-76 boost::make_shared(terms, Vector::Zero(d));\n-77}\n-78} // namespace gtsam\n-_\bG_\ba_\bu_\bs_\bs_\bN_\be_\bw_\bt_\bo_\bn_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\b._\bh\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n+_\b3_\b5class GTSAM_EXPORT _\bC_\ba_\bl_\b3_\bD_\bS_\b2 : public _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be {\n+36 using _\bB_\ba_\bs_\be = _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be;\n+37\n+38 public:\n+39 enum { dimension = 9 };\n+40\n+42 using shared_ptr = boost::shared_ptr;\n+43\n+46\n+_\b4_\b8 _\bC_\ba_\bl_\b3_\bD_\bS_\b2() = default;\n+49\n+50 _\bC_\ba_\bl_\b3_\bD_\bS_\b2(double fx, double fy, double s, double u0, double v0, double k1,\n+51 double k2, double p1 = 0.0, double p2 = 0.0, double tol = 1e-5)\n+52 : _\bB_\ba_\bs_\be(fx, fy, s, u0, v0, k1, k2, p1, p2, tol) {}\n+53\n+54 _\b~_\bC_\ba_\bl_\b3_\bD_\bS_\b2() override {}\n+55\n+59\n+60 Cal3DS2(const Vector9& v) : Base(v) {}\n+61\n+65\n+67 GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,\n+68 const Cal3DS2& cal);\n+69\n+71 void _\bp_\br_\bi_\bn_\bt(const std::string& s = \"\") const override;\n+72\n+74 bool equals(const Cal3DS2& K, double tol = 10e-9) const;\n+75\n+79\n+81 Cal3DS2 retract(const Vector& d) const;\n+82\n+84 Vector localCoordinates(const Cal3DS2& T2) const;\n+85\n+_\b8_\b7 size_t _\bd_\bi_\bm() const override { return Dim(); }\n+88\n+_\b9_\b0 inline static size_t _\bD_\bi_\bm() { return dimension; }\n+91\n+95\n+_\b9_\b7 boost::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n+98 return boost::shared_ptr(new _\bC_\ba_\bl_\b3_\bD_\bS_\b2(*this));\n+99 }\n+100\n+102\n+103 private:\n+106\n+_\b1_\b0_\b8 friend class boost::serialization::access;\n+109 template \n+110 void serialize(Archive& ar, const unsigned int /*version*/) {\n+111 ar& boost::serialization::make_nvp(\n+112 \"Cal3DS2\", boost::serialization::base_object(*this));\n+113 }\n+114\n+116};\n+117\n+118template <>\n+_\b1_\b1_\b9struct _\bt_\br_\ba_\bi_\bt_\bs<_\bC_\ba_\bl_\b3_\bD_\bS_\b2> : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n+120\n+121template <>\n+_\b1_\b2_\b2struct _\bt_\br_\ba_\bi_\bt_\bs : public _\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd {};\n+123}\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-KarcherMeanFactor(const CONTAINER &keys, int d=D, boost::optional< double >\n-beta=boost::none)\n-Construct from given keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor-inl.h:60\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bM_\ba_\bn_\bi_\bf_\bo_\bl_\bd\n+Both ManifoldTraits and Testable.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Manifold.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2\n+Calibration of a camera with radial distortion that also supports Lie-group\n+behaviors for optimizatio...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b:_\b:_\bd_\bi_\bm\n+size_t dim() const override\n+Return dimensions of calibration manifold object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2.h:87\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+boost::shared_ptr< Base > clone() const override\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b:_\b:_\bD_\bi_\bm\n+static size_t Dim()\n+Return dimensions of calibration manifold object.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2.h:90\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2\n+Cal3DS2()=default\n+Default Constructor with only unit focal length.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b__\bB_\ba_\bs_\be\n+Calibration of a camera with radial distortion.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Cal3DS2_Base.h:42\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\bl_\ba_\bm\n- * K\bKa\bar\brc\bch\bhe\ber\brM\bMe\bea\ban\bnF\bFa\bac\bct\bto\bor\br-\b-i\bin\bnl\bl.\b.h\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bC_\ba_\bl_\b3_\bD_\bS_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01244.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01241.html", "comments": ["Files 93% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/EssentialMatrixConstraint.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/SmartFactorBase.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
EssentialMatrixConstraint.h File Reference
\n+
SmartFactorBase.h File Reference
\n
\n
\n \n-

Go to the source code of this file.

\n+

Base class to create smart factors on poses or cameras. \n+More...

\n+\n+

Go to the source code of this file.

\n \n \n-\n-\n+\n+\n \n

\n Classes

class  gtsam::EssentialMatrixConstraint
 Binary factor between two Pose3 variables induced by an EssentialMatrix measurement. More...
class  gtsam::SmartFactorBase< CAMERA >
 Base class for smart factors. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Frank Dellaert
\n+

Base class to create smart factors on poses or cameras.

\n+
Author
Luca Carlone
\n+
\n+Antoni Rosinol
\n+
\n+Zsolt Kira
\n+
\n+Frank Dellaert
\n
\n-Pablo Alcantarilla
\n-
Date
Jan 5, 2014
\n+Chris Beall
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,27 +1,29 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-EssentialMatrixConstraint.h File Reference\n+SmartFactorBase.h File Reference\n+Base class to create smart factors on poses or cameras. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n-class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n-\u00a0 Binary factor between two _\bP_\bo_\bs_\be_\b3 variables induced by an _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx\n- measurement. _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n+\u00a0 Base class for smart factors. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Base class to create smart factors on poses or cameras.\n Author\n+ Luca Carlone\n+ Antoni Rosinol\n+ Zsolt Kira\n Frank Dellaert\n- Pablo Alcantarilla\n- Date\n- Jan 5, 2014\n+ Chris Beall\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bE_\bs_\bs_\be_\bn_\bt_\bi_\ba_\bl_\bM_\ba_\bt_\br_\bi_\bx_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b._\bh\n+ * _\bS_\bm_\ba_\br_\bt_\bF_\ba_\bc_\bt_\bo_\br_\bB_\ba_\bs_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01247_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01208_source.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/KarcherMeanFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/sfm/ShonanFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
KarcherMeanFactor.h
\n+
ShonanFactor.h
\n
\n
\n-
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n+
3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
12/*
\n-
13 * @file KarcherMeanFactor.h
\n-
14 * @author Frank Dellaert
\n-
15 * @date March 2019
\n-
16 */
\n-
17
\n-
18#pragma once
\n-
19
\n-
20#include <gtsam/base/Matrix.h>
\n-\n-
22
\n-
23#include <map>
\n-
24#include <vector>
\n+
19#pragma once
\n+
20
\n+
21#include <gtsam/geometry/Rot2.h>
\n+
22#include <gtsam/geometry/Rot3.h>
\n+
23#include <gtsam/geometry/SOn.h>
\n+\n
25
\n-
26namespace gtsam {
\n-
32template <class T>
\n-
33T FindKarcherMean(const std::vector<T, Eigen::aligned_allocator<T>> &rotations);
\n-
34
\n-
35template <class T> T FindKarcherMean(std::initializer_list<T> &&rotations);
\n-
36
\n-
\n-
45template <class T> class KarcherMeanFactor : public NonlinearFactor {
\n-
46 // Compile time dimension: can be -1
\n-
47 enum { D = traits<T>::dimension };
\n-
48
\n-
49 // Runtime dimension: always >=0
\n-
50 size_t d_;
\n-
51
\n-
53 boost::shared_ptr<JacobianFactor> whitenedJacobian_;
\n+
26#include <type_traits>
\n+
27
\n+
28namespace gtsam {
\n+
29
\n+
35template <size_t d>
\n+
\n+
36class GTSAM_EXPORT ShonanFactor : public NoiseModelFactorN<SOn, SOn> {
\n+
37 Matrix M_;
\n+
38 size_t p_, pp_;
\n+
39 boost::shared_ptr<Matrix> G_;
\n+
40
\n+
41 // Select Rot2 or Rot3 interface based template parameter d
\n+
42 using Rot = typename std::conditional<d == 2, Rot2, Rot3>::type;
\n+
43
\n+
44public:
\n+
47
\n+
51 ShonanFactor(Key j1, Key j2, const Rot &R12, size_t p,
\n+
52 const SharedNoiseModel &model = nullptr,
\n+
53 const boost::shared_ptr<Matrix> &G = nullptr);
\n
54
\n-
55public:
\n-
61 template <typename CONTAINER>
\n-
62 KarcherMeanFactor(const CONTAINER &keys, int d = D,
\n-
63 boost::optional<double> beta = boost::none);
\n-
64
\n-
66 ~KarcherMeanFactor() override {}
\n+
58
\n+
60 void
\n+
61 print(const std::string &s,
\n+
62 const KeyFormatter &keyFormatter = DefaultKeyFormatter) const override;
\n+
63
\n+
65 bool equals(const NonlinearFactor &expected,
\n+
66 double tol = 1e-9) const override;
\n
67
\n-
69 double error(const Values &c) const override { return 0; }
\n-
70
\n-
72 size_t dim() const override { return d_; }
\n-
73
\n-
\n-
75 boost::shared_ptr<GaussianFactor> linearize(const Values &c) const override {
\n-
76 return whitenedJacobian_;
\n-
77 }
\n-
\n-
78};
\n-
\n-
79// \\KarcherMeanFactor
\n-
80} // namespace gtsam
\n-
typedef and functions to augment Eigen's MatrixXd
\n-\n+
71
\n+
74 Vector
\n+
75 evaluateError(const SOn &Q1, const SOn &Q2,
\n+
76 boost::optional<Matrix &> H1 = boost::none,
\n+
77 boost::optional<Matrix &> H2 = boost::none) const override;
\n+
79
\n+
80private:
\n+
82 void fillJacobians(const Matrix &M1, const Matrix &M2,
\n+
83 boost::optional<Matrix &> H1,
\n+
84 boost::optional<Matrix &> H2) const;
\n+
85};
\n+
\n+
86
\n+
87// Explicit instantiation for d=2 and d=3 in .cpp file:
\n+
88using ShonanFactor2 = ShonanFactor<2>;
\n+
89using ShonanFactor3 = ShonanFactor<3>;
\n+
90
\n+
91} // namespace gtsam
\n+
3D rotation represented as a rotation matrix or quaternion
\n+
N*N matrix representation of SO(N).
\n+
2D rotation
\n+
Non-linear factor base classes.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:156
\n+
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
Manifold of special orthogonal rotation matrices SO<N>.
Definition SOn.h:52
\n
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
The KarcherMeanFactor creates a constraint on all SO(n) variables with given keys that the Karcher me...
Definition KarcherMeanFactor.h:45
\n-
double error(const Values &c) const override
Calculate the error of the factor: always zero.
Definition KarcherMeanFactor.h:69
\n-
size_t dim() const override
get the dimension of the factor (number of rows on linearization)
Definition KarcherMeanFactor.h:72
\n-
boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override
linearize to a GaussianFactor
Definition KarcherMeanFactor.h:75
\n-
~KarcherMeanFactor() override
Destructor.
Definition KarcherMeanFactor.h:66
\n+
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n+
ShonanFactor is a BetweenFactor that moves in SO(p), but will land on the SO(d) sub-manifold of SO(p)...
Definition ShonanFactor.h:36
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,111 +1,119 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-KarcherMeanFactor.h\n+ShonanFactor.h\n+_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n+3 * GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-12/*\n-13 * @file KarcherMeanFactor.h\n-14 * @author Frank Dellaert\n-15 * @date March 2019\n-16 */\n-17\n-18#pragma once\n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22\n-23#include \n-24#include \n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b2_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bS_\bO_\bn_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n 25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-32template \n-33T FindKarcherMean(const std::vector>\n-&rotations);\n-34\n-35template T FindKarcherMean(std::initializer_list &&rotations);\n-36\n-_\b4_\b5template class _\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br {\n-46 // Compile time dimension: can be -1\n-47 enum { D = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bd_\bi_\bm_\be_\bn_\bs_\bi_\bo_\bn };\n-48\n-49 // Runtime dimension: always >=0\n-50 size_t d_;\n-51\n-53 boost::shared_ptr whitenedJacobian_;\n+26#include \n+27\n+28namespace _\bg_\bt_\bs_\ba_\bm {\n+29\n+35template \n+_\b3_\b6class GTSAM_EXPORT _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n+37 Matrix M_;\n+38 size_t p_, pp_;\n+39 boost::shared_ptr G_;\n+40\n+41 // Select Rot2 or Rot3 interface based template parameter d\n+42 using Rot = typename std::conditional::type;\n+43\n+44public:\n+47\n+51 _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by j1, _\bK_\be_\by j2, const Rot &R12, size_t p,\n+52 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl &model = nullptr,\n+53 const boost::shared_ptr &G = nullptr);\n 54\n-55public:\n-61 template \n-62 _\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER &_\bk_\be_\by_\bs, int d = D,\n-63 boost::optional beta = boost::none);\n-64\n-_\b6_\b6 _\b~_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n+58\n+60 void\n+61 _\bp_\br_\bi_\bn_\bt(const std::string &s,\n+62 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br &keyFormatter = DefaultKeyFormatter) const override;\n+63\n+65 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br &expected,\n+66 double tol = 1e-9) const override;\n 67\n-_\b6_\b9 double _\be_\br_\br_\bo_\br(const _\bV_\ba_\bl_\bu_\be_\bs &c) const override { return 0; }\n-70\n-_\b7_\b2 size_t _\bd_\bi_\bm() const override { return d_; }\n-73\n-_\b7_\b5 boost::shared_ptr _\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be(const _\bV_\ba_\bl_\bu_\be_\bs &c) const override\n-{\n-76 return whitenedJacobian_;\n-77 }\n-78};\n-79// \\KarcherMeanFactor\n-80} // namespace gtsam\n-_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n-typedef and functions to augment Eigen's MatrixXd\n-_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+71\n+74 Vector\n+75 evaluateError(const _\bS_\bO_\bn &Q1, const _\bS_\bO_\bn &Q2,\n+76 boost::optional H1 = boost::none,\n+77 boost::optional H2 = boost::none) const override;\n+79\n+80private:\n+82 void fillJacobians(const Matrix &M1, const Matrix &M2,\n+83 boost::optional H1,\n+84 boost::optional H2) const;\n+85};\n+86\n+87// Explicit instantiation for d=2 and d=3 in .cpp file:\n+88using ShonanFactor2 = _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b2_\b>;\n+89using ShonanFactor3 = _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b3_\b>;\n+90\n+91} // namespace gtsam\n+_\bR_\bo_\bt_\b3_\b._\bh\n+3D rotation represented as a rotation matrix or quaternion\n+_\bS_\bO_\bn_\b._\bh\n+N*N matrix representation of SO(N).\n+_\bR_\bo_\bt_\b2_\b._\bh\n+2D rotation\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+Non-linear factor base classes.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n-const KeyVector & keys() const\n-Access the factor's involved variable keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const Matrix &A, const string &s, ostream &stream)\n+print without optional string, must specify cout yourself\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Matrix.cpp:156\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n+noiseModel::Base::shared_ptr SharedNoiseModel\n+Aliases.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n+std::function< std::string(Key)> KeyFormatter\n+Typedef for a function to format a key, i.e. to convert it to a string.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bO\n+Manifold of special orthogonal rotation matrices SO.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SOn.h:52\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n Nonlinear factor base class.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-The KarcherMeanFactor creates a constraint on all SO(n) variables with given\n-keys that the Karcher me...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor.h:45\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\br_\br_\bo_\br\n-double error(const Values &c) const override\n-Calculate the error of the factor: always zero.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bd_\bi_\bm\n-size_t dim() const override\n-get the dimension of the factor (number of rows on linearization)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor.h:72\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be\n-boost::shared_ptr< GaussianFactor > linearize(const Values &c) const override\n-linearize to a GaussianFactor\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bK_\ba_\br_\bc_\bh_\be_\br_\bM_\be_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-~KarcherMeanFactor() override\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn KarcherMeanFactor.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n+A convenient base class for creating your own NoiseModelFactor with n\n+variables.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+ShonanFactor is a BetweenFactor that moves in SO(p), but will land on the SO(d)\n+sub-manifold of SO(p)...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ShonanFactor.h:36\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\bl_\ba_\bm\n- * K\bKa\bar\brc\bch\bhe\ber\brM\bMe\bea\ban\bnF\bFa\bac\bct\bto\bor\br.\b.h\bh\n+ * _\bs_\bf_\bm\n+ * _\bS_\bh_\bo_\bn_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01250.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00035.html", "comments": ["Files 91% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/StereoFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastMap.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
StereoFactor.h File Reference
\n+
FastMap.h File Reference
\n
\n
\n \n-

A non-linear factor for stereo measurements. \n+

A thin wrapper around std::map that uses boost's fast_pool_allocator. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::GenericStereoFactor< POSE, LANDMARK >
 A Generic Stereo Factor. More...
 
struct  gtsam::traits< GenericStereoFactor< T1, T2 > >
 traits More...
class  gtsam::FastMap< KEY, VALUE >
 FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the default STL allocator. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A non-linear factor for stereo measurements.

\n-
Author
Alireza Fathi
\n-
\n-Chris Beall
\n+

A thin wrapper around std::map that uses boost's fast_pool_allocator.

\n+
Author
Richard Roberts
\n+
Date
Oct 17, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,29 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-StereoFactor.h File Reference\n-A non-linear factor for stereo measurements. _\bM_\bo_\br_\be_\b._\b._\b.\n+FastMap.h File Reference\n+A thin wrapper around std::map that uses boost's fast_pool_allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bP_\bO_\bS_\bE_\b,_\b _\bL_\bA_\bN_\bD_\bM_\bA_\bR_\bK_\b _\b>\n-\u00a0 A Generic Stereo _\bF_\ba_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bG_\be_\bn_\be_\br_\bi_\bc_\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bT_\b1_\b,_\b _\bT_\b2_\b _\b>_\b _\b>\n-\u00a0 traits _\bM_\bo_\br_\be_\b._\b._\b.\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\b _\bK_\bE_\bY_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n+\u00a0 _\bF_\ba_\bs_\bt_\bM_\ba_\bp is a thin wrapper around std::map that uses the boost\n+ fast_pool_allocator instead of the default STL allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A non-linear factor for stereo measurements.\n+A thin wrapper around std::map that uses boost's fast_pool_allocator.\n Author\n- Alireza Fathi\n- Chris Beall\n+ Richard Roberts\n+ Date\n+ Oct 17, 2010\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\bl_\ba_\bm\n- * _\bS_\bt_\be_\br_\be_\bo_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bb_\ba_\bs_\be\n+ * _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01253.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01235.html", "comments": ["Files 99% similar despite different names"], "unified_diff": "@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
Date
Jan 5, 2014
\n
\n \n \n
\n \n
\n \n \n"}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01262_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01238_source.html", "comments": ["Files 81% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/lago.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/InitializePose3.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
lago.h
\n+
InitializePose3.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
35#pragma once
\n+
21#pragma once
\n+
22
\n+
23#include <gtsam/geometry/Rot3.h>
\n+\n+\n+\n+\n+
28
\n+
29#include <map>
\n+
30#include <vector>
\n+
31
\n+
32namespace gtsam {
\n+
33
\n+
34typedef std::map<Key, std::vector<size_t> > KeyVectorMap;
\n+
35typedef std::map<Key, Rot3> KeyRotMap;
\n
36
\n-\n-\n-\n-\n-
41
\n-
42namespace gtsam {
\n-
43namespace lago {
\n-
44
\n-
45typedef std::map<Key, double> key2doubleMap;
\n-
46
\n-
51GTSAM_EXPORT key2doubleMap computeThetasToRoot(
\n-
52 const key2doubleMap& deltaThetaMap, const PredecessorMap<Key>& tree);
\n-
53
\n-
62GTSAM_EXPORT void getSymbolicGraph(
\n-
63/*OUTPUTS*/std::vector<size_t>& spanningTreeIds, std::vector<size_t>& chordsIds,
\n-
64 key2doubleMap& deltaThetaMap,
\n-
65 /*INPUTS*/const PredecessorMap<Key>& tree, const NonlinearFactorGraph& g);
\n-
66
\n-
68GTSAM_EXPORT GaussianFactorGraph buildLinearOrientationGraph(
\n-
69 const std::vector<size_t>& spanningTreeIds,
\n-
70 const std::vector<size_t>& chordsIds, const NonlinearFactorGraph& g,
\n-
71 const key2doubleMap& orientationsToRoot, const PredecessorMap<Key>& tree);
\n-
72
\n-
74GTSAM_EXPORT VectorValues initializeOrientations(
\n-
75 const NonlinearFactorGraph& graph, bool useOdometricPath = true);
\n+
\n+
37struct GTSAM_EXPORT InitializePose3 {
\n+
38 static GaussianFactorGraph buildLinearOrientationGraph(
\n+
39 const NonlinearFactorGraph& g);
\n+
40
\n+
41 static Values normalizeRelaxedRotations(const VectorValues& relaxedRot3);
\n+
42
\n+
46 static Values computeOrientationsChordal(
\n+
47 const NonlinearFactorGraph& pose3Graph);
\n+
48
\n+
52 static Values computeOrientationsGradient(
\n+
53 const NonlinearFactorGraph& pose3Graph, const Values& givenGuess,
\n+
54 size_t maxIter = 10000, const bool setRefFrame = true);
\n+
55
\n+
56 static void createSymbolicGraph(const NonlinearFactorGraph& pose3Graph,
\n+
57 KeyVectorMap* adjEdgesMap,
\n+
58 KeyRotMap* factorId2RotMap);
\n+
59
\n+
60 static Vector3 gradientTron(const Rot3& R1, const Rot3& R2, const double a,
\n+
61 const double b);
\n+
62
\n+
67 static NonlinearFactorGraph buildPose3graph(
\n+
68 const NonlinearFactorGraph& graph);
\n+
69
\n+
73 static Values computePoses(const Values& initialRot,
\n+
74 NonlinearFactorGraph* poseGraph,
\n+
75 bool singleIter = true);
\n
76
\n-
78GTSAM_EXPORT Values initialize(const NonlinearFactorGraph& graph,
\n-
79 bool useOdometricPath = true);
\n-
80
\n-
82GTSAM_EXPORT Values initialize(const NonlinearFactorGraph& graph,
\n-
83 const Values& initialGuess);
\n-
84
\n-
85} // end of namespace lago
\n-
86} // end of namespace gtsam
\n-
Graph algorithm using boost library.
\n-
Factor Graph Values.
\n-
Linear Factor Graph where all factors are Gaussians.
\n-
Factor Graph consisting of non-linear factors.
\n+
81 static Values initializeOrientations(const NonlinearFactorGraph& graph);
\n+
82
\n+
88 static Values initialize(const NonlinearFactorGraph& graph,
\n+
89 const Values& givenGuess, bool useGradient = false);
\n+
90
\n+
92 static Values initialize(const NonlinearFactorGraph& graph);
\n+
93};
\n+
\n+
94} // end of namespace gtsam
\n+
3D rotation represented as a rotation matrix or quaternion
\n+
Graph algorithm using boost library.
\n+
Linear Factor Graph where all factors are Gaussians.
\n+
Factor Graph Values.
\n+
Factor Graph consisting of non-linear factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
The Factor::error simply extracts the.
\n-
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...
\n+
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n+
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
Definition NonlinearFactorGraph.h:55
\n+
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n+
Definition InitializePose3.h:37
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,77 +1,106 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-lago.h\n+InitializePose3.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-35#pragma once\n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bg_\br_\ba_\bp_\bh_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+28\n+29#include \n+30#include \n+31\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+34typedef std::map > KeyVectorMap;\n+35typedef std::map KeyRotMap;\n 36\n-37#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-38#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-39#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-40#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bg_\br_\ba_\bp_\bh_\b._\bh>\n-41\n-42namespace _\bg_\bt_\bs_\ba_\bm {\n-43namespace lago {\n-44\n-45typedef std::map key2doubleMap;\n-46\n-51GTSAM_EXPORT key2doubleMap computeThetasToRoot(\n-52 const key2doubleMap& deltaThetaMap, const PredecessorMap& tree);\n-53\n-62GTSAM_EXPORT void getSymbolicGraph(\n-63/*OUTPUTS*/std::vector& spanningTreeIds, std::vector&\n-chordsIds,\n-64 key2doubleMap& deltaThetaMap,\n-65 /*INPUTS*/const PredecessorMap& tree, const NonlinearFactorGraph& g);\n-66\n-68GTSAM_EXPORT GaussianFactorGraph buildLinearOrientationGraph(\n-69 const std::vector& spanningTreeIds,\n-70 const std::vector& chordsIds, const NonlinearFactorGraph& g,\n-71 const key2doubleMap& orientationsToRoot, const PredecessorMap& tree);\n-72\n-74GTSAM_EXPORT _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs initializeOrientations(\n-75 const NonlinearFactorGraph& graph, bool useOdometricPath = true);\n+_\b3_\b7struct GTSAM_EXPORT _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3 {\n+38 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh buildLinearOrientationGraph(\n+39 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& g);\n+40\n+41 static _\bV_\ba_\bl_\bu_\be_\bs normalizeRelaxedRotations(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& relaxedRot3);\n+42\n+46 static _\bV_\ba_\bl_\bu_\be_\bs computeOrientationsChordal(\n+47 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& pose3Graph);\n+48\n+52 static _\bV_\ba_\bl_\bu_\be_\bs computeOrientationsGradient(\n+53 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& pose3Graph, const _\bV_\ba_\bl_\bu_\be_\bs& givenGuess,\n+54 size_t maxIter = 10000, const bool setRefFrame = true);\n+55\n+56 static void createSymbolicGraph(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& pose3Graph,\n+57 KeyVectorMap* adjEdgesMap,\n+58 KeyRotMap* factorId2RotMap);\n+59\n+60 static Vector3 gradientTron(const _\bR_\bo_\bt_\b3& R1, const _\bR_\bo_\bt_\b3& R2, const double a,\n+61 const double b);\n+62\n+67 static _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh buildPose3graph(\n+68 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph);\n+69\n+73 static _\bV_\ba_\bl_\bu_\be_\bs computePoses(const _\bV_\ba_\bl_\bu_\be_\bs& initialRot,\n+74 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh* poseGraph,\n+75 bool singleIter = true);\n 76\n-78GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bs initialize(const NonlinearFactorGraph& graph,\n-79 bool useOdometricPath = true);\n-80\n-82GTSAM_EXPORT _\bV_\ba_\bl_\bu_\be_\bs initialize(const NonlinearFactorGraph& graph,\n-83 const _\bV_\ba_\bl_\bu_\be_\bs& initialGuess);\n-84\n-85} // end of namespace lago\n-86} // end of namespace gtsam\n+81 static _\bV_\ba_\bl_\bu_\be_\bs initializeOrientations(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph);\n+82\n+88 static _\bV_\ba_\bl_\bu_\be_\bs initialize(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n+89 const _\bV_\ba_\bl_\bu_\be_\bs& givenGuess, bool useGradient = false);\n+90\n+92 static _\bV_\ba_\bl_\bu_\be_\bs initialize(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph);\n+93};\n+94} // end of namespace gtsam\n+_\bR_\bo_\bt_\b3_\b._\bh\n+3D rotation represented as a rotation matrix or quaternion\n _\bg_\br_\ba_\bp_\bh_\b._\bh\n Graph algorithm using boost library.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Linear Factor Graph where all factors are Gaussians.\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n+Factor Graph Values.\n _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n Factor Graph consisting of non-linear factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-The Factor::error simply extracts the.\n-_\bV_\ba_\bl_\bu_\be_\bs\n-In nonlinear factors, the error function returns the negative log-likelihood as\n-a non-linear function...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n+Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n+symbol GTSAM_USE_QUATERNIO...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n+A non-templated config holding any types of Manifold-group elements.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn InitializePose3.h:37\n * _\bg_\bt_\bs_\ba_\bm\n * _\bs_\bl_\ba_\bm\n- * _\bl_\ba_\bg_\bo_\b._\bh\n+ * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01265.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01262.js", "comments": ["Files 95% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,13 +1,13 @@\n-var a01265 = [\n- [\"createRewrittenFileName\", \"a01265.html#adbe09e573771fd72b08069353d537725\", null],\n- [\"findExampleDataFile\", \"a01265.html#aef971b2c69845e4fcce707306703c7b8\", null],\n- [\"load2D\", \"a01265.html#a635ec096b94adc2b05f081cd07eb2c0f\", null],\n- [\"load2D\", \"a01265.html#a79f6cde1c018ea0f4ca3c7fc83123a14\", null],\n- [\"load3D\", \"a01265.html#ac96511703a91071d7b2033976f9739c3\", null],\n- [\"parseEdge\", \"a01265.html#abc8bb9db0893652e8b5e7b47782ec990\", null],\n- [\"parseVertexLandmark\", \"a01265.html#a961e0398bbfc2504c62fdaad70472418\", null],\n- [\"parseVertexPose\", \"a01265.html#abfc0157e4790e3b03dc601d3e86c684d\", null],\n- [\"readG2o\", \"a01265.html#a71d086efc70f4af31d3c3b00dde4f7c0\", null],\n- [\"save2D\", \"a01265.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\", null],\n- [\"writeG2o\", \"a01265.html#a68bc584d72da3747666ac134a9490f92\", null]\n+var a01262 = [\n+ [\"createRewrittenFileName\", \"a01262.html#adbe09e573771fd72b08069353d537725\", null],\n+ [\"findExampleDataFile\", \"a01262.html#aef971b2c69845e4fcce707306703c7b8\", null],\n+ [\"load2D\", \"a01262.html#a635ec096b94adc2b05f081cd07eb2c0f\", null],\n+ [\"load2D\", \"a01262.html#a79f6cde1c018ea0f4ca3c7fc83123a14\", null],\n+ [\"load3D\", \"a01262.html#ac96511703a91071d7b2033976f9739c3\", null],\n+ [\"parseEdge\", \"a01262.html#abc8bb9db0893652e8b5e7b47782ec990\", null],\n+ [\"parseVertexLandmark\", \"a01262.html#a961e0398bbfc2504c62fdaad70472418\", null],\n+ [\"parseVertexPose\", \"a01262.html#abfc0157e4790e3b03dc601d3e86c684d\", null],\n+ [\"readG2o\", \"a01262.html#a71d086efc70f4af31d3c3b00dde4f7c0\", null],\n+ [\"save2D\", \"a01262.html#acfe516bc2d9ca4cc4530dd3b8460ce3d\", null],\n+ [\"writeG2o\", \"a01262.html#a68bc584d72da3747666ac134a9490f92\", null]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01286.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00086.html", "comments": ["Files 84% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/RegularImplicitSchurFactor.h File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/base/FastList.h File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n \n
\n \n-
RegularImplicitSchurFactor.h File Reference
\n+
FastList.h File Reference
\n
\n
\n \n-

A subclass of GaussianFactor specialized to structureless SFM. \n+

A thin wrapper around std::list that uses boost's fast_pool_allocator. \n More...

\n \n-

Go to the source code of this file.

\n+

Go to the source code of this file.

\n \n \n-\n-\n-\n-\n+\n+\n \n

\n Classes

class  gtsam::RegularImplicitSchurFactor< CAMERA >
 RegularImplicitSchurFactor. More...
 
struct  gtsam::traits< RegularImplicitSchurFactor< CAMERA > >
class  gtsam::FastList< VALUE >
 FastList is a thin wrapper around std::list that uses the boost fast_pool_allocator instead of the default STL allocator. More...
 
\n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-

A subclass of GaussianFactor specialized to structureless SFM.

\n-
Author
Frank Dellaert
\n-
\n-Luca Carlone
\n+

A thin wrapper around std::list that uses boost's fast_pool_allocator.

\n+
Author
Richard Roberts
\n+
Date
Oct 22, 2010
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,28 +1,28 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bC_\bl_\ba_\bs_\bs_\be_\bs | _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-RegularImplicitSchurFactor.h File Reference\n-A subclass of GaussianFactor specialized to structureless SFM. _\bM_\bo_\br_\be_\b._\b._\b.\n+FastList.h File Reference\n+A thin wrapper around std::list that uses boost's fast_pool_allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bs_\bo_\bu_\br_\bc_\be_\b _\bc_\bo_\bd_\be_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n C\bCl\bla\bas\bss\bse\bes\bs\n- class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>\n-\u00a0 _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br. _\bM_\bo_\br_\be_\b._\b._\b.\n-\u00a0\n-struct \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs_\b<_\b _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b<_\b _\bC_\bA_\bM_\bE_\bR_\bA_\b _\b>_\b _\b>\n+class \u00a0 _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b<_\b _\bV_\bA_\bL_\bU_\bE_\b _\b>\n+\u00a0 _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt is a thin wrapper around std::list that uses the boost\n+ fast_pool_allocator instead of the default STL allocator. _\bM_\bo_\br_\be_\b._\b._\b.\n \u00a0\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n-A subclass of GaussianFactor specialized to structureless SFM.\n+A thin wrapper around std::list that uses boost's fast_pool_allocator.\n Author\n- Frank Dellaert\n- Luca Carlone\n+ Richard Roberts\n+ Date\n+ Oct 22, 2010\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\bl_\ba_\bm\n- * _\bR_\be_\bg_\bu_\bl_\ba_\br_\bI_\bm_\bp_\bl_\bi_\bc_\bi_\bt_\bS_\bc_\bh_\bu_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bb_\ba_\bs_\be\n+ * _\bF_\ba_\bs_\bt_\bL_\bi_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01298.js", "source2": "./usr/share/doc/libgtsam-dev/html/a01295.js", "comments": ["Files 85% similar despite different names"], "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -1,14 +1,14 @@\n-var a01298 = [\n+var a01295 = [\n [\"gtsam::SmartProjectionParams\", \"a04932.html\", \"a04932\"],\n- [\"DegeneracyMode\", \"a01298.html#ac3d021280c8a8b84903a8ce81f73ea0f\", [\n- [\"IGNORE_DEGENERACY\", \"a01298.html#ac3d021280c8a8b84903a8ce81f73ea0fa7377887fa83ae502adf7f477205c0273\", null],\n- [\"ZERO_ON_DEGENERACY\", \"a01298.html#ac3d021280c8a8b84903a8ce81f73ea0fa88da97b27cb213cdf714af781ae76b99\", null],\n- [\"HANDLE_INFINITY\", \"a01298.html#ac3d021280c8a8b84903a8ce81f73ea0fa0836b9ba9572539be631139b0785a200\", null]\n+ [\"DegeneracyMode\", \"a01295.html#ac3d021280c8a8b84903a8ce81f73ea0f\", [\n+ [\"IGNORE_DEGENERACY\", \"a01295.html#ac3d021280c8a8b84903a8ce81f73ea0fa7377887fa83ae502adf7f477205c0273\", null],\n+ [\"ZERO_ON_DEGENERACY\", \"a01295.html#ac3d021280c8a8b84903a8ce81f73ea0fa88da97b27cb213cdf714af781ae76b99\", null],\n+ [\"HANDLE_INFINITY\", \"a01295.html#ac3d021280c8a8b84903a8ce81f73ea0fa0836b9ba9572539be631139b0785a200\", null]\n ]],\n- [\"LinearizationMode\", \"a01298.html#adf2020f3f6087064dde501c99794aac3\", [\n- [\"HESSIAN\", \"a01298.html#adf2020f3f6087064dde501c99794aac3a94d642727a23c8b5a1b59b8f74553e80\", null],\n- [\"IMPLICIT_SCHUR\", \"a01298.html#adf2020f3f6087064dde501c99794aac3a7a3f02bec869fc563591ecb84ea2eb7a\", null],\n- [\"JACOBIAN_Q\", \"a01298.html#adf2020f3f6087064dde501c99794aac3a672276bd72f64f6b462004c89c57297b\", null],\n- [\"JACOBIAN_SVD\", \"a01298.html#adf2020f3f6087064dde501c99794aac3aca6b517d49e41094c865c321ddff5b81\", null]\n+ [\"LinearizationMode\", \"a01295.html#adf2020f3f6087064dde501c99794aac3\", [\n+ [\"HESSIAN\", \"a01295.html#adf2020f3f6087064dde501c99794aac3a94d642727a23c8b5a1b59b8f74553e80\", null],\n+ [\"IMPLICIT_SCHUR\", \"a01295.html#adf2020f3f6087064dde501c99794aac3a7a3f02bec869fc563591ecb84ea2eb7a\", null],\n+ [\"JACOBIAN_Q\", \"a01295.html#adf2020f3f6087064dde501c99794aac3a672276bd72f64f6b462004c89c57297b\", null],\n+ [\"JACOBIAN_SVD\", \"a01295.html#adf2020f3f6087064dde501c99794aac3aca6b517d49e41094c865c321ddff5b81\", null]\n ]]\n ];\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01304_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01364_source.html", "comments": ["Files 84% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/InitializePose3.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesTree.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n
\n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
InitializePose3.h
\n+
SymbolicBayesTree.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
21#pragma once
\n-
22
\n-
23#include <gtsam/geometry/Rot3.h>
\n-\n-\n-\n-\n-
28
\n-
29#include <map>
\n-
30#include <vector>
\n-
31
\n-
32namespace gtsam {
\n-
33
\n-
34typedef std::map<Key, std::vector<size_t> > KeyVectorMap;
\n-
35typedef std::map<Key, Rot3> KeyRotMap;
\n-
36
\n-
\n-
37struct GTSAM_EXPORT InitializePose3 {
\n-
38 static GaussianFactorGraph buildLinearOrientationGraph(
\n-
39 const NonlinearFactorGraph& g);
\n-
40
\n-
41 static Values normalizeRelaxedRotations(const VectorValues& relaxedRot3);
\n-
42
\n-
46 static Values computeOrientationsChordal(
\n-
47 const NonlinearFactorGraph& pose3Graph);
\n-
48
\n-
52 static Values computeOrientationsGradient(
\n-
53 const NonlinearFactorGraph& pose3Graph, const Values& givenGuess,
\n-
54 size_t maxIter = 10000, const bool setRefFrame = true);
\n-
55
\n-
56 static void createSymbolicGraph(const NonlinearFactorGraph& pose3Graph,
\n-
57 KeyVectorMap* adjEdgesMap,
\n-
58 KeyRotMap* factorId2RotMap);
\n-
59
\n-
60 static Vector3 gradientTron(const Rot3& R1, const Rot3& R2, const double a,
\n-
61 const double b);
\n-
62
\n-
67 static NonlinearFactorGraph buildPose3graph(
\n-
68 const NonlinearFactorGraph& graph);
\n-
69
\n-
73 static Values computePoses(const Values& initialRot,
\n-
74 NonlinearFactorGraph* poseGraph,
\n-
75 bool singleIter = true);
\n-
76
\n-
81 static Values initializeOrientations(const NonlinearFactorGraph& graph);
\n-
82
\n-
88 static Values initialize(const NonlinearFactorGraph& graph,
\n-
89 const Values& givenGuess, bool useGradient = false);
\n-
90
\n-
92 static Values initialize(const NonlinearFactorGraph& graph);
\n-
93};
\n-
\n-
94} // end of namespace gtsam
\n-
3D rotation represented as a rotation matrix or quaternion
\n-
Graph algorithm using boost library.
\n-
Factor Graph Values.
\n-
Linear Factor Graph where all factors are Gaussians.
\n-
Factor Graph consisting of non-linear factors.
\n+
19#pragma once
\n+
20
\n+\n+\n+\n+\n+
25
\n+
26namespace gtsam {
\n+
27
\n+
28 // Forward declarations
\n+
29 class SymbolicConditional;
\n+
30
\n+
31 /* ************************************************************************* */
\n+
\n+
33 class GTSAM_EXPORT SymbolicBayesTreeClique :
\n+
34 public BayesTreeCliqueBase<SymbolicBayesTreeClique, SymbolicFactorGraph>
\n+
35 {
\n+
36 public:
\n+\n+\n+
39 typedef boost::shared_ptr<This> shared_ptr;
\n+
40 typedef boost::weak_ptr<This> weak_ptr;
\n+\n+
42 virtual ~SymbolicBayesTreeClique() {}
\n+
43 SymbolicBayesTreeClique(const boost::shared_ptr<SymbolicConditional>& conditional) : Base(conditional) {}
\n+
44 };
\n+
\n+
45
\n+
46 /* ************************************************************************* */
\n+
\n+
49 class GTSAM_EXPORT SymbolicBayesTree :
\n+
50 public BayesTree<SymbolicBayesTreeClique>
\n+
51 {
\n+
52 private:
\n+\n+
54
\n+
55 public:
\n+
56 typedef SymbolicBayesTree This;
\n+
57 typedef boost::shared_ptr<This> shared_ptr;
\n+
58
\n+\n+
61
\n+
63 bool equals(const This& other, double tol = 1e-9) const;
\n+
64
\n+
65 private:
\n+
67 friend class boost::serialization::access;
\n+
68 template<class ARCHIVE>
\n+
69 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
70 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
71 }
\n+
72 };
\n+
\n+
73
\n+
75template<> struct traits<SymbolicBayesTreeClique> : public Testable<SymbolicBayesTreeClique> {};
\n+
76template<> struct traits<SymbolicBayesTree> : public Testable<SymbolicBayesTree> {};
\n+
77
\n+
78} //\\ namespace gtsam
\n+
79
\n+
Bayes Tree is a tree of cliques of a Bayes Chain.
\n+
Base class for cliques of a BayesTree.
\n+\n+\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:58
\n-
A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.
Definition GaussianFactorGraph.h:75
\n-
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n-
Definition NonlinearFactorGraph.h:55
\n-
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
\n-
Definition InitializePose3.h:37
\n+
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n+
Template to create a binary predicate.
Definition Testable.h:111
\n+
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n+
Bayes tree.
Definition BayesTree.h:67
\n+
This is the base class for BayesTree cliques.
Definition BayesTreeCliqueBase.h:50
\n+
A clique in a SymbolicBayesTree.
Definition SymbolicBayesTree.h:35
\n+
A Bayes tree that represents the connectivity between variables but is not associated with any probab...
Definition SymbolicBayesTree.h:51
\n+
SymbolicBayesTree()
Default constructor, creates an empty Bayes tree.
Definition SymbolicBayesTree.h:60
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,106 +1,120 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-InitializePose3.h\n+SymbolicBayesTree.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-21#pragma once\n-22\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bg_\be_\bo_\bm_\be_\bt_\br_\by_\b/_\bR_\bo_\bt_\b3_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bg_\br_\ba_\bp_\bh_\b._\bh>\n-25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh>\n-27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-28\n-29#include \n-30#include \n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n-33\n-34typedef std::map > KeyVectorMap;\n-35typedef std::map KeyRotMap;\n-36\n-_\b3_\b7struct GTSAM_EXPORT _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3 {\n-38 static _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh buildLinearOrientationGraph(\n-39 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& g);\n-40\n-41 static _\bV_\ba_\bl_\bu_\be_\bs normalizeRelaxedRotations(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& relaxedRot3);\n-42\n-46 static _\bV_\ba_\bl_\bu_\be_\bs computeOrientationsChordal(\n-47 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& pose3Graph);\n-48\n-52 static _\bV_\ba_\bl_\bu_\be_\bs computeOrientationsGradient(\n-53 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& pose3Graph, const _\bV_\ba_\bl_\bu_\be_\bs& givenGuess,\n-54 size_t maxIter = 10000, const bool setRefFrame = true);\n-55\n-56 static void createSymbolicGraph(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& pose3Graph,\n-57 KeyVectorMap* adjEdgesMap,\n-58 KeyRotMap* factorId2RotMap);\n-59\n-60 static Vector3 gradientTron(const _\bR_\bo_\bt_\b3& R1, const _\bR_\bo_\bt_\b3& R2, const double a,\n-61 const double b);\n-62\n-67 static _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh buildPose3graph(\n-68 const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph);\n-69\n-73 static _\bV_\ba_\bl_\bu_\be_\bs computePoses(const _\bV_\ba_\bl_\bu_\be_\bs& initialRot,\n-74 _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh* poseGraph,\n-75 bool singleIter = true);\n-76\n-81 static _\bV_\ba_\bl_\bu_\be_\bs initializeOrientations(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph);\n-82\n-88 static _\bV_\ba_\bl_\bu_\be_\bs initialize(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph,\n-89 const _\bV_\ba_\bl_\bu_\be_\bs& givenGuess, bool useGradient = false);\n-90\n-92 static _\bV_\ba_\bl_\bu_\be_\bs initialize(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& graph);\n-93};\n-94} // end of namespace gtsam\n-_\bR_\bo_\bt_\b3_\b._\bh\n-3D rotation represented as a rotation matrix or quaternion\n-_\bg_\br_\ba_\bp_\bh_\b._\bh\n-Graph algorithm using boost library.\n-_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs_\b._\bh\n-Factor Graph Values.\n-_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Linear Factor Graph where all factors are Gaussians.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph consisting of non-linear factors.\n+19#pragma once\n+20\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n+22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh>\n+25\n+26namespace _\bg_\bt_\bs_\ba_\bm {\n+27\n+28 // Forward declarations\n+29 class SymbolicConditional;\n+30\n+31 /* *************************************************************************\n+*/\n+_\b3_\b3 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be :\n+34 public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+35 {\n+36 public:\n+37 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be _\bT_\bh_\bi_\bs;\n+38 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b,_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>\n+_\bB_\ba_\bs_\be;\n+39 typedef boost::shared_ptr shared_ptr;\n+40 typedef boost::weak_ptr weak_ptr;\n+41 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n+42 virtual _\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n+43 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be(const boost::shared_ptr&\n+conditional) : _\bB_\ba_\bs_\be(conditional) {}\n+44 };\n+45\n+46 /* *************************************************************************\n+*/\n+_\b4_\b9 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be :\n+50 public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+51 {\n+52 private:\n+53 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bB_\ba_\bs_\be;\n+54\n+55 public:\n+56 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n+57 typedef boost::shared_ptr shared_ptr;\n+58\n+_\b6_\b0 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() {}\n+61\n+63 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n+64\n+65 private:\n+_\b6_\b7 friend class boost::serialization::access;\n+68 template\n+69 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+70 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+71 }\n+72 };\n+73\n+_\b7_\b5template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be> : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+_\b7_\b6template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be> : public\n+_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+77\n+78} //\\ namespace gtsam\n+79\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Bayes Tree is a tree of cliques of a Bayes Chain.\n+_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n+Base class for cliques of a BayesTree.\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\bo_\bt_\b3\n-Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor\n-symbol GTSAM_USE_QUATERNIO...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Rot3.h:58\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A Linear Factor Graph is a factor graph where all factors are Gaussian, i.e.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactorGraph.h:75\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n-VectorValues represents a collection of vector-valued variables associated each\n-with a unique integer...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactorGraph.h:55\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\bl_\bu_\be_\bs\n-A non-templated config holding any types of Manifold-group elements.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Values.h:65\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn InitializePose3.h:37\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n+A manifold defines a space in which there is a notion of a linear tangent space\n+that can be centered ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+Template to create a binary predicate.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n+A helper that implements the traits interface for GTSAM types.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n+This is the base class for BayesTree cliques.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:50\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n+A clique in a SymbolicBayesTree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesTree.h:35\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+A Bayes tree that represents the connectivity between variables but is not\n+associated with any probab...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesTree.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n+SymbolicBayesTree()\n+Default constructor, creates an empty Bayes tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesTree.h:60\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\bl_\ba_\bm\n- * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3_\b._\bh\n+ * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n+ * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01319_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00731_source.html", "comments": ["Files 78% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/BetweenFactor.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/linear/GaussianFactor.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
BetweenFactor.h
\n+
GaussianFactor.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
16#pragma once
\n-
17
\n-
18#include <ostream>
\n-
19
\n-
20#include <gtsam/base/Testable.h>
\n-
21#include <gtsam/base/Lie.h>
\n-\n-
23
\n-
24#ifdef _WIN32
\n-
25#define BETWEENFACTOR_VISIBILITY
\n-
26#else
\n-
27// This will trigger a LNKxxxx on MSVC, so disable for MSVC build
\n-
28// Please refer to https://github.com/borglab/gtsam/blob/develop/Using-GTSAM-EXPORT.md
\n-
29#define BETWEENFACTOR_VISIBILITY GTSAM_EXPORT
\n-
30#endif
\n-
31
\n-
32namespace gtsam {
\n+
19// \\callgraph
\n+
20
\n+
21#pragma once
\n+
22
\n+\n+
24#include <gtsam/base/Matrix.h>
\n+
25#include <gtsam/base/Testable.h>
\n+
26
\n+
27namespace gtsam {
\n+
28
\n+
29 // Forward declarations
\n+
30 class VectorValues;
\n+
31 class Scatter;
\n+
32 class SymmetricBlockMatrix;
\n
33
\n-
39 template<class VALUE>
\n-
\n-
40 class BetweenFactor: public NoiseModelFactorN<VALUE, VALUE> {
\n-
41
\n-
42 // Check that VALUE type is a testable Lie group
\n-
43 BOOST_CONCEPT_ASSERT((IsTestable<VALUE>));
\n-
44 BOOST_CONCEPT_ASSERT((IsLieGroup<VALUE>));
\n-
45
\n-
46 public:
\n+
\n+
38 class GTSAM_EXPORT GaussianFactor : public Factor
\n+
39 {
\n+
40 public:
\n+\n+
42 typedef boost::shared_ptr<This> shared_ptr;
\n+
43 typedef Factor Base;
\n+
44
\n+\n
47
\n-
48 typedef VALUE T;
\n-
49
\n-
50 private:
\n-
51
\n-
52 typedef BetweenFactor<VALUE> This;
\n-\n-
54
\n-
55 VALUE measured_;
\n-
57 public:
\n-
58
\n-
59 // shorthand for a smart pointer to a factor
\n-
60 typedef typename boost::shared_ptr<BetweenFactor> shared_ptr;
\n-
61
\n-
64
\n-\n-
67
\n-
\n-
69 BetweenFactor(Key key1, Key key2, const VALUE& measured,
\n-
70 const SharedNoiseModel& model = nullptr) :
\n-
71 Base(model, key1, key2), measured_(measured) {
\n-
72 }
\n-
\n-
73
\n-
75
\n-
76 ~BetweenFactor() override {}
\n-
77
\n-
\n-
79 gtsam::NonlinearFactor::shared_ptr clone() const override {
\n-
80 return boost::static_pointer_cast<gtsam::NonlinearFactor>(
\n-
81 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }
\n-
\n-
82
\n-
85
\n-
\n-
87 void print(
\n-
88 const std::string& s = "",
\n-
89 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
\n-
90 std::cout << s << "BetweenFactor("
\n-
91 << keyFormatter(this->key1()) << ","
\n-
92 << keyFormatter(this->key2()) << ")\\n";
\n-
93 traits<T>::Print(measured_, " measured: ");
\n-
94 this->noiseModel_->print(" noise model: ");
\n-
95 }
\n-
\n-
96
\n-
\n-
98 bool equals(const NonlinearFactor& expected, double tol=1e-9) const override {
\n-
99 const This *e = dynamic_cast<const This*> (&expected);
\n-
100 return e != nullptr && Base::equals(*e, tol) && traits<T>::Equals(this->measured_, e->measured_, tol);
\n-
101 }
\n-
\n-
102
\n-
106
\n-
\n-
108 Vector evaluateError(const T& p1, const T& p2, boost::optional<Matrix&> H1 =
\n-
109 boost::none, boost::optional<Matrix&> H2 = boost::none) const override {
\n-
110 T hx = traits<T>::Between(p1, p2, H1, H2); // h(x)
\n-
111 // manifold equivalent of h(x)-z -> log(z,h(x))
\n-
112#ifdef GTSAM_SLOW_BUT_CORRECT_BETWEENFACTOR
\n-\n-
114 Vector rval = traits<T>::Local(measured_, hx, boost::none, (H1 || H2) ? &Hlocal : 0);
\n-
115 if (H1) *H1 = Hlocal * (*H1);
\n-
116 if (H2) *H2 = Hlocal * (*H2);
\n-
117 return rval;
\n-
118#else
\n-
119 return traits<T>::Local(measured_, hx);
\n-
120#endif
\n-
121 }
\n-
\n+
50 template<typename CONTAINER>
\n+
51 GaussianFactor(const CONTAINER& keys) : Base(keys) {}
\n+
52
\n+
54 virtual ~GaussianFactor() {}
\n+
55
\n+
56 // Implementing Testable interface
\n+
57
\n+
59 void print(
\n+
60 const std::string& s = "",
\n+
61 const KeyFormatter& formatter = DefaultKeyFormatter) const override = 0;
\n+
62
\n+
64 virtual bool equals(const GaussianFactor& lf, double tol = 1e-9) const = 0;
\n+
65
\n+
73 virtual double error(const VectorValues& c) const;
\n+
74
\n+
79 double error(const HybridValues& c) const override;
\n+
80
\n+
82 virtual DenseIndex getDim(const_iterator variable) const = 0;
\n+
83
\n+
91 virtual Matrix augmentedJacobian() const = 0;
\n+
92
\n+
100 virtual std::pair<Matrix,Vector> jacobian() const = 0;
\n+
101
\n+
110 virtual Matrix augmentedInformation() const = 0;
\n+
111
\n+
115 virtual Matrix information() const = 0;
\n+
116
\n+
118 VectorValues hessianDiagonal() const;
\n+
119
\n+
121 virtual void hessianDiagonalAdd(VectorValues& d) const = 0;
\n
122
\n-
126
\n-
\n-
128 const VALUE& measured() const {
\n-
129 return measured_;
\n-
130 }
\n-
\n-
132
\n-
133 private:
\n-
134
\n-\n-
137 template<class ARCHIVE>
\n-
138 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
139 // NoiseModelFactor2 instead of NoiseModelFactorN for backward compatibility
\n-
140 ar & boost::serialization::make_nvp("NoiseModelFactor2",
\n-
141 boost::serialization::base_object<Base>(*this));
\n-
142 ar & BOOST_SERIALIZATION_NVP(measured_);
\n-
143 }
\n-
144
\n-
145 // Alignment, see https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html
\n-
146 enum { NeedsToAlign = (sizeof(VALUE) % 16) == 0 };
\n-
147 public:
\n-\n-
149 }; // \\class BetweenFactor
\n-
\n-
150
\n-
152 template<class VALUE>
\n-
153 struct traits<BetweenFactor<VALUE> > : public Testable<BetweenFactor<VALUE> > {};
\n-
154
\n-
160 template<class VALUE>
\n-
\n-
161 class BetweenConstraint : public BetweenFactor<VALUE> {
\n-
162 public:
\n-
163 typedef boost::shared_ptr<BetweenConstraint<VALUE> > shared_ptr;
\n+
124 virtual void hessianDiagonal(double* d) const = 0;
\n+
125
\n+
127 virtual std::map<Key,Matrix> hessianBlockDiagonal() const = 0;
\n+
128
\n+\n+
131
\n+\n+
138
\n+
144 virtual void updateHessian(const KeyVector& keys,
\n+
145 SymmetricBlockMatrix* info) const = 0;
\n+
146
\n+
148 virtual void multiplyHessianAdd(double alpha, const VectorValues& x, VectorValues& y) const = 0;
\n+
149
\n+
151 virtual VectorValues gradientAtZero() const = 0;
\n+
152
\n+
154 virtual void gradientAtZero(double* d) const = 0;
\n+
155
\n+
157 virtual Vector gradient(Key key, const VectorValues& x) const = 0;
\n+
158
\n+
159 // Determine position of a given key
\n+
160 template <typename CONTAINER>
\n+
161 static DenseIndex Slot(const CONTAINER& keys, Key key) {
\n+
162 return std::find(keys.begin(), keys.end(), key) - keys.begin();
\n+
163 }
\n
164
\n-
\n-
166 BetweenConstraint(const VALUE& measured, Key key1, Key key2, double mu = 1000.0) :
\n-
167 BetweenFactor<VALUE>(key1, key2, measured,
\n-
168 noiseModel::Constrained::All(traits<VALUE>::GetDimension(measured), std::abs(mu)))
\n-
169 {}
\n-
\n-
170
\n-
171 private:
\n+
165 private:
\n+
167 friend class boost::serialization::access;
\n+
168 template<class ARCHIVE>
\n+
169 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n+
170 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n+
171 }
\n
172
\n-\n-
175 template<class ARCHIVE>
\n-
176 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
177 ar & boost::serialization::make_nvp("BetweenFactor",
\n-
178 boost::serialization::base_object<BetweenFactor<VALUE> >(*this));
\n-
179 }
\n-
180 }; // \\class BetweenConstraint
\n+
173 }; // GaussianFactor
\n
\n-
181
\n-
183 template<class VALUE>
\n-
184 struct traits<BetweenConstraint<VALUE> > : public Testable<BetweenConstraint<VALUE> > {};
\n-
185
\n-
186}
\n-
#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)
This marks a GTSAM object to require alignment.
Definition types.h:317
\n-
Base class and basic functions for Lie types.
\n-
Concept check for values that can be used in unit tests.
\n-
Non-linear factor base classes.
\n+
174
\n+
176template<>
\n+
\n+
177struct traits<GaussianFactor> : public Testable<GaussianFactor> {
\n+
178};
\n+
\n+
179
\n+
180} // \\ namespace gtsam
\n+
typedef and functions to augment Eigen's MatrixXd
\n+
Concept check for values that can be used in unit tests.
\n+
The base class for all factors.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
noiseModel::Base::shared_ptr SharedNoiseModel
Aliases.
Definition NoiseModel.h:724
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition types.h:106
\n
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Lie Group Concept.
Definition Lie.h:260
\n-
A testable concept check that should be placed in applicable unit tests and in generic algorithms.
Definition Testable.h:58
\n+
This class stores a dense matrix and allows it to be accessed as a collection of blocks.
Definition SymmetricBlockMatrix.h:52
\n
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
bool equals(const This &other, double tol=1e-9) const
check equality
Definition Factor.cpp:42
\n-
Nonlinear factor base class.
Definition NonlinearFactor.h:42
\n-
const SharedNoiseModel & noiseModel() const
access to the noise model
Definition NonlinearFactor.h:223
\n-
A convenient base class for creating your own NoiseModelFactor with n variables.
Definition NonlinearFactor.h:400
\n-
A class for a measurement predicted by "between(config[key1],config[key2])".
Definition BetweenFactor.h:40
\n-
BetweenFactor()
default constructor - only use for serialization
Definition BetweenFactor.h:66
\n-
bool equals(const NonlinearFactor &expected, double tol=1e-9) const override
assert equality up to a tolerance
Definition BetweenFactor.h:98
\n-
gtsam::NonlinearFactor::shared_ptr clone() const override
Definition BetweenFactor.h:79
\n-
boost::shared_ptr< BetweenFactor > shared_ptr
The measurement.
Definition BetweenFactor.h:60
\n-
const VALUE & measured() const
return the measurement
Definition BetweenFactor.h:128
\n-
BetweenFactor(Key key1, Key key2, const VALUE &measured, const SharedNoiseModel &model=nullptr)
Constructor.
Definition BetweenFactor.h:69
\n-
friend class boost::serialization::access
Serialization function.
Definition BetweenFactor.h:136
\n-
Vector evaluateError(const T &p1, const T &p2, boost::optional< Matrix & > H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override
evaluate error, returns vector of errors size of tangent space
Definition BetweenFactor.h:108
\n-
void print(const std::string &s="", const KeyFormatter &keyFormatter=DefaultKeyFormatter) const override
print with optional string
Definition BetweenFactor.h:87
\n-
Binary between constraint - forces between to a given value This constraint requires the underlying t...
Definition BetweenFactor.h:161
\n-
BetweenConstraint(const VALUE &measured, Key key1, Key key2, double mu=1000.0)
Syntactic sugar for constrained version.
Definition BetweenFactor.h:166
\n-
friend class boost::serialization::access
Serialization function.
Definition BetweenFactor.h:174
\n+
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition HybridValues.h:38
\n+
Definition Factor.h:68
\n+
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition Factor.h:80
\n+
An abstract virtual base class for JacobianFactor and HessianFactor.
Definition GaussianFactor.h:39
\n+
virtual DenseIndex getDim(const_iterator variable) const =0
Return the dimension of the variable pointed to by the given key iterator.
\n+
virtual std::map< Key, Matrix > hessianBlockDiagonal() const =0
Return the block diagonal of the Hessian for this factor.
\n+
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition GaussianFactor.h:42
\n+
virtual std::pair< Matrix, Vector > jacobian() const =0
Return the dense Jacobian and right-hand-side , with the noise models baked into A and b.
\n+
virtual Vector gradient(Key key, const VectorValues &x) const =0
Gradient wrt a key at any values.
\n+
virtual GaussianFactor::shared_ptr clone() const =0
Clone a factor (make a deep copy)
\n+
virtual Matrix information() const =0
Return the non-augmented information matrix represented by this GaussianFactor.
\n+
Factor Base
Our base class.
Definition GaussianFactor.h:43
\n+
virtual ~GaussianFactor()
Destructor.
Definition GaussianFactor.h:54
\n+
virtual VectorValues gradientAtZero() const =0
A'*b for Jacobian, eta for Hessian.
\n+
GaussianFactor(const CONTAINER &keys)
Construct from container of keys.
Definition GaussianFactor.h:51
\n+
virtual void multiplyHessianAdd(double alpha, const VectorValues &x, VectorValues &y) const =0
y += alpha * A'*A*x
\n+
virtual bool equals(const GaussianFactor &lf, double tol=1e-9) const =0
Equals for testable.
\n+
virtual Matrix augmentedInformation() const =0
Return the augmented information matrix represented by this GaussianFactor.
\n+
virtual Matrix augmentedJacobian() const =0
Return a dense Jacobian matrix, augmented with b with the noise models baked into A and b.
\n+
GaussianFactor()
Default constructor creates empty factor.
Definition GaussianFactor.h:46
\n+
virtual GaussianFactor::shared_ptr negate() const =0
Construct the corresponding anti-factor to negate information stored stored in this factor.
\n+
virtual void hessianDiagonal(double *d) const =0
Raw memory access version of hessianDiagonal.
\n+
GaussianFactor This
This class.
Definition GaussianFactor.h:41
\n+
virtual void updateHessian(const KeyVector &keys, SymmetricBlockMatrix *info) const =0
Update an information matrix by adding the information corresponding to this factor (used internally ...
\n+
void print(const std::string &s="", const KeyFormatter &formatter=DefaultKeyFormatter) const override=0
print
\n+
virtual void hessianDiagonalAdd(VectorValues &d) const =0
Add the current diagonal to a VectorValues instance.
\n+
virtual void gradientAtZero(double *d) const =0
Raw memory access version of gradientAtZero.
\n+
VectorValues represents a collection of vector-valued variables associated each with a unique integer...
Definition VectorValues.h:74
\n+
The Factor::error simply extracts the.
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,278 +1,255 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-BetweenFactor.h\n+GaussianFactor.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-16#pragma once\n-17\n-18#include \n-19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bL_\bi_\be_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23\n-24#ifdef _WIN32\n-25#define BETWEENFACTOR_VISIBILITY\n-26#else\n-27// This will trigger a LNKxxxx on MSVC, so disable for MSVC build\n-28// Please refer to https://github.com/borglab/gtsam/blob/develop/Using-GTSAM-\n-EXPORT.md\n-29#define BETWEENFACTOR_VISIBILITY GTSAM_EXPORT\n-30#endif\n-31\n-32namespace _\bg_\bt_\bs_\ba_\bm {\n+19// \\callgraph\n+20\n+21#pragma once\n+22\n+23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n+24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh>\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh>\n+26\n+27namespace _\bg_\bt_\bs_\ba_\bm {\n+28\n+29 // Forward declarations\n+30 class _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs;\n+31 class Scatter;\n+32 class SymmetricBlockMatrix;\n 33\n-39 template\n-_\b4_\b0 class _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br: public _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN {\n-41\n-42 // Check that VALUE type is a testable Lie group\n-43 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b<_\bV_\bA_\bL_\bU_\bE_\b>));\n-44 BOOST_CONCEPT_ASSERT((_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp_\b<_\bV_\bA_\bL_\bU_\bE_\b>));\n-45\n-46 public:\n+_\b3_\b8 class GTSAM_EXPORT _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br : public _\bF_\ba_\bc_\bt_\bo_\br\n+39 {\n+40 public:\n+_\b4_\b1 typedef _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br _\bT_\bh_\bi_\bs;\n+_\b4_\b2 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+_\b4_\b3 typedef _\bF_\ba_\bc_\bt_\bo_\br _\bB_\ba_\bs_\be;\n+44\n+_\b4_\b6 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n 47\n-48 typedef VALUE T;\n-49\n-50 private:\n-51\n-52 typedef _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bV_\bA_\bL_\bU_\bE_\b> This;\n-53 typedef _\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN_\b<_\bV_\bA_\bL_\bU_\bE_\b,_\b _\bV_\bA_\bL_\bU_\bE_\b> _\bB_\ba_\bs_\be;\n-54\n-55 VALUE measured_;\n-57 public:\n-58\n-59 // shorthand for a smart pointer to a factor\n-_\b6_\b0 typedef typename boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-61\n-64\n-_\b6_\b6 _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n-67\n-_\b6_\b9 _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br(_\bK_\be_\by key1, _\bK_\be_\by key2, const VALUE& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd,\n-70 const _\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl& model = nullptr) :\n-71 _\bB_\ba_\bs_\be(model, key1, key2), measured_(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd) {\n-72 }\n-73\n-75\n-76 _\b~_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br() override {}\n-77\n-_\b7_\b9 gtsam::NonlinearFactor::shared_ptr _\bc_\bl_\bo_\bn_\be() const override {\n-80 return boost::static_pointer_cast(\n-81 gtsam::NonlinearFactor::shared_ptr(new This(*this))); }\n-82\n-85\n-_\b8_\b7 void _\bp_\br_\bi_\bn_\bt(\n-88 const std::string& s = \"\",\n-89 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& keyFormatter = DefaultKeyFormatter) const override {\n-90 std::cout << s << \"BetweenFactor(\"\n-91 << keyFormatter(this->key1()) << \",\"\n-92 << keyFormatter(this->key2()) << \")\\n\";\n-93 _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bP_\br_\bi_\bn_\bt(measured_, \" measured: \");\n-94 this->noiseModel_->print(\" noise model: \");\n-95 }\n-96\n-_\b9_\b8 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br& expected, double tol=1e-9) const override\n-{\n-99 const This *e = dynamic_cast (&expected);\n-100 return e != nullptr && _\bB_\ba_\bs_\be_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs(*e, tol) && _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bE_\bq_\bu_\ba_\bl_\bs(this-\n->measured_, e->measured_, tol);\n-101 }\n-102\n-106\n-_\b1_\b0_\b8 Vector _\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br(const T& p1, const T& p2, boost::optional H1\n-=\n-109 boost::none, boost::optional H2 = boost::none) const override {\n-110 T hx = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn(p1, p2, H1, H2); // h(x)\n-111 // manifold equivalent of h(x)-z -> log(z,h(x))\n-112#ifdef GTSAM_SLOW_BUT_CORRECT_BETWEENFACTOR\n-113 typename _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bC_\bh_\ba_\br_\bt_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn Hlocal;\n-114 Vector rval = _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured_, hx, boost::none, (H1 || H2) ?\n-&Hlocal : 0);\n-115 if (H1) *H1 = Hlocal * (*H1);\n-116 if (H2) *H2 = Hlocal * (*H2);\n-117 return rval;\n-118#else\n-119 return _\bt_\br_\ba_\bi_\bt_\bs_\b<_\bT_\b>_\b:_\b:_\bL_\bo_\bc_\ba_\bl(measured_, hx);\n-120#endif\n-121 }\n+50 template\n+_\b5_\b1 _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br(const CONTAINER& keys) : _\bB_\ba_\bs_\be(keys) {}\n+52\n+_\b5_\b4 virtual _\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br() {}\n+55\n+56 // Implementing Testable interface\n+57\n+_\b5_\b9 void _\bp_\br_\bi_\bn_\bt(\n+60 const std::string& s = \"\",\n+61 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override = 0;\n+62\n+_\b6_\b4 virtual bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br& lf, double tol = 1e-9) const = 0;\n+65\n+73 virtual double error(const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& c) const;\n+74\n+79 double error(const _\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs& c) const override;\n+80\n+_\b8_\b2 virtual _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx _\bg_\be_\bt_\bD_\bi_\bm(_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br variable) const = 0;\n+83\n+_\b9_\b1 virtual Matrix _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn() const = 0;\n+92\n+_\b1_\b0_\b0 virtual std::pair _\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn() const = 0;\n+101\n+_\b1_\b1_\b0 virtual Matrix _\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn() const = 0;\n+111\n+_\b1_\b1_\b5 virtual Matrix _\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn() const = 0;\n+116\n+118 _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs hessianDiagonal() const;\n+119\n+_\b1_\b2_\b1 virtual void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bA_\bd_\bd(_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& d) const = 0;\n 122\n-126\n-_\b1_\b2_\b8 const VALUE& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd() const {\n-129 return measured_;\n-130 }\n-132\n-133 private:\n-134\n-_\b1_\b3_\b6 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-137 template\n-138 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-139 // NoiseModelFactor2 instead of NoiseModelFactorN for backward\n-compatibility\n-140 ar & boost::serialization::make_nvp(\"NoiseModelFactor2\",\n-141 boost::serialization::base_object(*this));\n-142 ar & BOOST_SERIALIZATION_NVP(measured_);\n-143 }\n-144\n-145 // Alignment, see https://eigen.tuxfamily.org/dox/\n-group__TopicStructHavingEigenMembers.html\n-146 enum { NeedsToAlign = (sizeof(VALUE) % 16) == 0 };\n-147 public:\n-148 _\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF(NeedsToAlign)\n-149 }; // \\class BetweenFactor\n-150\n-152 template\n-_\b1_\b5_\b3 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br > : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-> {};\n-154\n-160 template\n-_\b1_\b6_\b1 class _\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt : public _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n-162 public:\n-163 typedef boost::shared_ptr > shared_ptr;\n+_\b1_\b2_\b4 virtual void _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl(double* d) const = 0;\n+125\n+_\b1_\b2_\b7 virtual std::map _\bh_\be_\bs_\bs_\bi_\ba_\bn_\bB_\bl_\bo_\bc_\bk_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl() const = 0;\n+128\n+_\b1_\b3_\b0 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bc_\bl_\bo_\bn_\be() const = 0;\n+131\n+_\b1_\b3_\b7 virtual _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br _\bn_\be_\bg_\ba_\bt_\be() const = 0;\n+138\n+_\b1_\b4_\b4 virtual void _\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& keys,\n+145 _\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx* info) const = 0;\n+146\n+_\b1_\b4_\b8 virtual void _\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd(double alpha, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x,\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& y) const = 0;\n+149\n+_\b1_\b5_\b1 virtual _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo() const = 0;\n+152\n+_\b1_\b5_\b4 virtual void _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo(double* d) const = 0;\n+155\n+_\b1_\b5_\b7 virtual Vector _\bg_\br_\ba_\bd_\bi_\be_\bn_\bt(_\bK_\be_\by key, const _\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs& x) const = 0;\n+158\n+159 // Determine position of a given key\n+160 template \n+161 static _\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx Slot(const CONTAINER& keys, _\bK_\be_\by key) {\n+162 return std::find(keys.begin(), keys.end(), key) - keys.begin();\n+163 }\n 164\n-_\b1_\b6_\b6 _\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt(const VALUE& _\bm_\be_\ba_\bs_\bu_\br_\be_\bd, _\bK_\be_\by key1, _\bK_\be_\by key2, double mu =\n-1000.0) :\n-167 _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br(key1, key2, _\bm_\be_\ba_\bs_\bu_\br_\be_\bd,\n-168 _\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl::Constrained::All(_\bt_\br_\ba_\bi_\bt_\bs::GetDimension(_\bm_\be_\ba_\bs_\bu_\br_\be_\bd), std::\n-abs(mu)))\n-169 {}\n-170\n-171 private:\n+165 private:\n+_\b1_\b6_\b7 friend class boost::serialization::access;\n+168 template\n+169 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n+170 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n+171 }\n 172\n-_\b1_\b7_\b4 friend class _\bb_\bo_\bo_\bs_\bt_\b:_\b:_\bs_\be_\br_\bi_\ba_\bl_\bi_\bz_\ba_\bt_\bi_\bo_\bn_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs;\n-175 template\n-176 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-177 ar & boost::serialization::make_nvp(\"BetweenFactor\",\n-178 boost::serialization::base_object<_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bV_\bA_\bL_\bU_\bE_\b> >(*this));\n-179 }\n-180 }; // \\class BetweenConstraint\n-181\n-183 template\n-_\b1_\b8_\b4 struct _\bt_\br_\ba_\bi_\bt_\bs<_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt > : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be > {};\n-185\n-186}\n-_\bG_\bT_\bS_\bA_\bM_\b__\bM_\bA_\bK_\bE_\b__\bA_\bL_\bI_\bG_\bN_\bE_\bD_\b__\bO_\bP_\bE_\bR_\bA_\bT_\bO_\bR_\b__\bN_\bE_\bW_\b__\bI_\bF\n-#define GTSAM_MAKE_ALIGNED_OPERATOR_NEW_IF(NeedsToAlign)\n-This marks a GTSAM object to require alignment.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:317\n-_\bL_\bi_\be_\b._\bh\n-Base class and basic functions for Lie types.\n+173 }; // GaussianFactor\n+174\n+176template<>\n+_\b1_\b7_\b7struct _\bt_\br_\ba_\bi_\bt_\bs<_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n+178};\n+179\n+180} // \\ namespace gtsam\n+_\bM_\ba_\bt_\br_\bi_\bx_\b._\bh\n+typedef and functions to augment Eigen's MatrixXd\n _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be_\b._\bh\n Concept check for values that can be used in unit tests.\n-_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-Non-linear factor base classes.\n+_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+The base class for all factors.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\bh_\ba_\br_\be_\bd_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-noiseModel::Base::shared_ptr SharedNoiseModel\n-Aliases.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NoiseModel.h:724\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bD_\be_\bn_\bs_\be_\bI_\bn_\bd_\be_\bx\n+ptrdiff_t DenseIndex\n+The index type for Eigen objects.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:106\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n std::uint64_t Key\n Integer nonlinear key type.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n std::function< std::string(Key)> KeyFormatter\n Typedef for a function to format a key, i.e. to convert it to a string.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n A manifold defines a space in which there is a notion of a linear tangent space\n that can be centered ...\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bL_\bi_\be_\bG_\br_\bo_\bu_\bp\n-Lie Group Concept.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Lie.h:260\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bs_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A testable concept check that should be placed in applicable unit tests and in\n-generic algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:58\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bm_\be_\bt_\br_\bi_\bc_\bB_\bl_\bo_\bc_\bk_\bM_\ba_\bt_\br_\bi_\bx\n+This class stores a dense matrix and allows it to be accessed as a collection\n+of blocks.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymmetricBlockMatrix.h:52\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n A helper that implements the traits interface for GTSAM types.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const This &other, double tol=1e-9) const\n-check equality\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.cpp:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br\n-Nonlinear factor base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl\n-const SharedNoiseModel & noiseModel() const\n-access to the noise model\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:223\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bN_\bo_\bi_\bs_\be_\bM_\bo_\bd_\be_\bl_\bF_\ba_\bc_\bt_\bo_\br_\bN\n-A convenient base class for creating your own NoiseModelFactor with n\n-variables.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn NonlinearFactor.h:400\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-A class for a measurement predicted by \"between(config[key1],config[key2])\".\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-BetweenFactor()\n-default constructor - only use for serialization\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:66\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-bool equals(const NonlinearFactor &expected, double tol=1e-9) const override\n-assert equality up to a tolerance\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:98\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n-gtsam::NonlinearFactor::shared_ptr clone() const override\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:79\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< BetweenFactor > shared_ptr\n-The measurement.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:60\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\be_\ba_\bs_\bu_\br_\be_\bd\n-const VALUE & measured() const\n-return the measurement\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:128\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br\n-BetweenFactor(Key key1, Key key2, const VALUE &measured, const SharedNoiseModel\n-&model=nullptr)\n-Constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:136\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bv_\ba_\bl_\bu_\ba_\bt_\be_\bE_\br_\br_\bo_\br\n-Vector evaluateError(const T &p1, const T &p2, boost::optional< Matrix & >\n-H1=boost::none, boost::optional< Matrix & > H2=boost::none) const override\n-evaluate error, returns vector of errors size of tangent space\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:108\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bH_\by_\bb_\br_\bi_\bd_\bV_\ba_\bl_\bu_\be_\bs\n+HybridValues represents a collection of DiscreteValues and VectorValues.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn HybridValues.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:68\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bo_\bn_\bs_\bt_\b__\bi_\bt_\be_\br_\ba_\bt_\bo_\br\n+KeyVector::const_iterator const_iterator\n+Const iterator over keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:80\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+An abstract virtual base class for JacobianFactor and HessianFactor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\be_\bt_\bD_\bi_\bm\n+virtual DenseIndex getDim(const_iterator variable) const =0\n+Return the dimension of the variable pointed to by the given key iterator.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bB_\bl_\bo_\bc_\bk_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+virtual std::map< Key, Matrix > hessianBlockDiagonal() const =0\n+Return the block diagonal of the Hessian for this factor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n+boost::shared_ptr< This > shared_ptr\n+shared_ptr to this class\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:42\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bj_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+virtual std::pair< Matrix, Vector > jacobian() const =0\n+Return the dense Jacobian and right-hand-side , with the noise models baked\n+into A and b.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt\n+virtual Vector gradient(Key key, const VectorValues &x) const =0\n+Gradient wrt a key at any values.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bc_\bl_\bo_\bn_\be\n+virtual GaussianFactor::shared_ptr clone() const =0\n+Clone a factor (make a deep copy)\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bi_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+virtual Matrix information() const =0\n+Return the non-augmented information matrix represented by this GaussianFactor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bB_\ba_\bs_\be\n+Factor Base\n+Our base class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:43\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\b~_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+virtual ~GaussianFactor()\n+Destructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n+virtual VectorValues gradientAtZero() const =0\n+A'*b for Jacobian, eta for Hessian.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+GaussianFactor(const CONTAINER &keys)\n+Construct from container of keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bm_\bu_\bl_\bt_\bi_\bp_\bl_\by_\bH_\be_\bs_\bs_\bi_\ba_\bn_\bA_\bd_\bd\n+virtual void multiplyHessianAdd(double alpha, const VectorValues &x,\n+VectorValues &y) const =0\n+y += alpha * A'*A*x\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n+virtual bool equals(const GaussianFactor &lf, double tol=1e-9) const =0\n+Equals for testable.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bI_\bn_\bf_\bo_\br_\bm_\ba_\bt_\bi_\bo_\bn\n+virtual Matrix augmentedInformation() const =0\n+Return the augmented information matrix represented by this GaussianFactor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\ba_\bu_\bg_\bm_\be_\bn_\bt_\be_\bd_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+virtual Matrix augmentedJacobian() const =0\n+Return a dense Jacobian matrix, augmented with b with the noise models baked\n+into A and b.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+GaussianFactor()\n+Default constructor creates empty factor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:46\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bn_\be_\bg_\ba_\bt_\be\n+virtual GaussianFactor::shared_ptr negate() const =0\n+Construct the corresponding anti-factor to negate information stored stored in\n+this factor.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl\n+virtual void hessianDiagonal(double *d) const =0\n+Raw memory access version of hessianDiagonal.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bT_\bh_\bi_\bs\n+GaussianFactor This\n+This class.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn GaussianFactor.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bH_\be_\bs_\bs_\bi_\ba_\bn\n+virtual void updateHessian(const KeyVector &keys, SymmetricBlockMatrix *info)\n+const =0\n+Update an information matrix by adding the information corresponding to this\n+factor (used internally ...\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bp_\br_\bi_\bn_\bt\n void print(const std::string &s=\"\", const KeyFormatter\n-&keyFormatter=DefaultKeyFormatter) const override\n-print with optional string\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:87\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n-Binary between constraint - forces between to a given value This constraint\n-requires the underlying t...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:161\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt\n-BetweenConstraint(const VALUE &measured, Key key1, Key key2, double mu=1000.0)\n-Syntactic sugar for constrained version.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:166\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\be_\bt_\bw_\be_\be_\bn_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\bt_\b:_\b:_\ba_\bc_\bc_\be_\bs_\bs\n-friend class boost::serialization::access\n-Serialization function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BetweenFactor.h:174\n+&formatter=DefaultKeyFormatter) const override=0\n+print\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bh_\be_\bs_\bs_\bi_\ba_\bn_\bD_\bi_\ba_\bg_\bo_\bn_\ba_\bl_\bA_\bd_\bd\n+virtual void hessianDiagonalAdd(VectorValues &d) const =0\n+Add the current diagonal to a VectorValues instance.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bg_\br_\ba_\bd_\bi_\be_\bn_\bt_\bA_\bt_\bZ_\be_\br_\bo\n+virtual void gradientAtZero(double *d) const =0\n+Raw memory access version of gradientAtZero.\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+VectorValues represents a collection of vector-valued variables associated each\n+with a unique integer...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VectorValues.h:74\n+_\bV_\be_\bc_\bt_\bo_\br_\bV_\ba_\bl_\bu_\be_\bs\n+The Factor::error simply extracts the.\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\bl_\ba_\bm\n- * _\bB_\be_\bt_\bw_\be_\be_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+ * _\bl_\bi_\bn_\be_\ba_\br\n+ * _\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01340.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01022.html", "comments": ["Files 95% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/InitializePose3.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/GraphvizFormatting.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
InitializePose3.cpp File Reference
\n+
GraphvizFormatting.cpp File Reference
\n
\n
\n+\n+

Graphviz formatter for NonlinearFactorGraph. \n+More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Author
Luca Carlone
\n-
\n-Frank Dellaert
\n-
Date
August, 2014
\n+

Graphviz formatter for NonlinearFactorGraph.

\n+
Author
Frank Dellaert
\n+
Date
December, 2021
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,21 +1,22 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-InitializePose3.cpp File Reference\n+GraphvizFormatting.cpp File Reference\n+Graphviz formatter for NonlinearFactorGraph. _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n+Graphviz formatter for NonlinearFactorGraph.\n Author\n- Luca Carlone\n Frank Dellaert\n Date\n- August, 2014\n+ December, 2021\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\bl_\ba_\bm\n- * _\bI_\bn_\bi_\bt_\bi_\ba_\bl_\bi_\bz_\be_\bP_\bo_\bs_\be_\b3_\b._\bc_\bp_\bp\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bG_\br_\ba_\bp_\bh_\bv_\bi_\bz_\bF_\bo_\br_\bm_\ba_\bt_\bt_\bi_\bn_\bg_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01346_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00431_source.html", "comments": ["Files 92% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicBayesTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Point2.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SymbolicBayesTree.h
\n+
Point2.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
28 // Forward declarations
\n-
29 class SymbolicConditional;
\n-
30
\n-
31 /* ************************************************************************* */
\n-
\n-
33 class GTSAM_EXPORT SymbolicBayesTreeClique :
\n-
34 public BayesTreeCliqueBase<SymbolicBayesTreeClique, SymbolicFactorGraph>
\n-
35 {
\n-
36 public:
\n-\n-\n-
39 typedef boost::shared_ptr<This> shared_ptr;
\n-
40 typedef boost::weak_ptr<This> weak_ptr;
\n-\n-
42 virtual ~SymbolicBayesTreeClique() {}
\n-
43 SymbolicBayesTreeClique(const boost::shared_ptr<SymbolicConditional>& conditional) : Base(conditional) {}
\n-
44 };
\n-
\n+
18#pragma once
\n+
19
\n+
20#include <gtsam/base/VectorSpace.h>
\n+
21#include <boost/serialization/nvp.hpp>
\n+
22
\n+
23namespace gtsam {
\n+
24
\n+
27typedef Vector2 Point2;
\n+
28
\n+
29// Convenience typedef
\n+
30using Point2Pair = std::pair<Point2, Point2>;
\n+
31GTSAM_EXPORT std::ostream &operator<<(std::ostream &os, const gtsam::Point2Pair &p);
\n+
32
\n+
33using Point2Pairs = std::vector<Point2Pair>;
\n+
34
\n+
36GTSAM_EXPORT double norm2(const Point2& p, OptionalJacobian<1, 2> H = boost::none);
\n+
37
\n+
39GTSAM_EXPORT double distance2(const Point2& p1, const Point2& q,
\n+
40 OptionalJacobian<1, 2> H1 = boost::none,
\n+
41 OptionalJacobian<1, 2> H2 = boost::none);
\n+
42
\n+
43// For MATLAB wrapper
\n+
44typedef std::vector<Point2, Eigen::aligned_allocator<Point2> > Point2Vector;
\n
45
\n-
46 /* ************************************************************************* */
\n-
\n-
49 class GTSAM_EXPORT SymbolicBayesTree :
\n-
50 public BayesTree<SymbolicBayesTreeClique>
\n-
51 {
\n-
52 private:
\n-\n-
54
\n-
55 public:
\n-
56 typedef SymbolicBayesTree This;
\n-
57 typedef boost::shared_ptr<This> shared_ptr;
\n-
58
\n-\n-
61
\n-
63 bool equals(const This& other, double tol = 1e-9) const;
\n-
64
\n-
65 private:
\n-
67 friend class boost::serialization::access;
\n-
68 template<class ARCHIVE>
\n-
69 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
70 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
71 }
\n-
72 };
\n-
\n-
73
\n-
75template<> struct traits<SymbolicBayesTreeClique> : public Testable<SymbolicBayesTreeClique> {};
\n-
76template<> struct traits<SymbolicBayesTree> : public Testable<SymbolicBayesTree> {};
\n+
\n+
47inline Point2 operator*(double s, const Point2& p) {
\n+
48 return Point2(s * p.x(), s * p.y());
\n+
49}
\n+
\n+
50
\n+
51/*
\n+
52 * @brief Circle-circle intersection, given normalized radii.
\n+
53 * Calculate f and h, respectively the parallel and perpendicular distance of
\n+
54 * the intersections of two circles along and from the line connecting the centers.
\n+
55 * Both are dimensionless fractions of the distance d between the circle centers.
\n+
56 * If the circles do not intersect or they are identical, returns boost::none.
\n+
57 * If one solution (touching circles, as determined by tol), h will be exactly zero.
\n+
58 * h is a good measure for how accurate the intersection will be, as when circles touch
\n+
59 * or nearly touch, the intersection is ill-defined with noisy radius measurements.
\n+
60 * @param R_d : R/d, ratio of radius of first circle to distance between centers
\n+
61 * @param r_d : r/d, ratio of radius of second circle to distance between centers
\n+
62 * @param tol: absolute tolerance below which we consider touching circles
\n+
63 * @return optional Point2 with f and h, boost::none if no solution.
\n+
64 */
\n+
65GTSAM_EXPORT boost::optional<Point2> circleCircleIntersection(double R_d, double r_d, double tol = 1e-9);
\n+
66
\n+
67/*
\n+
68 * @brief Circle-circle intersection, from the normalized radii solution.
\n+
69 * @param c1 center of first circle
\n+
70 * @param c2 center of second circle
\n+
71 * @return list of solutions (0,1, or 2). Identical circles will return empty list, as well.
\n+
72 */
\n+
73GTSAM_EXPORT std::list<Point2> circleCircleIntersection(Point2 c1, Point2 c2, boost::optional<Point2> fh);
\n+
74
\n+
76GTSAM_EXPORT Point2Pair means(const std::vector<Point2Pair> &abPointPairs);
\n
77
\n-
78} //\\ namespace gtsam
\n-
79
\n-
Base class for cliques of a BayesTree.
\n-
Bayes Tree is a tree of cliques of a Bayes Chain.
\n-\n-\n+
87GTSAM_EXPORT std::list<Point2> circleCircleIntersection(Point2 c1, double r1,
\n+
88 Point2 c2, double r2, double tol = 1e-9);
\n+
89
\n+
90template <typename A1, typename A2>
\n+
91struct Range;
\n+
92
\n+
93template <>
\n+
\n+\n+
95 typedef double result_type;
\n+
96 double operator()(const Point2& p, const Point2& q,
\n+
97 OptionalJacobian<1, 2> H1 = boost::none,
\n+
98 OptionalJacobian<1, 2> H2 = boost::none) {
\n+
99 return distance2(p, q, H1, H2);
\n+
100 }
\n+
101};
\n+
\n+
102
\n+
103} // \\ namespace gtsam
\n+
104
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
Bayes tree.
Definition BayesTree.h:67
\n-
This is the base class for BayesTree cliques.
Definition BayesTreeCliqueBase.h:50
\n-
A clique in a SymbolicBayesTree.
Definition SymbolicBayesTree.h:35
\n-
A Bayes tree that represents the connectivity between variables but is not associated with any probab...
Definition SymbolicBayesTree.h:51
\n-
SymbolicBayesTree()
Default constructor, creates an empty Bayes tree.
Definition SymbolicBayesTree.h:60
\n+
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
\n+
Vector2 Point2
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point2 to Vector2...
Definition Point2.h:27
\n+
Point2Pair means(const std::vector< Point2Pair > &abPointPairs)
Calculate the two means of a set of Point2 pairs.
Definition Point2.cpp:116
\n+
double distance2(const Point2 &p, const Point2 &q, OptionalJacobian< 1, 2 > H1, OptionalJacobian< 1, 2 > H2)
distance between two points
Definition Point2.cpp:39
\n+
double norm2(const Point2 &p, OptionalJacobian< 1, 2 > H)
Distance of the point from the origin, with Jacobian.
Definition Point2.cpp:27
\n+
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:41
\n+
Definition BearingRange.h:40
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,120 +1,140 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicBayesTree.h\n+Point2.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh>\n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-28 // Forward declarations\n-29 class SymbolicConditional;\n-30\n-31 /* *************************************************************************\n-*/\n-_\b3_\b3 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be :\n-34 public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-35 {\n-36 public:\n-37 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be _\bT_\bh_\bi_\bs;\n-38 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b,_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b>\n-_\bB_\ba_\bs_\be;\n-39 typedef boost::shared_ptr shared_ptr;\n-40 typedef boost::weak_ptr weak_ptr;\n-41 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n-42 virtual _\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be() {}\n-43 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be(const boost::shared_ptr&\n-conditional) : _\bB_\ba_\bs_\be(conditional) {}\n-44 };\n+18#pragma once\n+19\n+20#include \n+21#include \n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+_\b2_\b7typedef Vector2 _\bP_\bo_\bi_\bn_\bt_\b2;\n+28\n+29// Convenience typedef\n+30using Point2Pair = std::pair;\n+31GTSAM_EXPORT std::ostream &operator<<(std::ostream &os, const gtsam::\n+Point2Pair &p);\n+32\n+33using Point2Pairs = std::vector;\n+34\n+36GTSAM_EXPORT double _\bn_\bo_\br_\bm_\b2(const _\bP_\bo_\bi_\bn_\bt_\b2& p, _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H = boost::\n+none);\n+37\n+39GTSAM_EXPORT double _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b2(const _\bP_\bo_\bi_\bn_\bt_\b2& p1, const _\bP_\bo_\bi_\bn_\bt_\b2& q,\n+40 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H1 = boost::none,\n+41 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H2 = boost::none);\n+42\n+43// For MATLAB wrapper\n+44typedef std::vector > Point2Vector;\n 45\n-46 /* *************************************************************************\n-*/\n-_\b4_\b9 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be :\n-50 public _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-51 {\n-52 private:\n-53 typedef _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\b> _\bB_\ba_\bs_\be;\n-54\n-55 public:\n-56 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-57 typedef boost::shared_ptr shared_ptr;\n-58\n-_\b6_\b0 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be() {}\n-61\n-63 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& other, double tol = 1e-9) const;\n-64\n-65 private:\n-_\b6_\b7 friend class boost::serialization::access;\n-68 template\n-69 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-70 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-71 }\n-72 };\n-73\n-_\b7_\b5template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be> : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n-_\b7_\b6template<> struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be> : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {};\n+_\b4_\b7inline _\bP_\bo_\bi_\bn_\bt_\b2 _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*(double s, const _\bP_\bo_\bi_\bn_\bt_\b2& p) {\n+48 return _\bP_\bo_\bi_\bn_\bt_\b2(s * p.x(), s * p.y());\n+49}\n+50\n+51/*\n+52 * @brief Circle-circle intersection, given normalized radii.\n+53 * Calculate f and h, respectively the parallel and perpendicular distance of\n+54 * the intersections of two circles along and from the line connecting the\n+centers.\n+55 * Both are dimensionless fractions of the distance d between the circle\n+centers.\n+56 * If the circles do not intersect or they are identical, returns boost::\n+none.\n+57 * If one solution (touching circles, as determined by tol), h will be\n+exactly zero.\n+58 * h is a good measure for how accurate the intersection will be, as when\n+circles touch\n+59 * or nearly touch, the intersection is ill-defined with noisy radius\n+measurements.\n+60 * @param R_d : R/d, ratio of radius of first circle to distance between\n+centers\n+61 * @param r_d : r/d, ratio of radius of second circle to distance between\n+centers\n+62 * @param tol: absolute tolerance below which we consider touching circles\n+63 * @return optional Point2 with f and h, boost::none if no solution.\n+64 */\n+65GTSAM_EXPORT boost::optional circleCircleIntersection(double R_d,\n+double r_d, double tol = 1e-9);\n+66\n+67/*\n+68 * @brief Circle-circle intersection, from the normalized radii solution.\n+69 * @param c1 center of first circle\n+70 * @param c2 center of second circle\n+71 * @return list of solutions (0,1, or 2). Identical circles will return empty\n+list, as well.\n+72 */\n+73GTSAM_EXPORT std::list circleCircleIntersection(_\bP_\bo_\bi_\bn_\bt_\b2 c1, _\bP_\bo_\bi_\bn_\bt_\b2 c2,\n+boost::optional fh);\n+74\n+76GTSAM_EXPORT Point2Pair _\bm_\be_\ba_\bn_\bs(const std::vector &abPointPairs);\n 77\n-78} //\\ namespace gtsam\n-79\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be_\b._\bh\n-Base class for cliques of a BayesTree.\n-_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n-Bayes Tree is a tree of cliques of a Bayes Chain.\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+87GTSAM_EXPORT std::list circleCircleIntersection(_\bP_\bo_\bi_\bn_\bt_\b2 c1, double r1,\n+88 _\bP_\bo_\bi_\bn_\bt_\b2 c2, double r2, double tol = 1e-9);\n+89\n+90template \n+91struct Range;\n+92\n+93template <>\n+_\b9_\b4struct _\bR_\ba_\bn_\bg_\be<_\bP_\bo_\bi_\bn_\bt_\b2, _\bP_\bo_\bi_\bn_\bt_\b2> {\n+95 typedef double result_type;\n+96 double operator()(const _\bP_\bo_\bi_\bn_\bt_\b2& p, const _\bP_\bo_\bi_\bn_\bt_\b2& q,\n+97 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H1 = boost::none,\n+98 _\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\b<_\b1_\b,_\b _\b2_\b> H2 = boost::none) {\n+99 return _\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b2(p, q, H1, H2);\n+100 }\n+101};\n+102\n+103} // \\ namespace gtsam\n+104\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be_\bB_\ba_\bs_\be\n-This is the base class for BayesTree cliques.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTreeCliqueBase.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bC_\bl_\bi_\bq_\bu_\be\n-A clique in a SymbolicBayesTree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesTree.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-A Bayes tree that represents the connectivity between variables but is not\n-associated with any probab...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesTree.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-SymbolicBayesTree()\n-Default constructor, creates an empty Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesTree.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b*\n+Point2 operator*(double s, const Point2 &p)\n+multiply with scalar\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:47\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bP_\bo_\bi_\bn_\bt_\b2\n+Vector2 Point2\n+As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just\n+typedef Point2 to Vector2...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.h:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bm_\be_\ba_\bn_\bs\n+Point2Pair means(const std::vector< Point2Pair > &abPointPairs)\n+Calculate the two means of a set of Point2 pairs.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.cpp:116\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bd_\bi_\bs_\bt_\ba_\bn_\bc_\be_\b2\n+double distance2(const Point2 &p, const Point2 &q, OptionalJacobian< 1, 2 > H1,\n+OptionalJacobian< 1, 2 > H2)\n+distance between two points\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.cpp:39\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bn_\bo_\br_\bm_\b2\n+double norm2(const Point2 &p, OptionalJacobian< 1, 2 > H)\n+Distance of the point from the origin, with Jacobian.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Point2.cpp:27\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\bp_\bt_\bi_\bo_\bn_\ba_\bl_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn\n+OptionalJacobian is an Eigen::Ref like class that can take be constructed using\n+either a fixed size o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn OptionalJacobian.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\ba_\bn_\bg_\be\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BearingRange.h:40\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bP_\bo_\bi_\bn_\bt_\b2_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01349_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01265_source.html", "comments": ["Files 79% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicEliminationTree.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/slam/JacobianFactorSVD.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SymbolicEliminationTree.h
\n+
JacobianFactorSVD.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n-
2
\n-
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n-
4 * Atlanta, Georgia 30332-0415
\n-
5 * All Rights Reserved
\n-
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n-
7
\n-
8 * See LICENSE for the license information
\n-
9
\n-
10 * -------------------------------------------------------------------------- */
\n-
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-
24
\n-
25namespace gtsam {
\n-
26
\n-
\n-
27 class GTSAM_EXPORT SymbolicEliminationTree :
\n-
28 public EliminationTree<SymbolicBayesNet, SymbolicFactorGraph>
\n-
29 {
\n-
30 public:
\n-\n-\n-
33 typedef boost::shared_ptr<This> shared_ptr;
\n+
1/*
\n+
2 * @file JacobianFactorSVD.h
\n+
3 * @date Oct 27, 2013
\n+
4 * @uthor Frank Dellaert
\n+
5 */
\n+
6
\n+
7#pragma once
\n+\n+
9
\n+
10namespace gtsam {
\n+
28template<size_t D, size_t ZDim>
\n+
\n+\n+
30
\n+
31 typedef RegularJacobianFactor<D> Base;
\n+
32 typedef Eigen::Matrix<double, ZDim, D> MatrixZD; // e.g 2 x 6 with Z=Point2
\n+
33 typedef std::pair<Key, Matrix> KeyMatrix;
\n
34
\n-\n-
41 const VariableIndex& structure, const Ordering& order);
\n-
42
\n-\n-
48 const Ordering& order);
\n-
49
\n-
51 bool equals(const This& other, double tol = 1e-9) const;
\n-
52
\n-
53 private:
\n-
54
\n-\n-
57
\n-
58 friend class ::EliminationTreeTester;
\n-
59
\n-
60 };
\n-
\n-
61
\n-
63template<>
\n-
\n-
64struct traits<SymbolicEliminationTree> : public Testable<SymbolicEliminationTree> {
\n-
65};
\n-
\n-
66
\n-
67} //\\ namespace gtsam
\n-\n-\n-\n+
35public:
\n+
36
\n+
\n+\n+
39 }
\n+
\n+
40
\n+
\n+\n+
43 const SharedDiagonal& model = SharedDiagonal())
\n+
44 : Base() {
\n+
45 Matrix zeroMatrix = Matrix::Zero(0, D);
\n+
46 Vector zeroVector = Vector::Zero(0);
\n+
47 std::vector<KeyMatrix> QF;
\n+
48 QF.reserve(keys.size());
\n+
49 for(const Key& key: keys)
\n+
50 QF.push_back(KeyMatrix(key, zeroMatrix));
\n+
51 JacobianFactor::fillTerms(QF, zeroVector, model);
\n+
52 }
\n+
\n+
53
\n+
\n+\n+
65 const KeyVector& keys,
\n+
66 const std::vector<MatrixZD, Eigen::aligned_allocator<MatrixZD> >& Fblocks,
\n+
67 const Matrix& Enull, const Vector& b,
\n+
68 const SharedDiagonal& model = SharedDiagonal())
\n+
69 : Base() {
\n+
70 size_t numKeys = Enull.rows() / ZDim;
\n+
71 size_t m2 = ZDim * numKeys - 3; // TODO: is this not just Enull.rows()?
\n+
72 // PLAIN nullptr SPACE TRICK
\n+
73 // Matrix Q = Enull * Enull.transpose();
\n+
74 // for(const KeyMatrixZD& it: Fblocks)
\n+
75 // QF.push_back(KeyMatrix(it.first, Q.block(0, 2 * j++, m2, 2) * it.second));
\n+
76 // JacobianFactor factor(QF, Q * b);
\n+
77 std::vector<KeyMatrix> QF;
\n+
78 QF.reserve(numKeys);
\n+
79 for (size_t k = 0; k < Fblocks.size(); ++k) {
\n+
80 Key key = keys[k];
\n+
81 QF.emplace_back(
\n+
82 key, (Enull.transpose()).block(0, ZDim * k, m2, ZDim) * Fblocks[k]);
\n+
83 }
\n+
84 JacobianFactor::fillTerms(QF, Enull.transpose() * b, model);
\n+
85 }
\n+
\n+
86};
\n+
\n+
87
\n+
88}
\n+
JacobianFactor class with fixed sized blcoks.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
An elimination tree is a data structure used intermediately during elimination.
Definition EliminationTree.h:52
\n-
Definition Ordering.h:34
\n-
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n-
Definition SymbolicEliminationTree.h:29
\n-
boost::shared_ptr< This > shared_ptr
Shared pointer to this class.
Definition SymbolicEliminationTree.h:33
\n-
EliminationTree< SymbolicBayesNet, SymbolicFactorGraph > Base
Base class.
Definition SymbolicEliminationTree.h:31
\n-
SymbolicEliminationTree This
This class.
Definition SymbolicEliminationTree.h:32
\n-
Symbolic Factor Graph.
Definition SymbolicFactorGraph.h:64
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n+
const KeyVector & keys() const
Access the factor's involved variable keys.
Definition Factor.h:140
\n+
void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal &noiseModel)
Internal function to fill blocks and set dimensions.
Definition JacobianFactor-inl.h:60
\n+
JacobianFactor with constant sized blocks Provides raw memory access versions of linear operator.
Definition RegularJacobianFactor.h:32
\n+
JacobianFactor for Schur complement that uses the "Nullspace Trick" by Mourikis et al.
Definition JacobianFactorSVD.h:29
\n+
JacobianFactorSVD()
Default constructor.
Definition JacobianFactorSVD.h:38
\n+
JacobianFactorSVD(const KeyVector &keys, const std::vector< MatrixZD, Eigen::aligned_allocator< MatrixZD > > &Fblocks, const Matrix &Enull, const Vector &b, const SharedDiagonal &model=SharedDiagonal())
Construct a new JacobianFactorSVD object, createing a reduced-rank Jacobian factor on the CameraSet.
Definition JacobianFactorSVD.h:64
\n+
JacobianFactorSVD(const KeyVector &keys, const SharedDiagonal &model=SharedDiagonal())
Empty constructor with keys.
Definition JacobianFactorSVD.h:42
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,104 +1,116 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicEliminationTree.h\n-_\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n-1/* ---------------------------------------------------------------------------\n--\n-2\n-3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n-4 * Atlanta, Georgia 30332-0415\n-5 * All Rights Reserved\n-6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n-7\n-8 * See LICENSE for the license information\n+JacobianFactorSVD.h\n+1/*\n+2 * @file JacobianFactorSVD.h\n+3 * @date Oct 27, 2013\n+4 * @uthor Frank Dellaert\n+5 */\n+6\n+7#pragma once\n+8#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n 9\n-10 * -------------------------------------------------------------------------\n-- */\n-11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh>\n-24\n-25namespace _\bg_\bt_\bs_\ba_\bm {\n-26\n-_\b2_\b7 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be :\n-28 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-29 {\n-30 public:\n-_\b3_\b1 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b,_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b> _\bB_\ba_\bs_\be;\n-_\b3_\b2 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bT_\bh_\bi_\bs;\n-_\b3_\b3 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n+10namespace _\bg_\bt_\bs_\ba_\bm {\n+28template\n+_\b2_\b9class _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD: public _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br {\n+30\n+31 typedef _\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b<_\bD_\b> Base;\n+32 typedef Eigen::Matrix MatrixZD; // e.g 2 x 6 with Z=Point2\n+33 typedef std::pair KeyMatrix;\n 34\n-40 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n-41 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx& structure, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n-42\n-47 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be(const _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& factorGraph,\n-48 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& order);\n-49\n-51 bool _\be_\bq_\bu_\ba_\bl_\bs(const _\bT_\bh_\bi_\bs& other, double tol = 1e-9) const;\n-52\n-53 private:\n-54\n-56 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be() {}\n-57\n-58 friend class ::EliminationTreeTester;\n-59\n-60 };\n-61\n-63template<>\n-_\b6_\b4struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be> : public\n-_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-65};\n-66\n-67} //\\ namespace gtsam\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\b._\bh\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+35public:\n+36\n+_\b3_\b8 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD() {\n+39 }\n+40\n+_\b4_\b2 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD(const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n+43 const SharedDiagonal& model = SharedDiagonal())\n+44 : Base() {\n+45 Matrix zeroMatrix = Matrix::Zero(0, D);\n+46 Vector zeroVector = Vector::Zero(0);\n+47 std::vector QF;\n+48 QF.reserve(_\bk_\be_\by_\bs.size());\n+49 for(const _\bK_\be_\by& key: _\bk_\be_\by_\bs)\n+50 QF.push_back(KeyMatrix(key, zeroMatrix));\n+51 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(QF, zeroVector, model);\n+52 }\n+53\n+_\b6_\b4 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD(\n+65 const _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br& _\bk_\be_\by_\bs,\n+66 const std::vector >& Fblocks,\n+67 const Matrix& Enull, const Vector& b,\n+68 const SharedDiagonal& model = SharedDiagonal())\n+69 : Base() {\n+70 size_t numKeys = Enull.rows() / ZDim;\n+71 size_t m2 = ZDim * numKeys - 3; // TODO: is this not just Enull.rows()?\n+72 // PLAIN nullptr SPACE TRICK\n+73 // Matrix Q = Enull * Enull.transpose();\n+74 // for(const KeyMatrixZD& it: Fblocks)\n+75 // QF.push_back(KeyMatrix(it.first, Q.block(0, 2 * j++, m2, 2) *\n+it.second));\n+76 // JacobianFactor factor(QF, Q * b);\n+77 std::vector QF;\n+78 QF.reserve(numKeys);\n+79 for (size_t k = 0; k < Fblocks.size(); ++k) {\n+80 _\bK_\be_\by key = _\bk_\be_\by_\bs[k];\n+81 QF.emplace_back(\n+82 key, (Enull.transpose()).block(0, ZDim * k, m2, ZDim) * Fblocks[k]);\n+83 }\n+84 _\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs(QF, Enull.transpose() * b, model);\n+85 }\n+86};\n+87\n+88}\n+_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+JacobianFactor class with fixed sized blcoks.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-An elimination tree is a data structure used intermediately during elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminationTree.h:52\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n-The VariableIndex class computes and stores the block column structure of a\n-factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-Shared pointer to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:33\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bB_\ba_\bs_\be\n-EliminationTree< SymbolicBayesNet, SymbolicFactorGraph > Base\n-Base class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:31\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b:_\b:_\bT_\bh_\bi_\bs\n-SymbolicEliminationTree This\n-This class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-Symbolic Factor Graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n+std::uint64_t Key\n+Integer nonlinear key type.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bk_\be_\by_\bs\n+const KeyVector & keys() const\n+Access the factor's involved variable keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:140\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bf_\bi_\bl_\bl_\bT_\be_\br_\bm_\bs\n+void fillTerms(const TERMS &terms, const Vector &b, const SharedDiagonal\n+&noiseModel)\n+Internal function to fill blocks and set dimensions.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactor-inl.h:60\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bR_\be_\bg_\bu_\bl_\ba_\br_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br\n+JacobianFactor with constant sized blocks Provides raw memory access versions\n+of linear operator.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn RegularJacobianFactor.h:32\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD\n+JacobianFactor for Schur complement that uses the \"Nullspace Trick\" by Mourikis\n+et al.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorSVD.h:29\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD\n+JacobianFactorSVD()\n+Default constructor.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorSVD.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD\n+JacobianFactorSVD(const KeyVector &keys, const std::vector< MatrixZD, Eigen::\n+aligned_allocator< MatrixZD > > &Fblocks, const Matrix &Enull, const Vector &b,\n+const SharedDiagonal &model=SharedDiagonal())\n+Construct a new JacobianFactorSVD object, createing a reduced-rank Jacobian\n+factor on the CameraSet.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorSVD.h:64\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD_\b:_\b:_\bJ_\ba_\bc_\bo_\bb_\bi_\ba_\bn_\bF_\ba_\bc_\bt_\bo_\br_\bS_\bV_\bD\n+JacobianFactorSVD(const KeyVector &keys, const SharedDiagonal\n+&model=SharedDiagonal())\n+Empty constructor with keys.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn JacobianFactorSVD.h:42\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\b._\bh\n+ * _\bs_\bl_\ba_\bm\n+ * J\bJa\bac\bco\bob\bbi\bia\ban\bnF\bFa\bac\bct\bto\bor\brS\bSV\bVD\bD.\b.h\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01352.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00299.html", "comments": ["Files 91% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactorGraph.cpp File Reference\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/geometry/Rot3M.cpp File Reference\n \n \n \n \n \n \n \n@@ -67,15 +67,15 @@\n \n
\n
\n \n \n
\n \n
\n
\n
\n \n
\n \n-
SymbolicFactorGraph.cpp File Reference
\n+
Rot3M.cpp File Reference
\n
\n
\n+\n+

Rotation (internal: 3*3 matrix representation*) \n+More...

\n \n \n \n \n \n

\n Namespaces

namespace  gtsam
 Global functions in a separate testing namespace.
 
\n

Detailed Description

\n-
Date
Oct 29, 2009
\n-
Author
Frank Dellaert
\n+

Rotation (internal: 3*3 matrix representation*)

\n+
Author
Alireza Fathi
\n+
\n+Christian Potthast
\n+
\n+Frank Dellaert
\n+
\n+Richard Roberts
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,20 +1,23 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n _\bN_\ba_\bm_\be_\bs_\bp_\ba_\bc_\be_\bs\n-SymbolicFactorGraph.cpp File Reference\n+Rot3M.cpp File Reference\n+Rotation (internal: 3*3 matrix representation*) _\bM_\bo_\br_\be_\b._\b._\b.\n N\bNa\bam\bme\bes\bsp\bpa\bac\bce\bes\bs\n namespace \u00a0 _\bg_\bt_\bs_\ba_\bm\n \u00a0 Global functions in a separate testing namespace.\n \u00a0\n *\b**\b**\b**\b**\b* D\bDe\bet\bta\bai\bil\ble\bed\bd D\bDe\bes\bsc\bcr\bri\bip\bpt\bti\bio\bon\bn *\b**\b**\b**\b**\b*\n- Date\n- Oct 29, 2009\n+Rotation (internal: 3*3 matrix representation*)\n Author\n+ Alireza Fathi\n+ Christian Potthast\n Frank Dellaert\n+ Richard Roberts\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bc_\bp_\bp\n+ * _\bg_\be_\bo_\bm_\be_\bt_\br_\by\n+ * _\bR_\bo_\bt_\b3_\bM_\b._\bc_\bp_\bp\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01376_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a00692_source.html", "comments": ["Files 88% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactor-inst.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/inference/ISAM-inst.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SymbolicFactor-inst.h
\n+
ISAM-inst.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n
18#pragma once
\n
19
\n-\n-\n-\n-
23#include <gtsam/inference/Key.h>
\n-
24#include <gtsam/base/timing.h>
\n-
25
\n-
26#include <boost/shared_ptr.hpp>
\n-
27#include <boost/make_shared.hpp>
\n-
28
\n-
29#include <utility>
\n-
30
\n-
31namespace gtsam
\n-
32{
\n-
33 namespace internal
\n-
34 {
\n-
37 template<class FACTOR>
\n-
38 std::pair<boost::shared_ptr<SymbolicConditional>, boost::shared_ptr<SymbolicFactor> >
\n-
\n-
39 EliminateSymbolic(const FactorGraph<FACTOR>& factors, const Ordering& keys)
\n-
40 {
\n-
41 gttic(EliminateSymbolic);
\n-
42
\n-
43 // Gather all keys
\n-
44 KeySet allKeys;
\n-
45 for(const boost::shared_ptr<FACTOR>& factor: factors) {
\n-
46 allKeys.insert(factor->begin(), factor->end());
\n-
47 }
\n-
48
\n-
49 // Check keys
\n-
50 for(Key key: keys) {
\n-
51 if(allKeys.find(key) == allKeys.end())
\n-
52 throw std::runtime_error("Requested to eliminate a key that is not in the factors");
\n-
53 }
\n-
54
\n-
55 // Sort frontal keys
\n-
56 KeySet frontals(keys);
\n-
57 const size_t nFrontals = keys.size();
\n-
58
\n-
59 // Build a key vector with the frontals followed by the separator
\n-
60 KeyVector orderedKeys(allKeys.size());
\n-
61 std::copy(keys.begin(), keys.end(), orderedKeys.begin());
\n-
62 std::set_difference(allKeys.begin(), allKeys.end(), frontals.begin(), frontals.end(), orderedKeys.begin() + nFrontals);
\n-
63
\n-
64 // Return resulting conditional and factor
\n-
65 return std::make_pair(
\n-
66 SymbolicConditional::FromKeysShared(orderedKeys, nFrontals),
\n-
67 SymbolicFactor::FromIteratorsShared(orderedKeys.begin() + nFrontals, orderedKeys.end()));
\n-
68 }
\n-
\n-
69 }
\n-
70}
\n-
Timing utilities.
\n-
The base class for all factors.
\n-\n-\n-\n-
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > EliminateSymbolic(const FactorGraph< FACTOR > &factors, const Ordering &keys)
Implementation of dense elimination function for symbolic factors.
Definition SymbolicFactor-inst.h:39
\n+\n+\n+
22
\n+
23namespace gtsam {
\n+
24
\n+
25/* ************************************************************************* */
\n+
26template<class BAYESTREE>
\n+
\n+
27void ISAM<BAYESTREE>::updateInternal(const FactorGraphType& newFactors,
\n+
28 Cliques* orphans, const Eliminate& function) {
\n+
29 // Remove the contaminated part of the Bayes tree
\n+
30 BayesNetType bn;
\n+
31 const KeySet newFactorKeys = newFactors.keys();
\n+
32 if (!this->empty()) {
\n+
33 KeyVector keyVector(newFactorKeys.begin(), newFactorKeys.end());
\n+
34 this->removeTop(keyVector, &bn, orphans);
\n+
35 }
\n+
36
\n+
37 // Add the removed top and the new factors
\n+
38 FactorGraphType factors;
\n+
39 factors += bn;
\n+
40 factors += newFactors;
\n+
41
\n+
42 // Add the orphaned subtrees
\n+
43 for (const sharedClique& orphan : *orphans)
\n+
44 factors += boost::make_shared<BayesTreeOrphanWrapper<Clique> >(orphan);
\n+
45
\n+
46 // Get an ordering where the new keys are eliminated last
\n+
47 const VariableIndex index(factors);
\n+
48 const Ordering ordering = Ordering::ColamdConstrainedLast(index,
\n+
49 KeyVector(newFactorKeys.begin(), newFactorKeys.end()));
\n+
50
\n+
51 // eliminate all factors (top, added, orphans) into a new Bayes tree
\n+
52 auto bayesTree = factors.eliminateMultifrontal(ordering, function, index);
\n+
53
\n+
54 // Re-add into Bayes tree data structures
\n+
55 this->roots_.insert(this->roots_.end(), bayesTree->roots().begin(),
\n+
56 bayesTree->roots().end());
\n+
57 this->nodes_.insert(bayesTree->nodes().begin(), bayesTree->nodes().end());
\n+
58}
\n+
\n+
59
\n+
60/* ************************************************************************* */
\n+
61template<class BAYESTREE>
\n+
\n+
62void ISAM<BAYESTREE>::update(const FactorGraphType& newFactors,
\n+
63 const Eliminate& function) {
\n+
\n+
64 Cliques orphans;
\n+
65 this->updateInternal(newFactors, &orphans, function);
\n+
66}
\n+
\n+
\n+
67
\n+
68}
\n+\n+
Incremental update functionality (iSAM) for BayesTree.
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n \n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n+
Definition BayesTree.h:276
\n+
void update(const FactorGraphType &newFactors, const Eliminate &function=EliminationTraitsType::DefaultEliminate)
update the Bayes tree with a set of new factors, typically derived from measurements
Definition ISAM-inst.h:62
\n+
void updateInternal(const FactorGraphType &newFactors, Cliques *orphans, const Eliminate &function=EliminationTraitsType::DefaultEliminate)
updateInternal provides access to list of orphans for drawing purposes
Definition ISAM-inst.h:27
\n
Definition Ordering.h:34
\n-
static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER &keys, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition SymbolicConditional.h:94
\n-
static SymbolicFactor::shared_ptr FromIteratorsShared(KEYITERATOR beginKey, KEYITERATOR endKey)
Constructor from a collection of keys.
Definition SymbolicFactor.h:121
\n+
static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const KeyVector &constrainLast, bool forceOrder=false)
Compute a fill-reducing ordering using constrained COLAMD from a factor graph (see details for note o...
Definition Ordering.h:114
\n+
The VariableIndex class computes and stores the block column structure of a factor graph.
Definition VariableIndex.h:43
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,13 +1,13 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicFactor-inst.h\n+ISAM-inst.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n@@ -16,105 +16,98 @@\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n 18#pragma once\n 19\n-20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bK_\be_\by_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh>\n-25\n-26#include \n-27#include \n-28\n-29#include \n-30\n-31namespace _\bg_\bt_\bs_\ba_\bm\n-32{\n-33 namespace internal\n-34 {\n-37 template\n-38 std::pair, boost::\n-shared_ptr >\n-_\b3_\b9 _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bF_\bA_\bC_\bT_\bO_\bR_\b>& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys)\n-40 {\n-41 gttic(_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc);\n-42\n-43 // Gather all keys\n-44 _\bK_\be_\by_\bS_\be_\bt allKeys;\n-45 for(const boost::shared_ptr& factor: factors) {\n-46 allKeys.insert(factor->begin(), factor->end());\n-47 }\n-48\n-49 // Check keys\n-50 for(_\bK_\be_\by key: keys) {\n-51 if(allKeys.find(key) == allKeys.end())\n-52 throw std::runtime_error(\"Requested to eliminate a key that is not in the\n-factors\");\n-53 }\n-54\n-55 // Sort frontal keys\n-56 _\bK_\be_\by_\bS_\be_\bt frontals(keys);\n-57 const size_t nFrontals = keys.size();\n-58\n-59 // Build a key vector with the frontals followed by the separator\n-60 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br orderedKeys(allKeys.size());\n-61 std::copy(keys.begin(), keys.end(), orderedKeys.begin());\n-62 std::set_difference(allKeys.begin(), allKeys.end(), frontals.begin(),\n-frontals.end(), orderedKeys.begin() + nFrontals);\n-63\n-64 // Return resulting conditional and factor\n-65 return std::make_pair(\n-66 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd(orderedKeys, nFrontals),\n-67 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd(orderedKeys.begin() + nFrontals,\n-orderedKeys.end()));\n-68 }\n-69 }\n-70}\n-_\bt_\bi_\bm_\bi_\bn_\bg_\b._\bh\n-Timing utilities.\n-_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-The base class for all factors.\n-_\bK_\be_\by_\b._\bh\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b._\bh\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bi_\bn_\bt_\be_\br_\bn_\ba_\bl_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc\n-std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr<\n-SymbolicFactor > > EliminateSymbolic(const FactorGraph< FACTOR > &factors,\n-const Ordering &keys)\n-Implementation of dense elimination function for symbolic factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor-inst.h:39\n+20#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bI_\bS_\bA_\bM_\b._\bh>\n+21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh>\n+22\n+23namespace _\bg_\bt_\bs_\ba_\bm {\n+24\n+25/* *************************************************************************\n+*/\n+26template\n+_\b2_\b7void _\bI_\bS_\bA_\bM_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b>_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl(const FactorGraphType& newFactors,\n+28 Cliques* orphans, const Eliminate& function) {\n+29 // Remove the contaminated part of the Bayes tree\n+30 BayesNetType bn;\n+31 const _\bK_\be_\by_\bS_\be_\bt newFactorKeys = newFactors.keys();\n+32 if (!this->empty()) {\n+33 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br keyVector(newFactorKeys.begin(), newFactorKeys.end());\n+34 this->removeTop(keyVector, &bn, orphans);\n+35 }\n+36\n+37 // Add the removed top and the new factors\n+38 FactorGraphType factors;\n+39 factors += bn;\n+40 factors += newFactors;\n+41\n+42 // Add the orphaned subtrees\n+43 for (const sharedClique& orphan : *orphans)\n+44 factors += boost::make_shared<_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br_\b<_\bC_\bl_\bi_\bq_\bu_\be_\b> >(orphan);\n+45\n+46 // Get an ordering where the new keys are eliminated last\n+47 const _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx index(factors);\n+48 const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg ordering = _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt(index,\n+49 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br(newFactorKeys.begin(), newFactorKeys.end()));\n+50\n+51 // eliminate all factors (top, added, orphans) into a new Bayes tree\n+52 auto bayesTree = factors.eliminateMultifrontal(ordering, function, index);\n+53\n+54 // Re-add into Bayes tree data structures\n+55 this->roots_.insert(this->roots_.end(), bayesTree->roots().begin(),\n+56 bayesTree->roots().end());\n+57 this->nodes_.insert(bayesTree->nodes().begin(), bayesTree->nodes().end());\n+58}\n+59\n+60/* *************************************************************************\n+*/\n+61template\n+_\b6_\b2void _\bI_\bS_\bA_\bM_\b<_\bB_\bA_\bY_\bE_\bS_\bT_\bR_\bE_\bE_\b>_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be(const FactorGraphType& newFactors,\n+63 const Eliminate& function) {\n+_\b6_\b4 Cliques orphans;\n+65 this->updateInternal(newFactors, &orphans, function);\n+66}\n+67\n+68}\n+_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx_\b._\bh\n+_\bI_\bS_\bA_\bM_\b._\bh\n+Incremental update functionality (iSAM) for BayesTree.\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n FastVector< Key > KeyVector\n Define collection type once and for all - also used in wrappers.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bO_\br_\bp_\bh_\ba_\bn_\bW_\br_\ba_\bp_\bp_\be_\br\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn BayesTree.h:276\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be\n+void update(const FactorGraphType &newFactors, const Eliminate\n+&function=EliminationTraitsType::DefaultEliminate)\n+update the Bayes tree with a set of new factors, typically derived from\n+measurements\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM-inst.h:62\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b:_\b:_\bu_\bp_\bd_\ba_\bt_\be_\bI_\bn_\bt_\be_\br_\bn_\ba_\bl\n+void updateInternal(const FactorGraphType &newFactors, Cliques *orphans, const\n+Eliminate &function=EliminationTraitsType::DefaultEliminate)\n+updateInternal provides access to list of orphans for drawing purposes\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM-inst.h:27\n _\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\b:_\b:_\bF_\br_\bo_\bm_\bK_\be_\by_\bs_\bS_\bh_\ba_\br_\be_\bd\n-static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER &keys,\n-size_t nrFrontals)\n-Named constructor from an arbitrary number of keys and frontals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b:_\b:_\bF_\br_\bo_\bm_\bI_\bt_\be_\br_\ba_\bt_\bo_\br_\bs_\bS_\bh_\ba_\br_\be_\bd\n-static SymbolicFactor::shared_ptr FromIteratorsShared(KEYITERATOR beginKey,\n-KEYITERATOR endKey)\n-Constructor from a collection of keys.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:121\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd_\bC_\bo_\bn_\bs_\bt_\br_\ba_\bi_\bn_\be_\bd_\bL_\ba_\bs_\bt\n+static Ordering ColamdConstrainedLast(const FACTOR_GRAPH &graph, const\n+KeyVector &constrainLast, bool forceOrder=false)\n+Compute a fill-reducing ordering using constrained COLAMD from a factor graph\n+(see details for note o...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:114\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bI_\bn_\bd_\be_\bx\n+The VariableIndex class computes and stores the block column structure of a\n+factor graph.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn VariableIndex.h:43\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b-_\bi_\bn_\bs_\bt_\b._\bh\n+ * _\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be\n+ * _\bI_\bS_\bA_\bM_\b-_\bi_\bn_\bs_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01385_source.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01004_source.html", "comments": ["Files 81% similar despite different names"], "unified_diff": "@@ -1,15 +1,15 @@\n \n \n \n \n \n \n \n-gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/symbolic/SymbolicFactorGraph.h Source File\n+gtsam: /build/reproducible-path/gtsam-4.2.0+dfsg/gtsam/nonlinear/ISAM2Result.h Source File\n \n \n \n \n \n \n \n@@ -72,15 +72,15 @@\n \n
\n
\n \n \n
\n \n
No Matches
\n
\n \n \n \n \n
\n-
SymbolicFactorGraph.h
\n+
ISAM2Result.h
\n
\n
\n-Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n+Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
\n
2
\n
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
\n
4 * Atlanta, Georgia 30332-0415
\n
5 * All Rights Reserved
\n
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
\n
7
\n
8 * See LICENSE for the license information
\n
9
\n
10 * -------------------------------------------------------------------------- */
\n
11
\n-
19#pragma once
\n-
20
\n-\n-\n-\n-
24#include <gtsam/base/types.h>
\n-
25
\n-
26namespace gtsam {
\n-
27
\n-
28 class SymbolicFactorGraph;
\n-
29 class SymbolicConditional;
\n-
30 class SymbolicBayesNet;
\n-
31 class SymbolicEliminationTree;
\n-
32 class SymbolicBayesTree;
\n-
33 class SymbolicJunctionTree;
\n-
34
\n-
35 /* ************************************************************************* */
\n-
\n-\n-
37 {
\n-\n-\n-\n-\n-\n-\n-\n-
46 static std::pair<boost::shared_ptr<ConditionalType>, boost::shared_ptr<FactorType> >
\n-
\n-
47 DefaultEliminate(const FactorGraphType& factors, const Ordering& keys) {
\n-
48 return EliminateSymbolic(factors, keys); }
\n-
\n-
\n-\n-
51 const FactorGraphType& graph,
\n-
52 boost::optional<const VariableIndex&> variableIndex) {
\n-
53 return Ordering::Colamd(*variableIndex);
\n-
54 }
\n-
\n-
55 };
\n-
\n-
56
\n-
57 /* ************************************************************************* */
\n-
\n-
61 class GTSAM_EXPORT SymbolicFactorGraph :
\n-
62 public FactorGraph<SymbolicFactor>,
\n-
63 public EliminateableFactorGraph<SymbolicFactorGraph>
\n-
64 {
\n-
65 public:
\n-
66
\n-\n-\n-\n-
70 typedef boost::shared_ptr<This> shared_ptr;
\n-
71
\n-
74
\n-\n+
18// \\callgraph
\n+
19
\n+
20#pragma once
\n+
21
\n+
22#include <string>
\n+
23#include <vector>
\n+
24
\n+\n+\n+\n+\n+
29
\n+
30#include <boost/variant.hpp>
\n+
31
\n+
32namespace gtsam {
\n+
33
\n+
\n+\n+
54 boost::optional<double> errorBefore;
\n+
55
\n+
66 boost::optional<double> errorAfter;
\n+
67
\n+\n
77
\n-
79 template<typename ITERATOR>
\n-
80 SymbolicFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor) : Base(firstFactor, lastFactor) {}
\n-
81
\n-
83 template<class CONTAINER>
\n-
84 explicit SymbolicFactorGraph(const CONTAINER& factors) : Base(factors) {}
\n+\n
85
\n-
87 template<class DERIVEDFACTOR>
\n-\n+\n
89
\n-
\n-\n-
95 std::initializer_list<boost::shared_ptr<SymbolicFactor>> sharedFactors)
\n-
96 : Base(sharedFactors) {}
\n-
\n-
97
\n-
\n-\n-
100 push_back(boost::make_shared<SymbolicFactor>(c));
\n-
101 }
\n-
\n-
102
\n-
\n-\n-
110 push_back(boost::make_shared<SymbolicFactor>(c));
\n-
111 return *this;
\n-
112 }
\n-
\n-
113
\n-\n-
116
\n-
118
\n-
121
\n-
122 bool equals(const This& fg, double tol = 1e-9) const;
\n-
123
\n-
\n-
125 void print(
\n-
126 const std::string& s = "SymbolicFactorGraph",
\n-
127 const KeyFormatter& formatter = DefaultKeyFormatter) const override {
\n-
128 Base::print(s, formatter);
\n-
129 }
\n-
\n-
130
\n-
132
\n-
135
\n-
137 void push_factor(Key key);
\n-
138
\n-
140 void push_factor(Key key1, Key key2);
\n-
141
\n-
143 void push_factor(Key key1, Key key2, Key key3);
\n-
144
\n-
146 void push_factor(Key key1, Key key2, Key key3, Key key4);
\n-
147
\n-
149
\n-
150 private:
\n-
152 friend class boost::serialization::access;
\n-
153 template<class ARCHIVE>
\n-
154 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
\n-
155 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
\n-
156 }
\n-
157 };
\n-
\n-
158
\n-
160template<>
\n-
\n-
161struct traits<SymbolicFactorGraph> : public Testable<SymbolicFactorGraph> {
\n-
162};
\n+
91 size_t cliques;
\n+
92
\n+\n+
98
\n+\n+
103
\n+\n+
106
\n+\n+
109
\n+\n+
112
\n+
\n+\n+
\n+\n+\n+\n+\n+
133 bool isRelinearized;
\n+\n+
138 bool isNew;
\n+\n+\n+
141 : isReeliminated(false),
\n+\n+\n+
144 isRelinearized(false),
\n+
145 isObserved(false),
\n+
146 isNew(false),
\n+
147 inRootClique(false) {}
\n+
148 };
\n
\n+
149
\n+
150 using StatusMap = FastMap<Key, VariableStatus>;
\n+
151
\n+\n+
154 };
\n+
\n+
155
\n+
158 boost::optional<DetailedResults> detail;
\n+
159
\n+
160 explicit ISAM2Result(bool enableDetailedResults = false) {
\n+
161 if (enableDetailedResults) detail.reset(DetailedResults());
\n+
162 }
\n
163
\n-
164} //\\ namespace gtsam
\n-
Typedefs for easier changing of types.
\n-
Factor Graph Base Class.
\n-
Variable elimination algorithms for factor graphs.
\n-\n+
165 DetailedResults* details() { return detail.get_ptr(); }
\n+
166
\n+
\n+
168 void print(const std::string str = "") const {
\n+
169 using std::cout;
\n+
170 cout << str << " Reelimintated: " << variablesReeliminated
\n+
171 << " Relinearized: " << variablesRelinearized
\n+
172 << " Cliques: " << cliques << std::endl;
\n+
173 }
\n+
\n+
174
\n+\n+
177 size_t getVariablesReeliminated() const { return variablesReeliminated; }
\n+
178 FactorIndices getNewFactorsIndices() const { return newFactorsIndices; }
\n+
179 size_t getCliques() const { return cliques; }
\n+
180 double getErrorBefore() const { return errorBefore ? *errorBefore : std::nan(""); }
\n+
181 double getErrorAfter() const { return errorAfter ? *errorAfter : std::nan(""); }
\n+
182};
\n+
\n+
183
\n+
184} // namespace gtsam
\n+
Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.
\n+
Parameters for iSAM 2.
\n+
Factor Graph consisting of non-linear factors.
\n+
Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail implementation)
\n
Global functions in a separate testing namespace.
Definition chartTesting.h:28
\n-
std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr< SymbolicFactor > > EliminateSymbolic(const SymbolicFactorGraph &factors, const Ordering &keys)
Dense elimination function for symbolic factors.
Definition SymbolicFactor.cpp:36
\n-
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
\n-
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
\n-
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
\n-
Template to create a binary predicate.
Definition Testable.h:111
\n-
A helper that implements the traits interface for GTSAM types.
Definition Testable.h:151
\n-
A factor graph is a bipartite graph with factor nodes connected to variable nodes.
Definition FactorGraph.h:97
\n-
Traits class for eliminateable factor graphs, specifies the types that result from elimination,...
Definition EliminateableFactorGraph.h:36
\n-
EliminateableFactorGraph is a base class for factor graphs that contains elimination algorithms.
Definition EliminateableFactorGraph.h:57
\n-
Definition Ordering.h:34
\n-
static Ordering Colamd(const FACTOR_GRAPH &graph)
Compute a fill-reducing ordering using COLAMD from a factor graph (see details for note on performanc...
Definition Ordering.h:95
\n-
A SymbolicBayesNet is a Bayes Net of purely symbolic conditionals.
Definition SymbolicBayesNet.h:32
\n-
A Bayes tree that represents the connectivity between variables but is not associated with any probab...
Definition SymbolicBayesTree.h:51
\n-
SymbolicConditional is a conditional with keys but no probability data, produced by symbolic eliminat...
Definition SymbolicConditional.h:38
\n-
Definition SymbolicEliminationTree.h:29
\n-
SymbolicFactor represents a symbolic factor that specifies graph topology but is not associated with ...
Definition SymbolicFactor.h:39
\n-
SymbolicFactor FactorType
Type of factors in factor graph.
Definition SymbolicFactorGraph.h:38
\n-
SymbolicFactorGraph FactorGraphType
Type of the factor graph (e.g. GaussianFactorGraph)
Definition SymbolicFactorGraph.h:39
\n-
SymbolicEliminationTree EliminationTreeType
Type of elimination tree.
Definition SymbolicFactorGraph.h:42
\n-
SymbolicBayesNet BayesNetType
Type of Bayes net from sequential elimination.
Definition SymbolicFactorGraph.h:41
\n-
static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr< FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering &keys)
The default dense elimination function.
Definition SymbolicFactorGraph.h:47
\n-
static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::optional< const VariableIndex & > variableIndex)
The default ordering generation function.
Definition SymbolicFactorGraph.h:50
\n-
SymbolicJunctionTree JunctionTreeType
Type of Junction tree.
Definition SymbolicFactorGraph.h:44
\n-
SymbolicBayesTree BayesTreeType
Type of Bayes tree.
Definition SymbolicFactorGraph.h:43
\n-
SymbolicConditional ConditionalType
Type of conditionals from elimination.
Definition SymbolicFactorGraph.h:40
\n-
Symbolic Factor Graph.
Definition SymbolicFactorGraph.h:64
\n-
SymbolicFactorGraph(SymbolicFactor &&c)
Construct from a single factor.
Definition SymbolicFactorGraph.h:99
\n-
SymbolicFactorGraph & operator()(SymbolicFactor &&c)
Add a single factor and return a reference.
Definition SymbolicFactorGraph.h:109
\n-
SymbolicFactorGraph()
Construct empty factor graph.
Definition SymbolicFactorGraph.h:76
\n-
SymbolicFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)
Implicit copy/downcast constructor to override explicit template container constructor.
Definition SymbolicFactorGraph.h:88
\n-
SymbolicFactorGraph(std::initializer_list< boost::shared_ptr< SymbolicFactor > > sharedFactors)
Constructor that takes an initializer list of shared pointers.
Definition SymbolicFactorGraph.h:94
\n-
void print(const std::string &s="SymbolicFactorGraph", const KeyFormatter &formatter=DefaultKeyFormatter) const override
print
Definition SymbolicFactorGraph.h:125
\n-
EliminateableFactorGraph< This > BaseEliminateable
Typedef to base elimination class.
Definition SymbolicFactorGraph.h:69
\n-
boost::shared_ptr< This > shared_ptr
shared_ptr to this class
Definition SymbolicFactorGraph.h:70
\n-
SymbolicFactorGraph This
Typedef to this class.
Definition SymbolicFactorGraph.h:67
\n-
SymbolicFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)
Construct from iterator over factors.
Definition SymbolicFactorGraph.h:80
\n-
virtual ~SymbolicFactorGraph()
Destructor.
Definition SymbolicFactorGraph.h:115
\n-
FactorGraph< SymbolicFactor > Base
Typedef to base factor graph type.
Definition SymbolicFactorGraph.h:68
\n-
SymbolicFactorGraph(const CONTAINER &factors)
Construct from container of factors (shared_ptr or plain objects)
Definition SymbolicFactorGraph.h:84
\n-
A EliminatableClusterTree, i.e., a set of variable clusters with factors, arranged in a tree,...
Definition SymbolicJunctionTree.h:51
\n+
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
\n+
FastVector< FactorIndex > FactorIndices
Define collection types:
Definition Factor.h:34
\n+
FastMap is a thin wrapper around std::map that uses the boost fast_pool_allocator instead of the defa...
Definition FastMap.h:38
\n+\n+
This struct is returned from ISAM2::update() and contains information about the update that is useful...
Definition ISAM2Result.h:41
\n+
size_t variablesRelinearized
The number of variables that were relinearized because their linear deltas exceeded the reslinearizat...
Definition ISAM2Result.h:76
\n+
size_t getVariablesRelinearized() const
Getters and Setters.
Definition ISAM2Result.h:176
\n+
size_t factorsRecalculated
The number of factors that were included in reelimination of the Bayes' tree.
Definition ISAM2Result.h:88
\n+
DetailedResults * details()
Return pointer to detail, 0 if no detail requested.
Definition ISAM2Result.h:165
\n+
boost::optional< double > errorBefore
The nonlinear error of all of the factors, including new factors and variables added during the curre...
Definition ISAM2Result.h:54
\n+
void print(const std::string str="") const
Print results.
Definition ISAM2Result.h:168
\n+
boost::optional< DetailedResults > detail
Detailed results, if enabled by ISAM2Params::enableDetailedResults.
Definition ISAM2Result.h:158
\n+
size_t cliques
The number of cliques in the Bayes' Tree.
Definition ISAM2Result.h:91
\n+
KeySet keysWithRemovedFactors
Keys of variables that had factors removed.
Definition ISAM2Result.h:108
\n+
size_t variablesReeliminated
The number of variables that were reeliminated as parts of the Bayes' Tree were recalculated,...
Definition ISAM2Result.h:84
\n+
KeySet unusedKeys
Unused keys, and indices for unused keys, i.e., keys that are empty now and do not appear in the new ...
Definition ISAM2Result.h:102
\n+
KeyVector observedKeys
keys for variables that were observed, i.e., not unused.
Definition ISAM2Result.h:105
\n+
KeySet markedKeys
All keys that were marked during the update process.
Definition ISAM2Result.h:111
\n+
FactorIndices newFactorsIndices
The indices of the newly-added factors, in 1-to-1 correspondence with the factors passed as newFactor...
Definition ISAM2Result.h:97
\n+
boost::optional< double > errorAfter
The nonlinear error of all of the factors computed after the current update, meaning that variables a...
Definition ISAM2Result.h:66
\n+
A struct holding detailed results, which must be enabled with ISAM2Params::enableDetailedResults.
Definition ISAM2Result.h:117
\n+
StatusMap variableStatus
The status of each variable during this update, see VariableStatus.
Definition ISAM2Result.h:153
\n+
The status of a single variable, this struct is stored in DetailedResults::variableStatus.
Definition ISAM2Result.h:120
\n+
bool isRelinearizeInvolved
Whether the variable was below the relinearization threshold but was relinearized by being involved i...
Definition ISAM2Result.h:128
\n+
bool isObserved
Whether the variable was relinearized, either by being above the relinearization threshold or by invo...
Definition ISAM2Result.h:136
\n+
bool isNew
Whether the variable itself was just added.
Definition ISAM2Result.h:138
\n+
bool isAboveRelinThreshold
Whether the variable was just relinearized due to being above the relinearization threshold.
Definition ISAM2Result.h:125
\n+
bool isReeliminated
Whether the variable was just reeliminated, due to being relinearized, observed, new,...
Definition ISAM2Result.h:124
\n+
bool inRootClique
Whether the variable is in the root clique.
Definition ISAM2Result.h:139
\n
\n
\n \n
\n \n
\n \n \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,309 +1,248 @@\n gtsam\u00a04.2.0\n gtsam\n Loading...\n Searching...\n No Matches\n-SymbolicFactorGraph.h\n+ISAM2Result.h\n _\bG_\bo_\b _\bt_\bo_\b _\bt_\bh_\be_\b _\bd_\bo_\bc_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn_\b _\bo_\bf_\b _\bt_\bh_\bi_\bs_\b _\bf_\bi_\bl_\be_\b.\n 1/* ---------------------------------------------------------------------------\n -\n 2\n 3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,\n 4 * Atlanta, Georgia 30332-0415\n 5 * All Rights Reserved\n 6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)\n 7\n 8 * See LICENSE for the license information\n 9\n 10 * -------------------------------------------------------------------------\n - */\n 11\n-19#pragma once\n-20\n-21#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc_\b/_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh>\n-22#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-23#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bi_\bn_\bf_\be_\br_\be_\bn_\bc_\be_\b/_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n-24#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bb_\ba_\bs_\be_\b/_\bt_\by_\bp_\be_\bs_\b._\bh>\n-25\n-26namespace _\bg_\bt_\bs_\ba_\bm {\n-27\n-28 class SymbolicFactorGraph;\n-29 class SymbolicConditional;\n-30 class SymbolicBayesNet;\n-31 class SymbolicEliminationTree;\n-32 class SymbolicBayesTree;\n-33 class SymbolicJunctionTree;\n-34\n-35 /* *************************************************************************\n-*/\n-_\b3_\b6 template<> struct _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh>\n-37 {\n-_\b3_\b8 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br _\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be;\n-_\b3_\b9 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be;\n-_\b4_\b0 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be;\n-_\b4_\b1 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt _\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be;\n-_\b4_\b2 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-_\b4_\b3 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be _\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-_\b4_\b4 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be _\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be;\n-46 static std::pair, boost::\n-shared_ptr >\n-_\b4_\b7 _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& factors, const _\bO_\br_\bd_\be_\br_\bi_\bn_\bg& keys) {\n-48 return _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc(factors, keys); }\n-_\b5_\b0 static _\bO_\br_\bd_\be_\br_\bi_\bn_\bg _\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc(\n-51 const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be& graph,\n-52 boost::optional variableIndex) {\n-53 return _\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd(*variableIndex);\n-54 }\n-55 };\n-56\n-57 /* *************************************************************************\n-*/\n-_\b6_\b1 class GTSAM_EXPORT _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh :\n-62 public _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh,\n-63 public _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-64 {\n-65 public:\n-66\n-_\b6_\b7 typedef _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh _\bT_\bh_\bi_\bs;\n-_\b6_\b8 typedef _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b> _\bB_\ba_\bs_\be;\n-_\b6_\b9 typedef _\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bT_\bh_\bi_\bs_\b> _\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be;\n-_\b7_\b0 typedef boost::shared_ptr _\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br;\n-71\n-74\n-_\b7_\b6 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n+18// \\callgraph\n+19\n+20#pragma once\n+21\n+22#include \n+23#include \n+24\n+25#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bl_\bi_\bn_\be_\ba_\br_\b/_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh>\n+26#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh>\n+27#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh>\n+28#include <_\bg_\bt_\bs_\ba_\bm_\b/_\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\b/_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh>\n+29\n+30#include \n+31\n+32namespace _\bg_\bt_\bs_\ba_\bm {\n+33\n+_\b4_\b1struct _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt {\n+_\b5_\b4 boost::optional _\be_\br_\br_\bo_\br_\bB_\be_\bf_\bo_\br_\be;\n+55\n+_\b6_\b6 boost::optional _\be_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br;\n+67\n+_\b7_\b6 size_t _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd;\n 77\n-79 template\n-_\b8_\b0 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(ITERATOR firstFactor, ITERATOR lastFactor) : _\bB_\ba_\bs_\be\n-(firstFactor, lastFactor) {}\n-81\n-83 template\n-_\b8_\b4 explicit _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const CONTAINER& factors) : _\bB_\ba_\bs_\be(factors) {}\n+_\b8_\b4 size_t _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd;\n 85\n-87 template\n-_\b8_\b8 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(const _\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b<_\bD_\bE_\bR_\bI_\bV_\bE_\bD_\bF_\bA_\bC_\bT_\bO_\bR_\b>& graph) : _\bB_\ba_\bs_\be(graph)\n-{}\n+_\b8_\b8 size_t _\bf_\ba_\bc_\bt_\bo_\br_\bs_\bR_\be_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bd;\n 89\n-_\b9_\b4 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(\n-95 std::initializer_list> sharedFactors)\n-96 : _\bB_\ba_\bs_\be(sharedFactors) {}\n-97\n-_\b9_\b9 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh(_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br&& c) {\n-100 push_back(boost::make_shared(c));\n-101 }\n-102\n-_\b1_\b0_\b9 _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh& _\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)(_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br&& c) {\n-110 push_back(boost::make_shared(c));\n-111 return *this;\n-112 }\n-113\n-_\b1_\b1_\b5 virtual _\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh() {}\n-116\n-118\n-121\n-122 bool _\be_\bq_\bu_\ba_\bl_\bs(const This& fg, double tol = 1e-9) const;\n-123\n-_\b1_\b2_\b5 void _\bp_\br_\bi_\bn_\bt(\n-126 const std::string& s = \"SymbolicFactorGraph\",\n-127 const _\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br& formatter = DefaultKeyFormatter) const override {\n-128 Base::print(s, formatter);\n-129 }\n-130\n-132\n-135\n-137 void push_factor(_\bK_\be_\by key);\n-138\n-140 void push_factor(_\bK_\be_\by key1, _\bK_\be_\by key2);\n-141\n-143 void push_factor(_\bK_\be_\by key1, _\bK_\be_\by key2, _\bK_\be_\by key3);\n-144\n-146 void push_factor(_\bK_\be_\by key1, _\bK_\be_\by key2, _\bK_\be_\by key3, _\bK_\be_\by key4);\n-147\n+_\b9_\b1 size_t _\bc_\bl_\bi_\bq_\bu_\be_\bs;\n+92\n+_\b9_\b7 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs _\bn_\be_\bw_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bI_\bn_\bd_\bi_\bc_\be_\bs;\n+98\n+_\b1_\b0_\b2 _\bK_\be_\by_\bS_\be_\bt _\bu_\bn_\bu_\bs_\be_\bd_\bK_\be_\by_\bs;\n+103\n+_\b1_\b0_\b5 _\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br _\bo_\bb_\bs_\be_\br_\bv_\be_\bd_\bK_\be_\by_\bs;\n+106\n+_\b1_\b0_\b8 _\bK_\be_\by_\bS_\be_\bt _\bk_\be_\by_\bs_\bW_\bi_\bt_\bh_\bR_\be_\bm_\bo_\bv_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs;\n+109\n+_\b1_\b1_\b1 _\bK_\be_\by_\bS_\be_\bt _\bm_\ba_\br_\bk_\be_\bd_\bK_\be_\by_\bs;\n+112\n+_\b1_\b1_\b7 struct _\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs {\n+_\b1_\b2_\b0 struct _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs {\n+_\b1_\b2_\b4 bool _\bi_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd;\n+_\b1_\b2_\b5 bool _\bi_\bs_\bA_\bb_\bo_\bv_\be_\bR_\be_\bl_\bi_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd;\n+_\b1_\b2_\b8 bool _\bi_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bI_\bn_\bv_\bo_\bl_\bv_\be_\bd;\n+133 bool isRelinearized;\n+_\b1_\b3_\b6 bool _\bi_\bs_\bO_\bb_\bs_\be_\br_\bv_\be_\bd;\n+_\b1_\b3_\b8 bool _\bi_\bs_\bN_\be_\bw;\n+_\b1_\b3_\b9 bool _\bi_\bn_\bR_\bo_\bo_\bt_\bC_\bl_\bi_\bq_\bu_\be;\n+140 _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs()\n+141 : _\bi_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd(false),\n+142 _\bi_\bs_\bA_\bb_\bo_\bv_\be_\bR_\be_\bl_\bi_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd(false),\n+143 _\bi_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bI_\bn_\bv_\bo_\bl_\bv_\be_\bd(false),\n+144 isRelinearized(false),\n+145 _\bi_\bs_\bO_\bb_\bs_\be_\br_\bv_\be_\bd(false),\n+146 _\bi_\bs_\bN_\be_\bw(false),\n+147 _\bi_\bn_\bR_\bo_\bo_\bt_\bC_\bl_\bi_\bq_\bu_\be(false) {}\n+148 };\n 149\n-150 private:\n-_\b1_\b5_\b2 friend class boost::serialization::access;\n-153 template\n-154 void serialize(ARCHIVE & ar, const unsigned int /*version*/) {\n-155 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(_\bB_\ba_\bs_\be);\n-156 }\n-157 };\n-158\n-160template<>\n-_\b1_\b6_\b1struct _\bt_\br_\ba_\bi_\bt_\bs<_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh> : public _\bT_\be_\bs_\bt_\ba_\bb_\bl_\be {\n-162};\n+150 using StatusMap = _\bF_\ba_\bs_\bt_\bM_\ba_\bp_\b<_\bK_\be_\by_\b,_\b _\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b>;\n+151\n+_\b1_\b5_\b3 _\bS_\bt_\ba_\bt_\bu_\bs_\bM_\ba_\bp _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs;\n+154 };\n+155\n+_\b1_\b5_\b8 boost::optional _\bd_\be_\bt_\ba_\bi_\bl;\n+159\n+160 explicit _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt(bool enableDetailedResults = false) {\n+161 if (enableDetailedResults) _\bd_\be_\bt_\ba_\bi_\bl.reset(_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs());\n+162 }\n 163\n-164} //\\ namespace gtsam\n-_\bt_\by_\bp_\be_\bs_\b._\bh\n-Typedefs for easier changing of types.\n-_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Factor Graph Base Class.\n-_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n-Variable elimination algorithms for factor graphs.\n-_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\b._\bh\n+_\b1_\b6_\b5 _\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs* _\bd_\be_\bt_\ba_\bi_\bl_\bs() { return _\bd_\be_\bt_\ba_\bi_\bl.get_ptr(); }\n+166\n+_\b1_\b6_\b8 void _\bp_\br_\bi_\bn_\bt(const std::string str = \"\") const {\n+169 using std::cout;\n+170 cout << str << \" Reelimintated: \" << _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd\n+171 << \" Relinearized: \" << _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd\n+172 << \" Cliques: \" << _\bc_\bl_\bi_\bq_\bu_\be_\bs << std::endl;\n+173 }\n+174\n+_\b1_\b7_\b6 size_t _\bg_\be_\bt_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd() const { return _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd; }\n+177 size_t getVariablesReeliminated() const { return _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd; }\n+178 _\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs getNewFactorsIndices() const { return _\bn_\be_\bw_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bI_\bn_\bd_\bi_\bc_\be_\bs; }\n+179 size_t getCliques() const { return _\bc_\bl_\bi_\bq_\bu_\be_\bs; }\n+180 double getErrorBefore() const { return _\be_\br_\br_\bo_\br_\bB_\be_\bf_\bo_\br_\be ? *_\be_\br_\br_\bo_\br_\bB_\be_\bf_\bo_\br_\be : std::\n+nan(\"\"); }\n+181 double getErrorAfter() const { return _\be_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br ? *_\be_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br : std::nan\n+(\"\"); }\n+182};\n+183\n+184} // namespace gtsam\n+_\bG_\ba_\bu_\bs_\bs_\bi_\ba_\bn_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\b._\bh\n+Gaussian Bayes Tree, the result of eliminating a GaussianJunctionTree.\n+_\bI_\bS_\bA_\bM_\b2_\bP_\ba_\br_\ba_\bm_\bs_\b._\bh\n+Parameters for iSAM 2.\n+_\bN_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+Factor Graph consisting of non-linear factors.\n+_\bD_\bo_\bg_\bl_\be_\bg_\bO_\bp_\bt_\bi_\bm_\bi_\bz_\be_\br_\bI_\bm_\bp_\bl_\b._\bh\n+Nonlinear factor graph optimizer using Powell's Dogleg algorithm (detail\n+implementation)\n _\bg_\bt_\bs_\ba_\bm\n Global functions in a separate testing namespace.\n D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn chartTesting.h:28\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc\n-std::pair< boost::shared_ptr< SymbolicConditional >, boost::shared_ptr<\n-SymbolicFactor > > EliminateSymbolic(const SymbolicFactorGraph &factors, const\n-Ordering &keys)\n-Dense elimination function for symbolic factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.cpp:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by\n-std::uint64_t Key\n-Integer nonlinear key type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn types.h:100\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bF_\bo_\br_\bm_\ba_\bt_\bt_\be_\br\n-std::function< std::string(Key)> KeyFormatter\n-Typedef for a function to format a key, i.e. to convert it to a string.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:35\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bt_\br_\ba_\bi_\bt_\bs\n-A manifold defines a space in which there is a notion of a linear tangent space\n-that can be centered ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn concepts.h:30\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\be_\bq_\bu_\ba_\bl_\bs\n-Template to create a binary predicate.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:111\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bT_\be_\bs_\bt_\ba_\bb_\bl_\be\n-A helper that implements the traits interface for GTSAM types.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Testable.h:151\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-A factor graph is a bipartite graph with factor nodes connected to variable\n-nodes.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FactorGraph.h:97\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs\n-Traits class for eliminateable factor graphs, specifies the types that result\n-from elimination,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:36\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-EliminateableFactorGraph is a base class for factor graphs that contains\n-elimination algorithms.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn EliminateableFactorGraph.h:57\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:34\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\b:_\b:_\bC_\bo_\bl_\ba_\bm_\bd\n-static Ordering Colamd(const FACTOR_GRAPH &graph)\n-Compute a fill-reducing ordering using COLAMD from a factor graph (see details\n-for note on performanc...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Ordering.h:95\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bN_\be_\bt\n-A SymbolicBayesNet is a Bayes Net of purely symbolic conditionals.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesNet.h:32\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be\n-A Bayes tree that represents the connectivity between variables but is not\n-associated with any probab...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicBayesTree.h:51\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl\n-SymbolicConditional is a conditional with keys but no probability data,\n-produced by symbolic eliminat...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicConditional.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicEliminationTree.h:29\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br\n-SymbolicFactor represents a symbolic factor that specifies graph topology but\n-is not associated with ...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactor.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bT_\by_\bp_\be\n-SymbolicFactor FactorType\n-Type of factors in factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:38\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\bT_\by_\bp_\be\n-SymbolicFactorGraph FactorGraphType\n-Type of the factor graph (e.g. GaussianFactorGraph)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:39\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-SymbolicEliminationTree EliminationTreeType\n-Type of elimination tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:42\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bN_\be_\bt_\bT_\by_\bp_\be\n-SymbolicBayesNet BayesNetType\n-Type of Bayes net from sequential elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:41\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be\n-static std::pair< boost::shared_ptr< ConditionalType >, boost::shared_ptr<\n-FactorType > > DefaultEliminate(const FactorGraphType &factors, const Ordering\n-&keys)\n-The default dense elimination function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:47\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bD_\be_\bf_\ba_\bu_\bl_\bt_\bO_\br_\bd_\be_\br_\bi_\bn_\bg_\bF_\bu_\bn_\bc\n-static Ordering DefaultOrderingFunc(const FactorGraphType &graph, boost::\n-optional< const VariableIndex & > variableIndex)\n-The default ordering generation function.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:50\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-SymbolicJunctionTree JunctionTreeType\n-Type of Junction tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:44\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bB_\ba_\by_\be_\bs_\bT_\br_\be_\be_\bT_\by_\bp_\be\n-SymbolicBayesTree BayesTreeType\n-Type of Bayes tree.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:43\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\bi_\bo_\bn_\bT_\br_\ba_\bi_\bt_\bs_\b<_\b _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b _\b>_\b:_\b:_\bC_\bo_\bn_\bd_\bi_\bt_\bi_\bo_\bn_\ba_\bl_\bT_\by_\bp_\be\n-SymbolicConditional ConditionalType\n-Type of conditionals from elimination.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:40\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-Symbolic Factor Graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:64\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-SymbolicFactorGraph(SymbolicFactor &&c)\n-Construct from a single factor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:99\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bo_\bp_\be_\br_\ba_\bt_\bo_\br_\b(_\b)\n-SymbolicFactorGraph & operator()(SymbolicFactor &&c)\n-Add a single factor and return a reference.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:109\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-SymbolicFactorGraph()\n-Construct empty factor graph.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:76\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-SymbolicFactorGraph(const FactorGraph< DERIVEDFACTOR > &graph)\n-Implicit copy/downcast constructor to override explicit template container\n-constructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:88\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-SymbolicFactorGraph(std::initializer_list< boost::shared_ptr< SymbolicFactor >\n-> sharedFactors)\n-Constructor that takes an initializer list of shared pointers.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:94\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bp_\br_\bi_\bn_\bt\n-void print(const std::string &s=\"SymbolicFactorGraph\", const KeyFormatter\n-&formatter=DefaultKeyFormatter) const override\n-print\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:125\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be_\bE_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\ba_\bb_\bl_\be\n-EliminateableFactorGraph< This > BaseEliminateable\n-Typedef to base elimination class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:69\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bs_\bh_\ba_\br_\be_\bd_\b__\bp_\bt_\br\n-boost::shared_ptr< This > shared_ptr\n-shared_ptr to this class\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:70\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bT_\bh_\bi_\bs\n-SymbolicFactorGraph This\n-Typedef to this class.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:67\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-SymbolicFactorGraph(ITERATOR firstFactor, ITERATOR lastFactor)\n-Construct from iterator over factors.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:80\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\b~_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-virtual ~SymbolicFactorGraph()\n-Destructor.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:115\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bB_\ba_\bs_\be\n-FactorGraph< SymbolicFactor > Base\n-Typedef to base factor graph type.\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:68\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh\n-SymbolicFactorGraph(const CONTAINER &factors)\n-Construct from container of factors (shared_ptr or plain objects)\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicFactorGraph.h:84\n-_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bJ_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\bT_\br_\be_\be\n-A EliminatableClusterTree, i.e., a set of variable clusters with factors,\n-arranged in a tree,...\n-D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn SymbolicJunctionTree.h:51\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bK_\be_\by_\bV_\be_\bc_\bt_\bo_\br\n+FastVector< Key > KeyVector\n+Define collection type once and for all - also used in wrappers.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Key.h:86\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bc_\bt_\bo_\br_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+FastVector< FactorIndex > FactorIndices\n+Define collection types:\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn Factor.h:34\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bM_\ba_\bp\n+FastMap is a thin wrapper around std::map that uses the boost\n+fast_pool_allocator instead of the defa...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn FastMap.h:38\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bF_\ba_\bs_\bt_\bS_\be_\bt_\b<_\b _\bK_\be_\by_\b _\b>\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt\n+This struct is returned from ISAM2::update() and contains information about the\n+update that is useful...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:41\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd\n+size_t variablesRelinearized\n+The number of variables that were relinearized because their linear deltas\n+exceeded the reslinearizat...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:76\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bg_\be_\bt_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bd\n+size_t getVariablesRelinearized() const\n+Getters and Setters.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:176\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bf_\ba_\bc_\bt_\bo_\br_\bs_\bR_\be_\bc_\ba_\bl_\bc_\bu_\bl_\ba_\bt_\be_\bd\n+size_t factorsRecalculated\n+The number of factors that were included in reelimination of the Bayes' tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:88\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bd_\be_\bt_\ba_\bi_\bl_\bs\n+DetailedResults * details()\n+Return pointer to detail, 0 if no detail requested.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:165\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\be_\br_\br_\bo_\br_\bB_\be_\bf_\bo_\br_\be\n+boost::optional< double > errorBefore\n+The nonlinear error of all of the factors, including new factors and variables\n+added during the curre...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:54\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bp_\br_\bi_\bn_\bt\n+void print(const std::string str=\"\") const\n+Print results.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:168\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bd_\be_\bt_\ba_\bi_\bl\n+boost::optional< DetailedResults > detail\n+Detailed results, if enabled by ISAM2Params::enableDetailedResults.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:158\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bc_\bl_\bi_\bq_\bu_\be_\bs\n+size_t cliques\n+The number of cliques in the Bayes' Tree.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:91\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bk_\be_\by_\bs_\bW_\bi_\bt_\bh_\bR_\be_\bm_\bo_\bv_\be_\bd_\bF_\ba_\bc_\bt_\bo_\br_\bs\n+KeySet keysWithRemovedFactors\n+Keys of variables that had factors removed.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:108\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd\n+size_t variablesReeliminated\n+The number of variables that were reeliminated as parts of the Bayes' Tree were\n+recalculated,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:84\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bu_\bn_\bu_\bs_\be_\bd_\bK_\be_\by_\bs\n+KeySet unusedKeys\n+Unused keys, and indices for unused keys, i.e., keys that are empty now and do\n+not appear in the new ...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:102\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bo_\bb_\bs_\be_\br_\bv_\be_\bd_\bK_\be_\by_\bs\n+KeyVector observedKeys\n+keys for variables that were observed, i.e., not unused.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:105\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bm_\ba_\br_\bk_\be_\bd_\bK_\be_\by_\bs\n+KeySet markedKeys\n+All keys that were marked during the update process.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:111\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bn_\be_\bw_\bF_\ba_\bc_\bt_\bo_\br_\bs_\bI_\bn_\bd_\bi_\bc_\be_\bs\n+FactorIndices newFactorsIndices\n+The indices of the newly-added factors, in 1-to-1 correspondence with the\n+factors passed as newFactor...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:97\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\be_\br_\br_\bo_\br_\bA_\bf_\bt_\be_\br\n+boost::optional< double > errorAfter\n+The nonlinear error of all of the factors computed after the current update,\n+meaning that variables a...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:66\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs\n+A struct holding detailed results, which must be enabled with ISAM2Params::\n+enableDetailedResults.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:117\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs\n+StatusMap variableStatus\n+The status of each variable during this update, see VariableStatus.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:153\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs\n+The status of a single variable, this struct is stored in DetailedResults::\n+variableStatus.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:120\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bs_\bR_\be_\bl_\bi_\bn_\be_\ba_\br_\bi_\bz_\be_\bI_\bn_\bv_\bo_\bl_\bv_\be_\bd\n+bool isRelinearizeInvolved\n+Whether the variable was below the relinearization threshold but was\n+relinearized by being involved i...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:128\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bs_\bO_\bb_\bs_\be_\br_\bv_\be_\bd\n+bool isObserved\n+Whether the variable was relinearized, either by being above the\n+relinearization threshold or by invo...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:136\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bs_\bN_\be_\bw\n+bool isNew\n+Whether the variable itself was just added.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:138\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bs_\bA_\bb_\bo_\bv_\be_\bR_\be_\bl_\bi_\bn_\bT_\bh_\br_\be_\bs_\bh_\bo_\bl_\bd\n+bool isAboveRelinThreshold\n+Whether the variable was just relinearized due to being above the\n+relinearization threshold.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:125\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bs_\bR_\be_\be_\bl_\bi_\bm_\bi_\bn_\ba_\bt_\be_\bd\n+bool isReeliminated\n+Whether the variable was just reeliminated, due to being relinearized,\n+observed, new,...\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:124\n+_\bg_\bt_\bs_\ba_\bm_\b:_\b:_\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b:_\b:_\bD_\be_\bt_\ba_\bi_\bl_\be_\bd_\bR_\be_\bs_\bu_\bl_\bt_\bs_\b:_\b:_\bV_\ba_\br_\bi_\ba_\bb_\bl_\be_\bS_\bt_\ba_\bt_\bu_\bs_\b:_\b:_\bi_\bn_\bR_\bo_\bo_\bt_\bC_\bl_\bi_\bq_\bu_\be\n+bool inRootClique\n+Whether the variable is in the root clique.\n+D\bDe\bef\bfi\bin\bni\bit\bti\bio\bon\bn ISAM2Result.h:139\n * _\bg_\bt_\bs_\ba_\bm\n- * _\bs_\by_\bm_\bb_\bo_\bl_\bi_\bc\n- * _\bS_\by_\bm_\bb_\bo_\bl_\bi_\bc_\bF_\ba_\bc_\bt_\bo_\br_\bG_\br_\ba_\bp_\bh_\b._\bh\n+ * _\bn_\bo_\bn_\bl_\bi_\bn_\be_\ba_\br\n+ * _\bI_\bS_\bA_\bM_\b2_\bR_\be_\bs_\bu_\bl_\bt_\b._\bh\n * Generated on Tue Jan 9 2024 05:51:35 for gtsam by _\b[_\bd_\bo_\bx_\by_\bg_\be_\bn_\b]1.9.8\n"}]}, {"source1": "./usr/share/doc/libgtsam-dev/html/a01403.html", "source2": "./usr/share/doc/libgtsam-dev/html/a01394.html", "comments": ["Files 98% similar despite different names"], "unified_diff": "@@ -67,15 +67,15 @@\n
\n
\n
\n \n \n
\n \n
Author
Frank Dellaert
\n
Date
November 2018
\n
\n \n \n
\n \n
\n \n \n"}]}]}]}]}
\n \n-
LevenbergMarquardtParams.cpp File Reference
\n+Namespaces |\n+Macros |\n+Functions